@travisennis/acai 0.0.4 → 0.0.5

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 (316) hide show
  1. package/README.md +225 -6
  2. package/dist/api/exa/index.d.ts +177 -0
  3. package/dist/api/exa/index.d.ts.map +1 -0
  4. package/dist/api/exa/index.js +439 -0
  5. package/dist/cli.d.ts +3 -2
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/commands/application-log-command.d.ts +1 -0
  8. package/dist/commands/application-log-command.d.ts.map +1 -0
  9. package/dist/commands/application-log-command.js +5 -3
  10. package/dist/commands/clear-command.d.ts +1 -0
  11. package/dist/commands/clear-command.d.ts.map +1 -0
  12. package/dist/commands/clear-command.js +2 -3
  13. package/dist/commands/compact-command.d.ts +1 -0
  14. package/dist/commands/compact-command.d.ts.map +1 -0
  15. package/dist/commands/compact-command.js +1 -1
  16. package/dist/commands/copy-command.d.ts +1 -0
  17. package/dist/commands/copy-command.d.ts.map +1 -0
  18. package/dist/commands/copy-command.js +3 -2
  19. package/dist/commands/edit-command.d.ts +1 -0
  20. package/dist/commands/edit-command.d.ts.map +1 -0
  21. package/dist/commands/edit-command.js +7 -5
  22. package/dist/commands/edit-prompt-command.d.ts +2 -1
  23. package/dist/commands/edit-prompt-command.d.ts.map +1 -0
  24. package/dist/commands/edit-prompt-command.js +15 -7
  25. package/dist/commands/exit-command.d.ts +13 -2
  26. package/dist/commands/exit-command.d.ts.map +1 -0
  27. package/dist/commands/exit-command.js +14 -2
  28. package/dist/commands/files-command.d.ts +1 -0
  29. package/dist/commands/files-command.d.ts.map +1 -0
  30. package/dist/commands/files-command.js +9 -8
  31. package/dist/commands/generate-rules-command.d.ts +1 -0
  32. package/dist/commands/generate-rules-command.d.ts.map +1 -0
  33. package/dist/commands/generate-rules-command.js +4 -3
  34. package/dist/commands/health-command.d.ts +3 -1
  35. package/dist/commands/health-command.d.ts.map +1 -0
  36. package/dist/commands/health-command.js +42 -5
  37. package/dist/commands/help-command.d.ts +1 -0
  38. package/dist/commands/help-command.d.ts.map +1 -0
  39. package/dist/commands/help-command.js +2 -3
  40. package/dist/commands/init-command.d.ts +1 -0
  41. package/dist/commands/init-command.d.ts.map +1 -0
  42. package/dist/commands/init-command.js +1 -2
  43. package/dist/commands/last-log-command.d.ts +1 -0
  44. package/dist/commands/last-log-command.d.ts.map +1 -0
  45. package/dist/commands/last-log-command.js +12 -17
  46. package/dist/commands/list-tools-command.d.ts +3 -0
  47. package/dist/commands/list-tools-command.d.ts.map +1 -0
  48. package/dist/commands/list-tools-command.js +61 -0
  49. package/dist/commands/manager.d.ts +7 -2
  50. package/dist/commands/manager.d.ts.map +1 -0
  51. package/dist/commands/manager.js +43 -6
  52. package/dist/commands/model-command.d.ts +1 -0
  53. package/dist/commands/model-command.d.ts.map +1 -0
  54. package/dist/commands/model-command.js +5 -5
  55. package/dist/commands/paste-command.d.ts +1 -0
  56. package/dist/commands/paste-command.d.ts.map +1 -0
  57. package/dist/commands/paste-command.js +6 -5
  58. package/dist/commands/prompt-command.d.ts +2 -1
  59. package/dist/commands/prompt-command.d.ts.map +1 -0
  60. package/dist/commands/prompt-command.js +62 -8
  61. package/dist/commands/reset-command.d.ts +1 -0
  62. package/dist/commands/reset-command.d.ts.map +1 -0
  63. package/dist/commands/reset-command.js +1 -1
  64. package/dist/commands/rules-command.d.ts +1 -0
  65. package/dist/commands/rules-command.d.ts.map +1 -0
  66. package/dist/commands/rules-command.js +5 -3
  67. package/dist/commands/save-command.d.ts +1 -0
  68. package/dist/commands/save-command.d.ts.map +1 -0
  69. package/dist/commands/save-command.js +1 -1
  70. package/dist/commands/shell-command.d.ts +3 -0
  71. package/dist/commands/shell-command.d.ts.map +1 -0
  72. package/dist/commands/shell-command.js +60 -0
  73. package/dist/commands/types.d.ts +9 -6
  74. package/dist/commands/types.d.ts.map +1 -0
  75. package/dist/commands/usage-command.d.ts +1 -0
  76. package/dist/commands/usage-command.d.ts.map +1 -0
  77. package/dist/commands/usage-command.js +2 -3
  78. package/dist/config.d.ts +22 -34
  79. package/dist/config.d.ts.map +1 -0
  80. package/dist/config.js +61 -15
  81. package/dist/conversation-analyzer.d.ts +2 -1
  82. package/dist/conversation-analyzer.d.ts.map +1 -0
  83. package/dist/dedent.d.ts +1 -0
  84. package/dist/dedent.d.ts.map +1 -0
  85. package/dist/execution/index.d.ts +112 -0
  86. package/dist/execution/index.d.ts.map +1 -0
  87. package/dist/execution/index.js +432 -0
  88. package/dist/formatting.d.ts +2 -13
  89. package/dist/formatting.d.ts.map +1 -0
  90. package/dist/formatting.js +5 -64
  91. package/dist/index.d.ts +1 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +14 -4
  94. package/dist/logger.d.ts +1 -0
  95. package/dist/logger.d.ts.map +1 -0
  96. package/dist/mentions.d.ts +4 -0
  97. package/dist/mentions.d.ts.map +1 -0
  98. package/dist/mentions.js +42 -10
  99. package/dist/messages.d.ts +8 -20
  100. package/dist/messages.d.ts.map +1 -0
  101. package/dist/messages.js +33 -53
  102. package/dist/middleware/audit-message.d.ts +1 -0
  103. package/dist/middleware/audit-message.d.ts.map +1 -0
  104. package/dist/middleware/index.d.ts +1 -0
  105. package/dist/middleware/index.d.ts.map +1 -0
  106. package/dist/middleware/rate-limit.d.ts +1 -0
  107. package/dist/middleware/rate-limit.d.ts.map +1 -0
  108. package/dist/models/ai-config.d.ts +1 -0
  109. package/dist/models/ai-config.d.ts.map +1 -0
  110. package/dist/models/anthropic-provider.d.ts +1 -0
  111. package/dist/models/anthropic-provider.d.ts.map +1 -0
  112. package/dist/models/deepseek-provider.d.ts +1 -0
  113. package/dist/models/deepseek-provider.d.ts.map +1 -0
  114. package/dist/models/google-provider.d.ts +1 -0
  115. package/dist/models/google-provider.d.ts.map +1 -0
  116. package/dist/models/groq-provider.d.ts +20 -0
  117. package/dist/models/groq-provider.d.ts.map +1 -0
  118. package/dist/models/groq-provider.js +31 -0
  119. package/dist/models/manager.d.ts +1 -0
  120. package/dist/models/manager.d.ts.map +1 -0
  121. package/dist/models/openai-provider.d.ts +2 -1
  122. package/dist/models/openai-provider.d.ts.map +1 -0
  123. package/dist/models/openrouter-provider.d.ts +31 -22
  124. package/dist/models/openrouter-provider.d.ts.map +1 -0
  125. package/dist/models/openrouter-provider.js +115 -1
  126. package/dist/models/providers.d.ts +4 -5
  127. package/dist/models/providers.d.ts.map +1 -0
  128. package/dist/models/providers.js +7 -3
  129. package/dist/models/xai-provider.d.ts +1 -0
  130. package/dist/models/xai-provider.d.ts.map +1 -0
  131. package/dist/parsing.d.ts +2 -1
  132. package/dist/parsing.d.ts.map +1 -0
  133. package/dist/prompts/manager.d.ts +14 -2
  134. package/dist/prompts/manager.d.ts.map +1 -0
  135. package/dist/prompts.d.ts +1 -0
  136. package/dist/prompts.d.ts.map +1 -0
  137. package/dist/prompts.js +15 -11
  138. package/dist/repl/display-tool-messages.d.ts +4 -0
  139. package/dist/repl/display-tool-messages.d.ts.map +1 -0
  140. package/dist/repl/display-tool-messages.js +55 -0
  141. package/dist/repl/display-tool-use.d.ts +14 -0
  142. package/dist/repl/display-tool-use.d.ts.map +1 -0
  143. package/dist/repl/display-tool-use.js +63 -0
  144. package/dist/repl/get-prompt-header.d.ts +8 -0
  145. package/dist/repl/get-prompt-header.d.ts.map +1 -0
  146. package/dist/repl/get-prompt-header.js +38 -0
  147. package/dist/repl/tool-call-repair.d.ts +4 -0
  148. package/dist/repl/tool-call-repair.d.ts.map +1 -0
  149. package/dist/repl/tool-call-repair.js +50 -0
  150. package/dist/repl-prompt.d.ts +1 -0
  151. package/dist/repl-prompt.d.ts.map +1 -0
  152. package/dist/repl.d.ts +8 -4
  153. package/dist/repl.d.ts.map +1 -0
  154. package/dist/repl.js +108 -252
  155. package/dist/terminal/ansi-styles.d.ts +77 -0
  156. package/dist/terminal/ansi-styles.d.ts.map +1 -0
  157. package/dist/terminal/ansi-styles.js +215 -0
  158. package/dist/terminal/checkbox-prompt.d.ts +36 -0
  159. package/dist/terminal/checkbox-prompt.d.ts.map +1 -0
  160. package/dist/terminal/checkbox-prompt.js +362 -0
  161. package/dist/terminal/default-theme.d.ts +6 -0
  162. package/dist/terminal/default-theme.d.ts.map +1 -0
  163. package/dist/terminal/default-theme.js +182 -0
  164. package/dist/terminal/east-asian-width.d.ts +8 -0
  165. package/dist/terminal/east-asian-width.d.ts.map +1 -0
  166. package/dist/terminal/east-asian-width.js +409 -0
  167. package/dist/terminal/editor-prompt.d.ts +10 -0
  168. package/dist/terminal/editor-prompt.d.ts.map +1 -0
  169. package/dist/terminal/editor-prompt.js +61 -0
  170. package/dist/terminal/errors.d.ts +19 -0
  171. package/dist/terminal/errors.d.ts.map +1 -0
  172. package/dist/terminal/errors.js +37 -0
  173. package/dist/terminal/formatting.d.ts +1 -11
  174. package/dist/terminal/formatting.d.ts.map +1 -0
  175. package/dist/terminal/formatting.js +4 -20
  176. package/dist/terminal/highlight/index.d.ts +53 -0
  177. package/dist/terminal/highlight/index.d.ts.map +1 -0
  178. package/dist/terminal/highlight/index.js +90 -0
  179. package/dist/terminal/highlight/theme.d.ts +233 -0
  180. package/dist/terminal/highlight/theme.d.ts.map +1 -0
  181. package/dist/terminal/highlight/theme.js +83 -0
  182. package/dist/terminal/index.d.ts +16 -9
  183. package/dist/terminal/index.d.ts.map +1 -0
  184. package/dist/terminal/index.js +42 -126
  185. package/dist/terminal/input-prompt.d.ts +16 -0
  186. package/dist/terminal/input-prompt.d.ts.map +1 -0
  187. package/dist/terminal/input-prompt.js +181 -0
  188. package/dist/terminal/markdown-utils.d.ts +1 -0
  189. package/dist/terminal/markdown-utils.d.ts.map +1 -0
  190. package/dist/terminal/markdown.d.ts +1 -0
  191. package/dist/terminal/markdown.d.ts.map +1 -0
  192. package/dist/terminal/markdown.js +17 -12
  193. package/dist/terminal/search-prompt.d.ts +20 -0
  194. package/dist/terminal/search-prompt.d.ts.map +1 -0
  195. package/dist/terminal/search-prompt.js +279 -0
  196. package/dist/terminal/select-prompt.d.ts +26 -0
  197. package/dist/terminal/select-prompt.d.ts.map +1 -0
  198. package/dist/terminal/select-prompt.js +298 -0
  199. package/dist/terminal/string-width.d.ts +7 -0
  200. package/dist/terminal/string-width.d.ts.map +1 -0
  201. package/dist/terminal/string-width.js +61 -0
  202. package/dist/terminal/strip-ansi.d.ts +2 -0
  203. package/dist/terminal/strip-ansi.d.ts.map +1 -0
  204. package/dist/terminal/strip-ansi.js +20 -0
  205. package/dist/terminal/style.d.ts +191 -0
  206. package/dist/terminal/style.d.ts.map +1 -0
  207. package/dist/terminal/style.js +259 -0
  208. package/dist/terminal/supports-color.d.ts +1 -0
  209. package/dist/terminal/supports-color.d.ts.map +1 -0
  210. package/dist/terminal/supports-hyperlinks.d.ts +1 -3
  211. package/dist/terminal/supports-hyperlinks.d.ts.map +1 -0
  212. package/dist/terminal/supports-hyperlinks.js +1 -1
  213. package/dist/terminal/types.d.ts +1 -37
  214. package/dist/terminal/types.d.ts.map +1 -0
  215. package/dist/terminal/wrap-ansi.d.ts +8 -0
  216. package/dist/terminal/wrap-ansi.d.ts.map +1 -0
  217. package/dist/terminal/wrap-ansi.js +190 -0
  218. package/dist/{token-utils.d.ts → tokens/counter.d.ts} +1 -0
  219. package/dist/tokens/counter.d.ts.map +1 -0
  220. package/dist/{token-utils.js → tokens/counter.js} +1 -1
  221. package/dist/tokens/manage-output.d.ts +34 -0
  222. package/dist/tokens/manage-output.d.ts.map +1 -0
  223. package/dist/tokens/manage-output.js +44 -0
  224. package/dist/{token-tracker.d.ts → tokens/tracker.d.ts} +1 -0
  225. package/dist/tokens/tracker.d.ts.map +1 -0
  226. package/dist/tool-executor.d.ts +28 -0
  227. package/dist/tool-executor.d.ts.map +1 -0
  228. package/dist/tool-executor.js +74 -0
  229. package/dist/tools/agent.d.ts +3 -2
  230. package/dist/tools/agent.d.ts.map +1 -0
  231. package/dist/tools/agent.js +7 -4
  232. package/dist/tools/bash-utils.d.ts +7 -0
  233. package/dist/tools/bash-utils.d.ts.map +1 -0
  234. package/dist/tools/bash-utils.js +212 -0
  235. package/dist/tools/bash.d.ts +9 -7
  236. package/dist/tools/bash.d.ts.map +1 -0
  237. package/dist/tools/bash.js +95 -212
  238. package/dist/tools/code-interpreter.d.ts +1 -1
  239. package/dist/tools/code-interpreter.d.ts.map +1 -0
  240. package/dist/tools/code-interpreter.js +31 -96
  241. package/dist/tools/delete-file.d.ts +5 -3
  242. package/dist/tools/delete-file.d.ts.map +1 -0
  243. package/dist/tools/delete-file.js +47 -33
  244. package/dist/tools/directory-tree.d.ts +10 -1
  245. package/dist/tools/directory-tree.d.ts.map +1 -0
  246. package/dist/tools/directory-tree.js +91 -8
  247. package/dist/tools/dynamic-tool-loader.d.ts +12 -0
  248. package/dist/tools/dynamic-tool-loader.d.ts.map +1 -0
  249. package/dist/tools/dynamic-tool-loader.js +280 -0
  250. package/dist/tools/dynamic-tool-parser.d.ts +20 -0
  251. package/dist/tools/dynamic-tool-parser.d.ts.map +1 -0
  252. package/dist/tools/dynamic-tool-parser.js +21 -0
  253. package/dist/tools/edit-file.d.ts +10 -2
  254. package/dist/tools/edit-file.d.ts.map +1 -0
  255. package/dist/tools/edit-file.js +117 -40
  256. package/dist/tools/file-editing-utils.d.ts +2 -0
  257. package/dist/tools/file-editing-utils.d.ts.map +1 -0
  258. package/dist/tools/file-editing-utils.js +135 -0
  259. package/dist/tools/filesystem-utils.d.ts +6 -21
  260. package/dist/tools/filesystem-utils.d.ts.map +1 -0
  261. package/dist/tools/filesystem-utils.js +96 -148
  262. package/dist/tools/git-utils.d.ts +1 -0
  263. package/dist/tools/git-utils.d.ts.map +1 -0
  264. package/dist/tools/grep.d.ts +5 -3
  265. package/dist/tools/grep.d.ts.map +1 -0
  266. package/dist/tools/grep.js +67 -27
  267. package/dist/tools/index.d.ts +10 -16
  268. package/dist/tools/index.d.ts.map +1 -0
  269. package/dist/tools/index.js +33 -22
  270. package/dist/tools/move-file.d.ts +1 -0
  271. package/dist/tools/move-file.d.ts.map +1 -0
  272. package/dist/tools/move-file.js +12 -5
  273. package/dist/tools/read-file.d.ts +2 -1
  274. package/dist/tools/read-file.d.ts.map +1 -0
  275. package/dist/tools/read-file.js +13 -6
  276. package/dist/tools/read-multiple-files.d.ts +2 -1
  277. package/dist/tools/read-multiple-files.d.ts.map +1 -0
  278. package/dist/tools/read-multiple-files.js +90 -9
  279. package/dist/tools/save-file.d.ts +5 -3
  280. package/dist/tools/save-file.d.ts.map +1 -0
  281. package/dist/tools/save-file.js +64 -36
  282. package/dist/tools/think.d.ts +1 -0
  283. package/dist/tools/think.d.ts.map +1 -0
  284. package/dist/tools/think.js +5 -1
  285. package/dist/tools/types.d.ts +14 -1
  286. package/dist/tools/types.d.ts.map +1 -0
  287. package/dist/tools/web-fetch.d.ts +4 -2
  288. package/dist/tools/web-fetch.d.ts.map +1 -0
  289. package/dist/tools/web-fetch.js +2 -2
  290. package/dist/tools/web-search.d.ts +2 -1
  291. package/dist/tools/web-search.d.ts.map +1 -0
  292. package/dist/tools/web-search.js +46 -11
  293. package/dist/utils/filesystem.d.ts +23 -0
  294. package/dist/utils/filesystem.d.ts.map +1 -0
  295. package/dist/utils/filesystem.js +140 -0
  296. package/dist/utils/filetype-detection.d.ts +3 -0
  297. package/dist/utils/filetype-detection.d.ts.map +1 -0
  298. package/dist/utils/filetype-detection.js +112 -0
  299. package/dist/utils/glob.d.ts +52 -0
  300. package/dist/utils/glob.d.ts.map +1 -0
  301. package/dist/utils/glob.js +376 -0
  302. package/dist/utils/ignore.d.ts +104 -0
  303. package/dist/utils/ignore.d.ts.map +1 -0
  304. package/dist/utils/ignore.js +649 -0
  305. package/dist/utils/process.d.ts +3 -2
  306. package/dist/utils/process.d.ts.map +1 -0
  307. package/dist/utils/process.js +17 -2
  308. package/dist/utils/zod-utils.d.ts +4 -0
  309. package/dist/utils/zod-utils.d.ts.map +1 -0
  310. package/dist/utils/zod-utils.js +7 -0
  311. package/dist/version.d.ts +1 -0
  312. package/dist/version.d.ts.map +1 -0
  313. package/package.json +32 -30
  314. package/dist/tools/command-validation.d.ts +0 -11
  315. package/dist/tools/command-validation.js +0 -45
  316. /package/dist/{token-tracker.js → tokens/tracker.js} +0 -0
@@ -31,7 +31,6 @@ export function modelCommand(options) {
31
31
  return {
32
32
  command: "/model",
33
33
  description: "List available models or switch to a different model. Usage: /model [provider:model-name|category|provider]",
34
- result: "continue",
35
34
  getSubCommands: () => Promise.resolve(models),
36
35
  async execute(args) {
37
36
  const arg = args.join(" ").trim();
@@ -49,13 +48,13 @@ export function modelCommand(options) {
49
48
  terminal.writeln(formatModelInfo(model));
50
49
  }
51
50
  }
52
- return;
51
+ return "continue";
53
52
  }
54
53
  // Switch to a specific model
55
54
  if (isValidModel(arg)) {
56
55
  // Call the standalone switchModel function
57
56
  switchModel(arg);
58
- return;
57
+ return "continue";
59
58
  }
60
59
  // Display models by category
61
60
  const categories = ["fast", "balanced", "powerful"];
@@ -65,7 +64,7 @@ export function modelCommand(options) {
65
64
  for (const model of getModelsByCategory(arg)) {
66
65
  terminal.writeln(formatModelInfo(model));
67
66
  }
68
- return;
67
+ return "continue";
69
68
  }
70
69
  // Display models by provider
71
70
  if (providers.includes(arg)) {
@@ -74,11 +73,12 @@ export function modelCommand(options) {
74
73
  for (const model of Object.values(modelRegistry).filter((m) => m.provider === arg)) {
75
74
  terminal.writeln(formatModelInfo(model));
76
75
  }
77
- return;
76
+ return "continue";
78
77
  }
79
78
  // Invalid model name
80
79
  terminal.error(`Invalid model name or category: ${arg}`);
81
80
  terminal.info("Usage: /model [provider:model-name|category|provider]");
81
+ return "continue";
82
82
  },
83
83
  };
84
84
  }
@@ -1,2 +1,3 @@
1
1
  import type { CommandOptions, ReplCommand } from "./types.ts";
2
2
  export declare const pasteCommand: ({ terminal, modelManager, promptManager, tokenCounter, }: CommandOptions) => ReplCommand;
3
+ //# sourceMappingURL=paste-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paste-command.d.ts","sourceRoot":"","sources":["../../source/commands/paste-command.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAsH9D,eAAO,MAAM,YAAY,GAAI,0DAK1B,cAAc,KAAG,WAqHnB,CAAC"}
@@ -102,7 +102,6 @@ export const pasteCommand = ({ terminal, modelManager, promptManager, tokenCount
102
102
  return {
103
103
  command: "/paste",
104
104
  description: "Pastes image or text content from the clipboard into the next prompt.",
105
- result: "continue",
106
105
  getSubCommands: () => Promise.resolve([]),
107
106
  execute: async () => {
108
107
  try {
@@ -111,7 +110,7 @@ export const pasteCommand = ({ terminal, modelManager, promptManager, tokenCount
111
110
  // Validate the base64 data
112
111
  if (!isValidBase64(base64DataUrl)) {
113
112
  terminal.error("Invalid base64 data in clipboard. The image data may be corrupted.");
114
- return;
113
+ return "continue";
115
114
  }
116
115
  // Extract MIME type with better error handling and actual image format detection
117
116
  let mimeType;
@@ -146,7 +145,7 @@ export const pasteCommand = ({ terminal, modelManager, promptManager, tokenCount
146
145
  // Final validation
147
146
  if (!isValidBase64(correctedDataUrl)) {
148
147
  terminal.error("Failed to correct base64 data format. The image data may be corrupted.");
149
- return;
148
+ return "continue";
150
149
  }
151
150
  promptManager.addContext({
152
151
  type: "image",
@@ -162,12 +161,12 @@ export const pasteCommand = ({ terminal, modelManager, promptManager, tokenCount
162
161
  });
163
162
  }
164
163
  terminal.success("Image from clipboard will be added to your next prompt.");
165
- return;
164
+ return "continue";
166
165
  }
167
166
  const clipboardContent = await Clipboard.getText();
168
167
  if (!clipboardContent || clipboardContent.trim() === "") {
169
168
  terminal.warn("Clipboard is empty.");
170
- return;
169
+ return "continue";
171
170
  }
172
171
  const content = formatBlock(clipboardContent, "clipboard", modelManager.getModelMetadata("repl").promptFormat);
173
172
  promptManager.addContext(content);
@@ -178,7 +177,9 @@ export const pasteCommand = ({ terminal, modelManager, promptManager, tokenCount
178
177
  const message = error instanceof Error ? error.message : String(error);
179
178
  terminal.error(`Error processing clipboard content: ${message}`);
180
179
  logger.error(error, "Paste command error:");
180
+ return "continue";
181
181
  }
182
+ return "continue";
182
183
  },
183
184
  };
184
185
  };
@@ -1,2 +1,3 @@
1
1
  import type { CommandOptions, ReplCommand } from "./types.ts";
2
- export declare const promptCommand: ({ terminal, modelManager, promptManager, config, }: CommandOptions) => ReplCommand;
2
+ export declare const promptCommand: ({ terminal, modelManager, promptManager, config, promptHistory, }: CommandOptions) => ReplCommand;
3
+ //# sourceMappingURL=prompt-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-command.d.ts","sourceRoot":"","sources":["../../source/commands/prompt-command.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9D,eAAO,MAAM,aAAa,GAAI,mEAM3B,cAAc,KAAG,WAuHnB,CAAC"}
@@ -1,11 +1,10 @@
1
1
  import { readdir, readFile } from "node:fs/promises";
2
2
  import path, { basename } from "node:path";
3
3
  import { processPrompt } from "../mentions.js";
4
- export const promptCommand = ({ terminal, modelManager, promptManager, config, }) => {
4
+ export const promptCommand = ({ terminal, modelManager, promptManager, config, promptHistory, }) => {
5
5
  return {
6
6
  command: "/prompt",
7
7
  description: "Loads and executes prompts. Project prompts override user prompts with the same name.",
8
- result: "use",
9
8
  getSubCommands: async () => {
10
9
  const getPromptNamesFromDir = async (dirPath) => {
11
10
  try {
@@ -28,24 +27,31 @@ export const promptCommand = ({ terminal, modelManager, promptManager, config, }
28
27
  const projectPrompts = await getPromptNamesFromDir(projectPromptDir);
29
28
  // Combine and deduplicate, with project prompts taking precedence
30
29
  const allPrompts = new Set([...userPrompts, ...projectPrompts]);
31
- return Array.from(allPrompts).sort();
30
+ const promptList = Array.from(allPrompts).sort();
31
+ // Add 'list' as a special subcommand for listing all prompts
32
+ return ["list", ...promptList];
32
33
  },
33
34
  execute: async (args) => {
34
35
  const promptName = args?.[0];
35
36
  if (!promptName) {
36
- terminal.warn("Please provide a prompt name. Usage: /prompt <prompt-name> [input...]");
37
- return;
37
+ await listAllPrompts(terminal, config);
38
+ return "continue";
39
+ }
40
+ // Handle 'list' subcommand
41
+ if (promptName === "list") {
42
+ await listAllPrompts(terminal, config);
43
+ return "continue";
38
44
  }
39
45
  // Check for old format and provide helpful error
40
46
  if (promptName.includes(":")) {
41
47
  terminal.warn("The old format (user:name or project:name) is no longer supported. Use: /prompt <prompt-name> [input...]");
42
- return;
48
+ return "continue";
43
49
  }
44
50
  try {
45
51
  const promptResult = await findPrompt(promptName, config);
46
52
  if (!promptResult) {
47
53
  terminal.error(`Prompt not found: ${promptName}. Available prompts can be seen with tab completion.`);
48
- return;
54
+ return "continue";
49
55
  }
50
56
  let promptContent;
51
57
  try {
@@ -54,7 +60,7 @@ export const promptCommand = ({ terminal, modelManager, promptManager, config, }
54
60
  catch (error) {
55
61
  if (error.code === "ENOENT") {
56
62
  terminal.error(`Prompt file not found: ${promptName} at ${promptResult.path}`);
57
- return;
63
+ return "continue";
58
64
  }
59
65
  throw error;
60
66
  }
@@ -77,9 +83,17 @@ export const promptCommand = ({ terminal, modelManager, promptManager, config, }
77
83
  promptManager.addContext(context);
78
84
  }
79
85
  promptManager.set(processedPrompt.message);
86
+ // Add the loaded prompt to history
87
+ promptHistory.push(processedPrompt.message);
88
+ terminal.lineBreak();
89
+ terminal.display(processedPrompt.message);
90
+ terminal.lineBreak();
91
+ terminal.hr();
92
+ return "use";
80
93
  }
81
94
  catch (error) {
82
95
  terminal.error(`Error loading prompt: ${error.message}`);
96
+ return "continue";
83
97
  }
84
98
  },
85
99
  };
@@ -109,3 +123,43 @@ async function findPrompt(promptName, config) {
109
123
  }
110
124
  return null; // Prompt not found in either location
111
125
  }
126
+ async function listAllPrompts(terminal, config) {
127
+ const getPromptNamesFromDir = async (dirPath) => {
128
+ try {
129
+ const dirents = await readdir(dirPath, { withFileTypes: true });
130
+ return dirents
131
+ .filter((dirent) => dirent.isFile() && dirent.name.endsWith(".md"))
132
+ .map((dirent) => basename(dirent.name, ".md"));
133
+ }
134
+ catch (error) {
135
+ if (error.code === "ENOENT") {
136
+ return []; // Directory doesn't exist, return empty array
137
+ }
138
+ terminal.error(`Error reading prompts from ${dirPath}: ${error}`);
139
+ return []; // Return empty on other errors too, but log them
140
+ }
141
+ };
142
+ const userPromptDir = config.app.ensurePathSync("prompts");
143
+ const projectPromptDir = config.project.ensurePathSync("prompts");
144
+ const userPrompts = await getPromptNamesFromDir(userPromptDir);
145
+ const projectPrompts = await getPromptNamesFromDir(projectPromptDir);
146
+ if (userPrompts.length === 0 && projectPrompts.length === 0) {
147
+ terminal.warn("No prompts found. Create prompts in ~/.acai/prompts/ or ./.acai/prompts/");
148
+ return;
149
+ }
150
+ terminal.info("Available prompts:");
151
+ if (projectPrompts.length > 0) {
152
+ terminal.info(" Project prompts (./.acai/prompts/):");
153
+ projectPrompts.sort().forEach((prompt) => {
154
+ terminal.info(` • ${prompt}`);
155
+ });
156
+ }
157
+ if (userPrompts.length > 0) {
158
+ terminal.info(" User prompts (~/.acai/prompts/):");
159
+ userPrompts.sort().forEach((prompt) => {
160
+ terminal.info(` • ${prompt}`);
161
+ });
162
+ }
163
+ terminal.info("\nUsage: /prompt <prompt-name> [input...]");
164
+ terminal.info("Example: /prompt project-status");
165
+ }
@@ -1,2 +1,3 @@
1
1
  import type { CommandOptions, ReplCommand } from "./types.ts";
2
2
  export declare const resetCommand: ({ terminal, messageHistory, }: CommandOptions) => ReplCommand;
3
+ //# sourceMappingURL=reset-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reset-command.d.ts","sourceRoot":"","sources":["../../source/commands/reset-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9D,eAAO,MAAM,YAAY,GAAI,+BAG1B,cAAc,KAAG,WAiBnB,CAAC"}
@@ -3,7 +3,6 @@ export const resetCommand = ({ terminal, messageHistory, }) => {
3
3
  command: "/reset",
4
4
  aliases: ["/new"],
5
5
  description: "Saves the chat history and then resets it.",
6
- result: "continue",
7
6
  getSubCommands: () => Promise.resolve([]),
8
7
  execute: async () => {
9
8
  if (!messageHistory.isEmpty()) {
@@ -12,6 +11,7 @@ export const resetCommand = ({ terminal, messageHistory, }) => {
12
11
  }
13
12
  terminal.setTitle(`acai: ${process.cwd()}`);
14
13
  terminal.clear();
14
+ return "continue";
15
15
  },
16
16
  };
17
17
  };
@@ -1,2 +1,3 @@
1
1
  import type { CommandOptions, ReplCommand } from "./types.ts";
2
2
  export declare const rulesCommand: ({ terminal }: CommandOptions) => ReplCommand;
3
+ //# sourceMappingURL=rules-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules-command.d.ts","sourceRoot":"","sources":["../../source/commands/rules-command.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9D,eAAO,MAAM,YAAY,GAAI,cAAc,cAAc,KAAG,WA0E3D,CAAC"}
@@ -1,10 +1,9 @@
1
- import { editor } from "@inquirer/prompts";
2
1
  import { config } from "../config.js";
2
+ import { editor } from "../terminal/editor-prompt.js";
3
3
  export const rulesCommand = ({ terminal }) => {
4
4
  return {
5
5
  command: "/rules",
6
6
  description: "View, add, or edit rules. Usage: /rules [view|add <text>|edit]",
7
- result: "continue",
8
7
  getSubCommands: () => Promise.resolve(["view", "add", "edit"]),
9
8
  execute: async (args) => {
10
9
  const subCommand = args[0] ?? "view"; // Default to 'view'
@@ -28,7 +27,7 @@ export const rulesCommand = ({ terminal }) => {
28
27
  if (!newMemory) {
29
28
  terminal.error("Error: Memory text cannot be empty for 'add'.");
30
29
  terminal.writeln("Usage: /memory add <new memory text>");
31
- return;
30
+ return "continue";
32
31
  }
33
32
  const currentContent = await config.readAgentsFile();
34
33
  const updatedContent = currentContent
@@ -43,6 +42,7 @@ export const rulesCommand = ({ terminal }) => {
43
42
  message: "Edit rules:",
44
43
  postfix: "md",
45
44
  default: currentContent,
45
+ skipPrompt: true,
46
46
  });
47
47
  // Check if the user cancelled the edit (editor returns the original content)
48
48
  // Or if the content is actually different
@@ -58,10 +58,12 @@ export const rulesCommand = ({ terminal }) => {
58
58
  terminal.writeln("Invalid subcommand. Usage: /rules [view|add <text>|edit]");
59
59
  break;
60
60
  }
61
+ return "continue";
61
62
  }
62
63
  catch (_error) {
63
64
  // Errors from read/write helpers are already logged
64
65
  terminal.error("Failed to execute memory command.");
66
+ return "continue";
65
67
  }
66
68
  },
67
69
  };
@@ -1,2 +1,3 @@
1
1
  import type { CommandOptions, ReplCommand } from "./types.ts";
2
2
  export declare const saveCommand: ({ messageHistory, terminal, }: CommandOptions) => ReplCommand;
3
+ //# sourceMappingURL=save-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-command.d.ts","sourceRoot":"","sources":["../../source/commands/save-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9D,eAAO,MAAM,WAAW,GAAI,+BAGzB,cAAc,KAAG,WAcnB,CAAC"}
@@ -2,13 +2,13 @@ export const saveCommand = ({ messageHistory, terminal, }) => {
2
2
  return {
3
3
  command: "/save",
4
4
  description: "Saves the chat history.",
5
- result: "continue",
6
5
  getSubCommands: () => Promise.resolve([]),
7
6
  execute: async () => {
8
7
  if (!messageHistory.isEmpty()) {
9
8
  await messageHistory.save();
10
9
  }
11
10
  terminal.info("Message history saved.");
11
+ return "continue";
12
12
  },
13
13
  };
14
14
  };
@@ -0,0 +1,3 @@
1
+ import type { CommandOptions, ReplCommand } from "./types.ts";
2
+ export declare const shellCommand: (options: CommandOptions) => ReplCommand;
3
+ //# sourceMappingURL=shell-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-command.d.ts","sourceRoot":"","sources":["../../source/commands/shell-command.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9D,eAAO,MAAM,YAAY,GAAI,SAAS,cAAc,KAAG,WAsEtD,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { initExecutionEnvironment } from "../execution/index.js";
2
+ import { input } from "../terminal/input-prompt.js";
3
+ import style from "../terminal/style.js";
4
+ // Command execution timeout in milliseconds
5
+ const DEFAULT_TIMEOUT = 1.5 * 60 * 1000; // 1.5 minutes
6
+ export const shellCommand = (options) => {
7
+ const { terminal, promptManager, tokenCounter } = options;
8
+ return {
9
+ command: "/shell",
10
+ aliases: ["/sh"],
11
+ description: "Run a non-interactive shell command on the local machine.",
12
+ getSubCommands: () => Promise.resolve([]),
13
+ execute: async (args) => {
14
+ const commandStr = args.join(" ");
15
+ if (!commandStr.trim()) {
16
+ terminal.error("Provide a non-empty command.");
17
+ return "continue";
18
+ }
19
+ const execEnv = await initExecutionEnvironment();
20
+ const colorEnv = {
21
+ ["FORCE_COLOR"]: "1",
22
+ ["CLICOLOR"]: "1",
23
+ ["CLICOLOR_FORCE"]: "1",
24
+ ["TERM"]: process.env["TERM"] ?? "xterm-256color",
25
+ ["COLORTERM"]: process.env["COLORTERM"] ?? "truecolor",
26
+ ["npm_config_color"]: "true",
27
+ };
28
+ const { output, exitCode, duration } = await execEnv.executeCommand(commandStr, {
29
+ cwd: process.cwd(),
30
+ timeout: DEFAULT_TIMEOUT,
31
+ preserveOutputOnError: true,
32
+ captureStderr: true,
33
+ throwOnError: false,
34
+ env: colorEnv,
35
+ });
36
+ terminal.lineBreak();
37
+ terminal.writeln(style.gray(`Exit code: ${exitCode}, Duration: ${duration}ms`));
38
+ terminal.writeln(output);
39
+ // Prompt for context addition
40
+ const message = "Would you like to add this output to the prompt context for AI reference? [y/N]";
41
+ const userChoice = await input({
42
+ message,
43
+ validate: (input) => {
44
+ const normalized = input.toLowerCase().trim();
45
+ if (normalized === "y" || normalized === "n" || normalized === "") {
46
+ return true;
47
+ }
48
+ return "Please enter 'y' for yes or 'n' for no";
49
+ },
50
+ default: "N",
51
+ });
52
+ if (userChoice.toLowerCase() === "y") {
53
+ const tokenCount = tokenCounter.count(output);
54
+ promptManager.addContext(output);
55
+ terminal.success(`Output added to prompt context. (${tokenCount} tokens)`);
56
+ }
57
+ return "continue";
58
+ },
59
+ };
60
+ };
@@ -1,21 +1,21 @@
1
1
  import type { ConfigManager } from "../config.ts";
2
2
  import type { MessageHistory } from "../messages.ts";
3
3
  import type { ModelManager } from "../models/manager.ts";
4
- import type { PromptManager } from "../prompts/manager.ts";
4
+ import type { PromptManagerApi } from "../prompts/manager.ts";
5
5
  import type { Terminal } from "../terminal/index.ts";
6
- import type { TokenTracker } from "../token-tracker.ts";
7
- import type { TokenCounter } from "../token-utils.ts";
6
+ import type { TokenCounter } from "../tokens/counter.ts";
7
+ import type { TokenTracker } from "../tokens/tracker.ts";
8
+ import type { ToolExecutor } from "../tool-executor.ts";
8
9
  import type { Message } from "../tools/types.ts";
9
10
  export interface ReplCommand {
10
11
  command: string;
11
12
  aliases?: string[];
12
13
  description: string;
13
- result: "break" | "continue" | "use";
14
14
  getSubCommands: () => Promise<string[]>;
15
- execute: (args: string[]) => Promise<void>;
15
+ execute: (args: string[]) => Promise<"break" | "continue" | "use">;
16
16
  }
17
17
  export interface CommandOptions {
18
- promptManager: PromptManager;
18
+ promptManager: PromptManagerApi;
19
19
  modelManager: ModelManager;
20
20
  terminal: Terminal;
21
21
  messageHistory: MessageHistory;
@@ -23,4 +23,7 @@ export interface CommandOptions {
23
23
  config: ConfigManager;
24
24
  tokenCounter: TokenCounter;
25
25
  toolEvents: Map<string, Message[]>;
26
+ toolExecutor?: ToolExecutor;
27
+ promptHistory: string[];
26
28
  }
29
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../source/commands/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,OAAO,GAAG,UAAU,GAAG,KAAK,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,gBAAgB,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,aAAa,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACnC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB"}
@@ -1,2 +1,3 @@
1
1
  import type { CommandOptions, ReplCommand } from "./types.ts";
2
2
  export declare function usageCommand({ terminal, tokenTracker, }: CommandOptions): ReplCommand;
3
+ //# sourceMappingURL=usage-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-command.d.ts","sourceRoot":"","sources":["../../source/commands/usage-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9D,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,YAAY,GACb,EAAE,cAAc,GAAG,WAAW,CAoB9B"}
@@ -2,9 +2,8 @@ export function usageCommand({ terminal, tokenTracker, }) {
2
2
  return {
3
3
  command: "/usage",
4
4
  description: "Show token usage breakdown",
5
- result: "continue",
6
5
  getSubCommands: () => Promise.resolve([]),
7
- execute() {
6
+ async execute() {
8
7
  const entries = Object.entries(tokenTracker.getUsageBreakdown());
9
8
  if (entries.length === 0) {
10
9
  terminal.info("No usage yet.");
@@ -15,7 +14,7 @@ export function usageCommand({ terminal, tokenTracker, }) {
15
14
  colWidths: [30, 70],
16
15
  });
17
16
  }
18
- return Promise.resolve();
17
+ return "continue";
19
18
  },
20
19
  };
21
20
  }
package/dist/config.d.ts CHANGED
@@ -1,4 +1,25 @@
1
1
  import { z } from "zod";
2
+ declare const ProjectConfigSchema: z.ZodObject<{
3
+ logs: z.ZodOptional<z.ZodObject<{
4
+ path: z.ZodString;
5
+ }, z.core.$strip>>;
6
+ tools: z.ZodDefault<z.ZodOptional<z.ZodObject<{
7
+ maxTokens: z.ZodDefault<z.ZodNumber>;
8
+ bash: z.ZodDefault<z.ZodOptional<z.ZodObject<{
9
+ allowPipes: z.ZodDefault<z.ZodBoolean>;
10
+ allowChaining: z.ZodDefault<z.ZodBoolean>;
11
+ allowRedirection: z.ZodDefault<z.ZodBoolean>;
12
+ maxSegments: z.ZodDefault<z.ZodNumber>;
13
+ maxOutputBytes: z.ZodDefault<z.ZodNumber>;
14
+ }, z.core.$strip>>>;
15
+ dynamicTools: z.ZodDefault<z.ZodOptional<z.ZodObject<{
16
+ enabled: z.ZodDefault<z.ZodBoolean>;
17
+ maxTools: z.ZodDefault<z.ZodNumber>;
18
+ }, z.core.$strip>>>;
19
+ }, z.core.$strip>>>;
20
+ notify: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
21
+ }, z.core.$strip>;
22
+ type ProjectConfig = z.infer<typeof ProjectConfigSchema>;
2
23
  export declare class DirectoryProvider {
3
24
  private baseDir;
4
25
  constructor(baseDir: string);
@@ -22,39 +43,6 @@ export declare class ConfigManager {
22
43
  ensureAppConfig(configName: string): Promise<Record<PropertyKey, unknown>>;
23
44
  writeAppConfig(configName: string, data: Record<PropertyKey, unknown>): Promise<void>;
24
45
  }
25
- declare const ProjectConfigSchema: z.ZodObject<{
26
- logs: z.ZodOptional<z.ZodObject<{
27
- path: z.ZodString;
28
- }, "strip", z.ZodTypeAny, {
29
- path: string;
30
- }, {
31
- path: string;
32
- }>>;
33
- tools: z.ZodDefault<z.ZodOptional<z.ZodObject<{
34
- maxTokens: z.ZodDefault<z.ZodNumber>;
35
- }, "strip", z.ZodTypeAny, {
36
- maxTokens: number;
37
- }, {
38
- maxTokens?: number | undefined;
39
- }>>>;
40
- notify: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
41
- }, "strip", z.ZodTypeAny, {
42
- tools: {
43
- maxTokens: number;
44
- };
45
- notify: boolean;
46
- logs?: {
47
- path: string;
48
- } | undefined;
49
- }, {
50
- logs?: {
51
- path: string;
52
- } | undefined;
53
- tools?: {
54
- maxTokens?: number | undefined;
55
- } | undefined;
56
- notify?: boolean | undefined;
57
- }>;
58
- export type ProjectConfig = z.infer<typeof ProjectConfigSchema>;
59
46
  export declare const config: ConfigManager;
60
47
  export {};
48
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../source/config.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;iBAoDvB,CAAC;AAEH,KAAK,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEzD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,MAAM;IAI3B,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAK1B,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOlD,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;CAKxC;AAED,qBAAa,aAAa;IACxB,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC;;YAOlB,WAAW;IAenB,iBAAiB,IAAI,OAAO,CAAC,aAAa,CAAC;IAe3C,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAYjC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY7C,2BAA2B,IAAI,OAAO,CAAC,MAAM,CAAC;IAe9C,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc1D,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC;IAY7C,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAczD,aAAa,CACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAalC,eAAe,CACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAgClC,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;CAKjB;AAGD,eAAO,MAAM,MAAM,eAAsB,CAAC"}
package/dist/config.js CHANGED
@@ -4,6 +4,60 @@ import { homedir } from "node:os";
4
4
  import path from "node:path";
5
5
  import { z } from "zod";
6
6
  import { jsonParser } from "./parsing.js";
7
+ // Type definitions
8
+ const ProjectConfigSchema = z.object({
9
+ logs: z
10
+ .object({
11
+ path: z.string(),
12
+ })
13
+ .optional(),
14
+ tools: z
15
+ .object({
16
+ maxTokens: z.number().default(30000),
17
+ bash: z
18
+ .object({
19
+ allowPipes: z.boolean().default(true),
20
+ allowChaining: z.boolean().default(true),
21
+ allowRedirection: z.boolean().default(true),
22
+ maxSegments: z.number().default(6),
23
+ maxOutputBytes: z.number().default(2_000_000),
24
+ })
25
+ .optional()
26
+ .default({
27
+ allowPipes: true,
28
+ allowChaining: true,
29
+ allowRedirection: true,
30
+ maxSegments: 6,
31
+ maxOutputBytes: 2_000_000,
32
+ }),
33
+ dynamicTools: z
34
+ .object({
35
+ enabled: z.boolean().default(true),
36
+ maxTools: z.number().default(10),
37
+ })
38
+ .optional()
39
+ .default({
40
+ enabled: true,
41
+ maxTools: 10,
42
+ }),
43
+ })
44
+ .optional()
45
+ .default({
46
+ maxTokens: 30000,
47
+ bash: {
48
+ allowPipes: true,
49
+ allowChaining: true,
50
+ allowRedirection: true,
51
+ maxSegments: 6,
52
+ maxOutputBytes: 2_000_000,
53
+ },
54
+ dynamicTools: {
55
+ enabled: true,
56
+ maxTools: 10,
57
+ },
58
+ }),
59
+ notify: z.boolean().optional().default(true),
60
+ });
7
61
  export class DirectoryProvider {
8
62
  baseDir;
9
63
  constructor(baseDir) {
@@ -161,6 +215,13 @@ export class ConfigManager {
161
215
  },
162
216
  tools: {
163
217
  maxTokens: 30000,
218
+ bash: {
219
+ allowPipes: true,
220
+ allowChaining: true,
221
+ allowRedirection: true,
222
+ maxSegments: 6,
223
+ maxOutputBytes: 2_000_000,
224
+ },
164
225
  },
165
226
  notify: true,
166
227
  };
@@ -174,20 +235,5 @@ export class ConfigManager {
174
235
  await fs.writeFile(configPath, JSON.stringify(data, null, 2));
175
236
  }
176
237
  }
177
- // Type definitions
178
- const ProjectConfigSchema = z.object({
179
- logs: z
180
- .object({
181
- path: z.string(),
182
- })
183
- .optional(),
184
- tools: z
185
- .object({
186
- maxTokens: z.number().default(30000),
187
- })
188
- .optional()
189
- .default({ maxTokens: 30000 }),
190
- notify: z.boolean().optional().default(true),
191
- });
192
238
  // Create a singleton instance
193
239
  export const config = new ConfigManager();