@dyyz1993/pi-coding-agent 0.74.45 → 0.74.47
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/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +13 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/extensions/auto-memory/__tests__/extract-result.test.ts +42 -0
- package/dist/extensions/auto-memory/__tests__/prefetch-history.test.ts +136 -0
- package/dist/extensions/auto-memory/__tests__/prompts.test.ts +29 -0
- package/dist/extensions/auto-memory/__tests__/skip-rules.test.ts +366 -0
- package/dist/extensions/auto-memory/contract.d.ts +16 -0
- package/dist/extensions/auto-memory/contract.d.ts.map +1 -1
- package/dist/extensions/auto-memory/contract.js.map +1 -1
- package/dist/extensions/auto-memory/contract.ts +16 -0
- package/dist/extensions/auto-memory/index.ts +134 -13
- package/dist/extensions/auto-memory/prompts.ts +10 -0
- package/dist/extensions/auto-memory/skip-rules.ts +2 -0
- package/dist/extensions/bash-ext/index.ts +855 -845
- package/dist/extensions/claude-hooks-compat/index.ts +12 -7
- package/dist/extensions/coordinator/handler.test.ts +388 -123
- package/dist/extensions/coordinator/handler.ts +78 -12
- package/dist/extensions/coordinator/index.ts +267 -198
- package/dist/extensions/coordinator/types.d.ts +16 -0
- package/dist/extensions/coordinator/types.d.ts.map +1 -1
- package/dist/extensions/coordinator/types.js.map +1 -1
- package/dist/extensions/coordinator/types.ts +57 -49
- package/dist/extensions/lsp/lsp/index.ts +15 -9
- package/dist/extensions/lsp/lsp/lsp-clangd-e2e.test.ts +229 -0
- package/dist/extensions/message-bridge/index.ts +14 -11
- package/dist/extensions/session-supervisor/index.ts +14 -8
- package/dist/extensions/subagent-v2/index.ts +58 -42
- package/dist/extensions/todo-ext/index.ts +7 -3
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +9 -1
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-mode.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-mode.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * RPC mode: Headless operation with JSON stdin/stdout protocol.\n *\n * Used for embedding the agent in other applications.\n * Receives commands as JSON on stdin, outputs events and responses as JSON on stdout.\n *\n * Protocol:\n * - Commands: JSON objects with `type` field, optional `id` for correlation\n * - Responses: JSON objects with `type: \"response\"`, `command`, `success`, and optional `data`/`error`\n * - Events: AgentSessionEvent objects streamed as they occur\n * - Extension UI: Extension UI requests are emitted, client responds with extension_ui_response\n */\n\nimport * as crypto from \"node:crypto\";\nimport type { AgentMessage } from \"@dyyz1993/pi-agent-core\";\nimport type { AgentSessionRuntime } from \"../../core/agent-session-runtime.js\";\nimport { discoverAgents, getBuiltinAgents } from \"../../core/agent-types.js\";\nimport { DEFAULT_TIER_ALIASES } from \"../../core/defaults.js\";\nimport { ChannelManager } from \"../../core/extensions/channel-manager.js\";\nimport type { ChannelDataMessage } from \"../../core/extensions/channel-types.js\";\nimport type {\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tWorkingIndicatorOptions,\n} from \"../../core/extensions/index.js\";\nimport { resolveModelAlias } from \"../../core/model-resolver.js\";\nimport { takeOverStdout, writeRawStdout } from \"../../core/output-guard.js\";\nimport { killTrackedDetachedChildren } from \"../../utils/shell.js\";\nimport { type Theme, theme } from \"../interactive/theme/theme.js\";\nimport { attachJsonlLineReader, serializeJsonLine } from \"./jsonl.js\";\nimport type {\n\tRpcCommand,\n\tRpcExtension,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcMcpServer,\n\tRpcResponse,\n\tRpcSessionState,\n\tRpcSkill,\n\tRpcSlashCommand,\n\tRpcTool,\n} from \"./rpc-types.js\";\n\n// Re-export types for consumers\nexport type {\n\tRpcCommand,\n\tRpcExtension,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcMcpServer,\n\tRpcResponse,\n\tRpcSessionState,\n\tRpcSkill,\n\tRpcSlashCommand,\n\tRpcTool,\n} from \"./rpc-types.js\";\n\n/**\n * Run in RPC mode.\n * Listens for JSON commands on stdin, outputs events and responses on stdout.\n */\nexport async function runRpcMode(runtimeHost: AgentSessionRuntime): Promise<never> {\n\ttakeOverStdout();\n\tlet session = runtimeHost.session;\n\tlet unsubscribe: (() => void) | undefined;\n\n\tconst output = (obj: RpcResponse | RpcExtensionUIRequest | object) => {\n\t\twriteRawStdout(serializeJsonLine(obj));\n\t};\n\n\tconst channelManager = new ChannelManager((message: ChannelDataMessage) => {\n\t\toutput(message);\n\t});\n\n\tconst success = <T extends RpcCommand[\"type\"]>(\n\t\tid: string | undefined,\n\t\tcommand: T,\n\t\tdata?: object | null,\n\t): 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 = (id: string | undefined, command: string, message: string): RpcResponse => {\n\t\treturn { id, type: \"response\", command, success: false, error: message };\n\t};\n\n\t// Pending extension UI requests waiting for response\n\tconst pendingExtensionRequests = new Map<\n\t\tstring,\n\t\t{ resolve: (value: any) => void; reject: (error: Error) => void }\n\t>();\n\n\t// Shutdown request flag\n\tlet shutdownRequested = false;\n\tlet shuttingDown = false;\n\tconst signalCleanupHandlers: Array<() => void> = [];\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(\n\t\t\t\topts,\n\t\t\t\tundefined,\n\t\t\t\t{ method: \"select\", title, options, multiple: opts?.multiple, timeout: opts?.timeout },\n\t\t\t\t(r) => (\"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\t// Only support string arrays in RPC mode - factory functions are ignored\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}\n\t\t\t// Component factories are not supported in RPC mode - would need TUI access\n\t\t},\n\n\t\tsetFooter(_factory: unknown): void {\n\t\t\t// Custom footer not supported in RPC mode - requires TUI access\n\t\t},\n\n\t\tsetHeader(_factory: unknown): void {\n\t\t\t// Custom header not supported in RPC mode - requires TUI access\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 not supported in RPC mode\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\truntimeHost.setRebindSession(async () => {\n\t\tawait rebindSession();\n\t});\n\n\tlet rebindDone: Promise<void>;\n\tconst rebindSession = async (): Promise<void> => {\n\t\tsession = runtimeHost.session;\n\t\tawait session.bindExtensions({\n\t\t\tuiContext: createExtensionUIContext(),\n\t\t\tcommandContextActions: {\n\t\t\t\twaitForIdle: () => session.agent.waitForIdle(),\n\t\t\t\tnewSession: async (options) => runtimeHost.newSession(options),\n\t\t\t\tfork: async (entryId, forkOptions) => {\n\t\t\t\t\tconst result = await runtimeHost.fork(entryId, forkOptions);\n\t\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t\t},\n\t\t\t\tnavigateTree: async (targetId, options) => {\n\t\t\t\t\tconst result = await session.navigateTree(targetId, {\n\t\t\t\t\t\tsummarize: options?.summarize,\n\t\t\t\t\t\tcustomInstructions: options?.customInstructions,\n\t\t\t\t\t\treplaceInstructions: options?.replaceInstructions,\n\t\t\t\t\t\tlabel: options?.label,\n\t\t\t\t\t});\n\t\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t\t},\n\t\t\t\tswitchSession: async (sessionPath, options) => {\n\t\t\t\t\treturn runtimeHost.switchSession(sessionPath, options);\n\t\t\t\t},\n\t\t\t\treload: async () => {\n\t\t\t\t\tawait session.reload();\n\t\t\t\t},\n\t\t\t},\n\t\t\tshutdownHandler: () => {\n\t\t\t\tshutdownRequested = true;\n\t\t\t},\n\t\t\tonError: (err) => {\n\t\t\t\toutput({ type: \"extension_error\", extensionPath: err.extensionPath, event: err.event, error: err.error });\n\t\t\t},\n\t\t\tregisterChannel: (name: string) => channelManager.register(name),\n\t\t});\n\n\t\tunsubscribe?.();\n\t\tunsubscribe = session.subscribe((event) => {\n\t\t\toutput(event);\n\t\t});\n\t};\n\n\tconst registerSignalHandlers = (): void => {\n\t\tconst signals: NodeJS.Signals[] = [\"SIGTERM\"];\n\t\tif (process.platform !== \"win32\") {\n\t\t\tsignals.push(\"SIGHUP\");\n\t\t}\n\n\t\tfor (const signal of signals) {\n\t\t\tconst handler = () => {\n\t\t\t\tkillTrackedDetachedChildren();\n\t\t\t\tvoid shutdown(signal === \"SIGHUP\" ? 129 : 143);\n\t\t\t};\n\t\t\tprocess.on(signal, handler);\n\t\t\tsignalCleanupHandlers.push(() => process.off(signal, handler));\n\t\t}\n\t};\n\n\trebindDone = rebindSession();\n\tregisterSignalHandlers();\n\toutput({ type: \"ready\" });\n\n\t// Handle a single command\n\tconst handleCommand = async (command: RpcCommand): Promise<RpcResponse | undefined> => {\n\t\tawait rebindDone;\n\t\tconst id = command.id;\n\n\t\tswitch (command.type) {\n\t\t\t// =================================================================\n\t\t\t// Prompting\n\t\t\t// =================================================================\n\n\t\t\tcase \"prompt\": {\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\tlet preflightSucceeded = false;\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\tsource: \"rpc\",\n\t\t\t\t\t\tpreflightResult: (didSucceed) => {\n\t\t\t\t\t\t\tif (didSucceed) {\n\t\t\t\t\t\t\t\tpreflightSucceeded = true;\n\t\t\t\t\t\t\t\toutput(success(id, \"prompt\"));\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 \"steer\": {\n\t\t\t\tawait session.steer(command.message, command.images);\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);\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 \"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 (!result.cancelled) {\n\t\t\t\t\tawait rebindSession();\n\t\t\t\t}\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 \"get_state\": {\n\t\t\t\tconst state: RpcSessionState = {\n\t\t\t\t\tmodel: session.model,\n\t\t\t\t\tthinkingLevel: session.thinkingLevel,\n\t\t\t\t\tisStreaming: session.isStreaming,\n\t\t\t\t\tisCompacting: session.isCompacting,\n\t\t\t\t\tsteeringMode: session.steeringMode,\n\t\t\t\t\tfollowUpMode: session.followUpMode,\n\t\t\t\t\tsessionFile: session.sessionFile,\n\t\t\t\t\tsessionId: session.sessionId,\n\t\t\t\t\tsessionName: session.sessionName,\n\t\t\t\t\tautoCompactionEnabled: session.autoCompactionEnabled,\n\t\t\t\t\tmessageCount: session.messages.length,\n\t\t\t\t\tpendingMessageCount: session.pendingMessageCount,\n\t\t\t\t};\n\t\t\t\treturn success(id, \"get_state\", state);\n\t\t\t}\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\tlet provider = command.provider;\n\t\t\t\tlet modelId = command.modelId;\n\n\t\t\t\tconst tierModels = session.getTierModels();\n\t\t\t\tconst aliasTarget = resolveModelAlias(modelId, tierModels);\n\t\t\t\tif (aliasTarget) {\n\t\t\t\t\tconst slashIndex = aliasTarget.indexOf(\"/\");\n\t\t\t\t\tif (slashIndex !== -1) {\n\t\t\t\t\t\tprovider = aliasTarget.substring(0, slashIndex);\n\t\t\t\t\t\tmodelId = aliasTarget.substring(slashIndex + 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmodelId = aliasTarget;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst models = await session.modelRegistry.getAvailable();\n\t\t\t\tconst model = models.find((m) => m.provider === provider && m.id === modelId);\n\t\t\t\tif (!model) {\n\t\t\t\t\treturn error(id, \"set_model\", `Model not found: ${provider}/${modelId}`);\n\t\t\t\t}\n\t\t\t\tawait session.setModel(model);\n\t\t\t\treturn success(id, \"set_model\", model);\n\t\t\t}\n\n\t\t\tcase \"cycle_model\": {\n\t\t\t\tconst result = await session.cycleModel();\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\", { models });\n\t\t\t}\n\n\t\t\tcase \"get_tier_models\": {\n\t\t\t\tconst tierModels = session.getTierModels();\n\t\t\t\tconst merged = { ...DEFAULT_TIER_ALIASES, ...tierModels };\n\t\t\t\treturn success(id, \"get_tier_models\", { models: merged });\n\t\t\t}\n\n\t\t\tcase \"set_tier_models\": {\n\t\t\t\tconst { models } = command;\n\t\t\t\tconst validTiers = new Set([\"fast\", \"pro\", \"max\"]);\n\t\t\t\tfor (const key of Object.keys(models)) {\n\t\t\t\t\tif (!validTiers.has(key)) {\n\t\t\t\t\t\treturn error(id, \"set_tier_models\", `Invalid tier name: \"${key}\". Valid tiers are: fast, pro, max`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst mapping: Record<string, string> = {};\n\t\t\t\tif (models.fast !== undefined) mapping.fast = models.fast;\n\t\t\t\tif (models.pro !== undefined) mapping.pro = models.pro;\n\t\t\t\tif (models.max !== undefined) mapping.max = models.max;\n\t\t\t\tsession.setTierModels(mapping);\n\t\t\t\treturn success(id, \"set_tier_models\");\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\tsession.setThinkingLevel(command.level);\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\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 \"bash\": {\n\t\t\t\tconst result = await session.executeBash(command.command);\n\t\t\t\treturn success(id, \"bash\", result);\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\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);\n\t\t\t\treturn success(id, \"export_html\", { path });\n\t\t\t}\n\n\t\t\tcase \"switch_session\": {\n\t\t\t\tconst result = await runtimeHost.switchSession(command.sessionPath);\n\t\t\t\tif (!result.cancelled) {\n\t\t\t\t\tsession = runtimeHost.session;\n\t\t\t\t}\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 previousName = session.sessionManager.getSessionName();\n\t\t\t\tconst forkPosition = (command as any).position === \"at\" ? { position: \"at\" as const } : undefined;\n\t\t\t\tconst result = await runtimeHost.fork(command.entryId, forkPosition);\n\t\t\t\tif (!result.cancelled) {\n\t\t\t\t\tconst newName = previousName ? `fork: ${previousName}` : \"fork\";\n\t\t\t\t\tsession = runtimeHost.session;\n\t\t\t\t\tsession.sessionManager.appendSessionInfo(newName);\n\t\t\t\t\tsession.sessionManager.flush();\n\t\t\t\t\tawait rebindSession();\n\t\t\t\t}\n\t\t\t\treturn success(id, \"fork\", {\n\t\t\t\t\ttext: result.selectedText,\n\t\t\t\t\tcancelled: result.cancelled,\n\t\t\t\t\tnewSessionFile: session.sessionManager.getSessionFile(),\n\t\t\t\t\tnewSessionId: session.sessionManager.getSessionId(),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"navigate_tree\": {\n\t\t\t\tconst navResult = await session.navigateTree(command.targetId, {\n\t\t\t\t\tsummarize: command.summarize ?? false,\n\t\t\t\t\tskipFiles: command.skipFiles,\n\t\t\t\t});\n\t\t\t\treturn success(id, \"navigate_tree\", { cancelled: navResult.cancelled, reason: navResult.reason });\n\t\t\t}\n\n\t\t\tcase \"rollback_preview\": {\n\t\t\t\tconst previewResult = await session.previewRollback(command.targetId);\n\t\t\t\treturn success(id, \"rollback_preview\", previewResult);\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 (!result.cancelled) {\n\t\t\t\t\tawait rebindSession();\n\t\t\t\t}\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_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 \"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\tcase \"get_full_messages\": {\n\t\t\t\tconst allEntries = session.sessionManager.getEntries();\n\t\t\t\tconst messageEntries = allEntries.filter((e) => e.type === \"message\");\n\t\t\t\tconst persistedMessages = messageEntries.map((e) => (e as { message: AgentMessage }).message);\n\t\t\t\tconst persistedSet = new Set(persistedMessages);\n\n\t\t\t\tconst memoryMessages = session.messages;\n\t\t\t\tconst unPersisted: AgentMessage[] = [];\n\t\t\t\tfor (let i = memoryMessages.length - 1; i >= 0; i--) {\n\t\t\t\t\tconst msg = memoryMessages[i];\n\t\t\t\t\tif (persistedSet.has(msg)) break;\n\t\t\t\t\tif (msg.role === \"compactionSummary\") continue;\n\t\t\t\t\tunPersisted.unshift(msg);\n\t\t\t\t}\n\n\t\t\t\tconst allMessages = [...persistedMessages, ...unPersisted];\n\t\t\t\tconst totalCount = allMessages.length;\n\n\t\t\t\tconst leafId = session.sessionManager.getLeafId();\n\n\t\t\t\tconst treeEntries = allEntries.map((e) => ({\n\t\t\t\t\tid: e.id,\n\t\t\t\t\tparentId: e.parentId,\n\t\t\t\t\ttype: e.type,\n\t\t\t\t\tlabel:\n\t\t\t\t\t\te.type === \"message\"\n\t\t\t\t\t\t\t? (e as any).message?.role\n\t\t\t\t\t\t\t: e.type === \"custom\"\n\t\t\t\t\t\t\t\t? (e as any).customType\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t}));\n\n\t\t\t\tconst customEntries = allEntries\n\t\t\t\t\t.filter((e) => e.type === \"custom\")\n\t\t\t\t\t.map((e) => ({\n\t\t\t\t\t\tid: e.id,\n\t\t\t\t\t\tcustomType: (e as any).customType ?? \"unknown\",\n\t\t\t\t\t\tdata: (e as any).data,\n\t\t\t\t\t\ttimestamp: new Date(e.timestamp).getTime(),\n\t\t\t\t\t}));\n\n\t\t\t\tconst compactionEntries = allEntries\n\t\t\t\t\t.filter((e) => e.type === \"compaction\")\n\t\t\t\t\t.map((e) => ({\n\t\t\t\t\t\tid: e.id,\n\t\t\t\t\t\tsummary: (e as any).summary ?? \"\",\n\t\t\t\t\t\ttokensBefore: (e as any).tokensBefore,\n\t\t\t\t\t\ttimestamp: new Date(e.timestamp).getTime(),\n\t\t\t\t\t}));\n\n\t\t\t\tif (command.limit !== undefined) {\n\t\t\t\t\tconst limit = command.limit;\n\t\t\t\t\tlet startIndex = 0;\n\t\t\t\t\tif (command.afterEntryId) {\n\t\t\t\t\t\tconst idx = messageEntries.findIndex((e) => e.id === command.afterEntryId);\n\t\t\t\t\t\tif (idx !== -1) {\n\t\t\t\t\t\t\tstartIndex = idx + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst page = allMessages.slice(startIndex, startIndex + limit);\n\t\t\t\t\tconst hasMore = startIndex + limit < totalCount;\n\t\t\t\t\tconst lastPersisted = messageEntries[Math.min(startIndex + limit, messageEntries.length) - 1];\n\t\t\t\t\treturn success(id, \"get_full_messages\", {\n\t\t\t\t\t\tmessages: page,\n\t\t\t\t\t\thasMore,\n\t\t\t\t\t\ttotalCount,\n\t\t\t\t\t\tnextCursor: hasMore && lastPersisted ? lastPersisted.id : null,\n\t\t\t\t\t\ttree: { entries: treeEntries, leafId },\n\t\t\t\t\t\tcustomEntries,\n\t\t\t\t\t\tcompactionEntries,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn success(id, \"get_full_messages\", {\n\t\t\t\t\tmessages: allMessages,\n\t\t\t\t\thasMore: false,\n\t\t\t\t\ttotalCount,\n\t\t\t\t\tnextCursor: null,\n\t\t\t\t\ttree: { entries: treeEntries, leafId },\n\t\t\t\t\tcustomEntries,\n\t\t\t\t\tcompactionEntries,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"get_tree\": {\n\t\t\t\tconst entries = session.sessionManager.getEntries();\n\t\t\t\tconst treeEntries = entries.map((e) => ({\n\t\t\t\t\tid: e.id,\n\t\t\t\t\tparentId: e.parentId,\n\t\t\t\t\ttype: e.type,\n\t\t\t\t\tlabel:\n\t\t\t\t\t\te.type === \"message\"\n\t\t\t\t\t\t\t? (e as any).message?.role\n\t\t\t\t\t\t\t: e.type === \"custom\"\n\t\t\t\t\t\t\t\t? (e as any).customType\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t}));\n\t\t\t\treturn success(id, \"get_tree\", { entries: treeEntries, leafId: session.sessionManager.getLeafId() });\n\t\t\t}\n\t\t\tcase \"get_tree_with_leaf\": {\n\t\t\t\tconst entries = session.sessionManager.getEntries();\n\t\t\t\tconst treeEntries = entries.map((e) => ({\n\t\t\t\t\tid: e.id,\n\t\t\t\t\tparentId: e.parentId,\n\t\t\t\t\ttype: e.type,\n\t\t\t\t\tlabel:\n\t\t\t\t\t\te.type === \"message\"\n\t\t\t\t\t\t\t? (e as any).message?.role\n\t\t\t\t\t\t\t: e.type === \"custom\"\n\t\t\t\t\t\t\t\t? (e as any).customType\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t}));\n\t\t\t\treturn success(id, \"get_tree_with_leaf\", {\n\t\t\t\t\tentries: treeEntries,\n\t\t\t\t\tleafId: session.sessionManager.getLeafId(),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Resources (skills, extensions, tools)\n\t\t\t// =================================================================\n\n\t\t\tcase \"get_skills\": {\n\t\t\t\tconst { skills } = session.resourceLoader.getSkills();\n\t\t\t\tconst rpcSkills: RpcSkill[] = skills.map((s) => ({\n\t\t\t\t\tname: s.name,\n\t\t\t\t\tdescription: s.description,\n\t\t\t\t\tfilePath: s.filePath,\n\t\t\t\t\tbaseDir: s.baseDir,\n\t\t\t\t\tsourceInfo: s.sourceInfo,\n\t\t\t\t\tdisableModelInvocation: s.disableModelInvocation,\n\t\t\t\t}));\n\t\t\t\treturn success(id, \"get_skills\", { skills: rpcSkills });\n\t\t\t}\n\n\t\t\tcase \"get_extensions\": {\n\t\t\t\tconst { extensions } = session.resourceLoader.getExtensions();\n\t\t\t\tconst rpcExtensions: RpcExtension[] = extensions.map((e) => ({\n\t\t\t\t\tpath: e.path,\n\t\t\t\t\tresolvedPath: e.resolvedPath,\n\t\t\t\t\tsourceInfo: e.sourceInfo,\n\t\t\t\t\ttoolNames: Array.from(e.tools.keys()),\n\t\t\t\t\tcommandNames: Array.from(e.commands.keys()),\n\t\t\t\t}));\n\t\t\t\treturn success(id, \"get_extensions\", { extensions: rpcExtensions });\n\t\t\t}\n\n\t\t\tcase \"get_tools\": {\n\t\t\t\tconst allTools = session.extensionRunner.getAllRegisteredTools();\n\t\t\t\tconst rpcTools: RpcTool[] = allTools.map((t) => ({\n\t\t\t\t\tname: t.definition.name,\n\t\t\t\t\tlabel: t.definition.label,\n\t\t\t\t\tdescription: t.definition.description,\n\t\t\t\t\tsourceInfo: t.sourceInfo,\n\t\t\t\t}));\n\t\t\t\treturn success(id, \"get_tools\", { tools: rpcTools });\n\t\t\t}\n\n\t\t\tcase \"get_mcp_servers\": {\n\t\t\t\tconst servers: RpcMcpServer[] = session.getMcpConnections();\n\t\t\t\treturn success(id, \"get_mcp_servers\", { servers });\n\t\t\t}\n\n\t\t\tcase \"mcp_toggle_server\": {\n\t\t\t\ttry {\n\t\t\t\t\tawait session.toggleMcpServer(command.name, command.enabled);\n\t\t\t\t\treturn success(id, \"mcp_toggle_server\");\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn error(id, \"mcp_toggle_server\", e instanceof Error ? e.message : String(e));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcase \"mcp_restart_server\": {\n\t\t\t\ttry {\n\t\t\t\t\tawait session.restartMcpServer(command.name);\n\t\t\t\t\treturn success(id, \"mcp_restart_server\");\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn error(id, \"mcp_restart_server\", e instanceof Error ? e.message : String(e));\n\t\t\t\t}\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\tconst commands: RpcSlashCommand[] = [];\n\n\t\t\t\tfor (const command of session.extensionRunner.getRegisteredCommands()) {\n\t\t\t\t\tcommands.push({\n\t\t\t\t\t\tname: command.invocationName,\n\t\t\t\t\t\tdescription: command.description,\n\t\t\t\t\t\tsource: \"extension\",\n\t\t\t\t\t\tsourceInfo: command.sourceInfo,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfor (const template of session.promptTemplates) {\n\t\t\t\t\tcommands.push({\n\t\t\t\t\t\tname: template.name,\n\t\t\t\t\t\tdescription: template.description,\n\t\t\t\t\t\tsource: \"prompt\",\n\t\t\t\t\t\tsourceInfo: template.sourceInfo,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfor (const skill of session.resourceLoader.getSkills().skills) {\n\t\t\t\t\tcommands.push({\n\t\t\t\t\t\tname: `skill:${skill.name}`,\n\t\t\t\t\t\tdescription: skill.description,\n\t\t\t\t\t\tsource: \"skill\",\n\t\t\t\t\t\tsourceInfo: skill.sourceInfo,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn success(id, \"get_commands\", { commands });\n\t\t\t}\n\n\t\t\tcase \"get_settings\": {\n\t\t\t\tconst scope = command.scope;\n\t\t\t\tlet data: import(\"../../core/settings-manager.js\").Settings;\n\t\t\t\tif (scope === \"global\") {\n\t\t\t\t\tdata = session.settingsManager.getGlobalSettings();\n\t\t\t\t} else if (scope === \"project\") {\n\t\t\t\t\tdata = session.settingsManager.getProjectSettings();\n\t\t\t\t} else {\n\t\t\t\t\tdata = session.settingsManager.getGlobalSettings();\n\t\t\t\t}\n\t\t\t\treturn success(id, \"get_settings\", data);\n\t\t\t}\n\n\t\t\tcase \"set_settings\": {\n\t\t\t\ttype Scope = import(\"../../core/settings-manager.js\").SettingsScope;\n\t\t\t\tconst setScope = (command.scope as Scope | undefined) ?? \"global\";\n\t\t\t\tsession.settingsManager.applyOverrides(command.settings, setScope);\n\t\t\t\treturn success(id, \"set_settings\");\n\t\t\t}\n\n\t\t\tcase \"get_context_usage\": {\n\t\t\t\tconst usage = session.getContextUsage();\n\t\t\t\tif (!usage) {\n\t\t\t\t\treturn success(id, \"get_context_usage\", {\n\t\t\t\t\t\ttokens: null,\n\t\t\t\t\t\tcontextWindow: session.model?.contextWindow ?? 0,\n\t\t\t\t\t\tpercent: null,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn success(id, \"get_context_usage\", usage);\n\t\t\t}\n\n\t\t\tcase \"get_system_prompt\": {\n\t\t\t\tconst systemPrompt = session.resourceLoader.getSystemPrompt() ?? \"\";\n\t\t\t\tconst appendSystemPrompt = session.resourceLoader.getAppendSystemPrompt();\n\t\t\t\treturn success(id, \"get_system_prompt\", { systemPrompt, appendSystemPrompt });\n\t\t\t}\n\n\t\t\tcase \"get_active_tools\": {\n\t\t\t\tconst toolNames = session.getActiveToolNames();\n\t\t\t\treturn success(id, \"get_active_tools\", { toolNames });\n\t\t\t}\n\n\t\t\tcase \"set_active_tools\": {\n\t\t\t\tsession.setActiveToolsByName(command.toolNames);\n\t\t\t\treturn success(id, \"set_active_tools\");\n\t\t\t}\n\n\t\t\tcase \"get_queue\": {\n\t\t\t\treturn success(id, \"get_queue\", {\n\t\t\t\t\tsteering: [...session.getSteeringMessages()],\n\t\t\t\t\tfollowUp: [...session.getFollowUpMessages()],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"clear_queue\": {\n\t\t\t\tconst cleared = session.clearQueue();\n\t\t\t\treturn success(id, \"clear_queue\", cleared);\n\t\t\t}\n\n\t\t\tcase \"get_flags\": {\n\t\t\t\tconst flagsMap = session.extensionRunner.getFlags();\n\t\t\t\tconst flags: Array<{\n\t\t\t\t\tname: string;\n\t\t\t\t\tdescription?: string;\n\t\t\t\t\ttype: \"boolean\" | \"string\";\n\t\t\t\t\tdefault?: boolean | string;\n\t\t\t\t\textensionPath: string;\n\t\t\t\t}> = [];\n\t\t\t\tfor (const [name, flag] of flagsMap) {\n\t\t\t\t\tflags.push({\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tdescription: flag.description,\n\t\t\t\t\t\ttype: flag.type,\n\t\t\t\t\t\tdefault: flag.default,\n\t\t\t\t\t\textensionPath: flag.extensionPath,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn success(id, \"get_flags\", { flags });\n\t\t\t}\n\n\t\t\tcase \"get_flag_values\": {\n\t\t\t\tconst valuesMap = session.extensionRunner.getFlagValues();\n\t\t\t\tconst values: Record<string, boolean | string> = {};\n\t\t\t\tfor (const [name, value] of valuesMap) {\n\t\t\t\t\tvalues[name] = value;\n\t\t\t\t}\n\t\t\t\treturn success(id, \"get_flag_values\", { values });\n\t\t\t}\n\n\t\t\tcase \"set_flag\": {\n\t\t\t\tsession.extensionRunner.setFlagValue(command.name, command.value);\n\t\t\t\treturn success(id, \"set_flag\");\n\t\t\t}\n\n\t\t\tcase \"reload\": {\n\t\t\t\tawait session.reload();\n\t\t\t\tsession = runtimeHost.session;\n\t\t\t\treturn success(id, \"reload\");\n\t\t\t}\n\n\t\t\tcase \"set_cwd\": {\n\t\t\t\tawait session.setCwd(command.cwd);\n\t\t\t\treturn success(id, \"set_cwd\");\n\t\t\t}\n\n\t\t\tcase \"get_agents_files\": {\n\t\t\t\tconst result = session.resourceLoader.getAgentsFiles();\n\t\t\t\treturn success(id, \"get_agents_files\", { agentsFiles: result.agentsFiles });\n\t\t\t}\n\n\t\t\tcase \"get_agents\": {\n\t\t\t\tconst discovery = discoverAgents(runtimeHost.cwd, \"both\");\n\t\t\t\tconst agents = discovery.agents.map((a) => ({\n\t\t\t\t\tname: a.name,\n\t\t\t\t\tdescription: a.description,\n\t\t\t\t\ttier: a.tier,\n\t\t\t\t\ttools: a.tools,\n\t\t\t\t\tpermissionMode: a.permissionMode,\n\t\t\t\t\tsource: a.source,\n\t\t\t\t\tfilePath: a.filePath,\n\t\t\t\t}));\n\t\t\t\treturn success(id, \"get_agents\", { agents });\n\t\t\t}\n\n\t\t\tcase \"switch_agent\": {\n\t\t\t\tconst agentName = (command as { agentName: string }).agentName;\n\t\t\t\tconst discovery = discoverAgents(runtimeHost.cwd, \"both\");\n\t\t\t\tconst agent = discovery.agents.find((a) => a.name === agentName);\n\t\t\t\tif (!agent) {\n\t\t\t\t\treturn error(id, \"switch_agent\", `Agent \"${agentName}\" not found`);\n\t\t\t\t}\n\t\t\t\tawait session.applyAgentConfig(agent);\n\t\t\t\treturn success(id, \"switch_agent\", {\n\t\t\t\t\tagentName: agent.name,\n\t\t\t\t\ttools: agent.tools ?? [],\n\t\t\t\t\ttier: agent.tier,\n\t\t\t\t\tthinkingLevel: agent.thinkingLevel,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"get_current_agent\": {\n\t\t\t\tconst currentAgent = session.getCurrentAgent();\n\t\t\t\treturn success(id, \"get_current_agent\", { agentName: currentAgent });\n\t\t\t}\n\n\t\t\tcase \"get_agent_detail\": {\n\t\t\t\tconst agentName = (command as { agentName: string }).agentName;\n\t\t\t\tconst discovery = discoverAgents(runtimeHost.cwd, \"both\");\n\t\t\t\tconst agent = discovery.agents.find((a) => a.name === agentName);\n\t\t\t\tif (!agent) {\n\t\t\t\t\treturn error(id, \"get_agent_detail\", `Agent \"${agentName}\" not found`);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"get_agent_detail\", { agent });\n\t\t\t}\n\n\t\t\tcase \"get_all_tools\": {\n\t\t\t\tconst allTools = session.getAllTools();\n\t\t\t\treturn success(id, \"get_all_tools\", {\n\t\t\t\t\ttools: allTools.map((t) => ({\n\t\t\t\t\t\tname: t.name,\n\t\t\t\t\t\tdescription: t.description,\n\t\t\t\t\t\tsourceInfo: t.sourceInfo,\n\t\t\t\t\t})),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"get_modified_files\": {\n\t\t\t\tconst fileSnapshotManager = (session as any).fileSnapshotManager;\n\t\t\t\tif (!fileSnapshotManager) {\n\t\t\t\t\treturn success(id, \"get_modified_files\", { files: [] });\n\t\t\t\t}\n\t\t\t\tconst files = fileSnapshotManager.getModifiedFiles({\n\t\t\t\t\tfromEntryId: command.fromEntryId,\n\t\t\t\t\ttoEntryId: command.toEntryId,\n\t\t\t\t});\n\t\t\t\treturn success(id, \"get_modified_files\", { files });\n\t\t\t}\n\n\t\t\tcase \"get_file_diff\": {\n\t\t\t\tconst fileSnapshotManager = (session as any).fileSnapshotManager;\n\t\t\t\tif (!fileSnapshotManager) {\n\t\t\t\t\treturn success(id, \"get_file_diff\", null);\n\t\t\t\t}\n\t\t\t\tconst diff = fileSnapshotManager.getFileDiff({\n\t\t\t\t\tfilePath: command.filePath,\n\t\t\t\t\tfromEntryId: command.fromEntryId,\n\t\t\t\t\ttoEntryId: command.toEntryId,\n\t\t\t\t});\n\t\t\t\tif (!diff) {\n\t\t\t\t\treturn success(id, \"get_file_diff\", null);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"get_file_diff\", {\n\t\t\t\t\tpath: diff.path,\n\t\t\t\t\toldContent: diff.oldContent,\n\t\t\t\t\tnewContent: diff.newContent,\n\t\t\t\t\tunifiedDiff: diff.unifiedDiff,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"get_batch_diffs\": {\n\t\t\t\tconst fileSnapshotManager = (session as any).fileSnapshotManager;\n\t\t\t\tif (!fileSnapshotManager) {\n\t\t\t\t\treturn success(id, \"get_batch_diffs\", {\n\t\t\t\t\t\tfiles: [],\n\t\t\t\t\t\tsummary: { totalFiles: 0, added: 0, modified: 0, deleted: 0 },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tconst result = fileSnapshotManager.getBatchDiffs({\n\t\t\t\t\tfromEntryId: command.fromEntryId,\n\t\t\t\t\ttoEntryId: command.toEntryId,\n\t\t\t\t});\n\t\t\t\tconst serializedFiles = result.files.map((f: any) => ({\n\t\t\t\t\tpath: f.path,\n\t\t\t\t\tstatus: f.status,\n\t\t\t\t\tdiff: f.diff\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tpath: f.diff.path,\n\t\t\t\t\t\t\t\toldContent: f.diff.oldContent,\n\t\t\t\t\t\t\t\tnewContent: f.diff.newContent,\n\t\t\t\t\t\t\t\tunifiedDiff: f.diff.unifiedDiff,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: null,\n\t\t\t\t}));\n\t\t\t\treturn success(id, \"get_batch_diffs\", {\n\t\t\t\t\tfiles: serializedFiles,\n\t\t\t\t\tsummary: result.summary,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"get_file_history\": {\n\t\t\t\tconst fileSnapshotManager = (session as any).fileSnapshotManager;\n\t\t\t\tif (!fileSnapshotManager) {\n\t\t\t\t\treturn success(id, \"get_file_history\", { history: [] });\n\t\t\t\t}\n\t\t\t\tconst result = fileSnapshotManager.getFileHistory({\n\t\t\t\t\tfilePath: command.filePath,\n\t\t\t\t});\n\t\t\t\treturn success(id, \"get_file_history\", { history: result });\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(undefined, unknownCommand.type, `Unknown command: ${unknownCommand.type}`);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Check if shutdown was requested and perform shutdown if so.\n\t * Called after handling each command when waiting for the next command.\n\t */\n\tlet detachInput = () => {};\n\n\tasync function shutdown(exitCode = 0): Promise<never> {\n\t\tif (shuttingDown) {\n\t\t\tprocess.exit(exitCode);\n\t\t}\n\t\tshuttingDown = true;\n\t\tfor (const cleanup of signalCleanupHandlers) {\n\t\t\tcleanup();\n\t\t}\n\t\tunsubscribe?.();\n\t\tawait runtimeHost.dispose();\n\t\tdetachInput();\n\t\tprocess.stdin.pause();\n\t\tprocess.exit(exitCode);\n\t}\n\n\tasync function checkShutdownRequested(): Promise<void> {\n\t\tif (!shutdownRequested) return;\n\t\tawait shutdown();\n\t}\n\n\tconst handleInputLine = async (line: string) => {\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\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\tconst pending = pendingExtensionRequests.get(response.id);\n\t\t\tif (pending) {\n\t\t\t\tpendingExtensionRequests.delete(response.id);\n\t\t\t\tpending.resolve(response);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Handle channel data from RPC Client\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 === \"channel_data\" &&\n\t\t\t\"name\" in parsed\n\t\t) {\n\t\t\tchannelManager.handleInbound(parsed as ChannelDataMessage);\n\t\t\treturn;\n\t\t}\n\n\t\tconst command = parsed as RpcCommand;\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}\n\t\t\tawait checkShutdownRequested();\n\t\t} catch (commandError: unknown) {\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),\n\t\t\t);\n\t\t}\n\t};\n\n\tconst onInputEnd = () => {\n\t\tvoid shutdown();\n\t};\n\tprocess.stdin.on(\"end\", onInputEnd);\n\n\tdetachInput = (() => {\n\t\tconst detachJsonl = attachJsonlLineReader(process.stdin, (line) => {\n\t\t\tvoid handleInputLine(line);\n\t\t});\n\t\treturn () => {\n\t\t\tdetachJsonl();\n\t\t\tprocess.stdin.off(\"end\", onInputEnd);\n\t\t};\n\t})();\n\n\t// Keep process alive forever\n\treturn new Promise(() => {});\n}\n"]}
|
|
1
|
+
{"version":3,"file":"rpc-mode.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-mode.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * RPC mode: Headless operation with JSON stdin/stdout protocol.\n *\n * Used for embedding the agent in other applications.\n * Receives commands as JSON on stdin, outputs events and responses as JSON on stdout.\n *\n * Protocol:\n * - Commands: JSON objects with `type` field, optional `id` for correlation\n * - Responses: JSON objects with `type: \"response\"`, `command`, `success`, and optional `data`/`error`\n * - Events: AgentSessionEvent objects streamed as they occur\n * - Extension UI: Extension UI requests are emitted, client responds with extension_ui_response\n */\n\nimport * as crypto from \"node:crypto\";\nimport type { AgentMessage } from \"@dyyz1993/pi-agent-core\";\nimport type { AgentSessionRuntime } from \"../../core/agent-session-runtime.js\";\nimport { discoverAgents, getBuiltinAgents } from \"../../core/agent-types.js\";\nimport { DEFAULT_TIER_ALIASES } from \"../../core/defaults.js\";\nimport { ChannelManager } from \"../../core/extensions/channel-manager.js\";\nimport type { ChannelDataMessage } from \"../../core/extensions/channel-types.js\";\nimport type {\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tWorkingIndicatorOptions,\n} from \"../../core/extensions/index.js\";\nimport { resolveModelAlias } from \"../../core/model-resolver.js\";\nimport { takeOverStdout, writeRawStdout } from \"../../core/output-guard.js\";\nimport { killTrackedDetachedChildren } from \"../../utils/shell.js\";\nimport { type Theme, theme } from \"../interactive/theme/theme.js\";\nimport { attachJsonlLineReader, serializeJsonLine } from \"./jsonl.js\";\nimport type {\n\tRpcCommand,\n\tRpcExtension,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcMcpServer,\n\tRpcResponse,\n\tRpcSessionState,\n\tRpcSkill,\n\tRpcSlashCommand,\n\tRpcTool,\n} from \"./rpc-types.js\";\n\n// Re-export types for consumers\nexport type {\n\tRpcCommand,\n\tRpcExtension,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcMcpServer,\n\tRpcResponse,\n\tRpcSessionState,\n\tRpcSkill,\n\tRpcSlashCommand,\n\tRpcTool,\n} from \"./rpc-types.js\";\n\n/**\n * Run in RPC mode.\n * Listens for JSON commands on stdin, outputs events and responses on stdout.\n */\nexport async function runRpcMode(runtimeHost: AgentSessionRuntime): Promise<never> {\n\ttakeOverStdout();\n\tlet session = runtimeHost.session;\n\tlet unsubscribe: (() => void) | undefined;\n\n\tconst output = (obj: RpcResponse | RpcExtensionUIRequest | object) => {\n\t\twriteRawStdout(serializeJsonLine(obj));\n\t};\n\n\tconst channelManager = new ChannelManager((message: ChannelDataMessage) => {\n\t\toutput(message);\n\t});\n\n\tconst success = <T extends RpcCommand[\"type\"]>(\n\t\tid: string | undefined,\n\t\tcommand: T,\n\t\tdata?: object | null,\n\t): 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 = (id: string | undefined, command: string, message: string): RpcResponse => {\n\t\treturn { id, type: \"response\", command, success: false, error: message };\n\t};\n\n\t// Pending extension UI requests waiting for response\n\tconst pendingExtensionRequests = new Map<\n\t\tstring,\n\t\t{ resolve: (value: any) => void; reject: (error: Error) => void }\n\t>();\n\n\t// Shutdown request flag\n\tlet shutdownRequested = false;\n\tlet shuttingDown = false;\n\tconst signalCleanupHandlers: Array<() => void> = [];\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(\n\t\t\t\topts,\n\t\t\t\tundefined,\n\t\t\t\t{ method: \"select\", title, options, multiple: opts?.multiple, timeout: opts?.timeout },\n\t\t\t\t(r) => (\"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\t// Only support string arrays in RPC mode - factory functions are ignored\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}\n\t\t\t// Component factories are not supported in RPC mode - would need TUI access\n\t\t},\n\n\t\tsetFooter(_factory: unknown): void {\n\t\t\t// Custom footer not supported in RPC mode - requires TUI access\n\t\t},\n\n\t\tsetHeader(_factory: unknown): void {\n\t\t\t// Custom header not supported in RPC mode - requires TUI access\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 not supported in RPC mode\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\truntimeHost.setRebindSession(async () => {\n\t\tawait rebindSession();\n\t});\n\n\tlet rebindDone: Promise<void>;\n\tconst rebindSession = async (): Promise<void> => {\n\t\tsession = runtimeHost.session;\n\t\tawait session.bindExtensions({\n\t\t\tuiContext: createExtensionUIContext(),\n\t\t\tcommandContextActions: {\n\t\t\t\twaitForIdle: () => session.agent.waitForIdle(),\n\t\t\t\tnewSession: async (options) => runtimeHost.newSession(options),\n\t\t\t\tfork: async (entryId, forkOptions) => {\n\t\t\t\t\tconst result = await runtimeHost.fork(entryId, forkOptions);\n\t\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t\t},\n\t\t\t\tnavigateTree: async (targetId, options) => {\n\t\t\t\t\tconst result = await session.navigateTree(targetId, {\n\t\t\t\t\t\tsummarize: options?.summarize,\n\t\t\t\t\t\tcustomInstructions: options?.customInstructions,\n\t\t\t\t\t\treplaceInstructions: options?.replaceInstructions,\n\t\t\t\t\t\tlabel: options?.label,\n\t\t\t\t\t});\n\t\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t\t},\n\t\t\t\tswitchSession: async (sessionPath, options) => {\n\t\t\t\t\treturn runtimeHost.switchSession(sessionPath, options);\n\t\t\t\t},\n\t\t\t\treload: async () => {\n\t\t\t\t\tawait session.reload();\n\t\t\t\t},\n\t\t\t},\n\t\t\tshutdownHandler: () => {\n\t\t\t\tshutdownRequested = true;\n\t\t\t},\n\t\t\tonError: (err) => {\n\t\t\t\toutput({ type: \"extension_error\", extensionPath: err.extensionPath, event: err.event, error: err.error });\n\t\t\t},\n\t\t\tregisterChannel: (name: string) => channelManager.register(name),\n\t\t});\n\n\t\tunsubscribe?.();\n\t\tunsubscribe = session.subscribe((event) => {\n\t\t\toutput(event);\n\t\t});\n\t};\n\n\tconst registerSignalHandlers = (): void => {\n\t\tconst signals: NodeJS.Signals[] = [\"SIGTERM\"];\n\t\tif (process.platform !== \"win32\") {\n\t\t\tsignals.push(\"SIGHUP\");\n\t\t}\n\n\t\tfor (const signal of signals) {\n\t\t\tconst handler = () => {\n\t\t\t\tkillTrackedDetachedChildren();\n\t\t\t\tvoid shutdown(signal === \"SIGHUP\" ? 129 : 143);\n\t\t\t};\n\t\t\tprocess.on(signal, handler);\n\t\t\tsignalCleanupHandlers.push(() => process.off(signal, handler));\n\t\t}\n\t};\n\n\trebindDone = rebindSession();\n\tregisterSignalHandlers();\n\toutput({ type: \"ready\" });\n\n\t// Handle a single command\n\tconst handleCommand = async (command: RpcCommand): Promise<RpcResponse | undefined> => {\n\t\tawait rebindDone;\n\t\tconst id = command.id;\n\n\t\tswitch (command.type) {\n\t\t\t// =================================================================\n\t\t\t// Prompting\n\t\t\t// =================================================================\n\n\t\t\tcase \"prompt\": {\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\tlet preflightSucceeded = false;\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\tsource: \"rpc\",\n\t\t\t\t\t\tpreflightResult: (didSucceed) => {\n\t\t\t\t\t\t\tif (didSucceed) {\n\t\t\t\t\t\t\t\tpreflightSucceeded = true;\n\t\t\t\t\t\t\t\toutput(success(id, \"prompt\"));\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 \"steer\": {\n\t\t\t\tawait session.steer(command.message, command.images);\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);\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 \"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 (!result.cancelled) {\n\t\t\t\t\tawait rebindSession();\n\t\t\t\t}\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 \"get_state\": {\n\t\t\t\tconst state: RpcSessionState = {\n\t\t\t\t\tmodel: session.model,\n\t\t\t\t\tthinkingLevel: session.thinkingLevel,\n\t\t\t\t\tisStreaming: session.isStreaming,\n\t\t\t\t\tisCompacting: session.isCompacting,\n\t\t\t\t\tsteeringMode: session.steeringMode,\n\t\t\t\t\tfollowUpMode: session.followUpMode,\n\t\t\t\t\tsessionFile: session.sessionFile,\n\t\t\t\t\tsessionId: session.sessionId,\n\t\t\t\t\tsessionName: session.sessionName,\n\t\t\t\t\tautoCompactionEnabled: session.autoCompactionEnabled,\n\t\t\t\t\tmessageCount: session.messages.length,\n\t\t\t\t\tpendingMessageCount: session.pendingMessageCount,\n\t\t\t\t};\n\t\t\t\treturn success(id, \"get_state\", state);\n\t\t\t}\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\tlet provider = command.provider;\n\t\t\t\tlet modelId = command.modelId;\n\n\t\t\t\tconst tierModels = session.getTierModels();\n\t\t\t\tconst aliasTarget = resolveModelAlias(modelId, tierModels);\n\t\t\t\tif (aliasTarget) {\n\t\t\t\t\tconst slashIndex = aliasTarget.indexOf(\"/\");\n\t\t\t\t\tif (slashIndex !== -1) {\n\t\t\t\t\t\tprovider = aliasTarget.substring(0, slashIndex);\n\t\t\t\t\t\tmodelId = aliasTarget.substring(slashIndex + 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmodelId = aliasTarget;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst models = await session.modelRegistry.getAvailable();\n\t\t\t\tconst model = models.find((m) => m.provider === provider && m.id === modelId);\n\t\t\t\tif (!model) {\n\t\t\t\t\treturn error(id, \"set_model\", `Model not found: ${provider}/${modelId}`);\n\t\t\t\t}\n\t\t\t\tawait session.setModel(model);\n\t\t\t\treturn success(id, \"set_model\", model);\n\t\t\t}\n\n\t\t\tcase \"cycle_model\": {\n\t\t\t\tconst result = await session.cycleModel();\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\", { models });\n\t\t\t}\n\n\t\t\tcase \"get_tier_models\": {\n\t\t\t\tconst tierModels = session.getTierModels();\n\t\t\t\tconst merged = { ...DEFAULT_TIER_ALIASES, ...tierModels };\n\t\t\t\treturn success(id, \"get_tier_models\", { models: merged });\n\t\t\t}\n\n\t\t\tcase \"set_tier_models\": {\n\t\t\t\tconst { models } = command;\n\t\t\t\tconst validTiers = new Set([\"fast\", \"pro\", \"max\"]);\n\t\t\t\tfor (const key of Object.keys(models)) {\n\t\t\t\t\tif (!validTiers.has(key)) {\n\t\t\t\t\t\treturn error(id, \"set_tier_models\", `Invalid tier name: \"${key}\". Valid tiers are: fast, pro, max`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst mapping: Record<string, string> = {};\n\t\t\t\tif (models.fast !== undefined) mapping.fast = models.fast;\n\t\t\t\tif (models.pro !== undefined) mapping.pro = models.pro;\n\t\t\t\tif (models.max !== undefined) mapping.max = models.max;\n\t\t\t\tsession.setTierModels(mapping);\n\t\t\t\treturn success(id, \"set_tier_models\");\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\tsession.setThinkingLevel(command.level);\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\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 \"bash\": {\n\t\t\t\tconst result = await session.executeBash(command.command);\n\t\t\t\treturn success(id, \"bash\", result);\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\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);\n\t\t\t\treturn success(id, \"export_html\", { path });\n\t\t\t}\n\n\t\t\tcase \"switch_session\": {\n\t\t\t\tconst result = await runtimeHost.switchSession(command.sessionPath);\n\t\t\t\tif (!result.cancelled) {\n\t\t\t\t\tsession = runtimeHost.session;\n\t\t\t\t}\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 previousName = session.sessionManager.getSessionName();\n\t\t\t\tconst forkPosition = (command as any).position === \"at\" ? { position: \"at\" as const } : undefined;\n\t\t\t\tconst result = await runtimeHost.fork(command.entryId, forkPosition);\n\t\t\t\tif (!result.cancelled) {\n\t\t\t\t\tconst newName = previousName ? `fork: ${previousName}` : \"fork\";\n\t\t\t\t\tsession = runtimeHost.session;\n\t\t\t\t\tsession.sessionManager.appendSessionInfo(newName);\n\t\t\t\t\tsession.sessionManager.flush();\n\t\t\t\t\tawait rebindSession();\n\t\t\t\t}\n\t\t\t\treturn success(id, \"fork\", {\n\t\t\t\t\ttext: result.selectedText,\n\t\t\t\t\tcancelled: result.cancelled,\n\t\t\t\t\tnewSessionFile: session.sessionManager.getSessionFile(),\n\t\t\t\t\tnewSessionId: session.sessionManager.getSessionId(),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"navigate_tree\": {\n\t\t\t\tconst navResult = await session.navigateTree(command.targetId, {\n\t\t\t\t\tsummarize: command.summarize ?? false,\n\t\t\t\t\tskipFiles: command.skipFiles,\n\t\t\t\t});\n\t\t\t\treturn success(id, \"navigate_tree\", { cancelled: navResult.cancelled, reason: navResult.reason });\n\t\t\t}\n\n\t\t\tcase \"rollback_preview\": {\n\t\t\t\tconst previewResult = await session.previewRollback(command.targetId);\n\t\t\t\treturn success(id, \"rollback_preview\", previewResult);\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 (!result.cancelled) {\n\t\t\t\t\tawait rebindSession();\n\t\t\t\t}\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_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 \"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\tcase \"get_full_messages\": {\n\t\t\t\tconst allEntries = session.sessionManager.getEntries();\n\t\t\t\tconst messageEntries = allEntries.filter((e) => e.type === \"message\");\n\t\t\t\tconst persistedMessages = messageEntries.map((e) => (e as { message: AgentMessage }).message);\n\t\t\t\tconst persistedSet = new Set(persistedMessages);\n\n\t\t\t\tconst memoryMessages = session.messages;\n\t\t\t\tconst unPersisted: AgentMessage[] = [];\n\t\t\t\tfor (let i = memoryMessages.length - 1; i >= 0; i--) {\n\t\t\t\t\tconst msg = memoryMessages[i];\n\t\t\t\t\tif (persistedSet.has(msg)) break;\n\t\t\t\t\tif (msg.role === \"compactionSummary\") continue;\n\t\t\t\t\tunPersisted.unshift(msg);\n\t\t\t\t}\n\n\t\t\t\tconst allMessages = [...persistedMessages, ...unPersisted];\n\t\t\t\tconst totalCount = allMessages.length;\n\n\t\t\t\tconst leafId = session.sessionManager.getLeafId();\n\n\t\t\t\tconst treeEntries = allEntries.map((e) => ({\n\t\t\t\t\tid: e.id,\n\t\t\t\t\tparentId: e.parentId,\n\t\t\t\t\ttype: e.type,\n\t\t\t\t\tlabel:\n\t\t\t\t\t\te.type === \"message\"\n\t\t\t\t\t\t\t? (e as any).message?.role\n\t\t\t\t\t\t\t: e.type === \"custom\"\n\t\t\t\t\t\t\t\t? (e as any).customType\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t}));\n\n\t\t\t\tconst customEntries = allEntries\n\t\t\t\t\t.filter((e) => e.type === \"custom\")\n\t\t\t\t\t.map((e) => ({\n\t\t\t\t\t\tid: e.id,\n\t\t\t\t\t\tcustomType: (e as any).customType ?? \"unknown\",\n\t\t\t\t\t\tdata: (e as any).data,\n\t\t\t\t\t\ttimestamp: new Date(e.timestamp).getTime(),\n\t\t\t\t\t}));\n\n\t\t\t\tconst compactionEntries = allEntries\n\t\t\t\t\t.filter((e) => e.type === \"compaction\")\n\t\t\t\t\t.map((e) => ({\n\t\t\t\t\t\tid: e.id,\n\t\t\t\t\t\tsummary: (e as any).summary ?? \"\",\n\t\t\t\t\t\ttokensBefore: (e as any).tokensBefore,\n\t\t\t\t\t\ttimestamp: new Date(e.timestamp).getTime(),\n\t\t\t\t\t}));\n\n\t\t\t\tif (command.limit !== undefined) {\n\t\t\t\t\tconst limit = command.limit;\n\t\t\t\t\tlet startIndex = 0;\n\t\t\t\t\tif (command.afterEntryId) {\n\t\t\t\t\t\tconst idx = messageEntries.findIndex((e) => e.id === command.afterEntryId);\n\t\t\t\t\t\tif (idx !== -1) {\n\t\t\t\t\t\t\tstartIndex = idx + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst page = allMessages.slice(startIndex, startIndex + limit);\n\t\t\t\t\tconst hasMore = startIndex + limit < totalCount;\n\t\t\t\t\tconst lastPersisted = messageEntries[Math.min(startIndex + limit, messageEntries.length) - 1];\n\t\t\t\t\treturn success(id, \"get_full_messages\", {\n\t\t\t\t\t\tmessages: page,\n\t\t\t\t\t\thasMore,\n\t\t\t\t\t\ttotalCount,\n\t\t\t\t\t\tnextCursor: hasMore && lastPersisted ? lastPersisted.id : null,\n\t\t\t\t\t\ttree: { entries: treeEntries, leafId },\n\t\t\t\t\t\tcustomEntries,\n\t\t\t\t\t\tcompactionEntries,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn success(id, \"get_full_messages\", {\n\t\t\t\t\tmessages: allMessages,\n\t\t\t\t\thasMore: false,\n\t\t\t\t\ttotalCount,\n\t\t\t\t\tnextCursor: null,\n\t\t\t\t\ttree: { entries: treeEntries, leafId },\n\t\t\t\t\tcustomEntries,\n\t\t\t\t\tcompactionEntries,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"get_tree\": {\n\t\t\t\tconst entries = session.sessionManager.getEntries();\n\t\t\t\tconst treeEntries = entries.map((e) => ({\n\t\t\t\t\tid: e.id,\n\t\t\t\t\tparentId: e.parentId,\n\t\t\t\t\ttype: e.type,\n\t\t\t\t\tlabel:\n\t\t\t\t\t\te.type === \"message\"\n\t\t\t\t\t\t\t? (e as any).message?.role\n\t\t\t\t\t\t\t: e.type === \"custom\"\n\t\t\t\t\t\t\t\t? (e as any).customType\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t}));\n\t\t\t\treturn success(id, \"get_tree\", { entries: treeEntries, leafId: session.sessionManager.getLeafId() });\n\t\t\t}\n\t\t\tcase \"get_tree_with_leaf\": {\n\t\t\t\tconst entries = session.sessionManager.getEntries();\n\t\t\t\tconst treeEntries = entries.map((e) => ({\n\t\t\t\t\tid: e.id,\n\t\t\t\t\tparentId: e.parentId,\n\t\t\t\t\ttype: e.type,\n\t\t\t\t\tlabel:\n\t\t\t\t\t\te.type === \"message\"\n\t\t\t\t\t\t\t? (e as any).message?.role\n\t\t\t\t\t\t\t: e.type === \"custom\"\n\t\t\t\t\t\t\t\t? (e as any).customType\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t}));\n\t\t\t\treturn success(id, \"get_tree_with_leaf\", {\n\t\t\t\t\tentries: treeEntries,\n\t\t\t\t\tleafId: session.sessionManager.getLeafId(),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// =================================================================\n\t\t\t// Resources (skills, extensions, tools)\n\t\t\t// =================================================================\n\n\t\t\tcase \"get_skills\": {\n\t\t\t\tconst { skills } = session.resourceLoader.getSkills();\n\t\t\t\tconst rpcSkills: RpcSkill[] = skills.map((s) => ({\n\t\t\t\t\tname: s.name,\n\t\t\t\t\tdescription: s.description,\n\t\t\t\t\tfilePath: s.filePath,\n\t\t\t\t\tbaseDir: s.baseDir,\n\t\t\t\t\tsourceInfo: s.sourceInfo,\n\t\t\t\t\tdisableModelInvocation: s.disableModelInvocation,\n\t\t\t\t}));\n\t\t\t\treturn success(id, \"get_skills\", { skills: rpcSkills });\n\t\t\t}\n\n\t\t\tcase \"get_extensions\": {\n\t\t\t\tconst { extensions } = session.resourceLoader.getExtensions();\n\t\t\t\tconst rpcExtensions: RpcExtension[] = extensions.map((e) => ({\n\t\t\t\t\tpath: e.path,\n\t\t\t\t\tresolvedPath: e.resolvedPath,\n\t\t\t\t\tsourceInfo: e.sourceInfo,\n\t\t\t\t\ttoolNames: Array.from(e.tools.keys()),\n\t\t\t\t\tcommandNames: Array.from(e.commands.keys()),\n\t\t\t\t}));\n\t\t\t\treturn success(id, \"get_extensions\", { extensions: rpcExtensions });\n\t\t\t}\n\n\t\t\tcase \"get_tools\": {\n\t\t\t\tconst allTools = session.extensionRunner.getAllRegisteredTools();\n\t\t\t\tconst rpcTools: RpcTool[] = allTools.map((t) => ({\n\t\t\t\t\tname: t.definition.name,\n\t\t\t\t\tlabel: t.definition.label,\n\t\t\t\t\tdescription: t.definition.description,\n\t\t\t\t\tsourceInfo: t.sourceInfo,\n\t\t\t\t}));\n\t\t\t\treturn success(id, \"get_tools\", { tools: rpcTools });\n\t\t\t}\n\n\t\t\tcase \"get_mcp_servers\": {\n\t\t\t\tconst servers: RpcMcpServer[] = session.getMcpConnections();\n\t\t\t\treturn success(id, \"get_mcp_servers\", { servers });\n\t\t\t}\n\n\t\t\tcase \"mcp_toggle_server\": {\n\t\t\t\ttry {\n\t\t\t\t\tawait session.toggleMcpServer(command.name, command.enabled);\n\t\t\t\t\treturn success(id, \"mcp_toggle_server\");\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn error(id, \"mcp_toggle_server\", e instanceof Error ? e.message : String(e));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcase \"mcp_restart_server\": {\n\t\t\t\ttry {\n\t\t\t\t\tawait session.restartMcpServer(command.name);\n\t\t\t\t\treturn success(id, \"mcp_restart_server\");\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn error(id, \"mcp_restart_server\", e instanceof Error ? e.message : String(e));\n\t\t\t\t}\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\tconst commands: RpcSlashCommand[] = [];\n\n\t\t\t\tfor (const command of session.extensionRunner.getRegisteredCommands()) {\n\t\t\t\t\tcommands.push({\n\t\t\t\t\t\tname: command.invocationName,\n\t\t\t\t\t\tdescription: command.description,\n\t\t\t\t\t\tsource: \"extension\",\n\t\t\t\t\t\tsourceInfo: command.sourceInfo,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfor (const template of session.promptTemplates) {\n\t\t\t\t\tcommands.push({\n\t\t\t\t\t\tname: template.name,\n\t\t\t\t\t\tdescription: template.description,\n\t\t\t\t\t\tsource: \"prompt\",\n\t\t\t\t\t\tsourceInfo: template.sourceInfo,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfor (const skill of session.resourceLoader.getSkills().skills) {\n\t\t\t\t\tcommands.push({\n\t\t\t\t\t\tname: `skill:${skill.name}`,\n\t\t\t\t\t\tdescription: skill.description,\n\t\t\t\t\t\tsource: \"skill\",\n\t\t\t\t\t\tsourceInfo: skill.sourceInfo,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn success(id, \"get_commands\", { commands });\n\t\t\t}\n\n\t\t\tcase \"get_settings\": {\n\t\t\t\tconst scope = command.scope;\n\t\t\t\tlet data: import(\"../../core/settings-manager.js\").Settings;\n\t\t\t\tif (scope === \"global\") {\n\t\t\t\t\tdata = session.settingsManager.getGlobalSettings();\n\t\t\t\t} else if (scope === \"project\") {\n\t\t\t\t\tdata = session.settingsManager.getProjectSettings();\n\t\t\t\t} else {\n\t\t\t\t\tdata = session.settingsManager.getGlobalSettings();\n\t\t\t\t}\n\t\t\t\treturn success(id, \"get_settings\", data);\n\t\t\t}\n\n\t\t\tcase \"set_settings\": {\n\t\t\t\ttype Scope = import(\"../../core/settings-manager.js\").SettingsScope;\n\t\t\t\tconst setScope = (command.scope as Scope | undefined) ?? \"global\";\n\t\t\t\tsession.settingsManager.applyOverrides(command.settings, setScope);\n\t\t\t\treturn success(id, \"set_settings\");\n\t\t\t}\n\n\t\t\tcase \"get_context_usage\": {\n\t\t\t\tconst usage = session.getContextUsage();\n\t\t\t\tif (!usage) {\n\t\t\t\t\treturn success(id, \"get_context_usage\", {\n\t\t\t\t\t\ttokens: null,\n\t\t\t\t\t\tcontextWindow: session.model?.contextWindow ?? 0,\n\t\t\t\t\t\tpercent: null,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn success(id, \"get_context_usage\", usage);\n\t\t\t}\n\n\t\t\tcase \"get_system_prompt\": {\n\t\t\t\t// Return the fully-constructed system prompt (or raw if not yet built)\n\t\t\t\tconst systemPrompt = session.agent.state.systemPrompt || session.systemPrompt || \"\";\n\t\t\t\tconst appendSystemPrompt = session.resourceLoader.getAppendSystemPrompt();\n\t\t\t\treturn success(id, \"get_system_prompt\", { systemPrompt, appendSystemPrompt });\n\t\t\t}\n\n\t\t\tcase \"get_active_tools\": {\n\t\t\t\tconst toolNames = session.getActiveToolNames();\n\t\t\t\treturn success(id, \"get_active_tools\", { toolNames });\n\t\t\t}\n\n\t\t\tcase \"set_active_tools\": {\n\t\t\t\tsession.setActiveToolsByName(command.toolNames);\n\t\t\t\treturn success(id, \"set_active_tools\");\n\t\t\t}\n\n\t\t\tcase \"get_queue\": {\n\t\t\t\treturn success(id, \"get_queue\", {\n\t\t\t\t\tsteering: [...session.getSteeringMessages()],\n\t\t\t\t\tfollowUp: [...session.getFollowUpMessages()],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"clear_queue\": {\n\t\t\t\tconst cleared = session.clearQueue();\n\t\t\t\treturn success(id, \"clear_queue\", cleared);\n\t\t\t}\n\n\t\t\tcase \"get_flags\": {\n\t\t\t\tconst flagsMap = session.extensionRunner.getFlags();\n\t\t\t\tconst flags: Array<{\n\t\t\t\t\tname: string;\n\t\t\t\t\tdescription?: string;\n\t\t\t\t\ttype: \"boolean\" | \"string\";\n\t\t\t\t\tdefault?: boolean | string;\n\t\t\t\t\textensionPath: string;\n\t\t\t\t}> = [];\n\t\t\t\tfor (const [name, flag] of flagsMap) {\n\t\t\t\t\tflags.push({\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tdescription: flag.description,\n\t\t\t\t\t\ttype: flag.type,\n\t\t\t\t\t\tdefault: flag.default,\n\t\t\t\t\t\textensionPath: flag.extensionPath,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn success(id, \"get_flags\", { flags });\n\t\t\t}\n\n\t\t\tcase \"get_flag_values\": {\n\t\t\t\tconst valuesMap = session.extensionRunner.getFlagValues();\n\t\t\t\tconst values: Record<string, boolean | string> = {};\n\t\t\t\tfor (const [name, value] of valuesMap) {\n\t\t\t\t\tvalues[name] = value;\n\t\t\t\t}\n\t\t\t\treturn success(id, \"get_flag_values\", { values });\n\t\t\t}\n\n\t\t\tcase \"set_flag\": {\n\t\t\t\tsession.extensionRunner.setFlagValue(command.name, command.value);\n\t\t\t\treturn success(id, \"set_flag\");\n\t\t\t}\n\n\t\t\tcase \"reload\": {\n\t\t\t\tawait session.reload();\n\t\t\t\tsession = runtimeHost.session;\n\t\t\t\t// Re-subscribe to session events on the reloaded session.\n\t\t\t\t// session.reload() rebuilds the internal extension runner, so the\n\t\t\t\t// previous subscription is stale.\n\t\t\t\tunsubscribe?.();\n\t\t\t\tunsubscribe = session.subscribe((event) => {\n\t\t\t\t\toutput(event);\n\t\t\t\t});\n\t\t\t\treturn success(id, \"reload\");\n\t\t\t}\n\n\t\t\tcase \"set_cwd\": {\n\t\t\t\tawait session.setCwd(command.cwd);\n\t\t\t\treturn success(id, \"set_cwd\");\n\t\t\t}\n\n\t\t\tcase \"get_agents_files\": {\n\t\t\t\tconst result = session.resourceLoader.getAgentsFiles();\n\t\t\t\treturn success(id, \"get_agents_files\", { agentsFiles: result.agentsFiles });\n\t\t\t}\n\n\t\t\tcase \"get_agents\": {\n\t\t\t\tconst discovery = discoverAgents(runtimeHost.cwd, \"both\");\n\t\t\t\tconst agents = discovery.agents.map((a) => ({\n\t\t\t\t\tname: a.name,\n\t\t\t\t\tdescription: a.description,\n\t\t\t\t\ttier: a.tier,\n\t\t\t\t\ttools: a.tools,\n\t\t\t\t\tpermissionMode: a.permissionMode,\n\t\t\t\t\tsource: a.source,\n\t\t\t\t\tfilePath: a.filePath,\n\t\t\t\t}));\n\t\t\t\treturn success(id, \"get_agents\", { agents });\n\t\t\t}\n\n\t\t\tcase \"switch_agent\": {\n\t\t\t\tconst agentName = (command as { agentName: string }).agentName;\n\t\t\t\tconst discovery = discoverAgents(runtimeHost.cwd, \"both\");\n\t\t\t\tconst agent = discovery.agents.find((a) => a.name === agentName);\n\t\t\t\tif (!agent) {\n\t\t\t\t\treturn error(id, \"switch_agent\", `Agent \"${agentName}\" not found`);\n\t\t\t\t}\n\t\t\t\tawait session.applyAgentConfig(agent);\n\t\t\t\treturn success(id, \"switch_agent\", {\n\t\t\t\t\tagentName: agent.name,\n\t\t\t\t\ttools: agent.tools ?? [],\n\t\t\t\t\ttier: agent.tier,\n\t\t\t\t\tthinkingLevel: agent.thinkingLevel,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"get_current_agent\": {\n\t\t\t\tconst currentAgent = session.getCurrentAgent();\n\t\t\t\treturn success(id, \"get_current_agent\", { agentName: currentAgent });\n\t\t\t}\n\n\t\t\tcase \"get_agent_detail\": {\n\t\t\t\tconst agentName = (command as { agentName: string }).agentName;\n\t\t\t\tconst discovery = discoverAgents(runtimeHost.cwd, \"both\");\n\t\t\t\tconst agent = discovery.agents.find((a) => a.name === agentName);\n\t\t\t\tif (!agent) {\n\t\t\t\t\treturn error(id, \"get_agent_detail\", `Agent \"${agentName}\" not found`);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"get_agent_detail\", { agent });\n\t\t\t}\n\n\t\t\tcase \"get_all_tools\": {\n\t\t\t\tconst allTools = session.getAllTools();\n\t\t\t\treturn success(id, \"get_all_tools\", {\n\t\t\t\t\ttools: allTools.map((t) => ({\n\t\t\t\t\t\tname: t.name,\n\t\t\t\t\t\tdescription: t.description,\n\t\t\t\t\t\tsourceInfo: t.sourceInfo,\n\t\t\t\t\t})),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"get_modified_files\": {\n\t\t\t\tconst fileSnapshotManager = (session as any).fileSnapshotManager;\n\t\t\t\tif (!fileSnapshotManager) {\n\t\t\t\t\treturn success(id, \"get_modified_files\", { files: [] });\n\t\t\t\t}\n\t\t\t\tconst files = fileSnapshotManager.getModifiedFiles({\n\t\t\t\t\tfromEntryId: command.fromEntryId,\n\t\t\t\t\ttoEntryId: command.toEntryId,\n\t\t\t\t});\n\t\t\t\treturn success(id, \"get_modified_files\", { files });\n\t\t\t}\n\n\t\t\tcase \"get_file_diff\": {\n\t\t\t\tconst fileSnapshotManager = (session as any).fileSnapshotManager;\n\t\t\t\tif (!fileSnapshotManager) {\n\t\t\t\t\treturn success(id, \"get_file_diff\", null);\n\t\t\t\t}\n\t\t\t\tconst diff = fileSnapshotManager.getFileDiff({\n\t\t\t\t\tfilePath: command.filePath,\n\t\t\t\t\tfromEntryId: command.fromEntryId,\n\t\t\t\t\ttoEntryId: command.toEntryId,\n\t\t\t\t});\n\t\t\t\tif (!diff) {\n\t\t\t\t\treturn success(id, \"get_file_diff\", null);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"get_file_diff\", {\n\t\t\t\t\tpath: diff.path,\n\t\t\t\t\toldContent: diff.oldContent,\n\t\t\t\t\tnewContent: diff.newContent,\n\t\t\t\t\tunifiedDiff: diff.unifiedDiff,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"get_batch_diffs\": {\n\t\t\t\tconst fileSnapshotManager = (session as any).fileSnapshotManager;\n\t\t\t\tif (!fileSnapshotManager) {\n\t\t\t\t\treturn success(id, \"get_batch_diffs\", {\n\t\t\t\t\t\tfiles: [],\n\t\t\t\t\t\tsummary: { totalFiles: 0, added: 0, modified: 0, deleted: 0 },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tconst result = fileSnapshotManager.getBatchDiffs({\n\t\t\t\t\tfromEntryId: command.fromEntryId,\n\t\t\t\t\ttoEntryId: command.toEntryId,\n\t\t\t\t});\n\t\t\t\tconst serializedFiles = result.files.map((f: any) => ({\n\t\t\t\t\tpath: f.path,\n\t\t\t\t\tstatus: f.status,\n\t\t\t\t\tdiff: f.diff\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tpath: f.diff.path,\n\t\t\t\t\t\t\t\toldContent: f.diff.oldContent,\n\t\t\t\t\t\t\t\tnewContent: f.diff.newContent,\n\t\t\t\t\t\t\t\tunifiedDiff: f.diff.unifiedDiff,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: null,\n\t\t\t\t}));\n\t\t\t\treturn success(id, \"get_batch_diffs\", {\n\t\t\t\t\tfiles: serializedFiles,\n\t\t\t\t\tsummary: result.summary,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"get_file_history\": {\n\t\t\t\tconst fileSnapshotManager = (session as any).fileSnapshotManager;\n\t\t\t\tif (!fileSnapshotManager) {\n\t\t\t\t\treturn success(id, \"get_file_history\", { history: [] });\n\t\t\t\t}\n\t\t\t\tconst result = fileSnapshotManager.getFileHistory({\n\t\t\t\t\tfilePath: command.filePath,\n\t\t\t\t});\n\t\t\t\treturn success(id, \"get_file_history\", { history: result });\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(undefined, unknownCommand.type, `Unknown command: ${unknownCommand.type}`);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Check if shutdown was requested and perform shutdown if so.\n\t * Called after handling each command when waiting for the next command.\n\t */\n\tlet detachInput = () => {};\n\n\tasync function shutdown(exitCode = 0): Promise<never> {\n\t\tif (shuttingDown) {\n\t\t\tprocess.exit(exitCode);\n\t\t}\n\t\tshuttingDown = true;\n\t\tfor (const cleanup of signalCleanupHandlers) {\n\t\t\tcleanup();\n\t\t}\n\t\tunsubscribe?.();\n\t\tawait runtimeHost.dispose();\n\t\tdetachInput();\n\t\tprocess.stdin.pause();\n\t\tprocess.exit(exitCode);\n\t}\n\n\tasync function checkShutdownRequested(): Promise<void> {\n\t\tif (!shutdownRequested) return;\n\t\tawait shutdown();\n\t}\n\n\tconst handleInputLine = async (line: string) => {\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\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\tconst pending = pendingExtensionRequests.get(response.id);\n\t\t\tif (pending) {\n\t\t\t\tpendingExtensionRequests.delete(response.id);\n\t\t\t\tpending.resolve(response);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Handle channel data from RPC Client\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 === \"channel_data\" &&\n\t\t\t\"name\" in parsed\n\t\t) {\n\t\t\tchannelManager.handleInbound(parsed as ChannelDataMessage);\n\t\t\treturn;\n\t\t}\n\n\t\tconst command = parsed as RpcCommand;\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}\n\t\t\tawait checkShutdownRequested();\n\t\t} catch (commandError: unknown) {\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),\n\t\t\t);\n\t\t}\n\t};\n\n\tconst onInputEnd = () => {\n\t\tvoid shutdown();\n\t};\n\tprocess.stdin.on(\"end\", onInputEnd);\n\n\tdetachInput = (() => {\n\t\tconst detachJsonl = attachJsonlLineReader(process.stdin, (line) => {\n\t\t\tvoid handleInputLine(line);\n\t\t});\n\t\treturn () => {\n\t\t\tdetachJsonl();\n\t\t\tprocess.stdin.off(\"end\", onInputEnd);\n\t\t};\n\t})();\n\n\t// Keep process alive forever\n\treturn new Promise(() => {});\n}\n"]}
|