@almadar/agent 1.6.2 → 1.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -116,7 +116,7 @@ declare const GenerateRequestSchema: z.ZodObject<{
116
116
  owner?: string | undefined;
117
117
  repo?: string | undefined;
118
118
  }>>;
119
- /** Optional: Use orchestrated generation with complexity-based provider routing (default: true) */
119
+ /** Optional: Use orchestrated generation with complexity-based provider routing (default: false) */
120
120
  useOrchestration: z.ZodOptional<z.ZodBoolean>;
121
121
  }, "strict", z.ZodTypeAny, {
122
122
  message: string;
@@ -1,4 +1,4 @@
1
- import { a as SSEEvent } from '../api-types-Bj2jeOU7.js';
1
+ import { a as SSEEvent } from '../api-types-CXrq-fts.js';
2
2
  import 'zod';
3
3
 
4
4
  /**
@@ -48,7 +48,7 @@ z.object({
48
48
  /** Repository name (e.g., 'hello-world') */
49
49
  repo: z.string().optional()
50
50
  }).optional(),
51
- /** Optional: Use orchestrated generation with complexity-based provider routing (default: true) */
51
+ /** Optional: Use orchestrated generation with complexity-based provider routing (default: false) */
52
52
  useOrchestration: z.boolean().optional()
53
53
  }).strict();
54
54
  z.object({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/api-types.ts","../../src/event-transformer/event-transformer.ts"],"names":["toolCall"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * DeepAgent API Types\n *\n * Request/response types for the skills-only DeepAgent API.\n * All agent behavior is defined through skills - no custom prompts allowed.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Request Schemas\n// ============================================================================\n\n/**\n * Extracted requirements schema - from analysis phase.\n * Used to provide more precise generation guidance.\n */\nexport const ExtractedRequirementsSchema = z.object({\n /** Entity names to create */\n entities: z.array(z.string()).optional().default([]),\n /** State names that should exist */\n states: z.array(z.string()).optional().default([]),\n /** Event/action names */\n events: z.array(z.string()).optional().default([]),\n /** Business rules (become guards) */\n guards: z.array(z.string()).optional().default([]),\n /** Page types needed */\n pages: z.array(z.string()).optional().default([]),\n /** Notifications/side-effects */\n effects: z.array(z.string()).optional().default([]),\n /** Raw requirement statements */\n rawRequirements: z.array(z.string()).optional().default([]),\n});\n\nexport type ExtractedRequirementsInput = z.infer<typeof ExtractedRequirementsSchema>;\n\n/**\n * Generate request schema - skills only, no custom prompts.\n */\nexport const GenerateRequestSchema = z\n .object({\n /** Required: The skill(s) to use for this generation */\n skill: z.union([\n z.string().min(1, 'Skill is required'),\n z.array(z.string().min(1)).min(1, 'At least one skill is required'),\n ]),\n\n /** The user's task/message */\n message: z.string().min(1, 'Message is required'),\n\n /** Optional: Thread ID for session continuity */\n threadId: z.string().uuid().optional(),\n\n /** Optional: Workspace directory (defaults to temp dir) */\n workspace: z.string().optional(),\n\n /** Optional: LLM provider */\n provider: z.enum(['anthropic', 'openai', 'deepseek', 'kimi', 'openrouter']).optional(),\n\n /** Optional: Model name */\n model: z.string().optional(),\n\n /** Optional: Disable human-in-the-loop interrupts (for eval/testing) */\n noInterrupt: z.boolean().optional(),\n\n /** Optional: App ID for persisting schema to Firestore */\n appId: z.string().optional(),\n\n /** Optional: Extracted requirements from analysis phase (for orbital skill) */\n requirements: ExtractedRequirementsSchema.optional(),\n\n /** Optional: GitHub integration configuration */\n github: z.object({\n /** GitHub personal access token */\n token: z.string().min(1, 'GitHub token is required'),\n /** Repository owner (e.g., 'octocat') */\n owner: z.string().optional(),\n /** Repository name (e.g., 'hello-world') */\n repo: z.string().optional(),\n }).optional(),\n\n /** Optional: Use orchestrated generation with complexity-based provider routing (default: true) */\n useOrchestration: z.boolean().optional(),\n })\n .strict();\n\nexport type GenerateRequest = z.infer<typeof GenerateRequestSchema>;\n\n/**\n * Resume request schema - for resuming after interrupt.\n */\nexport const ResumeRequestSchema = z.object({\n /** Required: Thread ID to resume */\n threadId: z.string().uuid(),\n\n /** Required: Decisions for pending interrupts */\n decisions: z.array(\n z.object({\n type: z.enum(['approve', 'edit', 'reject']),\n args: z.record(z.unknown()).optional(),\n })\n ),\n\n /** Optional: Approve all future actions */\n approveAll: z.boolean().optional(),\n});\n\nexport type ResumeRequest = z.infer<typeof ResumeRequestSchema>;\n\n/**\n * Decision type for interrupt responses.\n */\nexport interface Decision {\n type: 'approve' | 'edit' | 'reject';\n args?: Record<string, unknown>;\n}\n\n/**\n * Continue request schema - for multi-turn conversation.\n */\nexport const ContinueRequestSchema = z.object({\n /** Required: Thread ID to continue */\n threadId: z.string().uuid(),\n\n /** Required: Follow-up message */\n message: z.string().min(1, 'Message is required'),\n});\n\nexport type ContinueRequest = z.infer<typeof ContinueRequestSchema>;\n\n// ============================================================================\n// SSE Event Types\n// ============================================================================\n\n/**\n * All possible SSE event types.\n */\nexport type SSEEventType =\n | 'start'\n | 'message'\n | 'tool_call'\n | 'tool_result'\n | 'todo_update'\n | 'todo_detail'\n | 'file_operation'\n | 'schema_update'\n | 'generation_log'\n | 'subagent_event'\n | 'interrupt'\n | 'error'\n | 'complete'\n | 'cancelled'\n | 'app_created'\n | 'schema_phase_validated'\n | 'schema_phase_update'\n | 'orbital_added'\n | 'orbital_schema_complete'\n | 'changeset_recorded'\n | 'snapshot_created';\n\n/**\n * Base SSE event structure.\n */\nexport interface SSEEventBase {\n type: SSEEventType;\n timestamp: number;\n}\n\n/**\n * Start event - sent when streaming begins.\n */\nexport interface StartEvent extends SSEEventBase {\n type: 'start';\n data: {\n threadId: string;\n skill: string;\n workDir: string;\n };\n}\n\n/**\n * Message event - agent text output.\n */\nexport interface MessageEvent extends SSEEventBase {\n type: 'message';\n data: {\n content: string;\n role: 'assistant' | 'user' | 'system';\n isComplete: boolean;\n };\n}\n\n/**\n * Tool call event - when agent invokes a tool.\n */\nexport interface ToolCallEvent extends SSEEventBase {\n type: 'tool_call';\n data: {\n tool: string;\n args: Record<string, unknown>;\n };\n}\n\n/**\n * Tool result event - tool execution result.\n */\nexport interface ToolResultEvent extends SSEEventBase {\n type: 'tool_result';\n data: {\n tool: string;\n result: unknown;\n success: boolean;\n };\n}\n\n/**\n * Todo update event - task progress.\n */\nexport interface TodoUpdateEvent extends SSEEventBase {\n type: 'todo_update';\n data: {\n todos: Array<{\n id: string;\n task: string;\n status: 'pending' | 'in_progress' | 'completed';\n }>;\n };\n}\n\n/**\n * Activity type for todo details.\n */\nexport type TodoActivityType = 'thinking' | 'tool_call' | 'tool_result' | 'code_change';\n\n/**\n * Todo detail event - shows LLM activity for a specific todo.\n */\nexport interface TodoDetailEvent extends SSEEventBase {\n type: 'todo_detail';\n data: {\n todoId: string;\n activityType: TodoActivityType;\n content: string;\n tool?: string;\n args?: Record<string, unknown>;\n success?: boolean;\n filePath?: string;\n diff?: string;\n };\n}\n\n/**\n * File operation event.\n */\nexport interface FileOperationEvent extends SSEEventBase {\n type: 'file_operation';\n data: {\n operation: 'ls' | 'read_file' | 'write_file' | 'edit_file';\n path: string;\n success: boolean;\n };\n}\n\n/**\n * Schema update event.\n */\nexport interface SchemaUpdateEvent extends SSEEventBase {\n type: 'schema_update';\n data: {\n appId: string;\n version: number;\n schema: Record<string, unknown>;\n isNew: boolean;\n snapshotId?: string;\n changesetId?: string;\n };\n}\n\n/**\n * Generation log event.\n */\nexport interface GenerationLogEvent extends SSEEventBase {\n type: 'generation_log';\n data: {\n level: 'info' | 'warn' | 'error' | 'debug';\n message: string;\n data?: Record<string, unknown>;\n orbitalName?: string;\n };\n}\n\n/**\n * Interrupt event - awaiting human decision.\n */\nexport interface InterruptEvent extends SSEEventBase {\n type: 'interrupt';\n data: {\n threadId: string;\n actionRequests: Array<{\n tool: string;\n args: Record<string, unknown>;\n allowedDecisions: ('approve' | 'edit' | 'reject')[];\n description?: string;\n }>;\n };\n}\n\n/**\n * Error event.\n */\nexport interface ErrorEvent extends SSEEventBase {\n type: 'error';\n data: {\n error: string;\n code?: string;\n };\n}\n\n/**\n * Cancelled event.\n */\nexport interface CancelledEvent extends SSEEventBase {\n type: 'cancelled';\n data: {\n threadId: string;\n message: string;\n };\n}\n\n/**\n * Complete event - when generation finishes.\n */\nexport interface CompleteEvent extends SSEEventBase {\n type: 'complete';\n data: {\n threadId: string;\n skill: string;\n workDir: string;\n schemaGenerated: boolean;\n appCompiled: boolean;\n schema?: Record<string, unknown>;\n appId?: string;\n schemaPersisted?: boolean;\n snapshotId?: string;\n changesetId?: string;\n };\n}\n\n/**\n * Subagent event - forwards events from nested agent.\n */\nexport interface SubagentEvent extends SSEEventBase {\n type: 'subagent_event';\n data: {\n orbitalName: string;\n orbitalIndex: number;\n totalOrbitals: number;\n event: {\n type: Exclude<SSEEventType, 'subagent_event'>;\n data: Record<string, unknown>;\n timestamp: number;\n };\n };\n}\n\n/**\n * App created event.\n */\nexport interface AppCreatedEvent extends SSEEventBase {\n type: 'app_created';\n data: {\n appId: string;\n name?: string;\n orbitalCount?: number;\n fromOrbitalPersistence?: boolean;\n };\n}\n\n/**\n * Schema phase validated event.\n */\nexport interface SchemaPhaseValidatedEvent extends SSEEventBase {\n type: 'schema_phase_validated';\n data: {\n appId: string;\n success: boolean;\n errors?: unknown[];\n };\n}\n\n/**\n * Schema phase update event.\n */\nexport interface SchemaPhaseUpdateEvent extends SSEEventBase {\n type: 'schema_phase_update';\n data: Record<string, unknown>;\n}\n\n/**\n * Orbital added event.\n */\nexport interface OrbitalAddedEvent extends SSEEventBase {\n type: 'orbital_added';\n data: {\n appId: string;\n orbitalName: string;\n orbitalIndex: number;\n totalOrbitals: number;\n isNew?: boolean;\n orbitalSchema?: Record<string, unknown>;\n };\n}\n\n/**\n * Orbital schema complete event.\n */\nexport interface OrbitalSchemaCompleteEvent extends SSEEventBase {\n type: 'orbital_schema_complete';\n data: {\n appId: string;\n totalOrbitals: number;\n orbitalNames: string[];\n };\n}\n\n/**\n * Changeset recorded event.\n */\nexport interface ChangesetRecordedEvent extends SSEEventBase {\n type: 'changeset_recorded';\n data: {\n appId: string;\n changesetId: string;\n version: number;\n trackingMode: 'initial' | 'update';\n summary: {\n added: number;\n modified: number;\n removed: number;\n };\n source?: string;\n };\n}\n\n/**\n * Snapshot created event.\n */\nexport interface SnapshotCreatedEvent extends SSEEventBase {\n type: 'snapshot_created';\n data: {\n appId: string;\n snapshotId: string;\n version: number;\n reason: string;\n };\n}\n\n/**\n * Union of all SSE event types.\n */\nexport type SSEEvent =\n | StartEvent\n | MessageEvent\n | ToolCallEvent\n | ToolResultEvent\n | TodoUpdateEvent\n | TodoDetailEvent\n | FileOperationEvent\n | SchemaUpdateEvent\n | GenerationLogEvent\n | SubagentEvent\n | InterruptEvent\n | ErrorEvent\n | CancelledEvent\n | CompleteEvent\n | AppCreatedEvent\n | SchemaPhaseValidatedEvent\n | SchemaPhaseUpdateEvent\n | OrbitalAddedEvent\n | OrbitalSchemaCompleteEvent\n | ChangesetRecordedEvent\n | SnapshotCreatedEvent;\n\n// ============================================================================\n// Response Types\n// ============================================================================\n\n/**\n * List skills response.\n */\nexport interface ListSkillsResponse {\n available: Array<{\n name: string;\n description: string;\n allowedTools?: string[];\n }>;\n installed: Array<{\n name: string;\n description: string;\n allowedTools?: string[];\n }>;\n}\n\n/**\n * Session info response.\n */\nexport interface SessionInfo {\n threadId: string;\n skill: string;\n workDir: string;\n createdAt: number;\n lastActivityAt: number;\n}\n\n/**\n * List sessions response.\n */\nexport interface ListSessionsResponse {\n sessions: SessionInfo[];\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Create an SSE event with timestamp.\n */\nexport function createSSEEvent<T extends SSEEventType>(\n type: T,\n data: Extract<SSEEvent, { type: T }>['data']\n): Extract<SSEEvent, { type: T }> {\n return {\n type,\n data,\n timestamp: Date.now(),\n } as Extract<SSEEvent, { type: T }>;\n}\n\n/**\n * Format an SSE event for transmission.\n */\nexport function formatSSEEvent(event: SSEEvent): string {\n return `data: ${JSON.stringify(event)}\\n\\n`;\n}\n\n/**\n * Parse an SSE event from a data string.\n */\nexport function parseSSEEvent(data: string): SSEEvent {\n return JSON.parse(data) as SSEEvent;\n}\n\n/**\n * Type guard for SSE start events.\n */\nexport function isSSEStartEvent(event: SSEEvent): event is StartEvent {\n return event.type === 'start';\n}\n\n/**\n * Type guard for SSE message events.\n */\nexport function isSSEMessageEvent(event: SSEEvent): event is MessageEvent {\n return event.type === 'message';\n}\n\n/**\n * Type guard for SSE interrupt events.\n */\nexport function isSSEInterruptEvent(event: SSEEvent): event is InterruptEvent {\n return event.type === 'interrupt';\n}\n\n/**\n * Type guard for SSE complete events.\n */\nexport function isSSECompleteEvent(event: SSEEvent): event is CompleteEvent {\n return event.type === 'complete';\n}\n\n/**\n * Type guard for SSE error events.\n */\nexport function isSSEErrorEvent(event: SSEEvent): event is ErrorEvent {\n return event.type === 'error';\n}\n\n/**\n * Type guard for SSE tool call events.\n */\nexport function isSSEToolCallEvent(event: SSEEvent): event is ToolCallEvent {\n return event.type === 'tool_call';\n}\n\n/**\n * Type guard for SSE todo update events.\n */\nexport function isSSETodoUpdateEvent(event: SSEEvent): event is TodoUpdateEvent {\n return event.type === 'todo_update';\n}\n\n/**\n * Type guard for SSE todo detail events.\n */\nexport function isSSETodoDetailEvent(event: SSEEvent): event is TodoDetailEvent {\n return event.type === 'todo_detail';\n}\n\n/**\n * Type guard for SSE subagent events.\n */\nexport function isSSESubagentEvent(event: SSEEvent): event is SubagentEvent {\n return event.type === 'subagent_event';\n}\n\n/**\n * Type guard for SSE generation log events.\n */\nexport function isSSEGenerationLogEvent(event: SSEEvent): event is GenerationLogEvent {\n return event.type === 'generation_log';\n}\n","/**\n * Event Transformer for DeepAgent\n *\n * Transforms raw LangGraph/deepagents events into SSE events.\n * Handles special events like todo updates and file operations.\n *\n * Supports both:\n * - LangGraph event structures (event.tools, event.model_request)\n * - Legacy flat event structures (event.todos, event.tool_call)\n */\n\nimport {\n createSSEEvent,\n type SSEEvent,\n} from '../api-types.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Raw agent event from LangGraph/deepagents.\n */\nexport interface RawAgentEvent {\n // LangGraph nested structures\n tools?: {\n todos?: Array<{ content?: string; task?: string; status?: string; id?: string }>;\n messages?: Array<Record<string, unknown>>;\n };\n model_request?: {\n messages?: Array<Record<string, unknown>>;\n };\n\n // Legacy flat structures\n messages?: Array<{\n role?: string;\n content?: string;\n }>;\n tool_call?: {\n name?: string;\n args?: Record<string, unknown>;\n };\n toolCall?: {\n name?: string;\n args?: Record<string, unknown>;\n };\n tool_result?: {\n name?: string;\n result?: unknown;\n };\n toolResult?: {\n name?: string;\n result?: unknown;\n };\n todos?: Array<{\n id?: string;\n task?: string;\n status?: 'pending' | 'in_progress' | 'completed';\n }>;\n\n // Interrupt events (both formats)\n __interrupt__?: Array<{\n value?: {\n actionRequests?: Array<{ name?: string; args?: Record<string, unknown>; description?: string }>;\n reviewConfigs?: Array<{ allowedDecisions?: string[] }>;\n };\n action?: {\n tool?: string;\n toolInput?: Record<string, unknown>;\n };\n config?: {\n allowedDecisions?: string[];\n };\n }>;\n\n // Other fields\n [key: string]: unknown;\n}\n\n// ============================================================================\n// File Operation Detection\n// ============================================================================\n\n/**\n * File operation tool names from FilesystemMiddleware.\n */\nconst FILE_OPERATION_TOOLS = new Set([\n 'ls',\n 'read_file',\n 'write_file',\n 'edit_file',\n]);\n\n/**\n * Check if a tool name is a file operation.\n */\nfunction isFileOperationTool(toolName: string): boolean {\n return FILE_OPERATION_TOOLS.has(toolName);\n}\n\n// ============================================================================\n// LangGraph Message Extraction Helpers\n// ============================================================================\n\n/**\n * Extract text content from a LangChain message object.\n * Handles both serialized format (kwargs.content) and deserialized format (content directly).\n */\nfunction extractMessageContent(msg: Record<string, unknown>): string | null {\n let content: unknown = null;\n\n if (msg.kwargs && typeof msg.kwargs === 'object') {\n const kwargs = msg.kwargs as Record<string, unknown>;\n content = kwargs.content;\n } else if (msg.content !== undefined) {\n content = msg.content;\n }\n\n if (!content) return null;\n\n if (typeof content === 'string') {\n return content;\n }\n if (Array.isArray(content)) {\n const texts = content\n .filter((block): block is { type: string; text: string } =>\n typeof block === 'object' && block !== null && block.type === 'text' && typeof block.text === 'string'\n )\n .map(block => block.text);\n if (texts.length > 0) {\n return texts.join('\\n');\n }\n }\n\n return null;\n}\n\n/**\n * Extract tool calls from a LangChain AI message.\n * Handles both Anthropic format (tool_use in content) and OpenAI/DeepSeek format (tool_calls in additional_kwargs).\n */\nfunction extractToolCalls(msg: Record<string, unknown>): Array<{ name: string; args: Record<string, unknown> }> | null {\n let content: unknown = null;\n let additionalKwargs: Record<string, unknown> | null = null;\n\n if (msg.kwargs && typeof msg.kwargs === 'object') {\n const kwargs = msg.kwargs as Record<string, unknown>;\n content = kwargs.content;\n additionalKwargs = kwargs.additional_kwargs as Record<string, unknown> | null;\n } else if (msg.content !== undefined) {\n content = msg.content;\n additionalKwargs = msg.additional_kwargs as Record<string, unknown> | null;\n }\n\n // Try OpenAI/DeepSeek format first: tool_calls in additional_kwargs\n if (additionalKwargs?.tool_calls && Array.isArray(additionalKwargs.tool_calls)) {\n const toolCalls = (additionalKwargs.tool_calls as Array<{\n id?: string;\n type?: string;\n function?: { name: string; arguments?: string };\n }>)\n .filter(tc => tc.function?.name)\n .map(tc => {\n let args: Record<string, unknown> = {};\n const rawArgs = tc.function?.arguments;\n const toolName = tc.function?.name || 'unknown';\n\n if (rawArgs) {\n try {\n args = JSON.parse(rawArgs);\n } catch {\n // If JSON parse fails, skip\n }\n }\n return { name: toolName, args };\n });\n\n if (toolCalls.length > 0) {\n return toolCalls;\n }\n }\n\n // Try Anthropic format: tool_use blocks in content array\n if (content && Array.isArray(content)) {\n const toolCalls = content\n .filter((block): block is { type: string; name: string; input?: Record<string, unknown> } =>\n typeof block === 'object' && block !== null && block.type === 'tool_use' && typeof block.name === 'string'\n )\n .map(block => ({ name: block.name, args: block.input || {} }));\n\n if (toolCalls.length > 0) {\n return toolCalls;\n }\n }\n\n return null;\n}\n\n/**\n * Check if a message is an AI message.\n */\nfunction isAIMessage(msg: Record<string, unknown>): boolean {\n if (Array.isArray(msg.id) && (msg.id as string[]).includes('AIMessage')) return true;\n if ((msg as { type?: string }).type === 'ai') return true;\n return false;\n}\n\n// ============================================================================\n// Event Transformation\n// ============================================================================\n\n/**\n * Transform a raw agent event to SSE event(s).\n *\n * Handles both LangGraph nested structures and legacy flat structures.\n * Returns an array for consistency with multi-event scenarios.\n *\n * @param event Raw agent event\n * @param threadId Thread ID for context\n * @returns Array of SSE events\n */\nexport function transformAgentEvent(\n event: RawAgentEvent,\n threadId?: string\n): SSEEvent {\n const events = transformAgentEventMulti(event, threadId);\n return events[0] || createSSEEvent('message', { content: '', role: 'assistant', isComplete: true });\n}\n\n/**\n * Transform a raw agent event to multiple SSE events.\n * Use this when you need to handle all events from a single LangGraph event.\n */\nexport function transformAgentEventMulti(\n event: RawAgentEvent,\n threadId?: string\n): SSEEvent[] {\n const events: SSEEvent[] = [];\n\n // 1. Handle interrupts (highest priority)\n if (hasInterrupt(event)) {\n events.push(createSSEEvent('interrupt', extractInterruptData(event, threadId || 'unknown')));\n return events;\n }\n\n // 2. Handle LangGraph tools events (contains todos OR tool results)\n if (event.tools && typeof event.tools === 'object') {\n const toolsData = event.tools;\n\n // Check for todo updates from TodoListMiddleware\n if (toolsData.todos && Array.isArray(toolsData.todos) && toolsData.todos.length > 0) {\n const todos = toolsData.todos.map((t, idx) => ({\n id: t.id || `todo-${idx}`,\n task: t.task || t.content || '',\n status: (t.status as 'pending' | 'in_progress' | 'completed') || 'pending',\n }));\n events.push(createSSEEvent('todo_update', { todos }));\n return events;\n }\n\n // Check for tool execution results (ToolMessage)\n if (toolsData.messages && Array.isArray(toolsData.messages)) {\n const lastMsg = toolsData.messages[toolsData.messages.length - 1];\n\n // Extract kwargs — handle both LangChain 0.x (nested kwargs) and 1.x (flat properties)\n let kwargs: { content?: string; name?: string; status?: string } | undefined;\n if (lastMsg?.kwargs) {\n kwargs = lastMsg.kwargs as { content?: string; name?: string; status?: string };\n } else if (lastMsg && typeof lastMsg === 'object') {\n const msg = lastMsg as Record<string, unknown>;\n if (msg.content !== undefined || msg.name !== undefined) {\n kwargs = {\n content: String(msg.content || ''),\n name: String(msg.name || 'unknown'),\n status: String(msg.status || 'success'),\n };\n }\n }\n\n if (kwargs) {\n const content = kwargs.content || '';\n const toolName = kwargs.name || 'unknown';\n const success = kwargs.status !== 'error';\n\n events.push(createSSEEvent('tool_result', {\n tool: toolName,\n result: content,\n success,\n }));\n return events;\n }\n }\n }\n\n // 3. Handle LangGraph model_request (AI thinking/tool calls)\n if (event.model_request && typeof event.model_request === 'object') {\n const modelData = event.model_request as { messages?: Array<Record<string, unknown>> };\n if (modelData.messages && Array.isArray(modelData.messages)) {\n // Find the last AI message\n const aiMessages = modelData.messages.filter(isAIMessage);\n\n if (aiMessages.length > 0) {\n const lastAI = aiMessages[aiMessages.length - 1];\n\n // Check for tool calls first\n const toolCalls = extractToolCalls(lastAI);\n if (toolCalls && toolCalls.length > 0) {\n const toolCall = toolCalls[0];\n\n // Check if it's a file operation\n if (isFileOperationTool(toolCall.name)) {\n events.push(createSSEEvent('file_operation', {\n operation: toolCall.name as 'ls' | 'read_file' | 'write_file' | 'edit_file',\n path: (toolCall.args.path as string) || '',\n success: true,\n }));\n } else {\n events.push(createSSEEvent('tool_call', {\n tool: toolCall.name,\n args: toolCall.args,\n }));\n }\n return events;\n }\n\n // Extract text content (AI thinking)\n const content = extractMessageContent(lastAI);\n if (content && content.trim()) {\n events.push(createSSEEvent('message', {\n content: content,\n role: 'assistant',\n isComplete: false,\n }));\n return events;\n }\n }\n }\n }\n\n // 4. Handle legacy flat todo updates\n if (event.todos && Array.isArray(event.todos) && event.todos.length > 0) {\n events.push(createSSEEvent('todo_update', {\n todos: event.todos.map((t, idx) => ({\n id: t.id || `todo-${idx}`,\n task: t.task || '',\n status: t.status || 'pending',\n })),\n }));\n return events;\n }\n\n // 5. Handle legacy flat tool calls\n const toolCall = event.tool_call || event.toolCall;\n if (toolCall) {\n const toolName = toolCall.name || 'unknown';\n const toolArgs = toolCall.args || {};\n\n if (isFileOperationTool(toolName)) {\n events.push(createSSEEvent('file_operation', {\n operation: toolName as 'ls' | 'read_file' | 'write_file' | 'edit_file',\n path: (toolArgs.path as string) || '',\n success: true,\n }));\n } else {\n events.push(createSSEEvent('tool_call', {\n tool: toolName,\n args: toolArgs,\n }));\n }\n return events;\n }\n\n // 6. Handle legacy flat tool results\n const toolResult = event.tool_result || event.toolResult;\n if (toolResult) {\n events.push(createSSEEvent('tool_result', {\n tool: toolResult.name || 'unknown',\n result: toolResult.result,\n success: true,\n }));\n return events;\n }\n\n // 7. Handle legacy flat messages\n if (event.messages && Array.isArray(event.messages)) {\n const lastMessage = event.messages[event.messages.length - 1];\n if (lastMessage && typeof lastMessage === 'object') {\n events.push(createSSEEvent('message', {\n content: lastMessage.content || '',\n role: (lastMessage.role as 'assistant' | 'user' | 'system') || 'assistant',\n isComplete: true,\n }));\n return events;\n }\n }\n\n // 8. Default: skip unknown events\n return events;\n}\n\n/**\n * Check if an event contains an interrupt.\n */\nexport function hasInterrupt(event: RawAgentEvent): boolean {\n return '__interrupt__' in event && event.__interrupt__ !== undefined;\n}\n\n/**\n * Extract interrupt data from an event.\n */\nexport function extractInterruptData(event: RawAgentEvent, threadId: string): {\n threadId: string;\n actionRequests: Array<{\n tool: string;\n args: Record<string, unknown>;\n allowedDecisions: ('approve' | 'edit' | 'reject')[];\n description?: string;\n }>;\n} {\n const interrupts = event.__interrupt__;\n const actionRequests: Array<{\n tool: string;\n args: Record<string, unknown>;\n allowedDecisions: ('approve' | 'edit' | 'reject')[];\n description?: string;\n }> = [];\n\n for (const ir of interrupts || []) {\n // New HITL middleware format (value.actionRequests + value.reviewConfigs)\n if (ir.value?.actionRequests && ir.value?.reviewConfigs) {\n const { actionRequests: actions, reviewConfigs } = ir.value;\n for (let i = 0; i < actions.length; i++) {\n const action = actions[i];\n const config = reviewConfigs[i];\n actionRequests.push({\n tool: action.name || 'unknown',\n args: action.args || {},\n description: action.description,\n allowedDecisions: (config?.allowedDecisions as ('approve' | 'edit' | 'reject')[]) || ['approve', 'edit', 'reject'],\n });\n }\n }\n // Legacy format support\n else if (ir.action) {\n actionRequests.push({\n tool: ir.action.tool || 'unknown',\n args: ir.action.toolInput || {},\n allowedDecisions: (ir.config?.allowedDecisions as ('approve' | 'edit' | 'reject')[]) || ['approve', 'edit', 'reject'],\n });\n }\n }\n\n return { threadId, actionRequests };\n}\n\n/**\n * Check if an event is a todo update.\n */\nexport function isTodoUpdate(event: RawAgentEvent): boolean {\n // Check both LangGraph and legacy formats\n if (event.tools?.todos && Array.isArray(event.tools.todos) && event.tools.todos.length > 0) {\n return true;\n }\n return 'todos' in event && Array.isArray(event.todos) && event.todos.length > 0;\n}\n\n/**\n * Check if an event is a file operation.\n */\nexport function isFileOperation(event: RawAgentEvent): boolean {\n const toolCall = event.tool_call || event.toolCall;\n if (toolCall?.name && isFileOperationTool(toolCall.name)) return true;\n\n // Check LangGraph format\n if (event.model_request?.messages) {\n const aiMessages = event.model_request.messages.filter(isAIMessage);\n if (aiMessages.length > 0) {\n const toolCalls = extractToolCalls(aiMessages[aiMessages.length - 1] as Record<string, unknown>);\n if (toolCalls && toolCalls.length > 0) {\n return isFileOperationTool(toolCalls[0].name);\n }\n }\n }\n\n return false;\n}\n\n/**\n * Extract file operation details from an event.\n */\nexport function extractFileOperation(event: RawAgentEvent): {\n operation: string;\n path: string;\n} | null {\n const toolCall = event.tool_call || event.toolCall;\n if (toolCall?.name && isFileOperationTool(toolCall.name)) {\n return {\n operation: toolCall.name,\n path: (toolCall.args?.path as string) || '',\n };\n }\n\n // Check LangGraph format\n if (event.model_request?.messages) {\n const aiMessages = event.model_request.messages.filter(isAIMessage);\n if (aiMessages.length > 0) {\n const toolCalls = extractToolCalls(aiMessages[aiMessages.length - 1] as Record<string, unknown>);\n if (toolCalls && toolCalls.length > 0 && isFileOperationTool(toolCalls[0].name)) {\n return {\n operation: toolCalls[0].name,\n path: (toolCalls[0].args.path as string) || '',\n };\n }\n }\n }\n\n return null;\n}\n"]}
1
+ {"version":3,"sources":["../../src/api-types.ts","../../src/event-transformer/event-transformer.ts"],"names":["toolCall"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * DeepAgent API Types\n *\n * Request/response types for the skills-only DeepAgent API.\n * All agent behavior is defined through skills - no custom prompts allowed.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Request Schemas\n// ============================================================================\n\n/**\n * Extracted requirements schema - from analysis phase.\n * Used to provide more precise generation guidance.\n */\nexport const ExtractedRequirementsSchema = z.object({\n /** Entity names to create */\n entities: z.array(z.string()).optional().default([]),\n /** State names that should exist */\n states: z.array(z.string()).optional().default([]),\n /** Event/action names */\n events: z.array(z.string()).optional().default([]),\n /** Business rules (become guards) */\n guards: z.array(z.string()).optional().default([]),\n /** Page types needed */\n pages: z.array(z.string()).optional().default([]),\n /** Notifications/side-effects */\n effects: z.array(z.string()).optional().default([]),\n /** Raw requirement statements */\n rawRequirements: z.array(z.string()).optional().default([]),\n});\n\nexport type ExtractedRequirementsInput = z.infer<typeof ExtractedRequirementsSchema>;\n\n/**\n * Generate request schema - skills only, no custom prompts.\n */\nexport const GenerateRequestSchema = z\n .object({\n /** Required: The skill(s) to use for this generation */\n skill: z.union([\n z.string().min(1, 'Skill is required'),\n z.array(z.string().min(1)).min(1, 'At least one skill is required'),\n ]),\n\n /** The user's task/message */\n message: z.string().min(1, 'Message is required'),\n\n /** Optional: Thread ID for session continuity */\n threadId: z.string().uuid().optional(),\n\n /** Optional: Workspace directory (defaults to temp dir) */\n workspace: z.string().optional(),\n\n /** Optional: LLM provider */\n provider: z.enum(['anthropic', 'openai', 'deepseek', 'kimi', 'openrouter']).optional(),\n\n /** Optional: Model name */\n model: z.string().optional(),\n\n /** Optional: Disable human-in-the-loop interrupts (for eval/testing) */\n noInterrupt: z.boolean().optional(),\n\n /** Optional: App ID for persisting schema to Firestore */\n appId: z.string().optional(),\n\n /** Optional: Extracted requirements from analysis phase (for orbital skill) */\n requirements: ExtractedRequirementsSchema.optional(),\n\n /** Optional: GitHub integration configuration */\n github: z.object({\n /** GitHub personal access token */\n token: z.string().min(1, 'GitHub token is required'),\n /** Repository owner (e.g., 'octocat') */\n owner: z.string().optional(),\n /** Repository name (e.g., 'hello-world') */\n repo: z.string().optional(),\n }).optional(),\n\n /** Optional: Use orchestrated generation with complexity-based provider routing (default: false) */\n useOrchestration: z.boolean().optional(),\n })\n .strict();\n\nexport type GenerateRequest = z.infer<typeof GenerateRequestSchema>;\n\n/**\n * Resume request schema - for resuming after interrupt.\n */\nexport const ResumeRequestSchema = z.object({\n /** Required: Thread ID to resume */\n threadId: z.string().uuid(),\n\n /** Required: Decisions for pending interrupts */\n decisions: z.array(\n z.object({\n type: z.enum(['approve', 'edit', 'reject']),\n args: z.record(z.unknown()).optional(),\n })\n ),\n\n /** Optional: Approve all future actions */\n approveAll: z.boolean().optional(),\n});\n\nexport type ResumeRequest = z.infer<typeof ResumeRequestSchema>;\n\n/**\n * Decision type for interrupt responses.\n */\nexport interface Decision {\n type: 'approve' | 'edit' | 'reject';\n args?: Record<string, unknown>;\n}\n\n/**\n * Continue request schema - for multi-turn conversation.\n */\nexport const ContinueRequestSchema = z.object({\n /** Required: Thread ID to continue */\n threadId: z.string().uuid(),\n\n /** Required: Follow-up message */\n message: z.string().min(1, 'Message is required'),\n});\n\nexport type ContinueRequest = z.infer<typeof ContinueRequestSchema>;\n\n// ============================================================================\n// SSE Event Types\n// ============================================================================\n\n/**\n * All possible SSE event types.\n */\nexport type SSEEventType =\n | 'start'\n | 'message'\n | 'tool_call'\n | 'tool_result'\n | 'todo_update'\n | 'todo_detail'\n | 'file_operation'\n | 'schema_update'\n | 'generation_log'\n | 'subagent_event'\n | 'interrupt'\n | 'error'\n | 'complete'\n | 'cancelled'\n | 'app_created'\n | 'schema_phase_validated'\n | 'schema_phase_update'\n | 'orbital_added'\n | 'orbital_schema_complete'\n | 'changeset_recorded'\n | 'snapshot_created';\n\n/**\n * Base SSE event structure.\n */\nexport interface SSEEventBase {\n type: SSEEventType;\n timestamp: number;\n}\n\n/**\n * Start event - sent when streaming begins.\n */\nexport interface StartEvent extends SSEEventBase {\n type: 'start';\n data: {\n threadId: string;\n skill: string;\n workDir: string;\n };\n}\n\n/**\n * Message event - agent text output.\n */\nexport interface MessageEvent extends SSEEventBase {\n type: 'message';\n data: {\n content: string;\n role: 'assistant' | 'user' | 'system';\n isComplete: boolean;\n };\n}\n\n/**\n * Tool call event - when agent invokes a tool.\n */\nexport interface ToolCallEvent extends SSEEventBase {\n type: 'tool_call';\n data: {\n tool: string;\n args: Record<string, unknown>;\n };\n}\n\n/**\n * Tool result event - tool execution result.\n */\nexport interface ToolResultEvent extends SSEEventBase {\n type: 'tool_result';\n data: {\n tool: string;\n result: unknown;\n success: boolean;\n };\n}\n\n/**\n * Todo update event - task progress.\n */\nexport interface TodoUpdateEvent extends SSEEventBase {\n type: 'todo_update';\n data: {\n todos: Array<{\n id: string;\n task: string;\n status: 'pending' | 'in_progress' | 'completed';\n }>;\n };\n}\n\n/**\n * Activity type for todo details.\n */\nexport type TodoActivityType = 'thinking' | 'tool_call' | 'tool_result' | 'code_change';\n\n/**\n * Todo detail event - shows LLM activity for a specific todo.\n */\nexport interface TodoDetailEvent extends SSEEventBase {\n type: 'todo_detail';\n data: {\n todoId: string;\n activityType: TodoActivityType;\n content: string;\n tool?: string;\n args?: Record<string, unknown>;\n success?: boolean;\n filePath?: string;\n diff?: string;\n };\n}\n\n/**\n * File operation event.\n */\nexport interface FileOperationEvent extends SSEEventBase {\n type: 'file_operation';\n data: {\n operation: 'ls' | 'read_file' | 'write_file' | 'edit_file';\n path: string;\n success: boolean;\n };\n}\n\n/**\n * Schema update event.\n */\nexport interface SchemaUpdateEvent extends SSEEventBase {\n type: 'schema_update';\n data: {\n appId: string;\n version: number;\n schema: Record<string, unknown>;\n isNew: boolean;\n snapshotId?: string;\n changesetId?: string;\n };\n}\n\n/**\n * Generation log event.\n */\nexport interface GenerationLogEvent extends SSEEventBase {\n type: 'generation_log';\n data: {\n level: 'info' | 'warn' | 'error' | 'debug';\n message: string;\n data?: Record<string, unknown>;\n orbitalName?: string;\n };\n}\n\n/**\n * Interrupt event - awaiting human decision.\n */\nexport interface InterruptEvent extends SSEEventBase {\n type: 'interrupt';\n data: {\n threadId: string;\n actionRequests: Array<{\n tool: string;\n args: Record<string, unknown>;\n allowedDecisions: ('approve' | 'edit' | 'reject')[];\n description?: string;\n }>;\n };\n}\n\n/**\n * Error event.\n */\nexport interface ErrorEvent extends SSEEventBase {\n type: 'error';\n data: {\n error: string;\n code?: string;\n };\n}\n\n/**\n * Cancelled event.\n */\nexport interface CancelledEvent extends SSEEventBase {\n type: 'cancelled';\n data: {\n threadId: string;\n message: string;\n };\n}\n\n/**\n * Complete event - when generation finishes.\n */\nexport interface CompleteEvent extends SSEEventBase {\n type: 'complete';\n data: {\n threadId: string;\n skill: string;\n workDir: string;\n schemaGenerated: boolean;\n appCompiled: boolean;\n schema?: Record<string, unknown>;\n appId?: string;\n schemaPersisted?: boolean;\n snapshotId?: string;\n changesetId?: string;\n };\n}\n\n/**\n * Subagent event - forwards events from nested agent.\n */\nexport interface SubagentEvent extends SSEEventBase {\n type: 'subagent_event';\n data: {\n orbitalName: string;\n orbitalIndex: number;\n totalOrbitals: number;\n event: {\n type: Exclude<SSEEventType, 'subagent_event'>;\n data: Record<string, unknown>;\n timestamp: number;\n };\n };\n}\n\n/**\n * App created event.\n */\nexport interface AppCreatedEvent extends SSEEventBase {\n type: 'app_created';\n data: {\n appId: string;\n name?: string;\n orbitalCount?: number;\n fromOrbitalPersistence?: boolean;\n };\n}\n\n/**\n * Schema phase validated event.\n */\nexport interface SchemaPhaseValidatedEvent extends SSEEventBase {\n type: 'schema_phase_validated';\n data: {\n appId: string;\n success: boolean;\n errors?: unknown[];\n };\n}\n\n/**\n * Schema phase update event.\n */\nexport interface SchemaPhaseUpdateEvent extends SSEEventBase {\n type: 'schema_phase_update';\n data: Record<string, unknown>;\n}\n\n/**\n * Orbital added event.\n */\nexport interface OrbitalAddedEvent extends SSEEventBase {\n type: 'orbital_added';\n data: {\n appId: string;\n orbitalName: string;\n orbitalIndex: number;\n totalOrbitals: number;\n isNew?: boolean;\n orbitalSchema?: Record<string, unknown>;\n };\n}\n\n/**\n * Orbital schema complete event.\n */\nexport interface OrbitalSchemaCompleteEvent extends SSEEventBase {\n type: 'orbital_schema_complete';\n data: {\n appId: string;\n totalOrbitals: number;\n orbitalNames: string[];\n };\n}\n\n/**\n * Changeset recorded event.\n */\nexport interface ChangesetRecordedEvent extends SSEEventBase {\n type: 'changeset_recorded';\n data: {\n appId: string;\n changesetId: string;\n version: number;\n trackingMode: 'initial' | 'update';\n summary: {\n added: number;\n modified: number;\n removed: number;\n };\n source?: string;\n };\n}\n\n/**\n * Snapshot created event.\n */\nexport interface SnapshotCreatedEvent extends SSEEventBase {\n type: 'snapshot_created';\n data: {\n appId: string;\n snapshotId: string;\n version: number;\n reason: string;\n };\n}\n\n/**\n * Union of all SSE event types.\n */\nexport type SSEEvent =\n | StartEvent\n | MessageEvent\n | ToolCallEvent\n | ToolResultEvent\n | TodoUpdateEvent\n | TodoDetailEvent\n | FileOperationEvent\n | SchemaUpdateEvent\n | GenerationLogEvent\n | SubagentEvent\n | InterruptEvent\n | ErrorEvent\n | CancelledEvent\n | CompleteEvent\n | AppCreatedEvent\n | SchemaPhaseValidatedEvent\n | SchemaPhaseUpdateEvent\n | OrbitalAddedEvent\n | OrbitalSchemaCompleteEvent\n | ChangesetRecordedEvent\n | SnapshotCreatedEvent;\n\n// ============================================================================\n// Response Types\n// ============================================================================\n\n/**\n * List skills response.\n */\nexport interface ListSkillsResponse {\n available: Array<{\n name: string;\n description: string;\n allowedTools?: string[];\n }>;\n installed: Array<{\n name: string;\n description: string;\n allowedTools?: string[];\n }>;\n}\n\n/**\n * Session info response.\n */\nexport interface SessionInfo {\n threadId: string;\n skill: string;\n workDir: string;\n createdAt: number;\n lastActivityAt: number;\n}\n\n/**\n * List sessions response.\n */\nexport interface ListSessionsResponse {\n sessions: SessionInfo[];\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Create an SSE event with timestamp.\n */\nexport function createSSEEvent<T extends SSEEventType>(\n type: T,\n data: Extract<SSEEvent, { type: T }>['data']\n): Extract<SSEEvent, { type: T }> {\n return {\n type,\n data,\n timestamp: Date.now(),\n } as Extract<SSEEvent, { type: T }>;\n}\n\n/**\n * Format an SSE event for transmission.\n */\nexport function formatSSEEvent(event: SSEEvent): string {\n return `data: ${JSON.stringify(event)}\\n\\n`;\n}\n\n/**\n * Parse an SSE event from a data string.\n */\nexport function parseSSEEvent(data: string): SSEEvent {\n return JSON.parse(data) as SSEEvent;\n}\n\n/**\n * Type guard for SSE start events.\n */\nexport function isSSEStartEvent(event: SSEEvent): event is StartEvent {\n return event.type === 'start';\n}\n\n/**\n * Type guard for SSE message events.\n */\nexport function isSSEMessageEvent(event: SSEEvent): event is MessageEvent {\n return event.type === 'message';\n}\n\n/**\n * Type guard for SSE interrupt events.\n */\nexport function isSSEInterruptEvent(event: SSEEvent): event is InterruptEvent {\n return event.type === 'interrupt';\n}\n\n/**\n * Type guard for SSE complete events.\n */\nexport function isSSECompleteEvent(event: SSEEvent): event is CompleteEvent {\n return event.type === 'complete';\n}\n\n/**\n * Type guard for SSE error events.\n */\nexport function isSSEErrorEvent(event: SSEEvent): event is ErrorEvent {\n return event.type === 'error';\n}\n\n/**\n * Type guard for SSE tool call events.\n */\nexport function isSSEToolCallEvent(event: SSEEvent): event is ToolCallEvent {\n return event.type === 'tool_call';\n}\n\n/**\n * Type guard for SSE todo update events.\n */\nexport function isSSETodoUpdateEvent(event: SSEEvent): event is TodoUpdateEvent {\n return event.type === 'todo_update';\n}\n\n/**\n * Type guard for SSE todo detail events.\n */\nexport function isSSETodoDetailEvent(event: SSEEvent): event is TodoDetailEvent {\n return event.type === 'todo_detail';\n}\n\n/**\n * Type guard for SSE subagent events.\n */\nexport function isSSESubagentEvent(event: SSEEvent): event is SubagentEvent {\n return event.type === 'subagent_event';\n}\n\n/**\n * Type guard for SSE generation log events.\n */\nexport function isSSEGenerationLogEvent(event: SSEEvent): event is GenerationLogEvent {\n return event.type === 'generation_log';\n}\n","/**\n * Event Transformer for DeepAgent\n *\n * Transforms raw LangGraph/deepagents events into SSE events.\n * Handles special events like todo updates and file operations.\n *\n * Supports both:\n * - LangGraph event structures (event.tools, event.model_request)\n * - Legacy flat event structures (event.todos, event.tool_call)\n */\n\nimport {\n createSSEEvent,\n type SSEEvent,\n} from '../api-types.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Raw agent event from LangGraph/deepagents.\n */\nexport interface RawAgentEvent {\n // LangGraph nested structures\n tools?: {\n todos?: Array<{ content?: string; task?: string; status?: string; id?: string }>;\n messages?: Array<Record<string, unknown>>;\n };\n model_request?: {\n messages?: Array<Record<string, unknown>>;\n };\n\n // Legacy flat structures\n messages?: Array<{\n role?: string;\n content?: string;\n }>;\n tool_call?: {\n name?: string;\n args?: Record<string, unknown>;\n };\n toolCall?: {\n name?: string;\n args?: Record<string, unknown>;\n };\n tool_result?: {\n name?: string;\n result?: unknown;\n };\n toolResult?: {\n name?: string;\n result?: unknown;\n };\n todos?: Array<{\n id?: string;\n task?: string;\n status?: 'pending' | 'in_progress' | 'completed';\n }>;\n\n // Interrupt events (both formats)\n __interrupt__?: Array<{\n value?: {\n actionRequests?: Array<{ name?: string; args?: Record<string, unknown>; description?: string }>;\n reviewConfigs?: Array<{ allowedDecisions?: string[] }>;\n };\n action?: {\n tool?: string;\n toolInput?: Record<string, unknown>;\n };\n config?: {\n allowedDecisions?: string[];\n };\n }>;\n\n // Other fields\n [key: string]: unknown;\n}\n\n// ============================================================================\n// File Operation Detection\n// ============================================================================\n\n/**\n * File operation tool names from FilesystemMiddleware.\n */\nconst FILE_OPERATION_TOOLS = new Set([\n 'ls',\n 'read_file',\n 'write_file',\n 'edit_file',\n]);\n\n/**\n * Check if a tool name is a file operation.\n */\nfunction isFileOperationTool(toolName: string): boolean {\n return FILE_OPERATION_TOOLS.has(toolName);\n}\n\n// ============================================================================\n// LangGraph Message Extraction Helpers\n// ============================================================================\n\n/**\n * Extract text content from a LangChain message object.\n * Handles both serialized format (kwargs.content) and deserialized format (content directly).\n */\nfunction extractMessageContent(msg: Record<string, unknown>): string | null {\n let content: unknown = null;\n\n if (msg.kwargs && typeof msg.kwargs === 'object') {\n const kwargs = msg.kwargs as Record<string, unknown>;\n content = kwargs.content;\n } else if (msg.content !== undefined) {\n content = msg.content;\n }\n\n if (!content) return null;\n\n if (typeof content === 'string') {\n return content;\n }\n if (Array.isArray(content)) {\n const texts = content\n .filter((block): block is { type: string; text: string } =>\n typeof block === 'object' && block !== null && block.type === 'text' && typeof block.text === 'string'\n )\n .map(block => block.text);\n if (texts.length > 0) {\n return texts.join('\\n');\n }\n }\n\n return null;\n}\n\n/**\n * Extract tool calls from a LangChain AI message.\n * Handles both Anthropic format (tool_use in content) and OpenAI/DeepSeek format (tool_calls in additional_kwargs).\n */\nfunction extractToolCalls(msg: Record<string, unknown>): Array<{ name: string; args: Record<string, unknown> }> | null {\n let content: unknown = null;\n let additionalKwargs: Record<string, unknown> | null = null;\n\n if (msg.kwargs && typeof msg.kwargs === 'object') {\n const kwargs = msg.kwargs as Record<string, unknown>;\n content = kwargs.content;\n additionalKwargs = kwargs.additional_kwargs as Record<string, unknown> | null;\n } else if (msg.content !== undefined) {\n content = msg.content;\n additionalKwargs = msg.additional_kwargs as Record<string, unknown> | null;\n }\n\n // Try OpenAI/DeepSeek format first: tool_calls in additional_kwargs\n if (additionalKwargs?.tool_calls && Array.isArray(additionalKwargs.tool_calls)) {\n const toolCalls = (additionalKwargs.tool_calls as Array<{\n id?: string;\n type?: string;\n function?: { name: string; arguments?: string };\n }>)\n .filter(tc => tc.function?.name)\n .map(tc => {\n let args: Record<string, unknown> = {};\n const rawArgs = tc.function?.arguments;\n const toolName = tc.function?.name || 'unknown';\n\n if (rawArgs) {\n try {\n args = JSON.parse(rawArgs);\n } catch {\n // If JSON parse fails, skip\n }\n }\n return { name: toolName, args };\n });\n\n if (toolCalls.length > 0) {\n return toolCalls;\n }\n }\n\n // Try Anthropic format: tool_use blocks in content array\n if (content && Array.isArray(content)) {\n const toolCalls = content\n .filter((block): block is { type: string; name: string; input?: Record<string, unknown> } =>\n typeof block === 'object' && block !== null && block.type === 'tool_use' && typeof block.name === 'string'\n )\n .map(block => ({ name: block.name, args: block.input || {} }));\n\n if (toolCalls.length > 0) {\n return toolCalls;\n }\n }\n\n return null;\n}\n\n/**\n * Check if a message is an AI message.\n */\nfunction isAIMessage(msg: Record<string, unknown>): boolean {\n if (Array.isArray(msg.id) && (msg.id as string[]).includes('AIMessage')) return true;\n if ((msg as { type?: string }).type === 'ai') return true;\n return false;\n}\n\n// ============================================================================\n// Event Transformation\n// ============================================================================\n\n/**\n * Transform a raw agent event to SSE event(s).\n *\n * Handles both LangGraph nested structures and legacy flat structures.\n * Returns an array for consistency with multi-event scenarios.\n *\n * @param event Raw agent event\n * @param threadId Thread ID for context\n * @returns Array of SSE events\n */\nexport function transformAgentEvent(\n event: RawAgentEvent,\n threadId?: string\n): SSEEvent {\n const events = transformAgentEventMulti(event, threadId);\n return events[0] || createSSEEvent('message', { content: '', role: 'assistant', isComplete: true });\n}\n\n/**\n * Transform a raw agent event to multiple SSE events.\n * Use this when you need to handle all events from a single LangGraph event.\n */\nexport function transformAgentEventMulti(\n event: RawAgentEvent,\n threadId?: string\n): SSEEvent[] {\n const events: SSEEvent[] = [];\n\n // 1. Handle interrupts (highest priority)\n if (hasInterrupt(event)) {\n events.push(createSSEEvent('interrupt', extractInterruptData(event, threadId || 'unknown')));\n return events;\n }\n\n // 2. Handle LangGraph tools events (contains todos OR tool results)\n if (event.tools && typeof event.tools === 'object') {\n const toolsData = event.tools;\n\n // Check for todo updates from TodoListMiddleware\n if (toolsData.todos && Array.isArray(toolsData.todos) && toolsData.todos.length > 0) {\n const todos = toolsData.todos.map((t, idx) => ({\n id: t.id || `todo-${idx}`,\n task: t.task || t.content || '',\n status: (t.status as 'pending' | 'in_progress' | 'completed') || 'pending',\n }));\n events.push(createSSEEvent('todo_update', { todos }));\n return events;\n }\n\n // Check for tool execution results (ToolMessage)\n if (toolsData.messages && Array.isArray(toolsData.messages)) {\n const lastMsg = toolsData.messages[toolsData.messages.length - 1];\n\n // Extract kwargs — handle both LangChain 0.x (nested kwargs) and 1.x (flat properties)\n let kwargs: { content?: string; name?: string; status?: string } | undefined;\n if (lastMsg?.kwargs) {\n kwargs = lastMsg.kwargs as { content?: string; name?: string; status?: string };\n } else if (lastMsg && typeof lastMsg === 'object') {\n const msg = lastMsg as Record<string, unknown>;\n if (msg.content !== undefined || msg.name !== undefined) {\n kwargs = {\n content: String(msg.content || ''),\n name: String(msg.name || 'unknown'),\n status: String(msg.status || 'success'),\n };\n }\n }\n\n if (kwargs) {\n const content = kwargs.content || '';\n const toolName = kwargs.name || 'unknown';\n const success = kwargs.status !== 'error';\n\n events.push(createSSEEvent('tool_result', {\n tool: toolName,\n result: content,\n success,\n }));\n return events;\n }\n }\n }\n\n // 3. Handle LangGraph model_request (AI thinking/tool calls)\n if (event.model_request && typeof event.model_request === 'object') {\n const modelData = event.model_request as { messages?: Array<Record<string, unknown>> };\n if (modelData.messages && Array.isArray(modelData.messages)) {\n // Find the last AI message\n const aiMessages = modelData.messages.filter(isAIMessage);\n\n if (aiMessages.length > 0) {\n const lastAI = aiMessages[aiMessages.length - 1];\n\n // Check for tool calls first\n const toolCalls = extractToolCalls(lastAI);\n if (toolCalls && toolCalls.length > 0) {\n const toolCall = toolCalls[0];\n\n // Check if it's a file operation\n if (isFileOperationTool(toolCall.name)) {\n events.push(createSSEEvent('file_operation', {\n operation: toolCall.name as 'ls' | 'read_file' | 'write_file' | 'edit_file',\n path: (toolCall.args.path as string) || '',\n success: true,\n }));\n } else {\n events.push(createSSEEvent('tool_call', {\n tool: toolCall.name,\n args: toolCall.args,\n }));\n }\n return events;\n }\n\n // Extract text content (AI thinking)\n const content = extractMessageContent(lastAI);\n if (content && content.trim()) {\n events.push(createSSEEvent('message', {\n content: content,\n role: 'assistant',\n isComplete: false,\n }));\n return events;\n }\n }\n }\n }\n\n // 4. Handle legacy flat todo updates\n if (event.todos && Array.isArray(event.todos) && event.todos.length > 0) {\n events.push(createSSEEvent('todo_update', {\n todos: event.todos.map((t, idx) => ({\n id: t.id || `todo-${idx}`,\n task: t.task || '',\n status: t.status || 'pending',\n })),\n }));\n return events;\n }\n\n // 5. Handle legacy flat tool calls\n const toolCall = event.tool_call || event.toolCall;\n if (toolCall) {\n const toolName = toolCall.name || 'unknown';\n const toolArgs = toolCall.args || {};\n\n if (isFileOperationTool(toolName)) {\n events.push(createSSEEvent('file_operation', {\n operation: toolName as 'ls' | 'read_file' | 'write_file' | 'edit_file',\n path: (toolArgs.path as string) || '',\n success: true,\n }));\n } else {\n events.push(createSSEEvent('tool_call', {\n tool: toolName,\n args: toolArgs,\n }));\n }\n return events;\n }\n\n // 6. Handle legacy flat tool results\n const toolResult = event.tool_result || event.toolResult;\n if (toolResult) {\n events.push(createSSEEvent('tool_result', {\n tool: toolResult.name || 'unknown',\n result: toolResult.result,\n success: true,\n }));\n return events;\n }\n\n // 7. Handle legacy flat messages\n if (event.messages && Array.isArray(event.messages)) {\n const lastMessage = event.messages[event.messages.length - 1];\n if (lastMessage && typeof lastMessage === 'object') {\n events.push(createSSEEvent('message', {\n content: lastMessage.content || '',\n role: (lastMessage.role as 'assistant' | 'user' | 'system') || 'assistant',\n isComplete: true,\n }));\n return events;\n }\n }\n\n // 8. Default: skip unknown events\n return events;\n}\n\n/**\n * Check if an event contains an interrupt.\n */\nexport function hasInterrupt(event: RawAgentEvent): boolean {\n return '__interrupt__' in event && event.__interrupt__ !== undefined;\n}\n\n/**\n * Extract interrupt data from an event.\n */\nexport function extractInterruptData(event: RawAgentEvent, threadId: string): {\n threadId: string;\n actionRequests: Array<{\n tool: string;\n args: Record<string, unknown>;\n allowedDecisions: ('approve' | 'edit' | 'reject')[];\n description?: string;\n }>;\n} {\n const interrupts = event.__interrupt__;\n const actionRequests: Array<{\n tool: string;\n args: Record<string, unknown>;\n allowedDecisions: ('approve' | 'edit' | 'reject')[];\n description?: string;\n }> = [];\n\n for (const ir of interrupts || []) {\n // New HITL middleware format (value.actionRequests + value.reviewConfigs)\n if (ir.value?.actionRequests && ir.value?.reviewConfigs) {\n const { actionRequests: actions, reviewConfigs } = ir.value;\n for (let i = 0; i < actions.length; i++) {\n const action = actions[i];\n const config = reviewConfigs[i];\n actionRequests.push({\n tool: action.name || 'unknown',\n args: action.args || {},\n description: action.description,\n allowedDecisions: (config?.allowedDecisions as ('approve' | 'edit' | 'reject')[]) || ['approve', 'edit', 'reject'],\n });\n }\n }\n // Legacy format support\n else if (ir.action) {\n actionRequests.push({\n tool: ir.action.tool || 'unknown',\n args: ir.action.toolInput || {},\n allowedDecisions: (ir.config?.allowedDecisions as ('approve' | 'edit' | 'reject')[]) || ['approve', 'edit', 'reject'],\n });\n }\n }\n\n return { threadId, actionRequests };\n}\n\n/**\n * Check if an event is a todo update.\n */\nexport function isTodoUpdate(event: RawAgentEvent): boolean {\n // Check both LangGraph and legacy formats\n if (event.tools?.todos && Array.isArray(event.tools.todos) && event.tools.todos.length > 0) {\n return true;\n }\n return 'todos' in event && Array.isArray(event.todos) && event.todos.length > 0;\n}\n\n/**\n * Check if an event is a file operation.\n */\nexport function isFileOperation(event: RawAgentEvent): boolean {\n const toolCall = event.tool_call || event.toolCall;\n if (toolCall?.name && isFileOperationTool(toolCall.name)) return true;\n\n // Check LangGraph format\n if (event.model_request?.messages) {\n const aiMessages = event.model_request.messages.filter(isAIMessage);\n if (aiMessages.length > 0) {\n const toolCalls = extractToolCalls(aiMessages[aiMessages.length - 1] as Record<string, unknown>);\n if (toolCalls && toolCalls.length > 0) {\n return isFileOperationTool(toolCalls[0].name);\n }\n }\n }\n\n return false;\n}\n\n/**\n * Extract file operation details from an event.\n */\nexport function extractFileOperation(event: RawAgentEvent): {\n operation: string;\n path: string;\n} | null {\n const toolCall = event.tool_call || event.toolCall;\n if (toolCall?.name && isFileOperationTool(toolCall.name)) {\n return {\n operation: toolCall.name,\n path: (toolCall.args?.path as string) || '',\n };\n }\n\n // Check LangGraph format\n if (event.model_request?.messages) {\n const aiMessages = event.model_request.messages.filter(isAIMessage);\n if (aiMessages.length > 0) {\n const toolCalls = extractToolCalls(aiMessages[aiMessages.length - 1] as Record<string, unknown>);\n if (toolCalls && toolCalls.length > 0 && isFileOperationTool(toolCalls[0].name)) {\n return {\n operation: toolCalls[0].name,\n path: (toolCalls[0].args.path as string) || '',\n };\n }\n }\n }\n\n return null;\n}\n"]}
@@ -1,9 +1,9 @@
1
- import { S as SubagentEventCallback$1, O as OrbitalCompleteCallback, D as DomainOrbitalEventCallback, a as DomainOrbitalCompleteCallback } from './orbital-subagent-B9lvv_NS.js';
1
+ import { S as SubagentEventCallback$1, O as OrbitalCompleteCallback, D as DomainOrbitalEventCallback, a as DomainOrbitalCompleteCallback } from './orbital-subagent-BdFuf77p.js';
2
2
  import * as _langchain_core_tools from '@langchain/core/tools';
3
3
  import * as zod from 'zod';
4
4
  import { z } from 'zod';
5
5
  import { Trait, OrbitalDefinition, FullOrbitalUnit } from '@almadar/core/types';
6
- import { S as SSEEventType } from './api-types-Bj2jeOU7.js';
6
+ import { S as SSEEventType } from './api-types-CXrq-fts.js';
7
7
  import { LLMProvider } from '@almadar/llm';
8
8
  import { OrbitalSchema } from '@almadar/core';
9
9
 
@@ -1,5 +1,5 @@
1
1
  import { LLMProvider } from '@almadar/llm';
2
- import { S as SubagentEventCallback, O as OrbitalCompleteCallback, a as DomainOrbitalCompleteCallback } from './orbital-subagent-B9lvv_NS.js';
2
+ import { S as SubagentEventCallback, O as OrbitalCompleteCallback, a as DomainOrbitalCompleteCallback } from './orbital-subagent-BdFuf77p.js';
3
3
  import { BaseCheckpointSaver } from '@langchain/langgraph-checkpoint';
4
4
  import { P as PersistenceMode, b as FirestoreDb$1, S as SessionMetadata, e as SessionRecord } from './firestore-checkpointer-CkNKXoun.js';
5
5
  import { OrbitalSchema } from '@almadar/core';
package/dist/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  import { SubAgent } from './types.js';
2
2
  export { AgentDependencies, CombineOrbitalsFn, CombinerOptions, CombinerResult, ConvertDomainToSchemaFn, DomainConversionResult, GenerateFullOrbitalFn, GenerationLog, OrbitalGenerationOptions, OrbitalGenerationResult } from './types.js';
3
- export { C as CompleteEvent, b as ContinueRequest, c as ContinueRequestSchema, E as ErrorEvent, d as ExtractedRequirementsInput, e as ExtractedRequirementsSchema, G as GenerateRequest, f as GenerateRequestSchema, g as GenerationLogEvent, I as InterruptEvent, M as MessageEvent, R as ResumeRequest, h as ResumeRequestSchema, a as SSEEvent, S as SSEEventType, i as StartEvent, j as SubagentEvent, T as TodoUpdateEvent, k as ToolCallEvent, l as ToolResultEvent, m as createSSEEvent, n as formatSSEEvent, o as isSSECompleteEvent, p as isSSEErrorEvent, q as isSSEGenerationLogEvent, r as isSSEInterruptEvent, s as isSSEMessageEvent, t as isSSEStartEvent, u as isSSESubagentEvent, v as isSSETodoDetailEvent, w as isSSETodoUpdateEvent, x as isSSEToolCallEvent, y as parseSSEEvent } from './api-types-Bj2jeOU7.js';
4
- import { O as OrbitalUnit, a as OrbitalGenerationOptions$1, b as OrbitalGenerationResult$1, A as AuditLog } from './index-CV-YHG_P.js';
5
- export { c as AuditEntry, T as TraitCompleteCallback, d as TraitEventCallback, e as TraitSpec, f as TraitSubagentToolOptions, g as createAgentTools, h as createApplyChunkTool, i as createCombineSchemasTool, j as createExecuteTool, k as createExtractChunkTool, l as createFinishTaskTool, m as createGenerateSchemaTool, n as createQuerySchemaStructureTool, o as createSchemaChunkingTools, p as createTraitEventWrapper, q as createTraitSubagentTool, r as createValidateSchemaTool, v as validateCommandPaths } from './index-CV-YHG_P.js';
3
+ export { C as CompleteEvent, b as ContinueRequest, c as ContinueRequestSchema, E as ErrorEvent, d as ExtractedRequirementsInput, e as ExtractedRequirementsSchema, G as GenerateRequest, f as GenerateRequestSchema, g as GenerationLogEvent, I as InterruptEvent, M as MessageEvent, R as ResumeRequest, h as ResumeRequestSchema, a as SSEEvent, S as SSEEventType, i as StartEvent, j as SubagentEvent, T as TodoUpdateEvent, k as ToolCallEvent, l as ToolResultEvent, m as createSSEEvent, n as formatSSEEvent, o as isSSECompleteEvent, p as isSSEErrorEvent, q as isSSEGenerationLogEvent, r as isSSEInterruptEvent, s as isSSEMessageEvent, t as isSSEStartEvent, u as isSSESubagentEvent, v as isSSETodoDetailEvent, w as isSSETodoUpdateEvent, x as isSSEToolCallEvent, y as parseSSEEvent } from './api-types-CXrq-fts.js';
4
+ import { O as OrbitalUnit, a as OrbitalGenerationOptions$1, b as OrbitalGenerationResult$1, A as AuditLog } from './index-DW3F-Ihx.js';
5
+ export { c as AuditEntry, T as TraitCompleteCallback, d as TraitEventCallback, e as TraitSpec, f as TraitSubagentToolOptions, g as createAgentTools, h as createApplyChunkTool, i as createCombineSchemasTool, j as createExecuteTool, k as createExtractChunkTool, l as createFinishTaskTool, m as createGenerateSchemaTool, n as createQuerySchemaStructureTool, o as createSchemaChunkingTools, p as createTraitEventWrapper, q as createTraitSubagentTool, r as createValidateSchemaTool, v as validateCommandPaths } from './index-DW3F-Ihx.js';
6
6
  import { DomainContext, OrbitalSchema, Orbital } from '@almadar/core/types';
7
7
  export { DomainDocument, DomainToSchemaResult, ParseError, SchemaToDomainResult, SectionMapping, applySectionUpdate, convertDomainToSchema, convertSchemaToDomain, deleteSection } from '@almadar/core/domain-language';
8
8
  import { LLMClient } from '@almadar/llm';
9
- import { U as UserPreference, M as MemoryManager, G as GenerationSession } from './index-CmTX9IiH.js';
10
- export { A as ActionGate, C as CRITICAL_COMMAND_PATTERNS, a as CheckpointRecord, b as ContextCompactionConfig, D as DEFAULT_COMPACTION_CONFIG, E as EVENT_BUDGETS, I as InterruptRecord, c as MemoryManagerOptions, d as MemoryOrbitalSchema, P as PatternAffinity, e as ProjectContext, S as SessionManager, f as SessionManagerOptions, g as Skill, h as SkillAgentOptions, i as SkillAgentResult, j as SkillLoader, k as SkillMeta, l as SkillRefLoader, T as TOOL_GATES, m as ToolApprovalPreference, n as ToolTelemetry, o as UserFeedback, W as WorkflowToolWrapper, p as WorkflowToolWrapperOptions, q as classifyCommand, r as createEvalWorkflowWrapper, s as createSkillAgent, t as createSummaryPrompt, u as createWorkflowToolWrapper, v as estimateTokens, w as getBudgetWarningMessage, x as getEventBudget, y as getInterruptConfig, z as needsCompaction, B as resumeSkillAgent } from './index-CmTX9IiH.js';
9
+ import { U as UserPreference, M as MemoryManager, G as GenerationSession } from './index-DZn69no8.js';
10
+ export { A as ActionGate, C as CRITICAL_COMMAND_PATTERNS, a as CheckpointRecord, b as ContextCompactionConfig, D as DEFAULT_COMPACTION_CONFIG, E as EVENT_BUDGETS, I as InterruptRecord, c as MemoryManagerOptions, d as MemoryOrbitalSchema, P as PatternAffinity, e as ProjectContext, S as SessionManager, f as SessionManagerOptions, g as Skill, h as SkillAgentOptions, i as SkillAgentResult, j as SkillLoader, k as SkillMeta, l as SkillRefLoader, T as TOOL_GATES, m as ToolApprovalPreference, n as ToolTelemetry, o as UserFeedback, W as WorkflowToolWrapper, p as WorkflowToolWrapperOptions, q as classifyCommand, r as createEvalWorkflowWrapper, s as createSkillAgent, t as createSummaryPrompt, u as createWorkflowToolWrapper, v as estimateTokens, w as getBudgetWarningMessage, x as getEventBudget, y as getInterruptConfig, z as needsCompaction, B as resumeSkillAgent } from './index-DZn69no8.js';
11
11
  import { S as SessionMetadata } from './firestore-checkpointer-CkNKXoun.js';
12
12
  export { F as FirestoreCheckpointer, a as FirestoreCheckpointerOptions, b as FirestoreDb, c as FirestoreTimestamp, P as PersistenceMode, d as Session, e as SessionRecord } from './firestore-checkpointer-CkNKXoun.js';
13
13
  export { FirestoreSessionStore, FirestoreSessionStoreOptions, FirestoreStore, FirestoreStoreOptions, MemorySessionBackend } from './persistence/index.js';
@@ -17,7 +17,7 @@ import { Checkpoint } from '@langchain/langgraph-checkpoint';
17
17
  import { OrbitalDefinition } from '@almadar/core';
18
18
  export { FileMeta, FirestoreSink, FirestoreSinkConfig, GitClient, GitLogEntry, GitSink, GitStatus, MemorySnapshot, SinkManager, SinkResult, WORKSPACE_LAYOUT, WorkspaceConfig, WorkspaceManager, WorkspaceSink, createProjectOrbTemplate, createSchemaOrbTemplate, createUserOrbTemplate, parseOrb, readOrb, readOrbInstances, serializeOrb, writeOrb, writeOrbInstances } from './workspace/index.js';
19
19
  export { Command } from '@langchain/langgraph';
20
- export { a as DomainOrbitalCompleteCallback, D as DomainOrbitalEventCallback, b as DomainOrbitalSpec, c as DomainOrbitalToolOptions, O as OrbitalCompleteCallback, d as OrbitalRequirements, e as OrbitalSubagentToolOptions, S as SubagentEventCallback, f as createConstructCombinedDomainTool, g as createDomainOrbitalTools, h as createGenerateOrbitalDomainTool, i as createOrbitalSubagentTool, j as createSubagentEventWrapper } from './orbital-subagent-B9lvv_NS.js';
20
+ export { a as DomainOrbitalCompleteCallback, D as DomainOrbitalEventCallback, b as DomainOrbitalSpec, c as DomainOrbitalToolOptions, O as OrbitalCompleteCallback, d as OrbitalRequirements, e as OrbitalSubagentToolOptions, S as SubagentEventCallback, f as createConstructCombinedDomainTool, g as createDomainOrbitalTools, h as createGenerateOrbitalDomainTool, i as createOrbitalSubagentTool, j as createSubagentEventWrapper } from './orbital-subagent-BdFuf77p.js';
21
21
  import 'zod';
22
22
  import '@langchain/core/tools';
23
23
  import '@langchain/core/messages';
package/dist/index.js CHANGED
@@ -1346,7 +1346,7 @@ var GenerateRequestSchema = z.object({
1346
1346
  /** Repository name (e.g., 'hello-world') */
1347
1347
  repo: z.string().optional()
1348
1348
  }).optional(),
1349
- /** Optional: Use orchestrated generation with complexity-based provider routing (default: true) */
1349
+ /** Optional: Use orchestrated generation with complexity-based provider routing (default: false) */
1350
1350
  useOrchestration: z.boolean().optional()
1351
1351
  }).strict();
1352
1352
  var ResumeRequestSchema = z.object({
@@ -6509,10 +6509,10 @@ async function createSkillAgent(options) {
6509
6509
  skill: skillInput,
6510
6510
  workDir,
6511
6511
  threadId: providedThreadId,
6512
- provider = "anthropic",
6512
+ provider = "deepseek",
6513
6513
  model,
6514
- subagentProvider = "anthropic",
6515
- subagentModel = "claude-sonnet-4-20250514",
6514
+ subagentProvider = "deepseek",
6515
+ subagentModel = "deepseek-chat",
6516
6516
  verbose = false,
6517
6517
  skillLoader,
6518
6518
  skillRefLoader