@astralyn/pi 0.87.6 → 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 (698) hide show
  1. package/CHANGELOG.md +30 -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-4W4Q2H6W.js → chunk-VW2P3X6P.js} +905 -278
  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 +100 -35
  60. package/dist/core/agent-session.d.ts.map +1 -1
  61. package/dist/core/agent-session.js +456 -194
  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/crash-log.d.ts.map +1 -1
  73. package/dist/core/crash-log.js +2 -1
  74. package/dist/core/crash-log.js.map +1 -1
  75. package/dist/core/export-html/template.css +10 -0
  76. package/dist/core/export-html/template.js +66 -17
  77. package/dist/core/extensions/distribution-api.d.ts +1 -1
  78. package/dist/core/extensions/distribution-api.d.ts.map +1 -1
  79. package/dist/core/extensions/distribution-api.js.map +1 -1
  80. package/dist/core/extensions/index.d.ts +2 -2
  81. package/dist/core/extensions/index.d.ts.map +1 -1
  82. package/dist/core/extensions/index.js.map +1 -1
  83. package/dist/core/extensions/loader.d.ts.map +1 -1
  84. package/dist/core/extensions/loader.js +55 -5
  85. package/dist/core/extensions/loader.js.map +1 -1
  86. package/dist/core/extensions/runner.d.ts +22 -3
  87. package/dist/core/extensions/runner.d.ts.map +1 -1
  88. package/dist/core/extensions/runner.js +124 -8
  89. package/dist/core/extensions/runner.js.map +1 -1
  90. package/dist/core/extensions/types.d.ts +305 -25
  91. package/dist/core/extensions/types.d.ts.map +1 -1
  92. package/dist/core/extensions/types.js.map +1 -1
  93. package/dist/core/extensions/wrapper.d.ts +2 -2
  94. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  95. package/dist/core/extensions/wrapper.js +3 -3
  96. package/dist/core/extensions/wrapper.js.map +1 -1
  97. package/dist/core/keybindings.d.ts +30 -5
  98. package/dist/core/keybindings.d.ts.map +1 -1
  99. package/dist/core/keybindings.js +7 -1
  100. package/dist/core/keybindings.js.map +1 -1
  101. package/dist/core/mcp-servers.d.ts +98 -0
  102. package/dist/core/mcp-servers.d.ts.map +1 -0
  103. package/dist/core/mcp-servers.js +158 -0
  104. package/dist/core/mcp-servers.js.map +1 -0
  105. package/dist/core/model-registry.d.ts +13 -1
  106. package/dist/core/model-registry.d.ts.map +1 -1
  107. package/dist/core/model-registry.js +25 -0
  108. package/dist/core/model-registry.js.map +1 -1
  109. package/dist/core/model-resolver.d.ts +2 -2
  110. package/dist/core/model-resolver.d.ts.map +1 -1
  111. package/dist/core/model-resolver.js +5 -5
  112. package/dist/core/model-resolver.js.map +1 -1
  113. package/dist/core/model-runtime.d.ts +41 -3
  114. package/dist/core/model-runtime.d.ts.map +1 -1
  115. package/dist/core/model-runtime.js +167 -17
  116. package/dist/core/model-runtime.js.map +1 -1
  117. package/dist/core/nested-tool-calls.d.ts +102 -0
  118. package/dist/core/nested-tool-calls.d.ts.map +1 -0
  119. package/dist/core/nested-tool-calls.js +177 -0
  120. package/dist/core/nested-tool-calls.js.map +1 -0
  121. package/dist/core/package-manager.d.ts +4 -0
  122. package/dist/core/package-manager.d.ts.map +1 -1
  123. package/dist/core/package-manager.js +58 -12
  124. package/dist/core/package-manager.js.map +1 -1
  125. package/dist/core/provider-composer.d.ts +40 -21
  126. package/dist/core/provider-composer.d.ts.map +1 -1
  127. package/dist/core/provider-composer.js +92 -40
  128. package/dist/core/provider-composer.js.map +1 -1
  129. package/dist/core/remote-catalog-provider.d.ts +8 -1
  130. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  131. package/dist/core/remote-catalog-provider.js +18 -3
  132. package/dist/core/remote-catalog-provider.js.map +1 -1
  133. package/dist/core/resource-loader.d.ts +7 -1
  134. package/dist/core/resource-loader.d.ts.map +1 -1
  135. package/dist/core/resource-loader.js +160 -35
  136. package/dist/core/resource-loader.js.map +1 -1
  137. package/dist/core/sdk.d.ts +3 -3
  138. package/dist/core/sdk.d.ts.map +1 -1
  139. package/dist/core/sdk.js +25 -7
  140. package/dist/core/sdk.js.map +1 -1
  141. package/dist/core/session-manager.d.ts +9 -0
  142. package/dist/core/session-manager.d.ts.map +1 -1
  143. package/dist/core/session-manager.js +22 -22
  144. package/dist/core/session-manager.js.map +1 -1
  145. package/dist/core/settings-manager.d.ts +36 -1
  146. package/dist/core/settings-manager.d.ts.map +1 -1
  147. package/dist/core/settings-manager.js +108 -2
  148. package/dist/core/settings-manager.js.map +1 -1
  149. package/dist/core/slash-commands.d.ts.map +1 -1
  150. package/dist/core/slash-commands.js +1 -0
  151. package/dist/core/slash-commands.js.map +1 -1
  152. package/dist/core/source-info.d.ts +8 -0
  153. package/dist/core/source-info.d.ts.map +1 -1
  154. package/dist/core/source-info.js +16 -0
  155. package/dist/core/source-info.js.map +1 -1
  156. package/dist/core/system-prompt.js +1 -1
  157. package/dist/core/system-prompt.js.map +1 -1
  158. package/dist/core/tasks/delivery.d.ts +40 -0
  159. package/dist/core/tasks/delivery.d.ts.map +1 -0
  160. package/dist/core/tasks/delivery.js +157 -0
  161. package/dist/core/tasks/delivery.js.map +1 -0
  162. package/dist/core/tasks/history.d.ts +4 -0
  163. package/dist/core/tasks/history.d.ts.map +1 -0
  164. package/dist/core/{background → tasks}/history.js +24 -48
  165. package/dist/core/tasks/history.js.map +1 -0
  166. package/dist/core/{background → tasks}/output.d.ts +4 -4
  167. package/dist/core/tasks/output.d.ts.map +1 -0
  168. package/dist/core/{background → tasks}/output.js +11 -11
  169. package/dist/core/tasks/output.js.map +1 -0
  170. package/dist/core/tasks/presentation.d.ts +9 -0
  171. package/dist/core/tasks/presentation.d.ts.map +1 -0
  172. package/dist/core/{background → tasks}/presentation.js +53 -51
  173. package/dist/core/tasks/presentation.js.map +1 -0
  174. package/dist/core/{background/service.d.ts → tasks/runtime.d.ts} +22 -23
  175. package/dist/core/tasks/runtime.d.ts.map +1 -0
  176. package/dist/core/{background/service.js → tasks/runtime.js} +154 -198
  177. package/dist/core/tasks/runtime.js.map +1 -0
  178. package/dist/core/tasks/session.d.ts +49 -0
  179. package/dist/core/tasks/session.d.ts.map +1 -0
  180. package/dist/core/tasks/session.js +129 -0
  181. package/dist/core/tasks/session.js.map +1 -0
  182. package/dist/core/tasks/store.d.ts +32 -0
  183. package/dist/core/tasks/store.d.ts.map +1 -0
  184. package/dist/core/tasks/store.js +135 -0
  185. package/dist/core/tasks/store.js.map +1 -0
  186. package/dist/core/{background → tasks}/types.d.ts +80 -62
  187. package/dist/core/tasks/types.d.ts.map +1 -0
  188. package/dist/core/{background → tasks}/types.js +9 -9
  189. package/dist/core/tasks/types.js.map +1 -0
  190. package/dist/core/tasks/view-data.d.ts +8 -0
  191. package/dist/core/tasks/view-data.d.ts.map +1 -0
  192. package/dist/core/tasks/view-data.js +61 -0
  193. package/dist/core/tasks/view-data.js.map +1 -0
  194. package/dist/core/tasks/view.d.ts +30 -0
  195. package/dist/core/tasks/view.d.ts.map +1 -0
  196. package/dist/core/tasks/view.js +50 -0
  197. package/dist/core/tasks/view.js.map +1 -0
  198. package/dist/core/tools/bash.d.ts +8 -93
  199. package/dist/core/tools/bash.d.ts.map +1 -1
  200. package/dist/core/tools/bash.js +8 -240
  201. package/dist/core/tools/bash.js.map +1 -1
  202. package/dist/core/tools/grep.d.ts +2 -0
  203. package/dist/core/tools/grep.d.ts.map +1 -1
  204. package/dist/core/tools/grep.js +2 -0
  205. package/dist/core/tools/grep.js.map +1 -1
  206. package/dist/core/tools/index.d.ts +2 -1
  207. package/dist/core/tools/index.d.ts.map +1 -1
  208. package/dist/core/tools/index.js +9 -0
  209. package/dist/core/tools/index.js.map +1 -1
  210. package/dist/core/tools/output-accumulator.d.ts +11 -0
  211. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  212. package/dist/core/tools/output-accumulator.js +36 -0
  213. package/dist/core/tools/output-accumulator.js.map +1 -1
  214. package/dist/core/tools/powershell.d.ts +6 -2
  215. package/dist/core/tools/powershell.d.ts.map +1 -1
  216. package/dist/core/tools/powershell.js +1 -1
  217. package/dist/core/tools/powershell.js.map +1 -1
  218. package/dist/core/tools/render-utils.d.ts +6 -0
  219. package/dist/core/tools/render-utils.d.ts.map +1 -1
  220. package/dist/core/tools/render-utils.js +26 -0
  221. package/dist/core/tools/render-utils.js.map +1 -1
  222. package/dist/core/tools/renderers/bash.d.ts +1 -1
  223. package/dist/core/tools/renderers/bash.d.ts.map +1 -1
  224. package/dist/core/tools/renderers/bash.js +9 -10
  225. package/dist/core/tools/renderers/bash.js.map +1 -1
  226. package/dist/core/tools/renderers/index.d.ts.map +1 -1
  227. package/dist/core/tools/renderers/index.js +5 -7
  228. package/dist/core/tools/renderers/index.js.map +1 -1
  229. package/dist/core/tools/renderers/read.d.ts.map +1 -1
  230. package/dist/core/tools/renderers/read.js +3 -2
  231. package/dist/core/tools/renderers/read.js.map +1 -1
  232. package/dist/core/tools/renderers/shell-task.d.ts +4 -0
  233. package/dist/core/tools/renderers/shell-task.d.ts.map +1 -0
  234. package/dist/core/tools/renderers/shell-task.js +35 -0
  235. package/dist/core/tools/renderers/shell-task.js.map +1 -0
  236. package/dist/core/tools/shell-execution.d.ts +4 -5
  237. package/dist/core/tools/shell-execution.d.ts.map +1 -1
  238. package/dist/core/tools/shell-execution.js +19 -3
  239. package/dist/core/tools/shell-execution.js.map +1 -1
  240. package/dist/core/tools/shell-tool.d.ts +93 -0
  241. package/dist/core/tools/shell-tool.d.ts.map +1 -0
  242. package/dist/core/tools/shell-tool.js +251 -0
  243. package/dist/core/tools/shell-tool.js.map +1 -0
  244. package/dist/core/tools/tasks/actions.d.ts +12 -0
  245. package/dist/core/tools/tasks/actions.d.ts.map +1 -0
  246. package/dist/{extensions/background → core/tools/tasks}/actions.js +20 -19
  247. package/dist/core/tools/tasks/actions.js.map +1 -0
  248. package/dist/{extensions/background → core/tools/tasks}/constants.d.ts +10 -10
  249. package/dist/core/tools/tasks/constants.d.ts.map +1 -0
  250. package/dist/{extensions/background → core/tools/tasks}/constants.js +10 -10
  251. package/dist/core/tools/tasks/constants.js.map +1 -0
  252. package/dist/{extensions/background → core/tools/tasks}/schema.d.ts +6 -6
  253. package/dist/core/tools/tasks/schema.d.ts.map +1 -0
  254. package/dist/{extensions/background → core/tools/tasks}/schema.js +17 -17
  255. package/dist/core/tools/tasks/schema.js.map +1 -0
  256. package/dist/{extensions/background → core/tools/tasks}/types.d.ts +15 -17
  257. package/dist/core/tools/tasks/types.d.ts.map +1 -0
  258. package/dist/core/tools/tasks/types.js.map +1 -0
  259. package/dist/core/tools/tasks.d.ts +14 -0
  260. package/dist/core/tools/tasks.d.ts.map +1 -0
  261. package/dist/core/tools/tasks.js +40 -0
  262. package/dist/core/tools/tasks.js.map +1 -0
  263. package/dist/core/tools/tool-definition-wrapper.d.ts +4 -3
  264. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  265. package/dist/core/tools/tool-definition-wrapper.js +4 -2
  266. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  267. package/dist/core/tools/truncate.d.ts +14 -0
  268. package/dist/core/tools/truncate.d.ts.map +1 -1
  269. package/dist/core/tools/truncate.js +29 -0
  270. package/dist/core/tools/truncate.js.map +1 -1
  271. package/dist/core/trust-manager.d.ts.map +1 -1
  272. package/dist/core/trust-manager.js +1 -0
  273. package/dist/core/trust-manager.js.map +1 -1
  274. package/dist/core/usage-totals.d.ts +5 -3
  275. package/dist/core/usage-totals.d.ts.map +1 -1
  276. package/dist/core/usage-totals.js +27 -4
  277. package/dist/core/usage-totals.js.map +1 -1
  278. package/dist/core/virtual-models.d.ts +115 -0
  279. package/dist/core/virtual-models.d.ts.map +1 -0
  280. package/dist/core/virtual-models.js +117 -0
  281. package/dist/core/virtual-models.js.map +1 -0
  282. package/dist/extensions/codemode/execute.d.ts +16 -0
  283. package/dist/extensions/codemode/execute.d.ts.map +1 -0
  284. package/dist/extensions/codemode/execute.js +390 -0
  285. package/dist/extensions/codemode/execute.js.map +1 -0
  286. package/dist/extensions/codemode/execute.lazy.d.ts +3 -0
  287. package/dist/extensions/codemode/execute.lazy.d.ts.map +1 -0
  288. package/dist/extensions/codemode/execute.lazy.js +3 -0
  289. package/dist/extensions/codemode/execute.lazy.js.map +1 -0
  290. package/dist/extensions/codemode/index.d.ts +21 -0
  291. package/dist/extensions/codemode/index.d.ts.map +1 -0
  292. package/dist/extensions/codemode/index.js +36 -0
  293. package/dist/extensions/codemode/index.js.map +1 -0
  294. package/dist/extensions/codemode/renderer.d.ts +12 -0
  295. package/dist/extensions/codemode/renderer.d.ts.map +1 -0
  296. package/dist/extensions/codemode/renderer.js +119 -0
  297. package/dist/extensions/codemode/renderer.js.map +1 -0
  298. package/dist/extensions/codemode/search.d.ts +33 -0
  299. package/dist/extensions/codemode/search.d.ts.map +1 -0
  300. package/dist/extensions/codemode/search.js +117 -0
  301. package/dist/extensions/codemode/search.js.map +1 -0
  302. package/dist/extensions/codemode/tool.d.ts +122 -0
  303. package/dist/extensions/codemode/tool.d.ts.map +1 -0
  304. package/dist/extensions/codemode/tool.js +324 -0
  305. package/dist/extensions/codemode/tool.js.map +1 -0
  306. package/dist/extensions/codemode/worker.d.ts +7 -0
  307. package/dist/extensions/codemode/worker.d.ts.map +1 -0
  308. package/dist/extensions/codemode/worker.js +7 -0
  309. package/dist/extensions/codemode/worker.js.map +1 -0
  310. package/dist/extensions/deepwiki/schema.d.ts +1 -1
  311. package/dist/extensions/index.d.ts.map +1 -1
  312. package/dist/extensions/index.js +14 -12
  313. package/dist/extensions/index.js.map +1 -1
  314. package/dist/extensions/llama/provider.d.ts +1 -1
  315. package/dist/extensions/llama/provider.d.ts.map +1 -1
  316. package/dist/extensions/llama/provider.js +65 -13
  317. package/dist/extensions/llama/provider.js.map +1 -1
  318. package/dist/extensions/mcp/cli.d.ts +21 -0
  319. package/dist/extensions/mcp/cli.d.ts.map +1 -0
  320. package/dist/extensions/mcp/cli.js +485 -0
  321. package/dist/extensions/mcp/cli.js.map +1 -0
  322. package/dist/extensions/mcp/cli.lazy.d.ts +3 -0
  323. package/dist/extensions/mcp/cli.lazy.d.ts.map +1 -0
  324. package/dist/extensions/mcp/cli.lazy.js +3 -0
  325. package/dist/extensions/mcp/cli.lazy.js.map +1 -0
  326. package/dist/extensions/mcp/config.d.ts +70 -0
  327. package/dist/extensions/mcp/config.d.ts.map +1 -0
  328. package/dist/extensions/mcp/config.js +146 -0
  329. package/dist/extensions/mcp/config.js.map +1 -0
  330. package/dist/extensions/mcp/index.d.ts +52 -0
  331. package/dist/extensions/mcp/index.d.ts.map +1 -0
  332. package/dist/extensions/mcp/index.js +904 -0
  333. package/dist/extensions/mcp/index.js.map +1 -0
  334. package/dist/extensions/mcp/log.d.ts +16 -0
  335. package/dist/extensions/mcp/log.d.ts.map +1 -0
  336. package/dist/extensions/mcp/log.js +64 -0
  337. package/dist/extensions/mcp/log.js.map +1 -0
  338. package/dist/extensions/mcp/oauth.d.ts +94 -0
  339. package/dist/extensions/mcp/oauth.d.ts.map +1 -0
  340. package/dist/extensions/mcp/oauth.js +330 -0
  341. package/dist/extensions/mcp/oauth.js.map +1 -0
  342. package/dist/extensions/mcp/resources.d.ts +43 -0
  343. package/dist/extensions/mcp/resources.d.ts.map +1 -0
  344. package/dist/extensions/mcp/resources.js +262 -0
  345. package/dist/extensions/mcp/resources.js.map +1 -0
  346. package/dist/extensions/mcp/runtime.d.ts +96 -0
  347. package/dist/extensions/mcp/runtime.d.ts.map +1 -0
  348. package/dist/extensions/mcp/runtime.js +372 -0
  349. package/dist/extensions/mcp/runtime.js.map +1 -0
  350. package/dist/extensions/mcp/runtime.lazy.d.ts +3 -0
  351. package/dist/extensions/mcp/runtime.lazy.d.ts.map +1 -0
  352. package/dist/extensions/mcp/runtime.lazy.js +3 -0
  353. package/dist/extensions/mcp/runtime.lazy.js.map +1 -0
  354. package/dist/extensions/mcp/tools.d.ts +83 -0
  355. package/dist/extensions/mcp/tools.d.ts.map +1 -0
  356. package/dist/extensions/mcp/tools.js +233 -0
  357. package/dist/extensions/mcp/tools.js.map +1 -0
  358. package/dist/extensions/mcp/ui.d.ts +60 -0
  359. package/dist/extensions/mcp/ui.d.ts.map +1 -0
  360. package/dist/extensions/mcp/ui.js +166 -0
  361. package/dist/extensions/mcp/ui.js.map +1 -0
  362. package/dist/extensions/statusline/index.js +2 -2
  363. package/dist/extensions/statusline/index.js.map +1 -1
  364. package/dist/extensions/tool-search/index.d.ts +12 -0
  365. package/dist/extensions/tool-search/index.d.ts.map +1 -0
  366. package/dist/extensions/tool-search/index.js +20 -0
  367. package/dist/extensions/tool-search/index.js.map +1 -0
  368. package/dist/extensions/tool-search/tool.d.ts +72 -0
  369. package/dist/extensions/tool-search/tool.d.ts.map +1 -0
  370. package/dist/extensions/tool-search/tool.js +208 -0
  371. package/dist/extensions/tool-search/tool.js.map +1 -0
  372. package/dist/index.d.ts +13 -4
  373. package/dist/index.d.ts.map +1 -1
  374. package/dist/index.js +7 -1
  375. package/dist/index.js.map +1 -1
  376. package/dist/main.d.ts.map +1 -1
  377. package/dist/main.js +10 -0
  378. package/dist/main.js.map +1 -1
  379. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  380. package/dist/modes/interactive/components/config-selector.js +13 -3
  381. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  382. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  383. package/dist/modes/interactive/components/custom-message.js +3 -1
  384. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  385. package/dist/modes/interactive/components/first-time-setup.d.ts +4 -4
  386. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  387. package/dist/modes/interactive/components/first-time-setup.js +8 -2
  388. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  389. package/dist/modes/interactive/components/footer.d.ts +7 -0
  390. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  391. package/dist/modes/interactive/components/footer.js +42 -3
  392. package/dist/modes/interactive/components/footer.js.map +1 -1
  393. package/dist/modes/interactive/components/pi-logo.d.ts +12 -0
  394. package/dist/modes/interactive/components/pi-logo.d.ts.map +1 -0
  395. package/dist/modes/interactive/components/pi-logo.js +25 -0
  396. package/dist/modes/interactive/components/pi-logo.js.map +1 -0
  397. package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
  398. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  399. package/dist/modes/interactive/components/settings-selector.js +28 -6
  400. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  401. package/dist/modes/interactive/components/status-marker.d.ts +2 -2
  402. package/dist/modes/interactive/components/status-marker.js +2 -2
  403. package/dist/modes/interactive/components/status-marker.js.map +1 -1
  404. package/dist/modes/interactive/components/themed-text.d.ts +17 -0
  405. package/dist/modes/interactive/components/themed-text.d.ts.map +1 -0
  406. package/dist/modes/interactive/components/themed-text.js +28 -0
  407. package/dist/modes/interactive/components/themed-text.js.map +1 -0
  408. package/dist/modes/interactive/interactive-mode.d.ts +2 -4
  409. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  410. package/dist/modes/interactive/interactive-mode.js +214 -163
  411. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  412. package/dist/modes/interactive/tasks/completion-render.d.ts +8 -0
  413. package/dist/modes/interactive/tasks/completion-render.d.ts.map +1 -0
  414. package/dist/{extensions/background → modes/interactive/tasks}/completion-render.js +31 -27
  415. package/dist/modes/interactive/tasks/completion-render.js.map +1 -0
  416. package/dist/modes/interactive/tasks/fallback-view.d.ts +4 -0
  417. package/dist/modes/interactive/tasks/fallback-view.d.ts.map +1 -0
  418. package/dist/modes/interactive/tasks/fallback-view.js +27 -0
  419. package/dist/modes/interactive/tasks/fallback-view.js.map +1 -0
  420. package/dist/modes/interactive/tasks/index.d.ts +12 -0
  421. package/dist/modes/interactive/tasks/index.d.ts.map +1 -0
  422. package/dist/modes/interactive/tasks/index.js +97 -0
  423. package/dist/modes/interactive/tasks/index.js.map +1 -0
  424. package/dist/modes/interactive/tasks/manager.d.ts +67 -0
  425. package/dist/modes/interactive/tasks/manager.d.ts.map +1 -0
  426. package/dist/modes/interactive/tasks/manager.js +380 -0
  427. package/dist/modes/interactive/tasks/manager.js.map +1 -0
  428. package/dist/{extensions/background → modes/interactive/tasks}/render.d.ts +13 -13
  429. package/dist/modes/interactive/tasks/render.d.ts.map +1 -0
  430. package/dist/{extensions/background → modes/interactive/tasks}/render.js +18 -18
  431. package/dist/modes/interactive/tasks/render.js.map +1 -0
  432. package/dist/{extensions/background → modes/interactive/tasks}/task-view.d.ts +7 -7
  433. package/dist/modes/interactive/tasks/task-view.d.ts.map +1 -0
  434. package/dist/{extensions/background → modes/interactive/tasks}/task-view.js +4 -4
  435. package/dist/modes/interactive/tasks/task-view.js.map +1 -0
  436. package/dist/{extensions/background → modes/interactive/tasks}/text.d.ts +1 -1
  437. package/dist/modes/interactive/tasks/text.d.ts.map +1 -0
  438. package/dist/{extensions/background → modes/interactive/tasks}/text.js +1 -1
  439. package/dist/modes/interactive/tasks/text.js.map +1 -0
  440. package/dist/modes/interactive/tasks/viewport.d.ts +15 -0
  441. package/dist/modes/interactive/tasks/viewport.d.ts.map +1 -0
  442. package/dist/modes/interactive/tasks/viewport.js +49 -0
  443. package/dist/modes/interactive/tasks/viewport.js.map +1 -0
  444. package/dist/modes/interactive/theme/dark.json +59 -72
  445. package/dist/modes/interactive/theme/light.json +57 -69
  446. package/dist/modes/interactive/theme/system-theme.d.ts +54 -0
  447. package/dist/modes/interactive/theme/system-theme.d.ts.map +1 -0
  448. package/dist/modes/interactive/theme/system-theme.js +535 -0
  449. package/dist/modes/interactive/theme/system-theme.js.map +1 -0
  450. package/dist/modes/interactive/theme/theme-controller.d.ts +46 -6
  451. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  452. package/dist/modes/interactive/theme/theme-controller.js +125 -47
  453. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  454. package/dist/modes/interactive/theme/theme-json.d.ts +1 -0
  455. package/dist/modes/interactive/theme/theme-json.d.ts.map +1 -1
  456. package/dist/modes/interactive/theme/theme-json.js +3 -1
  457. package/dist/modes/interactive/theme/theme-json.js.map +1 -1
  458. package/dist/modes/interactive/theme/theme-schema.json +7 -2
  459. package/dist/modes/interactive/theme/theme.d.ts +70 -39
  460. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  461. package/dist/modes/interactive/theme/theme.js +247 -313
  462. package/dist/modes/interactive/theme/theme.js.map +1 -1
  463. package/dist/modes/interactive/tool-view/fallback.d.ts +1 -1
  464. package/dist/modes/interactive/tool-view/fallback.d.ts.map +1 -1
  465. package/dist/modes/interactive/tool-view/fallback.js +4 -1
  466. package/dist/modes/interactive/tool-view/fallback.js.map +1 -1
  467. package/dist/modes/interactive/tool-view/tool-execution.js +2 -2
  468. package/dist/modes/interactive/tool-view/tool-execution.js.map +1 -1
  469. package/dist/modes/interactive/tui-renderer.d.ts +2 -1
  470. package/dist/modes/interactive/tui-renderer.d.ts.map +1 -1
  471. package/dist/modes/interactive/tui-renderer.js +1 -0
  472. package/dist/modes/interactive/tui-renderer.js.map +1 -1
  473. package/dist/modes/rpc/rpc-client.d.ts +6 -6
  474. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  475. package/dist/modes/rpc/rpc-client.js +12 -8
  476. package/dist/modes/rpc/rpc-client.js.map +1 -1
  477. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  478. package/dist/modes/rpc/rpc-mode.js +7 -9
  479. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  480. package/dist/modes/rpc/rpc-types.d.ts +10 -1
  481. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  482. package/dist/modes/rpc/rpc-types.js.map +1 -1
  483. package/dist/package-manager-cli.d.ts.map +1 -1
  484. package/dist/package-manager-cli.js +6 -2
  485. package/dist/package-manager-cli.js.map +1 -1
  486. package/dist/utils/clipboard-image.d.ts.map +1 -1
  487. package/dist/utils/clipboard-image.js +14 -17
  488. package/dist/utils/clipboard-image.js.map +1 -1
  489. package/dist/utils/clipboard.d.ts +2 -0
  490. package/dist/utils/clipboard.d.ts.map +1 -1
  491. package/dist/utils/clipboard.js +5 -0
  492. package/dist/utils/clipboard.js.map +1 -1
  493. package/dist/utils/paths.d.ts +3 -3
  494. package/dist/utils/paths.d.ts.map +1 -1
  495. package/dist/utils/paths.js +5 -4
  496. package/dist/utils/paths.js.map +1 -1
  497. package/dist/utils/shell.d.ts +1 -3
  498. package/dist/utils/shell.d.ts.map +1 -1
  499. package/dist/utils/shell.js +3 -30
  500. package/dist/utils/shell.js.map +1 -1
  501. package/docs/bundled/README.md +22 -8
  502. package/docs/bundled/extensions/statusline.md +2 -2
  503. package/docs/bundled/tasks.md +141 -0
  504. package/docs/bundled/tool-presentation.md +1 -1
  505. package/docs/custom-provider.md +44 -0
  506. package/docs/docs.json +10 -6
  507. package/docs/extensions.md +89 -86
  508. package/docs/index.md +2 -1
  509. package/docs/keybindings.md +8 -7
  510. package/docs/llama-cpp.md +12 -1
  511. package/docs/mcp.md +188 -0
  512. package/docs/models.md +35 -0
  513. package/docs/packages.md +4 -0
  514. package/docs/providers.md +6 -0
  515. package/docs/rpc.md +5 -3
  516. package/docs/sdk.md +26 -16
  517. package/docs/security.md +4 -0
  518. package/docs/session-format.md +18 -11
  519. package/docs/settings.md +26 -2
  520. package/docs/themes.md +27 -5
  521. package/docs/tui.md +20 -0
  522. package/docs/usage.md +61 -3
  523. package/docs/virtual-models.md +114 -0
  524. package/docs/windows.md +2 -0
  525. package/examples/README.md +1 -1
  526. package/examples/extensions/README.md +2 -0
  527. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  528. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  529. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  530. package/examples/extensions/custom-provider-gitlab-duo/test.ts +4 -4
  531. package/examples/extensions/debug-provider.ts +90 -0
  532. package/examples/extensions/gondolin/package-lock.json +2 -2
  533. package/examples/extensions/gondolin/package.json +1 -1
  534. package/examples/extensions/jev-router.ts +113 -0
  535. package/examples/extensions/sandbox/package-lock.json +2 -2
  536. package/examples/extensions/sandbox/package.json +1 -1
  537. package/examples/extensions/with-deps/package-lock.json +2 -2
  538. package/examples/extensions/with-deps/package.json +1 -1
  539. package/examples/rpc-client.ts +1 -1
  540. package/examples/rpc-extension-ui.ts +1 -1
  541. package/examples/sdk/14-codemode-mcp.ts +61 -0
  542. package/examples/sdk/README.md +1 -0
  543. package/npm-shrinkwrap.json +409 -423
  544. package/package.json +13 -10
  545. package/dist/bundle/chunks/anthropic-messages-XWFTZP2N.js +0 -6
  546. package/dist/bundle/chunks/azure-openai-responses-HS35BQV6.js +0 -2
  547. package/dist/bundle/chunks/chunk-2IO5GDBS.js +0 -11
  548. package/dist/bundle/chunks/chunk-EDBLK2JQ.js +0 -2
  549. package/dist/bundle/chunks/chunk-IORR2FW4.js +0 -2
  550. package/dist/bundle/chunks/chunk-NUHFSC37.js +0 -25
  551. package/dist/bundle/chunks/google-generative-ai-NOVAJBFC.js +0 -2
  552. package/dist/bundle/chunks/google-vertex-4VHCZJV5.js +0 -2
  553. package/dist/bundle/chunks/mistral-conversations-WC6A2WCJ.js +0 -5
  554. package/dist/bundle/chunks/openai-codex-responses-XCDG75W2.js +0 -10
  555. package/dist/bundle/chunks/openai-completions-SHS3CAEL.js +0 -7
  556. package/dist/bundle/chunks/openai-responses-UT6XFKC7.js +0 -2
  557. package/dist/bundle/chunks/virtual-modules-KUEIEAZN.js +0 -2
  558. package/dist/core/background/history.d.ts +0 -4
  559. package/dist/core/background/history.d.ts.map +0 -1
  560. package/dist/core/background/history.js.map +0 -1
  561. package/dist/core/background/output.d.ts.map +0 -1
  562. package/dist/core/background/output.js.map +0 -1
  563. package/dist/core/background/presentation.d.ts +0 -9
  564. package/dist/core/background/presentation.d.ts.map +0 -1
  565. package/dist/core/background/presentation.js.map +0 -1
  566. package/dist/core/background/service.d.ts.map +0 -1
  567. package/dist/core/background/service.js.map +0 -1
  568. package/dist/core/background/session.d.ts +0 -67
  569. package/dist/core/background/session.d.ts.map +0 -1
  570. package/dist/core/background/session.js +0 -248
  571. package/dist/core/background/session.js.map +0 -1
  572. package/dist/core/background/types.d.ts.map +0 -1
  573. package/dist/core/background/types.js.map +0 -1
  574. package/dist/extensions/background/actions.d.ts +0 -11
  575. package/dist/extensions/background/actions.d.ts.map +0 -1
  576. package/dist/extensions/background/actions.js.map +0 -1
  577. package/dist/extensions/background/completion-render.d.ts +0 -8
  578. package/dist/extensions/background/completion-render.d.ts.map +0 -1
  579. package/dist/extensions/background/completion-render.js.map +0 -1
  580. package/dist/extensions/background/constants.d.ts.map +0 -1
  581. package/dist/extensions/background/constants.js.map +0 -1
  582. package/dist/extensions/background/index.d.ts +0 -7
  583. package/dist/extensions/background/index.d.ts.map +0 -1
  584. package/dist/extensions/background/index.js +0 -135
  585. package/dist/extensions/background/index.js.map +0 -1
  586. package/dist/extensions/background/keybindings.d.ts +0 -10
  587. package/dist/extensions/background/keybindings.d.ts.map +0 -1
  588. package/dist/extensions/background/keybindings.js +0 -14
  589. package/dist/extensions/background/keybindings.js.map +0 -1
  590. package/dist/extensions/background/manager.d.ts +0 -80
  591. package/dist/extensions/background/manager.d.ts.map +0 -1
  592. package/dist/extensions/background/manager.js +0 -673
  593. package/dist/extensions/background/manager.js.map +0 -1
  594. package/dist/extensions/background/render.d.ts.map +0 -1
  595. package/dist/extensions/background/render.js.map +0 -1
  596. package/dist/extensions/background/schema.d.ts.map +0 -1
  597. package/dist/extensions/background/schema.js.map +0 -1
  598. package/dist/extensions/background/task-view.d.ts.map +0 -1
  599. package/dist/extensions/background/task-view.js.map +0 -1
  600. package/dist/extensions/background/text.d.ts.map +0 -1
  601. package/dist/extensions/background/text.js.map +0 -1
  602. package/dist/extensions/background/types.d.ts.map +0 -1
  603. package/dist/extensions/background/types.js.map +0 -1
  604. package/dist/extensions/subagent/activity.d.ts +0 -34
  605. package/dist/extensions/subagent/activity.d.ts.map +0 -1
  606. package/dist/extensions/subagent/activity.js +0 -192
  607. package/dist/extensions/subagent/activity.js.map +0 -1
  608. package/dist/extensions/subagent/agents-command.d.ts +0 -4
  609. package/dist/extensions/subagent/agents-command.d.ts.map +0 -1
  610. package/dist/extensions/subagent/agents-command.js +0 -230
  611. package/dist/extensions/subagent/agents-command.js.map +0 -1
  612. package/dist/extensions/subagent/agents.d.ts +0 -6
  613. package/dist/extensions/subagent/agents.d.ts.map +0 -1
  614. package/dist/extensions/subagent/agents.js +0 -53
  615. package/dist/extensions/subagent/agents.js.map +0 -1
  616. package/dist/extensions/subagent/budget.d.ts +0 -15
  617. package/dist/extensions/subagent/budget.d.ts.map +0 -1
  618. package/dist/extensions/subagent/budget.js +0 -123
  619. package/dist/extensions/subagent/budget.js.map +0 -1
  620. package/dist/extensions/subagent/cancellation.d.ts +0 -29
  621. package/dist/extensions/subagent/cancellation.d.ts.map +0 -1
  622. package/dist/extensions/subagent/cancellation.js +0 -91
  623. package/dist/extensions/subagent/cancellation.js.map +0 -1
  624. package/dist/extensions/subagent/constants.d.ts +0 -25
  625. package/dist/extensions/subagent/constants.d.ts.map +0 -1
  626. package/dist/extensions/subagent/constants.js +0 -50
  627. package/dist/extensions/subagent/constants.js.map +0 -1
  628. package/dist/extensions/subagent/index.d.ts +0 -3
  629. package/dist/extensions/subagent/index.d.ts.map +0 -1
  630. package/dist/extensions/subagent/index.js +0 -151
  631. package/dist/extensions/subagent/index.js.map +0 -1
  632. package/dist/extensions/subagent/model-selection.d.ts +0 -16
  633. package/dist/extensions/subagent/model-selection.d.ts.map +0 -1
  634. package/dist/extensions/subagent/model-selection.js +0 -51
  635. package/dist/extensions/subagent/model-selection.js.map +0 -1
  636. package/dist/extensions/subagent/render.d.ts +0 -24
  637. package/dist/extensions/subagent/render.d.ts.map +0 -1
  638. package/dist/extensions/subagent/render.js +0 -336
  639. package/dist/extensions/subagent/render.js.map +0 -1
  640. package/dist/extensions/subagent/resolve.d.ts +0 -31
  641. package/dist/extensions/subagent/resolve.d.ts.map +0 -1
  642. package/dist/extensions/subagent/resolve.js +0 -111
  643. package/dist/extensions/subagent/resolve.js.map +0 -1
  644. package/dist/extensions/subagent/runner.d.ts +0 -35
  645. package/dist/extensions/subagent/runner.d.ts.map +0 -1
  646. package/dist/extensions/subagent/runner.js +0 -255
  647. package/dist/extensions/subagent/runner.js.map +0 -1
  648. package/dist/extensions/subagent/schema.d.ts +0 -28
  649. package/dist/extensions/subagent/schema.d.ts.map +0 -1
  650. package/dist/extensions/subagent/schema.js +0 -58
  651. package/dist/extensions/subagent/schema.js.map +0 -1
  652. package/dist/extensions/subagent/sdk-runner.d.ts +0 -33
  653. package/dist/extensions/subagent/sdk-runner.d.ts.map +0 -1
  654. package/dist/extensions/subagent/sdk-runner.js +0 -331
  655. package/dist/extensions/subagent/sdk-runner.js.map +0 -1
  656. package/dist/extensions/subagent/settings.d.ts +0 -8
  657. package/dist/extensions/subagent/settings.d.ts.map +0 -1
  658. package/dist/extensions/subagent/settings.js +0 -206
  659. package/dist/extensions/subagent/settings.js.map +0 -1
  660. package/dist/extensions/subagent/state.d.ts +0 -102
  661. package/dist/extensions/subagent/state.d.ts.map +0 -1
  662. package/dist/extensions/subagent/state.js +0 -383
  663. package/dist/extensions/subagent/state.js.map +0 -1
  664. package/dist/extensions/subagent/text.d.ts +0 -6
  665. package/dist/extensions/subagent/text.d.ts.map +0 -1
  666. package/dist/extensions/subagent/text.js +0 -66
  667. package/dist/extensions/subagent/text.js.map +0 -1
  668. package/dist/extensions/subagent/types.d.ts +0 -91
  669. package/dist/extensions/subagent/types.d.ts.map +0 -1
  670. package/dist/extensions/subagent/types.js +0 -2
  671. package/dist/extensions/subagent/types.js.map +0 -1
  672. package/dist/extensions/subagent/ui/agents-dialog.d.ts +0 -4
  673. package/dist/extensions/subagent/ui/agents-dialog.d.ts.map +0 -1
  674. package/dist/extensions/subagent/ui/agents-dialog.js +0 -84
  675. package/dist/extensions/subagent/ui/agents-dialog.js.map +0 -1
  676. package/dist/extensions/subagent/ui/choice-menu.d.ts +0 -39
  677. package/dist/extensions/subagent/ui/choice-menu.d.ts.map +0 -1
  678. package/dist/extensions/subagent/ui/choice-menu.js +0 -93
  679. package/dist/extensions/subagent/ui/choice-menu.js.map +0 -1
  680. package/dist/extensions/subagent/ui/choices.d.ts +0 -36
  681. package/dist/extensions/subagent/ui/choices.d.ts.map +0 -1
  682. package/dist/extensions/subagent/ui/choices.js +0 -54
  683. package/dist/extensions/subagent/ui/choices.js.map +0 -1
  684. package/dist/extensions/subagent/ui/model-list.d.ts +0 -66
  685. package/dist/extensions/subagent/ui/model-list.d.ts.map +0 -1
  686. package/dist/extensions/subagent/ui/model-list.js +0 -235
  687. package/dist/extensions/subagent/ui/model-list.js.map +0 -1
  688. package/dist/extensions/subagent/ui/model-picker.d.ts +0 -47
  689. package/dist/extensions/subagent/ui/model-picker.d.ts.map +0 -1
  690. package/dist/extensions/subagent/ui/model-picker.js +0 -143
  691. package/dist/extensions/subagent/ui/model-picker.js.map +0 -1
  692. package/dist/extensions/subagent/ui/profile-settings-menu.d.ts +0 -41
  693. package/dist/extensions/subagent/ui/profile-settings-menu.d.ts.map +0 -1
  694. package/dist/extensions/subagent/ui/profile-settings-menu.js +0 -98
  695. package/dist/extensions/subagent/ui/profile-settings-menu.js.map +0 -1
  696. package/docs/bundled/extensions/background.md +0 -132
  697. package/docs/bundled/extensions/subagent.md +0 -148
  698. /package/dist/{extensions/background → core/tools/tasks}/types.js +0 -0
@@ -1,71 +1,78 @@
1
1
  import type { AgentToolResult } from "@earendil-works/pi-agent-core";
2
2
  import type { Usage } from "@earendil-works/pi-ai/compat";
3
- export type BackgroundKind = "bash" | "subagent";
4
- export type BackgroundMode = "foreground" | "background";
5
- export type BackgroundTerminalStatus = "completed" | "partial" | "failed" | "cancelled" | "timeout";
6
- export type BackgroundStatus = "queued" | "running" | "stopping" | BackgroundTerminalStatus;
3
+ import type { TaskViewRegistry } from "./view.ts";
4
+ import type { TaskViewData } from "./view-data.ts";
5
+ /** An executor-owned source label, never a dispatch key for the runtime. */
6
+ export type TaskKind = string;
7
+ export type TaskMode = "foreground" | "background";
8
+ export type TaskTerminalStatus = "completed" | "partial" | "failed" | "cancelled" | "timeout";
9
+ export type TaskStatus = "queued" | "running" | "stopping" | TaskTerminalStatus;
7
10
  /** A bounded snapshot; truncation is recorded at the source, never inferred from text. */
8
- export interface BackgroundText {
11
+ export interface TaskText {
9
12
  text: string;
10
13
  truncated: boolean;
11
14
  }
12
- export interface BackgroundWorkerReport {
15
+ export interface TaskItemReport {
13
16
  id: string;
14
17
  label: string;
15
- profile: string;
18
+ category: string;
16
19
  description: string;
17
20
  status: string;
18
- report: BackgroundText;
21
+ report: TaskText;
19
22
  error?: string;
20
23
  }
21
24
  /** A serializable, domain-owned projection. No extension-private renderer imports. */
22
- export interface BackgroundWorker extends BackgroundWorkerReport {
23
- prompt: string;
25
+ export interface TaskItem extends TaskItemReport {
26
+ input: string;
24
27
  activity: string;
25
- model?: string;
28
+ context?: string;
26
29
  usage?: string;
27
30
  }
28
- export interface BackgroundProjection {
31
+ export interface TaskProjection {
32
+ nextStep?: string;
29
33
  text?: string;
30
34
  shell?: {
31
35
  name: string;
32
- output: BackgroundText;
36
+ output: TaskText;
33
37
  };
34
- workers?: BackgroundWorker[];
38
+ items?: TaskItem[];
35
39
  }
36
- interface BackgroundCompletionBase {
40
+ interface TaskCompletionBase {
41
+ kind: string;
37
42
  version: 1;
38
43
  taskId: string;
39
44
  title: string;
40
- status: BackgroundTerminalStatus;
45
+ status: TaskTerminalStatus;
41
46
  startedAt: number;
42
47
  endedAt: number;
43
48
  error?: string;
49
+ nextStep?: string;
44
50
  }
45
51
  /** Self-contained completion-message details. No live handles, tool-private details or accounting. */
46
- export type BackgroundCompletionSnapshot = BackgroundCompletionBase & ({
47
- kind: "bash";
52
+ export type TaskCompletionSnapshot = TaskCompletionBase & ({
53
+ format: "log";
48
54
  shell?: string;
49
- command?: BackgroundText;
55
+ command?: TaskText;
50
56
  cwd?: string;
51
57
  outputPath?: string;
52
58
  /** Process exit code: a number, or null when signal-reaped. */
53
59
  exitCode?: number | null;
54
- output: BackgroundText;
60
+ output: TaskText;
55
61
  } | {
56
- kind: "subagent";
57
- workers: BackgroundWorkerReport[];
62
+ format: "report";
63
+ items: TaskItemReport[];
58
64
  /** Plain fallback when an executor has no worker projection. */
59
- output?: BackgroundText;
65
+ output?: TaskText;
60
66
  });
61
- export interface BackgroundTask {
67
+ export interface TaskSnapshot {
62
68
  id: string;
63
- kind: BackgroundKind;
69
+ kind: TaskKind;
70
+ format?: "log" | "report";
64
71
  title: string;
65
72
  toolCallId: string;
66
73
  anchorId: string | null;
67
- mode: BackgroundMode;
68
- status: BackgroundStatus;
74
+ mode: TaskMode;
75
+ status: TaskStatus;
69
76
  startedAt: number;
70
77
  endedAt?: number;
71
78
  command?: string;
@@ -74,14 +81,15 @@ export interface BackgroundTask {
74
81
  /** Process exit code (bash): a number, or null when signal-reaped. Absent while running or unreported. */
75
82
  exitCode?: number | null;
76
83
  outputPath?: string;
77
- projection?: BackgroundProjection;
84
+ projection?: TaskProjection;
85
+ viewData?: TaskViewData;
78
86
  result?: AgentToolResult<unknown>;
79
87
  resultTruncated?: boolean;
80
88
  error?: string;
81
89
  }
82
- export interface BackgroundCompletion<T> {
90
+ export interface TaskCompletion<T> {
83
91
  result: AgentToolResult<T>;
84
- status?: BackgroundTerminalStatus;
92
+ status?: TaskTerminalStatus;
85
93
  /** Terminal diagnostic, stored independently of log slices and bounded to 4096 bytes. */
86
94
  error?: string;
87
95
  /** Process exit code (bash): a number, or null when signal-reaped. */
@@ -89,10 +97,12 @@ export interface BackgroundCompletion<T> {
89
97
  /** Authoritative cumulative usage; overrides result.usage and any published snapshot. */
90
98
  usage?: Usage;
91
99
  }
92
- export interface BackgroundControl<T> {
100
+ export interface TaskControl<T> {
93
101
  readonly id: string;
94
102
  readonly signal: AbortSignal;
95
- readonly mode: BackgroundMode;
103
+ readonly mode: TaskMode;
104
+ onModeChange(listener: (mode: TaskMode) => void): () => void;
105
+ requestCancel(): boolean;
96
106
  /** Accept only after whole-invocation preflight; required before returning a handoff. */
97
107
  accept(): void;
98
108
  /**
@@ -100,12 +110,15 @@ export interface BackgroundControl<T> {
100
110
  * published usage is settled once on rejection (never inferred from details).
101
111
  * Final completion.usage, then completion.result.usage, override that snapshot.
102
112
  */
103
- publish(result: AgentToolResult<T>, projection?: BackgroundProjection): void;
113
+ publish(result: AgentToolResult<T>, projection?: TaskProjection): void;
114
+ /** Publish bounded, versioned display data without changing tool results or completion delivery. */
115
+ publishView(data: TaskViewData): void;
104
116
  /** Register once; cleanup must own only this exclusively-created file and close its writer first. */
105
117
  setOutputPath(path: string, cleanup?: () => void | Promise<void>): void;
106
118
  }
107
- export interface BackgroundExecution<T> {
108
- kind: BackgroundKind;
119
+ export interface TaskExecution<T> {
120
+ kind: TaskKind;
121
+ format?: "log" | "report";
109
122
  title: string;
110
123
  toolCallId: string;
111
124
  command?: string;
@@ -113,19 +126,19 @@ export interface BackgroundExecution<T> {
113
126
  background?: boolean;
114
127
  signal?: AbortSignal;
115
128
  onUpdate?: (result: AgentToolResult<T>) => void;
116
- run(control: BackgroundControl<T>): Promise<BackgroundCompletion<T>>;
129
+ run(control: TaskControl<T>): Promise<TaskCompletion<T>>;
117
130
  }
118
- export type BackgroundToolOutcome<T> = {
131
+ export type TaskToolOutcome<T> = {
119
132
  kind: "result";
120
133
  result: AgentToolResult<T>;
121
- status?: BackgroundTerminalStatus;
134
+ status?: TaskTerminalStatus;
122
135
  error?: string;
123
136
  } | {
124
137
  kind: "background";
125
- task: BackgroundTask;
138
+ task: TaskSnapshot;
126
139
  };
127
- export interface BackgroundRead {
128
- task: BackgroundTask;
140
+ export interface TaskRead {
141
+ task: TaskSnapshot;
129
142
  text: string;
130
143
  /** Bounded log-read/expiry diagnostic, independent of text slicing and byte offsets. */
131
144
  readError?: string;
@@ -134,45 +147,50 @@ export interface BackgroundRead {
134
147
  fromByte?: number;
135
148
  }
136
149
  /** Session-bound public capability. Captured instances close on runtime replacement. */
137
- export interface BackgroundContext {
150
+ export interface TasksContext {
151
+ readonly views: TaskViewRegistry;
138
152
  readonly enabled: boolean;
139
153
  readonly closed?: boolean;
140
- execute<T>(execution: BackgroundExecution<T>): Promise<BackgroundToolOutcome<T>>;
141
- list(): BackgroundTask[];
142
- get(id: string): BackgroundTask;
154
+ execute<T>(execution: TaskExecution<T>): Promise<TaskToolOutcome<T>>;
155
+ list(): TaskSnapshot[];
156
+ get(id: string): TaskSnapshot;
143
157
  read(id: string, options?: {
144
158
  mode?: "head" | "tail";
145
159
  bytes?: number;
146
160
  sinceBytes?: number;
147
- }): Promise<BackgroundRead>;
161
+ }): Promise<TaskRead>;
148
162
  /** Observation only: terminal delivery is acknowledged by the host via markDelivered after result persistence. */
149
- wait(id: string, timeoutMs?: number, signal?: AbortSignal): Promise<BackgroundTask>;
163
+ wait(id: string, timeoutMs?: number, signal?: AbortSignal): Promise<TaskSnapshot>;
150
164
  kill(id: string): boolean;
151
165
  /** Move every running foreground execution to the background; returns how many moved. */
152
166
  detachForeground(): number;
167
+ detach(id: string): boolean;
153
168
  subscribe(listener: () => void): () => void;
154
- pin(id: string): () => void;
169
+ /** Keep retained output available without delaying completion delivery. */
170
+ retain(id: string): () => void;
171
+ /** Hold automatic delivery while preparing a result for the host to persist. */
172
+ holdDelivery(id: string): () => void;
155
173
  }
156
- export interface BackgroundServiceOptions {
174
+ export interface TaskRuntimeOptions {
157
175
  enabled?: boolean;
158
- role?: "main" | "subagent";
176
+ backgroundAllowed?: boolean;
159
177
  anchor?: () => string | null;
160
178
  maxActive?: number;
161
- /** Per-history limit: foreground shells and background tasks/all subagents each get this allowance. */
179
+ /** Per-history limit: foreground logs and other managed tasks each get this allowance. */
162
180
  maxHistory?: number;
163
181
  /** Best-effort cleanup errors, bounded to 4096 bytes; no retries or execution failure. */
164
182
  onCleanupError?: (message: string) => void;
165
183
  /** Synchronous persistence before terminal observers or notifications. */
166
- onSettled?: (task: BackgroundTask, usage: Usage | undefined) => void;
184
+ onSettled?: (task: TaskSnapshot, usage: Usage | undefined) => void;
167
185
  }
168
- export declare const SUBAGENT_BACKGROUND_REJECTION = "Background execution is not available inside subagents. Run this command with background: false (or omit background). Only the parent agent or the user can background the entire subagent invocation. No command was started.";
169
- export declare function isBackgroundTerminal(status: BackgroundStatus): boolean;
170
- /** Foreground shell logs have their own history; subagent groups remain inspectable in either mode. */
171
- export declare function isForegroundShellTask(task: Pick<BackgroundTask, "kind" | "mode">): boolean;
186
+ export declare const TASK_BACKGROUND_REJECTION = "Background execution is not permitted in this host. Run with background: false or omit background. No work was started.";
187
+ export declare function isTaskTerminal(status: TaskStatus): boolean;
188
+ /** Foreground logs have their own history; reports remain inspectable in either mode. */
189
+ export declare function isInlineLogTask(task: Pick<TaskSnapshot, "format" | "mode">): boolean;
172
190
  /** Preserve the foreground throwing contract without guessing status from output text. */
173
- export declare class BackgroundExecutionError extends Error {
174
- readonly status: BackgroundTerminalStatus;
175
- constructor(message: string, status: BackgroundTerminalStatus);
191
+ export declare class TaskExecutionError extends Error {
192
+ readonly status: TaskTerminalStatus;
193
+ constructor(message: string, status: TaskTerminalStatus);
176
194
  }
177
195
  /**
178
196
  * A failed id lookup, typed so hosts can enrich the message without matching
@@ -180,10 +198,10 @@ export declare class BackgroundExecutionError extends Error {
180
198
  * resolved against — including records outside the current branch, which
181
199
  * list() hides but prefix matching still collides with.
182
200
  */
183
- export declare class BackgroundLookupError extends Error {
201
+ export declare class TaskLookupError extends Error {
184
202
  readonly kind: "unknown" | "ambiguous";
185
- readonly matches: BackgroundTask[];
186
- constructor(kind: "unknown" | "ambiguous", matches: BackgroundTask[]);
203
+ readonly matches: TaskSnapshot[];
204
+ constructor(kind: "unknown" | "ambiguous", matches: TaskSnapshot[]);
187
205
  }
188
206
  export {};
189
207
  //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/tasks/types.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,16 @@
1
- export const SUBAGENT_BACKGROUND_REJECTION = "Background execution is not available inside subagents. Run this command with background: false (or omit background). Only the parent agent or the user can background the entire subagent invocation. No command was started.";
2
- export function isBackgroundTerminal(status) {
1
+ export const TASK_BACKGROUND_REJECTION = "Background execution is not permitted in this host. Run with background: false or omit background. No work was started.";
2
+ export function isTaskTerminal(status) {
3
3
  return status !== "queued" && status !== "running" && status !== "stopping";
4
4
  }
5
- /** Foreground shell logs have their own history; subagent groups remain inspectable in either mode. */
6
- export function isForegroundShellTask(task) {
7
- return task.kind === "bash" && task.mode === "foreground";
5
+ /** Foreground logs have their own history; reports remain inspectable in either mode. */
6
+ export function isInlineLogTask(task) {
7
+ return task.format === "log" && task.mode === "foreground";
8
8
  }
9
9
  /** Preserve the foreground throwing contract without guessing status from output text. */
10
- export class BackgroundExecutionError extends Error {
10
+ export class TaskExecutionError extends Error {
11
11
  constructor(message, status) {
12
12
  super(message);
13
- this.name = "BackgroundExecutionError";
13
+ this.name = "TaskExecutionError";
14
14
  this.status = status;
15
15
  }
16
16
  }
@@ -20,10 +20,10 @@ export class BackgroundExecutionError extends Error {
20
20
  * resolved against — including records outside the current branch, which
21
21
  * list() hides but prefix matching still collides with.
22
22
  */
23
- export class BackgroundLookupError extends Error {
23
+ export class TaskLookupError extends Error {
24
24
  constructor(kind, matches) {
25
25
  super(kind === "ambiguous" ? "Ambiguous background task ID" : "Unknown background task ID");
26
- this.name = "BackgroundLookupError";
26
+ this.name = "TaskLookupError";
27
27
  this.kind = kind;
28
28
  this.matches = matches;
29
29
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/tasks/types.ts"],"names":[],"mappings":"AAgMA,MAAM,CAAC,MAAM,yBAAyB,GACrC,yHAAyH,CAAC;AAE3H,MAAM,UAAU,cAAc,CAAC,MAAkB;IAChD,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,UAAU,CAAC;AAC7E,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,eAAe,CAAC,IAA2C;IAC1E,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC;AAC5D,CAAC;AAED,0FAA0F;AAC1F,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAE5C,YAAY,OAAe,EAAE,MAA0B;QACtD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;CACD;AAED;;;;;GAKG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAGzC,YAAY,IAA6B,EAAE,OAAuB;QACjE,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC;QAC5F,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;CACD","sourcesContent":["import type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport type { Usage } from \"@earendil-works/pi-ai/compat\";\nimport type { TaskViewRegistry } from \"./view.ts\";\nimport type { TaskViewData } from \"./view-data.ts\";\n\n/** An executor-owned source label, never a dispatch key for the runtime. */\nexport type TaskKind = string;\nexport type TaskMode = \"foreground\" | \"background\";\nexport type TaskTerminalStatus = \"completed\" | \"partial\" | \"failed\" | \"cancelled\" | \"timeout\";\nexport type TaskStatus = \"queued\" | \"running\" | \"stopping\" | TaskTerminalStatus;\n\n/** A bounded snapshot; truncation is recorded at the source, never inferred from text. */\nexport interface TaskText {\n\ttext: string;\n\ttruncated: boolean;\n}\n\nexport interface TaskItemReport {\n\tid: string;\n\tlabel: string;\n\tcategory: string;\n\tdescription: string;\n\tstatus: string;\n\treport: TaskText;\n\terror?: string;\n}\n\n/** A serializable, domain-owned projection. No extension-private renderer imports. */\nexport interface TaskItem extends TaskItemReport {\n\tinput: string;\n\tactivity: string;\n\tcontext?: string;\n\tusage?: string;\n}\n\nexport interface TaskProjection {\n\tnextStep?: string;\n\ttext?: string;\n\tshell?: { name: string; output: TaskText };\n\titems?: TaskItem[];\n}\n\ninterface TaskCompletionBase {\n\tkind: string;\n\tversion: 1;\n\ttaskId: string;\n\ttitle: string;\n\tstatus: TaskTerminalStatus;\n\tstartedAt: number;\n\tendedAt: number;\n\terror?: string;\n\tnextStep?: string;\n}\n\n/** Self-contained completion-message details. No live handles, tool-private details or accounting. */\nexport type TaskCompletionSnapshot = TaskCompletionBase &\n\t(\n\t\t| {\n\t\t\t\tformat: \"log\";\n\t\t\t\tshell?: string;\n\t\t\t\tcommand?: TaskText;\n\t\t\t\tcwd?: string;\n\t\t\t\toutputPath?: string;\n\t\t\t\t/** Process exit code: a number, or null when signal-reaped. */\n\t\t\t\texitCode?: number | null;\n\t\t\t\toutput: TaskText;\n\t\t }\n\t\t| {\n\t\t\t\tformat: \"report\";\n\t\t\t\titems: TaskItemReport[];\n\t\t\t\t/** Plain fallback when an executor has no worker projection. */\n\t\t\t\toutput?: TaskText;\n\t\t }\n\t);\n\nexport interface TaskSnapshot {\n\tid: string;\n\tkind: TaskKind;\n\tformat?: \"log\" | \"report\";\n\ttitle: string;\n\ttoolCallId: string;\n\tanchorId: string | null;\n\tmode: TaskMode;\n\tstatus: TaskStatus;\n\tstartedAt: number;\n\tendedAt?: number;\n\tcommand?: string;\n\tcommandTruncated?: boolean;\n\tcwd?: string;\n\t/** Process exit code (bash): a number, or null when signal-reaped. Absent while running or unreported. */\n\texitCode?: number | null;\n\toutputPath?: string;\n\tprojection?: TaskProjection;\n\tviewData?: TaskViewData;\n\tresult?: AgentToolResult<unknown>;\n\tresultTruncated?: boolean;\n\terror?: string;\n}\n\nexport interface TaskCompletion<T> {\n\tresult: AgentToolResult<T>;\n\tstatus?: TaskTerminalStatus;\n\t/** Terminal diagnostic, stored independently of log slices and bounded to 4096 bytes. */\n\terror?: string;\n\t/** Process exit code (bash): a number, or null when signal-reaped. */\n\texitCode?: number | null;\n\t/** Authoritative cumulative usage; overrides result.usage and any published snapshot. */\n\tusage?: Usage;\n}\n\nexport interface TaskControl<T> {\n\treadonly id: string;\n\treadonly signal: AbortSignal;\n\treadonly mode: TaskMode;\n\tonModeChange(listener: (mode: TaskMode) => void): () => void;\n\trequestCancel(): boolean;\n\t/** Accept only after whole-invocation preflight; required before returning a handoff. */\n\taccept(): void;\n\t/**\n\t * result.usage is a cumulative snapshot, never a delta. The most recent explicitly\n\t * published usage is settled once on rejection (never inferred from details).\n\t * Final completion.usage, then completion.result.usage, override that snapshot.\n\t */\n\tpublish(result: AgentToolResult<T>, projection?: TaskProjection): void;\n\t/** Publish bounded, versioned display data without changing tool results or completion delivery. */\n\tpublishView(data: TaskViewData): void;\n\t/** Register once; cleanup must own only this exclusively-created file and close its writer first. */\n\tsetOutputPath(path: string, cleanup?: () => void | Promise<void>): void;\n}\n\nexport interface TaskExecution<T> {\n\tkind: TaskKind;\n\tformat?: \"log\" | \"report\";\n\ttitle: string;\n\ttoolCallId: string;\n\tcommand?: string;\n\tcwd?: string;\n\tbackground?: boolean;\n\tsignal?: AbortSignal;\n\tonUpdate?: (result: AgentToolResult<T>) => void;\n\trun(control: TaskControl<T>): Promise<TaskCompletion<T>>;\n}\n\nexport type TaskToolOutcome<T> =\n\t| { kind: \"result\"; result: AgentToolResult<T>; status?: TaskTerminalStatus; error?: string }\n\t| { kind: \"background\"; task: TaskSnapshot };\n\nexport interface TaskRead {\n\ttask: TaskSnapshot;\n\ttext: string;\n\t/** Bounded log-read/expiry diagnostic, independent of text slicing and byte offsets. */\n\treadError?: string;\n\ttotalBytes: number;\n\ttruncated: boolean;\n\tfromByte?: number;\n}\n\n/** Session-bound public capability. Captured instances close on runtime replacement. */\nexport interface TasksContext {\n\treadonly views: TaskViewRegistry;\n\treadonly enabled: boolean;\n\treadonly closed?: boolean;\n\texecute<T>(execution: TaskExecution<T>): Promise<TaskToolOutcome<T>>;\n\tlist(): TaskSnapshot[];\n\tget(id: string): TaskSnapshot;\n\tread(id: string, options?: { mode?: \"head\" | \"tail\"; bytes?: number; sinceBytes?: number }): Promise<TaskRead>;\n\t/** Observation only: terminal delivery is acknowledged by the host via markDelivered after result persistence. */\n\twait(id: string, timeoutMs?: number, signal?: AbortSignal): Promise<TaskSnapshot>;\n\tkill(id: string): boolean;\n\t/** Move every running foreground execution to the background; returns how many moved. */\n\tdetachForeground(): number;\n\tdetach(id: string): boolean;\n\tsubscribe(listener: () => void): () => void;\n\t/** Keep retained output available without delaying completion delivery. */\n\tretain(id: string): () => void;\n\t/** Hold automatic delivery while preparing a result for the host to persist. */\n\tholdDelivery(id: string): () => void;\n}\n\nexport interface TaskRuntimeOptions {\n\tenabled?: boolean;\n\tbackgroundAllowed?: boolean;\n\tanchor?: () => string | null;\n\tmaxActive?: number;\n\t/** Per-history limit: foreground logs and other managed tasks each get this allowance. */\n\tmaxHistory?: number;\n\t/** Best-effort cleanup errors, bounded to 4096 bytes; no retries or execution failure. */\n\tonCleanupError?: (message: string) => void;\n\t/** Synchronous persistence before terminal observers or notifications. */\n\tonSettled?: (task: TaskSnapshot, usage: Usage | undefined) => void;\n}\n\nexport const TASK_BACKGROUND_REJECTION =\n\t\"Background execution is not permitted in this host. Run with background: false or omit background. No work was started.\";\n\nexport function isTaskTerminal(status: TaskStatus): boolean {\n\treturn status !== \"queued\" && status !== \"running\" && status !== \"stopping\";\n}\n\n/** Foreground logs have their own history; reports remain inspectable in either mode. */\nexport function isInlineLogTask(task: Pick<TaskSnapshot, \"format\" | \"mode\">): boolean {\n\treturn task.format === \"log\" && task.mode === \"foreground\";\n}\n\n/** Preserve the foreground throwing contract without guessing status from output text. */\nexport class TaskExecutionError extends Error {\n\treadonly status: TaskTerminalStatus;\n\tconstructor(message: string, status: TaskTerminalStatus) {\n\t\tsuper(message);\n\t\tthis.name = \"TaskExecutionError\";\n\t\tthis.status = status;\n\t}\n}\n\n/**\n * A failed id lookup, typed so hosts can enrich the message without matching\n * on message text. `matches` snapshots exactly the records the id or prefix\n * resolved against — including records outside the current branch, which\n * list() hides but prefix matching still collides with.\n */\nexport class TaskLookupError extends Error {\n\treadonly kind: \"unknown\" | \"ambiguous\";\n\treadonly matches: TaskSnapshot[];\n\tconstructor(kind: \"unknown\" | \"ambiguous\", matches: TaskSnapshot[]) {\n\t\tsuper(kind === \"ambiguous\" ? \"Ambiguous background task ID\" : \"Unknown background task ID\");\n\t\tthis.name = \"TaskLookupError\";\n\t\tthis.kind = kind;\n\t\tthis.matches = matches;\n\t}\n}\n"]}
@@ -0,0 +1,8 @@
1
+ /** Executor-owned JSON data; the version belongs to its view provider. */
2
+ export interface TaskViewData {
3
+ version: number;
4
+ data: unknown;
5
+ }
6
+ /** Strict, bounded JSON copy. Never invoke accessors, toJSON, or renderer callbacks. */
7
+ export declare function readTaskViewData(source: unknown): TaskViewData;
8
+ //# sourceMappingURL=view-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-data.d.ts","sourceRoot":"","sources":["../../../src/core/tasks/view-data.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACd;AAED,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,CA+C9D"}
@@ -0,0 +1,61 @@
1
+ /** Strict, bounded JSON copy. Never invoke accessors, toJSON, or renderer callbacks. */
2
+ export function readTaskViewData(source) {
3
+ let budget = 120 * 1024;
4
+ const copy = (value, depth) => {
5
+ if (depth > 32 || --budget < 0)
6
+ throw new Error("Task view data exceeds storage limits");
7
+ if (value === null || typeof value === "boolean")
8
+ return value;
9
+ if (typeof value === "string") {
10
+ if (value.length > budget)
11
+ throw new Error("Task view data exceeds storage limits");
12
+ budget -= Buffer.byteLength(JSON.stringify(value));
13
+ if (budget < 0)
14
+ throw new Error("Task view data exceeds storage limits");
15
+ return value;
16
+ }
17
+ if (typeof value === "number" && Number.isFinite(value)) {
18
+ budget -= 24;
19
+ return value;
20
+ }
21
+ if (typeof value !== "object" || value === null)
22
+ throw new Error("Task view data must be JSON");
23
+ const array = Array.isArray(value);
24
+ if (!array && Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null)
25
+ throw new Error("Task view data must contain plain objects");
26
+ const output = {};
27
+ const entries = [];
28
+ for (const key of Object.keys(value)) {
29
+ if (array && key !== String(entries.length))
30
+ throw new Error("Task view arrays must be dense JSON arrays");
31
+ const field = Object.getOwnPropertyDescriptor(value, key);
32
+ if (!("value" in field))
33
+ throw new Error("Task view data cannot contain accessors");
34
+ if (field.value === undefined && !array)
35
+ continue;
36
+ copy(key, depth + 1);
37
+ const next = copy(field.value, depth + 1);
38
+ if (array)
39
+ entries.push(next);
40
+ else
41
+ Object.defineProperty(output, key, { value: next, enumerable: true, writable: true, configurable: true });
42
+ }
43
+ if (array && entries.length !== value.length)
44
+ throw new Error("Task view arrays must be dense JSON arrays");
45
+ return array ? entries : output;
46
+ };
47
+ const result = copy(source, 0);
48
+ if (budget < 0)
49
+ throw new Error("Task view data exceeds storage limits");
50
+ if (!result ||
51
+ typeof result.version !== "number" ||
52
+ !Number.isSafeInteger(result.version) ||
53
+ result.version < 1 ||
54
+ !Object.hasOwn(result, "data"))
55
+ throw new Error("Invalid task view data envelope");
56
+ // Traversal already bounds the allocation; enforce the exact serialized limit too.
57
+ if (Buffer.byteLength(JSON.stringify(result)) > 120 * 1024)
58
+ throw new Error("Task view data exceeds storage limits");
59
+ return { version: result.version, data: result.data };
60
+ }
61
+ //# sourceMappingURL=view-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-data.js","sourceRoot":"","sources":["../../../src/core/tasks/view-data.ts"],"names":[],"mappings":"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","sourcesContent":["/** Executor-owned JSON data; the version belongs to its view provider. */\nexport interface TaskViewData {\n\tversion: number;\n\tdata: unknown;\n}\n\n/** Strict, bounded JSON copy. Never invoke accessors, toJSON, or renderer callbacks. */\nexport function readTaskViewData(source: unknown): TaskViewData {\n\tlet budget = 120 * 1024;\n\tconst copy = (value: unknown, depth: number): unknown => {\n\t\tif (depth > 32 || --budget < 0) throw new Error(\"Task view data exceeds storage limits\");\n\t\tif (value === null || typeof value === \"boolean\") return value;\n\t\tif (typeof value === \"string\") {\n\t\t\tif (value.length > budget) throw new Error(\"Task view data exceeds storage limits\");\n\t\t\tbudget -= Buffer.byteLength(JSON.stringify(value));\n\t\t\tif (budget < 0) throw new Error(\"Task view data exceeds storage limits\");\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"number\" && Number.isFinite(value)) {\n\t\t\tbudget -= 24;\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value !== \"object\" || value === null) throw new Error(\"Task view data must be JSON\");\n\t\tconst array = Array.isArray(value);\n\t\tif (!array && Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null)\n\t\t\tthrow new Error(\"Task view data must contain plain objects\");\n\t\tconst output: Record<string, unknown> = {};\n\t\tconst entries: unknown[] = [];\n\t\tfor (const key of Object.keys(value)) {\n\t\t\tif (array && key !== String(entries.length)) throw new Error(\"Task view arrays must be dense JSON arrays\");\n\t\t\tconst field = Object.getOwnPropertyDescriptor(value, key)!;\n\t\t\tif (!(\"value\" in field)) throw new Error(\"Task view data cannot contain accessors\");\n\t\t\tif (field.value === undefined && !array) continue;\n\t\t\tcopy(key, depth + 1);\n\t\t\tconst next = copy(field.value, depth + 1);\n\t\t\tif (array) entries.push(next);\n\t\t\telse Object.defineProperty(output, key, { value: next, enumerable: true, writable: true, configurable: true });\n\t\t}\n\t\tif (array && entries.length !== value.length) throw new Error(\"Task view arrays must be dense JSON arrays\");\n\t\treturn array ? entries : output;\n\t};\n\tconst result = copy(source, 0) as Partial<TaskViewData> | null;\n\tif (budget < 0) throw new Error(\"Task view data exceeds storage limits\");\n\tif (\n\t\t!result ||\n\t\ttypeof result.version !== \"number\" ||\n\t\t!Number.isSafeInteger(result.version) ||\n\t\tresult.version < 1 ||\n\t\t!Object.hasOwn(result, \"data\")\n\t)\n\t\tthrow new Error(\"Invalid task view data envelope\");\n\t// Traversal already bounds the allocation; enforce the exact serialized limit too.\n\tif (Buffer.byteLength(JSON.stringify(result)) > 120 * 1024) throw new Error(\"Task view data exceeds storage limits\");\n\treturn { version: result.version, data: result.data };\n}\n"]}
@@ -0,0 +1,30 @@
1
+ import type { Component } from "@earendil-works/pi-tui";
2
+ import type { Theme } from "../../modes/interactive/theme/theme.ts";
3
+ import type { TaskRead, TaskSnapshot } from "./types.ts";
4
+ /** A panel-local view. Components own their content; the panel owns scrolling. */
5
+ export interface TaskView {
6
+ info: Component;
7
+ output: Component;
8
+ update(task: TaskSnapshot, output?: TaskRead): void;
9
+ dispose?(): void;
10
+ }
11
+ export interface TaskViewProvider {
12
+ /** Tail views receive bounded output reads and initially follow the bottom. */
13
+ outputMode: "tail" | "snapshot";
14
+ create(context: {
15
+ theme: Theme;
16
+ requestRender(): void;
17
+ }): TaskView;
18
+ }
19
+ /** Session-local renderer registrations, never part of a persisted task snapshot. */
20
+ export declare class TaskViewRegistry {
21
+ private readonly providers;
22
+ private readonly listeners;
23
+ private closed;
24
+ register(kind: string, provider: TaskViewProvider): () => void;
25
+ get(kind: string): TaskViewProvider | undefined;
26
+ subscribe(listener: () => void): () => void;
27
+ close(): void;
28
+ private emit;
29
+ }
30
+ //# sourceMappingURL=view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/core/tasks/view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzD,kFAAkF;AAClF,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACpD,OAAO,CAAC,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAChC,+EAA+E;IAC/E,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC;IAChC,MAAM,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,aAAa,IAAI,IAAI,CAAA;KAAE,GAAG,QAAQ,CAAC;CACnE;AAED,qFAAqF;AACrF,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuC;IACjE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,MAAM,CAAS;IAEvB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI;IAY9D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAI/C,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAQ3C,KAAK,IAAI,IAAI;IAOb,OAAO,CAAC,IAAI;CASZ"}
@@ -0,0 +1,50 @@
1
+ /** Session-local renderer registrations, never part of a persisted task snapshot. */
2
+ export class TaskViewRegistry {
3
+ constructor() {
4
+ this.providers = new Map();
5
+ this.listeners = new Set();
6
+ this.closed = false;
7
+ }
8
+ register(kind, provider) {
9
+ if (this.closed)
10
+ throw new Error("Task views are closed");
11
+ if (this.providers.has(kind))
12
+ throw new Error(`Task view already registered: ${kind}`);
13
+ this.providers.set(kind, provider);
14
+ this.emit();
15
+ return () => {
16
+ if (this.providers.get(kind) !== provider)
17
+ return;
18
+ this.providers.delete(kind);
19
+ this.emit();
20
+ };
21
+ }
22
+ get(kind) {
23
+ return this.providers.get(kind);
24
+ }
25
+ subscribe(listener) {
26
+ if (this.closed)
27
+ return () => { };
28
+ this.listeners.add(listener);
29
+ return () => {
30
+ this.listeners.delete(listener);
31
+ };
32
+ }
33
+ close() {
34
+ this.closed = true;
35
+ this.providers.clear();
36
+ this.emit();
37
+ this.listeners.clear();
38
+ }
39
+ emit() {
40
+ for (const listener of this.listeners) {
41
+ try {
42
+ listener();
43
+ }
44
+ catch {
45
+ /* A view cannot interrupt registration or execution. */
46
+ }
47
+ }
48
+ }
49
+ }
50
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/core/tasks/view.ts"],"names":[],"mappings":"AAkBA,qFAAqF;AACrF,MAAM,OAAO,gBAAgB;IAA7B;QACkB,cAAS,GAAG,IAAI,GAAG,EAA4B,CAAC;QAChD,cAAS,GAAG,IAAI,GAAG,EAAc,CAAC;QAC3C,WAAM,GAAG,KAAK,CAAC;IA0CxB,CAAC;IAxCA,QAAQ,CAAC,IAAY,EAAE,QAA0B;QAChD,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC1D,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;QACvF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,GAAG,EAAE;YACX,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ;gBAAE,OAAO;YAClD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;QACb,CAAC,CAAC;IACH,CAAC;IAED,GAAG,CAAC,IAAY;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,SAAS,CAAC,QAAoB;QAC7B,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACX,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC;IACH,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAEO,IAAI;QACX,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,IAAI,CAAC;gBACJ,QAAQ,EAAE,CAAC;YACZ,CAAC;YAAC,MAAM,CAAC;gBACR,wDAAwD;YACzD,CAAC;QACF,CAAC;IACF,CAAC;CACD","sourcesContent":["import type { Component } from \"@earendil-works/pi-tui\";\nimport type { Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport type { TaskRead, TaskSnapshot } from \"./types.ts\";\n\n/** A panel-local view. Components own their content; the panel owns scrolling. */\nexport interface TaskView {\n\tinfo: Component;\n\toutput: Component;\n\tupdate(task: TaskSnapshot, output?: TaskRead): void;\n\tdispose?(): void;\n}\n\nexport interface TaskViewProvider {\n\t/** Tail views receive bounded output reads and initially follow the bottom. */\n\toutputMode: \"tail\" | \"snapshot\";\n\tcreate(context: { theme: Theme; requestRender(): void }): TaskView;\n}\n\n/** Session-local renderer registrations, never part of a persisted task snapshot. */\nexport class TaskViewRegistry {\n\tprivate readonly providers = new Map<string, TaskViewProvider>();\n\tprivate readonly listeners = new Set<() => void>();\n\tprivate closed = false;\n\n\tregister(kind: string, provider: TaskViewProvider): () => void {\n\t\tif (this.closed) throw new Error(\"Task views are closed\");\n\t\tif (this.providers.has(kind)) throw new Error(`Task view already registered: ${kind}`);\n\t\tthis.providers.set(kind, provider);\n\t\tthis.emit();\n\t\treturn () => {\n\t\t\tif (this.providers.get(kind) !== provider) return;\n\t\t\tthis.providers.delete(kind);\n\t\t\tthis.emit();\n\t\t};\n\t}\n\n\tget(kind: string): TaskViewProvider | undefined {\n\t\treturn this.providers.get(kind);\n\t}\n\n\tsubscribe(listener: () => void): () => void {\n\t\tif (this.closed) return () => {};\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\n\tclose(): void {\n\t\tthis.closed = true;\n\t\tthis.providers.clear();\n\t\tthis.emit();\n\t\tthis.listeners.clear();\n\t}\n\n\tprivate emit(): void {\n\t\tfor (const listener of this.listeners) {\n\t\t\ttry {\n\t\t\t\tlistener();\n\t\t\t} catch {\n\t\t\t\t/* A view cannot interrupt registration or execution. */\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
@@ -1,98 +1,13 @@
1
- import type { AgentTool } from "@earendil-works/pi-agent-core";
2
- import { type Static, Type } from "typebox";
3
- import { type ShellConfig } from "../../utils/shell.ts";
4
- import type { ExtensionContext, ToolDefinition } from "../extensions/types.ts";
5
- import { type TruncationResult } from "./truncate.ts";
6
- declare const bashSchema: Type.TObject<{
7
- command: Type.TString;
8
- timeout: Type.TOptional<Type.TNumber>;
9
- background: Type.TOptional<Type.TBoolean>;
10
- }>;
11
- export declare const bashToolSystemPromptContribution: {
12
- readonly snippet: "Execute bash commands, foreground or background";
13
- readonly guidelines: readonly ["You can inspect PI_* environment variables for current model and session details."];
14
- };
15
- export type BashToolInput = Static<typeof bashSchema>;
16
- export interface BashToolDetails {
17
- truncation?: TruncationResult;
18
- fullOutputPath?: string;
19
- /** Settled handoff snapshot, not a command completion or exit code. */
20
- background?: {
21
- kind: "background";
22
- taskId: string;
23
- };
24
- }
25
- /**
26
- * Pluggable operations for the bash tool.
27
- * Override these to delegate command execution to remote systems (for example SSH).
28
- */
29
- export interface BashOperations {
30
- /**
31
- * Execute a command and stream output.
32
- * @param command The command to execute
33
- * @param cwd Working directory
34
- * @param options Execution options
35
- * @returns Promise resolving to the exit code. Report signal terminations as 128 + signal number;
36
- * a null exit code is treated as a failed command.
37
- *
38
- * Error contract: reject with `new Error("aborted")` when aborted via `signal`,
39
- * and `new Error("timeout:<seconds>")` on timeout expiry. The shared shell
40
- * execution pipeline classifies outcomes from these exact markers.
41
- */
42
- exec: (command: string, cwd: string, options: {
43
- onData: (data: Buffer) => void;
44
- signal?: AbortSignal;
45
- timeout?: number;
46
- env?: NodeJS.ProcessEnv;
47
- }) => Promise<{
48
- exitCode: number | null;
49
- }>;
50
- }
51
- /** Shared process execution used by the built-in shell tools. */
52
- export declare function createLocalShellOperations(shellName: string, resolveShellConfig: () => ShellConfig, normalizeCommand?: (command: string) => string): BashOperations;
53
- /**
54
- * Create bash operations using pi's built-in local shell execution backend.
55
- *
56
- * This is useful for extensions that intercept user_bash and still want pi's
57
- * standard local shell behavior while wrapping or rewriting commands.
58
- */
1
+ import { type BashOperations, type BashToolOptions, createShellToolDefinition } from "./shell-tool.ts";
2
+ export { type BashOperations, type BashRenderState, type BashSpawnContext, type BashSpawnHook, type BashToolDetails, type BashToolInput, type BashToolOptions, bashToolSystemPromptContribution, } from "./shell-tool.ts";
59
3
  export declare function normalizeLocalBashCommand(command: string, platform?: NodeJS.Platform): string;
60
4
  export declare function createLocalBashOperations(options?: {
61
5
  shellPath?: string;
62
6
  }): BashOperations;
63
- export interface BashSpawnContext {
64
- command: string;
65
- cwd: string;
66
- env: NodeJS.ProcessEnv;
67
- }
68
- export type BashSpawnHook = (context: BashSpawnContext) => BashSpawnContext;
69
- export declare function resolveSpawnContext(command: string, cwd: string, spawnHook: BashSpawnHook | undefined, exposeSessionEnvironment: boolean, ctx: ExtensionContext | undefined): BashSpawnContext;
70
- export interface BashToolOptions {
71
- /** Custom operations for command execution. Default: local shell */
72
- operations?: BashOperations;
73
- /** Command prefix prepended to every command (for example shell setup commands) */
74
- commandPrefix?: string;
75
- /** Optional explicit shell path from settings */
76
- shellPath?: string;
77
- /** Expose current Pi session metadata as PI_* environment variables. Default: true */
78
- exposeSessionEnvironment?: boolean;
79
- /** Hook to adjust command, cwd, or env before execution */
80
- spawnHook?: BashSpawnHook;
81
- }
82
- export type BashRenderState = {
83
- dispose?: () => void;
84
- };
85
- export interface ShellToolConfig {
86
- name: string;
87
- label: string;
88
- shellName: string;
89
- prompt: string;
90
- promptSnippet: string;
91
- promptGuidelines?: readonly string[];
92
- tempFilePrefix: string;
93
- }
94
- export declare function createShellToolDefinition(cwd: string, config: ShellToolConfig, options?: BashToolOptions): ToolDefinition<typeof bashSchema, BashToolDetails | undefined, BashRenderState>;
95
- export declare function createBashToolDefinition(cwd: string, options?: BashToolOptions): ToolDefinition<typeof bashSchema, BashToolDetails | undefined, BashRenderState>;
96
- export declare function createBashTool(cwd: string, options?: BashToolOptions): AgentTool<typeof bashSchema>;
97
- export {};
7
+ export declare function createBashToolDefinition(cwd: string, options?: BashToolOptions): ReturnType<typeof createShellToolDefinition>;
8
+ export declare function createBashTool(cwd: string, options?: BashToolOptions): import("@earendil-works/pi-agent-core").AgentTool<import("typebox").TObject<{
9
+ command: import("typebox").TString;
10
+ timeout: import("typebox").TOptional<import("typebox").TNumber>;
11
+ background: import("typebox").TOptional<import("typebox").TBoolean>;
12
+ }>, import("./shell-tool.ts").BashToolDetails | undefined>;
98
13
  //# sourceMappingURL=bash.d.ts.map