@almadar/agent 1.6.1 → 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"]}
@@ -181,4 +181,4 @@ declare class FirestoreCheckpointer extends BaseCheckpointSaver {
181
181
  deleteThread(threadId: string): Promise<void>;
182
182
  }
183
183
 
184
- export { type FirestoreDb as F, type PersistenceMode as P, type SessionMetadata as S, type SessionRecord as a, FirestoreCheckpointer as b, type FirestoreCheckpointerOptions as c, type FirestoreTimestamp as d, type Session as e };
184
+ export { FirestoreCheckpointer as F, type PersistenceMode as P, type SessionMetadata as S, type FirestoreCheckpointerOptions as a, type FirestoreDb as b, type FirestoreTimestamp as c, type Session as d, type SessionRecord as e };
@@ -1,9 +1,9 @@
1
- import { S as SubagentEventCallback$1, O as OrbitalCompleteCallback, a as DomainOrbitalEventCallback, D as DomainOrbitalCompleteCallback } from './orbital-subagent-CHEeQQr_.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
 
@@ -252,7 +252,7 @@ declare function createExecuteTool(workDir: string, auditLog?: AuditLog): _langc
252
252
  }, string, "execute">;
253
253
 
254
254
  /**
255
- * Create a validate_schema tool that validates schema.json in the workspace.
255
+ * Create a validate_schema tool that validates schema.orb in the workspace.
256
256
  *
257
257
  * Uses `npx @almadar/cli validate --json` for comprehensive Rust-based validation.
258
258
  *
@@ -783,10 +783,14 @@ interface OrchestratedGenerationOptions {
783
783
  skillContent: string;
784
784
  /** Optional: Override verbosity */
785
785
  verbose?: boolean;
786
+ /** Working directory for persisting schema and orbital files */
787
+ workDir?: string;
786
788
  }
787
789
  interface OrchestratedGenerationResult {
788
790
  success: boolean;
789
- schema?: OrbitalSchema;
791
+ summary?: string;
792
+ orbitalCount?: number;
793
+ schemaPath?: string;
790
794
  complexity?: {
791
795
  level: 'simple' | 'medium' | 'complex';
792
796
  orbitalCount: number;
@@ -1481,8 +1485,8 @@ declare function createAgentTools(workDir: string): {
1481
1485
  }[];
1482
1486
  persistence: "persistent" | "runtime" | "singleton" | "instance";
1483
1487
  }>;
1484
- traits: zod.ZodArray<zod.ZodString, "many">;
1485
- patterns: zod.ZodArray<zod.ZodString, "many">;
1488
+ traits: zod.ZodDefault<zod.ZodArray<zod.ZodString, "many">>;
1489
+ patterns: zod.ZodOptional<zod.ZodArray<zod.ZodString, "many">>;
1486
1490
  pages: zod.ZodOptional<zod.ZodArray<zod.ZodObject<{
1487
1491
  name: zod.ZodString;
1488
1492
  path: zod.ZodString;
@@ -1583,7 +1587,6 @@ declare function createAgentTools(workDir: string): {
1583
1587
  }[];
1584
1588
  persistence: "persistent" | "runtime" | "singleton" | "instance";
1585
1589
  };
1586
- patterns: string[];
1587
1590
  pages?: {
1588
1591
  path: string;
1589
1592
  name: string;
@@ -1594,6 +1597,7 @@ declare function createAgentTools(workDir: string): {
1594
1597
  cardinality: "many" | "one";
1595
1598
  alias?: string | undefined;
1596
1599
  }[] | undefined;
1600
+ patterns?: string[] | undefined;
1597
1601
  domainContext?: {
1598
1602
  request: string;
1599
1603
  category: "game" | "business" | "dashboard" | "form" | "content" | "social" | "ecommerce" | "workflow";
@@ -1615,7 +1619,6 @@ declare function createAgentTools(workDir: string): {
1615
1619
  triggers: string;
1616
1620
  }[] | undefined;
1617
1621
  }, {
1618
- traits: string[];
1619
1622
  name: string;
1620
1623
  entity: {
1621
1624
  name: string;
@@ -1626,17 +1629,18 @@ declare function createAgentTools(workDir: string): {
1626
1629
  }[];
1627
1630
  persistence: "persistent" | "runtime" | "singleton" | "instance";
1628
1631
  };
1629
- patterns: string[];
1630
1632
  pages?: {
1631
1633
  path: string;
1632
1634
  name: string;
1633
1635
  viewType: string;
1634
1636
  }[] | undefined;
1637
+ traits?: string[] | undefined;
1635
1638
  relations?: {
1636
1639
  entity: string;
1637
1640
  cardinality: "many" | "one";
1638
1641
  alias?: string | undefined;
1639
1642
  }[] | undefined;
1643
+ patterns?: string[] | undefined;
1640
1644
  domainContext?: {
1641
1645
  request: string;
1642
1646
  category: "game" | "business" | "dashboard" | "form" | "content" | "social" | "ecommerce" | "workflow";
@@ -1673,7 +1677,6 @@ declare function createAgentTools(workDir: string): {
1673
1677
  }[];
1674
1678
  persistence: "persistent" | "runtime" | "singleton" | "instance";
1675
1679
  };
1676
- patterns: string[];
1677
1680
  pages?: {
1678
1681
  path: string;
1679
1682
  name: string;
@@ -1684,6 +1687,7 @@ declare function createAgentTools(workDir: string): {
1684
1687
  cardinality: "many" | "one";
1685
1688
  alias?: string | undefined;
1686
1689
  }[] | undefined;
1690
+ patterns?: string[] | undefined;
1687
1691
  domainContext?: {
1688
1692
  request: string;
1689
1693
  category: "game" | "business" | "dashboard" | "form" | "content" | "social" | "ecommerce" | "workflow";
@@ -1709,7 +1713,6 @@ declare function createAgentTools(workDir: string): {
1709
1713
  totalOrbitals?: number | undefined;
1710
1714
  }, {
1711
1715
  orbital: {
1712
- traits: string[];
1713
1716
  name: string;
1714
1717
  entity: {
1715
1718
  name: string;
@@ -1720,17 +1723,18 @@ declare function createAgentTools(workDir: string): {
1720
1723
  }[];
1721
1724
  persistence: "persistent" | "runtime" | "singleton" | "instance";
1722
1725
  };
1723
- patterns: string[];
1724
1726
  pages?: {
1725
1727
  path: string;
1726
1728
  name: string;
1727
1729
  viewType: string;
1728
1730
  }[] | undefined;
1731
+ traits?: string[] | undefined;
1729
1732
  relations?: {
1730
1733
  entity: string;
1731
1734
  cardinality: "many" | "one";
1732
1735
  alias?: string | undefined;
1733
1736
  }[] | undefined;
1737
+ patterns?: string[] | undefined;
1734
1738
  domainContext?: {
1735
1739
  request: string;
1736
1740
  category: "game" | "business" | "dashboard" | "form" | "content" | "social" | "ecommerce" | "workflow";
@@ -1767,7 +1771,6 @@ declare function createAgentTools(workDir: string): {
1767
1771
  }[];
1768
1772
  persistence: "persistent" | "runtime" | "singleton" | "instance";
1769
1773
  };
1770
- patterns: string[];
1771
1774
  pages?: {
1772
1775
  path: string;
1773
1776
  name: string;
@@ -1778,6 +1781,7 @@ declare function createAgentTools(workDir: string): {
1778
1781
  cardinality: "many" | "one";
1779
1782
  alias?: string | undefined;
1780
1783
  }[] | undefined;
1784
+ patterns?: string[] | undefined;
1781
1785
  domainContext?: {
1782
1786
  request: string;
1783
1787
  category: "game" | "business" | "dashboard" | "form" | "content" | "social" | "ecommerce" | "workflow";
@@ -1803,7 +1807,6 @@ declare function createAgentTools(workDir: string): {
1803
1807
  totalOrbitals?: number | undefined;
1804
1808
  }, {
1805
1809
  orbital: {
1806
- traits: string[];
1807
1810
  name: string;
1808
1811
  entity: {
1809
1812
  name: string;
@@ -1814,17 +1817,18 @@ declare function createAgentTools(workDir: string): {
1814
1817
  }[];
1815
1818
  persistence: "persistent" | "runtime" | "singleton" | "instance";
1816
1819
  };
1817
- patterns: string[];
1818
1820
  pages?: {
1819
1821
  path: string;
1820
1822
  name: string;
1821
1823
  viewType: string;
1822
1824
  }[] | undefined;
1825
+ traits?: string[] | undefined;
1823
1826
  relations?: {
1824
1827
  entity: string;
1825
1828
  cardinality: "many" | "one";
1826
1829
  alias?: string | undefined;
1827
1830
  }[] | undefined;
1831
+ patterns?: string[] | undefined;
1828
1832
  domainContext?: {
1829
1833
  request: string;
1830
1834
  category: "game" | "business" | "dashboard" | "form" | "content" | "social" | "ecommerce" | "workflow";
@@ -2066,7 +2070,7 @@ declare function createAgentTools(workDir: string): {
2066
2070
  isInitial?: boolean | undefined;
2067
2071
  }>, "many">;
2068
2072
  traits: zod.ZodArray<zod.ZodString, "many">;
2069
- patterns: zod.ZodArray<zod.ZodString, "many">;
2073
+ patterns: zod.ZodOptional<zod.ZodArray<zod.ZodString, "many">>;
2070
2074
  domainContext: zod.ZodOptional<zod.ZodObject<{
2071
2075
  request: zod.ZodString;
2072
2076
  requestFragment: zod.ZodOptional<zod.ZodString>;
@@ -2153,7 +2157,7 @@ declare function createAgentTools(workDir: string): {
2153
2157
  alias?: string | undefined;
2154
2158
  }[] | undefined;
2155
2159
  };
2156
- patterns: string[];
2160
+ patterns?: string[] | undefined;
2157
2161
  domainContext?: {
2158
2162
  request: string;
2159
2163
  category: "game" | "business" | "dashboard" | "form" | "content" | "social" | "ecommerce" | "workflow";
@@ -2198,7 +2202,7 @@ declare function createAgentTools(workDir: string): {
2198
2202
  alias?: string | undefined;
2199
2203
  }[] | undefined;
2200
2204
  };
2201
- patterns: string[];
2205
+ patterns?: string[] | undefined;
2202
2206
  domainContext?: {
2203
2207
  request: string;
2204
2208
  category: "game" | "business" | "dashboard" | "form" | "content" | "social" | "ecommerce" | "workflow";
@@ -2248,7 +2252,7 @@ declare function createAgentTools(workDir: string): {
2248
2252
  alias?: string | undefined;
2249
2253
  }[] | undefined;
2250
2254
  };
2251
- patterns: string[];
2255
+ patterns?: string[] | undefined;
2252
2256
  domainContext?: {
2253
2257
  request: string;
2254
2258
  category: "game" | "business" | "dashboard" | "form" | "content" | "social" | "ecommerce" | "workflow";
@@ -2298,7 +2302,7 @@ declare function createAgentTools(workDir: string): {
2298
2302
  alias?: string | undefined;
2299
2303
  }[] | undefined;
2300
2304
  };
2301
- patterns: string[];
2305
+ patterns?: string[] | undefined;
2302
2306
  domainContext?: {
2303
2307
  request: string;
2304
2308
  category: "game" | "business" | "dashboard" | "form" | "content" | "social" | "ecommerce" | "workflow";
@@ -2348,7 +2352,7 @@ declare function createAgentTools(workDir: string): {
2348
2352
  alias?: string | undefined;
2349
2353
  }[] | undefined;
2350
2354
  };
2351
- patterns: string[];
2355
+ patterns?: string[] | undefined;
2352
2356
  domainContext?: {
2353
2357
  request: string;
2354
2358
  category: "game" | "business" | "dashboard" | "form" | "content" | "social" | "ecommerce" | "workflow";
@@ -2398,7 +2402,7 @@ declare function createAgentTools(workDir: string): {
2398
2402
  alias?: string | undefined;
2399
2403
  }[] | undefined;
2400
2404
  };
2401
- patterns: string[];
2405
+ patterns?: string[] | undefined;
2402
2406
  domainContext?: {
2403
2407
  request: string;
2404
2408
  category: "game" | "business" | "dashboard" | "form" | "content" | "social" | "ecommerce" | "workflow";
@@ -1,9 +1,10 @@
1
1
  import { LLMProvider } from '@almadar/llm';
2
- import { S as SubagentEventCallback, O as OrbitalCompleteCallback, D as DomainOrbitalCompleteCallback } from './orbital-subagent-CHEeQQr_.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
- import { P as PersistenceMode, F as FirestoreDb$1, S as SessionMetadata, a as SessionRecord } from './firestore-checkpointer-BkFR-sZM.js';
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';
6
6
  import { BaseMessage } from '@langchain/core/messages';
7
+ import '@langchain/langgraph';
7
8
 
8
9
  /**
9
10
  * Context Compaction for DeepAgent
@@ -1010,4 +1011,4 @@ declare function createEvalWorkflowWrapper(options?: WorkflowToolWrapperOptions)
1010
1011
  resetTelemetry(): void;
1011
1012
  };
1012
1013
 
1013
- export { type ActionGate as A, estimateTokens as B, CRITICAL_COMMAND_PATTERNS as C, DEFAULT_COMPACTION_CONFIG as D, EVENT_BUDGETS as E, needsCompaction as F, type GenerationSession as G, type InterruptRecord as I, MemoryManager as M, type PatternAffinity as P, SessionManager as S, type ToolTelemetry as T, type UserPreference as U, type WorkflowToolWrapper as W, type SessionManagerOptions as a, type Skill as b, type SkillAgent as c, type SkillAgentOptions as d, type SkillAgentResult as e, type SkillLoader as f, type SkillMeta as g, type SkillRefLoader as h, type WorkflowToolWrapperOptions as i, createEvalWorkflowWrapper as j, createSkillAgent as k, createWorkflowToolWrapper as l, getBudgetWarningMessage as m, getEventBudget as n, getInterruptConfig as o, type CheckpointRecord as p, type ContextCompactionConfig as q, resumeSkillAgent as r, type MemoryManagerOptions as s, MemoryOrbitalSchema as t, type ProjectContext as u, TOOL_GATES as v, type ToolApprovalPreference as w, type UserFeedback as x, classifyCommand as y, createSummaryPrompt as z };
1014
+ export { type ActionGate as A, resumeSkillAgent as B, CRITICAL_COMMAND_PATTERNS as C, DEFAULT_COMPACTION_CONFIG as D, EVENT_BUDGETS as E, type SkillAgent as F, type GenerationSession as G, type InterruptRecord as I, MemoryManager as M, type PatternAffinity as P, SessionManager as S, TOOL_GATES as T, type UserPreference as U, type WorkflowToolWrapper as W, type CheckpointRecord as a, type ContextCompactionConfig as b, type MemoryManagerOptions as c, MemoryOrbitalSchema as d, type ProjectContext as e, type SessionManagerOptions as f, type Skill as g, type SkillAgentOptions as h, type SkillAgentResult as i, type SkillLoader as j, type SkillMeta as k, type SkillRefLoader as l, type ToolApprovalPreference as m, type ToolTelemetry as n, type UserFeedback as o, type WorkflowToolWrapperOptions as p, classifyCommand as q, createEvalWorkflowWrapper as r, createSkillAgent as s, createSummaryPrompt as t, createWorkflowToolWrapper as u, estimateTokens as v, getBudgetWarningMessage as w, getEventBudget as x, getInterruptConfig as y, needsCompaction as z };