@earendil-works/pi-coding-agent 0.75.3 → 0.75.5

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 (403) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/README.md +6 -4
  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 +1 -1
  6. package/dist/cli/args.d.ts.map +1 -1
  7. package/dist/cli/args.js.map +1 -1
  8. package/dist/cli/config-selector.d.ts +2 -2
  9. package/dist/cli/config-selector.d.ts.map +1 -1
  10. package/dist/cli/config-selector.js.map +1 -1
  11. package/dist/cli/file-processor.d.ts.map +1 -1
  12. package/dist/cli/file-processor.js +2 -3
  13. package/dist/cli/file-processor.js.map +1 -1
  14. package/dist/cli/initial-message.d.ts +1 -1
  15. package/dist/cli/initial-message.d.ts.map +1 -1
  16. package/dist/cli/initial-message.js.map +1 -1
  17. package/dist/cli/list-models.d.ts +1 -1
  18. package/dist/cli/list-models.d.ts.map +1 -1
  19. package/dist/cli/list-models.js.map +1 -1
  20. package/dist/cli/session-picker.d.ts +1 -1
  21. package/dist/cli/session-picker.d.ts.map +1 -1
  22. package/dist/cli/session-picker.js.map +1 -1
  23. package/dist/cli.d.ts.map +1 -1
  24. package/dist/cli.js +4 -10
  25. package/dist/cli.js.map +1 -1
  26. package/dist/config.d.ts.map +1 -1
  27. package/dist/config.js +13 -14
  28. package/dist/config.js.map +1 -1
  29. package/dist/core/agent-session-runtime.d.ts +9 -9
  30. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  31. package/dist/core/agent-session-runtime.js +6 -6
  32. package/dist/core/agent-session-runtime.js.map +1 -1
  33. package/dist/core/agent-session-services.d.ts +7 -7
  34. package/dist/core/agent-session-services.d.ts.map +1 -1
  35. package/dist/core/agent-session-services.js +3 -2
  36. package/dist/core/agent-session-services.js.map +1 -1
  37. package/dist/core/agent-session.d.ts +23 -21
  38. package/dist/core/agent-session.d.ts.map +1 -1
  39. package/dist/core/agent-session.js +99 -137
  40. package/dist/core/agent-session.js.map +1 -1
  41. package/dist/core/auth-guidance.d.ts.map +1 -1
  42. package/dist/core/auth-guidance.js.map +1 -1
  43. package/dist/core/auth-storage.d.ts +1 -1
  44. package/dist/core/auth-storage.d.ts.map +1 -1
  45. package/dist/core/auth-storage.js +3 -2
  46. package/dist/core/auth-storage.js.map +1 -1
  47. package/dist/core/bash-executor.d.ts +1 -1
  48. package/dist/core/bash-executor.d.ts.map +1 -1
  49. package/dist/core/bash-executor.js.map +1 -1
  50. package/dist/core/compaction/branch-summarization.d.ts +3 -3
  51. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  52. package/dist/core/compaction/branch-summarization.js.map +1 -1
  53. package/dist/core/compaction/compaction.d.ts +2 -2
  54. package/dist/core/compaction/compaction.d.ts.map +1 -1
  55. package/dist/core/compaction/compaction.js.map +1 -1
  56. package/dist/core/compaction/index.d.ts +3 -3
  57. package/dist/core/compaction/index.d.ts.map +1 -1
  58. package/dist/core/compaction/index.js.map +1 -1
  59. package/dist/core/exec.d.ts.map +1 -1
  60. package/dist/core/exec.js.map +1 -1
  61. package/dist/core/export-html/index.d.ts +1 -1
  62. package/dist/core/export-html/index.d.ts.map +1 -1
  63. package/dist/core/export-html/index.js +8 -6
  64. package/dist/core/export-html/index.js.map +1 -1
  65. package/dist/core/export-html/template.js +23 -6
  66. package/dist/core/export-html/tool-renderer.d.ts +2 -2
  67. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  68. package/dist/core/export-html/tool-renderer.js.map +1 -1
  69. package/dist/core/extensions/index.d.ts +8 -8
  70. package/dist/core/extensions/index.d.ts.map +1 -1
  71. package/dist/core/extensions/index.js.map +1 -1
  72. package/dist/core/extensions/loader.d.ts +2 -2
  73. package/dist/core/extensions/loader.d.ts.map +1 -1
  74. package/dist/core/extensions/loader.js +12 -29
  75. package/dist/core/extensions/loader.js.map +1 -1
  76. package/dist/core/extensions/runner.d.ts +6 -6
  77. package/dist/core/extensions/runner.d.ts.map +1 -1
  78. package/dist/core/extensions/runner.js.map +1 -1
  79. package/dist/core/extensions/types.d.ts +19 -19
  80. package/dist/core/extensions/types.d.ts.map +1 -1
  81. package/dist/core/extensions/types.js.map +1 -1
  82. package/dist/core/extensions/wrapper.d.ts +2 -2
  83. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  84. package/dist/core/extensions/wrapper.js.map +1 -1
  85. package/dist/core/footer-data-provider.d.ts.map +1 -1
  86. package/dist/core/footer-data-provider.js.map +1 -1
  87. package/dist/core/http-dispatcher.d.ts +21 -0
  88. package/dist/core/http-dispatcher.d.ts.map +1 -0
  89. package/dist/core/http-dispatcher.js +48 -0
  90. package/dist/core/http-dispatcher.js.map +1 -0
  91. package/dist/core/index.d.ts +8 -8
  92. package/dist/core/index.d.ts.map +1 -1
  93. package/dist/core/index.js.map +1 -1
  94. package/dist/core/keybindings.d.ts.map +1 -1
  95. package/dist/core/keybindings.js.map +1 -1
  96. package/dist/core/model-registry.d.ts +4 -4
  97. package/dist/core/model-registry.d.ts.map +1 -1
  98. package/dist/core/model-registry.js +7 -3
  99. package/dist/core/model-registry.js.map +1 -1
  100. package/dist/core/model-resolver.d.ts +1 -1
  101. package/dist/core/model-resolver.d.ts.map +1 -1
  102. package/dist/core/model-resolver.js.map +1 -1
  103. package/dist/core/package-manager.d.ts +2 -1
  104. package/dist/core/package-manager.d.ts.map +1 -1
  105. package/dist/core/package-manager.js +48 -32
  106. package/dist/core/package-manager.js.map +1 -1
  107. package/dist/core/prompt-templates.d.ts +1 -1
  108. package/dist/core/prompt-templates.d.ts.map +1 -1
  109. package/dist/core/prompt-templates.js +6 -20
  110. package/dist/core/prompt-templates.js.map +1 -1
  111. package/dist/core/resolve-config-value.d.ts.map +1 -1
  112. package/dist/core/resolve-config-value.js.map +1 -1
  113. package/dist/core/resource-loader.d.ts +9 -9
  114. package/dist/core/resource-loader.d.ts.map +1 -1
  115. package/dist/core/resource-loader.js +38 -31
  116. package/dist/core/resource-loader.js.map +1 -1
  117. package/dist/core/sdk.d.ts +13 -13
  118. package/dist/core/sdk.d.ts.map +1 -1
  119. package/dist/core/sdk.js +9 -4
  120. package/dist/core/sdk.js.map +1 -1
  121. package/dist/core/session-manager.d.ts +1 -1
  122. package/dist/core/session-manager.d.ts.map +1 -1
  123. package/dist/core/session-manager.js +32 -24
  124. package/dist/core/session-manager.js.map +1 -1
  125. package/dist/core/settings-manager.d.ts +3 -0
  126. package/dist/core/settings-manager.d.ts.map +1 -1
  127. package/dist/core/settings-manager.js +26 -13
  128. package/dist/core/settings-manager.js.map +1 -1
  129. package/dist/core/skills.d.ts +2 -2
  130. package/dist/core/skills.d.ts.map +1 -1
  131. package/dist/core/skills.js +8 -22
  132. package/dist/core/skills.js.map +1 -1
  133. package/dist/core/slash-commands.d.ts +1 -1
  134. package/dist/core/slash-commands.d.ts.map +1 -1
  135. package/dist/core/slash-commands.js.map +1 -1
  136. package/dist/core/source-info.d.ts +1 -1
  137. package/dist/core/source-info.d.ts.map +1 -1
  138. package/dist/core/source-info.js.map +1 -1
  139. package/dist/core/system-prompt.d.ts +1 -1
  140. package/dist/core/system-prompt.d.ts.map +1 -1
  141. package/dist/core/system-prompt.js +4 -2
  142. package/dist/core/system-prompt.js.map +1 -1
  143. package/dist/core/telemetry.d.ts +1 -1
  144. package/dist/core/telemetry.d.ts.map +1 -1
  145. package/dist/core/telemetry.js.map +1 -1
  146. package/dist/core/tools/bash.d.ts +2 -2
  147. package/dist/core/tools/bash.d.ts.map +1 -1
  148. package/dist/core/tools/bash.js +54 -52
  149. package/dist/core/tools/bash.js.map +1 -1
  150. package/dist/core/tools/edit-diff.d.ts +3 -1
  151. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  152. package/dist/core/tools/edit-diff.js +8 -1
  153. package/dist/core/tools/edit-diff.js.map +1 -1
  154. package/dist/core/tools/edit.d.ts +5 -3
  155. package/dist/core/tools/edit.d.ts.map +1 -1
  156. package/dist/core/tools/edit.js +44 -81
  157. package/dist/core/tools/edit.js.map +1 -1
  158. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  159. package/dist/core/tools/file-mutation-queue.js +27 -12
  160. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  161. package/dist/core/tools/find.d.ts +2 -2
  162. package/dist/core/tools/find.d.ts.map +1 -1
  163. package/dist/core/tools/find.js +2 -3
  164. package/dist/core/tools/find.js.map +1 -1
  165. package/dist/core/tools/grep.d.ts +2 -2
  166. package/dist/core/tools/grep.d.ts.map +1 -1
  167. package/dist/core/tools/grep.js +3 -3
  168. package/dist/core/tools/grep.js.map +1 -1
  169. package/dist/core/tools/index.d.ts +17 -17
  170. package/dist/core/tools/index.d.ts.map +1 -1
  171. package/dist/core/tools/index.js.map +1 -1
  172. package/dist/core/tools/ls.d.ts +2 -2
  173. package/dist/core/tools/ls.d.ts.map +1 -1
  174. package/dist/core/tools/ls.js +5 -5
  175. package/dist/core/tools/ls.js.map +1 -1
  176. package/dist/core/tools/output-accumulator.d.ts +3 -1
  177. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  178. package/dist/core/tools/output-accumulator.js +9 -3
  179. package/dist/core/tools/output-accumulator.js.map +1 -1
  180. package/dist/core/tools/path-utils.d.ts +2 -0
  181. package/dist/core/tools/path-utils.d.ts.map +1 -1
  182. package/dist/core/tools/path-utils.js +39 -21
  183. package/dist/core/tools/path-utils.js.map +1 -1
  184. package/dist/core/tools/read.d.ts +2 -2
  185. package/dist/core/tools/read.d.ts.map +1 -1
  186. package/dist/core/tools/read.js +9 -8
  187. package/dist/core/tools/read.js.map +1 -1
  188. package/dist/core/tools/render-utils.d.ts.map +1 -1
  189. package/dist/core/tools/render-utils.js.map +1 -1
  190. package/dist/core/tools/tool-definition-wrapper.d.ts +1 -1
  191. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  192. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  193. package/dist/core/tools/truncate.d.ts.map +1 -1
  194. package/dist/core/tools/truncate.js +12 -2
  195. package/dist/core/tools/truncate.js.map +1 -1
  196. package/dist/core/tools/write.d.ts +1 -1
  197. package/dist/core/tools/write.d.ts.map +1 -1
  198. package/dist/core/tools/write.js +20 -35
  199. package/dist/core/tools/write.js.map +1 -1
  200. package/dist/index.d.ts +28 -27
  201. package/dist/index.d.ts.map +1 -1
  202. package/dist/index.js +1 -0
  203. package/dist/index.js.map +1 -1
  204. package/dist/main.d.ts +1 -1
  205. package/dist/main.d.ts.map +1 -1
  206. package/dist/main.js +7 -6
  207. package/dist/main.js.map +1 -1
  208. package/dist/migrations.d.ts.map +1 -1
  209. package/dist/migrations.js.map +1 -1
  210. package/dist/modes/index.d.ts +5 -5
  211. package/dist/modes/index.d.ts.map +1 -1
  212. package/dist/modes/index.js.map +1 -1
  213. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  214. package/dist/modes/interactive/components/armin.js.map +1 -1
  215. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  216. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  217. package/dist/modes/interactive/components/bash-execution.d.ts +1 -1
  218. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  219. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  220. package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
  221. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  222. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  223. package/dist/modes/interactive/components/branch-summary-message.d.ts +1 -1
  224. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  225. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  226. package/dist/modes/interactive/components/compaction-summary-message.d.ts +1 -1
  227. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  228. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  229. package/dist/modes/interactive/components/config-selector.d.ts +2 -2
  230. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  231. package/dist/modes/interactive/components/config-selector.js +1 -1
  232. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  233. package/dist/modes/interactive/components/countdown-timer.d.ts +2 -2
  234. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  235. package/dist/modes/interactive/components/countdown-timer.js +2 -2
  236. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  237. package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
  238. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  239. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  240. package/dist/modes/interactive/components/custom-message.d.ts +2 -2
  241. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  242. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  243. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  244. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  245. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  246. package/dist/modes/interactive/components/diff.js.map +1 -1
  247. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  248. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  249. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  250. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  251. package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
  252. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  253. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  254. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  255. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  256. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  257. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  258. package/dist/modes/interactive/components/footer.d.ts +4 -3
  259. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  260. package/dist/modes/interactive/components/footer.js +16 -7
  261. package/dist/modes/interactive/components/footer.js.map +1 -1
  262. package/dist/modes/interactive/components/index.d.ts +31 -31
  263. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  264. package/dist/modes/interactive/components/index.js.map +1 -1
  265. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  266. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  267. package/dist/modes/interactive/components/login-dialog.d.ts +10 -2
  268. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  269. package/dist/modes/interactive/components/login-dialog.js +31 -6
  270. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  271. package/dist/modes/interactive/components/model-selector.d.ts +2 -2
  272. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  273. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  274. package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
  275. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  276. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  277. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  278. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  279. package/dist/modes/interactive/components/session-selector-search.d.ts +1 -1
  280. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  281. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  282. package/dist/modes/interactive/components/session-selector.d.ts +3 -3
  283. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  284. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  285. package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
  286. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  287. package/dist/modes/interactive/components/settings-selector.js +15 -0
  288. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  289. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  290. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  291. package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
  292. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  293. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  294. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  295. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  296. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  297. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  298. package/dist/modes/interactive/components/tool-execution.d.ts +1 -1
  299. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  300. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  301. package/dist/modes/interactive/components/tree-selector.d.ts +1 -1
  302. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  303. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  304. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  305. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  306. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  307. package/dist/modes/interactive/components/user-message.js.map +1 -1
  308. package/dist/modes/interactive/interactive-mode.d.ts +4 -3
  309. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  310. package/dist/modes/interactive/interactive-mode.js +37 -14
  311. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  312. package/dist/modes/interactive/theme/dark.json +5 -4
  313. package/dist/modes/interactive/theme/light.json +5 -4
  314. package/dist/modes/interactive/theme/theme.d.ts +22 -3
  315. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  316. package/dist/modes/interactive/theme/theme.js +119 -68
  317. package/dist/modes/interactive/theme/theme.js.map +1 -1
  318. package/dist/modes/print-mode.d.ts +1 -1
  319. package/dist/modes/print-mode.d.ts.map +1 -1
  320. package/dist/modes/print-mode.js.map +1 -1
  321. package/dist/modes/rpc/rpc-client.d.ts +5 -5
  322. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  323. package/dist/modes/rpc/rpc-client.js +1 -1
  324. package/dist/modes/rpc/rpc-client.js.map +1 -1
  325. package/dist/modes/rpc/rpc-mode.d.ts +2 -2
  326. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  327. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  328. package/dist/modes/rpc/rpc-types.d.ts +4 -4
  329. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  330. package/dist/modes/rpc/rpc-types.js.map +1 -1
  331. package/dist/package-manager-cli.d.ts.map +1 -1
  332. package/dist/package-manager-cli.js +40 -1
  333. package/dist/package-manager-cli.js.map +1 -1
  334. package/dist/utils/changelog.d.ts +1 -1
  335. package/dist/utils/changelog.d.ts.map +1 -1
  336. package/dist/utils/changelog.js.map +1 -1
  337. package/dist/utils/clipboard-image.d.ts.map +1 -1
  338. package/dist/utils/clipboard-image.js.map +1 -1
  339. package/dist/utils/clipboard-native.d.ts +3 -1
  340. package/dist/utils/clipboard-native.d.ts.map +1 -1
  341. package/dist/utils/clipboard-native.js +14 -8
  342. package/dist/utils/clipboard-native.js.map +1 -1
  343. package/dist/utils/clipboard.d.ts.map +1 -1
  344. package/dist/utils/clipboard.js.map +1 -1
  345. package/dist/utils/exif-orientation.d.ts +1 -1
  346. package/dist/utils/exif-orientation.d.ts.map +1 -1
  347. package/dist/utils/exif-orientation.js.map +1 -1
  348. package/dist/utils/image-convert.d.ts.map +1 -1
  349. package/dist/utils/image-convert.js.map +1 -1
  350. package/dist/utils/image-resize-core.d.ts +30 -0
  351. package/dist/utils/image-resize-core.d.ts.map +1 -0
  352. package/dist/utils/image-resize-core.js +124 -0
  353. package/dist/utils/image-resize-core.js.map +1 -0
  354. package/dist/utils/image-resize-worker.d.ts +2 -0
  355. package/dist/utils/image-resize-worker.d.ts.map +1 -0
  356. package/dist/utils/image-resize-worker.js +31 -0
  357. package/dist/utils/image-resize-worker.js.map +1 -0
  358. package/dist/utils/image-resize.d.ts +7 -27
  359. package/dist/utils/image-resize.d.ts.map +1 -1
  360. package/dist/utils/image-resize.js +75 -115
  361. package/dist/utils/image-resize.js.map +1 -1
  362. package/dist/utils/paths.d.ts +16 -1
  363. package/dist/utils/paths.d.ts.map +1 -1
  364. package/dist/utils/paths.js +49 -7
  365. package/dist/utils/paths.js.map +1 -1
  366. package/dist/utils/shell.d.ts.map +1 -1
  367. package/dist/utils/shell.js +6 -1
  368. package/dist/utils/shell.js.map +1 -1
  369. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  370. package/dist/utils/syntax-highlight.js.map +1 -1
  371. package/dist/utils/tools-manager.d.ts.map +1 -1
  372. package/dist/utils/tools-manager.js.map +1 -1
  373. package/dist/utils/version-check.d.ts +2 -1
  374. package/dist/utils/version-check.d.ts.map +1 -1
  375. package/dist/utils/version-check.js +9 -4
  376. package/dist/utils/version-check.js.map +1 -1
  377. package/dist/utils/windows-self-update.d.ts.map +1 -1
  378. package/dist/utils/windows-self-update.js.map +1 -1
  379. package/docs/custom-provider.md +44 -12
  380. package/docs/index.md +13 -3
  381. package/docs/models.md +8 -2
  382. package/docs/packages.md +7 -4
  383. package/docs/quickstart.md +23 -1
  384. package/docs/sdk.md +2 -0
  385. package/docs/termux.md +1 -1
  386. package/docs/usage.md +4 -2
  387. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  388. package/examples/extensions/custom-provider-anthropic/package.json +2 -2
  389. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  390. package/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
  391. package/examples/extensions/doom-overlay/doom-component.ts +2 -2
  392. package/examples/extensions/doom-overlay/index.ts +3 -3
  393. package/examples/extensions/overlay-qa-tests.ts +97 -66
  394. package/examples/extensions/overlay-test.ts +7 -4
  395. package/examples/extensions/plan-mode/index.ts +1 -1
  396. package/examples/extensions/sandbox/package-lock.json +2 -2
  397. package/examples/extensions/sandbox/package.json +2 -2
  398. package/examples/extensions/subagent/README.md +3 -0
  399. package/examples/extensions/subagent/index.ts +42 -20
  400. package/examples/extensions/with-deps/package-lock.json +2 -2
  401. package/examples/extensions/with-deps/package.json +3 -3
  402. package/npm-shrinkwrap.json +1790 -0
  403. package/package.json +33 -32
package/docs/models.md CHANGED
@@ -315,10 +315,12 @@ Behavior notes:
315
315
 
316
316
  ## Anthropic Messages Compatibility
317
317
 
318
- For providers or proxies using `api: "anthropic-messages"`, use `compat.supportsEagerToolInputStreaming` to control Anthropic fine-grained tool streaming compatibility.
318
+ For providers or proxies using `api: "anthropic-messages"`, use `compat` to control Anthropic-specific request compatibility.
319
319
 
320
320
  By default pi sends per-tool `eager_input_streaming: true`. If a proxy or Anthropic-compatible backend rejects that field, set `supportsEagerToolInputStreaming` to `false`. Pi will omit `tools[].eager_input_streaming` and send the legacy `fine-grained-tool-streaming-2025-05-14` beta header for tool-enabled requests instead.
321
321
 
322
+ Some Anthropic models require adaptive thinking (`thinking.type: "adaptive"` plus `output_config.effort`) instead of the legacy budget-based thinking payload. Built-in models set this automatically. For custom providers or aliases that route to those models, set `forceAdaptiveThinking` to `true`.
323
+
322
324
  ```json
323
325
  {
324
326
  "providers": {
@@ -328,7 +330,8 @@ By default pi sends per-tool `eager_input_streaming: true`. If a proxy or Anthro
328
330
  "apiKey": "ANTHROPIC_PROXY_KEY",
329
331
  "compat": {
330
332
  "supportsEagerToolInputStreaming": false,
331
- "supportsLongCacheRetention": true
333
+ "supportsLongCacheRetention": true,
334
+ "forceAdaptiveThinking": true
332
335
  },
333
336
  "models": [
334
337
  {
@@ -346,6 +349,9 @@ By default pi sends per-tool `eager_input_streaming: true`. If a proxy or Anthro
346
349
  |-------|-------------|
347
350
  | `supportsEagerToolInputStreaming` | Whether the provider accepts per-tool `eager_input_streaming`. Default: `true`. Set to `false` to omit that field and use the legacy fine-grained tool streaming beta header on tool-enabled requests. |
348
351
  | `supportsLongCacheRetention` | Whether the provider accepts Anthropic long cache retention (`cache_control.ttl: "1h"`) when cache retention is `long`. Default: `true`. |
352
+ | `sendSessionAffinityHeaders` | Whether to send `x-session-affinity` from the session id when caching is enabled. Default: auto-detected for known providers. |
353
+ | `supportsCacheControlOnTools` | Whether the provider accepts Anthropic-style `cache_control` markers on tool definitions. Default: `true`. |
354
+ | `forceAdaptiveThinking` | Whether to send adaptive thinking (`thinking.type: "adaptive"` plus `output_config.effort`) for this model. Built-in adaptive models set this automatically. Default: `false`. |
349
355
 
350
356
  ## OpenAI Compatibility
351
357
 
package/docs/packages.md CHANGED
@@ -28,14 +28,16 @@ pi install ./relative/path/to/package
28
28
 
29
29
  pi remove npm:@foo/bar
30
30
  pi list # show installed packages from settings
31
- pi update # update pi and all non-pinned packages
32
- pi update --extensions # update all non-pinned packages only
31
+ pi update # update pi, update packages, and reconcile pinned git refs
32
+ pi update --extensions # update packages and reconcile pinned git refs only
33
33
  pi update --self # update pi only
34
34
  pi update --self --force # reinstall pi even if current
35
35
  pi update npm:@foo/bar # update one package
36
36
  pi update --extension npm:@foo/bar
37
37
  ```
38
38
 
39
+ These commands manage pi packages, not the pi CLI installation. To uninstall pi itself, see [Quickstart](quickstart.md#uninstall).
40
+
39
41
  By default, `install` and `remove` write to user settings (`~/.pi/agent/settings.json`). Use `-l` to write to project settings (`.pi/settings.json`) instead. Project settings can be shared with your team, and pi installs any missing packages automatically on startup.
40
42
 
41
43
  To try a package without installing it, use `--extension` or `-e`. This installs to a temporary directory for the current run only:
@@ -83,9 +85,10 @@ ssh://git@github.com/user/repo@v1
83
85
  - HTTPS and SSH URLs are both supported.
84
86
  - SSH URLs use your configured SSH keys automatically (respects `~/.ssh/config`).
85
87
  - For non-interactive runs (for example CI), you can set `GIT_TERMINAL_PROMPT=0` to disable credential prompts and set `GIT_SSH_COMMAND` (for example `ssh -o BatchMode=yes -o ConnectTimeout=5`) to fail fast.
86
- - Refs pin the package and skip package updates (`pi update`, `pi update --extensions`).
88
+ - Refs are pinned tags or commits. `pi update` and `pi update --extensions` do not move them to newer refs, but they do reconcile an existing clone to the configured ref.
89
+ - Use `pi install git:host/user/repo@new-ref` to update settings and move an existing package to a new pinned ref.
87
90
  - Cloned to `~/.pi/agent/git/<host>/<path>` (global) or `.pi/git/<host>/<path>` (project).
88
- - Runs `npm install` after clone or pull if `package.json` exists.
91
+ - When reconciliation changes the checkout, pi resets and cleans the clone, then runs `npm install` if `package.json` exists.
89
92
 
90
93
  **SSH examples:**
91
94
  ```bash
@@ -7,9 +7,31 @@ This page gets you from install to a useful first pi session.
7
7
  Pi is distributed as an npm package:
8
8
 
9
9
  ```bash
10
- npm install -g @earendil-works/pi-coding-agent
10
+ npm install -g --ignore-scripts @earendil-works/pi-coding-agent
11
11
  ```
12
12
 
13
+ `--ignore-scripts` disables dependency lifecycle scripts during install. Pi does not require install scripts for normal npm installs.
14
+
15
+ ### Uninstall
16
+
17
+ Use the package manager that installed pi. The curl installer uses npm globally, so curl and npm installs are removed with npm:
18
+
19
+ ```bash
20
+ # curl installer or npm install -g
21
+ npm uninstall -g @earendil-works/pi-coding-agent
22
+
23
+ # pnpm
24
+ pnpm remove -g @earendil-works/pi-coding-agent
25
+
26
+ # Yarn
27
+ yarn global remove @earendil-works/pi-coding-agent
28
+
29
+ # Bun
30
+ bun uninstall -g @earendil-works/pi-coding-agent
31
+ ```
32
+
33
+ Uninstalling pi leaves settings, credentials, sessions, and installed pi packages in `~/.pi/agent/`.
34
+
13
35
  Then start pi in the project directory you want it to work on:
14
36
 
15
37
  ```bash
package/docs/sdk.md CHANGED
@@ -473,6 +473,8 @@ Specify which built-in tools to enable:
473
473
  - `noTools: "all"` disables all tools
474
474
  - `noTools: "builtin"` disables default built-ins while keeping extension and custom tools enabled
475
475
 
476
+ The `edit` tool returns `details.diff` for Pi's TUI display and `details.patch` as a standard unified patch for SDK consumers.
477
+
476
478
  ```typescript
477
479
  import { createAgentSession } from "@earendil-works/pi-coding-agent";
478
480
 
package/docs/termux.md CHANGED
@@ -17,7 +17,7 @@ pkg update && pkg upgrade
17
17
  pkg install nodejs termux-api git
18
18
 
19
19
  # Install pi
20
- npm install -g @earendil-works/pi-coding-agent
20
+ npm install -g --ignore-scripts @earendil-works/pi-coding-agent
21
21
 
22
22
  # Create config directory
23
23
  mkdir -p ~/.pi/agent
package/docs/usage.md CHANGED
@@ -129,14 +129,16 @@ pi [options] [@files...] [messages...]
129
129
  pi install <source> [-l] # Install package, -l for project-local
130
130
  pi remove <source> [-l] # Remove package
131
131
  pi uninstall <source> [-l] # Alias for remove
132
- pi update [source|self|pi] # Update pi and packages; skips pinned packages
133
- pi update --extensions # Update packages only
132
+ pi update [source|self|pi] # Update pi and packages; reconcile pinned git refs
133
+ pi update --extensions # Update packages only; reconcile pinned git refs
134
134
  pi update --self # Update pi only
135
135
  pi update --extension <src> # Update one package
136
136
  pi list # List installed packages
137
137
  pi config # Enable/disable package resources
138
138
  ```
139
139
 
140
+ These commands manage pi packages, not the pi CLI installation. To uninstall pi itself, see [Quickstart](quickstart.md#uninstall).
141
+
140
142
  See [Pi Packages](packages.md) for package sources and security notes.
141
143
 
142
144
  ### Modes
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider",
3
- "version": "0.75.3",
3
+ "version": "0.75.5",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-custom-provider",
9
- "version": "0.75.3",
9
+ "version": "0.75.5",
10
10
  "dependencies": {
11
11
  "@anthropic-ai/sdk": "^0.52.0"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider-anthropic",
3
3
  "private": true,
4
- "version": "0.75.3",
4
+ "version": "0.75.5",
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/sdk": "^0.52.0"
17
+ "@anthropic-ai/sdk": "0.52.0"
18
18
  }
19
19
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider-gitlab-duo",
3
3
  "private": true,
4
- "version": "0.75.3",
4
+ "version": "0.75.5",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -12,7 +12,7 @@ import { type Api, type Context, type Model, registerApiProvider, streamSimple }
12
12
  import { readFileSync } from "fs";
13
13
  import { getAgentDir } from "packages/coding-agent/src/config.js";
14
14
  import { join } from "path";
15
- import { MODELS, streamGitLabDuo } from "./index.js";
15
+ import { MODELS, streamGitLabDuo } from "./index.ts";
16
16
 
17
17
  const MODEL_MAP = new Map(MODELS.map((m) => [m.id, m]));
18
18
 
@@ -7,8 +7,8 @@
7
7
 
8
8
  import type { Component } from "@earendil-works/pi-tui";
9
9
  import { isKeyRelease, type TUI } from "@earendil-works/pi-tui";
10
- import type { DoomEngine } from "./doom-engine.js";
11
- import { DoomKeys, mapKeyToDoom } from "./doom-keys.js";
10
+ import type { DoomEngine } from "./doom-engine.ts";
11
+ import { DoomKeys, mapKeyToDoom } from "./doom-keys.ts";
12
12
 
13
13
  function renderHalfBlock(
14
14
  rgba: Uint8Array,
@@ -10,9 +10,9 @@
10
10
  */
11
11
 
12
12
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
13
- import { DoomOverlayComponent } from "./doom-component.js";
14
- import { DoomEngine } from "./doom-engine.js";
15
- import { ensureWadFile } from "./wad-finder.js";
13
+ import { DoomOverlayComponent } from "./doom-component.ts";
14
+ import { DoomEngine } from "./doom-engine.ts";
15
+ import { ensureWadFile } from "./wad-finder.ts";
16
16
 
17
17
  // Persistent engine instance - survives between invocations
18
18
  let activeEngine: DoomEngine | null = null;
@@ -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 "@earendil-works/pi-agent-core";
16
16
  import type { AssistantMessage, TextContent } from "@earendil-works/pi-ai";
17
17
  import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
18
18
  import { Key } from "@earendil-works/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.5.3",
3
+ "version": "1.5.5",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-sandbox",
9
- "version": "1.5.3",
9
+ "version": "1.5.5",
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.5.3",
4
+ "version": "1.5.5",
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