@travisennis/acai 0.0.6 → 0.0.8

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 (586) hide show
  1. package/README.md +225 -39
  2. package/dist/agent/index.d.ts +30 -21
  3. package/dist/agent/index.d.ts.map +1 -1
  4. package/dist/agent/index.js +237 -198
  5. package/dist/cli.d.ts +4 -3
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +56 -18
  8. package/dist/commands/add-directory/index.d.ts +3 -0
  9. package/dist/commands/add-directory/index.d.ts.map +1 -0
  10. package/dist/commands/add-directory/index.js +50 -0
  11. package/dist/commands/add-directory/types.d.ts +6 -0
  12. package/dist/commands/add-directory/types.d.ts.map +1 -0
  13. package/dist/commands/add-directory/utils.d.ts +3 -0
  14. package/dist/commands/add-directory/utils.d.ts.map +1 -0
  15. package/dist/commands/add-directory/utils.js +15 -0
  16. package/dist/commands/clear/index.d.ts +3 -0
  17. package/dist/commands/clear/index.d.ts.map +1 -0
  18. package/dist/commands/{clear-command.js → clear/index.js} +1 -7
  19. package/dist/commands/copy/index.d.ts +3 -0
  20. package/dist/commands/copy/index.d.ts.map +1 -0
  21. package/dist/commands/copy/index.js +39 -0
  22. package/dist/commands/copy/types.d.ts +3 -0
  23. package/dist/commands/copy/types.d.ts.map +1 -0
  24. package/dist/commands/copy/types.js +1 -0
  25. package/dist/commands/copy/utils.d.ts +3 -0
  26. package/dist/commands/copy/utils.d.ts.map +1 -0
  27. package/dist/commands/copy/utils.js +22 -0
  28. package/dist/commands/exit/index.d.ts +10 -0
  29. package/dist/commands/exit/index.d.ts.map +1 -0
  30. package/dist/commands/exit/index.js +21 -0
  31. package/dist/commands/exit/types.d.ts +8 -0
  32. package/dist/commands/exit/types.d.ts.map +1 -0
  33. package/dist/commands/exit/types.js +1 -0
  34. package/dist/commands/exit/utils.d.ts +2 -0
  35. package/dist/commands/exit/utils.d.ts.map +1 -0
  36. package/dist/commands/exit/utils.js +13 -0
  37. package/dist/commands/generate-rules/index.d.ts +3 -0
  38. package/dist/commands/generate-rules/index.d.ts.map +1 -0
  39. package/dist/commands/{generate-rules-command.js → generate-rules/index.js} +65 -147
  40. package/dist/commands/generate-rules/utils.d.ts +5 -0
  41. package/dist/commands/generate-rules/utils.d.ts.map +1 -0
  42. package/dist/commands/generate-rules/utils.js +25 -0
  43. package/dist/commands/handoff/index.d.ts +3 -0
  44. package/dist/commands/handoff/index.d.ts.map +1 -0
  45. package/dist/commands/handoff/index.js +97 -0
  46. package/dist/commands/handoff/utils.d.ts +4 -0
  47. package/dist/commands/handoff/utils.d.ts.map +1 -0
  48. package/dist/commands/handoff/utils.js +123 -0
  49. package/dist/commands/health/index.d.ts +3 -0
  50. package/dist/commands/health/index.d.ts.map +1 -0
  51. package/dist/commands/health/index.js +56 -0
  52. package/dist/commands/health/utils.d.ts +15 -0
  53. package/dist/commands/health/utils.d.ts.map +1 -0
  54. package/dist/commands/health/utils.js +52 -0
  55. package/dist/commands/help/index.d.ts +3 -0
  56. package/dist/commands/help/index.d.ts.map +1 -0
  57. package/dist/commands/{help-command.js → help/index.js} +6 -14
  58. package/dist/commands/history/index.d.ts +3 -0
  59. package/dist/commands/history/index.d.ts.map +1 -0
  60. package/dist/commands/{history-command.js → history/index.js} +40 -200
  61. package/dist/commands/history/types.d.ts +11 -0
  62. package/dist/commands/history/types.d.ts.map +1 -0
  63. package/dist/commands/history/types.js +1 -0
  64. package/dist/commands/history/utils.d.ts +4 -0
  65. package/dist/commands/history/utils.d.ts.map +1 -0
  66. package/dist/commands/history/utils.js +86 -0
  67. package/dist/commands/init/index.d.ts +3 -0
  68. package/dist/commands/init/index.d.ts.map +1 -0
  69. package/dist/commands/{init-command.js → init/index.js} +17 -27
  70. package/dist/commands/init-project/index.d.ts +3 -0
  71. package/dist/commands/init-project/index.d.ts.map +1 -0
  72. package/dist/commands/init-project/index.js +51 -0
  73. package/dist/commands/init-project/utils.d.ts +9 -0
  74. package/dist/commands/init-project/utils.d.ts.map +1 -0
  75. package/dist/commands/init-project/utils.js +43 -0
  76. package/dist/commands/list-directories/index.d.ts +3 -0
  77. package/dist/commands/list-directories/index.d.ts.map +1 -0
  78. package/dist/commands/{list-directories-command.js → list-directories/index.js} +2 -15
  79. package/dist/commands/list-tools/index.d.ts +3 -0
  80. package/dist/commands/list-tools/index.d.ts.map +1 -0
  81. package/dist/commands/list-tools/index.js +89 -0
  82. package/dist/commands/manager.d.ts +2 -9
  83. package/dist/commands/manager.d.ts.map +1 -1
  84. package/dist/commands/manager.js +38 -83
  85. package/dist/commands/model/index.d.ts +3 -0
  86. package/dist/commands/model/index.d.ts.map +1 -0
  87. package/dist/commands/model/index.js +182 -0
  88. package/dist/commands/model/utils.d.ts +3 -0
  89. package/dist/commands/model/utils.d.ts.map +1 -0
  90. package/dist/commands/model/utils.js +5 -0
  91. package/dist/commands/paste/index.d.ts +3 -0
  92. package/dist/commands/paste/index.d.ts.map +1 -0
  93. package/dist/commands/paste/index.js +94 -0
  94. package/dist/commands/paste/utils.d.ts +5 -0
  95. package/dist/commands/paste/utils.d.ts.map +1 -0
  96. package/dist/commands/paste/utils.js +86 -0
  97. package/dist/commands/pickup/index.d.ts +3 -0
  98. package/dist/commands/pickup/index.d.ts.map +1 -0
  99. package/dist/commands/pickup/index.js +138 -0
  100. package/dist/commands/pickup/types.d.ts +6 -0
  101. package/dist/commands/pickup/types.d.ts.map +1 -0
  102. package/dist/commands/pickup/types.js +1 -0
  103. package/dist/commands/pickup/utils.d.ts +7 -0
  104. package/dist/commands/pickup/utils.d.ts.map +1 -0
  105. package/dist/commands/pickup/utils.js +56 -0
  106. package/dist/commands/prompt/index.d.ts +5 -0
  107. package/dist/commands/prompt/index.d.ts.map +1 -0
  108. package/dist/commands/prompt/index.js +126 -0
  109. package/dist/commands/prompt/types.d.ts +15 -0
  110. package/dist/commands/prompt/types.d.ts.map +1 -0
  111. package/dist/commands/prompt/types.js +1 -0
  112. package/dist/commands/prompt/utils.d.ts +12 -0
  113. package/dist/commands/prompt/utils.d.ts.map +1 -0
  114. package/dist/commands/prompt/utils.js +107 -0
  115. package/dist/commands/remove-directory/index.d.ts +3 -0
  116. package/dist/commands/remove-directory/index.d.ts.map +1 -0
  117. package/dist/commands/{remove-directory-command.js → remove-directory/index.js} +3 -35
  118. package/dist/commands/reset/index.d.ts +3 -0
  119. package/dist/commands/reset/index.d.ts.map +1 -0
  120. package/dist/commands/{reset-command.js → reset/index.js} +8 -11
  121. package/dist/commands/reset/types.d.ts +1 -0
  122. package/dist/commands/reset/types.d.ts.map +1 -0
  123. package/dist/commands/reset/types.js +3 -0
  124. package/dist/commands/resources/index.d.ts +3 -0
  125. package/dist/commands/resources/index.d.ts.map +1 -0
  126. package/dist/commands/resources/index.js +84 -0
  127. package/dist/commands/review/index.d.ts +3 -0
  128. package/dist/commands/review/index.d.ts.map +1 -0
  129. package/dist/commands/review/index.js +126 -0
  130. package/dist/commands/review/types.d.ts +12 -0
  131. package/dist/commands/review/types.d.ts.map +1 -0
  132. package/dist/commands/review/types.js +1 -0
  133. package/dist/commands/review/utils.d.ts +4 -0
  134. package/dist/commands/review/utils.d.ts.map +1 -0
  135. package/dist/commands/review/utils.js +87 -0
  136. package/dist/commands/save/index.d.ts +3 -0
  137. package/dist/commands/save/index.d.ts.map +1 -0
  138. package/dist/commands/{save-command.js → save/index.js} +3 -10
  139. package/dist/commands/session/index.d.ts +3 -0
  140. package/dist/commands/session/index.d.ts.map +1 -0
  141. package/dist/commands/session/index.js +197 -0
  142. package/dist/commands/session/types.d.ts +13 -0
  143. package/dist/commands/session/types.d.ts.map +1 -0
  144. package/dist/commands/session/types.js +7 -0
  145. package/dist/commands/shell/index.d.ts +3 -0
  146. package/dist/commands/shell/index.d.ts.map +1 -0
  147. package/dist/commands/{shell-command.js → shell/index.js} +4 -51
  148. package/dist/commands/types.d.ts +2 -5
  149. package/dist/commands/types.d.ts.map +1 -1
  150. package/dist/config.d.ts +36 -7
  151. package/dist/config.d.ts.map +1 -1
  152. package/dist/config.js +118 -60
  153. package/dist/dedent.d.ts.map +1 -1
  154. package/dist/dedent.js +7 -7
  155. package/dist/execution/index.d.ts +18 -2
  156. package/dist/execution/index.d.ts.map +1 -1
  157. package/dist/execution/index.js +119 -81
  158. package/dist/formatting.d.ts +46 -0
  159. package/dist/formatting.d.ts.map +1 -1
  160. package/dist/formatting.js +94 -0
  161. package/dist/index.d.ts +1 -1
  162. package/dist/index.d.ts.map +1 -1
  163. package/dist/index.js +299 -177
  164. package/dist/logger.d.ts.map +1 -1
  165. package/dist/logger.js +4 -11
  166. package/dist/mentions.d.ts.map +1 -1
  167. package/dist/mentions.js +3 -53
  168. package/dist/middleware/audit-message.d.ts +2 -2
  169. package/dist/middleware/audit-message.d.ts.map +1 -1
  170. package/dist/middleware/audit-message.js +40 -2
  171. package/dist/middleware/cache.d.ts +2 -2
  172. package/dist/middleware/cache.d.ts.map +1 -1
  173. package/dist/middleware/cache.js +111 -27
  174. package/dist/middleware/rate-limit.d.ts +2 -2
  175. package/dist/middleware/rate-limit.d.ts.map +1 -1
  176. package/dist/middleware/rate-limit.js +1 -0
  177. package/dist/models/ai-config.d.ts.map +1 -1
  178. package/dist/models/ai-config.js +46 -29
  179. package/dist/models/anthropic-provider.d.ts +14 -13
  180. package/dist/models/anthropic-provider.d.ts.map +1 -1
  181. package/dist/models/anthropic-provider.js +0 -7
  182. package/dist/models/deepseek-provider.d.ts +9 -8
  183. package/dist/models/deepseek-provider.d.ts.map +1 -1
  184. package/dist/models/deepseek-provider.js +0 -2
  185. package/dist/models/google-provider.d.ts +10 -9
  186. package/dist/models/google-provider.d.ts.map +1 -1
  187. package/dist/models/google-provider.js +0 -3
  188. package/dist/models/groq-provider.d.ts +8 -7
  189. package/dist/models/groq-provider.d.ts.map +1 -1
  190. package/dist/models/groq-provider.js +0 -1
  191. package/dist/models/manager.d.ts +7 -4
  192. package/dist/models/manager.d.ts.map +1 -1
  193. package/dist/models/manager.js +5 -25
  194. package/dist/models/openai-provider.d.ts +11 -10
  195. package/dist/models/openai-provider.d.ts.map +1 -1
  196. package/dist/models/openai-provider.js +0 -4
  197. package/dist/models/opencode-zen-provider.d.ts +23 -0
  198. package/dist/models/opencode-zen-provider.d.ts.map +1 -0
  199. package/dist/models/opencode-zen-provider.js +76 -0
  200. package/dist/models/openrouter-provider.d.ts +34 -28
  201. package/dist/models/openrouter-provider.d.ts.map +1 -1
  202. package/dist/models/openrouter-provider.js +148 -139
  203. package/dist/models/providers.d.ts +6 -16
  204. package/dist/models/providers.d.ts.map +1 -1
  205. package/dist/models/providers.js +8 -58
  206. package/dist/models/xai-provider.d.ts +9 -8
  207. package/dist/models/xai-provider.d.ts.map +1 -1
  208. package/dist/models/xai-provider.js +0 -2
  209. package/dist/prompts/manager.d.ts +1 -1
  210. package/dist/prompts/manager.d.ts.map +1 -1
  211. package/dist/prompts/manager.js +1 -1
  212. package/dist/prompts.d.ts +8 -4
  213. package/dist/prompts.d.ts.map +1 -1
  214. package/dist/prompts.js +155 -177
  215. package/dist/repl/project-status.d.ts +19 -0
  216. package/dist/repl/project-status.d.ts.map +1 -0
  217. package/dist/repl/project-status.js +78 -0
  218. package/dist/repl-new.d.ts +15 -6
  219. package/dist/repl-new.d.ts.map +1 -1
  220. package/dist/repl-new.js +266 -83
  221. package/dist/{messages.d.ts → sessions/manager.d.ts} +13 -4
  222. package/dist/sessions/manager.d.ts.map +1 -0
  223. package/dist/{messages.js → sessions/manager.js} +126 -16
  224. package/dist/skills.d.ts +16 -0
  225. package/dist/skills.d.ts.map +1 -0
  226. package/dist/skills.js +233 -0
  227. package/dist/terminal/control.d.ts +56 -0
  228. package/dist/terminal/control.d.ts.map +1 -0
  229. package/dist/terminal/control.js +111 -0
  230. package/dist/terminal/default-theme.d.ts +1 -1
  231. package/dist/terminal/default-theme.d.ts.map +1 -1
  232. package/dist/terminal/default-theme.js +24 -28
  233. package/dist/terminal/formatting.d.ts +23 -26
  234. package/dist/terminal/formatting.d.ts.map +1 -1
  235. package/dist/terminal/formatting.js +35 -53
  236. package/dist/terminal/highlight/index.d.ts.map +1 -1
  237. package/dist/terminal/highlight/index.js +3 -6
  238. package/dist/terminal/highlight/theme.d.ts.map +1 -1
  239. package/dist/terminal/highlight/theme.js +2 -6
  240. package/dist/terminal/index.d.ts +2 -101
  241. package/dist/terminal/index.d.ts.map +1 -1
  242. package/dist/terminal/index.js +2 -464
  243. package/dist/terminal/keys.d.ts +211 -0
  244. package/dist/terminal/keys.d.ts.map +1 -0
  245. package/dist/terminal/keys.js +546 -0
  246. package/dist/terminal/segmenter.d.ts +6 -0
  247. package/dist/terminal/segmenter.d.ts.map +1 -0
  248. package/dist/terminal/segmenter.js +11 -0
  249. package/dist/terminal/select-prompt.d.ts.map +1 -1
  250. package/dist/terminal/select-prompt.js +9 -21
  251. package/dist/terminal/string-width.d.ts.map +1 -1
  252. package/dist/terminal/string-width.js +40 -21
  253. package/dist/terminal/strip-ansi.d.ts.map +1 -1
  254. package/dist/terminal/strip-ansi.js +9 -15
  255. package/dist/terminal/table/cell.d.ts +114 -0
  256. package/dist/terminal/table/cell.d.ts.map +1 -0
  257. package/dist/terminal/table/cell.js +407 -0
  258. package/dist/terminal/table/debug.d.ts +15 -0
  259. package/dist/terminal/table/debug.d.ts.map +1 -0
  260. package/dist/terminal/table/debug.js +32 -0
  261. package/dist/terminal/table/index.d.ts +3 -0
  262. package/dist/terminal/table/index.d.ts.map +1 -0
  263. package/dist/terminal/table/index.js +2 -0
  264. package/dist/terminal/table/layout-manager.d.ts +27 -0
  265. package/dist/terminal/table/layout-manager.d.ts.map +1 -0
  266. package/dist/terminal/table/layout-manager.js +257 -0
  267. package/dist/terminal/table/table.d.ts +9 -0
  268. package/dist/terminal/table/table.d.ts.map +1 -0
  269. package/dist/terminal/table/table.js +97 -0
  270. package/dist/terminal/table/utils.d.ts +63 -0
  271. package/dist/terminal/table/utils.d.ts.map +1 -0
  272. package/dist/terminal/table/utils.js +326 -0
  273. package/dist/tokens/tracker.d.ts.map +1 -1
  274. package/dist/tokens/tracker.js +58 -16
  275. package/dist/tools/bash.d.ts +11 -11
  276. package/dist/tools/bash.d.ts.map +1 -1
  277. package/dist/tools/bash.js +189 -81
  278. package/dist/tools/directory-tree.d.ts +9 -13
  279. package/dist/tools/directory-tree.d.ts.map +1 -1
  280. package/dist/tools/directory-tree.js +90 -60
  281. package/dist/tools/dynamic-tool-loader.d.ts +22 -8
  282. package/dist/tools/dynamic-tool-loader.d.ts.map +1 -1
  283. package/dist/tools/dynamic-tool-loader.js +41 -46
  284. package/dist/tools/edit-file.d.ts +6 -16
  285. package/dist/tools/edit-file.d.ts.map +1 -1
  286. package/dist/tools/edit-file.js +22 -66
  287. package/dist/tools/glob.d.ts +15 -16
  288. package/dist/tools/glob.d.ts.map +1 -1
  289. package/dist/tools/glob.js +78 -109
  290. package/dist/tools/grep.d.ts +19 -22
  291. package/dist/tools/grep.d.ts.map +1 -1
  292. package/dist/tools/grep.js +61 -93
  293. package/dist/tools/index.d.ts +202 -167
  294. package/dist/tools/index.d.ts.map +1 -1
  295. package/dist/tools/index.js +17 -273
  296. package/dist/tools/ls.d.ts +26 -0
  297. package/dist/tools/ls.d.ts.map +1 -0
  298. package/dist/tools/ls.js +80 -0
  299. package/dist/tools/read-file.d.ts +15 -15
  300. package/dist/tools/read-file.d.ts.map +1 -1
  301. package/dist/tools/read-file.js +52 -76
  302. package/dist/tools/save-file.d.ts +8 -8
  303. package/dist/tools/save-file.d.ts.map +1 -1
  304. package/dist/tools/save-file.js +42 -53
  305. package/dist/tools/think.d.ts +4 -4
  306. package/dist/tools/think.d.ts.map +1 -1
  307. package/dist/tools/think.js +9 -32
  308. package/dist/tools/types.d.ts +5 -21
  309. package/dist/tools/types.d.ts.map +1 -1
  310. package/dist/tools/types.js +0 -9
  311. package/dist/tui/autocomplete/attachment-provider.d.ts +18 -0
  312. package/dist/tui/autocomplete/attachment-provider.d.ts.map +1 -0
  313. package/dist/tui/autocomplete/attachment-provider.js +159 -0
  314. package/dist/tui/autocomplete/base-provider.d.ts +17 -0
  315. package/dist/tui/autocomplete/base-provider.d.ts.map +1 -0
  316. package/dist/tui/autocomplete/base-provider.js +1 -0
  317. package/dist/tui/autocomplete/combined-provider.d.ts +20 -0
  318. package/dist/tui/autocomplete/combined-provider.d.ts.map +1 -0
  319. package/dist/tui/autocomplete/combined-provider.js +61 -0
  320. package/dist/tui/autocomplete/command-provider.d.ts +20 -0
  321. package/dist/tui/autocomplete/command-provider.d.ts.map +1 -0
  322. package/dist/tui/autocomplete/command-provider.js +90 -0
  323. package/dist/tui/autocomplete/file-search-provider.d.ts +16 -0
  324. package/dist/tui/autocomplete/file-search-provider.d.ts.map +1 -0
  325. package/dist/tui/autocomplete/file-search-provider.js +123 -0
  326. package/dist/tui/autocomplete/path-provider.d.ts +21 -0
  327. package/dist/tui/autocomplete/path-provider.d.ts.map +1 -0
  328. package/dist/tui/autocomplete/path-provider.js +164 -0
  329. package/dist/tui/autocomplete/utils.d.ts +16 -0
  330. package/dist/tui/autocomplete/utils.d.ts.map +1 -0
  331. package/dist/tui/autocomplete/utils.js +137 -0
  332. package/dist/tui/autocomplete.d.ts +12 -43
  333. package/dist/tui/autocomplete.d.ts.map +1 -1
  334. package/dist/tui/autocomplete.js +20 -465
  335. package/dist/tui/components/assistant-message.js +1 -1
  336. package/dist/tui/components/box.d.ts +20 -0
  337. package/dist/tui/components/box.d.ts.map +1 -0
  338. package/dist/tui/components/box.js +87 -0
  339. package/dist/tui/components/editor.d.ts +61 -7
  340. package/dist/tui/components/editor.d.ts.map +1 -1
  341. package/dist/tui/components/editor.js +630 -127
  342. package/dist/tui/components/footer.d.ts +19 -18
  343. package/dist/tui/components/footer.d.ts.map +1 -1
  344. package/dist/tui/components/footer.js +90 -185
  345. package/dist/tui/components/header.d.ts +21 -0
  346. package/dist/tui/components/header.d.ts.map +1 -0
  347. package/dist/tui/components/header.js +63 -0
  348. package/dist/tui/components/input.d.ts.map +1 -1
  349. package/dist/tui/components/input.js +8 -7
  350. package/dist/tui/components/loader.d.ts +6 -1
  351. package/dist/tui/components/loader.d.ts.map +1 -1
  352. package/dist/tui/components/loader.js +8 -3
  353. package/dist/tui/components/markdown.d.ts +31 -27
  354. package/dist/tui/components/markdown.d.ts.map +1 -1
  355. package/dist/tui/components/markdown.js +131 -67
  356. package/dist/tui/components/modal.d.ts +0 -11
  357. package/dist/tui/components/modal.d.ts.map +1 -1
  358. package/dist/tui/components/modal.js +9 -37
  359. package/dist/tui/components/notification.d.ts +28 -0
  360. package/dist/tui/components/notification.d.ts.map +1 -0
  361. package/dist/tui/components/notification.js +63 -0
  362. package/dist/tui/components/progress-bar.d.ts +19 -0
  363. package/dist/tui/components/progress-bar.d.ts.map +1 -0
  364. package/dist/tui/components/progress-bar.js +66 -0
  365. package/dist/tui/components/select-list.d.ts +12 -1
  366. package/dist/tui/components/select-list.d.ts.map +1 -1
  367. package/dist/tui/components/select-list.js +73 -32
  368. package/dist/tui/components/spacer.d.ts +1 -1
  369. package/dist/tui/components/spacer.d.ts.map +1 -1
  370. package/dist/tui/components/spacer.js +2 -2
  371. package/dist/tui/components/table.d.ts +27 -0
  372. package/dist/tui/components/table.d.ts.map +1 -0
  373. package/dist/tui/components/table.js +125 -0
  374. package/dist/tui/components/thinking-block.d.ts.map +1 -1
  375. package/dist/tui/components/thinking-block.js +4 -1
  376. package/dist/tui/components/tool-execution.d.ts +7 -6
  377. package/dist/tui/components/tool-execution.d.ts.map +1 -1
  378. package/dist/tui/components/tool-execution.js +81 -85
  379. package/dist/tui/components/user-message.d.ts.map +1 -1
  380. package/dist/tui/components/user-message.js +6 -4
  381. package/dist/tui/components/welcome.d.ts +8 -1
  382. package/dist/tui/components/welcome.d.ts.map +1 -1
  383. package/dist/tui/components/welcome.js +45 -6
  384. package/dist/tui/index.d.ts +12 -6
  385. package/dist/tui/index.d.ts.map +1 -1
  386. package/dist/tui/index.js +7 -3
  387. package/dist/tui/terminal.d.ts +4 -3
  388. package/dist/tui/terminal.d.ts.map +1 -1
  389. package/dist/tui/terminal.js +43 -49
  390. package/dist/tui/tui.d.ts +3 -0
  391. package/dist/tui/tui.d.ts.map +1 -1
  392. package/dist/tui/tui.js +58 -43
  393. package/dist/tui/utils.d.ts +5 -0
  394. package/dist/tui/utils.d.ts.map +1 -1
  395. package/dist/tui/utils.js +80 -1
  396. package/dist/{tools/bash-utils.d.ts → utils/bash.d.ts} +3 -3
  397. package/dist/utils/bash.d.ts.map +1 -0
  398. package/dist/{tools/bash-utils.js → utils/bash.js} +22 -11
  399. package/dist/utils/{filesystem.d.ts → filesystem/operations.d.ts} +1 -1
  400. package/dist/utils/filesystem/operations.d.ts.map +1 -0
  401. package/dist/{tools/filesystem-utils.d.ts → utils/filesystem/security.d.ts} +3 -2
  402. package/dist/utils/filesystem/security.d.ts.map +1 -0
  403. package/dist/{tools/filesystem-utils.js → utils/filesystem/security.js} +62 -4
  404. package/dist/utils/funcs.d.ts +6 -0
  405. package/dist/utils/funcs.d.ts.map +1 -0
  406. package/dist/utils/funcs.js +6 -0
  407. package/dist/{tools/git-utils.d.ts → utils/git.d.ts} +1 -1
  408. package/dist/utils/git.d.ts.map +1 -0
  409. package/dist/{tools/git-utils.js → utils/git.js} +0 -6
  410. package/dist/utils/glob.js +1 -1
  411. package/dist/utils/yaml.d.ts +11 -0
  412. package/dist/utils/yaml.d.ts.map +1 -0
  413. package/dist/utils/yaml.js +207 -0
  414. package/dist/utils/{zod-utils.d.ts → zod.d.ts} +2 -1
  415. package/dist/utils/zod.d.ts.map +1 -0
  416. package/dist/utils/zod.js +24 -0
  417. package/package.json +31 -29
  418. package/dist/agent/manual-loop.d.ts +0 -41
  419. package/dist/agent/manual-loop.d.ts.map +0 -1
  420. package/dist/agent/manual-loop.js +0 -278
  421. package/dist/api/exa/index.d.ts +0 -177
  422. package/dist/api/exa/index.d.ts.map +0 -1
  423. package/dist/api/exa/index.js +0 -439
  424. package/dist/commands/add-directory-command.d.ts +0 -3
  425. package/dist/commands/add-directory-command.d.ts.map +0 -1
  426. package/dist/commands/add-directory-command.js +0 -85
  427. package/dist/commands/application-log-command.d.ts +0 -3
  428. package/dist/commands/application-log-command.d.ts.map +0 -1
  429. package/dist/commands/application-log-command.js +0 -79
  430. package/dist/commands/clear-command.d.ts +0 -3
  431. package/dist/commands/clear-command.d.ts.map +0 -1
  432. package/dist/commands/compact-command.d.ts +0 -3
  433. package/dist/commands/compact-command.d.ts.map +0 -1
  434. package/dist/commands/compact-command.js +0 -64
  435. package/dist/commands/context-command.d.ts +0 -3
  436. package/dist/commands/context-command.d.ts.map +0 -1
  437. package/dist/commands/context-command.js +0 -183
  438. package/dist/commands/copy-command.d.ts +0 -3
  439. package/dist/commands/copy-command.d.ts.map +0 -1
  440. package/dist/commands/copy-command.js +0 -80
  441. package/dist/commands/edit-command.d.ts +0 -3
  442. package/dist/commands/edit-command.d.ts.map +0 -1
  443. package/dist/commands/edit-command.js +0 -88
  444. package/dist/commands/edit-prompt-command.d.ts +0 -3
  445. package/dist/commands/edit-prompt-command.d.ts.map +0 -1
  446. package/dist/commands/edit-prompt-command.js +0 -61
  447. package/dist/commands/exit-command.d.ts +0 -13
  448. package/dist/commands/exit-command.d.ts.map +0 -1
  449. package/dist/commands/exit-command.js +0 -46
  450. package/dist/commands/files-command.d.ts +0 -3
  451. package/dist/commands/files-command.d.ts.map +0 -1
  452. package/dist/commands/files-command.js +0 -121
  453. package/dist/commands/generate-rules-command.d.ts +0 -3
  454. package/dist/commands/generate-rules-command.d.ts.map +0 -1
  455. package/dist/commands/handoff-command.d.ts +0 -3
  456. package/dist/commands/handoff-command.d.ts.map +0 -1
  457. package/dist/commands/handoff-command.js +0 -202
  458. package/dist/commands/health-command.d.ts +0 -4
  459. package/dist/commands/health-command.d.ts.map +0 -1
  460. package/dist/commands/health-command.js +0 -213
  461. package/dist/commands/help-command.d.ts +0 -3
  462. package/dist/commands/help-command.d.ts.map +0 -1
  463. package/dist/commands/history-command.d.ts +0 -3
  464. package/dist/commands/history-command.d.ts.map +0 -1
  465. package/dist/commands/init-command.d.ts +0 -3
  466. package/dist/commands/init-command.d.ts.map +0 -1
  467. package/dist/commands/last-log-command.d.ts +0 -3
  468. package/dist/commands/last-log-command.d.ts.map +0 -1
  469. package/dist/commands/last-log-command.js +0 -98
  470. package/dist/commands/list-directories-command.d.ts +0 -3
  471. package/dist/commands/list-directories-command.d.ts.map +0 -1
  472. package/dist/commands/list-tools-command.d.ts +0 -3
  473. package/dist/commands/list-tools-command.d.ts.map +0 -1
  474. package/dist/commands/list-tools-command.js +0 -124
  475. package/dist/commands/model-command.d.ts +0 -25
  476. package/dist/commands/model-command.d.ts.map +0 -1
  477. package/dist/commands/model-command.js +0 -340
  478. package/dist/commands/paste-command.d.ts +0 -3
  479. package/dist/commands/paste-command.d.ts.map +0 -1
  480. package/dist/commands/paste-command.js +0 -277
  481. package/dist/commands/pickup-command.d.ts +0 -3
  482. package/dist/commands/pickup-command.d.ts.map +0 -1
  483. package/dist/commands/pickup-command.js +0 -161
  484. package/dist/commands/prompt-command.d.ts +0 -3
  485. package/dist/commands/prompt-command.d.ts.map +0 -1
  486. package/dist/commands/prompt-command.js +0 -280
  487. package/dist/commands/remove-directory-command.d.ts +0 -3
  488. package/dist/commands/remove-directory-command.d.ts.map +0 -1
  489. package/dist/commands/reset-command.d.ts +0 -3
  490. package/dist/commands/reset-command.d.ts.map +0 -1
  491. package/dist/commands/rules-command.d.ts +0 -3
  492. package/dist/commands/rules-command.d.ts.map +0 -1
  493. package/dist/commands/rules-command.js +0 -135
  494. package/dist/commands/save-command.d.ts +0 -3
  495. package/dist/commands/save-command.d.ts.map +0 -1
  496. package/dist/commands/shell-command.d.ts +0 -3
  497. package/dist/commands/shell-command.d.ts.map +0 -1
  498. package/dist/commands/usage-command.d.ts +0 -3
  499. package/dist/commands/usage-command.d.ts.map +0 -1
  500. package/dist/commands/usage-command.js +0 -42
  501. package/dist/messages.d.ts.map +0 -1
  502. package/dist/repl/display-tool-messages.d.ts +0 -4
  503. package/dist/repl/display-tool-messages.d.ts.map +0 -1
  504. package/dist/repl/display-tool-messages.js +0 -58
  505. package/dist/repl/display-tool-use.d.ts +0 -14
  506. package/dist/repl/display-tool-use.d.ts.map +0 -1
  507. package/dist/repl/display-tool-use.js +0 -63
  508. package/dist/repl/get-prompt-header.d.ts +0 -8
  509. package/dist/repl/get-prompt-header.d.ts.map +0 -1
  510. package/dist/repl/get-prompt-header.js +0 -9
  511. package/dist/repl/project-status-line.d.ts +0 -2
  512. package/dist/repl/project-status-line.d.ts.map +0 -1
  513. package/dist/repl/project-status-line.js +0 -31
  514. package/dist/repl/prompt.d.ts +0 -21
  515. package/dist/repl/prompt.d.ts.map +0 -1
  516. package/dist/repl/prompt.js +0 -244
  517. package/dist/repl/tool-call-repair.d.ts +0 -4
  518. package/dist/repl/tool-call-repair.d.ts.map +0 -1
  519. package/dist/repl/tool-call-repair.js +0 -54
  520. package/dist/repl.d.ts +0 -29
  521. package/dist/repl.d.ts.map +0 -1
  522. package/dist/repl.js +0 -218
  523. package/dist/terminal/checkbox-prompt.d.ts +0 -36
  524. package/dist/terminal/checkbox-prompt.d.ts.map +0 -1
  525. package/dist/terminal/checkbox-prompt.js +0 -368
  526. package/dist/terminal/editor-prompt.d.ts +0 -10
  527. package/dist/terminal/editor-prompt.d.ts.map +0 -1
  528. package/dist/terminal/editor-prompt.js +0 -61
  529. package/dist/terminal/errors.d.ts +0 -19
  530. package/dist/terminal/errors.d.ts.map +0 -1
  531. package/dist/terminal/errors.js +0 -37
  532. package/dist/terminal/input-prompt.d.ts +0 -17
  533. package/dist/terminal/input-prompt.d.ts.map +0 -1
  534. package/dist/terminal/input-prompt.js +0 -181
  535. package/dist/terminal/markdown.d.ts +0 -2
  536. package/dist/terminal/markdown.d.ts.map +0 -1
  537. package/dist/terminal/markdown.js +0 -118
  538. package/dist/terminal/search-prompt.d.ts +0 -20
  539. package/dist/terminal/search-prompt.d.ts.map +0 -1
  540. package/dist/terminal/search-prompt.js +0 -280
  541. package/dist/terminal/types.d.ts +0 -35
  542. package/dist/terminal/types.d.ts.map +0 -1
  543. package/dist/tokens/threshold.d.ts +0 -35
  544. package/dist/tokens/threshold.d.ts.map +0 -1
  545. package/dist/tokens/threshold.js +0 -85
  546. package/dist/tools/advanced-edit-file.d.ts +0 -69
  547. package/dist/tools/advanced-edit-file.d.ts.map +0 -1
  548. package/dist/tools/advanced-edit-file.js +0 -281
  549. package/dist/tools/agent.d.ts +0 -29
  550. package/dist/tools/agent.d.ts.map +0 -1
  551. package/dist/tools/agent.js +0 -103
  552. package/dist/tools/bash-utils.d.ts.map +0 -1
  553. package/dist/tools/code-interpreter.d.ts +0 -25
  554. package/dist/tools/code-interpreter.d.ts.map +0 -1
  555. package/dist/tools/code-interpreter.js +0 -167
  556. package/dist/tools/delete-file.d.ts +0 -24
  557. package/dist/tools/delete-file.d.ts.map +0 -1
  558. package/dist/tools/delete-file.js +0 -70
  559. package/dist/tools/dynamic-tool-parser.d.ts +0 -21
  560. package/dist/tools/dynamic-tool-parser.d.ts.map +0 -1
  561. package/dist/tools/dynamic-tool-parser.js +0 -22
  562. package/dist/tools/filesystem-utils.d.ts.map +0 -1
  563. package/dist/tools/git-utils.d.ts.map +0 -1
  564. package/dist/tools/llm-edit-fixer.d.ts +0 -25
  565. package/dist/tools/llm-edit-fixer.d.ts.map +0 -1
  566. package/dist/tools/llm-edit-fixer.js +0 -150
  567. package/dist/tools/move-file.d.ts +0 -26
  568. package/dist/tools/move-file.d.ts.map +0 -1
  569. package/dist/tools/move-file.js +0 -58
  570. package/dist/tools/read-multiple-files.d.ts +0 -26
  571. package/dist/tools/read-multiple-files.d.ts.map +0 -1
  572. package/dist/tools/read-multiple-files.js +0 -139
  573. package/dist/tools/web-fetch.d.ts +0 -56
  574. package/dist/tools/web-fetch.d.ts.map +0 -1
  575. package/dist/tools/web-fetch.js +0 -247
  576. package/dist/tools/web-search.d.ts +0 -23
  577. package/dist/tools/web-search.d.ts.map +0 -1
  578. package/dist/tools/web-search.js +0 -133
  579. package/dist/tui/components/prompt-status.d.ts +0 -16
  580. package/dist/tui/components/prompt-status.d.ts.map +0 -1
  581. package/dist/tui/components/prompt-status.js +0 -21
  582. package/dist/utils/filesystem.d.ts.map +0 -1
  583. package/dist/utils/zod-utils.d.ts.map +0 -1
  584. package/dist/utils/zod-utils.js +0 -7
  585. /package/dist/{terminal → commands/add-directory}/types.js +0 -0
  586. /package/dist/utils/{filesystem.js → filesystem/operations.js} +0 -0
@@ -1,8 +1,7 @@
1
- import { NoOutputGeneratedError, streamText, } from "ai";
1
+ import { generateText, InvalidToolInputError, NoOutputGeneratedError, NoSuchToolError, Output, streamText, tool, } from "ai";
2
+ import { config } from "../config.js";
2
3
  import { logger } from "../logger.js";
3
4
  import { AiConfig } from "../models/ai-config.js";
4
- import { isToolMessage } from "../tools/types.js";
5
- import { isAsyncIterable } from "../utils/iterables.js";
6
5
  export class Agent {
7
6
  opts;
8
7
  _state;
@@ -19,10 +18,10 @@ export class Agent {
19
18
  return this.abortController.signal;
20
19
  }
21
20
  async *run(args) {
22
- const { modelManager, messageHistory, tokenTracker, maxIterations = 90, maxRetries = 2, toolCallRepair, } = this.opts;
21
+ const { modelManager, sessionManager, tokenTracker, maxIterations = (await config.getConfig()).loop.maxIterations, maxRetries = 2, } = this.opts;
23
22
  this.resetState();
24
23
  this._state.timestamps.start = performance.now();
25
- const { systemPrompt, input, toolDefs, executors, abortSignal } = args;
24
+ const { systemPrompt, input, tools, activeTools, abortSignal } = args;
26
25
  const langModel = modelManager.getModel("repl");
27
26
  const modelConfig = modelManager.getModelMetadata("repl");
28
27
  const aiConfig = new AiConfig({
@@ -39,35 +38,67 @@ export class Agent {
39
38
  };
40
39
  let iter = 0;
41
40
  let consecutiveErrors = 0;
41
+ let hasEmittedTerminalEvent = false;
42
42
  while (iter < maxIterations) {
43
43
  if (abortSignal?.aborted) {
44
44
  logger.warn("The agent loop was aborted by the user.");
45
- // terminal.warn("Operation aborted by user.");
46
45
  yield {
47
46
  type: "agent-stop",
48
47
  };
48
+ hasEmittedTerminalEvent = true;
49
49
  break;
50
50
  }
51
51
  yield {
52
52
  type: "step-start",
53
53
  };
54
+ const toolsCalled = new Map();
54
55
  try {
56
+ // Check abort signal again before starting streamText
57
+ if (abortSignal?.aborted) {
58
+ throw new Error("Agent aborted before streamText");
59
+ }
55
60
  const result = streamText({
56
61
  model: langModel,
57
62
  maxOutputTokens: aiConfig.maxOutputTokens(),
58
63
  system: systemPrompt,
59
- messages: messageHistory.get(),
64
+ messages: sessionManager.get(),
60
65
  temperature: aiConfig.temperature(),
61
66
  topP: aiConfig.topP(),
62
67
  maxRetries: 2,
63
68
  providerOptions: aiConfig.providerOptions(),
64
- tools: toolDefs,
65
- // biome-ignore lint/style/useNamingConvention: third-party code
66
- experimental_repairToolCall: toolCallRepair,
69
+ tools: Object.fromEntries(
70
+ // biome-ignore lint/suspicious/noExplicitAny: temporary
71
+ Object.entries(tools).map((t) => [t[0], tool(t[1].toolDef)])),
72
+ activeTools,
73
+ // biome-ignore lint/style/useNamingConvention: third-party controlled
74
+ experimental_repairToolCall: toolCallRepair(modelManager),
67
75
  abortSignal,
76
+ onAbort: ({ steps }) => {
77
+ logger.debug(`Aborting and processing ${steps.length} steps`);
78
+ steps.forEach((step) => {
79
+ sessionManager.appendResponseMessages(step.response.messages);
80
+ });
81
+ },
82
+ onError({ error }) {
83
+ if (typeof error === "object" &&
84
+ error != null &&
85
+ "message" in error) {
86
+ logger.error(error.message);
87
+ }
88
+ else {
89
+ logger.error(error);
90
+ }
91
+ },
68
92
  });
69
93
  let accumulatedText = "";
70
94
  let accumulatedReasoning = "";
95
+ const thisStepToolCalls = [];
96
+ const thisStepToolResults = [];
97
+ this._state.steps.push({
98
+ toolCalls: thisStepToolCalls,
99
+ toolResults: thisStepToolResults,
100
+ });
101
+ const toolMessages = [];
71
102
  for await (const chunk of result.fullStream) {
72
103
  if (chunk.type === "reasoning-start") {
73
104
  yield {
@@ -110,203 +141,121 @@ export class Agent {
110
141
  content: accumulatedText,
111
142
  };
112
143
  }
113
- }
114
- // Get response and tool calls
115
- const response = await result.response;
116
- const responseMessages = response.messages;
117
- messageHistory.appendResponseMessages(responseMessages);
118
- const toolCalls = await result.toolCalls;
119
- const thisStepToolCalls = [];
120
- const thisStepToolResults = [];
121
- this._state.steps.push({
122
- toolCalls: thisStepToolCalls,
123
- toolResults: thisStepToolResults,
124
- });
125
- // If finishReason is not tool-calls, break
126
- const finishReason = await result.finishReason;
127
- if (finishReason !== "tool-calls") {
128
- yield {
129
- type: "agent-stop",
130
- };
131
- break;
132
- }
133
- // Execute tools in parallel (order not guaranteed)
134
- // Check response.messages for already-processed tool results
135
- const alreadyProcessedToolCallIds = new Set();
136
- // Look for tool results and tool errors in the response messages
137
- for (const message of responseMessages) {
138
- if (message.role === "tool" && Array.isArray(message.content)) {
139
- for (const content of message.content) {
140
- if ((content.type === "tool-result" ||
141
- content.type === "tool-error") &&
142
- content.toolCallId) {
143
- logger.debug(content, "Invalid tool call:");
144
- yield {
145
- type: "tool-call-start",
146
- name: content.toolName,
147
- toolCallId: content.toolCallId,
148
- args: toolCalls.find((call) => call.toolCallId === content.toolCallId)?.input,
149
- msg: "",
150
- };
151
- yield {
152
- type: "tool-call-error",
153
- name: content.toolName,
154
- toolCallId: content.toolCallId,
155
- msg: "invalid tool call",
156
- args: toolCalls.find((call) => call.toolCallId === content.toolCallId)?.input,
157
- };
158
- alreadyProcessedToolCallIds.add(content.toolCallId);
159
- }
160
- }
161
- }
162
- }
163
- // Filter out tool calls that have already been processed or are invalid
164
- const validToolCalls = toolCalls.filter((call) => !alreadyProcessedToolCallIds.has(call.toolCallId) &&
165
- // Also check if the tool call is marked as invalid by the AI SDK
166
- !call.invalid);
167
- if (validToolCalls.length === 0) {
168
- // All tool calls were already processed by the AI SDK
169
- logger.debug(`All ${toolCalls.length} tool calls were already processed by AI SDK, skipping manual execution`);
170
- continue;
171
- }
172
- if (validToolCalls.length < toolCalls.length) {
173
- logger.debug(`Filtered out ${toolCalls.length - validToolCalls.length} already-processed tool calls, executing ${validToolCalls.length} remaining`);
174
- }
175
- // Process all tools
176
- const toolMessages = [];
177
- for (const call of validToolCalls) {
178
- const toolName = call.toolName;
179
- yield {
180
- type: "tool-call-start",
181
- name: toolName,
182
- toolCallId: call.toolCallId,
183
- msg: "",
184
- args: call.input,
185
- };
186
- let resultOutput = "Unknown result.";
187
- try {
188
- thisStepToolCalls.push({ toolName });
189
- thisStepToolResults.push({ toolName });
190
- const toolExec = executors.get(toolName);
191
- if (!toolExec) {
192
- resultOutput = `No executor for tool ${toolName}`;
144
+ else if (chunk.type === "tool-call") {
145
+ const call = chunk;
146
+ const toolName = call.toolName;
147
+ const iTool = tools[toolName];
148
+ yield this.processToolEvent(toolsCalled, {
149
+ type: "tool-call-start",
150
+ name: toolName,
151
+ toolCallId: call.toolCallId,
152
+ // biome-ignore lint/suspicious/noExplicitAny: unknown
153
+ msg: iTool ? iTool.display(call.input) : "",
154
+ args: call.input,
155
+ });
156
+ if (call.invalid) {
157
+ yield this.processToolEvent(toolsCalled, {
158
+ type: "tool-call-error",
159
+ name: call.toolName,
160
+ toolCallId: call.toolCallId,
161
+ msg: String(call.error),
162
+ args: call.input,
163
+ });
164
+ continue;
193
165
  }
194
- else {
195
- try {
196
- const output = await toolExec(call.input, {
197
- toolCallId: call.toolCallId,
198
- messages: messageHistory.get(),
199
- abortSignal,
200
- });
201
- if (isAsyncIterable(output)) {
202
- const toolResultValues = [];
203
- for await (const value of output) {
204
- if (isToolMessage(value)) {
205
- switch (value.event) {
206
- case "tool-completion":
207
- yield {
208
- type: "tool-call-end",
209
- name: value.name,
210
- toolCallId: value.id,
211
- msg: value.data,
212
- args: call.input,
213
- };
214
- break;
215
- case "tool-error":
216
- yield {
217
- type: "tool-call-error",
218
- name: value.name,
219
- toolCallId: value.id,
220
- msg: value.data,
221
- args: call.input,
222
- };
223
- break;
224
- case "tool-init":
225
- yield {
226
- type: "tool-call-update",
227
- name: value.name,
228
- toolCallId: value.id,
229
- msg: value.data,
230
- args: call.input,
231
- };
232
- break;
233
- default:
234
- logger.debug(`Unhandled tool message event: ${value.event}`);
235
- break;
236
- }
237
- }
238
- else {
239
- toolResultValues.push(value);
240
- }
241
- }
242
- const finalValue = toolResultValues.length > 0
243
- ? toolResultValues.at(-1)
244
- : undefined;
245
- resultOutput = formatToolResult(finalValue);
246
- }
247
- else {
166
+ let resultOutput = "Unknown result.";
167
+ try {
168
+ thisStepToolCalls.push({ toolName });
169
+ thisStepToolResults.push({ toolName });
170
+ const iTool = tools[toolName];
171
+ if (!iTool) {
172
+ resultOutput = `No executor for tool ${toolName}`;
173
+ }
174
+ else {
175
+ const toolExec = iTool.execute;
176
+ try {
177
+ const output = await toolExec(call.input, {
178
+ toolCallId: call.toolCallId,
179
+ messages: sessionManager.get(),
180
+ abortSignal,
181
+ });
248
182
  resultOutput = formatToolResult(output);
249
- yield {
183
+ yield this.processToolEvent(toolsCalled, {
250
184
  type: "tool-call-end",
251
185
  name: call.toolName,
252
186
  toolCallId: call.toolCallId,
253
- msg: "success",
187
+ msg: resultOutput,
188
+ args: call.input,
189
+ });
190
+ }
191
+ catch (err) {
192
+ resultOutput = `Tool error: ${err instanceof Error ? err.message : String(err)}`;
193
+ yield this.processToolEvent(toolsCalled, {
194
+ type: "tool-call-error",
195
+ name: toolName,
196
+ toolCallId: call.toolCallId,
197
+ msg: resultOutput,
254
198
  args: null,
255
- };
199
+ });
256
200
  }
257
201
  }
258
- catch (err) {
259
- resultOutput = `Tool error: ${err instanceof Error ? err.message : String(err)}`;
260
- yield {
261
- type: "tool-call-error",
262
- name: toolName,
263
- toolCallId: call.toolCallId,
264
- msg: resultOutput,
265
- args: null,
266
- };
267
- }
268
202
  }
269
- }
270
- catch (error) {
271
- resultOutput = `Tool error: ${error instanceof Error ? error.message : String(error)}`;
272
- yield {
273
- type: "tool-call-error",
274
- name: toolName,
275
- toolCallId: call.toolCallId,
276
- msg: resultOutput,
277
- args: null,
278
- };
279
- }
280
- toolMessages.push({
281
- role: "tool",
282
- content: [
283
- {
284
- type: "tool-result",
285
- toolName,
203
+ catch (error) {
204
+ resultOutput = `Tool error: ${error instanceof Error ? error.message : String(error)}`;
205
+ yield this.processToolEvent(toolsCalled, {
206
+ type: "tool-call-error",
207
+ name: toolName,
286
208
  toolCallId: call.toolCallId,
287
- output: {
288
- type: "text",
289
- value: resultOutput,
209
+ msg: resultOutput,
210
+ args: null,
211
+ });
212
+ }
213
+ toolMessages.push({
214
+ role: "tool",
215
+ content: [
216
+ {
217
+ type: "tool-result",
218
+ toolName,
219
+ toolCallId: call.toolCallId,
220
+ output: {
221
+ type: "text",
222
+ value: resultOutput,
223
+ },
290
224
  },
291
- },
292
- ],
293
- });
225
+ ],
226
+ });
227
+ }
294
228
  }
295
- messageHistory.appendToolMessages(toolMessages);
296
- // Calculate usage for the current step/iteration
229
+ // Get response and tool calls
230
+ const response = await result.response;
231
+ const responseMessages = response.messages;
232
+ sessionManager.appendResponseMessages(responseMessages);
297
233
  const stepUsage = await result.usage;
298
234
  this._state.usage.inputTokens = stepUsage.inputTokens ?? 0;
299
235
  this._state.usage.outputTokens = stepUsage.outputTokens ?? 0;
300
236
  this._state.usage.totalTokens = stepUsage.totalTokens ?? 0;
301
- this._state.usage.cachedInputTokens = stepUsage.cachedInputTokens ?? 0;
302
- this._state.usage.reasoningTokens = stepUsage.reasoningTokens ?? 0;
237
+ this._state.usage.cachedInputTokens =
238
+ stepUsage.inputTokenDetails.cacheReadTokens ?? 0;
239
+ this._state.usage.reasoningTokens =
240
+ stepUsage.outputTokenDetails.reasoningTokens ?? 0;
241
+ sessionManager.setContextWindow(stepUsage.totalTokens ?? 0);
303
242
  this._state.totalUsage.inputTokens += stepUsage.inputTokens ?? 0;
304
243
  this._state.totalUsage.outputTokens += stepUsage.outputTokens ?? 0;
305
244
  this._state.totalUsage.totalTokens += stepUsage.totalTokens ?? 0;
306
245
  this._state.totalUsage.cachedInputTokens +=
307
- stepUsage.cachedInputTokens ?? 0;
246
+ stepUsage.inputTokenDetails.cacheReadTokens ?? 0;
308
247
  this._state.totalUsage.reasoningTokens +=
309
- stepUsage.reasoningTokens ?? 0;
248
+ stepUsage.outputTokenDetails.reasoningTokens ?? 0;
249
+ // If finishReason is not tool-calls, break
250
+ const finishReason = await result.finishReason;
251
+ if (finishReason !== "tool-calls") {
252
+ yield {
253
+ type: "agent-stop",
254
+ };
255
+ hasEmittedTerminalEvent = true;
256
+ break;
257
+ }
258
+ sessionManager.appendToolMessages(toolMessages);
310
259
  // Consume the rest of the team if necessary
311
260
  // await result.consumeStream();
312
261
  yield {
@@ -317,17 +266,29 @@ export class Agent {
317
266
  }
318
267
  catch (error) {
319
268
  consecutiveErrors += 1;
320
- logger.error(error, // Log the full error object
321
- `Error on manual agent loop streamText (attempt ${consecutiveErrors}/${maxRetries + 1})`);
322
- const errorMsg = error.message.length > 100
323
- ? `${error.message.slice(0, 100)}...`
324
- : error.message;
325
- yield {
326
- type: "agent-error",
327
- message: errorMsg,
328
- };
329
- if (NoOutputGeneratedError.isInstance(error)) {
330
- break;
269
+ // Handle AI SDK invalid tool input errors gracefully
270
+ if (InvalidToolInputError.isInstance(error)) {
271
+ logger.warn(error, `Invalid tool input detected - returning error to allow recovery (attempt ${consecutiveErrors}/${maxRetries + 1})`);
272
+ yield {
273
+ type: "agent-error",
274
+ message: `Tool input validation failed: ${error.message}. Try again with valid arguments.`,
275
+ };
276
+ // Continue loop to allow user to provide corrected input
277
+ }
278
+ else {
279
+ logger.error(error, // Log the full error object
280
+ `Error on manual agent loop streamText (attempt ${consecutiveErrors}/${maxRetries + 1})`);
281
+ const errorMsg = error.message.length > 100
282
+ ? `${error.message.slice(0, 100)}...`
283
+ : error.message;
284
+ yield {
285
+ type: "agent-error",
286
+ message: errorMsg,
287
+ };
288
+ if (NoOutputGeneratedError.isInstance(error)) {
289
+ hasEmittedTerminalEvent = true;
290
+ break;
291
+ }
331
292
  }
332
293
  // Break loop if we exceed max retries
333
294
  if (consecutiveErrors > maxRetries) {
@@ -335,6 +296,7 @@ export class Agent {
335
296
  type: "agent-error",
336
297
  message: `Exceeded maximum retry attempts (${maxRetries}). Stopping manual loop.`,
337
298
  };
299
+ hasEmittedTerminalEvent = true;
338
300
  break;
339
301
  }
340
302
  }
@@ -342,6 +304,12 @@ export class Agent {
342
304
  this._state.timestamps.stop = performance.now();
343
305
  }
344
306
  }
307
+ // Emit agent-stop if loop ended without emitting a terminal event (maxIterations reached)
308
+ if (!hasEmittedTerminalEvent) {
309
+ yield {
310
+ type: "agent-stop",
311
+ };
312
+ }
345
313
  // Track aggregate usage across all steps when available
346
314
  tokenTracker.trackUsage("repl", this._state.totalUsage);
347
315
  }
@@ -352,7 +320,7 @@ export class Agent {
352
320
  }
353
321
  resetState() {
354
322
  const { modelManager,
355
- // messageHistory,
323
+ // sessionManager,
356
324
  } = this.opts;
357
325
  this._state = {
358
326
  modelId: modelManager.getModel("repl").modelId,
@@ -363,6 +331,15 @@ export class Agent {
363
331
  totalTokens: 0,
364
332
  reasoningTokens: 0,
365
333
  cachedInputTokens: 0,
334
+ inputTokenDetails: {
335
+ noCacheTokens: 0,
336
+ cacheReadTokens: 0,
337
+ cacheWriteTokens: 0,
338
+ },
339
+ outputTokenDetails: {
340
+ textTokens: 0,
341
+ reasoningTokens: 0,
342
+ },
366
343
  },
367
344
  totalUsage: {
368
345
  inputTokens: 0,
@@ -370,6 +347,15 @@ export class Agent {
370
347
  totalTokens: 0,
371
348
  reasoningTokens: 0,
372
349
  cachedInputTokens: 0,
350
+ inputTokenDetails: {
351
+ noCacheTokens: 0,
352
+ cacheReadTokens: 0,
353
+ cacheWriteTokens: 0,
354
+ },
355
+ outputTokenDetails: {
356
+ textTokens: 0,
357
+ reasoningTokens: 0,
358
+ },
373
359
  },
374
360
  steps: [],
375
361
  timestamps: {
@@ -379,6 +365,30 @@ export class Agent {
379
365
  };
380
366
  return this._state;
381
367
  }
368
+ processToolEvent(toolsCalled, event) {
369
+ const toolCallId = event.toolCallId;
370
+ let events;
371
+ if (toolsCalled.has(toolCallId)) {
372
+ const currentEvents = toolsCalled.get(toolCallId);
373
+ if (currentEvents) {
374
+ events = currentEvents;
375
+ events.push(event);
376
+ }
377
+ else {
378
+ events = [event];
379
+ toolsCalled.set(toolCallId, events);
380
+ }
381
+ }
382
+ else {
383
+ events = [event];
384
+ toolsCalled.set(toolCallId, events);
385
+ }
386
+ return {
387
+ type: "tool-call-lifecycle",
388
+ toolCallId: toolCallId,
389
+ events,
390
+ };
391
+ }
382
392
  }
383
393
  function formatToolResult(value) {
384
394
  if (typeof value === "string") {
@@ -404,3 +414,32 @@ function formatToolResult(value) {
404
414
  }
405
415
  return String(value);
406
416
  }
417
+ const toolCallRepair = (modelManager) => {
418
+ const fn = async ({ toolCall, tools, inputSchema, error, }) => {
419
+ if (NoSuchToolError.isInstance(error)) {
420
+ return null; // do not attempt to fix invalid tool names
421
+ }
422
+ const tool = tools[toolCall.toolName];
423
+ try {
424
+ const { output: repairedArgs } = await generateText({
425
+ model: modelManager.getModel("tool-repair"),
426
+ output: Output.object({
427
+ schema: tool.inputSchema,
428
+ }),
429
+ prompt: [
430
+ `The model tried to call the tool "${toolCall.toolName}" with the following arguments:`,
431
+ JSON.stringify(toolCall.input),
432
+ "The tool accepts the following schema:",
433
+ JSON.stringify(inputSchema(toolCall)),
434
+ "Please fix the arguments.",
435
+ ].join("\n"),
436
+ });
437
+ return { ...toolCall, args: JSON.stringify(repairedArgs) };
438
+ }
439
+ catch (err) {
440
+ logger.error(err, `Failed to repair tool call: ${toolCall.toolName}.`);
441
+ return null;
442
+ }
443
+ };
444
+ return fn;
445
+ };
package/dist/cli.d.ts CHANGED
@@ -1,20 +1,21 @@
1
1
  import type { WorkspaceContext } from "./index.ts";
2
- import type { MessageHistory } from "./messages.ts";
3
2
  import type { ModelManager } from "./models/manager.js";
4
3
  import type { PromptManager } from "./prompts/manager.ts";
4
+ import type { SessionManager } from "./sessions/manager.ts";
5
5
  import type { TokenCounter } from "./tokens/counter.ts";
6
6
  import type { TokenTracker } from "./tokens/tracker.ts";
7
7
  interface CliOptions {
8
- messageHistory: MessageHistory;
8
+ messageHistory: SessionManager;
9
9
  promptManager: PromptManager;
10
10
  modelManager: ModelManager;
11
11
  tokenTracker: TokenTracker;
12
- config: Record<PropertyKey, unknown>;
13
12
  tokenCounter: TokenCounter;
14
13
  workspace: WorkspaceContext;
14
+ skillsEnabled?: boolean;
15
15
  }
16
16
  export declare class Cli {
17
17
  private options;
18
+ private skillsEnabled;
18
19
  constructor(options: CliOptions);
19
20
  run(): Promise<void>;
20
21
  }
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../source/cli.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AASxD,UAAU,UAAU;IAClB,cAAc,EAAE,cAAc,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACrC,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,gBAAgB,CAAC;CAC7B;AAWD,qBAAa,GAAG;IACd,OAAO,CAAC,OAAO,CAAa;gBAChB,OAAO,EAAE,UAAU;IAIzB,GAAG;CAkFV"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../source/cli.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQxD,UAAU,UAAU;IAClB,cAAc,EAAE,cAAc,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAUD,qBAAa,GAAG;IACd,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,aAAa,CAAU;gBACnB,OAAO,EAAE,UAAU;IAKzB,GAAG;CAsHV"}