@bastani/atomic 0.9.28-alpha.3 → 0.9.28-alpha.5

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 (311) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/builtin/intercom/CHANGELOG.md +6 -0
  3. package/dist/builtin/intercom/README.md +3 -2
  4. package/dist/builtin/intercom/broker/broker.ts +90 -14
  5. package/dist/builtin/intercom/broker/paths.ts +4 -0
  6. package/dist/builtin/intercom/broker/socket-liveness.ts +32 -0
  7. package/dist/builtin/intercom/broker/socket-replacement-lock.ts +104 -0
  8. package/dist/builtin/intercom/broker/spawn.ts +108 -63
  9. package/dist/builtin/intercom/index.bundle.mjs +114 -61
  10. package/dist/builtin/intercom/package.json +2 -2
  11. package/dist/builtin/mcp/package.json +1 -1
  12. package/dist/builtin/subagents/CHANGELOG.md +6 -0
  13. package/dist/builtin/subagents/package.json +3 -3
  14. package/dist/builtin/subagents/skills/agent-browser/SKILL.md +1 -1
  15. package/dist/builtin/subagents/skills/cua-driver/BROWSER.md +60 -39
  16. package/dist/builtin/subagents/skills/cua-driver/EMBEDDING.md +119 -36
  17. package/dist/builtin/subagents/skills/cua-driver/LINUX.md +225 -183
  18. package/dist/builtin/subagents/skills/cua-driver/MACOS.md +120 -89
  19. package/dist/builtin/subagents/skills/cua-driver/README.md +16 -7
  20. package/dist/builtin/subagents/skills/cua-driver/RECORDING.md +85 -115
  21. package/dist/builtin/subagents/skills/cua-driver/RUNTIME.md +113 -0
  22. package/dist/builtin/subagents/skills/cua-driver/SKILL.md +55 -1071
  23. package/dist/builtin/subagents/skills/cua-driver/VISUAL.md +125 -0
  24. package/dist/builtin/subagents/skills/cua-driver/WINDOWS.md +145 -185
  25. package/dist/builtin/subagents/skills/cua-driver/WORKFLOW.md +173 -0
  26. package/dist/builtin/web-access/package.json +2 -2
  27. package/dist/builtin/workflows/CHANGELOG.md +16 -0
  28. package/dist/builtin/workflows/README.md +1 -1
  29. package/dist/builtin/workflows/builtin/{chunk-aqv8ny38.js → chunk-9ywkdsa9.js} +1 -1
  30. package/dist/builtin/workflows/builtin/{chunk-p6jagvyf.js → chunk-bnz4knhy.js} +1 -1
  31. package/dist/builtin/workflows/builtin/{chunk-br4ac9a3.js → chunk-dx5sjaxe.js} +1 -1
  32. package/dist/builtin/workflows/builtin/{chunk-p3xmajmj.js → chunk-v4scsq3y.js} +41 -13
  33. package/dist/builtin/workflows/builtin/goal.js +2 -2
  34. package/dist/builtin/workflows/builtin/index.js +3 -3
  35. package/dist/builtin/workflows/builtin/ralph.js +2 -2
  36. package/dist/builtin/workflows/package.json +2 -2
  37. package/dist/builtin/workflows/skills/impeccable/SKILL.md +8 -2
  38. package/dist/builtin/workflows/skills/impeccable/reference/adapt.md +6 -0
  39. package/dist/builtin/workflows/skills/impeccable/reference/audit.md +2 -1
  40. package/dist/builtin/workflows/skills/impeccable/reference/component-review.md +63 -0
  41. package/dist/builtin/workflows/skills/impeccable/reference/degraded/asset-producer.md +5 -0
  42. package/dist/builtin/workflows/skills/impeccable/reference/degraded/finish-reviewer.md +1 -1
  43. package/dist/builtin/workflows/skills/impeccable/reference/generate.md +101 -0
  44. package/dist/builtin/workflows/skills/impeccable/reference/harden.md +9 -0
  45. package/dist/builtin/workflows/skills/impeccable/reference/hooks.md +3 -1
  46. package/dist/builtin/workflows/skills/impeccable/reference/mode-operate.md +21 -0
  47. package/dist/builtin/workflows/skills/impeccable/reference/mode-persuade.md +19 -0
  48. package/dist/builtin/workflows/skills/impeccable/reference/mode-read.md +21 -0
  49. package/dist/builtin/workflows/skills/impeccable/reference/new-work.md +19 -12
  50. package/dist/builtin/workflows/skills/impeccable/reference/region-map.md +26 -0
  51. package/dist/builtin/workflows/skills/impeccable/reference/routing.md +1 -1
  52. package/dist/builtin/workflows/skills/impeccable/reference/visualize.md +5 -5
  53. package/dist/builtin/workflows/skills/impeccable/scripts/VERSION +1 -1
  54. package/dist/builtin/workflows/skills/impeccable/scripts/command-metadata.json +4 -0
  55. package/dist/builtin/workflows/skills/impeccable/scripts/impeccable.cmd +2 -2
  56. package/dist/builtin/workflows/skills/impeccable/scripts/live-browser-session.js +5 -1
  57. package/dist/builtin/workflows/skills/impeccable/scripts/live-browser.js +524 -4
  58. package/dist/builtin/workflows/skills/prompt-engineer/SKILL.md +1 -0
  59. package/dist/builtin/workflows/skills/prompt-engineer/references/claude_haiku_5_5.md +81 -0
  60. package/dist/builtin/workflows/src/extension/index.bundle.mjs +38 -14
  61. package/dist/builtin/workflows/src/index.js +38 -14
  62. package/dist/cli/startup-ui.d.ts +3 -2
  63. package/dist/cli/startup-ui.d.ts.map +1 -1
  64. package/dist/cli/startup-ui.js +19 -4
  65. package/dist/cli/startup-ui.js.map +1 -1
  66. package/dist/codemode-worker.js +2 -2
  67. package/dist/core/agent-session-compaction.d.ts +3 -3
  68. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  69. package/dist/core/agent-session-compaction.js +5 -1
  70. package/dist/core/agent-session-compaction.js.map +1 -1
  71. package/dist/core/agent-session-events.d.ts.map +1 -1
  72. package/dist/core/agent-session-events.js +1 -0
  73. package/dist/core/agent-session-events.js.map +1 -1
  74. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  75. package/dist/core/agent-session-extension-bindings.js +4 -0
  76. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  77. package/dist/core/agent-session-methods.d.ts +6 -1
  78. package/dist/core/agent-session-methods.d.ts.map +1 -1
  79. package/dist/core/agent-session-methods.js.map +1 -1
  80. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  81. package/dist/core/agent-session-prompt.js +3 -2
  82. package/dist/core/agent-session-prompt.js.map +1 -1
  83. package/dist/core/agent-session-runtime.d.ts +5 -1
  84. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  85. package/dist/core/agent-session-runtime.js +13 -9
  86. package/dist/core/agent-session-runtime.js.map +1 -1
  87. package/dist/core/agent-session-types.d.ts +1 -0
  88. package/dist/core/agent-session-types.d.ts.map +1 -1
  89. package/dist/core/agent-session-types.js.map +1 -1
  90. package/dist/core/agent-session.d.ts +1 -0
  91. package/dist/core/agent-session.d.ts.map +1 -1
  92. package/dist/core/agent-session.js.map +1 -1
  93. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  94. package/dist/core/export-html/tool-renderer.js +2 -0
  95. package/dist/core/export-html/tool-renderer.js.map +1 -1
  96. package/dist/core/extensions/agent-events.d.ts +2 -0
  97. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  98. package/dist/core/extensions/agent-events.js.map +1 -1
  99. package/dist/core/extensions/context-types.d.ts +2 -0
  100. package/dist/core/extensions/context-types.d.ts.map +1 -1
  101. package/dist/core/extensions/context-types.js.map +1 -1
  102. package/dist/core/extensions/mcp-server-registry.d.ts +4 -1
  103. package/dist/core/extensions/mcp-server-registry.d.ts.map +1 -1
  104. package/dist/core/extensions/mcp-server-registry.js +7 -4
  105. package/dist/core/extensions/mcp-server-registry.js.map +1 -1
  106. package/dist/core/extensions/runner.d.ts +3 -0
  107. package/dist/core/extensions/runner.d.ts.map +1 -1
  108. package/dist/core/extensions/runner.js +19 -0
  109. package/dist/core/extensions/runner.js.map +1 -1
  110. package/dist/core/extensions/session-events.d.ts +2 -0
  111. package/dist/core/extensions/session-events.d.ts.map +1 -1
  112. package/dist/core/extensions/session-events.js.map +1 -1
  113. package/dist/core/extensions/tool-types.d.ts +2 -0
  114. package/dist/core/extensions/tool-types.d.ts.map +1 -1
  115. package/dist/core/extensions/tool-types.js.map +1 -1
  116. package/dist/core/fast-model-variants.d.ts.map +1 -1
  117. package/dist/core/fast-model-variants.js +3 -2
  118. package/dist/core/fast-model-variants.js.map +1 -1
  119. package/dist/core/model-resolver-defaults.d.ts.map +1 -1
  120. package/dist/core/model-resolver-defaults.js +2 -0
  121. package/dist/core/model-resolver-defaults.js.map +1 -1
  122. package/dist/core/nested-tool-calls.d.ts +1 -0
  123. package/dist/core/nested-tool-calls.d.ts.map +1 -1
  124. package/dist/core/nested-tool-calls.js +1 -0
  125. package/dist/core/nested-tool-calls.js.map +1 -1
  126. package/dist/core/provider-alias.d.ts.map +1 -1
  127. package/dist/core/provider-alias.js +8 -0
  128. package/dist/core/provider-alias.js.map +1 -1
  129. package/dist/core/provider-composer-internal.d.ts.map +1 -1
  130. package/dist/core/provider-composer-internal.js +6 -3
  131. package/dist/core/provider-composer-internal.js.map +1 -1
  132. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  133. package/dist/core/resource-loader-reload.js +1 -0
  134. package/dist/core/resource-loader-reload.js.map +1 -1
  135. package/dist/core/resource-loader-types.d.ts +1 -0
  136. package/dist/core/resource-loader-types.d.ts.map +1 -1
  137. package/dist/core/resource-loader-types.js.map +1 -1
  138. package/dist/core/settings-types.js.map +1 -1
  139. package/dist/core/tools/bash.d.ts.map +1 -1
  140. package/dist/core/tools/bash.js +7 -3
  141. package/dist/core/tools/bash.js.map +1 -1
  142. package/dist/core/tools/edit.js +1 -1
  143. package/dist/core/tools/edit.js.map +1 -1
  144. package/dist/extensions/codemode/execute.d.ts.map +1 -1
  145. package/dist/extensions/codemode/execute.js +55 -7
  146. package/dist/extensions/codemode/execute.js.map +1 -1
  147. package/dist/extensions/codemode/index.d.ts.map +1 -1
  148. package/dist/extensions/codemode/index.js +7 -0
  149. package/dist/extensions/codemode/index.js.map +1 -1
  150. package/dist/extensions/codemode/tool.d.ts +2 -0
  151. package/dist/extensions/codemode/tool.d.ts.map +1 -1
  152. package/dist/extensions/codemode/tool.js +2 -0
  153. package/dist/extensions/codemode/tool.js.map +1 -1
  154. package/dist/extensions/herdr/index.d.ts.map +1 -1
  155. package/dist/extensions/herdr/index.js +20 -2
  156. package/dist/extensions/herdr/index.js.map +1 -1
  157. package/dist/extensions/herdr/pane-owner.d.ts +7 -0
  158. package/dist/extensions/herdr/pane-owner.d.ts.map +1 -1
  159. package/dist/extensions/herdr/pane-owner.js +53 -11
  160. package/dist/extensions/herdr/pane-owner.js.map +1 -1
  161. package/dist/index.d.ts +1 -1
  162. package/dist/index.d.ts.map +1 -1
  163. package/dist/index.js.map +1 -1
  164. package/dist/main-deferred-startup.d.ts +8 -0
  165. package/dist/main-deferred-startup.d.ts.map +1 -1
  166. package/dist/main-deferred-startup.js +6 -0
  167. package/dist/main-deferred-startup.js.map +1 -1
  168. package/dist/main.d.ts.map +1 -1
  169. package/dist/main.js +11 -3
  170. package/dist/main.js.map +1 -1
  171. package/dist/modes/interactive/components/bash-execution.d.ts +5 -1
  172. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  173. package/dist/modes/interactive/components/bash-execution.js +17 -14
  174. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  175. package/dist/modes/interactive/components/branch-summary-message.d.ts +2 -1
  176. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  177. package/dist/modes/interactive/components/branch-summary-message.js +5 -2
  178. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  179. package/dist/modes/interactive/components/chat-message-renderer.d.ts +1 -0
  180. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
  181. package/dist/modes/interactive/components/chat-message-renderer.js +19 -8
  182. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  183. package/dist/modes/interactive/components/compaction-boundary-message.d.ts +3 -2
  184. package/dist/modes/interactive/components/compaction-boundary-message.d.ts.map +1 -1
  185. package/dist/modes/interactive/components/compaction-boundary-message.js +7 -4
  186. package/dist/modes/interactive/components/compaction-boundary-message.js.map +1 -1
  187. package/dist/modes/interactive/components/custom-entry.d.ts +3 -1
  188. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  189. package/dist/modes/interactive/components/custom-entry.js +8 -2
  190. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  191. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  192. package/dist/modes/interactive/components/custom-message.js +1 -0
  193. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  194. package/dist/modes/interactive/components/settings-selector-items.js +1 -1
  195. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  196. package/dist/modes/interactive/components/skill-invocation-message.d.ts +2 -1
  197. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  198. package/dist/modes/interactive/components/skill-invocation-message.js +5 -2
  199. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  200. package/dist/modes/interactive/components/tool-execution.d.ts +4 -0
  201. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  202. package/dist/modes/interactive/components/tool-execution.js +10 -0
  203. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  204. package/dist/modes/interactive/interactive-agent-events.js +3 -1
  205. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  206. package/dist/modes/interactive/interactive-auth-login.js +6 -0
  207. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  208. package/dist/modes/interactive/interactive-auth-routing.js +2 -2
  209. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  210. package/dist/modes/interactive/interactive-bash-compact.js +2 -2
  211. package/dist/modes/interactive/interactive-bash-compact.js.map +1 -1
  212. package/dist/modes/interactive/interactive-extension-dialogs.js +19 -2
  213. package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
  214. package/dist/modes/interactive/interactive-mode-base.d.ts +4 -0
  215. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  216. package/dist/modes/interactive/interactive-mode-base.js +7 -0
  217. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  218. package/dist/modes/interactive/interactive-mode-helpers.js +1 -1
  219. package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -1
  220. package/dist/modes/interactive/interactive-mode-surface.d.ts +2 -1
  221. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  222. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  223. package/dist/modes/interactive/interactive-mode-types.d.ts +1 -0
  224. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
  225. package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
  226. package/dist/modes/interactive/interactive-process-lifecycle.js +1 -1
  227. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
  228. package/dist/modes/interactive/interactive-render-chat.js +7 -5
  229. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  230. package/dist/modes/interactive/interactive-selectors.js +8 -1
  231. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  232. package/dist/modes/interactive/interactive-session-runtime.js +1 -0
  233. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  234. package/dist/modes/interactive/interactive-startup-trust.d.ts +6 -0
  235. package/dist/modes/interactive/interactive-startup-trust.d.ts.map +1 -0
  236. package/dist/modes/interactive/interactive-startup-trust.js +15 -0
  237. package/dist/modes/interactive/interactive-startup-trust.js.map +1 -0
  238. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  239. package/dist/modes/interactive/interactive-startup.js +4 -0
  240. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  241. package/dist/modes/interactive/program-status-reporter.d.ts +24 -0
  242. package/dist/modes/interactive/program-status-reporter.d.ts.map +1 -0
  243. package/dist/modes/interactive/program-status-reporter.js +96 -0
  244. package/dist/modes/interactive/program-status-reporter.js.map +1 -0
  245. package/dist/modes/interactive-engine/engine-child-liveness.d.ts +1 -0
  246. package/dist/modes/interactive-engine/engine-child-liveness.d.ts.map +1 -1
  247. package/dist/modes/interactive-engine/engine-child-liveness.js +15 -1
  248. package/dist/modes/interactive-engine/engine-child-liveness.js.map +1 -1
  249. package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
  250. package/dist/modes/interactive-engine/engine-custom-ui.js +1 -0
  251. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  252. package/dist/modes/interactive-engine/engine-monitor.d.ts +4 -0
  253. package/dist/modes/interactive-engine/engine-monitor.d.ts.map +1 -1
  254. package/dist/modes/interactive-engine/engine-monitor.js +17 -0
  255. package/dist/modes/interactive-engine/engine-monitor.js.map +1 -1
  256. package/dist/modes/interactive-engine/engine-quit-intent.d.ts +16 -0
  257. package/dist/modes/interactive-engine/engine-quit-intent.d.ts.map +1 -0
  258. package/dist/modes/interactive-engine/engine-quit-intent.js +27 -0
  259. package/dist/modes/interactive-engine/engine-quit-intent.js.map +1 -0
  260. package/dist/modes/interactive-engine/engine-render-service.d.ts.map +1 -1
  261. package/dist/modes/interactive-engine/engine-render-service.js +3 -1
  262. package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
  263. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +1 -0
  264. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
  265. package/dist/modes/interactive-engine/extension-ui-bridge.js +5 -0
  266. package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
  267. package/dist/modes/interactive-engine/isolated-runtime.d.ts +4 -1
  268. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  269. package/dist/modes/interactive-engine/isolated-runtime.js +19 -2
  270. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  271. package/dist/modes/interactive-engine/protocol.d.ts +19 -1
  272. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  273. package/dist/modes/interactive-engine/protocol.js +7 -0
  274. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  275. package/dist/modes/interactive-engine/remote-renderer.d.ts +3 -0
  276. package/dist/modes/interactive-engine/remote-renderer.d.ts.map +1 -1
  277. package/dist/modes/interactive-engine/remote-renderer.js +7 -0
  278. package/dist/modes/interactive-engine/remote-renderer.js.map +1 -1
  279. package/dist/modes/rpc/rpc-client.d.ts +11 -0
  280. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  281. package/dist/modes/rpc/rpc-client.js +42 -0
  282. package/dist/modes/rpc/rpc-client.js.map +1 -1
  283. package/dist/modes/rpc/rpc-input-scheduler.js +2 -2
  284. package/dist/modes/rpc/rpc-input-scheduler.js.map +1 -1
  285. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  286. package/dist/modes/rpc/rpc-mode.js +23 -6
  287. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  288. package/dist/modes/rpc/rpc-provider-auth.js +1 -1
  289. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  290. package/docs/codemode.md +10 -6
  291. package/docs/compaction.md +1 -1
  292. package/docs/computer-use.md +9 -9
  293. package/docs/custom-provider/streaming.md +4 -0
  294. package/docs/environment-variables.md +2 -0
  295. package/docs/extensions/api-reference.md +1 -1
  296. package/docs/extensions/authoring.md +2 -0
  297. package/docs/extensions/events.md +8 -1
  298. package/docs/getting-started/first-session.md +1 -1
  299. package/docs/herdr.md +11 -2
  300. package/docs/json.md +6 -1
  301. package/docs/models/evals.md +34 -3
  302. package/docs/models.md +1 -1
  303. package/docs/providers.md +10 -0
  304. package/docs/sdk.md +8 -2
  305. package/docs/settings.md +2 -2
  306. package/docs/skills.md +1 -1
  307. package/docs/terminal-setup.md +14 -0
  308. package/docs/workflows/authoring.md +3 -3
  309. package/examples/extensions/sandbox/package-lock.json +3 -3
  310. package/npm-shrinkwrap.json +67 -67
  311. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"engine-custom-ui.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/engine-custom-ui.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype Component,\n\tisKeyRelease,\n\ttype OverlayHandle,\n\ttype OverlayOptions,\n\ttype Terminal,\n\ttype TUI,\n\tTuiMainScreen,\n} from \"@earendil-works/pi-tui\";\nimport { getAgentDir } from \"../../config.js\";\nimport { runCallback } from \"../../core/callback-activity.ts\";\nimport type { HostCustomUiState, HostCustomUiStateListener } from \"../../core/extensions/index.js\";\nimport type { ScrollableWidgetComponent } from \"../../core/extensions/ui-types.js\";\nimport type { KeybindingsManager } from \"../../core/keybindings.ts\";\nimport { ensurePngTranscoder } from \"../../utils/image-convert.ts\";\nimport type { Theme } from \"../interactive/theme/theme.js\";\nimport { theme } from \"../interactive/theme/theme.js\";\nimport {\n\ttype EngineTerminalControl,\n\ttype InteractiveEngineMessage,\n\tisJsonValue,\n\ttype JsonValue,\n\tparseInteractiveEngineCommand,\n\ttype SerializableOverlayOptions,\n\tserializeInteractiveEngineMessage,\n} from \"./protocol.ts\";\n\ninterface CustomUiOptions {\n\tpurpose?: \"prompt\" | \"navigation\";\n\toverlay?: boolean;\n\tdeferInlineCustomUiFocus?: boolean;\n\t/** The component binds Ctrl+C itself; see ExtensionUIContext.custom options. */\n\thandlesCtrlC?: boolean;\n\t/** The component claims internal UI actions such as the jump-to-bottom URL. */\n\thandlesInternalUiAction?: boolean;\n\t/** Bound this overlay and reserve transcript scroll extent on the host. */\n\treserveTranscriptRows?: boolean;\n\toverlayOptions?: OverlayOptions | (() => OverlayOptions);\n\tonHandle?: (handle: OverlayHandle) => void;\n\tsignal?: AbortSignal;\n}\n\ninterface ActiveComponent {\n\tcomponent: Component & { dispose?(): void };\n\tresolve: (value: JsonValue | undefined) => void;\n\toverlay: boolean;\n\tpurpose?: \"prompt\" | \"navigation\";\n\tterminal: RemoteTerminal;\n\ttui: TUI;\n\twidgetKey?: string;\n\t/**\n\t * Overlay visibility as last driven through the remote OverlayHandle.\n\t * Hidden components are skipped by the extension-level `requestRender()`\n\t * broadcast (#1856) — invalidating a hidden overlay only produced host\n\t * render work and terminal writes for frames the user cannot see.\n\t */\n\thidden?: boolean;\n}\n\nclass RemoteTerminal implements Terminal {\n\tcolumns = 80;\n\trows = 24;\n\tkittyProtocolActive = false;\n\tprivate readonly invalidate: () => void;\n\tprivate readonly control: ((control: EngineTerminalControl) => void) | undefined;\n\tprivate readonly copy: ((requestId: number, text: string) => void) | undefined;\n\tprivate nextCopyId = 0;\n\tprivate readonly pendingCopies = new Map<\n\t\tnumber,\n\t\t{ resolve: () => void; reject: (error: Error) => void; timer: ReturnType<typeof setTimeout> }\n\t>();\n\tconstructor(\n\t\tinvalidate: () => void,\n\t\tcontrol?: (control: EngineTerminalControl) => void,\n\t\tcopy?: (requestId: number, text: string) => void,\n\t) {\n\t\tthis.invalidate = invalidate;\n\t\tthis.control = control;\n\t\tthis.copy = copy;\n\t}\n\tcopyTextToHost(text: string): Promise<void> {\n\t\tif (!this.copy) return Promise.reject(new Error(\"Host clipboard unavailable\"));\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst requestId = ++this.nextCopyId;\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\tthis.pendingCopies.delete(requestId);\n\t\t\t\treject(new Error(\"Host clipboard did not respond\"));\n\t\t\t}, 15_000);\n\t\t\tthis.pendingCopies.set(requestId, { resolve, reject, timer });\n\t\t\tthis.copy?.(requestId, text);\n\t\t});\n\t}\n\tresolveCopy(requestId: number, error?: string): void {\n\t\tconst pending = this.pendingCopies.get(requestId);\n\t\tif (!pending) return;\n\t\tclearTimeout(pending.timer);\n\t\tthis.pendingCopies.delete(requestId);\n\t\tif (error) pending.reject(new Error(error));\n\t\telse pending.resolve();\n\t}\n\tclose(): void {\n\t\tfor (const requestId of this.pendingCopies.keys()) this.resolveCopy(requestId, \"Sign-in screen closed\");\n\t}\n\tstart(): void {}\n\tstop(): void {}\n\tasync drainInput(): Promise<void> {}\n\twrite(): void {\n\t\tthis.invalidate();\n\t}\n\tmoveBy(): void {}\n\thideCursor(): void {}\n\tshowCursor(): void {}\n\tclearLine(): void {}\n\tclearFromCursor(): void {}\n\tclearScreen(): void {}\n\tsetTitle(): void {}\n\tsetProgress(): void {}\n\t/** Ask the host to toggle host-TTY autowrap (DECAWM) for this component. */\n\tsetAutowrap(enabled: boolean): void {\n\t\tthis.control?.({ kind: \"autowrap\", enabled });\n\t}\n}\n\nfunction serializableOverlayOptions(\n\toptions: CustomUiOptions[\"overlayOptions\"],\n): SerializableOverlayOptions | undefined {\n\tconst value = typeof options === \"function\" ? options() : options;\n\tif (!value) return undefined;\n\tconst { anchor, col, margin, maxHeight, minWidth, offsetX, offsetY, row, width } = value;\n\treturn { anchor, col, margin, maxHeight, minWidth, offsetX, offsetY, row, width };\n}\n\nfunction jsonResult(value: object | boolean | null | number | string | undefined): JsonValue | undefined {\n\tif (value === undefined) return undefined;\n\tconst encoded = JSON.stringify(value);\n\tif (encoded === undefined) return undefined;\n\tconst decoded = JSON.parse(encoded) as JsonValue;\n\tif (!isJsonValue(decoded)) throw new Error(\"Custom UI result is not JSON-safe\");\n\treturn decoded;\n}\n\nexport class EngineCustomUiService {\n\tprivate readonly widgetIds = new Map<string, string>();\n\tprivate readonly active = new Map<string, ActiveComponent>();\n\tprivate nextId = 0;\n\tprivate readonly write: (line: string) => void;\n\tprivate readonly keybindings: KeybindingsManager;\n\tprivate readonly stateListeners = new Set<HostCustomUiStateListener>();\n\tprivate readonly widgetReleaseListeners = new Map<string, Set<() => void>>();\n\n\tsetWidget(\n\t\tkey: string,\n\t\tfactory: ((tui: TUI, theme: Theme) => Component & { dispose?(): void }) | undefined,\n\t\tplacement?: \"aboveEditor\" | \"belowEditor\",\n\t\tscroll?: { maxHeight: number; maxHeightFraction?: number },\n\t): void {\n\t\tconst previous = this.widgetIds.get(key);\n\t\tif (previous) this.disposeComponent(previous, false, false);\n\t\tif (!factory) {\n\t\t\tthis.notifyWidgetRelease(key);\n\t\t\treturn;\n\t\t}\n\t\tconst componentId = `remote_widget_${++this.nextId}`;\n\t\tthis.widgetIds.set(key, componentId);\n\t\tconst terminal = new RemoteTerminal(() => this.send({ type: \"engine_custom_invalidate\", componentId }));\n\t\tconst tui = new TuiMainScreen(terminal, undefined, getAgentDir());\n\t\tensurePngTranscoder(() => {\n\t\t\ttui.invalidate();\n\t\t\ttui.requestRender();\n\t\t});\n\t\tvoid runCallback({ kind: \"renderer\", name: `widget:${key}` }, () => factory(tui, theme))\n\t\t\t.then((component) => {\n\t\t\t\tif (this.widgetIds.get(key) !== componentId) {\n\t\t\t\t\tcomponent.dispose?.();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttui.addChild(component);\n\t\t\t\tthis.active.set(componentId, {\n\t\t\t\t\tcomponent,\n\t\t\t\t\tresolve: () => {},\n\t\t\t\t\toverlay: false,\n\t\t\t\t\tterminal,\n\t\t\t\t\ttui,\n\t\t\t\t\twidgetKey: key,\n\t\t\t\t});\n\t\t\t\tthis.send({\n\t\t\t\t\ttype: \"engine_custom_open\",\n\t\t\t\t\tcomponentId,\n\t\t\t\t\toverlay: false,\n\t\t\t\t\twidgetKey: key,\n\t\t\t\t\twidgetPlacement: placement,\n\t\t\t\t\t...(scroll ? { widgetScroll: scroll } : {}),\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch((error: Error) => {\n\t\t\t\tif (this.widgetIds.get(key) === componentId) this.widgetIds.delete(key);\n\t\t\t\tthis.send({\n\t\t\t\t\ttype: \"engine_custom_frame\",\n\t\t\t\t\tcomponentId,\n\t\t\t\t\trequestId: 0,\n\t\t\t\t\tlines: [`Widget ${key} failed: ${error.message}`],\n\t\t\t\t});\n\t\t\t});\n\t}\n\tconstructor(write: (line: string) => void, keybindings: KeybindingsManager) {\n\t\tthis.write = write;\n\t\tthis.keybindings = keybindings;\n\t}\n\n\tasync custom<T>(\n\t\tfactory: (\n\t\t\ttui: TUI,\n\t\t\ttheme: Theme,\n\t\t\tkeybindings: KeybindingsManager,\n\t\t\tdone: (result: T) => void,\n\t\t) => (Component & { dispose?(): void }) | Promise<Component & { dispose?(): void }>,\n\t\toptions?: CustomUiOptions,\n\t): Promise<T> {\n\t\tconst componentId = `remote_component_${++this.nextId}`;\n\t\tlet resolveCompletion!: (value: T) => void;\n\t\tconst completion = new Promise<T>((resolve) => {\n\t\t\tresolveCompletion = resolve;\n\t\t});\n\t\tlet opened = false;\n\t\tlet pendingDone: T | undefined;\n\t\tlet doneCalled = false;\n\t\tconst done = (result: T): void => {\n\t\t\tif (doneCalled) return;\n\t\t\tdoneCalled = true;\n\t\t\tpendingDone = result;\n\t\t\tresolveCompletion(result);\n\t\t\tif (opened) this.sendDone(componentId, result);\n\t\t};\n\t\tconst terminal = new RemoteTerminal(\n\t\t\t() => this.send({ type: \"engine_custom_invalidate\", componentId }),\n\t\t\t(control) => this.send({ type: \"engine_custom_terminal\", componentId, control }),\n\t\t\t(requestId, text) => this.send({ type: \"engine_custom_copy\", componentId, requestId, text }),\n\t\t);\n\t\tconst tui = new TuiMainScreen(terminal, undefined, getAgentDir());\n\t\tensurePngTranscoder(() => {\n\t\t\ttui.invalidate();\n\t\t\ttui.requestRender();\n\t\t});\n\t\tconst component = await factory(tui, theme, this.keybindings, done);\n\t\ttui.addChild(component);\n\t\ttui.setFocus(component);\n\t\tconst record: ActiveComponent = {\n\t\t\tcomponent,\n\t\t\t// Cancellation must settle through the same guarded host completion as done().\n\t\t\tresolve: (value) => done(value as T),\n\t\t\tterminal,\n\t\t\ttui,\n\t\t\toverlay: options?.overlay === true,\n\t\t\tpurpose: options?.purpose,\n\t\t};\n\t\tthis.active.set(componentId, record);\n\t\tthis.notifyState();\n\t\topened = true;\n\t\tthis.send({\n\t\t\ttype: \"engine_custom_open\",\n\t\t\tcomponentId,\n\t\t\toverlay: options?.overlay === true,\n\t\t\tpurpose: options?.purpose,\n\t\t\tdeferInlineCustomUiFocus: options?.deferInlineCustomUiFocus,\n\t\t\thandlesCtrlC: options?.handlesCtrlC,\n\t\t\thandlesInternalUiAction: options?.handlesInternalUiAction,\n\t\t\treserveTranscriptRows: options?.reserveTranscriptRows,\n\t\t\toverlayOptions: serializableOverlayOptions(options?.overlayOptions),\n\t\t});\n\t\tif (options?.onHandle) options.onHandle(this.remoteHandle(componentId));\n\t\tif (doneCalled) this.sendDone(componentId, pendingDone as T);\n\t\tconst onAbort = () => this.disposeComponent(componentId, true);\n\t\toptions?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\ttry {\n\t\t\treturn await completion;\n\t\t} finally {\n\t\t\toptions?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\tthis.disposeComponent(componentId, false);\n\t\t}\n\t}\n\tgetHostCustomUiState(): HostCustomUiState {\n\t\tconst inline = [...this.active.values()].filter((record) => !record.overlay && !record.widgetKey);\n\t\tconst navigation = inline.filter((record) => record.purpose === \"navigation\").length;\n\t\treturn {\n\t\t\tblockingInlineCustomUiDepth: inline.length,\n\t\t\tblockingInlineCustomUiActive: inline.length > 0,\n\t\t\t...(navigation > 0 ? { blockingInlineCustomUiNeedsInput: inline.length > navigation } : {}),\n\t\t};\n\t}\n\n\tonHostCustomUiStateChange(listener: HostCustomUiStateListener): () => void {\n\t\tthis.stateListeners.add(listener);\n\t\treturn () => this.stateListeners.delete(listener);\n\t}\n\tonWidgetRelease(key: string, listener: () => void): () => void {\n\t\tconst listeners = this.widgetReleaseListeners.get(key) ?? new Set<() => void>();\n\t\tlisteners.add(listener);\n\t\tthis.widgetReleaseListeners.set(key, listeners);\n\t\treturn () => {\n\t\t\tlisteners.delete(listener);\n\t\t\tif (listeners.size === 0) this.widgetReleaseListeners.delete(key);\n\t\t};\n\t}\n\n\tfocusHostInlineCustomUi(): boolean {\n\t\treturn this.getHostCustomUiState().blockingInlineCustomUiActive;\n\t}\n\n\trequestRender(): void {\n\t\tfor (const [componentId, record] of this.active) {\n\t\t\tif (record.hidden === true) continue;\n\t\t\tthis.send({ type: \"engine_custom_invalidate\", componentId });\n\t\t}\n\t}\n\n\thandleLine(line: string): boolean {\n\t\tconst command = parseInteractiveEngineCommand(line);\n\t\tif (!command) return false;\n\t\tif (!command.type.startsWith(\"engine_custom_\")) return false;\n\t\tconst record = this.active.get(command.componentId);\n\t\tif (!record) {\n\t\t\tif (command.type === \"engine_custom_input\")\n\t\t\t\tthis.send({\n\t\t\t\t\ttype: \"engine_custom_input_result\",\n\t\t\t\t\tcomponentId: command.componentId,\n\t\t\t\t\trequestId: command.requestId,\n\t\t\t\t\thandled: false,\n\t\t\t\t});\n\t\t\treturn true;\n\t\t}\n\t\tswitch (command.type) {\n\t\t\tcase \"engine_custom_scroll\":\n\t\t\t\t(record.component as ScrollableWidgetComponent).onScroll?.(command.state);\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_render\":\n\t\t\t\trecord.terminal.columns = Math.max(1, command.width);\n\t\t\t\trecord.terminal.rows = Math.max(1, command.rows);\n\t\t\t\tvoid runCallback({ kind: \"renderer\", name: command.componentId }, () =>\n\t\t\t\t\trecord.component.render(record.terminal.columns),\n\t\t\t\t)\n\t\t\t\t\t.then((lines) => {\n\t\t\t\t\t\tconst scrollRequest = (record.component as ScrollableWidgetComponent).getScrollRequest?.();\n\t\t\t\t\t\tthis.send({\n\t\t\t\t\t\t\ttype: \"engine_custom_frame\",\n\t\t\t\t\t\t\tcomponentId: command.componentId,\n\t\t\t\t\t\t\trequestId: command.requestId,\n\t\t\t\t\t\t\tlines,\n\t\t\t\t\t\t\t...(scrollRequest ? { scrollRequest } : {}),\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error: Error) =>\n\t\t\t\t\t\tthis.send({\n\t\t\t\t\t\t\ttype: \"engine_custom_frame\",\n\t\t\t\t\t\t\tcomponentId: command.componentId,\n\t\t\t\t\t\t\trequestId: command.requestId,\n\t\t\t\t\t\t\tlines: [`Remote component render failed: ${error.message}`],\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_input\":\n\t\t\t\tvoid runCallback({ kind: \"renderer\", name: command.componentId }, () => {\n\t\t\t\t\tif (isKeyRelease(command.data) && record.component.wantsKeyRelease !== true) return false;\n\t\t\t\t\tconst handleInput = record.component.handleInput as ((data: string) => boolean | undefined) | undefined;\n\t\t\t\t\treturn handleInput?.call(record.component, command.data) === true;\n\t\t\t\t})\n\t\t\t\t\t.then((handled) =>\n\t\t\t\t\t\tthis.send({\n\t\t\t\t\t\t\ttype: \"engine_custom_input_result\",\n\t\t\t\t\t\t\tcomponentId: command.componentId,\n\t\t\t\t\t\t\trequestId: command.requestId,\n\t\t\t\t\t\t\thandled,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t\t.catch(() =>\n\t\t\t\t\t\tthis.send({\n\t\t\t\t\t\t\ttype: \"engine_custom_input_result\",\n\t\t\t\t\t\t\tcomponentId: command.componentId,\n\t\t\t\t\t\t\trequestId: command.requestId,\n\t\t\t\t\t\t\thandled: false,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_copy_result\":\n\t\t\t\trecord.terminal.resolveCopy(command.requestId, command.error);\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_dispose\":\n\t\t\t\tthis.disposeComponent(command.componentId, true);\n\t\t\t\tbreak;\n\t\t}\n\t\treturn true;\n\t}\n\n\tdispose(): void {\n\t\tfor (const componentId of [...this.active.keys()]) this.disposeComponent(componentId, true, false);\n\t}\n\tprivate disposeComponent(componentId: string, resolve: boolean, notifyWidgetRelease = true): void {\n\t\tconst record = this.active.get(componentId);\n\t\tif (!record) return;\n\t\tthis.active.delete(componentId);\n\t\trecord.terminal.close();\n\t\t// Claim cancellation before user disposal code can call done() reentrantly.\n\t\tif (resolve) record.resolve(undefined);\n\t\trecord.component.dispose?.();\n\t\trecord.tui.stop();\n\t\tif (record.widgetKey) {\n\t\t\tif (this.widgetIds.get(record.widgetKey) === componentId) this.widgetIds.delete(record.widgetKey);\n\t\t\tthis.send({ type: \"engine_custom_close\", componentId });\n\t\t\tif (notifyWidgetRelease) this.notifyWidgetRelease(record.widgetKey);\n\t\t}\n\t\tthis.notifyState();\n\t}\n\tprivate notifyWidgetRelease(key: string): void {\n\t\tfor (const listener of this.widgetReleaseListeners.get(key) ?? []) {\n\t\t\ttry {\n\t\t\t\tlistener();\n\t\t\t} catch {\n\t\t\t\t// A release observer must not break engine UI teardown.\n\t\t\t}\n\t\t}\n\t}\n\tprivate notifyState(): void {\n\t\tconst state = this.getHostCustomUiState();\n\t\tfor (const listener of this.stateListeners) listener(state);\n\t}\n\n\tprivate remoteHandle(componentId: string): OverlayHandle {\n\t\tlet focused = true;\n\t\tconst setHiddenFlag = (value: boolean): void => {\n\t\t\tconst record = this.active.get(componentId);\n\t\t\tif (record) record.hidden = value;\n\t\t};\n\t\treturn {\n\t\t\thide: () => {\n\t\t\t\tsetHiddenFlag(true);\n\t\t\t\tthis.send({ type: \"engine_custom_control\", componentId, action: \"hide\" });\n\t\t\t},\n\t\t\tsetHidden: (value) => {\n\t\t\t\tsetHiddenFlag(value);\n\t\t\t\tthis.send({ type: \"engine_custom_control\", componentId, action: value ? \"hide\" : \"show\" });\n\t\t\t},\n\t\t\tisHidden: () => this.active.get(componentId)?.hidden === true,\n\t\t\tfocus: () => {\n\t\t\t\tfocused = true;\n\t\t\t\tthis.send({ type: \"engine_custom_control\", componentId, action: \"focus\" });\n\t\t\t},\n\t\t\tunfocus: () => {\n\t\t\t\tfocused = false;\n\t\t\t\tthis.send({ type: \"engine_custom_control\", componentId, action: \"unfocus\" });\n\t\t\t},\n\t\t\tisFocused: () => focused,\n\t\t\tgetBounds: () => undefined,\n\t\t};\n\t}\n\n\tprivate sendDone<T>(componentId: string, result: T): void {\n\t\tthis.send({\n\t\t\ttype: \"engine_custom_done\",\n\t\t\tcomponentId,\n\t\t\tresult: jsonResult(result as object | boolean | null | number | string | undefined),\n\t\t});\n\t}\n\n\tprivate send(message: InteractiveEngineMessage): void {\n\t\tthis.write(serializeInteractiveEngineMessage(message));\n\t}\n}\n"]}
1
+ {"version":3,"file":"engine-custom-ui.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/engine-custom-ui.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype Component,\n\tisKeyRelease,\n\ttype OverlayHandle,\n\ttype OverlayOptions,\n\ttype Terminal,\n\ttype TUI,\n\tTuiMainScreen,\n} from \"@earendil-works/pi-tui\";\nimport { getAgentDir } from \"../../config.js\";\nimport { runCallback } from \"../../core/callback-activity.ts\";\nimport type { HostCustomUiState, HostCustomUiStateListener } from \"../../core/extensions/index.js\";\nimport type { ScrollableWidgetComponent } from \"../../core/extensions/ui-types.js\";\nimport type { KeybindingsManager } from \"../../core/keybindings.ts\";\nimport { ensurePngTranscoder } from \"../../utils/image-convert.ts\";\nimport type { Theme } from \"../interactive/theme/theme.js\";\nimport { theme } from \"../interactive/theme/theme.js\";\nimport {\n\ttype EngineTerminalControl,\n\ttype InteractiveEngineMessage,\n\tisJsonValue,\n\ttype JsonValue,\n\tparseInteractiveEngineCommand,\n\ttype SerializableOverlayOptions,\n\tserializeInteractiveEngineMessage,\n} from \"./protocol.ts\";\n\ninterface CustomUiOptions {\n\tpurpose?: \"prompt\" | \"navigation\";\n\toverlay?: boolean;\n\tdeferInlineCustomUiFocus?: boolean;\n\t/** The component binds Ctrl+C itself; see ExtensionUIContext.custom options. */\n\thandlesCtrlC?: boolean;\n\t/** The component claims internal UI actions such as the jump-to-bottom URL. */\n\thandlesInternalUiAction?: boolean;\n\t/** Bound this overlay and reserve transcript scroll extent on the host. */\n\treserveTranscriptRows?: boolean;\n\toverlayOptions?: OverlayOptions | (() => OverlayOptions);\n\tonHandle?: (handle: OverlayHandle) => void;\n\tsignal?: AbortSignal;\n}\n\ninterface ActiveComponent {\n\tcomponent: Component & { dispose?(): void };\n\tresolve: (value: JsonValue | undefined) => void;\n\toverlay: boolean;\n\tpurpose?: \"prompt\" | \"navigation\";\n\tterminal: RemoteTerminal;\n\ttui: TUI;\n\twidgetKey?: string;\n\t/**\n\t * Overlay visibility as last driven through the remote OverlayHandle.\n\t * Hidden components are skipped by the extension-level `requestRender()`\n\t * broadcast (#1856) — invalidating a hidden overlay only produced host\n\t * render work and terminal writes for frames the user cannot see.\n\t */\n\thidden?: boolean;\n}\n\nclass RemoteTerminal implements Terminal {\n\tcolumns = 80;\n\trows = 24;\n\tkittyProtocolActive = false;\n\tprivate readonly invalidate: () => void;\n\tprivate readonly control: ((control: EngineTerminalControl) => void) | undefined;\n\tprivate readonly copy: ((requestId: number, text: string) => void) | undefined;\n\tprivate nextCopyId = 0;\n\tprivate readonly pendingCopies = new Map<\n\t\tnumber,\n\t\t{ resolve: () => void; reject: (error: Error) => void; timer: ReturnType<typeof setTimeout> }\n\t>();\n\tconstructor(\n\t\tinvalidate: () => void,\n\t\tcontrol?: (control: EngineTerminalControl) => void,\n\t\tcopy?: (requestId: number, text: string) => void,\n\t) {\n\t\tthis.invalidate = invalidate;\n\t\tthis.control = control;\n\t\tthis.copy = copy;\n\t}\n\tcopyTextToHost(text: string): Promise<void> {\n\t\tif (!this.copy) return Promise.reject(new Error(\"Host clipboard unavailable\"));\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst requestId = ++this.nextCopyId;\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\tthis.pendingCopies.delete(requestId);\n\t\t\t\treject(new Error(\"Host clipboard did not respond\"));\n\t\t\t}, 15_000);\n\t\t\tthis.pendingCopies.set(requestId, { resolve, reject, timer });\n\t\t\tthis.copy?.(requestId, text);\n\t\t});\n\t}\n\tresolveCopy(requestId: number, error?: string): void {\n\t\tconst pending = this.pendingCopies.get(requestId);\n\t\tif (!pending) return;\n\t\tclearTimeout(pending.timer);\n\t\tthis.pendingCopies.delete(requestId);\n\t\tif (error) pending.reject(new Error(error));\n\t\telse pending.resolve();\n\t}\n\tclose(): void {\n\t\tfor (const requestId of this.pendingCopies.keys()) this.resolveCopy(requestId, \"Sign-in screen closed\");\n\t}\n\tstart(): void {}\n\tstop(): void {}\n\tasync drainInput(): Promise<void> {}\n\twrite(): void {\n\t\tthis.invalidate();\n\t}\n\tmoveBy(): void {}\n\thideCursor(): void {}\n\tshowCursor(): void {}\n\tclearLine(): void {}\n\tclearFromCursor(): void {}\n\tclearScreen(): void {}\n\tsetTitle(): void {}\n\tsetProgress(): void {}\n\tsetProgramStatus(): void {}\n\t/** Ask the host to toggle host-TTY autowrap (DECAWM) for this component. */\n\tsetAutowrap(enabled: boolean): void {\n\t\tthis.control?.({ kind: \"autowrap\", enabled });\n\t}\n}\n\nfunction serializableOverlayOptions(\n\toptions: CustomUiOptions[\"overlayOptions\"],\n): SerializableOverlayOptions | undefined {\n\tconst value = typeof options === \"function\" ? options() : options;\n\tif (!value) return undefined;\n\tconst { anchor, col, margin, maxHeight, minWidth, offsetX, offsetY, row, width } = value;\n\treturn { anchor, col, margin, maxHeight, minWidth, offsetX, offsetY, row, width };\n}\n\nfunction jsonResult(value: object | boolean | null | number | string | undefined): JsonValue | undefined {\n\tif (value === undefined) return undefined;\n\tconst encoded = JSON.stringify(value);\n\tif (encoded === undefined) return undefined;\n\tconst decoded = JSON.parse(encoded) as JsonValue;\n\tif (!isJsonValue(decoded)) throw new Error(\"Custom UI result is not JSON-safe\");\n\treturn decoded;\n}\n\nexport class EngineCustomUiService {\n\tprivate readonly widgetIds = new Map<string, string>();\n\tprivate readonly active = new Map<string, ActiveComponent>();\n\tprivate nextId = 0;\n\tprivate readonly write: (line: string) => void;\n\tprivate readonly keybindings: KeybindingsManager;\n\tprivate readonly stateListeners = new Set<HostCustomUiStateListener>();\n\tprivate readonly widgetReleaseListeners = new Map<string, Set<() => void>>();\n\n\tsetWidget(\n\t\tkey: string,\n\t\tfactory: ((tui: TUI, theme: Theme) => Component & { dispose?(): void }) | undefined,\n\t\tplacement?: \"aboveEditor\" | \"belowEditor\",\n\t\tscroll?: { maxHeight: number; maxHeightFraction?: number },\n\t): void {\n\t\tconst previous = this.widgetIds.get(key);\n\t\tif (previous) this.disposeComponent(previous, false, false);\n\t\tif (!factory) {\n\t\t\tthis.notifyWidgetRelease(key);\n\t\t\treturn;\n\t\t}\n\t\tconst componentId = `remote_widget_${++this.nextId}`;\n\t\tthis.widgetIds.set(key, componentId);\n\t\tconst terminal = new RemoteTerminal(() => this.send({ type: \"engine_custom_invalidate\", componentId }));\n\t\tconst tui = new TuiMainScreen(terminal, undefined, getAgentDir());\n\t\tensurePngTranscoder(() => {\n\t\t\ttui.invalidate();\n\t\t\ttui.requestRender();\n\t\t});\n\t\tvoid runCallback({ kind: \"renderer\", name: `widget:${key}` }, () => factory(tui, theme))\n\t\t\t.then((component) => {\n\t\t\t\tif (this.widgetIds.get(key) !== componentId) {\n\t\t\t\t\tcomponent.dispose?.();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttui.addChild(component);\n\t\t\t\tthis.active.set(componentId, {\n\t\t\t\t\tcomponent,\n\t\t\t\t\tresolve: () => {},\n\t\t\t\t\toverlay: false,\n\t\t\t\t\tterminal,\n\t\t\t\t\ttui,\n\t\t\t\t\twidgetKey: key,\n\t\t\t\t});\n\t\t\t\tthis.send({\n\t\t\t\t\ttype: \"engine_custom_open\",\n\t\t\t\t\tcomponentId,\n\t\t\t\t\toverlay: false,\n\t\t\t\t\twidgetKey: key,\n\t\t\t\t\twidgetPlacement: placement,\n\t\t\t\t\t...(scroll ? { widgetScroll: scroll } : {}),\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch((error: Error) => {\n\t\t\t\tif (this.widgetIds.get(key) === componentId) this.widgetIds.delete(key);\n\t\t\t\tthis.send({\n\t\t\t\t\ttype: \"engine_custom_frame\",\n\t\t\t\t\tcomponentId,\n\t\t\t\t\trequestId: 0,\n\t\t\t\t\tlines: [`Widget ${key} failed: ${error.message}`],\n\t\t\t\t});\n\t\t\t});\n\t}\n\tconstructor(write: (line: string) => void, keybindings: KeybindingsManager) {\n\t\tthis.write = write;\n\t\tthis.keybindings = keybindings;\n\t}\n\n\tasync custom<T>(\n\t\tfactory: (\n\t\t\ttui: TUI,\n\t\t\ttheme: Theme,\n\t\t\tkeybindings: KeybindingsManager,\n\t\t\tdone: (result: T) => void,\n\t\t) => (Component & { dispose?(): void }) | Promise<Component & { dispose?(): void }>,\n\t\toptions?: CustomUiOptions,\n\t): Promise<T> {\n\t\tconst componentId = `remote_component_${++this.nextId}`;\n\t\tlet resolveCompletion!: (value: T) => void;\n\t\tconst completion = new Promise<T>((resolve) => {\n\t\t\tresolveCompletion = resolve;\n\t\t});\n\t\tlet opened = false;\n\t\tlet pendingDone: T | undefined;\n\t\tlet doneCalled = false;\n\t\tconst done = (result: T): void => {\n\t\t\tif (doneCalled) return;\n\t\t\tdoneCalled = true;\n\t\t\tpendingDone = result;\n\t\t\tresolveCompletion(result);\n\t\t\tif (opened) this.sendDone(componentId, result);\n\t\t};\n\t\tconst terminal = new RemoteTerminal(\n\t\t\t() => this.send({ type: \"engine_custom_invalidate\", componentId }),\n\t\t\t(control) => this.send({ type: \"engine_custom_terminal\", componentId, control }),\n\t\t\t(requestId, text) => this.send({ type: \"engine_custom_copy\", componentId, requestId, text }),\n\t\t);\n\t\tconst tui = new TuiMainScreen(terminal, undefined, getAgentDir());\n\t\tensurePngTranscoder(() => {\n\t\t\ttui.invalidate();\n\t\t\ttui.requestRender();\n\t\t});\n\t\tconst component = await factory(tui, theme, this.keybindings, done);\n\t\ttui.addChild(component);\n\t\ttui.setFocus(component);\n\t\tconst record: ActiveComponent = {\n\t\t\tcomponent,\n\t\t\t// Cancellation must settle through the same guarded host completion as done().\n\t\t\tresolve: (value) => done(value as T),\n\t\t\tterminal,\n\t\t\ttui,\n\t\t\toverlay: options?.overlay === true,\n\t\t\tpurpose: options?.purpose,\n\t\t};\n\t\tthis.active.set(componentId, record);\n\t\tthis.notifyState();\n\t\topened = true;\n\t\tthis.send({\n\t\t\ttype: \"engine_custom_open\",\n\t\t\tcomponentId,\n\t\t\toverlay: options?.overlay === true,\n\t\t\tpurpose: options?.purpose,\n\t\t\tdeferInlineCustomUiFocus: options?.deferInlineCustomUiFocus,\n\t\t\thandlesCtrlC: options?.handlesCtrlC,\n\t\t\thandlesInternalUiAction: options?.handlesInternalUiAction,\n\t\t\treserveTranscriptRows: options?.reserveTranscriptRows,\n\t\t\toverlayOptions: serializableOverlayOptions(options?.overlayOptions),\n\t\t});\n\t\tif (options?.onHandle) options.onHandle(this.remoteHandle(componentId));\n\t\tif (doneCalled) this.sendDone(componentId, pendingDone as T);\n\t\tconst onAbort = () => this.disposeComponent(componentId, true);\n\t\toptions?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\ttry {\n\t\t\treturn await completion;\n\t\t} finally {\n\t\t\toptions?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\tthis.disposeComponent(componentId, false);\n\t\t}\n\t}\n\tgetHostCustomUiState(): HostCustomUiState {\n\t\tconst inline = [...this.active.values()].filter((record) => !record.overlay && !record.widgetKey);\n\t\tconst navigation = inline.filter((record) => record.purpose === \"navigation\").length;\n\t\treturn {\n\t\t\tblockingInlineCustomUiDepth: inline.length,\n\t\t\tblockingInlineCustomUiActive: inline.length > 0,\n\t\t\t...(navigation > 0 ? { blockingInlineCustomUiNeedsInput: inline.length > navigation } : {}),\n\t\t};\n\t}\n\n\tonHostCustomUiStateChange(listener: HostCustomUiStateListener): () => void {\n\t\tthis.stateListeners.add(listener);\n\t\treturn () => this.stateListeners.delete(listener);\n\t}\n\tonWidgetRelease(key: string, listener: () => void): () => void {\n\t\tconst listeners = this.widgetReleaseListeners.get(key) ?? new Set<() => void>();\n\t\tlisteners.add(listener);\n\t\tthis.widgetReleaseListeners.set(key, listeners);\n\t\treturn () => {\n\t\t\tlisteners.delete(listener);\n\t\t\tif (listeners.size === 0) this.widgetReleaseListeners.delete(key);\n\t\t};\n\t}\n\n\tfocusHostInlineCustomUi(): boolean {\n\t\treturn this.getHostCustomUiState().blockingInlineCustomUiActive;\n\t}\n\n\trequestRender(): void {\n\t\tfor (const [componentId, record] of this.active) {\n\t\t\tif (record.hidden === true) continue;\n\t\t\tthis.send({ type: \"engine_custom_invalidate\", componentId });\n\t\t}\n\t}\n\n\thandleLine(line: string): boolean {\n\t\tconst command = parseInteractiveEngineCommand(line);\n\t\tif (!command) return false;\n\t\tif (!command.type.startsWith(\"engine_custom_\")) return false;\n\t\tconst record = this.active.get(command.componentId);\n\t\tif (!record) {\n\t\t\tif (command.type === \"engine_custom_input\")\n\t\t\t\tthis.send({\n\t\t\t\t\ttype: \"engine_custom_input_result\",\n\t\t\t\t\tcomponentId: command.componentId,\n\t\t\t\t\trequestId: command.requestId,\n\t\t\t\t\thandled: false,\n\t\t\t\t});\n\t\t\treturn true;\n\t\t}\n\t\tswitch (command.type) {\n\t\t\tcase \"engine_custom_scroll\":\n\t\t\t\t(record.component as ScrollableWidgetComponent).onScroll?.(command.state);\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_render\":\n\t\t\t\trecord.terminal.columns = Math.max(1, command.width);\n\t\t\t\trecord.terminal.rows = Math.max(1, command.rows);\n\t\t\t\tvoid runCallback({ kind: \"renderer\", name: command.componentId }, () =>\n\t\t\t\t\trecord.component.render(record.terminal.columns),\n\t\t\t\t)\n\t\t\t\t\t.then((lines) => {\n\t\t\t\t\t\tconst scrollRequest = (record.component as ScrollableWidgetComponent).getScrollRequest?.();\n\t\t\t\t\t\tthis.send({\n\t\t\t\t\t\t\ttype: \"engine_custom_frame\",\n\t\t\t\t\t\t\tcomponentId: command.componentId,\n\t\t\t\t\t\t\trequestId: command.requestId,\n\t\t\t\t\t\t\tlines,\n\t\t\t\t\t\t\t...(scrollRequest ? { scrollRequest } : {}),\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error: Error) =>\n\t\t\t\t\t\tthis.send({\n\t\t\t\t\t\t\ttype: \"engine_custom_frame\",\n\t\t\t\t\t\t\tcomponentId: command.componentId,\n\t\t\t\t\t\t\trequestId: command.requestId,\n\t\t\t\t\t\t\tlines: [`Remote component render failed: ${error.message}`],\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_input\":\n\t\t\t\tvoid runCallback({ kind: \"renderer\", name: command.componentId }, () => {\n\t\t\t\t\tif (isKeyRelease(command.data) && record.component.wantsKeyRelease !== true) return false;\n\t\t\t\t\tconst handleInput = record.component.handleInput as ((data: string) => boolean | undefined) | undefined;\n\t\t\t\t\treturn handleInput?.call(record.component, command.data) === true;\n\t\t\t\t})\n\t\t\t\t\t.then((handled) =>\n\t\t\t\t\t\tthis.send({\n\t\t\t\t\t\t\ttype: \"engine_custom_input_result\",\n\t\t\t\t\t\t\tcomponentId: command.componentId,\n\t\t\t\t\t\t\trequestId: command.requestId,\n\t\t\t\t\t\t\thandled,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t\t.catch(() =>\n\t\t\t\t\t\tthis.send({\n\t\t\t\t\t\t\ttype: \"engine_custom_input_result\",\n\t\t\t\t\t\t\tcomponentId: command.componentId,\n\t\t\t\t\t\t\trequestId: command.requestId,\n\t\t\t\t\t\t\thandled: false,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_copy_result\":\n\t\t\t\trecord.terminal.resolveCopy(command.requestId, command.error);\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_dispose\":\n\t\t\t\tthis.disposeComponent(command.componentId, true);\n\t\t\t\tbreak;\n\t\t}\n\t\treturn true;\n\t}\n\n\tdispose(): void {\n\t\tfor (const componentId of [...this.active.keys()]) this.disposeComponent(componentId, true, false);\n\t}\n\tprivate disposeComponent(componentId: string, resolve: boolean, notifyWidgetRelease = true): void {\n\t\tconst record = this.active.get(componentId);\n\t\tif (!record) return;\n\t\tthis.active.delete(componentId);\n\t\trecord.terminal.close();\n\t\t// Claim cancellation before user disposal code can call done() reentrantly.\n\t\tif (resolve) record.resolve(undefined);\n\t\trecord.component.dispose?.();\n\t\trecord.tui.stop();\n\t\tif (record.widgetKey) {\n\t\t\tif (this.widgetIds.get(record.widgetKey) === componentId) this.widgetIds.delete(record.widgetKey);\n\t\t\tthis.send({ type: \"engine_custom_close\", componentId });\n\t\t\tif (notifyWidgetRelease) this.notifyWidgetRelease(record.widgetKey);\n\t\t}\n\t\tthis.notifyState();\n\t}\n\tprivate notifyWidgetRelease(key: string): void {\n\t\tfor (const listener of this.widgetReleaseListeners.get(key) ?? []) {\n\t\t\ttry {\n\t\t\t\tlistener();\n\t\t\t} catch {\n\t\t\t\t// A release observer must not break engine UI teardown.\n\t\t\t}\n\t\t}\n\t}\n\tprivate notifyState(): void {\n\t\tconst state = this.getHostCustomUiState();\n\t\tfor (const listener of this.stateListeners) listener(state);\n\t}\n\n\tprivate remoteHandle(componentId: string): OverlayHandle {\n\t\tlet focused = true;\n\t\tconst setHiddenFlag = (value: boolean): void => {\n\t\t\tconst record = this.active.get(componentId);\n\t\t\tif (record) record.hidden = value;\n\t\t};\n\t\treturn {\n\t\t\thide: () => {\n\t\t\t\tsetHiddenFlag(true);\n\t\t\t\tthis.send({ type: \"engine_custom_control\", componentId, action: \"hide\" });\n\t\t\t},\n\t\t\tsetHidden: (value) => {\n\t\t\t\tsetHiddenFlag(value);\n\t\t\t\tthis.send({ type: \"engine_custom_control\", componentId, action: value ? \"hide\" : \"show\" });\n\t\t\t},\n\t\t\tisHidden: () => this.active.get(componentId)?.hidden === true,\n\t\t\tfocus: () => {\n\t\t\t\tfocused = true;\n\t\t\t\tthis.send({ type: \"engine_custom_control\", componentId, action: \"focus\" });\n\t\t\t},\n\t\t\tunfocus: () => {\n\t\t\t\tfocused = false;\n\t\t\t\tthis.send({ type: \"engine_custom_control\", componentId, action: \"unfocus\" });\n\t\t\t},\n\t\t\tisFocused: () => focused,\n\t\t\tgetBounds: () => undefined,\n\t\t};\n\t}\n\n\tprivate sendDone<T>(componentId: string, result: T): void {\n\t\tthis.send({\n\t\t\ttype: \"engine_custom_done\",\n\t\t\tcomponentId,\n\t\t\tresult: jsonResult(result as object | boolean | null | number | string | undefined),\n\t\t});\n\t}\n\n\tprivate send(message: InteractiveEngineMessage): void {\n\t\tthis.write(serializeInteractiveEngineMessage(message));\n\t}\n}\n"]}
@@ -7,6 +7,9 @@ export declare class InteractiveEngineMonitor {
7
7
  private readonly bound;
8
8
  private resolveBound;
9
9
  private rejectBound;
10
+ private readonly projectTrustSettled;
11
+ private resolveProjectTrustSettled;
12
+ private rejectProjectTrustSettled;
10
13
  private resourcesReady;
11
14
  private resolveResourcesReady;
12
15
  private rejectResourcesReady;
@@ -24,6 +27,7 @@ export declare class InteractiveEngineMonitor {
24
27
  */
25
28
  waitUntilReady(): Promise<void>;
26
29
  waitUntilBound(): Promise<void>;
30
+ waitUntilProjectTrustSettled(): Promise<void>;
27
31
  waitUntilResourcesReady(): Promise<void>;
28
32
  handleLine(line: string): boolean;
29
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"engine-monitor.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/engine-monitor.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,KAAK,wBAAwB,EAAiC,MAAM,eAAe,CAAC;AAE7F,qBAAa,wBAAwB;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,qBAAqB,CAAc;IAC3C,OAAO,CAAC,oBAAoB,CAA0B;IACtD,OAAO,CAAC,aAAa,CAA6C;IAClE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8C;IAExE,YACC,YAAY,EAAE,CAAC,UAAU,EAAE,0BAA0B,KAAK,IAAI,EAC9D,SAAS,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,IAAI,EAqBtD;IAED,IAAI,IAAI,IAAI,CAEX;IACD,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAIvB;IAED;;;;OAIG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpC;IAED,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAE9B;IAED,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEvC;IAED,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAoChC;CACD"}
1
+ {"version":3,"file":"engine-monitor.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/engine-monitor.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,KAAK,wBAAwB,EAAiC,MAAM,eAAe,CAAC;AAE7F,qBAAa,wBAAwB;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAgB;IACpD,OAAO,CAAC,0BAA0B,CAAc;IAChD,OAAO,CAAC,yBAAyB,CAA0B;IAC3D,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,qBAAqB,CAAc;IAC3C,OAAO,CAAC,oBAAoB,CAA0B;IACtD,OAAO,CAAC,aAAa,CAA6C;IAClE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8C;IAExE,YACC,YAAY,EAAE,CAAC,UAAU,EAAE,0BAA0B,KAAK,IAAI,EAC9D,SAAS,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,IAAI,EA0BtD;IAED,IAAI,IAAI,IAAI,CAEX;IACD,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAKvB;IAED;;;;OAIG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpC;IAED,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAE9B;IAED,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC,CAE5C;IAED,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEvC;IAED,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAyChC;CACD"}
@@ -8,6 +8,9 @@ export class InteractiveEngineMonitor {
8
8
  bound;
9
9
  resolveBound;
10
10
  rejectBound;
11
+ projectTrustSettled;
12
+ resolveProjectTrustSettled;
13
+ rejectProjectTrustSettled;
11
14
  resourcesReady;
12
15
  resolveResourcesReady;
13
16
  rejectResourcesReady;
@@ -26,6 +29,11 @@ export class InteractiveEngineMonitor {
26
29
  this.rejectBound = reject;
27
30
  });
28
31
  this.bound.catch(() => { });
32
+ this.projectTrustSettled = new Promise((resolve, reject) => {
33
+ this.resolveProjectTrustSettled = resolve;
34
+ this.rejectProjectTrustSettled = reject;
35
+ });
36
+ this.projectTrustSettled.catch(() => { });
29
37
  this.resourcesReady = new Promise((resolve, reject) => {
30
38
  this.resolveResourcesReady = resolve;
31
39
  this.rejectResourcesReady = reject;
@@ -41,6 +49,7 @@ export class InteractiveEngineMonitor {
41
49
  }
42
50
  fail(error) {
43
51
  this.rejectBound(error);
52
+ this.rejectProjectTrustSettled(error);
44
53
  this.rejectResourcesReady(error);
45
54
  this.rejectFailure(error);
46
55
  }
@@ -55,6 +64,9 @@ export class InteractiveEngineMonitor {
55
64
  waitUntilBound() {
56
65
  return this.bound;
57
66
  }
67
+ waitUntilProjectTrustSettled() {
68
+ return this.projectTrustSettled;
69
+ }
58
70
  waitUntilResourcesReady() {
59
71
  return this.resourcesReady;
60
72
  }
@@ -74,7 +86,11 @@ export class InteractiveEngineMonitor {
74
86
  markLifecycleTiming("engine-bound");
75
87
  this.resolveBound();
76
88
  break;
89
+ case "engine_project_trust_resolved":
90
+ this.resolveProjectTrustSettled();
91
+ break;
77
92
  case "engine_resources_ready":
93
+ this.resolveProjectTrustSettled();
78
94
  if (this.resourceState === "failed")
79
95
  this.resourcesReady = Promise.resolve();
80
96
  else
@@ -82,6 +98,7 @@ export class InteractiveEngineMonitor {
82
98
  this.resourceState = "ready";
83
99
  break;
84
100
  case "engine_resources_failed":
101
+ this.resolveProjectTrustSettled();
85
102
  this.resourceState = "failed";
86
103
  this.rejectResourcesReady(new Error(`Interactive engine resource loading failed: ${message.message}`));
87
104
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"engine-monitor.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/engine-monitor.ts"],"names":[],"mappings":"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","sourcesContent":["import { markLifecycleTiming } from \"../../core/lifecycle-timings.ts\";\nimport { ActivityWatchdog, type ActivityWatchdogDiagnostic } from \"./activity-watchdog.ts\";\nimport { type InteractiveEngineMessage, parseInteractiveEngineMessage } from \"./protocol.ts\";\n\nexport class InteractiveEngineMonitor {\n\tprivate readonly watchdog: ActivityWatchdog;\n\tprivate readonly readiness: Promise<void>;\n\tprivate resolveReady!: () => void;\n\tprivate readonly bound: Promise<void>;\n\tprivate resolveBound!: () => void;\n\tprivate rejectBound!: (error: Error) => void;\n\tprivate resourcesReady: Promise<void>;\n\tprivate resolveResourcesReady!: () => void;\n\tprivate rejectResourcesReady!: (error: Error) => void;\n\tprivate resourceState: \"pending\" | \"ready\" | \"failed\" = \"pending\";\n\tprivate readonly failure: Promise<never>;\n\tprivate rejectFailure!: (error: Error) => void;\n\tprivate readonly onMessage: (message: InteractiveEngineMessage) => void;\n\n\tconstructor(\n\t\tonDiagnostic: (diagnostic: ActivityWatchdogDiagnostic) => void,\n\t\tonMessage: (message: InteractiveEngineMessage) => void,\n\t) {\n\t\tthis.watchdog = new ActivityWatchdog({ onDiagnostic });\n\t\tthis.onMessage = onMessage;\n\t\tthis.readiness = new Promise((resolve) => {\n\t\t\tthis.resolveReady = resolve;\n\t\t});\n\t\tthis.bound = new Promise((resolve, reject) => {\n\t\t\tthis.resolveBound = resolve;\n\t\t\tthis.rejectBound = reject;\n\t\t});\n\t\tthis.bound.catch(() => {});\n\t\tthis.resourcesReady = new Promise((resolve, reject) => {\n\t\t\tthis.resolveResourcesReady = resolve;\n\t\t\tthis.rejectResourcesReady = reject;\n\t\t});\n\t\tthis.resourcesReady.catch(() => {});\n\t\tthis.failure = new Promise((_, reject) => {\n\t\t\tthis.rejectFailure = reject;\n\t\t});\n\t\tthis.failure.catch(() => {});\n\t}\n\n\tstop(): void {\n\t\tthis.watchdog.stop();\n\t}\n\tfail(error: Error): void {\n\t\tthis.rejectBound(error);\n\t\tthis.rejectResourcesReady(error);\n\t\tthis.rejectFailure(error);\n\t}\n\n\t/**\n\t * Waits for the engine to announce readiness. There is deliberately no\n\t * deadline: slow starts (cold module loads on Windows) must not be treated\n\t * as failures. Engine exit or a transport error rejects via fail().\n\t */\n\tasync waitUntilReady(): Promise<void> {\n\t\tawait Promise.race([this.readiness, this.failure]);\n\t}\n\n\twaitUntilBound(): Promise<void> {\n\t\treturn this.bound;\n\t}\n\n\twaitUntilResourcesReady(): Promise<void> {\n\t\treturn this.resourcesReady;\n\t}\n\n\thandleLine(line: string): boolean {\n\t\tconst message = parseInteractiveEngineMessage(line);\n\t\tif (!message) return false;\n\t\tthis.onMessage(message);\n\t\tswitch (message.type) {\n\t\t\tcase \"engine_ready\":\n\t\t\t\tmarkLifecycleTiming(\"engine-ready\");\n\t\t\t\tthis.watchdog.heartbeat();\n\t\t\t\tthis.watchdog.start();\n\t\t\t\tthis.resolveReady();\n\t\t\t\tbreak;\n\t\t\tcase \"engine_bound\":\n\t\t\t\tmarkLifecycleTiming(\"engine-bound\");\n\t\t\t\tthis.resolveBound();\n\t\t\t\tbreak;\n\t\t\tcase \"engine_resources_ready\":\n\t\t\t\tif (this.resourceState === \"failed\") this.resourcesReady = Promise.resolve();\n\t\t\t\telse this.resolveResourcesReady();\n\t\t\t\tthis.resourceState = \"ready\";\n\t\t\t\tbreak;\n\t\t\tcase \"engine_resources_failed\":\n\t\t\t\tthis.resourceState = \"failed\";\n\t\t\t\tthis.rejectResourcesReady(new Error(`Interactive engine resource loading failed: ${message.message}`));\n\t\t\t\tbreak;\n\t\t\tcase \"engine_heartbeat\":\n\t\t\t\tthis.watchdog.heartbeat();\n\t\t\t\tthis.watchdog.start();\n\t\t\t\tbreak;\n\t\t\tcase \"engine_activity_started\":\n\t\t\t\tthis.watchdog.activityStarted(message.activity);\n\t\t\t\tbreak;\n\t\t\tcase \"engine_activity_finished\":\n\t\t\t\tthis.watchdog.activityFinished(message.activityId);\n\t\t\t\tbreak;\n\t\t}\n\t\treturn true;\n\t}\n}\n"]}
1
+ {"version":3,"file":"engine-monitor.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/engine-monitor.ts"],"names":[],"mappings":"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","sourcesContent":["import { markLifecycleTiming } from \"../../core/lifecycle-timings.ts\";\nimport { ActivityWatchdog, type ActivityWatchdogDiagnostic } from \"./activity-watchdog.ts\";\nimport { type InteractiveEngineMessage, parseInteractiveEngineMessage } from \"./protocol.ts\";\n\nexport class InteractiveEngineMonitor {\n\tprivate readonly watchdog: ActivityWatchdog;\n\tprivate readonly readiness: Promise<void>;\n\tprivate resolveReady!: () => void;\n\tprivate readonly bound: Promise<void>;\n\tprivate resolveBound!: () => void;\n\tprivate rejectBound!: (error: Error) => void;\n\tprivate readonly projectTrustSettled: Promise<void>;\n\tprivate resolveProjectTrustSettled!: () => void;\n\tprivate rejectProjectTrustSettled!: (error: Error) => void;\n\tprivate resourcesReady: Promise<void>;\n\tprivate resolveResourcesReady!: () => void;\n\tprivate rejectResourcesReady!: (error: Error) => void;\n\tprivate resourceState: \"pending\" | \"ready\" | \"failed\" = \"pending\";\n\tprivate readonly failure: Promise<never>;\n\tprivate rejectFailure!: (error: Error) => void;\n\tprivate readonly onMessage: (message: InteractiveEngineMessage) => void;\n\n\tconstructor(\n\t\tonDiagnostic: (diagnostic: ActivityWatchdogDiagnostic) => void,\n\t\tonMessage: (message: InteractiveEngineMessage) => void,\n\t) {\n\t\tthis.watchdog = new ActivityWatchdog({ onDiagnostic });\n\t\tthis.onMessage = onMessage;\n\t\tthis.readiness = new Promise((resolve) => {\n\t\t\tthis.resolveReady = resolve;\n\t\t});\n\t\tthis.bound = new Promise((resolve, reject) => {\n\t\t\tthis.resolveBound = resolve;\n\t\t\tthis.rejectBound = reject;\n\t\t});\n\t\tthis.bound.catch(() => {});\n\t\tthis.projectTrustSettled = new Promise((resolve, reject) => {\n\t\t\tthis.resolveProjectTrustSettled = resolve;\n\t\t\tthis.rejectProjectTrustSettled = reject;\n\t\t});\n\t\tthis.projectTrustSettled.catch(() => {});\n\t\tthis.resourcesReady = new Promise((resolve, reject) => {\n\t\t\tthis.resolveResourcesReady = resolve;\n\t\t\tthis.rejectResourcesReady = reject;\n\t\t});\n\t\tthis.resourcesReady.catch(() => {});\n\t\tthis.failure = new Promise((_, reject) => {\n\t\t\tthis.rejectFailure = reject;\n\t\t});\n\t\tthis.failure.catch(() => {});\n\t}\n\n\tstop(): void {\n\t\tthis.watchdog.stop();\n\t}\n\tfail(error: Error): void {\n\t\tthis.rejectBound(error);\n\t\tthis.rejectProjectTrustSettled(error);\n\t\tthis.rejectResourcesReady(error);\n\t\tthis.rejectFailure(error);\n\t}\n\n\t/**\n\t * Waits for the engine to announce readiness. There is deliberately no\n\t * deadline: slow starts (cold module loads on Windows) must not be treated\n\t * as failures. Engine exit or a transport error rejects via fail().\n\t */\n\tasync waitUntilReady(): Promise<void> {\n\t\tawait Promise.race([this.readiness, this.failure]);\n\t}\n\n\twaitUntilBound(): Promise<void> {\n\t\treturn this.bound;\n\t}\n\n\twaitUntilProjectTrustSettled(): Promise<void> {\n\t\treturn this.projectTrustSettled;\n\t}\n\n\twaitUntilResourcesReady(): Promise<void> {\n\t\treturn this.resourcesReady;\n\t}\n\n\thandleLine(line: string): boolean {\n\t\tconst message = parseInteractiveEngineMessage(line);\n\t\tif (!message) return false;\n\t\tthis.onMessage(message);\n\t\tswitch (message.type) {\n\t\t\tcase \"engine_ready\":\n\t\t\t\tmarkLifecycleTiming(\"engine-ready\");\n\t\t\t\tthis.watchdog.heartbeat();\n\t\t\t\tthis.watchdog.start();\n\t\t\t\tthis.resolveReady();\n\t\t\t\tbreak;\n\t\t\tcase \"engine_bound\":\n\t\t\t\tmarkLifecycleTiming(\"engine-bound\");\n\t\t\t\tthis.resolveBound();\n\t\t\t\tbreak;\n\t\t\tcase \"engine_project_trust_resolved\":\n\t\t\t\tthis.resolveProjectTrustSettled();\n\t\t\t\tbreak;\n\t\t\tcase \"engine_resources_ready\":\n\t\t\t\tthis.resolveProjectTrustSettled();\n\t\t\t\tif (this.resourceState === \"failed\") this.resourcesReady = Promise.resolve();\n\t\t\t\telse this.resolveResourcesReady();\n\t\t\t\tthis.resourceState = \"ready\";\n\t\t\t\tbreak;\n\t\t\tcase \"engine_resources_failed\":\n\t\t\t\tthis.resolveProjectTrustSettled();\n\t\t\t\tthis.resourceState = \"failed\";\n\t\t\t\tthis.rejectResourcesReady(new Error(`Interactive engine resource loading failed: ${message.message}`));\n\t\t\t\tbreak;\n\t\t\tcase \"engine_heartbeat\":\n\t\t\t\tthis.watchdog.heartbeat();\n\t\t\t\tthis.watchdog.start();\n\t\t\t\tbreak;\n\t\t\tcase \"engine_activity_started\":\n\t\t\t\tthis.watchdog.activityStarted(message.activity);\n\t\t\t\tbreak;\n\t\t\tcase \"engine_activity_finished\":\n\t\t\t\tthis.watchdog.activityFinished(message.activityId);\n\t\t\t\tbreak;\n\t\t}\n\t\treturn true;\n\t}\n}\n"]}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Child-side record of whether the host is quitting on purpose.
3
+ *
4
+ * The host stops the engine by closing stdin and then sending SIGTERM, and a host
5
+ * that was itself signalled stops it the same way, so the child cannot infer the cause
6
+ * from how it was stopped. The host announces an explicit quit first and waits for the
7
+ * acknowledgement, which makes the flag visible before any stop signal can arrive.
8
+ */
9
+ export declare class EngineQuitIntent {
10
+ private explicit;
11
+ private readonly send;
12
+ constructor(send: (line: string) => void);
13
+ get explicitQuitRequested(): boolean;
14
+ handleLine(line: string): boolean;
15
+ }
16
+ //# sourceMappingURL=engine-quit-intent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine-quit-intent.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/engine-quit-intent.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAyB;IAE9C,YAAY,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAEvC;IAED,IAAI,qBAAqB,IAAI,OAAO,CAEnC;IAED,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKhC;CACD"}
@@ -0,0 +1,27 @@
1
+ import { parseEngineExplicitQuitCommand, serializeInteractiveEngineMessage } from "./protocol.js";
2
+ /**
3
+ * Child-side record of whether the host is quitting on purpose.
4
+ *
5
+ * The host stops the engine by closing stdin and then sending SIGTERM, and a host
6
+ * that was itself signalled stops it the same way, so the child cannot infer the cause
7
+ * from how it was stopped. The host announces an explicit quit first and waits for the
8
+ * acknowledgement, which makes the flag visible before any stop signal can arrive.
9
+ */
10
+ export class EngineQuitIntent {
11
+ explicit = false;
12
+ send;
13
+ constructor(send) {
14
+ this.send = send;
15
+ }
16
+ get explicitQuitRequested() {
17
+ return this.explicit;
18
+ }
19
+ handleLine(line) {
20
+ if (!parseEngineExplicitQuitCommand(line))
21
+ return false;
22
+ this.explicit = true;
23
+ this.send(serializeInteractiveEngineMessage({ type: "engine_explicit_quit_ack" }));
24
+ return true;
25
+ }
26
+ }
27
+ //# sourceMappingURL=engine-quit-intent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine-quit-intent.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/engine-quit-intent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,iCAAiC,EAAE,MAAM,eAAe,CAAC;AAElG;;;;;;;GAOG;AACH,MAAM,OAAO,gBAAgB;IACpB,QAAQ,GAAG,KAAK,CAAC;IAER,IAAI,CAAyB;IAE9C,YAAY,IAA4B;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IAED,IAAI,qBAAqB;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAED,UAAU,CAAC,IAAY;QACtB,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACxD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,CAAC,CAAC;QACnF,OAAO,IAAI,CAAC;IACb,CAAC;CACD","sourcesContent":["import { parseEngineExplicitQuitCommand, serializeInteractiveEngineMessage } from \"./protocol.ts\";\n\n/**\n * Child-side record of whether the host is quitting on purpose.\n *\n * The host stops the engine by closing stdin and then sending SIGTERM, and a host\n * that was itself signalled stops it the same way, so the child cannot infer the cause\n * from how it was stopped. The host announces an explicit quit first and waits for the\n * acknowledgement, which makes the flag visible before any stop signal can arrive.\n */\nexport class EngineQuitIntent {\n\tprivate explicit = false;\n\n\tprivate readonly send: (line: string) => void;\n\n\tconstructor(send: (line: string) => void) {\n\t\tthis.send = send;\n\t}\n\n\tget explicitQuitRequested(): boolean {\n\t\treturn this.explicit;\n\t}\n\n\thandleLine(line: string): boolean {\n\t\tif (!parseEngineExplicitQuitCommand(line)) return false;\n\t\tthis.explicit = true;\n\t\tthis.send(serializeInteractiveEngineMessage({ type: \"engine_explicit_quit_ack\" }));\n\t\treturn true;\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"engine-render-service.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/engine-render-service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAuDhE,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAE/C,YAAY,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAExC;IAED,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAGvC;IAED,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAgChC;IAED,OAAO,IAAI,IAAI,CAEd;IAED,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,UAAU;IA6ClB,OAAO,CAAC,aAAa;IA8BrB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,IAAI;CAGZ"}
1
+ {"version":3,"file":"engine-render-service.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/engine-render-service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAwDhE,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAE/C,YAAY,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAExC;IAED,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAGvC;IAED,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAgChC;IAED,OAAO,IAAI,IAAI,CAEd;IAED,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,UAAU;IA8ClB,OAAO,CAAC,aAAa;IA8BrB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,IAAI;CAGZ"}
@@ -27,6 +27,7 @@ class RenderTerminal {
27
27
  clearScreen() { }
28
28
  setTitle() { }
29
29
  setProgress() { }
30
+ setProgramStatus() { }
30
31
  }
31
32
  export class EngineRenderService {
32
33
  records = new Map();
@@ -94,7 +95,7 @@ export class EngineRenderService {
94
95
  tui.invalidate();
95
96
  tui.requestRender();
96
97
  });
97
- const component = new ToolExecutionComponent(command.toolName, command.toolCallId, command.args, { showImages: command.showImages, imageWidthCells: command.imageWidthCells }, session.extensionRunner.resolveToolRenderers(command.toolName, () => session.getToolDefinition(command.toolName)), tui, session.sessionManager.getCwd());
98
+ const component = new ToolExecutionComponent(command.toolName, command.toolCallId, command.args, { showImages: command.showImages, imageWidthCells: command.imageWidthCells, outputPad: command.outputPad }, session.extensionRunner.resolveToolRenderers(command.toolName, () => session.getToolDefinition(command.toolName)), tui, session.sessionManager.getCwd());
98
99
  tui.addChild(component);
99
100
  record = { kind: "tool", component, terminal, tui };
100
101
  this.records.set(command.componentId, record);
@@ -104,6 +105,7 @@ export class EngineRenderService {
104
105
  record.component.updateArgs(command.args);
105
106
  record.component.setShowImages(command.showImages);
106
107
  record.component.setImageWidthCells(command.imageWidthCells);
108
+ record.component.setOutputPad(command.outputPad ?? 1);
107
109
  }
108
110
  const tool = record.component;
109
111
  if (command.executionStarted)
@@ -1 +1 @@
1
- {"version":3,"file":"engine-render-service.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/engine-render-service.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Terminal } from \"@earendil-works/pi-tui\";\nimport { type TUI, TuiMainScreen } from \"@earendil-works/pi-tui\";\nimport { getAgentDir } from \"../../config.js\";\nimport type { AgentSession } from \"../../core/agent-session.js\";\nimport { runCallback } from \"../../core/callback-activity.ts\";\nimport type { CustomMessage } from \"../../core/messages.ts\";\nimport { ensurePngTranscoder } from \"../../utils/image-convert.ts\";\nimport { CustomMessageComponent } from \"../interactive/components/custom-message.ts\";\nimport { ToolExecutionComponent } from \"../interactive/components/tool-execution.ts\";\nimport {\n\ttype InteractiveEngineCommand,\n\ttype InteractiveEngineMessage,\n\tparseInteractiveEngineCommand,\n\tserializeInteractiveEngineMessage,\n} from \"./protocol.ts\";\n\ntype ToolRenderCommand = Extract<InteractiveEngineCommand, { type: \"engine_tool_render\" }>;\ntype MessageRenderCommand = Extract<InteractiveEngineCommand, { type: \"engine_message_render\" }>;\n\n/**\n * Cached per-componentId render state. Records are REUSED across render\n * requests: recreating (and re-seeding) the component on every request made\n * the seeding setters call `ui.requestRender()` each time, whose eventual\n * terminal write emitted `engine_custom_invalidate` back to the host, which\n * re-sent the render request — a self-sustaining host⇄engine render\n * ping-pong that presented as full-screen TUI flicker (quit/pause while a\n * workflow stage streams). Reuse plus idempotent seeding setters lets the\n * loop converge after at most one round trip while still forwarding\n * legitimate async invalidations (e.g. image conversion).\n */\ntype RenderRecord =\n\t| { kind: \"message\"; component: CustomMessageComponent; terminal: RenderTerminal; tui: TUI }\n\t| { kind: \"tool\"; component: ToolExecutionComponent; terminal: RenderTerminal; tui: TUI };\n\nclass RenderTerminal implements Terminal {\n\tcolumns = 80;\n\trows = 24;\n\tkittyProtocolActive = false;\n\tprivate readonly requestRender: () => void;\n\tconstructor(requestRender: () => void) {\n\t\tthis.requestRender = requestRender;\n\t}\n\tstart(): void {}\n\tstop(): void {}\n\tasync drainInput(): Promise<void> {}\n\twrite(): void {\n\t\tthis.requestRender();\n\t}\n\tmoveBy(): void {}\n\thideCursor(): void {}\n\tshowCursor(): void {}\n\tclearLine(): void {}\n\tclearFromCursor(): void {}\n\tclearScreen(): void {}\n\tsetTitle(): void {}\n\tsetProgress(): void {}\n}\n\nexport class EngineRenderService {\n\tprivate readonly records = new Map<string, RenderRecord>();\n\tprivate session: AgentSession | undefined;\n\tprivate readonly write: (line: string) => void;\n\n\tconstructor(write: (line: string) => void) {\n\t\tthis.write = write;\n\t}\n\n\tbindSession(session: AgentSession): void {\n\t\tthis.dispose();\n\t\tthis.session = session;\n\t}\n\n\thandleLine(line: string): boolean {\n\t\tconst command = parseInteractiveEngineCommand(line);\n\t\tif (!command?.type.startsWith(\"engine_\") || command.type.startsWith(\"engine_custom_\")) return false;\n\t\tif (command.type === \"engine_render_dispose\") {\n\t\t\tthis.disposeRecord(command.componentId);\n\t\t\treturn true;\n\t\t}\n\t\tif (command.type !== \"engine_tool_render\" && command.type !== \"engine_message_render\") return false;\n\t\tconst name =\n\t\t\tcommand.type === \"engine_tool_render\"\n\t\t\t\t? `tool:${command.toolName}`\n\t\t\t\t: `message:${command.message.customType ?? \"custom\"}`;\n\t\tvoid runCallback({ kind: \"renderer\", name }, async () => {\n\t\t\treturn command.type === \"engine_tool_render\" ? this.renderTool(command) : this.renderMessage(command);\n\t\t})\n\t\t\t.then((lines) =>\n\t\t\t\tthis.send({\n\t\t\t\t\ttype: \"engine_custom_frame\",\n\t\t\t\t\tcomponentId: command.componentId,\n\t\t\t\t\trequestId: command.requestId,\n\t\t\t\t\tlines,\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.catch((error: Error) =>\n\t\t\t\tthis.send({\n\t\t\t\t\ttype: \"engine_custom_frame\",\n\t\t\t\t\tcomponentId: command.componentId,\n\t\t\t\t\trequestId: command.requestId,\n\t\t\t\t\tlines: [`Remote renderer failed: ${error.message}`],\n\t\t\t\t}),\n\t\t\t);\n\t\treturn true;\n\t}\n\n\tdispose(): void {\n\t\tfor (const id of [...this.records.keys()]) this.disposeRecord(id);\n\t}\n\n\tprivate boundSession(): AgentSession {\n\t\tconst session = this.session;\n\t\tif (!session) throw new Error(\"Renderer session is not bound\");\n\t\treturn session;\n\t}\n\n\tprivate createTerminal(componentId: string): RenderTerminal {\n\t\treturn new RenderTerminal(() => this.send({ type: \"engine_custom_invalidate\", componentId }));\n\t}\n\n\tprivate renderTool(command: ToolRenderCommand): string[] {\n\t\tlet record = this.records.get(command.componentId);\n\t\tif (record?.kind !== \"tool\") {\n\t\t\tconst session = this.boundSession();\n\t\t\tthis.disposeRecord(command.componentId);\n\t\t\tconst terminal = this.createTerminal(command.componentId);\n\t\t\tterminal.columns = Math.max(1, command.width);\n\t\t\tconst tui = new TuiMainScreen(terminal, undefined, getAgentDir());\n\t\t\tensurePngTranscoder(() => {\n\t\t\t\ttui.invalidate();\n\t\t\t\ttui.requestRender();\n\t\t\t});\n\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\tcommand.toolName,\n\t\t\t\tcommand.toolCallId,\n\t\t\t\tcommand.args,\n\t\t\t\t{ showImages: command.showImages, imageWidthCells: command.imageWidthCells },\n\t\t\t\tsession.extensionRunner.resolveToolRenderers(command.toolName, () =>\n\t\t\t\t\tsession.getToolDefinition(command.toolName),\n\t\t\t\t),\n\t\t\t\ttui,\n\t\t\t\tsession.sessionManager.getCwd(),\n\t\t\t);\n\t\t\ttui.addChild(component);\n\t\t\trecord = { kind: \"tool\", component, terminal, tui };\n\t\t\tthis.records.set(command.componentId, record);\n\t\t} else {\n\t\t\trecord.terminal.columns = Math.max(1, command.width);\n\t\t\trecord.component.updateArgs(command.args);\n\t\t\trecord.component.setShowImages(command.showImages);\n\t\t\trecord.component.setImageWidthCells(command.imageWidthCells);\n\t\t}\n\t\tconst tool = record.component;\n\t\tif (command.executionStarted) tool.markExecutionStarted();\n\t\tif (command.argsComplete) tool.setArgsComplete();\n\t\ttool.setExpanded(command.expanded);\n\t\tif (command.result) {\n\t\t\ttool.updateResult(\n\t\t\t\tcommand.result as unknown as Parameters<ToolExecutionComponent[\"updateResult\"]>[0],\n\t\t\t\tcommand.isPartial,\n\t\t\t);\n\t\t}\n\t\treturn tool.render(command.width);\n\t}\n\n\tprivate renderMessage(command: MessageRenderCommand): string[] {\n\t\tlet record = this.records.get(command.componentId);\n\t\tif (record?.kind !== \"message\") {\n\t\t\tconst session = this.boundSession();\n\t\t\tthis.disposeRecord(command.componentId);\n\t\t\tconst terminal = this.createTerminal(command.componentId);\n\t\t\tterminal.columns = Math.max(1, command.width);\n\t\t\tconst tui = new TuiMainScreen(terminal, undefined, getAgentDir());\n\t\t\tensurePngTranscoder(() => {\n\t\t\t\ttui.invalidate();\n\t\t\t\ttui.requestRender();\n\t\t\t});\n\t\t\tconst message = command.message as unknown as CustomMessage<object>;\n\t\t\tconst component = new CustomMessageComponent(\n\t\t\t\tmessage,\n\t\t\t\tsession.extensionRunner.getMessageRenderer(message.customType),\n\t\t\t\tundefined,\n\t\t\t\tcommand.outputPad,\n\t\t\t);\n\t\t\ttui.addChild(component);\n\t\t\trecord = { kind: \"message\", component, terminal, tui };\n\t\t\tthis.records.set(command.componentId, record);\n\t\t} else {\n\t\t\trecord.terminal.columns = Math.max(1, command.width);\n\t\t}\n\t\trecord.component.setExpanded(command.expanded);\n\t\trecord.component.setOutputPad(command.outputPad);\n\t\treturn record.component.render(command.width);\n\t}\n\n\tprivate disposeRecord(id: string): void {\n\t\tconst record = this.records.get(id);\n\t\tif (!record) return;\n\t\tthis.records.delete(id);\n\t\tif (record.kind === \"tool\") record.component.dispose();\n\t\trecord.tui.stop();\n\t}\n\n\tprivate send(message: InteractiveEngineMessage): void {\n\t\tthis.write(serializeInteractiveEngineMessage(message));\n\t}\n}\n"]}
1
+ {"version":3,"file":"engine-render-service.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/engine-render-service.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Terminal } from \"@earendil-works/pi-tui\";\nimport { type TUI, TuiMainScreen } from \"@earendil-works/pi-tui\";\nimport { getAgentDir } from \"../../config.js\";\nimport type { AgentSession } from \"../../core/agent-session.js\";\nimport { runCallback } from \"../../core/callback-activity.ts\";\nimport type { CustomMessage } from \"../../core/messages.ts\";\nimport { ensurePngTranscoder } from \"../../utils/image-convert.ts\";\nimport { CustomMessageComponent } from \"../interactive/components/custom-message.ts\";\nimport { ToolExecutionComponent } from \"../interactive/components/tool-execution.ts\";\nimport {\n\ttype InteractiveEngineCommand,\n\ttype InteractiveEngineMessage,\n\tparseInteractiveEngineCommand,\n\tserializeInteractiveEngineMessage,\n} from \"./protocol.ts\";\n\ntype ToolRenderCommand = Extract<InteractiveEngineCommand, { type: \"engine_tool_render\" }>;\ntype MessageRenderCommand = Extract<InteractiveEngineCommand, { type: \"engine_message_render\" }>;\n\n/**\n * Cached per-componentId render state. Records are REUSED across render\n * requests: recreating (and re-seeding) the component on every request made\n * the seeding setters call `ui.requestRender()` each time, whose eventual\n * terminal write emitted `engine_custom_invalidate` back to the host, which\n * re-sent the render request — a self-sustaining host⇄engine render\n * ping-pong that presented as full-screen TUI flicker (quit/pause while a\n * workflow stage streams). Reuse plus idempotent seeding setters lets the\n * loop converge after at most one round trip while still forwarding\n * legitimate async invalidations (e.g. image conversion).\n */\ntype RenderRecord =\n\t| { kind: \"message\"; component: CustomMessageComponent; terminal: RenderTerminal; tui: TUI }\n\t| { kind: \"tool\"; component: ToolExecutionComponent; terminal: RenderTerminal; tui: TUI };\n\nclass RenderTerminal implements Terminal {\n\tcolumns = 80;\n\trows = 24;\n\tkittyProtocolActive = false;\n\tprivate readonly requestRender: () => void;\n\tconstructor(requestRender: () => void) {\n\t\tthis.requestRender = requestRender;\n\t}\n\tstart(): void {}\n\tstop(): void {}\n\tasync drainInput(): Promise<void> {}\n\twrite(): void {\n\t\tthis.requestRender();\n\t}\n\tmoveBy(): void {}\n\thideCursor(): void {}\n\tshowCursor(): void {}\n\tclearLine(): void {}\n\tclearFromCursor(): void {}\n\tclearScreen(): void {}\n\tsetTitle(): void {}\n\tsetProgress(): void {}\n\tsetProgramStatus(): void {}\n}\n\nexport class EngineRenderService {\n\tprivate readonly records = new Map<string, RenderRecord>();\n\tprivate session: AgentSession | undefined;\n\tprivate readonly write: (line: string) => void;\n\n\tconstructor(write: (line: string) => void) {\n\t\tthis.write = write;\n\t}\n\n\tbindSession(session: AgentSession): void {\n\t\tthis.dispose();\n\t\tthis.session = session;\n\t}\n\n\thandleLine(line: string): boolean {\n\t\tconst command = parseInteractiveEngineCommand(line);\n\t\tif (!command?.type.startsWith(\"engine_\") || command.type.startsWith(\"engine_custom_\")) return false;\n\t\tif (command.type === \"engine_render_dispose\") {\n\t\t\tthis.disposeRecord(command.componentId);\n\t\t\treturn true;\n\t\t}\n\t\tif (command.type !== \"engine_tool_render\" && command.type !== \"engine_message_render\") return false;\n\t\tconst name =\n\t\t\tcommand.type === \"engine_tool_render\"\n\t\t\t\t? `tool:${command.toolName}`\n\t\t\t\t: `message:${command.message.customType ?? \"custom\"}`;\n\t\tvoid runCallback({ kind: \"renderer\", name }, async () => {\n\t\t\treturn command.type === \"engine_tool_render\" ? this.renderTool(command) : this.renderMessage(command);\n\t\t})\n\t\t\t.then((lines) =>\n\t\t\t\tthis.send({\n\t\t\t\t\ttype: \"engine_custom_frame\",\n\t\t\t\t\tcomponentId: command.componentId,\n\t\t\t\t\trequestId: command.requestId,\n\t\t\t\t\tlines,\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.catch((error: Error) =>\n\t\t\t\tthis.send({\n\t\t\t\t\ttype: \"engine_custom_frame\",\n\t\t\t\t\tcomponentId: command.componentId,\n\t\t\t\t\trequestId: command.requestId,\n\t\t\t\t\tlines: [`Remote renderer failed: ${error.message}`],\n\t\t\t\t}),\n\t\t\t);\n\t\treturn true;\n\t}\n\n\tdispose(): void {\n\t\tfor (const id of [...this.records.keys()]) this.disposeRecord(id);\n\t}\n\n\tprivate boundSession(): AgentSession {\n\t\tconst session = this.session;\n\t\tif (!session) throw new Error(\"Renderer session is not bound\");\n\t\treturn session;\n\t}\n\n\tprivate createTerminal(componentId: string): RenderTerminal {\n\t\treturn new RenderTerminal(() => this.send({ type: \"engine_custom_invalidate\", componentId }));\n\t}\n\n\tprivate renderTool(command: ToolRenderCommand): string[] {\n\t\tlet record = this.records.get(command.componentId);\n\t\tif (record?.kind !== \"tool\") {\n\t\t\tconst session = this.boundSession();\n\t\t\tthis.disposeRecord(command.componentId);\n\t\t\tconst terminal = this.createTerminal(command.componentId);\n\t\t\tterminal.columns = Math.max(1, command.width);\n\t\t\tconst tui = new TuiMainScreen(terminal, undefined, getAgentDir());\n\t\t\tensurePngTranscoder(() => {\n\t\t\t\ttui.invalidate();\n\t\t\t\ttui.requestRender();\n\t\t\t});\n\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\tcommand.toolName,\n\t\t\t\tcommand.toolCallId,\n\t\t\t\tcommand.args,\n\t\t\t\t{ showImages: command.showImages, imageWidthCells: command.imageWidthCells, outputPad: command.outputPad },\n\t\t\t\tsession.extensionRunner.resolveToolRenderers(command.toolName, () =>\n\t\t\t\t\tsession.getToolDefinition(command.toolName),\n\t\t\t\t),\n\t\t\t\ttui,\n\t\t\t\tsession.sessionManager.getCwd(),\n\t\t\t);\n\t\t\ttui.addChild(component);\n\t\t\trecord = { kind: \"tool\", component, terminal, tui };\n\t\t\tthis.records.set(command.componentId, record);\n\t\t} else {\n\t\t\trecord.terminal.columns = Math.max(1, command.width);\n\t\t\trecord.component.updateArgs(command.args);\n\t\t\trecord.component.setShowImages(command.showImages);\n\t\t\trecord.component.setImageWidthCells(command.imageWidthCells);\n\t\t\trecord.component.setOutputPad(command.outputPad ?? 1);\n\t\t}\n\t\tconst tool = record.component;\n\t\tif (command.executionStarted) tool.markExecutionStarted();\n\t\tif (command.argsComplete) tool.setArgsComplete();\n\t\ttool.setExpanded(command.expanded);\n\t\tif (command.result) {\n\t\t\ttool.updateResult(\n\t\t\t\tcommand.result as unknown as Parameters<ToolExecutionComponent[\"updateResult\"]>[0],\n\t\t\t\tcommand.isPartial,\n\t\t\t);\n\t\t}\n\t\treturn tool.render(command.width);\n\t}\n\n\tprivate renderMessage(command: MessageRenderCommand): string[] {\n\t\tlet record = this.records.get(command.componentId);\n\t\tif (record?.kind !== \"message\") {\n\t\t\tconst session = this.boundSession();\n\t\t\tthis.disposeRecord(command.componentId);\n\t\t\tconst terminal = this.createTerminal(command.componentId);\n\t\t\tterminal.columns = Math.max(1, command.width);\n\t\t\tconst tui = new TuiMainScreen(terminal, undefined, getAgentDir());\n\t\t\tensurePngTranscoder(() => {\n\t\t\t\ttui.invalidate();\n\t\t\t\ttui.requestRender();\n\t\t\t});\n\t\t\tconst message = command.message as unknown as CustomMessage<object>;\n\t\t\tconst component = new CustomMessageComponent(\n\t\t\t\tmessage,\n\t\t\t\tsession.extensionRunner.getMessageRenderer(message.customType),\n\t\t\t\tundefined,\n\t\t\t\tcommand.outputPad,\n\t\t\t);\n\t\t\ttui.addChild(component);\n\t\t\trecord = { kind: \"message\", component, terminal, tui };\n\t\t\tthis.records.set(command.componentId, record);\n\t\t} else {\n\t\t\trecord.terminal.columns = Math.max(1, command.width);\n\t\t}\n\t\trecord.component.setExpanded(command.expanded);\n\t\trecord.component.setOutputPad(command.outputPad);\n\t\treturn record.component.render(command.width);\n\t}\n\n\tprivate disposeRecord(id: string): void {\n\t\tconst record = this.records.get(id);\n\t\tif (!record) return;\n\t\tthis.records.delete(id);\n\t\tif (record.kind === \"tool\") record.component.dispose();\n\t\trecord.tui.stop();\n\t}\n\n\tprivate send(message: InteractiveEngineMessage): void {\n\t\tthis.write(serializeInteractiveEngineMessage(message));\n\t}\n}\n"]}
@@ -15,6 +15,7 @@ export declare function attachInteractiveEngineHost(runtime: AgentSessionRuntime
15
15
  /** Route host-owned trust waits to the runner that actually owns the subscribers. */
16
16
  export declare function withHostProjectTrustPrompt<T>(runtime: AgentSessionRuntime, kind: "select" | "confirm" | "input", title: string, run: () => Promise<T>): Promise<T>;
17
17
  export declare function waitForInteractiveEngineBound(runtime: AgentSessionRuntime): Promise<void>;
18
+ export declare function waitForInteractiveEngineProjectTrust(runtime: AgentSessionRuntime): Promise<void>;
18
19
  export declare function interruptBlockedInteractiveEngine(runtime: AgentSessionRuntime): boolean;
19
20
  /**
20
21
  * True when the interactive engine still owes a cooperative abort or the
@@ -1 +1 @@
1
- {"version":3,"file":"extension-ui-bridge.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/extension-ui-bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extension-ui-bridge.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/extension-ui-bridge.ts"],"names":[],"mappings":"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"}
@@ -84,6 +84,11 @@ export async function waitForInteractiveEngineBound(runtime) {
84
84
  await runtime.waitUntilBound();
85
85
  await runtime.initializeFromEngine();
86
86
  }
87
+ export async function waitForInteractiveEngineProjectTrust(runtime) {
88
+ if (!(runtime instanceof IsolatedInteractiveRuntime))
89
+ return;
90
+ await runtime.waitUntilProjectTrustSettled();
91
+ }
87
92
  export function interruptBlockedInteractiveEngine(runtime) {
88
93
  return runtime instanceof IsolatedInteractiveRuntime && runtime.interruptBlockedCallback();
89
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"extension-ui-bridge.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/extension-ui-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAOhE,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAAE,yBAAyB,EAA6B,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAOvE,MAAM,UAAU,qCAAqC,CACpD,OAA4B,EAC5B,WAA+B,EAC/B,OAAgD;IAEhD,MAAM,UAAU,GAAG,CAAC,KAA4B,EAAQ,EAAE;QACzD,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAChD,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,IAAI,OAAO,CAAC,iBAAiB;QAAE,OAAO,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC5E,OAAO,OAAO,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,EAAE;QAC1C,IAAI,OAAO,CAAC,IAAI,KAAK,6BAA6B;YAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CAC1C,OAA4B,EAC5B,EAAsB,EACtB,YAA8D,EAC9D,oBAA0C,EAC1C,kBAAqF,EACrF,WAAgC;IAEhC,IAAI,CAAC,CAAC,OAAO,YAAY,0BAA0B,CAAC;QAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IACtE,MAAM,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IAC7D,wEAAwE;IACxE,0DAA0D;IAC1D,MAAM,OAAO,GAAG,IAAI,0BAA0B,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC5D,IAAI,SAAS,GAA8B,EAAE,CAAC;IAC9C,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAW,EAAE;QAClD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAC9B,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,CACvB,UAAU,CAAC,IAAI,EAAE,GAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAChG,CAAC;QACF,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5B,KAAK,OAAO;aACV,oBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC;aAClC,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE,CACvB,YAAY,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAClG,CAAC;QACH,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;IACF,IAAI,sBAAgD,CAAC;IACrD,MAAM,sBAAsB,GAAG,GAAS,EAAE;QACzC,sBAAsB,EAAE,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC,gBAAgB,CAAC,CAAC;QACvD,sBAAsB,GAAG,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,KAA4B,EAAQ,EAAE;QACzD,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QACjC,sBAAsB,EAAE,CAAC;IAC1B,CAAC,CAAC;IACF,sBAAsB,EAAE,CAAC;IACzB,MAAM,kBAAkB,GAAG,WAAW;QACrC,CAAC,CAAC,qCAAqC,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC;QACzE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,EAAE;YACpC,IAAI,OAAO,CAAC,IAAI,KAAK,6BAA6B;gBAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;IACL,MAAM,gBAAgB,GAAG,IAAI,yBAAyB,CAAC,OAAO,EAAE,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAC1F,6EAA6E;IAC7E,wDAAwD;IACxD,MAAM,gBAAgB,GAAG,4BAA4B,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IACjF,MAAM,aAAa,GAAG,IAAI,2BAA2B,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,IAAI,uBAAuB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC3D,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO,GAAG,EAAE;QACX,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,sBAAsB,EAAE,EAAE,CAAC;QAC3B,kBAAkB,EAAE,CAAC;QACrB,gBAAgB,EAAE,CAAC;QACnB,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAC3B,aAAa,CAAC,OAAO,EAAE,CAAC;QACxB,SAAS,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,iBAAiB,EAAE,CAAC;IACrB,CAAC,CAAC;AACH,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,0BAA0B,CACzC,OAA4B,EAC5B,IAAoC,EACpC,KAAa,EACb,GAAqB;IAErB,OAAO,OAAO,YAAY,0BAA0B;QACnD,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;QAClD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,OAA4B;IAC/E,IAAI,CAAC,CAAC,OAAO,YAAY,0BAA0B,CAAC;QAAE,OAAO;IAC7D,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;IAC/B,MAAM,OAAO,CAAC,oBAAoB,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,OAA4B;IAC7E,OAAO,OAAO,YAAY,0BAA0B,IAAI,OAAO,CAAC,wBAAwB,EAAE,CAAC;AAC5F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yCAAyC,CAAC,OAA4B;IACrF,OAAO,OAAO,YAAY,0BAA0B,IAAI,OAAO,CAAC,wBAAwB,EAAE,CAAC;AAC5F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAA4B;IACtE,IAAI,CAAC,yCAAyC,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACtE,KAAM,OAAsC,CAAC,mBAAmB,EAAE,CAAC;IACnE,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kCAAkC,CAAC,OAA4B;IAC9E,OAAO,OAAO,YAAY,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,oCAAoC,CAAC,OAA4B;IAChF,OAAO,OAAO,YAAY,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,sCAAsC,CAAC,OAA4B;IAClF,OAAO,OAAO,YAAY,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,4CAA4C,CAC3D,OAA4B,EAC5B,QAA+D;IAE/D,OAAO,OAAO,YAAY,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;AACjH,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,4CAA4C,CAC3D,OAA4B,EAC5B,WAAmB,EACnB,cAAsB;IAEtB,OAAO,OAAO,YAAY,0BAA0B;QACnD,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC,WAAW,EAAE,cAAc,CAAC;QAClE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,wCAAwC,CACvD,OAA4B,EAC5B,QAAwD;IAExD,OAAO,OAAO,YAAY,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;AAC7G,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,sCAAsC,CAAC,OAA4B,EAAE,QAAoB;IACxG,OAAO,OAAO,YAAY,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;AAC3G,CAAC","sourcesContent":["import { type KeyId, matchesKey } from \"@earendil-works/pi-tui\";\nimport type { AgentSessionRuntime } from \"../../core/agent-session-runtime.ts\";\nimport type { ResourceOverlap } from \"../../core/diagnostics.ts\";\nimport type { ExtensionUIContext } from \"../../core/extensions/index.js\";\nimport type { KeybindingsManager } from \"../../core/keybindings.ts\";\nimport type { RpcAutocompleteItem, RpcResourceExtension, RpcSlashCommand } from \"../rpc/rpc-types.ts\";\nimport type { ActivityWatchdogDiagnostic } from \"./activity-watchdog.ts\";\nimport { EngineDialogHostController } from \"./engine-dialog-host.ts\";\nimport { InputFormHostController } from \"./input-form-host.ts\";\nimport { IsolatedInteractiveRuntime } from \"./isolated-runtime.js\";\nimport type { EngineExtensionShortcut, EngineKeybindingState, InteractiveEngineMessage } from \"./protocol.ts\";\nimport { RemoteComponentController, type TuiRendererLifecycle } from \"./remote-component.ts\";\nimport { registerRemoteProxyOwnership } from \"./remote-input-ownership.ts\";\nimport { SessionPickerHostController } from \"./session-picker-host.ts\";\n\ninterface EngineMessageSource {\n\tonEngineMessage(listener: (message: InteractiveEngineMessage) => void): () => void;\n\tonKeybindingState?(listener: (state: EngineKeybindingState) => void): () => void;\n}\n\nexport function attachInteractiveEngineKeybindingSync(\n\truntime: EngineMessageSource,\n\tkeybindings: KeybindingsManager,\n\tonState?: (state: EngineKeybindingState) => void,\n): () => void {\n\tconst applyState = (state: EngineKeybindingState): void => {\n\t\tkeybindings.setUserBindings(state.userBindings);\n\t\tonState?.(state);\n\t};\n\tif (runtime.onKeybindingState) return runtime.onKeybindingState(applyState);\n\treturn runtime.onEngineMessage((message) => {\n\t\tif (message.type === \"engine_keybindings_reloaded\") applyState(message.state);\n\t});\n}\n\nexport function attachInteractiveEngineHost(\n\truntime: AgentSessionRuntime,\n\tui: ExtensionUIContext,\n\tonDiagnostic: (diagnostic: ActivityWatchdogDiagnostic) => void,\n\ttuiRendererLifecycle: TuiRendererLifecycle,\n\tsetShortcutHandler?: (handler: (data: string) => boolean) => undefined | (() => void),\n\tkeybindings?: KeybindingsManager,\n): () => void {\n\tif (!(runtime instanceof IsolatedInteractiveRuntime)) return () => {};\n\tconst disposeDiagnostic = runtime.onDiagnostic(onDiagnostic);\n\t// Generation-owned: RPC dialogs mount real host components and must not\n\t// outlive, or answer through, a replacement engine child.\n\tconst dialogs = new EngineDialogHostController(runtime, ui);\n\tlet shortcuts: EngineExtensionShortcut[] = [];\n\tconst dispatchShortcut = (data: string): boolean => {\n\t\tconst shortcut = shortcuts.find(\n\t\t\t({ key, editorKeys }) =>\n\t\t\t\tmatchesKey(data, key as KeyId) && !editorKeys?.some((editorKey) => matchesKey(data, editorKey)),\n\t\t);\n\t\tif (!shortcut) return false;\n\t\tvoid runtime\n\t\t\t.invokeRemoteShortcut(shortcut.key)\n\t\t\t.catch((error: Error) =>\n\t\t\t\tonDiagnostic({ activity: undefined, elapsedMs: 0, level: \"unresponsive\", message: error.message }),\n\t\t\t);\n\t\treturn true;\n\t};\n\tlet disposeShortcutHandler: (() => void) | undefined;\n\tconst installShortcutHandler = (): void => {\n\t\tdisposeShortcutHandler?.();\n\t\tconst dispose = setShortcutHandler?.(dispatchShortcut);\n\t\tdisposeShortcutHandler = typeof dispose === \"function\" ? dispose : undefined;\n\t};\n\tconst applyState = (state: EngineKeybindingState): void => {\n\t\tshortcuts = [...state.shortcuts];\n\t\tinstallShortcutHandler();\n\t};\n\tinstallShortcutHandler();\n\tconst disposeKeybindings = keybindings\n\t\t? attachInteractiveEngineKeybindingSync(runtime, keybindings, applyState)\n\t\t: runtime.onEngineMessage((message) => {\n\t\t\t\tif (message.type === \"engine_keybindings_reloaded\") applyState(message.state);\n\t\t\t});\n\tconst remoteComponents = new RemoteComponentController(runtime, ui, tuiRendererLifecycle);\n\t// Ctrl+C must reach the host while a remote proxy owns input, so publish the\n\t// only component that can answer that question exactly.\n\tconst disposeOwnership = registerRemoteProxyOwnership(runtime, remoteComponents);\n\tconst sessionPicker = new SessionPickerHostController(runtime, ui);\n\tconst inputForm = new InputFormHostController(runtime, ui);\n\tlet disposed = false;\n\treturn () => {\n\t\tif (disposed) return;\n\t\tdisposed = true;\n\t\tdisposeShortcutHandler?.();\n\t\tdisposeKeybindings();\n\t\tdisposeOwnership();\n\t\tremoteComponents.dispose();\n\t\tsessionPicker.dispose();\n\t\tinputForm.dispose();\n\t\tdialogs.dispose();\n\t\tdisposeDiagnostic();\n\t};\n}\n\n/** Route host-owned trust waits to the runner that actually owns the subscribers. */\nexport function withHostProjectTrustPrompt<T>(\n\truntime: AgentSessionRuntime,\n\tkind: \"select\" | \"confirm\" | \"input\",\n\ttitle: string,\n\trun: () => Promise<T>,\n): Promise<T> {\n\treturn runtime instanceof IsolatedInteractiveRuntime\n\t\t? runtime.withProjectTrustPrompt(kind, title, run)\n\t\t: runtime.session.extensionRunner.withProjectTrustPrompt(kind, title, run);\n}\n\nexport async function waitForInteractiveEngineBound(runtime: AgentSessionRuntime): Promise<void> {\n\tif (!(runtime instanceof IsolatedInteractiveRuntime)) return;\n\tawait runtime.waitUntilBound();\n\tawait runtime.initializeFromEngine();\n}\n\nexport function interruptBlockedInteractiveEngine(runtime: AgentSessionRuntime): boolean {\n\treturn runtime instanceof IsolatedInteractiveRuntime && runtime.interruptBlockedCallback();\n}\n\n/**\n * True when the interactive engine still owes a cooperative abort or the\n * heartbeat watchdog has declared it unresponsive, i.e. when the explicit\n * Ctrl+C escape hatch promised by the watchdog copy applies.\n */\nexport function interactiveEngineNeedsExplicitTermination(runtime: AgentSessionRuntime): boolean {\n\treturn runtime instanceof IsolatedInteractiveRuntime && runtime.needsExplicitTermination();\n}\n\n/**\n * Explicitly terminate an unresponsive interactive engine and start recovery.\n * Only ever reached from a deliberate user action (Ctrl+C) — never from Escape.\n */\nexport function terminateInteractiveEngine(runtime: AgentSessionRuntime): boolean {\n\tif (!interactiveEngineNeedsExplicitTermination(runtime)) return false;\n\tvoid (runtime as IsolatedInteractiveRuntime).terminateAndRecover();\n\treturn true;\n}\n\n/**\n * Command catalog the engine child exposes to the isolated host. Returns an\n * empty list for non-isolated runtimes so callers can merge unconditionally.\n */\nexport function getInteractiveEngineRemoteCommands(runtime: AgentSessionRuntime): readonly RpcSlashCommand[] {\n\treturn runtime instanceof IsolatedInteractiveRuntime ? runtime.getRemoteCommands() : [];\n}\n\nexport function getInteractiveEngineResourceOverlaps(runtime: AgentSessionRuntime): readonly ResourceOverlap[] {\n\treturn runtime instanceof IsolatedInteractiveRuntime ? runtime.getResourceOverlaps() : [];\n}\n\nexport function getInteractiveEngineResourceExtensions(runtime: AgentSessionRuntime): readonly RpcResourceExtension[] {\n\treturn runtime instanceof IsolatedInteractiveRuntime ? runtime.getResourceExtensions() : [];\n}\n\nexport function onInteractiveEngineResourceExtensionsChanged(\n\truntime: AgentSessionRuntime,\n\tlistener: (extensions: readonly RpcResourceExtension[]) => void,\n): () => void {\n\treturn runtime instanceof IsolatedInteractiveRuntime ? runtime.onResourceExtensionsChanged(listener) : () => {};\n}\n\n/** Evaluate an engine-child command's live argument completions. */\nexport function getInteractiveEngineRemoteCommandCompletions(\n\truntime: AgentSessionRuntime,\n\tcommandName: string,\n\targumentPrefix: string,\n): Promise<RpcAutocompleteItem[] | null> {\n\treturn runtime instanceof IsolatedInteractiveRuntime\n\t\t? runtime.getRemoteCommandCompletions(commandName, argumentPrefix)\n\t\t: Promise.resolve(null);\n}\n\n/** Subscribe to engine-child command catalog changes. No-op when not isolated. */\nexport function onInteractiveEngineRemoteCommandsChanged(\n\truntime: AgentSessionRuntime,\n\tlistener: (commands: readonly RpcSlashCommand[]) => void,\n): () => void {\n\treturn runtime instanceof IsolatedInteractiveRuntime ? runtime.onRemoteCommandsChanged(listener) : () => {};\n}\n\n/** Subscribe to fresh engine session stats, so the footer can repaint. No-op when not isolated. */\nexport function onInteractiveEngineSessionStatsChanged(runtime: AgentSessionRuntime, listener: () => void): () => void {\n\treturn runtime instanceof IsolatedInteractiveRuntime ? runtime.onSessionStatsChanged(listener) : () => {};\n}\n"]}
1
+ {"version":3,"file":"extension-ui-bridge.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/extension-ui-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["import { type KeyId, matchesKey } from \"@earendil-works/pi-tui\";\nimport type { AgentSessionRuntime } from \"../../core/agent-session-runtime.ts\";\nimport type { ResourceOverlap } from \"../../core/diagnostics.ts\";\nimport type { ExtensionUIContext } from \"../../core/extensions/index.js\";\nimport type { KeybindingsManager } from \"../../core/keybindings.ts\";\nimport type { RpcAutocompleteItem, RpcResourceExtension, RpcSlashCommand } from \"../rpc/rpc-types.ts\";\nimport type { ActivityWatchdogDiagnostic } from \"./activity-watchdog.ts\";\nimport { EngineDialogHostController } from \"./engine-dialog-host.ts\";\nimport { InputFormHostController } from \"./input-form-host.ts\";\nimport { IsolatedInteractiveRuntime } from \"./isolated-runtime.js\";\nimport type { EngineExtensionShortcut, EngineKeybindingState, InteractiveEngineMessage } from \"./protocol.ts\";\nimport { RemoteComponentController, type TuiRendererLifecycle } from \"./remote-component.ts\";\nimport { registerRemoteProxyOwnership } from \"./remote-input-ownership.ts\";\nimport { SessionPickerHostController } from \"./session-picker-host.ts\";\n\ninterface EngineMessageSource {\n\tonEngineMessage(listener: (message: InteractiveEngineMessage) => void): () => void;\n\tonKeybindingState?(listener: (state: EngineKeybindingState) => void): () => void;\n}\n\nexport function attachInteractiveEngineKeybindingSync(\n\truntime: EngineMessageSource,\n\tkeybindings: KeybindingsManager,\n\tonState?: (state: EngineKeybindingState) => void,\n): () => void {\n\tconst applyState = (state: EngineKeybindingState): void => {\n\t\tkeybindings.setUserBindings(state.userBindings);\n\t\tonState?.(state);\n\t};\n\tif (runtime.onKeybindingState) return runtime.onKeybindingState(applyState);\n\treturn runtime.onEngineMessage((message) => {\n\t\tif (message.type === \"engine_keybindings_reloaded\") applyState(message.state);\n\t});\n}\n\nexport function attachInteractiveEngineHost(\n\truntime: AgentSessionRuntime,\n\tui: ExtensionUIContext,\n\tonDiagnostic: (diagnostic: ActivityWatchdogDiagnostic) => void,\n\ttuiRendererLifecycle: TuiRendererLifecycle,\n\tsetShortcutHandler?: (handler: (data: string) => boolean) => undefined | (() => void),\n\tkeybindings?: KeybindingsManager,\n): () => void {\n\tif (!(runtime instanceof IsolatedInteractiveRuntime)) return () => {};\n\tconst disposeDiagnostic = runtime.onDiagnostic(onDiagnostic);\n\t// Generation-owned: RPC dialogs mount real host components and must not\n\t// outlive, or answer through, a replacement engine child.\n\tconst dialogs = new EngineDialogHostController(runtime, ui);\n\tlet shortcuts: EngineExtensionShortcut[] = [];\n\tconst dispatchShortcut = (data: string): boolean => {\n\t\tconst shortcut = shortcuts.find(\n\t\t\t({ key, editorKeys }) =>\n\t\t\t\tmatchesKey(data, key as KeyId) && !editorKeys?.some((editorKey) => matchesKey(data, editorKey)),\n\t\t);\n\t\tif (!shortcut) return false;\n\t\tvoid runtime\n\t\t\t.invokeRemoteShortcut(shortcut.key)\n\t\t\t.catch((error: Error) =>\n\t\t\t\tonDiagnostic({ activity: undefined, elapsedMs: 0, level: \"unresponsive\", message: error.message }),\n\t\t\t);\n\t\treturn true;\n\t};\n\tlet disposeShortcutHandler: (() => void) | undefined;\n\tconst installShortcutHandler = (): void => {\n\t\tdisposeShortcutHandler?.();\n\t\tconst dispose = setShortcutHandler?.(dispatchShortcut);\n\t\tdisposeShortcutHandler = typeof dispose === \"function\" ? dispose : undefined;\n\t};\n\tconst applyState = (state: EngineKeybindingState): void => {\n\t\tshortcuts = [...state.shortcuts];\n\t\tinstallShortcutHandler();\n\t};\n\tinstallShortcutHandler();\n\tconst disposeKeybindings = keybindings\n\t\t? attachInteractiveEngineKeybindingSync(runtime, keybindings, applyState)\n\t\t: runtime.onEngineMessage((message) => {\n\t\t\t\tif (message.type === \"engine_keybindings_reloaded\") applyState(message.state);\n\t\t\t});\n\tconst remoteComponents = new RemoteComponentController(runtime, ui, tuiRendererLifecycle);\n\t// Ctrl+C must reach the host while a remote proxy owns input, so publish the\n\t// only component that can answer that question exactly.\n\tconst disposeOwnership = registerRemoteProxyOwnership(runtime, remoteComponents);\n\tconst sessionPicker = new SessionPickerHostController(runtime, ui);\n\tconst inputForm = new InputFormHostController(runtime, ui);\n\tlet disposed = false;\n\treturn () => {\n\t\tif (disposed) return;\n\t\tdisposed = true;\n\t\tdisposeShortcutHandler?.();\n\t\tdisposeKeybindings();\n\t\tdisposeOwnership();\n\t\tremoteComponents.dispose();\n\t\tsessionPicker.dispose();\n\t\tinputForm.dispose();\n\t\tdialogs.dispose();\n\t\tdisposeDiagnostic();\n\t};\n}\n\n/** Route host-owned trust waits to the runner that actually owns the subscribers. */\nexport function withHostProjectTrustPrompt<T>(\n\truntime: AgentSessionRuntime,\n\tkind: \"select\" | \"confirm\" | \"input\",\n\ttitle: string,\n\trun: () => Promise<T>,\n): Promise<T> {\n\treturn runtime instanceof IsolatedInteractiveRuntime\n\t\t? runtime.withProjectTrustPrompt(kind, title, run)\n\t\t: runtime.session.extensionRunner.withProjectTrustPrompt(kind, title, run);\n}\n\nexport async function waitForInteractiveEngineBound(runtime: AgentSessionRuntime): Promise<void> {\n\tif (!(runtime instanceof IsolatedInteractiveRuntime)) return;\n\tawait runtime.waitUntilBound();\n\tawait runtime.initializeFromEngine();\n}\n\nexport async function waitForInteractiveEngineProjectTrust(runtime: AgentSessionRuntime): Promise<void> {\n\tif (!(runtime instanceof IsolatedInteractiveRuntime)) return;\n\tawait runtime.waitUntilProjectTrustSettled();\n}\n\nexport function interruptBlockedInteractiveEngine(runtime: AgentSessionRuntime): boolean {\n\treturn runtime instanceof IsolatedInteractiveRuntime && runtime.interruptBlockedCallback();\n}\n\n/**\n * True when the interactive engine still owes a cooperative abort or the\n * heartbeat watchdog has declared it unresponsive, i.e. when the explicit\n * Ctrl+C escape hatch promised by the watchdog copy applies.\n */\nexport function interactiveEngineNeedsExplicitTermination(runtime: AgentSessionRuntime): boolean {\n\treturn runtime instanceof IsolatedInteractiveRuntime && runtime.needsExplicitTermination();\n}\n\n/**\n * Explicitly terminate an unresponsive interactive engine and start recovery.\n * Only ever reached from a deliberate user action (Ctrl+C) — never from Escape.\n */\nexport function terminateInteractiveEngine(runtime: AgentSessionRuntime): boolean {\n\tif (!interactiveEngineNeedsExplicitTermination(runtime)) return false;\n\tvoid (runtime as IsolatedInteractiveRuntime).terminateAndRecover();\n\treturn true;\n}\n\n/**\n * Command catalog the engine child exposes to the isolated host. Returns an\n * empty list for non-isolated runtimes so callers can merge unconditionally.\n */\nexport function getInteractiveEngineRemoteCommands(runtime: AgentSessionRuntime): readonly RpcSlashCommand[] {\n\treturn runtime instanceof IsolatedInteractiveRuntime ? runtime.getRemoteCommands() : [];\n}\n\nexport function getInteractiveEngineResourceOverlaps(runtime: AgentSessionRuntime): readonly ResourceOverlap[] {\n\treturn runtime instanceof IsolatedInteractiveRuntime ? runtime.getResourceOverlaps() : [];\n}\n\nexport function getInteractiveEngineResourceExtensions(runtime: AgentSessionRuntime): readonly RpcResourceExtension[] {\n\treturn runtime instanceof IsolatedInteractiveRuntime ? runtime.getResourceExtensions() : [];\n}\n\nexport function onInteractiveEngineResourceExtensionsChanged(\n\truntime: AgentSessionRuntime,\n\tlistener: (extensions: readonly RpcResourceExtension[]) => void,\n): () => void {\n\treturn runtime instanceof IsolatedInteractiveRuntime ? runtime.onResourceExtensionsChanged(listener) : () => {};\n}\n\n/** Evaluate an engine-child command's live argument completions. */\nexport function getInteractiveEngineRemoteCommandCompletions(\n\truntime: AgentSessionRuntime,\n\tcommandName: string,\n\targumentPrefix: string,\n): Promise<RpcAutocompleteItem[] | null> {\n\treturn runtime instanceof IsolatedInteractiveRuntime\n\t\t? runtime.getRemoteCommandCompletions(commandName, argumentPrefix)\n\t\t: Promise.resolve(null);\n}\n\n/** Subscribe to engine-child command catalog changes. No-op when not isolated. */\nexport function onInteractiveEngineRemoteCommandsChanged(\n\truntime: AgentSessionRuntime,\n\tlistener: (commands: readonly RpcSlashCommand[]) => void,\n): () => void {\n\treturn runtime instanceof IsolatedInteractiveRuntime ? runtime.onRemoteCommandsChanged(listener) : () => {};\n}\n\n/** Subscribe to fresh engine session stats, so the footer can repaint. No-op when not isolated. */\nexport function onInteractiveEngineSessionStatsChanged(runtime: AgentSessionRuntime, listener: () => void): () => void {\n\treturn runtime instanceof IsolatedInteractiveRuntime ? runtime.onSessionStatsChanged(listener) : () => {};\n}\n"]}
@@ -81,6 +81,7 @@ export declare class IsolatedInteractiveRuntime extends AgentSessionRuntime {
81
81
  getRemoteCommandCompletions(commandName: string, argumentPrefix: string): Promise<RpcAutocompleteItem[] | null>;
82
82
  invokeRemoteShortcut(key: string): Promise<void>;
83
83
  waitUntilBound(): Promise<void>;
84
+ waitUntilProjectTrustSettled(): Promise<void>;
84
85
  waitUntilResourcesReady(): Promise<void>;
85
86
  private isCurrentResourceGeneration;
86
87
  private waitForReplacementGeneration;
@@ -135,7 +136,9 @@ export declare class IsolatedInteractiveRuntime extends AgentSessionRuntime {
135
136
  * what engine recovery exists to survive.
136
137
  */
137
138
  protected settleActiveResponseBeforeTeardown(): Promise<void>;
138
- dispose(): Promise<void>;
139
+ dispose(options?: {
140
+ fromSignal?: boolean;
141
+ }): Promise<void>;
139
142
  private patchSession;
140
143
  /**
141
144
  * Cooperative interrupt. Requests the engine's own abort and waits for it —
@@ -1 +1 @@
1
- {"version":3,"file":"isolated-runtime.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/isolated-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"isolated-runtime.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/isolated-runtime.ts"],"names":[],"mappings":"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"}