@travisennis/acai 0.0.8 → 0.0.10

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 (386) hide show
  1. package/README.md +48 -729
  2. package/bin/acai +52 -0
  3. package/dist/agent/index.d.ts +12 -2
  4. package/dist/agent/index.d.ts.map +1 -1
  5. package/dist/agent/index.js +378 -168
  6. package/dist/agent/sub-agent.d.ts +23 -0
  7. package/dist/agent/sub-agent.d.ts.map +1 -0
  8. package/dist/agent/sub-agent.js +109 -0
  9. package/dist/cli/index.d.ts +26 -0
  10. package/dist/cli/index.d.ts.map +1 -0
  11. package/dist/{cli.js → cli/index.js} +84 -76
  12. package/dist/cli/stdin.d.ts +9 -0
  13. package/dist/cli/stdin.d.ts.map +1 -0
  14. package/dist/cli/stdin.js +37 -0
  15. package/dist/commands/copy/index.js +2 -2
  16. package/dist/commands/copy/utils.d.ts.map +1 -1
  17. package/dist/commands/copy/utils.js +15 -13
  18. package/dist/commands/generate-rules/index.d.ts +1 -1
  19. package/dist/commands/generate-rules/index.d.ts.map +1 -1
  20. package/dist/commands/generate-rules/index.js +16 -100
  21. package/dist/commands/generate-rules/service.d.ts +21 -0
  22. package/dist/commands/generate-rules/service.d.ts.map +1 -0
  23. package/dist/commands/generate-rules/service.js +103 -0
  24. package/dist/commands/handoff/index.js +2 -2
  25. package/dist/commands/health/index.js +1 -1
  26. package/dist/commands/health/utils.d.ts.map +1 -1
  27. package/dist/commands/health/utils.js +6 -0
  28. package/dist/commands/history/index.d.ts +1 -1
  29. package/dist/commands/history/index.d.ts.map +1 -1
  30. package/dist/commands/history/index.js +17 -18
  31. package/dist/commands/history/types.d.ts +38 -0
  32. package/dist/commands/history/types.d.ts.map +1 -1
  33. package/dist/commands/history/utils.d.ts.map +1 -1
  34. package/dist/commands/history/utils.js +63 -58
  35. package/dist/commands/init/index.d.ts.map +1 -1
  36. package/dist/commands/init/index.js +3 -8
  37. package/dist/commands/init-project/index.d.ts.map +1 -1
  38. package/dist/commands/init-project/index.js +3 -3
  39. package/dist/commands/init-project/utils.d.ts.map +1 -1
  40. package/dist/commands/init-project/utils.js +10 -2
  41. package/dist/commands/list-tools/index.d.ts.map +1 -1
  42. package/dist/commands/list-tools/index.js +7 -31
  43. package/dist/commands/manager.d.ts +2 -2
  44. package/dist/commands/manager.d.ts.map +1 -1
  45. package/dist/commands/manager.js +57 -33
  46. package/dist/commands/model/index.d.ts.map +1 -1
  47. package/dist/commands/model/index.js +20 -151
  48. package/dist/commands/model/model-panel.d.ts +4 -0
  49. package/dist/commands/model/model-panel.d.ts.map +1 -0
  50. package/dist/commands/model/model-panel.js +144 -0
  51. package/dist/commands/paste/index.d.ts.map +1 -1
  52. package/dist/commands/paste/index.js +59 -62
  53. package/dist/commands/paste/utils.d.ts.map +1 -1
  54. package/dist/commands/paste/utils.js +88 -58
  55. package/dist/commands/pickup/index.d.ts.map +1 -1
  56. package/dist/commands/pickup/index.js +6 -3
  57. package/dist/commands/pickup/utils.js +3 -3
  58. package/dist/commands/resources/index.d.ts.map +1 -1
  59. package/dist/commands/resources/index.js +33 -50
  60. package/dist/commands/review/index.d.ts.map +1 -1
  61. package/dist/commands/review/index.js +3 -117
  62. package/dist/commands/review/review-panel.d.ts +3 -0
  63. package/dist/commands/review/review-panel.d.ts.map +1 -0
  64. package/dist/commands/review/review-panel.js +186 -0
  65. package/dist/commands/review/utils.d.ts +9 -0
  66. package/dist/commands/review/utils.d.ts.map +1 -1
  67. package/dist/commands/review/utils.js +127 -68
  68. package/dist/commands/session/index.d.ts +1 -1
  69. package/dist/commands/session/index.d.ts.map +1 -1
  70. package/dist/commands/session/index.js +134 -112
  71. package/dist/commands/session/types.d.ts +7 -0
  72. package/dist/commands/session/types.d.ts.map +1 -1
  73. package/dist/commands/share/html-renderer.d.ts +25 -0
  74. package/dist/commands/share/html-renderer.d.ts.map +1 -0
  75. package/dist/commands/share/html-renderer.js +384 -0
  76. package/dist/commands/share/index.d.ts +3 -0
  77. package/dist/commands/share/index.d.ts.map +1 -0
  78. package/dist/commands/share/index.js +122 -0
  79. package/dist/commands/shell/index.d.ts.map +1 -1
  80. package/dist/commands/shell/index.js +16 -1
  81. package/dist/commands/types.d.ts +2 -2
  82. package/dist/commands/types.d.ts.map +1 -1
  83. package/dist/{config.d.ts → config/index.d.ts} +20 -9
  84. package/dist/config/index.d.ts.map +1 -0
  85. package/dist/{config.js → config/index.js} +43 -42
  86. package/dist/execution/index.d.ts.map +1 -1
  87. package/dist/execution/index.js +75 -55
  88. package/dist/index.d.ts +1 -0
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +170 -127
  91. package/dist/middleware/cache.d.ts.map +1 -1
  92. package/dist/middleware/cache.js +18 -36
  93. package/dist/models/ai-config.d.ts +1 -0
  94. package/dist/models/ai-config.d.ts.map +1 -1
  95. package/dist/models/ai-config.js +4 -3
  96. package/dist/models/anthropic-provider.d.ts +2 -5
  97. package/dist/models/anthropic-provider.d.ts.map +1 -1
  98. package/dist/models/anthropic-provider.js +3 -70
  99. package/dist/models/deepseek-provider.d.ts +1 -0
  100. package/dist/models/deepseek-provider.d.ts.map +1 -1
  101. package/dist/models/google-provider.d.ts +2 -3
  102. package/dist/models/google-provider.d.ts.map +1 -1
  103. package/dist/models/google-provider.js +0 -26
  104. package/dist/models/groq-provider.d.ts +1 -0
  105. package/dist/models/groq-provider.d.ts.map +1 -1
  106. package/dist/models/manager.d.ts +13 -2
  107. package/dist/models/manager.d.ts.map +1 -1
  108. package/dist/models/manager.js +20 -8
  109. package/dist/models/openai-provider.d.ts +5 -5
  110. package/dist/models/openai-provider.d.ts.map +1 -1
  111. package/dist/models/openai-provider.js +27 -40
  112. package/dist/models/opencode-zen-provider.d.ts +8 -3
  113. package/dist/models/opencode-zen-provider.d.ts.map +1 -1
  114. package/dist/models/opencode-zen-provider.js +68 -11
  115. package/dist/models/openrouter-provider.d.ts +24 -30
  116. package/dist/models/openrouter-provider.d.ts.map +1 -1
  117. package/dist/models/openrouter-provider.js +92 -177
  118. package/dist/models/providers.d.ts +1 -1
  119. package/dist/models/providers.d.ts.map +1 -1
  120. package/dist/models/xai-provider.d.ts +4 -3
  121. package/dist/models/xai-provider.d.ts.map +1 -1
  122. package/dist/models/xai-provider.js +18 -18
  123. package/dist/modes/manager.d.ts +23 -0
  124. package/dist/modes/manager.d.ts.map +1 -0
  125. package/dist/modes/manager.js +77 -0
  126. package/dist/modes/prompts.d.ts +2 -0
  127. package/dist/modes/prompts.d.ts.map +1 -0
  128. package/dist/modes/prompts.js +143 -0
  129. package/dist/prompts/mentions.d.ts +11 -0
  130. package/dist/prompts/mentions.d.ts.map +1 -0
  131. package/dist/{mentions.js → prompts/mentions.js} +21 -80
  132. package/dist/prompts/system-prompt.d.ts +26 -0
  133. package/dist/prompts/system-prompt.d.ts.map +1 -0
  134. package/dist/{prompts.js → prompts/system-prompt.js} +50 -22
  135. package/dist/repl/index.d.ts +174 -0
  136. package/dist/repl/index.d.ts.map +1 -0
  137. package/dist/{repl-new.js → repl/index.js} +399 -76
  138. package/dist/repl/project-status.d.ts +1 -0
  139. package/dist/repl/project-status.d.ts.map +1 -1
  140. package/dist/repl/project-status.js +4 -1
  141. package/dist/sessions/manager.d.ts +93 -1
  142. package/dist/sessions/manager.d.ts.map +1 -1
  143. package/dist/sessions/manager.js +264 -9
  144. package/dist/sessions/summary.d.ts +4 -0
  145. package/dist/sessions/summary.d.ts.map +1 -0
  146. package/dist/sessions/summary.js +30 -0
  147. package/dist/{skills.d.ts → skills/index.d.ts} +14 -2
  148. package/dist/skills/index.d.ts.map +1 -0
  149. package/dist/skills/index.js +294 -0
  150. package/dist/subagents/index.d.ts +15 -0
  151. package/dist/subagents/index.d.ts.map +1 -0
  152. package/dist/subagents/index.js +231 -0
  153. package/dist/terminal/control.d.ts +1 -1
  154. package/dist/terminal/control.d.ts.map +1 -1
  155. package/dist/terminal/control.js +30 -9
  156. package/dist/terminal/east-asian-width.d.ts.map +1 -1
  157. package/dist/terminal/east-asian-width.js +404 -351
  158. package/dist/terminal/keys.d.ts +17 -0
  159. package/dist/terminal/keys.d.ts.map +1 -1
  160. package/dist/terminal/keys.js +37 -0
  161. package/dist/terminal/select-prompt.d.ts.map +1 -1
  162. package/dist/terminal/select-prompt.js +24 -12
  163. package/dist/terminal/string-width.d.ts.map +1 -1
  164. package/dist/terminal/string-width.js +25 -27
  165. package/dist/terminal/style.d.ts.map +1 -1
  166. package/dist/terminal/style.js +4 -7
  167. package/dist/terminal/supports-color.d.ts.map +1 -1
  168. package/dist/terminal/supports-color.js +41 -27
  169. package/dist/terminal/table/cell.d.ts +12 -0
  170. package/dist/terminal/table/cell.d.ts.map +1 -1
  171. package/dist/terminal/table/cell.js +40 -25
  172. package/dist/terminal/table/layout-manager.d.ts.map +1 -1
  173. package/dist/terminal/table/layout-manager.js +100 -68
  174. package/dist/terminal/table/utils.d.ts.map +1 -1
  175. package/dist/terminal/table/utils.js +17 -10
  176. package/dist/terminal/wrap-ansi.d.ts.map +1 -1
  177. package/dist/terminal/wrap-ansi.js +172 -103
  178. package/dist/tokens/tracker.d.ts +1 -0
  179. package/dist/tokens/tracker.d.ts.map +1 -1
  180. package/dist/tokens/tracker.js +3 -0
  181. package/dist/tools/agent.d.ts +27 -0
  182. package/dist/tools/agent.d.ts.map +1 -0
  183. package/dist/tools/agent.js +81 -0
  184. package/dist/tools/bash.d.ts +4 -3
  185. package/dist/tools/bash.d.ts.map +1 -1
  186. package/dist/tools/bash.js +343 -121
  187. package/dist/tools/code-search.d.ts +41 -0
  188. package/dist/tools/code-search.d.ts.map +1 -0
  189. package/dist/tools/code-search.js +195 -0
  190. package/dist/tools/directory-tree.d.ts +3 -3
  191. package/dist/tools/directory-tree.d.ts.map +1 -1
  192. package/dist/tools/directory-tree.js +8 -5
  193. package/dist/tools/dynamic-tool-loader.d.ts +2 -5
  194. package/dist/tools/dynamic-tool-loader.d.ts.map +1 -1
  195. package/dist/tools/dynamic-tool-loader.js +20 -4
  196. package/dist/tools/edit-file.d.ts +7 -7
  197. package/dist/tools/edit-file.d.ts.map +1 -1
  198. package/dist/tools/edit-file.js +164 -66
  199. package/dist/tools/glob.d.ts +6 -6
  200. package/dist/tools/glob.d.ts.map +1 -1
  201. package/dist/tools/glob.js +95 -55
  202. package/dist/tools/grep.d.ts +15 -12
  203. package/dist/tools/grep.d.ts.map +1 -1
  204. package/dist/tools/grep.js +300 -192
  205. package/dist/tools/index.d.ts +143 -5
  206. package/dist/tools/index.d.ts.map +1 -1
  207. package/dist/tools/index.js +39 -24
  208. package/dist/tools/ls.d.ts +2 -2
  209. package/dist/tools/ls.d.ts.map +1 -1
  210. package/dist/tools/ls.js +7 -5
  211. package/dist/tools/read-file.d.ts +3 -3
  212. package/dist/tools/read-file.d.ts.map +1 -1
  213. package/dist/tools/read-file.js +74 -34
  214. package/dist/tools/save-file.d.ts +3 -3
  215. package/dist/tools/save-file.d.ts.map +1 -1
  216. package/dist/tools/save-file.js +11 -11
  217. package/dist/tools/skill.d.ts +23 -0
  218. package/dist/tools/skill.d.ts.map +1 -0
  219. package/dist/tools/skill.js +65 -0
  220. package/dist/tools/think.d.ts.map +1 -1
  221. package/dist/tools/think.js +2 -9
  222. package/dist/tools/utils.d.ts +2 -0
  223. package/dist/tools/utils.d.ts.map +1 -1
  224. package/dist/tools/utils.js +12 -0
  225. package/dist/tools/web-fetch.d.ts +62 -0
  226. package/dist/tools/web-fetch.d.ts.map +1 -0
  227. package/dist/tools/web-fetch.js +429 -0
  228. package/dist/tools/web-search.d.ts +62 -0
  229. package/dist/tools/web-search.d.ts.map +1 -0
  230. package/dist/tools/web-search.js +226 -0
  231. package/dist/tui/autocomplete/attachment-provider.d.ts +3 -6
  232. package/dist/tui/autocomplete/attachment-provider.d.ts.map +1 -1
  233. package/dist/tui/autocomplete/attachment-provider.js +25 -78
  234. package/dist/tui/autocomplete/base-provider.d.ts +1 -0
  235. package/dist/tui/autocomplete/base-provider.d.ts.map +1 -1
  236. package/dist/tui/autocomplete/combined-provider.d.ts +1 -4
  237. package/dist/tui/autocomplete/combined-provider.d.ts.map +1 -1
  238. package/dist/tui/autocomplete/combined-provider.js +3 -17
  239. package/dist/tui/autocomplete/command-provider.d.ts +1 -0
  240. package/dist/tui/autocomplete/command-provider.d.ts.map +1 -1
  241. package/dist/tui/autocomplete/command-provider.js +3 -0
  242. package/dist/tui/autocomplete/file-search-provider.d.ts +2 -1
  243. package/dist/tui/autocomplete/file-search-provider.d.ts.map +1 -1
  244. package/dist/tui/autocomplete/file-search-provider.js +36 -16
  245. package/dist/tui/autocomplete/skill-provider.d.ts +17 -0
  246. package/dist/tui/autocomplete/skill-provider.d.ts.map +1 -0
  247. package/dist/tui/autocomplete/skill-provider.js +49 -0
  248. package/dist/tui/autocomplete.d.ts +2 -2
  249. package/dist/tui/autocomplete.d.ts.map +1 -1
  250. package/dist/tui/autocomplete.js +3 -5
  251. package/dist/tui/components/assistant-message.d.ts.map +1 -1
  252. package/dist/tui/components/assistant-message.js +0 -4
  253. package/dist/tui/components/editor.d.ts +21 -2
  254. package/dist/tui/components/editor.d.ts.map +1 -1
  255. package/dist/tui/components/editor.js +228 -236
  256. package/dist/tui/components/footer.d.ts +6 -4
  257. package/dist/tui/components/footer.d.ts.map +1 -1
  258. package/dist/tui/components/footer.js +49 -25
  259. package/dist/tui/components/markdown.d.ts +8 -5
  260. package/dist/tui/components/markdown.d.ts.map +1 -1
  261. package/dist/tui/components/markdown.js +57 -39
  262. package/dist/tui/components/modal.d.ts.map +1 -1
  263. package/dist/tui/components/modal.js +35 -33
  264. package/dist/tui/components/notification.d.ts +13 -2
  265. package/dist/tui/components/notification.d.ts.map +1 -1
  266. package/dist/tui/components/notification.js +37 -2
  267. package/dist/tui/components/progress-bar.js +1 -1
  268. package/dist/tui/components/select-list.d.ts +1 -0
  269. package/dist/tui/components/select-list.d.ts.map +1 -1
  270. package/dist/tui/components/select-list.js +14 -11
  271. package/dist/tui/components/text.d.ts +16 -0
  272. package/dist/tui/components/text.d.ts.map +1 -1
  273. package/dist/tui/components/text.js +72 -57
  274. package/dist/tui/components/thinking-block.d.ts +9 -0
  275. package/dist/tui/components/thinking-block.d.ts.map +1 -1
  276. package/dist/tui/components/thinking-block.js +43 -11
  277. package/dist/tui/components/tool-execution.d.ts +5 -1
  278. package/dist/tui/components/tool-execution.d.ts.map +1 -1
  279. package/dist/tui/components/tool-execution.js +19 -10
  280. package/dist/tui/components/user-message.d.ts.map +1 -1
  281. package/dist/tui/components/user-message.js +0 -3
  282. package/dist/tui/components/welcome.js +2 -2
  283. package/dist/tui/editor-launcher.d.ts +13 -0
  284. package/dist/tui/editor-launcher.d.ts.map +1 -0
  285. package/dist/tui/editor-launcher.js +39 -0
  286. package/dist/tui/index.d.ts +3 -1
  287. package/dist/tui/index.d.ts.map +1 -1
  288. package/dist/tui/index.js +1 -0
  289. package/dist/tui/terminal.d.ts +27 -0
  290. package/dist/tui/terminal.d.ts.map +1 -1
  291. package/dist/tui/terminal.js +144 -15
  292. package/dist/tui/tui.d.ts +43 -0
  293. package/dist/tui/tui.d.ts.map +1 -1
  294. package/dist/tui/tui.js +172 -41
  295. package/dist/utils/bash/parse.d.ts +19 -0
  296. package/dist/utils/bash/parse.d.ts.map +1 -0
  297. package/dist/utils/bash/parse.js +223 -0
  298. package/dist/utils/bash/quote.d.ts +6 -0
  299. package/dist/utils/bash/quote.d.ts.map +1 -0
  300. package/dist/utils/bash/quote.js +23 -0
  301. package/dist/utils/bash.d.ts.map +1 -1
  302. package/dist/utils/bash.js +211 -126
  303. package/dist/utils/command-protection.d.ts +28 -0
  304. package/dist/utils/command-protection.d.ts.map +1 -0
  305. package/dist/utils/command-protection.js +324 -0
  306. package/dist/utils/dedent.d.ts.map +1 -0
  307. package/dist/utils/env-expand.d.ts +2 -0
  308. package/dist/utils/env-expand.d.ts.map +1 -0
  309. package/dist/utils/env-expand.js +8 -0
  310. package/dist/utils/filesystem/path-display.d.ts +11 -0
  311. package/dist/utils/filesystem/path-display.d.ts.map +1 -0
  312. package/dist/utils/filesystem/path-display.js +32 -0
  313. package/dist/utils/filesystem/security.d.ts +2 -2
  314. package/dist/utils/filesystem/security.d.ts.map +1 -1
  315. package/dist/utils/filesystem/security.js +32 -31
  316. package/dist/utils/formatting.d.ts.map +1 -0
  317. package/dist/{formatting.js → utils/formatting.js} +1 -1
  318. package/dist/utils/git.d.ts +4 -0
  319. package/dist/utils/git.d.ts.map +1 -1
  320. package/dist/utils/git.js +30 -0
  321. package/dist/utils/glob.d.ts +1 -1
  322. package/dist/utils/glob.d.ts.map +1 -1
  323. package/dist/utils/logger.d.ts.map +1 -0
  324. package/dist/{logger.js → utils/logger.js} +1 -1
  325. package/dist/utils/parsing.d.ts.map +1 -0
  326. package/dist/utils/process.d.ts.map +1 -1
  327. package/dist/utils/process.js +90 -37
  328. package/dist/utils/templates.d.ts +2 -0
  329. package/dist/utils/templates.d.ts.map +1 -0
  330. package/dist/utils/templates.js +24 -0
  331. package/dist/utils/version.d.ts.map +1 -0
  332. package/dist/{version.js → utils/version.js} +1 -1
  333. package/package.json +34 -25
  334. package/dist/cli.d.ts +0 -23
  335. package/dist/cli.d.ts.map +0 -1
  336. package/dist/commands/exit/index.d.ts +0 -10
  337. package/dist/commands/exit/index.d.ts.map +0 -1
  338. package/dist/commands/exit/index.js +0 -21
  339. package/dist/commands/exit/types.d.ts +0 -8
  340. package/dist/commands/exit/types.d.ts.map +0 -1
  341. package/dist/commands/exit/types.js +0 -1
  342. package/dist/commands/exit/utils.d.ts +0 -2
  343. package/dist/commands/exit/utils.d.ts.map +0 -1
  344. package/dist/commands/exit/utils.js +0 -13
  345. package/dist/commands/prompt/index.d.ts +0 -5
  346. package/dist/commands/prompt/index.d.ts.map +0 -1
  347. package/dist/commands/prompt/index.js +0 -126
  348. package/dist/commands/prompt/types.d.ts +0 -15
  349. package/dist/commands/prompt/types.d.ts.map +0 -1
  350. package/dist/commands/prompt/types.js +0 -1
  351. package/dist/commands/prompt/utils.d.ts +0 -12
  352. package/dist/commands/prompt/utils.d.ts.map +0 -1
  353. package/dist/commands/prompt/utils.js +0 -107
  354. package/dist/commands/reset/index.d.ts +0 -3
  355. package/dist/commands/reset/index.d.ts.map +0 -1
  356. package/dist/commands/reset/index.js +0 -25
  357. package/dist/commands/reset/types.d.ts +0 -1
  358. package/dist/commands/reset/types.d.ts.map +0 -1
  359. package/dist/commands/reset/types.js +0 -3
  360. package/dist/commands/save/index.d.ts +0 -3
  361. package/dist/commands/save/index.d.ts.map +0 -1
  362. package/dist/commands/save/index.js +0 -19
  363. package/dist/config.d.ts.map +0 -1
  364. package/dist/dedent.d.ts.map +0 -1
  365. package/dist/formatting.d.ts.map +0 -1
  366. package/dist/logger.d.ts.map +0 -1
  367. package/dist/mentions.d.ts +0 -14
  368. package/dist/mentions.d.ts.map +0 -1
  369. package/dist/parsing.d.ts.map +0 -1
  370. package/dist/prompts.d.ts +0 -10
  371. package/dist/prompts.d.ts.map +0 -1
  372. package/dist/repl-new.d.ts +0 -62
  373. package/dist/repl-new.d.ts.map +0 -1
  374. package/dist/skills.d.ts.map +0 -1
  375. package/dist/skills.js +0 -233
  376. package/dist/tui/autocomplete/path-provider.d.ts +0 -21
  377. package/dist/tui/autocomplete/path-provider.d.ts.map +0 -1
  378. package/dist/tui/autocomplete/path-provider.js +0 -164
  379. package/dist/version.d.ts.map +0 -1
  380. /package/dist/{dedent.d.ts → utils/dedent.d.ts} +0 -0
  381. /package/dist/{dedent.js → utils/dedent.js} +0 -0
  382. /package/dist/{formatting.d.ts → utils/formatting.d.ts} +0 -0
  383. /package/dist/{logger.d.ts → utils/logger.d.ts} +0 -0
  384. /package/dist/{parsing.d.ts → utils/parsing.d.ts} +0 -0
  385. /package/dist/{parsing.js → utils/parsing.js} +0 -0
  386. /package/dist/{version.d.ts → utils/version.d.ts} +0 -0
@@ -1,13 +1,113 @@
1
- import { tool } from "ai";
2
- import { formatDate, formatDuration, formatNumber, formatPercentage, } from "../../formatting.js";
3
- import { logger } from "../../logger.js";
4
- import { systemPrompt } from "../../prompts.js";
1
+ import { systemPrompt } from "../../prompts/system-prompt.js";
5
2
  import { getTerminalSize } from "../../terminal/control.js";
6
- import { initTools, } from "../../tools/index.js";
7
- import { prepareTools } from "../../tools/utils.js";
3
+ import { initTools } from "../../tools/index.js";
4
+ import { prepareTools, toAiSdkTools } from "../../tools/utils.js";
8
5
  import { Container, Modal, ModalText, TableComponent, } from "../../tui/index.js";
6
+ import { formatDate, formatDuration, formatNumber, formatPercentage, } from "../../utils/formatting.js";
7
+ import { logger } from "../../utils/logger.js";
9
8
  import { countMessageTokens } from "./types.js";
10
- export function sessionCommand({ config, tokenCounter, modelManager, sessionManager: messageHistory, workspace, tokenTracker, }) {
9
+ function formatCost(cost) {
10
+ if (cost === 0)
11
+ return "$0.00";
12
+ if (cost < 0.01)
13
+ return `$${cost.toFixed(6)}`;
14
+ if (cost < 1)
15
+ return `$${cost.toFixed(4)}`;
16
+ return `$${cost.toFixed(2)}`;
17
+ }
18
+ async function calculateToolsTokens(workspace, tokenCounter) {
19
+ try {
20
+ const tools = await initTools({ workspace });
21
+ const toolDefs = toAiSdkTools(tools);
22
+ const toolNames = JSON.stringify(prepareTools(toolDefs));
23
+ return tokenCounter.count(toolNames);
24
+ }
25
+ catch (error) {
26
+ logger.info({ error: error instanceof Error ? error.message : String(error) }, "Failed to calculate tools tokens");
27
+ return 0;
28
+ }
29
+ }
30
+ function buildContextTable(breakdown, window) {
31
+ return [
32
+ [
33
+ "System Prompt",
34
+ formatNumber(breakdown.systemPrompt),
35
+ formatPercentage(breakdown.systemPrompt, window),
36
+ ],
37
+ [
38
+ " Core Instructions",
39
+ formatNumber(breakdown.systemPromptBreakdown.core),
40
+ formatPercentage(breakdown.systemPromptBreakdown.core, window),
41
+ ],
42
+ [
43
+ " ~/.acai/AGENTS.md",
44
+ formatNumber(breakdown.systemPromptBreakdown.userAgentsMd),
45
+ formatPercentage(breakdown.systemPromptBreakdown.userAgentsMd, window),
46
+ ],
47
+ [
48
+ " ./AGENTS.md",
49
+ formatNumber(breakdown.systemPromptBreakdown.cwdAgentsMd),
50
+ formatPercentage(breakdown.systemPromptBreakdown.cwdAgentsMd, window),
51
+ ],
52
+ [
53
+ " Learned Rules",
54
+ formatNumber(breakdown.systemPromptBreakdown.learnedRules),
55
+ formatPercentage(breakdown.systemPromptBreakdown.learnedRules, window),
56
+ ],
57
+ [
58
+ " Skills",
59
+ formatNumber(breakdown.systemPromptBreakdown.skills),
60
+ formatPercentage(breakdown.systemPromptBreakdown.skills, window),
61
+ ],
62
+ [
63
+ "System Tools",
64
+ formatNumber(breakdown.tools),
65
+ formatPercentage(breakdown.tools, window),
66
+ ],
67
+ [
68
+ "Messages",
69
+ formatNumber(breakdown.messages),
70
+ formatPercentage(breakdown.messages, window),
71
+ ],
72
+ [
73
+ "Free Space",
74
+ formatNumber(breakdown.free),
75
+ formatPercentage(breakdown.free, window),
76
+ ],
77
+ [
78
+ "Total Used",
79
+ formatNumber(breakdown.totalUsed),
80
+ formatPercentage(breakdown.totalUsed, window),
81
+ ],
82
+ ["Context Window", formatNumber(window), "100%"],
83
+ ];
84
+ }
85
+ function buildTokenTable(meta, inputTokens, outputTokens) {
86
+ const inputCost = (meta.costPerInputToken ?? 0) * inputTokens;
87
+ const outputCost = (meta.costPerOutputToken ?? 0) * outputTokens;
88
+ const totalTokens = inputTokens + outputTokens;
89
+ const totalCost = inputCost + outputCost;
90
+ return [
91
+ [
92
+ "Input Tokens",
93
+ formatNumber(inputTokens),
94
+ formatCost(inputCost),
95
+ meta.costPerInputToken
96
+ ? `$${meta.costPerInputToken.toFixed(6)}/token`
97
+ : "N/A",
98
+ ],
99
+ [
100
+ "Output Tokens",
101
+ formatNumber(outputTokens),
102
+ formatCost(outputCost),
103
+ meta.costPerOutputToken
104
+ ? `$${meta.costPerOutputToken.toFixed(6)}/token`
105
+ : "N/A",
106
+ ],
107
+ ["Total Tokens", formatNumber(totalTokens), formatCost(totalCost), ""],
108
+ ];
109
+ }
110
+ export function sessionCommand({ config, tokenCounter, modelManager, sessionManager, workspace, tokenTracker, }) {
11
111
  return {
12
112
  command: "/session",
13
113
  description: "Show comprehensive session information including usage, context, and costs",
@@ -16,48 +116,41 @@ export function sessionCommand({ config, tokenCounter, modelManager, sessionMana
16
116
  const meta = modelManager.getModelMetadata("repl");
17
117
  const window = meta.contextWindow;
18
118
  const projectConfig = await config.getConfig();
19
- const sys = await systemPrompt({
119
+ const sysResult = await systemPrompt({
20
120
  activeTools: projectConfig.tools.activeTools,
21
121
  allowedDirs: workspace.allowedDirs,
122
+ logsPath: projectConfig.logs?.path,
22
123
  includeRules: true,
23
124
  });
24
- const systemPromptTokens = tokenCounter.count(sys);
25
- let toolsTokens = 0;
26
- try {
27
- const tools = await initTools({
28
- workspace,
29
- });
30
- const toolDefs = Object.fromEntries(Object.entries(tools).map((t) => [
31
- t[0],
32
- // biome-ignore lint/suspicious/noExplicitAny: temporary
33
- tool(t[1].toolDef),
34
- ]));
35
- const toolNames = JSON.stringify(prepareTools(toolDefs));
36
- toolsTokens = tokenCounter.count(toolNames);
37
- }
38
- catch (error) {
39
- logger.info({ error: error instanceof Error ? error.message : String(error) }, "Failed to calculate tools tokens");
40
- toolsTokens = 0;
41
- }
42
- const messages = messageHistory.get();
125
+ const systemPromptTokens = tokenCounter.count(sysResult.prompt);
126
+ const systemPromptBreakdown = {
127
+ core: tokenCounter.count(sysResult.components.core),
128
+ userAgentsMd: tokenCounter.count(sysResult.components.userAgentsMd),
129
+ cwdAgentsMd: tokenCounter.count(sysResult.components.cwdAgentsMd),
130
+ learnedRules: tokenCounter.count(sysResult.components.learnedRules),
131
+ skills: tokenCounter.count(sysResult.components.skills),
132
+ };
133
+ const toolsTokens = await calculateToolsTokens(workspace, tokenCounter);
134
+ const messages = sessionManager.get();
43
135
  const messagesTokens = countMessageTokens(messages, tokenCounter);
44
136
  const used = systemPromptTokens + toolsTokens + messagesTokens;
45
137
  const free = Math.max(0, window - used);
46
138
  const usedPercentage = window > 0 ? (used / window) * 100 : 0;
47
139
  const breakdown = {
48
140
  systemPrompt: systemPromptTokens,
141
+ systemPromptBreakdown,
49
142
  tools: toolsTokens,
50
143
  messages: messagesTokens,
51
144
  totalUsed: used,
52
145
  window,
53
146
  free,
54
147
  };
55
- const sessionId = messageHistory.getSessionId();
56
- const sessionFile = `message-history-${sessionId}.json`;
57
- const modelId = messageHistory.getModelId() || "Not set";
58
- const title = messageHistory.getTitle() || "No title";
59
- const createdAt = messageHistory.getCreatedAt();
60
- const updatedAt = messageHistory.getUpdatedAt();
148
+ const sessionId = sessionManager.getSessionId();
149
+ const createdAt = sessionManager.getCreatedAt();
150
+ const updatedAt = sessionManager.getUpdatedAt();
151
+ const sessionFile = sessionManager.getSessionFileName();
152
+ const modelId = sessionManager.getModelId() || "Not set";
153
+ const title = sessionManager.getTitle() || "No title";
61
154
  const duration = formatDuration(updatedAt.getTime() - createdAt.getTime());
62
155
  const messageCount = messages.length;
63
156
  const userMessages = messages.filter((m) => m.role === "user").length;
@@ -66,16 +159,12 @@ export function sessionCommand({ config, tokenCounter, modelManager, sessionMana
66
159
  const totalUsage = tokenTracker.getTotalUsage();
67
160
  const inputTokens = totalUsage.inputTokens ?? 0;
68
161
  const outputTokens = totalUsage.outputTokens ?? 0;
69
- const totalTokens = inputTokens + outputTokens;
70
- const inputCost = (meta.costPerInputToken ?? 0) * inputTokens;
71
- const outputCost = (meta.costPerOutputToken ?? 0) * outputTokens;
72
- const totalCost = inputCost + outputCost;
73
162
  const usageBreakdown = tokenTracker.getUsageBreakdown();
74
163
  const { columns } = getTerminalSize();
75
164
  const modalContent = new Container();
76
165
  modalContent.addChild(new ModalText("Session Overview", 0, 1));
77
166
  modalContent.addChild(new ModalText("─".repeat(columns - 10), 0, 1));
78
- const metadataTable = [
167
+ modalContent.addChild(new TableComponent([
79
168
  ["Session ID", sessionId],
80
169
  ["Session File", sessionFile],
81
170
  ["Model", modelId],
@@ -83,102 +172,35 @@ export function sessionCommand({ config, tokenCounter, modelManager, sessionMana
83
172
  ["Duration", duration],
84
173
  ["Started", formatDate(createdAt)],
85
174
  ["Last Updated", formatDate(updatedAt)],
86
- ];
87
- modalContent.addChild(new TableComponent(metadataTable, {
88
- headers: ["Property", "Value"],
89
- colWidths: [25, 75],
90
- }));
175
+ ], { headers: ["Property", "Value"], colWidths: [25, 75] }));
91
176
  modalContent.addChild(new ModalText("", 0, 1));
92
177
  modalContent.addChild(new ModalText("Message Statistics", 0, 1));
93
- const messageStatsTable = [
178
+ modalContent.addChild(new TableComponent([
94
179
  ["Total Messages", String(messageCount)],
95
180
  ["User Messages", String(userMessages)],
96
181
  ["Assistant Messages", String(assistantMessages)],
97
182
  ["Tool Messages", String(toolMessages)],
98
- ];
99
- modalContent.addChild(new TableComponent(messageStatsTable, {
100
- headers: ["Type", "Count"],
101
- }));
183
+ ], { headers: ["Type", "Count"] }));
102
184
  modalContent.addChild(new ModalText("", 0, 1));
103
185
  modalContent.addChild(new ModalText("Context Usage", 0, 1));
104
- const contextTable = [
105
- [
106
- "System Prompt",
107
- formatNumber(breakdown.systemPrompt),
108
- formatPercentage(breakdown.systemPrompt, window),
109
- ],
110
- [
111
- "System Tools",
112
- formatNumber(breakdown.tools),
113
- formatPercentage(breakdown.tools, window),
114
- ],
115
- [
116
- "Messages",
117
- formatNumber(breakdown.messages),
118
- formatPercentage(breakdown.messages, window),
119
- ],
120
- [
121
- "Free Space",
122
- formatNumber(breakdown.free),
123
- formatPercentage(breakdown.free, window),
124
- ],
125
- [
126
- "Total Used",
127
- formatNumber(breakdown.totalUsed),
128
- formatPercentage(breakdown.totalUsed, window),
129
- ],
130
- ["Context Window", formatNumber(window), "100%"],
131
- ];
132
- modalContent.addChild(new TableComponent(contextTable, {
186
+ modalContent.addChild(new TableComponent(buildContextTable(breakdown, window), {
133
187
  headers: ["Section", "Tokens", "Percent"],
134
188
  }));
135
189
  const barWidth = Math.max(20, Math.min(50, columns - 40));
136
- const filled = Math.floor((usedPercentage / 100) * barWidth);
190
+ const filled = Math.min(barWidth, Math.floor((usedPercentage / 100) * barWidth));
137
191
  const empty = barWidth - filled;
138
192
  const progressBar = `[${"█".repeat(filled)}${"░".repeat(empty)}] ${usedPercentage.toFixed(1)}%`;
139
193
  modalContent.addChild(new ModalText("", 0, 1));
140
194
  modalContent.addChild(new ModalText(progressBar, 0, 1));
141
195
  modalContent.addChild(new ModalText("", 0, 1));
142
196
  modalContent.addChild(new ModalText("Token Usage & Costs", 0, 1));
143
- const formatCost = (cost) => {
144
- if (cost === 0)
145
- return "$0.00";
146
- if (cost < 0.01)
147
- return `$${cost.toFixed(6)}`;
148
- if (cost < 1)
149
- return `$${cost.toFixed(4)}`;
150
- return `$${cost.toFixed(2)}`;
151
- };
152
- const tokenTable = [
153
- [
154
- "Input Tokens",
155
- formatNumber(inputTokens),
156
- formatCost(inputCost),
157
- meta.costPerInputToken
158
- ? `$${meta.costPerInputToken.toFixed(6)}/token`
159
- : "N/A",
160
- ],
161
- [
162
- "Output Tokens",
163
- formatNumber(outputTokens),
164
- formatCost(outputCost),
165
- meta.costPerOutputToken
166
- ? `$${meta.costPerOutputToken.toFixed(6)}/token`
167
- : "N/A",
168
- ],
169
- ["Total Tokens", formatNumber(totalTokens), formatCost(totalCost), ""],
170
- ];
171
- modalContent.addChild(new TableComponent(tokenTable, {
197
+ modalContent.addChild(new TableComponent(buildTokenTable(meta, inputTokens, outputTokens), {
172
198
  headers: ["Type", "Tokens", "Cost", "Rate"],
173
199
  }));
174
200
  modalContent.addChild(new ModalText("", 0, 1));
175
201
  if (Object.keys(usageBreakdown).length > 0) {
176
202
  modalContent.addChild(new ModalText("Usage by Application", 0, 1));
177
- const usageEntries = Object.entries(usageBreakdown);
178
- const usageTable = usageEntries.map(([app, tokens]) => [
179
- app,
180
- formatNumber(tokens),
181
- ]);
203
+ const usageTable = Object.entries(usageBreakdown).map(([app, tokens]) => [app, formatNumber(tokens)]);
182
204
  modalContent.addChild(new TableComponent(usageTable, {
183
205
  headers: ["Application", "Tokens"],
184
206
  }));
@@ -1,6 +1,13 @@
1
1
  import type { ModelMessage } from "ai";
2
2
  export type Breakdown = {
3
3
  systemPrompt: number;
4
+ systemPromptBreakdown: {
5
+ core: number;
6
+ userAgentsMd: number;
7
+ cwdAgentsMd: number;
8
+ learnedRules: number;
9
+ skills: number;
10
+ };
4
11
  tools: number;
5
12
  messages: number;
6
13
  totalUsed: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../source/commands/session/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAEvC,MAAM,MAAM,SAAS,GAAG;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE;IAAE,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAAE,GACxC,MAAM,CAOR"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../source/commands/session/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAEvC,MAAM,MAAM,SAAS,GAAG;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE;IAAE,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAAE,GACxC,MAAM,CAOR"}
@@ -0,0 +1,25 @@
1
+ import type { ModelMessage } from "ai";
2
+ export interface SessionData {
3
+ sessionId: string;
4
+ title: string;
5
+ modelId: string;
6
+ project: string;
7
+ createdAt: Date;
8
+ updatedAt: Date;
9
+ messages: ModelMessage[];
10
+ }
11
+ export declare function escapeHtml(text: string): string;
12
+ export declare function renderSessionHtml(session: SessionData): string;
13
+ export declare function getSessionData(sessionManager: {
14
+ get: () => ModelMessage[];
15
+ getSessionId: () => string;
16
+ getTitle: () => string;
17
+ getModelId: () => string;
18
+ getCreatedAt: () => Date;
19
+ getUpdatedAt: () => Date;
20
+ }, project?: string): SessionData;
21
+ export declare function estimateSessionSize(session: SessionData): {
22
+ messageCount: number;
23
+ contentSizeBytes: number;
24
+ };
25
+ //# sourceMappingURL=html-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-renderer.d.ts","sourceRoot":"","sources":["../../../source/commands/share/html-renderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAA0C,MAAM,IAAI,CAAC;AAE/E,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO/C;AAiJD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAwO9D;AAED,wBAAgB,cAAc,CAC5B,cAAc,EAAE;IACd,GAAG,EAAE,MAAM,YAAY,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B,EACD,OAAO,CAAC,EAAE,MAAM,GACf,WAAW,CAUb;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAMA"}