@code-yeongyu/senpi 2026.8.31 → 2026.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/dist/core/extensions/builtin/compaction/context-pipeline.d.ts +6 -0
- package/dist/core/extensions/builtin/compaction/context-pipeline.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/context-pipeline.js +11 -0
- package/dist/core/extensions/builtin/compaction/context-pipeline.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.js +4 -4
- package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.d.ts +3 -0
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.d.ts.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js +108 -0
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/presets.js +11 -0
- package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.js +1 -0
- package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.d.ts +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.js +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.js.map +1 -1
- package/dist/core/retry-fallback/settings.d.ts.map +1 -1
- package/dist/core/retry-fallback/settings.js +1 -0
- package/dist/core/retry-fallback/settings.js.map +1 -1
- package/dist/main.d.ts +4 -4
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +10 -6
- package/dist/main.js.map +1 -1
- package/dist/modes/app-server/daemon/process.d.ts +13 -2
- package/dist/modes/app-server/daemon/process.d.ts.map +1 -1
- package/dist/modes/app-server/daemon/process.js +58 -12
- package/dist/modes/app-server/daemon/process.js.map +1 -1
- package/dist/modes/app-server/daemon.js +62 -4
- package/dist/modes/app-server/daemon.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +11 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +35 -6
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/tips/catalog/ethos-tips.js +1 -1
- package/dist/modes/interactive/tips/catalog/ethos-tips.js.map +1 -1
- package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
- package/dist/modes/rpc/connection-handler.js +8 -3
- package/dist/modes/rpc/connection-handler.js.map +1 -1
- package/dist/modes/rpc/custom-capability.d.ts +1 -0
- package/dist/modes/rpc/custom-capability.d.ts.map +1 -1
- package/dist/modes/rpc/custom-capability.js +1 -0
- package/dist/modes/rpc/custom-capability.js.map +1 -1
- package/dist/modes/rpc/host-ensure.d.ts.map +1 -1
- package/dist/modes/rpc/host-ensure.js +93 -17
- package/dist/modes/rpc/host-ensure.js.map +1 -1
- package/dist/modes/rpc/host-lifecycle.d.ts +15 -0
- package/dist/modes/rpc/host-lifecycle.d.ts.map +1 -1
- package/dist/modes/rpc/host-lifecycle.js +180 -55
- package/dist/modes/rpc/host-lifecycle.js.map +1 -1
- package/dist/modes/rpc/host-watchdog.d.ts +2 -2
- package/dist/modes/rpc/host-watchdog.d.ts.map +1 -1
- package/dist/modes/rpc/host-watchdog.js +89 -21
- package/dist/modes/rpc/host-watchdog.js.map +1 -1
- package/dist/modes/rpc/multi-session-host.d.ts.map +1 -1
- package/dist/modes/rpc/multi-session-host.js +94 -56
- package/dist/modes/rpc/multi-session-host.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +8 -1
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
- package/dist/modes/rpc/session-command-router.js +7 -2
- package/dist/modes/rpc/session-command-router.js.map +1 -1
- package/dist/modes/rpc/socket-transport.d.ts +13 -0
- package/dist/modes/rpc/socket-transport.d.ts.map +1 -0
- package/dist/modes/rpc/socket-transport.js +92 -0
- package/dist/modes/rpc/socket-transport.js.map +1 -0
- package/docs/extensions.md +1 -1
- package/docs/rpc.md +5 -1
- package/docs/settings.md +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +12 -0
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/google.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/groq.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opengateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +2 -2
- package/node_modules/@earendil-works/pi-pty/package.json +1 -1
- package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-handler.js","sourceRoot":"","sources":["../../../src/modes/rpc/connection-handler.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Per-connection RPC handler.\n *\n * This is the transport-independent core extracted from `runRpcMode`. It owns\n * exactly one AgentSession runtime and speaks the JSONL RPC protocol over an\n * injected output sink and a caller-driven line feed. It knows nothing about\n * `process.stdout`, `process.stdin`, or process signals — those belong to the\n * host (classic single-connection stdio in `rpc-mode.ts` or another transport\n * adapter).\n *\n * Behaviour is byte-for-byte identical to the original `runRpcMode` command\n * loop: the same responses, the same event stream, the same extension-UI\n * bridge, the same backpressure discipline. The only difference is that writes\n * go to `sink.writeRaw` instead of `writeRawStdout`, and the caller decides how\n * (and whether) to end the process.\n */\n\nimport * as crypto from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { basename, dirname, extname } from \"node:path\";\nimport type { OAuthProviderId } from \"@earendil-works/pi-ai/compat\";\nimport { VERSION } from \"../../config.ts\";\nimport type { AgentAbortSource } from \"../../core/agent-abort-provenance.ts\";\nimport type { AgentSession, PromptDisposition } from \"../../core/agent-session.ts\";\nimport type { AgentSessionRuntime } from \"../../core/agent-session-runtime.ts\";\nimport { buildLoginProviderInfos } from \"../../core/auth-providers.ts\";\nimport {\n\tgetCredentialAccounts,\n\tpinCredentialAccount,\n\tremoveCredentialAccount,\n} from \"../../core/credential-accounts.ts\";\nimport {\n\temitProviderAccountsChanged,\n\tsubscribeProviderAccountEvents,\n} from \"../../core/extensions/builtin/claude-sdk-oauth/account-events.ts\";\nimport { CLAUDE_SDK_OAUTH_PROVIDER_ID } from \"../../core/extensions/builtin/claude-sdk-oauth/account-management.ts\";\nimport {\n\tisMcpControlInventoryChanged,\n\tMCP_CONTROL_INVENTORY_CHANGED_EVENT,\n\tMCP_CONTROL_INVENTORY_REQUEST_EVENT,\n\ttype McpControlInventoryRequest,\n} from \"../../core/extensions/builtin/mcp/control-inventory.ts\";\nimport type { McpWireStatusServer, McpWireStatusSnapshot } from \"../../core/extensions/builtin/mcp/service-types.ts\";\nimport {\n\tapplyFastMode,\n\ttype FastModeContext,\n\tresolveServiceTierMemoryModel,\n} from \"../../core/extensions/builtin/service-tier.ts\";\nimport type {\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tWorkingIndicatorOptions,\n} from \"../../core/extensions/index.ts\";\nimport { FooterDataProvider } from \"../../core/footer-data-provider.ts\";\nimport { getSupportedThinkingLevels } from \"../../core/thinking-levels.ts\";\nimport { ProjectTrustStore } from \"../../core/trust-manager.ts\";\nimport { type Theme, theme } from \"../interactive/theme/theme.ts\";\nimport {\n\tbuildCustomUnsupportedRequest,\n\tDEFAULT_CUSTOM_EXTENSION_LABEL,\n\tEXTENSION_EVENTS_CAPABILITY,\n\tRENDERED_COMPONENTS_CAPABILITY,\n} from \"./custom-capability.ts\";\nimport { createRpcEventOutputBuffer } from \"./event-output-buffer.ts\";\nimport { buildRpcCommandsForSession, createCommandsChangedEvent, rpcCommandListDigest } from \"./rpc-command-surface.ts\";\nimport { rpcCommandPayloadError, rpcCommandShapeError, rpcMessageLengthError } from \"./rpc-input-validation.ts\";\nimport type {\n\tRpcAuthProvider,\n\tRpcCommand,\n\tRpcCommandInvocationEvent,\n\tRpcExtensionEvent,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcLoadedExtension,\n\tRpcLoadedMcpServer,\n\tRpcMcpServerStatus,\n\tRpcResponse,\n\tRpcSessionReplacedEvent,\n\tRpcSessionState,\n\tRpcSkillInvocationEvent,\n} from \"./rpc-types.ts\";\nimport { RENDERED_COMPONENT_RECORD } from \"./session-event-writer.ts\";\nimport { SessionExtensionUiRequests } from \"./session-extension-ui-requests.ts\";\nimport { createLiveComponentRenderer, type LiveComponentRenderer } from \"./widget-line-renderer.ts\";\n\n/** Additive per-connection options. Absent = classic default (byte-identical). */\nexport interface RpcConnectionOptions {\n\t/** Client capability flags from the handshake (e.g. custom_unsupported opt-in). */\n\tcapabilities?: readonly string[];\n\t/** Called instead of requesting process shutdown for a session-owned binding. */\n\tshutdownHandler?: () => void;\n\t/** Session registries own runtime disposal themselves. */\n\tdisposeRuntime?: boolean;\n\t/** Multi-session routing handle. Absent preserves classic wire output exactly. */\n\tsessionId?: string;\n\tfooterDataProviderFactory?: (session: AgentSession) => FooterDataProvider;\n\tsharedWidth?: {\n\t\tgetWidth: () => number;\n\t\tsetWidth: (connectionId: string | undefined, width: number) => void;\n\t\tclearWidth: (connectionId: string | undefined) => void;\n\t\tsetCapabilities?: (connectionId: string | undefined, capabilities: readonly string[]) => void;\n\t\thasRenderedComponents?: (sessionId: string) => boolean;\n\t\tconnectionId: () => string | undefined;\n\t\tonChange?: () => void;\n\t};\n}\n\n/**\n * The output side of a connection. `writeRaw` receives already-serialized JSONL\n * text (LF-terminated). `waitForBackpressure` lets the host apply flow control\n * (stdout drain in classic mode, or the transport's own `drain` signal).\n */\nfunction createFooterDataProvider(session: AgentSession): FooterDataProvider {\n\treturn new FooterDataProvider(session.sessionManager.getCwd());\n}\n\nexport interface RpcConnectionSink {\n\twriteRaw(chunk: string): void;\n\twaitForBackpressure(): Promise<void>;\n}\n\nexport interface RpcConnectionHandler {\n\t/**\n\t * Resolves once the initial session bind completes. Awaiting it guarantees the\n\t * extension UI context is installed (used by tests that drive ctx.ui directly).\n\t */\n\treadonly ready: Promise<void>;\n\t/** Feed one inbound JSONL line (command or extension_ui_response). */\n\thandleInputLine(line: string): Promise<void>;\n\trerenderComponents(): void;\n\t/**\n\t * True once an extension requested shutdown via the shutdown handler. The\n\t * host polls this after each command and decides how to tear down.\n\t */\n\tisShutdownRequested(): boolean;\n\t/** Cancel UI requests that can no longer be answered by this connection. */\n\tcancelPendingExtensionUiRequests(): void;\n\t/** Tear down subscriptions and dispose the runtime. Never calls process.exit. */\n\tdispose(): Promise<void>;\n}\n\nfunction loadedExtensionName(path: string): string {\n\tconst synthetic = /^<(?:builtin|inline):([^>]+)>$/.exec(path);\n\tif (synthetic) return synthetic[1];\n\tconst withoutExtension = basename(path, extname(path));\n\tif (withoutExtension !== \"index\") return withoutExtension;\n\tconst parent = dirname(path);\n\tconst parentName = basename(parent);\n\treturn parentName === \"src\" || parentName === \"dist\" ? basename(dirname(parent)) : parentName;\n}\n\nfunction loadedExtensions(session: AgentSession): RpcLoadedExtension[] {\n\treturn session.resourceLoader.getExtensions().extensions.map((extension) => ({\n\t\tname: loadedExtensionName(extension.path),\n\t\tpath: extension.path,\n\t\tsourceInfo: extension.sourceInfo,\n\t\tenabled: true,\n\t}));\n}\n\nfunction loadedMcpStatus(server: McpWireStatusServer): RpcMcpServerStatus {\n\tif (server.status !== undefined) return server.status;\n\tif (server.serverInfo !== null) return \"connected\";\n\tif (server.authStatus === \"notLoggedIn\") return \"needs_auth\";\n\treturn \"enabled\";\n}\n\n/**\n * Project one session into the wire state shape.\n *\n * Shared with `open_session` (session-command-router) so both surfaces answer with the SAME\n * fields: a second hand-rolled literal silently drifts, which is how `serviceTier`/`fastMode`\n * would otherwise be missing from an opened session's initial state.\n *\n * `lastAbortSource` is passed in rather than read from the session: `session.currentAbortSource`\n * is cleared once the turn settles, so only the caller that observed `agent_end` still knows\n * who owned the abort.\n */\nexport function buildRpcSessionState(session: AgentSession, lastAbortSource?: AgentAbortSource): RpcSessionState {\n\tconst cwd = session.sessionManager.getCwd();\n\t// Trust gates project-source settings (shell prefixes, project resources), so every\n\t// session state projection must have an authoritative store to consult.\n\tif (!session.agentDir) {\n\t\tthrow new Error(\"RPC session invariant violated: agentDir is required\");\n\t}\n\tconst projectTrusted = new ProjectTrustStore(session.agentDir).get(cwd) === true;\n\treturn {\n\t\tmodel: session.model,\n\t\tthinkingLevel: session.thinkingLevel,\n\t\t...(session.thinkingSelection ? { thinkingSelection: session.thinkingSelection } : {}),\n\t\t...(lastAbortSource ? { lastAbortSource } : {}),\n\t\tserviceTier: session.effectiveServiceTier,\n\t\tfastMode: session.isFastModeActive(),\n\t\tisStreaming: session.isStreaming,\n\t\tisCompacting: session.isCompacting,\n\t\tretryAttempt: session.retryAttempt,\n\t\tisBashRunning: session.isBashRunning,\n\t\tsteeringMode: session.steeringMode,\n\t\tfollowUpMode: session.followUpMode,\n\t\tsessionFile: session.sessionFile,\n\t\tsessionId: session.sessionId,\n\t\tsessionName: session.sessionName,\n\t\tcwd,\n\t\tprojectTrusted,\n\t\t...(session.sessionFile &&\n\t\t!existsSync(session.sessionFile) &&\n\t\tsession.sessionManager\n\t\t\t.getEntries()\n\t\t\t.some((entry) => entry.type !== \"model_change\" && entry.type !== \"thinking_level_change\")\n\t\t\t? { entries: session.sessionManager.getEntries() }\n\t\t\t: {}),\n\t\tsteering: typeof session.getSteeringMessages === \"function\" ? [...session.getSteeringMessages()] : [],\n\t\tfollowUp: typeof session.getFollowUpMessages === \"function\" ? [...session.getFollowUpMessages()] : [],\n\t\tordered: [\n\t\t\t...((\n\t\t\t\tsession as unknown as {\n\t\t\t\t\t_queuedInputOrder?: Array<{ text: string; mode: \"steer\" | \"followUp\"; enqueueOrder: number }>;\n\t\t\t\t}\n\t\t\t)._queuedInputOrder ?? []),\n\t\t].sort((a, b) => a.enqueueOrder - b.enqueueOrder),\n\t\tautoCompactionEnabled: session.autoCompactionEnabled,\n\t\tmessageCount: session.messages.length,\n\t\tpendingMessageCount: session.pendingMessageCount,\n\t\tusageTotals: session.sessionManager.getUsageTotals(),\n\t\tcontextUsage: typeof session.getContextUsage === \"function\" ? session.getContextUsage() : undefined,\n\t\tfavoriteModels: session.favoriteModels?.map((entry) => ({ ...entry })) ?? [],\n\t\tscopedModels: session.scopedModels?.map((entry) => ({ ...entry })) ?? [],\n\t};\n}\n\nfunction loadedMcpServers(snapshot: McpWireStatusSnapshot): RpcLoadedMcpServer[] {\n\treturn snapshot.servers.map((server) => ({\n\t\tname: server.name,\n\t\ttoolCount: server.tools.length,\n\t\tstatus: loadedMcpStatus(server),\n\t\tauthStatus: server.authStatus,\n\t}));\n}\n\nfunction loadedSurfacesFingerprint(\n\tsession: AgentSession,\n\textensions: readonly RpcLoadedExtension[],\n\tmcpServers: readonly RpcLoadedMcpServer[],\n): string {\n\treturn JSON.stringify({\n\t\tskills: session.resourceLoader.getSkills().skills.map((skill) => ({\n\t\t\tname: skill.name,\n\t\t\tpath: skill.filePath,\n\t\t\tsourceInfo: skill.sourceInfo,\n\t\t\tenabled: !skill.disableModelInvocation,\n\t\t})),\n\t\textensions,\n\t\tmcpServers,\n\t});\n}\n\n/**\n * Create a per-connection RPC handler bound to one runtime host and one sink.\n *\n * This performs the initial `rebindSession()` and returns synchronously with a\n * handler whose `handleInputLine` is ready to use. Signal handling, stdin\n * wiring, and process exit are intentionally NOT done here.\n */\nexport function createRpcConnectionHandler(\n\truntimeHost: AgentSessionRuntime,\n\tsink: RpcConnectionSink,\n\toptions: RpcConnectionOptions = {},\n): RpcConnectionHandler {\n\tlet clientCapabilities = options.capabilities;\n\tconst routingSessionId = options.sessionId;\n\tconst clientWidth = () => options.sharedWidth?.getWidth() ?? 80;\n\tconst hasRenderedComponents = () =>\n\t\t(options.sharedWidth?.hasRenderedComponents?.(routingSessionId ?? \"\") ?? false) ||\n\t\t(clientCapabilities?.includes(RENDERED_COMPONENTS_CAPABILITY) ?? false);\n\tconst liveRenderers = new Map<string, LiveComponentRenderer>();\n\tconst retainedRendererFactories = new Map<string, () => void>();\n\tconst footerProviders = new Map<string, FooterDataProvider>();\n\tconst disposeRenderer = (key: string) => {\n\t\tliveRenderers.get(key)?.dispose();\n\t\tliveRenderers.delete(key);\n\t\tfooterProviders.get(key)?.dispose();\n\t\tfooterProviders.delete(key);\n\t};\n\tconst disposeAllRenderers = () => {\n\t\tfor (const renderer of liveRenderers.values()) renderer.dispose();\n\t\tfor (const provider of footerProviders.values()) provider.dispose();\n\t\tliveRenderers.clear();\n\t\tfooterProviders.clear();\n\t};\n\t// True only while THIS connection's own command drives a replacement; the issuer\n\t// already learns the new identity from its command response.\n\tlet replacementIssuedHere = false;\n\tlet session = runtimeHost.session;\n\tlet unsubscribe: (() => void) | undefined;\n\tlet unsubscribeBackpressure: (() => void) | undefined;\n\tlet unsubscribeLoadedSurfaces: (() => void) | undefined;\n\tlet unsubscribeExtensionEvents: (() => void) | undefined;\n\tlet mcpWireStatus: McpWireStatusSnapshot = { servers: [] };\n\t/** Abort owner of the last settled turn; `session.currentAbortSource` clears on settle. */\n\tlet lastAbortSource: AgentAbortSource | undefined;\n\tlet loadedSurfacesDigest: string | undefined;\n\tlet rpcCommandsDigest: string | undefined;\n\tlet suppressLoadedSurfaceEvents = false;\n\tconst eventOutput = createRpcEventOutputBuffer(sink.writeRaw);\n\n\tconst tagSessionRecord = <T extends object>(value: T): T | (T & { sessionId: string }) =>\n\t\troutingSessionId === undefined ? value : { ...value, sessionId: routingSessionId };\n\n\tconst output = (obj: RpcResponse | RpcExtensionUIRequest | object) => {\n\t\teventOutput.writeImmediate(tagSessionRecord(obj));\n\t};\n\n\tconst outputEvent = (event: object) => {\n\t\teventOutput.enqueueEvent(tagSessionRecord(event));\n\t};\n\n\tconst currentLoadedSurfaces = (): {\n\t\tdata: { extensions: RpcLoadedExtension[]; mcpServers: RpcLoadedMcpServer[] };\n\t\tdigest: string;\n\t} => {\n\t\tconst extensions = loadedExtensions(session);\n\t\tconst mcpServers = loadedMcpServers(mcpWireStatus);\n\t\treturn {\n\t\t\tdata: { extensions, mcpServers },\n\t\t\tdigest: loadedSurfacesFingerprint(session, extensions, mcpServers),\n\t\t};\n\t};\n\n\tconst recordLoadedSurfaces = (emitChange: boolean): ReturnType<typeof currentLoadedSurfaces> => {\n\t\tconst current = currentLoadedSurfaces();\n\t\tconst changed = loadedSurfacesDigest !== undefined && loadedSurfacesDigest !== current.digest;\n\t\tloadedSurfacesDigest = current.digest;\n\t\tif (emitChange && changed && !suppressLoadedSurfaceEvents) {\n\t\t\toutputEvent({ type: \"loaded_surfaces_changed\" });\n\t\t}\n\t\treturn current;\n\t};\n\n\tconst requestMcpWireStatus = async (): Promise<void> => {\n\t\tlet response: Promise<McpWireStatusSnapshot> | undefined;\n\t\tconst request: McpControlInventoryRequest = {\n\t\t\tsessionId: session.sessionId,\n\t\t\trespond(snapshot) {\n\t\t\t\tresponse ??= snapshot;\n\t\t\t},\n\t\t};\n\t\tsession.resourceLoader.emitExtensionEvent?.(MCP_CONTROL_INVENTORY_REQUEST_EVENT, request);\n\t\tmcpWireStatus = response === undefined ? { servers: [] } : await response;\n\t};\n\n\tconst subscribeLoadedSurfaceEvents = (): void => {\n\t\tunsubscribeLoadedSurfaces?.();\n\t\tunsubscribeLoadedSurfaces = session.resourceLoader.onExtensionEvent?.(\n\t\t\tMCP_CONTROL_INVENTORY_CHANGED_EVENT,\n\t\t\t(data) => {\n\t\t\t\tif (!isMcpControlInventoryChanged(data) || data.sessionId !== session.sessionId) return;\n\t\t\t\tmcpWireStatus = data.snapshot;\n\t\t\t\tif (!suppressLoadedSurfaceEvents) recordLoadedSurfaces(true);\n\t\t\t},\n\t\t);\n\t};\n\n\tconst unsubscribeProviderAccountEvents = subscribeProviderAccountEvents((event) => {\n\t\tif (event.type === \"accounts_changed\") {\n\t\t\toutputEvent({ type: \"auth_accounts_changed\", provider: event.provider });\n\t\t\treturn;\n\t\t}\n\t\toutputEvent({\n\t\t\ttype: \"account_failover\",\n\t\t\tprovider: event.provider,\n\t\t\tfrom: event.from,\n\t\t\tto: event.to,\n\t\t\treason: event.reason,\n\t\t});\n\t});\n\n\tconst waitForRpcBackpressure = async (): Promise<void> => {\n\t\teventOutput.flushEvents();\n\t\tawait sink.waitForBackpressure();\n\t};\n\n\tconst success = <T extends RpcCommand[\"type\"]>(id: string | undefined, command: T, data?: unknown): RpcResponse => {\n\t\tif (data === undefined) {\n\t\t\treturn { id, type: \"response\", command, success: true } as RpcResponse;\n\t\t}\n\t\treturn { id, type: \"response\", command, success: true, data } as RpcResponse;\n\t};\n\n\tconst error = (\n\t\tid: string | undefined,\n\t\tcommand: string,\n\t\tmessage: string,\n\t\terrorCode?: string,\n\t\terrorData?: unknown,\n\t): RpcResponse => {\n\t\treturn {\n\t\t\tid,\n\t\t\ttype: \"response\",\n\t\t\tcommand,\n\t\t\tsuccess: false,\n\t\t\terror: message,\n\t\t\t...(errorCode ? { errorCode } : {}),\n\t\t\t...(errorData === undefined ? {} : { errorData }),\n\t\t};\n\t};\n\n\t// Pending extension UI requests waiting for response\n\tconst pendingExtensionRequests = new SessionExtensionUiRequests();\n\n\tlet shutdownRequested = false;\n\n\t// In-flight OAuth logins, keyed by provider. login_start registers one; the\n\t// login promise clears it on completion; login_cancel aborts it. The flow is\n\t// fire-command-then-subscribe: login_start responds immediately and the URL +\n\t// terminal result arrive as auth_login_url / auth_login_end events.\n\tconst activeLogins = new Map<string, AbortController>();\n\n\t/** Helper for dialog methods with signal/timeout support */\n\tfunction createDialogPromise<T>(\n\t\topts: ExtensionUIDialogOptions | undefined,\n\t\tdefaultValue: T,\n\t\trequest: Record<string, unknown>,\n\t\tparseResponse: (response: RpcExtensionUIResponse) => T,\n\t): Promise<T> {\n\t\tif (opts?.signal?.aborted) return Promise.resolve(defaultValue);\n\n\t\tconst id = crypto.randomUUID();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n\t\t\tconst cleanup = () => {\n\t\t\t\tif (timeoutId) clearTimeout(timeoutId);\n\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tpendingExtensionRequests.delete(id);\n\t\t\t};\n\n\t\t\tconst onAbort = () => {\n\t\t\t\tcleanup();\n\t\t\t\tresolve(defaultValue);\n\t\t\t};\n\t\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\t\tif (opts?.timeout) {\n\t\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\t\tcleanup();\n\t\t\t\t\tresolve(defaultValue);\n\t\t\t\t}, opts.timeout);\n\t\t\t}\n\n\t\t\tpendingExtensionRequests.set(id, {\n\t\t\t\tresolve: (response: RpcExtensionUIResponse) => {\n\t\t\t\t\tcleanup();\n\t\t\t\t\tresolve(parseResponse(response));\n\t\t\t\t},\n\t\t\t\treject,\n\t\t\t});\n\t\t\toutput({ type: \"extension_ui_request\", id, ...request } as RpcExtensionUIRequest);\n\t\t});\n\t}\n\n\t/**\n\t * Create an extension UI context that uses the RPC protocol.\n\t */\n\tconst createExtensionUIContext = (): ExtensionUIContext => ({\n\t\tselect: (title, options, opts) =>\n\t\t\tcreateDialogPromise(opts, undefined, { method: \"select\", title, options, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? undefined : \"value\" in r ? r.value : undefined,\n\t\t\t),\n\n\t\tconfirm: (title, message, opts) =>\n\t\t\tcreateDialogPromise(opts, false, { method: \"confirm\", title, message, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? false : \"confirmed\" in r ? r.confirmed : false,\n\t\t\t),\n\n\t\tinput: (title, placeholder, opts) =>\n\t\t\tcreateDialogPromise(opts, undefined, { method: \"input\", title, placeholder, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? undefined : \"value\" in r ? r.value : undefined,\n\t\t\t),\n\n\t\tnotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void {\n\t\t\t// Fire and forget - no response needed\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"notify\",\n\t\t\t\tmessage,\n\t\t\t\tnotifyType: type,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tonTerminalInput(): () => void {\n\t\t\t// Raw terminal input not supported in RPC mode\n\t\t\treturn () => {};\n\t\t},\n\n\t\tsetStatus(key: string, text: string | undefined): void {\n\t\t\t// Fire and forget - no response needed\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"setStatus\",\n\t\t\t\tstatusKey: key,\n\t\t\t\tstatusText: text,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tsetWorkingMessage(_message?: string): void {\n\t\t\t// Working message not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetWorkingVisible(_visible: boolean): void {\n\t\t\t// Working visibility not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetWorkingIndicator(_options?: WorkingIndicatorOptions): void {\n\t\t\t// Working indicator customization not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetHiddenThinkingLabel(_label?: string): void {\n\t\t\t// Hidden thinking label not supported in RPC mode - requires TUI message rendering access\n\t\t},\n\n\t\tsetWidget(key: string, content: unknown, options?: ExtensionWidgetOptions): void {\n\t\t\tdisposeRenderer(key);\n\t\t\tretainedRendererFactories.delete(key);\n\t\t\tif (content === undefined || Array.isArray(content)) {\n\t\t\t\toutput({\n\t\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\tmethod: \"setWidget\",\n\t\t\t\t\twidgetKey: key,\n\t\t\t\t\twidgetLines: content as string[] | undefined,\n\t\t\t\t\twidgetPlacement: options?.placement,\n\t\t\t\t} as RpcExtensionUIRequest);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tretainedRendererFactories.set(key, () => {\n\t\t\t\tconst renderer = createLiveComponentRenderer({\n\t\t\t\t\tfactory: content as (\n\t\t\t\t\t\ttui: import(\"@earendil-works/pi-tui\").TUI,\n\t\t\t\t\t\tthm: Theme,\n\t\t\t\t\t) => import(\"@earendil-works/pi-tui\").Component,\n\t\t\t\t\tgetWidth: clientWidth,\n\t\t\t\t\temit: (widgetLines) =>\n\t\t\t\t\t\toutput({\n\t\t\t\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\t\t\tmethod: \"setWidget\",\n\t\t\t\t\t\t\twidgetKey: key,\n\t\t\t\t\t\t\twidgetLines,\n\t\t\t\t\t\t\twidgetPlacement: options?.placement,\n\t\t\t\t\t\t\t[RENDERED_COMPONENT_RECORD]: true,\n\t\t\t\t\t\t} as RpcExtensionUIRequest),\n\t\t\t\t});\n\t\t\t\tif (renderer) liveRenderers.set(key, renderer);\n\t\t\t});\n\t\t\tif (hasRenderedComponents()) retainedRendererFactories.get(key)!();\n\t\t},\n\n\t\tsetFooter(factory: unknown): void {\n\t\t\tconst key = \"__footer__\";\n\t\t\tdisposeRenderer(key);\n\t\t\tretainedRendererFactories.delete(key);\n\t\t\tif (factory === undefined) {\n\t\t\t\tif (hasRenderedComponents())\n\t\t\t\t\toutput({\n\t\t\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\t\tmethod: \"setFooter\",\n\t\t\t\t\t\twidgetLines: undefined,\n\t\t\t\t\t} as RpcExtensionUIRequest);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tretainedRendererFactories.set(key, () => {\n\t\t\t\tconst provider = options.footerDataProviderFactory?.(session) ?? createFooterDataProvider(session);\n\t\t\t\tconst renderer = createLiveComponentRenderer({\n\t\t\t\t\tfactory: factory as never,\n\t\t\t\t\tfactoryArgs: [provider],\n\t\t\t\t\tgetWidth: clientWidth,\n\t\t\t\t\temit: (widgetLines) =>\n\t\t\t\t\t\toutput({\n\t\t\t\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\t\t\tmethod: \"setFooter\",\n\t\t\t\t\t\t\twidgetLines,\n\t\t\t\t\t\t\t[RENDERED_COMPONENT_RECORD]: true,\n\t\t\t\t\t\t} as RpcExtensionUIRequest),\n\t\t\t\t});\n\t\t\t\tif (renderer) {\n\t\t\t\t\tliveRenderers.set(key, renderer);\n\t\t\t\t\tfooterProviders.set(key, provider);\n\t\t\t\t} else provider.dispose();\n\t\t\t});\n\t\t\tif (hasRenderedComponents()) retainedRendererFactories.get(key)!();\n\t\t},\n\n\t\tsetHeader(factory: unknown): void {\n\t\t\tconst key = \"__header__\";\n\t\t\tdisposeRenderer(key);\n\t\t\tretainedRendererFactories.delete(key);\n\t\t\tif (factory === undefined) {\n\t\t\t\tif (hasRenderedComponents())\n\t\t\t\t\toutput({\n\t\t\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\t\tmethod: \"setHeader\",\n\t\t\t\t\t\twidgetLines: undefined,\n\t\t\t\t\t} as RpcExtensionUIRequest);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tretainedRendererFactories.set(key, () => {\n\t\t\t\tconst renderer = createLiveComponentRenderer({\n\t\t\t\t\tfactory: factory as never,\n\t\t\t\t\tgetWidth: clientWidth,\n\t\t\t\t\temit: (widgetLines) =>\n\t\t\t\t\t\toutput({\n\t\t\t\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\t\t\tmethod: \"setHeader\",\n\t\t\t\t\t\t\twidgetLines,\n\t\t\t\t\t\t\t[RENDERED_COMPONENT_RECORD]: true,\n\t\t\t\t\t\t} as RpcExtensionUIRequest),\n\t\t\t\t});\n\t\t\t\tif (renderer) liveRenderers.set(key, renderer);\n\t\t\t});\n\t\t\tif (hasRenderedComponents()) retainedRendererFactories.get(key)!();\n\t\t},\n\n\t\tsetTitle(title: string): void {\n\t\t\t// Fire and forget - host can implement terminal title control\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"setTitle\",\n\t\t\t\ttitle,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tasync custom() {\n\t\t\t// Custom UI cannot be rendered in RPC mode. By default this returns\n\t\t\t// undefined synchronously with NO wire message — byte-identical to the\n\t\t\t// original behavior. ONLY when the client advertised the\n\t\t\t// \"custom_unsupported\" capability do we emit an additive notice request\n\t\t\t// so an opt-in client can render a \"requires the classic TUI\" dialog before\n\t\t\t// returning undefined. The name is best-effort: ctx.ui.custom carries no\n\t\t\t// extension identity, so a generic label is used.\n\t\t\tconst request = buildCustomUnsupportedRequest(clientCapabilities, DEFAULT_CUSTOM_EXTENSION_LABEL);\n\t\t\tif (request) {\n\t\t\t\toutput(request);\n\t\t\t}\n\t\t\treturn undefined as never;\n\t\t},\n\n\t\tpasteToEditor(text: string): void {\n\t\t\t// Paste handling not supported in RPC mode - falls back to setEditorText\n\t\t\tthis.setEditorText(text);\n\t\t},\n\n\t\tsetEditorText(text: string): void {\n\t\t\t// Fire and forget - host can implement editor control\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"set_editor_text\",\n\t\t\t\ttext,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tgetEditorText(): string {\n\t\t\t// Synchronous method can't wait for RPC response\n\t\t\t// Host should track editor state locally if needed\n\t\t\treturn \"\";\n\t\t},\n\n\t\tasync editor(title: string, prefill?: string): Promise<string | undefined> {\n\t\t\tconst id = crypto.randomUUID();\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tpendingExtensionRequests.set(id, {\n\t\t\t\t\tresolve: (response: RpcExtensionUIResponse) => {\n\t\t\t\t\t\tif (\"cancelled\" in response && response.cancelled) {\n\t\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\t} else if (\"value\" in response) {\n\t\t\t\t\t\t\tresolve(response.value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\treject,\n\t\t\t\t});\n\t\t\t\toutput({ type: \"extension_ui_request\", id, method: \"editor\", title, prefill } as RpcExtensionUIRequest);\n\t\t\t});\n\t\t},\n\n\t\taddAutocompleteProvider(): void {\n\t\t\t// Autocomplete provider composition is not supported in RPC mode\n\t\t},\n\n\t\tsetEditorComponent(): void {\n\t\t\t// Custom editor components not supported in RPC mode\n\t\t},\n\n\t\tgetEditorComponent() {\n\t\t\t// Custom editor components not supported in RPC mode\n\t\t\treturn undefined;\n\t\t},\n\n\t\tget theme() {\n\t\t\treturn theme;\n\t\t},\n\n\t\tgetAllThemes() {\n\t\t\treturn [];\n\t\t},\n\n\t\tgetTheme(_name: string) {\n\t\t\treturn undefined;\n\t\t},\n\n\t\tsetTheme(_theme: string | Theme) {\n\t\t\t// Theme switching not supported in RPC mode\n\t\t\treturn { success: false, error: \"Theme switching not supported in RPC mode\" };\n\t\t},\n\n\t\tgetToolsExpanded() {\n\t\t\t// Tool expansion not supported in RPC mode - no TUI\n\t\t\treturn false;\n\t\t},\n\n\t\tsetToolsExpanded(_expanded: boolean) {\n\t\t\t// Tool expansion not supported in RPC mode - no TUI\n\t\t},\n\t});\n\n\tconst refreshLoadedSurfacesAfter = async (operation: () => Promise<void>, resetMcp: boolean): Promise<void> => {\n\t\tconst previousDigest = loadedSurfacesDigest;\n\t\tconst wasSuppressed = suppressLoadedSurfaceEvents;\n\t\tsuppressLoadedSurfaceEvents = true;\n\t\tif (resetMcp) mcpWireStatus = { servers: [] };\n\t\tlet commandsChanged: ReturnType<typeof createCommandsChangedEvent>;\n\t\ttry {\n\t\t\tawait operation();\n\t\t\tawait requestMcpWireStatus();\n\t\t\tloadedSurfacesDigest = currentLoadedSurfaces().digest;\n\t\t\tconst commands = buildRpcCommandsForSession(session);\n\t\t\tcommandsChanged = createCommandsChangedEvent(rpcCommandsDigest, commands);\n\t\t\trpcCommandsDigest = rpcCommandListDigest(commands);\n\t\t} finally {\n\t\t\tsuppressLoadedSurfaceEvents = wasSuppressed;\n\t\t}\n\t\tif (!wasSuppressed && commandsChanged) {\n\t\t\toutputEvent(commandsChanged);\n\t\t}\n\t\tif (!wasSuppressed && previousDigest !== undefined && previousDigest !== loadedSurfacesDigest) {\n\t\t\toutputEvent({ type: \"loaded_surfaces_changed\" });\n\t\t}\n\t};\n\n\truntimeHost.setRebindSession(async () => {\n\t\t// AgentSessionRuntime invokes this callback while completing a replacement.\n\t\t// Do not await extension binding here: extensions may wait for session work\n\t\t// that the replacement still owns. The command response must acknowledge the\n\t\t// committed replacement; derived surfaces refresh out of band afterwards.\n\t\tawait rebindSession(true);\n\t});\n\n\tconst rebindAfterLocalReplacement = async (): Promise<void> => {\n\t\treplacementIssuedHere = true;\n\t\ttry {\n\t\t\tawait rebindSession();\n\t\t} finally {\n\t\t\treplacementIssuedHere = false;\n\t\t}\n\t};\n\n\tconst rebindSession = async (deferRefresh = false): Promise<void> => {\n\t\tunsubscribeLoadedSurfaces?.();\n\t\tunsubscribeExtensionEvents?.();\n\t\tconst replacedSession = session !== runtimeHost.session;\n\t\tsession = runtimeHost.session;\n\t\tif (replacedSession) {\n\t\t\tlastAbortSource = undefined;\n\t\t\tif (routingSessionId !== undefined || !replacementIssuedHere) {\n\t\t\t\t// A replacement can be driven by ANY attached client, so every connection must be\n\t\t\t\t// told the live binding moved and given the new authoritative identity. Emitted\n\t\t\t\t// before the derived-surface refresh so a client cannot act on the old identity in\n\t\t\t\t// the window the refresh takes.\n\t\t\t\toutputEvent({\n\t\t\t\t\ttype: \"session_replaced\",\n\t\t\t\t\tdurableSessionId: session.sessionId,\n\t\t\t\t\tsessionFile: session.sessionFile,\n\t\t\t\t\tcwd: session.sessionManager.getCwd(),\n\t\t\t\t\tsessionName: session.sessionName,\n\t\t\t\t} satisfies RpcSessionReplacedEvent);\n\t\t\t}\n\t\t}\n\t\tunsubscribeExtensionEvents = clientCapabilities?.includes(EXTENSION_EVENTS_CAPABILITY)\n\t\t\t? session.extensionRunner.onRpcEvent(({ name, data }) => {\n\t\t\t\t\toutputEvent({ type: \"extension_event\", name, data } satisfies RpcExtensionEvent);\n\t\t\t\t})\n\t\t\t: undefined;\n\t\tsubscribeLoadedSurfaceEvents();\n\t\t// Subscribe to the replaced session before its bind runs, not after. The bind\n\t\t// is deferred by design - awaiting it would deadlock a client whose\n\t\t// session_start handler blocks on an extension_ui_request it cannot answer\n\t\t// while still awaiting the replacement response - and it still mutates the\n\t\t// session it owns: pi-rules appends a durable scan entry from session_start.\n\t\t// Those entries must reach every attached connection, and nothing else can\n\t\t// carry them, because the session file is not written until an assistant\n\t\t// message exists, so a client that misses the notification can never\n\t\t// reconstruct the session it is bound to. Installing here also drops the\n\t\t// previous session's subscription immediately instead of after the bind.\n\t\tinstallSessionSubscriptions();\n\t\tconst refresh = refreshLoadedSurfacesAfter(\n\t\t\t() =>\n\t\t\t\tsession.bindExtensions({\n\t\t\t\t\tuiContext: createExtensionUIContext(),\n\t\t\t\t\tmode: \"rpc\",\n\t\t\t\t\tcommandContextActions: {\n\t\t\t\t\t\twaitForIdle: () => session.agent.waitForIdle(),\n\t\t\t\t\t\tnewSession: async (options) => runtimeHost.newSession(options),\n\t\t\t\t\t\tfork: async (entryId, forkOptions) => {\n\t\t\t\t\t\t\tconst result = await runtimeHost.fork(entryId, forkOptions);\n\t\t\t\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnavigateTree: async (targetId, options) => {\n\t\t\t\t\t\t\tconst result = await session.navigateTree(targetId, {\n\t\t\t\t\t\t\t\tsummarize: options?.summarize,\n\t\t\t\t\t\t\t\tcustomInstructions: options?.customInstructions,\n\t\t\t\t\t\t\t\treplaceInstructions: options?.replaceInstructions,\n\t\t\t\t\t\t\t\tlabel: options?.label,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t\t\t\t},\n\t\t\t\t\t\tswitchSession: async (sessionPath, options) => {\n\t\t\t\t\t\t\treturn runtimeHost.switchSession(sessionPath, options);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treload: async () => {\n\t\t\t\t\t\t\tawait refreshLoadedSurfacesAfter(async () => {\n\t\t\t\t\t\t\t\tawait session.reload();\n\t\t\t\t\t\t\t}, false);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tshutdownHandler: () => {\n\t\t\t\t\t\tif (options.shutdownHandler) {\n\t\t\t\t\t\t\toptions.shutdownHandler();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tshutdownRequested = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonError: (err) => {\n\t\t\t\t\t\toutput({\n\t\t\t\t\t\t\ttype: \"extension_error\",\n\t\t\t\t\t\t\textensionPath: err.extensionPath,\n\t\t\t\t\t\t\tevent: err.event,\n\t\t\t\t\t\t\terror: err.error,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\ttrue,\n\t\t);\n\t\tfunction installSessionSubscriptions(): void {\n\t\t\tunsubscribe?.();\n\t\t\tunsubscribeBackpressure?.();\n\t\t\tunsubscribe = session.subscribe((event) => {\n\t\t\t\tif (event.type === \"skill_invocation\") {\n\t\t\t\t\toutputEvent(event satisfies RpcSkillInvocationEvent);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (event.type === \"command_invocation\") {\n\t\t\t\t\toutputEvent(event satisfies RpcCommandInvocationEvent);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (event.type === \"thinking_level_changed\" || event.type === \"model_changed\") {\n\t\t\t\t\t// Core emits the effective level only; the selection provenance lives beside it\n\t\t\t\t\t// on the session and is what distinguishes an explicit choice from a default.\n\t\t\t\t\tconst thinkingSelection = session.thinkingSelection;\n\t\t\t\t\toutputEvent(thinkingSelection === undefined ? event : { ...event, thinkingSelection });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (event.type === \"agent_end\") {\n\t\t\t\t\t// The subscribe-path `agent_end` carries only { type, messages, willRetry };\n\t\t\t\t\t// the abort provenance the extension hook receives is stripped from it. Read\n\t\t\t\t\t// it from the session, which still reports the owner at this point, and retain\n\t\t\t\t\t// it for `get_state` because the getter clears once the turn settles.\n\t\t\t\t\tconst abortSource = session.currentAbortSource;\n\t\t\t\t\tif (abortSource !== undefined) lastAbortSource = abortSource;\n\t\t\t\t\toutputEvent(abortSource === undefined ? event : { ...event, aborted: true, abortSource });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\toutputEvent(event);\n\t\t\t});\n\t\t\tunsubscribeBackpressure = session.agent.subscribe(async () => {\n\t\t\t\tawait waitForRpcBackpressure();\n\t\t\t});\n\t\t}\n\t\tif (deferRefresh) {\n\t\t\t// The subscription is already installed on the replaced session above, so\n\t\t\t// the deferred refresh only needs its failure reported. Re-installing here\n\t\t\t// would replay the settings-source selection a second time.\n\t\t\tvoid refresh.catch((cause) => {\n\t\t\t\toutputEvent({ type: \"rpc_error\", error: String(cause) });\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tawait refresh;\n\t};\n\n\t/**\n\t * Drive an OAuth login for one provider as fire-command-then-subscribe.\n\t *\n\t * Reuses AuthStorage.login (the same callbacks the classic TUI uses). Only the\n\t * URL-based happy path is surfaced over RPC: onAuth emits an auth_login_url\n\t * event; success/failure/cancel emit a single auth_login_end event. Callbacks\n\t * that need interactive mid-flow input (onPrompt/onSelect/onManualCodeInput)\n\t * are not answerable in the event-only model, so they reject cleanly. Clients\n\t * use the browser/callback-server completion path. Secrets are never emitted:\n\t * only the provider id, the auth URL, and a success flag (plus a\n\t * non-secret error message) cross the wire.\n\t */\n\tconst startLogin = async (provider: string): Promise<void> => {\n\t\t// A second login_start for the same provider aborts the prior attempt.\n\t\tactiveLogins.get(provider)?.abort();\n\t\tconst controller = new AbortController();\n\t\tactiveLogins.set(provider, controller);\n\n\t\tconst rejectInteractive = (): never => {\n\t\t\tthrow new Error(\"Interactive login input is not supported over RPC\");\n\t\t};\n\n\t\ttry {\n\t\t\tawait session.modelRegistry.authStorage.login(provider as OAuthProviderId, {\n\t\t\t\tonAuth: (info) => {\n\t\t\t\t\toutputEvent({ type: \"auth_login_url\", provider, url: info.url });\n\t\t\t\t},\n\t\t\t\tonDeviceCode: (info) => {\n\t\t\t\t\toutputEvent({ type: \"auth_login_url\", provider, url: info.verificationUri });\n\t\t\t\t},\n\t\t\t\tonPrompt: async () => rejectInteractive(),\n\t\t\t\tonSelect: async () => rejectInteractive(),\n\t\t\t\tonProgress: () => {},\n\t\t\t\tsignal: controller.signal,\n\t\t\t});\n\t\t\tsession.modelRegistry.refresh();\n\t\t\tif (provider === CLAUDE_SDK_OAUTH_PROVIDER_ID) emitProviderAccountsChanged(provider);\n\t\t\toutputEvent({ type: \"auth_login_end\", provider, success: true });\n\t\t} catch (loginError: unknown) {\n\t\t\tconst message = loginError instanceof Error ? loginError.message : String(loginError);\n\t\t\toutputEvent({ type: \"auth_login_end\", provider, success: false, error: message });\n\t\t} finally {\n\t\t\tif (activeLogins.get(provider) === controller) {\n\t\t\t\tactiveLogins.delete(provider);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Host capabilities for `applyFastMode`, mirroring what the `/fast` command passes from its\n\t * extension context. The notification is dropped: a command response carries the message\n\t * (`data` on success, `error` on refusal), so a duplicate `extension_ui_request` would be noise.\n\t */\n\tconst fastModeContext = (): FastModeContext => ({\n\t\tcwd: session.cwd,\n\t\tagentDir: session.agentDir,\n\t\tmodel: session.model,\n\t\tmodelRegistry: session.modelRegistry,\n\t\tserviceTier: session.serviceTier,\n\t\tisProjectTrusted: () => session.settingsManager.isProjectTrusted(),\n\t\tnotify: () => {},\n\t\tsetSessionModel: async (model) => {\n\t\t\tif (!session.modelRuntime.hasConfiguredAuth(model.provider)) return false;\n\t\t\tawait session.setSessionModel(model);\n\t\t\treturn true;\n\t\t},\n\t\tsetSessionFastMode: (enabled) => session.setSessionFastMode(enabled),\n\t});\n\n\t// Handle a single command\n\tconst handleCommand = async (command: RpcCommand): Promise<RpcResponse | undefined> => {\n\t\tconst id = command.id;\n\n\t\tswitch (command.type) {\n\t\t\tcase \"get_protocol_info\":\n\t\t\t\treturn {\n\t\t\t\t\tid,\n\t\t\t\t\ttype: \"response\",\n\t\t\t\t\tcommand: \"get_protocol_info\",\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tprotocolVersion: 1,\n\t\t\t\t\t\tserverVersion: VERSION,\n\t\t\t\t\t\tcapabilities: [...new Set([\"multi_session\", ...(options.capabilities ?? [])])],\n\t\t\t\t\t\tmode: \"classic\",\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\tcase \"open_session\":\n\t\t\t\treturn error(id, \"open_session\", \"multi_session_disabled\");\n\n\t\t\t// =================================================================\n\t\t\t// Prompting\n\t\t\t// =================================================================\n\n\t\t\tcase \"prompt\": {\n\t\t\t\tif (command.thinkingLevel !== undefined && session.isStreaming && command.streamingBehavior !== undefined) {\n\t\t\t\t\treturn error(\n\t\t\t\t\t\tid,\n\t\t\t\t\t\t\"prompt\",\n\t\t\t\t\t\t\"Cannot set thinkingLevel on a queued prompt; set it after the current turn completes.\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// Start prompt handling immediately, but emit the authoritative response only after\n\t\t\t\t// prompt preflight succeeds. Queued and immediately handled prompts also count as success.\n\t\t\t\t// The disposition is captured for the wire: AgentSession always fires promptDisposition\n\t\t\t\t// strictly before preflightResult(true), so the success frame carries the final value.\n\t\t\t\tlet preflightSucceeded = false;\n\t\t\t\tlet disposition: PromptDisposition | undefined;\n\t\t\t\tvoid session\n\t\t\t\t\t.prompt(command.message, {\n\t\t\t\t\t\timages: command.images,\n\t\t\t\t\t\tstreamingBehavior: command.streamingBehavior,\n\t\t\t\t\t\tthinkingLevel: command.thinkingLevel,\n\t\t\t\t\t\tsessionTitlePrompt: command.sessionTitlePrompt,\n\t\t\t\t\t\texpandPromptTemplates: command.expandPromptTemplates,\n\t\t\t\t\t\tsource: \"rpc\",\n\t\t\t\t\t\tpromptDisposition: (nextDisposition) => {\n\t\t\t\t\t\t\tdisposition = nextDisposition;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpreflightResult: (didSucceed) => {\n\t\t\t\t\t\t\tif (didSucceed && !preflightSucceeded) {\n\t\t\t\t\t\t\t\tpreflightSucceeded = true;\n\t\t\t\t\t\t\t\toutput(success(id, \"prompt\", { ...(disposition !== undefined ? { disposition } : {}) }));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\t.catch((e) => {\n\t\t\t\t\t\tif (!preflightSucceeded) {\n\t\t\t\t\t\t\toutput(error(id, \"prompt\", e.message));\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tcase \"append_user_message\": {\n\t\t\t\tconst content = command.content as Parameters<AgentSession[\"sendUserMessage\"]>[0];\n\t\t\t\tconst message =\n\t\t\t\t\ttypeof content === \"string\"\n\t\t\t\t\t\t? { role: \"user\" as const, content, timestamp: Date.now() }\n\t\t\t\t\t\t: { role: \"user\" as const, content, timestamp: Date.now() };\n\t\t\t\tsession.sessionManager.appendMessage(message);\n\t\t\t\tsession.agent.state.messages = session.sessionManager.buildSessionContext().messages;\n\t\t\t\treturn success(id, \"append_user_message\");\n\t\t\t}\n\n\t\t\tcase \"append_session_entry\": {\n\t\t\t\tsession.appendSessionEntry(command.entry);\n\t\t\t\treturn success(id, \"append_session_entry\");\n\t\t\t}\n\n\t\t\tcase \"send_custom_message\": {\n\t\t\t\tawait session.sendCustomMessage(\n\t\t\t\t\t{\n\t\t\t\t\t\tcustomType: command.customType,\n\t\t\t\t\t\tcontent: command.content as Parameters<AgentSession[\"sendCustomMessage\"]>[0][\"content\"],\n\t\t\t\t\t\tdisplay: command.display,\n\t\t\t\t\t\tdetails: command.details,\n\t\t\t\t\t},\n\t\t\t\t\t{ triggerTurn: command.triggerTurn, deliverAs: command.deliverAs },\n\t\t\t\t);\n\t\t\t\treturn success(id, \"send_custom_message\");\n\t\t\t}\n\n\t\t\tcase \"steer\": {\n\t\t\t\tawait session.steer(command.message, command.images, { enqueueOrder: command.enqueueOrder });\n\t\t\t\treturn success(id, \"steer\");\n\t\t\t}\n\n\t\t\tcase \"follow_up\": {\n\t\t\t\tawait session.followUp(command.message, command.images, { enqueueOrder: command.enqueueOrder });\n\t\t\t\treturn success(id, \"follow_up\");\n\t\t\t}\n\n\t\t\tcase \"abort\": {\n\t\t\t\tawait session.abort();\n\t\t\t\treturn success(id, \"abort\");\n\t\t\t}\n\n\t\t\tcase \"abort_compaction\": {\n\t\t\t\tsession.abortCompaction();\n\t\t\t\treturn success(id, \"abort_compaction\");\n\t\t\t}\n\n\t\t\tcase \"reload\": {\n\t\t\t\tconst result = await session.reload();\n\t\t\t\treturn success(id, \"reload\", result);\n\t\t\t}\n\n\t\t\tcase \"check_reload_veto\": {\n\t\t\t\treturn success(id, \"check_reload_veto\", await session.checkReloadVeto());\n\t\t\t}\n\n\t\t\tcase \"clear_queue\": {\n\t\t\t\tconst cleared = session.clearQueue({ abortWillFollow: command.abortWillFollow ?? false });\n\t\t\t\treturn success(id, \"clear_queue\", {\n\t\t\t\t\tsteering: cleared.steering,\n\t\t\t\t\tfollowUp: cleared.followUp,\n\t\t\t\t\tordered: [...cleared.ordered],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"get_steering_messages\":\n\t\t\t\treturn success(id, \"get_steering_messages\", { messages: [...session.getSteeringMessages()] });\n\n\t\t\tcase \"get_follow_up_messages\":\n\t\t\t\treturn success(id, \"get_follow_up_messages\", { messages: [...session.getFollowUpMessages()] });\n\n\t\t\tcase \"abort_branch_summary\":\n\t\t\t\tsession.abortBranchSummary();\n\t\t\t\treturn success(id, \"abort_branch_summary\");\n\n\t\t\tcase \"new_session\": {\n\t\t\t\tconst options = command.parentSession ? { parentSession: command.parentSession } : undefined;\n\t\t\t\tconst result = await runtimeHost.newSession(options);\n\t\t\t\tif (routingSessionId === undefined && !result.cancelled && session !== runtimeHost.session)\n\t\t\t\t\tawait rebindAfterLocalReplacement();\n\t\t\t\treturn success(id, \"new_session\", result);\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// State\n\t\t\t// =================================================================\n\n\t\t\tcase \"set_client_info\":\n\t\t\t\tif (options.sharedWidth && command.capabilities !== undefined) {\n\t\t\t\t\tclientCapabilities = command.capabilities;\n\t\t\t\t\toptions.sharedWidth.setCapabilities?.(options.sharedWidth.connectionId(), command.capabilities);\n\t\t\t\t}\n\t\t\t\tif (Number.isFinite(command.width) && command.width > 0) {\n\t\t\t\t\tif (options.sharedWidth) {\n\t\t\t\t\t\toptions.sharedWidth.setWidth(options.sharedWidth.connectionId(), command.width);\n\t\t\t\t\t\toptions.sharedWidth.onChange?.();\n\t\t\t\t\t} else for (const renderer of liveRenderers.values()) renderer.rerender();\n\t\t\t\t}\n\t\t\t\treturn success(id, \"set_client_info\");\n\n\t\t\tcase \"get_state\":\n\t\t\t\treturn success(id, \"get_state\", buildRpcSessionState(session, lastAbortSource));\n\n\t\t\t// =================================================================\n\t\t\t// Model\n\t\t\t// =================================================================\n\n\t\t\tcase \"set_model\": {\n\t\t\t\tconst models = await session.modelRegistry.getAvailable();\n\t\t\t\tconst model = models.find((m) => m.provider === command.provider && m.id === command.modelId);\n\t\t\t\tif (!model) {\n\t\t\t\t\treturn error(id, \"set_model\", `Model not found: ${command.provider}/${command.modelId}`);\n\t\t\t\t}\n\t\t\t\tconst systemPromptChange = await session.setModel(model);\n\t\t\t\treturn success(id, \"set_model\", { ...model, systemPromptName: systemPromptChange?.systemPromptName });\n\t\t\t}\n\n\t\t\tcase \"set_favorite_models\":\n\t\t\t\tsession.setFavoriteModels(command.models);\n\t\t\t\treturn success(id, \"set_favorite_models\");\n\n\t\t\tcase \"set_scoped_models\":\n\t\t\t\tsession.setScopedModels(command.models);\n\t\t\t\treturn success(id, \"set_scoped_models\");\n\n\t\t\tcase \"cycle_model\": {\n\t\t\t\tconst result = await session.cycleModel(command.direction);\n\t\t\t\tif (!result) {\n\t\t\t\t\treturn success(id, \"cycle_model\", null);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"cycle_model\", result);\n\t\t\t}\n\n\t\t\tcase \"get_available_models\": {\n\t\t\t\tconst models = await session.modelRegistry.getAvailable();\n\t\t\t\treturn success(id, \"get_available_models\", {\n\t\t\t\t\tmodels: models.map((model) => ({\n\t\t\t\t\t\t...model,\n\t\t\t\t\t\tsupportedThinkingLevels: getSupportedThinkingLevels(model),\n\t\t\t\t\t})),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Thinking\n\t\t\t// =================================================================\n\n\t\t\tcase \"set_thinking_level\": {\n\t\t\t\tif (command.scope === \"turn\") {\n\t\t\t\t\t// Validate BEFORE mutating: the session clamps an unsupported level to a supported\n\t\t\t\t\t// neighbour, so applying first would leave a REJECTED request's clamped level in\n\t\t\t\t\t// place. A failed command must not change session state.\n\t\t\t\t\tif (!session.getAvailableThinkingLevels().includes(command.level)) {\n\t\t\t\t\t\treturn error(\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\"set_thinking_level\",\n\t\t\t\t\t\t\t`Thinking level ${command.level} is not supported by the active model.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tsession.setSessionThinkingLevel(command.level);\n\t\t\t\t} else {\n\t\t\t\t\tsession.setThinkingLevel(command.level);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"set_thinking_level\");\n\t\t\t}\n\n\t\t\tcase \"cycle_thinking_level\": {\n\t\t\t\tconst level = session.cycleThinkingLevel();\n\t\t\t\tif (!level) {\n\t\t\t\t\treturn success(id, \"cycle_thinking_level\", null);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"cycle_thinking_level\", { level });\n\t\t\t}\n\n\t\t\tcase \"get_available_thinking_levels\":\n\t\t\t\treturn success(id, \"get_available_thinking_levels\", {\n\t\t\t\t\tlevels: session.getAvailableThinkingLevels(),\n\t\t\t\t});\n\n\t\t\t// =================================================================\n\t\t\t// Fast mode\n\t\t\t// =================================================================\n\n\t\t\tcase \"set_fast_mode\": {\n\t\t\t\tif (typeof command.enabled !== \"boolean\") {\n\t\t\t\t\treturn error(id, \"set_fast_mode\", \"set_fast_mode requires a boolean 'enabled' field.\");\n\t\t\t\t}\n\t\t\t\tconst model = session.model;\n\t\t\t\tif (!model) {\n\t\t\t\t\treturn error(id, \"set_fast_mode\", \"No active model.\");\n\t\t\t\t}\n\t\t\t\t// Same entry point as the /fast command: persistence, `-fast` key normalization,\n\t\t\t\t// and pin precedence live in applyFastMode, never duplicated here.\n\t\t\t\tconst result = await applyFastMode(fastModeContext(), command.enabled);\n\t\t\t\tif (!result.applied) {\n\t\t\t\t\t// A refusal (non-Codex model, active `:priority` pin, failed model switch) has no\n\t\t\t\t\t// notification channel for a command response, so it is reported as an error\n\t\t\t\t\t// instead of a success that silently did nothing.\n\t\t\t\t\treturn error(id, \"set_fast_mode\", result.message);\n\t\t\t\t}\n\t\t\t\tconst memoryModel = resolveServiceTierMemoryModel(session.modelRegistry, session.model ?? model);\n\t\t\t\treturn success(id, \"set_fast_mode\", {\n\t\t\t\t\tenabled: result.enabled,\n\t\t\t\t\tserviceTier: result.recordedTier,\n\t\t\t\t\tprovider: memoryModel.provider,\n\t\t\t\t\tmodelId: memoryModel.id,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"get_fast_mode\":\n\t\t\t\treturn success(id, \"get_fast_mode\", {\n\t\t\t\t\tenabled: session.isFastModeActive(),\n\t\t\t\t\tserviceTier: session.effectiveServiceTier ?? null,\n\t\t\t\t});\n\n\t\t\t// =================================================================\n\t\t\t// Queue Modes\n\t\t\t// =================================================================\n\n\t\t\tcase \"set_steering_mode\": {\n\t\t\t\tsession.setSteeringMode(command.mode);\n\t\t\t\treturn success(id, \"set_steering_mode\");\n\t\t\t}\n\n\t\t\tcase \"set_follow_up_mode\": {\n\t\t\t\tsession.setFollowUpMode(command.mode);\n\t\t\t\treturn success(id, \"set_follow_up_mode\");\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Compaction\n\t\t\t// =================================================================\n\n\t\t\tcase \"compact\": {\n\t\t\t\tconst result = await session.compact(command.customInstructions);\n\t\t\t\treturn success(id, \"compact\", result);\n\t\t\t}\n\n\t\t\tcase \"set_auto_compaction\": {\n\t\t\t\tsession.setAutoCompactionEnabled(command.enabled);\n\t\t\t\treturn success(id, \"set_auto_compaction\");\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Retry\n\t\t\t// =================================================================\n\n\t\t\tcase \"set_auto_retry\": {\n\t\t\t\tsession.setAutoRetryEnabled(command.enabled);\n\t\t\t\treturn success(id, \"set_auto_retry\");\n\t\t\t}\n\n\t\t\tcase \"abort_retry\": {\n\t\t\t\tsession.abortRetry();\n\t\t\t\treturn success(id, \"abort_retry\");\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Bash\n\t\t\t// =================================================================\n\n\t\t\tcase \"navigate_tree\": {\n\t\t\t\tconst result = await session.navigateTree(command.targetId, {\n\t\t\t\t\tsummarize: command.summarize,\n\t\t\t\t\tcustomInstructions: command.customInstructions,\n\t\t\t\t\treplaceInstructions: command.replaceInstructions,\n\t\t\t\t\tlabel: command.label,\n\t\t\t\t});\n\t\t\t\treturn success(id, \"navigate_tree\", result);\n\t\t\t}\n\n\t\t\tcase \"record_bash_result\":\n\t\t\t\tsession.recordBashResult(command.command, command.result, {\n\t\t\t\t\texcludeFromContext: command.excludeFromContext,\n\t\t\t\t});\n\t\t\t\treturn success(id, \"record_bash_result\");\n\n\t\t\tcase \"set_label\":\n\t\t\t\tsession.sessionManager.appendLabelChange(command.entryId, command.label);\n\t\t\t\treturn success(id, \"set_label\");\n\n\t\t\tcase \"bash\": {\n\t\t\t\tif (routingSessionId !== undefined) outputEvent({ type: \"bash_start\" });\n\t\t\t\ttry {\n\t\t\t\t\tconst eventResult = await session.extensionRunner.emitUserBash({\n\t\t\t\t\t\ttype: \"user_bash\",\n\t\t\t\t\t\tcommand: command.command,\n\t\t\t\t\t\texcludeFromContext: command.excludeFromContext ?? false,\n\t\t\t\t\t\tcwd: session.sessionManager.getCwd(),\n\t\t\t\t\t});\n\t\t\t\t\tif (eventResult?.result) {\n\t\t\t\t\t\tsession.recordBashResult(command.command, eventResult.result, {\n\t\t\t\t\t\t\texcludeFromContext: command.excludeFromContext,\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn success(id, \"bash\", eventResult.result);\n\t\t\t\t\t}\n\t\t\t\t\tconst result = await session.executeBash(command.command, undefined, {\n\t\t\t\t\t\texcludeFromContext: command.excludeFromContext,\n\t\t\t\t\t\tid: command.executionId,\n\t\t\t\t\t\t// Functions cannot cross JSONL. Host extensions may still provide the\n\t\t\t\t\t\t// executable operations object; client-supplied data is only a wire-safe hint.\n\t\t\t\t\t\toperations: eventResult?.operations,\n\t\t\t\t\t});\n\t\t\t\t\treturn success(id, \"bash\", result);\n\t\t\t\t} finally {\n\t\t\t\t\tif (routingSessionId !== undefined) outputEvent({ type: \"bash_end\" });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcase \"abort_bash\": {\n\t\t\t\tsession.abortBash();\n\t\t\t\treturn success(id, \"abort_bash\");\n\t\t\t}\n\n\t\t\tcase \"cleanup_bash_output\":\n\t\t\t\tawait session.cleanupBashOutput(command.path);\n\t\t\t\treturn success(id, \"cleanup_bash_output\");\n\n\t\t\t// =================================================================\n\t\t\t// Session\n\t\t\t// =================================================================\n\n\t\t\tcase \"get_session_stats\": {\n\t\t\t\tconst stats = session.getSessionStats();\n\t\t\t\treturn success(id, \"get_session_stats\", stats);\n\t\t\t}\n\n\t\t\tcase \"export_html\": {\n\t\t\t\tconst path = await session.exportToHtml(command.outputPath, { themeName: command.themeName });\n\t\t\t\treturn success(id, \"export_html\", { path });\n\t\t\t}\n\n\t\t\tcase \"export_jsonl\": {\n\t\t\t\treturn success(id, \"export_jsonl\", { path: session.exportToJsonl(command.outputPath) });\n\t\t\t}\n\n\t\t\tcase \"switch_session\": {\n\t\t\t\tconst result = await runtimeHost.switchSession(command.sessionPath, { cwdOverride: command.cwdOverride });\n\t\t\t\tif (routingSessionId === undefined && !result.cancelled && session !== runtimeHost.session)\n\t\t\t\t\tawait rebindAfterLocalReplacement();\n\t\t\t\treturn success(id, \"switch_session\", result);\n\t\t\t}\n\n\t\t\tcase \"fork\": {\n\t\t\t\tconst result = await runtimeHost.fork(command.entryId, { position: command.position });\n\t\t\t\tif (routingSessionId === undefined && !result.cancelled && session !== runtimeHost.session)\n\t\t\t\t\tawait rebindAfterLocalReplacement();\n\t\t\t\treturn success(id, \"fork\", { text: result.selectedText, cancelled: result.cancelled });\n\t\t\t}\n\n\t\t\tcase \"clone\": {\n\t\t\t\tconst leafId = session.sessionManager.getLeafId();\n\t\t\t\tif (!leafId) {\n\t\t\t\t\treturn error(id, \"clone\", \"Cannot clone session: no current entry selected\");\n\t\t\t\t}\n\t\t\t\tconst result = await runtimeHost.fork(leafId, { position: \"at\" });\n\t\t\t\tif (routingSessionId === undefined && !result.cancelled && session !== runtimeHost.session)\n\t\t\t\t\tawait rebindAfterLocalReplacement();\n\t\t\t\treturn success(id, \"clone\", { cancelled: result.cancelled });\n\t\t\t}\n\n\t\t\tcase \"get_fork_messages\": {\n\t\t\t\tconst messages = session.getUserMessagesForForking();\n\t\t\t\treturn success(id, \"get_fork_messages\", { messages });\n\t\t\t}\n\n\t\t\tcase \"get_entries\": {\n\t\t\t\tconst sessionManager = session.sessionManager;\n\t\t\t\tlet entries = sessionManager.getEntries();\n\t\t\t\tif (command.since !== undefined) {\n\t\t\t\t\tconst sinceIndex = entries.findIndex((e) => e.id === command.since);\n\t\t\t\t\tif (sinceIndex === -1) {\n\t\t\t\t\t\treturn error(id, \"get_entries\", `Entry not found: ${command.since}`);\n\t\t\t\t\t}\n\t\t\t\t\tentries = entries.slice(sinceIndex + 1);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"get_entries\", { entries, leafId: sessionManager.getLeafId() });\n\t\t\t}\n\n\t\t\tcase \"get_tree\": {\n\t\t\t\tconst sessionManager = session.sessionManager;\n\t\t\t\treturn success(id, \"get_tree\", { tree: sessionManager.getTree(), leafId: sessionManager.getLeafId() });\n\t\t\t}\n\n\t\t\tcase \"get_last_assistant_text\": {\n\t\t\t\tconst text = session.getLastAssistantText();\n\t\t\t\treturn success(id, \"get_last_assistant_text\", { text });\n\t\t\t}\n\n\t\t\tcase \"import_jsonl\": {\n\t\t\t\tconst result = await runtimeHost.importFromJsonl(command.inputPath, command.cwdOverride);\n\t\t\t\tif (routingSessionId === undefined && !result.cancelled && session !== runtimeHost.session)\n\t\t\t\t\tawait rebindAfterLocalReplacement();\n\t\t\t\treturn success(id, \"import_jsonl\", result);\n\t\t\t}\n\n\t\t\tcase \"set_session_name\": {\n\t\t\t\tconst name = command.name.trim();\n\t\t\t\tif (!name) {\n\t\t\t\t\treturn error(id, \"set_session_name\", \"Session name cannot be empty\");\n\t\t\t\t}\n\t\t\t\tsession.setSessionName(name);\n\t\t\t\treturn success(id, \"set_session_name\");\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Messages\n\t\t\t// =================================================================\n\n\t\t\tcase \"get_messages\": {\n\t\t\t\treturn success(id, \"get_messages\", { messages: session.messages });\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Commands (available for invocation via prompt)\n\t\t\t// =================================================================\n\n\t\t\tcase \"get_commands\": {\n\t\t\t\treturn success(id, \"get_commands\", { commands: buildRpcCommandsForSession(session) });\n\t\t\t}\n\n\t\t\tcase \"get_loaded_surfaces\": {\n\t\t\t\tawait requestMcpWireStatus();\n\t\t\t\tconst inventory = recordLoadedSurfaces(true);\n\t\t\t\treturn success(id, \"get_loaded_surfaces\", inventory.data);\n\t\t\t}\n\n\t\t\tcase \"extension_request\": {\n\t\t\t\tconst name = command.name.trim();\n\t\t\t\tif (name.length === 0) {\n\t\t\t\t\treturn error(id, \"extension_request\", \"Extension RPC request name cannot be empty\");\n\t\t\t\t}\n\t\t\t\tconst data = await session.extensionRunner.requestRpc(name, command.data);\n\t\t\t\treturn success(id, \"extension_request\", data);\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Auth (task 13)\n\t\t\t// =================================================================\n\n\t\t\tcase \"get_auth_providers\": {\n\t\t\t\tconst modelRegistry = session.modelRegistry;\n\t\t\t\tconst oauthInfos = buildLoginProviderInfos(modelRegistry, \"oauth\");\n\t\t\t\tconst apiKeyInfos = buildLoginProviderInfos(modelRegistry, \"api_key\");\n\t\t\t\tconst providers: RpcAuthProvider[] = [...oauthInfos, ...apiKeyInfos].map((info) => ({\n\t\t\t\t\tid: info.id,\n\t\t\t\t\tname: info.name,\n\t\t\t\t\tauthType: info.authType,\n\t\t\t\t\tstatus: modelRegistry.getProviderAuthStatus(info.id),\n\t\t\t\t}));\n\t\t\t\treturn success(id, \"get_auth_providers\", { providers });\n\t\t\t}\n\n\t\t\tcase \"login_start\": {\n\t\t\t\t// Respond IMMEDIATELY: success:true means the flow has started. The\n\t\t\t\t// URL and terminal result are delivered via auth_login_url /\n\t\t\t\t// auth_login_end events, because an interactive OAuth round-trip\n\t\t\t\t// cannot fit within the request timeout.\n\t\t\t\tvoid startLogin(command.provider);\n\t\t\t\treturn success(id, \"login_start\");\n\t\t\t}\n\n\t\t\tcase \"login_cancel\": {\n\t\t\t\tconst controller = activeLogins.get(command.provider);\n\t\t\t\tcontroller?.abort();\n\t\t\t\treturn success(id, \"login_cancel\");\n\t\t\t}\n\n\t\t\tcase \"login_api_key\": {\n\t\t\t\tsession.modelRegistry.authStorage.set(command.provider, { type: \"api_key\", key: command.key });\n\t\t\t\tsession.modelRegistry.refresh();\n\t\t\t\treturn success(id, \"login_api_key\");\n\t\t\t}\n\n\t\t\tcase \"logout\": {\n\t\t\t\tsession.modelRegistry.authStorage.logout(command.provider);\n\t\t\t\tsession.modelRegistry.refresh();\n\t\t\t\treturn success(id, \"logout\");\n\t\t\t}\n\n\t\t\tcase \"get_provider_accounts\": {\n\t\t\t\tconst accounts = await getCredentialAccounts(session.modelRegistry.authStorage, command.provider);\n\t\t\t\treturn success(id, \"get_provider_accounts\", { accounts });\n\t\t\t}\n\n\t\t\tcase \"account_pin\": {\n\t\t\t\tawait pinCredentialAccount(session.modelRegistry.authStorage, command.provider, command.name);\n\t\t\t\treturn success(id, \"account_pin\");\n\t\t\t}\n\n\t\t\tcase \"account_remove\": {\n\t\t\t\tawait removeCredentialAccount(session.modelRegistry.authStorage, command.provider, command.name);\n\t\t\t\treturn success(id, \"account_remove\");\n\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\tconst unknownCommand = command as { type: string };\n\t\t\t\treturn error(id, unknownCommand.type, `Unknown command: ${unknownCommand.type}`);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleInputLine = async (line: string): Promise<void> => {\n\t\tlet parsed: unknown;\n\t\ttry {\n\t\t\tparsed = JSON.parse(line);\n\t\t} catch (parseError: unknown) {\n\t\t\toutput(\n\t\t\t\terror(\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"parse\",\n\t\t\t\t\t`Failed to parse command: ${parseError instanceof Error ? parseError.message : String(parseError)}`,\n\t\t\t\t),\n\t\t\t);\n\t\t\tawait waitForRpcBackpressure();\n\t\t\treturn;\n\t\t}\n\n\t\tconst shapeError = rpcCommandShapeError(parsed);\n\t\tif (shapeError) {\n\t\t\toutput(error(undefined, \"parse\", shapeError));\n\t\t\tawait waitForRpcBackpressure();\n\t\t\treturn;\n\t\t}\n\n\t\t// Handle extension UI responses\n\t\tif (\n\t\t\ttypeof parsed === \"object\" &&\n\t\t\tparsed !== null &&\n\t\t\t\"type\" in parsed &&\n\t\t\tparsed.type === \"extension_ui_response\"\n\t\t) {\n\t\t\tconst response = parsed as RpcExtensionUIResponse;\n\t\t\tif (!pendingExtensionRequests.resolve(response) && routingSessionId !== undefined) {\n\t\t\t\t// This binding owns exactly one session's request map. A response not\n\t\t\t\t// requested here is a routed protocol error, never a cross-session match.\n\t\t\t\toutput(error(undefined, \"extension_ui_response\", \"unknown_extension_ui_request\"));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst command = parsed as RpcCommand;\n\t\tconst payloadError = rpcCommandPayloadError(command);\n\t\tconst messageLengthError = rpcMessageLengthError(command);\n\t\tif (payloadError || messageLengthError) {\n\t\t\toutput(error(command.id, command.type, payloadError ?? messageLengthError!));\n\t\t\tawait waitForRpcBackpressure();\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tconst response = await handleCommand(command);\n\t\t\tif (response) {\n\t\t\t\toutput(response);\n\t\t\t\tawait waitForRpcBackpressure();\n\t\t\t}\n\t\t} catch (commandError: unknown) {\n\t\t\tconst missingCwd =\n\t\t\t\tcommandError instanceof Error && commandError.name === \"MissingSessionCwdError\" && \"issue\" in commandError;\n\t\t\toutput(\n\t\t\t\terror(\n\t\t\t\t\tcommand.id,\n\t\t\t\t\tcommand.type,\n\t\t\t\t\tcommandError instanceof Error ? commandError.message : String(commandError),\n\t\t\t\t\tmissingCwd ? \"missing_session_cwd\" : undefined,\n\t\t\t\t\tmissingCwd ? commandError.issue : undefined,\n\t\t\t\t),\n\t\t\t);\n\t\t\tawait waitForRpcBackpressure();\n\t\t}\n\t};\n\n\tconst dispose = async (): Promise<void> => {\n\t\tdisposeAllRenderers();\n\t\tpendingExtensionRequests.close();\n\t\tunsubscribeProviderAccountEvents();\n\t\tunsubscribe?.();\n\t\tunsubscribeBackpressure?.();\n\t\tunsubscribeLoadedSurfaces?.();\n\t\tunsubscribeExtensionEvents?.();\n\t\tunsubscribe = undefined;\n\t\tunsubscribeBackpressure = undefined;\n\t\tunsubscribeLoadedSurfaces = undefined;\n\t\tunsubscribeExtensionEvents = undefined;\n\t\tif (options.disposeRuntime !== false) {\n\t\t\tawait runtimeHost.dispose();\n\t\t}\n\t};\n\n\t// Perform the initial bind synchronously-scheduled so the handler is ready\n\t// as soon as the caller awaits `ready`.\n\tconst ready = rebindSession();\n\n\treturn {\n\t\tready,\n\t\tasync handleInputLine(line: string) {\n\t\t\tawait ready;\n\t\t\tawait handleInputLine(line);\n\t\t},\n\t\trerenderComponents() {\n\t\t\tif (!hasRenderedComponents()) {\n\t\t\t\tdisposeAllRenderers();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfor (const [key, createRenderer] of retainedRendererFactories) if (!liveRenderers.has(key)) createRenderer();\n\t\t\tfor (const renderer of liveRenderers.values()) renderer.rerender();\n\t\t},\n\t\tisShutdownRequested() {\n\t\t\treturn shutdownRequested;\n\t\t},\n\t\tcancelPendingExtensionUiRequests() {\n\t\t\tpendingExtensionRequests.cancelAll();\n\t\t},\n\t\tasync dispose() {\n\t\t\tawait ready;\n\t\t\tawait dispose();\n\t\t},\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"connection-handler.js","sourceRoot":"","sources":["../../../src/modes/rpc/connection-handler.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Per-connection RPC handler.\n *\n * This is the transport-independent core extracted from `runRpcMode`. It owns\n * exactly one AgentSession runtime and speaks the JSONL RPC protocol over an\n * injected output sink and a caller-driven line feed. It knows nothing about\n * `process.stdout`, `process.stdin`, or process signals — those belong to the\n * host (classic single-connection stdio in `rpc-mode.ts` or another transport\n * adapter).\n *\n * Behaviour is byte-for-byte identical to the original `runRpcMode` command\n * loop: the same responses, the same event stream, the same extension-UI\n * bridge, the same backpressure discipline. The only difference is that writes\n * go to `sink.writeRaw` instead of `writeRawStdout`, and the caller decides how\n * (and whether) to end the process.\n */\n\nimport * as crypto from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { basename, dirname, extname } from \"node:path\";\nimport type { OAuthProviderId } from \"@earendil-works/pi-ai/compat\";\nimport { VERSION } from \"../../config.ts\";\nimport type { AgentAbortSource } from \"../../core/agent-abort-provenance.ts\";\nimport type { AgentSession, PromptDisposition } from \"../../core/agent-session.ts\";\nimport type { AgentSessionRuntime } from \"../../core/agent-session-runtime.ts\";\nimport { buildLoginProviderInfos } from \"../../core/auth-providers.ts\";\nimport {\n\tgetCredentialAccounts,\n\tpinCredentialAccount,\n\tremoveCredentialAccount,\n} from \"../../core/credential-accounts.ts\";\nimport {\n\temitProviderAccountsChanged,\n\tsubscribeProviderAccountEvents,\n} from \"../../core/extensions/builtin/claude-sdk-oauth/account-events.ts\";\nimport { CLAUDE_SDK_OAUTH_PROVIDER_ID } from \"../../core/extensions/builtin/claude-sdk-oauth/account-management.ts\";\nimport {\n\tisMcpControlInventoryChanged,\n\tMCP_CONTROL_INVENTORY_CHANGED_EVENT,\n\tMCP_CONTROL_INVENTORY_REQUEST_EVENT,\n\ttype McpControlInventoryRequest,\n} from \"../../core/extensions/builtin/mcp/control-inventory.ts\";\nimport type { McpWireStatusServer, McpWireStatusSnapshot } from \"../../core/extensions/builtin/mcp/service-types.ts\";\nimport {\n\tapplyFastMode,\n\ttype FastModeContext,\n\tresolveServiceTierMemoryModel,\n} from \"../../core/extensions/builtin/service-tier.ts\";\nimport type {\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tWorkingIndicatorOptions,\n} from \"../../core/extensions/index.ts\";\nimport { FooterDataProvider } from \"../../core/footer-data-provider.ts\";\nimport { getSupportedThinkingLevels } from \"../../core/thinking-levels.ts\";\nimport { ProjectTrustStore } from \"../../core/trust-manager.ts\";\nimport { type Theme, theme } from \"../interactive/theme/theme.ts\";\nimport {\n\tAUTO_TITLE_SESSIONS_CAPABILITY,\n\tbuildCustomUnsupportedRequest,\n\tDEFAULT_CUSTOM_EXTENSION_LABEL,\n\tEXTENSION_EVENTS_CAPABILITY,\n\tRENDERED_COMPONENTS_CAPABILITY,\n} from \"./custom-capability.ts\";\nimport { createRpcEventOutputBuffer } from \"./event-output-buffer.ts\";\nimport { buildRpcCommandsForSession, createCommandsChangedEvent, rpcCommandListDigest } from \"./rpc-command-surface.ts\";\nimport { rpcCommandPayloadError, rpcCommandShapeError, rpcMessageLengthError } from \"./rpc-input-validation.ts\";\nimport type {\n\tRpcAuthProvider,\n\tRpcCommand,\n\tRpcCommandInvocationEvent,\n\tRpcExtensionEvent,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcLoadedExtension,\n\tRpcLoadedMcpServer,\n\tRpcMcpServerStatus,\n\tRpcResponse,\n\tRpcSessionReplacedEvent,\n\tRpcSessionState,\n\tRpcSkillInvocationEvent,\n} from \"./rpc-types.ts\";\nimport { RENDERED_COMPONENT_RECORD } from \"./session-event-writer.ts\";\nimport { SessionExtensionUiRequests } from \"./session-extension-ui-requests.ts\";\nimport { createLiveComponentRenderer, type LiveComponentRenderer } from \"./widget-line-renderer.ts\";\n\n/** Additive per-connection options. Absent = classic default (byte-identical). */\nexport interface RpcConnectionOptions {\n\t/** Client capability flags from the handshake (e.g. custom_unsupported opt-in). */\n\tcapabilities?: readonly string[];\n\t/** Called instead of requesting process shutdown for a session-owned binding. */\n\tshutdownHandler?: () => void;\n\t/** Session registries own runtime disposal themselves. */\n\tdisposeRuntime?: boolean;\n\t/** Multi-session routing handle. Absent preserves classic wire output exactly. */\n\tsessionId?: string;\n\tfooterDataProviderFactory?: (session: AgentSession) => FooterDataProvider;\n\tsharedWidth?: {\n\t\tgetWidth: () => number;\n\t\tsetWidth: (connectionId: string | undefined, width: number) => void;\n\t\tclearWidth: (connectionId: string | undefined) => void;\n\t\tsetCapabilities?: (connectionId: string | undefined, capabilities: readonly string[]) => void;\n\t\thasRenderedComponents?: (sessionId: string) => boolean;\n\t\tconnectionId: () => string | undefined;\n\t\tonChange?: () => void;\n\t};\n}\n\n/**\n * The output side of a connection. `writeRaw` receives already-serialized JSONL\n * text (LF-terminated). `waitForBackpressure` lets the host apply flow control\n * (stdout drain in classic mode, or the transport's own `drain` signal).\n */\nfunction createFooterDataProvider(session: AgentSession): FooterDataProvider {\n\treturn new FooterDataProvider(session.sessionManager.getCwd());\n}\n\nexport interface RpcConnectionSink {\n\twriteRaw(chunk: string): void;\n\twaitForBackpressure(): Promise<void>;\n}\n\nexport interface RpcConnectionHandler {\n\t/**\n\t * Resolves once the initial session bind completes. Awaiting it guarantees the\n\t * extension UI context is installed (used by tests that drive ctx.ui directly).\n\t */\n\treadonly ready: Promise<void>;\n\t/** Feed one inbound JSONL line (command or extension_ui_response). */\n\thandleInputLine(line: string): Promise<void>;\n\trerenderComponents(): void;\n\t/**\n\t * True once an extension requested shutdown via the shutdown handler. The\n\t * host polls this after each command and decides how to tear down.\n\t */\n\tisShutdownRequested(): boolean;\n\t/** Cancel UI requests that can no longer be answered by this connection. */\n\tcancelPendingExtensionUiRequests(): void;\n\t/** Tear down subscriptions and dispose the runtime. Never calls process.exit. */\n\tdispose(): Promise<void>;\n}\n\nfunction loadedExtensionName(path: string): string {\n\tconst synthetic = /^<(?:builtin|inline):([^>]+)>$/.exec(path);\n\tif (synthetic) return synthetic[1];\n\tconst withoutExtension = basename(path, extname(path));\n\tif (withoutExtension !== \"index\") return withoutExtension;\n\tconst parent = dirname(path);\n\tconst parentName = basename(parent);\n\treturn parentName === \"src\" || parentName === \"dist\" ? basename(dirname(parent)) : parentName;\n}\n\nfunction loadedExtensions(session: AgentSession): RpcLoadedExtension[] {\n\treturn session.resourceLoader.getExtensions().extensions.map((extension) => ({\n\t\tname: loadedExtensionName(extension.path),\n\t\tpath: extension.path,\n\t\tsourceInfo: extension.sourceInfo,\n\t\tenabled: true,\n\t}));\n}\n\nfunction loadedMcpStatus(server: McpWireStatusServer): RpcMcpServerStatus {\n\tif (server.status !== undefined) return server.status;\n\tif (server.serverInfo !== null) return \"connected\";\n\tif (server.authStatus === \"notLoggedIn\") return \"needs_auth\";\n\treturn \"enabled\";\n}\n\n/**\n * Project one session into the wire state shape.\n *\n * Shared with `open_session` (session-command-router) so both surfaces answer with the SAME\n * fields: a second hand-rolled literal silently drifts, which is how `serviceTier`/`fastMode`\n * would otherwise be missing from an opened session's initial state.\n *\n * `lastAbortSource` is passed in rather than read from the session: `session.currentAbortSource`\n * is cleared once the turn settles, so only the caller that observed `agent_end` still knows\n * who owned the abort.\n */\nexport function buildRpcSessionState(session: AgentSession, lastAbortSource?: AgentAbortSource): RpcSessionState {\n\tconst cwd = session.sessionManager.getCwd();\n\t// Trust gates project-source settings (shell prefixes, project resources), so every\n\t// session state projection must have an authoritative store to consult.\n\tif (!session.agentDir) {\n\t\tthrow new Error(\"RPC session invariant violated: agentDir is required\");\n\t}\n\tconst projectTrusted = new ProjectTrustStore(session.agentDir).get(cwd) === true;\n\treturn {\n\t\tmodel: session.model,\n\t\tthinkingLevel: session.thinkingLevel,\n\t\t...(session.thinkingSelection ? { thinkingSelection: session.thinkingSelection } : {}),\n\t\t...(lastAbortSource ? { lastAbortSource } : {}),\n\t\tserviceTier: session.effectiveServiceTier,\n\t\tfastMode: session.isFastModeActive(),\n\t\tisStreaming: session.isStreaming,\n\t\tisCompacting: session.isCompacting,\n\t\tretryAttempt: session.retryAttempt,\n\t\tisBashRunning: session.isBashRunning,\n\t\tsteeringMode: session.steeringMode,\n\t\tfollowUpMode: session.followUpMode,\n\t\tsessionFile: session.sessionFile,\n\t\tsessionId: session.sessionId,\n\t\tsessionName: session.sessionName,\n\t\tcwd,\n\t\tprojectTrusted,\n\t\t...(session.sessionFile &&\n\t\t!existsSync(session.sessionFile) &&\n\t\tsession.sessionManager\n\t\t\t.getEntries()\n\t\t\t.some((entry) => entry.type !== \"model_change\" && entry.type !== \"thinking_level_change\")\n\t\t\t? { entries: session.sessionManager.getEntries() }\n\t\t\t: {}),\n\t\tsteering: typeof session.getSteeringMessages === \"function\" ? [...session.getSteeringMessages()] : [],\n\t\tfollowUp: typeof session.getFollowUpMessages === \"function\" ? [...session.getFollowUpMessages()] : [],\n\t\tordered: [\n\t\t\t...((\n\t\t\t\tsession as unknown as {\n\t\t\t\t\t_queuedInputOrder?: Array<{ text: string; mode: \"steer\" | \"followUp\"; enqueueOrder: number }>;\n\t\t\t\t}\n\t\t\t)._queuedInputOrder ?? []),\n\t\t].sort((a, b) => a.enqueueOrder - b.enqueueOrder),\n\t\tautoCompactionEnabled: session.autoCompactionEnabled,\n\t\tmessageCount: session.messages.length,\n\t\tpendingMessageCount: session.pendingMessageCount,\n\t\tusageTotals: session.sessionManager.getUsageTotals(),\n\t\tcontextUsage: typeof session.getContextUsage === \"function\" ? session.getContextUsage() : undefined,\n\t\tfavoriteModels: session.favoriteModels?.map((entry) => ({ ...entry })) ?? [],\n\t\tscopedModels: session.scopedModels?.map((entry) => ({ ...entry })) ?? [],\n\t};\n}\n\nfunction loadedMcpServers(snapshot: McpWireStatusSnapshot): RpcLoadedMcpServer[] {\n\treturn snapshot.servers.map((server) => ({\n\t\tname: server.name,\n\t\ttoolCount: server.tools.length,\n\t\tstatus: loadedMcpStatus(server),\n\t\tauthStatus: server.authStatus,\n\t}));\n}\n\nfunction loadedSurfacesFingerprint(\n\tsession: AgentSession,\n\textensions: readonly RpcLoadedExtension[],\n\tmcpServers: readonly RpcLoadedMcpServer[],\n): string {\n\treturn JSON.stringify({\n\t\tskills: session.resourceLoader.getSkills().skills.map((skill) => ({\n\t\t\tname: skill.name,\n\t\t\tpath: skill.filePath,\n\t\t\tsourceInfo: skill.sourceInfo,\n\t\t\tenabled: !skill.disableModelInvocation,\n\t\t})),\n\t\textensions,\n\t\tmcpServers,\n\t});\n}\n\n/**\n * Create a per-connection RPC handler bound to one runtime host and one sink.\n *\n * This performs the initial `rebindSession()` and returns synchronously with a\n * handler whose `handleInputLine` is ready to use. Signal handling, stdin\n * wiring, and process exit are intentionally NOT done here.\n */\nexport function createRpcConnectionHandler(\n\truntimeHost: AgentSessionRuntime,\n\tsink: RpcConnectionSink,\n\toptions: RpcConnectionOptions = {},\n): RpcConnectionHandler {\n\tlet clientCapabilities = options.capabilities;\n\tconst routingSessionId = options.sessionId;\n\tconst clientWidth = () => options.sharedWidth?.getWidth() ?? 80;\n\tconst hasRenderedComponents = () =>\n\t\t(options.sharedWidth?.hasRenderedComponents?.(routingSessionId ?? \"\") ?? false) ||\n\t\t(clientCapabilities?.includes(RENDERED_COMPONENTS_CAPABILITY) ?? false);\n\tconst liveRenderers = new Map<string, LiveComponentRenderer>();\n\tconst retainedRendererFactories = new Map<string, () => void>();\n\tconst footerProviders = new Map<string, FooterDataProvider>();\n\tconst disposeRenderer = (key: string) => {\n\t\tliveRenderers.get(key)?.dispose();\n\t\tliveRenderers.delete(key);\n\t\tfooterProviders.get(key)?.dispose();\n\t\tfooterProviders.delete(key);\n\t};\n\tconst disposeAllRenderers = () => {\n\t\tfor (const renderer of liveRenderers.values()) renderer.dispose();\n\t\tfor (const provider of footerProviders.values()) provider.dispose();\n\t\tliveRenderers.clear();\n\t\tfooterProviders.clear();\n\t};\n\t// True only while THIS connection's own command drives a replacement; the issuer\n\t// already learns the new identity from its command response.\n\tlet replacementIssuedHere = false;\n\tlet session = runtimeHost.session;\n\tlet unsubscribe: (() => void) | undefined;\n\tlet unsubscribeBackpressure: (() => void) | undefined;\n\tlet unsubscribeLoadedSurfaces: (() => void) | undefined;\n\tlet unsubscribeExtensionEvents: (() => void) | undefined;\n\tlet mcpWireStatus: McpWireStatusSnapshot = { servers: [] };\n\t/** Abort owner of the last settled turn; `session.currentAbortSource` clears on settle. */\n\tlet lastAbortSource: AgentAbortSource | undefined;\n\tlet loadedSurfacesDigest: string | undefined;\n\tlet rpcCommandsDigest: string | undefined;\n\tlet suppressLoadedSurfaceEvents = false;\n\tconst eventOutput = createRpcEventOutputBuffer(sink.writeRaw);\n\n\tconst tagSessionRecord = <T extends object>(value: T): T | (T & { sessionId: string }) =>\n\t\troutingSessionId === undefined ? value : { ...value, sessionId: routingSessionId };\n\n\tconst output = (obj: RpcResponse | RpcExtensionUIRequest | object) => {\n\t\teventOutput.writeImmediate(tagSessionRecord(obj));\n\t};\n\n\tconst outputEvent = (event: object) => {\n\t\teventOutput.enqueueEvent(tagSessionRecord(event));\n\t};\n\n\tconst currentLoadedSurfaces = (): {\n\t\tdata: { extensions: RpcLoadedExtension[]; mcpServers: RpcLoadedMcpServer[] };\n\t\tdigest: string;\n\t} => {\n\t\tconst extensions = loadedExtensions(session);\n\t\tconst mcpServers = loadedMcpServers(mcpWireStatus);\n\t\treturn {\n\t\t\tdata: { extensions, mcpServers },\n\t\t\tdigest: loadedSurfacesFingerprint(session, extensions, mcpServers),\n\t\t};\n\t};\n\n\tconst recordLoadedSurfaces = (emitChange: boolean): ReturnType<typeof currentLoadedSurfaces> => {\n\t\tconst current = currentLoadedSurfaces();\n\t\tconst changed = loadedSurfacesDigest !== undefined && loadedSurfacesDigest !== current.digest;\n\t\tloadedSurfacesDigest = current.digest;\n\t\tif (emitChange && changed && !suppressLoadedSurfaceEvents) {\n\t\t\toutputEvent({ type: \"loaded_surfaces_changed\" });\n\t\t}\n\t\treturn current;\n\t};\n\n\tconst requestMcpWireStatus = async (): Promise<void> => {\n\t\tlet response: Promise<McpWireStatusSnapshot> | undefined;\n\t\tconst request: McpControlInventoryRequest = {\n\t\t\tsessionId: session.sessionId,\n\t\t\trespond(snapshot) {\n\t\t\t\tresponse ??= snapshot;\n\t\t\t},\n\t\t};\n\t\tsession.resourceLoader.emitExtensionEvent?.(MCP_CONTROL_INVENTORY_REQUEST_EVENT, request);\n\t\tmcpWireStatus = response === undefined ? { servers: [] } : await response;\n\t};\n\n\tconst subscribeLoadedSurfaceEvents = (): void => {\n\t\tunsubscribeLoadedSurfaces?.();\n\t\tunsubscribeLoadedSurfaces = session.resourceLoader.onExtensionEvent?.(\n\t\t\tMCP_CONTROL_INVENTORY_CHANGED_EVENT,\n\t\t\t(data) => {\n\t\t\t\tif (!isMcpControlInventoryChanged(data) || data.sessionId !== session.sessionId) return;\n\t\t\t\tmcpWireStatus = data.snapshot;\n\t\t\t\tif (!suppressLoadedSurfaceEvents) recordLoadedSurfaces(true);\n\t\t\t},\n\t\t);\n\t};\n\n\tconst unsubscribeProviderAccountEvents = subscribeProviderAccountEvents((event) => {\n\t\tif (event.type === \"accounts_changed\") {\n\t\t\toutputEvent({ type: \"auth_accounts_changed\", provider: event.provider });\n\t\t\treturn;\n\t\t}\n\t\toutputEvent({\n\t\t\ttype: \"account_failover\",\n\t\t\tprovider: event.provider,\n\t\t\tfrom: event.from,\n\t\t\tto: event.to,\n\t\t\treason: event.reason,\n\t\t});\n\t});\n\n\tconst waitForRpcBackpressure = async (): Promise<void> => {\n\t\teventOutput.flushEvents();\n\t\tawait sink.waitForBackpressure();\n\t};\n\n\tconst success = <T extends RpcCommand[\"type\"]>(id: string | undefined, command: T, data?: unknown): RpcResponse => {\n\t\tif (data === undefined) {\n\t\t\treturn { id, type: \"response\", command, success: true } as RpcResponse;\n\t\t}\n\t\treturn { id, type: \"response\", command, success: true, data } as RpcResponse;\n\t};\n\n\tconst error = (\n\t\tid: string | undefined,\n\t\tcommand: string,\n\t\tmessage: string,\n\t\terrorCode?: string,\n\t\terrorData?: unknown,\n\t): RpcResponse => {\n\t\treturn {\n\t\t\tid,\n\t\t\ttype: \"response\",\n\t\t\tcommand,\n\t\t\tsuccess: false,\n\t\t\terror: message,\n\t\t\t...(errorCode ? { errorCode } : {}),\n\t\t\t...(errorData === undefined ? {} : { errorData }),\n\t\t};\n\t};\n\n\t// Pending extension UI requests waiting for response\n\tconst pendingExtensionRequests = new SessionExtensionUiRequests();\n\n\tlet shutdownRequested = false;\n\n\t// In-flight OAuth logins, keyed by provider. login_start registers one; the\n\t// login promise clears it on completion; login_cancel aborts it. The flow is\n\t// fire-command-then-subscribe: login_start responds immediately and the URL +\n\t// terminal result arrive as auth_login_url / auth_login_end events.\n\tconst activeLogins = new Map<string, AbortController>();\n\n\t/** Helper for dialog methods with signal/timeout support */\n\tfunction createDialogPromise<T>(\n\t\topts: ExtensionUIDialogOptions | undefined,\n\t\tdefaultValue: T,\n\t\trequest: Record<string, unknown>,\n\t\tparseResponse: (response: RpcExtensionUIResponse) => T,\n\t): Promise<T> {\n\t\tif (opts?.signal?.aborted) return Promise.resolve(defaultValue);\n\n\t\tconst id = crypto.randomUUID();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n\t\t\tconst cleanup = () => {\n\t\t\t\tif (timeoutId) clearTimeout(timeoutId);\n\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tpendingExtensionRequests.delete(id);\n\t\t\t};\n\n\t\t\tconst onAbort = () => {\n\t\t\t\tcleanup();\n\t\t\t\tresolve(defaultValue);\n\t\t\t};\n\t\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\t\tif (opts?.timeout) {\n\t\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\t\tcleanup();\n\t\t\t\t\tresolve(defaultValue);\n\t\t\t\t}, opts.timeout);\n\t\t\t}\n\n\t\t\tpendingExtensionRequests.set(id, {\n\t\t\t\tresolve: (response: RpcExtensionUIResponse) => {\n\t\t\t\t\tcleanup();\n\t\t\t\t\tresolve(parseResponse(response));\n\t\t\t\t},\n\t\t\t\treject,\n\t\t\t});\n\t\t\toutput({ type: \"extension_ui_request\", id, ...request } as RpcExtensionUIRequest);\n\t\t});\n\t}\n\n\t/**\n\t * Create an extension UI context that uses the RPC protocol.\n\t */\n\tconst createExtensionUIContext = (): ExtensionUIContext => ({\n\t\tselect: (title, options, opts) =>\n\t\t\tcreateDialogPromise(opts, undefined, { method: \"select\", title, options, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? undefined : \"value\" in r ? r.value : undefined,\n\t\t\t),\n\n\t\tconfirm: (title, message, opts) =>\n\t\t\tcreateDialogPromise(opts, false, { method: \"confirm\", title, message, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? false : \"confirmed\" in r ? r.confirmed : false,\n\t\t\t),\n\n\t\tinput: (title, placeholder, opts) =>\n\t\t\tcreateDialogPromise(opts, undefined, { method: \"input\", title, placeholder, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? undefined : \"value\" in r ? r.value : undefined,\n\t\t\t),\n\n\t\tnotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void {\n\t\t\t// Fire and forget - no response needed\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"notify\",\n\t\t\t\tmessage,\n\t\t\t\tnotifyType: type,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tonTerminalInput(): () => void {\n\t\t\t// Raw terminal input not supported in RPC mode\n\t\t\treturn () => {};\n\t\t},\n\n\t\tsetStatus(key: string, text: string | undefined): void {\n\t\t\t// Fire and forget - no response needed\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"setStatus\",\n\t\t\t\tstatusKey: key,\n\t\t\t\tstatusText: text,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tsetWorkingMessage(_message?: string): void {\n\t\t\t// Working message not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetWorkingVisible(_visible: boolean): void {\n\t\t\t// Working visibility not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetWorkingIndicator(_options?: WorkingIndicatorOptions): void {\n\t\t\t// Working indicator customization not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetHiddenThinkingLabel(_label?: string): void {\n\t\t\t// Hidden thinking label not supported in RPC mode - requires TUI message rendering access\n\t\t},\n\n\t\tsetWidget(key: string, content: unknown, options?: ExtensionWidgetOptions): void {\n\t\t\tdisposeRenderer(key);\n\t\t\tretainedRendererFactories.delete(key);\n\t\t\tif (content === undefined || Array.isArray(content)) {\n\t\t\t\toutput({\n\t\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\tmethod: \"setWidget\",\n\t\t\t\t\twidgetKey: key,\n\t\t\t\t\twidgetLines: content as string[] | undefined,\n\t\t\t\t\twidgetPlacement: options?.placement,\n\t\t\t\t} as RpcExtensionUIRequest);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tretainedRendererFactories.set(key, () => {\n\t\t\t\tconst renderer = createLiveComponentRenderer({\n\t\t\t\t\tfactory: content as (\n\t\t\t\t\t\ttui: import(\"@earendil-works/pi-tui\").TUI,\n\t\t\t\t\t\tthm: Theme,\n\t\t\t\t\t) => import(\"@earendil-works/pi-tui\").Component,\n\t\t\t\t\tgetWidth: clientWidth,\n\t\t\t\t\temit: (widgetLines) =>\n\t\t\t\t\t\toutput({\n\t\t\t\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\t\t\tmethod: \"setWidget\",\n\t\t\t\t\t\t\twidgetKey: key,\n\t\t\t\t\t\t\twidgetLines,\n\t\t\t\t\t\t\twidgetPlacement: options?.placement,\n\t\t\t\t\t\t\t[RENDERED_COMPONENT_RECORD]: true,\n\t\t\t\t\t\t} as RpcExtensionUIRequest),\n\t\t\t\t});\n\t\t\t\tif (renderer) liveRenderers.set(key, renderer);\n\t\t\t});\n\t\t\tif (hasRenderedComponents()) retainedRendererFactories.get(key)!();\n\t\t},\n\n\t\tsetFooter(factory: unknown): void {\n\t\t\tconst key = \"__footer__\";\n\t\t\tdisposeRenderer(key);\n\t\t\tretainedRendererFactories.delete(key);\n\t\t\tif (factory === undefined) {\n\t\t\t\tif (hasRenderedComponents())\n\t\t\t\t\toutput({\n\t\t\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\t\tmethod: \"setFooter\",\n\t\t\t\t\t\twidgetLines: undefined,\n\t\t\t\t\t} as RpcExtensionUIRequest);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tretainedRendererFactories.set(key, () => {\n\t\t\t\tconst provider = options.footerDataProviderFactory?.(session) ?? createFooterDataProvider(session);\n\t\t\t\tconst renderer = createLiveComponentRenderer({\n\t\t\t\t\tfactory: factory as never,\n\t\t\t\t\tfactoryArgs: [provider],\n\t\t\t\t\tgetWidth: clientWidth,\n\t\t\t\t\temit: (widgetLines) =>\n\t\t\t\t\t\toutput({\n\t\t\t\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\t\t\tmethod: \"setFooter\",\n\t\t\t\t\t\t\twidgetLines,\n\t\t\t\t\t\t\t[RENDERED_COMPONENT_RECORD]: true,\n\t\t\t\t\t\t} as RpcExtensionUIRequest),\n\t\t\t\t});\n\t\t\t\tif (renderer) {\n\t\t\t\t\tliveRenderers.set(key, renderer);\n\t\t\t\t\tfooterProviders.set(key, provider);\n\t\t\t\t} else provider.dispose();\n\t\t\t});\n\t\t\tif (hasRenderedComponents()) retainedRendererFactories.get(key)!();\n\t\t},\n\n\t\tsetHeader(factory: unknown): void {\n\t\t\tconst key = \"__header__\";\n\t\t\tdisposeRenderer(key);\n\t\t\tretainedRendererFactories.delete(key);\n\t\t\tif (factory === undefined) {\n\t\t\t\tif (hasRenderedComponents())\n\t\t\t\t\toutput({\n\t\t\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\t\tmethod: \"setHeader\",\n\t\t\t\t\t\twidgetLines: undefined,\n\t\t\t\t\t} as RpcExtensionUIRequest);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tretainedRendererFactories.set(key, () => {\n\t\t\t\tconst renderer = createLiveComponentRenderer({\n\t\t\t\t\tfactory: factory as never,\n\t\t\t\t\tgetWidth: clientWidth,\n\t\t\t\t\temit: (widgetLines) =>\n\t\t\t\t\t\toutput({\n\t\t\t\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\t\t\tmethod: \"setHeader\",\n\t\t\t\t\t\t\twidgetLines,\n\t\t\t\t\t\t\t[RENDERED_COMPONENT_RECORD]: true,\n\t\t\t\t\t\t} as RpcExtensionUIRequest),\n\t\t\t\t});\n\t\t\t\tif (renderer) liveRenderers.set(key, renderer);\n\t\t\t});\n\t\t\tif (hasRenderedComponents()) retainedRendererFactories.get(key)!();\n\t\t},\n\n\t\tsetTitle(title: string): void {\n\t\t\t// Fire and forget - host can implement terminal title control\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"setTitle\",\n\t\t\t\ttitle,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tasync custom() {\n\t\t\t// Custom UI cannot be rendered in RPC mode. By default this returns\n\t\t\t// undefined synchronously with NO wire message — byte-identical to the\n\t\t\t// original behavior. ONLY when the client advertised the\n\t\t\t// \"custom_unsupported\" capability do we emit an additive notice request\n\t\t\t// so an opt-in client can render a \"requires the classic TUI\" dialog before\n\t\t\t// returning undefined. The name is best-effort: ctx.ui.custom carries no\n\t\t\t// extension identity, so a generic label is used.\n\t\t\tconst request = buildCustomUnsupportedRequest(clientCapabilities, DEFAULT_CUSTOM_EXTENSION_LABEL);\n\t\t\tif (request) {\n\t\t\t\toutput(request);\n\t\t\t}\n\t\t\treturn undefined as never;\n\t\t},\n\n\t\tpasteToEditor(text: string): void {\n\t\t\t// Paste handling not supported in RPC mode - falls back to setEditorText\n\t\t\tthis.setEditorText(text);\n\t\t},\n\n\t\tsetEditorText(text: string): void {\n\t\t\t// Fire and forget - host can implement editor control\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"set_editor_text\",\n\t\t\t\ttext,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tgetEditorText(): string {\n\t\t\t// Synchronous method can't wait for RPC response\n\t\t\t// Host should track editor state locally if needed\n\t\t\treturn \"\";\n\t\t},\n\n\t\tasync editor(title: string, prefill?: string): Promise<string | undefined> {\n\t\t\tconst id = crypto.randomUUID();\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tpendingExtensionRequests.set(id, {\n\t\t\t\t\tresolve: (response: RpcExtensionUIResponse) => {\n\t\t\t\t\t\tif (\"cancelled\" in response && response.cancelled) {\n\t\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\t} else if (\"value\" in response) {\n\t\t\t\t\t\t\tresolve(response.value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\treject,\n\t\t\t\t});\n\t\t\t\toutput({ type: \"extension_ui_request\", id, method: \"editor\", title, prefill } as RpcExtensionUIRequest);\n\t\t\t});\n\t\t},\n\n\t\taddAutocompleteProvider(): void {\n\t\t\t// Autocomplete provider composition is not supported in RPC mode\n\t\t},\n\n\t\tsetEditorComponent(): void {\n\t\t\t// Custom editor components not supported in RPC mode\n\t\t},\n\n\t\tgetEditorComponent() {\n\t\t\t// Custom editor components not supported in RPC mode\n\t\t\treturn undefined;\n\t\t},\n\n\t\tget theme() {\n\t\t\treturn theme;\n\t\t},\n\n\t\tgetAllThemes() {\n\t\t\treturn [];\n\t\t},\n\n\t\tgetTheme(_name: string) {\n\t\t\treturn undefined;\n\t\t},\n\n\t\tsetTheme(_theme: string | Theme) {\n\t\t\t// Theme switching not supported in RPC mode\n\t\t\treturn { success: false, error: \"Theme switching not supported in RPC mode\" };\n\t\t},\n\n\t\tgetToolsExpanded() {\n\t\t\t// Tool expansion not supported in RPC mode - no TUI\n\t\t\treturn false;\n\t\t},\n\n\t\tsetToolsExpanded(_expanded: boolean) {\n\t\t\t// Tool expansion not supported in RPC mode - no TUI\n\t\t},\n\t});\n\n\tconst refreshLoadedSurfacesAfter = async (operation: () => Promise<void>, resetMcp: boolean): Promise<void> => {\n\t\tconst previousDigest = loadedSurfacesDigest;\n\t\tconst wasSuppressed = suppressLoadedSurfaceEvents;\n\t\tsuppressLoadedSurfaceEvents = true;\n\t\tif (resetMcp) mcpWireStatus = { servers: [] };\n\t\tlet commandsChanged: ReturnType<typeof createCommandsChangedEvent>;\n\t\ttry {\n\t\t\tawait operation();\n\t\t\tawait requestMcpWireStatus();\n\t\t\tloadedSurfacesDigest = currentLoadedSurfaces().digest;\n\t\t\tconst commands = buildRpcCommandsForSession(session);\n\t\t\tcommandsChanged = createCommandsChangedEvent(rpcCommandsDigest, commands);\n\t\t\trpcCommandsDigest = rpcCommandListDigest(commands);\n\t\t} finally {\n\t\t\tsuppressLoadedSurfaceEvents = wasSuppressed;\n\t\t}\n\t\tif (!wasSuppressed && commandsChanged) {\n\t\t\toutputEvent(commandsChanged);\n\t\t}\n\t\tif (!wasSuppressed && previousDigest !== undefined && previousDigest !== loadedSurfacesDigest) {\n\t\t\toutputEvent({ type: \"loaded_surfaces_changed\" });\n\t\t}\n\t};\n\n\truntimeHost.setRebindSession(async () => {\n\t\t// AgentSessionRuntime invokes this callback while completing a replacement.\n\t\t// Do not await extension binding here: extensions may wait for session work\n\t\t// that the replacement still owns. The command response must acknowledge the\n\t\t// committed replacement; derived surfaces refresh out of band afterwards.\n\t\tawait rebindSession(true);\n\t});\n\n\tconst rebindAfterLocalReplacement = async (): Promise<void> => {\n\t\treplacementIssuedHere = true;\n\t\ttry {\n\t\t\tawait rebindSession();\n\t\t} finally {\n\t\t\treplacementIssuedHere = false;\n\t\t}\n\t};\n\n\tconst rebindSession = async (deferRefresh = false): Promise<void> => {\n\t\tunsubscribeLoadedSurfaces?.();\n\t\tunsubscribeExtensionEvents?.();\n\t\tconst replacedSession = session !== runtimeHost.session;\n\t\tsession = runtimeHost.session;\n\t\tif (replacedSession) {\n\t\t\tlastAbortSource = undefined;\n\t\t\tif (routingSessionId !== undefined || !replacementIssuedHere) {\n\t\t\t\t// A replacement can be driven by ANY attached client, so every connection must be\n\t\t\t\t// told the live binding moved and given the new authoritative identity. Emitted\n\t\t\t\t// before the derived-surface refresh so a client cannot act on the old identity in\n\t\t\t\t// the window the refresh takes.\n\t\t\t\toutputEvent({\n\t\t\t\t\ttype: \"session_replaced\",\n\t\t\t\t\tdurableSessionId: session.sessionId,\n\t\t\t\t\tsessionFile: session.sessionFile,\n\t\t\t\t\tcwd: session.sessionManager.getCwd(),\n\t\t\t\t\tsessionName: session.sessionName,\n\t\t\t\t} satisfies RpcSessionReplacedEvent);\n\t\t\t}\n\t\t}\n\t\tunsubscribeExtensionEvents = clientCapabilities?.includes(EXTENSION_EVENTS_CAPABILITY)\n\t\t\t? session.extensionRunner.onRpcEvent(({ name, data }) => {\n\t\t\t\t\toutputEvent({ type: \"extension_event\", name, data } satisfies RpcExtensionEvent);\n\t\t\t\t})\n\t\t\t: undefined;\n\t\tsubscribeLoadedSurfaceEvents();\n\t\t// Subscribe to the replaced session before its bind runs, not after. The bind\n\t\t// is deferred by design - awaiting it would deadlock a client whose\n\t\t// session_start handler blocks on an extension_ui_request it cannot answer\n\t\t// while still awaiting the replacement response - and it still mutates the\n\t\t// session it owns: pi-rules appends a durable scan entry from session_start.\n\t\t// Those entries must reach every attached connection, and nothing else can\n\t\t// carry them, because the session file is not written until an assistant\n\t\t// message exists, so a client that misses the notification can never\n\t\t// reconstruct the session it is bound to. Installing here also drops the\n\t\t// previous session's subscription immediately instead of after the bind.\n\t\tinstallSessionSubscriptions();\n\t\tconst refresh = refreshLoadedSurfacesAfter(\n\t\t\t() =>\n\t\t\t\tsession.bindExtensions({\n\t\t\t\t\tuiContext: createExtensionUIContext(),\n\t\t\t\t\tmode: \"rpc\",\n\t\t\t\t\tcommandContextActions: {\n\t\t\t\t\t\twaitForIdle: () => session.agent.waitForIdle(),\n\t\t\t\t\t\tnewSession: async (options) => runtimeHost.newSession(options),\n\t\t\t\t\t\tfork: async (entryId, forkOptions) => {\n\t\t\t\t\t\t\tconst result = await runtimeHost.fork(entryId, forkOptions);\n\t\t\t\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnavigateTree: async (targetId, options) => {\n\t\t\t\t\t\t\tconst result = await session.navigateTree(targetId, {\n\t\t\t\t\t\t\t\tsummarize: options?.summarize,\n\t\t\t\t\t\t\t\tcustomInstructions: options?.customInstructions,\n\t\t\t\t\t\t\t\treplaceInstructions: options?.replaceInstructions,\n\t\t\t\t\t\t\t\tlabel: options?.label,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t\t\t\t},\n\t\t\t\t\t\tswitchSession: async (sessionPath, options) => {\n\t\t\t\t\t\t\treturn runtimeHost.switchSession(sessionPath, options);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treload: async () => {\n\t\t\t\t\t\t\tawait refreshLoadedSurfacesAfter(async () => {\n\t\t\t\t\t\t\t\tawait session.reload();\n\t\t\t\t\t\t\t}, false);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tshutdownHandler: () => {\n\t\t\t\t\t\tif (options.shutdownHandler) {\n\t\t\t\t\t\t\toptions.shutdownHandler();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tshutdownRequested = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonError: (err) => {\n\t\t\t\t\t\toutput({\n\t\t\t\t\t\t\ttype: \"extension_error\",\n\t\t\t\t\t\t\textensionPath: err.extensionPath,\n\t\t\t\t\t\t\tevent: err.event,\n\t\t\t\t\t\t\terror: err.error,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\ttrue,\n\t\t);\n\t\tfunction installSessionSubscriptions(): void {\n\t\t\tunsubscribe?.();\n\t\t\tunsubscribeBackpressure?.();\n\t\t\tunsubscribe = session.subscribe((event) => {\n\t\t\t\tif (event.type === \"skill_invocation\") {\n\t\t\t\t\toutputEvent(event satisfies RpcSkillInvocationEvent);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (event.type === \"command_invocation\") {\n\t\t\t\t\toutputEvent(event satisfies RpcCommandInvocationEvent);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (event.type === \"thinking_level_changed\" || event.type === \"model_changed\") {\n\t\t\t\t\t// Core emits the effective level only; the selection provenance lives beside it\n\t\t\t\t\t// on the session and is what distinguishes an explicit choice from a default.\n\t\t\t\t\tconst thinkingSelection = session.thinkingSelection;\n\t\t\t\t\toutputEvent(thinkingSelection === undefined ? event : { ...event, thinkingSelection });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (event.type === \"agent_end\") {\n\t\t\t\t\t// The subscribe-path `agent_end` carries only { type, messages, willRetry };\n\t\t\t\t\t// the abort provenance the extension hook receives is stripped from it. Read\n\t\t\t\t\t// it from the session, which still reports the owner at this point, and retain\n\t\t\t\t\t// it for `get_state` because the getter clears once the turn settles.\n\t\t\t\t\tconst abortSource = session.currentAbortSource;\n\t\t\t\t\tif (abortSource !== undefined) lastAbortSource = abortSource;\n\t\t\t\t\toutputEvent(abortSource === undefined ? event : { ...event, aborted: true, abortSource });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\toutputEvent(event);\n\t\t\t});\n\t\t\tunsubscribeBackpressure = session.agent.subscribe(async () => {\n\t\t\t\tawait waitForRpcBackpressure();\n\t\t\t});\n\t\t}\n\t\tif (deferRefresh) {\n\t\t\t// The subscription is already installed on the replaced session above, so\n\t\t\t// the deferred refresh only needs its failure reported. Re-installing here\n\t\t\t// would replay the settings-source selection a second time.\n\t\t\tvoid refresh.catch((cause) => {\n\t\t\t\toutputEvent({ type: \"rpc_error\", error: String(cause) });\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tawait refresh;\n\t};\n\n\t/**\n\t * Drive an OAuth login for one provider as fire-command-then-subscribe.\n\t *\n\t * Reuses AuthStorage.login (the same callbacks the classic TUI uses). Only the\n\t * URL-based happy path is surfaced over RPC: onAuth emits an auth_login_url\n\t * event; success/failure/cancel emit a single auth_login_end event. Callbacks\n\t * that need interactive mid-flow input (onPrompt/onSelect/onManualCodeInput)\n\t * are not answerable in the event-only model, so they reject cleanly. Clients\n\t * use the browser/callback-server completion path. Secrets are never emitted:\n\t * only the provider id, the auth URL, and a success flag (plus a\n\t * non-secret error message) cross the wire.\n\t */\n\tconst startLogin = async (provider: string): Promise<void> => {\n\t\t// A second login_start for the same provider aborts the prior attempt.\n\t\tactiveLogins.get(provider)?.abort();\n\t\tconst controller = new AbortController();\n\t\tactiveLogins.set(provider, controller);\n\n\t\tconst rejectInteractive = (): never => {\n\t\t\tthrow new Error(\"Interactive login input is not supported over RPC\");\n\t\t};\n\n\t\ttry {\n\t\t\tawait session.modelRegistry.authStorage.login(provider as OAuthProviderId, {\n\t\t\t\tonAuth: (info) => {\n\t\t\t\t\toutputEvent({ type: \"auth_login_url\", provider, url: info.url });\n\t\t\t\t},\n\t\t\t\tonDeviceCode: (info) => {\n\t\t\t\t\toutputEvent({ type: \"auth_login_url\", provider, url: info.verificationUri });\n\t\t\t\t},\n\t\t\t\tonPrompt: async () => rejectInteractive(),\n\t\t\t\tonSelect: async () => rejectInteractive(),\n\t\t\t\tonProgress: () => {},\n\t\t\t\tsignal: controller.signal,\n\t\t\t});\n\t\t\tsession.modelRegistry.refresh();\n\t\t\tif (provider === CLAUDE_SDK_OAUTH_PROVIDER_ID) emitProviderAccountsChanged(provider);\n\t\t\toutputEvent({ type: \"auth_login_end\", provider, success: true });\n\t\t} catch (loginError: unknown) {\n\t\t\tconst message = loginError instanceof Error ? loginError.message : String(loginError);\n\t\t\toutputEvent({ type: \"auth_login_end\", provider, success: false, error: message });\n\t\t} finally {\n\t\t\tif (activeLogins.get(provider) === controller) {\n\t\t\t\tactiveLogins.delete(provider);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Host capabilities for `applyFastMode`, mirroring what the `/fast` command passes from its\n\t * extension context. The notification is dropped: a command response carries the message\n\t * (`data` on success, `error` on refusal), so a duplicate `extension_ui_request` would be noise.\n\t */\n\tconst fastModeContext = (): FastModeContext => ({\n\t\tcwd: session.cwd,\n\t\tagentDir: session.agentDir,\n\t\tmodel: session.model,\n\t\tmodelRegistry: session.modelRegistry,\n\t\tserviceTier: session.serviceTier,\n\t\tisProjectTrusted: () => session.settingsManager.isProjectTrusted(),\n\t\tnotify: () => {},\n\t\tsetSessionModel: async (model) => {\n\t\t\tif (!session.modelRuntime.hasConfiguredAuth(model.provider)) return false;\n\t\t\tawait session.setSessionModel(model);\n\t\t\treturn true;\n\t\t},\n\t\tsetSessionFastMode: (enabled) => session.setSessionFastMode(enabled),\n\t});\n\n\t// Handle a single command\n\tconst handleCommand = async (command: RpcCommand): Promise<RpcResponse | undefined> => {\n\t\tconst id = command.id;\n\n\t\tswitch (command.type) {\n\t\t\tcase \"get_protocol_info\":\n\t\t\t\treturn {\n\t\t\t\t\tid,\n\t\t\t\t\ttype: \"response\",\n\t\t\t\t\tcommand: \"get_protocol_info\",\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tprotocolVersion: 1,\n\t\t\t\t\t\tserverVersion: VERSION,\n\t\t\t\t\t\tcapabilities: [\n\t\t\t\t\t\t\t...new Set([\"multi_session\", AUTO_TITLE_SESSIONS_CAPABILITY, ...(options.capabilities ?? [])]),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tmode: \"classic\",\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\tcase \"open_session\":\n\t\t\t\treturn error(id, \"open_session\", \"multi_session_disabled\");\n\n\t\t\t// =================================================================\n\t\t\t// Prompting\n\t\t\t// =================================================================\n\n\t\t\tcase \"prompt\": {\n\t\t\t\tif (command.thinkingLevel !== undefined && session.isStreaming && command.streamingBehavior !== undefined) {\n\t\t\t\t\treturn error(\n\t\t\t\t\t\tid,\n\t\t\t\t\t\t\"prompt\",\n\t\t\t\t\t\t\"Cannot set thinkingLevel on a queued prompt; set it after the current turn completes.\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// Start prompt handling immediately, but emit the authoritative response only after\n\t\t\t\t// prompt preflight succeeds. Queued and immediately handled prompts also count as success.\n\t\t\t\t// The disposition is captured for the wire: AgentSession always fires promptDisposition\n\t\t\t\t// strictly before preflightResult(true), so the success frame carries the final value.\n\t\t\t\tlet preflightSucceeded = false;\n\t\t\t\tlet disposition: PromptDisposition | undefined;\n\t\t\t\tvoid session\n\t\t\t\t\t.prompt(command.message, {\n\t\t\t\t\t\timages: command.images,\n\t\t\t\t\t\tstreamingBehavior: command.streamingBehavior,\n\t\t\t\t\t\tthinkingLevel: command.thinkingLevel,\n\t\t\t\t\t\tsessionTitlePrompt: command.sessionTitlePrompt,\n\t\t\t\t\t\texpandPromptTemplates: command.expandPromptTemplates,\n\t\t\t\t\t\tsource: \"rpc\",\n\t\t\t\t\t\tpromptDisposition: (nextDisposition) => {\n\t\t\t\t\t\t\tdisposition = nextDisposition;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpreflightResult: (didSucceed) => {\n\t\t\t\t\t\t\tif (didSucceed && !preflightSucceeded) {\n\t\t\t\t\t\t\t\tpreflightSucceeded = true;\n\t\t\t\t\t\t\t\toutput(success(id, \"prompt\", { ...(disposition !== undefined ? { disposition } : {}) }));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\t.catch((e) => {\n\t\t\t\t\t\tif (!preflightSucceeded) {\n\t\t\t\t\t\t\toutput(error(id, \"prompt\", e.message));\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tcase \"append_user_message\": {\n\t\t\t\tconst content = command.content as Parameters<AgentSession[\"sendUserMessage\"]>[0];\n\t\t\t\tconst message =\n\t\t\t\t\ttypeof content === \"string\"\n\t\t\t\t\t\t? { role: \"user\" as const, content, timestamp: Date.now() }\n\t\t\t\t\t\t: { role: \"user\" as const, content, timestamp: Date.now() };\n\t\t\t\tsession.sessionManager.appendMessage(message);\n\t\t\t\tsession.agent.state.messages = session.sessionManager.buildSessionContext().messages;\n\t\t\t\treturn success(id, \"append_user_message\");\n\t\t\t}\n\n\t\t\tcase \"append_session_entry\": {\n\t\t\t\tsession.appendSessionEntry(command.entry);\n\t\t\t\treturn success(id, \"append_session_entry\");\n\t\t\t}\n\n\t\t\tcase \"send_custom_message\": {\n\t\t\t\tawait session.sendCustomMessage(\n\t\t\t\t\t{\n\t\t\t\t\t\tcustomType: command.customType,\n\t\t\t\t\t\tcontent: command.content as Parameters<AgentSession[\"sendCustomMessage\"]>[0][\"content\"],\n\t\t\t\t\t\tdisplay: command.display,\n\t\t\t\t\t\tdetails: command.details,\n\t\t\t\t\t},\n\t\t\t\t\t{ triggerTurn: command.triggerTurn, deliverAs: command.deliverAs },\n\t\t\t\t);\n\t\t\t\treturn success(id, \"send_custom_message\");\n\t\t\t}\n\n\t\t\tcase \"steer\": {\n\t\t\t\tawait session.steer(command.message, command.images, { enqueueOrder: command.enqueueOrder });\n\t\t\t\treturn success(id, \"steer\");\n\t\t\t}\n\n\t\t\tcase \"follow_up\": {\n\t\t\t\tawait session.followUp(command.message, command.images, { enqueueOrder: command.enqueueOrder });\n\t\t\t\treturn success(id, \"follow_up\");\n\t\t\t}\n\n\t\t\tcase \"abort\": {\n\t\t\t\tvoid session.abort().catch((cause: unknown) => {\n\t\t\t\t\t// Abort is acknowledged once dispatched; report quiesce failures out of band.\n\t\t\t\t\toutputEvent({ type: \"rpc_error\", error: String(cause) });\n\t\t\t\t});\n\t\t\t\treturn success(id, \"abort\");\n\t\t\t}\n\n\t\t\tcase \"abort_compaction\": {\n\t\t\t\tsession.abortCompaction();\n\t\t\t\treturn success(id, \"abort_compaction\");\n\t\t\t}\n\n\t\t\tcase \"reload\": {\n\t\t\t\tconst result = await session.reload();\n\t\t\t\treturn success(id, \"reload\", result);\n\t\t\t}\n\n\t\t\tcase \"check_reload_veto\": {\n\t\t\t\treturn success(id, \"check_reload_veto\", await session.checkReloadVeto());\n\t\t\t}\n\n\t\t\tcase \"clear_queue\": {\n\t\t\t\tconst cleared = session.clearQueue({ abortWillFollow: command.abortWillFollow ?? false });\n\t\t\t\treturn success(id, \"clear_queue\", {\n\t\t\t\t\tsteering: cleared.steering,\n\t\t\t\t\tfollowUp: cleared.followUp,\n\t\t\t\t\tordered: [...cleared.ordered],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"get_steering_messages\":\n\t\t\t\treturn success(id, \"get_steering_messages\", { messages: [...session.getSteeringMessages()] });\n\n\t\t\tcase \"get_follow_up_messages\":\n\t\t\t\treturn success(id, \"get_follow_up_messages\", { messages: [...session.getFollowUpMessages()] });\n\n\t\t\tcase \"abort_branch_summary\":\n\t\t\t\tsession.abortBranchSummary();\n\t\t\t\treturn success(id, \"abort_branch_summary\");\n\n\t\t\tcase \"new_session\": {\n\t\t\t\tconst options = command.parentSession ? { parentSession: command.parentSession } : undefined;\n\t\t\t\tconst result = await runtimeHost.newSession(options);\n\t\t\t\tif (routingSessionId === undefined && !result.cancelled && session !== runtimeHost.session)\n\t\t\t\t\tawait rebindAfterLocalReplacement();\n\t\t\t\treturn success(id, \"new_session\", result);\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// State\n\t\t\t// =================================================================\n\n\t\t\tcase \"set_client_info\":\n\t\t\t\tif (options.sharedWidth && command.capabilities !== undefined) {\n\t\t\t\t\tclientCapabilities = command.capabilities;\n\t\t\t\t\toptions.sharedWidth.setCapabilities?.(options.sharedWidth.connectionId(), command.capabilities);\n\t\t\t\t}\n\t\t\t\tif (Number.isFinite(command.width) && command.width > 0) {\n\t\t\t\t\tif (options.sharedWidth) {\n\t\t\t\t\t\toptions.sharedWidth.setWidth(options.sharedWidth.connectionId(), command.width);\n\t\t\t\t\t\toptions.sharedWidth.onChange?.();\n\t\t\t\t\t} else for (const renderer of liveRenderers.values()) renderer.rerender();\n\t\t\t\t}\n\t\t\t\treturn success(id, \"set_client_info\");\n\n\t\t\tcase \"get_state\":\n\t\t\t\treturn success(id, \"get_state\", buildRpcSessionState(session, lastAbortSource));\n\n\t\t\t// =================================================================\n\t\t\t// Model\n\t\t\t// =================================================================\n\n\t\t\tcase \"set_model\": {\n\t\t\t\tconst models = await session.modelRegistry.getAvailable();\n\t\t\t\tconst model = models.find((m) => m.provider === command.provider && m.id === command.modelId);\n\t\t\t\tif (!model) {\n\t\t\t\t\treturn error(id, \"set_model\", `Model not found: ${command.provider}/${command.modelId}`);\n\t\t\t\t}\n\t\t\t\tconst systemPromptChange = await session.setModel(model);\n\t\t\t\treturn success(id, \"set_model\", { ...model, systemPromptName: systemPromptChange?.systemPromptName });\n\t\t\t}\n\n\t\t\tcase \"set_favorite_models\":\n\t\t\t\tsession.setFavoriteModels(command.models);\n\t\t\t\treturn success(id, \"set_favorite_models\");\n\n\t\t\tcase \"set_scoped_models\":\n\t\t\t\tsession.setScopedModels(command.models);\n\t\t\t\treturn success(id, \"set_scoped_models\");\n\n\t\t\tcase \"cycle_model\": {\n\t\t\t\tconst result = await session.cycleModel(command.direction);\n\t\t\t\tif (!result) {\n\t\t\t\t\treturn success(id, \"cycle_model\", null);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"cycle_model\", result);\n\t\t\t}\n\n\t\t\tcase \"get_available_models\": {\n\t\t\t\tconst models = await session.modelRegistry.getAvailable();\n\t\t\t\treturn success(id, \"get_available_models\", {\n\t\t\t\t\tmodels: models.map((model) => ({\n\t\t\t\t\t\t...model,\n\t\t\t\t\t\tsupportedThinkingLevels: getSupportedThinkingLevels(model),\n\t\t\t\t\t})),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Thinking\n\t\t\t// =================================================================\n\n\t\t\tcase \"set_thinking_level\": {\n\t\t\t\tif (command.scope === \"turn\") {\n\t\t\t\t\t// Validate BEFORE mutating: the session clamps an unsupported level to a supported\n\t\t\t\t\t// neighbour, so applying first would leave a REJECTED request's clamped level in\n\t\t\t\t\t// place. A failed command must not change session state.\n\t\t\t\t\tif (!session.getAvailableThinkingLevels().includes(command.level)) {\n\t\t\t\t\t\treturn error(\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\"set_thinking_level\",\n\t\t\t\t\t\t\t`Thinking level ${command.level} is not supported by the active model.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tsession.setSessionThinkingLevel(command.level);\n\t\t\t\t} else {\n\t\t\t\t\tsession.setThinkingLevel(command.level);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"set_thinking_level\");\n\t\t\t}\n\n\t\t\tcase \"cycle_thinking_level\": {\n\t\t\t\tconst level = session.cycleThinkingLevel();\n\t\t\t\tif (!level) {\n\t\t\t\t\treturn success(id, \"cycle_thinking_level\", null);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"cycle_thinking_level\", { level });\n\t\t\t}\n\n\t\t\tcase \"get_available_thinking_levels\":\n\t\t\t\treturn success(id, \"get_available_thinking_levels\", {\n\t\t\t\t\tlevels: session.getAvailableThinkingLevels(),\n\t\t\t\t});\n\n\t\t\t// =================================================================\n\t\t\t// Fast mode\n\t\t\t// =================================================================\n\n\t\t\tcase \"set_fast_mode\": {\n\t\t\t\tif (typeof command.enabled !== \"boolean\") {\n\t\t\t\t\treturn error(id, \"set_fast_mode\", \"set_fast_mode requires a boolean 'enabled' field.\");\n\t\t\t\t}\n\t\t\t\tconst model = session.model;\n\t\t\t\tif (!model) {\n\t\t\t\t\treturn error(id, \"set_fast_mode\", \"No active model.\");\n\t\t\t\t}\n\t\t\t\t// Same entry point as the /fast command: persistence, `-fast` key normalization,\n\t\t\t\t// and pin precedence live in applyFastMode, never duplicated here.\n\t\t\t\tconst result = await applyFastMode(fastModeContext(), command.enabled);\n\t\t\t\tif (!result.applied) {\n\t\t\t\t\t// A refusal (non-Codex model, active `:priority` pin, failed model switch) has no\n\t\t\t\t\t// notification channel for a command response, so it is reported as an error\n\t\t\t\t\t// instead of a success that silently did nothing.\n\t\t\t\t\treturn error(id, \"set_fast_mode\", result.message);\n\t\t\t\t}\n\t\t\t\tconst memoryModel = resolveServiceTierMemoryModel(session.modelRegistry, session.model ?? model);\n\t\t\t\treturn success(id, \"set_fast_mode\", {\n\t\t\t\t\tenabled: result.enabled,\n\t\t\t\t\tserviceTier: result.recordedTier,\n\t\t\t\t\tprovider: memoryModel.provider,\n\t\t\t\t\tmodelId: memoryModel.id,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"get_fast_mode\":\n\t\t\t\treturn success(id, \"get_fast_mode\", {\n\t\t\t\t\tenabled: session.isFastModeActive(),\n\t\t\t\t\tserviceTier: session.effectiveServiceTier ?? null,\n\t\t\t\t});\n\n\t\t\t// =================================================================\n\t\t\t// Queue Modes\n\t\t\t// =================================================================\n\n\t\t\tcase \"set_steering_mode\": {\n\t\t\t\tsession.setSteeringMode(command.mode);\n\t\t\t\treturn success(id, \"set_steering_mode\");\n\t\t\t}\n\n\t\t\tcase \"set_follow_up_mode\": {\n\t\t\t\tsession.setFollowUpMode(command.mode);\n\t\t\t\treturn success(id, \"set_follow_up_mode\");\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Compaction\n\t\t\t// =================================================================\n\n\t\t\tcase \"compact\": {\n\t\t\t\tconst result = await session.compact(command.customInstructions);\n\t\t\t\treturn success(id, \"compact\", result);\n\t\t\t}\n\n\t\t\tcase \"set_auto_compaction\": {\n\t\t\t\tsession.setAutoCompactionEnabled(command.enabled);\n\t\t\t\treturn success(id, \"set_auto_compaction\");\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Retry\n\t\t\t// =================================================================\n\n\t\t\tcase \"set_auto_retry\": {\n\t\t\t\tsession.setAutoRetryEnabled(command.enabled);\n\t\t\t\treturn success(id, \"set_auto_retry\");\n\t\t\t}\n\n\t\t\tcase \"abort_retry\": {\n\t\t\t\tsession.abortRetry();\n\t\t\t\treturn success(id, \"abort_retry\");\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Bash\n\t\t\t// =================================================================\n\n\t\t\tcase \"navigate_tree\": {\n\t\t\t\tconst result = await session.navigateTree(command.targetId, {\n\t\t\t\t\tsummarize: command.summarize,\n\t\t\t\t\tcustomInstructions: command.customInstructions,\n\t\t\t\t\treplaceInstructions: command.replaceInstructions,\n\t\t\t\t\tlabel: command.label,\n\t\t\t\t});\n\t\t\t\treturn success(id, \"navigate_tree\", result);\n\t\t\t}\n\n\t\t\tcase \"record_bash_result\":\n\t\t\t\tsession.recordBashResult(command.command, command.result, {\n\t\t\t\t\texcludeFromContext: command.excludeFromContext,\n\t\t\t\t});\n\t\t\t\treturn success(id, \"record_bash_result\");\n\n\t\t\tcase \"set_label\":\n\t\t\t\tsession.sessionManager.appendLabelChange(command.entryId, command.label);\n\t\t\t\treturn success(id, \"set_label\");\n\n\t\t\tcase \"bash\": {\n\t\t\t\tif (routingSessionId !== undefined) outputEvent({ type: \"bash_start\" });\n\t\t\t\ttry {\n\t\t\t\t\tconst eventResult = await session.extensionRunner.emitUserBash({\n\t\t\t\t\t\ttype: \"user_bash\",\n\t\t\t\t\t\tcommand: command.command,\n\t\t\t\t\t\texcludeFromContext: command.excludeFromContext ?? false,\n\t\t\t\t\t\tcwd: session.sessionManager.getCwd(),\n\t\t\t\t\t});\n\t\t\t\t\tif (eventResult?.result) {\n\t\t\t\t\t\tsession.recordBashResult(command.command, eventResult.result, {\n\t\t\t\t\t\t\texcludeFromContext: command.excludeFromContext,\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn success(id, \"bash\", eventResult.result);\n\t\t\t\t\t}\n\t\t\t\t\tconst result = await session.executeBash(command.command, undefined, {\n\t\t\t\t\t\texcludeFromContext: command.excludeFromContext,\n\t\t\t\t\t\tid: command.executionId,\n\t\t\t\t\t\t// Functions cannot cross JSONL. Host extensions may still provide the\n\t\t\t\t\t\t// executable operations object; client-supplied data is only a wire-safe hint.\n\t\t\t\t\t\toperations: eventResult?.operations,\n\t\t\t\t\t});\n\t\t\t\t\treturn success(id, \"bash\", result);\n\t\t\t\t} finally {\n\t\t\t\t\tif (routingSessionId !== undefined) outputEvent({ type: \"bash_end\" });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcase \"abort_bash\": {\n\t\t\t\tsession.abortBash();\n\t\t\t\treturn success(id, \"abort_bash\");\n\t\t\t}\n\n\t\t\tcase \"cleanup_bash_output\":\n\t\t\t\tawait session.cleanupBashOutput(command.path);\n\t\t\t\treturn success(id, \"cleanup_bash_output\");\n\n\t\t\t// =================================================================\n\t\t\t// Session\n\t\t\t// =================================================================\n\n\t\t\tcase \"get_session_stats\": {\n\t\t\t\tconst stats = session.getSessionStats();\n\t\t\t\treturn success(id, \"get_session_stats\", stats);\n\t\t\t}\n\n\t\t\tcase \"export_html\": {\n\t\t\t\tconst path = await session.exportToHtml(command.outputPath, { themeName: command.themeName });\n\t\t\t\treturn success(id, \"export_html\", { path });\n\t\t\t}\n\n\t\t\tcase \"export_jsonl\": {\n\t\t\t\treturn success(id, \"export_jsonl\", { path: session.exportToJsonl(command.outputPath) });\n\t\t\t}\n\n\t\t\tcase \"switch_session\": {\n\t\t\t\tconst result = await runtimeHost.switchSession(command.sessionPath, { cwdOverride: command.cwdOverride });\n\t\t\t\tif (routingSessionId === undefined && !result.cancelled && session !== runtimeHost.session)\n\t\t\t\t\tawait rebindAfterLocalReplacement();\n\t\t\t\treturn success(id, \"switch_session\", result);\n\t\t\t}\n\n\t\t\tcase \"fork\": {\n\t\t\t\tconst result = await runtimeHost.fork(command.entryId, { position: command.position });\n\t\t\t\tif (routingSessionId === undefined && !result.cancelled && session !== runtimeHost.session)\n\t\t\t\t\tawait rebindAfterLocalReplacement();\n\t\t\t\treturn success(id, \"fork\", { text: result.selectedText, cancelled: result.cancelled });\n\t\t\t}\n\n\t\t\tcase \"clone\": {\n\t\t\t\tconst leafId = session.sessionManager.getLeafId();\n\t\t\t\tif (!leafId) {\n\t\t\t\t\treturn error(id, \"clone\", \"Cannot clone session: no current entry selected\");\n\t\t\t\t}\n\t\t\t\tconst result = await runtimeHost.fork(leafId, { position: \"at\" });\n\t\t\t\tif (routingSessionId === undefined && !result.cancelled && session !== runtimeHost.session)\n\t\t\t\t\tawait rebindAfterLocalReplacement();\n\t\t\t\treturn success(id, \"clone\", { cancelled: result.cancelled });\n\t\t\t}\n\n\t\t\tcase \"get_fork_messages\": {\n\t\t\t\tconst messages = session.getUserMessagesForForking();\n\t\t\t\treturn success(id, \"get_fork_messages\", { messages });\n\t\t\t}\n\n\t\t\tcase \"get_entries\": {\n\t\t\t\tconst sessionManager = session.sessionManager;\n\t\t\t\tlet entries = sessionManager.getEntries();\n\t\t\t\tif (command.since !== undefined) {\n\t\t\t\t\tconst sinceIndex = entries.findIndex((e) => e.id === command.since);\n\t\t\t\t\tif (sinceIndex === -1) {\n\t\t\t\t\t\treturn error(id, \"get_entries\", `Entry not found: ${command.since}`);\n\t\t\t\t\t}\n\t\t\t\t\tentries = entries.slice(sinceIndex + 1);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"get_entries\", { entries, leafId: sessionManager.getLeafId() });\n\t\t\t}\n\n\t\t\tcase \"get_tree\": {\n\t\t\t\tconst sessionManager = session.sessionManager;\n\t\t\t\treturn success(id, \"get_tree\", { tree: sessionManager.getTree(), leafId: sessionManager.getLeafId() });\n\t\t\t}\n\n\t\t\tcase \"get_last_assistant_text\": {\n\t\t\t\tconst text = session.getLastAssistantText();\n\t\t\t\treturn success(id, \"get_last_assistant_text\", { text });\n\t\t\t}\n\n\t\t\tcase \"import_jsonl\": {\n\t\t\t\tconst result = await runtimeHost.importFromJsonl(command.inputPath, command.cwdOverride);\n\t\t\t\tif (routingSessionId === undefined && !result.cancelled && session !== runtimeHost.session)\n\t\t\t\t\tawait rebindAfterLocalReplacement();\n\t\t\t\treturn success(id, \"import_jsonl\", result);\n\t\t\t}\n\n\t\t\tcase \"set_session_name\": {\n\t\t\t\tconst name = command.name.trim();\n\t\t\t\tif (!name) {\n\t\t\t\t\treturn error(id, \"set_session_name\", \"Session name cannot be empty\");\n\t\t\t\t}\n\t\t\t\tsession.setSessionName(name);\n\t\t\t\treturn success(id, \"set_session_name\");\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Messages\n\t\t\t// =================================================================\n\n\t\t\tcase \"get_messages\": {\n\t\t\t\treturn success(id, \"get_messages\", { messages: session.messages });\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Commands (available for invocation via prompt)\n\t\t\t// =================================================================\n\n\t\t\tcase \"get_commands\": {\n\t\t\t\treturn success(id, \"get_commands\", { commands: buildRpcCommandsForSession(session) });\n\t\t\t}\n\n\t\t\tcase \"get_loaded_surfaces\": {\n\t\t\t\tawait requestMcpWireStatus();\n\t\t\t\tconst inventory = recordLoadedSurfaces(true);\n\t\t\t\treturn success(id, \"get_loaded_surfaces\", inventory.data);\n\t\t\t}\n\n\t\t\tcase \"extension_request\": {\n\t\t\t\tconst name = command.name.trim();\n\t\t\t\tif (name.length === 0) {\n\t\t\t\t\treturn error(id, \"extension_request\", \"Extension RPC request name cannot be empty\");\n\t\t\t\t}\n\t\t\t\tconst data = await session.extensionRunner.requestRpc(name, command.data);\n\t\t\t\treturn success(id, \"extension_request\", data);\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Auth (task 13)\n\t\t\t// =================================================================\n\n\t\t\tcase \"get_auth_providers\": {\n\t\t\t\tconst modelRegistry = session.modelRegistry;\n\t\t\t\tconst oauthInfos = buildLoginProviderInfos(modelRegistry, \"oauth\");\n\t\t\t\tconst apiKeyInfos = buildLoginProviderInfos(modelRegistry, \"api_key\");\n\t\t\t\tconst providers: RpcAuthProvider[] = [...oauthInfos, ...apiKeyInfos].map((info) => ({\n\t\t\t\t\tid: info.id,\n\t\t\t\t\tname: info.name,\n\t\t\t\t\tauthType: info.authType,\n\t\t\t\t\tstatus: modelRegistry.getProviderAuthStatus(info.id),\n\t\t\t\t}));\n\t\t\t\treturn success(id, \"get_auth_providers\", { providers });\n\t\t\t}\n\n\t\t\tcase \"login_start\": {\n\t\t\t\t// Respond IMMEDIATELY: success:true means the flow has started. The\n\t\t\t\t// URL and terminal result are delivered via auth_login_url /\n\t\t\t\t// auth_login_end events, because an interactive OAuth round-trip\n\t\t\t\t// cannot fit within the request timeout.\n\t\t\t\tvoid startLogin(command.provider);\n\t\t\t\treturn success(id, \"login_start\");\n\t\t\t}\n\n\t\t\tcase \"login_cancel\": {\n\t\t\t\tconst controller = activeLogins.get(command.provider);\n\t\t\t\tcontroller?.abort();\n\t\t\t\treturn success(id, \"login_cancel\");\n\t\t\t}\n\n\t\t\tcase \"login_api_key\": {\n\t\t\t\tsession.modelRegistry.authStorage.set(command.provider, { type: \"api_key\", key: command.key });\n\t\t\t\tsession.modelRegistry.refresh();\n\t\t\t\treturn success(id, \"login_api_key\");\n\t\t\t}\n\n\t\t\tcase \"logout\": {\n\t\t\t\tsession.modelRegistry.authStorage.logout(command.provider);\n\t\t\t\tsession.modelRegistry.refresh();\n\t\t\t\treturn success(id, \"logout\");\n\t\t\t}\n\n\t\t\tcase \"get_provider_accounts\": {\n\t\t\t\tconst accounts = await getCredentialAccounts(session.modelRegistry.authStorage, command.provider);\n\t\t\t\treturn success(id, \"get_provider_accounts\", { accounts });\n\t\t\t}\n\n\t\t\tcase \"account_pin\": {\n\t\t\t\tawait pinCredentialAccount(session.modelRegistry.authStorage, command.provider, command.name);\n\t\t\t\treturn success(id, \"account_pin\");\n\t\t\t}\n\n\t\t\tcase \"account_remove\": {\n\t\t\t\tawait removeCredentialAccount(session.modelRegistry.authStorage, command.provider, command.name);\n\t\t\t\treturn success(id, \"account_remove\");\n\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\tconst unknownCommand = command as { type: string };\n\t\t\t\treturn error(id, unknownCommand.type, `Unknown command: ${unknownCommand.type}`);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleInputLine = async (line: string): Promise<void> => {\n\t\tlet parsed: unknown;\n\t\ttry {\n\t\t\tparsed = JSON.parse(line);\n\t\t} catch (parseError: unknown) {\n\t\t\toutput(\n\t\t\t\terror(\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"parse\",\n\t\t\t\t\t`Failed to parse command: ${parseError instanceof Error ? parseError.message : String(parseError)}`,\n\t\t\t\t),\n\t\t\t);\n\t\t\tawait waitForRpcBackpressure();\n\t\t\treturn;\n\t\t}\n\n\t\tconst shapeError = rpcCommandShapeError(parsed);\n\t\tif (shapeError) {\n\t\t\toutput(error(undefined, \"parse\", shapeError));\n\t\t\tawait waitForRpcBackpressure();\n\t\t\treturn;\n\t\t}\n\n\t\t// Handle extension UI responses\n\t\tif (\n\t\t\ttypeof parsed === \"object\" &&\n\t\t\tparsed !== null &&\n\t\t\t\"type\" in parsed &&\n\t\t\tparsed.type === \"extension_ui_response\"\n\t\t) {\n\t\t\tconst response = parsed as RpcExtensionUIResponse;\n\t\t\tif (!pendingExtensionRequests.resolve(response) && routingSessionId !== undefined) {\n\t\t\t\t// This binding owns exactly one session's request map. A response not\n\t\t\t\t// requested here is a routed protocol error, never a cross-session match.\n\t\t\t\toutput(error(undefined, \"extension_ui_response\", \"unknown_extension_ui_request\"));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst command = parsed as RpcCommand;\n\t\tconst payloadError = rpcCommandPayloadError(command);\n\t\tconst messageLengthError = rpcMessageLengthError(command);\n\t\tif (payloadError || messageLengthError) {\n\t\t\toutput(error(command.id, command.type, payloadError ?? messageLengthError!));\n\t\t\tawait waitForRpcBackpressure();\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tconst response = await handleCommand(command);\n\t\t\tif (response) {\n\t\t\t\toutput(response);\n\t\t\t\tawait waitForRpcBackpressure();\n\t\t\t}\n\t\t} catch (commandError: unknown) {\n\t\t\tconst missingCwd =\n\t\t\t\tcommandError instanceof Error && commandError.name === \"MissingSessionCwdError\" && \"issue\" in commandError;\n\t\t\toutput(\n\t\t\t\terror(\n\t\t\t\t\tcommand.id,\n\t\t\t\t\tcommand.type,\n\t\t\t\t\tcommandError instanceof Error ? commandError.message : String(commandError),\n\t\t\t\t\tmissingCwd ? \"missing_session_cwd\" : undefined,\n\t\t\t\t\tmissingCwd ? commandError.issue : undefined,\n\t\t\t\t),\n\t\t\t);\n\t\t\tawait waitForRpcBackpressure();\n\t\t}\n\t};\n\n\tconst dispose = async (): Promise<void> => {\n\t\tdisposeAllRenderers();\n\t\tpendingExtensionRequests.close();\n\t\tunsubscribeProviderAccountEvents();\n\t\tunsubscribe?.();\n\t\tunsubscribeBackpressure?.();\n\t\tunsubscribeLoadedSurfaces?.();\n\t\tunsubscribeExtensionEvents?.();\n\t\tunsubscribe = undefined;\n\t\tunsubscribeBackpressure = undefined;\n\t\tunsubscribeLoadedSurfaces = undefined;\n\t\tunsubscribeExtensionEvents = undefined;\n\t\tif (options.disposeRuntime !== false) {\n\t\t\tawait runtimeHost.dispose();\n\t\t}\n\t};\n\n\t// Perform the initial bind synchronously-scheduled so the handler is ready\n\t// as soon as the caller awaits `ready`.\n\tconst ready = rebindSession();\n\n\treturn {\n\t\tready,\n\t\tasync handleInputLine(line: string) {\n\t\t\tawait ready;\n\t\t\tawait handleInputLine(line);\n\t\t},\n\t\trerenderComponents() {\n\t\t\tif (!hasRenderedComponents()) {\n\t\t\t\tdisposeAllRenderers();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfor (const [key, createRenderer] of retainedRendererFactories) if (!liveRenderers.has(key)) createRenderer();\n\t\t\tfor (const renderer of liveRenderers.values()) renderer.rerender();\n\t\t},\n\t\tisShutdownRequested() {\n\t\t\treturn shutdownRequested;\n\t\t},\n\t\tcancelPendingExtensionUiRequests() {\n\t\t\tpendingExtensionRequests.cancelAll();\n\t\t},\n\t\tasync dispose() {\n\t\t\tawait ready;\n\t\t\tawait dispose();\n\t\t},\n\t};\n}\n"]}
|
|
@@ -18,6 +18,7 @@ import type { RpcExtensionUIRequest } from "./rpc-types.ts";
|
|
|
18
18
|
export declare const CUSTOM_UNSUPPORTED_CAPABILITY = "custom_unsupported";
|
|
19
19
|
export declare const EXTENSION_EVENTS_CAPABILITY = "extension_events";
|
|
20
20
|
export declare const RENDERED_COMPONENTS_CAPABILITY = "rendered_components";
|
|
21
|
+
export declare const AUTO_TITLE_SESSIONS_CAPABILITY = "auto_title_sessions";
|
|
21
22
|
/**
|
|
22
23
|
* Env var carrying client capabilities to a single-connection stdio RPC host
|
|
23
24
|
* (comma-separated). A launcher may set it from a client handshake; a plain
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-capability.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/custom-capability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE5D,oFAAoF;AACpF,eAAO,MAAM,6BAA6B,uBAAuB,CAAC;AAClE,eAAO,MAAM,2BAA2B,qBAAqB,CAAC;AAC9D,eAAO,MAAM,8BAA8B,wBAAwB,CAAC;AAEpE;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,kCAAkC,CAAC;AAE3E,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAM3E;AAED,6EAA6E;AAC7E,eAAO,MAAM,8BAA8B,wBAAwB,CAAC;AAEpE;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC5C,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EAC3C,aAAa,EAAE,MAAM,GACnB,qBAAqB,GAAG,SAAS,CAWnC"}
|
|
1
|
+
{"version":3,"file":"custom-capability.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/custom-capability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE5D,oFAAoF;AACpF,eAAO,MAAM,6BAA6B,uBAAuB,CAAC;AAClE,eAAO,MAAM,2BAA2B,qBAAqB,CAAC;AAC9D,eAAO,MAAM,8BAA8B,wBAAwB,CAAC;AACpE,eAAO,MAAM,8BAA8B,wBAAwB,CAAC;AAEpE;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,kCAAkC,CAAC;AAE3E,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAM3E;AAED,6EAA6E;AAC7E,eAAO,MAAM,8BAA8B,wBAAwB,CAAC;AAEpE;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC5C,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EAC3C,aAAa,EAAE,MAAM,GACnB,qBAAqB,GAAG,SAAS,CAWnC"}
|
|
@@ -18,6 +18,7 @@ import * as crypto from "node:crypto";
|
|
|
18
18
|
export const CUSTOM_UNSUPPORTED_CAPABILITY = "custom_unsupported";
|
|
19
19
|
export const EXTENSION_EVENTS_CAPABILITY = "extension_events";
|
|
20
20
|
export const RENDERED_COMPONENTS_CAPABILITY = "rendered_components";
|
|
21
|
+
export const AUTO_TITLE_SESSIONS_CAPABILITY = "auto_title_sessions";
|
|
21
22
|
/**
|
|
22
23
|
* Env var carrying client capabilities to a single-connection stdio RPC host
|
|
23
24
|
* (comma-separated). A launcher may set it from a client handshake; a plain
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-capability.js","sourceRoot":"","sources":["../../../src/modes/rpc/custom-capability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAGtC,oFAAoF;AACpF,MAAM,CAAC,MAAM,6BAA6B,GAAG,oBAAoB,CAAC;AAClE,MAAM,CAAC,MAAM,2BAA2B,GAAG,kBAAkB,CAAC;AAC9D,MAAM,CAAC,MAAM,8BAA8B,GAAG,qBAAqB,CAAC;AAEpE;;;;GAIG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,+BAA+B,CAAC;AAE3E,4EAA4E;AAC5E,MAAM,UAAU,uBAAuB,CAAC,KAAyB;IAChE,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,KAAK;SACV,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,MAAM,8BAA8B,GAAG,qBAAqB,CAAC;AAEpE;;;;;;GAMG;AACH,MAAM,UAAU,6BAA6B,CAC5C,YAA2C,EAC3C,aAAqB;IAErB,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;QAC5D,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,8BAA8B,CAAC;IACpE,OAAO;QACN,IAAI,EAAE,sBAAsB;QAC5B,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;QACvB,MAAM,EAAE,oBAAoB;QAC5B,aAAa,EAAE,IAAI;KACnB,CAAC;AACH,CAAC","sourcesContent":["/**\n * The `custom_unsupported` capability gate (plan tasks 13/14).\n *\n * In RPC mode `ctx.ui.custom` cannot render a third-party component — there is no\n * TUI to render it FROM. Historically it returned `undefined` synchronously with\n * NO wire message, so a default RPC client saw nothing at all. A client that\n * can present a native \"this extension UI requires the classic TUI\" notice opts\n * in via a capability flag.\n *\n * This gate is a PURE function so the additive-only guarantee is unit-provable:\n * only a client that advertised the `custom_unsupported` capability gets the\n * additive `extension_ui_request{method:\"custom_unsupported\"}` notice; every\n * other (default) client gets `undefined` — byte-identical to the prior\n * behavior, no extra bytes on the wire.\n */\n\nimport * as crypto from \"node:crypto\";\nimport type { RpcExtensionUIRequest } from \"./rpc-types.ts\";\n\n/** The capability string a client sends in its handshake to opt into the notice. */\nexport const CUSTOM_UNSUPPORTED_CAPABILITY = \"custom_unsupported\";\nexport const EXTENSION_EVENTS_CAPABILITY = \"extension_events\";\nexport const RENDERED_COMPONENTS_CAPABILITY = \"rendered_components\";\n\n/**\n * Env var carrying client capabilities to a single-connection stdio RPC host\n * (comma-separated). A launcher may set it from a client handshake; a plain\n * stdio client leaves it unset and sees byte-identical default behavior.\n */\nexport const RPC_CLIENT_CAPABILITIES_ENV = \"SENPI_RPC_CLIENT_CAPABILITIES\";\n\n/** Parse the comma-separated capabilities env value into a trimmed list. */\nexport function parseClientCapabilities(value: string | undefined): string[] {\n\tif (!value) return [];\n\treturn value\n\t\t.split(\",\")\n\t\t.map((part) => part.trim())\n\t\t.filter((part) => part.length > 0);\n}\n\n/** Fallback label when the calling extension's name cannot be determined. */\nexport const DEFAULT_CUSTOM_EXTENSION_LABEL = \"custom UI component\";\n\n/**\n * Build the additive `custom_unsupported` request for a `ctx.ui.custom` call, or\n * `undefined` when the client did not opt in.\n *\n * Returning `undefined` is the load-bearing default-client path: the caller must\n * emit NOTHING in that case, preserving the exact prior wire behavior.\n */\nexport function buildCustomUnsupportedRequest(\n\tcapabilities: readonly string[] | undefined,\n\textensionName: string,\n): RpcExtensionUIRequest | undefined {\n\tif (!capabilities?.includes(CUSTOM_UNSUPPORTED_CAPABILITY)) {\n\t\treturn undefined;\n\t}\n\tconst name = extensionName.trim() || DEFAULT_CUSTOM_EXTENSION_LABEL;\n\treturn {\n\t\ttype: \"extension_ui_request\",\n\t\tid: crypto.randomUUID(),\n\t\tmethod: \"custom_unsupported\",\n\t\textensionName: name,\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"custom-capability.js","sourceRoot":"","sources":["../../../src/modes/rpc/custom-capability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAGtC,oFAAoF;AACpF,MAAM,CAAC,MAAM,6BAA6B,GAAG,oBAAoB,CAAC;AAClE,MAAM,CAAC,MAAM,2BAA2B,GAAG,kBAAkB,CAAC;AAC9D,MAAM,CAAC,MAAM,8BAA8B,GAAG,qBAAqB,CAAC;AACpE,MAAM,CAAC,MAAM,8BAA8B,GAAG,qBAAqB,CAAC;AAEpE;;;;GAIG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,+BAA+B,CAAC;AAE3E,4EAA4E;AAC5E,MAAM,UAAU,uBAAuB,CAAC,KAAyB;IAChE,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,KAAK;SACV,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,MAAM,8BAA8B,GAAG,qBAAqB,CAAC;AAEpE;;;;;;GAMG;AACH,MAAM,UAAU,6BAA6B,CAC5C,YAA2C,EAC3C,aAAqB;IAErB,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;QAC5D,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,8BAA8B,CAAC;IACpE,OAAO;QACN,IAAI,EAAE,sBAAsB;QAC5B,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;QACvB,MAAM,EAAE,oBAAoB;QAC5B,aAAa,EAAE,IAAI;KACnB,CAAC;AACH,CAAC","sourcesContent":["/**\n * The `custom_unsupported` capability gate (plan tasks 13/14).\n *\n * In RPC mode `ctx.ui.custom` cannot render a third-party component — there is no\n * TUI to render it FROM. Historically it returned `undefined` synchronously with\n * NO wire message, so a default RPC client saw nothing at all. A client that\n * can present a native \"this extension UI requires the classic TUI\" notice opts\n * in via a capability flag.\n *\n * This gate is a PURE function so the additive-only guarantee is unit-provable:\n * only a client that advertised the `custom_unsupported` capability gets the\n * additive `extension_ui_request{method:\"custom_unsupported\"}` notice; every\n * other (default) client gets `undefined` — byte-identical to the prior\n * behavior, no extra bytes on the wire.\n */\n\nimport * as crypto from \"node:crypto\";\nimport type { RpcExtensionUIRequest } from \"./rpc-types.ts\";\n\n/** The capability string a client sends in its handshake to opt into the notice. */\nexport const CUSTOM_UNSUPPORTED_CAPABILITY = \"custom_unsupported\";\nexport const EXTENSION_EVENTS_CAPABILITY = \"extension_events\";\nexport const RENDERED_COMPONENTS_CAPABILITY = \"rendered_components\";\nexport const AUTO_TITLE_SESSIONS_CAPABILITY = \"auto_title_sessions\";\n\n/**\n * Env var carrying client capabilities to a single-connection stdio RPC host\n * (comma-separated). A launcher may set it from a client handshake; a plain\n * stdio client leaves it unset and sees byte-identical default behavior.\n */\nexport const RPC_CLIENT_CAPABILITIES_ENV = \"SENPI_RPC_CLIENT_CAPABILITIES\";\n\n/** Parse the comma-separated capabilities env value into a trimmed list. */\nexport function parseClientCapabilities(value: string | undefined): string[] {\n\tif (!value) return [];\n\treturn value\n\t\t.split(\",\")\n\t\t.map((part) => part.trim())\n\t\t.filter((part) => part.length > 0);\n}\n\n/** Fallback label when the calling extension's name cannot be determined. */\nexport const DEFAULT_CUSTOM_EXTENSION_LABEL = \"custom UI component\";\n\n/**\n * Build the additive `custom_unsupported` request for a `ctx.ui.custom` call, or\n * `undefined` when the client did not opt in.\n *\n * Returning `undefined` is the load-bearing default-client path: the caller must\n * emit NOTHING in that case, preserving the exact prior wire behavior.\n */\nexport function buildCustomUnsupportedRequest(\n\tcapabilities: readonly string[] | undefined,\n\textensionName: string,\n): RpcExtensionUIRequest | undefined {\n\tif (!capabilities?.includes(CUSTOM_UNSUPPORTED_CAPABILITY)) {\n\t\treturn undefined;\n\t}\n\tconst name = extensionName.trim() || DEFAULT_CUSTOM_EXTENSION_LABEL;\n\treturn {\n\t\ttype: \"extension_ui_request\",\n\t\tid: crypto.randomUUID(),\n\t\tmethod: \"custom_unsupported\",\n\t\textensionName: name,\n\t};\n}\n"]}
|