@travisennis/acai 0.0.9 → 0.0.11

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 (403) hide show
  1. package/README.md +51 -760
  2. package/bin/acai +52 -0
  3. package/dist/agent/index.d.ts +12 -2
  4. package/dist/agent/index.d.ts.map +1 -1
  5. package/dist/agent/index.js +380 -199
  6. package/dist/agent/sub-agent.d.ts +23 -0
  7. package/dist/agent/sub-agent.d.ts.map +1 -0
  8. package/dist/agent/sub-agent.js +109 -0
  9. package/dist/cli/index.d.ts +26 -0
  10. package/dist/cli/index.d.ts.map +1 -0
  11. package/dist/{cli.js → cli/index.js} +84 -77
  12. package/dist/{stdin.d.ts → cli/stdin.d.ts} +2 -1
  13. package/dist/cli/stdin.d.ts.map +1 -0
  14. package/dist/{stdin.js → cli/stdin.js} +11 -0
  15. package/dist/commands/copy/index.js +2 -2
  16. package/dist/commands/copy/utils.d.ts.map +1 -1
  17. package/dist/commands/copy/utils.js +15 -13
  18. package/dist/commands/generate-rules/index.d.ts +1 -1
  19. package/dist/commands/generate-rules/index.d.ts.map +1 -1
  20. package/dist/commands/generate-rules/index.js +16 -101
  21. package/dist/commands/generate-rules/service.d.ts +22 -0
  22. package/dist/commands/generate-rules/service.d.ts.map +1 -0
  23. package/dist/commands/generate-rules/service.js +103 -0
  24. package/dist/commands/handoff/index.js +2 -2
  25. package/dist/commands/health/index.js +1 -1
  26. package/dist/commands/health/utils.d.ts +3 -2
  27. package/dist/commands/health/utils.d.ts.map +1 -1
  28. package/dist/commands/health/utils.js +6 -0
  29. package/dist/commands/history/index.d.ts +1 -1
  30. package/dist/commands/history/index.d.ts.map +1 -1
  31. package/dist/commands/history/index.js +17 -18
  32. package/dist/commands/history/types.d.ts +38 -0
  33. package/dist/commands/history/types.d.ts.map +1 -1
  34. package/dist/commands/history/utils.d.ts.map +1 -1
  35. package/dist/commands/history/utils.js +63 -58
  36. package/dist/commands/init/index.d.ts.map +1 -1
  37. package/dist/commands/init/index.js +3 -8
  38. package/dist/commands/init-project/index.d.ts.map +1 -1
  39. package/dist/commands/init-project/index.js +3 -3
  40. package/dist/commands/init-project/utils.d.ts +2 -1
  41. package/dist/commands/init-project/utils.d.ts.map +1 -1
  42. package/dist/commands/init-project/utils.js +10 -2
  43. package/dist/commands/list-tools/index.d.ts.map +1 -1
  44. package/dist/commands/list-tools/index.js +7 -31
  45. package/dist/commands/manager.d.ts +2 -2
  46. package/dist/commands/manager.d.ts.map +1 -1
  47. package/dist/commands/manager.js +55 -33
  48. package/dist/commands/model/index.d.ts.map +1 -1
  49. package/dist/commands/model/index.js +20 -151
  50. package/dist/commands/model/model-panel.d.ts +4 -0
  51. package/dist/commands/model/model-panel.d.ts.map +1 -0
  52. package/dist/commands/model/model-panel.js +144 -0
  53. package/dist/commands/paste/index.d.ts.map +1 -1
  54. package/dist/commands/paste/index.js +59 -62
  55. package/dist/commands/paste/utils.d.ts.map +1 -1
  56. package/dist/commands/paste/utils.js +88 -58
  57. package/dist/commands/pickup/index.d.ts.map +1 -1
  58. package/dist/commands/pickup/index.js +6 -3
  59. package/dist/commands/pickup/utils.js +3 -3
  60. package/dist/commands/resources/index.d.ts.map +1 -1
  61. package/dist/commands/resources/index.js +33 -50
  62. package/dist/commands/review/index.d.ts.map +1 -1
  63. package/dist/commands/review/index.js +3 -117
  64. package/dist/commands/review/review-panel.d.ts +3 -0
  65. package/dist/commands/review/review-panel.d.ts.map +1 -0
  66. package/dist/commands/review/review-panel.js +186 -0
  67. package/dist/commands/review/utils.d.ts +15 -1
  68. package/dist/commands/review/utils.d.ts.map +1 -1
  69. package/dist/commands/review/utils.js +127 -68
  70. package/dist/commands/session/index.d.ts +1 -1
  71. package/dist/commands/session/index.d.ts.map +1 -1
  72. package/dist/commands/session/index.js +124 -135
  73. package/dist/commands/shell/index.d.ts.map +1 -1
  74. package/dist/commands/shell/index.js +16 -1
  75. package/dist/commands/types.d.ts +2 -2
  76. package/dist/commands/types.d.ts.map +1 -1
  77. package/dist/{config.d.ts → config/index.d.ts} +20 -9
  78. package/dist/config/index.d.ts.map +1 -0
  79. package/dist/{config.js → config/index.js} +43 -42
  80. package/dist/execution/index.d.ts.map +1 -1
  81. package/dist/execution/index.js +75 -55
  82. package/dist/index.d.ts +1 -0
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +148 -141
  85. package/dist/middleware/cache.d.ts.map +1 -1
  86. package/dist/middleware/cache.js +18 -36
  87. package/dist/models/ai-config.d.ts +1 -0
  88. package/dist/models/ai-config.d.ts.map +1 -1
  89. package/dist/models/ai-config.js +4 -3
  90. package/dist/models/anthropic-provider.d.ts +2 -5
  91. package/dist/models/anthropic-provider.d.ts.map +1 -1
  92. package/dist/models/anthropic-provider.js +3 -70
  93. package/dist/models/deepseek-provider.d.ts +1 -0
  94. package/dist/models/deepseek-provider.d.ts.map +1 -1
  95. package/dist/models/google-provider.d.ts +2 -3
  96. package/dist/models/google-provider.d.ts.map +1 -1
  97. package/dist/models/google-provider.js +0 -26
  98. package/dist/models/groq-provider.d.ts +1 -0
  99. package/dist/models/groq-provider.d.ts.map +1 -1
  100. package/dist/models/manager.d.ts +13 -2
  101. package/dist/models/manager.d.ts.map +1 -1
  102. package/dist/models/manager.js +20 -8
  103. package/dist/models/openai-provider.d.ts +2 -5
  104. package/dist/models/openai-provider.d.ts.map +1 -1
  105. package/dist/models/openai-provider.js +0 -52
  106. package/dist/models/opencode-go-provider.d.ts +25 -0
  107. package/dist/models/opencode-go-provider.d.ts.map +1 -0
  108. package/dist/models/opencode-go-provider.js +78 -0
  109. package/dist/models/opencode-zen-provider.d.ts +7 -3
  110. package/dist/models/opencode-zen-provider.d.ts.map +1 -1
  111. package/dist/models/opencode-zen-provider.js +49 -10
  112. package/dist/models/openrouter-provider.d.ts +27 -31
  113. package/dist/models/openrouter-provider.d.ts.map +1 -1
  114. package/dist/models/openrouter-provider.js +121 -180
  115. package/dist/models/providers.d.ts +3 -3
  116. package/dist/models/providers.d.ts.map +1 -1
  117. package/dist/models/providers.js +6 -0
  118. package/dist/models/xai-provider.d.ts +4 -3
  119. package/dist/models/xai-provider.d.ts.map +1 -1
  120. package/dist/models/xai-provider.js +18 -18
  121. package/dist/modes/manager.d.ts +24 -0
  122. package/dist/modes/manager.d.ts.map +1 -0
  123. package/dist/modes/manager.js +77 -0
  124. package/dist/modes/prompts.d.ts +2 -0
  125. package/dist/modes/prompts.d.ts.map +1 -0
  126. package/dist/modes/prompts.js +142 -0
  127. package/dist/prompts/mentions.d.ts +11 -0
  128. package/dist/prompts/mentions.d.ts.map +1 -0
  129. package/dist/{mentions.js → prompts/mentions.js} +55 -85
  130. package/dist/{prompts.d.ts → prompts/system-prompt.d.ts} +7 -2
  131. package/dist/prompts/system-prompt.d.ts.map +1 -0
  132. package/dist/{prompts.js → prompts/system-prompt.js} +31 -16
  133. package/dist/repl/index.d.ts +174 -0
  134. package/dist/repl/index.d.ts.map +1 -0
  135. package/dist/{repl-new.js → repl/index.js} +397 -76
  136. package/dist/repl/project-status.d.ts +1 -0
  137. package/dist/repl/project-status.d.ts.map +1 -1
  138. package/dist/repl/project-status.js +4 -1
  139. package/dist/sessions/manager.d.ts +92 -0
  140. package/dist/sessions/manager.d.ts.map +1 -1
  141. package/dist/sessions/manager.js +262 -9
  142. package/dist/sessions/summary.d.ts +4 -0
  143. package/dist/sessions/summary.d.ts.map +1 -0
  144. package/dist/sessions/summary.js +30 -0
  145. package/dist/skills/index.d.ts +29 -0
  146. package/dist/skills/index.d.ts.map +1 -0
  147. package/dist/skills/index.js +294 -0
  148. package/dist/subagents/index.d.ts +16 -0
  149. package/dist/subagents/index.d.ts.map +1 -0
  150. package/dist/subagents/index.js +231 -0
  151. package/dist/terminal/control.d.ts +1 -1
  152. package/dist/terminal/control.d.ts.map +1 -1
  153. package/dist/terminal/control.js +3 -3
  154. package/dist/terminal/east-asian-width.d.ts.map +1 -1
  155. package/dist/terminal/east-asian-width.js +404 -351
  156. package/dist/terminal/keys.d.ts +17 -0
  157. package/dist/terminal/keys.d.ts.map +1 -1
  158. package/dist/terminal/keys.js +37 -0
  159. package/dist/terminal/select-prompt.d.ts.map +1 -1
  160. package/dist/terminal/select-prompt.js +24 -12
  161. package/dist/terminal/string-width.d.ts.map +1 -1
  162. package/dist/terminal/string-width.js +25 -27
  163. package/dist/terminal/style.d.ts.map +1 -1
  164. package/dist/terminal/style.js +4 -7
  165. package/dist/terminal/supports-color.d.ts.map +1 -1
  166. package/dist/terminal/supports-color.js +41 -27
  167. package/dist/terminal/table/cell.d.ts +12 -0
  168. package/dist/terminal/table/cell.d.ts.map +1 -1
  169. package/dist/terminal/table/cell.js +40 -25
  170. package/dist/terminal/table/layout-manager.d.ts.map +1 -1
  171. package/dist/terminal/table/layout-manager.js +100 -68
  172. package/dist/terminal/table/utils.d.ts +1 -1
  173. package/dist/terminal/table/utils.d.ts.map +1 -1
  174. package/dist/terminal/table/utils.js +17 -10
  175. package/dist/terminal/wrap-ansi.d.ts.map +1 -1
  176. package/dist/terminal/wrap-ansi.js +174 -105
  177. package/dist/tokens/tracker.d.ts +1 -0
  178. package/dist/tokens/tracker.d.ts.map +1 -1
  179. package/dist/tokens/tracker.js +3 -0
  180. package/dist/tools/agent.d.ts +27 -0
  181. package/dist/tools/agent.d.ts.map +1 -0
  182. package/dist/tools/agent.js +81 -0
  183. package/dist/tools/apply-patch.d.ts +62 -0
  184. package/dist/tools/apply-patch.d.ts.map +1 -0
  185. package/dist/tools/apply-patch.js +377 -0
  186. package/dist/tools/bash.d.ts +4 -3
  187. package/dist/tools/bash.d.ts.map +1 -1
  188. package/dist/tools/bash.js +349 -141
  189. package/dist/tools/directory-tree.d.ts +3 -3
  190. package/dist/tools/directory-tree.d.ts.map +1 -1
  191. package/dist/tools/directory-tree.js +8 -5
  192. package/dist/tools/dynamic-tool-loader.d.ts +3 -6
  193. package/dist/tools/dynamic-tool-loader.d.ts.map +1 -1
  194. package/dist/tools/dynamic-tool-loader.js +20 -4
  195. package/dist/tools/edit-file.d.ts +7 -7
  196. package/dist/tools/edit-file.d.ts.map +1 -1
  197. package/dist/tools/edit-file.js +292 -85
  198. package/dist/tools/glob.d.ts +6 -6
  199. package/dist/tools/glob.d.ts.map +1 -1
  200. package/dist/tools/glob.js +110 -63
  201. package/dist/tools/grep.d.ts +15 -12
  202. package/dist/tools/grep.d.ts.map +1 -1
  203. package/dist/tools/grep.js +315 -193
  204. package/dist/tools/index.d.ts +114 -9
  205. package/dist/tools/index.d.ts.map +1 -1
  206. package/dist/tools/index.js +39 -24
  207. package/dist/tools/ls.d.ts +2 -2
  208. package/dist/tools/ls.d.ts.map +1 -1
  209. package/dist/tools/ls.js +7 -5
  210. package/dist/tools/read-file.d.ts +4 -6
  211. package/dist/tools/read-file.d.ts.map +1 -1
  212. package/dist/tools/read-file.js +84 -39
  213. package/dist/tools/save-file.d.ts +3 -3
  214. package/dist/tools/save-file.d.ts.map +1 -1
  215. package/dist/tools/save-file.js +36 -31
  216. package/dist/tools/skill.d.ts +23 -0
  217. package/dist/tools/skill.d.ts.map +1 -0
  218. package/dist/tools/skill.js +65 -0
  219. package/dist/tools/think.d.ts.map +1 -1
  220. package/dist/tools/think.js +2 -9
  221. package/dist/tools/utils.d.ts +2 -0
  222. package/dist/tools/utils.d.ts.map +1 -1
  223. package/dist/tools/utils.js +12 -0
  224. package/dist/tools/web-fetch.d.ts +50 -0
  225. package/dist/tools/web-fetch.d.ts.map +1 -0
  226. package/dist/tools/web-fetch.js +446 -0
  227. package/dist/tools/web-search.d.ts +44 -0
  228. package/dist/tools/web-search.d.ts.map +1 -0
  229. package/dist/tools/web-search.js +226 -0
  230. package/dist/tui/autocomplete/attachment-provider.d.ts +3 -6
  231. package/dist/tui/autocomplete/attachment-provider.d.ts.map +1 -1
  232. package/dist/tui/autocomplete/attachment-provider.js +25 -78
  233. package/dist/tui/autocomplete/base-provider.d.ts +1 -0
  234. package/dist/tui/autocomplete/base-provider.d.ts.map +1 -1
  235. package/dist/tui/autocomplete/combined-provider.d.ts +1 -4
  236. package/dist/tui/autocomplete/combined-provider.d.ts.map +1 -1
  237. package/dist/tui/autocomplete/combined-provider.js +3 -17
  238. package/dist/tui/autocomplete/command-provider.d.ts +1 -0
  239. package/dist/tui/autocomplete/command-provider.d.ts.map +1 -1
  240. package/dist/tui/autocomplete/command-provider.js +3 -0
  241. package/dist/tui/autocomplete/file-search-provider.d.ts +2 -1
  242. package/dist/tui/autocomplete/file-search-provider.d.ts.map +1 -1
  243. package/dist/tui/autocomplete/file-search-provider.js +37 -17
  244. package/dist/tui/autocomplete/skill-provider.d.ts +17 -0
  245. package/dist/tui/autocomplete/skill-provider.d.ts.map +1 -0
  246. package/dist/tui/autocomplete/skill-provider.js +49 -0
  247. package/dist/tui/autocomplete/utils.d.ts +2 -1
  248. package/dist/tui/autocomplete/utils.d.ts.map +1 -1
  249. package/dist/tui/autocomplete/utils.js +25 -23
  250. package/dist/tui/autocomplete.d.ts +2 -2
  251. package/dist/tui/autocomplete.d.ts.map +1 -1
  252. package/dist/tui/autocomplete.js +3 -5
  253. package/dist/tui/components/assistant-message.d.ts.map +1 -1
  254. package/dist/tui/components/assistant-message.js +0 -4
  255. package/dist/tui/components/editor.d.ts +18 -3
  256. package/dist/tui/components/editor.d.ts.map +1 -1
  257. package/dist/tui/components/editor.js +211 -237
  258. package/dist/tui/components/footer.d.ts +6 -4
  259. package/dist/tui/components/footer.d.ts.map +1 -1
  260. package/dist/tui/components/footer.js +49 -25
  261. package/dist/tui/components/markdown.d.ts +10 -7
  262. package/dist/tui/components/markdown.d.ts.map +1 -1
  263. package/dist/tui/components/markdown.js +57 -39
  264. package/dist/tui/components/modal.d.ts.map +1 -1
  265. package/dist/tui/components/modal.js +35 -33
  266. package/dist/tui/components/notification.d.ts +13 -2
  267. package/dist/tui/components/notification.d.ts.map +1 -1
  268. package/dist/tui/components/notification.js +36 -2
  269. package/dist/tui/components/progress-bar.js +1 -1
  270. package/dist/tui/components/select-list.d.ts +1 -0
  271. package/dist/tui/components/select-list.d.ts.map +1 -1
  272. package/dist/tui/components/select-list.js +14 -11
  273. package/dist/tui/components/text.d.ts +16 -0
  274. package/dist/tui/components/text.d.ts.map +1 -1
  275. package/dist/tui/components/text.js +72 -57
  276. package/dist/tui/components/thinking-block.d.ts +9 -0
  277. package/dist/tui/components/thinking-block.d.ts.map +1 -1
  278. package/dist/tui/components/thinking-block.js +43 -11
  279. package/dist/tui/components/tool-execution.d.ts +5 -1
  280. package/dist/tui/components/tool-execution.d.ts.map +1 -1
  281. package/dist/tui/components/tool-execution.js +19 -10
  282. package/dist/tui/components/user-message.d.ts.map +1 -1
  283. package/dist/tui/components/user-message.js +0 -3
  284. package/dist/tui/components/welcome.d.ts +2 -1
  285. package/dist/tui/components/welcome.d.ts.map +1 -1
  286. package/dist/tui/components/welcome.js +2 -2
  287. package/dist/tui/editor-launcher.d.ts +3 -2
  288. package/dist/tui/editor-launcher.d.ts.map +1 -1
  289. package/dist/tui/index.d.ts +0 -1
  290. package/dist/tui/index.d.ts.map +1 -1
  291. package/dist/tui/terminal.d.ts.map +1 -1
  292. package/dist/tui/terminal.js +10 -2
  293. package/dist/tui/tui.d.ts +43 -0
  294. package/dist/tui/tui.d.ts.map +1 -1
  295. package/dist/tui/tui.js +166 -41
  296. package/dist/tui/utils.d.ts +1 -5
  297. package/dist/tui/utils.d.ts.map +1 -1
  298. package/dist/tui/utils.js +271 -44
  299. package/dist/utils/bash/parse.d.ts +19 -0
  300. package/dist/utils/bash/parse.d.ts.map +1 -0
  301. package/dist/utils/bash/parse.js +223 -0
  302. package/dist/utils/bash/quote.d.ts +6 -0
  303. package/dist/utils/bash/quote.d.ts.map +1 -0
  304. package/dist/utils/bash/quote.js +23 -0
  305. package/dist/utils/bash.d.ts.map +1 -1
  306. package/dist/utils/bash.js +211 -126
  307. package/dist/utils/command-protection.d.ts +28 -0
  308. package/dist/utils/command-protection.d.ts.map +1 -0
  309. package/dist/utils/command-protection.js +324 -0
  310. package/dist/utils/dedent.d.ts.map +1 -0
  311. package/dist/utils/env-expand.d.ts +2 -0
  312. package/dist/utils/env-expand.d.ts.map +1 -0
  313. package/dist/utils/env-expand.js +8 -0
  314. package/dist/utils/filesystem/path-display.d.ts +11 -0
  315. package/dist/utils/filesystem/path-display.d.ts.map +1 -0
  316. package/dist/utils/filesystem/path-display.js +32 -0
  317. package/dist/utils/filesystem/security.d.ts +2 -2
  318. package/dist/utils/filesystem/security.d.ts.map +1 -1
  319. package/dist/utils/filesystem/security.js +28 -30
  320. package/dist/utils/formatting.d.ts.map +1 -0
  321. package/dist/{formatting.js → utils/formatting.js} +1 -1
  322. package/dist/utils/git.d.ts +4 -0
  323. package/dist/utils/git.d.ts.map +1 -1
  324. package/dist/utils/git.js +30 -0
  325. package/dist/utils/glob.d.ts +1 -1
  326. package/dist/utils/glob.d.ts.map +1 -1
  327. package/dist/utils/logger.d.ts.map +1 -0
  328. package/dist/{logger.js → utils/logger.js} +1 -1
  329. package/dist/utils/parsing.d.ts.map +1 -0
  330. package/dist/utils/process.d.ts.map +1 -1
  331. package/dist/utils/process.js +90 -37
  332. package/dist/utils/templates.d.ts +2 -0
  333. package/dist/utils/templates.d.ts.map +1 -0
  334. package/dist/utils/templates.js +24 -0
  335. package/dist/utils/version.d.ts.map +1 -0
  336. package/dist/{version.js → utils/version.js} +1 -1
  337. package/package.json +35 -26
  338. package/dist/cli.d.ts +0 -23
  339. package/dist/cli.d.ts.map +0 -1
  340. package/dist/commands/add-directory/types.d.ts +0 -6
  341. package/dist/commands/add-directory/types.d.ts.map +0 -1
  342. package/dist/commands/add-directory/types.js +0 -1
  343. package/dist/commands/copy/types.d.ts +0 -3
  344. package/dist/commands/copy/types.d.ts.map +0 -1
  345. package/dist/commands/copy/types.js +0 -1
  346. package/dist/commands/exit/index.d.ts +0 -10
  347. package/dist/commands/exit/index.d.ts.map +0 -1
  348. package/dist/commands/exit/index.js +0 -21
  349. package/dist/commands/exit/types.d.ts +0 -8
  350. package/dist/commands/exit/types.d.ts.map +0 -1
  351. package/dist/commands/exit/types.js +0 -1
  352. package/dist/commands/exit/utils.d.ts +0 -2
  353. package/dist/commands/exit/utils.d.ts.map +0 -1
  354. package/dist/commands/exit/utils.js +0 -13
  355. package/dist/commands/prompt/index.d.ts +0 -5
  356. package/dist/commands/prompt/index.d.ts.map +0 -1
  357. package/dist/commands/prompt/index.js +0 -122
  358. package/dist/commands/prompt/types.d.ts +0 -15
  359. package/dist/commands/prompt/types.d.ts.map +0 -1
  360. package/dist/commands/prompt/types.js +0 -1
  361. package/dist/commands/prompt/utils.d.ts +0 -12
  362. package/dist/commands/prompt/utils.d.ts.map +0 -1
  363. package/dist/commands/prompt/utils.js +0 -107
  364. package/dist/commands/reset/index.d.ts +0 -3
  365. package/dist/commands/reset/index.d.ts.map +0 -1
  366. package/dist/commands/reset/index.js +0 -25
  367. package/dist/commands/reset/types.d.ts +0 -1
  368. package/dist/commands/reset/types.d.ts.map +0 -1
  369. package/dist/commands/reset/types.js +0 -3
  370. package/dist/commands/review/types.d.ts +0 -12
  371. package/dist/commands/review/types.d.ts.map +0 -1
  372. package/dist/commands/review/types.js +0 -1
  373. package/dist/commands/save/index.d.ts +0 -3
  374. package/dist/commands/save/index.d.ts.map +0 -1
  375. package/dist/commands/save/index.js +0 -19
  376. package/dist/config.d.ts.map +0 -1
  377. package/dist/dedent.d.ts.map +0 -1
  378. package/dist/formatting.d.ts.map +0 -1
  379. package/dist/logger.d.ts.map +0 -1
  380. package/dist/mentions.d.ts +0 -14
  381. package/dist/mentions.d.ts.map +0 -1
  382. package/dist/parsing.d.ts.map +0 -1
  383. package/dist/prompts.d.ts.map +0 -1
  384. package/dist/repl-new.d.ts +0 -65
  385. package/dist/repl-new.d.ts.map +0 -1
  386. package/dist/skills.d.ts +0 -16
  387. package/dist/skills.d.ts.map +0 -1
  388. package/dist/skills.js +0 -233
  389. package/dist/stdin.d.ts.map +0 -1
  390. package/dist/tui/autocomplete/path-provider.d.ts +0 -21
  391. package/dist/tui/autocomplete/path-provider.d.ts.map +0 -1
  392. package/dist/tui/autocomplete/path-provider.js +0 -164
  393. package/dist/utils/iterables.d.ts +0 -2
  394. package/dist/utils/iterables.d.ts.map +0 -1
  395. package/dist/utils/iterables.js +0 -6
  396. package/dist/version.d.ts.map +0 -1
  397. /package/dist/{dedent.d.ts → utils/dedent.d.ts} +0 -0
  398. /package/dist/{dedent.js → utils/dedent.js} +0 -0
  399. /package/dist/{formatting.d.ts → utils/formatting.d.ts} +0 -0
  400. /package/dist/{logger.d.ts → utils/logger.d.ts} +0 -0
  401. /package/dist/{parsing.d.ts → utils/parsing.d.ts} +0 -0
  402. /package/dist/{parsing.js → utils/parsing.js} +0 -0
  403. /package/dist/{version.d.ts → utils/version.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../source/tools/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,eAAO,MAAM,SAAS;;CAErB,CAAC;AAMF,QAAA,MAAM,WAAW;;;;iBAOf,CAAC;AAsBH,eAAO,MAAM,gBAAgB,GAAU,SAAS;IAC9C,SAAS,EAAE,gBAAgB,CAAC;CAC7B;;;;;;;;;gCAQoC,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC;yCAIjC,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,mBACrC,oBAAoB,KACpC,OAAO,CAAC,MAAM,CAAC;EAkDnB,CAAC"}
@@ -0,0 +1,81 @@
1
+ import { z } from "zod";
2
+ import { SubAgent } from "../agent/sub-agent.js";
3
+ import { isSupportedModel } from "../models/providers.js";
4
+ import { environmentInfo } from "../prompts/system-prompt.js";
5
+ import { getSubagent, loadSubagents } from "../subagents/index.js";
6
+ import style from "../terminal/style.js";
7
+ export const AgentTool = {
8
+ name: "Agent",
9
+ };
10
+ async function getToolDescription() {
11
+ return "Delegate a task to a specialized subagent.";
12
+ }
13
+ const inputSchema = z.object({
14
+ prompt: z.string().describe("The task for the agent to perform"),
15
+ type: z.string().describe("The subagent type to use (matches subagent name)"),
16
+ timeout: z
17
+ .number()
18
+ .optional()
19
+ .describe("Override default timeout in seconds"),
20
+ });
21
+ async function loadSubAgentDefinition(type) {
22
+ const subagent = await getSubagent(type);
23
+ if (!subagent) {
24
+ const available = await loadSubagents();
25
+ const names = available.map((s) => s.name).join(", ");
26
+ throw new Error(`Unknown subagent type: "${type}". Available: ${names}`);
27
+ }
28
+ return {
29
+ model: subagent.model ?? "",
30
+ system: subagent.systemPrompt,
31
+ tools: subagent.tools,
32
+ timeout: subagent.timeout,
33
+ };
34
+ }
35
+ export const createAgentTools = async (options) => {
36
+ const description = await getToolDescription();
37
+ const toolDef = {
38
+ description,
39
+ inputSchema,
40
+ };
41
+ function display({ prompt, type }) {
42
+ return `${style.cyan(type)} - ${style.dim(prompt.substring(0, 25))}`;
43
+ }
44
+ async function execute({ prompt, type, timeout }, { abortSignal }) {
45
+ if (abortSignal?.aborted) {
46
+ throw new Error("Agent execution aborted");
47
+ }
48
+ const { model, system, tools, timeout: defaultTimeout, } = await loadSubAgentDefinition(type);
49
+ const systemPrompt = `${system}
50
+
51
+ ${await environmentInfo(options.workspace.primaryDir, options.workspace.allowedDirs)}`;
52
+ const subagent = new SubAgent({ workspace: options.workspace });
53
+ const effectiveTimeout = timeout ?? defaultTimeout;
54
+ try {
55
+ const result = await subagent.execute({
56
+ model: isSupportedModel(model) ? model : "opencode:minimax-m2.5",
57
+ system: systemPrompt,
58
+ prompt,
59
+ abortSignal,
60
+ allowedTools: tools,
61
+ timeout: effectiveTimeout,
62
+ });
63
+ return result;
64
+ }
65
+ catch (error) {
66
+ const err = error;
67
+ const message = err.message || "Unknown error";
68
+ if (message.includes("timed out") ||
69
+ err.name === "AbortError" ||
70
+ err.name === "TimeoutError") {
71
+ return `Agent failed: ${message}. The timeout was ${effectiveTimeout} seconds. Consider increasing the timeout or breaking the task into smaller subtasks.`;
72
+ }
73
+ return `Agent failed: ${message}`;
74
+ }
75
+ }
76
+ return {
77
+ toolDef,
78
+ display,
79
+ execute,
80
+ };
81
+ };
@@ -0,0 +1,62 @@
1
+ import { z } from "zod";
2
+ import type { WorkspaceContext } from "../index.ts";
3
+ import type { ToolExecutionOptions } from "./types.ts";
4
+ export declare const ApplyPatchTool: {
5
+ name: "ApplyPatch";
6
+ };
7
+ declare const inputSchema: z.ZodObject<{
8
+ patchText: z.ZodString;
9
+ }, z.core.$strip>;
10
+ type ApplyPatchInputSchema = z.infer<typeof inputSchema>;
11
+ export type Hunk = {
12
+ type: "add";
13
+ path: string;
14
+ contents: string;
15
+ } | {
16
+ type: "delete";
17
+ path: string;
18
+ } | {
19
+ type: "update";
20
+ path: string;
21
+ movePath?: string;
22
+ chunks: UpdateFileChunk[];
23
+ };
24
+ export interface UpdateFileChunk {
25
+ oldLines: string[];
26
+ newLines: string[];
27
+ changeContext?: string;
28
+ isEndOfFile?: boolean;
29
+ }
30
+ export type ApplyPatchFileChange = {
31
+ type: "add";
32
+ path: string;
33
+ content: string;
34
+ } | {
35
+ type: "delete";
36
+ path: string;
37
+ content?: string;
38
+ } | {
39
+ type: "update";
40
+ path: string;
41
+ unifiedDiff: string;
42
+ movePath?: string;
43
+ newContent: string;
44
+ };
45
+ export interface ParsedApplyPatch {
46
+ hunks: Hunk[];
47
+ }
48
+ export declare function parsePatch(patchText: string): ParsedApplyPatch;
49
+ export declare const createApplyPatchTool: (options: {
50
+ workspace: WorkspaceContext;
51
+ }) => Promise<{
52
+ toolDef: {
53
+ description: string;
54
+ inputSchema: z.ZodObject<{
55
+ patchText: z.ZodString;
56
+ }, z.core.$strip>;
57
+ };
58
+ display({ patchText }: ApplyPatchInputSchema): string;
59
+ execute({ patchText }: ApplyPatchInputSchema, { abortSignal }: ToolExecutionOptions): Promise<string>;
60
+ }>;
61
+ export {};
62
+ //# sourceMappingURL=apply-patch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-patch.d.ts","sourceRoot":"","sources":["../../source/tools/apply-patch.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAOpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,eAAO,MAAM,cAAc;;CAE1B,CAAC;AAEF,QAAA,MAAM,WAAW;;iBAMf,CAAC;AAEH,KAAK,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAGzD,MAAM,MAAM,IAAI,GACZ;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChC;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B,CAAC;AAEN,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAClD;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEN,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AA+GD,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAsD9D;AAqMD,eAAO,MAAM,oBAAoB,GAAU,SAAS;IAClD,SAAS,EAAE,gBAAgB,CAAC;CAC7B;;;;;;;2BAwB0B,qBAAqB;2BAU3B,qBAAqB,mBACnB,oBAAoB,GACpC,OAAO,CAAC,MAAM,CAAC;EAiFrB,CAAC"}
@@ -0,0 +1,377 @@
1
+ import fs from "node:fs";
2
+ import fsp from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { createTwoFilesPatch } from "diff";
5
+ import { z } from "zod";
6
+ import { config } from "../config/index.js";
7
+ import { clearProjectStatusCache } from "../repl/project-status.js";
8
+ import style from "../terminal/style.js";
9
+ import { validateFileNotReadOnly, validatePath, } from "../utils/filesystem/security.js";
10
+ export const ApplyPatchTool = {
11
+ name: "ApplyPatch",
12
+ };
13
+ const inputSchema = z.object({
14
+ patchText: z
15
+ .string()
16
+ .describe("The full apply_patch text between *** Begin Patch and *** End Patch markers"),
17
+ });
18
+ // Patch parsing functions
19
+ function parsePatchHeader(lines, startIdx) {
20
+ const line = lines[startIdx];
21
+ if (line.startsWith("*** Add File:")) {
22
+ const filePath = line.split(":", 2)[1]?.trim();
23
+ return filePath ? { filePath, nextIdx: startIdx + 1 } : null;
24
+ }
25
+ if (line.startsWith("*** Delete File:")) {
26
+ const filePath = line.split(":", 2)[1]?.trim();
27
+ return filePath ? { filePath, nextIdx: startIdx + 1 } : null;
28
+ }
29
+ if (line.startsWith("*** Update File:")) {
30
+ const filePath = line.split(":", 2)[1]?.trim();
31
+ let movePath;
32
+ let nextIdx = startIdx + 1;
33
+ if (nextIdx < lines.length && lines[nextIdx].startsWith("*** Move to:")) {
34
+ movePath = lines[nextIdx].split(":", 2)[1]?.trim();
35
+ nextIdx++;
36
+ }
37
+ return filePath ? { filePath, movePath, nextIdx } : null;
38
+ }
39
+ return null;
40
+ }
41
+ function parseUpdateFileChunks(lines, startIdx) {
42
+ const chunks = [];
43
+ let i = startIdx;
44
+ while (i < lines.length && !lines[i].startsWith("***")) {
45
+ if (lines[i].startsWith("@@")) {
46
+ const contextLine = lines[i].substring(2).trim();
47
+ i++;
48
+ const oldLines = [];
49
+ const newLines = [];
50
+ let isEndOfFile = false;
51
+ while (i < lines.length && !lines[i].startsWith("@@")) {
52
+ const changeLine = lines[i];
53
+ // Check for end of file marker first (before general *** check)
54
+ if (changeLine === "*** End of File") {
55
+ isEndOfFile = true;
56
+ i++;
57
+ break;
58
+ }
59
+ // Check for other *** markers (new file operations)
60
+ if (changeLine.startsWith("***")) {
61
+ break;
62
+ }
63
+ if (changeLine.startsWith(" ")) {
64
+ const content = changeLine.substring(1);
65
+ oldLines.push(content);
66
+ newLines.push(content);
67
+ }
68
+ else if (changeLine.startsWith("-")) {
69
+ oldLines.push(changeLine.substring(1));
70
+ }
71
+ else if (changeLine.startsWith("+")) {
72
+ newLines.push(changeLine.substring(1));
73
+ }
74
+ i++;
75
+ }
76
+ chunks.push({
77
+ oldLines,
78
+ newLines,
79
+ changeContext: contextLine || undefined,
80
+ isEndOfFile: isEndOfFile || undefined,
81
+ });
82
+ }
83
+ else {
84
+ i++;
85
+ }
86
+ }
87
+ return { chunks, nextIdx: i };
88
+ }
89
+ function parseAddFileContent(lines, startIdx) {
90
+ let content = "";
91
+ let i = startIdx;
92
+ while (i < lines.length && !lines[i].startsWith("***")) {
93
+ if (lines[i].startsWith("+")) {
94
+ content += `${lines[i].substring(1)}\n`;
95
+ }
96
+ i++;
97
+ }
98
+ if (content.endsWith("\n"))
99
+ content = content.slice(0, -1);
100
+ return { content, nextIdx: i };
101
+ }
102
+ export function parsePatch(patchText) {
103
+ const lines = patchText.split("\n");
104
+ const hunks = [];
105
+ const beginMarker = "*** Begin Patch";
106
+ const endMarker = "*** End Patch";
107
+ const beginIdx = lines.findIndex((l) => l.trim() === beginMarker);
108
+ const endIdx = lines.findIndex((l) => l.trim() === endMarker);
109
+ if (beginIdx === -1 || endIdx === -1 || beginIdx >= endIdx) {
110
+ throw new Error("Invalid patch format: missing Begin/End markers");
111
+ }
112
+ let i = beginIdx + 1;
113
+ while (i < endIdx) {
114
+ const header = parsePatchHeader(lines, i);
115
+ if (!header) {
116
+ i++;
117
+ continue;
118
+ }
119
+ if (lines[i].startsWith("*** Add File:")) {
120
+ const { content, nextIdx } = parseAddFileContent(lines, header.nextIdx);
121
+ hunks.push({ type: "add", path: header.filePath, contents: content });
122
+ i = nextIdx;
123
+ continue;
124
+ }
125
+ if (lines[i].startsWith("*** Delete File:")) {
126
+ hunks.push({ type: "delete", path: header.filePath });
127
+ i = header.nextIdx;
128
+ continue;
129
+ }
130
+ if (lines[i].startsWith("*** Update File:")) {
131
+ const { chunks: parsedChunks, nextIdx } = parseUpdateFileChunks(lines, header.nextIdx);
132
+ hunks.push({
133
+ type: "update",
134
+ path: header.filePath,
135
+ movePath: header.movePath,
136
+ chunks: parsedChunks,
137
+ });
138
+ i = nextIdx;
139
+ continue;
140
+ }
141
+ i++;
142
+ }
143
+ return { hunks };
144
+ }
145
+ function resolvePathInRoot(rootAbs, p) {
146
+ // Relative paths are resolved against rootAbs
147
+ // Absolute paths are used as-is (but validated later)
148
+ const abs = path.isAbsolute(p) ? path.normalize(p) : path.resolve(rootAbs, p);
149
+ const rel = path.relative(rootAbs, abs) || ".";
150
+ return { abs, rel };
151
+ }
152
+ function seekSequence(lines, pattern, startIndex) {
153
+ if (pattern.length === 0)
154
+ return -1;
155
+ for (let i = startIndex; i <= lines.length - pattern.length; i++) {
156
+ let matches = true;
157
+ for (let j = 0; j < pattern.length; j++) {
158
+ if (lines[i + j] !== pattern[j]) {
159
+ matches = false;
160
+ break;
161
+ }
162
+ }
163
+ if (matches)
164
+ return i;
165
+ }
166
+ return -1;
167
+ }
168
+ function applyReplacements(lines, replacements) {
169
+ const result = [...lines];
170
+ for (let i = replacements.length - 1; i >= 0; i--) {
171
+ const [startIdx, oldLen, newSegment] = replacements[i];
172
+ result.splice(startIdx, oldLen);
173
+ for (let j = 0; j < newSegment.length; j++)
174
+ result.splice(startIdx + j, 0, newSegment[j]);
175
+ }
176
+ return result;
177
+ }
178
+ function computeReplacements(originalLines, filePath, chunks) {
179
+ const replacements = [];
180
+ let lineIndex = 0;
181
+ for (const chunk of chunks) {
182
+ if (chunk.changeContext) {
183
+ const contextIdx = seekSequence(originalLines, [chunk.changeContext], lineIndex);
184
+ if (contextIdx === -1) {
185
+ throw new Error(`Failed to find context '${chunk.changeContext}' in ${filePath}`);
186
+ }
187
+ lineIndex = contextIdx + 1;
188
+ }
189
+ if (chunk.oldLines.length === 0) {
190
+ const insertionIdx = originalLines.length > 0 &&
191
+ originalLines[originalLines.length - 1] === ""
192
+ ? originalLines.length - 1
193
+ : originalLines.length;
194
+ replacements.push([insertionIdx, 0, chunk.newLines]);
195
+ continue;
196
+ }
197
+ let pattern = chunk.oldLines;
198
+ let newSlice = chunk.newLines;
199
+ let found = seekSequence(originalLines, pattern, lineIndex);
200
+ if (found === -1 &&
201
+ pattern.length > 0 &&
202
+ pattern[pattern.length - 1] === "") {
203
+ pattern = pattern.slice(0, -1);
204
+ if (newSlice.length > 0 && newSlice[newSlice.length - 1] === "")
205
+ newSlice = newSlice.slice(0, -1);
206
+ found = seekSequence(originalLines, pattern, lineIndex);
207
+ }
208
+ if (found !== -1) {
209
+ replacements.push([found, pattern.length, newSlice]);
210
+ lineIndex = found + pattern.length;
211
+ }
212
+ else {
213
+ throw new Error(`Failed to find expected lines in ${filePath}:\n${chunk.oldLines.join("\n")}`);
214
+ }
215
+ }
216
+ replacements.sort((a, b) => a[0] - b[0]);
217
+ return replacements;
218
+ }
219
+ function generateUnifiedDiff(oldContent, newContent, filePath) {
220
+ return createTwoFilesPatch(filePath, filePath, oldContent, newContent, "original", "modified");
221
+ }
222
+ function deriveNewContentsFromChunks(fileAbsPath, chunks) {
223
+ let originalContent;
224
+ try {
225
+ originalContent = fs.readFileSync(fileAbsPath, "utf-8");
226
+ }
227
+ catch (error) {
228
+ throw new Error(`Failed to read file ${fileAbsPath}: ${String(error)}`);
229
+ }
230
+ const originalLines = originalContent.split("\n");
231
+ if (originalLines.length > 0 &&
232
+ originalLines[originalLines.length - 1] === "")
233
+ originalLines.pop();
234
+ const replacements = computeReplacements(originalLines, fileAbsPath, chunks);
235
+ const newLines = applyReplacements(originalLines, replacements);
236
+ // ensure trailing newline
237
+ if (newLines.length === 0 || newLines[newLines.length - 1] !== "")
238
+ newLines.push("");
239
+ const newContent = newLines.join("\n");
240
+ return {
241
+ unifiedDiff: generateUnifiedDiff(originalContent, newContent, fileAbsPath),
242
+ content: newContent,
243
+ };
244
+ }
245
+ async function applyChanges(changes, signal) {
246
+ const changed = [];
247
+ for (const change of changes) {
248
+ if (signal?.aborted)
249
+ throw new Error("Cancelled");
250
+ if (change.type === "add") {
251
+ const dir = path.dirname(change.path);
252
+ if (dir !== "." && dir !== "/")
253
+ await fsp.mkdir(dir, { recursive: true });
254
+ await fsp.writeFile(change.path, change.content, "utf-8");
255
+ changed.push(change.path);
256
+ continue;
257
+ }
258
+ if (change.type === "delete") {
259
+ await fsp.unlink(change.path).catch(() => { });
260
+ changed.push(change.path);
261
+ continue;
262
+ }
263
+ // update
264
+ if (change.movePath) {
265
+ const dir = path.dirname(change.movePath);
266
+ if (dir !== "." && dir !== "/")
267
+ await fsp.mkdir(dir, { recursive: true });
268
+ await fsp.writeFile(change.movePath, change.newContent, "utf-8");
269
+ await fsp.unlink(change.path).catch(() => { });
270
+ changed.push(change.movePath);
271
+ continue;
272
+ }
273
+ await fsp.writeFile(change.path, change.newContent, "utf-8");
274
+ changed.push(change.path);
275
+ }
276
+ return changed;
277
+ }
278
+ export const createApplyPatchTool = async (options) => {
279
+ const { primaryDir, allowedDirs } = options.workspace;
280
+ const allowedDirectories = allowedDirs ?? [primaryDir];
281
+ const projectConfig = await config.getConfig();
282
+ return {
283
+ toolDef: {
284
+ description: "Apply a high-level apply_patch diff to modify files.\n\n" +
285
+ "Input must be in the apply_patch format surrounded by markers:\n\n" +
286
+ "*** Begin Patch\n" +
287
+ "*** Update File: path/to/file\n" +
288
+ "@@ optional context line\n" +
289
+ " unchanged line\n" +
290
+ "- removed line\n" +
291
+ "+ added line\n" +
292
+ "*** End Patch\n\n" +
293
+ "Supported operations:\n" +
294
+ "- *** Add File: path/to/file (content lines prefixed with +)\n" +
295
+ "- *** Update File (with optional *** Move to: new/path)\n" +
296
+ "- *** Delete File: path/to/file\n\n" +
297
+ "File paths may be absolute or relative to the project directory.",
298
+ inputSchema,
299
+ },
300
+ display({ patchText }) {
301
+ // Extract number of files being modified from patch text
302
+ try {
303
+ const { hunks } = parsePatch(patchText);
304
+ return `${style.cyan("apply patch")} (${hunks.length} file${hunks.length === 1 ? "" : "s"})`;
305
+ }
306
+ catch {
307
+ return `${style.cyan("apply patch")}`;
308
+ }
309
+ },
310
+ async execute({ patchText }, { abortSignal }) {
311
+ if (abortSignal?.aborted) {
312
+ throw new Error("Apply patch aborted");
313
+ }
314
+ const root = path.resolve(primaryDir);
315
+ const { hunks } = parsePatch(patchText);
316
+ if (hunks.length === 0) {
317
+ return "No changes found in patch.";
318
+ }
319
+ // Build a list of resolved file changes (absolute paths), and a diff preview.
320
+ const changes = [];
321
+ let diffOutput = "";
322
+ for (const hunk of hunks) {
323
+ if (abortSignal?.aborted)
324
+ throw new Error("Cancelled");
325
+ const p = resolvePathInRoot(root, hunk.path);
326
+ // Validate path is within allowed directories
327
+ const validPath = await validatePath(p.abs, allowedDirectories, {
328
+ requireExistence: hunk.type !== "add",
329
+ abortSignal,
330
+ });
331
+ if (hunk.type === "add") {
332
+ changes.push({
333
+ type: "add",
334
+ path: validPath,
335
+ content: hunk.contents,
336
+ });
337
+ continue;
338
+ }
339
+ if (hunk.type === "delete") {
340
+ // Validate file is not read-only before deletion
341
+ validateFileNotReadOnly(validPath, projectConfig, primaryDir);
342
+ changes.push({ type: "delete", path: validPath });
343
+ continue;
344
+ }
345
+ // update - validate file is not read-only
346
+ validateFileNotReadOnly(validPath, projectConfig, primaryDir);
347
+ let moveAbs;
348
+ if (hunk.movePath) {
349
+ const moveP = resolvePathInRoot(root, hunk.movePath);
350
+ moveAbs = await validatePath(moveP.abs, allowedDirectories, {
351
+ requireExistence: false,
352
+ abortSignal,
353
+ });
354
+ }
355
+ const upd = deriveNewContentsFromChunks(validPath, hunk.chunks);
356
+ changes.push({
357
+ type: "update",
358
+ path: validPath,
359
+ movePath: moveAbs,
360
+ newContent: upd.content,
361
+ unifiedDiff: upd.unifiedDiff,
362
+ });
363
+ if (upd.unifiedDiff) {
364
+ diffOutput += `*** Update File: ${path.relative(root, moveAbs ?? validPath)}\n`;
365
+ diffOutput += `${upd.unifiedDiff}\n`;
366
+ }
367
+ }
368
+ // Apply changes
369
+ const changedAbs = await applyChanges(changes, abortSignal);
370
+ const changedRel = changedAbs.map((p) => path.relative(root, p));
371
+ clearProjectStatusCache();
372
+ const summary = `${changedRel.length} file(s) changed`;
373
+ const filesList = changedRel.map((x) => ` ${x}`).join("\n");
374
+ return `Patch applied successfully. ${summary}\n${filesList}\n\n${diffOutput}`;
375
+ },
376
+ };
377
+ };
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ import type { WorkspaceContext } from "../index.ts";
2
3
  import type { ToolExecutionOptions } from "./types.ts";
3
4
  export declare const BashTool: {
4
5
  name: "Bash";
@@ -10,9 +11,9 @@ declare const inputSchema: z.ZodObject<{
10
11
  background: z.ZodOptional<z.ZodBoolean>;
11
12
  }, z.core.$strip>;
12
13
  type BashInputSchema = z.infer<typeof inputSchema>;
13
- export declare const createBashTool: ({ baseDir, allowedDirs, }: {
14
- baseDir: string;
15
- allowedDirs?: string[];
14
+ export declare const createBashTool: (options: {
15
+ workspace: WorkspaceContext;
16
+ env?: Record<string, string>;
16
17
  }) => Promise<{
17
18
  toolDef: {
18
19
  description: string;
@@ -1 +1 @@
1
- {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../source/tools/bash.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAqCvD,eAAO,MAAM,QAAQ;;CAEpB,CAAC;AAYF,QAAA,MAAM,WAAW;;;;;iBAkBf,CAAC;AAEH,KAAK,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEnD,eAAO,MAAM,cAAc,GAAU,2BAGlC;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;;;;;;;;;;yBAQwB,eAAe;mDAIK,eAAe,mBACrC,oBAAoB,GACpC,OAAO,CAAC,MAAM,CAAC;EAgGrB,CAAC"}
1
+ {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../source/tools/bash.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAUpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AA0CvD,eAAO,MAAM,QAAQ;;CAEpB,CAAC;AA4MF,QAAA,MAAM,WAAW;;;;;iBAkBf,CAAC;AAEH,KAAK,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEnD,eAAO,MAAM,cAAc,GAAU,SAAS;IAC5C,SAAS,EAAE,gBAAgB,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;;;;;;;;;;yBA2FwB,eAAe;mDAIK,eAAe,mBACrC,oBAAoB,GACpC,OAAO,CAAC,MAAM,CAAC;EA6BrB,CAAC"}