@office-ai/aioncli-core 0.26.0 → 0.30.0

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 (1152) hide show
  1. package/dist/docs/CONTRIBUTING.md +19 -10
  2. package/dist/docs/admin/enterprise-controls.md +115 -0
  3. package/dist/docs/architecture.md +3 -3
  4. package/dist/docs/assets/monitoring-dashboard-logs.png +0 -0
  5. package/dist/docs/assets/monitoring-dashboard-metrics.png +0 -0
  6. package/dist/docs/assets/monitoring-dashboard-overview.png +0 -0
  7. package/dist/docs/bedrock-integration-plan.md +595 -0
  8. package/dist/docs/changelogs/index.md +187 -0
  9. package/dist/docs/changelogs/latest.md +299 -209
  10. package/dist/docs/changelogs/preview.md +353 -115
  11. package/dist/docs/cli/checkpointing.md +2 -3
  12. package/dist/docs/cli/cli-reference.md +115 -0
  13. package/dist/docs/cli/commands.md +360 -247
  14. package/dist/docs/cli/creating-skills.md +80 -0
  15. package/dist/docs/cli/custom-commands.md +12 -9
  16. package/dist/docs/cli/enterprise.md +25 -5
  17. package/dist/docs/cli/gemini-md.md +20 -12
  18. package/dist/docs/cli/headless.md +34 -372
  19. package/dist/docs/cli/index.md +123 -63
  20. package/dist/docs/cli/keyboard-shortcuts.md +95 -84
  21. package/dist/docs/cli/model-routing.md +7 -2
  22. package/dist/docs/cli/model.md +1 -1
  23. package/dist/docs/cli/plan-mode.md +190 -0
  24. package/dist/docs/cli/rewind.md +51 -0
  25. package/dist/docs/cli/sandbox.md +4 -3
  26. package/dist/docs/cli/session-management.md +61 -44
  27. package/dist/docs/cli/settings.md +95 -61
  28. package/dist/docs/cli/skills.md +49 -71
  29. package/dist/docs/cli/system-prompt.md +32 -0
  30. package/dist/docs/cli/telemetry.md +75 -4
  31. package/dist/docs/cli/themes.md +85 -53
  32. package/dist/docs/cli/tutorials/automation.md +187 -0
  33. package/dist/docs/cli/tutorials/file-management.md +142 -0
  34. package/dist/docs/cli/tutorials/mcp-setup.md +105 -0
  35. package/dist/docs/cli/tutorials/memory-management.md +126 -0
  36. package/dist/docs/cli/tutorials/session-management.md +105 -0
  37. package/dist/docs/cli/tutorials/shell-commands.md +107 -0
  38. package/dist/docs/cli/tutorials/skills-getting-started.md +36 -58
  39. package/dist/docs/cli/tutorials/task-planning.md +93 -0
  40. package/dist/docs/cli/tutorials/web-tools.md +78 -0
  41. package/dist/docs/cli/uninstall.md +18 -0
  42. package/dist/docs/core/concepts.md +137 -0
  43. package/dist/docs/core/index.md +6 -0
  44. package/dist/docs/core/memport.md +2 -0
  45. package/dist/docs/core/policy-engine.md +57 -7
  46. package/dist/docs/core/remote-agents.md +84 -0
  47. package/dist/docs/core/subagents.md +191 -0
  48. package/dist/docs/extensions/best-practices.md +188 -0
  49. package/dist/docs/extensions/index.md +38 -270
  50. package/dist/docs/extensions/reference.md +265 -0
  51. package/dist/docs/extensions/releasing.md +154 -0
  52. package/dist/docs/extensions/writing-extensions.md +292 -0
  53. package/dist/docs/get-started/authentication.md +162 -0
  54. package/dist/docs/get-started/configuration-v1.md +5 -11
  55. package/dist/docs/get-started/configuration.md +228 -99
  56. package/dist/docs/get-started/examples.md +39 -119
  57. package/dist/docs/get-started/gemini-3.md +2 -17
  58. package/dist/docs/get-started/index.md +6 -4
  59. package/dist/docs/get-started/installation.md +110 -77
  60. package/dist/docs/hooks/best-practices.md +219 -398
  61. package/dist/docs/hooks/index.md +99 -622
  62. package/dist/docs/hooks/reference.md +269 -115
  63. package/dist/docs/hooks/writing-hooks.md +203 -779
  64. package/dist/docs/index.md +146 -147
  65. package/dist/docs/local-development.md +1 -1
  66. package/dist/docs/releases.md +3 -3
  67. package/dist/docs/sidebar.json +105 -217
  68. package/dist/docs/tools/activate-skill.md +43 -0
  69. package/dist/docs/tools/ask-user.md +95 -0
  70. package/dist/docs/tools/file-system.md +48 -139
  71. package/dist/docs/tools/index.md +92 -85
  72. package/dist/docs/tools/internal-docs.md +46 -0
  73. package/dist/docs/tools/mcp-server.md +29 -5
  74. package/dist/docs/tools/memory.md +21 -40
  75. package/dist/docs/tools/planning.md +55 -0
  76. package/dist/docs/tools/shell.md +45 -89
  77. package/dist/docs/tools/todos.md +22 -44
  78. package/dist/docs/tools/web-fetch.md +22 -46
  79. package/dist/docs/tools/web-search.md +19 -29
  80. package/dist/docs/tos-privacy.md +1 -1
  81. package/dist/docs/troubleshooting.md +20 -5
  82. package/dist/index.d.ts +2 -1
  83. package/dist/index.js +2 -1
  84. package/dist/index.js.map +1 -1
  85. package/dist/src/agents/a2a-client-manager.d.ts +4 -5
  86. package/dist/src/agents/a2a-client-manager.js +9 -131
  87. package/dist/src/agents/a2a-client-manager.js.map +1 -1
  88. package/dist/src/agents/a2a-client-manager.test.js +10 -27
  89. package/dist/src/agents/a2a-client-manager.test.js.map +1 -1
  90. package/dist/src/agents/a2aUtils.d.ts +3 -2
  91. package/dist/src/agents/a2aUtils.js +28 -26
  92. package/dist/src/agents/a2aUtils.js.map +1 -1
  93. package/dist/src/agents/a2aUtils.test.js +9 -9
  94. package/dist/src/agents/a2aUtils.test.js.map +1 -1
  95. package/dist/src/agents/acknowledgedAgents.d.ts +18 -0
  96. package/dist/src/agents/acknowledgedAgents.js +58 -0
  97. package/dist/src/agents/acknowledgedAgents.js.map +1 -0
  98. package/dist/src/agents/acknowledgedAgents.test.d.ts +6 -0
  99. package/dist/src/agents/acknowledgedAgents.test.js +70 -0
  100. package/dist/src/agents/acknowledgedAgents.test.js.map +1 -0
  101. package/dist/src/agents/agent-scheduler.d.ts +35 -0
  102. package/dist/src/agents/agent-scheduler.js +30 -0
  103. package/dist/src/agents/agent-scheduler.js.map +1 -0
  104. package/dist/src/agents/agent-scheduler.test.d.ts +6 -0
  105. package/dist/src/agents/agent-scheduler.test.js +56 -0
  106. package/dist/src/agents/agent-scheduler.test.js.map +1 -0
  107. package/dist/src/agents/agentLoader.d.ts +88 -0
  108. package/dist/src/agents/agentLoader.js +394 -0
  109. package/dist/src/agents/agentLoader.js.map +1 -0
  110. package/dist/src/agents/agentLoader.test.d.ts +6 -0
  111. package/dist/src/agents/agentLoader.test.js +458 -0
  112. package/dist/src/agents/agentLoader.test.js.map +1 -0
  113. package/dist/src/agents/auth-provider/base-provider.d.ts +40 -0
  114. package/dist/src/agents/auth-provider/base-provider.js +43 -0
  115. package/dist/src/agents/auth-provider/base-provider.js.map +1 -0
  116. package/dist/src/agents/auth-provider/base-provider.test.d.ts +6 -0
  117. package/dist/src/agents/auth-provider/base-provider.test.js +107 -0
  118. package/dist/src/agents/auth-provider/base-provider.test.js.map +1 -0
  119. package/dist/src/agents/auth-provider/factory.d.ts +27 -0
  120. package/dist/src/agents/auth-provider/factory.js +161 -0
  121. package/dist/src/agents/auth-provider/factory.js.map +1 -0
  122. package/dist/src/agents/auth-provider/factory.test.d.ts +6 -0
  123. package/dist/src/agents/auth-provider/factory.test.js +344 -0
  124. package/dist/src/agents/auth-provider/factory.test.js.map +1 -0
  125. package/dist/src/agents/auth-provider/types.d.ts +74 -0
  126. package/dist/src/agents/auth-provider/types.js +7 -0
  127. package/dist/src/agents/auth-provider/types.js.map +1 -0
  128. package/dist/src/agents/auth-provider/value-resolver.d.ts +29 -0
  129. package/dist/src/agents/auth-provider/value-resolver.js +85 -0
  130. package/dist/src/agents/auth-provider/value-resolver.js.map +1 -0
  131. package/dist/src/agents/auth-provider/value-resolver.test.d.ts +6 -0
  132. package/dist/src/agents/auth-provider/value-resolver.test.js +100 -0
  133. package/dist/src/agents/auth-provider/value-resolver.test.js.map +1 -0
  134. package/dist/src/agents/cli-help-agent.d.ts +24 -0
  135. package/dist/src/agents/cli-help-agent.js +80 -0
  136. package/dist/src/agents/cli-help-agent.js.map +1 -0
  137. package/dist/src/agents/cli-help-agent.test.d.ts +6 -0
  138. package/dist/src/agents/cli-help-agent.test.js +53 -0
  139. package/dist/src/agents/cli-help-agent.test.js.map +1 -0
  140. package/dist/src/agents/codebase-investigator.d.ts +2 -1
  141. package/dist/src/agents/codebase-investigator.js +68 -39
  142. package/dist/src/agents/codebase-investigator.js.map +1 -1
  143. package/dist/src/agents/codebase-investigator.test.js +37 -9
  144. package/dist/src/agents/codebase-investigator.test.js.map +1 -1
  145. package/dist/src/agents/generalist-agent.d.ts +21 -0
  146. package/dist/src/agents/generalist-agent.js +60 -0
  147. package/dist/src/agents/generalist-agent.js.map +1 -0
  148. package/dist/src/agents/generalist-agent.test.d.ts +6 -0
  149. package/dist/src/agents/generalist-agent.test.js +32 -0
  150. package/dist/src/agents/generalist-agent.test.js.map +1 -0
  151. package/dist/src/agents/introspection-agent.d.ts +2 -2
  152. package/dist/src/agents/local-executor.d.ts +2 -0
  153. package/dist/src/agents/local-executor.js +186 -90
  154. package/dist/src/agents/local-executor.js.map +1 -1
  155. package/dist/src/agents/local-executor.test.js +431 -256
  156. package/dist/src/agents/local-executor.test.js.map +1 -1
  157. package/dist/src/agents/local-invocation.test.js +15 -5
  158. package/dist/src/agents/local-invocation.test.js.map +1 -1
  159. package/dist/src/agents/registry.d.ts +24 -8
  160. package/dist/src/agents/registry.js +193 -96
  161. package/dist/src/agents/registry.js.map +1 -1
  162. package/dist/src/agents/registry.test.js +509 -58
  163. package/dist/src/agents/registry.test.js.map +1 -1
  164. package/dist/src/agents/registry_acknowledgement.test.d.ts +6 -0
  165. package/dist/src/agents/registry_acknowledgement.test.js +130 -0
  166. package/dist/src/agents/registry_acknowledgement.test.js.map +1 -0
  167. package/dist/src/agents/remote-invocation.js +12 -14
  168. package/dist/src/agents/remote-invocation.js.map +1 -1
  169. package/dist/src/agents/remote-invocation.test.js +16 -4
  170. package/dist/src/agents/remote-invocation.test.js.map +1 -1
  171. package/dist/src/agents/subagent-tool-wrapper.js +1 -3
  172. package/dist/src/agents/subagent-tool-wrapper.js.map +1 -1
  173. package/dist/src/agents/subagent-tool-wrapper.test.js +18 -27
  174. package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -1
  175. package/dist/src/agents/subagent-tool.d.ts +15 -0
  176. package/dist/src/agents/subagent-tool.js +57 -0
  177. package/dist/src/agents/subagent-tool.js.map +1 -0
  178. package/dist/src/agents/subagent-tool.test.d.ts +6 -0
  179. package/dist/src/agents/subagent-tool.test.js +97 -0
  180. package/dist/src/agents/subagent-tool.test.js.map +1 -0
  181. package/dist/src/agents/types.d.ts +37 -22
  182. package/dist/src/agents/types.js +12 -0
  183. package/dist/src/agents/types.js.map +1 -1
  184. package/dist/src/availability/fallbackIntegration.test.d.ts +6 -0
  185. package/dist/src/availability/fallbackIntegration.test.js +57 -0
  186. package/dist/src/availability/fallbackIntegration.test.js.map +1 -0
  187. package/dist/src/availability/policyCatalog.d.ts +3 -0
  188. package/dist/src/availability/policyCatalog.js +29 -5
  189. package/dist/src/availability/policyCatalog.js.map +1 -1
  190. package/dist/src/availability/policyCatalog.test.js +20 -1
  191. package/dist/src/availability/policyCatalog.test.js.map +1 -1
  192. package/dist/src/availability/policyHelpers.js +40 -11
  193. package/dist/src/availability/policyHelpers.js.map +1 -1
  194. package/dist/src/availability/policyHelpers.test.js +72 -2
  195. package/dist/src/availability/policyHelpers.test.js.map +1 -1
  196. package/dist/src/availability/testUtils.js +1 -0
  197. package/dist/src/availability/testUtils.js.map +1 -1
  198. package/dist/src/code_assist/admin/admin_controls.d.ts +49 -0
  199. package/dist/src/code_assist/admin/admin_controls.js +197 -0
  200. package/dist/src/code_assist/admin/admin_controls.js.map +1 -0
  201. package/dist/src/code_assist/admin/admin_controls.test.d.ts +6 -0
  202. package/dist/src/code_assist/admin/admin_controls.test.js +589 -0
  203. package/dist/src/code_assist/admin/admin_controls.test.js.map +1 -0
  204. package/dist/src/code_assist/admin/mcpUtils.d.ts +22 -0
  205. package/dist/src/code_assist/admin/mcpUtils.js +53 -0
  206. package/dist/src/code_assist/admin/mcpUtils.js.map +1 -0
  207. package/dist/src/code_assist/admin/mcpUtils.test.d.ts +6 -0
  208. package/dist/src/code_assist/admin/mcpUtils.test.js +101 -0
  209. package/dist/src/code_assist/admin/mcpUtils.test.js.map +1 -0
  210. package/dist/src/code_assist/codeAssist.js +2 -2
  211. package/dist/src/code_assist/codeAssist.js.map +1 -1
  212. package/dist/src/code_assist/codeAssist.test.d.ts +1 -1
  213. package/dist/src/code_assist/codeAssist.test.js +10 -6
  214. package/dist/src/code_assist/codeAssist.test.js.map +1 -1
  215. package/dist/src/code_assist/converter.js +8 -3
  216. package/dist/src/code_assist/converter.js.map +1 -1
  217. package/dist/src/code_assist/converter.test.js +8 -0
  218. package/dist/src/code_assist/converter.test.js.map +1 -1
  219. package/dist/src/code_assist/experiments/experiments.d.ts +1 -1
  220. package/dist/src/code_assist/experiments/experiments.js +22 -0
  221. package/dist/src/code_assist/experiments/experiments.js.map +1 -1
  222. package/dist/src/code_assist/experiments/experiments.test.js +1 -0
  223. package/dist/src/code_assist/experiments/experiments.test.js.map +1 -1
  224. package/dist/src/code_assist/experiments/experiments_local.test.d.ts +6 -0
  225. package/dist/src/code_assist/experiments/experiments_local.test.js +115 -0
  226. package/dist/src/code_assist/experiments/experiments_local.test.js.map +1 -0
  227. package/dist/src/code_assist/experiments/flagNames.d.ts +7 -0
  228. package/dist/src/code_assist/experiments/flagNames.js +7 -0
  229. package/dist/src/code_assist/experiments/flagNames.js.map +1 -1
  230. package/dist/src/code_assist/oauth-credential-storage.js +4 -4
  231. package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
  232. package/dist/src/code_assist/oauth2.test.js +10 -3
  233. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  234. package/dist/src/code_assist/server.d.ts +7 -4
  235. package/dist/src/code_assist/server.js +20 -4
  236. package/dist/src/code_assist/server.js.map +1 -1
  237. package/dist/src/code_assist/server.test.js +18 -5
  238. package/dist/src/code_assist/server.test.js.map +1 -1
  239. package/dist/src/code_assist/setup.d.ts +35 -3
  240. package/dist/src/code_assist/setup.js +98 -16
  241. package/dist/src/code_assist/setup.js.map +1 -1
  242. package/dist/src/code_assist/setup.test.js +322 -5
  243. package/dist/src/code_assist/setup.test.js.map +1 -1
  244. package/dist/src/code_assist/telemetry.js +2 -1
  245. package/dist/src/code_assist/telemetry.js.map +1 -1
  246. package/dist/src/code_assist/telemetry.test.js +2 -1
  247. package/dist/src/code_assist/telemetry.test.js.map +1 -1
  248. package/dist/src/code_assist/types.d.ts +255 -24
  249. package/dist/src/code_assist/types.js +57 -7
  250. package/dist/src/code_assist/types.js.map +1 -1
  251. package/dist/src/commands/memory.d.ts +11 -0
  252. package/dist/src/commands/memory.js +81 -0
  253. package/dist/src/commands/memory.js.map +1 -0
  254. package/dist/src/commands/memory.test.d.ts +6 -0
  255. package/dist/src/commands/memory.test.js +155 -0
  256. package/dist/src/commands/memory.test.js.map +1 -0
  257. package/dist/src/commands/restore.js +1 -0
  258. package/dist/src/commands/restore.js.map +1 -1
  259. package/dist/src/config/config.d.ts +267 -58
  260. package/dist/src/config/config.js +663 -164
  261. package/dist/src/config/config.js.map +1 -1
  262. package/dist/src/config/config.test.d.ts +1 -1
  263. package/dist/src/config/config.test.js +585 -166
  264. package/dist/src/config/config.test.js.map +1 -1
  265. package/dist/src/config/constants.d.ts +4 -0
  266. package/dist/src/config/constants.js +8 -0
  267. package/dist/src/config/constants.js.map +1 -1
  268. package/dist/src/config/defaultModelConfigs.js +27 -8
  269. package/dist/src/config/defaultModelConfigs.js.map +1 -1
  270. package/dist/src/config/memory.d.ts +14 -0
  271. package/dist/src/config/memory.js +28 -0
  272. package/dist/src/config/memory.js.map +1 -0
  273. package/dist/src/config/memory.test.d.ts +6 -0
  274. package/dist/src/config/memory.test.js +82 -0
  275. package/dist/src/config/memory.test.js.map +1 -0
  276. package/dist/src/config/models.d.ts +77 -6
  277. package/dist/src/config/models.js +240 -23
  278. package/dist/src/config/models.js.map +1 -1
  279. package/dist/src/config/models.test.js +153 -47
  280. package/dist/src/config/models.test.js.map +1 -1
  281. package/dist/src/config/projectRegistry.d.ts +36 -0
  282. package/dist/src/config/projectRegistry.js +262 -0
  283. package/dist/src/config/projectRegistry.js.map +1 -0
  284. package/dist/src/config/projectRegistry.test.d.ts +6 -0
  285. package/dist/src/config/projectRegistry.test.js +219 -0
  286. package/dist/src/config/projectRegistry.test.js.map +1 -0
  287. package/dist/src/config/storage.d.ts +23 -1
  288. package/dist/src/config/storage.js +104 -15
  289. package/dist/src/config/storage.js.map +1 -1
  290. package/dist/src/config/storage.test.js +118 -2
  291. package/dist/src/config/storage.test.js.map +1 -1
  292. package/dist/src/config/storageMigration.d.ts +16 -0
  293. package/dist/src/config/storageMigration.js +42 -0
  294. package/dist/src/config/storageMigration.js.map +1 -0
  295. package/dist/src/config/storageMigration.test.d.ts +6 -0
  296. package/dist/src/config/storageMigration.test.js +70 -0
  297. package/dist/src/config/storageMigration.test.js.map +1 -0
  298. package/dist/src/confirmation-bus/message-bus.js +3 -33
  299. package/dist/src/confirmation-bus/message-bus.js.map +1 -1
  300. package/dist/src/confirmation-bus/types.d.ts +95 -20
  301. package/dist/src/confirmation-bus/types.js +9 -3
  302. package/dist/src/confirmation-bus/types.js.map +1 -1
  303. package/dist/src/core/anthropicContentGenerator.d.ts +3 -2
  304. package/dist/src/core/anthropicContentGenerator.js +2 -2
  305. package/dist/src/core/anthropicContentGenerator.js.map +1 -1
  306. package/dist/src/core/baseLlmClient.d.ts +9 -0
  307. package/dist/src/core/baseLlmClient.js +9 -8
  308. package/dist/src/core/baseLlmClient.js.map +1 -1
  309. package/dist/src/core/baseLlmClient.test.js +17 -7
  310. package/dist/src/core/baseLlmClient.test.js.map +1 -1
  311. package/dist/src/core/bedrockContentGenerator.d.ts +73 -0
  312. package/dist/src/core/bedrockContentGenerator.js +628 -0
  313. package/dist/src/core/bedrockContentGenerator.js.map +1 -0
  314. package/dist/src/core/client.d.ts +13 -4
  315. package/dist/src/core/client.js +132 -41
  316. package/dist/src/core/client.js.map +1 -1
  317. package/dist/src/core/client.test.js +333 -79
  318. package/dist/src/core/client.test.js.map +1 -1
  319. package/dist/src/core/contentGenerator.d.ts +16 -3
  320. package/dist/src/core/contentGenerator.js +56 -2
  321. package/dist/src/core/contentGenerator.js.map +1 -1
  322. package/dist/src/core/contentGenerator.test.d.ts +1 -1
  323. package/dist/src/core/contentGenerator.test.js +127 -24
  324. package/dist/src/core/contentGenerator.test.js.map +1 -1
  325. package/dist/src/core/coreToolHookTriggers.d.ts +4 -36
  326. package/dist/src/core/coreToolHookTriggers.js +42 -150
  327. package/dist/src/core/coreToolHookTriggers.js.map +1 -1
  328. package/dist/src/core/coreToolHookTriggers.test.js +62 -94
  329. package/dist/src/core/coreToolHookTriggers.test.js.map +1 -1
  330. package/dist/src/core/coreToolScheduler.d.ts +1 -8
  331. package/dist/src/core/coreToolScheduler.js +160 -125
  332. package/dist/src/core/coreToolScheduler.js.map +1 -1
  333. package/dist/src/core/coreToolScheduler.test.js +480 -62
  334. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  335. package/dist/src/core/fakeContentGenerator.d.ts +4 -2
  336. package/dist/src/core/fakeContentGenerator.js +9 -2
  337. package/dist/src/core/fakeContentGenerator.js.map +1 -1
  338. package/dist/src/core/fakeContentGenerator.test.js +8 -7
  339. package/dist/src/core/fakeContentGenerator.test.js.map +1 -1
  340. package/dist/src/core/geminiChat.d.ts +31 -3
  341. package/dist/src/core/geminiChat.js +144 -34
  342. package/dist/src/core/geminiChat.js.map +1 -1
  343. package/dist/src/core/geminiChat.test.js +175 -50
  344. package/dist/src/core/geminiChat.test.js.map +1 -1
  345. package/dist/src/core/geminiChat_network_retry.test.js +146 -16
  346. package/dist/src/core/geminiChat_network_retry.test.js.map +1 -1
  347. package/dist/src/core/logger.js +11 -0
  348. package/dist/src/core/logger.js.map +1 -1
  349. package/dist/src/core/logger.test.js +2 -4
  350. package/dist/src/core/logger.test.js.map +1 -1
  351. package/dist/src/core/loggingContentGenerator.d.ts +7 -3
  352. package/dist/src/core/loggingContentGenerator.js +40 -21
  353. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  354. package/dist/src/core/loggingContentGenerator.test.d.ts +1 -1
  355. package/dist/src/core/loggingContentGenerator.test.js +50 -8
  356. package/dist/src/core/loggingContentGenerator.test.js.map +1 -1
  357. package/dist/src/core/openaiContentGenerator.d.ts +3 -2
  358. package/dist/src/core/openaiContentGenerator.js +18 -10
  359. package/dist/src/core/openaiContentGenerator.js.map +1 -1
  360. package/dist/src/core/openaiContentGenerator.test.js +57 -4
  361. package/dist/src/core/openaiContentGenerator.test.js.map +1 -1
  362. package/dist/src/core/prompts-substitution.test.d.ts +6 -0
  363. package/dist/src/core/prompts-substitution.test.js +109 -0
  364. package/dist/src/core/prompts-substitution.test.js.map +1 -0
  365. package/dist/src/core/prompts.d.ts +11 -9
  366. package/dist/src/core/prompts.js +14 -405
  367. package/dist/src/core/prompts.js.map +1 -1
  368. package/dist/src/core/prompts.test.js +290 -56
  369. package/dist/src/core/prompts.test.js.map +1 -1
  370. package/dist/src/core/recordingContentGenerator.d.ts +5 -3
  371. package/dist/src/core/recordingContentGenerator.js +12 -5
  372. package/dist/src/core/recordingContentGenerator.js.map +1 -1
  373. package/dist/src/core/recordingContentGenerator.test.js +5 -4
  374. package/dist/src/core/recordingContentGenerator.test.js.map +1 -1
  375. package/dist/src/core/tokenLimits.js +6 -10
  376. package/dist/src/core/tokenLimits.js.map +1 -1
  377. package/dist/src/core/tokenLimits.test.js +8 -4
  378. package/dist/src/core/tokenLimits.test.js.map +1 -1
  379. package/dist/src/core/turn.d.ts +10 -2
  380. package/dist/src/core/turn.js +36 -17
  381. package/dist/src/core/turn.js.map +1 -1
  382. package/dist/src/core/turn.test.js +82 -2
  383. package/dist/src/core/turn.test.js.map +1 -1
  384. package/dist/src/fallback/handler.js +1 -1
  385. package/dist/src/fallback/handler.js.map +1 -1
  386. package/dist/src/fallback/handler.test.js +10 -12
  387. package/dist/src/fallback/handler.test.js.map +1 -1
  388. package/dist/src/fallback/types.d.ts +9 -0
  389. package/dist/src/generated/git-commit.d.ts +2 -2
  390. package/dist/src/generated/git-commit.js +2 -2
  391. package/dist/src/hooks/hookAggregator.js +16 -4
  392. package/dist/src/hooks/hookAggregator.js.map +1 -1
  393. package/dist/src/hooks/hookEventHandler.d.ts +10 -16
  394. package/dist/src/hooks/hookEventHandler.js +35 -281
  395. package/dist/src/hooks/hookEventHandler.js.map +1 -1
  396. package/dist/src/hooks/hookEventHandler.test.js +189 -4
  397. package/dist/src/hooks/hookEventHandler.test.js.map +1 -1
  398. package/dist/src/hooks/hookRegistry.js +8 -3
  399. package/dist/src/hooks/hookRegistry.js.map +1 -1
  400. package/dist/src/hooks/hookRegistry.test.js +31 -2
  401. package/dist/src/hooks/hookRegistry.test.js.map +1 -1
  402. package/dist/src/hooks/hookRunner.js +21 -18
  403. package/dist/src/hooks/hookRunner.js.map +1 -1
  404. package/dist/src/hooks/hookSystem.d.ts +59 -0
  405. package/dist/src/hooks/hookSystem.js +206 -6
  406. package/dist/src/hooks/hookSystem.js.map +1 -1
  407. package/dist/src/hooks/hookSystem.test.js +20 -9
  408. package/dist/src/hooks/hookSystem.test.js.map +1 -1
  409. package/dist/src/hooks/hookTranslator.js +13 -6
  410. package/dist/src/hooks/hookTranslator.js.map +1 -1
  411. package/dist/src/hooks/index.d.ts +0 -1
  412. package/dist/src/hooks/index.js +0 -2
  413. package/dist/src/hooks/index.js.map +1 -1
  414. package/dist/src/hooks/trustedHooks.js +2 -0
  415. package/dist/src/hooks/trustedHooks.js.map +1 -1
  416. package/dist/src/hooks/types.d.ts +49 -1
  417. package/dist/src/hooks/types.js +43 -19
  418. package/dist/src/hooks/types.js.map +1 -1
  419. package/dist/src/hooks/types.test.js +13 -29
  420. package/dist/src/hooks/types.test.js.map +1 -1
  421. package/dist/src/ide/detect-ide.d.ts +49 -0
  422. package/dist/src/ide/detect-ide.js +56 -3
  423. package/dist/src/ide/detect-ide.js.map +1 -1
  424. package/dist/src/ide/detect-ide.test.js +70 -0
  425. package/dist/src/ide/detect-ide.test.js.map +1 -1
  426. package/dist/src/ide/ide-client.d.ts +0 -10
  427. package/dist/src/ide/ide-client.js +31 -199
  428. package/dist/src/ide/ide-client.js.map +1 -1
  429. package/dist/src/ide/ide-client.test.js +39 -191
  430. package/dist/src/ide/ide-client.test.js.map +1 -1
  431. package/dist/src/ide/ide-connection-utils.d.ts +27 -0
  432. package/dist/src/ide/ide-connection-utils.js +195 -0
  433. package/dist/src/ide/ide-connection-utils.js.map +1 -0
  434. package/dist/src/ide/ide-connection-utils.test.d.ts +6 -0
  435. package/dist/src/ide/ide-connection-utils.test.js +372 -0
  436. package/dist/src/ide/ide-connection-utils.test.js.map +1 -0
  437. package/dist/src/ide/ide-installer.js +76 -5
  438. package/dist/src/ide/ide-installer.js.map +1 -1
  439. package/dist/src/ide/ide-installer.test.js +40 -2
  440. package/dist/src/ide/ide-installer.test.js.map +1 -1
  441. package/dist/src/ide/types.d.ts +46 -46
  442. package/dist/src/index.d.ts +30 -2
  443. package/dist/src/index.js +31 -2
  444. package/dist/src/index.js.map +1 -1
  445. package/dist/src/mcp/oauth-provider.d.ts +10 -3
  446. package/dist/src/mcp/oauth-provider.js +49 -14
  447. package/dist/src/mcp/oauth-provider.js.map +1 -1
  448. package/dist/src/mcp/oauth-provider.test.js +180 -1
  449. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  450. package/dist/src/mcp/oauth-token-storage.js +3 -0
  451. package/dist/src/mcp/oauth-token-storage.js.map +1 -1
  452. package/dist/src/mcp/oauth-utils.d.ts +13 -4
  453. package/dist/src/mcp/oauth-utils.js +25 -19
  454. package/dist/src/mcp/oauth-utils.js.map +1 -1
  455. package/dist/src/mcp/oauth-utils.test.js +13 -8
  456. package/dist/src/mcp/oauth-utils.test.js.map +1 -1
  457. package/dist/src/mcp/sa-impersonation-provider.js +3 -1
  458. package/dist/src/mcp/sa-impersonation-provider.js.map +1 -1
  459. package/dist/src/mcp/token-storage/file-token-storage.js +6 -2
  460. package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -1
  461. package/dist/src/mcp/token-storage/hybrid-token-storage.js +4 -0
  462. package/dist/src/mcp/token-storage/hybrid-token-storage.js.map +1 -1
  463. package/dist/src/mcp/token-storage/hybrid-token-storage.test.js +12 -0
  464. package/dist/src/mcp/token-storage/hybrid-token-storage.test.js.map +1 -1
  465. package/dist/src/mcp/token-storage/keychain-token-storage.js +8 -0
  466. package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -1
  467. package/dist/src/mcp/token-storage/keychain-token-storage.test.js +10 -5
  468. package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +1 -1
  469. package/dist/src/output/json-formatter.test.js +2 -0
  470. package/dist/src/output/json-formatter.test.js.map +1 -1
  471. package/dist/src/output/stream-json-formatter.test.js +4 -0
  472. package/dist/src/output/stream-json-formatter.test.js.map +1 -1
  473. package/dist/src/policy/config.d.ts +5 -3
  474. package/dist/src/policy/config.js +137 -64
  475. package/dist/src/policy/config.js.map +1 -1
  476. package/dist/src/policy/config.test.js +218 -12
  477. package/dist/src/policy/config.test.js.map +1 -1
  478. package/dist/src/policy/persistence.test.js +31 -11
  479. package/dist/src/policy/persistence.test.js.map +1 -1
  480. package/dist/src/policy/policies/plan.toml +56 -0
  481. package/dist/src/policy/policies/read-only.toml +1 -11
  482. package/dist/src/policy/policies/yolo.toml +13 -2
  483. package/dist/src/policy/policy-engine.d.ts +16 -11
  484. package/dist/src/policy/policy-engine.js +208 -101
  485. package/dist/src/policy/policy-engine.js.map +1 -1
  486. package/dist/src/policy/policy-engine.test.js +538 -199
  487. package/dist/src/policy/policy-engine.test.js.map +1 -1
  488. package/dist/src/policy/policy-updater.test.js +20 -6
  489. package/dist/src/policy/policy-updater.test.js.map +1 -1
  490. package/dist/src/policy/shell-safety.test.js +371 -8
  491. package/dist/src/policy/shell-safety.test.js.map +1 -1
  492. package/dist/src/policy/stable-stringify.js +1 -0
  493. package/dist/src/policy/stable-stringify.js.map +1 -1
  494. package/dist/src/policy/toml-loader.d.ts +5 -5
  495. package/dist/src/policy/toml-loader.js +65 -22
  496. package/dist/src/policy/toml-loader.js.map +1 -1
  497. package/dist/src/policy/toml-loader.test.js +88 -9
  498. package/dist/src/policy/toml-loader.test.js.map +1 -1
  499. package/dist/src/policy/types.d.ts +26 -1
  500. package/dist/src/policy/types.js +8 -0
  501. package/dist/src/policy/types.js.map +1 -1
  502. package/dist/src/policy/utils.d.ts +5 -0
  503. package/dist/src/policy/utils.js +32 -1
  504. package/dist/src/policy/utils.js.map +1 -1
  505. package/dist/src/policy/utils.test.js +67 -7
  506. package/dist/src/policy/utils.test.js.map +1 -1
  507. package/dist/src/prompts/promptProvider.d.ts +19 -0
  508. package/dist/src/prompts/promptProvider.js +174 -0
  509. package/dist/src/prompts/promptProvider.js.map +1 -0
  510. package/dist/src/prompts/promptProvider.test.d.ts +6 -0
  511. package/dist/src/prompts/promptProvider.test.js +71 -0
  512. package/dist/src/prompts/promptProvider.test.js.map +1 -0
  513. package/dist/src/prompts/snippets.d.ts +86 -0
  514. package/dist/src/prompts/snippets.js +573 -0
  515. package/dist/src/prompts/snippets.js.map +1 -0
  516. package/dist/src/prompts/snippets.legacy.d.ts +91 -0
  517. package/dist/src/prompts/snippets.legacy.js +573 -0
  518. package/dist/src/prompts/snippets.legacy.js.map +1 -0
  519. package/dist/src/prompts/utils.d.ts +23 -0
  520. package/dist/src/prompts/utils.js +82 -0
  521. package/dist/src/prompts/utils.js.map +1 -0
  522. package/dist/src/routing/modelRouterService.js +18 -8
  523. package/dist/src/routing/modelRouterService.js.map +1 -1
  524. package/dist/src/routing/modelRouterService.test.js +14 -6
  525. package/dist/src/routing/modelRouterService.test.js.map +1 -1
  526. package/dist/src/routing/routingStrategy.d.ts +2 -0
  527. package/dist/src/routing/strategies/classifierStrategy.js +14 -9
  528. package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
  529. package/dist/src/routing/strategies/classifierStrategy.test.js +72 -7
  530. package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
  531. package/dist/src/routing/strategies/compositeStrategy.js +1 -0
  532. package/dist/src/routing/strategies/compositeStrategy.js.map +1 -1
  533. package/dist/src/routing/strategies/defaultStrategy.d.ts +1 -1
  534. package/dist/src/routing/strategies/defaultStrategy.js +5 -4
  535. package/dist/src/routing/strategies/defaultStrategy.js.map +1 -1
  536. package/dist/src/routing/strategies/defaultStrategy.test.js +58 -4
  537. package/dist/src/routing/strategies/defaultStrategy.test.js.map +1 -1
  538. package/dist/src/routing/strategies/fallbackStrategy.d.ts +1 -1
  539. package/dist/src/routing/strategies/fallbackStrategy.js +3 -3
  540. package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
  541. package/dist/src/routing/strategies/fallbackStrategy.test.js +13 -1
  542. package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
  543. package/dist/src/routing/strategies/numericalClassifierStrategy.d.ts +13 -0
  544. package/dist/src/routing/strategies/numericalClassifierStrategy.js +188 -0
  545. package/dist/src/routing/strategies/numericalClassifierStrategy.js.map +1 -0
  546. package/dist/src/routing/strategies/numericalClassifierStrategy.test.d.ts +6 -0
  547. package/dist/src/routing/strategies/numericalClassifierStrategy.test.js +401 -0
  548. package/dist/src/routing/strategies/numericalClassifierStrategy.test.js.map +1 -0
  549. package/dist/src/routing/strategies/overrideStrategy.d.ts +1 -1
  550. package/dist/src/routing/strategies/overrideStrategy.js +6 -6
  551. package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
  552. package/dist/src/routing/strategies/overrideStrategy.test.js +13 -3
  553. package/dist/src/routing/strategies/overrideStrategy.test.js.map +1 -1
  554. package/dist/src/safety/built-in.js +1 -0
  555. package/dist/src/safety/built-in.js.map +1 -1
  556. package/dist/src/safety/context-builder.js +3 -1
  557. package/dist/src/safety/context-builder.js.map +1 -1
  558. package/dist/src/scheduler/confirmation.d.ts +50 -0
  559. package/dist/src/scheduler/confirmation.js +204 -0
  560. package/dist/src/scheduler/confirmation.js.map +1 -0
  561. package/dist/src/scheduler/confirmation.test.d.ts +6 -0
  562. package/dist/src/scheduler/confirmation.test.js +310 -0
  563. package/dist/src/scheduler/confirmation.test.js.map +1 -0
  564. package/dist/src/scheduler/policy.d.ts +33 -0
  565. package/dist/src/scheduler/policy.js +119 -0
  566. package/dist/src/scheduler/policy.js.map +1 -0
  567. package/dist/src/scheduler/policy.test.d.ts +6 -0
  568. package/dist/src/scheduler/policy.test.js +419 -0
  569. package/dist/src/scheduler/policy.test.js.map +1 -0
  570. package/dist/src/scheduler/scheduler.d.ts +63 -0
  571. package/dist/src/scheduler/scheduler.js +371 -0
  572. package/dist/src/scheduler/scheduler.js.map +1 -0
  573. package/dist/src/scheduler/scheduler.test.d.ts +6 -0
  574. package/dist/src/scheduler/scheduler.test.js +937 -0
  575. package/dist/src/scheduler/scheduler.test.js.map +1 -0
  576. package/dist/src/scheduler/scheduler_waiting_callback.test.d.ts +6 -0
  577. package/dist/src/scheduler/scheduler_waiting_callback.test.js +62 -0
  578. package/dist/src/scheduler/scheduler_waiting_callback.test.js.map +1 -0
  579. package/dist/src/scheduler/state-manager.d.ts +74 -0
  580. package/dist/src/scheduler/state-manager.js +368 -0
  581. package/dist/src/scheduler/state-manager.js.map +1 -0
  582. package/dist/src/scheduler/state-manager.test.d.ts +6 -0
  583. package/dist/src/scheduler/state-manager.test.js +433 -0
  584. package/dist/src/scheduler/state-manager.test.js.map +1 -0
  585. package/dist/src/scheduler/tool-executor.js +25 -27
  586. package/dist/src/scheduler/tool-executor.js.map +1 -1
  587. package/dist/src/scheduler/tool-executor.test.js +26 -25
  588. package/dist/src/scheduler/tool-executor.test.js.map +1 -1
  589. package/dist/src/scheduler/tool-modifier.d.ts +23 -0
  590. package/dist/src/scheduler/tool-modifier.js +53 -0
  591. package/dist/src/scheduler/tool-modifier.js.map +1 -0
  592. package/dist/src/scheduler/tool-modifier.test.d.ts +6 -0
  593. package/dist/src/scheduler/tool-modifier.test.js +179 -0
  594. package/dist/src/scheduler/tool-modifier.test.js.map +1 -0
  595. package/dist/src/scheduler/types.d.ts +51 -8
  596. package/dist/src/scheduler/types.js +15 -1
  597. package/dist/src/scheduler/types.js.map +1 -1
  598. package/dist/src/services/chatCompressionService.d.ts +5 -1
  599. package/dist/src/services/chatCompressionService.js +169 -23
  600. package/dist/src/services/chatCompressionService.js.map +1 -1
  601. package/dist/src/services/chatCompressionService.test.js +382 -18
  602. package/dist/src/services/chatCompressionService.test.js.map +1 -1
  603. package/dist/src/services/chatRecordingService.d.ts +23 -3
  604. package/dist/src/services/chatRecordingService.js +137 -7
  605. package/dist/src/services/chatRecordingService.js.map +1 -1
  606. package/dist/src/services/chatRecordingService.test.js +450 -186
  607. package/dist/src/services/chatRecordingService.test.js.map +1 -1
  608. package/dist/src/services/contextManager.d.ts +7 -4
  609. package/dist/src/services/contextManager.js +43 -18
  610. package/dist/src/services/contextManager.js.map +1 -1
  611. package/dist/src/services/contextManager.test.js +54 -27
  612. package/dist/src/services/contextManager.test.js.map +1 -1
  613. package/dist/src/services/environmentSanitization.js +4 -3
  614. package/dist/src/services/environmentSanitization.js.map +1 -1
  615. package/dist/src/services/fileDiscoveryService.d.ts +14 -2
  616. package/dist/src/services/fileDiscoveryService.js +79 -7
  617. package/dist/src/services/fileDiscoveryService.js.map +1 -1
  618. package/dist/src/services/fileDiscoveryService.test.js +142 -10
  619. package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
  620. package/dist/src/services/gitService.d.ts +2 -1
  621. package/dist/src/services/gitService.js +16 -6
  622. package/dist/src/services/gitService.js.map +1 -1
  623. package/dist/src/services/gitService.test.js +26 -10
  624. package/dist/src/services/gitService.test.js.map +1 -1
  625. package/dist/src/services/loopDetectionService.js +23 -4
  626. package/dist/src/services/loopDetectionService.js.map +1 -1
  627. package/dist/src/services/loopDetectionService.test.js +24 -0
  628. package/dist/src/services/loopDetectionService.test.js.map +1 -1
  629. package/dist/src/services/modelConfig.integration.test.js +2 -2
  630. package/dist/src/services/modelConfig.integration.test.js.map +1 -1
  631. package/dist/src/services/modelConfigService.d.ts +39 -4
  632. package/dist/src/services/modelConfigService.js +153 -76
  633. package/dist/src/services/modelConfigService.js.map +1 -1
  634. package/dist/src/services/modelConfigService.test.js +175 -0
  635. package/dist/src/services/modelConfigService.test.js.map +1 -1
  636. package/dist/src/services/modelConfigServiceTestUtils.js +3 -1
  637. package/dist/src/services/modelConfigServiceTestUtils.js.map +1 -1
  638. package/dist/src/services/sessionSummaryService.js +2 -0
  639. package/dist/src/services/sessionSummaryService.js.map +1 -1
  640. package/dist/src/services/sessionSummaryService.test.js +1 -1
  641. package/dist/src/services/sessionSummaryService.test.js.map +1 -1
  642. package/dist/src/services/shellExecutionService.d.ts +48 -0
  643. package/dist/src/services/shellExecutionService.js +339 -97
  644. package/dist/src/services/shellExecutionService.js.map +1 -1
  645. package/dist/src/services/shellExecutionService.test.js +132 -17
  646. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  647. package/dist/src/services/test-data/resolved-aliases-retry.golden.json +26 -8
  648. package/dist/src/services/test-data/resolved-aliases.golden.json +26 -8
  649. package/dist/src/services/toolOutputMaskingService.d.ts +43 -0
  650. package/dist/src/services/toolOutputMaskingService.js +286 -0
  651. package/dist/src/services/toolOutputMaskingService.js.map +1 -0
  652. package/dist/src/services/toolOutputMaskingService.test.d.ts +6 -0
  653. package/dist/src/services/toolOutputMaskingService.test.js +546 -0
  654. package/dist/src/services/toolOutputMaskingService.test.js.map +1 -0
  655. package/dist/src/skills/builtin/skill-creator/SKILL.md +382 -0
  656. package/dist/src/skills/builtin/skill-creator/scripts/init_skill.cjs +239 -0
  657. package/dist/src/skills/builtin/skill-creator/scripts/package_skill.cjs +106 -0
  658. package/dist/src/skills/builtin/skill-creator/scripts/validate_skill.cjs +131 -0
  659. package/dist/src/skills/skillLoader.d.ts +3 -0
  660. package/dist/src/skills/skillLoader.js +73 -12
  661. package/dist/src/skills/skillLoader.js.map +1 -1
  662. package/dist/src/skills/skillLoader.test.d.ts +5 -0
  663. package/dist/src/skills/skillLoader.test.js +195 -1
  664. package/dist/src/skills/skillLoader.test.js.map +1 -1
  665. package/dist/src/skills/skillManager.d.ts +25 -3
  666. package/dist/src/skills/skillManager.js +76 -11
  667. package/dist/src/skills/skillManager.js.map +1 -1
  668. package/dist/src/skills/skillManager.test.js +209 -9
  669. package/dist/src/skills/skillManager.test.js.map +1 -1
  670. package/dist/src/skills/skillManagerAlias.test.d.ts +6 -0
  671. package/dist/src/skills/skillManagerAlias.test.js +140 -0
  672. package/dist/src/skills/skillManagerAlias.test.js.map +1 -0
  673. package/dist/src/telemetry/activity-monitor.js +1 -0
  674. package/dist/src/telemetry/activity-monitor.js.map +1 -1
  675. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +25 -4
  676. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +207 -12
  677. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  678. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +210 -6
  679. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  680. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +23 -1
  681. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +61 -1
  682. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  683. package/dist/src/telemetry/file-exporters.js +2 -1
  684. package/dist/src/telemetry/file-exporters.js.map +1 -1
  685. package/dist/src/telemetry/file-exporters.test.d.ts +6 -0
  686. package/dist/src/telemetry/file-exporters.test.js +142 -0
  687. package/dist/src/telemetry/file-exporters.test.js.map +1 -0
  688. package/dist/src/telemetry/gcp-exporters.js +1 -0
  689. package/dist/src/telemetry/gcp-exporters.js.map +1 -1
  690. package/dist/src/telemetry/index.d.ts +3 -2
  691. package/dist/src/telemetry/index.js +3 -2
  692. package/dist/src/telemetry/index.js.map +1 -1
  693. package/dist/src/telemetry/integration.test.circular.js +2 -1
  694. package/dist/src/telemetry/integration.test.circular.js.map +1 -1
  695. package/dist/src/telemetry/llmRole.d.ts +18 -0
  696. package/dist/src/telemetry/llmRole.js +20 -0
  697. package/dist/src/telemetry/llmRole.js.map +1 -0
  698. package/dist/src/telemetry/loggers.d.ts +8 -1
  699. package/dist/src/telemetry/loggers.js +113 -10
  700. package/dist/src/telemetry/loggers.js.map +1 -1
  701. package/dist/src/telemetry/loggers.test.circular.js +5 -2
  702. package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
  703. package/dist/src/telemetry/loggers.test.js +169 -19
  704. package/dist/src/telemetry/loggers.test.js.map +1 -1
  705. package/dist/src/telemetry/memory-monitor.test.js +1 -0
  706. package/dist/src/telemetry/memory-monitor.test.js.map +1 -1
  707. package/dist/src/telemetry/metrics.d.ts +39 -1
  708. package/dist/src/telemetry/metrics.js +105 -4
  709. package/dist/src/telemetry/metrics.js.map +1 -1
  710. package/dist/src/telemetry/metrics.test.js +84 -4
  711. package/dist/src/telemetry/metrics.test.js.map +1 -1
  712. package/dist/src/telemetry/sanitize.test.js +2 -0
  713. package/dist/src/telemetry/sanitize.test.js.map +1 -1
  714. package/dist/src/telemetry/sdk.js +24 -0
  715. package/dist/src/telemetry/sdk.js.map +1 -1
  716. package/dist/src/telemetry/sdk.test.js +5 -1
  717. package/dist/src/telemetry/sdk.test.js.map +1 -1
  718. package/dist/src/telemetry/semantic.js +92 -0
  719. package/dist/src/telemetry/semantic.js.map +1 -1
  720. package/dist/src/telemetry/semantic.truncation.test.d.ts +1 -0
  721. package/dist/src/telemetry/semantic.truncation.test.js +92 -0
  722. package/dist/src/telemetry/semantic.truncation.test.js.map +1 -0
  723. package/dist/src/telemetry/telemetryAttributes.js +5 -0
  724. package/dist/src/telemetry/telemetryAttributes.js.map +1 -1
  725. package/dist/src/telemetry/types.d.ts +98 -15
  726. package/dist/src/telemetry/types.js +227 -16
  727. package/dist/src/telemetry/types.js.map +1 -1
  728. package/dist/src/telemetry/uiTelemetry.d.ts +16 -0
  729. package/dist/src/telemetry/uiTelemetry.js +39 -0
  730. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  731. package/dist/src/telemetry/uiTelemetry.test.js +29 -0
  732. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  733. package/dist/src/test-utils/mock-message-bus.d.ts +1 -19
  734. package/dist/src/test-utils/mock-message-bus.js +5 -65
  735. package/dist/src/test-utils/mock-message-bus.js.map +1 -1
  736. package/dist/src/test-utils/mock-tool.d.ts +1 -0
  737. package/dist/src/test-utils/mock-tool.js +1 -0
  738. package/dist/src/test-utils/mock-tool.js.map +1 -1
  739. package/dist/src/test-utils/mockWorkspaceContext.js +1 -0
  740. package/dist/src/test-utils/mockWorkspaceContext.js.map +1 -1
  741. package/dist/src/tools/activate-skill.d.ts +1 -0
  742. package/dist/src/tools/activate-skill.js +28 -25
  743. package/dist/src/tools/activate-skill.js.map +1 -1
  744. package/dist/src/tools/activate-skill.test.js +24 -6
  745. package/dist/src/tools/activate-skill.test.js.map +1 -1
  746. package/dist/src/tools/ask-user.d.ts +29 -0
  747. package/dist/src/tools/ask-user.js +141 -0
  748. package/dist/src/tools/ask-user.js.map +1 -0
  749. package/dist/src/tools/ask-user.test.d.ts +6 -0
  750. package/dist/src/tools/ask-user.test.js +446 -0
  751. package/dist/src/tools/ask-user.test.js.map +1 -0
  752. package/dist/src/tools/confirmation-policy.test.js +21 -0
  753. package/dist/src/tools/confirmation-policy.test.js.map +1 -1
  754. package/dist/src/tools/constants.d.ts +7 -0
  755. package/dist/src/tools/constants.js +8 -0
  756. package/dist/src/tools/constants.js.map +1 -0
  757. package/dist/src/tools/definitions/base-declarations.d.ts +26 -0
  758. package/dist/src/tools/definitions/base-declarations.js +30 -0
  759. package/dist/src/tools/definitions/base-declarations.js.map +1 -0
  760. package/dist/src/tools/definitions/coreTools.d.ts +36 -0
  761. package/dist/src/tools/definitions/coreTools.js +143 -0
  762. package/dist/src/tools/definitions/coreTools.js.map +1 -0
  763. package/dist/src/tools/definitions/coreToolsModelSnapshots.test.d.ts +6 -0
  764. package/dist/src/tools/definitions/coreToolsModelSnapshots.test.js +82 -0
  765. package/dist/src/tools/definitions/coreToolsModelSnapshots.test.js.map +1 -0
  766. package/dist/src/tools/definitions/dynamic-declaration-helpers.d.ts +30 -0
  767. package/dist/src/tools/definitions/dynamic-declaration-helpers.js +135 -0
  768. package/dist/src/tools/definitions/dynamic-declaration-helpers.js.map +1 -0
  769. package/dist/src/tools/definitions/model-family-sets/default-legacy.d.ts +11 -0
  770. package/dist/src/tools/definitions/model-family-sets/default-legacy.js +575 -0
  771. package/dist/src/tools/definitions/model-family-sets/default-legacy.js.map +1 -0
  772. package/dist/src/tools/definitions/model-family-sets/gemini-3.d.ts +14 -0
  773. package/dist/src/tools/definitions/model-family-sets/gemini-3.js +578 -0
  774. package/dist/src/tools/definitions/model-family-sets/gemini-3.js.map +1 -0
  775. package/dist/src/tools/definitions/modelFamilyService.d.ts +14 -0
  776. package/dist/src/tools/definitions/modelFamilyService.js +29 -0
  777. package/dist/src/tools/definitions/modelFamilyService.js.map +1 -0
  778. package/dist/src/tools/definitions/resolver.d.ts +15 -0
  779. package/dist/src/tools/definitions/resolver.js +27 -0
  780. package/dist/src/tools/definitions/resolver.js.map +1 -0
  781. package/dist/src/tools/definitions/resolver.test.d.ts +6 -0
  782. package/dist/src/tools/definitions/resolver.test.js +58 -0
  783. package/dist/src/tools/definitions/resolver.test.js.map +1 -0
  784. package/dist/src/tools/definitions/types.d.ts +44 -0
  785. package/dist/src/tools/definitions/types.js +7 -0
  786. package/dist/src/tools/definitions/types.js.map +1 -0
  787. package/dist/src/tools/diffOptions.d.ts +1 -1
  788. package/dist/src/tools/diffOptions.js +7 -3
  789. package/dist/src/tools/diffOptions.js.map +1 -1
  790. package/dist/src/tools/diffOptions.test.js +17 -0
  791. package/dist/src/tools/diffOptions.test.js.map +1 -1
  792. package/dist/src/tools/edit.d.ts +1 -0
  793. package/dist/src/tools/edit.js +52 -82
  794. package/dist/src/tools/edit.js.map +1 -1
  795. package/dist/src/tools/edit.test.js +96 -1
  796. package/dist/src/tools/edit.test.js.map +1 -1
  797. package/dist/src/tools/enter-plan-mode.d.ts +25 -0
  798. package/dist/src/tools/enter-plan-mode.js +69 -0
  799. package/dist/src/tools/enter-plan-mode.js.map +1 -0
  800. package/dist/src/tools/enter-plan-mode.test.d.ts +6 -0
  801. package/dist/src/tools/enter-plan-mode.test.js +102 -0
  802. package/dist/src/tools/enter-plan-mode.test.js.map +1 -0
  803. package/dist/src/tools/exit-plan-mode.d.ts +33 -0
  804. package/dist/src/tools/exit-plan-mode.js +173 -0
  805. package/dist/src/tools/exit-plan-mode.js.map +1 -0
  806. package/dist/src/tools/exit-plan-mode.test.d.ts +6 -0
  807. package/dist/src/tools/exit-plan-mode.test.js +311 -0
  808. package/dist/src/tools/exit-plan-mode.test.js.map +1 -0
  809. package/dist/src/tools/get-internal-docs.d.ts +1 -0
  810. package/dist/src/tools/get-internal-docs.js +17 -27
  811. package/dist/src/tools/get-internal-docs.js.map +1 -1
  812. package/dist/src/tools/glob.d.ts +1 -0
  813. package/dist/src/tools/glob.js +15 -36
  814. package/dist/src/tools/glob.js.map +1 -1
  815. package/dist/src/tools/glob.test.js +219 -280
  816. package/dist/src/tools/glob.test.js.map +1 -1
  817. package/dist/src/tools/grep.d.ts +18 -8
  818. package/dist/src/tools/grep.js +273 -247
  819. package/dist/src/tools/grep.js.map +1 -1
  820. package/dist/src/tools/grep.test.js +165 -16
  821. package/dist/src/tools/grep.test.js.map +1 -1
  822. package/dist/src/tools/line-endings.test.d.ts +6 -0
  823. package/dist/src/tools/line-endings.test.js +209 -0
  824. package/dist/src/tools/line-endings.test.js.map +1 -0
  825. package/dist/src/tools/ls.d.ts +1 -0
  826. package/dist/src/tools/ls.js +18 -37
  827. package/dist/src/tools/ls.js.map +1 -1
  828. package/dist/src/tools/ls.test.js +25 -3
  829. package/dist/src/tools/ls.test.js.map +1 -1
  830. package/dist/src/tools/mcp-client-manager.d.ts +18 -5
  831. package/dist/src/tools/mcp-client-manager.js +118 -37
  832. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  833. package/dist/src/tools/mcp-client-manager.test.js +124 -16
  834. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  835. package/dist/src/tools/mcp-client.d.ts +18 -7
  836. package/dist/src/tools/mcp-client.js +137 -42
  837. package/dist/src/tools/mcp-client.js.map +1 -1
  838. package/dist/src/tools/mcp-client.test.js +248 -29
  839. package/dist/src/tools/mcp-client.test.js.map +1 -1
  840. package/dist/src/tools/mcp-tool.d.ts +26 -4
  841. package/dist/src/tools/mcp-tool.js +17 -5
  842. package/dist/src/tools/mcp-tool.js.map +1 -1
  843. package/dist/src/tools/mcp-tool.test.js +5 -5
  844. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  845. package/dist/src/tools/memoryTool.d.ts +2 -7
  846. package/dist/src/tools/memoryTool.js +54 -80
  847. package/dist/src/tools/memoryTool.js.map +1 -1
  848. package/dist/src/tools/memoryTool.test.js +62 -114
  849. package/dist/src/tools/memoryTool.test.js.map +1 -1
  850. package/dist/src/tools/modifiable-tool.test.js +3 -3
  851. package/dist/src/tools/modifiable-tool.test.js.map +1 -1
  852. package/dist/src/tools/read-file.d.ts +2 -0
  853. package/dist/src/tools/read-file.js +26 -30
  854. package/dist/src/tools/read-file.js.map +1 -1
  855. package/dist/src/tools/read-file.test.js +90 -3
  856. package/dist/src/tools/read-file.test.js.map +1 -1
  857. package/dist/src/tools/read-many-files.d.ts +1 -0
  858. package/dist/src/tools/read-many-files.js +21 -63
  859. package/dist/src/tools/read-many-files.js.map +1 -1
  860. package/dist/src/tools/read-many-files.test.js +43 -1
  861. package/dist/src/tools/read-many-files.test.js.map +1 -1
  862. package/dist/src/tools/ripGrep.d.ts +20 -3
  863. package/dist/src/tools/ripGrep.js +217 -189
  864. package/dist/src/tools/ripGrep.js.map +1 -1
  865. package/dist/src/tools/ripGrep.test.js +745 -567
  866. package/dist/src/tools/ripGrep.test.js.map +1 -1
  867. package/dist/src/tools/shell.d.ts +1 -0
  868. package/dist/src/tools/shell.js +8 -3
  869. package/dist/src/tools/shell.js.map +1 -1
  870. package/dist/src/tools/shell.test.js +248 -11
  871. package/dist/src/tools/shell.test.js.map +1 -1
  872. package/dist/src/tools/tool-error.d.ts +4 -0
  873. package/dist/src/tools/tool-error.js +4 -0
  874. package/dist/src/tools/tool-error.js.map +1 -1
  875. package/dist/src/tools/tool-names.d.ts +27 -17
  876. package/dist/src/tools/tool-names.js +59 -20
  877. package/dist/src/tools/tool-names.js.map +1 -1
  878. package/dist/src/tools/tool-names.test.js +55 -2
  879. package/dist/src/tools/tool-names.test.js.map +1 -1
  880. package/dist/src/tools/tool-registry.d.ts +10 -2
  881. package/dist/src/tools/tool-registry.js +58 -11
  882. package/dist/src/tools/tool-registry.js.map +1 -1
  883. package/dist/src/tools/tool-registry.test.js +113 -1
  884. package/dist/src/tools/tool-registry.test.js.map +1 -1
  885. package/dist/src/tools/tools.d.ts +52 -5
  886. package/dist/src/tools/tools.js +35 -18
  887. package/dist/src/tools/tools.js.map +1 -1
  888. package/dist/src/tools/web-fetch.d.ts +1 -0
  889. package/dist/src/tools/web-fetch.js +12 -12
  890. package/dist/src/tools/web-fetch.js.map +1 -1
  891. package/dist/src/tools/web-search.d.ts +1 -0
  892. package/dist/src/tools/web-search.js +9 -11
  893. package/dist/src/tools/web-search.js.map +1 -1
  894. package/dist/src/tools/write-file.d.ts +1 -4
  895. package/dist/src/tools/write-file.js +42 -35
  896. package/dist/src/tools/write-file.js.map +1 -1
  897. package/dist/src/tools/write-file.test.js +105 -18
  898. package/dist/src/tools/write-file.test.js.map +1 -1
  899. package/dist/src/tools/write-todos.d.ts +1 -30
  900. package/dist/src/tools/write-todos.js +5 -123
  901. package/dist/src/tools/write-todos.js.map +1 -1
  902. package/dist/src/tools/xcode-mcp-fix-transport.d.ts +30 -0
  903. package/dist/src/tools/xcode-mcp-fix-transport.js +82 -0
  904. package/dist/src/tools/xcode-mcp-fix-transport.js.map +1 -0
  905. package/dist/src/tools/xcode-mcp-fix-transport.test.d.ts +1 -0
  906. package/dist/src/tools/xcode-mcp-fix-transport.test.js +98 -0
  907. package/dist/src/tools/xcode-mcp-fix-transport.test.js.map +1 -0
  908. package/dist/src/utils/apiConversionUtils.d.ts +12 -0
  909. package/dist/src/utils/apiConversionUtils.js +46 -0
  910. package/dist/src/utils/apiConversionUtils.js.map +1 -0
  911. package/dist/src/utils/apiConversionUtils.test.d.ts +6 -0
  912. package/dist/src/utils/apiConversionUtils.test.js +150 -0
  913. package/dist/src/utils/apiConversionUtils.test.js.map +1 -0
  914. package/dist/src/utils/authConsent.d.ts +10 -0
  915. package/dist/src/utils/authConsent.js +52 -0
  916. package/dist/src/utils/authConsent.js.map +1 -0
  917. package/dist/src/utils/authConsent.test.d.ts +6 -0
  918. package/dist/src/utils/authConsent.test.js +74 -0
  919. package/dist/src/utils/authConsent.test.js.map +1 -0
  920. package/dist/src/utils/bfsFileSearch.js +2 -0
  921. package/dist/src/utils/bfsFileSearch.js.map +1 -1
  922. package/dist/src/utils/bfsFileSearch.test.js +6 -1
  923. package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
  924. package/dist/src/utils/checkpointUtils.d.ts +2 -2
  925. package/dist/src/utils/checkpointUtils.js +2 -0
  926. package/dist/src/utils/checkpointUtils.js.map +1 -1
  927. package/dist/src/utils/checks.d.ts +19 -0
  928. package/dist/src/utils/checks.js +24 -0
  929. package/dist/src/utils/checks.js.map +1 -0
  930. package/dist/src/utils/checks.test.d.ts +6 -0
  931. package/dist/src/utils/checks.test.js +29 -0
  932. package/dist/src/utils/checks.test.js.map +1 -0
  933. package/dist/src/utils/constants.d.ts +7 -0
  934. package/dist/src/utils/constants.js +8 -0
  935. package/dist/src/utils/constants.js.map +1 -0
  936. package/dist/src/utils/deadlineTimer.d.ts +36 -0
  937. package/dist/src/utils/deadlineTimer.js +87 -0
  938. package/dist/src/utils/deadlineTimer.js.map +1 -0
  939. package/dist/src/utils/deadlineTimer.test.d.ts +6 -0
  940. package/dist/src/utils/deadlineTimer.test.js +64 -0
  941. package/dist/src/utils/deadlineTimer.test.js.map +1 -0
  942. package/dist/src/utils/editCorrector.d.ts +3 -3
  943. package/dist/src/utils/editCorrector.js +37 -10
  944. package/dist/src/utils/editCorrector.js.map +1 -1
  945. package/dist/src/utils/editCorrector.test.js +49 -20
  946. package/dist/src/utils/editCorrector.test.js.map +1 -1
  947. package/dist/src/utils/editor.d.ts +17 -3
  948. package/dist/src/utils/editor.js +84 -15
  949. package/dist/src/utils/editor.js.map +1 -1
  950. package/dist/src/utils/editor.test.js +160 -17
  951. package/dist/src/utils/editor.test.js.map +1 -1
  952. package/dist/src/utils/environmentContext.js +9 -20
  953. package/dist/src/utils/environmentContext.js.map +1 -1
  954. package/dist/src/utils/environmentContext.test.js +31 -14
  955. package/dist/src/utils/environmentContext.test.js.map +1 -1
  956. package/dist/src/utils/errors.d.ts +3 -0
  957. package/dist/src/utils/errors.js +13 -3
  958. package/dist/src/utils/errors.js.map +1 -1
  959. package/dist/src/utils/errors.test.js +23 -1
  960. package/dist/src/utils/errors.test.js.map +1 -1
  961. package/dist/src/utils/events.d.ts +107 -3
  962. package/dist/src/utils/events.js +65 -1
  963. package/dist/src/utils/events.js.map +1 -1
  964. package/dist/src/utils/events.test.js +43 -0
  965. package/dist/src/utils/events.test.js.map +1 -1
  966. package/dist/src/utils/extensionLoader.js +2 -0
  967. package/dist/src/utils/extensionLoader.js.map +1 -1
  968. package/dist/src/utils/extensionLoader.test.js +21 -0
  969. package/dist/src/utils/extensionLoader.test.js.map +1 -1
  970. package/dist/src/utils/fastAckHelper.d.ts +30 -0
  971. package/dist/src/utils/fastAckHelper.js +142 -0
  972. package/dist/src/utils/fastAckHelper.js.map +1 -0
  973. package/dist/src/utils/fastAckHelper.test.d.ts +6 -0
  974. package/dist/src/utils/fastAckHelper.test.js +115 -0
  975. package/dist/src/utils/fastAckHelper.test.js.map +1 -0
  976. package/dist/src/utils/fileDiffUtils.d.ts +18 -0
  977. package/dist/src/utils/fileDiffUtils.js +37 -0
  978. package/dist/src/utils/fileDiffUtils.js.map +1 -0
  979. package/dist/src/utils/fileDiffUtils.test.d.ts +6 -0
  980. package/dist/src/utils/fileDiffUtils.test.js +84 -0
  981. package/dist/src/utils/fileDiffUtils.test.js.map +1 -0
  982. package/dist/src/utils/fileUtils.d.ts +27 -3
  983. package/dist/src/utils/fileUtils.js +104 -60
  984. package/dist/src/utils/fileUtils.js.map +1 -1
  985. package/dist/src/utils/fileUtils.test.js +129 -109
  986. package/dist/src/utils/fileUtils.test.js.map +1 -1
  987. package/dist/src/utils/filesearch/crawler.d.ts +1 -0
  988. package/dist/src/utils/filesearch/crawler.js +18 -1
  989. package/dist/src/utils/filesearch/crawler.js.map +1 -1
  990. package/dist/src/utils/filesearch/crawler.test.js +101 -82
  991. package/dist/src/utils/filesearch/crawler.test.js.map +1 -1
  992. package/dist/src/utils/filesearch/fileSearch.d.ts +4 -3
  993. package/dist/src/utils/filesearch/fileSearch.js +5 -4
  994. package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
  995. package/dist/src/utils/filesearch/fileSearch.test.js +172 -84
  996. package/dist/src/utils/filesearch/fileSearch.test.js.map +1 -1
  997. package/dist/src/utils/filesearch/ignore.d.ts +2 -7
  998. package/dist/src/utils/filesearch/ignore.js +7 -14
  999. package/dist/src/utils/filesearch/ignore.js.map +1 -1
  1000. package/dist/src/utils/filesearch/ignore.test.js +30 -32
  1001. package/dist/src/utils/filesearch/ignore.test.js.map +1 -1
  1002. package/dist/src/utils/formatters.d.ts +1 -1
  1003. package/dist/src/utils/formatters.js +1 -1
  1004. package/dist/src/utils/formatters.js.map +1 -1
  1005. package/dist/src/utils/formatters.test.js +5 -5
  1006. package/dist/src/utils/formatters.test.js.map +1 -1
  1007. package/dist/src/utils/generateContentResponseUtilities.js +3 -0
  1008. package/dist/src/utils/generateContentResponseUtilities.js.map +1 -1
  1009. package/dist/src/utils/getFolderStructure.test.js +5 -2
  1010. package/dist/src/utils/getFolderStructure.test.js.map +1 -1
  1011. package/dist/src/utils/getPty.js +3 -0
  1012. package/dist/src/utils/getPty.js.map +1 -1
  1013. package/dist/src/utils/gitIgnoreParser.js +10 -11
  1014. package/dist/src/utils/gitIgnoreParser.js.map +1 -1
  1015. package/dist/src/utils/googleErrors.js +4 -0
  1016. package/dist/src/utils/googleErrors.js.map +1 -1
  1017. package/dist/src/utils/googleQuotaErrors.d.ts +23 -9
  1018. package/dist/src/utils/googleQuotaErrors.js +90 -23
  1019. package/dist/src/utils/googleQuotaErrors.js.map +1 -1
  1020. package/dist/src/utils/googleQuotaErrors.test.js +168 -23
  1021. package/dist/src/utils/googleQuotaErrors.test.js.map +1 -1
  1022. package/dist/src/utils/headless.d.ts +26 -0
  1023. package/dist/src/utils/headless.js +33 -0
  1024. package/dist/src/utils/headless.js.map +1 -0
  1025. package/dist/src/utils/headless.test.d.ts +6 -0
  1026. package/dist/src/utils/headless.test.js +167 -0
  1027. package/dist/src/utils/headless.test.js.map +1 -0
  1028. package/dist/src/utils/httpErrors.js +4 -1
  1029. package/dist/src/utils/httpErrors.js.map +1 -1
  1030. package/dist/src/utils/ignoreFileParser.d.ts +30 -0
  1031. package/dist/src/utils/ignoreFileParser.js +100 -0
  1032. package/dist/src/utils/ignoreFileParser.js.map +1 -0
  1033. package/dist/src/utils/ignoreFileParser.test.d.ts +6 -0
  1034. package/dist/src/utils/ignoreFileParser.test.js +167 -0
  1035. package/dist/src/utils/ignoreFileParser.test.js.map +1 -0
  1036. package/dist/src/utils/installationManager.test.js +11 -3
  1037. package/dist/src/utils/installationManager.test.js.map +1 -1
  1038. package/dist/src/utils/llm-edit-fixer.js +9 -9
  1039. package/dist/src/utils/llm-edit-fixer.js.map +1 -1
  1040. package/dist/src/utils/llm-edit-fixer.test.js +2 -2
  1041. package/dist/src/utils/llm-edit-fixer.test.js.map +1 -1
  1042. package/dist/src/utils/memoryDiscovery.d.ts +11 -3
  1043. package/dist/src/utils/memoryDiscovery.js +122 -102
  1044. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  1045. package/dist/src/utils/memoryDiscovery.test.js +163 -109
  1046. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  1047. package/dist/src/utils/memoryImportProcessor.js +7 -24
  1048. package/dist/src/utils/memoryImportProcessor.js.map +1 -1
  1049. package/dist/src/utils/nextSpeakerChecker.js +3 -0
  1050. package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
  1051. package/dist/src/utils/package.js +10 -3
  1052. package/dist/src/utils/package.js.map +1 -1
  1053. package/dist/src/utils/package.test.d.ts +6 -0
  1054. package/dist/src/utils/package.test.js +57 -0
  1055. package/dist/src/utils/package.test.js.map +1 -0
  1056. package/dist/src/utils/partUtils.js +2 -1
  1057. package/dist/src/utils/partUtils.js.map +1 -1
  1058. package/dist/src/utils/paths.d.ts +33 -9
  1059. package/dist/src/utils/paths.js +88 -29
  1060. package/dist/src/utils/paths.js.map +1 -1
  1061. package/dist/src/utils/paths.test.js +206 -110
  1062. package/dist/src/utils/paths.test.js.map +1 -1
  1063. package/dist/src/utils/planUtils.d.ts +29 -0
  1064. package/dist/src/utils/planUtils.js +55 -0
  1065. package/dist/src/utils/planUtils.js.map +1 -0
  1066. package/dist/src/utils/planUtils.test.d.ts +6 -0
  1067. package/dist/src/utils/planUtils.test.js +76 -0
  1068. package/dist/src/utils/planUtils.test.js.map +1 -0
  1069. package/dist/src/utils/process-utils.d.ts +32 -0
  1070. package/dist/src/utils/process-utils.js +88 -0
  1071. package/dist/src/utils/process-utils.js.map +1 -0
  1072. package/dist/src/utils/process-utils.test.d.ts +6 -0
  1073. package/dist/src/utils/process-utils.test.js +103 -0
  1074. package/dist/src/utils/process-utils.test.js.map +1 -0
  1075. package/dist/src/utils/promptIdContext.d.ts +6 -0
  1076. package/dist/src/utils/promptIdContext.js +15 -0
  1077. package/dist/src/utils/promptIdContext.js.map +1 -1
  1078. package/dist/src/utils/quotaErrorDetection.js +3 -0
  1079. package/dist/src/utils/quotaErrorDetection.js.map +1 -1
  1080. package/dist/src/utils/retry.d.ts +4 -0
  1081. package/dist/src/utils/retry.js +84 -5
  1082. package/dist/src/utils/retry.js.map +1 -1
  1083. package/dist/src/utils/retry.test.js +70 -3
  1084. package/dist/src/utils/retry.test.js.map +1 -1
  1085. package/dist/src/utils/safeJsonStringify.js +1 -0
  1086. package/dist/src/utils/safeJsonStringify.js.map +1 -1
  1087. package/dist/src/utils/schemaValidator.d.ts +8 -1
  1088. package/dist/src/utils/schemaValidator.js +78 -11
  1089. package/dist/src/utils/schemaValidator.js.map +1 -1
  1090. package/dist/src/utils/schemaValidator.test.js +77 -0
  1091. package/dist/src/utils/schemaValidator.test.js.map +1 -1
  1092. package/dist/src/utils/security.d.ts +16 -0
  1093. package/dist/src/utils/security.js +91 -0
  1094. package/dist/src/utils/security.js.map +1 -0
  1095. package/dist/src/utils/security.test.d.ts +1 -0
  1096. package/dist/src/utils/security.test.js +121 -0
  1097. package/dist/src/utils/security.test.js.map +1 -0
  1098. package/dist/src/utils/shell-utils.d.ts +14 -0
  1099. package/dist/src/utils/shell-utils.integration.test.d.ts +1 -0
  1100. package/dist/src/utils/shell-utils.integration.test.js +58 -0
  1101. package/dist/src/utils/shell-utils.integration.test.js.map +1 -0
  1102. package/dist/src/utils/shell-utils.js +191 -30
  1103. package/dist/src/utils/shell-utils.js.map +1 -1
  1104. package/dist/src/utils/shell-utils.test.js +108 -1
  1105. package/dist/src/utils/shell-utils.test.js.map +1 -1
  1106. package/dist/src/utils/summarizer.js +2 -1
  1107. package/dist/src/utils/summarizer.js.map +1 -1
  1108. package/dist/src/utils/terminal.d.ts +4 -0
  1109. package/dist/src/utils/terminal.js +12 -0
  1110. package/dist/src/utils/terminal.js.map +1 -1
  1111. package/dist/src/utils/terminalSerializer.d.ts +1 -1
  1112. package/dist/src/utils/terminalSerializer.js +25 -13
  1113. package/dist/src/utils/terminalSerializer.js.map +1 -1
  1114. package/dist/src/utils/testUtils.js +1 -0
  1115. package/dist/src/utils/testUtils.js.map +1 -1
  1116. package/dist/src/utils/textUtils.d.ts +14 -0
  1117. package/dist/src/utils/textUtils.js +23 -0
  1118. package/dist/src/utils/textUtils.js.map +1 -1
  1119. package/dist/src/utils/textUtils.test.js +18 -1
  1120. package/dist/src/utils/textUtils.test.js.map +1 -1
  1121. package/dist/src/utils/tokenCalculation.d.ts +2 -2
  1122. package/dist/src/utils/tokenCalculation.js +87 -21
  1123. package/dist/src/utils/tokenCalculation.js.map +1 -1
  1124. package/dist/src/utils/tokenCalculation.test.js +189 -76
  1125. package/dist/src/utils/tokenCalculation.test.js.map +1 -1
  1126. package/dist/src/utils/tool-utils.d.ts +26 -0
  1127. package/dist/src/utils/tool-utils.js +36 -0
  1128. package/dist/src/utils/tool-utils.js.map +1 -1
  1129. package/dist/src/utils/tool-utils.test.js +73 -3
  1130. package/dist/src/utils/tool-utils.test.js.map +1 -1
  1131. package/dist/src/utils/toolCallContext.d.ts +35 -0
  1132. package/dist/src/utils/toolCallContext.js +29 -0
  1133. package/dist/src/utils/toolCallContext.js.map +1 -0
  1134. package/dist/src/utils/toolCallContext.test.d.ts +6 -0
  1135. package/dist/src/utils/toolCallContext.test.js +68 -0
  1136. package/dist/src/utils/toolCallContext.test.js.map +1 -0
  1137. package/dist/src/utils/userAccountManager.js +1 -0
  1138. package/dist/src/utils/userAccountManager.js.map +1 -1
  1139. package/dist/src/utils/userAccountManager.test.js +5 -5
  1140. package/dist/src/utils/userAccountManager.test.js.map +1 -1
  1141. package/dist/src/utils/version.d.ts +2 -0
  1142. package/dist/src/utils/version.js +14 -3
  1143. package/dist/src/utils/version.js.map +1 -1
  1144. package/dist/src/utils/version.test.js +15 -1
  1145. package/dist/src/utils/version.test.js.map +1 -1
  1146. package/dist/src/utils/workspaceContext.d.ts +28 -0
  1147. package/dist/src/utils/workspaceContext.js +74 -9
  1148. package/dist/src/utils/workspaceContext.js.map +1 -1
  1149. package/dist/src/utils/workspaceContext.test.js +56 -1
  1150. package/dist/src/utils/workspaceContext.test.js.map +1 -1
  1151. package/dist/tsconfig.tsbuildinfo +1 -1
  1152. package/package.json +25 -15
@@ -5,12 +5,13 @@
5
5
  */
6
6
  import { describe, it, expect, vi } from 'vitest';
7
7
  import { CoreToolScheduler } from './coreToolScheduler.js';
8
- import { DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES, DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD, BaseDeclarativeTool, BaseToolInvocation, ToolConfirmationOutcome, Kind, ApprovalMode, HookSystem, } from '../index.js';
8
+ import { CoreToolCallStatus, } from '../scheduler/types.js';
9
+ import { DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD, BaseDeclarativeTool, BaseToolInvocation, ToolConfirmationOutcome, Kind, ApprovalMode, HookSystem, PolicyDecision, ToolErrorType, } from '../index.js';
9
10
  import { createMockMessageBus } from '../test-utils/mock-message-bus.js';
10
11
  import { MockModifiableTool, MockTool, MOCK_TOOL_SHOULD_CONFIRM_EXECUTE, } from '../test-utils/mock-tool.js';
11
12
  import * as modifiableToolModule from '../tools/modifiable-tool.js';
12
- import { isShellInvocationAllowlisted } from '../utils/shell-permissions.js';
13
13
  import { DEFAULT_GEMINI_MODEL } from '../config/models.js';
14
+ import { DiscoveredMCPTool } from '../tools/mcp-tool.js';
14
15
  vi.mock('fs/promises', () => ({
15
16
  writeFile: vi.fn(),
16
17
  }));
@@ -163,16 +164,34 @@ function createMockConfig(overrides = {}) {
163
164
  getProjectTempDir: () => '/tmp',
164
165
  },
165
166
  getTruncateToolOutputThreshold: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
166
- getTruncateToolOutputLines: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
167
167
  getToolRegistry: () => defaultToolRegistry,
168
168
  getActiveModel: () => DEFAULT_GEMINI_MODEL,
169
169
  getGeminiClient: () => null,
170
170
  getMessageBus: () => createMockMessageBus(),
171
171
  getEnableHooks: () => false,
172
- getPolicyEngine: () => null,
173
172
  getExperiments: () => { },
174
173
  };
175
- return { ...baseConfig, ...overrides };
174
+ const finalConfig = { ...baseConfig, ...overrides };
175
+ // Patch the policy engine to use the final config if not overridden
176
+ if (!overrides.getPolicyEngine) {
177
+ finalConfig.getPolicyEngine = () => ({
178
+ check: async (toolCall, _serverName) => {
179
+ // Mock simple policy logic for tests
180
+ const mode = finalConfig.getApprovalMode();
181
+ if (mode === ApprovalMode.YOLO) {
182
+ return { decision: PolicyDecision.ALLOW };
183
+ }
184
+ const allowed = finalConfig.getAllowedTools();
185
+ if (allowed &&
186
+ (allowed.includes(toolCall.name) ||
187
+ allowed.some((p) => toolCall.name.startsWith(p)))) {
188
+ return { decision: PolicyDecision.ALLOW };
189
+ }
190
+ return { decision: PolicyDecision.ASK_USER };
191
+ },
192
+ });
193
+ }
194
+ return finalConfig;
176
195
  }
177
196
  describe('CoreToolScheduler', () => {
178
197
  it('should cancel a tool call if the signal is aborted before confirmation', async () => {
@@ -219,7 +238,7 @@ describe('CoreToolScheduler', () => {
219
238
  expect(onAllToolCallsComplete).toHaveBeenCalled();
220
239
  const completedCalls = onAllToolCallsComplete.mock
221
240
  .calls[0][0];
222
- expect(completedCalls[0].status).toBe('cancelled');
241
+ expect(completedCalls[0].status).toBe(CoreToolCallStatus.Cancelled);
223
242
  });
224
243
  it('should cancel all tools when cancelAll is called', async () => {
225
244
  const mockTool1 = new MockTool({
@@ -296,7 +315,7 @@ describe('CoreToolScheduler', () => {
296
315
  // Don't await, let it run in the background
297
316
  void scheduler.schedule(requests, abortController.signal);
298
317
  // Wait for the first tool to be awaiting approval
299
- await waitForStatus(onToolCallsUpdate, 'awaiting_approval');
318
+ await waitForStatus(onToolCallsUpdate, CoreToolCallStatus.AwaitingApproval);
300
319
  // Cancel all operations
301
320
  scheduler.cancelAll(abortController.signal);
302
321
  abortController.abort(); // Also fire the signal
@@ -306,9 +325,9 @@ describe('CoreToolScheduler', () => {
306
325
  const completedCalls = onAllToolCallsComplete.mock
307
326
  .calls[0][0];
308
327
  expect(completedCalls).toHaveLength(3);
309
- expect(completedCalls.find((c) => c.request.callId === '1')?.status).toBe('cancelled');
310
- expect(completedCalls.find((c) => c.request.callId === '2')?.status).toBe('cancelled');
311
- expect(completedCalls.find((c) => c.request.callId === '3')?.status).toBe('cancelled');
328
+ expect(completedCalls.find((c) => c.request.callId === '1')?.status).toBe(CoreToolCallStatus.Cancelled);
329
+ expect(completedCalls.find((c) => c.request.callId === '2')?.status).toBe(CoreToolCallStatus.Cancelled);
330
+ expect(completedCalls.find((c) => c.request.callId === '3')?.status).toBe(CoreToolCallStatus.Cancelled);
312
331
  });
313
332
  it('should cancel all tools in a batch when one is cancelled via confirmation', async () => {
314
333
  const mockTool1 = new MockTool({
@@ -385,9 +404,10 @@ describe('CoreToolScheduler', () => {
385
404
  // Don't await, let it run in the background
386
405
  void scheduler.schedule(requests, abortController.signal);
387
406
  // Wait for the first tool to be awaiting approval
388
- const awaitingCall = (await waitForStatus(onToolCallsUpdate, 'awaiting_approval'));
407
+ const awaitingCall = (await waitForStatus(onToolCallsUpdate, CoreToolCallStatus.AwaitingApproval));
389
408
  // Cancel the first tool via its confirmation handler
390
- await awaitingCall.confirmationDetails.onConfirm(ToolConfirmationOutcome.Cancel);
409
+ const confirmationDetails = awaitingCall.confirmationDetails;
410
+ await confirmationDetails.onConfirm(ToolConfirmationOutcome.Cancel);
391
411
  abortController.abort(); // User cancelling often involves an abort signal
392
412
  await vi.waitFor(() => {
393
413
  expect(onAllToolCallsComplete).toHaveBeenCalled();
@@ -395,9 +415,9 @@ describe('CoreToolScheduler', () => {
395
415
  const completedCalls = onAllToolCallsComplete.mock
396
416
  .calls[0][0];
397
417
  expect(completedCalls).toHaveLength(3);
398
- expect(completedCalls.find((c) => c.request.callId === '1')?.status).toBe('cancelled');
399
- expect(completedCalls.find((c) => c.request.callId === '2')?.status).toBe('cancelled');
400
- expect(completedCalls.find((c) => c.request.callId === '3')?.status).toBe('cancelled');
418
+ expect(completedCalls.find((c) => c.request.callId === '1')?.status).toBe(CoreToolCallStatus.Cancelled);
419
+ expect(completedCalls.find((c) => c.request.callId === '2')?.status).toBe(CoreToolCallStatus.Cancelled);
420
+ expect(completedCalls.find((c) => c.request.callId === '3')?.status).toBe(CoreToolCallStatus.Cancelled);
401
421
  });
402
422
  it('should mark tool call as cancelled when abort happens during confirmation error', async () => {
403
423
  const abortController = new AbortController();
@@ -420,7 +440,7 @@ describe('CoreToolScheduler', () => {
420
440
  const onToolCallsUpdate = vi.fn();
421
441
  const mockConfig = createMockConfig({
422
442
  getToolRegistry: () => mockToolRegistry,
423
- isInteractive: () => false,
443
+ isInteractive: () => true,
424
444
  });
425
445
  const scheduler = new CoreToolScheduler({
426
446
  config: mockConfig,
@@ -439,9 +459,9 @@ describe('CoreToolScheduler', () => {
439
459
  expect(onAllToolCallsComplete).toHaveBeenCalled();
440
460
  const completedCalls = onAllToolCallsComplete.mock
441
461
  .calls[0][0];
442
- expect(completedCalls[0].status).toBe('cancelled');
462
+ expect(completedCalls[0].status).toBe(CoreToolCallStatus.Cancelled);
443
463
  const statuses = onToolCallsUpdate.mock.calls.flatMap((call) => call[0].map((toolCall) => toolCall.status));
444
- expect(statuses).not.toContain('error');
464
+ expect(statuses).not.toContain(CoreToolCallStatus.Error);
445
465
  });
446
466
  it('should error when tool requires confirmation in non-interactive mode', async () => {
447
467
  const mockTool = new MockTool({
@@ -486,7 +506,7 @@ describe('CoreToolScheduler', () => {
486
506
  expect(onAllToolCallsComplete).toHaveBeenCalled();
487
507
  const completedCalls = onAllToolCallsComplete.mock
488
508
  .calls[0][0];
489
- expect(completedCalls[0].status).toBe('error');
509
+ expect(completedCalls[0].status).toBe(CoreToolCallStatus.Error);
490
510
  const erroredCall = completedCalls[0];
491
511
  const errorResponse = erroredCall.response;
492
512
  const errorParts = errorResponse.responseParts;
@@ -539,19 +559,23 @@ describe('CoreToolScheduler with payload', () => {
539
559
  prompt_id: 'prompt-id-2',
540
560
  };
541
561
  await scheduler.schedule([request], abortController.signal);
542
- const awaitingCall = (await waitForStatus(onToolCallsUpdate, 'awaiting_approval'));
562
+ const awaitingCall = (await waitForStatus(onToolCallsUpdate, CoreToolCallStatus.AwaitingApproval));
543
563
  const confirmationDetails = awaitingCall.confirmationDetails;
544
564
  if (confirmationDetails) {
545
565
  const payload = { newContent: 'final version' };
546
566
  await confirmationDetails.onConfirm(ToolConfirmationOutcome.ProceedOnce, payload);
547
567
  }
568
+ // After internal update, the tool should be awaiting approval again with the NEW content.
569
+ const updatedAwaitingCall = (await waitForStatus(onToolCallsUpdate, CoreToolCallStatus.AwaitingApproval));
570
+ // Now confirm for real to execute.
571
+ await updatedAwaitingCall.confirmationDetails.onConfirm(ToolConfirmationOutcome.ProceedOnce);
548
572
  // Wait for the tool execution to complete
549
573
  await vi.waitFor(() => {
550
574
  expect(onAllToolCallsComplete).toHaveBeenCalled();
551
575
  });
552
576
  const completedCalls = onAllToolCallsComplete.mock
553
577
  .calls[0][0];
554
- expect(completedCalls[0].status).toBe('success');
578
+ expect(completedCalls[0].status).toBe(CoreToolCallStatus.Success);
555
579
  expect(mockTool.executeFn).toHaveBeenCalledWith({
556
580
  newContent: 'final version',
557
581
  });
@@ -633,7 +657,7 @@ describe('CoreToolScheduler edit cancellation', () => {
633
657
  prompt_id: 'prompt-id-1',
634
658
  };
635
659
  await scheduler.schedule([request], abortController.signal);
636
- const awaitingCall = (await waitForStatus(onToolCallsUpdate, 'awaiting_approval'));
660
+ const awaitingCall = (await waitForStatus(onToolCallsUpdate, CoreToolCallStatus.AwaitingApproval));
637
661
  // Cancel the edit
638
662
  const confirmationDetails = awaitingCall.confirmationDetails;
639
663
  if (confirmationDetails) {
@@ -642,7 +666,7 @@ describe('CoreToolScheduler edit cancellation', () => {
642
666
  expect(onAllToolCallsComplete).toHaveBeenCalled();
643
667
  const completedCalls = onAllToolCallsComplete.mock
644
668
  .calls[0][0];
645
- expect(completedCalls[0].status).toBe('cancelled');
669
+ expect(completedCalls[0].status).toBe(CoreToolCallStatus.Cancelled);
646
670
  // Check that the diff is preserved
647
671
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
648
672
  const cancelledCall = completedCalls[0];
@@ -715,24 +739,24 @@ describe('CoreToolScheduler YOLO mode', () => {
715
739
  // Assert
716
740
  // 1. The tool's execute method was called directly.
717
741
  expect(executeFn).toHaveBeenCalledWith({ param: 'value' });
718
- // 2. The tool call status never entered 'awaiting_approval'.
742
+ // 2. The tool call status never entered CoreToolCallStatus.AwaitingApproval.
719
743
  const statusUpdates = onToolCallsUpdate.mock.calls
720
744
  .map((call) => call[0][0]?.status)
721
745
  .filter(Boolean);
722
- expect(statusUpdates).not.toContain('awaiting_approval');
746
+ expect(statusUpdates).not.toContain(CoreToolCallStatus.AwaitingApproval);
723
747
  expect(statusUpdates).toEqual([
724
- 'validating',
725
- 'scheduled',
726
- 'executing',
727
- 'success',
748
+ CoreToolCallStatus.Validating,
749
+ CoreToolCallStatus.Scheduled,
750
+ CoreToolCallStatus.Executing,
751
+ CoreToolCallStatus.Success,
728
752
  ]);
729
753
  // 3. The final callback indicates the tool call was successful.
730
754
  const completedCalls = onAllToolCallsComplete.mock
731
755
  .calls[0][0];
732
756
  expect(completedCalls).toHaveLength(1);
733
757
  const completedCall = completedCalls[0];
734
- expect(completedCall.status).toBe('success');
735
- if (completedCall.status === 'success') {
758
+ expect(completedCall.status).toBe(CoreToolCallStatus.Success);
759
+ if (completedCall.status === CoreToolCallStatus.Success) {
736
760
  expect(completedCall.response.resultDisplay).toBe('Tool executed');
737
761
  }
738
762
  });
@@ -796,8 +820,8 @@ describe('CoreToolScheduler request queueing', () => {
796
820
  // Schedule the first call, which will pause execution.
797
821
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
798
822
  scheduler.schedule([request1], abortController.signal);
799
- // Wait for the first call to be in the 'executing' state.
800
- await waitForStatus(onToolCallsUpdate, 'executing');
823
+ // Wait for the first call to be in the CoreToolCallStatus.Executing state.
824
+ await waitForStatus(onToolCallsUpdate, CoreToolCallStatus.Executing);
801
825
  // Schedule the second call while the first is "running".
802
826
  const schedulePromise2 = scheduler.schedule([request2], abortController.signal);
803
827
  // Ensure the second tool call hasn't been executed yet.
@@ -827,8 +851,8 @@ describe('CoreToolScheduler request queueing', () => {
827
851
  expect(onAllToolCallsComplete).toHaveBeenCalledTimes(2);
828
852
  });
829
853
  // Verify the completion callbacks were called correctly.
830
- expect(onAllToolCallsComplete.mock.calls[0][0][0].status).toBe('success');
831
- expect(onAllToolCallsComplete.mock.calls[1][0][0].status).toBe('success');
854
+ expect(onAllToolCallsComplete.mock.calls[0][0][0].status).toBe(CoreToolCallStatus.Success);
855
+ expect(onAllToolCallsComplete.mock.calls[1][0][0].status).toBe(CoreToolCallStatus.Success);
832
856
  });
833
857
  it('should auto-approve a tool call if it is on the allowedTools list', async () => {
834
858
  // Arrange
@@ -901,16 +925,16 @@ describe('CoreToolScheduler request queueing', () => {
901
925
  // Assert
902
926
  // 1. The tool's execute method was called directly.
903
927
  expect(executeFn).toHaveBeenCalledWith({ param: 'value' });
904
- // 2. The tool call status never entered 'awaiting_approval'.
928
+ // 2. The tool call status never entered CoreToolCallStatus.AwaitingApproval.
905
929
  const statusUpdates = onToolCallsUpdate.mock.calls
906
930
  .map((call) => call[0][0]?.status)
907
931
  .filter(Boolean);
908
- expect(statusUpdates).not.toContain('awaiting_approval');
932
+ expect(statusUpdates).not.toContain(CoreToolCallStatus.AwaitingApproval);
909
933
  expect(statusUpdates).toEqual([
910
- 'validating',
911
- 'scheduled',
912
- 'executing',
913
- 'success',
934
+ CoreToolCallStatus.Validating,
935
+ CoreToolCallStatus.Scheduled,
936
+ CoreToolCallStatus.Executing,
937
+ CoreToolCallStatus.Success,
914
938
  ]);
915
939
  // 3. The final callback indicates the tool call was successful.
916
940
  expect(onAllToolCallsComplete).toHaveBeenCalled();
@@ -918,15 +942,12 @@ describe('CoreToolScheduler request queueing', () => {
918
942
  .calls[0][0];
919
943
  expect(completedCalls).toHaveLength(1);
920
944
  const completedCall = completedCalls[0];
921
- expect(completedCall.status).toBe('success');
922
- if (completedCall.status === 'success') {
945
+ expect(completedCall.status).toBe(CoreToolCallStatus.Success);
946
+ if (completedCall.status === CoreToolCallStatus.Success) {
923
947
  expect(completedCall.response.resultDisplay).toBe('Tool executed');
924
948
  }
925
949
  });
926
950
  it('should require approval for a chained shell command even when prefix is allowlisted', async () => {
927
- expect(isShellInvocationAllowlisted({
928
- params: { command: 'git status && rm -rf /tmp/should-not-run' },
929
- }, ['run_shell_command(git)'])).toBe(false);
930
951
  const executeFn = vi.fn().mockResolvedValue({
931
952
  llmContent: 'Shell command executed',
932
953
  returnDisplay: 'Shell command executed',
@@ -938,6 +959,7 @@ describe('CoreToolScheduler request queueing', () => {
938
959
  title: 'Confirm Shell Command',
939
960
  command: String(params['command'] ?? ''),
940
961
  rootCommand: 'git',
962
+ rootCommands: ['git'],
941
963
  onConfirm: async () => { },
942
964
  }),
943
965
  execute: () => executeFn({}),
@@ -970,6 +992,9 @@ describe('CoreToolScheduler request queueing', () => {
970
992
  }),
971
993
  getToolRegistry: () => toolRegistry,
972
994
  getHookSystem: () => undefined,
995
+ getPolicyEngine: () => ({
996
+ check: async () => ({ decision: PolicyDecision.ASK_USER }),
997
+ }),
973
998
  });
974
999
  const scheduler = new CoreToolScheduler({
975
1000
  config: mockConfig,
@@ -989,7 +1014,7 @@ describe('CoreToolScheduler request queueing', () => {
989
1014
  const statusUpdates = onToolCallsUpdate.mock.calls
990
1015
  .map((call) => call[0][0]?.status)
991
1016
  .filter(Boolean);
992
- expect(statusUpdates).toContain('awaiting_approval');
1017
+ expect(statusUpdates).toContain(CoreToolCallStatus.AwaitingApproval);
993
1018
  expect(executeFn).not.toHaveBeenCalled();
994
1019
  expect(onAllToolCallsComplete).not.toHaveBeenCalled();
995
1020
  }, 20000);
@@ -1104,12 +1129,13 @@ describe('CoreToolScheduler request queueing', () => {
1104
1129
  onToolCallsUpdate(toolCalls);
1105
1130
  // Capture confirmation handlers for awaiting_approval tools
1106
1131
  toolCalls.forEach((call) => {
1107
- if (call.status === 'awaiting_approval') {
1132
+ if (call.status === CoreToolCallStatus.AwaitingApproval) {
1108
1133
  const waitingCall = call;
1109
- if (waitingCall.confirmationDetails?.onConfirm) {
1110
- const originalHandler = pendingConfirmations.find((h) => h === waitingCall.confirmationDetails.onConfirm);
1134
+ const details = waitingCall.confirmationDetails;
1135
+ if (details?.onConfirm) {
1136
+ const originalHandler = pendingConfirmations.find((h) => h === details.onConfirm);
1111
1137
  if (!originalHandler) {
1112
- pendingConfirmations.push(waitingCall.confirmationDetails.onConfirm);
1138
+ pendingConfirmations.push(details.onConfirm);
1113
1139
  }
1114
1140
  }
1115
1141
  }
@@ -1148,11 +1174,11 @@ describe('CoreToolScheduler request queueing', () => {
1148
1174
  const calls = onToolCallsUpdate.mock.calls.at(-1)?.[0];
1149
1175
  // With the sequential scheduler, the update includes the active call and the queue.
1150
1176
  expect(calls?.length).toBe(3);
1151
- expect(calls?.[0].status).toBe('awaiting_approval');
1177
+ expect(calls?.[0].status).toBe(CoreToolCallStatus.AwaitingApproval);
1152
1178
  expect(calls?.[0].request.callId).toBe('1');
1153
- // Check that the other two are in the queue (still in 'validating' state)
1154
- expect(calls?.[1].status).toBe('validating');
1155
- expect(calls?.[2].status).toBe('validating');
1179
+ // Check that the other two are in the queue (still in CoreToolCallStatus.Validating state)
1180
+ expect(calls?.[1].status).toBe(CoreToolCallStatus.Validating);
1181
+ expect(calls?.[2].status).toBe(CoreToolCallStatus.Validating);
1156
1182
  });
1157
1183
  expect(pendingConfirmations.length).toBe(1);
1158
1184
  // Approve the first tool with ProceedAlways
@@ -1164,7 +1190,7 @@ describe('CoreToolScheduler request queueing', () => {
1164
1190
  });
1165
1191
  const completedCalls = onAllToolCallsComplete.mock.calls.at(-1)?.[0];
1166
1192
  expect(completedCalls?.length).toBe(3);
1167
- expect(completedCalls?.every((call) => call.status === 'success')).toBe(true);
1193
+ expect(completedCalls?.every((call) => call.status === CoreToolCallStatus.Success)).toBe(true);
1168
1194
  // Verify approval mode was changed
1169
1195
  expect(approvalMode).toBe(ApprovalMode.AUTO_EDIT);
1170
1196
  });
@@ -1258,8 +1284,8 @@ describe('CoreToolScheduler Sequential Execution', () => {
1258
1284
  const completedCalls = onAllToolCallsComplete.mock
1259
1285
  .calls[0][0];
1260
1286
  expect(completedCalls).toHaveLength(2);
1261
- expect(completedCalls[0].status).toBe('success');
1262
- expect(completedCalls[1].status).toBe('success');
1287
+ expect(completedCalls[0].status).toBe(CoreToolCallStatus.Success);
1288
+ expect(completedCalls[1].status).toBe(CoreToolCallStatus.Success);
1263
1289
  });
1264
1290
  it('should cancel subsequent tools when the signal is aborted.', async () => {
1265
1291
  // Arrange
@@ -1362,9 +1388,9 @@ describe('CoreToolScheduler Sequential Execution', () => {
1362
1388
  const call1 = completedCalls.find((c) => c.request.callId === '1');
1363
1389
  const call2 = completedCalls.find((c) => c.request.callId === '2');
1364
1390
  const call3 = completedCalls.find((c) => c.request.callId === '3');
1365
- expect(call1?.status).toBe('success');
1366
- expect(call2?.status).toBe('cancelled');
1367
- expect(call3?.status).toBe('cancelled');
1391
+ expect(call1?.status).toBe(CoreToolCallStatus.Success);
1392
+ expect(call2?.status).toBe(CoreToolCallStatus.Cancelled);
1393
+ expect(call3?.status).toBe(CoreToolCallStatus.Cancelled);
1368
1394
  });
1369
1395
  it('should pass confirmation diff data into modifyWithEditor overrides', async () => {
1370
1396
  const modifyWithEditorSpy = vi
@@ -1416,7 +1442,7 @@ describe('CoreToolScheduler Sequential Execution', () => {
1416
1442
  ], abortController.signal);
1417
1443
  const toolCall = scheduler
1418
1444
  .toolCalls[0];
1419
- expect(toolCall.status).toBe('awaiting_approval');
1445
+ expect(toolCall.status).toBe(CoreToolCallStatus.AwaitingApproval);
1420
1446
  const confirmationSignal = new AbortController().signal;
1421
1447
  await scheduler.handleConfirmationResponse(toolCall.request.callId, async () => { }, ToolConfirmationOutcome.ModifyWithEditor, confirmationSignal);
1422
1448
  expect(modifyWithEditorSpy).toHaveBeenCalled();
@@ -1427,5 +1453,397 @@ describe('CoreToolScheduler Sequential Execution', () => {
1427
1453
  });
1428
1454
  modifyWithEditorSpy.mockRestore();
1429
1455
  });
1456
+ it('should handle inline modify with empty new content', async () => {
1457
+ // Mock the modifiable check to return true for this test
1458
+ const isModifiableSpy = vi
1459
+ .spyOn(modifiableToolModule, 'isModifiableDeclarativeTool')
1460
+ .mockReturnValue(true);
1461
+ const mockTool = new MockModifiableTool();
1462
+ const mockToolRegistry = {
1463
+ getTool: () => mockTool,
1464
+ getAllToolNames: () => [],
1465
+ };
1466
+ const mockConfig = createMockConfig({
1467
+ getToolRegistry: () => mockToolRegistry,
1468
+ isInteractive: () => true,
1469
+ });
1470
+ mockConfig.getHookSystem = vi.fn().mockReturnValue(undefined);
1471
+ const scheduler = new CoreToolScheduler({
1472
+ config: mockConfig,
1473
+ getPreferredEditor: () => 'vscode',
1474
+ });
1475
+ // Manually inject a waiting tool call
1476
+ const callId = 'call-1';
1477
+ const toolCall = {
1478
+ status: CoreToolCallStatus.AwaitingApproval,
1479
+ request: {
1480
+ callId,
1481
+ name: 'mockModifiableTool',
1482
+ args: {},
1483
+ isClientInitiated: false,
1484
+ prompt_id: 'p1',
1485
+ },
1486
+ tool: mockTool,
1487
+ invocation: {},
1488
+ confirmationDetails: {
1489
+ type: 'edit',
1490
+ title: 'Confirm',
1491
+ fileName: 'test.txt',
1492
+ filePath: 'test.txt',
1493
+ fileDiff: 'diff',
1494
+ originalContent: 'old',
1495
+ newContent: 'new',
1496
+ onConfirm: async () => { },
1497
+ },
1498
+ startTime: Date.now(),
1499
+ };
1500
+ const schedulerInternals = scheduler;
1501
+ schedulerInternals.toolCalls = [toolCall];
1502
+ const applyInlineModifySpy = vi
1503
+ .spyOn(schedulerInternals.toolModifier, 'applyInlineModify')
1504
+ .mockResolvedValue({
1505
+ updatedParams: { content: '' },
1506
+ updatedDiff: 'diff-empty',
1507
+ });
1508
+ await scheduler.handleConfirmationResponse(callId, async () => { }, ToolConfirmationOutcome.ProceedOnce, new AbortController().signal, { newContent: '' });
1509
+ expect(applyInlineModifySpy).toHaveBeenCalled();
1510
+ isModifiableSpy.mockRestore();
1511
+ });
1512
+ it('should pass serverName to policy engine for DiscoveredMCPTool', async () => {
1513
+ const mockMcpTool = {
1514
+ tool: async () => ({ functionDeclarations: [] }),
1515
+ callTool: async () => [],
1516
+ };
1517
+ const serverName = 'test-server';
1518
+ const toolName = 'test-tool';
1519
+ const mcpTool = new DiscoveredMCPTool(mockMcpTool, serverName, toolName, 'description', { type: 'object', properties: {} }, createMockMessageBus());
1520
+ const mockToolRegistry = {
1521
+ getTool: () => mcpTool,
1522
+ getFunctionDeclarations: () => [],
1523
+ tools: new Map(),
1524
+ discovery: {},
1525
+ registerTool: () => { },
1526
+ getToolByName: () => mcpTool,
1527
+ getToolByDisplayName: () => mcpTool,
1528
+ getTools: () => [],
1529
+ discoverTools: async () => { },
1530
+ getAllTools: () => [],
1531
+ getToolsByServer: () => [],
1532
+ };
1533
+ const mockPolicyEngineCheck = vi.fn().mockResolvedValue({
1534
+ decision: PolicyDecision.ALLOW,
1535
+ });
1536
+ const mockConfig = createMockConfig({
1537
+ getToolRegistry: () => mockToolRegistry,
1538
+ getPolicyEngine: () => ({
1539
+ check: mockPolicyEngineCheck,
1540
+ }),
1541
+ isInteractive: () => false,
1542
+ });
1543
+ mockConfig.getHookSystem = vi.fn().mockReturnValue(undefined);
1544
+ const scheduler = new CoreToolScheduler({
1545
+ config: mockConfig,
1546
+ getPreferredEditor: () => 'vscode',
1547
+ });
1548
+ const abortController = new AbortController();
1549
+ const request = {
1550
+ callId: '1',
1551
+ name: toolName,
1552
+ args: {},
1553
+ isClientInitiated: false,
1554
+ prompt_id: 'prompt-id-1',
1555
+ };
1556
+ await scheduler.schedule(request, abortController.signal);
1557
+ expect(mockPolicyEngineCheck).toHaveBeenCalledWith(expect.objectContaining({ name: toolName }), serverName);
1558
+ });
1559
+ it('should not double-report completed tools when concurrent completions occur', async () => {
1560
+ // Arrange
1561
+ const executeFn = vi
1562
+ .fn()
1563
+ .mockResolvedValue({ llmContent: CoreToolCallStatus.Success });
1564
+ const mockTool = new MockTool({ name: 'mockTool', execute: executeFn });
1565
+ const declarativeTool = mockTool;
1566
+ const mockToolRegistry = {
1567
+ getTool: () => declarativeTool,
1568
+ getToolByName: () => declarativeTool,
1569
+ getFunctionDeclarations: () => [],
1570
+ tools: new Map(),
1571
+ discovery: {},
1572
+ registerTool: () => { },
1573
+ getToolByDisplayName: () => declarativeTool,
1574
+ getTools: () => [],
1575
+ discoverTools: async () => { },
1576
+ getAllTools: () => [],
1577
+ getToolsByServer: () => [],
1578
+ };
1579
+ let completionCallCount = 0;
1580
+ const onAllToolCallsComplete = vi.fn().mockImplementation(async () => {
1581
+ completionCallCount++;
1582
+ // Simulate slow reporting (e.g. Gemini API call)
1583
+ await new Promise((resolve) => setTimeout(resolve, 50));
1584
+ });
1585
+ const mockConfig = createMockConfig({
1586
+ getToolRegistry: () => mockToolRegistry,
1587
+ getApprovalMode: () => ApprovalMode.YOLO,
1588
+ isInteractive: () => false,
1589
+ });
1590
+ const mockMessageBus = createMockMessageBus();
1591
+ mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
1592
+ mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
1593
+ mockConfig.getHookSystem = vi
1594
+ .fn()
1595
+ .mockReturnValue(new HookSystem(mockConfig));
1596
+ const scheduler = new CoreToolScheduler({
1597
+ config: mockConfig,
1598
+ onAllToolCallsComplete,
1599
+ getPreferredEditor: () => 'vscode',
1600
+ });
1601
+ const abortController = new AbortController();
1602
+ const request = {
1603
+ callId: '1',
1604
+ name: 'mockTool',
1605
+ args: {},
1606
+ isClientInitiated: false,
1607
+ prompt_id: 'prompt-1',
1608
+ };
1609
+ // Act
1610
+ // 1. Start execution
1611
+ const schedulePromise = scheduler.schedule([request], abortController.signal);
1612
+ // 2. Wait just enough for it to finish and enter checkAndNotifyCompletion
1613
+ // (awaiting our slow mock)
1614
+ await vi.waitFor(() => {
1615
+ expect(completionCallCount).toBe(1);
1616
+ });
1617
+ // 3. Trigger a concurrent completion event (e.g. via cancelAll)
1618
+ scheduler.cancelAll(abortController.signal);
1619
+ await schedulePromise;
1620
+ // Assert
1621
+ // Even though cancelAll was called while the first completion was in progress,
1622
+ // it should not have triggered a SECOND completion call because the first one
1623
+ // was still 'finalizing' and will drain any new tools.
1624
+ expect(onAllToolCallsComplete).toHaveBeenCalledTimes(1);
1625
+ });
1626
+ it('should complete reporting all tools even mid-callback during abort', async () => {
1627
+ // Arrange
1628
+ const onAllToolCallsComplete = vi.fn().mockImplementation(async () => {
1629
+ // Simulate slow reporting
1630
+ await new Promise((resolve) => setTimeout(resolve, 50));
1631
+ });
1632
+ const mockTool = new MockTool({ name: 'mockTool' });
1633
+ const mockToolRegistry = {
1634
+ getTool: () => mockTool,
1635
+ getToolByName: () => mockTool,
1636
+ getFunctionDeclarations: () => [],
1637
+ tools: new Map(),
1638
+ discovery: {},
1639
+ registerTool: () => { },
1640
+ getToolByDisplayName: () => mockTool,
1641
+ getTools: () => [],
1642
+ discoverTools: async () => { },
1643
+ getAllTools: () => [],
1644
+ getToolsByServer: () => [],
1645
+ };
1646
+ const mockConfig = createMockConfig({
1647
+ getToolRegistry: () => mockToolRegistry,
1648
+ getApprovalMode: () => ApprovalMode.YOLO,
1649
+ isInteractive: () => false,
1650
+ });
1651
+ mockConfig.getHookSystem = vi.fn().mockReturnValue(undefined);
1652
+ const scheduler = new CoreToolScheduler({
1653
+ config: mockConfig,
1654
+ onAllToolCallsComplete,
1655
+ getPreferredEditor: () => 'vscode',
1656
+ });
1657
+ const abortController = new AbortController();
1658
+ const signal = abortController.signal;
1659
+ // Act
1660
+ // 1. Start execution of two tools
1661
+ const schedulePromise = scheduler.schedule([
1662
+ {
1663
+ callId: '1',
1664
+ name: 'mockTool',
1665
+ args: {},
1666
+ isClientInitiated: false,
1667
+ prompt_id: 'prompt-1',
1668
+ },
1669
+ {
1670
+ callId: '2',
1671
+ name: 'mockTool',
1672
+ args: {},
1673
+ isClientInitiated: false,
1674
+ prompt_id: 'prompt-1',
1675
+ },
1676
+ ], signal);
1677
+ // 2. Wait for reporting to start
1678
+ await vi.waitFor(() => {
1679
+ expect(onAllToolCallsComplete).toHaveBeenCalled();
1680
+ });
1681
+ // 3. Abort the signal while reporting is in progress
1682
+ abortController.abort();
1683
+ await schedulePromise;
1684
+ // Assert
1685
+ // Verify that onAllToolCallsComplete was called and processed the tools,
1686
+ // and that the scheduler didn't just drop them because of the abort.
1687
+ expect(onAllToolCallsComplete).toHaveBeenCalled();
1688
+ const reportedTools = onAllToolCallsComplete.mock.calls.flatMap((call) =>
1689
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1690
+ call[0].map((t) => t.request.callId));
1691
+ // Both tools should have been reported exactly once with success status
1692
+ expect(reportedTools).toContain('1');
1693
+ expect(reportedTools).toContain('2');
1694
+ const allStatuses = onAllToolCallsComplete.mock.calls.flatMap((call) =>
1695
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1696
+ call[0].map((t) => t.status));
1697
+ expect(allStatuses).toEqual([
1698
+ CoreToolCallStatus.Success,
1699
+ CoreToolCallStatus.Success,
1700
+ ]);
1701
+ expect(onAllToolCallsComplete).toHaveBeenCalledTimes(1);
1702
+ });
1703
+ describe('Policy Decisions in Plan Mode', () => {
1704
+ it('should return POLICY_VIOLATION error type and informative message when denied in Plan Mode', async () => {
1705
+ const mockTool = new MockTool({
1706
+ name: 'dangerous_tool',
1707
+ displayName: 'Dangerous Tool',
1708
+ description: 'Does risky stuff',
1709
+ });
1710
+ const mockToolRegistry = {
1711
+ getTool: () => mockTool,
1712
+ getAllToolNames: () => ['dangerous_tool'],
1713
+ };
1714
+ const onAllToolCallsComplete = vi.fn();
1715
+ const mockConfig = createMockConfig({
1716
+ getToolRegistry: () => mockToolRegistry,
1717
+ getApprovalMode: () => ApprovalMode.PLAN,
1718
+ getPolicyEngine: () => ({
1719
+ check: async () => ({ decision: PolicyDecision.DENY }),
1720
+ }),
1721
+ });
1722
+ mockConfig.getHookSystem = vi.fn().mockReturnValue(undefined);
1723
+ const scheduler = new CoreToolScheduler({
1724
+ config: mockConfig,
1725
+ onAllToolCallsComplete,
1726
+ getPreferredEditor: () => 'vscode',
1727
+ });
1728
+ const request = {
1729
+ callId: 'call-1',
1730
+ name: 'dangerous_tool',
1731
+ args: {},
1732
+ isClientInitiated: false,
1733
+ prompt_id: 'prompt-1',
1734
+ };
1735
+ await scheduler.schedule(request, new AbortController().signal);
1736
+ expect(onAllToolCallsComplete).toHaveBeenCalledTimes(1);
1737
+ const reportedTools = onAllToolCallsComplete.mock.calls[0][0];
1738
+ const result = reportedTools[0];
1739
+ expect(result.status).toBe(CoreToolCallStatus.Error);
1740
+ expect(result.response.errorType).toBe(ToolErrorType.POLICY_VIOLATION);
1741
+ expect(result.response.error.message).toBe('Tool execution denied by policy.');
1742
+ });
1743
+ it('should return custom deny message when denied in Plan Mode with a specific rule message', async () => {
1744
+ const mockTool = new MockTool({
1745
+ name: 'dangerous_tool',
1746
+ displayName: 'Dangerous Tool',
1747
+ description: 'Does risky stuff',
1748
+ });
1749
+ const mockToolRegistry = {
1750
+ getTool: () => mockTool,
1751
+ getAllToolNames: () => ['dangerous_tool'],
1752
+ };
1753
+ const onAllToolCallsComplete = vi.fn();
1754
+ const customDenyMessage = 'Custom denial message for testing';
1755
+ const mockConfig = createMockConfig({
1756
+ getToolRegistry: () => mockToolRegistry,
1757
+ getApprovalMode: () => ApprovalMode.PLAN,
1758
+ getPolicyEngine: () => ({
1759
+ check: async () => ({
1760
+ decision: PolicyDecision.DENY,
1761
+ rule: { denyMessage: customDenyMessage },
1762
+ }),
1763
+ }),
1764
+ });
1765
+ mockConfig.getHookSystem = vi.fn().mockReturnValue(undefined);
1766
+ const scheduler = new CoreToolScheduler({
1767
+ config: mockConfig,
1768
+ onAllToolCallsComplete,
1769
+ getPreferredEditor: () => 'vscode',
1770
+ });
1771
+ const request = {
1772
+ callId: 'call-1',
1773
+ name: 'dangerous_tool',
1774
+ args: {},
1775
+ isClientInitiated: false,
1776
+ prompt_id: 'prompt-1',
1777
+ };
1778
+ await scheduler.schedule(request, new AbortController().signal);
1779
+ expect(onAllToolCallsComplete).toHaveBeenCalledTimes(1);
1780
+ const reportedTools = onAllToolCallsComplete.mock.calls[0][0];
1781
+ const result = reportedTools[0];
1782
+ expect(result.status).toBe(CoreToolCallStatus.Error);
1783
+ expect(result.response.errorType).toBe(ToolErrorType.POLICY_VIOLATION);
1784
+ expect(result.response.error.message).toBe(`Tool execution denied by policy. ${customDenyMessage}`);
1785
+ });
1786
+ });
1787
+ describe('ApprovalMode Preservation', () => {
1788
+ it('should preserve approvalMode throughout tool lifecycle', async () => {
1789
+ // Arrange
1790
+ const executeFn = vi.fn().mockResolvedValue({
1791
+ llmContent: 'Tool executed',
1792
+ returnDisplay: 'Tool executed',
1793
+ });
1794
+ const mockTool = new MockTool({
1795
+ name: 'mockTool',
1796
+ execute: executeFn,
1797
+ shouldConfirmExecute: MOCK_TOOL_SHOULD_CONFIRM_EXECUTE,
1798
+ });
1799
+ const mockToolRegistry = {
1800
+ getTool: () => mockTool,
1801
+ getAllToolNames: () => ['mockTool'],
1802
+ };
1803
+ const onAllToolCallsComplete = vi.fn();
1804
+ const onToolCallsUpdate = vi.fn();
1805
+ // Set approval mode to PLAN
1806
+ const mockConfig = createMockConfig({
1807
+ getToolRegistry: () => mockToolRegistry,
1808
+ getApprovalMode: () => ApprovalMode.PLAN,
1809
+ // Ensure policy engine returns ASK_USER to trigger AwaitingApproval state
1810
+ getPolicyEngine: () => ({
1811
+ check: async () => ({ decision: PolicyDecision.ASK_USER }),
1812
+ }),
1813
+ });
1814
+ mockConfig.getHookSystem = vi.fn().mockReturnValue(undefined);
1815
+ const scheduler = new CoreToolScheduler({
1816
+ config: mockConfig,
1817
+ onAllToolCallsComplete,
1818
+ onToolCallsUpdate,
1819
+ getPreferredEditor: () => 'vscode',
1820
+ });
1821
+ const abortController = new AbortController();
1822
+ const request = {
1823
+ callId: '1',
1824
+ name: 'mockTool',
1825
+ args: { param: 'value' },
1826
+ isClientInitiated: false,
1827
+ prompt_id: 'test-prompt',
1828
+ };
1829
+ // Act - Schedule
1830
+ const schedulePromise = scheduler.schedule(request, abortController.signal);
1831
+ // Assert - Check AwaitingApproval state
1832
+ const awaitingCall = (await waitForStatus(onToolCallsUpdate, CoreToolCallStatus.AwaitingApproval));
1833
+ expect(awaitingCall).toBeDefined();
1834
+ expect(awaitingCall.approvalMode).toBe(ApprovalMode.PLAN);
1835
+ // Act - Confirm
1836
+ await awaitingCall.confirmationDetails.onConfirm(ToolConfirmationOutcome.ProceedOnce);
1837
+ // Wait for completion
1838
+ await schedulePromise;
1839
+ // Assert - Check Success state
1840
+ expect(onAllToolCallsComplete).toHaveBeenCalled();
1841
+ const completedCalls = onAllToolCallsComplete.mock
1842
+ .calls[0][0];
1843
+ expect(completedCalls).toHaveLength(1);
1844
+ expect(completedCalls[0].status).toBe(CoreToolCallStatus.Success);
1845
+ expect(completedCalls[0].approvalMode).toBe(ApprovalMode.PLAN);
1846
+ });
1847
+ });
1430
1848
  });
1431
1849
  //# sourceMappingURL=coreToolScheduler.test.js.map