@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
@@ -0,0 +1,25 @@
1
+ import type { WorkflowActivityObserver, WorkflowActivityPublisher, WorkflowActivitySnapshotFrame, WorkflowActivitySubscription, WorkflowEvent, WorkflowObservationDiagnostic } from "./workflow-events.js";
2
+ export declare class WorkflowActivityHub {
3
+ private cursor;
4
+ private availability;
5
+ private roots;
6
+ private observers;
7
+ private failures;
8
+ private disposed;
9
+ private dispatch?;
10
+ private pendingDispatches;
11
+ bindDispatcher(dispatch: (event: WorkflowEvent, isCurrent: () => boolean) => Promise<void>): void;
12
+ private emit;
13
+ getSnapshotFrame(): WorkflowActivitySnapshotFrame;
14
+ observeWorkflowActivity(observer: WorkflowActivityObserver): WorkflowActivitySubscription;
15
+ private disposeLease;
16
+ private enqueue;
17
+ private deliver;
18
+ private broadcast;
19
+ private advance;
20
+ registerWorkflowActivityPublisher(): WorkflowActivityPublisher;
21
+ dispose(): void;
22
+ diagnostics(): readonly WorkflowObservationDiagnostic[];
23
+ private record;
24
+ }
25
+ //# sourceMappingURL=workflow-activity-hub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-activity-hub.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/workflow-activity-hub.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEX,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,EAC7B,4BAA4B,EAC5B,aAAa,EAEb,6BAA6B,EAE7B,MAAM,sBAAsB,CAAC;AAS9B,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,MAAM,CAAmE;IACjF,OAAO,CAAC,YAAY,CAAyD;IAC7E,OAAO,CAAC,KAAK,CAA2C;IACxD,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,CAAoE;IACrF,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,cAAc,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAKhG;IACD,OAAO,CAAC,IAAI;IAWZ,gBAAgB,IAAI,6BAA6B,CAShD;IACD,uBAAuB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,4BAA4B,CAWxF;IACD,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,OAAO;YAWD,OAAO;IAUrB,OAAO,CAAC,SAAS;IAGjB,OAAO,CAAC,OAAO;IAIf,iCAAiC,IAAI,yBAAyB,CAkE7D;IACD,OAAO,IAAI,IAAI,CAMd;IACD,WAAW,IAAI,SAAS,6BAA6B,EAAE,CAEtD;IACD,OAAO,CAAC,MAAM;CAId"}
@@ -0,0 +1,183 @@
1
+ import { randomUUID } from "node:crypto";
2
+ export class WorkflowActivityHub {
3
+ constructor() {
4
+ this.cursor = { epoch: randomUUID(), revision: 0 };
5
+ this.availability = "unavailable";
6
+ this.roots = new Map();
7
+ this.observers = new Set();
8
+ this.failures = [];
9
+ this.disposed = false;
10
+ this.pendingDispatches = [];
11
+ }
12
+ bindDispatcher(dispatch) {
13
+ if (this.disposed)
14
+ return;
15
+ this.dispatch = dispatch;
16
+ for (const deliver of this.pendingDispatches)
17
+ deliver();
18
+ this.pendingDispatches = [];
19
+ }
20
+ emit(event, isCurrent) {
21
+ const copy = structuredClone(event);
22
+ const deliver = () => queueMicrotask(() => {
23
+ if (!isCurrent())
24
+ return;
25
+ void this.dispatch?.(copy, isCurrent).catch(() => this.record("ObserverDeliveryFailed"));
26
+ });
27
+ if (this.dispatch)
28
+ deliver();
29
+ else
30
+ this.pendingDispatches.push(deliver);
31
+ }
32
+ getSnapshotFrame() {
33
+ return this.availability === "ready"
34
+ ? {
35
+ kind: "snapshot",
36
+ cursor: { ...this.cursor },
37
+ availability: "ready",
38
+ roots: [...this.roots.values()].map((root) => ({ ...root })),
39
+ }
40
+ : { kind: "snapshot", cursor: { ...this.cursor }, availability: this.availability };
41
+ }
42
+ observeWorkflowActivity(observer) {
43
+ const lease = { observer, queue: [], delivering: false, active: true };
44
+ if (this.disposed) {
45
+ this.record("ObserverDisposed");
46
+ return { dispose: () => { } };
47
+ }
48
+ if (this.availability !== "ready")
49
+ this.record(this.availability === "recovering" ? "SourceRecovering" : "SourceUnavailable");
50
+ this.observers.add(lease);
51
+ this.enqueue(lease, this.getSnapshotFrame());
52
+ return { dispose: () => this.disposeLease(lease) };
53
+ }
54
+ disposeLease(lease) {
55
+ if (!lease.active)
56
+ return;
57
+ lease.active = false;
58
+ lease.queue = [];
59
+ this.observers.delete(lease);
60
+ this.record("ObserverDisposed");
61
+ }
62
+ enqueue(lease, frame) {
63
+ if (lease.queue.length >= 256) {
64
+ lease.queue = [this.getSnapshotFrame()];
65
+ this.record("ObserverOverflow");
66
+ }
67
+ else
68
+ lease.queue.push(frame);
69
+ if (lease.delivering)
70
+ return;
71
+ lease.delivering = true;
72
+ queueMicrotask(() => {
73
+ void this.deliver(lease);
74
+ });
75
+ }
76
+ async deliver(lease) {
77
+ while (lease.active && lease.queue.length) {
78
+ try {
79
+ await lease.observer(structuredClone(lease.queue.shift()));
80
+ }
81
+ catch {
82
+ this.record("ObserverDeliveryFailed");
83
+ }
84
+ }
85
+ lease.delivering = false;
86
+ }
87
+ broadcast(frame) {
88
+ for (const lease of this.observers)
89
+ this.enqueue(lease, frame);
90
+ }
91
+ advance() {
92
+ this.cursor = { ...this.cursor, revision: this.cursor.revision + 1 };
93
+ return { ...this.cursor };
94
+ }
95
+ registerWorkflowActivityPublisher() {
96
+ let active = !this.disposed;
97
+ if (active) {
98
+ this.cursor = { epoch: randomUUID(), revision: 0 };
99
+ this.availability = "unavailable";
100
+ this.roots.clear();
101
+ this.record("SourceUnavailable");
102
+ this.broadcast(this.getSnapshotFrame());
103
+ }
104
+ const epoch = this.cursor.epoch;
105
+ const isCurrent = () => active && !this.disposed && this.cursor.epoch === epoch;
106
+ const admitted = () => {
107
+ if (isCurrent())
108
+ return true;
109
+ this.record("PublisherFenced");
110
+ return false;
111
+ };
112
+ return {
113
+ publishSnapshot: (input) => {
114
+ if (!admitted())
115
+ return;
116
+ if (input.availability !== "ready")
117
+ this.record(input.availability === "recovering" ? "SourceRecovering" : "SourceUnavailable");
118
+ this.availability = input.availability;
119
+ this.roots = new Map(input.availability === "ready" ? input.roots.map((root) => [root.rootRunId, { ...root }]) : []);
120
+ this.advance();
121
+ this.broadcast(this.getSnapshotFrame());
122
+ },
123
+ publishChanged: (root) => {
124
+ if (!admitted())
125
+ return;
126
+ this.roots.set(root.rootRunId, { ...root });
127
+ const cursor = this.advance();
128
+ this.broadcast({ kind: "changed", cursor, root: { ...root } });
129
+ this.emit({ type: "workflow_activity_changed", cursor, root: { ...root } }, isCurrent);
130
+ },
131
+ publishRemoved: (rootRunId) => {
132
+ if (!admitted())
133
+ return;
134
+ this.roots.delete(rootRunId);
135
+ this.broadcast({ kind: "removed", cursor: this.advance(), rootRunId });
136
+ },
137
+ publishLifecycle: (input) => {
138
+ if (!admitted())
139
+ return;
140
+ const event = { ...input, cursor: this.advance() };
141
+ this.emit(event, isCurrent);
142
+ if (event.target.kind === "stage" && event.target.status === "completed") {
143
+ this.emit({ ...event, type: "workflow_stage_completed", target: { ...event.target, status: "completed" } }, isCurrent);
144
+ }
145
+ },
146
+ publishHeartbeat: (event) => {
147
+ if (admitted())
148
+ this.emit(event, isCurrent);
149
+ },
150
+ dispose: () => {
151
+ if (!active)
152
+ return;
153
+ const current = admitted();
154
+ active = false;
155
+ if (!current)
156
+ return;
157
+ this.availability = "unavailable";
158
+ this.roots.clear();
159
+ this.advance();
160
+ this.record("SourceUnavailable");
161
+ this.broadcast(this.getSnapshotFrame());
162
+ },
163
+ };
164
+ }
165
+ dispose() {
166
+ if (this.disposed)
167
+ return;
168
+ this.disposed = true;
169
+ this.dispatch = undefined;
170
+ this.pendingDispatches = [];
171
+ for (const lease of this.observers)
172
+ this.disposeLease(lease);
173
+ }
174
+ diagnostics() {
175
+ return structuredClone(this.failures);
176
+ }
177
+ record(kind) {
178
+ this.failures.push({ kind, cursor: { ...this.cursor } });
179
+ if (this.failures.length > 256)
180
+ this.failures.shift();
181
+ }
182
+ }
183
+ //# sourceMappingURL=workflow-activity-hub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-activity-hub.js","sourceRoot":"","sources":["../../../src/core/extensions/workflow-activity-hub.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type {\n\tWorkflowActivityFrame,\n\tWorkflowActivityObserver,\n\tWorkflowActivityPublisher,\n\tWorkflowActivitySnapshotFrame,\n\tWorkflowActivitySubscription,\n\tWorkflowEvent,\n\tWorkflowObservationCursor,\n\tWorkflowObservationDiagnostic,\n\tWorkflowRootActivity,\n} from \"./workflow-events.js\";\n\ninterface ObserverLease {\n\tobserver: WorkflowActivityObserver;\n\tqueue: WorkflowActivityFrame[];\n\tdelivering: boolean;\n\tactive: boolean;\n}\n\nexport class WorkflowActivityHub {\n\tprivate cursor: WorkflowObservationCursor = { epoch: randomUUID(), revision: 0 };\n\tprivate availability: \"ready\" | \"recovering\" | \"unavailable\" = \"unavailable\";\n\tprivate roots = new Map<string, WorkflowRootActivity>();\n\tprivate observers = new Set<ObserverLease>();\n\tprivate failures: WorkflowObservationDiagnostic[] = [];\n\tprivate disposed = false;\n\tprivate dispatch?: (event: WorkflowEvent, isCurrent: () => boolean) => Promise<void>;\n\tprivate pendingDispatches: (() => void)[] = [];\n\tbindDispatcher(dispatch: (event: WorkflowEvent, isCurrent: () => boolean) => Promise<void>): void {\n\t\tif (this.disposed) return;\n\t\tthis.dispatch = dispatch;\n\t\tfor (const deliver of this.pendingDispatches) deliver();\n\t\tthis.pendingDispatches = [];\n\t}\n\tprivate emit(event: WorkflowEvent, isCurrent: () => boolean): void {\n\t\tconst copy = structuredClone(event);\n\t\tconst deliver = () =>\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tif (!isCurrent()) return;\n\t\t\t\tvoid this.dispatch?.(copy, isCurrent).catch(() => this.record(\"ObserverDeliveryFailed\"));\n\t\t\t});\n\t\tif (this.dispatch) deliver();\n\t\telse this.pendingDispatches.push(deliver);\n\t}\n\n\tgetSnapshotFrame(): WorkflowActivitySnapshotFrame {\n\t\treturn this.availability === \"ready\"\n\t\t\t? {\n\t\t\t\t\tkind: \"snapshot\",\n\t\t\t\t\tcursor: { ...this.cursor },\n\t\t\t\t\tavailability: \"ready\",\n\t\t\t\t\troots: [...this.roots.values()].map((root) => ({ ...root })),\n\t\t\t\t}\n\t\t\t: { kind: \"snapshot\", cursor: { ...this.cursor }, availability: this.availability };\n\t}\n\tobserveWorkflowActivity(observer: WorkflowActivityObserver): WorkflowActivitySubscription {\n\t\tconst lease: ObserverLease = { observer, queue: [], delivering: false, active: true };\n\t\tif (this.disposed) {\n\t\t\tthis.record(\"ObserverDisposed\");\n\t\t\treturn { dispose: () => {} };\n\t\t}\n\t\tif (this.availability !== \"ready\")\n\t\t\tthis.record(this.availability === \"recovering\" ? \"SourceRecovering\" : \"SourceUnavailable\");\n\t\tthis.observers.add(lease);\n\t\tthis.enqueue(lease, this.getSnapshotFrame());\n\t\treturn { dispose: () => this.disposeLease(lease) };\n\t}\n\tprivate disposeLease(lease: ObserverLease): void {\n\t\tif (!lease.active) return;\n\t\tlease.active = false;\n\t\tlease.queue = [];\n\t\tthis.observers.delete(lease);\n\t\tthis.record(\"ObserverDisposed\");\n\t}\n\tprivate enqueue(lease: ObserverLease, frame: WorkflowActivityFrame): void {\n\t\tif (lease.queue.length >= 256) {\n\t\t\tlease.queue = [this.getSnapshotFrame()];\n\t\t\tthis.record(\"ObserverOverflow\");\n\t\t} else lease.queue.push(frame);\n\t\tif (lease.delivering) return;\n\t\tlease.delivering = true;\n\t\tqueueMicrotask(() => {\n\t\t\tvoid this.deliver(lease);\n\t\t});\n\t}\n\tprivate async deliver(lease: ObserverLease): Promise<void> {\n\t\twhile (lease.active && lease.queue.length) {\n\t\t\ttry {\n\t\t\t\tawait lease.observer(structuredClone(lease.queue.shift()!));\n\t\t\t} catch {\n\t\t\t\tthis.record(\"ObserverDeliveryFailed\");\n\t\t\t}\n\t\t}\n\t\tlease.delivering = false;\n\t}\n\tprivate broadcast(frame: WorkflowActivityFrame): void {\n\t\tfor (const lease of this.observers) this.enqueue(lease, frame);\n\t}\n\tprivate advance(): WorkflowObservationCursor {\n\t\tthis.cursor = { ...this.cursor, revision: this.cursor.revision + 1 };\n\t\treturn { ...this.cursor };\n\t}\n\tregisterWorkflowActivityPublisher(): WorkflowActivityPublisher {\n\t\tlet active = !this.disposed;\n\t\tif (active) {\n\t\t\tthis.cursor = { epoch: randomUUID(), revision: 0 };\n\t\t\tthis.availability = \"unavailable\";\n\t\t\tthis.roots.clear();\n\t\t\tthis.record(\"SourceUnavailable\");\n\t\t\tthis.broadcast(this.getSnapshotFrame());\n\t\t}\n\t\tconst epoch = this.cursor.epoch;\n\t\tconst isCurrent = () => active && !this.disposed && this.cursor.epoch === epoch;\n\t\tconst admitted = () => {\n\t\t\tif (isCurrent()) return true;\n\t\t\tthis.record(\"PublisherFenced\");\n\t\t\treturn false;\n\t\t};\n\t\treturn {\n\t\t\tpublishSnapshot: (input) => {\n\t\t\t\tif (!admitted()) return;\n\t\t\t\tif (input.availability !== \"ready\")\n\t\t\t\t\tthis.record(input.availability === \"recovering\" ? \"SourceRecovering\" : \"SourceUnavailable\");\n\t\t\t\tthis.availability = input.availability;\n\t\t\t\tthis.roots = new Map(\n\t\t\t\t\tinput.availability === \"ready\" ? input.roots.map((root) => [root.rootRunId, { ...root }]) : [],\n\t\t\t\t);\n\t\t\t\tthis.advance();\n\t\t\t\tthis.broadcast(this.getSnapshotFrame());\n\t\t\t},\n\t\t\tpublishChanged: (root) => {\n\t\t\t\tif (!admitted()) return;\n\t\t\t\tthis.roots.set(root.rootRunId, { ...root });\n\t\t\t\tconst cursor = this.advance();\n\t\t\t\tthis.broadcast({ kind: \"changed\", cursor, root: { ...root } });\n\t\t\t\tthis.emit({ type: \"workflow_activity_changed\", cursor, root: { ...root } }, isCurrent);\n\t\t\t},\n\t\t\tpublishRemoved: (rootRunId) => {\n\t\t\t\tif (!admitted()) return;\n\t\t\t\tthis.roots.delete(rootRunId);\n\t\t\t\tthis.broadcast({ kind: \"removed\", cursor: this.advance(), rootRunId });\n\t\t\t},\n\t\t\tpublishLifecycle: (input) => {\n\t\t\t\tif (!admitted()) return;\n\t\t\t\tconst event = { ...input, cursor: this.advance() };\n\t\t\t\tthis.emit(event, isCurrent);\n\t\t\t\tif (event.target.kind === \"stage\" && event.target.status === \"completed\") {\n\t\t\t\t\tthis.emit(\n\t\t\t\t\t\t{ ...event, type: \"workflow_stage_completed\", target: { ...event.target, status: \"completed\" } },\n\t\t\t\t\t\tisCurrent,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\tpublishHeartbeat: (event) => {\n\t\t\t\tif (admitted()) this.emit(event, isCurrent);\n\t\t\t},\n\t\t\tdispose: () => {\n\t\t\t\tif (!active) return;\n\t\t\t\tconst current = admitted();\n\t\t\t\tactive = false;\n\t\t\t\tif (!current) return;\n\t\t\t\tthis.availability = \"unavailable\";\n\t\t\t\tthis.roots.clear();\n\t\t\t\tthis.advance();\n\t\t\t\tthis.record(\"SourceUnavailable\");\n\t\t\t\tthis.broadcast(this.getSnapshotFrame());\n\t\t\t},\n\t\t};\n\t}\n\tdispose(): void {\n\t\tif (this.disposed) return;\n\t\tthis.disposed = true;\n\t\tthis.dispatch = undefined;\n\t\tthis.pendingDispatches = [];\n\t\tfor (const lease of this.observers) this.disposeLease(lease);\n\t}\n\tdiagnostics(): readonly WorkflowObservationDiagnostic[] {\n\t\treturn structuredClone(this.failures);\n\t}\n\tprivate record(kind: WorkflowObservationDiagnostic[\"kind\"]): void {\n\t\tthis.failures.push({ kind, cursor: { ...this.cursor } });\n\t\tif (this.failures.length > 256) this.failures.shift();\n\t}\n}\n"]}
@@ -0,0 +1,118 @@
1
+ export type WorkflowActivityState = "working" | "idle" | "blocked";
2
+ export type WorkflowActivityReason = "executing" | "automatic_continuation" | "retrying" | "stopping" | "awaiting_input" | "manual_intervention" | "paused" | "quiescent";
3
+ export type WorkflowRunStatus = "pending" | "running" | "paused" | "completed" | "skipped" | "cancelled" | "blocked" | "failed" | "killed";
4
+ export type WorkflowStageStatus = "pending" | "running" | "awaiting_input" | "paused" | "blocked" | "completed" | "failed" | "skipped";
5
+ export type WorkflowToolNodeStatus = "pending" | "running" | "completed" | "failed" | "cached" | "cancelled";
6
+ export type WorkflowControlAction = "interrupt" | "quit" | "kill" | "pause" | "resume";
7
+ export interface WorkflowRootActivity {
8
+ rootRunId: string;
9
+ ownerSessionId: string;
10
+ state: WorkflowActivityState;
11
+ reason: WorkflowActivityReason;
12
+ activeExecutionCount: number;
13
+ actionableBlockCount: number;
14
+ needsAttention: boolean;
15
+ }
16
+ export interface WorkflowObservationCursor {
17
+ epoch: string;
18
+ revision: number;
19
+ }
20
+ export type WorkflowActivitySnapshotInput = {
21
+ availability: "ready";
22
+ roots: readonly WorkflowRootActivity[];
23
+ } | {
24
+ availability: "recovering" | "unavailable";
25
+ };
26
+ export type WorkflowActivitySnapshotFrame = WorkflowActivitySnapshotInput & {
27
+ kind: "snapshot";
28
+ cursor: WorkflowObservationCursor;
29
+ };
30
+ export type WorkflowActivityFrame = WorkflowActivitySnapshotFrame | {
31
+ kind: "changed";
32
+ cursor: WorkflowObservationCursor;
33
+ root: WorkflowRootActivity;
34
+ } | {
35
+ kind: "removed";
36
+ cursor: WorkflowObservationCursor;
37
+ rootRunId: string;
38
+ };
39
+ export type WorkflowActivityObserver = (frame: WorkflowActivityFrame) => void | Promise<void>;
40
+ export interface WorkflowActivitySubscription {
41
+ dispose(): void;
42
+ }
43
+ export type WorkflowLifecycleDelivery = "live" | "replay";
44
+ export type WorkflowLifecycleTarget = {
45
+ kind: "run";
46
+ runId: string;
47
+ previousStatus?: WorkflowRunStatus;
48
+ status: WorkflowRunStatus;
49
+ action?: WorkflowControlAction;
50
+ } | {
51
+ kind: "stage";
52
+ runId: string;
53
+ stageId: string;
54
+ stageName: string;
55
+ previousStatus?: WorkflowStageStatus;
56
+ status: WorkflowStageStatus;
57
+ } | {
58
+ kind: "tool";
59
+ runId: string;
60
+ toolNodeId: string;
61
+ toolName: string;
62
+ previousStatus?: WorkflowToolNodeStatus;
63
+ status: WorkflowToolNodeStatus;
64
+ } | {
65
+ kind: "prompt";
66
+ runId: string;
67
+ stageId?: string;
68
+ promptId: string;
69
+ status: "opened" | "answered" | "cancelled";
70
+ };
71
+ export interface WorkflowLifecycleEvent {
72
+ type: "workflow_lifecycle";
73
+ eventId: string;
74
+ cursor: WorkflowObservationCursor;
75
+ runId: string;
76
+ rootRunId: string;
77
+ ownerSessionId: string;
78
+ occurredAt: number;
79
+ observedAt: number;
80
+ delivery: WorkflowLifecycleDelivery;
81
+ target: WorkflowLifecycleTarget;
82
+ attribution?: "user" | "agent" | "scheduler" | "recovery" | "unknown";
83
+ }
84
+ export interface WorkflowStageCompletedEvent extends Omit<WorkflowLifecycleEvent, "type" | "target"> {
85
+ type: "workflow_stage_completed";
86
+ target: Extract<WorkflowLifecycleTarget, {
87
+ kind: "stage";
88
+ }> & {
89
+ status: "completed";
90
+ };
91
+ }
92
+ export interface WorkflowActivityChangedEvent {
93
+ type: "workflow_activity_changed";
94
+ cursor: WorkflowObservationCursor;
95
+ root: WorkflowRootActivity;
96
+ }
97
+ export interface WorkflowHeartbeatEvent {
98
+ type: "workflow_heartbeat";
99
+ runId: string;
100
+ rootRunId: string;
101
+ ownerSessionId: string;
102
+ scheduledAt: number;
103
+ intervalMinutes: number;
104
+ }
105
+ export type WorkflowEvent = WorkflowLifecycleEvent | WorkflowStageCompletedEvent | WorkflowActivityChangedEvent | WorkflowHeartbeatEvent;
106
+ export interface WorkflowActivityPublisher {
107
+ publishSnapshot(input: WorkflowActivitySnapshotInput): void;
108
+ publishChanged(root: WorkflowRootActivity): void;
109
+ publishRemoved(rootRunId: string): void;
110
+ publishLifecycle(event: Omit<WorkflowLifecycleEvent, "cursor">): void;
111
+ publishHeartbeat(event: WorkflowHeartbeatEvent): void;
112
+ dispose(): void;
113
+ }
114
+ export interface WorkflowObservationDiagnostic {
115
+ kind: "ObserverDisposed" | "SourceRecovering" | "SourceUnavailable" | "ObserverDeliveryFailed" | "ObserverOverflow" | "PublisherFenced";
116
+ cursor: WorkflowObservationCursor;
117
+ }
118
+ //# sourceMappingURL=workflow-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-events.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/workflow-events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=workflow-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-events.js","sourceRoot":"","sources":["../../../src/core/extensions/workflow-events.ts"],"names":[],"mappings":"","sourcesContent":["export type WorkflowActivityState = \"working\" | \"idle\" | \"blocked\";\nexport type WorkflowActivityReason =\n\t| \"executing\"\n\t| \"automatic_continuation\"\n\t| \"retrying\"\n\t| \"stopping\"\n\t| \"awaiting_input\"\n\t| \"manual_intervention\"\n\t| \"paused\"\n\t| \"quiescent\";\n\n// Kept in sync with workflows/shared/store-types without a host runtime dependency.\nexport type WorkflowRunStatus =\n\t| \"pending\"\n\t| \"running\"\n\t| \"paused\"\n\t| \"completed\"\n\t| \"skipped\"\n\t| \"cancelled\"\n\t| \"blocked\"\n\t| \"failed\"\n\t| \"killed\";\nexport type WorkflowStageStatus =\n\t| \"pending\"\n\t| \"running\"\n\t| \"awaiting_input\"\n\t| \"paused\"\n\t| \"blocked\"\n\t| \"completed\"\n\t| \"failed\"\n\t| \"skipped\";\nexport type WorkflowToolNodeStatus = \"pending\" | \"running\" | \"completed\" | \"failed\" | \"cached\" | \"cancelled\";\nexport type WorkflowControlAction = \"interrupt\" | \"quit\" | \"kill\" | \"pause\" | \"resume\";\n\nexport interface WorkflowRootActivity {\n\trootRunId: string;\n\townerSessionId: string;\n\tstate: WorkflowActivityState;\n\treason: WorkflowActivityReason;\n\tactiveExecutionCount: number;\n\tactionableBlockCount: number;\n\tneedsAttention: boolean;\n}\nexport interface WorkflowObservationCursor {\n\tepoch: string;\n\trevision: number;\n}\nexport type WorkflowActivitySnapshotInput =\n\t| { availability: \"ready\"; roots: readonly WorkflowRootActivity[] }\n\t| { availability: \"recovering\" | \"unavailable\" };\nexport type WorkflowActivitySnapshotFrame = WorkflowActivitySnapshotInput & {\n\tkind: \"snapshot\";\n\tcursor: WorkflowObservationCursor;\n};\nexport type WorkflowActivityFrame =\n\t| WorkflowActivitySnapshotFrame\n\t| { kind: \"changed\"; cursor: WorkflowObservationCursor; root: WorkflowRootActivity }\n\t| { kind: \"removed\"; cursor: WorkflowObservationCursor; rootRunId: string };\nexport type WorkflowActivityObserver = (frame: WorkflowActivityFrame) => void | Promise<void>;\nexport interface WorkflowActivitySubscription {\n\tdispose(): void;\n}\nexport type WorkflowLifecycleDelivery = \"live\" | \"replay\";\nexport type WorkflowLifecycleTarget =\n\t| {\n\t\t\tkind: \"run\";\n\t\t\trunId: string;\n\t\t\tpreviousStatus?: WorkflowRunStatus;\n\t\t\tstatus: WorkflowRunStatus;\n\t\t\taction?: WorkflowControlAction;\n\t }\n\t| {\n\t\t\tkind: \"stage\";\n\t\t\trunId: string;\n\t\t\tstageId: string;\n\t\t\tstageName: string;\n\t\t\tpreviousStatus?: WorkflowStageStatus;\n\t\t\tstatus: WorkflowStageStatus;\n\t }\n\t| {\n\t\t\tkind: \"tool\";\n\t\t\trunId: string;\n\t\t\ttoolNodeId: string;\n\t\t\ttoolName: string;\n\t\t\tpreviousStatus?: WorkflowToolNodeStatus;\n\t\t\tstatus: WorkflowToolNodeStatus;\n\t }\n\t| { kind: \"prompt\"; runId: string; stageId?: string; promptId: string; status: \"opened\" | \"answered\" | \"cancelled\" };\nexport interface WorkflowLifecycleEvent {\n\ttype: \"workflow_lifecycle\";\n\teventId: string;\n\tcursor: WorkflowObservationCursor;\n\trunId: string;\n\trootRunId: string;\n\townerSessionId: string;\n\toccurredAt: number;\n\tobservedAt: number;\n\tdelivery: WorkflowLifecycleDelivery;\n\ttarget: WorkflowLifecycleTarget;\n\tattribution?: \"user\" | \"agent\" | \"scheduler\" | \"recovery\" | \"unknown\";\n}\nexport interface WorkflowStageCompletedEvent extends Omit<WorkflowLifecycleEvent, \"type\" | \"target\"> {\n\ttype: \"workflow_stage_completed\";\n\ttarget: Extract<WorkflowLifecycleTarget, { kind: \"stage\" }> & { status: \"completed\" };\n}\nexport interface WorkflowActivityChangedEvent {\n\ttype: \"workflow_activity_changed\";\n\tcursor: WorkflowObservationCursor;\n\troot: WorkflowRootActivity;\n}\nexport interface WorkflowHeartbeatEvent {\n\ttype: \"workflow_heartbeat\";\n\trunId: string;\n\trootRunId: string;\n\townerSessionId: string;\n\tscheduledAt: number;\n\tintervalMinutes: number;\n}\nexport type WorkflowEvent =\n\t| WorkflowLifecycleEvent\n\t| WorkflowStageCompletedEvent\n\t| WorkflowActivityChangedEvent\n\t| WorkflowHeartbeatEvent;\nexport interface WorkflowActivityPublisher {\n\tpublishSnapshot(input: WorkflowActivitySnapshotInput): void;\n\tpublishChanged(root: WorkflowRootActivity): void;\n\tpublishRemoved(rootRunId: string): void;\n\tpublishLifecycle(event: Omit<WorkflowLifecycleEvent, \"cursor\">): void;\n\tpublishHeartbeat(event: WorkflowHeartbeatEvent): void;\n\tdispose(): void;\n}\nexport interface WorkflowObservationDiagnostic {\n\tkind:\n\t\t| \"ObserverDisposed\"\n\t\t| \"SourceRecovering\"\n\t\t| \"SourceUnavailable\"\n\t\t| \"ObserverDeliveryFailed\"\n\t\t| \"ObserverOverflow\"\n\t\t| \"PublisherFenced\";\n\tcursor: WorkflowObservationCursor;\n}\n"]}
@@ -34,15 +34,19 @@ export declare class FooterDataProvider {
34
34
  private refreshPending;
35
35
  private disposed;
36
36
  private gitWatchersStarted;
37
+ private cwdGeneration;
38
+ private watcherGeneration;
39
+ private readonly cwdBranches;
37
40
  constructor(cwd: string);
38
41
  /** Start post-frame git branch watching. Branch discovery remains lazy for first render. */
39
42
  startGitWatcher(): void;
40
- /** Current git branch, null if not in repo, "detached" if detached HEAD */
41
- getGitBranch(): string | null;
43
+ /** Current git branch for the displayed session cwd, defaulting to this provider's cwd. */
44
+ getGitBranch(cwd?: string): string | null;
42
45
  /** Extension status texts set via ctx.ui.setStatus() */
43
46
  getExtensionStatuses(): ReadonlyMap<string, string>;
44
- /** Subscribe to git branch changes. Returns unsubscribe function. */
45
- onBranchChange(callback: () => void): () => void;
47
+ /** Subscribe to branch changes. An explicit cwd retains its watcher until unsubscribe. */
48
+ onBranchChange(callback: () => void, cwd?: string): () => void;
49
+ private createCwdProvider;
46
50
  /** Internal: set extension status */
47
51
  setExtensionStatus(key: string, text: string | undefined): void;
48
52
  /** Internal: clear extension statuses */
@@ -1 +1 @@
1
- {"version":3,"file":"footer-data-provider.d.ts","sourceRoot":"","sources":["../../src/core/footer-data-provider.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,QAAQ,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAgCzD;AAiDD;;;GAGG;AACH,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAO;IAEhD,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,iBAAiB,CAAuB;IAChD,OAAO,CAAC,qBAAqB,CAA4D;IACzF,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,yBAAyB,CAA0B;IAC3D,OAAO,CAAC,sBAAsB,CAAuB;IACrD,OAAO,CAAC,6BAA6B,CAAuB;IAC5D,OAAO,CAAC,mCAAmC,CAA4D;IACvG,OAAO,CAAC,qBAAqB,CAAyB;IACtD,OAAO,CAAC,sBAAsB,CAAK;IACnC,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,oBAAoB,CAA8C;IAC1E,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,kBAAkB,CAAS;IAEnC,YAAY,GAAG,EAAE,MAAM,EAEtB;IAED,4FAA4F;IAC5F,eAAe,IAAI,IAAI,CAKtB;IAED,2EAA2E;IAC3E,YAAY,IAAI,MAAM,GAAG,IAAI,CAM5B;IAED,wDAAwD;IACxD,oBAAoB,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAElD;IAED,qEAAqE;IACrE,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAG/C;IAED,qCAAqC;IACrC,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAM9D;IAED,yCAAyC;IACzC,sBAAsB,IAAI,IAAI,CAE7B;IAED,4EAA4E;IAC5E,yBAAyB,IAAI,MAAM,CAElC;IAED,gDAAgD;IAChD,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE7C;IAED,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAmBxB;IAED,wBAAwB;IACxB,OAAO,IAAI,IAAI,CASd;IAED,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,eAAe;YAYT,qBAAqB;IA0BnC,OAAO,CAAC,oBAAoB;YAcd,qBAAqB;IAgBnC,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,0BAA0B;IAiBlC,OAAO,CAAC,gCAAgC;IAexC,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,iCAAiC;IAczC,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,4BAA4B;IASpC,OAAO,CAAC,eAAe;CAqEvB;AAED,yGAAyG;AACzG,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAC5C,kBAAkB,EAClB,cAAc,GAAG,sBAAsB,GAAG,2BAA2B,GAAG,gBAAgB,CACxF,CAAC"}
1
+ {"version":3,"file":"footer-data-provider.d.ts","sourceRoot":"","sources":["../../src/core/footer-data-provider.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,QAAQ,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAgCzD;AAiDD;;;GAGG;AACH,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAO;IAEhD,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,iBAAiB,CAAuB;IAChD,OAAO,CAAC,qBAAqB,CAA4D;IACzF,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,yBAAyB,CAA0B;IAC3D,OAAO,CAAC,sBAAsB,CAAuB;IACrD,OAAO,CAAC,6BAA6B,CAAuB;IAC5D,OAAO,CAAC,mCAAmC,CAA4D;IACvG,OAAO,CAAC,qBAAqB,CAAyB;IACtD,OAAO,CAAC,sBAAsB,CAAK;IACnC,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,oBAAoB,CAA8C;IAC1E,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2E;IAEvG,YAAY,GAAG,EAAE,MAAM,EAEtB;IAED,4FAA4F;IAC5F,eAAe,IAAI,IAAI,CAQtB;IAED,2FAA2F;IAC3F,YAAY,CAAC,GAAG,SAAW,GAAG,MAAM,GAAG,IAAI,CAkB1C;IAED,wDAAwD;IACxD,oBAAoB,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAElD;IAED,0FAA0F;IAC1F,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAwB7D;IAED,OAAO,CAAC,iBAAiB;IAOzB,qCAAqC;IACrC,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAM9D;IAED,yCAAyC;IACzC,sBAAsB,IAAI,IAAI,CAE7B;IAED,4EAA4E;IAC5E,yBAAyB,IAAI,MAAM,CAElC;IAED,gDAAgD;IAChD,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE7C;IAED,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CA2BxB;IAED,wBAAwB;IACxB,OAAO,IAAI,IAAI,CAad;IAED,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,eAAe;YAYT,qBAAqB;IA2BnC,OAAO,CAAC,oBAAoB;YAcd,qBAAqB;IAgBnC,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,0BAA0B;IAiBlC,OAAO,CAAC,gCAAgC;IAexC,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,iCAAiC;IAczC,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,4BAA4B;IASpC,OAAO,CAAC,eAAe;CA8EvB;AAED,yGAAyG;AACzG,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAC5C,kBAAkB,EAClB,cAAc,GAAG,sBAAsB,GAAG,2BAA2B,GAAG,gBAAgB,CACxF,CAAC"}
@@ -109,6 +109,9 @@ export class FooterDataProvider {
109
109
  this.refreshPending = false;
110
110
  this.disposed = false;
111
111
  this.gitWatchersStarted = false;
112
+ this.cwdGeneration = 0;
113
+ this.watcherGeneration = 0;
114
+ this.cwdBranches = new Map();
112
115
  this.cwd = cwd;
113
116
  }
114
117
  /** Start post-frame git branch watching. Branch discovery remains lazy for first render. */
@@ -118,9 +121,28 @@ export class FooterDataProvider {
118
121
  this.gitWatchersStarted = true;
119
122
  this.ensureGitPaths();
120
123
  this.setupGitWatcher();
124
+ for (const { provider } of this.cwdBranches.values()) {
125
+ if (provider !== this)
126
+ provider.startGitWatcher();
127
+ }
121
128
  }
122
- /** Current git branch, null if not in repo, "detached" if detached HEAD */
123
- getGitBranch() {
129
+ /** Current git branch for the displayed session cwd, defaulting to this provider's cwd. */
130
+ getGitBranch(cwd = this.cwd) {
131
+ if (this.disposed)
132
+ return null;
133
+ if (cwd !== this.cwd) {
134
+ const leased = this.cwdBranches.get(cwd);
135
+ if (leased)
136
+ return leased.provider.getGitBranch();
137
+ // A read without a viewer must not retain watchers or cached child providers.
138
+ const provider = new FooterDataProvider(cwd);
139
+ try {
140
+ return provider.getGitBranch();
141
+ }
142
+ finally {
143
+ provider.dispose();
144
+ }
145
+ }
124
146
  if (this.cachedBranch === undefined) {
125
147
  this.ensureGitPaths();
126
148
  this.cachedBranch = this.resolveGitBranchSync();
@@ -131,10 +153,41 @@ export class FooterDataProvider {
131
153
  getExtensionStatuses() {
132
154
  return this.extensionStatuses;
133
155
  }
134
- /** Subscribe to git branch changes. Returns unsubscribe function. */
135
- onBranchChange(callback) {
136
- this.branchChangeCallbacks.add(callback);
137
- return () => this.branchChangeCallbacks.delete(callback);
156
+ /** Subscribe to branch changes. An explicit cwd retains its watcher until unsubscribe. */
157
+ onBranchChange(callback, cwd) {
158
+ if (this.disposed)
159
+ return () => { };
160
+ if (cwd === undefined) {
161
+ this.branchChangeCallbacks.add(callback);
162
+ return () => this.branchChangeCallbacks.delete(callback);
163
+ }
164
+ let entry = this.cwdBranches.get(cwd);
165
+ if (!entry) {
166
+ entry = { provider: cwd === this.cwd ? this : this.createCwdProvider(cwd), references: 0 };
167
+ this.cwdBranches.set(cwd, entry);
168
+ }
169
+ entry.references++;
170
+ const listener = () => callback();
171
+ this.branchChangeCallbacks.add(listener);
172
+ let released = false;
173
+ return () => {
174
+ if (released)
175
+ return;
176
+ released = true;
177
+ this.branchChangeCallbacks.delete(listener);
178
+ if (--entry.references === 0 && this.cwdBranches.get(cwd) === entry) {
179
+ this.cwdBranches.delete(cwd);
180
+ if (entry.provider !== this)
181
+ entry.provider.dispose();
182
+ }
183
+ };
184
+ }
185
+ createCwdProvider(cwd) {
186
+ const provider = new FooterDataProvider(cwd);
187
+ provider.onBranchChange(() => this.notifyBranchChange());
188
+ if (this.gitWatchersStarted)
189
+ provider.startGitWatcher();
190
+ return provider;
138
191
  }
139
192
  /** Internal: set extension status */
140
193
  setExtensionStatus(key, text) {
@@ -158,11 +211,20 @@ export class FooterDataProvider {
158
211
  this.availableProviderCount = count;
159
212
  }
160
213
  setCwd(cwd) {
161
- if (this.cwd === cwd) {
214
+ if (this.disposed || this.cwd === cwd) {
162
215
  return;
163
216
  }
164
217
  const restartGitWatcher = this.gitWatchersStarted;
218
+ const previous = this.cwdBranches.get(this.cwd);
219
+ if (previous)
220
+ previous.provider = this.createCwdProvider(this.cwd);
221
+ const next = this.cwdBranches.get(cwd);
222
+ if (next) {
223
+ next.provider.dispose();
224
+ next.provider = this;
225
+ }
165
226
  this.cwd = cwd;
227
+ this.cwdGeneration++;
166
228
  if (this.refreshTimer) {
167
229
  clearTimeout(this.refreshTimer);
168
230
  this.refreshTimer = null;
@@ -186,6 +248,11 @@ export class FooterDataProvider {
186
248
  this.clearGitWatchers();
187
249
  this.gitWatchersStarted = false;
188
250
  this.branchChangeCallbacks.clear();
251
+ for (const { provider } of this.cwdBranches.values()) {
252
+ if (provider !== this)
253
+ provider.dispose();
254
+ }
255
+ this.cwdBranches.clear();
189
256
  }
190
257
  ensureGitPaths() {
191
258
  if (this.gitPaths !== undefined)
@@ -216,9 +283,10 @@ export class FooterDataProvider {
216
283
  return;
217
284
  }
218
285
  this.refreshInFlight = true;
286
+ const generation = this.cwdGeneration;
219
287
  try {
220
288
  const nextBranch = await this.resolveGitBranchAsync();
221
- if (this.disposed)
289
+ if (this.disposed || generation !== this.cwdGeneration)
222
290
  return;
223
291
  if (this.cachedBranch !== undefined && this.cachedBranch !== nextBranch) {
224
292
  this.cachedBranch = nextBranch;
@@ -268,6 +336,7 @@ export class FooterDataProvider {
268
336
  }
269
337
  }
270
338
  clearGitWatchers() {
339
+ this.watcherGeneration++;
271
340
  closeWatcher(this.headWatcher);
272
341
  this.headWatcher = null;
273
342
  if (this.headWatchFilePath && this.headWatchFileListener) {
@@ -291,7 +360,7 @@ export class FooterDataProvider {
291
360
  }
292
361
  }
293
362
  installHeadPollingFallback() {
294
- if (!this.gitPaths || this.headWatchFilePath || this.headWatchFileListener) {
363
+ if (this.disposed || !this.gitPaths || this.headWatchFilePath || this.headWatchFileListener) {
295
364
  return;
296
365
  }
297
366
  this.headWatchFilePath = this.gitPaths.headPath;
@@ -305,7 +374,7 @@ export class FooterDataProvider {
305
374
  watchFile(this.headWatchFilePath, { interval: 1000 }, this.headWatchFileListener);
306
375
  }
307
376
  installReftableTablesListPolling(tablesListPath) {
308
- if (this.reftableTablesListWatchFileListener) {
377
+ if (this.disposed || this.reftableTablesListWatchFileListener) {
309
378
  return;
310
379
  }
311
380
  this.reftableTablesListWatchFileListener = (current, previous) => {
@@ -360,7 +429,11 @@ export class FooterDataProvider {
360
429
  this.scheduleRefresh();
361
430
  }
362
431
  setupGitWatcher() {
432
+ if (this.disposed || !this.gitWatchersStarted)
433
+ return;
363
434
  this.clearGitWatchers();
435
+ const generation = this.watcherGeneration;
436
+ const isCurrent = () => !this.disposed && generation === this.watcherGeneration;
364
437
  this.ensureGitPaths();
365
438
  if (!this.gitPaths)
366
439
  return;
@@ -369,10 +442,14 @@ export class FooterDataProvider {
369
442
  // Git uses atomic writes (write temp, rename over HEAD), which changes the inode.
370
443
  // fs.watch on a file stops working after the inode changes.
371
444
  this.headWatcher = watchWithErrorHandler(dirname(this.gitPaths.headPath), (_eventType, filename) => {
445
+ if (!isCurrent())
446
+ return;
372
447
  if (!filename || filename === "HEAD") {
373
448
  this.scheduleRefresh();
374
449
  }
375
450
  }, (error) => {
451
+ if (!isCurrent())
452
+ return;
376
453
  if (isSafeFsWatchPathError(error)) {
377
454
  this.installHeadPollingFallback();
378
455
  return;
@@ -392,8 +469,12 @@ export class FooterDataProvider {
392
469
  this.reftableTablesListPath = join(reftableDir, "tables.list");
393
470
  this.reftableTablesListFingerprint = this.readReftableTablesListFingerprint();
394
471
  this.reftableWatcher = watchWithErrorHandler(reftableDir, (_eventType, filename) => {
472
+ if (!isCurrent())
473
+ return;
395
474
  this.handleReftableDirectoryEvent(filename);
396
475
  }, (error) => {
476
+ if (!isCurrent())
477
+ return;
397
478
  if (isSafeFsWatchPathError(error)) {
398
479
  return;
399
480
  }
@@ -402,15 +483,20 @@ export class FooterDataProvider {
402
483
  const tablesListPath = this.reftableTablesListPath;
403
484
  if (tablesListPath && existsSync(tablesListPath)) {
404
485
  this.reftableTablesListWatcher = watchWithErrorHandler(tablesListPath, () => {
486
+ if (!isCurrent())
487
+ return;
405
488
  this.scheduleReftableRefresh();
406
489
  }, (error) => {
490
+ if (!isCurrent())
491
+ return;
407
492
  if (isSafeFsWatchPathError(error)) {
408
493
  this.installReftableTablesListPolling(tablesListPath);
409
494
  return;
410
495
  }
411
496
  this.handleGitWatcherError();
412
497
  });
413
- this.installReftableTablesListPolling(tablesListPath);
498
+ if (isCurrent())
499
+ this.installReftableTablesListPolling(tablesListPath);
414
500
  }
415
501
  }
416
502
  }