@travisennis/acai 0.0.12 → 0.0.13

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 (237) hide show
  1. package/README.md +3 -2
  2. package/dist/agent/index.d.ts.map +1 -1
  3. package/dist/agent/index.js +2 -5
  4. package/dist/commands/history/types.d.ts +3 -2
  5. package/dist/commands/history/types.d.ts.map +1 -1
  6. package/dist/commands/init-project/utils.d.ts +0 -1
  7. package/dist/commands/init-project/utils.d.ts.map +1 -1
  8. package/dist/commands/init-project/utils.js +1 -1
  9. package/dist/commands/manager.d.ts.map +1 -1
  10. package/dist/commands/manager.js +0 -18
  11. package/dist/commands/share/html-renderer.d.ts.map +1 -1
  12. package/dist/commands/share/html-renderer.js +54 -48
  13. package/dist/commands/tools/index.js +39 -38
  14. package/dist/config/index.d.ts +0 -2
  15. package/dist/config/index.d.ts.map +1 -1
  16. package/dist/config/index.js +2 -6
  17. package/dist/index.d.ts +14 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +94 -76
  20. package/dist/models/manager.d.ts +1 -10
  21. package/dist/models/manager.d.ts.map +1 -1
  22. package/dist/models/manager.js +2 -2
  23. package/dist/models/opencode-go-provider.d.ts +4 -4
  24. package/dist/models/opencode-go-provider.d.ts.map +1 -1
  25. package/dist/models/opencode-go-provider.js +29 -35
  26. package/dist/models/providers.d.ts +1 -1
  27. package/dist/models/providers.d.ts.map +1 -1
  28. package/dist/prompts/system-prompt.d.ts +0 -2
  29. package/dist/prompts/system-prompt.d.ts.map +1 -1
  30. package/dist/prompts/system-prompt.js +6 -10
  31. package/dist/repl/index.d.ts +27 -11
  32. package/dist/repl/index.d.ts.map +1 -1
  33. package/dist/repl/index.js +238 -254
  34. package/dist/skills/index.d.ts +12 -2
  35. package/dist/skills/index.d.ts.map +1 -1
  36. package/dist/skills/index.js +123 -73
  37. package/dist/terminal/control.d.ts +1 -21
  38. package/dist/terminal/control.d.ts.map +1 -1
  39. package/dist/terminal/control.js +1 -32
  40. package/dist/terminal/formatting.d.ts +0 -33
  41. package/dist/terminal/formatting.d.ts.map +1 -1
  42. package/dist/terminal/formatting.js +0 -91
  43. package/dist/terminal/highlight/theme.d.ts +0 -37
  44. package/dist/terminal/highlight/theme.d.ts.map +1 -1
  45. package/dist/terminal/highlight/theme.js +1 -79
  46. package/dist/terminal/keys.d.ts +0 -97
  47. package/dist/terminal/keys.d.ts.map +1 -1
  48. package/dist/terminal/keys.js +0 -194
  49. package/dist/terminal/select-prompt.d.ts.map +1 -1
  50. package/dist/terminal/select-prompt.js +65 -51
  51. package/dist/terminal/style.d.ts +1 -1
  52. package/dist/terminal/style.d.ts.map +1 -1
  53. package/dist/terminal/supports-color.d.ts.map +1 -1
  54. package/dist/terminal/supports-color.js +38 -20
  55. package/dist/terminal/supports-hyperlinks.d.ts +3 -0
  56. package/dist/terminal/supports-hyperlinks.d.ts.map +1 -1
  57. package/dist/terminal/supports-hyperlinks.js +72 -31
  58. package/dist/terminal/table/layout-manager.d.ts +0 -20
  59. package/dist/terminal/table/layout-manager.d.ts.map +1 -1
  60. package/dist/terminal/table/layout-manager.js +68 -44
  61. package/dist/terminal/table/utils.d.ts +0 -1
  62. package/dist/terminal/table/utils.d.ts.map +1 -1
  63. package/dist/terminal/table/utils.js +2 -4
  64. package/dist/tools/apply-patch.d.ts +5 -3
  65. package/dist/tools/apply-patch.d.ts.map +1 -1
  66. package/dist/tools/apply-patch.js +154 -123
  67. package/dist/tools/bash.d.ts.map +1 -1
  68. package/dist/tools/bash.js +11 -8
  69. package/dist/tools/dynamic-tool-loader.d.ts +6 -1
  70. package/dist/tools/dynamic-tool-loader.d.ts.map +1 -1
  71. package/dist/tools/dynamic-tool-loader.js +154 -135
  72. package/dist/tools/index.d.ts +3 -133
  73. package/dist/tools/index.d.ts.map +1 -1
  74. package/dist/tools/index.js +0 -20
  75. package/dist/tools/read-file.d.ts.map +1 -1
  76. package/dist/tools/read-file.js +32 -13
  77. package/dist/tools/skill.d.ts.map +1 -1
  78. package/dist/tools/skill.js +20 -13
  79. package/dist/tools/web-fetch.d.ts +2 -6
  80. package/dist/tools/web-fetch.d.ts.map +1 -1
  81. package/dist/tools/web-fetch.js +59 -36
  82. package/dist/tools/web-search.d.ts +0 -4
  83. package/dist/tools/web-search.d.ts.map +1 -1
  84. package/dist/tools/web-search.js +40 -32
  85. package/dist/tui/autocomplete/utils.d.ts +0 -15
  86. package/dist/tui/autocomplete/utils.d.ts.map +1 -1
  87. package/dist/tui/autocomplete/utils.js +0 -85
  88. package/dist/tui/autocomplete.d.ts +1 -1
  89. package/dist/tui/autocomplete.d.ts.map +1 -1
  90. package/dist/tui/autocomplete.js +1 -1
  91. package/dist/tui/components/editor.d.ts +12 -0
  92. package/dist/tui/components/editor.d.ts.map +1 -1
  93. package/dist/tui/components/editor.js +181 -195
  94. package/dist/tui/components/input.d.ts +4 -0
  95. package/dist/tui/components/input.d.ts.map +1 -1
  96. package/dist/tui/components/input.js +33 -31
  97. package/dist/tui/components/markdown.d.ts +30 -0
  98. package/dist/tui/components/markdown.d.ts.map +1 -1
  99. package/dist/tui/components/markdown.js +274 -242
  100. package/dist/tui/components/modal.d.ts.map +1 -1
  101. package/dist/tui/components/modal.js +11 -11
  102. package/dist/tui/components/select-list.d.ts +5 -0
  103. package/dist/tui/components/select-list.d.ts.map +1 -1
  104. package/dist/tui/components/select-list.js +69 -98
  105. package/dist/tui/components/table.d.ts +6 -0
  106. package/dist/tui/components/table.d.ts.map +1 -1
  107. package/dist/tui/components/table.js +61 -52
  108. package/dist/tui/index.d.ts +1 -8
  109. package/dist/tui/index.d.ts.map +1 -1
  110. package/dist/tui/index.js +0 -8
  111. package/dist/tui/tui.d.ts +9 -0
  112. package/dist/tui/tui.d.ts.map +1 -1
  113. package/dist/tui/tui.js +78 -48
  114. package/dist/tui/utils.d.ts +7 -0
  115. package/dist/tui/utils.d.ts.map +1 -1
  116. package/dist/tui/utils.js +117 -53
  117. package/dist/utils/bash.d.ts.map +1 -1
  118. package/dist/utils/bash.js +121 -104
  119. package/dist/utils/command-protection.d.ts +3 -2
  120. package/dist/utils/command-protection.d.ts.map +1 -1
  121. package/dist/utils/command-protection.js +42 -33
  122. package/dist/utils/filesystem/operations.d.ts +0 -15
  123. package/dist/utils/filesystem/operations.d.ts.map +1 -1
  124. package/dist/utils/filesystem/operations.js +1 -38
  125. package/dist/utils/filesystem/security.d.ts.map +1 -1
  126. package/dist/utils/filesystem/security.js +22 -15
  127. package/dist/utils/filetype-detection.d.ts +0 -1
  128. package/dist/utils/filetype-detection.d.ts.map +1 -1
  129. package/dist/utils/filetype-detection.js +0 -12
  130. package/dist/utils/formatting.d.ts +0 -30
  131. package/dist/utils/formatting.d.ts.map +1 -1
  132. package/dist/utils/formatting.js +0 -44
  133. package/dist/utils/git.d.ts +4 -6
  134. package/dist/utils/git.d.ts.map +1 -1
  135. package/dist/utils/git.js +36 -46
  136. package/dist/utils/ignore.d.ts +1 -1
  137. package/dist/utils/ignore.d.ts.map +1 -1
  138. package/dist/utils/ignore.js +1 -1
  139. package/dist/utils/process.d.ts.map +1 -1
  140. package/dist/utils/process.js +77 -79
  141. package/dist/utils/yaml.d.ts +0 -1
  142. package/dist/utils/yaml.d.ts.map +1 -1
  143. package/dist/utils/yaml.js +80 -89
  144. package/dist/utils/zod.d.ts +0 -3
  145. package/dist/utils/zod.d.ts.map +1 -1
  146. package/dist/utils/zod.js +0 -7
  147. package/package.json +25 -24
  148. package/dist/agent/sub-agent.d.ts +0 -23
  149. package/dist/agent/sub-agent.d.ts.map +0 -1
  150. package/dist/agent/sub-agent.js +0 -109
  151. package/dist/commands/add-directory/index.d.ts +0 -3
  152. package/dist/commands/add-directory/index.d.ts.map +0 -1
  153. package/dist/commands/add-directory/index.js +0 -50
  154. package/dist/commands/add-directory/utils.d.ts +0 -3
  155. package/dist/commands/add-directory/utils.d.ts.map +0 -1
  156. package/dist/commands/add-directory/utils.js +0 -15
  157. package/dist/commands/clear/index.d.ts +0 -3
  158. package/dist/commands/clear/index.d.ts.map +0 -1
  159. package/dist/commands/clear/index.js +0 -13
  160. package/dist/commands/generate-rules/index.d.ts +0 -3
  161. package/dist/commands/generate-rules/index.d.ts.map +0 -1
  162. package/dist/commands/generate-rules/index.js +0 -206
  163. package/dist/commands/generate-rules/service.d.ts +0 -22
  164. package/dist/commands/generate-rules/service.d.ts.map +0 -1
  165. package/dist/commands/generate-rules/service.js +0 -103
  166. package/dist/commands/generate-rules/utils.d.ts +0 -5
  167. package/dist/commands/generate-rules/utils.d.ts.map +0 -1
  168. package/dist/commands/generate-rules/utils.js +0 -25
  169. package/dist/commands/handoff/index.d.ts +0 -3
  170. package/dist/commands/handoff/index.d.ts.map +0 -1
  171. package/dist/commands/handoff/index.js +0 -97
  172. package/dist/commands/handoff/utils.d.ts +0 -4
  173. package/dist/commands/handoff/utils.d.ts.map +0 -1
  174. package/dist/commands/handoff/utils.js +0 -123
  175. package/dist/commands/list-directories/index.d.ts +0 -3
  176. package/dist/commands/list-directories/index.d.ts.map +0 -1
  177. package/dist/commands/list-directories/index.js +0 -35
  178. package/dist/commands/pickup/index.d.ts +0 -3
  179. package/dist/commands/pickup/index.d.ts.map +0 -1
  180. package/dist/commands/pickup/index.js +0 -141
  181. package/dist/commands/pickup/types.d.ts +0 -6
  182. package/dist/commands/pickup/types.d.ts.map +0 -1
  183. package/dist/commands/pickup/types.js +0 -1
  184. package/dist/commands/pickup/utils.d.ts +0 -7
  185. package/dist/commands/pickup/utils.d.ts.map +0 -1
  186. package/dist/commands/pickup/utils.js +0 -56
  187. package/dist/commands/remove-directory/index.d.ts +0 -3
  188. package/dist/commands/remove-directory/index.d.ts.map +0 -1
  189. package/dist/commands/remove-directory/index.js +0 -55
  190. package/dist/commands/review/index.d.ts +0 -3
  191. package/dist/commands/review/index.d.ts.map +0 -1
  192. package/dist/commands/review/index.js +0 -12
  193. package/dist/commands/review/review-panel.d.ts +0 -3
  194. package/dist/commands/review/review-panel.d.ts.map +0 -1
  195. package/dist/commands/review/review-panel.js +0 -186
  196. package/dist/commands/review/utils.d.ts +0 -18
  197. package/dist/commands/review/utils.d.ts.map +0 -1
  198. package/dist/commands/review/utils.js +0 -146
  199. package/dist/commands/shell/index.d.ts +0 -3
  200. package/dist/commands/shell/index.d.ts.map +0 -1
  201. package/dist/commands/shell/index.js +0 -96
  202. package/dist/subagents/index.d.ts +0 -16
  203. package/dist/subagents/index.d.ts.map +0 -1
  204. package/dist/subagents/index.js +0 -231
  205. package/dist/terminal/index.d.ts +0 -9
  206. package/dist/terminal/index.d.ts.map +0 -1
  207. package/dist/terminal/index.js +0 -8
  208. package/dist/tools/agent.d.ts +0 -27
  209. package/dist/tools/agent.d.ts.map +0 -1
  210. package/dist/tools/agent.js +0 -81
  211. package/dist/tools/directory-tree.d.ts +0 -28
  212. package/dist/tools/directory-tree.d.ts.map +0 -1
  213. package/dist/tools/directory-tree.js +0 -154
  214. package/dist/tools/glob.d.ts +0 -35
  215. package/dist/tools/glob.d.ts.map +0 -1
  216. package/dist/tools/glob.js +0 -167
  217. package/dist/tools/grep.d.ts +0 -100
  218. package/dist/tools/grep.d.ts.map +0 -1
  219. package/dist/tools/grep.js +0 -608
  220. package/dist/tools/ls.d.ts +0 -26
  221. package/dist/tools/ls.d.ts.map +0 -1
  222. package/dist/tools/ls.js +0 -83
  223. package/dist/tui/components/header.d.ts +0 -21
  224. package/dist/tui/components/header.d.ts.map +0 -1
  225. package/dist/tui/components/header.js +0 -63
  226. package/dist/utils/bash/parse.d.ts +0 -19
  227. package/dist/utils/bash/parse.d.ts.map +0 -1
  228. package/dist/utils/bash/parse.js +0 -223
  229. package/dist/utils/bash/quote.d.ts +0 -6
  230. package/dist/utils/bash/quote.d.ts.map +0 -1
  231. package/dist/utils/bash/quote.js +0 -23
  232. package/dist/utils/generators.d.ts +0 -3
  233. package/dist/utils/generators.d.ts.map +0 -1
  234. package/dist/utils/generators.js +0 -25
  235. package/dist/utils/glob.d.ts +0 -52
  236. package/dist/utils/glob.d.ts.map +0 -1
  237. package/dist/utils/glob.js +0 -376
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ import { Agent } from "./agent/index.js";
9
9
  import { Cli } from "./cli/index.js";
10
10
  import { readStdinWithLimits } from "./cli/stdin.js";
11
11
  import { CommandManager } from "./commands/manager.js";
12
- import { config } from "./config/index.js";
12
+ import { config, parseSkillsPath, } from "./config/index.js";
13
13
  import { ModelManager } from "./models/manager.js";
14
14
  import { isSupportedModel } from "./models/providers.js";
15
15
  import { PromptManager } from "./prompts/manager.js";
@@ -221,7 +221,7 @@ async function determineInitialPrompt() {
221
221
  async function initializeModelManager(appDir) {
222
222
  const chosenModel = isSupportedModel(flags.model)
223
223
  ? flags.model
224
- : "opencode-go:glm-5-1"; // DEFAULT MODEL
224
+ : "opencode-go:deepseek-v4-flash"; // DEFAULT MODEL
225
225
  const projectConfig = await config.getConfig();
226
226
  const devtoolsEnabled = projectConfig.devtools?.enabled ?? false;
227
227
  const modelManager = new ModelManager({
@@ -235,7 +235,6 @@ async function initializeModelManager(appDir) {
235
235
  modelManager.setModel("tool-repair", "openai:gpt-5.4-mini");
236
236
  modelManager.setModel("conversation-analyzer", chosenModel);
237
237
  modelManager.setModel("init-project", chosenModel);
238
- modelManager.setModel("handoff-agent", chosenModel);
239
238
  return modelManager;
240
239
  }
241
240
  async function initializeSessionManager(sessionsDir, modelManager, tokenTracker) {
@@ -254,69 +253,74 @@ async function initializeSessionManager(sessionsDir, modelManager, tokenTracker)
254
253
  });
255
254
  return sessionManager;
256
255
  }
257
- async function handleConversationHistory(sessionManager, sessionsDir, _hasContinueOrResume, resumeSessionId) {
258
- if (flags.continue === true) {
256
+ export async function handleConversationHistory(sessionManager, sessionsDir, _hasContinueOrResume, resumeSessionId, continueFlag = flags.continue, resumeFlag = flags.resume, selectFn = select, setTitleFn = setTerminalTitle) {
257
+ if (continueFlag === true) {
258
+ await handleContinue(sessionManager, sessionsDir, selectFn, setTitleFn);
259
+ }
260
+ else if (resumeFlag === true) {
261
+ await handleResume(sessionManager, sessionsDir, resumeSessionId, setTitleFn);
262
+ }
263
+ }
264
+ async function handleContinue(sessionManager, sessionsDir, selectFn, setTitleFn) {
265
+ const histories = await SessionManager.load(sessionsDir, DEFAULT_HISTORY_LIMIT);
266
+ if (histories.length === 0) {
267
+ logger.info("No previous conversations found to continue.");
268
+ return;
269
+ }
270
+ try {
271
+ const choice = await selectFn({
272
+ message: "Select a conversation to resume:",
273
+ choices: histories.map((h, index) => ({
274
+ name: `${index + 1}: ${h.title} [${h.sessionId}] (${h.updatedAt.toLocaleString()})`,
275
+ value: index,
276
+ description: `${h.messages.length} messages`,
277
+ })),
278
+ });
279
+ const selectedHistory = histories.at(choice);
280
+ if (selectedHistory) {
281
+ sessionManager.restore(selectedHistory);
282
+ logger.info(`Resuming conversation: ${selectedHistory.title}`);
283
+ setTitleFn(selectedHistory.title || `acai: ${process.cwd()}`);
284
+ }
285
+ else {
286
+ logger.error("Selected history index out of bounds.");
287
+ }
288
+ }
289
+ catch (error) {
290
+ if (error instanceof Error &&
291
+ "isCanceled" in error &&
292
+ error.isCanceled === true) {
293
+ logger.info("Resume selection cancelled.");
294
+ }
295
+ else {
296
+ throw error;
297
+ }
298
+ }
299
+ }
300
+ async function handleResume(sessionManager, sessionsDir, resumeSessionId, setTitleFn) {
301
+ if (resumeSessionId) {
259
302
  const histories = await SessionManager.load(sessionsDir, DEFAULT_HISTORY_LIMIT);
260
- if (histories.length > 0) {
261
- try {
262
- const choice = await select({
263
- message: "Select a conversation to resume:",
264
- choices: histories.map((h, index) => ({
265
- name: `${index + 1}: ${h.title} [${h.sessionId}] (${h.updatedAt.toLocaleString()})`,
266
- value: index,
267
- description: `${h.messages.length} messages`,
268
- })),
269
- });
270
- const selectedHistory = histories.at(choice);
271
- if (selectedHistory) {
272
- sessionManager.restore(selectedHistory);
273
- logger.info(`Resuming conversation: ${selectedHistory.title}`);
274
- setTerminalTitle(selectedHistory.title || `acai: ${process.cwd()}`);
275
- }
276
- else {
277
- logger.error("Selected history index out of bounds.");
278
- }
279
- }
280
- catch (error) {
281
- if (error instanceof Error &&
282
- "isCanceled" in error &&
283
- error.isCanceled === true) {
284
- logger.info("Resume selection cancelled.");
285
- }
286
- else {
287
- throw error;
288
- }
289
- }
303
+ const targetHistory = histories.find((h) => h.sessionId === resumeSessionId);
304
+ if (targetHistory) {
305
+ sessionManager.restore(targetHistory);
306
+ logger.info(`Resuming conversation: ${targetHistory.title}`);
307
+ setTitleFn(targetHistory.title || `acai: ${process.cwd()}`);
290
308
  }
291
309
  else {
292
- logger.info("No previous conversations found to continue.");
310
+ console.error(`Session not found: ${resumeSessionId}`);
311
+ process.exit(1);
293
312
  }
294
313
  }
295
- else if (flags.resume === true) {
296
- if (resumeSessionId) {
297
- const histories = await SessionManager.load(sessionsDir, DEFAULT_HISTORY_LIMIT);
298
- const targetHistory = histories.find((h) => h.sessionId === resumeSessionId);
299
- if (targetHistory) {
300
- sessionManager.restore(targetHistory);
301
- logger.info(`Resuming conversation: ${targetHistory.title}`);
302
- setTerminalTitle(targetHistory.title || `acai: ${process.cwd()}`);
303
- }
304
- else {
305
- console.error(`Session not found: ${resumeSessionId}`);
306
- process.exit(1);
307
- }
314
+ else {
315
+ const histories = await SessionManager.load(sessionsDir, 1); // read the most recent session
316
+ const latestHistory = histories.at(0);
317
+ if (latestHistory) {
318
+ sessionManager.restore(latestHistory);
319
+ console.info(`Resuming conversation: ${latestHistory.title}`);
320
+ setTitleFn(latestHistory.title || `acai: ${process.cwd()}`);
308
321
  }
309
322
  else {
310
- const histories = await SessionManager.load(sessionsDir, 1); // read the most recent session
311
- const latestHistory = histories.at(0);
312
- if (latestHistory) {
313
- sessionManager.restore(latestHistory);
314
- console.info(`Resuming conversation: ${latestHistory.title}`);
315
- setTerminalTitle(latestHistory.title || `acai: ${process.cwd()}`);
316
- }
317
- else {
318
- logger.info("No previous conversation found to resume.");
319
- }
323
+ logger.info("No previous conversation found to resume.");
320
324
  }
321
325
  }
322
326
  }
@@ -353,7 +357,6 @@ function setupReplEventHandlers(repl, agent, sessionManager, noSession) {
353
357
  });
354
358
  repl.setExitCallback(async (_sessionId) => {
355
359
  if (!sessionManager.isEmpty()) {
356
- await repl.triggerRuleGeneration();
357
360
  writeExitSummary(sessionManager, noSession);
358
361
  }
359
362
  });
@@ -449,6 +452,26 @@ async function runReplMode(state, stdinWasPiped, noSession) {
449
452
  await handleStdinPrompt(state, agent, repl, tools, activeTools, systemPromptResult, noSession);
450
453
  await runInteractiveLoop(repl, agent, tools, activeTools, systemPromptResult, noSession, state.sessionManager, state.appConfig.loop.maxIterations);
451
454
  }
455
+ /**
456
+ * Expands a leading tilde in a path to the user's home directory.
457
+ * If the path does not start with ~, it is returned unchanged.
458
+ */
459
+ export function expandTildePath(dir) {
460
+ if (dir.startsWith("~/") || dir === "~") {
461
+ return path.join(os.homedir(), dir.slice(1));
462
+ }
463
+ return dir;
464
+ }
465
+ /**
466
+ * Resolves a path (expanding tilde if present) and adds it to a list
467
+ * of directories if it is not already present.
468
+ */
469
+ export function addUniqueDir(dir, dirs) {
470
+ const resolvedDir = path.resolve(expandTildePath(dir));
471
+ if (!dirs.includes(resolvedDir)) {
472
+ dirs.push(resolvedDir);
473
+ }
474
+ }
452
475
  async function main() {
453
476
  try {
454
477
  const appConfig = await config.ensureDefaultConfig("acai");
@@ -463,25 +486,20 @@ async function main() {
463
486
  const { initialPromptInput, stdinContent, hasContinueOrResume, resumeSessionId, } = await determineInitialPrompt();
464
487
  // Initialize application state
465
488
  const state = await initializeAppState(appConfig, initialPromptInput, stdinContent, hasContinueOrResume, resumeSessionId);
466
- // Add config-sourced allowed directories
467
- const configAllowedDirs = appConfig.allowedDirs ?? [];
468
- for (const dir of configAllowedDirs) {
469
- const expandedDir = dir.startsWith("~/") || dir === "~"
470
- ? path.join(os.homedir(), dir.slice(1))
471
- : dir;
472
- const resolvedDir = path.resolve(expandedDir);
473
- if (!workspace.allowedDirs.includes(resolvedDir)) {
474
- workspace.allowedDirs.push(resolvedDir);
475
- }
489
+ // Add config-sourced allowed directories (merged from app and project configs)
490
+ const mergedConfig = await config.getConfig();
491
+ for (const dir of mergedConfig.allowedDirs ?? []) {
492
+ addUniqueDir(dir, workspace.allowedDirs);
493
+ }
494
+ // Add configured skills paths to allowed directories so scripts within
495
+ // them can be executed by the Bash tool.
496
+ for (const resolvedDir of parseSkillsPath(mergedConfig.skills?.path ?? "")) {
497
+ addUniqueDir(resolvedDir, workspace.allowedDirs);
476
498
  }
477
499
  // Add logs directory to allowed directories if configured
478
- const logsPath = (await config.getConfig()).logs?.path;
500
+ const logsPath = mergedConfig.logs?.path;
479
501
  if (logsPath) {
480
- // Expand ~ to home directory before resolving
481
- const expandedLogsPath = logsPath.startsWith("~/") || logsPath === "~"
482
- ? path.join(os.homedir(), logsPath.slice(1))
483
- : logsPath;
484
- const logsDir = path.dirname(path.resolve(expandedLogsPath));
502
+ const logsDir = path.dirname(path.resolve(expandTildePath(logsPath)));
485
503
  if (!workspace.allowedDirs.includes(logsDir)) {
486
504
  workspace.allowedDirs.push(logsDir);
487
505
  }
@@ -1,16 +1,7 @@
1
1
  import EventEmitter from "node:events";
2
2
  import type { LanguageModelV3 } from "@ai-sdk/provider";
3
3
  import { type ModelMetadata, type ModelName } from "./providers.ts";
4
- export declare function getLanguageModel({ model, app, stateDir, devtoolsEnabled, }: {
5
- model: ModelName;
6
- app: string;
7
- stateDir: string;
8
- devtoolsEnabled?: boolean;
9
- }): LanguageModelV3;
10
- export declare function getModelMetadata({ model }: {
11
- model: ModelName;
12
- }): ModelMetadata<ModelName>;
13
- type App = "repl" | "cli" | "title-conversation" | "conversation-summarizer" | "conversation-analyzer" | "tool-repair" | "init-project" | "handoff-agent";
4
+ type App = "repl" | "cli" | "title-conversation" | "conversation-summarizer" | "conversation-analyzer" | "tool-repair" | "init-project";
14
5
  interface ModelManagerEvents {
15
6
  "set-model": [app: App, model: ModelName];
16
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../source/models/manager.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAC;AAEvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAOxD,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,SAAS,EAEf,MAAM,gBAAgB,CAAC;AAExB,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,GAAG,EACH,QAAQ,EACR,eAAuB,GACxB,EAAE;IACD,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,mBAiBA;AAED,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,4BAG/D;AAED,KAAK,GAAG,GACJ,MAAM,GACN,KAAK,GACL,oBAAoB,GACpB,yBAAyB,GACzB,uBAAuB,GACvB,aAAa,GACb,cAAc,GACd,eAAe,CAAC;AAEpB,UAAU,kBAAkB;IAC1B,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;CAC3C;AAED,qBAAa,YAAa,SAAQ,YAAY,CAAC,kBAAkB,CAAC;IAChE,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAAU;gBACrB,EACV,QAAQ,EACR,eAAuB,GACxB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;IAQlD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS;IAiBnC,QAAQ,CAAC,GAAG,EAAE,GAAG;IAQjB,gBAAgB,CAAC,GAAG,EAAE,GAAG;CAO1B"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../source/models/manager.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAC;AAEvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAOxD,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,SAAS,EAEf,MAAM,gBAAgB,CAAC;AAoCxB,KAAK,GAAG,GACJ,MAAM,GACN,KAAK,GACL,oBAAoB,GACpB,yBAAyB,GACzB,uBAAuB,GACvB,aAAa,GACb,cAAc,CAAC;AAEnB,UAAU,kBAAkB;IAC1B,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;CAC3C;AAED,qBAAa,YAAa,SAAQ,YAAY,CAAC,kBAAkB,CAAC;IAChE,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAAU;gBACrB,EACV,QAAQ,EACR,eAAuB,GACxB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;IAQlD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS;IAiBnC,QAAQ,CAAC,GAAG,EAAE,GAAG;IAQjB,gBAAgB,CAAC,GAAG,EAAE,GAAG;CAO1B"}
@@ -3,7 +3,7 @@ import { devToolsMiddleware } from "@ai-sdk/devtools";
3
3
  import { wrapLanguageModel } from "ai";
4
4
  import { auditMessage, cacheMiddleware, createRateLimitMiddleware, } from "../middleware/index.js";
5
5
  import { languageModel, modelRegistry, } from "./providers.js";
6
- export function getLanguageModel({ model, app, stateDir, devtoolsEnabled = false, }) {
6
+ function getLanguageModel({ model, app, stateDir, devtoolsEnabled = false, }) {
7
7
  const middleware = [
8
8
  cacheMiddleware,
9
9
  createRateLimitMiddleware({ requestsPerMinute: 30 }),
@@ -18,7 +18,7 @@ export function getLanguageModel({ model, app, stateDir, devtoolsEnabled = false
18
18
  });
19
19
  return langModel;
20
20
  }
21
- export function getModelMetadata({ model }) {
21
+ function getModelMetadata({ model }) {
22
22
  const modelMetadata = modelRegistry[model];
23
23
  return modelMetadata;
24
24
  }
@@ -10,16 +10,16 @@ declare const opencodeGoModels: {
10
10
  readonly "minimax-m2-7": import("@ai-sdk/provider").LanguageModelV3;
11
11
  readonly "mimo-v2-5": import("@ai-sdk/provider").LanguageModelV3;
12
12
  readonly "mimo-v2-5-pro": import("@ai-sdk/provider").LanguageModelV3;
13
- readonly "mimo-v2-pro": import("@ai-sdk/provider").LanguageModelV3;
14
- readonly "mimo-v2-omni": import("@ai-sdk/provider").LanguageModelV3;
13
+ readonly "minimax-m3": import("@ai-sdk/provider").LanguageModelV3;
15
14
  readonly "qwen3.6-plus": import("@ai-sdk/provider").LanguageModelV3;
16
- readonly "qwen3.5-plus": import("@ai-sdk/provider").LanguageModelV3;
15
+ readonly "qwen3.7-plus": import("@ai-sdk/provider").LanguageModelV3;
16
+ readonly "qwen3.7-max": import("@ai-sdk/provider").LanguageModelV3;
17
17
  };
18
18
  type ModelName = `opencode-go:${keyof typeof opencodeGoModels}`;
19
19
  export declare const opencodeGoModelNames: ModelName[];
20
20
  export declare const opencodeGoProvider: {
21
21
  "opencode-go": import("@ai-sdk/provider").ProviderV3 & {
22
- languageModel(modelId: "deepseek-v4-flash" | "deepseek-v4-pro" | "glm-5" | "mimo-v2-pro" | "mimo-v2-omni" | "qwen3.6-plus" | "qwen3.5-plus" | "glm-5-1" | "kimi-k2-5" | "kimi-k2-6" | "minimax-m2-5" | "minimax-m2-7" | "mimo-v2-5" | "mimo-v2-5-pro"): import("@ai-sdk/provider").LanguageModelV3;
22
+ languageModel(modelId: "deepseek-v4-flash" | "deepseek-v4-pro" | "glm-5" | "minimax-m3" | "qwen3.6-plus" | "qwen3.7-plus" | "qwen3.7-max" | "glm-5-1" | "kimi-k2-5" | "kimi-k2-6" | "minimax-m2-5" | "minimax-m2-7" | "mimo-v2-5" | "mimo-v2-5-pro"): import("@ai-sdk/provider").LanguageModelV3;
23
23
  embeddingModel(modelId: string): import("@ai-sdk/provider").EmbeddingModelV3;
24
24
  imageModel(modelId: string): import("@ai-sdk/provider").ImageModelV3;
25
25
  transcriptionModel(modelId: string): import("@ai-sdk/provider").TranscriptionModelV3;
@@ -1 +1 @@
1
- {"version":3,"file":"opencode-go-provider.d.ts","sourceRoot":"","sources":["../../source/models/opencode-go-provider.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAqBpD,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;CAeZ,CAAC;AAEX,KAAK,SAAS,GAAG,eAAe,MAAM,OAAO,gBAAgB,EAAE,CAAC;AAEhE,eAAO,MAAM,oBAAoB,EAAE,SAAS,EAEC,CAAC;AAE9C,eAAO,MAAM,kBAAkB;;;;;;;;;;CAK9B,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE;KACnC,CAAC,IAAI,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;CA0K3C,CAAC"}
1
+ {"version":3,"file":"opencode-go-provider.d.ts","sourceRoot":"","sources":["../../source/models/opencode-go-provider.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAepD,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;CAeZ,CAAC;AAEX,KAAK,SAAS,GAAG,eAAe,MAAM,OAAO,gBAAgB,EAAE,CAAC;AAEhE,eAAO,MAAM,oBAAoB,EAAE,SAAS,EAEC,CAAC;AAE9C,eAAO,MAAM,kBAAkB;;;;;;;;;;CAK9B,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE;KACnC,CAAC,IAAI,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;CA0K3C,CAAC"}
@@ -1,4 +1,3 @@
1
- import { createAlibaba } from "@ai-sdk/alibaba";
2
1
  import { createAnthropic } from "@ai-sdk/anthropic";
3
2
  import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
4
3
  import { objectKeys } from "@travisennis/stdlib/object";
@@ -14,11 +13,6 @@ const messagesClient = createAnthropic({
14
13
  baseURL: "https://opencode.ai/zen/go/v1",
15
14
  apiKey: process.env["OPENCODE_ZEN_API_TOKEN"] ?? "",
16
15
  });
17
- const alibabaClient = createAlibaba({
18
- apiKey: process.env["OPENCODE_ZEN_API_TOKEN"] ?? "",
19
- // biome-ignore lint/style/useNamingConvention: third-party controlled
20
- baseURL: "https://opencode.ai/zen/go/v1",
21
- });
22
16
  const opencodeGoModels = {
23
17
  "deepseek-v4-flash": completionsClient("deepseek-v4-flash"),
24
18
  "deepseek-v4-pro": completionsClient("deepseek-v4-pro"),
@@ -30,10 +24,10 @@ const opencodeGoModels = {
30
24
  "minimax-m2-7": messagesClient("minimax-m2.7"),
31
25
  "mimo-v2-5": completionsClient("mimo-v2.5"),
32
26
  "mimo-v2-5-pro": completionsClient("mimo-v2.5-pro"),
33
- "mimo-v2-pro": completionsClient("mimo-v2-pro"),
34
- "mimo-v2-omni": completionsClient("mimo-v2-omni"),
35
- "qwen3.6-plus": alibabaClient("qwen3.6-plus"),
36
- "qwen3.5-plus": alibabaClient("qwen3.5-plus"),
27
+ "minimax-m3": messagesClient("minimax-m3"),
28
+ "qwen3.6-plus": messagesClient("qwen3.6-plus"),
29
+ "qwen3.7-plus": messagesClient("qwen3.7-plus"),
30
+ "qwen3.7-max": messagesClient("qwen3.7-max"),
37
31
  };
38
32
  export const opencodeGoModelNames = objectKeys(opencodeGoModels).map((key) => `opencode-go:${key}`);
39
33
  export const opencodeGoProvider = {
@@ -112,8 +106,8 @@ export const opencodeGoModelRegistry = {
112
106
  promptFormat: "markdown",
113
107
  supportsReasoning: true,
114
108
  supportsToolCalling: true,
115
- costPerInputToken: 7.448e-7,
116
- costPerOutputToken: 0.000004655,
109
+ costPerInputToken: 0.00000095,
110
+ costPerOutputToken: 0.000004,
117
111
  },
118
112
  "opencode-go:minimax-m2-5": {
119
113
  id: "opencode-go:minimax-m2-5",
@@ -148,8 +142,8 @@ export const opencodeGoModelRegistry = {
148
142
  promptFormat: "markdown",
149
143
  supportsReasoning: true,
150
144
  supportsToolCalling: true,
151
- costPerInputToken: 0.0000004,
152
- costPerOutputToken: 0.000002,
145
+ costPerInputToken: 0.00000014,
146
+ costPerOutputToken: 0.00000028,
153
147
  },
154
148
  "opencode-go:mimo-v2-5-pro": {
155
149
  id: "opencode-go:mimo-v2-5-pro",
@@ -160,35 +154,35 @@ export const opencodeGoModelRegistry = {
160
154
  promptFormat: "markdown",
161
155
  supportsReasoning: true,
162
156
  supportsToolCalling: true,
163
- costPerInputToken: 0.000001,
164
- costPerOutputToken: 0.000003,
157
+ costPerInputToken: 0.00000174,
158
+ costPerOutputToken: 0.00000348,
165
159
  },
166
- "opencode-go:mimo-v2-pro": {
167
- id: "opencode-go:mimo-v2-pro",
160
+ "opencode-go:minimax-m3": {
161
+ id: "opencode-go:minimax-m3",
168
162
  provider: "opencode-go",
169
- contextWindow: 1048576,
163
+ contextWindow: 204800,
170
164
  maxOutputTokens: 131072,
171
- defaultTemperature: 1.0,
165
+ defaultTemperature: 0.5,
172
166
  promptFormat: "markdown",
173
167
  supportsReasoning: true,
174
168
  supportsToolCalling: true,
175
- costPerInputToken: 0.000001,
176
- costPerOutputToken: 0.000003,
169
+ costPerInputToken: 6e-7,
170
+ costPerOutputToken: 0.0000024,
177
171
  },
178
- "opencode-go:mimo-v2-omni": {
179
- id: "opencode-go:mimo-v2-omni",
172
+ "opencode-go:qwen3.6-plus": {
173
+ id: "opencode-go:qwen3.6-plus",
180
174
  provider: "opencode-go",
181
- contextWindow: 262144,
175
+ contextWindow: 1000000,
182
176
  maxOutputTokens: 65536,
183
177
  defaultTemperature: 1.0,
184
178
  promptFormat: "markdown",
185
179
  supportsReasoning: true,
186
180
  supportsToolCalling: true,
187
- costPerInputToken: 4e-7,
188
- costPerOutputToken: 0.000002,
181
+ costPerInputToken: 0.0000005,
182
+ costPerOutputToken: 0.000003,
189
183
  },
190
- "opencode-go:qwen3.6-plus": {
191
- id: "opencode-go:qwen3.6-plus",
184
+ "opencode-go:qwen3.7-plus": {
185
+ id: "opencode-go:qwen3.7-plus",
192
186
  provider: "opencode-go",
193
187
  contextWindow: 1000000,
194
188
  maxOutputTokens: 65536,
@@ -196,11 +190,11 @@ export const opencodeGoModelRegistry = {
196
190
  promptFormat: "markdown",
197
191
  supportsReasoning: true,
198
192
  supportsToolCalling: true,
199
- costPerInputToken: 3.25e-7,
200
- costPerOutputToken: 0.00000195,
193
+ costPerInputToken: 0.0000004,
194
+ costPerOutputToken: 0.0000016,
201
195
  },
202
- "opencode-go:qwen3.5-plus": {
203
- id: "opencode-go:qwen3.5-plus",
196
+ "opencode-go:qwen3.7-max": {
197
+ id: "opencode-go:qwen3.7-max",
204
198
  provider: "opencode-go",
205
199
  contextWindow: 1000000,
206
200
  maxOutputTokens: 65536,
@@ -208,7 +202,7 @@ export const opencodeGoModelRegistry = {
208
202
  promptFormat: "markdown",
209
203
  supportsReasoning: true,
210
204
  supportsToolCalling: true,
211
- costPerInputToken: 2.6e-7,
212
- costPerOutputToken: 0.00000156,
205
+ costPerInputToken: 0.0000025,
206
+ costPerOutputToken: 0.0000075,
213
207
  },
214
208
  };
@@ -1,6 +1,6 @@
1
1
  declare const providers: readonly ["anthropic", "openai", "google", "groq", "deepseek", "openrouter", "xai", "opencode", "opencode-go"];
2
2
  type ModelProvider = (typeof providers)[number];
3
- export declare const models: readonly ("anthropic:haiku" | "anthropic:opus" | "anthropic:sonnet" | "deepseek:deepseek-v4-flash" | "deepseek:deepseek-v4-pro" | "openai:gpt-5.1-codex-mini" | "openai:gpt-5.2" | "openai:gpt-5.2-codex" | "opencode-go:deepseek-v4-flash" | "opencode-go:deepseek-v4-pro" | "opencode-go:glm-5" | "opencode-go:mimo-v2-pro" | "opencode-go:mimo-v2-omni" | "opencode-go:qwen3.6-plus" | "opencode-go:qwen3.5-plus" | "opencode-go:glm-5-1" | "opencode-go:kimi-k2-5" | "opencode-go:kimi-k2-6" | "opencode-go:minimax-m2-5" | "opencode-go:minimax-m2-7" | "opencode-go:mimo-v2-5" | "opencode-go:mimo-v2-5-pro" | "opencode:glm-5" | "opencode:minimax-m2.5" | "opencode:minimax-m2.7" | "opencode:glm-5-1" | "opencode:kimi-k2-5" | "opencode:kimi-k2-6" | "opencode:opus-4-6" | "openrouter:glm-5" | "openrouter:glm-5-1" | "openrouter:kimi-k2-5" | "openrouter:kimi-k2-6" | "openrouter:minimax-m2-5" | "openrouter:minimax-m2-7" | "openrouter:gpt-oss-120b" | "openrouter:gpt-5-3-codex" | "openrouter:sonnet-4.5" | "openrouter:opus-4.6" | "openrouter:owl-alpha" | "openrouter:haiku-4.5" | "xai:grok-4-1-fast")[];
3
+ export declare const models: readonly ("anthropic:haiku" | "anthropic:opus" | "anthropic:sonnet" | "deepseek:deepseek-v4-flash" | "deepseek:deepseek-v4-pro" | "openai:gpt-5.1-codex-mini" | "openai:gpt-5.2" | "openai:gpt-5.2-codex" | "opencode-go:deepseek-v4-flash" | "opencode-go:deepseek-v4-pro" | "opencode-go:glm-5" | "opencode-go:minimax-m3" | "opencode-go:qwen3.6-plus" | "opencode-go:qwen3.7-plus" | "opencode-go:qwen3.7-max" | "opencode-go:glm-5-1" | "opencode-go:kimi-k2-5" | "opencode-go:kimi-k2-6" | "opencode-go:minimax-m2-5" | "opencode-go:minimax-m2-7" | "opencode-go:mimo-v2-5" | "opencode-go:mimo-v2-5-pro" | "opencode:glm-5" | "opencode:minimax-m2.5" | "opencode:minimax-m2.7" | "opencode:glm-5-1" | "opencode:kimi-k2-5" | "opencode:kimi-k2-6" | "opencode:opus-4-6" | "openrouter:glm-5" | "openrouter:glm-5-1" | "openrouter:kimi-k2-5" | "openrouter:kimi-k2-6" | "openrouter:minimax-m2-5" | "openrouter:minimax-m2-7" | "openrouter:gpt-oss-120b" | "openrouter:gpt-5-3-codex" | "openrouter:sonnet-4.5" | "openrouter:opus-4.6" | "openrouter:owl-alpha" | "openrouter:haiku-4.5" | "xai:grok-4-1-fast")[];
4
4
  export type ModelName = (typeof models)[number] | (`xai:${string}` & {}) | (`openai:${string}` & {}) | (`anthropic:${string}` & {}) | (`google:${string}` & {}) | (`groq:${string}` & {}) | (`deepseek:${string}` & {}) | (`openrouter:${string}` & {}) | (`opencode-go:${string}` & {}) | (`opencode:${string}` & {});
5
5
  export declare function isSupportedModel(model: unknown): model is ModelName;
6
6
  export declare function languageModel(model: ModelName): import("@ai-sdk/provider").LanguageModelV3;
@@ -1 +1 @@
1
- {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../source/models/providers.ts"],"names":[],"mappings":"AAgDA,QAAA,MAAM,SAAS,gHAUL,CAAC;AAEX,KAAK,aAAa,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAchD,eAAO,MAAM,MAAM,gkCAUT,CAAC;AAEX,MAAM,MAAM,SAAS,GACjB,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,GACvB,CAAC,OAAO,MAAM,EAAE,GAAG,EAAE,CAAC,GACtB,CAAC,UAAU,MAAM,EAAE,GAAG,EAAE,CAAC,GACzB,CAAC,aAAa,MAAM,EAAE,GAAG,EAAE,CAAC,GAC5B,CAAC,UAAU,MAAM,EAAE,GAAG,EAAE,CAAC,GACzB,CAAC,QAAQ,MAAM,EAAE,GAAG,EAAE,CAAC,GACvB,CAAC,YAAY,MAAM,EAAE,GAAG,EAAE,CAAC,GAC3B,CAAC,cAAc,MAAM,EAAE,GAAG,EAAE,CAAC,GAC7B,CAAC,eAAe,MAAM,EAAE,GAAG,EAAE,CAAC,GAC9B,CAAC,YAAY,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AAEhC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAcnE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,8CAE7C;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,SAAS;IAC1C,EAAE,EAAE,CAAC,CAAC;IACN,QAAQ,EAAE,aAAa,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,KAAK,GAAG,UAAU,GAAG,SAAS,CAAC;CAC9C;AAGD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,aAAa,CAU1D,CAAC;AAGF,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,IAAI,SAAS,CAEtE"}
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../source/models/providers.ts"],"names":[],"mappings":"AAgDA,QAAA,MAAM,SAAS,gHAUL,CAAC;AAEX,KAAK,aAAa,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAchD,eAAO,MAAM,MAAM,8jCAUT,CAAC;AAEX,MAAM,MAAM,SAAS,GACjB,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,GACvB,CAAC,OAAO,MAAM,EAAE,GAAG,EAAE,CAAC,GACtB,CAAC,UAAU,MAAM,EAAE,GAAG,EAAE,CAAC,GACzB,CAAC,aAAa,MAAM,EAAE,GAAG,EAAE,CAAC,GAC5B,CAAC,UAAU,MAAM,EAAE,GAAG,EAAE,CAAC,GACzB,CAAC,QAAQ,MAAM,EAAE,GAAG,EAAE,CAAC,GACvB,CAAC,YAAY,MAAM,EAAE,GAAG,EAAE,CAAC,GAC3B,CAAC,cAAc,MAAM,EAAE,GAAG,EAAE,CAAC,GAC7B,CAAC,eAAe,MAAM,EAAE,GAAG,EAAE,CAAC,GAC9B,CAAC,YAAY,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AAEhC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAcnE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,8CAE7C;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,SAAS;IAC1C,EAAE,EAAE,CAAC,CAAC;IACN,QAAQ,EAAE,aAAa,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,KAAK,GAAG,UAAU,GAAG,SAAS,CAAC;CAC9C;AAGD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,aAAa,CAU1D,CAAC;AAGF,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,IAAI,SAAS,CAEtE"}
@@ -6,9 +6,7 @@ type SystemPromptComponents = {
6
6
  cwdAgentsMd: string;
7
7
  learnedRules: string;
8
8
  skills: string;
9
- subagents: string;
10
9
  };
11
- export declare function environmentInfo(currentWorkingDir: string, allowedDirs: string[], logsPath?: string): Promise<string>;
12
10
  type SystemPromptOptions = {
13
11
  currentWorkingDir?: string;
14
12
  allowedDirs?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../source/prompts/system-prompt.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAI3D,KAAK,sBAAsB,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AA8CF,wBAAsB,eAAe,CACnC,iBAAiB,EAAE,MAAM,EACzB,WAAW,EAAE,MAAM,EAAE,EACrB,QAAQ,CAAC,EAAE,MAAM,mBA+BlB;AAED,KAAK,mBAAmB,GAAG;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,sBAAsB,CAAC;CACpC,CAAC;AAKF,wBAAsB,YAAY,CAChC,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAkL7B"}
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../source/prompts/system-prompt.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAI3D,KAAK,sBAAsB,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAkFF,KAAK,mBAAmB,GAAG;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,sBAAsB,CAAC;CACpC,CAAC;AAKF,wBAAsB,YAAY,CAChC,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CA8K7B"}
@@ -1,8 +1,7 @@
1
1
  import { platform } from "node:os";
2
2
  import { config, parseSkillsPath } from "../config/index.js";
3
3
  import { formatSkillsForPrompt, loadSkills } from "../skills/index.js";
4
- import { formatSubagentsForPrompt, loadSubagents } from "../subagents/index.js";
5
- import { getShell } from "../terminal/index.js";
4
+ import { getShell } from "../terminal/control.js";
6
5
  import { dedent } from "../utils/dedent.js";
7
6
  import { getCurrentBranch, inGitDirectory } from "../utils/git.js";
8
7
  async function getProjectContext() {
@@ -41,7 +40,7 @@ async function getProjectContext() {
41
40
  learnedRules: learnedRules,
42
41
  };
43
42
  }
44
- export async function environmentInfo(currentWorkingDir, allowedDirs, logsPath) {
43
+ async function environmentInfo(currentWorkingDir, allowedDirs, logsPath) {
45
44
  const gitDirectory = await inGitDirectory();
46
45
  let gitSection = `- **Is directory a git repo**: ${gitDirectory ? "Yes" : "No"}`;
47
46
  if (gitDirectory) {
@@ -92,8 +91,6 @@ export async function systemPrompt(options) {
92
91
  const skills = await loadSkills(skillPaths);
93
92
  skillsText = formatSkillsForPrompt(skills.getModelInvocable());
94
93
  }
95
- const subagents = await loadSubagents();
96
- const subagentsText = formatSubagentsForPrompt(subagents);
97
94
  const corePrompt = minimalPrompt
98
95
  ? "You are acai. You are running as a coding agent in a CLI on the user's computer."
99
96
  : dedent `
@@ -179,9 +176,9 @@ You are producing plain text that will later be styled by the CLI. Follow these
179
176
  </tool_calling>
180
177
 
181
178
  <context_understanding>
182
- Grep search (grep and ripgrep) is your MAIN exploration tool.
179
+ Use Bash to run \`rg\` (ripgrep) and \`find\` for code exploration.
183
180
  - CRITICAL: Start with a broad set of queries that capture keywords based on the USER's request and provided context.
184
- - MANDATORY: Run multiple Grep searches in parallel with different patterns and variations; exact matches often miss related code.
181
+ - MANDATORY: Run multiple searches in parallel with different patterns and variations; exact matches often miss related code.
185
182
  - Keep searching new areas until you're CONFIDENT nothing important remains.
186
183
  - When you have found some relevant code, narrow your search and read the most likely important files.
187
184
  If you've performed an edit that may partially fulfill the USER's query, but you're not confident, gather more information or use more tools before ending your turn.
@@ -196,7 +193,7 @@ When gathering information about a topic, plan your searches upfront in your thi
196
193
  - Searching for different patterns (imports, usage, definitions) should happen in parallel
197
194
  - Multiple grep searches with different regex patterns should run simultaneously
198
195
  - Reading multiple files or searching different directories can be done all at once
199
- - Combining Glob with Grep for comprehensive results
196
+ - Combining \`find\` with \`rg\` for comprehensive results
200
197
  - Any information gathering where you know upfront what you're looking for
201
198
 
202
199
  And you should use parallel tool calls in many more cases beyond those listed above.
@@ -228,9 +225,8 @@ DEFAULT TO PARALLEL: Unless you have a specific reason why operations MUST be se
228
225
  cwdAgentsMd: projectContextResult.cwdAgentsMd,
229
226
  learnedRules: projectContextResult.learnedRules,
230
227
  skills: skillsText,
231
- subagents: subagentsText,
232
228
  };
233
- const assembledPrompt = `${corePrompt}\n${projectContextText}\n\n${environmentInfoText}${skillsText}\n\n${subagentsText}`;
229
+ const assembledPrompt = `${corePrompt}\n${projectContextText}\n\n${environmentInfoText}${skillsText}`;
234
230
  const result = { prompt: assembledPrompt, components };
235
231
  return result;
236
232
  }
@@ -68,7 +68,6 @@ export declare class Repl {
68
68
  private allThinkingBlocks;
69
69
  private allToolExecutions;
70
70
  private verboseMode;
71
- private config;
72
71
  /** Creates a new Repl instance, initializing the TUI layout and components. */
73
72
  constructor(options: ReplOptions);
74
73
  /**
@@ -82,6 +81,16 @@ export declare class Repl {
82
81
  * and agent lifecycle transitions (start, stop, error).
83
82
  */
84
83
  handle(event: AgentEvent, state: AgentState): Promise<void>;
84
+ private handleAgentStart;
85
+ private handleMessageStart;
86
+ private handleMessage;
87
+ private handleMessageEnd;
88
+ private handleToolCallLifecycle;
89
+ private handleAgentStop;
90
+ private handleAgentError;
91
+ private handleThinkingStart;
92
+ private handleThinking;
93
+ private handleThinkingEnd;
85
94
  /** Adds a user message component to the chat container. */
86
95
  private addMessageToChat;
87
96
  /**
@@ -112,6 +121,23 @@ export declare class Repl {
112
121
  * responses, and tool executions.
113
122
  */
114
123
  private reconstructSession;
124
+ /**
125
+ * Collects all tool results from tool-role messages into a map
126
+ * keyed by tool call ID.
127
+ */
128
+ private collectToolResults;
129
+ /**
130
+ * Extracts the output value string from a tool result's output field.
131
+ */
132
+ private extractToolOutputValue;
133
+ /**
134
+ * Renders a user message into the chat container.
135
+ */
136
+ private renderUserMessageFromSession;
137
+ /**
138
+ * Renders tool call execution components for an assistant message.
139
+ */
140
+ private renderToolCallsForAssistantMessage;
115
141
  /**
116
142
  * Extracts the text content from a user message,
117
143
  * handling both string and array content formats.
@@ -158,16 +184,6 @@ export declare class Repl {
158
184
  * and the TUI. Optionally triggers the exit callback.
159
185
  */
160
186
  stop(showExitMessage?: boolean): void;
161
- /**
162
- * Generates rules automatically if autoGenerateRules is enabled
163
- * and the session has messages.
164
- */
165
- private maybeGenerateRules;
166
- /**
167
- * Triggers rule generation for use before exit.
168
- * Returns a promise that resolves when rules are generated.
169
- */
170
- triggerRuleGeneration(): Promise<void>;
171
187
  }
172
188
  export {};
173
189
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/repl/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/repl/index.ts"],"names":[],"mappings":"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"}