@sheason/pi-coding-agent 0.74.1-sheason.0 → 0.78.0-sheason.0.6.0-alpha.2

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 (516) hide show
  1. package/CHANGELOG.md +256 -4
  2. package/README.md +16 -8
  3. package/dist/bun/cli.d.ts.map +1 -1
  4. package/dist/bun/cli.js.map +1 -1
  5. package/dist/cli/args.d.ts +7 -2
  6. package/dist/cli/args.d.ts.map +1 -1
  7. package/dist/cli/args.js +49 -1
  8. package/dist/cli/args.js.map +1 -1
  9. package/dist/cli/config-selector.d.ts +2 -2
  10. package/dist/cli/config-selector.d.ts.map +1 -1
  11. package/dist/cli/config-selector.js +1 -1
  12. package/dist/cli/config-selector.js.map +1 -1
  13. package/dist/cli/file-processor.d.ts.map +1 -1
  14. package/dist/cli/file-processor.js +2 -3
  15. package/dist/cli/file-processor.js.map +1 -1
  16. package/dist/cli/initial-message.d.ts +1 -1
  17. package/dist/cli/initial-message.d.ts.map +1 -1
  18. package/dist/cli/initial-message.js.map +1 -1
  19. package/dist/cli/list-models.d.ts +1 -1
  20. package/dist/cli/list-models.d.ts.map +1 -1
  21. package/dist/cli/list-models.js.map +1 -1
  22. package/dist/cli/session-picker.d.ts +1 -1
  23. package/dist/cli/session-picker.d.ts.map +1 -1
  24. package/dist/cli/session-picker.js.map +1 -1
  25. package/dist/cli.d.ts.map +1 -1
  26. package/dist/cli.js +4 -6
  27. package/dist/cli.js.map +1 -1
  28. package/dist/config.d.ts.map +1 -1
  29. package/dist/config.js +61 -32
  30. package/dist/config.js.map +1 -1
  31. package/dist/core/agent-session-proxy.d.ts +268 -0
  32. package/dist/core/agent-session-proxy.d.ts.map +1 -0
  33. package/dist/core/agent-session-proxy.js +2 -0
  34. package/dist/core/agent-session-proxy.js.map +1 -0
  35. package/dist/core/agent-session-runtime.d.ts +10 -10
  36. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  37. package/dist/core/agent-session-runtime.js +14 -14
  38. package/dist/core/agent-session-runtime.js.map +1 -1
  39. package/dist/core/agent-session-services.d.ts +8 -7
  40. package/dist/core/agent-session-services.d.ts.map +1 -1
  41. package/dist/core/agent-session-services.js +4 -2
  42. package/dist/core/agent-session-services.js.map +1 -1
  43. package/dist/core/agent-session.d.ts +60 -27
  44. package/dist/core/agent-session.d.ts.map +1 -1
  45. package/dist/core/agent-session.js +303 -177
  46. package/dist/core/agent-session.js.map +1 -1
  47. package/dist/core/auth-guidance.d.ts.map +1 -1
  48. package/dist/core/auth-guidance.js.map +1 -1
  49. package/dist/core/auth-storage.d.ts +1 -1
  50. package/dist/core/auth-storage.d.ts.map +1 -1
  51. package/dist/core/auth-storage.js +3 -2
  52. package/dist/core/auth-storage.js.map +1 -1
  53. package/dist/core/bash-executor.d.ts +1 -1
  54. package/dist/core/bash-executor.d.ts.map +1 -1
  55. package/dist/core/bash-executor.js.map +1 -1
  56. package/dist/core/compaction/branch-summarization.d.ts +3 -3
  57. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  58. package/dist/core/compaction/branch-summarization.js.map +1 -1
  59. package/dist/core/compaction/compaction.d.ts +5 -5
  60. package/dist/core/compaction/compaction.d.ts.map +1 -1
  61. package/dist/core/compaction/compaction.js +41 -37
  62. package/dist/core/compaction/compaction.js.map +1 -1
  63. package/dist/core/compaction/index.d.ts +3 -3
  64. package/dist/core/compaction/index.d.ts.map +1 -1
  65. package/dist/core/compaction/index.js.map +1 -1
  66. package/dist/core/exec.d.ts.map +1 -1
  67. package/dist/core/exec.js.map +1 -1
  68. package/dist/core/export-html/index.d.ts +1 -1
  69. package/dist/core/export-html/index.d.ts.map +1 -1
  70. package/dist/core/export-html/index.js +8 -6
  71. package/dist/core/export-html/index.js.map +1 -1
  72. package/dist/core/export-html/template.js +23 -6
  73. package/dist/core/export-html/tool-renderer.d.ts +2 -2
  74. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  75. package/dist/core/export-html/tool-renderer.js.map +1 -1
  76. package/dist/core/extensions/index.d.ts +8 -8
  77. package/dist/core/extensions/index.d.ts.map +1 -1
  78. package/dist/core/extensions/index.js.map +1 -1
  79. package/dist/core/extensions/loader.d.ts +2 -2
  80. package/dist/core/extensions/loader.d.ts.map +1 -1
  81. package/dist/core/extensions/loader.js +17 -34
  82. package/dist/core/extensions/loader.js.map +1 -1
  83. package/dist/core/extensions/runner.d.ts +12 -7
  84. package/dist/core/extensions/runner.d.ts.map +1 -1
  85. package/dist/core/extensions/runner.js +36 -2
  86. package/dist/core/extensions/runner.js.map +1 -1
  87. package/dist/core/extensions/types.d.ts +26 -24
  88. package/dist/core/extensions/types.d.ts.map +1 -1
  89. package/dist/core/extensions/types.js.map +1 -1
  90. package/dist/core/extensions/wrapper.d.ts +2 -2
  91. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  92. package/dist/core/extensions/wrapper.js.map +1 -1
  93. package/dist/core/footer-data-provider.d.ts +3 -1
  94. package/dist/core/footer-data-provider.d.ts.map +1 -1
  95. package/dist/core/footer-data-provider.js +4 -0
  96. package/dist/core/footer-data-provider.js.map +1 -1
  97. package/dist/core/http-dispatcher.d.ts +21 -0
  98. package/dist/core/http-dispatcher.d.ts.map +1 -0
  99. package/dist/core/http-dispatcher.js +48 -0
  100. package/dist/core/http-dispatcher.js.map +1 -0
  101. package/dist/core/index.d.ts +8 -8
  102. package/dist/core/index.d.ts.map +1 -1
  103. package/dist/core/index.js.map +1 -1
  104. package/dist/core/keybindings.d.ts.map +1 -1
  105. package/dist/core/keybindings.js.map +1 -1
  106. package/dist/core/local-agent-session-proxy.d.ts +82 -0
  107. package/dist/core/local-agent-session-proxy.d.ts.map +1 -0
  108. package/dist/core/local-agent-session-proxy.js +531 -0
  109. package/dist/core/local-agent-session-proxy.js.map +1 -0
  110. package/dist/core/messages.d.ts +0 -9
  111. package/dist/core/messages.d.ts.map +1 -1
  112. package/dist/core/messages.js +0 -10
  113. package/dist/core/messages.js.map +1 -1
  114. package/dist/core/model-registry.d.ts +4 -4
  115. package/dist/core/model-registry.d.ts.map +1 -1
  116. package/dist/core/model-registry.js +72 -16
  117. package/dist/core/model-registry.js.map +1 -1
  118. package/dist/core/model-resolver.d.ts +1 -1
  119. package/dist/core/model-resolver.d.ts.map +1 -1
  120. package/dist/core/model-resolver.js +1 -1
  121. package/dist/core/model-resolver.js.map +1 -1
  122. package/dist/core/output-guard.d.ts +1 -0
  123. package/dist/core/output-guard.d.ts.map +1 -1
  124. package/dist/core/output-guard.js +52 -22
  125. package/dist/core/output-guard.js.map +1 -1
  126. package/dist/core/package-manager.d.ts +7 -1
  127. package/dist/core/package-manager.d.ts.map +1 -1
  128. package/dist/core/package-manager.js +129 -64
  129. package/dist/core/package-manager.js.map +1 -1
  130. package/dist/core/prompt-templates.d.ts +1 -1
  131. package/dist/core/prompt-templates.d.ts.map +1 -1
  132. package/dist/core/prompt-templates.js +12 -24
  133. package/dist/core/prompt-templates.js.map +1 -1
  134. package/dist/core/provider-display-names.d.ts.map +1 -1
  135. package/dist/core/provider-display-names.js +0 -1
  136. package/dist/core/provider-display-names.js.map +1 -1
  137. package/dist/core/resolve-config-value.d.ts +9 -1
  138. package/dist/core/resolve-config-value.d.ts.map +1 -1
  139. package/dist/core/resolve-config-value.js +134 -11
  140. package/dist/core/resolve-config-value.js.map +1 -1
  141. package/dist/core/resource-loader.d.ts +13 -10
  142. package/dist/core/resource-loader.d.ts.map +1 -1
  143. package/dist/core/resource-loader.js +41 -33
  144. package/dist/core/resource-loader.js.map +1 -1
  145. package/dist/core/sdk.d.ts +15 -13
  146. package/dist/core/sdk.d.ts.map +1 -1
  147. package/dist/core/sdk.js +24 -17
  148. package/dist/core/sdk.js.map +1 -1
  149. package/dist/core/session-manager.d.ts +20 -10
  150. package/dist/core/session-manager.d.ts.map +1 -1
  151. package/dist/core/session-manager.js +201 -106
  152. package/dist/core/session-manager.js.map +1 -1
  153. package/dist/core/settings-manager.d.ts +5 -0
  154. package/dist/core/settings-manager.d.ts.map +1 -1
  155. package/dist/core/settings-manager.js +31 -13
  156. package/dist/core/settings-manager.js.map +1 -1
  157. package/dist/core/skills.d.ts +2 -2
  158. package/dist/core/skills.d.ts.map +1 -1
  159. package/dist/core/skills.js +10 -27
  160. package/dist/core/skills.js.map +1 -1
  161. package/dist/core/slash-commands.d.ts +1 -1
  162. package/dist/core/slash-commands.d.ts.map +1 -1
  163. package/dist/core/slash-commands.js.map +1 -1
  164. package/dist/core/source-info.d.ts +1 -1
  165. package/dist/core/source-info.d.ts.map +1 -1
  166. package/dist/core/source-info.js.map +1 -1
  167. package/dist/core/system-prompt.d.ts +1 -1
  168. package/dist/core/system-prompt.d.ts.map +1 -1
  169. package/dist/core/system-prompt.js +16 -9
  170. package/dist/core/system-prompt.js.map +1 -1
  171. package/dist/core/telemetry.d.ts +1 -1
  172. package/dist/core/telemetry.d.ts.map +1 -1
  173. package/dist/core/telemetry.js.map +1 -1
  174. package/dist/core/tools/bash.d.ts +2 -2
  175. package/dist/core/tools/bash.d.ts.map +1 -1
  176. package/dist/core/tools/bash.js +55 -54
  177. package/dist/core/tools/bash.js.map +1 -1
  178. package/dist/core/tools/edit-diff.d.ts +3 -1
  179. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  180. package/dist/core/tools/edit-diff.js +8 -1
  181. package/dist/core/tools/edit-diff.js.map +1 -1
  182. package/dist/core/tools/edit.d.ts +5 -3
  183. package/dist/core/tools/edit.d.ts.map +1 -1
  184. package/dist/core/tools/edit.js +51 -91
  185. package/dist/core/tools/edit.js.map +1 -1
  186. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  187. package/dist/core/tools/file-mutation-queue.js +27 -12
  188. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  189. package/dist/core/tools/find.d.ts +2 -2
  190. package/dist/core/tools/find.d.ts.map +1 -1
  191. package/dist/core/tools/find.js +2 -3
  192. package/dist/core/tools/find.js.map +1 -1
  193. package/dist/core/tools/grep.d.ts +2 -2
  194. package/dist/core/tools/grep.d.ts.map +1 -1
  195. package/dist/core/tools/grep.js +3 -3
  196. package/dist/core/tools/grep.js.map +1 -1
  197. package/dist/core/tools/index.d.ts +17 -17
  198. package/dist/core/tools/index.d.ts.map +1 -1
  199. package/dist/core/tools/index.js.map +1 -1
  200. package/dist/core/tools/ls.d.ts +2 -2
  201. package/dist/core/tools/ls.d.ts.map +1 -1
  202. package/dist/core/tools/ls.js +10 -12
  203. package/dist/core/tools/ls.js.map +1 -1
  204. package/dist/core/tools/output-accumulator.d.ts +3 -1
  205. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  206. package/dist/core/tools/output-accumulator.js +9 -3
  207. package/dist/core/tools/output-accumulator.js.map +1 -1
  208. package/dist/core/tools/path-utils.d.ts +2 -0
  209. package/dist/core/tools/path-utils.d.ts.map +1 -1
  210. package/dist/core/tools/path-utils.js +39 -21
  211. package/dist/core/tools/path-utils.js.map +1 -1
  212. package/dist/core/tools/read.d.ts +2 -2
  213. package/dist/core/tools/read.d.ts.map +1 -1
  214. package/dist/core/tools/read.js +15 -15
  215. package/dist/core/tools/read.js.map +1 -1
  216. package/dist/core/tools/render-utils.d.ts +5 -2
  217. package/dist/core/tools/render-utils.d.ts.map +1 -1
  218. package/dist/core/tools/render-utils.js +17 -1
  219. package/dist/core/tools/render-utils.js.map +1 -1
  220. package/dist/core/tools/tool-definition-wrapper.d.ts +1 -1
  221. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  222. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  223. package/dist/core/tools/truncate.d.ts.map +1 -1
  224. package/dist/core/tools/truncate.js +12 -2
  225. package/dist/core/tools/truncate.js.map +1 -1
  226. package/dist/core/tools/write.d.ts +1 -1
  227. package/dist/core/tools/write.d.ts.map +1 -1
  228. package/dist/core/tools/write.js +25 -41
  229. package/dist/core/tools/write.js.map +1 -1
  230. package/dist/d-pi-worker.d.ts +12 -0
  231. package/dist/d-pi-worker.d.ts.map +1 -0
  232. package/dist/d-pi-worker.js +9 -0
  233. package/dist/d-pi-worker.js.map +1 -0
  234. package/dist/index.d.ts +30 -28
  235. package/dist/index.d.ts.map +1 -1
  236. package/dist/index.js +5 -3
  237. package/dist/index.js.map +1 -1
  238. package/dist/main.d.ts +1 -1
  239. package/dist/main.d.ts.map +1 -1
  240. package/dist/main.js +100 -39
  241. package/dist/main.js.map +1 -1
  242. package/dist/migrations.d.ts.map +1 -1
  243. package/dist/migrations.js +118 -1
  244. package/dist/migrations.js.map +1 -1
  245. package/dist/modes/connect/auth-headers.d.ts +2 -0
  246. package/dist/modes/connect/auth-headers.d.ts.map +1 -0
  247. package/dist/modes/connect/auth-headers.js +2 -0
  248. package/dist/modes/connect/auth-headers.js.map +1 -0
  249. package/dist/modes/connect/client-extension-sync.d.ts +13 -0
  250. package/dist/modes/connect/client-extension-sync.d.ts.map +1 -0
  251. package/dist/modes/connect/client-extension-sync.js +51 -0
  252. package/dist/modes/connect/client-extension-sync.js.map +1 -0
  253. package/dist/modes/connect/connect-mode.d.ts +6 -0
  254. package/dist/modes/connect/connect-mode.d.ts.map +1 -0
  255. package/dist/modes/connect/connect-mode.js +29 -0
  256. package/dist/modes/connect/connect-mode.js.map +1 -0
  257. package/dist/modes/connect/remote-agent-session-proxy.d.ts +81 -0
  258. package/dist/modes/connect/remote-agent-session-proxy.d.ts.map +1 -0
  259. package/dist/modes/connect/remote-agent-session-proxy.js +326 -0
  260. package/dist/modes/connect/remote-agent-session-proxy.js.map +1 -0
  261. package/dist/modes/connect/sse-client.d.ts +18 -0
  262. package/dist/modes/connect/sse-client.d.ts.map +1 -0
  263. package/dist/modes/connect/sse-client.js +90 -0
  264. package/dist/modes/connect/sse-client.js.map +1 -0
  265. package/dist/modes/index.d.ts +5 -5
  266. package/dist/modes/index.d.ts.map +1 -1
  267. package/dist/modes/index.js.map +1 -1
  268. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  269. package/dist/modes/interactive/components/armin.js.map +1 -1
  270. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  271. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  272. package/dist/modes/interactive/components/bash-execution.d.ts +1 -1
  273. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  274. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  275. package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
  276. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  277. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  278. package/dist/modes/interactive/components/branch-summary-message.d.ts +1 -1
  279. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  280. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  281. package/dist/modes/interactive/components/compaction-summary-message.d.ts +1 -1
  282. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  283. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  284. package/dist/modes/interactive/components/config-selector.d.ts +4 -4
  285. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  286. package/dist/modes/interactive/components/config-selector.js +8 -5
  287. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  288. package/dist/modes/interactive/components/countdown-timer.d.ts +2 -2
  289. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  290. package/dist/modes/interactive/components/countdown-timer.js +2 -2
  291. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  292. package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
  293. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  294. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  295. package/dist/modes/interactive/components/custom-message.d.ts +2 -2
  296. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  297. package/dist/modes/interactive/components/custom-message.js +0 -1
  298. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  299. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  300. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  301. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  302. package/dist/modes/interactive/components/diff.js.map +1 -1
  303. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  304. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  305. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  306. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  307. package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
  308. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  309. package/dist/modes/interactive/components/extension-editor.js +14 -6
  310. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  311. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  312. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  313. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  314. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  315. package/dist/modes/interactive/components/footer.d.ts +15 -4
  316. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  317. package/dist/modes/interactive/components/footer.js +126 -8
  318. package/dist/modes/interactive/components/footer.js.map +1 -1
  319. package/dist/modes/interactive/components/index.d.ts +31 -31
  320. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  321. package/dist/modes/interactive/components/index.js.map +1 -1
  322. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  323. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  324. package/dist/modes/interactive/components/login-dialog.d.ts +7 -1
  325. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  326. package/dist/modes/interactive/components/login-dialog.js +28 -5
  327. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  328. package/dist/modes/interactive/components/model-selector.d.ts +2 -2
  329. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  330. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  331. package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
  332. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  333. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  334. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  335. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  336. package/dist/modes/interactive/components/session-selector-search.d.ts +1 -1
  337. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  338. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  339. package/dist/modes/interactive/components/session-selector.d.ts +3 -3
  340. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  341. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  342. package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
  343. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  344. package/dist/modes/interactive/components/settings-selector.js +15 -0
  345. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  346. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  347. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  348. package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
  349. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  350. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  351. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  352. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  353. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  354. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  355. package/dist/modes/interactive/components/tool-execution.d.ts +1 -1
  356. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  357. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  358. package/dist/modes/interactive/components/tree-selector.d.ts +1 -1
  359. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  360. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  361. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  362. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  363. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  364. package/dist/modes/interactive/components/user-message.js.map +1 -1
  365. package/dist/modes/interactive/interactive-mode.d.ts +53 -7
  366. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  367. package/dist/modes/interactive/interactive-mode.js +1247 -205
  368. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  369. package/dist/modes/interactive/theme/dark.json +5 -4
  370. package/dist/modes/interactive/theme/light.json +5 -4
  371. package/dist/modes/interactive/theme/theme.d.ts +22 -3
  372. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  373. package/dist/modes/interactive/theme/theme.js +130 -69
  374. package/dist/modes/interactive/theme/theme.js.map +1 -1
  375. package/dist/modes/print-mode.d.ts +1 -1
  376. package/dist/modes/print-mode.d.ts.map +1 -1
  377. package/dist/modes/print-mode.js.map +1 -1
  378. package/dist/modes/rpc/rpc-client.d.ts +8 -5
  379. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  380. package/dist/modes/rpc/rpc-client.js +65 -8
  381. package/dist/modes/rpc/rpc-client.js.map +1 -1
  382. package/dist/modes/rpc/rpc-mode.d.ts +2 -2
  383. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  384. package/dist/modes/rpc/rpc-mode.js +18 -4
  385. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  386. package/dist/modes/rpc/rpc-types.d.ts +5 -4
  387. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  388. package/dist/modes/rpc/rpc-types.js.map +1 -1
  389. package/dist/modes/serve/api-handlers.d.ts +4 -0
  390. package/dist/modes/serve/api-handlers.d.ts.map +1 -0
  391. package/dist/modes/serve/api-handlers.js +324 -0
  392. package/dist/modes/serve/api-handlers.js.map +1 -0
  393. package/dist/modes/serve/http-server.d.ts +14 -0
  394. package/dist/modes/serve/http-server.d.ts.map +1 -0
  395. package/dist/modes/serve/http-server.js +94 -0
  396. package/dist/modes/serve/http-server.js.map +1 -0
  397. package/dist/modes/serve/serve-mode.d.ts +10 -0
  398. package/dist/modes/serve/serve-mode.d.ts.map +1 -0
  399. package/dist/modes/serve/serve-mode.js +217 -0
  400. package/dist/modes/serve/serve-mode.js.map +1 -0
  401. package/dist/package-manager-cli.d.ts.map +1 -1
  402. package/dist/package-manager-cli.js +62 -7
  403. package/dist/package-manager-cli.js.map +1 -1
  404. package/dist/utils/ansi.d.ts.map +1 -1
  405. package/dist/utils/ansi.js +47 -72
  406. package/dist/utils/ansi.js.map +1 -1
  407. package/dist/utils/changelog.d.ts +1 -1
  408. package/dist/utils/changelog.d.ts.map +1 -1
  409. package/dist/utils/changelog.js.map +1 -1
  410. package/dist/utils/child-process.d.ts +5 -2
  411. package/dist/utils/child-process.d.ts.map +1 -1
  412. package/dist/utils/child-process.js +9 -7
  413. package/dist/utils/child-process.js.map +1 -1
  414. package/dist/utils/clipboard-image.d.ts.map +1 -1
  415. package/dist/utils/clipboard-image.js.map +1 -1
  416. package/dist/utils/clipboard-native.d.ts +3 -1
  417. package/dist/utils/clipboard-native.d.ts.map +1 -1
  418. package/dist/utils/clipboard-native.js +14 -8
  419. package/dist/utils/clipboard-native.js.map +1 -1
  420. package/dist/utils/clipboard.d.ts.map +1 -1
  421. package/dist/utils/clipboard.js.map +1 -1
  422. package/dist/utils/deprecation.d.ts +4 -0
  423. package/dist/utils/deprecation.d.ts.map +1 -0
  424. package/dist/utils/deprecation.js +13 -0
  425. package/dist/utils/deprecation.js.map +1 -0
  426. package/dist/utils/exif-orientation.d.ts +1 -1
  427. package/dist/utils/exif-orientation.d.ts.map +1 -1
  428. package/dist/utils/exif-orientation.js.map +1 -1
  429. package/dist/utils/html.d.ts +7 -0
  430. package/dist/utils/html.d.ts.map +1 -0
  431. package/dist/utils/html.js +40 -0
  432. package/dist/utils/html.js.map +1 -0
  433. package/dist/utils/image-convert.d.ts.map +1 -1
  434. package/dist/utils/image-convert.js.map +1 -1
  435. package/dist/utils/image-resize-core.d.ts +30 -0
  436. package/dist/utils/image-resize-core.d.ts.map +1 -0
  437. package/dist/utils/image-resize-core.js +124 -0
  438. package/dist/utils/image-resize-core.js.map +1 -0
  439. package/dist/utils/image-resize-worker.d.ts +2 -0
  440. package/dist/utils/image-resize-worker.d.ts.map +1 -0
  441. package/dist/utils/image-resize-worker.js +31 -0
  442. package/dist/utils/image-resize-worker.js.map +1 -0
  443. package/dist/utils/image-resize.d.ts +7 -27
  444. package/dist/utils/image-resize.d.ts.map +1 -1
  445. package/dist/utils/image-resize.js +75 -131
  446. package/dist/utils/image-resize.js.map +1 -1
  447. package/dist/utils/json.d.ts +3 -0
  448. package/dist/utils/json.d.ts.map +1 -0
  449. package/dist/utils/json.js +7 -0
  450. package/dist/utils/json.js.map +1 -0
  451. package/dist/utils/paths.d.ts +16 -1
  452. package/dist/utils/paths.d.ts.map +1 -1
  453. package/dist/utils/paths.js +49 -7
  454. package/dist/utils/paths.js.map +1 -1
  455. package/dist/utils/shell.d.ts.map +1 -1
  456. package/dist/utils/shell.js +6 -1
  457. package/dist/utils/shell.js.map +1 -1
  458. package/dist/utils/syntax-highlight.d.ts +12 -0
  459. package/dist/utils/syntax-highlight.d.ts.map +1 -0
  460. package/dist/utils/syntax-highlight.js +118 -0
  461. package/dist/utils/syntax-highlight.js.map +1 -0
  462. package/dist/utils/tools-manager.d.ts.map +1 -1
  463. package/dist/utils/tools-manager.js +4 -1
  464. package/dist/utils/tools-manager.js.map +1 -1
  465. package/dist/utils/version-check.d.ts +2 -1
  466. package/dist/utils/version-check.d.ts.map +1 -1
  467. package/dist/utils/version-check.js +9 -4
  468. package/dist/utils/version-check.js.map +1 -1
  469. package/dist/utils/windows-self-update.d.ts +3 -0
  470. package/dist/utils/windows-self-update.d.ts.map +1 -0
  471. package/dist/utils/windows-self-update.js +77 -0
  472. package/dist/utils/windows-self-update.js.map +1 -0
  473. package/docs/custom-provider.md +111 -21
  474. package/docs/development.md +1 -1
  475. package/docs/extensions.md +13 -7
  476. package/docs/index.md +13 -3
  477. package/docs/models.md +32 -13
  478. package/docs/packages.md +9 -6
  479. package/docs/providers.md +13 -5
  480. package/docs/quickstart.md +24 -1
  481. package/docs/rpc.md +2 -1
  482. package/docs/sdk.md +8 -0
  483. package/docs/session-format.md +1 -1
  484. package/docs/sessions.md +8 -0
  485. package/docs/settings.md +8 -6
  486. package/docs/skills.md +3 -4
  487. package/docs/terminal-setup.md +8 -0
  488. package/docs/termux.md +3 -3
  489. package/docs/tui.md +2 -2
  490. package/docs/usage.md +13 -2
  491. package/examples/extensions/README.md +1 -0
  492. package/examples/extensions/custom-provider-anthropic/index.ts +1 -1
  493. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  494. package/examples/extensions/custom-provider-anthropic/package.json +2 -2
  495. package/examples/extensions/custom-provider-gitlab-duo/index.ts +54 -3
  496. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  497. package/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
  498. package/examples/extensions/doom-overlay/doom-component.ts +2 -2
  499. package/examples/extensions/doom-overlay/index.ts +3 -3
  500. package/examples/extensions/git-merge-and-resolve.ts +115 -0
  501. package/examples/extensions/input-transform-streaming.ts +39 -0
  502. package/examples/extensions/overlay-qa-tests.ts +97 -66
  503. package/examples/extensions/overlay-test.ts +7 -4
  504. package/examples/extensions/plan-mode/index.ts +1 -1
  505. package/examples/extensions/sandbox/package-lock.json +2 -2
  506. package/examples/extensions/sandbox/package.json +2 -2
  507. package/examples/extensions/subagent/README.md +3 -0
  508. package/examples/extensions/subagent/index.ts +42 -20
  509. package/examples/extensions/with-deps/package-lock.json +2 -2
  510. package/examples/extensions/with-deps/package.json +3 -3
  511. package/npm-shrinkwrap.json +1790 -0
  512. package/package.json +39 -32
  513. package/dist/utils/uuid.d.ts +0 -2
  514. package/dist/utils/uuid.d.ts.map +0 -1
  515. package/dist/utils/uuid.js +0 -40
  516. package/dist/utils/uuid.js.map +0 -1
@@ -303,7 +303,11 @@ function sleep(ms: number): Promise<void> {
303
303
 
304
304
  // Base overlay component with common rendering
305
305
  abstract class BaseOverlay {
306
- constructor(protected theme: Theme) {}
306
+ protected theme: Theme;
307
+
308
+ constructor(theme: Theme) {
309
+ this.theme = theme;
310
+ }
307
311
 
308
312
  protected box(lines: string[], width: number, title?: string): string[] {
309
313
  const th = this.theme;
@@ -330,12 +334,13 @@ abstract class BaseOverlay {
330
334
 
331
335
  // Anchor position test
332
336
  class AnchorTestComponent extends BaseOverlay {
333
- constructor(
334
- theme: Theme,
335
- private anchor: OverlayAnchor,
336
- private done: (result: "next" | "confirm" | "cancel") => void,
337
- ) {
337
+ private anchor: OverlayAnchor;
338
+ private done: (result: "next" | "confirm" | "cancel") => void;
339
+
340
+ constructor(theme: Theme, anchor: OverlayAnchor, done: (result: "next" | "confirm" | "cancel") => void) {
338
341
  super(theme);
342
+ this.anchor = anchor;
343
+ this.done = done;
339
344
  }
340
345
 
341
346
  handleInput(data: string): void {
@@ -368,12 +373,17 @@ class AnchorTestComponent extends BaseOverlay {
368
373
 
369
374
  // Margin/offset test
370
375
  class MarginTestComponent extends BaseOverlay {
376
+ private config: { name: string; options: OverlayOptions };
377
+ private done: (result: "next" | "close") => void;
378
+
371
379
  constructor(
372
380
  theme: Theme,
373
- private config: { name: string; options: OverlayOptions },
374
- private done: (result: "next" | "close") => void,
381
+ config: { name: string; options: OverlayOptions },
382
+ done: (result: "next" | "close") => void,
375
383
  ) {
376
384
  super(theme);
385
+ this.config = config;
386
+ this.done = done;
377
387
  }
378
388
 
379
389
  handleInput(data: string): void {
@@ -403,13 +413,15 @@ class MarginTestComponent extends BaseOverlay {
403
413
 
404
414
  // Stacked overlay test
405
415
  class StackOverlayComponent extends BaseOverlay {
406
- constructor(
407
- theme: Theme,
408
- private num: number,
409
- private position: string,
410
- private done: (result: string) => void,
411
- ) {
416
+ private num: number;
417
+ private position: string;
418
+ private done: (result: string) => void;
419
+
420
+ constructor(theme: Theme, num: number, position: string, done: (result: string) => void) {
412
421
  super(theme);
422
+ this.num = num;
423
+ this.position = position;
424
+ this.done = done;
413
425
  }
414
426
 
415
427
  handleInput(data: string): void {
@@ -446,19 +458,19 @@ class StackOverlayComponent extends BaseOverlay {
446
458
 
447
459
  // Streaming overflow test - spawns real process with colored output (original crash scenario)
448
460
  class StreamingOverflowComponent extends BaseOverlay {
461
+ private tui: TUI;
449
462
  private lines: string[] = [];
450
463
  private proc: ReturnType<typeof spawn> | null = null;
451
464
  private scrollOffset = 0;
452
465
  private maxVisibleLines = 15;
453
466
  private finished = false;
454
467
  private disposed = false;
468
+ private done: () => void;
455
469
 
456
- constructor(
457
- private tui: TUI,
458
- theme: Theme,
459
- private done: () => void,
460
- ) {
470
+ constructor(tui: TUI, theme: Theme, done: () => void) {
461
471
  super(theme);
472
+ this.tui = tui;
473
+ this.done = done;
462
474
  this.startProcess();
463
475
  }
464
476
 
@@ -579,11 +591,11 @@ class StreamingOverflowComponent extends BaseOverlay {
579
591
 
580
592
  // Edge position test
581
593
  class EdgeTestComponent extends BaseOverlay {
582
- constructor(
583
- theme: Theme,
584
- private done: () => void,
585
- ) {
594
+ private done: () => void;
595
+
596
+ constructor(theme: Theme, done: () => void) {
586
597
  super(theme);
598
+ this.done = done;
587
599
  }
588
600
 
589
601
  handleInput(data: string): void {
@@ -614,12 +626,17 @@ class EdgeTestComponent extends BaseOverlay {
614
626
 
615
627
  // Percentage positioning test
616
628
  class PercentTestComponent extends BaseOverlay {
629
+ private config: { name: string; row: number; col: number };
630
+ private done: (result: "next" | "close") => void;
631
+
617
632
  constructor(
618
633
  theme: Theme,
619
- private config: { name: string; row: number; col: number },
620
- private done: (result: "next" | "close") => void,
634
+ config: { name: string; row: number; col: number },
635
+ done: (result: "next" | "close") => void,
621
636
  ) {
622
637
  super(theme);
638
+ this.config = config;
639
+ this.done = done;
623
640
  }
624
641
 
625
642
  handleInput(data: string): void {
@@ -649,11 +666,11 @@ class PercentTestComponent extends BaseOverlay {
649
666
 
650
667
  // MaxHeight test - renders 20 lines, truncated to 10 by maxHeight
651
668
  class MaxHeightTestComponent extends BaseOverlay {
652
- constructor(
653
- theme: Theme,
654
- private done: () => void,
655
- ) {
669
+ private done: () => void;
670
+
671
+ constructor(theme: Theme, done: () => void) {
656
672
  super(theme);
673
+ this.done = done;
657
674
  }
658
675
 
659
676
  handleInput(data: string): void {
@@ -684,15 +701,15 @@ class MaxHeightTestComponent extends BaseOverlay {
684
701
 
685
702
  // Responsive sidepanel - demonstrates percentage width and visibility callback
686
703
  class SidepanelComponent extends BaseOverlay {
704
+ private tui: TUI;
687
705
  private items = ["Dashboard", "Messages", "Settings", "Help", "About"];
688
706
  private selectedIndex = 0;
707
+ private done: () => void;
689
708
 
690
- constructor(
691
- private tui: TUI,
692
- theme: Theme,
693
- private done: () => void,
694
- ) {
709
+ constructor(tui: TUI, theme: Theme, done: () => void) {
695
710
  super(theme);
711
+ this.tui = tui;
712
+ this.done = done;
696
713
  }
697
714
 
698
715
  handleInput(data: string): void {
@@ -745,18 +762,18 @@ class SidepanelComponent extends BaseOverlay {
745
762
 
746
763
  // Animation demo - proves overlays can handle real-time updates like pi-doom
747
764
  class AnimationDemoComponent extends BaseOverlay {
765
+ private tui: TUI;
748
766
  private frame = 0;
749
767
  private interval: ReturnType<typeof setInterval> | null = null;
750
768
  private fps = 0;
751
769
  private lastFpsUpdate = Date.now();
752
770
  private framesSinceLastFps = 0;
771
+ private done: () => void;
753
772
 
754
- constructor(
755
- private tui: TUI,
756
- theme: Theme,
757
- private done: () => void,
758
- ) {
773
+ constructor(tui: TUI, theme: Theme, done: () => void) {
759
774
  super(theme);
775
+ this.tui = tui;
776
+ this.done = done;
760
777
  this.startAnimation();
761
778
  }
762
779
 
@@ -860,15 +877,15 @@ function hslToRgb(h: number, s: number, l: number): [number, number, number] {
860
877
 
861
878
  // Toggle demo - demonstrates OverlayHandle.setHidden() via onHandle callback
862
879
  class ToggleDemoComponent extends BaseOverlay {
880
+ private tui: TUI;
863
881
  private toggleCount = 0;
864
882
  private isToggling = false;
883
+ private done: () => void;
865
884
 
866
- constructor(
867
- private tui: TUI,
868
- theme: Theme,
869
- private done: () => void,
870
- ) {
885
+ constructor(tui: TUI, theme: Theme, done: () => void) {
871
886
  super(theme);
887
+ this.tui = tui;
888
+ this.done = done;
872
889
  }
873
890
 
874
891
  handleInput(data: string): void {
@@ -923,19 +940,19 @@ class ToggleDemoComponent extends BaseOverlay {
923
940
 
924
941
  class PassiveDemoController extends BaseOverlay {
925
942
  focused = false;
943
+ private tui: TUI;
926
944
  private typed = "";
927
945
  private timerComponent: TimerPanel;
928
946
  private timerHandle: OverlayHandle | null = null;
929
947
  private interval: ReturnType<typeof setInterval> | null = null;
930
948
  private inputCount = 0;
931
949
  private lastInputDebug = "";
950
+ private done: () => void;
932
951
 
933
- constructor(
934
- private tui: TUI,
935
- theme: Theme,
936
- private done: () => void,
937
- ) {
952
+ constructor(tui: TUI, theme: Theme, done: () => void) {
938
953
  super(theme);
954
+ this.tui = tui;
955
+ this.done = done;
939
956
  this.timerComponent = new TimerPanel(theme);
940
957
  this.timerHandle = this.tui.showOverlay(this.timerComponent, {
941
958
  nonCapturing: true,
@@ -1015,16 +1032,16 @@ class TimerPanel extends BaseOverlay {
1015
1032
  // === Focus cycling demo ===
1016
1033
 
1017
1034
  class FocusDemoController extends BaseOverlay {
1035
+ private tui: TUI;
1018
1036
  private panels: FocusPanel[] = [];
1019
1037
  private handles: OverlayHandle[] = [];
1020
1038
  private focusIndex = -1;
1039
+ private done: () => void;
1021
1040
 
1022
- constructor(
1023
- private tui: TUI,
1024
- theme: Theme,
1025
- private done: () => void,
1026
- ) {
1041
+ constructor(tui: TUI, theme: Theme, done: () => void) {
1027
1042
  super(theme);
1043
+ this.tui = tui;
1044
+ this.done = done;
1028
1045
  const colors = ["error", "success", "accent"] as const;
1029
1046
  const labels = ["Alpha", "Beta", "Gamma"];
1030
1047
 
@@ -1107,16 +1124,22 @@ class FocusDemoController extends BaseOverlay {
1107
1124
  class FocusPanel extends BaseOverlay {
1108
1125
  handle: OverlayHandle | null = null;
1109
1126
  readonly label: string;
1127
+ private color: "error" | "success" | "accent";
1128
+ private onTab: () => void;
1129
+ private onClose: () => void;
1110
1130
 
1111
1131
  constructor(
1112
1132
  theme: Theme,
1113
1133
  label: string,
1114
- private color: "error" | "success" | "accent",
1115
- private onTab: () => void,
1116
- private onClose: () => void,
1134
+ color: "error" | "success" | "accent",
1135
+ onTab: () => void,
1136
+ onClose: () => void,
1117
1137
  ) {
1118
1138
  super(theme);
1119
1139
  this.label = label;
1140
+ this.color = color;
1141
+ this.onTab = onTab;
1142
+ this.onClose = onClose;
1120
1143
  }
1121
1144
 
1122
1145
  handleInput(data: string): void {
@@ -1155,19 +1178,19 @@ class FocusPanel extends BaseOverlay {
1155
1178
  // === Streaming input panel test (/overlay-streaming) ===
1156
1179
 
1157
1180
  class StreamingInputController extends BaseOverlay {
1181
+ private tui: TUI;
1158
1182
  private panels: StreamingInputPanel[] = [];
1159
1183
  private handles: OverlayHandle[] = [];
1160
1184
  private focusIndex = -1; // -1 = controller focused, 0-2 = panel focused
1161
1185
  private streamLines: string[] = [];
1162
1186
  private streamInterval: ReturnType<typeof setInterval> | null = null;
1163
1187
  private lineCount = 0;
1188
+ private done: () => void;
1164
1189
 
1165
- constructor(
1166
- private tui: TUI,
1167
- theme: Theme,
1168
- private done: () => void,
1169
- ) {
1190
+ constructor(tui: TUI, theme: Theme, done: () => void) {
1170
1191
  super(theme);
1192
+ this.tui = tui;
1193
+ this.done = done;
1171
1194
 
1172
1195
  // Create 3 input panels as non-capturing overlays
1173
1196
  const colors = ["error", "success", "accent"] as const;
@@ -1287,17 +1310,25 @@ class StreamingInputController extends BaseOverlay {
1287
1310
 
1288
1311
  class StreamingInputPanel implements Component {
1289
1312
  handle: OverlayHandle | null = null;
1313
+ private theme: Theme;
1290
1314
  private typed = "";
1291
1315
  readonly label: string;
1316
+ private color: "error" | "success" | "accent";
1317
+ private onTab: () => void;
1318
+ private onClose: () => void;
1292
1319
 
1293
1320
  constructor(
1294
- private theme: Theme,
1321
+ theme: Theme,
1295
1322
  label: string,
1296
- private color: "error" | "success" | "accent",
1297
- private onTab: () => void,
1298
- private onClose: () => void,
1323
+ color: "error" | "success" | "accent",
1324
+ onTab: () => void,
1325
+ onClose: () => void,
1299
1326
  ) {
1327
+ this.theme = theme;
1300
1328
  this.label = label;
1329
+ this.color = color;
1330
+ this.onTab = onTab;
1331
+ this.onClose = onClose;
1301
1332
  }
1302
1333
 
1303
1334
  handleInput(data: string): void {
@@ -42,10 +42,13 @@ class OverlayTestComponent implements Focusable {
42
42
  { label: "Cancel", hasInput: false, text: "", cursor: 0 },
43
43
  ];
44
44
 
45
- constructor(
46
- private theme: Theme,
47
- private done: (result: { action: string; query?: string } | undefined) => void,
48
- ) {}
45
+ private theme: Theme;
46
+ private done: (result: { action: string; query?: string } | undefined) => void;
47
+
48
+ constructor(theme: Theme, done: (result: { action: string; query?: string } | undefined) => void) {
49
+ this.theme = theme;
50
+ this.done = done;
51
+ }
49
52
 
50
53
  handleInput(data: string): void {
51
54
  if (matchesKey(data, "escape")) {
@@ -16,7 +16,7 @@ import type { AgentMessage } from "@sheason/pi-agent-core";
16
16
  import type { AssistantMessage, TextContent } from "@sheason/pi-ai";
17
17
  import type { ExtensionAPI, ExtensionContext } from "@sheason/pi-coding-agent";
18
18
  import { Key } from "@sheason/pi-tui";
19
- import { extractTodoItems, isSafeCommand, markCompletedSteps, type TodoItem } from "./utils.js";
19
+ import { extractTodoItems, isSafeCommand, markCompletedSteps, type TodoItem } from "./utils.ts";
20
20
 
21
21
  // Tools
22
22
  const PLAN_MODE_TOOLS = ["read", "bash", "grep", "find", "ls", "questionnaire"];
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-sandbox",
3
- "version": "1.4.1",
3
+ "version": "1.8.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-sandbox",
9
- "version": "1.4.1",
9
+ "version": "1.8.0",
10
10
  "dependencies": {
11
11
  "@anthropic-ai/sandbox-runtime": "^0.0.26"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-sandbox",
3
3
  "private": true,
4
- "version": "1.4.1",
4
+ "version": "1.8.0",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -14,6 +14,6 @@
14
14
  ]
15
15
  },
16
16
  "dependencies": {
17
- "@anthropic-ai/sandbox-runtime": "^0.0.26"
17
+ "@anthropic-ai/sandbox-runtime": "0.0.26"
18
18
  }
19
19
  }
@@ -113,6 +113,8 @@ Use a chain: first have scout find the read tool, then have planner suggest impr
113
113
  - Shows all tasks with live status (⏳ running, ✓ done, ✗ failed)
114
114
  - Updates as each task makes progress
115
115
  - Shows "2/3 done, 1 running" status
116
+ - Returns each completed task's final output to the parent model, capped at 50 KB per task
117
+ - Returns failure diagnostics from stderr/error messages when a child exits before producing output
116
118
 
117
119
  **Tool call formatting** (mimics built-in tools):
118
120
  - `$ command` for bash
@@ -168,5 +170,6 @@ Project agents override user agents with the same name when `agentScope: "both"`
168
170
  ## Limitations
169
171
 
170
172
  - Output truncated to last 10 items in collapsed view (expand to see all)
173
+ - Parallel model-visible output is capped at 50 KB per task; full results remain in tool details
171
174
  - Agents discovered fresh on each invocation (allows editing mid-session)
172
175
  - Parallel mode limited to 8 tasks, 4 concurrent
@@ -22,11 +22,12 @@ import { StringEnum } from "@sheason/pi-ai";
22
22
  import { type ExtensionAPI, getMarkdownTheme, withFileMutationQueue } from "@sheason/pi-coding-agent";
23
23
  import { Container, Markdown, Spacer, Text } from "@sheason/pi-tui";
24
24
  import { Type } from "typebox";
25
- import { type AgentConfig, type AgentScope, discoverAgents } from "./agents.js";
25
+ import { type AgentConfig, type AgentScope, discoverAgents } from "./agents.ts";
26
26
 
27
27
  const MAX_PARALLEL_TASKS = 8;
28
28
  const MAX_CONCURRENCY = 4;
29
29
  const COLLAPSED_ITEM_COUNT = 10;
30
+ const PER_TASK_OUTPUT_CAP = 50 * 1024;
30
31
 
31
32
  function formatTokens(count: number): string {
32
33
  if (count < 1000) return count.toString();
@@ -172,6 +173,28 @@ function getFinalOutput(messages: Message[]): string {
172
173
  return "";
173
174
  }
174
175
 
176
+ function isFailedResult(result: SingleResult): boolean {
177
+ return result.exitCode !== 0 || result.stopReason === "error" || result.stopReason === "aborted";
178
+ }
179
+
180
+ function getResultOutput(result: SingleResult): string {
181
+ if (isFailedResult(result)) {
182
+ return result.errorMessage || result.stderr || getFinalOutput(result.messages) || "(no output)";
183
+ }
184
+ return getFinalOutput(result.messages) || "(no output)";
185
+ }
186
+
187
+ function truncateParallelOutput(output: string): string {
188
+ const byteLength = Buffer.byteLength(output, "utf8");
189
+ if (byteLength <= PER_TASK_OUTPUT_CAP) return output;
190
+
191
+ let truncated = output.slice(0, PER_TASK_OUTPUT_CAP);
192
+ while (Buffer.byteLength(truncated, "utf8") > PER_TASK_OUTPUT_CAP) {
193
+ truncated = truncated.slice(0, -1);
194
+ }
195
+ return `${truncated}\n\n[Output truncated: ${byteLength - Buffer.byteLength(truncated, "utf8")} bytes omitted. Full output preserved in tool details.]`;
196
+ }
197
+
175
198
  type DisplayItem = { type: "text"; text: string } | { type: "toolCall"; name: string; args: Record<string, any> };
176
199
 
177
200
  function getDisplayItems(messages: Message[]): DisplayItem[] {
@@ -534,11 +557,9 @@ export default function (pi: ExtensionAPI) {
534
557
  );
535
558
  results.push(result);
536
559
 
537
- const isError =
538
- result.exitCode !== 0 || result.stopReason === "error" || result.stopReason === "aborted";
560
+ const isError = isFailedResult(result);
539
561
  if (isError) {
540
- const errorMsg =
541
- result.errorMessage || result.stderr || getFinalOutput(result.messages) || "(no output)";
562
+ const errorMsg = getResultOutput(result);
542
563
  return {
543
564
  content: [{ type: "text", text: `Chain stopped at step ${i + 1} (${step.agent}): ${errorMsg}` }],
544
565
  details: makeDetails("chain")(results),
@@ -617,17 +638,19 @@ export default function (pi: ExtensionAPI) {
617
638
  return result;
618
639
  });
619
640
 
620
- const successCount = results.filter((r) => r.exitCode === 0).length;
641
+ const successCount = results.filter((r) => !isFailedResult(r)).length;
621
642
  const summaries = results.map((r) => {
622
- const output = getFinalOutput(r.messages);
623
- const preview = output.slice(0, 100) + (output.length > 100 ? "..." : "");
624
- return `[${r.agent}] ${r.exitCode === 0 ? "completed" : "failed"}: ${preview || "(no output)"}`;
643
+ const output = truncateParallelOutput(getResultOutput(r));
644
+ const status = isFailedResult(r)
645
+ ? `failed${r.stopReason && r.stopReason !== "end" ? ` (${r.stopReason})` : ""}`
646
+ : "completed";
647
+ return `### [${r.agent}] ${status}\n\n${output}`;
625
648
  });
626
649
  return {
627
650
  content: [
628
651
  {
629
652
  type: "text",
630
- text: `Parallel: ${successCount}/${results.length} succeeded\n\n${summaries.join("\n\n")}`,
653
+ text: `Parallel: ${successCount}/${results.length} succeeded\n\n${summaries.join("\n\n---\n\n")}`,
631
654
  },
632
655
  ],
633
656
  details: makeDetails("parallel")(results),
@@ -646,10 +669,9 @@ export default function (pi: ExtensionAPI) {
646
669
  onUpdate,
647
670
  makeDetails("single"),
648
671
  );
649
- const isError = result.exitCode !== 0 || result.stopReason === "error" || result.stopReason === "aborted";
672
+ const isError = isFailedResult(result);
650
673
  if (isError) {
651
- const errorMsg =
652
- result.errorMessage || result.stderr || getFinalOutput(result.messages) || "(no output)";
674
+ const errorMsg = getResultOutput(result);
653
675
  return {
654
676
  content: [{ type: "text", text: `Agent ${result.stopReason || "failed"}: ${errorMsg}` }],
655
677
  details: makeDetails("single")([result]),
@@ -740,7 +762,7 @@ export default function (pi: ExtensionAPI) {
740
762
 
741
763
  if (details.mode === "single" && details.results.length === 1) {
742
764
  const r = details.results[0];
743
- const isError = r.exitCode !== 0 || r.stopReason === "error" || r.stopReason === "aborted";
765
+ const isError = isFailedResult(r);
744
766
  const icon = isError ? theme.fg("error", "✗") : theme.fg("success", "✓");
745
767
  const displayItems = getDisplayItems(r.messages);
746
768
  const finalOutput = getFinalOutput(r.messages);
@@ -893,8 +915,8 @@ export default function (pi: ExtensionAPI) {
893
915
 
894
916
  if (details.mode === "parallel") {
895
917
  const running = details.results.filter((r) => r.exitCode === -1).length;
896
- const successCount = details.results.filter((r) => r.exitCode === 0).length;
897
- const failCount = details.results.filter((r) => r.exitCode > 0).length;
918
+ const successCount = details.results.filter((r) => r.exitCode !== -1 && !isFailedResult(r)).length;
919
+ const failCount = details.results.filter((r) => r.exitCode !== -1 && isFailedResult(r)).length;
898
920
  const isRunning = running > 0;
899
921
  const icon = isRunning
900
922
  ? theme.fg("warning", "⏳")
@@ -916,7 +938,7 @@ export default function (pi: ExtensionAPI) {
916
938
  );
917
939
 
918
940
  for (const r of details.results) {
919
- const rIcon = r.exitCode === 0 ? theme.fg("success", "") : theme.fg("error", "");
941
+ const rIcon = isFailedResult(r) ? theme.fg("error", "") : theme.fg("success", "");
920
942
  const displayItems = getDisplayItems(r.messages);
921
943
  const finalOutput = getFinalOutput(r.messages);
922
944
 
@@ -963,9 +985,9 @@ export default function (pi: ExtensionAPI) {
963
985
  const rIcon =
964
986
  r.exitCode === -1
965
987
  ? theme.fg("warning", "⏳")
966
- : r.exitCode === 0
967
- ? theme.fg("success", "")
968
- : theme.fg("error", "");
988
+ : isFailedResult(r)
989
+ ? theme.fg("error", "")
990
+ : theme.fg("success", "");
969
991
  const displayItems = getDisplayItems(r.messages);
970
992
  text += `\n\n${theme.fg("muted", "─── ")}${theme.fg("accent", r.agent)} ${rIcon}`;
971
993
  if (displayItems.length === 0)
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-with-deps",
3
- "version": "0.74.1",
3
+ "version": "0.78.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-with-deps",
9
- "version": "0.74.1",
9
+ "version": "0.78.0",
10
10
  "dependencies": {
11
11
  "ms": "^2.1.3"
12
12
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-with-deps",
3
3
  "private": true,
4
- "version": "0.74.1",
4
+ "version": "0.78.0",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -14,9 +14,9 @@
14
14
  ]
15
15
  },
16
16
  "dependencies": {
17
- "ms": "^2.1.3"
17
+ "ms": "2.1.3"
18
18
  },
19
19
  "devDependencies": {
20
- "@types/ms": "^2.1.0"
20
+ "@types/ms": "2.1.0"
21
21
  }
22
22
  }