@qduc/term2 0.5.0 → 0.6.1

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 (488) hide show
  1. package/dist/agent.d.ts +1 -1
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +55 -7
  4. package/dist/agent.js.map +1 -1
  5. package/dist/agent.test.js +135 -10
  6. package/dist/agent.test.js.map +1 -1
  7. package/dist/app.d.ts +15 -0
  8. package/dist/app.d.ts.map +1 -1
  9. package/dist/app.js +86 -16
  10. package/dist/app.js.map +1 -1
  11. package/dist/app.startup-banner.test.js +48 -1
  12. package/dist/app.startup-banner.test.js.map +1 -1
  13. package/dist/cli.js +226 -28
  14. package/dist/cli.js.map +1 -1
  15. package/dist/components/ApprovalPrompt.d.ts.map +1 -1
  16. package/dist/components/ApprovalPrompt.js +11 -35
  17. package/dist/components/ApprovalPrompt.js.map +1 -1
  18. package/dist/components/Banner.d.ts.map +1 -1
  19. package/dist/components/Banner.js +2 -7
  20. package/dist/components/Banner.js.map +1 -1
  21. package/dist/components/BottomArea.d.ts +7 -1
  22. package/dist/components/BottomArea.d.ts.map +1 -1
  23. package/dist/components/BottomArea.js +2 -2
  24. package/dist/components/BottomArea.js.map +1 -1
  25. package/dist/components/CommandMessage.d.ts.map +1 -1
  26. package/dist/components/CommandMessage.js +38 -42
  27. package/dist/components/CommandMessage.js.map +1 -1
  28. package/dist/components/CommandMessage.test.js +69 -0
  29. package/dist/components/CommandMessage.test.js.map +1 -1
  30. package/dist/components/DiffView.d.ts +7 -0
  31. package/dist/components/DiffView.d.ts.map +1 -0
  32. package/dist/components/DiffView.js +80 -0
  33. package/dist/components/DiffView.js.map +1 -0
  34. package/dist/components/DiffView.test.d.ts +2 -0
  35. package/dist/components/DiffView.test.d.ts.map +1 -0
  36. package/dist/components/DiffView.test.js +45 -0
  37. package/dist/components/DiffView.test.js.map +1 -0
  38. package/dist/components/Input/PopupManager.d.ts +7 -0
  39. package/dist/components/Input/PopupManager.d.ts.map +1 -1
  40. package/dist/components/Input/PopupManager.js +4 -2
  41. package/dist/components/Input/PopupManager.js.map +1 -1
  42. package/dist/components/Input/determine-active-menu.d.ts.map +1 -1
  43. package/dist/components/Input/determine-active-menu.js +4 -1
  44. package/dist/components/Input/determine-active-menu.js.map +1 -1
  45. package/dist/components/Input/popup-props.d.ts +3 -1
  46. package/dist/components/Input/popup-props.d.ts.map +1 -1
  47. package/dist/components/Input/popup-props.js +7 -1
  48. package/dist/components/Input/popup-props.js.map +1 -1
  49. package/dist/components/InputBox.d.ts +6 -0
  50. package/dist/components/InputBox.d.ts.map +1 -1
  51. package/dist/components/InputBox.js +74 -11
  52. package/dist/components/InputBox.js.map +1 -1
  53. package/dist/components/InputBox.menu-logic.test.js +16 -1
  54. package/dist/components/InputBox.menu-logic.test.js.map +1 -1
  55. package/dist/components/InputBox.test.js +1 -0
  56. package/dist/components/InputBox.test.js.map +1 -1
  57. package/dist/components/MarkdownRenderer.d.ts.map +1 -1
  58. package/dist/components/MarkdownRenderer.js +52 -1
  59. package/dist/components/MarkdownRenderer.js.map +1 -1
  60. package/dist/components/MessageList.d.ts.map +1 -1
  61. package/dist/components/MessageList.js +3 -2
  62. package/dist/components/MessageList.js.map +1 -1
  63. package/dist/components/MessageList.test.js +16 -0
  64. package/dist/components/MessageList.test.js.map +1 -1
  65. package/dist/components/SettingsValueSelectionMenu.d.ts.map +1 -1
  66. package/dist/components/SettingsValueSelectionMenu.js +4 -1
  67. package/dist/components/SettingsValueSelectionMenu.js.map +1 -1
  68. package/dist/components/StatusBar.d.ts.map +1 -1
  69. package/dist/components/StatusBar.js +5 -3
  70. package/dist/components/StatusBar.js.map +1 -1
  71. package/dist/components/StatusBar.test.js +24 -0
  72. package/dist/components/StatusBar.test.js.map +1 -1
  73. package/dist/components/SubagentActivityMessage.d.ts.map +1 -1
  74. package/dist/components/SubagentActivityMessage.js +16 -1
  75. package/dist/components/SubagentActivityMessage.js.map +1 -1
  76. package/dist/components/UndoSelectionMenu.d.ts +12 -0
  77. package/dist/components/UndoSelectionMenu.d.ts.map +1 -0
  78. package/dist/components/UndoSelectionMenu.js +46 -0
  79. package/dist/components/UndoSelectionMenu.js.map +1 -0
  80. package/dist/components/UndoSelectionMenu.test.d.ts +2 -0
  81. package/dist/components/UndoSelectionMenu.test.d.ts.map +1 -0
  82. package/dist/components/UndoSelectionMenu.test.js +40 -0
  83. package/dist/components/UndoSelectionMenu.test.js.map +1 -0
  84. package/dist/components/theme.d.ts +1 -1
  85. package/dist/components/theme.d.ts.map +1 -1
  86. package/dist/components/theme.js +1 -3
  87. package/dist/components/theme.js.map +1 -1
  88. package/dist/context/InputContext.d.ts +1 -1
  89. package/dist/context/InputContext.d.ts.map +1 -1
  90. package/dist/context/InputContext.js.map +1 -1
  91. package/dist/hooks/use-app-commands.d.ts +14 -2
  92. package/dist/hooks/use-app-commands.d.ts.map +1 -1
  93. package/dist/hooks/use-app-commands.js +115 -32
  94. package/dist/hooks/use-app-commands.js.map +1 -1
  95. package/dist/hooks/use-app-commands.test.js +231 -1
  96. package/dist/hooks/use-app-commands.test.js.map +1 -1
  97. package/dist/hooks/use-conversation.clear.test.d.ts +2 -0
  98. package/dist/hooks/use-conversation.clear.test.d.ts.map +1 -0
  99. package/dist/hooks/use-conversation.clear.test.js +49 -0
  100. package/dist/hooks/use-conversation.clear.test.js.map +1 -0
  101. package/dist/hooks/use-conversation.d.ts +12 -2
  102. package/dist/hooks/use-conversation.d.ts.map +1 -1
  103. package/dist/hooks/use-conversation.js +88 -5
  104. package/dist/hooks/use-conversation.js.map +1 -1
  105. package/dist/hooks/use-conversation.max-turns-undo.test.d.ts +2 -0
  106. package/dist/hooks/use-conversation.max-turns-undo.test.d.ts.map +1 -0
  107. package/dist/hooks/use-conversation.max-turns-undo.test.js +118 -0
  108. package/dist/hooks/use-conversation.max-turns-undo.test.js.map +1 -0
  109. package/dist/hooks/use-conversation.resume.test.d.ts +2 -0
  110. package/dist/hooks/use-conversation.resume.test.d.ts.map +1 -0
  111. package/dist/hooks/use-conversation.resume.test.js +26 -0
  112. package/dist/hooks/use-conversation.resume.test.js.map +1 -0
  113. package/dist/hooks/use-escape-key.d.ts.map +1 -1
  114. package/dist/hooks/use-escape-key.js +14 -7
  115. package/dist/hooks/use-escape-key.js.map +1 -1
  116. package/dist/hooks/use-escape-key.test.js +168 -4
  117. package/dist/hooks/use-escape-key.test.js.map +1 -1
  118. package/dist/hooks/use-input-history.d.ts +4 -3
  119. package/dist/hooks/use-input-history.d.ts.map +1 -1
  120. package/dist/hooks/use-input-history.js +10 -8
  121. package/dist/hooks/use-input-history.js.map +1 -1
  122. package/dist/hooks/use-input-history.test.d.ts +2 -0
  123. package/dist/hooks/use-input-history.test.d.ts.map +1 -0
  124. package/dist/hooks/use-input-history.test.js +43 -0
  125. package/dist/hooks/use-input-history.test.js.map +1 -0
  126. package/dist/hooks/use-mode-handlers.d.ts +10 -2
  127. package/dist/hooks/use-mode-handlers.d.ts.map +1 -1
  128. package/dist/hooks/use-mode-handlers.js +21 -2
  129. package/dist/hooks/use-mode-handlers.js.map +1 -1
  130. package/dist/hooks/use-model-selection.d.ts +3 -0
  131. package/dist/hooks/use-model-selection.d.ts.map +1 -1
  132. package/dist/hooks/use-model-selection.js +3 -0
  133. package/dist/hooks/use-model-selection.js.map +1 -1
  134. package/dist/hooks/use-runtime-settings.d.ts.map +1 -1
  135. package/dist/hooks/use-runtime-settings.js +15 -6
  136. package/dist/hooks/use-runtime-settings.js.map +1 -1
  137. package/dist/hooks/use-settings-completion.d.ts.map +1 -1
  138. package/dist/hooks/use-settings-completion.js +0 -1
  139. package/dist/hooks/use-settings-completion.js.map +1 -1
  140. package/dist/hooks/use-settings-value-completion.d.ts +1 -0
  141. package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
  142. package/dist/hooks/use-settings-value-completion.js +25 -19
  143. package/dist/hooks/use-settings-value-completion.js.map +1 -1
  144. package/dist/hooks/use-shell-mode.d.ts.map +1 -1
  145. package/dist/hooks/use-shell-mode.js +2 -1
  146. package/dist/hooks/use-shell-mode.js.map +1 -1
  147. package/dist/hooks/use-slash-commands.d.ts +1 -0
  148. package/dist/hooks/use-slash-commands.d.ts.map +1 -1
  149. package/dist/hooks/use-slash-commands.js +10 -1
  150. package/dist/hooks/use-slash-commands.js.map +1 -1
  151. package/dist/hooks/use-undo-selection.d.ts +19 -0
  152. package/dist/hooks/use-undo-selection.d.ts.map +1 -0
  153. package/dist/hooks/use-undo-selection.js +76 -0
  154. package/dist/hooks/use-undo-selection.js.map +1 -0
  155. package/dist/lib/openai-agent-client.chat.test.js +40 -0
  156. package/dist/lib/openai-agent-client.chat.test.js.map +1 -1
  157. package/dist/lib/openai-agent-client.d.ts +10 -1
  158. package/dist/lib/openai-agent-client.d.ts.map +1 -1
  159. package/dist/lib/openai-agent-client.js +114 -6
  160. package/dist/lib/openai-agent-client.js.map +1 -1
  161. package/dist/lib/openai-agent-client.test.js +23 -0
  162. package/dist/lib/openai-agent-client.test.js.map +1 -1
  163. package/dist/lib/retry-executor.js +45 -7
  164. package/dist/lib/retry-executor.js.map +1 -1
  165. package/dist/lib/retry-executor.test.js +63 -0
  166. package/dist/lib/retry-executor.test.js.map +1 -1
  167. package/dist/non-interactive.d.ts +7 -1
  168. package/dist/non-interactive.d.ts.map +1 -1
  169. package/dist/non-interactive.js +73 -5
  170. package/dist/non-interactive.js.map +1 -1
  171. package/dist/non-interactive.test.js +184 -2
  172. package/dist/non-interactive.test.js.map +1 -1
  173. package/dist/prompts/orchestrator.md +46 -0
  174. package/dist/prompts/plan-mode-info.md +17 -0
  175. package/dist/prompts/prompt-selector.d.ts +2 -1
  176. package/dist/prompts/prompt-selector.d.ts.map +1 -1
  177. package/dist/prompts/prompt-selector.js +5 -1
  178. package/dist/prompts/prompt-selector.js.map +1 -1
  179. package/dist/prompts/prompt-selector.test.js +7 -0
  180. package/dist/prompts/prompt-selector.test.js.map +1 -1
  181. package/dist/prompts/prompt-selector.test.ts +18 -0
  182. package/dist/prompts/prompt-selector.ts +7 -1
  183. package/dist/prompts/reasoning-efficiency.d.ts +7 -0
  184. package/dist/prompts/reasoning-efficiency.d.ts.map +1 -0
  185. package/dist/prompts/reasoning-efficiency.js +19 -0
  186. package/dist/prompts/reasoning-efficiency.js.map +1 -0
  187. package/dist/prompts/reasoning-efficiency.ts +18 -0
  188. package/dist/prompts/search-via-shell.test.js +17 -17
  189. package/dist/prompts/search-via-shell.test.js.map +1 -1
  190. package/dist/prompts/search-via-shell.test.ts +17 -17
  191. package/dist/prompts/shell-auto-approval.d.ts +3 -0
  192. package/dist/prompts/shell-auto-approval.d.ts.map +1 -0
  193. package/dist/prompts/shell-auto-approval.js +23 -0
  194. package/dist/prompts/shell-auto-approval.js.map +1 -0
  195. package/dist/prompts/shell-auto-approval.ts +23 -0
  196. package/dist/prompts/subagent-delegation.d.ts +10 -0
  197. package/dist/prompts/subagent-delegation.d.ts.map +1 -0
  198. package/dist/prompts/subagent-delegation.js +33 -0
  199. package/dist/prompts/subagent-delegation.js.map +1 -0
  200. package/dist/prompts/subagent-delegation.test.d.ts +2 -0
  201. package/dist/prompts/subagent-delegation.test.d.ts.map +1 -0
  202. package/dist/prompts/subagent-delegation.test.js +17 -0
  203. package/dist/prompts/subagent-delegation.test.js.map +1 -0
  204. package/dist/prompts/subagent-delegation.test.ts +21 -0
  205. package/dist/prompts/subagent-delegation.ts +40 -0
  206. package/dist/prompts/subagents/explorer.md +1 -2
  207. package/dist/prompts/subagents/mentor.md +0 -1
  208. package/dist/prompts/subagents/researcher.md +0 -1
  209. package/dist/prompts/subagents/worker.md +3 -4
  210. package/dist/providers/ai-sdk-anthropic.provider.d.ts +1 -0
  211. package/dist/providers/ai-sdk-anthropic.provider.d.ts.map +1 -1
  212. package/dist/providers/ai-sdk-anthropic.provider.js +67 -1
  213. package/dist/providers/ai-sdk-anthropic.provider.js.map +1 -1
  214. package/dist/providers/ai-sdk-anthropic.provider.test.d.ts +2 -0
  215. package/dist/providers/ai-sdk-anthropic.provider.test.d.ts.map +1 -0
  216. package/dist/providers/ai-sdk-anthropic.provider.test.js +87 -0
  217. package/dist/providers/ai-sdk-anthropic.provider.test.js.map +1 -0
  218. package/dist/providers/ai-sdk-logging-fetch.d.ts +1 -1
  219. package/dist/providers/ai-sdk-logging-fetch.d.ts.map +1 -1
  220. package/dist/providers/ai-sdk-logging-fetch.js +67 -44
  221. package/dist/providers/ai-sdk-logging-fetch.js.map +1 -1
  222. package/dist/providers/ai-sdk-logging-fetch.test.js +59 -5
  223. package/dist/providers/ai-sdk-logging-fetch.test.js.map +1 -1
  224. package/dist/providers/common/openai-compatible-messages.d.ts.map +1 -1
  225. package/dist/providers/common/openai-compatible-messages.js +10 -4
  226. package/dist/providers/common/openai-compatible-messages.js.map +1 -1
  227. package/dist/providers/common/openai-compatible-messages.test.js +22 -0
  228. package/dist/providers/common/openai-compatible-messages.test.js.map +1 -1
  229. package/dist/providers/custom-provider-adapter.test.js +39 -1
  230. package/dist/providers/custom-provider-adapter.test.js.map +1 -1
  231. package/dist/providers/openai-compatible.provider.d.ts +11 -1
  232. package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
  233. package/dist/providers/openai-compatible.provider.js +122 -8
  234. package/dist/providers/openai-compatible.provider.js.map +1 -1
  235. package/dist/providers/openai-compatible.provider.test.js +61 -0
  236. package/dist/providers/openai-compatible.provider.test.js.map +1 -1
  237. package/dist/providers/openai.provider.js +21 -1
  238. package/dist/providers/openai.provider.js.map +1 -1
  239. package/dist/providers/openrouter.provider.d.ts +2 -0
  240. package/dist/providers/openrouter.provider.d.ts.map +1 -1
  241. package/dist/providers/openrouter.provider.js +20 -2
  242. package/dist/providers/openrouter.provider.js.map +1 -1
  243. package/dist/providers/openrouter.provider.request-preprocessing.test.d.ts +2 -0
  244. package/dist/providers/openrouter.provider.request-preprocessing.test.d.ts.map +1 -0
  245. package/dist/providers/openrouter.provider.request-preprocessing.test.js +48 -0
  246. package/dist/providers/openrouter.provider.request-preprocessing.test.js.map +1 -0
  247. package/dist/providers/registry.test.js +27 -2
  248. package/dist/providers/registry.test.js.map +1 -1
  249. package/dist/scripts/eval-auto-approval/dataset.d.ts +2 -2
  250. package/dist/services/agent-stream.d.ts +1 -0
  251. package/dist/services/agent-stream.d.ts.map +1 -1
  252. package/dist/services/approval-flow-coordinator.d.ts +2 -0
  253. package/dist/services/approval-flow-coordinator.d.ts.map +1 -1
  254. package/dist/services/approval-flow-coordinator.js +45 -18
  255. package/dist/services/approval-flow-coordinator.js.map +1 -1
  256. package/dist/services/approval-flow-coordinator.test.js +87 -0
  257. package/dist/services/approval-flow-coordinator.test.js.map +1 -1
  258. package/dist/services/approval-state.d.ts +4 -0
  259. package/dist/services/approval-state.d.ts.map +1 -1
  260. package/dist/services/approval-state.js +2 -0
  261. package/dist/services/approval-state.js.map +1 -1
  262. package/dist/services/approval-state.test.js +21 -0
  263. package/dist/services/approval-state.test.js.map +1 -1
  264. package/dist/services/conversation-clear-save.test.d.ts +2 -0
  265. package/dist/services/conversation-clear-save.test.d.ts.map +1 -0
  266. package/dist/services/conversation-clear-save.test.js +85 -0
  267. package/dist/services/conversation-clear-save.test.js.map +1 -0
  268. package/dist/services/conversation-history-repair.d.ts +25 -0
  269. package/dist/services/conversation-history-repair.d.ts.map +1 -0
  270. package/dist/services/conversation-history-repair.js +227 -0
  271. package/dist/services/conversation-history-repair.js.map +1 -0
  272. package/dist/services/conversation-history-repair.test.d.ts +2 -0
  273. package/dist/services/conversation-history-repair.test.d.ts.map +1 -0
  274. package/dist/services/conversation-history-repair.test.js +76 -0
  275. package/dist/services/conversation-history-repair.test.js.map +1 -0
  276. package/dist/services/conversation-persistence.d.ts +55 -0
  277. package/dist/services/conversation-persistence.d.ts.map +1 -0
  278. package/dist/services/conversation-persistence.js +216 -0
  279. package/dist/services/conversation-persistence.js.map +1 -0
  280. package/dist/services/conversation-persistence.test.d.ts +2 -0
  281. package/dist/services/conversation-persistence.test.d.ts.map +1 -0
  282. package/dist/services/conversation-persistence.test.js +713 -0
  283. package/dist/services/conversation-persistence.test.js.map +1 -0
  284. package/dist/services/conversation-result-builder.d.ts.map +1 -1
  285. package/dist/services/conversation-result-builder.js +13 -0
  286. package/dist/services/conversation-result-builder.js.map +1 -1
  287. package/dist/services/conversation-retry-policy.d.ts +7 -0
  288. package/dist/services/conversation-retry-policy.d.ts.map +1 -1
  289. package/dist/services/conversation-retry-policy.js +34 -0
  290. package/dist/services/conversation-retry-policy.js.map +1 -1
  291. package/dist/services/conversation-retry-policy.test.js +44 -2
  292. package/dist/services/conversation-retry-policy.test.js.map +1 -1
  293. package/dist/services/conversation-service.d.ts +25 -2
  294. package/dist/services/conversation-service.d.ts.map +1 -1
  295. package/dist/services/conversation-service.js +29 -3
  296. package/dist/services/conversation-service.js.map +1 -1
  297. package/dist/services/conversation-session.auto-approval.test.js +7 -10
  298. package/dist/services/conversation-session.auto-approval.test.js.map +1 -1
  299. package/dist/services/conversation-session.d.ts +28 -1
  300. package/dist/services/conversation-session.d.ts.map +1 -1
  301. package/dist/services/conversation-session.js +300 -95
  302. package/dist/services/conversation-session.js.map +1 -1
  303. package/dist/services/conversation-store.d.ts +42 -0
  304. package/dist/services/conversation-store.d.ts.map +1 -1
  305. package/dist/services/conversation-store.js +188 -6
  306. package/dist/services/conversation-store.js.map +1 -1
  307. package/dist/services/conversation-store.test.js +344 -1
  308. package/dist/services/conversation-store.test.js.map +1 -1
  309. package/dist/services/history-service.d.ts +6 -1
  310. package/dist/services/history-service.d.ts.map +1 -1
  311. package/dist/services/history-service.js +46 -6
  312. package/dist/services/history-service.js.map +1 -1
  313. package/dist/services/history-service.test.d.ts +2 -0
  314. package/dist/services/history-service.test.d.ts.map +1 -0
  315. package/dist/services/history-service.test.js +77 -0
  316. package/dist/services/history-service.test.js.map +1 -0
  317. package/dist/services/input-surge-guard.d.ts +37 -0
  318. package/dist/services/input-surge-guard.d.ts.map +1 -0
  319. package/dist/services/input-surge-guard.js +190 -0
  320. package/dist/services/input-surge-guard.js.map +1 -0
  321. package/dist/services/input-surge-guard.test.d.ts +2 -0
  322. package/dist/services/input-surge-guard.test.d.ts.map +1 -0
  323. package/dist/services/input-surge-guard.test.js +126 -0
  324. package/dist/services/input-surge-guard.test.js.map +1 -0
  325. package/dist/services/logging-contract.d.ts +1 -1
  326. package/dist/services/logging-service.d.ts +4 -0
  327. package/dist/services/logging-service.d.ts.map +1 -1
  328. package/dist/services/logging-service.js +91 -33
  329. package/dist/services/logging-service.js.map +1 -1
  330. package/dist/services/mode-notices.d.ts +11 -0
  331. package/dist/services/mode-notices.d.ts.map +1 -0
  332. package/dist/services/mode-notices.js +16 -0
  333. package/dist/services/mode-notices.js.map +1 -0
  334. package/dist/services/model-service.d.ts.map +1 -1
  335. package/dist/services/model-service.js +0 -1
  336. package/dist/services/model-service.js.map +1 -1
  337. package/dist/services/plan-mode-interceptor.d.ts +10 -0
  338. package/dist/services/plan-mode-interceptor.d.ts.map +1 -0
  339. package/dist/services/plan-mode-interceptor.js +38 -0
  340. package/dist/services/plan-mode-interceptor.js.map +1 -0
  341. package/dist/services/plan-mode-interceptor.test.d.ts +2 -0
  342. package/dist/services/plan-mode-interceptor.test.d.ts.map +1 -0
  343. package/dist/services/plan-mode-interceptor.test.js +55 -0
  344. package/dist/services/plan-mode-interceptor.test.js.map +1 -0
  345. package/dist/services/provider-traffic.d.ts +87 -0
  346. package/dist/services/provider-traffic.d.ts.map +1 -0
  347. package/dist/services/provider-traffic.js +545 -0
  348. package/dist/services/provider-traffic.js.map +1 -0
  349. package/dist/services/provider-traffic.test.d.ts +2 -0
  350. package/dist/services/provider-traffic.test.d.ts.map +1 -0
  351. package/dist/services/provider-traffic.test.js +383 -0
  352. package/dist/services/provider-traffic.test.js.map +1 -0
  353. package/dist/services/service-interfaces.d.ts +20 -1
  354. package/dist/services/service-interfaces.d.ts.map +1 -1
  355. package/dist/services/settings-persistence.js +1 -1
  356. package/dist/services/settings-schema.d.ts +107 -4
  357. package/dist/services/settings-schema.d.ts.map +1 -1
  358. package/dist/services/settings-schema.js +103 -5
  359. package/dist/services/settings-schema.js.map +1 -1
  360. package/dist/services/settings-schema.test.js +35 -1
  361. package/dist/services/settings-schema.test.js.map +1 -1
  362. package/dist/services/settings-service.d.ts +3 -1
  363. package/dist/services/settings-service.d.ts.map +1 -1
  364. package/dist/services/settings-service.js +40 -4
  365. package/dist/services/settings-service.js.map +1 -1
  366. package/dist/services/settings-sources.d.ts.map +1 -1
  367. package/dist/services/settings-sources.js +2 -1
  368. package/dist/services/settings-sources.js.map +1 -1
  369. package/dist/services/settings-sources.test.js +4 -0
  370. package/dist/services/settings-sources.test.js.map +1 -1
  371. package/dist/services/shell-auto-approval-evaluator.d.ts +3 -2
  372. package/dist/services/shell-auto-approval-evaluator.d.ts.map +1 -1
  373. package/dist/services/shell-auto-approval-evaluator.js +287 -101
  374. package/dist/services/shell-auto-approval-evaluator.js.map +1 -1
  375. package/dist/services/shell-auto-approval-evaluator.test.js +216 -18
  376. package/dist/services/shell-auto-approval-evaluator.test.js.map +1 -1
  377. package/dist/services/shell-auto-approval-resolver.test.js +1 -1
  378. package/dist/services/shell-auto-approval-resolver.test.js.map +1 -1
  379. package/dist/services/stream-event-processor.d.ts.map +1 -1
  380. package/dist/services/stream-event-processor.js +5 -0
  381. package/dist/services/stream-event-processor.js.map +1 -1
  382. package/dist/services/stream-event-processor.test.js +27 -0
  383. package/dist/services/stream-event-processor.test.js.map +1 -1
  384. package/dist/services/subagents/reasoning-inheritance.test.d.ts +2 -0
  385. package/dist/services/subagents/reasoning-inheritance.test.d.ts.map +1 -0
  386. package/dist/services/subagents/reasoning-inheritance.test.js +73 -0
  387. package/dist/services/subagents/reasoning-inheritance.test.js.map +1 -0
  388. package/dist/services/subagents/subagent-manager.d.ts +2 -0
  389. package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
  390. package/dist/services/subagents/subagent-manager.js +204 -33
  391. package/dist/services/subagents/subagent-manager.js.map +1 -1
  392. package/dist/services/subagents/subagent-manager.test.js +331 -42
  393. package/dist/services/subagents/subagent-manager.test.js.map +1 -1
  394. package/dist/services/subagents/types.d.ts +6 -0
  395. package/dist/services/subagents/types.d.ts.map +1 -1
  396. package/dist/services/terminal-result-collector.d.ts.map +1 -1
  397. package/dist/services/terminal-result-collector.js +1 -2
  398. package/dist/services/terminal-result-collector.js.map +1 -1
  399. package/dist/slash-commands.d.ts +1 -0
  400. package/dist/slash-commands.d.ts.map +1 -1
  401. package/dist/slash-commands.js +8 -1
  402. package/dist/slash-commands.js.map +1 -1
  403. package/dist/slash-commands.test.d.ts +2 -0
  404. package/dist/slash-commands.test.d.ts.map +1 -0
  405. package/dist/slash-commands.test.js +22 -0
  406. package/dist/slash-commands.test.js.map +1 -0
  407. package/dist/tools/apply-patch.d.ts.map +1 -1
  408. package/dist/tools/apply-patch.js +2 -6
  409. package/dist/tools/apply-patch.js.map +1 -1
  410. package/dist/tools/apply-patch.test.js +2 -13
  411. package/dist/tools/apply-patch.test.js.map +1 -1
  412. package/dist/tools/code-context.test.js +4 -3
  413. package/dist/tools/code-context.test.js.map +1 -1
  414. package/dist/tools/create-file.d.ts.map +1 -1
  415. package/dist/tools/create-file.js +2 -3
  416. package/dist/tools/create-file.js.map +1 -1
  417. package/dist/tools/create-file.test.js +3 -14
  418. package/dist/tools/create-file.test.js.map +1 -1
  419. package/dist/tools/edit-healing.d.ts +3 -3
  420. package/dist/tools/edit-healing.d.ts.map +1 -1
  421. package/dist/tools/edit-healing.js.map +1 -1
  422. package/dist/tools/edit-healing.test.js +0 -1
  423. package/dist/tools/edit-healing.test.js.map +1 -1
  424. package/dist/tools/find-files.test.js +3 -2
  425. package/dist/tools/find-files.test.js.map +1 -1
  426. package/dist/tools/grep.d.ts +1 -0
  427. package/dist/tools/grep.d.ts.map +1 -1
  428. package/dist/tools/grep.js +65 -4
  429. package/dist/tools/grep.js.map +1 -1
  430. package/dist/tools/grep.test.js +39 -0
  431. package/dist/tools/grep.test.js.map +1 -0
  432. package/dist/tools/read-file.d.ts +1 -0
  433. package/dist/tools/read-file.d.ts.map +1 -1
  434. package/dist/tools/read-file.js +7 -5
  435. package/dist/tools/read-file.js.map +1 -1
  436. package/dist/tools/read-file.test.js +3 -2
  437. package/dist/tools/read-file.test.js.map +1 -1
  438. package/dist/tools/run-subagent.d.ts +1 -1
  439. package/dist/tools/run-subagent.d.ts.map +1 -1
  440. package/dist/tools/run-subagent.js +27 -23
  441. package/dist/tools/run-subagent.js.map +1 -1
  442. package/dist/tools/run-subagent.test.js +55 -8
  443. package/dist/tools/run-subagent.test.js.map +1 -1
  444. package/dist/tools/search-replace.d.ts +13 -5
  445. package/dist/tools/search-replace.d.ts.map +1 -1
  446. package/dist/tools/search-replace.js +46 -115
  447. package/dist/tools/search-replace.js.map +1 -1
  448. package/dist/tools/search-replace.test.js +275 -240
  449. package/dist/tools/search-replace.test.js.map +1 -1
  450. package/dist/tools/shell.d.ts +1 -0
  451. package/dist/tools/shell.d.ts.map +1 -1
  452. package/dist/tools/shell.js +14 -6
  453. package/dist/tools/shell.js.map +1 -1
  454. package/dist/tools/shell.test.js +52 -0
  455. package/dist/tools/shell.test.js.map +1 -1
  456. package/dist/tools/tool-parameter-schema.test.js +13 -4
  457. package/dist/tools/tool-parameter-schema.test.js.map +1 -1
  458. package/dist/tools/types.d.ts +1 -1
  459. package/dist/tools/types.d.ts.map +1 -1
  460. package/dist/tools/web-fetch.d.ts.map +1 -1
  461. package/dist/tools/web-fetch.js +29 -4
  462. package/dist/tools/web-fetch.js.map +1 -1
  463. package/dist/tools/web-fetch.test.js +64 -0
  464. package/dist/tools/web-fetch.test.js.map +1 -1
  465. package/dist/utils/command-safety/path-analysis.d.ts.map +1 -1
  466. package/dist/utils/command-safety/path-analysis.js +143 -35
  467. package/dist/utils/command-safety/path-analysis.js.map +1 -1
  468. package/dist/utils/conversation-event-handler.d.ts.map +1 -1
  469. package/dist/utils/conversation-event-handler.js +23 -3
  470. package/dist/utils/conversation-event-handler.js.map +1 -1
  471. package/dist/utils/conversation-event-handler.test.js +94 -0
  472. package/dist/utils/conversation-event-handler.test.js.map +1 -1
  473. package/dist/utils/execute-shell.d.ts +2 -0
  474. package/dist/utils/execute-shell.d.ts.map +1 -1
  475. package/dist/utils/execute-shell.js +25 -1
  476. package/dist/utils/execute-shell.js.map +1 -1
  477. package/dist/utils/execute-shell.test.js +22 -0
  478. package/dist/utils/execute-shell.test.js.map +1 -1
  479. package/dist/utils/model-settings.d.ts.map +1 -1
  480. package/dist/utils/model-settings.js +18 -0
  481. package/dist/utils/model-settings.js.map +1 -1
  482. package/dist/utils/output-trim.d.ts.map +1 -1
  483. package/dist/utils/output-trim.js +14 -6
  484. package/dist/utils/output-trim.js.map +1 -1
  485. package/dist/utils/token-usage.test.js +31 -0
  486. package/dist/utils/token-usage.test.js.map +1 -1
  487. package/package.json +3 -3
  488. package/readme.md +271 -44
@@ -58,6 +58,17 @@ test('execute passes writeBoundary to subagent runner', async (t) => {
58
58
  await tool.execute({ role: 'worker', task: 'update file', writeBoundary: ['src/'] });
59
59
  t.deepEqual(capturedParams.writeBoundary, ['src/']);
60
60
  });
61
+ test('execute passes tool invocation details to subagent runner', async (t) => {
62
+ let capturedDetails;
63
+ const tool = createRunSubagentToolDefinition(async (_params, _context, details) => {
64
+ capturedDetails = details;
65
+ return makeResult();
66
+ });
67
+ const abortController = new AbortController();
68
+ const details = { signal: abortController.signal };
69
+ await tool.execute({ role: 'explorer', task: 'find files' }, undefined, details);
70
+ t.is(capturedDetails, details);
71
+ });
61
72
  test('formatCommandMessage renders completed result', (t) => {
62
73
  const result = makeResult({
63
74
  finalText: 'Found 3 relevant files.',
@@ -79,7 +90,7 @@ test('formatCommandMessage renders completed result', (t) => {
79
90
  });
80
91
  test('formatCommandMessage truncates long task in command', (t) => {
81
92
  const tool = createRunSubagentToolDefinition(async () => makeResult());
82
- const longTask = 'read and explain how rendering works in source/components/MessageList.tsx with enough detail to exceed the command preview limit';
93
+ const longTask = 'a'.repeat(400);
83
94
  const item = {
84
95
  rawItem: {
85
96
  arguments: JSON.stringify({ role: 'explorer', task: longTask }),
@@ -87,9 +98,45 @@ test('formatCommandMessage truncates long task in command', (t) => {
87
98
  },
88
99
  };
89
100
  const messages = tool.formatCommandMessage(item, 0, new Map());
90
- t.true(messages[0].command.startsWith('run_subagent [explorer] read and explain'));
101
+ t.is(messages[0].command.length, 'run_subagent [explorer] '.length + 300);
91
102
  t.true(messages[0].command.endsWith('...'));
92
- t.true(messages[0].command.length < longTask.length + 'run_subagent [explorer] '.length);
103
+ });
104
+ test('formatCommandMessage uses only the first paragraph', (t) => {
105
+ const tool = createRunSubagentToolDefinition(async () => makeResult());
106
+ const taskWithParagraphs = 'First paragraph content.\n\nSecond paragraph content that should be ignored.';
107
+ const item = {
108
+ rawItem: {
109
+ arguments: JSON.stringify({ role: 'explorer', task: taskWithParagraphs }),
110
+ output: 'Status: completed\n\nDone.',
111
+ },
112
+ };
113
+ const messages = tool.formatCommandMessage(item, 0, new Map());
114
+ t.is(messages[0].command, 'run_subagent [explorer] First paragraph content.');
115
+ });
116
+ test('formatCommandMessage truncates long output', (t) => {
117
+ const longOutput = 'b'.repeat(400);
118
+ const tool = createRunSubagentToolDefinition(async () => makeResult());
119
+ const item = {
120
+ rawItem: {
121
+ arguments: JSON.stringify({ role: 'explorer', task: 'find files' }),
122
+ output: JSON.stringify(makeResult({ finalText: longOutput })),
123
+ },
124
+ };
125
+ const messages = tool.formatCommandMessage(item, 0, new Map());
126
+ t.is(messages[0].output.split('\n')[0].length, 300);
127
+ t.true(messages[0].output.split('\n')[0].endsWith('...'));
128
+ });
129
+ test('formatCommandMessage uses only the first paragraph of output', (t) => {
130
+ const outputWithParagraphs = 'First output paragraph.\n\nSecond output paragraph.';
131
+ const tool = createRunSubagentToolDefinition(async () => makeResult());
132
+ const item = {
133
+ rawItem: {
134
+ arguments: JSON.stringify({ role: 'explorer', task: 'find files' }),
135
+ output: JSON.stringify(makeResult({ finalText: outputWithParagraphs })),
136
+ },
137
+ };
138
+ const messages = tool.formatCommandMessage(item, 0, new Map());
139
+ t.is(messages[0].output.split('\n')[0], 'First output paragraph.');
93
140
  });
94
141
  test('formatCommandMessage renders failed result', (t) => {
95
142
  const result = makeResult({ status: 'failed', error: 'Role not found', finalText: '' });
@@ -142,18 +189,18 @@ test('getSubagentsRolesSection extracts descriptions from markdown files', (t) =
142
189
  const section = getSubagentsRolesSection();
143
190
  t.true(section.includes('## Roles'));
144
191
  t.true(section.includes('`explorer`'));
145
- t.true(section.includes('read-only workspace access. Use for locating files and answering codebase questions.'));
146
192
  t.true(section.includes('`mentor`'));
147
- t.true(section.includes('advisory only, no workspace access. Use for technical advice.'));
148
193
  t.true(section.includes('`researcher`'));
149
- t.true(section.includes('web search + read-only workspace. Use for looking up external docs or current information.'));
150
194
  t.true(section.includes('`worker`'));
151
- t.true(section.includes('read + write access. Use for implementing bounded file changes.'));
195
+ t.regex(section, /-\s+`explorer`:\s+\S+/);
196
+ t.regex(section, /-\s+`mentor`:\s+\S+/);
197
+ t.regex(section, /-\s+`researcher`:\s+\S+/);
198
+ t.regex(section, /-\s+`worker`:\s+\S+/);
152
199
  });
153
200
  test('createRunSubagentToolDefinition includes dynamic roles description', (t) => {
154
201
  const tool = createRunSubagentToolDefinition(async () => makeResult());
155
202
  t.true(tool.description.includes('## Roles'));
156
203
  t.true(tool.description.includes('`explorer`'));
157
- t.true(tool.description.includes('read-only workspace access. Use for locating files and answering codebase questions.'));
204
+ t.regex(tool.description, /-\s+`explorer`:\s+\S+/);
158
205
  });
159
206
  //# sourceMappingURL=run-subagent.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-subagent.test.js","sourceRoot":"","sources":["../../source/tools/run-subagent.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAE,+BAA+B,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAG9F,SAAS,UAAU,CAAC,YAAqC,EAAE;IACzD,OAAO;QACL,OAAO,EAAE,eAAe;QACxB,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,WAAW;QACnB,SAAS,EAAE,2BAA2B;QACtC,YAAY,EAAE,EAAE;QAChB,SAAS,EAAE,EAAE;QACb,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,IAAI,CAAC,4DAA4D,EAAE,CAAC,CAAC,EAAE,EAAE;IACvE,MAAM,IAAI,GAAG,+BAA+B,CAAC,KAAK,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;IAEvE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAChC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;AACjF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+BAA+B,EAAE,CAAC,CAAC,EAAE,EAAE;IAC1C,MAAM,IAAI,GAAG,+BAA+B,CAAC,KAAK,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;IAEvE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACpF,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACjE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AACrE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sCAAsC,EAAE,CAAC,CAAC,EAAE,EAAE;IACjD,MAAM,IAAI,GAAG,+BAA+B,CAAC,KAAK,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;IAEvE,CAAC,CAAC,IAAI,CACJ,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QACxB,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,YAAY;QAClB,aAAa,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;KAClC,CAAC,CAAC,OAAO,CACX,CAAC;IACF,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AACpF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2CAA2C,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC5D,MAAM,QAAQ,GAAG,UAAU,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,+BAA+B,CAAC,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC;IAEnE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IAEzE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sDAAsD,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACvE,MAAM,IAAI,GAAG,+BAA+B,CAAC,KAAK,IAAI,EAAE;QACtD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IAEzE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iDAAiD,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAClE,IAAI,cAAc,GAAQ,IAAI,CAAC;IAC/B,MAAM,IAAI,GAAG,+BAA+B,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAC5D,cAAc,GAAG,MAAM,CAAC;QACxB,OAAO,UAAU,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAErF,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+CAA+C,EAAE,CAAC,CAAC,EAAE,EAAE;IAC1D,MAAM,MAAM,GAAG,UAAU,CAAC;QACxB,SAAS,EAAE,yBAAyB;QACpC,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;KACjD,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,+BAA+B,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;IAEjE,MAAM,IAAI,GAAG;QACX,OAAO,EAAE;YACP,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;YACnE,MAAM,EAAE,0EAA0E;SACnF;KACF,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qDAAqD,EAAE,CAAC,CAAC,EAAE,EAAE;IAChE,MAAM,IAAI,GAAG,+BAA+B,CAAC,KAAK,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;IACvE,MAAM,QAAQ,GACZ,kIAAkI,CAAC;IAErI,MAAM,IAAI,GAAG;QACX,OAAO,EAAE;YACP,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC/D,MAAM,EAAE,4BAA4B;SACrC;KACF,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,0CAA0C,CAAC,CAAC,CAAC;IACnF,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4CAA4C,EAAE,CAAC,CAAC,EAAE,EAAE;IACvD,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;IACxF,MAAM,IAAI,GAAG,+BAA+B,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;IAEjE,MAAM,IAAI,GAAG;QACX,OAAO,EAAE;YACP,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;YACjE,MAAM,EAAE,uCAAuC;SAChD;KACF,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,CAAC;AAChC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kDAAkD,EAAE,CAAC,CAAC,EAAE,EAAE;IAC7D,MAAM,MAAM,GAAG,UAAU,CAAC;QACxB,SAAS,EAAE;YACT,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE;YACnC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE;SAC/B;KACF,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,+BAA+B,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;IAEjE,MAAM,IAAI,GAAG;QACX,OAAO,EAAE;YACP,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;YACxE,MAAM,EAAE,wEAAwE;SACjF;KACF,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gEAAgE,EAAE,CAAC,CAAC,EAAE,EAAE;IAC3E,MAAM,MAAM,GAAG,UAAU,CAAC;QACxB,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;KAC3C,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,+BAA+B,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;IAEjE,MAAM,IAAI,GAAG;QACX,OAAO,EAAE;YACP,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;YAClE,MAAM,EAAE,qEAAqE;SAC9E;KACF,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oEAAoE,EAAE,CAAC,CAAC,EAAE,EAAE;IAC/E,MAAM,OAAO,GAAG,wBAAwB,EAAE,CAAC;IAE3C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,sFAAsF,CAAC,CAAC,CAAC;IACjH,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,+DAA+D,CAAC,CAAC,CAAC;IAC1F,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,IAAI,CACJ,OAAO,CAAC,QAAQ,CAAC,4FAA4F,CAAC,CAC/G,CAAC;IACF,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,iEAAiE,CAAC,CAAC,CAAC;AAC9F,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oEAAoE,EAAE,CAAC,CAAC,EAAE,EAAE;IAC/E,MAAM,IAAI,GAAG,+BAA+B,CAAC,KAAK,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;IAEvE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,IAAI,CACJ,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,sFAAsF,CAAC,CAClH,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"run-subagent.test.js","sourceRoot":"","sources":["../../source/tools/run-subagent.test.ts"],"names":[],"mappings":"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"}
@@ -4,15 +4,23 @@ import type { ILoggingService, ISettingsService } from '../services/service-inte
4
4
  import { healSearchReplaceParams } from './edit-healing.js';
5
5
  import { ExecutionContext } from '../services/execution-context.js';
6
6
  declare const searchReplaceOperationSchema: z.ZodObject<{
7
- path: z.ZodString;
8
7
  search_content: z.ZodString;
9
8
  replace_content: z.ZodString;
10
- replace_all: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
9
+ }, z.core.$strip>;
10
+ declare const searchReplaceParametersSchema: z.ZodObject<{
11
+ path: z.ZodString;
12
+ replacements: z.ZodArray<z.ZodObject<{
13
+ search_content: z.ZodString;
14
+ replace_content: z.ZodString;
15
+ }, z.core.$strip>>;
11
16
  }, z.core.$strip>;
12
17
  export type SearchReplaceOperation = z.infer<typeof searchReplaceOperationSchema>;
13
- export type SearchReplaceToolParams = SearchReplaceOperation | {
14
- replacements: SearchReplaceOperation[];
15
- };
18
+ export type SearchReplaceToolParams = z.infer<typeof searchReplaceParametersSchema>;
19
+ export interface SearchReplaceFullOperation {
20
+ path: string;
21
+ search_content: string;
22
+ replace_content: string;
23
+ }
16
24
  export declare const formatSearchReplaceCommandMessage: FormatCommandMessage;
17
25
  export declare function createSearchReplaceToolDefinition(deps: {
18
26
  loggingService: ILoggingService;
@@ -1 +1 @@
1
- {"version":3,"file":"search-replace.d.ts","sourceRoot":"","sources":["../../source/tools/search-replace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,cAAc,EAAkB,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvF,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAE3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAyEpE,QAAA,MAAM,4BAA4B;;;;;iBAahC,CAAC;AA0CH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAClF,MAAM,MAAM,uBAAuB,GAAG,sBAAsB,GAAG;IAAE,YAAY,EAAE,sBAAsB,EAAE,CAAA;CAAE,CAAC;AA+d1G,eAAO,MAAM,iCAAiC,EAAE,oBAiE/C,CAAC;AAEF,wBAAgB,iCAAiC,CAAC,IAAI,EAAE;IACtD,cAAc,EAAE,eAAe,CAAC;IAChC,eAAe,EAAE,gBAAgB,CAAC;IAClC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,WAAW,CAAC,EAAE,OAAO,uBAAuB,CAAC;CAC9C,GAAG,cAAc,CAAC,uBAAuB,CAAC,CAyd1C"}
1
+ {"version":3,"file":"search-replace.d.ts","sourceRoot":"","sources":["../../source/tools/search-replace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,cAAc,EAAkB,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvF,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAE3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAyEpE,QAAA,MAAM,4BAA4B;;;iBAOhC,CAAC;AAEH,QAAA,MAAM,6BAA6B;;;;;;iBAGjC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAClF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AA+bD,eAAO,MAAM,iCAAiC,EAAE,oBAkE/C,CAAC;AAEF,wBAAgB,iCAAiC,CAAC,IAAI,EAAE;IACtD,cAAc,EAAE,eAAe,CAAC;IAChC,eAAe,EAAE,gBAAgB,CAAC;IAClC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,WAAW,CAAC,EAAE,OAAO,uBAAuB,CAAC;CAC9C,GAAG,cAAc,CAAC,uBAAuB,CAAC,CAuc1C"}
@@ -68,62 +68,21 @@ function detectSummarizationMarkers(content) {
68
68
  return null;
69
69
  }
70
70
  const searchReplaceOperationSchema = z.object({
71
- path: z.string().describe('The absolute or relative path to the file'),
72
71
  search_content: z
73
72
  .string()
74
73
  .describe('The exact content to search for. Put <...> on its own line to match (and replace) everything between a head anchor and a tail anchor — lets you edit or delete a large block without reproducing it. The whole span between anchors is replaced, so use distinctive multi-line anchors (never a single generic line) to avoid deleting the wrong region. Omit the anchors from replace_content to delete them too.'),
75
74
  replace_content: z.string().describe('The content to replace it with'),
76
- replace_all: z
77
- .boolean()
78
- .optional()
79
- .default(false)
80
- .describe('Whether to replace all occurrences of the search content. If false, requires exactly one match.'),
81
75
  });
82
- const searchReplaceParametersSchema = z
83
- .object({
84
- path: z.string().describe('The absolute or relative path to the file').optional(),
85
- search_content: z
86
- .string()
87
- .describe('The exact content to search for. Put <...> on its own line to match (and replace) everything between a head anchor and a tail anchor — lets you edit or delete a large block without reproducing it. The whole span between anchors is replaced, so use distinctive multi-line anchors (never a single generic line) to avoid deleting the wrong region. Omit the anchors from replace_content to delete them too.')
88
- .optional(),
89
- replace_content: z.string().describe('The content to replace it with').optional(),
90
- replace_all: z
91
- .boolean()
92
- .optional()
93
- .describe('Whether to replace all occurrences of the search content. If false, requires exactly one match.'),
94
- replacements: z.array(searchReplaceOperationSchema).min(1).optional(),
95
- })
96
- .superRefine((params, ctx) => {
97
- const hasBatch = Array.isArray(params.replacements);
98
- const hasSingle = params.path !== undefined || params.search_content !== undefined || params.replace_content !== undefined;
99
- if (hasBatch && hasSingle) {
100
- ctx.addIssue({
101
- code: z.ZodIssueCode.custom,
102
- message: 'Provide either replacements or a single path/search_content/replace_content edit, not both.',
103
- });
104
- return;
105
- }
106
- if (!hasBatch &&
107
- (params.path === undefined || params.search_content === undefined || params.replace_content === undefined)) {
108
- ctx.addIssue({
109
- code: z.ZodIssueCode.custom,
110
- message: 'Provide replacements or all single edit fields: path, search_content, and replace_content.',
111
- });
112
- }
76
+ const searchReplaceParametersSchema = z.object({
77
+ path: z.string().describe('The absolute or relative path to the file'),
78
+ replacements: z.array(searchReplaceOperationSchema).min(1).describe('The list of replacements to apply to the file'),
113
79
  });
114
80
  function getSearchReplaceOperations(params) {
115
- if ('replacements' in params && params.replacements) {
116
- return params.replacements;
117
- }
118
- const operation = params;
119
- return [
120
- {
121
- path: operation.path,
122
- search_content: operation.search_content,
123
- replace_content: operation.replace_content,
124
- replace_all: operation.replace_all ?? false,
125
- },
126
- ];
81
+ return params.replacements.map((rep) => ({
82
+ path: params.path,
83
+ search_content: rep.search_content,
84
+ replace_content: rep.replace_content,
85
+ }));
127
86
  }
128
87
  /**
129
88
  * Gap marker constant used to indicate omitted middle content in search strings.
@@ -160,7 +119,6 @@ function getEditCacheKey(params) {
160
119
  path: params.path,
161
120
  search_content: params.search_content,
162
121
  replace_content: params.replace_content,
163
- replace_all: params.replace_all,
164
122
  });
165
123
  }
166
124
  /**
@@ -382,22 +340,11 @@ function findMatchesInContent(content, searchContent) {
382
340
  }
383
341
  return { type: 'none' };
384
342
  }
385
- function replaceIndexedMatches(content, matches, replaceContent, replaceAll) {
386
- if (!replaceAll) {
387
- const match = matches[0];
388
- return {
389
- newContent: content.substring(0, match.startIndex) + replaceContent + content.substring(match.endIndex),
390
- replacedCount: 1,
391
- };
392
- }
393
- let newContent = content;
394
- const sortedMatches = [...matches].sort((a, b) => b.startIndex - a.startIndex);
395
- for (const m of sortedMatches) {
396
- newContent = newContent.substring(0, m.startIndex) + replaceContent + newContent.substring(m.endIndex);
397
- }
343
+ function replaceIndexedMatches(content, matches, replaceContent) {
344
+ const match = matches[0];
398
345
  return {
399
- newContent,
400
- replacedCount: matches.length,
346
+ newContent: content.substring(0, match.startIndex) + replaceContent + content.substring(match.endIndex),
347
+ replacedCount: 1,
401
348
  };
402
349
  }
403
350
  function executeReplacement(matchInfo, content, eol, options) {
@@ -408,15 +355,13 @@ function executeReplacement(matchInfo, content, eol, options) {
408
355
  error: 'Search content not found. Try splitting the changes into smaller search pattern.',
409
356
  };
410
357
  }
358
+ if (matchInfo.count > 1) {
359
+ return {
360
+ success: false,
361
+ error: `Found ${matchInfo.count} ${matchInfo.type} matches. Search content must match exactly once.`,
362
+ };
363
+ }
411
364
  if (matchInfo.type === 'exact') {
412
- if (options.replaceAll) {
413
- return {
414
- success: true,
415
- newContent: content.replaceAll(options.normalizedSearchContent, normalizedReplaceContent),
416
- matchType: 'exact',
417
- replacedCount: matchInfo.count,
418
- };
419
- }
420
365
  const firstIndex = content.indexOf(options.normalizedSearchContent);
421
366
  return {
422
367
  success: true,
@@ -427,13 +372,7 @@ function executeReplacement(matchInfo, content, eol, options) {
427
372
  replacedCount: 1,
428
373
  };
429
374
  }
430
- if (!options.replaceAll && matchInfo.count > 1) {
431
- return {
432
- success: false,
433
- error: `Found ${matchInfo.count} ${matchInfo.type} matches. Please provide more context or set replace_all to true.`,
434
- };
435
- }
436
- const replaced = replaceIndexedMatches(content, matchInfo.matches, normalizedReplaceContent, options.replaceAll);
375
+ const replaced = replaceIndexedMatches(content, matchInfo.matches, normalizedReplaceContent);
437
376
  return {
438
377
  success: true,
439
378
  newContent: replaced.newContent,
@@ -449,8 +388,10 @@ export const formatSearchReplaceCommandMessage = (item, index, _toolCallArgument
449
388
  const normalizedArgs = item?.rawItem?.arguments ?? item?.arguments;
450
389
  const args = normalizeToolArguments(normalizedArgs) ?? {};
451
390
  const filePath = args?.path ?? 'unknown';
452
- const searchContent = args?.search_content ?? '';
453
- const replaceContent = args?.replace_content ?? '';
391
+ const replacements = args?.replacements ?? [];
392
+ const firstRep = replacements[0] ?? {};
393
+ const searchContent = firstRep.search_content ?? '';
394
+ const replaceContent = firstRep.replace_content ?? '';
454
395
  const command = `search_replace "${searchContent}" → "${replaceContent}" "${filePath}"`;
455
396
  const output = getOutputText(item) || 'No output';
456
397
  const success = false;
@@ -464,7 +405,6 @@ export const formatSearchReplaceCommandMessage = (item, index, _toolCallArgument
464
405
  path: filePath,
465
406
  search_content: searchContent,
466
407
  replace_content: replaceContent,
467
- replace_all: args?.replace_all ?? false,
468
408
  },
469
409
  }),
470
410
  ];
@@ -474,8 +414,9 @@ export const formatSearchReplaceCommandMessage = (item, index, _toolCallArgument
474
414
  for (const [replaceIndex, replaceResult] of replaceOutputItems.entries()) {
475
415
  const normalizedArgs = item?.rawItem?.arguments ?? item?.arguments;
476
416
  const args = normalizeToolArguments(normalizedArgs) ?? {};
477
- const operationArgs = Array.isArray(args?.replacements) ? args.replacements[replaceIndex] : args;
478
- const filePath = operationArgs?.path ?? replaceResult?.path ?? 'unknown';
417
+ const filePath = args?.path ?? replaceResult?.path ?? 'unknown';
418
+ const replacements = args?.replacements ?? [];
419
+ const operationArgs = replacements[replaceIndex] ?? {};
479
420
  const searchContent = operationArgs?.search_content ?? '';
480
421
  const replaceContent = operationArgs?.replace_content ?? '';
481
422
  const command = `search_replace "${searchContent}" → "${replaceContent}" "${filePath}"`;
@@ -494,7 +435,6 @@ export const formatSearchReplaceCommandMessage = (item, index, _toolCallArgument
494
435
  path: filePath,
495
436
  search_content: searchContent,
496
437
  replace_content: replaceContent,
497
- replace_all: operationArgs?.replace_all ?? false,
498
438
  },
499
439
  }));
500
440
  }
@@ -506,14 +446,12 @@ export function createSearchReplaceToolDefinition(deps) {
506
446
  return {
507
447
  name: 'search_replace',
508
448
  description: 'Replace text in a file using exact or relaxed matching.\n' +
509
- 'Set replace_all to true to replace all occurrences instead of requiring a unique match.\n' +
510
449
  'Gap matching: put <...> on its own line in search_content to match an unchanged region between a head anchor and a tail anchor. The entire span (both anchors plus everything between them) is what gets replaced, so a mis-placed anchor silently deletes a large region. Choose anchors that are distinctive and unambiguous — prefer a few lines of real, unique code; never anchor on a single generic line like "}", "return", or a blank line. Use this to edit or DELETE a large block without reproducing it. To delete the block including the anchors, omit them from replace_content; to delete only the middle, repeat the anchors in replace_content.\n' +
511
450
  'Use this tool for precise edits where you know the content to be replaced.',
512
451
  parameters: searchReplaceParametersSchema,
513
452
  approvalPresentation: getApprovalPresentationCapability('search_replace'),
514
453
  needsApproval: async (params) => {
515
454
  try {
516
- const editMode = settingsService.get('app.editMode');
517
455
  const operations = getSearchReplaceOperations(params);
518
456
  const cwd = executionContext?.getCwd() || process.cwd();
519
457
  if (operations.length > 1) {
@@ -526,10 +464,10 @@ export function createSearchReplaceToolDefinition(deps) {
526
464
  return false;
527
465
  }
528
466
  });
529
- return !(editMode && allInsideCwd);
467
+ return !allInsideCwd;
530
468
  }
531
469
  const operation = operations[0];
532
- const { path: filePath, search_content, replace_content, replace_all = false } = operation;
470
+ const { path: filePath, search_content, replace_content } = operation;
533
471
  const targetPath = resolveWorkspacePath(filePath, cwd);
534
472
  const workspaceRoot = cwd;
535
473
  const insideCwd = targetPath.startsWith(workspaceRoot + path.sep);
@@ -550,7 +488,7 @@ export function createSearchReplaceToolDefinition(deps) {
550
488
  loggingService.debug('search_replace validation: creating new file because search_content is empty', {
551
489
  path: filePath,
552
490
  });
553
- if (editMode && insideCwd) {
491
+ if (insideCwd) {
554
492
  return false;
555
493
  }
556
494
  return true;
@@ -592,68 +530,63 @@ export function createSearchReplaceToolDefinition(deps) {
592
530
  // Cache the result for execute phase
593
531
  editCache.set(operation, matchInfo, content, eol);
594
532
  if (matchInfo.type === 'exact') {
595
- if (!replace_all && matchInfo.count > 1) {
596
- loggingService.warn('search_replace validation: multiple exact matches, replace_all=false', {
533
+ if (matchInfo.count > 1) {
534
+ loggingService.warn('search_replace validation: multiple exact matches - will fail in execute', {
597
535
  path: filePath,
598
536
  count: matchInfo.count,
599
537
  });
600
- return true;
538
+ return false;
601
539
  }
602
- loggingService.debug('search_replace validation: exact match(es) found', {
540
+ loggingService.debug('search_replace validation: exact match found', {
603
541
  path: filePath,
604
542
  count: matchInfo.count,
605
- replace_all,
606
543
  });
607
- if (editMode && insideCwd) {
544
+ if (insideCwd) {
608
545
  return false;
609
546
  }
610
547
  return true;
611
548
  }
612
549
  if (matchInfo.type === 'relaxed') {
613
- if (!replace_all && matchInfo.count > 1) {
614
- loggingService.warn('search_replace validation: multiple relaxed matches, replace_all=false - will fail in execute', {
550
+ if (matchInfo.count > 1) {
551
+ loggingService.warn('search_replace validation: multiple relaxed matches - will fail in execute', {
615
552
  path: filePath,
616
553
  count: matchInfo.count,
617
554
  });
618
- // Auto-approve - execute will handle the error gracefully
619
555
  return false;
620
556
  }
621
- loggingService.debug('search_replace validation: relaxed match(es) found', {
557
+ loggingService.debug('search_replace validation: relaxed match found', {
622
558
  path: filePath,
623
559
  count: matchInfo.count,
624
- replace_all,
625
560
  });
626
561
  return true;
627
562
  }
628
563
  if (matchInfo.type === 'normalized') {
629
- if (!replace_all && matchInfo.count > 1) {
630
- loggingService.warn('search_replace validation: multiple normalized matches, replace_all=false - will fail in execute', {
564
+ if (matchInfo.count > 1) {
565
+ loggingService.warn('search_replace validation: multiple normalized matches - will fail in execute', {
631
566
  path: filePath,
632
567
  count: matchInfo.count,
633
568
  });
634
569
  return false;
635
570
  }
636
- loggingService.debug('search_replace validation: normalized match(es) found', {
571
+ loggingService.debug('search_replace validation: normalized match found', {
637
572
  path: filePath,
638
573
  count: matchInfo.count,
639
- replace_all,
640
574
  });
641
575
  return true;
642
576
  }
643
577
  if (matchInfo.type === 'gap') {
644
- if (!replace_all && matchInfo.count > 1) {
645
- loggingService.warn('search_replace validation: multiple gap matches, replace_all=false - will fail in execute', {
578
+ if (matchInfo.count > 1) {
579
+ loggingService.warn('search_replace validation: multiple gap matches - will fail in execute', {
646
580
  path: filePath,
647
581
  count: matchInfo.count,
648
582
  });
649
583
  return false;
650
584
  }
651
- loggingService.debug('search_replace validation: gap match(es) found', {
585
+ loggingService.debug('search_replace validation: gap match found', {
652
586
  path: filePath,
653
587
  count: matchInfo.count,
654
- replace_all,
655
588
  });
656
- if (editMode && insideCwd) {
589
+ if (insideCwd) {
657
590
  return false;
658
591
  }
659
592
  return true;
@@ -688,7 +621,7 @@ export function createSearchReplaceToolDefinition(deps) {
688
621
  return writeFile(p, c, 'utf8');
689
622
  };
690
623
  const applyToContent = async (operation, content) => {
691
- const { path: filePath, search_content, replace_content, replace_all = false } = operation;
624
+ const { path: filePath, search_content, replace_content } = operation;
692
625
  if (search_content === '') {
693
626
  return {
694
627
  output: {
@@ -789,7 +722,6 @@ export function createSearchReplaceToolDefinition(deps) {
789
722
  const replacementResult = executeReplacement(matchInfo, content, eol, {
790
723
  normalizedSearchContent,
791
724
  replaceContent: replace_content,
792
- replaceAll: replace_all,
793
725
  });
794
726
  if (!replacementResult.success) {
795
727
  return {
@@ -802,7 +734,6 @@ export function createSearchReplaceToolDefinition(deps) {
802
734
  if (enableFileLogging) {
803
735
  loggingService.debug(`File updated (${replacementResult.matchType} match)`, {
804
736
  path: filePath,
805
- replace_all,
806
737
  count: replacementResult.replacedCount,
807
738
  healed: usedHealing,
808
739
  });
@@ -901,7 +832,7 @@ export function createSearchReplaceToolDefinition(deps) {
901
832
  if (enableFileLogging) {
902
833
  loggingService.error('File operation failed', {
903
834
  type: 'search_replace',
904
- path: 'replacements' in params ? 'multiple' : params.path,
835
+ path: params.path,
905
836
  error: error instanceof Error ? error.message : String(error),
906
837
  });
907
838
  }