@eminent337/aery 0.67.68 → 0.74.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (762) hide show
  1. package/CHANGELOG.md +418 -5
  2. package/README.md +67 -37
  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 +9 -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/bun/restore-sandbox-env.d.ts +13 -0
  12. package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
  13. package/dist/bun/restore-sandbox-env.js +32 -0
  14. package/dist/bun/restore-sandbox-env.js.map +1 -0
  15. package/dist/cli/args.d.ts +53 -0
  16. package/dist/cli/args.d.ts.map +1 -0
  17. package/dist/cli/args.js +341 -0
  18. package/dist/cli/args.js.map +1 -0
  19. package/dist/cli/capabilities.d.ts +61 -0
  20. package/dist/cli/capabilities.d.ts.map +1 -0
  21. package/dist/cli/capabilities.js +155 -0
  22. package/dist/cli/capabilities.js.map +1 -0
  23. package/dist/cli/config-selector.d.ts +14 -0
  24. package/dist/cli/config-selector.d.ts.map +1 -0
  25. package/dist/cli/config-selector.js +31 -0
  26. package/dist/cli/config-selector.js.map +1 -0
  27. package/dist/cli/doctor.d.ts +32 -0
  28. package/dist/cli/doctor.d.ts.map +1 -0
  29. package/dist/cli/doctor.js +133 -0
  30. package/dist/cli/doctor.js.map +1 -0
  31. package/dist/cli/file-processor.d.ts +15 -0
  32. package/dist/cli/file-processor.d.ts.map +1 -0
  33. package/dist/cli/file-processor.js +83 -0
  34. package/dist/cli/file-processor.js.map +1 -0
  35. package/dist/cli/initial-message.d.ts +18 -0
  36. package/dist/cli/initial-message.d.ts.map +1 -0
  37. package/dist/cli/initial-message.js +22 -0
  38. package/dist/cli/initial-message.js.map +1 -0
  39. package/dist/cli/list-models.d.ts +9 -0
  40. package/dist/cli/list-models.d.ts.map +1 -0
  41. package/dist/cli/list-models.js +98 -0
  42. package/dist/cli/list-models.js.map +1 -0
  43. package/dist/cli/session-picker.d.ts +9 -0
  44. package/dist/cli/session-picker.d.ts.map +1 -0
  45. package/dist/cli/session-picker.js +35 -0
  46. package/dist/cli/session-picker.js.map +1 -0
  47. package/dist/cli.d.ts +3 -0
  48. package/dist/cli.d.ts.map +1 -0
  49. package/dist/cli.js +20 -0
  50. package/dist/cli.js.map +1 -0
  51. package/dist/config.d.ts +92 -0
  52. package/dist/config.d.ts.map +1 -0
  53. package/dist/config.js +399 -0
  54. package/dist/config.js.map +1 -0
  55. package/dist/core/agent-session-runtime.d.ts +117 -0
  56. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  57. package/dist/core/agent-session-runtime.js +300 -0
  58. package/dist/core/agent-session-runtime.js.map +1 -0
  59. package/dist/core/agent-session-services.d.ts +86 -0
  60. package/dist/core/agent-session-services.d.ts.map +1 -0
  61. package/dist/core/agent-session-services.js +117 -0
  62. package/dist/core/agent-session-services.js.map +1 -0
  63. package/dist/core/agent-session.d.ts +595 -0
  64. package/dist/core/agent-session.d.ts.map +1 -0
  65. package/dist/core/agent-session.js +2521 -0
  66. package/dist/core/agent-session.js.map +1 -0
  67. package/dist/core/auth-guidance.d.ts +6 -0
  68. package/dist/core/auth-guidance.d.ts.map +1 -0
  69. package/dist/core/auth-guidance.js +32 -0
  70. package/dist/core/auth-guidance.js.map +1 -0
  71. package/dist/core/auth-storage.d.ts +141 -0
  72. package/dist/core/auth-storage.d.ts.map +1 -0
  73. package/dist/core/auth-storage.js +441 -0
  74. package/dist/core/auth-storage.js.map +1 -0
  75. package/dist/core/bash-executor.d.ts +32 -0
  76. package/dist/core/bash-executor.d.ts.map +1 -0
  77. package/dist/core/bash-executor.js +111 -0
  78. package/dist/core/bash-executor.js.map +1 -0
  79. package/dist/core/compaction/branch-summarization.d.ts +88 -0
  80. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  81. package/dist/core/compaction/branch-summarization.js +243 -0
  82. package/dist/core/compaction/branch-summarization.js.map +1 -0
  83. package/dist/core/compaction/compaction.d.ts +121 -0
  84. package/dist/core/compaction/compaction.d.ts.map +1 -0
  85. package/dist/core/compaction/compaction.js +615 -0
  86. package/dist/core/compaction/compaction.js.map +1 -0
  87. package/dist/core/compaction/index.d.ts +7 -0
  88. package/dist/core/compaction/index.d.ts.map +1 -0
  89. package/dist/core/compaction/index.js +7 -0
  90. package/dist/core/compaction/index.js.map +1 -0
  91. package/dist/core/compaction/utils.d.ts +38 -0
  92. package/dist/core/compaction/utils.d.ts.map +1 -0
  93. package/dist/core/compaction/utils.js +153 -0
  94. package/dist/core/compaction/utils.js.map +1 -0
  95. package/dist/core/custom-openai-compatible.d.ts +14 -0
  96. package/dist/core/custom-openai-compatible.d.ts.map +1 -0
  97. package/dist/core/custom-openai-compatible.js +128 -0
  98. package/dist/core/custom-openai-compatible.js.map +1 -0
  99. package/dist/core/defaults.d.ts +3 -0
  100. package/dist/core/defaults.d.ts.map +1 -0
  101. package/dist/core/defaults.js +2 -0
  102. package/dist/core/defaults.js.map +1 -0
  103. package/dist/core/diagnostics.d.ts +15 -0
  104. package/dist/core/diagnostics.d.ts.map +1 -0
  105. package/dist/core/diagnostics.js +2 -0
  106. package/dist/core/diagnostics.js.map +1 -0
  107. package/dist/core/event-bus.d.ts +9 -0
  108. package/dist/core/event-bus.d.ts.map +1 -0
  109. package/dist/core/event-bus.js +25 -0
  110. package/dist/core/event-bus.js.map +1 -0
  111. package/dist/core/exec.d.ts +29 -0
  112. package/dist/core/exec.d.ts.map +1 -0
  113. package/dist/core/exec.js +75 -0
  114. package/dist/core/exec.js.map +1 -0
  115. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  116. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  117. package/dist/core/export-html/ansi-to-html.js +249 -0
  118. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  119. package/dist/core/export-html/index.d.ts +37 -0
  120. package/dist/core/export-html/index.d.ts.map +1 -0
  121. package/dist/core/export-html/index.js +224 -0
  122. package/dist/core/export-html/index.js.map +1 -0
  123. package/dist/core/export-html/template.css +1066 -0
  124. package/dist/core/export-html/template.html +55 -0
  125. package/dist/core/export-html/template.js +1834 -0
  126. package/dist/core/export-html/tool-renderer.d.ts +34 -0
  127. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  128. package/dist/core/export-html/tool-renderer.js +108 -0
  129. package/dist/core/export-html/tool-renderer.js.map +1 -0
  130. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  131. package/dist/core/export-html/vendor/marked.min.js +6 -0
  132. package/dist/core/extensions/index.d.ts +12 -0
  133. package/dist/core/extensions/index.d.ts.map +1 -0
  134. package/dist/core/extensions/index.js +9 -0
  135. package/dist/core/extensions/index.js.map +1 -0
  136. package/dist/core/extensions/loader.d.ts +24 -0
  137. package/dist/core/extensions/loader.d.ts.map +1 -0
  138. package/dist/core/extensions/loader.js +488 -0
  139. package/dist/core/extensions/loader.js.map +1 -0
  140. package/dist/core/extensions/runner.d.ts +159 -0
  141. package/dist/core/extensions/runner.d.ts.map +1 -0
  142. package/dist/core/extensions/runner.js +824 -0
  143. package/dist/core/extensions/runner.js.map +1 -0
  144. package/dist/core/extensions/types.d.ts +1173 -0
  145. package/dist/core/extensions/types.d.ts.map +1 -0
  146. package/dist/core/extensions/types.js +45 -0
  147. package/dist/core/extensions/types.js.map +1 -0
  148. package/dist/core/extensions/wrapper.d.ts +20 -0
  149. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  150. package/dist/core/extensions/wrapper.js +22 -0
  151. package/dist/core/extensions/wrapper.js.map +1 -0
  152. package/dist/core/footer-data-provider.d.ts +52 -0
  153. package/dist/core/footer-data-provider.d.ts.map +1 -0
  154. package/dist/core/footer-data-provider.js +310 -0
  155. package/dist/core/footer-data-provider.js.map +1 -0
  156. package/dist/core/index.d.ts +12 -0
  157. package/dist/core/index.d.ts.map +1 -0
  158. package/dist/core/index.js +12 -0
  159. package/dist/core/index.js.map +1 -0
  160. package/dist/core/keybindings.d.ts +353 -0
  161. package/dist/core/keybindings.d.ts.map +1 -0
  162. package/dist/core/keybindings.js +295 -0
  163. package/dist/core/keybindings.js.map +1 -0
  164. package/dist/core/messages.d.ts +77 -0
  165. package/dist/core/messages.d.ts.map +1 -0
  166. package/dist/core/messages.js +123 -0
  167. package/dist/core/messages.js.map +1 -0
  168. package/dist/core/model-registry.d.ts +150 -0
  169. package/dist/core/model-registry.d.ts.map +1 -0
  170. package/dist/core/model-registry.js +728 -0
  171. package/dist/core/model-registry.js.map +1 -0
  172. package/dist/core/model-resolver.d.ts +110 -0
  173. package/dist/core/model-resolver.d.ts.map +1 -0
  174. package/dist/core/model-resolver.js +495 -0
  175. package/dist/core/model-resolver.js.map +1 -0
  176. package/dist/core/output-guard.d.ts +6 -0
  177. package/dist/core/output-guard.d.ts.map +1 -0
  178. package/dist/core/output-guard.js +59 -0
  179. package/dist/core/output-guard.js.map +1 -0
  180. package/dist/core/package-manager.d.ts +198 -0
  181. package/dist/core/package-manager.d.ts.map +1 -0
  182. package/dist/core/package-manager.js +1975 -0
  183. package/dist/core/package-manager.js.map +1 -0
  184. package/dist/core/prompt-templates.d.ts +52 -0
  185. package/dist/core/prompt-templates.d.ts.map +1 -0
  186. package/dist/core/prompt-templates.js +250 -0
  187. package/dist/core/prompt-templates.js.map +1 -0
  188. package/dist/core/provider-display-names.d.ts +2 -0
  189. package/dist/core/provider-display-names.d.ts.map +1 -0
  190. package/dist/core/provider-display-names.js +33 -0
  191. package/dist/core/provider-display-names.js.map +1 -0
  192. package/dist/core/provider-setup-check.d.ts +14 -0
  193. package/dist/core/provider-setup-check.d.ts.map +1 -0
  194. package/dist/core/provider-setup-check.js +22 -0
  195. package/dist/core/provider-setup-check.js.map +1 -0
  196. package/dist/core/resolve-config-value.d.ts +23 -0
  197. package/dist/core/resolve-config-value.d.ts.map +1 -0
  198. package/dist/core/resolve-config-value.js +126 -0
  199. package/dist/core/resolve-config-value.js.map +1 -0
  200. package/dist/core/resource-loader.d.ts +194 -0
  201. package/dist/core/resource-loader.d.ts.map +1 -0
  202. package/dist/core/resource-loader.js +727 -0
  203. package/dist/core/resource-loader.js.map +1 -0
  204. package/dist/core/sdk.d.ts +107 -0
  205. package/dist/core/sdk.d.ts.map +1 -0
  206. package/dist/core/sdk.js +282 -0
  207. package/dist/core/sdk.js.map +1 -0
  208. package/dist/core/session-cwd.d.ts +19 -0
  209. package/dist/core/session-cwd.d.ts.map +1 -0
  210. package/dist/core/session-cwd.js +38 -0
  211. package/dist/core/session-cwd.js.map +1 -0
  212. package/dist/core/session-manager.d.ts +333 -0
  213. package/dist/core/session-manager.d.ts.map +1 -0
  214. package/dist/core/session-manager.js +1109 -0
  215. package/dist/core/session-manager.js.map +1 -0
  216. package/dist/core/settings-manager.d.ts +261 -0
  217. package/dist/core/settings-manager.d.ts.map +1 -0
  218. package/dist/core/settings-manager.js +782 -0
  219. package/dist/core/settings-manager.js.map +1 -0
  220. package/dist/core/skills.d.ts +60 -0
  221. package/dist/core/skills.d.ts.map +1 -0
  222. package/dist/core/skills.js +404 -0
  223. package/dist/core/skills.js.map +1 -0
  224. package/dist/core/slash-commands.d.ts +14 -0
  225. package/dist/core/slash-commands.d.ts.map +1 -0
  226. package/dist/core/slash-commands.js +25 -0
  227. package/dist/core/slash-commands.js.map +1 -0
  228. package/dist/core/source-info.d.ts +18 -0
  229. package/dist/core/source-info.d.ts.map +1 -0
  230. package/dist/core/source-info.js +19 -0
  231. package/dist/core/source-info.js.map +1 -0
  232. package/dist/core/system-prompt.d.ts +28 -0
  233. package/dist/core/system-prompt.d.ts.map +1 -0
  234. package/dist/core/system-prompt.js +120 -0
  235. package/dist/core/system-prompt.js.map +1 -0
  236. package/dist/core/telemetry.d.ts +3 -0
  237. package/dist/core/telemetry.d.ts.map +1 -0
  238. package/dist/core/telemetry.js +9 -0
  239. package/dist/core/telemetry.js.map +1 -0
  240. package/dist/core/timings.d.ts +8 -0
  241. package/dist/core/timings.d.ts.map +1 -0
  242. package/dist/core/timings.js +31 -0
  243. package/dist/core/timings.js.map +1 -0
  244. package/dist/core/tools/bash.d.ts +68 -0
  245. package/dist/core/tools/bash.d.ts.map +1 -0
  246. package/dist/core/tools/bash.js +335 -0
  247. package/dist/core/tools/bash.js.map +1 -0
  248. package/dist/core/tools/edit-diff.d.ts +85 -0
  249. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  250. package/dist/core/tools/edit-diff.js +338 -0
  251. package/dist/core/tools/edit-diff.js.map +1 -0
  252. package/dist/core/tools/edit.d.ts +49 -0
  253. package/dist/core/tools/edit.d.ts.map +1 -0
  254. package/dist/core/tools/edit.js +324 -0
  255. package/dist/core/tools/edit.js.map +1 -0
  256. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  257. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  258. package/dist/core/tools/file-mutation-queue.js +37 -0
  259. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  260. package/dist/core/tools/find.d.ts +35 -0
  261. package/dist/core/tools/find.d.ts.map +1 -0
  262. package/dist/core/tools/find.js +298 -0
  263. package/dist/core/tools/find.js.map +1 -0
  264. package/dist/core/tools/grep.d.ts +37 -0
  265. package/dist/core/tools/grep.d.ts.map +1 -0
  266. package/dist/core/tools/grep.js +304 -0
  267. package/dist/core/tools/grep.js.map +1 -0
  268. package/dist/core/tools/index.d.ts +40 -0
  269. package/dist/core/tools/index.d.ts.map +1 -0
  270. package/dist/core/tools/index.js +112 -0
  271. package/dist/core/tools/index.js.map +1 -0
  272. package/dist/core/tools/ls.d.ts +37 -0
  273. package/dist/core/tools/ls.d.ts.map +1 -0
  274. package/dist/core/tools/ls.js +169 -0
  275. package/dist/core/tools/ls.js.map +1 -0
  276. package/dist/core/tools/output-accumulator.d.ts +50 -0
  277. package/dist/core/tools/output-accumulator.d.ts.map +1 -0
  278. package/dist/core/tools/output-accumulator.js +178 -0
  279. package/dist/core/tools/output-accumulator.js.map +1 -0
  280. package/dist/core/tools/path-utils.d.ts +8 -0
  281. package/dist/core/tools/path-utils.d.ts.map +1 -0
  282. package/dist/core/tools/path-utils.js +81 -0
  283. package/dist/core/tools/path-utils.js.map +1 -0
  284. package/dist/core/tools/read.d.ts +35 -0
  285. package/dist/core/tools/read.d.ts.map +1 -0
  286. package/dist/core/tools/read.js +289 -0
  287. package/dist/core/tools/read.js.map +1 -0
  288. package/dist/core/tools/render-utils.d.ts +21 -0
  289. package/dist/core/tools/render-utils.d.ts.map +1 -0
  290. package/dist/core/tools/render-utils.js +49 -0
  291. package/dist/core/tools/render-utils.js.map +1 -0
  292. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  293. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  294. package/dist/core/tools/tool-definition-wrapper.js +34 -0
  295. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  296. package/dist/core/tools/truncate.d.ts +70 -0
  297. package/dist/core/tools/truncate.d.ts.map +1 -0
  298. package/dist/core/tools/truncate.js +205 -0
  299. package/dist/core/tools/truncate.js.map +1 -0
  300. package/dist/core/tools/write.d.ts +26 -0
  301. package/dist/core/tools/write.d.ts.map +1 -0
  302. package/dist/core/tools/write.js +213 -0
  303. package/dist/core/tools/write.js.map +1 -0
  304. package/dist/index.d.ts +28 -0
  305. package/dist/index.d.ts.map +1 -0
  306. package/dist/index.js +41 -0
  307. package/dist/index.js.map +1 -0
  308. package/dist/main.d.ts +12 -0
  309. package/dist/main.d.ts.map +1 -0
  310. package/dist/main.js +583 -0
  311. package/dist/main.js.map +1 -0
  312. package/dist/migrations.d.ts +61 -0
  313. package/dist/migrations.d.ts.map +1 -0
  314. package/dist/migrations.js +456 -0
  315. package/dist/migrations.js.map +1 -0
  316. package/dist/modes/index.d.ts +9 -0
  317. package/dist/modes/index.d.ts.map +1 -0
  318. package/dist/modes/index.js +8 -0
  319. package/dist/modes/index.js.map +1 -0
  320. package/dist/modes/interactive/assets/clankolas.png +0 -0
  321. package/dist/modes/interactive/components/armin.d.ts +34 -0
  322. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  323. package/dist/modes/interactive/components/armin.js +333 -0
  324. package/dist/modes/interactive/components/armin.js.map +1 -0
  325. package/dist/modes/interactive/components/assistant-message.d.ts +20 -0
  326. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  327. package/dist/modes/interactive/components/assistant-message.js +121 -0
  328. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  329. package/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  330. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  331. package/dist/modes/interactive/components/bash-execution.js +175 -0
  332. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  333. package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  334. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  335. package/dist/modes/interactive/components/bordered-loader.js +54 -0
  336. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  337. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  338. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  339. package/dist/modes/interactive/components/branch-summary-message.js +44 -0
  340. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  341. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  342. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  343. package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  344. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  345. package/dist/modes/interactive/components/config-selector.d.ts +71 -0
  346. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  347. package/dist/modes/interactive/components/config-selector.js +503 -0
  348. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  349. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  350. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  351. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  352. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  353. package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  354. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  355. package/dist/modes/interactive/components/custom-editor.js +70 -0
  356. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  357. package/dist/modes/interactive/components/custom-message.d.ts +20 -0
  358. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  359. package/dist/modes/interactive/components/custom-message.js +79 -0
  360. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  361. package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  362. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  363. package/dist/modes/interactive/components/daxnuts.js +140 -0
  364. package/dist/modes/interactive/components/daxnuts.js.map +1 -0
  365. package/dist/modes/interactive/components/diff.d.ts +12 -0
  366. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  367. package/dist/modes/interactive/components/diff.js +133 -0
  368. package/dist/modes/interactive/components/diff.js.map +1 -0
  369. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  370. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  371. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  372. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  373. package/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  374. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -0
  375. package/dist/modes/interactive/components/earendil-announcement.js +40 -0
  376. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -0
  377. package/dist/modes/interactive/components/extension-editor.d.ts +20 -0
  378. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  379. package/dist/modes/interactive/components/extension-editor.js +111 -0
  380. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  381. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  382. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  383. package/dist/modes/interactive/components/extension-input.js +61 -0
  384. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  385. package/dist/modes/interactive/components/extension-selector.d.ts +26 -0
  386. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  387. package/dist/modes/interactive/components/extension-selector.js +83 -0
  388. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  389. package/dist/modes/interactive/components/footer.d.ts +27 -0
  390. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  391. package/dist/modes/interactive/components/footer.js +201 -0
  392. package/dist/modes/interactive/components/footer.js.map +1 -0
  393. package/dist/modes/interactive/components/index.d.ts +32 -0
  394. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  395. package/dist/modes/interactive/components/index.js +33 -0
  396. package/dist/modes/interactive/components/index.js.map +1 -0
  397. package/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  398. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  399. package/dist/modes/interactive/components/keybinding-hints.js +36 -0
  400. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  401. package/dist/modes/interactive/components/login-dialog.d.ts +46 -0
  402. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  403. package/dist/modes/interactive/components/login-dialog.js +160 -0
  404. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  405. package/dist/modes/interactive/components/model-selector.d.ts +47 -0
  406. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  407. package/dist/modes/interactive/components/model-selector.js +278 -0
  408. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  409. package/dist/modes/interactive/components/oauth-selector.d.ts +31 -0
  410. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  411. package/dist/modes/interactive/components/oauth-selector.js +165 -0
  412. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  413. package/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
  414. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  415. package/dist/modes/interactive/components/scoped-models-selector.js +290 -0
  416. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  417. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  418. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  419. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  420. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  421. package/dist/modes/interactive/components/session-selector.d.ts +96 -0
  422. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  423. package/dist/modes/interactive/components/session-selector.js +861 -0
  424. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  425. package/dist/modes/interactive/components/settings-selector.d.ts +67 -0
  426. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  427. package/dist/modes/interactive/components/settings-selector.js +375 -0
  428. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  429. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  430. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  431. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  432. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  433. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  434. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  435. package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  436. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  437. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  438. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  439. package/dist/modes/interactive/components/theme-selector.js +50 -0
  440. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  441. package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  442. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  443. package/dist/modes/interactive/components/thinking-selector.js +51 -0
  444. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  445. package/dist/modes/interactive/components/tool-execution.d.ts +63 -0
  446. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  447. package/dist/modes/interactive/components/tool-execution.js +295 -0
  448. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  449. package/dist/modes/interactive/components/tree-selector.d.ts +89 -0
  450. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  451. package/dist/modes/interactive/components/tree-selector.js +1093 -0
  452. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  453. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  454. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  455. package/dist/modes/interactive/components/user-message-selector.js +114 -0
  456. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  457. package/dist/modes/interactive/components/user-message.d.ts +10 -0
  458. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  459. package/dist/modes/interactive/components/user-message.js +29 -0
  460. package/dist/modes/interactive/components/user-message.js.map +1 -0
  461. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  462. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  463. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  464. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  465. package/dist/modes/interactive/interactive-mode.d.ts +369 -0
  466. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  467. package/dist/modes/interactive/interactive-mode.js +4612 -0
  468. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  469. package/dist/modes/interactive/theme/aery.json +84 -0
  470. package/dist/modes/interactive/theme/catppuccin-mocha.json +81 -0
  471. package/dist/modes/interactive/theme/dark.json +85 -0
  472. package/dist/modes/interactive/theme/dracula.json +81 -0
  473. package/dist/modes/interactive/theme/light.json +84 -0
  474. package/dist/modes/interactive/theme/nord.json +81 -0
  475. package/dist/modes/interactive/theme/theme-schema.json +335 -0
  476. package/dist/modes/interactive/theme/theme.d.ts +81 -0
  477. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  478. package/dist/modes/interactive/theme/theme.js +973 -0
  479. package/dist/modes/interactive/theme/theme.js.map +1 -0
  480. package/dist/modes/interactive/theme/tokyo-night.json +81 -0
  481. package/dist/modes/print-mode.d.ts +28 -0
  482. package/dist/modes/print-mode.d.ts.map +1 -0
  483. package/dist/modes/print-mode.js +131 -0
  484. package/dist/modes/print-mode.js.map +1 -0
  485. package/dist/modes/rpc/jsonl.d.ts +17 -0
  486. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  487. package/dist/modes/rpc/jsonl.js +49 -0
  488. package/dist/modes/rpc/jsonl.js.map +1 -0
  489. package/dist/modes/rpc/rpc-client.d.ts +224 -0
  490. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  491. package/dist/modes/rpc/rpc-client.js +410 -0
  492. package/dist/modes/rpc/rpc-client.js.map +1 -0
  493. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  494. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  495. package/dist/modes/rpc/rpc-mode.js +601 -0
  496. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  497. package/dist/modes/rpc/rpc-types.d.ts +419 -0
  498. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  499. package/dist/modes/rpc/rpc-types.js +8 -0
  500. package/dist/modes/rpc/rpc-types.js.map +1 -0
  501. package/dist/package-manager-cli.d.ts +4 -0
  502. package/dist/package-manager-cli.d.ts.map +1 -0
  503. package/dist/package-manager-cli.js +460 -0
  504. package/dist/package-manager-cli.js.map +1 -0
  505. package/dist/utils/aery-user-agent.d.ts +2 -0
  506. package/dist/utils/aery-user-agent.d.ts.map +1 -0
  507. package/dist/utils/aery-user-agent.js +5 -0
  508. package/dist/utils/aery-user-agent.js.map +1 -0
  509. package/dist/utils/ansi.d.ts +2 -0
  510. package/dist/utils/ansi.d.ts.map +1 -0
  511. package/dist/utils/ansi.js +52 -0
  512. package/dist/utils/ansi.js.map +1 -0
  513. package/dist/utils/changelog.d.ts +21 -0
  514. package/dist/utils/changelog.d.ts.map +1 -0
  515. package/dist/utils/changelog.js +87 -0
  516. package/dist/utils/changelog.js.map +1 -0
  517. package/dist/utils/child-process.d.ts +12 -0
  518. package/dist/utils/child-process.d.ts.map +1 -0
  519. package/dist/utils/child-process.js +86 -0
  520. package/dist/utils/child-process.js.map +1 -0
  521. package/dist/utils/clipboard-image.d.ts +11 -0
  522. package/dist/utils/clipboard-image.d.ts.map +1 -0
  523. package/dist/utils/clipboard-image.js +245 -0
  524. package/dist/utils/clipboard-image.js.map +1 -0
  525. package/dist/utils/clipboard-native.d.ts +8 -0
  526. package/dist/utils/clipboard-native.d.ts.map +1 -0
  527. package/dist/utils/clipboard-native.js +14 -0
  528. package/dist/utils/clipboard-native.js.map +1 -0
  529. package/dist/utils/clipboard.d.ts +2 -0
  530. package/dist/utils/clipboard.d.ts.map +1 -0
  531. package/dist/utils/clipboard.js +117 -0
  532. package/dist/utils/clipboard.js.map +1 -0
  533. package/dist/utils/exif-orientation.d.ts +5 -0
  534. package/dist/utils/exif-orientation.d.ts.map +1 -0
  535. package/dist/utils/exif-orientation.js +158 -0
  536. package/dist/utils/exif-orientation.js.map +1 -0
  537. package/dist/utils/frontmatter.d.ts +8 -0
  538. package/dist/utils/frontmatter.d.ts.map +1 -0
  539. package/dist/utils/frontmatter.js +26 -0
  540. package/dist/utils/frontmatter.js.map +1 -0
  541. package/dist/utils/fs-watch.d.ts +5 -0
  542. package/dist/utils/fs-watch.d.ts.map +1 -0
  543. package/dist/utils/fs-watch.js +25 -0
  544. package/dist/utils/fs-watch.js.map +1 -0
  545. package/dist/utils/git.d.ts +26 -0
  546. package/dist/utils/git.d.ts.map +1 -0
  547. package/dist/utils/git.js +163 -0
  548. package/dist/utils/git.js.map +1 -0
  549. package/dist/utils/html.d.ts +7 -0
  550. package/dist/utils/html.d.ts.map +1 -0
  551. package/dist/utils/html.js +40 -0
  552. package/dist/utils/html.js.map +1 -0
  553. package/dist/utils/image-convert.d.ts +9 -0
  554. package/dist/utils/image-convert.d.ts.map +1 -0
  555. package/dist/utils/image-convert.js +39 -0
  556. package/dist/utils/image-convert.js.map +1 -0
  557. package/dist/utils/image-resize.d.ts +36 -0
  558. package/dist/utils/image-resize.d.ts.map +1 -0
  559. package/dist/utils/image-resize.js +137 -0
  560. package/dist/utils/image-resize.js.map +1 -0
  561. package/dist/utils/mime.d.ts +3 -0
  562. package/dist/utils/mime.d.ts.map +1 -0
  563. package/dist/utils/mime.js +69 -0
  564. package/dist/utils/mime.js.map +1 -0
  565. package/dist/utils/paths.d.ts +16 -0
  566. package/dist/utils/paths.d.ts.map +1 -0
  567. package/dist/utils/paths.js +50 -0
  568. package/dist/utils/paths.js.map +1 -0
  569. package/dist/utils/photon.d.ts +21 -0
  570. package/dist/utils/photon.d.ts.map +1 -0
  571. package/dist/utils/photon.js +121 -0
  572. package/dist/utils/photon.js.map +1 -0
  573. package/dist/utils/pi-user-agent.d.ts +2 -0
  574. package/dist/utils/pi-user-agent.d.ts.map +1 -0
  575. package/dist/utils/pi-user-agent.js +5 -0
  576. package/dist/utils/pi-user-agent.js.map +1 -0
  577. package/dist/utils/shell.d.ts +30 -0
  578. package/dist/utils/shell.d.ts.map +1 -0
  579. package/dist/utils/shell.js +190 -0
  580. package/dist/utils/shell.js.map +1 -0
  581. package/dist/utils/sleep.d.ts +5 -0
  582. package/dist/utils/sleep.d.ts.map +1 -0
  583. package/dist/utils/sleep.js +17 -0
  584. package/dist/utils/sleep.js.map +1 -0
  585. package/dist/utils/syntax-highlight.d.ts +12 -0
  586. package/dist/utils/syntax-highlight.d.ts.map +1 -0
  587. package/dist/utils/syntax-highlight.js +118 -0
  588. package/dist/utils/syntax-highlight.js.map +1 -0
  589. package/dist/utils/tools-manager.d.ts +3 -0
  590. package/dist/utils/tools-manager.d.ts.map +1 -0
  591. package/dist/utils/tools-manager.js +325 -0
  592. package/dist/utils/tools-manager.js.map +1 -0
  593. package/dist/utils/uuid.d.ts +2 -0
  594. package/dist/utils/uuid.d.ts.map +1 -0
  595. package/dist/utils/uuid.js +40 -0
  596. package/dist/utils/uuid.js.map +1 -0
  597. package/dist/utils/version-check.d.ts +14 -0
  598. package/dist/utils/version-check.d.ts.map +1 -0
  599. package/dist/utils/version-check.js +77 -0
  600. package/dist/utils/version-check.js.map +1 -0
  601. package/docs/compaction.md +17 -17
  602. package/docs/custom-provider.md +42 -33
  603. package/docs/development.md +4 -4
  604. package/docs/docs.json +148 -0
  605. package/docs/extensions.md +308 -80
  606. package/docs/images/doom-extension.png +0 -0
  607. package/docs/images/exy.png +0 -0
  608. package/docs/images/interactive-mode.png +0 -0
  609. package/docs/images/tree-view.png +0 -0
  610. package/docs/index.md +70 -0
  611. package/docs/json.md +4 -4
  612. package/docs/keybindings.md +2 -2
  613. package/docs/models.md +84 -5
  614. package/docs/packages.md +15 -10
  615. package/docs/prompt-templates.md +2 -2
  616. package/docs/providers.md +68 -20
  617. package/docs/quickstart.md +142 -0
  618. package/docs/rpc.md +6 -6
  619. package/docs/sdk.md +58 -78
  620. package/docs/{session.md → session-format.md} +8 -8
  621. package/docs/sessions.md +137 -0
  622. package/docs/settings.md +49 -17
  623. package/docs/shell-aliases.md +1 -1
  624. package/docs/skills.md +4 -4
  625. package/docs/terminal-setup.md +2 -2
  626. package/docs/termux.md +6 -6
  627. package/docs/themes.md +6 -6
  628. package/docs/tmux.md +0 -0
  629. package/docs/tui.md +22 -22
  630. package/docs/usage.md +277 -0
  631. package/docs/windows.md +1 -1
  632. package/examples/README.md +0 -0
  633. package/examples/extensions/README.md +6 -6
  634. package/examples/extensions/antigravity-image-gen.ts +18 -18
  635. package/examples/extensions/auto-commit-on-exit.ts +1 -1
  636. package/examples/extensions/bash-spawn-hook.ts +3 -3
  637. package/examples/extensions/bookmark.ts +1 -1
  638. package/examples/extensions/border-status-editor.ts +145 -0
  639. package/examples/extensions/built-in-tool-renderer.ts +3 -3
  640. package/examples/extensions/claude-rules.ts +2 -2
  641. package/examples/extensions/commands.ts +2 -2
  642. package/examples/extensions/confirm-destructive.ts +1 -1
  643. package/examples/extensions/custom-compaction.ts +3 -3
  644. package/examples/extensions/custom-footer.ts +3 -3
  645. package/examples/extensions/custom-header.ts +2 -2
  646. package/examples/extensions/custom-provider-anthropic/index.ts +2 -2
  647. package/examples/extensions/custom-provider-anthropic/package-lock.json +4 -4
  648. package/examples/extensions/custom-provider-anthropic/package.json +2 -2
  649. package/examples/extensions/custom-provider-gitlab-duo/index.ts +2 -2
  650. package/examples/extensions/custom-provider-gitlab-duo/package.json +2 -2
  651. package/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
  652. package/examples/extensions/custom-provider-qwen-cli/index.ts +3 -3
  653. package/examples/extensions/custom-provider-qwen-cli/package.json +2 -2
  654. package/examples/extensions/dirty-repo-guard.ts +1 -1
  655. package/examples/extensions/doom-overlay/README.md +0 -0
  656. package/examples/extensions/doom-overlay/doom/build/doom.js +0 -0
  657. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +0 -0
  658. package/examples/extensions/doom-overlay/doom-component.ts +2 -2
  659. package/examples/extensions/doom-overlay/doom-engine.ts +0 -0
  660. package/examples/extensions/doom-overlay/doom-keys.ts +1 -1
  661. package/examples/extensions/doom-overlay/index.ts +1 -1
  662. package/examples/extensions/doom-overlay/wad-finder.ts +0 -0
  663. package/examples/extensions/dynamic-resources/SKILL.md +0 -0
  664. package/examples/extensions/dynamic-resources/dynamic.json +1 -1
  665. package/examples/extensions/dynamic-resources/dynamic.md +0 -0
  666. package/examples/extensions/dynamic-resources/index.ts +1 -1
  667. package/examples/extensions/dynamic-tools.ts +3 -3
  668. package/examples/extensions/event-bus.ts +1 -1
  669. package/examples/extensions/file-trigger.ts +1 -1
  670. package/examples/extensions/git-checkpoint.ts +1 -1
  671. package/examples/extensions/github-issue-autocomplete.ts +185 -0
  672. package/examples/extensions/handoff.ts +52 -14
  673. package/examples/extensions/hello.ts +2 -2
  674. package/examples/extensions/hidden-thinking-label.ts +1 -1
  675. package/examples/extensions/inline-bash.ts +1 -1
  676. package/examples/extensions/input-transform.ts +1 -1
  677. package/examples/extensions/interactive-shell.ts +1 -1
  678. package/examples/extensions/mac-system-theme.ts +1 -1
  679. package/examples/extensions/message-renderer.ts +2 -2
  680. package/examples/extensions/minimal-mode.ts +3 -3
  681. package/examples/extensions/modal-editor.ts +2 -2
  682. package/examples/extensions/model-status.ts +1 -1
  683. package/examples/extensions/notify.ts +1 -1
  684. package/examples/extensions/overlay-qa-tests.ts +3 -3
  685. package/examples/extensions/overlay-test.ts +2 -2
  686. package/examples/extensions/permission-gate.ts +1 -1
  687. package/examples/extensions/pirate.ts +2 -2
  688. package/examples/extensions/plan-mode/README.md +0 -0
  689. package/examples/extensions/plan-mode/index.ts +4 -4
  690. package/examples/extensions/plan-mode/utils.ts +0 -0
  691. package/examples/extensions/preset.ts +15 -9
  692. package/examples/extensions/prompt-customizer.ts +97 -0
  693. package/examples/extensions/protected-paths.ts +1 -1
  694. package/examples/extensions/provider-payload.ts +2 -2
  695. package/examples/extensions/qna.ts +3 -3
  696. package/examples/extensions/question.ts +3 -3
  697. package/examples/extensions/questionnaire.ts +3 -3
  698. package/examples/extensions/rainbow-editor.ts +1 -1
  699. package/examples/extensions/reload-runtime.ts +2 -2
  700. package/examples/extensions/rpc-demo.ts +1 -1
  701. package/examples/extensions/sandbox/index.ts +8 -8
  702. package/examples/extensions/sandbox/package-lock.json +7 -7
  703. package/examples/extensions/sandbox/package.json +2 -2
  704. package/examples/extensions/send-user-message.ts +1 -1
  705. package/examples/extensions/session-name.ts +1 -1
  706. package/examples/extensions/shutdown-command.ts +2 -2
  707. package/examples/extensions/snake.ts +2 -2
  708. package/examples/extensions/space-invaders.ts +2 -2
  709. package/examples/extensions/ssh.ts +2 -2
  710. package/examples/extensions/status-line.ts +1 -1
  711. package/examples/extensions/stitch.ts +168 -0
  712. package/examples/extensions/structured-output.ts +65 -0
  713. package/examples/extensions/subagent/README.md +11 -11
  714. package/examples/extensions/subagent/agents/aery-agent.md +22 -0
  715. package/examples/extensions/subagent/agents/aery-ai.md +25 -0
  716. package/examples/extensions/subagent/agents/aery-core.md +19 -0
  717. package/examples/extensions/subagent/agents/aery-mom.md +25 -0
  718. package/examples/extensions/subagent/agents/aery-pods.md +24 -0
  719. package/examples/extensions/subagent/agents/aery-review.md +22 -0
  720. package/examples/extensions/subagent/agents/aery-tui.md +24 -0
  721. package/examples/extensions/subagent/agents/planner.md +0 -0
  722. package/examples/extensions/subagent/agents/reviewer.md +0 -0
  723. package/examples/extensions/subagent/agents/scout.md +0 -0
  724. package/examples/extensions/subagent/agents/worker.md +0 -0
  725. package/examples/extensions/subagent/agents.ts +2 -2
  726. package/examples/extensions/subagent/index.ts +9 -9
  727. package/examples/extensions/subagent/prompts/implement-and-review.md +0 -0
  728. package/examples/extensions/subagent/prompts/implement.md +0 -0
  729. package/examples/extensions/subagent/prompts/scout-and-plan.md +0 -0
  730. package/examples/extensions/summarize.ts +4 -4
  731. package/examples/extensions/system-prompt-header.ts +1 -1
  732. package/examples/extensions/tic-tac-toe.ts +4 -4
  733. package/examples/extensions/timed-confirm.ts +1 -1
  734. package/examples/extensions/titlebar-spinner.ts +1 -1
  735. package/examples/extensions/todo.ts +4 -4
  736. package/examples/extensions/tool-override.ts +3 -3
  737. package/examples/extensions/tools.ts +4 -4
  738. package/examples/extensions/trigger-compact.ts +1 -1
  739. package/examples/extensions/truncated-tool.ts +4 -4
  740. package/examples/extensions/widget-placement.ts +1 -1
  741. package/examples/extensions/with-deps/index.ts +2 -2
  742. package/examples/extensions/with-deps/package-lock.json +4 -4
  743. package/examples/extensions/with-deps/package.json +2 -2
  744. package/examples/extensions/working-indicator.ts +1 -1
  745. package/examples/extensions/working-message-test.ts +25 -0
  746. package/examples/rpc-extension-ui.ts +1 -1
  747. package/examples/sdk/01-minimal.ts +16 -12
  748. package/examples/sdk/02-custom-model.ts +14 -10
  749. package/examples/sdk/03-custom-prompt.ts +26 -18
  750. package/examples/sdk/04-skills.ts +4 -4
  751. package/examples/sdk/05-tools.ts +9 -5
  752. package/examples/sdk/06-extensions.ts +15 -11
  753. package/examples/sdk/07-context-files.ts +3 -3
  754. package/examples/sdk/08-prompt-templates.ts +4 -4
  755. package/examples/sdk/09-api-keys-and-oauth.ts +11 -7
  756. package/examples/sdk/10-settings.ts +5 -5
  757. package/examples/sdk/11-sessions.ts +5 -1
  758. package/examples/sdk/12-full-control.ts +13 -9
  759. package/examples/sdk/13-session-runtime.ts +1 -1
  760. package/examples/sdk/README.md +8 -11
  761. package/package.json +94 -101
  762. package/docs/tree.md +0 -233
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/cli/capabilities.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from \"chalk\";\nimport { VERSION } from \"../config.js\";\nimport type { AgentSession } from \"../core/agent-session.js\";\nimport type { AgentSessionServices } from \"../core/agent-session-services.js\";\nimport { BUILTIN_SLASH_COMMANDS } from \"../core/slash-commands.js\";\n\nconst BUILT_IN_TOOL_NAMES = [\"read\", \"bash\", \"edit\", \"write\", \"grep\", \"find\", \"ls\"] as const;\n\nexport interface CapabilitiesReport {\n\tversion: string;\n\tcwd: string;\n\tcurrentModel?: {\n\t\tprovider: string;\n\t\tid: string;\n\t\tthinkingLevel: string;\n\t\tsupportsImages: boolean;\n\t\tsupportsThinking: boolean;\n\t};\n\tproviders: {\n\t\ttotal: number;\n\t\tconfigured: string[];\n\t};\n\tmodels: {\n\t\ttotal: number;\n\t\tavailable: number;\n\t};\n\ttools: {\n\t\tbuiltIn: string[];\n\t\tactive: string[];\n\t\tregistered: string[];\n\t};\n\tcommands: {\n\t\tbuiltIn: string[];\n\t\textension: string[];\n\t\tprompt: string[];\n\t\tskill: string[];\n\t};\n\tresources: {\n\t\textensions: number;\n\t\textensionNames: string[];\n\t\textensionErrors: number;\n\t\textensionLoadErrors: Array<{ path: string; error: string }>;\n\t\tskills: number;\n\t\tprompts: number;\n\t\tthemes: number;\n\t\tcontextFiles: number;\n\t};\n\tsession: {\n\t\tpersisted: boolean;\n\t\tsessionId?: string;\n\t\tmessages: number;\n\t\ttoolCalls: number;\n\t\tcontextPercent?: number | null;\n\t};\n}\n\nexport interface CollectCapabilitiesOptions {\n\tsession: AgentSession;\n\tservices: AgentSessionServices;\n\tversion?: string;\n}\n\nfunction formatList(values: string[]): string {\n\treturn values.length > 0 ? values.join(\", \") : \"none\";\n}\n\nfunction countLabel(count: number, singular: string, plural = `${singular}s`): string {\n\treturn `${count} ${count === 1 ? singular : plural}`;\n}\n\nfunction formatExtensionName(extensionPath: string): string {\n\tconst coreMarker = \"/core/\";\n\tconst coreIndex = extensionPath.lastIndexOf(coreMarker);\n\tconst raw =\n\t\tcoreIndex >= 0\n\t\t\t? extensionPath.slice(coreIndex + coreMarker.length)\n\t\t\t: (extensionPath.split(\"/\").pop() ?? extensionPath);\n\treturn raw.replace(/\\.ts$/, \"\");\n}\n\nexport function collectCapabilitiesReport(options: CollectCapabilitiesOptions): CapabilitiesReport {\n\tconst { session, services } = options;\n\tconst model = session.model;\n\tconst allModels = services.modelRegistry.getAll();\n\tconst availableModels = services.modelRegistry.getAvailable();\n\tconst providers = [...new Set(allModels.map((item) => item.provider))].sort();\n\tconst configuredProviders = providers\n\t\t.filter((provider) => services.modelRegistry.getProviderAuthStatus(provider).configured)\n\t\t.sort();\n\n\tconst extensionsResult = services.resourceLoader.getExtensions();\n\tconst extensionNames = extensionsResult.extensions.map((extension) => formatExtensionName(extension.path)).sort();\n\tconst extensionCommands = extensionsResult.extensions.flatMap((extension) => Array.from(extension.commands.keys()));\n\tconst extensionTools = extensionsResult.extensions.flatMap((extension) => Array.from(extension.tools.keys()));\n\tconst promptCommands = services.resourceLoader.getPrompts().prompts.map((prompt) => prompt.name);\n\tconst skillCommands = services.resourceLoader.getSkills().skills.map((skill) => `skill:${skill.name}`);\n\tconst stats = session.getSessionStats();\n\n\treturn {\n\t\tversion: options.version ?? VERSION,\n\t\tcwd: services.cwd,\n\t\tcurrentModel: model\n\t\t\t? {\n\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\tid: model.id,\n\t\t\t\t\tthinkingLevel: session.thinkingLevel,\n\t\t\t\t\tsupportsImages: model.input.includes(\"image\"),\n\t\t\t\t\tsupportsThinking: !!model.reasoning,\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tproviders: {\n\t\t\ttotal: providers.length,\n\t\t\tconfigured: configuredProviders,\n\t\t},\n\t\tmodels: {\n\t\t\ttotal: allModels.length,\n\t\t\tavailable: availableModels.length,\n\t\t},\n\t\ttools: {\n\t\t\tbuiltIn: Array.from(BUILT_IN_TOOL_NAMES),\n\t\t\tactive: session.getActiveToolNames(),\n\t\t\tregistered: [...new Set([...session.getAllTools().map((tool) => tool.name), ...extensionTools])].sort(),\n\t\t},\n\t\tcommands: {\n\t\t\tbuiltIn: BUILTIN_SLASH_COMMANDS.map((command) => command.name),\n\t\t\textension: [...new Set(extensionCommands)].sort(),\n\t\t\tprompt: [...new Set(promptCommands)].sort(),\n\t\t\tskill: [...new Set(skillCommands)].sort(),\n\t\t},\n\t\tresources: {\n\t\t\textensions: extensionsResult.extensions.length,\n\t\t\textensionNames,\n\t\t\textensionErrors: extensionsResult.errors.length,\n\t\t\textensionLoadErrors: extensionsResult.errors,\n\t\t\tskills: services.resourceLoader.getSkills().skills.length,\n\t\t\tprompts: services.resourceLoader.getPrompts().prompts.length,\n\t\t\tthemes: services.resourceLoader.getThemes().themes.length,\n\t\t\tcontextFiles: services.resourceLoader.getAgentsFiles().agentsFiles.length,\n\t\t},\n\t\tsession: {\n\t\t\tpersisted: stats.sessionFile !== undefined,\n\t\t\tsessionId: stats.sessionId,\n\t\t\tmessages: stats.totalMessages,\n\t\t\ttoolCalls: stats.toolCalls,\n\t\t\tcontextPercent: stats.contextUsage?.percent,\n\t\t},\n\t};\n}\n\nexport function formatCapabilitiesReport(report: CapabilitiesReport): string {\n\tconst lines: string[] = [];\n\tlines.push(chalk.bold(\"Aery Capabilities\"));\n\tlines.push(\"\");\n\tlines.push(chalk.bold(\"Runtime\"));\n\tlines.push(` version: ${report.version}`);\n\tlines.push(` cwd: ${report.cwd}`);\n\tif (report.currentModel) {\n\t\tconst model = report.currentModel;\n\t\tconst traits = [\n\t\t\tmodel.supportsImages ? \"images\" : \"text-only\",\n\t\t\tmodel.supportsThinking ? \"reasoning\" : \"no reasoning\",\n\t\t].join(\", \");\n\t\tlines.push(` current: ${model.provider}/${model.id}`);\n\t\tlines.push(` thinking: ${model.thinkingLevel}`);\n\t\tlines.push(` model traits: ${traits}`);\n\t} else {\n\t\tlines.push(\" current: no model selected\");\n\t}\n\n\tlines.push(\"\");\n\tlines.push(chalk.bold(\"Built-In Tools\"));\n\tlines.push(` available: ${formatList(report.tools.builtIn)}`);\n\tlines.push(` active: ${formatList(report.tools.active)}`);\n\tlines.push(` registered: ${formatList(report.tools.registered)}`);\n\n\tlines.push(\"\");\n\tlines.push(chalk.bold(\"Commands And Resources\"));\n\tlines.push(\n\t\t` commands: ${report.commands.builtIn.length} built-in, ${report.commands.extension.length} extension, ${report.commands.prompt.length} prompt, ${report.commands.skill.length} skill`,\n\t);\n\tlines.push(` built-in commands: ${formatList(report.commands.builtIn)}`);\n\tlines.push(\n\t\t` extensions: ${report.resources.extensions} loaded, ${report.resources.extensionErrors} ${report.resources.extensionErrors === 1 ? \"error\" : \"errors\"}`,\n\t);\n\tlines.push(` loaded extensions: ${formatList(report.resources.extensionNames)}`);\n\tfor (const error of report.resources.extensionLoadErrors) {\n\t\tlines.push(` extension error: ${error.path}: ${error.error}`);\n\t}\n\tlines.push(\n\t\t` resources: ${countLabel(report.resources.skills, \"skill\")}, ${countLabel(report.resources.prompts, \"prompt\")}, ${countLabel(report.resources.themes, \"theme\")}, ${countLabel(report.resources.contextFiles, \"context file\")}`,\n\t);\n\n\tlines.push(\"\");\n\tlines.push(chalk.bold(\"Models And Providers\"));\n\tlines.push(` providers: ${report.providers.total} known`);\n\tlines.push(` configured: ${formatList(report.providers.configured)}`);\n\tlines.push(` models: ${report.models.available} available of ${report.models.total} known`);\n\n\tlines.push(\"\");\n\tlines.push(chalk.bold(\"Session Intelligence\"));\n\tlines.push(\n\t\t` session: ${report.session.persisted ? \"persisted\" : \"ephemeral\"}${report.session.sessionId ? ` ${report.session.sessionId}` : \"\"}`,\n\t);\n\tlines.push(` messages: ${report.session.messages}`);\n\tlines.push(` tool calls: ${report.session.toolCalls}`);\n\tif (report.session.contextPercent !== undefined) {\n\t\tlines.push(\n\t\t\t` context: ${report.session.contextPercent === null ? \"unknown after compaction\" : `${report.session.contextPercent.toFixed(1)}%`}`,\n\t\t);\n\t}\n\tlines.push(\" supports: resume, fork, clone, tree navigation, import, export, share, compaction, branch summaries\");\n\n\tlines.push(\"\");\n\tlines.push(chalk.bold(\"Self-Extension\"));\n\tlines.push(\" dynamic tool registration: supported through the runtime tool API\");\n\tlines.push(\" tool authoring: supported with built-in read/write/edit/bash plus reloadable resources\");\n\tlines.push(\" subagent delegation: supported by the bundled subagent extension with isolated aery processes\");\n\tlines.push(\" automation modes: interactive, print, JSON, and RPC\");\n\n\treturn lines.join(\"\\n\");\n}\n\nexport async function runCapabilitiesCommand(args: string[], options: CollectCapabilitiesOptions): Promise<boolean> {\n\tif (args[0] !== \"capabilities\") {\n\t\treturn false;\n\t}\n\n\tconst report = collectCapabilitiesReport(options);\n\tif (args.includes(\"--json\")) {\n\t\tconsole.log(JSON.stringify(report, null, 2));\n\t} else {\n\t\tconsole.log(formatCapabilitiesReport(report));\n\t}\n\treturn true;\n}\n"]}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * TUI config selector for `pi config` command
3
+ */
4
+ import type { ResolvedPaths } from "../core/package-manager.js";
5
+ import type { SettingsManager } from "../core/settings-manager.js";
6
+ export interface ConfigSelectorOptions {
7
+ resolvedPaths: ResolvedPaths;
8
+ settingsManager: SettingsManager;
9
+ cwd: string;
10
+ agentDir: string;
11
+ }
12
+ /** Show TUI config selector and return when closed */
13
+ export declare function selectConfig(options: ConfigSelectorOptions): Promise<void>;
14
+ //# sourceMappingURL=config-selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-selector.d.ts","sourceRoot":"","sources":["../../src/cli/config-selector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAInE,MAAM,WAAW,qBAAqB;IACrC,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,eAAe,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,sDAAsD;AACtD,wBAAsB,YAAY,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiChF","sourcesContent":["/**\n * TUI config selector for `pi config` command\n */\n\nimport { ProcessTerminal, TUI } from \"@eminent337/aery-tui\";\nimport type { ResolvedPaths } from \"../core/package-manager.js\";\nimport type { SettingsManager } from \"../core/settings-manager.js\";\nimport { ConfigSelectorComponent } from \"../modes/interactive/components/config-selector.js\";\nimport { initTheme, stopThemeWatcher } from \"../modes/interactive/theme/theme.js\";\n\nexport interface ConfigSelectorOptions {\n\tresolvedPaths: ResolvedPaths;\n\tsettingsManager: SettingsManager;\n\tcwd: string;\n\tagentDir: string;\n}\n\n/** Show TUI config selector and return when closed */\nexport async function selectConfig(options: ConfigSelectorOptions): Promise<void> {\n\t// Initialize theme before showing TUI\n\tinitTheme(options.settingsManager.getTheme(), true);\n\n\treturn new Promise((resolve) => {\n\t\tconst ui = new TUI(new ProcessTerminal());\n\t\tlet resolved = false;\n\n\t\tconst selector = new ConfigSelectorComponent(\n\t\t\toptions.resolvedPaths,\n\t\t\toptions.settingsManager,\n\t\t\toptions.cwd,\n\t\t\toptions.agentDir,\n\t\t\t() => {\n\t\t\t\tif (!resolved) {\n\t\t\t\t\tresolved = true;\n\t\t\t\t\tui.stop();\n\t\t\t\t\tstopThemeWatcher();\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tui.stop();\n\t\t\t\tstopThemeWatcher();\n\t\t\t\tprocess.exit(0);\n\t\t\t},\n\t\t\t() => ui.requestRender(),\n\t\t);\n\n\t\tui.addChild(selector);\n\t\tui.setFocus(selector.getResourceList());\n\t\tui.start();\n\t});\n}\n"]}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * TUI config selector for `pi config` command
3
+ */
4
+ import { ProcessTerminal, TUI } from "@eminent337/aery-tui";
5
+ import { ConfigSelectorComponent } from "../modes/interactive/components/config-selector.js";
6
+ import { initTheme, stopThemeWatcher } from "../modes/interactive/theme/theme.js";
7
+ /** Show TUI config selector and return when closed */
8
+ export async function selectConfig(options) {
9
+ // Initialize theme before showing TUI
10
+ initTheme(options.settingsManager.getTheme(), true);
11
+ return new Promise((resolve) => {
12
+ const ui = new TUI(new ProcessTerminal());
13
+ let resolved = false;
14
+ const selector = new ConfigSelectorComponent(options.resolvedPaths, options.settingsManager, options.cwd, options.agentDir, () => {
15
+ if (!resolved) {
16
+ resolved = true;
17
+ ui.stop();
18
+ stopThemeWatcher();
19
+ resolve();
20
+ }
21
+ }, () => {
22
+ ui.stop();
23
+ stopThemeWatcher();
24
+ process.exit(0);
25
+ }, () => ui.requestRender());
26
+ ui.addChild(selector);
27
+ ui.setFocus(selector.getResourceList());
28
+ ui.start();
29
+ });
30
+ }
31
+ //# sourceMappingURL=config-selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-selector.js","sourceRoot":"","sources":["../../src/cli/config-selector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,oDAAoD,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AASlF,sDAAsD;AACtD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA8B,EAAiB;IACjF,sCAAsC;IACtC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;IAEpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;QAC1C,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,MAAM,QAAQ,GAAG,IAAI,uBAAuB,CAC3C,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,eAAe,EACvB,OAAO,CAAC,GAAG,EACX,OAAO,CAAC,QAAQ,EAChB,GAAG,EAAE,CAAC;YACL,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,QAAQ,GAAG,IAAI,CAAC;gBAChB,EAAE,CAAC,IAAI,EAAE,CAAC;gBACV,gBAAgB,EAAE,CAAC;gBACnB,OAAO,EAAE,CAAC;YACX,CAAC;QAAA,CACD,EACD,GAAG,EAAE,CAAC;YACL,EAAE,CAAC,IAAI,EAAE,CAAC;YACV,gBAAgB,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAA,CAChB,EACD,GAAG,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CACxB,CAAC;QAEF,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtB,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;QACxC,EAAE,CAAC,KAAK,EAAE,CAAC;IAAA,CACX,CAAC,CAAC;AAAA,CACH","sourcesContent":["/**\n * TUI config selector for `pi config` command\n */\n\nimport { ProcessTerminal, TUI } from \"@eminent337/aery-tui\";\nimport type { ResolvedPaths } from \"../core/package-manager.js\";\nimport type { SettingsManager } from \"../core/settings-manager.js\";\nimport { ConfigSelectorComponent } from \"../modes/interactive/components/config-selector.js\";\nimport { initTheme, stopThemeWatcher } from \"../modes/interactive/theme/theme.js\";\n\nexport interface ConfigSelectorOptions {\n\tresolvedPaths: ResolvedPaths;\n\tsettingsManager: SettingsManager;\n\tcwd: string;\n\tagentDir: string;\n}\n\n/** Show TUI config selector and return when closed */\nexport async function selectConfig(options: ConfigSelectorOptions): Promise<void> {\n\t// Initialize theme before showing TUI\n\tinitTheme(options.settingsManager.getTheme(), true);\n\n\treturn new Promise((resolve) => {\n\t\tconst ui = new TUI(new ProcessTerminal());\n\t\tlet resolved = false;\n\n\t\tconst selector = new ConfigSelectorComponent(\n\t\t\toptions.resolvedPaths,\n\t\t\toptions.settingsManager,\n\t\t\toptions.cwd,\n\t\t\toptions.agentDir,\n\t\t\t() => {\n\t\t\t\tif (!resolved) {\n\t\t\t\t\tresolved = true;\n\t\t\t\t\tui.stop();\n\t\t\t\t\tstopThemeWatcher();\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tui.stop();\n\t\t\t\tstopThemeWatcher();\n\t\t\t\tprocess.exit(0);\n\t\t\t},\n\t\t\t() => ui.requestRender(),\n\t\t);\n\n\t\tui.addChild(selector);\n\t\tui.setFocus(selector.getResourceList());\n\t\tui.start();\n\t});\n}\n"]}
@@ -0,0 +1,32 @@
1
+ import { type AuthStatus, AuthStorage } from "../core/auth-storage.js";
2
+ import { ModelRegistry } from "../core/model-registry.js";
3
+ import { type CoreExtensionDiagnostic } from "../migrations.js";
4
+ export interface DoctorProviderStatus {
5
+ provider: string;
6
+ status: AuthStatus;
7
+ }
8
+ export interface DoctorReport {
9
+ version: {
10
+ local: string;
11
+ latest?: string;
12
+ updateAvailable?: boolean;
13
+ error?: string;
14
+ };
15
+ providers: DoctorProviderStatus[];
16
+ coreExtensions: CoreExtensionDiagnostic;
17
+ }
18
+ export interface DoctorReportOptions {
19
+ version?: string;
20
+ authStorage?: AuthStorage;
21
+ modelRegistry?: ModelRegistry;
22
+ latestVersion?: (currentVersion: string) => Promise<string | undefined>;
23
+ coreExtensions?: CoreExtensionDiagnostic;
24
+ agentDir?: string;
25
+ }
26
+ export declare function getCoreExtensionDiagnostic(agentDir?: string): CoreExtensionDiagnostic;
27
+ export declare function formatCurrentCoreExtensionsReport(agentDir?: string): string;
28
+ export declare function collectDoctorReport(options?: DoctorReportOptions): Promise<DoctorReport>;
29
+ export declare function formatDoctorReport(report: DoctorReport): string;
30
+ export declare function formatCoreExtensionsReport(extensions: CoreExtensionDiagnostic): string;
31
+ export declare function runDoctorCommand(args: string[]): Promise<boolean>;
32
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,UAAU,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,KAAK,uBAAuB,EAA0B,MAAM,kBAAkB,CAAC;AAOxF,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,cAAc,EAAE,uBAAuB,CAAC;CACxC;AAED,MAAM,WAAW,mBAAmB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,aAAa,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACxE,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAeD,wBAAgB,0BAA0B,CAAC,QAAQ,GAAE,MAAsB,GAAG,uBAAuB,CAIpG;AAED,wBAAgB,iCAAiC,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,CAE1F;AAED,wBAAsB,mBAAmB,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,YAAY,CAAC,CAgClG;AAiBD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAyB/D;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,uBAAuB,GAAG,MAAM,CAetF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAavE","sourcesContent":["import chalk from \"chalk\";\nimport { join } from \"path\";\nimport { APP_NAME, getAgentDir, VERSION } from \"../config.js\";\nimport { type AuthStatus, AuthStorage } from \"../core/auth-storage.js\";\nimport { ModelRegistry } from \"../core/model-registry.js\";\nimport { type CoreExtensionDiagnostic, diagnoseCoreExtensions } from \"../migrations.js\";\nimport { getLatestPiVersion, isNewerPackageVersion } from \"../utils/version-check.js\";\n\nfunction isTruthyEnvFlag(value: string | undefined): boolean {\n\treturn value === \"1\" || value === \"true\" || value === \"yes\";\n}\n\nexport interface DoctorProviderStatus {\n\tprovider: string;\n\tstatus: AuthStatus;\n}\n\nexport interface DoctorReport {\n\tversion: {\n\t\tlocal: string;\n\t\tlatest?: string;\n\t\tupdateAvailable?: boolean;\n\t\terror?: string;\n\t};\n\tproviders: DoctorProviderStatus[];\n\tcoreExtensions: CoreExtensionDiagnostic;\n}\n\nexport interface DoctorReportOptions {\n\tversion?: string;\n\tauthStorage?: AuthStorage;\n\tmodelRegistry?: ModelRegistry;\n\tlatestVersion?: (currentVersion: string) => Promise<string | undefined>;\n\tcoreExtensions?: CoreExtensionDiagnostic;\n\tagentDir?: string;\n}\n\nconst DEFAULT_PROVIDER_CHECKS = [\n\t\"anthropic\",\n\t\"openai\",\n\t\"google\",\n\t\"openrouter\",\n\t\"cloudflare-workers-ai\",\n\t\"deepseek\",\n\t\"mistral\",\n\t\"groq\",\n\t\"xai\",\n\t\"bedrock\",\n];\n\nexport function getCoreExtensionDiagnostic(agentDir: string = getAgentDir()): CoreExtensionDiagnostic {\n\tconst repoPath = join(agentDir, \"git\", \"github.com\", \"eminent337\", \"aery-extensions\");\n\tconst settingsPath = join(agentDir, \"settings.json\");\n\treturn diagnoseCoreExtensions(repoPath, settingsPath);\n}\n\nexport function formatCurrentCoreExtensionsReport(agentDir: string = getAgentDir()): string {\n\treturn formatCoreExtensionsReport(getCoreExtensionDiagnostic(agentDir));\n}\n\nexport async function collectDoctorReport(options: DoctorReportOptions = {}): Promise<DoctorReport> {\n\tconst version = options.version ?? VERSION;\n\tconst authStorage = options.authStorage ?? AuthStorage.create();\n\tconst modelRegistry = options.modelRegistry ?? ModelRegistry.create(authStorage);\n\tconst latestVersion =\n\t\toptions.latestVersion ??\n\t\t(isTruthyEnvFlag(process.env.AERY_OFFLINE) || isTruthyEnvFlag(process.env.AERY_SKIP_VERSION_CHECK)\n\t\t\t? async () => undefined\n\t\t\t: getLatestPiVersion);\n\tconst providerIds = [...new Set([...DEFAULT_PROVIDER_CHECKS, ...authStorage.list()])].sort();\n\n\tlet latest: string | undefined;\n\tlet versionError: string | undefined;\n\ttry {\n\t\tlatest = await latestVersion(version);\n\t} catch (error) {\n\t\tversionError = error instanceof Error ? error.message : String(error);\n\t}\n\n\treturn {\n\t\tversion: {\n\t\t\tlocal: version,\n\t\t\tlatest,\n\t\t\tupdateAvailable: latest ? isNewerPackageVersion(latest, version) : false,\n\t\t\terror: versionError,\n\t\t},\n\t\tproviders: providerIds.map((provider) => ({\n\t\t\tprovider,\n\t\t\tstatus: modelRegistry.getProviderAuthStatus(provider),\n\t\t})),\n\t\tcoreExtensions: options.coreExtensions ?? getCoreExtensionDiagnostic(options.agentDir),\n\t};\n}\n\nfunction formatStatus(status: AuthStatus): string {\n\tif (status.configured) {\n\t\tconst source = status.source ? ` via ${status.source}` : \"\";\n\t\tconst label = status.label ? ` (${status.label})` : \"\";\n\t\treturn `configured${source}${label}`;\n\t}\n\tif (status.label) {\n\t\treturn status.label;\n\t}\n\tif (status.source) {\n\t\treturn `detected via ${status.source}`;\n\t}\n\treturn \"not configured\";\n}\n\nexport function formatDoctorReport(report: DoctorReport): string {\n\tconst lines: string[] = [];\n\tlines.push(chalk.bold(`${APP_NAME.charAt(0).toUpperCase()}${APP_NAME.slice(1)} Doctor`));\n\tlines.push(\"\");\n\tlines.push(chalk.bold(\"Version\"));\n\tlines.push(` local: ${report.version.local}`);\n\tif (report.version.latest) {\n\t\tconst suffix = report.version.updateAvailable ? \" (update available)\" : \" (latest)\";\n\t\tlines.push(` latest: ${report.version.latest}${suffix}`);\n\t} else if (report.version.error) {\n\t\tlines.push(` latest: unavailable (${report.version.error})`);\n\t} else {\n\t\tlines.push(\" latest: unavailable\");\n\t}\n\n\tlines.push(\"\");\n\tlines.push(chalk.bold(\"Providers\"));\n\tfor (const provider of report.providers) {\n\t\tlines.push(` ${provider.provider}: ${formatStatus(provider.status)}`);\n\t}\n\n\tlines.push(\"\");\n\tlines.push(formatCoreExtensionsReport(report.coreExtensions));\n\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatCoreExtensionsReport(extensions: CoreExtensionDiagnostic): string {\n\tconst lines: string[] = [];\n\tlines.push(chalk.bold(\"Core Extensions\"));\n\tif (!extensions.repoExists) {\n\t\tlines.push(\" core extensions: not installed\");\n\t\tlines.push(\" repair: run aery update --extensions\");\n\t} else if (extensions.missingFiles.length > 0 || extensions.missingSettingsEntries.length > 0) {\n\t\tlines.push(\" core extensions: attention needed\");\n\t\tlines.push(` missing files: ${extensions.missingFiles.length}`);\n\t\tlines.push(` missing settings entries: ${extensions.missingSettingsEntries.length}`);\n\t\tlines.push(\" repair: run aery update --extensions\");\n\t} else {\n\t\tlines.push(\" core extensions: ok\");\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport async function runDoctorCommand(args: string[]): Promise<boolean> {\n\tif (args[0] !== \"doctor\") {\n\t\treturn false;\n\t}\n\n\tconst json = args.includes(\"--json\");\n\tconst report = await collectDoctorReport();\n\tif (json) {\n\t\tconsole.log(JSON.stringify(report, null, 2));\n\t} else {\n\t\tconsole.log(formatDoctorReport(report));\n\t}\n\treturn true;\n}\n"]}
@@ -0,0 +1,133 @@
1
+ import chalk from "chalk";
2
+ import { join } from "path";
3
+ import { APP_NAME, getAgentDir, VERSION } from "../config.js";
4
+ import { AuthStorage } from "../core/auth-storage.js";
5
+ import { ModelRegistry } from "../core/model-registry.js";
6
+ import { diagnoseCoreExtensions } from "../migrations.js";
7
+ import { getLatestPiVersion, isNewerPackageVersion } from "../utils/version-check.js";
8
+ function isTruthyEnvFlag(value) {
9
+ return value === "1" || value === "true" || value === "yes";
10
+ }
11
+ const DEFAULT_PROVIDER_CHECKS = [
12
+ "anthropic",
13
+ "openai",
14
+ "google",
15
+ "openrouter",
16
+ "cloudflare-workers-ai",
17
+ "deepseek",
18
+ "mistral",
19
+ "groq",
20
+ "xai",
21
+ "bedrock",
22
+ ];
23
+ export function getCoreExtensionDiagnostic(agentDir = getAgentDir()) {
24
+ const repoPath = join(agentDir, "git", "github.com", "eminent337", "aery-extensions");
25
+ const settingsPath = join(agentDir, "settings.json");
26
+ return diagnoseCoreExtensions(repoPath, settingsPath);
27
+ }
28
+ export function formatCurrentCoreExtensionsReport(agentDir = getAgentDir()) {
29
+ return formatCoreExtensionsReport(getCoreExtensionDiagnostic(agentDir));
30
+ }
31
+ export async function collectDoctorReport(options = {}) {
32
+ const version = options.version ?? VERSION;
33
+ const authStorage = options.authStorage ?? AuthStorage.create();
34
+ const modelRegistry = options.modelRegistry ?? ModelRegistry.create(authStorage);
35
+ const latestVersion = options.latestVersion ??
36
+ (isTruthyEnvFlag(process.env.AERY_OFFLINE) || isTruthyEnvFlag(process.env.AERY_SKIP_VERSION_CHECK)
37
+ ? async () => undefined
38
+ : getLatestPiVersion);
39
+ const providerIds = [...new Set([...DEFAULT_PROVIDER_CHECKS, ...authStorage.list()])].sort();
40
+ let latest;
41
+ let versionError;
42
+ try {
43
+ latest = await latestVersion(version);
44
+ }
45
+ catch (error) {
46
+ versionError = error instanceof Error ? error.message : String(error);
47
+ }
48
+ return {
49
+ version: {
50
+ local: version,
51
+ latest,
52
+ updateAvailable: latest ? isNewerPackageVersion(latest, version) : false,
53
+ error: versionError,
54
+ },
55
+ providers: providerIds.map((provider) => ({
56
+ provider,
57
+ status: modelRegistry.getProviderAuthStatus(provider),
58
+ })),
59
+ coreExtensions: options.coreExtensions ?? getCoreExtensionDiagnostic(options.agentDir),
60
+ };
61
+ }
62
+ function formatStatus(status) {
63
+ if (status.configured) {
64
+ const source = status.source ? ` via ${status.source}` : "";
65
+ const label = status.label ? ` (${status.label})` : "";
66
+ return `configured${source}${label}`;
67
+ }
68
+ if (status.label) {
69
+ return status.label;
70
+ }
71
+ if (status.source) {
72
+ return `detected via ${status.source}`;
73
+ }
74
+ return "not configured";
75
+ }
76
+ export function formatDoctorReport(report) {
77
+ const lines = [];
78
+ lines.push(chalk.bold(`${APP_NAME.charAt(0).toUpperCase()}${APP_NAME.slice(1)} Doctor`));
79
+ lines.push("");
80
+ lines.push(chalk.bold("Version"));
81
+ lines.push(` local: ${report.version.local}`);
82
+ if (report.version.latest) {
83
+ const suffix = report.version.updateAvailable ? " (update available)" : " (latest)";
84
+ lines.push(` latest: ${report.version.latest}${suffix}`);
85
+ }
86
+ else if (report.version.error) {
87
+ lines.push(` latest: unavailable (${report.version.error})`);
88
+ }
89
+ else {
90
+ lines.push(" latest: unavailable");
91
+ }
92
+ lines.push("");
93
+ lines.push(chalk.bold("Providers"));
94
+ for (const provider of report.providers) {
95
+ lines.push(` ${provider.provider}: ${formatStatus(provider.status)}`);
96
+ }
97
+ lines.push("");
98
+ lines.push(formatCoreExtensionsReport(report.coreExtensions));
99
+ return lines.join("\n");
100
+ }
101
+ export function formatCoreExtensionsReport(extensions) {
102
+ const lines = [];
103
+ lines.push(chalk.bold("Core Extensions"));
104
+ if (!extensions.repoExists) {
105
+ lines.push(" core extensions: not installed");
106
+ lines.push(" repair: run aery update --extensions");
107
+ }
108
+ else if (extensions.missingFiles.length > 0 || extensions.missingSettingsEntries.length > 0) {
109
+ lines.push(" core extensions: attention needed");
110
+ lines.push(` missing files: ${extensions.missingFiles.length}`);
111
+ lines.push(` missing settings entries: ${extensions.missingSettingsEntries.length}`);
112
+ lines.push(" repair: run aery update --extensions");
113
+ }
114
+ else {
115
+ lines.push(" core extensions: ok");
116
+ }
117
+ return lines.join("\n");
118
+ }
119
+ export async function runDoctorCommand(args) {
120
+ if (args[0] !== "doctor") {
121
+ return false;
122
+ }
123
+ const json = args.includes("--json");
124
+ const report = await collectDoctorReport();
125
+ if (json) {
126
+ console.log(JSON.stringify(report, null, 2));
127
+ }
128
+ else {
129
+ console.log(formatDoctorReport(report));
130
+ }
131
+ return true;
132
+ }
133
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from \"chalk\";\nimport { join } from \"path\";\nimport { APP_NAME, getAgentDir, VERSION } from \"../config.js\";\nimport { type AuthStatus, AuthStorage } from \"../core/auth-storage.js\";\nimport { ModelRegistry } from \"../core/model-registry.js\";\nimport { type CoreExtensionDiagnostic, diagnoseCoreExtensions } from \"../migrations.js\";\nimport { getLatestPiVersion, isNewerPackageVersion } from \"../utils/version-check.js\";\n\nfunction isTruthyEnvFlag(value: string | undefined): boolean {\n\treturn value === \"1\" || value === \"true\" || value === \"yes\";\n}\n\nexport interface DoctorProviderStatus {\n\tprovider: string;\n\tstatus: AuthStatus;\n}\n\nexport interface DoctorReport {\n\tversion: {\n\t\tlocal: string;\n\t\tlatest?: string;\n\t\tupdateAvailable?: boolean;\n\t\terror?: string;\n\t};\n\tproviders: DoctorProviderStatus[];\n\tcoreExtensions: CoreExtensionDiagnostic;\n}\n\nexport interface DoctorReportOptions {\n\tversion?: string;\n\tauthStorage?: AuthStorage;\n\tmodelRegistry?: ModelRegistry;\n\tlatestVersion?: (currentVersion: string) => Promise<string | undefined>;\n\tcoreExtensions?: CoreExtensionDiagnostic;\n\tagentDir?: string;\n}\n\nconst DEFAULT_PROVIDER_CHECKS = [\n\t\"anthropic\",\n\t\"openai\",\n\t\"google\",\n\t\"openrouter\",\n\t\"cloudflare-workers-ai\",\n\t\"deepseek\",\n\t\"mistral\",\n\t\"groq\",\n\t\"xai\",\n\t\"bedrock\",\n];\n\nexport function getCoreExtensionDiagnostic(agentDir: string = getAgentDir()): CoreExtensionDiagnostic {\n\tconst repoPath = join(agentDir, \"git\", \"github.com\", \"eminent337\", \"aery-extensions\");\n\tconst settingsPath = join(agentDir, \"settings.json\");\n\treturn diagnoseCoreExtensions(repoPath, settingsPath);\n}\n\nexport function formatCurrentCoreExtensionsReport(agentDir: string = getAgentDir()): string {\n\treturn formatCoreExtensionsReport(getCoreExtensionDiagnostic(agentDir));\n}\n\nexport async function collectDoctorReport(options: DoctorReportOptions = {}): Promise<DoctorReport> {\n\tconst version = options.version ?? VERSION;\n\tconst authStorage = options.authStorage ?? AuthStorage.create();\n\tconst modelRegistry = options.modelRegistry ?? ModelRegistry.create(authStorage);\n\tconst latestVersion =\n\t\toptions.latestVersion ??\n\t\t(isTruthyEnvFlag(process.env.AERY_OFFLINE) || isTruthyEnvFlag(process.env.AERY_SKIP_VERSION_CHECK)\n\t\t\t? async () => undefined\n\t\t\t: getLatestPiVersion);\n\tconst providerIds = [...new Set([...DEFAULT_PROVIDER_CHECKS, ...authStorage.list()])].sort();\n\n\tlet latest: string | undefined;\n\tlet versionError: string | undefined;\n\ttry {\n\t\tlatest = await latestVersion(version);\n\t} catch (error) {\n\t\tversionError = error instanceof Error ? error.message : String(error);\n\t}\n\n\treturn {\n\t\tversion: {\n\t\t\tlocal: version,\n\t\t\tlatest,\n\t\t\tupdateAvailable: latest ? isNewerPackageVersion(latest, version) : false,\n\t\t\terror: versionError,\n\t\t},\n\t\tproviders: providerIds.map((provider) => ({\n\t\t\tprovider,\n\t\t\tstatus: modelRegistry.getProviderAuthStatus(provider),\n\t\t})),\n\t\tcoreExtensions: options.coreExtensions ?? getCoreExtensionDiagnostic(options.agentDir),\n\t};\n}\n\nfunction formatStatus(status: AuthStatus): string {\n\tif (status.configured) {\n\t\tconst source = status.source ? ` via ${status.source}` : \"\";\n\t\tconst label = status.label ? ` (${status.label})` : \"\";\n\t\treturn `configured${source}${label}`;\n\t}\n\tif (status.label) {\n\t\treturn status.label;\n\t}\n\tif (status.source) {\n\t\treturn `detected via ${status.source}`;\n\t}\n\treturn \"not configured\";\n}\n\nexport function formatDoctorReport(report: DoctorReport): string {\n\tconst lines: string[] = [];\n\tlines.push(chalk.bold(`${APP_NAME.charAt(0).toUpperCase()}${APP_NAME.slice(1)} Doctor`));\n\tlines.push(\"\");\n\tlines.push(chalk.bold(\"Version\"));\n\tlines.push(` local: ${report.version.local}`);\n\tif (report.version.latest) {\n\t\tconst suffix = report.version.updateAvailable ? \" (update available)\" : \" (latest)\";\n\t\tlines.push(` latest: ${report.version.latest}${suffix}`);\n\t} else if (report.version.error) {\n\t\tlines.push(` latest: unavailable (${report.version.error})`);\n\t} else {\n\t\tlines.push(\" latest: unavailable\");\n\t}\n\n\tlines.push(\"\");\n\tlines.push(chalk.bold(\"Providers\"));\n\tfor (const provider of report.providers) {\n\t\tlines.push(` ${provider.provider}: ${formatStatus(provider.status)}`);\n\t}\n\n\tlines.push(\"\");\n\tlines.push(formatCoreExtensionsReport(report.coreExtensions));\n\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatCoreExtensionsReport(extensions: CoreExtensionDiagnostic): string {\n\tconst lines: string[] = [];\n\tlines.push(chalk.bold(\"Core Extensions\"));\n\tif (!extensions.repoExists) {\n\t\tlines.push(\" core extensions: not installed\");\n\t\tlines.push(\" repair: run aery update --extensions\");\n\t} else if (extensions.missingFiles.length > 0 || extensions.missingSettingsEntries.length > 0) {\n\t\tlines.push(\" core extensions: attention needed\");\n\t\tlines.push(` missing files: ${extensions.missingFiles.length}`);\n\t\tlines.push(` missing settings entries: ${extensions.missingSettingsEntries.length}`);\n\t\tlines.push(\" repair: run aery update --extensions\");\n\t} else {\n\t\tlines.push(\" core extensions: ok\");\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport async function runDoctorCommand(args: string[]): Promise<boolean> {\n\tif (args[0] !== \"doctor\") {\n\t\treturn false;\n\t}\n\n\tconst json = args.includes(\"--json\");\n\tconst report = await collectDoctorReport();\n\tif (json) {\n\t\tconsole.log(JSON.stringify(report, null, 2));\n\t} else {\n\t\tconsole.log(formatDoctorReport(report));\n\t}\n\treturn true;\n}\n"]}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Process @file CLI arguments into text content and image attachments
3
+ */
4
+ import type { ImageContent } from "@eminent337/aery-ai";
5
+ export interface ProcessedFiles {
6
+ text: string;
7
+ images: ImageContent[];
8
+ }
9
+ export interface ProcessFileOptions {
10
+ /** Whether to auto-resize images to 2000x2000 max. Default: true */
11
+ autoResizeImages?: boolean;
12
+ }
13
+ /** Process @file arguments into text content and image attachments */
14
+ export declare function processFileArguments(fileArgs: string[], options?: ProcessFileOptions): Promise<ProcessedFiles>;
15
+ //# sourceMappingURL=file-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-processor.d.ts","sourceRoot":"","sources":["../../src/cli/file-processor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAOxD,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IAClC,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,sEAAsE;AACtE,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CA4EpH","sourcesContent":["/**\n * Process @file CLI arguments into text content and image attachments\n */\n\nimport { access, readFile, stat } from \"node:fs/promises\";\nimport type { ImageContent } from \"@eminent337/aery-ai\";\nimport chalk from \"chalk\";\nimport { resolve } from \"path\";\nimport { resolveReadPath } from \"../core/tools/path-utils.js\";\nimport { formatDimensionNote, resizeImage } from \"../utils/image-resize.js\";\nimport { detectSupportedImageMimeTypeFromFile } from \"../utils/mime.js\";\n\nexport interface ProcessedFiles {\n\ttext: string;\n\timages: ImageContent[];\n}\n\nexport interface ProcessFileOptions {\n\t/** Whether to auto-resize images to 2000x2000 max. Default: true */\n\tautoResizeImages?: boolean;\n}\n\n/** Process @file arguments into text content and image attachments */\nexport async function processFileArguments(fileArgs: string[], options?: ProcessFileOptions): Promise<ProcessedFiles> {\n\tconst autoResizeImages = options?.autoResizeImages ?? true;\n\tlet text = \"\";\n\tconst images: ImageContent[] = [];\n\n\tfor (const fileArg of fileArgs) {\n\t\t// Expand and resolve path (handles ~ expansion and macOS screenshot Unicode spaces)\n\t\tconst absolutePath = resolve(resolveReadPath(fileArg, process.cwd()));\n\n\t\t// Check if file exists\n\t\ttry {\n\t\t\tawait access(absolutePath);\n\t\t} catch {\n\t\t\tconsole.error(chalk.red(`Error: File not found: ${absolutePath}`));\n\t\t\tprocess.exit(1);\n\t\t}\n\n\t\t// Check if file is empty\n\t\tconst stats = await stat(absolutePath);\n\t\tif (stats.size === 0) {\n\t\t\t// Skip empty files\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst mimeType = await detectSupportedImageMimeTypeFromFile(absolutePath);\n\n\t\tif (mimeType) {\n\t\t\t// Handle image file\n\t\t\tconst content = await readFile(absolutePath);\n\t\t\tconst base64Content = content.toString(\"base64\");\n\n\t\t\tlet attachment: ImageContent;\n\t\t\tlet dimensionNote: string | undefined;\n\n\t\t\tif (autoResizeImages) {\n\t\t\t\tconst resized = await resizeImage({ type: \"image\", data: base64Content, mimeType });\n\t\t\t\tif (!resized) {\n\t\t\t\t\ttext += `<file name=\"${absolutePath}\">[Image omitted: could not be resized below the inline image size limit.]</file>\\n`;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tdimensionNote = formatDimensionNote(resized);\n\t\t\t\tattachment = {\n\t\t\t\t\ttype: \"image\",\n\t\t\t\t\tmimeType: resized.mimeType,\n\t\t\t\t\tdata: resized.data,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tattachment = {\n\t\t\t\t\ttype: \"image\",\n\t\t\t\t\tmimeType,\n\t\t\t\t\tdata: base64Content,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\timages.push(attachment);\n\n\t\t\t// Add text reference to image with optional dimension note\n\t\t\tif (dimensionNote) {\n\t\t\t\ttext += `<file name=\"${absolutePath}\">${dimensionNote}</file>\\n`;\n\t\t\t} else {\n\t\t\t\ttext += `<file name=\"${absolutePath}\"></file>\\n`;\n\t\t\t}\n\t\t} else {\n\t\t\t// Handle text file\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(absolutePath, \"utf-8\");\n\t\t\t\ttext += `<file name=\"${absolutePath}\">\\n${content}\\n</file>\\n`;\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\tconsole.error(chalk.red(`Error: Could not read file ${absolutePath}: ${message}`));\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { text, images };\n}\n"]}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Process @file CLI arguments into text content and image attachments
3
+ */
4
+ import { access, readFile, stat } from "node:fs/promises";
5
+ import chalk from "chalk";
6
+ import { resolve } from "path";
7
+ import { resolveReadPath } from "../core/tools/path-utils.js";
8
+ import { formatDimensionNote, resizeImage } from "../utils/image-resize.js";
9
+ import { detectSupportedImageMimeTypeFromFile } from "../utils/mime.js";
10
+ /** Process @file arguments into text content and image attachments */
11
+ export async function processFileArguments(fileArgs, options) {
12
+ const autoResizeImages = options?.autoResizeImages ?? true;
13
+ let text = "";
14
+ const images = [];
15
+ for (const fileArg of fileArgs) {
16
+ // Expand and resolve path (handles ~ expansion and macOS screenshot Unicode spaces)
17
+ const absolutePath = resolve(resolveReadPath(fileArg, process.cwd()));
18
+ // Check if file exists
19
+ try {
20
+ await access(absolutePath);
21
+ }
22
+ catch {
23
+ console.error(chalk.red(`Error: File not found: ${absolutePath}`));
24
+ process.exit(1);
25
+ }
26
+ // Check if file is empty
27
+ const stats = await stat(absolutePath);
28
+ if (stats.size === 0) {
29
+ // Skip empty files
30
+ continue;
31
+ }
32
+ const mimeType = await detectSupportedImageMimeTypeFromFile(absolutePath);
33
+ if (mimeType) {
34
+ // Handle image file
35
+ const content = await readFile(absolutePath);
36
+ const base64Content = content.toString("base64");
37
+ let attachment;
38
+ let dimensionNote;
39
+ if (autoResizeImages) {
40
+ const resized = await resizeImage({ type: "image", data: base64Content, mimeType });
41
+ if (!resized) {
42
+ text += `<file name="${absolutePath}">[Image omitted: could not be resized below the inline image size limit.]</file>\n`;
43
+ continue;
44
+ }
45
+ dimensionNote = formatDimensionNote(resized);
46
+ attachment = {
47
+ type: "image",
48
+ mimeType: resized.mimeType,
49
+ data: resized.data,
50
+ };
51
+ }
52
+ else {
53
+ attachment = {
54
+ type: "image",
55
+ mimeType,
56
+ data: base64Content,
57
+ };
58
+ }
59
+ images.push(attachment);
60
+ // Add text reference to image with optional dimension note
61
+ if (dimensionNote) {
62
+ text += `<file name="${absolutePath}">${dimensionNote}</file>\n`;
63
+ }
64
+ else {
65
+ text += `<file name="${absolutePath}"></file>\n`;
66
+ }
67
+ }
68
+ else {
69
+ // Handle text file
70
+ try {
71
+ const content = await readFile(absolutePath, "utf-8");
72
+ text += `<file name="${absolutePath}">\n${content}\n</file>\n`;
73
+ }
74
+ catch (error) {
75
+ const message = error instanceof Error ? error.message : String(error);
76
+ console.error(chalk.red(`Error: Could not read file ${absolutePath}: ${message}`));
77
+ process.exit(1);
78
+ }
79
+ }
80
+ }
81
+ return { text, images };
82
+ }
83
+ //# sourceMappingURL=file-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-processor.js","sourceRoot":"","sources":["../../src/cli/file-processor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Process @file CLI arguments into text content and image attachments\n */\n\nimport { access, readFile, stat } from \"node:fs/promises\";\nimport type { ImageContent } from \"@eminent337/aery-ai\";\nimport chalk from \"chalk\";\nimport { resolve } from \"path\";\nimport { resolveReadPath } from \"../core/tools/path-utils.js\";\nimport { formatDimensionNote, resizeImage } from \"../utils/image-resize.js\";\nimport { detectSupportedImageMimeTypeFromFile } from \"../utils/mime.js\";\n\nexport interface ProcessedFiles {\n\ttext: string;\n\timages: ImageContent[];\n}\n\nexport interface ProcessFileOptions {\n\t/** Whether to auto-resize images to 2000x2000 max. Default: true */\n\tautoResizeImages?: boolean;\n}\n\n/** Process @file arguments into text content and image attachments */\nexport async function processFileArguments(fileArgs: string[], options?: ProcessFileOptions): Promise<ProcessedFiles> {\n\tconst autoResizeImages = options?.autoResizeImages ?? true;\n\tlet text = \"\";\n\tconst images: ImageContent[] = [];\n\n\tfor (const fileArg of fileArgs) {\n\t\t// Expand and resolve path (handles ~ expansion and macOS screenshot Unicode spaces)\n\t\tconst absolutePath = resolve(resolveReadPath(fileArg, process.cwd()));\n\n\t\t// Check if file exists\n\t\ttry {\n\t\t\tawait access(absolutePath);\n\t\t} catch {\n\t\t\tconsole.error(chalk.red(`Error: File not found: ${absolutePath}`));\n\t\t\tprocess.exit(1);\n\t\t}\n\n\t\t// Check if file is empty\n\t\tconst stats = await stat(absolutePath);\n\t\tif (stats.size === 0) {\n\t\t\t// Skip empty files\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst mimeType = await detectSupportedImageMimeTypeFromFile(absolutePath);\n\n\t\tif (mimeType) {\n\t\t\t// Handle image file\n\t\t\tconst content = await readFile(absolutePath);\n\t\t\tconst base64Content = content.toString(\"base64\");\n\n\t\t\tlet attachment: ImageContent;\n\t\t\tlet dimensionNote: string | undefined;\n\n\t\t\tif (autoResizeImages) {\n\t\t\t\tconst resized = await resizeImage({ type: \"image\", data: base64Content, mimeType });\n\t\t\t\tif (!resized) {\n\t\t\t\t\ttext += `<file name=\"${absolutePath}\">[Image omitted: could not be resized below the inline image size limit.]</file>\\n`;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tdimensionNote = formatDimensionNote(resized);\n\t\t\t\tattachment = {\n\t\t\t\t\ttype: \"image\",\n\t\t\t\t\tmimeType: resized.mimeType,\n\t\t\t\t\tdata: resized.data,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tattachment = {\n\t\t\t\t\ttype: \"image\",\n\t\t\t\t\tmimeType,\n\t\t\t\t\tdata: base64Content,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\timages.push(attachment);\n\n\t\t\t// Add text reference to image with optional dimension note\n\t\t\tif (dimensionNote) {\n\t\t\t\ttext += `<file name=\"${absolutePath}\">${dimensionNote}</file>\\n`;\n\t\t\t} else {\n\t\t\t\ttext += `<file name=\"${absolutePath}\"></file>\\n`;\n\t\t\t}\n\t\t} else {\n\t\t\t// Handle text file\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(absolutePath, \"utf-8\");\n\t\t\t\ttext += `<file name=\"${absolutePath}\">\\n${content}\\n</file>\\n`;\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\tconsole.error(chalk.red(`Error: Could not read file ${absolutePath}: ${message}`));\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { text, images };\n}\n"]}
@@ -0,0 +1,18 @@
1
+ import type { ImageContent } from "@eminent337/aery-ai";
2
+ import type { Args } from "./args.js";
3
+ export interface InitialMessageInput {
4
+ parsed: Args;
5
+ fileText?: string;
6
+ fileImages?: ImageContent[];
7
+ stdinContent?: string;
8
+ }
9
+ export interface InitialMessageResult {
10
+ initialMessage?: string;
11
+ initialImages?: ImageContent[];
12
+ }
13
+ /**
14
+ * Combine stdin content, @file text, and the first CLI message into a single
15
+ * initial prompt for non-interactive mode.
16
+ */
17
+ export declare function buildInitialMessage({ parsed, fileText, fileImages, stdinContent }: InitialMessageInput): InitialMessageResult;
18
+ //# sourceMappingURL=initial-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initial-message.d.ts","sourceRoot":"","sources":["../../src/cli/initial-message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,IAAI,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EACnC,MAAM,EACN,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,EAAE,mBAAmB,GAAG,oBAAoB,CAkB5C","sourcesContent":["import type { ImageContent } from \"@eminent337/aery-ai\";\nimport type { Args } from \"./args.js\";\n\nexport interface InitialMessageInput {\n\tparsed: Args;\n\tfileText?: string;\n\tfileImages?: ImageContent[];\n\tstdinContent?: string;\n}\n\nexport interface InitialMessageResult {\n\tinitialMessage?: string;\n\tinitialImages?: ImageContent[];\n}\n\n/**\n * Combine stdin content, @file text, and the first CLI message into a single\n * initial prompt for non-interactive mode.\n */\nexport function buildInitialMessage({\n\tparsed,\n\tfileText,\n\tfileImages,\n\tstdinContent,\n}: InitialMessageInput): InitialMessageResult {\n\tconst parts: string[] = [];\n\tif (stdinContent !== undefined) {\n\t\tparts.push(stdinContent);\n\t}\n\tif (fileText) {\n\t\tparts.push(fileText);\n\t}\n\n\tif (parsed.messages.length > 0) {\n\t\tparts.push(parsed.messages[0]);\n\t\tparsed.messages.shift();\n\t}\n\n\treturn {\n\t\tinitialMessage: parts.length > 0 ? parts.join(\"\") : undefined,\n\t\tinitialImages: fileImages && fileImages.length > 0 ? fileImages : undefined,\n\t};\n}\n"]}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Combine stdin content, @file text, and the first CLI message into a single
3
+ * initial prompt for non-interactive mode.
4
+ */
5
+ export function buildInitialMessage({ parsed, fileText, fileImages, stdinContent, }) {
6
+ const parts = [];
7
+ if (stdinContent !== undefined) {
8
+ parts.push(stdinContent);
9
+ }
10
+ if (fileText) {
11
+ parts.push(fileText);
12
+ }
13
+ if (parsed.messages.length > 0) {
14
+ parts.push(parsed.messages[0]);
15
+ parsed.messages.shift();
16
+ }
17
+ return {
18
+ initialMessage: parts.length > 0 ? parts.join("") : undefined,
19
+ initialImages: fileImages && fileImages.length > 0 ? fileImages : undefined,
20
+ };
21
+ }
22
+ //# sourceMappingURL=initial-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initial-message.js","sourceRoot":"","sources":["../../src/cli/initial-message.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,EACnC,MAAM,EACN,QAAQ,EACR,UAAU,EACV,YAAY,GACS,EAAwB;IAC7C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,OAAO;QACN,cAAc,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;QAC7D,aAAa,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;KAC3E,CAAC;AAAA,CACF","sourcesContent":["import type { ImageContent } from \"@eminent337/aery-ai\";\nimport type { Args } from \"./args.js\";\n\nexport interface InitialMessageInput {\n\tparsed: Args;\n\tfileText?: string;\n\tfileImages?: ImageContent[];\n\tstdinContent?: string;\n}\n\nexport interface InitialMessageResult {\n\tinitialMessage?: string;\n\tinitialImages?: ImageContent[];\n}\n\n/**\n * Combine stdin content, @file text, and the first CLI message into a single\n * initial prompt for non-interactive mode.\n */\nexport function buildInitialMessage({\n\tparsed,\n\tfileText,\n\tfileImages,\n\tstdinContent,\n}: InitialMessageInput): InitialMessageResult {\n\tconst parts: string[] = [];\n\tif (stdinContent !== undefined) {\n\t\tparts.push(stdinContent);\n\t}\n\tif (fileText) {\n\t\tparts.push(fileText);\n\t}\n\n\tif (parsed.messages.length > 0) {\n\t\tparts.push(parsed.messages[0]);\n\t\tparsed.messages.shift();\n\t}\n\n\treturn {\n\t\tinitialMessage: parts.length > 0 ? parts.join(\"\") : undefined,\n\t\tinitialImages: fileImages && fileImages.length > 0 ? fileImages : undefined,\n\t};\n}\n"]}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * List available models with optional fuzzy search
3
+ */
4
+ import type { ModelRegistry } from "../core/model-registry.js";
5
+ /**
6
+ * List available models, optionally filtered by search pattern
7
+ */
8
+ export declare function listModels(modelRegistry: ModelRegistry, searchPattern?: string): Promise<void>;
9
+ //# sourceMappingURL=list-models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-models.d.ts","sourceRoot":"","sources":["../../src/cli/list-models.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAiB/D;;GAEG;AACH,wBAAsB,UAAU,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkFpG","sourcesContent":["/**\n * List available models with optional fuzzy search\n */\n\nimport type { Api, Model } from \"@eminent337/aery-ai\";\nimport { fuzzyFilter } from \"@eminent337/aery-tui\";\nimport chalk from \"chalk\";\nimport { formatNoModelsAvailableMessage } from \"../core/auth-guidance.js\";\nimport type { ModelRegistry } from \"../core/model-registry.js\";\n\n/**\n * Format a number as human-readable (e.g., 200000 -> \"200K\", 1000000 -> \"1M\")\n */\nfunction formatTokenCount(count: number): string {\n\tif (count >= 1_000_000) {\n\t\tconst millions = count / 1_000_000;\n\t\treturn millions % 1 === 0 ? `${millions}M` : `${millions.toFixed(1)}M`;\n\t}\n\tif (count >= 1_000) {\n\t\tconst thousands = count / 1_000;\n\t\treturn thousands % 1 === 0 ? `${thousands}K` : `${thousands.toFixed(1)}K`;\n\t}\n\treturn count.toString();\n}\n\n/**\n * List available models, optionally filtered by search pattern\n */\nexport async function listModels(modelRegistry: ModelRegistry, searchPattern?: string): Promise<void> {\n\tconst loadError = modelRegistry.getError();\n\tif (loadError) {\n\t\tconsole.error(chalk.yellow(`Warning: errors loading models.json:\\n${loadError}`));\n\t}\n\n\tconst models = modelRegistry.getAvailable();\n\n\tif (models.length === 0) {\n\t\tconsole.log(formatNoModelsAvailableMessage());\n\t\treturn;\n\t}\n\n\t// Apply fuzzy filter if search pattern provided\n\tlet filteredModels: Model<Api>[] = models;\n\tif (searchPattern) {\n\t\tfilteredModels = fuzzyFilter(models, searchPattern, (m) => `${m.provider} ${m.id}`);\n\t}\n\n\tif (filteredModels.length === 0) {\n\t\tconsole.log(`No models matching \"${searchPattern}\"`);\n\t\treturn;\n\t}\n\n\t// Sort by provider, then by model id\n\tfilteredModels.sort((a, b) => {\n\t\tconst providerCmp = a.provider.localeCompare(b.provider);\n\t\tif (providerCmp !== 0) return providerCmp;\n\t\treturn a.id.localeCompare(b.id);\n\t});\n\n\t// Calculate column widths\n\tconst rows = filteredModels.map((m) => ({\n\t\tprovider: m.provider,\n\t\tmodel: m.id,\n\t\tcontext: formatTokenCount(m.contextWindow),\n\t\tmaxOut: formatTokenCount(m.maxTokens),\n\t\tthinking: m.reasoning ? \"yes\" : \"no\",\n\t\timages: m.input.includes(\"image\") ? \"yes\" : \"no\",\n\t}));\n\n\tconst headers = {\n\t\tprovider: \"provider\",\n\t\tmodel: \"model\",\n\t\tcontext: \"context\",\n\t\tmaxOut: \"max-out\",\n\t\tthinking: \"thinking\",\n\t\timages: \"images\",\n\t};\n\n\tconst widths = {\n\t\tprovider: Math.max(headers.provider.length, ...rows.map((r) => r.provider.length)),\n\t\tmodel: Math.max(headers.model.length, ...rows.map((r) => r.model.length)),\n\t\tcontext: Math.max(headers.context.length, ...rows.map((r) => r.context.length)),\n\t\tmaxOut: Math.max(headers.maxOut.length, ...rows.map((r) => r.maxOut.length)),\n\t\tthinking: Math.max(headers.thinking.length, ...rows.map((r) => r.thinking.length)),\n\t\timages: Math.max(headers.images.length, ...rows.map((r) => r.images.length)),\n\t};\n\n\t// Print header\n\tconst headerLine = [\n\t\theaders.provider.padEnd(widths.provider),\n\t\theaders.model.padEnd(widths.model),\n\t\theaders.context.padEnd(widths.context),\n\t\theaders.maxOut.padEnd(widths.maxOut),\n\t\theaders.thinking.padEnd(widths.thinking),\n\t\theaders.images.padEnd(widths.images),\n\t].join(\" \");\n\tconsole.log(headerLine);\n\n\t// Print rows\n\tfor (const row of rows) {\n\t\tconst line = [\n\t\t\trow.provider.padEnd(widths.provider),\n\t\t\trow.model.padEnd(widths.model),\n\t\t\trow.context.padEnd(widths.context),\n\t\t\trow.maxOut.padEnd(widths.maxOut),\n\t\t\trow.thinking.padEnd(widths.thinking),\n\t\t\trow.images.padEnd(widths.images),\n\t\t].join(\" \");\n\t\tconsole.log(line);\n\t}\n}\n"]}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * List available models with optional fuzzy search
3
+ */
4
+ import { fuzzyFilter } from "@eminent337/aery-tui";
5
+ import chalk from "chalk";
6
+ import { formatNoModelsAvailableMessage } from "../core/auth-guidance.js";
7
+ /**
8
+ * Format a number as human-readable (e.g., 200000 -> "200K", 1000000 -> "1M")
9
+ */
10
+ function formatTokenCount(count) {
11
+ if (count >= 1_000_000) {
12
+ const millions = count / 1_000_000;
13
+ return millions % 1 === 0 ? `${millions}M` : `${millions.toFixed(1)}M`;
14
+ }
15
+ if (count >= 1_000) {
16
+ const thousands = count / 1_000;
17
+ return thousands % 1 === 0 ? `${thousands}K` : `${thousands.toFixed(1)}K`;
18
+ }
19
+ return count.toString();
20
+ }
21
+ /**
22
+ * List available models, optionally filtered by search pattern
23
+ */
24
+ export async function listModels(modelRegistry, searchPattern) {
25
+ const loadError = modelRegistry.getError();
26
+ if (loadError) {
27
+ console.error(chalk.yellow(`Warning: errors loading models.json:\n${loadError}`));
28
+ }
29
+ const models = modelRegistry.getAvailable();
30
+ if (models.length === 0) {
31
+ console.log(formatNoModelsAvailableMessage());
32
+ return;
33
+ }
34
+ // Apply fuzzy filter if search pattern provided
35
+ let filteredModels = models;
36
+ if (searchPattern) {
37
+ filteredModels = fuzzyFilter(models, searchPattern, (m) => `${m.provider} ${m.id}`);
38
+ }
39
+ if (filteredModels.length === 0) {
40
+ console.log(`No models matching "${searchPattern}"`);
41
+ return;
42
+ }
43
+ // Sort by provider, then by model id
44
+ filteredModels.sort((a, b) => {
45
+ const providerCmp = a.provider.localeCompare(b.provider);
46
+ if (providerCmp !== 0)
47
+ return providerCmp;
48
+ return a.id.localeCompare(b.id);
49
+ });
50
+ // Calculate column widths
51
+ const rows = filteredModels.map((m) => ({
52
+ provider: m.provider,
53
+ model: m.id,
54
+ context: formatTokenCount(m.contextWindow),
55
+ maxOut: formatTokenCount(m.maxTokens),
56
+ thinking: m.reasoning ? "yes" : "no",
57
+ images: m.input.includes("image") ? "yes" : "no",
58
+ }));
59
+ const headers = {
60
+ provider: "provider",
61
+ model: "model",
62
+ context: "context",
63
+ maxOut: "max-out",
64
+ thinking: "thinking",
65
+ images: "images",
66
+ };
67
+ const widths = {
68
+ provider: Math.max(headers.provider.length, ...rows.map((r) => r.provider.length)),
69
+ model: Math.max(headers.model.length, ...rows.map((r) => r.model.length)),
70
+ context: Math.max(headers.context.length, ...rows.map((r) => r.context.length)),
71
+ maxOut: Math.max(headers.maxOut.length, ...rows.map((r) => r.maxOut.length)),
72
+ thinking: Math.max(headers.thinking.length, ...rows.map((r) => r.thinking.length)),
73
+ images: Math.max(headers.images.length, ...rows.map((r) => r.images.length)),
74
+ };
75
+ // Print header
76
+ const headerLine = [
77
+ headers.provider.padEnd(widths.provider),
78
+ headers.model.padEnd(widths.model),
79
+ headers.context.padEnd(widths.context),
80
+ headers.maxOut.padEnd(widths.maxOut),
81
+ headers.thinking.padEnd(widths.thinking),
82
+ headers.images.padEnd(widths.images),
83
+ ].join(" ");
84
+ console.log(headerLine);
85
+ // Print rows
86
+ for (const row of rows) {
87
+ const line = [
88
+ row.provider.padEnd(widths.provider),
89
+ row.model.padEnd(widths.model),
90
+ row.context.padEnd(widths.context),
91
+ row.maxOut.padEnd(widths.maxOut),
92
+ row.thinking.padEnd(widths.thinking),
93
+ row.images.padEnd(widths.images),
94
+ ].join(" ");
95
+ console.log(line);
96
+ }
97
+ }
98
+ //# sourceMappingURL=list-models.js.map