@eminent337/aery 0.1.10 → 0.1.11

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 (547) hide show
  1. package/CHANGELOG.md +898 -898
  2. package/README.md +32 -2
  3. package/dist/bun/cli.d.ts +3 -0
  4. package/dist/bun/cli.d.ts.map +1 -0
  5. package/dist/bun/cli.js +7 -0
  6. package/dist/bun/cli.js.map +1 -0
  7. package/dist/bun/register-bedrock.d.ts +2 -0
  8. package/dist/bun/register-bedrock.d.ts.map +1 -0
  9. package/dist/bun/register-bedrock.js +4 -0
  10. package/dist/bun/register-bedrock.js.map +1 -0
  11. package/dist/cli/args.d.ts +52 -0
  12. package/dist/cli/args.d.ts.map +1 -0
  13. package/dist/cli/args.js +321 -0
  14. package/dist/cli/args.js.map +1 -0
  15. package/dist/cli/config-selector.d.ts +14 -0
  16. package/dist/cli/config-selector.d.ts.map +1 -0
  17. package/dist/cli/config-selector.js +31 -0
  18. package/dist/cli/config-selector.js.map +1 -0
  19. package/dist/cli/file-processor.d.ts +15 -0
  20. package/dist/cli/file-processor.d.ts.map +1 -0
  21. package/dist/cli/file-processor.js +83 -0
  22. package/dist/cli/file-processor.js.map +1 -0
  23. package/dist/cli/initial-message.d.ts +18 -0
  24. package/dist/cli/initial-message.d.ts.map +1 -0
  25. package/dist/cli/initial-message.js +22 -0
  26. package/dist/cli/initial-message.js.map +1 -0
  27. package/dist/cli/list-models.d.ts +9 -0
  28. package/dist/cli/list-models.d.ts.map +1 -0
  29. package/dist/cli/list-models.js +97 -0
  30. package/dist/cli/list-models.js.map +1 -0
  31. package/dist/cli/session-picker.d.ts +9 -0
  32. package/dist/cli/session-picker.d.ts.map +1 -0
  33. package/dist/cli/session-picker.js +35 -0
  34. package/dist/cli/session-picker.js.map +1 -0
  35. package/dist/cli.d.ts +3 -0
  36. package/dist/cli.d.ts.map +1 -0
  37. package/dist/cli.js +15 -0
  38. package/dist/cli.js.map +1 -0
  39. package/dist/config.d.ts +77 -0
  40. package/dist/config.d.ts.map +1 -0
  41. package/dist/config.js +221 -0
  42. package/dist/config.js.map +1 -0
  43. package/dist/core/agent-session-runtime.d.ts +99 -0
  44. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  45. package/dist/core/agent-session-runtime.js +261 -0
  46. package/dist/core/agent-session-runtime.js.map +1 -0
  47. package/dist/core/agent-session-services.d.ts +85 -0
  48. package/dist/core/agent-session-services.d.ts.map +1 -0
  49. package/dist/core/agent-session-services.js +116 -0
  50. package/dist/core/agent-session-services.js.map +1 -0
  51. package/dist/core/agent-session.d.ts +590 -0
  52. package/dist/core/agent-session.d.ts.map +1 -0
  53. package/dist/core/agent-session.js +2505 -0
  54. package/dist/core/agent-session.js.map +1 -0
  55. package/dist/core/auth-storage.d.ts +132 -0
  56. package/dist/core/auth-storage.d.ts.map +1 -0
  57. package/dist/core/auth-storage.js +422 -0
  58. package/dist/core/auth-storage.js.map +1 -0
  59. package/dist/core/bash-executor.d.ts +32 -0
  60. package/dist/core/bash-executor.d.ts.map +1 -0
  61. package/dist/core/bash-executor.js +108 -0
  62. package/dist/core/bash-executor.js.map +1 -0
  63. package/dist/core/compaction/branch-summarization.d.ts +88 -0
  64. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  65. package/dist/core/compaction/branch-summarization.js +243 -0
  66. package/dist/core/compaction/branch-summarization.js.map +1 -0
  67. package/dist/core/compaction/compaction.d.ts +121 -0
  68. package/dist/core/compaction/compaction.d.ts.map +1 -0
  69. package/dist/core/compaction/compaction.js +615 -0
  70. package/dist/core/compaction/compaction.js.map +1 -0
  71. package/dist/core/compaction/index.d.ts +7 -0
  72. package/dist/core/compaction/index.d.ts.map +1 -0
  73. package/dist/core/compaction/index.js +7 -0
  74. package/dist/core/compaction/index.js.map +1 -0
  75. package/dist/core/compaction/utils.d.ts +38 -0
  76. package/dist/core/compaction/utils.d.ts.map +1 -0
  77. package/dist/core/compaction/utils.js +153 -0
  78. package/dist/core/compaction/utils.js.map +1 -0
  79. package/dist/core/defaults.d.ts +3 -0
  80. package/dist/core/defaults.d.ts.map +1 -0
  81. package/dist/core/defaults.js +2 -0
  82. package/dist/core/defaults.js.map +1 -0
  83. package/dist/core/diagnostics.d.ts +15 -0
  84. package/dist/core/diagnostics.d.ts.map +1 -0
  85. package/dist/core/diagnostics.js +2 -0
  86. package/dist/core/diagnostics.js.map +1 -0
  87. package/dist/core/event-bus.d.ts +9 -0
  88. package/dist/core/event-bus.d.ts.map +1 -0
  89. package/dist/core/event-bus.js +25 -0
  90. package/dist/core/event-bus.js.map +1 -0
  91. package/dist/core/exec.d.ts +29 -0
  92. package/dist/core/exec.d.ts.map +1 -0
  93. package/dist/core/exec.js +75 -0
  94. package/dist/core/exec.js.map +1 -0
  95. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  96. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  97. package/dist/core/export-html/ansi-to-html.js +249 -0
  98. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  99. package/dist/core/export-html/index.d.ts +37 -0
  100. package/dist/core/export-html/index.d.ts.map +1 -0
  101. package/dist/core/export-html/index.js +224 -0
  102. package/dist/core/export-html/index.js.map +1 -0
  103. package/dist/core/export-html/template.css +1017 -0
  104. package/dist/core/export-html/template.html +55 -0
  105. package/dist/core/export-html/template.js +1729 -0
  106. package/dist/core/export-html/tool-renderer.d.ts +40 -0
  107. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  108. package/dist/core/export-html/tool-renderer.js +95 -0
  109. package/dist/core/export-html/tool-renderer.js.map +1 -0
  110. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  111. package/dist/core/export-html/vendor/marked.min.js +6 -0
  112. package/dist/core/extensions/index.d.ts +12 -0
  113. package/dist/core/extensions/index.d.ts.map +1 -0
  114. package/dist/core/extensions/index.js +9 -0
  115. package/dist/core/extensions/index.js.map +1 -0
  116. package/dist/core/extensions/loader.d.ts +25 -0
  117. package/dist/core/extensions/loader.d.ts.map +1 -0
  118. package/dist/core/extensions/loader.js +436 -0
  119. package/dist/core/extensions/loader.js.map +1 -0
  120. package/dist/core/extensions/runner.d.ts +150 -0
  121. package/dist/core/extensions/runner.d.ts.map +1 -0
  122. package/dist/core/extensions/runner.js +706 -0
  123. package/dist/core/extensions/runner.js.map +1 -0
  124. package/dist/core/extensions/types.d.ts +1111 -0
  125. package/dist/core/extensions/types.d.ts.map +1 -0
  126. package/dist/core/extensions/types.js +45 -0
  127. package/dist/core/extensions/types.js.map +1 -0
  128. package/dist/core/extensions/wrapper.d.ts +20 -0
  129. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  130. package/dist/core/extensions/wrapper.js +22 -0
  131. package/dist/core/extensions/wrapper.js.map +1 -0
  132. package/dist/core/footer-data-provider.d.ts +48 -0
  133. package/dist/core/footer-data-provider.d.ts.map +1 -0
  134. package/dist/core/footer-data-provider.js +314 -0
  135. package/dist/core/footer-data-provider.js.map +1 -0
  136. package/dist/core/index.d.ts +12 -0
  137. package/dist/core/index.d.ts.map +1 -0
  138. package/dist/core/index.js +12 -0
  139. package/dist/core/index.js.map +1 -0
  140. package/dist/core/keybindings.d.ts +353 -0
  141. package/dist/core/keybindings.d.ts.map +1 -0
  142. package/dist/core/keybindings.js +295 -0
  143. package/dist/core/keybindings.js.map +1 -0
  144. package/dist/core/messages.d.ts +77 -0
  145. package/dist/core/messages.d.ts.map +1 -0
  146. package/dist/core/messages.js +123 -0
  147. package/dist/core/messages.js.map +1 -0
  148. package/dist/core/model-registry.d.ts +132 -0
  149. package/dist/core/model-registry.d.ts.map +1 -0
  150. package/dist/core/model-registry.js +635 -0
  151. package/dist/core/model-registry.js.map +1 -0
  152. package/dist/core/model-resolver.d.ts +110 -0
  153. package/dist/core/model-resolver.d.ts.map +1 -0
  154. package/dist/core/model-resolver.js +486 -0
  155. package/dist/core/model-resolver.js.map +1 -0
  156. package/dist/core/output-guard.d.ts +6 -0
  157. package/dist/core/output-guard.d.ts.map +1 -0
  158. package/dist/core/output-guard.js +59 -0
  159. package/dist/core/output-guard.js.map +1 -0
  160. package/dist/core/package-manager.d.ts +194 -0
  161. package/dist/core/package-manager.d.ts.map +1 -0
  162. package/dist/core/package-manager.js +1882 -0
  163. package/dist/core/package-manager.js.map +1 -0
  164. package/dist/core/prompt-templates.d.ts +52 -0
  165. package/dist/core/prompt-templates.d.ts.map +1 -0
  166. package/dist/core/prompt-templates.js +250 -0
  167. package/dist/core/prompt-templates.js.map +1 -0
  168. package/dist/core/resolve-config-value.d.ts +23 -0
  169. package/dist/core/resolve-config-value.d.ts.map +1 -0
  170. package/dist/core/resolve-config-value.js +126 -0
  171. package/dist/core/resolve-config-value.js.map +1 -0
  172. package/dist/core/resource-loader.d.ts +194 -0
  173. package/dist/core/resource-loader.d.ts.map +1 -0
  174. package/dist/core/resource-loader.js +726 -0
  175. package/dist/core/resource-loader.js.map +1 -0
  176. package/dist/core/sdk.d.ts +99 -0
  177. package/dist/core/sdk.d.ts.map +1 -0
  178. package/dist/core/sdk.js +261 -0
  179. package/dist/core/sdk.js.map +1 -0
  180. package/dist/core/session-cwd.d.ts +19 -0
  181. package/dist/core/session-cwd.d.ts.map +1 -0
  182. package/dist/core/session-cwd.js +38 -0
  183. package/dist/core/session-cwd.js.map +1 -0
  184. package/dist/core/session-manager.d.ts +333 -0
  185. package/dist/core/session-manager.d.ts.map +1 -0
  186. package/dist/core/session-manager.js +1109 -0
  187. package/dist/core/session-manager.js.map +1 -0
  188. package/dist/core/settings-manager.d.ts +240 -0
  189. package/dist/core/settings-manager.d.ts.map +1 -0
  190. package/dist/core/settings-manager.js +711 -0
  191. package/dist/core/settings-manager.js.map +1 -0
  192. package/dist/core/skills.d.ts +60 -0
  193. package/dist/core/skills.d.ts.map +1 -0
  194. package/dist/core/skills.js +409 -0
  195. package/dist/core/skills.js.map +1 -0
  196. package/dist/core/slash-commands.d.ts +14 -0
  197. package/dist/core/slash-commands.d.ts.map +1 -0
  198. package/dist/core/slash-commands.js +24 -0
  199. package/dist/core/slash-commands.js.map +1 -0
  200. package/dist/core/source-info.d.ts +18 -0
  201. package/dist/core/source-info.d.ts.map +1 -0
  202. package/dist/core/source-info.js +19 -0
  203. package/dist/core/source-info.js.map +1 -0
  204. package/dist/core/system-prompt.d.ts +28 -0
  205. package/dist/core/system-prompt.d.ts.map +1 -0
  206. package/dist/core/system-prompt.js +120 -0
  207. package/dist/core/system-prompt.js.map +1 -0
  208. package/dist/core/telemetry.d.ts +3 -0
  209. package/dist/core/telemetry.d.ts.map +1 -0
  210. package/dist/core/telemetry.js +9 -0
  211. package/dist/core/telemetry.js.map +1 -0
  212. package/dist/core/timings.d.ts +8 -0
  213. package/dist/core/timings.d.ts.map +1 -0
  214. package/dist/core/timings.js +31 -0
  215. package/dist/core/timings.js.map +1 -0
  216. package/dist/core/tools/bash.d.ts +64 -0
  217. package/dist/core/tools/bash.d.ts.map +1 -0
  218. package/dist/core/tools/bash.js +355 -0
  219. package/dist/core/tools/bash.js.map +1 -0
  220. package/dist/core/tools/edit-diff.d.ts +85 -0
  221. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  222. package/dist/core/tools/edit-diff.js +337 -0
  223. package/dist/core/tools/edit-diff.js.map +1 -0
  224. package/dist/core/tools/edit.d.ts +49 -0
  225. package/dist/core/tools/edit.d.ts.map +1 -0
  226. package/dist/core/tools/edit.js +323 -0
  227. package/dist/core/tools/edit.js.map +1 -0
  228. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  229. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  230. package/dist/core/tools/file-mutation-queue.js +37 -0
  231. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  232. package/dist/core/tools/find.d.ts +35 -0
  233. package/dist/core/tools/find.d.ts.map +1 -0
  234. package/dist/core/tools/find.js +298 -0
  235. package/dist/core/tools/find.js.map +1 -0
  236. package/dist/core/tools/grep.d.ts +37 -0
  237. package/dist/core/tools/grep.d.ts.map +1 -0
  238. package/dist/core/tools/grep.js +304 -0
  239. package/dist/core/tools/grep.js.map +1 -0
  240. package/dist/core/tools/index.d.ts +40 -0
  241. package/dist/core/tools/index.d.ts.map +1 -0
  242. package/dist/core/tools/index.js +112 -0
  243. package/dist/core/tools/index.js.map +1 -0
  244. package/dist/core/tools/ls.d.ts +37 -0
  245. package/dist/core/tools/ls.d.ts.map +1 -0
  246. package/dist/core/tools/ls.js +169 -0
  247. package/dist/core/tools/ls.js.map +1 -0
  248. package/dist/core/tools/path-utils.d.ts +8 -0
  249. package/dist/core/tools/path-utils.d.ts.map +1 -0
  250. package/dist/core/tools/path-utils.js +81 -0
  251. package/dist/core/tools/path-utils.js.map +1 -0
  252. package/dist/core/tools/read.d.ts +35 -0
  253. package/dist/core/tools/read.d.ts.map +1 -0
  254. package/dist/core/tools/read.js +232 -0
  255. package/dist/core/tools/read.js.map +1 -0
  256. package/dist/core/tools/render-utils.d.ts +21 -0
  257. package/dist/core/tools/render-utils.d.ts.map +1 -0
  258. package/dist/core/tools/render-utils.js +49 -0
  259. package/dist/core/tools/render-utils.js.map +1 -0
  260. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  261. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  262. package/dist/core/tools/tool-definition-wrapper.js +34 -0
  263. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  264. package/dist/core/tools/truncate.d.ts +70 -0
  265. package/dist/core/tools/truncate.d.ts.map +1 -0
  266. package/dist/core/tools/truncate.js +205 -0
  267. package/dist/core/tools/truncate.js.map +1 -0
  268. package/dist/core/tools/write.d.ts +26 -0
  269. package/dist/core/tools/write.d.ts.map +1 -0
  270. package/dist/core/tools/write.js +213 -0
  271. package/dist/core/tools/write.js.map +1 -0
  272. package/dist/index.d.ts +28 -0
  273. package/dist/index.d.ts.map +1 -0
  274. package/dist/index.js +41 -0
  275. package/dist/index.js.map +1 -0
  276. package/dist/main.d.ts +12 -0
  277. package/dist/main.d.ts.map +1 -0
  278. package/dist/main.js +589 -0
  279. package/dist/main.js.map +1 -0
  280. package/dist/migrations.d.ts +33 -0
  281. package/dist/migrations.d.ts.map +1 -0
  282. package/dist/migrations.js +281 -0
  283. package/dist/migrations.js.map +1 -0
  284. package/dist/modes/index.d.ts +9 -0
  285. package/dist/modes/index.d.ts.map +1 -0
  286. package/dist/modes/index.js +8 -0
  287. package/dist/modes/index.js.map +1 -0
  288. package/dist/modes/interactive/assets/clankolas.png +0 -0
  289. package/dist/modes/interactive/components/armin.d.ts +34 -0
  290. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  291. package/dist/modes/interactive/components/armin.js +333 -0
  292. package/dist/modes/interactive/components/armin.js.map +1 -0
  293. package/dist/modes/interactive/components/assistant-message.d.ts +20 -0
  294. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  295. package/dist/modes/interactive/components/assistant-message.js +121 -0
  296. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  297. package/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  298. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  299. package/dist/modes/interactive/components/bash-execution.js +175 -0
  300. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  301. package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  302. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  303. package/dist/modes/interactive/components/bordered-loader.js +54 -0
  304. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  305. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  306. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  307. package/dist/modes/interactive/components/branch-summary-message.js +44 -0
  308. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  309. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  310. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  311. package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  312. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  313. package/dist/modes/interactive/components/config-selector.d.ts +71 -0
  314. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  315. package/dist/modes/interactive/components/config-selector.js +479 -0
  316. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  317. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  318. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  319. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  320. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  321. package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  322. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  323. package/dist/modes/interactive/components/custom-editor.js +70 -0
  324. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  325. package/dist/modes/interactive/components/custom-message.d.ts +20 -0
  326. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  327. package/dist/modes/interactive/components/custom-message.js +79 -0
  328. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  329. package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  330. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  331. package/dist/modes/interactive/components/daxnuts.js +140 -0
  332. package/dist/modes/interactive/components/daxnuts.js.map +1 -0
  333. package/dist/modes/interactive/components/diff.d.ts +12 -0
  334. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  335. package/dist/modes/interactive/components/diff.js +133 -0
  336. package/dist/modes/interactive/components/diff.js.map +1 -0
  337. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  338. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  339. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  340. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  341. package/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  342. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -0
  343. package/dist/modes/interactive/components/earendil-announcement.js +40 -0
  344. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -0
  345. package/dist/modes/interactive/components/extension-editor.d.ts +20 -0
  346. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  347. package/dist/modes/interactive/components/extension-editor.js +111 -0
  348. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  349. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  350. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  351. package/dist/modes/interactive/components/extension-input.js +61 -0
  352. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  353. package/dist/modes/interactive/components/extension-selector.d.ts +24 -0
  354. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  355. package/dist/modes/interactive/components/extension-selector.js +78 -0
  356. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  357. package/dist/modes/interactive/components/footer.d.ts +27 -0
  358. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  359. package/dist/modes/interactive/components/footer.js +201 -0
  360. package/dist/modes/interactive/components/footer.js.map +1 -0
  361. package/dist/modes/interactive/components/index.d.ts +32 -0
  362. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  363. package/dist/modes/interactive/components/index.js +33 -0
  364. package/dist/modes/interactive/components/index.js.map +1 -0
  365. package/dist/modes/interactive/components/keybinding-hints.d.ts +8 -0
  366. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  367. package/dist/modes/interactive/components/keybinding-hints.js +22 -0
  368. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  369. package/dist/modes/interactive/components/login-dialog.d.ts +42 -0
  370. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  371. package/dist/modes/interactive/components/login-dialog.js +145 -0
  372. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  373. package/dist/modes/interactive/components/model-selector.d.ts +47 -0
  374. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  375. package/dist/modes/interactive/components/model-selector.js +278 -0
  376. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  377. package/dist/modes/interactive/components/oauth-selector.d.ts +19 -0
  378. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  379. package/dist/modes/interactive/components/oauth-selector.js +97 -0
  380. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  381. package/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
  382. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  383. package/dist/modes/interactive/components/scoped-models-selector.js +290 -0
  384. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  385. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  386. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  387. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  388. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  389. package/dist/modes/interactive/components/session-selector.d.ts +96 -0
  390. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  391. package/dist/modes/interactive/components/session-selector.js +865 -0
  392. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  393. package/dist/modes/interactive/components/settings-selector.d.ts +60 -0
  394. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  395. package/dist/modes/interactive/components/settings-selector.js +311 -0
  396. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  397. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  398. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  399. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  400. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  401. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  402. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  403. package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  404. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  405. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  406. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  407. package/dist/modes/interactive/components/theme-selector.js +50 -0
  408. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  409. package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  410. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  411. package/dist/modes/interactive/components/thinking-selector.js +51 -0
  412. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  413. package/dist/modes/interactive/components/tool-execution.d.ts +60 -0
  414. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  415. package/dist/modes/interactive/components/tool-execution.js +289 -0
  416. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  417. package/dist/modes/interactive/components/tree-selector.d.ts +89 -0
  418. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  419. package/dist/modes/interactive/components/tree-selector.js +1092 -0
  420. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  421. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  422. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  423. package/dist/modes/interactive/components/user-message-selector.js +114 -0
  424. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  425. package/dist/modes/interactive/components/user-message.d.ts +10 -0
  426. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  427. package/dist/modes/interactive/components/user-message.js +29 -0
  428. package/dist/modes/interactive/components/user-message.js.map +1 -0
  429. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  430. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  431. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  432. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  433. package/dist/modes/interactive/interactive-mode.d.ts +343 -0
  434. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  435. package/dist/modes/interactive/interactive-mode.js +4315 -0
  436. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  437. package/dist/modes/interactive/theme/aery.json +84 -0
  438. package/dist/modes/interactive/theme/dark.json +85 -0
  439. package/dist/modes/interactive/theme/light.json +84 -0
  440. package/dist/modes/interactive/theme/theme-schema.json +335 -0
  441. package/dist/modes/interactive/theme/theme.d.ts +81 -0
  442. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  443. package/dist/modes/interactive/theme/theme.js +979 -0
  444. package/dist/modes/interactive/theme/theme.js.map +1 -0
  445. package/dist/modes/print-mode.d.ts +28 -0
  446. package/dist/modes/print-mode.d.ts.map +1 -0
  447. package/dist/modes/print-mode.js +141 -0
  448. package/dist/modes/print-mode.js.map +1 -0
  449. package/dist/modes/rpc/jsonl.d.ts +17 -0
  450. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  451. package/dist/modes/rpc/jsonl.js +49 -0
  452. package/dist/modes/rpc/jsonl.js.map +1 -0
  453. package/dist/modes/rpc/rpc-client.d.ts +224 -0
  454. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  455. package/dist/modes/rpc/rpc-client.js +410 -0
  456. package/dist/modes/rpc/rpc-client.js.map +1 -0
  457. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  458. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  459. package/dist/modes/rpc/rpc-mode.js +601 -0
  460. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  461. package/dist/modes/rpc/rpc-types.d.ts +419 -0
  462. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  463. package/dist/modes/rpc/rpc-types.js +8 -0
  464. package/dist/modes/rpc/rpc-types.js.map +1 -0
  465. package/dist/package-manager-cli.d.ts +4 -0
  466. package/dist/package-manager-cli.d.ts.map +1 -0
  467. package/dist/package-manager-cli.js +234 -0
  468. package/dist/package-manager-cli.js.map +1 -0
  469. package/dist/utils/changelog.d.ts +21 -0
  470. package/dist/utils/changelog.d.ts.map +1 -0
  471. package/dist/utils/changelog.js +87 -0
  472. package/dist/utils/changelog.js.map +1 -0
  473. package/dist/utils/child-process.d.ts +11 -0
  474. package/dist/utils/child-process.d.ts.map +1 -0
  475. package/dist/utils/child-process.js +78 -0
  476. package/dist/utils/child-process.js.map +1 -0
  477. package/dist/utils/clipboard-image.d.ts +11 -0
  478. package/dist/utils/clipboard-image.d.ts.map +1 -0
  479. package/dist/utils/clipboard-image.js +245 -0
  480. package/dist/utils/clipboard-image.js.map +1 -0
  481. package/dist/utils/clipboard-native.d.ts +8 -0
  482. package/dist/utils/clipboard-native.d.ts.map +1 -0
  483. package/dist/utils/clipboard-native.js +14 -0
  484. package/dist/utils/clipboard-native.js.map +1 -0
  485. package/dist/utils/clipboard.d.ts +2 -0
  486. package/dist/utils/clipboard.d.ts.map +1 -0
  487. package/dist/utils/clipboard.js +78 -0
  488. package/dist/utils/clipboard.js.map +1 -0
  489. package/dist/utils/exif-orientation.d.ts +5 -0
  490. package/dist/utils/exif-orientation.d.ts.map +1 -0
  491. package/dist/utils/exif-orientation.js +158 -0
  492. package/dist/utils/exif-orientation.js.map +1 -0
  493. package/dist/utils/frontmatter.d.ts +8 -0
  494. package/dist/utils/frontmatter.d.ts.map +1 -0
  495. package/dist/utils/frontmatter.js +26 -0
  496. package/dist/utils/frontmatter.js.map +1 -0
  497. package/dist/utils/git.d.ts +26 -0
  498. package/dist/utils/git.d.ts.map +1 -0
  499. package/dist/utils/git.js +163 -0
  500. package/dist/utils/git.js.map +1 -0
  501. package/dist/utils/image-convert.d.ts +9 -0
  502. package/dist/utils/image-convert.d.ts.map +1 -0
  503. package/dist/utils/image-convert.js +39 -0
  504. package/dist/utils/image-convert.js.map +1 -0
  505. package/dist/utils/image-resize.d.ts +36 -0
  506. package/dist/utils/image-resize.d.ts.map +1 -0
  507. package/dist/utils/image-resize.js +137 -0
  508. package/dist/utils/image-resize.js.map +1 -0
  509. package/dist/utils/mime.d.ts +2 -0
  510. package/dist/utils/mime.d.ts.map +1 -0
  511. package/dist/utils/mime.js +26 -0
  512. package/dist/utils/mime.js.map +1 -0
  513. package/dist/utils/paths.d.ts +7 -0
  514. package/dist/utils/paths.d.ts.map +1 -0
  515. package/dist/utils/paths.js +19 -0
  516. package/dist/utils/paths.js.map +1 -0
  517. package/dist/utils/photon.d.ts +21 -0
  518. package/dist/utils/photon.d.ts.map +1 -0
  519. package/dist/utils/photon.js +121 -0
  520. package/dist/utils/photon.js.map +1 -0
  521. package/dist/utils/shell.d.ts +29 -0
  522. package/dist/utils/shell.d.ts.map +1 -0
  523. package/dist/utils/shell.js +203 -0
  524. package/dist/utils/shell.js.map +1 -0
  525. package/dist/utils/sleep.d.ts +5 -0
  526. package/dist/utils/sleep.d.ts.map +1 -0
  527. package/dist/utils/sleep.js +17 -0
  528. package/dist/utils/sleep.js.map +1 -0
  529. package/dist/utils/tools-manager.d.ts +3 -0
  530. package/dist/utils/tools-manager.d.ts.map +1 -0
  531. package/dist/utils/tools-manager.js +252 -0
  532. package/dist/utils/tools-manager.js.map +1 -0
  533. package/docs/compaction.md +14 -14
  534. package/docs/custom-provider.md +9 -9
  535. package/docs/development.md +2 -2
  536. package/docs/extensions.md +25 -25
  537. package/docs/json.md +4 -4
  538. package/docs/packages.md +2 -2
  539. package/docs/providers.md +1 -1
  540. package/docs/rpc.md +1 -1
  541. package/docs/sdk.md +22 -22
  542. package/docs/session.md +7 -7
  543. package/docs/termux.md +1 -1
  544. package/docs/themes.md +2 -2
  545. package/docs/tui.md +7 -7
  546. package/examples/extensions/dynamic-resources/dynamic.json +1 -1
  547. package/package.json +5 -5
@@ -0,0 +1,252 @@
1
+ import chalk from "chalk";
2
+ import { spawnSync } from "child_process";
3
+ import extractZip from "extract-zip";
4
+ import { chmodSync, createWriteStream, existsSync, mkdirSync, readdirSync, renameSync, rmSync } from "fs";
5
+ import { arch, platform } from "os";
6
+ import { join } from "path";
7
+ import { Readable } from "stream";
8
+ import { pipeline } from "stream/promises";
9
+ import { APP_NAME, getBinDir } from "../config.js";
10
+ const TOOLS_DIR = getBinDir();
11
+ const NETWORK_TIMEOUT_MS = 10_000;
12
+ const DOWNLOAD_TIMEOUT_MS = 120_000;
13
+ function isOfflineModeEnabled() {
14
+ const value = process.env.PI_OFFLINE;
15
+ if (!value)
16
+ return false;
17
+ return value === "1" || value.toLowerCase() === "true" || value.toLowerCase() === "yes";
18
+ }
19
+ const TOOLS = {
20
+ fd: {
21
+ name: "fd",
22
+ repo: "sharkdp/fd",
23
+ binaryName: "fd",
24
+ tagPrefix: "v",
25
+ getAssetName: (version, plat, architecture) => {
26
+ if (plat === "darwin") {
27
+ const archStr = architecture === "arm64" ? "aarch64" : "x86_64";
28
+ return `fd-v${version}-${archStr}-apple-darwin.tar.gz`;
29
+ }
30
+ else if (plat === "linux") {
31
+ const archStr = architecture === "arm64" ? "aarch64" : "x86_64";
32
+ return `fd-v${version}-${archStr}-unknown-linux-gnu.tar.gz`;
33
+ }
34
+ else if (plat === "win32") {
35
+ const archStr = architecture === "arm64" ? "aarch64" : "x86_64";
36
+ return `fd-v${version}-${archStr}-pc-windows-msvc.zip`;
37
+ }
38
+ return null;
39
+ },
40
+ },
41
+ rg: {
42
+ name: "ripgrep",
43
+ repo: "BurntSushi/ripgrep",
44
+ binaryName: "rg",
45
+ tagPrefix: "",
46
+ getAssetName: (version, plat, architecture) => {
47
+ if (plat === "darwin") {
48
+ const archStr = architecture === "arm64" ? "aarch64" : "x86_64";
49
+ return `ripgrep-${version}-${archStr}-apple-darwin.tar.gz`;
50
+ }
51
+ else if (plat === "linux") {
52
+ if (architecture === "arm64") {
53
+ return `ripgrep-${version}-aarch64-unknown-linux-gnu.tar.gz`;
54
+ }
55
+ return `ripgrep-${version}-x86_64-unknown-linux-musl.tar.gz`;
56
+ }
57
+ else if (plat === "win32") {
58
+ const archStr = architecture === "arm64" ? "aarch64" : "x86_64";
59
+ return `ripgrep-${version}-${archStr}-pc-windows-msvc.zip`;
60
+ }
61
+ return null;
62
+ },
63
+ },
64
+ };
65
+ // Check if a command exists in PATH by trying to run it
66
+ function commandExists(cmd) {
67
+ try {
68
+ const result = spawnSync(cmd, ["--version"], { stdio: "pipe" });
69
+ // Check for ENOENT error (command not found)
70
+ return result.error === undefined || result.error === null;
71
+ }
72
+ catch {
73
+ return false;
74
+ }
75
+ }
76
+ // Get the path to a tool (system-wide or in our tools dir)
77
+ export function getToolPath(tool) {
78
+ const config = TOOLS[tool];
79
+ if (!config)
80
+ return null;
81
+ // Check our tools directory first
82
+ const localPath = join(TOOLS_DIR, config.binaryName + (platform() === "win32" ? ".exe" : ""));
83
+ if (existsSync(localPath)) {
84
+ return localPath;
85
+ }
86
+ // Check system PATH - if found, just return the command name (it's in PATH)
87
+ if (commandExists(config.binaryName)) {
88
+ return config.binaryName;
89
+ }
90
+ return null;
91
+ }
92
+ // Fetch latest release version from GitHub
93
+ async function getLatestVersion(repo) {
94
+ const response = await fetch(`https://api.github.com/repos/${repo}/releases/latest`, {
95
+ headers: { "User-Agent": `${APP_NAME}-coding-agent` },
96
+ signal: AbortSignal.timeout(NETWORK_TIMEOUT_MS),
97
+ });
98
+ if (!response.ok) {
99
+ throw new Error(`GitHub API error: ${response.status}`);
100
+ }
101
+ const data = (await response.json());
102
+ return data.tag_name.replace(/^v/, "");
103
+ }
104
+ // Download a file from URL
105
+ async function downloadFile(url, dest) {
106
+ const response = await fetch(url, {
107
+ signal: AbortSignal.timeout(DOWNLOAD_TIMEOUT_MS),
108
+ });
109
+ if (!response.ok) {
110
+ throw new Error(`Failed to download: ${response.status}`);
111
+ }
112
+ if (!response.body) {
113
+ throw new Error("No response body");
114
+ }
115
+ const fileStream = createWriteStream(dest);
116
+ await pipeline(Readable.fromWeb(response.body), fileStream);
117
+ }
118
+ function findBinaryRecursively(rootDir, binaryFileName) {
119
+ const stack = [rootDir];
120
+ while (stack.length > 0) {
121
+ const currentDir = stack.pop();
122
+ if (!currentDir)
123
+ continue;
124
+ const entries = readdirSync(currentDir, { withFileTypes: true });
125
+ for (const entry of entries) {
126
+ const fullPath = join(currentDir, entry.name);
127
+ if (entry.isFile() && entry.name === binaryFileName) {
128
+ return fullPath;
129
+ }
130
+ if (entry.isDirectory()) {
131
+ stack.push(fullPath);
132
+ }
133
+ }
134
+ }
135
+ return null;
136
+ }
137
+ // Download and install a tool
138
+ async function downloadTool(tool) {
139
+ const config = TOOLS[tool];
140
+ if (!config)
141
+ throw new Error(`Unknown tool: ${tool}`);
142
+ const plat = platform();
143
+ const architecture = arch();
144
+ // Get latest version
145
+ const version = await getLatestVersion(config.repo);
146
+ // Get asset name for this platform
147
+ const assetName = config.getAssetName(version, plat, architecture);
148
+ if (!assetName) {
149
+ throw new Error(`Unsupported platform: ${plat}/${architecture}`);
150
+ }
151
+ // Create tools directory
152
+ mkdirSync(TOOLS_DIR, { recursive: true });
153
+ const downloadUrl = `https://github.com/${config.repo}/releases/download/${config.tagPrefix}${version}/${assetName}`;
154
+ const archivePath = join(TOOLS_DIR, assetName);
155
+ const binaryExt = plat === "win32" ? ".exe" : "";
156
+ const binaryPath = join(TOOLS_DIR, config.binaryName + binaryExt);
157
+ // Download
158
+ await downloadFile(downloadUrl, archivePath);
159
+ // Extract into a unique temp directory. fd and rg downloads can run concurrently
160
+ // during startup, so sharing a fixed directory causes races.
161
+ const extractDir = join(TOOLS_DIR, `extract_tmp_${config.binaryName}_${process.pid}_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`);
162
+ mkdirSync(extractDir, { recursive: true });
163
+ try {
164
+ if (assetName.endsWith(".tar.gz")) {
165
+ const extractResult = spawnSync("tar", ["xzf", archivePath, "-C", extractDir], { stdio: "pipe" });
166
+ if (extractResult.error || extractResult.status !== 0) {
167
+ const errMsg = extractResult.error?.message ?? extractResult.stderr?.toString().trim() ?? "unknown error";
168
+ throw new Error(`Failed to extract ${assetName}: ${errMsg}`);
169
+ }
170
+ }
171
+ else if (assetName.endsWith(".zip")) {
172
+ await extractZip(archivePath, { dir: extractDir });
173
+ }
174
+ else {
175
+ throw new Error(`Unsupported archive format: ${assetName}`);
176
+ }
177
+ // Find the binary in extracted files. Some archives contain files directly
178
+ // at root, others nest under a versioned subdirectory.
179
+ const binaryFileName = config.binaryName + binaryExt;
180
+ const extractedDir = join(extractDir, assetName.replace(/\.(tar\.gz|zip)$/, ""));
181
+ const extractedBinaryCandidates = [join(extractedDir, binaryFileName), join(extractDir, binaryFileName)];
182
+ let extractedBinary = extractedBinaryCandidates.find((candidate) => existsSync(candidate));
183
+ if (!extractedBinary) {
184
+ extractedBinary = findBinaryRecursively(extractDir, binaryFileName) ?? undefined;
185
+ }
186
+ if (extractedBinary) {
187
+ renameSync(extractedBinary, binaryPath);
188
+ }
189
+ else {
190
+ throw new Error(`Binary not found in archive: expected ${binaryFileName} under ${extractDir}`);
191
+ }
192
+ // Make executable (Unix only)
193
+ if (plat !== "win32") {
194
+ chmodSync(binaryPath, 0o755);
195
+ }
196
+ }
197
+ finally {
198
+ // Cleanup
199
+ rmSync(archivePath, { force: true });
200
+ rmSync(extractDir, { recursive: true, force: true });
201
+ }
202
+ return binaryPath;
203
+ }
204
+ // Termux package names for tools
205
+ const TERMUX_PACKAGES = {
206
+ fd: "fd",
207
+ rg: "ripgrep",
208
+ };
209
+ // Ensure a tool is available, downloading if necessary
210
+ // Returns the path to the tool, or null if unavailable
211
+ export async function ensureTool(tool, silent = false) {
212
+ const existingPath = getToolPath(tool);
213
+ if (existingPath) {
214
+ return existingPath;
215
+ }
216
+ const config = TOOLS[tool];
217
+ if (!config)
218
+ return undefined;
219
+ if (isOfflineModeEnabled()) {
220
+ if (!silent) {
221
+ console.log(chalk.yellow(`${config.name} not found. Offline mode enabled, skipping download.`));
222
+ }
223
+ return undefined;
224
+ }
225
+ // On Android/Termux, Linux binaries don't work due to Bionic libc incompatibility.
226
+ // Users must install via pkg.
227
+ if (platform() === "android") {
228
+ const pkgName = TERMUX_PACKAGES[tool] ?? tool;
229
+ if (!silent) {
230
+ console.log(chalk.yellow(`${config.name} not found. Install with: pkg install ${pkgName}`));
231
+ }
232
+ return undefined;
233
+ }
234
+ // Tool not found - download it
235
+ if (!silent) {
236
+ console.log(chalk.dim(`${config.name} not found. Downloading...`));
237
+ }
238
+ try {
239
+ const path = await downloadTool(tool);
240
+ if (!silent) {
241
+ console.log(chalk.dim(`${config.name} installed to ${path}`));
242
+ }
243
+ return path;
244
+ }
245
+ catch (e) {
246
+ if (!silent) {
247
+ console.log(chalk.yellow(`Failed to download ${config.name}: ${e instanceof Error ? e.message : e}`));
248
+ }
249
+ return undefined;
250
+ }
251
+ }
252
+ //# sourceMappingURL=tools-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-manager.js","sourceRoot":"","sources":["../../src/utils/tools-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from \"chalk\";\nimport { spawnSync } from \"child_process\";\nimport extractZip from \"extract-zip\";\nimport { chmodSync, createWriteStream, existsSync, mkdirSync, readdirSync, renameSync, rmSync } from \"fs\";\nimport { arch, platform } from \"os\";\nimport { join } from \"path\";\nimport { Readable } from \"stream\";\nimport { pipeline } from \"stream/promises\";\nimport { APP_NAME, getBinDir } from \"../config.js\";\n\nconst TOOLS_DIR = getBinDir();\nconst NETWORK_TIMEOUT_MS = 10_000;\nconst DOWNLOAD_TIMEOUT_MS = 120_000;\n\nfunction isOfflineModeEnabled(): boolean {\n\tconst value = process.env.PI_OFFLINE;\n\tif (!value) return false;\n\treturn value === \"1\" || value.toLowerCase() === \"true\" || value.toLowerCase() === \"yes\";\n}\n\ninterface ToolConfig {\n\tname: string;\n\trepo: string; // GitHub repo (e.g., \"sharkdp/fd\")\n\tbinaryName: string; // Name of the binary inside the archive\n\ttagPrefix: string; // Prefix for tags (e.g., \"v\" for v1.0.0, \"\" for 1.0.0)\n\tgetAssetName: (version: string, plat: string, architecture: string) => string | null;\n}\n\nconst TOOLS: Record<string, ToolConfig> = {\n\tfd: {\n\t\tname: \"fd\",\n\t\trepo: \"sharkdp/fd\",\n\t\tbinaryName: \"fd\",\n\t\ttagPrefix: \"v\",\n\t\tgetAssetName: (version, plat, architecture) => {\n\t\t\tif (plat === \"darwin\") {\n\t\t\t\tconst archStr = architecture === \"arm64\" ? \"aarch64\" : \"x86_64\";\n\t\t\t\treturn `fd-v${version}-${archStr}-apple-darwin.tar.gz`;\n\t\t\t} else if (plat === \"linux\") {\n\t\t\t\tconst archStr = architecture === \"arm64\" ? \"aarch64\" : \"x86_64\";\n\t\t\t\treturn `fd-v${version}-${archStr}-unknown-linux-gnu.tar.gz`;\n\t\t\t} else if (plat === \"win32\") {\n\t\t\t\tconst archStr = architecture === \"arm64\" ? \"aarch64\" : \"x86_64\";\n\t\t\t\treturn `fd-v${version}-${archStr}-pc-windows-msvc.zip`;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t},\n\trg: {\n\t\tname: \"ripgrep\",\n\t\trepo: \"BurntSushi/ripgrep\",\n\t\tbinaryName: \"rg\",\n\t\ttagPrefix: \"\",\n\t\tgetAssetName: (version, plat, architecture) => {\n\t\t\tif (plat === \"darwin\") {\n\t\t\t\tconst archStr = architecture === \"arm64\" ? \"aarch64\" : \"x86_64\";\n\t\t\t\treturn `ripgrep-${version}-${archStr}-apple-darwin.tar.gz`;\n\t\t\t} else if (plat === \"linux\") {\n\t\t\t\tif (architecture === \"arm64\") {\n\t\t\t\t\treturn `ripgrep-${version}-aarch64-unknown-linux-gnu.tar.gz`;\n\t\t\t\t}\n\t\t\t\treturn `ripgrep-${version}-x86_64-unknown-linux-musl.tar.gz`;\n\t\t\t} else if (plat === \"win32\") {\n\t\t\t\tconst archStr = architecture === \"arm64\" ? \"aarch64\" : \"x86_64\";\n\t\t\t\treturn `ripgrep-${version}-${archStr}-pc-windows-msvc.zip`;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t},\n};\n\n// Check if a command exists in PATH by trying to run it\nfunction commandExists(cmd: string): boolean {\n\ttry {\n\t\tconst result = spawnSync(cmd, [\"--version\"], { stdio: \"pipe\" });\n\t\t// Check for ENOENT error (command not found)\n\t\treturn result.error === undefined || result.error === null;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n// Get the path to a tool (system-wide or in our tools dir)\nexport function getToolPath(tool: \"fd\" | \"rg\"): string | null {\n\tconst config = TOOLS[tool];\n\tif (!config) return null;\n\n\t// Check our tools directory first\n\tconst localPath = join(TOOLS_DIR, config.binaryName + (platform() === \"win32\" ? \".exe\" : \"\"));\n\tif (existsSync(localPath)) {\n\t\treturn localPath;\n\t}\n\n\t// Check system PATH - if found, just return the command name (it's in PATH)\n\tif (commandExists(config.binaryName)) {\n\t\treturn config.binaryName;\n\t}\n\n\treturn null;\n}\n\n// Fetch latest release version from GitHub\nasync function getLatestVersion(repo: string): Promise<string> {\n\tconst response = await fetch(`https://api.github.com/repos/${repo}/releases/latest`, {\n\t\theaders: { \"User-Agent\": `${APP_NAME}-coding-agent` },\n\t\tsignal: AbortSignal.timeout(NETWORK_TIMEOUT_MS),\n\t});\n\n\tif (!response.ok) {\n\t\tthrow new Error(`GitHub API error: ${response.status}`);\n\t}\n\n\tconst data = (await response.json()) as { tag_name: string };\n\treturn data.tag_name.replace(/^v/, \"\");\n}\n\n// Download a file from URL\nasync function downloadFile(url: string, dest: string): Promise<void> {\n\tconst response = await fetch(url, {\n\t\tsignal: AbortSignal.timeout(DOWNLOAD_TIMEOUT_MS),\n\t});\n\n\tif (!response.ok) {\n\t\tthrow new Error(`Failed to download: ${response.status}`);\n\t}\n\n\tif (!response.body) {\n\t\tthrow new Error(\"No response body\");\n\t}\n\n\tconst fileStream = createWriteStream(dest);\n\tawait pipeline(Readable.fromWeb(response.body as any), fileStream);\n}\n\nfunction findBinaryRecursively(rootDir: string, binaryFileName: string): string | null {\n\tconst stack: string[] = [rootDir];\n\n\twhile (stack.length > 0) {\n\t\tconst currentDir = stack.pop();\n\t\tif (!currentDir) continue;\n\n\t\tconst entries = readdirSync(currentDir, { withFileTypes: true });\n\t\tfor (const entry of entries) {\n\t\t\tconst fullPath = join(currentDir, entry.name);\n\t\t\tif (entry.isFile() && entry.name === binaryFileName) {\n\t\t\t\treturn fullPath;\n\t\t\t}\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\tstack.push(fullPath);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\n// Download and install a tool\nasync function downloadTool(tool: \"fd\" | \"rg\"): Promise<string> {\n\tconst config = TOOLS[tool];\n\tif (!config) throw new Error(`Unknown tool: ${tool}`);\n\n\tconst plat = platform();\n\tconst architecture = arch();\n\n\t// Get latest version\n\tconst version = await getLatestVersion(config.repo);\n\n\t// Get asset name for this platform\n\tconst assetName = config.getAssetName(version, plat, architecture);\n\tif (!assetName) {\n\t\tthrow new Error(`Unsupported platform: ${plat}/${architecture}`);\n\t}\n\n\t// Create tools directory\n\tmkdirSync(TOOLS_DIR, { recursive: true });\n\n\tconst downloadUrl = `https://github.com/${config.repo}/releases/download/${config.tagPrefix}${version}/${assetName}`;\n\tconst archivePath = join(TOOLS_DIR, assetName);\n\tconst binaryExt = plat === \"win32\" ? \".exe\" : \"\";\n\tconst binaryPath = join(TOOLS_DIR, config.binaryName + binaryExt);\n\n\t// Download\n\tawait downloadFile(downloadUrl, archivePath);\n\n\t// Extract into a unique temp directory. fd and rg downloads can run concurrently\n\t// during startup, so sharing a fixed directory causes races.\n\tconst extractDir = join(\n\t\tTOOLS_DIR,\n\t\t`extract_tmp_${config.binaryName}_${process.pid}_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`,\n\t);\n\tmkdirSync(extractDir, { recursive: true });\n\n\ttry {\n\t\tif (assetName.endsWith(\".tar.gz\")) {\n\t\t\tconst extractResult = spawnSync(\"tar\", [\"xzf\", archivePath, \"-C\", extractDir], { stdio: \"pipe\" });\n\t\t\tif (extractResult.error || extractResult.status !== 0) {\n\t\t\t\tconst errMsg = extractResult.error?.message ?? extractResult.stderr?.toString().trim() ?? \"unknown error\";\n\t\t\t\tthrow new Error(`Failed to extract ${assetName}: ${errMsg}`);\n\t\t\t}\n\t\t} else if (assetName.endsWith(\".zip\")) {\n\t\t\tawait extractZip(archivePath, { dir: extractDir });\n\t\t} else {\n\t\t\tthrow new Error(`Unsupported archive format: ${assetName}`);\n\t\t}\n\n\t\t// Find the binary in extracted files. Some archives contain files directly\n\t\t// at root, others nest under a versioned subdirectory.\n\t\tconst binaryFileName = config.binaryName + binaryExt;\n\t\tconst extractedDir = join(extractDir, assetName.replace(/\\.(tar\\.gz|zip)$/, \"\"));\n\t\tconst extractedBinaryCandidates = [join(extractedDir, binaryFileName), join(extractDir, binaryFileName)];\n\t\tlet extractedBinary = extractedBinaryCandidates.find((candidate) => existsSync(candidate));\n\n\t\tif (!extractedBinary) {\n\t\t\textractedBinary = findBinaryRecursively(extractDir, binaryFileName) ?? undefined;\n\t\t}\n\n\t\tif (extractedBinary) {\n\t\t\trenameSync(extractedBinary, binaryPath);\n\t\t} else {\n\t\t\tthrow new Error(`Binary not found in archive: expected ${binaryFileName} under ${extractDir}`);\n\t\t}\n\n\t\t// Make executable (Unix only)\n\t\tif (plat !== \"win32\") {\n\t\t\tchmodSync(binaryPath, 0o755);\n\t\t}\n\t} finally {\n\t\t// Cleanup\n\t\trmSync(archivePath, { force: true });\n\t\trmSync(extractDir, { recursive: true, force: true });\n\t}\n\n\treturn binaryPath;\n}\n\n// Termux package names for tools\nconst TERMUX_PACKAGES: Record<string, string> = {\n\tfd: \"fd\",\n\trg: \"ripgrep\",\n};\n\n// Ensure a tool is available, downloading if necessary\n// Returns the path to the tool, or null if unavailable\nexport async function ensureTool(tool: \"fd\" | \"rg\", silent: boolean = false): Promise<string | undefined> {\n\tconst existingPath = getToolPath(tool);\n\tif (existingPath) {\n\t\treturn existingPath;\n\t}\n\n\tconst config = TOOLS[tool];\n\tif (!config) return undefined;\n\n\tif (isOfflineModeEnabled()) {\n\t\tif (!silent) {\n\t\t\tconsole.log(chalk.yellow(`${config.name} not found. Offline mode enabled, skipping download.`));\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t// On Android/Termux, Linux binaries don't work due to Bionic libc incompatibility.\n\t// Users must install via pkg.\n\tif (platform() === \"android\") {\n\t\tconst pkgName = TERMUX_PACKAGES[tool] ?? tool;\n\t\tif (!silent) {\n\t\t\tconsole.log(chalk.yellow(`${config.name} not found. Install with: pkg install ${pkgName}`));\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t// Tool not found - download it\n\tif (!silent) {\n\t\tconsole.log(chalk.dim(`${config.name} not found. Downloading...`));\n\t}\n\n\ttry {\n\t\tconst path = await downloadTool(tool);\n\t\tif (!silent) {\n\t\t\tconsole.log(chalk.dim(`${config.name} installed to ${path}`));\n\t\t}\n\t\treturn path;\n\t} catch (e) {\n\t\tif (!silent) {\n\t\t\tconsole.log(chalk.yellow(`Failed to download ${config.name}: ${e instanceof Error ? e.message : e}`));\n\t\t}\n\t\treturn undefined;\n\t}\n}\n"]}
@@ -2,14 +2,14 @@
2
2
 
3
3
  LLMs have limited context windows. When conversations grow too long, pi uses compaction to summarize older content while preserving recent work. This page covers both auto-compaction and branch summarization.
4
4
 
5
- **Source files** ([pi-mono](https://github.com/badlogic/pi-mono)):
6
- - [`packages/coding-agent/src/core/compaction/compaction.ts`](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/compaction/compaction.ts) - Auto-compaction logic
7
- - [`packages/coding-agent/src/core/compaction/branch-summarization.ts`](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/compaction/branch-summarization.ts) - Branch summarization
8
- - [`packages/coding-agent/src/core/compaction/utils.ts`](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/compaction/utils.ts) - Shared utilities (file tracking, serialization)
9
- - [`packages/coding-agent/src/core/session-manager.ts`](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/session-manager.ts) - Entry types (`CompactionEntry`, `BranchSummaryEntry`)
10
- - [`packages/coding-agent/src/core/extensions/types.ts`](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/extensions/types.ts) - Extension event types
5
+ **Source files** ([pi-mono](https://github.com/eminent337/aery)):
6
+ - [`packages/coding-agent/src/core/compaction/compaction.ts`](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/compaction/compaction.ts) - Auto-compaction logic
7
+ - [`packages/coding-agent/src/core/compaction/branch-summarization.ts`](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/compaction/branch-summarization.ts) - Branch summarization
8
+ - [`packages/coding-agent/src/core/compaction/utils.ts`](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/compaction/utils.ts) - Shared utilities (file tracking, serialization)
9
+ - [`packages/coding-agent/src/core/session-manager.ts`](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/session-manager.ts) - Entry types (`CompactionEntry`, `BranchSummaryEntry`)
10
+ - [`packages/coding-agent/src/core/extensions/types.ts`](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/extensions/types.ts) - Extension event types
11
11
 
12
- For TypeScript definitions in your project, inspect `node_modules/@mariozechner/pi-coding-agent/dist/`.
12
+ For TypeScript definitions in your project, inspect `node_modules/@mariozechner/aery/dist/`.
13
13
 
14
14
  ## Overview
15
15
 
@@ -118,7 +118,7 @@ Never cut at tool results (they must stay with their tool call).
118
118
 
119
119
  ### CompactionEntry Structure
120
120
 
121
- Defined in [`session-manager.ts`](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/session-manager.ts):
121
+ Defined in [`session-manager.ts`](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/session-manager.ts):
122
122
 
123
123
  ```typescript
124
124
  interface CompactionEntry<T = unknown> {
@@ -142,7 +142,7 @@ interface CompactionDetails {
142
142
 
143
143
  Extensions can store any JSON-serializable data in `details`. The default compaction tracks file operations, but custom extension implementations can use their own structure.
144
144
 
145
- See [`prepareCompaction()`](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/compaction/compaction.ts) and [`compact()`](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/compaction/compaction.ts) for the implementation.
145
+ See [`prepareCompaction()`](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/compaction/compaction.ts) and [`compact()`](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/compaction/compaction.ts) for the implementation.
146
146
 
147
147
  ## Branch Summarization
148
148
 
@@ -185,7 +185,7 @@ This means file tracking accumulates across multiple compactions or nested branc
185
185
 
186
186
  ### BranchSummaryEntry Structure
187
187
 
188
- Defined in [`session-manager.ts`](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/session-manager.ts):
188
+ Defined in [`session-manager.ts`](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/session-manager.ts):
189
189
 
190
190
  ```typescript
191
191
  interface BranchSummaryEntry<T = unknown> {
@@ -208,7 +208,7 @@ interface BranchSummaryDetails {
208
208
 
209
209
  Same as compaction, extensions can store custom data in `details`.
210
210
 
211
- See [`collectEntriesForBranchSummary()`](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/compaction/branch-summarization.ts), [`prepareBranchEntries()`](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/compaction/branch-summarization.ts), and [`generateBranchSummary()`](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/compaction/branch-summarization.ts) for the implementation.
211
+ See [`collectEntriesForBranchSummary()`](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/compaction/branch-summarization.ts), [`prepareBranchEntries()`](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/compaction/branch-summarization.ts), and [`generateBranchSummary()`](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/compaction/branch-summarization.ts) for the implementation.
212
212
 
213
213
  ## Summary Format
214
214
 
@@ -252,7 +252,7 @@ path/to/changed.ts
252
252
 
253
253
  ### Message Serialization
254
254
 
255
- Before summarization, messages are serialized to text via [`serializeConversation()`](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/compaction/utils.ts):
255
+ Before summarization, messages are serialized to text via [`serializeConversation()`](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/compaction/utils.ts):
256
256
 
257
257
  ```
258
258
  [User]: What they said
@@ -268,7 +268,7 @@ Tool results are truncated to 2000 characters during serialization. Content beyo
268
268
 
269
269
  ## Custom Summarization via Extensions
270
270
 
271
- Extensions can intercept and customize both compaction and branch summarization. See [`extensions/types.ts`](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/extensions/types.ts) for event type definitions.
271
+ Extensions can intercept and customize both compaction and branch summarization. See [`extensions/types.ts`](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/extensions/types.ts) for event type definitions.
272
272
 
273
273
  ### session_before_compact
274
274
 
@@ -309,7 +309,7 @@ pi.on("session_before_compact", async (event, ctx) => {
309
309
  To generate a summary with your own model, convert messages to text using `serializeConversation`:
310
310
 
311
311
  ```typescript
312
- import { convertToLlm, serializeConversation } from "@mariozechner/pi-coding-agent";
312
+ import { convertToLlm, serializeConversation } from "@mariozechner/aery";
313
313
 
314
314
  pi.on("session_before_compact", async (event, ctx) => {
315
315
  const { preparation } = event;
@@ -31,7 +31,7 @@ See these complete provider examples:
31
31
  ## Quick Reference
32
32
 
33
33
  ```typescript
34
- import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
34
+ import type { ExtensionAPI } from "@mariozechner/aery";
35
35
 
36
36
  export default function (pi: ExtensionAPI) {
37
37
  // Override baseUrl for existing provider
@@ -96,7 +96,7 @@ To add a completely new provider, specify `models` along with the required confi
96
96
  If the model list comes from a remote endpoint, use an async extension factory:
97
97
 
98
98
  ```typescript
99
- import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
99
+ import type { ExtensionAPI } from "@mariozechner/aery";
100
100
 
101
101
  export default async function (pi: ExtensionAPI) {
102
102
  const response = await fetch("http://localhost:1234/v1/models");
@@ -345,12 +345,12 @@ interface OAuthCredentials {
345
345
  For providers with non-standard APIs, implement `streamSimple`. Study the existing provider implementations before writing your own:
346
346
 
347
347
  **Reference implementations:**
348
- - [anthropic.ts](https://github.com/badlogic/pi-mono/blob/main/packages/ai/src/providers/anthropic.ts) - Anthropic Messages API
349
- - [mistral.ts](https://github.com/badlogic/pi-mono/blob/main/packages/ai/src/providers/mistral.ts) - Mistral Conversations API
350
- - [openai-completions.ts](https://github.com/badlogic/pi-mono/blob/main/packages/ai/src/providers/openai-completions.ts) - OpenAI Chat Completions
351
- - [openai-responses.ts](https://github.com/badlogic/pi-mono/blob/main/packages/ai/src/providers/openai-responses.ts) - OpenAI Responses API
352
- - [google.ts](https://github.com/badlogic/pi-mono/blob/main/packages/ai/src/providers/google.ts) - Google Generative AI
353
- - [amazon-bedrock.ts](https://github.com/badlogic/pi-mono/blob/main/packages/ai/src/providers/amazon-bedrock.ts) - AWS Bedrock
348
+ - [anthropic.ts](https://github.com/eminent337/aery/blob/main/packages/ai/src/providers/anthropic.ts) - Anthropic Messages API
349
+ - [mistral.ts](https://github.com/eminent337/aery/blob/main/packages/ai/src/providers/mistral.ts) - Mistral Conversations API
350
+ - [openai-completions.ts](https://github.com/eminent337/aery/blob/main/packages/ai/src/providers/openai-completions.ts) - OpenAI Chat Completions
351
+ - [openai-responses.ts](https://github.com/eminent337/aery/blob/main/packages/ai/src/providers/openai-responses.ts) - OpenAI Responses API
352
+ - [google.ts](https://github.com/eminent337/aery/blob/main/packages/ai/src/providers/google.ts) - Google Generative AI
353
+ - [amazon-bedrock.ts](https://github.com/eminent337/aery/blob/main/packages/ai/src/providers/amazon-bedrock.ts) - AWS Bedrock
354
354
 
355
355
  ### Stream Pattern
356
356
 
@@ -522,7 +522,7 @@ pi.registerProvider("my-provider", {
522
522
 
523
523
  ## Testing Your Implementation
524
524
 
525
- Test your provider against the same test suites used by built-in providers. Copy and adapt these test files from [packages/ai/test/](https://github.com/badlogic/pi-mono/tree/main/packages/ai/test):
525
+ Test your provider against the same test suites used by built-in providers. Copy and adapt these test files from [packages/ai/test/](https://github.com/eminent337/aery/tree/main/packages/ai/test):
526
526
 
527
527
  | Test | Purpose |
528
528
  |------|---------|
@@ -5,7 +5,7 @@ See [AGENTS.md](../../../AGENTS.md) for additional guidelines.
5
5
  ## Setup
6
6
 
7
7
  ```bash
8
- git clone https://github.com/badlogic/pi-mono
8
+ git clone https://github.com/eminent337/aery
9
9
  cd pi-mono
10
10
  npm install
11
11
  npm run build
@@ -25,7 +25,7 @@ Configure via `package.json`:
25
25
 
26
26
  ```json
27
27
  {
28
- "piConfig": {
28
+ "aeryConfig": {
29
29
  "name": "pi",
30
30
  "configDir": ".pi"
31
31
  }
@@ -56,7 +56,7 @@ See [examples/extensions/](../examples/extensions/) for working implementations.
56
56
  Create `~/.pi/agent/extensions/my-extension.ts`:
57
57
 
58
58
  ```typescript
59
- import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
59
+ import type { ExtensionAPI } from "@mariozechner/aery";
60
60
  import { Type } from "@sinclair/typebox";
61
61
 
62
62
  export default function (pi: ExtensionAPI) {
@@ -138,7 +138,7 @@ To share extensions via npm or git as pi packages, see [packages.md](packages.md
138
138
 
139
139
  | Package | Purpose |
140
140
  |---------|---------|
141
- | `@mariozechner/pi-coding-agent` | Extension types (`ExtensionAPI`, `ExtensionContext`, events) |
141
+ | `@mariozechner/aery` | Extension types (`ExtensionAPI`, `ExtensionContext`, events) |
142
142
  | `@sinclair/typebox` | Schema definitions for tool parameters |
143
143
  | `@mariozechner/pi-ai` | AI utilities (`StringEnum` for Google-compatible enums) |
144
144
  | `@mariozechner/pi-tui` | TUI components for custom rendering |
@@ -154,7 +154,7 @@ Node.js built-ins (`node:fs`, `node:path`, etc.) are also available.
154
154
  An extension exports a default factory function that receives `ExtensionAPI`. The factory can be synchronous or asynchronous:
155
155
 
156
156
  ```typescript
157
- import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
157
+ import type { ExtensionAPI } from "@mariozechner/aery";
158
158
 
159
159
  export default function (pi: ExtensionAPI) {
160
160
  // Subscribe to events
@@ -183,7 +183,7 @@ If the factory returns a `Promise`, pi awaits it before continuing startup. That
183
183
  Use an async factory for one-time startup work such as fetching remote configuration or dynamically discovering available models.
184
184
 
185
185
  ```typescript
186
- import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
186
+ import type { ExtensionAPI } from "@mariozechner/aery";
187
187
 
188
188
  export default async function (pi: ExtensionAPI) {
189
189
  const response = await fetch("http://localhost:1234/v1/models");
@@ -635,7 +635,7 @@ Behavior guarantees:
635
635
  - Return values from `tool_call` only control blocking via `{ block: true, reason?: string }`
636
636
 
637
637
  ```typescript
638
- import { isToolCallEventType } from "@mariozechner/pi-coding-agent";
638
+ import { isToolCallEventType } from "@mariozechner/aery";
639
639
 
640
640
  pi.on("tool_call", async (event, ctx) => {
641
641
  // event.toolName - "bash", "read", "write", "edit", etc.
@@ -671,7 +671,7 @@ export type MyToolInput = Static<typeof myToolSchema>;
671
671
  Use `isToolCallEventType` with explicit type parameters:
672
672
 
673
673
  ```typescript
674
- import { isToolCallEventType } from "@mariozechner/pi-coding-agent";
674
+ import { isToolCallEventType } from "@mariozechner/aery";
675
675
  import type { MyToolInput } from "my-extension";
676
676
 
677
677
  pi.on("tool_call", (event) => {
@@ -693,7 +693,7 @@ Fired after tool execution finishes and before `tool_execution_end` plus the fin
693
693
  Use `ctx.signal` for nested async work inside the handler. This lets Esc cancel model calls, `fetch()`, and other abort-aware operations started by the extension.
694
694
 
695
695
  ```typescript
696
- import { isBashToolResult } from "@mariozechner/pi-coding-agent";
696
+ import { isBashToolResult } from "@mariozechner/aery";
697
697
 
698
698
  pi.on("tool_result", async (event, ctx) => {
699
699
  // event.toolName, event.toolCallId, event.input
@@ -721,7 +721,7 @@ pi.on("tool_result", async (event, ctx) => {
721
721
  Fired when user executes `!` or `!!` commands. **Can intercept.**
722
722
 
723
723
  ```typescript
724
- import { createLocalBashOperations } from "@mariozechner/pi-coding-agent";
724
+ import { createLocalBashOperations } from "@mariozechner/aery";
725
725
 
726
726
  pi.on("user_bash", (event, ctx) => {
727
727
  // event.command - the bash command
@@ -1002,7 +1002,7 @@ if (result.cancelled) {
1002
1002
  To discover available sessions, use the static `SessionManager.list()` or `SessionManager.listAll()` methods:
1003
1003
 
1004
1004
  ```typescript
1005
- import { SessionManager } from "@mariozechner/pi-coding-agent";
1005
+ import { SessionManager } from "@mariozechner/aery";
1006
1006
 
1007
1007
  pi.registerCommand("switch", {
1008
1008
  description: "Switch to another session",
@@ -1049,7 +1049,7 @@ Tools run with `ExtensionContext`, so they cannot call `ctx.reload()` directly.
1049
1049
  Example tool the LLM can call to trigger reload:
1050
1050
 
1051
1051
  ```typescript
1052
- import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
1052
+ import type { ExtensionAPI } from "@mariozechner/aery";
1053
1053
  import { Type } from "@sinclair/typebox";
1054
1054
 
1055
1055
  export default function (pi: ExtensionAPI) {
@@ -1540,7 +1540,7 @@ Pass the real target file path to `withFileMutationQueue()`, not the raw user ar
1540
1540
  Queue the entire mutation window on that target path. That includes read-modify-write logic, not just the final write.
1541
1541
 
1542
1542
  ```typescript
1543
- import { withFileMutationQueue } from "@mariozechner/pi-coding-agent";
1543
+ import { withFileMutationQueue } from "@mariozechner/aery";
1544
1544
  import { mkdir, readFile, writeFile } from "node:fs/promises";
1545
1545
  import { dirname, resolve } from "node:path";
1546
1546
 
@@ -1702,20 +1702,20 @@ See [examples/extensions/tool-override.ts](../examples/extensions/tool-override.
1702
1702
  **Your implementation must match the exact result shape**, including the `details` type. The UI and session logic depend on these shapes for rendering and state tracking.
1703
1703
 
1704
1704
  Built-in tool implementations:
1705
- - [read.ts](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/tools/read.ts) - `ReadToolDetails`
1706
- - [bash.ts](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/tools/bash.ts) - `BashToolDetails`
1707
- - [edit.ts](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/tools/edit.ts)
1708
- - [write.ts](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/tools/write.ts)
1709
- - [grep.ts](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/tools/grep.ts) - `GrepToolDetails`
1710
- - [find.ts](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/tools/find.ts) - `FindToolDetails`
1711
- - [ls.ts](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/tools/ls.ts) - `LsToolDetails`
1705
+ - [read.ts](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/tools/read.ts) - `ReadToolDetails`
1706
+ - [bash.ts](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/tools/bash.ts) - `BashToolDetails`
1707
+ - [edit.ts](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/tools/edit.ts)
1708
+ - [write.ts](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/tools/write.ts)
1709
+ - [grep.ts](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/tools/grep.ts) - `GrepToolDetails`
1710
+ - [find.ts](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/tools/find.ts) - `FindToolDetails`
1711
+ - [ls.ts](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/core/tools/ls.ts) - `LsToolDetails`
1712
1712
 
1713
1713
  ### Remote Execution
1714
1714
 
1715
1715
  Built-in tools support pluggable operations for delegating to remote systems (SSH, containers, etc.):
1716
1716
 
1717
1717
  ```typescript
1718
- import { createReadTool, createBashTool, type ReadOperations } from "@mariozechner/pi-coding-agent";
1718
+ import { createReadTool, createBashTool, type ReadOperations } from "@mariozechner/aery";
1719
1719
 
1720
1720
  // Create tool with custom operations
1721
1721
  const remoteRead = createReadTool(cwd, {
@@ -1746,7 +1746,7 @@ For `user_bash`, extensions can reuse pi's local shell backend via `createLocalB
1746
1746
  The bash tool also supports a spawn hook to adjust the command, cwd, or env before execution:
1747
1747
 
1748
1748
  ```typescript
1749
- import { createBashTool } from "@mariozechner/pi-coding-agent";
1749
+ import { createBashTool } from "@mariozechner/aery";
1750
1750
 
1751
1751
  const bashTool = createBashTool(cwd, {
1752
1752
  spawnHook: ({ command, cwd, env }) => ({
@@ -1776,7 +1776,7 @@ import {
1776
1776
  formatSize, // Human-readable size (e.g., "50KB", "1.5MB")
1777
1777
  DEFAULT_MAX_BYTES, // 50KB
1778
1778
  DEFAULT_MAX_LINES, // 2000
1779
- } from "@mariozechner/pi-coding-agent";
1779
+ } from "@mariozechner/aery";
1780
1780
 
1781
1781
  async execute(toolCallId, params, signal, onUpdate, ctx) {
1782
1782
  const output = await runCommand();
@@ -1831,7 +1831,7 @@ export default function (pi: ExtensionAPI) {
1831
1831
 
1832
1832
  ### Custom Rendering
1833
1833
 
1834
- Tools can provide `renderCall` and `renderResult` for custom TUI display. See [tui.md](tui.md) for the full component API and [tool-execution.ts](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/modes/interactive/components/tool-execution.ts) for how tool rows are composed.
1834
+ Tools can provide `renderCall` and `renderResult` for custom TUI display. See [tui.md](tui.md) for the full component API and [tool-execution.ts](https://github.com/eminent337/aery/blob/main/packages/coding-agent/src/modes/interactive/components/tool-execution.ts) for how tool rows are composed.
1835
1835
 
1836
1836
  By default, tool output is wrapped in a `Box` that handles padding and background. A defined `renderCall` or `renderResult` must return a `Component`. If a slot renderer is not defined, `tool-execution.ts` uses fallback rendering for that slot.
1837
1837
 
@@ -1912,7 +1912,7 @@ If a slot intentionally has no visible content, return an empty `Component` such
1912
1912
  Use `keyHint()` to display keybinding hints that respect the active keybinding configuration:
1913
1913
 
1914
1914
  ```typescript
1915
- import { keyHint } from "@mariozechner/pi-coding-agent";
1915
+ import { keyHint } from "@mariozechner/aery";
1916
1916
 
1917
1917
  renderResult(result, { expanded }, theme, context) {
1918
1918
  let text = theme.fg("success", "✓ Done");
@@ -2171,7 +2171,7 @@ See [tui.md](tui.md) for the full `OverlayOptions` API and [overlay-qa-tests.ts]
2171
2171
  Replace the main input editor with a custom implementation (vim mode, emacs mode, etc.):
2172
2172
 
2173
2173
  ```typescript
2174
- import { CustomEditor, type ExtensionAPI } from "@mariozechner/pi-coding-agent";
2174
+ import { CustomEditor, type ExtensionAPI } from "@mariozechner/aery";
2175
2175
  import { matchesKey } from "@mariozechner/pi-tui";
2176
2176
 
2177
2177
  class VimEditor extends CustomEditor {
@@ -2261,7 +2261,7 @@ theme.strikethrough(text)
2261
2261
  For syntax highlighting in custom tool renderers:
2262
2262
 
2263
2263
  ```typescript
2264
- import { highlightCode, getLanguageFromPath } from "@mariozechner/pi-coding-agent";
2264
+ import { highlightCode, getLanguageFromPath } from "@mariozechner/aery";
2265
2265
 
2266
2266
  // Highlight code with explicit language
2267
2267
  const highlighted = highlightCode("const x = 1;", "typescript", theme);