@travisennis/acai 0.0.5 → 0.0.6

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 (311) hide show
  1. package/README.md +4 -2
  2. package/dist/agent/index.d.ts +119 -0
  3. package/dist/agent/index.d.ts.map +1 -0
  4. package/dist/agent/index.js +406 -0
  5. package/dist/agent/manual-loop.d.ts +41 -0
  6. package/dist/agent/manual-loop.d.ts.map +1 -0
  7. package/dist/agent/manual-loop.js +278 -0
  8. package/dist/cli.d.ts +2 -0
  9. package/dist/cli.d.ts.map +1 -1
  10. package/dist/cli.js +27 -33
  11. package/dist/commands/add-directory-command.d.ts +3 -0
  12. package/dist/commands/add-directory-command.d.ts.map +1 -0
  13. package/dist/commands/add-directory-command.js +85 -0
  14. package/dist/commands/application-log-command.d.ts.map +1 -1
  15. package/dist/commands/application-log-command.js +34 -0
  16. package/dist/commands/clear-command.d.ts.map +1 -1
  17. package/dist/commands/clear-command.js +8 -0
  18. package/dist/commands/compact-command.d.ts.map +1 -1
  19. package/dist/commands/compact-command.js +15 -2
  20. package/dist/commands/context-command.d.ts +3 -0
  21. package/dist/commands/context-command.d.ts.map +1 -0
  22. package/dist/commands/context-command.js +183 -0
  23. package/dist/commands/copy-command.d.ts.map +1 -1
  24. package/dist/commands/copy-command.js +28 -0
  25. package/dist/commands/edit-command.d.ts.map +1 -1
  26. package/dist/commands/edit-command.js +33 -0
  27. package/dist/commands/edit-prompt-command.d.ts.map +1 -1
  28. package/dist/commands/edit-prompt-command.js +28 -0
  29. package/dist/commands/exit-command.d.ts.map +1 -1
  30. package/dist/commands/exit-command.js +20 -0
  31. package/dist/commands/files-command.d.ts.map +1 -1
  32. package/dist/commands/files-command.js +57 -0
  33. package/dist/commands/generate-rules-command.d.ts.map +1 -1
  34. package/dist/commands/generate-rules-command.js +311 -1
  35. package/dist/commands/handoff-command.d.ts +3 -0
  36. package/dist/commands/handoff-command.d.ts.map +1 -0
  37. package/dist/commands/handoff-command.js +202 -0
  38. package/dist/commands/health-command.d.ts.map +1 -1
  39. package/dist/commands/health-command.js +119 -2
  40. package/dist/commands/help-command.d.ts.map +1 -1
  41. package/dist/commands/help-command.js +28 -0
  42. package/dist/commands/history-command.d.ts +3 -0
  43. package/dist/commands/history-command.d.ts.map +1 -0
  44. package/dist/commands/history-command.js +534 -0
  45. package/dist/commands/init-command.d.ts +1 -1
  46. package/dist/commands/init-command.d.ts.map +1 -1
  47. package/dist/commands/init-command.js +55 -18
  48. package/dist/commands/last-log-command.d.ts.map +1 -1
  49. package/dist/commands/last-log-command.js +27 -0
  50. package/dist/commands/list-directories-command.d.ts +3 -0
  51. package/dist/commands/list-directories-command.d.ts.map +1 -0
  52. package/dist/commands/list-directories-command.js +48 -0
  53. package/dist/commands/list-tools-command.d.ts.map +1 -1
  54. package/dist/commands/list-tools-command.js +66 -3
  55. package/dist/commands/manager.d.ts +15 -3
  56. package/dist/commands/manager.d.ts.map +1 -1
  57. package/dist/commands/manager.js +86 -26
  58. package/dist/commands/model-command.d.ts +22 -0
  59. package/dist/commands/model-command.d.ts.map +1 -1
  60. package/dist/commands/model-command.js +256 -0
  61. package/dist/commands/paste-command.d.ts.map +1 -1
  62. package/dist/commands/paste-command.js +92 -0
  63. package/dist/commands/pickup-command.d.ts +3 -0
  64. package/dist/commands/pickup-command.d.ts.map +1 -0
  65. package/dist/commands/pickup-command.js +161 -0
  66. package/dist/commands/prompt-command.d.ts +1 -1
  67. package/dist/commands/prompt-command.d.ts.map +1 -1
  68. package/dist/commands/prompt-command.js +117 -2
  69. package/dist/commands/remove-directory-command.d.ts +3 -0
  70. package/dist/commands/remove-directory-command.d.ts.map +1 -0
  71. package/dist/commands/remove-directory-command.js +87 -0
  72. package/dist/commands/reset-command.d.ts +1 -1
  73. package/dist/commands/reset-command.d.ts.map +1 -1
  74. package/dist/commands/reset-command.js +13 -2
  75. package/dist/commands/rules-command.d.ts.map +1 -1
  76. package/dist/commands/rules-command.js +65 -0
  77. package/dist/commands/save-command.d.ts.map +1 -1
  78. package/dist/commands/save-command.js +12 -0
  79. package/dist/commands/shell-command.d.ts.map +1 -1
  80. package/dist/commands/shell-command.js +68 -0
  81. package/dist/commands/types.d.ts +9 -4
  82. package/dist/commands/types.d.ts.map +1 -1
  83. package/dist/commands/usage-command.d.ts.map +1 -1
  84. package/dist/commands/usage-command.js +22 -0
  85. package/dist/config.d.ts +6 -7
  86. package/dist/config.d.ts.map +1 -1
  87. package/dist/config.js +23 -29
  88. package/dist/formatting.d.ts +108 -0
  89. package/dist/formatting.d.ts.map +1 -1
  90. package/dist/formatting.js +147 -0
  91. package/dist/index.d.ts +7 -2
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +140 -38
  94. package/dist/logger.d.ts.map +1 -1
  95. package/dist/logger.js +47 -18
  96. package/dist/mentions.d.ts +2 -1
  97. package/dist/mentions.d.ts.map +1 -1
  98. package/dist/mentions.js +16 -1
  99. package/dist/messages.d.ts +8 -0
  100. package/dist/messages.d.ts.map +1 -1
  101. package/dist/messages.js +56 -19
  102. package/dist/middleware/cache.d.ts +3 -0
  103. package/dist/middleware/cache.d.ts.map +1 -0
  104. package/dist/middleware/cache.js +53 -0
  105. package/dist/middleware/index.d.ts +1 -0
  106. package/dist/middleware/index.d.ts.map +1 -1
  107. package/dist/middleware/index.js +1 -0
  108. package/dist/models/ai-config.d.ts +4 -2
  109. package/dist/models/ai-config.d.ts.map +1 -1
  110. package/dist/models/ai-config.js +12 -2
  111. package/dist/models/anthropic-provider.d.ts.map +1 -1
  112. package/dist/models/anthropic-provider.js +3 -60
  113. package/dist/models/manager.d.ts +2 -1
  114. package/dist/models/manager.d.ts.map +1 -1
  115. package/dist/models/manager.js +26 -2
  116. package/dist/models/openrouter-provider.d.ts +7 -14
  117. package/dist/models/openrouter-provider.d.ts.map +1 -1
  118. package/dist/models/openrouter-provider.js +114 -169
  119. package/dist/models/providers.d.ts +1 -1
  120. package/dist/models/providers.d.ts.map +1 -1
  121. package/dist/prompts.d.ts +1 -0
  122. package/dist/prompts.d.ts.map +1 -1
  123. package/dist/prompts.js +53 -4
  124. package/dist/repl/display-tool-messages.d.ts +1 -1
  125. package/dist/repl/display-tool-messages.d.ts.map +1 -1
  126. package/dist/repl/display-tool-messages.js +47 -44
  127. package/dist/repl/get-prompt-header.d.ts.map +1 -1
  128. package/dist/repl/get-prompt-header.js +1 -30
  129. package/dist/repl/project-status-line.d.ts +2 -0
  130. package/dist/repl/project-status-line.d.ts.map +1 -0
  131. package/dist/repl/project-status-line.js +31 -0
  132. package/dist/repl/prompt.d.ts +21 -0
  133. package/dist/repl/prompt.d.ts.map +1 -0
  134. package/dist/{repl-prompt.js → repl/prompt.js} +119 -22
  135. package/dist/repl/tool-call-repair.d.ts.map +1 -1
  136. package/dist/repl/tool-call-repair.js +8 -4
  137. package/dist/repl-new.d.ts +53 -0
  138. package/dist/repl-new.d.ts.map +1 -0
  139. package/dist/repl-new.js +374 -0
  140. package/dist/repl.d.ts +3 -5
  141. package/dist/repl.d.ts.map +1 -1
  142. package/dist/repl.js +74 -166
  143. package/dist/terminal/checkbox-prompt.d.ts.map +1 -1
  144. package/dist/terminal/checkbox-prompt.js +10 -4
  145. package/dist/terminal/index.d.ts +7 -0
  146. package/dist/terminal/index.d.ts.map +1 -1
  147. package/dist/terminal/index.js +94 -0
  148. package/dist/terminal/input-prompt.d.ts +2 -1
  149. package/dist/terminal/input-prompt.d.ts.map +1 -1
  150. package/dist/terminal/markdown.js +3 -0
  151. package/dist/terminal/search-prompt.d.ts.map +1 -1
  152. package/dist/terminal/search-prompt.js +11 -10
  153. package/dist/terminal/select-prompt.d.ts +2 -2
  154. package/dist/terminal/select-prompt.d.ts.map +1 -1
  155. package/dist/terminal/select-prompt.js +47 -39
  156. package/dist/tokens/threshold.d.ts +35 -0
  157. package/dist/tokens/threshold.d.ts.map +1 -0
  158. package/dist/tokens/threshold.js +85 -0
  159. package/dist/tools/advanced-edit-file.d.ts +69 -0
  160. package/dist/tools/advanced-edit-file.d.ts.map +1 -0
  161. package/dist/tools/advanced-edit-file.js +281 -0
  162. package/dist/tools/agent.d.ts +16 -5
  163. package/dist/tools/agent.d.ts.map +1 -1
  164. package/dist/tools/agent.js +71 -58
  165. package/dist/tools/bash-utils.d.ts +1 -1
  166. package/dist/tools/bash-utils.d.ts.map +1 -1
  167. package/dist/tools/bash-utils.js +14 -6
  168. package/dist/tools/bash.d.ts +21 -12
  169. package/dist/tools/bash.d.ts.map +1 -1
  170. package/dist/tools/bash.js +88 -135
  171. package/dist/tools/code-interpreter.d.ts +21 -9
  172. package/dist/tools/code-interpreter.d.ts.map +1 -1
  173. package/dist/tools/code-interpreter.js +138 -137
  174. package/dist/tools/delete-file.d.ts +17 -10
  175. package/dist/tools/delete-file.d.ts.map +1 -1
  176. package/dist/tools/delete-file.js +51 -95
  177. package/dist/tools/directory-tree.d.ts +17 -6
  178. package/dist/tools/directory-tree.d.ts.map +1 -1
  179. package/dist/tools/directory-tree.js +47 -49
  180. package/dist/tools/dynamic-tool-loader.d.ts +18 -8
  181. package/dist/tools/dynamic-tool-loader.d.ts.map +1 -1
  182. package/dist/tools/dynamic-tool-loader.js +121 -129
  183. package/dist/tools/dynamic-tool-parser.d.ts +1 -0
  184. package/dist/tools/dynamic-tool-parser.d.ts.map +1 -1
  185. package/dist/tools/dynamic-tool-parser.js +1 -0
  186. package/dist/tools/edit-file.d.ts +35 -15
  187. package/dist/tools/edit-file.d.ts.map +1 -1
  188. package/dist/tools/edit-file.js +112 -112
  189. package/dist/tools/filesystem-utils.d.ts +2 -1
  190. package/dist/tools/filesystem-utils.d.ts.map +1 -1
  191. package/dist/tools/filesystem-utils.js +31 -17
  192. package/dist/tools/glob.d.ts +36 -0
  193. package/dist/tools/glob.d.ts.map +1 -0
  194. package/dist/tools/glob.js +143 -0
  195. package/dist/tools/grep.d.ts +73 -12
  196. package/dist/tools/grep.d.ts.map +1 -1
  197. package/dist/tools/grep.js +413 -168
  198. package/dist/tools/index.d.ts +204 -124
  199. package/dist/tools/index.d.ts.map +1 -1
  200. package/dist/tools/index.js +242 -135
  201. package/dist/tools/llm-edit-fixer.d.ts +25 -0
  202. package/dist/tools/llm-edit-fixer.d.ts.map +1 -0
  203. package/dist/tools/llm-edit-fixer.js +150 -0
  204. package/dist/tools/move-file.d.ts +19 -7
  205. package/dist/tools/move-file.d.ts.map +1 -1
  206. package/dist/tools/move-file.js +40 -33
  207. package/dist/tools/read-file.d.ts +47 -9
  208. package/dist/tools/read-file.d.ts.map +1 -1
  209. package/dist/tools/read-file.js +74 -69
  210. package/dist/tools/read-multiple-files.d.ts +17 -6
  211. package/dist/tools/read-multiple-files.d.ts.map +1 -1
  212. package/dist/tools/read-multiple-files.js +76 -73
  213. package/dist/tools/save-file.d.ts +45 -12
  214. package/dist/tools/save-file.d.ts.map +1 -1
  215. package/dist/tools/save-file.js +58 -101
  216. package/dist/tools/think.d.ts +15 -7
  217. package/dist/tools/think.d.ts.map +1 -1
  218. package/dist/tools/think.js +30 -22
  219. package/dist/tools/types.d.ts +4 -10
  220. package/dist/tools/types.d.ts.map +1 -1
  221. package/dist/tools/types.js +9 -0
  222. package/dist/tools/utils.d.ts +14 -0
  223. package/dist/tools/utils.d.ts.map +1 -0
  224. package/dist/tools/utils.js +16 -0
  225. package/dist/tools/web-fetch.d.ts +11 -4
  226. package/dist/tools/web-fetch.d.ts.map +1 -1
  227. package/dist/tools/web-fetch.js +39 -38
  228. package/dist/tools/web-search.d.ts +15 -6
  229. package/dist/tools/web-search.d.ts.map +1 -1
  230. package/dist/tools/web-search.js +50 -32
  231. package/dist/tui/autocomplete.d.ts +44 -0
  232. package/dist/tui/autocomplete.d.ts.map +1 -0
  233. package/dist/tui/autocomplete.js +466 -0
  234. package/dist/tui/components/assistant-message.d.ts +18 -0
  235. package/dist/tui/components/assistant-message.d.ts.map +1 -0
  236. package/dist/tui/components/assistant-message.js +29 -0
  237. package/dist/tui/components/editor.d.ts +51 -0
  238. package/dist/tui/components/editor.d.ts.map +1 -0
  239. package/dist/tui/components/editor.js +758 -0
  240. package/dist/tui/components/footer.d.ts +24 -0
  241. package/dist/tui/components/footer.d.ts.map +1 -0
  242. package/dist/tui/components/footer.js +197 -0
  243. package/dist/tui/components/input.d.ts +14 -0
  244. package/dist/tui/components/input.d.ts.map +1 -0
  245. package/dist/tui/components/input.js +122 -0
  246. package/dist/tui/components/loader.d.ts +19 -0
  247. package/dist/tui/components/loader.d.ts.map +1 -0
  248. package/dist/tui/components/loader.js +45 -0
  249. package/dist/tui/components/markdown.d.ts +103 -0
  250. package/dist/tui/components/markdown.d.ts.map +1 -0
  251. package/dist/tui/components/markdown.js +533 -0
  252. package/dist/tui/components/modal.d.ts +40 -0
  253. package/dist/tui/components/modal.d.ts.map +1 -0
  254. package/dist/tui/components/modal.js +292 -0
  255. package/dist/tui/components/prompt-status.d.ts +16 -0
  256. package/dist/tui/components/prompt-status.d.ts.map +1 -0
  257. package/dist/tui/components/prompt-status.js +21 -0
  258. package/dist/tui/components/select-list.d.ts +22 -0
  259. package/dist/tui/components/select-list.d.ts.map +1 -0
  260. package/dist/tui/components/select-list.js +143 -0
  261. package/dist/tui/components/spacer.d.ts +16 -0
  262. package/dist/tui/components/spacer.d.ts.map +1 -0
  263. package/dist/tui/components/spacer.js +27 -0
  264. package/dist/tui/components/text.d.ts +26 -0
  265. package/dist/tui/components/text.d.ts.map +1 -0
  266. package/dist/tui/components/text.js +143 -0
  267. package/dist/tui/components/thinking-block.d.ts +14 -0
  268. package/dist/tui/components/thinking-block.d.ts.map +1 -0
  269. package/dist/tui/components/thinking-block.js +30 -0
  270. package/dist/tui/components/tool-execution.d.ts +17 -0
  271. package/dist/tui/components/tool-execution.d.ts.map +1 -0
  272. package/dist/tui/components/tool-execution.js +153 -0
  273. package/dist/tui/components/user-message.d.ts +9 -0
  274. package/dist/tui/components/user-message.d.ts.map +1 -0
  275. package/dist/tui/components/user-message.js +21 -0
  276. package/dist/tui/components/welcome.d.ts +6 -0
  277. package/dist/tui/components/welcome.d.ts.map +1 -0
  278. package/dist/tui/components/welcome.js +30 -0
  279. package/dist/tui/index.d.ts +14 -0
  280. package/dist/tui/index.d.ts.map +1 -0
  281. package/dist/tui/index.js +18 -0
  282. package/dist/tui/terminal.d.ts +37 -0
  283. package/dist/tui/terminal.d.ts.map +1 -0
  284. package/dist/tui/terminal.js +104 -0
  285. package/dist/tui/tui.d.ts +67 -0
  286. package/dist/tui/tui.d.ts.map +1 -0
  287. package/dist/tui/tui.js +184 -0
  288. package/dist/tui/utils.d.ts +19 -0
  289. package/dist/tui/utils.d.ts.map +1 -0
  290. package/dist/tui/utils.js +31 -0
  291. package/dist/utils/generators.d.ts +3 -0
  292. package/dist/utils/generators.d.ts.map +1 -0
  293. package/dist/utils/generators.js +25 -0
  294. package/dist/utils/iterables.d.ts +2 -0
  295. package/dist/utils/iterables.d.ts.map +1 -0
  296. package/dist/utils/iterables.js +6 -0
  297. package/package.json +16 -16
  298. package/dist/conversation-analyzer.d.ts +0 -11
  299. package/dist/conversation-analyzer.d.ts.map +0 -1
  300. package/dist/conversation-analyzer.js +0 -88
  301. package/dist/repl-prompt.d.ts +0 -15
  302. package/dist/repl-prompt.d.ts.map +0 -1
  303. package/dist/tokens/manage-output.d.ts +0 -34
  304. package/dist/tokens/manage-output.d.ts.map +0 -1
  305. package/dist/tokens/manage-output.js +0 -44
  306. package/dist/tool-executor.d.ts +0 -28
  307. package/dist/tool-executor.d.ts.map +0 -1
  308. package/dist/tool-executor.js +0 -74
  309. package/dist/tools/file-editing-utils.d.ts +0 -2
  310. package/dist/tools/file-editing-utils.d.ts.map +0 -1
  311. package/dist/tools/file-editing-utils.js +0 -135
@@ -1 +1 @@
1
- {"version":3,"file":"get-prompt-header.d.ts","sourceRoot":"","sources":["../../source/repl/get-prompt-header.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAuCrD,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,GAAG,OAAO,CAAC,IAAI,CAAC,CAMhB"}
1
+ {"version":3,"file":"get-prompt-header.d.ts","sourceRoot":"","sources":["../../source/repl/get-prompt-header.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIrD,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,GAAG,OAAO,CAAC,IAAI,CAAC,CAMhB"}
@@ -1,34 +1,5 @@
1
1
  import style from "../terminal/style.js";
2
- import { getCurrentBranch, getDiffStat, getGitStatus, hasUncommittedChanges, inGitDirectory, } from "../tools/git-utils.js";
3
- async function getProjectStatusLine() {
4
- const currentDir = process.cwd().split("/").pop() || process.cwd();
5
- const branch = await getCurrentBranch();
6
- let gitStatus = "";
7
- if (branch) {
8
- const hasChanges = await hasUncommittedChanges();
9
- const asterisk = hasChanges ? "*" : "";
10
- gitStatus = ` ${style.gray(branch + asterisk)}`;
11
- }
12
- if (await inGitDirectory()) {
13
- const stats = await getDiffStat();
14
- const fileChanges = await getGitStatus();
15
- let fileStatus = "";
16
- if (fileChanges.added)
17
- fileStatus += ` +${fileChanges.added}`;
18
- if (fileChanges.modified)
19
- fileStatus += ` ~${fileChanges.modified}`;
20
- if (fileChanges.deleted)
21
- fileStatus += ` -${fileChanges.deleted}`;
22
- if (fileChanges.untracked)
23
- fileStatus += ` ?${fileChanges.untracked}`;
24
- gitStatus +=
25
- " " +
26
- `${style.dim("[")}${style.yellow(fileStatus.trim())} ` +
27
- `${style.green(`+${stats.insertions}`)} ` +
28
- `${style.red(`-${stats.deletions}`)}${style.dim("]")}`;
29
- }
30
- return `${style.blue(currentDir)}${gitStatus}`;
31
- }
2
+ import { getProjectStatusLine } from "./project-status-line.js";
32
3
  export async function getPromptHeader(args) {
33
4
  const { terminal, modelId, contextWindow, currentContextWindow } = args;
34
5
  terminal.hr();
@@ -0,0 +1,2 @@
1
+ export declare function getProjectStatusLine(): Promise<string>;
2
+ //# sourceMappingURL=project-status-line.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-status-line.d.ts","sourceRoot":"","sources":["../../source/repl/project-status-line.ts"],"names":[],"mappings":"AASA,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CA2B5D"}
@@ -0,0 +1,31 @@
1
+ import style from "../terminal/style.js";
2
+ import { getCurrentBranch, getDiffStat, getGitStatus, hasUncommittedChanges, inGitDirectory, } from "../tools/git-utils.js";
3
+ export async function getProjectStatusLine() {
4
+ const currentDir = process.cwd().split("/").pop() || process.cwd();
5
+ const branch = await getCurrentBranch();
6
+ let gitStatus = "";
7
+ if (branch) {
8
+ const hasChanges = await hasUncommittedChanges();
9
+ const asterisk = hasChanges ? "*" : "";
10
+ gitStatus = ` ${style.gray(branch + asterisk)}`;
11
+ }
12
+ if (await inGitDirectory()) {
13
+ const stats = await getDiffStat();
14
+ const fileChanges = await getGitStatus();
15
+ let fileStatus = "";
16
+ if (fileChanges.added)
17
+ fileStatus += ` +${fileChanges.added}`;
18
+ if (fileChanges.modified)
19
+ fileStatus += ` ~${fileChanges.modified}`;
20
+ if (fileChanges.deleted)
21
+ fileStatus += ` -${fileChanges.deleted}`;
22
+ if (fileChanges.untracked)
23
+ fileStatus += ` ?${fileChanges.untracked}`;
24
+ gitStatus +=
25
+ " " +
26
+ `${style.dim("[")}${style.yellow(fileStatus.trim())} ` +
27
+ `${style.green(`+${stats.insertions}`)} ` +
28
+ `${style.red(`-${stats.deletions}`)}${style.dim("]")}`;
29
+ }
30
+ return `${style.blue(currentDir)}${gitStatus}`;
31
+ }
@@ -0,0 +1,21 @@
1
+ import type { CommandManager } from "../commands/manager.ts";
2
+ import type { WorkspaceContext } from "../index.ts";
3
+ export declare class ReplPrompt {
4
+ private keypressListener?;
5
+ private rl;
6
+ private history;
7
+ private maxHistory;
8
+ private pasteCounter;
9
+ private pasteStore;
10
+ constructor({ commands, history, workspace, }: {
11
+ commands: CommandManager;
12
+ history: string[];
13
+ workspace: WorkspaceContext;
14
+ });
15
+ input(): Promise<string>;
16
+ getPasteStore(): Map<number, string>;
17
+ resetPasteStore(): void;
18
+ close(): void;
19
+ [Symbol.dispose](): void;
20
+ }
21
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../source/repl/prompt.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAmKpD,qBAAa,UAAU;IAErB,OAAO,CAAC,gBAAgB,CAAC,CAAkC;IAC3D,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAA6B;gBAEnC,EACV,QAAQ,EACR,OAAO,EACP,SAAS,GACV,EAAE;QACD,QAAQ,EAAE,cAAc,CAAC;QACzB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,SAAS,EAAE,gBAAgB,CAAC;KAC7B;IAwGK,KAAK;IAoBX,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAIpC,eAAe,IAAI,IAAI;IAKvB,KAAK;IAQL,CAAC,MAAM,CAAC,OAAO,CAAC;CAGjB"}
@@ -1,36 +1,82 @@
1
1
  import { readdir } from "node:fs/promises";
2
- import { parse, sep } from "node:path";
2
+ import { parse, relative, resolve, sep } from "node:path";
3
3
  import { createInterface } from "node:readline/promises";
4
4
  import Clipboard from "@crosscopy/clipboard";
5
5
  import { asyncTry } from "@travisennis/stdlib/try";
6
- import { logger } from "./logger.js";
6
+ import { logger } from "../logger.js";
7
7
  const whitespaceRegex = /\s+/;
8
- async function fileSystemCompleter(line) {
8
+ // Cache for directory listings to improve performance
9
+ class DirectoryCache {
10
+ cache = new Map();
11
+ ttl = 3000; // 3 seconds
12
+ async get(dir) {
13
+ const cached = this.cache.get(dir);
14
+ if (cached && Date.now() - cached.timestamp < this.ttl) {
15
+ return cached.entries;
16
+ }
17
+ return null;
18
+ }
19
+ set(dir, entries) {
20
+ this.cache.set(dir, { entries, timestamp: Date.now() });
21
+ }
22
+ clear() {
23
+ this.cache.clear();
24
+ }
25
+ }
26
+ const directoryCache = new DirectoryCache();
27
+ // Helper function to get directory entries with caching
28
+ async function getDirectoryEntries(dir) {
29
+ const cached = await directoryCache.get(dir);
30
+ if (cached) {
31
+ return cached;
32
+ }
33
+ const tryAttempt = await asyncTry(readdir(dir, { withFileTypes: true }));
34
+ if (tryAttempt.isFailure) {
35
+ return [];
36
+ }
37
+ const entries = tryAttempt.unwrap();
38
+ directoryCache.set(dir, entries);
39
+ return entries;
40
+ }
41
+ // Helper function to get completions from a specific directory
42
+ async function getCompletionsFromDir(line, dir, workspace) {
9
43
  try {
10
44
  const words = line.split(" ");
11
45
  let last = words.at(-1);
12
46
  if (!last) {
13
- return [[], line];
47
+ return [];
14
48
  }
15
49
  const isAt = last.startsWith("@");
16
50
  if (isAt) {
17
51
  last = last.slice(1);
18
52
  }
19
- let { dir, base } = parse(last);
20
- // If dir is empty, use current directory
21
- if (!dir) {
22
- dir = ".";
53
+ let { dir: pathDir, base } = parse(last);
54
+ // If pathDir is empty, use current directory
55
+ if (!pathDir) {
56
+ pathDir = ".";
57
+ }
58
+ // Resolve the path relative to the current directory
59
+ const resolvedPath = resolve(dir, pathDir);
60
+ // Check if resolved path is within any allowed directory
61
+ const isWithinAllowed = workspace.allowedDirs.some((allowedDir) => resolvedPath.startsWith(allowedDir));
62
+ if (!isWithinAllowed) {
63
+ return [];
23
64
  }
24
- let tryAttempt = await asyncTry(readdir(dir, { withFileTypes: true }));
25
- if (tryAttempt.isFailure) {
26
- tryAttempt = await asyncTry(readdir(".", { withFileTypes: true }));
65
+ let dirEntries = await getDirectoryEntries(resolvedPath);
66
+ // If we couldn't read the directory, try current directory
67
+ if (dirEntries.length === 0 && pathDir !== ".") {
68
+ dirEntries = await getDirectoryEntries(dir);
69
+ pathDir = ".";
27
70
  }
28
- let dirEntries = tryAttempt.unwrap();
29
- // for an exact match that is a directory, read the contents of the directory
71
+ // For an exact match that is a directory, read the contents of the directory
30
72
  if (dirEntries.find((entry) => entry.name === base && entry.isDirectory())) {
31
- dir = dir === "/" || dir === sep ? `${dir}${base}` : `${dir}/${base}`;
32
- dirEntries = await readdir(dir, { withFileTypes: true });
73
+ const newPath = pathDir === "/" || pathDir === sep
74
+ ? `${pathDir}${base}`
75
+ : `${pathDir}/${base}`;
76
+ const newResolvedPath = resolve(dir, newPath);
77
+ dirEntries = await getDirectoryEntries(newResolvedPath);
33
78
  base = "";
79
+ pathDir = newPath;
34
80
  }
35
81
  else {
36
82
  dirEntries = dirEntries.filter((entry) => entry.name.startsWith(base));
@@ -38,10 +84,41 @@ async function fileSystemCompleter(line) {
38
84
  const hits = dirEntries
39
85
  .filter((entry) => entry.isFile() || entry.isDirectory())
40
86
  .map((entry) => {
41
- const prefix = dir === "." ? "" : dir === sep || dir === "/" ? "" : `${dir}/`;
42
- return `${isAt ? "@" : ""}${prefix}${entry.name}${entry.isDirectory() && !entry.name.endsWith("/") ? "/" : ""}`;
87
+ const prefix = pathDir === "."
88
+ ? ""
89
+ : pathDir === sep || pathDir === "/"
90
+ ? ""
91
+ : `${pathDir}/`;
92
+ const fullPath = `${prefix}${entry.name}${entry.isDirectory() && !entry.name.endsWith("/") ? "/" : ""}`;
93
+ // Convert to relative path from primary directory for display
94
+ const absolutePath = resolve(dir, fullPath);
95
+ const relativePath = relative(workspace.primaryDir, absolutePath);
96
+ return `${isAt ? "@" : ""}${relativePath.startsWith("..") ? relativePath : `./${relativePath}`}`;
43
97
  });
44
- return [hits, `${isAt ? "@" : ""}${last}`];
98
+ return hits;
99
+ }
100
+ catch (_error) {
101
+ return [];
102
+ }
103
+ }
104
+ async function fileSystemCompleter(line, workspace) {
105
+ try {
106
+ const words = line.split(" ");
107
+ let last = words.at(-1);
108
+ if (!last) {
109
+ return [[], line];
110
+ }
111
+ const isAt = last.startsWith("@");
112
+ if (isAt) {
113
+ last = last.slice(1);
114
+ }
115
+ // Search all directories in parallel
116
+ const completionPromises = workspace.allowedDirs.map((dir) => getCompletionsFromDir(line, dir, workspace));
117
+ const allResults = await Promise.all(completionPromises);
118
+ const flattenedResults = allResults.flat();
119
+ // Remove duplicates while preserving order
120
+ const uniqueResults = [...new Set(flattenedResults)];
121
+ return [uniqueResults, `${isAt ? "@" : ""}${last}`];
45
122
  }
46
123
  catch (_error) {
47
124
  logger.error(_error);
@@ -54,7 +131,9 @@ export class ReplPrompt {
54
131
  rl;
55
132
  history;
56
133
  maxHistory = 25;
57
- constructor({ commands, history, }) {
134
+ pasteCounter = 0;
135
+ pasteStore = new Map();
136
+ constructor({ commands, history, workspace, }) {
58
137
  this.history = history;
59
138
  this.rl = createInterface({
60
139
  input: process.stdin,
@@ -79,7 +158,7 @@ export class ReplPrompt {
79
158
  (words.length === 1 || line.endsWith(" "))) {
80
159
  return [matchingCommands, line];
81
160
  }
82
- return fileSystemCompleter(line); // [completions, line];
161
+ return fileSystemCompleter(line, workspace); // [completions, line];
83
162
  },
84
163
  });
85
164
  if (process.stdin.isTTY) {
@@ -99,11 +178,22 @@ export class ReplPrompt {
99
178
  const cursorPos = this.rl.cursor;
100
179
  const beforeCursor = currentLine.substring(0, cursorPos);
101
180
  const afterCursor = currentLine.substring(cursorPos);
102
- const newLine = beforeCursor + clipboardText + afterCursor;
181
+ let textToInsert;
182
+ // Smart paste: use placeholder for text > 50 characters
183
+ if (clipboardText.length > 50) {
184
+ this.pasteCounter++;
185
+ const pasteId = this.pasteCounter;
186
+ this.pasteStore.set(pasteId, clipboardText);
187
+ textToInsert = `[Paste #${pasteId}, ${clipboardText.length} characters]`;
188
+ }
189
+ else {
190
+ textToInsert = clipboardText;
191
+ }
192
+ const newLine = beforeCursor + textToInsert + afterCursor;
103
193
  // biome-ignore lint/suspicious/noExplicitAny: Accessing internal readline method
104
194
  this.rl.line = newLine;
105
195
  // biome-ignore lint/suspicious/noExplicitAny: Accessing internal readline method
106
- this.rl.cursor = cursorPos + clipboardText.length;
196
+ this.rl.cursor = cursorPos + textToInsert.length;
107
197
  // biome-ignore lint/suspicious/noExplicitAny: Accessing internal readline method
108
198
  this.rl._refreshLine();
109
199
  }
@@ -134,6 +224,13 @@ export class ReplPrompt {
134
224
  }
135
225
  return input;
136
226
  }
227
+ getPasteStore() {
228
+ return new Map(this.pasteStore);
229
+ }
230
+ resetPasteStore() {
231
+ this.pasteCounter = 0;
232
+ this.pasteStore.clear();
233
+ }
137
234
  close() {
138
235
  if (this.keypressListener) {
139
236
  process.stdin.off("keypress", this.keypressListener);
@@ -1 +1 @@
1
- {"version":3,"file":"tool-call-repair.d.ts","sourceRoot":"","sources":["../../source/repl/tool-call-repair.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,sBAAsB,EAC3B,KAAK,OAAO,EACb,MAAM,IAAI,CAAC;AAIZ,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAoCzD,eAAO,MAAM,cAAc,GAAI,cAAc,YAAY,oCA0CxD,CAAC"}
1
+ {"version":3,"file":"tool-call-repair.d.ts","sourceRoot":"","sources":["../../source/repl/tool-call-repair.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,sBAAsB,EAC3B,KAAK,OAAO,EACb,MAAM,IAAI,CAAC;AAIZ,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAoCzD,eAAO,MAAM,cAAc,GAAI,cAAc,YAAY,oCAmDxD,CAAC"}
@@ -18,8 +18,8 @@ async function remoteToolCallRepair(modelManager, toolCall, tool, inputSchema) {
18
18
  const localToolCallRepair = async (toolCall, tool) => {
19
19
  const schema = tool.inputSchema;
20
20
  const repairedArgs = jsonrepair(toolCall.input);
21
- schema.parse(repairedArgs);
22
- return { ...toolCall, input: JSON.stringify(repairedArgs) };
21
+ const validatedArgs = schema.parse(JSON.parse(repairedArgs));
22
+ return { ...toolCall, input: JSON.stringify(validatedArgs) };
23
23
  };
24
24
  export const toolCallRepair = (modelManager) => {
25
25
  const fn = async ({ toolCall, tools, inputSchema, error, }) => {
@@ -33,12 +33,16 @@ export const toolCallRepair = (modelManager) => {
33
33
  return null;
34
34
  }
35
35
  try {
36
- return localToolCallRepair(toolCall, tool);
36
+ const repaired = await localToolCallRepair(toolCall, tool);
37
+ logger.debug(`Tool call repaired with jsonrepair ${repaired.input}`);
38
+ return repaired;
37
39
  }
38
40
  catch (err) {
39
41
  logger.error(err, `Failed to repair tool call locally: ${toolCall.toolName}.`);
40
42
  try {
41
- return remoteToolCallRepair(modelManager, toolCall, tool, inputSchema);
43
+ const repaired = await remoteToolCallRepair(modelManager, toolCall, tool, inputSchema);
44
+ logger.debug(`Tool call repaired with remote repair ${repaired.input}`);
45
+ return repaired;
42
46
  }
43
47
  catch (err2) {
44
48
  logger.error(err2, `Failed to repair tool call remotely: ${toolCall.toolName}.`);
@@ -0,0 +1,53 @@
1
+ import type { Agent, AgentEvent, AgentState } from "./agent/index.ts";
2
+ import type { CommandManager } from "./commands/manager.ts";
3
+ import type { WorkspaceContext } from "./index.ts";
4
+ import type { MessageHistory } from "./messages.ts";
5
+ import type { ModelManager } from "./models/manager.ts";
6
+ import type { PromptManager } from "./prompts/manager.ts";
7
+ import type { Terminal } from "./terminal/index.ts";
8
+ import type { TokenCounter } from "./tokens/counter.ts";
9
+ import type { TokenTracker } from "./tokens/tracker.ts";
10
+ interface ReplOptions {
11
+ agent: Agent;
12
+ messageHistory: MessageHistory;
13
+ promptManager: PromptManager;
14
+ modelManager: ModelManager;
15
+ tokenTracker: TokenTracker;
16
+ terminal: Terminal;
17
+ commands: CommandManager;
18
+ config: Record<PropertyKey, unknown>;
19
+ tokenCounter: TokenCounter;
20
+ promptHistory: string[];
21
+ workspace: WorkspaceContext;
22
+ }
23
+ export declare class NewRepl {
24
+ private options;
25
+ private tui;
26
+ private welcome;
27
+ private editor;
28
+ private chatContainer;
29
+ private statusContainer;
30
+ private promptStatus;
31
+ private footer;
32
+ private editorContainer;
33
+ private isInitialized;
34
+ private onInputCallback?;
35
+ private loadingAnimation;
36
+ private onInterruptCallback?;
37
+ private lastSigintTime;
38
+ private pendingTools;
39
+ private streamingComponent;
40
+ private thinkingBlockComponent;
41
+ constructor(options: ReplOptions);
42
+ init(): Promise<void>;
43
+ handle(event: AgentEvent, state: AgentState): Promise<void>;
44
+ private addMessageToChat;
45
+ getUserInput(): Promise<string>;
46
+ clearEditor(): void;
47
+ setInterruptCallback(callback: () => void): void;
48
+ rerender(): Promise<void>;
49
+ private handleCtrlC;
50
+ stop(): void;
51
+ }
52
+ export {};
53
+ //# sourceMappingURL=repl-new.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl-new.d.ts","sourceRoot":"","sources":["../source/repl-new.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAkBxD,UAAU,WAAW;IACnB,KAAK,EAAE,KAAK,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACrC,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,gBAAgB,CAAC;CAC7B;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,eAAe,CAAY;IACnC,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,eAAe,CAAY;IACnC,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,eAAe,CAAC,CAAyB;IACjD,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,mBAAmB,CAAC,CAAa;IACzC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,YAAY,CAAsC;IAG1D,OAAO,CAAC,kBAAkB,CAA0C;IAGpE,OAAO,CAAC,sBAAsB,CAAuC;gBAEzD,OAAO,EAAE,WAAW;IAqB1B,IAAI;IA6HJ,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU;IA+LjD,OAAO,CAAC,gBAAgB;IAWlB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IASrC,WAAW,IAAI,IAAI;IAKnB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAI1C,QAAQ;IAYd,OAAO,CAAC,WAAW;IAiBnB,IAAI,IAAI,IAAI;CAUb"}