@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,225 @@
1
+ import { getExtensionContextOwner, publishExtensionContextEffect } from "../../core/extensions/runner-context.js";
2
+ import { SettingsManager } from "../../core/settings-manager.js";
3
+ import { OwnerTaskStore } from "../../core/tasks/owner-store.js";
4
+ import { deriveSessionActivity } from "./activity.js";
5
+ import { captureHerdrEnvironment } from "./environment.js";
6
+ import { claimPaneReporting, releasePaneReporting, reportPaneActivity, retirePaneReporting, } from "./pane-owner.js";
7
+ function enabled(ctx) {
8
+ const settings = SettingsManager.create(ctx.cwd, undefined, { projectTrusted: ctx.isProjectTrusted() });
9
+ return (settings.getProjectSettings().herdr?.enabled ?? settings.getGlobalSettings().herdr?.enabled) !== false;
10
+ }
11
+ export function createHerdrExtension(options = {}) {
12
+ return (pi) => {
13
+ if (!captureHerdrEnvironment(options.env ?? process.env))
14
+ return;
15
+ let owner;
16
+ // Supplied loaders can share closures across sessions and overlapping reload runners.
17
+ let boundSessionManager;
18
+ let boundRunner;
19
+ const retiredRunners = new WeakSet();
20
+ const ownsBinding = (ctx) => boundSessionManager !== undefined && getExtensionContextOwner(ctx) === boundRunner;
21
+ let lease;
22
+ let taskStore;
23
+ let unsubscribeTasks;
24
+ let agentRunning = false;
25
+ let openPromptCount = 0;
26
+ let availability = "unavailable";
27
+ const roots = new Map();
28
+ const acknowledgedBlocks = new Map();
29
+ const updateRoot = (root) => {
30
+ const acknowledged = acknowledgedBlocks.get(root.rootRunId);
31
+ if (acknowledged &&
32
+ (root.state !== acknowledged.state ||
33
+ root.reason !== acknowledged.reason ||
34
+ root.actionableBlockCount !== acknowledged.actionableBlockCount ||
35
+ root.activeExecutionCount !== acknowledged.activeExecutionCount ||
36
+ root.needsAttention !== acknowledged.needsAttention))
37
+ acknowledgedBlocks.delete(root.rootRunId);
38
+ roots.set(root.rootRunId, root);
39
+ };
40
+ const seenDiagnostics = new Set();
41
+ let generation = 0;
42
+ const diagnostic = (value) => {
43
+ const key = `${value.kind}:${value.owner ?? ""}`;
44
+ if (seenDiagnostics.has(key))
45
+ return;
46
+ seenDiagnostics.add(key);
47
+ if (options.diagnostic)
48
+ options.diagnostic(value);
49
+ else
50
+ console.error(`[Herdr] ${value.kind}${value.owner ? `: deferring to ${value.owner}` : ""}`);
51
+ };
52
+ const tasksRunning = () => taskStore?.tasks.some((task) => task.execution.kind !== "settled") ?? false;
53
+ const report = () => {
54
+ if (!owner)
55
+ return;
56
+ const activity = deriveSessionActivity({
57
+ agentRunning,
58
+ tasksRunning: tasksRunning(),
59
+ openPromptCount,
60
+ roots: [...roots.values()].filter((root) => !acknowledgedBlocks.has(root.rootRunId)),
61
+ availability,
62
+ });
63
+ if (activity)
64
+ reportPaneActivity(owner, activity);
65
+ };
66
+ const start = async (ctx) => {
67
+ const runner = getExtensionContextOwner(ctx);
68
+ if (retiredRunners.has(runner))
69
+ return;
70
+ if (boundSessionManager && ctx.sessionManager !== boundSessionManager)
71
+ return;
72
+ const environment = captureHerdrEnvironment(options.env ?? process.env);
73
+ if (!environment || ctx.mode !== "tui" || !ctx.hasUI || ctx.subagentPolicy || ctx.orchestrationContext)
74
+ return;
75
+ if (!(options.enabled ?? enabled)(ctx))
76
+ return;
77
+ const conflict = ctx
78
+ .getExtensionPaths?.()
79
+ .find((path) => /herdr-atomic-reporter|herdr-agent-state/.test(path));
80
+ if (conflict) {
81
+ diagnostic({ kind: "unsupported", owner: conflict });
82
+ return;
83
+ }
84
+ if (boundRunner && boundRunner !== runner)
85
+ retiredRunners.add(boundRunner);
86
+ boundRunner = runner;
87
+ boundSessionManager = ctx.sessionManager;
88
+ const current = ++generation;
89
+ lease?.dispose();
90
+ lease = undefined;
91
+ unsubscribeTasks?.();
92
+ taskStore?.dispose();
93
+ unsubscribeTasks = undefined;
94
+ taskStore = undefined;
95
+ openPromptCount = 0;
96
+ roots.clear();
97
+ acknowledgedBlocks.clear();
98
+ availability = "unavailable";
99
+ const claimed = await claimPaneReporting(environment, { id: ctx.sessionManager.getSessionId(), path: ctx.sessionManager.getSessionFile() }, { ...options, diagnostic });
100
+ if (current !== generation) {
101
+ await releasePaneReporting(claimed);
102
+ return;
103
+ }
104
+ owner = claimed;
105
+ agentRunning = !ctx.isIdle();
106
+ const taskHost = ctx.getAgentTaskHost?.();
107
+ if (taskHost) {
108
+ const { supervisor, owner: taskOwner } = taskHost.ownerBinding;
109
+ taskStore = new OwnerTaskStore(supervisor, taskOwner);
110
+ taskStore.connect();
111
+ let running = tasksRunning();
112
+ unsubscribeTasks = taskStore.subscribe(() => {
113
+ if (current !== generation)
114
+ return;
115
+ const next = tasksRunning();
116
+ if (next === running)
117
+ return;
118
+ running = next;
119
+ report();
120
+ });
121
+ }
122
+ lease = ctx.observeWorkflowActivity((frame) => {
123
+ if (current !== generation)
124
+ return;
125
+ if (frame.kind === "snapshot") {
126
+ availability = frame.availability;
127
+ roots.clear();
128
+ if (frame.availability === "ready") {
129
+ for (const root of frame.roots)
130
+ updateRoot(root);
131
+ for (const id of acknowledgedBlocks.keys())
132
+ if (!roots.has(id))
133
+ acknowledgedBlocks.delete(id);
134
+ }
135
+ }
136
+ else if (frame.kind === "changed")
137
+ updateRoot(frame.root);
138
+ else {
139
+ roots.delete(frame.rootRunId);
140
+ acknowledgedBlocks.delete(frame.rootRunId);
141
+ }
142
+ report();
143
+ });
144
+ };
145
+ pi.on("session_start", (_event, ctx) => publishExtensionContextEffect(ctx, () => start(ctx)));
146
+ pi.on("input", (event, ctx) => {
147
+ if (!ownsBinding(ctx) || event.source !== "interactive")
148
+ return;
149
+ let changed = false;
150
+ for (const root of roots.values()) {
151
+ if (root.state === "blocked" && !acknowledgedBlocks.has(root.rootRunId)) {
152
+ acknowledgedBlocks.set(root.rootRunId, { ...root });
153
+ changed = true;
154
+ }
155
+ }
156
+ if (changed)
157
+ report();
158
+ });
159
+ pi.on("workflow_lifecycle", (event, ctx) => {
160
+ if (!ownsBinding(ctx) || event.delivery !== "live")
161
+ return;
162
+ const target = event.target;
163
+ const newBlock = target.kind === "prompt"
164
+ ? target.status === "opened"
165
+ : (target.kind === "run" || target.kind === "stage") &&
166
+ (target.status === "blocked" || target.status === "awaiting_input") &&
167
+ target.previousStatus !== target.status;
168
+ if (newBlock && acknowledgedBlocks.delete(event.rootRunId))
169
+ report();
170
+ });
171
+ pi.on("agent_start", (_event, ctx) => {
172
+ if (!ownsBinding(ctx))
173
+ return;
174
+ agentRunning = true;
175
+ report();
176
+ });
177
+ pi.on("agent_settled", (_event, ctx) => {
178
+ if (!ownsBinding(ctx))
179
+ return;
180
+ agentRunning = false;
181
+ report();
182
+ });
183
+ pi.on("ui_prompt_start", (_event, ctx) => {
184
+ if (!ownsBinding(ctx))
185
+ return;
186
+ openPromptCount++;
187
+ report();
188
+ });
189
+ pi.on("ui_prompt_end", (_event, ctx) => {
190
+ if (!ownsBinding(ctx))
191
+ return;
192
+ openPromptCount = Math.max(0, openPromptCount - 1);
193
+ report();
194
+ });
195
+ pi.on("session_shutdown", async (event, ctx) => {
196
+ if (!ownsBinding(ctx))
197
+ return;
198
+ // A non-quit stop may restart this runner, unless a successor supersedes it first.
199
+ if (event.reason === "quit")
200
+ retiredRunners.add(boundRunner);
201
+ generation++;
202
+ lease?.dispose();
203
+ lease = undefined;
204
+ unsubscribeTasks?.();
205
+ taskStore?.dispose();
206
+ unsubscribeTasks = undefined;
207
+ taskStore = undefined;
208
+ const previous = owner;
209
+ owner = undefined;
210
+ // Clear before awaiting transport: a successor can bind while retirement drains,
211
+ // and this shutdown's completion must never clear that newer binding.
212
+ boundSessionManager = undefined;
213
+ if (previous) {
214
+ if (event.reason === "quit")
215
+ await releasePaneReporting(previous);
216
+ else
217
+ await retirePaneReporting(previous);
218
+ }
219
+ });
220
+ };
221
+ }
222
+ export default function herdrExtension(pi) {
223
+ createHerdrExtension()(pi);
224
+ }
225
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/herdr/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { getExtensionContextOwner, publishExtensionContextEffect } from \"../../core/extensions/runner-context.ts\";\nimport type { ExtensionAPI, ExtensionContext, ExtensionFactory } from \"../../core/extensions/types.ts\";\nimport type { WorkflowRootActivity } from \"../../core/extensions/workflow-events.js\";\nimport { SettingsManager } from \"../../core/settings-manager.ts\";\nimport { OwnerTaskStore } from \"../../core/tasks/owner-store.js\";\nimport { deriveSessionActivity } from \"./activity.js\";\nimport { captureHerdrEnvironment } from \"./environment.js\";\nimport {\n\tclaimPaneReporting,\n\ttype PaneOwner,\n\ttype PaneReportingOptions,\n\treleasePaneReporting,\n\treportPaneActivity,\n\tretirePaneReporting,\n} from \"./pane-owner.js\";\nimport type { HerdrDiagnostic } from \"./transport.js\";\n\nexport interface HerdrExtensionOptions extends PaneReportingOptions {\n\tenv?: NodeJS.ProcessEnv;\n\tenabled?: (ctx: ExtensionContext) => boolean;\n}\n\nfunction enabled(ctx: ExtensionContext): boolean {\n\tconst settings = SettingsManager.create(ctx.cwd, undefined, { projectTrusted: ctx.isProjectTrusted() });\n\treturn (settings.getProjectSettings().herdr?.enabled ?? settings.getGlobalSettings().herdr?.enabled) !== false;\n}\n\nexport function createHerdrExtension(options: HerdrExtensionOptions = {}): ExtensionFactory {\n\treturn (pi) => {\n\t\tif (!captureHerdrEnvironment(options.env ?? process.env)) return;\n\t\tlet owner: PaneOwner | undefined;\n\t\t// Supplied loaders can share closures across sessions and overlapping reload runners.\n\t\tlet boundSessionManager: ExtensionContext[\"sessionManager\"] | undefined;\n\t\tlet boundRunner: object | undefined;\n\t\tconst retiredRunners = new WeakSet<object>();\n\t\tconst ownsBinding = (ctx: ExtensionContext) =>\n\t\t\tboundSessionManager !== undefined && getExtensionContextOwner(ctx) === boundRunner;\n\t\tlet lease: { dispose(): void } | undefined;\n\t\tlet taskStore: OwnerTaskStore | undefined;\n\t\tlet unsubscribeTasks: (() => void) | undefined;\n\t\tlet agentRunning = false;\n\t\tlet openPromptCount = 0;\n\t\tlet availability: \"ready\" | \"unavailable\" | \"recovering\" = \"unavailable\";\n\t\tconst roots = new Map<string, WorkflowRootActivity>();\n\t\tconst acknowledgedBlocks = new Map<string, WorkflowRootActivity>();\n\t\tconst updateRoot = (root: WorkflowRootActivity) => {\n\t\t\tconst acknowledged = acknowledgedBlocks.get(root.rootRunId);\n\t\t\tif (\n\t\t\t\tacknowledged &&\n\t\t\t\t(root.state !== acknowledged.state ||\n\t\t\t\t\troot.reason !== acknowledged.reason ||\n\t\t\t\t\troot.actionableBlockCount !== acknowledged.actionableBlockCount ||\n\t\t\t\t\troot.activeExecutionCount !== acknowledged.activeExecutionCount ||\n\t\t\t\t\troot.needsAttention !== acknowledged.needsAttention)\n\t\t\t)\n\t\t\t\tacknowledgedBlocks.delete(root.rootRunId);\n\t\t\troots.set(root.rootRunId, root);\n\t\t};\n\t\tconst seenDiagnostics = new Set<string>();\n\t\tlet generation = 0;\n\t\tconst diagnostic = (value: HerdrDiagnostic) => {\n\t\t\tconst key = `${value.kind}:${value.owner ?? \"\"}`;\n\t\t\tif (seenDiagnostics.has(key)) return;\n\t\t\tseenDiagnostics.add(key);\n\t\t\tif (options.diagnostic) options.diagnostic(value);\n\t\t\telse console.error(`[Herdr] ${value.kind}${value.owner ? `: deferring to ${value.owner}` : \"\"}`);\n\t\t};\n\t\tconst tasksRunning = () => taskStore?.tasks.some((task) => task.execution.kind !== \"settled\") ?? false;\n\t\tconst report = () => {\n\t\t\tif (!owner) return;\n\t\t\tconst activity = deriveSessionActivity({\n\t\t\t\tagentRunning,\n\t\t\t\ttasksRunning: tasksRunning(),\n\t\t\t\topenPromptCount,\n\t\t\t\troots: [...roots.values()].filter((root) => !acknowledgedBlocks.has(root.rootRunId)),\n\t\t\t\tavailability,\n\t\t\t});\n\t\t\tif (activity) reportPaneActivity(owner, activity);\n\t\t};\n\t\tconst start = async (ctx: ExtensionContext) => {\n\t\t\tconst runner = getExtensionContextOwner(ctx);\n\t\t\tif (retiredRunners.has(runner)) return;\n\t\t\tif (boundSessionManager && ctx.sessionManager !== boundSessionManager) return;\n\t\t\tconst environment = captureHerdrEnvironment(options.env ?? process.env);\n\t\t\tif (!environment || ctx.mode !== \"tui\" || !ctx.hasUI || ctx.subagentPolicy || ctx.orchestrationContext) return;\n\t\t\tif (!(options.enabled ?? enabled)(ctx)) return;\n\t\t\tconst conflict = ctx\n\t\t\t\t.getExtensionPaths?.()\n\t\t\t\t.find((path) => /herdr-atomic-reporter|herdr-agent-state/.test(path));\n\t\t\tif (conflict) {\n\t\t\t\tdiagnostic({ kind: \"unsupported\", owner: conflict });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (boundRunner && boundRunner !== runner) retiredRunners.add(boundRunner);\n\t\t\tboundRunner = runner;\n\t\t\tboundSessionManager = ctx.sessionManager;\n\t\t\tconst current = ++generation;\n\t\t\tlease?.dispose();\n\t\t\tlease = undefined;\n\t\t\tunsubscribeTasks?.();\n\t\t\ttaskStore?.dispose();\n\t\t\tunsubscribeTasks = undefined;\n\t\t\ttaskStore = undefined;\n\t\t\topenPromptCount = 0;\n\t\t\troots.clear();\n\t\t\tacknowledgedBlocks.clear();\n\t\t\tavailability = \"unavailable\";\n\t\t\tconst claimed = await claimPaneReporting(\n\t\t\t\tenvironment,\n\t\t\t\t{ id: ctx.sessionManager.getSessionId(), path: ctx.sessionManager.getSessionFile() },\n\t\t\t\t{ ...options, diagnostic },\n\t\t\t);\n\t\t\tif (current !== generation) {\n\t\t\t\tawait releasePaneReporting(claimed);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\towner = claimed;\n\t\t\tagentRunning = !ctx.isIdle();\n\t\t\tconst taskHost = ctx.getAgentTaskHost?.();\n\t\t\tif (taskHost) {\n\t\t\t\tconst { supervisor, owner: taskOwner } = taskHost.ownerBinding;\n\t\t\t\ttaskStore = new OwnerTaskStore(supervisor, taskOwner);\n\t\t\t\ttaskStore.connect();\n\t\t\t\tlet running = tasksRunning();\n\t\t\t\tunsubscribeTasks = taskStore.subscribe(() => {\n\t\t\t\t\tif (current !== generation) return;\n\t\t\t\t\tconst next = tasksRunning();\n\t\t\t\t\tif (next === running) return;\n\t\t\t\t\trunning = next;\n\t\t\t\t\treport();\n\t\t\t\t});\n\t\t\t}\n\t\t\tlease = ctx.observeWorkflowActivity((frame) => {\n\t\t\t\tif (current !== generation) return;\n\t\t\t\tif (frame.kind === \"snapshot\") {\n\t\t\t\t\tavailability = frame.availability;\n\t\t\t\t\troots.clear();\n\t\t\t\t\tif (frame.availability === \"ready\") {\n\t\t\t\t\t\tfor (const root of frame.roots) updateRoot(root);\n\t\t\t\t\t\tfor (const id of acknowledgedBlocks.keys()) if (!roots.has(id)) acknowledgedBlocks.delete(id);\n\t\t\t\t\t}\n\t\t\t\t} else if (frame.kind === \"changed\") updateRoot(frame.root);\n\t\t\t\telse {\n\t\t\t\t\troots.delete(frame.rootRunId);\n\t\t\t\t\tacknowledgedBlocks.delete(frame.rootRunId);\n\t\t\t\t}\n\t\t\t\treport();\n\t\t\t});\n\t\t};\n\t\tpi.on(\"session_start\", (_event, ctx) => publishExtensionContextEffect(ctx, () => start(ctx)));\n\t\tpi.on(\"input\", (event, ctx) => {\n\t\t\tif (!ownsBinding(ctx) || event.source !== \"interactive\") return;\n\t\t\tlet changed = false;\n\t\t\tfor (const root of roots.values()) {\n\t\t\t\tif (root.state === \"blocked\" && !acknowledgedBlocks.has(root.rootRunId)) {\n\t\t\t\t\tacknowledgedBlocks.set(root.rootRunId, { ...root });\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (changed) report();\n\t\t});\n\t\tpi.on(\"workflow_lifecycle\", (event, ctx) => {\n\t\t\tif (!ownsBinding(ctx) || event.delivery !== \"live\") return;\n\t\t\tconst target = event.target;\n\t\t\tconst newBlock =\n\t\t\t\ttarget.kind === \"prompt\"\n\t\t\t\t\t? target.status === \"opened\"\n\t\t\t\t\t: (target.kind === \"run\" || target.kind === \"stage\") &&\n\t\t\t\t\t\t(target.status === \"blocked\" || target.status === \"awaiting_input\") &&\n\t\t\t\t\t\ttarget.previousStatus !== target.status;\n\t\t\tif (newBlock && acknowledgedBlocks.delete(event.rootRunId)) report();\n\t\t});\n\t\tpi.on(\"agent_start\", (_event, ctx) => {\n\t\t\tif (!ownsBinding(ctx)) return;\n\t\t\tagentRunning = true;\n\t\t\treport();\n\t\t});\n\t\tpi.on(\"agent_settled\", (_event, ctx) => {\n\t\t\tif (!ownsBinding(ctx)) return;\n\t\t\tagentRunning = false;\n\t\t\treport();\n\t\t});\n\t\tpi.on(\"ui_prompt_start\", (_event, ctx) => {\n\t\t\tif (!ownsBinding(ctx)) return;\n\t\t\topenPromptCount++;\n\t\t\treport();\n\t\t});\n\t\tpi.on(\"ui_prompt_end\", (_event, ctx) => {\n\t\t\tif (!ownsBinding(ctx)) return;\n\t\t\topenPromptCount = Math.max(0, openPromptCount - 1);\n\t\t\treport();\n\t\t});\n\t\tpi.on(\"session_shutdown\", async (event, ctx) => {\n\t\t\tif (!ownsBinding(ctx)) return;\n\t\t\t// A non-quit stop may restart this runner, unless a successor supersedes it first.\n\t\t\tif (event.reason === \"quit\") retiredRunners.add(boundRunner!);\n\t\t\tgeneration++;\n\t\t\tlease?.dispose();\n\t\t\tlease = undefined;\n\t\t\tunsubscribeTasks?.();\n\t\t\ttaskStore?.dispose();\n\t\t\tunsubscribeTasks = undefined;\n\t\t\ttaskStore = undefined;\n\t\t\tconst previous = owner;\n\t\t\towner = undefined;\n\t\t\t// Clear before awaiting transport: a successor can bind while retirement drains,\n\t\t\t// and this shutdown's completion must never clear that newer binding.\n\t\t\tboundSessionManager = undefined;\n\t\t\tif (previous) {\n\t\t\t\tif (event.reason === \"quit\") await releasePaneReporting(previous);\n\t\t\t\telse await retirePaneReporting(previous);\n\t\t\t}\n\t\t});\n\t};\n}\n\nexport default function herdrExtension(pi: ExtensionAPI): void {\n\tcreateHerdrExtension()(pi);\n}\n"]}
@@ -0,0 +1,30 @@
1
+ import type { SessionActivity } from "./activity.js";
2
+ import type { HerdrEnvironment } from "./environment.js";
3
+ import { type HerdrDiagnostic } from "./transport.js";
4
+ export interface PaneIdentity {
5
+ id: string;
6
+ path?: string;
7
+ }
8
+ export interface PaneReportingOptions {
9
+ clock?: () => number;
10
+ timeoutMs?: number;
11
+ diagnostic?: (diagnostic: HerdrDiagnostic) => void;
12
+ }
13
+ export interface PaneOwner {
14
+ environment: HerdrEnvironment;
15
+ identity: PaneIdentity;
16
+ options: PaneReportingOptions;
17
+ status: "active" | "releasing" | "retired";
18
+ seq: number;
19
+ identitySent: boolean;
20
+ pending?: SessionActivity;
21
+ flight?: Promise<void>;
22
+ release?: Promise<void>;
23
+ flush(): Promise<void>;
24
+ }
25
+ export declare function claimPaneReporting(environment: HerdrEnvironment, identity: PaneIdentity, options?: PaneReportingOptions): Promise<PaneOwner>;
26
+ export declare function reportPaneActivity(owner: PaneOwner, activity: SessionActivity): void;
27
+ /** Fence and drain a local reporter without unregistering the still-running agent. */
28
+ export declare function retirePaneReporting(owner: PaneOwner): Promise<void>;
29
+ export declare function releasePaneReporting(owner: PaneOwner): Promise<void>;
30
+ //# sourceMappingURL=pane-owner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pane-owner.d.ts","sourceRoot":"","sources":["../../../src/extensions/herdr/pane-owner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEpE,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AACD,MAAM,WAAW,oBAAoB;IACpC,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,CAAC;CACnD;AACD,MAAM,WAAW,SAAS;IACzB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAmCD,wBAAsB,kBAAkB,CACvC,WAAW,EAAE,gBAAgB,EAC7B,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,oBAAyB,GAChC,OAAO,CAAC,SAAS,CAAC,CAoBpB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI,CAwBpF;AAED,sFAAsF;AACtF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE"}
@@ -0,0 +1,111 @@
1
+ import { isAbsolute } from "node:path";
2
+ import { executeHerdr } from "./transport.js";
3
+ // Host module lifetime outlives inline extension factories and runner generations.
4
+ const owners = new Map();
5
+ let highWater = 0;
6
+ function diagnostic(owner, value) {
7
+ owner.options.diagnostic?.(value);
8
+ }
9
+ /** Every admitted command, including release, takes a fresh strictly increasing sequence: Herdr ignores equal or older `--seq`. */
10
+ function allocateSequence(owner) {
11
+ owner.seq = highWater = Math.max((owner.options.clock ?? Date.now)(), highWater + 1);
12
+ }
13
+ function argv(owner, command) {
14
+ return [
15
+ "pane",
16
+ command,
17
+ owner.environment.paneId,
18
+ "--source",
19
+ "custom:atomic",
20
+ "--agent",
21
+ "atomic",
22
+ "--seq",
23
+ String(owner.seq),
24
+ ];
25
+ }
26
+ async function send(owner, args) {
27
+ const result = await executeHerdr(owner.environment, args, owner.options.timeoutMs);
28
+ if (result)
29
+ diagnostic(owner, result);
30
+ return result === undefined;
31
+ }
32
+ export async function claimPaneReporting(environment, identity, options = {}) {
33
+ let previous;
34
+ do {
35
+ previous = owners.get(environment.paneId);
36
+ if (previous)
37
+ await retirePaneReporting(previous);
38
+ } while (owners.get(environment.paneId) !== previous);
39
+ const owner = {
40
+ environment,
41
+ identity,
42
+ options,
43
+ status: "active",
44
+ // Inherit the registration even if recovery produces no successor report before quit.
45
+ seq: previous?.seq ?? 0,
46
+ identitySent: false,
47
+ async flush() {
48
+ await this.flight;
49
+ },
50
+ };
51
+ owners.set(environment.paneId, owner);
52
+ return owner;
53
+ }
54
+ export function reportPaneActivity(owner, activity) {
55
+ if (owner.status !== "active" || owners.get(owner.environment.paneId) !== owner) {
56
+ diagnostic(owner, { kind: "stale_owner" });
57
+ return;
58
+ }
59
+ owner.pending = activity;
60
+ if (owner.flight)
61
+ return;
62
+ owner.flight = (async () => {
63
+ while (owner.pending && owner.status === "active") {
64
+ const next = owner.pending;
65
+ owner.pending = undefined;
66
+ allocateSequence(owner);
67
+ const args = [...argv(owner, "report-agent"), "--state", next.state];
68
+ if (next.message)
69
+ args.push("--message", next.message);
70
+ if (!owner.identitySent) {
71
+ args.push("--agent-session-id", owner.identity.id);
72
+ if (owner.identity.path && isAbsolute(owner.identity.path))
73
+ args.push("--agent-session-path", owner.identity.path);
74
+ }
75
+ if (await send(owner, args))
76
+ owner.identitySent = true;
77
+ }
78
+ })().finally(() => {
79
+ owner.flight = undefined;
80
+ });
81
+ }
82
+ /** Fence and drain a local reporter without unregistering the still-running agent. */
83
+ export function retirePaneReporting(owner) {
84
+ return stopPaneReporting(owner, false);
85
+ }
86
+ export function releasePaneReporting(owner) {
87
+ return stopPaneReporting(owner, true);
88
+ }
89
+ function stopPaneReporting(owner, releaseRegistration) {
90
+ if (owner.release)
91
+ return owner.release;
92
+ if (owners.get(owner.environment.paneId) !== owner || owner.status !== "active") {
93
+ diagnostic(owner, { kind: "stale_owner" });
94
+ return Promise.resolve();
95
+ }
96
+ owner.status = "releasing";
97
+ owner.pending = undefined;
98
+ owner.release = (async () => {
99
+ await owner.flight;
100
+ // A failed command may still have claimed authority before its response was lost.
101
+ if (releaseRegistration && owner.seq > 0) {
102
+ allocateSequence(owner);
103
+ await send(owner, argv(owner, "release-agent"));
104
+ }
105
+ owner.status = "retired";
106
+ if (releaseRegistration && owners.get(owner.environment.paneId) === owner)
107
+ owners.delete(owner.environment.paneId);
108
+ })();
109
+ return owner.release;
110
+ }
111
+ //# sourceMappingURL=pane-owner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pane-owner.js","sourceRoot":"","sources":["../../../src/extensions/herdr/pane-owner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC,OAAO,EAAE,YAAY,EAAwB,MAAM,gBAAgB,CAAC;AAwBpE,mFAAmF;AACnF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;AAC5C,IAAI,SAAS,GAAG,CAAC,CAAC;AAElB,SAAS,UAAU,CAAC,KAAgB,EAAE,KAAsB;IAC3D,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,mIAAmI;AACnI,SAAS,gBAAgB,CAAC,KAAgB;IACzC,KAAK,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,IAAI,CAAC,KAAgB,EAAE,OAAe;IAC9C,OAAO;QACN,MAAM;QACN,OAAO;QACP,KAAK,CAAC,WAAW,CAAC,MAAM;QACxB,UAAU;QACV,eAAe;QACf,SAAS;QACT,QAAQ;QACR,OAAO;QACP,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;KACjB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,KAAgB,EAAE,IAAc;IACnD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpF,IAAI,MAAM;QAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACtC,OAAO,MAAM,KAAK,SAAS,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACvC,WAA6B,EAC7B,QAAsB,EACtB,OAAO,GAAyB,EAAE;IAElC,IAAI,QAA+B,CAAC;IACpC,GAAG,CAAC;QACH,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,QAAQ;YAAE,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC,QAAQ,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE;IACtD,MAAM,KAAK,GAAc;QACxB,WAAW;QACX,QAAQ;QACR,OAAO;QACP,MAAM,EAAE,QAAQ;QAChB,sFAAsF;QACtF,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QACvB,YAAY,EAAE,KAAK;QACnB,KAAK,CAAC,KAAK;YACV,MAAM,IAAI,CAAC,MAAM,CAAC;QACnB,CAAC;KACD,CAAC;IACF,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAgB,EAAE,QAAyB;IAC7E,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC;QACjF,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QAC3C,OAAO;IACR,CAAC;IACD,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;IACzB,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO;IACzB,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;QAC1B,OAAO,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACnD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC;YAC3B,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;YAC1B,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxB,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACrE,IAAI,IAAI,CAAC,OAAO;gBAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACvD,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACnD,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACzD,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;gBAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;QACxD,CAAC;IACF,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;QACjB,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,mBAAmB,CAAC,KAAgB;IACnD,OAAO,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAgB;IACpD,OAAO,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAgB,EAAE,mBAA4B;IACxE,IAAI,KAAK,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IACxC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACjF,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QAC3C,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IACD,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;IAC3B,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;IAC1B,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;QAC3B,MAAM,KAAK,CAAC,MAAM,CAAC;QACnB,kFAAkF;QAClF,IAAI,mBAAmB,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YAC1C,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxB,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;QACzB,IAAI,mBAAmB,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,KAAK;YACxE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC,CAAC,EAAE,CAAC;IACL,OAAO,KAAK,CAAC,OAAO,CAAC;AACtB,CAAC","sourcesContent":["import { isAbsolute } from \"node:path\";\nimport type { SessionActivity } from \"./activity.js\";\nimport type { HerdrEnvironment } from \"./environment.js\";\nimport { executeHerdr, type HerdrDiagnostic } from \"./transport.js\";\n\nexport interface PaneIdentity {\n\tid: string;\n\tpath?: string;\n}\nexport interface PaneReportingOptions {\n\tclock?: () => number;\n\ttimeoutMs?: number;\n\tdiagnostic?: (diagnostic: HerdrDiagnostic) => void;\n}\nexport interface PaneOwner {\n\tenvironment: HerdrEnvironment;\n\tidentity: PaneIdentity;\n\toptions: PaneReportingOptions;\n\tstatus: \"active\" | \"releasing\" | \"retired\";\n\tseq: number;\n\tidentitySent: boolean;\n\tpending?: SessionActivity;\n\tflight?: Promise<void>;\n\trelease?: Promise<void>;\n\tflush(): Promise<void>;\n}\n\n// Host module lifetime outlives inline extension factories and runner generations.\nconst owners = new Map<string, PaneOwner>();\nlet highWater = 0;\n\nfunction diagnostic(owner: PaneOwner, value: HerdrDiagnostic): void {\n\towner.options.diagnostic?.(value);\n}\n\n/** Every admitted command, including release, takes a fresh strictly increasing sequence: Herdr ignores equal or older `--seq`. */\nfunction allocateSequence(owner: PaneOwner): void {\n\towner.seq = highWater = Math.max((owner.options.clock ?? Date.now)(), highWater + 1);\n}\n\nfunction argv(owner: PaneOwner, command: string): string[] {\n\treturn [\n\t\t\"pane\",\n\t\tcommand,\n\t\towner.environment.paneId,\n\t\t\"--source\",\n\t\t\"custom:atomic\",\n\t\t\"--agent\",\n\t\t\"atomic\",\n\t\t\"--seq\",\n\t\tString(owner.seq),\n\t];\n}\n\nasync function send(owner: PaneOwner, args: string[]): Promise<boolean> {\n\tconst result = await executeHerdr(owner.environment, args, owner.options.timeoutMs);\n\tif (result) diagnostic(owner, result);\n\treturn result === undefined;\n}\n\nexport async function claimPaneReporting(\n\tenvironment: HerdrEnvironment,\n\tidentity: PaneIdentity,\n\toptions: PaneReportingOptions = {},\n): Promise<PaneOwner> {\n\tlet previous: PaneOwner | undefined;\n\tdo {\n\t\tprevious = owners.get(environment.paneId);\n\t\tif (previous) await retirePaneReporting(previous);\n\t} while (owners.get(environment.paneId) !== previous);\n\tconst owner: PaneOwner = {\n\t\tenvironment,\n\t\tidentity,\n\t\toptions,\n\t\tstatus: \"active\",\n\t\t// Inherit the registration even if recovery produces no successor report before quit.\n\t\tseq: previous?.seq ?? 0,\n\t\tidentitySent: false,\n\t\tasync flush() {\n\t\t\tawait this.flight;\n\t\t},\n\t};\n\towners.set(environment.paneId, owner);\n\treturn owner;\n}\n\nexport function reportPaneActivity(owner: PaneOwner, activity: SessionActivity): void {\n\tif (owner.status !== \"active\" || owners.get(owner.environment.paneId) !== owner) {\n\t\tdiagnostic(owner, { kind: \"stale_owner\" });\n\t\treturn;\n\t}\n\towner.pending = activity;\n\tif (owner.flight) return;\n\towner.flight = (async () => {\n\t\twhile (owner.pending && owner.status === \"active\") {\n\t\t\tconst next = owner.pending;\n\t\t\towner.pending = undefined;\n\t\t\tallocateSequence(owner);\n\t\t\tconst args = [...argv(owner, \"report-agent\"), \"--state\", next.state];\n\t\t\tif (next.message) args.push(\"--message\", next.message);\n\t\t\tif (!owner.identitySent) {\n\t\t\t\targs.push(\"--agent-session-id\", owner.identity.id);\n\t\t\t\tif (owner.identity.path && isAbsolute(owner.identity.path))\n\t\t\t\t\targs.push(\"--agent-session-path\", owner.identity.path);\n\t\t\t}\n\t\t\tif (await send(owner, args)) owner.identitySent = true;\n\t\t}\n\t})().finally(() => {\n\t\towner.flight = undefined;\n\t});\n}\n\n/** Fence and drain a local reporter without unregistering the still-running agent. */\nexport function retirePaneReporting(owner: PaneOwner): Promise<void> {\n\treturn stopPaneReporting(owner, false);\n}\n\nexport function releasePaneReporting(owner: PaneOwner): Promise<void> {\n\treturn stopPaneReporting(owner, true);\n}\n\nfunction stopPaneReporting(owner: PaneOwner, releaseRegistration: boolean): Promise<void> {\n\tif (owner.release) return owner.release;\n\tif (owners.get(owner.environment.paneId) !== owner || owner.status !== \"active\") {\n\t\tdiagnostic(owner, { kind: \"stale_owner\" });\n\t\treturn Promise.resolve();\n\t}\n\towner.status = \"releasing\";\n\towner.pending = undefined;\n\towner.release = (async () => {\n\t\tawait owner.flight;\n\t\t// A failed command may still have claimed authority before its response was lost.\n\t\tif (releaseRegistration && owner.seq > 0) {\n\t\t\tallocateSequence(owner);\n\t\t\tawait send(owner, argv(owner, \"release-agent\"));\n\t\t}\n\t\towner.status = \"retired\";\n\t\tif (releaseRegistration && owners.get(owner.environment.paneId) === owner)\n\t\t\towners.delete(owner.environment.paneId);\n\t})();\n\treturn owner.release;\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import type { HerdrEnvironment } from "./environment.js";
2
+ export interface HerdrDiagnostic {
3
+ kind: "spawn_failed" | "timeout" | "protocol_rejected" | "stale_owner" | "unsupported";
4
+ owner?: string;
5
+ }
6
+ export declare const HERDR_TIMEOUT_MS = 5000;
7
+ export declare function executeHerdr(environment: HerdrEnvironment, argv: string[], timeoutMs?: number): Promise<HerdrDiagnostic | undefined>;
8
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/extensions/herdr/transport.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,cAAc,GAAG,SAAS,GAAG,mBAAmB,GAAG,aAAa,GAAG,aAAa,CAAC;IACvF,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,gBAAgB,OAAQ,CAAC;AAEtC,wBAAgB,YAAY,CAC3B,WAAW,EAAE,gBAAgB,EAC7B,IAAI,EAAE,MAAM,EAAE,EACd,SAAS,SAAmB,GAC1B,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAyBtC"}
@@ -0,0 +1,28 @@
1
+ import { execFile } from "node:child_process";
2
+ export const HERDR_TIMEOUT_MS = 5_000;
3
+ export function executeHerdr(environment, argv, timeoutMs = HERDR_TIMEOUT_MS) {
4
+ return new Promise((resolve) => {
5
+ try {
6
+ execFile(environment.bin, argv, {
7
+ env: { ...process.env, HERDR_SOCKET_PATH: environment.socketPath },
8
+ timeout: timeoutMs,
9
+ killSignal: "SIGKILL",
10
+ maxBuffer: 64 * 1024,
11
+ windowsHide: true,
12
+ }, (error) => {
13
+ if (!error)
14
+ resolve(undefined);
15
+ else if (error.killed)
16
+ resolve({ kind: "timeout" });
17
+ else if (typeof error.code === "string" && error.code !== "ERR_CHILD_PROCESS_STDIO_MAXBUFFER")
18
+ resolve({ kind: "spawn_failed" });
19
+ else
20
+ resolve({ kind: "protocol_rejected" });
21
+ });
22
+ }
23
+ catch {
24
+ resolve({ kind: "spawn_failed" });
25
+ }
26
+ });
27
+ }
28
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/extensions/herdr/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAQ9C,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAEtC,MAAM,UAAU,YAAY,CAC3B,WAA6B,EAC7B,IAAc,EACd,SAAS,GAAG,gBAAgB;IAE5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,IAAI,CAAC;YACJ,QAAQ,CACP,WAAW,CAAC,GAAG,EACf,IAAI,EACJ;gBACC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,iBAAiB,EAAE,WAAW,CAAC,UAAU,EAAE;gBAClE,OAAO,EAAE,SAAS;gBAClB,UAAU,EAAE,SAAS;gBACrB,SAAS,EAAE,EAAE,GAAG,IAAI;gBACpB,WAAW,EAAE,IAAI;aACjB,EACD,CAAC,KAAK,EAAE,EAAE;gBACT,IAAI,CAAC,KAAK;oBAAE,OAAO,CAAC,SAAS,CAAC,CAAC;qBAC1B,IAAI,KAAK,CAAC,MAAM;oBAAE,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;qBAC/C,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,mCAAmC;oBAC5F,OAAO,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;;oBAC9B,OAAO,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC7C,CAAC,CACD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACnC,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { execFile } from \"node:child_process\";\nimport type { HerdrEnvironment } from \"./environment.js\";\n\nexport interface HerdrDiagnostic {\n\tkind: \"spawn_failed\" | \"timeout\" | \"protocol_rejected\" | \"stale_owner\" | \"unsupported\";\n\towner?: string;\n}\n\nexport const HERDR_TIMEOUT_MS = 5_000;\n\nexport function executeHerdr(\n\tenvironment: HerdrEnvironment,\n\targv: string[],\n\ttimeoutMs = HERDR_TIMEOUT_MS,\n): Promise<HerdrDiagnostic | undefined> {\n\treturn new Promise((resolve) => {\n\t\ttry {\n\t\t\texecFile(\n\t\t\t\tenvironment.bin,\n\t\t\t\targv,\n\t\t\t\t{\n\t\t\t\t\tenv: { ...process.env, HERDR_SOCKET_PATH: environment.socketPath },\n\t\t\t\t\ttimeout: timeoutMs,\n\t\t\t\t\tkillSignal: \"SIGKILL\",\n\t\t\t\t\tmaxBuffer: 64 * 1024,\n\t\t\t\t\twindowsHide: true,\n\t\t\t\t},\n\t\t\t\t(error) => {\n\t\t\t\t\tif (!error) resolve(undefined);\n\t\t\t\t\telse if (error.killed) resolve({ kind: \"timeout\" });\n\t\t\t\t\telse if (typeof error.code === \"string\" && error.code !== \"ERR_CHILD_PROCESS_STDIO_MAXBUFFER\")\n\t\t\t\t\t\tresolve({ kind: \"spawn_failed\" });\n\t\t\t\t\telse resolve({ kind: \"protocol_rejected\" });\n\t\t\t\t},\n\t\t\t);\n\t\t} catch {\n\t\t\tresolve({ kind: \"spawn_failed\" });\n\t\t}\n\t});\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAGnE,eAAO,MAAM,iBAAiB,EAAE,eAAe,EAE9C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAInE,eAAO,MAAM,iBAAiB,EAAE,eAAe,EAG9C,CAAC"}
@@ -1,5 +1,7 @@
1
+ import herdrExtension from "./herdr/index.js";
1
2
  import llamaExtension from "./llama/index.js";
2
3
  export const builtInExtensions = [
3
4
  { name: "llama.cpp", factory: llamaExtension, hidden: true, bundled: true },
5
+ { name: "Herdr", factory: herdrExtension, hidden: true, bundled: true },
4
6
  ];
5
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AACA,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IACnD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;CAC3E,CAAC","sourcesContent":["import type { InlineExtension } from \"../core/extensions/types.ts\";\nimport llamaExtension from \"./llama/index.js\";\n\nexport const builtInExtensions: InlineExtension[] = [\n\t{ name: \"llama.cpp\", factory: llamaExtension, hidden: true, bundled: true },\n];\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AACA,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IACnD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;IAC3E,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;CACvE,CAAC","sourcesContent":["import type { InlineExtension } from \"../core/extensions/types.ts\";\nimport herdrExtension from \"./herdr/index.js\";\nimport llamaExtension from \"./llama/index.js\";\n\nexport const builtInExtensions: InlineExtension[] = [\n\t{ name: \"llama.cpp\", factory: llamaExtension, hidden: true, bundled: true },\n\t{ name: \"Herdr\", factory: herdrExtension, hidden: true, bundled: true },\n];\n"]}
@@ -1,6 +1,6 @@
1
1
  import { Container, type Focusable, type TUI } from "@earendil-works/pi-tui";
2
2
  import type { KeybindingsManager } from "../../core/keybindings.ts";
3
- import type { Theme } from "../../modes/interactive/theme/theme.ts";
3
+ import type { Theme } from "../../modes/interactive/theme/theme.js";
4
4
  import type { HuggingFaceModel } from "./huggingface.js";
5
5
  export declare class HuggingFaceSearch extends Container implements Focusable {
6
6
  private readonly tui;
@@ -1 +1 @@
1
- {"version":3,"file":"huggingface-ui.js","sourceRoot":"","sources":["../../../src/extensions/llama/huggingface-ui.ts"],"names":[],"mappings":"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","sourcesContent":["import { Container, type Focusable, fuzzyFilter, Input, Spacer, Text, type TUI } from \"@earendil-works/pi-tui\";\nimport type { KeybindingsManager } from \"../../core/keybindings.ts\";\nimport type { Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport type { HuggingFaceModel } from \"./huggingface.js\";\n\nfunction compactCount(value: number): string {\n\tif (value >= 1_000_000) return `${(value / 1_000_000).toFixed(value >= 10_000_000 ? 0 : 1)}M`;\n\tif (value >= 1_000) return `${(value / 1_000).toFixed(value >= 100_000 ? 0 : 1)}k`;\n\treturn String(value);\n}\nexport class HuggingFaceSearch extends Container implements Focusable {\n\tprivate readonly tui: TUI;\n\tprivate readonly theme: Theme;\n\tprivate readonly keybindings: KeybindingsManager;\n\tprivate readonly search: (query: string, signal: AbortSignal) => Promise<HuggingFaceModel[]>;\n\tprivate readonly cache: Map<string, HuggingFaceModel[]>;\n\tprivate readonly onSelectModel: (model: string | undefined) => void;\n\tprivate readonly input = new Input();\n\tprivate readonly resultsContainer = new Container();\n\tprivate results: HuggingFaceModel[] = [];\n\tprivate filteredResults: HuggingFaceModel[] = [];\n\tprivate selectedIndex = 0;\n\tprivate query = \"\";\n\tprivate status = \"Type at least 2 characters\";\n\tprivate debounce: ReturnType<typeof setTimeout> | undefined;\n\tprivate request: AbortController | undefined;\n\tprivate closed = false;\n\tprivate _focused = false;\n\n\tconstructor(\n\t\ttui: TUI,\n\t\ttheme: Theme,\n\t\tkeybindings: KeybindingsManager,\n\t\tsearch: (query: string, signal: AbortSignal) => Promise<HuggingFaceModel[]>,\n\t\tcache: Map<string, HuggingFaceModel[]>,\n\t\tonSelectModel: (model: string | undefined) => void,\n\t) {\n\t\tsuper();\n\t\tthis.tui = tui;\n\t\tthis.theme = theme;\n\t\tthis.keybindings = keybindings;\n\t\tthis.search = search;\n\t\tthis.cache = cache;\n\t\tthis.onSelectModel = onSelectModel;\n\t\tthis.addChild(new Text(theme.fg(\"dim\", \"Model name or owner/repository[:quant]\"), 1, 0));\n\t\tthis.addChild(this.input);\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(this.resultsContainer);\n\t\tthis.updateResults();\n\t}\n\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.input.focused = value;\n\t}\n\n\tprivate updateResults(): void {\n\t\tthis.resultsContainer.clear();\n\t\tconst maxVisible = 10;\n\t\tconst start = Math.max(\n\t\t\t0,\n\t\t\tMath.min(this.selectedIndex - Math.floor(maxVisible / 2), this.filteredResults.length - maxVisible),\n\t\t);\n\t\tconst end = Math.min(start + maxVisible, this.filteredResults.length);\n\t\tfor (let index = start; index < end; index++) {\n\t\t\tconst model = this.filteredResults[index];\n\t\t\tif (!model) continue;\n\t\t\tconst prefix = index === this.selectedIndex ? \"→ \" : \" \";\n\t\t\tconst details = `${compactCount(model.downloads)} downloads`;\n\t\t\tthis.resultsContainer.addChild(\n\t\t\t\tnew Text(\n\t\t\t\t\tindex === this.selectedIndex\n\t\t\t\t\t\t? this.theme.fg(\"accent\", `${prefix}${model.id} ${details}`)\n\t\t\t\t\t\t: `${prefix}${model.id}${this.theme.fg(\"muted\", ` ${details}`)}`,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tif (start > 0 || end < this.filteredResults.length) {\n\t\t\tthis.resultsContainer.addChild(\n\t\t\t\tnew Text(this.theme.fg(\"dim\", ` (${this.selectedIndex + 1}/${this.filteredResults.length})`), 0, 0),\n\t\t\t);\n\t\t}\n\t\tif (this.filteredResults.length === 0) {\n\t\t\tthis.resultsContainer.addChild(new Text(this.theme.fg(\"dim\", ` ${this.status}`), 0, 0));\n\t\t} else if (this.status === \"Searching Hugging Face…\") {\n\t\t\tthis.resultsContainer.addChild(new Text(this.theme.fg(\"dim\", ` ${this.status}`), 0, 0));\n\t\t}\n\t\tthis.tui.requestRender();\n\t}\n\n\tprivate filterResults(): void {\n\t\tif (this.query) {\n\t\t\tconst matches = new Set(fuzzyFilter(this.results, this.query, (model) => model.id).map((model) => model.id));\n\t\t\tthis.filteredResults = this.results.filter((model) => matches.has(model.id));\n\t\t} else {\n\t\t\tthis.filteredResults = this.results;\n\t\t}\n\t\tthis.selectedIndex = Math.min(this.selectedIndex, Math.max(0, this.filteredResults.length - 1));\n\t\tthis.updateResults();\n\t}\n\n\tprivate scheduleSearch(): void {\n\t\tif (this.debounce) clearTimeout(this.debounce);\n\t\tthis.request?.abort();\n\t\tthis.request = undefined;\n\t\tif (this.query.length < 2) {\n\t\t\tthis.status = \"Type at least 2 characters\";\n\t\t\tthis.filterResults();\n\t\t\treturn;\n\t\t}\n\t\tconst cached = this.cache.get(this.query.toLowerCase());\n\t\tif (cached) {\n\t\t\tthis.results = cached;\n\t\t\tthis.status = cached.length === 0 ? \"No GGUF models found\" : \"\";\n\t\t\tthis.filterResults();\n\t\t\treturn;\n\t\t}\n\t\tthis.status = \"Searching Hugging Face…\";\n\t\tthis.filterResults();\n\t\tthis.debounce = setTimeout(() => void this.runSearch(this.query), 500);\n\t}\n\n\tprivate async runSearch(query: string): Promise<void> {\n\t\tconst request = new AbortController();\n\t\tthis.request = request;\n\t\ttry {\n\t\t\tconst results = await this.search(query, request.signal);\n\t\t\tthis.cache.set(query.toLowerCase(), results);\n\t\t\tif (this.closed || request.signal.aborted || this.query !== query) return;\n\t\t\tthis.results = results;\n\t\t\tthis.selectedIndex = 0;\n\t\t\tthis.status = results.length === 0 ? \"No GGUF models found\" : \"\";\n\t\t\tthis.filterResults();\n\t\t} catch (error) {\n\t\t\tif (this.closed || request.signal.aborted || this.query !== query) return;\n\t\t\tthis.results = [];\n\t\t\tthis.status = error instanceof Error ? error.message : String(error);\n\t\t\tthis.filterResults();\n\t\t} finally {\n\t\t\tif (this.request === request) this.request = undefined;\n\t\t}\n\t}\n\n\tprivate close(model: string | undefined): void {\n\t\tif (this.closed) return;\n\t\tthis.closed = true;\n\t\tif (this.debounce) clearTimeout(this.debounce);\n\t\tthis.request?.abort();\n\t\tthis.onSelectModel(model);\n\t}\n\n\thandleInput(data: string): boolean {\n\t\tif (this.keybindings.matches(data, \"tui.select.up\")) {\n\t\t\tif (this.filteredResults.length > 0) {\n\t\t\t\tthis.selectedIndex = this.selectedIndex === 0 ? this.filteredResults.length - 1 : this.selectedIndex - 1;\n\t\t\t\tthis.updateResults();\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tif (this.keybindings.matches(data, \"tui.select.down\")) {\n\t\t\tif (this.filteredResults.length > 0) {\n\t\t\t\tthis.selectedIndex = this.selectedIndex === this.filteredResults.length - 1 ? 0 : this.selectedIndex + 1;\n\t\t\t\tthis.updateResults();\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tif (this.keybindings.matches(data, \"tui.select.confirm\")) {\n\t\t\tconst exact = /^[^/\\s]+\\/[^:\\s]+(?::[^\\s:]+)?$/u.test(this.query) ? this.query : undefined;\n\t\t\tconst selected = exact ?? this.filteredResults[this.selectedIndex]?.id;\n\t\t\tif (selected) this.close(selected);\n\t\t\treturn true;\n\t\t}\n\t\tif (this.keybindings.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.close(undefined);\n\t\t\treturn true;\n\t\t}\n\t\tthis.input.handleInput(data);\n\t\tconst query = this.input.getValue().trim();\n\t\tif (query === this.query) return true;\n\t\tthis.query = query;\n\t\tthis.scheduleSearch();\n\t\treturn true;\n\t}\n}\n"]}
1
+ {"version":3,"file":"huggingface-ui.js","sourceRoot":"","sources":["../../../src/extensions/llama/huggingface-ui.ts"],"names":[],"mappings":"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","sourcesContent":["import { Container, type Focusable, fuzzyFilter, Input, Spacer, Text, type TUI } from \"@earendil-works/pi-tui\";\nimport type { KeybindingsManager } from \"../../core/keybindings.ts\";\nimport type { Theme } from \"../../modes/interactive/theme/theme.js\";\nimport type { HuggingFaceModel } from \"./huggingface.js\";\n\nfunction compactCount(value: number): string {\n\tif (value >= 1_000_000) return `${(value / 1_000_000).toFixed(value >= 10_000_000 ? 0 : 1)}M`;\n\tif (value >= 1_000) return `${(value / 1_000).toFixed(value >= 100_000 ? 0 : 1)}k`;\n\treturn String(value);\n}\nexport class HuggingFaceSearch extends Container implements Focusable {\n\tprivate readonly tui: TUI;\n\tprivate readonly theme: Theme;\n\tprivate readonly keybindings: KeybindingsManager;\n\tprivate readonly search: (query: string, signal: AbortSignal) => Promise<HuggingFaceModel[]>;\n\tprivate readonly cache: Map<string, HuggingFaceModel[]>;\n\tprivate readonly onSelectModel: (model: string | undefined) => void;\n\tprivate readonly input = new Input();\n\tprivate readonly resultsContainer = new Container();\n\tprivate results: HuggingFaceModel[] = [];\n\tprivate filteredResults: HuggingFaceModel[] = [];\n\tprivate selectedIndex = 0;\n\tprivate query = \"\";\n\tprivate status = \"Type at least 2 characters\";\n\tprivate debounce: ReturnType<typeof setTimeout> | undefined;\n\tprivate request: AbortController | undefined;\n\tprivate closed = false;\n\tprivate _focused = false;\n\n\tconstructor(\n\t\ttui: TUI,\n\t\ttheme: Theme,\n\t\tkeybindings: KeybindingsManager,\n\t\tsearch: (query: string, signal: AbortSignal) => Promise<HuggingFaceModel[]>,\n\t\tcache: Map<string, HuggingFaceModel[]>,\n\t\tonSelectModel: (model: string | undefined) => void,\n\t) {\n\t\tsuper();\n\t\tthis.tui = tui;\n\t\tthis.theme = theme;\n\t\tthis.keybindings = keybindings;\n\t\tthis.search = search;\n\t\tthis.cache = cache;\n\t\tthis.onSelectModel = onSelectModel;\n\t\tthis.addChild(new Text(theme.fg(\"dim\", \"Model name or owner/repository[:quant]\"), 1, 0));\n\t\tthis.addChild(this.input);\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(this.resultsContainer);\n\t\tthis.updateResults();\n\t}\n\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.input.focused = value;\n\t}\n\n\tprivate updateResults(): void {\n\t\tthis.resultsContainer.clear();\n\t\tconst maxVisible = 10;\n\t\tconst start = Math.max(\n\t\t\t0,\n\t\t\tMath.min(this.selectedIndex - Math.floor(maxVisible / 2), this.filteredResults.length - maxVisible),\n\t\t);\n\t\tconst end = Math.min(start + maxVisible, this.filteredResults.length);\n\t\tfor (let index = start; index < end; index++) {\n\t\t\tconst model = this.filteredResults[index];\n\t\t\tif (!model) continue;\n\t\t\tconst prefix = index === this.selectedIndex ? \"→ \" : \" \";\n\t\t\tconst details = `${compactCount(model.downloads)} downloads`;\n\t\t\tthis.resultsContainer.addChild(\n\t\t\t\tnew Text(\n\t\t\t\t\tindex === this.selectedIndex\n\t\t\t\t\t\t? this.theme.fg(\"accent\", `${prefix}${model.id} ${details}`)\n\t\t\t\t\t\t: `${prefix}${model.id}${this.theme.fg(\"muted\", ` ${details}`)}`,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tif (start > 0 || end < this.filteredResults.length) {\n\t\t\tthis.resultsContainer.addChild(\n\t\t\t\tnew Text(this.theme.fg(\"dim\", ` (${this.selectedIndex + 1}/${this.filteredResults.length})`), 0, 0),\n\t\t\t);\n\t\t}\n\t\tif (this.filteredResults.length === 0) {\n\t\t\tthis.resultsContainer.addChild(new Text(this.theme.fg(\"dim\", ` ${this.status}`), 0, 0));\n\t\t} else if (this.status === \"Searching Hugging Face…\") {\n\t\t\tthis.resultsContainer.addChild(new Text(this.theme.fg(\"dim\", ` ${this.status}`), 0, 0));\n\t\t}\n\t\tthis.tui.requestRender();\n\t}\n\n\tprivate filterResults(): void {\n\t\tif (this.query) {\n\t\t\tconst matches = new Set(fuzzyFilter(this.results, this.query, (model) => model.id).map((model) => model.id));\n\t\t\tthis.filteredResults = this.results.filter((model) => matches.has(model.id));\n\t\t} else {\n\t\t\tthis.filteredResults = this.results;\n\t\t}\n\t\tthis.selectedIndex = Math.min(this.selectedIndex, Math.max(0, this.filteredResults.length - 1));\n\t\tthis.updateResults();\n\t}\n\n\tprivate scheduleSearch(): void {\n\t\tif (this.debounce) clearTimeout(this.debounce);\n\t\tthis.request?.abort();\n\t\tthis.request = undefined;\n\t\tif (this.query.length < 2) {\n\t\t\tthis.status = \"Type at least 2 characters\";\n\t\t\tthis.filterResults();\n\t\t\treturn;\n\t\t}\n\t\tconst cached = this.cache.get(this.query.toLowerCase());\n\t\tif (cached) {\n\t\t\tthis.results = cached;\n\t\t\tthis.status = cached.length === 0 ? \"No GGUF models found\" : \"\";\n\t\t\tthis.filterResults();\n\t\t\treturn;\n\t\t}\n\t\tthis.status = \"Searching Hugging Face…\";\n\t\tthis.filterResults();\n\t\tthis.debounce = setTimeout(() => void this.runSearch(this.query), 500);\n\t}\n\n\tprivate async runSearch(query: string): Promise<void> {\n\t\tconst request = new AbortController();\n\t\tthis.request = request;\n\t\ttry {\n\t\t\tconst results = await this.search(query, request.signal);\n\t\t\tthis.cache.set(query.toLowerCase(), results);\n\t\t\tif (this.closed || request.signal.aborted || this.query !== query) return;\n\t\t\tthis.results = results;\n\t\t\tthis.selectedIndex = 0;\n\t\t\tthis.status = results.length === 0 ? \"No GGUF models found\" : \"\";\n\t\t\tthis.filterResults();\n\t\t} catch (error) {\n\t\t\tif (this.closed || request.signal.aborted || this.query !== query) return;\n\t\t\tthis.results = [];\n\t\t\tthis.status = error instanceof Error ? error.message : String(error);\n\t\t\tthis.filterResults();\n\t\t} finally {\n\t\t\tif (this.request === request) this.request = undefined;\n\t\t}\n\t}\n\n\tprivate close(model: string | undefined): void {\n\t\tif (this.closed) return;\n\t\tthis.closed = true;\n\t\tif (this.debounce) clearTimeout(this.debounce);\n\t\tthis.request?.abort();\n\t\tthis.onSelectModel(model);\n\t}\n\n\thandleInput(data: string): boolean {\n\t\tif (this.keybindings.matches(data, \"tui.select.up\")) {\n\t\t\tif (this.filteredResults.length > 0) {\n\t\t\t\tthis.selectedIndex = this.selectedIndex === 0 ? this.filteredResults.length - 1 : this.selectedIndex - 1;\n\t\t\t\tthis.updateResults();\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tif (this.keybindings.matches(data, \"tui.select.down\")) {\n\t\t\tif (this.filteredResults.length > 0) {\n\t\t\t\tthis.selectedIndex = this.selectedIndex === this.filteredResults.length - 1 ? 0 : this.selectedIndex + 1;\n\t\t\t\tthis.updateResults();\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tif (this.keybindings.matches(data, \"tui.select.confirm\")) {\n\t\t\tconst exact = /^[^/\\s]+\\/[^:\\s]+(?::[^\\s:]+)?$/u.test(this.query) ? this.query : undefined;\n\t\t\tconst selected = exact ?? this.filteredResults[this.selectedIndex]?.id;\n\t\t\tif (selected) this.close(selected);\n\t\t\treturn true;\n\t\t}\n\t\tif (this.keybindings.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.close(undefined);\n\t\t\treturn true;\n\t\t}\n\t\tthis.input.handleInput(data);\n\t\tconst query = this.input.getValue().trim();\n\t\tif (query === this.query) return true;\n\t\tthis.query = query;\n\t\tthis.scheduleSearch();\n\t\treturn true;\n\t}\n}\n"]}