@bastani/atomic 0.9.19-alpha.1 → 0.9.19-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (720) hide show
  1. package/CHANGELOG.md +108 -0
  2. package/dist/builtin/intercom/CHANGELOG.md +23 -0
  3. package/dist/builtin/intercom/README.md +21 -11
  4. package/dist/builtin/intercom/broker/broker.ts +81 -9
  5. package/dist/builtin/intercom/broker/client.ts +22 -0
  6. package/dist/builtin/intercom/broker/framing.ts +5 -2
  7. package/dist/builtin/intercom/broker/group-membership.ts +4 -2
  8. package/dist/builtin/intercom/broker/presence-handler.ts +14 -0
  9. package/dist/builtin/intercom/broker/send-handler.ts +43 -5
  10. package/dist/builtin/intercom/broker/terminal-questions.ts +29 -0
  11. package/dist/builtin/intercom/index.bundle.mjs +978 -742
  12. package/dist/builtin/intercom/package.json +2 -2
  13. package/dist/builtin/intercom/recipient-purpose.ts +9 -0
  14. package/dist/builtin/intercom/recoverable-disconnect.ts +2 -3
  15. package/dist/builtin/intercom/retry-policy.ts +4 -2
  16. package/dist/builtin/intercom/skills/intercom/SKILL.md +5 -4
  17. package/dist/builtin/intercom/types.ts +18 -3
  18. package/dist/builtin/mcp/CHANGELOG.md +6 -0
  19. package/dist/builtin/mcp/README.md +2 -0
  20. package/dist/builtin/mcp/index.bundle.mjs +2201 -12000
  21. package/dist/builtin/mcp/package.json +2 -2
  22. package/dist/builtin/subagents/CHANGELOG.md +33 -0
  23. package/dist/builtin/subagents/README.md +35 -14
  24. package/dist/builtin/subagents/agents/code-simplifier.md +1 -1
  25. package/dist/builtin/subagents/agents/codebase-analyzer.md +1 -1
  26. package/dist/builtin/subagents/agents/codebase-locator.md +2 -2
  27. package/dist/builtin/subagents/agents/codebase-online-researcher.md +1 -1
  28. package/dist/builtin/subagents/agents/codebase-pattern-finder.md +2 -2
  29. package/dist/builtin/subagents/agents/codebase-research-analyzer.md +1 -1
  30. package/dist/builtin/subagents/agents/codebase-research-locator.md +2 -2
  31. package/dist/builtin/subagents/agents/debugger.md +1 -1
  32. package/dist/builtin/subagents/agents/worker.md +1 -1
  33. package/dist/builtin/subagents/package.json +2 -2
  34. package/dist/builtin/subagents/skills/herdr/LICENSE +201 -0
  35. package/dist/builtin/subagents/skills/herdr/SKILL.md +202 -0
  36. package/dist/builtin/subagents/skills/subagent/SKILL.md +14 -10
  37. package/dist/builtin/subagents/skills/tmux/SKILL.md +1 -1
  38. package/dist/builtin/subagents/src/extension/index.bundle.mjs +1286 -611
  39. package/dist/builtin/web-access/index.bundle.mjs +26280 -26274
  40. package/dist/builtin/web-access/package.json +2 -2
  41. package/dist/builtin/workflows/CHANGELOG.md +51 -0
  42. package/dist/builtin/workflows/README.md +1 -1
  43. package/dist/builtin/workflows/builtin/adversarial-verification.js +5 -7
  44. package/dist/builtin/workflows/builtin/{chunk-reqr3sr3.js → chunk-1kx4aggw.js} +22 -22
  45. package/dist/builtin/workflows/builtin/{chunk-42s7sw0b.js → chunk-62v3gg9f.js} +9 -9
  46. package/dist/builtin/workflows/builtin/{chunk-wgccch41.js → chunk-6w6cvk6b.js} +16 -16
  47. package/dist/builtin/workflows/builtin/{chunk-zbekjqew.js → chunk-a2kdsqn8.js} +4 -4
  48. package/dist/builtin/workflows/builtin/{chunk-ze5x3d1r.js → chunk-fg9esgkj.js} +7 -7
  49. package/dist/builtin/workflows/builtin/{chunk-n8h4yyew.js → chunk-g0csgs7w.js} +11 -11
  50. package/dist/builtin/workflows/builtin/{chunk-79fjkcvh.js → chunk-hbnwv56f.js} +17 -17
  51. package/dist/builtin/workflows/builtin/{chunk-ed4jfn5t.js → chunk-mygmtz6e.js} +43 -43
  52. package/dist/builtin/workflows/builtin/{chunk-7430zyas.js → chunk-p8jjwfg6.js} +1 -1
  53. package/dist/builtin/workflows/builtin/{chunk-hqpe2cyx.js → chunk-r9qq7xfj.js} +49 -49
  54. package/dist/builtin/workflows/builtin/{chunk-k3w87x8y.js → chunk-t6x2d78s.js} +10 -10
  55. package/dist/builtin/workflows/builtin/{chunk-6fqs7c01.js → chunk-z0d03ktm.js} +1 -1
  56. package/dist/builtin/workflows/builtin/{chunk-b0v2xab1.js → chunk-zggjyg5z.js} +221 -23
  57. package/dist/builtin/workflows/builtin/classify-and-act.js +5 -6
  58. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.js +3 -4
  59. package/dist/builtin/workflows/builtin/generate-and-filter.js +5 -6
  60. package/dist/builtin/workflows/builtin/goal.js +7 -8
  61. package/dist/builtin/workflows/builtin/index.js +20 -22
  62. package/dist/builtin/workflows/builtin/loop-until-done.js +5 -6
  63. package/dist/builtin/workflows/builtin/open-claude-design.js +3 -3
  64. package/dist/builtin/workflows/builtin/ralph.js +7 -8
  65. package/dist/builtin/workflows/builtin/steering-context.js +3 -3
  66. package/dist/builtin/workflows/builtin/tournament.js +5 -7
  67. package/dist/builtin/workflows/package.json +2 -2
  68. package/dist/builtin/workflows/src/extension/index.bundle.mjs +26708 -25862
  69. package/dist/builtin/workflows/src/index.js +921 -477
  70. package/dist/cli/config-selector.js.map +1 -1
  71. package/dist/cli/startup-ui.d.ts +1 -1
  72. package/dist/cli/startup-ui.js.map +1 -1
  73. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  74. package/dist/core/agent-session-auto-compaction.js +5 -4
  75. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  76. package/dist/core/agent-session-bash.d.ts +1 -1
  77. package/dist/core/agent-session-bash.d.ts.map +1 -1
  78. package/dist/core/agent-session-bash.js +5 -1
  79. package/dist/core/agent-session-bash.js.map +1 -1
  80. package/dist/core/agent-session-compaction.d.ts +1 -1
  81. package/dist/core/agent-session-compaction.js.map +1 -1
  82. package/dist/core/agent-session-custom-message-commit.d.ts +1 -1
  83. package/dist/core/agent-session-custom-message-commit.js.map +1 -1
  84. package/dist/core/agent-session-delivery-forwarding.d.ts +1 -1
  85. package/dist/core/agent-session-delivery-forwarding.js.map +1 -1
  86. package/dist/core/agent-session-events.d.ts.map +1 -1
  87. package/dist/core/agent-session-events.js +5 -0
  88. package/dist/core/agent-session-events.js.map +1 -1
  89. package/dist/core/agent-session-export.d.ts +1 -1
  90. package/dist/core/agent-session-export.js.map +1 -1
  91. package/dist/core/agent-session-extension-bindings.d.ts +8 -1
  92. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  93. package/dist/core/agent-session-extension-bindings.js +45 -3
  94. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  95. package/dist/core/agent-session-message-queue.d.ts +1 -1
  96. package/dist/core/agent-session-message-queue.d.ts.map +1 -1
  97. package/dist/core/agent-session-message-queue.js +2 -2
  98. package/dist/core/agent-session-message-queue.js.map +1 -1
  99. package/dist/core/agent-session-methods.d.ts +17 -7
  100. package/dist/core/agent-session-methods.d.ts.map +1 -1
  101. package/dist/core/agent-session-methods.js.map +1 -1
  102. package/dist/core/agent-session-prompt.d.ts +2 -2
  103. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  104. package/dist/core/agent-session-prompt.js +22 -18
  105. package/dist/core/agent-session-prompt.js.map +1 -1
  106. package/dist/core/agent-session-runtime-auth.d.ts +1 -1
  107. package/dist/core/agent-session-runtime-auth.js.map +1 -1
  108. package/dist/core/agent-session-runtime.d.ts +13 -4
  109. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  110. package/dist/core/agent-session-runtime.js +27 -4
  111. package/dist/core/agent-session-runtime.js.map +1 -1
  112. package/dist/core/agent-session-services.d.ts +5 -1
  113. package/dist/core/agent-session-services.d.ts.map +1 -1
  114. package/dist/core/agent-session-services.js +44 -34
  115. package/dist/core/agent-session-services.js.map +1 -1
  116. package/dist/core/agent-session-state.d.ts +1 -1
  117. package/dist/core/agent-session-state.js.map +1 -1
  118. package/dist/core/agent-session-tasks.d.ts +14 -0
  119. package/dist/core/agent-session-tasks.d.ts.map +1 -0
  120. package/dist/core/agent-session-tasks.js +120 -0
  121. package/dist/core/agent-session-tasks.js.map +1 -0
  122. package/dist/core/agent-session-tool-registry.d.ts +1 -0
  123. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  124. package/dist/core/agent-session-tool-registry.js +30 -5
  125. package/dist/core/agent-session-tool-registry.js.map +1 -1
  126. package/dist/core/agent-session-tree.d.ts.map +1 -1
  127. package/dist/core/agent-session-tree.js +3 -0
  128. package/dist/core/agent-session-tree.js.map +1 -1
  129. package/dist/core/agent-session-types.d.ts +2 -2
  130. package/dist/core/agent-session-types.js.map +1 -1
  131. package/dist/core/agent-session.d.ts +4 -1
  132. package/dist/core/agent-session.d.ts.map +1 -1
  133. package/dist/core/agent-session.js +7 -1
  134. package/dist/core/agent-session.js.map +1 -1
  135. package/dist/core/bash-executor.d.ts +1 -1
  136. package/dist/core/bash-executor.js.map +1 -1
  137. package/dist/core/export-html/index.js.map +1 -1
  138. package/dist/core/export-html/tool-renderer.d.ts +1 -1
  139. package/dist/core/export-html/tool-renderer.js.map +1 -1
  140. package/dist/core/extension-session-state.js.map +1 -1
  141. package/dist/core/extensions/agent-events.d.ts +4 -4
  142. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  143. package/dist/core/extensions/agent-events.js.map +1 -1
  144. package/dist/core/extensions/api-types.d.ts +8 -2
  145. package/dist/core/extensions/api-types.d.ts.map +1 -1
  146. package/dist/core/extensions/api-types.js.map +1 -1
  147. package/dist/core/extensions/context-types.d.ts +9 -0
  148. package/dist/core/extensions/context-types.d.ts.map +1 -1
  149. package/dist/core/extensions/context-types.js.map +1 -1
  150. package/dist/core/extensions/event-results.d.ts +1 -1
  151. package/dist/core/extensions/event-results.js.map +1 -1
  152. package/dist/core/extensions/event-types.d.ts +2 -1
  153. package/dist/core/extensions/event-types.d.ts.map +1 -1
  154. package/dist/core/extensions/event-types.js.map +1 -1
  155. package/dist/core/extensions/index.d.ts +2 -1
  156. package/dist/core/extensions/index.d.ts.map +1 -1
  157. package/dist/core/extensions/index.js.map +1 -1
  158. package/dist/core/extensions/loader-api.d.ts +1 -1
  159. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  160. package/dist/core/extensions/loader-api.js +10 -0
  161. package/dist/core/extensions/loader-api.js.map +1 -1
  162. package/dist/core/extensions/loader-core.d.ts +1 -1
  163. package/dist/core/extensions/loader-core.js.map +1 -1
  164. package/dist/core/extensions/loader-discovery.d.ts +1 -1
  165. package/dist/core/extensions/loader-discovery.js.map +1 -1
  166. package/dist/core/extensions/loader-host-modules.d.ts +1 -1
  167. package/dist/core/extensions/loader-host-modules.d.ts.map +1 -1
  168. package/dist/core/extensions/loader-host-modules.js +2 -1
  169. package/dist/core/extensions/loader-host-modules.js.map +1 -1
  170. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  171. package/dist/core/extensions/loader-runtime.js +3 -0
  172. package/dist/core/extensions/loader-runtime.js.map +1 -1
  173. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  174. package/dist/core/extensions/loader-virtual-modules.js +4 -1
  175. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  176. package/dist/core/extensions/loader.d.ts +1 -1
  177. package/dist/core/extensions/loader.js.map +1 -1
  178. package/dist/core/extensions/message-types.d.ts +1 -1
  179. package/dist/core/extensions/message-types.js.map +1 -1
  180. package/dist/core/extensions/runner-context.d.ts +11 -1
  181. package/dist/core/extensions/runner-context.d.ts.map +1 -1
  182. package/dist/core/extensions/runner-context.js +41 -2
  183. package/dist/core/extensions/runner-context.js.map +1 -1
  184. package/dist/core/extensions/runner-events.d.ts +1 -1
  185. package/dist/core/extensions/runner-events.d.ts.map +1 -1
  186. package/dist/core/extensions/runner-events.js +17 -2
  187. package/dist/core/extensions/runner-events.js.map +1 -1
  188. package/dist/core/extensions/runner-ui.js.map +1 -1
  189. package/dist/core/extensions/runner.d.ts +17 -2
  190. package/dist/core/extensions/runner.d.ts.map +1 -1
  191. package/dist/core/extensions/runner.js +68 -18
  192. package/dist/core/extensions/runner.js.map +1 -1
  193. package/dist/core/extensions/runtime-types.d.ts +4 -1
  194. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  195. package/dist/core/extensions/runtime-types.js.map +1 -1
  196. package/dist/core/extensions/tool-types.d.ts +1 -1
  197. package/dist/core/extensions/tool-types.js.map +1 -1
  198. package/dist/core/extensions/types.d.ts +1 -0
  199. package/dist/core/extensions/types.d.ts.map +1 -1
  200. package/dist/core/extensions/types.js.map +1 -1
  201. package/dist/core/extensions/ui-types.d.ts +5 -1
  202. package/dist/core/extensions/ui-types.d.ts.map +1 -1
  203. package/dist/core/extensions/ui-types.js.map +1 -1
  204. package/dist/core/extensions/workflow-activity-hub.d.ts +25 -0
  205. package/dist/core/extensions/workflow-activity-hub.d.ts.map +1 -0
  206. package/dist/core/extensions/workflow-activity-hub.js +183 -0
  207. package/dist/core/extensions/workflow-activity-hub.js.map +1 -0
  208. package/dist/core/extensions/workflow-events.d.ts +118 -0
  209. package/dist/core/extensions/workflow-events.d.ts.map +1 -0
  210. package/dist/core/extensions/workflow-events.js +2 -0
  211. package/dist/core/extensions/workflow-events.js.map +1 -0
  212. package/dist/core/footer-data-provider.d.ts +8 -4
  213. package/dist/core/footer-data-provider.d.ts.map +1 -1
  214. package/dist/core/footer-data-provider.js +97 -11
  215. package/dist/core/footer-data-provider.js.map +1 -1
  216. package/dist/core/index.d.ts +3 -3
  217. package/dist/core/index.js.map +1 -1
  218. package/dist/core/keybindings.d.ts +27 -2
  219. package/dist/core/keybindings.d.ts.map +1 -1
  220. package/dist/core/keybindings.js +7 -2
  221. package/dist/core/keybindings.js.map +1 -1
  222. package/dist/core/mandatory-runtime-tools.d.ts +1 -1
  223. package/dist/core/mandatory-runtime-tools.js.map +1 -1
  224. package/dist/core/model-fallback-failures.js +2 -2
  225. package/dist/core/model-fallback-failures.js.map +1 -1
  226. package/dist/core/model-registry.d.ts +5 -1
  227. package/dist/core/model-registry.d.ts.map +1 -1
  228. package/dist/core/model-registry.js +8 -0
  229. package/dist/core/model-registry.js.map +1 -1
  230. package/dist/core/model-resolver-defaults.js +1 -1
  231. package/dist/core/model-resolver-defaults.js.map +1 -1
  232. package/dist/core/resource-loader-assets.js.map +1 -1
  233. package/dist/core/resource-loader-core.d.ts +1 -1
  234. package/dist/core/resource-loader-core.js.map +1 -1
  235. package/dist/core/resource-loader-internals.d.ts +2 -2
  236. package/dist/core/resource-loader-internals.js.map +1 -1
  237. package/dist/core/resource-loader-reload.d.ts +2 -0
  238. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  239. package/dist/core/resource-loader-reload.js +231 -191
  240. package/dist/core/resource-loader-reload.js.map +1 -1
  241. package/dist/core/resource-loader-types.d.ts +4 -2
  242. package/dist/core/resource-loader-types.d.ts.map +1 -1
  243. package/dist/core/resource-loader-types.js.map +1 -1
  244. package/dist/core/retry-policy.d.ts +1 -0
  245. package/dist/core/retry-policy.d.ts.map +1 -1
  246. package/dist/core/retry-policy.js +2 -1
  247. package/dist/core/retry-policy.js.map +1 -1
  248. package/dist/core/sdk-exports.d.ts +2 -2
  249. package/dist/core/sdk-exports.js.map +1 -1
  250. package/dist/core/sdk-types.d.ts +2 -2
  251. package/dist/core/sdk-types.js.map +1 -1
  252. package/dist/core/sdk.js.map +1 -1
  253. package/dist/core/settings-manager-basic-accessors.d.ts +1 -0
  254. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  255. package/dist/core/settings-manager-basic-accessors.js +2 -0
  256. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  257. package/dist/core/settings-manager-core.d.ts.map +1 -1
  258. package/dist/core/settings-manager-core.js +10 -4
  259. package/dist/core/settings-manager-core.js.map +1 -1
  260. package/dist/core/settings-storage.d.ts +1 -0
  261. package/dist/core/settings-storage.d.ts.map +1 -1
  262. package/dist/core/settings-storage.js +18 -0
  263. package/dist/core/settings-storage.js.map +1 -1
  264. package/dist/core/settings-types.d.ts +12 -0
  265. package/dist/core/settings-types.d.ts.map +1 -1
  266. package/dist/core/settings-types.js.map +1 -1
  267. package/dist/core/slash-commands.d.ts.map +1 -1
  268. package/dist/core/slash-commands.js +2 -0
  269. package/dist/core/slash-commands.js.map +1 -1
  270. package/dist/core/system-prompt.d.ts.map +1 -1
  271. package/dist/core/system-prompt.js +5 -6
  272. package/dist/core/system-prompt.js.map +1 -1
  273. package/dist/core/tasks/agent-adapter.d.ts +41 -0
  274. package/dist/core/tasks/agent-adapter.d.ts.map +1 -0
  275. package/dist/core/tasks/agent-adapter.js +105 -0
  276. package/dist/core/tasks/agent-adapter.js.map +1 -0
  277. package/dist/core/tasks/command-output.d.ts +15 -0
  278. package/dist/core/tasks/command-output.d.ts.map +1 -0
  279. package/dist/core/tasks/command-output.js +29 -0
  280. package/dist/core/tasks/command-output.js.map +1 -0
  281. package/dist/core/tasks/completion-ordering.d.ts +11 -0
  282. package/dist/core/tasks/completion-ordering.d.ts.map +1 -0
  283. package/dist/core/tasks/completion-ordering.js +19 -0
  284. package/dist/core/tasks/completion-ordering.js.map +1 -0
  285. package/dist/core/tasks/completion.d.ts +36 -0
  286. package/dist/core/tasks/completion.d.ts.map +1 -0
  287. package/dist/core/tasks/completion.js +115 -0
  288. package/dist/core/tasks/completion.js.map +1 -0
  289. package/dist/core/tasks/contracts.d.ts +404 -0
  290. package/dist/core/tasks/contracts.d.ts.map +1 -0
  291. package/dist/core/tasks/contracts.js +2 -0
  292. package/dist/core/tasks/contracts.js.map +1 -0
  293. package/dist/core/tasks/execution-scope.d.ts +10 -0
  294. package/dist/core/tasks/execution-scope.d.ts.map +1 -0
  295. package/dist/core/tasks/execution-scope.js +27 -0
  296. package/dist/core/tasks/execution-scope.js.map +1 -0
  297. package/dist/core/tasks/owner-store.d.ts +53 -0
  298. package/dist/core/tasks/owner-store.d.ts.map +1 -0
  299. package/dist/core/tasks/owner-store.js +155 -0
  300. package/dist/core/tasks/owner-store.js.map +1 -0
  301. package/dist/core/tasks/pause.d.ts +4 -0
  302. package/dist/core/tasks/pause.d.ts.map +1 -0
  303. package/dist/core/tasks/pause.js +49 -0
  304. package/dist/core/tasks/pause.js.map +1 -0
  305. package/dist/core/tasks/supervisor.d.ts +123 -0
  306. package/dist/core/tasks/supervisor.d.ts.map +1 -0
  307. package/dist/core/tasks/supervisor.js +942 -0
  308. package/dist/core/tasks/supervisor.js.map +1 -0
  309. package/dist/core/tasks/transcript.d.ts +23 -0
  310. package/dist/core/tasks/transcript.d.ts.map +1 -0
  311. package/dist/core/tasks/transcript.js +74 -0
  312. package/dist/core/tasks/transcript.js.map +1 -0
  313. package/dist/core/tools/ask-user-question/ask-user-question.d.ts +2 -2
  314. package/dist/core/tools/ask-user-question/ask-user-question.d.ts.map +1 -1
  315. package/dist/core/tools/ask-user-question/ask-user-question.js +8 -4
  316. package/dist/core/tools/ask-user-question/ask-user-question.js.map +1 -1
  317. package/dist/core/tools/ask-user-question/state/build-questionnaire.d.ts +1 -1
  318. package/dist/core/tools/ask-user-question/state/build-questionnaire.js.map +1 -1
  319. package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts +1 -1
  320. package/dist/core/tools/ask-user-question/state/questionnaire-session.js.map +1 -1
  321. package/dist/core/tools/ask-user-question/view/components/multi-select-view.d.ts +1 -1
  322. package/dist/core/tools/ask-user-question/view/components/multi-select-view.js.map +1 -1
  323. package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.d.ts +1 -1
  324. package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.js.map +1 -1
  325. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.d.ts +1 -1
  326. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.js.map +1 -1
  327. package/dist/core/tools/ask-user-question/view/components/submit-picker.d.ts +1 -1
  328. package/dist/core/tools/ask-user-question/view/components/submit-picker.js.map +1 -1
  329. package/dist/core/tools/ask-user-question/view/components/tab-bar.d.ts +1 -1
  330. package/dist/core/tools/ask-user-question/view/components/tab-bar.js.map +1 -1
  331. package/dist/core/tools/ask-user-question/view/dialog-builder.d.ts +1 -1
  332. package/dist/core/tools/ask-user-question/view/dialog-builder.js.map +1 -1
  333. package/dist/core/tools/ask-user-question/view/tab-content-strategy.d.ts +1 -1
  334. package/dist/core/tools/ask-user-question/view/tab-content-strategy.js.map +1 -1
  335. package/dist/core/tools/bash-pty-native.d.ts +18 -3
  336. package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
  337. package/dist/core/tools/bash-pty-native.js +116 -1
  338. package/dist/core/tools/bash-pty-native.js.map +1 -1
  339. package/dist/core/tools/bash.d.ts +13 -4
  340. package/dist/core/tools/bash.d.ts.map +1 -1
  341. package/dist/core/tools/bash.js +53 -9
  342. package/dist/core/tools/bash.js.map +1 -1
  343. package/dist/core/tools/edit.d.ts.map +1 -1
  344. package/dist/core/tools/edit.js +1 -2
  345. package/dist/core/tools/edit.js.map +1 -1
  346. package/dist/core/tools/find.js.map +1 -1
  347. package/dist/core/tools/grep.js.map +1 -1
  348. package/dist/core/tools/index.d.ts +2 -2
  349. package/dist/core/tools/index.js.map +1 -1
  350. package/dist/core/tools/ls.js.map +1 -1
  351. package/dist/core/tools/powershell.d.ts +20 -10
  352. package/dist/core/tools/powershell.d.ts.map +1 -1
  353. package/dist/core/tools/powershell.js +33 -7
  354. package/dist/core/tools/powershell.js.map +1 -1
  355. package/dist/core/tools/read.d.ts.map +1 -1
  356. package/dist/core/tools/read.js +1 -2
  357. package/dist/core/tools/read.js.map +1 -1
  358. package/dist/core/tools/render-utils.d.ts +1 -1
  359. package/dist/core/tools/render-utils.js.map +1 -1
  360. package/dist/core/tools/resource-selectors.d.ts +1 -1
  361. package/dist/core/tools/resource-selectors.d.ts.map +1 -1
  362. package/dist/core/tools/resource-selectors.js +21 -10
  363. package/dist/core/tools/resource-selectors.js.map +1 -1
  364. package/dist/core/tools/search.js.map +1 -1
  365. package/dist/core/tools/todos-render.d.ts +1 -1
  366. package/dist/core/tools/todos-render.js.map +1 -1
  367. package/dist/core/tools/write.d.ts.map +1 -1
  368. package/dist/core/tools/write.js +1 -2
  369. package/dist/core/tools/write.js.map +1 -1
  370. package/dist/core/workflow-stage-admission.d.ts +10 -0
  371. package/dist/core/workflow-stage-admission.d.ts.map +1 -1
  372. package/dist/core/workflow-stage-admission.js +24 -0
  373. package/dist/core/workflow-stage-admission.js.map +1 -1
  374. package/dist/extensions/herdr/activity.d.ts +15 -0
  375. package/dist/extensions/herdr/activity.d.ts.map +1 -0
  376. package/dist/extensions/herdr/activity.js +24 -0
  377. package/dist/extensions/herdr/activity.js.map +1 -0
  378. package/dist/extensions/herdr/environment.d.ts +7 -0
  379. package/dist/extensions/herdr/environment.d.ts.map +1 -0
  380. package/dist/extensions/herdr/environment.js +6 -0
  381. package/dist/extensions/herdr/environment.js.map +1 -0
  382. package/dist/extensions/herdr/index.d.ts +9 -0
  383. package/dist/extensions/herdr/index.d.ts.map +1 -0
  384. package/dist/extensions/herdr/index.js +225 -0
  385. package/dist/extensions/herdr/index.js.map +1 -0
  386. package/dist/extensions/herdr/pane-owner.d.ts +30 -0
  387. package/dist/extensions/herdr/pane-owner.d.ts.map +1 -0
  388. package/dist/extensions/herdr/pane-owner.js +111 -0
  389. package/dist/extensions/herdr/pane-owner.js.map +1 -0
  390. package/dist/extensions/herdr/transport.d.ts +8 -0
  391. package/dist/extensions/herdr/transport.d.ts.map +1 -0
  392. package/dist/extensions/herdr/transport.js +28 -0
  393. package/dist/extensions/herdr/transport.js.map +1 -0
  394. package/dist/extensions/index.d.ts.map +1 -1
  395. package/dist/extensions/index.js +2 -0
  396. package/dist/extensions/index.js.map +1 -1
  397. package/dist/extensions/llama/huggingface-ui.d.ts +1 -1
  398. package/dist/extensions/llama/huggingface-ui.js.map +1 -1
  399. package/dist/extensions/llama/ui.js.map +1 -1
  400. package/dist/index-extensions.d.ts +3 -2
  401. package/dist/index-extensions.d.ts.map +1 -1
  402. package/dist/index-extensions.js.map +1 -1
  403. package/dist/index.d.ts +11 -3
  404. package/dist/index.d.ts.map +1 -1
  405. package/dist/index.js +8 -0
  406. package/dist/index.js.map +1 -1
  407. package/dist/main-session.js.map +1 -1
  408. package/dist/main.d.ts.map +1 -1
  409. package/dist/main.js +149 -69
  410. package/dist/main.js.map +1 -1
  411. package/dist/modes/interactive/components/armin.js.map +1 -1
  412. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  413. package/dist/modes/interactive/components/atomic-banner.d.ts +1 -1
  414. package/dist/modes/interactive/components/atomic-banner.js.map +1 -1
  415. package/dist/modes/interactive/components/atomic-working-status.js.map +1 -1
  416. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  417. package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
  418. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  419. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  420. package/dist/modes/interactive/components/chat-message-renderer.d.ts +12 -0
  421. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
  422. package/dist/modes/interactive/components/chat-message-renderer.js +44 -0
  423. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  424. package/dist/modes/interactive/components/chat-session-host-actions.d.ts +1 -1
  425. package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
  426. package/dist/modes/interactive/components/chat-session-host-actions.js +43 -8
  427. package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
  428. package/dist/modes/interactive/components/chat-session-host-editor.d.ts +1 -1
  429. package/dist/modes/interactive/components/chat-session-host-editor.js.map +1 -1
  430. package/dist/modes/interactive/components/chat-session-host-events.d.ts +2 -2
  431. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  432. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts +2 -2
  433. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
  434. package/dist/modes/interactive/components/chat-session-host-rendering.js +12 -3
  435. package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
  436. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts +4 -5
  437. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts.map +1 -1
  438. package/dist/modes/interactive/components/chat-session-host-runtime.js +8 -6
  439. package/dist/modes/interactive/components/chat-session-host-runtime.js.map +1 -1
  440. package/dist/modes/interactive/components/chat-session-host-state.d.ts +7 -2
  441. package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
  442. package/dist/modes/interactive/components/chat-session-host-state.js +1 -0
  443. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
  444. package/dist/modes/interactive/components/chat-session-host-terminal-cleanup.d.ts +1 -1
  445. package/dist/modes/interactive/components/chat-session-host-terminal-cleanup.js.map +1 -1
  446. package/dist/modes/interactive/components/chat-session-host-types.d.ts +8 -3
  447. package/dist/modes/interactive/components/chat-session-host-types.d.ts.map +1 -1
  448. package/dist/modes/interactive/components/chat-session-host-types.js.map +1 -1
  449. package/dist/modes/interactive/components/chat-session-host-utils.d.ts +1 -1
  450. package/dist/modes/interactive/components/chat-session-host-utils.d.ts.map +1 -1
  451. package/dist/modes/interactive/components/chat-session-host-utils.js +2 -0
  452. package/dist/modes/interactive/components/chat-session-host-utils.js.map +1 -1
  453. package/dist/modes/interactive/components/chat-session-host.d.ts +17 -2
  454. package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
  455. package/dist/modes/interactive/components/chat-session-host.js +100 -3
  456. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  457. package/dist/modes/interactive/components/chat-transcript.d.ts +1 -0
  458. package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
  459. package/dist/modes/interactive/components/chat-transcript.js +1 -1
  460. package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
  461. package/dist/modes/interactive/components/compaction-boundary-message.js.map +1 -1
  462. package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
  463. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  464. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  465. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  466. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  467. package/dist/modes/interactive/components/custom-message.js +12 -0
  468. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  469. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  470. package/dist/modes/interactive/components/diff.js.map +1 -1
  471. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  472. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  473. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  474. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  475. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  476. package/dist/modes/interactive/components/first-time-setup.d.ts +1 -1
  477. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  478. package/dist/modes/interactive/components/footer.d.ts +7 -6
  479. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  480. package/dist/modes/interactive/components/footer.js +27 -9
  481. package/dist/modes/interactive/components/footer.js.map +1 -1
  482. package/dist/modes/interactive/components/host-input-form-mount.js.map +1 -1
  483. package/dist/modes/interactive/components/host-input-form.d.ts +1 -1
  484. package/dist/modes/interactive/components/host-input-form.js.map +1 -1
  485. package/dist/modes/interactive/components/index.d.ts +2 -2
  486. package/dist/modes/interactive/components/index.js.map +1 -1
  487. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  488. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  489. package/dist/modes/interactive/components/mermaid.d.ts +1 -1
  490. package/dist/modes/interactive/components/mermaid.js.map +1 -1
  491. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  492. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  493. package/dist/modes/interactive/components/reserved-bottom-overlay.js.map +1 -1
  494. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  495. package/dist/modes/interactive/components/session-selector-header.js.map +1 -1
  496. package/dist/modes/interactive/components/session-selector-list.js.map +1 -1
  497. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  498. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  499. package/dist/modes/interactive/components/settings-selector-submenus.d.ts +1 -1
  500. package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
  501. package/dist/modes/interactive/components/settings-selector-types.d.ts +1 -1
  502. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  503. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  504. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  505. package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
  506. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  507. package/dist/modes/interactive/components/task-completion-message.d.ts +13 -0
  508. package/dist/modes/interactive/components/task-completion-message.d.ts.map +1 -0
  509. package/dist/modes/interactive/components/task-completion-message.js +65 -0
  510. package/dist/modes/interactive/components/task-completion-message.js.map +1 -0
  511. package/dist/modes/interactive/components/task-detail.d.ts +27 -0
  512. package/dist/modes/interactive/components/task-detail.d.ts.map +1 -0
  513. package/dist/modes/interactive/components/task-detail.js +107 -0
  514. package/dist/modes/interactive/components/task-detail.js.map +1 -0
  515. package/dist/modes/interactive/components/task-inspector.d.ts +50 -0
  516. package/dist/modes/interactive/components/task-inspector.d.ts.map +1 -0
  517. package/dist/modes/interactive/components/task-inspector.js +599 -0
  518. package/dist/modes/interactive/components/task-inspector.js.map +1 -0
  519. package/dist/modes/interactive/components/task-list.d.ts +18 -0
  520. package/dist/modes/interactive/components/task-list.d.ts.map +1 -0
  521. package/dist/modes/interactive/components/task-list.js +59 -0
  522. package/dist/modes/interactive/components/task-list.js.map +1 -0
  523. package/dist/modes/interactive/components/task-live-transcript.d.ts +17 -0
  524. package/dist/modes/interactive/components/task-live-transcript.d.ts.map +1 -0
  525. package/dist/modes/interactive/components/task-live-transcript.js +33 -0
  526. package/dist/modes/interactive/components/task-live-transcript.js.map +1 -0
  527. package/dist/modes/interactive/components/task-navigation.d.ts +38 -0
  528. package/dist/modes/interactive/components/task-navigation.d.ts.map +1 -0
  529. package/dist/modes/interactive/components/task-navigation.js +93 -0
  530. package/dist/modes/interactive/components/task-navigation.js.map +1 -0
  531. package/dist/modes/interactive/components/task-row.d.ts +34 -0
  532. package/dist/modes/interactive/components/task-row.d.ts.map +1 -0
  533. package/dist/modes/interactive/components/task-row.js +158 -0
  534. package/dist/modes/interactive/components/task-row.js.map +1 -0
  535. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  536. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  537. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  538. package/dist/modes/interactive/components/transcript-follow-indicator.js.map +1 -1
  539. package/dist/modes/interactive/components/tree-selector-component.js.map +1 -1
  540. package/dist/modes/interactive/components/tree-selector-content.js.map +1 -1
  541. package/dist/modes/interactive/components/tree-selector-help.js.map +1 -1
  542. package/dist/modes/interactive/components/tree-selector-label-input.js.map +1 -1
  543. package/dist/modes/interactive/components/tree-selector-list.js.map +1 -1
  544. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  545. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  546. package/dist/modes/interactive/components/user-message.js.map +1 -1
  547. package/dist/modes/interactive/components/working-status.js.map +1 -1
  548. package/dist/modes/interactive/interactive-agent-events.js +8 -2
  549. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  550. package/dist/modes/interactive/interactive-auth-login.js +3 -1
  551. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  552. package/dist/modes/interactive/interactive-autocomplete.js +9 -30
  553. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  554. package/dist/modes/interactive/interactive-deferred-startup.js +2 -1
  555. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  556. package/dist/modes/interactive/interactive-extension-context.js +14 -4
  557. package/dist/modes/interactive/interactive-extension-context.js.map +1 -1
  558. package/dist/modes/interactive/interactive-extension-custom-ui.js +52 -4
  559. package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
  560. package/dist/modes/interactive/interactive-extension-runtime.js +1 -0
  561. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  562. package/dist/modes/interactive/interactive-extension-widgets.js +9 -1
  563. package/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
  564. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  565. package/dist/modes/interactive/interactive-input-handling.js +19 -0
  566. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  567. package/dist/modes/interactive/interactive-mode-base.d.ts +6 -1
  568. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  569. package/dist/modes/interactive/interactive-mode-base.js +4 -1
  570. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  571. package/dist/modes/interactive/interactive-mode-deps.d.ts +6 -6
  572. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  573. package/dist/modes/interactive/interactive-mode-surface.d.ts +2 -1
  574. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  575. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  576. package/dist/modes/interactive/interactive-mode.d.ts +1 -0
  577. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  578. package/dist/modes/interactive/interactive-mode.js +3 -0
  579. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  580. package/dist/modes/interactive/interactive-process-lifecycle.js +4 -1
  581. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
  582. package/dist/modes/interactive/interactive-render-chat.js +2 -0
  583. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  584. package/dist/modes/interactive/interactive-session-routing.js +33 -23
  585. package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
  586. package/dist/modes/interactive/interactive-session-runtime.js +1 -0
  587. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  588. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  589. package/dist/modes/interactive/interactive-summarization-retry-events.js +2 -2
  590. package/dist/modes/interactive/interactive-summarization-retry-events.js.map +1 -1
  591. package/dist/modes/interactive/interactive-task-projection.d.ts +13 -0
  592. package/dist/modes/interactive/interactive-task-projection.d.ts.map +1 -0
  593. package/dist/modes/interactive/interactive-task-projection.js +72 -0
  594. package/dist/modes/interactive/interactive-task-projection.js.map +1 -0
  595. package/dist/modes/interactive/interactive-tui.js.map +1 -1
  596. package/dist/modes/interactive/interactive-windows-subshell.d.ts +17 -0
  597. package/dist/modes/interactive/interactive-windows-subshell.d.ts.map +1 -0
  598. package/dist/modes/interactive/interactive-windows-subshell.js +92 -0
  599. package/dist/modes/interactive/interactive-windows-subshell.js.map +1 -0
  600. package/dist/modes/interactive/skill-command-autocomplete.d.ts +12 -0
  601. package/dist/modes/interactive/skill-command-autocomplete.d.ts.map +1 -0
  602. package/dist/modes/interactive/skill-command-autocomplete.js +69 -0
  603. package/dist/modes/interactive/skill-command-autocomplete.js.map +1 -0
  604. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  605. package/dist/modes/interactive/theme/theme-class.js +4 -1
  606. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  607. package/dist/modes/interactive/theme/theme-controller.d.ts +1 -1
  608. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  609. package/dist/modes/interactive-engine/create-isolated-runtime.d.ts +1 -1
  610. package/dist/modes/interactive-engine/create-isolated-runtime.js.map +1 -1
  611. package/dist/modes/interactive-engine/engine-custom-ui.d.ts +5 -9
  612. package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
  613. package/dist/modes/interactive-engine/engine-custom-ui.js +14 -5
  614. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  615. package/dist/modes/interactive-engine/engine-dialog-host.d.ts +2 -2
  616. package/dist/modes/interactive-engine/engine-dialog-host.js.map +1 -1
  617. package/dist/modes/interactive-engine/engine-project-trust.d.ts +10 -0
  618. package/dist/modes/interactive-engine/engine-project-trust.d.ts.map +1 -0
  619. package/dist/modes/interactive-engine/engine-project-trust.js +28 -0
  620. package/dist/modes/interactive-engine/engine-project-trust.js.map +1 -0
  621. package/dist/modes/interactive-engine/engine-render-service.d.ts +1 -1
  622. package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
  623. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +3 -1
  624. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
  625. package/dist/modes/interactive-engine/extension-ui-bridge.js +6 -0
  626. package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
  627. package/dist/modes/interactive-engine/input-form-host.d.ts +2 -2
  628. package/dist/modes/interactive-engine/input-form-host.js.map +1 -1
  629. package/dist/modes/interactive-engine/isolated-auth.d.ts +1 -1
  630. package/dist/modes/interactive-engine/isolated-auth.js.map +1 -1
  631. package/dist/modes/interactive-engine/isolated-runtime.d.ts +5 -2
  632. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  633. package/dist/modes/interactive-engine/isolated-runtime.js +40 -3
  634. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  635. package/dist/modes/interactive-engine/protocol.d.ts +9 -0
  636. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  637. package/dist/modes/interactive-engine/protocol.js +8 -0
  638. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  639. package/dist/modes/interactive-engine/remote-component.d.ts +2 -2
  640. package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
  641. package/dist/modes/interactive-engine/remote-component.js +3 -2
  642. package/dist/modes/interactive-engine/remote-component.js.map +1 -1
  643. package/dist/modes/interactive-engine/remote-model-catalog.d.ts +1 -1
  644. package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
  645. package/dist/modes/interactive-engine/remote-renderer.d.ts +1 -1
  646. package/dist/modes/interactive-engine/remote-renderer.js.map +1 -1
  647. package/dist/modes/interactive-engine/session-picker-host.d.ts +2 -2
  648. package/dist/modes/interactive-engine/session-picker-host.js.map +1 -1
  649. package/dist/modes/json-event.d.ts +1 -1
  650. package/dist/modes/json-event.js.map +1 -1
  651. package/dist/modes/print-mode.js.map +1 -1
  652. package/dist/modes/rpc/rpc-bash-request-owners.d.ts +2 -2
  653. package/dist/modes/rpc/rpc-bash-request-owners.js.map +1 -1
  654. package/dist/modes/rpc/rpc-client-api.d.ts +2 -2
  655. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  656. package/dist/modes/rpc/rpc-client-api.js +2 -2
  657. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  658. package/dist/modes/rpc/rpc-client-waits.d.ts +1 -1
  659. package/dist/modes/rpc/rpc-client-waits.js.map +1 -1
  660. package/dist/modes/rpc/rpc-client.d.ts +3 -1
  661. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  662. package/dist/modes/rpc/rpc-client.js +20 -0
  663. package/dist/modes/rpc/rpc-client.js.map +1 -1
  664. package/dist/modes/rpc/rpc-command-handler.d.ts +4 -2
  665. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  666. package/dist/modes/rpc/rpc-command-handler.js +12 -4
  667. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  668. package/dist/modes/rpc/rpc-extension-ui.d.ts +1 -1
  669. package/dist/modes/rpc/rpc-extension-ui.js.map +1 -1
  670. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  671. package/dist/modes/rpc/rpc-mode.js +11 -2
  672. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  673. package/dist/modes/rpc/rpc-provider-auth.d.ts +1 -1
  674. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  675. package/dist/modes/rpc/rpc-session-binding.d.ts +4 -1
  676. package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
  677. package/dist/modes/rpc/rpc-session-binding.js +35 -1
  678. package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
  679. package/dist/modes/rpc/rpc-types.d.ts +13 -1
  680. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  681. package/dist/modes/rpc/rpc-types.js.map +1 -1
  682. package/dist/modes/rpc/task-ui-bridge.d.ts +9 -0
  683. package/dist/modes/rpc/task-ui-bridge.d.ts.map +1 -0
  684. package/dist/modes/rpc/task-ui-bridge.js +146 -0
  685. package/dist/modes/rpc/task-ui-bridge.js.map +1 -0
  686. package/dist/self-update-plan.js.map +1 -1
  687. package/docs/background-tasks.md +205 -0
  688. package/docs/compaction.md +2 -0
  689. package/docs/development.md +23 -72
  690. package/docs/docs.json +2 -0
  691. package/docs/environment-variables.md +1 -1
  692. package/docs/extensions.md +112 -6
  693. package/docs/herdr.md +53 -0
  694. package/docs/intercom.md +42 -35
  695. package/docs/keybindings.md +19 -2
  696. package/docs/models/evals.md +224 -147
  697. package/docs/models/model-selection.md +28 -19
  698. package/docs/models/pareto-efficiency.md +2 -2
  699. package/docs/providers.md +48 -46
  700. package/docs/quickstart.md +1 -1
  701. package/docs/sdk.md +244 -0
  702. package/docs/settings.md +19 -3
  703. package/docs/skills.md +23 -1
  704. package/docs/subagents.md +74 -10
  705. package/docs/themes.md +4 -0
  706. package/docs/tools.md +29 -0
  707. package/docs/tui.md +29 -2
  708. package/docs/usage.md +4 -0
  709. package/docs/windows.md +4 -4
  710. package/docs/workflows/api-reference.md +14 -5
  711. package/docs/workflows/operations.md +49 -3
  712. package/docs/workflows/reliable-design.md +35 -4
  713. package/docs/workflows/verification.md +21 -4
  714. package/docs/workflows.md +3 -1
  715. package/npm-shrinkwrap.json +797 -677
  716. package/package.json +10 -10
  717. /package/dist/builtin/workflows/builtin/{chunk-cg9tmks0.js → chunk-n1910xc4.js} +0 -0
  718. /package/dist/builtin/workflows/builtin/{chunk-wpckd35c.js → chunk-rc5ec5xx.js} +0 -0
  719. /package/dist/builtin/workflows/builtin/{chunk-7at6dnkr.js → chunk-tgt0s5e5.js} +0 -0
  720. /package/dist/builtin/workflows/builtin/{chunk-bfkmzv9h.js → chunk-xtxcq5tj.js} +0 -0
@@ -43,10 +43,12 @@ InteractiveModeBase.prototype.showExtensionCustom = async function (factory, opt
43
43
  let closed = false;
44
44
  let mounted = false;
45
45
  let overlayHandle;
46
+ let inlineMount;
46
47
  let releaseHostInlineCustomUi;
47
48
  let releaseOverlayInlineCustomUiFocusDeferral;
48
49
  let transcriptReserveCoordinator;
49
50
  let releaseTranscriptReserveRegistration;
51
+ let releaseOverlayFocusListener;
50
52
  const disposeComponent = () => {
51
53
  try {
52
54
  component?.dispose?.();
@@ -83,6 +85,9 @@ InteractiveModeBase.prototype.showExtensionCustom = async function (factory, opt
83
85
  if (!mounted)
84
86
  return;
85
87
  if (isOverlay) {
88
+ const ownedInput = overlayHandle?.isFocused();
89
+ releaseOverlayFocusListener?.();
90
+ releaseOverlayFocusListener = undefined;
86
91
  releaseOverlayInlineCustomUiFocusDeferral?.();
87
92
  releaseOverlayInlineCustomUiFocusDeferral = undefined;
88
93
  releaseTranscriptReserve();
@@ -93,9 +98,34 @@ InteractiveModeBase.prototype.showExtensionCustom = async function (factory, opt
93
98
  overlayHandle.hide();
94
99
  else
95
100
  this.ui.hideOverlay();
101
+ if (options?.reserveTranscriptRows && ownedInput && !this.ui.hasOverlay()) {
102
+ // Navigation may have closed while this prompt waited; its preFocus is stale.
103
+ this.ui.setFocus(this.editorContainer.children.at(-1) ?? this.editor);
104
+ }
96
105
  }
97
- else {
98
- restoreEditor(!this.shouldDeferInlineCustomUiFocus() && this.pendingInlineCustomUiFocus !== component);
106
+ else if (inlineMount) {
107
+ const stack = this.inlineCustomUiStack;
108
+ const ownsSlot = stack.at(-1) === inlineMount && this.editorContainer.children.includes(inlineMount.component);
109
+ stack.splice(stack.indexOf(inlineMount), 1);
110
+ // An older completion must not clear a newer prompt's editor slot.
111
+ if (!ownsSlot)
112
+ return;
113
+ const previous = stack.at(-1)?.component;
114
+ if (previous) {
115
+ this.editorContainer.clear();
116
+ this.editorContainer.addChild(previous);
117
+ if (this.shouldDeferInlineCustomUiFocus()) {
118
+ this.pendingInlineCustomUiFocus = previous;
119
+ this.notifyHostCustomUiStateListeners();
120
+ }
121
+ else if (!this.ui.hasOverlay()) {
122
+ this.ui.setFocus(previous);
123
+ }
124
+ this.ui.requestRender();
125
+ }
126
+ else {
127
+ restoreEditor(!this.shouldDeferInlineCustomUiFocus() && this.pendingInlineCustomUiFocus !== component);
128
+ }
99
129
  }
100
130
  };
101
131
  const close = (result) => {
@@ -125,7 +155,7 @@ InteractiveModeBase.prototype.showExtensionCustom = async function (factory, opt
125
155
  abortCustomUi();
126
156
  return;
127
157
  }
128
- releaseHostInlineCustomUi = isOverlay ? undefined : this.beginHostInlineCustomUi();
158
+ releaseHostInlineCustomUi = isOverlay ? undefined : this.beginHostInlineCustomUi(options?.purpose);
129
159
  if (options?.signal?.aborted) {
130
160
  abortCustomUi();
131
161
  return;
@@ -225,6 +255,8 @@ InteractiveModeBase.prototype.showExtensionCustom = async function (factory, opt
225
255
  releaseTranscriptReserveRegistration = coordinator.register(pendingReserve);
226
256
  }
227
257
  let releaseDeferral;
258
+ let hiddenByCaller = false;
259
+ let hiddenForNavigation = false;
228
260
  if (options?.deferInlineCustomUiFocus) {
229
261
  releaseDeferral = this.beginInlineCustomUiFocusDeferral();
230
262
  releaseOverlayInlineCustomUiFocusDeferral = () => {
@@ -232,6 +264,16 @@ InteractiveModeBase.prototype.showExtensionCustom = async function (factory, opt
232
264
  releaseDeferral = undefined;
233
265
  };
234
266
  }
267
+ if (pendingReserve && !options?.deferInlineCustomUiFocus) {
268
+ // Register before onHandle: caller code may synchronously close this mount.
269
+ const syncNavigationFocus = () => {
270
+ hiddenForNavigation =
271
+ this.navigationInlineCustomUiDepth > 0 || this.shouldDeferInlineCustomUiFocus();
272
+ handle.setHidden(hiddenByCaller || hiddenForNavigation);
273
+ };
274
+ releaseOverlayFocusListener = this.onHostCustomUiStateChange(syncNavigationFocus);
275
+ syncNavigationFocus();
276
+ }
235
277
  if (options?.deferInlineCustomUiFocus || pendingReserve) {
236
278
  const release = () => {
237
279
  releaseOverlayInlineCustomUiFocusDeferral?.();
@@ -239,14 +281,17 @@ InteractiveModeBase.prototype.showExtensionCustom = async function (factory, opt
239
281
  };
240
282
  const wrappedHandle = {
241
283
  hide: () => {
284
+ releaseOverlayFocusListener?.();
285
+ releaseOverlayFocusListener = undefined;
242
286
  release();
243
287
  releaseTranscriptReserve();
244
288
  handle.hide();
245
289
  },
246
290
  setHidden: (hidden) => {
291
+ hiddenByCaller = hidden;
247
292
  if (hidden)
248
293
  release();
249
- handle.setHidden(hidden);
294
+ handle.setHidden(hidden || hiddenForNavigation);
250
295
  if (!hidden && options?.deferInlineCustomUiFocus && releaseDeferral === undefined) {
251
296
  releaseDeferral = this.beginInlineCustomUiFocusDeferral();
252
297
  releaseOverlayInlineCustomUiFocusDeferral = () => {
@@ -270,6 +315,9 @@ InteractiveModeBase.prototype.showExtensionCustom = async function (factory, opt
270
315
  }
271
316
  else {
272
317
  this.disposeActiveSelector();
318
+ inlineMount = { component };
319
+ this.inlineCustomUiStack ??= [];
320
+ this.inlineCustomUiStack.push(inlineMount);
273
321
  this.editorContainer.clear();
274
322
  this.editorContainer.addChild(component);
275
323
  if (this.shouldDeferInlineCustomUiFocus()) {
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-extension-custom-ui.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-extension-custom-ui.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tReservedBottomOverlay,\n\ttype TranscriptOverlayIntersection,\n\tTranscriptOverlayReserve,\n\ttranscriptOverlayIntersection,\n\ttype WrappedOverlayComponent,\n} from \"./components/reserved-bottom-overlay.ts\";\nimport { InteractiveModeBase, isFullscreenTranscriptScrollAction } from \"./interactive-mode-base.ts\";\nimport {\n\ttype Component,\n\ttype KeybindingsManager,\n\ttype OverlayHandle,\n\ttype OverlayOptions,\n\tText,\n\ttype Theme,\n\ttype TUI,\n\ttheme,\n} from \"./interactive-mode-deps.ts\";\nimport { isMouseWheelInput, isOverlayMounted } from \"./interactive-tui.ts\";\n\nfunction validateReservedBottomOverlayOptions(options: OverlayOptions | undefined): void {\n\tconst anchor = options?.anchor;\n\tif (anchor !== \"bottom-left\" && anchor !== \"bottom-center\" && anchor !== \"bottom-right\") {\n\t\tthrow new Error(\n\t\t\t\"reserveTranscriptRows requires an explicit bottom anchor: bottom-left, bottom-center, or bottom-right\",\n\t\t);\n\t}\n\tif (options?.row !== undefined) {\n\t\tthrow new Error(\"reserveTranscriptRows does not support overlayOptions.row\");\n\t}\n\tif (options?.offsetY !== undefined && options.offsetY !== 0) {\n\t\tthrow new Error(\"reserveTranscriptRows does not support a nonzero overlayOptions.offsetY\");\n\t}\n}\n\nInteractiveModeBase.prototype.showExtensionNotify = function (\n\tthis: InteractiveModeBase,\n\tmessage: string,\n\ttype?: \"info\" | \"warning\" | \"error\",\n): void {\n\tif (type === \"error\") {\n\t\tthis.showError(message);\n\t} else if (type === \"warning\") {\n\t\tthis.showWarning(message);\n\t} else {\n\t\tthis.showStatus(message);\n\t}\n};\n\nInteractiveModeBase.prototype.showExtensionCustom = async function <T>(\n\tthis: InteractiveModeBase,\n\tfactory: (\n\t\ttui: TUI,\n\t\ttheme: Theme,\n\t\tkeybindings: KeybindingsManager,\n\t\tdone: (result: T) => void,\n\t) => (Component & { dispose?(): void }) | Promise<Component & { dispose?(): void }>,\n\toptions?: {\n\t\toverlay?: boolean;\n\t\tdeferInlineCustomUiFocus?: boolean;\n\t\thandlesInternalUiAction?: boolean;\n\t\treserveTranscriptRows?: boolean;\n\t\tsignal?: AbortSignal;\n\t\toverlayOptions?: OverlayOptions | (() => OverlayOptions);\n\t\tonHandle?: (handle: OverlayHandle) => void;\n\t},\n): Promise<T> {\n\tconst savedText = this.editor.getText();\n\tconst isOverlay = options?.overlay ?? false;\n\n\tconst restoreEditor = (focusEditor: boolean) => {\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.editor.setText(savedText);\n\t\t// Focus fence: a surviving overlay owns input, and taking it away to\n\t\t// \"restore\" the editor would dismiss a newer native dialog.\n\t\tif (focusEditor && !this.ui.hasOverlay()) this.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t};\n\n\treturn new Promise((resolve, reject) => {\n\t\tlet component: (Component & { dispose?(): void }) | undefined;\n\t\tlet closed = false;\n\t\tlet mounted = false;\n\t\tlet overlayHandle: OverlayHandle | undefined;\n\t\tlet releaseHostInlineCustomUi: (() => void) | undefined;\n\t\tlet releaseOverlayInlineCustomUiFocusDeferral: (() => void) | undefined;\n\t\tlet transcriptReserveCoordinator: TranscriptOverlayReserve | undefined;\n\t\tlet releaseTranscriptReserveRegistration: (() => void) | undefined;\n\n\t\tconst disposeComponent = () => {\n\t\t\ttry {\n\t\t\t\tcomponent?.dispose?.();\n\t\t\t} catch {\n\t\t\t\t/* ignore dispose errors */\n\t\t\t}\n\t\t};\n\n\t\tconst releaseHostCustomUi = () => {\n\t\t\tif (component !== undefined && this.pendingInlineCustomUiFocus === component) {\n\t\t\t\tthis.pendingInlineCustomUiFocus = undefined;\n\t\t\t\tthis.notifyHostCustomUiStateListeners();\n\t\t\t}\n\t\t\treleaseHostInlineCustomUi?.();\n\t\t};\n\n\t\tconst cleanupAbortListener = () => {\n\t\t\toptions?.signal?.removeEventListener(\"abort\", abortCustomUi);\n\t\t};\n\n\t\tconst releaseTranscriptReserve = () => {\n\t\t\tconst coordinator = transcriptReserveCoordinator;\n\t\t\treleaseTranscriptReserveRegistration?.();\n\t\t\treleaseTranscriptReserveRegistration = undefined;\n\t\t\ttranscriptReserveCoordinator = undefined;\n\t\t\tif (!coordinator) return;\n\t\t\tif (coordinator.empty) {\n\t\t\t\tthis.documentContainer.removeChild(coordinator);\n\t\t\t\tif (this.transcriptOverlayReserve === coordinator) this.transcriptOverlayReserve = undefined;\n\t\t\t}\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\tconst closeMountedUi = () => {\n\t\t\tif (!mounted) return;\n\t\t\tif (isOverlay) {\n\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral?.();\n\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral = undefined;\n\t\t\t\treleaseTranscriptReserve();\n\t\t\t\t// Hide THIS overlay, not whatever is on top: during engine-death\n\t\t\t\t// teardown an unrelated native overlay can be above this one, and the\n\t\t\t\t// generic top-overlay call would close that instead.\n\t\t\t\tif (overlayHandle) overlayHandle.hide();\n\t\t\t\telse this.ui.hideOverlay();\n\t\t\t} else {\n\t\t\t\trestoreEditor(!this.shouldDeferInlineCustomUiFocus() && this.pendingInlineCustomUiFocus !== component);\n\t\t\t}\n\t\t};\n\n\t\tconst close = (result: T) => {\n\t\t\tif (closed) return;\n\t\t\tclosed = true;\n\t\t\tcleanupAbortListener();\n\t\t\tcloseMountedUi();\n\t\t\tdisposeComponent();\n\t\t\treleaseHostCustomUi();\n\t\t\tresolve(result);\n\t\t};\n\n\t\tconst rejectAndClose = (reason: unknown) => {\n\t\t\tif (closed) return;\n\t\t\tclosed = true;\n\t\t\tcleanupAbortListener();\n\t\t\tcloseMountedUi();\n\t\t\tdisposeComponent();\n\t\t\treleaseHostCustomUi();\n\t\t\treject(reason);\n\t\t};\n\n\t\tfunction abortCustomUi(): void {\n\t\t\trejectAndClose(options?.signal?.reason ?? new Error(\"Extension custom UI aborted\"));\n\t\t}\n\n\t\tif (options?.signal?.aborted) {\n\t\t\tabortCustomUi();\n\t\t\treturn;\n\t\t}\n\t\treleaseHostInlineCustomUi = isOverlay ? undefined : this.beginHostInlineCustomUi();\n\t\tif (options?.signal?.aborted) {\n\t\t\tabortCustomUi();\n\t\t\treturn;\n\t\t}\n\t\toptions?.signal?.addEventListener(\"abort\", abortCustomUi, { once: true });\n\n\t\tlet factoryResult: (Component & { dispose?(): void }) | Promise<Component & { dispose?(): void }>;\n\t\ttry {\n\t\t\tfactoryResult = factory(this.ui, theme, this.keybindings, close);\n\t\t} catch (err) {\n\t\t\trejectAndClose(err);\n\t\t\treturn;\n\t\t}\n\n\t\tPromise.resolve(factoryResult)\n\t\t\t.then((c) => {\n\t\t\t\tif (closed) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tc.dispose?.();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t/* ignore dispose errors */\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcomponent = c;\n\t\t\t\tif (options?.handlesInternalUiAction === true) {\n\t\t\t\t\t(component as Component & { handlesInternalUiAction?: boolean }).handlesInternalUiAction = true;\n\t\t\t\t}\n\t\t\t\tif (isOverlay) {\n\t\t\t\t\t// Resolve overlay options - can be static or dynamic function\n\t\t\t\t\tconst resolveOptions = (): OverlayOptions | undefined => {\n\t\t\t\t\t\tif (options?.overlayOptions) {\n\t\t\t\t\t\t\tconst opts =\n\t\t\t\t\t\t\t\ttypeof options.overlayOptions === \"function\"\n\t\t\t\t\t\t\t\t\t? options.overlayOptions()\n\t\t\t\t\t\t\t\t\t: options.overlayOptions;\n\t\t\t\t\t\t\treturn opts;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Fallback: use component's width property if available\n\t\t\t\t\t\tconst w = (component as { width?: number } | undefined)?.width;\n\t\t\t\t\t\treturn w ? { width: w } : undefined;\n\t\t\t\t\t};\n\t\t\t\t\t// A reserving overlay is bounded so a transcript strip always\n\t\t\t\t\t// survives, and the rows it still covers are added to the end of\n\t\t\t\t\t// the document so the scroll clamp can raise them into that strip.\n\t\t\t\t\tconst resolvedOverlayOptions = resolveOptions();\n\t\t\t\t\tlet mountedOverlayOptions = resolvedOverlayOptions;\n\t\t\t\t\tlet mountedComponent = component;\n\t\t\t\t\tlet pendingReserve: (() => TranscriptOverlayIntersection | undefined) | undefined;\n\t\t\t\t\tif (options?.reserveTranscriptRows === true) {\n\t\t\t\t\t\tvalidateReservedBottomOverlayOptions(resolvedOverlayOptions);\n\t\t\t\t\t\t// `custom()` documents the richer `ExtensionCustomComponent`\n\t\t\t\t\t\t// contract; this signature still names pi-tui's narrower one.\n\t\t\t\t\t\tconst bounded = new ReservedBottomOverlay(\n\t\t\t\t\t\t\tcomponent as WrappedOverlayComponent,\n\t\t\t\t\t\t\t() => this.ui.terminal.rows,\n\t\t\t\t\t\t\tresolvedOverlayOptions?.margin,\n\t\t\t\t\t\t\tresolvedOverlayOptions?.maxHeight,\n\t\t\t\t\t\t\t(data) => isFullscreenTranscriptScrollAction(data, this.keybindings) || isMouseWheelInput(data),\n\t\t\t\t\t\t\t() => this.ui.requestRender(),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmountedComponent = bounded;\n\t\t\t\t\t\tif (resolvedOverlayOptions?.maxHeight !== undefined) {\n\t\t\t\t\t\t\tmountedOverlayOptions = { ...resolvedOverlayOptions };\n\t\t\t\t\t\t\tdelete mountedOverlayOptions.maxHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// A raw host reset can remove the exact overlay without touching its\n\t\t\t\t\t\t// handle. Stop reserving in that frame, then remove the registration\n\t\t\t\t\t\t// after the document render traversal finishes.\n\t\t\t\t\t\tlet removalObserved = false;\n\t\t\t\t\t\tconst overlayShowing = (): boolean => {\n\t\t\t\t\t\t\tif (!isOverlayMounted(this.ui, mountedComponent)) {\n\t\t\t\t\t\t\t\tif (!removalObserved) {\n\t\t\t\t\t\t\t\t\tremovalObserved = true;\n\t\t\t\t\t\t\t\t\tqueueMicrotask(releaseTranscriptReserve);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (overlayHandle === undefined || overlayHandle.isHidden()) return false;\n\t\t\t\t\t\t\tconst visible = resolvedOverlayOptions?.visible;\n\t\t\t\t\t\t\treturn visible === undefined ? true : visible(this.ui.terminal.columns, this.ui.terminal.rows);\n\t\t\t\t\t\t};\n\t\t\t\t\t\tpendingReserve = () =>\n\t\t\t\t\t\t\toverlayShowing()\n\t\t\t\t\t\t\t\t? transcriptOverlayIntersection(\n\t\t\t\t\t\t\t\t\t\tbounded.renderedHeight,\n\t\t\t\t\t\t\t\t\t\tthis.ui.terminal.rows,\n\t\t\t\t\t\t\t\t\t\tthis.transcriptScrollView?.viewportHeight ?? 0,\n\t\t\t\t\t\t\t\t\t\tresolvedOverlayOptions?.margin,\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t}\n\t\t\t\t\tconst handle = this.ui.showOverlay(mountedComponent, mountedOverlayOptions);\n\t\t\t\t\toverlayHandle = handle;\n\t\t\t\t\tmounted = true;\n\t\t\t\t\t// Register only once the overlay is really up and `mounted` is\n\t\t\t\t\t// set: a throw before this point must not leave a registry entry\n\t\t\t\t\t// or blank-row component in the transcript document.\n\t\t\t\t\tif (pendingReserve) {\n\t\t\t\t\t\tlet coordinator = this.transcriptOverlayReserve;\n\t\t\t\t\t\tif (!coordinator) {\n\t\t\t\t\t\t\tcoordinator = new TranscriptOverlayReserve(() => this.transcriptScrollView?.viewportHeight ?? 0);\n\t\t\t\t\t\t\tthis.transcriptOverlayReserve = coordinator;\n\t\t\t\t\t\t\ttranscriptReserveCoordinator = coordinator;\n\t\t\t\t\t\t\tthis.documentContainer.addChild(coordinator);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttranscriptReserveCoordinator = coordinator;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treleaseTranscriptReserveRegistration = coordinator.register(pendingReserve);\n\t\t\t\t\t}\n\t\t\t\t\tlet releaseDeferral: (() => void) | undefined;\n\t\t\t\t\tif (options?.deferInlineCustomUiFocus) {\n\t\t\t\t\t\treleaseDeferral = this.beginInlineCustomUiFocusDeferral();\n\t\t\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral = () => {\n\t\t\t\t\t\t\treleaseDeferral?.();\n\t\t\t\t\t\t\treleaseDeferral = undefined;\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tif (options?.deferInlineCustomUiFocus || pendingReserve) {\n\t\t\t\t\t\tconst release = () => {\n\t\t\t\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral?.();\n\t\t\t\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral = undefined;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst wrappedHandle: OverlayHandle = {\n\t\t\t\t\t\t\thide: () => {\n\t\t\t\t\t\t\t\trelease();\n\t\t\t\t\t\t\t\treleaseTranscriptReserve();\n\t\t\t\t\t\t\t\thandle.hide();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsetHidden: (hidden) => {\n\t\t\t\t\t\t\t\tif (hidden) release();\n\t\t\t\t\t\t\t\thandle.setHidden(hidden);\n\t\t\t\t\t\t\t\tif (!hidden && options?.deferInlineCustomUiFocus && releaseDeferral === undefined) {\n\t\t\t\t\t\t\t\t\treleaseDeferral = this.beginInlineCustomUiFocusDeferral();\n\t\t\t\t\t\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral = () => {\n\t\t\t\t\t\t\t\t\t\treleaseDeferral?.();\n\t\t\t\t\t\t\t\t\t\treleaseDeferral = undefined;\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tisHidden: () => handle.isHidden(),\n\t\t\t\t\t\t\tfocus: () => handle.focus(),\n\t\t\t\t\t\t\tunfocus: (unfocusOptions) => handle.unfocus(unfocusOptions),\n\t\t\t\t\t\t\tisFocused: () => handle.isFocused(),\n\t\t\t\t\t\t\tgetBounds: () => handle.getBounds(),\n\t\t\t\t\t\t};\n\t\t\t\t\t\toverlayHandle = wrappedHandle;\n\t\t\t\t\t\toptions?.onHandle?.(wrappedHandle);\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions?.onHandle?.(handle);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.disposeActiveSelector();\n\t\t\t\t\tthis.editorContainer.clear();\n\t\t\t\t\tthis.editorContainer.addChild(component);\n\t\t\t\t\tif (this.shouldDeferInlineCustomUiFocus()) {\n\t\t\t\t\t\tthis.pendingInlineCustomUiFocus = component;\n\t\t\t\t\t\tthis.notifyHostCustomUiStateListeners();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.ui.setFocus(component);\n\t\t\t\t\t}\n\t\t\t\t\tmounted = true;\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\trejectAndClose(err);\n\t\t\t});\n\t});\n};\n\nInteractiveModeBase.prototype.showExtensionError = function (\n\tthis: InteractiveModeBase,\n\textensionPath: string,\n\terror: string,\n\tstack?: string,\n): void {\n\tconst errorMsg = `Extension \"${extensionPath}\" error: ${error}`;\n\tconst errorText = new Text(theme.fg(\"error\", errorMsg), 1, 0);\n\tthis.chatContainer.addChild(errorText);\n\tif (stack) {\n\t\t// Show stack trace in dim color, indented\n\t\tconst stackLines = stack\n\t\t\t.split(\"\\n\")\n\t\t\t.slice(1) // Skip first line (duplicates error message)\n\t\t\t.map((line) => theme.fg(\"dim\", ` ${line.trim()}`))\n\t\t\t.join(\"\\n\");\n\t\tif (stackLines) {\n\t\t\tthis.chatContainer.addChild(new Text(stackLines, 1, 0));\n\t\t}\n\t}\n\tthis.ui.requestRender();\n};\n"]}
1
+ {"version":3,"file":"interactive-extension-custom-ui.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-extension-custom-ui.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tReservedBottomOverlay,\n\ttype TranscriptOverlayIntersection,\n\tTranscriptOverlayReserve,\n\ttranscriptOverlayIntersection,\n\ttype WrappedOverlayComponent,\n} from \"./components/reserved-bottom-overlay.ts\";\nimport { InteractiveModeBase, isFullscreenTranscriptScrollAction } from \"./interactive-mode-base.ts\";\nimport {\n\ttype Component,\n\ttype KeybindingsManager,\n\ttype OverlayHandle,\n\ttype OverlayOptions,\n\tText,\n\ttype Theme,\n\ttype TUI,\n\ttheme,\n} from \"./interactive-mode-deps.ts\";\nimport { isMouseWheelInput, isOverlayMounted } from \"./interactive-tui.ts\";\n\nfunction validateReservedBottomOverlayOptions(options: OverlayOptions | undefined): void {\n\tconst anchor = options?.anchor;\n\tif (anchor !== \"bottom-left\" && anchor !== \"bottom-center\" && anchor !== \"bottom-right\") {\n\t\tthrow new Error(\n\t\t\t\"reserveTranscriptRows requires an explicit bottom anchor: bottom-left, bottom-center, or bottom-right\",\n\t\t);\n\t}\n\tif (options?.row !== undefined) {\n\t\tthrow new Error(\"reserveTranscriptRows does not support overlayOptions.row\");\n\t}\n\tif (options?.offsetY !== undefined && options.offsetY !== 0) {\n\t\tthrow new Error(\"reserveTranscriptRows does not support a nonzero overlayOptions.offsetY\");\n\t}\n}\n\nInteractiveModeBase.prototype.showExtensionNotify = function (\n\tthis: InteractiveModeBase,\n\tmessage: string,\n\ttype?: \"info\" | \"warning\" | \"error\",\n): void {\n\tif (type === \"error\") {\n\t\tthis.showError(message);\n\t} else if (type === \"warning\") {\n\t\tthis.showWarning(message);\n\t} else {\n\t\tthis.showStatus(message);\n\t}\n};\n\nInteractiveModeBase.prototype.showExtensionCustom = async function <T>(\n\tthis: InteractiveModeBase,\n\tfactory: (\n\t\ttui: TUI,\n\t\ttheme: Theme,\n\t\tkeybindings: KeybindingsManager,\n\t\tdone: (result: T) => void,\n\t) => (Component & { dispose?(): void }) | Promise<Component & { dispose?(): void }>,\n\toptions?: {\n\t\tpurpose?: \"prompt\" | \"navigation\";\n\t\toverlay?: boolean;\n\t\tdeferInlineCustomUiFocus?: boolean;\n\t\thandlesInternalUiAction?: boolean;\n\t\treserveTranscriptRows?: boolean;\n\t\tsignal?: AbortSignal;\n\t\toverlayOptions?: OverlayOptions | (() => OverlayOptions);\n\t\tonHandle?: (handle: OverlayHandle) => void;\n\t},\n): Promise<T> {\n\tconst savedText = this.editor.getText();\n\tconst isOverlay = options?.overlay ?? false;\n\n\tconst restoreEditor = (focusEditor: boolean) => {\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.editor.setText(savedText);\n\t\t// Focus fence: a surviving overlay owns input, and taking it away to\n\t\t// \"restore\" the editor would dismiss a newer native dialog.\n\t\tif (focusEditor && !this.ui.hasOverlay()) this.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t};\n\n\treturn new Promise((resolve, reject) => {\n\t\tlet component: (Component & { dispose?(): void }) | undefined;\n\t\tlet closed = false;\n\t\tlet mounted = false;\n\t\tlet overlayHandle: OverlayHandle | undefined;\n\t\tlet inlineMount: { component: Component } | undefined;\n\t\tlet releaseHostInlineCustomUi: (() => void) | undefined;\n\t\tlet releaseOverlayInlineCustomUiFocusDeferral: (() => void) | undefined;\n\t\tlet transcriptReserveCoordinator: TranscriptOverlayReserve | undefined;\n\t\tlet releaseTranscriptReserveRegistration: (() => void) | undefined;\n\t\tlet releaseOverlayFocusListener: (() => void) | undefined;\n\n\t\tconst disposeComponent = () => {\n\t\t\ttry {\n\t\t\t\tcomponent?.dispose?.();\n\t\t\t} catch {\n\t\t\t\t/* ignore dispose errors */\n\t\t\t}\n\t\t};\n\n\t\tconst releaseHostCustomUi = () => {\n\t\t\tif (component !== undefined && this.pendingInlineCustomUiFocus === component) {\n\t\t\t\tthis.pendingInlineCustomUiFocus = undefined;\n\t\t\t\tthis.notifyHostCustomUiStateListeners();\n\t\t\t}\n\t\t\treleaseHostInlineCustomUi?.();\n\t\t};\n\n\t\tconst cleanupAbortListener = () => {\n\t\t\toptions?.signal?.removeEventListener(\"abort\", abortCustomUi);\n\t\t};\n\n\t\tconst releaseTranscriptReserve = () => {\n\t\t\tconst coordinator = transcriptReserveCoordinator;\n\t\t\treleaseTranscriptReserveRegistration?.();\n\t\t\treleaseTranscriptReserveRegistration = undefined;\n\t\t\ttranscriptReserveCoordinator = undefined;\n\t\t\tif (!coordinator) return;\n\t\t\tif (coordinator.empty) {\n\t\t\t\tthis.documentContainer.removeChild(coordinator);\n\t\t\t\tif (this.transcriptOverlayReserve === coordinator) this.transcriptOverlayReserve = undefined;\n\t\t\t}\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\tconst closeMountedUi = () => {\n\t\t\tif (!mounted) return;\n\t\t\tif (isOverlay) {\n\t\t\t\tconst ownedInput = overlayHandle?.isFocused();\n\t\t\t\treleaseOverlayFocusListener?.();\n\t\t\t\treleaseOverlayFocusListener = undefined;\n\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral?.();\n\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral = undefined;\n\t\t\t\treleaseTranscriptReserve();\n\t\t\t\t// Hide THIS overlay, not whatever is on top: during engine-death\n\t\t\t\t// teardown an unrelated native overlay can be above this one, and the\n\t\t\t\t// generic top-overlay call would close that instead.\n\t\t\t\tif (overlayHandle) overlayHandle.hide();\n\t\t\t\telse this.ui.hideOverlay();\n\t\t\t\tif (options?.reserveTranscriptRows && ownedInput && !this.ui.hasOverlay()) {\n\t\t\t\t\t// Navigation may have closed while this prompt waited; its preFocus is stale.\n\t\t\t\t\tthis.ui.setFocus(this.editorContainer.children.at(-1) ?? this.editor);\n\t\t\t\t}\n\t\t\t} else if (inlineMount) {\n\t\t\t\tconst stack = this.inlineCustomUiStack;\n\t\t\t\tconst ownsSlot =\n\t\t\t\t\tstack.at(-1) === inlineMount && this.editorContainer.children.includes(inlineMount.component);\n\t\t\t\tstack.splice(stack.indexOf(inlineMount), 1);\n\t\t\t\t// An older completion must not clear a newer prompt's editor slot.\n\t\t\t\tif (!ownsSlot) return;\n\t\t\t\tconst previous = stack.at(-1)?.component;\n\t\t\t\tif (previous) {\n\t\t\t\t\tthis.editorContainer.clear();\n\t\t\t\t\tthis.editorContainer.addChild(previous);\n\t\t\t\t\tif (this.shouldDeferInlineCustomUiFocus()) {\n\t\t\t\t\t\tthis.pendingInlineCustomUiFocus = previous;\n\t\t\t\t\t\tthis.notifyHostCustomUiStateListeners();\n\t\t\t\t\t} else if (!this.ui.hasOverlay()) {\n\t\t\t\t\t\tthis.ui.setFocus(previous);\n\t\t\t\t\t}\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t} else {\n\t\t\t\t\trestoreEditor(!this.shouldDeferInlineCustomUiFocus() && this.pendingInlineCustomUiFocus !== component);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tconst close = (result: T) => {\n\t\t\tif (closed) return;\n\t\t\tclosed = true;\n\t\t\tcleanupAbortListener();\n\t\t\tcloseMountedUi();\n\t\t\tdisposeComponent();\n\t\t\treleaseHostCustomUi();\n\t\t\tresolve(result);\n\t\t};\n\n\t\tconst rejectAndClose = (reason: unknown) => {\n\t\t\tif (closed) return;\n\t\t\tclosed = true;\n\t\t\tcleanupAbortListener();\n\t\t\tcloseMountedUi();\n\t\t\tdisposeComponent();\n\t\t\treleaseHostCustomUi();\n\t\t\treject(reason);\n\t\t};\n\n\t\tfunction abortCustomUi(): void {\n\t\t\trejectAndClose(options?.signal?.reason ?? new Error(\"Extension custom UI aborted\"));\n\t\t}\n\n\t\tif (options?.signal?.aborted) {\n\t\t\tabortCustomUi();\n\t\t\treturn;\n\t\t}\n\t\treleaseHostInlineCustomUi = isOverlay ? undefined : this.beginHostInlineCustomUi(options?.purpose);\n\t\tif (options?.signal?.aborted) {\n\t\t\tabortCustomUi();\n\t\t\treturn;\n\t\t}\n\t\toptions?.signal?.addEventListener(\"abort\", abortCustomUi, { once: true });\n\n\t\tlet factoryResult: (Component & { dispose?(): void }) | Promise<Component & { dispose?(): void }>;\n\t\ttry {\n\t\t\tfactoryResult = factory(this.ui, theme, this.keybindings, close);\n\t\t} catch (err) {\n\t\t\trejectAndClose(err);\n\t\t\treturn;\n\t\t}\n\n\t\tPromise.resolve(factoryResult)\n\t\t\t.then((c) => {\n\t\t\t\tif (closed) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tc.dispose?.();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t/* ignore dispose errors */\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcomponent = c;\n\t\t\t\tif (options?.handlesInternalUiAction === true) {\n\t\t\t\t\t(component as Component & { handlesInternalUiAction?: boolean }).handlesInternalUiAction = true;\n\t\t\t\t}\n\t\t\t\tif (isOverlay) {\n\t\t\t\t\t// Resolve overlay options - can be static or dynamic function\n\t\t\t\t\tconst resolveOptions = (): OverlayOptions | undefined => {\n\t\t\t\t\t\tif (options?.overlayOptions) {\n\t\t\t\t\t\t\tconst opts =\n\t\t\t\t\t\t\t\ttypeof options.overlayOptions === \"function\"\n\t\t\t\t\t\t\t\t\t? options.overlayOptions()\n\t\t\t\t\t\t\t\t\t: options.overlayOptions;\n\t\t\t\t\t\t\treturn opts;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Fallback: use component's width property if available\n\t\t\t\t\t\tconst w = (component as { width?: number } | undefined)?.width;\n\t\t\t\t\t\treturn w ? { width: w } : undefined;\n\t\t\t\t\t};\n\t\t\t\t\t// A reserving overlay is bounded so a transcript strip always\n\t\t\t\t\t// survives, and the rows it still covers are added to the end of\n\t\t\t\t\t// the document so the scroll clamp can raise them into that strip.\n\t\t\t\t\tconst resolvedOverlayOptions = resolveOptions();\n\t\t\t\t\tlet mountedOverlayOptions = resolvedOverlayOptions;\n\t\t\t\t\tlet mountedComponent = component;\n\t\t\t\t\tlet pendingReserve: (() => TranscriptOverlayIntersection | undefined) | undefined;\n\t\t\t\t\tif (options?.reserveTranscriptRows === true) {\n\t\t\t\t\t\tvalidateReservedBottomOverlayOptions(resolvedOverlayOptions);\n\t\t\t\t\t\t// `custom()` documents the richer `ExtensionCustomComponent`\n\t\t\t\t\t\t// contract; this signature still names pi-tui's narrower one.\n\t\t\t\t\t\tconst bounded = new ReservedBottomOverlay(\n\t\t\t\t\t\t\tcomponent as WrappedOverlayComponent,\n\t\t\t\t\t\t\t() => this.ui.terminal.rows,\n\t\t\t\t\t\t\tresolvedOverlayOptions?.margin,\n\t\t\t\t\t\t\tresolvedOverlayOptions?.maxHeight,\n\t\t\t\t\t\t\t(data) => isFullscreenTranscriptScrollAction(data, this.keybindings) || isMouseWheelInput(data),\n\t\t\t\t\t\t\t() => this.ui.requestRender(),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmountedComponent = bounded;\n\t\t\t\t\t\tif (resolvedOverlayOptions?.maxHeight !== undefined) {\n\t\t\t\t\t\t\tmountedOverlayOptions = { ...resolvedOverlayOptions };\n\t\t\t\t\t\t\tdelete mountedOverlayOptions.maxHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// A raw host reset can remove the exact overlay without touching its\n\t\t\t\t\t\t// handle. Stop reserving in that frame, then remove the registration\n\t\t\t\t\t\t// after the document render traversal finishes.\n\t\t\t\t\t\tlet removalObserved = false;\n\t\t\t\t\t\tconst overlayShowing = (): boolean => {\n\t\t\t\t\t\t\tif (!isOverlayMounted(this.ui, mountedComponent)) {\n\t\t\t\t\t\t\t\tif (!removalObserved) {\n\t\t\t\t\t\t\t\t\tremovalObserved = true;\n\t\t\t\t\t\t\t\t\tqueueMicrotask(releaseTranscriptReserve);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (overlayHandle === undefined || overlayHandle.isHidden()) return false;\n\t\t\t\t\t\t\tconst visible = resolvedOverlayOptions?.visible;\n\t\t\t\t\t\t\treturn visible === undefined ? true : visible(this.ui.terminal.columns, this.ui.terminal.rows);\n\t\t\t\t\t\t};\n\t\t\t\t\t\tpendingReserve = () =>\n\t\t\t\t\t\t\toverlayShowing()\n\t\t\t\t\t\t\t\t? transcriptOverlayIntersection(\n\t\t\t\t\t\t\t\t\t\tbounded.renderedHeight,\n\t\t\t\t\t\t\t\t\t\tthis.ui.terminal.rows,\n\t\t\t\t\t\t\t\t\t\tthis.transcriptScrollView?.viewportHeight ?? 0,\n\t\t\t\t\t\t\t\t\t\tresolvedOverlayOptions?.margin,\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t}\n\t\t\t\t\tconst handle = this.ui.showOverlay(mountedComponent, mountedOverlayOptions);\n\t\t\t\t\toverlayHandle = handle;\n\t\t\t\t\tmounted = true;\n\t\t\t\t\t// Register only once the overlay is really up and `mounted` is\n\t\t\t\t\t// set: a throw before this point must not leave a registry entry\n\t\t\t\t\t// or blank-row component in the transcript document.\n\t\t\t\t\tif (pendingReserve) {\n\t\t\t\t\t\tlet coordinator = this.transcriptOverlayReserve;\n\t\t\t\t\t\tif (!coordinator) {\n\t\t\t\t\t\t\tcoordinator = new TranscriptOverlayReserve(() => this.transcriptScrollView?.viewportHeight ?? 0);\n\t\t\t\t\t\t\tthis.transcriptOverlayReserve = coordinator;\n\t\t\t\t\t\t\ttranscriptReserveCoordinator = coordinator;\n\t\t\t\t\t\t\tthis.documentContainer.addChild(coordinator);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttranscriptReserveCoordinator = coordinator;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treleaseTranscriptReserveRegistration = coordinator.register(pendingReserve);\n\t\t\t\t\t}\n\t\t\t\t\tlet releaseDeferral: (() => void) | undefined;\n\t\t\t\t\tlet hiddenByCaller = false;\n\t\t\t\t\tlet hiddenForNavigation = false;\n\t\t\t\t\tif (options?.deferInlineCustomUiFocus) {\n\t\t\t\t\t\treleaseDeferral = this.beginInlineCustomUiFocusDeferral();\n\t\t\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral = () => {\n\t\t\t\t\t\t\treleaseDeferral?.();\n\t\t\t\t\t\t\treleaseDeferral = undefined;\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tif (pendingReserve && !options?.deferInlineCustomUiFocus) {\n\t\t\t\t\t\t// Register before onHandle: caller code may synchronously close this mount.\n\t\t\t\t\t\tconst syncNavigationFocus = () => {\n\t\t\t\t\t\t\thiddenForNavigation =\n\t\t\t\t\t\t\t\tthis.navigationInlineCustomUiDepth > 0 || this.shouldDeferInlineCustomUiFocus();\n\t\t\t\t\t\t\thandle.setHidden(hiddenByCaller || hiddenForNavigation);\n\t\t\t\t\t\t};\n\t\t\t\t\t\treleaseOverlayFocusListener = this.onHostCustomUiStateChange(syncNavigationFocus);\n\t\t\t\t\t\tsyncNavigationFocus();\n\t\t\t\t\t}\n\t\t\t\t\tif (options?.deferInlineCustomUiFocus || pendingReserve) {\n\t\t\t\t\t\tconst release = () => {\n\t\t\t\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral?.();\n\t\t\t\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral = undefined;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst wrappedHandle: OverlayHandle = {\n\t\t\t\t\t\t\thide: () => {\n\t\t\t\t\t\t\t\treleaseOverlayFocusListener?.();\n\t\t\t\t\t\t\t\treleaseOverlayFocusListener = undefined;\n\t\t\t\t\t\t\t\trelease();\n\t\t\t\t\t\t\t\treleaseTranscriptReserve();\n\t\t\t\t\t\t\t\thandle.hide();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsetHidden: (hidden) => {\n\t\t\t\t\t\t\t\thiddenByCaller = hidden;\n\t\t\t\t\t\t\t\tif (hidden) release();\n\t\t\t\t\t\t\t\thandle.setHidden(hidden || hiddenForNavigation);\n\t\t\t\t\t\t\t\tif (!hidden && options?.deferInlineCustomUiFocus && releaseDeferral === undefined) {\n\t\t\t\t\t\t\t\t\treleaseDeferral = this.beginInlineCustomUiFocusDeferral();\n\t\t\t\t\t\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral = () => {\n\t\t\t\t\t\t\t\t\t\treleaseDeferral?.();\n\t\t\t\t\t\t\t\t\t\treleaseDeferral = undefined;\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tisHidden: () => handle.isHidden(),\n\t\t\t\t\t\t\tfocus: () => handle.focus(),\n\t\t\t\t\t\t\tunfocus: (unfocusOptions) => handle.unfocus(unfocusOptions),\n\t\t\t\t\t\t\tisFocused: () => handle.isFocused(),\n\t\t\t\t\t\t\tgetBounds: () => handle.getBounds(),\n\t\t\t\t\t\t};\n\t\t\t\t\t\toverlayHandle = wrappedHandle;\n\t\t\t\t\t\toptions?.onHandle?.(wrappedHandle);\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions?.onHandle?.(handle);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.disposeActiveSelector();\n\t\t\t\t\tinlineMount = { component };\n\t\t\t\t\tthis.inlineCustomUiStack ??= [];\n\t\t\t\t\tthis.inlineCustomUiStack.push(inlineMount);\n\t\t\t\t\tthis.editorContainer.clear();\n\t\t\t\t\tthis.editorContainer.addChild(component);\n\t\t\t\t\tif (this.shouldDeferInlineCustomUiFocus()) {\n\t\t\t\t\t\tthis.pendingInlineCustomUiFocus = component;\n\t\t\t\t\t\tthis.notifyHostCustomUiStateListeners();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.ui.setFocus(component);\n\t\t\t\t\t}\n\t\t\t\t\tmounted = true;\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\trejectAndClose(err);\n\t\t\t});\n\t});\n};\n\nInteractiveModeBase.prototype.showExtensionError = function (\n\tthis: InteractiveModeBase,\n\textensionPath: string,\n\terror: string,\n\tstack?: string,\n): void {\n\tconst errorMsg = `Extension \"${extensionPath}\" error: ${error}`;\n\tconst errorText = new Text(theme.fg(\"error\", errorMsg), 1, 0);\n\tthis.chatContainer.addChild(errorText);\n\tif (stack) {\n\t\t// Show stack trace in dim color, indented\n\t\tconst stackLines = stack\n\t\t\t.split(\"\\n\")\n\t\t\t.slice(1) // Skip first line (duplicates error message)\n\t\t\t.map((line) => theme.fg(\"dim\", ` ${line.trim()}`))\n\t\t\t.join(\"\\n\");\n\t\tif (stackLines) {\n\t\t\tthis.chatContainer.addChild(new Text(stackLines, 1, 0));\n\t\t}\n\t}\n\tthis.ui.requestRender();\n};\n"]}
@@ -10,6 +10,7 @@ InteractiveModeBase.prototype.setupExtensionShortcuts = function (extensionRunne
10
10
  return;
11
11
  // Create a context for shortcut handlers
12
12
  const createContext = () => ({
13
+ observeWorkflowActivity: (observer) => extensionRunner.createContext().observeWorkflowActivity(observer),
13
14
  ui: extensionRunner.getUIContext(),
14
15
  mode: "tui",
15
16
  hasUI: true,
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-extension-runtime.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-extension-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { copyScopedModels } from \"../../core/extensions/runner-context.ts\";\nimport { ModelRegistry } from \"../../core/model-registry.ts\";\nimport { AtomicWorkingLoader } from \"./components/atomic-working-status.ts\";\nimport { mountIdleStatus } from \"./components/idle-status.ts\";\nimport { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {\n\tAssistantMessageComponent,\n\ttype Component,\n\tContainer,\n\ttype ExtensionContext,\n\ttype ExtensionRunner,\n\ttype ExtensionWidgetOptions,\n\ttype KeyId,\n\tkeyText,\n\ttype LoaderIndicatorOptions,\n\tmatchesKey,\n\tText,\n\ttype Theme,\n\ttype TUI,\n\ttheme,\n} from \"./interactive-mode-deps.ts\";\n\nInteractiveModeBase.prototype.setupExtensionShortcuts = function (\n\tthis: InteractiveModeBase,\n\textensionRunner: ExtensionRunner,\n): void {\n\tconst shortcuts = extensionRunner.getShortcuts(this.keybindings.getEffectiveConfig());\n\tif (shortcuts.size === 0) return;\n\n\t// Create a context for shortcut handlers\n\tconst createContext = (): ExtensionContext => ({\n\t\tui: extensionRunner.getUIContext(),\n\t\tmode: \"tui\",\n\t\thasUI: true,\n\t\tcwd: this.sessionManager.getCwd(),\n\t\tsessionManager: this.sessionManager,\n\t\tmodelRegistry: new ModelRegistry(this.session.modelRuntime),\n\t\tmodel: this.session.model,\n\t\t// Copied through the same helper `createExtensionContext` uses: this\n\t\t// hand-built context reaches the same shortcut handlers, so it owes them\n\t\t// the same guarantee, entries included.\n\t\tscopedModels: copyScopedModels(this.session.scopedModels),\n\t\tisIdle: () => !this.session.isStreaming,\n\t\tisProjectTrusted: () => this.session.settingsManager.isProjectTrusted(),\n\t\tsignal: this.session.agent.signal,\n\t\tabort: () => this.session.abort(),\n\t\thasPendingMessages: () => this.session.pendingMessageCount > 0,\n\t\tshutdown: () => {\n\t\t\tthis.shutdownRequested = true;\n\t\t},\n\t\tgetContextUsage: () => this.session.getContextUsage(),\n\t\tcompact: (options) => {\n\t\t\tvoid (async () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await this.session.compact();\n\t\t\t\t\toptions?.onComplete?.(result);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst err = error instanceof Error ? error : new Error(String(error));\n\t\t\t\t\toptions?.onError?.(err);\n\t\t\t\t}\n\t\t\t})();\n\t\t},\n\t\tgetSystemPrompt: () => this.session.systemPrompt,\n\t});\n\n\t// Set up the extension shortcut handler on the default editor\n\tthis.defaultEditor.onExtensionShortcut = (data: string) => {\n\t\tfor (const [shortcutStr, shortcut] of shortcuts) {\n\t\t\t// Cast to KeyId - extension shortcuts use the same format\n\t\t\tif (matchesKey(data, shortcutStr as KeyId)) {\n\t\t\t\t// Run handler async, don't block input\n\t\t\t\tPromise.resolve(shortcut.handler(createContext())).catch((err) => {\n\t\t\t\t\tthis.showError(`Shortcut handler error: ${err instanceof Error ? err.message : String(err)}`);\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n};\n\nInteractiveModeBase.prototype.setExtensionStatus = function (\n\tthis: InteractiveModeBase,\n\tkey: string,\n\ttext: string | undefined,\n): void {\n\tthis.footerDataProvider.setExtensionStatus(key, text);\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.getWorkingLoaderMessage = function (this: InteractiveModeBase): string {\n\treturn this.workingMessage ?? this.defaultWorkingMessage;\n};\n\nInteractiveModeBase.prototype.createWorkingLoader = function (this: InteractiveModeBase): AtomicWorkingLoader {\n\treturn new AtomicWorkingLoader(\n\t\tthis.ui,\n\t\tundefined,\n\t\t(text) => theme.fg(\"muted\", text),\n\t\tthis.getWorkingLoaderMessage(),\n\t\tthis.workingIndicatorOptions,\n\t);\n};\n\nInteractiveModeBase.prototype.clearWorkingLoader = function (this: InteractiveModeBase): void {\n\tthis.loadingAnimation?.stop();\n\tthis.loadingAnimation = undefined;\n\tthis.workingIndicatorEmbedded = false;\n\tthis.setEditorWorkingStatusIndicator?.(undefined);\n\tthis.statusContainer.clear();\n};\n\nInteractiveModeBase.prototype.stopWorkingLoader = function (this: InteractiveModeBase): void {\n\tconst hadLoader = this.loadingAnimation !== undefined;\n\tconst wasEmbedded = this.workingIndicatorEmbedded;\n\tInteractiveModeBase.prototype.clearWorkingLoader.call(this);\n\tif (hadLoader && !wasEmbedded) mountIdleStatus(this.statusContainer, this.settingsManager.getClearOnShrink());\n};\n\nInteractiveModeBase.prototype.showWorkingLoaderNow = function (this: InteractiveModeBase): void {\n\t// Mount the working spinner immediately, regardless of streaming state, so\n\t// there is no visible gap between submitting a prompt and the agent turn\n\t// actually starting. Prompt preflight (extension input hooks, template/skill\n\t// expansion, auth and compaction checks, deferred startup) runs before the\n\t// agent emits `agent_start`, which is otherwise the only place the loader is\n\t// created. Respect `workingVisible` so extensions can still suppress it.\n\tif (!this.workingVisible || this.loadingAnimation) {\n\t\tthis.ui.requestRender();\n\t\treturn;\n\t}\n\tthis.statusContainer.clear();\n\tconst loader = this.createWorkingLoader();\n\tthis.loadingAnimation = loader;\n\tthis.workingIndicatorEmbedded = this.setEditorWorkingStatusIndicator?.(loader) ?? false;\n\tif (!this.workingIndicatorEmbedded) this.statusContainer.addChild(loader);\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.setWorkingVisible = function (this: InteractiveModeBase, visible: boolean): void {\n\tthis.workingVisible = visible;\n\tif (!visible) {\n\t\tthis.stopWorkingLoader();\n\t\tthis.ui.requestRender();\n\t\treturn;\n\t}\n\tif (this.session.isStreaming && !this.loadingAnimation) {\n\t\tthis.statusContainer.clear();\n\t\tconst loader = this.createWorkingLoader();\n\t\tthis.loadingAnimation = loader;\n\t\tthis.workingIndicatorEmbedded = this.setEditorWorkingStatusIndicator?.(loader) ?? false;\n\t\tif (!this.workingIndicatorEmbedded) this.statusContainer.addChild(loader);\n\t}\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.setWorkingIndicator = function (\n\tthis: InteractiveModeBase,\n\toptions?: LoaderIndicatorOptions,\n): void {\n\tthis.workingIndicatorOptions = options;\n\tthis.loadingAnimation?.setIndicator(options);\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.setHiddenThinkingLabel = function (this: InteractiveModeBase, label?: string): void {\n\tthis.hiddenThinkingLabel = label ?? this.defaultHiddenThinkingLabel;\n\tfor (const child of this.chatContainer.children) {\n\t\tif (child instanceof AssistantMessageComponent) {\n\t\t\tchild.setHiddenThinkingLabel(this.hiddenThinkingLabel);\n\t\t}\n\t}\n\tif (this.streamingComponent) {\n\t\tthis.streamingComponent.setHiddenThinkingLabel(this.hiddenThinkingLabel);\n\t}\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.setExtensionWidget = function (\n\tthis: InteractiveModeBase,\n\tkey: string,\n\tcontent: string[] | ((tui: TUI, thm: Theme) => Component & { dispose?(): void }) | undefined,\n\toptions?: ExtensionWidgetOptions,\n): void {\n\tconst placement = options?.placement ?? \"aboveEditor\";\n\tconst removeExisting = (map: Map<string, Component & { dispose?(): void }>) => {\n\t\tconst existing = map.get(key);\n\t\tif (existing?.dispose) existing.dispose();\n\t\tmap.delete(key);\n\t};\n\n\tremoveExisting(this.extensionWidgetsAbove);\n\tremoveExisting(this.extensionWidgetsBelow);\n\n\tif (content === undefined) {\n\t\tthis.renderWidgets();\n\t\treturn;\n\t}\n\n\tlet component: Component & { dispose?(): void };\n\n\tif (Array.isArray(content)) {\n\t\t// Wrap string array in a Container with Text components\n\t\tconst container = new Container();\n\t\tfor (const line of content.slice(0, InteractiveModeBase.MAX_WIDGET_LINES)) {\n\t\t\tcontainer.addChild(new Text(line, 1, 0));\n\t\t}\n\t\tif (content.length > InteractiveModeBase.MAX_WIDGET_LINES) {\n\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"... (widget truncated)\"), 1, 0));\n\t\t}\n\t\tcomponent = container;\n\t} else {\n\t\t// Factory function - create component\n\t\tcomponent = content(this.ui, theme);\n\t}\n\n\tconst targetMap = placement === \"belowEditor\" ? this.extensionWidgetsBelow : this.extensionWidgetsAbove;\n\ttargetMap.set(key, component);\n\tthis.renderWidgets();\n};\n\nInteractiveModeBase.prototype.clearExtensionWidgets = function (this: InteractiveModeBase): void {\n\tconst releasedKeys = new Set<string>();\n\tfor (const [key, widget] of this.extensionWidgetsAbove) {\n\t\twidget.dispose?.();\n\t\treleasedKeys.add(key);\n\t}\n\tfor (const [key, widget] of this.extensionWidgetsBelow) {\n\t\twidget.dispose?.();\n\t\treleasedKeys.add(key);\n\t}\n\tthis.extensionWidgetsAbove.clear();\n\tthis.extensionWidgetsBelow.clear();\n\tthis.renderWidgets();\n\tfor (const key of releasedKeys) this.notifyExtensionWidgetRelease(key);\n};\n\nInteractiveModeBase.prototype.resetExtensionUI = function (this: InteractiveModeBase): void {\n\tif (this.extensionSelector) {\n\t\tthis.hideExtensionSelector();\n\t}\n\tif (this.extensionInput) {\n\t\tthis.hideExtensionInput();\n\t}\n\tif (this.extensionEditor) {\n\t\tthis.hideExtensionEditor();\n\t}\n\tthis.ui.hideOverlay();\n\tthis.clearExtensionTerminalInputListeners();\n\tthis.setExtensionFooter(undefined);\n\tthis.setExtensionHeader(undefined);\n\tthis.clearExtensionWidgets();\n\tthis.footerDataProvider.clearExtensionStatuses();\n\tthis.footer.invalidate();\n\tthis.autocompleteProviderWrappers = [];\n\tthis.setCustomEditorComponent(undefined);\n\tthis.setupAutocompleteProvider();\n\tthis.defaultEditor.onExtensionShortcut = this.interactiveEngineShortcutHandler;\n\tthis.updateTerminalTitle();\n\tthis.workingMessage = undefined;\n\tthis.workingVisible = true;\n\tthis.setWorkingIndicator();\n\tif (this.loadingAnimation) {\n\t\tthis.loadingAnimation.setMessage(`${this.defaultWorkingMessage} (${keyText(\"app.interrupt\")} Interrupt)`);\n\t}\n\tthis.setHiddenThinkingLabel();\n};\n"]}
1
+ {"version":3,"file":"interactive-extension-runtime.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-extension-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { copyScopedModels } from \"../../core/extensions/runner-context.ts\";\nimport { ModelRegistry } from \"../../core/model-registry.ts\";\nimport { AtomicWorkingLoader } from \"./components/atomic-working-status.ts\";\nimport { mountIdleStatus } from \"./components/idle-status.ts\";\nimport { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {\n\tAssistantMessageComponent,\n\ttype Component,\n\tContainer,\n\ttype ExtensionContext,\n\ttype ExtensionRunner,\n\ttype ExtensionWidgetOptions,\n\ttype KeyId,\n\tkeyText,\n\ttype LoaderIndicatorOptions,\n\tmatchesKey,\n\tText,\n\ttype Theme,\n\ttype TUI,\n\ttheme,\n} from \"./interactive-mode-deps.ts\";\n\nInteractiveModeBase.prototype.setupExtensionShortcuts = function (\n\tthis: InteractiveModeBase,\n\textensionRunner: ExtensionRunner,\n): void {\n\tconst shortcuts = extensionRunner.getShortcuts(this.keybindings.getEffectiveConfig());\n\tif (shortcuts.size === 0) return;\n\n\t// Create a context for shortcut handlers\n\tconst createContext = (): ExtensionContext => ({\n\t\tobserveWorkflowActivity: (observer) => extensionRunner.createContext().observeWorkflowActivity(observer),\n\t\tui: extensionRunner.getUIContext(),\n\t\tmode: \"tui\",\n\t\thasUI: true,\n\t\tcwd: this.sessionManager.getCwd(),\n\t\tsessionManager: this.sessionManager,\n\t\tmodelRegistry: new ModelRegistry(this.session.modelRuntime),\n\t\tmodel: this.session.model,\n\t\t// Copied through the same helper `createExtensionContext` uses: this\n\t\t// hand-built context reaches the same shortcut handlers, so it owes them\n\t\t// the same guarantee, entries included.\n\t\tscopedModels: copyScopedModels(this.session.scopedModels),\n\t\tisIdle: () => !this.session.isStreaming,\n\t\tisProjectTrusted: () => this.session.settingsManager.isProjectTrusted(),\n\t\tsignal: this.session.agent.signal,\n\t\tabort: () => this.session.abort(),\n\t\thasPendingMessages: () => this.session.pendingMessageCount > 0,\n\t\tshutdown: () => {\n\t\t\tthis.shutdownRequested = true;\n\t\t},\n\t\tgetContextUsage: () => this.session.getContextUsage(),\n\t\tcompact: (options) => {\n\t\t\tvoid (async () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await this.session.compact();\n\t\t\t\t\toptions?.onComplete?.(result);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst err = error instanceof Error ? error : new Error(String(error));\n\t\t\t\t\toptions?.onError?.(err);\n\t\t\t\t}\n\t\t\t})();\n\t\t},\n\t\tgetSystemPrompt: () => this.session.systemPrompt,\n\t});\n\n\t// Set up the extension shortcut handler on the default editor\n\tthis.defaultEditor.onExtensionShortcut = (data: string) => {\n\t\tfor (const [shortcutStr, shortcut] of shortcuts) {\n\t\t\t// Cast to KeyId - extension shortcuts use the same format\n\t\t\tif (matchesKey(data, shortcutStr as KeyId)) {\n\t\t\t\t// Run handler async, don't block input\n\t\t\t\tPromise.resolve(shortcut.handler(createContext())).catch((err) => {\n\t\t\t\t\tthis.showError(`Shortcut handler error: ${err instanceof Error ? err.message : String(err)}`);\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n};\n\nInteractiveModeBase.prototype.setExtensionStatus = function (\n\tthis: InteractiveModeBase,\n\tkey: string,\n\ttext: string | undefined,\n): void {\n\tthis.footerDataProvider.setExtensionStatus(key, text);\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.getWorkingLoaderMessage = function (this: InteractiveModeBase): string {\n\treturn this.workingMessage ?? this.defaultWorkingMessage;\n};\n\nInteractiveModeBase.prototype.createWorkingLoader = function (this: InteractiveModeBase): AtomicWorkingLoader {\n\treturn new AtomicWorkingLoader(\n\t\tthis.ui,\n\t\tundefined,\n\t\t(text) => theme.fg(\"muted\", text),\n\t\tthis.getWorkingLoaderMessage(),\n\t\tthis.workingIndicatorOptions,\n\t);\n};\n\nInteractiveModeBase.prototype.clearWorkingLoader = function (this: InteractiveModeBase): void {\n\tthis.loadingAnimation?.stop();\n\tthis.loadingAnimation = undefined;\n\tthis.workingIndicatorEmbedded = false;\n\tthis.setEditorWorkingStatusIndicator?.(undefined);\n\tthis.statusContainer.clear();\n};\n\nInteractiveModeBase.prototype.stopWorkingLoader = function (this: InteractiveModeBase): void {\n\tconst hadLoader = this.loadingAnimation !== undefined;\n\tconst wasEmbedded = this.workingIndicatorEmbedded;\n\tInteractiveModeBase.prototype.clearWorkingLoader.call(this);\n\tif (hadLoader && !wasEmbedded) mountIdleStatus(this.statusContainer, this.settingsManager.getClearOnShrink());\n};\n\nInteractiveModeBase.prototype.showWorkingLoaderNow = function (this: InteractiveModeBase): void {\n\t// Mount the working spinner immediately, regardless of streaming state, so\n\t// there is no visible gap between submitting a prompt and the agent turn\n\t// actually starting. Prompt preflight (extension input hooks, template/skill\n\t// expansion, auth and compaction checks, deferred startup) runs before the\n\t// agent emits `agent_start`, which is otherwise the only place the loader is\n\t// created. Respect `workingVisible` so extensions can still suppress it.\n\tif (!this.workingVisible || this.loadingAnimation) {\n\t\tthis.ui.requestRender();\n\t\treturn;\n\t}\n\tthis.statusContainer.clear();\n\tconst loader = this.createWorkingLoader();\n\tthis.loadingAnimation = loader;\n\tthis.workingIndicatorEmbedded = this.setEditorWorkingStatusIndicator?.(loader) ?? false;\n\tif (!this.workingIndicatorEmbedded) this.statusContainer.addChild(loader);\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.setWorkingVisible = function (this: InteractiveModeBase, visible: boolean): void {\n\tthis.workingVisible = visible;\n\tif (!visible) {\n\t\tthis.stopWorkingLoader();\n\t\tthis.ui.requestRender();\n\t\treturn;\n\t}\n\tif (this.session.isStreaming && !this.loadingAnimation) {\n\t\tthis.statusContainer.clear();\n\t\tconst loader = this.createWorkingLoader();\n\t\tthis.loadingAnimation = loader;\n\t\tthis.workingIndicatorEmbedded = this.setEditorWorkingStatusIndicator?.(loader) ?? false;\n\t\tif (!this.workingIndicatorEmbedded) this.statusContainer.addChild(loader);\n\t}\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.setWorkingIndicator = function (\n\tthis: InteractiveModeBase,\n\toptions?: LoaderIndicatorOptions,\n): void {\n\tthis.workingIndicatorOptions = options;\n\tthis.loadingAnimation?.setIndicator(options);\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.setHiddenThinkingLabel = function (this: InteractiveModeBase, label?: string): void {\n\tthis.hiddenThinkingLabel = label ?? this.defaultHiddenThinkingLabel;\n\tfor (const child of this.chatContainer.children) {\n\t\tif (child instanceof AssistantMessageComponent) {\n\t\t\tchild.setHiddenThinkingLabel(this.hiddenThinkingLabel);\n\t\t}\n\t}\n\tif (this.streamingComponent) {\n\t\tthis.streamingComponent.setHiddenThinkingLabel(this.hiddenThinkingLabel);\n\t}\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.setExtensionWidget = function (\n\tthis: InteractiveModeBase,\n\tkey: string,\n\tcontent: string[] | ((tui: TUI, thm: Theme) => Component & { dispose?(): void }) | undefined,\n\toptions?: ExtensionWidgetOptions,\n): void {\n\tconst placement = options?.placement ?? \"aboveEditor\";\n\tconst removeExisting = (map: Map<string, Component & { dispose?(): void }>) => {\n\t\tconst existing = map.get(key);\n\t\tif (existing?.dispose) existing.dispose();\n\t\tmap.delete(key);\n\t};\n\n\tremoveExisting(this.extensionWidgetsAbove);\n\tremoveExisting(this.extensionWidgetsBelow);\n\n\tif (content === undefined) {\n\t\tthis.renderWidgets();\n\t\treturn;\n\t}\n\n\tlet component: Component & { dispose?(): void };\n\n\tif (Array.isArray(content)) {\n\t\t// Wrap string array in a Container with Text components\n\t\tconst container = new Container();\n\t\tfor (const line of content.slice(0, InteractiveModeBase.MAX_WIDGET_LINES)) {\n\t\t\tcontainer.addChild(new Text(line, 1, 0));\n\t\t}\n\t\tif (content.length > InteractiveModeBase.MAX_WIDGET_LINES) {\n\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"... (widget truncated)\"), 1, 0));\n\t\t}\n\t\tcomponent = container;\n\t} else {\n\t\t// Factory function - create component\n\t\tcomponent = content(this.ui, theme);\n\t}\n\n\tconst targetMap = placement === \"belowEditor\" ? this.extensionWidgetsBelow : this.extensionWidgetsAbove;\n\ttargetMap.set(key, component);\n\tthis.renderWidgets();\n};\n\nInteractiveModeBase.prototype.clearExtensionWidgets = function (this: InteractiveModeBase): void {\n\tconst releasedKeys = new Set<string>();\n\tfor (const [key, widget] of this.extensionWidgetsAbove) {\n\t\twidget.dispose?.();\n\t\treleasedKeys.add(key);\n\t}\n\tfor (const [key, widget] of this.extensionWidgetsBelow) {\n\t\twidget.dispose?.();\n\t\treleasedKeys.add(key);\n\t}\n\tthis.extensionWidgetsAbove.clear();\n\tthis.extensionWidgetsBelow.clear();\n\tthis.renderWidgets();\n\tfor (const key of releasedKeys) this.notifyExtensionWidgetRelease(key);\n};\n\nInteractiveModeBase.prototype.resetExtensionUI = function (this: InteractiveModeBase): void {\n\tif (this.extensionSelector) {\n\t\tthis.hideExtensionSelector();\n\t}\n\tif (this.extensionInput) {\n\t\tthis.hideExtensionInput();\n\t}\n\tif (this.extensionEditor) {\n\t\tthis.hideExtensionEditor();\n\t}\n\tthis.ui.hideOverlay();\n\tthis.clearExtensionTerminalInputListeners();\n\tthis.setExtensionFooter(undefined);\n\tthis.setExtensionHeader(undefined);\n\tthis.clearExtensionWidgets();\n\tthis.footerDataProvider.clearExtensionStatuses();\n\tthis.footer.invalidate();\n\tthis.autocompleteProviderWrappers = [];\n\tthis.setCustomEditorComponent(undefined);\n\tthis.setupAutocompleteProvider();\n\tthis.defaultEditor.onExtensionShortcut = this.interactiveEngineShortcutHandler;\n\tthis.updateTerminalTitle();\n\tthis.workingMessage = undefined;\n\tthis.workingVisible = true;\n\tthis.setWorkingIndicator();\n\tif (this.loadingAnimation) {\n\t\tthis.loadingAnimation.setMessage(`${this.defaultWorkingMessage} (${keyText(\"app.interrupt\")} Interrupt)`);\n\t}\n\tthis.setHiddenThinkingLabel();\n};\n"]}
@@ -5,7 +5,15 @@ InteractiveModeBase.prototype.renderWidgets = function () {
5
5
  if (!this.widgetContainerAbove || !this.widgetContainerBelow)
6
6
  return;
7
7
  this.renderWidgetContainer(this.widgetContainerAbove, this.extensionWidgetsAbove, true, true);
8
- this.renderWidgetContainer(this.widgetContainerBelow, this.extensionWidgetsBelow, false,
8
+ // Engine-owned tasks can mount after a workflow or remount after inspection.
9
+ // Keep their status below the footer's MCP text but before the BACKGROUND card.
10
+ const below = [...this.extensionWidgetsBelow];
11
+ const taskIndex = below.findIndex(([key]) => key === "atomic.background-tasks");
12
+ const workflowIndex = below.findIndex(([key]) => key === "workflow.run");
13
+ if (workflowIndex >= 0 && taskIndex > workflowIndex) {
14
+ below.splice(workflowIndex, 0, below.splice(taskIndex, 1)[0]);
15
+ }
16
+ this.renderWidgetContainer(this.widgetContainerBelow, new Map(below), false,
9
17
  // leadingSpacer: blank line between the footer (model + cwd identity) and
10
18
  // below-editor widgets such as the workflow companion counter, so the
11
19
  // transient run status is visually separated from the session identity
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-extension-widgets.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-extension-widgets.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {\n\ttype Component,\n\ttype Container,\n\ttype ReadonlyFooterDataProvider,\n\tSpacer,\n\ttype Theme,\n\ttype TUI,\n\ttheme,\n} from \"./interactive-mode-deps.ts\";\nimport { isExpandable } from \"./interactive-mode-helpers.ts\";\n\nInteractiveModeBase.prototype.renderWidgets = function (this: InteractiveModeBase): void {\n\tif (!this.widgetContainerAbove || !this.widgetContainerBelow) return;\n\tthis.renderWidgetContainer(this.widgetContainerAbove, this.extensionWidgetsAbove, true, true);\n\tthis.renderWidgetContainer(\n\t\tthis.widgetContainerBelow,\n\t\tthis.extensionWidgetsBelow,\n\t\tfalse,\n\t\t// leadingSpacer: blank line between the footer (model + cwd identity) and\n\t\t// below-editor widgets such as the workflow companion counter, so the\n\t\t// transient run status is visually separated from the session identity\n\t\t// line. Only emitted when a below-editor widget is actually present.\n\t\ttrue,\n\t);\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.renderWidgetContainer = function (\n\tthis: InteractiveModeBase,\n\tcontainer: Container,\n\twidgets: Map<string, Component & { dispose?(): void }>,\n\tspacerWhenEmpty: boolean,\n\tleadingSpacer: boolean,\n): void {\n\tcontainer.clear();\n\n\tif (widgets.size === 0) {\n\t\tif (spacerWhenEmpty) {\n\t\t\tcontainer.addChild(new Spacer(1));\n\t\t}\n\t\treturn;\n\t}\n\n\tif (leadingSpacer) {\n\t\tcontainer.addChild(new Spacer(1));\n\t}\n\tlet firstWidget = true;\n\tfor (const component of widgets.values()) {\n\t\t// Separate stacked widgets (e.g. the async-subagent widget and the\n\t\t// workflow run counter, both belowEditor) with a blank line so each\n\t\t// panel reads as its own block.\n\t\tif (!firstWidget) {\n\t\t\tcontainer.addChild(new Spacer(1));\n\t\t}\n\t\tcontainer.addChild(component);\n\t\tfirstWidget = false;\n\t}\n};\n\nInteractiveModeBase.prototype.setExtensionFooter = function (\n\tthis: InteractiveModeBase,\n\tfactory:\n\t\t| ((tui: TUI, thm: Theme, footerData: ReadonlyFooterDataProvider) => Component & { dispose?(): void })\n\t\t| undefined,\n): void {\n\t// Dispose existing custom footer\n\tif (this.customFooter?.dispose) {\n\t\tthis.customFooter.dispose();\n\t}\n\n\t// Keep the footer in its stable dock slot. The fullscreen layout owns the\n\t// renderer tree, so mutating `ui.children` would not replace the visible\n\t// footer once a layout root is installed.\n\tthis.footerContainer.clear();\n\tif (factory) {\n\t\tthis.customFooter = factory(this.ui, theme, this.footerDataProvider);\n\t\tthis.footerContainer.addChild(this.customFooter);\n\t} else {\n\t\tthis.customFooter = undefined;\n\t\tthis.footerContainer.addChild(this.footer);\n\t}\n\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.setExtensionHeader = function (\n\tthis: InteractiveModeBase,\n\tfactory: ((tui: TUI, thm: Theme) => Component & { dispose?(): void }) | undefined,\n): void {\n\t// Header may not be initialized yet if called during early initialization\n\tif (!this.builtInHeader) {\n\t\treturn;\n\t}\n\n\t// Dispose existing custom header\n\tif (this.customHeader?.dispose) {\n\t\tthis.customHeader.dispose();\n\t}\n\n\t// Find the index of the current header in the header container\n\tconst currentHeader = this.customHeader || this.builtInHeader;\n\tconst index = this.headerContainer.children.indexOf(currentHeader);\n\n\tif (factory) {\n\t\t// Create and add custom header\n\t\tthis.customHeader = factory(this.ui, theme);\n\t\tif (isExpandable(this.customHeader)) {\n\t\t\tthis.customHeader.setExpanded(this.toolOutputExpanded);\n\t\t}\n\t\tif (index !== -1) {\n\t\t\tthis.headerContainer.children[index] = this.customHeader;\n\t\t} else {\n\t\t\t// If not found (e.g. builtInHeader was never added), add at the top\n\t\t\tthis.headerContainer.children.unshift(this.customHeader);\n\t\t}\n\t} else {\n\t\t// Restore built-in header\n\t\tthis.customHeader = undefined;\n\t\tif (isExpandable(this.builtInHeader)) {\n\t\t\tthis.builtInHeader.setExpanded(this.toolOutputExpanded);\n\t\t}\n\t\tif (index !== -1) {\n\t\t\tthis.headerContainer.children[index] = this.builtInHeader;\n\t\t}\n\t}\n\n\tthis.ui.requestRender();\n};\n"]}
1
+ {"version":3,"file":"interactive-extension-widgets.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-extension-widgets.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {\n\ttype Component,\n\ttype Container,\n\ttype ReadonlyFooterDataProvider,\n\tSpacer,\n\ttype Theme,\n\ttype TUI,\n\ttheme,\n} from \"./interactive-mode-deps.ts\";\nimport { isExpandable } from \"./interactive-mode-helpers.ts\";\n\nInteractiveModeBase.prototype.renderWidgets = function (this: InteractiveModeBase): void {\n\tif (!this.widgetContainerAbove || !this.widgetContainerBelow) return;\n\tthis.renderWidgetContainer(this.widgetContainerAbove, this.extensionWidgetsAbove, true, true);\n\t// Engine-owned tasks can mount after a workflow or remount after inspection.\n\t// Keep their status below the footer's MCP text but before the BACKGROUND card.\n\tconst below = [...this.extensionWidgetsBelow];\n\tconst taskIndex = below.findIndex(([key]) => key === \"atomic.background-tasks\");\n\tconst workflowIndex = below.findIndex(([key]) => key === \"workflow.run\");\n\tif (workflowIndex >= 0 && taskIndex > workflowIndex) {\n\t\tbelow.splice(workflowIndex, 0, below.splice(taskIndex, 1)[0]!);\n\t}\n\tthis.renderWidgetContainer(\n\t\tthis.widgetContainerBelow,\n\t\tnew Map(below),\n\t\tfalse,\n\t\t// leadingSpacer: blank line between the footer (model + cwd identity) and\n\t\t// below-editor widgets such as the workflow companion counter, so the\n\t\t// transient run status is visually separated from the session identity\n\t\t// line. Only emitted when a below-editor widget is actually present.\n\t\ttrue,\n\t);\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.renderWidgetContainer = function (\n\tthis: InteractiveModeBase,\n\tcontainer: Container,\n\twidgets: Map<string, Component & { dispose?(): void }>,\n\tspacerWhenEmpty: boolean,\n\tleadingSpacer: boolean,\n): void {\n\tcontainer.clear();\n\n\tif (widgets.size === 0) {\n\t\tif (spacerWhenEmpty) {\n\t\t\tcontainer.addChild(new Spacer(1));\n\t\t}\n\t\treturn;\n\t}\n\n\tif (leadingSpacer) {\n\t\tcontainer.addChild(new Spacer(1));\n\t}\n\tlet firstWidget = true;\n\tfor (const component of widgets.values()) {\n\t\t// Separate stacked widgets (e.g. the async-subagent widget and the\n\t\t// workflow run counter, both belowEditor) with a blank line so each\n\t\t// panel reads as its own block.\n\t\tif (!firstWidget) {\n\t\t\tcontainer.addChild(new Spacer(1));\n\t\t}\n\t\tcontainer.addChild(component);\n\t\tfirstWidget = false;\n\t}\n};\n\nInteractiveModeBase.prototype.setExtensionFooter = function (\n\tthis: InteractiveModeBase,\n\tfactory:\n\t\t| ((tui: TUI, thm: Theme, footerData: ReadonlyFooterDataProvider) => Component & { dispose?(): void })\n\t\t| undefined,\n): void {\n\t// Dispose existing custom footer\n\tif (this.customFooter?.dispose) {\n\t\tthis.customFooter.dispose();\n\t}\n\n\t// Keep the footer in its stable dock slot. The fullscreen layout owns the\n\t// renderer tree, so mutating `ui.children` would not replace the visible\n\t// footer once a layout root is installed.\n\tthis.footerContainer.clear();\n\tif (factory) {\n\t\tthis.customFooter = factory(this.ui, theme, this.footerDataProvider);\n\t\tthis.footerContainer.addChild(this.customFooter);\n\t} else {\n\t\tthis.customFooter = undefined;\n\t\tthis.footerContainer.addChild(this.footer);\n\t}\n\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.setExtensionHeader = function (\n\tthis: InteractiveModeBase,\n\tfactory: ((tui: TUI, thm: Theme) => Component & { dispose?(): void }) | undefined,\n): void {\n\t// Header may not be initialized yet if called during early initialization\n\tif (!this.builtInHeader) {\n\t\treturn;\n\t}\n\n\t// Dispose existing custom header\n\tif (this.customHeader?.dispose) {\n\t\tthis.customHeader.dispose();\n\t}\n\n\t// Find the index of the current header in the header container\n\tconst currentHeader = this.customHeader || this.builtInHeader;\n\tconst index = this.headerContainer.children.indexOf(currentHeader);\n\n\tif (factory) {\n\t\t// Create and add custom header\n\t\tthis.customHeader = factory(this.ui, theme);\n\t\tif (isExpandable(this.customHeader)) {\n\t\t\tthis.customHeader.setExpanded(this.toolOutputExpanded);\n\t\t}\n\t\tif (index !== -1) {\n\t\t\tthis.headerContainer.children[index] = this.customHeader;\n\t\t} else {\n\t\t\t// If not found (e.g. builtInHeader was never added), add at the top\n\t\t\tthis.headerContainer.children.unshift(this.customHeader);\n\t\t}\n\t} else {\n\t\t// Restore built-in header\n\t\tthis.customHeader = undefined;\n\t\tif (isExpandable(this.builtInHeader)) {\n\t\t\tthis.builtInHeader.setExpanded(this.toolOutputExpanded);\n\t\t}\n\t\tif (index !== -1) {\n\t\t\tthis.headerContainer.children[index] = this.builtInHeader;\n\t\t}\n\t}\n\n\tthis.ui.requestRender();\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-input-handling.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-input-handling.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,mBAAmB,EAAoB,MAAM,4BAA4B,CAAC;AAKnF,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CA+B7E"}
1
+ {"version":3,"file":"interactive-input-handling.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-input-handling.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,mBAAmB,EAAoB,MAAM,4BAA4B,CAAC;AAKnF,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CA+B7E"}
@@ -1,7 +1,10 @@
1
1
  import { markLifecycleTiming } from "../../core/lifecycle-timings.js";
2
+ import { getOwnerTaskStore } from "../../core/tasks/owner-store.js";
2
3
  import { yieldToEventLoop } from "../../utils/event-loop.js";
3
4
  import { interactiveEngineNeedsExplicitTermination, interruptBlockedInteractiveEngine, terminateInteractiveEngine, } from "../interactive-engine/extension-ui-bridge.js";
5
+ import { IsolatedInteractiveRuntime } from "../interactive-engine/isolated-runtime.js";
4
6
  import { dismissRemoteProxy, remoteEngineProxyOwner, remoteProxyHandlesCtrlC, } from "../interactive-engine/remote-input-ownership.js";
7
+ import { showTaskInspector } from "../rpc/task-ui-bridge.js";
5
8
  import { StartupIdentityComponent } from "./components/startup-identity.js";
6
9
  import { COMPACTION_ALREADY_IN_PROGRESS_WARNING } from "./interactive-bash-compact.js";
7
10
  import { routeGlobalClearInput } from "./interactive-global-clear.js";
@@ -245,6 +248,22 @@ InteractiveModeBase.prototype.setupEditorSubmitHandler = function () {
245
248
  }
246
249
  try {
247
250
  // Handle commands
251
+ if (text === "/tasks" || text.startsWith("/tasks ")) {
252
+ if (this.runtimeHost instanceof IsolatedInteractiveRuntime) {
253
+ await this.runtimeHost.openTaskInspector(text.slice(6).trim() || undefined);
254
+ return;
255
+ }
256
+ if (!getOwnerTaskStore(this.session))
257
+ this.session.getAgentTaskHost();
258
+ const store = getOwnerTaskStore(this.session);
259
+ this.editor.setText("");
260
+ if (!store) {
261
+ this.showStatus("Launched agents and shells will appear here.");
262
+ return;
263
+ }
264
+ await showTaskInspector({ custom: (factory, options) => this.showExtensionCustom(factory, options) }, store, text.slice(6).trim() || undefined);
265
+ return;
266
+ }
248
267
  if (text === "/settings") {
249
268
  this.showSettingsSelector();
250
269
  this.editor.setText("");