@factory/droid-sdk 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +214 -82
  2. package/dist/index.cjs +734 -611
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +1649 -206
  5. package/dist/index.d.ts +1649 -206
  6. package/dist/index.js +729 -624
  7. package/dist/index.js.map +1 -1
  8. package/docs/sdk-usage-guide.md +678 -0
  9. package/examples/abort-session-stream.ts +19 -55
  10. package/examples/droid-dev-structured-output.ts +4 -5
  11. package/examples/fork-session.ts +25 -6
  12. package/examples/hook-execution.ts +62 -0
  13. package/examples/init-metadata.ts +9 -66
  14. package/examples/interrupt-session.ts +19 -54
  15. package/examples/list-sessions.ts +9 -55
  16. package/examples/multi-turn-session.ts +21 -53
  17. package/examples/permission-handler.ts +26 -84
  18. package/examples/readme-structured-output.ts +25 -0
  19. package/examples/result-metadata.ts +1 -1
  20. package/examples/run.ts +1 -1
  21. package/examples/sdk-mcp-tool.ts +11 -7
  22. package/examples/session-stream.ts +54 -0
  23. package/examples/spec-mode-new-session.ts +38 -99
  24. package/examples/spec-mode-same-session.ts +49 -111
  25. package/examples/structured-output.ts +16 -10
  26. package/examples/test-compact.ts +5 -3
  27. package/examples/test-rewind.ts +49 -117
  28. package/examples/tool-controls.ts +22 -55
  29. package/package.json +1 -1
  30. package/docs/examples/init-metadata.md +0 -79
  31. package/docs/examples/list-sessions.md +0 -64
  32. package/docs/examples/multi-turn-session.md +0 -77
  33. package/docs/examples/one-shot-query.md +0 -73
  34. package/docs/examples/permission-handler.md +0 -102
  35. package/docs/examples/run.md +0 -52
  36. package/docs/examples/spec-mode.md +0 -101
  37. package/docs/examples/tool-controls.md +0 -90
  38. package/docs/typescript-sdk-reference.md +0 -372
  39. package/examples/simple-query.ts +0 -53
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../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":["/**\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":"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","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","z","z","z","z","z","z","z","z","z","z","z","ToolUseBlockSchema","z","resolve","resolve","resolve","z","z","resolve"]}
1
+ {"version":3,"sources":["../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/hooks.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/session.ts","../src/run.ts","../src/session-discovery.ts"],"sourcesContent":["/** 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 CLOSE_SESSION = 'droid.close_session',\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\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 ASSISTANT_TEXT_COMPLETE = 'assistant_text_complete',\n THINKING_TEXT_DELTA = 'thinking_text_delta',\n THINKING_TEXT_COMPLETE = 'thinking_text_complete',\n TOOL_CALL = 'tool_call',\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 HOOK_EXECUTION_STARTED = 'hook_execution_started',\n HOOK_EXECUTION_COMPLETED = 'hook_execution_completed',\n STRUCTURED_OUTPUT = 'structured_output',\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\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\nexport enum ContextStatsAccuracy {\n Exact = 'exact',\n Estimated = 'estimated',\n}\n\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\nexport enum McpServerStatus {\n Connecting = 'connecting',\n Connected = 'connected',\n Disconnected = 'disconnected',\n Failed = 'failed',\n Disabled = 'disabled',\n}\n\nexport enum McpServerType {\n Stdio = 'stdio',\n Http = 'http',\n Sse = 'sse',\n}\n\nexport enum McpStatus {\n NotInitialized = 'not-initialized',\n Initializing = 'initializing',\n Ready = 'ready',\n NoServers = 'no-servers',\n Failed = 'failed',\n}\n\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\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\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\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\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 * Frozen Factory API version embedded in every JSON-RPC envelope.\n * This value is required by the wire protocol and must not be changed.\n * For version negotiation, use FACTORY_PROTOCOL_VERSION 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\n/** Creates a JSON-RPC response schema (success | failure) for a given result schema. */\nexport function createResponseSchema<T extends z.ZodTypeAny>(resultSchema: T) {\n return z.union([\n JsonRpcResponseSuccessSchema.extend({ result: resultSchema }),\n JsonRpcResponseFailureSchema,\n ]);\n}\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 ModelProvider,\n MissionState,\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 createResponseSchema,\n EmptyResultSchema,\n JsonObjectSchema,\n type JsonRpcResponseFailure,\n JsonRpcRequestSchema,\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\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\nexport const SessionSourceSchema = z\n .object({\n platform: z.string(),\n })\n .passthrough();\n\nexport type SessionSource = z.infer<typeof SessionSourceSchema>;\n\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\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\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\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\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\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\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\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\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\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\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\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\nexport const OutputFormatType = {\n JsonSchema: 'json_schema',\n} as const;\n\nexport type OutputFormatType =\n (typeof OutputFormatType)[keyof typeof OutputFormatType];\n\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\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\nexport const InterruptSessionRequestParamsSchema = z.object({}).strict();\n\nexport type InterruptSessionRequestParams = z.infer<\n typeof InterruptSessionRequestParamsSchema\n>;\n\nexport const CloseSessionRequestParamsSchema = z\n .object({\n reason: z\n .enum(['clear', 'logout', 'prompt_input_exit', 'other'])\n .optional(),\n })\n .strict();\n\nexport type CloseSessionRequestParams = z.infer<\n typeof CloseSessionRequestParamsSchema\n>;\n\nexport const KillWorkerSessionRequestParamsSchema = z\n .object({\n workerSessionId: z.string(),\n })\n .strict();\n\nexport type KillWorkerSessionRequestParams = z.infer<\n typeof KillWorkerSessionRequestParamsSchema\n>;\n\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\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\nexport const AuthenticateMcpServerRequestParamsSchema = z\n .object({\n serverName: z.string(),\n })\n .strict();\n\nexport type AuthenticateMcpServerRequestParams = z.infer<\n typeof AuthenticateMcpServerRequestParamsSchema\n>;\n\nexport const CancelMcpAuthRequestParamsSchema = z\n .object({\n serverName: z.string(),\n })\n .strict();\n\nexport type CancelMcpAuthRequestParams = z.infer<\n typeof CancelMcpAuthRequestParamsSchema\n>;\n\nexport const ClearMcpAuthRequestParamsSchema = z\n .object({\n serverName: z.string(),\n })\n .strict();\n\nexport type ClearMcpAuthRequestParams = z.infer<\n typeof ClearMcpAuthRequestParamsSchema\n>;\n\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\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\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\nexport const ListMcpRegistryRequestParamsSchema = z.object({}).strict();\n\nexport type ListMcpRegistryRequestParams = z.infer<\n typeof ListMcpRegistryRequestParamsSchema\n>;\n\nexport const ListMcpToolsRequestParamsSchema = z.object({}).strict();\n\nexport type ListMcpToolsRequestParams = z.infer<\n typeof ListMcpToolsRequestParamsSchema\n>;\n\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\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\nexport const ListMcpServersRequestParamsSchema = z.object({}).strict();\n\nexport type ListMcpServersRequestParams = z.infer<\n typeof ListMcpServersRequestParamsSchema\n>;\n\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\nexport const ListSkillsRequestParamsSchema = z.object({}).strict();\n\nexport type ListSkillsRequestParams = z.infer<\n typeof ListSkillsRequestParamsSchema\n>;\n\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\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\nexport const RewindFileCreationSchema = z\n .object({\n filePath: z.string(),\n })\n .passthrough();\n\nexport type RewindFileCreation = z.infer<typeof RewindFileCreationSchema>;\n\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\nexport const GetRewindInfoRequestParamsSchema = z\n .object({\n messageId: z.string(),\n })\n .passthrough();\n\nexport type GetRewindInfoRequestParams = z.infer<\n typeof GetRewindInfoRequestParamsSchema\n>;\n\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\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\nexport const RenameSessionRequestParamsSchema = z\n .object({\n title: z.string(),\n })\n .passthrough();\n\nexport type RenameSessionRequestParams = z.infer<\n typeof RenameSessionRequestParamsSchema\n>;\n\nexport const ForkSessionRequestParamsSchema = z.object({}).passthrough();\n\nexport type ForkSessionRequestParams = z.infer<\n typeof ForkSessionRequestParamsSchema\n>;\n\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 CloseSessionRequestSchema = JsonRpcRequestSchema.extend({\n method: z.literal(DroidServerMethod.CLOSE_SESSION),\n params: CloseSessionRequestParamsSchema,\n});\n\nexport type CloseSessionRequest = z.infer<typeof CloseSessionRequestSchema>;\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 CloseSessionRequestSchema,\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\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\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\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\nexport const AddUserMessageResultSchema = EmptyResultSchema;\n\nexport type AddUserMessageResult = z.infer<typeof AddUserMessageResultSchema>;\n\nexport const InterruptSessionResultSchema = EmptyResultSchema;\n\nexport type InterruptSessionResult = z.infer<\n typeof InterruptSessionResultSchema\n>;\n\nexport const CloseSessionResultSchema = EmptyResultSchema;\n\nexport type CloseSessionResult = z.infer<typeof CloseSessionResultSchema>;\n\nexport const KillWorkerSessionResultSchema = EmptyResultSchema;\n\nexport type KillWorkerSessionResult = z.infer<\n typeof KillWorkerSessionResultSchema\n>;\n\nexport const UpdateSessionSettingsResultSchema = EmptyResultSchema;\n\nexport type UpdateSessionSettingsResult = z.infer<\n typeof UpdateSessionSettingsResultSchema\n>;\n\nexport const ToggleMcpServerResultSchema = SuccessResultSchema;\n\nexport type ToggleMcpServerResult = z.infer<typeof ToggleMcpServerResultSchema>;\n\nexport const AuthenticateMcpServerResultSchema = SuccessResultSchema;\n\nexport type AuthenticateMcpServerResult = z.infer<\n typeof AuthenticateMcpServerResultSchema\n>;\n\nexport const CancelMcpAuthResultSchema = SuccessResultSchema;\n\nexport type CancelMcpAuthResult = z.infer<typeof CancelMcpAuthResultSchema>;\n\nexport const ClearMcpAuthResultSchema = SuccessResultSchema;\n\nexport type ClearMcpAuthResult = z.infer<typeof ClearMcpAuthResultSchema>;\n\nexport const SubmitMcpAuthCodeResultSchema = SuccessResultSchema;\n\nexport type SubmitMcpAuthCodeResult = z.infer<\n typeof SubmitMcpAuthCodeResultSchema\n>;\n\nexport const AddMcpServerResultSchema = SuccessResultSchema;\n\nexport type AddMcpServerResult = z.infer<typeof AddMcpServerResultSchema>;\n\nexport const RemoveMcpServerResultSchema = SuccessResultSchema;\n\nexport type RemoveMcpServerResult = z.infer<typeof RemoveMcpServerResultSchema>;\n\nexport const ListMcpRegistryResultSchema = z\n .object({ servers: z.array(McpRegistryServerSchema) })\n .passthrough();\n\nexport type ListMcpRegistryResult = z.infer<typeof ListMcpRegistryResultSchema>;\n\nexport const ListMcpToolsResultSchema = z\n .object({ tools: z.array(McpToolInfoSchema) })\n .passthrough();\n\nexport type ListMcpToolsResult = z.infer<typeof ListMcpToolsResultSchema>;\n\nexport const ListToolsResultSchema = z\n .object({ tools: z.array(ExecToolInfoSchema) })\n .passthrough();\n\nexport type ListToolsResult = z.infer<typeof ListToolsResultSchema>;\n\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\nexport const ToggleMcpToolResultSchema = SuccessResultSchema;\n\nexport type ToggleMcpToolResult = z.infer<typeof ToggleMcpToolResultSchema>;\n\nexport const ListSkillsResultSchema = z\n .object({ skills: z.array(SkillInfoSchema) })\n .passthrough();\n\nexport type ListSkillsResult = z.infer<typeof ListSkillsResultSchema>;\n\nexport const SubmitBugReportResultSchema = z\n .object({ bugReportId: z.string() })\n .passthrough();\n\nexport type SubmitBugReportResult = z.infer<typeof SubmitBugReportResultSchema>;\n\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\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\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\nexport const ForkSessionResultSchema = z\n .object({\n newSessionId: z.string(),\n })\n .passthrough();\n\nexport type ForkSessionResult = z.infer<typeof ForkSessionResultSchema>;\n\nexport const GetContextStatsResultSchema = ContextStatsSchema;\n\nexport type GetContextStatsResult = z.infer<typeof GetContextStatsResultSchema>;\n\nexport const RenameSessionResultSchema = SuccessResultSchema;\n\nexport type RenameSessionResult = z.infer<typeof RenameSessionResultSchema>;\n\nexport const InitializeSessionResponseSchema = createResponseSchema(\n InitializeSessionResultSchema\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 = createResponseSchema(\n LoadSessionResultSchema\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 = createResponseSchema(\n AddUserMessageResultSchema\n);\nexport type AddUserMessageResponse = z.infer<\n typeof AddUserMessageResponseSchema\n>;\n\nexport const InterruptSessionResponseSchema = createResponseSchema(\n InterruptSessionResultSchema\n);\nexport type InterruptSessionResponse = z.infer<\n typeof InterruptSessionResponseSchema\n>;\n\nexport const CloseSessionResponseSchema = createResponseSchema(\n CloseSessionResultSchema\n);\nexport type CloseSessionResponse = z.infer<typeof CloseSessionResponseSchema>;\n\nexport const KillWorkerSessionResponseSchema = createResponseSchema(\n KillWorkerSessionResultSchema\n);\nexport type KillWorkerSessionResponse = z.infer<\n typeof KillWorkerSessionResponseSchema\n>;\n\nexport const UpdateSessionSettingsResponseSchema = createResponseSchema(\n UpdateSessionSettingsResultSchema\n);\nexport type UpdateSessionSettingsResponse = z.infer<\n typeof UpdateSessionSettingsResponseSchema\n>;\n\nexport const ToggleMcpServerResponseSchema = createResponseSchema(\n ToggleMcpServerResultSchema\n);\nexport type ToggleMcpServerResponse = z.infer<\n typeof ToggleMcpServerResponseSchema\n>;\n\nexport const AuthenticateMcpServerResponseSchema = createResponseSchema(\n AuthenticateMcpServerResultSchema\n);\nexport type AuthenticateMcpServerResponse = z.infer<\n typeof AuthenticateMcpServerResponseSchema\n>;\n\nexport const CancelMcpAuthResponseSchema = createResponseSchema(\n CancelMcpAuthResultSchema\n);\nexport type CancelMcpAuthResponse = z.infer<typeof CancelMcpAuthResponseSchema>;\n\nexport const ClearMcpAuthResponseSchema = createResponseSchema(\n ClearMcpAuthResultSchema\n);\nexport type ClearMcpAuthResponse = z.infer<typeof ClearMcpAuthResponseSchema>;\n\nexport const SubmitMcpAuthCodeResponseSchema = createResponseSchema(\n SubmitMcpAuthCodeResultSchema\n);\nexport type SubmitMcpAuthCodeResponse = z.infer<\n typeof SubmitMcpAuthCodeResponseSchema\n>;\n\nexport const AddMcpServerResponseSchema = createResponseSchema(\n AddMcpServerResultSchema\n);\nexport type AddMcpServerResponse = z.infer<typeof AddMcpServerResponseSchema>;\n\nexport const RemoveMcpServerResponseSchema = createResponseSchema(\n RemoveMcpServerResultSchema\n);\nexport type RemoveMcpServerResponse = z.infer<\n typeof RemoveMcpServerResponseSchema\n>;\n\nexport const ListMcpRegistryResponseSchema = createResponseSchema(\n ListMcpRegistryResultSchema\n);\nexport type ListMcpRegistryResponse = z.infer<\n typeof ListMcpRegistryResponseSchema\n>;\n\nexport const ListMcpToolsResponseSchema = createResponseSchema(\n ListMcpToolsResultSchema\n);\nexport type ListMcpToolsResponse = z.infer<typeof ListMcpToolsResponseSchema>;\n\nexport const ListToolsResponseSchema = createResponseSchema(\n ListToolsResultSchema\n);\nexport type ListToolsResponse = z.infer<typeof ListToolsResponseSchema>;\n\nexport const ListMcpServersResponseSchema = createResponseSchema(\n ListMcpServersResultSchema\n);\nexport type ListMcpServersResponse = z.infer<\n typeof ListMcpServersResponseSchema\n>;\n\nexport const ToggleMcpToolResponseSchema = createResponseSchema(\n ToggleMcpToolResultSchema\n);\nexport type ToggleMcpToolResponse = z.infer<typeof ToggleMcpToolResponseSchema>;\n\nexport const ListSkillsResponseSchema = createResponseSchema(\n ListSkillsResultSchema\n);\nexport type ListSkillsResponse = z.infer<typeof ListSkillsResponseSchema>;\n\nexport const SubmitBugReportResponseSchema = createResponseSchema(\n SubmitBugReportResultSchema\n);\nexport type SubmitBugReportResponse = z.infer<\n typeof SubmitBugReportResponseSchema\n>;\n\nexport const GetRewindInfoResponseSchema = createResponseSchema(\n GetRewindInfoResultSchema\n);\nexport type GetRewindInfoResponse = z.infer<typeof GetRewindInfoResponseSchema>;\n\nexport const ExecuteRewindResponseSchema = createResponseSchema(\n ExecuteRewindResultSchema\n);\nexport type ExecuteRewindResponse = z.infer<typeof ExecuteRewindResponseSchema>;\n\nexport const CompactSessionResponseSchema = createResponseSchema(\n CompactSessionResultSchema\n);\nexport type CompactSessionResponse = z.infer<\n typeof CompactSessionResponseSchema\n>;\n\nexport const ForkSessionResponseSchema = createResponseSchema(\n ForkSessionResultSchema\n);\nexport type ForkSessionResponse = z.infer<typeof ForkSessionResponseSchema>;\n\nexport const GetContextStatsResponseSchema = createResponseSchema(\n GetContextStatsResultSchema\n);\nexport type GetContextStatsResponse = z.infer<\n typeof GetContextStatsResponseSchema\n>;\n\nexport const RenameSessionResponseSchema = createResponseSchema(\n RenameSessionResultSchema\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\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\nexport const McpHttpServerConfigFieldsSchema = z.object({\n url: z.string().optional(),\n});\n\nexport type McpHttpServerConfigFields = z.infer<\n typeof McpHttpServerConfigFieldsSchema\n>;\n\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\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\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\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\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\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\nexport const DroidHookEventSchema = z.enum([\n 'PreToolUse',\n 'PostToolUse',\n 'Notification',\n 'UserPromptSubmit',\n 'Stop',\n 'SubagentStop',\n 'PreCompact',\n 'SessionStart',\n 'SessionEnd',\n]);\n\nexport type DroidHookEvent = z.infer<typeof DroidHookEventSchema>;\n\nexport const DroidHookSpecificOutputSchema = z\n .object({\n hookEventName: DroidHookEventSchema.optional(),\n permissionDecision: z.enum(['allow', 'deny', 'ask']).optional(),\n permissionDecisionReason: z.string().optional(),\n additionalContext: z.string().optional(),\n updatedInput: z.record(z.unknown()).optional(),\n })\n .passthrough();\n\nexport const DroidHookOutputSchema = z\n .object({\n continue: z.boolean().optional(),\n stopReason: z.string().optional(),\n suppressOutput: z.boolean().optional(),\n systemMessage: z.string().optional(),\n decision: z.enum(['block', 'approve']).optional(),\n reason: z.string().optional(),\n hookSpecificOutput: DroidHookSpecificOutputSchema.optional(),\n })\n .passthrough();\n\nexport type DroidHookOutput = z.infer<typeof DroidHookOutputSchema>;\n\nexport const DroidHookExecutionResultSchema = DroidHookOutputSchema.extend({\n exitCode: z.number(),\n stdout: z.string(),\n stderr: z.string(),\n});\n\nexport type DroidHookExecutionResult = z.infer<\n typeof DroidHookExecutionResultSchema\n>;\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 { DroidHookEventSchema } from './hooks.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 createResponseSchema,\n JsonObjectSchema,\n JsonRpcNotificationSchema,\n JsonRpcRequestSchema,\n JsonValueSchema,\n ToolSelectionOverridesSchema,\n} from './shared.js';\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\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\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\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\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\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\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\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\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\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\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\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\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/** Assistant text complete notification (streaming block finished). */\nexport const AssistantTextCompleteNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.ASSISTANT_TEXT_COMPLETE),\n messageId: z.string(),\n blockIndex: z.number(),\n })\n .passthrough();\n\nexport type AssistantTextCompleteNotification = z.infer<\n typeof AssistantTextCompleteNotificationSchema\n>;\n\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\nexport const ThinkingTextCompleteNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.THINKING_TEXT_COMPLETE),\n messageId: z.string(),\n blockIndex: z.number(),\n durationMs: z.number().optional(),\n })\n .passthrough();\n\nexport type ThinkingTextCompleteNotification = z.infer<\n typeof ThinkingTextCompleteNotificationSchema\n>;\n\nexport const ToolCallNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.TOOL_CALL),\n toolUse: ToolUseBlockSchema,\n })\n .passthrough();\n\nexport type ToolCallNotification = z.infer<typeof ToolCallNotificationSchema>;\n\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\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\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\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\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\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\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\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\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\nexport const HookCommandSchema = z\n .object({\n command: z.string(),\n timeout: z.number().optional(),\n })\n .passthrough();\n\nexport type HookCommand = z.infer<typeof HookCommandSchema>;\n\nexport const HookResultSchema = z\n .object({\n exitCode: z.number(),\n stdout: z.string(),\n stderr: z.string(),\n command: z.string().optional(),\n timeout: z.number().optional(),\n })\n .passthrough();\n\nexport type HookResult = z.infer<typeof HookResultSchema>;\n\nexport const HookExecutionStartedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.HOOK_EXECUTION_STARTED),\n hookId: z.string(),\n hookEventName: DroidHookEventSchema,\n hookMatcher: z.string().optional(),\n hookCommands: z.array(HookCommandSchema),\n hookToolCallId: z.string().optional(),\n isParallelExecution: z.boolean().optional(),\n parallelGroupId: z.string().optional(),\n })\n .passthrough();\n\nexport type HookExecutionStartedNotification = z.infer<\n typeof HookExecutionStartedNotificationSchema\n>;\n\nexport const HookExecutionCompletedNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.HOOK_EXECUTION_COMPLETED),\n hookId: z.string(),\n hookEventName: DroidHookEventSchema.optional(),\n hookMatcher: z.string().optional(),\n hookToolCallId: z.string().optional(),\n hookStatus: z.enum(['completed', 'error']),\n hookResults: z.array(HookResultSchema).optional(),\n })\n .passthrough();\n\nexport type HookExecutionCompletedNotification = z.infer<\n typeof HookExecutionCompletedNotificationSchema\n>;\n\n/** Structured output validation error emitted by Droid. */\nexport const StructuredOutputErrorSchema = z\n .object({\n code: z.string(),\n message: z.string(),\n details: z.unknown().optional(),\n })\n .passthrough();\n\nexport type StructuredOutputError = z.infer<typeof StructuredOutputErrorSchema>;\n\n/** Backend-validated structured output for the completed turn. */\nexport const StructuredOutputNotificationSchema = z\n .object({\n type: z.literal(SessionNotificationType.STRUCTURED_OUTPUT),\n messageId: z.string(),\n structuredOutput: JsonObjectSchema.nullable(),\n structuredOutputError: StructuredOutputErrorSchema.nullable(),\n })\n .passthrough();\n\nexport type StructuredOutputNotification = z.infer<\n typeof StructuredOutputNotificationSchema\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 AssistantTextCompleteNotificationSchema,\n ThinkingTextDeltaNotificationSchema,\n ThinkingTextCompleteNotificationSchema,\n ToolCallNotificationSchema,\n SessionTokenUsageChangedNotificationSchema,\n MissionStateChangedNotificationSchema,\n MissionFeaturesChangedNotificationSchema,\n MissionProgressEntryNotificationSchema,\n MissionHeartbeatNotificationSchema,\n MissionWorkerStartedNotificationSchema,\n MissionWorkerCompletedNotificationSchema,\n McpAuthRequiredNotificationSchema,\n McpAuthCompletedNotificationSchema,\n HookExecutionStartedNotificationSchema,\n HookExecutionCompletedNotificationSchema,\n StructuredOutputNotificationSchema,\n] as const;\n\n/** Discriminated union over all 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 = createResponseSchema(\n RequestPermissionResultSchema\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 = createResponseSchema(AskUserResultSchema);\nexport type AskUserResponse = z.infer<typeof AskUserResponseSchema>;\n\n/** Union over all 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\nexport interface NotificationListener {\n readonly callback: NotificationCallback;\n readonly filter?: NotificationFilter;\n}\n\n/** Dispatch a notification to matching listeners, swallowing listener errors. */\nexport function dispatchNotification(\n notification: Record<string, unknown>,\n listeners: Iterable<NotificationListener>\n): 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 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 dispatch loop\n }\n }\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 dispatchNotification(notification, this._notificationListeners);\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 dispatchNotification,\n ProtocolEngine,\n type AskUserHandler,\n type NotificationCallback,\n type NotificationFilter,\n type NotificationListener,\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 CloseSessionRequestParams,\n CloseSessionResult,\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 CloseSessionResultSchema,\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 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\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 private readonly _notificationListeners: NotificationListener[] = [];\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 closeSession(\n params: CloseSessionRequestParams = {}\n ): Promise<CloseSessionResult> {\n return this._sessionRpc(\n DroidServerMethod.CLOSE_SESSION,\n params,\n CloseSessionResultSchema\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: NotificationListener = { 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 dispatchNotification(notification, [...this._notificationListeners]);\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 { DroidHookEvent } from './schemas/hooks.js';\nimport type { McpServerStatusInfo, McpStatusSummary } from './schemas/mcp.js';\nimport {\n FactoryDroidMessageRole,\n type FactoryDroidMessage,\n type ToolUseBlock,\n} from './schemas/messages.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 StructuredOutputError as ServerStructuredOutputError,\n type ToolProgressUpdate,\n} from './schemas/server.js';\nimport {\n JsonObjectSchema,\n type JsonObject,\n type JsonValue,\n} from './schemas/shared.js';\n\nexport const DroidMessageType = {\n Assistant: 'assistant',\n User: 'user',\n ToolCall: 'tool_call',\n AssistantTextDelta: 'assistant_text_delta',\n AssistantTextComplete: 'assistant_text_complete',\n ThinkingTextDelta: 'thinking_text_delta',\n ThinkingTextComplete: 'thinking_text_complete',\n ToolCallDelta: 'tool_call_delta',\n ToolResult: 'tool_result',\n ToolProgress: 'tool_progress',\n WorkingStateChanged: 'working_state_changed',\n TokenUsageUpdate: 'token_usage_update',\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 Hook: 'hook',\n Error: 'error',\n Result: 'result',\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 AssistantTextComplete {\n readonly type: 'assistant_text_complete';\n readonly messageId: string;\n readonly blockIndex: number;\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 ThinkingTextComplete {\n readonly type: 'thinking_text_complete';\n readonly messageId: string;\n readonly blockIndex: number;\n readonly durationMs?: number;\n}\n\nexport interface ToolCallDelta {\n readonly type: 'tool_call_delta';\n readonly toolUse: ToolUseBlock;\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 DroidToolCallMessage {\n readonly type: 'tool_call';\n readonly toolUse: ToolUseBlock;\n}\n\nexport interface DroidAssistantMessage {\n readonly type: 'assistant';\n readonly message: FactoryDroidMessage;\n readonly text: string;\n}\n\nexport interface DroidUserMessage {\n readonly type: 'user';\n readonly message: FactoryDroidMessage;\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 HookExecution {\n readonly type: 'hook';\n readonly hookId: string;\n readonly eventName?: DroidHookEvent;\n readonly matcher?: string;\n readonly toolCallId?: string;\n readonly command?: string;\n readonly timeout?: number;\n readonly status: 'started' | 'completed' | 'error';\n readonly exitCode?: number;\n readonly stdout?: string;\n readonly stderr?: string;\n}\n\nexport interface StructuredOutputFields {\n readonly structuredOutput: JsonObject | null;\n readonly structuredOutputError: ServerStructuredOutputError | null;\n}\n\nexport interface StructuredOutput extends StructuredOutputFields {\n readonly type: 'structured_output';\n readonly messageId: 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\nexport type DroidErrorMessage = ErrorEvent;\n\nexport type DroidToolResultMessage = ToolResult;\n\nexport type DroidResultSubtype =\n | 'success'\n | 'error_during_execution'\n | 'error_structured_output';\n\ninterface DroidResultBase {\n readonly type: 'result';\n readonly sessionId: string;\n readonly durationMs: number;\n readonly numTurns: number;\n readonly result: string;\n readonly tokenUsage: TokenUsage | null;\n /** Stream messages emitted before this result. */\n readonly messages: DroidStreamEvent[];\n readonly text: string;\n readonly turnCount: number;\n readonly success: boolean;\n}\n\nexport interface DroidResultSuccessMessage extends DroidResultBase {\n readonly subtype: 'success';\n readonly isError: false;\n readonly structuredOutput?: unknown;\n readonly structuredOutputError?: null;\n readonly error: null;\n}\n\nexport interface DroidResultErrorMessage extends DroidResultBase {\n readonly subtype: 'error_during_execution' | 'error_structured_output';\n readonly isError: true;\n readonly errors: string[];\n readonly structuredOutput?: unknown;\n readonly structuredOutputError?: ServerStructuredOutputError | null;\n readonly error: ErrorEvent | null;\n}\n\nexport type DroidResultMessage =\n | DroidResultSuccessMessage\n | DroidResultErrorMessage;\n\nexport type DroidStreamMessage =\n | DroidAssistantMessage\n | DroidUserMessage\n | DroidToolCallMessage\n | ToolResult\n | HookExecution\n | ErrorEvent\n | DroidResultMessage;\n\nexport type DroidStreamEvent =\n | DroidStreamMessage\n | AssistantTextDelta\n | AssistantTextComplete\n | ThinkingTextDelta\n | ThinkingTextComplete\n | ToolCallDelta\n | ToolProgress\n | WorkingStateChanged\n | TokenUsageUpdate\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 | HookExecution;\n\nexport type InternalDroidMessage =\n | DroidStreamEvent\n | ToolUse\n | CreateMessage\n | StructuredOutput;\n\nexport type DroidMessage = DroidStreamEvent;\n\nexport type DroidMessageType =\n (typeof DroidMessageType)[keyof typeof DroidMessageType];\n\nexport function convertNotificationToStreamMessage(\n raw: unknown\n): InternalDroidMessage | InternalDroidMessage[] | 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.ASSISTANT_TEXT_COMPLETE:\n return {\n type: DroidMessageType.AssistantTextComplete,\n messageId: notification.messageId,\n blockIndex: notification.blockIndex,\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.THINKING_TEXT_COMPLETE:\n return {\n type: DroidMessageType.ThinkingTextComplete,\n messageId: notification.messageId,\n blockIndex: notification.blockIndex,\n durationMs: notification.durationMs,\n };\n\n case SessionNotificationType.TOOL_CALL:\n return {\n type: DroidMessageType.ToolCallDelta,\n toolUse: notification.toolUse,\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: InternalDroidMessage[] = [];\n\n for (const block of msg.content) {\n if (block.type === 'tool_use') {\n messages.push({\n type: DroidMessageType.ToolCall,\n toolUse: block,\n });\n }\n }\n\n if (msg.role === FactoryDroidMessageRole.Assistant) {\n messages.push({\n type: DroidMessageType.Assistant,\n message: msg,\n text: extractTextFromMessage(msg),\n });\n } else if (msg.role === FactoryDroidMessageRole.User) {\n messages.push({\n type: DroidMessageType.User,\n message: msg,\n });\n } else {\n messages.push({\n type: 'create_message',\n messageId: msg.id,\n role: msg.role,\n content: msg.content,\n parentId: notification.parentId,\n });\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 case SessionNotificationType.HOOK_EXECUTION_STARTED:\n return notification.hookCommands.map((hookCommand) => ({\n type: DroidMessageType.Hook,\n hookId: notification.hookId,\n eventName: notification.hookEventName,\n matcher: notification.hookMatcher,\n toolCallId: notification.hookToolCallId,\n command: hookCommand.command,\n timeout: hookCommand.timeout,\n status: 'started',\n }));\n\n case SessionNotificationType.HOOK_EXECUTION_COMPLETED:\n return (notification.hookResults ?? []).map((hookResult) => ({\n type: DroidMessageType.Hook,\n hookId: notification.hookId,\n eventName: notification.hookEventName,\n matcher: notification.hookMatcher,\n toolCallId: notification.hookToolCallId,\n command: hookResult.command,\n timeout: hookResult.timeout,\n status: notification.hookStatus,\n exitCode: hookResult.exitCode,\n stdout: hookResult.stdout,\n stderr: hookResult.stderr,\n }));\n\n case SessionNotificationType.STRUCTURED_OUTPUT:\n return {\n type: 'structured_output',\n messageId: notification.messageId,\n structuredOutput: notification.structuredOutput,\n structuredOutputError: notification.structuredOutputError,\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 fullText = '';\n\n private finalAssistantText = '';\n\n private structuredOutput: JsonObject | null = null;\n\n private structuredOutputError: ServerStructuredOutputError | null = null;\n\n private errors: ErrorEvent[] = [];\n\n private numTurns = 0;\n\n private emittedMessages: DroidStreamEvent[] = [];\n\n private toolNameMap = new Map<string, string>();\n\n constructor(\n private readonly options: {\n sessionId?: string;\n startedAt?: number;\n hasOutputFormat?: boolean;\n } = {}\n ) {}\n\n private getToolName(toolUseId: string): string {\n return this.toolNameMap.get(toolUseId) ?? '';\n }\n\n processMessage(message: InternalDroidMessage): {\n message: InternalDroidMessage | null;\n additional: InternalDroidMessage[];\n } {\n const additional: InternalDroidMessage[] = [];\n\n if (message.type === 'tool_use') {\n this.toolNameMap.set(message.toolUseId, message.toolName);\n }\n\n if (message.type === DroidMessageType.ToolCall) {\n this.toolNameMap.set(message.toolUse.id, message.toolUse.name);\n }\n\n if (message.type === DroidMessageType.ToolCallDelta) {\n this.toolNameMap.set(message.toolUse.id, message.toolUse.name);\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.AssistantTextDelta) {\n this.fullText += message.text;\n }\n\n if (message.type === DroidMessageType.Assistant) {\n this.finalAssistantText = message.text;\n if (this.fullText.length === 0) {\n this.fullText = message.text;\n }\n }\n\n if (message.type === DroidMessageType.TokenUsageUpdate) {\n this.lastTokenUsage = message;\n }\n\n if (message.type === DroidMessageType.Error) {\n this.errors.push(message);\n }\n\n if (message.type === 'structured_output') {\n this.structuredOutput = message.structuredOutput;\n this.structuredOutputError = message.structuredOutputError;\n return { message: null, additional };\n }\n\n if (message.type === DroidMessageType.WorkingStateChanged) {\n if (message.state !== DroidWorkingState.Idle) {\n this.hasBeenNonIdle = true;\n } else if (this.hasBeenNonIdle) {\n this.numTurns++;\n additional.push(this.createResultMessage());\n this.hasBeenNonIdle = false;\n this.resetTurnState();\n }\n }\n\n if (message.type !== DroidMessageType.WorkingStateChanged) {\n this.trackEmittedMessage(message);\n }\n\n return { message, additional };\n }\n\n private createResultMessage(): DroidResultMessage {\n if (\n this.options.hasOutputFormat &&\n this.structuredOutput === null &&\n this.structuredOutputError === null\n ) {\n this.structuredOutput =\n parseJsonObject(this.finalAssistantText || this.fullText) ?? null;\n }\n\n const tokenUsage = this.lastTokenUsage\n ? stripTokenUsageType(this.lastTokenUsage)\n : null;\n const result = this.finalAssistantText || this.fullText;\n const base = {\n type: DroidMessageType.Result,\n sessionId: this.options.sessionId ?? '',\n durationMs: Date.now() - (this.options.startedAt ?? Date.now()),\n numTurns: this.numTurns,\n result,\n tokenUsage,\n messages: [...this.emittedMessages],\n text: result,\n turnCount: this.numTurns,\n };\n\n if (this.structuredOutputError) {\n return {\n ...base,\n subtype: 'error_structured_output',\n isError: true,\n success: false,\n errors: [this.structuredOutputError.message],\n structuredOutput: this.structuredOutput,\n structuredOutputError: this.structuredOutputError,\n error: null,\n };\n }\n\n if (this.errors.length > 0) {\n return {\n ...base,\n subtype: 'error_during_execution',\n isError: true,\n success: false,\n errors: this.errors.map((error) => error.message),\n structuredOutput: this.structuredOutput,\n structuredOutputError: null,\n error: this.errors[0] ?? null,\n };\n }\n\n return {\n ...base,\n subtype: 'success',\n isError: false,\n success: true,\n structuredOutput: this.structuredOutput,\n structuredOutputError: null,\n error: null,\n };\n }\n\n private trackEmittedMessage(message: InternalDroidMessage): void {\n if (isDefaultStreamMessage(message)) {\n this.emittedMessages.push(message);\n }\n }\n\n private resetTurnState(): void {\n this.lastTokenUsage = null;\n this.fullText = '';\n this.finalAssistantText = '';\n this.structuredOutput = null;\n this.structuredOutputError = null;\n this.errors = [];\n this.emittedMessages = [];\n }\n}\n\nexport function isInternalMessage(message: InternalDroidMessage): boolean {\n return (\n message.type === 'structured_output' ||\n message.type === 'tool_use' ||\n message.type === 'create_message'\n );\n}\n\nexport function isDefaultStreamMessage(\n message: InternalDroidMessage\n): message is DroidStreamMessage {\n return (\n message.type === DroidMessageType.Assistant ||\n message.type === DroidMessageType.User ||\n message.type === DroidMessageType.ToolCall ||\n message.type === DroidMessageType.ToolResult ||\n message.type === DroidMessageType.Hook ||\n message.type === DroidMessageType.Error ||\n message.type === DroidMessageType.Result\n );\n}\n\nfunction stripTokenUsageType(message: TokenUsageUpdate): TokenUsage {\n const {\n inputTokens,\n outputTokens,\n cacheCreationTokens,\n cacheReadTokens,\n thinkingTokens,\n } = message;\n return {\n inputTokens,\n outputTokens,\n cacheCreationTokens,\n cacheReadTokens,\n thinkingTokens,\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 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\nfunction extractTextFromMessage(message: FactoryDroidMessage): string {\n return message.content\n .filter((block) => block.type === 'text')\n .map((block) => block.text)\n .join('');\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 OutputFormat,\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 isDefaultStreamMessage,\n isInternalMessage,\n StreamStateTracker,\n} from './stream.js';\nimport type { DroidStreamEvent, InternalDroidMessage } 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: DroidStreamEvent[] = [];\n private readonly _onDone: (() => void) | undefined;\n private _resolveWaiting: (() => void) | null = null;\n private _done = false;\n private readonly _stateTracker: StreamStateTracker;\n\n constructor(\n onDone?: () => void,\n private readonly _options: {\n includePartialMessages?: boolean;\n sessionId?: string;\n startedAt?: number;\n outputFormat?: OutputFormat;\n } = {}\n ) {\n this._onDone = onDone;\n this._stateTracker = new StreamStateTracker({\n sessionId: _options.sessionId,\n startedAt: _options.startedAt,\n hasOutputFormat: _options.outputFormat !== undefined,\n });\n }\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 if (message && this._shouldYield(message)) {\n this._enqueue(message);\n }\n\n for (const extra of additional) {\n if (this._shouldYield(extra)) {\n this._enqueue(extra);\n }\n if (extra.type === DroidMessageType.Result) {\n this._signalDone();\n }\n }\n }\n };\n\n signalDone(): void {\n this._signalDone();\n }\n\n async *messages(): AsyncGenerator<DroidStreamEvent, 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.Result) {\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 _shouldYield(\n message: InternalDroidMessage\n ): message is DroidStreamEvent {\n if (isInternalMessage(message)) {\n return false;\n }\n return this._options.includePartialMessages\n ? true\n : isDefaultStreamMessage(message);\n }\n\n private _enqueue(msg: DroidStreamEvent): 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 const wasDone = this._done;\n this._done = true;\n if (!wasDone) {\n this._onDone?.();\n }\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 { 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 type {\n DroidResultMessage,\n DroidStreamEvent,\n DroidStreamMessage,\n} from './stream.js';\n\n/** Aggregated result from a one-shot {@link run} call. */\nexport type DroidResult = DroidResultMessage;\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 | '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 includePartialMessages?: boolean;\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\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 private readonly _activeBridges = new Set<MessageBridge>();\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 message-level events until the final `result` message. */\n stream(\n prompt: string,\n options?: MessageOptions & { includePartialMessages?: false }\n ): AsyncGenerator<DroidStreamMessage, void, undefined>;\n /** Yields message-level events plus partial chunks until the final `result` message. */\n stream(\n prompt: string,\n options: MessageOptions & { includePartialMessages: true }\n ): AsyncGenerator<DroidStreamEvent, void, undefined>;\n async *stream(\n prompt: string,\n options?: MessageOptions\n ): AsyncGenerator<DroidStreamEvent, void, undefined> {\n this._ensureNotClosed();\n throwIfAborted(options?.abortSignal);\n\n const startedAt = Date.now();\n let resolveDone: () => void = () => {};\n const donePromise = new Promise<void>((resolve) => {\n resolveDone = resolve;\n });\n const bridge = new MessageBridge(resolveDone, {\n includePartialMessages: options?.includePartialMessages,\n sessionId: this._sessionId,\n startedAt,\n outputFormat: options?.outputFormat,\n });\n this._activeBridges.add(bridge);\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: prompt,\n images: options?.images,\n files: options?.files,\n outputFormat: options?.outputFormat,\n }),\n donePromise,\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 this._activeBridges.delete(bridge);\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 for (const bridge of this._activeBridges) {\n bridge.signalDone();\n }\n\n try {\n await this._client.closeSession({ reason: 'other' }).catch(() => {});\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/**\n * Resumes an existing Droid session.\n *\n * The resumed session always runs in the working directory that was persisted\n * with the session at creation time. `resumeSession()` intentionally does not\n * accept a `cwd` option: the persisted session cwd is authoritative. The\n * underlying subprocess is launched in the host process's `process.cwd()`, but\n * this does not affect the session's working directory as far as the Droid is\n * concerned. To run in a different directory, create a new session or fork the\n * existing one.\n *\n * @throws {SessionNotFoundError} If the session ID does not exist.\n */\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';\nimport { DroidMessageType } from './stream.js';\n\nexport interface RunOptions\n extends\n CreateSessionOptions,\n Omit<MessageOptions, 'includePartialMessages'> {}\n\nexport async function run(\n prompt: string,\n options: RunOptions = {}\n): Promise<DroidResult> {\n const session = await createSession(options);\n\n try {\n for await (const msg of session.stream(prompt, {\n ...options,\n includePartialMessages: false,\n })) {\n if (msg.type === DroidMessageType.Result) {\n return msg;\n }\n }\n\n throw new Error('Stream completed without a result message');\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":"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","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","z","z","z","z","z","z","z","z","z","z","z","z","ToolUseBlockSchema","z","resolve","resolve","resolve","z","z","resolve"]}