@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
@@ -13,10 +13,11 @@
13
13
  * Modes use this class and add their own I/O layer on top.
14
14
  */
15
15
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
16
- import { basename, dirname, resolve } from "node:path";
16
+ import { basename, dirname } from "node:path";
17
17
  import { clampThinkingLevel, cleanupSessionResources, getSupportedThinkingLevels, isContextOverflow, modelsAreEqual, resetApiProviders, streamSimple, } from "@earendil-works/pi-ai";
18
18
  import { theme } from "../modes/interactive/theme/theme.js";
19
19
  import { stripFrontmatter } from "../utils/frontmatter.js";
20
+ import { resolvePath } from "../utils/paths.js";
20
21
  import { sleep } from "../utils/sleep.js";
21
22
  import { formatNoApiKeyFoundMessage, formatNoModelSelectedMessage } from "./auth-guidance.js";
22
23
  import { executeBashWithOperations } from "./bash-executor.js";
@@ -64,7 +65,6 @@ export class AgentSession {
64
65
  // Event subscription state
65
66
  _unsubscribeAgent;
66
67
  _eventListeners = [];
67
- _agentEventQueue = Promise.resolve();
68
68
  /** Tracks pending steering messages for UI display. Removed when delivered. */
69
69
  _steeringMessages = [];
70
70
  /** Tracks pending follow-up messages for UI display. Removed when delivered. */
@@ -80,8 +80,6 @@ export class AgentSession {
80
80
  // Retry state
81
81
  _retryAbortController = undefined;
82
82
  _retryAttempt = 0;
83
- _retryPromise = undefined;
84
- _retryResolve = undefined;
85
83
  // Bash execution state
86
84
  _bashAbortController = undefined;
87
85
  _pendingBashMessages = [];
@@ -99,6 +97,7 @@ export class AgentSession {
99
97
  _sessionStartEvent;
100
98
  _extensionUIContext;
101
99
  _extensionCommandContextActions;
100
+ _extensionAbortHandler;
102
101
  _extensionShutdownHandler;
103
102
  _extensionErrorListener;
104
103
  _extensionErrorUnsubscriber;
@@ -179,7 +178,6 @@ export class AgentSession {
179
178
  if (!runner.hasHandlers("tool_call")) {
180
179
  return undefined;
181
180
  }
182
- await this._agentEventQueue;
183
181
  try {
184
182
  return await runner.emitToolCall({
185
183
  type: "tool_call",
@@ -238,43 +236,7 @@ export class AgentSession {
238
236
  // Track last assistant message for auto-compaction check
239
237
  _lastAssistantMessage = undefined;
240
238
  /** Internal handler for agent events - shared by subscribe and reconnect */
241
- _handleAgentEvent = (event) => {
242
- // Create retry promise synchronously before queueing async processing.
243
- // Agent.emit() calls this handler synchronously, and prompt() calls waitForRetry()
244
- // as soon as agent.prompt() resolves. If _retryPromise is created only inside
245
- // _processAgentEvent, slow earlier queued events can delay agent_end processing
246
- // and waitForRetry() can miss the in-flight retry.
247
- this._createRetryPromiseForAgentEnd(event);
248
- this._agentEventQueue = this._agentEventQueue.then(() => this._processAgentEvent(event), () => this._processAgentEvent(event));
249
- // Keep queue alive if an event handler fails
250
- this._agentEventQueue.catch(() => { });
251
- };
252
- _createRetryPromiseForAgentEnd(event) {
253
- if (event.type !== "agent_end" || this._retryPromise) {
254
- return;
255
- }
256
- const settings = this.settingsManager.getRetrySettings();
257
- if (!settings.enabled) {
258
- return;
259
- }
260
- const lastAssistant = this._findLastAssistantInMessages(event.messages);
261
- if (!lastAssistant || !this._isRetryableError(lastAssistant)) {
262
- return;
263
- }
264
- this._retryPromise = new Promise((resolve) => {
265
- this._retryResolve = resolve;
266
- });
267
- }
268
- _findLastAssistantInMessages(messages) {
269
- for (let i = messages.length - 1; i >= 0; i--) {
270
- const message = messages[i];
271
- if (message.role === "assistant") {
272
- return message;
273
- }
274
- }
275
- return undefined;
276
- }
277
- async _processAgentEvent(event) {
239
+ _handleAgentEvent = async (event) => {
278
240
  // When a user message starts, check if it's from either queue and remove it BEFORE emitting
279
241
  // This ensures the UI sees the updated queue state
280
242
  if (event.type === "message_start" && event.message.role === "user") {
@@ -300,7 +262,7 @@ export class AgentSession {
300
262
  // Emit to extensions first
301
263
  await this._emitExtensionEvent(event);
302
264
  // Notify all listeners
303
- this._emit(event);
265
+ this._emit(event.type === "agent_end" ? { ...event, willRetry: this._willRetryAfterAgentEnd(event) } : event);
304
266
  // Handle session persistence
305
267
  if (event.type === "message_end") {
306
268
  // Check if this is a custom message from extensions
@@ -334,27 +296,19 @@ export class AgentSession {
334
296
  }
335
297
  }
336
298
  }
337
- // Check auto-retry and auto-compaction after agent completes
338
- if (event.type === "agent_end" && this._lastAssistantMessage) {
339
- const msg = this._lastAssistantMessage;
340
- this._lastAssistantMessage = undefined;
341
- // Check for retryable errors first (overloaded, rate limit, server errors)
342
- if (this._isRetryableError(msg)) {
343
- const didRetry = await this._handleRetryableError(msg);
344
- if (didRetry)
345
- return; // Retry was initiated, don't proceed to compaction
346
- }
347
- this._resolveRetry();
348
- await this._checkCompaction(msg);
299
+ };
300
+ _willRetryAfterAgentEnd(event) {
301
+ const settings = this.settingsManager.getRetrySettings();
302
+ if (!settings.enabled || this._retryAttempt >= settings.maxRetries) {
303
+ return false;
349
304
  }
350
- }
351
- /** Resolve the pending retry promise */
352
- _resolveRetry() {
353
- if (this._retryResolve) {
354
- this._retryResolve();
355
- this._retryResolve = undefined;
356
- this._retryPromise = undefined;
305
+ for (let i = event.messages.length - 1; i >= 0; i--) {
306
+ const message = event.messages[i];
307
+ if (message.role === "assistant") {
308
+ return this._isRetryableError(message);
309
+ }
357
310
  }
311
+ return false;
358
312
  }
359
313
  /** Extract text content from a message */
360
314
  _getUserMessageText(message) {
@@ -379,7 +333,7 @@ export class AgentSession {
379
333
  }
380
334
  _replaceMessageInPlace(target, replacement) {
381
335
  // Agent-core stores the finalized message object in its state before emitting message_end.
382
- // SessionManager persistence happens later in _processAgentEvent() with event.message.
336
+ // SessionManager persistence happens later in _handleAgentEvent() with event.message.
383
337
  // Mutating this object in place keeps agent state, later turn/agent events, listeners,
384
338
  // and the eventual SessionManager.appendMessage(event.message) persistence in sync.
385
339
  if (target === replacement) {
@@ -685,6 +639,37 @@ export class AgentSession {
685
639
  // =========================================================================
686
640
  // Prompting
687
641
  // =========================================================================
642
+ async _runAgentPrompt(messages) {
643
+ try {
644
+ await this.agent.prompt(messages);
645
+ while (await this._handlePostAgentRun()) {
646
+ await this.agent.continue();
647
+ }
648
+ }
649
+ finally {
650
+ this._flushPendingBashMessages();
651
+ }
652
+ }
653
+ async _handlePostAgentRun() {
654
+ const msg = this._lastAssistantMessage;
655
+ this._lastAssistantMessage = undefined;
656
+ if (!msg) {
657
+ return false;
658
+ }
659
+ if (this._isRetryableError(msg) && (await this._prepareRetry(msg))) {
660
+ return true;
661
+ }
662
+ if (msg.stopReason === "error" && this._retryAttempt > 0) {
663
+ this._emit({
664
+ type: "auto_retry_end",
665
+ success: false,
666
+ attempt: this._retryAttempt,
667
+ finalError: msg.errorMessage,
668
+ });
669
+ this._retryAttempt = 0;
670
+ }
671
+ return await this._checkCompaction(msg);
672
+ }
688
673
  /**
689
674
  * Send a prompt to the agent.
690
675
  * - Handles extension commands (registered via pi.registerCommand) immediately, even during streaming
@@ -760,8 +745,16 @@ export class AgentSession {
760
745
  }
761
746
  // Check if we need to compact before sending (catches aborted responses)
762
747
  const lastAssistant = this._findLastAssistantMessage();
763
- if (lastAssistant) {
764
- await this._checkCompaction(lastAssistant, false);
748
+ if (lastAssistant && (await this._checkCompaction(lastAssistant, false))) {
749
+ try {
750
+ await this.agent.continue();
751
+ while (await this._handlePostAgentRun()) {
752
+ await this.agent.continue();
753
+ }
754
+ }
755
+ finally {
756
+ this._flushPendingBashMessages();
757
+ }
765
758
  }
766
759
  // Build messages array (custom message if any, then user message)
767
760
  messages = [];
@@ -812,8 +805,7 @@ export class AgentSession {
812
805
  return;
813
806
  }
814
807
  preflightResult?.(true);
815
- await this.agent.prompt(messages);
816
- await this.waitForRetry();
808
+ await this._runAgentPrompt(messages);
817
809
  }
818
810
  /**
819
811
  * Try to execute an extension command. Returns true if command was found and executed.
@@ -983,7 +975,7 @@ export class AgentSession {
983
975
  }
984
976
  }
985
977
  else if (options?.triggerTurn) {
986
- await this.agent.prompt(appMessage);
978
+ await this._runAgentPrompt(appMessage);
987
979
  }
988
980
  else {
989
981
  this.agent.state.messages.push(appMessage);
@@ -1383,10 +1375,10 @@ export class AgentSession {
1383
1375
  async _checkCompaction(assistantMessage, skipAbortedCheck = true) {
1384
1376
  const settings = this.settingsManager.getCompactionSettings();
1385
1377
  if (!settings.enabled)
1386
- return;
1378
+ return false;
1387
1379
  // Skip if message was aborted (user cancelled) - unless skipAbortedCheck is false
1388
1380
  if (skipAbortedCheck && assistantMessage.stopReason === "aborted")
1389
- return;
1381
+ return false;
1390
1382
  const contextWindow = this.model?.contextWindow ?? 0;
1391
1383
  // Skip overflow check if the message came from a different model.
1392
1384
  // This handles the case where user switched from a smaller-context model (e.g. opus)
@@ -1399,7 +1391,7 @@ export class AgentSession {
1399
1391
  const compactionEntry = getLatestCompactionEntry(this.sessionManager.getBranch());
1400
1392
  const assistantIsFromBeforeCompaction = compactionEntry !== null && assistantMessage.timestamp <= new Date(compactionEntry.timestamp).getTime();
1401
1393
  if (assistantIsFromBeforeCompaction) {
1402
- return;
1394
+ return false;
1403
1395
  }
1404
1396
  // Case 1: Overflow - LLM returned context overflow error
1405
1397
  if (sameModel && isContextOverflow(assistantMessage, contextWindow)) {
@@ -1412,7 +1404,7 @@ export class AgentSession {
1412
1404
  willRetry: false,
1413
1405
  errorMessage: "Context overflow recovery failed after one compact-and-retry attempt. Try reducing context or switching to a larger-context model.",
1414
1406
  });
1415
- return;
1407
+ return false;
1416
1408
  }
1417
1409
  this._overflowRecoveryAttempted = true;
1418
1410
  // Remove the error message from agent state (it IS saved to session for history,
@@ -1421,8 +1413,7 @@ export class AgentSession {
1421
1413
  if (messages.length > 0 && messages[messages.length - 1].role === "assistant") {
1422
1414
  this.agent.state.messages = messages.slice(0, -1);
1423
1415
  }
1424
- await this._runAutoCompaction("overflow", true);
1425
- return;
1416
+ return await this._runAutoCompaction("overflow", true);
1426
1417
  }
1427
1418
  // Case 2: Threshold - context is getting large
1428
1419
  // For error messages (no usage data), estimate from last successful response.
@@ -1432,7 +1423,7 @@ export class AgentSession {
1432
1423
  const messages = this.agent.state.messages;
1433
1424
  const estimate = estimateContextTokens(messages);
1434
1425
  if (estimate.lastUsageIndex === null)
1435
- return; // No usage data at all
1426
+ return false; // No usage data at all
1436
1427
  // Verify the usage source is post-compaction. Kept pre-compaction messages
1437
1428
  // have stale usage reflecting the old (larger) context and would falsely
1438
1429
  // trigger compaction right after one just finished.
@@ -1440,7 +1431,7 @@ export class AgentSession {
1440
1431
  if (compactionEntry &&
1441
1432
  usageMsg.role === "assistant" &&
1442
1433
  usageMsg.timestamp <= new Date(compactionEntry.timestamp).getTime()) {
1443
- return;
1434
+ return false;
1444
1435
  }
1445
1436
  contextTokens = estimate.tokens;
1446
1437
  }
@@ -1448,8 +1439,9 @@ export class AgentSession {
1448
1439
  contextTokens = calculateContextTokens(assistantMessage.usage);
1449
1440
  }
1450
1441
  if (shouldCompact(contextTokens, contextWindow, settings)) {
1451
- await this._runAutoCompaction("threshold", false);
1442
+ return await this._runAutoCompaction("threshold", false);
1452
1443
  }
1444
+ return false;
1453
1445
  }
1454
1446
  /**
1455
1447
  * Internal: Run auto-compaction with events.
@@ -1467,7 +1459,7 @@ export class AgentSession {
1467
1459
  aborted: false,
1468
1460
  willRetry: false,
1469
1461
  });
1470
- return;
1462
+ return false;
1471
1463
  }
1472
1464
  let apiKey;
1473
1465
  let headers;
@@ -1481,7 +1473,7 @@ export class AgentSession {
1481
1473
  aborted: false,
1482
1474
  willRetry: false,
1483
1475
  });
1484
- return;
1476
+ return false;
1485
1477
  }
1486
1478
  apiKey = authResult.apiKey;
1487
1479
  headers = authResult.headers;
@@ -1499,7 +1491,7 @@ export class AgentSession {
1499
1491
  aborted: false,
1500
1492
  willRetry: false,
1501
1493
  });
1502
- return;
1494
+ return false;
1503
1495
  }
1504
1496
  let extensionCompaction;
1505
1497
  let fromExtension = false;
@@ -1519,7 +1511,7 @@ export class AgentSession {
1519
1511
  aborted: true,
1520
1512
  willRetry: false,
1521
1513
  });
1522
- return;
1514
+ return false;
1523
1515
  }
1524
1516
  if (extensionResult?.compaction) {
1525
1517
  extensionCompaction = extensionResult.compaction;
@@ -1553,7 +1545,7 @@ export class AgentSession {
1553
1545
  aborted: true,
1554
1546
  willRetry: false,
1555
1547
  });
1556
- return;
1548
+ return false;
1557
1549
  }
1558
1550
  this.sessionManager.appendCompaction(summary, firstKeptEntryId, tokensBefore, details, fromExtension);
1559
1551
  const newEntries = this.sessionManager.getEntries();
@@ -1581,17 +1573,11 @@ export class AgentSession {
1581
1573
  if (lastMsg?.role === "assistant" && lastMsg.stopReason === "error") {
1582
1574
  this.agent.state.messages = messages.slice(0, -1);
1583
1575
  }
1584
- setTimeout(() => {
1585
- this.agent.continue().catch(() => { });
1586
- }, 100);
1587
- }
1588
- else if (this.agent.hasQueuedMessages()) {
1589
- // Auto-compaction can complete while follow-up/steering/custom messages are waiting.
1590
- // Kick the loop so queued messages are actually delivered.
1591
- setTimeout(() => {
1592
- this.agent.continue().catch(() => { });
1593
- }, 100);
1576
+ return true;
1594
1577
  }
1578
+ // Auto-compaction can complete while follow-up/steering/custom messages are waiting.
1579
+ // Continue once so queued messages are delivered.
1580
+ return this.agent.hasQueuedMessages();
1595
1581
  }
1596
1582
  catch (error) {
1597
1583
  const errorMessage = error instanceof Error ? error.message : "compaction failed";
@@ -1605,6 +1591,7 @@ export class AgentSession {
1605
1591
  ? `Context overflow recovery failed: ${errorMessage}`
1606
1592
  : `Auto-compaction failed: ${errorMessage}`,
1607
1593
  });
1594
+ return false;
1608
1595
  }
1609
1596
  finally {
1610
1597
  this._autoCompactionAbortController = undefined;
@@ -1627,6 +1614,9 @@ export class AgentSession {
1627
1614
  if (bindings.commandContextActions !== undefined) {
1628
1615
  this._extensionCommandContextActions = bindings.commandContextActions;
1629
1616
  }
1617
+ if (bindings.abortHandler !== undefined) {
1618
+ this._extensionAbortHandler = bindings.abortHandler;
1619
+ }
1630
1620
  if (bindings.shutdownHandler !== undefined) {
1631
1621
  this._extensionShutdownHandler = bindings.shutdownHandler;
1632
1622
  }
@@ -1766,7 +1756,13 @@ export class AgentSession {
1766
1756
  getModel: () => this.model,
1767
1757
  isIdle: () => !this.isStreaming,
1768
1758
  getSignal: () => this.agent.signal,
1769
- abort: () => this.abort(),
1759
+ abort: () => {
1760
+ if (this._extensionAbortHandler) {
1761
+ this._extensionAbortHandler();
1762
+ return;
1763
+ }
1764
+ void this.abort();
1765
+ },
1770
1766
  hasPendingMessages: () => this.pendingMessageCount > 0,
1771
1767
  shutdown: () => {
1772
1768
  this._extensionShutdownHandler?.();
@@ -1946,33 +1942,18 @@ export class AgentSession {
1946
1942
  return /overloaded|provider.?returned.?error|rate.?limit|too many requests|429|500|502|503|504|service.?unavailable|server.?error|internal.?error|network.?error|connection.?error|connection.?refused|connection.?lost|websocket.?closed|websocket.?error|other side closed|fetch failed|upstream.?connect|reset before headers|socket hang up|ended without|stream ended before message_stop|http2 request did not get a response|timed? out|timeout|terminated|retry delay/i.test(err);
1947
1943
  }
1948
1944
  /**
1949
- * Handle retryable errors with exponential backoff.
1950
- * @returns true if retry was initiated, false if max retries exceeded or disabled
1945
+ * Prepare a retryable error for continuation with exponential backoff.
1946
+ * @returns true if the caller should continue the agent, false otherwise
1951
1947
  */
1952
- async _handleRetryableError(message) {
1948
+ async _prepareRetry(message) {
1953
1949
  const settings = this.settingsManager.getRetrySettings();
1954
1950
  if (!settings.enabled) {
1955
- this._resolveRetry();
1956
1951
  return false;
1957
1952
  }
1958
- // Retry promise is created synchronously in _handleAgentEvent for agent_end.
1959
- // Keep a defensive fallback here in case a future refactor bypasses that path.
1960
- if (!this._retryPromise) {
1961
- this._retryPromise = new Promise((resolve) => {
1962
- this._retryResolve = resolve;
1963
- });
1964
- }
1965
1953
  this._retryAttempt++;
1966
1954
  if (this._retryAttempt > settings.maxRetries) {
1967
- // Max retries exceeded, emit final failure and reset
1968
- this._emit({
1969
- type: "auto_retry_end",
1970
- success: false,
1971
- attempt: this._retryAttempt - 1,
1972
- finalError: message.errorMessage,
1973
- });
1974
- this._retryAttempt = 0;
1975
- this._resolveRetry(); // Resolve so waitForRetry() completes
1955
+ // Preserve the completed attempt count so post-run handling can emit the final failure.
1956
+ this._retryAttempt--;
1976
1957
  return false;
1977
1958
  }
1978
1959
  const delayMs = settings.baseDelayMs * 2 ** (this._retryAttempt - 1);
@@ -1997,23 +1978,17 @@ export class AgentSession {
1997
1978
  // Aborted during sleep - emit end event so UI can clean up
1998
1979
  const attempt = this._retryAttempt;
1999
1980
  this._retryAttempt = 0;
2000
- this._retryAbortController = undefined;
2001
1981
  this._emit({
2002
1982
  type: "auto_retry_end",
2003
1983
  success: false,
2004
1984
  attempt,
2005
1985
  finalError: "Retry cancelled",
2006
1986
  });
2007
- this._resolveRetry();
2008
1987
  return false;
2009
1988
  }
2010
- this._retryAbortController = undefined;
2011
- // Retry via continue() - use setTimeout to break out of event handler chain
2012
- setTimeout(() => {
2013
- this.agent.continue().catch(() => {
2014
- // Retry failed - will be caught by next agent_end
2015
- });
2016
- }, 0);
1989
+ finally {
1990
+ this._retryAbortController = undefined;
1991
+ }
2017
1992
  return true;
2018
1993
  }
2019
1994
  /**
@@ -2021,23 +1996,10 @@ export class AgentSession {
2021
1996
  */
2022
1997
  abortRetry() {
2023
1998
  this._retryAbortController?.abort();
2024
- // Note: _retryAttempt is reset in the catch block of _autoRetry
2025
- this._resolveRetry();
2026
- }
2027
- /**
2028
- * Wait for any in-progress retry to complete.
2029
- * Returns immediately if no retry is in progress.
2030
- */
2031
- async waitForRetry() {
2032
- if (!this._retryPromise) {
2033
- return;
2034
- }
2035
- await this._retryPromise;
2036
- await this.agent.waitForIdle();
2037
1999
  }
2038
2000
  /** Whether auto-retry is currently in progress */
2039
2001
  get isRetrying() {
2040
- return this._retryPromise !== undefined;
2002
+ return this._retryAbortController !== undefined;
2041
2003
  }
2042
2004
  /** Whether auto-retry is enabled */
2043
2005
  get autoRetryEnabled() {
@@ -2456,7 +2418,7 @@ export class AgentSession {
2456
2418
  * @returns The resolved output file path.
2457
2419
  */
2458
2420
  exportToJsonl(outputPath) {
2459
- const filePath = resolve(outputPath ?? `session-${new Date().toISOString().replace(/[:.]/g, "-")}.jsonl`);
2421
+ const filePath = resolvePath(outputPath ?? `session-${new Date().toISOString().replace(/[:.]/g, "-")}.jsonl`, process.cwd());
2460
2422
  const dir = dirname(filePath);
2461
2423
  if (!existsSync(dir)) {
2462
2424
  mkdirSync(dir, { recursive: true });