@google/gemini-cli-core 0.30.0-preview.5 → 0.31.0-preview.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 (691) hide show
  1. package/README.md +1 -1
  2. package/dist/docs/CONTRIBUTING.md +6 -7
  3. package/dist/docs/changelogs/index.md +22 -2
  4. package/dist/docs/changelogs/latest.md +359 -293
  5. package/dist/docs/changelogs/preview.md +300 -349
  6. package/dist/docs/cli/cli-reference.md +23 -23
  7. package/dist/docs/cli/enterprise.md +7 -7
  8. package/dist/docs/cli/gemini-md.md +1 -1
  9. package/dist/docs/cli/model.md +1 -1
  10. package/dist/docs/cli/plan-mode.md +180 -80
  11. package/dist/docs/cli/sandbox.md +3 -3
  12. package/dist/docs/cli/settings.md +59 -51
  13. package/dist/docs/cli/telemetry.md +4 -1
  14. package/dist/docs/cli/themes.md +3 -3
  15. package/dist/docs/cli/trusted-folders.md +31 -0
  16. package/dist/docs/cli/tutorials/memory-management.md +2 -2
  17. package/dist/docs/cli/tutorials/session-management.md +1 -1
  18. package/dist/docs/core/index.md +7 -7
  19. package/dist/docs/core/subagents.md +155 -39
  20. package/dist/docs/extensions/reference.md +38 -14
  21. package/dist/docs/get-started/authentication.md +4 -4
  22. package/dist/docs/get-started/examples.md +2 -2
  23. package/dist/docs/get-started/gemini-3.md +17 -3
  24. package/dist/docs/get-started/index.md +11 -2
  25. package/dist/docs/hooks/best-practices.md +1 -1
  26. package/dist/docs/hooks/reference.md +8 -0
  27. package/dist/docs/ide-integration/index.md +14 -0
  28. package/dist/docs/index.md +62 -67
  29. package/dist/docs/redirects.json +19 -0
  30. package/dist/docs/{cli → reference}/commands.md +67 -11
  31. package/dist/docs/{get-started → reference}/configuration.md +93 -24
  32. package/dist/docs/{cli → reference}/keyboard-shortcuts.md +3 -3
  33. package/dist/docs/{core → reference}/policy-engine.md +63 -27
  34. package/dist/docs/{faq.md → resources/faq.md} +1 -1
  35. package/dist/docs/{quota-and-pricing.md → resources/quota-and-pricing.md} +12 -5
  36. package/dist/docs/{tos-privacy.md → resources/tos-privacy.md} +2 -2
  37. package/dist/docs/{troubleshooting.md → resources/troubleshooting.md} +1 -1
  38. package/dist/docs/sidebar.json +203 -166
  39. package/dist/docs/tools/file-system.md +7 -4
  40. package/dist/docs/tools/index.md +5 -2
  41. package/dist/docs/tools/internal-docs.md +5 -5
  42. package/dist/docs/tools/mcp-server.md +62 -2
  43. package/dist/docs/tools/planning.md +2 -0
  44. package/dist/docs/tools/shell.md +3 -3
  45. package/dist/src/agents/a2a-client-manager.test.js +1 -2
  46. package/dist/src/agents/a2a-client-manager.test.js.map +1 -1
  47. package/dist/src/agents/a2aUtils.d.ts +1 -5
  48. package/dist/src/agents/a2aUtils.js +1 -1
  49. package/dist/src/agents/a2aUtils.js.map +1 -1
  50. package/dist/src/agents/acknowledgedAgents.js +1 -0
  51. package/dist/src/agents/acknowledgedAgents.js.map +1 -1
  52. package/dist/src/agents/agent-scheduler.js +1 -0
  53. package/dist/src/agents/agent-scheduler.js.map +1 -1
  54. package/dist/src/agents/agentLoader.d.ts +0 -1
  55. package/dist/src/agents/agentLoader.js +22 -21
  56. package/dist/src/agents/agentLoader.js.map +1 -1
  57. package/dist/src/agents/agentLoader.test.js +1 -5
  58. package/dist/src/agents/agentLoader.test.js.map +1 -1
  59. package/dist/src/agents/auth-provider/api-key-provider.d.ts +30 -0
  60. package/dist/src/agents/auth-provider/api-key-provider.js +66 -0
  61. package/dist/src/agents/auth-provider/api-key-provider.js.map +1 -0
  62. package/dist/src/agents/auth-provider/api-key-provider.test.d.ts +6 -0
  63. package/dist/src/agents/auth-provider/api-key-provider.test.js +130 -0
  64. package/dist/src/agents/auth-provider/api-key-provider.test.js.map +1 -0
  65. package/dist/src/agents/auth-provider/base-provider.d.ts +2 -2
  66. package/dist/src/agents/auth-provider/base-provider.js.map +1 -1
  67. package/dist/src/agents/auth-provider/factory.js +6 -3
  68. package/dist/src/agents/auth-provider/factory.js.map +1 -1
  69. package/dist/src/agents/auth-provider/factory.test.js +12 -0
  70. package/dist/src/agents/auth-provider/factory.test.js.map +1 -1
  71. package/dist/src/agents/auth-provider/types.d.ts +2 -4
  72. package/dist/src/agents/browser/analyzeScreenshot.d.ts +35 -0
  73. package/dist/src/agents/browser/analyzeScreenshot.js +183 -0
  74. package/dist/src/agents/browser/analyzeScreenshot.js.map +1 -0
  75. package/dist/src/agents/browser/analyzeScreenshot.test.d.ts +6 -0
  76. package/dist/src/agents/browser/analyzeScreenshot.test.js +161 -0
  77. package/dist/src/agents/browser/analyzeScreenshot.test.js.map +1 -0
  78. package/dist/src/agents/browser/browserAgentDefinition.d.ts +50 -0
  79. package/dist/src/agents/browser/browserAgentDefinition.js +141 -0
  80. package/dist/src/agents/browser/browserAgentDefinition.js.map +1 -0
  81. package/dist/src/agents/browser/browserAgentFactory.d.ts +42 -0
  82. package/dist/src/agents/browser/browserAgentFactory.js +107 -0
  83. package/dist/src/agents/browser/browserAgentFactory.js.map +1 -0
  84. package/dist/src/agents/browser/browserAgentFactory.test.d.ts +6 -0
  85. package/dist/src/agents/browser/browserAgentFactory.test.js +186 -0
  86. package/dist/src/agents/browser/browserAgentFactory.test.js.map +1 -0
  87. package/dist/src/agents/browser/browserAgentInvocation.d.ts +44 -0
  88. package/dist/src/agents/browser/browserAgentInvocation.js +109 -0
  89. package/dist/src/agents/browser/browserAgentInvocation.js.map +1 -0
  90. package/dist/src/agents/browser/browserAgentInvocation.test.d.ts +6 -0
  91. package/dist/src/agents/browser/browserAgentInvocation.test.js +87 -0
  92. package/dist/src/agents/browser/browserAgentInvocation.test.js.map +1 -0
  93. package/dist/src/agents/browser/browserManager.d.ts +110 -0
  94. package/dist/src/agents/browser/browserManager.js +323 -0
  95. package/dist/src/agents/browser/browserManager.js.map +1 -0
  96. package/dist/src/agents/browser/browserManager.test.d.ts +6 -0
  97. package/dist/src/agents/browser/browserManager.test.js +314 -0
  98. package/dist/src/agents/browser/browserManager.test.js.map +1 -0
  99. package/dist/src/agents/browser/mcpToolWrapper.d.ts +45 -0
  100. package/dist/src/agents/browser/mcpToolWrapper.js +356 -0
  101. package/dist/src/agents/browser/mcpToolWrapper.js.map +1 -0
  102. package/dist/src/agents/browser/mcpToolWrapper.test.d.ts +6 -0
  103. package/dist/src/agents/browser/mcpToolWrapper.test.js +126 -0
  104. package/dist/src/agents/browser/mcpToolWrapper.test.js.map +1 -0
  105. package/dist/src/agents/browser/mcpToolWrapperConfirmation.test.d.ts +6 -0
  106. package/dist/src/agents/browser/mcpToolWrapperConfirmation.test.js +57 -0
  107. package/dist/src/agents/browser/mcpToolWrapperConfirmation.test.js.map +1 -0
  108. package/dist/src/agents/browser/modelAvailability.d.ts +23 -0
  109. package/dist/src/agents/browser/modelAvailability.js +23 -0
  110. package/dist/src/agents/browser/modelAvailability.js.map +1 -0
  111. package/dist/src/agents/local-executor.js +73 -31
  112. package/dist/src/agents/local-executor.js.map +1 -1
  113. package/dist/src/agents/local-executor.test.js +157 -4
  114. package/dist/src/agents/local-executor.test.js.map +1 -1
  115. package/dist/src/agents/local-invocation.test.js.map +1 -1
  116. package/dist/src/agents/registry.js +8 -0
  117. package/dist/src/agents/registry.js.map +1 -1
  118. package/dist/src/agents/registry.test.js.map +1 -1
  119. package/dist/src/agents/remote-invocation.d.ts +2 -1
  120. package/dist/src/agents/remote-invocation.js +3 -3
  121. package/dist/src/agents/remote-invocation.js.map +1 -1
  122. package/dist/src/agents/subagent-tool-wrapper.js +6 -0
  123. package/dist/src/agents/subagent-tool-wrapper.js.map +1 -1
  124. package/dist/src/agents/subagent-tool.d.ts +3 -0
  125. package/dist/src/agents/subagent-tool.js +62 -3
  126. package/dist/src/agents/subagent-tool.js.map +1 -1
  127. package/dist/src/agents/subagent-tool.test.js +143 -0
  128. package/dist/src/agents/subagent-tool.test.js.map +1 -1
  129. package/dist/src/availability/fallbackIntegration.test.js +4 -1
  130. package/dist/src/availability/fallbackIntegration.test.js.map +1 -1
  131. package/dist/src/availability/policyHelpers.js +3 -1
  132. package/dist/src/availability/policyHelpers.js.map +1 -1
  133. package/dist/src/availability/policyHelpers.test.js +51 -5
  134. package/dist/src/availability/policyHelpers.test.js.map +1 -1
  135. package/dist/src/code_assist/admin/admin_controls.js +1 -0
  136. package/dist/src/code_assist/admin/admin_controls.js.map +1 -1
  137. package/dist/src/code_assist/converter.js +8 -2
  138. package/dist/src/code_assist/converter.js.map +1 -1
  139. package/dist/src/code_assist/converter.test.js.map +1 -1
  140. package/dist/src/code_assist/experiments/experiments.js +1 -1
  141. package/dist/src/code_assist/experiments/experiments.js.map +1 -1
  142. package/dist/src/code_assist/oauth-credential-storage.js +1 -1
  143. package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
  144. package/dist/src/code_assist/oauth-credential-storage.test.js +5 -0
  145. package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -1
  146. package/dist/src/code_assist/oauth2.js +11 -8
  147. package/dist/src/code_assist/oauth2.js.map +1 -1
  148. package/dist/src/code_assist/oauth2.test.js +55 -0
  149. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  150. package/dist/src/code_assist/server.js +22 -13
  151. package/dist/src/code_assist/server.js.map +1 -1
  152. package/dist/src/code_assist/server.test.js +26 -0
  153. package/dist/src/code_assist/server.test.js.map +1 -1
  154. package/dist/src/code_assist/telemetry.js +16 -3
  155. package/dist/src/code_assist/telemetry.js.map +1 -1
  156. package/dist/src/code_assist/telemetry.test.js +10 -0
  157. package/dist/src/code_assist/telemetry.test.js.map +1 -1
  158. package/dist/src/code_assist/types.d.ts +13 -12
  159. package/dist/src/code_assist/types.js.map +1 -1
  160. package/dist/src/config/config.d.ts +83 -8
  161. package/dist/src/config/config.js +129 -24
  162. package/dist/src/config/config.js.map +1 -1
  163. package/dist/src/config/config.test.js +298 -10
  164. package/dist/src/config/config.test.js.map +1 -1
  165. package/dist/src/config/models.js +1 -0
  166. package/dist/src/config/models.js.map +1 -1
  167. package/dist/src/config/models.test.js +1 -0
  168. package/dist/src/config/models.test.js.map +1 -1
  169. package/dist/src/config/projectRegistry.js +1 -0
  170. package/dist/src/config/projectRegistry.js.map +1 -1
  171. package/dist/src/config/storage.d.ts +17 -1
  172. package/dist/src/config/storage.js +82 -2
  173. package/dist/src/config/storage.js.map +1 -1
  174. package/dist/src/config/storage.test.js +149 -2
  175. package/dist/src/config/storage.test.js.map +1 -1
  176. package/dist/src/config/userHintService.d.ts +46 -0
  177. package/dist/src/config/userHintService.js +81 -0
  178. package/dist/src/config/userHintService.js.map +1 -0
  179. package/dist/src/config/userHintService.test.d.ts +6 -0
  180. package/dist/src/config/userHintService.test.js +62 -0
  181. package/dist/src/config/userHintService.test.js.map +1 -0
  182. package/dist/src/confirmation-bus/message-bus.js +15 -3
  183. package/dist/src/confirmation-bus/message-bus.js.map +1 -1
  184. package/dist/src/confirmation-bus/message-bus.test.js +15 -0
  185. package/dist/src/confirmation-bus/message-bus.test.js.map +1 -1
  186. package/dist/src/confirmation-bus/types.d.ts +7 -0
  187. package/dist/src/confirmation-bus/types.js.map +1 -1
  188. package/dist/src/core/baseLlmClient.d.ts +2 -3
  189. package/dist/src/core/baseLlmClient.js +7 -5
  190. package/dist/src/core/baseLlmClient.js.map +1 -1
  191. package/dist/src/core/baseLlmClient.test.js +45 -20
  192. package/dist/src/core/baseLlmClient.test.js.map +1 -1
  193. package/dist/src/core/client.js +18 -7
  194. package/dist/src/core/client.js.map +1 -1
  195. package/dist/src/core/coreToolHookTriggers.d.ts +2 -3
  196. package/dist/src/core/coreToolHookTriggers.js +8 -3
  197. package/dist/src/core/coreToolHookTriggers.js.map +1 -1
  198. package/dist/src/core/coreToolScheduler.js +2 -1
  199. package/dist/src/core/coreToolScheduler.js.map +1 -1
  200. package/dist/src/core/coreToolScheduler.test.js +10 -3
  201. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  202. package/dist/src/core/fakeContentGenerator.js +2 -0
  203. package/dist/src/core/fakeContentGenerator.js.map +1 -1
  204. package/dist/src/core/geminiChat.d.ts +1 -1
  205. package/dist/src/core/geminiChat.js +5 -5
  206. package/dist/src/core/geminiChat.js.map +1 -1
  207. package/dist/src/core/geminiChat.test.js +1 -0
  208. package/dist/src/core/geminiChat.test.js.map +1 -1
  209. package/dist/src/core/geminiChat_network_retry.test.js +1 -0
  210. package/dist/src/core/geminiChat_network_retry.test.js.map +1 -1
  211. package/dist/src/core/logger.js +2 -0
  212. package/dist/src/core/logger.js.map +1 -1
  213. package/dist/src/core/loggingContentGenerator.d.ts +14 -2
  214. package/dist/src/core/loggingContentGenerator.js +98 -4
  215. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  216. package/dist/src/core/loggingContentGenerator.test.js +275 -1
  217. package/dist/src/core/loggingContentGenerator.test.js.map +1 -1
  218. package/dist/src/core/prompts.test.js +55 -27
  219. package/dist/src/core/prompts.test.js.map +1 -1
  220. package/dist/src/core/recordingContentGenerator.test.js +5 -0
  221. package/dist/src/core/recordingContentGenerator.test.js.map +1 -1
  222. package/dist/src/core/turn.d.ts +4 -2
  223. package/dist/src/core/turn.js +2 -0
  224. package/dist/src/core/turn.js.map +1 -1
  225. package/dist/src/core/turn.test.js +4 -1
  226. package/dist/src/core/turn.test.js.map +1 -1
  227. package/dist/src/generated/git-commit.d.ts +2 -2
  228. package/dist/src/generated/git-commit.js +2 -2
  229. package/dist/src/hooks/hookAggregator.d.ts +1 -2
  230. package/dist/src/hooks/hookAggregator.js +1 -2
  231. package/dist/src/hooks/hookAggregator.js.map +1 -1
  232. package/dist/src/hooks/hookEventHandler.d.ts +2 -2
  233. package/dist/src/hooks/hookEventHandler.js +13 -4
  234. package/dist/src/hooks/hookEventHandler.js.map +1 -1
  235. package/dist/src/hooks/hookEventHandler.test.js +1 -2
  236. package/dist/src/hooks/hookEventHandler.test.js.map +1 -1
  237. package/dist/src/hooks/hookPlanner.d.ts +1 -2
  238. package/dist/src/hooks/hookPlanner.js.map +1 -1
  239. package/dist/src/hooks/hookRegistry.d.ts +8 -0
  240. package/dist/src/hooks/hookRegistry.js +31 -3
  241. package/dist/src/hooks/hookRegistry.js.map +1 -1
  242. package/dist/src/hooks/hookRegistry.test.js.map +1 -1
  243. package/dist/src/hooks/hookRunner.d.ts +5 -2
  244. package/dist/src/hooks/hookRunner.js +52 -2
  245. package/dist/src/hooks/hookRunner.js.map +1 -1
  246. package/dist/src/hooks/hookRunner.test.js.map +1 -1
  247. package/dist/src/hooks/hookSystem.d.ts +11 -3
  248. package/dist/src/hooks/hookSystem.js +10 -4
  249. package/dist/src/hooks/hookSystem.js.map +1 -1
  250. package/dist/src/hooks/hookSystem.test.js +1 -0
  251. package/dist/src/hooks/hookSystem.test.js.map +1 -1
  252. package/dist/src/hooks/runtimeHooks.test.d.ts +6 -0
  253. package/dist/src/hooks/runtimeHooks.test.js +100 -0
  254. package/dist/src/hooks/runtimeHooks.test.js.map +1 -0
  255. package/dist/src/hooks/trustedHooks.js +6 -1
  256. package/dist/src/hooks/trustedHooks.js.map +1 -1
  257. package/dist/src/hooks/trustedHooks.test.js +17 -9
  258. package/dist/src/hooks/trustedHooks.test.js.map +1 -1
  259. package/dist/src/hooks/types.d.ts +49 -8
  260. package/dist/src/hooks/types.js +20 -1
  261. package/dist/src/hooks/types.js.map +1 -1
  262. package/dist/src/ide/detect-ide.d.ts +0 -1
  263. package/dist/src/ide/detect-ide.js +1 -1
  264. package/dist/src/ide/detect-ide.js.map +1 -1
  265. package/dist/src/ide/ide-client.js +3 -2
  266. package/dist/src/ide/ide-client.js.map +1 -1
  267. package/dist/src/ide/ide-connection-utils.js +90 -14
  268. package/dist/src/ide/ide-connection-utils.js.map +1 -1
  269. package/dist/src/ide/ide-connection-utils.test.js +78 -0
  270. package/dist/src/ide/ide-connection-utils.test.js.map +1 -1
  271. package/dist/src/ide/ide-installer.test.js +1 -2
  272. package/dist/src/ide/ide-installer.test.js.map +1 -1
  273. package/dist/src/ide/process-utils.d.ts +7 -0
  274. package/dist/src/ide/process-utils.js +20 -0
  275. package/dist/src/ide/process-utils.js.map +1 -1
  276. package/dist/src/ide/process-utils.test.js +30 -0
  277. package/dist/src/ide/process-utils.test.js.map +1 -1
  278. package/dist/src/index.d.ts +6 -1
  279. package/dist/src/index.js +6 -1
  280. package/dist/src/index.js.map +1 -1
  281. package/dist/src/mcp/oauth-provider.d.ts +1 -1
  282. package/dist/src/mcp/oauth-provider.js +8 -7
  283. package/dist/src/mcp/oauth-provider.js.map +1 -1
  284. package/dist/src/mcp/oauth-provider.test.js +34 -2
  285. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  286. package/dist/src/mcp/oauth-utils.js +2 -0
  287. package/dist/src/mcp/oauth-utils.js.map +1 -1
  288. package/dist/src/mcp/oauth-utils.test.js +12 -0
  289. package/dist/src/mcp/oauth-utils.test.js.map +1 -1
  290. package/dist/src/mcp/token-storage/file-token-storage.js +4 -1
  291. package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -1
  292. package/dist/src/mcp/token-storage/file-token-storage.test.js +40 -2
  293. package/dist/src/mcp/token-storage/file-token-storage.test.js.map +1 -1
  294. package/dist/src/mcp/token-storage/keychain-token-storage.js +2 -0
  295. package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -1
  296. package/dist/src/policy/config.d.ts +18 -9
  297. package/dist/src/policy/config.js +75 -54
  298. package/dist/src/policy/config.js.map +1 -1
  299. package/dist/src/policy/config.test.js +26 -26
  300. package/dist/src/policy/integrity.d.ts +45 -0
  301. package/dist/src/policy/integrity.js +121 -0
  302. package/dist/src/policy/integrity.js.map +1 -0
  303. package/dist/src/policy/integrity.test.d.ts +6 -0
  304. package/dist/src/policy/integrity.test.js +132 -0
  305. package/dist/src/policy/integrity.test.js.map +1 -0
  306. package/dist/src/policy/persistence.test.js +29 -19
  307. package/dist/src/policy/persistence.test.js.map +1 -1
  308. package/dist/src/policy/policies/conseca.toml +6 -0
  309. package/dist/src/policy/policies/plan.toml +28 -12
  310. package/dist/src/policy/policies/read-only.toml +11 -10
  311. package/dist/src/policy/policies/write.toml +11 -10
  312. package/dist/src/policy/policies/yolo.toml +11 -10
  313. package/dist/src/policy/policy-engine.d.ts +16 -3
  314. package/dist/src/policy/policy-engine.js +154 -29
  315. package/dist/src/policy/policy-engine.js.map +1 -1
  316. package/dist/src/policy/policy-engine.test.js +480 -9
  317. package/dist/src/policy/policy-engine.test.js.map +1 -1
  318. package/dist/src/policy/policy-updater.test.js +11 -6
  319. package/dist/src/policy/policy-updater.test.js.map +1 -1
  320. package/dist/src/policy/toml-loader.d.ts +13 -2
  321. package/dist/src/policy/toml-loader.js +55 -34
  322. package/dist/src/policy/toml-loader.js.map +1 -1
  323. package/dist/src/policy/toml-loader.test.js +115 -7
  324. package/dist/src/policy/toml-loader.test.js.map +1 -1
  325. package/dist/src/policy/types.d.ts +18 -1
  326. package/dist/src/policy/types.js +1 -0
  327. package/dist/src/policy/types.js.map +1 -1
  328. package/dist/src/policy/workspace-policy.test.d.ts +6 -0
  329. package/dist/src/policy/workspace-policy.test.js +231 -0
  330. package/dist/src/policy/workspace-policy.test.js.map +1 -0
  331. package/dist/src/prompts/promptProvider.js +11 -13
  332. package/dist/src/prompts/promptProvider.js.map +1 -1
  333. package/dist/src/prompts/promptProvider.test.js +64 -3
  334. package/dist/src/prompts/promptProvider.test.js.map +1 -1
  335. package/dist/src/prompts/snippets.js +41 -10
  336. package/dist/src/prompts/snippets.js.map +1 -1
  337. package/dist/src/prompts/snippets.legacy.js +1 -0
  338. package/dist/src/prompts/snippets.legacy.js.map +1 -1
  339. package/dist/src/routing/modelRouterService.js +3 -1
  340. package/dist/src/routing/modelRouterService.js.map +1 -1
  341. package/dist/src/routing/modelRouterService.test.js +12 -6
  342. package/dist/src/routing/modelRouterService.test.js.map +1 -1
  343. package/dist/src/routing/strategies/approvalModeStrategy.d.ts +18 -0
  344. package/dist/src/routing/strategies/approvalModeStrategy.js +58 -0
  345. package/dist/src/routing/strategies/approvalModeStrategy.js.map +1 -0
  346. package/dist/src/routing/strategies/approvalModeStrategy.test.d.ts +6 -0
  347. package/dist/src/routing/strategies/approvalModeStrategy.test.js +110 -0
  348. package/dist/src/routing/strategies/approvalModeStrategy.test.js.map +1 -0
  349. package/dist/src/safety/checker-runner.js +1 -0
  350. package/dist/src/safety/checker-runner.js.map +1 -1
  351. package/dist/src/safety/conseca/conseca.d.ts +31 -0
  352. package/dist/src/safety/conseca/conseca.js +105 -0
  353. package/dist/src/safety/conseca/conseca.js.map +1 -0
  354. package/dist/src/safety/conseca/conseca.test.d.ts +6 -0
  355. package/dist/src/safety/conseca/conseca.test.js +226 -0
  356. package/dist/src/safety/conseca/conseca.test.js.map +1 -0
  357. package/dist/src/safety/conseca/integration.test.d.ts +6 -0
  358. package/dist/src/safety/conseca/integration.test.js +19 -0
  359. package/dist/src/safety/conseca/integration.test.js.map +1 -0
  360. package/dist/src/safety/conseca/policy-enforcer.d.ts +13 -0
  361. package/dist/src/safety/conseca/policy-enforcer.js +135 -0
  362. package/dist/src/safety/conseca/policy-enforcer.js.map +1 -0
  363. package/dist/src/safety/conseca/policy-enforcer.test.d.ts +6 -0
  364. package/dist/src/safety/conseca/policy-enforcer.test.js +141 -0
  365. package/dist/src/safety/conseca/policy-enforcer.test.js.map +1 -0
  366. package/dist/src/safety/conseca/policy-generator.d.ts +15 -0
  367. package/dist/src/safety/conseca/policy-generator.js +144 -0
  368. package/dist/src/safety/conseca/policy-generator.js.map +1 -0
  369. package/dist/src/safety/conseca/policy-generator.test.d.ts +6 -0
  370. package/dist/src/safety/conseca/policy-generator.test.js +84 -0
  371. package/dist/src/safety/conseca/policy-generator.test.js.map +1 -0
  372. package/dist/src/safety/conseca/types.d.ts +15 -0
  373. package/dist/src/safety/conseca/types.js +7 -0
  374. package/dist/src/safety/conseca/types.js.map +1 -0
  375. package/dist/src/safety/context-builder.d.ts +3 -3
  376. package/dist/src/safety/context-builder.js +60 -4
  377. package/dist/src/safety/context-builder.js.map +1 -1
  378. package/dist/src/safety/context-builder.test.js +98 -18
  379. package/dist/src/safety/context-builder.test.js.map +1 -1
  380. package/dist/src/safety/protocol.d.ts +4 -0
  381. package/dist/src/safety/registry.d.ts +2 -1
  382. package/dist/src/safety/registry.js +14 -4
  383. package/dist/src/safety/registry.js.map +1 -1
  384. package/dist/src/safety/registry.test.js +5 -2
  385. package/dist/src/safety/registry.test.js.map +1 -1
  386. package/dist/src/scheduler/confirmation.d.ts +0 -13
  387. package/dist/src/scheduler/confirmation.js +1 -1
  388. package/dist/src/scheduler/confirmation.js.map +1 -1
  389. package/dist/src/scheduler/policy.js +6 -2
  390. package/dist/src/scheduler/policy.js.map +1 -1
  391. package/dist/src/scheduler/policy.test.js +4 -3
  392. package/dist/src/scheduler/policy.test.js.map +1 -1
  393. package/dist/src/scheduler/scheduler.d.ts +3 -1
  394. package/dist/src/scheduler/scheduler.js +148 -28
  395. package/dist/src/scheduler/scheduler.js.map +1 -1
  396. package/dist/src/scheduler/scheduler.test.js +341 -242
  397. package/dist/src/scheduler/scheduler.test.js.map +1 -1
  398. package/dist/src/scheduler/scheduler_parallel.test.d.ts +6 -0
  399. package/dist/src/scheduler/scheduler_parallel.test.js +309 -0
  400. package/dist/src/scheduler/scheduler_parallel.test.js.map +1 -0
  401. package/dist/src/scheduler/state-manager.d.ts +8 -0
  402. package/dist/src/scheduler/state-manager.js +30 -2
  403. package/dist/src/scheduler/state-manager.js.map +1 -1
  404. package/dist/src/scheduler/state-manager.test.js +61 -0
  405. package/dist/src/scheduler/state-manager.test.js.map +1 -1
  406. package/dist/src/scheduler/tool-executor.js +15 -7
  407. package/dist/src/scheduler/tool-executor.js.map +1 -1
  408. package/dist/src/scheduler/tool-executor.test.js +1 -1
  409. package/dist/src/scheduler/tool-executor.test.js.map +1 -1
  410. package/dist/src/scheduler/types.d.ts +23 -0
  411. package/dist/src/services/FolderTrustDiscoveryService.d.ts +32 -0
  412. package/dist/src/services/FolderTrustDiscoveryService.js +167 -0
  413. package/dist/src/services/FolderTrustDiscoveryService.js.map +1 -0
  414. package/dist/src/services/FolderTrustDiscoveryService.test.d.ts +6 -0
  415. package/dist/src/services/FolderTrustDiscoveryService.test.js +118 -0
  416. package/dist/src/services/FolderTrustDiscoveryService.test.js.map +1 -0
  417. package/dist/src/services/chatCompressionService.d.ts +0 -14
  418. package/dist/src/services/chatCompressionService.js +29 -7
  419. package/dist/src/services/chatCompressionService.js.map +1 -1
  420. package/dist/src/services/chatCompressionService.test.js +3 -1
  421. package/dist/src/services/chatCompressionService.test.js.map +1 -1
  422. package/dist/src/services/chatRecordingService.d.ts +7 -1
  423. package/dist/src/services/chatRecordingService.js +12 -1
  424. package/dist/src/services/chatRecordingService.js.map +1 -1
  425. package/dist/src/services/chatRecordingService.test.js +34 -0
  426. package/dist/src/services/chatRecordingService.test.js.map +1 -1
  427. package/dist/src/services/loopDetectionService.js +1 -2
  428. package/dist/src/services/loopDetectionService.js.map +1 -1
  429. package/dist/src/services/sessionSummaryUtils.js +3 -0
  430. package/dist/src/services/sessionSummaryUtils.js.map +1 -1
  431. package/dist/src/services/shellExecutionService.js +6 -0
  432. package/dist/src/services/shellExecutionService.js.map +1 -1
  433. package/dist/src/skills/skillLoader.js +2 -2
  434. package/dist/src/skills/skillLoader.js.map +1 -1
  435. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +3 -1
  436. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +35 -4
  437. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  438. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +0 -1
  439. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +19 -5
  440. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  441. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +14 -1
  442. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +29 -1
  443. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  444. package/dist/src/telemetry/conseca-logger.d.ts +9 -0
  445. package/dist/src/telemetry/conseca-logger.js +91 -0
  446. package/dist/src/telemetry/conseca-logger.js.map +1 -0
  447. package/dist/src/telemetry/conseca-logger.test.d.ts +6 -0
  448. package/dist/src/telemetry/conseca-logger.test.js +89 -0
  449. package/dist/src/telemetry/conseca-logger.test.js.map +1 -0
  450. package/dist/src/telemetry/gcp-exporters.js +1 -2
  451. package/dist/src/telemetry/gcp-exporters.js.map +1 -1
  452. package/dist/src/telemetry/index.d.ts +2 -1
  453. package/dist/src/telemetry/index.js +2 -1
  454. package/dist/src/telemetry/index.js.map +1 -1
  455. package/dist/src/telemetry/integration.test.circular.js +3 -0
  456. package/dist/src/telemetry/integration.test.circular.js.map +1 -1
  457. package/dist/src/telemetry/loggers.d.ts +1 -2
  458. package/dist/src/telemetry/loggers.js +3 -13
  459. package/dist/src/telemetry/loggers.js.map +1 -1
  460. package/dist/src/telemetry/loggers.test.circular.js +3 -0
  461. package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
  462. package/dist/src/telemetry/loggers.test.js +6 -5
  463. package/dist/src/telemetry/loggers.test.js.map +1 -1
  464. package/dist/src/telemetry/metrics.d.ts +1 -3
  465. package/dist/src/telemetry/metrics.js +3 -2
  466. package/dist/src/telemetry/metrics.js.map +1 -1
  467. package/dist/src/telemetry/metrics.test.js +7 -3
  468. package/dist/src/telemetry/metrics.test.js.map +1 -1
  469. package/dist/src/telemetry/sanitize.test.js +19 -18
  470. package/dist/src/telemetry/sanitize.test.js.map +1 -1
  471. package/dist/src/telemetry/semantic.d.ts +7 -9
  472. package/dist/src/telemetry/semantic.js +8 -8
  473. package/dist/src/telemetry/semantic.js.map +1 -1
  474. package/dist/src/telemetry/types.d.ts +42 -4
  475. package/dist/src/telemetry/types.js +87 -2
  476. package/dist/src/telemetry/types.js.map +1 -1
  477. package/dist/src/telemetry/uiTelemetry.d.ts +1 -2
  478. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  479. package/dist/src/telemetry/uiTelemetry.test.js +1 -2
  480. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  481. package/dist/src/tools/ask-user.test.js +1 -19
  482. package/dist/src/tools/ask-user.test.js.map +1 -1
  483. package/dist/src/tools/confirmation-policy.test.js +14 -17
  484. package/dist/src/tools/confirmation-policy.test.js.map +1 -1
  485. package/dist/src/tools/definitions/dynamic-declaration-helpers.js +1 -1
  486. package/dist/src/tools/definitions/dynamic-declaration-helpers.js.map +1 -1
  487. package/dist/src/tools/definitions/model-family-sets/default-legacy.js +14 -16
  488. package/dist/src/tools/definitions/model-family-sets/default-legacy.js.map +1 -1
  489. package/dist/src/tools/definitions/model-family-sets/gemini-3.js +24 -59
  490. package/dist/src/tools/definitions/model-family-sets/gemini-3.js.map +1 -1
  491. package/dist/src/tools/diff-utils.d.ts +9 -0
  492. package/dist/src/tools/diff-utils.js +66 -0
  493. package/dist/src/tools/diff-utils.js.map +1 -0
  494. package/dist/src/tools/diff-utils.test.d.ts +6 -0
  495. package/dist/src/tools/diff-utils.test.js +53 -0
  496. package/dist/src/tools/diff-utils.test.js.map +1 -0
  497. package/dist/src/tools/edit.d.ts +9 -4
  498. package/dist/src/tools/edit.js +203 -34
  499. package/dist/src/tools/edit.js.map +1 -1
  500. package/dist/src/tools/edit.test.js +225 -10
  501. package/dist/src/tools/edit.test.js.map +1 -1
  502. package/dist/src/tools/enter-plan-mode.js +1 -1
  503. package/dist/src/tools/enter-plan-mode.js.map +1 -1
  504. package/dist/src/tools/enter-plan-mode.test.js +1 -1
  505. package/dist/src/tools/enter-plan-mode.test.js.map +1 -1
  506. package/dist/src/tools/exit-plan-mode.js +10 -24
  507. package/dist/src/tools/exit-plan-mode.js.map +1 -1
  508. package/dist/src/tools/exit-plan-mode.test.js +1 -1
  509. package/dist/src/tools/exit-plan-mode.test.js.map +1 -1
  510. package/dist/src/tools/grep-utils.d.ts +49 -0
  511. package/dist/src/tools/grep-utils.js +139 -0
  512. package/dist/src/tools/grep-utils.js.map +1 -0
  513. package/dist/src/tools/grep.js +4 -44
  514. package/dist/src/tools/grep.js.map +1 -1
  515. package/dist/src/tools/grep.test.js +21 -2
  516. package/dist/src/tools/grep.test.js.map +1 -1
  517. package/dist/src/tools/ls.js +6 -1
  518. package/dist/src/tools/ls.js.map +1 -1
  519. package/dist/src/tools/ls.test.js +2 -2
  520. package/dist/src/tools/ls.test.js.map +1 -1
  521. package/dist/src/tools/mcp-client-manager.js +16 -18
  522. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  523. package/dist/src/tools/mcp-client-manager.test.js +51 -0
  524. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  525. package/dist/src/tools/mcp-client.d.ts +22 -1
  526. package/dist/src/tools/mcp-client.js +95 -36
  527. package/dist/src/tools/mcp-client.js.map +1 -1
  528. package/dist/src/tools/mcp-client.test.js +148 -20
  529. package/dist/src/tools/mcp-client.test.js.map +1 -1
  530. package/dist/src/tools/mcp-tool.d.ts +15 -5
  531. package/dist/src/tools/mcp-tool.js +36 -8
  532. package/dist/src/tools/mcp-tool.js.map +1 -1
  533. package/dist/src/tools/memoryTool.js +1 -1
  534. package/dist/src/tools/memoryTool.js.map +1 -1
  535. package/dist/src/tools/memoryTool.test.js +5 -0
  536. package/dist/src/tools/memoryTool.test.js.map +1 -1
  537. package/dist/src/tools/omissionPlaceholderDetector.d.ts +15 -0
  538. package/dist/src/tools/omissionPlaceholderDetector.js +90 -0
  539. package/dist/src/tools/omissionPlaceholderDetector.js.map +1 -0
  540. package/dist/src/tools/omissionPlaceholderDetector.test.d.ts +6 -0
  541. package/dist/src/tools/omissionPlaceholderDetector.test.js +49 -0
  542. package/dist/src/tools/omissionPlaceholderDetector.test.js.map +1 -0
  543. package/dist/src/tools/read-file.d.ts +4 -4
  544. package/dist/src/tools/read-file.js +17 -10
  545. package/dist/src/tools/read-file.js.map +1 -1
  546. package/dist/src/tools/read-file.test.js +20 -10
  547. package/dist/src/tools/read-file.test.js.map +1 -1
  548. package/dist/src/tools/ripGrep.js +49 -46
  549. package/dist/src/tools/ripGrep.js.map +1 -1
  550. package/dist/src/tools/ripGrep.test.js +52 -37
  551. package/dist/src/tools/ripGrep.test.js.map +1 -1
  552. package/dist/src/tools/shell.d.ts +2 -2
  553. package/dist/src/tools/shell.js +2 -2
  554. package/dist/src/tools/shell.js.map +1 -1
  555. package/dist/src/tools/shell.test.js +1 -2
  556. package/dist/src/tools/shell.test.js.map +1 -1
  557. package/dist/src/tools/tool-names.d.ts +0 -6
  558. package/dist/src/tools/tool-names.js +0 -15
  559. package/dist/src/tools/tool-names.js.map +1 -1
  560. package/dist/src/tools/tool-registry.d.ts +1 -0
  561. package/dist/src/tools/tool-registry.js +33 -6
  562. package/dist/src/tools/tool-registry.js.map +1 -1
  563. package/dist/src/tools/tool-registry.test.js +47 -0
  564. package/dist/src/tools/tool-registry.test.js.map +1 -1
  565. package/dist/src/tools/tools.d.ts +21 -1
  566. package/dist/src/tools/tools.js +19 -3
  567. package/dist/src/tools/tools.js.map +1 -1
  568. package/dist/src/tools/tools.test.js +24 -0
  569. package/dist/src/tools/tools.test.js.map +1 -1
  570. package/dist/src/tools/web-fetch.d.ts +9 -1
  571. package/dist/src/tools/web-fetch.js +273 -34
  572. package/dist/src/tools/web-fetch.js.map +1 -1
  573. package/dist/src/tools/web-fetch.test.js +303 -30
  574. package/dist/src/tools/web-fetch.test.js.map +1 -1
  575. package/dist/src/tools/write-file.js +14 -10
  576. package/dist/src/tools/write-file.js.map +1 -1
  577. package/dist/src/tools/write-file.test.js +75 -0
  578. package/dist/src/tools/write-file.test.js.map +1 -1
  579. package/dist/src/tools/write-todos.d.ts +2 -2
  580. package/dist/src/tools/write-todos.js +1 -1
  581. package/dist/src/tools/write-todos.js.map +1 -1
  582. package/dist/src/tools/xcode-mcp-fix-transport.js +4 -1
  583. package/dist/src/tools/xcode-mcp-fix-transport.js.map +1 -1
  584. package/dist/src/utils/approvalModeUtils.d.ts +14 -0
  585. package/dist/src/utils/approvalModeUtils.js +35 -0
  586. package/dist/src/utils/approvalModeUtils.js.map +1 -0
  587. package/dist/src/utils/approvalModeUtils.test.d.ts +6 -0
  588. package/dist/src/utils/approvalModeUtils.test.js +36 -0
  589. package/dist/src/utils/approvalModeUtils.test.js.map +1 -0
  590. package/dist/src/utils/authConsent.d.ts +1 -1
  591. package/dist/src/utils/authConsent.js +10 -8
  592. package/dist/src/utils/authConsent.js.map +1 -1
  593. package/dist/src/utils/authConsent.test.js +89 -44
  594. package/dist/src/utils/authConsent.test.js.map +1 -1
  595. package/dist/src/utils/compatibility.d.ts +41 -0
  596. package/dist/src/utils/compatibility.js +112 -0
  597. package/dist/src/utils/compatibility.js.map +1 -0
  598. package/dist/src/utils/compatibility.test.d.ts +6 -0
  599. package/dist/src/utils/compatibility.test.js +233 -0
  600. package/dist/src/utils/compatibility.test.js.map +1 -0
  601. package/dist/src/utils/editCorrector.js +22 -29
  602. package/dist/src/utils/editCorrector.js.map +1 -1
  603. package/dist/src/utils/editCorrector.test.js.map +1 -1
  604. package/dist/src/utils/envExpansion.d.ts +18 -0
  605. package/dist/src/utils/envExpansion.js +46 -0
  606. package/dist/src/utils/envExpansion.js.map +1 -0
  607. package/dist/src/utils/envExpansion.test.d.ts +6 -0
  608. package/dist/src/utils/envExpansion.test.js +110 -0
  609. package/dist/src/utils/envExpansion.test.js.map +1 -0
  610. package/dist/src/utils/errors.d.ts +1 -0
  611. package/dist/src/utils/errors.js +55 -10
  612. package/dist/src/utils/errors.js.map +1 -1
  613. package/dist/src/utils/errors.test.js +27 -1
  614. package/dist/src/utils/errors.test.js.map +1 -1
  615. package/dist/src/utils/events.d.ts +17 -0
  616. package/dist/src/utils/events.js +12 -0
  617. package/dist/src/utils/events.js.map +1 -1
  618. package/dist/src/utils/events.test.d.ts +1 -1
  619. package/dist/src/utils/events.test.js +50 -3
  620. package/dist/src/utils/events.test.js.map +1 -1
  621. package/dist/src/utils/fastAckHelper.js +2 -1
  622. package/dist/src/utils/fastAckHelper.js.map +1 -1
  623. package/dist/src/utils/fetch.d.ts +1 -1
  624. package/dist/src/utils/fetch.js +15 -2
  625. package/dist/src/utils/fetch.js.map +1 -1
  626. package/dist/src/utils/fileDiffUtils.d.ts +2 -2
  627. package/dist/src/utils/fileDiffUtils.js +1 -2
  628. package/dist/src/utils/fileDiffUtils.js.map +1 -1
  629. package/dist/src/utils/fileUtils.d.ts +5 -3
  630. package/dist/src/utils/fileUtils.js +25 -16
  631. package/dist/src/utils/fileUtils.js.map +1 -1
  632. package/dist/src/utils/fileUtils.test.js +14 -13
  633. package/dist/src/utils/fileUtils.test.js.map +1 -1
  634. package/dist/src/utils/filesearch/fileSearch.js +4 -1
  635. package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
  636. package/dist/src/utils/getFolderStructure.test.js +4 -5
  637. package/dist/src/utils/getFolderStructure.test.js.map +1 -1
  638. package/dist/src/utils/getPty.js +4 -0
  639. package/dist/src/utils/getPty.js.map +1 -1
  640. package/dist/src/utils/googleErrors.js +29 -5
  641. package/dist/src/utils/googleErrors.js.map +1 -1
  642. package/dist/src/utils/googleQuotaErrors.js +10 -0
  643. package/dist/src/utils/googleQuotaErrors.js.map +1 -1
  644. package/dist/src/utils/googleQuotaErrors.test.js +16 -1
  645. package/dist/src/utils/googleQuotaErrors.test.js.map +1 -1
  646. package/dist/src/utils/memoryDiscovery.js +2 -0
  647. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  648. package/dist/src/utils/memoryDiscovery.test.js +1 -2
  649. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  650. package/dist/src/utils/retry.d.ts +1 -1
  651. package/dist/src/utils/retry.js +9 -4
  652. package/dist/src/utils/retry.js.map +1 -1
  653. package/dist/src/utils/retry.test.js +15 -12
  654. package/dist/src/utils/retry.test.js.map +1 -1
  655. package/dist/src/utils/safeJsonStringify.js +3 -0
  656. package/dist/src/utils/safeJsonStringify.js.map +1 -1
  657. package/dist/src/utils/schemaValidator.js +5 -3
  658. package/dist/src/utils/schemaValidator.js.map +1 -1
  659. package/dist/src/utils/session.d.ts +1 -0
  660. package/dist/src/utils/session.js +3 -0
  661. package/dist/src/utils/session.js.map +1 -1
  662. package/dist/src/utils/sessionUtils.d.ts +14 -0
  663. package/dist/src/utils/sessionUtils.js +113 -0
  664. package/dist/src/utils/sessionUtils.js.map +1 -0
  665. package/dist/src/utils/sessionUtils.test.d.ts +1 -0
  666. package/dist/src/utils/sessionUtils.test.js +137 -0
  667. package/dist/src/utils/sessionUtils.test.js.map +1 -0
  668. package/dist/src/utils/shell-utils.js +1 -0
  669. package/dist/src/utils/shell-utils.js.map +1 -1
  670. package/dist/src/utils/stdio.js +6 -0
  671. package/dist/src/utils/stdio.js.map +1 -1
  672. package/dist/src/utils/textUtils.d.ts +9 -0
  673. package/dist/src/utils/textUtils.js +15 -0
  674. package/dist/src/utils/textUtils.js.map +1 -1
  675. package/dist/src/utils/textUtils.test.js +42 -1
  676. package/dist/src/utils/textUtils.test.js.map +1 -1
  677. package/dist/src/utils/toolCallContext.d.ts +0 -5
  678. package/dist/src/utils/toolCallContext.js +1 -1
  679. package/dist/src/utils/toolCallContext.js.map +1 -1
  680. package/dist/src/utils/userAccountManager.js +3 -0
  681. package/dist/src/utils/userAccountManager.js.map +1 -1
  682. package/dist/tsconfig.tsbuildinfo +1 -1
  683. package/package.json +6 -3
  684. package/dist/docs/architecture.md +0 -80
  685. package/dist/docs/cli/index.md +0 -123
  686. package/dist/docs/core/concepts.md +0 -137
  687. package/dist/docs/get-started/configuration-v1.md +0 -882
  688. package/dist/google-gemini-cli-core-0.30.0-preview.4.tgz +0 -0
  689. /package/dist/docs/{core → reference}/memport.md +0 -0
  690. /package/dist/docs/{core → reference}/tools-api.md +0 -0
  691. /package/dist/docs/{cli → resources}/uninstall.md +0 -0
@@ -297,6 +297,41 @@ describe('PolicyEngine', () => {
297
297
  });
298
298
  });
299
299
  describe('MCP server wildcard patterns', () => {
300
+ it('should match global wildcard (*)', async () => {
301
+ engine = new PolicyEngine({
302
+ rules: [
303
+ { toolName: '*', decision: PolicyDecision.ALLOW, priority: 10 },
304
+ ],
305
+ });
306
+ expect((await engine.check({ name: 'read_file' }, undefined)).decision).toBe(PolicyDecision.ALLOW);
307
+ expect((await engine.check({ name: 'my-server__tool' }, 'my-server')).decision).toBe(PolicyDecision.ALLOW);
308
+ });
309
+ it('should match any MCP tool when toolName is *__*', async () => {
310
+ engine = new PolicyEngine({
311
+ rules: [
312
+ { toolName: '*__*', decision: PolicyDecision.ALLOW, priority: 10 },
313
+ ],
314
+ defaultDecision: PolicyDecision.DENY,
315
+ });
316
+ expect((await engine.check({ name: 'mcp__tool' }, 'mcp')).decision).toBe(PolicyDecision.ALLOW);
317
+ expect((await engine.check({ name: 'other__tool' }, 'other')).decision).toBe(PolicyDecision.ALLOW);
318
+ expect((await engine.check({ name: 'read_file' }, undefined)).decision).toBe(PolicyDecision.DENY);
319
+ });
320
+ it('should match specific tool across all servers when using *__tool', async () => {
321
+ engine = new PolicyEngine({
322
+ rules: [
323
+ {
324
+ toolName: '*__search',
325
+ decision: PolicyDecision.ALLOW,
326
+ priority: 10,
327
+ },
328
+ ],
329
+ defaultDecision: PolicyDecision.DENY,
330
+ });
331
+ expect((await engine.check({ name: 'ws__search' }, 'ws')).decision).toBe(PolicyDecision.ALLOW);
332
+ expect((await engine.check({ name: 'gh__search' }, 'gh')).decision).toBe(PolicyDecision.ALLOW);
333
+ expect((await engine.check({ name: 'gh__list' }, 'gh')).decision).toBe(PolicyDecision.DENY);
334
+ });
300
335
  it('should match MCP server wildcard patterns', async () => {
301
336
  const rules = [
302
337
  {
@@ -312,16 +347,15 @@ describe('PolicyEngine', () => {
312
347
  ];
313
348
  engine = new PolicyEngine({ rules });
314
349
  // Should match my-server tools
315
- expect((await engine.check({ name: 'my-server__tool1' }, undefined)).decision).toBe(PolicyDecision.ALLOW);
316
- expect((await engine.check({ name: 'my-server__another_tool' }, undefined))
350
+ expect((await engine.check({ name: 'my-server__tool1' }, 'my-server'))
351
+ .decision).toBe(PolicyDecision.ALLOW);
352
+ expect((await engine.check({ name: 'my-server__another_tool' }, 'my-server'))
317
353
  .decision).toBe(PolicyDecision.ALLOW);
318
354
  // Should match blocked-server tools
319
- expect((await engine.check({ name: 'blocked-server__tool1' }, undefined))
320
- .decision).toBe(PolicyDecision.DENY);
321
- expect((await engine.check({ name: 'blocked-server__dangerous' }, undefined))
322
- .decision).toBe(PolicyDecision.DENY);
355
+ expect((await engine.check({ name: 'blocked-server__tool1' }, 'blocked-server')).decision).toBe(PolicyDecision.DENY);
356
+ expect((await engine.check({ name: 'blocked-server__dangerous' }, 'blocked-server')).decision).toBe(PolicyDecision.DENY);
323
357
  // Should not match other patterns
324
- expect((await engine.check({ name: 'other-server__tool' }, undefined))
358
+ expect((await engine.check({ name: 'other-server__tool' }, 'other-server'))
325
359
  .decision).toBe(PolicyDecision.ASK_USER);
326
360
  expect((await engine.check({ name: 'my-server-tool' }, undefined)).decision).toBe(PolicyDecision.ASK_USER); // No __ separator
327
361
  expect((await engine.check({ name: 'my-server' }, undefined)).decision).toBe(PolicyDecision.ASK_USER); // No tool name
@@ -341,9 +375,9 @@ describe('PolicyEngine', () => {
341
375
  ];
342
376
  engine = new PolicyEngine({ rules });
343
377
  // Specific tool deny should override server allow
344
- expect((await engine.check({ name: 'my-server__dangerous-tool' }, undefined))
378
+ expect((await engine.check({ name: 'my-server__dangerous-tool' }, 'my-server'))
345
379
  .decision).toBe(PolicyDecision.DENY);
346
- expect((await engine.check({ name: 'my-server__safe-tool' }, undefined))
380
+ expect((await engine.check({ name: 'my-server__safe-tool' }, 'my-server'))
347
381
  .decision).toBe(PolicyDecision.ALLOW);
348
382
  });
349
383
  it('should NOT match spoofed server names when using wildcards', async () => {
@@ -1669,6 +1703,39 @@ describe('PolicyEngine', () => {
1669
1703
  ],
1670
1704
  expected: [],
1671
1705
  },
1706
+ {
1707
+ name: 'should handle global wildcard * in getExcludedTools',
1708
+ rules: [
1709
+ {
1710
+ toolName: '*',
1711
+ decision: PolicyDecision.DENY,
1712
+ priority: 10,
1713
+ },
1714
+ ],
1715
+ expected: ['*'],
1716
+ },
1717
+ {
1718
+ name: 'should handle MCP category wildcard *__* in getExcludedTools',
1719
+ rules: [
1720
+ {
1721
+ toolName: '*__*',
1722
+ decision: PolicyDecision.DENY,
1723
+ priority: 10,
1724
+ },
1725
+ ],
1726
+ expected: ['*__*'],
1727
+ },
1728
+ {
1729
+ name: 'should handle tool wildcard *__search in getExcludedTools',
1730
+ rules: [
1731
+ {
1732
+ toolName: '*__search',
1733
+ decision: PolicyDecision.DENY,
1734
+ priority: 10,
1735
+ },
1736
+ ],
1737
+ expected: ['*__search'],
1738
+ },
1672
1739
  ];
1673
1740
  it.each(testCases)('$name', ({ rules, approvalMode, nonInteractive, expected }) => {
1674
1741
  engine = new PolicyEngine({
@@ -1679,6 +1746,293 @@ describe('PolicyEngine', () => {
1679
1746
  const excluded = engine.getExcludedTools();
1680
1747
  expect(Array.from(excluded).sort()).toEqual(expected.sort());
1681
1748
  });
1749
+ it('should skip annotation-based rules when no metadata is provided', () => {
1750
+ engine = new PolicyEngine({
1751
+ rules: [
1752
+ {
1753
+ toolAnnotations: { destructiveHint: true },
1754
+ decision: PolicyDecision.DENY,
1755
+ priority: 10,
1756
+ },
1757
+ ],
1758
+ });
1759
+ const excluded = engine.getExcludedTools();
1760
+ expect(Array.from(excluded)).toEqual([]);
1761
+ });
1762
+ it('should exclude tools matching annotation-based DENY rule when metadata is provided', () => {
1763
+ engine = new PolicyEngine({
1764
+ rules: [
1765
+ {
1766
+ toolAnnotations: { destructiveHint: true },
1767
+ decision: PolicyDecision.DENY,
1768
+ priority: 10,
1769
+ },
1770
+ ],
1771
+ });
1772
+ const metadata = new Map([
1773
+ ['dangerous_tool', { destructiveHint: true }],
1774
+ ['safe_tool', { readOnlyHint: true }],
1775
+ ]);
1776
+ const excluded = engine.getExcludedTools(metadata);
1777
+ expect(Array.from(excluded)).toEqual(['dangerous_tool']);
1778
+ });
1779
+ it('should NOT exclude tools whose annotations do not match', () => {
1780
+ engine = new PolicyEngine({
1781
+ rules: [
1782
+ {
1783
+ toolAnnotations: { destructiveHint: true },
1784
+ decision: PolicyDecision.DENY,
1785
+ priority: 10,
1786
+ },
1787
+ ],
1788
+ });
1789
+ const metadata = new Map([
1790
+ ['safe_tool', { readOnlyHint: true }],
1791
+ ]);
1792
+ const excluded = engine.getExcludedTools(metadata);
1793
+ expect(Array.from(excluded)).toEqual([]);
1794
+ });
1795
+ it('should exclude tools matching both toolName pattern AND annotations', () => {
1796
+ engine = new PolicyEngine({
1797
+ rules: [
1798
+ {
1799
+ toolName: 'server__*',
1800
+ toolAnnotations: { destructiveHint: true },
1801
+ decision: PolicyDecision.DENY,
1802
+ priority: 10,
1803
+ },
1804
+ ],
1805
+ });
1806
+ const metadata = new Map([
1807
+ ['server__dangerous_tool', { destructiveHint: true }],
1808
+ ['other__dangerous_tool', { destructiveHint: true }],
1809
+ ['server__safe_tool', { readOnlyHint: true }],
1810
+ ]);
1811
+ const excluded = engine.getExcludedTools(metadata);
1812
+ expect(Array.from(excluded)).toEqual(['server__dangerous_tool']);
1813
+ });
1814
+ it('should exclude unprocessed tools from allToolNames when global DENY is active', () => {
1815
+ engine = new PolicyEngine({
1816
+ rules: [
1817
+ {
1818
+ toolName: 'glob',
1819
+ decision: PolicyDecision.ALLOW,
1820
+ priority: 70,
1821
+ },
1822
+ {
1823
+ toolName: 'read_file',
1824
+ decision: PolicyDecision.ALLOW,
1825
+ priority: 70,
1826
+ },
1827
+ {
1828
+ // Simulates plan.toml: mcpName="*" → toolName="*__*"
1829
+ toolName: '*__*',
1830
+ toolAnnotations: { readOnlyHint: true },
1831
+ decision: PolicyDecision.ASK_USER,
1832
+ priority: 70,
1833
+ },
1834
+ {
1835
+ decision: PolicyDecision.DENY,
1836
+ priority: 60,
1837
+ },
1838
+ ],
1839
+ });
1840
+ // MCP tools are registered with unqualified names in ToolRegistry
1841
+ const allToolNames = new Set([
1842
+ 'glob',
1843
+ 'read_file',
1844
+ 'shell',
1845
+ 'web_fetch',
1846
+ 'read_mcp_tool',
1847
+ 'write_mcp_tool',
1848
+ ]);
1849
+ // buildToolMetadata() includes _serverName for MCP tools
1850
+ const toolMetadata = new Map([
1851
+ ['read_mcp_tool', { readOnlyHint: true, _serverName: 'my-server' }],
1852
+ ['write_mcp_tool', { readOnlyHint: false, _serverName: 'my-server' }],
1853
+ ]);
1854
+ const excluded = engine.getExcludedTools(toolMetadata, allToolNames);
1855
+ expect(excluded.has('shell')).toBe(true);
1856
+ expect(excluded.has('web_fetch')).toBe(true);
1857
+ // Non-read-only MCP tool excluded by catch-all DENY
1858
+ expect(excluded.has('write_mcp_tool')).toBe(true);
1859
+ expect(excluded.has('glob')).toBe(false);
1860
+ expect(excluded.has('read_file')).toBe(false);
1861
+ // Read-only MCP tool allowed by annotation rule
1862
+ expect(excluded.has('read_mcp_tool')).toBe(false);
1863
+ });
1864
+ it('should match already-qualified MCP tool names without _serverName', () => {
1865
+ engine = new PolicyEngine({
1866
+ rules: [
1867
+ {
1868
+ toolName: '*__*',
1869
+ toolAnnotations: { readOnlyHint: true },
1870
+ decision: PolicyDecision.ASK_USER,
1871
+ priority: 70,
1872
+ },
1873
+ {
1874
+ decision: PolicyDecision.DENY,
1875
+ priority: 60,
1876
+ },
1877
+ ],
1878
+ });
1879
+ // Tool registered with qualified name (collision case)
1880
+ const allToolNames = new Set([
1881
+ 'myserver__read_tool',
1882
+ 'myserver__write_tool',
1883
+ ]);
1884
+ const toolMetadata = new Map([
1885
+ ['myserver__read_tool', { readOnlyHint: true }],
1886
+ ['myserver__write_tool', { readOnlyHint: false }],
1887
+ ]);
1888
+ const excluded = engine.getExcludedTools(toolMetadata, allToolNames);
1889
+ // Qualified name already contains __, matched directly without _serverName
1890
+ expect(excluded.has('myserver__read_tool')).toBe(false);
1891
+ expect(excluded.has('myserver__write_tool')).toBe(true);
1892
+ });
1893
+ it('should not exclude unprocessed tools when allToolNames is not provided (backward compat)', () => {
1894
+ engine = new PolicyEngine({
1895
+ rules: [
1896
+ {
1897
+ toolName: 'glob',
1898
+ decision: PolicyDecision.ALLOW,
1899
+ priority: 70,
1900
+ },
1901
+ {
1902
+ toolName: 'read_file',
1903
+ decision: PolicyDecision.ALLOW,
1904
+ priority: 70,
1905
+ },
1906
+ {
1907
+ decision: PolicyDecision.DENY,
1908
+ priority: 60,
1909
+ },
1910
+ ],
1911
+ });
1912
+ const excluded = engine.getExcludedTools();
1913
+ // Without allToolNames, only explicitly named DENY tools are excluded
1914
+ expect(excluded.has('shell')).toBe(false);
1915
+ expect(excluded.has('web_fetch')).toBe(false);
1916
+ expect(excluded.has('glob')).toBe(false);
1917
+ expect(excluded.has('read_file')).toBe(false);
1918
+ });
1919
+ it('should correctly simulate plan.toml rules with allToolNames including MCP tools', () => {
1920
+ // Simulate plan.toml: catch-all DENY at priority 60, explicit ALLOWs at 70,
1921
+ // annotation-based ASK_USER for read-only MCP tools at priority 70.
1922
+ // mcpName="*" in TOML becomes toolName="*__*" after loading.
1923
+ engine = new PolicyEngine({
1924
+ rules: [
1925
+ {
1926
+ toolName: 'glob',
1927
+ decision: PolicyDecision.ALLOW,
1928
+ priority: 70,
1929
+ modes: [ApprovalMode.PLAN],
1930
+ },
1931
+ {
1932
+ toolName: 'grep_search',
1933
+ decision: PolicyDecision.ALLOW,
1934
+ priority: 70,
1935
+ modes: [ApprovalMode.PLAN],
1936
+ },
1937
+ {
1938
+ toolName: 'read_file',
1939
+ decision: PolicyDecision.ALLOW,
1940
+ priority: 70,
1941
+ modes: [ApprovalMode.PLAN],
1942
+ },
1943
+ {
1944
+ toolName: 'list_directory',
1945
+ decision: PolicyDecision.ALLOW,
1946
+ priority: 70,
1947
+ modes: [ApprovalMode.PLAN],
1948
+ },
1949
+ {
1950
+ toolName: 'google_web_search',
1951
+ decision: PolicyDecision.ALLOW,
1952
+ priority: 70,
1953
+ modes: [ApprovalMode.PLAN],
1954
+ },
1955
+ {
1956
+ toolName: 'activate_skill',
1957
+ decision: PolicyDecision.ALLOW,
1958
+ priority: 70,
1959
+ modes: [ApprovalMode.PLAN],
1960
+ },
1961
+ {
1962
+ toolName: 'ask_user',
1963
+ decision: PolicyDecision.ASK_USER,
1964
+ priority: 70,
1965
+ modes: [ApprovalMode.PLAN],
1966
+ },
1967
+ {
1968
+ toolName: 'exit_plan_mode',
1969
+ decision: PolicyDecision.ASK_USER,
1970
+ priority: 70,
1971
+ modes: [ApprovalMode.PLAN],
1972
+ },
1973
+ {
1974
+ toolName: '*__*',
1975
+ toolAnnotations: { readOnlyHint: true },
1976
+ decision: PolicyDecision.ASK_USER,
1977
+ priority: 70,
1978
+ modes: [ApprovalMode.PLAN],
1979
+ },
1980
+ {
1981
+ decision: PolicyDecision.DENY,
1982
+ priority: 60,
1983
+ modes: [ApprovalMode.PLAN],
1984
+ },
1985
+ ],
1986
+ approvalMode: ApprovalMode.PLAN,
1987
+ });
1988
+ // MCP tools are registered with unqualified names in ToolRegistry
1989
+ const allToolNames = new Set([
1990
+ 'glob',
1991
+ 'grep_search',
1992
+ 'read_file',
1993
+ 'list_directory',
1994
+ 'google_web_search',
1995
+ 'activate_skill',
1996
+ 'ask_user',
1997
+ 'exit_plan_mode',
1998
+ 'shell',
1999
+ 'write_file',
2000
+ 'replace',
2001
+ 'web_fetch',
2002
+ 'write_todos',
2003
+ 'memory',
2004
+ 'read_tool',
2005
+ 'write_tool',
2006
+ ]);
2007
+ // buildToolMetadata() includes _serverName for MCP tools
2008
+ const toolMetadata = new Map([
2009
+ ['read_tool', { readOnlyHint: true, _serverName: 'mcp-server' }],
2010
+ ['write_tool', { readOnlyHint: false, _serverName: 'mcp-server' }],
2011
+ ]);
2012
+ const excluded = engine.getExcludedTools(toolMetadata, allToolNames);
2013
+ // These should be excluded (caught by catch-all DENY)
2014
+ expect(excluded.has('shell')).toBe(true);
2015
+ expect(excluded.has('web_fetch')).toBe(true);
2016
+ expect(excluded.has('write_todos')).toBe(true);
2017
+ expect(excluded.has('memory')).toBe(true);
2018
+ // write_file and replace are excluded unless they have argsPattern rules
2019
+ // (argsPattern rules don't exclude, but don't explicitly allow either)
2020
+ expect(excluded.has('write_file')).toBe(true);
2021
+ expect(excluded.has('replace')).toBe(true);
2022
+ // Non-read-only MCP tool excluded by catch-all DENY
2023
+ expect(excluded.has('write_tool')).toBe(true);
2024
+ // These should NOT be excluded (explicitly allowed)
2025
+ expect(excluded.has('glob')).toBe(false);
2026
+ expect(excluded.has('grep_search')).toBe(false);
2027
+ expect(excluded.has('read_file')).toBe(false);
2028
+ expect(excluded.has('list_directory')).toBe(false);
2029
+ expect(excluded.has('google_web_search')).toBe(false);
2030
+ expect(excluded.has('activate_skill')).toBe(false);
2031
+ expect(excluded.has('ask_user')).toBe(false);
2032
+ expect(excluded.has('exit_plan_mode')).toBe(false);
2033
+ // Read-only MCP tool allowed by annotation rule (matched via _serverName)
2034
+ expect(excluded.has('read_tool')).toBe(false);
2035
+ });
1682
2036
  });
1683
2037
  describe('YOLO mode with ask_user tool', () => {
1684
2038
  it('should return ASK_USER for ask_user tool even in YOLO mode', async () => {
@@ -1751,5 +2105,122 @@ describe('PolicyEngine', () => {
1751
2105
  expect(shellResult.rule?.denyMessage).toContain('Execution of scripts (including those from skills) is blocked');
1752
2106
  });
1753
2107
  });
2108
+ describe('removeRulesByTier', () => {
2109
+ it('should remove rules matching a specific tier', () => {
2110
+ engine.addRule({
2111
+ toolName: 'rule1',
2112
+ decision: PolicyDecision.ALLOW,
2113
+ priority: 1.1,
2114
+ });
2115
+ engine.addRule({
2116
+ toolName: 'rule2',
2117
+ decision: PolicyDecision.ALLOW,
2118
+ priority: 1.5,
2119
+ });
2120
+ engine.addRule({
2121
+ toolName: 'rule3',
2122
+ decision: PolicyDecision.ALLOW,
2123
+ priority: 2.1,
2124
+ });
2125
+ engine.addRule({
2126
+ toolName: 'rule4',
2127
+ decision: PolicyDecision.ALLOW,
2128
+ priority: 0.5,
2129
+ });
2130
+ engine.addRule({ toolName: 'rule5', decision: PolicyDecision.ALLOW }); // priority undefined -> 0
2131
+ expect(engine.getRules()).toHaveLength(5);
2132
+ engine.removeRulesByTier(1);
2133
+ const rules = engine.getRules();
2134
+ expect(rules).toHaveLength(3);
2135
+ expect(rules.some((r) => r.toolName === 'rule1')).toBe(false);
2136
+ expect(rules.some((r) => r.toolName === 'rule2')).toBe(false);
2137
+ expect(rules.some((r) => r.toolName === 'rule3')).toBe(true);
2138
+ expect(rules.some((r) => r.toolName === 'rule4')).toBe(true);
2139
+ expect(rules.some((r) => r.toolName === 'rule5')).toBe(true);
2140
+ });
2141
+ it('should handle removing tier 0 rules (including undefined priority)', () => {
2142
+ engine.addRule({
2143
+ toolName: 'rule1',
2144
+ decision: PolicyDecision.ALLOW,
2145
+ priority: 0.5,
2146
+ });
2147
+ engine.addRule({ toolName: 'rule2', decision: PolicyDecision.ALLOW }); // defaults to 0
2148
+ engine.addRule({
2149
+ toolName: 'rule3',
2150
+ decision: PolicyDecision.ALLOW,
2151
+ priority: 1.5,
2152
+ });
2153
+ expect(engine.getRules()).toHaveLength(3);
2154
+ engine.removeRulesByTier(0);
2155
+ const rules = engine.getRules();
2156
+ expect(rules).toHaveLength(1);
2157
+ expect(rules[0].toolName).toBe('rule3');
2158
+ });
2159
+ });
2160
+ describe('removeCheckersByTier', () => {
2161
+ it('should remove checkers matching a specific tier', () => {
2162
+ engine.addChecker({
2163
+ checker: { type: 'external', name: 'c1' },
2164
+ priority: 1.1,
2165
+ });
2166
+ engine.addChecker({
2167
+ checker: { type: 'external', name: 'c2' },
2168
+ priority: 1.9,
2169
+ });
2170
+ engine.addChecker({
2171
+ checker: { type: 'external', name: 'c3' },
2172
+ priority: 2.5,
2173
+ });
2174
+ expect(engine.getCheckers()).toHaveLength(3);
2175
+ engine.removeCheckersByTier(1);
2176
+ const checkers = engine.getCheckers();
2177
+ expect(checkers).toHaveLength(1);
2178
+ expect(checkers[0].priority).toBe(2.5);
2179
+ });
2180
+ });
2181
+ describe('Tool Annotations', () => {
2182
+ it('should match tools by semantic annotations', async () => {
2183
+ engine = new PolicyEngine({
2184
+ rules: [
2185
+ {
2186
+ toolAnnotations: { readOnlyHint: true },
2187
+ decision: PolicyDecision.ALLOW,
2188
+ priority: 10,
2189
+ },
2190
+ ],
2191
+ defaultDecision: PolicyDecision.DENY,
2192
+ });
2193
+ const readOnlyTool = { name: 'read', args: {} };
2194
+ const readOnlyMeta = { readOnlyHint: true, extra: 'info' };
2195
+ const writeTool = { name: 'write', args: {} };
2196
+ const writeMeta = { readOnlyHint: false };
2197
+ expect((await engine.check(readOnlyTool, undefined, readOnlyMeta)).decision).toBe(PolicyDecision.ALLOW);
2198
+ expect((await engine.check(writeTool, undefined, writeMeta)).decision).toBe(PolicyDecision.DENY);
2199
+ expect((await engine.check(writeTool, undefined, {})).decision).toBe(PolicyDecision.DENY);
2200
+ });
2201
+ it('should support scoped annotation rules', async () => {
2202
+ engine = new PolicyEngine({
2203
+ rules: [
2204
+ {
2205
+ toolName: '*__*',
2206
+ toolAnnotations: { experimental: true },
2207
+ decision: PolicyDecision.DENY,
2208
+ priority: 20,
2209
+ },
2210
+ {
2211
+ toolName: '*__*',
2212
+ decision: PolicyDecision.ALLOW,
2213
+ priority: 10,
2214
+ },
2215
+ ],
2216
+ });
2217
+ expect((await engine.check({ name: 'mcp__test' }, 'mcp', {
2218
+ experimental: true,
2219
+ })).decision).toBe(PolicyDecision.DENY);
2220
+ expect((await engine.check({ name: 'mcp__stable' }, 'mcp', {
2221
+ experimental: false,
2222
+ })).decision).toBe(PolicyDecision.ALLOW);
2223
+ });
2224
+ });
1754
2225
  });
1755
2226
  //# sourceMappingURL=policy-engine.test.js.map