mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-01-31 06:42:03 +00:00
Merge main into kanban-scaling
Resolves merge conflicts while preserving: - Kanban scaling improvements (window sizing, bounce prevention, debouncing) - Main's sidebar refactoring into hooks - Main's openInEditor functionality for VS Code integration 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -15,6 +15,7 @@ npm install @automaker/types
|
||||
## Exports
|
||||
|
||||
### Provider Types
|
||||
|
||||
Types for AI provider integration and Claude SDK.
|
||||
|
||||
```typescript
|
||||
@@ -26,23 +27,20 @@ import type {
|
||||
ProviderMessage,
|
||||
InstallationStatus,
|
||||
ValidationResult,
|
||||
ModelDefinition
|
||||
ModelDefinition,
|
||||
} from '@automaker/types';
|
||||
```
|
||||
|
||||
### Feature Types
|
||||
|
||||
Feature management and workflow types.
|
||||
|
||||
```typescript
|
||||
import type {
|
||||
Feature,
|
||||
FeatureStatus,
|
||||
PlanningMode,
|
||||
PlanSpec
|
||||
} from '@automaker/types';
|
||||
import type { Feature, FeatureStatus, PlanningMode, PlanSpec } from '@automaker/types';
|
||||
```
|
||||
|
||||
**Feature Interface:**
|
||||
|
||||
- `id` - Unique feature identifier
|
||||
- `category` - Feature category/type
|
||||
- `description` - Feature description
|
||||
@@ -52,6 +50,7 @@ import type {
|
||||
- `planSpec` - Plan specification and approval status
|
||||
|
||||
### Session Types
|
||||
|
||||
Agent session management.
|
||||
|
||||
```typescript
|
||||
@@ -59,39 +58,32 @@ import type {
|
||||
AgentSession,
|
||||
SessionListItem,
|
||||
CreateSessionParams,
|
||||
UpdateSessionParams
|
||||
UpdateSessionParams,
|
||||
} from '@automaker/types';
|
||||
```
|
||||
|
||||
### Error Types
|
||||
|
||||
Error classification and handling.
|
||||
|
||||
```typescript
|
||||
import type {
|
||||
ErrorType,
|
||||
ErrorInfo
|
||||
} from '@automaker/types';
|
||||
import type { ErrorType, ErrorInfo } from '@automaker/types';
|
||||
```
|
||||
|
||||
### Image Types
|
||||
|
||||
Image handling for prompts.
|
||||
|
||||
```typescript
|
||||
import type {
|
||||
ImageData,
|
||||
ImageContentBlock
|
||||
} from '@automaker/types';
|
||||
import type { ImageData, ImageContentBlock } from '@automaker/types';
|
||||
```
|
||||
|
||||
### Model Types
|
||||
|
||||
Claude model definitions and mappings.
|
||||
|
||||
```typescript
|
||||
import {
|
||||
CLAUDE_MODEL_MAP,
|
||||
DEFAULT_MODELS,
|
||||
type ModelAlias
|
||||
} from '@automaker/types';
|
||||
import { CLAUDE_MODEL_MAP, DEFAULT_MODELS, type ModelAlias } from '@automaker/types';
|
||||
```
|
||||
|
||||
## Usage Example
|
||||
@@ -105,12 +97,12 @@ const feature: Feature = {
|
||||
description: 'Implement user authentication',
|
||||
dependencies: ['database-setup'],
|
||||
status: 'pending',
|
||||
planningMode: 'spec'
|
||||
planningMode: 'spec',
|
||||
};
|
||||
|
||||
const options: ExecuteOptions = {
|
||||
model: 'claude-sonnet-4-20250514',
|
||||
temperature: 0.7
|
||||
temperature: 0.7,
|
||||
};
|
||||
```
|
||||
|
||||
@@ -140,6 +132,7 @@ To maintain the package dependency hierarchy and prevent circular dependencies:
|
||||
4. **Document the rule** - When adding new functionality, ensure it follows this constraint
|
||||
|
||||
This constraint ensures a clean one-way dependency flow:
|
||||
|
||||
```
|
||||
@automaker/types (foundation - no dependencies)
|
||||
↓
|
||||
|
||||
@@ -9,7 +9,10 @@
|
||||
"build": "tsc",
|
||||
"watch": "tsc --watch"
|
||||
},
|
||||
"keywords": ["automaker", "types"],
|
||||
"keywords": [
|
||||
"automaker",
|
||||
"types"
|
||||
],
|
||||
"author": "AutoMaker Team",
|
||||
"license": "SEE LICENSE IN LICENSE",
|
||||
"devDependencies": {
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
/**
|
||||
* Available enhancement modes for transforming task descriptions
|
||||
*/
|
||||
export type EnhancementMode = "improve" | "technical" | "simplify" | "acceptance";
|
||||
export type EnhancementMode = 'improve' | 'technical' | 'simplify' | 'acceptance';
|
||||
|
||||
/**
|
||||
* Example input/output pair for few-shot learning
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Error type classification
|
||||
*/
|
||||
export type ErrorType = "authentication" | "cancellation" | "abort" | "execution" | "unknown";
|
||||
export type ErrorType = 'authentication' | 'cancellation' | 'abort' | 'execution' | 'unknown';
|
||||
|
||||
/**
|
||||
* Classified error information
|
||||
|
||||
@@ -3,27 +3,27 @@
|
||||
*/
|
||||
|
||||
export type EventType =
|
||||
| "agent:stream"
|
||||
| "auto-mode:event"
|
||||
| "auto-mode:started"
|
||||
| "auto-mode:stopped"
|
||||
| "auto-mode:idle"
|
||||
| "auto-mode:error"
|
||||
| "feature:started"
|
||||
| "feature:completed"
|
||||
| "feature:stopped"
|
||||
| "feature:error"
|
||||
| "feature:progress"
|
||||
| "feature:tool-use"
|
||||
| "feature:follow-up-started"
|
||||
| "feature:follow-up-completed"
|
||||
| "feature:verified"
|
||||
| "feature:committed"
|
||||
| "project:analysis-started"
|
||||
| "project:analysis-progress"
|
||||
| "project:analysis-completed"
|
||||
| "project:analysis-error"
|
||||
| "suggestions:event"
|
||||
| "spec-regeneration:event";
|
||||
| 'agent:stream'
|
||||
| 'auto-mode:event'
|
||||
| 'auto-mode:started'
|
||||
| 'auto-mode:stopped'
|
||||
| 'auto-mode:idle'
|
||||
| 'auto-mode:error'
|
||||
| 'feature:started'
|
||||
| 'feature:completed'
|
||||
| 'feature:stopped'
|
||||
| 'feature:error'
|
||||
| 'feature:progress'
|
||||
| 'feature:tool-use'
|
||||
| 'feature:follow-up-started'
|
||||
| 'feature:follow-up-completed'
|
||||
| 'feature:verified'
|
||||
| 'feature:committed'
|
||||
| 'project:analysis-started'
|
||||
| 'project:analysis-progress'
|
||||
| 'project:analysis-completed'
|
||||
| 'project:analysis-error'
|
||||
| 'suggestions:event'
|
||||
| 'spec-regeneration:event';
|
||||
|
||||
export type EventCallback = (type: EventType, payload: unknown) => void;
|
||||
|
||||
@@ -12,6 +12,15 @@ export interface FeatureImagePath {
|
||||
[key: string]: unknown;
|
||||
}
|
||||
|
||||
export interface FeatureTextFilePath {
|
||||
id: string;
|
||||
path: string;
|
||||
filename: string;
|
||||
mimeType: string;
|
||||
content: string; // Text content of the file
|
||||
[key: string]: unknown;
|
||||
}
|
||||
|
||||
export interface Feature {
|
||||
id: string;
|
||||
title?: string;
|
||||
@@ -26,6 +35,7 @@ export interface Feature {
|
||||
spec?: string;
|
||||
model?: string;
|
||||
imagePaths?: Array<string | FeatureImagePath | { path: string; [key: string]: unknown }>;
|
||||
textFilePaths?: FeatureTextFilePath[];
|
||||
// Branch info - worktree path is derived at runtime from branchName
|
||||
branchName?: string; // Name of the feature branch (undefined = use current worktree)
|
||||
skipTests?: boolean;
|
||||
@@ -45,7 +55,7 @@ export interface Feature {
|
||||
error?: string;
|
||||
summary?: string;
|
||||
startedAt?: string;
|
||||
[key: string]: unknown; // Keep catch-all for extensibility
|
||||
[key: string]: unknown; // Keep catch-all for extensibility
|
||||
}
|
||||
|
||||
export type FeatureStatus = 'pending' | 'running' | 'completed' | 'failed' | 'verified';
|
||||
|
||||
@@ -12,9 +12,9 @@ export interface ImageData {
|
||||
* Content block for image (Claude SDK format)
|
||||
*/
|
||||
export interface ImageContentBlock {
|
||||
type: "image";
|
||||
type: 'image';
|
||||
source: {
|
||||
type: "base64";
|
||||
type: 'base64';
|
||||
media_type: string;
|
||||
data: string;
|
||||
};
|
||||
|
||||
@@ -16,11 +16,7 @@ export type {
|
||||
} from './provider.js';
|
||||
|
||||
// Feature types
|
||||
export type {
|
||||
Feature,
|
||||
FeatureImagePath,
|
||||
FeatureStatus,
|
||||
} from './feature.js';
|
||||
export type { Feature, FeatureImagePath, FeatureTextFilePath, FeatureStatus } from './feature.js';
|
||||
|
||||
// Session types
|
||||
export type {
|
||||
@@ -31,44 +27,23 @@ export type {
|
||||
} from './session.js';
|
||||
|
||||
// Error types
|
||||
export type {
|
||||
ErrorType,
|
||||
ErrorInfo,
|
||||
} from './error.js';
|
||||
export type { ErrorType, ErrorInfo } from './error.js';
|
||||
|
||||
// Image types
|
||||
export type {
|
||||
ImageData,
|
||||
ImageContentBlock,
|
||||
} from './image.js';
|
||||
export type { ImageData, ImageContentBlock } from './image.js';
|
||||
|
||||
// Model types and constants
|
||||
export {
|
||||
CLAUDE_MODEL_MAP,
|
||||
DEFAULT_MODELS,
|
||||
type ModelAlias,
|
||||
type AgentModel,
|
||||
} from './model.js';
|
||||
export { CLAUDE_MODEL_MAP, DEFAULT_MODELS, type ModelAlias, type AgentModel } from './model.js';
|
||||
|
||||
// Event types
|
||||
export type {
|
||||
EventType,
|
||||
EventCallback,
|
||||
} from './event.js';
|
||||
export type { EventType, EventCallback } from './event.js';
|
||||
|
||||
// Spec types
|
||||
export type {
|
||||
SpecOutput,
|
||||
} from './spec.js';
|
||||
export {
|
||||
specOutputSchema,
|
||||
} from './spec.js';
|
||||
export type { SpecOutput } from './spec.js';
|
||||
export { specOutputSchema } from './spec.js';
|
||||
|
||||
// Enhancement types
|
||||
export type {
|
||||
EnhancementMode,
|
||||
EnhancementExample,
|
||||
} from './enhancement.js';
|
||||
export type { EnhancementMode, EnhancementExample } from './enhancement.js';
|
||||
|
||||
// Settings types and constants
|
||||
export type {
|
||||
@@ -99,10 +74,7 @@ export {
|
||||
} from './settings.js';
|
||||
|
||||
// Model display constants
|
||||
export type {
|
||||
ModelOption,
|
||||
ThinkingLevelOption,
|
||||
} from './model-display.js';
|
||||
export type { ModelOption, ThinkingLevelOption } from './model-display.js';
|
||||
export {
|
||||
CLAUDE_MODELS,
|
||||
THINKING_LEVELS,
|
||||
|
||||
@@ -20,7 +20,7 @@ export interface ModelOption {
|
||||
/** Optional badge text (e.g., "Speed", "Balanced", "Premium") */
|
||||
badge?: string;
|
||||
/** AI provider (currently only "claude") */
|
||||
provider: "claude";
|
||||
provider: 'claude';
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -40,25 +40,25 @@ export interface ThinkingLevelOption {
|
||||
*/
|
||||
export const CLAUDE_MODELS: ModelOption[] = [
|
||||
{
|
||||
id: "haiku",
|
||||
label: "Claude Haiku",
|
||||
description: "Fast and efficient for simple tasks.",
|
||||
badge: "Speed",
|
||||
provider: "claude",
|
||||
id: 'haiku',
|
||||
label: 'Claude Haiku',
|
||||
description: 'Fast and efficient for simple tasks.',
|
||||
badge: 'Speed',
|
||||
provider: 'claude',
|
||||
},
|
||||
{
|
||||
id: "sonnet",
|
||||
label: "Claude Sonnet",
|
||||
description: "Balanced performance with strong reasoning.",
|
||||
badge: "Balanced",
|
||||
provider: "claude",
|
||||
id: 'sonnet',
|
||||
label: 'Claude Sonnet',
|
||||
description: 'Balanced performance with strong reasoning.',
|
||||
badge: 'Balanced',
|
||||
provider: 'claude',
|
||||
},
|
||||
{
|
||||
id: "opus",
|
||||
label: "Claude Opus",
|
||||
description: "Most capable model for complex work.",
|
||||
badge: "Premium",
|
||||
provider: "claude",
|
||||
id: 'opus',
|
||||
label: 'Claude Opus',
|
||||
description: 'Most capable model for complex work.',
|
||||
badge: 'Premium',
|
||||
provider: 'claude',
|
||||
},
|
||||
];
|
||||
|
||||
@@ -68,11 +68,11 @@ export const CLAUDE_MODELS: ModelOption[] = [
|
||||
* Ordered from least to most intensive reasoning.
|
||||
*/
|
||||
export const THINKING_LEVELS: ThinkingLevelOption[] = [
|
||||
{ id: "none", label: "None" },
|
||||
{ id: "low", label: "Low" },
|
||||
{ id: "medium", label: "Medium" },
|
||||
{ id: "high", label: "High" },
|
||||
{ id: "ultrathink", label: "Ultrathink" },
|
||||
{ id: 'none', label: 'None' },
|
||||
{ id: 'low', label: 'Low' },
|
||||
{ id: 'medium', label: 'Medium' },
|
||||
{ id: 'high', label: 'High' },
|
||||
{ id: 'ultrathink', label: 'Ultrathink' },
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -81,11 +81,11 @@ export const THINKING_LEVELS: ThinkingLevelOption[] = [
|
||||
* Used for compact UI elements like badges or dropdowns.
|
||||
*/
|
||||
export const THINKING_LEVEL_LABELS: Record<ThinkingLevel, string> = {
|
||||
none: "None",
|
||||
low: "Low",
|
||||
medium: "Med",
|
||||
high: "High",
|
||||
ultrathink: "Ultra",
|
||||
none: 'None',
|
||||
low: 'Low',
|
||||
medium: 'Med',
|
||||
high: 'High',
|
||||
ultrathink: 'Ultra',
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -103,9 +103,9 @@ export const THINKING_LEVEL_LABELS: Record<ThinkingLevel, string> = {
|
||||
*/
|
||||
export function getModelDisplayName(model: AgentModel | string): string {
|
||||
const displayNames: Record<string, string> = {
|
||||
haiku: "Claude Haiku",
|
||||
sonnet: "Claude Sonnet",
|
||||
opus: "Claude Opus",
|
||||
haiku: 'Claude Haiku',
|
||||
sonnet: 'Claude Sonnet',
|
||||
opus: 'Claude Opus',
|
||||
};
|
||||
return displayNames[model] || model;
|
||||
}
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
* Model alias mapping for Claude models
|
||||
*/
|
||||
export const CLAUDE_MODEL_MAP: Record<string, string> = {
|
||||
haiku: "claude-haiku-4-5",
|
||||
sonnet: "claude-sonnet-4-20250514",
|
||||
opus: "claude-opus-4-5-20251101",
|
||||
haiku: 'claude-haiku-4-5-20251001',
|
||||
sonnet: 'claude-sonnet-4-5-20250929',
|
||||
opus: 'claude-opus-4-5-20251101',
|
||||
} as const;
|
||||
|
||||
/**
|
||||
* Default models per provider
|
||||
*/
|
||||
export const DEFAULT_MODELS = {
|
||||
claude: "claude-opus-4-5-20251101",
|
||||
claude: 'claude-opus-4-5-20251101',
|
||||
} as const;
|
||||
|
||||
export type ModelAlias = keyof typeof CLAUDE_MODEL_MAP;
|
||||
|
||||
@@ -15,7 +15,7 @@ export interface ProviderConfig {
|
||||
* Message in conversation history
|
||||
*/
|
||||
export interface ConversationMessage {
|
||||
role: "user" | "assistant";
|
||||
role: 'user' | 'assistant';
|
||||
content: string | Array<{ type: string; text?: string; source?: object }>;
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ export interface ExecuteOptions {
|
||||
* Content block in a provider message (matches Claude SDK format)
|
||||
*/
|
||||
export interface ContentBlock {
|
||||
type: "text" | "tool_use" | "thinking" | "tool_result";
|
||||
type: 'text' | 'tool_use' | 'thinking' | 'tool_result';
|
||||
text?: string;
|
||||
thinking?: string;
|
||||
name?: string;
|
||||
@@ -52,11 +52,11 @@ export interface ContentBlock {
|
||||
* Message returned by a provider (matches Claude SDK streaming format)
|
||||
*/
|
||||
export interface ProviderMessage {
|
||||
type: "assistant" | "user" | "error" | "result";
|
||||
subtype?: "success" | "error";
|
||||
type: 'assistant' | 'user' | 'error' | 'result';
|
||||
subtype?: 'success' | 'error';
|
||||
session_id?: string;
|
||||
message?: {
|
||||
role: "user" | "assistant";
|
||||
role: 'user' | 'assistant';
|
||||
content: ContentBlock[];
|
||||
};
|
||||
result?: string;
|
||||
@@ -71,7 +71,7 @@ export interface InstallationStatus {
|
||||
installed: boolean;
|
||||
path?: string;
|
||||
version?: string;
|
||||
method?: "cli" | "npm" | "brew" | "sdk";
|
||||
method?: 'cli' | 'npm' | 'brew' | 'sdk';
|
||||
hasApiKey?: boolean;
|
||||
authenticated?: boolean;
|
||||
error?: string;
|
||||
@@ -99,6 +99,6 @@ export interface ModelDefinition {
|
||||
maxOutputTokens?: number;
|
||||
supportsVision?: boolean;
|
||||
supportsTools?: boolean;
|
||||
tier?: "basic" | "standard" | "premium";
|
||||
tier?: 'basic' | 'standard' | 'premium';
|
||||
default?: boolean;
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ export interface SpecOutput {
|
||||
development_guidelines?: string[];
|
||||
implementation_roadmap?: Array<{
|
||||
phase: string;
|
||||
status: "completed" | "in_progress" | "pending";
|
||||
status: 'completed' | 'in_progress' | 'pending';
|
||||
description: string;
|
||||
}>;
|
||||
}
|
||||
@@ -29,91 +29,90 @@ export interface SpecOutput {
|
||||
* Used with Claude's structured output feature for reliable parsing
|
||||
*/
|
||||
export const specOutputSchema = {
|
||||
type: "object",
|
||||
type: 'object',
|
||||
properties: {
|
||||
project_name: {
|
||||
type: "string",
|
||||
description: "The name of the project",
|
||||
type: 'string',
|
||||
description: 'The name of the project',
|
||||
},
|
||||
overview: {
|
||||
type: "string",
|
||||
type: 'string',
|
||||
description:
|
||||
"A comprehensive description of what the project does, its purpose, and key goals",
|
||||
'A comprehensive description of what the project does, its purpose, and key goals',
|
||||
},
|
||||
technology_stack: {
|
||||
type: "array",
|
||||
items: { type: "string" },
|
||||
description:
|
||||
"List of all technologies, frameworks, libraries, and tools used",
|
||||
type: 'array',
|
||||
items: { type: 'string' },
|
||||
description: 'List of all technologies, frameworks, libraries, and tools used',
|
||||
},
|
||||
core_capabilities: {
|
||||
type: "array",
|
||||
items: { type: "string" },
|
||||
description: "List of main features and capabilities the project provides",
|
||||
type: 'array',
|
||||
items: { type: 'string' },
|
||||
description: 'List of main features and capabilities the project provides',
|
||||
},
|
||||
implemented_features: {
|
||||
type: "array",
|
||||
type: 'array',
|
||||
items: {
|
||||
type: "object",
|
||||
type: 'object',
|
||||
properties: {
|
||||
name: {
|
||||
type: "string",
|
||||
description: "Name of the implemented feature",
|
||||
type: 'string',
|
||||
description: 'Name of the implemented feature',
|
||||
},
|
||||
description: {
|
||||
type: "string",
|
||||
description: "Description of what the feature does",
|
||||
type: 'string',
|
||||
description: 'Description of what the feature does',
|
||||
},
|
||||
file_locations: {
|
||||
type: "array",
|
||||
items: { type: "string" },
|
||||
description: "File paths where this feature is implemented",
|
||||
type: 'array',
|
||||
items: { type: 'string' },
|
||||
description: 'File paths where this feature is implemented',
|
||||
},
|
||||
},
|
||||
required: ["name", "description"],
|
||||
required: ['name', 'description'],
|
||||
},
|
||||
description: "Features that have been implemented based on code analysis",
|
||||
description: 'Features that have been implemented based on code analysis',
|
||||
},
|
||||
additional_requirements: {
|
||||
type: "array",
|
||||
items: { type: "string" },
|
||||
description: "Any additional requirements or constraints",
|
||||
type: 'array',
|
||||
items: { type: 'string' },
|
||||
description: 'Any additional requirements or constraints',
|
||||
},
|
||||
development_guidelines: {
|
||||
type: "array",
|
||||
items: { type: "string" },
|
||||
description: "Development standards and practices",
|
||||
type: 'array',
|
||||
items: { type: 'string' },
|
||||
description: 'Development standards and practices',
|
||||
},
|
||||
implementation_roadmap: {
|
||||
type: "array",
|
||||
type: 'array',
|
||||
items: {
|
||||
type: "object",
|
||||
type: 'object',
|
||||
properties: {
|
||||
phase: {
|
||||
type: "string",
|
||||
description: "Name of the implementation phase",
|
||||
type: 'string',
|
||||
description: 'Name of the implementation phase',
|
||||
},
|
||||
status: {
|
||||
type: "string",
|
||||
enum: ["completed", "in_progress", "pending"],
|
||||
description: "Current status of this phase",
|
||||
type: 'string',
|
||||
enum: ['completed', 'in_progress', 'pending'],
|
||||
description: 'Current status of this phase',
|
||||
},
|
||||
description: {
|
||||
type: "string",
|
||||
description: "Description of what this phase involves",
|
||||
type: 'string',
|
||||
description: 'Description of what this phase involves',
|
||||
},
|
||||
},
|
||||
required: ["phase", "status", "description"],
|
||||
required: ['phase', 'status', 'description'],
|
||||
},
|
||||
description: "Phases or roadmap items for implementation",
|
||||
description: 'Phases or roadmap items for implementation',
|
||||
},
|
||||
},
|
||||
required: [
|
||||
"project_name",
|
||||
"overview",
|
||||
"technology_stack",
|
||||
"core_capabilities",
|
||||
"implemented_features",
|
||||
'project_name',
|
||||
'overview',
|
||||
'technology_stack',
|
||||
'core_capabilities',
|
||||
'implemented_features',
|
||||
],
|
||||
additionalProperties: false,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user