@bastani/atomic 0.9.21-alpha.1 → 0.9.21

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 (516) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/dist/builtin/intercom/package.json +1 -1
  3. package/dist/builtin/mcp/package.json +1 -1
  4. package/dist/builtin/subagents/CHANGELOG.md +22 -0
  5. package/dist/builtin/subagents/package.json +1 -1
  6. package/dist/builtin/subagents/src/extension/index.bundle.mjs +292 -60
  7. package/dist/builtin/web-access/package.json +1 -1
  8. package/dist/builtin/workflows/CHANGELOG.md +23 -0
  9. package/dist/builtin/workflows/builtin/adversarial-verification.js +3 -3
  10. package/dist/builtin/workflows/builtin/{chunk-cw86srkf.js → chunk-632fxeb8.js} +1 -1
  11. package/dist/builtin/workflows/builtin/{chunk-w18kbz63.js → chunk-94f8zfz1.js} +1 -1
  12. package/dist/builtin/workflows/builtin/{chunk-kspvwc24.js → chunk-9cm2ckq2.js} +1 -1
  13. package/dist/builtin/workflows/builtin/{chunk-jaj27rqc.js → chunk-a1ar035d.js} +1 -1
  14. package/dist/builtin/workflows/builtin/{chunk-wh19f5ee.js → chunk-d3xhj946.js} +5 -4
  15. package/dist/builtin/workflows/builtin/{chunk-crw7q5g1.js → chunk-gyjck9z8.js} +1 -1
  16. package/dist/builtin/workflows/builtin/{chunk-maqv731g.js → chunk-hj8mh07f.js} +10 -6
  17. package/dist/builtin/workflows/builtin/{chunk-0nrgfbag.js → chunk-kb7s3gx2.js} +1 -1
  18. package/dist/builtin/workflows/builtin/{chunk-73c5tayt.js → chunk-kgn5wz1c.js} +19 -1
  19. package/dist/builtin/workflows/builtin/{chunk-2hak3b7g.js → chunk-nkj4qhj6.js} +1 -1
  20. package/dist/builtin/workflows/builtin/{chunk-bzdvx2xr.js → chunk-r97ndfvt.js} +1 -1
  21. package/dist/builtin/workflows/builtin/{chunk-vkmpdat4.js → chunk-wf876n16.js} +1 -1
  22. package/dist/builtin/workflows/builtin/classify-and-act.js +3 -3
  23. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.js +3 -3
  24. package/dist/builtin/workflows/builtin/generate-and-filter.js +3 -3
  25. package/dist/builtin/workflows/builtin/goal.js +4 -4
  26. package/dist/builtin/workflows/builtin/index.js +12 -12
  27. package/dist/builtin/workflows/builtin/loop-until-done.js +3 -3
  28. package/dist/builtin/workflows/builtin/open-claude-design.js +3 -3
  29. package/dist/builtin/workflows/builtin/ralph.js +4 -4
  30. package/dist/builtin/workflows/builtin/steering-context.js +1 -1
  31. package/dist/builtin/workflows/builtin/tournament.js +3 -3
  32. package/dist/builtin/workflows/package.json +1 -1
  33. package/dist/builtin/workflows/src/extension/index.bundle.mjs +40 -11
  34. package/dist/builtin/workflows/src/index.js +9 -3
  35. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +6 -1
  36. package/dist/cli/auth-command.js +5 -0
  37. package/dist/cli/auth-command.js.map +1 -1
  38. package/dist/cli/credential-print.js +2 -0
  39. package/dist/cli/credential-print.js.map +1 -1
  40. package/dist/cli/experimental/command.js +5 -2
  41. package/dist/cli/experimental/command.js.map +1 -1
  42. package/dist/cli.js +1 -1
  43. package/dist/cli.js.map +1 -1
  44. package/dist/config.d.ts +4 -4
  45. package/dist/config.js +4 -4
  46. package/dist/config.js.map +1 -1
  47. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  48. package/dist/core/agent-session-extension-bindings.js +9 -4
  49. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  50. package/dist/core/agent-session-methods.d.ts +4 -4
  51. package/dist/core/agent-session-methods.d.ts.map +1 -1
  52. package/dist/core/agent-session-methods.js.map +1 -1
  53. package/dist/core/agent-session-prompt.d.ts +4 -4
  54. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  55. package/dist/core/agent-session-prompt.js +38 -15
  56. package/dist/core/agent-session-prompt.js.map +1 -1
  57. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  58. package/dist/core/agent-session-runtime.js +14 -9
  59. package/dist/core/agent-session-runtime.js.map +1 -1
  60. package/dist/core/agent-session-types.d.ts +4 -1
  61. package/dist/core/agent-session-types.d.ts.map +1 -1
  62. package/dist/core/agent-session-types.js.map +1 -1
  63. package/dist/core/agent-session.d.ts +1 -1
  64. package/dist/core/agent-session.d.ts.map +1 -1
  65. package/dist/core/agent-session.js +140 -95
  66. package/dist/core/agent-session.js.map +1 -1
  67. package/dist/core/auth-storage-backends.js +2 -3
  68. package/dist/core/auth-storage-backends.js.map +1 -1
  69. package/dist/core/auth-storage.js +4 -1
  70. package/dist/core/auth-storage.js.map +1 -1
  71. package/dist/core/builtin-resource-loader.js +9 -0
  72. package/dist/core/builtin-resource-loader.js.map +1 -1
  73. package/dist/core/cache-warmer.js +8 -1
  74. package/dist/core/cache-warmer.js.map +1 -1
  75. package/dist/core/compaction/range-planner.js +6 -0
  76. package/dist/core/compaction/range-planner.js.map +1 -1
  77. package/dist/core/execution-model-router.d.ts +13 -3
  78. package/dist/core/execution-model-router.d.ts.map +1 -1
  79. package/dist/core/execution-model-router.js +227 -131
  80. package/dist/core/execution-model-router.js.map +1 -1
  81. package/dist/core/export-html/template-js/entries-navigation.js +16 -6
  82. package/dist/core/export-html/template-js/initialization.js +34 -11
  83. package/dist/core/export-html/template.css +10 -0
  84. package/dist/core/export-html/template.js +50 -17
  85. package/dist/core/extensions/context-types.d.ts +2 -0
  86. package/dist/core/extensions/context-types.d.ts.map +1 -1
  87. package/dist/core/extensions/context-types.js.map +1 -1
  88. package/dist/core/extensions/host-input.js +8 -4
  89. package/dist/core/extensions/host-input.js.map +1 -1
  90. package/dist/core/extensions/reactive-widget.js +1 -0
  91. package/dist/core/extensions/reactive-widget.js.map +1 -1
  92. package/dist/core/extensions/runner-context.d.ts +1 -0
  93. package/dist/core/extensions/runner-context.d.ts.map +1 -1
  94. package/dist/core/extensions/runner-context.js +4 -0
  95. package/dist/core/extensions/runner-context.js.map +1 -1
  96. package/dist/core/extensions/runner.d.ts +1 -0
  97. package/dist/core/extensions/runner.d.ts.map +1 -1
  98. package/dist/core/extensions/runner.js +48 -30
  99. package/dist/core/extensions/runner.js.map +1 -1
  100. package/dist/core/extensions/runtime-types.d.ts +1 -0
  101. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  102. package/dist/core/extensions/runtime-types.js.map +1 -1
  103. package/dist/core/extensions/workflow-activity-hub.js +9 -7
  104. package/dist/core/extensions/workflow-activity-hub.js.map +1 -1
  105. package/dist/core/footer-data-provider.js +24 -23
  106. package/dist/core/footer-data-provider.js.map +1 -1
  107. package/dist/core/keybindings.js +1 -0
  108. package/dist/core/keybindings.js.map +1 -1
  109. package/dist/core/mandatory-resource-loader.js +4 -1
  110. package/dist/core/mandatory-resource-loader.js.map +1 -1
  111. package/dist/core/model-config.js +2 -0
  112. package/dist/core/model-config.js.map +1 -1
  113. package/dist/core/model-registry.js +1 -0
  114. package/dist/core/model-registry.js.map +1 -1
  115. package/dist/core/model-resolver-defaults.js +1 -1
  116. package/dist/core/model-resolver-defaults.js.map +1 -1
  117. package/dist/core/{model-routing-task.d.ts → model-routing-bytes.d.ts} +1 -4
  118. package/dist/core/model-routing-bytes.d.ts.map +1 -0
  119. package/dist/core/model-routing-bytes.js +33 -0
  120. package/dist/core/model-routing-bytes.js.map +1 -0
  121. package/dist/core/model-routing-candidates.d.ts +42 -0
  122. package/dist/core/model-routing-candidates.d.ts.map +1 -0
  123. package/dist/core/model-routing-candidates.js +309 -0
  124. package/dist/core/model-routing-candidates.js.map +1 -0
  125. package/dist/core/model-routing-constraints.d.ts +4 -0
  126. package/dist/core/model-routing-constraints.d.ts.map +1 -1
  127. package/dist/core/model-routing-constraints.js +13 -1
  128. package/dist/core/model-routing-constraints.js.map +1 -1
  129. package/dist/core/model-routing-debug.d.ts +9 -0
  130. package/dist/core/model-routing-debug.d.ts.map +1 -0
  131. package/dist/core/model-routing-debug.js +14 -0
  132. package/dist/core/model-routing-debug.js.map +1 -0
  133. package/dist/core/model-routing-evals.d.ts +50 -0
  134. package/dist/core/model-routing-evals.d.ts.map +1 -0
  135. package/dist/core/model-routing-evals.js +190 -0
  136. package/dist/core/model-routing-evals.js.map +1 -0
  137. package/dist/core/model-routing-needs.d.ts +75 -0
  138. package/dist/core/model-routing-needs.d.ts.map +1 -0
  139. package/dist/core/model-routing-needs.js +176 -0
  140. package/dist/core/model-routing-needs.js.map +1 -0
  141. package/dist/core/model-runtime-streaming.js +3 -0
  142. package/dist/core/model-runtime-streaming.js.map +1 -1
  143. package/dist/core/model-runtime.js +26 -14
  144. package/dist/core/model-runtime.js.map +1 -1
  145. package/dist/core/models-store.js +2 -3
  146. package/dist/core/models-store.js.map +1 -1
  147. package/dist/core/output-guard.js +1 -0
  148. package/dist/core/output-guard.js.map +1 -1
  149. package/dist/core/package-manager-paths.d.ts +2 -1
  150. package/dist/core/package-manager-paths.d.ts.map +1 -1
  151. package/dist/core/package-manager-paths.js +4 -3
  152. package/dist/core/package-manager-paths.js.map +1 -1
  153. package/dist/core/package-manager.js +1 -0
  154. package/dist/core/package-manager.js.map +1 -1
  155. package/dist/core/resource-loader-assets.d.ts.map +1 -1
  156. package/dist/core/resource-loader-assets.js +9 -7
  157. package/dist/core/resource-loader-assets.js.map +1 -1
  158. package/dist/core/resource-loader-core.js +49 -0
  159. package/dist/core/resource-loader-core.js.map +1 -1
  160. package/dist/core/runtime-credentials.js +2 -1
  161. package/dist/core/runtime-credentials.js.map +1 -1
  162. package/dist/core/session-cwd.js +1 -0
  163. package/dist/core/session-cwd.js.map +1 -1
  164. package/dist/core/session-manager-archive.d.ts.map +1 -1
  165. package/dist/core/session-manager-archive.js +4 -2
  166. package/dist/core/session-manager-archive.js.map +1 -1
  167. package/dist/core/session-manager-core.js +11 -7
  168. package/dist/core/session-manager-core.js.map +1 -1
  169. package/dist/core/session-manager-storage.d.ts +10 -4
  170. package/dist/core/session-manager-storage.d.ts.map +1 -1
  171. package/dist/core/session-manager-storage.js +12 -6
  172. package/dist/core/session-manager-storage.js.map +1 -1
  173. package/dist/core/settings-manager-basic-accessors.d.ts +2 -1
  174. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  175. package/dist/core/settings-manager-basic-accessors.js +21 -0
  176. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  177. package/dist/core/settings-manager-core.js +13 -7
  178. package/dist/core/settings-manager-core.js.map +1 -1
  179. package/dist/core/settings-manager.d.ts +1 -1
  180. package/dist/core/settings-manager.d.ts.map +1 -1
  181. package/dist/core/settings-manager.js.map +1 -1
  182. package/dist/core/settings-storage.js +6 -0
  183. package/dist/core/settings-storage.js.map +1 -1
  184. package/dist/core/settings-types.d.ts +8 -0
  185. package/dist/core/settings-types.d.ts.map +1 -1
  186. package/dist/core/settings-types.js.map +1 -1
  187. package/dist/core/structured-output/index.d.ts.map +1 -1
  188. package/dist/core/structured-output/index.js +4 -1
  189. package/dist/core/structured-output/index.js.map +1 -1
  190. package/dist/core/structured-output/invalid-output.js +1 -0
  191. package/dist/core/structured-output/invalid-output.js.map +1 -1
  192. package/dist/core/tasks/agent-adapter.js +5 -3
  193. package/dist/core/tasks/agent-adapter.js.map +1 -1
  194. package/dist/core/tasks/child-command-owner.js +3 -7
  195. package/dist/core/tasks/child-command-owner.js.map +1 -1
  196. package/dist/core/tasks/completion.js +5 -1
  197. package/dist/core/tasks/completion.js.map +1 -1
  198. package/dist/core/tasks/owner-store.js +12 -8
  199. package/dist/core/tasks/owner-store.js.map +1 -1
  200. package/dist/core/tasks/supervisor.js +14 -35
  201. package/dist/core/tasks/supervisor.js.map +1 -1
  202. package/dist/core/tools/ask-user-question/state/build-questionnaire.js +13 -4
  203. package/dist/core/tools/ask-user-question/state/build-questionnaire.js.map +1 -1
  204. package/dist/core/tools/ask-user-question/state/questionnaire-session.js +11 -1
  205. package/dist/core/tools/ask-user-question/state/questionnaire-session.js.map +1 -1
  206. package/dist/core/tools/ask-user-question/view/components/chat-row-view.js +1 -0
  207. package/dist/core/tools/ask-user-question/view/components/chat-row-view.js.map +1 -1
  208. package/dist/core/tools/ask-user-question/view/components/multi-select-view.js +1 -0
  209. package/dist/core/tools/ask-user-question/view/components/multi-select-view.js.map +1 -1
  210. package/dist/core/tools/ask-user-question/view/components/option-list-view.js +1 -0
  211. package/dist/core/tools/ask-user-question/view/components/option-list-view.js.map +1 -1
  212. package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.js +5 -0
  213. package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.js.map +1 -1
  214. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.js +2 -0
  215. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.js.map +1 -1
  216. package/dist/core/tools/ask-user-question/view/components/preview/preview-pane.js +13 -8
  217. package/dist/core/tools/ask-user-question/view/components/preview/preview-pane.js.map +1 -1
  218. package/dist/core/tools/ask-user-question/view/components/submit-picker.js +1 -0
  219. package/dist/core/tools/ask-user-question/view/components/submit-picker.js.map +1 -1
  220. package/dist/core/tools/ask-user-question/view/components/tab-bar.js +1 -0
  221. package/dist/core/tools/ask-user-question/view/components/tab-bar.js.map +1 -1
  222. package/dist/core/tools/ask-user-question/view/components/wrapping-select.js +30 -24
  223. package/dist/core/tools/ask-user-question/view/components/wrapping-select.js.map +1 -1
  224. package/dist/core/tools/ask-user-question/view/dialog-builder.js +5 -0
  225. package/dist/core/tools/ask-user-question/view/dialog-builder.js.map +1 -1
  226. package/dist/core/tools/ask-user-question/view/props-adapter.js +8 -0
  227. package/dist/core/tools/ask-user-question/view/props-adapter.js.map +1 -1
  228. package/dist/core/tools/ask-user-question/view/tab-content-strategy.js +4 -4
  229. package/dist/core/tools/ask-user-question/view/tab-content-strategy.js.map +1 -1
  230. package/dist/core/tools/bash.js +5 -8
  231. package/dist/core/tools/bash.js.map +1 -1
  232. package/dist/core/tools/edit-batch.js +4 -0
  233. package/dist/core/tools/edit-batch.js.map +1 -1
  234. package/dist/core/tools/edit.js +2 -0
  235. package/dist/core/tools/edit.js.map +1 -1
  236. package/dist/core/tools/file-mutation-coordinator.js +9 -0
  237. package/dist/core/tools/file-mutation-coordinator.js.map +1 -1
  238. package/dist/core/tools/find.js +1 -1
  239. package/dist/core/tools/find.js.map +1 -1
  240. package/dist/core/tools/hashline-engine/fs.js +1 -1
  241. package/dist/core/tools/hashline-engine/fs.js.map +1 -1
  242. package/dist/core/tools/hashline-engine/input.js +4 -0
  243. package/dist/core/tools/hashline-engine/input.js.map +1 -1
  244. package/dist/core/tools/hashline-engine/mismatch.js +6 -0
  245. package/dist/core/tools/hashline-engine/mismatch.js.map +1 -1
  246. package/dist/core/tools/hashline-engine/patcher.js +13 -0
  247. package/dist/core/tools/hashline-engine/patcher.js.map +1 -1
  248. package/dist/core/tools/hashline-engine/recovery.js +1 -0
  249. package/dist/core/tools/hashline-engine/recovery.js.map +1 -1
  250. package/dist/core/tools/output-accumulator.js +20 -13
  251. package/dist/core/tools/output-accumulator.js.map +1 -1
  252. package/dist/core/tools/persisted-output-file.js +9 -3
  253. package/dist/core/tools/persisted-output-file.js.map +1 -1
  254. package/dist/core/tools/resource-selectors.js +1 -0
  255. package/dist/core/tools/resource-selectors.js.map +1 -1
  256. package/dist/core/tools/write.js +1 -0
  257. package/dist/core/tools/write.js.map +1 -1
  258. package/dist/core/trust-manager.js +1 -0
  259. package/dist/core/trust-manager.js.map +1 -1
  260. package/dist/core/workflow-stage-admission.js +17 -10
  261. package/dist/core/workflow-stage-admission.js.map +1 -1
  262. package/dist/extensions/llama/client.js +2 -0
  263. package/dist/extensions/llama/client.js.map +1 -1
  264. package/dist/extensions/llama/huggingface-ui.js +17 -9
  265. package/dist/extensions/llama/huggingface-ui.js.map +1 -1
  266. package/dist/extensions/llama/huggingface.js +2 -0
  267. package/dist/extensions/llama/huggingface.js.map +1 -1
  268. package/dist/extensions/llama/ui.js +11 -3
  269. package/dist/extensions/llama/ui.js.map +1 -1
  270. package/dist/index.d.ts +4 -2
  271. package/dist/index.d.ts.map +1 -1
  272. package/dist/index.js +3 -1
  273. package/dist/index.js.map +1 -1
  274. package/dist/modes/interactive/components/armin.js +10 -6
  275. package/dist/modes/interactive/components/armin.js.map +1 -1
  276. package/dist/modes/interactive/components/assistant-message.js +10 -2
  277. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  278. package/dist/modes/interactive/components/atomic-working-status.js +10 -2
  279. package/dist/modes/interactive/components/atomic-working-status.js.map +1 -1
  280. package/dist/modes/interactive/components/bash-execution.js +9 -4
  281. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  282. package/dist/modes/interactive/components/bordered-loader.js +3 -0
  283. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  284. package/dist/modes/interactive/components/branch-summary-message.js +4 -1
  285. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  286. package/dist/modes/interactive/components/chat-message-renderer.js +2 -1
  287. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  288. package/dist/modes/interactive/components/chat-session-host-state.js +63 -31
  289. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
  290. package/dist/modes/interactive/components/chat-session-host.js +8 -1
  291. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  292. package/dist/modes/interactive/components/chat-transcript.js +24 -14
  293. package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
  294. package/dist/modes/interactive/components/compaction-boundary-message.js +2 -1
  295. package/dist/modes/interactive/components/compaction-boundary-message.js.map +1 -1
  296. package/dist/modes/interactive/components/config-selector-list.js +15 -6
  297. package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
  298. package/dist/modes/interactive/components/config-selector.js +7 -1
  299. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  300. package/dist/modes/interactive/components/countdown-timer.js +2 -0
  301. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  302. package/dist/modes/interactive/components/custom-editor.js +21 -1
  303. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  304. package/dist/modes/interactive/components/custom-entry.js +4 -1
  305. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  306. package/dist/modes/interactive/components/custom-message.js +9 -1
  307. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  308. package/dist/modes/interactive/components/daxnuts.js +8 -6
  309. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  310. package/dist/modes/interactive/components/dynamic-border.js +1 -0
  311. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  312. package/dist/modes/interactive/components/extension-editor.js +7 -1
  313. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  314. package/dist/modes/interactive/components/extension-input.js +8 -2
  315. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  316. package/dist/modes/interactive/components/extension-selector.js +9 -1
  317. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  318. package/dist/modes/interactive/components/first-time-setup.js +4 -2
  319. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  320. package/dist/modes/interactive/components/footer.js +5 -2
  321. package/dist/modes/interactive/components/footer.js.map +1 -1
  322. package/dist/modes/interactive/components/host-input-form.js +13 -2
  323. package/dist/modes/interactive/components/host-input-form.js.map +1 -1
  324. package/dist/modes/interactive/components/login-dialog.js +9 -3
  325. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  326. package/dist/modes/interactive/components/model-selector.js +24 -12
  327. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  328. package/dist/modes/interactive/components/oauth-selector.js +12 -3
  329. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  330. package/dist/modes/interactive/components/reserved-bottom-overlay.js +11 -2
  331. package/dist/modes/interactive/components/reserved-bottom-overlay.js.map +1 -1
  332. package/dist/modes/interactive/components/scoped-models-selector.js +13 -8
  333. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  334. package/dist/modes/interactive/components/scroll-widget.js +4 -0
  335. package/dist/modes/interactive/components/scroll-widget.js.map +1 -1
  336. package/dist/modes/interactive/components/session-selector-header.js +11 -7
  337. package/dist/modes/interactive/components/session-selector-header.js.map +1 -1
  338. package/dist/modes/interactive/components/session-selector-list.js +25 -12
  339. package/dist/modes/interactive/components/session-selector-list.js.map +1 -1
  340. package/dist/modes/interactive/components/session-selector.js +23 -15
  341. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  342. package/dist/modes/interactive/components/settings-selector-submenus.js +19 -1
  343. package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
  344. package/dist/modes/interactive/components/settings-selector.js +1 -0
  345. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  346. package/dist/modes/interactive/components/show-images-selector.js +1 -0
  347. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  348. package/dist/modes/interactive/components/skill-invocation-message.js +4 -1
  349. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  350. package/dist/modes/interactive/components/startup-identity.js +8 -3
  351. package/dist/modes/interactive/components/startup-identity.js.map +1 -1
  352. package/dist/modes/interactive/components/task-completion-message.js +2 -0
  353. package/dist/modes/interactive/components/task-completion-message.js.map +1 -1
  354. package/dist/modes/interactive/components/task-detail.js +2 -0
  355. package/dist/modes/interactive/components/task-detail.js.map +1 -1
  356. package/dist/modes/interactive/components/task-inspector.js +22 -12
  357. package/dist/modes/interactive/components/task-inspector.js.map +1 -1
  358. package/dist/modes/interactive/components/task-list.js +2 -0
  359. package/dist/modes/interactive/components/task-list.js.map +1 -1
  360. package/dist/modes/interactive/components/task-live-transcript.js +8 -3
  361. package/dist/modes/interactive/components/task-live-transcript.js.map +1 -1
  362. package/dist/modes/interactive/components/task-navigation.js +5 -2
  363. package/dist/modes/interactive/components/task-navigation.js.map +1 -1
  364. package/dist/modes/interactive/components/task-row.js +2 -0
  365. package/dist/modes/interactive/components/task-row.js.map +1 -1
  366. package/dist/modes/interactive/components/theme-selector.js +2 -0
  367. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  368. package/dist/modes/interactive/components/thinking-selector.js +7 -1
  369. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  370. package/dist/modes/interactive/components/tool-execution.js +25 -10
  371. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  372. package/dist/modes/interactive/components/transcript-follow-indicator.js +1 -0
  373. package/dist/modes/interactive/components/transcript-follow-indicator.js.map +1 -1
  374. package/dist/modes/interactive/components/tree-selector-component.js +7 -3
  375. package/dist/modes/interactive/components/tree-selector-component.js.map +1 -1
  376. package/dist/modes/interactive/components/tree-selector-help.js +1 -0
  377. package/dist/modes/interactive/components/tree-selector-help.js.map +1 -1
  378. package/dist/modes/interactive/components/tree-selector-label-input.js +6 -2
  379. package/dist/modes/interactive/components/tree-selector-label-input.js.map +1 -1
  380. package/dist/modes/interactive/components/tree-selector-list.js +4 -0
  381. package/dist/modes/interactive/components/tree-selector-list.js.map +1 -1
  382. package/dist/modes/interactive/components/trust-selector.js +6 -0
  383. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  384. package/dist/modes/interactive/components/user-message-selector.js +6 -3
  385. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  386. package/dist/modes/interactive/components/user-message.js +5 -0
  387. package/dist/modes/interactive/components/user-message.js.map +1 -1
  388. package/dist/modes/interactive/components/working-status.js +1 -0
  389. package/dist/modes/interactive/components/working-status.js.map +1 -1
  390. package/dist/modes/interactive/interactive-autocomplete.js +2 -0
  391. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  392. package/dist/modes/interactive/interactive-extension-runtime.js +1 -0
  393. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  394. package/dist/modes/interactive/interactive-mode-base.js +162 -120
  395. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  396. package/dist/modes/interactive/interactive-mode-helpers.js +3 -0
  397. package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -1
  398. package/dist/modes/interactive/interactive-mode-surface.d.ts +0 -6
  399. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  400. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  401. package/dist/modes/interactive/interactive-resource-disclosure.js +0 -4
  402. package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
  403. package/dist/modes/interactive/interactive-resource-rendering.js +0 -12
  404. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  405. package/dist/modes/interactive/interactive-startup-chat-container.js +1 -4
  406. package/dist/modes/interactive/interactive-startup-chat-container.js.map +1 -1
  407. package/dist/modes/interactive/model-catalog-refresh.js +1 -3
  408. package/dist/modes/interactive/model-catalog-refresh.js.map +1 -1
  409. package/dist/modes/interactive/theme/color-utils.d.ts +5 -0
  410. package/dist/modes/interactive/theme/color-utils.d.ts.map +1 -1
  411. package/dist/modes/interactive/theme/color-utils.js +11 -0
  412. package/dist/modes/interactive/theme/color-utils.js.map +1 -1
  413. package/dist/modes/interactive/theme/global-theme.d.ts.map +1 -1
  414. package/dist/modes/interactive/theme/global-theme.js +4 -3
  415. package/dist/modes/interactive/theme/global-theme.js.map +1 -1
  416. package/dist/modes/interactive/theme/theme-class.js +7 -0
  417. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  418. package/dist/modes/interactive/theme/theme-controller.js +9 -2
  419. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  420. package/dist/modes/interactive-engine/activity-watchdog.js +8 -3
  421. package/dist/modes/interactive-engine/activity-watchdog.js.map +1 -1
  422. package/dist/modes/interactive-engine/engine-custom-ui.js +12 -8
  423. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  424. package/dist/modes/interactive-engine/engine-dialog-host.js +7 -3
  425. package/dist/modes/interactive-engine/engine-dialog-host.js.map +1 -1
  426. package/dist/modes/interactive-engine/engine-health.js +23 -13
  427. package/dist/modes/interactive-engine/engine-health.js.map +1 -1
  428. package/dist/modes/interactive-engine/engine-input-form.js +3 -2
  429. package/dist/modes/interactive-engine/engine-input-form.js.map +1 -1
  430. package/dist/modes/interactive-engine/engine-monitor.js +13 -1
  431. package/dist/modes/interactive-engine/engine-monitor.js.map +1 -1
  432. package/dist/modes/interactive-engine/engine-project-trust.js +2 -1
  433. package/dist/modes/interactive-engine/engine-project-trust.js.map +1 -1
  434. package/dist/modes/interactive-engine/engine-render-service.js +7 -4
  435. package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
  436. package/dist/modes/interactive-engine/engine-session-picker.js +3 -2
  437. package/dist/modes/interactive-engine/engine-session-picker.js.map +1 -1
  438. package/dist/modes/interactive-engine/input-form-host.js +5 -1
  439. package/dist/modes/interactive-engine/input-form-host.js.map +1 -1
  440. package/dist/modes/interactive-engine/isolated-runtime.js +37 -23
  441. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  442. package/dist/modes/interactive-engine/remote-command-catalog.js +4 -3
  443. package/dist/modes/interactive-engine/remote-command-catalog.js.map +1 -1
  444. package/dist/modes/interactive-engine/remote-component.js +24 -12
  445. package/dist/modes/interactive-engine/remote-component.js.map +1 -1
  446. package/dist/modes/interactive-engine/remote-frame-clamp.js +3 -3
  447. package/dist/modes/interactive-engine/remote-frame-clamp.js.map +1 -1
  448. package/dist/modes/interactive-engine/remote-model-catalog.js +5 -4
  449. package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
  450. package/dist/modes/interactive-engine/remote-queue-pause.js +3 -1
  451. package/dist/modes/interactive-engine/remote-queue-pause.js.map +1 -1
  452. package/dist/modes/interactive-engine/remote-renderer.js +24 -13
  453. package/dist/modes/interactive-engine/remote-renderer.js.map +1 -1
  454. package/dist/modes/interactive-engine/resource-readiness-error.js +1 -0
  455. package/dist/modes/interactive-engine/resource-readiness-error.js.map +1 -1
  456. package/dist/modes/interactive-engine/session-picker-host.js +5 -1
  457. package/dist/modes/interactive-engine/session-picker-host.js.map +1 -1
  458. package/dist/modes/interactive-engine/terminal-mode-controller.js +2 -1
  459. package/dist/modes/interactive-engine/terminal-mode-controller.js.map +1 -1
  460. package/dist/modes/rpc/queued-writer.js +13 -4
  461. package/dist/modes/rpc/queued-writer.js.map +1 -1
  462. package/dist/modes/rpc/rpc-bash-request-owners.js +2 -1
  463. package/dist/modes/rpc/rpc-bash-request-owners.js.map +1 -1
  464. package/dist/modes/rpc/rpc-client-api.d.ts +8 -4
  465. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  466. package/dist/modes/rpc/rpc-client-api.js +10 -3
  467. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  468. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  469. package/dist/modes/rpc/rpc-client.js +35 -22
  470. package/dist/modes/rpc/rpc-client.js.map +1 -1
  471. package/dist/modes/rpc/rpc-command-handler.js +6 -6
  472. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  473. package/dist/modes/rpc/rpc-event-buffer.js +3 -1
  474. package/dist/modes/rpc/rpc-event-buffer.js.map +1 -1
  475. package/dist/modes/rpc/rpc-generation-buffer.js +1 -3
  476. package/dist/modes/rpc/rpc-generation-buffer.js.map +1 -1
  477. package/dist/modes/rpc/rpc-keybindings-reload.js +4 -1
  478. package/dist/modes/rpc/rpc-keybindings-reload.js.map +1 -1
  479. package/dist/modes/rpc/rpc-output-buffer.js +3 -4
  480. package/dist/modes/rpc/rpc-output-buffer.js.map +1 -1
  481. package/dist/modes/rpc/rpc-pending-requests.js +1 -3
  482. package/dist/modes/rpc/rpc-pending-requests.js.map +1 -1
  483. package/dist/modes/rpc/rpc-provider-auth.js +3 -1
  484. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  485. package/dist/modes/rpc/rpc-resource-readiness.js +4 -5
  486. package/dist/modes/rpc/rpc-resource-readiness.js.map +1 -1
  487. package/dist/modes/rpc/rpc-session-binding.js +15 -0
  488. package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
  489. package/dist/modes/rpc/rpc-terminal-drain.js +3 -0
  490. package/dist/modes/rpc/rpc-terminal-drain.js.map +1 -1
  491. package/dist/modes/rpc/rpc-types.d.ts +10 -1
  492. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  493. package/dist/modes/rpc/rpc-types.js.map +1 -1
  494. package/docs/models/evals.md +883 -39
  495. package/docs/models/model-selection.md +7 -8
  496. package/docs/rpc/examples.md +1 -1
  497. package/docs/rpc/protocol.md +9 -3
  498. package/docs/sdk/structured-decisions.md +1 -1
  499. package/docs/sdk.md +3 -3
  500. package/docs/settings.md +24 -3
  501. package/docs/subagents/reference.md +22 -4
  502. package/docs/subagents.md +2 -0
  503. package/docs/usage.md +3 -3
  504. package/docs/workflows/api-reference.md +1 -1
  505. package/docs/workflows/authoring.md +1 -7
  506. package/docs/workflows/builtins.md +1 -1
  507. package/docs/workflows/reliable-design.md +1 -1
  508. package/examples/extensions/custom-provider-gitlab-duo/test.ts +5 -5
  509. package/examples/extensions/gondolin/package.json +1 -1
  510. package/examples/rpc-client.ts +1 -1
  511. package/examples/rpc-extension-ui.ts +1 -1
  512. package/npm-shrinkwrap.json +70 -33
  513. package/package.json +6 -7
  514. package/dist/core/model-routing-task.d.ts.map +0 -1
  515. package/dist/core/model-routing-task.js +0 -120
  516. package/dist/core/model-routing-task.js.map +0 -1
@@ -191,9 +191,10 @@
191
191
  </div>`;
192
192
  }
193
193
 
194
- if (entry.type === 'custom_message' && entry.display) {
195
- return `<div class="hook-message" id="${entryDomId}">${tsHtml}
196
- <div class="hook-type">[${escapeHtml(entry.customType)}]</div>
194
+ if (entry.type === 'custom_message') {
195
+ const hidden = entry.display === false;
196
+ return `<div class="hook-message${hidden ? ' hook-message-hidden' : ''}" id="${entryDomId}">${tsHtml}
197
+ <div class="hook-type">[${escapeHtml(entry.customType)}]${hidden ? ' · Hidden in terminal' : ''}</div>
197
198
  <div class="markdown-content">${safeMarkedParse(typeof entry.content === 'string' ? entry.content : JSON.stringify(entry.content))}</div>
198
199
  </div>`;
199
200
  }
@@ -269,10 +270,11 @@
269
270
  <div class="header">
270
271
  <h1>Session: ${escapeHtml(header?.id || 'unknown')}</h1>
271
272
  <div class="help-bar">
272
- <span class="help-hint">T toggle thinking · O toggle tools</span>
273
+ <span class="help-hint">T toggle thinking · O toggle tools · H toggle hidden messages</span>
273
274
  <div class="help-actions">
274
- <button type="button" class="header-toggle-btn" data-action="toggle-thinking" title="Toggle thinking (T)">Toggle thinking</button>
275
- <button type="button" class="header-toggle-btn" data-action="toggle-tools" title="Toggle tools (O)">Toggle tools</button>
275
+ <button type="button" class="header-toggle-btn" data-action="toggle-thinking" aria-pressed="${thinkingExpanded}" title="Toggle thinking (T)">Toggle thinking</button>
276
+ <button type="button" class="header-toggle-btn" data-action="toggle-tools" aria-pressed="${toolOutputsExpanded}" title="Toggle tools (O)">Toggle tools</button>
277
+ <button type="button" class="header-toggle-btn" data-action="toggle-hidden-messages" aria-pressed="${showHiddenMessages}" title="Show custom messages marked as hidden in the terminal (H).">${showHiddenMessages ? 'Hide hidden messages' : 'Show hidden messages'}</button>
276
278
  <button type="button" class="download-json-btn" onclick="downloadSessionJson()" title="Download session as JSONL">↓ JSONL</button>
277
279
  </div>
278
280
  </div>
@@ -370,6 +372,10 @@
370
372
  function navigateTo(targetId, scrollMode = 'target', scrollToEntryId = null) {
371
373
  currentLeafId = targetId;
372
374
  currentTargetId = scrollToEntryId || targetId;
375
+ const targetEntry = byId.get(currentTargetId);
376
+ if (scrollMode === 'target' && targetEntry?.type === 'custom_message' && targetEntry.display === false) {
377
+ setHiddenMessagesVisible(true);
378
+ }
373
379
  const path = getPath(targetId);
374
380
 
375
381
  renderTree();
@@ -391,6 +397,10 @@
391
397
  messagesEl.innerHTML = '';
392
398
  messagesEl.appendChild(fragment);
393
399
 
400
+ // Cached nodes contain their initial presentation; reapply the viewer's toggle states.
401
+ setThinkingExpanded(thinkingExpanded);
402
+ setToolOutputsExpanded(toolOutputsExpanded);
403
+
394
404
  // Attach click handlers for copy-link buttons
395
405
  messagesEl.querySelectorAll('.copy-link-btn').forEach(btn => {
396
406
  btn.addEventListener('click', (e) => {
@@ -236,19 +236,32 @@
236
236
  // Toggle states
237
237
  let thinkingExpanded = true;
238
238
  let toolOutputsExpanded = false;
239
+ let showHiddenMessages = false;
240
+
241
+ function setHiddenMessagesVisible(visible) {
242
+ showHiddenMessages = visible;
243
+ document.body.classList.toggle('show-hidden-messages', visible);
244
+ const button = document.querySelector('[data-action="toggle-hidden-messages"]');
245
+ if (button) {
246
+ button.setAttribute('aria-pressed', String(visible));
247
+ button.textContent = visible ? 'Hide hidden messages' : 'Show hidden messages';
248
+ }
249
+ }
239
250
 
240
- const toggleThinking = () => {
241
- thinkingExpanded = !thinkingExpanded;
251
+ function setThinkingExpanded(expanded) {
252
+ thinkingExpanded = expanded;
253
+ document.querySelector('[data-action="toggle-thinking"]')?.setAttribute('aria-pressed', String(expanded));
242
254
  document.querySelectorAll('.thinking-text').forEach(el => {
243
255
  el.style.display = thinkingExpanded ? '' : 'none';
244
256
  });
245
257
  document.querySelectorAll('.thinking-collapsed').forEach(el => {
246
258
  el.style.display = thinkingExpanded ? 'none' : 'block';
247
259
  });
248
- };
260
+ }
249
261
 
250
- const toggleToolOutputs = () => {
251
- toolOutputsExpanded = !toolOutputsExpanded;
262
+ function setToolOutputsExpanded(expanded) {
263
+ toolOutputsExpanded = expanded;
264
+ document.querySelector('[data-action="toggle-tools"]')?.setAttribute('aria-pressed', String(expanded));
252
265
  document.querySelectorAll('.tool-output.expandable').forEach(el => {
253
266
  el.classList.toggle('expanded', toolOutputsExpanded);
254
267
  });
@@ -258,11 +271,18 @@
258
271
  document.querySelectorAll('.skill-invocation').forEach(el => {
259
272
  el.classList.toggle('expanded', toolOutputsExpanded);
260
273
  });
261
- };
274
+ }
262
275
 
263
276
  const attachHeaderHandlers = () => {
264
- document.querySelector('[data-action="toggle-thinking"]')?.addEventListener('click', toggleThinking);
265
- document.querySelector('[data-action="toggle-tools"]')?.addEventListener('click', toggleToolOutputs);
277
+ document.querySelector('[data-action="toggle-thinking"]')?.addEventListener('click', () => {
278
+ setThinkingExpanded(!thinkingExpanded);
279
+ });
280
+ document.querySelector('[data-action="toggle-tools"]')?.addEventListener('click', () => {
281
+ setToolOutputsExpanded(!toolOutputsExpanded);
282
+ });
283
+ document.querySelector('[data-action="toggle-hidden-messages"]')?.addEventListener('click', () => {
284
+ setHiddenMessagesVisible(!showHiddenMessages);
285
+ });
266
286
  };
267
287
 
268
288
  const isEditableTarget = (element) => {
@@ -282,17 +302,20 @@
282
302
  navigateTo(leafId, 'bottom');
283
303
  }
284
304
 
285
- if (isEditableTarget(document.activeElement)) {
305
+ if (e.ctrlKey || e.metaKey || e.altKey || isEditableTarget(document.activeElement)) {
286
306
  return;
287
307
  }
288
308
 
289
309
  const key = e.key.toLowerCase();
290
310
  if (key === 't') {
291
311
  e.preventDefault();
292
- toggleThinking();
312
+ setThinkingExpanded(!thinkingExpanded);
293
313
  } else if (key === 'o') {
294
314
  e.preventDefault();
295
- toggleToolOutputs();
315
+ setToolOutputsExpanded(!toolOutputsExpanded);
316
+ } else if (key === 'h') {
317
+ e.preventDefault();
318
+ setHiddenMessagesVisible(!showHiddenMessages);
296
319
  }
297
320
  });
298
321
 
@@ -300,6 +300,12 @@
300
300
  border-color: var(--borderAccent);
301
301
  }
302
302
 
303
+ .header-toggle-btn[aria-pressed="true"] {
304
+ color: var(--accent);
305
+ border-color: var(--accent);
306
+ font-weight: bold;
307
+ }
308
+
303
309
  /* Header */
304
310
  .header {
305
311
  background: var(--container-bg);
@@ -786,6 +792,10 @@
786
792
  border-radius: 4px;
787
793
  }
788
794
 
795
+ body:not(.show-hidden-messages) .hook-message-hidden {
796
+ display: none;
797
+ }
798
+
789
799
  .hook-type {
790
800
  color: var(--customMessageLabel);
791
801
  font-weight: bold;
@@ -1322,9 +1322,10 @@
1322
1322
  </div>`;
1323
1323
  }
1324
1324
 
1325
- if (entry.type === 'custom_message' && entry.display) {
1326
- return `<div class="hook-message" id="${entryDomId}">${tsHtml}
1327
- <div class="hook-type">[${escapeHtml(entry.customType)}]</div>
1325
+ if (entry.type === 'custom_message') {
1326
+ const hidden = entry.display === false;
1327
+ return `<div class="hook-message${hidden ? ' hook-message-hidden' : ''}" id="${entryDomId}">${tsHtml}
1328
+ <div class="hook-type">[${escapeHtml(entry.customType)}]${hidden ? ' · Hidden in terminal' : ''}</div>
1328
1329
  <div class="markdown-content">${safeMarkedParse(typeof entry.content === 'string' ? entry.content : JSON.stringify(entry.content))}</div>
1329
1330
  </div>`;
1330
1331
  }
@@ -1400,10 +1401,11 @@
1400
1401
  <div class="header">
1401
1402
  <h1>Session: ${escapeHtml(header?.id || 'unknown')}</h1>
1402
1403
  <div class="help-bar">
1403
- <span class="help-hint">T toggle thinking · O toggle tools</span>
1404
+ <span class="help-hint">T toggle thinking · O toggle tools · H toggle hidden messages</span>
1404
1405
  <div class="help-actions">
1405
- <button type="button" class="header-toggle-btn" data-action="toggle-thinking" title="Toggle thinking (T)">Toggle thinking</button>
1406
- <button type="button" class="header-toggle-btn" data-action="toggle-tools" title="Toggle tools (O)">Toggle tools</button>
1406
+ <button type="button" class="header-toggle-btn" data-action="toggle-thinking" aria-pressed="${thinkingExpanded}" title="Toggle thinking (T)">Toggle thinking</button>
1407
+ <button type="button" class="header-toggle-btn" data-action="toggle-tools" aria-pressed="${toolOutputsExpanded}" title="Toggle tools (O)">Toggle tools</button>
1408
+ <button type="button" class="header-toggle-btn" data-action="toggle-hidden-messages" aria-pressed="${showHiddenMessages}" title="Show custom messages marked as hidden in the terminal (H).">${showHiddenMessages ? 'Hide hidden messages' : 'Show hidden messages'}</button>
1407
1409
  <button type="button" class="download-json-btn" onclick="downloadSessionJson()" title="Download session as JSONL">↓ JSONL</button>
1408
1410
  </div>
1409
1411
  </div>
@@ -1501,6 +1503,10 @@
1501
1503
  function navigateTo(targetId, scrollMode = 'target', scrollToEntryId = null) {
1502
1504
  currentLeafId = targetId;
1503
1505
  currentTargetId = scrollToEntryId || targetId;
1506
+ const targetEntry = byId.get(currentTargetId);
1507
+ if (scrollMode === 'target' && targetEntry?.type === 'custom_message' && targetEntry.display === false) {
1508
+ setHiddenMessagesVisible(true);
1509
+ }
1504
1510
  const path = getPath(targetId);
1505
1511
 
1506
1512
  renderTree();
@@ -1522,6 +1528,10 @@
1522
1528
  messagesEl.innerHTML = '';
1523
1529
  messagesEl.appendChild(fragment);
1524
1530
 
1531
+ // Cached nodes contain their initial presentation; reapply the viewer's toggle states.
1532
+ setThinkingExpanded(thinkingExpanded);
1533
+ setToolOutputsExpanded(toolOutputsExpanded);
1534
+
1525
1535
  // Attach click handlers for copy-link buttons
1526
1536
  messagesEl.querySelectorAll('.copy-link-btn').forEach(btn => {
1527
1537
  btn.addEventListener('click', (e) => {
@@ -1791,19 +1801,32 @@
1791
1801
  // Toggle states
1792
1802
  let thinkingExpanded = true;
1793
1803
  let toolOutputsExpanded = false;
1804
+ let showHiddenMessages = false;
1805
+
1806
+ function setHiddenMessagesVisible(visible) {
1807
+ showHiddenMessages = visible;
1808
+ document.body.classList.toggle('show-hidden-messages', visible);
1809
+ const button = document.querySelector('[data-action="toggle-hidden-messages"]');
1810
+ if (button) {
1811
+ button.setAttribute('aria-pressed', String(visible));
1812
+ button.textContent = visible ? 'Hide hidden messages' : 'Show hidden messages';
1813
+ }
1814
+ }
1794
1815
 
1795
- const toggleThinking = () => {
1796
- thinkingExpanded = !thinkingExpanded;
1816
+ function setThinkingExpanded(expanded) {
1817
+ thinkingExpanded = expanded;
1818
+ document.querySelector('[data-action="toggle-thinking"]')?.setAttribute('aria-pressed', String(expanded));
1797
1819
  document.querySelectorAll('.thinking-text').forEach(el => {
1798
1820
  el.style.display = thinkingExpanded ? '' : 'none';
1799
1821
  });
1800
1822
  document.querySelectorAll('.thinking-collapsed').forEach(el => {
1801
1823
  el.style.display = thinkingExpanded ? 'none' : 'block';
1802
1824
  });
1803
- };
1825
+ }
1804
1826
 
1805
- const toggleToolOutputs = () => {
1806
- toolOutputsExpanded = !toolOutputsExpanded;
1827
+ function setToolOutputsExpanded(expanded) {
1828
+ toolOutputsExpanded = expanded;
1829
+ document.querySelector('[data-action="toggle-tools"]')?.setAttribute('aria-pressed', String(expanded));
1807
1830
  document.querySelectorAll('.tool-output.expandable').forEach(el => {
1808
1831
  el.classList.toggle('expanded', toolOutputsExpanded);
1809
1832
  });
@@ -1813,11 +1836,18 @@
1813
1836
  document.querySelectorAll('.skill-invocation').forEach(el => {
1814
1837
  el.classList.toggle('expanded', toolOutputsExpanded);
1815
1838
  });
1816
- };
1839
+ }
1817
1840
 
1818
1841
  const attachHeaderHandlers = () => {
1819
- document.querySelector('[data-action="toggle-thinking"]')?.addEventListener('click', toggleThinking);
1820
- document.querySelector('[data-action="toggle-tools"]')?.addEventListener('click', toggleToolOutputs);
1842
+ document.querySelector('[data-action="toggle-thinking"]')?.addEventListener('click', () => {
1843
+ setThinkingExpanded(!thinkingExpanded);
1844
+ });
1845
+ document.querySelector('[data-action="toggle-tools"]')?.addEventListener('click', () => {
1846
+ setToolOutputsExpanded(!toolOutputsExpanded);
1847
+ });
1848
+ document.querySelector('[data-action="toggle-hidden-messages"]')?.addEventListener('click', () => {
1849
+ setHiddenMessagesVisible(!showHiddenMessages);
1850
+ });
1821
1851
  };
1822
1852
 
1823
1853
  const isEditableTarget = (element) => {
@@ -1837,17 +1867,20 @@
1837
1867
  navigateTo(leafId, 'bottom');
1838
1868
  }
1839
1869
 
1840
- if (isEditableTarget(document.activeElement)) {
1870
+ if (e.ctrlKey || e.metaKey || e.altKey || isEditableTarget(document.activeElement)) {
1841
1871
  return;
1842
1872
  }
1843
1873
 
1844
1874
  const key = e.key.toLowerCase();
1845
1875
  if (key === 't') {
1846
1876
  e.preventDefault();
1847
- toggleThinking();
1877
+ setThinkingExpanded(!thinkingExpanded);
1848
1878
  } else if (key === 'o') {
1849
1879
  e.preventDefault();
1850
- toggleToolOutputs();
1880
+ setToolOutputsExpanded(!toolOutputsExpanded);
1881
+ } else if (key === 'h') {
1882
+ e.preventDefault();
1883
+ setHiddenMessagesVisible(!showHiddenMessages);
1851
1884
  }
1852
1885
  });
1853
1886
 
@@ -211,6 +211,8 @@ export interface ExtensionContext {
211
211
  getSkillCatalog?(): SkillCatalog;
212
212
  /** Current routing-only inference setting from the owning session. Does not change the chat model. */
213
213
  getRouterModel(): string;
214
+ /** Provider filters for `model: "auto"` candidates from the owning session's settings. */
215
+ getModelRouting?(): import("../settings-types.ts").ModelRoutingSettings;
214
216
  }
215
217
  /**
216
218
  * Extended context for command handlers.
@@ -1 +1 @@
1
- {"version":3,"file":"context-types.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/context-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-types.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/context-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"context-types.js","sourceRoot":"","sources":["../../../src/core/extensions/context-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Api, ImageContent, Model, TextContent } from \"@bastani/pi-ai/compat\";\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { VerbatimCompactionResult } from \"../compaction/index.ts\";\nimport type { CustomMessage } from \"../messages.ts\";\nimport type { ModelRegistry } from \"../model-registry.ts\";\nimport type { ScopedModel } from \"../model-resolver.ts\";\nimport type { ReadonlySessionManager, SessionManager } from \"../session-manager.ts\";\nimport type { SkillCatalog } from \"../skill-catalog.ts\";\nimport type { BuildSystemPromptOptions } from \"../system-prompt.ts\";\nimport type { WorkflowStageAdmissionBoundary } from \"../workflow-stage-admission.ts\";\nimport type { SendMessageOptions, SendMessagesOptions } from \"./message-types.ts\";\nimport type { ExtensionUIContext } from \"./ui-types.js\";\nimport type { WorkflowActivityObserver, WorkflowActivitySubscription } from \"./workflow-events.js\";\n\nexport interface ContextUsage {\n\t/** Estimated context tokens, or null if unknown (e.g. right after compaction, before next LLM response). */\n\ttokens: number | null;\n\tcontextWindow: number;\n\t/** Context usage as percentage of context window, or null if tokens is unknown. */\n\tpercent: number | null;\n}\n\nexport interface CompactOptions {\n\t/** Fraction of compactable context to keep. 0.3 is aggressive, 0.7 is light. */\n\tcompression_ratio?: number;\n\t/** Number of recent context-eligible messages to keep uncompressed. */\n\tpreserve_recent?: number;\n\t/** Focus query for relevance-based pruning. Defaults to auto-detected session context. */\n\tquery?: string;\n\tonComplete?: (result: VerbatimCompactionResult) => void;\n\tonError?: (error: Error) => void;\n}\n\n/**\n * Late routes settle as delivery acknowledgements: resolution means the route\n * accepted delivery, while rejection means delivery was not fully accepted. A\n * sequential batch may have delivered a prefix before it rejects; stale-context\n * rejection identifies the dropped route, and other failures reject unchanged.\n */\nexport interface WorkflowStageLateMessageRouter {\n\trouteMessage<T>(\n\t\tmessage: Pick<CustomMessage<T>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t\toptions?: SendMessageOptions,\n\t): void | Promise<void>;\n\trouteMessages<T>(\n\t\tmessages: Array<Pick<CustomMessage<T>, \"customType\" | \"content\" | \"display\" | \"details\">>,\n\t\toptions?: SendMessagesOptions,\n\t): void | Promise<void>;\n}\n\nexport interface WorkflowStageMessageAdmission {\n\t/** Internal generation-owned boundary shared by every model-fallback session. */\n\treadonly boundary: WorkflowStageAdmissionBoundary;\n\t/** Internal extension state that must survive model-fallback session replacement. */\n\treadonly extensionState: Map<string, object>;\n\tisOpen(): boolean;\n}\n\nexport interface WorkflowPendingStageSender {\n\treadonly id: string;\n\treadonly name?: string;\n\treadonly cwd: string;\n\treadonly model: string;\n\treadonly pid: number;\n\treadonly startedAt: number;\n\treadonly lastActivity: number;\n\treadonly status?: string;\n\treadonly group?: string;\n}\n\nexport interface WorkflowPendingStageMessage {\n\treadonly id: string;\n\treadonly timestamp: number;\n\treadonly replyTo?: string;\n\treadonly expectsReply?: boolean;\n\treadonly replyError?: string;\n\treadonly content: {\n\t\treadonly text: string;\n\t\treadonly attachments?: readonly {\n\t\t\treadonly type: \"file\" | \"snippet\" | \"context\";\n\t\t\treadonly name: string;\n\t\t\treadonly content: string;\n\t\t\treadonly language?: string;\n\t\t}[];\n\t};\n}\n\nexport interface WorkflowPendingStageDelivery {\n\t/** Process-private authority proving this stage belongs to the workflow run route. */\n\treadonly routeCapability: string;\n\tdeliverPending(\n\t\tdeliver: (from: WorkflowPendingStageSender, message: WorkflowPendingStageMessage) => void | Promise<void>,\n\t): Promise<void>;\n\tready(): Promise<void> | undefined;\n\t/**\n\t * Terminal signal from a delivery owner that has run out of recovery: the\n\t * queued messages can no longer be drained, so the stage must fail at its own\n\t * lifecycle boundary rather than run without the instructions it was given.\n\t * Idempotent — the first reason wins, and `ready()` then settles with a\n\t * stage-scoped error instead of waiting for a delivery that will not come.\n\t *\n\t * Required, not optional: `ready()` has no timeout, so a delivery that cannot\n\t * be settled leaves its stage parked forever. Every implementer must be able\n\t * to answer that no delivery is coming.\n\t */\n\tfail(reason: Error): void;\n}\n\nexport interface WorkflowStageOrchestrationContext {\n\treadonly kind: \"workflow-stage\";\n\treadonly workflowRunId: string;\n\treadonly workflowStageId: string;\n\treadonly workflowStageName: string;\n\treadonly constraints: {\n\t\treadonly disableWorkflowTool: true;\n\t};\n\t/** Internal lifecycle seam for surfacing detached results after this stage closes. */\n\treadonly lateMessageRouter?: WorkflowStageLateMessageRouter;\n\t/** Internal synchronous boundary used before producer reply/turn side effects. */\n\treadonly messageAdmission?: WorkflowStageMessageAdmission;\n\t/**\n\t * Resolved per-session intercom home group for this stage. Concrete, already\n\t * normalized upstream. Read by the intercom extension (buildRegistration) and\n\t * inherited by subagents this stage spawns. Absent => no group override.\n\t */\n\treadonly intercomGroup?: string;\n\t/** Durable pre-start intercom delivery, drained by the intercom extension before the first turn. */\n\treadonly pendingStageDelivery?: WorkflowPendingStageDelivery;\n}\n/** Typed child intercom identity and supervisor capability issued at admission. */\nexport interface SubagentIntercomIdentity {\n\treadonly orchestratorTarget: string;\n\treadonly runId: string;\n\treadonly agent: string;\n\treadonly index: number;\n\treadonly sessionName?: string;\n\treadonly supervisor?: {\n\t\treadonly capability: string;\n\t\treadonly supervisorSessionId: string;\n\t};\n}\n\n/** Typed child capability policy supplied by an in-process subagent admission. */\nexport interface SubagentChildPolicy {\n\treadonly managementActions: \"full\" | \"restricted\";\n\treadonly fanoutAuthorized: boolean;\n\treadonly inheritProjectContext: boolean;\n\treadonly inheritSkills: boolean;\n\t/** Host-owned signal fired when this noninteractive execution ends, before disposal. */\n\treadonly executionEnded?: AbortSignal;\n\t/** SDK-owned inbound lifetime; closing drains admitted messages without reopening the task. */\n\treadonly messageAdmission?: {\n\t\tisOpen(): boolean;\n\t\t/** Reserve the full producer operation, including retries, before child settlement. */\n\t\trun(deliver: () => void | Promise<void>): Promise<void>;\n\t};\n\t/** Current admitted in-process nesting depth; absent for top-level sessions. */\n\treadonly depth?: number;\n\t/** Undefined preserves MCP configuration defaults; [] explicitly disables direct tools. */\n\treadonly mcpDirectTools?: readonly string[];\n\t/** Admission-issued identity/capability; never inherited through process environment. */\n\treadonly intercom?: SubagentIntercomIdentity;\n\t/** Resolved intercom group for this admitted child, when one was assigned. */\n\treadonly intercomGroup?: string;\n}\n// Union alias kept for forward-compatible orchestration context variants.\nexport type OrchestrationContext = WorkflowStageOrchestrationContext;\n\n/**\n * Context passed to extension event handlers.\n */\nexport type ExtensionMode = \"tui\" | \"rpc\" | \"json\" | \"print\";\n\nexport interface ExtensionContext {\n\t/** Observe the owning session's workflow activity, starting with an ordered snapshot. */\n\tobserveWorkflowActivity(observer: WorkflowActivityObserver): WorkflowActivitySubscription;\n\t/** Paths of actually loaded extensions, when supplied by the host. */\n\tgetExtensionPaths?(): string[];\n\t/** Internal actual-session binding; never populated from model arguments. */\n\tgetAgentTaskHost?(): import(\"../tasks/agent-adapter.js\").AgentTaskHost;\n\t/** Internal owner-bound defaults and capability ceiling for builtin child adapters. */\n\tgetChildSessionOptions?: import(\"../child-session-options.ts\").ChildSessionOptionsResolver;\n\t/** Session-scoped orchestration policy for child runtimes such as workflow stages. */\n\treadonly orchestrationContext?: OrchestrationContext;\n\t/** Typed capability policy for an in-process subagent child, when this session is one. */\n\treadonly subagentPolicy?: SubagentChildPolicy;\n\t/** UI methods for user interaction */\n\tui: ExtensionUIContext;\n\t/** Current run mode. Use \"tui\" to guard terminal-only UI such as custom components. */\n\tmode: ExtensionMode;\n\t/** Whether dialog-capable UI is available (true in TUI and RPC modes) */\n\thasUI: boolean;\n\t/** Whether a semantic human-input adapter is available, independently of rendering. */\n\thasHumanInput: boolean;\n\t/** Current working directory */\n\tcwd: string;\n\t/** Session manager (read-only) */\n\tsessionManager: ReadonlySessionManager;\n\t/** Model registry for API key resolution */\n\tmodelRegistry: ModelRegistry;\n\t/** Current model (may be undefined) */\n\tmodel: Model<Api> | undefined;\n\t/** Models scoped to this session (resolved from `--models` / `enabledModels`\n\t * settings against the available catalogue). Same set the `/scoped-models`\n\t * command shows. Empty when no scoping is configured (all available models\n\t * are usable). Read-only snapshot, resolved at access time. */\n\tscopedModels: readonly ScopedModel[];\n\t/** Current thinking level, resolved from the active session at access time. */\n\tthinkingLevel?: ThinkingLevel;\n\t/** Session-scoped internal resource router (e.g. artifact:// resolver). */\n\treadonly internalResourceRouter?: import(\"../tools/resource-selectors.ts\").InternalResourceRouter;\n\t/** Whether the agent is idle (not streaming) */\n\tisIdle(): boolean;\n\t/** Whether project-local trust is active for this context. */\n\tisProjectTrusted(): boolean;\n\t/** The current abort signal, or undefined when the agent is not streaming. */\n\tsignal: AbortSignal | undefined;\n\t/** Abort the current agent operation */\n\tabort(): void;\n\t/** Whether there are queued messages waiting */\n\thasPendingMessages(): boolean;\n\t/** Gracefully shutdown pi and exit. Available in all contexts. */\n\tshutdown(): void;\n\t/** Get current context usage for the active model. */\n\tgetContextUsage(): ContextUsage | undefined;\n\t/** Trigger compaction without awaiting completion. */\n\tcompact(options?: CompactOptions): void;\n\t/** Get the current effective system prompt. */\n\tgetSystemPrompt(): string;\n\t/** Current loader-owned skill candidates and exact selector resolver. */\n\tgetSkillCatalog?(): SkillCatalog;\n\t/** Current routing-only inference setting from the owning session. Does not change the chat model. */\n\tgetRouterModel(): string;\n}\n\n/**\n * Extended context for command handlers.\n * Includes session control methods only safe in user-initiated commands.\n */\nexport interface ExtensionCommandContext extends ExtensionContext {\n\t/** Get the current base system-prompt construction options. */\n\tgetSystemPromptOptions(): BuildSystemPromptOptions;\n\n\t/** Wait for the agent to finish streaming */\n\twaitForIdle(): Promise<void>;\n\n\t/** Start a new session, optionally with initialization. */\n\tnewSession(options?: {\n\t\tparentSession?: string;\n\t\tsetup?: (sessionManager: SessionManager) => Promise<void>;\n\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t}): Promise<{ cancelled: boolean }>;\n\n\t/** Fork from a specific entry, creating a new session file. */\n\tfork(\n\t\tentryId: string,\n\t\toptions?: { position?: \"before\" | \"at\"; withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean }>;\n\n\t/** Navigate to a different point in the session tree. */\n\tnavigateTree(\n\t\ttargetId: string,\n\t\toptions?: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string },\n\t): Promise<{ cancelled: boolean }>;\n\n\t/** Switch to a different session file. */\n\tswitchSession(\n\t\tsessionPath: string,\n\t\toptions?: { withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean }>;\n\n\t/** Reload extensions, skills, prompts, and themes. */\n\treload(): Promise<void>;\n}\n\n/**\n * Fresh command-capable context bound to the replacement session after a session switch.\n *\n * This is passed to `withSession()` callbacks on `newSession()`, `fork()`, and `switchSession()`.\n */\nexport interface ReplacedSessionContext extends ExtensionCommandContext {\n\tsendMessage<T = unknown>(\n\t\tmessage: Pick<CustomMessage<T>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t\toptions?: SendMessageOptions,\n\t): Promise<void>;\n\n\tsendUserMessage(\n\t\tcontent: string | (TextContent | ImageContent)[],\n\t\toptions?: { deliverAs?: \"steer\" | \"followUp\"; expandPromptTemplates?: boolean },\n\t): Promise<void>;\n}\n"]}
1
+ {"version":3,"file":"context-types.js","sourceRoot":"","sources":["../../../src/core/extensions/context-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Api, ImageContent, Model, TextContent } from \"@bastani/pi-ai/compat\";\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { VerbatimCompactionResult } from \"../compaction/index.ts\";\nimport type { CustomMessage } from \"../messages.ts\";\nimport type { ModelRegistry } from \"../model-registry.ts\";\nimport type { ScopedModel } from \"../model-resolver.ts\";\nimport type { ReadonlySessionManager, SessionManager } from \"../session-manager.ts\";\nimport type { SkillCatalog } from \"../skill-catalog.ts\";\nimport type { BuildSystemPromptOptions } from \"../system-prompt.ts\";\nimport type { WorkflowStageAdmissionBoundary } from \"../workflow-stage-admission.ts\";\nimport type { SendMessageOptions, SendMessagesOptions } from \"./message-types.ts\";\nimport type { ExtensionUIContext } from \"./ui-types.js\";\nimport type { WorkflowActivityObserver, WorkflowActivitySubscription } from \"./workflow-events.js\";\n\nexport interface ContextUsage {\n\t/** Estimated context tokens, or null if unknown (e.g. right after compaction, before next LLM response). */\n\ttokens: number | null;\n\tcontextWindow: number;\n\t/** Context usage as percentage of context window, or null if tokens is unknown. */\n\tpercent: number | null;\n}\n\nexport interface CompactOptions {\n\t/** Fraction of compactable context to keep. 0.3 is aggressive, 0.7 is light. */\n\tcompression_ratio?: number;\n\t/** Number of recent context-eligible messages to keep uncompressed. */\n\tpreserve_recent?: number;\n\t/** Focus query for relevance-based pruning. Defaults to auto-detected session context. */\n\tquery?: string;\n\tonComplete?: (result: VerbatimCompactionResult) => void;\n\tonError?: (error: Error) => void;\n}\n\n/**\n * Late routes settle as delivery acknowledgements: resolution means the route\n * accepted delivery, while rejection means delivery was not fully accepted. A\n * sequential batch may have delivered a prefix before it rejects; stale-context\n * rejection identifies the dropped route, and other failures reject unchanged.\n */\nexport interface WorkflowStageLateMessageRouter {\n\trouteMessage<T>(\n\t\tmessage: Pick<CustomMessage<T>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t\toptions?: SendMessageOptions,\n\t): void | Promise<void>;\n\trouteMessages<T>(\n\t\tmessages: Array<Pick<CustomMessage<T>, \"customType\" | \"content\" | \"display\" | \"details\">>,\n\t\toptions?: SendMessagesOptions,\n\t): void | Promise<void>;\n}\n\nexport interface WorkflowStageMessageAdmission {\n\t/** Internal generation-owned boundary shared by every model-fallback session. */\n\treadonly boundary: WorkflowStageAdmissionBoundary;\n\t/** Internal extension state that must survive model-fallback session replacement. */\n\treadonly extensionState: Map<string, object>;\n\tisOpen(): boolean;\n}\n\nexport interface WorkflowPendingStageSender {\n\treadonly id: string;\n\treadonly name?: string;\n\treadonly cwd: string;\n\treadonly model: string;\n\treadonly pid: number;\n\treadonly startedAt: number;\n\treadonly lastActivity: number;\n\treadonly status?: string;\n\treadonly group?: string;\n}\n\nexport interface WorkflowPendingStageMessage {\n\treadonly id: string;\n\treadonly timestamp: number;\n\treadonly replyTo?: string;\n\treadonly expectsReply?: boolean;\n\treadonly replyError?: string;\n\treadonly content: {\n\t\treadonly text: string;\n\t\treadonly attachments?: readonly {\n\t\t\treadonly type: \"file\" | \"snippet\" | \"context\";\n\t\t\treadonly name: string;\n\t\t\treadonly content: string;\n\t\t\treadonly language?: string;\n\t\t}[];\n\t};\n}\n\nexport interface WorkflowPendingStageDelivery {\n\t/** Process-private authority proving this stage belongs to the workflow run route. */\n\treadonly routeCapability: string;\n\tdeliverPending(\n\t\tdeliver: (from: WorkflowPendingStageSender, message: WorkflowPendingStageMessage) => void | Promise<void>,\n\t): Promise<void>;\n\tready(): Promise<void> | undefined;\n\t/**\n\t * Terminal signal from a delivery owner that has run out of recovery: the\n\t * queued messages can no longer be drained, so the stage must fail at its own\n\t * lifecycle boundary rather than run without the instructions it was given.\n\t * Idempotent — the first reason wins, and `ready()` then settles with a\n\t * stage-scoped error instead of waiting for a delivery that will not come.\n\t *\n\t * Required, not optional: `ready()` has no timeout, so a delivery that cannot\n\t * be settled leaves its stage parked forever. Every implementer must be able\n\t * to answer that no delivery is coming.\n\t */\n\tfail(reason: Error): void;\n}\n\nexport interface WorkflowStageOrchestrationContext {\n\treadonly kind: \"workflow-stage\";\n\treadonly workflowRunId: string;\n\treadonly workflowStageId: string;\n\treadonly workflowStageName: string;\n\treadonly constraints: {\n\t\treadonly disableWorkflowTool: true;\n\t};\n\t/** Internal lifecycle seam for surfacing detached results after this stage closes. */\n\treadonly lateMessageRouter?: WorkflowStageLateMessageRouter;\n\t/** Internal synchronous boundary used before producer reply/turn side effects. */\n\treadonly messageAdmission?: WorkflowStageMessageAdmission;\n\t/**\n\t * Resolved per-session intercom home group for this stage. Concrete, already\n\t * normalized upstream. Read by the intercom extension (buildRegistration) and\n\t * inherited by subagents this stage spawns. Absent => no group override.\n\t */\n\treadonly intercomGroup?: string;\n\t/** Durable pre-start intercom delivery, drained by the intercom extension before the first turn. */\n\treadonly pendingStageDelivery?: WorkflowPendingStageDelivery;\n}\n/** Typed child intercom identity and supervisor capability issued at admission. */\nexport interface SubagentIntercomIdentity {\n\treadonly orchestratorTarget: string;\n\treadonly runId: string;\n\treadonly agent: string;\n\treadonly index: number;\n\treadonly sessionName?: string;\n\treadonly supervisor?: {\n\t\treadonly capability: string;\n\t\treadonly supervisorSessionId: string;\n\t};\n}\n\n/** Typed child capability policy supplied by an in-process subagent admission. */\nexport interface SubagentChildPolicy {\n\treadonly managementActions: \"full\" | \"restricted\";\n\treadonly fanoutAuthorized: boolean;\n\treadonly inheritProjectContext: boolean;\n\treadonly inheritSkills: boolean;\n\t/** Host-owned signal fired when this noninteractive execution ends, before disposal. */\n\treadonly executionEnded?: AbortSignal;\n\t/** SDK-owned inbound lifetime; closing drains admitted messages without reopening the task. */\n\treadonly messageAdmission?: {\n\t\tisOpen(): boolean;\n\t\t/** Reserve the full producer operation, including retries, before child settlement. */\n\t\trun(deliver: () => void | Promise<void>): Promise<void>;\n\t};\n\t/** Current admitted in-process nesting depth; absent for top-level sessions. */\n\treadonly depth?: number;\n\t/** Undefined preserves MCP configuration defaults; [] explicitly disables direct tools. */\n\treadonly mcpDirectTools?: readonly string[];\n\t/** Admission-issued identity/capability; never inherited through process environment. */\n\treadonly intercom?: SubagentIntercomIdentity;\n\t/** Resolved intercom group for this admitted child, when one was assigned. */\n\treadonly intercomGroup?: string;\n}\n// Union alias kept for forward-compatible orchestration context variants.\nexport type OrchestrationContext = WorkflowStageOrchestrationContext;\n\n/**\n * Context passed to extension event handlers.\n */\nexport type ExtensionMode = \"tui\" | \"rpc\" | \"json\" | \"print\";\n\nexport interface ExtensionContext {\n\t/** Observe the owning session's workflow activity, starting with an ordered snapshot. */\n\tobserveWorkflowActivity(observer: WorkflowActivityObserver): WorkflowActivitySubscription;\n\t/** Paths of actually loaded extensions, when supplied by the host. */\n\tgetExtensionPaths?(): string[];\n\t/** Internal actual-session binding; never populated from model arguments. */\n\tgetAgentTaskHost?(): import(\"../tasks/agent-adapter.js\").AgentTaskHost;\n\t/** Internal owner-bound defaults and capability ceiling for builtin child adapters. */\n\tgetChildSessionOptions?: import(\"../child-session-options.ts\").ChildSessionOptionsResolver;\n\t/** Session-scoped orchestration policy for child runtimes such as workflow stages. */\n\treadonly orchestrationContext?: OrchestrationContext;\n\t/** Typed capability policy for an in-process subagent child, when this session is one. */\n\treadonly subagentPolicy?: SubagentChildPolicy;\n\t/** UI methods for user interaction */\n\tui: ExtensionUIContext;\n\t/** Current run mode. Use \"tui\" to guard terminal-only UI such as custom components. */\n\tmode: ExtensionMode;\n\t/** Whether dialog-capable UI is available (true in TUI and RPC modes) */\n\thasUI: boolean;\n\t/** Whether a semantic human-input adapter is available, independently of rendering. */\n\thasHumanInput: boolean;\n\t/** Current working directory */\n\tcwd: string;\n\t/** Session manager (read-only) */\n\tsessionManager: ReadonlySessionManager;\n\t/** Model registry for API key resolution */\n\tmodelRegistry: ModelRegistry;\n\t/** Current model (may be undefined) */\n\tmodel: Model<Api> | undefined;\n\t/** Models scoped to this session (resolved from `--models` / `enabledModels`\n\t * settings against the available catalogue). Same set the `/scoped-models`\n\t * command shows. Empty when no scoping is configured (all available models\n\t * are usable). Read-only snapshot, resolved at access time. */\n\tscopedModels: readonly ScopedModel[];\n\t/** Current thinking level, resolved from the active session at access time. */\n\tthinkingLevel?: ThinkingLevel;\n\t/** Session-scoped internal resource router (e.g. artifact:// resolver). */\n\treadonly internalResourceRouter?: import(\"../tools/resource-selectors.ts\").InternalResourceRouter;\n\t/** Whether the agent is idle (not streaming) */\n\tisIdle(): boolean;\n\t/** Whether project-local trust is active for this context. */\n\tisProjectTrusted(): boolean;\n\t/** The current abort signal, or undefined when the agent is not streaming. */\n\tsignal: AbortSignal | undefined;\n\t/** Abort the current agent operation */\n\tabort(): void;\n\t/** Whether there are queued messages waiting */\n\thasPendingMessages(): boolean;\n\t/** Gracefully shutdown pi and exit. Available in all contexts. */\n\tshutdown(): void;\n\t/** Get current context usage for the active model. */\n\tgetContextUsage(): ContextUsage | undefined;\n\t/** Trigger compaction without awaiting completion. */\n\tcompact(options?: CompactOptions): void;\n\t/** Get the current effective system prompt. */\n\tgetSystemPrompt(): string;\n\t/** Current loader-owned skill candidates and exact selector resolver. */\n\tgetSkillCatalog?(): SkillCatalog;\n\t/** Current routing-only inference setting from the owning session. Does not change the chat model. */\n\tgetRouterModel(): string;\n\t/** Provider filters for `model: \"auto\"` candidates from the owning session's settings. */\n\tgetModelRouting?(): import(\"../settings-types.ts\").ModelRoutingSettings;\n}\n\n/**\n * Extended context for command handlers.\n * Includes session control methods only safe in user-initiated commands.\n */\nexport interface ExtensionCommandContext extends ExtensionContext {\n\t/** Get the current base system-prompt construction options. */\n\tgetSystemPromptOptions(): BuildSystemPromptOptions;\n\n\t/** Wait for the agent to finish streaming */\n\twaitForIdle(): Promise<void>;\n\n\t/** Start a new session, optionally with initialization. */\n\tnewSession(options?: {\n\t\tparentSession?: string;\n\t\tsetup?: (sessionManager: SessionManager) => Promise<void>;\n\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t}): Promise<{ cancelled: boolean }>;\n\n\t/** Fork from a specific entry, creating a new session file. */\n\tfork(\n\t\tentryId: string,\n\t\toptions?: { position?: \"before\" | \"at\"; withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean }>;\n\n\t/** Navigate to a different point in the session tree. */\n\tnavigateTree(\n\t\ttargetId: string,\n\t\toptions?: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string },\n\t): Promise<{ cancelled: boolean }>;\n\n\t/** Switch to a different session file. */\n\tswitchSession(\n\t\tsessionPath: string,\n\t\toptions?: { withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean }>;\n\n\t/** Reload extensions, skills, prompts, and themes. */\n\treload(): Promise<void>;\n}\n\n/**\n * Fresh command-capable context bound to the replacement session after a session switch.\n *\n * This is passed to `withSession()` callbacks on `newSession()`, `fork()`, and `switchSession()`.\n */\nexport interface ReplacedSessionContext extends ExtensionCommandContext {\n\tsendMessage<T = unknown>(\n\t\tmessage: Pick<CustomMessage<T>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t\toptions?: SendMessageOptions,\n\t): Promise<void>;\n\n\tsendUserMessage(\n\t\tcontent: string | (TextContent | ImageContent)[],\n\t\toptions?: { deliverAs?: \"steer\" | \"followUp\"; expandPromptTemplates?: boolean },\n\t): Promise<void>;\n}\n"]}
@@ -16,11 +16,15 @@ export function copyHostQuestionnaire(source, target) {
16
16
  const WORKFLOW_INPUT = Symbol.for("atomic-coding-agent/workflow-input@1");
17
17
  /** One runner owns request settlement; host promises cannot revive a retired request. */
18
18
  export class HostInputBridge {
19
+ adapter;
20
+ configuredInput;
21
+ bindingRevision = 0;
22
+ closed = false;
23
+ pending = new Set();
24
+ bindingListeners = new Set();
25
+ sessionId;
26
+ signal;
19
27
  constructor(sessionId, signal) {
20
- this.bindingRevision = 0;
21
- this.closed = false;
22
- this.pending = new Set();
23
- this.bindingListeners = new Set();
24
28
  this.sessionId = sessionId;
25
29
  this.signal = signal;
26
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"host-input.js","sourceRoot":"","sources":["../../../src/core/extensions/host-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { QuestionnaireResult, QuestionParams } from \"../tools/ask-user-question/tool/types.js\";\nimport type { ExtensionUIContext, ExtensionUIDialogOptions } from \"./ui-types.js\";\n\nexport type {\n\tQuestionAnswer,\n\tQuestionnaireError,\n\tQuestionnaireResult,\n\tQuestionParams,\n} from \"../tools/ask-user-question/tool/types.js\";\n\nexport interface HostDiagnostic {\n\tlevel: \"info\" | \"warning\" | \"error\";\n\tsource: string;\n\tmessage: string;\n\tsessionId: string;\n}\n\nexport interface HostInputOptions {\n\tsignal: AbortSignal;\n\trequestId: string;\n\tsessionId: string;\n\tworkflowRunId?: string;\n\tworkflowStageId?: string;\n}\n\nexport interface HostInput {\n\tconfirm(title: string, message: string, options: HostInputOptions): Promise<boolean>;\n\tselect(title: string, choices: string[], options: HostInputOptions): Promise<string | undefined>;\n\tinput(title: string, placeholder: string | undefined, options: HostInputOptions): Promise<string | undefined>;\n\teditor(title: string, initial: string | undefined, options: HostInputOptions): Promise<string | undefined>;\n\tquestionnaire(params: QuestionParams, options: HostInputOptions): Promise<QuestionnaireResult>;\n}\n\nexport function hostInputError(\n\tcode: \"HumanInputUnavailable\" | \"HumanInputCancelled\" | \"InvalidHostInput\" | \"SessionClosed\",\n): Error & { code: string } {\n\treturn Object.assign(new Error(code), { code });\n}\n\ntype QuestionnairePresentation = (signal: AbortSignal) => Promise<QuestionnaireResult>;\nconst questionnaires = new WeakMap<\n\tExtensionUIContext,\n\t(params: QuestionParams, signal?: AbortSignal, present?: QuestionnairePresentation) => Promise<QuestionnaireResult>\n>();\nexport function getHostQuestionnaire(ui: ExtensionUIContext) {\n\treturn questionnaires.get(ui);\n}\nexport function copyHostQuestionnaire(source: ExtensionUIContext, target: ExtensionUIContext): void {\n\tconst questionnaire = questionnaires.get(source);\n\tif (questionnaire) questionnaires.set(target, questionnaire);\n}\n\n// Private runner/builtin seam. Symbol identity survives the separately bundled\n// workflow extension; no request minting or host adapter is exposed publicly.\nconst WORKFLOW_INPUT = Symbol.for(\"atomic-coding-agent/workflow-input@1\");\ntype WorkflowIdentity = Pick<HostInputOptions, \"workflowRunId\" | \"workflowStageId\"> & { sessionId?: string };\n/** One runner owns request settlement; host promises cannot revive a retired request. */\nexport class HostInputBridge {\n\tprivate adapter: HostInput | undefined;\n\tprivate configuredInput: HostInput | null | undefined;\n\tprivate bindingRevision = 0;\n\tprivate closed = false;\n\tprivate readonly pending = new Set<AbortController>();\n\tprivate readonly bindingListeners = new Set<() => void>();\n\n\tprivate readonly sessionId: () => string;\n\tprivate readonly signal: () => AbortSignal | undefined;\n\tconstructor(sessionId: () => string, signal: () => AbortSignal | undefined) {\n\t\tthis.sessionId = sessionId;\n\t\tthis.signal = signal;\n\t}\n\n\tbind(adapter: HostInput | undefined, configuredInput?: HostInput | null, bindingRevision = 0): void {\n\t\tif (\n\t\t\tadapter !== undefined &&\n\t\t\t[\"confirm\", \"select\", \"input\", \"editor\", \"questionnaire\"].some(\n\t\t\t\t(key) => typeof adapter[key as keyof HostInput] !== \"function\",\n\t\t\t)\n\t\t) {\n\t\t\tthrow hostInputError(\"InvalidHostInput\");\n\t\t}\n\t\tconst bindingChanged = this.configuredInput !== configuredInput || this.bindingRevision !== bindingRevision;\n\t\tthis.bindingRevision = bindingRevision;\n\t\tthis.configuredInput = configuredInput;\n\t\tif (adapter === this.adapter && !bindingChanged) return;\n\t\tthis.cancel();\n\t\tthis.adapter = adapter;\n\t\tfor (const listener of this.bindingListeners) queueMicrotask(listener);\n\t}\n\n\tget available(): boolean {\n\t\treturn !this.closed && this.adapter !== undefined;\n\t}\n\n\tcancel(): void {\n\t\tfor (const request of this.pending) request.abort();\n\t}\n\n\tclose(): void {\n\t\tthis.closed = true;\n\t\tthis.cancel();\n\t\tfor (const listener of this.bindingListeners) queueMicrotask(listener);\n\t}\n\n\twrap(ui: ExtensionUIContext, presentationHost?: HostInput, scope: WorkflowIdentity = {}): ExtensionUIContext {\n\t\tconst wrapped: ExtensionUIContext = {\n\t\t\t...ui,\n\t\t\tconfirm: (title, message, options) =>\n\t\t\t\tthis.request(\n\t\t\t\t\t(host, identity) => host.confirm(title, message, identity),\n\t\t\t\t\t(value) => typeof value === \"boolean\",\n\t\t\t\t\t{ ...options, ...scope, sessionId: scope.sessionId },\n\t\t\t\t),\n\t\t\tselect: (title, choices, options) =>\n\t\t\t\tthis.request(\n\t\t\t\t\t(host, identity) => host.select(title, choices, identity),\n\t\t\t\t\t(value) => value === undefined || (typeof value === \"string\" && choices.includes(value)),\n\t\t\t\t\t{ ...options, ...scope, sessionId: scope.sessionId },\n\t\t\t\t),\n\t\t\tinput: (title, placeholder, options) =>\n\t\t\t\tthis.request((host, identity) => host.input(title, placeholder, identity), validText, {\n\t\t\t\t\t...options,\n\t\t\t\t\t...scope,\n\t\t\t\t\tsessionId: scope.sessionId,\n\t\t\t\t}),\n\t\t\teditor: (title, initial, options) =>\n\t\t\t\tthis.request((host, identity) => host.editor(title, initial, identity), validText, {\n\t\t\t\t\t...options,\n\t\t\t\t\t...scope,\n\t\t\t\t\tsessionId: scope.sessionId,\n\t\t\t\t}),\n\t\t};\n\t\tquestionnaires.set(wrapped, (params, signal, present) =>\n\t\t\tthis.request(\n\t\t\t\t(host, identity) =>\n\t\t\t\t\thost === presentationHost && present ? present(identity.signal) : host.questionnaire(params, identity),\n\t\t\t\t(value) => validQuestionnaire(value, params),\n\t\t\t\t{ signal, ...scope },\n\t\t\t),\n\t\t);\n\t\tObject.assign(wrapped, {\n\t\t\t[WORKFLOW_INPUT]: {\n\t\t\t\tactive: () => !this.closed,\n\t\t\t\tavailable: () => this.available,\n\t\t\t\tbindingRevision: () => this.bindingRevision,\n\t\t\t\tsubscribe: (listener: () => void) => {\n\t\t\t\t\tthis.bindingListeners.add(listener);\n\t\t\t\t\treturn () => this.bindingListeners.delete(listener);\n\t\t\t\t},\n\t\t\t\tscope: (workflowRunId: string, workflowStageId: string, sessionId?: string) => {\n\t\t\t\t\tconst scoped = this.wrap(ui, presentationHost, {\n\t\t\t\t\t\tworkflowRunId,\n\t\t\t\t\t\tworkflowStageId,\n\t\t\t\t\t\t...(sessionId === undefined ? {} : { sessionId }),\n\t\t\t\t\t});\n\t\t\t\t\treturn { ui: scoped, questionnaire: getHostQuestionnaire(scoped)! };\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t\treturn wrapped;\n\t}\n\n\tprivate request<T>(\n\t\tinvoke: (host: HostInput, identity: HostInputOptions) => Promise<T>,\n\t\tvalid: (value: T) => boolean,\n\t\toptions?: ExtensionUIDialogOptions & WorkflowIdentity,\n\t): Promise<T> {\n\t\tif (this.closed) return Promise.reject(hostInputError(\"SessionClosed\"));\n\t\tconst host = this.adapter;\n\t\tif (!host) return Promise.reject(hostInputError(\"HumanInputUnavailable\"));\n\t\tconst controller = new AbortController();\n\t\tconst signals = [options?.signal, this.signal()].filter((signal): signal is AbortSignal => signal !== undefined);\n\t\tconst abort = () => controller.abort();\n\t\tfor (const signal of signals) signal.addEventListener(\"abort\", abort, { once: true });\n\t\tthis.pending.add(controller);\n\t\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\t\tif (options?.timeout !== undefined) timer = setTimeout(abort, options.timeout);\n\t\tlet onAbort: (() => void) | undefined;\n\t\tconst cleanup = () => {\n\t\t\tif (timer !== undefined) clearTimeout(timer);\n\t\t\tfor (const signal of signals) signal.removeEventListener(\"abort\", abort);\n\t\t\tif (onAbort) controller.signal.removeEventListener(\"abort\", onAbort);\n\t\t\tthis.pending.delete(controller);\n\t\t};\n\t\tif (signals.some((signal) => signal.aborted)) {\n\t\t\tabort();\n\t\t\tcleanup();\n\t\t\treturn Promise.reject(hostInputError(\"HumanInputCancelled\"));\n\t\t}\n\t\tlet response: Promise<T>;\n\t\ttry {\n\t\t\tresponse = Promise.resolve(\n\t\t\t\tinvoke(host, {\n\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t\trequestId: randomUUID(),\n\t\t\t\t\tsessionId: options?.sessionId ?? this.sessionId(),\n\t\t\t\t\t...(options?.workflowRunId !== undefined ? { workflowRunId: options.workflowRunId } : {}),\n\t\t\t\t\t...(options?.workflowStageId !== undefined ? { workflowStageId: options.workflowStageId } : {}),\n\t\t\t\t}),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tcleanup();\n\t\t\tthrow error;\n\t\t}\n\t\tconst result = new Promise<T>((resolve, reject) => {\n\t\t\tonAbort = () => reject(hostInputError(\"HumanInputCancelled\"));\n\t\t\tcontroller.signal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\tif (controller.signal.aborted) onAbort();\n\t\t\tresponse.then((value) => {\n\t\t\t\tif (controller.signal.aborted) return;\n\t\t\t\ttry {\n\t\t\t\t\tif (!valid(value)) reject(hostInputError(\"InvalidHostInput\"));\n\t\t\t\t\telse resolve(value);\n\t\t\t\t} catch {\n\t\t\t\t\treject(hostInputError(\"InvalidHostInput\"));\n\t\t\t\t}\n\t\t\t}, reject);\n\t\t});\n\t\treturn result.finally(cleanup);\n\t}\n}\n\nfunction validText(value: string | undefined): boolean {\n\treturn value === undefined || typeof value === \"string\";\n}\n\nfunction validQuestionnaire(value: QuestionnaireResult, params: QuestionParams): boolean {\n\tif (!value || typeof value !== \"object\" || typeof value.cancelled !== \"boolean\" || !Array.isArray(value.answers))\n\t\treturn false;\n\tif (\n\t\tvalue.error !== undefined &&\n\t\t![\n\t\t\t\"no_ui\",\n\t\t\t\"no_questions\",\n\t\t\t\"empty_options\",\n\t\t\t\"too_many_questions\",\n\t\t\t\"duplicate_question\",\n\t\t\t\"duplicate_option_label\",\n\t\t\t\"reserved_label\",\n\t\t].includes(value.error)\n\t)\n\t\treturn false;\n\tconst seen = new Set<number>();\n\treturn Array.from(value.answers).every((answer) => {\n\t\tif (\n\t\t\t!answer ||\n\t\t\ttypeof answer !== \"object\" ||\n\t\t\t!Number.isInteger(answer.questionIndex) ||\n\t\t\tseen.has(answer.questionIndex)\n\t\t)\n\t\t\treturn false;\n\t\tseen.add(answer.questionIndex);\n\t\tconst question = params.questions[answer.questionIndex];\n\t\tif (!question || answer.question !== question.question) return false;\n\t\tif (answer.answer !== null && typeof answer.answer !== \"string\") return false;\n\t\tif (answer.notes !== undefined && typeof answer.notes !== \"string\") return false;\n\t\tif (answer.preview !== undefined && typeof answer.preview !== \"string\") return false;\n\t\tif (\n\t\t\tanswer.selected !== undefined &&\n\t\t\t(!Array.isArray(answer.selected) ||\n\t\t\t\tArray.from(answer.selected).some(\n\t\t\t\t\t(label) => typeof label !== \"string\" || !question.options.some((option) => option.label === label),\n\t\t\t\t))\n\t\t)\n\t\t\treturn false;\n\t\tswitch (answer.kind) {\n\t\t\tcase \"option\":\n\t\t\t\treturn !question.multiSelect && question.options.some((option) => option.label === answer.answer);\n\t\t\tcase \"multi\":\n\t\t\t\treturn question.multiSelect === true && answer.answer === null && Array.isArray(answer.selected);\n\t\t\tcase \"custom\":\n\t\t\t\treturn !question.multiSelect && !question.options.some((option) => option.preview);\n\t\t\tcase \"chat\":\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t});\n}\n"]}
1
+ {"version":3,"file":"host-input.js","sourceRoot":"","sources":["../../../src/core/extensions/host-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { QuestionnaireResult, QuestionParams } from \"../tools/ask-user-question/tool/types.js\";\nimport type { ExtensionUIContext, ExtensionUIDialogOptions } from \"./ui-types.js\";\n\nexport type {\n\tQuestionAnswer,\n\tQuestionnaireError,\n\tQuestionnaireResult,\n\tQuestionParams,\n} from \"../tools/ask-user-question/tool/types.js\";\n\nexport interface HostDiagnostic {\n\tlevel: \"info\" | \"warning\" | \"error\";\n\tsource: string;\n\tmessage: string;\n\tsessionId: string;\n}\n\nexport interface HostInputOptions {\n\tsignal: AbortSignal;\n\trequestId: string;\n\tsessionId: string;\n\tworkflowRunId?: string;\n\tworkflowStageId?: string;\n}\n\nexport interface HostInput {\n\tconfirm(title: string, message: string, options: HostInputOptions): Promise<boolean>;\n\tselect(title: string, choices: string[], options: HostInputOptions): Promise<string | undefined>;\n\tinput(title: string, placeholder: string | undefined, options: HostInputOptions): Promise<string | undefined>;\n\teditor(title: string, initial: string | undefined, options: HostInputOptions): Promise<string | undefined>;\n\tquestionnaire(params: QuestionParams, options: HostInputOptions): Promise<QuestionnaireResult>;\n}\n\nexport function hostInputError(\n\tcode: \"HumanInputUnavailable\" | \"HumanInputCancelled\" | \"InvalidHostInput\" | \"SessionClosed\",\n): Error & { code: string } {\n\treturn Object.assign(new Error(code), { code });\n}\n\ntype QuestionnairePresentation = (signal: AbortSignal) => Promise<QuestionnaireResult>;\nconst questionnaires = new WeakMap<\n\tExtensionUIContext,\n\t(params: QuestionParams, signal?: AbortSignal, present?: QuestionnairePresentation) => Promise<QuestionnaireResult>\n>();\nexport function getHostQuestionnaire(ui: ExtensionUIContext) {\n\treturn questionnaires.get(ui);\n}\nexport function copyHostQuestionnaire(source: ExtensionUIContext, target: ExtensionUIContext): void {\n\tconst questionnaire = questionnaires.get(source);\n\tif (questionnaire) questionnaires.set(target, questionnaire);\n}\n\n// Private runner/builtin seam. Symbol identity survives the separately bundled\n// workflow extension; no request minting or host adapter is exposed publicly.\nconst WORKFLOW_INPUT = Symbol.for(\"atomic-coding-agent/workflow-input@1\");\ntype WorkflowIdentity = Pick<HostInputOptions, \"workflowRunId\" | \"workflowStageId\"> & { sessionId?: string };\n/** One runner owns request settlement; host promises cannot revive a retired request. */\nexport class HostInputBridge {\n\tprivate adapter: HostInput | undefined;\n\tprivate configuredInput: HostInput | null | undefined;\n\tprivate bindingRevision = 0;\n\tprivate closed = false;\n\tprivate readonly pending = new Set<AbortController>();\n\tprivate readonly bindingListeners = new Set<() => void>();\n\n\tprivate readonly sessionId: () => string;\n\tprivate readonly signal: () => AbortSignal | undefined;\n\tconstructor(sessionId: () => string, signal: () => AbortSignal | undefined) {\n\t\tthis.sessionId = sessionId;\n\t\tthis.signal = signal;\n\t}\n\n\tbind(adapter: HostInput | undefined, configuredInput?: HostInput | null, bindingRevision = 0): void {\n\t\tif (\n\t\t\tadapter !== undefined &&\n\t\t\t[\"confirm\", \"select\", \"input\", \"editor\", \"questionnaire\"].some(\n\t\t\t\t(key) => typeof adapter[key as keyof HostInput] !== \"function\",\n\t\t\t)\n\t\t) {\n\t\t\tthrow hostInputError(\"InvalidHostInput\");\n\t\t}\n\t\tconst bindingChanged = this.configuredInput !== configuredInput || this.bindingRevision !== bindingRevision;\n\t\tthis.bindingRevision = bindingRevision;\n\t\tthis.configuredInput = configuredInput;\n\t\tif (adapter === this.adapter && !bindingChanged) return;\n\t\tthis.cancel();\n\t\tthis.adapter = adapter;\n\t\tfor (const listener of this.bindingListeners) queueMicrotask(listener);\n\t}\n\n\tget available(): boolean {\n\t\treturn !this.closed && this.adapter !== undefined;\n\t}\n\n\tcancel(): void {\n\t\tfor (const request of this.pending) request.abort();\n\t}\n\n\tclose(): void {\n\t\tthis.closed = true;\n\t\tthis.cancel();\n\t\tfor (const listener of this.bindingListeners) queueMicrotask(listener);\n\t}\n\n\twrap(ui: ExtensionUIContext, presentationHost?: HostInput, scope: WorkflowIdentity = {}): ExtensionUIContext {\n\t\tconst wrapped: ExtensionUIContext = {\n\t\t\t...ui,\n\t\t\tconfirm: (title, message, options) =>\n\t\t\t\tthis.request(\n\t\t\t\t\t(host, identity) => host.confirm(title, message, identity),\n\t\t\t\t\t(value) => typeof value === \"boolean\",\n\t\t\t\t\t{ ...options, ...scope, sessionId: scope.sessionId },\n\t\t\t\t),\n\t\t\tselect: (title, choices, options) =>\n\t\t\t\tthis.request(\n\t\t\t\t\t(host, identity) => host.select(title, choices, identity),\n\t\t\t\t\t(value) => value === undefined || (typeof value === \"string\" && choices.includes(value)),\n\t\t\t\t\t{ ...options, ...scope, sessionId: scope.sessionId },\n\t\t\t\t),\n\t\t\tinput: (title, placeholder, options) =>\n\t\t\t\tthis.request((host, identity) => host.input(title, placeholder, identity), validText, {\n\t\t\t\t\t...options,\n\t\t\t\t\t...scope,\n\t\t\t\t\tsessionId: scope.sessionId,\n\t\t\t\t}),\n\t\t\teditor: (title, initial, options) =>\n\t\t\t\tthis.request((host, identity) => host.editor(title, initial, identity), validText, {\n\t\t\t\t\t...options,\n\t\t\t\t\t...scope,\n\t\t\t\t\tsessionId: scope.sessionId,\n\t\t\t\t}),\n\t\t};\n\t\tquestionnaires.set(wrapped, (params, signal, present) =>\n\t\t\tthis.request(\n\t\t\t\t(host, identity) =>\n\t\t\t\t\thost === presentationHost && present ? present(identity.signal) : host.questionnaire(params, identity),\n\t\t\t\t(value) => validQuestionnaire(value, params),\n\t\t\t\t{ signal, ...scope },\n\t\t\t),\n\t\t);\n\t\tObject.assign(wrapped, {\n\t\t\t[WORKFLOW_INPUT]: {\n\t\t\t\tactive: () => !this.closed,\n\t\t\t\tavailable: () => this.available,\n\t\t\t\tbindingRevision: () => this.bindingRevision,\n\t\t\t\tsubscribe: (listener: () => void) => {\n\t\t\t\t\tthis.bindingListeners.add(listener);\n\t\t\t\t\treturn () => this.bindingListeners.delete(listener);\n\t\t\t\t},\n\t\t\t\tscope: (workflowRunId: string, workflowStageId: string, sessionId?: string) => {\n\t\t\t\t\tconst scoped = this.wrap(ui, presentationHost, {\n\t\t\t\t\t\tworkflowRunId,\n\t\t\t\t\t\tworkflowStageId,\n\t\t\t\t\t\t...(sessionId === undefined ? {} : { sessionId }),\n\t\t\t\t\t});\n\t\t\t\t\treturn { ui: scoped, questionnaire: getHostQuestionnaire(scoped)! };\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t\treturn wrapped;\n\t}\n\n\tprivate request<T>(\n\t\tinvoke: (host: HostInput, identity: HostInputOptions) => Promise<T>,\n\t\tvalid: (value: T) => boolean,\n\t\toptions?: ExtensionUIDialogOptions & WorkflowIdentity,\n\t): Promise<T> {\n\t\tif (this.closed) return Promise.reject(hostInputError(\"SessionClosed\"));\n\t\tconst host = this.adapter;\n\t\tif (!host) return Promise.reject(hostInputError(\"HumanInputUnavailable\"));\n\t\tconst controller = new AbortController();\n\t\tconst signals = [options?.signal, this.signal()].filter((signal): signal is AbortSignal => signal !== undefined);\n\t\tconst abort = () => controller.abort();\n\t\tfor (const signal of signals) signal.addEventListener(\"abort\", abort, { once: true });\n\t\tthis.pending.add(controller);\n\t\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\t\tif (options?.timeout !== undefined) timer = setTimeout(abort, options.timeout);\n\t\tlet onAbort: (() => void) | undefined;\n\t\tconst cleanup = () => {\n\t\t\tif (timer !== undefined) clearTimeout(timer);\n\t\t\tfor (const signal of signals) signal.removeEventListener(\"abort\", abort);\n\t\t\tif (onAbort) controller.signal.removeEventListener(\"abort\", onAbort);\n\t\t\tthis.pending.delete(controller);\n\t\t};\n\t\tif (signals.some((signal) => signal.aborted)) {\n\t\t\tabort();\n\t\t\tcleanup();\n\t\t\treturn Promise.reject(hostInputError(\"HumanInputCancelled\"));\n\t\t}\n\t\tlet response: Promise<T>;\n\t\ttry {\n\t\t\tresponse = Promise.resolve(\n\t\t\t\tinvoke(host, {\n\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t\trequestId: randomUUID(),\n\t\t\t\t\tsessionId: options?.sessionId ?? this.sessionId(),\n\t\t\t\t\t...(options?.workflowRunId !== undefined ? { workflowRunId: options.workflowRunId } : {}),\n\t\t\t\t\t...(options?.workflowStageId !== undefined ? { workflowStageId: options.workflowStageId } : {}),\n\t\t\t\t}),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tcleanup();\n\t\t\tthrow error;\n\t\t}\n\t\tconst result = new Promise<T>((resolve, reject) => {\n\t\t\tonAbort = () => reject(hostInputError(\"HumanInputCancelled\"));\n\t\t\tcontroller.signal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\tif (controller.signal.aborted) onAbort();\n\t\t\tresponse.then((value) => {\n\t\t\t\tif (controller.signal.aborted) return;\n\t\t\t\ttry {\n\t\t\t\t\tif (!valid(value)) reject(hostInputError(\"InvalidHostInput\"));\n\t\t\t\t\telse resolve(value);\n\t\t\t\t} catch {\n\t\t\t\t\treject(hostInputError(\"InvalidHostInput\"));\n\t\t\t\t}\n\t\t\t}, reject);\n\t\t});\n\t\treturn result.finally(cleanup);\n\t}\n}\n\nfunction validText(value: string | undefined): boolean {\n\treturn value === undefined || typeof value === \"string\";\n}\n\nfunction validQuestionnaire(value: QuestionnaireResult, params: QuestionParams): boolean {\n\tif (!value || typeof value !== \"object\" || typeof value.cancelled !== \"boolean\" || !Array.isArray(value.answers))\n\t\treturn false;\n\tif (\n\t\tvalue.error !== undefined &&\n\t\t![\n\t\t\t\"no_ui\",\n\t\t\t\"no_questions\",\n\t\t\t\"empty_options\",\n\t\t\t\"too_many_questions\",\n\t\t\t\"duplicate_question\",\n\t\t\t\"duplicate_option_label\",\n\t\t\t\"reserved_label\",\n\t\t].includes(value.error)\n\t)\n\t\treturn false;\n\tconst seen = new Set<number>();\n\treturn Array.from(value.answers).every((answer) => {\n\t\tif (\n\t\t\t!answer ||\n\t\t\ttypeof answer !== \"object\" ||\n\t\t\t!Number.isInteger(answer.questionIndex) ||\n\t\t\tseen.has(answer.questionIndex)\n\t\t)\n\t\t\treturn false;\n\t\tseen.add(answer.questionIndex);\n\t\tconst question = params.questions[answer.questionIndex];\n\t\tif (!question || answer.question !== question.question) return false;\n\t\tif (answer.answer !== null && typeof answer.answer !== \"string\") return false;\n\t\tif (answer.notes !== undefined && typeof answer.notes !== \"string\") return false;\n\t\tif (answer.preview !== undefined && typeof answer.preview !== \"string\") return false;\n\t\tif (\n\t\t\tanswer.selected !== undefined &&\n\t\t\t(!Array.isArray(answer.selected) ||\n\t\t\t\tArray.from(answer.selected).some(\n\t\t\t\t\t(label) => typeof label !== \"string\" || !question.options.some((option) => option.label === label),\n\t\t\t\t))\n\t\t)\n\t\t\treturn false;\n\t\tswitch (answer.kind) {\n\t\t\tcase \"option\":\n\t\t\t\treturn !question.multiSelect && question.options.some((option) => option.label === answer.answer);\n\t\t\tcase \"multi\":\n\t\t\t\treturn question.multiSelect === true && answer.answer === null && Array.isArray(answer.selected);\n\t\t\tcase \"custom\":\n\t\t\t\treturn !question.multiSelect && !question.options.some((option) => option.preview);\n\t\t\tcase \"chat\":\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t});\n}\n"]}
@@ -6,6 +6,7 @@ const defaultScheduler = {
6
6
  queueMicrotask: (handler) => queueMicrotask(handler),
7
7
  };
8
8
  class ReactiveWidgetMountReporterError extends Error {
9
+ reporterError;
9
10
  constructor(reporterError) {
10
11
  super(reporterError.message);
11
12
  this.reporterError = reporterError;