@agentxjs/core 1.9.10-dev → 2.0.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.
Files changed (99) hide show
  1. package/README.md +342 -0
  2. package/dist/RpcClient-BcJ_zAGu.d.ts +304 -0
  3. package/dist/agent/engine/internal/index.d.ts +20 -15
  4. package/dist/agent/engine/internal/index.js +1 -2
  5. package/dist/agent/engine/mealy/index.js +0 -1
  6. package/dist/agent/index.d.ts +4 -4
  7. package/dist/agent/index.js +15 -15
  8. package/dist/agent/types/index.d.ts +4 -4
  9. package/dist/agent/types/index.js +1 -2
  10. package/dist/bash/index.d.ts +29 -0
  11. package/dist/bash/index.js +7 -0
  12. package/dist/{bus-uF1DM2ox.d.ts → bus-C9FLWIu8.d.ts} +3 -1
  13. package/dist/{chunk-K6WXQ2RW.js → chunk-23UUBQXR.js} +1 -2
  14. package/dist/chunk-23UUBQXR.js.map +1 -0
  15. package/dist/chunk-BHOD5PKR.js +55 -0
  16. package/dist/chunk-BHOD5PKR.js.map +1 -0
  17. package/dist/{chunk-I7GYR3MN.js → chunk-DEAR6N3O.js} +77 -91
  18. package/dist/chunk-DEAR6N3O.js.map +1 -0
  19. package/dist/chunk-FI7WQFGV.js +37 -0
  20. package/dist/chunk-FI7WQFGV.js.map +1 -0
  21. package/dist/{chunk-AT5P47YA.js → chunk-JTKCV7IS.js} +9 -9
  22. package/dist/chunk-JTKCV7IS.js.map +1 -0
  23. package/dist/{chunk-E5FPOAPO.js → chunk-LTVNPHST.js} +1 -1
  24. package/dist/chunk-LTVNPHST.js.map +1 -0
  25. package/dist/chunk-SKS7S2RY.js +1 -0
  26. package/dist/common/logger/index.js +0 -2
  27. package/dist/common/logger/index.js.map +1 -1
  28. package/dist/container/index.d.ts +3 -4
  29. package/dist/container/index.js +0 -2
  30. package/dist/container/index.js.map +1 -1
  31. package/dist/driver/index.d.ts +2 -310
  32. package/dist/event/index.d.ts +4 -4
  33. package/dist/event/index.js +1 -2
  34. package/dist/event/types/index.d.ts +4 -10
  35. package/dist/event/types/index.js +1 -2
  36. package/dist/{event-CDuTzs__.d.ts → event-DNWOBSBO.d.ts} +3 -4
  37. package/dist/image/index.d.ts +9 -5
  38. package/dist/image/index.js +5 -2
  39. package/dist/image/index.js.map +1 -1
  40. package/dist/index-CuS1i5V-.d.ts +609 -0
  41. package/dist/index.d.ts +2 -2
  42. package/dist/index.js +16 -16
  43. package/dist/{message-BMrMm1pq.d.ts → message-03TJzvIX.d.ts} +10 -33
  44. package/dist/mq/index.js +0 -2
  45. package/dist/mq/index.js.map +1 -1
  46. package/dist/network/index.d.ts +3 -291
  47. package/dist/network/index.js +3 -14
  48. package/dist/network/index.js.map +1 -1
  49. package/dist/persistence/index.d.ts +2 -155
  50. package/dist/platform/index.d.ts +76 -0
  51. package/dist/platform/index.js.map +1 -0
  52. package/dist/runtime/index.d.ts +26 -59
  53. package/dist/runtime/index.js +117 -33
  54. package/dist/runtime/index.js.map +1 -1
  55. package/dist/session/index.d.ts +4 -52
  56. package/dist/session/index.js +4 -51
  57. package/dist/session/index.js.map +1 -1
  58. package/dist/types-aE74Eo6G.d.ts +90 -0
  59. package/package.json +10 -5
  60. package/src/agent/__tests__/engine/internal/messageAssemblerProcessor.test.ts +291 -87
  61. package/src/agent/__tests__/engine/internal/turnTrackerProcessor.test.ts +56 -75
  62. package/src/agent/engine/MealyMachine.ts +1 -1
  63. package/src/agent/engine/internal/messageAssemblerProcessor.ts +99 -114
  64. package/src/agent/engine/internal/turnTrackerProcessor.ts +23 -27
  65. package/src/agent/types/event.ts +0 -4
  66. package/src/agent/types/index.ts +1 -3
  67. package/src/agent/types/message.ts +9 -43
  68. package/src/bash/index.ts +21 -0
  69. package/src/bash/tool.ts +57 -0
  70. package/src/bash/types.ts +108 -0
  71. package/src/driver/index.ts +1 -0
  72. package/src/driver/types.ts +122 -4
  73. package/src/event/__tests__/EventBus.test.ts +1 -1
  74. package/src/event/types/agent.ts +0 -11
  75. package/src/event/types/command.ts +3 -1
  76. package/src/image/Image.ts +11 -1
  77. package/src/image/types.ts +8 -2
  78. package/src/network/RpcClient.ts +21 -20
  79. package/src/network/index.ts +1 -1
  80. package/src/persistence/types.ts +5 -2
  81. package/src/platform/index.ts +21 -0
  82. package/src/platform/types.ts +84 -0
  83. package/src/runtime/AgentXRuntime.ts +184 -57
  84. package/src/runtime/__tests__/AgentXRuntime.test.ts +343 -0
  85. package/src/runtime/index.ts +7 -19
  86. package/src/runtime/types.ts +10 -62
  87. package/dist/chunk-7D4SUZUM.js +0 -38
  88. package/dist/chunk-AT5P47YA.js.map +0 -1
  89. package/dist/chunk-E5FPOAPO.js.map +0 -1
  90. package/dist/chunk-I7GYR3MN.js.map +0 -1
  91. package/dist/chunk-K6WXQ2RW.js.map +0 -1
  92. package/dist/workspace/index.d.ts +0 -111
  93. package/dist/wrapper-Y3UTVU2E.js +0 -3635
  94. package/dist/wrapper-Y3UTVU2E.js.map +0 -1
  95. package/src/workspace/index.ts +0 -27
  96. package/src/workspace/types.ts +0 -131
  97. /package/dist/{workspace → bash}/index.js.map +0 -0
  98. /package/dist/{chunk-7D4SUZUM.js.map → chunk-SKS7S2RY.js.map} +0 -0
  99. /package/dist/{workspace → platform}/index.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/event/types/base.ts","../src/event/types/driver.ts","../src/event/types/agent.ts","../src/event/types/session.ts","../src/event/types/container.ts","../src/event/types/command.ts"],"sourcesContent":["/**\n * Base Event Types - SystemEvent, EventSource, EventIntent, EventCategory, EventContext\n *\n * Foundation types for the event system.\n */\n\n// ============================================================================\n// SECTION 1: Legacy BusEvent Types (for backward compatibility)\n// ============================================================================\n\n/**\n * BusEvent - Base event type for EventBus\n *\n * All events flowing through the EventBus must conform to this structure.\n * This is a minimal event type that can be extended for specific use cases.\n *\n * @deprecated Use SystemEvent instead for full event system support\n */\nexport interface BusEvent<T extends string = string, D = unknown> {\n /**\n * Event type identifier (e.g., \"text_delta\", \"assistant_message\")\n */\n readonly type: T;\n\n /**\n * Event timestamp (Unix milliseconds)\n */\n readonly timestamp: number;\n\n /**\n * Event payload data\n */\n readonly data: D;\n\n /**\n * Event source (optional, for routing/filtering)\n */\n readonly source?: string;\n\n /**\n * Event category (optional, for classification)\n */\n readonly category?: string;\n\n /**\n * Event intent (optional, for command pattern)\n */\n readonly intent?: string;\n}\n\n// ============================================================================\n// SECTION 2: Base Types (SystemEvent, EventSource, EventIntent, EventCategory)\n// ============================================================================\n\n/**\n * Event source - where the event originated\n */\nexport type EventSource =\n | \"driver\" // LLM Driver (Claude API, etc.)\n | \"agent\" // Agent internal\n | \"session\" // Session operations\n | \"container\" // Container operations\n | \"sandbox\" // Sandbox resources (Workspace, MCP)\n | \"command\"; // Command request/response (API operations)\n\n/**\n * Event intent - what the event represents\n */\nexport type EventIntent =\n | \"request\" // Request to perform action (may be forwarded or executed)\n | \"result\" // Result of completed action\n | \"notification\"; // State change notification (no action needed)\n\n/**\n * Event category - fine-grained classification within source\n */\nexport type EventCategory =\n // Environment categories\n | \"stream\" // Streaming output from LLM\n | \"connection\" // Network connection status\n // Agent categories\n | \"state\" // State transitions\n | \"message\" // Complete messages\n | \"turn\" // Conversation turns\n | \"error\" // Errors\n // Session categories\n | \"lifecycle\" // Creation/destruction\n | \"persist\" // Persistence operations\n | \"action\" // User actions (resume, fork)\n // Sandbox categories\n | \"workdir\" // File operations\n | \"mcp\" // MCP tool operations\n // Command categories (API request/response)\n | \"request\" // Request to perform action\n | \"response\"; // Response with result\n\n/**\n * EventContext - Scope information attached to events\n */\nexport interface EventContext {\n /**\n * Container ID (isolation boundary)\n */\n containerId?: string;\n\n /**\n * Image ID (persistent conversation identity)\n */\n imageId?: string;\n\n /**\n * Agent ID (if event is agent-scoped)\n */\n agentId?: string;\n\n /**\n * Session ID (if event is session-scoped)\n */\n sessionId?: string;\n\n /**\n * Turn ID (for correlating events within a single turn)\n * A turn = one user message + assistant response cycle\n */\n turnId?: string;\n\n /**\n * Correlation ID (for request-response tracking)\n */\n correlationId?: string;\n}\n\n/**\n * SystemEvent - Base interface for ALL events in the system\n *\n * Every event has:\n * - type: What happened (e.g., \"text_delta\", \"session_saved\")\n * - timestamp: When it happened\n * - data: Event payload\n * - source: Where it came from\n * - category: What kind of event\n * - intent: What it means (notification/request/result)\n * - context: Optional scope information\n * - broadcastable: Whether to broadcast to external clients (default: true)\n */\nexport interface SystemEvent<\n T extends string = string,\n D = unknown,\n S extends EventSource = EventSource,\n C extends EventCategory = EventCategory,\n I extends EventIntent = EventIntent,\n> {\n /**\n * Event type identifier (e.g., \"text_delta\", \"session_saved\")\n */\n readonly type: T;\n\n /**\n * Event timestamp (Unix milliseconds)\n */\n readonly timestamp: number;\n\n /**\n * Event payload data\n */\n readonly data: D;\n\n /**\n * Event source - where the event originated\n */\n readonly source: S;\n\n /**\n * Event category - fine-grained classification\n */\n readonly category: C;\n\n /**\n * Event intent - what the event represents\n */\n readonly intent: I;\n\n /**\n * Event context - scope information (optional)\n */\n readonly context?: EventContext;\n\n /**\n * Whether to broadcast this event to external clients (SSE/WebSocket)\n *\n * - true or undefined: Broadcast to all external clients\n * - false: Only consumed internally, not broadcast\n *\n * Used for internal events like DriveableEvent that should be\n * processed by the engine but not sent directly to clients.\n * @default true\n */\n readonly broadcastable?: boolean;\n}\n\n// Type Guards for SystemEvent\n/**\n * Check if event is from a specific source\n */\nexport function isFromSource<S extends EventSource>(\n event: SystemEvent,\n source: S\n): event is SystemEvent<string, unknown, S> {\n return event.source === source;\n}\n\n/**\n * Check if event has a specific intent\n */\nexport function hasIntent<I extends EventIntent>(\n event: SystemEvent,\n intent: I\n): event is SystemEvent<string, unknown, EventSource, EventCategory, I> {\n return event.intent === intent;\n}\n\n/**\n * Check if event is a request\n */\nexport function isRequest(event: SystemEvent): boolean {\n return event.intent === \"request\";\n}\n\n/**\n * Check if event is a result\n */\nexport function isResult(event: SystemEvent): boolean {\n return event.intent === \"result\";\n}\n\n/**\n * Check if event is a notification\n */\nexport function isNotification(event: SystemEvent): boolean {\n return event.intent === \"notification\";\n}\n","/**\n * Environment Events - External world events (LLM API, Network)\n *\n * DriveableEvent, ConnectionEvent, StopReason, ErrorEvent\n */\n\nimport type { SystemEvent } from \"./base\";\n\n// ============================================================================\n// Stop Reason\n// ============================================================================\n\n/**\n * Reason why the LLM stopped generating\n *\n * Based on common stop reasons across multiple LLM providers:\n * - Anthropic Claude: end_turn, max_tokens, tool_use, stop_sequence\n * - OpenAI: stop, length, tool_calls, content_filter\n * - Vercel AI SDK: stop, length, tool-calls, content-filter, error, other\n */\nexport type StopReason =\n /**\n * Natural completion - model decided to stop\n */\n | \"end_turn\"\n\n /**\n * Reached maximum token limit\n */\n | \"max_tokens\"\n\n /**\n * Model requested tool usage\n */\n | \"tool_use\"\n\n /**\n * Encountered a custom stop sequence\n */\n | \"stop_sequence\"\n\n /**\n * Content filter triggered\n */\n | \"content_filter\"\n\n /**\n * Error occurred during generation\n */\n | \"error\"\n\n /**\n * Other/unknown reason\n */\n | \"other\";\n\n/**\n * Type guard to check if a string is a valid StopReason\n */\nexport function isStopReason(value: string): value is StopReason {\n return [\n \"end_turn\",\n \"max_tokens\",\n \"tool_use\",\n \"stop_sequence\",\n \"content_filter\",\n \"error\",\n \"other\",\n ].includes(value);\n}\n\n// ============================================================================\n// Driveable Events (LLM Stream Events)\n// ============================================================================\n\n/**\n * Base interface for all LLM stream events (DriveableEvent)\n *\n * All DriveableEvents have:\n * - source: \"driver\" (from LLM Driver)\n * - category: \"stream\" (streaming output)\n * - intent: \"notification\" (informational, no action needed)\n * - requestId: correlation with the original request\n * - context: agent/image/session scope (inherited from SystemEvent)\n */\ninterface BaseStreamEvent<T extends string, D = unknown> extends SystemEvent<\n T,\n D,\n \"driver\",\n \"stream\",\n \"notification\"\n> {\n /**\n * Content block index (for multi-block responses)\n */\n index?: number;\n\n /**\n * Request ID for correlating events with the original message_send_request\n */\n requestId?: string;\n}\n\n// Message Lifecycle Events\n/**\n * MessageStartEvent - Emitted when streaming message begins\n */\nexport interface MessageStartEvent extends BaseStreamEvent<\n \"message_start\",\n {\n message: {\n id: string;\n model: string;\n };\n }\n> {}\n\n/**\n * MessageDeltaEvent - Emitted with message-level updates\n */\nexport interface MessageDeltaEvent extends BaseStreamEvent<\n \"message_delta\",\n {\n usage?: {\n inputTokens: number;\n outputTokens: number;\n };\n }\n> {}\n\n/**\n * MessageStopEvent - Emitted when streaming message completes\n */\nexport interface MessageStopEvent extends BaseStreamEvent<\n \"message_stop\",\n {\n stopReason?: StopReason;\n stopSequence?: string;\n }\n> {}\n\n// Text Content Block Events\n/**\n * TextContentBlockStartEvent - Text block started\n */\nexport interface TextContentBlockStartEvent extends BaseStreamEvent<\n \"text_content_block_start\",\n Record<string, never>\n> {\n index: number;\n}\n\n/**\n * TextDeltaEvent - Incremental text output\n */\nexport interface TextDeltaEvent extends BaseStreamEvent<\n \"text_delta\",\n {\n text: string;\n }\n> {}\n\n/**\n * TextContentBlockStopEvent - Text block completed\n */\nexport interface TextContentBlockStopEvent extends BaseStreamEvent<\n \"text_content_block_stop\",\n Record<string, never>\n> {\n index: number;\n}\n\n// Tool Use Content Block Events\n/**\n * ToolUseContentBlockStartEvent - Tool use block started\n */\nexport interface ToolUseContentBlockStartEvent extends BaseStreamEvent<\n \"tool_use_content_block_start\",\n {\n id: string;\n name: string;\n }\n> {\n index: number;\n}\n\n/**\n * InputJsonDeltaEvent - Incremental tool input JSON\n */\nexport interface InputJsonDeltaEvent extends BaseStreamEvent<\n \"input_json_delta\",\n {\n partialJson: string;\n }\n> {\n index: number;\n}\n\n/**\n * ToolUseContentBlockStopEvent - Tool use block completed\n */\nexport interface ToolUseContentBlockStopEvent extends BaseStreamEvent<\n \"tool_use_content_block_stop\",\n Record<string, never>\n> {\n index: number;\n}\n\n// Tool Execution Events\n/**\n * ToolCallEvent - Tool call ready for execution\n */\nexport interface ToolCallEvent extends BaseStreamEvent<\n \"tool_call\",\n {\n id: string;\n name: string;\n input: Record<string, unknown>;\n }\n> {}\n\n/**\n * ToolResultEvent - Tool execution result\n */\nexport interface ToolResultEvent extends BaseStreamEvent<\n \"tool_result\",\n {\n toolUseId: string;\n result: unknown;\n isError?: boolean;\n }\n> {}\n\n// Interrupt Event\n/**\n * InterruptedEvent - Stream interrupted\n */\nexport interface InterruptedEvent extends BaseStreamEvent<\n \"interrupted\",\n {\n reason: \"user_interrupt\" | \"timeout\" | \"error\" | \"system\";\n }\n> {}\n\n// Error Event (Environment)\n/**\n * ErrorReceivedEvent - Error received from environment (e.g., Claude API error)\n *\n * This event drives the MealyMachine to produce:\n * - error_occurred (StateEvent) -> state transitions to \"error\"\n * - error_message (MessageEvent) -> displayed in chat\n */\nexport interface ErrorReceivedEvent extends BaseStreamEvent<\n \"error_received\",\n {\n /** Error message (human-readable) */\n message: string;\n /** Error code (e.g., \"rate_limit_error\", \"api_error\", \"overloaded_error\") */\n errorCode?: string;\n }\n> {}\n\n/**\n * DriveableEvent - All events that can drive Agent\n */\nexport type DriveableEvent =\n // Message lifecycle\n | MessageStartEvent\n | MessageDeltaEvent\n | MessageStopEvent\n // Text content block\n | TextContentBlockStartEvent\n | TextDeltaEvent\n | TextContentBlockStopEvent\n // Tool use content block\n | ToolUseContentBlockStartEvent\n | InputJsonDeltaEvent\n | ToolUseContentBlockStopEvent\n // Tool execution\n | ToolCallEvent\n | ToolResultEvent\n // Interrupt\n | InterruptedEvent\n // Error\n | ErrorReceivedEvent;\n\n/**\n * DriveableEventType - String literal union of all driveable event types\n */\nexport type DriveableEventType = DriveableEvent[\"type\"];\n\n/**\n * Type guard: is this a DriveableEvent?\n */\nexport function isDriveableEvent(event: {\n source?: string;\n category?: string;\n}): event is DriveableEvent {\n return event.source === \"driver\" && event.category === \"stream\";\n}\n\n// ============================================================================\n// Connection Events (Network Status)\n// ============================================================================\n\n/**\n * Base interface for all connection events\n */\ninterface BaseConnectionEvent<T extends string, D = unknown> extends SystemEvent<\n T,\n D,\n \"driver\",\n \"connection\",\n \"notification\"\n> {}\n\n/**\n * ConnectedEvent - Connection established\n */\nexport interface ConnectedEvent extends BaseConnectionEvent<\n \"connected\",\n {\n url?: string;\n reconnectAttempt?: number;\n }\n> {}\n\n/**\n * DisconnectedEvent - Connection lost\n */\nexport interface DisconnectedEvent extends BaseConnectionEvent<\n \"disconnected\",\n {\n reason?: string;\n code?: number;\n willReconnect?: boolean;\n }\n> {}\n\n/**\n * ReconnectingEvent - Attempting to reconnect\n */\nexport interface ReconnectingEvent extends BaseConnectionEvent<\n \"reconnecting\",\n {\n attempt: number;\n maxAttempts?: number;\n delayMs: number;\n }\n> {}\n\n/**\n * ConnectionEvent - All network status events\n */\nexport type ConnectionEvent = ConnectedEvent | DisconnectedEvent | ReconnectingEvent;\n\n/**\n * ConnectionEventType - String literal union\n */\nexport type ConnectionEventType = ConnectionEvent[\"type\"];\n\n/**\n * Type guard: is this a ConnectionEvent?\n */\nexport function isConnectionEvent(event: {\n source?: string;\n category?: string;\n}): event is ConnectionEvent {\n return event.source === \"driver\" && event.category === \"connection\";\n}\n\n/**\n * EnvironmentEvent - Union of all environment events\n */\nexport type EnvironmentEvent = DriveableEvent | ConnectionEvent;\n\n// ============================================================================\n// Error Events (System-wide error notifications)\n// ============================================================================\n\n/**\n * SystemError - Generic error event\n *\n * Used for all errors until we create specific error types.\n * Can originate from any source (runtime, agent, container, etc.)\n *\n * @example\n * ```typescript\n * const error: SystemError = {\n * type: \"system_error\",\n * timestamp: Date.now(),\n * source: \"container\",\n * category: \"error\",\n * intent: \"notification\",\n * data: {\n * message: \"Container not found: default\",\n * requestId: \"req_123\",\n * severity: \"error\",\n * },\n * context: { containerId: \"default\" }\n * };\n * ```\n */\nexport interface SystemError extends SystemEvent<\n \"system_error\",\n {\n /**\n * Error message (human-readable)\n */\n message: string;\n\n /**\n * Associated request ID (if error is related to a request)\n */\n requestId?: string;\n\n /**\n * Error severity\n * - info: Informational, no action needed\n * - warn: Warning, operation succeeded but with issues\n * - error: Error, operation failed\n * - fatal: Fatal error, system unstable\n */\n severity?: \"info\" | \"warn\" | \"error\" | \"fatal\";\n\n /**\n * Additional error details (stack trace, error code, etc.)\n */\n details?: unknown;\n },\n \"agent\" | \"container\" | \"driver\" | \"session\" | \"sandbox\" | \"command\",\n \"error\",\n \"notification\"\n> {}\n\n/**\n * Error event map - will grow as we add specific error types\n */\nexport interface ErrorEventMap {\n system_error: SystemError;\n // Future: container_not_found_error, agent_creation_error, llm_api_error, etc.\n}\n\n/**\n * Error event types\n */\nexport type ErrorEventType = keyof ErrorEventMap;\n\n/**\n * Union of all error events\n */\nexport type ErrorEvent = ErrorEventMap[ErrorEventType];\n","/**\n * Agent Events - Events from Agent domain (stream/state/message/turn)\n *\n * Agent events for the EventBus system.\n */\n\nimport type {\n UserMessage,\n AssistantMessage,\n ToolResultMessage,\n ErrorMessage,\n} from \"../../agent/types\";\nimport type { SystemEvent, EventContext } from \"./base\";\nimport type { StopReason } from \"./driver\";\n\n// ============================================================================\n// Agent Event Categories and Base Types\n// ============================================================================\n\n/**\n * Agent event categories\n */\nexport type AgentEventCategory = \"stream\" | \"state\" | \"message\" | \"turn\";\n\n/**\n * BaseAgentEvent - Base interface for all Agent events\n *\n * Extends SystemEvent with fixed source and intent.\n */\nexport interface BaseAgentEvent<\n T extends string,\n D,\n C extends AgentEventCategory,\n> extends SystemEvent<T, D, \"agent\", C, \"notification\"> {\n /**\n * Runtime context (optional, added by Presenter)\n */\n readonly context?: EventContext;\n}\n\n// ============================================================================\n// Agent Stream Events\n// ============================================================================\n\n/**\n * Base type for agent stream events\n */\nexport interface AgentStreamEventBase<T extends string, D> extends BaseAgentEvent<T, D, \"stream\"> {}\n\n// Re-export StopReason for convenience (as AgentStopReason to avoid conflict)\nexport type AgentStopReason = StopReason;\n\n/**\n * AgentMessageStartEvent - Streaming message begins\n */\nexport interface AgentMessageStartEvent extends AgentStreamEventBase<\n \"message_start\",\n {\n messageId: string;\n model: string;\n }\n> {}\n\n/**\n * AgentMessageDeltaEvent - Message-level updates (usage info)\n */\nexport interface AgentMessageDeltaEvent extends AgentStreamEventBase<\n \"message_delta\",\n {\n usage?: {\n inputTokens: number;\n outputTokens: number;\n };\n }\n> {}\n\n/**\n * AgentMessageStopEvent - Streaming message completes\n */\nexport interface AgentMessageStopEvent extends AgentStreamEventBase<\n \"message_stop\",\n {\n stopReason?: StopReason;\n }\n> {}\n\n/**\n * AgentTextDeltaEvent - Incremental text output\n */\nexport interface AgentTextDeltaEvent extends AgentStreamEventBase<\n \"text_delta\",\n {\n text: string;\n }\n> {}\n\n/**\n * AgentToolUseStartEvent - Tool use block started\n */\nexport interface AgentToolUseStartEvent extends AgentStreamEventBase<\n \"tool_use_start\",\n {\n toolCallId: string;\n toolName: string;\n }\n> {}\n\n/**\n * AgentInputJsonDeltaEvent - Incremental tool input JSON\n */\nexport interface AgentInputJsonDeltaEvent extends AgentStreamEventBase<\n \"input_json_delta\",\n {\n partialJson: string;\n }\n> {}\n\n/**\n * AgentToolUseStopEvent - Tool use block completed\n */\nexport interface AgentToolUseStopEvent extends AgentStreamEventBase<\n \"tool_use_stop\",\n {\n toolCallId: string;\n toolName: string;\n input: Record<string, unknown>;\n }\n> {}\n\n/**\n * AgentToolResultEvent - Tool execution result\n */\nexport interface AgentToolResultEvent extends AgentStreamEventBase<\n \"tool_result\",\n {\n toolCallId: string;\n result: unknown;\n isError?: boolean;\n }\n> {}\n\n/**\n * AgentErrorReceivedEvent - Error received from environment\n *\n * Processed by MealyMachine to produce:\n * - error_occurred (StateEvent)\n * - error_message (MessageEvent)\n */\nexport interface AgentErrorReceivedEvent extends AgentStreamEventBase<\n \"error_received\",\n {\n /** Error message (human-readable) */\n message: string;\n /** Error code (e.g., \"rate_limit_error\", \"api_error\") */\n errorCode?: string;\n }\n> {}\n\n/**\n * AgentStreamEvent - All stream events\n */\nexport type AgentStreamEvent =\n | AgentMessageStartEvent\n | AgentMessageDeltaEvent\n | AgentMessageStopEvent\n | AgentTextDeltaEvent\n | AgentToolUseStartEvent\n | AgentInputJsonDeltaEvent\n | AgentToolUseStopEvent\n | AgentToolResultEvent\n | AgentErrorReceivedEvent;\n\n/**\n * AgentStreamEventType - String literal union\n */\nexport type AgentStreamEventType = AgentStreamEvent[\"type\"];\n\n/**\n * Type guard: is this a stream event?\n */\nexport function isAgentStreamEvent(event: {\n source?: string;\n category?: string;\n}): event is AgentStreamEvent {\n return event.source === \"agent\" && event.category === \"stream\";\n}\n\n// ============================================================================\n// Agent State Events\n// ============================================================================\n\n/**\n * Base type for state events\n */\nexport interface AgentStateEventBase<T extends string, D> extends BaseAgentEvent<T, D, \"state\"> {}\n\n// Conversation Events\n/**\n * ConversationQueuedEvent - Message queued for processing\n */\nexport interface ConversationQueuedEvent extends AgentStateEventBase<\n \"conversation_queued\",\n {\n messageId: string;\n }\n> {}\n\n/**\n * ConversationStartEvent - Conversation started\n */\nexport interface ConversationStartEvent extends AgentStateEventBase<\n \"conversation_start\",\n {\n messageId: string;\n }\n> {}\n\n/**\n * ConversationThinkingEvent - Agent is thinking\n */\nexport interface ConversationThinkingEvent extends AgentStateEventBase<\n \"conversation_thinking\",\n Record<string, never>\n> {}\n\n/**\n * ConversationRespondingEvent - Agent is responding\n */\nexport interface ConversationRespondingEvent extends AgentStateEventBase<\n \"conversation_responding\",\n Record<string, never>\n> {}\n\n/**\n * ConversationEndEvent - Conversation ended\n */\nexport interface ConversationEndEvent extends AgentStateEventBase<\n \"conversation_end\",\n {\n reason: \"completed\" | \"interrupted\" | \"error\";\n }\n> {}\n\n/**\n * ConversationInterruptedEvent - Conversation interrupted\n */\nexport interface ConversationInterruptedEvent extends AgentStateEventBase<\n \"conversation_interrupted\",\n {\n reason: string;\n }\n> {}\n\n// Tool Events\n/**\n * ToolPlannedEvent - Tool use planned\n */\nexport interface ToolPlannedEvent extends AgentStateEventBase<\n \"tool_planned\",\n {\n toolId: string;\n toolName: string;\n }\n> {}\n\n/**\n * ToolExecutingEvent - Tool is executing\n */\nexport interface ToolExecutingEvent extends AgentStateEventBase<\n \"tool_executing\",\n {\n toolId: string;\n toolName: string;\n input: Record<string, unknown>;\n }\n> {}\n\n/**\n * ToolCompletedEvent - Tool execution completed\n */\nexport interface ToolCompletedEvent extends AgentStateEventBase<\n \"tool_completed\",\n {\n toolId: string;\n toolName: string;\n result: unknown;\n }\n> {}\n\n/**\n * ToolFailedEvent - Tool execution failed\n */\nexport interface ToolFailedEvent extends AgentStateEventBase<\n \"tool_failed\",\n {\n toolId: string;\n toolName: string;\n error: string;\n }\n> {}\n\n// Error Events (State)\n/**\n * ErrorOccurredEvent - Error occurred during processing\n */\nexport interface ErrorOccurredEvent extends AgentStateEventBase<\n \"error_occurred\",\n {\n code: string;\n message: string;\n recoverable: boolean;\n category?: string;\n }\n> {}\n\n/**\n * AgentStateEvent - All state events\n */\nexport type AgentStateEvent =\n // Conversation\n | ConversationQueuedEvent\n | ConversationStartEvent\n | ConversationThinkingEvent\n | ConversationRespondingEvent\n | ConversationEndEvent\n | ConversationInterruptedEvent\n // Tool\n | ToolPlannedEvent\n | ToolExecutingEvent\n | ToolCompletedEvent\n | ToolFailedEvent\n // Error\n | ErrorOccurredEvent;\n\n/**\n * AgentStateEventType - String literal union\n */\nexport type AgentStateEventType = AgentStateEvent[\"type\"];\n\n/**\n * Type guard: is this a state event?\n */\nexport function isAgentStateEvent(event: {\n source?: string;\n category?: string;\n}): event is AgentStateEvent {\n return event.source === \"agent\" && event.category === \"state\";\n}\n\n// ============================================================================\n// Agent Message Events\n// ============================================================================\n\n/**\n * Base type for message events\n */\nexport interface AgentMessageEventBase<T extends string, D> extends BaseAgentEvent<\n T,\n D,\n \"message\"\n> {}\n\n/**\n * UserMessageEvent - User sent a message\n * Data: Complete UserMessage object\n */\nexport interface UserMessageEvent extends AgentMessageEventBase<\"user_message\", UserMessage> {}\n\n/**\n * AssistantMessageEvent - Assistant response message\n * Data: Complete AssistantMessage object\n */\nexport interface AssistantMessageEvent extends AgentMessageEventBase<\n \"assistant_message\",\n AssistantMessage\n> {}\n\n/**\n * ToolResultMessageEvent - Tool result message\n * Data: Complete ToolResultMessage object\n */\nexport interface ToolResultMessageEvent extends AgentMessageEventBase<\n \"tool_result_message\",\n ToolResultMessage\n> {}\n\n/**\n * ErrorMessageEvent - Error message displayed in chat\n * Data: Complete ErrorMessage object\n *\n * Generated when error_received StreamEvent is processed by MealyMachine.\n * Displayed in the chat history so users can see what went wrong.\n */\nexport interface ErrorMessageEvent extends AgentMessageEventBase<\"error_message\", ErrorMessage> {}\n\n/**\n * AgentMessageEvent - All message events\n */\nexport type AgentMessageEvent =\n | UserMessageEvent\n | AssistantMessageEvent\n | ToolResultMessageEvent\n | ErrorMessageEvent;\n\n/**\n * AgentMessageEventType - String literal union\n */\nexport type AgentMessageEventType = AgentMessageEvent[\"type\"];\n\n/**\n * Type guard: is this a message event?\n */\nexport function isAgentMessageEvent(event: {\n source?: string;\n category?: string;\n}): event is AgentMessageEvent {\n return event.source === \"agent\" && event.category === \"message\";\n}\n\n// ============================================================================\n// Agent Turn Events\n// ============================================================================\n\n/**\n * Base type for turn events\n */\nexport interface AgentTurnEventBase<T extends string, D> extends BaseAgentEvent<T, D, \"turn\"> {}\n\n/**\n * Token usage information\n */\nexport interface TokenUsage {\n inputTokens: number;\n outputTokens: number;\n totalTokens?: number;\n}\n\n/**\n * TurnRequestEvent - Turn started (user message received)\n */\nexport interface TurnRequestEvent extends AgentTurnEventBase<\n \"turn_request\",\n {\n turnId: string;\n messageId: string;\n content: string;\n timestamp: number;\n }\n> {}\n\n/**\n * TurnResponseEvent - Turn completed (assistant response finished)\n */\nexport interface TurnResponseEvent extends AgentTurnEventBase<\n \"turn_response\",\n {\n turnId: string;\n messageId: string;\n duration: number;\n usage?: TokenUsage;\n model?: string;\n stopReason?: string;\n timestamp: number;\n }\n> {}\n\n/**\n * AgentTurnEvent - All turn events\n */\nexport type AgentTurnEvent = TurnRequestEvent | TurnResponseEvent;\n\n/**\n * AgentTurnEventType - String literal union\n */\nexport type AgentTurnEventType = AgentTurnEvent[\"type\"];\n\n/**\n * Type guard: is this a turn event?\n */\nexport function isAgentTurnEvent(event: {\n source?: string;\n category?: string;\n}): event is AgentTurnEvent {\n return event.source === \"agent\" && event.category === \"turn\";\n}\n\n// ============================================================================\n// Agent Event Union\n// ============================================================================\n\n/**\n * AgentEvent - All events from Agent domain\n */\nexport type AgentEvent = AgentStreamEvent | AgentStateEvent | AgentMessageEvent | AgentTurnEvent;\n\n/**\n * Type guard: is this an agent event?\n */\nexport function isAgentEvent(event: { source?: string }): event is AgentEvent {\n return event.source === \"agent\";\n}\n","/**\n * Session Events - Session lifecycle, persist, and action events\n *\n * Events for session operations in the event system.\n */\n\nimport type { SystemEvent } from \"./base\";\n\n// ============================================================================\n// Session Lifecycle Events\n// ============================================================================\n\n/**\n * Base SessionLifecycleEvent\n */\ninterface BaseSessionLifecycleEvent<T extends string, D = unknown> extends SystemEvent<\n T,\n D,\n \"session\",\n \"lifecycle\",\n \"notification\"\n> {}\n\n/**\n * SessionCreatedEvent - Session was created\n */\nexport interface SessionCreatedEvent extends BaseSessionLifecycleEvent<\n \"session_created\",\n {\n sessionId: string;\n imageId: string;\n containerId: string;\n title?: string;\n createdAt: number;\n }\n> {}\n\n/**\n * SessionDestroyedEvent - Session was destroyed\n */\nexport interface SessionDestroyedEvent extends BaseSessionLifecycleEvent<\n \"session_destroyed\",\n {\n sessionId: string;\n reason?: string;\n }\n> {}\n\n/**\n * SessionLifecycleEvent - All session lifecycle events\n */\nexport type SessionLifecycleEvent = SessionCreatedEvent | SessionDestroyedEvent;\n\n/**\n * Type guard: is this a SessionLifecycleEvent?\n */\nexport function isSessionLifecycleEvent(event: {\n source?: string;\n category?: string;\n}): event is SessionLifecycleEvent {\n return event.source === \"session\" && event.category === \"lifecycle\";\n}\n\n// ============================================================================\n// Session Persist Events\n// ============================================================================\n\n/**\n * Base SessionPersistRequest\n */\ninterface BaseSessionPersistRequest<T extends string, D = unknown> extends SystemEvent<\n T,\n D,\n \"session\",\n \"persist\",\n \"request\"\n> {}\n\n/**\n * Base SessionPersistResult\n */\ninterface BaseSessionPersistResult<T extends string, D = unknown> extends SystemEvent<\n T,\n D,\n \"session\",\n \"persist\",\n \"result\"\n> {}\n\n/**\n * SessionSaveRequest - Request to save session\n */\nexport interface SessionSaveRequest extends BaseSessionPersistRequest<\n \"session_save_request\",\n {\n sessionId: string;\n title?: string;\n metadata?: Record<string, unknown>;\n }\n> {}\n\n/**\n * SessionSavedEvent - Session was saved\n */\nexport interface SessionSavedEvent extends BaseSessionPersistResult<\n \"session_saved\",\n {\n sessionId: string;\n savedAt: number;\n }\n> {}\n\n/**\n * MessagePersistRequest - Request to persist a message\n */\nexport interface MessagePersistRequest extends BaseSessionPersistRequest<\n \"message_persist_request\",\n {\n sessionId: string;\n messageId: string;\n role: \"user\" | \"assistant\" | \"tool_call\" | \"tool_result\";\n content: unknown;\n }\n> {}\n\n/**\n * MessagePersistedEvent - Message was persisted\n */\nexport interface MessagePersistedEvent extends BaseSessionPersistResult<\n \"message_persisted\",\n {\n sessionId: string;\n messageId: string;\n savedAt: number;\n }\n> {}\n\n/**\n * SessionPersistEvent - All session persist events\n */\nexport type SessionPersistEvent =\n | SessionSaveRequest\n | SessionSavedEvent\n | MessagePersistRequest\n | MessagePersistedEvent;\n\n/**\n * Session persist request events\n */\nexport type SessionPersistRequestEvent = SessionSaveRequest | MessagePersistRequest;\n\n/**\n * Session persist result events\n */\nexport type SessionPersistResultEvent = SessionSavedEvent | MessagePersistedEvent;\n\n/**\n * Type guard: is this a SessionPersistEvent?\n */\nexport function isSessionPersistEvent(event: {\n source?: string;\n category?: string;\n}): event is SessionPersistEvent {\n return event.source === \"session\" && event.category === \"persist\";\n}\n\n// ============================================================================\n// Session Action Events\n// ============================================================================\n\n/**\n * Base SessionActionRequest\n */\ninterface BaseSessionActionRequest<T extends string, D = unknown> extends SystemEvent<\n T,\n D,\n \"session\",\n \"action\",\n \"request\"\n> {}\n\n/**\n * Base SessionActionResult\n */\ninterface BaseSessionActionResult<T extends string, D = unknown> extends SystemEvent<\n T,\n D,\n \"session\",\n \"action\",\n \"result\"\n> {}\n\n/**\n * SessionResumeRequest - Request to resume a session\n */\nexport interface SessionResumeRequest extends BaseSessionActionRequest<\n \"session_resume_request\",\n {\n sessionId: string;\n containerId?: string;\n }\n> {}\n\n/**\n * SessionResumedEvent - Session was resumed\n */\nexport interface SessionResumedEvent extends BaseSessionActionResult<\n \"session_resumed\",\n {\n sessionId: string;\n agentId: string;\n resumedAt: number;\n }\n> {}\n\n/**\n * SessionForkRequest - Request to fork a session\n */\nexport interface SessionForkRequest extends BaseSessionActionRequest<\n \"session_fork_request\",\n {\n sessionId: string;\n newTitle?: string;\n }\n> {}\n\n/**\n * SessionForkedEvent - Session was forked\n */\nexport interface SessionForkedEvent extends BaseSessionActionResult<\n \"session_forked\",\n {\n originalSessionId: string;\n newSessionId: string;\n newImageId: string;\n forkedAt: number;\n }\n> {}\n\n/**\n * SessionTitleUpdateRequest - Request to update session title\n */\nexport interface SessionTitleUpdateRequest extends BaseSessionActionRequest<\n \"session_title_update_request\",\n {\n sessionId: string;\n title: string;\n }\n> {}\n\n/**\n * SessionTitleUpdatedEvent - Session title was updated\n */\nexport interface SessionTitleUpdatedEvent extends BaseSessionActionResult<\n \"session_title_updated\",\n {\n sessionId: string;\n title: string;\n updatedAt: number;\n }\n> {}\n\n/**\n * SessionActionEvent - All session action events\n */\nexport type SessionActionEvent =\n | SessionResumeRequest\n | SessionResumedEvent\n | SessionForkRequest\n | SessionForkedEvent\n | SessionTitleUpdateRequest\n | SessionTitleUpdatedEvent;\n\n/**\n * Session action request events\n */\nexport type SessionActionRequestEvent =\n | SessionResumeRequest\n | SessionForkRequest\n | SessionTitleUpdateRequest;\n\n/**\n * Session action result events\n */\nexport type SessionActionResultEvent =\n | SessionResumedEvent\n | SessionForkedEvent\n | SessionTitleUpdatedEvent;\n\n/**\n * Type guard: is this a SessionActionEvent?\n */\nexport function isSessionActionEvent(event: {\n source?: string;\n category?: string;\n}): event is SessionActionEvent {\n return event.source === \"session\" && event.category === \"action\";\n}\n\n// ============================================================================\n// Session Event Union\n// ============================================================================\n\n/**\n * SessionEvent - All session events\n */\nexport type SessionEvent = SessionLifecycleEvent | SessionPersistEvent | SessionActionEvent;\n\n/**\n * Type guard: is this a session event?\n */\nexport function isSessionEvent(event: { source?: string }): event is SessionEvent {\n return event.source === \"session\";\n}\n","/**\n * Container Events - Container lifecycle and sandbox events\n *\n * Events for container operations in the event system.\n */\n\nimport type { SystemEvent } from \"./base\";\n\n// ============================================================================\n// Container Lifecycle Events\n// ============================================================================\n\n/**\n * Base ContainerLifecycleEvent\n */\ninterface BaseContainerLifecycleEvent<T extends string, D = unknown> extends SystemEvent<\n T,\n D,\n \"container\",\n \"lifecycle\",\n \"notification\"\n> {}\n\n/**\n * ContainerCreatedEvent - Container was created\n */\nexport interface ContainerCreatedEvent extends BaseContainerLifecycleEvent<\n \"container_created\",\n {\n containerId: string;\n name?: string;\n createdAt: number;\n }\n> {}\n\n/**\n * ContainerDestroyedEvent - Container was destroyed\n */\nexport interface ContainerDestroyedEvent extends BaseContainerLifecycleEvent<\n \"container_destroyed\",\n {\n containerId: string;\n reason?: string;\n agentCount: number;\n }\n> {}\n\n/**\n * AgentRegisteredEvent - Agent was registered to container\n */\nexport interface AgentRegisteredEvent extends BaseContainerLifecycleEvent<\n \"agent_registered\",\n {\n containerId: string;\n agentId: string;\n definitionName: string;\n registeredAt: number;\n }\n> {}\n\n/**\n * AgentUnregisteredEvent - Agent was unregistered from container\n */\nexport interface AgentUnregisteredEvent extends BaseContainerLifecycleEvent<\n \"agent_unregistered\",\n {\n containerId: string;\n agentId: string;\n reason?: string;\n }\n> {}\n\n/**\n * ContainerLifecycleEvent - All container lifecycle events\n */\nexport type ContainerLifecycleEvent =\n | ContainerCreatedEvent\n | ContainerDestroyedEvent\n | AgentRegisteredEvent\n | AgentUnregisteredEvent;\n\n/**\n * Type guard: is this a ContainerLifecycleEvent?\n */\nexport function isContainerLifecycleEvent(event: {\n source?: string;\n category?: string;\n}): event is ContainerLifecycleEvent {\n return event.source === \"container\" && event.category === \"lifecycle\";\n}\n\n// ============================================================================\n// Sandbox Workdir Events\n// ============================================================================\n\n/**\n * Base WorkdirRequest\n */\ninterface BaseWorkdirRequest<T extends string, D = unknown> extends SystemEvent<\n T,\n D,\n \"sandbox\",\n \"workdir\",\n \"request\"\n> {}\n\n/**\n * Base WorkdirResult\n */\ninterface BaseWorkdirResult<T extends string, D = unknown> extends SystemEvent<\n T,\n D,\n \"sandbox\",\n \"workdir\",\n \"result\"\n> {}\n\n/**\n * Base WorkdirNotification\n */\ninterface BaseWorkdirNotification<T extends string, D = unknown> extends SystemEvent<\n T,\n D,\n \"sandbox\",\n \"workdir\",\n \"notification\"\n> {}\n\n/**\n * FileReadRequest - Request to read a file\n */\nexport interface FileReadRequest extends BaseWorkdirRequest<\n \"file_read_request\",\n {\n path: string;\n encoding?: string;\n }\n> {}\n\n/**\n * FileReadResult - File read result\n */\nexport interface FileReadResult extends BaseWorkdirResult<\n \"file_read_result\",\n {\n path: string;\n content: string;\n size: number;\n encoding: string;\n }\n> {}\n\n/**\n * FileWriteRequest - Request to write a file\n */\nexport interface FileWriteRequest extends BaseWorkdirRequest<\n \"file_write_request\",\n {\n path: string;\n content: string;\n encoding?: string;\n createDirectories?: boolean;\n }\n> {}\n\n/**\n * FileWrittenEvent - File was written\n */\nexport interface FileWrittenEvent extends BaseWorkdirResult<\n \"file_written\",\n {\n path: string;\n size: number;\n timestamp: number;\n }\n> {}\n\n/**\n * FileDeleteRequest - Request to delete a file\n */\nexport interface FileDeleteRequest extends BaseWorkdirRequest<\n \"file_delete_request\",\n {\n path: string;\n recursive?: boolean;\n }\n> {}\n\n/**\n * FileDeletedEvent - File was deleted\n */\nexport interface FileDeletedEvent extends BaseWorkdirResult<\n \"file_deleted\",\n {\n path: string;\n timestamp: number;\n }\n> {}\n\n/**\n * DirectoryListRequest - Request to list directory\n */\nexport interface DirectoryListRequest extends BaseWorkdirRequest<\n \"directory_list_request\",\n {\n path: string;\n recursive?: boolean;\n pattern?: string;\n }\n> {}\n\n/**\n * DirectoryListResult - Directory listing result\n */\nexport interface DirectoryListResult extends BaseWorkdirResult<\n \"directory_list_result\",\n {\n path: string;\n entries: Array<{\n name: string;\n type: \"file\" | \"directory\";\n size?: number;\n modifiedAt?: number;\n }>;\n }\n> {}\n\n/**\n * WorkdirErrorEvent - Workdir operation error\n */\nexport interface WorkdirErrorEvent extends BaseWorkdirNotification<\n \"workdir_error\",\n {\n operation: string;\n path: string;\n code: string;\n message: string;\n }\n> {}\n\n/**\n * WorkdirEvent - All workdir events\n */\nexport type WorkdirEvent =\n | FileReadRequest\n | FileReadResult\n | FileWriteRequest\n | FileWrittenEvent\n | FileDeleteRequest\n | FileDeletedEvent\n | DirectoryListRequest\n | DirectoryListResult\n | WorkdirErrorEvent;\n\n/**\n * Workdir request events\n */\nexport type WorkdirRequestEvent =\n | FileReadRequest\n | FileWriteRequest\n | FileDeleteRequest\n | DirectoryListRequest;\n\n/**\n * Workdir result events\n */\nexport type WorkdirResultEvent =\n | FileReadResult\n | FileWrittenEvent\n | FileDeletedEvent\n | DirectoryListResult;\n\n/**\n * Type guard: is this a WorkdirEvent?\n */\nexport function isWorkdirEvent(event: {\n source?: string;\n category?: string;\n}): event is WorkdirEvent {\n return event.source === \"sandbox\" && event.category === \"workdir\";\n}\n\n// ============================================================================\n// Sandbox MCP Events\n// ============================================================================\n\n/**\n * Base MCPRequest\n */\ninterface BaseMCPRequest<T extends string, D = unknown> extends SystemEvent<\n T,\n D,\n \"sandbox\",\n \"mcp\",\n \"request\"\n> {}\n\n/**\n * Base MCPResult\n */\ninterface BaseMCPResult<T extends string, D = unknown> extends SystemEvent<\n T,\n D,\n \"sandbox\",\n \"mcp\",\n \"result\"\n> {}\n\n/**\n * Base MCPNotification\n */\ninterface BaseMCPNotification<T extends string, D = unknown> extends SystemEvent<\n T,\n D,\n \"sandbox\",\n \"mcp\",\n \"notification\"\n> {}\n\n/**\n * ToolExecuteRequest - Request to execute a tool\n */\nexport interface ToolExecuteRequest extends BaseMCPRequest<\n \"tool_execute_request\",\n {\n toolId: string;\n toolName: string;\n serverName: string;\n input: Record<string, unknown>;\n timestamp: number;\n }\n> {}\n\n/**\n * ToolExecutedEvent - Tool execution completed\n */\nexport interface ToolExecutedEvent extends BaseMCPResult<\n \"tool_executed\",\n {\n toolId: string;\n toolName: string;\n result: unknown;\n duration: number;\n timestamp: number;\n }\n> {}\n\n/**\n * ToolExecutionErrorEvent - Tool execution failed\n */\nexport interface ToolExecutionErrorEvent extends BaseMCPNotification<\n \"tool_execution_error\",\n {\n toolId: string;\n toolName: string;\n code: string;\n message: string;\n timestamp: number;\n }\n> {}\n\n/**\n * MCPServerConnectedEvent - MCP server connected\n */\nexport interface MCPServerConnectedEvent extends BaseMCPNotification<\n \"mcp_server_connected\",\n {\n serverName: string;\n version?: string;\n toolCount: number;\n resourceCount: number;\n timestamp: number;\n }\n> {}\n\n/**\n * MCPServerDisconnectedEvent - MCP server disconnected\n */\nexport interface MCPServerDisconnectedEvent extends BaseMCPNotification<\n \"mcp_server_disconnected\",\n {\n serverName: string;\n reason?: string;\n timestamp: number;\n }\n> {}\n\n/**\n * ResourceReadRequest - Request to read an MCP resource\n */\nexport interface ResourceReadRequest extends BaseMCPRequest<\n \"resource_read_request\",\n {\n serverName: string;\n uri: string;\n }\n> {}\n\n/**\n * ResourceReadResult - Resource read result\n */\nexport interface ResourceReadResult extends BaseMCPResult<\n \"resource_read_result\",\n {\n serverName: string;\n uri: string;\n content: unknown;\n mimeType?: string;\n }\n> {}\n\n/**\n * MCPEvent - All MCP events\n */\nexport type MCPEvent =\n | ToolExecuteRequest\n | ToolExecutedEvent\n | ToolExecutionErrorEvent\n | MCPServerConnectedEvent\n | MCPServerDisconnectedEvent\n | ResourceReadRequest\n | ResourceReadResult;\n\n/**\n * MCP request events\n */\nexport type MCPRequestEvent = ToolExecuteRequest | ResourceReadRequest;\n\n/**\n * MCP result events\n */\nexport type MCPResultEvent = ToolExecutedEvent | ResourceReadResult;\n\n/**\n * Type guard: is this a MCPEvent?\n */\nexport function isMCPEvent(event: { source?: string; category?: string }): event is MCPEvent {\n return event.source === \"sandbox\" && event.category === \"mcp\";\n}\n\n// ============================================================================\n// Sandbox Event Union\n// ============================================================================\n\n/**\n * SandboxEvent - All sandbox events\n */\nexport type SandboxEvent = WorkdirEvent | MCPEvent;\n\n/**\n * Type guard: is this a sandbox event?\n */\nexport function isSandboxEvent(event: { source?: string }): event is SandboxEvent {\n return event.source === \"sandbox\";\n}\n\n// ============================================================================\n// Container Event Union\n// ============================================================================\n\n/**\n * ContainerEvent - All container events\n */\nexport type ContainerEvent = ContainerLifecycleEvent | SandboxEvent;\n\n/**\n * Type guard: is this a container event?\n */\nexport function isContainerEvent(event: { source?: string }): event is ContainerEvent {\n return event.source === \"container\" || event.source === \"sandbox\";\n}\n","/**\n * Command Events - API operations (request/response)\n *\n * Command events for the EventBus system.\n */\n\nimport type { SystemEvent } from \"./base\";\n\n// ============================================================================\n// Content Part Types (Self-contained)\n// ============================================================================\n\n/**\n * Text content part for user messages\n */\nexport interface TextPart {\n type: \"text\";\n text: string;\n}\n\n/**\n * Image content part for user messages\n */\nexport interface ImagePart {\n type: \"image\";\n data: string;\n mediaType: \"image/jpeg\" | \"image/png\" | \"image/gif\" | \"image/webp\";\n}\n\n/**\n * File content part for user messages\n */\nexport interface FilePart {\n type: \"file\";\n data: string;\n filename: string;\n mediaType: string;\n}\n\n/**\n * User content part - content that users can send in messages\n */\nexport type UserContentPart = TextPart | ImagePart | FilePart;\n\n// ============================================================================\n// Response Types (Self-contained)\n// ============================================================================\n\n/**\n * AgentXResponse - Base interface for all command response data\n *\n * All command response data types should extend this interface\n * to ensure consistent structure and enable automatic client-side handling.\n */\nexport interface AgentXResponse {\n /**\n * Request ID for correlation and tracking\n */\n requestId: string;\n\n /**\n * Error message if the request failed\n */\n error?: string;\n\n /**\n * Session IDs that the client should subscribe to\n */\n __subscriptions?: string[];\n}\n\n// ============================================================================\n// Record Types (Self-contained)\n// ============================================================================\n\n/**\n * MCP Server Configuration\n */\nexport interface McpServerConfig {\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n url?: string;\n}\n\n/**\n * Image metadata for storing provider-specific data\n */\nexport interface ImageMetadata {\n driverSessionId?: string;\n}\n\n/**\n * Image storage record\n */\nexport interface ImageRecord {\n imageId: string;\n containerId: string;\n sessionId: string;\n name: string;\n description?: string;\n systemPrompt?: string;\n parentImageId?: string;\n mcpServers?: Record<string, McpServerConfig>;\n metadata?: ImageMetadata;\n createdAt: number;\n updatedAt: number;\n}\n\n/**\n * Image list item with online status\n */\nexport interface ImageListItem extends ImageRecord {\n /** Whether an agent is currently running for this image */\n online: boolean;\n /** Current agent ID if online */\n agentId?: string;\n}\n\n// ============================================================================\n// Command Base Types\n// ============================================================================\n\n/**\n * Base interface for Command request events\n */\ninterface BaseCommandRequest<T extends string, D = unknown> extends SystemEvent<\n T,\n D,\n \"command\",\n \"request\",\n \"request\"\n> {}\n\n/**\n * Base interface for Command response events\n *\n * All response data types must extend AgentXResponse to ensure:\n * - Consistent structure (requestId, error)\n * - Automatic client-side handling (__subscriptions, etc.)\n */\ninterface BaseCommandResponse<\n T extends string,\n D extends AgentXResponse = AgentXResponse,\n> extends SystemEvent<T, D, \"command\", \"response\", \"result\"> {}\n\n// ============================================================================\n// Container Commands\n// ============================================================================\n\n/**\n * Request to create a container\n */\nexport interface ContainerCreateRequest extends BaseCommandRequest<\n \"container_create_request\",\n {\n requestId: string;\n containerId: string;\n }\n> {}\n\n/**\n * Response to container creation\n */\nexport interface ContainerCreateResponse extends BaseCommandResponse<\n \"container_create_response\",\n AgentXResponse & {\n containerId: string;\n }\n> {}\n\n/**\n * Request to get a container\n */\nexport interface ContainerGetRequest extends BaseCommandRequest<\n \"container_get_request\",\n {\n requestId: string;\n containerId: string;\n }\n> {}\n\n/**\n * Response to container get\n */\nexport interface ContainerGetResponse extends BaseCommandResponse<\n \"container_get_response\",\n AgentXResponse & {\n containerId?: string;\n exists: boolean;\n }\n> {}\n\n/**\n * Request to list containers\n */\nexport interface ContainerListRequest extends BaseCommandRequest<\n \"container_list_request\",\n {\n requestId: string;\n }\n> {}\n\n/**\n * Response to container list\n */\nexport interface ContainerListResponse extends BaseCommandResponse<\n \"container_list_response\",\n AgentXResponse & {\n containerIds: string[];\n }\n> {}\n\n// ============================================================================\n// Agent Commands\n// ============================================================================\n\n/**\n * Request to get an agent\n */\nexport interface AgentGetRequest extends BaseCommandRequest<\n \"agent_get_request\",\n {\n requestId: string;\n agentId: string;\n }\n> {}\n\n/**\n * Response to agent get\n */\nexport interface AgentGetResponse extends BaseCommandResponse<\n \"agent_get_response\",\n AgentXResponse & {\n agentId?: string;\n containerId?: string;\n exists: boolean;\n }\n> {}\n\n/**\n * Request to list agents\n */\nexport interface AgentListRequest extends BaseCommandRequest<\n \"agent_list_request\",\n {\n requestId: string;\n containerId: string;\n }\n> {}\n\n/**\n * Response to agent list\n */\nexport interface AgentListResponse extends BaseCommandResponse<\n \"agent_list_response\",\n AgentXResponse & {\n agents: Array<{ agentId: string; containerId: string; imageId: string }>;\n }\n> {}\n\n/**\n * Request to destroy an agent\n */\nexport interface AgentDestroyRequest extends BaseCommandRequest<\n \"agent_destroy_request\",\n {\n requestId: string;\n agentId: string;\n }\n> {}\n\n/**\n * Response to agent destroy\n */\nexport interface AgentDestroyResponse extends BaseCommandResponse<\n \"agent_destroy_response\",\n AgentXResponse & {\n agentId: string;\n success: boolean;\n }\n> {}\n\n/**\n * Request to destroy all agents in a container\n */\nexport interface AgentDestroyAllRequest extends BaseCommandRequest<\n \"agent_destroy_all_request\",\n {\n requestId: string;\n containerId: string;\n }\n> {}\n\n/**\n * Response to destroy all agents\n */\nexport interface AgentDestroyAllResponse extends BaseCommandResponse<\n \"agent_destroy_all_response\",\n AgentXResponse & {\n containerId: string;\n }\n> {}\n\n/**\n * Request to send a message\n * Can use either imageId (preferred) or agentId\n * If using imageId and agent is not running, it will be auto-activated\n */\nexport interface MessageSendRequest extends BaseCommandRequest<\n \"message_send_request\",\n {\n requestId: string;\n /** Image ID (preferred) - will auto-activate if offline */\n imageId?: string;\n /** Agent ID (legacy) - must be already running */\n agentId?: string;\n /** Message content (text-only or multimodal) */\n content: string | UserContentPart[];\n }\n> {}\n\n/**\n * Response to message send (acknowledges message received, not completion)\n */\nexport interface MessageSendResponse extends BaseCommandResponse<\n \"message_send_response\",\n AgentXResponse & {\n imageId?: string;\n agentId: string;\n }\n> {}\n\n/**\n * Request to interrupt an agent\n * Can use either imageId or agentId\n */\nexport interface AgentInterruptRequest extends BaseCommandRequest<\n \"agent_interrupt_request\",\n {\n requestId: string;\n /** Image ID (preferred) */\n imageId?: string;\n /** Agent ID (legacy) */\n agentId?: string;\n }\n> {}\n\n/**\n * Response to agent interrupt\n */\nexport interface AgentInterruptResponse extends BaseCommandResponse<\n \"agent_interrupt_response\",\n AgentXResponse & {\n imageId?: string;\n agentId?: string;\n }\n> {}\n\n// ============================================================================\n// Image Commands\n// ============================================================================\n\n/**\n * Request to create a new image (conversation)\n */\nexport interface ImageCreateRequest extends BaseCommandRequest<\n \"image_create_request\",\n {\n requestId: string;\n containerId: string;\n config: {\n name?: string;\n description?: string;\n systemPrompt?: string;\n customData?: Record<string, unknown>;\n };\n }\n> {}\n\n/**\n * Response to image creation\n *\n * Includes __subscriptions with the new image's sessionId for auto-subscription.\n * Note: record is optional because it may be undefined on error.\n */\nexport interface ImageCreateResponse extends BaseCommandResponse<\n \"image_create_response\",\n AgentXResponse & {\n record?: ImageRecord;\n }\n> {}\n\n/**\n * Request to run an image (create or reuse agent)\n */\nexport interface ImageRunRequest extends BaseCommandRequest<\n \"image_run_request\",\n {\n requestId: string;\n imageId: string;\n }\n> {}\n\n/**\n * Response to image run\n */\nexport interface ImageRunResponse extends BaseCommandResponse<\n \"image_run_response\",\n AgentXResponse & {\n imageId: string;\n agentId: string;\n /** true if reusing existing agent, false if newly created */\n reused: boolean;\n }\n> {}\n\n/**\n * Request to stop an image (destroy agent, keep image)\n */\nexport interface ImageStopRequest extends BaseCommandRequest<\n \"image_stop_request\",\n {\n requestId: string;\n imageId: string;\n }\n> {}\n\n/**\n * Response to image stop\n */\nexport interface ImageStopResponse extends BaseCommandResponse<\n \"image_stop_response\",\n AgentXResponse & {\n imageId: string;\n }\n> {}\n\n/**\n * Request to update an image (name, description, etc.)\n */\nexport interface ImageUpdateRequest extends BaseCommandRequest<\n \"image_update_request\",\n {\n requestId: string;\n imageId: string;\n updates: {\n name?: string;\n description?: string;\n customData?: Record<string, unknown>;\n };\n }\n> {}\n\n/**\n * Response to image update\n *\n * Note: record is optional because it may be undefined on error.\n */\nexport interface ImageUpdateResponse extends BaseCommandResponse<\n \"image_update_response\",\n AgentXResponse & {\n record?: ImageRecord;\n }\n> {}\n\n/**\n * Request to list all images\n */\nexport interface ImageListRequest extends BaseCommandRequest<\n \"image_list_request\",\n {\n requestId: string;\n containerId?: string;\n }\n> {}\n\n/**\n * Response to image list\n *\n * Includes __subscriptions with all images' sessionIds for auto-subscription.\n */\nexport interface ImageListResponse extends BaseCommandResponse<\n \"image_list_response\",\n AgentXResponse & {\n records: ImageListItem[];\n }\n> {}\n\n/**\n * Request to get an image by ID\n */\nexport interface ImageGetRequest extends BaseCommandRequest<\n \"image_get_request\",\n {\n requestId: string;\n imageId: string;\n }\n> {}\n\n/**\n * Response to image get\n *\n * Includes __subscriptions with the image's sessionId for auto-subscription.\n */\nexport interface ImageGetResponse extends BaseCommandResponse<\n \"image_get_response\",\n AgentXResponse & {\n record?: ImageListItem | null;\n }\n> {}\n\n/**\n * Request to delete an image\n */\nexport interface ImageDeleteRequest extends BaseCommandRequest<\n \"image_delete_request\",\n {\n requestId: string;\n imageId: string;\n }\n> {}\n\n/**\n * Response to image delete\n */\nexport interface ImageDeleteResponse extends BaseCommandResponse<\n \"image_delete_response\",\n AgentXResponse & {\n imageId: string;\n }\n> {}\n\n/**\n * Request to get messages for an image\n */\nexport interface ImageMessagesRequest extends BaseCommandRequest<\n \"image_messages_request\",\n {\n requestId: string;\n imageId: string;\n }\n> {}\n\n/**\n * Response to image messages request\n */\nexport interface ImageMessagesResponse extends BaseCommandResponse<\n \"image_messages_response\",\n AgentXResponse & {\n imageId: string;\n messages: Array<{\n id: string;\n role: \"user\" | \"assistant\" | \"tool_call\" | \"tool_result\";\n content: unknown;\n timestamp: number;\n }>;\n }\n> {}\n\n// ============================================================================\n// Command Union Types\n// ============================================================================\n\n/**\n * All Command request events\n */\nexport type CommandRequest =\n // Container\n | ContainerCreateRequest\n | ContainerGetRequest\n | ContainerListRequest\n // Agent\n | AgentGetRequest\n | AgentListRequest\n | AgentDestroyRequest\n | AgentDestroyAllRequest\n | MessageSendRequest\n | AgentInterruptRequest\n // Image\n | ImageCreateRequest\n | ImageRunRequest\n | ImageStopRequest\n | ImageUpdateRequest\n | ImageListRequest\n | ImageGetRequest\n | ImageDeleteRequest\n | ImageMessagesRequest;\n\n/**\n * All Command response events\n */\nexport type CommandResponse =\n // Container\n | ContainerCreateResponse\n | ContainerGetResponse\n | ContainerListResponse\n // Agent\n | AgentGetResponse\n | AgentListResponse\n | AgentDestroyResponse\n | AgentDestroyAllResponse\n | MessageSendResponse\n | AgentInterruptResponse\n // Image\n | ImageCreateResponse\n | ImageRunResponse\n | ImageStopResponse\n | ImageUpdateResponse\n | ImageListResponse\n | ImageGetResponse\n | ImageDeleteResponse\n | ImageMessagesResponse;\n\n/**\n * All Command events (requests + responses)\n */\nexport type CommandEvent = CommandRequest | CommandResponse;\n\n/**\n * Command event type strings\n */\nexport type CommandEventType = CommandEvent[\"type\"];\n\n/**\n * Type guard: is this a CommandEvent?\n */\nexport function isCommandEvent(event: { source?: string }): event is CommandEvent {\n return event.source === \"command\";\n}\n\n/**\n * Type guard: is this a Command request event?\n */\nexport function isCommandRequest(event: {\n source?: string;\n category?: string;\n}): event is CommandRequest {\n return event.source === \"command\" && event.category === \"request\";\n}\n\n/**\n * Type guard: is this a Command response event?\n */\nexport function isCommandResponse(event: {\n source?: string;\n category?: string;\n}): event is CommandResponse {\n return event.source === \"command\" && event.category === \"response\";\n}\n\n// ============================================================================\n// Command Event Map\n// ============================================================================\n\n/**\n * CommandEventMap - Maps event type string to event interface\n *\n * Enables type-safe event handling:\n * ```typescript\n * bus.onCommand(\"container_create_request\", (event) => {\n * event.data.requestId; // string\n * event.data.containerId; // string\n * });\n * ```\n */\nexport interface CommandEventMap {\n // Container\n container_create_request: ContainerCreateRequest;\n container_create_response: ContainerCreateResponse;\n container_get_request: ContainerGetRequest;\n container_get_response: ContainerGetResponse;\n container_list_request: ContainerListRequest;\n container_list_response: ContainerListResponse;\n // Agent\n agent_get_request: AgentGetRequest;\n agent_get_response: AgentGetResponse;\n agent_list_request: AgentListRequest;\n agent_list_response: AgentListResponse;\n agent_destroy_request: AgentDestroyRequest;\n agent_destroy_response: AgentDestroyResponse;\n agent_destroy_all_request: AgentDestroyAllRequest;\n agent_destroy_all_response: AgentDestroyAllResponse;\n message_send_request: MessageSendRequest;\n message_send_response: MessageSendResponse;\n agent_interrupt_request: AgentInterruptRequest;\n agent_interrupt_response: AgentInterruptResponse;\n // Image\n image_create_request: ImageCreateRequest;\n image_create_response: ImageCreateResponse;\n image_run_request: ImageRunRequest;\n image_run_response: ImageRunResponse;\n image_stop_request: ImageStopRequest;\n image_stop_response: ImageStopResponse;\n image_update_request: ImageUpdateRequest;\n image_update_response: ImageUpdateResponse;\n image_list_request: ImageListRequest;\n image_list_response: ImageListResponse;\n image_get_request: ImageGetRequest;\n image_get_response: ImageGetResponse;\n image_delete_request: ImageDeleteRequest;\n image_delete_response: ImageDeleteResponse;\n image_messages_request: ImageMessagesRequest;\n image_messages_response: ImageMessagesResponse;\n}\n\n/**\n * Maps request event type to its corresponding response event type\n */\nexport interface CommandRequestResponseMap {\n container_create_request: \"container_create_response\";\n container_get_request: \"container_get_response\";\n container_list_request: \"container_list_response\";\n agent_get_request: \"agent_get_response\";\n agent_list_request: \"agent_list_response\";\n agent_destroy_request: \"agent_destroy_response\";\n agent_destroy_all_request: \"agent_destroy_all_response\";\n message_send_request: \"message_send_response\";\n agent_interrupt_request: \"agent_interrupt_response\";\n image_create_request: \"image_create_response\";\n image_run_request: \"image_run_response\";\n image_stop_request: \"image_stop_response\";\n image_update_request: \"image_update_response\";\n image_list_request: \"image_list_response\";\n image_get_request: \"image_get_response\";\n image_delete_request: \"image_delete_response\";\n image_messages_request: \"image_messages_response\";\n}\n\n/**\n * All command request types\n */\nexport type CommandRequestType = keyof CommandRequestResponseMap;\n\n/**\n * Get response type for a request type\n */\nexport type ResponseTypeFor<T extends CommandRequestType> = CommandRequestResponseMap[T];\n\n/**\n * Get response event for a request type\n */\nexport type ResponseEventFor<T extends CommandRequestType> = CommandEventMap[ResponseTypeFor<T>];\n\n/**\n * Get request data type (without requestId, as it's auto-generated)\n */\nexport type RequestDataFor<T extends CommandRequestType> = Omit<\n CommandEventMap[T][\"data\"],\n \"requestId\"\n>;\n"],"mappings":";AA4MO,SAAS,aACd,OACA,QAC0C;AAC1C,SAAO,MAAM,WAAW;AAC1B;AAKO,SAAS,UACd,OACA,QACsE;AACtE,SAAO,MAAM,WAAW;AAC1B;AAKO,SAAS,UAAU,OAA6B;AACrD,SAAO,MAAM,WAAW;AAC1B;AAKO,SAAS,SAAS,OAA6B;AACpD,SAAO,MAAM,WAAW;AAC1B;AAKO,SAAS,eAAe,OAA6B;AAC1D,SAAO,MAAM,WAAW;AAC1B;;;ACrLO,SAAS,aAAa,OAAoC;AAC/D,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,SAAS,KAAK;AAClB;AAiOO,SAAS,iBAAiB,OAGL;AAC1B,SAAO,MAAM,WAAW,YAAY,MAAM,aAAa;AACzD;AAiEO,SAAS,kBAAkB,OAGL;AAC3B,SAAO,MAAM,WAAW,YAAY,MAAM,aAAa;AACzD;;;AC7LO,SAAS,mBAAmB,OAGL;AAC5B,SAAO,MAAM,WAAW,WAAW,MAAM,aAAa;AACxD;AA6JO,SAAS,kBAAkB,OAGL;AAC3B,SAAO,MAAM,WAAW,WAAW,MAAM,aAAa;AACxD;AAiEO,SAAS,oBAAoB,OAGL;AAC7B,SAAO,MAAM,WAAW,WAAW,MAAM,aAAa;AACxD;AA8DO,SAAS,iBAAiB,OAGL;AAC1B,SAAO,MAAM,WAAW,WAAW,MAAM,aAAa;AACxD;AAcO,SAAS,aAAa,OAAiD;AAC5E,SAAO,MAAM,WAAW;AAC1B;;;AC5bO,SAAS,wBAAwB,OAGL;AACjC,SAAO,MAAM,WAAW,aAAa,MAAM,aAAa;AAC1D;AAkGO,SAAS,sBAAsB,OAGL;AAC/B,SAAO,MAAM,WAAW,aAAa,MAAM,aAAa;AAC1D;AAgIO,SAAS,qBAAqB,OAGL;AAC9B,SAAO,MAAM,WAAW,aAAa,MAAM,aAAa;AAC1D;AAcO,SAAS,eAAe,OAAmD;AAChF,SAAO,MAAM,WAAW;AAC1B;;;ACrOO,SAAS,0BAA0B,OAGL;AACnC,SAAO,MAAM,WAAW,eAAe,MAAM,aAAa;AAC5D;AA0LO,SAAS,eAAe,OAGL;AACxB,SAAO,MAAM,WAAW,aAAa,MAAM,aAAa;AAC1D;AA4JO,SAAS,WAAW,OAAkE;AAC3F,SAAO,MAAM,WAAW,aAAa,MAAM,aAAa;AAC1D;AAcO,SAAS,eAAe,OAAmD;AAChF,SAAO,MAAM,WAAW;AAC1B;AAcO,SAAS,iBAAiB,OAAqD;AACpF,SAAO,MAAM,WAAW,eAAe,MAAM,WAAW;AAC1D;;;AC6JO,SAAS,eAAe,OAAmD;AAChF,SAAO,MAAM,WAAW;AAC1B;AAKO,SAAS,iBAAiB,OAGL;AAC1B,SAAO,MAAM,WAAW,aAAa,MAAM,aAAa;AAC1D;AAKO,SAAS,kBAAkB,OAGL;AAC3B,SAAO,MAAM,WAAW,aAAa,MAAM,aAAa;AAC1D;","names":[]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-SKS7S2RY.js.map
@@ -1,5 +1,3 @@
1
- import "../../chunk-7D4SUZUM.js";
2
-
3
1
  // src/common/logger/ConsoleLogger.ts
4
2
  var ConsoleLogger = class _ConsoleLogger {
5
3
  name;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/common/logger/ConsoleLogger.ts","../../../src/common/logger/LoggerFactoryImpl.ts"],"sourcesContent":["/**\n * ConsoleLogger - Default logger implementation\n *\n * Simple console-based logger with color support.\n * Used as fallback when no custom LoggerFactory is provided.\n */\n\nimport type { Logger, LogContext, LogLevel } from \"./types\";\n\nexport interface ConsoleLoggerOptions {\n level?: LogLevel;\n colors?: boolean;\n timestamps?: boolean;\n}\n\nexport class ConsoleLogger implements Logger {\n readonly name: string;\n readonly level: LogLevel;\n private readonly colors: boolean;\n private readonly timestamps: boolean;\n\n private static readonly COLORS = {\n DEBUG: \"\\x1b[36m\",\n INFO: \"\\x1b[32m\",\n WARN: \"\\x1b[33m\",\n ERROR: \"\\x1b[31m\",\n RESET: \"\\x1b[0m\",\n };\n\n constructor(name: string, options: ConsoleLoggerOptions = {}) {\n this.name = name;\n this.level = options.level ?? \"info\";\n this.colors = options.colors ?? this.isNodeEnvironment();\n this.timestamps = options.timestamps ?? true;\n }\n\n debug(message: string, context?: LogContext): void {\n if (this.isDebugEnabled()) {\n this.log(\"DEBUG\", message, context);\n }\n }\n\n info(message: string, context?: LogContext): void {\n if (this.isInfoEnabled()) {\n this.log(\"INFO\", message, context);\n }\n }\n\n warn(message: string, context?: LogContext): void {\n if (this.isWarnEnabled()) {\n this.log(\"WARN\", message, context);\n }\n }\n\n error(message: string | Error, context?: LogContext): void {\n if (this.isErrorEnabled()) {\n if (message instanceof Error) {\n this.log(\"ERROR\", message.message, { ...context, stack: message.stack });\n } else {\n this.log(\"ERROR\", message, context);\n }\n }\n }\n\n isDebugEnabled(): boolean {\n return this.getLevelValue(this.level) <= this.getLevelValue(\"debug\");\n }\n\n isInfoEnabled(): boolean {\n return this.getLevelValue(this.level) <= this.getLevelValue(\"info\");\n }\n\n isWarnEnabled(): boolean {\n return this.getLevelValue(this.level) <= this.getLevelValue(\"warn\");\n }\n\n isErrorEnabled(): boolean {\n return this.getLevelValue(this.level) <= this.getLevelValue(\"error\");\n }\n\n private getLevelValue(level: LogLevel): number {\n const levels: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n silent: 4,\n };\n return levels[level];\n }\n\n private log(level: string, message: string, context?: LogContext): void {\n const parts: string[] = [];\n\n if (this.timestamps) {\n parts.push(new Date().toISOString());\n }\n\n if (this.colors) {\n const color = ConsoleLogger.COLORS[level as keyof typeof ConsoleLogger.COLORS];\n parts.push(`${color}${level.padEnd(5)}${ConsoleLogger.COLORS.RESET}`);\n } else {\n parts.push(level.padEnd(5));\n }\n\n parts.push(`[${this.name}]`);\n parts.push(message);\n\n const logLine = parts.join(\" \");\n const consoleMethod = this.getConsoleMethod(level);\n\n if (context && Object.keys(context).length > 0) {\n consoleMethod(logLine, context);\n } else {\n consoleMethod(logLine);\n }\n }\n\n private getConsoleMethod(level: string): (...args: unknown[]) => void {\n switch (level) {\n case \"DEBUG\":\n return console.debug.bind(console);\n case \"INFO\":\n return console.info.bind(console);\n case \"WARN\":\n return console.warn.bind(console);\n case \"ERROR\":\n return console.error.bind(console);\n default:\n return console.log.bind(console);\n }\n }\n\n private isNodeEnvironment(): boolean {\n return typeof process !== \"undefined\" && process.versions?.node !== undefined;\n }\n}\n","/**\n * LoggerFactoryImpl - Central factory for creating logger instances\n *\n * Implements lazy initialization pattern:\n * - createLogger() can be called at module level (before config)\n * - Real logger is created on first use\n * - External LoggerFactory can be injected via Runtime\n */\n\nimport type { Logger, LoggerFactory, LogContext, LogLevel } from \"./types\";\nimport { ConsoleLogger, type ConsoleLoggerOptions } from \"./ConsoleLogger\";\n\n// External factory injected via Runtime\nlet externalFactory: LoggerFactory | null = null;\n\n// Version counter to invalidate cached real loggers\nlet factoryVersion = 0;\n\nexport interface LoggerFactoryConfig {\n defaultImplementation?: (name: string) => Logger;\n defaultLevel?: LogLevel;\n consoleOptions?: Omit<ConsoleLoggerOptions, \"level\">;\n}\n\n/**\n * Internal LoggerFactory implementation\n *\n * Uses lazy proxy pattern to allow module-level createLogger() calls.\n */\nexport class LoggerFactoryImpl {\n private static loggers: Map<string, Logger> = new Map();\n private static config: LoggerFactoryConfig = {\n defaultLevel: \"info\",\n };\n\n static getLogger(nameOrClass: string | (new (...args: unknown[]) => unknown)): Logger {\n const name = typeof nameOrClass === \"string\" ? nameOrClass : nameOrClass.name;\n\n if (this.loggers.has(name)) {\n return this.loggers.get(name)!;\n }\n\n const lazyLogger = this.createLazyLogger(name);\n this.loggers.set(name, lazyLogger);\n return lazyLogger;\n }\n\n static configure(config: LoggerFactoryConfig): void {\n this.config = { ...this.config, ...config };\n }\n\n static reset(): void {\n this.loggers.clear();\n this.config = { defaultLevel: \"info\" };\n externalFactory = null;\n factoryVersion++; // Invalidate all cached real loggers\n }\n\n private static createLazyLogger(name: string): Logger {\n let realLogger: Logger | null = null;\n let loggerVersion = -1; // Track which factory version created this logger\n\n const getRealLogger = (): Logger => {\n // Recreate logger if factory version changed (setLoggerFactory was called)\n if (!realLogger || loggerVersion !== factoryVersion) {\n realLogger = this.createLogger(name);\n loggerVersion = factoryVersion;\n }\n return realLogger;\n };\n\n return {\n name,\n level: this.config.defaultLevel || \"info\",\n debug: (message: string, context?: LogContext) => getRealLogger().debug(message, context),\n info: (message: string, context?: LogContext) => getRealLogger().info(message, context),\n warn: (message: string, context?: LogContext) => getRealLogger().warn(message, context),\n error: (message: string | Error, context?: LogContext) =>\n getRealLogger().error(message, context),\n isDebugEnabled: () => getRealLogger().isDebugEnabled(),\n isInfoEnabled: () => getRealLogger().isInfoEnabled(),\n isWarnEnabled: () => getRealLogger().isWarnEnabled(),\n isErrorEnabled: () => getRealLogger().isErrorEnabled(),\n };\n }\n\n private static createLogger(name: string): Logger {\n if (externalFactory) {\n return externalFactory.getLogger(name);\n }\n\n if (this.config.defaultImplementation) {\n return this.config.defaultImplementation(name);\n }\n\n return new ConsoleLogger(name, {\n level: this.config.defaultLevel,\n ...this.config.consoleOptions,\n });\n }\n}\n\n/**\n * Set external LoggerFactory (called by Runtime initialization)\n */\nexport function setLoggerFactory(factory: LoggerFactory): void {\n externalFactory = factory;\n LoggerFactoryImpl.reset();\n externalFactory = factory;\n}\n\n/**\n * Create a logger instance\n *\n * Safe to call at module level before Runtime is configured.\n * Uses lazy initialization - actual logger is created on first use.\n *\n * @param name - Logger name (hierarchical, e.g., \"engine/AgentEngine\")\n * @returns Logger instance (lazy proxy)\n */\nexport function createLogger(name: string): Logger {\n return LoggerFactoryImpl.getLogger(name);\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/common/logger/ConsoleLogger.ts","../../../src/common/logger/LoggerFactoryImpl.ts"],"sourcesContent":["/**\n * ConsoleLogger - Default logger implementation\n *\n * Simple console-based logger with color support.\n * Used as fallback when no custom LoggerFactory is provided.\n */\n\nimport type { Logger, LogContext, LogLevel } from \"./types\";\n\nexport interface ConsoleLoggerOptions {\n level?: LogLevel;\n colors?: boolean;\n timestamps?: boolean;\n}\n\nexport class ConsoleLogger implements Logger {\n readonly name: string;\n readonly level: LogLevel;\n private readonly colors: boolean;\n private readonly timestamps: boolean;\n\n private static readonly COLORS = {\n DEBUG: \"\\x1b[36m\",\n INFO: \"\\x1b[32m\",\n WARN: \"\\x1b[33m\",\n ERROR: \"\\x1b[31m\",\n RESET: \"\\x1b[0m\",\n };\n\n constructor(name: string, options: ConsoleLoggerOptions = {}) {\n this.name = name;\n this.level = options.level ?? \"info\";\n this.colors = options.colors ?? this.isNodeEnvironment();\n this.timestamps = options.timestamps ?? true;\n }\n\n debug(message: string, context?: LogContext): void {\n if (this.isDebugEnabled()) {\n this.log(\"DEBUG\", message, context);\n }\n }\n\n info(message: string, context?: LogContext): void {\n if (this.isInfoEnabled()) {\n this.log(\"INFO\", message, context);\n }\n }\n\n warn(message: string, context?: LogContext): void {\n if (this.isWarnEnabled()) {\n this.log(\"WARN\", message, context);\n }\n }\n\n error(message: string | Error, context?: LogContext): void {\n if (this.isErrorEnabled()) {\n if (message instanceof Error) {\n this.log(\"ERROR\", message.message, { ...context, stack: message.stack });\n } else {\n this.log(\"ERROR\", message, context);\n }\n }\n }\n\n isDebugEnabled(): boolean {\n return this.getLevelValue(this.level) <= this.getLevelValue(\"debug\");\n }\n\n isInfoEnabled(): boolean {\n return this.getLevelValue(this.level) <= this.getLevelValue(\"info\");\n }\n\n isWarnEnabled(): boolean {\n return this.getLevelValue(this.level) <= this.getLevelValue(\"warn\");\n }\n\n isErrorEnabled(): boolean {\n return this.getLevelValue(this.level) <= this.getLevelValue(\"error\");\n }\n\n private getLevelValue(level: LogLevel): number {\n const levels: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n silent: 4,\n };\n return levels[level];\n }\n\n private log(level: string, message: string, context?: LogContext): void {\n const parts: string[] = [];\n\n if (this.timestamps) {\n parts.push(new Date().toISOString());\n }\n\n if (this.colors) {\n const color = ConsoleLogger.COLORS[level as keyof typeof ConsoleLogger.COLORS];\n parts.push(`${color}${level.padEnd(5)}${ConsoleLogger.COLORS.RESET}`);\n } else {\n parts.push(level.padEnd(5));\n }\n\n parts.push(`[${this.name}]`);\n parts.push(message);\n\n const logLine = parts.join(\" \");\n const consoleMethod = this.getConsoleMethod(level);\n\n if (context && Object.keys(context).length > 0) {\n consoleMethod(logLine, context);\n } else {\n consoleMethod(logLine);\n }\n }\n\n private getConsoleMethod(level: string): (...args: unknown[]) => void {\n switch (level) {\n case \"DEBUG\":\n return console.debug.bind(console);\n case \"INFO\":\n return console.info.bind(console);\n case \"WARN\":\n return console.warn.bind(console);\n case \"ERROR\":\n return console.error.bind(console);\n default:\n return console.log.bind(console);\n }\n }\n\n private isNodeEnvironment(): boolean {\n return typeof process !== \"undefined\" && process.versions?.node !== undefined;\n }\n}\n","/**\n * LoggerFactoryImpl - Central factory for creating logger instances\n *\n * Implements lazy initialization pattern:\n * - createLogger() can be called at module level (before config)\n * - Real logger is created on first use\n * - External LoggerFactory can be injected via Runtime\n */\n\nimport type { Logger, LoggerFactory, LogContext, LogLevel } from \"./types\";\nimport { ConsoleLogger, type ConsoleLoggerOptions } from \"./ConsoleLogger\";\n\n// External factory injected via Runtime\nlet externalFactory: LoggerFactory | null = null;\n\n// Version counter to invalidate cached real loggers\nlet factoryVersion = 0;\n\nexport interface LoggerFactoryConfig {\n defaultImplementation?: (name: string) => Logger;\n defaultLevel?: LogLevel;\n consoleOptions?: Omit<ConsoleLoggerOptions, \"level\">;\n}\n\n/**\n * Internal LoggerFactory implementation\n *\n * Uses lazy proxy pattern to allow module-level createLogger() calls.\n */\nexport class LoggerFactoryImpl {\n private static loggers: Map<string, Logger> = new Map();\n private static config: LoggerFactoryConfig = {\n defaultLevel: \"info\",\n };\n\n static getLogger(nameOrClass: string | (new (...args: unknown[]) => unknown)): Logger {\n const name = typeof nameOrClass === \"string\" ? nameOrClass : nameOrClass.name;\n\n if (this.loggers.has(name)) {\n return this.loggers.get(name)!;\n }\n\n const lazyLogger = this.createLazyLogger(name);\n this.loggers.set(name, lazyLogger);\n return lazyLogger;\n }\n\n static configure(config: LoggerFactoryConfig): void {\n this.config = { ...this.config, ...config };\n }\n\n static reset(): void {\n this.loggers.clear();\n this.config = { defaultLevel: \"info\" };\n externalFactory = null;\n factoryVersion++; // Invalidate all cached real loggers\n }\n\n private static createLazyLogger(name: string): Logger {\n let realLogger: Logger | null = null;\n let loggerVersion = -1; // Track which factory version created this logger\n\n const getRealLogger = (): Logger => {\n // Recreate logger if factory version changed (setLoggerFactory was called)\n if (!realLogger || loggerVersion !== factoryVersion) {\n realLogger = this.createLogger(name);\n loggerVersion = factoryVersion;\n }\n return realLogger;\n };\n\n return {\n name,\n level: this.config.defaultLevel || \"info\",\n debug: (message: string, context?: LogContext) => getRealLogger().debug(message, context),\n info: (message: string, context?: LogContext) => getRealLogger().info(message, context),\n warn: (message: string, context?: LogContext) => getRealLogger().warn(message, context),\n error: (message: string | Error, context?: LogContext) =>\n getRealLogger().error(message, context),\n isDebugEnabled: () => getRealLogger().isDebugEnabled(),\n isInfoEnabled: () => getRealLogger().isInfoEnabled(),\n isWarnEnabled: () => getRealLogger().isWarnEnabled(),\n isErrorEnabled: () => getRealLogger().isErrorEnabled(),\n };\n }\n\n private static createLogger(name: string): Logger {\n if (externalFactory) {\n return externalFactory.getLogger(name);\n }\n\n if (this.config.defaultImplementation) {\n return this.config.defaultImplementation(name);\n }\n\n return new ConsoleLogger(name, {\n level: this.config.defaultLevel,\n ...this.config.consoleOptions,\n });\n }\n}\n\n/**\n * Set external LoggerFactory (called by Runtime initialization)\n */\nexport function setLoggerFactory(factory: LoggerFactory): void {\n externalFactory = factory;\n LoggerFactoryImpl.reset();\n externalFactory = factory;\n}\n\n/**\n * Create a logger instance\n *\n * Safe to call at module level before Runtime is configured.\n * Uses lazy initialization - actual logger is created on first use.\n *\n * @param name - Logger name (hierarchical, e.g., \"engine/AgentEngine\")\n * @returns Logger instance (lazy proxy)\n */\nexport function createLogger(name: string): Logger {\n return LoggerFactoryImpl.getLogger(name);\n}\n"],"mappings":"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","names":[]}
@@ -1,7 +1,6 @@
1
- import { ContainerRecord, ContainerRepository, ImageRepository, SessionRepository } from '../persistence/index.js';
2
- export { ContainerConfig } from '../persistence/index.js';
3
- import '../message-BMrMm1pq.js';
4
- import '../driver/index.js';
1
+ import { C as ContainerRecord, d as ContainerRepository, I as ImageRepository, c as SessionRepository } from '../index-CuS1i5V-.js';
2
+ export { e as ContainerConfig } from '../index-CuS1i5V-.js';
3
+ import '../message-03TJzvIX.js';
5
4
 
6
5
  /**
7
6
  * Container - Resource isolation unit
@@ -1,5 +1,3 @@
1
- import "../chunk-7D4SUZUM.js";
2
-
3
1
  // src/container/Container.ts
4
2
  import { createLogger } from "commonxjs/logger";
5
3
  var logger = createLogger("container/Container");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/container/Container.ts"],"sourcesContent":["/**\n * Container - Resource isolation unit\n *\n * Container provides an isolated environment for Images and Agents.\n * Each container can have multiple Images (conversations).\n */\n\nimport { createLogger } from \"commonxjs/logger\";\nimport type { ContainerRecord } from \"../persistence/types\";\nimport type { Container, ContainerContext, ContainerCreateConfig } from \"./types\";\n\nconst logger = createLogger(\"container/Container\");\n\n/**\n * ContainerImpl - Container implementation\n */\nexport class ContainerImpl implements Container {\n private constructor(\n private readonly record: ContainerRecord,\n private readonly context: ContainerContext\n ) {}\n\n // ==================== Getters ====================\n\n get containerId(): string {\n return this.record.containerId;\n }\n\n get createdAt(): number {\n return this.record.createdAt;\n }\n\n get updatedAt(): number {\n return this.record.updatedAt;\n }\n\n get config(): Record<string, unknown> | undefined {\n return this.record.config;\n }\n\n // ==================== Static Factory Methods ====================\n\n /**\n * Create a new container\n */\n static async create(\n config: ContainerCreateConfig,\n context: ContainerContext\n ): Promise<ContainerImpl> {\n const now = Date.now();\n const containerId = config.containerId ?? ContainerImpl.generateContainerId();\n\n const record: ContainerRecord = {\n containerId,\n createdAt: now,\n updatedAt: now,\n config: config.config,\n };\n\n await context.containerRepository.saveContainer(record);\n\n logger.info(\"Container created\", { containerId });\n\n return new ContainerImpl(record, context);\n }\n\n /**\n * Load an existing container from storage\n */\n static async load(containerId: string, context: ContainerContext): Promise<ContainerImpl | null> {\n const record = await context.containerRepository.findContainerById(containerId);\n if (!record) {\n logger.debug(\"Container not found\", { containerId });\n return null;\n }\n\n logger.debug(\"Container loaded\", { containerId });\n return new ContainerImpl(record, context);\n }\n\n /**\n * Get or create a container\n */\n static async getOrCreate(containerId: string, context: ContainerContext): Promise<ContainerImpl> {\n const existing = await ContainerImpl.load(containerId, context);\n if (existing) {\n return existing;\n }\n\n return ContainerImpl.create({ containerId }, context);\n }\n\n /**\n * List all containers\n */\n static async listAll(context: ContainerContext): Promise<ContainerRecord[]> {\n return context.containerRepository.findAllContainers();\n }\n\n // ==================== Instance Methods ====================\n\n /**\n * Update container configuration\n */\n async update(updates: { config?: Record<string, unknown> }): Promise<Container> {\n const now = Date.now();\n const updatedRecord: ContainerRecord = {\n ...this.record,\n config: updates.config ?? this.record.config,\n updatedAt: now,\n };\n\n await this.context.containerRepository.saveContainer(updatedRecord);\n\n logger.info(\"Container updated\", { containerId: this.containerId, updates });\n return new ContainerImpl(updatedRecord, this.context);\n }\n\n /**\n * Delete this container and all its resources\n */\n async delete(): Promise<void> {\n // Find all images in this container\n const images = await this.context.imageRepository.findImagesByContainerId(this.containerId);\n\n // Delete all images and their sessions\n for (const image of images) {\n await this.context.sessionRepository.deleteSession(image.sessionId);\n await this.context.imageRepository.deleteImage(image.imageId);\n }\n\n // Delete container\n await this.context.containerRepository.deleteContainer(this.containerId);\n\n logger.info(\"Container deleted\", {\n containerId: this.containerId,\n imagesDeleted: images.length,\n });\n }\n\n /**\n * Get the underlying record\n */\n toRecord(): ContainerRecord {\n return { ...this.record };\n }\n\n // ==================== Private Helpers ====================\n\n private static generateContainerId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 8);\n return `ctr_${timestamp}_${random}`;\n }\n}\n\n/**\n * Create a new Container\n */\nexport async function createContainer(\n config: ContainerCreateConfig,\n context: ContainerContext\n): Promise<Container> {\n return ContainerImpl.create(config, context);\n}\n\n/**\n * Load an existing Container\n */\nexport async function loadContainer(\n containerId: string,\n context: ContainerContext\n): Promise<Container | null> {\n return ContainerImpl.load(containerId, context);\n}\n\n/**\n * Get or create a Container\n */\nexport async function getOrCreateContainer(\n containerId: string,\n context: ContainerContext\n): Promise<Container> {\n return ContainerImpl.getOrCreate(containerId, context);\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/container/Container.ts"],"sourcesContent":["/**\n * Container - Resource isolation unit\n *\n * Container provides an isolated environment for Images and Agents.\n * Each container can have multiple Images (conversations).\n */\n\nimport { createLogger } from \"commonxjs/logger\";\nimport type { ContainerRecord } from \"../persistence/types\";\nimport type { Container, ContainerContext, ContainerCreateConfig } from \"./types\";\n\nconst logger = createLogger(\"container/Container\");\n\n/**\n * ContainerImpl - Container implementation\n */\nexport class ContainerImpl implements Container {\n private constructor(\n private readonly record: ContainerRecord,\n private readonly context: ContainerContext\n ) {}\n\n // ==================== Getters ====================\n\n get containerId(): string {\n return this.record.containerId;\n }\n\n get createdAt(): number {\n return this.record.createdAt;\n }\n\n get updatedAt(): number {\n return this.record.updatedAt;\n }\n\n get config(): Record<string, unknown> | undefined {\n return this.record.config;\n }\n\n // ==================== Static Factory Methods ====================\n\n /**\n * Create a new container\n */\n static async create(\n config: ContainerCreateConfig,\n context: ContainerContext\n ): Promise<ContainerImpl> {\n const now = Date.now();\n const containerId = config.containerId ?? ContainerImpl.generateContainerId();\n\n const record: ContainerRecord = {\n containerId,\n createdAt: now,\n updatedAt: now,\n config: config.config,\n };\n\n await context.containerRepository.saveContainer(record);\n\n logger.info(\"Container created\", { containerId });\n\n return new ContainerImpl(record, context);\n }\n\n /**\n * Load an existing container from storage\n */\n static async load(containerId: string, context: ContainerContext): Promise<ContainerImpl | null> {\n const record = await context.containerRepository.findContainerById(containerId);\n if (!record) {\n logger.debug(\"Container not found\", { containerId });\n return null;\n }\n\n logger.debug(\"Container loaded\", { containerId });\n return new ContainerImpl(record, context);\n }\n\n /**\n * Get or create a container\n */\n static async getOrCreate(containerId: string, context: ContainerContext): Promise<ContainerImpl> {\n const existing = await ContainerImpl.load(containerId, context);\n if (existing) {\n return existing;\n }\n\n return ContainerImpl.create({ containerId }, context);\n }\n\n /**\n * List all containers\n */\n static async listAll(context: ContainerContext): Promise<ContainerRecord[]> {\n return context.containerRepository.findAllContainers();\n }\n\n // ==================== Instance Methods ====================\n\n /**\n * Update container configuration\n */\n async update(updates: { config?: Record<string, unknown> }): Promise<Container> {\n const now = Date.now();\n const updatedRecord: ContainerRecord = {\n ...this.record,\n config: updates.config ?? this.record.config,\n updatedAt: now,\n };\n\n await this.context.containerRepository.saveContainer(updatedRecord);\n\n logger.info(\"Container updated\", { containerId: this.containerId, updates });\n return new ContainerImpl(updatedRecord, this.context);\n }\n\n /**\n * Delete this container and all its resources\n */\n async delete(): Promise<void> {\n // Find all images in this container\n const images = await this.context.imageRepository.findImagesByContainerId(this.containerId);\n\n // Delete all images and their sessions\n for (const image of images) {\n await this.context.sessionRepository.deleteSession(image.sessionId);\n await this.context.imageRepository.deleteImage(image.imageId);\n }\n\n // Delete container\n await this.context.containerRepository.deleteContainer(this.containerId);\n\n logger.info(\"Container deleted\", {\n containerId: this.containerId,\n imagesDeleted: images.length,\n });\n }\n\n /**\n * Get the underlying record\n */\n toRecord(): ContainerRecord {\n return { ...this.record };\n }\n\n // ==================== Private Helpers ====================\n\n private static generateContainerId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 8);\n return `ctr_${timestamp}_${random}`;\n }\n}\n\n/**\n * Create a new Container\n */\nexport async function createContainer(\n config: ContainerCreateConfig,\n context: ContainerContext\n): Promise<Container> {\n return ContainerImpl.create(config, context);\n}\n\n/**\n * Load an existing Container\n */\nexport async function loadContainer(\n containerId: string,\n context: ContainerContext\n): Promise<Container | null> {\n return ContainerImpl.load(containerId, context);\n}\n\n/**\n * Get or create a Container\n */\nexport async function getOrCreateContainer(\n containerId: string,\n context: ContainerContext\n): Promise<Container> {\n return ContainerImpl.getOrCreate(containerId, context);\n}\n"],"mappings":"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","names":[]}
@@ -1,310 +1,2 @@
1
- import { U as UserMessage } from '../message-BMrMm1pq.js';
2
-
3
- /**
4
- * Driver Types - LLM Communication Layer
5
- *
6
- * Driver is the bridge between AgentX and external LLM (Claude, OpenAI, etc.)
7
- *
8
- * ```
9
- * AgentX
10
- * │
11
- * receive() │ AsyncIterable<StreamEvent>
12
- * ─────────► │ ◄─────────────────────────
13
- * │
14
- * ┌───────────────┐
15
- * │ Driver │
16
- * │ │
17
- * │ UserMessage │
18
- * │ ↓ │
19
- * │ [SDK call] │
20
- * │ ↓ │
21
- * │ StreamEvent │
22
- * └───────────────┘
23
- * │
24
- * ▼
25
- * External LLM
26
- * (Claude SDK)
27
- * ```
28
- *
29
- * Key Design:
30
- * - Driver = single session communication (like Kimi SDK's Session)
31
- * - Clear input/output boundary (for recording/playback)
32
- * - Configuration defined by us (capability boundary)
33
- */
34
-
35
- /**
36
- * MCP Server configuration
37
- *
38
- * Defines how to launch an MCP server process.
39
- */
40
- interface McpServerConfig {
41
- /**
42
- * Command to run the MCP server
43
- */
44
- command: string;
45
- /**
46
- * Command arguments
47
- */
48
- args?: string[];
49
- /**
50
- * Environment variables for the process
51
- */
52
- env?: Record<string, string>;
53
- }
54
- /**
55
- * StopReason - Why the LLM stopped generating
56
- */
57
- type StopReason = "end_turn" | "max_tokens" | "tool_use" | "stop_sequence" | "content_filter" | "error" | "other";
58
- /**
59
- * StreamEvent - Lightweight event from Driver
60
- *
61
- * Only contains essential fields: type, timestamp, data
62
- * No source, category, intent, context (those are added by upper layers)
63
- */
64
- interface StreamEvent<T extends string = string, D = unknown> {
65
- readonly type: T;
66
- readonly timestamp: number;
67
- readonly data: D;
68
- }
69
- interface MessageStartEvent extends StreamEvent<"message_start", {
70
- messageId: string;
71
- model: string;
72
- }> {
73
- }
74
- interface MessageStopEvent extends StreamEvent<"message_stop", {
75
- stopReason: StopReason;
76
- }> {
77
- }
78
- interface TextDeltaEvent extends StreamEvent<"text_delta", {
79
- text: string;
80
- }> {
81
- }
82
- interface ToolUseStartEvent extends StreamEvent<"tool_use_start", {
83
- toolCallId: string;
84
- toolName: string;
85
- }> {
86
- }
87
- interface InputJsonDeltaEvent extends StreamEvent<"input_json_delta", {
88
- partialJson: string;
89
- }> {
90
- }
91
- interface ToolUseStopEvent extends StreamEvent<"tool_use_stop", {
92
- toolCallId: string;
93
- toolName: string;
94
- input: Record<string, unknown>;
95
- }> {
96
- }
97
- interface ToolResultEvent extends StreamEvent<"tool_result", {
98
- toolCallId: string;
99
- result: unknown;
100
- isError?: boolean;
101
- }> {
102
- }
103
- interface ErrorEvent extends StreamEvent<"error", {
104
- message: string;
105
- errorCode?: string;
106
- }> {
107
- }
108
- interface InterruptedEvent extends StreamEvent<"interrupted", {
109
- reason: "user" | "timeout" | "error";
110
- }> {
111
- }
112
- /**
113
- * DriverStreamEvent - Union of all stream events from Driver
114
- */
115
- type DriverStreamEvent = MessageStartEvent | MessageStopEvent | TextDeltaEvent | ToolUseStartEvent | InputJsonDeltaEvent | ToolUseStopEvent | ToolResultEvent | ErrorEvent | InterruptedEvent;
116
- /**
117
- * DriverStreamEventType - String literal union of event types
118
- */
119
- type DriverStreamEventType = DriverStreamEvent["type"];
120
- /**
121
- * DriverConfig - All configuration for creating a Driver
122
- *
123
- * This is our capability boundary - we define what we support.
124
- * Specific implementations (Claude, OpenAI) must work within this.
125
- *
126
- * @typeParam TOptions - Driver-specific options type. Each driver implementation
127
- * can define its own options interface and pass it as a type parameter.
128
- *
129
- * @example
130
- * ```typescript
131
- * // Define driver-specific options
132
- * interface ClaudeDriverOptions {
133
- * claudeCodePath?: string;
134
- * maxTurns?: number;
135
- * }
136
- *
137
- * // Use with type parameter
138
- * const config: DriverConfig<ClaudeDriverOptions> = {
139
- * apiKey: "...",
140
- * agentId: "my-agent",
141
- * options: {
142
- * claudeCodePath: "/usr/local/bin/claude"
143
- * }
144
- * };
145
- * ```
146
- */
147
- interface DriverConfig<TOptions = Record<string, unknown>> {
148
- /**
149
- * API key for authentication
150
- */
151
- apiKey: string;
152
- /**
153
- * Base URL for API endpoint (optional, for custom deployments)
154
- */
155
- baseUrl?: string;
156
- /**
157
- * Model identifier (e.g., "claude-sonnet-4-20250514")
158
- */
159
- model?: string;
160
- /**
161
- * Request timeout in milliseconds (default: 600000 = 10 minutes)
162
- */
163
- timeout?: number;
164
- /**
165
- * Agent ID (for identification and logging)
166
- */
167
- agentId: string;
168
- /**
169
- * System prompt for the agent
170
- */
171
- systemPrompt?: string;
172
- /**
173
- * Current working directory for tool execution
174
- */
175
- cwd?: string;
176
- /**
177
- * MCP servers configuration
178
- */
179
- mcpServers?: Record<string, McpServerConfig>;
180
- /**
181
- * Session ID to resume (for conversation continuity)
182
- *
183
- * If provided, Driver will attempt to resume this session.
184
- * If not provided, a new session is created.
185
- */
186
- resumeSessionId?: string;
187
- /**
188
- * Callback when SDK session ID is captured
189
- *
190
- * Called once when the session ID becomes available.
191
- * Save this ID to enable session resume later.
192
- */
193
- onSessionIdCaptured?: (sessionId: string) => void;
194
- /**
195
- * Driver-specific options
196
- *
197
- * Each driver implementation can define its own options type.
198
- * This allows drivers to have custom configuration without
199
- * polluting the base DriverConfig interface.
200
- *
201
- * @example
202
- * ```typescript
203
- * // ClaudeDriver options
204
- * interface ClaudeDriverOptions {
205
- * claudeCodePath?: string;
206
- * }
207
- *
208
- * const config: DriverConfig<ClaudeDriverOptions> = {
209
- * apiKey: "...",
210
- * options: { claudeCodePath: "/usr/bin/claude" }
211
- * };
212
- * ```
213
- */
214
- options?: TOptions;
215
- }
216
- /**
217
- * DriverState - Current state of the Driver
218
- *
219
- * - idle: Ready to receive messages
220
- * - active: Currently processing a message
221
- * - disposed: Driver has been disposed, cannot be used
222
- */
223
- type DriverState = "idle" | "active" | "disposed";
224
- /**
225
- * Driver - LLM Communication Interface
226
- *
227
- * Responsible for a single session's communication with LLM.
228
- * Similar to Kimi SDK's Session concept.
229
- *
230
- * Lifecycle:
231
- * 1. createDriver(config) → Driver instance
232
- * 2. driver.initialize() → Start SDK, MCP servers
233
- * 3. driver.receive(message) → Send message, get events
234
- * 4. driver.dispose() → Cleanup
235
- *
236
- * @example
237
- * ```typescript
238
- * const driver = createDriver(config);
239
- * await driver.initialize();
240
- *
241
- * const events = driver.receive(message);
242
- * for await (const event of events) {
243
- * if (event.type === "text_delta") {
244
- * console.log(event.data.text);
245
- * }
246
- * }
247
- *
248
- * await driver.dispose();
249
- * ```
250
- */
251
- interface Driver {
252
- /**
253
- * Driver name (for identification and logging)
254
- */
255
- readonly name: string;
256
- /**
257
- * SDK Session ID (available after first message)
258
- */
259
- readonly sessionId: string | null;
260
- /**
261
- * Current state
262
- */
263
- readonly state: DriverState;
264
- /**
265
- * Receive a user message and return stream of events
266
- *
267
- * @param message - User message to send
268
- * @returns AsyncIterable of stream events
269
- */
270
- receive(message: UserMessage): AsyncIterable<DriverStreamEvent>;
271
- /**
272
- * Interrupt current operation
273
- *
274
- * Stops the current receive() operation gracefully.
275
- * The AsyncIterable will emit an "interrupted" event and complete.
276
- */
277
- interrupt(): void;
278
- /**
279
- * Initialize the Driver
280
- *
281
- * Starts SDK subprocess, MCP servers, etc.
282
- * Must be called before receive().
283
- */
284
- initialize(): Promise<void>;
285
- /**
286
- * Dispose and cleanup resources
287
- *
288
- * Stops SDK subprocess, MCP servers, etc.
289
- * Driver cannot be used after dispose().
290
- */
291
- dispose(): Promise<void>;
292
- }
293
- /**
294
- * CreateDriver - Factory function type for creating Driver instances
295
- *
296
- * Each implementation package exports a function of this type.
297
- *
298
- * @typeParam TOptions - Driver-specific options type
299
- *
300
- * @example
301
- * ```typescript
302
- * // @agentxjs/claude-driver
303
- * export const createClaudeDriver: CreateDriver<ClaudeDriverOptions> = (config) => {
304
- * return new ClaudeDriver(config);
305
- * };
306
- * ```
307
- */
308
- type CreateDriver<TOptions = Record<string, unknown>> = (config: DriverConfig<TOptions>) => Driver;
309
-
310
- export type { CreateDriver, Driver, DriverConfig, DriverState, DriverStreamEvent, DriverStreamEventType, ErrorEvent, InputJsonDeltaEvent, InterruptedEvent, McpServerConfig, MessageStartEvent, MessageStopEvent, StopReason, StreamEvent, TextDeltaEvent, ToolResultEvent, ToolUseStartEvent, ToolUseStopEvent };
1
+ export { h as CreateDriver, j as Driver, D as DriverConfig, i as DriverState, u as DriverStreamEvent, v as DriverStreamEventType, E as ErrorEvent, q as InputJsonDeltaEvent, t as InterruptedEvent, M as McpServerConfig, m as MessageStartEvent, n as MessageStopEvent, l as StopReason, k as StreamEvent, o as TextDeltaEvent, T as ToolDefinition, s as ToolResultEvent, p as ToolUseStartEvent, r as ToolUseStopEvent } from '../index-CuS1i5V-.js';
2
+ import '../message-03TJzvIX.js';