@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,24 +1,25 @@
1
+ import type { LanguageModelUsage } from "ai";
1
2
  import type { AgentState } from "../../agent/index.ts";
2
- import { Container } from "../tui.ts";
3
- /**
4
- * Footer component that shows pwd, token stats, and context usage
5
- */
6
- export declare class FooterComponent extends Container {
3
+ import type { ModelManager } from "../../models/manager.ts";
4
+ import type { ProjectStatusData } from "../../repl/project-status.ts";
5
+ import { type Component } from "../tui.ts";
6
+ type State = {
7
+ projectStatus: ProjectStatusData;
8
+ currentContextWindow: number;
9
+ contextWindow: number;
10
+ usage?: LanguageModelUsage;
11
+ agentState?: AgentState;
12
+ };
13
+ export declare class FooterComponent implements Component {
14
+ private modelManager;
7
15
  private state;
8
- constructor(state: AgentState);
9
- updateState(state: AgentState): void;
16
+ private progressBar;
17
+ private usage?;
18
+ private agentState?;
19
+ constructor(modelManager: ModelManager, state: State);
20
+ setState(state: State): void;
21
+ resetState(): void;
10
22
  render(width: number): string[];
11
23
  }
12
- interface MinimalStep {
13
- toolResults: Array<{
14
- toolName: string;
15
- }>;
16
- toolCalls: Array<{
17
- toolName: string;
18
- }>;
19
- }
20
- export declare function displayToolUse(result: {
21
- steps: MinimalStep[];
22
- }): string[];
23
24
  export {};
24
25
  //# sourceMappingURL=footer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"footer.d.ts","sourceRoot":"","sources":["../../../source/tui/components/footer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIvD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC;;GAEG;AACH,qBAAa,eAAgB,SAAQ,SAAS;IAC5C,OAAO,CAAC,KAAK,CAAa;gBAEd,KAAK,EAAE,UAAU;IAK7B,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAI3B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAwIzC;AAGD,UAAU,WAAW;IACnB,WAAW,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzC,SAAS,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,YA6E9D"}
1
+ {"version":3,"file":"footer.d.ts","sourceRoot":"","sources":["../../../source/tui/components/footer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGtE,OAAO,EAAE,KAAK,SAAS,EAAgB,MAAM,WAAW,CAAC;AAGzD,KAAK,KAAK,GAAG;IACX,aAAa,EAAE,iBAAiB,CAAC;IACjC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAqCF,qBAAa,eAAgB,YAAW,SAAS;IAC/C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,KAAK,CAAC,CAAqB;IACnC,OAAO,CAAC,UAAU,CAAC,CAAa;gBACpB,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK;IAWpD,QAAQ,CAAC,KAAK,EAAE,KAAK;IAYrB,UAAU;IAKV,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CA+DhC"}
@@ -1,197 +1,102 @@
1
- import { formatDuration } from "../../formatting.js";
2
- import { hr } from "../../terminal/index.js";
1
+ import { formatDuration, formatNumber } from "../../formatting.js";
2
+ import { getTerminalSize } from "../../terminal/control.js";
3
3
  import style from "../../terminal/style.js";
4
- import { Container } from "../tui.js";
5
- /**
6
- * Footer component that shows pwd, token stats, and context usage
7
- */
8
- export class FooterComponent extends Container {
4
+ import { visibleWidth } from "../tui.js";
5
+ import { ProgressBarComponent } from "./progress-bar.js";
6
+ function formatProjectStatus(status) {
7
+ const { columns: width } = getTerminalSize();
8
+ const maxPathLength = Math.max(20, width - 10);
9
+ let path = status.path;
10
+ if (path.length > maxPathLength) {
11
+ const start = path.slice(0, Math.floor(maxPathLength / 2) - 2);
12
+ const end = path.slice(-(Math.floor(maxPathLength / 2) - 1));
13
+ path = `${start}...${end}`;
14
+ }
15
+ let result = style.blue(path);
16
+ if (status.isGitRepository && status.branch) {
17
+ const asterisk = status.hasChanges ? "*" : "";
18
+ result += ` ${style.gray(status.branch + asterisk)}`;
19
+ let fileStatus = "";
20
+ if (status.fileChanges.added)
21
+ fileStatus += ` +${status.fileChanges.added}`;
22
+ if (status.fileChanges.modified)
23
+ fileStatus += ` ~${status.fileChanges.modified}`;
24
+ if (status.fileChanges.deleted)
25
+ fileStatus += ` -${status.fileChanges.deleted}`;
26
+ if (status.fileChanges.untracked)
27
+ fileStatus += ` ?${status.fileChanges.untracked}`;
28
+ result +=
29
+ " " +
30
+ `${style.dim("[")}${style.yellow(fileStatus.trim())} ` +
31
+ `${style.green(`+${status.diffStats.insertions}`)} ` +
32
+ `${style.red(`-${status.diffStats.deletions}`)}${style.dim("]")}`;
33
+ }
34
+ return result;
35
+ }
36
+ export class FooterComponent {
37
+ modelManager;
9
38
  state;
10
- constructor(state) {
11
- super();
39
+ progressBar;
40
+ usage;
41
+ agentState;
42
+ constructor(modelManager, state) {
43
+ this.modelManager = modelManager;
44
+ this.agentState = state.agentState;
12
45
  this.state = state;
46
+ this.progressBar = new ProgressBarComponent(state.currentContextWindow, state.contextWindow, 0);
13
47
  }
14
- updateState(state) {
48
+ setState(state) {
49
+ if (state.agentState) {
50
+ this.agentState = state.agentState;
51
+ }
52
+ if (state.usage) {
53
+ this.usage = state.usage;
54
+ }
15
55
  this.state = state;
56
+ this.progressBar.setCurrent(state.currentContextWindow);
57
+ this.progressBar.setTotal(state.contextWindow);
58
+ }
59
+ resetState() {
60
+ this.usage = undefined;
61
+ this.agentState = undefined;
16
62
  }
17
63
  render(width) {
18
64
  const results = [];
19
- if (this.state.steps.length === 0) {
20
- return results;
65
+ const modelInfo = `${this.modelManager.getModelMetadata("repl").id} [${this.modelManager.getModel("repl").modelId}]`;
66
+ const projectStatusString = formatProjectStatus(this.state.projectStatus);
67
+ const padding = Math.max(0, width - visibleWidth(projectStatusString) - modelInfo.length);
68
+ results.push(projectStatusString + " ".repeat(padding) + style.dim(modelInfo));
69
+ if (this.usage && this.agentState) {
70
+ const inputTokens = this.usage.inputTokens ?? 0;
71
+ const outputTokens = this.usage.outputTokens ?? 0;
72
+ const cachedInputTokens = this.usage.inputTokenDetails.cacheReadTokens ?? 0;
73
+ const tokenSummary = `↑ ${formatNumber(inputTokens)} (${formatNumber(cachedInputTokens)}) ↓ ${formatNumber(outputTokens)} - `;
74
+ let status = tokenSummary;
75
+ const inputCost = this.agentState.modelConfig.costPerInputToken * inputTokens;
76
+ const outputCost = this.agentState.modelConfig.costPerOutputToken * outputTokens;
77
+ status += `$${(inputCost + outputCost).toFixed(2)}`;
78
+ results.push(style.dim(status));
21
79
  }
22
- results.push(hr(width));
23
- // Create a more visual representation of steps/tool usage
24
- results.push(...displayToolUse(this.state));
25
- let status = `Steps: ${this.state.steps.length} - `;
26
- // Show time spend on this prompt
27
- status += `Time: ${formatDuration(this.state.timestamps.stop - this.state.timestamps.start)} - `;
28
- const total = this.state.totalUsage;
29
- const inputTokens = total.inputTokens;
30
- const outputTokens = total.outputTokens;
31
- const cachedInputTokens = total.cachedInputTokens;
32
- const tokenSummary = `Tokens: ↑ ${inputTokens} (${cachedInputTokens}) ↓ ${outputTokens} - `;
33
- status += tokenSummary;
34
- const inputCost = this.state.modelConfig.costPerInputToken * inputTokens;
35
- const outputCost = this.state.modelConfig.costPerOutputToken * outputTokens;
36
- status += `Cost: $${(inputCost + outputCost).toFixed(2)}`;
37
- results.push(style.dim(status));
38
- return results;
39
- // // Calculate cumulative usage from all assistant messages
40
- // let totalInput = 0;
41
- // let totalOutput = 0;
42
- // let totalCacheRead = 0;
43
- // let totalCacheWrite = 0;
44
- // let totalCost = 0;
45
- // for (const message of this.state.messages) {
46
- // if (message.role === "assistant") {
47
- // const assistantMsg = message as AssistantMessage;
48
- // totalInput += assistantMsg.usage.input;
49
- // totalOutput += assistantMsg.usage.output;
50
- // totalCacheRead += assistantMsg.usage.cacheRead;
51
- // totalCacheWrite += assistantMsg.usage.cacheWrite;
52
- // totalCost += assistantMsg.usage.cost.total;
53
- // }
54
- // }
55
- // // Get last assistant message for context percentage calculation (skip aborted messages)
56
- // const lastAssistantMessage = this.state.messages
57
- // .slice()
58
- // .reverse()
59
- // .find((m) => m.role === "assistant" && m.stopReason !== "aborted") as
60
- // | AssistantMessage
61
- // | undefined;
62
- // // Calculate context percentage from last message (input + output + cacheRead + cacheWrite)
63
- // const contextTokens = lastAssistantMessage
64
- // ? lastAssistantMessage.usage.input +
65
- // lastAssistantMessage.usage.output +
66
- // lastAssistantMessage.usage.cacheRead +
67
- // lastAssistantMessage.usage.cacheWrite
68
- // : 0;
69
- // const contextWindow = this.state.model.contextWindow;
70
- // const contextPercent =
71
- // contextWindow > 0
72
- // ? ((contextTokens / contextWindow) * 100).toFixed(1)
73
- // : "0.0";
74
- // // Format token counts (similar to web-ui)
75
- // const formatTokens = (count: number): string => {
76
- // if (count < 1000) return count.toString();
77
- // if (count < 10000) return (count / 1000).toFixed(1) + "k";
78
- // return Math.round(count / 1000) + "k";
79
- // };
80
- // // Replace home directory with ~
81
- // let pwd = process.cwd();
82
- // const home = process.env.HOME || process.env.USERPROFILE;
83
- // if (home && pwd.startsWith(home)) {
84
- // pwd = "~" + pwd.slice(home.length);
85
- // }
86
- // // Truncate path if too long to fit width
87
- // const maxPathLength = Math.max(20, width - 10); // Leave some margin
88
- // if (pwd.length > maxPathLength) {
89
- // const start = pwd.slice(0, Math.floor(maxPathLength / 2) - 2);
90
- // const end = pwd.slice(-(Math.floor(maxPathLength / 2) - 1));
91
- // pwd = `${start}...${end}`;
92
- // }
93
- // // Build stats line
94
- // const statsParts = [];
95
- // if (totalInput) statsParts.push(`↑${formatTokens(totalInput)}`);
96
- // if (totalOutput) statsParts.push(`↓${formatTokens(totalOutput)}`);
97
- // if (totalCacheRead) statsParts.push(`R${formatTokens(totalCacheRead)}`);
98
- // if (totalCacheWrite) statsParts.push(`W${formatTokens(totalCacheWrite)}`);
99
- // if (totalCost) statsParts.push(`$${totalCost.toFixed(3)}`);
100
- // statsParts.push(`${contextPercent}%`);
101
- // const statsLeft = statsParts.join(" ");
102
- // // Add model name on the right side
103
- // let modelName = this.state.model.id;
104
- // const statsLeftWidth = visibleWidth(statsLeft);
105
- // const modelWidth = visibleWidth(modelName);
106
- // // Calculate available space for padding (minimum 2 spaces between stats and model)
107
- // const minPadding = 2;
108
- // const totalNeeded = statsLeftWidth + minPadding + modelWidth;
109
- // let statsLine: string;
110
- // if (totalNeeded <= width) {
111
- // // Both fit - add padding to right-align model
112
- // const padding = " ".repeat(width - statsLeftWidth - modelWidth);
113
- // statsLine = statsLeft + padding + modelName;
114
- // } else {
115
- // // Need to truncate model name
116
- // const availableForModel = width - statsLeftWidth - minPadding;
117
- // if (availableForModel > 3) {
118
- // // Truncate model name to fit
119
- // modelName = modelName.substring(0, availableForModel);
120
- // const padding = " ".repeat(
121
- // width - statsLeftWidth - visibleWidth(modelName),
122
- // );
123
- // statsLine = statsLeft + padding + modelName;
124
- // } else {
125
- // // Not enough space for model name at all
126
- // statsLine = statsLeft;
127
- // }
128
- // }
129
- // // Return two lines: pwd and stats
130
- // return [chalk.gray(pwd), chalk.gray(statsLine)];
131
- }
132
- }
133
- export function displayToolUse(result) {
134
- const toolsCalled = [];
135
- const toolColors = new Map();
136
- const styleColors = [
137
- "red",
138
- "green",
139
- "yellow",
140
- "blue",
141
- "magenta",
142
- "cyan",
143
- "white",
144
- "gray",
145
- "redBright",
146
- "greenBright",
147
- "yellowBright",
148
- "blueBright",
149
- "magentaBright",
150
- "cyanBright",
151
- "whiteBright",
152
- "blackBright",
153
- ];
154
- const results = [];
155
- for (const step of result.steps) {
156
- let currentToolCalls = [];
157
- if (step.toolResults.length > 0) {
158
- currentToolCalls = step.toolResults;
159
- }
160
- else if (step.toolCalls.length > 0) {
161
- currentToolCalls = step.toolCalls;
80
+ if (this.agentState) {
81
+ let status = `Steps: ${this.agentState.steps.length} - `;
82
+ // Calculate total tool calls across all steps
83
+ const totalToolCalls = this.agentState.steps.reduce((total, step) => total + step.toolCalls.length, 0);
84
+ status += `Tool calls: ${totalToolCalls} - `;
85
+ // Show time spend on this prompt
86
+ status += `${formatDuration(this.agentState.timestamps.stop - this.agentState.timestamps.start)} - `;
87
+ const total = this.agentState.totalUsage;
88
+ const inputTokens = total.inputTokens;
89
+ const outputTokens = total.outputTokens;
90
+ const cachedInputTokens = total.cachedInputTokens;
91
+ const tokenSummary = `↑ ${formatNumber(inputTokens)} (${formatNumber(cachedInputTokens)}) ↓ ${formatNumber(outputTokens)} - `;
92
+ status += tokenSummary;
93
+ const inputCost = this.agentState.modelConfig.costPerInputToken * inputTokens;
94
+ const outputCost = this.agentState.modelConfig.costPerOutputToken * outputTokens;
95
+ status += `$${(inputCost + outputCost).toFixed(2)}`;
96
+ results.push(style.dim(status));
162
97
  }
163
- for (const toolCallOrResult of currentToolCalls) {
164
- const toolName = toolCallOrResult.toolName;
165
- if (!toolColors.has(toolName)) {
166
- const availableColors = styleColors.filter((color) => !Array.from(toolColors.values()).some((c) => c === style[color]));
167
- const color = availableColors.length > 0
168
- ? (availableColors[Math.floor(Math.random() * availableColors.length)] ?? "white")
169
- : "white";
170
- toolColors.set(toolName, style[color]);
171
- }
172
- toolsCalled.push(toolName);
173
- }
174
- }
175
- if (toolsCalled.length > 0) {
176
- results.push(style.dim("Tools:"));
177
- let toolBlocks = "";
178
- for (const toolCalled of toolsCalled) {
179
- const colorFn = toolColors.get(toolCalled) ?? style.white;
180
- toolBlocks += `${colorFn("██")} `;
181
- }
182
- results.push(toolBlocks);
183
- results.push("");
184
- let toolLegend = "";
185
- const uniqueTools = new Set(toolsCalled);
186
- for (const [index, toolCalled] of Array.from(uniqueTools).entries()) {
187
- const colorFn = toolColors.get(toolCalled) ?? style.white;
188
- toolLegend += colorFn(toolCalled);
189
- if (index < new Set(toolsCalled).size - 1) {
190
- toolLegend += " - ";
191
- }
192
- }
193
- results.push(toolLegend);
194
- results.push("");
98
+ // Add progress bar output
99
+ results.push(...this.progressBar.render(width));
100
+ return results;
195
101
  }
196
- return results;
197
102
  }
@@ -0,0 +1,21 @@
1
+ import { type StyleInstance } from "../../terminal/style.ts";
2
+ import type { Component } from "../tui.ts";
3
+ /**
4
+ * Header component - displays styled header line
5
+ */
6
+ export declare class HeaderComponent implements Component {
7
+ private header;
8
+ private styleFn;
9
+ private width;
10
+ private cachedOutput?;
11
+ private cachedHeader?;
12
+ private cachedStyleFn?;
13
+ private cachedWidth?;
14
+ constructor(header: string, styleFn?: StyleInstance, width?: number);
15
+ setHeader(header: string): void;
16
+ setStyleFn(styleFn: StyleInstance): void;
17
+ setWidth(width: number): void;
18
+ private invalidateCache;
19
+ render(width: number): string[];
20
+ }
21
+ //# sourceMappingURL=header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../source/tui/components/header.ts"],"names":[],"mappings":"AACA,OAAc,EAAE,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAC/C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,KAAK,CAAS;IAGtB,OAAO,CAAC,YAAY,CAAC,CAAW;IAChC,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,WAAW,CAAC,CAAS;gBAG3B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,aAA0B,EACnC,KAAK,CAAC,EAAE,MAAM;IAOhB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKxC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,OAAO,CAAC,eAAe;IAOvB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CA+BhC"}
@@ -0,0 +1,63 @@
1
+ import { getTerminalSize } from "../../terminal/control.js";
2
+ import style from "../../terminal/style.js";
3
+ /**
4
+ * Header component - displays styled header line
5
+ */
6
+ export class HeaderComponent {
7
+ header;
8
+ styleFn;
9
+ width;
10
+ // Cache for rendered output
11
+ cachedOutput;
12
+ cachedHeader;
13
+ cachedStyleFn;
14
+ cachedWidth;
15
+ constructor(header, styleFn = style.cyan, width) {
16
+ this.header = header;
17
+ this.styleFn = styleFn;
18
+ this.width = width || 0;
19
+ }
20
+ setHeader(header) {
21
+ this.header = header;
22
+ this.invalidateCache();
23
+ }
24
+ setStyleFn(styleFn) {
25
+ this.styleFn = styleFn;
26
+ this.invalidateCache();
27
+ }
28
+ setWidth(width) {
29
+ this.width = width;
30
+ this.invalidateCache();
31
+ }
32
+ invalidateCache() {
33
+ this.cachedOutput = undefined;
34
+ this.cachedHeader = undefined;
35
+ this.cachedStyleFn = undefined;
36
+ this.cachedWidth = undefined;
37
+ }
38
+ render(width) {
39
+ // Use provided width if specified, otherwise use component width or terminal size
40
+ let renderWidth = width || this.width;
41
+ if (renderWidth === 0) {
42
+ const { columns } = getTerminalSize();
43
+ const cols = columns > 0 ? columns : 80;
44
+ renderWidth = Math.max(0, cols - this.header.length - 4);
45
+ }
46
+ // Check cache
47
+ if (this.cachedOutput &&
48
+ this.cachedHeader === this.header &&
49
+ this.cachedStyleFn === this.styleFn &&
50
+ this.cachedWidth === renderWidth) {
51
+ return this.cachedOutput;
52
+ }
53
+ const result = [
54
+ `${style.gray("\n── ")}${this.styleFn(this.header)} ${style.gray("─".repeat(renderWidth))}`,
55
+ ];
56
+ // Update cache
57
+ this.cachedOutput = result;
58
+ this.cachedHeader = this.header;
59
+ this.cachedStyleFn = this.styleFn;
60
+ this.cachedWidth = renderWidth;
61
+ return result;
62
+ }
63
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../source/tui/components/input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C;;GAEG;AACH,qBAAa,KAAM,YAAW,SAAS;IACrC,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,MAAM,CAAK;IACZ,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAE1C,QAAQ,IAAI,MAAM;IAIlB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAiE/B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAuDhC"}
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../source/tui/components/input.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C;;GAEG;AACH,qBAAa,KAAM,YAAW,SAAS;IACrC,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,MAAM,CAAK;IACZ,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAE1C,QAAQ,IAAI,MAAM;IAIlB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAiE/B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAuDhC"}
@@ -1,3 +1,4 @@
1
+ import { isArrowLeft, isArrowRight, isBackspace, isCtrlA, isCtrlE, isDelete, isEnter, } from "../../terminal/keys.js";
1
2
  import { visibleWidth } from "../utils.js";
2
3
  /**
3
4
  * Input component - single-line text input with horizontal scrolling
@@ -15,14 +16,14 @@ export class Input {
15
16
  }
16
17
  handleInput(data) {
17
18
  // Handle special keys
18
- if (data === "\r" || data === "\n") {
19
+ if (isEnter(data)) {
19
20
  // Enter - submit
20
21
  if (this.onSubmit) {
21
22
  this.onSubmit(this.value);
22
23
  }
23
24
  return;
24
25
  }
25
- if (data === "\x7f" || data === "\x08") {
26
+ if (isBackspace(data)) {
26
27
  // Backspace
27
28
  if (this.cursor > 0) {
28
29
  this.value =
@@ -31,21 +32,21 @@ export class Input {
31
32
  }
32
33
  return;
33
34
  }
34
- if (data === "\x1b[D") {
35
+ if (isArrowLeft(data)) {
35
36
  // Left arrow
36
37
  if (this.cursor > 0) {
37
38
  this.cursor--;
38
39
  }
39
40
  return;
40
41
  }
41
- if (data === "\x1b[C") {
42
+ if (isArrowRight(data)) {
42
43
  // Right arrow
43
44
  if (this.cursor < this.value.length) {
44
45
  this.cursor++;
45
46
  }
46
47
  return;
47
48
  }
48
- if (data === "\x1b[3~") {
49
+ if (isDelete(data)) {
49
50
  // Delete
50
51
  if (this.cursor < this.value.length) {
51
52
  this.value =
@@ -53,12 +54,12 @@ export class Input {
53
54
  }
54
55
  return;
55
56
  }
56
- if (data === "\x01") {
57
+ if (isCtrlA(data)) {
57
58
  // Ctrl+A - beginning of line
58
59
  this.cursor = 0;
59
60
  return;
60
61
  }
61
- if (data === "\x05") {
62
+ if (isCtrlE(data)) {
62
63
  // Ctrl+E - end of line
63
64
  this.cursor = this.value.length;
64
65
  return;
@@ -6,10 +6,15 @@ import { Text } from "./text.ts";
6
6
  export declare class Loader extends Text {
7
7
  private frames;
8
8
  private currentFrame;
9
+ private topPadding;
9
10
  private intervalId;
10
11
  private ui;
11
12
  private message;
12
- constructor(ui: TUI, message?: string);
13
+ constructor(ui: TUI, message?: string, topPadding?: boolean, customBgRgb?: {
14
+ r: number;
15
+ g: number;
16
+ b: number;
17
+ });
13
18
  render(width: number): string[];
14
19
  start(): void;
15
20
  stop(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../source/tui/components/loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;GAEG;AACH,qBAAa,MAAO,SAAQ,IAAI;IAC9B,OAAO,CAAC,MAAM,CAAsD;IACpE,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAEZ,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM;IAO5B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAIxC,KAAK;IAQL,IAAI;IAOJ,UAAU,CAAC,OAAO,EAAE,MAAM;IAK1B,OAAO,CAAC,aAAa;CAOtB"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../source/tui/components/loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;GAEG;AACH,qBAAa,MAAO,SAAQ,IAAI;IAC9B,OAAO,CAAC,MAAM,CAAsD;IACpE,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAGtB,EAAE,EAAE,GAAG,EACP,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,OAAO,EACpB,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAS1C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAOxC,KAAK;IAQL,IAAI;IAOJ,UAAU,CAAC,OAAO,EAAE,MAAM;IAK1B,OAAO,CAAC,aAAa;CAOtB"}
@@ -6,17 +6,22 @@ import { Text } from "./text.js";
6
6
  export class Loader extends Text {
7
7
  frames = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
8
8
  currentFrame = 0;
9
+ topPadding;
9
10
  intervalId = null;
10
11
  ui = null;
11
12
  message;
12
- constructor(ui, message) {
13
- super("", 1, 0);
13
+ constructor(ui, message, topPadding, customBgRgb) {
14
+ super("", 1, 0, customBgRgb);
14
15
  this.message = message ?? "Loading...";
16
+ this.topPadding = topPadding ?? true;
15
17
  this.ui = ui;
16
18
  this.start();
17
19
  }
18
20
  render(width) {
19
- return ["", ...super.render(width)];
21
+ if (this.topPadding) {
22
+ return ["", ...super.render(width)];
23
+ }
24
+ return super.render(width);
20
25
  }
21
26
  start() {
22
27
  this.updateDisplay();
@@ -1,29 +1,13 @@
1
+ import type { Theme } from "../../terminal/highlight/theme.ts";
1
2
  import type { Component } from "../tui.ts";
2
3
  type Color = "black" | "red" | "green" | "yellow" | "blue" | "magenta" | "cyan" | "white" | "gray" | "bgBlack" | "bgRed" | "bgGreen" | "bgYellow" | "bgBlue" | "bgMagenta" | "bgCyan" | "bgWhite" | "bgGray";
3
- /**
4
- * Default text styling for markdown content.
5
- * Applied to all text unless overridden by markdown formatting.
6
- */
7
- export interface DefaultTextStyle {
8
- /** Foreground color function */
9
- color?: (text: string) => string;
10
- /** Background color function */
11
- bgColor?: (text: string) => string;
12
- /** Bold text */
13
- bold?: boolean;
14
- /** Italic text */
15
- italic?: boolean;
16
- /** Strikethrough text */
17
- strikethrough?: boolean;
18
- /** Underline text */
19
- underline?: boolean;
20
- }
21
4
  /**
22
5
  * Theme functions for markdown elements.
23
6
  * Each function takes text and returns styled text with ANSI codes.
24
7
  */
25
8
  export interface MarkdownTheme {
26
9
  heading: (text: string) => string;
10
+ paragraph: (text: string) => string;
27
11
  link: (text: string) => string;
28
12
  linkUrl: (text: string) => string;
29
13
  code: (text: string) => string;
@@ -38,20 +22,39 @@ export interface MarkdownTheme {
38
22
  strikethrough: (text: string) => string;
39
23
  underline: (text: string) => string;
40
24
  }
25
+ /**
26
+ * Options for configuring Markdown component
27
+ */
28
+ export interface MarkdownOptions {
29
+ /** Background color */
30
+ bgColor?: Color;
31
+ /** Custom background RGB color */
32
+ customBgRgb?: {
33
+ r: number;
34
+ g: number;
35
+ b: number;
36
+ };
37
+ /** Horizontal padding */
38
+ paddingX?: number;
39
+ /** Vertical padding */
40
+ paddingY?: number;
41
+ /** Theme for markdown */
42
+ theme?: MarkdownTheme;
43
+ /** Theme for code highlighting */
44
+ highlightTheme?: Theme;
45
+ }
41
46
  export declare class Markdown implements Component {
42
47
  private text;
43
48
  private bgColor?;
44
49
  private customBgRgb?;
45
50
  private paddingX;
46
51
  private paddingY;
52
+ private theme;
53
+ private highlightTheme;
47
54
  private cachedText?;
48
55
  private cachedWidth?;
49
56
  private cachedLines?;
50
- constructor(text?: string, bgColor?: Color, _fgColor?: Color, customBgRgb?: {
51
- r: number;
52
- g: number;
53
- b: number;
54
- }, paddingX?: number, paddingY?: number);
57
+ constructor(text: string, options?: MarkdownOptions);
55
58
  setText(text: string): void;
56
59
  setBgColor(bgColor?: Color): void;
57
60
  setCustomBgRgb(customBgRgb?: {
@@ -68,15 +71,16 @@ export declare class Markdown implements Component {
68
71
  private renderToken;
69
72
  private renderInlineTokens;
70
73
  private wrapLine;
74
+ /**
75
+ * Map a position in clean text to the corresponding position in styled text
76
+ * This accounts for ANSI escape codes that are inserted between characters
77
+ */
78
+ private cleanToStyledIndex;
71
79
  /**
72
80
  * Protect inline code spans by replacing them with placeholders
73
81
  * This prevents wrapAnsi from breaking code spans across lines
74
82
  */
75
83
  private protectCodeSpans;
76
- /**
77
- * Check if a potential code span is an actual code span (not escaped backticks)
78
- */
79
- private isActualCodeSpan;
80
84
  /**
81
85
  * Check if a line represents a nested list item
82
86
  */