@astralyn/pi 0.87.5 → 0.99.0

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 (786) hide show
  1. package/CHANGELOG.md +51 -6
  2. package/README.md +3 -3
  3. package/dist/bun/runtime-setup.js +4 -1
  4. package/dist/bun/runtime-setup.js.map +1 -1
  5. package/dist/bundle/chunks/anthropic-messages-KIXY7EDT.js +6 -0
  6. package/dist/bundle/chunks/anthropic.js +2 -2
  7. package/dist/bundle/chunks/azure-openai-responses-RPBERDXD.js +2 -0
  8. package/dist/bundle/chunks/bedrock-converse-stream.js +8 -8
  9. package/dist/bundle/chunks/{chunk-LPQCB2VJ.js → chunk-A576H74Y.js} +2 -2
  10. package/dist/bundle/chunks/{chunk-NW5FIDD7.js → chunk-ABVRAYXT.js} +3 -3
  11. package/dist/bundle/chunks/{chunk-I5IVW2WS.js → chunk-CLLDCO64.js} +1 -1
  12. package/dist/bundle/chunks/chunk-DEWXBB6W.js +2 -0
  13. package/dist/bundle/chunks/chunk-G4RY3GN7.js +11 -0
  14. package/dist/bundle/chunks/chunk-GCKVOFWP.js +2 -0
  15. package/dist/bundle/chunks/chunk-MPDALHNJ.js +2 -0
  16. package/dist/bundle/chunks/chunk-OO6DJ3CL.js +31 -0
  17. package/dist/bundle/chunks/{chunk-EWLAVDVN.js → chunk-VW2P3X6P.js} +921 -293
  18. package/dist/bundle/chunks/chunk-VWCWZD6E.js +2 -0
  19. package/dist/bundle/chunks/cloudflare-workers-ai-system-one-ZYSAFXXL.js +2 -0
  20. package/dist/bundle/chunks/codemode-worker.js +295 -0
  21. package/dist/bundle/chunks/github-copilot.js +1 -1
  22. package/dist/bundle/chunks/google-generative-ai-SDNQVVXA.js +2 -0
  23. package/dist/bundle/chunks/google-vertex-LZXOLBIO.js +2 -0
  24. package/dist/bundle/chunks/llama-cpp-classify-7IYGGPND.js +22 -0
  25. package/dist/bundle/chunks/meta.js +2 -0
  26. package/dist/bundle/chunks/mistral-conversations-VYKPSSAM.js +5 -0
  27. package/dist/bundle/chunks/openai-chatgpt.js +75 -0
  28. package/dist/bundle/chunks/openai-codex-responses-HZ4VUDXD.js +10 -0
  29. package/dist/bundle/chunks/openai-codex.js +2 -2
  30. package/dist/bundle/chunks/openai-completions-SKDGF6OE.js +7 -0
  31. package/dist/bundle/chunks/openai-responses-FPML4SSG.js +3 -0
  32. package/dist/bundle/chunks/{openrouter-images-6XDE2CEW.js → openrouter-images-5524IQHX.js} +1 -1
  33. package/dist/bundle/chunks/openrouter.js +2 -2
  34. package/dist/bundle/chunks/{pi-messages-MQMPIPNC.js → pi-messages-HZZ7GEEW.js} +2 -2
  35. package/dist/bundle/chunks/radius.js +2 -2
  36. package/dist/bundle/chunks/typesafe-system-one-Z2CDLKEY.js +2 -0
  37. package/dist/bundle/chunks/virtual-modules-TQRORWJQ.js +2 -0
  38. package/dist/bundle/cli.js +1 -1
  39. package/dist/bundle/index.js +1 -1
  40. package/dist/bundle/rpc-entry.js +1 -1
  41. package/dist/cli/args.d.ts.map +1 -1
  42. package/dist/cli/args.js +4 -3
  43. package/dist/cli/args.js.map +1 -1
  44. package/dist/cli/startup-ui.d.ts.map +1 -1
  45. package/dist/cli/startup-ui.js +38 -30
  46. package/dist/cli/startup-ui.js.map +1 -1
  47. package/dist/config.d.ts +18 -4
  48. package/dist/config.d.ts.map +1 -1
  49. package/dist/config.js +30 -4
  50. package/dist/config.js.map +1 -1
  51. package/dist/core/agent-session-runtime.d.ts +1 -1
  52. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  53. package/dist/core/agent-session-runtime.js +13 -13
  54. package/dist/core/agent-session-runtime.js.map +1 -1
  55. package/dist/core/agent-session-services.d.ts +2 -2
  56. package/dist/core/agent-session-services.d.ts.map +1 -1
  57. package/dist/core/agent-session-services.js +14 -1
  58. package/dist/core/agent-session-services.js.map +1 -1
  59. package/dist/core/agent-session.d.ts +107 -58
  60. package/dist/core/agent-session.d.ts.map +1 -1
  61. package/dist/core/agent-session.js +505 -298
  62. package/dist/core/agent-session.js.map +1 -1
  63. package/dist/core/bug-report.js +1 -1
  64. package/dist/core/bug-report.js.map +1 -1
  65. package/dist/core/compaction/compaction.d.ts.map +1 -1
  66. package/dist/core/compaction/compaction.js +1 -22
  67. package/dist/core/compaction/compaction.js.map +1 -1
  68. package/dist/core/compaction/utils.d.ts +2 -1
  69. package/dist/core/compaction/utils.d.ts.map +1 -1
  70. package/dist/core/compaction/utils.js +25 -18
  71. package/dist/core/compaction/utils.js.map +1 -1
  72. package/dist/core/context-snapshot.d.ts +17 -4
  73. package/dist/core/context-snapshot.d.ts.map +1 -1
  74. package/dist/core/context-snapshot.js +48 -50
  75. package/dist/core/context-snapshot.js.map +1 -1
  76. package/dist/core/crash-log.d.ts.map +1 -1
  77. package/dist/core/crash-log.js +2 -1
  78. package/dist/core/crash-log.js.map +1 -1
  79. package/dist/core/export-html/template.css +10 -0
  80. package/dist/core/export-html/template.js +66 -17
  81. package/dist/core/extensions/distribution-api.d.ts +1 -8
  82. package/dist/core/extensions/distribution-api.d.ts.map +1 -1
  83. package/dist/core/extensions/distribution-api.js +6 -6
  84. package/dist/core/extensions/distribution-api.js.map +1 -1
  85. package/dist/core/extensions/index.d.ts +3 -3
  86. package/dist/core/extensions/index.d.ts.map +1 -1
  87. package/dist/core/extensions/index.js +1 -1
  88. package/dist/core/extensions/index.js.map +1 -1
  89. package/dist/core/extensions/loader.d.ts +1 -1
  90. package/dist/core/extensions/loader.d.ts.map +1 -1
  91. package/dist/core/extensions/loader.js +58 -7
  92. package/dist/core/extensions/loader.js.map +1 -1
  93. package/dist/core/extensions/runner.d.ts +22 -3
  94. package/dist/core/extensions/runner.d.ts.map +1 -1
  95. package/dist/core/extensions/runner.js +124 -8
  96. package/dist/core/extensions/runner.js.map +1 -1
  97. package/dist/core/extensions/types.d.ts +306 -30
  98. package/dist/core/extensions/types.d.ts.map +1 -1
  99. package/dist/core/extensions/types.js +1 -1
  100. package/dist/core/extensions/types.js.map +1 -1
  101. package/dist/core/extensions/wrapper.d.ts +2 -2
  102. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  103. package/dist/core/extensions/wrapper.js +3 -3
  104. package/dist/core/extensions/wrapper.js.map +1 -1
  105. package/dist/core/keybindings.d.ts +40 -5
  106. package/dist/core/keybindings.d.ts.map +1 -1
  107. package/dist/core/keybindings.js +10 -1
  108. package/dist/core/keybindings.js.map +1 -1
  109. package/dist/core/mcp-servers.d.ts +98 -0
  110. package/dist/core/mcp-servers.d.ts.map +1 -0
  111. package/dist/core/mcp-servers.js +158 -0
  112. package/dist/core/mcp-servers.js.map +1 -0
  113. package/dist/core/model-registry.d.ts +13 -1
  114. package/dist/core/model-registry.d.ts.map +1 -1
  115. package/dist/core/model-registry.js +25 -0
  116. package/dist/core/model-registry.js.map +1 -1
  117. package/dist/core/model-resolver.d.ts +2 -2
  118. package/dist/core/model-resolver.d.ts.map +1 -1
  119. package/dist/core/model-resolver.js +5 -5
  120. package/dist/core/model-resolver.js.map +1 -1
  121. package/dist/core/model-runtime.d.ts +41 -3
  122. package/dist/core/model-runtime.d.ts.map +1 -1
  123. package/dist/core/model-runtime.js +167 -17
  124. package/dist/core/model-runtime.js.map +1 -1
  125. package/dist/core/nested-tool-calls.d.ts +102 -0
  126. package/dist/core/nested-tool-calls.d.ts.map +1 -0
  127. package/dist/core/nested-tool-calls.js +177 -0
  128. package/dist/core/nested-tool-calls.js.map +1 -0
  129. package/dist/core/package-manager.d.ts +4 -0
  130. package/dist/core/package-manager.d.ts.map +1 -1
  131. package/dist/core/package-manager.js +58 -12
  132. package/dist/core/package-manager.js.map +1 -1
  133. package/dist/core/provider-composer.d.ts +40 -21
  134. package/dist/core/provider-composer.d.ts.map +1 -1
  135. package/dist/core/provider-composer.js +92 -40
  136. package/dist/core/provider-composer.js.map +1 -1
  137. package/dist/core/remote-catalog-provider.d.ts +8 -1
  138. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  139. package/dist/core/remote-catalog-provider.js +18 -3
  140. package/dist/core/remote-catalog-provider.js.map +1 -1
  141. package/dist/core/resource-loader.d.ts +7 -1
  142. package/dist/core/resource-loader.d.ts.map +1 -1
  143. package/dist/core/resource-loader.js +160 -35
  144. package/dist/core/resource-loader.js.map +1 -1
  145. package/dist/core/sdk.d.ts +3 -3
  146. package/dist/core/sdk.d.ts.map +1 -1
  147. package/dist/core/sdk.js +84 -14
  148. package/dist/core/sdk.js.map +1 -1
  149. package/dist/core/session-manager.d.ts +9 -0
  150. package/dist/core/session-manager.d.ts.map +1 -1
  151. package/dist/core/session-manager.js +22 -22
  152. package/dist/core/session-manager.js.map +1 -1
  153. package/dist/core/settings-manager.d.ts +36 -1
  154. package/dist/core/settings-manager.d.ts.map +1 -1
  155. package/dist/core/settings-manager.js +108 -2
  156. package/dist/core/settings-manager.js.map +1 -1
  157. package/dist/core/slash-commands.d.ts.map +1 -1
  158. package/dist/core/slash-commands.js +1 -0
  159. package/dist/core/slash-commands.js.map +1 -1
  160. package/dist/core/source-info.d.ts +8 -0
  161. package/dist/core/source-info.d.ts.map +1 -1
  162. package/dist/core/source-info.js +16 -0
  163. package/dist/core/source-info.js.map +1 -1
  164. package/dist/core/system-prompt.js +1 -1
  165. package/dist/core/system-prompt.js.map +1 -1
  166. package/dist/core/tasks/delivery.d.ts +40 -0
  167. package/dist/core/tasks/delivery.d.ts.map +1 -0
  168. package/dist/core/tasks/delivery.js +157 -0
  169. package/dist/core/tasks/delivery.js.map +1 -0
  170. package/dist/core/tasks/history.d.ts +4 -0
  171. package/dist/core/tasks/history.d.ts.map +1 -0
  172. package/dist/core/{background → tasks}/history.js +24 -48
  173. package/dist/core/tasks/history.js.map +1 -0
  174. package/dist/core/{background → tasks}/output.d.ts +4 -4
  175. package/dist/core/tasks/output.d.ts.map +1 -0
  176. package/dist/core/{background → tasks}/output.js +11 -11
  177. package/dist/core/tasks/output.js.map +1 -0
  178. package/dist/core/tasks/presentation.d.ts +9 -0
  179. package/dist/core/tasks/presentation.d.ts.map +1 -0
  180. package/dist/core/{background → tasks}/presentation.js +53 -51
  181. package/dist/core/tasks/presentation.js.map +1 -0
  182. package/dist/core/{background/service.d.ts → tasks/runtime.d.ts} +22 -23
  183. package/dist/core/tasks/runtime.d.ts.map +1 -0
  184. package/dist/core/{background/service.js → tasks/runtime.js} +154 -198
  185. package/dist/core/tasks/runtime.js.map +1 -0
  186. package/dist/core/tasks/session.d.ts +49 -0
  187. package/dist/core/tasks/session.d.ts.map +1 -0
  188. package/dist/core/tasks/session.js +129 -0
  189. package/dist/core/tasks/session.js.map +1 -0
  190. package/dist/core/tasks/store.d.ts +32 -0
  191. package/dist/core/tasks/store.d.ts.map +1 -0
  192. package/dist/core/tasks/store.js +135 -0
  193. package/dist/core/tasks/store.js.map +1 -0
  194. package/dist/core/{background → tasks}/types.d.ts +80 -62
  195. package/dist/core/tasks/types.d.ts.map +1 -0
  196. package/dist/core/{background → tasks}/types.js +9 -9
  197. package/dist/core/tasks/types.js.map +1 -0
  198. package/dist/core/tasks/view-data.d.ts +8 -0
  199. package/dist/core/tasks/view-data.d.ts.map +1 -0
  200. package/dist/core/tasks/view-data.js +61 -0
  201. package/dist/core/tasks/view-data.js.map +1 -0
  202. package/dist/core/tasks/view.d.ts +30 -0
  203. package/dist/core/tasks/view.d.ts.map +1 -0
  204. package/dist/core/tasks/view.js +50 -0
  205. package/dist/core/tasks/view.js.map +1 -0
  206. package/dist/core/tools/bash.d.ts +8 -95
  207. package/dist/core/tools/bash.d.ts.map +1 -1
  208. package/dist/core/tools/bash.js +8 -240
  209. package/dist/core/tools/bash.js.map +1 -1
  210. package/dist/core/tools/find.d.ts.map +1 -1
  211. package/dist/core/tools/find.js +0 -1
  212. package/dist/core/tools/find.js.map +1 -1
  213. package/dist/core/tools/grep.d.ts +2 -0
  214. package/dist/core/tools/grep.d.ts.map +1 -1
  215. package/dist/core/tools/grep.js +2 -1
  216. package/dist/core/tools/grep.js.map +1 -1
  217. package/dist/core/tools/index.d.ts +2 -1
  218. package/dist/core/tools/index.d.ts.map +1 -1
  219. package/dist/core/tools/index.js +9 -0
  220. package/dist/core/tools/index.js.map +1 -1
  221. package/dist/core/tools/ls.d.ts.map +1 -1
  222. package/dist/core/tools/ls.js +0 -1
  223. package/dist/core/tools/ls.js.map +1 -1
  224. package/dist/core/tools/output-accumulator.d.ts +11 -0
  225. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  226. package/dist/core/tools/output-accumulator.js +36 -0
  227. package/dist/core/tools/output-accumulator.js.map +1 -1
  228. package/dist/core/tools/powershell.d.ts +6 -2
  229. package/dist/core/tools/powershell.d.ts.map +1 -1
  230. package/dist/core/tools/powershell.js +1 -1
  231. package/dist/core/tools/powershell.js.map +1 -1
  232. package/dist/core/tools/read.d.ts.map +1 -1
  233. package/dist/core/tools/read.js +0 -1
  234. package/dist/core/tools/read.js.map +1 -1
  235. package/dist/core/tools/render-utils.d.ts +6 -7
  236. package/dist/core/tools/render-utils.d.ts.map +1 -1
  237. package/dist/core/tools/render-utils.js +26 -11
  238. package/dist/core/tools/render-utils.js.map +1 -1
  239. package/dist/core/tools/renderers/bash.d.ts +1 -1
  240. package/dist/core/tools/renderers/bash.d.ts.map +1 -1
  241. package/dist/core/tools/renderers/bash.js +65 -12
  242. package/dist/core/tools/renderers/bash.js.map +1 -1
  243. package/dist/core/tools/renderers/edit.d.ts.map +1 -1
  244. package/dist/core/tools/renderers/edit.js +4 -22
  245. package/dist/core/tools/renderers/edit.js.map +1 -1
  246. package/dist/core/tools/renderers/find.d.ts.map +1 -1
  247. package/dist/core/tools/renderers/find.js +7 -6
  248. package/dist/core/tools/renderers/find.js.map +1 -1
  249. package/dist/core/tools/renderers/grep.d.ts.map +1 -1
  250. package/dist/core/tools/renderers/grep.js +8 -7
  251. package/dist/core/tools/renderers/grep.js.map +1 -1
  252. package/dist/core/tools/renderers/index.d.ts.map +1 -1
  253. package/dist/core/tools/renderers/index.js +5 -7
  254. package/dist/core/tools/renderers/index.js.map +1 -1
  255. package/dist/core/tools/renderers/ls.d.ts.map +1 -1
  256. package/dist/core/tools/renderers/ls.js +3 -2
  257. package/dist/core/tools/renderers/ls.js.map +1 -1
  258. package/dist/core/tools/renderers/read.d.ts.map +1 -1
  259. package/dist/core/tools/renderers/read.js +10 -14
  260. package/dist/core/tools/renderers/read.js.map +1 -1
  261. package/dist/core/tools/renderers/shell-task.d.ts +4 -0
  262. package/dist/core/tools/renderers/shell-task.d.ts.map +1 -0
  263. package/dist/core/tools/renderers/shell-task.js +35 -0
  264. package/dist/core/tools/renderers/shell-task.js.map +1 -0
  265. package/dist/core/tools/renderers/write.d.ts.map +1 -1
  266. package/dist/core/tools/renderers/write.js +3 -2
  267. package/dist/core/tools/renderers/write.js.map +1 -1
  268. package/dist/core/tools/shell-execution.d.ts +4 -5
  269. package/dist/core/tools/shell-execution.d.ts.map +1 -1
  270. package/dist/core/tools/shell-execution.js +19 -3
  271. package/dist/core/tools/shell-execution.js.map +1 -1
  272. package/dist/core/tools/shell-tool.d.ts +93 -0
  273. package/dist/core/tools/shell-tool.d.ts.map +1 -0
  274. package/dist/core/tools/shell-tool.js +251 -0
  275. package/dist/core/tools/shell-tool.js.map +1 -0
  276. package/dist/core/tools/tasks/actions.d.ts +12 -0
  277. package/dist/core/tools/tasks/actions.d.ts.map +1 -0
  278. package/dist/{extensions/background → core/tools/tasks}/actions.js +20 -19
  279. package/dist/core/tools/tasks/actions.js.map +1 -0
  280. package/dist/core/tools/tasks/constants.d.ts +24 -0
  281. package/dist/core/tools/tasks/constants.d.ts.map +1 -0
  282. package/dist/{extensions/background → core/tools/tasks}/constants.js +11 -9
  283. package/dist/core/tools/tasks/constants.js.map +1 -0
  284. package/dist/{extensions/background → core/tools/tasks}/schema.d.ts +6 -6
  285. package/dist/core/tools/tasks/schema.d.ts.map +1 -0
  286. package/dist/{extensions/background → core/tools/tasks}/schema.js +17 -17
  287. package/dist/core/tools/tasks/schema.js.map +1 -0
  288. package/dist/{extensions/background → core/tools/tasks}/types.d.ts +15 -17
  289. package/dist/core/tools/tasks/types.d.ts.map +1 -0
  290. package/dist/core/tools/tasks/types.js.map +1 -0
  291. package/dist/core/tools/tasks.d.ts +14 -0
  292. package/dist/core/tools/tasks.d.ts.map +1 -0
  293. package/dist/core/tools/tasks.js +40 -0
  294. package/dist/core/tools/tasks.js.map +1 -0
  295. package/dist/core/tools/tool-definition-wrapper.d.ts +5 -8
  296. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  297. package/dist/core/tools/tool-definition-wrapper.js +4 -4
  298. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  299. package/dist/core/tools/truncate.d.ts +14 -0
  300. package/dist/core/tools/truncate.d.ts.map +1 -1
  301. package/dist/core/tools/truncate.js +29 -0
  302. package/dist/core/tools/truncate.js.map +1 -1
  303. package/dist/core/trust-manager.d.ts.map +1 -1
  304. package/dist/core/trust-manager.js +1 -0
  305. package/dist/core/trust-manager.js.map +1 -1
  306. package/dist/core/usage-totals.d.ts +5 -3
  307. package/dist/core/usage-totals.d.ts.map +1 -1
  308. package/dist/core/usage-totals.js +27 -4
  309. package/dist/core/usage-totals.js.map +1 -1
  310. package/dist/core/virtual-models.d.ts +115 -0
  311. package/dist/core/virtual-models.d.ts.map +1 -0
  312. package/dist/core/virtual-models.js +117 -0
  313. package/dist/core/virtual-models.js.map +1 -0
  314. package/dist/extensions/codemode/execute.d.ts +16 -0
  315. package/dist/extensions/codemode/execute.d.ts.map +1 -0
  316. package/dist/extensions/codemode/execute.js +390 -0
  317. package/dist/extensions/codemode/execute.js.map +1 -0
  318. package/dist/extensions/codemode/execute.lazy.d.ts +3 -0
  319. package/dist/extensions/codemode/execute.lazy.d.ts.map +1 -0
  320. package/dist/extensions/codemode/execute.lazy.js +3 -0
  321. package/dist/extensions/codemode/execute.lazy.js.map +1 -0
  322. package/dist/extensions/codemode/index.d.ts +21 -0
  323. package/dist/extensions/codemode/index.d.ts.map +1 -0
  324. package/dist/extensions/codemode/index.js +36 -0
  325. package/dist/extensions/codemode/index.js.map +1 -0
  326. package/dist/extensions/codemode/renderer.d.ts +12 -0
  327. package/dist/extensions/codemode/renderer.d.ts.map +1 -0
  328. package/dist/extensions/codemode/renderer.js +119 -0
  329. package/dist/extensions/codemode/renderer.js.map +1 -0
  330. package/dist/extensions/codemode/search.d.ts +33 -0
  331. package/dist/extensions/codemode/search.d.ts.map +1 -0
  332. package/dist/extensions/codemode/search.js +117 -0
  333. package/dist/extensions/codemode/search.js.map +1 -0
  334. package/dist/extensions/codemode/tool.d.ts +122 -0
  335. package/dist/extensions/codemode/tool.d.ts.map +1 -0
  336. package/dist/extensions/codemode/tool.js +324 -0
  337. package/dist/extensions/codemode/tool.js.map +1 -0
  338. package/dist/extensions/codemode/worker.d.ts +7 -0
  339. package/dist/extensions/codemode/worker.d.ts.map +1 -0
  340. package/dist/extensions/codemode/worker.js +7 -0
  341. package/dist/extensions/codemode/worker.js.map +1 -0
  342. package/dist/extensions/deepwiki/schema.d.ts +1 -1
  343. package/dist/extensions/index.d.ts.map +1 -1
  344. package/dist/extensions/index.js +14 -12
  345. package/dist/extensions/index.js.map +1 -1
  346. package/dist/extensions/llama/provider.d.ts +1 -1
  347. package/dist/extensions/llama/provider.d.ts.map +1 -1
  348. package/dist/extensions/llama/provider.js +65 -13
  349. package/dist/extensions/llama/provider.js.map +1 -1
  350. package/dist/extensions/mcp/cli.d.ts +21 -0
  351. package/dist/extensions/mcp/cli.d.ts.map +1 -0
  352. package/dist/extensions/mcp/cli.js +485 -0
  353. package/dist/extensions/mcp/cli.js.map +1 -0
  354. package/dist/extensions/mcp/cli.lazy.d.ts +3 -0
  355. package/dist/extensions/mcp/cli.lazy.d.ts.map +1 -0
  356. package/dist/extensions/mcp/cli.lazy.js +3 -0
  357. package/dist/extensions/mcp/cli.lazy.js.map +1 -0
  358. package/dist/extensions/mcp/config.d.ts +70 -0
  359. package/dist/extensions/mcp/config.d.ts.map +1 -0
  360. package/dist/extensions/mcp/config.js +146 -0
  361. package/dist/extensions/mcp/config.js.map +1 -0
  362. package/dist/extensions/mcp/index.d.ts +52 -0
  363. package/dist/extensions/mcp/index.d.ts.map +1 -0
  364. package/dist/extensions/mcp/index.js +904 -0
  365. package/dist/extensions/mcp/index.js.map +1 -0
  366. package/dist/extensions/mcp/log.d.ts +16 -0
  367. package/dist/extensions/mcp/log.d.ts.map +1 -0
  368. package/dist/extensions/mcp/log.js +64 -0
  369. package/dist/extensions/mcp/log.js.map +1 -0
  370. package/dist/extensions/mcp/oauth.d.ts +94 -0
  371. package/dist/extensions/mcp/oauth.d.ts.map +1 -0
  372. package/dist/extensions/mcp/oauth.js +330 -0
  373. package/dist/extensions/mcp/oauth.js.map +1 -0
  374. package/dist/extensions/mcp/resources.d.ts +43 -0
  375. package/dist/extensions/mcp/resources.d.ts.map +1 -0
  376. package/dist/extensions/mcp/resources.js +262 -0
  377. package/dist/extensions/mcp/resources.js.map +1 -0
  378. package/dist/extensions/mcp/runtime.d.ts +96 -0
  379. package/dist/extensions/mcp/runtime.d.ts.map +1 -0
  380. package/dist/extensions/mcp/runtime.js +372 -0
  381. package/dist/extensions/mcp/runtime.js.map +1 -0
  382. package/dist/extensions/mcp/runtime.lazy.d.ts +3 -0
  383. package/dist/extensions/mcp/runtime.lazy.d.ts.map +1 -0
  384. package/dist/extensions/mcp/runtime.lazy.js +3 -0
  385. package/dist/extensions/mcp/runtime.lazy.js.map +1 -0
  386. package/dist/extensions/mcp/tools.d.ts +83 -0
  387. package/dist/extensions/mcp/tools.d.ts.map +1 -0
  388. package/dist/extensions/mcp/tools.js +233 -0
  389. package/dist/extensions/mcp/tools.js.map +1 -0
  390. package/dist/extensions/mcp/ui.d.ts +60 -0
  391. package/dist/extensions/mcp/ui.d.ts.map +1 -0
  392. package/dist/extensions/mcp/ui.js +166 -0
  393. package/dist/extensions/mcp/ui.js.map +1 -0
  394. package/dist/extensions/question/detail-pane.d.ts +12 -0
  395. package/dist/extensions/question/detail-pane.d.ts.map +1 -0
  396. package/dist/extensions/question/detail-pane.js +42 -0
  397. package/dist/extensions/question/detail-pane.js.map +1 -0
  398. package/dist/extensions/question/dialog.d.ts.map +1 -1
  399. package/dist/extensions/question/dialog.js +175 -105
  400. package/dist/extensions/question/dialog.js.map +1 -1
  401. package/dist/extensions/question/option-window.d.ts +26 -0
  402. package/dist/extensions/question/option-window.d.ts.map +1 -0
  403. package/dist/extensions/question/option-window.js +53 -0
  404. package/dist/extensions/question/option-window.js.map +1 -0
  405. package/dist/extensions/question/render-cache.d.ts +4 -4
  406. package/dist/extensions/question/render-cache.d.ts.map +1 -1
  407. package/dist/extensions/question/render-cache.js +10 -11
  408. package/dist/extensions/question/render-cache.js.map +1 -1
  409. package/dist/extensions/statusline/index.js +2 -2
  410. package/dist/extensions/statusline/index.js.map +1 -1
  411. package/dist/extensions/todo/index.d.ts.map +1 -1
  412. package/dist/extensions/todo/index.js +12 -8
  413. package/dist/extensions/todo/index.js.map +1 -1
  414. package/dist/extensions/todo/view.d.ts +3 -3
  415. package/dist/extensions/todo/view.d.ts.map +1 -1
  416. package/dist/extensions/todo/view.js +7 -6
  417. package/dist/extensions/todo/view.js.map +1 -1
  418. package/dist/extensions/tool-search/index.d.ts +12 -0
  419. package/dist/extensions/tool-search/index.d.ts.map +1 -0
  420. package/dist/extensions/tool-search/index.js +20 -0
  421. package/dist/extensions/tool-search/index.js.map +1 -0
  422. package/dist/extensions/tool-search/tool.d.ts +72 -0
  423. package/dist/extensions/tool-search/tool.d.ts.map +1 -0
  424. package/dist/extensions/tool-search/tool.js +208 -0
  425. package/dist/extensions/tool-search/tool.js.map +1 -0
  426. package/dist/index.d.ts +13 -4
  427. package/dist/index.d.ts.map +1 -1
  428. package/dist/index.js +7 -1
  429. package/dist/index.js.map +1 -1
  430. package/dist/main.d.ts.map +1 -1
  431. package/dist/main.js +10 -0
  432. package/dist/main.js.map +1 -1
  433. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  434. package/dist/modes/interactive/components/config-selector.js +13 -3
  435. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  436. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  437. package/dist/modes/interactive/components/custom-message.js +3 -1
  438. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  439. package/dist/modes/interactive/components/first-time-setup.d.ts +4 -4
  440. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  441. package/dist/modes/interactive/components/first-time-setup.js +8 -2
  442. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  443. package/dist/modes/interactive/components/footer.d.ts +7 -0
  444. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  445. package/dist/modes/interactive/components/footer.js +42 -3
  446. package/dist/modes/interactive/components/footer.js.map +1 -1
  447. package/dist/modes/interactive/components/index.d.ts +1 -1
  448. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  449. package/dist/modes/interactive/components/index.js +1 -1
  450. package/dist/modes/interactive/components/index.js.map +1 -1
  451. package/dist/modes/interactive/components/pi-logo.d.ts +12 -0
  452. package/dist/modes/interactive/components/pi-logo.d.ts.map +1 -0
  453. package/dist/modes/interactive/components/pi-logo.js +25 -0
  454. package/dist/modes/interactive/components/pi-logo.js.map +1 -0
  455. package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
  456. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  457. package/dist/modes/interactive/components/settings-selector.js +28 -6
  458. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  459. package/dist/modes/interactive/components/status-marker.d.ts +4 -4
  460. package/dist/modes/interactive/components/status-marker.js +4 -4
  461. package/dist/modes/interactive/components/status-marker.js.map +1 -1
  462. package/dist/modes/interactive/components/themed-text.d.ts +17 -0
  463. package/dist/modes/interactive/components/themed-text.d.ts.map +1 -0
  464. package/dist/modes/interactive/components/themed-text.js +28 -0
  465. package/dist/modes/interactive/components/themed-text.js.map +1 -0
  466. package/dist/modes/interactive/interactive-mode.d.ts +2 -4
  467. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  468. package/dist/modes/interactive/interactive-mode.js +221 -173
  469. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  470. package/dist/modes/interactive/tasks/completion-render.d.ts +8 -0
  471. package/dist/modes/interactive/tasks/completion-render.d.ts.map +1 -0
  472. package/dist/{extensions/background → modes/interactive/tasks}/completion-render.js +33 -30
  473. package/dist/modes/interactive/tasks/completion-render.js.map +1 -0
  474. package/dist/modes/interactive/tasks/fallback-view.d.ts +4 -0
  475. package/dist/modes/interactive/tasks/fallback-view.d.ts.map +1 -0
  476. package/dist/modes/interactive/tasks/fallback-view.js +27 -0
  477. package/dist/modes/interactive/tasks/fallback-view.js.map +1 -0
  478. package/dist/modes/interactive/tasks/index.d.ts +12 -0
  479. package/dist/modes/interactive/tasks/index.d.ts.map +1 -0
  480. package/dist/modes/interactive/tasks/index.js +97 -0
  481. package/dist/modes/interactive/tasks/index.js.map +1 -0
  482. package/dist/modes/interactive/tasks/manager.d.ts +67 -0
  483. package/dist/modes/interactive/tasks/manager.d.ts.map +1 -0
  484. package/dist/modes/interactive/tasks/manager.js +380 -0
  485. package/dist/modes/interactive/tasks/manager.js.map +1 -0
  486. package/dist/{extensions/background → modes/interactive/tasks}/render.d.ts +13 -13
  487. package/dist/modes/interactive/tasks/render.d.ts.map +1 -0
  488. package/dist/{extensions/background → modes/interactive/tasks}/render.js +18 -18
  489. package/dist/modes/interactive/tasks/render.js.map +1 -0
  490. package/dist/{extensions/background → modes/interactive/tasks}/task-view.d.ts +7 -7
  491. package/dist/modes/interactive/tasks/task-view.d.ts.map +1 -0
  492. package/dist/{extensions/background → modes/interactive/tasks}/task-view.js +4 -4
  493. package/dist/modes/interactive/tasks/task-view.js.map +1 -0
  494. package/dist/{extensions/background → modes/interactive/tasks}/text.d.ts +1 -1
  495. package/dist/modes/interactive/tasks/text.d.ts.map +1 -0
  496. package/dist/{extensions/background → modes/interactive/tasks}/text.js +1 -1
  497. package/dist/modes/interactive/tasks/text.js.map +1 -0
  498. package/dist/modes/interactive/tasks/viewport.d.ts +15 -0
  499. package/dist/modes/interactive/tasks/viewport.d.ts.map +1 -0
  500. package/dist/modes/interactive/tasks/viewport.js +49 -0
  501. package/dist/modes/interactive/tasks/viewport.js.map +1 -0
  502. package/dist/modes/interactive/theme/dark.json +59 -72
  503. package/dist/modes/interactive/theme/light.json +57 -69
  504. package/dist/modes/interactive/theme/system-theme.d.ts +54 -0
  505. package/dist/modes/interactive/theme/system-theme.d.ts.map +1 -0
  506. package/dist/modes/interactive/theme/system-theme.js +535 -0
  507. package/dist/modes/interactive/theme/system-theme.js.map +1 -0
  508. package/dist/modes/interactive/theme/theme-controller.d.ts +46 -6
  509. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  510. package/dist/modes/interactive/theme/theme-controller.js +125 -47
  511. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  512. package/dist/modes/interactive/theme/theme-json.d.ts +1 -0
  513. package/dist/modes/interactive/theme/theme-json.d.ts.map +1 -1
  514. package/dist/modes/interactive/theme/theme-json.js +3 -1
  515. package/dist/modes/interactive/theme/theme-json.js.map +1 -1
  516. package/dist/modes/interactive/theme/theme-schema.json +7 -2
  517. package/dist/modes/interactive/theme/theme.d.ts +70 -39
  518. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  519. package/dist/modes/interactive/theme/theme.js +247 -314
  520. package/dist/modes/interactive/theme/theme.js.map +1 -1
  521. package/dist/modes/interactive/tool-view/chat.d.ts +20 -0
  522. package/dist/modes/interactive/tool-view/chat.d.ts.map +1 -0
  523. package/dist/modes/interactive/tool-view/chat.js +46 -0
  524. package/dist/modes/interactive/tool-view/chat.js.map +1 -0
  525. package/dist/modes/interactive/tool-view/fallback.d.ts +14 -0
  526. package/dist/modes/interactive/tool-view/fallback.d.ts.map +1 -0
  527. package/dist/modes/interactive/tool-view/fallback.js +55 -0
  528. package/dist/modes/interactive/tool-view/fallback.js.map +1 -0
  529. package/dist/modes/interactive/tool-view/style.d.ts +63 -0
  530. package/dist/modes/interactive/tool-view/style.d.ts.map +1 -0
  531. package/dist/modes/interactive/tool-view/style.js +83 -0
  532. package/dist/modes/interactive/tool-view/style.js.map +1 -0
  533. package/dist/modes/interactive/{components → tool-view}/tool-execution.d.ts +17 -24
  534. package/dist/modes/interactive/tool-view/tool-execution.d.ts.map +1 -0
  535. package/dist/modes/interactive/{components → tool-view}/tool-execution.js +42 -116
  536. package/dist/modes/interactive/tool-view/tool-execution.js.map +1 -0
  537. package/dist/modes/interactive/tui-renderer.d.ts +2 -1
  538. package/dist/modes/interactive/tui-renderer.d.ts.map +1 -1
  539. package/dist/modes/interactive/tui-renderer.js +1 -0
  540. package/dist/modes/interactive/tui-renderer.js.map +1 -1
  541. package/dist/modes/rpc/rpc-client.d.ts +6 -6
  542. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  543. package/dist/modes/rpc/rpc-client.js +12 -8
  544. package/dist/modes/rpc/rpc-client.js.map +1 -1
  545. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  546. package/dist/modes/rpc/rpc-mode.js +7 -9
  547. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  548. package/dist/modes/rpc/rpc-types.d.ts +10 -1
  549. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  550. package/dist/modes/rpc/rpc-types.js.map +1 -1
  551. package/dist/package-manager-cli.d.ts.map +1 -1
  552. package/dist/package-manager-cli.js +6 -2
  553. package/dist/package-manager-cli.js.map +1 -1
  554. package/dist/utils/clipboard-image.d.ts.map +1 -1
  555. package/dist/utils/clipboard-image.js +14 -17
  556. package/dist/utils/clipboard-image.js.map +1 -1
  557. package/dist/utils/clipboard.d.ts +2 -0
  558. package/dist/utils/clipboard.d.ts.map +1 -1
  559. package/dist/utils/clipboard.js +5 -0
  560. package/dist/utils/clipboard.js.map +1 -1
  561. package/dist/utils/paths.d.ts +3 -3
  562. package/dist/utils/paths.d.ts.map +1 -1
  563. package/dist/utils/paths.js +5 -4
  564. package/dist/utils/paths.js.map +1 -1
  565. package/dist/utils/shell.d.ts +1 -3
  566. package/dist/utils/shell.d.ts.map +1 -1
  567. package/dist/utils/shell.js +3 -30
  568. package/dist/utils/shell.js.map +1 -1
  569. package/docs/bundled/README.md +22 -8
  570. package/docs/bundled/extensions/question.md +6 -5
  571. package/docs/bundled/extensions/statusline.md +2 -2
  572. package/docs/bundled/tasks.md +141 -0
  573. package/docs/bundled/tool-presentation.md +41 -31
  574. package/docs/custom-provider.md +44 -0
  575. package/docs/docs.json +10 -6
  576. package/docs/extensions.md +90 -90
  577. package/docs/index.md +2 -1
  578. package/docs/keybindings.md +19 -7
  579. package/docs/llama-cpp.md +12 -1
  580. package/docs/mcp.md +188 -0
  581. package/docs/models.md +35 -0
  582. package/docs/packages.md +4 -0
  583. package/docs/providers.md +6 -0
  584. package/docs/rpc.md +5 -3
  585. package/docs/sdk.md +26 -16
  586. package/docs/security.md +4 -0
  587. package/docs/session-format.md +18 -11
  588. package/docs/settings.md +26 -2
  589. package/docs/themes.md +27 -5
  590. package/docs/tui.md +20 -0
  591. package/docs/usage.md +61 -3
  592. package/docs/virtual-models.md +114 -0
  593. package/docs/windows.md +2 -0
  594. package/examples/README.md +1 -1
  595. package/examples/extensions/README.md +2 -0
  596. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  597. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  598. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  599. package/examples/extensions/custom-provider-gitlab-duo/test.ts +4 -4
  600. package/examples/extensions/debug-provider.ts +90 -0
  601. package/examples/extensions/gondolin/package-lock.json +2 -2
  602. package/examples/extensions/gondolin/package.json +1 -1
  603. package/examples/extensions/jev-router.ts +113 -0
  604. package/examples/extensions/sandbox/package-lock.json +2 -2
  605. package/examples/extensions/sandbox/package.json +1 -1
  606. package/examples/extensions/with-deps/package-lock.json +2 -2
  607. package/examples/extensions/with-deps/package.json +1 -1
  608. package/examples/rpc-client.ts +1 -1
  609. package/examples/rpc-extension-ui.ts +1 -1
  610. package/examples/sdk/14-codemode-mcp.ts +61 -0
  611. package/examples/sdk/README.md +1 -0
  612. package/npm-shrinkwrap.json +409 -423
  613. package/package.json +13 -10
  614. package/dist/bundle/chunks/anthropic-messages-XWFTZP2N.js +0 -6
  615. package/dist/bundle/chunks/azure-openai-responses-HS35BQV6.js +0 -2
  616. package/dist/bundle/chunks/chunk-2IO5GDBS.js +0 -11
  617. package/dist/bundle/chunks/chunk-APQ4ACY3.js +0 -2
  618. package/dist/bundle/chunks/chunk-EDBLK2JQ.js +0 -2
  619. package/dist/bundle/chunks/chunk-NUHFSC37.js +0 -25
  620. package/dist/bundle/chunks/google-generative-ai-NOVAJBFC.js +0 -2
  621. package/dist/bundle/chunks/google-vertex-4VHCZJV5.js +0 -2
  622. package/dist/bundle/chunks/mistral-conversations-WC6A2WCJ.js +0 -5
  623. package/dist/bundle/chunks/openai-codex-responses-XCDG75W2.js +0 -10
  624. package/dist/bundle/chunks/openai-completions-SHS3CAEL.js +0 -7
  625. package/dist/bundle/chunks/openai-responses-UT6XFKC7.js +0 -2
  626. package/dist/bundle/chunks/virtual-modules-W3OGMIX7.js +0 -2
  627. package/dist/core/background/history.d.ts +0 -4
  628. package/dist/core/background/history.d.ts.map +0 -1
  629. package/dist/core/background/history.js.map +0 -1
  630. package/dist/core/background/output.d.ts.map +0 -1
  631. package/dist/core/background/output.js.map +0 -1
  632. package/dist/core/background/presentation.d.ts +0 -9
  633. package/dist/core/background/presentation.d.ts.map +0 -1
  634. package/dist/core/background/presentation.js.map +0 -1
  635. package/dist/core/background/service.d.ts.map +0 -1
  636. package/dist/core/background/service.js.map +0 -1
  637. package/dist/core/background/session.d.ts +0 -63
  638. package/dist/core/background/session.d.ts.map +0 -1
  639. package/dist/core/background/session.js +0 -222
  640. package/dist/core/background/session.js.map +0 -1
  641. package/dist/core/background/types.d.ts.map +0 -1
  642. package/dist/core/background/types.js.map +0 -1
  643. package/dist/core/model-stream-options.d.ts +0 -6
  644. package/dist/core/model-stream-options.d.ts.map +0 -1
  645. package/dist/core/model-stream-options.js +0 -20
  646. package/dist/core/model-stream-options.js.map +0 -1
  647. package/dist/extensions/background/actions.d.ts +0 -11
  648. package/dist/extensions/background/actions.d.ts.map +0 -1
  649. package/dist/extensions/background/actions.js.map +0 -1
  650. package/dist/extensions/background/completion-render.d.ts +0 -8
  651. package/dist/extensions/background/completion-render.d.ts.map +0 -1
  652. package/dist/extensions/background/completion-render.js.map +0 -1
  653. package/dist/extensions/background/constants.d.ts +0 -22
  654. package/dist/extensions/background/constants.d.ts.map +0 -1
  655. package/dist/extensions/background/constants.js.map +0 -1
  656. package/dist/extensions/background/index.d.ts +0 -7
  657. package/dist/extensions/background/index.d.ts.map +0 -1
  658. package/dist/extensions/background/index.js +0 -109
  659. package/dist/extensions/background/index.js.map +0 -1
  660. package/dist/extensions/background/keybindings.d.ts +0 -10
  661. package/dist/extensions/background/keybindings.d.ts.map +0 -1
  662. package/dist/extensions/background/keybindings.js +0 -14
  663. package/dist/extensions/background/keybindings.js.map +0 -1
  664. package/dist/extensions/background/manager.d.ts +0 -80
  665. package/dist/extensions/background/manager.d.ts.map +0 -1
  666. package/dist/extensions/background/manager.js +0 -673
  667. package/dist/extensions/background/manager.js.map +0 -1
  668. package/dist/extensions/background/render.d.ts.map +0 -1
  669. package/dist/extensions/background/render.js.map +0 -1
  670. package/dist/extensions/background/schema.d.ts.map +0 -1
  671. package/dist/extensions/background/schema.js.map +0 -1
  672. package/dist/extensions/background/task-view.d.ts.map +0 -1
  673. package/dist/extensions/background/task-view.js.map +0 -1
  674. package/dist/extensions/background/text.d.ts.map +0 -1
  675. package/dist/extensions/background/text.js.map +0 -1
  676. package/dist/extensions/background/types.d.ts.map +0 -1
  677. package/dist/extensions/background/types.js.map +0 -1
  678. package/dist/extensions/subagent/activity.d.ts +0 -34
  679. package/dist/extensions/subagent/activity.d.ts.map +0 -1
  680. package/dist/extensions/subagent/activity.js +0 -192
  681. package/dist/extensions/subagent/activity.js.map +0 -1
  682. package/dist/extensions/subagent/agents-command.d.ts +0 -4
  683. package/dist/extensions/subagent/agents-command.d.ts.map +0 -1
  684. package/dist/extensions/subagent/agents-command.js +0 -230
  685. package/dist/extensions/subagent/agents-command.js.map +0 -1
  686. package/dist/extensions/subagent/agents.d.ts +0 -6
  687. package/dist/extensions/subagent/agents.d.ts.map +0 -1
  688. package/dist/extensions/subagent/agents.js +0 -53
  689. package/dist/extensions/subagent/agents.js.map +0 -1
  690. package/dist/extensions/subagent/budget.d.ts +0 -15
  691. package/dist/extensions/subagent/budget.d.ts.map +0 -1
  692. package/dist/extensions/subagent/budget.js +0 -123
  693. package/dist/extensions/subagent/budget.js.map +0 -1
  694. package/dist/extensions/subagent/cancellation.d.ts +0 -29
  695. package/dist/extensions/subagent/cancellation.d.ts.map +0 -1
  696. package/dist/extensions/subagent/cancellation.js +0 -91
  697. package/dist/extensions/subagent/cancellation.js.map +0 -1
  698. package/dist/extensions/subagent/constants.d.ts +0 -25
  699. package/dist/extensions/subagent/constants.d.ts.map +0 -1
  700. package/dist/extensions/subagent/constants.js +0 -50
  701. package/dist/extensions/subagent/constants.js.map +0 -1
  702. package/dist/extensions/subagent/index.d.ts +0 -3
  703. package/dist/extensions/subagent/index.d.ts.map +0 -1
  704. package/dist/extensions/subagent/index.js +0 -151
  705. package/dist/extensions/subagent/index.js.map +0 -1
  706. package/dist/extensions/subagent/model-selection.d.ts +0 -16
  707. package/dist/extensions/subagent/model-selection.d.ts.map +0 -1
  708. package/dist/extensions/subagent/model-selection.js +0 -51
  709. package/dist/extensions/subagent/model-selection.js.map +0 -1
  710. package/dist/extensions/subagent/render.d.ts +0 -24
  711. package/dist/extensions/subagent/render.d.ts.map +0 -1
  712. package/dist/extensions/subagent/render.js +0 -336
  713. package/dist/extensions/subagent/render.js.map +0 -1
  714. package/dist/extensions/subagent/resolve.d.ts +0 -31
  715. package/dist/extensions/subagent/resolve.d.ts.map +0 -1
  716. package/dist/extensions/subagent/resolve.js +0 -111
  717. package/dist/extensions/subagent/resolve.js.map +0 -1
  718. package/dist/extensions/subagent/runner.d.ts +0 -35
  719. package/dist/extensions/subagent/runner.d.ts.map +0 -1
  720. package/dist/extensions/subagent/runner.js +0 -255
  721. package/dist/extensions/subagent/runner.js.map +0 -1
  722. package/dist/extensions/subagent/schema.d.ts +0 -28
  723. package/dist/extensions/subagent/schema.d.ts.map +0 -1
  724. package/dist/extensions/subagent/schema.js +0 -58
  725. package/dist/extensions/subagent/schema.js.map +0 -1
  726. package/dist/extensions/subagent/sdk-runner.d.ts +0 -33
  727. package/dist/extensions/subagent/sdk-runner.d.ts.map +0 -1
  728. package/dist/extensions/subagent/sdk-runner.js +0 -331
  729. package/dist/extensions/subagent/sdk-runner.js.map +0 -1
  730. package/dist/extensions/subagent/settings.d.ts +0 -8
  731. package/dist/extensions/subagent/settings.d.ts.map +0 -1
  732. package/dist/extensions/subagent/settings.js +0 -206
  733. package/dist/extensions/subagent/settings.js.map +0 -1
  734. package/dist/extensions/subagent/state.d.ts +0 -102
  735. package/dist/extensions/subagent/state.d.ts.map +0 -1
  736. package/dist/extensions/subagent/state.js +0 -383
  737. package/dist/extensions/subagent/state.js.map +0 -1
  738. package/dist/extensions/subagent/text.d.ts +0 -6
  739. package/dist/extensions/subagent/text.d.ts.map +0 -1
  740. package/dist/extensions/subagent/text.js +0 -66
  741. package/dist/extensions/subagent/text.js.map +0 -1
  742. package/dist/extensions/subagent/types.d.ts +0 -91
  743. package/dist/extensions/subagent/types.d.ts.map +0 -1
  744. package/dist/extensions/subagent/types.js +0 -2
  745. package/dist/extensions/subagent/types.js.map +0 -1
  746. package/dist/extensions/subagent/ui/agents-dialog.d.ts +0 -4
  747. package/dist/extensions/subagent/ui/agents-dialog.d.ts.map +0 -1
  748. package/dist/extensions/subagent/ui/agents-dialog.js +0 -84
  749. package/dist/extensions/subagent/ui/agents-dialog.js.map +0 -1
  750. package/dist/extensions/subagent/ui/choice-menu.d.ts +0 -39
  751. package/dist/extensions/subagent/ui/choice-menu.d.ts.map +0 -1
  752. package/dist/extensions/subagent/ui/choice-menu.js +0 -93
  753. package/dist/extensions/subagent/ui/choice-menu.js.map +0 -1
  754. package/dist/extensions/subagent/ui/choices.d.ts +0 -36
  755. package/dist/extensions/subagent/ui/choices.d.ts.map +0 -1
  756. package/dist/extensions/subagent/ui/choices.js +0 -54
  757. package/dist/extensions/subagent/ui/choices.js.map +0 -1
  758. package/dist/extensions/subagent/ui/model-list.d.ts +0 -66
  759. package/dist/extensions/subagent/ui/model-list.d.ts.map +0 -1
  760. package/dist/extensions/subagent/ui/model-list.js +0 -235
  761. package/dist/extensions/subagent/ui/model-list.js.map +0 -1
  762. package/dist/extensions/subagent/ui/model-picker.d.ts +0 -47
  763. package/dist/extensions/subagent/ui/model-picker.d.ts.map +0 -1
  764. package/dist/extensions/subagent/ui/model-picker.js +0 -143
  765. package/dist/extensions/subagent/ui/model-picker.js.map +0 -1
  766. package/dist/extensions/subagent/ui/profile-settings-menu.d.ts +0 -41
  767. package/dist/extensions/subagent/ui/profile-settings-menu.d.ts.map +0 -1
  768. package/dist/extensions/subagent/ui/profile-settings-menu.js +0 -98
  769. package/dist/extensions/subagent/ui/profile-settings-menu.js.map +0 -1
  770. package/dist/modes/interactive/components/tool-chrome.d.ts +0 -28
  771. package/dist/modes/interactive/components/tool-chrome.d.ts.map +0 -1
  772. package/dist/modes/interactive/components/tool-chrome.js +0 -84
  773. package/dist/modes/interactive/components/tool-chrome.js.map +0 -1
  774. package/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
  775. package/dist/modes/interactive/components/tool-execution.js.map +0 -1
  776. package/dist/modes/interactive/components/tool-group.d.ts +0 -17
  777. package/dist/modes/interactive/components/tool-group.d.ts.map +0 -1
  778. package/dist/modes/interactive/components/tool-group.js +0 -78
  779. package/dist/modes/interactive/components/tool-group.js.map +0 -1
  780. package/dist/modes/interactive/tool-chat.d.ts +0 -21
  781. package/dist/modes/interactive/tool-chat.d.ts.map +0 -1
  782. package/dist/modes/interactive/tool-chat.js +0 -58
  783. package/dist/modes/interactive/tool-chat.js.map +0 -1
  784. package/docs/bundled/extensions/background.md +0 -132
  785. package/docs/bundled/extensions/subagent.md +0 -148
  786. /package/dist/{extensions/background → core/tools/tasks}/types.js +0 -0
@@ -1,8 +1,10 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { parseBackgroundHistory } from "./history.js";
3
- import { BACKGROUND_TITLE_BYTES, boundedResult, boundText, finiteLimit, readOutputSlice, sliceText } from "./output.js";
4
- import { readBackgroundProjection } from "./presentation.js";
5
- import { BackgroundExecutionError, BackgroundLookupError, isForegroundShellTask, SUBAGENT_BACKGROUND_REJECTION, } from "./types.js";
2
+ import { boundedResult, boundText, finiteLimit, readOutputSlice, sliceText, TASK_TITLE_BYTES } from "./output.js";
3
+ import { readTaskProjection } from "./presentation.js";
4
+ import { TaskStore } from "./store.js";
5
+ import { TASK_BACKGROUND_REJECTION, TaskExecutionError, TaskLookupError, } from "./types.js";
6
+ import { TaskViewRegistry } from "./view.js";
7
+ import { readTaskViewData } from "./view-data.js";
6
8
  function errorText(error) {
7
9
  try {
8
10
  return boundText(error instanceof Error ? error.message : String(error), 4096);
@@ -12,7 +14,7 @@ function errorText(error) {
12
14
  }
13
15
  }
14
16
  function storeResult(task, result, truncated = false) {
15
- const bounded = boundedResult(result);
17
+ const bounded = boundedResult({ content: result.content, details: undefined });
16
18
  task.result = bounded;
17
19
  task.resultTruncated =
18
20
  truncated ||
@@ -22,24 +24,16 @@ function storeResult(task, result, truncated = false) {
22
24
  return original?.type !== "text" || block.type !== "text" || block.text !== original.text;
23
25
  });
24
26
  }
25
- function oldestTask(tasks) {
26
- let oldest;
27
- for (const task of tasks) {
28
- if (!oldest || task.endedAt < oldest.endedAt)
29
- oldest = task;
30
- }
31
- return oldest;
32
- }
33
- /** Session-local supervision. Executors own their processes, workers and output files. */
34
- export class BackgroundService {
27
+ /** Session-local supervision. Executors own their processes, items and output files. */
28
+ export class TaskRuntime {
35
29
  get closed() {
36
30
  return this._closed;
37
31
  }
38
32
  constructor(options = {}) {
39
- this.records = new Map();
33
+ this.views = new TaskViewRegistry();
34
+ this.executions = new Map();
40
35
  this.listeners = new Set();
41
36
  this._closed = false;
42
- this.cleanups = new Set();
43
37
  this.pauses = 0;
44
38
  this.options = options;
45
39
  this.configuredEnabled = options.enabled ?? false;
@@ -47,6 +41,7 @@ export class BackgroundService {
47
41
  this.maxHistory = finiteLimit(options.maxHistory, 32, 1024);
48
42
  // Separate foreground shell history, plus the existing history/protected-record allowance.
49
43
  this.maxRetained = this.maxActive + 2 * Math.max(1, this.maxHistory) + this.maxHistory;
44
+ this.store = new TaskStore(this.maxHistory, this.maxRetained, () => this.closed, options.onCleanupError);
50
45
  }
51
46
  /**
52
47
  * Rehydrate terminal version-2 custom data only, newest endedAt in each history
@@ -55,68 +50,10 @@ export class BackgroundService {
55
50
  * The host supplies the current branch; closed services ignore restoration.
56
51
  */
57
52
  restoreHistory(records) {
58
- if (this.closed)
59
- return;
60
- // Restoration must not evict runtime-owned records or run their cleanup callbacks.
61
- const history = this.historyRecords();
62
- const shells = history.filter((record) => isForegroundShellTask(record.task)).length;
63
- const shellCapacity = Math.max(0, this.maxHistory - shells);
64
- const taskCapacity = Math.max(0, this.maxHistory - (history.length - shells));
65
- const capacity = Math.max(0, Math.min(shellCapacity + taskCapacity, this.maxRetained - this.records.size - this.cleanups.size));
66
- const newest = new Map();
67
- for (const value of records) {
68
- const task = parseBackgroundHistory(value);
69
- if (!task)
70
- continue;
71
- const existing = this.records.get(task.id);
72
- if (existing) {
73
- if (existing.settled)
74
- existing.visible = true;
75
- continue;
76
- }
77
- if (capacity === 0)
78
- continue;
79
- const previous = newest.get(task.id);
80
- if (previous && previous.endedAt > task.endedAt)
81
- continue;
82
- newest.delete(task.id);
83
- const shell = isForegroundShellTask(task);
84
- const limit = shell ? shellCapacity : taskCapacity;
85
- if (limit === 0)
86
- continue;
87
- newest.set(task.id, task);
88
- const group = [...newest.values()].filter((candidate) => isForegroundShellTask(candidate) === shell);
89
- if (group.length > limit)
90
- newest.delete(oldestTask(group).id);
91
- if (newest.size > capacity) {
92
- // Protected runtime records can leave less room than both histories allow.
93
- // Restore inspectable tasks before hidden foreground shell logs in that case.
94
- const foreground = [...newest.values()].filter(isForegroundShellTask);
95
- newest.delete(oldestTask(foreground.length ? foreground : newest.values()).id);
96
- }
97
- }
98
- for (const task of [...newest.values()].sort((a, b) => a.endedAt - b.endedAt)) {
99
- this.records.set(task.id, {
100
- task,
101
- controller: new AbortController(),
102
- accepted: false,
103
- handedOff: false,
104
- detachRequested: false,
105
- settled: true,
106
- accounted: true,
107
- visible: true,
108
- suppressed: true,
109
- delivery: "delivered",
110
- pins: 0,
111
- waiters: new Set(),
112
- removeParent: () => { },
113
- handoff: () => { },
114
- done: Promise.resolve(),
115
- });
116
- }
53
+ this.store.restoreHistory(records);
117
54
  }
118
55
  get enabled() {
119
- return this.configuredEnabled && !this.closed && this.options.role !== "subagent";
56
+ return this.configuredEnabled && !this.closed && this.options.backgroundAllowed !== false;
120
57
  }
121
58
  setEnabled(enabled) {
122
59
  this.configuredEnabled = enabled;
@@ -124,27 +61,30 @@ export class BackgroundService {
124
61
  }
125
62
  async execute(execution) {
126
63
  // Admission and registration happen synchronously, before invoking user code or awaiting anything.
127
- if (this.options.role === "subagent")
128
- throw new Error(SUBAGENT_BACKGROUND_REJECTION);
64
+ if (execution.background && this.options.backgroundAllowed === false)
65
+ throw new Error(TASK_BACKGROUND_REJECTION);
129
66
  if (this.closed)
130
67
  throw new Error("Background service is closed");
131
- if (!this.enabled)
68
+ if (execution.background && !this.enabled)
132
69
  throw new Error("Background execution is not available in this host");
133
70
  if (execution.signal?.aborted)
134
71
  throw execution.signal.reason ?? new Error("Execution aborted");
135
- if ([...this.records.values()].filter((record) => !record.settled).length >= this.maxActive) {
72
+ if ([...this.store.records.values()].filter((record) => !record.settled).length >= this.maxActive) {
136
73
  throw new Error(`Background execution limit reached (${this.maxActive})`);
137
74
  }
138
- if (this.records.size + this.cleanups.size >= this.maxRetained) {
75
+ if (this.store.records.size + this.store.cleanups.size >= this.maxRetained) {
139
76
  throw new Error("Background history retention limit reached; deliver pending notifications or release pinned or claimed records");
140
77
  }
78
+ if (!/^[a-z][a-z0-9-]{0,63}$/.test(execution.kind))
79
+ throw new Error("Invalid task source");
141
80
  const anchorId = this.options.anchor?.() ?? null;
142
81
  if (anchorId !== null && Buffer.byteLength(anchorId) > 8192)
143
82
  throw new Error("Background branch anchor is too large");
144
83
  const task = {
145
84
  id: `${execution.kind}-${randomUUID()}`,
146
85
  kind: execution.kind,
147
- title: boundText(execution.title, BACKGROUND_TITLE_BYTES),
86
+ format: execution.format ?? "report",
87
+ title: boundText(execution.title, TASK_TITLE_BYTES),
148
88
  toolCallId: boundText(execution.toolCallId, 512),
149
89
  anchorId,
150
90
  mode: execution.background ? "background" : "foreground",
@@ -163,30 +103,35 @@ export class BackgroundService {
163
103
  let resolveDone;
164
104
  const record = {
165
105
  task,
166
- controller: new AbortController(),
167
- accepted: false,
168
- handedOff: false,
169
- detachRequested: execution.background ?? false,
170
106
  settled: false,
171
107
  accounted: false,
172
108
  visible: true,
173
109
  suppressed: false,
174
110
  delivery: "pending",
175
111
  pins: 0,
112
+ deliveryHolds: 0,
176
113
  waiters: new Set(),
114
+ };
115
+ const active = {
116
+ controller: new AbortController(),
117
+ accepted: false,
118
+ handedOff: false,
119
+ detachRequested: execution.background ?? false,
120
+ modeListeners: new Set(),
177
121
  removeParent: () => { },
178
122
  handoff: () => {
179
- if (!record.accepted ||
180
- !record.detachRequested ||
123
+ if (!active.accepted ||
124
+ !active.detachRequested ||
181
125
  record.settled ||
182
- record.handedOff ||
126
+ active.handedOff ||
183
127
  this.closed ||
184
128
  record.suppressed ||
185
- record.controller.signal.aborted)
129
+ active.controller.signal.aborted)
186
130
  return;
131
+ active.handedOff = true;
187
132
  record.handedOff = true;
188
133
  task.mode = "background";
189
- record.removeParent();
134
+ active.removeParent();
190
135
  resolveCaller({ kind: "background", task: this.snapshot(record) });
191
136
  this.emit();
192
137
  },
@@ -197,31 +142,41 @@ export class BackgroundService {
197
142
  const parentSignal = execution.signal;
198
143
  let onUpdate = execution.background ? undefined : execution.onUpdate;
199
144
  const parentAbort = () => {
200
- if (!record.detachRequested || !record.accepted)
145
+ if (!active.detachRequested || !active.accepted)
201
146
  this.cancel(record);
202
147
  };
203
148
  parentSignal?.addEventListener("abort", parentAbort, { once: true });
204
- record.removeParent = () => {
149
+ active.removeParent = () => {
205
150
  parentSignal?.removeEventListener("abort", parentAbort);
206
151
  onUpdate = undefined;
207
152
  };
208
- this.records.set(task.id, record);
153
+ this.store.records.set(task.id, record);
154
+ this.executions.set(task.id, active);
209
155
  const control = {
210
156
  id: task.id,
211
- signal: record.controller.signal,
157
+ signal: active.controller.signal,
212
158
  get mode() {
213
159
  return task.mode;
214
160
  },
161
+ onModeChange: (listener) => {
162
+ if (record.settled || this.closed)
163
+ return () => { };
164
+ active.modeListeners.add(listener);
165
+ return () => {
166
+ active.modeListeners.delete(listener);
167
+ };
168
+ },
169
+ requestCancel: () => this.cancel(record),
215
170
  accept: () => {
216
- if (record.settled || record.accepted || this.closed || record.controller.signal.aborted)
171
+ if (record.settled || active.accepted || this.closed || active.controller.signal.aborted)
217
172
  return;
218
- record.accepted = true;
173
+ active.accepted = true;
219
174
  if (task.status === "queued")
220
175
  task.status = "running";
221
- if (record.detachRequested)
222
- record.removeParent();
176
+ if (active.detachRequested)
177
+ active.removeParent();
223
178
  // Let an already available final result win over a handoff.
224
- queueMicrotask(() => queueMicrotask(record.handoff));
179
+ queueMicrotask(() => queueMicrotask(active.handoff));
225
180
  this.emit();
226
181
  },
227
182
  publish: (result, projection) => {
@@ -229,10 +184,10 @@ export class BackgroundService {
229
184
  return;
230
185
  storeResult(task, result);
231
186
  if (result.usage !== undefined)
232
- record.publishedUsage = structuredClone(result.usage);
187
+ active.publishedUsage = structuredClone(result.usage);
233
188
  if (projection)
234
- task.projection = readBackgroundProjection(projection);
235
- if (!record.detachRequested && !record.handedOff) {
189
+ task.projection = readTaskProjection(projection);
190
+ if (!active.detachRequested && !active.handedOff) {
236
191
  try {
237
192
  onUpdate?.(result);
238
193
  }
@@ -257,19 +212,26 @@ export class BackgroundService {
257
212
  task.outputPath = path;
258
213
  this.emit();
259
214
  },
215
+ publishView: (data) => {
216
+ if (record.settled || this.closed)
217
+ return;
218
+ task.viewData = readTaskViewData(data);
219
+ this.emit();
220
+ },
260
221
  };
261
222
  const finish = (completion, error) => {
262
223
  if (record.settled)
263
224
  return;
264
225
  record.settled = true;
265
- record.removeParent();
226
+ active.modeListeners.clear();
227
+ active.removeParent();
266
228
  task.endedAt = Date.now();
267
229
  const failed = completion === undefined;
268
230
  task.status =
269
231
  completion?.status ??
270
- (error instanceof BackgroundExecutionError
232
+ (error instanceof TaskExecutionError
271
233
  ? error.status
272
- : record.controller.signal.aborted
234
+ : active.controller.signal.aborted
273
235
  ? "cancelled"
274
236
  : failed
275
237
  ? "failed"
@@ -290,7 +252,7 @@ export class BackgroundService {
290
252
  }
291
253
  let settlementWarning;
292
254
  try {
293
- this.options.onSettled?.(this.snapshot(record), completion?.usage ?? completion?.result.usage ?? record.publishedUsage);
255
+ this.options.onSettled?.(this.snapshot(record), completion?.usage ?? completion?.result.usage ?? active.publishedUsage);
294
256
  }
295
257
  catch (accountingError) {
296
258
  const warning = `Usage settlement failed: ${errorText(accountingError)}`;
@@ -301,9 +263,9 @@ export class BackgroundService {
301
263
  details: task.result?.details,
302
264
  }, task.resultTruncated);
303
265
  }
304
- record.publishedUsage = undefined;
266
+ active.publishedUsage = undefined;
305
267
  record.accounted = true;
306
- if (!record.handedOff) {
268
+ if (!active.handedOff) {
307
269
  record.delivery = "delivered";
308
270
  if (failed)
309
271
  rejectCaller(error);
@@ -317,7 +279,8 @@ export class BackgroundService {
317
279
  for (const waiter of [...record.waiters])
318
280
  waiter();
319
281
  resolveDone();
320
- this.trim();
282
+ this.executions.delete(task.id);
283
+ this.store.trim();
321
284
  this.emit();
322
285
  };
323
286
  // The rejection handler is installed immediately, including for synchronous preflight throws.
@@ -334,30 +297,57 @@ export class BackgroundService {
334
297
  detachForeground() {
335
298
  if (!this.enabled)
336
299
  return 0;
337
- const records = [...this.records.values()].filter((record) => !record.settled && !record.detachRequested && !record.controller.signal.aborted);
338
- // Update the whole batch before callbacks/observers can re-enter.
339
- for (const record of records) {
340
- record.detachRequested = true;
341
- record.task.mode = "background";
342
- if (record.accepted)
343
- record.removeParent();
344
- }
300
+ const records = [...this.store.records.values()].filter((record) => {
301
+ const active = this.executions.get(record.task.id);
302
+ return active && !record.settled && !active.detachRequested && !active.controller.signal.aborted;
303
+ });
304
+ for (const record of records)
305
+ this.prepareDetach(record);
345
306
  for (const record of records)
346
- record.handoff();
307
+ this.finishDetach(record);
347
308
  if (records.length)
348
309
  this.emit();
349
310
  return records.length;
350
311
  }
312
+ detach(id) {
313
+ const record = this.lookup(id);
314
+ const active = this.executions.get(record.task.id);
315
+ if (!this.enabled || !active || record.settled || active.detachRequested || active.controller.signal.aborted)
316
+ return false;
317
+ this.prepareDetach(record);
318
+ this.finishDetach(record);
319
+ this.emit();
320
+ return true;
321
+ }
322
+ prepareDetach(record) {
323
+ const active = this.executions.get(record.task.id);
324
+ active.detachRequested = true;
325
+ record.task.mode = "background";
326
+ if (active.accepted)
327
+ active.removeParent();
328
+ }
329
+ finishDetach(record) {
330
+ const active = this.executions.get(record.task.id);
331
+ active.handoff();
332
+ for (const listener of active.modeListeners) {
333
+ try {
334
+ listener(record.task.mode);
335
+ }
336
+ catch {
337
+ /* Executors own their diagnostics. */
338
+ }
339
+ }
340
+ }
351
341
  list() {
352
- return [...this.records.values()].filter((record) => record.visible).map((record) => this.snapshot(record));
342
+ return [...this.store.records.values()].filter((record) => record.visible).map((record) => this.snapshot(record));
353
343
  }
354
344
  lookup(id) {
355
- const exact = this.records.get(id);
345
+ const exact = this.store.records.get(id);
356
346
  if (exact)
357
347
  return exact;
358
- const matches = [...this.records.values()].filter(({ task }) => task.id.startsWith(id) || task.id.slice(task.kind.length + 1).startsWith(id));
348
+ const matches = [...this.store.records.values()].filter(({ task }) => task.id.startsWith(id) || task.id.slice(task.kind.length + 1).startsWith(id));
359
349
  if (!id || matches.length !== 1) {
360
- throw new BackgroundLookupError(matches.length > 1 ? "ambiguous" : "unknown", matches.map((record) => this.snapshot(record)));
350
+ throw new TaskLookupError(matches.length > 1 ? "ambiguous" : "unknown", matches.map((record) => this.snapshot(record)));
361
351
  }
362
352
  return matches[0];
363
353
  }
@@ -366,7 +356,7 @@ export class BackgroundService {
366
356
  }
367
357
  async read(id, options = {}) {
368
358
  const record = this.lookup(id);
369
- const release = this.pin(record.task.id);
359
+ const release = this.retain(record.task.id);
370
360
  try {
371
361
  const task = this.snapshot(record);
372
362
  if (task.outputPath) {
@@ -418,7 +408,7 @@ export class BackgroundService {
418
408
  reject(signal?.reason ?? new Error("Wait aborted"));
419
409
  else
420
410
  resolve(this.snapshot(record));
421
- this.trim();
411
+ this.store.trim();
422
412
  this.emit();
423
413
  };
424
414
  const wake = () => complete();
@@ -434,10 +424,11 @@ export class BackgroundService {
434
424
  return this.cancel(this.lookup(id));
435
425
  }
436
426
  cancel(record) {
437
- if (record.settled || record.controller.signal.aborted)
427
+ const active = this.executions.get(record.task.id);
428
+ if (!active || record.settled || active.controller.signal.aborted)
438
429
  return false;
439
430
  record.task.status = "stopping";
440
- record.controller.abort();
431
+ active.controller.abort();
441
432
  this.emit();
442
433
  return true;
443
434
  }
@@ -450,11 +441,9 @@ export class BackgroundService {
450
441
  };
451
442
  }
452
443
  /**
453
- * Pins defer history eviction and completion delivery, so a live read or a watched row
454
- * never races an automatic notification for the same record. Releasing resumes both, and
455
- * announces the record only when that unblocks a delivery.
444
+ * Retention protects snapshots and logs only. Delivery has its own explicit hold.
456
445
  */
457
- pin(id) {
446
+ retain(id) {
458
447
  const record = this.lookup(id);
459
448
  record.pins++;
460
449
  let released = false;
@@ -463,11 +452,24 @@ export class BackgroundService {
463
452
  return;
464
453
  released = true;
465
454
  record.pins--;
466
- this.trim();
455
+ this.store.trim();
467
456
  if (!this.closed && this.pauses === 0 && this.candidate(record))
468
457
  this.emit();
469
458
  };
470
459
  }
460
+ holdDelivery(id) {
461
+ const record = this.lookup(id);
462
+ const releaseRetention = this.retain(id);
463
+ record.deliveryHolds++;
464
+ let released = false;
465
+ return () => {
466
+ if (released)
467
+ return;
468
+ released = true;
469
+ record.deliveryHolds--;
470
+ releaseRetention();
471
+ };
472
+ }
471
473
  pause() {
472
474
  this.pauses++;
473
475
  let resumed = false;
@@ -482,80 +484,80 @@ export class BackgroundService {
482
484
  pendingNotifications() {
483
485
  if (this.closed || this.pauses > 0)
484
486
  return [];
485
- return [...this.records.values()]
487
+ return [...this.store.records.values()]
486
488
  .filter((record) => this.candidate(record))
487
489
  .map((record) => this.snapshot(record));
488
490
  }
489
491
  /**
490
- * A pinned record is being read or watched, so its completion is not announced yet:
491
- * a terminal `bg wait` or `bg read` delivers the result as its own tool result instead.
492
+ * Only explicit result-delivery holds delay an automatic completion.
492
493
  */
493
494
  candidate(record) {
494
495
  return (record.visible &&
495
496
  record.settled &&
496
497
  record.accounted &&
497
- record.handedOff &&
498
+ record.handedOff === true &&
498
499
  !record.suppressed &&
499
500
  record.delivery === "pending" &&
500
501
  record.waiters.size === 0 &&
501
- record.pins === 0);
502
+ record.deliveryHolds === 0);
502
503
  }
503
504
  claimNotification(id) {
504
505
  if (this.closed || this.pauses > 0)
505
506
  return false;
506
- const record = this.records.get(id);
507
+ const record = this.store.records.get(id);
507
508
  if (!record || !this.candidate(record))
508
509
  return false;
509
510
  record.delivery = "claimed";
510
511
  return true;
511
512
  }
512
513
  markDelivered(id) {
513
- const record = this.records.get(id);
514
+ const record = this.store.records.get(id);
514
515
  if (!record)
515
516
  return;
516
517
  record.delivery = "delivered";
517
- this.trim();
518
+ this.store.trim();
518
519
  }
519
520
  releaseNotification(id) {
520
- const record = this.records.get(id);
521
+ const record = this.store.records.get(id);
521
522
  if (!record || record.delivery !== "claimed")
522
523
  return;
523
524
  record.delivery = "pending";
524
- this.trim();
525
+ this.store.trim();
525
526
  this.emit();
526
527
  }
527
528
  close() {
528
529
  if (this.closed)
529
530
  return;
530
531
  this._closed = true;
532
+ this.views.close();
531
533
  this.listeners.clear();
532
- for (const record of this.records.values()) {
534
+ for (const record of this.store.records.values()) {
533
535
  record.suppressed = true;
534
- record.removeParent();
536
+ this.executions.get(record.task.id)?.removeParent();
535
537
  this.cancel(record);
536
538
  for (const waiter of [...record.waiters])
537
539
  waiter();
538
540
  }
539
- this.trim();
541
+ this.store.trim();
540
542
  }
541
543
  async shutdown(graceMs = 2000) {
542
544
  this.close();
543
- await this.drain([...this.records.values()], graceMs);
545
+ await this.drain([...this.store.records.values()], graceMs);
544
546
  }
545
547
  async cancelOutsideBranch(ancestors) {
546
- for (const record of this.records.values()) {
548
+ for (const record of this.store.records.values()) {
547
549
  record.visible = record.task.anchorId === null || ancestors.has(record.task.anchorId);
548
550
  // Returning to a branch revives its undelivered completions; restored history
549
551
  // stays delivered and suppressed.
550
552
  if (record.visible && record.delivery === "pending")
551
553
  record.suppressed = false;
552
554
  }
553
- const outside = [...this.records.values()].filter((record) => !record.visible);
555
+ const outside = [...this.store.records.values()].filter((record) => !record.visible);
554
556
  for (const record of outside)
555
557
  record.suppressed = true;
556
558
  for (const record of outside)
557
559
  this.cancel(record);
558
- this.trim();
560
+ this.store.trim();
559
561
  this.emit();
560
562
  await this.drain(outside, 2000);
561
563
  }
@@ -563,7 +565,7 @@ export class BackgroundService {
563
565
  let timer;
564
566
  try {
565
567
  await Promise.race([
566
- Promise.all(records.map((record) => record.done)).then(() => Promise.all(this.cleanups)),
568
+ Promise.all(records.map((record) => this.executions.get(record.task.id)?.done)).then(() => Promise.all(this.store.cleanups)),
567
569
  new Promise((resolve) => {
568
570
  timer = setTimeout(resolve, finiteLimit(graceMs, 2000, 60_000));
569
571
  }),
@@ -577,52 +579,6 @@ export class BackgroundService {
577
579
  snapshot(record) {
578
580
  return structuredClone(record.task);
579
581
  }
580
- cleanupOutput(record) {
581
- if (!record.settled || record.pins || record.waiters.size || !record.cleanup)
582
- return;
583
- const cleanup = record.cleanup;
584
- record.cleanup = undefined;
585
- // Snapshots retain final bounded text; expired files are never needed to render history.
586
- record.task.outputPath = undefined;
587
- record.readError = "Output has expired: the managed log was released; showing the stored result.";
588
- const pending = Promise.resolve()
589
- .then(cleanup)
590
- .catch((error) => {
591
- try {
592
- this.options.onCleanupError?.(errorText(error));
593
- }
594
- catch {
595
- /* Cleanup/reporting is best effort, never an unhandled rejection. */
596
- }
597
- })
598
- .finally(() => this.cleanups.delete(pending));
599
- this.cleanups.add(pending);
600
- }
601
- /** Pending delivery, active reads and pins have their own bounded retention allowance. */
602
- historyRecords() {
603
- return [...this.records.values()].filter((record) => record.settled && record.delivery === "delivered" && !record.pins && !record.waiters.size);
604
- }
605
- trim() {
606
- if (this.closed) {
607
- for (const record of this.records.values())
608
- this.cleanupOutput(record);
609
- return;
610
- }
611
- // Undelivered notifications and claims are never evicted. Admission bounds all retention.
612
- const history = this.historyRecords();
613
- // Delivered history can be restored from branch snapshots; hidden rows must
614
- // not occupy the current branch's history budget. Pending results stay owned.
615
- const expired = history.filter((record) => !record.visible);
616
- for (const shell of [false, true]) {
617
- const group = history.filter((record) => record.visible && isForegroundShellTask(record.task) === shell);
618
- group.sort((left, right) => (left.task.endedAt ?? 0) - (right.task.endedAt ?? 0));
619
- expired.push(...group.slice(0, Math.max(0, group.length - this.maxHistory)));
620
- }
621
- for (const record of expired) {
622
- this.records.delete(record.task.id);
623
- this.cleanupOutput(record);
624
- }
625
- }
626
582
  emit() {
627
583
  if (this.closed)
628
584
  return;
@@ -638,4 +594,4 @@ export class BackgroundService {
638
594
  }
639
595
  }
640
596
  }
641
- //# sourceMappingURL=service.js.map
597
+ //# sourceMappingURL=runtime.js.map