@asm-agent/coding-agent 0.8.7 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +2 -7
  3. package/dist/asm-agent-runtime/src/__pycache__/asm_cm_driver.cpython-313.pyc +0 -0
  4. package/dist/asm-agent-runtime/src/__pycache__/phase76_address_head.cpython-313.pyc +0 -0
  5. package/dist/asm-agent-runtime/src/rlm/__init__.py +1 -1
  6. package/dist/asm-agent-runtime/src/rlm/__pycache__/__init__.cpython-312.pyc +0 -0
  7. package/dist/asm-agent-runtime/src/rlm/__pycache__/__init__.cpython-313.pyc +0 -0
  8. package/dist/asm-agent-runtime/src/rlm/__pycache__/_winjob.cpython-313.pyc +0 -0
  9. package/dist/asm-agent-runtime/src/rlm/__pycache__/bash.cpython-312.pyc +0 -0
  10. package/dist/asm-agent-runtime/src/rlm/__pycache__/bash.cpython-313.pyc +0 -0
  11. package/dist/asm-agent-runtime/src/rlm/__pycache__/harness.cpython-313.pyc +0 -0
  12. package/dist/asm-agent-runtime/src/rlm/__pycache__/mcp.cpython-312.pyc +0 -0
  13. package/dist/asm-agent-runtime/src/rlm/__pycache__/mcp.cpython-313.pyc +0 -0
  14. package/dist/asm-agent-runtime/src/rlm/__pycache__/mcp_base.cpython-312.pyc +0 -0
  15. package/dist/asm-agent-runtime/src/rlm/__pycache__/mcp_base.cpython-313.pyc +0 -0
  16. package/dist/asm-agent-runtime/src/rlm/__pycache__/repl.cpython-312.pyc +0 -0
  17. package/dist/asm-agent-runtime/src/rlm/__pycache__/repl.cpython-313.pyc +0 -0
  18. package/dist/asm-agent-runtime/src/rlm/__pycache__/skill.cpython-313.pyc +0 -0
  19. package/dist/asm-agent-runtime/src/rlm/bash.py +94 -31
  20. package/dist/asm-agent-runtime/src/rlm/repl.md +3 -3
  21. package/dist/asm-agent-runtime/src/rlm/repl.py +46 -45
  22. package/dist/asm-agent-runtime/test/__pycache__/test_agent_message_skill.cpython-313.pyc +0 -0
  23. package/dist/asm-agent-runtime/test/__pycache__/test_bash.cpython-313.pyc +0 -0
  24. package/dist/asm-agent-runtime/test/__pycache__/test_harness.cpython-313.pyc +0 -0
  25. package/dist/asm-agent-runtime/test/__pycache__/test_mcp.cpython-313.pyc +0 -0
  26. package/dist/asm-agent-runtime/test/__pycache__/test_mcp_base.cpython-313.pyc +0 -0
  27. package/dist/asm-agent-runtime/test/__pycache__/test_repl.cpython-313.pyc +0 -0
  28. package/dist/asm-agent-runtime/test/__pycache__/test_subagent_registry.cpython-313.pyc +0 -0
  29. package/dist/asm-agent-runtime/test/__pycache__/test_winjob.cpython-313.pyc +0 -0
  30. package/dist/asm-agent-runtime/test/test_bash.py +74 -19
  31. package/dist/asm-agent-runtime/test/test_repl.py +67 -3
  32. package/dist/asm-agent-runtime/uv.lock +446 -155
  33. package/dist/bundle/{anthropic-XSMQHGYB.js → anthropic-ZOZNPFXS.js} +2 -2
  34. package/dist/bundle/{azure-openai-responses-XLQAIKKH.js → azure-openai-responses-TDHCU647.js} +2 -2
  35. package/dist/bundle/{bundled-modules-5OCN73BM.js → bundled-modules-Q2YODC4B.js} +3 -3
  36. package/dist/bundle/{chunk-IAQLPSMN.js → chunk-AMKLNEAK.js} +47 -47
  37. package/dist/bundle/{chunk-2LPSALBF.js → chunk-FPY7FFJS.js} +978 -1821
  38. package/dist/bundle/{chunk-E3YE2Q7A.js → chunk-G6SC4YYW.js} +4973 -1926
  39. package/dist/bundle/{chunk-YPNK4MRU.js → chunk-QLHAP3FT.js} +1 -1
  40. package/dist/bundle/{cli-main-QYX5R3LF.js → cli-main-277AG2BR.js} +3 -3
  41. package/dist/bundle/cli.js +1 -1
  42. package/dist/bundle/{google-ZXJEPWJA.js → google-Q3AJWUOY.js} +1 -1
  43. package/dist/bundle/{google-vertex-WAF3RIJ6.js → google-vertex-2CSNOUBS.js} +1 -1
  44. package/dist/bundle/{main-EOUAQCJH.js → main-TNXWJXIU.js} +3 -3
  45. package/dist/bundle/{mistral-GDZXSXRS.js → mistral-XRYJGLLG.js} +1 -1
  46. package/dist/bundle/{openai-codex-responses-7XMPW4LG.js → openai-codex-responses-C6BRO2BN.js} +2 -2
  47. package/dist/bundle/{openai-completions-LNSVGDMF.js → openai-completions-DNXCK2JW.js} +4 -4
  48. package/dist/bundle/{openai-responses-MFZOBMIT.js → openai-responses-BEMWVIXE.js} +2 -2
  49. package/dist/config.d.ts +0 -1
  50. package/dist/config.d.ts.map +1 -1
  51. package/dist/config.js +0 -3
  52. package/dist/config.js.map +1 -1
  53. package/dist/core/agent-session-config.d.ts +1 -2
  54. package/dist/core/agent-session-config.d.ts.map +1 -1
  55. package/dist/core/agent-session-config.js +0 -3
  56. package/dist/core/agent-session-config.js.map +1 -1
  57. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  58. package/dist/core/agent-session-runtime.js +0 -8
  59. package/dist/core/agent-session-runtime.js.map +1 -1
  60. package/dist/core/agent-session-services.d.ts +0 -2
  61. package/dist/core/agent-session-services.d.ts.map +1 -1
  62. package/dist/core/agent-session-services.js +0 -22
  63. package/dist/core/agent-session-services.js.map +1 -1
  64. package/dist/core/agent-session.d.ts +8 -1
  65. package/dist/core/agent-session.d.ts.map +1 -1
  66. package/dist/core/agent-session.js +100 -22
  67. package/dist/core/agent-session.js.map +1 -1
  68. package/dist/core/kernel/bootstrap.d.ts.map +1 -1
  69. package/dist/core/kernel/bootstrap.js +1 -1
  70. package/dist/core/kernel/bootstrap.js.map +1 -1
  71. package/dist/core/kernel/repl-manager.d.ts +32 -8
  72. package/dist/core/kernel/repl-manager.d.ts.map +1 -1
  73. package/dist/core/kernel/repl-manager.js +401 -102
  74. package/dist/core/kernel/repl-manager.js.map +1 -1
  75. package/dist/core/kernel/shared.d.ts +11 -7
  76. package/dist/core/kernel/shared.d.ts.map +1 -1
  77. package/dist/core/kernel/shared.js +2 -5
  78. package/dist/core/kernel/shared.js.map +1 -1
  79. package/dist/core/mcp/mcp-manager.d.ts +4 -2
  80. package/dist/core/mcp/mcp-manager.d.ts.map +1 -1
  81. package/dist/core/mcp/mcp-manager.js +9 -7
  82. package/dist/core/mcp/mcp-manager.js.map +1 -1
  83. package/dist/core/model-registry.d.ts.map +1 -1
  84. package/dist/core/model-registry.js +1 -1
  85. package/dist/core/model-registry.js.map +1 -1
  86. package/dist/core/ollama-models.d.ts +3 -1
  87. package/dist/core/ollama-models.d.ts.map +1 -1
  88. package/dist/core/ollama-models.js +31 -10
  89. package/dist/core/ollama-models.js.map +1 -1
  90. package/dist/core/prime-inference-auth.d.ts +0 -9
  91. package/dist/core/prime-inference-auth.d.ts.map +1 -1
  92. package/dist/core/prime-inference-auth.js +0 -50
  93. package/dist/core/prime-inference-auth.js.map +1 -1
  94. package/dist/core/provider-display-names.d.ts.map +1 -1
  95. package/dist/core/provider-display-names.js +0 -1
  96. package/dist/core/provider-display-names.js.map +1 -1
  97. package/dist/core/session-manager.d.ts +0 -4
  98. package/dist/core/session-manager.d.ts.map +1 -1
  99. package/dist/core/session-manager.js +0 -22
  100. package/dist/core/session-manager.js.map +1 -1
  101. package/dist/core/settings-manager.d.ts +4 -16
  102. package/dist/core/settings-manager.d.ts.map +1 -1
  103. package/dist/core/settings-manager.js +13 -43
  104. package/dist/core/settings-manager.js.map +1 -1
  105. package/dist/core/slash-commands.d.ts.map +1 -1
  106. package/dist/core/slash-commands.js +0 -5
  107. package/dist/core/slash-commands.js.map +1 -1
  108. package/dist/core/tools/acp-mcp.d.ts +6 -0
  109. package/dist/core/tools/acp-mcp.d.ts.map +1 -0
  110. package/dist/core/tools/acp-mcp.js +86 -0
  111. package/dist/core/tools/acp-mcp.js.map +1 -0
  112. package/dist/core/tools/index.d.ts +1 -0
  113. package/dist/core/tools/index.d.ts.map +1 -1
  114. package/dist/core/tools/index.js +1 -0
  115. package/dist/core/tools/index.js.map +1 -1
  116. package/dist/core/tools/ipython.d.ts.map +1 -1
  117. package/dist/core/tools/ipython.js +9 -4
  118. package/dist/core/tools/ipython.js.map +1 -1
  119. package/dist/main.d.ts.map +1 -1
  120. package/dist/main.js +2 -11
  121. package/dist/main.js.map +1 -1
  122. package/dist/modes/acp/acp-mode.d.ts.map +1 -1
  123. package/dist/modes/acp/acp-mode.js +1 -1
  124. package/dist/modes/acp/acp-mode.js.map +1 -1
  125. package/dist/modes/agent-connection/daemon-agent-connection.d.ts +0 -2
  126. package/dist/modes/agent-connection/daemon-agent-connection.d.ts.map +1 -1
  127. package/dist/modes/agent-connection/daemon-agent-connection.js +0 -2
  128. package/dist/modes/agent-connection/daemon-agent-connection.js.map +1 -1
  129. package/dist/modes/agents-view/agents-view-mode.d.ts.map +1 -1
  130. package/dist/modes/agents-view/agents-view-mode.js +0 -19
  131. package/dist/modes/agents-view/agents-view-mode.js.map +1 -1
  132. package/dist/modes/daemon/daemon-mode.d.ts +1 -10
  133. package/dist/modes/daemon/daemon-mode.d.ts.map +1 -1
  134. package/dist/modes/daemon/daemon-mode.js +134 -274
  135. package/dist/modes/daemon/daemon-mode.js.map +1 -1
  136. package/dist/modes/daemon/daemon-protocol.d.ts +11 -5
  137. package/dist/modes/daemon/daemon-protocol.d.ts.map +1 -1
  138. package/dist/modes/daemon/daemon-protocol.js +6 -8
  139. package/dist/modes/daemon/daemon-protocol.js.map +1 -1
  140. package/dist/modes/daemon/daemon-supervisor.d.ts +0 -3
  141. package/dist/modes/daemon/daemon-supervisor.d.ts.map +1 -1
  142. package/dist/modes/daemon/daemon-supervisor.js +18 -52
  143. package/dist/modes/daemon/daemon-supervisor.js.map +1 -1
  144. package/dist/modes/daemon/daemon-worker-protocol.d.ts +1 -6
  145. package/dist/modes/daemon/daemon-worker-protocol.d.ts.map +1 -1
  146. package/dist/modes/daemon/daemon-worker-protocol.js +0 -2
  147. package/dist/modes/daemon/daemon-worker-protocol.js.map +1 -1
  148. package/dist/modes/interactive/auth-flows.d.ts +0 -2
  149. package/dist/modes/interactive/auth-flows.d.ts.map +1 -1
  150. package/dist/modes/interactive/auth-flows.js +1 -101
  151. package/dist/modes/interactive/auth-flows.js.map +1 -1
  152. package/dist/modes/interactive/components/assistant-message.d.ts +6 -1
  153. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  154. package/dist/modes/interactive/components/assistant-message.js +13 -3
  155. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  156. package/dist/modes/interactive/components/footer.d.ts +1 -1
  157. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  158. package/dist/modes/interactive/components/footer.js +2 -2
  159. package/dist/modes/interactive/components/footer.js.map +1 -1
  160. package/dist/modes/interactive/components/mermaid.d.ts +12 -0
  161. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
  162. package/dist/modes/interactive/components/mermaid.js +63 -0
  163. package/dist/modes/interactive/components/mermaid.js.map +1 -0
  164. package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
  165. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  166. package/dist/modes/interactive/components/settings-selector.js +10 -0
  167. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  168. package/dist/modes/interactive/feature-hints.d.ts.map +1 -1
  169. package/dist/modes/interactive/feature-hints.js +0 -4
  170. package/dist/modes/interactive/feature-hints.js.map +1 -1
  171. package/dist/modes/interactive/interactive-mode.d.ts +1 -7
  172. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  173. package/dist/modes/interactive/interactive-mode.js +23 -279
  174. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  175. package/dist/utils/version-check.d.ts.map +1 -1
  176. package/dist/utils/version-check.js +1 -1
  177. package/dist/utils/version-check.js.map +1 -1
  178. package/docs/settings.md +1 -31
  179. package/docs/usage.md +1 -4
  180. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  181. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  182. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  183. package/examples/extensions/sandbox/package-lock.json +2 -2
  184. package/examples/extensions/sandbox/package.json +1 -1
  185. package/examples/extensions/with-deps/package-lock.json +2 -2
  186. package/examples/extensions/with-deps/package.json +1 -1
  187. package/package.json +6 -5
  188. package/dist/core/agent-traces.d.ts +0 -130
  189. package/dist/core/agent-traces.d.ts.map +0 -1
  190. package/dist/core/agent-traces.js +0 -746
  191. package/dist/core/agent-traces.js.map +0 -1
  192. package/dist/core/telemetry.d.ts +0 -92
  193. package/dist/core/telemetry.d.ts.map +0 -1
  194. package/dist/core/telemetry.js +0 -633
  195. package/dist/core/telemetry.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acp-mode.js","sourceRoot":"","sources":["../../../src/modes/acp/acp-mode.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { realpathSync, statSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { Readable } from \"node:stream\";\nimport * as acp from \"@agentclientprotocol/sdk\";\nimport type { AgentMessage } from \"@asm-agent/agent\";\nimport type { ImageContent } from \"@asm-agent/ai\";\nimport { VERSION } from \"../../config.js\";\nimport type { AgentSessionRuntime } from \"../../core/agent-session-runtime.js\";\nimport type { AgentAutonomousStatus } from \"../../core/autonomous.js\";\nimport { takeOverStdout, writeRawStdout } from \"../../core/output-guard.js\";\nimport { InProcessAgentConnection } from \"../agent-connection/in-process-agent-connection.js\";\nimport type {\n\tAgentConnection,\n\tAgentConnectionRlmChildAgentSnapshot,\n\tAgentConnectionSessionEvent,\n\tAgentConnectionSessionInputPause,\n} from \"../agent-connection/types.js\";\nimport { latestAutonomousGateAttempt } from \"../headless-completion.js\";\nimport { type AcpEventMappingState, acpUpdatesForSessionEvent } from \"./acp-events.js\";\nimport { resolveAcpMcpServers } from \"./acp-mcp.js\";\nimport { ASM_AGENT_META_NAMESPACE, type AsmAgentAutonomousMeta, asmAgentMeta } from \"./acp-meta.js\";\nimport { type AcpStopReason, acpStopReason } from \"./acp-stop-reason.js\";\n\n/**\n * ACP frames must reach real stdout.\n *\n * Startup calls `takeOverStdout()` for every non-interactive mode, which\n * redirects `process.stdout.write` to stderr so stray logging cannot corrupt a\n * machine-readable stream. Handing `process.stdout` to the SDK would therefore\n * publish the whole protocol on stderr; write through the raw escape hatch the\n * guard exposes, exactly as RPC mode does.\n */\nfunction rawStdoutSink(): WritableStream<Uint8Array> {\n\tconst decoder = new TextDecoder();\n\treturn new WritableStream<Uint8Array>({\n\t\twrite(chunk) {\n\t\t\twriteRawStdout(typeof chunk === \"string\" ? chunk : decoder.decode(chunk, { stream: true }));\n\t\t},\n\t});\n}\n\nfunction normalizeWindowsDriveLetter(path: string): string {\n\tif (process.platform !== \"win32\" || !/^[A-Z]:/i.test(path)) return path;\n\treturn path.slice(0, 1).toLowerCase() + path.slice(1);\n}\n\nfunction canonicalCwd(path: string): string {\n\tconst resolved = resolve(path);\n\tlet canonical: string;\n\ttry {\n\t\tcanonical = realpathSync(resolved);\n\t} catch {\n\t\t// Preserve the previous lexical comparison when a path is missing or inaccessible.\n\t\tcanonical = resolved;\n\t}\n\treturn normalizeWindowsDriveLetter(canonical);\n}\n\nfunction isJsonRpcResponse(message: unknown, requestId: unknown): boolean {\n\tif (typeof message !== \"object\" || message === null) return false;\n\tconst record = message as Record<string, unknown>;\n\treturn (\n\t\trecord.jsonrpc === \"2.0\" &&\n\t\trecord.id === requestId &&\n\t\t!Object.hasOwn(record, \"method\") &&\n\t\tObject.hasOwn(record, \"result\") !== Object.hasOwn(record, \"error\")\n\t);\n}\n\nfunction sameCwd(left: string, right: string): boolean {\n\tconst canonicalLeft = canonicalCwd(left);\n\tconst canonicalRight = canonicalCwd(right);\n\tif (canonicalLeft === canonicalRight) return true;\n\n\ttry {\n\t\tconst leftStat = statSync(canonicalLeft, { bigint: true });\n\t\tconst rightStat = statSync(canonicalRight, { bigint: true });\n\t\t// Either half being zero makes the pair untrustworthy: Windows path-based\n\t\t// stat can report dev 0 with a real ino, and comparing ino alone would match\n\t\t// distinct directories on different volumes, since file IDs are volume-local.\n\t\tconst leftIdentityMissing = leftStat.dev === 0n || leftStat.ino === 0n;\n\t\tconst rightIdentityMissing = rightStat.dev === 0n || rightStat.ino === 0n;\n\t\tif (leftIdentityMissing || rightIdentityMissing) return false;\n\t\treturn leftStat.dev === rightStat.dev && leftStat.ino === rightStat.ino;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport interface AcpModeOptions {\n\t/** Bind headless extensions once the connection is live (in-process mode). */\n\tbindHeadlessExtensions?: () => Promise<void>;\n\t/**\n\t * Transport override. Defaults to NDJSON over stdio; tests supply an\n\t * in-memory stream pair so the protocol runs without a subprocess.\n\t */\n\tstream?: ReturnType<typeof acp.ndJsonStream>;\n\t/** Skip claiming stdout when the caller supplies its own transport. */\n\townStdout?: boolean;\n}\n\ninterface AcpPendingTerminal {\n\tpromptTurnId: number;\n\tboundary: TurnBoundary;\n\toutcome: \"result\" | \"error\";\n\tabort: AbortController;\n\tstatus?: AgentAutonomousStatus;\n\tturnFailure?: string;\n\tfailure?: string;\n\ttask?: Promise<void>;\n}\n\ninterface AcpInputPauseRelease {\n\tpromise: Promise<void>;\n\tresolve(): void;\n\treject(error: unknown): void;\n}\n\ninterface AcpSessionEntry {\n\tid: string;\n\tabort: AbortController | undefined;\n\tcancelling: boolean;\n\tcancelTask: Promise<void> | undefined;\n\tstopFailure: string | undefined;\n\tinputPause: AgentConnectionSessionInputPause | undefined;\n\tinputPauseKey: string | undefined;\n\tinputPauseRelease: AcpInputPauseRelease | undefined;\n\tpendingTerminal: AcpPendingTerminal | undefined;\n\tpromptTask: Promise<void> | undefined;\n\tresolvePromptTask: (() => void) | undefined;\n\tunsubscribe: (() => void) | undefined;\n\tproducer: AcpUpdateProducer;\n}\n\n/**\n * The sole producer of ACP session updates for one ACP session.\n *\n * ACP notifications are asynchronous, so assigning an id at each call site is\n * insufficient: detached calls can be observed out of order. This producer\n * serializes publication and stamps the *delivered* order. Its phase/outcome\n * fields are application metadata, deliberately independent of ACP stop\n * reasons such as `end_turn`.\n */\nclass AcpUpdateProducer {\n\tprivate eventSequence = 0;\n\tprivate nextPromptTurnId = 0;\n\tprivate activePromptTurnId = 0;\n\tprivate tail: Promise<void> = Promise.resolve();\n\tprivate readonly childOriginTurnIds = new Map<string, number>();\n\tprivate readonly terminalChildOriginTurns = new Set<number>();\n\tprivate readonly responseCommittedTurns = new Set<number>();\n\tprivate readonly terminalLifecycleTurns = new Set<number>();\n\tprivate readonly finishedPromptTurns = new Set<number>();\n\tprivate readonly admissionReady: Promise<void>;\n\tprivate releaseAdmission!: () => void;\n\tprivate admissionOpen = false;\n\tprivate admissionClosed = false;\n\n\tconstructor(\n\t\tprivate readonly sessionId: string,\n\t\tprivate readonly client: { notify(method: unknown, params: unknown): Promise<unknown> },\n\t) {\n\t\t// Subscribe before the initial snapshot, but do not let that subscription\n\t\t// publish a session-bound update before session/new has replied.\n\t\tthis.admissionReady = new Promise<void>((resolve) => {\n\t\t\tthis.releaseAdmission = resolve;\n\t\t});\n\t}\n\n\tcommitSessionNewResponse(): void {\n\t\tif (this.admissionClosed) return;\n\t\tthis.admissionOpen = true;\n\t\tthis.releaseAdmission();\n\t}\n\n\tfailSessionNewAdmission(): void {\n\t\tif (this.admissionOpen || this.admissionClosed) return;\n\t\tthis.admissionClosed = true;\n\t\tthis.releaseAdmission();\n\t}\n\n\tbeginPrompt(): number {\n\t\tthis.activePromptTurnId = ++this.nextPromptTurnId;\n\t\treturn this.activePromptTurnId;\n\t}\n\n\tprivate cleanupTurn(turnId: number): void {\n\t\tthis.responseCommittedTurns.delete(turnId);\n\t\tif (![...this.childOriginTurnIds.values()].some((originTurnId) => originTurnId === turnId)) {\n\t\t\tthis.terminalChildOriginTurns.delete(turnId);\n\t\t}\n\t}\n\n\tbeginTerminalLifecycle(turnId: number): void {\n\t\tthis.terminalLifecycleTurns.add(turnId);\n\t}\n\n\tfinishPrompt(turnId: number): void {\n\t\tif (this.activePromptTurnId === turnId) this.activePromptTurnId = 0;\n\t\tif (this.terminalLifecycleTurns.has(turnId)) {\n\t\t\tthis.finishedPromptTurns.add(turnId);\n\t\t\treturn;\n\t\t}\n\t\tthis.cleanupTurn(turnId);\n\t}\n\n\tfinishTerminalLifecycle(turnId: number): void {\n\t\tthis.terminalLifecycleTurns.delete(turnId);\n\t\tif (this.finishedPromptTurns.delete(turnId)) this.cleanupTurn(turnId);\n\t}\n\n\t/**\n\t * Cut a scoreable terminal boundary before it is queued. A subscription\n\t * callback after this point is connection-scoped, never appended to a turn\n\t * that an evaluator may treat as terminal.\n\t */\n\tcommitResponse(turnId: number): void {\n\t\tthis.responseCommittedTurns.add(turnId);\n\t}\n\n\tisResponseCommitted(turnId: number): boolean {\n\t\treturn this.responseCommittedTurns.has(turnId);\n\t}\n\n\tsealTerminal(turnId: number): void {\n\t\tthis.commitResponse(turnId);\n\t\tif ([...this.childOriginTurnIds.values()].some((originTurnId) => originTurnId === turnId)) {\n\t\t\tthis.terminalChildOriginTurns.add(turnId);\n\t\t}\n\t\tif (this.activePromptTurnId === turnId) this.activePromptTurnId = 0;\n\t}\n\n\tturnForEvent(event: AgentConnectionSessionEvent): number {\n\t\tif (event.type === \"rlm_child_update\") {\n\t\t\tconst known = this.childOriginTurnIds.get(event.child.id);\n\t\t\tconst originTurnId = known ?? this.activePromptTurnId;\n\t\t\tconst turnId = this.terminalChildOriginTurns.has(originTurnId) ? 0 : originTurnId;\n\t\t\tconst childFinished = [\"done\", \"error\", \"cancelled\"].includes(event.child.status);\n\t\t\tif (childFinished) {\n\t\t\t\tthis.childOriginTurnIds.delete(event.child.id);\n\t\t\t\tif (![...this.childOriginTurnIds.values()].some((origin) => origin === originTurnId)) {\n\t\t\t\t\tthis.terminalChildOriginTurns.delete(originTurnId);\n\t\t\t\t}\n\t\t\t} else if (known === undefined) {\n\t\t\t\t// Remember its initial origin, including connection scope, so a later\n\t\t\t\t// child update cannot be relabelled by a subsequent prompt.\n\t\t\t\tthis.childOriginTurnIds.set(event.child.id, originTurnId);\n\t\t\t}\n\t\t\treturn turnId;\n\t\t}\n\t\treturn this.activePromptTurnId;\n\t}\n\n\tasync publish(\n\t\tupdate: Record<string, unknown>,\n\t\tturnId: number,\n\t\tphase: \"event\" | \"responseBoundary\" | \"terminalQuiescence\",\n\t\toutcome?: \"result\" | \"error\",\n\t): Promise<boolean> {\n\t\t// Admission is synchronous through the tail assignment below: close either\n\t\t// rejects this call here or drains the update after it joins the queue.\n\t\tif (this.admissionClosed) return false;\n\t\tconst eventSequence = ++this.eventSequence;\n\t\tconst priorMeta = (update._meta && typeof update._meta === \"object\" ? update._meta : {}) as Record<\n\t\t\tstring,\n\t\t\tunknown\n\t\t>;\n\t\tconst priorPrimeMeta =\n\t\t\tpriorMeta[ASM_AGENT_META_NAMESPACE] && typeof priorMeta[ASM_AGENT_META_NAMESPACE] === \"object\"\n\t\t\t\t? (priorMeta[ASM_AGENT_META_NAMESPACE] as Record<string, unknown>)\n\t\t\t\t: {};\n\t\tconst correlatedUpdate = {\n\t\t\t...update,\n\t\t\t_meta: {\n\t\t\t\t...priorMeta,\n\t\t\t\t[ASM_AGENT_META_NAMESPACE]: {\n\t\t\t\t\t...priorPrimeMeta,\n\t\t\t\t\tpromptTurnId: turnId,\n\t\t\t\t\teventSequence,\n\t\t\t\t\tphase,\n\t\t\t\t\t...(outcome ? { outcome } : {}),\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t\t// Keep the chain alive after a failed notification, while preserving\n\t\t// the order of every later notification and allowing callers to await its drain.\n\t\tlet published = false;\n\t\tthis.tail = this.tail.then(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.admissionReady;\n\t\t\t\tif (!this.admissionOpen) return;\n\t\t\t\tawait this.client.notify(acp.methods.client.session.update, {\n\t\t\t\t\tsessionId: this.sessionId,\n\t\t\t\t\tupdate: correlatedUpdate,\n\t\t\t\t});\n\t\t\t\tpublished = true;\n\t\t\t} catch {\n\t\t\t\t// Drop only this update; a rejected queue tail would strand later updates.\n\t\t\t}\n\t\t});\n\t\tawait this.tail;\n\t\treturn published;\n\t}\n\n\tdrain(): Promise<void> {\n\t\treturn this.tail;\n\t}\n\n\tasync close(): Promise<void> {\n\t\tthis.admissionClosed = true;\n\t\tthis.releaseAdmission();\n\t\tawait this.tail;\n\t\tthis.admissionOpen = false;\n\t}\n}\n\n/**\n * Split ACP prompt blocks into the text and images asm-agent accepts.\n *\n * Image and embedded-resource blocks are advertised in `initialize`, so they must\n * actually reach the model: dropping them silently would let a client believe a\n * pasted screenshot was accepted.\n */\nfunction promptContent(blocks: readonly unknown[]): { text: string; images: ImageContent[] } {\n\tconst texts: string[] = [];\n\tconst images: ImageContent[] = [];\n\tfor (const block of blocks) {\n\t\tif (!block || typeof block !== \"object\") continue;\n\t\tconst typed = block as {\n\t\t\ttype?: string;\n\t\t\ttext?: string;\n\t\t\tdata?: string;\n\t\t\tmimeType?: string;\n\t\t\turi?: string;\n\t\t\tresource?: { text?: string; uri?: string };\n\t\t};\n\t\tif (typed.type === \"text\" && typeof typed.text === \"string\") {\n\t\t\ttexts.push(typed.text);\n\t\t} else if (typed.type === \"image\" && typeof typed.data === \"string\" && typeof typed.mimeType === \"string\") {\n\t\t\timages.push({ type: \"image\", data: typed.data, mimeType: typed.mimeType });\n\t\t} else if (typed.type === \"resource\" && typeof typed.resource?.text === \"string\") {\n\t\t\t// Embedded text resources become context the model can read.\n\t\t\tconst uri = typed.resource.uri ? `${typed.resource.uri}\\n` : \"\";\n\t\t\ttexts.push(`${uri}${typed.resource.text}`);\n\t\t} else if (typed.type === \"resource_link\" && typeof typed.uri === \"string\") {\n\t\t\ttexts.push(typed.uri);\n\t\t}\n\t}\n\treturn { text: texts.join(\"\\n\"), images };\n}\n\nfunction autonomousMeta(status: AgentAutonomousStatus | undefined): AsmAgentAutonomousMeta | undefined {\n\tif (!status?.enabled) return undefined;\n\treturn {\n\t\tenabled: status.enabled,\n\t\tcontinuationsUsed: status.continuationsUsed,\n\t\tturnsUsed: status.turnsUsed,\n\t\ttokensUsed: status.tokensUsed,\n\t\tgateAttempt: latestAutonomousGateAttempt(status) || undefined,\n\t\tgateFailure: status.lastGateFailure?.exitText,\n\t};\n}\n\nfunction outstandingSubagentCount(children: readonly AgentConnectionRlmChildAgentSnapshot[] | undefined): number {\n\treturn (children ?? []).filter((child) => child.status === \"queued\" || child.status === \"running\").length;\n}\n\nfunction quiescenceMeta(\n\tstatus: AgentAutonomousStatus,\n\tchildren: readonly AgentConnectionRlmChildAgentSnapshot[] | undefined,\n): { outstandingSubagents: number; remainingAutonomousContinuations: number } {\n\treturn {\n\t\toutstandingSubagents: outstandingSubagentCount(children),\n\t\tremainingAutonomousContinuations: status.enabled\n\t\t\t? Math.max(0, status.limits.maxContinuations - status.continuationsUsed)\n\t\t\t: 0,\n\t};\n}\n\n/**\n * The transcript as it stood before a turn started, recorded so the turn's own\n * messages can be told apart from everything older.\n *\n * A pre-turn message *count* cannot do that job: auto-compaction can fire during\n * a turn and rebuild `state.messages` (it filters, slices, and re-materializes\n * persisted entries), so this turn's failure can end up at a lower index than\n * the count taken before prompting. Membership is tracked by things a rebuild\n * preserves instead — the message objects themselves, plus a content key for\n * transports that hand back fresh copies (daemon RPC re-parses JSON, so identity\n * does not survive it) and for compaction paths that re-materialize a kept\n * message from its persisted entry with its original timestamp.\n */\ninterface TurnBoundary {\n\tidentities: WeakSet<object>;\n\tkeys: Set<string>;\n}\n\n/** Key for a kept message: compaction drops messages, it does not rewrite them. */\nfunction messageKey(message: unknown): string | undefined {\n\tif (typeof message !== \"object\" || message === null) return undefined;\n\tconst record = message as { role?: unknown; timestamp?: unknown; stopReason?: unknown; errorMessage?: unknown };\n\tif (typeof record.timestamp !== \"number\") return undefined;\n\treturn JSON.stringify([\n\t\trecord.role ?? null,\n\t\trecord.timestamp,\n\t\trecord.stopReason ?? null,\n\t\trecord.errorMessage ?? null,\n\t]);\n}\n\nfunction turnBoundary(messages: readonly AgentMessage[]): TurnBoundary {\n\tconst identities = new WeakSet<object>();\n\tconst keys = new Set<string>();\n\tfor (const message of messages) {\n\t\tif (typeof message !== \"object\" || message === null) continue;\n\t\tidentities.add(message);\n\t\tconst key = messageKey(message);\n\t\tif (key) keys.add(key);\n\t}\n\treturn { identities, keys };\n}\n\nfunction isPreTurn(message: unknown, boundary: TurnBoundary): boolean {\n\tif (typeof message !== \"object\" || message === null) return false;\n\tif (boundary.identities.has(message)) return true;\n\tconst key = messageKey(message);\n\treturn key !== undefined && boundary.keys.has(key);\n}\n\n/**\n * Error text from an assistant message this turn produced, when it failed.\n *\n * `promptAndWait` resolves for a failed turn just as it does for a successful\n * one, so the outcome has to be read off the transcript. Only messages that were\n * not in the transcript before the turn are considered: scanning the whole\n * transcript would let an earlier failed turn reject a later turn that never\n * called the model (a handled slash command, say), reporting a stale error.\n *\n * A transcript read that fails is not treated as success — that would restore\n * the silent-success behavior this exists to prevent.\n */\nasync function turnFailure(connection: AgentConnection, boundary: TurnBoundary): Promise<string | undefined> {\n\tconst messages = await connection.getMessages();\n\tfor (let index = messages.length - 1; index >= 0; index--) {\n\t\tconst message = messages[index];\n\t\tif (message?.role !== \"assistant\") continue;\n\t\t// The newest assistant message predates the turn, so the turn appended none.\n\t\tif (isPreTurn(message, boundary)) return undefined;\n\t\tconst assistant = message as { stopReason?: string; errorMessage?: string };\n\t\tif (assistant.stopReason !== \"error\") return undefined;\n\t\treturn assistant.errorMessage || \"the model request failed\";\n\t}\n\treturn undefined;\n}\n\nexport async function runAcpMode(runtimeHost: AgentSessionRuntime): Promise<never> {\n\tconst connection = new InProcessAgentConnection(runtimeHost);\n\treturn runAcpModeWithConnection(connection, {\n\t\tbindHeadlessExtensions: () => connection.bindHeadlessExtensions({}),\n\t});\n}\n\nexport async function runAcpModeWithConnection(\n\tconnection: AgentConnection,\n\toptions: AcpModeOptions = {},\n): Promise<never> {\n\t// ACP owns stdout: any stray write corrupts the JSON-RPC stream.\n\tif (options.ownStdout !== false && !options.stream) {\n\t\ttakeOverStdout();\n\t}\n\tconst supportsMcpServers =\n\t\tconnection.supportsAcpMcpServers?.() === true &&\n\t\tconnection.replaceAcpMcpServers !== undefined &&\n\t\tconnection.releaseAcpMcpServers !== undefined;\n\tconst acpMcpOwnerId = randomUUID();\n\tlet acpMcpServerNames: string[] = [];\n\tconst clearAcpMcpServers = async (serverNames = acpMcpServerNames): Promise<void> => {\n\t\tif (!supportsMcpServers || !connection.releaseAcpMcpServers) return;\n\t\tawait connection.releaseAcpMcpServers(acpMcpOwnerId, serverNames);\n\t\tacpMcpServerNames = [];\n\t};\n\tconst replaceAcpMcpServers = async (servers: readonly acp.McpServer[], cwd: string): Promise<void> => {\n\t\tif (acpMcpServerNames.length > 0) {\n\t\t\t// Retry a prior best-effort close before admitting another session,\n\t\t\t// including one that does not declare replacement MCP servers.\n\t\t\tawait clearAcpMcpServers();\n\t\t}\n\t\tif (servers.length === 0 && acpMcpServerNames.length === 0) return;\n\t\tif (!supportsMcpServers || !connection.replaceAcpMcpServers) {\n\t\t\tthrow acp.RequestError.invalidParams({ reason: \"MCP servers are unavailable in this ACP host\" });\n\t\t}\n\t\tconst resolved = resolveAcpMcpServers(servers, cwd);\n\t\tconst serverNames = resolved.map((server) => server.name);\n\t\ttry {\n\t\t\tawait connection.replaceAcpMcpServers(resolved, acpMcpOwnerId);\n\t\t} catch (error) {\n\t\t\t// The daemon may have applied the configuration before its acknowledgement\n\t\t\t// was lost. Always attempt owner-scoped cleanup before rejecting admission.\n\t\t\tawait clearAcpMcpServers(serverNames).catch(() => undefined);\n\t\t\tthrow error;\n\t\t}\n\t\tacpMcpServerNames = serverNames;\n\t};\n\n\t// One ACP connection drives one AgentConnection, whose newSession() replaces\n\t// the live session rather than creating a parallel one. Tracking a single\n\t// session keeps every event unambiguously attributable; a second session/new\n\t// is refused rather than silently sharing conversation state, cwd, and queues.\n\tlet session: AcpSessionEntry | undefined;\n\tlet closedInputPause: AgentConnectionSessionInputPause | undefined;\n\tlet closedInputPauseKey: string | undefined;\n\tlet sessionNewInFlight = false;\n\tlet sessionCloseInFlight = false;\n\tlet sessionCloseTask: Promise<void> | undefined;\n\tlet bound = false;\n\n\tconst baseStream =\n\t\toptions.stream ?? acp.ndJsonStream(rawStdoutSink(), Readable.toWeb(process.stdin) as ReadableStream<Uint8Array>);\n\t// ACP's public request handler only returns a response; it has no response\n\t// commit callback. Observe the outgoing response at the supplied stream\n\t// boundary instead. The SDK serializes every write, so opening the producer\n\t// after this write resolves puts buffered notifications strictly behind it.\n\tlet pendingSessionNewResponse:\n\t\t| {\n\t\t\t\trequestId: unknown;\n\t\t\t\tproducer: AcpUpdateProducer;\n\t\t\t\tentry: AcpSessionEntry;\n\t\t\t\tinputPause: AgentConnectionSessionInputPause | undefined;\n\t\t }\n\t\t| undefined;\n\tconst failPendingSessionNewResponse = (): void => {\n\t\tconst admission = pendingSessionNewResponse;\n\t\tpendingSessionNewResponse = undefined;\n\t\tadmission?.producer.failSessionNewAdmission();\n\t\tadmission?.entry.inputPauseRelease?.reject(new Error(\"ACP session/new response was not delivered\"));\n\t};\n\ttype AcpStreamMessage = typeof baseStream.writable extends WritableStream<infer TMessage> ? TMessage : never;\n\tconst stream: typeof baseStream = {\n\t\treadable: baseStream.readable,\n\t\twritable: new WritableStream<AcpStreamMessage>({\n\t\t\tasync write(message) {\n\t\t\t\tlet writer: WritableStreamDefaultWriter<AcpStreamMessage> | undefined;\n\t\t\t\ttry {\n\t\t\t\t\twriter = baseStream.writable.getWriter();\n\t\t\t\t\tawait writer.write(message);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tfailPendingSessionNewResponse();\n\t\t\t\t\tthrow error;\n\t\t\t\t} finally {\n\t\t\t\t\twriter?.releaseLock();\n\t\t\t\t}\n\t\t\t\tif (pendingSessionNewResponse && isJsonRpcResponse(message, pendingSessionNewResponse.requestId)) {\n\t\t\t\t\tconst admission = pendingSessionNewResponse;\n\t\t\t\t\tpendingSessionNewResponse = undefined;\n\t\t\t\t\tif (admission.inputPause) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait admission.inputPause.release();\n\t\t\t\t\t\t\tif (admission.entry.inputPause === admission.inputPause) {\n\t\t\t\t\t\t\t\tadmission.entry.inputPause = undefined;\n\t\t\t\t\t\t\t\tadmission.entry.inputPauseKey = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (closedInputPause === admission.inputPause) {\n\t\t\t\t\t\t\t\tclosedInputPause = undefined;\n\t\t\t\t\t\t\t\tclosedInputPauseKey = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tadmission.entry.inputPauseRelease?.resolve();\n\t\t\t\t\t\t\tadmission.entry.inputPauseRelease = undefined;\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tadmission.entry.stopFailure = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\t\tadmission.entry.inputPauseRelease?.reject(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tadmission.producer.commitSessionNewResponse();\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync close() {\n\t\t\t\tlet writer: WritableStreamDefaultWriter<AcpStreamMessage> | undefined;\n\t\t\t\ttry {\n\t\t\t\t\twriter = baseStream.writable.getWriter();\n\t\t\t\t\tawait writer.close();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tfailPendingSessionNewResponse();\n\t\t\t\t\tthrow error;\n\t\t\t\t} finally {\n\t\t\t\t\twriter?.releaseLock();\n\t\t\t\t}\n\t\t\t\tfailPendingSessionNewResponse();\n\t\t\t},\n\t\t\tasync abort(reason) {\n\t\t\t\tlet writer: WritableStreamDefaultWriter<AcpStreamMessage> | undefined;\n\t\t\t\ttry {\n\t\t\t\t\twriter = baseStream.writable.getWriter();\n\t\t\t\t\tawait writer.abort(reason);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tfailPendingSessionNewResponse();\n\t\t\t\t\tthrow error;\n\t\t\t\t} finally {\n\t\t\t\t\twriter?.releaseLock();\n\t\t\t\t}\n\t\t\t\tfailPendingSessionNewResponse();\n\t\t\t},\n\t\t}),\n\t};\n\n\tconst cancelOutstandingRlmChildren = async (): Promise<void> => {\n\t\tconst children = await connection.getRlmChildSnapshots();\n\t\tconst cancellations = await Promise.allSettled(children.map((child) => connection.cancelRlmChild(child.id)));\n\t\tconst failed = cancellations.find((result) => result.status === \"rejected\");\n\t\tif (failed?.status === \"rejected\") throw failed.reason;\n\t};\n\tconst abortConnectionWork = async (): Promise<void> => {\n\t\tawait connection.abortAndClearQueue();\n\t};\n\tconst acquireStopInputPause = async (entry: AcpSessionEntry): Promise<AgentConnectionSessionInputPause> => {\n\t\tif (entry.inputPauseRelease) {\n\t\t\tawait entry.inputPauseRelease.promise.catch(() => undefined);\n\t\t\tentry.inputPauseRelease = undefined;\n\t\t}\n\t\tconst leaseKey = entry.inputPauseKey ?? randomUUID();\n\t\tentry.inputPauseKey = leaseKey;\n\t\tconst pause = await connection.acquireSessionInputPause(leaseKey);\n\t\tentry.inputPause = pause;\n\t\treturn pause;\n\t};\n\n\tconst stopSessionWork = async (pending?: AcpPendingTerminal, promptTask?: Promise<void>): Promise<void> => {\n\t\tawait abortConnectionWork();\n\t\tawait connection.waitForIdle();\n\t\tawait cancelOutstandingRlmChildren();\n\t\tawait pending?.task;\n\t\tawait promptTask;\n\t};\n\n\tconst finalizePendingTerminal = (entry: AcpSessionEntry, pending: AcpPendingTerminal): void => {\n\t\tpending.task = (async () => {\n\t\t\twhile (true) {\n\t\t\t\tconst status = await connection.waitForHeadlessCompletion({ waitForRlmQuiescence: true });\n\t\t\t\tif (pending.abort.signal.aborted || session !== entry || entry.pendingTerminal !== pending) return;\n\t\t\t\tconst finalFailure = await turnFailure(connection, pending.boundary);\n\t\t\t\tif (pending.abort.signal.aborted || session !== entry || entry.pendingTerminal !== pending) return;\n\t\t\t\tconst liveChildren = await connection.getRlmChildSnapshots();\n\t\t\t\tif (pending.abort.signal.aborted || session !== entry || entry.pendingTerminal !== pending) return;\n\t\t\t\tconst terminalQuiescence = quiescenceMeta(status, liveChildren);\n\t\t\t\tif (terminalQuiescence.outstandingSubagents !== 0) continue;\n\t\t\t\tpending.status = status;\n\t\t\t\tpending.turnFailure = finalFailure;\n\n\t\t\t\tentry.producer.sealTerminal(pending.promptTurnId);\n\t\t\t\tconst autonomous = autonomousMeta(status);\n\t\t\t\tconst publication = entry.producer.publish(\n\t\t\t\t\t{\n\t\t\t\t\t\tsessionUpdate: \"session_info_update\",\n\t\t\t\t\t\t_meta: asmAgentMeta({ ...(autonomous ? { autonomous } : {}), quiescence: terminalQuiescence }),\n\t\t\t\t\t},\n\t\t\t\t\tpending.promptTurnId,\n\t\t\t\t\t\"terminalQuiescence\",\n\t\t\t\t\tfinalFailure ? \"error\" : pending.outcome,\n\t\t\t\t);\n\t\t\t\t// Keep terminal ownership until this settlement task has fully drained.\n\t\t\t\t// A follow-up prompt awaits that task; clearing ownership at publication\n\t\t\t\t// admission would let it overlap the first prompt handler.\n\t\t\t\tif (!(await publication)) return;\n\t\t\t\tawait entry.producer.drain();\n\t\t\t\treturn;\n\t\t\t}\n\t\t})()\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tif (pending.abort.signal.aborted || entry.pendingTerminal !== pending) return;\n\t\t\t\tpending.failure = error instanceof Error ? error.message : String(error);\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tentry.producer.finishTerminalLifecycle(pending.promptTurnId);\n\t\t\t\tif (entry.pendingTerminal === pending) entry.pendingTerminal = undefined;\n\t\t\t\tif (entry.abort === pending.abort) entry.abort = undefined;\n\t\t\t});\n\t};\n\n\tconst handle = acp\n\t\t.agent({ name: \"asm-agent\" })\n\t\t.onRequest(\"initialize\", async () => ({\n\t\t\tprotocolVersion: acp.PROTOCOL_VERSION,\n\t\t\tagentCapabilities: {\n\t\t\t\tloadSession: false,\n\t\t\t\tpromptCapabilities: { image: true, embeddedContext: true },\n\t\t\t\t...(supportsMcpServers ? { mcpCapabilities: { http: true } } : {}),\n\t\t\t\t// Advertise close so a client knows it can release the session (and\n\t\t\t\t// the single-session slot) instead of dropping the connection.\n\t\t\t\tsessionCapabilities: { close: {} },\n\t\t\t},\n\t\t\tagentInfo: { name: \"asm-agent\", title: \"ASM Agent\", version: VERSION },\n\t\t\t// Advertise asm-agent extras under a namespaced key: ACP reserves\n\t\t\t// every object root for future protocol fields.\n\t\t\t_meta: asmAgentMeta({}),\n\t\t}))\n\t\t.onRequest(\"session/new\", async (ctx: any) => {\n\t\t\t// Reserve the single-session slot before the first await. Otherwise two\n\t\t\t// concurrent requests can both pass the empty-slot check while cwd or\n\t\t\t// snapshot reads are in flight, then overwrite each other's session.\n\t\t\tif (session || sessionNewInFlight || sessionCloseInFlight) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"asm-agent ACP mode hosts one session per connection; \" +\n\t\t\t\t\t\t\"start another asm-agent process for a second session\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tsessionNewInFlight = true;\n\t\t\ttry {\n\t\t\t\tconst params = ctx.params as acp.NewSessionRequest;\n\t\t\t\tconst mcpServers = params.mcpServers ?? [];\n\t\t\t\tif (mcpServers.length > 0 && !supportsMcpServers) {\n\t\t\t\t\tthrow acp.RequestError.invalidParams({ reason: \"MCP servers are unavailable in this ACP host\" });\n\t\t\t\t}\n\t\t\t\tif (!bound) {\n\t\t\t\t\t// Only latch after a successful bind: a rejected bind must not leave\n\t\t\t\t\t// extensions permanently unavailable for the rest of the process.\n\t\t\t\t\tawait options.bindHeadlessExtensions?.();\n\t\t\t\t\tbound = true;\n\t\t\t\t}\n\t\t\t\t// asm-agent's cwd is fixed at startup by the session it was launched\n\t\t\t\t// with, so a client-supplied cwd cannot be adopted after the fact.\n\t\t\t\t// Report the real cwd back in `_meta` rather than failing the request or\n\t\t\t\t// letting the client assume a directory the agent is not using.\n\t\t\t\tconst requestedCwd = params.cwd;\n\t\t\t\tconst actualCwd = await connection\n\t\t\t\t\t.getState()\n\t\t\t\t\t.then((state) => state.cwd)\n\t\t\t\t\t.catch(() => undefined);\n\t\t\t\tif (!actualCwd && mcpServers.some((server) => \"command\" in server)) {\n\t\t\t\t\tthrow acp.RequestError.invalidParams({ reason: \"Could not resolve the ACP session cwd for stdio MCP\" });\n\t\t\t\t}\n\t\t\t\tawait replaceAcpMcpServers(mcpServers, actualCwd ?? \"\");\n\t\t\t\tlet cwdMismatch: { requested: string; actual: string } | undefined;\n\t\t\t\tif (\n\t\t\t\t\ttypeof requestedCwd === \"string\" &&\n\t\t\t\t\trequestedCwd.length > 0 &&\n\t\t\t\t\tactualCwd &&\n\t\t\t\t\t!sameCwd(requestedCwd, actualCwd)\n\t\t\t\t) {\n\t\t\t\t\tcwdMismatch = { requested: requestedCwd, actual: actualCwd };\n\t\t\t\t}\n\t\t\t\tconst sessionId = randomUUID();\n\t\t\t\t// Install the listener before fetching the snapshot. Child updates can arrive\n\t\t\t\t// while the snapshot request is in flight; the connection remains the\n\t\t\t\t// authoritative source used when quiescence is emitted below.\n\t\t\t\tconst producer = new AcpUpdateProducer(sessionId, ctx.client);\n\t\t\t\tlet inputPauseRelease: AcpInputPauseRelease | undefined;\n\t\t\t\tif (closedInputPause) {\n\t\t\t\t\tlet resolve!: () => void;\n\t\t\t\t\tlet reject!: (error: unknown) => void;\n\t\t\t\t\tconst promise = new Promise<void>((resolvePromise, rejectPromise) => {\n\t\t\t\t\t\tresolve = resolvePromise;\n\t\t\t\t\t\treject = rejectPromise;\n\t\t\t\t\t});\n\t\t\t\t\tvoid promise.catch(() => undefined);\n\t\t\t\t\tinputPauseRelease = { promise, resolve, reject };\n\t\t\t\t}\n\t\t\t\tconst entry: AcpSessionEntry = {\n\t\t\t\t\tid: sessionId,\n\t\t\t\t\tabort: undefined,\n\t\t\t\t\tcancelling: false,\n\t\t\t\t\tcancelTask: undefined,\n\t\t\t\t\tstopFailure: undefined,\n\t\t\t\t\tinputPause: closedInputPause,\n\t\t\t\t\tinputPauseKey: closedInputPauseKey,\n\t\t\t\t\tinputPauseRelease,\n\t\t\t\t\tpendingTerminal: undefined,\n\t\t\t\t\tpromptTask: undefined,\n\t\t\t\t\tresolvePromptTask: undefined,\n\t\t\t\t\tunsubscribe: undefined,\n\t\t\t\t\tproducer,\n\t\t\t\t};\n\t\t\t\t// Subscribe for the session lifetime, not per prompt turn: asm-agent\n\t\t\t\t// subagents are fire-and-forget and keep reporting after the spawning turn\n\t\t\t\t// ends, so a turn-scoped subscription would drop their updates. One\n\t\t\t\t// mapping state per session keeps streaming bash output correlated with\n\t\t\t\t// the run that produced it.\n\t\t\t\tconst mappingState: AcpEventMappingState = {};\n\t\t\t\tconst observedChildren = new Map<string, unknown>();\n\t\t\t\tconst unsubscribe = connection.subscribe((event) => {\n\t\t\t\t\t// Heartbeats are connection-scoped, including if one races a prompt.\n\t\t\t\t\t// They therefore intentionally use origin turn 0.\n\t\t\t\t\tif (event.type === \"heartbeats_changed\") {\n\t\t\t\t\t\tvoid producer.publish(\n\t\t\t\t\t\t\t{ sessionUpdate: \"session_info_update\", _meta: asmAgentMeta({ heartbeatsChanged: true }) },\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\"event\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (event.type !== \"session_event\") return;\n\t\t\t\t\tif (event.event.type === \"rlm_child_update\") {\n\t\t\t\t\t\tobservedChildren.set(event.event.child.id, event.event.child);\n\t\t\t\t\t}\n\t\t\t\t\tconst turnId = producer.turnForEvent(event.event);\n\t\t\t\t\tfor (const update of acpUpdatesForSessionEvent(event.event, mappingState)) {\n\t\t\t\t\t\tvoid producer.publish(update, turnId, \"event\");\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\ttry {\n\t\t\t\t\t// Reconcile after subscribing so updates cannot be lost while the snapshot\n\t\t\t\t\t// request is in flight. Do not turn a failed read into an empty roster.\n\t\t\t\t\tconst initialSnapshot = await connection.getInitialSnapshot();\n\t\t\t\t\tfor (const child of initialSnapshot.children ?? []) {\n\t\t\t\t\t\tif (observedChildren.has(child.id)) continue;\n\t\t\t\t\t\tobservedChildren.set(child.id, child);\n\t\t\t\t\t\tconst event = { type: \"rlm_child_update\", child } as const;\n\t\t\t\t\t\tconst turnId = producer.turnForEvent(event);\n\t\t\t\t\t\tfor (const update of acpUpdatesForSessionEvent(event, mappingState)) {\n\t\t\t\t\t\t\tvoid producer.publish(update, turnId, \"event\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tproducer.failSessionNewAdmission();\n\t\t\t\t\tunsubscribe();\n\t\t\t\t\tawait clearAcpMcpServers().catch(() => undefined);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\t// Claim the single-session slot only once the subscription and snapshot are\n\t\t\t\t// ready, so a failed setup cannot leave it occupied and unusable.\n\t\t\t\tentry.unsubscribe = unsubscribe;\n\t\t\t\tsession = entry;\n\t\t\t\tconst response = {\n\t\t\t\t\tsessionId,\n\t\t\t\t\t...(cwdMismatch ? { _meta: asmAgentMeta({ cwd: cwdMismatch }) } : {}),\n\t\t\t\t};\n\t\t\t\t// The stream wrapper commits this gate after this exact response has\n\t\t\t\t// written. Buffered subscription updates retain producer order.\n\t\t\t\tpendingSessionNewResponse = {\n\t\t\t\t\trequestId: ctx.requestId,\n\t\t\t\t\tproducer: entry.producer,\n\t\t\t\t\tentry,\n\t\t\t\t\tinputPause: closedInputPause,\n\t\t\t\t};\n\t\t\t\treturn response;\n\t\t\t} finally {\n\t\t\t\tsessionNewInFlight = false;\n\t\t\t}\n\t\t})\n\t\t.onRequest(\"session/prompt\", async (ctx: any) => {\n\t\t\tconst params = ctx.params as { sessionId: string; prompt: readonly unknown[] };\n\t\t\tconst entry = session?.id === params.sessionId ? session : undefined;\n\t\t\tif (!entry) throw new Error(`Unknown ACP session: ${params.sessionId}`);\n\t\t\tif (sessionCloseInFlight) throw new Error(`ACP session is closing: ${params.sessionId}`);\n\t\t\tif (entry.cancelling) throw new Error(`ACP session is cancelling: ${params.sessionId}`);\n\t\t\tawait entry.inputPauseRelease?.promise;\n\t\t\t// A prompt response precedes its correlated terminal update. Serialize the\n\t\t\t// next turn behind that lifecycle so it cannot overwrite terminal ownership.\n\t\t\tawait entry.pendingTerminal?.task;\n\t\t\tif (session !== entry) throw new Error(`Unknown ACP session: ${params.sessionId}`);\n\t\t\tif (sessionCloseInFlight) throw new Error(`ACP session is closing: ${params.sessionId}`);\n\t\t\t// This prompt was admitted before the cancellation started; it is dropped\n\t\t\t// by the cancel rather than malformed, so report the protocol stop reason\n\t\t\t// instead of a request error.\n\t\t\tif (entry.cancelling) return { stopReason: \"cancelled\" satisfies AcpStopReason };\n\t\t\tif (entry.stopFailure) throw new Error(`ACP session stop failed: ${entry.stopFailure}`);\n\t\t\tif (entry.pendingTerminal?.failure) {\n\t\t\t\tthrow new Error(`ACP lifecycle reconciliation failed: ${entry.pendingTerminal.failure}`);\n\t\t\t}\n\t\t\tif (entry.abort) throw new Error(\"A prompt turn is already running for this ACP session\");\n\n\t\t\tconst abort = new AbortController();\n\t\t\tentry.abort = abort;\n\t\t\tlet resolvePromptTask!: () => void;\n\t\t\tconst promptTask = new Promise<void>((resolve) => {\n\t\t\t\tresolvePromptTask = resolve;\n\t\t\t});\n\t\t\tentry.promptTask = promptTask;\n\t\t\tentry.resolvePromptTask = resolvePromptTask;\n\t\t\t// Allocate the causal turn before the first await, not when an update is\n\t\t\t// delivered. This prevents late producer events becoming the next turn.\n\t\t\tconst promptTurnId = entry.producer.beginPrompt();\n\t\t\tlet responseBoundaryEmitted = false;\n\t\t\tlet terminalSettlementCancelled = false;\n\t\t\ttry {\n\t\t\t\tconst { text, images } = promptContent(params.prompt);\n\t\t\t\tconst priorMessages = turnBoundary(await connection.getMessages());\n\t\t\t\tif (abort.signal.aborted) {\n\t\t\t\t\tawait entry.producer.drain();\n\t\t\t\t\treturn { stopReason: \"cancelled\" satisfies AcpStopReason };\n\t\t\t\t}\n\t\t\t\t// A follow-up prompt can arrive while injected work (subagent replies,\n\t\t\t\t// heartbeats) keeps the resident session busy. ACP has no native queue\n\t\t\t\t// field, so queue the host turn behind that work with follow-up\n\t\t\t\t// semantics instead of rejecting it as \"Agent is already processing\".\n\t\t\t\tawait connection.promptAndWait(text, {\n\t\t\t\t\t...(images.length > 0 ? { images } : {}),\n\t\t\t\t\tstreamingBehavior: \"followUp\",\n\t\t\t\t\tqueueIfBusy: true,\n\t\t\t\t\tsignal: abort.signal,\n\t\t\t\t});\n\t\t\t\tif (abort.signal.aborted) {\n\t\t\t\t\tawait entry.producer.drain();\n\t\t\t\t\treturn { stopReason: \"cancelled\" satisfies AcpStopReason };\n\t\t\t\t}\n\t\t\t\tconst status = await connection.waitForHeadlessCompletion();\n\t\t\t\tif (abort.signal.aborted) {\n\t\t\t\t\tawait entry.producer.drain();\n\t\t\t\t\treturn { stopReason: \"cancelled\" satisfies AcpStopReason };\n\t\t\t\t}\n\t\t\t\tconst failure = await turnFailure(connection, priorMessages);\n\t\t\t\tif (abort.signal.aborted) {\n\t\t\t\t\tawait entry.producer.drain();\n\t\t\t\t\treturn { stopReason: \"cancelled\" satisfies AcpStopReason };\n\t\t\t\t}\n\t\t\t\tconst autonomous = autonomousMeta(status);\n\t\t\t\tconst liveChildren = await connection.getRlmChildSnapshots();\n\t\t\t\tif (abort.signal.aborted) {\n\t\t\t\t\tawait entry.producer.drain();\n\t\t\t\t\treturn { stopReason: \"cancelled\" satisfies AcpStopReason };\n\t\t\t\t}\n\t\t\t\tconst outcome = failure ? \"error\" : \"result\";\n\t\t\t\tlet terminalStatus = status;\n\t\t\t\tconst observedQuiescence = quiescenceMeta(status, liveChildren);\n\t\t\t\t// The roster is telemetry at the response cut, not proof of terminality:\n\t\t\t\t// a child can publish a terminal status before its result reaches the parent.\n\t\t\t\t// Every turn therefore finalizes through the strong settlement barrier.\n\t\t\t\tentry.producer.commitResponse(promptTurnId);\n\t\t\t\tresponseBoundaryEmitted = await entry.producer.publish(\n\t\t\t\t\t{\n\t\t\t\t\t\tsessionUpdate: \"session_info_update\",\n\t\t\t\t\t\t_meta: asmAgentMeta({ terminalQuiescenceExpected: true }),\n\t\t\t\t\t},\n\t\t\t\t\tpromptTurnId,\n\t\t\t\t\t\"responseBoundary\",\n\t\t\t\t\toutcome,\n\t\t\t\t);\n\t\t\t\tif (!responseBoundaryEmitted) throw new Error(\"Failed to publish ACP response boundary\");\n\t\t\t\tconst completionUpdateEmitted = await entry.producer.publish(\n\t\t\t\t\t{\n\t\t\t\t\t\tsessionUpdate: \"session_info_update\",\n\t\t\t\t\t\t_meta: asmAgentMeta({ ...(autonomous ? { autonomous } : {}), quiescence: observedQuiescence }),\n\t\t\t\t\t},\n\t\t\t\t\tpromptTurnId,\n\t\t\t\t\t\"event\",\n\t\t\t\t);\n\t\t\t\tif (!completionUpdateEmitted) throw new Error(\"Failed to publish ACP completion update\");\n\t\t\t\tawait entry.producer.drain();\n\t\t\t\tif (!abort.signal.aborted) {\n\t\t\t\t\tentry.producer.beginTerminalLifecycle(promptTurnId);\n\t\t\t\t\tconst pending: AcpPendingTerminal = { promptTurnId, boundary: priorMessages, outcome, abort };\n\t\t\t\t\tentry.pendingTerminal = pending;\n\t\t\t\t\tfinalizePendingTerminal(entry, pending);\n\t\t\t\t\tawait pending.task;\n\t\t\t\t\tterminalSettlementCancelled = abort.signal.aborted;\n\t\t\t\t\tif (pending.failure) {\n\t\t\t\t\t\tthrow new Error(`ACP lifecycle reconciliation failed: ${pending.failure}`);\n\t\t\t\t\t}\n\t\t\t\t\tif (pending.turnFailure) {\n\t\t\t\t\t\tthrow new Error(`asm-agent turn failed: ${pending.turnFailure}`);\n\t\t\t\t\t}\n\t\t\t\t\tterminalStatus = pending.status ?? status;\n\t\t\t\t}\n\t\t\t\tif (failure) throw new Error(`asm-agent turn failed: ${failure}`);\n\t\t\t\treturn {\n\t\t\t\t\tstopReason: acpStopReason({\n\t\t\t\t\t\tcancelled: terminalSettlementCancelled,\n\t\t\t\t\t\tautonomous: terminalStatus,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tif (abort.signal.aborted && !entry.producer.isResponseCommitted(promptTurnId)) {\n\t\t\t\t\tawait entry.producer.drain();\n\t\t\t\t\treturn { stopReason: \"cancelled\" satisfies AcpStopReason };\n\t\t\t\t}\n\t\t\t\t// Failed prompt/snapshot admission gets one correlated error boundary;\n\t\t\t\t// it never gets an invented terminal-quiescence update.\n\t\t\t\tif (!responseBoundaryEmitted) {\n\t\t\t\t\tawait entry.producer.publish(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsessionUpdate: \"session_info_update\",\n\t\t\t\t\t\t\t_meta: asmAgentMeta({ terminalQuiescenceExpected: false }),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpromptTurnId,\n\t\t\t\t\t\t\"responseBoundary\",\n\t\t\t\t\t\t\"error\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tawait entry.producer.drain();\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tentry.producer.finishPrompt(promptTurnId);\n\t\t\t\tif (entry.promptTask === promptTask) {\n\t\t\t\t\tentry.promptTask = undefined;\n\t\t\t\t\tentry.resolvePromptTask = undefined;\n\t\t\t\t\tresolvePromptTask();\n\t\t\t\t}\n\t\t\t\tif (entry.abort === abort && entry.pendingTerminal?.abort !== abort) entry.abort = undefined;\n\t\t\t}\n\t\t})\n\t\t.onRequest(\"session/close\", async (ctx: any) => {\n\t\t\tconst params = ctx.params as { sessionId: string };\n\t\t\tif (session?.id !== params.sessionId) {\n\t\t\t\tthrow new Error(`Unknown ACP session: ${params.sessionId}`);\n\t\t\t}\n\t\t\t// Stop real work, not just local bookkeeping: aborting only the local\n\t\t\t// controller leaves the agent running with nobody listening, so closing\n\t\t\t// must abort the connection the same way session/cancel does.\n\t\t\tif (sessionCloseInFlight) throw new Error(`ACP session is already closing: ${params.sessionId}`);\n\t\t\tsessionCloseInFlight = true;\n\t\t\tlet finishClose!: () => void;\n\t\t\tsessionCloseTask = new Promise<void>((resolve) => {\n\t\t\t\tfinishClose = resolve;\n\t\t\t});\n\t\t\tconst closing = session;\n\t\t\ttry {\n\t\t\t\tawait closing.cancelTask?.catch(() => undefined);\n\t\t\t\tclosing.cancelling = true;\n\t\t\t\tclosing.abort?.abort();\n\t\t\t\tconst pending = closing.pendingTerminal;\n\t\t\t\tconst promptTask = closing.promptTask;\n\t\t\t\ttry {\n\t\t\t\t\tconst inputPause = await acquireStopInputPause(closing);\n\t\t\t\t\tconst inputPauseKey = closing.inputPauseKey;\n\t\t\t\t\tif (!inputPauseKey) throw new Error(\"Missing ACP close input-pause key\");\n\t\t\t\t\tawait stopSessionWork(pending, promptTask);\n\t\t\t\t\tclosing.unsubscribe?.();\n\t\t\t\t\t// Keep the backing session fenced until a replacement ACP session is admitted.\n\t\t\t\t\tawait closing.producer.close();\n\t\t\t\t\t// Host credentials are already gone before kernel release runs. Do not\n\t\t\t\t\t// retain the ACP session slot if best-effort transport reaping fails.\n\t\t\t\t\tawait clearAcpMcpServers().catch(() => undefined);\n\t\t\t\t\tclosedInputPause = inputPause;\n\t\t\t\t\tclosedInputPauseKey = inputPauseKey;\n\t\t\t\t\tif (closing.inputPause === inputPause) {\n\t\t\t\t\t\tclosing.inputPause = undefined;\n\t\t\t\t\t\tclosing.inputPauseKey = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tclosing.stopFailure = undefined;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tclosing.stopFailure = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tif (session === closing) session = undefined;\n\t\t\t\treturn {};\n\t\t\t} finally {\n\t\t\t\tif (session === closing) closing.cancelling = false;\n\t\t\t\tfinishClose();\n\t\t\t\tsessionCloseTask = undefined;\n\t\t\t\tsessionCloseInFlight = false;\n\t\t\t}\n\t\t})\n\t\t.onNotification(\"session/cancel\", async (ctx: any) => {\n\t\t\tconst params = ctx.params as { sessionId: string };\n\t\t\twhile (sessionCloseInFlight) await sessionCloseTask;\n\t\t\t// Only cancel the addressed session: aborting unconditionally would kill\n\t\t\t// whichever turn happens to be running, and leave the real turn's\n\t\t\t// AbortController unmarked so it reports a wrong stop reason.\n\t\t\tif (session?.id !== params.sessionId) return;\n\t\t\tconst cancelling = session;\n\t\t\tif (cancelling.cancelling) {\n\t\t\t\tawait cancelling.cancelTask;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst abort = cancelling.abort;\n\t\t\tif (!abort && !cancelling.stopFailure && !cancelling.inputPauseRelease) return;\n\t\t\tconst pending = abort && cancelling.pendingTerminal?.abort === abort ? cancelling.pendingTerminal : undefined;\n\t\t\tconst promptTask = cancelling.promptTask;\n\t\t\tcancelling.cancelling = true;\n\t\t\tconst cancelTask = (async () => {\n\t\t\t\tabort?.abort();\n\t\t\t\ttry {\n\t\t\t\t\tconst inputPause = await acquireStopInputPause(cancelling);\n\t\t\t\t\tawait stopSessionWork(pending, promptTask);\n\t\t\t\t\tawait inputPause.release();\n\t\t\t\t\tif (cancelling.inputPause === inputPause) {\n\t\t\t\t\t\tcancelling.inputPause = undefined;\n\t\t\t\t\t\tcancelling.inputPauseKey = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (closedInputPause === inputPause) {\n\t\t\t\t\t\tclosedInputPause = undefined;\n\t\t\t\t\t\tclosedInputPauseKey = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tcancelling.inputPauseRelease = undefined;\n\t\t\t\t\tcancelling.stopFailure = undefined;\n\t\t\t\t\tif (pending && cancelling.pendingTerminal === pending) cancelling.pendingTerminal = undefined;\n\t\t\t\t\tif (abort && cancelling.abort === abort) cancelling.abort = undefined;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcancelling.stopFailure = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t})();\n\t\t\tcancelling.cancelTask = cancelTask;\n\t\t\ttry {\n\t\t\t\tawait cancelTask;\n\t\t\t} finally {\n\t\t\t\tif (cancelling.cancelTask === cancelTask) cancelling.cancelTask = undefined;\n\t\t\t\tcancelling.cancelling = false;\n\t\t\t}\n\t\t})\n\t\t.connect(stream);\n\n\t// Exit when the client disconnects (stdin EOF or a closed transport). Blocking\n\t// forever would leave an orphaned agent per run, which matters most for a\n\t// harness that spawns many short-lived sessions.\n\tawait handle.closed.catch(() => undefined);\n\tsession?.abort?.abort();\n\tsession?.unsubscribe?.();\n\tawait session?.inputPause?.release().catch(() => undefined);\n\tsession = undefined;\n\tawait closedInputPause?.release().catch(() => undefined);\n\tclosedInputPause = undefined;\n\tclosedInputPauseKey = undefined;\n\tawait clearAcpMcpServers().catch(() => undefined);\n\tawait connection.dispose().catch(() => undefined);\n\t// Only the real stdio entrypoint owns the process; a caller-supplied transport\n\t// (tests, embedding) must never have its host exited from under it.\n\tif (options.stream) return undefined as never;\n\treturn process.exit(0) as never;\n}\n"]}
1
+ {"version":3,"file":"acp-mode.js","sourceRoot":"","sources":["../../../src/modes/acp/acp-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,GAAG,MAAM,0BAA0B,CAAC;AAGhD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG1C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAC;AAO9F,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAA6B,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAA+B,YAAY,EAAE,MAAM,eAAe,CAAC;AACpG,OAAO,EAAsB,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEzE;;;;;;;;GAQG;AACH,SAAS,aAAa,GAA+B;IACpD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,OAAO,IAAI,cAAc,CAAa;QACrC,KAAK,CAAC,KAAK,EAAE;YACZ,cAAc,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAAA,CAC5F;KACD,CAAC,CAAC;AAAA,CACH;AAED,SAAS,2BAA2B,CAAC,IAAY,EAAU;IAC1D,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACxE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAAA,CACtD;AAED,SAAS,YAAY,CAAC,IAAY,EAAU;IAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,SAAiB,CAAC;IACtB,IAAI,CAAC;QACJ,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACR,mFAAmF;QACnF,SAAS,GAAG,QAAQ,CAAC;IACtB,CAAC;IACD,OAAO,2BAA2B,CAAC,SAAS,CAAC,CAAC;AAAA,CAC9C;AAED,SAAS,iBAAiB,CAAC,OAAgB,EAAE,SAAkB,EAAW;IACzE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAClE,MAAM,MAAM,GAAG,OAAkC,CAAC;IAClD,OAAO,CACN,MAAM,CAAC,OAAO,KAAK,KAAK;QACxB,MAAM,CAAC,EAAE,KAAK,SAAS;QACvB,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAClE,CAAC;AAAA,CACF;AAED,SAAS,OAAO,CAAC,IAAY,EAAE,KAAa,EAAW;IACtD,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,aAAa,KAAK,cAAc;QAAE,OAAO,IAAI,CAAC;IAElD,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,0EAA0E;QAC1E,6EAA6E;QAC7E,8EAA8E;QAC9E,MAAM,mBAAmB,GAAG,QAAQ,CAAC,GAAG,KAAK,EAAE,IAAI,QAAQ,CAAC,GAAG,KAAK,EAAE,CAAC;QACvE,MAAM,oBAAoB,GAAG,SAAS,CAAC,GAAG,KAAK,EAAE,IAAI,SAAS,CAAC,GAAG,KAAK,EAAE,CAAC;QAC1E,IAAI,mBAAmB,IAAI,oBAAoB;YAAE,OAAO,KAAK,CAAC;QAC9D,OAAO,QAAQ,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AAAA,CACD;AA+CD;;;;;;;;GAQG;AACH,MAAM,iBAAiB;IAgBJ,SAAS;IACT,MAAM;IAhBhB,aAAa,GAAG,CAAC,CAAC;IAClB,gBAAgB,GAAG,CAAC,CAAC;IACrB,kBAAkB,GAAG,CAAC,CAAC;IACvB,IAAI,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAC/B,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,wBAAwB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7C,sBAAsB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,sBAAsB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,cAAc,CAAgB;IACvC,gBAAgB,CAAc;IAC9B,aAAa,GAAG,KAAK,CAAC;IACtB,eAAe,GAAG,KAAK,CAAC;IAEhC,YACkB,SAAiB,EACjB,MAAsE,EACtF;yBAFgB,SAAS;sBACT,MAAM;QAEvB,0EAA0E;QAC1E,iEAAiE;QACjE,IAAI,CAAC,cAAc,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACpD,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;QAAA,CAChC,CAAC,CAAC;IAAA,CACH;IAED,wBAAwB,GAAS;QAChC,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO;QACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAAA,CACxB;IAED,uBAAuB,GAAS;QAC/B,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO;QACvD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAAA,CACxB;IAED,WAAW,GAAW;QACrB,IAAI,CAAC,kBAAkB,GAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC;QAClD,OAAO,IAAI,CAAC,kBAAkB,CAAC;IAAA,CAC/B;IAEO,WAAW,CAAC,MAAc,EAAQ;QACzC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,KAAK,MAAM,CAAC,EAAE,CAAC;YAC5F,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;IAAA,CACD;IAED,sBAAsB,CAAC,MAAc,EAAQ;QAC5C,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAAA,CACxC;IAED,YAAY,CAAC,MAAc,EAAQ;QAClC,IAAI,IAAI,CAAC,kBAAkB,KAAK,MAAM;YAAE,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACrC,OAAO;QACR,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAAA,CACzB;IAED,uBAAuB,CAAC,MAAc,EAAQ;QAC7C,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAAA,CACtE;IAED;;;;OAIG;IACH,cAAc,CAAC,MAAc,EAAQ;QACpC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAAA,CACxC;IAED,mBAAmB,CAAC,MAAc,EAAW;QAC5C,OAAO,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAAA,CAC/C;IAED,YAAY,CAAC,MAAc,EAAQ;QAClC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,KAAK,MAAM,CAAC,EAAE,CAAC;YAC3F,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,IAAI,CAAC,kBAAkB,KAAK,MAAM;YAAE,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;IAAA,CACpE;IAED,YAAY,CAAC,KAAkC,EAAU;QACxD,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1D,MAAM,YAAY,GAAG,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC;YACtD,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;YAClF,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAClF,IAAI,aAAa,EAAE,CAAC;gBACnB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC/C,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,YAAY,CAAC,EAAE,CAAC;oBACtF,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBACpD,CAAC;YACF,CAAC;iBAAM,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAChC,sEAAsE;gBACtE,4DAA4D;gBAC5D,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;YAC3D,CAAC;YACD,OAAO,MAAM,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC;IAAA,CAC/B;IAED,KAAK,CAAC,OAAO,CACZ,MAA+B,EAC/B,MAAc,EACd,KAA0D,EAC1D,OAA4B,EACT;QACnB,2EAA2E;QAC3E,wEAAwE;QACxE,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO,KAAK,CAAC;QACvC,MAAM,aAAa,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC;QAC3C,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAGtF,CAAC;QACF,MAAM,cAAc,GACnB,SAAS,CAAC,wBAAwB,CAAC,IAAI,OAAO,SAAS,CAAC,wBAAwB,CAAC,KAAK,QAAQ;YAC7F,CAAC,CAAE,SAAS,CAAC,wBAAwB,CAA6B;YAClE,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,gBAAgB,GAAG;YACxB,GAAG,MAAM;YACT,KAAK,EAAE;gBACN,GAAG,SAAS;gBACZ,CAAC,wBAAwB,CAAC,EAAE;oBAC3B,GAAG,cAAc;oBACjB,YAAY,EAAE,MAAM;oBACpB,aAAa;oBACb,KAAK;oBACL,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC/B;aACD;SACD,CAAC;QACF,qEAAqE;QACrE,iFAAiF;QACjF,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC;gBACJ,MAAM,IAAI,CAAC,cAAc,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,aAAa;oBAAE,OAAO;gBAChC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;oBAC3D,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,MAAM,EAAE,gBAAgB;iBACxB,CAAC,CAAC;gBACH,SAAS,GAAG,IAAI,CAAC;YAClB,CAAC;YAAC,MAAM,CAAC;gBACR,2EAA2E;YAC5E,CAAC;QAAA,CACD,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,IAAI,CAAC;QAChB,OAAO,SAAS,CAAC;IAAA,CACjB;IAED,KAAK,GAAkB;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC;IAAA,CACjB;IAED,KAAK,CAAC,KAAK,GAAkB;QAC5B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,IAAI,CAAC;QAChB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAAA,CAC3B;CACD;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,MAA0B,EAA4C;IAC5F,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QAClD,MAAM,KAAK,GAAG,KAOb,CAAC;QACF,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC3G,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5E,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,KAAK,CAAC,QAAQ,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClF,6DAA6D;YAC7D,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5E,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACF,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;AAAA,CAC1C;AAED,SAAS,cAAc,CAAC,MAAyC,EAAsC;IACtG,IAAI,CAAC,MAAM,EAAE,OAAO;QAAE,OAAO,SAAS,CAAC;IACvC,OAAO;QACN,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,WAAW,EAAE,2BAA2B,CAAC,MAAM,CAAC,IAAI,SAAS;QAC7D,WAAW,EAAE,MAAM,CAAC,eAAe,EAAE,QAAQ;KAC7C,CAAC;AAAA,CACF;AAED,SAAS,wBAAwB,CAAC,QAAqE,EAAU;IAChH,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;AAAA,CAC1G;AAED,SAAS,cAAc,CACtB,MAA6B,EAC7B,QAAqE,EACQ;IAC7E,OAAO;QACN,oBAAoB,EAAE,wBAAwB,CAAC,QAAQ,CAAC;QACxD,gCAAgC,EAAE,MAAM,CAAC,OAAO;YAC/C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,CAAC;YACxE,CAAC,CAAC,CAAC;KACJ,CAAC;AAAA,CACF;AAoBD,mFAAmF;AACnF,SAAS,UAAU,CAAC,OAAgB,EAAsB;IACzD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACtE,MAAM,MAAM,GAAG,OAAgG,CAAC;IAChH,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC3D,OAAO,IAAI,CAAC,SAAS,CAAC;QACrB,MAAM,CAAC,IAAI,IAAI,IAAI;QACnB,MAAM,CAAC,SAAS;QAChB,MAAM,CAAC,UAAU,IAAI,IAAI;QACzB,MAAM,CAAC,YAAY,IAAI,IAAI;KAC3B,CAAC,CAAC;AAAA,CACH;AAED,SAAS,YAAY,CAAC,QAAiC,EAAgB;IACtE,MAAM,UAAU,GAAG,IAAI,OAAO,EAAU,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;YAAE,SAAS;QAC9D,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxB,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,GAAG;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAAA,CAC5B;AAED,SAAS,SAAS,CAAC,OAAgB,EAAE,QAAsB,EAAW;IACrE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAClE,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAChC,OAAO,GAAG,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,CACnD;AAED;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,WAAW,CAAC,UAA2B,EAAE,QAAsB,EAA+B;IAC5G,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC;IAChD,KAAK,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,OAAO,EAAE,IAAI,KAAK,WAAW;YAAE,SAAS;QAC5C,6EAA6E;QAC7E,IAAI,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC;YAAE,OAAO,SAAS,CAAC;QACnD,MAAM,SAAS,GAAG,OAAyD,CAAC;QAC5E,IAAI,SAAS,CAAC,UAAU,KAAK,OAAO;YAAE,OAAO,SAAS,CAAC;QACvD,OAAO,SAAS,CAAC,YAAY,IAAI,0BAA0B,CAAC;IAC7D,CAAC;IACD,OAAO,SAAS,CAAC;AAAA,CACjB;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,WAAgC,EAAkB;IAClF,MAAM,UAAU,GAAG,IAAI,wBAAwB,CAAC,WAAW,CAAC,CAAC;IAC7D,OAAO,wBAAwB,CAAC,UAAU,EAAE;QAC3C,sBAAsB,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE,CAAC;KACnE,CAAC,CAAC;AAAA,CACH;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC7C,UAA2B,EAC3B,OAAO,GAAmB,EAAE,EACX;IACjB,iEAAiE;IACjE,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpD,cAAc,EAAE,CAAC;IAClB,CAAC;IACD,MAAM,kBAAkB,GACvB,UAAU,CAAC,qBAAqB,EAAE,EAAE,KAAK,IAAI;QAC7C,UAAU,CAAC,oBAAoB,KAAK,SAAS;QAC7C,UAAU,CAAC,oBAAoB,KAAK,SAAS,CAAC;IAC/C,MAAM,aAAa,GAAG,UAAU,EAAE,CAAC;IACnC,IAAI,iBAAiB,GAAa,EAAE,CAAC;IACrC,MAAM,kBAAkB,GAAG,KAAK,EAAE,WAAW,GAAG,iBAAiB,EAAiB,EAAE,CAAC;QACpF,IAAI,CAAC,kBAAkB,IAAI,CAAC,UAAU,CAAC,oBAAoB;YAAE,OAAO;QACpE,MAAM,UAAU,CAAC,oBAAoB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QAClE,iBAAiB,GAAG,EAAE,CAAC;IAAA,CACvB,CAAC;IACF,MAAM,oBAAoB,GAAG,KAAK,EAAE,OAAiC,EAAE,GAAW,EAAiB,EAAE,CAAC;QACrG,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,oEAAoE;YACpE,+DAA+D;YAC/D,MAAM,kBAAkB,EAAE,CAAC;QAC5B,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACnE,IAAI,CAAC,kBAAkB,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC;YAC7D,MAAM,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,8CAA8C,EAAE,CAAC,CAAC;QAClG,CAAC;QACD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC;YACJ,MAAM,UAAU,CAAC,oBAAoB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,2EAA2E;YAC3E,4EAA4E;YAC5E,MAAM,kBAAkB,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC7D,MAAM,KAAK,CAAC;QACb,CAAC;QACD,iBAAiB,GAAG,WAAW,CAAC;IAAA,CAChC,CAAC;IAEF,6EAA6E;IAC7E,0EAA0E;IAC1E,6EAA6E;IAC7E,+EAA+E;IAC/E,IAAI,OAAoC,CAAC;IACzC,IAAI,gBAA8D,CAAC;IACnE,IAAI,mBAAuC,CAAC;IAC5C,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,IAAI,oBAAoB,GAAG,KAAK,CAAC;IACjC,IAAI,gBAA2C,CAAC;IAChD,IAAI,KAAK,GAAG,KAAK,CAAC;IAElB,MAAM,UAAU,GACf,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAA+B,CAAC,CAAC;IAClH,2EAA2E;IAC3E,wEAAwE;IACxE,4EAA4E;IAC5E,4EAA4E;IAC5E,IAAI,yBAOQ,CAAC;IACb,MAAM,6BAA6B,GAAG,GAAS,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,yBAAyB,CAAC;QAC5C,yBAAyB,GAAG,SAAS,CAAC;QACtC,SAAS,EAAE,QAAQ,CAAC,uBAAuB,EAAE,CAAC;QAC9C,SAAS,EAAE,KAAK,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAC;IAAA,CACpG,CAAC;IAEF,MAAM,MAAM,GAAsB;QACjC,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,QAAQ,EAAE,IAAI,cAAc,CAAmB;YAC9C,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE;gBACpB,IAAI,MAAiE,CAAC;gBACtE,IAAI,CAAC;oBACJ,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;oBACzC,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC7B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,6BAA6B,EAAE,CAAC;oBAChC,MAAM,KAAK,CAAC;gBACb,CAAC;wBAAS,CAAC;oBACV,MAAM,EAAE,WAAW,EAAE,CAAC;gBACvB,CAAC;gBACD,IAAI,yBAAyB,IAAI,iBAAiB,CAAC,OAAO,EAAE,yBAAyB,CAAC,SAAS,CAAC,EAAE,CAAC;oBAClG,MAAM,SAAS,GAAG,yBAAyB,CAAC;oBAC5C,yBAAyB,GAAG,SAAS,CAAC;oBACtC,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;wBAC1B,IAAI,CAAC;4BACJ,MAAM,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;4BACrC,IAAI,SAAS,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU,EAAE,CAAC;gCACzD,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;gCACvC,SAAS,CAAC,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC;4BAC3C,CAAC;4BACD,IAAI,gBAAgB,KAAK,SAAS,CAAC,UAAU,EAAE,CAAC;gCAC/C,gBAAgB,GAAG,SAAS,CAAC;gCAC7B,mBAAmB,GAAG,SAAS,CAAC;4BACjC,CAAC;4BACD,SAAS,CAAC,KAAK,CAAC,iBAAiB,EAAE,OAAO,EAAE,CAAC;4BAC7C,SAAS,CAAC,KAAK,CAAC,iBAAiB,GAAG,SAAS,CAAC;wBAC/C,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BAChB,SAAS,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BACrF,SAAS,CAAC,KAAK,CAAC,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;wBAClD,CAAC;oBACF,CAAC;oBACD,SAAS,CAAC,QAAQ,CAAC,wBAAwB,EAAE,CAAC;gBAC/C,CAAC;YAAA,CACD;YACD,KAAK,CAAC,KAAK,GAAG;gBACb,IAAI,MAAiE,CAAC;gBACtE,IAAI,CAAC;oBACJ,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;oBACzC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;gBACtB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,6BAA6B,EAAE,CAAC;oBAChC,MAAM,KAAK,CAAC;gBACb,CAAC;wBAAS,CAAC;oBACV,MAAM,EAAE,WAAW,EAAE,CAAC;gBACvB,CAAC;gBACD,6BAA6B,EAAE,CAAC;YAAA,CAChC;YACD,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;gBACnB,IAAI,MAAiE,CAAC;gBACtE,IAAI,CAAC;oBACJ,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;oBACzC,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC5B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,6BAA6B,EAAE,CAAC;oBAChC,MAAM,KAAK,CAAC;gBACb,CAAC;wBAAS,CAAC;oBACV,MAAM,EAAE,WAAW,EAAE,CAAC;gBACvB,CAAC;gBACD,6BAA6B,EAAE,CAAC;YAAA,CAChC;SACD,CAAC;KACF,CAAC;IAEF,MAAM,4BAA4B,GAAG,KAAK,IAAmB,EAAE,CAAC;QAC/D,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,oBAAoB,EAAE,CAAC;QACzD,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7G,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;QAC5E,IAAI,MAAM,EAAE,MAAM,KAAK,UAAU;YAAE,MAAM,MAAM,CAAC,MAAM,CAAC;IAAA,CACvD,CAAC;IACF,MAAM,mBAAmB,GAAG,KAAK,IAAmB,EAAE,CAAC;QACtD,MAAM,UAAU,CAAC,kBAAkB,EAAE,CAAC;IAAA,CACtC,CAAC;IACF,MAAM,qBAAqB,GAAG,KAAK,EAAE,KAAsB,EAA6C,EAAE,CAAC;QAC1G,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC7B,MAAM,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC7D,KAAK,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACrC,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,IAAI,UAAU,EAAE,CAAC;QACrD,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAClE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;QACzB,OAAO,KAAK,CAAC;IAAA,CACb,CAAC;IAEF,MAAM,eAAe,GAAG,KAAK,EAAE,OAA4B,EAAE,UAA0B,EAAiB,EAAE,CAAC;QAC1G,MAAM,mBAAmB,EAAE,CAAC;QAC5B,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,4BAA4B,EAAE,CAAC;QACrC,MAAM,OAAO,EAAE,IAAI,CAAC;QACpB,MAAM,UAAU,CAAC;IAAA,CACjB,CAAC;IAEF,MAAM,uBAAuB,GAAG,CAAC,KAAsB,EAAE,OAA2B,EAAQ,EAAE,CAAC;QAC9F,OAAO,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO,IAAI,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,yBAAyB,CAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1F,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC,eAAe,KAAK,OAAO;oBAAE,OAAO;gBACnG,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACrE,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC,eAAe,KAAK,OAAO;oBAAE,OAAO;gBACnG,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,oBAAoB,EAAE,CAAC;gBAC7D,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC,eAAe,KAAK,OAAO;oBAAE,OAAO;gBACnG,MAAM,kBAAkB,GAAG,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;gBAChE,IAAI,kBAAkB,CAAC,oBAAoB,KAAK,CAAC;oBAAE,SAAS;gBAC5D,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;gBACxB,OAAO,CAAC,WAAW,GAAG,YAAY,CAAC;gBAEnC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBAClD,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;gBAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CACzC;oBACC,aAAa,EAAE,qBAAqB;oBACpC,KAAK,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;iBAC9F,EACD,OAAO,CAAC,YAAY,EACpB,oBAAoB,EACpB,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACxC,CAAC;gBACF,wEAAwE;gBACxE,yEAAyE;gBACzE,2DAA2D;gBAC3D,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC;oBAAE,OAAO;gBACjC,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAC7B,OAAO;YACR,CAAC;QAAA,CACD,CAAC,EAAE;aACF,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC;YAC1B,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,eAAe,KAAK,OAAO;gBAAE,OAAO;YAC9E,OAAO,CAAC,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAAA,CACzE,CAAC;aACD,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC7D,IAAI,KAAK,CAAC,eAAe,KAAK,OAAO;gBAAE,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC;YACzE,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK;gBAAE,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;QAAA,CAC3D,CAAC,CAAC;IAAA,CACJ,CAAC;IAEF,MAAM,MAAM,GAAG,GAAG;SAChB,KAAK,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;SAC5B,SAAS,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QACrC,eAAe,EAAE,GAAG,CAAC,gBAAgB;QACrC,iBAAiB,EAAE;YAClB,WAAW,EAAE,KAAK;YAClB,kBAAkB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE;YAC1D,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,oEAAoE;YACpE,+DAA+D;YAC/D,mBAAmB,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;SAClC;QACD,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE;QACtE,kEAAkE;QAClE,gDAAgD;QAChD,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC;KACvB,CAAC,CAAC;SACF,SAAS,CAAC,aAAa,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE,CAAC;QAC7C,wEAAwE;QACxE,sEAAsE;QACtE,qEAAqE;QACrE,IAAI,OAAO,IAAI,kBAAkB,IAAI,oBAAoB,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CACd,uDAAuD;gBACtD,sDAAsD,CACvD,CAAC;QACH,CAAC;QACD,kBAAkB,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,GAAG,CAAC,MAA+B,CAAC;YACnD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;YAC3C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAClD,MAAM,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,8CAA8C,EAAE,CAAC,CAAC;YAClG,CAAC;YACD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACZ,qEAAqE;gBACrE,kEAAkE;gBAClE,MAAM,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;gBACzC,KAAK,GAAG,IAAI,CAAC;YACd,CAAC;YACD,qEAAqE;YACrE,mEAAmE;YACnE,yEAAyE;YACzE,gEAAgE;YAChE,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC;YAChC,MAAM,SAAS,GAAG,MAAM,UAAU;iBAChC,QAAQ,EAAE;iBACV,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;iBAC1B,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACzB,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC;gBACpE,MAAM,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,qDAAqD,EAAE,CAAC,CAAC;YACzG,CAAC;YACD,MAAM,oBAAoB,CAAC,UAAU,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;YACxD,IAAI,WAA8D,CAAC;YACnE,IACC,OAAO,YAAY,KAAK,QAAQ;gBAChC,YAAY,CAAC,MAAM,GAAG,CAAC;gBACvB,SAAS;gBACT,CAAC,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,EAChC,CAAC;gBACF,WAAW,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YAC9D,CAAC;YACD,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;YAC/B,8EAA8E;YAC9E,sEAAsE;YACtE,8DAA8D;YAC9D,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YAC9D,IAAI,iBAAmD,CAAC;YACxD,IAAI,gBAAgB,EAAE,CAAC;gBACtB,IAAI,OAAoB,CAAC;gBACzB,IAAI,MAAiC,CAAC;gBACtC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE,CAAC;oBACpE,OAAO,GAAG,cAAc,CAAC;oBACzB,MAAM,GAAG,aAAa,CAAC;gBAAA,CACvB,CAAC,CAAC;gBACH,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBACpC,iBAAiB,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAClD,CAAC;YACD,MAAM,KAAK,GAAoB;gBAC9B,EAAE,EAAE,SAAS;gBACb,KAAK,EAAE,SAAS;gBAChB,UAAU,EAAE,KAAK;gBACjB,UAAU,EAAE,SAAS;gBACrB,WAAW,EAAE,SAAS;gBACtB,UAAU,EAAE,gBAAgB;gBAC5B,aAAa,EAAE,mBAAmB;gBAClC,iBAAiB;gBACjB,eAAe,EAAE,SAAS;gBAC1B,UAAU,EAAE,SAAS;gBACrB,iBAAiB,EAAE,SAAS;gBAC5B,WAAW,EAAE,SAAS;gBACtB,QAAQ;aACR,CAAC;YACF,qEAAqE;YACrE,2EAA2E;YAC3E,oEAAoE;YACpE,wEAAwE;YACxE,4BAA4B;YAC5B,MAAM,YAAY,GAAyB,EAAE,CAAC;YAC9C,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAmB,CAAC;YACpD,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;gBACnD,qEAAqE;gBACrE,kDAAkD;gBAClD,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;oBACzC,KAAK,QAAQ,CAAC,OAAO,CACpB,EAAE,aAAa,EAAE,qBAAqB,EAAE,KAAK,EAAE,YAAY,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,EAAE,EAC1F,CAAC,EACD,OAAO,CACP,CAAC;oBACF,OAAO;gBACR,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe;oBAAE,OAAO;gBAC3C,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;oBAC7C,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC/D,CAAC;gBACD,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAClD,KAAK,MAAM,MAAM,IAAI,yBAAyB,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC;oBAC3E,KAAK,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBAChD,CAAC;YAAA,CACD,CAAC,CAAC;YACH,IAAI,CAAC;gBACJ,2EAA2E;gBAC3E,wEAAwE;gBACxE,MAAM,eAAe,GAAG,MAAM,UAAU,CAAC,kBAAkB,EAAE,CAAC;gBAC9D,KAAK,MAAM,KAAK,IAAI,eAAe,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;oBACpD,IAAI,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;wBAAE,SAAS;oBAC7C,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;oBACtC,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAW,CAAC;oBAC3D,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;oBAC5C,KAAK,MAAM,MAAM,IAAI,yBAAyB,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC;wBACrE,KAAK,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;oBAChD,CAAC;gBACF,CAAC;YACF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,QAAQ,CAAC,uBAAuB,EAAE,CAAC;gBACnC,WAAW,EAAE,CAAC;gBACd,MAAM,kBAAkB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBAClD,MAAM,KAAK,CAAC;YACb,CAAC;YACD,4EAA4E;YAC5E,kEAAkE;YAClE,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;YAChC,OAAO,GAAG,KAAK,CAAC;YAChB,MAAM,QAAQ,GAAG;gBAChB,SAAS;gBACT,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrE,CAAC;YACF,qEAAqE;YACrE,gEAAgE;YAChE,yBAAyB,GAAG;gBAC3B,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,KAAK;gBACL,UAAU,EAAE,gBAAgB;aAC5B,CAAC;YACF,OAAO,QAAQ,CAAC;QACjB,CAAC;gBAAS,CAAC;YACV,kBAAkB,GAAG,KAAK,CAAC;QAC5B,CAAC;IAAA,CACD,CAAC;SACD,SAAS,CAAC,gBAAgB,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,GAAG,CAAC,MAA2D,CAAC;QAC/E,MAAM,KAAK,GAAG,OAAO,EAAE,EAAE,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACxE,IAAI,oBAAoB;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACzF,IAAI,KAAK,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACxF,MAAM,KAAK,CAAC,iBAAiB,EAAE,OAAO,CAAC;QACvC,2EAA2E;QAC3E,6EAA6E;QAC7E,MAAM,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC;QAClC,IAAI,OAAO,KAAK,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACnF,IAAI,oBAAoB;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACzF,0EAA0E;QAC1E,0EAA0E;QAC1E,8BAA8B;QAC9B,IAAI,KAAK,CAAC,UAAU;YAAE,OAAO,EAAE,UAAU,EAAE,WAAmC,EAAE,CAAC;QACjF,IAAI,KAAK,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACxF,IAAI,KAAK,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,wCAAwC,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,IAAI,KAAK,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAE1F,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QACpB,IAAI,iBAA8B,CAAC;QACnC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACjD,iBAAiB,GAAG,OAAO,CAAC;QAAA,CAC5B,CAAC,CAAC;QACH,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;QAC9B,KAAK,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC5C,yEAAyE;QACzE,wEAAwE;QACxE,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAClD,IAAI,uBAAuB,GAAG,KAAK,CAAC;QACpC,IAAI,2BAA2B,GAAG,KAAK,CAAC;QACxC,IAAI,CAAC;YACJ,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACtD,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;YACnE,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC1B,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAC7B,OAAO,EAAE,UAAU,EAAE,WAAmC,EAAE,CAAC;YAC5D,CAAC;YACD,uEAAuE;YACvE,uEAAuE;YACvE,gEAAgE;YAChE,sEAAsE;YACtE,MAAM,UAAU,CAAC,aAAa,CAAC,IAAI,EAAE;gBACpC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxC,iBAAiB,EAAE,UAAU;gBAC7B,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,KAAK,CAAC,MAAM;aACpB,CAAC,CAAC;YACH,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC1B,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAC7B,OAAO,EAAE,UAAU,EAAE,WAAmC,EAAE,CAAC;YAC5D,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,yBAAyB,EAAE,CAAC;YAC5D,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC1B,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAC7B,OAAO,EAAE,UAAU,EAAE,WAAmC,EAAE,CAAC;YAC5D,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;YAC7D,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC1B,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAC7B,OAAO,EAAE,UAAU,EAAE,WAAmC,EAAE,CAAC;YAC5D,CAAC;YACD,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,oBAAoB,EAAE,CAAC;YAC7D,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC1B,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAC7B,OAAO,EAAE,UAAU,EAAE,WAAmC,EAAE,CAAC;YAC5D,CAAC;YACD,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC7C,IAAI,cAAc,GAAG,MAAM,CAAC;YAC5B,MAAM,kBAAkB,GAAG,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAChE,yEAAyE;YACzE,8EAA8E;YAC9E,wEAAwE;YACxE,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;YAC5C,uBAAuB,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,OAAO,CACrD;gBACC,aAAa,EAAE,qBAAqB;gBACpC,KAAK,EAAE,YAAY,CAAC,EAAE,0BAA0B,EAAE,IAAI,EAAE,CAAC;aACzD,EACD,YAAY,EACZ,kBAAkB,EAClB,OAAO,CACP,CAAC;YACF,IAAI,CAAC,uBAAuB;gBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACzF,MAAM,uBAAuB,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,OAAO,CAC3D;gBACC,aAAa,EAAE,qBAAqB;gBACpC,KAAK,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;aAC9F,EACD,YAAY,EACZ,OAAO,CACP,CAAC;YACF,IAAI,CAAC,uBAAuB;gBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACzF,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC3B,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;gBACpD,MAAM,OAAO,GAAuB,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;gBAC9F,KAAK,CAAC,eAAe,GAAG,OAAO,CAAC;gBAChC,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACxC,MAAM,OAAO,CAAC,IAAI,CAAC;gBACnB,2BAA2B,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;gBACnD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACrB,MAAM,IAAI,KAAK,CAAC,wCAAwC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC5E,CAAC;gBACD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;oBACzB,MAAM,IAAI,KAAK,CAAC,0BAA0B,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;gBAClE,CAAC;gBACD,cAAc,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;YAC3C,CAAC;YACD,IAAI,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC;YAClE,OAAO;gBACN,UAAU,EAAE,aAAa,CAAC;oBACzB,SAAS,EAAE,2BAA2B;oBACtC,UAAU,EAAE,cAAc;iBAC1B,CAAC;aACF,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC/E,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAC7B,OAAO,EAAE,UAAU,EAAE,WAAmC,EAAE,CAAC;YAC5D,CAAC;YACD,uEAAuE;YACvE,wDAAwD;YACxD,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAC9B,MAAM,KAAK,CAAC,QAAQ,CAAC,OAAO,CAC3B;oBACC,aAAa,EAAE,qBAAqB;oBACpC,KAAK,EAAE,YAAY,CAAC,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC;iBAC1D,EACD,YAAY,EACZ,kBAAkB,EAClB,OAAO,CACP,CAAC;YACH,CAAC;YACD,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YAC7B,MAAM,KAAK,CAAC;QACb,CAAC;gBAAS,CAAC;YACV,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAC1C,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBACrC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;gBAC7B,KAAK,CAAC,iBAAiB,GAAG,SAAS,CAAC;gBACpC,iBAAiB,EAAE,CAAC;YACrB,CAAC;YACD,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC,eAAe,EAAE,KAAK,KAAK,KAAK;gBAAE,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;QAC9F,CAAC;IAAA,CACD,CAAC;SACD,SAAS,CAAC,eAAe,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,MAA+B,CAAC;QACnD,IAAI,OAAO,EAAE,EAAE,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,sEAAsE;QACtE,wEAAwE;QACxE,8DAA8D;QAC9D,IAAI,oBAAoB;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACjG,oBAAoB,GAAG,IAAI,CAAC;QAC5B,IAAI,WAAwB,CAAC;QAC7B,gBAAgB,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACjD,WAAW,GAAG,OAAO,CAAC;QAAA,CACtB,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC;YACJ,MAAM,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACjD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;YAC1B,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC;YACxC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;YACtC,IAAI,CAAC;gBACJ,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBACxD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;gBAC5C,IAAI,CAAC,aAAa;oBAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;gBACzE,MAAM,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;gBAC3C,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,+EAA+E;gBAC/E,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAC/B,uEAAuE;gBACvE,sEAAsE;gBACtE,MAAM,kBAAkB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBAClD,gBAAgB,GAAG,UAAU,CAAC;gBAC9B,mBAAmB,GAAG,aAAa,CAAC;gBACpC,IAAI,OAAO,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;oBACvC,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;oBAC/B,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;gBACnC,CAAC;gBACD,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;YACjC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,WAAW,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC7E,MAAM,KAAK,CAAC;YACb,CAAC;YACD,IAAI,OAAO,KAAK,OAAO;gBAAE,OAAO,GAAG,SAAS,CAAC;YAC7C,OAAO,EAAE,CAAC;QACX,CAAC;gBAAS,CAAC;YACV,IAAI,OAAO,KAAK,OAAO;gBAAE,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;YACpD,WAAW,EAAE,CAAC;YACd,gBAAgB,GAAG,SAAS,CAAC;YAC7B,oBAAoB,GAAG,KAAK,CAAC;QAC9B,CAAC;IAAA,CACD,CAAC;SACD,cAAc,CAAC,gBAAgB,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,GAAG,CAAC,MAA+B,CAAC;QACnD,OAAO,oBAAoB;YAAE,MAAM,gBAAgB,CAAC;QACpD,yEAAyE;QACzE,kEAAkE;QAClE,8DAA8D;QAC9D,IAAI,OAAO,EAAE,EAAE,KAAK,MAAM,CAAC,SAAS;YAAE,OAAO;QAC7C,MAAM,UAAU,GAAG,OAAO,CAAC;QAC3B,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;YAC3B,MAAM,UAAU,CAAC,UAAU,CAAC;YAC5B,OAAO;QACR,CAAC;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC,iBAAiB;YAAE,OAAO;QAC/E,MAAM,OAAO,GAAG,KAAK,IAAI,UAAU,CAAC,eAAe,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9G,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;QACzC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC;QAC7B,MAAM,UAAU,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/B,KAAK,EAAE,KAAK,EAAE,CAAC;YACf,IAAI,CAAC;gBACJ,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,UAAU,CAAC,CAAC;gBAC3D,MAAM,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;gBAC3C,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;gBAC3B,IAAI,UAAU,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;oBAC1C,UAAU,CAAC,UAAU,GAAG,SAAS,CAAC;oBAClC,UAAU,CAAC,aAAa,GAAG,SAAS,CAAC;gBACtC,CAAC;gBACD,IAAI,gBAAgB,KAAK,UAAU,EAAE,CAAC;oBACrC,gBAAgB,GAAG,SAAS,CAAC;oBAC7B,mBAAmB,GAAG,SAAS,CAAC;gBACjC,CAAC;gBACD,UAAU,CAAC,iBAAiB,GAAG,SAAS,CAAC;gBACzC,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC;gBACnC,IAAI,OAAO,IAAI,UAAU,CAAC,eAAe,KAAK,OAAO;oBAAE,UAAU,CAAC,eAAe,GAAG,SAAS,CAAC;gBAC9F,IAAI,KAAK,IAAI,UAAU,CAAC,KAAK,KAAK,KAAK;oBAAE,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;YACvE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,UAAU,CAAC,WAAW,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChF,MAAM,KAAK,CAAC;YACb,CAAC;QAAA,CACD,CAAC,EAAE,CAAC;QACL,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC;QACnC,IAAI,CAAC;YACJ,MAAM,UAAU,CAAC;QAClB,CAAC;gBAAS,CAAC;YACV,IAAI,UAAU,CAAC,UAAU,KAAK,UAAU;gBAAE,UAAU,CAAC,UAAU,GAAG,SAAS,CAAC;YAC5E,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;QAC/B,CAAC;IAAA,CACD,CAAC;SACD,OAAO,CAAC,MAAM,CAAC,CAAC;IAElB,+EAA+E;IAC/E,0EAA0E;IAC1E,iDAAiD;IACjD,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC3C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACxB,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC;IACzB,MAAM,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5D,OAAO,GAAG,SAAS,CAAC;IACpB,MAAM,gBAAgB,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACzD,gBAAgB,GAAG,SAAS,CAAC;IAC7B,mBAAmB,GAAG,SAAS,CAAC;IAChC,MAAM,kBAAkB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAClD,+EAA+E;IAC/E,oEAAoE;IACpE,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,SAAkB,CAAC;IAC9C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAU,CAAC;AAAA,CAChC","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { realpathSync, statSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { Readable } from \"node:stream\";\nimport * as acp from \"@agentclientprotocol/sdk\";\nimport type { AgentMessage } from \"@asm-agent/agent\";\nimport type { ImageContent } from \"@asm-agent/ai\";\nimport { VERSION } from \"../../config.js\";\nimport type { AgentSessionRuntime } from \"../../core/agent-session-runtime.js\";\nimport type { AgentAutonomousStatus } from \"../../core/autonomous.js\";\nimport { takeOverStdout, writeRawStdout } from \"../../core/output-guard.js\";\nimport { InProcessAgentConnection } from \"../agent-connection/in-process-agent-connection.js\";\nimport type {\n\tAgentConnection,\n\tAgentConnectionRlmChildAgentSnapshot,\n\tAgentConnectionSessionEvent,\n\tAgentConnectionSessionInputPause,\n} from \"../agent-connection/types.js\";\nimport { latestAutonomousGateAttempt } from \"../headless-completion.js\";\nimport { type AcpEventMappingState, acpUpdatesForSessionEvent } from \"./acp-events.js\";\nimport { resolveAcpMcpServers } from \"./acp-mcp.js\";\nimport { ASM_AGENT_META_NAMESPACE, type AsmAgentAutonomousMeta, asmAgentMeta } from \"./acp-meta.js\";\nimport { type AcpStopReason, acpStopReason } from \"./acp-stop-reason.js\";\n\n/**\n * ACP frames must reach real stdout.\n *\n * Startup calls `takeOverStdout()` for every non-interactive mode, which\n * redirects `process.stdout.write` to stderr so stray logging cannot corrupt a\n * machine-readable stream. Handing `process.stdout` to the SDK would therefore\n * publish the whole protocol on stderr; write through the raw escape hatch the\n * guard exposes, exactly as RPC mode does.\n */\nfunction rawStdoutSink(): WritableStream<Uint8Array> {\n\tconst decoder = new TextDecoder();\n\treturn new WritableStream<Uint8Array>({\n\t\twrite(chunk) {\n\t\t\twriteRawStdout(typeof chunk === \"string\" ? chunk : decoder.decode(chunk, { stream: true }));\n\t\t},\n\t});\n}\n\nfunction normalizeWindowsDriveLetter(path: string): string {\n\tif (process.platform !== \"win32\" || !/^[A-Z]:/i.test(path)) return path;\n\treturn path.slice(0, 1).toLowerCase() + path.slice(1);\n}\n\nfunction canonicalCwd(path: string): string {\n\tconst resolved = resolve(path);\n\tlet canonical: string;\n\ttry {\n\t\tcanonical = realpathSync(resolved);\n\t} catch {\n\t\t// Preserve the previous lexical comparison when a path is missing or inaccessible.\n\t\tcanonical = resolved;\n\t}\n\treturn normalizeWindowsDriveLetter(canonical);\n}\n\nfunction isJsonRpcResponse(message: unknown, requestId: unknown): boolean {\n\tif (typeof message !== \"object\" || message === null) return false;\n\tconst record = message as Record<string, unknown>;\n\treturn (\n\t\trecord.jsonrpc === \"2.0\" &&\n\t\trecord.id === requestId &&\n\t\t!Object.hasOwn(record, \"method\") &&\n\t\tObject.hasOwn(record, \"result\") !== Object.hasOwn(record, \"error\")\n\t);\n}\n\nfunction sameCwd(left: string, right: string): boolean {\n\tconst canonicalLeft = canonicalCwd(left);\n\tconst canonicalRight = canonicalCwd(right);\n\tif (canonicalLeft === canonicalRight) return true;\n\n\ttry {\n\t\tconst leftStat = statSync(canonicalLeft, { bigint: true });\n\t\tconst rightStat = statSync(canonicalRight, { bigint: true });\n\t\t// Either half being zero makes the pair untrustworthy: Windows path-based\n\t\t// stat can report dev 0 with a real ino, and comparing ino alone would match\n\t\t// distinct directories on different volumes, since file IDs are volume-local.\n\t\tconst leftIdentityMissing = leftStat.dev === 0n || leftStat.ino === 0n;\n\t\tconst rightIdentityMissing = rightStat.dev === 0n || rightStat.ino === 0n;\n\t\tif (leftIdentityMissing || rightIdentityMissing) return false;\n\t\treturn leftStat.dev === rightStat.dev && leftStat.ino === rightStat.ino;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport interface AcpModeOptions {\n\t/** Bind headless extensions once the connection is live (in-process mode). */\n\tbindHeadlessExtensions?: () => Promise<void>;\n\t/**\n\t * Transport override. Defaults to NDJSON over stdio; tests supply an\n\t * in-memory stream pair so the protocol runs without a subprocess.\n\t */\n\tstream?: ReturnType<typeof acp.ndJsonStream>;\n\t/** Skip claiming stdout when the caller supplies its own transport. */\n\townStdout?: boolean;\n}\n\ninterface AcpPendingTerminal {\n\tpromptTurnId: number;\n\tboundary: TurnBoundary;\n\toutcome: \"result\" | \"error\";\n\tabort: AbortController;\n\tstatus?: AgentAutonomousStatus;\n\tturnFailure?: string;\n\tfailure?: string;\n\ttask?: Promise<void>;\n}\n\ninterface AcpInputPauseRelease {\n\tpromise: Promise<void>;\n\tresolve(): void;\n\treject(error: unknown): void;\n}\n\ninterface AcpSessionEntry {\n\tid: string;\n\tabort: AbortController | undefined;\n\tcancelling: boolean;\n\tcancelTask: Promise<void> | undefined;\n\tstopFailure: string | undefined;\n\tinputPause: AgentConnectionSessionInputPause | undefined;\n\tinputPauseKey: string | undefined;\n\tinputPauseRelease: AcpInputPauseRelease | undefined;\n\tpendingTerminal: AcpPendingTerminal | undefined;\n\tpromptTask: Promise<void> | undefined;\n\tresolvePromptTask: (() => void) | undefined;\n\tunsubscribe: (() => void) | undefined;\n\tproducer: AcpUpdateProducer;\n}\n\n/**\n * The sole producer of ACP session updates for one ACP session.\n *\n * ACP notifications are asynchronous, so assigning an id at each call site is\n * insufficient: detached calls can be observed out of order. This producer\n * serializes publication and stamps the *delivered* order. Its phase/outcome\n * fields are application metadata, deliberately independent of ACP stop\n * reasons such as `end_turn`.\n */\nclass AcpUpdateProducer {\n\tprivate eventSequence = 0;\n\tprivate nextPromptTurnId = 0;\n\tprivate activePromptTurnId = 0;\n\tprivate tail: Promise<void> = Promise.resolve();\n\tprivate readonly childOriginTurnIds = new Map<string, number>();\n\tprivate readonly terminalChildOriginTurns = new Set<number>();\n\tprivate readonly responseCommittedTurns = new Set<number>();\n\tprivate readonly terminalLifecycleTurns = new Set<number>();\n\tprivate readonly finishedPromptTurns = new Set<number>();\n\tprivate readonly admissionReady: Promise<void>;\n\tprivate releaseAdmission!: () => void;\n\tprivate admissionOpen = false;\n\tprivate admissionClosed = false;\n\n\tconstructor(\n\t\tprivate readonly sessionId: string,\n\t\tprivate readonly client: { notify(method: unknown, params: unknown): Promise<unknown> },\n\t) {\n\t\t// Subscribe before the initial snapshot, but do not let that subscription\n\t\t// publish a session-bound update before session/new has replied.\n\t\tthis.admissionReady = new Promise<void>((resolve) => {\n\t\t\tthis.releaseAdmission = resolve;\n\t\t});\n\t}\n\n\tcommitSessionNewResponse(): void {\n\t\tif (this.admissionClosed) return;\n\t\tthis.admissionOpen = true;\n\t\tthis.releaseAdmission();\n\t}\n\n\tfailSessionNewAdmission(): void {\n\t\tif (this.admissionOpen || this.admissionClosed) return;\n\t\tthis.admissionClosed = true;\n\t\tthis.releaseAdmission();\n\t}\n\n\tbeginPrompt(): number {\n\t\tthis.activePromptTurnId = ++this.nextPromptTurnId;\n\t\treturn this.activePromptTurnId;\n\t}\n\n\tprivate cleanupTurn(turnId: number): void {\n\t\tthis.responseCommittedTurns.delete(turnId);\n\t\tif (![...this.childOriginTurnIds.values()].some((originTurnId) => originTurnId === turnId)) {\n\t\t\tthis.terminalChildOriginTurns.delete(turnId);\n\t\t}\n\t}\n\n\tbeginTerminalLifecycle(turnId: number): void {\n\t\tthis.terminalLifecycleTurns.add(turnId);\n\t}\n\n\tfinishPrompt(turnId: number): void {\n\t\tif (this.activePromptTurnId === turnId) this.activePromptTurnId = 0;\n\t\tif (this.terminalLifecycleTurns.has(turnId)) {\n\t\t\tthis.finishedPromptTurns.add(turnId);\n\t\t\treturn;\n\t\t}\n\t\tthis.cleanupTurn(turnId);\n\t}\n\n\tfinishTerminalLifecycle(turnId: number): void {\n\t\tthis.terminalLifecycleTurns.delete(turnId);\n\t\tif (this.finishedPromptTurns.delete(turnId)) this.cleanupTurn(turnId);\n\t}\n\n\t/**\n\t * Cut a scoreable terminal boundary before it is queued. A subscription\n\t * callback after this point is connection-scoped, never appended to a turn\n\t * that an evaluator may treat as terminal.\n\t */\n\tcommitResponse(turnId: number): void {\n\t\tthis.responseCommittedTurns.add(turnId);\n\t}\n\n\tisResponseCommitted(turnId: number): boolean {\n\t\treturn this.responseCommittedTurns.has(turnId);\n\t}\n\n\tsealTerminal(turnId: number): void {\n\t\tthis.commitResponse(turnId);\n\t\tif ([...this.childOriginTurnIds.values()].some((originTurnId) => originTurnId === turnId)) {\n\t\t\tthis.terminalChildOriginTurns.add(turnId);\n\t\t}\n\t\tif (this.activePromptTurnId === turnId) this.activePromptTurnId = 0;\n\t}\n\n\tturnForEvent(event: AgentConnectionSessionEvent): number {\n\t\tif (event.type === \"rlm_child_update\") {\n\t\t\tconst known = this.childOriginTurnIds.get(event.child.id);\n\t\t\tconst originTurnId = known ?? this.activePromptTurnId;\n\t\t\tconst turnId = this.terminalChildOriginTurns.has(originTurnId) ? 0 : originTurnId;\n\t\t\tconst childFinished = [\"done\", \"error\", \"cancelled\"].includes(event.child.status);\n\t\t\tif (childFinished) {\n\t\t\t\tthis.childOriginTurnIds.delete(event.child.id);\n\t\t\t\tif (![...this.childOriginTurnIds.values()].some((origin) => origin === originTurnId)) {\n\t\t\t\t\tthis.terminalChildOriginTurns.delete(originTurnId);\n\t\t\t\t}\n\t\t\t} else if (known === undefined) {\n\t\t\t\t// Remember its initial origin, including connection scope, so a later\n\t\t\t\t// child update cannot be relabelled by a subsequent prompt.\n\t\t\t\tthis.childOriginTurnIds.set(event.child.id, originTurnId);\n\t\t\t}\n\t\t\treturn turnId;\n\t\t}\n\t\treturn this.activePromptTurnId;\n\t}\n\n\tasync publish(\n\t\tupdate: Record<string, unknown>,\n\t\tturnId: number,\n\t\tphase: \"event\" | \"responseBoundary\" | \"terminalQuiescence\",\n\t\toutcome?: \"result\" | \"error\",\n\t): Promise<boolean> {\n\t\t// Admission is synchronous through the tail assignment below: close either\n\t\t// rejects this call here or drains the update after it joins the queue.\n\t\tif (this.admissionClosed) return false;\n\t\tconst eventSequence = ++this.eventSequence;\n\t\tconst priorMeta = (update._meta && typeof update._meta === \"object\" ? update._meta : {}) as Record<\n\t\t\tstring,\n\t\t\tunknown\n\t\t>;\n\t\tconst priorPrimeMeta =\n\t\t\tpriorMeta[ASM_AGENT_META_NAMESPACE] && typeof priorMeta[ASM_AGENT_META_NAMESPACE] === \"object\"\n\t\t\t\t? (priorMeta[ASM_AGENT_META_NAMESPACE] as Record<string, unknown>)\n\t\t\t\t: {};\n\t\tconst correlatedUpdate = {\n\t\t\t...update,\n\t\t\t_meta: {\n\t\t\t\t...priorMeta,\n\t\t\t\t[ASM_AGENT_META_NAMESPACE]: {\n\t\t\t\t\t...priorPrimeMeta,\n\t\t\t\t\tpromptTurnId: turnId,\n\t\t\t\t\teventSequence,\n\t\t\t\t\tphase,\n\t\t\t\t\t...(outcome ? { outcome } : {}),\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t\t// Keep the chain alive after a failed notification, while preserving\n\t\t// the order of every later notification and allowing callers to await its drain.\n\t\tlet published = false;\n\t\tthis.tail = this.tail.then(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.admissionReady;\n\t\t\t\tif (!this.admissionOpen) return;\n\t\t\t\tawait this.client.notify(acp.methods.client.session.update, {\n\t\t\t\t\tsessionId: this.sessionId,\n\t\t\t\t\tupdate: correlatedUpdate,\n\t\t\t\t});\n\t\t\t\tpublished = true;\n\t\t\t} catch {\n\t\t\t\t// Drop only this update; a rejected queue tail would strand later updates.\n\t\t\t}\n\t\t});\n\t\tawait this.tail;\n\t\treturn published;\n\t}\n\n\tdrain(): Promise<void> {\n\t\treturn this.tail;\n\t}\n\n\tasync close(): Promise<void> {\n\t\tthis.admissionClosed = true;\n\t\tthis.releaseAdmission();\n\t\tawait this.tail;\n\t\tthis.admissionOpen = false;\n\t}\n}\n\n/**\n * Split ACP prompt blocks into the text and images asm-agent accepts.\n *\n * Image and embedded-resource blocks are advertised in `initialize`, so they must\n * actually reach the model: dropping them silently would let a client believe a\n * pasted screenshot was accepted.\n */\nfunction promptContent(blocks: readonly unknown[]): { text: string; images: ImageContent[] } {\n\tconst texts: string[] = [];\n\tconst images: ImageContent[] = [];\n\tfor (const block of blocks) {\n\t\tif (!block || typeof block !== \"object\") continue;\n\t\tconst typed = block as {\n\t\t\ttype?: string;\n\t\t\ttext?: string;\n\t\t\tdata?: string;\n\t\t\tmimeType?: string;\n\t\t\turi?: string;\n\t\t\tresource?: { text?: string; uri?: string };\n\t\t};\n\t\tif (typed.type === \"text\" && typeof typed.text === \"string\") {\n\t\t\ttexts.push(typed.text);\n\t\t} else if (typed.type === \"image\" && typeof typed.data === \"string\" && typeof typed.mimeType === \"string\") {\n\t\t\timages.push({ type: \"image\", data: typed.data, mimeType: typed.mimeType });\n\t\t} else if (typed.type === \"resource\" && typeof typed.resource?.text === \"string\") {\n\t\t\t// Embedded text resources become context the model can read.\n\t\t\tconst uri = typed.resource.uri ? `${typed.resource.uri}\\n` : \"\";\n\t\t\ttexts.push(`${uri}${typed.resource.text}`);\n\t\t} else if (typed.type === \"resource_link\" && typeof typed.uri === \"string\") {\n\t\t\ttexts.push(typed.uri);\n\t\t}\n\t}\n\treturn { text: texts.join(\"\\n\"), images };\n}\n\nfunction autonomousMeta(status: AgentAutonomousStatus | undefined): AsmAgentAutonomousMeta | undefined {\n\tif (!status?.enabled) return undefined;\n\treturn {\n\t\tenabled: status.enabled,\n\t\tcontinuationsUsed: status.continuationsUsed,\n\t\tturnsUsed: status.turnsUsed,\n\t\ttokensUsed: status.tokensUsed,\n\t\tgateAttempt: latestAutonomousGateAttempt(status) || undefined,\n\t\tgateFailure: status.lastGateFailure?.exitText,\n\t};\n}\n\nfunction outstandingSubagentCount(children: readonly AgentConnectionRlmChildAgentSnapshot[] | undefined): number {\n\treturn (children ?? []).filter((child) => child.status === \"queued\" || child.status === \"running\").length;\n}\n\nfunction quiescenceMeta(\n\tstatus: AgentAutonomousStatus,\n\tchildren: readonly AgentConnectionRlmChildAgentSnapshot[] | undefined,\n): { outstandingSubagents: number; remainingAutonomousContinuations: number } {\n\treturn {\n\t\toutstandingSubagents: outstandingSubagentCount(children),\n\t\tremainingAutonomousContinuations: status.enabled\n\t\t\t? Math.max(0, status.limits.maxContinuations - status.continuationsUsed)\n\t\t\t: 0,\n\t};\n}\n\n/**\n * The transcript as it stood before a turn started, recorded so the turn's own\n * messages can be told apart from everything older.\n *\n * A pre-turn message *count* cannot do that job: auto-compaction can fire during\n * a turn and rebuild `state.messages` (it filters, slices, and re-materializes\n * persisted entries), so this turn's failure can end up at a lower index than\n * the count taken before prompting. Membership is tracked by things a rebuild\n * preserves instead — the message objects themselves, plus a content key for\n * transports that hand back fresh copies (daemon RPC re-parses JSON, so identity\n * does not survive it) and for compaction paths that re-materialize a kept\n * message from its persisted entry with its original timestamp.\n */\ninterface TurnBoundary {\n\tidentities: WeakSet<object>;\n\tkeys: Set<string>;\n}\n\n/** Key for a kept message: compaction drops messages, it does not rewrite them. */\nfunction messageKey(message: unknown): string | undefined {\n\tif (typeof message !== \"object\" || message === null) return undefined;\n\tconst record = message as { role?: unknown; timestamp?: unknown; stopReason?: unknown; errorMessage?: unknown };\n\tif (typeof record.timestamp !== \"number\") return undefined;\n\treturn JSON.stringify([\n\t\trecord.role ?? null,\n\t\trecord.timestamp,\n\t\trecord.stopReason ?? null,\n\t\trecord.errorMessage ?? null,\n\t]);\n}\n\nfunction turnBoundary(messages: readonly AgentMessage[]): TurnBoundary {\n\tconst identities = new WeakSet<object>();\n\tconst keys = new Set<string>();\n\tfor (const message of messages) {\n\t\tif (typeof message !== \"object\" || message === null) continue;\n\t\tidentities.add(message);\n\t\tconst key = messageKey(message);\n\t\tif (key) keys.add(key);\n\t}\n\treturn { identities, keys };\n}\n\nfunction isPreTurn(message: unknown, boundary: TurnBoundary): boolean {\n\tif (typeof message !== \"object\" || message === null) return false;\n\tif (boundary.identities.has(message)) return true;\n\tconst key = messageKey(message);\n\treturn key !== undefined && boundary.keys.has(key);\n}\n\n/**\n * Error text from an assistant message this turn produced, when it failed.\n *\n * `promptAndWait` resolves for a failed turn just as it does for a successful\n * one, so the outcome has to be read off the transcript. Only messages that were\n * not in the transcript before the turn are considered: scanning the whole\n * transcript would let an earlier failed turn reject a later turn that never\n * called the model (a handled slash command, say), reporting a stale error.\n *\n * A transcript read that fails is not treated as success — that would restore\n * the silent-success behavior this exists to prevent.\n */\nasync function turnFailure(connection: AgentConnection, boundary: TurnBoundary): Promise<string | undefined> {\n\tconst messages = await connection.getMessages();\n\tfor (let index = messages.length - 1; index >= 0; index--) {\n\t\tconst message = messages[index];\n\t\tif (message?.role !== \"assistant\") continue;\n\t\t// The newest assistant message predates the turn, so the turn appended none.\n\t\tif (isPreTurn(message, boundary)) return undefined;\n\t\tconst assistant = message as { stopReason?: string; errorMessage?: string };\n\t\tif (assistant.stopReason !== \"error\") return undefined;\n\t\treturn assistant.errorMessage || \"the model request failed\";\n\t}\n\treturn undefined;\n}\n\nexport async function runAcpMode(runtimeHost: AgentSessionRuntime): Promise<never> {\n\tconst connection = new InProcessAgentConnection(runtimeHost);\n\treturn runAcpModeWithConnection(connection, {\n\t\tbindHeadlessExtensions: () => connection.bindHeadlessExtensions({}),\n\t});\n}\n\nexport async function runAcpModeWithConnection(\n\tconnection: AgentConnection,\n\toptions: AcpModeOptions = {},\n): Promise<never> {\n\t// ACP owns stdout: any stray write corrupts the JSON-RPC stream.\n\tif (options.ownStdout !== false && !options.stream) {\n\t\ttakeOverStdout();\n\t}\n\tconst supportsMcpServers =\n\t\tconnection.supportsAcpMcpServers?.() === true &&\n\t\tconnection.replaceAcpMcpServers !== undefined &&\n\t\tconnection.releaseAcpMcpServers !== undefined;\n\tconst acpMcpOwnerId = randomUUID();\n\tlet acpMcpServerNames: string[] = [];\n\tconst clearAcpMcpServers = async (serverNames = acpMcpServerNames): Promise<void> => {\n\t\tif (!supportsMcpServers || !connection.releaseAcpMcpServers) return;\n\t\tawait connection.releaseAcpMcpServers(acpMcpOwnerId, serverNames);\n\t\tacpMcpServerNames = [];\n\t};\n\tconst replaceAcpMcpServers = async (servers: readonly acp.McpServer[], cwd: string): Promise<void> => {\n\t\tif (acpMcpServerNames.length > 0) {\n\t\t\t// Retry a prior best-effort close before admitting another session,\n\t\t\t// including one that does not declare replacement MCP servers.\n\t\t\tawait clearAcpMcpServers();\n\t\t}\n\t\tif (servers.length === 0 && acpMcpServerNames.length === 0) return;\n\t\tif (!supportsMcpServers || !connection.replaceAcpMcpServers) {\n\t\t\tthrow acp.RequestError.invalidParams({ reason: \"MCP servers are unavailable in this ACP host\" });\n\t\t}\n\t\tconst resolved = resolveAcpMcpServers(servers, cwd);\n\t\tconst serverNames = resolved.map((server) => server.name);\n\t\ttry {\n\t\t\tawait connection.replaceAcpMcpServers(resolved, acpMcpOwnerId);\n\t\t} catch (error) {\n\t\t\t// The daemon may have applied the configuration before its acknowledgement\n\t\t\t// was lost. Always attempt owner-scoped cleanup before rejecting admission.\n\t\t\tawait clearAcpMcpServers(serverNames).catch(() => undefined);\n\t\t\tthrow error;\n\t\t}\n\t\tacpMcpServerNames = serverNames;\n\t};\n\n\t// One ACP connection drives one AgentConnection, whose newSession() replaces\n\t// the live session rather than creating a parallel one. Tracking a single\n\t// session keeps every event unambiguously attributable; a second session/new\n\t// is refused rather than silently sharing conversation state, cwd, and queues.\n\tlet session: AcpSessionEntry | undefined;\n\tlet closedInputPause: AgentConnectionSessionInputPause | undefined;\n\tlet closedInputPauseKey: string | undefined;\n\tlet sessionNewInFlight = false;\n\tlet sessionCloseInFlight = false;\n\tlet sessionCloseTask: Promise<void> | undefined;\n\tlet bound = false;\n\n\tconst baseStream =\n\t\toptions.stream ?? acp.ndJsonStream(rawStdoutSink(), Readable.toWeb(process.stdin) as ReadableStream<Uint8Array>);\n\t// ACP's public request handler only returns a response; it has no response\n\t// commit callback. Observe the outgoing response at the supplied stream\n\t// boundary instead. The SDK serializes every write, so opening the producer\n\t// after this write resolves puts buffered notifications strictly behind it.\n\tlet pendingSessionNewResponse:\n\t\t| {\n\t\t\t\trequestId: unknown;\n\t\t\t\tproducer: AcpUpdateProducer;\n\t\t\t\tentry: AcpSessionEntry;\n\t\t\t\tinputPause: AgentConnectionSessionInputPause | undefined;\n\t\t }\n\t\t| undefined;\n\tconst failPendingSessionNewResponse = (): void => {\n\t\tconst admission = pendingSessionNewResponse;\n\t\tpendingSessionNewResponse = undefined;\n\t\tadmission?.producer.failSessionNewAdmission();\n\t\tadmission?.entry.inputPauseRelease?.reject(new Error(\"ACP session/new response was not delivered\"));\n\t};\n\ttype AcpStreamMessage = typeof baseStream.writable extends WritableStream<infer TMessage> ? TMessage : never;\n\tconst stream: typeof baseStream = {\n\t\treadable: baseStream.readable,\n\t\twritable: new WritableStream<AcpStreamMessage>({\n\t\t\tasync write(message) {\n\t\t\t\tlet writer: WritableStreamDefaultWriter<AcpStreamMessage> | undefined;\n\t\t\t\ttry {\n\t\t\t\t\twriter = baseStream.writable.getWriter();\n\t\t\t\t\tawait writer.write(message);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tfailPendingSessionNewResponse();\n\t\t\t\t\tthrow error;\n\t\t\t\t} finally {\n\t\t\t\t\twriter?.releaseLock();\n\t\t\t\t}\n\t\t\t\tif (pendingSessionNewResponse && isJsonRpcResponse(message, pendingSessionNewResponse.requestId)) {\n\t\t\t\t\tconst admission = pendingSessionNewResponse;\n\t\t\t\t\tpendingSessionNewResponse = undefined;\n\t\t\t\t\tif (admission.inputPause) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait admission.inputPause.release();\n\t\t\t\t\t\t\tif (admission.entry.inputPause === admission.inputPause) {\n\t\t\t\t\t\t\t\tadmission.entry.inputPause = undefined;\n\t\t\t\t\t\t\t\tadmission.entry.inputPauseKey = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (closedInputPause === admission.inputPause) {\n\t\t\t\t\t\t\t\tclosedInputPause = undefined;\n\t\t\t\t\t\t\t\tclosedInputPauseKey = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tadmission.entry.inputPauseRelease?.resolve();\n\t\t\t\t\t\t\tadmission.entry.inputPauseRelease = undefined;\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tadmission.entry.stopFailure = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\t\tadmission.entry.inputPauseRelease?.reject(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tadmission.producer.commitSessionNewResponse();\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync close() {\n\t\t\t\tlet writer: WritableStreamDefaultWriter<AcpStreamMessage> | undefined;\n\t\t\t\ttry {\n\t\t\t\t\twriter = baseStream.writable.getWriter();\n\t\t\t\t\tawait writer.close();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tfailPendingSessionNewResponse();\n\t\t\t\t\tthrow error;\n\t\t\t\t} finally {\n\t\t\t\t\twriter?.releaseLock();\n\t\t\t\t}\n\t\t\t\tfailPendingSessionNewResponse();\n\t\t\t},\n\t\t\tasync abort(reason) {\n\t\t\t\tlet writer: WritableStreamDefaultWriter<AcpStreamMessage> | undefined;\n\t\t\t\ttry {\n\t\t\t\t\twriter = baseStream.writable.getWriter();\n\t\t\t\t\tawait writer.abort(reason);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tfailPendingSessionNewResponse();\n\t\t\t\t\tthrow error;\n\t\t\t\t} finally {\n\t\t\t\t\twriter?.releaseLock();\n\t\t\t\t}\n\t\t\t\tfailPendingSessionNewResponse();\n\t\t\t},\n\t\t}),\n\t};\n\n\tconst cancelOutstandingRlmChildren = async (): Promise<void> => {\n\t\tconst children = await connection.getRlmChildSnapshots();\n\t\tconst cancellations = await Promise.allSettled(children.map((child) => connection.cancelRlmChild(child.id)));\n\t\tconst failed = cancellations.find((result) => result.status === \"rejected\");\n\t\tif (failed?.status === \"rejected\") throw failed.reason;\n\t};\n\tconst abortConnectionWork = async (): Promise<void> => {\n\t\tawait connection.abortAndClearQueue();\n\t};\n\tconst acquireStopInputPause = async (entry: AcpSessionEntry): Promise<AgentConnectionSessionInputPause> => {\n\t\tif (entry.inputPauseRelease) {\n\t\t\tawait entry.inputPauseRelease.promise.catch(() => undefined);\n\t\t\tentry.inputPauseRelease = undefined;\n\t\t}\n\t\tconst leaseKey = entry.inputPauseKey ?? randomUUID();\n\t\tentry.inputPauseKey = leaseKey;\n\t\tconst pause = await connection.acquireSessionInputPause(leaseKey);\n\t\tentry.inputPause = pause;\n\t\treturn pause;\n\t};\n\n\tconst stopSessionWork = async (pending?: AcpPendingTerminal, promptTask?: Promise<void>): Promise<void> => {\n\t\tawait abortConnectionWork();\n\t\tawait connection.waitForIdle();\n\t\tawait cancelOutstandingRlmChildren();\n\t\tawait pending?.task;\n\t\tawait promptTask;\n\t};\n\n\tconst finalizePendingTerminal = (entry: AcpSessionEntry, pending: AcpPendingTerminal): void => {\n\t\tpending.task = (async () => {\n\t\t\twhile (true) {\n\t\t\t\tconst status = await connection.waitForHeadlessCompletion({ waitForRlmQuiescence: true });\n\t\t\t\tif (pending.abort.signal.aborted || session !== entry || entry.pendingTerminal !== pending) return;\n\t\t\t\tconst finalFailure = await turnFailure(connection, pending.boundary);\n\t\t\t\tif (pending.abort.signal.aborted || session !== entry || entry.pendingTerminal !== pending) return;\n\t\t\t\tconst liveChildren = await connection.getRlmChildSnapshots();\n\t\t\t\tif (pending.abort.signal.aborted || session !== entry || entry.pendingTerminal !== pending) return;\n\t\t\t\tconst terminalQuiescence = quiescenceMeta(status, liveChildren);\n\t\t\t\tif (terminalQuiescence.outstandingSubagents !== 0) continue;\n\t\t\t\tpending.status = status;\n\t\t\t\tpending.turnFailure = finalFailure;\n\n\t\t\t\tentry.producer.sealTerminal(pending.promptTurnId);\n\t\t\t\tconst autonomous = autonomousMeta(status);\n\t\t\t\tconst publication = entry.producer.publish(\n\t\t\t\t\t{\n\t\t\t\t\t\tsessionUpdate: \"session_info_update\",\n\t\t\t\t\t\t_meta: asmAgentMeta({ ...(autonomous ? { autonomous } : {}), quiescence: terminalQuiescence }),\n\t\t\t\t\t},\n\t\t\t\t\tpending.promptTurnId,\n\t\t\t\t\t\"terminalQuiescence\",\n\t\t\t\t\tfinalFailure ? \"error\" : pending.outcome,\n\t\t\t\t);\n\t\t\t\t// Keep terminal ownership until this settlement task has fully drained.\n\t\t\t\t// A follow-up prompt awaits that task; clearing ownership at publication\n\t\t\t\t// admission would let it overlap the first prompt handler.\n\t\t\t\tif (!(await publication)) return;\n\t\t\t\tawait entry.producer.drain();\n\t\t\t\treturn;\n\t\t\t}\n\t\t})()\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tif (pending.abort.signal.aborted || entry.pendingTerminal !== pending) return;\n\t\t\t\tpending.failure = error instanceof Error ? error.message : String(error);\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tentry.producer.finishTerminalLifecycle(pending.promptTurnId);\n\t\t\t\tif (entry.pendingTerminal === pending) entry.pendingTerminal = undefined;\n\t\t\t\tif (entry.abort === pending.abort) entry.abort = undefined;\n\t\t\t});\n\t};\n\n\tconst handle = acp\n\t\t.agent({ name: \"asm-agent\" })\n\t\t.onRequest(\"initialize\", async () => ({\n\t\t\tprotocolVersion: acp.PROTOCOL_VERSION,\n\t\t\tagentCapabilities: {\n\t\t\t\tloadSession: false,\n\t\t\t\tpromptCapabilities: { image: true, embeddedContext: true },\n\t\t\t\t...(supportsMcpServers ? { mcpCapabilities: { http: true } } : {}),\n\t\t\t\t// Advertise close so a client knows it can release the session (and\n\t\t\t\t// the single-session slot) instead of dropping the connection.\n\t\t\t\tsessionCapabilities: { close: {} },\n\t\t\t},\n\t\t\tagentInfo: { name: \"asm-agent\", title: \"ASM Agent\", version: VERSION },\n\t\t\t// Advertise asm-agent extras under a namespaced key: ACP reserves\n\t\t\t// every object root for future protocol fields.\n\t\t\t_meta: asmAgentMeta({}),\n\t\t}))\n\t\t.onRequest(\"session/new\", async (ctx: any) => {\n\t\t\t// Reserve the single-session slot before the first await. Otherwise two\n\t\t\t// concurrent requests can both pass the empty-slot check while cwd or\n\t\t\t// snapshot reads are in flight, then overwrite each other's session.\n\t\t\tif (session || sessionNewInFlight || sessionCloseInFlight) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"asm-agent ACP mode hosts one session per connection; \" +\n\t\t\t\t\t\t\"start another asm-agent process for a second session\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tsessionNewInFlight = true;\n\t\t\ttry {\n\t\t\t\tconst params = ctx.params as acp.NewSessionRequest;\n\t\t\t\tconst mcpServers = params.mcpServers ?? [];\n\t\t\t\tif (mcpServers.length > 0 && !supportsMcpServers) {\n\t\t\t\t\tthrow acp.RequestError.invalidParams({ reason: \"MCP servers are unavailable in this ACP host\" });\n\t\t\t\t}\n\t\t\t\tif (!bound) {\n\t\t\t\t\t// Only latch after a successful bind: a rejected bind must not leave\n\t\t\t\t\t// extensions permanently unavailable for the rest of the process.\n\t\t\t\t\tawait options.bindHeadlessExtensions?.();\n\t\t\t\t\tbound = true;\n\t\t\t\t}\n\t\t\t\t// asm-agent's cwd is fixed at startup by the session it was launched\n\t\t\t\t// with, so a client-supplied cwd cannot be adopted after the fact.\n\t\t\t\t// Report the real cwd back in `_meta` rather than failing the request or\n\t\t\t\t// letting the client assume a directory the agent is not using.\n\t\t\t\tconst requestedCwd = params.cwd;\n\t\t\t\tconst actualCwd = await connection\n\t\t\t\t\t.getState()\n\t\t\t\t\t.then((state) => state.cwd)\n\t\t\t\t\t.catch(() => undefined);\n\t\t\t\tif (!actualCwd && mcpServers.some((server) => \"command\" in server)) {\n\t\t\t\t\tthrow acp.RequestError.invalidParams({ reason: \"Could not resolve the ACP session cwd for stdio MCP\" });\n\t\t\t\t}\n\t\t\t\tawait replaceAcpMcpServers(mcpServers, actualCwd ?? \"\");\n\t\t\t\tlet cwdMismatch: { requested: string; actual: string } | undefined;\n\t\t\t\tif (\n\t\t\t\t\ttypeof requestedCwd === \"string\" &&\n\t\t\t\t\trequestedCwd.length > 0 &&\n\t\t\t\t\tactualCwd &&\n\t\t\t\t\t!sameCwd(requestedCwd, actualCwd)\n\t\t\t\t) {\n\t\t\t\t\tcwdMismatch = { requested: requestedCwd, actual: actualCwd };\n\t\t\t\t}\n\t\t\t\tconst sessionId = randomUUID();\n\t\t\t\t// Install the listener before fetching the snapshot. Child updates can arrive\n\t\t\t\t// while the snapshot request is in flight; the connection remains the\n\t\t\t\t// authoritative source used when quiescence is emitted below.\n\t\t\t\tconst producer = new AcpUpdateProducer(sessionId, ctx.client);\n\t\t\t\tlet inputPauseRelease: AcpInputPauseRelease | undefined;\n\t\t\t\tif (closedInputPause) {\n\t\t\t\t\tlet resolve!: () => void;\n\t\t\t\t\tlet reject!: (error: unknown) => void;\n\t\t\t\t\tconst promise = new Promise<void>((resolvePromise, rejectPromise) => {\n\t\t\t\t\t\tresolve = resolvePromise;\n\t\t\t\t\t\treject = rejectPromise;\n\t\t\t\t\t});\n\t\t\t\t\tvoid promise.catch(() => undefined);\n\t\t\t\t\tinputPauseRelease = { promise, resolve, reject };\n\t\t\t\t}\n\t\t\t\tconst entry: AcpSessionEntry = {\n\t\t\t\t\tid: sessionId,\n\t\t\t\t\tabort: undefined,\n\t\t\t\t\tcancelling: false,\n\t\t\t\t\tcancelTask: undefined,\n\t\t\t\t\tstopFailure: undefined,\n\t\t\t\t\tinputPause: closedInputPause,\n\t\t\t\t\tinputPauseKey: closedInputPauseKey,\n\t\t\t\t\tinputPauseRelease,\n\t\t\t\t\tpendingTerminal: undefined,\n\t\t\t\t\tpromptTask: undefined,\n\t\t\t\t\tresolvePromptTask: undefined,\n\t\t\t\t\tunsubscribe: undefined,\n\t\t\t\t\tproducer,\n\t\t\t\t};\n\t\t\t\t// Subscribe for the session lifetime, not per prompt turn: asm-agent\n\t\t\t\t// subagents are fire-and-forget and keep reporting after the spawning turn\n\t\t\t\t// ends, so a turn-scoped subscription would drop their updates. One\n\t\t\t\t// mapping state per session keeps streaming bash output correlated with\n\t\t\t\t// the run that produced it.\n\t\t\t\tconst mappingState: AcpEventMappingState = {};\n\t\t\t\tconst observedChildren = new Map<string, unknown>();\n\t\t\t\tconst unsubscribe = connection.subscribe((event) => {\n\t\t\t\t\t// Heartbeats are connection-scoped, including if one races a prompt.\n\t\t\t\t\t// They therefore intentionally use origin turn 0.\n\t\t\t\t\tif (event.type === \"heartbeats_changed\") {\n\t\t\t\t\t\tvoid producer.publish(\n\t\t\t\t\t\t\t{ sessionUpdate: \"session_info_update\", _meta: asmAgentMeta({ heartbeatsChanged: true }) },\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\"event\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (event.type !== \"session_event\") return;\n\t\t\t\t\tif (event.event.type === \"rlm_child_update\") {\n\t\t\t\t\t\tobservedChildren.set(event.event.child.id, event.event.child);\n\t\t\t\t\t}\n\t\t\t\t\tconst turnId = producer.turnForEvent(event.event);\n\t\t\t\t\tfor (const update of acpUpdatesForSessionEvent(event.event, mappingState)) {\n\t\t\t\t\t\tvoid producer.publish(update, turnId, \"event\");\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\ttry {\n\t\t\t\t\t// Reconcile after subscribing so updates cannot be lost while the snapshot\n\t\t\t\t\t// request is in flight. Do not turn a failed read into an empty roster.\n\t\t\t\t\tconst initialSnapshot = await connection.getInitialSnapshot();\n\t\t\t\t\tfor (const child of initialSnapshot.children ?? []) {\n\t\t\t\t\t\tif (observedChildren.has(child.id)) continue;\n\t\t\t\t\t\tobservedChildren.set(child.id, child);\n\t\t\t\t\t\tconst event = { type: \"rlm_child_update\", child } as const;\n\t\t\t\t\t\tconst turnId = producer.turnForEvent(event);\n\t\t\t\t\t\tfor (const update of acpUpdatesForSessionEvent(event, mappingState)) {\n\t\t\t\t\t\t\tvoid producer.publish(update, turnId, \"event\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tproducer.failSessionNewAdmission();\n\t\t\t\t\tunsubscribe();\n\t\t\t\t\tawait clearAcpMcpServers().catch(() => undefined);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\t// Claim the single-session slot only once the subscription and snapshot are\n\t\t\t\t// ready, so a failed setup cannot leave it occupied and unusable.\n\t\t\t\tentry.unsubscribe = unsubscribe;\n\t\t\t\tsession = entry;\n\t\t\t\tconst response = {\n\t\t\t\t\tsessionId,\n\t\t\t\t\t...(cwdMismatch ? { _meta: asmAgentMeta({ cwd: cwdMismatch }) } : {}),\n\t\t\t\t};\n\t\t\t\t// The stream wrapper commits this gate after this exact response has\n\t\t\t\t// written. Buffered subscription updates retain producer order.\n\t\t\t\tpendingSessionNewResponse = {\n\t\t\t\t\trequestId: ctx.requestId,\n\t\t\t\t\tproducer: entry.producer,\n\t\t\t\t\tentry,\n\t\t\t\t\tinputPause: closedInputPause,\n\t\t\t\t};\n\t\t\t\treturn response;\n\t\t\t} finally {\n\t\t\t\tsessionNewInFlight = false;\n\t\t\t}\n\t\t})\n\t\t.onRequest(\"session/prompt\", async (ctx: any) => {\n\t\t\tconst params = ctx.params as { sessionId: string; prompt: readonly unknown[] };\n\t\t\tconst entry = session?.id === params.sessionId ? session : undefined;\n\t\t\tif (!entry) throw new Error(`Unknown ACP session: ${params.sessionId}`);\n\t\t\tif (sessionCloseInFlight) throw new Error(`ACP session is closing: ${params.sessionId}`);\n\t\t\tif (entry.cancelling) throw new Error(`ACP session is cancelling: ${params.sessionId}`);\n\t\t\tawait entry.inputPauseRelease?.promise;\n\t\t\t// A prompt response precedes its correlated terminal update. Serialize the\n\t\t\t// next turn behind that lifecycle so it cannot overwrite terminal ownership.\n\t\t\tawait entry.pendingTerminal?.task;\n\t\t\tif (session !== entry) throw new Error(`Unknown ACP session: ${params.sessionId}`);\n\t\t\tif (sessionCloseInFlight) throw new Error(`ACP session is closing: ${params.sessionId}`);\n\t\t\t// This prompt was admitted before the cancellation started; it is dropped\n\t\t\t// by the cancel rather than malformed, so report the protocol stop reason\n\t\t\t// instead of a request error.\n\t\t\tif (entry.cancelling) return { stopReason: \"cancelled\" satisfies AcpStopReason };\n\t\t\tif (entry.stopFailure) throw new Error(`ACP session stop failed: ${entry.stopFailure}`);\n\t\t\tif (entry.pendingTerminal?.failure) {\n\t\t\t\tthrow new Error(`ACP lifecycle reconciliation failed: ${entry.pendingTerminal.failure}`);\n\t\t\t}\n\t\t\tif (entry.abort) throw new Error(\"A prompt turn is already running for this ACP session\");\n\n\t\t\tconst abort = new AbortController();\n\t\t\tentry.abort = abort;\n\t\t\tlet resolvePromptTask!: () => void;\n\t\t\tconst promptTask = new Promise<void>((resolve) => {\n\t\t\t\tresolvePromptTask = resolve;\n\t\t\t});\n\t\t\tentry.promptTask = promptTask;\n\t\t\tentry.resolvePromptTask = resolvePromptTask;\n\t\t\t// Allocate the causal turn before the first await, not when an update is\n\t\t\t// delivered. This prevents late producer events becoming the next turn.\n\t\t\tconst promptTurnId = entry.producer.beginPrompt();\n\t\t\tlet responseBoundaryEmitted = false;\n\t\t\tlet terminalSettlementCancelled = false;\n\t\t\ttry {\n\t\t\t\tconst { text, images } = promptContent(params.prompt);\n\t\t\t\tconst priorMessages = turnBoundary(await connection.getMessages());\n\t\t\t\tif (abort.signal.aborted) {\n\t\t\t\t\tawait entry.producer.drain();\n\t\t\t\t\treturn { stopReason: \"cancelled\" satisfies AcpStopReason };\n\t\t\t\t}\n\t\t\t\t// A follow-up prompt can arrive while injected work (subagent replies,\n\t\t\t\t// heartbeats) keeps the resident session busy. ACP has no native queue\n\t\t\t\t// field, so queue the host turn behind that work with follow-up\n\t\t\t\t// semantics instead of rejecting it as \"Agent is already processing\".\n\t\t\t\tawait connection.promptAndWait(text, {\n\t\t\t\t\t...(images.length > 0 ? { images } : {}),\n\t\t\t\t\tstreamingBehavior: \"followUp\",\n\t\t\t\t\tqueueIfBusy: true,\n\t\t\t\t\tsignal: abort.signal,\n\t\t\t\t});\n\t\t\t\tif (abort.signal.aborted) {\n\t\t\t\t\tawait entry.producer.drain();\n\t\t\t\t\treturn { stopReason: \"cancelled\" satisfies AcpStopReason };\n\t\t\t\t}\n\t\t\t\tconst status = await connection.waitForHeadlessCompletion();\n\t\t\t\tif (abort.signal.aborted) {\n\t\t\t\t\tawait entry.producer.drain();\n\t\t\t\t\treturn { stopReason: \"cancelled\" satisfies AcpStopReason };\n\t\t\t\t}\n\t\t\t\tconst failure = await turnFailure(connection, priorMessages);\n\t\t\t\tif (abort.signal.aborted) {\n\t\t\t\t\tawait entry.producer.drain();\n\t\t\t\t\treturn { stopReason: \"cancelled\" satisfies AcpStopReason };\n\t\t\t\t}\n\t\t\t\tconst autonomous = autonomousMeta(status);\n\t\t\t\tconst liveChildren = await connection.getRlmChildSnapshots();\n\t\t\t\tif (abort.signal.aborted) {\n\t\t\t\t\tawait entry.producer.drain();\n\t\t\t\t\treturn { stopReason: \"cancelled\" satisfies AcpStopReason };\n\t\t\t\t}\n\t\t\t\tconst outcome = failure ? \"error\" : \"result\";\n\t\t\t\tlet terminalStatus = status;\n\t\t\t\tconst observedQuiescence = quiescenceMeta(status, liveChildren);\n\t\t\t\t// The roster is a point-in-time status signal, not proof of terminality:\n\t\t\t\t// a child can publish a terminal status before its result reaches the parent.\n\t\t\t\t// Every turn therefore finalizes through the strong settlement barrier.\n\t\t\t\tentry.producer.commitResponse(promptTurnId);\n\t\t\t\tresponseBoundaryEmitted = await entry.producer.publish(\n\t\t\t\t\t{\n\t\t\t\t\t\tsessionUpdate: \"session_info_update\",\n\t\t\t\t\t\t_meta: asmAgentMeta({ terminalQuiescenceExpected: true }),\n\t\t\t\t\t},\n\t\t\t\t\tpromptTurnId,\n\t\t\t\t\t\"responseBoundary\",\n\t\t\t\t\toutcome,\n\t\t\t\t);\n\t\t\t\tif (!responseBoundaryEmitted) throw new Error(\"Failed to publish ACP response boundary\");\n\t\t\t\tconst completionUpdateEmitted = await entry.producer.publish(\n\t\t\t\t\t{\n\t\t\t\t\t\tsessionUpdate: \"session_info_update\",\n\t\t\t\t\t\t_meta: asmAgentMeta({ ...(autonomous ? { autonomous } : {}), quiescence: observedQuiescence }),\n\t\t\t\t\t},\n\t\t\t\t\tpromptTurnId,\n\t\t\t\t\t\"event\",\n\t\t\t\t);\n\t\t\t\tif (!completionUpdateEmitted) throw new Error(\"Failed to publish ACP completion update\");\n\t\t\t\tawait entry.producer.drain();\n\t\t\t\tif (!abort.signal.aborted) {\n\t\t\t\t\tentry.producer.beginTerminalLifecycle(promptTurnId);\n\t\t\t\t\tconst pending: AcpPendingTerminal = { promptTurnId, boundary: priorMessages, outcome, abort };\n\t\t\t\t\tentry.pendingTerminal = pending;\n\t\t\t\t\tfinalizePendingTerminal(entry, pending);\n\t\t\t\t\tawait pending.task;\n\t\t\t\t\tterminalSettlementCancelled = abort.signal.aborted;\n\t\t\t\t\tif (pending.failure) {\n\t\t\t\t\t\tthrow new Error(`ACP lifecycle reconciliation failed: ${pending.failure}`);\n\t\t\t\t\t}\n\t\t\t\t\tif (pending.turnFailure) {\n\t\t\t\t\t\tthrow new Error(`asm-agent turn failed: ${pending.turnFailure}`);\n\t\t\t\t\t}\n\t\t\t\t\tterminalStatus = pending.status ?? status;\n\t\t\t\t}\n\t\t\t\tif (failure) throw new Error(`asm-agent turn failed: ${failure}`);\n\t\t\t\treturn {\n\t\t\t\t\tstopReason: acpStopReason({\n\t\t\t\t\t\tcancelled: terminalSettlementCancelled,\n\t\t\t\t\t\tautonomous: terminalStatus,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tif (abort.signal.aborted && !entry.producer.isResponseCommitted(promptTurnId)) {\n\t\t\t\t\tawait entry.producer.drain();\n\t\t\t\t\treturn { stopReason: \"cancelled\" satisfies AcpStopReason };\n\t\t\t\t}\n\t\t\t\t// Failed prompt/snapshot admission gets one correlated error boundary;\n\t\t\t\t// it never gets an invented terminal-quiescence update.\n\t\t\t\tif (!responseBoundaryEmitted) {\n\t\t\t\t\tawait entry.producer.publish(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsessionUpdate: \"session_info_update\",\n\t\t\t\t\t\t\t_meta: asmAgentMeta({ terminalQuiescenceExpected: false }),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpromptTurnId,\n\t\t\t\t\t\t\"responseBoundary\",\n\t\t\t\t\t\t\"error\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tawait entry.producer.drain();\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tentry.producer.finishPrompt(promptTurnId);\n\t\t\t\tif (entry.promptTask === promptTask) {\n\t\t\t\t\tentry.promptTask = undefined;\n\t\t\t\t\tentry.resolvePromptTask = undefined;\n\t\t\t\t\tresolvePromptTask();\n\t\t\t\t}\n\t\t\t\tif (entry.abort === abort && entry.pendingTerminal?.abort !== abort) entry.abort = undefined;\n\t\t\t}\n\t\t})\n\t\t.onRequest(\"session/close\", async (ctx: any) => {\n\t\t\tconst params = ctx.params as { sessionId: string };\n\t\t\tif (session?.id !== params.sessionId) {\n\t\t\t\tthrow new Error(`Unknown ACP session: ${params.sessionId}`);\n\t\t\t}\n\t\t\t// Stop real work, not just local bookkeeping: aborting only the local\n\t\t\t// controller leaves the agent running with nobody listening, so closing\n\t\t\t// must abort the connection the same way session/cancel does.\n\t\t\tif (sessionCloseInFlight) throw new Error(`ACP session is already closing: ${params.sessionId}`);\n\t\t\tsessionCloseInFlight = true;\n\t\t\tlet finishClose!: () => void;\n\t\t\tsessionCloseTask = new Promise<void>((resolve) => {\n\t\t\t\tfinishClose = resolve;\n\t\t\t});\n\t\t\tconst closing = session;\n\t\t\ttry {\n\t\t\t\tawait closing.cancelTask?.catch(() => undefined);\n\t\t\t\tclosing.cancelling = true;\n\t\t\t\tclosing.abort?.abort();\n\t\t\t\tconst pending = closing.pendingTerminal;\n\t\t\t\tconst promptTask = closing.promptTask;\n\t\t\t\ttry {\n\t\t\t\t\tconst inputPause = await acquireStopInputPause(closing);\n\t\t\t\t\tconst inputPauseKey = closing.inputPauseKey;\n\t\t\t\t\tif (!inputPauseKey) throw new Error(\"Missing ACP close input-pause key\");\n\t\t\t\t\tawait stopSessionWork(pending, promptTask);\n\t\t\t\t\tclosing.unsubscribe?.();\n\t\t\t\t\t// Keep the backing session fenced until a replacement ACP session is admitted.\n\t\t\t\t\tawait closing.producer.close();\n\t\t\t\t\t// Host credentials are already gone before kernel release runs. Do not\n\t\t\t\t\t// retain the ACP session slot if best-effort transport reaping fails.\n\t\t\t\t\tawait clearAcpMcpServers().catch(() => undefined);\n\t\t\t\t\tclosedInputPause = inputPause;\n\t\t\t\t\tclosedInputPauseKey = inputPauseKey;\n\t\t\t\t\tif (closing.inputPause === inputPause) {\n\t\t\t\t\t\tclosing.inputPause = undefined;\n\t\t\t\t\t\tclosing.inputPauseKey = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tclosing.stopFailure = undefined;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tclosing.stopFailure = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tif (session === closing) session = undefined;\n\t\t\t\treturn {};\n\t\t\t} finally {\n\t\t\t\tif (session === closing) closing.cancelling = false;\n\t\t\t\tfinishClose();\n\t\t\t\tsessionCloseTask = undefined;\n\t\t\t\tsessionCloseInFlight = false;\n\t\t\t}\n\t\t})\n\t\t.onNotification(\"session/cancel\", async (ctx: any) => {\n\t\t\tconst params = ctx.params as { sessionId: string };\n\t\t\twhile (sessionCloseInFlight) await sessionCloseTask;\n\t\t\t// Only cancel the addressed session: aborting unconditionally would kill\n\t\t\t// whichever turn happens to be running, and leave the real turn's\n\t\t\t// AbortController unmarked so it reports a wrong stop reason.\n\t\t\tif (session?.id !== params.sessionId) return;\n\t\t\tconst cancelling = session;\n\t\t\tif (cancelling.cancelling) {\n\t\t\t\tawait cancelling.cancelTask;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst abort = cancelling.abort;\n\t\t\tif (!abort && !cancelling.stopFailure && !cancelling.inputPauseRelease) return;\n\t\t\tconst pending = abort && cancelling.pendingTerminal?.abort === abort ? cancelling.pendingTerminal : undefined;\n\t\t\tconst promptTask = cancelling.promptTask;\n\t\t\tcancelling.cancelling = true;\n\t\t\tconst cancelTask = (async () => {\n\t\t\t\tabort?.abort();\n\t\t\t\ttry {\n\t\t\t\t\tconst inputPause = await acquireStopInputPause(cancelling);\n\t\t\t\t\tawait stopSessionWork(pending, promptTask);\n\t\t\t\t\tawait inputPause.release();\n\t\t\t\t\tif (cancelling.inputPause === inputPause) {\n\t\t\t\t\t\tcancelling.inputPause = undefined;\n\t\t\t\t\t\tcancelling.inputPauseKey = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (closedInputPause === inputPause) {\n\t\t\t\t\t\tclosedInputPause = undefined;\n\t\t\t\t\t\tclosedInputPauseKey = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tcancelling.inputPauseRelease = undefined;\n\t\t\t\t\tcancelling.stopFailure = undefined;\n\t\t\t\t\tif (pending && cancelling.pendingTerminal === pending) cancelling.pendingTerminal = undefined;\n\t\t\t\t\tif (abort && cancelling.abort === abort) cancelling.abort = undefined;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcancelling.stopFailure = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t})();\n\t\t\tcancelling.cancelTask = cancelTask;\n\t\t\ttry {\n\t\t\t\tawait cancelTask;\n\t\t\t} finally {\n\t\t\t\tif (cancelling.cancelTask === cancelTask) cancelling.cancelTask = undefined;\n\t\t\t\tcancelling.cancelling = false;\n\t\t\t}\n\t\t})\n\t\t.connect(stream);\n\n\t// Exit when the client disconnects (stdin EOF or a closed transport). Blocking\n\t// forever would leave an orphaned agent per run, which matters most for a\n\t// harness that spawns many short-lived sessions.\n\tawait handle.closed.catch(() => undefined);\n\tsession?.abort?.abort();\n\tsession?.unsubscribe?.();\n\tawait session?.inputPause?.release().catch(() => undefined);\n\tsession = undefined;\n\tawait closedInputPause?.release().catch(() => undefined);\n\tclosedInputPause = undefined;\n\tclosedInputPauseKey = undefined;\n\tawait clearAcpMcpServers().catch(() => undefined);\n\tawait connection.dispose().catch(() => undefined);\n\t// Only the real stdio entrypoint owns the process; a caller-supplied transport\n\t// (tests, embedding) must never have its host exited from under it.\n\tif (options.stream) return undefined as never;\n\treturn process.exit(0) as never;\n}\n"]}
@@ -37,8 +37,6 @@ export interface DaemonAgentConnectionOptions {
37
37
  ownedSession?: boolean;
38
38
  /** Fresh runtime context used only if the owned worker must be relaunched. */
39
39
  ownedSessionRecoveryConfig?: AgentSessionRuntimeConfig;
40
- /** Require the target worker to have been created with telemetry disabled. */
41
- telemetryDisabled?: true;
42
40
  }
43
41
  /**
44
42
  * AgentConnection adapter for the local daemon JSONL socket transport.