@factory/droid-sdk 0.1.3 → 0.2.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.
- package/README.md +239 -47
- package/dist/index.cjs +1869 -1296
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6734 -4444
- package/dist/index.d.ts +6734 -4444
- package/dist/index.js +1815 -1298
- package/dist/index.js.map +1 -1
- package/docs/examples/init-metadata.md +79 -0
- package/docs/examples/list-sessions.md +64 -0
- package/docs/examples/multi-turn-session.md +77 -0
- package/docs/examples/one-shot-query.md +73 -0
- package/docs/examples/permission-handler.md +102 -0
- package/docs/examples/run.md +52 -0
- package/docs/examples/spec-mode.md +101 -0
- package/docs/examples/tool-controls.md +90 -0
- package/docs/typescript-sdk-reference.md +372 -0
- package/examples/.gitkeep +1 -0
- package/examples/abort-session-stream.ts +67 -0
- package/examples/droid-dev-structured-output.ts +44 -0
- package/examples/fork-session.ts +42 -0
- package/examples/init-metadata.ts +76 -0
- package/examples/interrupt-session.ts +67 -0
- package/examples/list-sessions.ts +65 -0
- package/examples/multi-turn-session.ts +67 -0
- package/examples/permission-handler.ts +98 -0
- package/examples/result-metadata.ts +62 -0
- package/examples/run.ts +38 -0
- package/examples/sdk-mcp-tool.ts +38 -0
- package/examples/simple-query.ts +53 -0
- package/examples/spec-mode-new-session.ts +121 -0
- package/examples/spec-mode-same-session.ts +133 -0
- package/examples/structured-output.ts +53 -0
- package/examples/test-compact.ts +60 -0
- package/examples/test-rewind.ts +155 -0
- package/examples/tool-controls.ts +69 -0
- package/package.json +26 -4
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/schemas/enums.ts","../src/schemas/constants.ts","../src/schemas/shared.ts","../src/schemas/messages.ts","../src/schemas/mcp.ts","../src/schemas/mission.ts","../src/schemas/client.ts","../src/schemas/server.ts","../src/errors.ts","../src/transport.ts","../src/protocol.ts","../src/client.ts","../src/stream.ts","../src/query.ts","../src/session.ts"],"sourcesContent":["// @factory/droid-sdk - TypeScript SDK for the Factory Droid CLI\n// This is the public API barrel file.\n\n// --- Schemas (enums, constants, Zod schemas, types) ---\nexport * from \"./schemas/index.js\";\n\n// --- Errors ---\nexport * from \"./errors.js\";\n\n// --- Transport types ---\nexport * from \"./types.js\";\nexport { ProcessTransport } from \"./transport.js\";\n\n// --- Protocol engine ---\nexport { ProtocolEngine } from \"./protocol.js\";\nexport type {\n AskUserHandler,\n NotificationCallback,\n NotificationFilter,\n PermissionHandler,\n} from \"./protocol.js\";\n\n// --- Client ---\nexport { DroidClient } from \"./client.js\";\nexport type {\n ClientAskUserHandler,\n ClientPermissionHandler,\n DroidClientOptions,\n} from \"./client.js\";\n\n// --- Stream message types and converter ---\nexport {\n convertNotificationToStreamMessage,\n StreamStateTracker,\n} from \"./stream.js\";\nexport type {\n AssistantTextDelta,\n ThinkingTextDelta,\n ToolUse,\n ToolResult,\n ToolProgress,\n WorkingStateChanged,\n TokenUsageUpdate,\n CreateMessage,\n PermissionResolved,\n SettingsUpdated,\n SessionTitleUpdated,\n McpStatusChanged,\n MissionStateChanged,\n MissionFeaturesChanged,\n MissionProgressEntry,\n MissionHeartbeat,\n MissionWorkerStarted,\n MissionWorkerCompleted,\n McpAuthRequired,\n McpAuthCompleted,\n ErrorEvent,\n TurnComplete,\n DroidMessage,\n} from \"./stream.js\";\n\n// --- High-level API: query ---\nexport { query } from \"./query.js\";\nexport type { QueryOptions, DroidQuery } from \"./query.js\";\n\n// --- High-level API: session ---\nexport { createSession, resumeSession, DroidSession } from \"./session.js\";\nexport type {\n CreateSessionOptions,\n ResumeSessionOptions,\n MessageOptions,\n DroidResult,\n} from \"./session.js\";\n","/**\n * All protocol enums for the Factory Droid SDK.\n *\n * Ported from:\n * - packages/common/src/droid/enums.ts\n * - packages/common/src/shared/enums.ts\n * - packages/common/src/llm/enums.ts\n * - packages/common/src/settings/enums.ts\n */\n\n/** Droid server methods (client → server communication). */\nexport enum DroidServerMethod {\n INITIALIZE_SESSION = \"droid.initialize_session\",\n LOAD_SESSION = \"droid.load_session\",\n ADD_USER_MESSAGE = \"droid.add_user_message\",\n INTERRUPT_SESSION = \"droid.interrupt_session\",\n KILL_WORKER_SESSION = \"droid.kill_worker_session\",\n UPDATE_SESSION_SETTINGS = \"droid.update_session_settings\",\n TOGGLE_MCP_SERVER = \"droid.toggle_mcp_server\",\n AUTHENTICATE_MCP_SERVER = \"droid.authenticate_mcp_server\",\n CANCEL_MCP_AUTH = \"droid.cancel_mcp_auth\",\n CLEAR_MCP_AUTH = \"droid.clear_mcp_auth\",\n ADD_MCP_SERVER = \"droid.add_mcp_server\",\n REMOVE_MCP_SERVER = \"droid.remove_mcp_server\",\n LIST_MCP_REGISTRY = \"droid.list_mcp_registry\",\n LIST_MCP_TOOLS = \"droid.list_mcp_tools\",\n LIST_MCP_SERVERS = \"droid.list_mcp_servers\",\n TOGGLE_MCP_TOOL = \"droid.toggle_mcp_tool\",\n SUBMIT_MCP_AUTH_CODE = \"droid.submit_mcp_auth_code\",\n LIST_SKILLS = \"droid.list_skills\",\n SUBMIT_BUG_REPORT = \"droid.submit_bug_report\",\n}\n\n/** Droid client methods (server → client communication). */\nexport enum DroidClientMethod {\n SESSION_NOTIFICATION = \"droid.session_notification\",\n REQUEST_PERMISSION = \"droid.request_permission\",\n ASK_USER = \"droid.ask_user\",\n}\n\n/** Session notification types. */\nexport enum SessionNotificationType {\n TOOL_RESULT = \"tool_result\",\n TOOL_PROGRESS_UPDATE = \"tool_progress_update\",\n CREATE_MESSAGE = \"create_message\",\n ERROR = \"error\",\n DROID_WORKING_STATE_CHANGED = \"droid_working_state_changed\",\n PERMISSION_RESOLVED = \"permission_resolved\",\n SETTINGS_UPDATED = \"settings_updated\",\n SESSION_TITLE_UPDATED = \"session_title_updated\",\n MCP_STATUS_CHANGED = \"mcp_status_changed\",\n ASSISTANT_TEXT_DELTA = \"assistant_text_delta\",\n THINKING_TEXT_DELTA = \"thinking_text_delta\",\n SESSION_TOKEN_USAGE_CHANGED = \"session_token_usage_changed\",\n MISSION_STATE_CHANGED = \"mission_state_changed\",\n MISSION_FEATURES_CHANGED = \"mission_features_changed\",\n MISSION_PROGRESS_ENTRY = \"mission_progress_entry\",\n MISSION_HEARTBEAT = \"mission_heartbeat\",\n MISSION_WORKER_STARTED = \"mission_worker_started\",\n MISSION_WORKER_COMPLETED = \"mission_worker_completed\",\n MCP_AUTH_REQUIRED = \"mcp_auth_required\",\n MCP_AUTH_COMPLETED = \"mcp_auth_completed\",\n}\n\n/** Tool confirmation outcome options (possible user responses to permission requests). */\nexport enum ToolConfirmationOutcome {\n ProceedOnce = \"proceed_once\",\n ProceedAlways = \"proceed_always\",\n ProceedAutoRun = \"proceed_auto_run\",\n ProceedAutoRunLow = \"proceed_auto_run_low\",\n ProceedAutoRunMedium = \"proceed_auto_run_medium\",\n ProceedAutoRunHigh = \"proceed_auto_run_high\",\n ProceedEdit = \"proceed_edit\",\n Cancel = \"cancel\",\n}\n\n/** Tool confirmation type (which tool is requesting permission). */\nexport enum ToolConfirmationType {\n Edit = \"edit\",\n Execute = \"exec\",\n Create = \"create\",\n AskUser = \"ask_user\",\n ExitSpecMode = \"exit_spec_mode\",\n ProposeMission = \"propose_mission\",\n StartMissionRun = \"start_mission_run\",\n ApplyPatch = \"apply_patch\",\n McpTool = \"mcp_tool\",\n}\n\n/** Droid working state (represents what the agent is currently doing). */\nexport enum DroidWorkingState {\n Idle = \"idle\",\n StreamingAssistantMessage = \"streaming_assistant_message\",\n WaitingForToolConfirmation = \"waiting_for_tool_confirmation\",\n ExecutingTool = \"executing_tool\",\n CompactingConversation = \"compacting_conversation\",\n}\n\n/** Error types for error notifications. */\nexport enum DroidErrorType {\n CONNECTION_ERROR = \"ConnectionError\",\n PROTOCOL_ERROR = \"ProtocolError\",\n SESSION_ERROR = \"SessionError\",\n TIMEOUT_ERROR = \"TimeoutError\",\n DROID_CLIENT_ERROR = \"DroidClientError\",\n PROCESS_EXIT_ERROR = \"ProcessExitError\",\n ERROR = \"Error\",\n}\n\n/** MCP server connection status. */\nexport enum McpServerStatus {\n Connecting = \"connecting\",\n Connected = \"connected\",\n Disconnected = \"disconnected\",\n Failed = \"failed\",\n Disabled = \"disabled\",\n}\n\n/** MCP server transport type. */\nexport enum McpServerType {\n Stdio = \"stdio\",\n Http = \"http\",\n Sse = \"sse\",\n}\n\n/** Overall MCP initialization status. */\nexport enum McpStatus {\n NotInitialized = \"not-initialized\",\n Initializing = \"initializing\",\n Ready = \"ready\",\n NoServers = \"no-servers\",\n Failed = \"failed\",\n}\n\n/** MCP authentication outcome. */\nexport enum McpAuthOutcome {\n Success = \"success\",\n Cancelled = \"cancelled\",\n Failed = \"failed\",\n}\n\n/** Session type for mission decomposition (orchestrator manages workers). */\nexport enum DecompSessionType {\n Orchestrator = \"orchestrator\",\n Worker = \"worker\",\n}\n\n/** Mission state enum (used by orchestrator mission runner). */\nexport enum MissionState {\n AwaitingInput = \"awaiting_input\",\n Initializing = \"initializing\",\n Running = \"running\",\n Paused = \"paused\",\n OrchestratorTurn = \"orchestrator_turn\",\n Completed = \"completed\",\n}\n\n/** Feature status enum (mirrors orchestrator feature lifecycle). */\nexport enum FeatureStatus {\n Pending = \"pending\",\n InProgress = \"in_progress\",\n Completed = \"completed\",\n Cancelled = \"cancelled\",\n}\n\n/** Success state for feature completion. */\nexport enum FeatureSuccessState {\n Success = \"success\",\n Partial = \"partial\",\n Failure = \"failure\",\n}\n\n/** Issue severity for discovered issues. */\nexport enum IssueSeverity {\n Blocking = \"blocking\",\n NonBlocking = \"non_blocking\",\n Suggestion = \"suggestion\",\n}\n\n/** Dismissal item type. */\nexport enum DismissalType {\n DiscoveredIssue = \"discovered_issue\",\n CriticalContext = \"critical_context\",\n IncompleteWork = \"incomplete_work\",\n}\n\n/** Progress log entry type. */\nexport enum ProgressLogEntryType {\n MissionAccepted = \"mission_accepted\",\n MissionPaused = \"mission_paused\",\n MissionResumed = \"mission_resumed\",\n MissionRunStarted = \"mission_run_started\",\n WorkerStarted = \"worker_started\",\n WorkerSelectedFeature = \"worker_selected_feature\",\n WorkerCompleted = \"worker_completed\",\n WorkerFailed = \"worker_failed\",\n WorkerPaused = \"worker_paused\",\n HandoffItemsDismissed = \"handoff_items_dismissed\",\n MilestoneValidationTriggered = \"milestone_validation_triggered\",\n}\n\n/**\n * The interaction mode determines how Droid operates.\n * - Auto: Droid can execute actions based on autonomy level\n * - Spec: Droid is in planning/research mode only (read-only operations)\n * - AGI: Droid orchestrates missions with read-only tools and orchestrator controls\n */\nexport enum DroidInteractionMode {\n Auto = \"auto\",\n Spec = \"spec\",\n AGI = \"agi\",\n}\n\n/**\n * Autonomy level determines what actions Droid can perform without user confirmation.\n * - Off: User controls all actions (confirmation required for everything)\n * - Low: Allow file edits and read-only commands\n * - Medium: Allow reversible commands\n * - High: Allow all commands without prompts\n */\nexport enum AutonomyLevel {\n Off = \"off\",\n Low = \"low\",\n Medium = \"medium\",\n High = \"high\",\n}\n\n/**\n * Combined autonomy mode for backward compatibility.\n * @deprecated Use DroidInteractionMode + AutonomyLevel instead.\n */\nexport enum AutonomyMode {\n Normal = \"normal\",\n Spec = \"spec\",\n AutoLow = \"auto-low\",\n AutoMedium = \"auto-medium\",\n AutoHigh = \"auto-high\",\n}\n\n/** Reasoning effort levels for LLMs. */\nexport enum ReasoningEffort {\n None = \"none\",\n Dynamic = \"dynamic\",\n Off = \"off\",\n Minimal = \"minimal\",\n Low = \"low\",\n Medium = \"medium\",\n High = \"high\",\n ExtraHigh = \"xhigh\",\n Max = \"max\",\n}\n\n/** Model provider identifiers. */\nexport enum ModelProvider {\n ANTHROPIC = \"anthropic\",\n OPENAI = \"openai\",\n GENERIC_CHAT_COMPLETION_API = \"generic-chat-completion-api\",\n FACTORY = \"factory\",\n GOOGLE = \"google\",\n XAI = \"xai\",\n VOYAGE = \"voyage\",\n}\n\n/** Standard JSON-RPC 2.0 error codes. */\nexport enum JsonRpcErrorCode {\n PARSE_ERROR = -32700,\n INVALID_REQUEST = -32600,\n METHOD_NOT_FOUND = -32601,\n INVALID_PARAMS = -32602,\n INTERNAL_ERROR = -32603,\n AUTHENTICATION_ERROR = -32001,\n ENTITY_NOT_FOUND = -32004,\n SESSION_DISCONNECTED = -32005,\n}\n\n/** JSON-RPC message type discriminator. */\nexport enum JsonRpcMessageType {\n Request = \"request\",\n Response = \"response\",\n Notification = \"notification\",\n}\n\n/**\n * Settings hierarchy level enum.\n * Precedence order (highest to lowest): Org → Runtime → Folder → Project → User\n */\nexport enum SettingsLevel {\n Org = \"org\",\n Runtime = \"runtime\",\n User = \"user\",\n Project = \"project\",\n Folder = \"folder\",\n Dynamic = \"dynamic\",\n BuiltIn = \"builtin\",\n}\n\n/** Skill file location type. */\nexport enum SkillLocation {\n Project = \"project\",\n Personal = \"personal\",\n Builtin = \"builtin\",\n}\n","/**\n * Protocol version constants for the Factory Droid SDK.\n */\n\n/** JSON-RPC protocol version. */\nexport const JSONRPC_VERSION = \"2.0\" as const;\n\n/**\n * Legacy Factory API version for backward compatibility.\n * @deprecated Use FACTORY_PROTOCOL_VERSION for runtime compatibility instead.\n */\nexport const LEGACY_FACTORY_API_VERSION = \"1.0.0\" as const;\n\n/** Current Factory protocol version. */\nexport const FACTORY_PROTOCOL_VERSION = \"1.2.0\" as const;\n\n/** HTTP header identifying the Factory client type. */\nexport const FACTORY_CLIENT_HEADER = \"X-Factory-Client\" as const;\n\n/** HTTP header identifying the Factory client version. */\nexport const FACTORY_CLIENT_VERSION = \"X-Client-Version\" as const;\n\n/** Default request timeout in milliseconds (30s). */\nexport const DEFAULT_REQUEST_TIMEOUT = 30_000;\n\n/** Session initialization timeout in milliseconds (60s). */\nexport const SESSION_INIT_TIMEOUT = 60_000;\n\n/** MCP authentication timeout in milliseconds (300s). */\nexport const MCP_AUTH_TIMEOUT = 300_000;\n","/**\n * JSON-RPC 2.0 base schemas for the Factory Droid protocol.\n *\n * Ported from: packages/common/src/shared/schemas.ts\n */\n\nimport { z } from \"zod\";\n\nimport { JSONRPC_VERSION, LEGACY_FACTORY_API_VERSION } from \"./constants.js\";\nimport { JsonRpcErrorCode } from \"./enums.js\";\n\n// ---------------------------------------------------------------------------\n// Trace context metadata\n// ---------------------------------------------------------------------------\n\n/** Trace context metadata for distributed tracing propagation. */\nexport const TraceContextMetaSchema = z.object({\n traceparent: z.string().optional(),\n tracestate: z.string().optional(),\n});\n\nexport type TraceContextMeta = z.infer<typeof TraceContextMetaSchema>;\n\n// ---------------------------------------------------------------------------\n// JSON-RPC envelope\n// ---------------------------------------------------------------------------\n\n/** JSON-RPC 2.0 envelope with Factory protocol extensions. */\nexport const JsonRpcEnvelopeSchema = z.object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n factoryApiVersion: z.literal(LEGACY_FACTORY_API_VERSION),\n factoryProtocolVersion: z.string().optional(),\n _meta: TraceContextMetaSchema.optional(),\n});\n\nexport type JsonRpcEnvelope = z.infer<typeof JsonRpcEnvelopeSchema>;\n\n// ---------------------------------------------------------------------------\n// JSON-RPC error\n// ---------------------------------------------------------------------------\n\n/** JSON-RPC 2.0 error object. */\nexport const JsonRpcErrorSchema = z.object({\n code: z.nativeEnum(JsonRpcErrorCode),\n message: z.string(),\n data: z.unknown().optional(),\n});\n\nexport type JsonRpcError = z.infer<typeof JsonRpcErrorSchema>;\n\n// ---------------------------------------------------------------------------\n// Base message schemas (without envelope)\n// ---------------------------------------------------------------------------\n\n/** Base JSON-RPC request. */\nexport const BaseRequestSchema = z.object({\n type: z.literal(\"request\"),\n id: z.string(),\n method: z.string(),\n params: z.unknown().optional(),\n});\n\nexport type BaseRequest = z.infer<typeof BaseRequestSchema>;\n\n/** Base JSON-RPC success response. */\nexport const BaseResponseSuccessSchema = z.object({\n type: z.literal(\"response\"),\n id: z.string(),\n result: z.unknown(),\n});\n\nexport type BaseResponseSuccess = z.infer<typeof BaseResponseSuccessSchema>;\n\n/** Base JSON-RPC failure response. */\nexport const BaseResponseFailureSchema = z.object({\n type: z.literal(\"response\"),\n id: z.string().nullable(),\n error: JsonRpcErrorSchema,\n});\n\nexport type BaseResponseFailure = z.infer<typeof BaseResponseFailureSchema>;\n\n/** Base JSON-RPC notification. */\nexport const BaseNotificationSchema = z.object({\n type: z.literal(\"notification\"),\n method: z.string(),\n params: z.unknown().optional(),\n});\n\nexport type BaseNotification = z.infer<typeof BaseNotificationSchema>;\n\n// ---------------------------------------------------------------------------\n// Combined models (Envelope + Base)\n// ---------------------------------------------------------------------------\n\n/** Full JSON-RPC request with envelope fields. */\nexport const JsonRpcRequestSchema = JsonRpcEnvelopeSchema.extend(\n BaseRequestSchema.shape,\n);\n\nexport type JsonRpcRequest = z.infer<typeof JsonRpcRequestSchema>;\n\n/** Full JSON-RPC success response with envelope fields. */\nexport const JsonRpcResponseSuccessSchema = JsonRpcEnvelopeSchema.extend(\n BaseResponseSuccessSchema.shape,\n);\n\nexport type JsonRpcResponseSuccess = z.infer<\n typeof JsonRpcResponseSuccessSchema\n>;\n\n/** Full JSON-RPC failure response with envelope fields. */\nexport const JsonRpcResponseFailureSchema = JsonRpcEnvelopeSchema.extend(\n BaseResponseFailureSchema.shape,\n);\n\nexport type JsonRpcResponseFailure = z.infer<\n typeof JsonRpcResponseFailureSchema\n>;\n\n/** Full JSON-RPC notification with envelope fields. */\nexport const JsonRpcNotificationSchema = JsonRpcEnvelopeSchema.extend(\n BaseNotificationSchema.shape,\n);\n\nexport type JsonRpcNotification = z.infer<typeof JsonRpcNotificationSchema>;\n\n/** JSON-RPC response (success or failure). */\nexport const JsonRpcResponseSchema = z.union([\n JsonRpcResponseFailureSchema,\n JsonRpcResponseSuccessSchema,\n]);\n\nexport type JsonRpcResponse = z.infer<typeof JsonRpcResponseSchema>;\n\n/** Discriminated union for initial message type routing. */\nexport const JsonRpcMessageSchema = z.discriminatedUnion(\"type\", [\n JsonRpcRequestSchema,\n JsonRpcEnvelopeSchema.extend({\n type: z.literal(\"response\"),\n id: z.string().nullable(),\n result: z.unknown().optional(),\n error: JsonRpcErrorSchema.optional(),\n }),\n JsonRpcNotificationSchema,\n]);\n\nexport type JsonRpcMessage = z.infer<typeof JsonRpcMessageSchema>;\n","/**\n * Message content block schemas for the Factory Droid protocol.\n *\n * Ported from: packages/common/src/sessionV2/messages/schemas.ts\n */\n\nimport { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// Content block schemas\n// ---------------------------------------------------------------------------\n\n/** Text content block. */\nexport const TextBlockSchema = z\n .object({\n type: z.literal(\"text\"),\n text: z.string(),\n id: z.string().optional(),\n })\n .passthrough();\n\nexport type TextBlock = z.infer<typeof TextBlockSchema>;\n\n/** Base64-encoded image source. */\nexport const Base64ImageSourceSchema = z\n .object({\n type: z.literal(\"base64\"),\n data: z.string(),\n mediaType: z.enum([\"image/jpeg\", \"image/png\", \"image/gif\", \"image/webp\"]),\n })\n .passthrough();\n\nexport type Base64ImageSource = z.infer<typeof Base64ImageSourceSchema>;\n\n/** Image content block. */\nexport const ImageBlockSchema = z\n .object({\n type: z.literal(\"image\"),\n source: Base64ImageSourceSchema,\n id: z.string().optional(),\n })\n .passthrough();\n\nexport type ImageBlock = z.infer<typeof ImageBlockSchema>;\n\n/** Thinking content block. */\nexport const ThinkingBlockSchema = z\n .object({\n type: z.literal(\"thinking\"),\n signature: z.string(),\n thinking: z.string(),\n id: z.string().optional(),\n signatureProvider: z.string().optional(),\n })\n .passthrough();\n\nexport type ThinkingBlock = z.infer<typeof ThinkingBlockSchema>;\n\n/** Redacted thinking content block. */\nexport const RedactedThinkingBlockSchema = z\n .object({\n type: z.literal(\"redacted_thinking\"),\n data: z.string(),\n id: z.string().optional(),\n })\n .passthrough();\n\nexport type RedactedThinkingBlock = z.infer<typeof RedactedThinkingBlockSchema>;\n\n/** Tool use content block. */\nexport const ToolUseBlockSchema = z\n .object({\n type: z.literal(\"tool_use\"),\n id: z.string(),\n input: z.record(z.unknown()),\n name: z.string(),\n thoughtSignature: z.string().optional(),\n })\n .passthrough();\n\nexport type ToolUseBlock = z.infer<typeof ToolUseBlockSchema>;\n\n/** Tool result content block. */\nexport const ToolResultBlockSchema = z\n .object({\n type: z.literal(\"tool_result\"),\n toolUseId: z.string(),\n content: z.union([z.string(), z.array(z.unknown())]).optional(),\n isError: z.boolean().optional(),\n id: z.string().optional(),\n })\n .passthrough();\n\nexport type ToolResultBlock = z.infer<typeof ToolResultBlockSchema>;\n\n/** Document content block. */\nexport const DocumentBlockSchema = z\n .object({\n type: z.literal(\"document\"),\n source: z.record(z.unknown()),\n id: z.string().optional(),\n })\n .passthrough();\n\nexport type DocumentBlock = z.infer<typeof DocumentBlockSchema>;\n\n/** Discriminated union over all content block types. */\nexport const ContentBlockSchema = z.discriminatedUnion(\"type\", [\n TextBlockSchema,\n ImageBlockSchema,\n ThinkingBlockSchema,\n RedactedThinkingBlockSchema,\n ToolUseBlockSchema,\n ToolResultBlockSchema,\n DocumentBlockSchema,\n]);\n\nexport type ContentBlock = z.infer<typeof ContentBlockSchema>;\n\n// ---------------------------------------------------------------------------\n// FactoryDroidMessage\n// ---------------------------------------------------------------------------\n\n/** Factory Droid message schema (used in CreateMessageNotification and session data). */\nexport const FactoryDroidMessageSchema = z\n .object({\n id: z.string(),\n role: z.enum([\"user\", \"assistant\", \"tool\", \"system\"]),\n content: z.array(ContentBlockSchema),\n createdAt: z.number(),\n updatedAt: z.number(),\n parentId: z.string().optional(),\n visibility: z.enum([\"both\", \"llm_only\", \"user_only\"]).optional(),\n isError: z.boolean().optional(),\n })\n .passthrough();\n\nexport type FactoryDroidMessage = z.infer<typeof FactoryDroidMessageSchema>;\n\n/** Document source for user messages (PDF or plain text). */\nexport const DocumentSourceSchema = z\n .object({\n type: z.string(),\n mediaType: z.string(),\n data: z.string(),\n name: z.string().optional(),\n mime: z.string().optional(),\n })\n .strict();\n\nexport type DocumentSource = z.infer<typeof DocumentSourceSchema>;\n","/**\n * MCP entity schemas for the Factory Droid protocol.\n *\n * Ported from: packages/common/src/droid/schemas/mcp.ts\n */\n\nimport { z } from \"zod\";\n\nimport { McpServerStatus, McpServerType, SettingsLevel, ToolConfirmationOutcome } from \"./enums.js\";\n\n// ---------------------------------------------------------------------------\n// MCP server config field schemas\n// ---------------------------------------------------------------------------\n\n/** Stdio MCP server configuration fields. */\nexport const McpStdioServerConfigFieldsSchema = z.object({\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n});\n\nexport type McpStdioServerConfigFields = z.infer<\n typeof McpStdioServerConfigFieldsSchema\n>;\n\n/** HTTP MCP server configuration fields. */\nexport const McpHttpServerConfigFieldsSchema = z.object({\n url: z.string().optional(),\n});\n\nexport type McpHttpServerConfigFields = z.infer<\n typeof McpHttpServerConfigFieldsSchema\n>;\n\n/** SSE MCP server configuration fields. */\nexport const McpSseServerConfigFieldsSchema = z.object({\n url: z.string(),\n headers: z.record(z.string()).optional(),\n});\n\nexport type McpSseServerConfigFields = z.infer<\n typeof McpSseServerConfigFieldsSchema\n>;\n\n// ---------------------------------------------------------------------------\n// MCP server status and summary\n// ---------------------------------------------------------------------------\n\n/** MCP server status information. */\nexport const McpServerStatusInfoSchema = z\n .object({\n name: z.string(),\n status: z.nativeEnum(McpServerStatus),\n source: z.nativeEnum(SettingsLevel),\n isManaged: z.boolean(),\n error: z.string().optional(),\n toolCount: z.number().optional(),\n serverType: z.nativeEnum(McpServerType).optional(),\n hasAuthTokens: z.boolean().optional(),\n })\n .passthrough();\n\nexport type McpServerStatusInfo = z.infer<typeof McpServerStatusInfoSchema>;\n\n/** MCP status summary. */\nexport const McpStatusSummarySchema = z\n .object({\n total: z.number(),\n connected: z.number(),\n connecting: z.number(),\n failed: z.number(),\n disabled: z.number().optional(),\n })\n .passthrough();\n\nexport type McpStatusSummary = z.infer<typeof McpStatusSummarySchema>;\n\n// ---------------------------------------------------------------------------\n// MCP registry server\n// ---------------------------------------------------------------------------\n\n/** MCP registry server entity. */\nexport const McpRegistryServerSchema = z\n .object({\n name: z.string(),\n description: z.string(),\n type: z.nativeEnum(McpServerType),\n // Stdio config fields\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n // HTTP config fields\n url: z.string().optional(),\n // Additional metadata\n note: z.string().optional(),\n logoUrl: z.string().optional(),\n })\n .passthrough();\n\nexport type McpRegistryServer = z.infer<typeof McpRegistryServerSchema>;\n\n// ---------------------------------------------------------------------------\n// MCP tool info\n// ---------------------------------------------------------------------------\n\n/** JSON Schema subset for MCP tool input parameters. */\nexport const McpToolInputSchemaSchema = z\n .object({\n type: z.string().optional(),\n properties: z.record(z.unknown()).optional(),\n required: z.array(z.string()).optional(),\n })\n .passthrough();\n\nexport type McpToolInputSchema = z.infer<typeof McpToolInputSchemaSchema>;\n\n/** MCP tool information entity. */\nexport const McpToolInfoSchema = z\n .object({\n serverName: z.string(),\n name: z.string(),\n description: z.string().optional(),\n isEnabled: z.boolean(),\n isReadOnly: z.boolean().optional(),\n inputSchema: McpToolInputSchemaSchema.optional(),\n })\n .passthrough();\n\nexport type McpToolInfo = z.infer<typeof McpToolInfoSchema>;\n\n// ---------------------------------------------------------------------------\n// Tool confirmation list item\n// ---------------------------------------------------------------------------\n\n/** Selectable list item for tool confirmation prompts. */\nexport const ToolConfirmationListItemSchema = z\n .object({\n label: z.string(),\n value: z.nativeEnum(ToolConfirmationOutcome),\n })\n .passthrough();\n\nexport type ToolConfirmationListItem = z.infer<\n typeof ToolConfirmationListItemSchema\n>;\n","/**\n * Mission decomposition schemas for the Factory Droid protocol.\n *\n * Ported from: packages/common/src/droid/schemas/mission-decomposition.ts\n */\n\nimport { z } from \"zod\";\n\nimport {\n DismissalType,\n FeatureStatus,\n FeatureSuccessState,\n IssueSeverity,\n ProgressLogEntryType,\n} from \"./enums.js\";\n\n// ---------------------------------------------------------------------------\n// Feature schema\n// ---------------------------------------------------------------------------\n\n/** Mission feature schema. */\nexport const MissionFeatureSchema = z\n .object({\n id: z.string(),\n description: z.string(),\n status: z.nativeEnum(FeatureStatus),\n skillName: z.string(),\n preconditions: z.array(z.string()),\n expectedBehavior: z.array(z.string()),\n verificationSteps: z.array(z.string()),\n fulfills: z.array(z.string()).optional(),\n milestone: z.string().optional(),\n workerSessionIds: z.array(z.string()).optional(),\n currentWorkerSessionId: z.string().nullable().optional(),\n completedWorkerSessionId: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type MissionFeature = z.infer<typeof MissionFeatureSchema>;\n\n// ---------------------------------------------------------------------------\n// Handoff-related schemas\n// ---------------------------------------------------------------------------\n\nexport const FeatureSuccessStateSchema = z.nativeEnum(FeatureSuccessState);\n\n/** Discovered issue during feature implementation. */\nexport const DiscoveredIssueSchema = z\n .object({\n severity: z.nativeEnum(IssueSeverity),\n description: z.string(),\n suggestedFix: z.string().optional(),\n })\n .passthrough();\n\nexport type DiscoveredIssue = z.infer<typeof DiscoveredIssueSchema>;\n\n/** A command run during verification. */\nexport const VerificationCommandSchema = z\n .object({\n command: z.string(),\n exitCode: z.number(),\n observation: z.string(),\n })\n .passthrough();\n\nexport type VerificationCommand = z.infer<typeof VerificationCommandSchema>;\n\n/** An interactive check performed during verification. */\nexport const InteractiveCheckSchema = z\n .object({\n action: z.string(),\n observed: z.string(),\n })\n .passthrough();\n\nexport type InteractiveCheck = z.infer<typeof InteractiveCheckSchema>;\n\n/** Verification performed during feature implementation. */\nexport const VerificationSchema = z\n .object({\n commandsRun: z.array(VerificationCommandSchema),\n interactiveChecks: z.array(InteractiveCheckSchema).optional(),\n })\n .passthrough();\n\nexport type Verification = z.infer<typeof VerificationSchema>;\n\n/** A single test case. */\nexport const TestCaseSchema = z\n .object({\n name: z.string(),\n verifies: z.string(),\n })\n .passthrough();\n\nexport type TestCase = z.infer<typeof TestCaseSchema>;\n\n/** A test file with its test cases. */\nexport const TestFileSchema = z\n .object({\n file: z.string(),\n cases: z.array(TestCaseSchema),\n })\n .passthrough();\n\nexport type TestFile = z.infer<typeof TestFileSchema>;\n\n/** Test information for a feature implementation. */\nexport const TestsSchema = z\n .object({\n added: z.array(TestFileSchema),\n updated: z.array(z.string()).optional(),\n coverage: z.string(),\n })\n .passthrough();\n\nexport type Tests = z.infer<typeof TestsSchema>;\n\n/** A deviation from the skill procedure. */\nexport const SkillDeviationSchema = z\n .object({\n step: z.string(),\n whatIDidInstead: z.string(),\n why: z.string(),\n })\n .passthrough();\n\nexport type SkillDeviation = z.infer<typeof SkillDeviationSchema>;\n\n/** Feedback on the skill procedure. */\nexport const SkillFeedbackSchema = z\n .object({\n followedProcedure: z.boolean(),\n deviations: z.array(SkillDeviationSchema),\n suggestedChanges: z.array(z.string()).optional(),\n })\n .passthrough();\n\nexport type SkillFeedback = z.infer<typeof SkillFeedbackSchema>;\n\n/** Worker handoff information. */\nexport const HandoffSchema = z\n .object({\n salientSummary: z.string().optional(),\n whatWasImplemented: z.string(),\n whatWasLeftUndone: z.string(),\n verification: VerificationSchema,\n tests: TestsSchema,\n discoveredIssues: z.array(DiscoveredIssueSchema),\n skillFeedback: SkillFeedbackSchema.optional(),\n })\n .passthrough();\n\nexport type Handoff = z.infer<typeof HandoffSchema>;\n\n/** A record of a dismissed handoff item. */\nexport const DismissalRecordSchema = z\n .object({\n type: z.nativeEnum(DismissalType),\n sourceFeatureId: z.string(),\n summary: z.string(),\n justification: z.string(),\n })\n .passthrough();\n\nexport type DismissalRecord = z.infer<typeof DismissalRecordSchema>;\n\n// ---------------------------------------------------------------------------\n// Progress log entry schemas\n// ---------------------------------------------------------------------------\n\nconst BaseProgressLogEntrySchema = z.object({\n timestamp: z.string(),\n});\n\nexport const MissionAcceptedEntrySchema = BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.MissionAccepted),\n title: z.string(),\n}).passthrough();\n\nexport type MissionAcceptedEntry = z.infer<typeof MissionAcceptedEntrySchema>;\n\nexport const MissionPausedEntrySchema = BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.MissionPaused),\n}).passthrough();\n\nexport type MissionPausedEntry = z.infer<typeof MissionPausedEntrySchema>;\n\nexport const MissionResumedEntrySchema = BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.MissionResumed),\n}).passthrough();\n\nexport type MissionResumedEntry = z.infer<typeof MissionResumedEntrySchema>;\n\nexport const MissionRunStartedEntrySchema = BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.MissionRunStarted),\n message: z.string().optional(),\n}).passthrough();\n\nexport type MissionRunStartedEntry = z.infer<\n typeof MissionRunStartedEntrySchema\n>;\n\nexport const WorkerStartedEntrySchema = BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.WorkerStarted),\n workerSessionId: z.string(),\n spawnId: z.string(),\n featureId: z.string().optional(),\n}).passthrough();\n\nexport type WorkerStartedEntry = z.infer<typeof WorkerStartedEntrySchema>;\n\nexport const WorkerSelectedFeatureEntrySchema =\n BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.WorkerSelectedFeature),\n workerSessionId: z.string(),\n featureId: z.string(),\n }).passthrough();\n\nexport type WorkerSelectedFeatureEntry = z.infer<\n typeof WorkerSelectedFeatureEntrySchema\n>;\n\nexport const WorkerCompletedEntrySchema = BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.WorkerCompleted),\n workerSessionId: z.string(),\n featureId: z.string(),\n successState: FeatureSuccessStateSchema,\n returnToOrchestrator: z.boolean(),\n commitId: z.string().optional(),\n exitCode: z.number(),\n validatorsPassed: z.boolean().optional(),\n handoff: HandoffSchema.optional(),\n}).passthrough();\n\nexport type WorkerCompletedEntry = z.infer<typeof WorkerCompletedEntrySchema>;\n\nexport const WorkerFailedEntrySchema = BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.WorkerFailed),\n workerSessionId: z.string().optional(),\n spawnId: z.string(),\n exitCode: z.number().optional(),\n reason: z.string(),\n}).passthrough();\n\nexport type WorkerFailedEntry = z.infer<typeof WorkerFailedEntrySchema>;\n\nexport const WorkerPausedEntrySchema = BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.WorkerPaused),\n workerSessionId: z.string(),\n featureId: z.string().optional(),\n}).passthrough();\n\nexport type WorkerPausedEntry = z.infer<typeof WorkerPausedEntrySchema>;\n\nexport const HandoffItemsDismissedEntrySchema =\n BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.HandoffItemsDismissed),\n dismissals: z.array(DismissalRecordSchema).optional(),\n }).passthrough();\n\nexport type HandoffItemsDismissedEntry = z.infer<\n typeof HandoffItemsDismissedEntrySchema\n>;\n\nexport const MilestoneValidationTriggeredEntrySchema =\n BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.MilestoneValidationTriggered),\n milestone: z.string(),\n featureId: z.string(),\n }).passthrough();\n\nexport type MilestoneValidationTriggeredEntry = z.infer<\n typeof MilestoneValidationTriggeredEntrySchema\n>;\n\n/** Discriminated union over all 11 progress log entry types. */\nexport const ProgressLogEntrySchema = z.discriminatedUnion(\"type\", [\n MissionAcceptedEntrySchema,\n MissionPausedEntrySchema,\n MissionResumedEntrySchema,\n MissionRunStartedEntrySchema,\n WorkerStartedEntrySchema,\n WorkerSelectedFeatureEntrySchema,\n WorkerCompletedEntrySchema,\n WorkerFailedEntrySchema,\n WorkerPausedEntrySchema,\n HandoffItemsDismissedEntrySchema,\n MilestoneValidationTriggeredEntrySchema,\n]);\n\nexport type ProgressLogEntry = z.infer<typeof ProgressLogEntrySchema>;\n","/**\n * Client→server request/response schemas for the Factory Droid protocol.\n *\n * All 19 client→server RPC method request/response pairs.\n *\n * Ported from: packages/common/src/droid/schemas/client.ts\n */\n\nimport { z } from \"zod\";\n\nimport {\n AutonomyLevel,\n AutonomyMode,\n DecompSessionType,\n DroidInteractionMode,\n DroidServerMethod,\n McpServerType,\n MissionState,\n ModelProvider,\n ReasoningEffort,\n SettingsLevel,\n SkillLocation,\n} from \"./enums.js\";\nimport {\n McpRegistryServerSchema,\n McpServerStatusInfoSchema,\n McpStatusSummarySchema,\n McpToolInfoSchema,\n} from \"./mcp.js\";\nimport { Base64ImageSourceSchema, DocumentSourceSchema } from \"./messages.js\";\nimport { MissionFeatureSchema, ProgressLogEntrySchema } from \"./mission.js\";\nimport {\n type JsonRpcResponseFailure,\n JsonRpcRequestSchema,\n JsonRpcResponseFailureSchema,\n JsonRpcResponseSuccessSchema,\n} from \"./shared.js\";\n\n// ---------------------------------------------------------------------------\n// Supporting types\n// ---------------------------------------------------------------------------\n\n/** Session tag metadata. */\nexport const SessionTagSchema = z\n .object({\n name: z.string(),\n metadata: z.record(z.string()).optional(),\n })\n .strict();\n\nexport type SessionTag = z.infer<typeof SessionTagSchema>;\n\n/** Session source information. */\nexport const SessionSourceSchema = z\n .object({\n platform: z.string(),\n })\n .passthrough();\n\nexport type SessionSource = z.infer<typeof SessionSourceSchema>;\n\n/** Stdio MCP server configuration for initialization. */\nexport const StdioMcpConfigSchema = z\n .object({\n name: z.string(),\n command: z.string(),\n args: z.array(z.string()).default([]),\n env: z.record(z.string()).optional().default({}),\n })\n .strict();\n\nexport type StdioMcpConfig = z.infer<typeof StdioMcpConfigSchema>;\n\n/** HTTP header for MCP server configuration. */\nexport const HttpHeaderSchema = z\n .object({\n name: z.string(),\n value: z.string(),\n })\n .strict();\n\nexport type HttpHeader = z.infer<typeof HttpHeaderSchema>;\n\n/** HTTP MCP server configuration for initialization. */\nexport const HttpMcpConfigSchema = z\n .object({\n type: z.literal(\"http\"),\n name: z.string(),\n url: z.string().url(),\n headers: HttpHeaderSchema.array().default([]),\n })\n .strict();\n\nexport type HttpMcpConfig = z.infer<typeof HttpMcpConfigSchema>;\n\n/** SSE MCP server configuration for initialization. */\nexport const SseMcpConfigSchema = z\n .object({\n type: z.literal(\"sse\"),\n name: z.string(),\n url: z.string().url(),\n headers: HttpHeaderSchema.array().default([]),\n })\n .strict();\n\nexport type SseMcpConfig = z.infer<typeof SseMcpConfigSchema>;\n\n/** Union of MCP server configs. */\nexport const McpServerConfigSchema = z.union([\n StdioMcpConfigSchema,\n HttpMcpConfigSchema,\n SseMcpConfigSchema,\n]);\n\nexport type McpServerConfig = z.infer<typeof McpServerConfigSchema>;\n\n/** Session settings returned in init/load results. */\nexport const SessionSettingsSchema = z\n .object({\n modelId: z.string(),\n reasoningEffort: z.nativeEnum(ReasoningEffort),\n autonomyMode: z.nativeEnum(AutonomyMode).optional(),\n interactionMode: z.nativeEnum(DroidInteractionMode).optional().catch(undefined),\n autonomyLevel: z.nativeEnum(AutonomyLevel).optional().catch(undefined),\n specModeModelId: z.string().optional(),\n specModeReasoningEffort: z.nativeEnum(ReasoningEffort).optional(),\n })\n .passthrough();\n\nexport type SessionSettings = z.infer<typeof SessionSettingsSchema>;\n\n/** Git repository information. */\nexport const GitRepoInfoSchema = z\n .object({\n owner: z.string().optional(),\n repoName: z.string(),\n })\n .passthrough();\n\nexport type GitRepoInfo = z.infer<typeof GitRepoInfoSchema>;\n\n/** Available model configuration returned in session init/load responses. */\nexport const AvailableModelConfigSchema = z\n .object({\n id: z.string(),\n modelId: z.string().optional(),\n displayName: z.string(),\n shortDisplayName: z.string(),\n modelProvider: z.nativeEnum(ModelProvider),\n supportedReasoningEfforts: z.array(z.nativeEnum(ReasoningEffort)),\n defaultReasoningEffort: z.nativeEnum(ReasoningEffort),\n isCustom: z.boolean().default(false),\n noImageSupport: z.boolean().optional(),\n supportsPDFs: z.boolean().optional(),\n tier: z.string().optional(),\n tokenMultiplier: z.number().optional(),\n promoLabel: z.string().optional(),\n featureFlag: z.record(z.unknown()).optional(),\n usesUSBasedInference: z.boolean().optional(),\n })\n .passthrough();\n\nexport type AvailableModelConfig = z.infer<typeof AvailableModelConfigSchema>;\n\n/** Token usage information for a session. */\nexport const TokenUsageSchema = z\n .object({\n inputTokens: z.number(),\n outputTokens: z.number(),\n cacheCreationTokens: z.number(),\n cacheReadTokens: z.number(),\n thinkingTokens: z.number(),\n })\n .passthrough();\n\nexport type TokenUsage = z.infer<typeof TokenUsageSchema>;\n\n/** Worker state information for mission snapshots. */\nexport const WorkerStateInfoSchema = z\n .object({\n startedAt: z.string(),\n completedAt: z.string().optional(),\n exitCode: z.number().optional(),\n })\n .passthrough();\n\nexport type WorkerStateInfo = z.infer<typeof WorkerStateInfoSchema>;\n\n/** Skill resource file in a skill folder. */\nexport const SkillResourceSchema = z\n .object({\n name: z.string(),\n path: z.string(),\n type: z.enum([\"reference\", \"asset\"]),\n })\n .passthrough();\n\nexport type SkillResource = z.infer<typeof SkillResourceSchema>;\n\n/** Skill information returned by list_skills. */\nexport const SkillInfoSchema = z\n .object({\n name: z.string(),\n description: z.string().optional(),\n location: z.nativeEnum(SkillLocation),\n filePath: z.string(),\n enabled: z.boolean().optional(),\n userInvocable: z.boolean().optional(),\n version: z.string().optional(),\n content: z.string().optional(),\n resources: z.array(SkillResourceSchema).optional(),\n })\n .passthrough();\n\nexport type SkillInfo = z.infer<typeof SkillInfoSchema>;\n\n// ---------------------------------------------------------------------------\n// Request params schemas\n// ---------------------------------------------------------------------------\n\n/** Parameters for droid.initialize_session request. */\nexport const InitializeSessionRequestParamsSchema = z\n .object({\n machineId: z.string(),\n cwd: z.string(),\n workspaceId: z.string().optional(),\n sessionId: z.string().optional(),\n mcpServers: z.array(McpServerConfigSchema).optional(),\n autonomyMode: z.nativeEnum(AutonomyMode).optional(),\n interactionMode: z.nativeEnum(DroidInteractionMode).optional().catch(undefined),\n autonomyLevel: z.nativeEnum(AutonomyLevel).optional().catch(undefined),\n modelId: z.string().optional(),\n reasoningEffort: z.nativeEnum(ReasoningEffort).optional(),\n specModeModelId: z.string().optional(),\n specModeReasoningEffort: z.nativeEnum(ReasoningEffort).optional(),\n decompSessionType: z.nativeEnum(DecompSessionType).optional(),\n decompMissionId: z.string().optional(),\n skipPermissionsUnsafe: z.boolean().optional(),\n enabledToolIds: z.array(z.string()).optional(),\n sessionLocation: z.string().optional(),\n sessionSource: SessionSourceSchema.optional(),\n tags: z.array(SessionTagSchema).optional(),\n mcpOAuthCallbackUri: z.string().optional(),\n })\n .strict();\n\nexport type InitializeSessionRequestParams = z.infer<\n typeof InitializeSessionRequestParamsSchema\n>;\n\n/** Parameters for droid.load_session request. */\nexport const LoadSessionRequestParamsSchema = z\n .object({\n sessionId: z.string(),\n mcpServers: z.array(McpServerConfigSchema).optional(),\n mcpOAuthCallbackUri: z.string().optional(),\n })\n .strict();\n\nexport type LoadSessionRequestParams = z.infer<\n typeof LoadSessionRequestParamsSchema\n>;\n\n/** Parameters for droid.add_user_message request. */\nexport const AddUserMessageRequestParamsSchema = z\n .object({\n messageId: z.string().optional(),\n text: z.string(),\n images: z.array(Base64ImageSourceSchema).optional(),\n files: z.array(DocumentSourceSchema).optional(),\n })\n .strict();\n\nexport type AddUserMessageRequestParams = z.infer<\n typeof AddUserMessageRequestParamsSchema\n>;\n\n/** Parameters for droid.interrupt_session request (empty). */\nexport const InterruptSessionRequestParamsSchema = z.object({}).strict();\n\nexport type InterruptSessionRequestParams = z.infer<\n typeof InterruptSessionRequestParamsSchema\n>;\n\n/** Parameters for droid.kill_worker_session request. */\nexport const KillWorkerSessionRequestParamsSchema = z\n .object({\n workerSessionId: z.string(),\n })\n .strict();\n\nexport type KillWorkerSessionRequestParams = z.infer<\n typeof KillWorkerSessionRequestParamsSchema\n>;\n\n/** Parameters for droid.update_session_settings request. */\nexport const UpdateSessionSettingsRequestParamsSchema = z\n .object({\n modelId: z.string().optional(),\n reasoningEffort: z.nativeEnum(ReasoningEffort).optional(),\n autonomyMode: z.nativeEnum(AutonomyMode).optional(),\n interactionMode: z.nativeEnum(DroidInteractionMode).optional().catch(undefined),\n autonomyLevel: z.nativeEnum(AutonomyLevel).optional().catch(undefined),\n specModeModelId: z.string().nullable().optional(),\n specModeReasoningEffort: z.nativeEnum(ReasoningEffort).nullable().optional(),\n })\n .strict();\n\nexport type UpdateSessionSettingsRequestParams = z.infer<\n typeof UpdateSessionSettingsRequestParamsSchema\n>;\n\n/** Parameters for droid.toggle_mcp_server request. */\nexport const ToggleMcpServerRequestParamsSchema = z\n .object({\n serverName: z.string(),\n enabled: z.boolean(),\n settingsLevel: z.literal(SettingsLevel.User),\n })\n .strict();\n\nexport type ToggleMcpServerRequestParams = z.infer<\n typeof ToggleMcpServerRequestParamsSchema\n>;\n\n/** Parameters for droid.authenticate_mcp_server request. */\nexport const AuthenticateMcpServerRequestParamsSchema = z\n .object({\n serverName: z.string(),\n })\n .strict();\n\nexport type AuthenticateMcpServerRequestParams = z.infer<\n typeof AuthenticateMcpServerRequestParamsSchema\n>;\n\n/** Parameters for droid.cancel_mcp_auth request. */\nexport const CancelMcpAuthRequestParamsSchema = z\n .object({\n serverName: z.string(),\n })\n .strict();\n\nexport type CancelMcpAuthRequestParams = z.infer<\n typeof CancelMcpAuthRequestParamsSchema\n>;\n\n/** Parameters for droid.clear_mcp_auth request. */\nexport const ClearMcpAuthRequestParamsSchema = z\n .object({\n serverName: z.string(),\n })\n .strict();\n\nexport type ClearMcpAuthRequestParams = z.infer<\n typeof ClearMcpAuthRequestParamsSchema\n>;\n\n/** Parameters for droid.submit_mcp_auth_code request. */\nexport const SubmitMcpAuthCodeRequestParamsSchema = z\n .object({\n serverName: z.string(),\n code: z.string(),\n state: z.string(),\n })\n .strict();\n\nexport type SubmitMcpAuthCodeRequestParams = z.infer<\n typeof SubmitMcpAuthCodeRequestParamsSchema\n>;\n\n/** Parameters for droid.add_mcp_server request. */\nexport const AddMcpServerRequestParamsSchema = z\n .object({\n name: z.string(),\n type: z.nativeEnum(McpServerType),\n url: z.string().optional(),\n headers: z.record(z.string()).optional(),\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n env: z.record(z.string()).optional(),\n })\n .strict();\n\nexport type AddMcpServerRequestParams = z.infer<\n typeof AddMcpServerRequestParamsSchema\n>;\n\n/** Parameters for droid.remove_mcp_server request. */\nexport const RemoveMcpServerRequestParamsSchema = z\n .object({\n serverName: z.string(),\n settingsLevel: z.literal(SettingsLevel.User),\n })\n .strict();\n\nexport type RemoveMcpServerRequestParams = z.infer<\n typeof RemoveMcpServerRequestParamsSchema\n>;\n\n/** Parameters for droid.list_mcp_registry request (empty). */\nexport const ListMcpRegistryRequestParamsSchema = z.object({}).strict();\n\nexport type ListMcpRegistryRequestParams = z.infer<\n typeof ListMcpRegistryRequestParamsSchema\n>;\n\n/** Parameters for droid.list_mcp_tools request (empty). */\nexport const ListMcpToolsRequestParamsSchema = z.object({}).strict();\n\nexport type ListMcpToolsRequestParams = z.infer<\n typeof ListMcpToolsRequestParamsSchema\n>;\n\n/** Parameters for droid.list_mcp_servers request (empty). */\nexport const ListMcpServersRequestParamsSchema = z.object({}).strict();\n\nexport type ListMcpServersRequestParams = z.infer<\n typeof ListMcpServersRequestParamsSchema\n>;\n\n/** Parameters for droid.toggle_mcp_tool request. */\nexport const ToggleMcpToolRequestParamsSchema = z\n .object({\n serverName: z.string(),\n toolName: z.string(),\n enabled: z.boolean(),\n })\n .strict();\n\nexport type ToggleMcpToolRequestParams = z.infer<\n typeof ToggleMcpToolRequestParamsSchema\n>;\n\n/** Parameters for droid.list_skills request (empty). */\nexport const ListSkillsRequestParamsSchema = z.object({}).strict();\n\nexport type ListSkillsRequestParams = z.infer<\n typeof ListSkillsRequestParamsSchema\n>;\n\n/** Parameters for droid.submit_bug_report request. */\nexport const SubmitBugReportRequestParamsSchema = z\n .object({\n userComment: z.string(),\n clientLogs: z.string().optional(),\n })\n .strict();\n\nexport type SubmitBugReportRequestParams = z.infer<\n typeof SubmitBugReportRequestParamsSchema\n>;\n\n// ---------------------------------------------------------------------------\n// Full request schemas (JsonRpcRequest + method literal + typed params)\n// ---------------------------------------------------------------------------\n\nexport const InitializeSessionRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.INITIALIZE_SESSION),\n params: InitializeSessionRequestParamsSchema,\n});\n\nexport type InitializeSessionRequest = z.infer<typeof InitializeSessionRequestSchema>;\n\nexport const LoadSessionRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.LOAD_SESSION),\n params: LoadSessionRequestParamsSchema,\n});\n\nexport type LoadSessionRequest = z.infer<typeof LoadSessionRequestSchema>;\n\nexport const AddUserMessageRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.ADD_USER_MESSAGE),\n params: AddUserMessageRequestParamsSchema,\n});\n\nexport type AddUserMessageRequest = z.infer<typeof AddUserMessageRequestSchema>;\n\nexport const InterruptSessionRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.INTERRUPT_SESSION),\n params: InterruptSessionRequestParamsSchema,\n});\n\nexport type InterruptSessionRequest = z.infer<typeof InterruptSessionRequestSchema>;\n\nexport const KillWorkerSessionRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.KILL_WORKER_SESSION),\n params: KillWorkerSessionRequestParamsSchema,\n});\n\nexport type KillWorkerSessionRequest = z.infer<typeof KillWorkerSessionRequestSchema>;\n\nexport const UpdateSessionSettingsRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.UPDATE_SESSION_SETTINGS),\n params: UpdateSessionSettingsRequestParamsSchema,\n});\n\nexport type UpdateSessionSettingsRequest = z.infer<typeof UpdateSessionSettingsRequestSchema>;\n\nexport const ToggleMcpServerRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.TOGGLE_MCP_SERVER),\n params: ToggleMcpServerRequestParamsSchema,\n});\n\nexport type ToggleMcpServerRequest = z.infer<typeof ToggleMcpServerRequestSchema>;\n\nexport const AuthenticateMcpServerRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.AUTHENTICATE_MCP_SERVER),\n params: AuthenticateMcpServerRequestParamsSchema,\n});\n\nexport type AuthenticateMcpServerRequest = z.infer<typeof AuthenticateMcpServerRequestSchema>;\n\nexport const CancelMcpAuthRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.CANCEL_MCP_AUTH),\n params: CancelMcpAuthRequestParamsSchema,\n});\n\nexport type CancelMcpAuthRequest = z.infer<typeof CancelMcpAuthRequestSchema>;\n\nexport const ClearMcpAuthRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.CLEAR_MCP_AUTH),\n params: ClearMcpAuthRequestParamsSchema,\n});\n\nexport type ClearMcpAuthRequest = z.infer<typeof ClearMcpAuthRequestSchema>;\n\nexport const SubmitMcpAuthCodeRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.SUBMIT_MCP_AUTH_CODE),\n params: SubmitMcpAuthCodeRequestParamsSchema,\n});\n\nexport type SubmitMcpAuthCodeRequest = z.infer<typeof SubmitMcpAuthCodeRequestSchema>;\n\nexport const AddMcpServerRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.ADD_MCP_SERVER),\n params: AddMcpServerRequestParamsSchema,\n});\n\nexport type AddMcpServerRequest = z.infer<typeof AddMcpServerRequestSchema>;\n\nexport const RemoveMcpServerRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.REMOVE_MCP_SERVER),\n params: RemoveMcpServerRequestParamsSchema,\n});\n\nexport type RemoveMcpServerRequest = z.infer<typeof RemoveMcpServerRequestSchema>;\n\nexport const ListMcpRegistryRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.LIST_MCP_REGISTRY),\n params: ListMcpRegistryRequestParamsSchema,\n});\n\nexport type ListMcpRegistryRequest = z.infer<typeof ListMcpRegistryRequestSchema>;\n\nexport const ListMcpToolsRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.LIST_MCP_TOOLS),\n params: ListMcpToolsRequestParamsSchema,\n});\n\nexport type ListMcpToolsRequest = z.infer<typeof ListMcpToolsRequestSchema>;\n\nexport const ListMcpServersRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.LIST_MCP_SERVERS),\n params: ListMcpServersRequestParamsSchema,\n});\n\nexport type ListMcpServersRequest = z.infer<typeof ListMcpServersRequestSchema>;\n\nexport const ToggleMcpToolRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.TOGGLE_MCP_TOOL),\n params: ToggleMcpToolRequestParamsSchema,\n});\n\nexport type ToggleMcpToolRequest = z.infer<typeof ToggleMcpToolRequestSchema>;\n\nexport const ListSkillsRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.LIST_SKILLS),\n params: ListSkillsRequestParamsSchema,\n});\n\nexport type ListSkillsRequest = z.infer<typeof ListSkillsRequestSchema>;\n\nexport const SubmitBugReportRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.SUBMIT_BUG_REPORT),\n params: SubmitBugReportRequestParamsSchema,\n});\n\nexport type SubmitBugReportRequest = z.infer<typeof SubmitBugReportRequestSchema>;\n\n/** Discriminated union over all 19 client→server request types. */\nexport const ClientRequestSchema = z.discriminatedUnion(\"method\", [\n InitializeSessionRequestSchema,\n LoadSessionRequestSchema,\n AddUserMessageRequestSchema,\n InterruptSessionRequestSchema,\n KillWorkerSessionRequestSchema,\n UpdateSessionSettingsRequestSchema,\n ToggleMcpServerRequestSchema,\n AuthenticateMcpServerRequestSchema,\n CancelMcpAuthRequestSchema,\n ClearMcpAuthRequestSchema,\n SubmitMcpAuthCodeRequestSchema,\n AddMcpServerRequestSchema,\n RemoveMcpServerRequestSchema,\n ListMcpRegistryRequestSchema,\n ListMcpToolsRequestSchema,\n ListMcpServersRequestSchema,\n ToggleMcpToolRequestSchema,\n ListSkillsRequestSchema,\n SubmitBugReportRequestSchema,\n]);\n\nexport type ClientRequest = z.infer<typeof ClientRequestSchema>;\n\n// ---------------------------------------------------------------------------\n// Result schemas (all use passthrough for forward-compatibility)\n// ---------------------------------------------------------------------------\n\n/** Mission state snapshot (for orchestrator sessions). */\nexport const MissionSnapshotSchema = z\n .object({\n state: z.nativeEnum(MissionState),\n features: z.array(MissionFeatureSchema),\n progressLog: z.array(ProgressLogEntrySchema),\n workerSessionIds: z.array(z.string()),\n workerStates: z.record(WorkerStateInfoSchema).optional(),\n tokenUsage: TokenUsageSchema.optional(),\n tokenUsageBySessionId: z.record(TokenUsageSchema).optional(),\n })\n .passthrough();\n\nexport type MissionSnapshot = z.infer<typeof MissionSnapshotSchema>;\n\n/** Result for droid.initialize_session response. */\nexport const InitializeSessionResultSchema = z\n .object({\n sessionId: z.string(),\n session: z.record(z.unknown()),\n mcpServers: z.array(McpServerConfigSchema).optional(),\n settings: SessionSettingsSchema,\n gitRepo: GitRepoInfoSchema.optional(),\n availableModels: z.array(AvailableModelConfigSchema).optional(),\n })\n .passthrough();\n\nexport type InitializeSessionResult = z.infer<\n typeof InitializeSessionResultSchema\n>;\n\n/** Result for droid.load_session response. */\nexport const LoadSessionResultSchema = z\n .object({\n session: z.record(z.unknown()),\n mcpServers: z.array(McpServerConfigSchema).optional(),\n pendingPermissions: z.array(z.record(z.unknown())).optional(),\n pendingAskUserRequests: z.array(z.record(z.unknown())).optional(),\n settings: SessionSettingsSchema,\n isAgentLoopInProgress: z.boolean().optional(),\n queuedMessages: z.array(z.record(z.unknown())).optional(),\n gitRepo: GitRepoInfoSchema.optional(),\n cwd: z.string().optional(),\n callingSessionId: z.string().optional(),\n callingToolUseId: z.string().optional(),\n availableModels: z.array(AvailableModelConfigSchema).optional(),\n tokenUsage: TokenUsageSchema.optional(),\n mission: MissionSnapshotSchema.optional(),\n decompSessionType: z.nativeEnum(DecompSessionType).optional(),\n })\n .passthrough();\n\nexport type LoadSessionResult = z.infer<typeof LoadSessionResultSchema>;\n\n/** Result for droid.add_user_message response (empty). */\nexport const AddUserMessageResultSchema = z.object({}).passthrough();\n\nexport type AddUserMessageResult = z.infer<typeof AddUserMessageResultSchema>;\n\n/** Result for droid.interrupt_session response (empty). */\nexport const InterruptSessionResultSchema = z.object({}).passthrough();\n\nexport type InterruptSessionResult = z.infer<\n typeof InterruptSessionResultSchema\n>;\n\n/** Result for droid.kill_worker_session response (empty). */\nexport const KillWorkerSessionResultSchema = z.object({}).passthrough();\n\nexport type KillWorkerSessionResult = z.infer<\n typeof KillWorkerSessionResultSchema\n>;\n\n/** Result for droid.update_session_settings response (empty). */\nexport const UpdateSessionSettingsResultSchema = z.object({}).passthrough();\n\nexport type UpdateSessionSettingsResult = z.infer<\n typeof UpdateSessionSettingsResultSchema\n>;\n\n/** Result for droid.toggle_mcp_server response. */\nexport const ToggleMcpServerResultSchema = z\n .object({ success: z.boolean() })\n .passthrough();\n\nexport type ToggleMcpServerResult = z.infer<typeof ToggleMcpServerResultSchema>;\n\n/** Result for droid.authenticate_mcp_server response. */\nexport const AuthenticateMcpServerResultSchema = z\n .object({ success: z.boolean() })\n .passthrough();\n\nexport type AuthenticateMcpServerResult = z.infer<\n typeof AuthenticateMcpServerResultSchema\n>;\n\n/** Result for droid.cancel_mcp_auth response. */\nexport const CancelMcpAuthResultSchema = z\n .object({ success: z.boolean() })\n .passthrough();\n\nexport type CancelMcpAuthResult = z.infer<typeof CancelMcpAuthResultSchema>;\n\n/** Result for droid.clear_mcp_auth response. */\nexport const ClearMcpAuthResultSchema = z\n .object({ success: z.boolean() })\n .passthrough();\n\nexport type ClearMcpAuthResult = z.infer<typeof ClearMcpAuthResultSchema>;\n\n/** Result for droid.submit_mcp_auth_code response. */\nexport const SubmitMcpAuthCodeResultSchema = z\n .object({ success: z.boolean() })\n .passthrough();\n\nexport type SubmitMcpAuthCodeResult = z.infer<\n typeof SubmitMcpAuthCodeResultSchema\n>;\n\n/** Result for droid.add_mcp_server response. */\nexport const AddMcpServerResultSchema = z\n .object({ success: z.boolean() })\n .passthrough();\n\nexport type AddMcpServerResult = z.infer<typeof AddMcpServerResultSchema>;\n\n/** Result for droid.remove_mcp_server response. */\nexport const RemoveMcpServerResultSchema = z\n .object({ success: z.boolean() })\n .passthrough();\n\nexport type RemoveMcpServerResult = z.infer<typeof RemoveMcpServerResultSchema>;\n\n/** Result for droid.list_mcp_registry response. */\nexport const ListMcpRegistryResultSchema = z\n .object({ servers: z.array(McpRegistryServerSchema) })\n .passthrough();\n\nexport type ListMcpRegistryResult = z.infer<typeof ListMcpRegistryResultSchema>;\n\n/** Result for droid.list_mcp_tools response. */\nexport const ListMcpToolsResultSchema = z\n .object({ tools: z.array(McpToolInfoSchema) })\n .passthrough();\n\nexport type ListMcpToolsResult = z.infer<typeof ListMcpToolsResultSchema>;\n\n/** Result for droid.list_mcp_servers response. */\nexport const ListMcpServersResultSchema = z\n .object({\n servers: z.array(McpServerStatusInfoSchema),\n summary: McpStatusSummarySchema,\n })\n .passthrough();\n\nexport type ListMcpServersResult = z.infer<typeof ListMcpServersResultSchema>;\n\n/** Result for droid.toggle_mcp_tool response. */\nexport const ToggleMcpToolResultSchema = z\n .object({ success: z.boolean() })\n .passthrough();\n\nexport type ToggleMcpToolResult = z.infer<typeof ToggleMcpToolResultSchema>;\n\n/** Result for droid.list_skills response. */\nexport const ListSkillsResultSchema = z\n .object({ skills: z.array(SkillInfoSchema) })\n .passthrough();\n\nexport type ListSkillsResult = z.infer<typeof ListSkillsResultSchema>;\n\n/** Result for droid.submit_bug_report response. */\nexport const SubmitBugReportResultSchema = z\n .object({ bugReportId: z.string() })\n .passthrough();\n\nexport type SubmitBugReportResult = z.infer<typeof SubmitBugReportResultSchema>;\n\n// ---------------------------------------------------------------------------\n// Response schemas (union of success | failure)\n// ---------------------------------------------------------------------------\n\nexport const InitializeSessionResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({\n result: InitializeSessionResultSchema,\n }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type InitializeSessionResponse = z.infer<typeof InitializeSessionResponseSchema>;\n\n/** Concrete type for LoadSessionResponse (avoids TS7056 deep inference). */\nexport type LoadSessionResponse =\n | (Omit<z.infer<typeof JsonRpcResponseSuccessSchema>, \"result\"> & { result: LoadSessionResult })\n | JsonRpcResponseFailure;\n\nconst _LoadSessionResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: LoadSessionResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport const LoadSessionResponseSchema: z.ZodType<\n LoadSessionResponse,\n z.ZodTypeDef,\n unknown\n> = _LoadSessionResponseSchema as z.ZodType<LoadSessionResponse, z.ZodTypeDef, unknown>;\n\nexport const AddUserMessageResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: AddUserMessageResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type AddUserMessageResponse = z.infer<typeof AddUserMessageResponseSchema>;\n\nexport const InterruptSessionResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({\n result: InterruptSessionResultSchema,\n }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type InterruptSessionResponse = z.infer<typeof InterruptSessionResponseSchema>;\n\nexport const KillWorkerSessionResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({\n result: KillWorkerSessionResultSchema,\n }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type KillWorkerSessionResponse = z.infer<typeof KillWorkerSessionResponseSchema>;\n\nexport const UpdateSessionSettingsResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({\n result: UpdateSessionSettingsResultSchema,\n }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type UpdateSessionSettingsResponse = z.infer<typeof UpdateSessionSettingsResponseSchema>;\n\nexport const ToggleMcpServerResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({\n result: ToggleMcpServerResultSchema,\n }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type ToggleMcpServerResponse = z.infer<typeof ToggleMcpServerResponseSchema>;\n\nexport const AuthenticateMcpServerResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({\n result: AuthenticateMcpServerResultSchema,\n }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type AuthenticateMcpServerResponse = z.infer<typeof AuthenticateMcpServerResponseSchema>;\n\nexport const CancelMcpAuthResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: CancelMcpAuthResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type CancelMcpAuthResponse = z.infer<typeof CancelMcpAuthResponseSchema>;\n\nexport const ClearMcpAuthResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: ClearMcpAuthResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type ClearMcpAuthResponse = z.infer<typeof ClearMcpAuthResponseSchema>;\n\nexport const SubmitMcpAuthCodeResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({\n result: SubmitMcpAuthCodeResultSchema,\n }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type SubmitMcpAuthCodeResponse = z.infer<typeof SubmitMcpAuthCodeResponseSchema>;\n\nexport const AddMcpServerResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: AddMcpServerResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type AddMcpServerResponse = z.infer<typeof AddMcpServerResponseSchema>;\n\nexport const RemoveMcpServerResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: RemoveMcpServerResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type RemoveMcpServerResponse = z.infer<typeof RemoveMcpServerResponseSchema>;\n\nexport const ListMcpRegistryResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({\n result: ListMcpRegistryResultSchema,\n }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type ListMcpRegistryResponse = z.infer<typeof ListMcpRegistryResponseSchema>;\n\nexport const ListMcpToolsResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: ListMcpToolsResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type ListMcpToolsResponse = z.infer<typeof ListMcpToolsResponseSchema>;\n\nexport const ListMcpServersResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: ListMcpServersResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type ListMcpServersResponse = z.infer<typeof ListMcpServersResponseSchema>;\n\nexport const ToggleMcpToolResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: ToggleMcpToolResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type ToggleMcpToolResponse = z.infer<typeof ToggleMcpToolResponseSchema>;\n\nexport const ListSkillsResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: ListSkillsResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type ListSkillsResponse = z.infer<typeof ListSkillsResponseSchema>;\n\nexport const SubmitBugReportResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: SubmitBugReportResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type SubmitBugReportResponse = z.infer<typeof SubmitBugReportResponseSchema>;\n","/**\n * Server→client schemas: notification payloads, permission requests, and ask-user requests.\n *\n * Ported from: packages/common/src/droid/schemas/cli.ts\n */\n\nimport { z } from \"zod\";\n\nimport { TokenUsageSchema } from \"./client.js\";\nimport {\n AutonomyLevel,\n AutonomyMode,\n DroidClientMethod,\n DroidErrorType,\n DroidInteractionMode,\n DroidWorkingState,\n McpAuthOutcome,\n MissionState,\n ReasoningEffort,\n SessionNotificationType,\n ToolConfirmationOutcome,\n ToolConfirmationType,\n} from \"./enums.js\";\nimport { FactoryDroidMessageSchema } from \"./messages.js\";\nimport {\n McpServerStatusInfoSchema,\n McpStatusSummarySchema,\n ToolConfirmationListItemSchema,\n} from \"./mcp.js\";\nimport { MissionFeatureSchema, ProgressLogEntrySchema } from \"./mission.js\";\nimport {\n JsonRpcNotificationSchema,\n JsonRpcRequestSchema,\n JsonRpcResponseFailureSchema,\n JsonRpcResponseSuccessSchema,\n} from \"./shared.js\";\n\n// ---------------------------------------------------------------------------\n// Supporting types for notification payloads\n// ---------------------------------------------------------------------------\n\n/** Tool use block (from ToolUseSchema in sessionV2/messages). */\nexport const ToolUseSchema = z\n .object({\n type: z.literal(\"tool_use\"),\n id: z.string(),\n input: z.record(z.unknown()),\n name: z.string(),\n thoughtSignature: z.string().optional(),\n })\n .passthrough();\n\nexport type ToolUse = z.infer<typeof ToolUseSchema>;\n\n/** Error detail object within an ErrorNotification. */\nexport const ErrorDetailSchema = z\n .object({\n name: z.string(),\n message: z.string(),\n })\n .passthrough();\n\nexport type ErrorDetail = z.infer<typeof ErrorDetailSchema>;\n\n/** Streaming update from subagent tool calls. */\nexport const ToolProgressUpdateSchema = z\n .object({\n type: z.enum([\"tool_call\", \"tool_result\", \"error\", \"status\", \"message\"]),\n toolName: z.string().optional(),\n status: z.string().optional(),\n details: z.string().optional(),\n text: z.string().optional(),\n error: z.string().optional(),\n timestamp: z.number().optional(),\n parameters: z.record(z.unknown()).optional(),\n valueSnippet: z.string().optional(),\n subagentSessionId: z.string().optional(),\n })\n .passthrough();\n\nexport type ToolProgressUpdate = z.infer<typeof ToolProgressUpdateSchema>;\n\n/** Settings payload within SettingsUpdatedNotification. */\nexport const SettingsUpdatedPayloadSchema = z\n .object({\n autonomyMode: z.nativeEnum(AutonomyMode).optional(),\n interactionMode: z.nativeEnum(DroidInteractionMode).optional().catch(undefined),\n autonomyLevel: z.nativeEnum(AutonomyLevel).optional().catch(undefined),\n modelId: z.string().optional(),\n reasoningEffort: z.nativeEnum(ReasoningEffort).optional(),\n specModeModelId: z.string().optional(),\n specModeReasoningEffort: z.nativeEnum(ReasoningEffort).optional(),\n })\n .passthrough();\n\nexport type SettingsUpdatedPayload = z.infer<\n typeof SettingsUpdatedPayloadSchema\n>;\n\n// ---------------------------------------------------------------------------\n// 20 notification payload types\n// ---------------------------------------------------------------------------\n\n/** Tool result notification. */\nexport const ToolResultNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.TOOL_RESULT),\n messageId: z.string(),\n toolUseId: z.string(),\n content: z.unknown().optional(),\n isError: z.boolean().optional(),\n id: z.string().optional(),\n })\n .passthrough();\n\nexport type ToolResultNotification = z.infer<\n typeof ToolResultNotificationSchema\n>;\n\n/** Tool progress update notification. */\nexport const ToolProgressUpdateNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.TOOL_PROGRESS_UPDATE),\n toolUseId: z.string(),\n toolName: z.string(),\n update: ToolProgressUpdateSchema,\n })\n .passthrough();\n\nexport type ToolProgressUpdateNotification = z.infer<\n typeof ToolProgressUpdateNotificationSchema\n>;\n\n/** Create message notification. */\nexport const CreateMessageNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.CREATE_MESSAGE),\n message: FactoryDroidMessageSchema,\n parentId: z.string().optional(),\n requestId: z.string().optional(),\n })\n .passthrough();\n\nexport type CreateMessageNotification = z.infer<\n typeof CreateMessageNotificationSchema\n>;\n\n/** Error notification. */\nexport const ErrorNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.ERROR),\n message: z.string(),\n errorType: z.nativeEnum(DroidErrorType),\n timestamp: z.string(),\n error: ErrorDetailSchema.optional(),\n })\n .passthrough();\n\nexport type ErrorNotification = z.infer<typeof ErrorNotificationSchema>;\n\n/** Droid working state changed notification. */\nexport const DroidWorkingStateChangedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.DROID_WORKING_STATE_CHANGED),\n newState: z.nativeEnum(DroidWorkingState),\n })\n .passthrough();\n\nexport type DroidWorkingStateChangedNotification = z.infer<\n typeof DroidWorkingStateChangedNotificationSchema\n>;\n\n/** Permission resolved notification. */\nexport const PermissionResolvedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.PERMISSION_RESOLVED),\n requestId: z.string(),\n toolUseIds: z.array(z.string()),\n selectedOption: z.nativeEnum(ToolConfirmationOutcome),\n })\n .passthrough();\n\nexport type PermissionResolvedNotification = z.infer<\n typeof PermissionResolvedNotificationSchema\n>;\n\n/** Settings updated notification. */\nexport const SettingsUpdatedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.SETTINGS_UPDATED),\n settings: SettingsUpdatedPayloadSchema,\n })\n .passthrough();\n\nexport type SettingsUpdatedNotification = z.infer<\n typeof SettingsUpdatedNotificationSchema\n>;\n\n/** Session title updated notification. */\nexport const SessionTitleUpdatedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.SESSION_TITLE_UPDATED),\n title: z.string(),\n })\n .passthrough();\n\nexport type SessionTitleUpdatedNotification = z.infer<\n typeof SessionTitleUpdatedNotificationSchema\n>;\n\n/** MCP status changed notification. */\nexport const McpStatusChangedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.MCP_STATUS_CHANGED),\n servers: z.array(McpServerStatusInfoSchema),\n summary: McpStatusSummarySchema,\n })\n .passthrough();\n\nexport type McpStatusChangedNotification = z.infer<\n typeof McpStatusChangedNotificationSchema\n>;\n\n/** Assistant text delta notification (streaming token). */\nexport const AssistantTextDeltaNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.ASSISTANT_TEXT_DELTA),\n messageId: z.string(),\n blockIndex: z.number(),\n textDelta: z.string(),\n })\n .passthrough();\n\nexport type AssistantTextDeltaNotification = z.infer<\n typeof AssistantTextDeltaNotificationSchema\n>;\n\n/** Thinking text delta notification (streaming thinking token). */\nexport const ThinkingTextDeltaNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.THINKING_TEXT_DELTA),\n messageId: z.string(),\n blockIndex: z.number(),\n textDelta: z.string(),\n })\n .passthrough();\n\nexport type ThinkingTextDeltaNotification = z.infer<\n typeof ThinkingTextDeltaNotificationSchema\n>;\n\n/** Session token usage changed notification. */\nexport const SessionTokenUsageChangedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.SESSION_TOKEN_USAGE_CHANGED),\n sessionId: z.string(),\n tokenUsage: TokenUsageSchema,\n })\n .passthrough();\n\nexport type SessionTokenUsageChangedNotification = z.infer<\n typeof SessionTokenUsageChangedNotificationSchema\n>;\n\n/** Mission state changed notification. */\nexport const MissionStateChangedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.MISSION_STATE_CHANGED),\n state: z.nativeEnum(MissionState),\n })\n .passthrough();\n\nexport type MissionStateChangedNotification = z.infer<\n typeof MissionStateChangedNotificationSchema\n>;\n\n/** Mission features changed notification. */\nexport const MissionFeaturesChangedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.MISSION_FEATURES_CHANGED),\n features: z.array(MissionFeatureSchema),\n })\n .passthrough();\n\nexport type MissionFeaturesChangedNotification = z.infer<\n typeof MissionFeaturesChangedNotificationSchema\n>;\n\n/** Mission progress entry notification. */\nexport const MissionProgressEntryNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.MISSION_PROGRESS_ENTRY),\n progressLog: z.array(ProgressLogEntrySchema),\n })\n .passthrough();\n\nexport type MissionProgressEntryNotification = z.infer<\n typeof MissionProgressEntryNotificationSchema\n>;\n\n/** Mission heartbeat notification. */\nexport const MissionHeartbeatNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.MISSION_HEARTBEAT),\n timestamp: z.string(),\n })\n .passthrough();\n\nexport type MissionHeartbeatNotification = z.infer<\n typeof MissionHeartbeatNotificationSchema\n>;\n\n/** Mission worker started notification. */\nexport const MissionWorkerStartedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.MISSION_WORKER_STARTED),\n workerSessionId: z.string(),\n })\n .passthrough();\n\nexport type MissionWorkerStartedNotification = z.infer<\n typeof MissionWorkerStartedNotificationSchema\n>;\n\n/** Mission worker completed notification. */\nexport const MissionWorkerCompletedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.MISSION_WORKER_COMPLETED),\n workerSessionId: z.string(),\n exitCode: z.number(),\n })\n .passthrough();\n\nexport type MissionWorkerCompletedNotification = z.infer<\n typeof MissionWorkerCompletedNotificationSchema\n>;\n\n/** MCP authentication required notification. */\nexport const McpAuthRequiredNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.MCP_AUTH_REQUIRED),\n serverName: z.string(),\n authUrl: z.string(),\n message: z.string(),\n state: z.string(),\n })\n .passthrough();\n\nexport type McpAuthRequiredNotification = z.infer<\n typeof McpAuthRequiredNotificationSchema\n>;\n\n/** MCP authentication completed notification. */\nexport const McpAuthCompletedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.MCP_AUTH_COMPLETED),\n serverName: z.string(),\n outcome: z.nativeEnum(McpAuthOutcome),\n message: z.string(),\n })\n .passthrough();\n\nexport type McpAuthCompletedNotification = z.infer<\n typeof McpAuthCompletedNotificationSchema\n>;\n\n// ---------------------------------------------------------------------------\n// SessionNotification discriminated union\n// ---------------------------------------------------------------------------\n\n/** List of all session notification schemas (for discriminatedUnion). */\nexport const SessionNotificationSchemaList = [\n ToolResultNotificationSchema,\n ToolProgressUpdateNotificationSchema,\n CreateMessageNotificationSchema,\n ErrorNotificationSchema,\n DroidWorkingStateChangedNotificationSchema,\n PermissionResolvedNotificationSchema,\n SettingsUpdatedNotificationSchema,\n SessionTitleUpdatedNotificationSchema,\n McpStatusChangedNotificationSchema,\n AssistantTextDeltaNotificationSchema,\n ThinkingTextDeltaNotificationSchema,\n SessionTokenUsageChangedNotificationSchema,\n MissionStateChangedNotificationSchema,\n MissionFeaturesChangedNotificationSchema,\n MissionProgressEntryNotificationSchema,\n MissionHeartbeatNotificationSchema,\n MissionWorkerStartedNotificationSchema,\n MissionWorkerCompletedNotificationSchema,\n McpAuthRequiredNotificationSchema,\n McpAuthCompletedNotificationSchema,\n] as const;\n\n/** Discriminated union over all 20 session notification types. */\nexport const SessionNotificationPayloadSchema = z.discriminatedUnion(\n \"type\",\n SessionNotificationSchemaList,\n);\n\nexport type SessionNotificationPayload = z.infer<\n typeof SessionNotificationPayloadSchema\n>;\n\n/** Parameters for session notification (wraps the discriminated union). */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const SessionNotificationParamsSchema: z.ZodType<any> = z\n .object({\n notification: SessionNotificationPayloadSchema,\n })\n .passthrough();\n\nexport type SessionNotificationParams = {\n notification: SessionNotificationPayload;\n [key: string]: unknown;\n};\n\n/** Full session notification with JSON-RPC envelope. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const SessionNotificationSchema: z.ZodType<any> =\n JsonRpcNotificationSchema.extend({\n method: z.literal(DroidClientMethod.SESSION_NOTIFICATION),\n params: SessionNotificationParamsSchema,\n });\n\nexport type SessionNotification = z.output<typeof JsonRpcNotificationSchema> & {\n method: \"droid.session_notification\";\n params: SessionNotificationParams;\n};\n\n// ---------------------------------------------------------------------------\n// Tool confirmation details\n// ---------------------------------------------------------------------------\n\nexport const EditToolConfirmationDetailsSchema = z\n .object({\n type: z.literal(ToolConfirmationType.Edit),\n filePath: z.string(),\n fileName: z.string(),\n oldContent: z.string().optional(),\n newContent: z.string().optional(),\n })\n .passthrough();\n\nexport type EditToolConfirmationDetails = z.infer<\n typeof EditToolConfirmationDetailsSchema\n>;\n\nexport const ExecuteToolConfirmationDetailsSchema = z\n .object({\n type: z.literal(ToolConfirmationType.Execute),\n fullCommand: z.string(),\n command: z.string(),\n extractedCommands: z.array(z.string()).optional(),\n impactLevel: z.string().optional(),\n })\n .passthrough();\n\nexport type ExecuteToolConfirmationDetails = z.infer<\n typeof ExecuteToolConfirmationDetailsSchema\n>;\n\nexport const CreateToolConfirmationDetailsSchema = z\n .object({\n type: z.literal(ToolConfirmationType.Create),\n filePath: z.string(),\n fileName: z.string(),\n content: z.string(),\n })\n .passthrough();\n\nexport type CreateToolConfirmationDetails = z.infer<\n typeof CreateToolConfirmationDetailsSchema\n>;\n\nexport const AskUserQuestionSchema = z\n .object({\n index: z.number(),\n topic: z.string(),\n question: z.string(),\n options: z.array(z.string()),\n })\n .passthrough();\n\nexport type AskUserQuestion = z.infer<typeof AskUserQuestionSchema>;\n\nexport const AskUserConfirmationDetailsSchema = z\n .object({\n type: z.literal(ToolConfirmationType.AskUser),\n questionnaire: z.string(),\n parsed: z\n .object({\n questions: z.array(AskUserQuestionSchema),\n })\n .optional(),\n parseError: z\n .object({\n message: z.string(),\n line: z.number().optional(),\n })\n .optional(),\n })\n .passthrough();\n\nexport type AskUserConfirmationDetails = z.infer<\n typeof AskUserConfirmationDetailsSchema\n>;\n\nexport const ExitSpecModeConfirmationDetailsSchema = z\n .object({\n type: z.literal(ToolConfirmationType.ExitSpecMode),\n plan: z.string(),\n title: z.string().optional(),\n optionNames: z.array(z.string()).optional(),\n })\n .passthrough();\n\nexport type ExitSpecModeConfirmationDetails = z.infer<\n typeof ExitSpecModeConfirmationDetailsSchema\n>;\n\nexport const ProposeMissionConfirmationDetailsSchema = z\n .object({\n type: z.literal(ToolConfirmationType.ProposeMission),\n proposal: z.string(),\n title: z.string().optional(),\n })\n .passthrough();\n\nexport type ProposeMissionConfirmationDetails = z.infer<\n typeof ProposeMissionConfirmationDetailsSchema\n>;\n\nexport const StartMissionRunConfirmationDetailsSchema = z\n .object({\n type: z.literal(ToolConfirmationType.StartMissionRun),\n runningMissionCount: z.number(),\n runningMissionSessionIds: z.array(z.string()),\n })\n .passthrough();\n\nexport type StartMissionRunConfirmationDetails = z.infer<\n typeof StartMissionRunConfirmationDetailsSchema\n>;\n\nexport const ApplyPatchToolConfirmationDetailsSchema = z\n .object({\n type: z.literal(ToolConfirmationType.ApplyPatch),\n filePath: z.string(),\n fileName: z.string(),\n patchContent: z.string(),\n oldContent: z.string().optional(),\n newContent: z.string().optional(),\n })\n .passthrough();\n\nexport type ApplyPatchToolConfirmationDetails = z.infer<\n typeof ApplyPatchToolConfirmationDetailsSchema\n>;\n\nexport const McpToolConfirmationDetailsSchema = z\n .object({\n type: z.literal(ToolConfirmationType.McpTool),\n toolName: z.string(),\n impactLevel: z.string(),\n })\n .passthrough();\n\nexport type McpToolConfirmationDetails = z.infer<\n typeof McpToolConfirmationDetailsSchema\n>;\n\n/** Discriminated union over tool confirmation detail types. */\nexport const ToolConfirmationDetailsSchema = z.discriminatedUnion(\"type\", [\n EditToolConfirmationDetailsSchema,\n ExecuteToolConfirmationDetailsSchema,\n CreateToolConfirmationDetailsSchema,\n AskUserConfirmationDetailsSchema,\n ExitSpecModeConfirmationDetailsSchema,\n ProposeMissionConfirmationDetailsSchema,\n StartMissionRunConfirmationDetailsSchema,\n ApplyPatchToolConfirmationDetailsSchema,\n McpToolConfirmationDetailsSchema,\n]);\n\nexport type ToolConfirmationDetails = z.infer<\n typeof ToolConfirmationDetailsSchema\n>;\n\n/** Tool confirmation information (toolUse + confirmationType + details). */\nexport const ToolConfirmationInfoSchema = z\n .object({\n toolUse: ToolUseSchema,\n confirmationType: z.nativeEnum(ToolConfirmationType),\n details: ToolConfirmationDetailsSchema,\n })\n .passthrough();\n\nexport type ToolConfirmationInfo = z.infer<typeof ToolConfirmationInfoSchema>;\n\n// ---------------------------------------------------------------------------\n// RequestPermissionRequest (server → client)\n// ---------------------------------------------------------------------------\n\n/** Parameters for droid.request_permission request. */\nexport const RequestPermissionRequestParamsSchema = z\n .object({\n toolUses: z.array(ToolConfirmationInfoSchema),\n options: z.array(ToolConfirmationListItemSchema),\n })\n .passthrough();\n\nexport type RequestPermissionRequestParams = z.infer<\n typeof RequestPermissionRequestParamsSchema\n>;\n\n/** Request for permission from the server (server → client). */\nexport const RequestPermissionRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidClientMethod.REQUEST_PERMISSION),\n params: RequestPermissionRequestParamsSchema,\n});\n\nexport type RequestPermissionRequest = z.infer<\n typeof RequestPermissionRequestSchema\n>;\n\n/** Result for droid.request_permission response. */\nexport const RequestPermissionResultSchema = z\n .object({\n selectedOption: z.nativeEnum(ToolConfirmationOutcome),\n })\n .strict();\n\nexport type RequestPermissionResult = z.infer<\n typeof RequestPermissionResultSchema\n>;\n\n/** Response to droid.request_permission. */\nexport const RequestPermissionResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({\n result: RequestPermissionResultSchema,\n }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type RequestPermissionResponse = z.infer<\n typeof RequestPermissionResponseSchema\n>;\n\n// ---------------------------------------------------------------------------\n// AskUserRequest (server → client)\n// ---------------------------------------------------------------------------\n\n/** Parameters for droid.ask_user request. */\nexport const AskUserRequestParamsSchema = z\n .object({\n toolCallId: z.string(),\n questions: z.array(AskUserQuestionSchema),\n })\n .passthrough();\n\nexport type AskUserRequestParams = z.infer<typeof AskUserRequestParamsSchema>;\n\n/** Ask user request from the server (server → client). */\nexport const AskUserRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidClientMethod.ASK_USER),\n params: AskUserRequestParamsSchema,\n});\n\nexport type AskUserRequest = z.infer<typeof AskUserRequestSchema>;\n\n/** A collected answer from the user. */\nexport const AskUserCollectedAnswerSchema = z\n .object({\n index: z.number(),\n question: z.string(),\n answer: z.string(),\n })\n .strict();\n\nexport type AskUserCollectedAnswer = z.infer<\n typeof AskUserCollectedAnswerSchema\n>;\n\n/** Result for droid.ask_user response. */\nexport const AskUserResultSchema = z\n .object({\n cancelled: z.boolean().optional(),\n answers: z.array(AskUserCollectedAnswerSchema),\n })\n .strict();\n\nexport type AskUserResult = z.infer<typeof AskUserResultSchema>;\n\n/** Response to droid.ask_user. */\nexport const AskUserResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: AskUserResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type AskUserResponse = z.infer<typeof AskUserResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// CliRequestOrNotification discriminated union\n// ---------------------------------------------------------------------------\n\n/** Union over all 3 server → client methods. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const CliRequestOrNotificationSchema: z.ZodType<any> = z.union([\n SessionNotificationSchema,\n RequestPermissionRequestSchema,\n AskUserRequestSchema,\n]);\n\nexport type CliRequestOrNotification =\n | SessionNotification\n | RequestPermissionRequest\n | AskUserRequest;\n","/**\n * Error class hierarchy for the Factory Droid SDK.\n *\n * All SDK errors extend Error directly (no MetaError dependency).\n * Each error class sets its `name` property to the class name for\n * reliable `instanceof` checks and readable stack traces.\n */\n\n/**\n * Raised when a connection to the droid process fails.\n *\n * Carries optional context about the working directory and executable path\n * that were used when attempting to spawn the process.\n */\nexport class ConnectionError extends Error {\n /** The working directory used when spawning the process. */\n readonly cwd: string;\n\n /** The executable path used when spawning the process. */\n readonly execPath: string;\n\n constructor(message: string, options?: { cwd?: string; execPath?: string }) {\n super(message);\n this.name = \"ConnectionError\";\n this.cwd = options?.cwd ?? \"\";\n this.execPath = options?.execPath ?? \"\";\n Object.setPrototypeOf(this, ConnectionError.prototype);\n }\n}\n\n/**\n * Raised when a JSON-RPC protocol error occurs.\n *\n * Carries the optional JSON-RPC error code and any additional data\n * returned in the error response.\n */\nexport class ProtocolError extends Error {\n /** The JSON-RPC error code, if available. */\n readonly code: number | undefined;\n\n /** Additional error data from the JSON-RPC response. */\n readonly data: unknown;\n\n constructor(\n message: string,\n options?: { code?: number; data?: unknown },\n ) {\n super(message);\n this.name = \"ProtocolError\";\n this.code = options?.code;\n this.data = options?.data;\n Object.setPrototypeOf(this, ProtocolError.prototype);\n }\n}\n\n/**\n * Base error for session-related errors.\n */\nexport class SessionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"SessionError\";\n Object.setPrototypeOf(this, SessionError.prototype);\n }\n}\n\n/**\n * Raised when a session cannot be found.\n *\n * Constructs a default message of \"Session not found: {sessionId}\".\n */\nexport class SessionNotFoundError extends SessionError {\n /** The ID of the session that was not found. */\n readonly sessionId: string;\n\n constructor(sessionId: string) {\n super(`Session not found: ${sessionId}`);\n this.name = \"SessionNotFoundError\";\n this.sessionId = sessionId;\n Object.setPrototypeOf(this, SessionNotFoundError.prototype);\n }\n}\n\n/**\n * Raised when a request to the droid process times out.\n */\nexport class TimeoutError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"TimeoutError\";\n Object.setPrototypeOf(this, TimeoutError.prototype);\n }\n}\n\n/**\n * Raised when the droid subprocess exits unexpectedly.\n *\n * Carries the exit code (if the process exited normally) and the signal\n * name (if the process was killed by a signal).\n */\nexport class ProcessExitError extends Error {\n /** The exit code of the process, or null if terminated by signal. */\n readonly exitCode: number | null;\n\n /** The signal that terminated the process, or null if exited normally. */\n readonly signal: string | null;\n\n constructor(\n message: string,\n options?: { exitCode?: number | null; signal?: string | null },\n ) {\n super(message);\n this.name = \"ProcessExitError\";\n this.exitCode = options?.exitCode ?? null;\n this.signal = options?.signal ?? null;\n Object.setPrototypeOf(this, ProcessExitError.prototype);\n }\n}\n","/**\n * ProcessTransport — subprocess-based transport for the Factory Droid SDK.\n *\n * Spawns `droid exec --input-format stream-jsonrpc --output-format stream-jsonrpc`\n * as a child process and communicates via newline-delimited JSON (JSONL) over\n * stdin/stdout.\n */\n\nimport { type ChildProcess, spawn } from \"node:child_process\";\nimport * as readline from \"node:readline\";\n\nimport { ConnectionError, ProcessExitError } from \"./errors.js\";\nimport type {\n DroidClientTransport,\n ErrorCallback,\n MessageCallback,\n ProcessTransportOptions,\n} from \"./types.js\";\n\n/** Default arguments for `droid exec`. */\nconst DEFAULT_EXEC_ARGS = [\n \"exec\",\n \"--input-format\",\n \"stream-jsonrpc\",\n \"--output-format\",\n \"stream-jsonrpc\",\n];\n\n/** Default grace period in milliseconds before escalating SIGTERM → SIGKILL. */\nconst DEFAULT_GRACE_PERIOD_MS = 5_000;\n\n/**\n * Transport that communicates via JSONL over stdin/stdout of a spawned\n * `droid exec` child process.\n *\n * Key behaviors:\n * - JSONL framing (one JSON object per newline-terminated line)\n * - Write serialization via a promise chain to prevent interleaving\n * - Process lifecycle management (SIGTERM → grace period → SIGKILL)\n * - Reconnection after close via `connect()`\n * - Non-JSON stdout lines are silently skipped\n * - Fires `onError` with `ProcessExitError` on abnormal exit\n */\nexport class ProcessTransport implements DroidClientTransport {\n private readonly execPath: string;\n private readonly execArgs: string[];\n private readonly cwd: string | undefined;\n private readonly env: Record<string, string> | undefined;\n private readonly gracePeriodMs: number;\n\n private childProcess: ChildProcess | null = null;\n private readlineInterface: readline.Interface | null = null;\n private messageHandler: MessageCallback | null = null;\n private errorHandler: ErrorCallback | null = null;\n\n /**\n * Sticky error from a process error or unexpected exit. Once set,\n * all subsequent `send()` calls throw immediately.\n */\n private processError: Error | null = null;\n\n /** Promise-chain serializer for stdin writes. */\n private writeChain: Promise<void> = Promise.resolve();\n\n private _isConnected = false;\n private isClosing = false;\n\n constructor(options: ProcessTransportOptions = {}) {\n this.execPath = options.execPath ?? \"droid\";\n this.execArgs = options.execArgs\n ? [...options.execArgs]\n : [...DEFAULT_EXEC_ARGS];\n this.cwd = options.cwd;\n this.env = options.env;\n this.gracePeriodMs =\n (options.gracePeriod ?? DEFAULT_GRACE_PERIOD_MS / 1_000) * 1_000;\n }\n\n // -----------------------------------------------------------------------\n // DroidClientTransport interface\n // -----------------------------------------------------------------------\n\n get isConnected(): boolean {\n return this._isConnected;\n }\n\n async connect(): Promise<void> {\n if (this._isConnected) {\n throw new ConnectionError(\"Transport already connected\", {\n execPath: this.execPath,\n });\n }\n\n // Reset state for (re)connection\n this.processError = null;\n this.isClosing = false;\n this.writeChain = Promise.resolve();\n\n const mergedEnv = this.env\n ? { ...process.env, ...this.env }\n : undefined;\n\n try {\n this.childProcess = spawn(this.execPath, this.execArgs, {\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n cwd: this.cwd,\n env: mergedEnv,\n });\n } catch (err: unknown) {\n const message =\n err instanceof Error\n ? `Failed to start droid process: ${err.message}`\n : \"Failed to start droid process\";\n throw new ConnectionError(message, {\n execPath: this.execPath,\n cwd: this.cwd,\n });\n }\n\n this._isConnected = true;\n this.setupHandlers();\n }\n\n send(message: object): void {\n if (this.processError) {\n throw this.processError;\n }\n if (\n !this._isConnected ||\n !this.childProcess ||\n !this.childProcess.stdin\n ) {\n throw new ConnectionError(\"Transport not connected\", {\n execPath: this.execPath,\n });\n }\n\n const line = JSON.stringify(message) + \"\\n\";\n\n // Chain writes to prevent interleaving on concurrent calls.\n const previousChain = this.writeChain;\n\n this.writeChain = (async () => {\n // Wait for the previous write to finish (ignore its error — it's\n // already been reported to the caller of the previous send()).\n await previousChain.catch(() => {});\n\n if (\n !this.childProcess ||\n !this.childProcess.stdin ||\n this.childProcess.killed ||\n this.isClosing\n ) {\n throw new ConnectionError(\"Process disconnected before write\", {\n execPath: this.execPath,\n });\n }\n\n if (this.processError) {\n throw this.processError;\n }\n\n await new Promise<void>((resolve, reject) => {\n if (!this.childProcess || !this.childProcess.stdin) {\n reject(\n new ConnectionError(\"Process stdin unavailable\", {\n execPath: this.execPath,\n }),\n );\n return;\n }\n\n const stdin = this.childProcess.stdin;\n if (\"writable\" in stdin && !stdin.writable) {\n reject(\n new ConnectionError(\"Process stdin is not writable\", {\n execPath: this.execPath,\n }),\n );\n return;\n }\n\n stdin.write(line, (error) => {\n if (error) {\n const msg = error.message || String(error);\n if (msg.includes(\"EPIPE\") || msg.includes(\"ECONNRESET\")) {\n reject(\n new ConnectionError(\"Process stdin closed during write\", {\n execPath: this.execPath,\n }),\n );\n } else {\n reject(\n new ConnectionError(\n `Failed to write to process stdin: ${msg}`,\n { execPath: this.execPath },\n ),\n );\n }\n } else {\n resolve();\n }\n });\n });\n })();\n }\n\n onMessage(callback: MessageCallback): void {\n this.messageHandler = callback;\n }\n\n onError(callback: ErrorCallback): void {\n this.errorHandler = callback;\n }\n\n async close(): Promise<void> {\n if (this.isClosing) {\n return;\n }\n\n this.isClosing = true;\n this._isConnected = false;\n\n const proc = this.childProcess;\n this.childProcess = null;\n\n if (this.readlineInterface) {\n this.readlineInterface.close();\n this.readlineInterface = null;\n }\n\n if (proc && proc.exitCode === null && !proc.killed) {\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(() => {\n // Escalate to SIGKILL\n if (proc.exitCode === null && !proc.killed) {\n try {\n proc.kill(\"SIGKILL\");\n } catch {\n // Process may already be gone\n }\n }\n }, this.gracePeriodMs);\n\n proc.once(\"exit\", () => {\n clearTimeout(timeout);\n resolve();\n });\n\n // Close stdin first, then SIGTERM\n if (proc.stdin) {\n try {\n proc.stdin.end();\n } catch {\n // Ignore\n }\n }\n\n try {\n proc.kill(\"SIGTERM\");\n } catch {\n // Process may already be gone — resolve immediately\n clearTimeout(timeout);\n resolve();\n }\n });\n }\n\n // Reset closing flag so reconnection via connect() is possible\n this.isClosing = false;\n }\n\n // -----------------------------------------------------------------------\n // Private helpers\n // -----------------------------------------------------------------------\n\n private setupHandlers(): void {\n const proc = this.childProcess;\n if (!proc || !proc.stdout) {\n return;\n }\n\n this.readlineInterface = readline.createInterface({\n input: proc.stdout,\n crlfDelay: Infinity,\n });\n\n this.readlineInterface.on(\"line\", (line) => {\n const trimmed = line.trim();\n if (!trimmed) {\n return;\n }\n\n // Only attempt to parse lines that look like JSON objects / arrays\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\")) {\n try {\n const parsed: unknown = JSON.parse(trimmed);\n if (this.messageHandler && typeof parsed === \"object\" && parsed !== null) {\n this.messageHandler(parsed as object);\n }\n } catch {\n // Malformed JSON — skip silently\n }\n }\n // Non-JSON lines (e.g. debug output from the subprocess) are silently skipped\n });\n\n // Handle spawn errors (ENOENT etc.)\n proc.on(\"error\", (error) => {\n this.processError = new ConnectionError(\n `Failed to start droid process: ${error.message}`,\n {\n execPath: this.execPath,\n cwd: this.cwd,\n },\n );\n this._isConnected = false;\n if (!this.isClosing && this.errorHandler) {\n this.errorHandler(this.processError);\n }\n });\n\n // Handle process exit\n proc.on(\"exit\", (code, signal) => {\n if (this.readlineInterface) {\n this.readlineInterface.close();\n this.readlineInterface = null;\n }\n\n this._isConnected = false;\n\n if (!this.isClosing) {\n const exitCode = code ?? null;\n const exitSignal = signal ?? null;\n\n let message: string;\n if (exitSignal) {\n message = `Droid process was killed (${exitSignal})`;\n } else if (exitCode !== null && exitCode !== 0) {\n message = `Droid process exited unexpectedly (exit code ${exitCode})`;\n } else if (exitCode === 0) {\n message = \"Droid process exited normally\";\n } else {\n message = \"Droid process exited unexpectedly\";\n }\n\n this.processError = new ProcessExitError(message, {\n exitCode,\n signal: exitSignal,\n });\n\n if (this.errorHandler) {\n this.errorHandler(this.processError);\n }\n }\n });\n }\n}\n","/**\n * JSON-RPC 2.0 protocol engine for the Factory Droid SDK.\n *\n * Sits between the transport layer and the client API. Handles:\n *\n * - Envelope construction for outbound requests\n * - Request/response correlation via pending promises keyed by UUID\n * - Configurable per-request timeouts\n * - Notification dispatch to registered listeners with optional type filtering\n * - Server→client request handling (permission, ask_user)\n * - Error code mapping (ENTITY_NOT_FOUND → SessionNotFoundError)\n * - Sticky transport error: once a transport error fires, all\n * pending and subsequent requests are immediately rejected\n * - Edge cases: unknown response IDs, duplicate response IDs,\n * malformed responses, null-id error responses\n */\n\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport {\n ConnectionError,\n ProtocolError,\n SessionNotFoundError,\n TimeoutError,\n} from \"./errors.js\";\nimport {\n DEFAULT_REQUEST_TIMEOUT,\n FACTORY_PROTOCOL_VERSION,\n JSONRPC_VERSION,\n LEGACY_FACTORY_API_VERSION,\n} from \"./schemas/constants.js\";\nimport {\n DroidClientMethod,\n JsonRpcErrorCode,\n} from \"./schemas/enums.js\";\nimport type { DroidClientTransport } from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * Handler for server→client permission requests.\n * Receives request params and returns the selected ToolConfirmationOutcome string.\n */\nexport type PermissionHandler = (\n params: Record<string, unknown>,\n) => string | Promise<string>;\n\n/**\n * Handler for server→client ask-user requests.\n * Receives request params and returns a result with cancelled flag and answers.\n */\nexport type AskUserHandler = (\n params: Record<string, unknown>,\n) => Record<string, unknown> | Promise<Record<string, unknown>>;\n\n/**\n * Callback for incoming notification messages.\n */\nexport type NotificationCallback = (notification: Record<string, unknown>) => void;\n\n/**\n * Optional filter for notification listeners.\n */\nexport interface NotificationFilter {\n /** Only dispatch notifications whose `params.notification.type` matches. */\n type?: string;\n}\n\n/**\n * Internal state for a pending request awaiting a response.\n */\ninterface PendingRequest {\n readonly method: string;\n readonly requestId: string;\n readonly params: Record<string, unknown>;\n readonly resolve: (value: Record<string, unknown>) => void;\n readonly reject: (reason: Error) => void;\n readonly timer: ReturnType<typeof setTimeout>;\n}\n\n/**\n * Internal entry in the notification listener registry.\n */\ninterface NotificationListener {\n readonly callback: NotificationCallback;\n readonly filter?: NotificationFilter;\n}\n\n// ---------------------------------------------------------------------------\n// ProtocolEngine\n// ---------------------------------------------------------------------------\n\n/**\n * JSON-RPC 2.0 protocol engine.\n *\n * Manages request/response correlation, timeout handling, notification\n * dispatch, server→client request handling, and error mapping.\n *\n * After construction the engine immediately registers itself on the\n * transport's `onMessage` and `onError` callbacks.\n *\n * @example\n * ```ts\n * const engine = new ProtocolEngine({ transport });\n * const result = await engine.sendRequest(\"droid.list_skills\", {});\n * engine.close();\n * ```\n */\nexport class ProtocolEngine {\n private readonly _transport: DroidClientTransport;\n private readonly _defaultTimeout: number;\n\n /** Pending requests keyed by UUID string. */\n private readonly _pendingRequests = new Map<string, PendingRequest>();\n\n /** Notification listener registry. */\n private readonly _notificationListeners = new Set<NotificationListener>();\n\n /** Server→client request handlers. */\n private _permissionHandler: PermissionHandler | null = null;\n private _askUserHandler: AskUserHandler | null = null;\n\n /** Sticky transport error — once set, all requests fail immediately. */\n private _transportError: Error | null = null;\n\n /** Closed flag — once true, new requests are rejected. */\n private _closed = false;\n\n /**\n * Create a new ProtocolEngine.\n *\n * @param options.transport - A connected DroidClientTransport implementation.\n * @param options.defaultTimeout - Default timeout in ms for sendRequest (default 30 000).\n */\n constructor(options: {\n transport: DroidClientTransport;\n defaultTimeout?: number;\n }) {\n this._transport = options.transport;\n this._defaultTimeout = options.defaultTimeout ?? DEFAULT_REQUEST_TIMEOUT;\n\n // Wire up transport callbacks\n this._transport.onMessage((message: object) => {\n this._handleMessage(message as Record<string, unknown>);\n });\n this._transport.onError((error: Error) => {\n this._handleTransportError(error);\n });\n }\n\n // ------------------------------------------------------------------\n // Public API: Sending requests\n // ------------------------------------------------------------------\n\n /**\n * Send a JSON-RPC request and wait for the response.\n *\n * Constructs the full envelope, registers a pending promise, sends\n * via transport, and returns the parsed response `result` field.\n *\n * @param method - The RPC method name (e.g. `\"droid.list_skills\"`).\n * @param params - Method parameters object.\n * @param timeout - Timeout in ms. Defaults to `defaultTimeout`.\n * @returns The `result` field from the JSON-RPC success response.\n * @throws {ConnectionError} If the engine is closed.\n * @throws {ConnectionError} If the transport has a sticky error.\n * @throws {TimeoutError} If no response arrives within the timeout.\n * @throws {ProtocolError} If the response contains a protocol error.\n * @throws {SessionNotFoundError} If error code is ENTITY_NOT_FOUND.\n */\n async sendRequest(\n method: string,\n params: Record<string, unknown>,\n timeout?: number,\n ): Promise<Record<string, unknown>> {\n // Check closed state\n if (this._closed) {\n throw new ConnectionError(\"Protocol engine is closed\");\n }\n\n // Check sticky transport error\n if (this._transportError !== null) {\n throw new ConnectionError(\n `Transport error: ${this._transportError.message}`,\n );\n }\n\n const effectiveTimeout = timeout ?? this._defaultTimeout;\n const requestId = uuidv4();\n\n // Build envelope\n const envelope: Record<string, unknown> = {\n jsonrpc: JSONRPC_VERSION,\n factoryApiVersion: LEGACY_FACTORY_API_VERSION,\n factoryProtocolVersion: FACTORY_PROTOCOL_VERSION,\n type: \"request\",\n id: requestId,\n method,\n params,\n };\n\n // Create a promise that will be resolved when we get a matching response\n return new Promise<Record<string, unknown>>((resolve, reject) => {\n // Set up timeout\n const timer = setTimeout(() => {\n this._pendingRequests.delete(requestId);\n reject(\n new TimeoutError(\n `Request ${method} timed out after ${effectiveTimeout}ms`,\n ),\n );\n }, effectiveTimeout);\n\n // Store as pending\n const pending: PendingRequest = {\n method,\n requestId,\n params,\n resolve,\n reject,\n timer,\n };\n this._pendingRequests.set(requestId, pending);\n\n // Send via transport\n try {\n this._transport.send(envelope);\n } catch (sendError) {\n // Clean up pending and reject\n clearTimeout(timer);\n this._pendingRequests.delete(requestId);\n if (sendError instanceof Error) {\n reject(\n new ConnectionError(`Failed to send request: ${sendError.message}`),\n );\n } else {\n reject(new ConnectionError(\"Failed to send request\"));\n }\n }\n });\n }\n\n // ------------------------------------------------------------------\n // Public API: Notification listeners\n // ------------------------------------------------------------------\n\n /**\n * Register a callback for incoming notification messages.\n *\n * Multiple listeners can be registered. Each receives the full\n * parsed notification object.\n *\n * @param callback - Invoked with the notification object.\n * @param filter - Optional filter to only receive specific notification types.\n * @returns An unsubscribe function. Calling it again is safe (no-op).\n */\n onNotification(\n callback: NotificationCallback,\n filter?: NotificationFilter,\n ): () => void {\n const listener: NotificationListener = { callback, filter };\n this._notificationListeners.add(listener);\n\n let unsubscribed = false;\n return () => {\n if (!unsubscribed) {\n unsubscribed = true;\n this._notificationListeners.delete(listener);\n }\n };\n }\n\n // ------------------------------------------------------------------\n // Public API: Server→client request handlers\n // ------------------------------------------------------------------\n\n /**\n * Register a handler for server→client permission requests.\n *\n * The handler receives the request params and should return a\n * ToolConfirmationOutcome string value.\n *\n * Replaces any previously registered handler.\n */\n setPermissionHandler(handler: PermissionHandler): void {\n this._permissionHandler = handler;\n }\n\n /**\n * Remove the permission request handler (restores default Cancel).\n */\n clearPermissionHandler(): void {\n this._permissionHandler = null;\n }\n\n /**\n * Register a handler for server→client ask-user requests.\n *\n * The handler receives the request params and should return\n * a result object with `cancelled` and `answers` keys.\n *\n * Replaces any previously registered handler.\n */\n setAskUserHandler(handler: AskUserHandler): void {\n this._askUserHandler = handler;\n }\n\n /**\n * Remove the ask-user request handler (restores default cancelled=true).\n */\n clearAskUserHandler(): void {\n this._askUserHandler = null;\n }\n\n // ------------------------------------------------------------------\n // Public API: Health check\n // ------------------------------------------------------------------\n\n /**\n * Whether the engine is in a healthy state — not closed and no\n * sticky transport error.\n */\n get isHealthy(): boolean {\n return !this._closed && this._transportError === null;\n }\n\n // ------------------------------------------------------------------\n // Public API: Close\n // ------------------------------------------------------------------\n\n /**\n * Close the protocol engine.\n *\n * Rejects all pending requests, closes the transport, and prevents\n * new requests. Idempotent — safe to call multiple times.\n */\n async close(): Promise<void> {\n if (this._closed) {\n return;\n }\n this._closed = true;\n\n // Reject all pending\n const error = new ConnectionError(\n \"Protocol engine closed: pending requests cancelled\",\n );\n this._rejectAllPending(error);\n\n // Clear handlers and listeners\n this._permissionHandler = null;\n this._askUserHandler = null;\n this._notificationListeners.clear();\n\n // Close the transport\n await this._transport.close();\n }\n\n // ------------------------------------------------------------------\n // Internal: Message handling\n // ------------------------------------------------------------------\n\n /**\n * Handle an incoming parsed message from the transport.\n * Dispatches to response handler, notification handler, or\n * server→client request handler based on message type.\n */\n private _handleMessage(parsed: Record<string, unknown>): void {\n const msgType = parsed[\"type\"];\n\n if (msgType === \"response\") {\n this._handleResponse(parsed);\n } else if (msgType === \"notification\") {\n this._handleNotification(parsed);\n } else if (msgType === \"request\") {\n // Server→client request — handle asynchronously\n void this._handleServerRequest(parsed);\n } else {\n // Fallback detection by content\n if (\"result\" in parsed || \"error\" in parsed) {\n this._handleResponse(parsed);\n } else if (\"method\" in parsed && !(\"id\" in parsed)) {\n this._handleNotification(parsed);\n } else if (\"method\" in parsed && \"id\" in parsed) {\n void this._handleServerRequest(parsed);\n }\n // else: unknown format — silently ignore\n }\n }\n\n /**\n * Handle an incoming response message.\n * Matches by ID to resolve the correct pending Promise.\n */\n private _handleResponse(response: Record<string, unknown>): void {\n const responseId = response[\"id\"] as string | null | undefined;\n\n // Null-id error response — log but don't crash\n if (responseId == null) {\n return;\n }\n\n const pending = this._pendingRequests.get(responseId);\n\n if (pending == null) {\n // Unknown response ID — already timed out or duplicate\n return;\n }\n\n // Remove from pending and clear its timeout\n this._pendingRequests.delete(responseId);\n clearTimeout(pending.timer);\n\n // Check for error response and map to exceptions\n const errorObj = response[\"error\"];\n if (errorObj != null && typeof errorObj === \"object\") {\n const error = errorObj as Record<string, unknown>;\n const code = error[\"code\"] as number | undefined;\n const message = (error[\"message\"] as string) ?? \"Unknown error\";\n const data = error[\"data\"];\n\n if (code === JsonRpcErrorCode.ENTITY_NOT_FOUND) {\n // Extract sessionId from the original request params\n const sessionId = String(\n pending.params[\"sessionId\"] ?? pending.requestId,\n );\n pending.reject(new SessionNotFoundError(sessionId));\n return;\n }\n\n pending.reject(new ProtocolError(message, { code, data }));\n return;\n }\n\n // Resolve with the full response\n pending.resolve(response as Record<string, unknown>);\n }\n\n /**\n * Handle an incoming notification message.\n * Dispatches to all registered notification listeners that match.\n */\n private _handleNotification(notification: Record<string, unknown>): void {\n // Extract the notification type for filtering\n const params = notification[\"params\"] as Record<string, unknown> | undefined;\n const innerNotification = params?.[\"notification\"] as\n | Record<string, unknown>\n | undefined;\n const notificationType = innerNotification?.[\"type\"] as string | undefined;\n\n for (const listener of this._notificationListeners) {\n // Apply type filter if present\n if (\n listener.filter?.type != null &&\n listener.filter.type !== notificationType\n ) {\n continue;\n }\n\n try {\n listener.callback(notification);\n } catch {\n // Notification listener raised — don't crash the engine\n }\n }\n }\n\n /**\n * Handle an incoming server→client request.\n * Dispatches to the appropriate handler based on the method field.\n */\n private async _handleServerRequest(\n request: Record<string, unknown>,\n ): Promise<void> {\n const method = request[\"method\"] as string;\n const requestId = request[\"id\"] as string;\n const params = (request[\"params\"] as Record<string, unknown>) ?? {};\n\n if (method === DroidClientMethod.REQUEST_PERMISSION) {\n await this._handlePermissionRequest(requestId, params);\n } else if (method === DroidClientMethod.ASK_USER) {\n await this._handleAskUserRequest(requestId, params);\n }\n // Unknown server→client methods are silently ignored\n }\n\n /**\n * Handle droid.request_permission server→client request.\n */\n private async _handlePermissionRequest(\n requestId: string,\n params: Record<string, unknown>,\n ): Promise<void> {\n const handler = this._permissionHandler;\n\n if (handler == null) {\n // Default: Cancel\n this._sendResponse(requestId, { selectedOption: \"cancel\" });\n return;\n }\n\n try {\n const selectedOption = await Promise.resolve(handler(params));\n this._sendResponse(requestId, { selectedOption });\n } catch (exc) {\n const errorMessage =\n exc instanceof Error ? exc.message : String(exc);\n this._sendErrorResponse(\n requestId,\n JsonRpcErrorCode.INTERNAL_ERROR,\n \"Failed to handle permission request\",\n errorMessage,\n );\n }\n }\n\n /**\n * Handle droid.ask_user server→client request.\n */\n private async _handleAskUserRequest(\n requestId: string,\n params: Record<string, unknown>,\n ): Promise<void> {\n const handler = this._askUserHandler;\n\n if (handler == null) {\n // Default: cancelled=true\n this._sendResponse(requestId, { cancelled: true, answers: [] });\n return;\n }\n\n try {\n const result = await Promise.resolve(handler(params));\n this._sendResponse(requestId, result);\n } catch (exc) {\n const errorMessage =\n exc instanceof Error ? exc.message : String(exc);\n this._sendErrorResponse(\n requestId,\n JsonRpcErrorCode.INTERNAL_ERROR,\n \"Failed to handle ask-user request\",\n errorMessage,\n );\n }\n }\n\n // ------------------------------------------------------------------\n // Internal: Transport error handling\n // ------------------------------------------------------------------\n\n /**\n * Handle a transport error.\n * Sets the sticky transport error and rejects all pending requests.\n * The original error is preserved as `cause` on the ConnectionError.\n */\n private _handleTransportError(error: Error): void {\n this._transportError = error;\n const connectionError = new ConnectionError(\n `Transport error: ${error.message}`,\n );\n connectionError.cause = error;\n this._rejectAllPending(connectionError);\n }\n\n // ------------------------------------------------------------------\n // Internal: Response helpers\n // ------------------------------------------------------------------\n\n /**\n * Send a JSON-RPC success response back to the server.\n */\n private _sendResponse(\n requestId: string,\n result: Record<string, unknown>,\n ): void {\n const response: Record<string, unknown> = {\n jsonrpc: JSONRPC_VERSION,\n factoryApiVersion: LEGACY_FACTORY_API_VERSION,\n factoryProtocolVersion: FACTORY_PROTOCOL_VERSION,\n type: \"response\",\n id: requestId,\n result,\n };\n try {\n this._transport.send(response);\n } catch {\n // Failed to send response — log but don't crash\n }\n }\n\n /**\n * Send a JSON-RPC error response back to the server.\n */\n private _sendErrorResponse(\n requestId: string,\n code: number,\n message: string,\n data?: unknown,\n ): void {\n const errorObj: Record<string, unknown> = { code, message };\n if (data !== undefined) {\n errorObj[\"data\"] = data;\n }\n\n const response: Record<string, unknown> = {\n jsonrpc: JSONRPC_VERSION,\n factoryApiVersion: LEGACY_FACTORY_API_VERSION,\n factoryProtocolVersion: FACTORY_PROTOCOL_VERSION,\n type: \"response\",\n id: requestId,\n error: errorObj,\n };\n try {\n this._transport.send(response);\n } catch {\n // Failed to send error response — don't crash\n }\n }\n\n /**\n * Reject all pending requests with the given error.\n */\n private _rejectAllPending(error: Error): void {\n const pending = new Map(this._pendingRequests);\n this._pendingRequests.clear();\n\n for (const req of pending.values()) {\n clearTimeout(req.timer);\n req.reject(error);\n }\n }\n}\n","/**\n * DroidClient — high-level typed client for the Factory Droid SDK.\n *\n * Wraps a {@link ProtocolEngine} and provides typed async methods for all\n * 19 `droid.*` JSON-RPC methods, notification subscription with type\n * filtering, and permission/ask-user handler registration.\n *\n * Built on top of the `ProtocolEngine` and a `DroidClientTransport`\n * implementation.\n */\n\nimport { ConnectionError, SessionError } from \"./errors.js\";\nimport {\n ProtocolEngine,\n type NotificationCallback,\n type NotificationFilter,\n} from \"./protocol.js\";\nimport { DroidServerMethod } from \"./schemas/enums.js\";\nimport {\n MCP_AUTH_TIMEOUT,\n SESSION_INIT_TIMEOUT,\n} from \"./schemas/constants.js\";\nimport type {\n AddMcpServerRequestParams,\n AddMcpServerResult,\n AddUserMessageRequestParams,\n AddUserMessageResult,\n AuthenticateMcpServerRequestParams,\n AuthenticateMcpServerResult,\n CancelMcpAuthRequestParams,\n CancelMcpAuthResult,\n ClearMcpAuthRequestParams,\n ClearMcpAuthResult,\n InitializeSessionRequestParams,\n InitializeSessionResult,\n InterruptSessionResult,\n KillWorkerSessionRequestParams,\n KillWorkerSessionResult,\n ListMcpRegistryResult,\n ListMcpServersResult,\n ListMcpToolsResult,\n ListSkillsResult,\n LoadSessionRequestParams,\n LoadSessionResult,\n RemoveMcpServerRequestParams,\n RemoveMcpServerResult,\n SubmitBugReportRequestParams,\n SubmitBugReportResult,\n SubmitMcpAuthCodeRequestParams,\n SubmitMcpAuthCodeResult,\n ToggleMcpServerRequestParams,\n ToggleMcpServerResult,\n ToggleMcpToolRequestParams,\n ToggleMcpToolResult,\n UpdateSessionSettingsRequestParams,\n UpdateSessionSettingsResult,\n} from \"./schemas/client.js\";\nimport type { DroidClientTransport } from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * Handler for server→client permission requests at the client level.\n * Receives the full request params and returns a ToolConfirmationOutcome string.\n */\nexport type ClientPermissionHandler = (\n params: Record<string, unknown>,\n) => string | Promise<string>;\n\n/**\n * Handler for server→client ask-user requests at the client level.\n * Receives the full request params and returns a result object.\n */\nexport type ClientAskUserHandler = (\n params: Record<string, unknown>,\n) => Record<string, unknown> | Promise<Record<string, unknown>>;\n\n/**\n * Options for constructing a DroidClient.\n */\nexport interface DroidClientOptions {\n /** A connected DroidClientTransport implementation. */\n transport: DroidClientTransport;\n\n /** Default request timeout in ms. Defaults to 30 000. */\n defaultTimeout?: number;\n}\n\n// ---------------------------------------------------------------------------\n// DroidClient\n// ---------------------------------------------------------------------------\n\n/**\n * High-level typed client for the Factory Droid SDK.\n *\n * Provides async methods for all 19 `droid.*` JSON-RPC operations,\n * notification subscription with optional type filtering, and handler\n * registration for server→client requests (permissions, ask-user).\n *\n * @example\n * ```ts\n * const transport = new InMemoryTransport();\n * await transport.connect();\n * const client = new DroidClient({ transport });\n *\n * const result = await client.initializeSession({\n * machineId: \"test\",\n * cwd: \"/tmp\",\n * });\n *\n * await client.close();\n * ```\n */\nexport class DroidClient {\n private readonly _engine: ProtocolEngine;\n private _sessionId: string | null = null;\n private _closed = false;\n\n /**\n * Client-level notification listeners.\n * Each entry is [callback, optional type filter string].\n */\n private readonly _notificationListeners: Array<{\n callback: NotificationCallback;\n typeFilter?: string;\n }> = [];\n\n /** Client-level permission handler. */\n private _permissionHandler: ClientPermissionHandler | null = null;\n\n /** Client-level ask-user handler. */\n private _askUserHandler: ClientAskUserHandler | null = null;\n\n constructor(options: DroidClientOptions) {\n this._engine = new ProtocolEngine({\n transport: options.transport,\n defaultTimeout: options.defaultTimeout,\n });\n\n // Wire up protocol engine's notification dispatch to client-level listeners\n this._engine.onNotification((notification) => {\n this._dispatchNotification(notification);\n });\n\n // Wire up protocol engine's server→client request handlers\n // to client-level dispatch methods\n this._engine.setPermissionHandler((params) =>\n this._dispatchPermissionRequest(params),\n );\n this._engine.setAskUserHandler((params) =>\n this._dispatchAskUserRequest(params),\n );\n }\n\n // ------------------------------------------------------------------\n // Properties\n // ------------------------------------------------------------------\n\n /**\n * Current session ID, or `null` if no session is active.\n */\n get sessionId(): string | null {\n return this._sessionId;\n }\n\n /**\n * Whether the client is in a healthy state — not closed and no\n * transport errors have occurred. Returns false after transport\n * disconnect/error.\n */\n get isConnected(): boolean {\n return !this._closed && this._engine.isHealthy;\n }\n\n // ------------------------------------------------------------------\n // Session lifecycle methods\n // ------------------------------------------------------------------\n\n /**\n * Initialize a new session.\n *\n * Sends `droid.initialize_session` with extended timeout. On success,\n * stores the session ID internally and returns the typed result.\n */\n async initializeSession(\n params: InitializeSessionRequestParams,\n ): Promise<InitializeSessionResult> {\n this._ensureNotClosed();\n\n const response = await this._engine.sendRequest(\n DroidServerMethod.INITIALIZE_SESSION,\n params as unknown as Record<string, unknown>,\n SESSION_INIT_TIMEOUT,\n );\n\n const result = (response as Record<string, unknown>)[\"result\"] as\n | InitializeSessionResult\n | undefined;\n if (result) {\n this._sessionId = result.sessionId;\n return result;\n }\n\n // If the response has the result at top level (protocol engine returns full response)\n if (\"sessionId\" in response) {\n this._sessionId = (response as Record<string, unknown>)[\n \"sessionId\"\n ] as string;\n return response as unknown as InitializeSessionResult;\n }\n\n return response as unknown as InitializeSessionResult;\n }\n\n /**\n * Load an existing session.\n *\n * Sends `droid.load_session`. SessionNotFoundError is thrown for\n * non-existent sessions (mapped from ENTITY_NOT_FOUND by the protocol engine).\n */\n async loadSession(\n params: LoadSessionRequestParams,\n ): Promise<LoadSessionResult> {\n this._ensureNotClosed();\n\n const response = await this._engine.sendRequest(\n DroidServerMethod.LOAD_SESSION,\n params as unknown as Record<string, unknown>,\n SESSION_INIT_TIMEOUT,\n );\n\n const result = (response as Record<string, unknown>)[\"result\"] as\n | LoadSessionResult\n | undefined;\n if (result) {\n this._sessionId = params.sessionId;\n return result;\n }\n\n this._sessionId = params.sessionId;\n return response as unknown as LoadSessionResult;\n }\n\n /**\n * Add a user message to the active session.\n *\n * Sends `droid.add_user_message` with text and optional images/files.\n */\n async addUserMessage(\n params: Pick<AddUserMessageRequestParams, \"text\"> &\n Partial<Pick<AddUserMessageRequestParams, \"images\" | \"files\" | \"messageId\">>,\n ): Promise<AddUserMessageResult> {\n this._ensureNotClosed();\n this._ensureSession();\n\n const response = await this._engine.sendRequest(\n DroidServerMethod.ADD_USER_MESSAGE,\n params as unknown as Record<string, unknown>,\n );\n\n const result = (response as Record<string, unknown>)[\"result\"];\n return (result ?? response) as unknown as AddUserMessageResult;\n }\n\n /**\n * Interrupt the current session.\n *\n * Sends `droid.interrupt_session` with empty params.\n */\n async interruptSession(): Promise<InterruptSessionResult> {\n this._ensureNotClosed();\n this._ensureSession();\n\n const response = await this._engine.sendRequest(\n DroidServerMethod.INTERRUPT_SESSION,\n {},\n );\n\n const result = (response as Record<string, unknown>)[\"result\"];\n return (result ?? response) as unknown as InterruptSessionResult;\n }\n\n /**\n * Kill a worker session.\n *\n * Sends `droid.kill_worker_session`.\n */\n async killWorkerSession(\n params: KillWorkerSessionRequestParams,\n ): Promise<KillWorkerSessionResult> {\n this._ensureNotClosed();\n this._ensureSession();\n\n const response = await this._engine.sendRequest(\n DroidServerMethod.KILL_WORKER_SESSION,\n params as unknown as Record<string, unknown>,\n );\n\n const result = (response as Record<string, unknown>)[\"result\"];\n return (result ?? response) as unknown as KillWorkerSessionResult;\n }\n\n /**\n * Update session settings.\n *\n * Sends `droid.update_session_settings` with the provided partial settings.\n */\n async updateSessionSettings(\n params: Partial<UpdateSessionSettingsRequestParams>,\n ): Promise<UpdateSessionSettingsResult> {\n this._ensureNotClosed();\n this._ensureSession();\n\n const response = await this._engine.sendRequest(\n DroidServerMethod.UPDATE_SESSION_SETTINGS,\n params as unknown as Record<string, unknown>,\n );\n\n const result = (response as Record<string, unknown>)[\"result\"];\n return (result ?? response) as unknown as UpdateSessionSettingsResult;\n }\n\n // ------------------------------------------------------------------\n // MCP methods\n // ------------------------------------------------------------------\n\n /**\n * Toggle an MCP server on or off.\n */\n async toggleMcpServer(\n params: ToggleMcpServerRequestParams,\n ): Promise<ToggleMcpServerResult> {\n this._ensureNotClosed();\n this._ensureSession();\n\n const response = await this._engine.sendRequest(\n DroidServerMethod.TOGGLE_MCP_SERVER,\n params as unknown as Record<string, unknown>,\n );\n\n const result = (response as Record<string, unknown>)[\"result\"];\n return (result ?? response) as unknown as ToggleMcpServerResult;\n }\n\n /**\n * Authenticate an MCP server (OAuth flow).\n * Uses extended timeout (300s) since OAuth requires user interaction.\n */\n async authenticateMcpServer(\n params: AuthenticateMcpServerRequestParams,\n ): Promise<AuthenticateMcpServerResult> {\n this._ensureNotClosed();\n this._ensureSession();\n\n const response = await this._engine.sendRequest(\n DroidServerMethod.AUTHENTICATE_MCP_SERVER,\n params as unknown as Record<string, unknown>,\n MCP_AUTH_TIMEOUT,\n );\n\n const result = (response as Record<string, unknown>)[\"result\"];\n return (result ?? response) as unknown as AuthenticateMcpServerResult;\n }\n\n /**\n * Cancel an in-progress MCP authentication.\n */\n async cancelMcpAuth(\n params: CancelMcpAuthRequestParams,\n ): Promise<CancelMcpAuthResult> {\n this._ensureNotClosed();\n this._ensureSession();\n\n const response = await this._engine.sendRequest(\n DroidServerMethod.CANCEL_MCP_AUTH,\n params as unknown as Record<string, unknown>,\n );\n\n const result = (response as Record<string, unknown>)[\"result\"];\n return (result ?? response) as unknown as CancelMcpAuthResult;\n }\n\n /**\n * Clear stored MCP authentication tokens.\n */\n async clearMcpAuth(\n params: ClearMcpAuthRequestParams,\n ): Promise<ClearMcpAuthResult> {\n this._ensureNotClosed();\n this._ensureSession();\n\n const response = await this._engine.sendRequest(\n DroidServerMethod.CLEAR_MCP_AUTH,\n params as unknown as Record<string, unknown>,\n );\n\n const result = (response as Record<string, unknown>)[\"result\"];\n return (result ?? response) as unknown as ClearMcpAuthResult;\n }\n\n /**\n * Submit an MCP authentication code (OAuth callback).\n */\n async submitMcpAuthCode(\n params: SubmitMcpAuthCodeRequestParams,\n ): Promise<SubmitMcpAuthCodeResult> {\n this._ensureNotClosed();\n this._ensureSession();\n\n const response = await this._engine.sendRequest(\n DroidServerMethod.SUBMIT_MCP_AUTH_CODE,\n params as unknown as Record<string, unknown>,\n );\n\n const result = (response as Record<string, unknown>)[\"result\"];\n return (result ?? response) as unknown as SubmitMcpAuthCodeResult;\n }\n\n /**\n * Add an MCP server.\n */\n async addMcpServer(\n params: AddMcpServerRequestParams,\n ): Promise<AddMcpServerResult> {\n this._ensureNotClosed();\n this._ensureSession();\n\n const response = await this._engine.sendRequest(\n DroidServerMethod.ADD_MCP_SERVER,\n params as unknown as Record<string, unknown>,\n );\n\n const result = (response as Record<string, unknown>)[\"result\"];\n return (result ?? response) as unknown as AddMcpServerResult;\n }\n\n /**\n * Remove an MCP server.\n */\n async removeMcpServer(\n params: RemoveMcpServerRequestParams,\n ): Promise<RemoveMcpServerResult> {\n this._ensureNotClosed();\n this._ensureSession();\n\n const response = await this._engine.sendRequest(\n DroidServerMethod.REMOVE_MCP_SERVER,\n params as unknown as Record<string, unknown>,\n );\n\n const result = (response as Record<string, unknown>)[\"result\"];\n return (result ?? response) as unknown as RemoveMcpServerResult;\n }\n\n /**\n * List available MCP registry servers.\n */\n async listMcpRegistry(): Promise<ListMcpRegistryResult> {\n this._ensureNotClosed();\n this._ensureSession();\n\n const response = await this._engine.sendRequest(\n DroidServerMethod.LIST_MCP_REGISTRY,\n {},\n );\n\n const result = (response as Record<string, unknown>)[\"result\"];\n return (result ?? response) as unknown as ListMcpRegistryResult;\n }\n\n /**\n * List available MCP tools.\n */\n async listMcpTools(): Promise<ListMcpToolsResult> {\n this._ensureNotClosed();\n this._ensureSession();\n\n const response = await this._engine.sendRequest(\n DroidServerMethod.LIST_MCP_TOOLS,\n {},\n );\n\n const result = (response as Record<string, unknown>)[\"result\"];\n return (result ?? response) as unknown as ListMcpToolsResult;\n }\n\n /**\n * List MCP servers with status and summary.\n */\n async listMcpServers(): Promise<ListMcpServersResult> {\n this._ensureNotClosed();\n this._ensureSession();\n\n const response = await this._engine.sendRequest(\n DroidServerMethod.LIST_MCP_SERVERS,\n {},\n );\n\n const result = (response as Record<string, unknown>)[\"result\"];\n return (result ?? response) as unknown as ListMcpServersResult;\n }\n\n /**\n * Toggle an MCP tool on or off.\n */\n async toggleMcpTool(\n params: ToggleMcpToolRequestParams,\n ): Promise<ToggleMcpToolResult> {\n this._ensureNotClosed();\n this._ensureSession();\n\n const response = await this._engine.sendRequest(\n DroidServerMethod.TOGGLE_MCP_TOOL,\n params as unknown as Record<string, unknown>,\n );\n\n const result = (response as Record<string, unknown>)[\"result\"];\n return (result ?? response) as unknown as ToggleMcpToolResult;\n }\n\n // ------------------------------------------------------------------\n // Skills and bug report methods\n // ------------------------------------------------------------------\n\n /**\n * List available skills.\n */\n async listSkills(): Promise<ListSkillsResult> {\n this._ensureNotClosed();\n this._ensureSession();\n\n const response = await this._engine.sendRequest(\n DroidServerMethod.LIST_SKILLS,\n {},\n );\n\n const result = (response as Record<string, unknown>)[\"result\"];\n return (result ?? response) as unknown as ListSkillsResult;\n }\n\n /**\n * Submit a bug report.\n */\n async submitBugReport(\n params: SubmitBugReportRequestParams,\n ): Promise<SubmitBugReportResult> {\n this._ensureNotClosed();\n this._ensureSession();\n\n const response = await this._engine.sendRequest(\n DroidServerMethod.SUBMIT_BUG_REPORT,\n params as unknown as Record<string, unknown>,\n );\n\n const result = (response as Record<string, unknown>)[\"result\"];\n return (result ?? response) as unknown as SubmitBugReportResult;\n }\n\n // ------------------------------------------------------------------\n // Notification subscription\n // ------------------------------------------------------------------\n\n /**\n * Register a callback for incoming notification messages.\n *\n * Multiple listeners can be registered. Each receives the full parsed\n * notification object. Optionally filter by notification type.\n *\n * Listener exceptions are isolated — if one raises, others still receive\n * the event and the engine continues.\n *\n * @param callback - Invoked with the notification object.\n * @param filter - Optional filter to only receive specific notification types.\n * @returns An unsubscribe function. Calling it again is safe (no-op).\n */\n onNotification(\n callback: NotificationCallback,\n filter?: NotificationFilter,\n ): () => void {\n const entry = {\n callback,\n typeFilter: filter?.type,\n };\n this._notificationListeners.push(entry);\n\n let unsubscribed = false;\n return () => {\n if (!unsubscribed) {\n unsubscribed = true;\n const idx = this._notificationListeners.indexOf(entry);\n if (idx !== -1) {\n this._notificationListeners.splice(idx, 1);\n }\n }\n };\n }\n\n // ------------------------------------------------------------------\n // Permission/ask-user handler registration\n // ------------------------------------------------------------------\n\n /**\n * Register a handler for server→client permission requests.\n *\n * The handler receives the request params and should return a\n * ToolConfirmationOutcome string value. Async handlers are awaited.\n * Replaces any previously registered handler.\n */\n setPermissionHandler(handler: ClientPermissionHandler): void {\n this._permissionHandler = handler;\n }\n\n /**\n * Remove the permission request handler.\n * Restores default behavior: return \"cancel\".\n */\n clearPermissionHandler(): void {\n this._permissionHandler = null;\n }\n\n /**\n * Register a handler for server→client ask-user requests.\n *\n * The handler receives the request params and should return a result\n * object with `cancelled` and `answers` keys. Async handlers are awaited.\n * Replaces any previously registered handler.\n */\n setAskUserHandler(handler: ClientAskUserHandler): void {\n this._askUserHandler = handler;\n }\n\n /**\n * Remove the ask-user request handler.\n * Restores default behavior: return `{ cancelled: true, answers: [] }`.\n */\n clearAskUserHandler(): void {\n this._askUserHandler = null;\n }\n\n // ------------------------------------------------------------------\n // Lifecycle\n // ------------------------------------------------------------------\n\n /**\n * Close the client and release all resources.\n *\n * Rejects pending requests, clears handlers and listeners, and closes\n * the protocol engine. Idempotent — safe to call multiple times.\n *\n * After close, all method calls throw ConnectionError immediately.\n */\n async close(): Promise<void> {\n if (this._closed) {\n return;\n }\n this._closed = true;\n\n // Clear client-level state\n this._notificationListeners.length = 0;\n this._permissionHandler = null;\n this._askUserHandler = null;\n\n // Close the protocol engine (which closes the transport)\n await this._engine.close();\n }\n\n // ------------------------------------------------------------------\n // Internal: dispatch methods\n // ------------------------------------------------------------------\n\n /**\n * Dispatch a notification to all registered client-level listeners.\n * Filters by notification type if a type filter is set.\n * Exception in one listener does not affect others.\n */\n private _dispatchNotification(notification: Record<string, unknown>): void {\n // Extract the notification type from the payload\n const params = notification[\"params\"] as\n | Record<string, unknown>\n | undefined;\n const innerNotification = params?.[\"notification\"] as\n | Record<string, unknown>\n | undefined;\n const notificationType = innerNotification?.[\"type\"] as string | undefined;\n\n // Iterate over a copy in case listeners unsubscribe during iteration\n const listeners = [...this._notificationListeners];\n for (const listener of listeners) {\n // Apply type filter if present\n if (\n listener.typeFilter != null &&\n listener.typeFilter !== notificationType\n ) {\n continue;\n }\n\n try {\n listener.callback(notification);\n } catch {\n // Notification listener raised — don't crash the client\n }\n }\n }\n\n /**\n * Dispatch to the client-level permission handler.\n * If no handler is set, returns the default \"cancel\" outcome.\n * If handler throws, the error propagates to the protocol engine\n * which sends an error response.\n */\n private _dispatchPermissionRequest(\n params: Record<string, unknown>,\n ): string | Promise<string> {\n const handler = this._permissionHandler;\n if (handler == null) {\n return \"cancel\";\n }\n return handler(params);\n }\n\n /**\n * Dispatch to the client-level ask-user handler.\n * If no handler is set, returns the default cancelled response.\n * If handler throws, the error propagates to the protocol engine\n * which sends an error response.\n */\n private _dispatchAskUserRequest(\n params: Record<string, unknown>,\n ): Record<string, unknown> | Promise<Record<string, unknown>> {\n const handler = this._askUserHandler;\n if (handler == null) {\n return { cancelled: true, answers: [] };\n }\n return handler(params);\n }\n\n // ------------------------------------------------------------------\n // Internal: guards\n // ------------------------------------------------------------------\n\n /**\n * Throw ConnectionError if the client has been closed.\n */\n private _ensureNotClosed(): void {\n if (this._closed) {\n throw new ConnectionError(\n \"Client has been closed. Create a new DroidClient instance to reconnect.\",\n );\n }\n }\n\n /**\n * Throw SessionError if no active session.\n */\n private _ensureSession(): void {\n if (this._sessionId == null) {\n throw new SessionError(\n \"No active session. Call initializeSession or loadSession first.\",\n );\n }\n }\n}\n","/**\n * Typed stream message interfaces and notification-to-stream converter.\n *\n * Defines 22 DroidMessage types as TypeScript interfaces with a discriminated\n * `type` field, plus a notification converter and working-state tracker for\n * TurnComplete emission.\n *\n * Reference: Python SDK stream.py\n */\n\nimport type {\n McpServerStatusInfo,\n McpStatusSummary,\n MissionFeature,\n ProgressLogEntry,\n SettingsUpdatedPayload,\n TokenUsage,\n ToolProgressUpdate,\n} from \"./schemas/index.js\";\n\nimport {\n DroidWorkingState,\n McpAuthOutcome,\n MissionState,\n SessionNotificationType,\n ToolConfirmationOutcome,\n} from \"./schemas/index.js\";\n\n// ---------------------------------------------------------------------------\n// 22 DroidMessage interfaces — discriminated on `type`\n// ---------------------------------------------------------------------------\n\n/** A delta of assistant-generated text (streaming token). */\nexport interface AssistantTextDelta {\n readonly type: \"assistant_text_delta\";\n readonly messageId: string;\n readonly blockIndex: number;\n readonly text: string;\n}\n\n/** A delta of assistant thinking/reasoning text. */\nexport interface ThinkingTextDelta {\n readonly type: \"thinking_text_delta\";\n readonly messageId: string;\n readonly blockIndex: number;\n readonly text: string;\n}\n\n/** A tool invocation issued by the assistant (from create_message). */\nexport interface ToolUse {\n readonly type: \"tool_use\";\n readonly toolName: string;\n readonly toolInput: Record<string, unknown>;\n readonly toolUseId: string;\n}\n\n/** The result returned from a tool execution. */\nexport interface ToolResult {\n readonly type: \"tool_result\";\n readonly toolUseId: string;\n readonly content: string | unknown[];\n readonly isError: boolean;\n}\n\n/** A streaming progress update from a tool execution. */\nexport interface ToolProgress {\n readonly type: \"tool_progress\";\n readonly toolUseId: string;\n readonly toolName: string;\n readonly content: string;\n readonly update: ToolProgressUpdate;\n}\n\n/** The droid working state has changed. */\nexport interface WorkingStateChanged {\n readonly type: \"working_state_changed\";\n readonly state: DroidWorkingState;\n}\n\n/** Updated token usage counters for the session. */\nexport interface TokenUsageUpdate {\n readonly type: \"token_usage_update\";\n readonly inputTokens: number;\n readonly outputTokens: number;\n readonly cacheReadTokens: number;\n readonly cacheWriteTokens: number;\n readonly thinkingTokens: number;\n}\n\n/** A full assistant message was created (may contain tool_use blocks). */\nexport interface CreateMessage {\n readonly type: \"create_message\";\n readonly messageId: string;\n readonly role: string;\n readonly content: unknown[];\n readonly parentId?: string;\n}\n\n/** A permission request was resolved. */\nexport interface PermissionResolved {\n readonly type: \"permission_resolved\";\n readonly requestId: string;\n readonly toolUseIds: string[];\n readonly selectedOption: ToolConfirmationOutcome;\n}\n\n/** Session settings were updated. */\nexport interface SettingsUpdated {\n readonly type: \"settings_updated\";\n readonly settings: SettingsUpdatedPayload;\n}\n\n/** The session title was updated. */\nexport interface SessionTitleUpdated {\n readonly type: \"session_title_updated\";\n readonly title: string;\n}\n\n/** MCP server status changed. */\nexport interface McpStatusChanged {\n readonly type: \"mcp_status_changed\";\n readonly servers: McpServerStatusInfo[];\n readonly summary: McpStatusSummary;\n}\n\n/** Mission state changed. */\nexport interface MissionStateChanged {\n readonly type: \"mission_state_changed\";\n readonly state: MissionState;\n}\n\n/** Mission features changed. */\nexport interface MissionFeaturesChanged {\n readonly type: \"mission_features_changed\";\n readonly features: MissionFeature[];\n}\n\n/** Mission progress entry. */\nexport interface MissionProgressEntry {\n readonly type: \"mission_progress_entry\";\n readonly progressLog: ProgressLogEntry[];\n}\n\n/** Mission heartbeat. */\nexport interface MissionHeartbeat {\n readonly type: \"mission_heartbeat\";\n readonly timestamp: string;\n}\n\n/** A mission worker started. */\nexport interface MissionWorkerStarted {\n readonly type: \"mission_worker_started\";\n readonly workerSessionId: string;\n}\n\n/** A mission worker completed. */\nexport interface MissionWorkerCompleted {\n readonly type: \"mission_worker_completed\";\n readonly workerSessionId: string;\n readonly exitCode: number;\n}\n\n/** MCP authentication is required. */\nexport interface McpAuthRequired {\n readonly type: \"mcp_auth_required\";\n readonly serverName: string;\n readonly authUrl: string;\n readonly message: string;\n readonly state: string;\n}\n\n/** MCP authentication completed. */\nexport interface McpAuthCompleted {\n readonly type: \"mcp_auth_completed\";\n readonly serverName: string;\n readonly outcome: McpAuthOutcome;\n readonly message: string;\n}\n\n/** An error event from the droid process. */\nexport interface ErrorEvent {\n readonly type: \"error\";\n readonly message: string;\n readonly errorType: string;\n readonly timestamp: string;\n}\n\n/** Sentinel yielded when the agent turn finishes (returns to Idle). */\nexport interface TurnComplete {\n readonly type: \"turn_complete\";\n readonly tokenUsage: TokenUsageUpdate | null;\n}\n\n// ---------------------------------------------------------------------------\n// DroidMessage union\n// ---------------------------------------------------------------------------\n\n/** Discriminated union of all 22 stream message types. */\nexport type DroidMessage =\n | AssistantTextDelta\n | ThinkingTextDelta\n | ToolUse\n | ToolResult\n | ToolProgress\n | WorkingStateChanged\n | TokenUsageUpdate\n | CreateMessage\n | PermissionResolved\n | SettingsUpdated\n | SessionTitleUpdated\n | McpStatusChanged\n | MissionStateChanged\n | MissionFeaturesChanged\n | MissionProgressEntry\n | MissionHeartbeat\n | MissionWorkerStarted\n | MissionWorkerCompleted\n | McpAuthRequired\n | McpAuthCompleted\n | ErrorEvent\n | TurnComplete;\n\n// ---------------------------------------------------------------------------\n// Notification payload type (matches SessionNotificationPayload)\n// ---------------------------------------------------------------------------\n\n/**\n * A notification payload object as received from the protocol layer.\n * Must have at least a `type` string field. Other properties are\n * notification-type-specific.\n */\ninterface NotificationPayload {\n type: string;\n [key: string]: unknown;\n}\n\n// ---------------------------------------------------------------------------\n// Converter: notification → DroidMessage(s)\n// ---------------------------------------------------------------------------\n\n/**\n * Convert a server session notification payload to the corresponding\n * DroidMessage(s).\n *\n * For `create_message` notifications containing tool_use content blocks,\n * a list of ToolUse messages is returned (one per tool_use block), followed\n * by a single CreateMessage. For all other notification types a single\n * DroidMessage is returned, or `null` if the notification type is unknown.\n *\n * Unknown notification types return `null` and log a warning to the console.\n *\n * @param notification - A notification payload from `SessionNotification.params.notification`.\n * @returns A single DroidMessage, an array of DroidMessages, or `null` for unknown types.\n */\nexport function convertNotificationToStreamMessage(\n notification: NotificationPayload,\n): DroidMessage | DroidMessage[] | null {\n switch (notification.type) {\n case SessionNotificationType.ASSISTANT_TEXT_DELTA:\n return {\n type: \"assistant_text_delta\",\n messageId: notification.messageId as string,\n blockIndex: notification.blockIndex as number,\n text: notification.textDelta as string,\n };\n\n case SessionNotificationType.THINKING_TEXT_DELTA:\n return {\n type: \"thinking_text_delta\",\n messageId: notification.messageId as string,\n blockIndex: notification.blockIndex as number,\n text: notification.textDelta as string,\n };\n\n case SessionNotificationType.TOOL_RESULT:\n return {\n type: \"tool_result\",\n toolUseId: notification.toolUseId as string,\n content: normalizeToolResultContent(notification.content),\n isError: Boolean(notification.isError),\n };\n\n case SessionNotificationType.TOOL_PROGRESS_UPDATE: {\n const update = notification.update as ToolProgressUpdate;\n const text = update?.text ?? update?.status ?? update?.details ?? \"\";\n return {\n type: \"tool_progress\",\n toolUseId: notification.toolUseId as string,\n toolName: notification.toolName as string,\n content: text,\n update,\n };\n }\n\n case SessionNotificationType.DROID_WORKING_STATE_CHANGED:\n return {\n type: \"working_state_changed\",\n state: notification.newState as DroidWorkingState,\n };\n\n case SessionNotificationType.SESSION_TOKEN_USAGE_CHANGED: {\n const tu = notification.tokenUsage as TokenUsage;\n return {\n type: \"token_usage_update\",\n inputTokens: tu.inputTokens,\n outputTokens: tu.outputTokens,\n cacheReadTokens: tu.cacheReadTokens,\n cacheWriteTokens: tu.cacheCreationTokens,\n thinkingTokens: tu.thinkingTokens,\n };\n }\n\n case SessionNotificationType.CREATE_MESSAGE: {\n const msg = notification.message as {\n id: string;\n role: string;\n content: Array<{ type: string; id?: string; name?: string; input?: Record<string, unknown>; [key: string]: unknown }>;\n };\n const messages: DroidMessage[] = [];\n\n // Extract ToolUse messages from tool_use content blocks\n if (msg.content && Array.isArray(msg.content)) {\n for (const block of msg.content) {\n if (block.type === \"tool_use\") {\n messages.push({\n type: \"tool_use\",\n toolName: block.name as string,\n toolInput: (block.input ?? {}) as Record<string, unknown>,\n toolUseId: block.id as string,\n });\n }\n }\n }\n\n // Always emit CreateMessage\n messages.push({\n type: \"create_message\",\n messageId: msg.id,\n role: msg.role,\n content: msg.content ?? [],\n parentId: notification.parentId as string | undefined,\n });\n\n return messages;\n }\n\n case SessionNotificationType.ERROR:\n return {\n type: \"error\",\n message: notification.message as string,\n errorType: notification.errorType as string,\n timestamp: notification.timestamp as string,\n };\n\n case SessionNotificationType.PERMISSION_RESOLVED:\n return {\n type: \"permission_resolved\",\n requestId: notification.requestId as string,\n toolUseIds: notification.toolUseIds as string[],\n selectedOption: notification.selectedOption as ToolConfirmationOutcome,\n };\n\n case SessionNotificationType.SETTINGS_UPDATED:\n return {\n type: \"settings_updated\",\n settings: notification.settings as SettingsUpdatedPayload,\n };\n\n case SessionNotificationType.SESSION_TITLE_UPDATED:\n return {\n type: \"session_title_updated\",\n title: notification.title as string,\n };\n\n case SessionNotificationType.MCP_STATUS_CHANGED:\n return {\n type: \"mcp_status_changed\",\n servers: notification.servers as McpServerStatusInfo[],\n summary: notification.summary as McpStatusSummary,\n };\n\n case SessionNotificationType.MISSION_STATE_CHANGED:\n return {\n type: \"mission_state_changed\",\n state: notification.state as MissionState,\n };\n\n case SessionNotificationType.MISSION_FEATURES_CHANGED:\n return {\n type: \"mission_features_changed\",\n features: notification.features as MissionFeature[],\n };\n\n case SessionNotificationType.MISSION_PROGRESS_ENTRY:\n return {\n type: \"mission_progress_entry\",\n progressLog: notification.progressLog as ProgressLogEntry[],\n };\n\n case SessionNotificationType.MISSION_HEARTBEAT:\n return {\n type: \"mission_heartbeat\",\n timestamp: notification.timestamp as string,\n };\n\n case SessionNotificationType.MISSION_WORKER_STARTED:\n return {\n type: \"mission_worker_started\",\n workerSessionId: notification.workerSessionId as string,\n };\n\n case SessionNotificationType.MISSION_WORKER_COMPLETED:\n return {\n type: \"mission_worker_completed\",\n workerSessionId: notification.workerSessionId as string,\n exitCode: notification.exitCode as number,\n };\n\n case SessionNotificationType.MCP_AUTH_REQUIRED:\n return {\n type: \"mcp_auth_required\",\n serverName: notification.serverName as string,\n authUrl: notification.authUrl as string,\n message: notification.message as string,\n state: notification.state as string,\n };\n\n case SessionNotificationType.MCP_AUTH_COMPLETED:\n return {\n type: \"mcp_auth_completed\",\n serverName: notification.serverName as string,\n outcome: notification.outcome as McpAuthOutcome,\n message: notification.message as string,\n };\n\n default:\n // Unknown notification type — log warning and return null\n console.warn(\n `[droid-sdk] Unknown notification type: ${String(notification.type)}`,\n );\n return null;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Working state tracker for TurnComplete emission\n// ---------------------------------------------------------------------------\n\n/**\n * Tracks working state transitions to detect when an agent turn completes\n * (transitions from a non-idle state back to idle).\n *\n * Each `stream()` call should create a fresh StreamStateTracker so that\n * multi-turn sessions track state independently.\n *\n * Rules:\n * - TurnComplete is emitted when state goes non-idle → idle\n * - Initial idle does NOT emit TurnComplete\n * - TurnComplete carries the last-seen TokenUsageUpdate (or null)\n */\nexport class StreamStateTracker {\n /** Whether we have ever seen a non-idle state. */\n private hasBeenNonIdle = false;\n\n /** Last-seen token usage update (to attach to TurnComplete). */\n private lastTokenUsage: TokenUsageUpdate | null = null;\n\n /**\n * Process a DroidMessage and return any additional messages that should be\n * emitted (e.g. TurnComplete sentinel).\n *\n * @param message - The DroidMessage to process.\n * @returns An array of additional messages to emit (may be empty).\n */\n processMessage(message: DroidMessage): DroidMessage[] {\n const additional: DroidMessage[] = [];\n\n if (message.type === \"token_usage_update\") {\n this.lastTokenUsage = message;\n }\n\n if (message.type === \"working_state_changed\") {\n if (message.state !== DroidWorkingState.Idle) {\n this.hasBeenNonIdle = true;\n } else if (this.hasBeenNonIdle) {\n // Non-idle → Idle transition: emit TurnComplete\n additional.push({\n type: \"turn_complete\",\n tokenUsage: this.lastTokenUsage,\n });\n // Reset so that subsequent idle→idle does NOT emit duplicate TurnComplete\n this.hasBeenNonIdle = false;\n }\n // If state is Idle but we were never non-idle, do nothing\n // (initial idle does NOT emit TurnComplete)\n }\n\n return additional;\n }\n\n /**\n * Reset the tracker for a new turn/stream call.\n */\n reset(): void {\n this.hasBeenNonIdle = false;\n this.lastTokenUsage = null;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction normalizeToolResultContent(content: unknown): string | unknown[] {\n if (content == null) {\n return \"\";\n }\n if (typeof content === \"string\") {\n return content;\n }\n if (Array.isArray(content)) {\n return content as unknown[];\n }\n return String(content);\n}\n","/**\n * Top-level `query()` convenience function and supporting types.\n *\n * Provides a high-level async generator that hides the full session lifecycle\n * (spawn → connect → initialize → message → yield → close), modeled after\n * the Claude Agent SDK and the Python Droid SDK's `query()` pattern.\n *\n * @example\n * ```ts\n * import { query } from \"@factory/droid-sdk\";\n *\n * const stream = query({ prompt: \"Fix the bug in main.ts\", cwd: \"/my/project\" });\n *\n * for await (const msg of stream) {\n * if (msg.type === \"assistant_text_delta\") {\n * process.stdout.write(msg.text);\n * }\n * }\n * ```\n */\n\nimport { DroidClient } from \"./client.js\";\nimport type { ClientPermissionHandler, ClientAskUserHandler } from \"./client.js\";\nimport {\n convertNotificationToStreamMessage,\n StreamStateTracker,\n} from \"./stream.js\";\nimport type { DroidMessage } from \"./stream.js\";\nimport { ProcessTransport } from \"./transport.js\";\nimport type { DroidClientTransport, ProcessTransportOptions } from \"./types.js\";\nimport type {\n InitializeSessionRequestParams,\n} from \"./schemas/client.js\";\nimport type {\n AutonomyLevel,\n DroidInteractionMode,\n ReasoningEffort,\n} from \"./schemas/enums.js\";\n\n// ---------------------------------------------------------------------------\n// QueryOptions\n// ---------------------------------------------------------------------------\n\n/**\n * Options for the `query()` convenience function.\n */\nexport interface QueryOptions {\n /** The user prompt to send. */\n prompt: string;\n\n /** Working directory for the session. Defaults to `\".\"`. */\n cwd?: string;\n\n /** Machine identifier. Defaults to `\"default\"`. */\n machineId?: string;\n\n /** LLM model identifier. */\n modelId?: string;\n\n /** Autonomy level for the session. */\n autonomyLevel?: AutonomyLevel;\n\n /** Interaction mode for the session. */\n interactionMode?: DroidInteractionMode;\n\n /** Reasoning effort level. */\n reasoningEffort?: ReasoningEffort;\n\n /** MCP server configurations for the session. */\n mcpServers?: Array<Record<string, unknown>>;\n\n /** Additional tool IDs to enable. */\n enabledToolIds?: string[];\n\n /** Path to the `droid` executable. Defaults to `\"droid\"`. */\n execPath?: string;\n\n /** Additional arguments for the droid executable. */\n execArgs?: string[];\n\n /** Additional environment variables for the subprocess. */\n env?: Record<string, string>;\n\n /** Permission handler for tool confirmations. */\n permissionHandler?: ClientPermissionHandler;\n\n /** Ask-user handler for interactive questions. */\n askUserHandler?: ClientAskUserHandler;\n\n /**\n * An already-connected transport to use instead of spawning a process.\n * When provided, `execPath`, `execArgs`, `env`, and `cwd` (for transport) are ignored.\n * The transport will still be closed when the query completes.\n */\n transport?: DroidClientTransport;\n\n /** AbortSignal for external cancellation. */\n abortSignal?: AbortSignal;\n}\n\n// ---------------------------------------------------------------------------\n// DroidQuery\n// ---------------------------------------------------------------------------\n\n/**\n * An async generator of {@link DroidMessage} events with additional control\n * methods for interrupting or aborting the query.\n *\n * Extends AsyncGenerator<DroidMessage> with:\n * - `interrupt()` — sends an interrupt request to pause the agent gracefully\n * - `abort()` — forcefully closes the transport/kills the subprocess\n * - `sessionId` — the session ID assigned during initialization\n */\nexport interface DroidQuery extends AsyncGenerator<DroidMessage, void, undefined> {\n /** Send an interrupt_session request. The stream continues until the agent stops. */\n interrupt(): Promise<void>;\n\n /** Forcefully close the transport. The generator terminates immediately. */\n abort(): void;\n\n /**\n * The session ID, available after initialization.\n * Returns `null` if the session hasn't been initialized yet.\n */\n readonly sessionId: string | null;\n}\n\n// ---------------------------------------------------------------------------\n// query() implementation\n// ---------------------------------------------------------------------------\n\n/**\n * Top-level convenience function that spawns a droid process, initializes\n * a session, sends the user prompt, and yields {@link DroidMessage} events.\n *\n * All resources (transport, client) are cleaned up in a finally block,\n * even if the caller breaks out of the generator early or an error occurs.\n *\n * @param options - Query configuration including the prompt and optional session settings.\n * @returns A {@link DroidQuery} async generator with interrupt/abort/sessionId.\n *\n * @example\n * ```ts\n * const stream = query({ prompt: \"Hello\", cwd: \"/tmp\" });\n *\n * for await (const msg of stream) {\n * if (msg.type === \"assistant_text_delta\") {\n * process.stdout.write(msg.text);\n * }\n * if (msg.type === \"turn_complete\") {\n * console.log(\"\\nDone! Tokens:\", msg.tokenUsage);\n * }\n * }\n *\n * // Or with interrupt:\n * const q = query({ prompt: \"Write a long essay\" });\n * setTimeout(() => q.interrupt(), 5000);\n * for await (const msg of q) { ... }\n * ```\n */\nexport function query(options: QueryOptions): DroidQuery {\n let transport: DroidClientTransport | null = null;\n let client: DroidClient | null = null;\n let sessionId: string | null = null;\n let aborted = false;\n\n // Message queue for notification → stream bridging\n const messageQueue: DroidMessage[] = [];\n let resolveWaiting: (() => void) | null = null;\n let streamDone = false;\n\n /**\n * Push a message into the queue and wake the consumer if waiting.\n */\n function enqueueMessage(msg: DroidMessage): void {\n messageQueue.push(msg);\n if (resolveWaiting) {\n const resolve = resolveWaiting;\n resolveWaiting = null;\n resolve();\n }\n }\n\n /**\n * Signal that streaming is complete.\n */\n function signalDone(): void {\n streamDone = true;\n if (resolveWaiting) {\n const resolve = resolveWaiting;\n resolveWaiting = null;\n resolve();\n }\n }\n\n /**\n * The core async generator that drives the query lifecycle.\n */\n async function* generateMessages(): AsyncGenerator<DroidMessage, void, undefined> {\n // 1. Create transport\n if (options.transport) {\n transport = options.transport;\n } else {\n const transportOptions: ProcessTransportOptions = {\n execPath: options.execPath,\n execArgs: options.execArgs,\n cwd: options.cwd,\n env: options.env,\n };\n const processTransport = new ProcessTransport(transportOptions);\n await processTransport.connect();\n transport = processTransport;\n }\n\n // 2. Create client\n client = new DroidClient({ transport });\n\n // 3. Set up handlers if provided\n if (options.permissionHandler) {\n client.setPermissionHandler(options.permissionHandler);\n }\n if (options.askUserHandler) {\n client.setAskUserHandler(options.askUserHandler);\n }\n\n // 4. Set up notification → stream bridging\n const stateTracker = new StreamStateTracker();\n\n client.onNotification((notification) => {\n // Extract the inner notification payload\n const params = notification[\"params\"] as Record<string, unknown> | undefined;\n const innerNotification = params?.[\"notification\"] as Record<string, unknown> | undefined;\n\n if (!innerNotification) {\n return;\n }\n\n const converted = convertNotificationToStreamMessage(\n innerNotification as { type: string; [key: string]: unknown },\n );\n\n if (converted === null) {\n return;\n }\n\n const messages = Array.isArray(converted) ? converted : [converted];\n\n for (const msg of messages) {\n enqueueMessage(msg);\n\n // Check for TurnComplete via state tracker\n const additional = stateTracker.processMessage(msg);\n for (const extra of additional) {\n enqueueMessage(extra);\n if (extra.type === \"turn_complete\") {\n signalDone();\n }\n }\n }\n });\n\n // 5. Initialize session\n const initParams: Record<string, unknown> = {\n machineId: options.machineId ?? \"default\",\n cwd: options.cwd ?? \".\",\n };\n\n if (options.modelId !== undefined) {\n initParams.modelId = options.modelId;\n }\n if (options.autonomyLevel !== undefined) {\n initParams.autonomyLevel = options.autonomyLevel;\n }\n if (options.interactionMode !== undefined) {\n initParams.interactionMode = options.interactionMode;\n }\n if (options.reasoningEffort !== undefined) {\n initParams.reasoningEffort = options.reasoningEffort;\n }\n if (options.mcpServers !== undefined) {\n initParams.mcpServers = options.mcpServers;\n }\n if (options.enabledToolIds !== undefined) {\n initParams.enabledToolIds = options.enabledToolIds;\n }\n\n const initResult = await client.initializeSession(\n initParams as unknown as InitializeSessionRequestParams,\n );\n sessionId = initResult.sessionId;\n\n // 6. Send the user message\n await client.addUserMessage({ text: options.prompt });\n\n // 7. Yield messages from the queue until done\n try {\n while (true) {\n // If aborted externally, stop\n if (aborted) {\n return;\n }\n\n // Process any queued messages\n while (messageQueue.length > 0) {\n const msg = messageQueue.shift()!;\n yield msg;\n\n if (msg.type === \"turn_complete\") {\n return;\n }\n }\n\n // Check if we're done (TurnComplete already yielded above)\n if (streamDone && messageQueue.length === 0) {\n return;\n }\n\n // Wait for more messages\n await new Promise<void>((resolve) => {\n resolveWaiting = resolve;\n });\n }\n } finally {\n // Cleanup is handled by the wrapper\n }\n }\n\n // Create the underlying generator\n const generator = generateMessages();\n\n // Wrap it with cleanup in finally\n async function* wrappedGenerator(): AsyncGenerator<DroidMessage, void, undefined> {\n try {\n yield* generator;\n } finally {\n // Always close transport on exit (even on early break)\n if (client) {\n try {\n await client.close();\n } catch {\n // Best-effort cleanup\n }\n client = null;\n } else if (transport) {\n try {\n await transport.close();\n } catch {\n // Best-effort cleanup\n }\n }\n transport = null;\n }\n }\n\n const wrapped = wrappedGenerator();\n\n // Create the DroidQuery interface by adding control methods to the generator.\n // Use Object.defineProperties so that `sessionId` is a live getter\n // (Object.assign would snapshot the value at assignment time).\n const droidQuery = wrapped as DroidQuery;\n\n Object.defineProperties(droidQuery, {\n interrupt: {\n value: async function interrupt(): Promise<void> {\n if (client && !aborted) {\n await client.interruptSession();\n }\n },\n writable: false,\n enumerable: true,\n },\n abort: {\n value: function abort(): void {\n aborted = true;\n signalDone();\n if (client) {\n // Fire-and-forget close\n void client.close().catch(() => {});\n client = null;\n } else if (transport) {\n void transport.close().catch(() => {});\n }\n transport = null;\n },\n writable: false,\n enumerable: true,\n },\n sessionId: {\n get(): string | null {\n return sessionId;\n },\n enumerable: true,\n },\n });\n\n return droidQuery;\n}\n","/**\n * Multi-turn session API for the Factory Droid SDK.\n *\n * Provides `createSession()` and `resumeSession()` factory functions that\n * return a {@link DroidSession} for multi-turn conversations with the droid\n * process. Each session manages its own transport and client lifecycle.\n *\n * @example\n * ```ts\n * import { createSession } from \"@factory/droid-sdk\";\n *\n * const session = await createSession({ cwd: \"/my/project\" });\n *\n * // Streaming turn\n * for await (const msg of session.stream(\"Fix the bug in main.ts\")) {\n * if (msg.type === \"assistant_text_delta\") {\n * process.stdout.write(msg.text);\n * }\n * }\n *\n * // Non-streaming turn\n * const result = await session.send(\"Now write tests for it\");\n * console.log(result.text);\n *\n * await session.close();\n * ```\n */\n\nimport { DroidClient } from \"./client.js\";\nimport type {\n ClientAskUserHandler,\n ClientPermissionHandler,\n} from \"./client.js\";\nimport { ConnectionError } from \"./errors.js\";\nimport {\n convertNotificationToStreamMessage,\n StreamStateTracker,\n} from \"./stream.js\";\nimport type { DroidMessage, TokenUsageUpdate } from \"./stream.js\";\nimport { ProcessTransport } from \"./transport.js\";\nimport type { DroidClientTransport, ProcessTransportOptions } from \"./types.js\";\nimport type {\n AddMcpServerRequestParams,\n AddMcpServerResult,\n AuthenticateMcpServerRequestParams,\n AuthenticateMcpServerResult,\n InitializeSessionRequestParams,\n InitializeSessionResult,\n ListMcpServersResult,\n ListMcpToolsResult,\n ListSkillsResult,\n LoadSessionRequestParams,\n LoadSessionResult,\n RemoveMcpServerRequestParams,\n RemoveMcpServerResult,\n ToggleMcpServerRequestParams,\n ToggleMcpServerResult,\n UpdateSessionSettingsRequestParams,\n UpdateSessionSettingsResult,\n} from \"./schemas/client.js\";\nimport type {\n AutonomyLevel,\n DroidInteractionMode,\n ReasoningEffort,\n} from \"./schemas/enums.js\";\nimport type { NotificationCallback, NotificationFilter } from \"./protocol.js\";\n\n// ---------------------------------------------------------------------------\n// DroidResult\n// ---------------------------------------------------------------------------\n\n/**\n * Aggregated result from a non-streaming `session.send()` call.\n *\n * Contains the concatenated assistant text, all messages received during\n * the turn, and the final token usage.\n */\nexport interface DroidResult {\n /** Concatenated text from all `assistant_text_delta` messages. */\n text: string;\n\n /** All DroidMessage objects received during the turn. */\n messages: DroidMessage[];\n\n /** Final token usage from the turn, or null if no token usage was reported. */\n tokenUsage: TokenUsageUpdate | null;\n}\n\n// ---------------------------------------------------------------------------\n// SessionOptions\n// ---------------------------------------------------------------------------\n\n/**\n * Options for `createSession()`.\n */\nexport interface CreateSessionOptions {\n /** Working directory for the session. Defaults to `\".\"`. */\n cwd?: string;\n\n /** Machine identifier. Defaults to `\"default\"`. */\n machineId?: string;\n\n /** LLM model identifier. */\n modelId?: string;\n\n /** Autonomy level for the session. */\n autonomyLevel?: AutonomyLevel;\n\n /** Interaction mode for the session. */\n interactionMode?: DroidInteractionMode;\n\n /** Reasoning effort level. */\n reasoningEffort?: ReasoningEffort;\n\n /** MCP server configurations for the session. */\n mcpServers?: Array<Record<string, unknown>>;\n\n /** Additional tool IDs to enable. */\n enabledToolIds?: string[];\n\n /** Path to the `droid` executable. Defaults to `\"droid\"`. */\n execPath?: string;\n\n /** Additional arguments for the droid executable. */\n execArgs?: string[];\n\n /** Additional environment variables for the subprocess. */\n env?: Record<string, string>;\n\n /** Permission handler for tool confirmations. */\n permissionHandler?: ClientPermissionHandler;\n\n /** Ask-user handler for interactive questions. */\n askUserHandler?: ClientAskUserHandler;\n\n /**\n * An already-connected transport to use instead of spawning a process.\n * When provided, `execPath`, `execArgs`, `env`, and `cwd` (for transport) are ignored.\n */\n transport?: DroidClientTransport;\n}\n\n/**\n * Options for `resumeSession()`.\n */\nexport interface ResumeSessionOptions {\n /** Path to the `droid` executable. Defaults to `\"droid\"`. */\n execPath?: string;\n\n /** Additional arguments for the droid executable. */\n execArgs?: string[];\n\n /** Working directory for the subprocess. */\n cwd?: string;\n\n /** Additional environment variables for the subprocess. */\n env?: Record<string, string>;\n\n /** MCP server configurations. */\n mcpServers?: Array<Record<string, unknown>>;\n\n /** Permission handler for tool confirmations. */\n permissionHandler?: ClientPermissionHandler;\n\n /** Ask-user handler for interactive questions. */\n askUserHandler?: ClientAskUserHandler;\n\n /**\n * An already-connected transport to use instead of spawning a process.\n */\n transport?: DroidClientTransport;\n}\n\n/**\n * Options for `session.stream()` and `session.send()`.\n */\nexport interface MessageOptions {\n /** Optional images to include with the message. */\n images?: Array<Record<string, unknown>>;\n\n /** Optional files to include with the message. */\n files?: Array<Record<string, unknown>>;\n}\n\n// ---------------------------------------------------------------------------\n// DroidSession\n// ---------------------------------------------------------------------------\n\n/**\n * A multi-turn session connected to a droid process.\n *\n * Provides methods for sending messages (streaming and non-streaming),\n * managing MCP servers, updating settings, and controlling the session\n * lifecycle.\n *\n * Create instances via {@link createSession} or {@link resumeSession}.\n */\nexport class DroidSession {\n private _client: DroidClient;\n private _sessionId: string;\n private _initResult: InitializeSessionResult | LoadSessionResult;\n private _closed = false;\n\n /** @internal */\n constructor(\n client: DroidClient,\n sessionId: string,\n initResult: InitializeSessionResult | LoadSessionResult,\n ) {\n this._client = client;\n this._sessionId = sessionId;\n this._initResult = initResult;\n }\n\n // ------------------------------------------------------------------\n // Properties\n // ------------------------------------------------------------------\n\n /** The session ID. */\n get sessionId(): string {\n return this._sessionId;\n }\n\n /** The result from session initialization or loading. */\n get initResult(): InitializeSessionResult | LoadSessionResult {\n return this._initResult;\n }\n\n // ------------------------------------------------------------------\n // Messaging\n // ------------------------------------------------------------------\n\n /**\n * Send a message and return a streaming async generator of DroidMessage events.\n *\n * The generator yields messages until a TurnComplete event is received,\n * signaling the end of the agent's turn.\n *\n * @param text - The user message text.\n * @param options - Optional images/files to include.\n * @returns An async generator yielding DroidMessage events.\n */\n async *stream(\n text: string,\n options?: MessageOptions,\n ): AsyncGenerator<DroidMessage, void, undefined> {\n this._ensureNotClosed();\n\n // Message queue for notification → stream bridging\n const messageQueue: DroidMessage[] = [];\n let resolveWaiting: (() => void) | null = null;\n let streamDone = false;\n\n function enqueueMessage(msg: DroidMessage): void {\n messageQueue.push(msg);\n if (resolveWaiting) {\n const resolve = resolveWaiting;\n resolveWaiting = null;\n resolve();\n }\n }\n\n function signalDone(): void {\n streamDone = true;\n if (resolveWaiting) {\n const resolve = resolveWaiting;\n resolveWaiting = null;\n resolve();\n }\n }\n\n // Fresh state tracker for this turn\n const stateTracker = new StreamStateTracker();\n\n // Subscribe to notifications for this turn\n const unsubscribe = this._client.onNotification((notification) => {\n const params = notification[\"params\"] as Record<string, unknown> | undefined;\n const innerNotification = params?.[\"notification\"] as Record<string, unknown> | undefined;\n\n if (!innerNotification) {\n return;\n }\n\n const converted = convertNotificationToStreamMessage(\n innerNotification as { type: string; [key: string]: unknown },\n );\n\n if (converted === null) {\n return;\n }\n\n const messages = Array.isArray(converted) ? converted : [converted];\n\n for (const msg of messages) {\n enqueueMessage(msg);\n\n const additional = stateTracker.processMessage(msg);\n for (const extra of additional) {\n enqueueMessage(extra);\n if (extra.type === \"turn_complete\") {\n signalDone();\n }\n }\n }\n });\n\n try {\n // Send the user message\n await this._client.addUserMessage({\n text,\n images: options?.images as never,\n files: options?.files as never,\n });\n\n // Yield messages until TurnComplete\n while (true) {\n while (messageQueue.length > 0) {\n const msg = messageQueue.shift()!;\n yield msg;\n\n if (msg.type === \"turn_complete\") {\n return;\n }\n }\n\n if (streamDone && messageQueue.length === 0) {\n return;\n }\n\n await new Promise<void>((resolve) => {\n resolveWaiting = resolve;\n });\n }\n } finally {\n unsubscribe();\n }\n }\n\n /**\n * Send a message and collect the complete response (non-streaming).\n *\n * Internally consumes all stream messages and returns an aggregated\n * {@link DroidResult} with the concatenated text, all messages, and\n * final token usage.\n *\n * @param text - The user message text.\n * @param options - Optional images/files to include.\n * @returns Aggregated result with text, messages, and token usage.\n */\n async send(\n text: string,\n options?: MessageOptions,\n ): Promise<DroidResult> {\n this._ensureNotClosed();\n\n const messages: DroidMessage[] = [];\n let fullText = \"\";\n let lastTokenUsage: TokenUsageUpdate | null = null;\n\n for await (const msg of this.stream(text, options)) {\n messages.push(msg);\n\n if (msg.type === \"assistant_text_delta\") {\n fullText += msg.text;\n }\n\n if (msg.type === \"token_usage_update\") {\n lastTokenUsage = msg;\n }\n\n if (msg.type === \"turn_complete\" && msg.tokenUsage) {\n lastTokenUsage = msg.tokenUsage;\n }\n }\n\n return {\n text: fullText,\n messages,\n tokenUsage: lastTokenUsage,\n };\n }\n\n // ------------------------------------------------------------------\n // Session control\n // ------------------------------------------------------------------\n\n /**\n * Interrupt the current agent turn.\n *\n * Sends an interrupt request. The agent will stop after completing\n * its current operation.\n */\n async interrupt(): Promise<void> {\n this._ensureNotClosed();\n await this._client.interruptSession();\n }\n\n /**\n * Close the session and release all resources.\n *\n * Closes the underlying transport and rejects any pending requests.\n * After close, the session cannot be used.\n */\n async close(): Promise<void> {\n if (this._closed) {\n return;\n }\n this._closed = true;\n await this._client.close();\n }\n\n // ------------------------------------------------------------------\n // Settings\n // ------------------------------------------------------------------\n\n /**\n * Update session settings (model, reasoning effort, autonomy, etc.).\n *\n * @param params - Partial settings to update.\n */\n async updateSettings(\n params: Partial<UpdateSessionSettingsRequestParams>,\n ): Promise<UpdateSessionSettingsResult> {\n this._ensureNotClosed();\n return this._client.updateSessionSettings(params);\n }\n\n // ------------------------------------------------------------------\n // MCP methods\n // ------------------------------------------------------------------\n\n /**\n * Add an MCP server to the session.\n */\n async addMcpServer(\n params: AddMcpServerRequestParams,\n ): Promise<AddMcpServerResult> {\n this._ensureNotClosed();\n return this._client.addMcpServer(params);\n }\n\n /**\n * Remove an MCP server from the session.\n */\n async removeMcpServer(\n params: RemoveMcpServerRequestParams,\n ): Promise<RemoveMcpServerResult> {\n this._ensureNotClosed();\n return this._client.removeMcpServer(params);\n }\n\n /**\n * Toggle an MCP server on or off.\n */\n async toggleMcpServer(\n params: ToggleMcpServerRequestParams,\n ): Promise<ToggleMcpServerResult> {\n this._ensureNotClosed();\n return this._client.toggleMcpServer(params);\n }\n\n /**\n * List MCP servers and their status.\n */\n async listMcpServers(): Promise<ListMcpServersResult> {\n this._ensureNotClosed();\n return this._client.listMcpServers();\n }\n\n /**\n * List available MCP tools.\n */\n async listMcpTools(): Promise<ListMcpToolsResult> {\n this._ensureNotClosed();\n return this._client.listMcpTools();\n }\n\n /**\n * Authenticate an MCP server (OAuth flow).\n */\n async authenticateMcpServer(\n params: AuthenticateMcpServerRequestParams,\n ): Promise<AuthenticateMcpServerResult> {\n this._ensureNotClosed();\n return this._client.authenticateMcpServer(params);\n }\n\n // ------------------------------------------------------------------\n // Skills\n // ------------------------------------------------------------------\n\n /**\n * List available skills.\n */\n async listSkills(): Promise<ListSkillsResult> {\n this._ensureNotClosed();\n return this._client.listSkills();\n }\n\n // ------------------------------------------------------------------\n // Notification subscription\n // ------------------------------------------------------------------\n\n /**\n * Register a callback for incoming notification messages.\n *\n * @param callback - Invoked with the notification object.\n * @param filter - Optional filter to only receive specific notification types.\n * @returns An unsubscribe function.\n */\n onNotification(\n callback: NotificationCallback,\n filter?: NotificationFilter,\n ): () => void {\n return this._client.onNotification(callback, filter);\n }\n\n // ------------------------------------------------------------------\n // Internal\n // ------------------------------------------------------------------\n\n private _ensureNotClosed(): void {\n if (this._closed) {\n throw new ConnectionError(\n \"Session has been closed. Create a new session to continue.\",\n );\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Factory functions\n// ---------------------------------------------------------------------------\n\n/**\n * Create a new droid session.\n *\n * Spawns a transport, creates a client, initializes a new session, and\n * returns a {@link DroidSession} ready for multi-turn interaction.\n *\n * @param options - Session configuration.\n * @returns A connected DroidSession.\n *\n * @example\n * ```ts\n * const session = await createSession({ cwd: \"/my/project\" });\n * const result = await session.send(\"List all TypeScript files\");\n * console.log(result.text);\n * await session.close();\n * ```\n */\nexport async function createSession(\n options: CreateSessionOptions = {},\n): Promise<DroidSession> {\n // 1. Create transport\n let transport: DroidClientTransport;\n if (options.transport) {\n transport = options.transport;\n } else {\n const transportOptions: ProcessTransportOptions = {\n execPath: options.execPath,\n execArgs: options.execArgs,\n cwd: options.cwd,\n env: options.env,\n };\n const processTransport = new ProcessTransport(transportOptions);\n await processTransport.connect();\n transport = processTransport;\n }\n\n // 2. Create client\n const client = new DroidClient({ transport });\n\n // 3. Set up handlers\n if (options.permissionHandler) {\n client.setPermissionHandler(options.permissionHandler);\n }\n if (options.askUserHandler) {\n client.setAskUserHandler(options.askUserHandler);\n }\n\n // 4. Initialize session\n const initParams: Record<string, unknown> = {\n machineId: options.machineId ?? \"default\",\n cwd: options.cwd ?? \".\",\n };\n\n if (options.modelId !== undefined) {\n initParams.modelId = options.modelId;\n }\n if (options.autonomyLevel !== undefined) {\n initParams.autonomyLevel = options.autonomyLevel;\n }\n if (options.interactionMode !== undefined) {\n initParams.interactionMode = options.interactionMode;\n }\n if (options.reasoningEffort !== undefined) {\n initParams.reasoningEffort = options.reasoningEffort;\n }\n if (options.mcpServers !== undefined) {\n initParams.mcpServers = options.mcpServers;\n }\n if (options.enabledToolIds !== undefined) {\n initParams.enabledToolIds = options.enabledToolIds;\n }\n\n try {\n const initResult = await client.initializeSession(\n initParams as unknown as InitializeSessionRequestParams,\n );\n\n return new DroidSession(client, initResult.sessionId, initResult);\n } catch (error) {\n // Clean up on init failure\n try {\n await client.close();\n } catch {\n // Best-effort cleanup\n }\n throw error;\n }\n}\n\n/**\n * Resume an existing droid session.\n *\n * Spawns a transport, creates a client, loads the existing session by ID,\n * and returns a {@link DroidSession} ready for multi-turn interaction.\n *\n * @param sessionId - The ID of the session to resume.\n * @param options - Optional configuration for the transport and handlers.\n * @returns A connected DroidSession.\n * @throws {SessionNotFoundError} If the session ID does not exist.\n *\n * @example\n * ```ts\n * const session = await resumeSession(\"sess-abc123\");\n * const result = await session.send(\"Continue where we left off\");\n * console.log(result.text);\n * await session.close();\n * ```\n */\nexport async function resumeSession(\n sessionId: string,\n options: ResumeSessionOptions = {},\n): Promise<DroidSession> {\n // 1. Create transport\n let transport: DroidClientTransport;\n if (options.transport) {\n transport = options.transport;\n } else {\n const transportOptions: ProcessTransportOptions = {\n execPath: options.execPath,\n execArgs: options.execArgs,\n cwd: options.cwd,\n env: options.env,\n };\n const processTransport = new ProcessTransport(transportOptions);\n await processTransport.connect();\n transport = processTransport;\n }\n\n // 2. Create client\n const client = new DroidClient({ transport });\n\n // 3. Set up handlers\n if (options.permissionHandler) {\n client.setPermissionHandler(options.permissionHandler);\n }\n if (options.askUserHandler) {\n client.setAskUserHandler(options.askUserHandler);\n }\n\n // 4. Load session\n const loadParams: LoadSessionRequestParams = {\n sessionId,\n mcpServers: options.mcpServers as never,\n };\n\n try {\n const loadResult = await client.loadSession(loadParams);\n return new DroidSession(client, sessionId, loadResult);\n } catch (error) {\n // Clean up on load failure\n try {\n await client.close();\n } catch {\n // Best-effort cleanup\n }\n throw error;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","names":["DroidServerMethod","DroidClientMethod","SessionNotificationType","ToolConfirmationOutcome","ToolConfirmationType","DroidWorkingState","DroidErrorType","McpServerStatus","McpServerType","McpStatus","McpAuthOutcome","DecompSessionType","MissionState","FeatureStatus","FeatureSuccessState","IssueSeverity","DismissalType","ProgressLogEntryType","DroidInteractionMode","AutonomyLevel","AutonomyMode","ReasoningEffort","ModelProvider","JsonRpcErrorCode","JsonRpcMessageType","SettingsLevel","SkillLocation","import_zod","import_zod","import_zod","import_zod","import_zod","uuidv4"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/schemas/enums.ts","../src/schemas/constants.ts","../src/schemas/shared.ts","../src/schemas/session-metadata.ts","../src/schemas/client.ts","../src/schemas/mcp.ts","../src/schemas/messages.ts","../src/schemas/mission.ts","../src/schemas/server.ts","../src/constants.ts","../src/errors.ts","../src/transport.ts","../src/utils.ts","../src/protocol.ts","../src/client.ts","../src/stream.ts","../src/helpers.ts","../src/mcp.ts","../src/query.ts","../src/session.ts","../src/run.ts","../src/session-discovery.ts"],"sourcesContent":["export * from './schemas/index.js';\n\nexport { SDK_TAG, SDK_VERSION } from './constants.js';\n\nexport * from './errors.js';\n\nexport * from './types.js';\nexport { ProcessTransport } from './transport.js';\n\nexport { ProtocolEngine } from './protocol.js';\nexport type {\n AskUserHandler,\n NotificationCallback,\n NotificationFilter,\n PermissionHandler,\n} from './protocol.js';\n\nexport { DroidClient } from './client.js';\nexport type {\n ClientAskUserHandler,\n ClientPermissionHandler,\n DroidClientOptions,\n} from './client.js';\n\nexport {\n convertNotificationToStreamMessage,\n DroidMessageType,\n StreamStateTracker,\n} from './stream.js';\nexport type {\n AssistantTextDelta,\n ThinkingTextDelta,\n ToolUse,\n ToolResult,\n ToolProgress,\n WorkingStateChanged,\n TokenUsageUpdate,\n CreateMessage,\n PermissionResolved,\n SettingsUpdated,\n SessionTitleUpdated,\n McpStatusChanged,\n MissionStateChanged,\n MissionFeaturesChanged,\n MissionProgressEntry,\n MissionHeartbeat,\n MissionWorkerStarted,\n MissionWorkerCompleted,\n McpAuthRequired,\n McpAuthCompleted,\n ErrorEvent,\n TurnComplete,\n DroidMessage,\n} from './stream.js';\n\nexport { query } from './query.js';\nexport type { QueryOptions, DroidQuery } from './query.js';\n\nexport { run } from './run.js';\nexport type { RunOptions } from './run.js';\n\nexport { createSdkMcpServer, tool, SdkMcpServer } from './mcp.js';\nexport type {\n DroidMcpServerConfig,\n DroidTool,\n DroidToolResult,\n SdkMcpServerOptions,\n} from './mcp.js';\n\nexport { createSession, resumeSession, DroidSession } from './session.js';\nexport type {\n CreateSessionOptions,\n ResumeSessionOptions,\n MessageOptions,\n DroidResult,\n} from './session.js';\n\nexport { listSessions } from './session-discovery.js';\n","/**\n * All protocol enums for the Factory Droid SDK.\n *\n * - packages/common/src/droid/enums.ts\n * - packages/common/src/shared/enums.ts\n * - packages/common/src/llm/enums.ts\n * - packages/common/src/settings/enums.ts\n */\n\n/** Droid server methods (client → server communication). */\nexport enum DroidServerMethod {\n INITIALIZE_SESSION = 'droid.initialize_session',\n LOAD_SESSION = 'droid.load_session',\n ADD_USER_MESSAGE = 'droid.add_user_message',\n INTERRUPT_SESSION = 'droid.interrupt_session',\n KILL_WORKER_SESSION = 'droid.kill_worker_session',\n UPDATE_SESSION_SETTINGS = 'droid.update_session_settings',\n TOGGLE_MCP_SERVER = 'droid.toggle_mcp_server',\n AUTHENTICATE_MCP_SERVER = 'droid.authenticate_mcp_server',\n CANCEL_MCP_AUTH = 'droid.cancel_mcp_auth',\n CLEAR_MCP_AUTH = 'droid.clear_mcp_auth',\n ADD_MCP_SERVER = 'droid.add_mcp_server',\n REMOVE_MCP_SERVER = 'droid.remove_mcp_server',\n LIST_MCP_REGISTRY = 'droid.list_mcp_registry',\n LIST_MCP_TOOLS = 'droid.list_mcp_tools',\n LIST_TOOLS = 'droid.list_tools',\n LIST_MCP_SERVERS = 'droid.list_mcp_servers',\n TOGGLE_MCP_TOOL = 'droid.toggle_mcp_tool',\n SUBMIT_MCP_AUTH_CODE = 'droid.submit_mcp_auth_code',\n LIST_SKILLS = 'droid.list_skills',\n SUBMIT_BUG_REPORT = 'droid.submit_bug_report',\n GET_REWIND_INFO = 'droid.get_rewind_info',\n EXECUTE_REWIND = 'droid.execute_rewind',\n COMPACT_SESSION = 'droid.compact_session',\n FORK_SESSION = 'droid.fork_session',\n RENAME_SESSION = 'droid.rename_session',\n GET_CONTEXT_STATS = 'droid.get_context_stats',\n}\n\n/** Droid client methods (server → client communication). */\nexport enum DroidClientMethod {\n SESSION_NOTIFICATION = 'droid.session_notification',\n REQUEST_PERMISSION = 'droid.request_permission',\n ASK_USER = 'droid.ask_user',\n}\n\n/** Session notification types. */\nexport enum SessionNotificationType {\n TOOL_RESULT = 'tool_result',\n TOOL_PROGRESS_UPDATE = 'tool_progress_update',\n CREATE_MESSAGE = 'create_message',\n ERROR = 'error',\n DROID_WORKING_STATE_CHANGED = 'droid_working_state_changed',\n PERMISSION_RESOLVED = 'permission_resolved',\n SETTINGS_UPDATED = 'settings_updated',\n SESSION_TITLE_UPDATED = 'session_title_updated',\n MCP_STATUS_CHANGED = 'mcp_status_changed',\n ASSISTANT_TEXT_DELTA = 'assistant_text_delta',\n THINKING_TEXT_DELTA = 'thinking_text_delta',\n SESSION_TOKEN_USAGE_CHANGED = 'session_token_usage_changed',\n MISSION_STATE_CHANGED = 'mission_state_changed',\n MISSION_FEATURES_CHANGED = 'mission_features_changed',\n MISSION_PROGRESS_ENTRY = 'mission_progress_entry',\n MISSION_HEARTBEAT = 'mission_heartbeat',\n MISSION_WORKER_STARTED = 'mission_worker_started',\n MISSION_WORKER_COMPLETED = 'mission_worker_completed',\n MCP_AUTH_REQUIRED = 'mcp_auth_required',\n MCP_AUTH_COMPLETED = 'mcp_auth_completed',\n}\n\n/** Tool confirmation outcome options (possible user responses to permission requests). */\nexport enum ToolConfirmationOutcome {\n ProceedOnce = 'proceed_once',\n ProceedAlways = 'proceed_always',\n ProceedAutoRun = 'proceed_auto_run',\n ProceedAutoRunLow = 'proceed_auto_run_low',\n ProceedAutoRunMedium = 'proceed_auto_run_medium',\n ProceedAutoRunHigh = 'proceed_auto_run_high',\n ProceedNewSession = 'proceed_new_session',\n ProceedNewSessionLow = 'proceed_new_session_low',\n ProceedNewSessionMedium = 'proceed_new_session_medium',\n ProceedNewSessionHigh = 'proceed_new_session_high',\n ProceedEdit = 'proceed_edit',\n Cancel = 'cancel',\n}\n\n/** Tool confirmation type (which tool is requesting permission). */\nexport enum ToolConfirmationType {\n Edit = 'edit',\n Execute = 'exec',\n Create = 'create',\n AskUser = 'ask_user',\n ExitSpecMode = 'exit_spec_mode',\n ProposeMission = 'propose_mission',\n StartMissionRun = 'start_mission_run',\n ApplyPatch = 'apply_patch',\n McpTool = 'mcp_tool',\n}\n\n/** Droid working state (represents what the agent is currently doing). */\nexport enum DroidWorkingState {\n Idle = 'idle',\n StreamingAssistantMessage = 'streaming_assistant_message',\n WaitingForToolConfirmation = 'waiting_for_tool_confirmation',\n ExecutingTool = 'executing_tool',\n CompactingConversation = 'compacting_conversation',\n}\n\n/** Accuracy of reported context stats. */\nexport enum ContextStatsAccuracy {\n Exact = 'exact',\n Estimated = 'estimated',\n}\n\n/** Error types for error notifications. */\nexport enum DroidErrorType {\n CONNECTION_ERROR = 'ConnectionError',\n PROTOCOL_ERROR = 'ProtocolError',\n SESSION_ERROR = 'SessionError',\n TIMEOUT_ERROR = 'TimeoutError',\n DROID_CLIENT_ERROR = 'DroidClientError',\n PROCESS_EXIT_ERROR = 'ProcessExitError',\n ERROR = 'Error',\n}\n\n/** MCP server connection status. */\nexport enum McpServerStatus {\n Connecting = 'connecting',\n Connected = 'connected',\n Disconnected = 'disconnected',\n Failed = 'failed',\n Disabled = 'disabled',\n}\n\n/** MCP server transport type. */\nexport enum McpServerType {\n Stdio = 'stdio',\n Http = 'http',\n Sse = 'sse',\n}\n\n/** Overall MCP initialization status. */\nexport enum McpStatus {\n NotInitialized = 'not-initialized',\n Initializing = 'initializing',\n Ready = 'ready',\n NoServers = 'no-servers',\n Failed = 'failed',\n}\n\n/** MCP authentication outcome. */\nexport enum McpAuthOutcome {\n Success = 'success',\n Cancelled = 'cancelled',\n Failed = 'failed',\n}\n\n/** Session type for mission decomposition (orchestrator manages workers). */\nexport enum DecompSessionType {\n Orchestrator = 'orchestrator',\n Worker = 'worker',\n}\n\n/** Mission state enum (used by orchestrator mission runner). */\nexport enum MissionState {\n AwaitingInput = 'awaiting_input',\n Initializing = 'initializing',\n Running = 'running',\n Paused = 'paused',\n OrchestratorTurn = 'orchestrator_turn',\n Completed = 'completed',\n}\n\n/** Feature status enum (mirrors orchestrator feature lifecycle). */\nexport enum FeatureStatus {\n Pending = 'pending',\n InProgress = 'in_progress',\n Completed = 'completed',\n Cancelled = 'cancelled',\n}\n\n/** Success state for feature completion. */\nexport enum FeatureSuccessState {\n Success = 'success',\n Partial = 'partial',\n Failure = 'failure',\n}\n\n/** Issue severity for discovered issues. */\nexport enum IssueSeverity {\n Blocking = 'blocking',\n NonBlocking = 'non_blocking',\n Suggestion = 'suggestion',\n}\n\n/** Dismissal item type. */\nexport enum DismissalType {\n DiscoveredIssue = 'discovered_issue',\n CriticalContext = 'critical_context',\n IncompleteWork = 'incomplete_work',\n}\n\n/** Progress log entry type. */\nexport enum ProgressLogEntryType {\n MissionAccepted = 'mission_accepted',\n MissionPaused = 'mission_paused',\n MissionResumed = 'mission_resumed',\n MissionRunStarted = 'mission_run_started',\n WorkerStarted = 'worker_started',\n WorkerSelectedFeature = 'worker_selected_feature',\n WorkerCompleted = 'worker_completed',\n WorkerFailed = 'worker_failed',\n WorkerPaused = 'worker_paused',\n HandoffItemsDismissed = 'handoff_items_dismissed',\n MilestoneValidationTriggered = 'milestone_validation_triggered',\n}\n\n/**\n * The interaction mode determines how Droid operates.\n * - Auto: Droid can execute actions based on autonomy level\n * - Spec: Droid is in planning/research mode only (read-only operations)\n * - AGI: Droid orchestrates missions with read-only tools and orchestrator controls\n */\nexport enum DroidInteractionMode {\n Auto = 'auto',\n Spec = 'spec',\n AGI = 'agi',\n}\n\n/**\n * Autonomy level determines what actions Droid can perform without user confirmation.\n * - Off: User controls all actions (confirmation required for everything)\n * - Low: Allow file edits and read-only commands\n * - Medium: Allow reversible commands\n * - High: Allow all commands without prompts\n */\nexport enum AutonomyLevel {\n Off = 'off',\n Low = 'low',\n Medium = 'medium',\n High = 'high',\n}\n\n/**\n * Combined autonomy mode for backward compatibility.\n * @deprecated Use DroidInteractionMode + AutonomyLevel instead.\n */\nexport enum AutonomyMode {\n Normal = 'normal',\n Spec = 'spec',\n AutoLow = 'auto-low',\n AutoMedium = 'auto-medium',\n AutoHigh = 'auto-high',\n}\n\n/** Reasoning effort levels for LLMs. */\nexport enum ReasoningEffort {\n None = 'none',\n Dynamic = 'dynamic',\n Off = 'off',\n Minimal = 'minimal',\n Low = 'low',\n Medium = 'medium',\n High = 'high',\n ExtraHigh = 'xhigh',\n Max = 'max',\n}\n\n/** Model provider identifiers. */\nexport enum ModelProvider {\n ANTHROPIC = 'anthropic',\n OPENAI = 'openai',\n GENERIC_CHAT_COMPLETION_API = 'generic-chat-completion-api',\n FACTORY = 'factory',\n GOOGLE = 'google',\n XAI = 'xai',\n VOYAGE = 'voyage',\n}\n\n/** Standard JSON-RPC 2.0 error codes. */\nexport enum JsonRpcErrorCode {\n PARSE_ERROR = -32700,\n INVALID_REQUEST = -32600,\n METHOD_NOT_FOUND = -32601,\n INVALID_PARAMS = -32602,\n INTERNAL_ERROR = -32603,\n AUTHENTICATION_ERROR = -32001,\n ENTITY_NOT_FOUND = -32004,\n SESSION_DISCONNECTED = -32005,\n}\n\n/** JSON-RPC message type discriminator. */\nexport enum JsonRpcMessageType {\n Request = 'request',\n Response = 'response',\n Notification = 'notification',\n}\n\n/**\n * Settings hierarchy level enum.\n * Precedence order (highest to lowest): Org → Runtime → Folder → Project → User\n */\nexport enum SettingsLevel {\n Org = 'org',\n Runtime = 'runtime',\n User = 'user',\n Project = 'project',\n Folder = 'folder',\n Dynamic = 'dynamic',\n BuiltIn = 'builtin',\n}\n\n/** Skill file location type. */\nexport enum SkillLocation {\n Project = 'project',\n Personal = 'personal',\n Builtin = 'builtin',\n}\n","/** JSON-RPC protocol version. */\nexport const JSONRPC_VERSION = '2.0' as const;\n\n/**\n * Legacy Factory API version for backward compatibility.\n * @deprecated Use FACTORY_PROTOCOL_VERSION for runtime compatibility instead.\n */\nexport const LEGACY_FACTORY_API_VERSION = '1.0.0' as const;\n\n/** Current Factory protocol version. */\nexport const FACTORY_PROTOCOL_VERSION = '1.3.0' as const;\n\n/** HTTP header identifying the Factory client type. */\nexport const FACTORY_CLIENT_HEADER = 'X-Factory-Client' as const;\n\n/** HTTP header identifying the Factory client version. */\nexport const FACTORY_CLIENT_VERSION = 'X-Client-Version' as const;\n\n/** Default request timeout in milliseconds (30s). */\nexport const DEFAULT_REQUEST_TIMEOUT = 30_000;\n\n/** Session initialization timeout in milliseconds (60s). */\nexport const SESSION_INIT_TIMEOUT = 60_000;\n\n/** MCP authentication timeout in milliseconds (300s). */\nexport const MCP_AUTH_TIMEOUT = 300_000;\n\n/** Compaction timeout in milliseconds (240s — LLM summarization of full conversation). */\nexport const COMPACTION_TIMEOUT = 240_000;\n\n/** Rewind timeout in milliseconds (60s — file restore + session fork). */\nexport const REWIND_TIMEOUT = 60_000;\n","import { z } from 'zod';\n\nimport { JSONRPC_VERSION, LEGACY_FACTORY_API_VERSION } from './constants.js';\nimport { JsonRpcErrorCode } from './enums.js';\n\n/** JSON-compatible primitive values. */\nexport type JsonPrimitive = string | number | boolean | null;\n\n/** JSON-compatible object values. */\nexport interface JsonObject {\n [key: string]: JsonValue;\n}\n\n/** JSON-compatible array values. */\nexport type JsonArray = JsonValue[];\n\n/** Recursive JSON-compatible value. */\nexport type JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\nexport const JsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(JsonValueSchema),\n z.record(JsonValueSchema),\n ])\n);\n\nexport const JsonObjectSchema: z.ZodType<JsonObject> =\n z.record(JsonValueSchema);\n\nexport const JsonArraySchema: z.ZodType<JsonArray> = z.array(JsonValueSchema);\n\n/** Trace context metadata for distributed tracing propagation. */\nexport const TraceContextMetaSchema = z.object({\n traceparent: z.string().optional(),\n tracestate: z.string().optional(),\n});\n\nexport type TraceContextMeta = z.infer<typeof TraceContextMetaSchema>;\n\n/** Shared tool selection override fields reused across client/server schemas. */\nexport const ToolSelectionOverridesSchema = z.object({\n enabledToolIds: z.array(z.string()).optional(),\n disabledToolIds: z.array(z.string()).optional(),\n});\n\nexport type ToolSelectionOverrides = z.infer<\n typeof ToolSelectionOverridesSchema\n>;\n\n/** Shared empty object result reused by RPC result schemas. */\nexport const EmptyResultSchema = z.object({}).passthrough();\n\nexport type EmptyResult = z.infer<typeof EmptyResultSchema>;\n\n/** Shared success result reused by RPC result schemas. */\nexport const SuccessResultSchema = z\n .object({ success: z.boolean() })\n .passthrough();\n\nexport type SuccessResult = z.infer<typeof SuccessResultSchema>;\n\n/** JSON-RPC 2.0 envelope with Factory protocol extensions. */\nexport const JsonRpcEnvelopeSchema = z.object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n factoryApiVersion: z.literal(LEGACY_FACTORY_API_VERSION),\n factoryProtocolVersion: z.string().optional(),\n _meta: TraceContextMetaSchema.optional(),\n});\n\nexport type JsonRpcEnvelope = z.infer<typeof JsonRpcEnvelopeSchema>;\n\n/** JSON-RPC 2.0 error object. */\nexport const JsonRpcErrorSchema = z.object({\n code: z.nativeEnum(JsonRpcErrorCode),\n message: z.string(),\n data: JsonValueSchema.optional(),\n});\n\nexport type JsonRpcError = z.infer<typeof JsonRpcErrorSchema>;\n\n/** Base JSON-RPC request. */\nexport const BaseRequestSchema = z.object({\n type: z.literal('request'),\n id: z.string(),\n method: z.string(),\n params: JsonValueSchema.optional(),\n});\n\nexport type BaseRequest = z.infer<typeof BaseRequestSchema>;\n\n/** Base JSON-RPC success response. */\nexport const BaseResponseSuccessSchema = z.object({\n type: z.literal('response'),\n id: z.string(),\n result: JsonValueSchema,\n});\n\nexport type BaseResponseSuccess = z.infer<typeof BaseResponseSuccessSchema>;\n\n/** Base JSON-RPC failure response. */\nexport const BaseResponseFailureSchema = z.object({\n type: z.literal('response'),\n id: z.string().nullable(),\n error: JsonRpcErrorSchema,\n});\n\nexport type BaseResponseFailure = z.infer<typeof BaseResponseFailureSchema>;\n\n/** Base JSON-RPC notification. */\nexport const BaseNotificationSchema = z.object({\n type: z.literal('notification'),\n method: z.string(),\n params: JsonValueSchema.optional(),\n});\n\nexport type BaseNotification = z.infer<typeof BaseNotificationSchema>;\n\n/** Full JSON-RPC request with envelope fields. */\nexport const JsonRpcRequestSchema = JsonRpcEnvelopeSchema.extend(\n BaseRequestSchema.shape\n);\n\nexport type JsonRpcRequest = z.infer<typeof JsonRpcRequestSchema>;\n\n/** Full JSON-RPC success response with envelope fields. */\nexport const JsonRpcResponseSuccessSchema = JsonRpcEnvelopeSchema.extend(\n BaseResponseSuccessSchema.shape\n);\n\nexport type JsonRpcResponseSuccess = z.infer<\n typeof JsonRpcResponseSuccessSchema\n>;\n\n/** Full JSON-RPC failure response with envelope fields. */\nexport const JsonRpcResponseFailureSchema = JsonRpcEnvelopeSchema.extend(\n BaseResponseFailureSchema.shape\n);\n\nexport type JsonRpcResponseFailure = z.infer<\n typeof JsonRpcResponseFailureSchema\n>;\n\n/** Full JSON-RPC notification with envelope fields. */\nexport const JsonRpcNotificationSchema = JsonRpcEnvelopeSchema.extend(\n BaseNotificationSchema.shape\n);\n\nexport type JsonRpcNotification = z.infer<typeof JsonRpcNotificationSchema>;\n\n/** JSON-RPC response (success or failure). */\nexport const JsonRpcResponseSchema = z.union([\n JsonRpcResponseFailureSchema,\n JsonRpcResponseSuccessSchema,\n]);\n\nexport type JsonRpcResponse = z.infer<typeof JsonRpcResponseSchema>;\n\n/** Discriminated union for initial message type routing. */\nexport const JsonRpcMessageSchema = z.discriminatedUnion('type', [\n JsonRpcRequestSchema,\n JsonRpcEnvelopeSchema.extend({\n type: z.literal('response'),\n id: z.string().nullable(),\n result: JsonValueSchema.optional(),\n error: JsonRpcErrorSchema.optional(),\n }),\n JsonRpcNotificationSchema,\n]);\n\nexport type JsonRpcMessage = z.infer<typeof JsonRpcMessageSchema>;\n","import { z } from 'zod';\n\nimport { SessionTagSchema } from './client.js';\nimport { DecompSessionType } from './enums.js';\n\n/**\n * Session metadata returned by {@link listSessions}.\n *\n * Mirrors the shape used by the `droid` CLI's `SessionService` so results\n * are interoperable with sessions created by the CLI or the SDK.\n */\nexport const SessionMetadataSchema = z\n .object({\n id: z.string(),\n title: z.string(),\n sessionTitle: z.string().optional(),\n owner: z.string(),\n messageCount: z.number(),\n modifiedTime: z.date(),\n createdTime: z.date(),\n isFavorite: z.boolean().optional(),\n cwd: z.string().optional(),\n decompSessionType: z.nativeEnum(DecompSessionType).optional(),\n decompMissionId: z.string().optional(),\n })\n .passthrough();\n\nexport type SessionMetadata = z.infer<typeof SessionMetadataSchema>;\n\n/**\n * First line of a droid session `.jsonl` file. Produced by the CLI's\n * `SessionService` when a session is created.\n * @internal\n */\nexport const SessionStartEventSchema = z\n .object({\n type: z.literal('session_start'),\n sessionId: z.string().optional(),\n title: z.string().optional(),\n sessionTitle: z.string().optional(),\n owner: z.string().optional(),\n cwd: z.string().optional(),\n decompSessionType: z\n .nativeEnum(DecompSessionType)\n .optional()\n .catch(undefined),\n decompMissionId: z.string().optional(),\n })\n .passthrough();\n\nexport type SessionStartEvent = z.infer<typeof SessionStartEventSchema>;\n\n/**\n * Content of the sibling `<sessionId>.settings.json` file, if present.\n * Used to detect archived sessions and recover tag metadata.\n * @internal\n */\nexport const SessionSettingsFileSchema = z\n .object({\n archivedAt: z.string().optional(),\n tags: z.array(SessionTagSchema).optional(),\n })\n .passthrough();\n\nexport type SessionSettingsFile = z.infer<typeof SessionSettingsFileSchema>;\n\n/** Options accepted by {@link listSessions}. */\nexport interface ListSessionsOptions {\n /**\n * Working directory to scope the listing to. Defaults to `process.cwd()`.\n * Ignored when `fetchOutsideCWD` is `true`.\n */\n cwd?: string;\n\n /**\n * If `true`, return sessions from every working directory on disk and\n * ignore `cwd`. Defaults to `false` (only sessions for the given `cwd`\n * are returned).\n */\n fetchOutsideCWD?: boolean;\n\n /**\n * Cap the number of sessions returned. Results are sorted by\n * `modifiedTime` descending before being truncated.\n */\n numSessions?: number;\n\n /**\n * Override the sessions root directory. Defaults to `~/.factory/sessions/`.\n * Primarily useful for tests and custom installations.\n */\n sessionsDir?: string;\n}\n","import { z } from 'zod';\n\nimport {\n AutonomyLevel,\n AutonomyMode,\n ContextStatsAccuracy,\n DecompSessionType,\n DroidInteractionMode,\n DroidServerMethod,\n McpServerType,\n MissionState,\n ModelProvider,\n ReasoningEffort,\n SettingsLevel,\n SkillLocation,\n} from './enums.js';\nimport {\n McpRegistryServerSchema,\n McpServerStatusInfoSchema,\n McpStatusSummarySchema,\n McpToolInfoSchema,\n} from './mcp.js';\nimport { Base64ImageSourceSchema, DocumentSourceSchema } from './messages.js';\nimport { MissionFeatureSchema, ProgressLogEntrySchema } from './mission.js';\nimport {\n EmptyResultSchema,\n JsonObjectSchema,\n type JsonRpcResponseFailure,\n JsonRpcRequestSchema,\n JsonRpcResponseFailureSchema,\n JsonRpcResponseSuccessSchema,\n SuccessResultSchema,\n ToolSelectionOverridesSchema,\n} from './shared.js';\n\nconst SessionModeRequestFieldsShape = {\n modelId: z.string().optional(),\n autonomyMode: z.nativeEnum(AutonomyMode).optional(),\n interactionMode: z.nativeEnum(DroidInteractionMode).optional(),\n autonomyLevel: z.nativeEnum(AutonomyLevel).optional(),\n};\n\n/** Session tag metadata. */\nexport const SessionTagSchema = z\n .object({\n name: z.string(),\n metadata: z.record(z.string()).optional(),\n })\n .strict();\n\nexport type SessionTag = z.infer<typeof SessionTagSchema>;\n\n/** Session source information. */\nexport const SessionSourceSchema = z\n .object({\n platform: z.string(),\n })\n .passthrough();\n\nexport type SessionSource = z.infer<typeof SessionSourceSchema>;\n\n/** Stdio MCP server configuration for initialization. */\nexport const StdioMcpConfigSchema = z\n .object({\n name: z.string(),\n command: z.string(),\n args: z.array(z.string()).default([]),\n env: z.record(z.string()).optional().default({}),\n })\n .strict();\n\nexport type StdioMcpConfig = z.infer<typeof StdioMcpConfigSchema>;\n\n/** HTTP header for MCP server configuration. */\nexport const HttpHeaderSchema = z\n .object({\n name: z.string(),\n value: z.string(),\n })\n .strict();\n\nexport type HttpHeader = z.infer<typeof HttpHeaderSchema>;\n\n/** HTTP MCP server configuration for initialization. */\nexport const HttpMcpConfigSchema = z\n .object({\n type: z.literal('http'),\n name: z.string(),\n url: z.string().url(),\n headers: HttpHeaderSchema.array().default([]),\n })\n .strict();\n\nexport type HttpMcpConfig = z.infer<typeof HttpMcpConfigSchema>;\n\n/** SSE MCP server configuration for initialization. */\nexport const SseMcpConfigSchema = z\n .object({\n type: z.literal('sse'),\n name: z.string(),\n url: z.string().url(),\n headers: HttpHeaderSchema.array().default([]),\n })\n .strict();\n\nexport type SseMcpConfig = z.infer<typeof SseMcpConfigSchema>;\n\n/** Union of MCP server configs. */\nexport const McpServerConfigSchema = z.union([\n StdioMcpConfigSchema,\n HttpMcpConfigSchema,\n SseMcpConfigSchema,\n]);\n\nexport type McpServerConfig = z.infer<typeof McpServerConfigSchema>;\n\n/** Session settings returned in init/load results. */\nexport const SessionSettingsSchema = z\n .object({\n modelId: z.string(),\n reasoningEffort: z.nativeEnum(ReasoningEffort),\n autonomyMode: z.nativeEnum(AutonomyMode).optional(),\n interactionMode: z\n .nativeEnum(DroidInteractionMode)\n .optional()\n .catch(undefined),\n autonomyLevel: z.nativeEnum(AutonomyLevel).optional().catch(undefined),\n specModeModelId: z.string().optional(),\n specModeReasoningEffort: z.nativeEnum(ReasoningEffort).optional(),\n ...ToolSelectionOverridesSchema.shape,\n })\n .passthrough();\n\nexport type SessionSettings = z.infer<typeof SessionSettingsSchema>;\n\n/** Git repository information. */\nexport const GitRepoInfoSchema = z\n .object({\n owner: z.string().optional(),\n repoName: z.string(),\n })\n .passthrough();\n\nexport type GitRepoInfo = z.infer<typeof GitRepoInfoSchema>;\n\n/** Available model configuration returned in session init/load responses. */\nexport const AvailableModelConfigSchema = z\n .object({\n id: z.string(),\n modelId: z.string().optional(),\n displayName: z.string(),\n shortDisplayName: z.string(),\n modelProvider: z.nativeEnum(ModelProvider),\n supportedReasoningEfforts: z.array(z.nativeEnum(ReasoningEffort)),\n defaultReasoningEffort: z.nativeEnum(ReasoningEffort),\n isCustom: z.boolean().default(false),\n noImageSupport: z.boolean().optional(),\n supportsPDFs: z.boolean().optional(),\n tier: z.string().optional(),\n tokenMultiplier: z.number().optional(),\n promoLabel: z.string().optional(),\n featureFlag: JsonObjectSchema.optional(),\n usesUSBasedInference: z.boolean().optional(),\n })\n .passthrough();\n\nexport type AvailableModelConfig = z.infer<typeof AvailableModelConfigSchema>;\n\n/** Token usage information for a session. */\nexport const TokenUsageSchema = z\n .object({\n inputTokens: z.number(),\n outputTokens: z.number(),\n cacheCreationTokens: z.number(),\n cacheReadTokens: z.number(),\n thinkingTokens: z.number(),\n })\n .passthrough();\n\nexport type TokenUsage = z.infer<typeof TokenUsageSchema>;\n\n/** Current context window utilization for the active session. */\nexport const ContextStatsSchema = z\n .object({\n used: z.number(),\n remaining: z.number(),\n limit: z.number(),\n accuracy: z.nativeEnum(ContextStatsAccuracy),\n updatedAt: z.string(),\n })\n .passthrough();\n\nexport type ContextStats = z.infer<typeof ContextStatsSchema>;\n\n/** Worker state information for mission snapshots. */\nexport const WorkerStateInfoSchema = z\n .object({\n startedAt: z.string(),\n completedAt: z.string().optional(),\n exitCode: z.number().optional(),\n })\n .passthrough();\n\nexport type WorkerStateInfo = z.infer<typeof WorkerStateInfoSchema>;\n\n/** Skill resource file in a skill folder. */\nexport const SkillResourceSchema = z\n .object({\n name: z.string(),\n path: z.string(),\n type: z.enum(['reference', 'asset']),\n })\n .passthrough();\n\nexport type SkillResource = z.infer<typeof SkillResourceSchema>;\n\n/** Skill information returned by list_skills. */\nexport const SkillInfoSchema = z\n .object({\n name: z.string(),\n description: z.string().optional(),\n location: z.nativeEnum(SkillLocation),\n filePath: z.string(),\n enabled: z.boolean().optional(),\n userInvocable: z.boolean().optional(),\n version: z.string().optional(),\n content: z.string().optional(),\n resources: z.array(SkillResourceSchema).optional(),\n })\n .passthrough();\n\nexport type SkillInfo = z.infer<typeof SkillInfoSchema>;\n\n/** Parameters for droid.initialize_session request. */\nexport const InitializeSessionRequestParamsSchema = z\n .object({\n machineId: z.string(),\n cwd: z.string(),\n workspaceId: z.string().optional(),\n sessionId: z.string().optional(),\n mcpServers: z.array(McpServerConfigSchema).optional(),\n ...SessionModeRequestFieldsShape,\n reasoningEffort: z.nativeEnum(ReasoningEffort).optional(),\n specModeModelId: z.string().optional(),\n specModeReasoningEffort: z.nativeEnum(ReasoningEffort).optional(),\n decompSessionType: z.nativeEnum(DecompSessionType).optional(),\n decompMissionId: z.string().optional(),\n skipPermissionsUnsafe: z.boolean().optional(),\n ...ToolSelectionOverridesSchema.shape,\n sessionLocation: z.string().optional(),\n sessionSource: SessionSourceSchema.optional(),\n tags: z.array(SessionTagSchema).optional(),\n mcpOAuthCallbackUri: z.string().optional(),\n })\n .strict();\n\nexport type InitializeSessionRequestParams = z.infer<\n typeof InitializeSessionRequestParamsSchema\n>;\n\n/** Parameters for droid.load_session request. */\nexport const LoadSessionRequestParamsSchema = z\n .object({\n sessionId: z.string(),\n mcpServers: z.array(McpServerConfigSchema).optional(),\n mcpOAuthCallbackUri: z.string().optional(),\n })\n .strict();\n\nexport type LoadSessionRequestParams = z.infer<\n typeof LoadSessionRequestParamsSchema\n>;\n\n/** Structured output format type names. */\nexport const OutputFormatType = {\n JsonSchema: 'json_schema',\n} as const;\n\nexport type OutputFormatType =\n (typeof OutputFormatType)[keyof typeof OutputFormatType];\n\n/** Structured output format for droid.add_user_message request. */\nexport const OutputFormatSchema = z\n .object({\n type: z.literal(OutputFormatType.JsonSchema),\n schema: JsonObjectSchema,\n })\n .strict();\n\nexport type OutputFormat = z.infer<typeof OutputFormatSchema>;\n\n/** Parameters for droid.add_user_message request. */\nexport const AddUserMessageRequestParamsSchema = z\n .object({\n messageId: z.string().optional(),\n text: z.string(),\n images: z.array(Base64ImageSourceSchema).optional(),\n files: z.array(DocumentSourceSchema).optional(),\n outputFormat: OutputFormatSchema.optional(),\n })\n .strict();\n\nexport type AddUserMessageRequestParams = z.infer<\n typeof AddUserMessageRequestParamsSchema\n>;\n\n/** Parameters for droid.interrupt_session request (empty). */\nexport const InterruptSessionRequestParamsSchema = z.object({}).strict();\n\nexport type InterruptSessionRequestParams = z.infer<\n typeof InterruptSessionRequestParamsSchema\n>;\n\n/** Parameters for droid.kill_worker_session request. */\nexport const KillWorkerSessionRequestParamsSchema = z\n .object({\n workerSessionId: z.string(),\n })\n .strict();\n\nexport type KillWorkerSessionRequestParams = z.infer<\n typeof KillWorkerSessionRequestParamsSchema\n>;\n\n/** Parameters for droid.update_session_settings request. */\nexport const UpdateSessionSettingsRequestParamsSchema = z\n .object({\n ...SessionModeRequestFieldsShape,\n reasoningEffort: z.nativeEnum(ReasoningEffort).optional(),\n specModeModelId: z.string().nullable().optional(),\n specModeReasoningEffort: z\n .nativeEnum(ReasoningEffort)\n .nullable()\n .optional(),\n ...ToolSelectionOverridesSchema.shape,\n })\n .strict();\n\nexport type UpdateSessionSettingsRequestParams = z.infer<\n typeof UpdateSessionSettingsRequestParamsSchema\n>;\n\n/** Parameters for droid.toggle_mcp_server request. */\nexport const ToggleMcpServerRequestParamsSchema = z\n .object({\n serverName: z.string(),\n enabled: z.boolean(),\n settingsLevel: z.literal(SettingsLevel.User),\n })\n .strict();\n\nexport type ToggleMcpServerRequestParams = z.infer<\n typeof ToggleMcpServerRequestParamsSchema\n>;\n\n/** Parameters for droid.authenticate_mcp_server request. */\nexport const AuthenticateMcpServerRequestParamsSchema = z\n .object({\n serverName: z.string(),\n })\n .strict();\n\nexport type AuthenticateMcpServerRequestParams = z.infer<\n typeof AuthenticateMcpServerRequestParamsSchema\n>;\n\n/** Parameters for droid.cancel_mcp_auth request. */\nexport const CancelMcpAuthRequestParamsSchema = z\n .object({\n serverName: z.string(),\n })\n .strict();\n\nexport type CancelMcpAuthRequestParams = z.infer<\n typeof CancelMcpAuthRequestParamsSchema\n>;\n\n/** Parameters for droid.clear_mcp_auth request. */\nexport const ClearMcpAuthRequestParamsSchema = z\n .object({\n serverName: z.string(),\n })\n .strict();\n\nexport type ClearMcpAuthRequestParams = z.infer<\n typeof ClearMcpAuthRequestParamsSchema\n>;\n\n/** Parameters for droid.submit_mcp_auth_code request. */\nexport const SubmitMcpAuthCodeRequestParamsSchema = z\n .object({\n serverName: z.string(),\n code: z.string(),\n state: z.string(),\n })\n .strict();\n\nexport type SubmitMcpAuthCodeRequestParams = z.infer<\n typeof SubmitMcpAuthCodeRequestParamsSchema\n>;\n\n/** Parameters for droid.add_mcp_server request. */\nexport const AddMcpServerRequestParamsSchema = z\n .object({\n name: z.string(),\n type: z.nativeEnum(McpServerType),\n url: z.string().optional(),\n headers: z.record(z.string()).optional(),\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n env: z.record(z.string()).optional(),\n })\n .strict();\n\nexport type AddMcpServerRequestParams = z.infer<\n typeof AddMcpServerRequestParamsSchema\n>;\n\n/** Parameters for droid.remove_mcp_server request. */\nexport const RemoveMcpServerRequestParamsSchema = z\n .object({\n serverName: z.string(),\n settingsLevel: z.literal(SettingsLevel.User),\n })\n .strict();\n\nexport type RemoveMcpServerRequestParams = z.infer<\n typeof RemoveMcpServerRequestParamsSchema\n>;\n\n/** Parameters for droid.list_mcp_registry request (empty). */\nexport const ListMcpRegistryRequestParamsSchema = z.object({}).strict();\n\nexport type ListMcpRegistryRequestParams = z.infer<\n typeof ListMcpRegistryRequestParamsSchema\n>;\n\n/** Parameters for droid.list_mcp_tools request (empty). */\nexport const ListMcpToolsRequestParamsSchema = z.object({}).strict();\n\nexport type ListMcpToolsRequestParams = z.infer<\n typeof ListMcpToolsRequestParamsSchema\n>;\n\n/** Tool catalog entry returned by droid.list_tools. */\nexport const ExecToolInfoSchema = z\n .object({\n id: z.string(),\n llmId: z.string(),\n displayName: z.string(),\n description: z.string(),\n category: z.enum(['read', 'edit', 'execute', 'other']),\n defaultAllowed: z.boolean(),\n currentlyAllowed: z.boolean(),\n })\n .passthrough();\n\nexport type ExecToolInfo = z.infer<typeof ExecToolInfoSchema>;\n\n/** Parameters for droid.list_tools. */\nexport const ListToolsRequestParamsSchema = z\n .object({\n ...SessionModeRequestFieldsShape,\n specModeModelId: z.string().nullable().optional(),\n skipPermissionsUnsafe: z.boolean().optional(),\n ...ToolSelectionOverridesSchema.shape,\n depth: z.number().int().min(0).optional(),\n })\n .strict();\n\nexport type ListToolsRequestParams = z.infer<\n typeof ListToolsRequestParamsSchema\n>;\n\n/** Parameters for droid.list_mcp_servers request (empty). */\nexport const ListMcpServersRequestParamsSchema = z.object({}).strict();\n\nexport type ListMcpServersRequestParams = z.infer<\n typeof ListMcpServersRequestParamsSchema\n>;\n\n/** Parameters for droid.toggle_mcp_tool request. */\nexport const ToggleMcpToolRequestParamsSchema = z\n .object({\n serverName: z.string(),\n toolName: z.string(),\n enabled: z.boolean(),\n })\n .strict();\n\nexport type ToggleMcpToolRequestParams = z.infer<\n typeof ToggleMcpToolRequestParamsSchema\n>;\n\n/** Parameters for droid.list_skills request (empty). */\nexport const ListSkillsRequestParamsSchema = z.object({}).strict();\n\nexport type ListSkillsRequestParams = z.infer<\n typeof ListSkillsRequestParamsSchema\n>;\n\n/** Parameters for droid.submit_bug_report request. */\nexport const SubmitBugReportRequestParamsSchema = z\n .object({\n userComment: z.string(),\n clientLogs: z.string().optional(),\n })\n .strict();\n\nexport type SubmitBugReportRequestParams = z.infer<\n typeof SubmitBugReportRequestParamsSchema\n>;\n\n/** File snapshot for rewind operations. */\nexport const RewindFileSnapshotSchema = z\n .object({\n filePath: z.string(),\n contentHash: z.string(),\n size: z.number(),\n })\n .passthrough();\n\nexport type RewindFileSnapshot = z.infer<typeof RewindFileSnapshotSchema>;\n\n/** File creation record for rewind operations. */\nexport const RewindFileCreationSchema = z\n .object({\n filePath: z.string(),\n })\n .passthrough();\n\nexport type RewindFileCreation = z.infer<typeof RewindFileCreationSchema>;\n\n/** Evicted file record for rewind operations. */\nexport const RewindEvictedFileSchema = z\n .object({\n filePath: z.string(),\n reason: z.string(),\n })\n .passthrough();\n\nexport type RewindEvictedFile = z.infer<typeof RewindEvictedFileSchema>;\n\n/** Parameters for droid.get_rewind_info request. */\nexport const GetRewindInfoRequestParamsSchema = z\n .object({\n messageId: z.string(),\n })\n .passthrough();\n\nexport type GetRewindInfoRequestParams = z.infer<\n typeof GetRewindInfoRequestParamsSchema\n>;\n\n/** Parameters for droid.execute_rewind request. */\nexport const ExecuteRewindRequestParamsSchema = z\n .object({\n messageId: z.string(),\n filesToRestore: z.array(RewindFileSnapshotSchema),\n filesToDelete: z.array(RewindFileCreationSchema),\n forkTitle: z.string(),\n })\n .passthrough();\n\nexport type ExecuteRewindRequestParams = z.infer<\n typeof ExecuteRewindRequestParamsSchema\n>;\n\n/** Parameters for droid.compact_session request. */\nexport const CompactSessionRequestParamsSchema = z\n .object({\n customInstructions: z.string().optional(),\n })\n .passthrough();\n\nexport type CompactSessionRequestParams = z.infer<\n typeof CompactSessionRequestParamsSchema\n>;\n\n/** Parameters for droid.rename_session request. */\nexport const RenameSessionRequestParamsSchema = z\n .object({\n title: z.string(),\n })\n .passthrough();\n\nexport type RenameSessionRequestParams = z.infer<\n typeof RenameSessionRequestParamsSchema\n>;\n\n/** Parameters for droid.fork_session request (empty). */\nexport const ForkSessionRequestParamsSchema = z.object({}).passthrough();\n\nexport type ForkSessionRequestParams = z.infer<\n typeof ForkSessionRequestParamsSchema\n>;\n\n/** Parameters for droid.get_context_stats request (empty). */\nexport const GetContextStatsRequestParamsSchema = z.object({}).passthrough();\n\nexport type GetContextStatsRequestParams = z.infer<\n typeof GetContextStatsRequestParamsSchema\n>;\n\nexport const InitializeSessionRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.INITIALIZE_SESSION),\n params: InitializeSessionRequestParamsSchema,\n});\n\nexport type InitializeSessionRequest = z.infer<\n typeof InitializeSessionRequestSchema\n>;\n\nexport const LoadSessionRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.LOAD_SESSION),\n params: LoadSessionRequestParamsSchema,\n});\n\nexport type LoadSessionRequest = z.infer<typeof LoadSessionRequestSchema>;\n\nexport const AddUserMessageRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.ADD_USER_MESSAGE),\n params: AddUserMessageRequestParamsSchema,\n});\n\nexport type AddUserMessageRequest = z.infer<typeof AddUserMessageRequestSchema>;\n\nexport const InterruptSessionRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.INTERRUPT_SESSION),\n params: InterruptSessionRequestParamsSchema,\n});\n\nexport type InterruptSessionRequest = z.infer<\n typeof InterruptSessionRequestSchema\n>;\n\nexport const KillWorkerSessionRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.KILL_WORKER_SESSION),\n params: KillWorkerSessionRequestParamsSchema,\n});\n\nexport type KillWorkerSessionRequest = z.infer<\n typeof KillWorkerSessionRequestSchema\n>;\n\nexport const UpdateSessionSettingsRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.UPDATE_SESSION_SETTINGS),\n params: UpdateSessionSettingsRequestParamsSchema,\n});\n\nexport type UpdateSessionSettingsRequest = z.infer<\n typeof UpdateSessionSettingsRequestSchema\n>;\n\nexport const ToggleMcpServerRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.TOGGLE_MCP_SERVER),\n params: ToggleMcpServerRequestParamsSchema,\n});\n\nexport type ToggleMcpServerRequest = z.infer<\n typeof ToggleMcpServerRequestSchema\n>;\n\nexport const AuthenticateMcpServerRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.AUTHENTICATE_MCP_SERVER),\n params: AuthenticateMcpServerRequestParamsSchema,\n});\n\nexport type AuthenticateMcpServerRequest = z.infer<\n typeof AuthenticateMcpServerRequestSchema\n>;\n\nexport const CancelMcpAuthRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.CANCEL_MCP_AUTH),\n params: CancelMcpAuthRequestParamsSchema,\n});\n\nexport type CancelMcpAuthRequest = z.infer<typeof CancelMcpAuthRequestSchema>;\n\nexport const ClearMcpAuthRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.CLEAR_MCP_AUTH),\n params: ClearMcpAuthRequestParamsSchema,\n});\n\nexport type ClearMcpAuthRequest = z.infer<typeof ClearMcpAuthRequestSchema>;\n\nexport const SubmitMcpAuthCodeRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.SUBMIT_MCP_AUTH_CODE),\n params: SubmitMcpAuthCodeRequestParamsSchema,\n});\n\nexport type SubmitMcpAuthCodeRequest = z.infer<\n typeof SubmitMcpAuthCodeRequestSchema\n>;\n\nexport const AddMcpServerRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.ADD_MCP_SERVER),\n params: AddMcpServerRequestParamsSchema,\n});\n\nexport type AddMcpServerRequest = z.infer<typeof AddMcpServerRequestSchema>;\n\nexport const RemoveMcpServerRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.REMOVE_MCP_SERVER),\n params: RemoveMcpServerRequestParamsSchema,\n});\n\nexport type RemoveMcpServerRequest = z.infer<\n typeof RemoveMcpServerRequestSchema\n>;\n\nexport const ListMcpRegistryRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.LIST_MCP_REGISTRY),\n params: ListMcpRegistryRequestParamsSchema,\n});\n\nexport type ListMcpRegistryRequest = z.infer<\n typeof ListMcpRegistryRequestSchema\n>;\n\nexport const ListMcpToolsRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.LIST_MCP_TOOLS),\n params: ListMcpToolsRequestParamsSchema,\n});\n\nexport type ListMcpToolsRequest = z.infer<typeof ListMcpToolsRequestSchema>;\n\nexport const ListToolsRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.LIST_TOOLS),\n params: ListToolsRequestParamsSchema,\n});\n\nexport type ListToolsRequest = z.infer<typeof ListToolsRequestSchema>;\n\nexport const ListMcpServersRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.LIST_MCP_SERVERS),\n params: ListMcpServersRequestParamsSchema,\n});\n\nexport type ListMcpServersRequest = z.infer<typeof ListMcpServersRequestSchema>;\n\nexport const ToggleMcpToolRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.TOGGLE_MCP_TOOL),\n params: ToggleMcpToolRequestParamsSchema,\n});\n\nexport type ToggleMcpToolRequest = z.infer<typeof ToggleMcpToolRequestSchema>;\n\nexport const ListSkillsRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.LIST_SKILLS),\n params: ListSkillsRequestParamsSchema,\n});\n\nexport type ListSkillsRequest = z.infer<typeof ListSkillsRequestSchema>;\n\nexport const SubmitBugReportRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.SUBMIT_BUG_REPORT),\n params: SubmitBugReportRequestParamsSchema,\n});\n\nexport type SubmitBugReportRequest = z.infer<\n typeof SubmitBugReportRequestSchema\n>;\n\nexport const GetRewindInfoRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.GET_REWIND_INFO),\n params: GetRewindInfoRequestParamsSchema,\n});\n\nexport type GetRewindInfoRequest = z.infer<typeof GetRewindInfoRequestSchema>;\n\nexport const ExecuteRewindRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.EXECUTE_REWIND),\n params: ExecuteRewindRequestParamsSchema,\n});\n\nexport type ExecuteRewindRequest = z.infer<typeof ExecuteRewindRequestSchema>;\n\nexport const CompactSessionRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.COMPACT_SESSION),\n params: CompactSessionRequestParamsSchema,\n});\n\nexport type CompactSessionRequest = z.infer<typeof CompactSessionRequestSchema>;\n\nexport const ForkSessionRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.FORK_SESSION),\n params: ForkSessionRequestParamsSchema,\n});\n\nexport type ForkSessionRequest = z.infer<typeof ForkSessionRequestSchema>;\n\nexport const GetContextStatsRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.GET_CONTEXT_STATS),\n params: GetContextStatsRequestParamsSchema,\n});\n\nexport type GetContextStatsRequest = z.infer<\n typeof GetContextStatsRequestSchema\n>;\n\nexport const RenameSessionRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.RENAME_SESSION),\n params: RenameSessionRequestParamsSchema,\n});\n\nexport type RenameSessionRequest = z.infer<typeof RenameSessionRequestSchema>;\n\n/** Discriminated union over all client→server request types. */\nexport const ClientRequestSchema = z.discriminatedUnion('method', [\n InitializeSessionRequestSchema,\n LoadSessionRequestSchema,\n AddUserMessageRequestSchema,\n InterruptSessionRequestSchema,\n KillWorkerSessionRequestSchema,\n UpdateSessionSettingsRequestSchema,\n ToggleMcpServerRequestSchema,\n AuthenticateMcpServerRequestSchema,\n CancelMcpAuthRequestSchema,\n ClearMcpAuthRequestSchema,\n SubmitMcpAuthCodeRequestSchema,\n AddMcpServerRequestSchema,\n RemoveMcpServerRequestSchema,\n ListMcpRegistryRequestSchema,\n ListMcpToolsRequestSchema,\n ListToolsRequestSchema,\n ListMcpServersRequestSchema,\n ToggleMcpToolRequestSchema,\n ListSkillsRequestSchema,\n SubmitBugReportRequestSchema,\n GetRewindInfoRequestSchema,\n ExecuteRewindRequestSchema,\n CompactSessionRequestSchema,\n ForkSessionRequestSchema,\n GetContextStatsRequestSchema,\n RenameSessionRequestSchema,\n]);\n\nexport type ClientRequest = z.infer<typeof ClientRequestSchema>;\n\n/** Mission state snapshot (for orchestrator sessions). */\nexport const MissionSnapshotSchema = z\n .object({\n state: z.nativeEnum(MissionState),\n features: z.array(MissionFeatureSchema),\n progressLog: z.array(ProgressLogEntrySchema),\n workerSessionIds: z.array(z.string()),\n workerStates: z.record(WorkerStateInfoSchema).optional(),\n tokenUsage: TokenUsageSchema.optional(),\n tokenUsageBySessionId: z.record(TokenUsageSchema).optional(),\n })\n .passthrough();\n\nexport type MissionSnapshot = z.infer<typeof MissionSnapshotSchema>;\n\n/** Result for droid.initialize_session response. */\nexport const InitializeSessionResultSchema = z\n .object({\n sessionId: z.string(),\n session: JsonObjectSchema,\n mcpServers: z.array(McpServerConfigSchema).optional(),\n settings: SessionSettingsSchema,\n gitRepo: GitRepoInfoSchema.optional(),\n availableModels: z.array(AvailableModelConfigSchema).optional(),\n })\n .passthrough();\n\nexport type InitializeSessionResult = z.infer<\n typeof InitializeSessionResultSchema\n>;\n\n/** Result for droid.load_session response. */\nexport const LoadSessionResultSchema = z\n .object({\n session: JsonObjectSchema,\n mcpServers: z.array(McpServerConfigSchema).optional(),\n pendingPermissions: z.array(JsonObjectSchema).optional(),\n pendingAskUserRequests: z.array(JsonObjectSchema).optional(),\n settings: SessionSettingsSchema,\n isAgentLoopInProgress: z.boolean().optional(),\n queuedMessages: z.array(JsonObjectSchema).optional(),\n gitRepo: GitRepoInfoSchema.optional(),\n cwd: z.string().optional(),\n callingSessionId: z.string().optional(),\n callingToolUseId: z.string().optional(),\n availableModels: z.array(AvailableModelConfigSchema).optional(),\n tokenUsage: TokenUsageSchema.optional(),\n mission: MissionSnapshotSchema.optional(),\n decompSessionType: z.nativeEnum(DecompSessionType).optional(),\n })\n .passthrough();\n\nexport type LoadSessionResult = z.infer<typeof LoadSessionResultSchema>;\n\n/** Result for droid.add_user_message response (empty). */\nexport const AddUserMessageResultSchema = EmptyResultSchema;\n\nexport type AddUserMessageResult = z.infer<typeof AddUserMessageResultSchema>;\n\n/** Result for droid.interrupt_session response (empty). */\nexport const InterruptSessionResultSchema = EmptyResultSchema;\n\nexport type InterruptSessionResult = z.infer<\n typeof InterruptSessionResultSchema\n>;\n\n/** Result for droid.kill_worker_session response (empty). */\nexport const KillWorkerSessionResultSchema = EmptyResultSchema;\n\nexport type KillWorkerSessionResult = z.infer<\n typeof KillWorkerSessionResultSchema\n>;\n\n/** Result for droid.update_session_settings response (empty). */\nexport const UpdateSessionSettingsResultSchema = EmptyResultSchema;\n\nexport type UpdateSessionSettingsResult = z.infer<\n typeof UpdateSessionSettingsResultSchema\n>;\n\n/** Result for droid.toggle_mcp_server response. */\nexport const ToggleMcpServerResultSchema = SuccessResultSchema;\n\nexport type ToggleMcpServerResult = z.infer<typeof ToggleMcpServerResultSchema>;\n\n/** Result for droid.authenticate_mcp_server response. */\nexport const AuthenticateMcpServerResultSchema = SuccessResultSchema;\n\nexport type AuthenticateMcpServerResult = z.infer<\n typeof AuthenticateMcpServerResultSchema\n>;\n\n/** Result for droid.cancel_mcp_auth response. */\nexport const CancelMcpAuthResultSchema = SuccessResultSchema;\n\nexport type CancelMcpAuthResult = z.infer<typeof CancelMcpAuthResultSchema>;\n\n/** Result for droid.clear_mcp_auth response. */\nexport const ClearMcpAuthResultSchema = SuccessResultSchema;\n\nexport type ClearMcpAuthResult = z.infer<typeof ClearMcpAuthResultSchema>;\n\n/** Result for droid.submit_mcp_auth_code response. */\nexport const SubmitMcpAuthCodeResultSchema = SuccessResultSchema;\n\nexport type SubmitMcpAuthCodeResult = z.infer<\n typeof SubmitMcpAuthCodeResultSchema\n>;\n\n/** Result for droid.add_mcp_server response. */\nexport const AddMcpServerResultSchema = SuccessResultSchema;\n\nexport type AddMcpServerResult = z.infer<typeof AddMcpServerResultSchema>;\n\n/** Result for droid.remove_mcp_server response. */\nexport const RemoveMcpServerResultSchema = SuccessResultSchema;\n\nexport type RemoveMcpServerResult = z.infer<typeof RemoveMcpServerResultSchema>;\n\n/** Result for droid.list_mcp_registry response. */\nexport const ListMcpRegistryResultSchema = z\n .object({ servers: z.array(McpRegistryServerSchema) })\n .passthrough();\n\nexport type ListMcpRegistryResult = z.infer<typeof ListMcpRegistryResultSchema>;\n\n/** Result for droid.list_mcp_tools response. */\nexport const ListMcpToolsResultSchema = z\n .object({ tools: z.array(McpToolInfoSchema) })\n .passthrough();\n\nexport type ListMcpToolsResult = z.infer<typeof ListMcpToolsResultSchema>;\n\n/** Result for droid.list_tools response. */\nexport const ListToolsResultSchema = z\n .object({ tools: z.array(ExecToolInfoSchema) })\n .passthrough();\n\nexport type ListToolsResult = z.infer<typeof ListToolsResultSchema>;\n\n/** Result for droid.list_mcp_servers response. */\nexport const ListMcpServersResultSchema = z\n .object({\n servers: z.array(McpServerStatusInfoSchema),\n summary: McpStatusSummarySchema,\n })\n .passthrough();\n\nexport type ListMcpServersResult = z.infer<typeof ListMcpServersResultSchema>;\n\n/** Result for droid.toggle_mcp_tool response. */\nexport const ToggleMcpToolResultSchema = SuccessResultSchema;\n\nexport type ToggleMcpToolResult = z.infer<typeof ToggleMcpToolResultSchema>;\n\n/** Result for droid.list_skills response. */\nexport const ListSkillsResultSchema = z\n .object({ skills: z.array(SkillInfoSchema) })\n .passthrough();\n\nexport type ListSkillsResult = z.infer<typeof ListSkillsResultSchema>;\n\n/** Result for droid.submit_bug_report response. */\nexport const SubmitBugReportResultSchema = z\n .object({ bugReportId: z.string() })\n .passthrough();\n\nexport type SubmitBugReportResult = z.infer<typeof SubmitBugReportResultSchema>;\n\n/** Result for droid.get_rewind_info response. */\nexport const GetRewindInfoResultSchema = z\n .object({\n availableFiles: z.array(RewindFileSnapshotSchema),\n createdFiles: z.array(RewindFileCreationSchema),\n evictedFiles: z.array(RewindEvictedFileSchema),\n })\n .passthrough();\n\nexport type GetRewindInfoResult = z.infer<typeof GetRewindInfoResultSchema>;\n\n/** Result for droid.execute_rewind response. */\nexport const ExecuteRewindResultSchema = z\n .object({\n newSessionId: z.string(),\n restoredCount: z.number(),\n deletedCount: z.number(),\n failedRestoreCount: z.number(),\n failedDeleteCount: z.number(),\n })\n .passthrough();\n\nexport type ExecuteRewindResult = z.infer<typeof ExecuteRewindResultSchema>;\n\n/** Result for droid.compact_session response. */\nexport const CompactSessionResultSchema = z\n .object({\n newSessionId: z.string(),\n removedCount: z.number(),\n })\n .passthrough();\n\nexport type CompactSessionResult = z.infer<typeof CompactSessionResultSchema>;\n\n/** Result for droid.fork_session response. */\nexport const ForkSessionResultSchema = z\n .object({\n newSessionId: z.string(),\n })\n .passthrough();\n\nexport type ForkSessionResult = z.infer<typeof ForkSessionResultSchema>;\n\n/** Result for droid.get_context_stats response. */\nexport const GetContextStatsResultSchema = ContextStatsSchema;\n\nexport type GetContextStatsResult = z.infer<typeof GetContextStatsResultSchema>;\n\n/** Result for droid.rename_session response. */\nexport const RenameSessionResultSchema = SuccessResultSchema;\n\nexport type RenameSessionResult = z.infer<typeof RenameSessionResultSchema>;\n\nexport const InitializeSessionResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({\n result: InitializeSessionResultSchema,\n }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type InitializeSessionResponse = z.infer<\n typeof InitializeSessionResponseSchema\n>;\n\n/** Concrete type for LoadSessionResponse (avoids TS7056 deep inference). */\nexport type LoadSessionResponse =\n | (Omit<z.infer<typeof JsonRpcResponseSuccessSchema>, 'result'> & {\n result: LoadSessionResult;\n })\n | JsonRpcResponseFailure;\n\nconst _LoadSessionResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: LoadSessionResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport const LoadSessionResponseSchema: z.ZodType<\n LoadSessionResponse,\n z.ZodTypeDef,\n unknown\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Zod workaround for TS7056 deep type inference\n> = _LoadSessionResponseSchema as z.ZodType<\n LoadSessionResponse,\n z.ZodTypeDef,\n unknown\n>;\n\nexport const AddUserMessageResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: AddUserMessageResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type AddUserMessageResponse = z.infer<\n typeof AddUserMessageResponseSchema\n>;\n\nexport const InterruptSessionResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({\n result: InterruptSessionResultSchema,\n }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type InterruptSessionResponse = z.infer<\n typeof InterruptSessionResponseSchema\n>;\n\nexport const KillWorkerSessionResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({\n result: KillWorkerSessionResultSchema,\n }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type KillWorkerSessionResponse = z.infer<\n typeof KillWorkerSessionResponseSchema\n>;\n\nexport const UpdateSessionSettingsResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({\n result: UpdateSessionSettingsResultSchema,\n }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type UpdateSessionSettingsResponse = z.infer<\n typeof UpdateSessionSettingsResponseSchema\n>;\n\nexport const ToggleMcpServerResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({\n result: ToggleMcpServerResultSchema,\n }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type ToggleMcpServerResponse = z.infer<\n typeof ToggleMcpServerResponseSchema\n>;\n\nexport const AuthenticateMcpServerResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({\n result: AuthenticateMcpServerResultSchema,\n }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type AuthenticateMcpServerResponse = z.infer<\n typeof AuthenticateMcpServerResponseSchema\n>;\n\nexport const CancelMcpAuthResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: CancelMcpAuthResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type CancelMcpAuthResponse = z.infer<typeof CancelMcpAuthResponseSchema>;\n\nexport const ClearMcpAuthResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: ClearMcpAuthResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type ClearMcpAuthResponse = z.infer<typeof ClearMcpAuthResponseSchema>;\n\nexport const SubmitMcpAuthCodeResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({\n result: SubmitMcpAuthCodeResultSchema,\n }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type SubmitMcpAuthCodeResponse = z.infer<\n typeof SubmitMcpAuthCodeResponseSchema\n>;\n\nexport const AddMcpServerResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: AddMcpServerResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type AddMcpServerResponse = z.infer<typeof AddMcpServerResponseSchema>;\n\nexport const RemoveMcpServerResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: RemoveMcpServerResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type RemoveMcpServerResponse = z.infer<\n typeof RemoveMcpServerResponseSchema\n>;\n\nexport const ListMcpRegistryResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({\n result: ListMcpRegistryResultSchema,\n }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type ListMcpRegistryResponse = z.infer<\n typeof ListMcpRegistryResponseSchema\n>;\n\nexport const ListMcpToolsResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: ListMcpToolsResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type ListMcpToolsResponse = z.infer<typeof ListMcpToolsResponseSchema>;\n\nexport const ListToolsResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: ListToolsResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type ListToolsResponse = z.infer<typeof ListToolsResponseSchema>;\n\nexport const ListMcpServersResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: ListMcpServersResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type ListMcpServersResponse = z.infer<\n typeof ListMcpServersResponseSchema\n>;\n\nexport const ToggleMcpToolResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: ToggleMcpToolResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type ToggleMcpToolResponse = z.infer<typeof ToggleMcpToolResponseSchema>;\n\nexport const ListSkillsResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: ListSkillsResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type ListSkillsResponse = z.infer<typeof ListSkillsResponseSchema>;\n\nexport const SubmitBugReportResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: SubmitBugReportResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type SubmitBugReportResponse = z.infer<\n typeof SubmitBugReportResponseSchema\n>;\n\nexport const GetRewindInfoResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: GetRewindInfoResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type GetRewindInfoResponse = z.infer<typeof GetRewindInfoResponseSchema>;\n\nexport const ExecuteRewindResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: ExecuteRewindResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type ExecuteRewindResponse = z.infer<typeof ExecuteRewindResponseSchema>;\n\nexport const CompactSessionResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: CompactSessionResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type CompactSessionResponse = z.infer<\n typeof CompactSessionResponseSchema\n>;\n\nexport const ForkSessionResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: ForkSessionResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type ForkSessionResponse = z.infer<typeof ForkSessionResponseSchema>;\n\nexport const GetContextStatsResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: GetContextStatsResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type GetContextStatsResponse = z.infer<\n typeof GetContextStatsResponseSchema\n>;\n\nexport const RenameSessionResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: RenameSessionResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type RenameSessionResponse = z.infer<typeof RenameSessionResponseSchema>;\n","import { z } from 'zod';\n\nimport {\n McpServerStatus,\n McpServerType,\n SettingsLevel,\n ToolConfirmationOutcome,\n} from './enums.js';\nimport { JsonObjectSchema } from './shared.js';\n\n/** Stdio MCP server configuration fields. */\nexport const McpStdioServerConfigFieldsSchema = z.object({\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n});\n\nexport type McpStdioServerConfigFields = z.infer<\n typeof McpStdioServerConfigFieldsSchema\n>;\n\n/** HTTP MCP server configuration fields. */\nexport const McpHttpServerConfigFieldsSchema = z.object({\n url: z.string().optional(),\n});\n\nexport type McpHttpServerConfigFields = z.infer<\n typeof McpHttpServerConfigFieldsSchema\n>;\n\n/** SSE MCP server configuration fields. */\nexport const McpSseServerConfigFieldsSchema = z.object({\n url: z.string(),\n headers: z.record(z.string()).optional(),\n});\n\nexport type McpSseServerConfigFields = z.infer<\n typeof McpSseServerConfigFieldsSchema\n>;\n\n/** MCP server status information. */\nexport const McpServerStatusInfoSchema = z\n .object({\n name: z.string(),\n status: z.nativeEnum(McpServerStatus),\n source: z.nativeEnum(SettingsLevel),\n isManaged: z.boolean(),\n error: z.string().optional(),\n toolCount: z.number().optional(),\n serverType: z.nativeEnum(McpServerType).optional(),\n hasAuthTokens: z.boolean().optional(),\n })\n .passthrough();\n\nexport type McpServerStatusInfo = z.infer<typeof McpServerStatusInfoSchema>;\n\n/** MCP status summary. */\nexport const McpStatusSummarySchema = z\n .object({\n total: z.number(),\n connected: z.number(),\n connecting: z.number(),\n failed: z.number(),\n disabled: z.number().optional(),\n })\n .passthrough();\n\nexport type McpStatusSummary = z.infer<typeof McpStatusSummarySchema>;\n\n/** MCP registry server entity. */\nexport const McpRegistryServerSchema = z\n .object({\n name: z.string(),\n description: z.string(),\n type: z.nativeEnum(McpServerType),\n // Stdio config fields\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n // HTTP config fields\n url: z.string().optional(),\n // Additional metadata\n note: z.string().optional(),\n logoUrl: z.string().optional(),\n })\n .passthrough();\n\nexport type McpRegistryServer = z.infer<typeof McpRegistryServerSchema>;\n\n/** JSON Schema subset for MCP tool input parameters. */\nexport const McpToolInputSchemaSchema = z\n .object({\n type: z.string().optional(),\n properties: JsonObjectSchema.optional(),\n required: z.array(z.string()).optional(),\n })\n .passthrough();\n\nexport type McpToolInputSchema = z.infer<typeof McpToolInputSchemaSchema>;\n\n/** MCP tool information entity. */\nexport const McpToolInfoSchema = z\n .object({\n serverName: z.string(),\n name: z.string(),\n description: z.string().optional(),\n isEnabled: z.boolean(),\n isReadOnly: z.boolean().optional(),\n inputSchema: McpToolInputSchemaSchema.optional(),\n })\n .passthrough();\n\nexport type McpToolInfo = z.infer<typeof McpToolInfoSchema>;\n\n/** Selectable list item for tool confirmation prompts. */\nexport const ToolConfirmationListItemSchema = z\n .object({\n label: z.string(),\n value: z.nativeEnum(ToolConfirmationOutcome),\n })\n .passthrough();\n\nexport type ToolConfirmationListItem = z.infer<\n typeof ToolConfirmationListItemSchema\n>;\n","import { z } from 'zod';\n\nimport { JsonObjectSchema, JsonValueSchema } from './shared.js';\n\n/** Text content block. */\nexport const TextBlockSchema = z\n .object({\n type: z.literal('text'),\n text: z.string(),\n id: z.string().optional(),\n })\n .passthrough();\n\nexport type TextBlock = z.infer<typeof TextBlockSchema>;\n\n/** Base64-encoded image source. */\nexport const Base64ImageSourceSchema = z\n .object({\n type: z.literal('base64'),\n data: z.string(),\n mediaType: z.enum(['image/jpeg', 'image/png', 'image/gif', 'image/webp']),\n })\n .passthrough();\n\nexport type Base64ImageSource = z.infer<typeof Base64ImageSourceSchema>;\n\n/** Image content block. */\nexport const ImageBlockSchema = z\n .object({\n type: z.literal('image'),\n source: Base64ImageSourceSchema,\n id: z.string().optional(),\n })\n .passthrough();\n\nexport type ImageBlock = z.infer<typeof ImageBlockSchema>;\n\n/** Thinking content block. */\nexport const ThinkingBlockSchema = z\n .object({\n type: z.literal('thinking'),\n signature: z.string(),\n thinking: z.string(),\n id: z.string().optional(),\n signatureProvider: z.string().optional(),\n })\n .passthrough();\n\nexport type ThinkingBlock = z.infer<typeof ThinkingBlockSchema>;\n\n/** Redacted thinking content block. */\nexport const RedactedThinkingBlockSchema = z\n .object({\n type: z.literal('redacted_thinking'),\n data: z.string(),\n id: z.string().optional(),\n })\n .passthrough();\n\nexport type RedactedThinkingBlock = z.infer<typeof RedactedThinkingBlockSchema>;\n\n/** Tool use content block. */\nexport const ToolUseBlockSchema = z\n .object({\n type: z.literal('tool_use'),\n id: z.string(),\n input: JsonObjectSchema,\n name: z.string(),\n thoughtSignature: z.string().optional(),\n })\n .passthrough();\n\nexport type ToolUseBlock = z.infer<typeof ToolUseBlockSchema>;\n\n/** Tool result content block. */\nexport const ToolResultBlockSchema = z\n .object({\n type: z.literal('tool_result'),\n toolUseId: z.string(),\n content: z.union([z.string(), z.array(JsonValueSchema)]).optional(),\n isError: z.boolean().optional(),\n id: z.string().optional(),\n })\n .passthrough();\n\nexport type ToolResultBlock = z.infer<typeof ToolResultBlockSchema>;\n\n/** Document content block. */\nexport const DocumentBlockSchema = z\n .object({\n type: z.literal('document'),\n source: JsonObjectSchema,\n id: z.string().optional(),\n })\n .passthrough();\n\nexport type DocumentBlock = z.infer<typeof DocumentBlockSchema>;\n\n/** Discriminated union over all content block types. */\nexport const ContentBlockSchema = z.discriminatedUnion('type', [\n TextBlockSchema,\n ImageBlockSchema,\n ThinkingBlockSchema,\n RedactedThinkingBlockSchema,\n ToolUseBlockSchema,\n ToolResultBlockSchema,\n DocumentBlockSchema,\n]);\n\nexport type ContentBlock = z.infer<typeof ContentBlockSchema>;\n\nexport const FactoryDroidMessageRole = {\n User: 'user',\n Assistant: 'assistant',\n Tool: 'tool',\n System: 'system',\n} as const;\n\nexport type FactoryDroidMessageRole =\n (typeof FactoryDroidMessageRole)[keyof typeof FactoryDroidMessageRole];\n\n/** Factory Droid message schema (used in CreateMessageNotification and session data). */\nexport const FactoryDroidMessageSchema = z\n .object({\n id: z.string(),\n role: z.enum([\n FactoryDroidMessageRole.User,\n FactoryDroidMessageRole.Assistant,\n FactoryDroidMessageRole.Tool,\n FactoryDroidMessageRole.System,\n ]),\n content: z.array(ContentBlockSchema),\n createdAt: z.number(),\n updatedAt: z.number(),\n parentId: z.string().optional(),\n visibility: z.enum(['both', 'llm_only', 'user_only']).optional(),\n isError: z.boolean().optional(),\n })\n .passthrough();\n\nexport type FactoryDroidMessage = z.infer<typeof FactoryDroidMessageSchema>;\n\n/** Document source for user messages (PDF or plain text). */\nexport const DocumentSourceSchema = z\n .object({\n type: z.string(),\n mediaType: z.string(),\n data: z.string(),\n name: z.string().optional(),\n mime: z.string().optional(),\n })\n .passthrough();\n\nexport type DocumentSource = z.infer<typeof DocumentSourceSchema>;\n","import { z } from 'zod';\n\nimport {\n DismissalType,\n FeatureStatus,\n FeatureSuccessState,\n IssueSeverity,\n ProgressLogEntryType,\n} from './enums.js';\n\n/** Mission feature schema. */\nexport const MissionFeatureSchema = z\n .object({\n id: z.string(),\n description: z.string(),\n status: z.nativeEnum(FeatureStatus),\n skillName: z.string(),\n preconditions: z.array(z.string()),\n expectedBehavior: z.array(z.string()),\n verificationSteps: z.array(z.string()),\n fulfills: z.array(z.string()).optional(),\n milestone: z.string().optional(),\n workerSessionIds: z.array(z.string()).optional(),\n currentWorkerSessionId: z.string().nullable().optional(),\n completedWorkerSessionId: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type MissionFeature = z.infer<typeof MissionFeatureSchema>;\n\nexport const FeatureSuccessStateSchema = z.nativeEnum(FeatureSuccessState);\n\n/** Discovered issue during feature implementation. */\nexport const DiscoveredIssueSchema = z\n .object({\n severity: z.nativeEnum(IssueSeverity),\n description: z.string(),\n suggestedFix: z.string().optional(),\n })\n .passthrough();\n\nexport type DiscoveredIssue = z.infer<typeof DiscoveredIssueSchema>;\n\n/** A command run during verification. */\nexport const VerificationCommandSchema = z\n .object({\n command: z.string(),\n exitCode: z.number(),\n observation: z.string(),\n })\n .passthrough();\n\nexport type VerificationCommand = z.infer<typeof VerificationCommandSchema>;\n\n/** An interactive check performed during verification. */\nexport const InteractiveCheckSchema = z\n .object({\n action: z.string(),\n observed: z.string(),\n })\n .passthrough();\n\nexport type InteractiveCheck = z.infer<typeof InteractiveCheckSchema>;\n\n/** Verification performed during feature implementation. */\nexport const VerificationSchema = z\n .object({\n commandsRun: z.array(VerificationCommandSchema),\n interactiveChecks: z.array(InteractiveCheckSchema).optional(),\n })\n .passthrough();\n\nexport type Verification = z.infer<typeof VerificationSchema>;\n\n/** A single test case. */\nexport const TestCaseSchema = z\n .object({\n name: z.string(),\n verifies: z.string(),\n })\n .passthrough();\n\nexport type TestCase = z.infer<typeof TestCaseSchema>;\n\n/** A test file with its test cases. */\nexport const TestFileSchema = z\n .object({\n file: z.string(),\n cases: z.array(TestCaseSchema),\n })\n .passthrough();\n\nexport type TestFile = z.infer<typeof TestFileSchema>;\n\n/** Test information for a feature implementation. */\nexport const TestsSchema = z\n .object({\n added: z.array(TestFileSchema),\n updated: z.array(z.string()).optional(),\n coverage: z.string(),\n })\n .passthrough();\n\nexport type Tests = z.infer<typeof TestsSchema>;\n\n/** A deviation from the skill procedure. */\nexport const SkillDeviationSchema = z\n .object({\n step: z.string(),\n whatIDidInstead: z.string(),\n why: z.string(),\n })\n .passthrough();\n\nexport type SkillDeviation = z.infer<typeof SkillDeviationSchema>;\n\n/** Feedback on the skill procedure. */\nexport const SkillFeedbackSchema = z\n .object({\n followedProcedure: z.boolean(),\n deviations: z.array(SkillDeviationSchema),\n suggestedChanges: z.array(z.string()).optional(),\n })\n .passthrough();\n\nexport type SkillFeedback = z.infer<typeof SkillFeedbackSchema>;\n\n/** Worker handoff information. */\nexport const HandoffSchema = z\n .object({\n salientSummary: z.string().optional(),\n whatWasImplemented: z.string(),\n whatWasLeftUndone: z.string(),\n verification: VerificationSchema,\n tests: TestsSchema,\n discoveredIssues: z.array(DiscoveredIssueSchema),\n skillFeedback: SkillFeedbackSchema.optional(),\n })\n .passthrough();\n\nexport type Handoff = z.infer<typeof HandoffSchema>;\n\n/** A record of a dismissed handoff item. */\nexport const DismissalRecordSchema = z\n .object({\n type: z.nativeEnum(DismissalType),\n sourceFeatureId: z.string(),\n summary: z.string(),\n justification: z.string(),\n })\n .passthrough();\n\nexport type DismissalRecord = z.infer<typeof DismissalRecordSchema>;\n\nconst BaseProgressLogEntrySchema = z.object({\n timestamp: z.string(),\n});\n\nexport const MissionAcceptedEntrySchema = BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.MissionAccepted),\n title: z.string(),\n}).passthrough();\n\nexport type MissionAcceptedEntry = z.infer<typeof MissionAcceptedEntrySchema>;\n\nexport const MissionPausedEntrySchema = BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.MissionPaused),\n}).passthrough();\n\nexport type MissionPausedEntry = z.infer<typeof MissionPausedEntrySchema>;\n\nexport const MissionResumedEntrySchema = BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.MissionResumed),\n}).passthrough();\n\nexport type MissionResumedEntry = z.infer<typeof MissionResumedEntrySchema>;\n\nexport const MissionRunStartedEntrySchema = BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.MissionRunStarted),\n message: z.string().optional(),\n}).passthrough();\n\nexport type MissionRunStartedEntry = z.infer<\n typeof MissionRunStartedEntrySchema\n>;\n\nexport const WorkerStartedEntrySchema = BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.WorkerStarted),\n workerSessionId: z.string(),\n spawnId: z.string(),\n featureId: z.string().optional(),\n}).passthrough();\n\nexport type WorkerStartedEntry = z.infer<typeof WorkerStartedEntrySchema>;\n\nexport const WorkerSelectedFeatureEntrySchema =\n BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.WorkerSelectedFeature),\n workerSessionId: z.string(),\n featureId: z.string(),\n }).passthrough();\n\nexport type WorkerSelectedFeatureEntry = z.infer<\n typeof WorkerSelectedFeatureEntrySchema\n>;\n\nexport const WorkerCompletedEntrySchema = BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.WorkerCompleted),\n workerSessionId: z.string(),\n featureId: z.string(),\n successState: FeatureSuccessStateSchema,\n returnToOrchestrator: z.boolean(),\n commitId: z.string().optional(),\n exitCode: z.number(),\n validatorsPassed: z.boolean().optional(),\n handoff: HandoffSchema.optional(),\n}).passthrough();\n\nexport type WorkerCompletedEntry = z.infer<typeof WorkerCompletedEntrySchema>;\n\nexport const WorkerFailedEntrySchema = BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.WorkerFailed),\n workerSessionId: z.string().optional(),\n spawnId: z.string(),\n exitCode: z.number().optional(),\n reason: z.string(),\n}).passthrough();\n\nexport type WorkerFailedEntry = z.infer<typeof WorkerFailedEntrySchema>;\n\nexport const WorkerPausedEntrySchema = BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.WorkerPaused),\n workerSessionId: z.string(),\n featureId: z.string().optional(),\n}).passthrough();\n\nexport type WorkerPausedEntry = z.infer<typeof WorkerPausedEntrySchema>;\n\nexport const HandoffItemsDismissedEntrySchema =\n BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.HandoffItemsDismissed),\n dismissals: z.array(DismissalRecordSchema).optional(),\n }).passthrough();\n\nexport type HandoffItemsDismissedEntry = z.infer<\n typeof HandoffItemsDismissedEntrySchema\n>;\n\nexport const MilestoneValidationTriggeredEntrySchema =\n BaseProgressLogEntrySchema.extend({\n type: z.literal(ProgressLogEntryType.MilestoneValidationTriggered),\n milestone: z.string(),\n featureId: z.string(),\n }).passthrough();\n\nexport type MilestoneValidationTriggeredEntry = z.infer<\n typeof MilestoneValidationTriggeredEntrySchema\n>;\n\n/** Discriminated union over all 11 progress log entry types. */\nexport const ProgressLogEntrySchema = z.discriminatedUnion('type', [\n MissionAcceptedEntrySchema,\n MissionPausedEntrySchema,\n MissionResumedEntrySchema,\n MissionRunStartedEntrySchema,\n WorkerStartedEntrySchema,\n WorkerSelectedFeatureEntrySchema,\n WorkerCompletedEntrySchema,\n WorkerFailedEntrySchema,\n WorkerPausedEntrySchema,\n HandoffItemsDismissedEntrySchema,\n MilestoneValidationTriggeredEntrySchema,\n]);\n\nexport type ProgressLogEntry = z.infer<typeof ProgressLogEntrySchema>;\n","import { z } from 'zod';\n\nimport { TokenUsageSchema } from './client.js';\nimport {\n AutonomyLevel,\n AutonomyMode,\n DroidClientMethod,\n DroidErrorType,\n DroidInteractionMode,\n DroidWorkingState,\n McpAuthOutcome,\n MissionState,\n ReasoningEffort,\n SessionNotificationType,\n ToolConfirmationOutcome,\n ToolConfirmationType,\n} from './enums.js';\nimport {\n McpServerStatusInfoSchema,\n McpStatusSummarySchema,\n ToolConfirmationListItemSchema,\n} from './mcp.js';\nimport {\n FactoryDroidMessageSchema,\n ToolUseBlockSchema as MessageToolUseBlockSchema,\n} from './messages.js';\nimport { MissionFeatureSchema, ProgressLogEntrySchema } from './mission.js';\nimport {\n JsonObjectSchema,\n JsonRpcNotificationSchema,\n JsonRpcRequestSchema,\n JsonRpcResponseFailureSchema,\n JsonRpcResponseSuccessSchema,\n JsonValueSchema,\n ToolSelectionOverridesSchema,\n} from './shared.js';\n\n/**\n * Tool use block — re-exports ToolUseBlockSchema from messages.ts\n * since the shape is identical (type, id, input, name, thoughtSignature).\n */\nexport const ToolUseBlockSchema = MessageToolUseBlockSchema;\n\nexport type ToolUseBlock = z.infer<typeof ToolUseBlockSchema>;\n\n/** @deprecated Use ToolUseBlockSchema/ToolUseBlock for the message block shape. */\nexport const ToolUseSchema = ToolUseBlockSchema;\n\n/** @deprecated Use ToolUseBlock for the message block shape. */\nexport type ToolUse = ToolUseBlock;\n\n/** Error detail object within an ErrorNotification. */\nexport const ErrorDetailSchema = z\n .object({\n name: z.string(),\n message: z.string(),\n })\n .passthrough();\n\nexport type ErrorDetail = z.infer<typeof ErrorDetailSchema>;\n\n/** Streaming update from subagent tool calls. */\nexport const ToolProgressUpdateSchema = z\n .object({\n type: z.enum(['tool_call', 'tool_result', 'error', 'status', 'message']),\n toolName: z.string().optional(),\n status: z.string().optional(),\n details: z.string().optional(),\n text: z.string().optional(),\n error: z.string().optional(),\n timestamp: z.number().optional(),\n parameters: JsonObjectSchema.optional(),\n valueSnippet: z.string().optional(),\n subagentSessionId: z.string().optional(),\n })\n .passthrough();\n\nexport type ToolProgressUpdate = z.infer<typeof ToolProgressUpdateSchema>;\n\n/** Settings payload within SettingsUpdatedNotification. */\nexport const SettingsUpdatedPayloadSchema = z\n .object({\n autonomyMode: z.nativeEnum(AutonomyMode).optional(),\n interactionMode: z\n .nativeEnum(DroidInteractionMode)\n .optional()\n .catch(undefined),\n autonomyLevel: z.nativeEnum(AutonomyLevel).optional().catch(undefined),\n modelId: z.string().optional(),\n reasoningEffort: z.nativeEnum(ReasoningEffort).optional(),\n specModeModelId: z.string().optional(),\n specModeReasoningEffort: z.nativeEnum(ReasoningEffort).optional(),\n ...ToolSelectionOverridesSchema.shape,\n })\n .passthrough();\n\nexport type SettingsUpdatedPayload = z.infer<\n typeof SettingsUpdatedPayloadSchema\n>;\n\n/** Tool result notification. */\nexport const ToolResultNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.TOOL_RESULT),\n messageId: z.string(),\n toolUseId: z.string(),\n content: JsonValueSchema.optional(),\n isError: z.boolean().optional(),\n id: z.string().optional(),\n })\n .passthrough();\n\nexport type ToolResultNotification = z.infer<\n typeof ToolResultNotificationSchema\n>;\n\n/** Tool progress update notification. */\nexport const ToolProgressUpdateNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.TOOL_PROGRESS_UPDATE),\n toolUseId: z.string(),\n toolName: z.string(),\n update: ToolProgressUpdateSchema,\n })\n .passthrough();\n\nexport type ToolProgressUpdateNotification = z.infer<\n typeof ToolProgressUpdateNotificationSchema\n>;\n\n/** Create message notification. */\nexport const CreateMessageNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.CREATE_MESSAGE),\n message: FactoryDroidMessageSchema,\n parentId: z.string().optional(),\n requestId: z.string().optional(),\n })\n .passthrough();\n\nexport type CreateMessageNotification = z.infer<\n typeof CreateMessageNotificationSchema\n>;\n\n/** Error notification. */\nexport const ErrorNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.ERROR),\n message: z.string(),\n errorType: z.nativeEnum(DroidErrorType),\n timestamp: z.string(),\n error: ErrorDetailSchema.optional(),\n })\n .passthrough();\n\nexport type ErrorNotification = z.infer<typeof ErrorNotificationSchema>;\n\n/** Droid working state changed notification. */\nexport const DroidWorkingStateChangedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.DROID_WORKING_STATE_CHANGED),\n newState: z.nativeEnum(DroidWorkingState),\n })\n .passthrough();\n\nexport type DroidWorkingStateChangedNotification = z.infer<\n typeof DroidWorkingStateChangedNotificationSchema\n>;\n\n/** Permission resolved notification. */\nexport const PermissionResolvedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.PERMISSION_RESOLVED),\n requestId: z.string(),\n toolUseIds: z.array(z.string()),\n selectedOption: z.nativeEnum(ToolConfirmationOutcome),\n })\n .passthrough();\n\nexport type PermissionResolvedNotification = z.infer<\n typeof PermissionResolvedNotificationSchema\n>;\n\n/** Settings updated notification. */\nexport const SettingsUpdatedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.SETTINGS_UPDATED),\n settings: SettingsUpdatedPayloadSchema,\n })\n .passthrough();\n\nexport type SettingsUpdatedNotification = z.infer<\n typeof SettingsUpdatedNotificationSchema\n>;\n\n/** Session title updated notification. */\nexport const SessionTitleUpdatedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.SESSION_TITLE_UPDATED),\n title: z.string(),\n })\n .passthrough();\n\nexport type SessionTitleUpdatedNotification = z.infer<\n typeof SessionTitleUpdatedNotificationSchema\n>;\n\n/** MCP status changed notification. */\nexport const McpStatusChangedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.MCP_STATUS_CHANGED),\n servers: z.array(McpServerStatusInfoSchema),\n summary: McpStatusSummarySchema,\n })\n .passthrough();\n\nexport type McpStatusChangedNotification = z.infer<\n typeof McpStatusChangedNotificationSchema\n>;\n\n/** Assistant text delta notification (streaming token). */\nexport const AssistantTextDeltaNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.ASSISTANT_TEXT_DELTA),\n messageId: z.string(),\n blockIndex: z.number(),\n textDelta: z.string(),\n })\n .passthrough();\n\nexport type AssistantTextDeltaNotification = z.infer<\n typeof AssistantTextDeltaNotificationSchema\n>;\n\n/** Thinking text delta notification (streaming thinking token). */\nexport const ThinkingTextDeltaNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.THINKING_TEXT_DELTA),\n messageId: z.string(),\n blockIndex: z.number(),\n textDelta: z.string(),\n })\n .passthrough();\n\nexport type ThinkingTextDeltaNotification = z.infer<\n typeof ThinkingTextDeltaNotificationSchema\n>;\n\n/** Session token usage changed notification. */\nexport const SessionTokenUsageChangedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.SESSION_TOKEN_USAGE_CHANGED),\n sessionId: z.string(),\n tokenUsage: TokenUsageSchema,\n })\n .passthrough();\n\nexport type SessionTokenUsageChangedNotification = z.infer<\n typeof SessionTokenUsageChangedNotificationSchema\n>;\n\n/** Mission state changed notification. */\nexport const MissionStateChangedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.MISSION_STATE_CHANGED),\n state: z.nativeEnum(MissionState),\n })\n .passthrough();\n\nexport type MissionStateChangedNotification = z.infer<\n typeof MissionStateChangedNotificationSchema\n>;\n\n/** Mission features changed notification. */\nexport const MissionFeaturesChangedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.MISSION_FEATURES_CHANGED),\n features: z.array(MissionFeatureSchema),\n })\n .passthrough();\n\nexport type MissionFeaturesChangedNotification = z.infer<\n typeof MissionFeaturesChangedNotificationSchema\n>;\n\n/** Mission progress entry notification. */\nexport const MissionProgressEntryNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.MISSION_PROGRESS_ENTRY),\n progressLog: z.array(ProgressLogEntrySchema),\n })\n .passthrough();\n\nexport type MissionProgressEntryNotification = z.infer<\n typeof MissionProgressEntryNotificationSchema\n>;\n\n/** Mission heartbeat notification. */\nexport const MissionHeartbeatNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.MISSION_HEARTBEAT),\n timestamp: z.string(),\n })\n .passthrough();\n\nexport type MissionHeartbeatNotification = z.infer<\n typeof MissionHeartbeatNotificationSchema\n>;\n\n/** Mission worker started notification. */\nexport const MissionWorkerStartedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.MISSION_WORKER_STARTED),\n workerSessionId: z.string(),\n })\n .passthrough();\n\nexport type MissionWorkerStartedNotification = z.infer<\n typeof MissionWorkerStartedNotificationSchema\n>;\n\n/** Mission worker completed notification. */\nexport const MissionWorkerCompletedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.MISSION_WORKER_COMPLETED),\n workerSessionId: z.string(),\n exitCode: z.number(),\n })\n .passthrough();\n\nexport type MissionWorkerCompletedNotification = z.infer<\n typeof MissionWorkerCompletedNotificationSchema\n>;\n\n/** MCP authentication required notification. */\nexport const McpAuthRequiredNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.MCP_AUTH_REQUIRED),\n serverName: z.string(),\n authUrl: z.string(),\n message: z.string(),\n state: z.string(),\n })\n .passthrough();\n\nexport type McpAuthRequiredNotification = z.infer<\n typeof McpAuthRequiredNotificationSchema\n>;\n\n/** MCP authentication completed notification. */\nexport const McpAuthCompletedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.MCP_AUTH_COMPLETED),\n serverName: z.string(),\n outcome: z.nativeEnum(McpAuthOutcome),\n message: z.string(),\n })\n .passthrough();\n\nexport type McpAuthCompletedNotification = z.infer<\n typeof McpAuthCompletedNotificationSchema\n>;\n\n/** List of all session notification schemas (for discriminatedUnion). */\nexport const SessionNotificationSchemaList = [\n ToolResultNotificationSchema,\n ToolProgressUpdateNotificationSchema,\n CreateMessageNotificationSchema,\n ErrorNotificationSchema,\n DroidWorkingStateChangedNotificationSchema,\n PermissionResolvedNotificationSchema,\n SettingsUpdatedNotificationSchema,\n SessionTitleUpdatedNotificationSchema,\n McpStatusChangedNotificationSchema,\n AssistantTextDeltaNotificationSchema,\n ThinkingTextDeltaNotificationSchema,\n SessionTokenUsageChangedNotificationSchema,\n MissionStateChangedNotificationSchema,\n MissionFeaturesChangedNotificationSchema,\n MissionProgressEntryNotificationSchema,\n MissionHeartbeatNotificationSchema,\n MissionWorkerStartedNotificationSchema,\n MissionWorkerCompletedNotificationSchema,\n McpAuthRequiredNotificationSchema,\n McpAuthCompletedNotificationSchema,\n] as const;\n\n/** Discriminated union over all 20 session notification types. */\nexport const SessionNotificationPayloadSchema = z.discriminatedUnion(\n 'type',\n SessionNotificationSchemaList\n);\n\nexport type SessionNotificationPayload = z.infer<\n typeof SessionNotificationPayloadSchema\n>;\n\n/** Parameters for session notification (wraps the discriminated union). */\nconst _SessionNotificationParamsSchema = z\n .object({\n notification: SessionNotificationPayloadSchema,\n })\n .passthrough();\n\n/* eslint-disable @typescript-eslint/consistent-type-assertions -- Zod workaround for deep type inference */\nexport const SessionNotificationParamsSchema: z.ZodType<\n SessionNotificationParams,\n z.ZodTypeDef,\n unknown\n> = _SessionNotificationParamsSchema as z.ZodType<\n SessionNotificationParams,\n z.ZodTypeDef,\n unknown\n>;\n/* eslint-enable @typescript-eslint/consistent-type-assertions */\n\nexport type SessionNotificationParams = {\n notification: SessionNotificationPayload;\n [key: string]: unknown;\n};\n\n/** Full session notification with JSON-RPC envelope. */\nconst _SessionNotificationSchema = JsonRpcNotificationSchema.extend({\n method: z.literal(DroidClientMethod.SESSION_NOTIFICATION),\n params: SessionNotificationParamsSchema,\n});\n\n/* eslint-disable @typescript-eslint/consistent-type-assertions -- Zod workaround for deep type inference */\nexport const SessionNotificationSchema: z.ZodType<\n SessionNotification,\n z.ZodTypeDef,\n unknown\n> = _SessionNotificationSchema as z.ZodType<\n SessionNotification,\n z.ZodTypeDef,\n unknown\n>;\n/* eslint-enable @typescript-eslint/consistent-type-assertions */\n\nexport type SessionNotification = z.output<typeof JsonRpcNotificationSchema> & {\n method: 'droid.session_notification';\n params: SessionNotificationParams;\n};\n\nexport const EditToolConfirmationDetailsSchema = z\n .object({\n type: z.literal(ToolConfirmationType.Edit),\n filePath: z.string(),\n fileName: z.string(),\n oldContent: z.string().optional(),\n newContent: z.string().optional(),\n })\n .passthrough();\n\nexport type EditToolConfirmationDetails = z.infer<\n typeof EditToolConfirmationDetailsSchema\n>;\n\nexport const ExecuteToolConfirmationDetailsSchema = z\n .object({\n type: z.literal(ToolConfirmationType.Execute),\n fullCommand: z.string(),\n command: z.string(),\n extractedCommands: z.array(z.string()).optional(),\n impactLevel: z.string().optional(),\n })\n .passthrough();\n\nexport type ExecuteToolConfirmationDetails = z.infer<\n typeof ExecuteToolConfirmationDetailsSchema\n>;\n\nexport const CreateToolConfirmationDetailsSchema = z\n .object({\n type: z.literal(ToolConfirmationType.Create),\n filePath: z.string(),\n fileName: z.string(),\n content: z.string(),\n })\n .passthrough();\n\nexport type CreateToolConfirmationDetails = z.infer<\n typeof CreateToolConfirmationDetailsSchema\n>;\n\nexport const AskUserQuestionSchema = z\n .object({\n index: z.number(),\n topic: z.string(),\n question: z.string(),\n options: z.array(z.string()),\n })\n .passthrough();\n\nexport type AskUserQuestion = z.infer<typeof AskUserQuestionSchema>;\n\nexport const AskUserConfirmationDetailsSchema = z\n .object({\n type: z.literal(ToolConfirmationType.AskUser),\n questionnaire: z.string(),\n parsed: z\n .object({\n questions: z.array(AskUserQuestionSchema),\n })\n .optional(),\n parseError: z\n .object({\n message: z.string(),\n line: z.number().optional(),\n })\n .optional(),\n })\n .passthrough();\n\nexport type AskUserConfirmationDetails = z.infer<\n typeof AskUserConfirmationDetailsSchema\n>;\n\nexport const ExitSpecModeConfirmationDetailsSchema = z\n .object({\n type: z.literal(ToolConfirmationType.ExitSpecMode),\n plan: z.string(),\n title: z.string().optional(),\n optionNames: z.array(z.string()).optional(),\n })\n .passthrough();\n\nexport type ExitSpecModeConfirmationDetails = z.infer<\n typeof ExitSpecModeConfirmationDetailsSchema\n>;\n\nexport const ProposeMissionConfirmationDetailsSchema = z\n .object({\n type: z.literal(ToolConfirmationType.ProposeMission),\n proposal: z.string(),\n title: z.string().optional(),\n })\n .passthrough();\n\nexport type ProposeMissionConfirmationDetails = z.infer<\n typeof ProposeMissionConfirmationDetailsSchema\n>;\n\nexport const StartMissionRunConfirmationDetailsSchema = z\n .object({\n type: z.literal(ToolConfirmationType.StartMissionRun),\n runningMissionCount: z.number(),\n runningMissionSessionIds: z.array(z.string()),\n })\n .passthrough();\n\nexport type StartMissionRunConfirmationDetails = z.infer<\n typeof StartMissionRunConfirmationDetailsSchema\n>;\n\nexport const ApplyPatchToolConfirmationDetailsSchema = z\n .object({\n type: z.literal(ToolConfirmationType.ApplyPatch),\n filePath: z.string(),\n fileName: z.string(),\n patchContent: z.string(),\n oldContent: z.string().optional(),\n newContent: z.string().optional(),\n })\n .passthrough();\n\nexport type ApplyPatchToolConfirmationDetails = z.infer<\n typeof ApplyPatchToolConfirmationDetailsSchema\n>;\n\nexport const McpToolConfirmationDetailsSchema = z\n .object({\n type: z.literal(ToolConfirmationType.McpTool),\n toolName: z.string(),\n impactLevel: z.string(),\n })\n .passthrough();\n\nexport type McpToolConfirmationDetails = z.infer<\n typeof McpToolConfirmationDetailsSchema\n>;\n\n/** Discriminated union over tool confirmation detail types. */\nexport const ToolConfirmationDetailsSchema = z.discriminatedUnion('type', [\n EditToolConfirmationDetailsSchema,\n ExecuteToolConfirmationDetailsSchema,\n CreateToolConfirmationDetailsSchema,\n AskUserConfirmationDetailsSchema,\n ExitSpecModeConfirmationDetailsSchema,\n ProposeMissionConfirmationDetailsSchema,\n StartMissionRunConfirmationDetailsSchema,\n ApplyPatchToolConfirmationDetailsSchema,\n McpToolConfirmationDetailsSchema,\n]);\n\nexport type ToolConfirmationDetails = z.infer<\n typeof ToolConfirmationDetailsSchema\n>;\n\n/** Tool confirmation information (toolUse + confirmationType + details). */\nexport const ToolConfirmationInfoSchema = z\n .object({\n toolUse: ToolUseSchema,\n confirmationType: z.nativeEnum(ToolConfirmationType),\n details: ToolConfirmationDetailsSchema,\n })\n .passthrough();\n\nexport type ToolConfirmationInfo = z.infer<typeof ToolConfirmationInfoSchema>;\n\n/** Parameters for droid.request_permission request. */\nexport const RequestPermissionRequestParamsSchema = z\n .object({\n toolUses: z.array(ToolConfirmationInfoSchema),\n options: z.array(ToolConfirmationListItemSchema),\n })\n .passthrough();\n\nexport type RequestPermissionRequestParams = z.infer<\n typeof RequestPermissionRequestParamsSchema\n>;\n\n/** Request for permission from the server (server → client). */\nexport const RequestPermissionRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidClientMethod.REQUEST_PERMISSION),\n params: RequestPermissionRequestParamsSchema,\n});\n\nexport type RequestPermissionRequest = z.infer<\n typeof RequestPermissionRequestSchema\n>;\n\nexport type RequestPermissionSelection =\n | ToolConfirmationOutcome\n | `${ToolConfirmationOutcome}`;\n\nexport type RequestPermissionHandlerResult =\n | RequestPermissionSelection\n | {\n selectedOption: RequestPermissionSelection;\n comment?: string;\n };\n\n/** Result for droid.request_permission response. */\nexport const RequestPermissionResultSchema = z\n .object({\n selectedOption: z.nativeEnum(ToolConfirmationOutcome),\n comment: z.string().optional(),\n })\n .strict();\n\nexport type RequestPermissionResult = z.infer<\n typeof RequestPermissionResultSchema\n>;\n\n/** Response to droid.request_permission. */\nexport const RequestPermissionResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({\n result: RequestPermissionResultSchema,\n }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type RequestPermissionResponse = z.infer<\n typeof RequestPermissionResponseSchema\n>;\n\n/** Parameters for droid.ask_user request. */\nexport const AskUserRequestParamsSchema = z\n .object({\n toolCallId: z.string(),\n questions: z.array(AskUserQuestionSchema),\n })\n .passthrough();\n\nexport type AskUserRequestParams = z.infer<typeof AskUserRequestParamsSchema>;\n\n/** Ask user request from the server (server → client). */\nexport const AskUserRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidClientMethod.ASK_USER),\n params: AskUserRequestParamsSchema,\n});\n\nexport type AskUserRequest = z.infer<typeof AskUserRequestSchema>;\n\n/** A collected answer from the user. */\nexport const AskUserCollectedAnswerSchema = z\n .object({\n index: z.number(),\n question: z.string(),\n answer: z.string(),\n })\n .strict();\n\nexport type AskUserCollectedAnswer = z.infer<\n typeof AskUserCollectedAnswerSchema\n>;\n\n/** Result for droid.ask_user response. */\nexport const AskUserResultSchema = z\n .object({\n cancelled: z.boolean().optional(),\n answers: z.array(AskUserCollectedAnswerSchema),\n })\n .strict();\n\nexport type AskUserResult = z.infer<typeof AskUserResultSchema>;\n\n/** Response to droid.ask_user. */\nexport const AskUserResponseSchema = z.union([\n JsonRpcResponseSuccessSchema.extend({ result: AskUserResultSchema }),\n JsonRpcResponseFailureSchema,\n]);\n\nexport type AskUserResponse = z.infer<typeof AskUserResponseSchema>;\n\n/** Union over all 3 server → client methods. */\nconst _CliRequestOrNotificationSchema = z.union([\n SessionNotificationSchema,\n RequestPermissionRequestSchema,\n AskUserRequestSchema,\n]);\n\n/* eslint-disable @typescript-eslint/consistent-type-assertions -- Zod workaround for deep type inference */\nexport const CliRequestOrNotificationSchema: z.ZodType<\n CliRequestOrNotification,\n z.ZodTypeDef,\n unknown\n> = _CliRequestOrNotificationSchema as z.ZodType<\n CliRequestOrNotification,\n z.ZodTypeDef,\n unknown\n>;\n/* eslint-enable @typescript-eslint/consistent-type-assertions */\n\nexport type CliRequestOrNotification =\n | SessionNotification\n | RequestPermissionRequest\n | AskUserRequest;\n","/** Re-exported for convenience. */\nexport {\n DEFAULT_REQUEST_TIMEOUT,\n SESSION_INIT_TIMEOUT,\n MCP_AUTH_TIMEOUT,\n} from './schemas/constants.js';\n\n/** Injected at build time via tsup's `define` option. */\nexport const SDK_VERSION: string = process.env.SDK_VERSION || 'unknown';\n\n/** Injected into every `initializeSession` call for backend tracking. */\nexport const SDK_TAG = {\n name: 'sdk' as const,\n metadata: { language: 'typescript' as const, version: SDK_VERSION },\n};\n","export class ConnectionError extends Error {\n readonly cwd: string;\n\n readonly execPath: string;\n\n constructor(message: string, options?: { cwd?: string; execPath?: string }) {\n super(message);\n this.name = 'ConnectionError';\n this.cwd = options?.cwd ?? '';\n this.execPath = options?.execPath ?? '';\n Object.setPrototypeOf(this, ConnectionError.prototype);\n }\n}\n\nexport class ProtocolError extends Error {\n readonly code: number | undefined;\n\n readonly data: unknown;\n\n constructor(message: string, options?: { code?: number; data?: unknown }) {\n super(message);\n this.name = 'ProtocolError';\n this.code = options?.code;\n this.data = options?.data;\n Object.setPrototypeOf(this, ProtocolError.prototype);\n }\n}\n\nexport class SessionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'SessionError';\n Object.setPrototypeOf(this, SessionError.prototype);\n }\n}\n\nexport class SessionNotFoundError extends SessionError {\n readonly sessionId: string;\n\n constructor(sessionId: string) {\n super(`Session not found: ${sessionId}`);\n this.name = 'SessionNotFoundError';\n this.sessionId = sessionId;\n Object.setPrototypeOf(this, SessionNotFoundError.prototype);\n }\n}\n\nexport class TimeoutError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'TimeoutError';\n Object.setPrototypeOf(this, TimeoutError.prototype);\n }\n}\n\nexport class ProcessExitError extends Error {\n readonly exitCode: number | null;\n\n readonly signal: string | null;\n\n constructor(\n message: string,\n options?: { exitCode?: number | null; signal?: string | null }\n ) {\n super(message);\n this.name = 'ProcessExitError';\n this.exitCode = options?.exitCode ?? null;\n this.signal = options?.signal ?? null;\n Object.setPrototypeOf(this, ProcessExitError.prototype);\n }\n}\n","import { type ChildProcess, spawn } from 'node:child_process';\nimport * as readline from 'node:readline';\n\nimport { ConnectionError, ProcessExitError } from './errors.js';\nimport type {\n DroidClientTransport,\n ErrorCallback,\n MessageCallback,\n ProcessTransportOptions,\n} from './types.js';\nimport { isRecord } from './utils.js';\n\nconst DEFAULT_EXEC_ARGS = [\n 'exec',\n '--input-format',\n 'stream-jsonrpc',\n '--output-format',\n 'stream-jsonrpc',\n];\n\nconst DEFAULT_GRACE_PERIOD_MS = 5_000;\n\nexport class ProcessTransport implements DroidClientTransport {\n private readonly execPath: string;\n private readonly execArgs: string[];\n private readonly cwd: string | undefined;\n private readonly env: Record<string, string> | undefined;\n private readonly gracePeriodMs: number;\n\n private childProcess: ChildProcess | null = null;\n private readlineInterface: readline.Interface | null = null;\n private messageHandler: MessageCallback | null = null;\n private errorHandler: ErrorCallback | null = null;\n\n /** Once set, all subsequent `send()` calls throw immediately. */\n private processError: Error | null = null;\n\n /** Serializes stdin writes to prevent interleaving. */\n private writeChain: Promise<void> = Promise.resolve();\n\n private _isConnected = false;\n private isClosing = false;\n\n constructor(options: ProcessTransportOptions = {}) {\n this.execPath = options.execPath ?? 'droid';\n this.execArgs = options.execArgs\n ? [...options.execArgs]\n : [...DEFAULT_EXEC_ARGS];\n this.cwd = options.cwd;\n this.env = options.env;\n this.gracePeriodMs =\n (options.gracePeriod ?? DEFAULT_GRACE_PERIOD_MS / 1_000) * 1_000;\n }\n\n get isConnected(): boolean {\n return this._isConnected;\n }\n\n async connect(): Promise<void> {\n if (this._isConnected) {\n throw new ConnectionError('Transport already connected', {\n execPath: this.execPath,\n });\n }\n\n this.processError = null;\n this.isClosing = false;\n this.writeChain = Promise.resolve();\n\n const mergedEnv = this.env ? { ...process.env, ...this.env } : undefined;\n\n try {\n this.childProcess = spawn(this.execPath, this.execArgs, {\n stdio: ['pipe', 'pipe', 'pipe'],\n cwd: this.cwd,\n env: mergedEnv,\n });\n } catch (err: unknown) {\n const message =\n err instanceof Error\n ? `Failed to start droid process: ${err.message}`\n : 'Failed to start droid process';\n throw new ConnectionError(message, {\n execPath: this.execPath,\n cwd: this.cwd,\n });\n }\n\n this._isConnected = true;\n this.setupHandlers();\n }\n\n send(message: Record<string, unknown>): void {\n if (this.processError) {\n throw this.processError;\n }\n if (!this._isConnected || !this.childProcess || !this.childProcess.stdin) {\n throw new ConnectionError('Transport not connected', {\n execPath: this.execPath,\n });\n }\n\n const line = JSON.stringify(message) + '\\n';\n\n // Chain writes to prevent interleaving on concurrent calls.\n const previousChain = this.writeChain;\n\n this.writeChain = (async () => {\n // Wait for the previous write to finish (ignore its error — it's\n // already been reported to the caller of the previous send()).\n await previousChain.catch(() => {});\n\n if (\n !this.childProcess ||\n !this.childProcess.stdin ||\n this.childProcess.killed ||\n this.isClosing\n ) {\n throw new ConnectionError('Process disconnected before write', {\n execPath: this.execPath,\n });\n }\n\n if (this.processError) {\n throw this.processError;\n }\n\n await new Promise<void>((resolve, reject) => {\n if (!this.childProcess || !this.childProcess.stdin) {\n reject(\n new ConnectionError('Process stdin unavailable', {\n execPath: this.execPath,\n })\n );\n return;\n }\n\n const stdin = this.childProcess.stdin;\n if ('writable' in stdin && !stdin.writable) {\n reject(\n new ConnectionError('Process stdin is not writable', {\n execPath: this.execPath,\n })\n );\n return;\n }\n\n stdin.write(line, (error) => {\n if (error) {\n const msg = error.message || String(error);\n if (msg.includes('EPIPE') || msg.includes('ECONNRESET')) {\n reject(\n new ConnectionError('Process stdin closed during write', {\n execPath: this.execPath,\n })\n );\n } else {\n reject(\n new ConnectionError(\n `Failed to write to process stdin: ${msg}`,\n { execPath: this.execPath }\n )\n );\n }\n } else {\n resolve();\n }\n });\n });\n })();\n }\n\n onMessage(callback: MessageCallback): void {\n this.messageHandler = callback;\n }\n\n onError(callback: ErrorCallback): void {\n this.errorHandler = callback;\n }\n\n async close(): Promise<void> {\n if (this.isClosing) {\n return;\n }\n\n this.isClosing = true;\n this._isConnected = false;\n\n const proc = this.childProcess;\n this.childProcess = null;\n\n if (this.readlineInterface) {\n this.readlineInterface.close();\n this.readlineInterface = null;\n }\n\n if (proc && proc.exitCode === null && !proc.killed) {\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(() => {\n // Escalate to SIGKILL\n if (proc.exitCode === null && !proc.killed) {\n try {\n proc.kill('SIGKILL');\n } catch {\n // Process may already be gone\n }\n }\n }, this.gracePeriodMs);\n\n proc.once('exit', () => {\n clearTimeout(timeout);\n resolve();\n });\n\n // Close stdin first, then SIGTERM\n if (proc.stdin) {\n try {\n proc.stdin.end();\n } catch {\n // Ignore\n }\n }\n\n try {\n proc.kill('SIGTERM');\n } catch {\n // Process may already be gone — resolve immediately\n clearTimeout(timeout);\n resolve();\n }\n });\n }\n\n this.isClosing = false;\n }\n\n private setupHandlers(): void {\n const proc = this.childProcess;\n if (!proc || !proc.stdout) {\n return;\n }\n\n this.readlineInterface = readline.createInterface({\n input: proc.stdout,\n crlfDelay: Infinity,\n });\n\n this.readlineInterface.on('line', (line) => {\n const trimmed = line.trim();\n if (!trimmed) {\n return;\n }\n\n // Protocol messages are JSON objects, not JSON-RPC batch arrays.\n if (trimmed.startsWith('{')) {\n try {\n const parsed: unknown = JSON.parse(trimmed);\n if (this.messageHandler && isRecord(parsed)) {\n this.messageHandler(parsed);\n }\n } catch {\n // Malformed JSON — skip silently\n }\n }\n });\n\n proc.on('error', (error) => {\n this.processError = new ConnectionError(\n `Failed to start droid process: ${error.message}`,\n {\n execPath: this.execPath,\n cwd: this.cwd,\n }\n );\n this._isConnected = false;\n if (!this.isClosing && this.errorHandler) {\n this.errorHandler(this.processError);\n }\n });\n\n proc.on('exit', (code, signal) => {\n if (this.readlineInterface) {\n this.readlineInterface.close();\n this.readlineInterface = null;\n }\n\n this._isConnected = false;\n\n if (!this.isClosing) {\n const exitCode = code ?? null;\n const exitSignal = signal ?? null;\n\n let message: string;\n if (exitSignal) {\n message = `Droid process was killed (${exitSignal})`;\n } else if (exitCode !== null && exitCode !== 0) {\n message = `Droid process exited unexpectedly (exit code ${exitCode})`;\n } else if (exitCode === 0) {\n message = 'Droid process exited normally';\n } else {\n message = 'Droid process exited unexpectedly';\n }\n\n this.processError = new ProcessExitError(message, {\n exitCode,\n signal: exitSignal,\n });\n\n if (this.errorHandler) {\n this.errorHandler(this.processError);\n }\n }\n });\n }\n}\n","/** Shared low-level utilities with no other module dependencies. */\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import { v4 as uuidv4 } from 'uuid';\n\nimport {\n ConnectionError,\n ProtocolError,\n SessionNotFoundError,\n TimeoutError,\n} from './errors.js';\nimport {\n DEFAULT_REQUEST_TIMEOUT,\n FACTORY_PROTOCOL_VERSION,\n JSONRPC_VERSION,\n LEGACY_FACTORY_API_VERSION,\n} from './schemas/constants.js';\nimport {\n DroidClientMethod,\n JsonRpcMessageType,\n JsonRpcErrorCode,\n ToolConfirmationOutcome,\n} from './schemas/enums.js';\nimport {\n AskUserRequestParamsSchema,\n AskUserResultSchema,\n RequestPermissionRequestParamsSchema,\n RequestPermissionResultSchema,\n SessionNotificationParamsSchema,\n} from './schemas/server.js';\nimport type {\n AskUserRequestParams,\n AskUserResult,\n RequestPermissionHandlerResult,\n RequestPermissionRequestParams,\n RequestPermissionResult,\n} from './schemas/server.js';\nimport { JsonRpcMessageSchema, type JsonRpcError } from './schemas/shared.js';\nimport type { DroidClientTransport } from './types.js';\n\nexport type PermissionHandler = (\n params: RequestPermissionRequestParams\n) => RequestPermissionHandlerResult | Promise<RequestPermissionHandlerResult>;\n\nexport type AskUserHandler = (\n params: AskUserRequestParams\n) => AskUserResult | Promise<AskUserResult>;\n\nexport type NotificationCallback = (\n notification: Record<string, unknown>\n) => void;\n\nexport interface NotificationFilter {\n type?: string;\n}\n\ninterface PendingRequest {\n readonly method: string;\n readonly requestId: string;\n readonly params: Record<string, unknown>;\n readonly resolve: (value: unknown) => void;\n readonly reject: (reason: Error) => void;\n readonly timer: ReturnType<typeof setTimeout>;\n}\n\ninterface NotificationListener {\n readonly callback: NotificationCallback;\n readonly filter?: NotificationFilter;\n}\n\nexport class ProtocolEngine {\n private readonly _transport: DroidClientTransport;\n private readonly _defaultTimeout: number;\n\n private readonly _pendingRequests = new Map<string, PendingRequest>();\n private readonly _notificationListeners = new Set<NotificationListener>();\n private _permissionHandler: PermissionHandler | null = null;\n private _askUserHandler: AskUserHandler | null = null;\n private _transportError: Error | null = null;\n private _closed = false;\n\n constructor(options: {\n transport: DroidClientTransport;\n defaultTimeout?: number;\n }) {\n this._transport = options.transport;\n this._defaultTimeout = options.defaultTimeout ?? DEFAULT_REQUEST_TIMEOUT;\n\n this._transport.onMessage((message: Record<string, unknown>) => {\n this._handleMessage(message);\n });\n this._transport.onError((error: Error) => {\n this._handleTransportError(error);\n });\n }\n\n async sendRequest(\n method: string,\n params: Record<string, unknown>,\n timeout?: number\n ): Promise<unknown> {\n if (this._closed) {\n throw new ConnectionError('Protocol engine is closed');\n }\n\n if (this._transportError !== null) {\n throw new ConnectionError(\n `Transport error: ${this._transportError.message}`\n );\n }\n\n const effectiveTimeout = timeout ?? this._defaultTimeout;\n const requestId = uuidv4();\n\n const envelope = {\n jsonrpc: JSONRPC_VERSION,\n factoryApiVersion: LEGACY_FACTORY_API_VERSION,\n factoryProtocolVersion: FACTORY_PROTOCOL_VERSION,\n type: JsonRpcMessageType.Request,\n id: requestId,\n method,\n params,\n };\n\n // Create a promise that will be resolved when we get a matching response\n return new Promise<unknown>((resolve, reject) => {\n const timer = setTimeout(() => {\n this._pendingRequests.delete(requestId);\n reject(\n new TimeoutError(\n `Request ${method} timed out after ${effectiveTimeout}ms`\n )\n );\n }, effectiveTimeout);\n\n const pending: PendingRequest = {\n method,\n requestId,\n params,\n resolve,\n reject,\n timer,\n };\n this._pendingRequests.set(requestId, pending);\n\n try {\n this._transport.send(envelope);\n } catch (sendError) {\n clearTimeout(timer);\n this._pendingRequests.delete(requestId);\n if (sendError instanceof Error) {\n reject(\n new ConnectionError(`Failed to send request: ${sendError.message}`)\n );\n } else {\n reject(new ConnectionError('Failed to send request'));\n }\n }\n });\n }\n\n onNotification(\n callback: NotificationCallback,\n filter?: NotificationFilter\n ): () => void {\n const listener: NotificationListener = { callback, filter };\n this._notificationListeners.add(listener);\n\n let unsubscribed = false;\n return () => {\n if (!unsubscribed) {\n unsubscribed = true;\n this._notificationListeners.delete(listener);\n }\n };\n }\n\n setPermissionHandler(handler: PermissionHandler): void {\n this._permissionHandler = handler;\n }\n\n clearPermissionHandler(): void {\n this._permissionHandler = null;\n }\n\n /**\n * Register a handler for server→client ask-user requests.\n *\n * The handler receives the request params and should return\n * a result object with `cancelled` and `answers` keys.\n *\n * Replaces any previously registered handler.\n */\n setAskUserHandler(handler: AskUserHandler): void {\n this._askUserHandler = handler;\n }\n\n clearAskUserHandler(): void {\n this._askUserHandler = null;\n }\n\n get isHealthy(): boolean {\n return !this._closed && this._transportError === null;\n }\n\n async close(): Promise<void> {\n if (this._closed) {\n return;\n }\n this._closed = true;\n\n const error = new ConnectionError(\n 'Protocol engine closed: pending requests cancelled'\n );\n this._rejectAllPending(error);\n\n this._permissionHandler = null;\n this._askUserHandler = null;\n this._notificationListeners.clear();\n\n await this._transport.close();\n }\n\n private _handleMessage(raw: Record<string, unknown>): void {\n const parsed = JsonRpcMessageSchema.safeParse(raw);\n\n if (!parsed.success) {\n // Malformed message — silently ignore\n return;\n }\n\n const msg = parsed.data;\n switch (msg.type) {\n case JsonRpcMessageType.Response:\n this._handleResponse(msg.id, msg.result, msg.error);\n break;\n case JsonRpcMessageType.Notification:\n this._handleNotification(msg);\n break;\n case JsonRpcMessageType.Request:\n void this._handleServerRequest(msg.method, msg.id, msg.params);\n break;\n }\n }\n\n private _handleResponse(\n responseId: string | null,\n result: unknown,\n error: JsonRpcError | undefined\n ): void {\n if (responseId == null) {\n return;\n }\n\n const pending = this._pendingRequests.get(responseId);\n\n if (pending == null) {\n return;\n }\n\n this._pendingRequests.delete(responseId);\n clearTimeout(pending.timer);\n\n if (error != null) {\n if (error.code === JsonRpcErrorCode.ENTITY_NOT_FOUND) {\n const sessionId = String(\n pending.params['sessionId'] ?? pending.requestId\n );\n pending.reject(new SessionNotFoundError(sessionId));\n return;\n }\n\n pending.reject(\n new ProtocolError(error.message, { code: error.code, data: error.data })\n );\n return;\n }\n\n pending.resolve(result);\n }\n\n private _handleNotification(notification: Record<string, unknown>): void {\n let notificationType: string | undefined;\n const parsed = SessionNotificationParamsSchema.safeParse(\n notification['params']\n );\n if (parsed.success) {\n notificationType = parsed.data.notification.type;\n }\n\n for (const listener of this._notificationListeners) {\n if (\n listener.filter?.type != null &&\n listener.filter.type !== notificationType\n ) {\n continue;\n }\n\n try {\n listener.callback(notification);\n } catch {\n // Notification listener raised — don't crash the engine\n }\n }\n }\n\n private async _handleServerRequest(\n method: string,\n requestId: string,\n params: unknown\n ): Promise<void> {\n if (method === DroidClientMethod.REQUEST_PERMISSION) {\n await this._handlePermissionRequest(requestId, params);\n } else if (method === DroidClientMethod.ASK_USER) {\n await this._handleAskUserRequest(requestId, params);\n }\n }\n\n private async _handlePermissionRequest(\n requestId: string,\n params: unknown\n ): Promise<void> {\n const handler = this._permissionHandler;\n\n if (handler == null) {\n // Default: Cancel\n this._sendResponse(\n requestId,\n RequestPermissionResultSchema.parse({\n selectedOption: ToolConfirmationOutcome.Cancel,\n })\n );\n return;\n }\n\n try {\n const parsedParams = RequestPermissionRequestParamsSchema.parse(params);\n const selection = await Promise.resolve(handler(parsedParams));\n const result =\n typeof selection === 'string'\n ? { selectedOption: selection }\n : selection;\n this._sendResponse(\n requestId,\n RequestPermissionResultSchema.parse(result)\n );\n } catch (exc) {\n const errorMessage = exc instanceof Error ? exc.message : String(exc);\n this._sendErrorResponse(\n requestId,\n JsonRpcErrorCode.INTERNAL_ERROR,\n 'Failed to handle permission request',\n errorMessage\n );\n }\n }\n\n private async _handleAskUserRequest(\n requestId: string,\n params: unknown\n ): Promise<void> {\n const handler = this._askUserHandler;\n\n if (handler == null) {\n // Default: cancelled=true\n this._sendResponse(\n requestId,\n AskUserResultSchema.parse({ cancelled: true, answers: [] })\n );\n return;\n }\n\n try {\n const parsedParams = AskUserRequestParamsSchema.parse(params);\n const result = await Promise.resolve(handler(parsedParams));\n this._sendResponse(requestId, AskUserResultSchema.parse(result));\n } catch (exc) {\n const errorMessage = exc instanceof Error ? exc.message : String(exc);\n this._sendErrorResponse(\n requestId,\n JsonRpcErrorCode.INTERNAL_ERROR,\n 'Failed to handle ask-user request',\n errorMessage\n );\n }\n }\n\n /**\n * Handle a transport error.\n * Sets the sticky transport error and rejects all pending requests.\n * The original error is preserved as `cause` on the ConnectionError.\n */\n private _handleTransportError(error: Error): void {\n this._transportError = error;\n const connectionError = new ConnectionError(\n `Transport error: ${error.message}`\n );\n connectionError.cause = error;\n this._rejectAllPending(connectionError);\n }\n\n private _sendResponse(\n requestId: string,\n result: RequestPermissionResult | AskUserResult\n ): void {\n const response: Record<string, unknown> = {\n jsonrpc: JSONRPC_VERSION,\n factoryApiVersion: LEGACY_FACTORY_API_VERSION,\n factoryProtocolVersion: FACTORY_PROTOCOL_VERSION,\n type: JsonRpcMessageType.Response,\n id: requestId,\n result,\n };\n this._sendBestEffort(response);\n }\n\n private _sendErrorResponse(\n requestId: string,\n code: number,\n message: string,\n data?: unknown\n ): void {\n const errorObj: Record<string, unknown> = { code, message };\n if (data !== undefined) {\n errorObj['data'] = data;\n }\n\n const response: Record<string, unknown> = {\n jsonrpc: JSONRPC_VERSION,\n factoryApiVersion: LEGACY_FACTORY_API_VERSION,\n factoryProtocolVersion: FACTORY_PROTOCOL_VERSION,\n type: JsonRpcMessageType.Response,\n id: requestId,\n error: errorObj,\n };\n this._sendBestEffort(response);\n }\n\n private _sendBestEffort(message: Record<string, unknown>): void {\n try {\n this._transport.send(message);\n } catch {\n // The transport is already failing; dropping the reply is safer than\n // throwing from a server→client callback path.\n }\n }\n\n private _rejectAllPending(error: Error): void {\n const pending = new Map(this._pendingRequests);\n this._pendingRequests.clear();\n\n for (const req of pending.values()) {\n clearTimeout(req.timer);\n req.reject(error);\n }\n }\n}\n","import type { z } from 'zod';\n\nimport { ConnectionError, SessionError } from './errors.js';\nimport {\n ProtocolEngine,\n type AskUserHandler,\n type NotificationCallback,\n type NotificationFilter,\n type PermissionHandler,\n} from './protocol.js';\nimport type {\n AddMcpServerRequestParams,\n AddMcpServerResult,\n AddUserMessageRequestParams,\n AddUserMessageResult,\n AuthenticateMcpServerRequestParams,\n AuthenticateMcpServerResult,\n CancelMcpAuthRequestParams,\n CancelMcpAuthResult,\n ClearMcpAuthRequestParams,\n ClearMcpAuthResult,\n CompactSessionRequestParams,\n CompactSessionResult,\n GetContextStatsResult,\n ExecuteRewindRequestParams,\n ExecuteRewindResult,\n ForkSessionResult,\n RenameSessionRequestParams,\n RenameSessionResult,\n GetRewindInfoRequestParams,\n GetRewindInfoResult,\n InitializeSessionRequestParams,\n InitializeSessionResult,\n InterruptSessionResult,\n KillWorkerSessionRequestParams,\n KillWorkerSessionResult,\n ListMcpRegistryResult,\n ListMcpServersResult,\n ListMcpToolsResult,\n ListToolsRequestParams,\n ListToolsResult,\n ListSkillsResult,\n LoadSessionRequestParams,\n LoadSessionResult,\n RemoveMcpServerRequestParams,\n RemoveMcpServerResult,\n SubmitBugReportRequestParams,\n SubmitBugReportResult,\n SubmitMcpAuthCodeRequestParams,\n SubmitMcpAuthCodeResult,\n ToggleMcpServerRequestParams,\n ToggleMcpServerResult,\n ToggleMcpToolRequestParams,\n ToggleMcpToolResult,\n UpdateSessionSettingsRequestParams,\n UpdateSessionSettingsResult,\n} from './schemas/client.js';\nimport {\n AddMcpServerResultSchema,\n AddUserMessageResultSchema,\n AuthenticateMcpServerResultSchema,\n CancelMcpAuthResultSchema,\n ClearMcpAuthResultSchema,\n CompactSessionResultSchema,\n GetContextStatsResultSchema,\n ExecuteRewindResultSchema,\n ForkSessionResultSchema,\n RenameSessionResultSchema,\n GetRewindInfoResultSchema,\n InitializeSessionResultSchema,\n InterruptSessionResultSchema,\n KillWorkerSessionResultSchema,\n ListMcpRegistryResultSchema,\n ListMcpServersResultSchema,\n ListMcpToolsResultSchema,\n ListToolsResultSchema,\n ListSkillsResultSchema,\n LoadSessionResultSchema,\n RemoveMcpServerResultSchema,\n SubmitBugReportResultSchema,\n SubmitMcpAuthCodeResultSchema,\n ToggleMcpServerResultSchema,\n ToggleMcpToolResultSchema,\n UpdateSessionSettingsResultSchema,\n} from './schemas/client.js';\nimport {\n COMPACTION_TIMEOUT,\n MCP_AUTH_TIMEOUT,\n REWIND_TIMEOUT,\n SESSION_INIT_TIMEOUT,\n} from './schemas/constants.js';\nimport { DroidServerMethod, ToolConfirmationOutcome } from './schemas/enums.js';\nimport { SessionNotificationParamsSchema } from './schemas/server.js';\nimport type {\n AskUserRequestParams,\n AskUserResult,\n RequestPermissionHandlerResult,\n RequestPermissionRequestParams,\n} from './schemas/server.js';\nimport type { DroidClientTransport } from './types.js';\n\nexport type ClientPermissionHandler = PermissionHandler;\n\nexport type ClientAskUserHandler = AskUserHandler;\n\ninterface ClientNotificationListener {\n readonly callback: NotificationCallback;\n readonly filter?: NotificationFilter;\n}\n\nexport interface DroidClientOptions {\n /** A connected DroidClientTransport implementation. */\n transport: DroidClientTransport;\n\n /** Default request timeout in ms. Defaults to 30 000. */\n defaultTimeout?: number;\n}\n\nexport class DroidClient {\n private readonly _engine: ProtocolEngine;\n private _sessionId: string | null = null;\n private _closed = false;\n\n /**\n * Client-level notification listeners.\n * Each entry is [callback, optional notification filter].\n */\n private readonly _notificationListeners: ClientNotificationListener[] = [];\n\n /** Client-level permission handler. */\n private _permissionHandler: ClientPermissionHandler | null = null;\n\n /** Client-level ask-user handler. */\n private _askUserHandler: ClientAskUserHandler | null = null;\n\n constructor(options: DroidClientOptions) {\n this._engine = new ProtocolEngine({\n transport: options.transport,\n defaultTimeout: options.defaultTimeout,\n });\n\n this._engine.onNotification((notification) => {\n this._dispatchNotification(notification);\n });\n\n this._engine.setPermissionHandler((params) =>\n this._dispatchPermissionRequest(params)\n );\n this._engine.setAskUserHandler((params) =>\n this._dispatchAskUserRequest(params)\n );\n }\n\n private async _rpc<T extends z.ZodTypeAny>(\n method: string,\n params: Record<string, unknown>,\n schema: T,\n timeout?: number\n ): Promise<z.output<T>> {\n const raw = await this._engine.sendRequest(method, params, timeout);\n return schema.parse(raw);\n }\n\n private async _sessionRpc<T extends z.ZodTypeAny>(\n method: string,\n params: Record<string, unknown>,\n schema: T,\n timeout?: number\n ): Promise<z.output<T>> {\n this._ensureNotClosed();\n this._ensureSession();\n return this._rpc(method, params, schema, timeout);\n }\n\n private async _sessionRpcWithoutParams<T extends z.ZodTypeAny>(\n method: string,\n schema: T,\n timeout?: number\n ): Promise<z.output<T>> {\n return this._sessionRpc(method, {}, schema, timeout);\n }\n\n get sessionId(): string | null {\n return this._sessionId;\n }\n\n get isConnected(): boolean {\n return !this._closed && this._engine.isHealthy;\n }\n\n async initializeSession(\n params: InitializeSessionRequestParams\n ): Promise<InitializeSessionResult> {\n this._ensureNotClosed();\n\n const result = await this._rpc(\n DroidServerMethod.INITIALIZE_SESSION,\n params,\n InitializeSessionResultSchema,\n SESSION_INIT_TIMEOUT\n );\n this._sessionId = result.sessionId;\n return result;\n }\n\n async loadSession(\n params: LoadSessionRequestParams\n ): Promise<LoadSessionResult> {\n this._ensureNotClosed();\n\n const result = await this._rpc(\n DroidServerMethod.LOAD_SESSION,\n params,\n LoadSessionResultSchema,\n SESSION_INIT_TIMEOUT\n );\n this._sessionId = params.sessionId;\n return result;\n }\n\n async addUserMessage(\n params: Pick<AddUserMessageRequestParams, 'text'> &\n Partial<\n Pick<\n AddUserMessageRequestParams,\n 'images' | 'files' | 'messageId' | 'outputFormat'\n >\n >\n ): Promise<AddUserMessageResult> {\n return this._sessionRpc(\n DroidServerMethod.ADD_USER_MESSAGE,\n params,\n AddUserMessageResultSchema\n );\n }\n\n async interruptSession(): Promise<InterruptSessionResult> {\n return this._sessionRpcWithoutParams(\n DroidServerMethod.INTERRUPT_SESSION,\n InterruptSessionResultSchema\n );\n }\n\n async killWorkerSession(\n params: KillWorkerSessionRequestParams\n ): Promise<KillWorkerSessionResult> {\n return this._sessionRpc(\n DroidServerMethod.KILL_WORKER_SESSION,\n params,\n KillWorkerSessionResultSchema\n );\n }\n\n async updateSessionSettings(\n params: Partial<UpdateSessionSettingsRequestParams>\n ): Promise<UpdateSessionSettingsResult> {\n return this._sessionRpc(\n DroidServerMethod.UPDATE_SESSION_SETTINGS,\n params,\n UpdateSessionSettingsResultSchema\n );\n }\n\n async toggleMcpServer(\n params: ToggleMcpServerRequestParams\n ): Promise<ToggleMcpServerResult> {\n return this._sessionRpc(\n DroidServerMethod.TOGGLE_MCP_SERVER,\n params,\n ToggleMcpServerResultSchema\n );\n }\n\n async authenticateMcpServer(\n params: AuthenticateMcpServerRequestParams\n ): Promise<AuthenticateMcpServerResult> {\n return this._sessionRpc(\n DroidServerMethod.AUTHENTICATE_MCP_SERVER,\n params,\n AuthenticateMcpServerResultSchema,\n MCP_AUTH_TIMEOUT\n );\n }\n\n async cancelMcpAuth(\n params: CancelMcpAuthRequestParams\n ): Promise<CancelMcpAuthResult> {\n return this._sessionRpc(\n DroidServerMethod.CANCEL_MCP_AUTH,\n params,\n CancelMcpAuthResultSchema\n );\n }\n\n async clearMcpAuth(\n params: ClearMcpAuthRequestParams\n ): Promise<ClearMcpAuthResult> {\n return this._sessionRpc(\n DroidServerMethod.CLEAR_MCP_AUTH,\n params,\n ClearMcpAuthResultSchema\n );\n }\n\n async submitMcpAuthCode(\n params: SubmitMcpAuthCodeRequestParams\n ): Promise<SubmitMcpAuthCodeResult> {\n return this._sessionRpc(\n DroidServerMethod.SUBMIT_MCP_AUTH_CODE,\n params,\n SubmitMcpAuthCodeResultSchema\n );\n }\n\n async addMcpServer(\n params: AddMcpServerRequestParams\n ): Promise<AddMcpServerResult> {\n return this._sessionRpc(\n DroidServerMethod.ADD_MCP_SERVER,\n params,\n AddMcpServerResultSchema\n );\n }\n\n async removeMcpServer(\n params: RemoveMcpServerRequestParams\n ): Promise<RemoveMcpServerResult> {\n return this._sessionRpc(\n DroidServerMethod.REMOVE_MCP_SERVER,\n params,\n RemoveMcpServerResultSchema\n );\n }\n\n async listMcpRegistry(): Promise<ListMcpRegistryResult> {\n return this._sessionRpcWithoutParams(\n DroidServerMethod.LIST_MCP_REGISTRY,\n ListMcpRegistryResultSchema\n );\n }\n\n async listMcpTools(): Promise<ListMcpToolsResult> {\n return this._sessionRpcWithoutParams(\n DroidServerMethod.LIST_MCP_TOOLS,\n ListMcpToolsResultSchema\n );\n }\n\n async listTools(\n params: ListToolsRequestParams = {}\n ): Promise<ListToolsResult> {\n return this._sessionRpc(\n DroidServerMethod.LIST_TOOLS,\n params,\n ListToolsResultSchema\n );\n }\n\n async listMcpServers(): Promise<ListMcpServersResult> {\n return this._sessionRpcWithoutParams(\n DroidServerMethod.LIST_MCP_SERVERS,\n ListMcpServersResultSchema\n );\n }\n\n async toggleMcpTool(\n params: ToggleMcpToolRequestParams\n ): Promise<ToggleMcpToolResult> {\n return this._sessionRpc(\n DroidServerMethod.TOGGLE_MCP_TOOL,\n params,\n ToggleMcpToolResultSchema\n );\n }\n\n async listSkills(): Promise<ListSkillsResult> {\n return this._sessionRpcWithoutParams(\n DroidServerMethod.LIST_SKILLS,\n ListSkillsResultSchema\n );\n }\n\n async submitBugReport(\n params: SubmitBugReportRequestParams\n ): Promise<SubmitBugReportResult> {\n return this._sessionRpc(\n DroidServerMethod.SUBMIT_BUG_REPORT,\n params,\n SubmitBugReportResultSchema\n );\n }\n\n async getRewindInfo(\n params: GetRewindInfoRequestParams\n ): Promise<GetRewindInfoResult> {\n return this._sessionRpc(\n DroidServerMethod.GET_REWIND_INFO,\n params,\n GetRewindInfoResultSchema\n );\n }\n\n async executeRewind(\n params: ExecuteRewindRequestParams\n ): Promise<ExecuteRewindResult> {\n return this._sessionRpc(\n DroidServerMethod.EXECUTE_REWIND,\n params,\n ExecuteRewindResultSchema,\n REWIND_TIMEOUT\n );\n }\n\n async compactSession(\n params: CompactSessionRequestParams\n ): Promise<CompactSessionResult> {\n return this._sessionRpc(\n DroidServerMethod.COMPACT_SESSION,\n params,\n CompactSessionResultSchema,\n COMPACTION_TIMEOUT\n );\n }\n\n async forkSession(): Promise<ForkSessionResult> {\n return this._sessionRpcWithoutParams(\n DroidServerMethod.FORK_SESSION,\n ForkSessionResultSchema\n );\n }\n\n async getContextStats(): Promise<GetContextStatsResult> {\n return this._sessionRpcWithoutParams(\n DroidServerMethod.GET_CONTEXT_STATS,\n GetContextStatsResultSchema\n );\n }\n\n async renameSession(\n params: RenameSessionRequestParams\n ): Promise<RenameSessionResult> {\n return this._sessionRpc(\n DroidServerMethod.RENAME_SESSION,\n params,\n RenameSessionResultSchema\n );\n }\n\n onNotification(\n callback: NotificationCallback,\n filter?: NotificationFilter\n ): () => void {\n const entry: ClientNotificationListener = { callback, filter };\n this._notificationListeners.push(entry);\n\n let unsubscribed = false;\n return () => {\n if (!unsubscribed) {\n unsubscribed = true;\n const idx = this._notificationListeners.indexOf(entry);\n if (idx !== -1) {\n this._notificationListeners.splice(idx, 1);\n }\n }\n };\n }\n\n setPermissionHandler(handler: ClientPermissionHandler): void {\n this._permissionHandler = handler;\n }\n\n clearPermissionHandler(): void {\n this._permissionHandler = null;\n }\n\n setAskUserHandler(handler: ClientAskUserHandler): void {\n this._askUserHandler = handler;\n }\n\n clearAskUserHandler(): void {\n this._askUserHandler = null;\n }\n\n async close(): Promise<void> {\n if (this._closed) {\n return;\n }\n this._closed = true;\n\n this._notificationListeners.length = 0;\n this._permissionHandler = null;\n this._askUserHandler = null;\n\n await this._engine.close();\n }\n\n private _dispatchNotification(notification: Record<string, unknown>): void {\n let notificationType: string | undefined;\n const parsed = SessionNotificationParamsSchema.safeParse(\n notification['params']\n );\n if (parsed.success) {\n notificationType = parsed.data.notification.type;\n }\n\n const listeners = [...this._notificationListeners];\n for (const listener of listeners) {\n if (\n listener.filter?.type != null &&\n listener.filter.type !== notificationType\n ) {\n continue;\n }\n\n try {\n listener.callback(notification);\n } catch {\n // Notification listener raised — don't crash the client\n }\n }\n }\n\n private _dispatchPermissionRequest(\n params: RequestPermissionRequestParams\n ): RequestPermissionHandlerResult | Promise<RequestPermissionHandlerResult> {\n const handler = this._permissionHandler;\n if (handler == null) {\n return ToolConfirmationOutcome.Cancel;\n }\n return handler(params);\n }\n\n private _dispatchAskUserRequest(\n params: AskUserRequestParams\n ): AskUserResult | Promise<AskUserResult> {\n const handler = this._askUserHandler;\n if (handler == null) {\n return { cancelled: true, answers: [] };\n }\n return handler(params);\n }\n\n private _ensureNotClosed(): void {\n if (this._closed) {\n throw new ConnectionError(\n 'Client has been closed. Create a new DroidClient instance to reconnect.'\n );\n }\n }\n\n private _ensureSession(): void {\n if (this._sessionId == null) {\n throw new SessionError(\n 'No active session. Call initializeSession or loadSession first.'\n );\n }\n }\n}\n","import type { TokenUsage } from './schemas/client.js';\nimport {\n DroidWorkingState,\n McpAuthOutcome,\n MissionState,\n SessionNotificationType,\n ToolConfirmationOutcome,\n} from './schemas/enums.js';\nimport type { McpServerStatusInfo, McpStatusSummary } from './schemas/mcp.js';\nimport type { MissionFeature, ProgressLogEntry } from './schemas/mission.js';\nimport {\n SessionNotificationPayloadSchema,\n type CreateMessageNotification,\n type ErrorNotification,\n type SessionNotificationPayload,\n type SettingsUpdatedPayload,\n type ToolProgressUpdate,\n} from './schemas/server.js';\nimport type { JsonObject, JsonValue } from './schemas/shared.js';\n\nexport const DroidMessageType = {\n AssistantTextDelta: 'assistant_text_delta',\n ThinkingTextDelta: 'thinking_text_delta',\n ToolUse: 'tool_use',\n ToolResult: 'tool_result',\n ToolProgress: 'tool_progress',\n WorkingStateChanged: 'working_state_changed',\n TokenUsageUpdate: 'token_usage_update',\n CreateMessage: 'create_message',\n PermissionResolved: 'permission_resolved',\n SettingsUpdated: 'settings_updated',\n SessionTitleUpdated: 'session_title_updated',\n McpStatusChanged: 'mcp_status_changed',\n MissionStateChanged: 'mission_state_changed',\n MissionFeaturesChanged: 'mission_features_changed',\n MissionProgressEntry: 'mission_progress_entry',\n MissionHeartbeat: 'mission_heartbeat',\n MissionWorkerStarted: 'mission_worker_started',\n MissionWorkerCompleted: 'mission_worker_completed',\n McpAuthRequired: 'mcp_auth_required',\n McpAuthCompleted: 'mcp_auth_completed',\n Error: 'error',\n TurnComplete: 'turn_complete',\n} as const;\n\nexport interface AssistantTextDelta {\n readonly type: 'assistant_text_delta';\n readonly messageId: string;\n readonly blockIndex: number;\n readonly text: string;\n}\n\nexport interface ThinkingTextDelta {\n readonly type: 'thinking_text_delta';\n readonly messageId: string;\n readonly blockIndex: number;\n readonly text: string;\n}\n\nexport interface ToolUse {\n readonly type: 'tool_use';\n readonly toolName: string;\n readonly toolInput: JsonObject;\n readonly toolUseId: string;\n}\n\nexport interface ToolResult {\n readonly type: 'tool_result';\n readonly toolUseId: string;\n readonly toolName: string;\n readonly content: string | JsonValue[];\n readonly isError: boolean;\n}\n\nexport interface ToolProgress {\n readonly type: 'tool_progress';\n readonly toolUseId: string;\n readonly toolName: string;\n readonly content: string;\n readonly update: ToolProgressUpdate;\n}\n\nexport interface WorkingStateChanged {\n readonly type: 'working_state_changed';\n readonly state: DroidWorkingState;\n}\n\nexport type TokenUsageUpdate = Readonly<\n {\n type: 'token_usage_update';\n } & TokenUsage\n>;\n\nexport interface CreateMessage {\n readonly type: 'create_message';\n readonly messageId: CreateMessageNotification['message']['id'];\n readonly role: CreateMessageNotification['message']['role'];\n readonly content: CreateMessageNotification['message']['content'];\n readonly parentId?: CreateMessageNotification['parentId'];\n}\n\nexport interface PermissionResolved {\n readonly type: 'permission_resolved';\n readonly requestId: string;\n readonly toolUseIds: string[];\n readonly selectedOption: ToolConfirmationOutcome;\n}\n\nexport interface SettingsUpdated {\n readonly type: 'settings_updated';\n readonly settings: SettingsUpdatedPayload;\n}\n\nexport interface SessionTitleUpdated {\n readonly type: 'session_title_updated';\n readonly title: string;\n}\n\nexport interface McpStatusChanged {\n readonly type: 'mcp_status_changed';\n readonly servers: McpServerStatusInfo[];\n readonly summary: McpStatusSummary;\n}\n\nexport interface MissionStateChanged {\n readonly type: 'mission_state_changed';\n readonly state: MissionState;\n}\n\nexport interface MissionFeaturesChanged {\n readonly type: 'mission_features_changed';\n readonly features: MissionFeature[];\n}\n\nexport interface MissionProgressEntry {\n readonly type: 'mission_progress_entry';\n readonly progressLog: ProgressLogEntry[];\n}\n\nexport interface MissionHeartbeat {\n readonly type: 'mission_heartbeat';\n readonly timestamp: string;\n}\n\nexport interface MissionWorkerStarted {\n readonly type: 'mission_worker_started';\n readonly workerSessionId: string;\n}\n\nexport interface MissionWorkerCompleted {\n readonly type: 'mission_worker_completed';\n readonly workerSessionId: string;\n readonly exitCode: number;\n}\n\nexport interface McpAuthRequired {\n readonly type: 'mcp_auth_required';\n readonly serverName: string;\n readonly authUrl: string;\n readonly message: string;\n readonly state: string;\n}\n\nexport interface McpAuthCompleted {\n readonly type: 'mcp_auth_completed';\n readonly serverName: string;\n readonly outcome: McpAuthOutcome;\n readonly message: string;\n}\n\nexport interface ErrorEvent {\n readonly type: 'error';\n readonly message: string;\n readonly errorType: ErrorNotification['errorType'];\n readonly timestamp: string;\n}\n\n/** Sentinel yielded when the agent turn finishes (returns to Idle). */\nexport interface TurnComplete {\n readonly type: 'turn_complete';\n readonly tokenUsage: TokenUsageUpdate | null;\n}\n\nexport type DroidMessage =\n | AssistantTextDelta\n | ThinkingTextDelta\n | ToolUse\n | ToolResult\n | ToolProgress\n | WorkingStateChanged\n | TokenUsageUpdate\n | CreateMessage\n | PermissionResolved\n | SettingsUpdated\n | SessionTitleUpdated\n | McpStatusChanged\n | MissionStateChanged\n | MissionFeaturesChanged\n | MissionProgressEntry\n | MissionHeartbeat\n | MissionWorkerStarted\n | MissionWorkerCompleted\n | McpAuthRequired\n | McpAuthCompleted\n | ErrorEvent\n | TurnComplete;\n\nexport type DroidMessageType =\n (typeof DroidMessageType)[keyof typeof DroidMessageType];\n\nexport function convertNotificationToStreamMessage(\n raw: unknown\n): DroidMessage | DroidMessage[] | null {\n const parsed = SessionNotificationPayloadSchema.safeParse(raw);\n if (!parsed.success) {\n return null;\n }\n\n const notification: SessionNotificationPayload = parsed.data;\n\n switch (notification.type) {\n case SessionNotificationType.ASSISTANT_TEXT_DELTA:\n return {\n type: DroidMessageType.AssistantTextDelta,\n messageId: notification.messageId,\n blockIndex: notification.blockIndex,\n text: notification.textDelta,\n };\n\n case SessionNotificationType.THINKING_TEXT_DELTA:\n return {\n type: DroidMessageType.ThinkingTextDelta,\n messageId: notification.messageId,\n blockIndex: notification.blockIndex,\n text: notification.textDelta,\n };\n\n case SessionNotificationType.TOOL_RESULT:\n return {\n type: DroidMessageType.ToolResult,\n toolUseId: notification.toolUseId,\n toolName: '',\n content: normalizeToolResultContent(notification.content),\n isError: Boolean(notification.isError),\n };\n\n case SessionNotificationType.TOOL_PROGRESS_UPDATE: {\n const update: ToolProgressUpdate = notification.update;\n const text = update?.text ?? update?.status ?? update?.details ?? '';\n return {\n type: DroidMessageType.ToolProgress,\n toolUseId: notification.toolUseId,\n toolName: notification.toolName,\n content: text,\n update,\n };\n }\n\n case SessionNotificationType.DROID_WORKING_STATE_CHANGED:\n return {\n type: DroidMessageType.WorkingStateChanged,\n state: notification.newState,\n };\n\n case SessionNotificationType.SESSION_TOKEN_USAGE_CHANGED: {\n const tu: TokenUsage = notification.tokenUsage;\n return {\n type: DroidMessageType.TokenUsageUpdate,\n inputTokens: tu.inputTokens,\n outputTokens: tu.outputTokens,\n cacheReadTokens: tu.cacheReadTokens,\n cacheCreationTokens: tu.cacheCreationTokens,\n thinkingTokens: tu.thinkingTokens,\n };\n }\n\n case SessionNotificationType.CREATE_MESSAGE: {\n const msg = notification.message;\n const messages: DroidMessage[] = [];\n\n for (const block of msg.content) {\n if (block.type === DroidMessageType.ToolUse) {\n messages.push({\n type: DroidMessageType.ToolUse,\n toolName: block.name,\n toolInput: block.input,\n toolUseId: block.id,\n });\n }\n }\n\n messages.push({\n type: DroidMessageType.CreateMessage,\n messageId: msg.id,\n role: msg.role,\n content: msg.content,\n parentId: notification.parentId,\n });\n\n return messages;\n }\n\n case SessionNotificationType.ERROR:\n return {\n type: DroidMessageType.Error,\n message: notification.message,\n errorType: notification.errorType,\n timestamp: notification.timestamp,\n };\n\n case SessionNotificationType.PERMISSION_RESOLVED:\n return {\n type: DroidMessageType.PermissionResolved,\n requestId: notification.requestId,\n toolUseIds: notification.toolUseIds,\n selectedOption: notification.selectedOption,\n };\n\n case SessionNotificationType.SETTINGS_UPDATED:\n return {\n type: DroidMessageType.SettingsUpdated,\n settings: notification.settings,\n };\n\n case SessionNotificationType.SESSION_TITLE_UPDATED:\n return {\n type: DroidMessageType.SessionTitleUpdated,\n title: notification.title,\n };\n\n case SessionNotificationType.MCP_STATUS_CHANGED:\n return {\n type: DroidMessageType.McpStatusChanged,\n servers: notification.servers,\n summary: notification.summary,\n };\n\n case SessionNotificationType.MISSION_STATE_CHANGED:\n return {\n type: DroidMessageType.MissionStateChanged,\n state: notification.state,\n };\n\n case SessionNotificationType.MISSION_FEATURES_CHANGED:\n return {\n type: DroidMessageType.MissionFeaturesChanged,\n features: notification.features,\n };\n\n case SessionNotificationType.MISSION_PROGRESS_ENTRY:\n return {\n type: DroidMessageType.MissionProgressEntry,\n progressLog: notification.progressLog,\n };\n\n case SessionNotificationType.MISSION_HEARTBEAT:\n return {\n type: DroidMessageType.MissionHeartbeat,\n timestamp: notification.timestamp,\n };\n\n case SessionNotificationType.MISSION_WORKER_STARTED:\n return {\n type: DroidMessageType.MissionWorkerStarted,\n workerSessionId: notification.workerSessionId,\n };\n\n case SessionNotificationType.MISSION_WORKER_COMPLETED:\n return {\n type: DroidMessageType.MissionWorkerCompleted,\n workerSessionId: notification.workerSessionId,\n exitCode: notification.exitCode,\n };\n\n case SessionNotificationType.MCP_AUTH_REQUIRED:\n return {\n type: DroidMessageType.McpAuthRequired,\n serverName: notification.serverName,\n authUrl: notification.authUrl,\n message: notification.message,\n state: notification.state,\n };\n\n case SessionNotificationType.MCP_AUTH_COMPLETED:\n return {\n type: DroidMessageType.McpAuthCompleted,\n serverName: notification.serverName,\n outcome: notification.outcome,\n message: notification.message,\n };\n\n default:\n return null;\n }\n}\n\n/**\n * Tracks working state to detect turn completion (non-idle → idle transition).\n * Create a fresh instance per `stream()` call.\n */\nexport class StreamStateTracker {\n private hasBeenNonIdle = false;\n\n private lastTokenUsage: TokenUsageUpdate | null = null;\n\n private toolNameMap = new Map<string, string>();\n\n private getToolName(toolUseId: string): string {\n return this.toolNameMap.get(toolUseId) ?? '';\n }\n\n processMessage(message: DroidMessage): {\n message: DroidMessage;\n additional: DroidMessage[];\n } {\n const additional: DroidMessage[] = [];\n\n if (message.type === DroidMessageType.ToolUse) {\n this.toolNameMap.set(message.toolUseId, message.toolName);\n }\n\n // Enrich tool_result with toolName from prior tool_use\n if (message.type === DroidMessageType.ToolResult) {\n message = { ...message, toolName: this.getToolName(message.toolUseId) };\n }\n\n if (message.type === DroidMessageType.TokenUsageUpdate) {\n this.lastTokenUsage = message;\n }\n\n if (message.type === DroidMessageType.WorkingStateChanged) {\n if (message.state !== DroidWorkingState.Idle) {\n this.hasBeenNonIdle = true;\n } else if (this.hasBeenNonIdle) {\n additional.push({\n type: DroidMessageType.TurnComplete,\n tokenUsage: this.lastTokenUsage,\n });\n this.hasBeenNonIdle = false;\n }\n }\n\n return { message, additional };\n }\n}\n\nfunction normalizeToolResultContent(\n content: JsonValue | undefined\n): string | JsonValue[] {\n if (content == null) {\n return '';\n }\n if (typeof content === 'string') {\n return content;\n }\n if (Array.isArray(content)) {\n return content;\n }\n return String(content);\n}\n","import { DroidClient } from './client.js';\nimport type {\n ClientAskUserHandler,\n ClientPermissionHandler,\n} from './client.js';\nimport { SDK_TAG } from './constants.js';\nimport type { DroidMcpServerConfig } from './mcp.js';\nimport type {\n InitializeSessionRequestParams,\n McpServerConfig,\n SessionTag,\n} from './schemas/client.js';\nimport type {\n AutonomyLevel,\n DroidInteractionMode,\n ReasoningEffort,\n} from './schemas/enums.js';\nimport {\n SessionNotificationSchema,\n type SessionNotificationPayload,\n} from './schemas/server.js';\nimport type { ToolSelectionOverrides } from './schemas/shared.js';\nimport {\n convertNotificationToStreamMessage,\n DroidMessageType,\n StreamStateTracker,\n} from './stream.js';\nimport type { DroidMessage } from './stream.js';\nimport { ProcessTransport } from './transport.js';\nimport type { DroidClientTransport, ProcessTransportOptions } from './types.js';\n\nexport function wireAbortSignal(\n signal: AbortSignal | undefined,\n onAbort: () => void\n): () => void {\n if (!signal) return () => {};\n if (signal.aborted) {\n onAbort();\n return () => {};\n } else {\n const listener = () => onAbort();\n signal.addEventListener('abort', listener, { once: true });\n return () => signal.removeEventListener('abort', listener);\n }\n}\n\nexport function extractInnerNotification(\n notification: unknown\n): SessionNotificationPayload | null {\n const parsed = SessionNotificationSchema.safeParse(notification);\n return parsed.success ? parsed.data.params.notification : null;\n}\n\nexport class MessageBridge {\n private readonly _queue: DroidMessage[] = [];\n private _resolveWaiting: (() => void) | null = null;\n private _done = false;\n private readonly _stateTracker = new StreamStateTracker();\n\n readonly notificationHandler = (\n notification: Record<string, unknown>\n ): void => {\n const inner = extractInnerNotification(notification);\n if (!inner) return;\n\n const converted = convertNotificationToStreamMessage(inner);\n if (converted === null) return;\n\n const messages = Array.isArray(converted) ? converted : [converted];\n\n for (const msg of messages) {\n const { message, additional } = this._stateTracker.processMessage(msg);\n this._enqueue(message);\n\n for (const extra of additional) {\n this._enqueue(extra);\n if (extra.type === DroidMessageType.TurnComplete) {\n this._signalDone();\n }\n }\n }\n };\n\n signalDone(): void {\n this._signalDone();\n }\n\n async *messages(): AsyncGenerator<DroidMessage, void, undefined> {\n while (true) {\n while (this._queue.length > 0) {\n const msg = this._queue.shift()!;\n yield msg;\n\n if (msg.type === DroidMessageType.TurnComplete) {\n return;\n }\n }\n\n if (this._done && this._queue.length === 0) {\n return;\n }\n\n await new Promise<void>((resolve) => {\n this._resolveWaiting = resolve;\n });\n }\n }\n\n private _enqueue(msg: DroidMessage): void {\n this._queue.push(msg);\n if (this._resolveWaiting) {\n const resolve = this._resolveWaiting;\n this._resolveWaiting = null;\n resolve();\n }\n }\n\n private _signalDone(): void {\n this._done = true;\n if (this._resolveWaiting) {\n const resolve = this._resolveWaiting;\n this._resolveWaiting = null;\n resolve();\n }\n }\n}\n\nexport interface TransportCreationOptions extends Pick<\n ProcessTransportOptions,\n 'execPath' | 'execArgs' | 'cwd' | 'env'\n> {\n transport?: DroidClientTransport;\n}\n\nexport async function createTransport(\n options: TransportCreationOptions\n): Promise<DroidClientTransport> {\n if (options.transport) {\n return options.transport;\n }\n\n const transportOptions: ProcessTransportOptions = {\n execPath: options.execPath,\n execArgs: options.execArgs,\n cwd: options.cwd,\n env: options.env,\n };\n const processTransport = new ProcessTransport(transportOptions);\n await processTransport.connect();\n return processTransport;\n}\n\nexport interface HandlerOptions {\n permissionHandler?: ClientPermissionHandler;\n askUserHandler?: ClientAskUserHandler;\n}\n\nexport function setupClientHandlers(\n client: DroidClient,\n options: HandlerOptions\n): void {\n if (options.permissionHandler) {\n client.setPermissionHandler(options.permissionHandler);\n }\n if (options.askUserHandler) {\n client.setAskUserHandler(options.askUserHandler);\n }\n}\n\ninterface ClientCreationOptions\n extends TransportCreationOptions, HandlerOptions {}\n\nexport async function createConfiguredClient(\n options: ClientCreationOptions\n): Promise<{\n transport: DroidClientTransport;\n client: DroidClient;\n}> {\n const transport = await createTransport(options);\n const client = new DroidClient({ transport });\n setupClientHandlers(client, options);\n return { transport, client };\n}\n\ntype Closable = {\n close(): Promise<void>;\n};\n\nexport async function closeQuietly(\n resource: Closable | null | undefined\n): Promise<void> {\n if (!resource) {\n return;\n }\n\n try {\n await resource.close();\n } catch {\n // Best-effort cleanup\n }\n}\n\nexport interface SessionInitOptions extends ToolSelectionOverrides {\n cwd?: string;\n machineId?: string;\n modelId?: string;\n autonomyLevel?: AutonomyLevel;\n interactionMode?: DroidInteractionMode;\n reasoningEffort?: ReasoningEffort;\n specModeModelId?: string;\n specModeReasoningEffort?: ReasoningEffort;\n mcpServers?: DroidMcpServerConfig[];\n tags?: SessionTag[];\n}\n\ntype ResolvedSessionInitOptions = Omit<SessionInitOptions, 'mcpServers'> & {\n mcpServers?: McpServerConfig[];\n};\n\nexport function buildInitParams(\n options: ResolvedSessionInitOptions\n): InitializeSessionRequestParams {\n return {\n machineId: options.machineId ?? 'default',\n cwd: options.cwd ?? '.',\n ...(options.modelId !== undefined && { modelId: options.modelId }),\n ...(options.autonomyLevel !== undefined && {\n autonomyLevel: options.autonomyLevel,\n }),\n ...(options.interactionMode !== undefined && {\n interactionMode: options.interactionMode,\n }),\n ...(options.reasoningEffort !== undefined && {\n reasoningEffort: options.reasoningEffort,\n }),\n ...(options.specModeModelId !== undefined && {\n specModeModelId: options.specModeModelId,\n }),\n ...(options.specModeReasoningEffort !== undefined && {\n specModeReasoningEffort: options.specModeReasoningEffort,\n }),\n ...(options.mcpServers !== undefined && {\n mcpServers: options.mcpServers,\n }),\n ...(options.enabledToolIds !== undefined && {\n enabledToolIds: options.enabledToolIds,\n }),\n ...(options.disabledToolIds !== undefined && {\n disabledToolIds: options.disabledToolIds,\n }),\n tags: [...(options.tags ?? []), SDK_TAG],\n };\n}\n","import { once } from 'node:events';\nimport http, { type IncomingMessage, type ServerResponse } from 'node:http';\n\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\nimport { z } from 'zod';\n\nimport type { McpServerConfig } from './schemas/client.js';\nimport { JSONRPC_VERSION } from './schemas/constants.js';\nimport { JsonRpcErrorCode, McpServerType } from './schemas/enums.js';\n\ntype ToolInputShape = Record<string, z.ZodTypeAny>;\n\nexport type DroidToolResult = string | CallToolResult;\n\nexport interface DroidTool {\n name: string;\n description?: string;\n inputSchema?: ToolInputShape;\n handler: (\n input: Record<string, unknown>\n ) => DroidToolResult | Promise<DroidToolResult>;\n}\n\nexport interface SdkMcpServerOptions {\n name: string;\n version?: string;\n tools: DroidTool[];\n}\n\nexport type DroidMcpServerConfig = McpServerConfig | SdkMcpServer;\n\nexport function tool<InputShape extends ToolInputShape>(\n name: string,\n description: string,\n inputSchema: InputShape,\n handler: (\n input: z.infer<z.ZodObject<InputShape>>\n ) => DroidToolResult | Promise<DroidToolResult>\n): DroidTool;\nexport function tool(\n name: string,\n description: string,\n handler: DroidTool['handler']\n): DroidTool;\nexport function tool<InputShape extends ToolInputShape>(\n name: string,\n description: string,\n inputSchemaOrHandler:\n | InputShape\n | ((\n input: Record<string, unknown>\n ) => DroidToolResult | Promise<DroidToolResult>),\n handler?: (\n input: z.infer<z.ZodObject<InputShape>>\n ) => DroidToolResult | Promise<DroidToolResult>\n): DroidTool {\n if (typeof inputSchemaOrHandler === 'function') {\n const actualHandler = inputSchemaOrHandler;\n return {\n name,\n description,\n handler: (input) => actualHandler(input),\n };\n }\n\n if (!handler) {\n throw new Error(`Missing handler for SDK MCP tool \"${name}\"`);\n }\n\n const inputObjectSchema = z.object(inputSchemaOrHandler);\n\n return {\n name,\n description,\n inputSchema: inputSchemaOrHandler,\n handler: (input) => handler(inputObjectSchema.parse(input)),\n };\n}\n\nfunction isSdkMcpServer(server: DroidMcpServerConfig): server is SdkMcpServer {\n return server instanceof SdkMcpServer;\n}\n\nfunction toCallToolResult(result: DroidToolResult): CallToolResult {\n if (typeof result === 'string') {\n return {\n content: [{ type: 'text', text: result }],\n };\n }\n\n return result;\n}\n\nasync function readJsonBody(req: IncomingMessage): Promise<unknown> {\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n\n if (chunks.length === 0) {\n return undefined;\n }\n\n return JSON.parse(Buffer.concat(chunks).toString('utf8'));\n}\n\nfunction writeJsonError(\n res: ServerResponse,\n statusCode: number,\n message: string\n): void {\n if (res.headersSent) {\n return;\n }\n\n res.writeHead(statusCode, { 'content-type': 'application/json' });\n res.end(\n JSON.stringify({\n jsonrpc: JSONRPC_VERSION,\n error: { code: JsonRpcErrorCode.INTERNAL_ERROR, message },\n id: null,\n })\n );\n}\n\nexport class SdkMcpServer {\n readonly name: string;\n readonly version: string;\n readonly tools: DroidTool[];\n\n private _httpServer: http.Server | null = null;\n private _url: string | null = null;\n\n constructor(options: SdkMcpServerOptions) {\n this.name = options.name;\n this.version = options.version ?? '1.0.0';\n this.tools = options.tools;\n }\n\n get config(): McpServerConfig | null {\n if (!this._url) {\n return null;\n }\n\n return {\n type: McpServerType.Http,\n name: this.name,\n url: this._url,\n headers: [],\n };\n }\n\n async start(): Promise<McpServerConfig> {\n if (this.config) {\n return this.config;\n }\n\n this._httpServer = http.createServer((req, res) => {\n void this.handleRequest(req, res);\n });\n this._httpServer.listen(0, '127.0.0.1');\n await once(this._httpServer, 'listening');\n\n const address = this._httpServer.address();\n if (!address || typeof address === 'string') {\n throw new Error('Unable to determine SDK MCP server address');\n }\n\n this._url = `http://127.0.0.1:${address.port}/mcp`;\n const config = this.config;\n if (!config) {\n throw new Error('Unable to start SDK MCP server');\n }\n return config;\n }\n\n async close(): Promise<void> {\n const server = this._httpServer;\n this._httpServer = null;\n this._url = null;\n\n if (!server) {\n return;\n }\n\n server.closeAllConnections?.();\n server.close();\n await once(server, 'close');\n }\n\n private createMcpServer(): McpServer {\n const server = new McpServer({\n name: this.name,\n version: this.version,\n });\n\n for (const sdkTool of this.tools) {\n server.registerTool(\n sdkTool.name,\n {\n description: sdkTool.description,\n ...(sdkTool.inputSchema && {\n inputSchema: sdkTool.inputSchema,\n }),\n },\n async (input: Record<string, unknown>) =>\n toCallToolResult(await sdkTool.handler(input))\n );\n }\n\n return server;\n }\n\n private async handleRequest(\n req: IncomingMessage,\n res: ServerResponse\n ): Promise<void> {\n if (req.url !== '/mcp') {\n res.writeHead(404).end();\n return;\n }\n\n if (req.method !== 'POST') {\n res.writeHead(405).end();\n return;\n }\n\n const server = this.createMcpServer();\n const transport = new StreamableHTTPServerTransport({\n sessionIdGenerator: undefined,\n });\n\n res.on('close', () => {\n void transport.close();\n void server.close();\n });\n\n try {\n const body = await readJsonBody(req);\n await server.connect(transport);\n await transport.handleRequest(req, res, body);\n } catch (error) {\n writeJsonError(\n res,\n 500,\n error instanceof Error ? error.message : 'Internal server error'\n );\n await transport.close();\n await server.close();\n }\n }\n}\n\nexport function createSdkMcpServer(options: SdkMcpServerOptions): SdkMcpServer {\n return new SdkMcpServer(options);\n}\n\nexport async function startSdkMcpServers(\n servers: DroidMcpServerConfig[] | undefined\n): Promise<{ mcpServers?: McpServerConfig[]; cleanup: () => Promise<void> }> {\n if (!servers) {\n return { cleanup: async () => {} };\n }\n\n const startedServers: SdkMcpServer[] = [];\n const mcpServers: McpServerConfig[] = [];\n\n try {\n for (const server of servers) {\n if (isSdkMcpServer(server)) {\n mcpServers.push(await server.start());\n startedServers.push(server);\n } else {\n mcpServers.push(server);\n }\n }\n } catch (error) {\n await Promise.all(startedServers.map((server) => server.close()));\n throw error;\n }\n\n return {\n mcpServers,\n cleanup: async () => {\n await Promise.all(startedServers.map((server) => server.close()));\n },\n };\n}\n","import { DroidClient } from './client.js';\nimport {\n MessageBridge,\n buildInitParams,\n closeQuietly,\n createConfiguredClient,\n wireAbortSignal,\n} from './helpers.js';\nimport { startSdkMcpServers } from './mcp.js';\nimport type { InitializeSessionResult } from './schemas/client.js';\nimport type { CreateSessionOptions } from './session.js';\nimport type { DroidMessage } from './stream.js';\nimport type { DroidClientTransport } from './types.js';\n\nexport interface QueryOptions extends CreateSessionOptions {\n prompt: string;\n}\n\nexport interface DroidQuery extends AsyncGenerator<\n DroidMessage,\n void,\n undefined\n> {\n interrupt(): Promise<void>;\n abort(): void;\n /** `null` before initialization completes. */\n readonly sessionId: string | null;\n /** `null` before initialization completes. */\n readonly initResult: InitializeSessionResult | null;\n readonly initialized: Promise<InitializeSessionResult>;\n}\n\nclass DroidQueryImpl implements DroidQuery {\n private _generator: AsyncGenerator<DroidMessage, void, undefined>;\n private _getSessionId: () => string | null;\n private _getInitResult: () => InitializeSessionResult | null;\n private _getInitialized: () => Promise<InitializeSessionResult>;\n private _interruptFn: () => Promise<void>;\n private _abortFn: () => void;\n\n constructor(\n generator: AsyncGenerator<DroidMessage, void, undefined>,\n getSessionId: () => string | null,\n getInitResult: () => InitializeSessionResult | null,\n getInitialized: () => Promise<InitializeSessionResult>,\n interruptFn: () => Promise<void>,\n abortFn: () => void\n ) {\n this._generator = generator;\n this._getSessionId = getSessionId;\n this._getInitResult = getInitResult;\n this._getInitialized = getInitialized;\n this._interruptFn = interruptFn;\n this._abortFn = abortFn;\n }\n\n get sessionId(): string | null {\n return this._getSessionId();\n }\n\n get initResult(): InitializeSessionResult | null {\n return this._getInitResult();\n }\n\n get initialized(): Promise<InitializeSessionResult> {\n return this._getInitialized();\n }\n\n async interrupt(): Promise<void> {\n return this._interruptFn();\n }\n\n abort(): void {\n this._abortFn();\n }\n\n next(...args: [] | [undefined]): Promise<IteratorResult<DroidMessage, void>> {\n return this._generator.next(...args);\n }\n\n return(\n value: void | PromiseLike<void>\n ): Promise<IteratorResult<DroidMessage, void>> {\n return this._generator.return(value);\n }\n\n throw(e: unknown): Promise<IteratorResult<DroidMessage, void>> {\n return this._generator.throw(e);\n }\n\n [Symbol.asyncIterator](): DroidQueryImpl {\n return this;\n }\n}\n\n/**\n * Spawns a droid process, initializes a session, sends the prompt, and\n * yields {@link DroidMessage} events. Resources are cleaned up automatically.\n */\nexport function query(options: QueryOptions): DroidQuery {\n let transport: DroidClientTransport | null = null;\n let client: DroidClient | null = null;\n let sessionId: string | null = null;\n let initResult: InitializeSessionResult | null = null;\n let aborted = false;\n let initializationPromise: Promise<InitializeSessionResult> | null = null;\n let promptPromise: Promise<void> | null = null;\n let cleanupAbortSignal: () => void = () => {};\n let cleanupSdkMcpServers: (() => Promise<void>) | null = null;\n\n const bridge = new MessageBridge();\n\n const closeActiveResources = async (): Promise<void> => {\n const closer = client ?? transport;\n const cleanupMcp = cleanupSdkMcpServers;\n client = null;\n transport = null;\n cleanupSdkMcpServers = null;\n await Promise.all([closeQuietly(closer), cleanupMcp?.()]);\n };\n\n const ensureInitialized = (): Promise<InitializeSessionResult> => {\n if (initResult) {\n return Promise.resolve(initResult);\n }\n if (initializationPromise) {\n return initializationPromise;\n }\n\n initializationPromise = (async () => {\n try {\n if (aborted) {\n throw new Error('Query aborted before initialization');\n }\n\n const configuredClient = await createConfiguredClient(options);\n transport = configuredClient.transport;\n client = configuredClient.client;\n client.onNotification(bridge.notificationHandler);\n\n if (aborted) {\n throw new Error('Query aborted before initialization');\n }\n\n const sdkMcpServers = await startSdkMcpServers(options.mcpServers);\n cleanupSdkMcpServers = sdkMcpServers.cleanup;\n\n const result = await client.initializeSession(\n buildInitParams({\n ...options,\n mcpServers: sdkMcpServers.mcpServers,\n })\n );\n sessionId = result.sessionId;\n initResult = result;\n return result;\n } catch (error) {\n await closeActiveResources();\n throw error;\n }\n })();\n\n return initializationPromise;\n };\n\n const ensurePromptSent = (): Promise<void> => {\n if (promptPromise) {\n return promptPromise;\n }\n\n promptPromise = (async () => {\n await ensureInitialized();\n if (aborted || client === null) {\n return;\n }\n\n await client.addUserMessage({ text: options.prompt });\n })();\n\n return promptPromise;\n };\n\n async function* generateMessages(): AsyncGenerator<\n DroidMessage,\n void,\n undefined\n > {\n if (aborted) return;\n\n await ensurePromptSent();\n if (aborted) return;\n\n for await (const msg of bridge.messages()) {\n if (aborted) return;\n yield msg;\n }\n }\n\n const generator = generateMessages();\n\n async function* wrappedGenerator(): AsyncGenerator<\n DroidMessage,\n void,\n undefined\n > {\n try {\n yield* generator;\n } finally {\n cleanupAbortSignal();\n await closeActiveResources();\n }\n }\n\n const droidQuery = new DroidQueryImpl(\n wrappedGenerator(),\n () => sessionId,\n () => initResult,\n () => ensureInitialized(),\n async () => {\n if (client && !aborted) {\n await client.interruptSession();\n }\n },\n () => {\n aborted = true;\n bridge.signalDone();\n cleanupAbortSignal();\n void closeActiveResources();\n }\n );\n\n cleanupAbortSignal = wireAbortSignal(options.abortSignal, () =>\n droidQuery.abort()\n );\n\n return droidQuery;\n}\n","import { DroidClient } from './client.js';\nimport { ConnectionError } from './errors.js';\nimport {\n MessageBridge,\n buildInitParams,\n closeQuietly,\n createConfiguredClient,\n wireAbortSignal,\n} from './helpers.js';\nimport type {\n HandlerOptions,\n SessionInitOptions,\n TransportCreationOptions,\n} from './helpers.js';\nimport { startSdkMcpServers } from './mcp.js';\nimport type { DroidMcpServerConfig } from './mcp.js';\nimport type { NotificationCallback, NotificationFilter } from './protocol.js';\nimport type {\n AddMcpServerRequestParams,\n AddMcpServerResult,\n AuthenticateMcpServerRequestParams,\n AuthenticateMcpServerResult,\n CompactSessionRequestParams,\n CompactSessionResult,\n GetContextStatsResult,\n ExecuteRewindRequestParams,\n ExecuteRewindResult,\n ForkSessionResult,\n RenameSessionRequestParams,\n RenameSessionResult,\n GetRewindInfoRequestParams,\n GetRewindInfoResult,\n InitializeSessionResult,\n ListMcpServersResult,\n ListMcpToolsResult,\n ListToolsRequestParams,\n ListToolsResult,\n ListSkillsResult,\n LoadSessionRequestParams,\n LoadSessionResult,\n OutputFormat,\n RemoveMcpServerRequestParams,\n RemoveMcpServerResult,\n ToggleMcpServerRequestParams,\n ToggleMcpServerResult,\n UpdateSessionSettingsRequestParams,\n UpdateSessionSettingsResult,\n} from './schemas/client.js';\nimport { DroidInteractionMode } from './schemas/enums.js';\nimport type { Base64ImageSource, DocumentSource } from './schemas/messages.js';\nimport { FactoryDroidMessageRole } from './schemas/messages.js';\nimport { JsonObjectSchema, type JsonObject } from './schemas/shared.js';\nimport { DroidMessageType } from './stream.js';\nimport type { DroidMessage, ErrorEvent, TokenUsageUpdate } from './stream.js';\n\n/** Aggregated result from a non-streaming `session.send()` call. */\nexport interface DroidResult {\n /** Session that produced this result. */\n sessionId: string;\n /** Concatenated assistant text deltas emitted during the turn. */\n text: string;\n /** All stream messages emitted during the turn. */\n messages: DroidMessage[];\n /** Latest token usage update for the turn, when reported by Droid. */\n tokenUsage: TokenUsageUpdate | null;\n /** Wall-clock duration spent consuming the turn. */\n durationMs: number;\n /** Number of completed turns observed while consuming the stream. */\n turnCount: number;\n /** First error event emitted during the turn, if any. */\n error: ErrorEvent | null;\n /** Structured JSON object emitted by the turn, when requested. */\n structuredOutput: JsonObject | null;\n /** True when the stream completed without an error event. */\n success: boolean;\n}\n\nexport interface CreateSessionOptions\n extends SessionInitOptions, HandlerOptions, TransportCreationOptions {\n abortSignal?: AbortSignal;\n}\n\nexport interface ResumeSessionOptions extends Pick<\n CreateSessionOptions,\n | 'execPath'\n | 'execArgs'\n | 'cwd'\n | 'env'\n | 'permissionHandler'\n | 'askUserHandler'\n | 'transport'\n | 'abortSignal'\n> {\n mcpServers?: DroidMcpServerConfig[];\n}\n\nexport interface MessageOptions {\n images?: Base64ImageSource[];\n files?: DocumentSource[];\n outputFormat?: OutputFormat;\n abortSignal?: AbortSignal;\n}\n\nfunction getAbortError(signal: AbortSignal): Error {\n if (signal.reason instanceof Error) {\n return signal.reason;\n }\n\n return new Error(\n typeof signal.reason === 'string' ? signal.reason : 'Operation aborted'\n );\n}\n\nfunction throwIfAborted(signal: AbortSignal | undefined): void {\n if (signal?.aborted) {\n throw getAbortError(signal);\n }\n}\n\nfunction parseJsonObject(text: string): JsonObject | null {\n try {\n const parsed: unknown = JSON.parse(text);\n const result = JsonObjectSchema.safeParse(parsed);\n return result.success ? result.data : null;\n } catch {\n return null;\n }\n}\n\nfunction extractAssistantText(message: DroidMessage): string {\n if (message.type !== DroidMessageType.CreateMessage) {\n return '';\n }\n\n if (message.role !== FactoryDroidMessageRole.Assistant) {\n return '';\n }\n\n return message.content\n .filter((block) => block.type === 'text')\n .map((block) => block.text)\n .join('');\n}\n\n/** Create instances via {@link createSession} or {@link resumeSession}. */\nexport class DroidSession {\n private _client: DroidClient;\n private _sessionId: string;\n private _initResult: InitializeSessionResult | LoadSessionResult;\n private _closed = false;\n private _cleanupAbortSignal: (() => void) | null = null;\n private _cleanupCallbacks: Array<() => Promise<void> | void> = [];\n\n /** @internal */\n constructor(\n client: DroidClient,\n sessionId: string,\n initResult: InitializeSessionResult | LoadSessionResult\n ) {\n this._client = client;\n this._sessionId = sessionId;\n this._initResult = initResult;\n }\n\n get sessionId(): string {\n return this._sessionId;\n }\n\n get initResult(): InitializeSessionResult | LoadSessionResult {\n return this._initResult;\n }\n\n /** @internal */\n setAbortSignalCleanup(cleanup: () => void): void {\n this._cleanupAbortSignal = cleanup;\n }\n\n /** @internal */\n addCleanup(cleanup: () => Promise<void> | void): void {\n this._cleanupCallbacks.push(cleanup);\n }\n\n /** Yields {@link DroidMessage} events until `turn_complete`. */\n async *stream(\n text: string,\n options?: MessageOptions\n ): AsyncGenerator<DroidMessage, void, undefined> {\n this._ensureNotClosed();\n throwIfAborted(options?.abortSignal);\n\n const bridge = new MessageBridge();\n const unsubscribe = this._client.onNotification(bridge.notificationHandler);\n let resolveAbort: () => void = () => {};\n const abortPromise = new Promise<void>((resolve) => {\n resolveAbort = resolve;\n });\n const cleanupAbortSignal = wireAbortSignal(options?.abortSignal, () => {\n bridge.signalDone();\n resolveAbort();\n void this._client.interruptSession().catch(() => {});\n });\n\n try {\n await Promise.race([\n this._client.addUserMessage({\n text,\n images: options?.images,\n files: options?.files,\n outputFormat: options?.outputFormat,\n }),\n abortPromise,\n ]);\n throwIfAborted(options?.abortSignal);\n\n for await (const msg of bridge.messages()) {\n throwIfAborted(options?.abortSignal);\n yield msg;\n }\n throwIfAborted(options?.abortSignal);\n } finally {\n cleanupAbortSignal();\n unsubscribe();\n }\n }\n\n /** Consumes the stream and returns an aggregated {@link DroidResult}. */\n async send(text: string, options?: MessageOptions): Promise<DroidResult> {\n this._ensureNotClosed();\n\n const messages: DroidMessage[] = [];\n let fullText = '';\n let lastTokenUsage: TokenUsageUpdate | null = null;\n let firstError: ErrorEvent | null = null;\n let structuredOutput: JsonObject | null = null;\n let finalAssistantText = '';\n let turnCount = 0;\n const startedAt = Date.now();\n\n for await (const msg of this.stream(text, options)) {\n messages.push(msg);\n\n if (msg.type === DroidMessageType.AssistantTextDelta) {\n fullText += msg.text;\n }\n\n const assistantText = extractAssistantText(msg);\n if (assistantText) {\n finalAssistantText = assistantText;\n if (options?.outputFormat && fullText.length === 0) {\n fullText = assistantText;\n }\n }\n\n if (msg.type === DroidMessageType.TokenUsageUpdate) {\n lastTokenUsage = msg;\n }\n\n if (msg.type === DroidMessageType.Error && firstError === null) {\n firstError = msg;\n }\n\n if (options?.outputFormat && structuredOutput === null) {\n const textToParse = finalAssistantText || fullText;\n if (textToParse) {\n structuredOutput = parseJsonObject(textToParse);\n }\n }\n\n if (msg.type === DroidMessageType.TurnComplete) {\n turnCount++;\n if (msg.tokenUsage) {\n // Prefer the final synthesized token usage when available.\n lastTokenUsage = msg.tokenUsage;\n }\n }\n }\n\n return {\n sessionId: this._sessionId,\n text: fullText,\n messages,\n tokenUsage: lastTokenUsage,\n durationMs: Date.now() - startedAt,\n turnCount,\n error: firstError,\n structuredOutput,\n success: firstError === null,\n };\n }\n\n async interrupt(): Promise<void> {\n this._ensureNotClosed();\n await this._client.interruptSession();\n }\n\n async close(): Promise<void> {\n if (this._closed) {\n return;\n }\n this._closed = true;\n this._cleanupAbortSignal?.();\n this._cleanupAbortSignal = null;\n\n try {\n await this._client.close();\n } finally {\n const cleanups = this._cleanupCallbacks.splice(0);\n await Promise.all(cleanups.map((cleanup) => cleanup()));\n }\n }\n\n async updateSettings(\n params: Partial<UpdateSessionSettingsRequestParams>\n ): Promise<UpdateSessionSettingsResult> {\n this._ensureNotClosed();\n return this._client.updateSessionSettings(params);\n }\n\n async enterSpecMode(\n params: Pick<\n UpdateSessionSettingsRequestParams,\n 'specModeModelId' | 'specModeReasoningEffort'\n > = {}\n ): Promise<UpdateSessionSettingsResult> {\n this._ensureNotClosed();\n return this._client.updateSessionSettings({\n interactionMode: DroidInteractionMode.Spec,\n ...params,\n });\n }\n\n async addMcpServer(\n params: AddMcpServerRequestParams\n ): Promise<AddMcpServerResult> {\n this._ensureNotClosed();\n return this._client.addMcpServer(params);\n }\n\n async removeMcpServer(\n params: RemoveMcpServerRequestParams\n ): Promise<RemoveMcpServerResult> {\n this._ensureNotClosed();\n return this._client.removeMcpServer(params);\n }\n\n async toggleMcpServer(\n params: ToggleMcpServerRequestParams\n ): Promise<ToggleMcpServerResult> {\n this._ensureNotClosed();\n return this._client.toggleMcpServer(params);\n }\n\n async listMcpServers(): Promise<ListMcpServersResult> {\n this._ensureNotClosed();\n return this._client.listMcpServers();\n }\n\n async listMcpTools(): Promise<ListMcpToolsResult> {\n this._ensureNotClosed();\n return this._client.listMcpTools();\n }\n\n async listTools(\n params: ListToolsRequestParams = {}\n ): Promise<ListToolsResult> {\n this._ensureNotClosed();\n return this._client.listTools(params);\n }\n\n async authenticateMcpServer(\n params: AuthenticateMcpServerRequestParams\n ): Promise<AuthenticateMcpServerResult> {\n this._ensureNotClosed();\n return this._client.authenticateMcpServer(params);\n }\n\n async listSkills(): Promise<ListSkillsResult> {\n this._ensureNotClosed();\n return this._client.listSkills();\n }\n\n async getRewindInfo(\n params: GetRewindInfoRequestParams\n ): Promise<GetRewindInfoResult> {\n this._ensureNotClosed();\n return this._client.getRewindInfo(params);\n }\n\n async executeRewind(\n params: ExecuteRewindRequestParams\n ): Promise<ExecuteRewindResult> {\n this._ensureNotClosed();\n return this._client.executeRewind(params);\n }\n\n async compactSession(\n params?: CompactSessionRequestParams\n ): Promise<CompactSessionResult> {\n this._ensureNotClosed();\n return this._client.compactSession(params ?? {});\n }\n\n async forkSession(): Promise<ForkSessionResult> {\n this._ensureNotClosed();\n return this._client.forkSession();\n }\n\n async getContextStats(): Promise<GetContextStatsResult> {\n this._ensureNotClosed();\n return this._client.getContextStats();\n }\n\n async renameSession(\n params: RenameSessionRequestParams\n ): Promise<RenameSessionResult> {\n this._ensureNotClosed();\n return this._client.renameSession(params);\n }\n\n onNotification(\n callback: NotificationCallback,\n filter?: NotificationFilter\n ): () => void {\n return this._client.onNotification(callback, filter);\n }\n\n private _ensureNotClosed(): void {\n if (this._closed) {\n throw new ConnectionError(\n 'Session has been closed. Create a new session to continue.'\n );\n }\n }\n}\n\nexport async function createSession(\n options: CreateSessionOptions = {}\n): Promise<DroidSession> {\n const { client } = await createConfiguredClient(options);\n let cleanupInitAbortSignal = options.abortSignal?.aborted\n ? () => {}\n : wireAbortSignal(options.abortSignal, () => {\n void closeQuietly(client);\n });\n let sdkMcpServers: Awaited<ReturnType<typeof startSdkMcpServers>> | undefined;\n\n try {\n sdkMcpServers = await startSdkMcpServers(options.mcpServers);\n const initParams = buildInitParams({\n ...options,\n mcpServers: sdkMcpServers.mcpServers,\n });\n const initResult = await client.initializeSession(initParams);\n const session = new DroidSession(client, initResult.sessionId, initResult);\n session.addCleanup(sdkMcpServers.cleanup);\n cleanupInitAbortSignal();\n cleanupInitAbortSignal = () => {};\n session.setAbortSignalCleanup(\n wireAbortSignal(options.abortSignal, () => void session.close())\n );\n\n return session;\n } catch (error) {\n cleanupInitAbortSignal();\n await sdkMcpServers?.cleanup();\n await closeQuietly(client);\n throw error;\n }\n}\n\n/** @throws {SessionNotFoundError} If the session ID does not exist. */\nexport async function resumeSession(\n sessionId: string,\n options: ResumeSessionOptions = {}\n): Promise<DroidSession> {\n const { client } = await createConfiguredClient(options);\n let sdkMcpServers: Awaited<ReturnType<typeof startSdkMcpServers>> | undefined;\n\n try {\n sdkMcpServers = await startSdkMcpServers(options.mcpServers);\n const loadParams: LoadSessionRequestParams = {\n sessionId,\n mcpServers: sdkMcpServers.mcpServers,\n };\n const loadResult = await client.loadSession(loadParams);\n const session = new DroidSession(client, sessionId, loadResult);\n session.addCleanup(sdkMcpServers.cleanup);\n session.setAbortSignalCleanup(\n wireAbortSignal(options.abortSignal, () => void session.close())\n );\n\n return session;\n } catch (error) {\n await sdkMcpServers?.cleanup();\n await closeQuietly(client);\n throw error;\n }\n}\n","import {\n createSession,\n type CreateSessionOptions,\n type DroidResult,\n type MessageOptions,\n} from './session.js';\n\nexport interface RunOptions extends CreateSessionOptions, MessageOptions {}\n\nexport async function run(\n text: string,\n options: RunOptions = {}\n): Promise<DroidResult> {\n const session = await createSession(options);\n\n try {\n return await session.send(text, options);\n } finally {\n await session.close();\n }\n}\n","import * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\n\nimport {\n SessionSettingsFileSchema,\n SessionStartEventSchema,\n type SessionMetadata,\n type SessionSettingsFile,\n type SessionStartEvent,\n type ListSessionsOptions,\n} from './schemas/session-metadata.js';\n\nconst FAVORITES_FILE = '.favorites';\nconst SESSION_EXTENSION = '.jsonl';\nconst SETTINGS_SUFFIX = '.settings.json';\nconst MISSION_TAG_PREFIX = 'mission:';\nconst MISSION_ID_METADATA_KEY = 'missionId';\nconst DECOMP_SESSION_TYPE_TAG = 'decompSessionType';\nconst DECOMP_SESSION_TYPE_METADATA_KEY = 'value';\n\n// Byte constants for the byte-level scanner.\nconst LF = 0x0a;\nconst CR = 0x0d;\nconst SPACE = 0x20;\nconst TAB = 0x09;\n\n// When `numSessions` is set, stat every candidate then parse only the top\n// N. Parse failures force us to drop further down the stat-sorted list —\n// oversample so we rarely have to re-dip.\nconst PARSE_OVERSAMPLE = 20;\n\n/**\n * Read a file into a Buffer, returning `null` if it doesn't exist or can't\n * be read. Avoids a TOCTOU `existsSync` pre-check.\n */\nfunction readFileBuffer(filePath: string): Buffer | null {\n try {\n return fs.readFileSync(filePath);\n } catch {\n return null;\n }\n}\n\n/** Parse a Buffer as JSON, returning `null` on failure. */\nfunction parseJsonBuffer(buf: Buffer): unknown {\n try {\n return JSON.parse(buf.toString('utf-8'));\n } catch {\n return null;\n }\n}\n\n/**\n * Walk a Buffer byte-by-byte to extract the first line and count non-empty\n * lines. Avoids allocating a full UTF-8 string for potentially large\n * session files.\n */\nfunction scanBufferForLines(buf: Buffer): {\n firstLine: Buffer;\n nonEmptyLineCount: number;\n} {\n let nonEmptyLineCount = 0;\n let firstLineEnd = -1;\n let currentLineHasContent = false;\n\n for (let i = 0; i < buf.length; i++) {\n const ch = buf[i];\n if (ch === LF) {\n if (currentLineHasContent) nonEmptyLineCount++;\n if (firstLineEnd === -1) firstLineEnd = i;\n currentLineHasContent = false;\n } else if (ch !== CR && ch !== SPACE && ch !== TAB) {\n currentLineHasContent = true;\n }\n }\n if (currentLineHasContent) nonEmptyLineCount++;\n\n // Trim trailing CR from the first line if the file uses CRLF.\n const end =\n firstLineEnd === -1\n ? buf.length\n : firstLineEnd > 0 && buf[firstLineEnd - 1] === CR\n ? firstLineEnd - 1\n : firstLineEnd;\n\n return {\n firstLine: buf.subarray(0, end),\n nonEmptyLineCount,\n };\n}\n\nfunction loadFavorites(sessionsDir: string): Set<string> {\n const buf = readFileBuffer(path.join(sessionsDir, FAVORITES_FILE));\n if (!buf) return new Set();\n const parsed = parseJsonBuffer(buf);\n if (!Array.isArray(parsed)) return new Set();\n return new Set(parsed.filter((id): id is string => typeof id === 'string'));\n}\n\nfunction loadSettingsFile(\n directory: string,\n sessionId: string\n): SessionSettingsFile | null {\n const buf = readFileBuffer(\n path.join(directory, `${sessionId}${SETTINGS_SUFFIX}`)\n );\n if (!buf) return null;\n const parsed = parseJsonBuffer(buf);\n if (parsed === null) return null;\n const result = SessionSettingsFileSchema.safeParse(parsed);\n return result.success ? result.data : null;\n}\n\nfunction getMissionMetadataFromTags(settings: SessionSettingsFile | null): {\n decompMissionId?: string;\n decompSessionType?: string;\n} {\n if (!settings?.tags) return {};\n\n const missionTag = settings.tags.find((tag) =>\n tag.name.startsWith(MISSION_TAG_PREFIX)\n );\n const roleTag = settings.tags.find(\n (tag) => tag.name === DECOMP_SESSION_TYPE_TAG\n );\n\n return {\n decompMissionId: missionTag?.metadata?.[MISSION_ID_METADATA_KEY],\n decompSessionType: roleTag?.metadata?.[DECOMP_SESSION_TYPE_METADATA_KEY],\n };\n}\n\ninterface SessionCandidate {\n sessionId: string;\n sessionPath: string;\n directory: string;\n /** Names of sibling files in `directory` — used to skip settings probe. */\n siblingNames: Set<string>;\n /** Cached stat, populated eagerly in the stat-first pre-pass. */\n stats: fs.Stats;\n}\n\ninterface ParseContext {\n favorites: Set<string>;\n /**\n * When set, candidates whose embedded `cwd` doesn't match (after\n * resolution) are rejected early. Used to filter legacy-global files.\n */\n requiredCwd?: string;\n}\n\n/**\n * Parse a single session `.jsonl` file into a {@link SessionMetadata}.\n * Returns `null` if the file can't be read, isn't a valid session_start\n * event, is archived, or (when `requiredCwd` is set) doesn't match.\n */\nfunction parseSessionFile(\n candidate: SessionCandidate,\n ctx: ParseContext\n): SessionMetadata | null {\n const buf = readFileBuffer(candidate.sessionPath);\n if (!buf) return null;\n\n const scanned = scanBufferForLines(buf);\n\n const firstParsed = parseJsonBuffer(scanned.firstLine);\n if (firstParsed === null) return null;\n\n const firstResult = SessionStartEventSchema.safeParse(firstParsed);\n if (!firstResult.success) return null;\n const summary: SessionStartEvent = firstResult.data;\n\n // Early reject legacy-global sessions that don't belong to the cwd we\n // want, before touching the settings file.\n if (\n ctx.requiredCwd !== undefined &&\n (summary.cwd === undefined || path.resolve(summary.cwd) !== ctx.requiredCwd)\n ) {\n return null;\n }\n\n // Only read <sessionId>.settings.json if it actually exists — we already\n // have the directory listing and can tell.\n const settingsName = `${candidate.sessionId}${SETTINGS_SUFFIX}`;\n const settings = candidate.siblingNames.has(settingsName)\n ? loadSettingsFile(candidate.directory, candidate.sessionId)\n : null;\n if (settings?.archivedAt) return null;\n\n const tagMeta = getMissionMetadataFromTags(settings);\n const decompSessionType =\n summary.decompSessionType ??\n SessionStartEventSchema.shape.decompSessionType.safeParse(\n tagMeta.decompSessionType\n ).data;\n\n // messageCount = non-empty lines minus the session_start line.\n const messageCount = Math.max(0, scanned.nonEmptyLineCount - 1);\n\n return {\n id: candidate.sessionId,\n title: summary.title ?? '',\n sessionTitle: summary.sessionTitle,\n owner: summary.owner ?? '',\n messageCount,\n modifiedTime: candidate.stats.mtime,\n createdTime: candidate.stats.birthtime || candidate.stats.ctime,\n isFavorite: ctx.favorites.has(candidate.sessionId),\n cwd: summary.cwd,\n decompSessionType,\n decompMissionId: tagMeta.decompMissionId ?? summary.decompMissionId,\n };\n}\n\nfunction readDirEntries(directory: string): fs.Dirent[] {\n try {\n return fs.readdirSync(directory, { withFileTypes: true });\n } catch {\n return [];\n }\n}\n\n/**\n * Stat every `.jsonl` in `directory` (from its already-listed `entries`)\n * and return candidate records. No file contents are read yet — this is\n * the cheap pre-pass that lets `numSessions` avoid parsing every file on\n * disk.\n */\nfunction collectCandidates(\n directory: string,\n entries: fs.Dirent[]\n): SessionCandidate[] {\n const siblingNames = new Set(entries.map((e) => e.name));\n const candidates: SessionCandidate[] = [];\n\n for (const entry of entries) {\n if (entry.isDirectory()) continue;\n if (!entry.name.endsWith(SESSION_EXTENSION)) continue;\n\n const sessionPath = path.join(directory, entry.name);\n let stats: fs.Stats;\n try {\n stats = fs.statSync(sessionPath);\n } catch {\n continue;\n }\n candidates.push({\n sessionId: entry.name.slice(0, -SESSION_EXTENSION.length),\n sessionPath,\n directory,\n siblingNames,\n stats,\n });\n }\n\n return candidates;\n}\n\n/**\n * Parse `candidates` in order until we have `limit` valid sessions (or run\n * out). When `limit` is undefined, parse everything.\n */\nfunction parseUpTo(\n candidates: SessionCandidate[],\n ctx: ParseContext,\n limit?: number\n): SessionMetadata[] {\n const out: SessionMetadata[] = [];\n for (const candidate of candidates) {\n if (limit !== undefined && out.length >= limit) break;\n const metadata = parseSessionFile(candidate, ctx);\n if (metadata) out.push(metadata);\n }\n return out;\n}\n\n/**\n * Convert a working directory path to the sanitized directory name used by\n * the droid CLI for project-specific session storage.\n *\n * Mirrors the CLI's `sanitizePathToDirectoryName` helper.\n *\n * @internal Exported primarily for testing — typical callers should use\n * {@link listSessions} with the `cwd` option instead.\n */\nexport function sanitizePathToDirectoryName(cwd: string): string {\n let expandedPath = cwd;\n if (cwd.startsWith('~/') || cwd === '~') {\n expandedPath = path.join(os.homedir(), cwd.slice(1));\n }\n\n const absolutePath = path.resolve(expandedPath);\n let canonicalPath = absolutePath;\n try {\n canonicalPath = fs.realpathSync(absolutePath);\n } catch {\n canonicalPath = absolutePath;\n }\n const normalized = canonicalPath.replace(/[\\\\/]+$/, '');\n\n if (process.platform === 'win32') {\n return `-${normalized.replace(/^([A-Z]):/i, '$1').replace(/[\\\\/]+/g, '-')}`;\n }\n return `-${normalized.replace(/^\\/+/, '').replace(/\\/+/g, '-')}`;\n}\n\n/**\n * Resolve the default sessions root directory.\n *\n * @internal Exported primarily for testing — typical callers should use\n * {@link listSessions} without a `sessionsDir` option instead.\n */\nexport function getDefaultSessionsDir(): string {\n return path.join(os.homedir(), '.factory', 'sessions');\n}\n\n/**\n * List droid sessions stored on disk.\n *\n * Sessions are read from `~/.factory/sessions/` (or the `sessionsDir`\n * override) by scanning `.jsonl` files, mirroring the logic used by the\n * `droid` CLI's `SessionService`. No JSON-RPC server calls are made.\n *\n * By default, returns sessions for `process.cwd()`. Pass a specific `cwd`\n * to scope to a different project, or `fetchOutsideCWD: true` to return\n * every session on disk regardless of working directory. Results are\n * sorted by `modifiedTime` descending and can be capped with `numSessions`.\n *\n * @example\n * ```ts\n * // Sessions for the current project\n * const sessions = await listSessions();\n *\n * // 10 most recent sessions across every project\n * const recent = await listSessions({\n * fetchOutsideCWD: true,\n * numSessions: 10,\n * });\n * ```\n */\nexport async function listSessions(\n options: ListSessionsOptions = {}\n): Promise<SessionMetadata[]> {\n const sessionsDir = options.sessionsDir ?? getDefaultSessionsDir();\n const favorites = loadFavorites(sessionsDir);\n\n const rootEntries = readDirEntries(sessionsDir);\n\n // Legacy-global candidates (pre-subdir sessions) always live directly\n // under sessionsDir; collect them regardless of mode. Project-specific\n // candidates come from either one subdir (single-project mode) or all\n // of them (fetchOutsideCWD mode).\n const legacyCandidates = collectCandidates(sessionsDir, rootEntries);\n const projectCandidates: SessionCandidate[] = [];\n\n let requiredCwd: string | undefined;\n\n if (options.fetchOutsideCWD) {\n for (const entry of rootEntries) {\n if (!entry.isDirectory()) continue;\n if (!entry.name.startsWith('-')) continue;\n const dir = path.join(sessionsDir, entry.name);\n projectCandidates.push(...collectCandidates(dir, readDirEntries(dir)));\n }\n } else {\n const normalizedCwd = path.resolve(options.cwd ?? process.cwd());\n requiredCwd = normalizedCwd;\n const projectDir = path.join(\n sessionsDir,\n sanitizePathToDirectoryName(normalizedCwd)\n );\n projectCandidates.push(\n ...collectCandidates(projectDir, readDirEntries(projectDir))\n );\n }\n\n // Sort candidates mtime-descending so the first parses hit the newest\n // sessions — required for `numSessions` to skip the tail.\n const byMtimeDesc = (a: SessionCandidate, b: SessionCandidate): number =>\n b.stats.mtime.getTime() - a.stats.mtime.getTime();\n projectCandidates.sort(byMtimeDesc);\n legacyCandidates.sort(byMtimeDesc);\n\n // When numSessions is set, parse only as many files as we need (with a\n // small oversample to cover parse failures / archived / cwd-mismatch).\n const parseLimit =\n options.numSessions !== undefined && options.numSessions >= 0\n ? options.numSessions + PARSE_OVERSAMPLE\n : undefined;\n\n const ctx: ParseContext = { favorites };\n const legacyCtx: ParseContext =\n requiredCwd !== undefined ? { favorites, requiredCwd } : ctx;\n\n const projectSessions = parseUpTo(projectCandidates, ctx, parseLimit);\n const legacySessions = parseUpTo(legacyCandidates, legacyCtx, parseLimit);\n\n // Dedupe by id (migration edge case where the same session appears in\n // both a legacy global file and a project subdir).\n const byId = new Map<string, SessionMetadata>();\n for (const session of [...projectSessions, ...legacySessions]) {\n const existing = byId.get(session.id);\n if (\n !existing ||\n session.modifiedTime.getTime() > existing.modifiedTime.getTime()\n ) {\n byId.set(session.id, session);\n }\n }\n\n const sorted = Array.from(byId.values()).sort(\n (a, b) => b.modifiedTime.getTime() - a.modifiedTime.getTime()\n );\n\n if (options.numSessions !== undefined && options.numSessions >= 0) {\n return sorted.slice(0, options.numSessions);\n }\n\n return sorted;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACUO,IAAK,oBAAL,kBAAKA,uBAAL;AACL,EAAAA,mBAAA,wBAAqB;AACrB,EAAAA,mBAAA,kBAAe;AACf,EAAAA,mBAAA,sBAAmB;AACnB,EAAAA,mBAAA,uBAAoB;AACpB,EAAAA,mBAAA,yBAAsB;AACtB,EAAAA,mBAAA,6BAA0B;AAC1B,EAAAA,mBAAA,uBAAoB;AACpB,EAAAA,mBAAA,6BAA0B;AAC1B,EAAAA,mBAAA,qBAAkB;AAClB,EAAAA,mBAAA,oBAAiB;AACjB,EAAAA,mBAAA,oBAAiB;AACjB,EAAAA,mBAAA,uBAAoB;AACpB,EAAAA,mBAAA,uBAAoB;AACpB,EAAAA,mBAAA,oBAAiB;AACjB,EAAAA,mBAAA,gBAAa;AACb,EAAAA,mBAAA,sBAAmB;AACnB,EAAAA,mBAAA,qBAAkB;AAClB,EAAAA,mBAAA,0BAAuB;AACvB,EAAAA,mBAAA,iBAAc;AACd,EAAAA,mBAAA,uBAAoB;AACpB,EAAAA,mBAAA,qBAAkB;AAClB,EAAAA,mBAAA,oBAAiB;AACjB,EAAAA,mBAAA,qBAAkB;AAClB,EAAAA,mBAAA,kBAAe;AACf,EAAAA,mBAAA,oBAAiB;AACjB,EAAAA,mBAAA,uBAAoB;AA1BV,SAAAA;AAAA,GAAA;AA8BL,IAAK,oBAAL,kBAAKC,uBAAL;AACL,EAAAA,mBAAA,0BAAuB;AACvB,EAAAA,mBAAA,wBAAqB;AACrB,EAAAA,mBAAA,cAAW;AAHD,SAAAA;AAAA,GAAA;AAOL,IAAK,0BAAL,kBAAKC,6BAAL;AACL,EAAAA,yBAAA,iBAAc;AACd,EAAAA,yBAAA,0BAAuB;AACvB,EAAAA,yBAAA,oBAAiB;AACjB,EAAAA,yBAAA,WAAQ;AACR,EAAAA,yBAAA,iCAA8B;AAC9B,EAAAA,yBAAA,yBAAsB;AACtB,EAAAA,yBAAA,sBAAmB;AACnB,EAAAA,yBAAA,2BAAwB;AACxB,EAAAA,yBAAA,wBAAqB;AACrB,EAAAA,yBAAA,0BAAuB;AACvB,EAAAA,yBAAA,yBAAsB;AACtB,EAAAA,yBAAA,iCAA8B;AAC9B,EAAAA,yBAAA,2BAAwB;AACxB,EAAAA,yBAAA,8BAA2B;AAC3B,EAAAA,yBAAA,4BAAyB;AACzB,EAAAA,yBAAA,uBAAoB;AACpB,EAAAA,yBAAA,4BAAyB;AACzB,EAAAA,yBAAA,8BAA2B;AAC3B,EAAAA,yBAAA,uBAAoB;AACpB,EAAAA,yBAAA,wBAAqB;AApBX,SAAAA;AAAA,GAAA;AAwBL,IAAK,0BAAL,kBAAKC,6BAAL;AACL,EAAAA,yBAAA,iBAAc;AACd,EAAAA,yBAAA,mBAAgB;AAChB,EAAAA,yBAAA,oBAAiB;AACjB,EAAAA,yBAAA,uBAAoB;AACpB,EAAAA,yBAAA,0BAAuB;AACvB,EAAAA,yBAAA,wBAAqB;AACrB,EAAAA,yBAAA,uBAAoB;AACpB,EAAAA,yBAAA,0BAAuB;AACvB,EAAAA,yBAAA,6BAA0B;AAC1B,EAAAA,yBAAA,2BAAwB;AACxB,EAAAA,yBAAA,iBAAc;AACd,EAAAA,yBAAA,YAAS;AAZC,SAAAA;AAAA,GAAA;AAgBL,IAAK,uBAAL,kBAAKC,0BAAL;AACL,EAAAA,sBAAA,UAAO;AACP,EAAAA,sBAAA,aAAU;AACV,EAAAA,sBAAA,YAAS;AACT,EAAAA,sBAAA,aAAU;AACV,EAAAA,sBAAA,kBAAe;AACf,EAAAA,sBAAA,oBAAiB;AACjB,EAAAA,sBAAA,qBAAkB;AAClB,EAAAA,sBAAA,gBAAa;AACb,EAAAA,sBAAA,aAAU;AATA,SAAAA;AAAA,GAAA;AAaL,IAAK,oBAAL,kBAAKC,uBAAL;AACL,EAAAA,mBAAA,UAAO;AACP,EAAAA,mBAAA,+BAA4B;AAC5B,EAAAA,mBAAA,gCAA6B;AAC7B,EAAAA,mBAAA,mBAAgB;AAChB,EAAAA,mBAAA,4BAAyB;AALf,SAAAA;AAAA,GAAA;AASL,IAAK,uBAAL,kBAAKC,0BAAL;AACL,EAAAA,sBAAA,WAAQ;AACR,EAAAA,sBAAA,eAAY;AAFF,SAAAA;AAAA,GAAA;AAML,IAAK,iBAAL,kBAAKC,oBAAL;AACL,EAAAA,gBAAA,sBAAmB;AACnB,EAAAA,gBAAA,oBAAiB;AACjB,EAAAA,gBAAA,mBAAgB;AAChB,EAAAA,gBAAA,mBAAgB;AAChB,EAAAA,gBAAA,wBAAqB;AACrB,EAAAA,gBAAA,wBAAqB;AACrB,EAAAA,gBAAA,WAAQ;AAPE,SAAAA;AAAA,GAAA;AAWL,IAAK,kBAAL,kBAAKC,qBAAL;AACL,EAAAA,iBAAA,gBAAa;AACb,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,kBAAe;AACf,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,cAAW;AALD,SAAAA;AAAA,GAAA;AASL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,eAAA,WAAQ;AACR,EAAAA,eAAA,UAAO;AACP,EAAAA,eAAA,SAAM;AAHI,SAAAA;AAAA,GAAA;AAOL,IAAK,YAAL,kBAAKC,eAAL;AACL,EAAAA,WAAA,oBAAiB;AACjB,EAAAA,WAAA,kBAAe;AACf,EAAAA,WAAA,WAAQ;AACR,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,YAAS;AALC,SAAAA;AAAA,GAAA;AASL,IAAK,iBAAL,kBAAKC,oBAAL;AACL,EAAAA,gBAAA,aAAU;AACV,EAAAA,gBAAA,eAAY;AACZ,EAAAA,gBAAA,YAAS;AAHC,SAAAA;AAAA,GAAA;AAOL,IAAK,oBAAL,kBAAKC,uBAAL;AACL,EAAAA,mBAAA,kBAAe;AACf,EAAAA,mBAAA,YAAS;AAFC,SAAAA;AAAA,GAAA;AAML,IAAK,eAAL,kBAAKC,kBAAL;AACL,EAAAA,cAAA,mBAAgB;AAChB,EAAAA,cAAA,kBAAe;AACf,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,sBAAmB;AACnB,EAAAA,cAAA,eAAY;AANF,SAAAA;AAAA,GAAA;AAUL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,eAAA,aAAU;AACV,EAAAA,eAAA,gBAAa;AACb,EAAAA,eAAA,eAAY;AACZ,EAAAA,eAAA,eAAY;AAJF,SAAAA;AAAA,GAAA;AAQL,IAAK,sBAAL,kBAAKC,yBAAL;AACL,EAAAA,qBAAA,aAAU;AACV,EAAAA,qBAAA,aAAU;AACV,EAAAA,qBAAA,aAAU;AAHA,SAAAA;AAAA,GAAA;AAOL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,eAAA,cAAW;AACX,EAAAA,eAAA,iBAAc;AACd,EAAAA,eAAA,gBAAa;AAHH,SAAAA;AAAA,GAAA;AAOL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,eAAA,qBAAkB;AAClB,EAAAA,eAAA,qBAAkB;AAClB,EAAAA,eAAA,oBAAiB;AAHP,SAAAA;AAAA,GAAA;AAOL,IAAK,uBAAL,kBAAKC,0BAAL;AACL,EAAAA,sBAAA,qBAAkB;AAClB,EAAAA,sBAAA,mBAAgB;AAChB,EAAAA,sBAAA,oBAAiB;AACjB,EAAAA,sBAAA,uBAAoB;AACpB,EAAAA,sBAAA,mBAAgB;AAChB,EAAAA,sBAAA,2BAAwB;AACxB,EAAAA,sBAAA,qBAAkB;AAClB,EAAAA,sBAAA,kBAAe;AACf,EAAAA,sBAAA,kBAAe;AACf,EAAAA,sBAAA,2BAAwB;AACxB,EAAAA,sBAAA,kCAA+B;AAXrB,SAAAA;AAAA,GAAA;AAoBL,IAAK,uBAAL,kBAAKC,0BAAL;AACL,EAAAA,sBAAA,UAAO;AACP,EAAAA,sBAAA,UAAO;AACP,EAAAA,sBAAA,SAAM;AAHI,SAAAA;AAAA,GAAA;AAaL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,eAAA,SAAM;AACN,EAAAA,eAAA,SAAM;AACN,EAAAA,eAAA,YAAS;AACT,EAAAA,eAAA,UAAO;AAJG,SAAAA;AAAA,GAAA;AAWL,IAAK,eAAL,kBAAKC,kBAAL;AACL,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,UAAO;AACP,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,gBAAa;AACb,EAAAA,cAAA,cAAW;AALD,SAAAA;AAAA,GAAA;AASL,IAAK,kBAAL,kBAAKC,qBAAL;AACL,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,SAAM;AACN,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,SAAM;AACN,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,SAAM;AATI,SAAAA;AAAA,GAAA;AAaL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,eAAA,eAAY;AACZ,EAAAA,eAAA,YAAS;AACT,EAAAA,eAAA,iCAA8B;AAC9B,EAAAA,eAAA,aAAU;AACV,EAAAA,eAAA,YAAS;AACT,EAAAA,eAAA,SAAM;AACN,EAAAA,eAAA,YAAS;AAPC,SAAAA;AAAA,GAAA;AAWL,IAAK,mBAAL,kBAAKC,sBAAL;AACL,EAAAA,oCAAA,iBAAc,UAAd;AACA,EAAAA,oCAAA,qBAAkB,UAAlB;AACA,EAAAA,oCAAA,sBAAmB,UAAnB;AACA,EAAAA,oCAAA,oBAAiB,UAAjB;AACA,EAAAA,oCAAA,oBAAiB,UAAjB;AACA,EAAAA,oCAAA,0BAAuB,UAAvB;AACA,EAAAA,oCAAA,sBAAmB,UAAnB;AACA,EAAAA,oCAAA,0BAAuB,UAAvB;AARU,SAAAA;AAAA,GAAA;AAYL,IAAK,qBAAL,kBAAKC,wBAAL;AACL,EAAAA,oBAAA,aAAU;AACV,EAAAA,oBAAA,cAAW;AACX,EAAAA,oBAAA,kBAAe;AAHL,SAAAA;AAAA,GAAA;AAUL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,eAAA,SAAM;AACN,EAAAA,eAAA,aAAU;AACV,EAAAA,eAAA,UAAO;AACP,EAAAA,eAAA,aAAU;AACV,EAAAA,eAAA,YAAS;AACT,EAAAA,eAAA,aAAU;AACV,EAAAA,eAAA,aAAU;AAPA,SAAAA;AAAA,GAAA;AAWL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,eAAA,aAAU;AACV,EAAAA,eAAA,cAAW;AACX,EAAAA,eAAA,aAAU;AAHA,SAAAA;AAAA,GAAA;;;ACxTL,IAAM,kBAAkB;AAMxB,IAAM,6BAA6B;AAGnC,IAAM,2BAA2B;AAGjC,IAAM,wBAAwB;AAG9B,IAAM,yBAAyB;AAG/B,IAAM,0BAA0B;AAGhC,IAAM,uBAAuB;AAG7B,IAAM,mBAAmB;AAGzB,IAAM,qBAAqB;AAG3B,IAAM,iBAAiB;;;AC/B9B,iBAAkB;AAmBX,IAAM,kBAAwC,aAAE;AAAA,EAAK,MAC1D,aAAE,MAAM;AAAA,IACN,aAAE,OAAO;AAAA,IACT,aAAE,OAAO;AAAA,IACT,aAAE,QAAQ;AAAA,IACV,aAAE,KAAK;AAAA,IACP,aAAE,MAAM,eAAe;AAAA,IACvB,aAAE,OAAO,eAAe;AAAA,EAC1B,CAAC;AACH;AAEO,IAAM,mBACX,aAAE,OAAO,eAAe;AAEnB,IAAM,kBAAwC,aAAE,MAAM,eAAe;AAGrE,IAAM,yBAAyB,aAAE,OAAO;AAAA,EAC7C,aAAa,aAAE,OAAO,EAAE,SAAS;AAAA,EACjC,YAAY,aAAE,OAAO,EAAE,SAAS;AAClC,CAAC;AAKM,IAAM,+BAA+B,aAAE,OAAO;AAAA,EACnD,gBAAgB,aAAE,MAAM,aAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC7C,iBAAiB,aAAE,MAAM,aAAE,OAAO,CAAC,EAAE,SAAS;AAChD,CAAC;AAOM,IAAM,oBAAoB,aAAE,OAAO,CAAC,CAAC,EAAE,YAAY;AAKnD,IAAM,sBAAsB,aAChC,OAAO,EAAE,SAAS,aAAE,QAAQ,EAAE,CAAC,EAC/B,YAAY;AAKR,IAAM,wBAAwB,aAAE,OAAO;AAAA,EAC5C,SAAS,aAAE,QAAQ,eAAe;AAAA,EAClC,mBAAmB,aAAE,QAAQ,0BAA0B;AAAA,EACvD,wBAAwB,aAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,OAAO,uBAAuB,SAAS;AACzC,CAAC;AAKM,IAAM,qBAAqB,aAAE,OAAO;AAAA,EACzC,MAAM,aAAE,WAAW,gBAAgB;AAAA,EACnC,SAAS,aAAE,OAAO;AAAA,EAClB,MAAM,gBAAgB,SAAS;AACjC,CAAC;AAKM,IAAM,oBAAoB,aAAE,OAAO;AAAA,EACxC,MAAM,aAAE,QAAQ,SAAS;AAAA,EACzB,IAAI,aAAE,OAAO;AAAA,EACb,QAAQ,aAAE,OAAO;AAAA,EACjB,QAAQ,gBAAgB,SAAS;AACnC,CAAC;AAKM,IAAM,4BAA4B,aAAE,OAAO;AAAA,EAChD,MAAM,aAAE,QAAQ,UAAU;AAAA,EAC1B,IAAI,aAAE,OAAO;AAAA,EACb,QAAQ;AACV,CAAC;AAKM,IAAM,4BAA4B,aAAE,OAAO;AAAA,EAChD,MAAM,aAAE,QAAQ,UAAU;AAAA,EAC1B,IAAI,aAAE,OAAO,EAAE,SAAS;AAAA,EACxB,OAAO;AACT,CAAC;AAKM,IAAM,yBAAyB,aAAE,OAAO;AAAA,EAC7C,MAAM,aAAE,QAAQ,cAAc;AAAA,EAC9B,QAAQ,aAAE,OAAO;AAAA,EACjB,QAAQ,gBAAgB,SAAS;AACnC,CAAC;AAKM,IAAM,uBAAuB,sBAAsB;AAAA,EACxD,kBAAkB;AACpB;AAKO,IAAM,+BAA+B,sBAAsB;AAAA,EAChE,0BAA0B;AAC5B;AAOO,IAAM,+BAA+B,sBAAsB;AAAA,EAChE,0BAA0B;AAC5B;AAOO,IAAM,4BAA4B,sBAAsB;AAAA,EAC7D,uBAAuB;AACzB;AAKO,IAAM,wBAAwB,aAAE,MAAM;AAAA,EAC3C;AAAA,EACA;AACF,CAAC;AAKM,IAAM,uBAAuB,aAAE,mBAAmB,QAAQ;AAAA,EAC/D;AAAA,EACA,sBAAsB,OAAO;AAAA,IAC3B,MAAM,aAAE,QAAQ,UAAU;AAAA,IAC1B,IAAI,aAAE,OAAO,EAAE,SAAS;AAAA,IACxB,QAAQ,gBAAgB,SAAS;AAAA,IACjC,OAAO,mBAAmB,SAAS;AAAA,EACrC,CAAC;AAAA,EACD;AACF,CAAC;;;AC3KD,IAAAC,cAAkB;;;ACAlB,IAAAC,cAAkB;;;ACAlB,IAAAC,cAAkB;AAWX,IAAM,mCAAmC,cAAE,OAAO;AAAA,EACvD,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,MAAM,cAAE,MAAM,cAAE,OAAO,CAAC,EAAE,SAAS;AACrC,CAAC;AAOM,IAAM,kCAAkC,cAAE,OAAO;AAAA,EACtD,KAAK,cAAE,OAAO,EAAE,SAAS;AAC3B,CAAC;AAOM,IAAM,iCAAiC,cAAE,OAAO;AAAA,EACrD,KAAK,cAAE,OAAO;AAAA,EACd,SAAS,cAAE,OAAO,cAAE,OAAO,CAAC,EAAE,SAAS;AACzC,CAAC;AAOM,IAAM,4BAA4B,cACtC,OAAO;AAAA,EACN,MAAM,cAAE,OAAO;AAAA,EACf,QAAQ,cAAE,WAAW,eAAe;AAAA,EACpC,QAAQ,cAAE,WAAW,aAAa;AAAA,EAClC,WAAW,cAAE,QAAQ;AAAA,EACrB,OAAO,cAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,WAAW,cAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,YAAY,cAAE,WAAW,aAAa,EAAE,SAAS;AAAA,EACjD,eAAe,cAAE,QAAQ,EAAE,SAAS;AACtC,CAAC,EACA,YAAY;AAKR,IAAM,yBAAyB,cACnC,OAAO;AAAA,EACN,OAAO,cAAE,OAAO;AAAA,EAChB,WAAW,cAAE,OAAO;AAAA,EACpB,YAAY,cAAE,OAAO;AAAA,EACrB,QAAQ,cAAE,OAAO;AAAA,EACjB,UAAU,cAAE,OAAO,EAAE,SAAS;AAChC,CAAC,EACA,YAAY;AAKR,IAAM,0BAA0B,cACpC,OAAO;AAAA,EACN,MAAM,cAAE,OAAO;AAAA,EACf,aAAa,cAAE,OAAO;AAAA,EACtB,MAAM,cAAE,WAAW,aAAa;AAAA;AAAA,EAEhC,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,MAAM,cAAE,MAAM,cAAE,OAAO,CAAC,EAAE,SAAS;AAAA;AAAA,EAEnC,KAAK,cAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAEzB,MAAM,cAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,SAAS,cAAE,OAAO,EAAE,SAAS;AAC/B,CAAC,EACA,YAAY;AAKR,IAAM,2BAA2B,cACrC,OAAO;AAAA,EACN,MAAM,cAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,YAAY,iBAAiB,SAAS;AAAA,EACtC,UAAU,cAAE,MAAM,cAAE,OAAO,CAAC,EAAE,SAAS;AACzC,CAAC,EACA,YAAY;AAKR,IAAM,oBAAoB,cAC9B,OAAO;AAAA,EACN,YAAY,cAAE,OAAO;AAAA,EACrB,MAAM,cAAE,OAAO;AAAA,EACf,aAAa,cAAE,OAAO,EAAE,SAAS;AAAA,EACjC,WAAW,cAAE,QAAQ;AAAA,EACrB,YAAY,cAAE,QAAQ,EAAE,SAAS;AAAA,EACjC,aAAa,yBAAyB,SAAS;AACjD,CAAC,EACA,YAAY;AAKR,IAAM,iCAAiC,cAC3C,OAAO;AAAA,EACN,OAAO,cAAE,OAAO;AAAA,EAChB,OAAO,cAAE,WAAW,uBAAuB;AAC7C,CAAC,EACA,YAAY;;;ACtHf,IAAAC,cAAkB;AAKX,IAAM,kBAAkB,cAC5B,OAAO;AAAA,EACN,MAAM,cAAE,QAAQ,MAAM;AAAA,EACtB,MAAM,cAAE,OAAO;AAAA,EACf,IAAI,cAAE,OAAO,EAAE,SAAS;AAC1B,CAAC,EACA,YAAY;AAKR,IAAM,0BAA0B,cACpC,OAAO;AAAA,EACN,MAAM,cAAE,QAAQ,QAAQ;AAAA,EACxB,MAAM,cAAE,OAAO;AAAA,EACf,WAAW,cAAE,KAAK,CAAC,cAAc,aAAa,aAAa,YAAY,CAAC;AAC1E,CAAC,EACA,YAAY;AAKR,IAAM,mBAAmB,cAC7B,OAAO;AAAA,EACN,MAAM,cAAE,QAAQ,OAAO;AAAA,EACvB,QAAQ;AAAA,EACR,IAAI,cAAE,OAAO,EAAE,SAAS;AAC1B,CAAC,EACA,YAAY;AAKR,IAAM,sBAAsB,cAChC,OAAO;AAAA,EACN,MAAM,cAAE,QAAQ,UAAU;AAAA,EAC1B,WAAW,cAAE,OAAO;AAAA,EACpB,UAAU,cAAE,OAAO;AAAA,EACnB,IAAI,cAAE,OAAO,EAAE,SAAS;AAAA,EACxB,mBAAmB,cAAE,OAAO,EAAE,SAAS;AACzC,CAAC,EACA,YAAY;AAKR,IAAM,8BAA8B,cACxC,OAAO;AAAA,EACN,MAAM,cAAE,QAAQ,mBAAmB;AAAA,EACnC,MAAM,cAAE,OAAO;AAAA,EACf,IAAI,cAAE,OAAO,EAAE,SAAS;AAC1B,CAAC,EACA,YAAY;AAKR,IAAM,qBAAqB,cAC/B,OAAO;AAAA,EACN,MAAM,cAAE,QAAQ,UAAU;AAAA,EAC1B,IAAI,cAAE,OAAO;AAAA,EACb,OAAO;AAAA,EACP,MAAM,cAAE,OAAO;AAAA,EACf,kBAAkB,cAAE,OAAO,EAAE,SAAS;AACxC,CAAC,EACA,YAAY;AAKR,IAAM,wBAAwB,cAClC,OAAO;AAAA,EACN,MAAM,cAAE,QAAQ,aAAa;AAAA,EAC7B,WAAW,cAAE,OAAO;AAAA,EACpB,SAAS,cAAE,MAAM,CAAC,cAAE,OAAO,GAAG,cAAE,MAAM,eAAe,CAAC,CAAC,EAAE,SAAS;AAAA,EAClE,SAAS,cAAE,QAAQ,EAAE,SAAS;AAAA,EAC9B,IAAI,cAAE,OAAO,EAAE,SAAS;AAC1B,CAAC,EACA,YAAY;AAKR,IAAM,sBAAsB,cAChC,OAAO;AAAA,EACN,MAAM,cAAE,QAAQ,UAAU;AAAA,EAC1B,QAAQ;AAAA,EACR,IAAI,cAAE,OAAO,EAAE,SAAS;AAC1B,CAAC,EACA,YAAY;AAKR,IAAM,qBAAqB,cAAE,mBAAmB,QAAQ;AAAA,EAC7D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAIM,IAAM,0BAA0B;AAAA,EACrC,MAAM;AAAA,EACN,WAAW;AAAA,EACX,MAAM;AAAA,EACN,QAAQ;AACV;AAMO,IAAM,4BAA4B,cACtC,OAAO;AAAA,EACN,IAAI,cAAE,OAAO;AAAA,EACb,MAAM,cAAE,KAAK;AAAA,IACX,wBAAwB;AAAA,IACxB,wBAAwB;AAAA,IACxB,wBAAwB;AAAA,IACxB,wBAAwB;AAAA,EAC1B,CAAC;AAAA,EACD,SAAS,cAAE,MAAM,kBAAkB;AAAA,EACnC,WAAW,cAAE,OAAO;AAAA,EACpB,WAAW,cAAE,OAAO;AAAA,EACpB,UAAU,cAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,YAAY,cAAE,KAAK,CAAC,QAAQ,YAAY,WAAW,CAAC,EAAE,SAAS;AAAA,EAC/D,SAAS,cAAE,QAAQ,EAAE,SAAS;AAChC,CAAC,EACA,YAAY;AAKR,IAAM,uBAAuB,cACjC,OAAO;AAAA,EACN,MAAM,cAAE,OAAO;AAAA,EACf,WAAW,cAAE,OAAO;AAAA,EACpB,MAAM,cAAE,OAAO;AAAA,EACf,MAAM,cAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAM,cAAE,OAAO,EAAE,SAAS;AAC5B,CAAC,EACA,YAAY;;;ACvJf,IAAAC,cAAkB;AAWX,IAAM,uBAAuB,cACjC,OAAO;AAAA,EACN,IAAI,cAAE,OAAO;AAAA,EACb,aAAa,cAAE,OAAO;AAAA,EACtB,QAAQ,cAAE,WAAW,aAAa;AAAA,EAClC,WAAW,cAAE,OAAO;AAAA,EACpB,eAAe,cAAE,MAAM,cAAE,OAAO,CAAC;AAAA,EACjC,kBAAkB,cAAE,MAAM,cAAE,OAAO,CAAC;AAAA,EACpC,mBAAmB,cAAE,MAAM,cAAE,OAAO,CAAC;AAAA,EACrC,UAAU,cAAE,MAAM,cAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACvC,WAAW,cAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,kBAAkB,cAAE,MAAM,cAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC/C,wBAAwB,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACvD,0BAA0B,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAC3D,CAAC,EACA,YAAY;AAIR,IAAM,4BAA4B,cAAE,WAAW,mBAAmB;AAGlE,IAAM,wBAAwB,cAClC,OAAO;AAAA,EACN,UAAU,cAAE,WAAW,aAAa;AAAA,EACpC,aAAa,cAAE,OAAO;AAAA,EACtB,cAAc,cAAE,OAAO,EAAE,SAAS;AACpC,CAAC,EACA,YAAY;AAKR,IAAM,4BAA4B,cACtC,OAAO;AAAA,EACN,SAAS,cAAE,OAAO;AAAA,EAClB,UAAU,cAAE,OAAO;AAAA,EACnB,aAAa,cAAE,OAAO;AACxB,CAAC,EACA,YAAY;AAKR,IAAM,yBAAyB,cACnC,OAAO;AAAA,EACN,QAAQ,cAAE,OAAO;AAAA,EACjB,UAAU,cAAE,OAAO;AACrB,CAAC,EACA,YAAY;AAKR,IAAM,qBAAqB,cAC/B,OAAO;AAAA,EACN,aAAa,cAAE,MAAM,yBAAyB;AAAA,EAC9C,mBAAmB,cAAE,MAAM,sBAAsB,EAAE,SAAS;AAC9D,CAAC,EACA,YAAY;AAKR,IAAM,iBAAiB,cAC3B,OAAO;AAAA,EACN,MAAM,cAAE,OAAO;AAAA,EACf,UAAU,cAAE,OAAO;AACrB,CAAC,EACA,YAAY;AAKR,IAAM,iBAAiB,cAC3B,OAAO;AAAA,EACN,MAAM,cAAE,OAAO;AAAA,EACf,OAAO,cAAE,MAAM,cAAc;AAC/B,CAAC,EACA,YAAY;AAKR,IAAM,cAAc,cACxB,OAAO;AAAA,EACN,OAAO,cAAE,MAAM,cAAc;AAAA,EAC7B,SAAS,cAAE,MAAM,cAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACtC,UAAU,cAAE,OAAO;AACrB,CAAC,EACA,YAAY;AAKR,IAAM,uBAAuB,cACjC,OAAO;AAAA,EACN,MAAM,cAAE,OAAO;AAAA,EACf,iBAAiB,cAAE,OAAO;AAAA,EAC1B,KAAK,cAAE,OAAO;AAChB,CAAC,EACA,YAAY;AAKR,IAAM,sBAAsB,cAChC,OAAO;AAAA,EACN,mBAAmB,cAAE,QAAQ;AAAA,EAC7B,YAAY,cAAE,MAAM,oBAAoB;AAAA,EACxC,kBAAkB,cAAE,MAAM,cAAE,OAAO,CAAC,EAAE,SAAS;AACjD,CAAC,EACA,YAAY;AAKR,IAAM,gBAAgB,cAC1B,OAAO;AAAA,EACN,gBAAgB,cAAE,OAAO,EAAE,SAAS;AAAA,EACpC,oBAAoB,cAAE,OAAO;AAAA,EAC7B,mBAAmB,cAAE,OAAO;AAAA,EAC5B,cAAc;AAAA,EACd,OAAO;AAAA,EACP,kBAAkB,cAAE,MAAM,qBAAqB;AAAA,EAC/C,eAAe,oBAAoB,SAAS;AAC9C,CAAC,EACA,YAAY;AAKR,IAAM,wBAAwB,cAClC,OAAO;AAAA,EACN,MAAM,cAAE,WAAW,aAAa;AAAA,EAChC,iBAAiB,cAAE,OAAO;AAAA,EAC1B,SAAS,cAAE,OAAO;AAAA,EAClB,eAAe,cAAE,OAAO;AAC1B,CAAC,EACA,YAAY;AAIf,IAAM,6BAA6B,cAAE,OAAO;AAAA,EAC1C,WAAW,cAAE,OAAO;AACtB,CAAC;AAEM,IAAM,6BAA6B,2BAA2B,OAAO;AAAA,EAC1E,MAAM,cAAE,gDAA4C;AAAA,EACpD,OAAO,cAAE,OAAO;AAClB,CAAC,EAAE,YAAY;AAIR,IAAM,2BAA2B,2BAA2B,OAAO;AAAA,EACxE,MAAM,cAAE,4CAA0C;AACpD,CAAC,EAAE,YAAY;AAIR,IAAM,4BAA4B,2BAA2B,OAAO;AAAA,EACzE,MAAM,cAAE,8CAA2C;AACrD,CAAC,EAAE,YAAY;AAIR,IAAM,+BAA+B,2BAA2B,OAAO;AAAA,EAC5E,MAAM,cAAE,qDAA8C;AAAA,EACtD,SAAS,cAAE,OAAO,EAAE,SAAS;AAC/B,CAAC,EAAE,YAAY;AAMR,IAAM,2BAA2B,2BAA2B,OAAO;AAAA,EACxE,MAAM,cAAE,4CAA0C;AAAA,EAClD,iBAAiB,cAAE,OAAO;AAAA,EAC1B,SAAS,cAAE,OAAO;AAAA,EAClB,WAAW,cAAE,OAAO,EAAE,SAAS;AACjC,CAAC,EAAE,YAAY;AAIR,IAAM,mCACX,2BAA2B,OAAO;AAAA,EAChC,MAAM,cAAE,6DAAkD;AAAA,EAC1D,iBAAiB,cAAE,OAAO;AAAA,EAC1B,WAAW,cAAE,OAAO;AACtB,CAAC,EAAE,YAAY;AAMV,IAAM,6BAA6B,2BAA2B,OAAO;AAAA,EAC1E,MAAM,cAAE,gDAA4C;AAAA,EACpD,iBAAiB,cAAE,OAAO;AAAA,EAC1B,WAAW,cAAE,OAAO;AAAA,EACpB,cAAc;AAAA,EACd,sBAAsB,cAAE,QAAQ;AAAA,EAChC,UAAU,cAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,UAAU,cAAE,OAAO;AAAA,EACnB,kBAAkB,cAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,SAAS,cAAc,SAAS;AAClC,CAAC,EAAE,YAAY;AAIR,IAAM,0BAA0B,2BAA2B,OAAO;AAAA,EACvE,MAAM,cAAE,0CAAyC;AAAA,EACjD,iBAAiB,cAAE,OAAO,EAAE,SAAS;AAAA,EACrC,SAAS,cAAE,OAAO;AAAA,EAClB,UAAU,cAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,QAAQ,cAAE,OAAO;AACnB,CAAC,EAAE,YAAY;AAIR,IAAM,0BAA0B,2BAA2B,OAAO;AAAA,EACvE,MAAM,cAAE,0CAAyC;AAAA,EACjD,iBAAiB,cAAE,OAAO;AAAA,EAC1B,WAAW,cAAE,OAAO,EAAE,SAAS;AACjC,CAAC,EAAE,YAAY;AAIR,IAAM,mCACX,2BAA2B,OAAO;AAAA,EAChC,MAAM,cAAE,6DAAkD;AAAA,EAC1D,YAAY,cAAE,MAAM,qBAAqB,EAAE,SAAS;AACtD,CAAC,EAAE,YAAY;AAMV,IAAM,0CACX,2BAA2B,OAAO;AAAA,EAChC,MAAM,cAAE,2EAAyD;AAAA,EACjE,WAAW,cAAE,OAAO;AAAA,EACpB,WAAW,cAAE,OAAO;AACtB,CAAC,EAAE,YAAY;AAOV,IAAM,yBAAyB,cAAE,mBAAmB,QAAQ;AAAA,EACjE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;AH7OD,IAAM,gCAAgC;AAAA,EACpC,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,cAAc,cAAE,WAAW,YAAY,EAAE,SAAS;AAAA,EAClD,iBAAiB,cAAE,WAAW,oBAAoB,EAAE,SAAS;AAAA,EAC7D,eAAe,cAAE,WAAW,aAAa,EAAE,SAAS;AACtD;AAGO,IAAM,mBAAmB,cAC7B,OAAO;AAAA,EACN,MAAM,cAAE,OAAO;AAAA,EACf,UAAU,cAAE,OAAO,cAAE,OAAO,CAAC,EAAE,SAAS;AAC1C,CAAC,EACA,OAAO;AAKH,IAAM,sBAAsB,cAChC,OAAO;AAAA,EACN,UAAU,cAAE,OAAO;AACrB,CAAC,EACA,YAAY;AAKR,IAAM,uBAAuB,cACjC,OAAO;AAAA,EACN,MAAM,cAAE,OAAO;AAAA,EACf,SAAS,cAAE,OAAO;AAAA,EAClB,MAAM,cAAE,MAAM,cAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACpC,KAAK,cAAE,OAAO,cAAE,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC,EACA,OAAO;AAKH,IAAM,mBAAmB,cAC7B,OAAO;AAAA,EACN,MAAM,cAAE,OAAO;AAAA,EACf,OAAO,cAAE,OAAO;AAClB,CAAC,EACA,OAAO;AAKH,IAAM,sBAAsB,cAChC,OAAO;AAAA,EACN,MAAM,cAAE,QAAQ,MAAM;AAAA,EACtB,MAAM,cAAE,OAAO;AAAA,EACf,KAAK,cAAE,OAAO,EAAE,IAAI;AAAA,EACpB,SAAS,iBAAiB,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC,EACA,OAAO;AAKH,IAAM,qBAAqB,cAC/B,OAAO;AAAA,EACN,MAAM,cAAE,QAAQ,KAAK;AAAA,EACrB,MAAM,cAAE,OAAO;AAAA,EACf,KAAK,cAAE,OAAO,EAAE,IAAI;AAAA,EACpB,SAAS,iBAAiB,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC,EACA,OAAO;AAKH,IAAM,wBAAwB,cAAE,MAAM;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAKM,IAAM,wBAAwB,cAClC,OAAO;AAAA,EACN,SAAS,cAAE,OAAO;AAAA,EAClB,iBAAiB,cAAE,WAAW,eAAe;AAAA,EAC7C,cAAc,cAAE,WAAW,YAAY,EAAE,SAAS;AAAA,EAClD,iBAAiB,cACd,WAAW,oBAAoB,EAC/B,SAAS,EACT,MAAM,MAAS;AAAA,EAClB,eAAe,cAAE,WAAW,aAAa,EAAE,SAAS,EAAE,MAAM,MAAS;AAAA,EACrE,iBAAiB,cAAE,OAAO,EAAE,SAAS;AAAA,EACrC,yBAAyB,cAAE,WAAW,eAAe,EAAE,SAAS;AAAA,EAChE,GAAG,6BAA6B;AAClC,CAAC,EACA,YAAY;AAKR,IAAM,oBAAoB,cAC9B,OAAO;AAAA,EACN,OAAO,cAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,UAAU,cAAE,OAAO;AACrB,CAAC,EACA,YAAY;AAKR,IAAM,6BAA6B,cACvC,OAAO;AAAA,EACN,IAAI,cAAE,OAAO;AAAA,EACb,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,aAAa,cAAE,OAAO;AAAA,EACtB,kBAAkB,cAAE,OAAO;AAAA,EAC3B,eAAe,cAAE,WAAW,aAAa;AAAA,EACzC,2BAA2B,cAAE,MAAM,cAAE,WAAW,eAAe,CAAC;AAAA,EAChE,wBAAwB,cAAE,WAAW,eAAe;AAAA,EACpD,UAAU,cAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACnC,gBAAgB,cAAE,QAAQ,EAAE,SAAS;AAAA,EACrC,cAAc,cAAE,QAAQ,EAAE,SAAS;AAAA,EACnC,MAAM,cAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,iBAAiB,cAAE,OAAO,EAAE,SAAS;AAAA,EACrC,YAAY,cAAE,OAAO,EAAE,SAAS;AAAA,EAChC,aAAa,iBAAiB,SAAS;AAAA,EACvC,sBAAsB,cAAE,QAAQ,EAAE,SAAS;AAC7C,CAAC,EACA,YAAY;AAKR,IAAM,mBAAmB,cAC7B,OAAO;AAAA,EACN,aAAa,cAAE,OAAO;AAAA,EACtB,cAAc,cAAE,OAAO;AAAA,EACvB,qBAAqB,cAAE,OAAO;AAAA,EAC9B,iBAAiB,cAAE,OAAO;AAAA,EAC1B,gBAAgB,cAAE,OAAO;AAC3B,CAAC,EACA,YAAY;AAKR,IAAM,qBAAqB,cAC/B,OAAO;AAAA,EACN,MAAM,cAAE,OAAO;AAAA,EACf,WAAW,cAAE,OAAO;AAAA,EACpB,OAAO,cAAE,OAAO;AAAA,EAChB,UAAU,cAAE,WAAW,oBAAoB;AAAA,EAC3C,WAAW,cAAE,OAAO;AACtB,CAAC,EACA,YAAY;AAKR,IAAM,wBAAwB,cAClC,OAAO;AAAA,EACN,WAAW,cAAE,OAAO;AAAA,EACpB,aAAa,cAAE,OAAO,EAAE,SAAS;AAAA,EACjC,UAAU,cAAE,OAAO,EAAE,SAAS;AAChC,CAAC,EACA,YAAY;AAKR,IAAM,sBAAsB,cAChC,OAAO;AAAA,EACN,MAAM,cAAE,OAAO;AAAA,EACf,MAAM,cAAE,OAAO;AAAA,EACf,MAAM,cAAE,KAAK,CAAC,aAAa,OAAO,CAAC;AACrC,CAAC,EACA,YAAY;AAKR,IAAM,kBAAkB,cAC5B,OAAO;AAAA,EACN,MAAM,cAAE,OAAO;AAAA,EACf,aAAa,cAAE,OAAO,EAAE,SAAS;AAAA,EACjC,UAAU,cAAE,WAAW,aAAa;AAAA,EACpC,UAAU,cAAE,OAAO;AAAA,EACnB,SAAS,cAAE,QAAQ,EAAE,SAAS;AAAA,EAC9B,eAAe,cAAE,QAAQ,EAAE,SAAS;AAAA,EACpC,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,WAAW,cAAE,MAAM,mBAAmB,EAAE,SAAS;AACnD,CAAC,EACA,YAAY;AAKR,IAAM,uCAAuC,cACjD,OAAO;AAAA,EACN,WAAW,cAAE,OAAO;AAAA,EACpB,KAAK,cAAE,OAAO;AAAA,EACd,aAAa,cAAE,OAAO,EAAE,SAAS;AAAA,EACjC,WAAW,cAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,YAAY,cAAE,MAAM,qBAAqB,EAAE,SAAS;AAAA,EACpD,GAAG;AAAA,EACH,iBAAiB,cAAE,WAAW,eAAe,EAAE,SAAS;AAAA,EACxD,iBAAiB,cAAE,OAAO,EAAE,SAAS;AAAA,EACrC,yBAAyB,cAAE,WAAW,eAAe,EAAE,SAAS;AAAA,EAChE,mBAAmB,cAAE,WAAW,iBAAiB,EAAE,SAAS;AAAA,EAC5D,iBAAiB,cAAE,OAAO,EAAE,SAAS;AAAA,EACrC,uBAAuB,cAAE,QAAQ,EAAE,SAAS;AAAA,EAC5C,GAAG,6BAA6B;AAAA,EAChC,iBAAiB,cAAE,OAAO,EAAE,SAAS;AAAA,EACrC,eAAe,oBAAoB,SAAS;AAAA,EAC5C,MAAM,cAAE,MAAM,gBAAgB,EAAE,SAAS;AAAA,EACzC,qBAAqB,cAAE,OAAO,EAAE,SAAS;AAC3C,CAAC,EACA,OAAO;AAOH,IAAM,iCAAiC,cAC3C,OAAO;AAAA,EACN,WAAW,cAAE,OAAO;AAAA,EACpB,YAAY,cAAE,MAAM,qBAAqB,EAAE,SAAS;AAAA,EACpD,qBAAqB,cAAE,OAAO,EAAE,SAAS;AAC3C,CAAC,EACA,OAAO;AAOH,IAAM,mBAAmB;AAAA,EAC9B,YAAY;AACd;AAMO,IAAM,qBAAqB,cAC/B,OAAO;AAAA,EACN,MAAM,cAAE,QAAQ,iBAAiB,UAAU;AAAA,EAC3C,QAAQ;AACV,CAAC,EACA,OAAO;AAKH,IAAM,oCAAoC,cAC9C,OAAO;AAAA,EACN,WAAW,cAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,MAAM,cAAE,OAAO;AAAA,EACf,QAAQ,cAAE,MAAM,uBAAuB,EAAE,SAAS;AAAA,EAClD,OAAO,cAAE,MAAM,oBAAoB,EAAE,SAAS;AAAA,EAC9C,cAAc,mBAAmB,SAAS;AAC5C,CAAC,EACA,OAAO;AAOH,IAAM,sCAAsC,cAAE,OAAO,CAAC,CAAC,EAAE,OAAO;AAOhE,IAAM,uCAAuC,cACjD,OAAO;AAAA,EACN,iBAAiB,cAAE,OAAO;AAC5B,CAAC,EACA,OAAO;AAOH,IAAM,2CAA2C,cACrD,OAAO;AAAA,EACN,GAAG;AAAA,EACH,iBAAiB,cAAE,WAAW,eAAe,EAAE,SAAS;AAAA,EACxD,iBAAiB,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,yBAAyB,cACtB,WAAW,eAAe,EAC1B,SAAS,EACT,SAAS;AAAA,EACZ,GAAG,6BAA6B;AAClC,CAAC,EACA,OAAO;AAOH,IAAM,qCAAqC,cAC/C,OAAO;AAAA,EACN,YAAY,cAAE,OAAO;AAAA,EACrB,SAAS,cAAE,QAAQ;AAAA,EACnB,eAAe,cAAE,yBAA0B;AAC7C,CAAC,EACA,OAAO;AAOH,IAAM,2CAA2C,cACrD,OAAO;AAAA,EACN,YAAY,cAAE,OAAO;AACvB,CAAC,EACA,OAAO;AAOH,IAAM,mCAAmC,cAC7C,OAAO;AAAA,EACN,YAAY,cAAE,OAAO;AACvB,CAAC,EACA,OAAO;AAOH,IAAM,kCAAkC,cAC5C,OAAO;AAAA,EACN,YAAY,cAAE,OAAO;AACvB,CAAC,EACA,OAAO;AAOH,IAAM,uCAAuC,cACjD,OAAO;AAAA,EACN,YAAY,cAAE,OAAO;AAAA,EACrB,MAAM,cAAE,OAAO;AAAA,EACf,OAAO,cAAE,OAAO;AAClB,CAAC,EACA,OAAO;AAOH,IAAM,kCAAkC,cAC5C,OAAO;AAAA,EACN,MAAM,cAAE,OAAO;AAAA,EACf,MAAM,cAAE,WAAW,aAAa;AAAA,EAChC,KAAK,cAAE,OAAO,EAAE,SAAS;AAAA,EACzB,SAAS,cAAE,OAAO,cAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACvC,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,MAAM,cAAE,MAAM,cAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACnC,KAAK,cAAE,OAAO,cAAE,OAAO,CAAC,EAAE,SAAS;AACrC,CAAC,EACA,OAAO;AAOH,IAAM,qCAAqC,cAC/C,OAAO;AAAA,EACN,YAAY,cAAE,OAAO;AAAA,EACrB,eAAe,cAAE,yBAA0B;AAC7C,CAAC,EACA,OAAO;AAOH,IAAM,qCAAqC,cAAE,OAAO,CAAC,CAAC,EAAE,OAAO;AAO/D,IAAM,kCAAkC,cAAE,OAAO,CAAC,CAAC,EAAE,OAAO;AAO5D,IAAM,qBAAqB,cAC/B,OAAO;AAAA,EACN,IAAI,cAAE,OAAO;AAAA,EACb,OAAO,cAAE,OAAO;AAAA,EAChB,aAAa,cAAE,OAAO;AAAA,EACtB,aAAa,cAAE,OAAO;AAAA,EACtB,UAAU,cAAE,KAAK,CAAC,QAAQ,QAAQ,WAAW,OAAO,CAAC;AAAA,EACrD,gBAAgB,cAAE,QAAQ;AAAA,EAC1B,kBAAkB,cAAE,QAAQ;AAC9B,CAAC,EACA,YAAY;AAKR,IAAM,+BAA+B,cACzC,OAAO;AAAA,EACN,GAAG;AAAA,EACH,iBAAiB,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,uBAAuB,cAAE,QAAQ,EAAE,SAAS;AAAA,EAC5C,GAAG,6BAA6B;AAAA,EAChC,OAAO,cAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS;AAC1C,CAAC,EACA,OAAO;AAOH,IAAM,oCAAoC,cAAE,OAAO,CAAC,CAAC,EAAE,OAAO;AAO9D,IAAM,mCAAmC,cAC7C,OAAO;AAAA,EACN,YAAY,cAAE,OAAO;AAAA,EACrB,UAAU,cAAE,OAAO;AAAA,EACnB,SAAS,cAAE,QAAQ;AACrB,CAAC,EACA,OAAO;AAOH,IAAM,gCAAgC,cAAE,OAAO,CAAC,CAAC,EAAE,OAAO;AAO1D,IAAM,qCAAqC,cAC/C,OAAO;AAAA,EACN,aAAa,cAAE,OAAO;AAAA,EACtB,YAAY,cAAE,OAAO,EAAE,SAAS;AAClC,CAAC,EACA,OAAO;AAOH,IAAM,2BAA2B,cACrC,OAAO;AAAA,EACN,UAAU,cAAE,OAAO;AAAA,EACnB,aAAa,cAAE,OAAO;AAAA,EACtB,MAAM,cAAE,OAAO;AACjB,CAAC,EACA,YAAY;AAKR,IAAM,2BAA2B,cACrC,OAAO;AAAA,EACN,UAAU,cAAE,OAAO;AACrB,CAAC,EACA,YAAY;AAKR,IAAM,0BAA0B,cACpC,OAAO;AAAA,EACN,UAAU,cAAE,OAAO;AAAA,EACnB,QAAQ,cAAE,OAAO;AACnB,CAAC,EACA,YAAY;AAKR,IAAM,mCAAmC,cAC7C,OAAO;AAAA,EACN,WAAW,cAAE,OAAO;AACtB,CAAC,EACA,YAAY;AAOR,IAAM,mCAAmC,cAC7C,OAAO;AAAA,EACN,WAAW,cAAE,OAAO;AAAA,EACpB,gBAAgB,cAAE,MAAM,wBAAwB;AAAA,EAChD,eAAe,cAAE,MAAM,wBAAwB;AAAA,EAC/C,WAAW,cAAE,OAAO;AACtB,CAAC,EACA,YAAY;AAOR,IAAM,oCAAoC,cAC9C,OAAO;AAAA,EACN,oBAAoB,cAAE,OAAO,EAAE,SAAS;AAC1C,CAAC,EACA,YAAY;AAOR,IAAM,mCAAmC,cAC7C,OAAO;AAAA,EACN,OAAO,cAAE,OAAO;AAClB,CAAC,EACA,YAAY;AAOR,IAAM,iCAAiC,cAAE,OAAO,CAAC,CAAC,EAAE,YAAY;AAOhE,IAAM,qCAAqC,cAAE,OAAO,CAAC,CAAC,EAAE,YAAY;AAMpE,IAAM,iCAAiC,qBAAqB,OAAO;AAAA,EACxE,QAAQ,cAAE,2DAA4C;AAAA,EACtD,QAAQ;AACV,CAAC;AAMM,IAAM,2BAA2B,qBAAqB,OAAO;AAAA,EAClE,QAAQ,cAAE,+CAAsC;AAAA,EAChD,QAAQ;AACV,CAAC;AAIM,IAAM,8BAA8B,qBAAqB,OAAO;AAAA,EACrE,QAAQ,cAAE,uDAA0C;AAAA,EACpD,QAAQ;AACV,CAAC;AAIM,IAAM,gCAAgC,qBAAqB,OAAO;AAAA,EACvE,QAAQ,cAAE,yDAA2C;AAAA,EACrD,QAAQ;AACV,CAAC;AAMM,IAAM,iCAAiC,qBAAqB,OAAO;AAAA,EACxE,QAAQ,cAAE,6DAA6C;AAAA,EACvD,QAAQ;AACV,CAAC;AAMM,IAAM,qCAAqC,qBAAqB,OAAO;AAAA,EAC5E,QAAQ,cAAE,qEAAiD;AAAA,EAC3D,QAAQ;AACV,CAAC;AAMM,IAAM,+BAA+B,qBAAqB,OAAO;AAAA,EACtE,QAAQ,cAAE,yDAA2C;AAAA,EACrD,QAAQ;AACV,CAAC;AAMM,IAAM,qCAAqC,qBAAqB,OAAO;AAAA,EAC5E,QAAQ,cAAE,qEAAiD;AAAA,EAC3D,QAAQ;AACV,CAAC;AAMM,IAAM,6BAA6B,qBAAqB,OAAO;AAAA,EACpE,QAAQ,cAAE,qDAAyC;AAAA,EACnD,QAAQ;AACV,CAAC;AAIM,IAAM,4BAA4B,qBAAqB,OAAO;AAAA,EACnE,QAAQ,cAAE,mDAAwC;AAAA,EAClD,QAAQ;AACV,CAAC;AAIM,IAAM,iCAAiC,qBAAqB,OAAO;AAAA,EACxE,QAAQ,cAAE,+DAA8C;AAAA,EACxD,QAAQ;AACV,CAAC;AAMM,IAAM,4BAA4B,qBAAqB,OAAO;AAAA,EACnE,QAAQ,cAAE,mDAAwC;AAAA,EAClD,QAAQ;AACV,CAAC;AAIM,IAAM,+BAA+B,qBAAqB,OAAO;AAAA,EACtE,QAAQ,cAAE,yDAA2C;AAAA,EACrD,QAAQ;AACV,CAAC;AAMM,IAAM,+BAA+B,qBAAqB,OAAO;AAAA,EACtE,QAAQ,cAAE,yDAA2C;AAAA,EACrD,QAAQ;AACV,CAAC;AAMM,IAAM,4BAA4B,qBAAqB,OAAO;AAAA,EACnE,QAAQ,cAAE,mDAAwC;AAAA,EAClD,QAAQ;AACV,CAAC;AAIM,IAAM,yBAAyB,qBAAqB,OAAO;AAAA,EAChE,QAAQ,cAAE,2CAAoC;AAAA,EAC9C,QAAQ;AACV,CAAC;AAIM,IAAM,8BAA8B,qBAAqB,OAAO;AAAA,EACrE,QAAQ,cAAE,uDAA0C;AAAA,EACpD,QAAQ;AACV,CAAC;AAIM,IAAM,6BAA6B,qBAAqB,OAAO;AAAA,EACpE,QAAQ,cAAE,qDAAyC;AAAA,EACnD,QAAQ;AACV,CAAC;AAIM,IAAM,0BAA0B,qBAAqB,OAAO;AAAA,EACjE,QAAQ,cAAE,6CAAqC;AAAA,EAC/C,QAAQ;AACV,CAAC;AAIM,IAAM,+BAA+B,qBAAqB,OAAO;AAAA,EACtE,QAAQ,cAAE,yDAA2C;AAAA,EACrD,QAAQ;AACV,CAAC;AAMM,IAAM,6BAA6B,qBAAqB,OAAO;AAAA,EACpE,QAAQ,cAAE,qDAAyC;AAAA,EACnD,QAAQ;AACV,CAAC;AAIM,IAAM,6BAA6B,qBAAqB,OAAO;AAAA,EACpE,QAAQ,cAAE,mDAAwC;AAAA,EAClD,QAAQ;AACV,CAAC;AAIM,IAAM,8BAA8B,qBAAqB,OAAO;AAAA,EACrE,QAAQ,cAAE,qDAAyC;AAAA,EACnD,QAAQ;AACV,CAAC;AAIM,IAAM,2BAA2B,qBAAqB,OAAO;AAAA,EAClE,QAAQ,cAAE,+CAAsC;AAAA,EAChD,QAAQ;AACV,CAAC;AAIM,IAAM,+BAA+B,qBAAqB,OAAO;AAAA,EACtE,QAAQ,cAAE,yDAA2C;AAAA,EACrD,QAAQ;AACV,CAAC;AAMM,IAAM,6BAA6B,qBAAqB,OAAO;AAAA,EACpE,QAAQ,cAAE,mDAAwC;AAAA,EAClD,QAAQ;AACV,CAAC;AAKM,IAAM,sBAAsB,cAAE,mBAAmB,UAAU;AAAA,EAChE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAKM,IAAM,wBAAwB,cAClC,OAAO;AAAA,EACN,OAAO,cAAE,WAAW,YAAY;AAAA,EAChC,UAAU,cAAE,MAAM,oBAAoB;AAAA,EACtC,aAAa,cAAE,MAAM,sBAAsB;AAAA,EAC3C,kBAAkB,cAAE,MAAM,cAAE,OAAO,CAAC;AAAA,EACpC,cAAc,cAAE,OAAO,qBAAqB,EAAE,SAAS;AAAA,EACvD,YAAY,iBAAiB,SAAS;AAAA,EACtC,uBAAuB,cAAE,OAAO,gBAAgB,EAAE,SAAS;AAC7D,CAAC,EACA,YAAY;AAKR,IAAM,gCAAgC,cAC1C,OAAO;AAAA,EACN,WAAW,cAAE,OAAO;AAAA,EACpB,SAAS;AAAA,EACT,YAAY,cAAE,MAAM,qBAAqB,EAAE,SAAS;AAAA,EACpD,UAAU;AAAA,EACV,SAAS,kBAAkB,SAAS;AAAA,EACpC,iBAAiB,cAAE,MAAM,0BAA0B,EAAE,SAAS;AAChE,CAAC,EACA,YAAY;AAOR,IAAM,0BAA0B,cACpC,OAAO;AAAA,EACN,SAAS;AAAA,EACT,YAAY,cAAE,MAAM,qBAAqB,EAAE,SAAS;AAAA,EACpD,oBAAoB,cAAE,MAAM,gBAAgB,EAAE,SAAS;AAAA,EACvD,wBAAwB,cAAE,MAAM,gBAAgB,EAAE,SAAS;AAAA,EAC3D,UAAU;AAAA,EACV,uBAAuB,cAAE,QAAQ,EAAE,SAAS;AAAA,EAC5C,gBAAgB,cAAE,MAAM,gBAAgB,EAAE,SAAS;AAAA,EACnD,SAAS,kBAAkB,SAAS;AAAA,EACpC,KAAK,cAAE,OAAO,EAAE,SAAS;AAAA,EACzB,kBAAkB,cAAE,OAAO,EAAE,SAAS;AAAA,EACtC,kBAAkB,cAAE,OAAO,EAAE,SAAS;AAAA,EACtC,iBAAiB,cAAE,MAAM,0BAA0B,EAAE,SAAS;AAAA,EAC9D,YAAY,iBAAiB,SAAS;AAAA,EACtC,SAAS,sBAAsB,SAAS;AAAA,EACxC,mBAAmB,cAAE,WAAW,iBAAiB,EAAE,SAAS;AAC9D,CAAC,EACA,YAAY;AAKR,IAAM,6BAA6B;AAKnC,IAAM,+BAA+B;AAOrC,IAAM,gCAAgC;AAOtC,IAAM,oCAAoC;AAO1C,IAAM,8BAA8B;AAKpC,IAAM,oCAAoC;AAO1C,IAAM,4BAA4B;AAKlC,IAAM,2BAA2B;AAKjC,IAAM,gCAAgC;AAOtC,IAAM,2BAA2B;AAKjC,IAAM,8BAA8B;AAKpC,IAAM,8BAA8B,cACxC,OAAO,EAAE,SAAS,cAAE,MAAM,uBAAuB,EAAE,CAAC,EACpD,YAAY;AAKR,IAAM,2BAA2B,cACrC,OAAO,EAAE,OAAO,cAAE,MAAM,iBAAiB,EAAE,CAAC,EAC5C,YAAY;AAKR,IAAM,wBAAwB,cAClC,OAAO,EAAE,OAAO,cAAE,MAAM,kBAAkB,EAAE,CAAC,EAC7C,YAAY;AAKR,IAAM,6BAA6B,cACvC,OAAO;AAAA,EACN,SAAS,cAAE,MAAM,yBAAyB;AAAA,EAC1C,SAAS;AACX,CAAC,EACA,YAAY;AAKR,IAAM,4BAA4B;AAKlC,IAAM,yBAAyB,cACnC,OAAO,EAAE,QAAQ,cAAE,MAAM,eAAe,EAAE,CAAC,EAC3C,YAAY;AAKR,IAAM,8BAA8B,cACxC,OAAO,EAAE,aAAa,cAAE,OAAO,EAAE,CAAC,EAClC,YAAY;AAKR,IAAM,4BAA4B,cACtC,OAAO;AAAA,EACN,gBAAgB,cAAE,MAAM,wBAAwB;AAAA,EAChD,cAAc,cAAE,MAAM,wBAAwB;AAAA,EAC9C,cAAc,cAAE,MAAM,uBAAuB;AAC/C,CAAC,EACA,YAAY;AAKR,IAAM,4BAA4B,cACtC,OAAO;AAAA,EACN,cAAc,cAAE,OAAO;AAAA,EACvB,eAAe,cAAE,OAAO;AAAA,EACxB,cAAc,cAAE,OAAO;AAAA,EACvB,oBAAoB,cAAE,OAAO;AAAA,EAC7B,mBAAmB,cAAE,OAAO;AAC9B,CAAC,EACA,YAAY;AAKR,IAAM,6BAA6B,cACvC,OAAO;AAAA,EACN,cAAc,cAAE,OAAO;AAAA,EACvB,cAAc,cAAE,OAAO;AACzB,CAAC,EACA,YAAY;AAKR,IAAM,0BAA0B,cACpC,OAAO;AAAA,EACN,cAAc,cAAE,OAAO;AACzB,CAAC,EACA,YAAY;AAKR,IAAM,8BAA8B;AAKpC,IAAM,4BAA4B;AAIlC,IAAM,kCAAkC,cAAE,MAAM;AAAA,EACrD,6BAA6B,OAAO;AAAA,IAClC,QAAQ;AAAA,EACV,CAAC;AAAA,EACD;AACF,CAAC;AAaD,IAAM,6BAA6B,cAAE,MAAM;AAAA,EACzC,6BAA6B,OAAO,EAAE,QAAQ,wBAAwB,CAAC;AAAA,EACvE;AACF,CAAC;AAEM,IAAM,4BAKT;AAMG,IAAM,+BAA+B,cAAE,MAAM;AAAA,EAClD,6BAA6B,OAAO,EAAE,QAAQ,2BAA2B,CAAC;AAAA,EAC1E;AACF,CAAC;AAMM,IAAM,iCAAiC,cAAE,MAAM;AAAA,EACpD,6BAA6B,OAAO;AAAA,IAClC,QAAQ;AAAA,EACV,CAAC;AAAA,EACD;AACF,CAAC;AAMM,IAAM,kCAAkC,cAAE,MAAM;AAAA,EACrD,6BAA6B,OAAO;AAAA,IAClC,QAAQ;AAAA,EACV,CAAC;AAAA,EACD;AACF,CAAC;AAMM,IAAM,sCAAsC,cAAE,MAAM;AAAA,EACzD,6BAA6B,OAAO;AAAA,IAClC,QAAQ;AAAA,EACV,CAAC;AAAA,EACD;AACF,CAAC;AAMM,IAAM,gCAAgC,cAAE,MAAM;AAAA,EACnD,6BAA6B,OAAO;AAAA,IAClC,QAAQ;AAAA,EACV,CAAC;AAAA,EACD;AACF,CAAC;AAMM,IAAM,sCAAsC,cAAE,MAAM;AAAA,EACzD,6BAA6B,OAAO;AAAA,IAClC,QAAQ;AAAA,EACV,CAAC;AAAA,EACD;AACF,CAAC;AAMM,IAAM,8BAA8B,cAAE,MAAM;AAAA,EACjD,6BAA6B,OAAO,EAAE,QAAQ,0BAA0B,CAAC;AAAA,EACzE;AACF,CAAC;AAIM,IAAM,6BAA6B,cAAE,MAAM;AAAA,EAChD,6BAA6B,OAAO,EAAE,QAAQ,yBAAyB,CAAC;AAAA,EACxE;AACF,CAAC;AAIM,IAAM,kCAAkC,cAAE,MAAM;AAAA,EACrD,6BAA6B,OAAO;AAAA,IAClC,QAAQ;AAAA,EACV,CAAC;AAAA,EACD;AACF,CAAC;AAMM,IAAM,6BAA6B,cAAE,MAAM;AAAA,EAChD,6BAA6B,OAAO,EAAE,QAAQ,yBAAyB,CAAC;AAAA,EACxE;AACF,CAAC;AAIM,IAAM,gCAAgC,cAAE,MAAM;AAAA,EACnD,6BAA6B,OAAO,EAAE,QAAQ,4BAA4B,CAAC;AAAA,EAC3E;AACF,CAAC;AAMM,IAAM,gCAAgC,cAAE,MAAM;AAAA,EACnD,6BAA6B,OAAO;AAAA,IAClC,QAAQ;AAAA,EACV,CAAC;AAAA,EACD;AACF,CAAC;AAMM,IAAM,6BAA6B,cAAE,MAAM;AAAA,EAChD,6BAA6B,OAAO,EAAE,QAAQ,yBAAyB,CAAC;AAAA,EACxE;AACF,CAAC;AAIM,IAAM,0BAA0B,cAAE,MAAM;AAAA,EAC7C,6BAA6B,OAAO,EAAE,QAAQ,sBAAsB,CAAC;AAAA,EACrE;AACF,CAAC;AAIM,IAAM,+BAA+B,cAAE,MAAM;AAAA,EAClD,6BAA6B,OAAO,EAAE,QAAQ,2BAA2B,CAAC;AAAA,EAC1E;AACF,CAAC;AAMM,IAAM,8BAA8B,cAAE,MAAM;AAAA,EACjD,6BAA6B,OAAO,EAAE,QAAQ,0BAA0B,CAAC;AAAA,EACzE;AACF,CAAC;AAIM,IAAM,2BAA2B,cAAE,MAAM;AAAA,EAC9C,6BAA6B,OAAO,EAAE,QAAQ,uBAAuB,CAAC;AAAA,EACtE;AACF,CAAC;AAIM,IAAM,gCAAgC,cAAE,MAAM;AAAA,EACnD,6BAA6B,OAAO,EAAE,QAAQ,4BAA4B,CAAC;AAAA,EAC3E;AACF,CAAC;AAMM,IAAM,8BAA8B,cAAE,MAAM;AAAA,EACjD,6BAA6B,OAAO,EAAE,QAAQ,0BAA0B,CAAC;AAAA,EACzE;AACF,CAAC;AAIM,IAAM,8BAA8B,cAAE,MAAM;AAAA,EACjD,6BAA6B,OAAO,EAAE,QAAQ,0BAA0B,CAAC;AAAA,EACzE;AACF,CAAC;AAIM,IAAM,+BAA+B,cAAE,MAAM;AAAA,EAClD,6BAA6B,OAAO,EAAE,QAAQ,2BAA2B,CAAC;AAAA,EAC1E;AACF,CAAC;AAMM,IAAM,4BAA4B,cAAE,MAAM;AAAA,EAC/C,6BAA6B,OAAO,EAAE,QAAQ,wBAAwB,CAAC;AAAA,EACvE;AACF,CAAC;AAIM,IAAM,gCAAgC,cAAE,MAAM;AAAA,EACnD,6BAA6B,OAAO,EAAE,QAAQ,4BAA4B,CAAC;AAAA,EAC3E;AACF,CAAC;AAMM,IAAM,8BAA8B,cAAE,MAAM;AAAA,EACjD,6BAA6B,OAAO,EAAE,QAAQ,0BAA0B,CAAC;AAAA,EACzE;AACF,CAAC;;;ADzwCM,IAAM,wBAAwB,cAClC,OAAO;AAAA,EACN,IAAI,cAAE,OAAO;AAAA,EACb,OAAO,cAAE,OAAO;AAAA,EAChB,cAAc,cAAE,OAAO,EAAE,SAAS;AAAA,EAClC,OAAO,cAAE,OAAO;AAAA,EAChB,cAAc,cAAE,OAAO;AAAA,EACvB,cAAc,cAAE,KAAK;AAAA,EACrB,aAAa,cAAE,KAAK;AAAA,EACpB,YAAY,cAAE,QAAQ,EAAE,SAAS;AAAA,EACjC,KAAK,cAAE,OAAO,EAAE,SAAS;AAAA,EACzB,mBAAmB,cAAE,WAAW,iBAAiB,EAAE,SAAS;AAAA,EAC5D,iBAAiB,cAAE,OAAO,EAAE,SAAS;AACvC,CAAC,EACA,YAAY;AASR,IAAM,0BAA0B,cACpC,OAAO;AAAA,EACN,MAAM,cAAE,QAAQ,eAAe;AAAA,EAC/B,WAAW,cAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,OAAO,cAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,cAAc,cAAE,OAAO,EAAE,SAAS;AAAA,EAClC,OAAO,cAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,KAAK,cAAE,OAAO,EAAE,SAAS;AAAA,EACzB,mBAAmB,cAChB,WAAW,iBAAiB,EAC5B,SAAS,EACT,MAAM,MAAS;AAAA,EAClB,iBAAiB,cAAE,OAAO,EAAE,SAAS;AACvC,CAAC,EACA,YAAY;AASR,IAAM,4BAA4B,cACtC,OAAO;AAAA,EACN,YAAY,cAAE,OAAO,EAAE,SAAS;AAAA,EAChC,MAAM,cAAE,MAAM,gBAAgB,EAAE,SAAS;AAC3C,CAAC,EACA,YAAY;;;AK9Df,IAAAC,cAAkB;AAyCX,IAAMC,sBAAqB;AAK3B,IAAM,gBAAgBA;AAMtB,IAAM,oBAAoB,cAC9B,OAAO;AAAA,EACN,MAAM,cAAE,OAAO;AAAA,EACf,SAAS,cAAE,OAAO;AACpB,CAAC,EACA,YAAY;AAKR,IAAM,2BAA2B,cACrC,OAAO;AAAA,EACN,MAAM,cAAE,KAAK,CAAC,aAAa,eAAe,SAAS,UAAU,SAAS,CAAC;AAAA,EACvE,UAAU,cAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,QAAQ,cAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,MAAM,cAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAO,cAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,WAAW,cAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,YAAY,iBAAiB,SAAS;AAAA,EACtC,cAAc,cAAE,OAAO,EAAE,SAAS;AAAA,EAClC,mBAAmB,cAAE,OAAO,EAAE,SAAS;AACzC,CAAC,EACA,YAAY;AAKR,IAAM,+BAA+B,cACzC,OAAO;AAAA,EACN,cAAc,cAAE,WAAW,YAAY,EAAE,SAAS;AAAA,EAClD,iBAAiB,cACd,WAAW,oBAAoB,EAC/B,SAAS,EACT,MAAM,MAAS;AAAA,EAClB,eAAe,cAAE,WAAW,aAAa,EAAE,SAAS,EAAE,MAAM,MAAS;AAAA,EACrE,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,iBAAiB,cAAE,WAAW,eAAe,EAAE,SAAS;AAAA,EACxD,iBAAiB,cAAE,OAAO,EAAE,SAAS;AAAA,EACrC,yBAAyB,cAAE,WAAW,eAAe,EAAE,SAAS;AAAA,EAChE,GAAG,6BAA6B;AAClC,CAAC,EACA,YAAY;AAOR,IAAM,+BAA+B,cACzC,OAAO;AAAA,EACN,MAAM,cAAE,uCAA2C;AAAA,EACnD,WAAW,cAAE,OAAO;AAAA,EACpB,WAAW,cAAE,OAAO;AAAA,EACpB,SAAS,gBAAgB,SAAS;AAAA,EAClC,SAAS,cAAE,QAAQ,EAAE,SAAS;AAAA,EAC9B,IAAI,cAAE,OAAO,EAAE,SAAS;AAC1B,CAAC,EACA,YAAY;AAOR,IAAM,uCAAuC,cACjD,OAAO;AAAA,EACN,MAAM,cAAE,yDAAoD;AAAA,EAC5D,WAAW,cAAE,OAAO;AAAA,EACpB,UAAU,cAAE,OAAO;AAAA,EACnB,QAAQ;AACV,CAAC,EACA,YAAY;AAOR,IAAM,kCAAkC,cAC5C,OAAO;AAAA,EACN,MAAM,cAAE,6CAA8C;AAAA,EACtD,SAAS;AAAA,EACT,UAAU,cAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,WAAW,cAAE,OAAO,EAAE,SAAS;AACjC,CAAC,EACA,YAAY;AAOR,IAAM,0BAA0B,cACpC,OAAO;AAAA,EACN,MAAM,cAAE,2BAAqC;AAAA,EAC7C,SAAS,cAAE,OAAO;AAAA,EAClB,WAAW,cAAE,WAAW,cAAc;AAAA,EACtC,WAAW,cAAE,OAAO;AAAA,EACpB,OAAO,kBAAkB,SAAS;AACpC,CAAC,EACA,YAAY;AAKR,IAAM,6CAA6C,cACvD,OAAO;AAAA,EACN,MAAM,cAAE,uEAA2D;AAAA,EACnE,UAAU,cAAE,WAAW,iBAAiB;AAC1C,CAAC,EACA,YAAY;AAOR,IAAM,uCAAuC,cACjD,OAAO;AAAA,EACN,MAAM,cAAE,uDAAmD;AAAA,EAC3D,WAAW,cAAE,OAAO;AAAA,EACpB,YAAY,cAAE,MAAM,cAAE,OAAO,CAAC;AAAA,EAC9B,gBAAgB,cAAE,WAAW,uBAAuB;AACtD,CAAC,EACA,YAAY;AAOR,IAAM,oCAAoC,cAC9C,OAAO;AAAA,EACN,MAAM,cAAE,iDAAgD;AAAA,EACxD,UAAU;AACZ,CAAC,EACA,YAAY;AAOR,IAAM,wCAAwC,cAClD,OAAO;AAAA,EACN,MAAM,cAAE,2DAAqD;AAAA,EAC7D,OAAO,cAAE,OAAO;AAClB,CAAC,EACA,YAAY;AAOR,IAAM,qCAAqC,cAC/C,OAAO;AAAA,EACN,MAAM,cAAE,qDAAkD;AAAA,EAC1D,SAAS,cAAE,MAAM,yBAAyB;AAAA,EAC1C,SAAS;AACX,CAAC,EACA,YAAY;AAOR,IAAM,uCAAuC,cACjD,OAAO;AAAA,EACN,MAAM,cAAE,yDAAoD;AAAA,EAC5D,WAAW,cAAE,OAAO;AAAA,EACpB,YAAY,cAAE,OAAO;AAAA,EACrB,WAAW,cAAE,OAAO;AACtB,CAAC,EACA,YAAY;AAOR,IAAM,sCAAsC,cAChD,OAAO;AAAA,EACN,MAAM,cAAE,uDAAmD;AAAA,EAC3D,WAAW,cAAE,OAAO;AAAA,EACpB,YAAY,cAAE,OAAO;AAAA,EACrB,WAAW,cAAE,OAAO;AACtB,CAAC,EACA,YAAY;AAOR,IAAM,6CAA6C,cACvD,OAAO;AAAA,EACN,MAAM,cAAE,uEAA2D;AAAA,EACnE,WAAW,cAAE,OAAO;AAAA,EACpB,YAAY;AACd,CAAC,EACA,YAAY;AAOR,IAAM,wCAAwC,cAClD,OAAO;AAAA,EACN,MAAM,cAAE,2DAAqD;AAAA,EAC7D,OAAO,cAAE,WAAW,YAAY;AAClC,CAAC,EACA,YAAY;AAOR,IAAM,2CAA2C,cACrD,OAAO;AAAA,EACN,MAAM,cAAE,iEAAwD;AAAA,EAChE,UAAU,cAAE,MAAM,oBAAoB;AACxC,CAAC,EACA,YAAY;AAOR,IAAM,yCAAyC,cACnD,OAAO;AAAA,EACN,MAAM,cAAE,6DAAsD;AAAA,EAC9D,aAAa,cAAE,MAAM,sBAAsB;AAC7C,CAAC,EACA,YAAY;AAOR,IAAM,qCAAqC,cAC/C,OAAO;AAAA,EACN,MAAM,cAAE,mDAAiD;AAAA,EACzD,WAAW,cAAE,OAAO;AACtB,CAAC,EACA,YAAY;AAOR,IAAM,yCAAyC,cACnD,OAAO;AAAA,EACN,MAAM,cAAE,6DAAsD;AAAA,EAC9D,iBAAiB,cAAE,OAAO;AAC5B,CAAC,EACA,YAAY;AAOR,IAAM,2CAA2C,cACrD,OAAO;AAAA,EACN,MAAM,cAAE,iEAAwD;AAAA,EAChE,iBAAiB,cAAE,OAAO;AAAA,EAC1B,UAAU,cAAE,OAAO;AACrB,CAAC,EACA,YAAY;AAOR,IAAM,oCAAoC,cAC9C,OAAO;AAAA,EACN,MAAM,cAAE,mDAAiD;AAAA,EACzD,YAAY,cAAE,OAAO;AAAA,EACrB,SAAS,cAAE,OAAO;AAAA,EAClB,SAAS,cAAE,OAAO;AAAA,EAClB,OAAO,cAAE,OAAO;AAClB,CAAC,EACA,YAAY;AAOR,IAAM,qCAAqC,cAC/C,OAAO;AAAA,EACN,MAAM,cAAE,qDAAkD;AAAA,EAC1D,YAAY,cAAE,OAAO;AAAA,EACrB,SAAS,cAAE,WAAW,cAAc;AAAA,EACpC,SAAS,cAAE,OAAO;AACpB,CAAC,EACA,YAAY;AAOR,IAAM,gCAAgC;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,mCAAmC,cAAE;AAAA,EAChD;AAAA,EACA;AACF;AAOA,IAAM,mCAAmC,cACtC,OAAO;AAAA,EACN,cAAc;AAChB,CAAC,EACA,YAAY;AAGR,IAAM,kCAIT;AAaJ,IAAM,6BAA6B,0BAA0B,OAAO;AAAA,EAClE,QAAQ,cAAE,+DAA8C;AAAA,EACxD,QAAQ;AACV,CAAC;AAGM,IAAM,4BAIT;AAYG,IAAM,oCAAoC,cAC9C,OAAO;AAAA,EACN,MAAM,cAAE,yBAAiC;AAAA,EACzC,UAAU,cAAE,OAAO;AAAA,EACnB,UAAU,cAAE,OAAO;AAAA,EACnB,YAAY,cAAE,OAAO,EAAE,SAAS;AAAA,EAChC,YAAY,cAAE,OAAO,EAAE,SAAS;AAClC,CAAC,EACA,YAAY;AAMR,IAAM,uCAAuC,cACjD,OAAO;AAAA,EACN,MAAM,cAAE,4BAAoC;AAAA,EAC5C,aAAa,cAAE,OAAO;AAAA,EACtB,SAAS,cAAE,OAAO;AAAA,EAClB,mBAAmB,cAAE,MAAM,cAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAChD,aAAa,cAAE,OAAO,EAAE,SAAS;AACnC,CAAC,EACA,YAAY;AAMR,IAAM,sCAAsC,cAChD,OAAO;AAAA,EACN,MAAM,cAAE,6BAAmC;AAAA,EAC3C,UAAU,cAAE,OAAO;AAAA,EACnB,UAAU,cAAE,OAAO;AAAA,EACnB,SAAS,cAAE,OAAO;AACpB,CAAC,EACA,YAAY;AAMR,IAAM,wBAAwB,cAClC,OAAO;AAAA,EACN,OAAO,cAAE,OAAO;AAAA,EAChB,OAAO,cAAE,OAAO;AAAA,EAChB,UAAU,cAAE,OAAO;AAAA,EACnB,SAAS,cAAE,MAAM,cAAE,OAAO,CAAC;AAC7B,CAAC,EACA,YAAY;AAIR,IAAM,mCAAmC,cAC7C,OAAO;AAAA,EACN,MAAM,cAAE,gCAAoC;AAAA,EAC5C,eAAe,cAAE,OAAO;AAAA,EACxB,QAAQ,cACL,OAAO;AAAA,IACN,WAAW,cAAE,MAAM,qBAAqB;AAAA,EAC1C,CAAC,EACA,SAAS;AAAA,EACZ,YAAY,cACT,OAAO;AAAA,IACN,SAAS,cAAE,OAAO;AAAA,IAClB,MAAM,cAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,CAAC,EACA,SAAS;AACd,CAAC,EACA,YAAY;AAMR,IAAM,wCAAwC,cAClD,OAAO;AAAA,EACN,MAAM,cAAE,2CAAyC;AAAA,EACjD,MAAM,cAAE,OAAO;AAAA,EACf,OAAO,cAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,aAAa,cAAE,MAAM,cAAE,OAAO,CAAC,EAAE,SAAS;AAC5C,CAAC,EACA,YAAY;AAMR,IAAM,0CAA0C,cACpD,OAAO;AAAA,EACN,MAAM,cAAE,8CAA2C;AAAA,EACnD,UAAU,cAAE,OAAO;AAAA,EACnB,OAAO,cAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA,YAAY;AAMR,IAAM,2CAA2C,cACrD,OAAO;AAAA,EACN,MAAM,cAAE,iDAA4C;AAAA,EACpD,qBAAqB,cAAE,OAAO;AAAA,EAC9B,0BAA0B,cAAE,MAAM,cAAE,OAAO,CAAC;AAC9C,CAAC,EACA,YAAY;AAMR,IAAM,0CAA0C,cACpD,OAAO;AAAA,EACN,MAAM,cAAE,sCAAuC;AAAA,EAC/C,UAAU,cAAE,OAAO;AAAA,EACnB,UAAU,cAAE,OAAO;AAAA,EACnB,cAAc,cAAE,OAAO;AAAA,EACvB,YAAY,cAAE,OAAO,EAAE,SAAS;AAAA,EAChC,YAAY,cAAE,OAAO,EAAE,SAAS;AAClC,CAAC,EACA,YAAY;AAMR,IAAM,mCAAmC,cAC7C,OAAO;AAAA,EACN,MAAM,cAAE,gCAAoC;AAAA,EAC5C,UAAU,cAAE,OAAO;AAAA,EACnB,aAAa,cAAE,OAAO;AACxB,CAAC,EACA,YAAY;AAOR,IAAM,gCAAgC,cAAE,mBAAmB,QAAQ;AAAA,EACxE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAOM,IAAM,6BAA6B,cACvC,OAAO;AAAA,EACN,SAAS;AAAA,EACT,kBAAkB,cAAE,WAAW,oBAAoB;AAAA,EACnD,SAAS;AACX,CAAC,EACA,YAAY;AAKR,IAAM,uCAAuC,cACjD,OAAO;AAAA,EACN,UAAU,cAAE,MAAM,0BAA0B;AAAA,EAC5C,SAAS,cAAE,MAAM,8BAA8B;AACjD,CAAC,EACA,YAAY;AAOR,IAAM,iCAAiC,qBAAqB,OAAO;AAAA,EACxE,QAAQ,cAAE,2DAA4C;AAAA,EACtD,QAAQ;AACV,CAAC;AAkBM,IAAM,gCAAgC,cAC1C,OAAO;AAAA,EACN,gBAAgB,cAAE,WAAW,uBAAuB;AAAA,EACpD,SAAS,cAAE,OAAO,EAAE,SAAS;AAC/B,CAAC,EACA,OAAO;AAOH,IAAM,kCAAkC,cAAE,MAAM;AAAA,EACrD,6BAA6B,OAAO;AAAA,IAClC,QAAQ;AAAA,EACV,CAAC;AAAA,EACD;AACF,CAAC;AAOM,IAAM,6BAA6B,cACvC,OAAO;AAAA,EACN,YAAY,cAAE,OAAO;AAAA,EACrB,WAAW,cAAE,MAAM,qBAAqB;AAC1C,CAAC,EACA,YAAY;AAKR,IAAM,uBAAuB,qBAAqB,OAAO;AAAA,EAC9D,QAAQ,cAAE,uCAAkC;AAAA,EAC5C,QAAQ;AACV,CAAC;AAKM,IAAM,+BAA+B,cACzC,OAAO;AAAA,EACN,OAAO,cAAE,OAAO;AAAA,EAChB,UAAU,cAAE,OAAO;AAAA,EACnB,QAAQ,cAAE,OAAO;AACnB,CAAC,EACA,OAAO;AAOH,IAAM,sBAAsB,cAChC,OAAO;AAAA,EACN,WAAW,cAAE,QAAQ,EAAE,SAAS;AAAA,EAChC,SAAS,cAAE,MAAM,4BAA4B;AAC/C,CAAC,EACA,OAAO;AAKH,IAAM,wBAAwB,cAAE,MAAM;AAAA,EAC3C,6BAA6B,OAAO,EAAE,QAAQ,oBAAoB,CAAC;AAAA,EACnE;AACF,CAAC;AAKD,IAAM,kCAAkC,cAAE,MAAM;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,IAAM,iCAIT;;;AChtBG,IAAM,cAAsB;AAG5B,IAAM,UAAU;AAAA,EACrB,MAAM;AAAA,EACN,UAAU,EAAE,UAAU,cAAuB,SAAS,YAAY;AACpE;;;ACdO,IAAM,kBAAN,MAAM,yBAAwB,MAAM;AAAA,EAChC;AAAA,EAEA;AAAA,EAET,YAAY,SAAiB,SAA+C;AAC1E,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,MAAM,SAAS,OAAO;AAC3B,SAAK,WAAW,SAAS,YAAY;AACrC,WAAO,eAAe,MAAM,iBAAgB,SAAS;AAAA,EACvD;AACF;AAEO,IAAM,gBAAN,MAAM,uBAAsB,MAAM;AAAA,EAC9B;AAAA,EAEA;AAAA,EAET,YAAY,SAAiB,SAA6C;AACxE,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAO,SAAS;AACrB,SAAK,OAAO,SAAS;AACrB,WAAO,eAAe,MAAM,eAAc,SAAS;AAAA,EACrD;AACF;AAEO,IAAM,eAAN,MAAM,sBAAqB,MAAM;AAAA,EACtC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,WAAO,eAAe,MAAM,cAAa,SAAS;AAAA,EACpD;AACF;AAEO,IAAM,uBAAN,MAAM,8BAA6B,aAAa;AAAA,EAC5C;AAAA,EAET,YAAY,WAAmB;AAC7B,UAAM,sBAAsB,SAAS,EAAE;AACvC,SAAK,OAAO;AACZ,SAAK,YAAY;AACjB,WAAO,eAAe,MAAM,sBAAqB,SAAS;AAAA,EAC5D;AACF;AAEO,IAAM,eAAN,MAAM,sBAAqB,MAAM;AAAA,EACtC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,WAAO,eAAe,MAAM,cAAa,SAAS;AAAA,EACpD;AACF;AAEO,IAAM,mBAAN,MAAM,0BAAyB,MAAM;AAAA,EACjC;AAAA,EAEA;AAAA,EAET,YACE,SACA,SACA;AACA,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,WAAW,SAAS,YAAY;AACrC,SAAK,SAAS,SAAS,UAAU;AACjC,WAAO,eAAe,MAAM,kBAAiB,SAAS;AAAA,EACxD;AACF;;;ACtEA,gCAAyC;AACzC,eAA0B;;;ACCnB,SAAS,SAAS,OAAkD;AACzE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;;;ADQA,IAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,0BAA0B;AAEzB,IAAM,mBAAN,MAAuD;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,eAAoC;AAAA,EACpC,oBAA+C;AAAA,EAC/C,iBAAyC;AAAA,EACzC,eAAqC;AAAA;AAAA,EAGrC,eAA6B;AAAA;AAAA,EAG7B,aAA4B,QAAQ,QAAQ;AAAA,EAE5C,eAAe;AAAA,EACf,YAAY;AAAA,EAEpB,YAAY,UAAmC,CAAC,GAAG;AACjD,SAAK,WAAW,QAAQ,YAAY;AACpC,SAAK,WAAW,QAAQ,WACpB,CAAC,GAAG,QAAQ,QAAQ,IACpB,CAAC,GAAG,iBAAiB;AACzB,SAAK,MAAM,QAAQ;AACnB,SAAK,MAAM,QAAQ;AACnB,SAAK,iBACF,QAAQ,eAAe,0BAA0B,OAAS;AAAA,EAC/D;AAAA,EAEA,IAAI,cAAuB;AACzB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,UAAyB;AAC7B,QAAI,KAAK,cAAc;AACrB,YAAM,IAAI,gBAAgB,+BAA+B;AAAA,QACvD,UAAU,KAAK;AAAA,MACjB,CAAC;AAAA,IACH;AAEA,SAAK,eAAe;AACpB,SAAK,YAAY;AACjB,SAAK,aAAa,QAAQ,QAAQ;AAElC,UAAM,YAAY,KAAK,MAAM,EAAE,GAAG,QAAQ,KAAK,GAAG,KAAK,IAAI,IAAI;AAE/D,QAAI;AACF,WAAK,mBAAe,iCAAM,KAAK,UAAU,KAAK,UAAU;AAAA,QACtD,OAAO,CAAC,QAAQ,QAAQ,MAAM;AAAA,QAC9B,KAAK,KAAK;AAAA,QACV,KAAK;AAAA,MACP,CAAC;AAAA,IACH,SAAS,KAAc;AACrB,YAAM,UACJ,eAAe,QACX,kCAAkC,IAAI,OAAO,KAC7C;AACN,YAAM,IAAI,gBAAgB,SAAS;AAAA,QACjC,UAAU,KAAK;AAAA,QACf,KAAK,KAAK;AAAA,MACZ,CAAC;AAAA,IACH;AAEA,SAAK,eAAe;AACpB,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,KAAK,SAAwC;AAC3C,QAAI,KAAK,cAAc;AACrB,YAAM,KAAK;AAAA,IACb;AACA,QAAI,CAAC,KAAK,gBAAgB,CAAC,KAAK,gBAAgB,CAAC,KAAK,aAAa,OAAO;AACxE,YAAM,IAAI,gBAAgB,2BAA2B;AAAA,QACnD,UAAU,KAAK;AAAA,MACjB,CAAC;AAAA,IACH;AAEA,UAAM,OAAO,KAAK,UAAU,OAAO,IAAI;AAGvC,UAAM,gBAAgB,KAAK;AAE3B,SAAK,cAAc,YAAY;AAG7B,YAAM,cAAc,MAAM,MAAM;AAAA,MAAC,CAAC;AAElC,UACE,CAAC,KAAK,gBACN,CAAC,KAAK,aAAa,SACnB,KAAK,aAAa,UAClB,KAAK,WACL;AACA,cAAM,IAAI,gBAAgB,qCAAqC;AAAA,UAC7D,UAAU,KAAK;AAAA,QACjB,CAAC;AAAA,MACH;AAEA,UAAI,KAAK,cAAc;AACrB,cAAM,KAAK;AAAA,MACb;AAEA,YAAM,IAAI,QAAc,CAACC,UAAS,WAAW;AAC3C,YAAI,CAAC,KAAK,gBAAgB,CAAC,KAAK,aAAa,OAAO;AAClD;AAAA,YACE,IAAI,gBAAgB,6BAA6B;AAAA,cAC/C,UAAU,KAAK;AAAA,YACjB,CAAC;AAAA,UACH;AACA;AAAA,QACF;AAEA,cAAM,QAAQ,KAAK,aAAa;AAChC,YAAI,cAAc,SAAS,CAAC,MAAM,UAAU;AAC1C;AAAA,YACE,IAAI,gBAAgB,iCAAiC;AAAA,cACnD,UAAU,KAAK;AAAA,YACjB,CAAC;AAAA,UACH;AACA;AAAA,QACF;AAEA,cAAM,MAAM,MAAM,CAAC,UAAU;AAC3B,cAAI,OAAO;AACT,kBAAM,MAAM,MAAM,WAAW,OAAO,KAAK;AACzC,gBAAI,IAAI,SAAS,OAAO,KAAK,IAAI,SAAS,YAAY,GAAG;AACvD;AAAA,gBACE,IAAI,gBAAgB,qCAAqC;AAAA,kBACvD,UAAU,KAAK;AAAA,gBACjB,CAAC;AAAA,cACH;AAAA,YACF,OAAO;AACL;AAAA,gBACE,IAAI;AAAA,kBACF,qCAAqC,GAAG;AAAA,kBACxC,EAAE,UAAU,KAAK,SAAS;AAAA,gBAC5B;AAAA,cACF;AAAA,YACF;AAAA,UACF,OAAO;AACL,YAAAA,SAAQ;AAAA,UACV;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH,GAAG;AAAA,EACL;AAAA,EAEA,UAAU,UAAiC;AACzC,SAAK,iBAAiB;AAAA,EACxB;AAAA,EAEA,QAAQ,UAA+B;AACrC,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,MAAM,QAAuB;AAC3B,QAAI,KAAK,WAAW;AAClB;AAAA,IACF;AAEA,SAAK,YAAY;AACjB,SAAK,eAAe;AAEpB,UAAM,OAAO,KAAK;AAClB,SAAK,eAAe;AAEpB,QAAI,KAAK,mBAAmB;AAC1B,WAAK,kBAAkB,MAAM;AAC7B,WAAK,oBAAoB;AAAA,IAC3B;AAEA,QAAI,QAAQ,KAAK,aAAa,QAAQ,CAAC,KAAK,QAAQ;AAClD,YAAM,IAAI,QAAc,CAACA,aAAY;AACnC,cAAM,UAAU,WAAW,MAAM;AAE/B,cAAI,KAAK,aAAa,QAAQ,CAAC,KAAK,QAAQ;AAC1C,gBAAI;AACF,mBAAK,KAAK,SAAS;AAAA,YACrB,QAAQ;AAAA,YAER;AAAA,UACF;AAAA,QACF,GAAG,KAAK,aAAa;AAErB,aAAK,KAAK,QAAQ,MAAM;AACtB,uBAAa,OAAO;AACpB,UAAAA,SAAQ;AAAA,QACV,CAAC;AAGD,YAAI,KAAK,OAAO;AACd,cAAI;AACF,iBAAK,MAAM,IAAI;AAAA,UACjB,QAAQ;AAAA,UAER;AAAA,QACF;AAEA,YAAI;AACF,eAAK,KAAK,SAAS;AAAA,QACrB,QAAQ;AAEN,uBAAa,OAAO;AACpB,UAAAA,SAAQ;AAAA,QACV;AAAA,MACF,CAAC;AAAA,IACH;AAEA,SAAK,YAAY;AAAA,EACnB;AAAA,EAEQ,gBAAsB;AAC5B,UAAM,OAAO,KAAK;AAClB,QAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ;AACzB;AAAA,IACF;AAEA,SAAK,oBAA6B,yBAAgB;AAAA,MAChD,OAAO,KAAK;AAAA,MACZ,WAAW;AAAA,IACb,CAAC;AAED,SAAK,kBAAkB,GAAG,QAAQ,CAAC,SAAS;AAC1C,YAAM,UAAU,KAAK,KAAK;AAC1B,UAAI,CAAC,SAAS;AACZ;AAAA,MACF;AAGA,UAAI,QAAQ,WAAW,GAAG,GAAG;AAC3B,YAAI;AACF,gBAAM,SAAkB,KAAK,MAAM,OAAO;AAC1C,cAAI,KAAK,kBAAkB,SAAS,MAAM,GAAG;AAC3C,iBAAK,eAAe,MAAM;AAAA,UAC5B;AAAA,QACF,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF,CAAC;AAED,SAAK,GAAG,SAAS,CAAC,UAAU;AAC1B,WAAK,eAAe,IAAI;AAAA,QACtB,kCAAkC,MAAM,OAAO;AAAA,QAC/C;AAAA,UACE,UAAU,KAAK;AAAA,UACf,KAAK,KAAK;AAAA,QACZ;AAAA,MACF;AACA,WAAK,eAAe;AACpB,UAAI,CAAC,KAAK,aAAa,KAAK,cAAc;AACxC,aAAK,aAAa,KAAK,YAAY;AAAA,MACrC;AAAA,IACF,CAAC;AAED,SAAK,GAAG,QAAQ,CAAC,MAAM,WAAW;AAChC,UAAI,KAAK,mBAAmB;AAC1B,aAAK,kBAAkB,MAAM;AAC7B,aAAK,oBAAoB;AAAA,MAC3B;AAEA,WAAK,eAAe;AAEpB,UAAI,CAAC,KAAK,WAAW;AACnB,cAAM,WAAW,QAAQ;AACzB,cAAM,aAAa,UAAU;AAE7B,YAAI;AACJ,YAAI,YAAY;AACd,oBAAU,6BAA6B,UAAU;AAAA,QACnD,WAAW,aAAa,QAAQ,aAAa,GAAG;AAC9C,oBAAU,gDAAgD,QAAQ;AAAA,QACpE,WAAW,aAAa,GAAG;AACzB,oBAAU;AAAA,QACZ,OAAO;AACL,oBAAU;AAAA,QACZ;AAEA,aAAK,eAAe,IAAI,iBAAiB,SAAS;AAAA,UAChD;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAED,YAAI,KAAK,cAAc;AACrB,eAAK,aAAa,KAAK,YAAY;AAAA,QACrC;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AE1TA,kBAA6B;AAmEtB,IAAM,iBAAN,MAAqB;AAAA,EACT;AAAA,EACA;AAAA,EAEA,mBAAmB,oBAAI,IAA4B;AAAA,EACnD,yBAAyB,oBAAI,IAA0B;AAAA,EAChE,qBAA+C;AAAA,EAC/C,kBAAyC;AAAA,EACzC,kBAAgC;AAAA,EAChC,UAAU;AAAA,EAElB,YAAY,SAGT;AACD,SAAK,aAAa,QAAQ;AAC1B,SAAK,kBAAkB,QAAQ,kBAAkB;AAEjD,SAAK,WAAW,UAAU,CAAC,YAAqC;AAC9D,WAAK,eAAe,OAAO;AAAA,IAC7B,CAAC;AACD,SAAK,WAAW,QAAQ,CAAC,UAAiB;AACxC,WAAK,sBAAsB,KAAK;AAAA,IAClC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YACJ,QACA,QACA,SACkB;AAClB,QAAI,KAAK,SAAS;AAChB,YAAM,IAAI,gBAAgB,2BAA2B;AAAA,IACvD;AAEA,QAAI,KAAK,oBAAoB,MAAM;AACjC,YAAM,IAAI;AAAA,QACR,oBAAoB,KAAK,gBAAgB,OAAO;AAAA,MAClD;AAAA,IACF;AAEA,UAAM,mBAAmB,WAAW,KAAK;AACzC,UAAM,gBAAY,YAAAC,IAAO;AAEzB,UAAM,WAAW;AAAA,MACf,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,wBAAwB;AAAA,MACxB;AAAA,MACA,IAAI;AAAA,MACJ;AAAA,MACA;AAAA,IACF;AAGA,WAAO,IAAI,QAAiB,CAACC,UAAS,WAAW;AAC/C,YAAM,QAAQ,WAAW,MAAM;AAC7B,aAAK,iBAAiB,OAAO,SAAS;AACtC;AAAA,UACE,IAAI;AAAA,YACF,WAAW,MAAM,oBAAoB,gBAAgB;AAAA,UACvD;AAAA,QACF;AAAA,MACF,GAAG,gBAAgB;AAEnB,YAAM,UAA0B;AAAA,QAC9B;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAAA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,WAAK,iBAAiB,IAAI,WAAW,OAAO;AAE5C,UAAI;AACF,aAAK,WAAW,KAAK,QAAQ;AAAA,MAC/B,SAAS,WAAW;AAClB,qBAAa,KAAK;AAClB,aAAK,iBAAiB,OAAO,SAAS;AACtC,YAAI,qBAAqB,OAAO;AAC9B;AAAA,YACE,IAAI,gBAAgB,2BAA2B,UAAU,OAAO,EAAE;AAAA,UACpE;AAAA,QACF,OAAO;AACL,iBAAO,IAAI,gBAAgB,wBAAwB,CAAC;AAAA,QACtD;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,eACE,UACA,QACY;AACZ,UAAM,WAAiC,EAAE,UAAU,OAAO;AAC1D,SAAK,uBAAuB,IAAI,QAAQ;AAExC,QAAI,eAAe;AACnB,WAAO,MAAM;AACX,UAAI,CAAC,cAAc;AACjB,uBAAe;AACf,aAAK,uBAAuB,OAAO,QAAQ;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,qBAAqB,SAAkC;AACrD,SAAK,qBAAqB;AAAA,EAC5B;AAAA,EAEA,yBAA+B;AAC7B,SAAK,qBAAqB;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,kBAAkB,SAA+B;AAC/C,SAAK,kBAAkB;AAAA,EACzB;AAAA,EAEA,sBAA4B;AAC1B,SAAK,kBAAkB;AAAA,EACzB;AAAA,EAEA,IAAI,YAAqB;AACvB,WAAO,CAAC,KAAK,WAAW,KAAK,oBAAoB;AAAA,EACnD;AAAA,EAEA,MAAM,QAAuB;AAC3B,QAAI,KAAK,SAAS;AAChB;AAAA,IACF;AACA,SAAK,UAAU;AAEf,UAAM,QAAQ,IAAI;AAAA,MAChB;AAAA,IACF;AACA,SAAK,kBAAkB,KAAK;AAE5B,SAAK,qBAAqB;AAC1B,SAAK,kBAAkB;AACvB,SAAK,uBAAuB,MAAM;AAElC,UAAM,KAAK,WAAW,MAAM;AAAA,EAC9B;AAAA,EAEQ,eAAe,KAAoC;AACzD,UAAM,SAAS,qBAAqB,UAAU,GAAG;AAEjD,QAAI,CAAC,OAAO,SAAS;AAEnB;AAAA,IACF;AAEA,UAAM,MAAM,OAAO;AACnB,YAAQ,IAAI,MAAM;AAAA,MAChB;AACE,aAAK,gBAAgB,IAAI,IAAI,IAAI,QAAQ,IAAI,KAAK;AAClD;AAAA,MACF;AACE,aAAK,oBAAoB,GAAG;AAC5B;AAAA,MACF;AACE,aAAK,KAAK,qBAAqB,IAAI,QAAQ,IAAI,IAAI,IAAI,MAAM;AAC7D;AAAA,IACJ;AAAA,EACF;AAAA,EAEQ,gBACN,YACA,QACA,OACM;AACN,QAAI,cAAc,MAAM;AACtB;AAAA,IACF;AAEA,UAAM,UAAU,KAAK,iBAAiB,IAAI,UAAU;AAEpD,QAAI,WAAW,MAAM;AACnB;AAAA,IACF;AAEA,SAAK,iBAAiB,OAAO,UAAU;AACvC,iBAAa,QAAQ,KAAK;AAE1B,QAAI,SAAS,MAAM;AACjB,UAAI,MAAM,wCAA4C;AACpD,cAAM,YAAY;AAAA,UAChB,QAAQ,OAAO,WAAW,KAAK,QAAQ;AAAA,QACzC;AACA,gBAAQ,OAAO,IAAI,qBAAqB,SAAS,CAAC;AAClD;AAAA,MACF;AAEA,cAAQ;AAAA,QACN,IAAI,cAAc,MAAM,SAAS,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,CAAC;AAAA,MACzE;AACA;AAAA,IACF;AAEA,YAAQ,QAAQ,MAAM;AAAA,EACxB;AAAA,EAEQ,oBAAoB,cAA6C;AACvE,QAAI;AACJ,UAAM,SAAS,gCAAgC;AAAA,MAC7C,aAAa,QAAQ;AAAA,IACvB;AACA,QAAI,OAAO,SAAS;AAClB,yBAAmB,OAAO,KAAK,aAAa;AAAA,IAC9C;AAEA,eAAW,YAAY,KAAK,wBAAwB;AAClD,UACE,SAAS,QAAQ,QAAQ,QACzB,SAAS,OAAO,SAAS,kBACzB;AACA;AAAA,MACF;AAEA,UAAI;AACF,iBAAS,SAAS,YAAY;AAAA,MAChC,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,qBACZ,QACA,WACA,QACe;AACf,QAAI,gEAAiD;AACnD,YAAM,KAAK,yBAAyB,WAAW,MAAM;AAAA,IACvD,WAAW,4CAAuC;AAChD,YAAM,KAAK,sBAAsB,WAAW,MAAM;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,MAAc,yBACZ,WACA,QACe;AACf,UAAM,UAAU,KAAK;AAErB,QAAI,WAAW,MAAM;AAEnB,WAAK;AAAA,QACH;AAAA,QACA,8BAA8B,MAAM;AAAA,UAClC;AAAA,QACF,CAAC;AAAA,MACH;AACA;AAAA,IACF;AAEA,QAAI;AACF,YAAM,eAAe,qCAAqC,MAAM,MAAM;AACtE,YAAM,YAAY,MAAM,QAAQ,QAAQ,QAAQ,YAAY,CAAC;AAC7D,YAAM,SACJ,OAAO,cAAc,WACjB,EAAE,gBAAgB,UAAU,IAC5B;AACN,WAAK;AAAA,QACH;AAAA,QACA,8BAA8B,MAAM,MAAM;AAAA,MAC5C;AAAA,IACF,SAAS,KAAK;AACZ,YAAM,eAAe,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AACpE,WAAK;AAAA,QACH;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,sBACZ,WACA,QACe;AACf,UAAM,UAAU,KAAK;AAErB,QAAI,WAAW,MAAM;AAEnB,WAAK;AAAA,QACH;AAAA,QACA,oBAAoB,MAAM,EAAE,WAAW,MAAM,SAAS,CAAC,EAAE,CAAC;AAAA,MAC5D;AACA;AAAA,IACF;AAEA,QAAI;AACF,YAAM,eAAe,2BAA2B,MAAM,MAAM;AAC5D,YAAM,SAAS,MAAM,QAAQ,QAAQ,QAAQ,YAAY,CAAC;AAC1D,WAAK,cAAc,WAAW,oBAAoB,MAAM,MAAM,CAAC;AAAA,IACjE,SAAS,KAAK;AACZ,YAAM,eAAe,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AACpE,WAAK;AAAA,QACH;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,sBAAsB,OAAoB;AAChD,SAAK,kBAAkB;AACvB,UAAM,kBAAkB,IAAI;AAAA,MAC1B,oBAAoB,MAAM,OAAO;AAAA,IACnC;AACA,oBAAgB,QAAQ;AACxB,SAAK,kBAAkB,eAAe;AAAA,EACxC;AAAA,EAEQ,cACN,WACA,QACM;AACN,UAAM,WAAoC;AAAA,MACxC,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,wBAAwB;AAAA,MACxB;AAAA,MACA,IAAI;AAAA,MACJ;AAAA,IACF;AACA,SAAK,gBAAgB,QAAQ;AAAA,EAC/B;AAAA,EAEQ,mBACN,WACA,MACA,SACA,MACM;AACN,UAAM,WAAoC,EAAE,MAAM,QAAQ;AAC1D,QAAI,SAAS,QAAW;AACtB,eAAS,MAAM,IAAI;AAAA,IACrB;AAEA,UAAM,WAAoC;AAAA,MACxC,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,wBAAwB;AAAA,MACxB;AAAA,MACA,IAAI;AAAA,MACJ,OAAO;AAAA,IACT;AACA,SAAK,gBAAgB,QAAQ;AAAA,EAC/B;AAAA,EAEQ,gBAAgB,SAAwC;AAC9D,QAAI;AACF,WAAK,WAAW,KAAK,OAAO;AAAA,IAC9B,QAAQ;AAAA,IAGR;AAAA,EACF;AAAA,EAEQ,kBAAkB,OAAoB;AAC5C,UAAM,UAAU,IAAI,IAAI,KAAK,gBAAgB;AAC7C,SAAK,iBAAiB,MAAM;AAE5B,eAAW,OAAO,QAAQ,OAAO,GAAG;AAClC,mBAAa,IAAI,KAAK;AACtB,UAAI,OAAO,KAAK;AAAA,IAClB;AAAA,EACF;AACF;;;AC/UO,IAAM,cAAN,MAAkB;AAAA,EACN;AAAA,EACT,aAA4B;AAAA,EAC5B,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,yBAAuD,CAAC;AAAA;AAAA,EAGjE,qBAAqD;AAAA;AAAA,EAGrD,kBAA+C;AAAA,EAEvD,YAAY,SAA6B;AACvC,SAAK,UAAU,IAAI,eAAe;AAAA,MAChC,WAAW,QAAQ;AAAA,MACnB,gBAAgB,QAAQ;AAAA,IAC1B,CAAC;AAED,SAAK,QAAQ,eAAe,CAAC,iBAAiB;AAC5C,WAAK,sBAAsB,YAAY;AAAA,IACzC,CAAC;AAED,SAAK,QAAQ;AAAA,MAAqB,CAAC,WACjC,KAAK,2BAA2B,MAAM;AAAA,IACxC;AACA,SAAK,QAAQ;AAAA,MAAkB,CAAC,WAC9B,KAAK,wBAAwB,MAAM;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,MAAc,KACZ,QACA,QACA,QACA,SACsB;AACtB,UAAM,MAAM,MAAM,KAAK,QAAQ,YAAY,QAAQ,QAAQ,OAAO;AAClE,WAAO,OAAO,MAAM,GAAG;AAAA,EACzB;AAAA,EAEA,MAAc,YACZ,QACA,QACA,QACA,SACsB;AACtB,SAAK,iBAAiB;AACtB,SAAK,eAAe;AACpB,WAAO,KAAK,KAAK,QAAQ,QAAQ,QAAQ,OAAO;AAAA,EAClD;AAAA,EAEA,MAAc,yBACZ,QACA,QACA,SACsB;AACtB,WAAO,KAAK,YAAY,QAAQ,CAAC,GAAG,QAAQ,OAAO;AAAA,EACrD;AAAA,EAEA,IAAI,YAA2B;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,cAAuB;AACzB,WAAO,CAAC,KAAK,WAAW,KAAK,QAAQ;AAAA,EACvC;AAAA,EAEA,MAAM,kBACJ,QACkC;AAClC,SAAK,iBAAiB;AAEtB,UAAM,SAAS,MAAM,KAAK;AAAA;AAAA,MAExB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,SAAK,aAAa,OAAO;AACzB,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,YACJ,QAC4B;AAC5B,SAAK,iBAAiB;AAEtB,UAAM,SAAS,MAAM,KAAK;AAAA;AAAA,MAExB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,SAAK,aAAa,OAAO;AACzB,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,eACJ,QAO+B;AAC/B,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mBAAoD;AACxD,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kBACJ,QACkC;AAClC,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,QACsC;AACtC,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,gBACJ,QACgC;AAChC,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,QACsC;AACtC,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,QAC8B;AAC9B,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aACJ,QAC6B;AAC7B,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kBACJ,QACkC;AAClC,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aACJ,QAC6B;AAC7B,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,gBACJ,QACgC;AAChC,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkD;AACtD,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,eAA4C;AAChD,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UACJ,SAAiC,CAAC,GACR;AAC1B,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,iBAAgD;AACpD,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,QAC8B;AAC9B,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aAAwC;AAC5C,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,gBACJ,QACgC;AAChC,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,QAC8B;AAC9B,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,QAC8B;AAC9B,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,eACJ,QAC+B;AAC/B,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cAA0C;AAC9C,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkD;AACtD,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,QAC8B;AAC9B,WAAO,KAAK;AAAA;AAAA,MAEV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,eACE,UACA,QACY;AACZ,UAAM,QAAoC,EAAE,UAAU,OAAO;AAC7D,SAAK,uBAAuB,KAAK,KAAK;AAEtC,QAAI,eAAe;AACnB,WAAO,MAAM;AACX,UAAI,CAAC,cAAc;AACjB,uBAAe;AACf,cAAM,MAAM,KAAK,uBAAuB,QAAQ,KAAK;AACrD,YAAI,QAAQ,IAAI;AACd,eAAK,uBAAuB,OAAO,KAAK,CAAC;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,qBAAqB,SAAwC;AAC3D,SAAK,qBAAqB;AAAA,EAC5B;AAAA,EAEA,yBAA+B;AAC7B,SAAK,qBAAqB;AAAA,EAC5B;AAAA,EAEA,kBAAkB,SAAqC;AACrD,SAAK,kBAAkB;AAAA,EACzB;AAAA,EAEA,sBAA4B;AAC1B,SAAK,kBAAkB;AAAA,EACzB;AAAA,EAEA,MAAM,QAAuB;AAC3B,QAAI,KAAK,SAAS;AAChB;AAAA,IACF;AACA,SAAK,UAAU;AAEf,SAAK,uBAAuB,SAAS;AACrC,SAAK,qBAAqB;AAC1B,SAAK,kBAAkB;AAEvB,UAAM,KAAK,QAAQ,MAAM;AAAA,EAC3B;AAAA,EAEQ,sBAAsB,cAA6C;AACzE,QAAI;AACJ,UAAM,SAAS,gCAAgC;AAAA,MAC7C,aAAa,QAAQ;AAAA,IACvB;AACA,QAAI,OAAO,SAAS;AAClB,yBAAmB,OAAO,KAAK,aAAa;AAAA,IAC9C;AAEA,UAAM,YAAY,CAAC,GAAG,KAAK,sBAAsB;AACjD,eAAW,YAAY,WAAW;AAChC,UACE,SAAS,QAAQ,QAAQ,QACzB,SAAS,OAAO,SAAS,kBACzB;AACA;AAAA,MACF;AAEA,UAAI;AACF,iBAAS,SAAS,YAAY;AAAA,MAChC,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,2BACN,QAC0E;AAC1E,UAAM,UAAU,KAAK;AACrB,QAAI,WAAW,MAAM;AACnB;AAAA,IACF;AACA,WAAO,QAAQ,MAAM;AAAA,EACvB;AAAA,EAEQ,wBACN,QACwC;AACxC,UAAM,UAAU,KAAK;AACrB,QAAI,WAAW,MAAM;AACnB,aAAO,EAAE,WAAW,MAAM,SAAS,CAAC,EAAE;AAAA,IACxC;AACA,WAAO,QAAQ,MAAM;AAAA,EACvB;AAAA,EAEQ,mBAAyB;AAC/B,QAAI,KAAK,SAAS;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,iBAAuB;AAC7B,QAAI,KAAK,cAAc,MAAM;AAC3B,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACzhBO,IAAM,mBAAmB;AAAA,EAC9B,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,qBAAqB;AAAA,EACrB,wBAAwB;AAAA,EACxB,sBAAsB;AAAA,EACtB,kBAAkB;AAAA,EAClB,sBAAsB;AAAA,EACtB,wBAAwB;AAAA,EACxB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,OAAO;AAAA,EACP,cAAc;AAChB;AAuKO,SAAS,mCACd,KACsC;AACtC,QAAM,SAAS,iCAAiC,UAAU,GAAG;AAC7D,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO;AAAA,EACT;AAEA,QAAM,eAA2C,OAAO;AAExD,UAAQ,aAAa,MAAM;AAAA,IACzB;AACE,aAAO;AAAA,QACL,MAAM,iBAAiB;AAAA,QACvB,WAAW,aAAa;AAAA,QACxB,YAAY,aAAa;AAAA,QACzB,MAAM,aAAa;AAAA,MACrB;AAAA,IAEF;AACE,aAAO;AAAA,QACL,MAAM,iBAAiB;AAAA,QACvB,WAAW,aAAa;AAAA,QACxB,YAAY,aAAa;AAAA,QACzB,MAAM,aAAa;AAAA,MACrB;AAAA,IAEF;AACE,aAAO;AAAA,QACL,MAAM,iBAAiB;AAAA,QACvB,WAAW,aAAa;AAAA,QACxB,UAAU;AAAA,QACV,SAAS,2BAA2B,aAAa,OAAO;AAAA,QACxD,SAAS,QAAQ,aAAa,OAAO;AAAA,MACvC;AAAA,IAEF,wDAAmD;AACjD,YAAM,SAA6B,aAAa;AAChD,YAAM,OAAO,QAAQ,QAAQ,QAAQ,UAAU,QAAQ,WAAW;AAClE,aAAO;AAAA,QACL,MAAM,iBAAiB;AAAA,QACvB,WAAW,aAAa;AAAA,QACxB,UAAU,aAAa;AAAA,QACvB,SAAS;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,IAEA;AACE,aAAO;AAAA,QACL,MAAM,iBAAiB;AAAA,QACvB,OAAO,aAAa;AAAA,MACtB;AAAA,IAEF,sEAA0D;AACxD,YAAM,KAAiB,aAAa;AACpC,aAAO;AAAA,QACL,MAAM,iBAAiB;AAAA,QACvB,aAAa,GAAG;AAAA,QAChB,cAAc,GAAG;AAAA,QACjB,iBAAiB,GAAG;AAAA,QACpB,qBAAqB,GAAG;AAAA,QACxB,gBAAgB,GAAG;AAAA,MACrB;AAAA,IACF;AAAA,IAEA,4CAA6C;AAC3C,YAAM,MAAM,aAAa;AACzB,YAAM,WAA2B,CAAC;AAElC,iBAAW,SAAS,IAAI,SAAS;AAC/B,YAAI,MAAM,SAAS,iBAAiB,SAAS;AAC3C,mBAAS,KAAK;AAAA,YACZ,MAAM,iBAAiB;AAAA,YACvB,UAAU,MAAM;AAAA,YAChB,WAAW,MAAM;AAAA,YACjB,WAAW,MAAM;AAAA,UACnB,CAAC;AAAA,QACH;AAAA,MACF;AAEA,eAAS,KAAK;AAAA,QACZ,MAAM,iBAAiB;AAAA,QACvB,WAAW,IAAI;AAAA,QACf,MAAM,IAAI;AAAA,QACV,SAAS,IAAI;AAAA,QACb,UAAU,aAAa;AAAA,MACzB,CAAC;AAED,aAAO;AAAA,IACT;AAAA,IAEA;AACE,aAAO;AAAA,QACL,MAAM,iBAAiB;AAAA,QACvB,SAAS,aAAa;AAAA,QACtB,WAAW,aAAa;AAAA,QACxB,WAAW,aAAa;AAAA,MAC1B;AAAA,IAEF;AACE,aAAO;AAAA,QACL,MAAM,iBAAiB;AAAA,QACvB,WAAW,aAAa;AAAA,QACxB,YAAY,aAAa;AAAA,QACzB,gBAAgB,aAAa;AAAA,MAC/B;AAAA,IAEF;AACE,aAAO;AAAA,QACL,MAAM,iBAAiB;AAAA,QACvB,UAAU,aAAa;AAAA,MACzB;AAAA,IAEF;AACE,aAAO;AAAA,QACL,MAAM,iBAAiB;AAAA,QACvB,OAAO,aAAa;AAAA,MACtB;AAAA,IAEF;AACE,aAAO;AAAA,QACL,MAAM,iBAAiB;AAAA,QACvB,SAAS,aAAa;AAAA,QACtB,SAAS,aAAa;AAAA,MACxB;AAAA,IAEF;AACE,aAAO;AAAA,QACL,MAAM,iBAAiB;AAAA,QACvB,OAAO,aAAa;AAAA,MACtB;AAAA,IAEF;AACE,aAAO;AAAA,QACL,MAAM,iBAAiB;AAAA,QACvB,UAAU,aAAa;AAAA,MACzB;AAAA,IAEF;AACE,aAAO;AAAA,QACL,MAAM,iBAAiB;AAAA,QACvB,aAAa,aAAa;AAAA,MAC5B;AAAA,IAEF;AACE,aAAO;AAAA,QACL,MAAM,iBAAiB;AAAA,QACvB,WAAW,aAAa;AAAA,MAC1B;AAAA,IAEF;AACE,aAAO;AAAA,QACL,MAAM,iBAAiB;AAAA,QACvB,iBAAiB,aAAa;AAAA,MAChC;AAAA,IAEF;AACE,aAAO;AAAA,QACL,MAAM,iBAAiB;AAAA,QACvB,iBAAiB,aAAa;AAAA,QAC9B,UAAU,aAAa;AAAA,MACzB;AAAA,IAEF;AACE,aAAO;AAAA,QACL,MAAM,iBAAiB;AAAA,QACvB,YAAY,aAAa;AAAA,QACzB,SAAS,aAAa;AAAA,QACtB,SAAS,aAAa;AAAA,QACtB,OAAO,aAAa;AAAA,MACtB;AAAA,IAEF;AACE,aAAO;AAAA,QACL,MAAM,iBAAiB;AAAA,QACvB,YAAY,aAAa;AAAA,QACzB,SAAS,aAAa;AAAA,QACtB,SAAS,aAAa;AAAA,MACxB;AAAA,IAEF;AACE,aAAO;AAAA,EACX;AACF;AAMO,IAAM,qBAAN,MAAyB;AAAA,EACtB,iBAAiB;AAAA,EAEjB,iBAA0C;AAAA,EAE1C,cAAc,oBAAI,IAAoB;AAAA,EAEtC,YAAY,WAA2B;AAC7C,WAAO,KAAK,YAAY,IAAI,SAAS,KAAK;AAAA,EAC5C;AAAA,EAEA,eAAe,SAGb;AACA,UAAM,aAA6B,CAAC;AAEpC,QAAI,QAAQ,SAAS,iBAAiB,SAAS;AAC7C,WAAK,YAAY,IAAI,QAAQ,WAAW,QAAQ,QAAQ;AAAA,IAC1D;AAGA,QAAI,QAAQ,SAAS,iBAAiB,YAAY;AAChD,gBAAU,EAAE,GAAG,SAAS,UAAU,KAAK,YAAY,QAAQ,SAAS,EAAE;AAAA,IACxE;AAEA,QAAI,QAAQ,SAAS,iBAAiB,kBAAkB;AACtD,WAAK,iBAAiB;AAAA,IACxB;AAEA,QAAI,QAAQ,SAAS,iBAAiB,qBAAqB;AACzD,UAAI,QAAQ,6BAAkC;AAC5C,aAAK,iBAAiB;AAAA,MACxB,WAAW,KAAK,gBAAgB;AAC9B,mBAAW,KAAK;AAAA,UACd,MAAM,iBAAiB;AAAA,UACvB,YAAY,KAAK;AAAA,QACnB,CAAC;AACD,aAAK,iBAAiB;AAAA,MACxB;AAAA,IACF;AAEA,WAAO,EAAE,SAAS,WAAW;AAAA,EAC/B;AACF;AAEA,SAAS,2BACP,SACsB;AACtB,MAAI,WAAW,MAAM;AACnB,WAAO;AAAA,EACT;AACA,MAAI,OAAO,YAAY,UAAU;AAC/B,WAAO;AAAA,EACT;AACA,MAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,WAAO;AAAA,EACT;AACA,SAAO,OAAO,OAAO;AACvB;;;AC5aO,SAAS,gBACd,QACA,SACY;AACZ,MAAI,CAAC,OAAQ,QAAO,MAAM;AAAA,EAAC;AAC3B,MAAI,OAAO,SAAS;AAClB,YAAQ;AACR,WAAO,MAAM;AAAA,IAAC;AAAA,EAChB,OAAO;AACL,UAAM,WAAW,MAAM,QAAQ;AAC/B,WAAO,iBAAiB,SAAS,UAAU,EAAE,MAAM,KAAK,CAAC;AACzD,WAAO,MAAM,OAAO,oBAAoB,SAAS,QAAQ;AAAA,EAC3D;AACF;AAEO,SAAS,yBACd,cACmC;AACnC,QAAM,SAAS,0BAA0B,UAAU,YAAY;AAC/D,SAAO,OAAO,UAAU,OAAO,KAAK,OAAO,eAAe;AAC5D;AAEO,IAAM,gBAAN,MAAoB;AAAA,EACR,SAAyB,CAAC;AAAA,EACnC,kBAAuC;AAAA,EACvC,QAAQ;AAAA,EACC,gBAAgB,IAAI,mBAAmB;AAAA,EAE/C,sBAAsB,CAC7B,iBACS;AACT,UAAM,QAAQ,yBAAyB,YAAY;AACnD,QAAI,CAAC,MAAO;AAEZ,UAAM,YAAY,mCAAmC,KAAK;AAC1D,QAAI,cAAc,KAAM;AAExB,UAAM,WAAW,MAAM,QAAQ,SAAS,IAAI,YAAY,CAAC,SAAS;AAElE,eAAW,OAAO,UAAU;AAC1B,YAAM,EAAE,SAAS,WAAW,IAAI,KAAK,cAAc,eAAe,GAAG;AACrE,WAAK,SAAS,OAAO;AAErB,iBAAW,SAAS,YAAY;AAC9B,aAAK,SAAS,KAAK;AACnB,YAAI,MAAM,SAAS,iBAAiB,cAAc;AAChD,eAAK,YAAY;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,aAAmB;AACjB,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,OAAO,WAA0D;AAC/D,WAAO,MAAM;AACX,aAAO,KAAK,OAAO,SAAS,GAAG;AAC7B,cAAM,MAAM,KAAK,OAAO,MAAM;AAC9B,cAAM;AAEN,YAAI,IAAI,SAAS,iBAAiB,cAAc;AAC9C;AAAA,QACF;AAAA,MACF;AAEA,UAAI,KAAK,SAAS,KAAK,OAAO,WAAW,GAAG;AAC1C;AAAA,MACF;AAEA,YAAM,IAAI,QAAc,CAACC,aAAY;AACnC,aAAK,kBAAkBA;AAAA,MACzB,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEQ,SAAS,KAAyB;AACxC,SAAK,OAAO,KAAK,GAAG;AACpB,QAAI,KAAK,iBAAiB;AACxB,YAAMA,WAAU,KAAK;AACrB,WAAK,kBAAkB;AACvB,MAAAA,SAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEQ,cAAoB;AAC1B,SAAK,QAAQ;AACb,QAAI,KAAK,iBAAiB;AACxB,YAAMA,WAAU,KAAK;AACrB,WAAK,kBAAkB;AACvB,MAAAA,SAAQ;AAAA,IACV;AAAA,EACF;AACF;AASA,eAAsB,gBACpB,SAC+B;AAC/B,MAAI,QAAQ,WAAW;AACrB,WAAO,QAAQ;AAAA,EACjB;AAEA,QAAM,mBAA4C;AAAA,IAChD,UAAU,QAAQ;AAAA,IAClB,UAAU,QAAQ;AAAA,IAClB,KAAK,QAAQ;AAAA,IACb,KAAK,QAAQ;AAAA,EACf;AACA,QAAM,mBAAmB,IAAI,iBAAiB,gBAAgB;AAC9D,QAAM,iBAAiB,QAAQ;AAC/B,SAAO;AACT;AAOO,SAAS,oBACd,QACA,SACM;AACN,MAAI,QAAQ,mBAAmB;AAC7B,WAAO,qBAAqB,QAAQ,iBAAiB;AAAA,EACvD;AACA,MAAI,QAAQ,gBAAgB;AAC1B,WAAO,kBAAkB,QAAQ,cAAc;AAAA,EACjD;AACF;AAKA,eAAsB,uBACpB,SAIC;AACD,QAAM,YAAY,MAAM,gBAAgB,OAAO;AAC/C,QAAM,SAAS,IAAI,YAAY,EAAE,UAAU,CAAC;AAC5C,sBAAoB,QAAQ,OAAO;AACnC,SAAO,EAAE,WAAW,OAAO;AAC7B;AAMA,eAAsB,aACpB,UACe;AACf,MAAI,CAAC,UAAU;AACb;AAAA,EACF;AAEA,MAAI;AACF,UAAM,SAAS,MAAM;AAAA,EACvB,QAAQ;AAAA,EAER;AACF;AAmBO,SAAS,gBACd,SACgC;AAChC,SAAO;AAAA,IACL,WAAW,QAAQ,aAAa;AAAA,IAChC,KAAK,QAAQ,OAAO;AAAA,IACpB,GAAI,QAAQ,YAAY,UAAa,EAAE,SAAS,QAAQ,QAAQ;AAAA,IAChE,GAAI,QAAQ,kBAAkB,UAAa;AAAA,MACzC,eAAe,QAAQ;AAAA,IACzB;AAAA,IACA,GAAI,QAAQ,oBAAoB,UAAa;AAAA,MAC3C,iBAAiB,QAAQ;AAAA,IAC3B;AAAA,IACA,GAAI,QAAQ,oBAAoB,UAAa;AAAA,MAC3C,iBAAiB,QAAQ;AAAA,IAC3B;AAAA,IACA,GAAI,QAAQ,oBAAoB,UAAa;AAAA,MAC3C,iBAAiB,QAAQ;AAAA,IAC3B;AAAA,IACA,GAAI,QAAQ,4BAA4B,UAAa;AAAA,MACnD,yBAAyB,QAAQ;AAAA,IACnC;AAAA,IACA,GAAI,QAAQ,eAAe,UAAa;AAAA,MACtC,YAAY,QAAQ;AAAA,IACtB;AAAA,IACA,GAAI,QAAQ,mBAAmB,UAAa;AAAA,MAC1C,gBAAgB,QAAQ;AAAA,IAC1B;AAAA,IACA,GAAI,QAAQ,oBAAoB,UAAa;AAAA,MAC3C,iBAAiB,QAAQ;AAAA,IAC3B;AAAA,IACA,MAAM,CAAC,GAAI,QAAQ,QAAQ,CAAC,GAAI,OAAO;AAAA,EACzC;AACF;;;AC5PA,yBAAqB;AACrB,uBAAgE;AAEhE,IAAAC,cAA0B;AAC1B,4BAA8C;AAE9C,IAAAC,cAAkB;AAwCX,SAAS,KACd,MACA,aACA,sBAKA,SAGW;AACX,MAAI,OAAO,yBAAyB,YAAY;AAC9C,UAAM,gBAAgB;AACtB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,SAAS,CAAC,UAAU,cAAc,KAAK;AAAA,IACzC;AAAA,EACF;AAEA,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,qCAAqC,IAAI,GAAG;AAAA,EAC9D;AAEA,QAAM,oBAAoB,cAAE,OAAO,oBAAoB;AAEvD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,SAAS,CAAC,UAAU,QAAQ,kBAAkB,MAAM,KAAK,CAAC;AAAA,EAC5D;AACF;AAEA,SAAS,eAAe,QAAsD;AAC5E,SAAO,kBAAkB;AAC3B;AAEA,SAAS,iBAAiB,QAAyC;AACjE,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO;AAAA,MACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,OAAO,CAAC;AAAA,IAC1C;AAAA,EACF;AAEA,SAAO;AACT;AAEA,eAAe,aAAa,KAAwC;AAClE,QAAM,SAAmB,CAAC;AAC1B,mBAAiB,SAAS,KAAK;AAC7B,WAAO,KAAK,OAAO,SAAS,KAAK,IAAI,QAAQ,OAAO,KAAK,KAAK,CAAC;AAAA,EACjE;AAEA,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,SAAO,KAAK,MAAM,OAAO,OAAO,MAAM,EAAE,SAAS,MAAM,CAAC;AAC1D;AAEA,SAAS,eACP,KACA,YACA,SACM;AACN,MAAI,IAAI,aAAa;AACnB;AAAA,EACF;AAEA,MAAI,UAAU,YAAY,EAAE,gBAAgB,mBAAmB,CAAC;AAChE,MAAI;AAAA,IACF,KAAK,UAAU;AAAA,MACb,SAAS;AAAA,MACT,OAAO,EAAE,mCAAuC,QAAQ;AAAA,MACxD,IAAI;AAAA,IACN,CAAC;AAAA,EACH;AACF;AAEO,IAAM,eAAN,MAAmB;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EAED,cAAkC;AAAA,EAClC,OAAsB;AAAA,EAE9B,YAAY,SAA8B;AACxC,SAAK,OAAO,QAAQ;AACpB,SAAK,UAAU,QAAQ,WAAW;AAClC,SAAK,QAAQ,QAAQ;AAAA,EACvB;AAAA,EAEA,IAAI,SAAiC;AACnC,QAAI,CAAC,KAAK,MAAM;AACd,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,MACL;AAAA,MACA,MAAM,KAAK;AAAA,MACX,KAAK,KAAK;AAAA,MACV,SAAS,CAAC;AAAA,IACZ;AAAA,EACF;AAAA,EAEA,MAAM,QAAkC;AACtC,QAAI,KAAK,QAAQ;AACf,aAAO,KAAK;AAAA,IACd;AAEA,SAAK,cAAc,iBAAAC,QAAK,aAAa,CAAC,KAAK,QAAQ;AACjD,WAAK,KAAK,cAAc,KAAK,GAAG;AAAA,IAClC,CAAC;AACD,SAAK,YAAY,OAAO,GAAG,WAAW;AACtC,cAAM,yBAAK,KAAK,aAAa,WAAW;AAExC,UAAM,UAAU,KAAK,YAAY,QAAQ;AACzC,QAAI,CAAC,WAAW,OAAO,YAAY,UAAU;AAC3C,YAAM,IAAI,MAAM,4CAA4C;AAAA,IAC9D;AAEA,SAAK,OAAO,oBAAoB,QAAQ,IAAI;AAC5C,UAAM,SAAS,KAAK;AACpB,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,gCAAgC;AAAA,IAClD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,QAAuB;AAC3B,UAAM,SAAS,KAAK;AACpB,SAAK,cAAc;AACnB,SAAK,OAAO;AAEZ,QAAI,CAAC,QAAQ;AACX;AAAA,IACF;AAEA,WAAO,sBAAsB;AAC7B,WAAO,MAAM;AACb,cAAM,yBAAK,QAAQ,OAAO;AAAA,EAC5B;AAAA,EAEQ,kBAA6B;AACnC,UAAM,SAAS,IAAI,sBAAU;AAAA,MAC3B,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,IAChB,CAAC;AAED,eAAW,WAAW,KAAK,OAAO;AAChC,aAAO;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,UACE,aAAa,QAAQ;AAAA,UACrB,GAAI,QAAQ,eAAe;AAAA,YACzB,aAAa,QAAQ;AAAA,UACvB;AAAA,QACF;AAAA,QACA,OAAO,UACL,iBAAiB,MAAM,QAAQ,QAAQ,KAAK,CAAC;AAAA,MACjD;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,cACZ,KACA,KACe;AACf,QAAI,IAAI,QAAQ,QAAQ;AACtB,UAAI,UAAU,GAAG,EAAE,IAAI;AACvB;AAAA,IACF;AAEA,QAAI,IAAI,WAAW,QAAQ;AACzB,UAAI,UAAU,GAAG,EAAE,IAAI;AACvB;AAAA,IACF;AAEA,UAAM,SAAS,KAAK,gBAAgB;AACpC,UAAM,YAAY,IAAI,oDAA8B;AAAA,MAClD,oBAAoB;AAAA,IACtB,CAAC;AAED,QAAI,GAAG,SAAS,MAAM;AACpB,WAAK,UAAU,MAAM;AACrB,WAAK,OAAO,MAAM;AAAA,IACpB,CAAC;AAED,QAAI;AACF,YAAM,OAAO,MAAM,aAAa,GAAG;AACnC,YAAM,OAAO,QAAQ,SAAS;AAC9B,YAAM,UAAU,cAAc,KAAK,KAAK,IAAI;AAAA,IAC9C,SAAS,OAAO;AACd;AAAA,QACE;AAAA,QACA;AAAA,QACA,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAC3C;AACA,YAAM,UAAU,MAAM;AACtB,YAAM,OAAO,MAAM;AAAA,IACrB;AAAA,EACF;AACF;AAEO,SAAS,mBAAmB,SAA4C;AAC7E,SAAO,IAAI,aAAa,OAAO;AACjC;AAEA,eAAsB,mBACpB,SAC2E;AAC3E,MAAI,CAAC,SAAS;AACZ,WAAO,EAAE,SAAS,YAAY;AAAA,IAAC,EAAE;AAAA,EACnC;AAEA,QAAM,iBAAiC,CAAC;AACxC,QAAM,aAAgC,CAAC;AAEvC,MAAI;AACF,eAAW,UAAU,SAAS;AAC5B,UAAI,eAAe,MAAM,GAAG;AAC1B,mBAAW,KAAK,MAAM,OAAO,MAAM,CAAC;AACpC,uBAAe,KAAK,MAAM;AAAA,MAC5B,OAAO;AACL,mBAAW,KAAK,MAAM;AAAA,MACxB;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,UAAM,QAAQ,IAAI,eAAe,IAAI,CAAC,WAAW,OAAO,MAAM,CAAC,CAAC;AAChE,UAAM;AAAA,EACR;AAEA,SAAO;AAAA,IACL;AAAA,IACA,SAAS,YAAY;AACnB,YAAM,QAAQ,IAAI,eAAe,IAAI,CAAC,WAAW,OAAO,MAAM,CAAC,CAAC;AAAA,IAClE;AAAA,EACF;AACF;;;ACjQA,IAAM,iBAAN,MAA2C;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,YACE,WACA,cACA,eACA,gBACA,aACA,SACA;AACA,SAAK,aAAa;AAClB,SAAK,gBAAgB;AACrB,SAAK,iBAAiB;AACtB,SAAK,kBAAkB;AACvB,SAAK,eAAe;AACpB,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,IAAI,YAA2B;AAC7B,WAAO,KAAK,cAAc;AAAA,EAC5B;AAAA,EAEA,IAAI,aAA6C;AAC/C,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA,EAEA,IAAI,cAAgD;AAClD,WAAO,KAAK,gBAAgB;AAAA,EAC9B;AAAA,EAEA,MAAM,YAA2B;AAC/B,WAAO,KAAK,aAAa;AAAA,EAC3B;AAAA,EAEA,QAAc;AACZ,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,QAAQ,MAAqE;AAC3E,WAAO,KAAK,WAAW,KAAK,GAAG,IAAI;AAAA,EACrC;AAAA,EAEA,OACE,OAC6C;AAC7C,WAAO,KAAK,WAAW,OAAO,KAAK;AAAA,EACrC;AAAA,EAEA,MAAM,GAAyD;AAC7D,WAAO,KAAK,WAAW,MAAM,CAAC;AAAA,EAChC;AAAA,EAEA,CAAC,OAAO,aAAa,IAAoB;AACvC,WAAO;AAAA,EACT;AACF;AAMO,SAAS,MAAM,SAAmC;AACvD,MAAI,YAAyC;AAC7C,MAAI,SAA6B;AACjC,MAAI,YAA2B;AAC/B,MAAI,aAA6C;AACjD,MAAI,UAAU;AACd,MAAI,wBAAiE;AACrE,MAAI,gBAAsC;AAC1C,MAAI,qBAAiC,MAAM;AAAA,EAAC;AAC5C,MAAI,uBAAqD;AAEzD,QAAM,SAAS,IAAI,cAAc;AAEjC,QAAM,uBAAuB,YAA2B;AACtD,UAAM,SAAS,UAAU;AACzB,UAAM,aAAa;AACnB,aAAS;AACT,gBAAY;AACZ,2BAAuB;AACvB,UAAM,QAAQ,IAAI,CAAC,aAAa,MAAM,GAAG,aAAa,CAAC,CAAC;AAAA,EAC1D;AAEA,QAAM,oBAAoB,MAAwC;AAChE,QAAI,YAAY;AACd,aAAO,QAAQ,QAAQ,UAAU;AAAA,IACnC;AACA,QAAI,uBAAuB;AACzB,aAAO;AAAA,IACT;AAEA,6BAAyB,YAAY;AACnC,UAAI;AACF,YAAI,SAAS;AACX,gBAAM,IAAI,MAAM,qCAAqC;AAAA,QACvD;AAEA,cAAM,mBAAmB,MAAM,uBAAuB,OAAO;AAC7D,oBAAY,iBAAiB;AAC7B,iBAAS,iBAAiB;AAC1B,eAAO,eAAe,OAAO,mBAAmB;AAEhD,YAAI,SAAS;AACX,gBAAM,IAAI,MAAM,qCAAqC;AAAA,QACvD;AAEA,cAAM,gBAAgB,MAAM,mBAAmB,QAAQ,UAAU;AACjE,+BAAuB,cAAc;AAErC,cAAM,SAAS,MAAM,OAAO;AAAA,UAC1B,gBAAgB;AAAA,YACd,GAAG;AAAA,YACH,YAAY,cAAc;AAAA,UAC5B,CAAC;AAAA,QACH;AACA,oBAAY,OAAO;AACnB,qBAAa;AACb,eAAO;AAAA,MACT,SAAS,OAAO;AACd,cAAM,qBAAqB;AAC3B,cAAM;AAAA,MACR;AAAA,IACF,GAAG;AAEH,WAAO;AAAA,EACT;AAEA,QAAM,mBAAmB,MAAqB;AAC5C,QAAI,eAAe;AACjB,aAAO;AAAA,IACT;AAEA,qBAAiB,YAAY;AAC3B,YAAM,kBAAkB;AACxB,UAAI,WAAW,WAAW,MAAM;AAC9B;AAAA,MACF;AAEA,YAAM,OAAO,eAAe,EAAE,MAAM,QAAQ,OAAO,CAAC;AAAA,IACtD,GAAG;AAEH,WAAO;AAAA,EACT;AAEA,kBAAgB,mBAId;AACA,QAAI,QAAS;AAEb,UAAM,iBAAiB;AACvB,QAAI,QAAS;AAEb,qBAAiB,OAAO,OAAO,SAAS,GAAG;AACzC,UAAI,QAAS;AACb,YAAM;AAAA,IACR;AAAA,EACF;AAEA,QAAM,YAAY,iBAAiB;AAEnC,kBAAgB,mBAId;AACA,QAAI;AACF,aAAO;AAAA,IACT,UAAE;AACA,yBAAmB;AACnB,YAAM,qBAAqB;AAAA,IAC7B;AAAA,EACF;AAEA,QAAM,aAAa,IAAI;AAAA,IACrB,iBAAiB;AAAA,IACjB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM,kBAAkB;AAAA,IACxB,YAAY;AACV,UAAI,UAAU,CAAC,SAAS;AACtB,cAAM,OAAO,iBAAiB;AAAA,MAChC;AAAA,IACF;AAAA,IACA,MAAM;AACJ,gBAAU;AACV,aAAO,WAAW;AAClB,yBAAmB;AACnB,WAAK,qBAAqB;AAAA,IAC5B;AAAA,EACF;AAEA,uBAAqB;AAAA,IAAgB,QAAQ;AAAA,IAAa,MACxD,WAAW,MAAM;AAAA,EACnB;AAEA,SAAO;AACT;;;ACrIA,SAAS,cAAc,QAA4B;AACjD,MAAI,OAAO,kBAAkB,OAAO;AAClC,WAAO,OAAO;AAAA,EAChB;AAEA,SAAO,IAAI;AAAA,IACT,OAAO,OAAO,WAAW,WAAW,OAAO,SAAS;AAAA,EACtD;AACF;AAEA,SAAS,eAAe,QAAuC;AAC7D,MAAI,QAAQ,SAAS;AACnB,UAAM,cAAc,MAAM;AAAA,EAC5B;AACF;AAEA,SAAS,gBAAgB,MAAiC;AACxD,MAAI;AACF,UAAM,SAAkB,KAAK,MAAM,IAAI;AACvC,UAAM,SAAS,iBAAiB,UAAU,MAAM;AAChD,WAAO,OAAO,UAAU,OAAO,OAAO;AAAA,EACxC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,qBAAqB,SAA+B;AAC3D,MAAI,QAAQ,SAAS,iBAAiB,eAAe;AACnD,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,SAAS,wBAAwB,WAAW;AACtD,WAAO;AAAA,EACT;AAEA,SAAO,QAAQ,QACZ,OAAO,CAAC,UAAU,MAAM,SAAS,MAAM,EACvC,IAAI,CAAC,UAAU,MAAM,IAAI,EACzB,KAAK,EAAE;AACZ;AAGO,IAAM,eAAN,MAAmB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,sBAA2C;AAAA,EAC3C,oBAAuD,CAAC;AAAA;AAAA,EAGhE,YACE,QACA,WACA,YACA;AACA,SAAK,UAAU;AACf,SAAK,aAAa;AAClB,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAI,YAAoB;AACtB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,aAA0D;AAC5D,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,sBAAsB,SAA2B;AAC/C,SAAK,sBAAsB;AAAA,EAC7B;AAAA;AAAA,EAGA,WAAW,SAA2C;AACpD,SAAK,kBAAkB,KAAK,OAAO;AAAA,EACrC;AAAA;AAAA,EAGA,OAAO,OACL,MACA,SAC+C;AAC/C,SAAK,iBAAiB;AACtB,mBAAe,SAAS,WAAW;AAEnC,UAAM,SAAS,IAAI,cAAc;AACjC,UAAM,cAAc,KAAK,QAAQ,eAAe,OAAO,mBAAmB;AAC1E,QAAI,eAA2B,MAAM;AAAA,IAAC;AACtC,UAAM,eAAe,IAAI,QAAc,CAACC,aAAY;AAClD,qBAAeA;AAAA,IACjB,CAAC;AACD,UAAM,qBAAqB,gBAAgB,SAAS,aAAa,MAAM;AACrE,aAAO,WAAW;AAClB,mBAAa;AACb,WAAK,KAAK,QAAQ,iBAAiB,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IACrD,CAAC;AAED,QAAI;AACF,YAAM,QAAQ,KAAK;AAAA,QACjB,KAAK,QAAQ,eAAe;AAAA,UAC1B;AAAA,UACA,QAAQ,SAAS;AAAA,UACjB,OAAO,SAAS;AAAA,UAChB,cAAc,SAAS;AAAA,QACzB,CAAC;AAAA,QACD;AAAA,MACF,CAAC;AACD,qBAAe,SAAS,WAAW;AAEnC,uBAAiB,OAAO,OAAO,SAAS,GAAG;AACzC,uBAAe,SAAS,WAAW;AACnC,cAAM;AAAA,MACR;AACA,qBAAe,SAAS,WAAW;AAAA,IACrC,UAAE;AACA,yBAAmB;AACnB,kBAAY;AAAA,IACd;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,KAAK,MAAc,SAAgD;AACvE,SAAK,iBAAiB;AAEtB,UAAM,WAA2B,CAAC;AAClC,QAAI,WAAW;AACf,QAAI,iBAA0C;AAC9C,QAAI,aAAgC;AACpC,QAAI,mBAAsC;AAC1C,QAAI,qBAAqB;AACzB,QAAI,YAAY;AAChB,UAAM,YAAY,KAAK,IAAI;AAE3B,qBAAiB,OAAO,KAAK,OAAO,MAAM,OAAO,GAAG;AAClD,eAAS,KAAK,GAAG;AAEjB,UAAI,IAAI,SAAS,iBAAiB,oBAAoB;AACpD,oBAAY,IAAI;AAAA,MAClB;AAEA,YAAM,gBAAgB,qBAAqB,GAAG;AAC9C,UAAI,eAAe;AACjB,6BAAqB;AACrB,YAAI,SAAS,gBAAgB,SAAS,WAAW,GAAG;AAClD,qBAAW;AAAA,QACb;AAAA,MACF;AAEA,UAAI,IAAI,SAAS,iBAAiB,kBAAkB;AAClD,yBAAiB;AAAA,MACnB;AAEA,UAAI,IAAI,SAAS,iBAAiB,SAAS,eAAe,MAAM;AAC9D,qBAAa;AAAA,MACf;AAEA,UAAI,SAAS,gBAAgB,qBAAqB,MAAM;AACtD,cAAM,cAAc,sBAAsB;AAC1C,YAAI,aAAa;AACf,6BAAmB,gBAAgB,WAAW;AAAA,QAChD;AAAA,MACF;AAEA,UAAI,IAAI,SAAS,iBAAiB,cAAc;AAC9C;AACA,YAAI,IAAI,YAAY;AAElB,2BAAiB,IAAI;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,WAAW,KAAK;AAAA,MAChB,MAAM;AAAA,MACN;AAAA,MACA,YAAY;AAAA,MACZ,YAAY,KAAK,IAAI,IAAI;AAAA,MACzB;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA,SAAS,eAAe;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,MAAM,YAA2B;AAC/B,SAAK,iBAAiB;AACtB,UAAM,KAAK,QAAQ,iBAAiB;AAAA,EACtC;AAAA,EAEA,MAAM,QAAuB;AAC3B,QAAI,KAAK,SAAS;AAChB;AAAA,IACF;AACA,SAAK,UAAU;AACf,SAAK,sBAAsB;AAC3B,SAAK,sBAAsB;AAE3B,QAAI;AACF,YAAM,KAAK,QAAQ,MAAM;AAAA,IAC3B,UAAE;AACA,YAAM,WAAW,KAAK,kBAAkB,OAAO,CAAC;AAChD,YAAM,QAAQ,IAAI,SAAS,IAAI,CAAC,YAAY,QAAQ,CAAC,CAAC;AAAA,IACxD;AAAA,EACF;AAAA,EAEA,MAAM,eACJ,QACsC;AACtC,SAAK,iBAAiB;AACtB,WAAO,KAAK,QAAQ,sBAAsB,MAAM;AAAA,EAClD;AAAA,EAEA,MAAM,cACJ,SAGI,CAAC,GACiC;AACtC,SAAK,iBAAiB;AACtB,WAAO,KAAK,QAAQ,sBAAsB;AAAA,MACxC;AAAA,MACA,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,aACJ,QAC6B;AAC7B,SAAK,iBAAiB;AACtB,WAAO,KAAK,QAAQ,aAAa,MAAM;AAAA,EACzC;AAAA,EAEA,MAAM,gBACJ,QACgC;AAChC,SAAK,iBAAiB;AACtB,WAAO,KAAK,QAAQ,gBAAgB,MAAM;AAAA,EAC5C;AAAA,EAEA,MAAM,gBACJ,QACgC;AAChC,SAAK,iBAAiB;AACtB,WAAO,KAAK,QAAQ,gBAAgB,MAAM;AAAA,EAC5C;AAAA,EAEA,MAAM,iBAAgD;AACpD,SAAK,iBAAiB;AACtB,WAAO,KAAK,QAAQ,eAAe;AAAA,EACrC;AAAA,EAEA,MAAM,eAA4C;AAChD,SAAK,iBAAiB;AACtB,WAAO,KAAK,QAAQ,aAAa;AAAA,EACnC;AAAA,EAEA,MAAM,UACJ,SAAiC,CAAC,GACR;AAC1B,SAAK,iBAAiB;AACtB,WAAO,KAAK,QAAQ,UAAU,MAAM;AAAA,EACtC;AAAA,EAEA,MAAM,sBACJ,QACsC;AACtC,SAAK,iBAAiB;AACtB,WAAO,KAAK,QAAQ,sBAAsB,MAAM;AAAA,EAClD;AAAA,EAEA,MAAM,aAAwC;AAC5C,SAAK,iBAAiB;AACtB,WAAO,KAAK,QAAQ,WAAW;AAAA,EACjC;AAAA,EAEA,MAAM,cACJ,QAC8B;AAC9B,SAAK,iBAAiB;AACtB,WAAO,KAAK,QAAQ,cAAc,MAAM;AAAA,EAC1C;AAAA,EAEA,MAAM,cACJ,QAC8B;AAC9B,SAAK,iBAAiB;AACtB,WAAO,KAAK,QAAQ,cAAc,MAAM;AAAA,EAC1C;AAAA,EAEA,MAAM,eACJ,QAC+B;AAC/B,SAAK,iBAAiB;AACtB,WAAO,KAAK,QAAQ,eAAe,UAAU,CAAC,CAAC;AAAA,EACjD;AAAA,EAEA,MAAM,cAA0C;AAC9C,SAAK,iBAAiB;AACtB,WAAO,KAAK,QAAQ,YAAY;AAAA,EAClC;AAAA,EAEA,MAAM,kBAAkD;AACtD,SAAK,iBAAiB;AACtB,WAAO,KAAK,QAAQ,gBAAgB;AAAA,EACtC;AAAA,EAEA,MAAM,cACJ,QAC8B;AAC9B,SAAK,iBAAiB;AACtB,WAAO,KAAK,QAAQ,cAAc,MAAM;AAAA,EAC1C;AAAA,EAEA,eACE,UACA,QACY;AACZ,WAAO,KAAK,QAAQ,eAAe,UAAU,MAAM;AAAA,EACrD;AAAA,EAEQ,mBAAyB;AAC/B,QAAI,KAAK,SAAS;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAsB,cACpB,UAAgC,CAAC,GACV;AACvB,QAAM,EAAE,OAAO,IAAI,MAAM,uBAAuB,OAAO;AACvD,MAAI,yBAAyB,QAAQ,aAAa,UAC9C,MAAM;AAAA,EAAC,IACP,gBAAgB,QAAQ,aAAa,MAAM;AACzC,SAAK,aAAa,MAAM;AAAA,EAC1B,CAAC;AACL,MAAI;AAEJ,MAAI;AACF,oBAAgB,MAAM,mBAAmB,QAAQ,UAAU;AAC3D,UAAM,aAAa,gBAAgB;AAAA,MACjC,GAAG;AAAA,MACH,YAAY,cAAc;AAAA,IAC5B,CAAC;AACD,UAAM,aAAa,MAAM,OAAO,kBAAkB,UAAU;AAC5D,UAAM,UAAU,IAAI,aAAa,QAAQ,WAAW,WAAW,UAAU;AACzE,YAAQ,WAAW,cAAc,OAAO;AACxC,2BAAuB;AACvB,6BAAyB,MAAM;AAAA,IAAC;AAChC,YAAQ;AAAA,MACN,gBAAgB,QAAQ,aAAa,MAAM,KAAK,QAAQ,MAAM,CAAC;AAAA,IACjE;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,2BAAuB;AACvB,UAAM,eAAe,QAAQ;AAC7B,UAAM,aAAa,MAAM;AACzB,UAAM;AAAA,EACR;AACF;AAGA,eAAsB,cACpB,WACA,UAAgC,CAAC,GACV;AACvB,QAAM,EAAE,OAAO,IAAI,MAAM,uBAAuB,OAAO;AACvD,MAAI;AAEJ,MAAI;AACF,oBAAgB,MAAM,mBAAmB,QAAQ,UAAU;AAC3D,UAAM,aAAuC;AAAA,MAC3C;AAAA,MACA,YAAY,cAAc;AAAA,IAC5B;AACA,UAAM,aAAa,MAAM,OAAO,YAAY,UAAU;AACtD,UAAM,UAAU,IAAI,aAAa,QAAQ,WAAW,UAAU;AAC9D,YAAQ,WAAW,cAAc,OAAO;AACxC,YAAQ;AAAA,MACN,gBAAgB,QAAQ,aAAa,MAAM,KAAK,QAAQ,MAAM,CAAC;AAAA,IACjE;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,UAAM,eAAe,QAAQ;AAC7B,UAAM,aAAa,MAAM;AACzB,UAAM;AAAA,EACR;AACF;;;ACxeA,eAAsB,IACpB,MACA,UAAsB,CAAC,GACD;AACtB,QAAM,UAAU,MAAM,cAAc,OAAO;AAE3C,MAAI;AACF,WAAO,MAAM,QAAQ,KAAK,MAAM,OAAO;AAAA,EACzC,UAAE;AACA,UAAM,QAAQ,MAAM;AAAA,EACtB;AACF;;;ACpBA,SAAoB;AACpB,SAAoB;AACpB,WAAsB;AAWtB,IAAM,iBAAiB;AACvB,IAAM,oBAAoB;AAC1B,IAAM,kBAAkB;AACxB,IAAM,qBAAqB;AAC3B,IAAM,0BAA0B;AAChC,IAAM,0BAA0B;AAChC,IAAM,mCAAmC;AAGzC,IAAM,KAAK;AACX,IAAM,KAAK;AACX,IAAM,QAAQ;AACd,IAAM,MAAM;AAKZ,IAAM,mBAAmB;AAMzB,SAAS,eAAe,UAAiC;AACvD,MAAI;AACF,WAAU,gBAAa,QAAQ;AAAA,EACjC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGA,SAAS,gBAAgB,KAAsB;AAC7C,MAAI;AACF,WAAO,KAAK,MAAM,IAAI,SAAS,OAAO,CAAC;AAAA,EACzC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAOA,SAAS,mBAAmB,KAG1B;AACA,MAAI,oBAAoB;AACxB,MAAI,eAAe;AACnB,MAAI,wBAAwB;AAE5B,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,UAAM,KAAK,IAAI,CAAC;AAChB,QAAI,OAAO,IAAI;AACb,UAAI,sBAAuB;AAC3B,UAAI,iBAAiB,GAAI,gBAAe;AACxC,8BAAwB;AAAA,IAC1B,WAAW,OAAO,MAAM,OAAO,SAAS,OAAO,KAAK;AAClD,8BAAwB;AAAA,IAC1B;AAAA,EACF;AACA,MAAI,sBAAuB;AAG3B,QAAM,MACJ,iBAAiB,KACb,IAAI,SACJ,eAAe,KAAK,IAAI,eAAe,CAAC,MAAM,KAC5C,eAAe,IACf;AAER,SAAO;AAAA,IACL,WAAW,IAAI,SAAS,GAAG,GAAG;AAAA,IAC9B;AAAA,EACF;AACF;AAEA,SAAS,cAAc,aAAkC;AACvD,QAAM,MAAM,eAAoB,UAAK,aAAa,cAAc,CAAC;AACjE,MAAI,CAAC,IAAK,QAAO,oBAAI,IAAI;AACzB,QAAM,SAAS,gBAAgB,GAAG;AAClC,MAAI,CAAC,MAAM,QAAQ,MAAM,EAAG,QAAO,oBAAI,IAAI;AAC3C,SAAO,IAAI,IAAI,OAAO,OAAO,CAAC,OAAqB,OAAO,OAAO,QAAQ,CAAC;AAC5E;AAEA,SAAS,iBACP,WACA,WAC4B;AAC5B,QAAM,MAAM;AAAA,IACL,UAAK,WAAW,GAAG,SAAS,GAAG,eAAe,EAAE;AAAA,EACvD;AACA,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,SAAS,gBAAgB,GAAG;AAClC,MAAI,WAAW,KAAM,QAAO;AAC5B,QAAM,SAAS,0BAA0B,UAAU,MAAM;AACzD,SAAO,OAAO,UAAU,OAAO,OAAO;AACxC;AAEA,SAAS,2BAA2B,UAGlC;AACA,MAAI,CAAC,UAAU,KAAM,QAAO,CAAC;AAE7B,QAAM,aAAa,SAAS,KAAK;AAAA,IAAK,CAAC,QACrC,IAAI,KAAK,WAAW,kBAAkB;AAAA,EACxC;AACA,QAAM,UAAU,SAAS,KAAK;AAAA,IAC5B,CAAC,QAAQ,IAAI,SAAS;AAAA,EACxB;AAEA,SAAO;AAAA,IACL,iBAAiB,YAAY,WAAW,uBAAuB;AAAA,IAC/D,mBAAmB,SAAS,WAAW,gCAAgC;AAAA,EACzE;AACF;AA0BA,SAAS,iBACP,WACA,KACwB;AACxB,QAAM,MAAM,eAAe,UAAU,WAAW;AAChD,MAAI,CAAC,IAAK,QAAO;AAEjB,QAAM,UAAU,mBAAmB,GAAG;AAEtC,QAAM,cAAc,gBAAgB,QAAQ,SAAS;AACrD,MAAI,gBAAgB,KAAM,QAAO;AAEjC,QAAM,cAAc,wBAAwB,UAAU,WAAW;AACjE,MAAI,CAAC,YAAY,QAAS,QAAO;AACjC,QAAM,UAA6B,YAAY;AAI/C,MACE,IAAI,gBAAgB,WACnB,QAAQ,QAAQ,UAAkB,aAAQ,QAAQ,GAAG,MAAM,IAAI,cAChE;AACA,WAAO;AAAA,EACT;AAIA,QAAM,eAAe,GAAG,UAAU,SAAS,GAAG,eAAe;AAC7D,QAAM,WAAW,UAAU,aAAa,IAAI,YAAY,IACpD,iBAAiB,UAAU,WAAW,UAAU,SAAS,IACzD;AACJ,MAAI,UAAU,WAAY,QAAO;AAEjC,QAAM,UAAU,2BAA2B,QAAQ;AACnD,QAAM,oBACJ,QAAQ,qBACR,wBAAwB,MAAM,kBAAkB;AAAA,IAC9C,QAAQ;AAAA,EACV,EAAE;AAGJ,QAAM,eAAe,KAAK,IAAI,GAAG,QAAQ,oBAAoB,CAAC;AAE9D,SAAO;AAAA,IACL,IAAI,UAAU;AAAA,IACd,OAAO,QAAQ,SAAS;AAAA,IACxB,cAAc,QAAQ;AAAA,IACtB,OAAO,QAAQ,SAAS;AAAA,IACxB;AAAA,IACA,cAAc,UAAU,MAAM;AAAA,IAC9B,aAAa,UAAU,MAAM,aAAa,UAAU,MAAM;AAAA,IAC1D,YAAY,IAAI,UAAU,IAAI,UAAU,SAAS;AAAA,IACjD,KAAK,QAAQ;AAAA,IACb;AAAA,IACA,iBAAiB,QAAQ,mBAAmB,QAAQ;AAAA,EACtD;AACF;AAEA,SAAS,eAAe,WAAgC;AACtD,MAAI;AACF,WAAU,eAAY,WAAW,EAAE,eAAe,KAAK,CAAC;AAAA,EAC1D,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAQA,SAAS,kBACP,WACA,SACoB;AACpB,QAAM,eAAe,IAAI,IAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AACvD,QAAM,aAAiC,CAAC;AAExC,aAAW,SAAS,SAAS;AAC3B,QAAI,MAAM,YAAY,EAAG;AACzB,QAAI,CAAC,MAAM,KAAK,SAAS,iBAAiB,EAAG;AAE7C,UAAM,cAAmB,UAAK,WAAW,MAAM,IAAI;AACnD,QAAI;AACJ,QAAI;AACF,cAAW,YAAS,WAAW;AAAA,IACjC,QAAQ;AACN;AAAA,IACF;AACA,eAAW,KAAK;AAAA,MACd,WAAW,MAAM,KAAK,MAAM,GAAG,CAAC,kBAAkB,MAAM;AAAA,MACxD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAMA,SAAS,UACP,YACA,KACA,OACmB;AACnB,QAAM,MAAyB,CAAC;AAChC,aAAW,aAAa,YAAY;AAClC,QAAI,UAAU,UAAa,IAAI,UAAU,MAAO;AAChD,UAAM,WAAW,iBAAiB,WAAW,GAAG;AAChD,QAAI,SAAU,KAAI,KAAK,QAAQ;AAAA,EACjC;AACA,SAAO;AACT;AAWO,SAAS,4BAA4B,KAAqB;AAC/D,MAAI,eAAe;AACnB,MAAI,IAAI,WAAW,IAAI,KAAK,QAAQ,KAAK;AACvC,mBAAoB,UAAQ,WAAQ,GAAG,IAAI,MAAM,CAAC,CAAC;AAAA,EACrD;AAEA,QAAM,eAAoB,aAAQ,YAAY;AAC9C,MAAI,gBAAgB;AACpB,MAAI;AACF,oBAAmB,gBAAa,YAAY;AAAA,EAC9C,QAAQ;AACN,oBAAgB;AAAA,EAClB;AACA,QAAM,aAAa,cAAc,QAAQ,WAAW,EAAE;AAEtD,MAAI,QAAQ,aAAa,SAAS;AAChC,WAAO,IAAI,WAAW,QAAQ,cAAc,IAAI,EAAE,QAAQ,WAAW,GAAG,CAAC;AAAA,EAC3E;AACA,SAAO,IAAI,WAAW,QAAQ,QAAQ,EAAE,EAAE,QAAQ,QAAQ,GAAG,CAAC;AAChE;AAQO,SAAS,wBAAgC;AAC9C,SAAY,UAAQ,WAAQ,GAAG,YAAY,UAAU;AACvD;AA0BA,eAAsB,aACpB,UAA+B,CAAC,GACJ;AAC5B,QAAM,cAAc,QAAQ,eAAe,sBAAsB;AACjE,QAAM,YAAY,cAAc,WAAW;AAE3C,QAAM,cAAc,eAAe,WAAW;AAM9C,QAAM,mBAAmB,kBAAkB,aAAa,WAAW;AACnE,QAAM,oBAAwC,CAAC;AAE/C,MAAI;AAEJ,MAAI,QAAQ,iBAAiB;AAC3B,eAAW,SAAS,aAAa;AAC/B,UAAI,CAAC,MAAM,YAAY,EAAG;AAC1B,UAAI,CAAC,MAAM,KAAK,WAAW,GAAG,EAAG;AACjC,YAAM,MAAW,UAAK,aAAa,MAAM,IAAI;AAC7C,wBAAkB,KAAK,GAAG,kBAAkB,KAAK,eAAe,GAAG,CAAC,CAAC;AAAA,IACvE;AAAA,EACF,OAAO;AACL,UAAM,gBAAqB,aAAQ,QAAQ,OAAO,QAAQ,IAAI,CAAC;AAC/D,kBAAc;AACd,UAAM,aAAkB;AAAA,MACtB;AAAA,MACA,4BAA4B,aAAa;AAAA,IAC3C;AACA,sBAAkB;AAAA,MAChB,GAAG,kBAAkB,YAAY,eAAe,UAAU,CAAC;AAAA,IAC7D;AAAA,EACF;AAIA,QAAM,cAAc,CAAC,GAAqB,MACxC,EAAE,MAAM,MAAM,QAAQ,IAAI,EAAE,MAAM,MAAM,QAAQ;AAClD,oBAAkB,KAAK,WAAW;AAClC,mBAAiB,KAAK,WAAW;AAIjC,QAAM,aACJ,QAAQ,gBAAgB,UAAa,QAAQ,eAAe,IACxD,QAAQ,cAAc,mBACtB;AAEN,QAAM,MAAoB,EAAE,UAAU;AACtC,QAAM,YACJ,gBAAgB,SAAY,EAAE,WAAW,YAAY,IAAI;AAE3D,QAAM,kBAAkB,UAAU,mBAAmB,KAAK,UAAU;AACpE,QAAM,iBAAiB,UAAU,kBAAkB,WAAW,UAAU;AAIxE,QAAM,OAAO,oBAAI,IAA6B;AAC9C,aAAW,WAAW,CAAC,GAAG,iBAAiB,GAAG,cAAc,GAAG;AAC7D,UAAM,WAAW,KAAK,IAAI,QAAQ,EAAE;AACpC,QACE,CAAC,YACD,QAAQ,aAAa,QAAQ,IAAI,SAAS,aAAa,QAAQ,GAC/D;AACA,WAAK,IAAI,QAAQ,IAAI,OAAO;AAAA,IAC9B;AAAA,EACF;AAEA,QAAM,SAAS,MAAM,KAAK,KAAK,OAAO,CAAC,EAAE;AAAA,IACvC,CAAC,GAAG,MAAM,EAAE,aAAa,QAAQ,IAAI,EAAE,aAAa,QAAQ;AAAA,EAC9D;AAEA,MAAI,QAAQ,gBAAgB,UAAa,QAAQ,eAAe,GAAG;AACjE,WAAO,OAAO,MAAM,GAAG,QAAQ,WAAW;AAAA,EAC5C;AAEA,SAAO;AACT;","names":["DroidServerMethod","DroidClientMethod","SessionNotificationType","ToolConfirmationOutcome","ToolConfirmationType","DroidWorkingState","ContextStatsAccuracy","DroidErrorType","McpServerStatus","McpServerType","McpStatus","McpAuthOutcome","DecompSessionType","MissionState","FeatureStatus","FeatureSuccessState","IssueSeverity","DismissalType","ProgressLogEntryType","DroidInteractionMode","AutonomyLevel","AutonomyMode","ReasoningEffort","ModelProvider","JsonRpcErrorCode","JsonRpcMessageType","SettingsLevel","SkillLocation","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","ToolUseBlockSchema","resolve","uuidv4","resolve","resolve","import_mcp","import_zod","http","resolve"]}
|