@almadar/agent 1.0.13 → 1.1.0

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.
@@ -174,8 +174,20 @@ function transformAgentEventMulti(event, threadId) {
174
174
  }
175
175
  if (toolsData.messages && Array.isArray(toolsData.messages)) {
176
176
  const lastMsg = toolsData.messages[toolsData.messages.length - 1];
177
+ let kwargs;
177
178
  if (lastMsg?.kwargs) {
178
- const kwargs = lastMsg.kwargs;
179
+ kwargs = lastMsg.kwargs;
180
+ } else if (lastMsg && typeof lastMsg === "object") {
181
+ const msg = lastMsg;
182
+ if (msg.content !== void 0 || msg.name !== void 0) {
183
+ kwargs = {
184
+ content: String(msg.content || ""),
185
+ name: String(msg.name || "unknown"),
186
+ status: String(msg.status || "success")
187
+ };
188
+ }
189
+ }
190
+ if (kwargs) {
179
191
  const content = kwargs.content || "";
180
192
  const toolName = kwargs.name || "unknown";
181
193
  const success = kwargs.status !== "error";
@@ -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']).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 .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 if (lastMsg?.kwargs) {\n const kwargs = lastMsg.kwargs as { content?: string; name?: string; status?: string };\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']).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 .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"]}
package/dist/index.d.ts CHANGED
@@ -3,6 +3,7 @@ export { AgentDependencies, CombineOrbitalsFn, CombinerOptions, CombinerResult,
3
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-BW_58thJ.js';
4
4
  export { TraitCompleteCallback, TraitEventCallback, TraitSpec, TraitSubagentToolOptions, createAgentTools, createApplyChunkTool, createCombineSchemasTool, createExecuteTool, createExtractChunkTool, createFinishTaskTool, createGenerateSchemaTool, createQuerySchemaStructureTool, createSchemaChunkingTools, createTraitEventWrapper, createTraitSubagentTool, createValidateSchemaTool, validateCommandPaths } from './tools/index.js';
5
5
  import { DomainContext, OrbitalSchema, Orbital, OrbitalDefinition, FullOrbitalUnit as FullOrbitalUnit$1 } from '@almadar/core/types';
6
+ export { DomainDocument, DomainToSchemaResult, ParseError, SchemaToDomainResult, SectionMapping, applySectionUpdate, convertDomainToSchema, convertSchemaToDomain, deleteSection } from '@almadar/core/domain-language';
6
7
  import { LLMClient } from '@almadar/llm';
7
8
  export { createCompactSystemPrompt, createSystemPrompt } from './prompts/index.js';
8
9
  import { BaseMessage } from '@langchain/core/messages';
@@ -11,7 +12,7 @@ export { F as FirestoreCheckpointer, a as FirestoreCheckpointerOptions, b as Fir
11
12
  export { FirestoreSessionStore, FirestoreSessionStoreOptions, FirestoreStore, FirestoreStoreOptions, MemorySessionBackend } from './persistence/index.js';
12
13
  export { RawAgentEvent, extractFileOperation, extractInterruptData, hasInterrupt, isFileOperation, isTodoUpdate, transformAgentEvent, transformAgentEventMulti } from './event-transformer/index.js';
13
14
  export { Command } from '@langchain/langgraph';
14
- export { D as DomainOrbitalCompleteCallback, a 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-BsQBhKzi.js';
15
+ export { D as DomainOrbitalCompleteCallback, a 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-kKa0EqQM.js';
15
16
  import 'zod';
16
17
  import '@langchain/core/tools';
17
18
  import '@langchain/langgraph-checkpoint';
@@ -119,252 +120,6 @@ declare function estimateCombineComplexity(orbitals: FullOrbitalUnit[]): {
119
120
  totalSections: number;
120
121
  };
121
122
 
122
- /**
123
- * Effect operator mapping: Both systems use the same operator names
124
- */
125
- declare const EFFECT_OPERATORS: readonly ["set", "emit", "navigate", "render-ui", "persist", "call-service", "spawn", "despawn", "do", "notify"];
126
- /**
127
- * Effect operator names (S-expression first element)
128
- * These are the operators used in S-expression effects like ['emit', ...]
129
- */
130
- type EffectType = (typeof EFFECT_OPERATORS)[number];
131
- interface SourceLocation {
132
- line: number;
133
- column: number;
134
- offset: number;
135
- }
136
- interface SourceRange {
137
- start: SourceLocation;
138
- end: SourceLocation;
139
- }
140
- interface ASTNode {
141
- type: string;
142
- range?: SourceRange;
143
- }
144
- /**
145
- * Domain Language field types
146
- *
147
- * Note: These map to OrbitalSchema types via DOMAIN_TO_SCHEMA_FIELD_TYPE
148
- */
149
- type DomainFieldType = 'text' | 'long text' | 'number' | 'currency' | 'date' | 'timestamp' | 'datetime' | 'yes/no' | 'enum' | 'list' | 'object' | 'relation';
150
- interface DomainField extends ASTNode {
151
- type: 'field';
152
- name: string;
153
- fieldType: DomainFieldType;
154
- required: boolean;
155
- unique: boolean;
156
- auto: boolean;
157
- default?: unknown;
158
- enumValues?: string[];
159
- }
160
- type RelationshipType = 'belongs_to' | 'has_many' | 'has_one';
161
- interface DomainRelationship extends ASTNode {
162
- type: 'relationship';
163
- relationshipType: RelationshipType;
164
- targetEntity: string;
165
- alias?: string;
166
- }
167
- interface DomainEntity extends ASTNode {
168
- type: 'entity';
169
- name: string;
170
- description: string;
171
- fields: DomainField[];
172
- relationships: DomainRelationship[];
173
- states?: string[];
174
- initialState?: string;
175
- }
176
- interface DomainPageSection extends ASTNode {
177
- type: 'page_section';
178
- description: string;
179
- }
180
- interface DomainPageAction extends ASTNode {
181
- type: 'page_action';
182
- trigger: string;
183
- action: string;
184
- }
185
- interface DomainPage extends ASTNode {
186
- type: 'page';
187
- name: string;
188
- description: string;
189
- purpose: string;
190
- url: string;
191
- primaryEntity?: string;
192
- traitName?: string;
193
- sections: DomainPageSection[];
194
- actions: DomainPageAction[];
195
- onAccess?: string;
196
- }
197
- type ComparisonOperator = '==' | '!=' | '>' | '<' | '>=' | '<=';
198
- type LogicalOperator = 'AND' | 'OR';
199
- interface FieldReference extends ASTNode {
200
- type: 'field_reference';
201
- entityName: string;
202
- fieldName: string;
203
- }
204
- interface FieldCheckCondition extends ASTNode {
205
- type: 'field_check';
206
- field: FieldReference;
207
- check: 'provided' | 'empty' | 'equals';
208
- value?: string | number | boolean;
209
- }
210
- interface ComparisonCondition extends ASTNode {
211
- type: 'comparison';
212
- field: FieldReference;
213
- operator: ComparisonOperator;
214
- value: string | number | boolean;
215
- }
216
- interface UserCheckCondition extends ASTNode {
217
- type: 'user_check';
218
- check: 'is_role' | 'owns_this';
219
- role?: string;
220
- ownerField?: string;
221
- }
222
- interface LogicalCondition extends ASTNode {
223
- type: 'logical';
224
- operator: LogicalOperator;
225
- left: GuardCondition;
226
- right: GuardCondition;
227
- }
228
- type GuardCondition = FieldCheckCondition | ComparisonCondition | UserCheckCondition | LogicalCondition;
229
- interface DomainGuard extends ASTNode {
230
- type: 'guard';
231
- condition: GuardCondition;
232
- raw: string;
233
- }
234
- interface DomainEffect extends ASTNode {
235
- type: 'effect';
236
- effectType: EffectType;
237
- description: string;
238
- config: Record<string, unknown>;
239
- }
240
- interface DomainTransition extends ASTNode {
241
- type: 'transition';
242
- fromState: string;
243
- toState: string;
244
- event: string;
245
- guards: DomainGuard[];
246
- effects: DomainEffect[];
247
- }
248
- interface DomainTick extends ASTNode {
249
- type: 'tick';
250
- name: string;
251
- interval: string;
252
- intervalMs?: number;
253
- guard?: DomainGuard;
254
- effects: DomainEffect[];
255
- }
256
- interface DomainBehavior extends ASTNode {
257
- type: 'behavior';
258
- name: string;
259
- entityName: string;
260
- states: string[];
261
- initialState: string;
262
- transitions: DomainTransition[];
263
- ticks: DomainTick[];
264
- rules: string[];
265
- }
266
- interface DomainDocument extends ASTNode {
267
- type: 'document';
268
- entities: DomainEntity[];
269
- pages: DomainPage[];
270
- behaviors: DomainBehavior[];
271
- }
272
- interface SectionMapping {
273
- sectionId: string;
274
- sectionType: 'entity' | 'page' | 'behavior' | 'tick';
275
- schemaPath: string;
276
- domainText: string;
277
- aiDescription?: string;
278
- range?: SourceRange;
279
- lastModified?: number;
280
- }
281
- interface ParseError {
282
- message: string;
283
- range?: SourceRange;
284
- suggestion?: string;
285
- }
286
-
287
- /**
288
- * Schema to Domain Converter
289
- *
290
- * Converts a complete OrbitalSchema to domain language text.
291
- * Generates three sections: Entities, Pages, and Behaviors.
292
- *
293
- * Updated to read from OrbitalSchema where entities, pages, and traits
294
- * are grouped into Orbital units. Also supports legacy KFlowSchema format
295
- * for backward compatibility.
296
- */
297
-
298
- interface SchemaToDomainResult {
299
- /** The complete domain text document */
300
- domainText: string;
301
- /** Parsed AST representation */
302
- document: DomainDocument;
303
- /** Mapping of sections to schema paths */
304
- mappings: SectionMapping[];
305
- /** Separate section texts for individual editing */
306
- sections: {
307
- entities: string[];
308
- pages: string[];
309
- behaviors: string[];
310
- };
311
- }
312
- /**
313
- * Legacy KFlowSchema format (for backward compatibility)
314
- */
315
- interface LegacyKFlowSchema {
316
- name?: string;
317
- dataEntities?: Array<Record<string, unknown>>;
318
- ui?: {
319
- pages?: Array<Record<string, unknown>>;
320
- };
321
- traits?: Array<Record<string, unknown>>;
322
- ticks?: Array<Record<string, unknown>>;
323
- }
324
- /**
325
- * Combined input type for the converter
326
- */
327
- type SchemaInput = OrbitalSchema | LegacyKFlowSchema;
328
- /**
329
- * Convert a complete OrbitalSchema or legacy KFlowSchema to domain language
330
- */
331
- declare function convertSchemaToDomain(schema: SchemaInput): SchemaToDomainResult;
332
-
333
- /**
334
- * Domain to Schema Converter
335
- *
336
- * Applies domain language text changes to an OrbitalSchema.
337
- * Supports incremental updates (single section) and full replacement.
338
- *
339
- * Updated to use OrbitalSchema where entities, pages, and traits
340
- * are grouped into Orbital units instead of flat arrays.
341
- */
342
-
343
- interface DomainToSchemaResult {
344
- /** Whether the conversion was successful */
345
- success: boolean;
346
- /** The updated schema */
347
- schema: OrbitalSchema;
348
- /** Any parse errors encountered */
349
- errors: ParseError[];
350
- /** Warnings (non-fatal issues) */
351
- warnings: ParseError[];
352
- /** Updated section mappings */
353
- mappings: SectionMapping[];
354
- }
355
- /**
356
- * Parse a complete domain document and convert to OrbitalSchema
357
- */
358
- declare function convertDomainToSchema(domainText: string, baseSchema?: OrbitalSchema): DomainToSchemaResult;
359
- /**
360
- * Apply a single section update to an OrbitalSchema
361
- */
362
- declare function applySectionUpdate(schema: OrbitalSchema, sectionType: 'entity' | 'page' | 'behavior' | 'tick', sectionId: string, newDomainText: string): DomainToSchemaResult;
363
- /**
364
- * Delete a section from the schema
365
- */
366
- declare function deleteSection(schema: OrbitalSchema, sectionType: 'entity' | 'page' | 'behavior' | 'tick', sectionId: string): OrbitalSchema;
367
-
368
123
  /**
369
124
  * Orbital Generator
370
125
  *
@@ -739,4 +494,4 @@ declare function formatSummary(summary: MetricsSummary): string;
739
494
  */
740
495
  declare function analyzeFailures(failures: GenerationMetrics[]): string[];
741
496
 
742
- export { type ContextCompactionConfig, DEFAULT_COMPACTION_CONFIG, type DeepAgentCompleteEvent, type DeepAgentErrorEvent, type DeepAgentEvent, type DeepAgentExecutionEvent, type DeepAgentSchemaEvent, type DeepAgentStartEvent, type DomainDocument, type DomainToSchemaResult, type GenerationMetrics, MetricsCollector, type MetricsSummary, type CombinerOptions as OrbitalCombinerOptions, type CombinerResult as OrbitalCombinerResult, type OrbitalSchemaValidationResult, type ParseError, type SchemaToDomainResult, type SectionMapping, SubAgent, analyzeFailures, applySectionUpdate, combineOrbitals, combineOrbitalsToSchema, convertDomainToSchema, convertSchemaToDomain, createErrorFixerSubagent, createSchemaGeneratorSubagent, createSubagentConfigs, createSubagents, createSummaryPrompt, createTestAnalyzerSubagent, deleteSection, estimateCacheSavings, estimateCombineComplexity, estimateTokens, formatSummary, generateFullOrbital, isCompleteEvent, isErrorEvent, isExecutionEvent, isSchemaEvent, isStartEvent, needsCompaction, parseDeepAgentEvent };
497
+ export { type ContextCompactionConfig, DEFAULT_COMPACTION_CONFIG, type DeepAgentCompleteEvent, type DeepAgentErrorEvent, type DeepAgentEvent, type DeepAgentExecutionEvent, type DeepAgentSchemaEvent, type DeepAgentStartEvent, type GenerationMetrics, MetricsCollector, type MetricsSummary, type CombinerOptions as OrbitalCombinerOptions, type CombinerResult as OrbitalCombinerResult, type OrbitalSchemaValidationResult, SubAgent, analyzeFailures, combineOrbitals, combineOrbitalsToSchema, createErrorFixerSubagent, createSchemaGeneratorSubagent, createSubagentConfigs, createSubagents, createSummaryPrompt, createTestAnalyzerSubagent, estimateCacheSavings, estimateCombineComplexity, estimateTokens, formatSummary, generateFullOrbital, isCompleteEvent, isErrorEvent, isExecutionEvent, isSchemaEvent, isStartEvent, needsCompaction, parseDeepAgentEvent };