@bastani/atomic 0.9.61-alpha.2 → 0.9.61-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/CHANGELOG.md +16 -2
  2. package/dist/builtin/intercom/package.json +1 -1
  3. package/dist/builtin/mcp/package.json +1 -1
  4. package/dist/builtin/subagents/package.json +1 -1
  5. package/dist/builtin/web-access/package.json +1 -1
  6. package/dist/builtin/workflows/package.json +1 -1
  7. package/dist/builtin/workflows/src/extension/index.bundle.mjs +49 -9
  8. package/dist/builtin/workflows/src/extension/local-worker-entry.mjs +61 -10
  9. package/dist/builtin/workflows/src/index.js +49 -9
  10. package/dist/builtin/workflows/src/local-worker-entry.mjs +61 -10
  11. package/dist/modes/interactive-engine/engine-render-service.d.ts +8 -0
  12. package/dist/modes/interactive-engine/engine-render-service.d.ts.map +1 -1
  13. package/dist/modes/interactive-engine/engine-render-service.js +28 -6
  14. package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
  15. package/dist/modes/interactive-engine/remote-renderer.d.ts +6 -0
  16. package/dist/modes/interactive-engine/remote-renderer.d.ts.map +1 -1
  17. package/dist/modes/interactive-engine/remote-renderer.js +17 -3
  18. package/dist/modes/interactive-engine/remote-renderer.js.map +1 -1
  19. package/dist/modes/rpc/queued-writer.d.ts +2 -0
  20. package/dist/modes/rpc/queued-writer.d.ts.map +1 -1
  21. package/dist/modes/rpc/queued-writer.js +8 -0
  22. package/dist/modes/rpc/queued-writer.js.map +1 -1
  23. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  24. package/dist/modes/rpc/rpc-client.js +4 -0
  25. package/dist/modes/rpc/rpc-client.js.map +1 -1
  26. package/docs/workflows/operations.md +1 -1
  27. package/npm-shrinkwrap.json +32 -32
  28. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-client.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-client.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChildProcess } from \"node:child_process\";\nimport type { ImageContent } from \"@bastani/pi-ai/compat\";\nimport type { BashResult } from \"../../core/bash-executor.ts\";\nimport type { WorkflowActivityFrame } from \"../../core/extensions/workflow-events.js\";\nimport { CredentialSynchronizationError } from \"../../core/model-runtime.js\";\nimport type { BashOutputChannel } from \"../../core/tools/bash.js\";\nimport { sleep } from \"../../utils/sleep.ts\";\nimport type { ActivityWatchdogDiagnostic } from \"../interactive-engine/activity-watchdog.ts\";\nimport type {\n\tInteractiveEngineGenerationEnded,\n\tInteractiveEngineGenerationEndedListener,\n\tInteractiveEngineGenerationEndKind,\n} from \"../interactive-engine/engine-generation.ts\";\nimport { InteractiveEngineMonitor } from \"../interactive-engine/engine-monitor.ts\";\nimport { WorkflowActivityMirror } from \"../interactive-engine/engine-workflow-activity.ts\";\nimport {\n\ttype EngineKeybindingState,\n\ttype InteractiveEngineCommand,\n\ttype InteractiveEngineMessage,\n\tserializeInteractiveEngineFrame,\n} from \"../interactive-engine/protocol.ts\";\nimport { attachJsonlLineReader, serializeJsonLine } from \"./jsonl.ts\";\nimport { QueuedWriter } from \"./queued-writer.ts\";\nimport { RpcClientApi, type RpcCommandBody } from \"./rpc-client-api.ts\";\nimport {\n\tappendBoundedStderr,\n\tcreateInteractiveJsonlOptions,\n\tcreateStderrReporter,\n\trestartCliArgs,\n\tspawnRpcClientProcess,\n\tterminateRpcClientProcess,\n} from \"./rpc-client-process.js\";\nimport { collectRpcEvents, runUserBashWithUpdates, waitForRpcIdle } from \"./rpc-client-waits.ts\";\nimport { DEFAULT_REQUEST_TIMEOUT_MS, LONG_LIVED_COMMANDS, RESTART_CANCELLED_MESSAGE } from \"./rpc-command-timeouts.ts\";\nimport { RpcEventBuffer } from \"./rpc-event-buffer.ts\";\nimport { GenerationBuffer } from \"./rpc-generation-buffer.ts\";\nimport { RpcPendingRequests } from \"./rpc-pending-requests.ts\";\nimport { RpcTerminalDrain } from \"./rpc-terminal-drain.ts\";\nimport { markRpcTransportFailure, rpcTransportError } from \"./rpc-transport-error.ts\";\nimport type { RpcCommand, RpcEvent, RpcExtensionUIRequest, RpcExtensionUIResponse, RpcResponse } from \"./rpc-types.ts\";\n\nexport type { ModelInfo, RpcCommandBody } from \"./rpc-client-api.ts\";\nexport type { RpcEvent } from \"./rpc-types.ts\";\n\nexport interface RpcClientOptions {\n\tcliPath?: string;\n\tcwd?: string;\n\tenv?: Record<string, string>;\n\tprovider?: string;\n\tmodel?: string;\n\targs?: string[];\n\truntimeExecutable?: string;\n\truntimeArgs?: string[];\n\t/**\n\t * Bounded deadline (ms) applied to short metadata/control requests. Long-lived\n\t * commands (see LONG_LIVED_COMMANDS) never use this timer. Defaults to 30s.\n\t */\n\trequestTimeoutMs?: number;\n\tinteractiveEngine?: {\n\t\tonDiagnostic: (diagnostic: ActivityWatchdogDiagnostic) => void;\n\t\tonActivityChange?: (active: boolean) => void;\n\t\t/**\n\t\t * Heartbeat observer. Deliberately NOT a generic engine-message listener:\n\t\t * subscribing there drains the buffered startup custom-UI messages into the\n\t\t * first subscriber and stops buffering for the real controllers.\n\t\t */\n\t\tonHeartbeat?: () => void;\n\t\t/**\n\t\t * Credential for the engine child. Delivered through the protected\n\t\t * bootstrap file, never through the child's environment or argv.\n\t\t */\n\t\tapiKey?: string;\n\t};\n}\n\nexport type RpcEventListener = (event: RpcEvent) => void;\n\n/** Longest an explicit quit waits for the child to acknowledge it before stopping an unresponsive engine anyway. */\nconst EXPLICIT_QUIT_ACK_TIMEOUT_MS = 1000;\n\nexport class RpcClient extends RpcClientApi {\n\tprivate process: ChildProcess | null = null;\n\tprivate stopReadingStdout: (() => void) | null = null;\n\tprivate eventListeners: RpcEventListener[] = [];\n\tprivate extensionUIListeners: Array<(request: RpcExtensionUIRequest) => void> = [];\n\tprivate readonly pendingExtensionUIRequests = new GenerationBuffer<RpcExtensionUIRequest>();\n\tprivate engineMessageListeners: Array<(message: InteractiveEngineMessage) => void> = [];\n\tprivate latestEngineKeybindingState: EngineKeybindingState | undefined;\n\tprivate readonly workflowActivity = new WorkflowActivityMirror();\n\tprivate readonly pendingEngineMessages = new GenerationBuffer<InteractiveEngineMessage>();\n\tprivate readonly pendingProjectTrustFrames = new GenerationBuffer<string>();\n\tprivate boundGeneration = 0;\n\tprivate explicitQuitAck: { generation: number; acknowledge: () => void } | undefined;\n\tprivate readonly pendingRequests = new RpcPendingRequests();\n\t/** Bumped by every explicit stop; a restart holds a permit across its own stop. */\n\tprivate restartRevision = 0;\n\tprivate stopPromise: Promise<void> | undefined;\n\tprivate readonly terminalDrain = new RpcTerminalDrain();\n\tprivate stdoutDrained: Promise<void> = Promise.resolve();\n\tprivate requestId = 0;\n\tprivate stderr = \"\";\n\tprivate exitError: Error | null = null;\n\tprivate engineMonitor: InteractiveEngineMonitor | undefined;\n\tprivate eventBuffer: RpcEventBuffer | undefined;\n\tprivate stdinWriter: QueuedWriter | undefined;\n\tprivate generation = 0;\n\tprivate lastEndedGeneration = 0;\n\tprivate generationEndedListeners: InteractiveEngineGenerationEndedListener[] = [];\n\t/**\n\t * The latest generation-end event, retained so a subscriber that attaches\n\t * after the child died still observes it. A child can exit between\n\t * `start()` returning and the runtime constructing its listeners.\n\t */\n\tprivate retainedGenerationEnd: InteractiveEngineGenerationEnded | undefined;\n\tprivate readonly activeActivityIds = new Set<string>();\n\tprivate enginePid: number | undefined;\n\n\tprivate declare options: RpcClientOptions;\n\n\tconstructor(options: RpcClientOptions = {}) {\n\t\tsuper();\n\t\tthis.options = options;\n\t}\n\n\tasync start(): Promise<void> {\n\t\tif (this.process) {\n\t\t\tthrow new Error(\"Client already started\");\n\t\t}\n\n\t\tconst cliPath = this.options.cliPath ?? \"dist/cli.js\";\n\t\tconst args = [\"--mode\", \"rpc\"];\n\n\t\tif (this.options.provider) {\n\t\t\targs.push(\"--provider\", this.options.provider);\n\t\t}\n\t\tif (this.options.model) {\n\t\t\targs.push(\"--model\", this.options.model);\n\t\t}\n\t\tif (this.options.args) {\n\t\t\targs.push(...this.options.args);\n\t\t}\n\n\t\tconst generation = ++this.generation;\n\t\tthis.exitError = null;\n\t\tthis.stderr = \"\";\n\t\tthis.activeActivityIds.clear();\n\t\tthis.enginePid = undefined;\n\t\tthis.engineMonitor = this.options.interactiveEngine\n\t\t\t? new InteractiveEngineMonitor(this.options.interactiveEngine.onDiagnostic, (message) =>\n\t\t\t\t\tthis.observeInteractiveEngineMessage(message, generation),\n\t\t\t\t)\n\t\t\t: undefined;\n\t\tthis.eventBuffer = this.engineMonitor ? new RpcEventBuffer((event) => this.emitEvent(event)) : undefined;\n\t\tconst childProcess = spawnRpcClientProcess({\n\t\t\tcliPath,\n\t\t\tcliArgs: args,\n\t\t\tcwd: this.options.cwd,\n\t\t\tenv: this.options.env,\n\t\t\truntimeExecutable: this.options.runtimeExecutable,\n\t\t\truntimeArgs: this.options.runtimeArgs,\n\t\t\tinteractiveEngine: this.engineMonitor !== undefined,\n\t\t\t...(this.options.interactiveEngine?.apiKey\n\t\t\t\t? { interactiveEngineApiKey: this.options.interactiveEngine.apiKey }\n\t\t\t\t: {}),\n\t\t});\n\t\tthis.process = childProcess;\n\t\tthis.stdinWriter = new QueuedWriter(childProcess.stdin!);\n\n\t\tchildProcess.once(\"exit\", (code, signal) =>\n\t\t\tthis.failGeneration(this.createProcessExitError(code, signal), generation, \"exit\"),\n\t\t);\n\t\tchildProcess.once(\"error\", (rawError) => this.failGeneration(rawError, generation, \"process-error\"));\n\t\tchildProcess.stdin?.on(\"error\", (rawError) => this.failGeneration(rawError, generation, \"stdin-error\"));\n\t\tconst reportStderr = createStderrReporter((message) => {\n\t\t\tif (generation !== this.generation) return;\n\t\t\tif (this.options.interactiveEngine) {\n\t\t\t\tthis.options.interactiveEngine.onDiagnostic({\n\t\t\t\t\tactivity: undefined,\n\t\t\t\t\telapsedMs: 0,\n\t\t\t\t\tlevel: \"blocking\",\n\t\t\t\t\tsource: \"stderr\",\n\t\t\t\t\tmessage,\n\t\t\t\t});\n\t\t\t} else console.log(message);\n\t\t});\n\t\t// Decode continuously per child, including split code points and the final incomplete sequence at EOF.\n\t\tchildProcess.stderr?.setEncoding(\"utf8\");\n\t\tchildProcess.stderr?.on(\"data\", (data: string) => {\n\t\t\tif (generation !== this.generation) return;\n\t\t\tthis.stderr = appendBoundedStderr(this.stderr, data);\n\t\t\treportStderr(data);\n\t\t});\n\t\tconst readerOptions = createInteractiveJsonlOptions(this.engineMonitor !== undefined);\n\t\tlet markStdoutDrained!: () => void;\n\t\tthis.stdoutDrained = new Promise<void>((resolve) => {\n\t\t\tmarkStdoutDrained = resolve;\n\t\t});\n\t\tthis.stopReadingStdout = attachJsonlLineReader(\n\t\t\tchildProcess.stdout!,\n\t\t\t(line) => {\n\t\t\t\tif (generation === this.generation) this.handleLine(line, generation);\n\t\t\t},\n\t\t\t{ ...readerOptions, onDrained: () => markStdoutDrained() },\n\t\t);\n\t\tif (this.engineMonitor) await this.engineMonitor.waitUntilReady();\n\t\telse await sleep(100);\n\n\t\tif (generation !== this.generation || this.process?.exitCode !== null) {\n\t\t\tthrow rpcTransportError(`Agent process exited immediately. Stderr: ${this.stderr}`);\n\t\t}\n\t}\n\n\t/**\n\t * Tell the engine child the host is quitting on purpose, and wait (bounded) for it to\n\t * record that. Call it before `stop()` for a quit the user asked for: stopping closes\n\t * stdin and sends SIGTERM, which is also how the child is stopped when the host itself\n\t * was signalled, so only this announcement lets the child tell the two apart.\n\t * Resolves true only when the child acknowledged the quit, and false without waiting when\n\t * there is no live engine child, or when the child exits or misses the deadline first.\n\t */\n\tasync announceExplicitQuit(timeoutMs = EXPLICIT_QUIT_ACK_TIMEOUT_MS): Promise<boolean> {\n\t\tconst writer = this.stdinWriter;\n\t\tif (!writer || !this.engineMonitor || this.generation <= this.lastEndedGeneration) return false;\n\t\tconst generation = this.generation;\n\t\tconst done = Promise.withResolvers<boolean>();\n\t\tthis.explicitQuitAck = { generation, acknowledge: () => done.resolve(true) };\n\t\tconst stopListening = this.onGenerationEnded((event) => {\n\t\t\tif (event.generation === generation) done.resolve(false);\n\t\t});\n\t\tconst timer = setTimeout(() => done.resolve(false), timeoutMs);\n\t\ttry {\n\t\t\tthis.bestEffort(\n\t\t\t\twriter.write(serializeInteractiveEngineFrame({ type: \"engine_explicit_quit\" })),\n\t\t\t\t\"explicit quit\",\n\t\t\t);\n\t\t\treturn await done.promise;\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t\tstopListening();\n\t\t\tif (this.explicitQuitAck?.generation === generation) this.explicitQuitAck = undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Explicit stop. Voids any in-flight restart permit, so a replacement caught\n\t * between its own stop and start can never spawn after this returns.\n\t */\n\tstop(): Promise<void> {\n\t\tthis.restartRevision += 1;\n\t\tif (this.stopPromise) return this.stopPromise;\n\t\tif (!this.process) return Promise.resolve();\n\t\tconst stopPromise = this.stopCurrentGeneration().finally(() => {\n\t\t\tif (this.stopPromise === stopPromise) this.stopPromise = undefined;\n\t\t});\n\t\tthis.stopPromise = stopPromise;\n\t\treturn stopPromise;\n\t}\n\n\t/**\n\t * Tear down the current child without touching the restart permit. The reader\n\t * stays attached and the generation stays current until the dead child's\n\t * stdout settles, so an ownership frame it already sent still reaches its\n\t * request; only then is the generation retired (see RpcTerminalDrain).\n\t */\n\tprivate async stopCurrentGeneration(): Promise<void> {\n\t\tconst child = this.process;\n\t\tif (!child) return;\n\t\tconst endedGeneration = this.generation;\n\t\tconst stopError = rpcTransportError(\"Agent process stopped\");\n\t\tthis.invalidateEngineShortcuts();\n\t\tconst terminateTree = this.engineMonitor !== undefined;\n\t\tthis.engineMonitor?.stop();\n\t\tthis.stdinWriter?.close(stopError);\n\t\t// Unblock an in-flight start()/waitUntilBound() for the generation being\n\t\t// replaced. Readiness has no deadline by design, so without this an\n\t\t// explicit stop of a hung replacement child could never be observed.\n\t\tthis.engineMonitor?.fail(stopError);\n\t\tthis.engineMonitor = undefined;\n\t\tthis.stdinWriter = undefined;\n\t\tthis.process = null;\n\t\t// Publish before terminating so host controllers tear down this generation's\n\t\t// UI while the writer is detached: disposal cannot write into a replacement.\n\t\tthis.publishGenerationEnded(endedGeneration, stopError, \"explicit-stop\", true);\n\t\t// Claim before terminating so the exit this provokes does not relabel a\n\t\t// deliberate stop; an exit that already claimed keeps its own error.\n\t\tthis.terminalDrain.claim(endedGeneration, stopError);\n\t\tawait terminateRpcClientProcess(child, terminateTree);\n\t\tawait this.beginTerminalDrain(endedGeneration, stopError);\n\t\tthis.stopReadingStdout?.();\n\t\tthis.stopReadingStdout = null;\n\t\tthis.generation += 1;\n\t\tthis.pendingRequests.rejectAll(stopError);\n\t\tthis.eventBuffer?.dispose();\n\t\tthis.eventBuffer = undefined;\n\t\tthis.activeActivityIds.clear();\n\t\tthis.options.interactiveEngine?.onActivityChange?.(false);\n\t}\n\n\t/** Subscribe to agent events. */\n\tonEvent(listener: RpcEventListener): () => void {\n\t\tthis.eventListeners.push(listener);\n\t\treturn () => {\n\t\t\tconst index = this.eventListeners.indexOf(listener);\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.eventListeners.splice(index, 1);\n\t\t\t}\n\t\t};\n\t}\n\n\tonExtensionUIRequest(listener: (request: RpcExtensionUIRequest) => void): () => void {\n\t\tthis.extensionUIListeners.push(listener);\n\t\tfor (const request of this.pendingExtensionUIRequests.drain(this.generation)) listener(request);\n\t\treturn () => {\n\t\t\tconst index = this.extensionUIListeners.indexOf(listener);\n\t\t\tif (index !== -1) this.extensionUIListeners.splice(index, 1);\n\t\t};\n\t}\n\n\tasync respondExtensionUI(response: RpcExtensionUIResponse): Promise<void> {\n\t\tawait this.requireWriter().write(serializeJsonLine(response));\n\t}\n\n\tonInteractiveEngineMessage(listener: (message: InteractiveEngineMessage) => void): () => void {\n\t\tthis.engineMessageListeners.push(listener);\n\t\tfor (const message of this.pendingEngineMessages.drain(this.generation)) listener(message);\n\t\treturn () => {\n\t\t\tconst index = this.engineMessageListeners.indexOf(listener);\n\t\t\tif (index !== -1) this.engineMessageListeners.splice(index, 1);\n\t\t};\n\t}\n\n\tonInteractiveEngineKeybindingState(listener: (state: EngineKeybindingState) => void): () => void {\n\t\tconst messageListener = (message: InteractiveEngineMessage): void => {\n\t\t\tif (message.type === \"engine_keybindings_reloaded\") listener(message.state);\n\t\t};\n\t\tthis.engineMessageListeners.push(messageListener);\n\t\tif (this.latestEngineKeybindingState) listener(this.latestEngineKeybindingState);\n\t\treturn () => {\n\t\t\tconst index = this.engineMessageListeners.indexOf(messageListener);\n\t\t\tif (index !== -1) this.engineMessageListeners.splice(index, 1);\n\t\t};\n\t}\n\n\t/**\n\t * Subscribe to the engine's workflow activity. The engine publishes its snapshot as soon as it binds,\n\t * so an observer that attaches later starts from the current snapshot instead of missing it.\n\t */\n\tonInteractiveEngineWorkflowActivity(listener: (frame: WorkflowActivityFrame) => void): () => void {\n\t\tconst messageListener = (message: InteractiveEngineMessage): void => {\n\t\t\tif (message.type === \"engine_workflow_activity\") listener(message.frame);\n\t\t};\n\t\tthis.engineMessageListeners.push(messageListener);\n\t\tconst current = this.workflowActivity.current();\n\t\tif (current) listener(current);\n\t\treturn () => {\n\t\t\tconst index = this.engineMessageListeners.indexOf(messageListener);\n\t\t\tif (index !== -1) this.engineMessageListeners.splice(index, 1);\n\t\t};\n\t}\n\n\t/**\n\t * Subscribe to host-local generation death. Fires at most once per\n\t * generation, synchronously, before any restart work. A death that has\n\t * already happened for the current generation replays immediately, so a\n\t * listener attached after an exit still sees it.\n\t */\n\tonGenerationEnded(listener: InteractiveEngineGenerationEndedListener): () => void {\n\t\tthis.generationEndedListeners.push(listener);\n\t\tconst retained = this.retainedGenerationEnd;\n\t\t// Only while it still describes the live generation: once stop()/start()\n\t\t// has moved on, that death belongs to a replaced child.\n\t\tif (retained && retained.generation === this.generation) listener(retained);\n\t\treturn () => {\n\t\t\tconst index = this.generationEndedListeners.indexOf(listener);\n\t\t\tif (index !== -1) this.generationEndedListeners.splice(index, 1);\n\t\t};\n\t}\n\n\tsendInteractiveEngineCommand(command: InteractiveEngineCommand): void {\n\t\tconst writer = this.stdinWriter;\n\t\tif (command.type === \"engine_project_trust_start\" || command.type === \"engine_project_trust_end\") {\n\t\t\tif (this.generation <= this.lastEndedGeneration) return;\n\t\t\t// The terminal can open and close /trust while the engine is still binding.\n\t\t\t// Retain both frames, without delaying the host-owned decision.\n\t\t\tif (this.engineMonitor && this.boundGeneration !== this.generation) {\n\t\t\t\tthis.pendingProjectTrustFrames.push(this.generation, serializeInteractiveEngineFrame(command));\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (!writer) return;\n\t\tconst frame = serializeInteractiveEngineFrame(command);\n\t\tif (\n\t\t\tcommand.type === \"engine_custom_render\" ||\n\t\t\tcommand.type === \"engine_tool_render\" ||\n\t\t\tcommand.type === \"engine_message_render\"\n\t\t) {\n\t\t\twriter.offerLatest(`render:${command.componentId}`, frame);\n\t\t\treturn;\n\t\t}\n\t\tthis.bestEffort(writer.write(frame), `engine command ${command.type}`);\n\t}\n\twaitForInteractiveEngineBound(): Promise<void> {\n\t\treturn this.engineMonitor?.waitUntilBound() ?? Promise.resolve();\n\t}\n\twaitForInteractiveEngineProjectTrust(): Promise<void> {\n\t\treturn this.engineMonitor?.waitUntilProjectTrustSettled() ?? Promise.resolve();\n\t}\n\twaitForInteractiveEngineResources(): Promise<void> {\n\t\treturn this.engineMonitor?.waitUntilResourcesReady() ?? Promise.resolve();\n\t}\n\tgetEnginePid(): number | undefined {\n\t\treturn this.enginePid;\n\t}\n\tgetGeneration(): number {\n\t\treturn this.generation;\n\t}\n\n\t/**\n\t * Replace the engine child, unless an explicit stop supersedes this attempt.\n\t * The permit is checked immediately before spawning, so a `stop()` in that\n\t * window is always observed; cancellation throws rather than returning\n\t * quietly, because callers go on to initialize against the new child.\n\t */\n\tasync restart(sessionId: string | undefined, options?: { sessionDirectory?: string; cwd?: string }): Promise<void> {\n\t\tconst permit = this.restartRevision;\n\t\tawait this.stopCurrentGeneration();\n\t\t// Join an in-flight stop before the permit check: waiting after it would\n\t\t// reopen the window this fence exists to close.\n\t\tif (this.stopPromise) await this.stopPromise;\n\t\tif (permit !== this.restartRevision) throw rpcTransportError(RESTART_CANCELLED_MESSAGE);\n\t\tthis.options = {\n\t\t\t...this.options,\n\t\t\tcwd: options?.cwd ?? this.options.cwd,\n\t\t\targs: restartCliArgs(this.options.args, sessionId, options?.sessionDirectory),\n\t\t};\n\t\tawait this.start();\n\t\tawait this.waitForInteractiveEngineBound();\n\t}\n\n\tasync requestInternal<T>(command: RpcCommandBody): Promise<T> {\n\t\treturn this.data<T>(await this.request(command));\n\t}\n\tuserBashWithUpdates(\n\t\tcommand: string,\n\t\tonUpdate: (delta: string, channel: BashOutputChannel) => void,\n\t\toptions?: { excludeFromContext?: boolean; onRequestId?: (id: string) => void },\n\t): Promise<BashResult> {\n\t\treturn runUserBashWithUpdates(this, command, onUpdate, options, (body, onId) => this.request(body, onId));\n\t}\n\tgetStderr(): string {\n\t\treturn this.stderr;\n\t}\n\n\twaitForIdle(timeout = 60000): Promise<void> {\n\t\treturn waitForRpcIdle(this, timeout);\n\t}\n\tcollectEvents(timeout = 60000): Promise<RpcEvent[]> {\n\t\treturn collectRpcEvents(this, timeout);\n\t}\n\tasync promptAndWait(message: string, images?: ImageContent[], timeout = 60000): Promise<RpcEvent[]> {\n\t\tconst eventsPromise = this.collectEvents(timeout);\n\t\tconst accepted = this.prompt(message, images);\n\t\t// A prompt has no request deadline, so `timeout` must also end the wait while\n\t\t// the prompt is still unacknowledged. Whichever settles first decides; both are\n\t\t// observed so the loser's later rejection is never an unhandled rejection.\n\t\teventsPromise.catch(() => {});\n\t\taccepted.catch(() => {});\n\t\tawait Promise.race([accepted, eventsPromise]);\n\t\treturn eventsPromise;\n\t}\n\tprivate handleLine(line: string, generation: number): void {\n\t\tif (this.terminalDrain.observe(generation, line, (id) => this.pendingRequests.markAccepted(id))) return;\n\t\tif (this.engineMonitor?.handleLine(line)) return;\n\t\ttry {\n\t\t\tconst data = JSON.parse(line) as { type?: string; id?: string };\n\t\t\tif (data.type === \"extension_ui_request\") {\n\t\t\t\tconst request = data as RpcExtensionUIRequest;\n\t\t\t\tif (this.extensionUIListeners.length === 0) this.pendingExtensionUIRequests.push(generation, request);\n\t\t\t\tfor (const listener of this.extensionUIListeners) listener(request);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (data.type === \"response\" && data.id && this.pendingRequests.resolve(data.id, data as RpcResponse)) return;\n\t\t\tconst event = data as RpcEvent;\n\t\t\tif (this.eventBuffer) this.eventBuffer.enqueue(event);\n\t\t\telse this.emitEvent(event);\n\t\t} catch {\n\t\t\tif (this.engineMonitor) this.failTransport(rpcTransportError(\"Interactive engine emitted malformed JSONL\"));\n\t\t}\n\t}\n\tprivate emitEvent(event: RpcEvent): void {\n\t\t// Iterate a snapshot so listeners that unsubscribe during dispatch do not make later listeners miss this event.\n\t\tfor (const listener of [...this.eventListeners]) listener(event);\n\t}\n\tprivate emitInteractiveEngineMessage(message: InteractiveEngineMessage, generation: number): void {\n\t\tif (\n\t\t\tthis.engineMessageListeners.length === 0 &&\n\t\t\t(message.type.startsWith(\"engine_custom_\") || message.type.startsWith(\"engine_resources_\"))\n\t\t) {\n\t\t\tthis.pendingEngineMessages.push(generation, message);\n\t\t}\n\t\tfor (const listener of this.engineMessageListeners) listener(message);\n\t}\n\tprivate createProcessExitError(code: number | null, signal: NodeJS.Signals | null): Error {\n\t\treturn rpcTransportError(`Agent process exited (code=${code} signal=${signal}). Stderr: ${this.stderr}`);\n\t}\n\tprivate invalidateEngineShortcuts(): void {\n\t\tif (!this.latestEngineKeybindingState || this.latestEngineKeybindingState.shortcuts.length === 0) return;\n\t\tconst state: EngineKeybindingState = { ...this.latestEngineKeybindingState, shortcuts: [] };\n\t\tthis.latestEngineKeybindingState = state;\n\t\tthis.emitInteractiveEngineMessage({ type: \"engine_keybindings_reloaded\", state }, this.generation);\n\t}\n\tprivate observeInteractiveEngineMessage(message: InteractiveEngineMessage, generation: number): void {\n\t\t// Ownership is the one thing a dead generation may still report: request\n\t\t// ids never repeat, and the alternative is classifying work it already\n\t\t// started as never sent. Nothing else from it may touch host state — a\n\t\t// stale frame would revive a PID, an activity, or a mount that is gone.\n\t\tif (message.type === \"engine_request_accepted\") {\n\t\t\tif (generation === this.generation) this.pendingRequests.markAccepted(message.requestId);\n\t\t\treturn;\n\t\t}\n\t\tif (message.type === \"engine_explicit_quit_ack\") {\n\t\t\tif (this.explicitQuitAck?.generation === generation) this.explicitQuitAck.acknowledge();\n\t\t\treturn;\n\t\t}\n\t\tif (generation !== this.generation || generation <= this.lastEndedGeneration) return;\n\t\tif (message.type === \"engine_heartbeat\") this.options.interactiveEngine?.onHeartbeat?.();\n\t\tif (message.type === \"engine_ready\") this.enginePid = message.pid;\n\t\tif (message.type === \"engine_bound\") {\n\t\t\tthis.boundGeneration = generation;\n\t\t\tfor (const frame of this.pendingProjectTrustFrames.drain(generation)) {\n\t\t\t\tif (this.stdinWriter) this.bestEffort(this.stdinWriter.write(frame), \"project trust notification\");\n\t\t\t}\n\t\t}\n\t\tif (message.type === \"engine_keybindings_reloaded\") this.latestEngineKeybindingState = message.state;\n\t\tif (message.type === \"engine_workflow_activity\") this.workflowActivity.apply(message.frame);\n\t\tif (message.type === \"engine_activity_started\") this.activeActivityIds.add(message.activity.id);\n\t\telse if (message.type === \"engine_activity_finished\") this.activeActivityIds.delete(message.activityId);\n\t\tthis.options.interactiveEngine?.onActivityChange?.(this.activeActivityIds.size > 0);\n\t\tthis.emitInteractiveEngineMessage(message, generation);\n\t}\n\t/**\n\t * Shared teardown for every unexpected end of `generation`. Death publishes\n\t * at once for the host UI; its requests wait for stdout (RpcTerminalDrain).\n\t */\n\tprivate failGeneration(rawError: Error, generation: number, kind: InteractiveEngineGenerationEndKind): void {\n\t\tif (generation !== this.generation) return;\n\t\tconst error = markRpcTransportFailure(rawError);\n\t\tthis.exitError = error;\n\t\tthis.stdinWriter?.close(error);\n\t\tthis.engineMonitor?.fail(error);\n\t\tif (kind === \"exit\") {\n\t\t\tthis.activeActivityIds.clear();\n\t\t\tthis.options.interactiveEngine?.onActivityChange?.(false);\n\t\t}\n\t\tthis.beginTerminalDrain(generation, error);\n\t\tthis.publishGenerationEnded(generation, error, kind, false);\n\t}\n\t/** Hold this generation's requests until its stdout drains (RpcTerminalDrain). */\n\tprivate beginTerminalDrain(generation: number, error: Error): Promise<void> {\n\t\treturn this.terminalDrain.begin(generation, this.stdoutDrained, error, (settled) => {\n\t\t\tif (generation === this.generation) this.pendingRequests.rejectAll(settled);\n\t\t});\n\t}\n\tprivate publishGenerationEnded(\n\t\tgeneration: number,\n\t\terror: Error,\n\t\tkind: InteractiveEngineGenerationEndKind,\n\t\texpected: boolean,\n\t): void {\n\t\tif (generation <= this.lastEndedGeneration) return;\n\t\tthis.lastEndedGeneration = generation;\n\t\tconst event: InteractiveEngineGenerationEnded = { generation, error, kind, expected };\n\t\tthis.retainedGenerationEnd = event;\n\t\t// Death is a strict boundary: drop this generation's buffered frames\n\t\t// BEFORE teardown runs, so no listener can drain a stale mount frame\n\t\t// while it is closing that very generation's components.\n\t\tthis.pendingEngineMessages.dropGeneration(generation);\n\t\tthis.workflowActivity.reset();\n\t\tthis.pendingExtensionUIRequests.dropGeneration(generation);\n\t\tthis.pendingProjectTrustFrames.dropGeneration(generation);\n\t\tfor (const listener of [...this.generationEndedListeners]) listener(event);\n\t}\n\tprivate failTransport(rawError: Error): void {\n\t\tthis.options.interactiveEngine?.onDiagnostic({\n\t\t\tactivity: undefined,\n\t\t\telapsedMs: 0,\n\t\t\tlevel: \"unresponsive\",\n\t\t\tmessage: rawError.message,\n\t\t});\n\t\tthis.failGeneration(rawError, this.generation, \"transport-error\");\n\t}\n\tprivate requireWriter(): QueuedWriter {\n\t\tif (!this.stdinWriter) throw rpcTransportError(\"Agent process stdin is not writable\");\n\t\treturn this.stdinWriter;\n\t}\n\tprivate bestEffort(operation: Promise<void>, label: string): void {\n\t\tvoid operation.catch((error: Error) => {\n\t\t\tif (!this.process || this.exitError) return;\n\t\t\tthis.options.interactiveEngine?.onDiagnostic({\n\t\t\t\tactivity: undefined,\n\t\t\t\telapsedMs: 0,\n\t\t\t\tlevel: \"unresponsive\",\n\t\t\t\tmessage: `Interactive engine ${label} failed: ${error.message}`,\n\t\t\t});\n\t\t});\n\t}\n\tprotected async request(command: RpcCommandBody, onRequestId?: (id: string) => void): Promise<RpcResponse> {\n\t\tconst childProcess = this.process;\n\t\tif (!childProcess) throw rpcTransportError(\"Client not started\");\n\t\tif (this.exitError) throw this.exitError;\n\t\tif (childProcess.exitCode !== null) {\n\t\t\tconst error = this.createProcessExitError(childProcess.exitCode, childProcess.signalCode);\n\t\t\tthis.exitError = error;\n\t\t\tthrow error;\n\t\t}\n\t\tconst id = `req_${++this.requestId}`;\n\t\tonRequestId?.(id);\n\t\tconst fullCommand = { ...command, id } as RpcCommand;\n\t\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\t\tlet rejectResponse!: (error: Error) => void;\n\t\tconst response = new Promise<RpcResponse>((resolve, reject) => {\n\t\t\trejectResponse = reject;\n\t\t\tthis.pendingRequests.add(id, {\n\t\t\t\tresolve: (value) => {\n\t\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\t\tresolve(value);\n\t\t\t\t},\n\t\t\t\treject: (error) => {\n\t\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\t\treject(error);\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t\ttry {\n\t\t\tawait this.requireWriter().write(serializeJsonLine(fullCommand));\n\t\t} catch (error) {\n\t\t\tthis.pendingRequests.delete(id);\n\t\t\t// Idempotent: the writer already classified this, but a caller-supplied\n\t\t\t// stream can reject with anything, and a send that never left the host\n\t\t\t// is a transport failure whatever it threw.\n\t\t\trejectResponse(markRpcTransportFailure(error));\n\t\t\treturn response;\n\t\t}\n\t\tif (this.pendingRequests.has(id) && !LONG_LIVED_COMMANDS.has(command.type)) {\n\t\t\ttimeout = setTimeout(() => {\n\t\t\t\tthis.pendingRequests.delete(id);\n\t\t\t\trejectResponse(new Error(`Timeout waiting for response to ${command.type}. Stderr: ${this.stderr}`));\n\t\t\t}, this.options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS);\n\t\t}\n\t\treturn response;\n\t}\n\tprivate assertSuccess(response: RpcResponse): void {\n\t\tif (response.success) return;\n\t\tif (response.errorCode === \"credential_synchronization\" && response.errorDetails) {\n\t\t\tthrow new CredentialSynchronizationError(\n\t\t\t\tresponse.errorDetails.providerId,\n\t\t\t\tresponse.errorDetails.operation,\n\t\t\t\tundefined,\n\t\t\t\t{ cause: new Error(response.error) },\n\t\t\t);\n\t\t}\n\t\tthrow new Error(response.error);\n\t}\n\tprotected data<T>(response: RpcResponse): T {\n\t\tthis.assertSuccess(response);\n\t\tconst successResponse = response as Extract<RpcResponse, { success: true; data: unknown }>;\n\t\treturn successResponse.data as T;\n\t}\n}\n"]}
1
+ {"version":3,"file":"rpc-client.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-client.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChildProcess } from \"node:child_process\";\nimport type { ImageContent } from \"@bastani/pi-ai/compat\";\nimport type { BashResult } from \"../../core/bash-executor.ts\";\nimport type { WorkflowActivityFrame } from \"../../core/extensions/workflow-events.js\";\nimport { CredentialSynchronizationError } from \"../../core/model-runtime.js\";\nimport type { BashOutputChannel } from \"../../core/tools/bash.js\";\nimport { sleep } from \"../../utils/sleep.ts\";\nimport type { ActivityWatchdogDiagnostic } from \"../interactive-engine/activity-watchdog.ts\";\nimport type {\n\tInteractiveEngineGenerationEnded,\n\tInteractiveEngineGenerationEndedListener,\n\tInteractiveEngineGenerationEndKind,\n} from \"../interactive-engine/engine-generation.ts\";\nimport { InteractiveEngineMonitor } from \"../interactive-engine/engine-monitor.ts\";\nimport { WorkflowActivityMirror } from \"../interactive-engine/engine-workflow-activity.ts\";\nimport {\n\ttype EngineKeybindingState,\n\ttype InteractiveEngineCommand,\n\ttype InteractiveEngineMessage,\n\tserializeInteractiveEngineFrame,\n} from \"../interactive-engine/protocol.ts\";\nimport { attachJsonlLineReader, serializeJsonLine } from \"./jsonl.ts\";\nimport { QueuedWriter } from \"./queued-writer.ts\";\nimport { RpcClientApi, type RpcCommandBody } from \"./rpc-client-api.ts\";\nimport {\n\tappendBoundedStderr,\n\tcreateInteractiveJsonlOptions,\n\tcreateStderrReporter,\n\trestartCliArgs,\n\tspawnRpcClientProcess,\n\tterminateRpcClientProcess,\n} from \"./rpc-client-process.js\";\nimport { collectRpcEvents, runUserBashWithUpdates, waitForRpcIdle } from \"./rpc-client-waits.ts\";\nimport { DEFAULT_REQUEST_TIMEOUT_MS, LONG_LIVED_COMMANDS, RESTART_CANCELLED_MESSAGE } from \"./rpc-command-timeouts.ts\";\nimport { RpcEventBuffer } from \"./rpc-event-buffer.ts\";\nimport { GenerationBuffer } from \"./rpc-generation-buffer.ts\";\nimport { RpcPendingRequests } from \"./rpc-pending-requests.ts\";\nimport { RpcTerminalDrain } from \"./rpc-terminal-drain.ts\";\nimport { markRpcTransportFailure, rpcTransportError } from \"./rpc-transport-error.ts\";\nimport type { RpcCommand, RpcEvent, RpcExtensionUIRequest, RpcExtensionUIResponse, RpcResponse } from \"./rpc-types.ts\";\n\nexport type { ModelInfo, RpcCommandBody } from \"./rpc-client-api.ts\";\nexport type { RpcEvent } from \"./rpc-types.ts\";\n\nexport interface RpcClientOptions {\n\tcliPath?: string;\n\tcwd?: string;\n\tenv?: Record<string, string>;\n\tprovider?: string;\n\tmodel?: string;\n\targs?: string[];\n\truntimeExecutable?: string;\n\truntimeArgs?: string[];\n\t/**\n\t * Bounded deadline (ms) applied to short metadata/control requests. Long-lived\n\t * commands (see LONG_LIVED_COMMANDS) never use this timer. Defaults to 30s.\n\t */\n\trequestTimeoutMs?: number;\n\tinteractiveEngine?: {\n\t\tonDiagnostic: (diagnostic: ActivityWatchdogDiagnostic) => void;\n\t\tonActivityChange?: (active: boolean) => void;\n\t\t/**\n\t\t * Heartbeat observer. Deliberately NOT a generic engine-message listener:\n\t\t * subscribing there drains the buffered startup custom-UI messages into the\n\t\t * first subscriber and stops buffering for the real controllers.\n\t\t */\n\t\tonHeartbeat?: () => void;\n\t\t/**\n\t\t * Credential for the engine child. Delivered through the protected\n\t\t * bootstrap file, never through the child's environment or argv.\n\t\t */\n\t\tapiKey?: string;\n\t};\n}\n\nexport type RpcEventListener = (event: RpcEvent) => void;\n\n/** Longest an explicit quit waits for the child to acknowledge it before stopping an unresponsive engine anyway. */\nconst EXPLICIT_QUIT_ACK_TIMEOUT_MS = 1000;\n\nexport class RpcClient extends RpcClientApi {\n\tprivate process: ChildProcess | null = null;\n\tprivate stopReadingStdout: (() => void) | null = null;\n\tprivate eventListeners: RpcEventListener[] = [];\n\tprivate extensionUIListeners: Array<(request: RpcExtensionUIRequest) => void> = [];\n\tprivate readonly pendingExtensionUIRequests = new GenerationBuffer<RpcExtensionUIRequest>();\n\tprivate engineMessageListeners: Array<(message: InteractiveEngineMessage) => void> = [];\n\tprivate latestEngineKeybindingState: EngineKeybindingState | undefined;\n\tprivate readonly workflowActivity = new WorkflowActivityMirror();\n\tprivate readonly pendingEngineMessages = new GenerationBuffer<InteractiveEngineMessage>();\n\tprivate readonly pendingProjectTrustFrames = new GenerationBuffer<string>();\n\tprivate boundGeneration = 0;\n\tprivate explicitQuitAck: { generation: number; acknowledge: () => void } | undefined;\n\tprivate readonly pendingRequests = new RpcPendingRequests();\n\t/** Bumped by every explicit stop; a restart holds a permit across its own stop. */\n\tprivate restartRevision = 0;\n\tprivate stopPromise: Promise<void> | undefined;\n\tprivate readonly terminalDrain = new RpcTerminalDrain();\n\tprivate stdoutDrained: Promise<void> = Promise.resolve();\n\tprivate requestId = 0;\n\tprivate stderr = \"\";\n\tprivate exitError: Error | null = null;\n\tprivate engineMonitor: InteractiveEngineMonitor | undefined;\n\tprivate eventBuffer: RpcEventBuffer | undefined;\n\tprivate stdinWriter: QueuedWriter | undefined;\n\tprivate generation = 0;\n\tprivate lastEndedGeneration = 0;\n\tprivate generationEndedListeners: InteractiveEngineGenerationEndedListener[] = [];\n\t/**\n\t * The latest generation-end event, retained so a subscriber that attaches\n\t * after the child died still observes it. A child can exit between\n\t * `start()` returning and the runtime constructing its listeners.\n\t */\n\tprivate retainedGenerationEnd: InteractiveEngineGenerationEnded | undefined;\n\tprivate readonly activeActivityIds = new Set<string>();\n\tprivate enginePid: number | undefined;\n\n\tprivate declare options: RpcClientOptions;\n\n\tconstructor(options: RpcClientOptions = {}) {\n\t\tsuper();\n\t\tthis.options = options;\n\t}\n\n\tasync start(): Promise<void> {\n\t\tif (this.process) {\n\t\t\tthrow new Error(\"Client already started\");\n\t\t}\n\n\t\tconst cliPath = this.options.cliPath ?? \"dist/cli.js\";\n\t\tconst args = [\"--mode\", \"rpc\"];\n\n\t\tif (this.options.provider) {\n\t\t\targs.push(\"--provider\", this.options.provider);\n\t\t}\n\t\tif (this.options.model) {\n\t\t\targs.push(\"--model\", this.options.model);\n\t\t}\n\t\tif (this.options.args) {\n\t\t\targs.push(...this.options.args);\n\t\t}\n\n\t\tconst generation = ++this.generation;\n\t\tthis.exitError = null;\n\t\tthis.stderr = \"\";\n\t\tthis.activeActivityIds.clear();\n\t\tthis.enginePid = undefined;\n\t\tthis.engineMonitor = this.options.interactiveEngine\n\t\t\t? new InteractiveEngineMonitor(this.options.interactiveEngine.onDiagnostic, (message) =>\n\t\t\t\t\tthis.observeInteractiveEngineMessage(message, generation),\n\t\t\t\t)\n\t\t\t: undefined;\n\t\tthis.eventBuffer = this.engineMonitor ? new RpcEventBuffer((event) => this.emitEvent(event)) : undefined;\n\t\tconst childProcess = spawnRpcClientProcess({\n\t\t\tcliPath,\n\t\t\tcliArgs: args,\n\t\t\tcwd: this.options.cwd,\n\t\t\tenv: this.options.env,\n\t\t\truntimeExecutable: this.options.runtimeExecutable,\n\t\t\truntimeArgs: this.options.runtimeArgs,\n\t\t\tinteractiveEngine: this.engineMonitor !== undefined,\n\t\t\t...(this.options.interactiveEngine?.apiKey\n\t\t\t\t? { interactiveEngineApiKey: this.options.interactiveEngine.apiKey }\n\t\t\t\t: {}),\n\t\t});\n\t\tthis.process = childProcess;\n\t\tthis.stdinWriter = new QueuedWriter(childProcess.stdin!);\n\n\t\tchildProcess.once(\"exit\", (code, signal) =>\n\t\t\tthis.failGeneration(this.createProcessExitError(code, signal), generation, \"exit\"),\n\t\t);\n\t\tchildProcess.once(\"error\", (rawError) => this.failGeneration(rawError, generation, \"process-error\"));\n\t\tchildProcess.stdin?.on(\"error\", (rawError) => this.failGeneration(rawError, generation, \"stdin-error\"));\n\t\tconst reportStderr = createStderrReporter((message) => {\n\t\t\tif (generation !== this.generation) return;\n\t\t\tif (this.options.interactiveEngine) {\n\t\t\t\tthis.options.interactiveEngine.onDiagnostic({\n\t\t\t\t\tactivity: undefined,\n\t\t\t\t\telapsedMs: 0,\n\t\t\t\t\tlevel: \"blocking\",\n\t\t\t\t\tsource: \"stderr\",\n\t\t\t\t\tmessage,\n\t\t\t\t});\n\t\t\t} else console.log(message);\n\t\t});\n\t\t// Decode continuously per child, including split code points and the final incomplete sequence at EOF.\n\t\tchildProcess.stderr?.setEncoding(\"utf8\");\n\t\tchildProcess.stderr?.on(\"data\", (data: string) => {\n\t\t\tif (generation !== this.generation) return;\n\t\t\tthis.stderr = appendBoundedStderr(this.stderr, data);\n\t\t\treportStderr(data);\n\t\t});\n\t\tconst readerOptions = createInteractiveJsonlOptions(this.engineMonitor !== undefined);\n\t\tlet markStdoutDrained!: () => void;\n\t\tthis.stdoutDrained = new Promise<void>((resolve) => {\n\t\t\tmarkStdoutDrained = resolve;\n\t\t});\n\t\tthis.stopReadingStdout = attachJsonlLineReader(\n\t\t\tchildProcess.stdout!,\n\t\t\t(line) => {\n\t\t\t\tif (generation === this.generation) this.handleLine(line, generation);\n\t\t\t},\n\t\t\t{ ...readerOptions, onDrained: () => markStdoutDrained() },\n\t\t);\n\t\tif (this.engineMonitor) await this.engineMonitor.waitUntilReady();\n\t\telse await sleep(100);\n\n\t\tif (generation !== this.generation || this.process?.exitCode !== null) {\n\t\t\tthrow rpcTransportError(`Agent process exited immediately. Stderr: ${this.stderr}`);\n\t\t}\n\t}\n\n\t/**\n\t * Tell the engine child the host is quitting on purpose, and wait (bounded) for it to\n\t * record that. Call it before `stop()` for a quit the user asked for: stopping closes\n\t * stdin and sends SIGTERM, which is also how the child is stopped when the host itself\n\t * was signalled, so only this announcement lets the child tell the two apart.\n\t * Resolves true only when the child acknowledged the quit, and false without waiting when\n\t * there is no live engine child, or when the child exits or misses the deadline first.\n\t */\n\tasync announceExplicitQuit(timeoutMs = EXPLICIT_QUIT_ACK_TIMEOUT_MS): Promise<boolean> {\n\t\tconst writer = this.stdinWriter;\n\t\tif (!writer || !this.engineMonitor || this.generation <= this.lastEndedGeneration) return false;\n\t\tconst generation = this.generation;\n\t\tconst done = Promise.withResolvers<boolean>();\n\t\tthis.explicitQuitAck = { generation, acknowledge: () => done.resolve(true) };\n\t\tconst stopListening = this.onGenerationEnded((event) => {\n\t\t\tif (event.generation === generation) done.resolve(false);\n\t\t});\n\t\tconst timer = setTimeout(() => done.resolve(false), timeoutMs);\n\t\ttry {\n\t\t\tthis.bestEffort(\n\t\t\t\twriter.write(serializeInteractiveEngineFrame({ type: \"engine_explicit_quit\" })),\n\t\t\t\t\"explicit quit\",\n\t\t\t);\n\t\t\treturn await done.promise;\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t\tstopListening();\n\t\t\tif (this.explicitQuitAck?.generation === generation) this.explicitQuitAck = undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Explicit stop. Voids any in-flight restart permit, so a replacement caught\n\t * between its own stop and start can never spawn after this returns.\n\t */\n\tstop(): Promise<void> {\n\t\tthis.restartRevision += 1;\n\t\tif (this.stopPromise) return this.stopPromise;\n\t\tif (!this.process) return Promise.resolve();\n\t\tconst stopPromise = this.stopCurrentGeneration().finally(() => {\n\t\t\tif (this.stopPromise === stopPromise) this.stopPromise = undefined;\n\t\t});\n\t\tthis.stopPromise = stopPromise;\n\t\treturn stopPromise;\n\t}\n\n\t/**\n\t * Tear down the current child without touching the restart permit. The reader\n\t * stays attached and the generation stays current until the dead child's\n\t * stdout settles, so an ownership frame it already sent still reaches its\n\t * request; only then is the generation retired (see RpcTerminalDrain).\n\t */\n\tprivate async stopCurrentGeneration(): Promise<void> {\n\t\tconst child = this.process;\n\t\tif (!child) return;\n\t\tconst endedGeneration = this.generation;\n\t\tconst stopError = rpcTransportError(\"Agent process stopped\");\n\t\tthis.invalidateEngineShortcuts();\n\t\tconst terminateTree = this.engineMonitor !== undefined;\n\t\tthis.engineMonitor?.stop();\n\t\tthis.stdinWriter?.close(stopError);\n\t\t// Unblock an in-flight start()/waitUntilBound() for the generation being\n\t\t// replaced. Readiness has no deadline by design, so without this an\n\t\t// explicit stop of a hung replacement child could never be observed.\n\t\tthis.engineMonitor?.fail(stopError);\n\t\tthis.engineMonitor = undefined;\n\t\tthis.stdinWriter = undefined;\n\t\tthis.process = null;\n\t\t// Publish before terminating so host controllers tear down this generation's\n\t\t// UI while the writer is detached: disposal cannot write into a replacement.\n\t\tthis.publishGenerationEnded(endedGeneration, stopError, \"explicit-stop\", true);\n\t\t// Claim before terminating so the exit this provokes does not relabel a\n\t\t// deliberate stop; an exit that already claimed keeps its own error.\n\t\tthis.terminalDrain.claim(endedGeneration, stopError);\n\t\tawait terminateRpcClientProcess(child, terminateTree);\n\t\tawait this.beginTerminalDrain(endedGeneration, stopError);\n\t\tthis.stopReadingStdout?.();\n\t\tthis.stopReadingStdout = null;\n\t\tthis.generation += 1;\n\t\tthis.pendingRequests.rejectAll(stopError);\n\t\tthis.eventBuffer?.dispose();\n\t\tthis.eventBuffer = undefined;\n\t\tthis.activeActivityIds.clear();\n\t\tthis.options.interactiveEngine?.onActivityChange?.(false);\n\t}\n\n\t/** Subscribe to agent events. */\n\tonEvent(listener: RpcEventListener): () => void {\n\t\tthis.eventListeners.push(listener);\n\t\treturn () => {\n\t\t\tconst index = this.eventListeners.indexOf(listener);\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.eventListeners.splice(index, 1);\n\t\t\t}\n\t\t};\n\t}\n\n\tonExtensionUIRequest(listener: (request: RpcExtensionUIRequest) => void): () => void {\n\t\tthis.extensionUIListeners.push(listener);\n\t\tfor (const request of this.pendingExtensionUIRequests.drain(this.generation)) listener(request);\n\t\treturn () => {\n\t\t\tconst index = this.extensionUIListeners.indexOf(listener);\n\t\t\tif (index !== -1) this.extensionUIListeners.splice(index, 1);\n\t\t};\n\t}\n\n\tasync respondExtensionUI(response: RpcExtensionUIResponse): Promise<void> {\n\t\tawait this.requireWriter().write(serializeJsonLine(response));\n\t}\n\n\tonInteractiveEngineMessage(listener: (message: InteractiveEngineMessage) => void): () => void {\n\t\tthis.engineMessageListeners.push(listener);\n\t\tfor (const message of this.pendingEngineMessages.drain(this.generation)) listener(message);\n\t\treturn () => {\n\t\t\tconst index = this.engineMessageListeners.indexOf(listener);\n\t\t\tif (index !== -1) this.engineMessageListeners.splice(index, 1);\n\t\t};\n\t}\n\n\tonInteractiveEngineKeybindingState(listener: (state: EngineKeybindingState) => void): () => void {\n\t\tconst messageListener = (message: InteractiveEngineMessage): void => {\n\t\t\tif (message.type === \"engine_keybindings_reloaded\") listener(message.state);\n\t\t};\n\t\tthis.engineMessageListeners.push(messageListener);\n\t\tif (this.latestEngineKeybindingState) listener(this.latestEngineKeybindingState);\n\t\treturn () => {\n\t\t\tconst index = this.engineMessageListeners.indexOf(messageListener);\n\t\t\tif (index !== -1) this.engineMessageListeners.splice(index, 1);\n\t\t};\n\t}\n\n\t/**\n\t * Subscribe to the engine's workflow activity. The engine publishes its snapshot as soon as it binds,\n\t * so an observer that attaches later starts from the current snapshot instead of missing it.\n\t */\n\tonInteractiveEngineWorkflowActivity(listener: (frame: WorkflowActivityFrame) => void): () => void {\n\t\tconst messageListener = (message: InteractiveEngineMessage): void => {\n\t\t\tif (message.type === \"engine_workflow_activity\") listener(message.frame);\n\t\t};\n\t\tthis.engineMessageListeners.push(messageListener);\n\t\tconst current = this.workflowActivity.current();\n\t\tif (current) listener(current);\n\t\treturn () => {\n\t\t\tconst index = this.engineMessageListeners.indexOf(messageListener);\n\t\t\tif (index !== -1) this.engineMessageListeners.splice(index, 1);\n\t\t};\n\t}\n\n\t/**\n\t * Subscribe to host-local generation death. Fires at most once per\n\t * generation, synchronously, before any restart work. A death that has\n\t * already happened for the current generation replays immediately, so a\n\t * listener attached after an exit still sees it.\n\t */\n\tonGenerationEnded(listener: InteractiveEngineGenerationEndedListener): () => void {\n\t\tthis.generationEndedListeners.push(listener);\n\t\tconst retained = this.retainedGenerationEnd;\n\t\t// Only while it still describes the live generation: once stop()/start()\n\t\t// has moved on, that death belongs to a replaced child.\n\t\tif (retained && retained.generation === this.generation) listener(retained);\n\t\treturn () => {\n\t\t\tconst index = this.generationEndedListeners.indexOf(listener);\n\t\t\tif (index !== -1) this.generationEndedListeners.splice(index, 1);\n\t\t};\n\t}\n\n\tsendInteractiveEngineCommand(command: InteractiveEngineCommand): void {\n\t\tconst writer = this.stdinWriter;\n\t\tif (command.type === \"engine_project_trust_start\" || command.type === \"engine_project_trust_end\") {\n\t\t\tif (this.generation <= this.lastEndedGeneration) return;\n\t\t\t// The terminal can open and close /trust while the engine is still binding.\n\t\t\t// Retain both frames, without delaying the host-owned decision.\n\t\t\tif (this.engineMonitor && this.boundGeneration !== this.generation) {\n\t\t\t\tthis.pendingProjectTrustFrames.push(this.generation, serializeInteractiveEngineFrame(command));\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (!writer) return;\n\t\tconst frame = serializeInteractiveEngineFrame(command);\n\t\tif (\n\t\t\tcommand.type === \"engine_custom_render\" ||\n\t\t\tcommand.type === \"engine_tool_render\" ||\n\t\t\tcommand.type === \"engine_message_render\"\n\t\t) {\n\t\t\twriter.offerLatest(`render:${command.componentId}`, frame);\n\t\t\treturn;\n\t\t}\n\t\t// Disposal goes through the ordered queue, ahead of coalesced renders: a render still waiting for a row\n\t\t// being disposed would reach the engine after its disposal and bring its renderer back.\n\t\tif (command.type === \"engine_render_dispose\" || command.type === \"engine_custom_dispose\")\n\t\t\twriter.discardLatest(`render:${command.componentId}`);\n\t\tthis.bestEffort(writer.write(frame), `engine command ${command.type}`);\n\t}\n\twaitForInteractiveEngineBound(): Promise<void> {\n\t\treturn this.engineMonitor?.waitUntilBound() ?? Promise.resolve();\n\t}\n\twaitForInteractiveEngineProjectTrust(): Promise<void> {\n\t\treturn this.engineMonitor?.waitUntilProjectTrustSettled() ?? Promise.resolve();\n\t}\n\twaitForInteractiveEngineResources(): Promise<void> {\n\t\treturn this.engineMonitor?.waitUntilResourcesReady() ?? Promise.resolve();\n\t}\n\tgetEnginePid(): number | undefined {\n\t\treturn this.enginePid;\n\t}\n\tgetGeneration(): number {\n\t\treturn this.generation;\n\t}\n\n\t/**\n\t * Replace the engine child, unless an explicit stop supersedes this attempt.\n\t * The permit is checked immediately before spawning, so a `stop()` in that\n\t * window is always observed; cancellation throws rather than returning\n\t * quietly, because callers go on to initialize against the new child.\n\t */\n\tasync restart(sessionId: string | undefined, options?: { sessionDirectory?: string; cwd?: string }): Promise<void> {\n\t\tconst permit = this.restartRevision;\n\t\tawait this.stopCurrentGeneration();\n\t\t// Join an in-flight stop before the permit check: waiting after it would\n\t\t// reopen the window this fence exists to close.\n\t\tif (this.stopPromise) await this.stopPromise;\n\t\tif (permit !== this.restartRevision) throw rpcTransportError(RESTART_CANCELLED_MESSAGE);\n\t\tthis.options = {\n\t\t\t...this.options,\n\t\t\tcwd: options?.cwd ?? this.options.cwd,\n\t\t\targs: restartCliArgs(this.options.args, sessionId, options?.sessionDirectory),\n\t\t};\n\t\tawait this.start();\n\t\tawait this.waitForInteractiveEngineBound();\n\t}\n\n\tasync requestInternal<T>(command: RpcCommandBody): Promise<T> {\n\t\treturn this.data<T>(await this.request(command));\n\t}\n\tuserBashWithUpdates(\n\t\tcommand: string,\n\t\tonUpdate: (delta: string, channel: BashOutputChannel) => void,\n\t\toptions?: { excludeFromContext?: boolean; onRequestId?: (id: string) => void },\n\t): Promise<BashResult> {\n\t\treturn runUserBashWithUpdates(this, command, onUpdate, options, (body, onId) => this.request(body, onId));\n\t}\n\tgetStderr(): string {\n\t\treturn this.stderr;\n\t}\n\n\twaitForIdle(timeout = 60000): Promise<void> {\n\t\treturn waitForRpcIdle(this, timeout);\n\t}\n\tcollectEvents(timeout = 60000): Promise<RpcEvent[]> {\n\t\treturn collectRpcEvents(this, timeout);\n\t}\n\tasync promptAndWait(message: string, images?: ImageContent[], timeout = 60000): Promise<RpcEvent[]> {\n\t\tconst eventsPromise = this.collectEvents(timeout);\n\t\tconst accepted = this.prompt(message, images);\n\t\t// A prompt has no request deadline, so `timeout` must also end the wait while\n\t\t// the prompt is still unacknowledged. Whichever settles first decides; both are\n\t\t// observed so the loser's later rejection is never an unhandled rejection.\n\t\teventsPromise.catch(() => {});\n\t\taccepted.catch(() => {});\n\t\tawait Promise.race([accepted, eventsPromise]);\n\t\treturn eventsPromise;\n\t}\n\tprivate handleLine(line: string, generation: number): void {\n\t\tif (this.terminalDrain.observe(generation, line, (id) => this.pendingRequests.markAccepted(id))) return;\n\t\tif (this.engineMonitor?.handleLine(line)) return;\n\t\ttry {\n\t\t\tconst data = JSON.parse(line) as { type?: string; id?: string };\n\t\t\tif (data.type === \"extension_ui_request\") {\n\t\t\t\tconst request = data as RpcExtensionUIRequest;\n\t\t\t\tif (this.extensionUIListeners.length === 0) this.pendingExtensionUIRequests.push(generation, request);\n\t\t\t\tfor (const listener of this.extensionUIListeners) listener(request);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (data.type === \"response\" && data.id && this.pendingRequests.resolve(data.id, data as RpcResponse)) return;\n\t\t\tconst event = data as RpcEvent;\n\t\t\tif (this.eventBuffer) this.eventBuffer.enqueue(event);\n\t\t\telse this.emitEvent(event);\n\t\t} catch {\n\t\t\tif (this.engineMonitor) this.failTransport(rpcTransportError(\"Interactive engine emitted malformed JSONL\"));\n\t\t}\n\t}\n\tprivate emitEvent(event: RpcEvent): void {\n\t\t// Iterate a snapshot so listeners that unsubscribe during dispatch do not make later listeners miss this event.\n\t\tfor (const listener of [...this.eventListeners]) listener(event);\n\t}\n\tprivate emitInteractiveEngineMessage(message: InteractiveEngineMessage, generation: number): void {\n\t\tif (\n\t\t\tthis.engineMessageListeners.length === 0 &&\n\t\t\t(message.type.startsWith(\"engine_custom_\") || message.type.startsWith(\"engine_resources_\"))\n\t\t) {\n\t\t\tthis.pendingEngineMessages.push(generation, message);\n\t\t}\n\t\tfor (const listener of this.engineMessageListeners) listener(message);\n\t}\n\tprivate createProcessExitError(code: number | null, signal: NodeJS.Signals | null): Error {\n\t\treturn rpcTransportError(`Agent process exited (code=${code} signal=${signal}). Stderr: ${this.stderr}`);\n\t}\n\tprivate invalidateEngineShortcuts(): void {\n\t\tif (!this.latestEngineKeybindingState || this.latestEngineKeybindingState.shortcuts.length === 0) return;\n\t\tconst state: EngineKeybindingState = { ...this.latestEngineKeybindingState, shortcuts: [] };\n\t\tthis.latestEngineKeybindingState = state;\n\t\tthis.emitInteractiveEngineMessage({ type: \"engine_keybindings_reloaded\", state }, this.generation);\n\t}\n\tprivate observeInteractiveEngineMessage(message: InteractiveEngineMessage, generation: number): void {\n\t\t// Ownership is the one thing a dead generation may still report: request\n\t\t// ids never repeat, and the alternative is classifying work it already\n\t\t// started as never sent. Nothing else from it may touch host state — a\n\t\t// stale frame would revive a PID, an activity, or a mount that is gone.\n\t\tif (message.type === \"engine_request_accepted\") {\n\t\t\tif (generation === this.generation) this.pendingRequests.markAccepted(message.requestId);\n\t\t\treturn;\n\t\t}\n\t\tif (message.type === \"engine_explicit_quit_ack\") {\n\t\t\tif (this.explicitQuitAck?.generation === generation) this.explicitQuitAck.acknowledge();\n\t\t\treturn;\n\t\t}\n\t\tif (generation !== this.generation || generation <= this.lastEndedGeneration) return;\n\t\tif (message.type === \"engine_heartbeat\") this.options.interactiveEngine?.onHeartbeat?.();\n\t\tif (message.type === \"engine_ready\") this.enginePid = message.pid;\n\t\tif (message.type === \"engine_bound\") {\n\t\t\tthis.boundGeneration = generation;\n\t\t\tfor (const frame of this.pendingProjectTrustFrames.drain(generation)) {\n\t\t\t\tif (this.stdinWriter) this.bestEffort(this.stdinWriter.write(frame), \"project trust notification\");\n\t\t\t}\n\t\t}\n\t\tif (message.type === \"engine_keybindings_reloaded\") this.latestEngineKeybindingState = message.state;\n\t\tif (message.type === \"engine_workflow_activity\") this.workflowActivity.apply(message.frame);\n\t\tif (message.type === \"engine_activity_started\") this.activeActivityIds.add(message.activity.id);\n\t\telse if (message.type === \"engine_activity_finished\") this.activeActivityIds.delete(message.activityId);\n\t\tthis.options.interactiveEngine?.onActivityChange?.(this.activeActivityIds.size > 0);\n\t\tthis.emitInteractiveEngineMessage(message, generation);\n\t}\n\t/**\n\t * Shared teardown for every unexpected end of `generation`. Death publishes\n\t * at once for the host UI; its requests wait for stdout (RpcTerminalDrain).\n\t */\n\tprivate failGeneration(rawError: Error, generation: number, kind: InteractiveEngineGenerationEndKind): void {\n\t\tif (generation !== this.generation) return;\n\t\tconst error = markRpcTransportFailure(rawError);\n\t\tthis.exitError = error;\n\t\tthis.stdinWriter?.close(error);\n\t\tthis.engineMonitor?.fail(error);\n\t\tif (kind === \"exit\") {\n\t\t\tthis.activeActivityIds.clear();\n\t\t\tthis.options.interactiveEngine?.onActivityChange?.(false);\n\t\t}\n\t\tthis.beginTerminalDrain(generation, error);\n\t\tthis.publishGenerationEnded(generation, error, kind, false);\n\t}\n\t/** Hold this generation's requests until its stdout drains (RpcTerminalDrain). */\n\tprivate beginTerminalDrain(generation: number, error: Error): Promise<void> {\n\t\treturn this.terminalDrain.begin(generation, this.stdoutDrained, error, (settled) => {\n\t\t\tif (generation === this.generation) this.pendingRequests.rejectAll(settled);\n\t\t});\n\t}\n\tprivate publishGenerationEnded(\n\t\tgeneration: number,\n\t\terror: Error,\n\t\tkind: InteractiveEngineGenerationEndKind,\n\t\texpected: boolean,\n\t): void {\n\t\tif (generation <= this.lastEndedGeneration) return;\n\t\tthis.lastEndedGeneration = generation;\n\t\tconst event: InteractiveEngineGenerationEnded = { generation, error, kind, expected };\n\t\tthis.retainedGenerationEnd = event;\n\t\t// Death is a strict boundary: drop this generation's buffered frames\n\t\t// BEFORE teardown runs, so no listener can drain a stale mount frame\n\t\t// while it is closing that very generation's components.\n\t\tthis.pendingEngineMessages.dropGeneration(generation);\n\t\tthis.workflowActivity.reset();\n\t\tthis.pendingExtensionUIRequests.dropGeneration(generation);\n\t\tthis.pendingProjectTrustFrames.dropGeneration(generation);\n\t\tfor (const listener of [...this.generationEndedListeners]) listener(event);\n\t}\n\tprivate failTransport(rawError: Error): void {\n\t\tthis.options.interactiveEngine?.onDiagnostic({\n\t\t\tactivity: undefined,\n\t\t\telapsedMs: 0,\n\t\t\tlevel: \"unresponsive\",\n\t\t\tmessage: rawError.message,\n\t\t});\n\t\tthis.failGeneration(rawError, this.generation, \"transport-error\");\n\t}\n\tprivate requireWriter(): QueuedWriter {\n\t\tif (!this.stdinWriter) throw rpcTransportError(\"Agent process stdin is not writable\");\n\t\treturn this.stdinWriter;\n\t}\n\tprivate bestEffort(operation: Promise<void>, label: string): void {\n\t\tvoid operation.catch((error: Error) => {\n\t\t\tif (!this.process || this.exitError) return;\n\t\t\tthis.options.interactiveEngine?.onDiagnostic({\n\t\t\t\tactivity: undefined,\n\t\t\t\telapsedMs: 0,\n\t\t\t\tlevel: \"unresponsive\",\n\t\t\t\tmessage: `Interactive engine ${label} failed: ${error.message}`,\n\t\t\t});\n\t\t});\n\t}\n\tprotected async request(command: RpcCommandBody, onRequestId?: (id: string) => void): Promise<RpcResponse> {\n\t\tconst childProcess = this.process;\n\t\tif (!childProcess) throw rpcTransportError(\"Client not started\");\n\t\tif (this.exitError) throw this.exitError;\n\t\tif (childProcess.exitCode !== null) {\n\t\t\tconst error = this.createProcessExitError(childProcess.exitCode, childProcess.signalCode);\n\t\t\tthis.exitError = error;\n\t\t\tthrow error;\n\t\t}\n\t\tconst id = `req_${++this.requestId}`;\n\t\tonRequestId?.(id);\n\t\tconst fullCommand = { ...command, id } as RpcCommand;\n\t\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\t\tlet rejectResponse!: (error: Error) => void;\n\t\tconst response = new Promise<RpcResponse>((resolve, reject) => {\n\t\t\trejectResponse = reject;\n\t\t\tthis.pendingRequests.add(id, {\n\t\t\t\tresolve: (value) => {\n\t\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\t\tresolve(value);\n\t\t\t\t},\n\t\t\t\treject: (error) => {\n\t\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\t\treject(error);\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t\ttry {\n\t\t\tawait this.requireWriter().write(serializeJsonLine(fullCommand));\n\t\t} catch (error) {\n\t\t\tthis.pendingRequests.delete(id);\n\t\t\t// Idempotent: the writer already classified this, but a caller-supplied\n\t\t\t// stream can reject with anything, and a send that never left the host\n\t\t\t// is a transport failure whatever it threw.\n\t\t\trejectResponse(markRpcTransportFailure(error));\n\t\t\treturn response;\n\t\t}\n\t\tif (this.pendingRequests.has(id) && !LONG_LIVED_COMMANDS.has(command.type)) {\n\t\t\ttimeout = setTimeout(() => {\n\t\t\t\tthis.pendingRequests.delete(id);\n\t\t\t\trejectResponse(new Error(`Timeout waiting for response to ${command.type}. Stderr: ${this.stderr}`));\n\t\t\t}, this.options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS);\n\t\t}\n\t\treturn response;\n\t}\n\tprivate assertSuccess(response: RpcResponse): void {\n\t\tif (response.success) return;\n\t\tif (response.errorCode === \"credential_synchronization\" && response.errorDetails) {\n\t\t\tthrow new CredentialSynchronizationError(\n\t\t\t\tresponse.errorDetails.providerId,\n\t\t\t\tresponse.errorDetails.operation,\n\t\t\t\tundefined,\n\t\t\t\t{ cause: new Error(response.error) },\n\t\t\t);\n\t\t}\n\t\tthrow new Error(response.error);\n\t}\n\tprotected data<T>(response: RpcResponse): T {\n\t\tthis.assertSuccess(response);\n\t\tconst successResponse = response as Extract<RpcResponse, { success: true; data: unknown }>;\n\t\treturn successResponse.data as T;\n\t}\n}\n"]}
@@ -904,7 +904,7 @@ A worker that exits is detected immediately, and its child is replayed from its
904
904
 
905
905
  A worker that exits or is killed while it runs a child does not stop the root. The root fences that worker's attempt and replays the child from its last committed checkpoint on a replacement worker, up to three attempts per child. A child that loses its third worker fails alone with `worker_retry_limit`; the pool and the root's other children keep running. One child's failure never stops the pool: it fails only that child, and the pool closes when the root ends. A child whose result was recorded keeps it whatever happens to the pool afterwards. A fault of the pool itself that reaches a running child, such as a journal write the database refused or a refused lease (`stale_work_lease`), replays the child the same way instead of failing it; after its third attempt the child fails with the retryable `worker_retry_limit`, naming the fault. A busy machine slows workers but does not fail them: a worker that still responds keeps its child however late its heartbeats are processed, and a stage's queued Intercom messages are delivered however slowly the worker acknowledges them. A stage on a worker reads its queued and sticky Intercom messages itself and receives them before its first turn, so it starts without waiting for a busy root. If the root later fails to record or deliver them, the run's status shows one `Intercom delivery:` line for the whole run; the messages stay queued and arrive live or on the stage's next drain.
906
906
 
907
- When the pool cannot confirm a worker's cleanup, the worker is retired and replaced, and its unfinished child replays on another worker. This happens when a tool process group the worker started is still running after SIGKILL, or the worker process itself outlives SIGKILL. The event shows as a warning on the root run and is written to the worker's log. It never fails a child. The process permits of those groups stay counted against `admission.limits`, and closing the pool reports them. Processes that a command detaches into their own session, such as an `ssh` ControlMaster daemon, are not part of the worker's cleanup and do not delay it.
907
+ When the pool cannot confirm a worker's cleanup, the worker is retired and replaced, and its unfinished child replays on another worker. This happens when a tool process group the worker started is still running after SIGKILL, or the worker process itself outlives SIGKILL. The event shows as a warning on the root run and is written to the worker's log. It never fails a child. The process permits of those groups stay quarantined: they stay counted against `admission.limits`, and closing the pool reports them. A tool process that waits for capacity which only quarantined permits hold waits at most 15 seconds for those groups to exit. It then fails with the retryable `worker_cleanup_unconfirmed`, naming the groups and the limit, and on a worker that ends the child's attempt, so the child replays within its three attempts and then fails with `worker_retry_limit` instead of waiting forever. Capacity held by running work is waited for however long it takes. Processes that a command detaches into their own session, such as an `ssh` ControlMaster daemon, are not part of the worker's cleanup and do not delay it.
908
908
 
909
909
  If the root process exits, even when it is killed, the pool's coordinator and workers exit with it. Resume the root to continue its children. If the coordinator process itself dies, its workers exit with it, and each pooled child the root is waiting on fails with the retryable `worker_lost` fault and the message `Local worker pool coordinator exited (…)`.
910
910
 
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@bastani/atomic",
3
- "version": "0.9.61-alpha.2",
3
+ "version": "0.9.61-alpha.3",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bastani/atomic",
9
- "version": "0.9.61-alpha.2",
9
+ "version": "0.9.61-alpha.3",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
- "@bastani/atomic-natives": "0.9.61-alpha.2",
13
- "@bastani/pi-ai": "0.9.61-alpha.2",
12
+ "@bastani/atomic-natives": "0.9.61-alpha.3",
13
+ "@bastani/pi-ai": "0.9.61-alpha.3",
14
14
  "@earendil-works/pi-agent-core": "1.4.0",
15
15
  "@earendil-works/pi-codemode": "1.4.0",
16
16
  "@earendil-works/pi-tui": "1.4.0",
@@ -427,18 +427,18 @@
427
427
  }
428
428
  },
429
429
  "node_modules/@bastani/atomic-natives": {
430
- "version": "0.9.61-alpha.2",
431
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives/-/atomic-natives-0.9.61-alpha.2.tgz",
430
+ "version": "0.9.61-alpha.3",
431
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives/-/atomic-natives-0.9.61-alpha.3.tgz",
432
432
  "license": "MIT",
433
433
  "optionalDependencies": {
434
- "@bastani/atomic-natives-darwin-arm64": "0.9.61-alpha.2",
435
- "@bastani/atomic-natives-darwin-x64": "0.9.61-alpha.2",
436
- "@bastani/atomic-natives-linux-arm64-gnu": "0.9.61-alpha.2",
437
- "@bastani/atomic-natives-linux-arm64-musl": "0.9.61-alpha.2",
438
- "@bastani/atomic-natives-linux-x64-gnu": "0.9.61-alpha.2",
439
- "@bastani/atomic-natives-linux-x64-musl": "0.9.61-alpha.2",
440
- "@bastani/atomic-natives-win32-arm64-msvc": "0.9.61-alpha.2",
441
- "@bastani/atomic-natives-win32-x64-msvc": "0.9.61-alpha.2"
434
+ "@bastani/atomic-natives-darwin-arm64": "0.9.61-alpha.3",
435
+ "@bastani/atomic-natives-darwin-x64": "0.9.61-alpha.3",
436
+ "@bastani/atomic-natives-linux-arm64-gnu": "0.9.61-alpha.3",
437
+ "@bastani/atomic-natives-linux-arm64-musl": "0.9.61-alpha.3",
438
+ "@bastani/atomic-natives-linux-x64-gnu": "0.9.61-alpha.3",
439
+ "@bastani/atomic-natives-linux-x64-musl": "0.9.61-alpha.3",
440
+ "@bastani/atomic-natives-win32-arm64-msvc": "0.9.61-alpha.3",
441
+ "@bastani/atomic-natives-win32-x64-msvc": "0.9.61-alpha.3"
442
442
  },
443
443
  "engines": {
444
444
  "bun": ">=1.4.2",
@@ -446,8 +446,8 @@
446
446
  }
447
447
  },
448
448
  "node_modules/@bastani/atomic-natives-darwin-arm64": {
449
- "version": "0.9.61-alpha.2",
450
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-arm64/-/atomic-natives-darwin-arm64-0.9.61-alpha.2.tgz",
449
+ "version": "0.9.61-alpha.3",
450
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-arm64/-/atomic-natives-darwin-arm64-0.9.61-alpha.3.tgz",
451
451
  "license": "MIT",
452
452
  "os": [
453
453
  "darwin"
@@ -458,8 +458,8 @@
458
458
  "optional": true
459
459
  },
460
460
  "node_modules/@bastani/atomic-natives-darwin-x64": {
461
- "version": "0.9.61-alpha.2",
462
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-x64/-/atomic-natives-darwin-x64-0.9.61-alpha.2.tgz",
461
+ "version": "0.9.61-alpha.3",
462
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-x64/-/atomic-natives-darwin-x64-0.9.61-alpha.3.tgz",
463
463
  "license": "MIT",
464
464
  "os": [
465
465
  "darwin"
@@ -470,8 +470,8 @@
470
470
  "optional": true
471
471
  },
472
472
  "node_modules/@bastani/atomic-natives-linux-arm64-gnu": {
473
- "version": "0.9.61-alpha.2",
474
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-gnu/-/atomic-natives-linux-arm64-gnu-0.9.61-alpha.2.tgz",
473
+ "version": "0.9.61-alpha.3",
474
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-gnu/-/atomic-natives-linux-arm64-gnu-0.9.61-alpha.3.tgz",
475
475
  "license": "MIT",
476
476
  "os": [
477
477
  "linux"
@@ -485,8 +485,8 @@
485
485
  "optional": true
486
486
  },
487
487
  "node_modules/@bastani/atomic-natives-linux-arm64-musl": {
488
- "version": "0.9.61-alpha.2",
489
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-musl/-/atomic-natives-linux-arm64-musl-0.9.61-alpha.2.tgz",
488
+ "version": "0.9.61-alpha.3",
489
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-musl/-/atomic-natives-linux-arm64-musl-0.9.61-alpha.3.tgz",
490
490
  "license": "MIT",
491
491
  "os": [
492
492
  "linux"
@@ -500,8 +500,8 @@
500
500
  "optional": true
501
501
  },
502
502
  "node_modules/@bastani/atomic-natives-linux-x64-gnu": {
503
- "version": "0.9.61-alpha.2",
504
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-gnu/-/atomic-natives-linux-x64-gnu-0.9.61-alpha.2.tgz",
503
+ "version": "0.9.61-alpha.3",
504
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-gnu/-/atomic-natives-linux-x64-gnu-0.9.61-alpha.3.tgz",
505
505
  "license": "MIT",
506
506
  "os": [
507
507
  "linux"
@@ -515,8 +515,8 @@
515
515
  "optional": true
516
516
  },
517
517
  "node_modules/@bastani/atomic-natives-linux-x64-musl": {
518
- "version": "0.9.61-alpha.2",
519
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-musl/-/atomic-natives-linux-x64-musl-0.9.61-alpha.2.tgz",
518
+ "version": "0.9.61-alpha.3",
519
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-musl/-/atomic-natives-linux-x64-musl-0.9.61-alpha.3.tgz",
520
520
  "license": "MIT",
521
521
  "os": [
522
522
  "linux"
@@ -530,8 +530,8 @@
530
530
  "optional": true
531
531
  },
532
532
  "node_modules/@bastani/atomic-natives-win32-arm64-msvc": {
533
- "version": "0.9.61-alpha.2",
534
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-arm64-msvc/-/atomic-natives-win32-arm64-msvc-0.9.61-alpha.2.tgz",
533
+ "version": "0.9.61-alpha.3",
534
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-arm64-msvc/-/atomic-natives-win32-arm64-msvc-0.9.61-alpha.3.tgz",
535
535
  "license": "MIT",
536
536
  "os": [
537
537
  "win32"
@@ -542,8 +542,8 @@
542
542
  "optional": true
543
543
  },
544
544
  "node_modules/@bastani/atomic-natives-win32-x64-msvc": {
545
- "version": "0.9.61-alpha.2",
546
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-x64-msvc/-/atomic-natives-win32-x64-msvc-0.9.61-alpha.2.tgz",
545
+ "version": "0.9.61-alpha.3",
546
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-x64-msvc/-/atomic-natives-win32-x64-msvc-0.9.61-alpha.3.tgz",
547
547
  "license": "MIT",
548
548
  "os": [
549
549
  "win32"
@@ -554,8 +554,8 @@
554
554
  "optional": true
555
555
  },
556
556
  "node_modules/@bastani/pi-ai": {
557
- "version": "0.9.61-alpha.2",
558
- "resolved": "https://registry.npmjs.org/@bastani/pi-ai/-/pi-ai-0.9.61-alpha.2.tgz",
557
+ "version": "0.9.61-alpha.3",
558
+ "resolved": "https://registry.npmjs.org/@bastani/pi-ai/-/pi-ai-0.9.61-alpha.3.tgz",
559
559
  "license": "MIT",
560
560
  "dependencies": {
561
561
  "@anthropic-ai/sdk": "0.129.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bastani/atomic",
3
- "version": "0.9.61-alpha.2",
3
+ "version": "0.9.61-alpha.3",
4
4
  "description": "Atomic coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "atomicConfig": {
@@ -89,8 +89,8 @@
89
89
  "prepublishOnly": "bun run clean && bun run build && bun run shrinkwrap"
90
90
  },
91
91
  "dependencies": {
92
- "@bastani/atomic-natives": "0.9.61-alpha.2",
93
- "@bastani/pi-ai": "0.9.61-alpha.2",
92
+ "@bastani/atomic-natives": "0.9.61-alpha.3",
93
+ "@bastani/pi-ai": "0.9.61-alpha.3",
94
94
  "@earendil-works/pi-agent-core": "1.4.0",
95
95
  "@earendil-works/pi-codemode": "1.4.0",
96
96
  "@earendil-works/pi-tui": "1.4.0",