@machina.ai/cell-cli-core 1.22.5-rc1 → 1.25.0-rc2

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 (732) hide show
  1. package/dist/docs/AFTER_MERGE_PROMPT.md +26 -0
  2. package/dist/docs/CHANGES.md +124 -0
  3. package/dist/docs/api-proxy.md +27 -0
  4. package/dist/docs/architecture.md +80 -0
  5. package/dist/docs/assets/connected_devtools.png +0 -0
  6. package/dist/docs/assets/gemini-screenshot.png +0 -0
  7. package/dist/docs/assets/monitoring-dashboard-logs.png +0 -0
  8. package/dist/docs/assets/monitoring-dashboard-metrics.png +0 -0
  9. package/dist/docs/assets/monitoring-dashboard-overview.png +0 -0
  10. package/dist/docs/assets/release_patch.png +0 -0
  11. package/dist/docs/assets/theme-ansi-light.png +0 -0
  12. package/dist/docs/assets/theme-ansi.png +0 -0
  13. package/dist/docs/assets/theme-atom-one.png +0 -0
  14. package/dist/docs/assets/theme-ayu-light.png +0 -0
  15. package/dist/docs/assets/theme-ayu.png +0 -0
  16. package/dist/docs/assets/theme-custom.png +0 -0
  17. package/dist/docs/assets/theme-default-light.png +0 -0
  18. package/dist/docs/assets/theme-default.png +0 -0
  19. package/dist/docs/assets/theme-dracula.png +0 -0
  20. package/dist/docs/assets/theme-github-light.png +0 -0
  21. package/dist/docs/assets/theme-github.png +0 -0
  22. package/dist/docs/assets/theme-google-light.png +0 -0
  23. package/dist/docs/assets/theme-xcode-light.png +0 -0
  24. package/dist/docs/changelogs/index.md +612 -0
  25. package/dist/docs/changelogs/latest.md +153 -0
  26. package/dist/docs/changelogs/preview.md +131 -0
  27. package/dist/docs/changelogs/releases.md +1162 -0
  28. package/dist/docs/cli/authentication.md +3 -0
  29. package/dist/docs/cli/checkpointing.md +94 -0
  30. package/dist/docs/cli/commands.md +357 -0
  31. package/dist/docs/cli/custom-commands.md +315 -0
  32. package/dist/docs/cli/enterprise.md +564 -0
  33. package/dist/docs/cli/gemini-ignore.md +71 -0
  34. package/dist/docs/cli/gemini-md.md +109 -0
  35. package/dist/docs/cli/generation-settings.md +210 -0
  36. package/dist/docs/cli/headless.md +388 -0
  37. package/dist/docs/cli/index.md +63 -0
  38. package/dist/docs/cli/keyboard-shortcuts.md +136 -0
  39. package/dist/docs/cli/model-routing.md +37 -0
  40. package/dist/docs/cli/model.md +62 -0
  41. package/dist/docs/cli/sandbox.md +171 -0
  42. package/dist/docs/cli/session-management.md +158 -0
  43. package/dist/docs/cli/settings.md +148 -0
  44. package/dist/docs/cli/skills.md +188 -0
  45. package/dist/docs/cli/system-prompt.md +94 -0
  46. package/dist/docs/cli/telemetry.md +813 -0
  47. package/dist/docs/cli/themes.md +237 -0
  48. package/dist/docs/cli/token-caching.md +20 -0
  49. package/dist/docs/cli/trusted-folders.md +95 -0
  50. package/dist/docs/cli/tutorials/skills-getting-started.md +124 -0
  51. package/dist/docs/cli/tutorials.md +87 -0
  52. package/dist/docs/cli/uninstall.md +47 -0
  53. package/dist/docs/core/index.md +101 -0
  54. package/dist/docs/core/memport.md +246 -0
  55. package/dist/docs/core/policy-engine.md +268 -0
  56. package/dist/docs/core/tools-api.md +131 -0
  57. package/dist/docs/examples/proxy-script.md +83 -0
  58. package/dist/docs/extensions/extension-releasing.md +183 -0
  59. package/dist/docs/extensions/getting-started-extensions.md +244 -0
  60. package/dist/docs/extensions/index.md +343 -0
  61. package/dist/docs/faq.md +153 -0
  62. package/dist/docs/get-started/authentication.md +321 -0
  63. package/dist/docs/get-started/configuration-v1.md +890 -0
  64. package/dist/docs/get-started/configuration.md +1643 -0
  65. package/dist/docs/get-started/examples.md +218 -0
  66. package/dist/docs/get-started/gemini-3.md +101 -0
  67. package/dist/docs/get-started/index.md +71 -0
  68. package/dist/docs/get-started/installation.md +141 -0
  69. package/dist/docs/hooks/best-practices.md +856 -0
  70. package/dist/docs/hooks/index.md +723 -0
  71. package/dist/docs/hooks/reference.md +178 -0
  72. package/dist/docs/hooks/writing-hooks.md +1044 -0
  73. package/dist/docs/ide-integration/ide-companion-spec.md +267 -0
  74. package/dist/docs/ide-integration/index.md +201 -0
  75. package/dist/docs/index.md +147 -0
  76. package/dist/docs/integration-tests.md +211 -0
  77. package/dist/docs/issue-and-pr-automation.md +134 -0
  78. package/dist/docs/local-development.md +128 -0
  79. package/dist/docs/mcp_integration.md +160 -0
  80. package/dist/docs/mermaid/context.mmd +103 -0
  81. package/dist/docs/mermaid/render-path.mmd +64 -0
  82. package/dist/docs/npm.md +62 -0
  83. package/dist/docs/quota-and-pricing.md +158 -0
  84. package/dist/docs/release-confidence.md +164 -0
  85. package/dist/docs/releases.md +540 -0
  86. package/dist/docs/sidebar.json +301 -0
  87. package/dist/docs/tools/file-system.md +217 -0
  88. package/dist/docs/tools/index.md +95 -0
  89. package/dist/docs/tools/mcp-server.md +1045 -0
  90. package/dist/docs/tools/memory.md +54 -0
  91. package/dist/docs/tools/shell.md +260 -0
  92. package/dist/docs/tools/todos.md +56 -0
  93. package/dist/docs/tools/web-fetch.md +59 -0
  94. package/dist/docs/tools/web-search.md +42 -0
  95. package/dist/docs/tos-privacy.md +96 -0
  96. package/dist/docs/troubleshooting.md +162 -0
  97. package/dist/package.json +7 -4
  98. package/dist/src/agents/a2a-client-manager.d.ts +82 -0
  99. package/dist/src/agents/a2a-client-manager.js +295 -0
  100. package/dist/src/agents/a2a-client-manager.js.map +1 -0
  101. package/dist/src/agents/a2a-client-manager.test.js +281 -0
  102. package/dist/src/agents/a2a-client-manager.test.js.map +1 -0
  103. package/dist/src/agents/a2aUtils.d.ts +29 -0
  104. package/dist/src/agents/a2aUtils.js +113 -0
  105. package/dist/src/agents/a2aUtils.js.map +1 -0
  106. package/dist/src/agents/a2aUtils.test.js +147 -0
  107. package/dist/src/agents/a2aUtils.test.js.map +1 -0
  108. package/dist/src/agents/agentLoader.d.ts +68 -0
  109. package/dist/src/agents/agentLoader.js +255 -0
  110. package/dist/src/agents/agentLoader.js.map +1 -0
  111. package/dist/src/agents/agentLoader.test.js +307 -0
  112. package/dist/src/agents/agentLoader.test.js.map +1 -0
  113. package/dist/src/agents/cli-help-agent.d.ts +24 -0
  114. package/dist/src/agents/cli-help-agent.js +85 -0
  115. package/dist/src/agents/cli-help-agent.js.map +1 -0
  116. package/dist/src/agents/cli-help-agent.test.js +65 -0
  117. package/dist/src/agents/cli-help-agent.test.js.map +1 -0
  118. package/dist/src/agents/codebase-investigator.d.ts +2 -2
  119. package/dist/src/agents/codebase-investigator.js +14 -8
  120. package/dist/src/agents/codebase-investigator.js.map +1 -1
  121. package/dist/src/agents/delegate-to-agent-tool.d.ts +2 -2
  122. package/dist/src/agents/delegate-to-agent-tool.js +25 -14
  123. package/dist/src/agents/delegate-to-agent-tool.js.map +1 -1
  124. package/dist/src/agents/delegate-to-agent-tool.test.js +101 -21
  125. package/dist/src/agents/delegate-to-agent-tool.test.js.map +1 -1
  126. package/dist/src/agents/{executor.d.ts → local-executor.d.ts} +5 -11
  127. package/dist/src/agents/{executor.js → local-executor.js} +123 -62
  128. package/dist/src/agents/local-executor.js.map +1 -0
  129. package/dist/src/agents/local-executor.test.d.ts +6 -0
  130. package/dist/src/agents/{executor.test.js → local-executor.test.js} +136 -58
  131. package/dist/src/agents/local-executor.test.js.map +1 -0
  132. package/dist/src/agents/{invocation.d.ts → local-invocation.d.ts} +6 -7
  133. package/dist/src/agents/{invocation.js → local-invocation.js} +9 -10
  134. package/dist/src/agents/local-invocation.js.map +1 -0
  135. package/dist/src/agents/local-invocation.test.d.ts +6 -0
  136. package/dist/src/agents/{invocation.test.js → local-invocation.test.js} +29 -20
  137. package/dist/src/agents/local-invocation.test.js.map +1 -0
  138. package/dist/src/agents/registry.d.ts +22 -1
  139. package/dist/src/agents/registry.js +192 -35
  140. package/dist/src/agents/registry.js.map +1 -1
  141. package/dist/src/agents/registry.test.js +407 -33
  142. package/dist/src/agents/registry.test.js.map +1 -1
  143. package/dist/src/agents/remote-invocation.d.ts +35 -0
  144. package/dist/src/agents/remote-invocation.js +126 -0
  145. package/dist/src/agents/remote-invocation.js.map +1 -0
  146. package/dist/src/agents/remote-invocation.test.d.ts +6 -0
  147. package/dist/src/agents/remote-invocation.test.js +201 -0
  148. package/dist/src/agents/remote-invocation.test.js.map +1 -0
  149. package/dist/src/agents/subagent-tool-wrapper.d.ts +2 -2
  150. package/dist/src/agents/subagent-tool-wrapper.js +11 -6
  151. package/dist/src/agents/subagent-tool-wrapper.js.map +1 -1
  152. package/dist/src/agents/subagent-tool-wrapper.test.js +33 -19
  153. package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -1
  154. package/dist/src/agents/types.d.ts +21 -15
  155. package/dist/src/agents/types.js.map +1 -1
  156. package/dist/src/availability/fallbackIntegration.test.d.ts +6 -0
  157. package/dist/src/availability/fallbackIntegration.test.js +58 -0
  158. package/dist/src/availability/fallbackIntegration.test.js.map +1 -0
  159. package/dist/src/availability/modelAvailabilityService.d.ts +2 -1
  160. package/dist/src/availability/policyHelpers.d.ts +4 -3
  161. package/dist/src/availability/policyHelpers.js +13 -22
  162. package/dist/src/availability/policyHelpers.js.map +1 -1
  163. package/dist/src/availability/policyHelpers.test.js +28 -18
  164. package/dist/src/availability/policyHelpers.test.js.map +1 -1
  165. package/dist/src/code_assist/experiments/experiments.d.ts +1 -1
  166. package/dist/src/code_assist/experiments/experiments.js +21 -0
  167. package/dist/src/code_assist/experiments/experiments.js.map +1 -1
  168. package/dist/src/code_assist/experiments/experiments_local.test.d.ts +6 -0
  169. package/dist/src/code_assist/experiments/experiments_local.test.js +110 -0
  170. package/dist/src/code_assist/experiments/experiments_local.test.js.map +1 -0
  171. package/dist/src/code_assist/oauth-credential-storage.js +3 -4
  172. package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
  173. package/dist/src/code_assist/oauth2.js +32 -2
  174. package/dist/src/code_assist/oauth2.js.map +1 -1
  175. package/dist/src/code_assist/oauth2.test.js +111 -16
  176. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  177. package/dist/src/code_assist/server.d.ts +9 -1
  178. package/dist/src/code_assist/server.js +74 -11
  179. package/dist/src/code_assist/server.js.map +1 -1
  180. package/dist/src/code_assist/server.test.js +199 -27
  181. package/dist/src/code_assist/server.test.js.map +1 -1
  182. package/dist/src/code_assist/setup.js +6 -4
  183. package/dist/src/code_assist/setup.js.map +1 -1
  184. package/dist/src/code_assist/setup.test.js +63 -0
  185. package/dist/src/code_assist/setup.test.js.map +1 -1
  186. package/dist/src/code_assist/telemetry.d.ts +14 -0
  187. package/dist/src/code_assist/telemetry.js +157 -0
  188. package/dist/src/code_assist/telemetry.js.map +1 -0
  189. package/dist/src/code_assist/telemetry.test.d.ts +6 -0
  190. package/dist/src/code_assist/telemetry.test.js +301 -0
  191. package/dist/src/code_assist/telemetry.test.js.map +1 -0
  192. package/dist/src/code_assist/types.d.ts +77 -1
  193. package/dist/src/code_assist/types.js +28 -0
  194. package/dist/src/code_assist/types.js.map +1 -1
  195. package/dist/src/commands/memory.d.ts +11 -0
  196. package/dist/src/commands/memory.js +80 -0
  197. package/dist/src/commands/memory.js.map +1 -0
  198. package/dist/src/commands/memory.test.d.ts +6 -0
  199. package/dist/src/commands/memory.test.js +155 -0
  200. package/dist/src/commands/memory.test.js.map +1 -0
  201. package/dist/src/config/config.d.ts +120 -26
  202. package/dist/src/config/config.js +241 -120
  203. package/dist/src/config/config.js.map +1 -1
  204. package/dist/src/config/config.test.js +215 -43
  205. package/dist/src/config/config.test.js.map +1 -1
  206. package/dist/src/config/flashFallback.test.js +11 -35
  207. package/dist/src/config/flashFallback.test.js.map +1 -1
  208. package/dist/src/config/models.d.ts +8 -9
  209. package/dist/src/config/models.js +18 -15
  210. package/dist/src/config/models.js.map +1 -1
  211. package/dist/src/config/models.test.js +52 -16
  212. package/dist/src/config/models.test.js.map +1 -1
  213. package/dist/src/config/storage.d.ts +5 -0
  214. package/dist/src/config/storage.js +17 -2
  215. package/dist/src/config/storage.js.map +1 -1
  216. package/dist/src/config/storage.test.js +16 -0
  217. package/dist/src/config/storage.test.js.map +1 -1
  218. package/dist/src/confirmation-bus/message-bus.js +2 -1
  219. package/dist/src/confirmation-bus/message-bus.js.map +1 -1
  220. package/dist/src/core/baseLlmClient.js +44 -43
  221. package/dist/src/core/baseLlmClient.js.map +1 -1
  222. package/dist/src/core/baseLlmClient.test.js +12 -19
  223. package/dist/src/core/baseLlmClient.test.js.map +1 -1
  224. package/dist/src/core/client.d.ts +7 -1
  225. package/dist/src/core/client.js +245 -114
  226. package/dist/src/core/client.js.map +1 -1
  227. package/dist/src/core/client.test.js +277 -74
  228. package/dist/src/core/client.test.js.map +1 -1
  229. package/dist/src/core/clientHookTriggers.js +2 -2
  230. package/dist/src/core/clientHookTriggers.js.map +1 -1
  231. package/dist/src/core/contentGenerator.js +3 -3
  232. package/dist/src/core/contentGenerator.js.map +1 -1
  233. package/dist/src/core/contentGenerator.test.js +1 -7
  234. package/dist/src/core/contentGenerator.test.js.map +1 -1
  235. package/dist/src/core/coreToolHookTriggers.d.ts +9 -5
  236. package/dist/src/core/coreToolHookTriggers.js +119 -21
  237. package/dist/src/core/coreToolHookTriggers.js.map +1 -1
  238. package/dist/src/core/coreToolHookTriggers.test.d.ts +6 -0
  239. package/dist/src/core/coreToolHookTriggers.test.js +191 -0
  240. package/dist/src/core/coreToolHookTriggers.test.js.map +1 -0
  241. package/dist/src/core/coreToolScheduler.d.ts +7 -93
  242. package/dist/src/core/coreToolScheduler.js +133 -369
  243. package/dist/src/core/coreToolScheduler.js.map +1 -1
  244. package/dist/src/core/coreToolScheduler.test.js +252 -394
  245. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  246. package/dist/src/core/geminiChat.d.ts +26 -1
  247. package/dist/src/core/geminiChat.js +112 -79
  248. package/dist/src/core/geminiChat.js.map +1 -1
  249. package/dist/src/core/geminiChat.test.js +125 -92
  250. package/dist/src/core/geminiChat.test.js.map +1 -1
  251. package/dist/src/core/geminiChatHookTriggers.d.ts +8 -4
  252. package/dist/src/core/geminiChatHookTriggers.js +34 -12
  253. package/dist/src/core/geminiChatHookTriggers.js.map +1 -1
  254. package/dist/src/core/geminiChatHookTriggers.test.d.ts +6 -0
  255. package/dist/src/core/geminiChatHookTriggers.test.js +153 -0
  256. package/dist/src/core/geminiChatHookTriggers.test.js.map +1 -0
  257. package/dist/src/core/geminiChat_network_retry.test.js +4 -6
  258. package/dist/src/core/geminiChat_network_retry.test.js.map +1 -1
  259. package/dist/src/core/loggingContentGenerator.js +19 -2
  260. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  261. package/dist/src/core/loggingContentGenerator.test.js +30 -0
  262. package/dist/src/core/loggingContentGenerator.test.js.map +1 -1
  263. package/dist/src/core/nonInteractiveToolExecutor.test.js +4 -4
  264. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  265. package/dist/src/core/prompts.js +37 -13
  266. package/dist/src/core/prompts.js.map +1 -1
  267. package/dist/src/core/prompts.test.js +47 -3
  268. package/dist/src/core/prompts.test.js.map +1 -1
  269. package/dist/src/core/tokenLimits.js +6 -12
  270. package/dist/src/core/tokenLimits.js.map +1 -1
  271. package/dist/src/core/tokenLimits.test.js +8 -4
  272. package/dist/src/core/tokenLimits.test.js.map +1 -1
  273. package/dist/src/core/turn.d.ts +21 -22
  274. package/dist/src/core/turn.js +31 -21
  275. package/dist/src/core/turn.js.map +1 -1
  276. package/dist/src/core/turn.test.js +79 -5
  277. package/dist/src/core/turn.test.js.map +1 -1
  278. package/dist/src/fallback/handler.js +1 -7
  279. package/dist/src/fallback/handler.js.map +1 -1
  280. package/dist/src/fallback/handler.test.js +10 -29
  281. package/dist/src/fallback/handler.test.js.map +1 -1
  282. package/dist/src/generated/git-commit.d.ts +3 -3
  283. package/dist/src/generated/git-commit.js +3 -3
  284. package/dist/src/hooks/hookAggregator.js +7 -0
  285. package/dist/src/hooks/hookAggregator.js.map +1 -1
  286. package/dist/src/hooks/hookEventHandler.d.ts +9 -5
  287. package/dist/src/hooks/hookEventHandler.js +61 -15
  288. package/dist/src/hooks/hookEventHandler.js.map +1 -1
  289. package/dist/src/hooks/hookEventHandler.test.js +223 -8
  290. package/dist/src/hooks/hookEventHandler.test.js.map +1 -1
  291. package/dist/src/hooks/hookPlanner.d.ts +1 -5
  292. package/dist/src/hooks/hookPlanner.js +2 -7
  293. package/dist/src/hooks/hookPlanner.js.map +1 -1
  294. package/dist/src/hooks/hookPlanner.test.js +62 -2
  295. package/dist/src/hooks/hookPlanner.test.js.map +1 -1
  296. package/dist/src/hooks/hookRegistry.d.ts +6 -11
  297. package/dist/src/hooks/hookRegistry.js +41 -14
  298. package/dist/src/hooks/hookRegistry.js.map +1 -1
  299. package/dist/src/hooks/hookRegistry.test.js +166 -2
  300. package/dist/src/hooks/hookRegistry.test.js.map +1 -1
  301. package/dist/src/hooks/hookRunner.d.ts +5 -3
  302. package/dist/src/hooks/hookRunner.js +57 -17
  303. package/dist/src/hooks/hookRunner.js.map +1 -1
  304. package/dist/src/hooks/hookRunner.test.js +172 -35
  305. package/dist/src/hooks/hookRunner.test.js.map +1 -1
  306. package/dist/src/hooks/hookSystem.d.ts +12 -0
  307. package/dist/src/hooks/hookSystem.js +39 -1
  308. package/dist/src/hooks/hookSystem.js.map +1 -1
  309. package/dist/src/hooks/hookTranslator.js +2 -1
  310. package/dist/src/hooks/hookTranslator.js.map +1 -1
  311. package/dist/src/hooks/index.d.ts +1 -2
  312. package/dist/src/hooks/index.js +1 -3
  313. package/dist/src/hooks/index.js.map +1 -1
  314. package/dist/src/hooks/trustedHooks.d.ts +28 -0
  315. package/dist/src/hooks/trustedHooks.js +90 -0
  316. package/dist/src/hooks/trustedHooks.js.map +1 -0
  317. package/dist/src/hooks/trustedHooks.test.d.ts +6 -0
  318. package/dist/src/hooks/trustedHooks.test.js +154 -0
  319. package/dist/src/hooks/trustedHooks.test.js.map +1 -0
  320. package/dist/src/hooks/types.d.ts +41 -9
  321. package/dist/src/hooks/types.js +31 -41
  322. package/dist/src/hooks/types.js.map +1 -1
  323. package/dist/src/hooks/types.test.js +9 -52
  324. package/dist/src/hooks/types.test.js.map +1 -1
  325. package/dist/src/ide/detect-ide.d.ts +4 -0
  326. package/dist/src/ide/detect-ide.js +7 -2
  327. package/dist/src/ide/detect-ide.js.map +1 -1
  328. package/dist/src/ide/detect-ide.test.js +10 -0
  329. package/dist/src/ide/detect-ide.test.js.map +1 -1
  330. package/dist/src/ide/ide-client.js +4 -1
  331. package/dist/src/ide/ide-client.js.map +1 -1
  332. package/dist/src/ide/ide-installer.js +2 -2
  333. package/dist/src/ide/ide-installer.js.map +1 -1
  334. package/dist/src/ide/ide-installer.test.js +11 -2
  335. package/dist/src/ide/ide-installer.test.js.map +1 -1
  336. package/dist/src/index.d.ts +16 -2
  337. package/dist/src/index.js +18 -3
  338. package/dist/src/index.js.map +1 -1
  339. package/dist/src/mcp/oauth-provider.js +7 -3
  340. package/dist/src/mcp/oauth-provider.js.map +1 -1
  341. package/dist/src/mcp/oauth-provider.test.js +4 -1
  342. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  343. package/dist/src/mcp/oauth-utils.d.ts +8 -1
  344. package/dist/src/mcp/oauth-utils.js +31 -2
  345. package/dist/src/mcp/oauth-utils.js.map +1 -1
  346. package/dist/src/mcp/oauth-utils.test.js +42 -0
  347. package/dist/src/mcp/oauth-utils.test.js.map +1 -1
  348. package/dist/src/mcp/token-storage/file-token-storage.js +2 -2
  349. package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -1
  350. package/dist/src/mcp/token-storage/keychain-token-storage.js +1 -1
  351. package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -1
  352. package/dist/src/policy/config.js +62 -23
  353. package/dist/src/policy/config.js.map +1 -1
  354. package/dist/src/policy/config.test.js +24 -2
  355. package/dist/src/policy/config.test.js.map +1 -1
  356. package/dist/src/policy/persistence.test.js +1 -1
  357. package/dist/src/policy/persistence.test.js.map +1 -1
  358. package/dist/src/policy/policies/agent.toml +1 -1
  359. package/dist/src/policy/policies/write.toml +5 -0
  360. package/dist/src/policy/policies/yolo.toml +1 -0
  361. package/dist/src/policy/policy-engine.d.ts +4 -0
  362. package/dist/src/policy/policy-engine.js +137 -53
  363. package/dist/src/policy/policy-engine.js.map +1 -1
  364. package/dist/src/policy/policy-engine.test.js +289 -1
  365. package/dist/src/policy/policy-engine.test.js.map +1 -1
  366. package/dist/src/policy/policy-updater.test.js +5 -5
  367. package/dist/src/policy/policy-updater.test.js.map +1 -1
  368. package/dist/src/policy/shell-safety.test.js +371 -8
  369. package/dist/src/policy/shell-safety.test.js.map +1 -1
  370. package/dist/src/policy/toml-loader.d.ts +0 -8
  371. package/dist/src/policy/toml-loader.js +13 -45
  372. package/dist/src/policy/toml-loader.js.map +1 -1
  373. package/dist/src/policy/toml-loader.test.js +13 -0
  374. package/dist/src/policy/toml-loader.test.js.map +1 -1
  375. package/dist/src/policy/types.d.ts +10 -0
  376. package/dist/src/policy/utils.d.ts +21 -0
  377. package/dist/src/policy/utils.js +45 -0
  378. package/dist/src/policy/utils.js.map +1 -0
  379. package/dist/src/policy/utils.test.d.ts +6 -0
  380. package/dist/src/policy/utils.test.js +92 -0
  381. package/dist/src/policy/utils.test.js.map +1 -0
  382. package/dist/src/routing/routingStrategy.d.ts +2 -0
  383. package/dist/src/routing/strategies/classifierStrategy.js +1 -1
  384. package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
  385. package/dist/src/routing/strategies/classifierStrategy.test.js +16 -0
  386. package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
  387. package/dist/src/routing/strategies/compositeStrategy.js +4 -2
  388. package/dist/src/routing/strategies/compositeStrategy.js.map +1 -1
  389. package/dist/src/routing/strategies/compositeStrategy.test.js +11 -10
  390. package/dist/src/routing/strategies/compositeStrategy.test.js.map +1 -1
  391. package/dist/src/routing/strategies/fallbackStrategy.d.ts +1 -1
  392. package/dist/src/routing/strategies/fallbackStrategy.js +2 -5
  393. package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
  394. package/dist/src/routing/strategies/fallbackStrategy.test.js +13 -6
  395. package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
  396. package/dist/src/routing/strategies/overrideStrategy.d.ts +1 -1
  397. package/dist/src/routing/strategies/overrideStrategy.js +6 -6
  398. package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
  399. package/dist/src/routing/strategies/overrideStrategy.test.js +14 -0
  400. package/dist/src/routing/strategies/overrideStrategy.test.js.map +1 -1
  401. package/dist/src/scheduler/tool-executor.d.ts +22 -0
  402. package/dist/src/scheduler/tool-executor.js +198 -0
  403. package/dist/src/scheduler/tool-executor.js.map +1 -0
  404. package/dist/src/scheduler/tool-executor.test.d.ts +6 -0
  405. package/dist/src/scheduler/tool-executor.test.js +231 -0
  406. package/dist/src/scheduler/tool-executor.test.js.map +1 -0
  407. package/dist/src/scheduler/tool-modifier.d.ts +23 -0
  408. package/dist/src/scheduler/tool-modifier.js +50 -0
  409. package/dist/src/scheduler/tool-modifier.js.map +1 -0
  410. package/dist/src/scheduler/tool-modifier.test.d.ts +6 -0
  411. package/dist/src/scheduler/tool-modifier.test.js +159 -0
  412. package/dist/src/scheduler/tool-modifier.test.js.map +1 -0
  413. package/dist/src/scheduler/types.d.ts +95 -0
  414. package/dist/src/scheduler/types.js +7 -0
  415. package/dist/src/scheduler/types.js.map +1 -0
  416. package/dist/src/services/chatCompressionService.js +3 -10
  417. package/dist/src/services/chatCompressionService.js.map +1 -1
  418. package/dist/src/services/chatCompressionService.test.js +1 -0
  419. package/dist/src/services/chatCompressionService.test.js.map +1 -1
  420. package/dist/src/services/chatRecordingService.d.ts +7 -1
  421. package/dist/src/services/chatRecordingService.js +20 -2
  422. package/dist/src/services/chatRecordingService.js.map +1 -1
  423. package/dist/src/services/chatRecordingService.test.js +43 -0
  424. package/dist/src/services/chatRecordingService.test.js.map +1 -1
  425. package/dist/src/services/contextManager.d.ts +5 -11
  426. package/dist/src/services/contextManager.js +20 -17
  427. package/dist/src/services/contextManager.js.map +1 -1
  428. package/dist/src/services/contextManager.test.js +40 -41
  429. package/dist/src/services/contextManager.test.js.map +1 -1
  430. package/dist/src/services/environmentSanitization.d.ts +15 -0
  431. package/dist/src/services/environmentSanitization.js +142 -0
  432. package/dist/src/services/environmentSanitization.js.map +1 -0
  433. package/dist/src/services/environmentSanitization.test.d.ts +6 -0
  434. package/dist/src/services/environmentSanitization.test.js +284 -0
  435. package/dist/src/services/environmentSanitization.test.js.map +1 -0
  436. package/dist/src/services/gitService.js +10 -1
  437. package/dist/src/services/gitService.js.map +1 -1
  438. package/dist/src/services/gitService.test.js +28 -2
  439. package/dist/src/services/gitService.test.js.map +1 -1
  440. package/dist/src/services/loopDetectionService.js +2 -1
  441. package/dist/src/services/loopDetectionService.js.map +1 -1
  442. package/dist/src/services/loopDetectionService.test.js +14 -8
  443. package/dist/src/services/loopDetectionService.test.js.map +1 -1
  444. package/dist/src/services/modelConfig.integration.test.js +3 -3
  445. package/dist/src/services/modelConfig.integration.test.js.map +1 -1
  446. package/dist/src/services/modelConfigService.d.ts +38 -4
  447. package/dist/src/services/modelConfigService.js +135 -76
  448. package/dist/src/services/modelConfigService.js.map +1 -1
  449. package/dist/src/services/modelConfigService.test.js +116 -0
  450. package/dist/src/services/modelConfigService.test.js.map +1 -1
  451. package/dist/src/services/shellExecutionService.d.ts +2 -0
  452. package/dist/src/services/shellExecutionService.js +6 -50
  453. package/dist/src/services/shellExecutionService.js.map +1 -1
  454. package/dist/src/services/shellExecutionService.test.js +68 -4
  455. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  456. package/dist/src/skills/skillLoader.d.ts +31 -0
  457. package/dist/src/skills/skillLoader.js +77 -0
  458. package/dist/src/skills/skillLoader.js.map +1 -0
  459. package/dist/src/skills/skillLoader.test.d.ts +6 -0
  460. package/dist/src/skills/skillLoader.test.js +75 -0
  461. package/dist/src/skills/skillLoader.test.js.map +1 -0
  462. package/dist/src/skills/skillManager.d.ts +69 -0
  463. package/dist/src/skills/skillManager.js +127 -0
  464. package/dist/src/skills/skillManager.js.map +1 -0
  465. package/dist/src/skills/skillManager.test.d.ts +6 -0
  466. package/dist/src/skills/skillManager.test.js +210 -0
  467. package/dist/src/skills/skillManager.test.js.map +1 -0
  468. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +18 -9
  469. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +234 -160
  470. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  471. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +162 -32
  472. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  473. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +11 -3
  474. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +24 -5
  475. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  476. package/dist/src/telemetry/loggers.d.ts +3 -3
  477. package/dist/src/telemetry/loggers.js +6 -5
  478. package/dist/src/telemetry/loggers.js.map +1 -1
  479. package/dist/src/telemetry/loggers.test.circular.js +1 -0
  480. package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
  481. package/dist/src/telemetry/loggers.test.js +51 -10
  482. package/dist/src/telemetry/loggers.test.js.map +1 -1
  483. package/dist/src/telemetry/sdk.js +5 -6
  484. package/dist/src/telemetry/sdk.js.map +1 -1
  485. package/dist/src/telemetry/types.d.ts +7 -7
  486. package/dist/src/telemetry/types.js +14 -12
  487. package/dist/src/telemetry/types.js.map +1 -1
  488. package/dist/src/test-utils/mock-message-bus.d.ts +1 -0
  489. package/dist/src/test-utils/mock-message-bus.js +29 -0
  490. package/dist/src/test-utils/mock-message-bus.js.map +1 -1
  491. package/dist/src/test-utils/mock-tool.d.ts +5 -3
  492. package/dist/src/test-utils/mock-tool.js +11 -10
  493. package/dist/src/test-utils/mock-tool.js.map +1 -1
  494. package/dist/src/tools/activate-skill.d.ts +27 -0
  495. package/dist/src/tools/activate-skill.js +133 -0
  496. package/dist/src/tools/activate-skill.js.map +1 -0
  497. package/dist/src/tools/activate-skill.test.d.ts +6 -0
  498. package/dist/src/tools/activate-skill.test.js +113 -0
  499. package/dist/src/tools/activate-skill.test.js.map +1 -0
  500. package/dist/src/tools/confirmation-policy.test.js +3 -12
  501. package/dist/src/tools/confirmation-policy.test.js.map +1 -1
  502. package/dist/src/tools/edit.d.ts +27 -5
  503. package/dist/src/tools/edit.js +455 -136
  504. package/dist/src/tools/edit.js.map +1 -1
  505. package/dist/src/tools/edit.test.js +292 -526
  506. package/dist/src/tools/edit.test.js.map +1 -1
  507. package/dist/src/tools/get-internal-docs.d.ts +27 -0
  508. package/dist/src/tools/get-internal-docs.js +122 -0
  509. package/dist/src/tools/get-internal-docs.js.map +1 -0
  510. package/dist/src/tools/get-internal-docs.test.d.ts +6 -0
  511. package/dist/src/tools/get-internal-docs.test.js +57 -0
  512. package/dist/src/tools/get-internal-docs.test.js.map +1 -0
  513. package/dist/src/tools/glob.d.ts +2 -2
  514. package/dist/src/tools/glob.js +1 -1
  515. package/dist/src/tools/glob.js.map +1 -1
  516. package/dist/src/tools/glob.test.js +2 -1
  517. package/dist/src/tools/glob.test.js.map +1 -1
  518. package/dist/src/tools/grep.d.ts +2 -2
  519. package/dist/src/tools/grep.js +1 -1
  520. package/dist/src/tools/grep.js.map +1 -1
  521. package/dist/src/tools/grep.test.js +5 -4
  522. package/dist/src/tools/grep.test.js.map +1 -1
  523. package/dist/src/tools/ls.d.ts +2 -2
  524. package/dist/src/tools/ls.js +2 -2
  525. package/dist/src/tools/ls.js.map +1 -1
  526. package/dist/src/tools/ls.test.js +2 -1
  527. package/dist/src/tools/ls.test.js.map +1 -1
  528. package/dist/src/tools/mcp-client-manager.js +14 -7
  529. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  530. package/dist/src/tools/mcp-client-manager.test.js +28 -0
  531. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  532. package/dist/src/tools/mcp-client.d.ts +5 -4
  533. package/dist/src/tools/mcp-client.js +10 -8
  534. package/dist/src/tools/mcp-client.js.map +1 -1
  535. package/dist/src/tools/mcp-client.test.js +47 -42
  536. package/dist/src/tools/mcp-client.test.js.map +1 -1
  537. package/dist/src/tools/mcp-tool.d.ts +20 -5
  538. package/dist/src/tools/mcp-tool.js +8 -8
  539. package/dist/src/tools/mcp-tool.js.map +1 -1
  540. package/dist/src/tools/mcp-tool.test.js +11 -6
  541. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  542. package/dist/src/tools/memoryTool.d.ts +3 -3
  543. package/dist/src/tools/memoryTool.js +2 -4
  544. package/dist/src/tools/memoryTool.js.map +1 -1
  545. package/dist/src/tools/memoryTool.test.js +5 -2
  546. package/dist/src/tools/memoryTool.test.js.map +1 -1
  547. package/dist/src/tools/message-bus-integration.test.js +10 -37
  548. package/dist/src/tools/message-bus-integration.test.js.map +1 -1
  549. package/dist/src/tools/read-file.d.ts +2 -2
  550. package/dist/src/tools/read-file.js +1 -1
  551. package/dist/src/tools/read-file.js.map +1 -1
  552. package/dist/src/tools/read-file.test.js +3 -2
  553. package/dist/src/tools/read-file.test.js.map +1 -1
  554. package/dist/src/tools/read-many-files.d.ts +2 -2
  555. package/dist/src/tools/read-many-files.js +2 -3
  556. package/dist/src/tools/read-many-files.js.map +1 -1
  557. package/dist/src/tools/read-many-files.test.js +3 -2
  558. package/dist/src/tools/read-many-files.test.js.map +1 -1
  559. package/dist/src/tools/ripGrep.d.ts +3 -2
  560. package/dist/src/tools/ripGrep.js +18 -7
  561. package/dist/src/tools/ripGrep.js.map +1 -1
  562. package/dist/src/tools/ripGrep.test.js +60 -4
  563. package/dist/src/tools/ripGrep.test.js.map +1 -1
  564. package/dist/src/tools/shell.d.ts +3 -6
  565. package/dist/src/tools/shell.js +21 -49
  566. package/dist/src/tools/shell.js.map +1 -1
  567. package/dist/src/tools/shell.test.js +35 -59
  568. package/dist/src/tools/shell.test.js.map +1 -1
  569. package/dist/src/tools/tool-error.d.ts +6 -1
  570. package/dist/src/tools/tool-error.js +6 -0
  571. package/dist/src/tools/tool-error.js.map +1 -1
  572. package/dist/src/tools/tool-names.d.ts +15 -0
  573. package/dist/src/tools/tool-names.js +57 -0
  574. package/dist/src/tools/tool-names.js.map +1 -1
  575. package/dist/src/tools/tool-names.test.d.ts +6 -0
  576. package/dist/src/tools/tool-names.test.js +43 -0
  577. package/dist/src/tools/tool-names.test.js.map +1 -0
  578. package/dist/src/tools/tool-registry.d.ts +11 -7
  579. package/dist/src/tools/tool-registry.js +15 -10
  580. package/dist/src/tools/tool-registry.js.map +1 -1
  581. package/dist/src/tools/tool-registry.test.js +16 -11
  582. package/dist/src/tools/tool-registry.test.js.map +1 -1
  583. package/dist/src/tools/tools.d.ts +8 -6
  584. package/dist/src/tools/tools.js +16 -18
  585. package/dist/src/tools/tools.js.map +1 -1
  586. package/dist/src/tools/tools.test.js +3 -1
  587. package/dist/src/tools/tools.test.js.map +1 -1
  588. package/dist/src/tools/web-fetch.d.ts +2 -2
  589. package/dist/src/tools/web-fetch.js +4 -4
  590. package/dist/src/tools/web-fetch.js.map +1 -1
  591. package/dist/src/tools/web-fetch.test.js +17 -19
  592. package/dist/src/tools/web-fetch.test.js.map +1 -1
  593. package/dist/src/tools/web-search.d.ts +2 -2
  594. package/dist/src/tools/web-search.js +5 -5
  595. package/dist/src/tools/web-search.js.map +1 -1
  596. package/dist/src/tools/web-search.test.js +2 -1
  597. package/dist/src/tools/web-search.test.js.map +1 -1
  598. package/dist/src/tools/write-file.d.ts +2 -2
  599. package/dist/src/tools/write-file.js +9 -6
  600. package/dist/src/tools/write-file.js.map +1 -1
  601. package/dist/src/tools/write-file.test.js +49 -7
  602. package/dist/src/tools/write-file.test.js.map +1 -1
  603. package/dist/src/tools/write-todos.d.ts +2 -2
  604. package/dist/src/tools/write-todos.js +5 -4
  605. package/dist/src/tools/write-todos.js.map +1 -1
  606. package/dist/src/tools/write-todos.test.js +2 -1
  607. package/dist/src/tools/write-todos.test.js.map +1 -1
  608. package/dist/src/utils/apiConversionUtils.d.ts +12 -0
  609. package/dist/src/utils/apiConversionUtils.js +46 -0
  610. package/dist/src/utils/apiConversionUtils.js.map +1 -0
  611. package/dist/src/utils/apiConversionUtils.test.d.ts +6 -0
  612. package/dist/src/utils/apiConversionUtils.test.js +150 -0
  613. package/dist/src/utils/apiConversionUtils.test.js.map +1 -0
  614. package/dist/src/utils/checkpointUtils.d.ts +1 -1
  615. package/dist/src/utils/checkpointUtils.js +1 -1
  616. package/dist/src/utils/checkpointUtils.js.map +1 -1
  617. package/dist/src/utils/checkpointUtils.test.js +1 -1
  618. package/dist/src/utils/checkpointUtils.test.js.map +1 -1
  619. package/dist/src/utils/debugLogger.js +1 -0
  620. package/dist/src/utils/debugLogger.js.map +1 -1
  621. package/dist/src/utils/editCorrector.d.ts +3 -3
  622. package/dist/src/utils/editCorrector.js +27 -10
  623. package/dist/src/utils/editCorrector.js.map +1 -1
  624. package/dist/src/utils/editCorrector.test.js +23 -23
  625. package/dist/src/utils/editCorrector.test.js.map +1 -1
  626. package/dist/src/utils/editor.d.ts +3 -2
  627. package/dist/src/utils/editor.js +26 -6
  628. package/dist/src/utils/editor.js.map +1 -1
  629. package/dist/src/utils/editor.test.js +27 -4
  630. package/dist/src/utils/editor.test.js.map +1 -1
  631. package/dist/src/utils/environmentContext.d.ts +1 -0
  632. package/dist/src/utils/environmentContext.js +4 -0
  633. package/dist/src/utils/environmentContext.js.map +1 -1
  634. package/dist/src/utils/environmentContext.test.js +2 -0
  635. package/dist/src/utils/environmentContext.test.js.map +1 -1
  636. package/dist/src/utils/errorReporting.d.ts +1 -1
  637. package/dist/src/utils/errorReporting.js +13 -12
  638. package/dist/src/utils/errorReporting.js.map +1 -1
  639. package/dist/src/utils/errorReporting.test.js +17 -14
  640. package/dist/src/utils/errorReporting.test.js.map +1 -1
  641. package/dist/src/utils/events.d.ts +71 -19
  642. package/dist/src/utils/events.js +35 -9
  643. package/dist/src/utils/events.js.map +1 -1
  644. package/dist/src/utils/events.test.js +25 -0
  645. package/dist/src/utils/events.test.js.map +1 -1
  646. package/dist/src/utils/fileDiffUtils.d.ts +18 -0
  647. package/dist/src/utils/fileDiffUtils.js +37 -0
  648. package/dist/src/utils/fileDiffUtils.js.map +1 -0
  649. package/dist/src/utils/fileDiffUtils.test.d.ts +6 -0
  650. package/dist/src/utils/fileDiffUtils.test.js +84 -0
  651. package/dist/src/utils/fileDiffUtils.test.js.map +1 -0
  652. package/dist/src/utils/fileUtils.d.ts +4 -0
  653. package/dist/src/utils/fileUtils.js +53 -0
  654. package/dist/src/utils/fileUtils.js.map +1 -1
  655. package/dist/src/utils/fileUtils.test.js +112 -1
  656. package/dist/src/utils/fileUtils.test.js.map +1 -1
  657. package/dist/src/utils/geminiIgnoreParser.d.ts +11 -0
  658. package/dist/src/utils/geminiIgnoreParser.js +20 -0
  659. package/dist/src/utils/geminiIgnoreParser.js.map +1 -1
  660. package/dist/src/utils/geminiIgnoreParser.test.js +48 -0
  661. package/dist/src/utils/geminiIgnoreParser.test.js.map +1 -1
  662. package/dist/src/utils/generateContentResponseUtilities.d.ts +3 -1
  663. package/dist/src/utils/generateContentResponseUtilities.js +106 -0
  664. package/dist/src/utils/generateContentResponseUtilities.js.map +1 -1
  665. package/dist/src/utils/generateContentResponseUtilities.test.js +279 -2
  666. package/dist/src/utils/generateContentResponseUtilities.test.js.map +1 -1
  667. package/dist/src/utils/getFolderStructure.js +7 -2
  668. package/dist/src/utils/getFolderStructure.js.map +1 -1
  669. package/dist/src/utils/gitIgnoreParser.js +9 -10
  670. package/dist/src/utils/gitIgnoreParser.js.map +1 -1
  671. package/dist/src/utils/installationManager.test.js +11 -3
  672. package/dist/src/utils/installationManager.test.js.map +1 -1
  673. package/dist/src/utils/memoryDiscovery.js +3 -4
  674. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  675. package/dist/src/utils/memoryDiscovery.test.js +12 -1
  676. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  677. package/dist/src/utils/partUtils.js +1 -1
  678. package/dist/src/utils/partUtils.js.map +1 -1
  679. package/dist/src/utils/paths.d.ts +10 -0
  680. package/dist/src/utils/paths.js +20 -1
  681. package/dist/src/utils/paths.js.map +1 -1
  682. package/dist/src/utils/retry.d.ts +1 -0
  683. package/dist/src/utils/retry.js +17 -5
  684. package/dist/src/utils/retry.js.map +1 -1
  685. package/dist/src/utils/retry.test.js +11 -11
  686. package/dist/src/utils/retry.test.js.map +1 -1
  687. package/dist/src/utils/shell-utils.d.ts +6 -0
  688. package/dist/src/utils/shell-utils.js +97 -12
  689. package/dist/src/utils/shell-utils.js.map +1 -1
  690. package/dist/src/utils/shell-utils.test.js +99 -1
  691. package/dist/src/utils/shell-utils.test.js.map +1 -1
  692. package/dist/src/utils/summarizer.test.js +3 -2
  693. package/dist/src/utils/summarizer.test.js.map +1 -1
  694. package/dist/src/utils/terminal.d.ts +4 -0
  695. package/dist/src/utils/terminal.js +12 -0
  696. package/dist/src/utils/terminal.js.map +1 -1
  697. package/dist/src/utils/tokenCalculation.js +20 -5
  698. package/dist/src/utils/tokenCalculation.js.map +1 -1
  699. package/dist/src/utils/tokenCalculation.test.js +11 -2
  700. package/dist/src/utils/tokenCalculation.test.js.map +1 -1
  701. package/dist/src/utils/tool-utils.d.ts +9 -0
  702. package/dist/src/utils/tool-utils.js +29 -0
  703. package/dist/src/utils/tool-utils.js.map +1 -1
  704. package/dist/src/utils/tool-utils.test.js +17 -2
  705. package/dist/src/utils/tool-utils.test.js.map +1 -1
  706. package/dist/src/utils/userAccountManager.test.js +5 -5
  707. package/dist/src/utils/userAccountManager.test.js.map +1 -1
  708. package/dist/src/utils/workspaceContext.test.js +1 -1
  709. package/dist/src/utils/workspaceContext.test.js.map +1 -1
  710. package/dist/tsconfig.tsbuildinfo +1 -1
  711. package/package.json +8 -6
  712. package/dist/src/agents/executor.js.map +0 -1
  713. package/dist/src/agents/executor.test.js.map +0 -1
  714. package/dist/src/agents/invocation.js.map +0 -1
  715. package/dist/src/agents/invocation.test.js.map +0 -1
  716. package/dist/src/core/sessionHookTriggers.d.ts +0 -28
  717. package/dist/src/core/sessionHookTriggers.js +0 -68
  718. package/dist/src/core/sessionHookTriggers.js.map +0 -1
  719. package/dist/src/tools/smart-edit.d.ts +0 -78
  720. package/dist/src/tools/smart-edit.js +0 -722
  721. package/dist/src/tools/smart-edit.js.map +0 -1
  722. package/dist/src/tools/smart-edit.test.js +0 -592
  723. package/dist/src/tools/smart-edit.test.js.map +0 -1
  724. package/dist/src/utils/shell-permissions.d.ts +0 -52
  725. package/dist/src/utils/shell-permissions.js +0 -188
  726. package/dist/src/utils/shell-permissions.js.map +0 -1
  727. package/dist/src/utils/shell-permissions.test.js +0 -347
  728. package/dist/src/utils/shell-permissions.test.js.map +0 -1
  729. /package/dist/src/agents/{executor.test.d.ts → a2a-client-manager.test.d.ts} +0 -0
  730. /package/dist/src/agents/{invocation.test.d.ts → a2aUtils.test.d.ts} +0 -0
  731. /package/dist/src/{tools/smart-edit.test.d.ts → agents/agentLoader.test.d.ts} +0 -0
  732. /package/dist/src/{utils/shell-permissions.test.d.ts → agents/cli-help-agent.test.d.ts} +0 -0
@@ -45,11 +45,11 @@ describe('createPolicyUpdater', () => {
45
45
  expect(policyEngine.addRule).toHaveBeenCalledTimes(2);
46
46
  expect(policyEngine.addRule).toHaveBeenNthCalledWith(1, expect.objectContaining({
47
47
  toolName: 'run_shell_command',
48
- argsPattern: new RegExp('"command":"echo(?:[\\s"]|$)'),
48
+ argsPattern: new RegExp('"command":"echo(?:[\\s"]|\\\\")'),
49
49
  }));
50
50
  expect(policyEngine.addRule).toHaveBeenNthCalledWith(2, expect.objectContaining({
51
51
  toolName: 'run_shell_command',
52
- argsPattern: new RegExp('"command":"ls(?:[\\s"]|$)'),
52
+ argsPattern: new RegExp('"command":"ls(?:[\\s"]|\\\\")'),
53
53
  }));
54
54
  });
55
55
  it('should add a single rule when commandPrefix is a string', async () => {
@@ -63,7 +63,7 @@ describe('createPolicyUpdater', () => {
63
63
  expect(policyEngine.addRule).toHaveBeenCalledTimes(1);
64
64
  expect(policyEngine.addRule).toHaveBeenCalledWith(expect.objectContaining({
65
65
  toolName: 'run_shell_command',
66
- argsPattern: new RegExp('"command":"git(?:[\\s"]|$)'),
66
+ argsPattern: new RegExp('"command":"git(?:[\\s"]|\\\\")'),
67
67
  }));
68
68
  });
69
69
  it('should persist multiple rules correctly to TOML', async () => {
@@ -98,7 +98,7 @@ describe('ShellToolInvocation Policy Update', () => {
98
98
  });
99
99
  it('should extract multiple root commands for chained commands', () => {
100
100
  vi.mocked(shellUtils.getCommandRoots).mockReturnValue(['git', 'npm']);
101
- const invocation = new ShellToolInvocation(mockConfig, { command: 'git status && npm test' }, new Set(), mockMessageBus, 'run_shell_command', 'Shell');
101
+ const invocation = new ShellToolInvocation(mockConfig, { command: 'git status && npm test' }, mockMessageBus, 'run_shell_command', 'Shell');
102
102
  // Accessing protected method for testing
103
103
  const options = invocation.getPolicyUpdateOptions(ToolConfirmationOutcome.ProceedAlways);
104
104
  expect(options.commandPrefix).toEqual(['git', 'npm']);
@@ -106,7 +106,7 @@ describe('ShellToolInvocation Policy Update', () => {
106
106
  });
107
107
  it('should extract a single root command', () => {
108
108
  vi.mocked(shellUtils.getCommandRoots).mockReturnValue(['ls']);
109
- const invocation = new ShellToolInvocation(mockConfig, { command: 'ls -la /tmp' }, new Set(), mockMessageBus, 'run_shell_command', 'Shell');
109
+ const invocation = new ShellToolInvocation(mockConfig, { command: 'ls -la /tmp' }, mockMessageBus, 'run_shell_command', 'Shell');
110
110
  // Accessing protected method for testing
111
111
  const options = invocation.getPolicyUpdateOptions(ToolConfirmationOutcome.ProceedAlways);
112
112
  expect(options.commandPrefix).toEqual(['ls']);
@@ -1 +1 @@
1
- {"version":3,"file":"policy-updater.test.js","sourceRoot":"","sources":["../../../src/policy/policy-updater.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy-updater.test.js","sourceRoot":"","sources":["../../../src/policy/policy-updater.test.ts"],"names":[],"mappings":"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"}
@@ -3,26 +3,98 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { describe, it, expect, beforeEach } from 'vitest';
6
+ import { describe, it, expect, beforeEach, vi } from 'vitest';
7
+ // Mock shell-utils to avoid relying on tree-sitter WASM which is flaky in CI on Windows
8
+ vi.mock('../utils/shell-utils.js', async (importOriginal) => {
9
+ const actual = await importOriginal();
10
+ // Static map of test commands to their expected subcommands
11
+ // This mirrors what the real parser would output for these specific strings
12
+ const commandMap = {
13
+ 'git log': ['git log'],
14
+ 'git log --oneline': ['git log --oneline'],
15
+ 'git logout': ['git logout'],
16
+ 'git log && rm -rf /': ['git log', 'rm -rf /'],
17
+ 'git log; rm -rf /': ['git log', 'rm -rf /'],
18
+ 'git log || rm -rf /': ['git log', 'rm -rf /'],
19
+ 'git log &&& rm -rf /': [], // Simulates parse failure
20
+ 'echo $(rm -rf /)': ['echo $(rm -rf /)', 'rm -rf /'],
21
+ 'echo $(git log)': ['echo $(git log)', 'git log'],
22
+ 'echo `rm -rf /`': ['echo `rm -rf /`', 'rm -rf /'],
23
+ 'diff <(git log) <(rm -rf /)': [
24
+ 'diff <(git log) <(rm -rf /)',
25
+ 'git log',
26
+ 'rm -rf /',
27
+ ],
28
+ 'tee >(rm -rf /)': ['tee >(rm -rf /)', 'rm -rf /'],
29
+ 'git log | rm -rf /': ['git log', 'rm -rf /'],
30
+ 'git log --format=$(rm -rf /)': [
31
+ 'git log --format=$(rm -rf /)',
32
+ 'rm -rf /',
33
+ ],
34
+ 'git log && echo $(git log | rm -rf /)': [
35
+ 'git log',
36
+ 'echo $(git log | rm -rf /)',
37
+ 'git log',
38
+ 'rm -rf /',
39
+ ],
40
+ 'git log && echo $(git log)': ['git log', 'echo $(git log)', 'git log'],
41
+ 'git log > /tmp/test': ['git log > /tmp/test'],
42
+ 'git log @(Get-Process)': [], // Simulates parse failure (Bash parser vs PowerShell syntax)
43
+ 'git commit -m "msg" && git push': ['git commit -m "msg"', 'git push'],
44
+ 'git status && unknown_command': ['git status', 'unknown_command'],
45
+ 'unknown_command_1 && another_unknown_command': [
46
+ 'unknown_command_1',
47
+ 'another_unknown_command',
48
+ ],
49
+ 'known_ask_command_1 && known_ask_command_2': [
50
+ 'known_ask_command_1',
51
+ 'known_ask_command_2',
52
+ ],
53
+ };
54
+ return {
55
+ ...actual,
56
+ initializeShellParsers: vi.fn(),
57
+ splitCommands: (command) => {
58
+ if (Object.prototype.hasOwnProperty.call(commandMap, command)) {
59
+ return commandMap[command];
60
+ }
61
+ const known = commandMap[command];
62
+ if (known)
63
+ return known;
64
+ // Default fallback for unmatched simple cases in development, but explicit map is better
65
+ return [command];
66
+ },
67
+ hasRedirection: (command) =>
68
+ // Simple regex check sufficient for testing the policy engine's handling of the *result* of hasRedirection
69
+ /[><]/.test(command),
70
+ };
71
+ });
7
72
  import { PolicyEngine } from './policy-engine.js';
8
73
  import { PolicyDecision, ApprovalMode } from './types.js';
74
+ import { buildArgsPatterns } from './utils.js';
9
75
  describe('Shell Safety Policy', () => {
10
76
  let policyEngine;
11
- beforeEach(() => {
12
- policyEngine = new PolicyEngine({
77
+ // Helper to create a policy engine with a simple command prefix rule
78
+ function createPolicyEngineWithPrefix(prefix) {
79
+ const argsPatterns = buildArgsPatterns(undefined, prefix, undefined);
80
+ // Since buildArgsPatterns returns array of patterns (strings), we pick the first one
81
+ // and compile it.
82
+ const argsPattern = new RegExp(argsPatterns[0]);
83
+ return new PolicyEngine({
13
84
  rules: [
14
85
  {
15
86
  toolName: 'run_shell_command',
16
- // Mimic the regex generated by toml-loader for commandPrefix = ["git log"]
17
- // Regex: "command":"git log(?:[\s"]|$)
18
- argsPattern: /"command":"git log(?:[\s"]|$)/,
87
+ argsPattern,
19
88
  decision: PolicyDecision.ALLOW,
20
- priority: 1.01, // Higher priority than default
89
+ priority: 1.01,
21
90
  },
22
91
  ],
23
92
  defaultDecision: PolicyDecision.ASK_USER,
24
93
  approvalMode: ApprovalMode.DEFAULT,
25
94
  });
95
+ }
96
+ beforeEach(() => {
97
+ policyEngine = createPolicyEngineWithPrefix('git log');
26
98
  });
27
99
  it('SHOULD match "git log" exactly', async () => {
28
100
  const toolCall = {
@@ -61,15 +133,306 @@ describe('Shell Safety Policy', () => {
61
133
  const result = await policyEngine.check(toolCall, undefined);
62
134
  expect(result.decision).toBe(PolicyDecision.ASK_USER);
63
135
  });
136
+ it('SHOULD NOT allow "git log; rm -rf /" (semicolon separator)', async () => {
137
+ const toolCall = {
138
+ name: 'run_shell_command',
139
+ args: { command: 'git log; rm -rf /' },
140
+ };
141
+ const result = await policyEngine.check(toolCall, undefined);
142
+ expect(result.decision).toBe(PolicyDecision.ASK_USER);
143
+ });
144
+ it('SHOULD NOT allow "git log || rm -rf /" (OR separator)', async () => {
145
+ const toolCall = {
146
+ name: 'run_shell_command',
147
+ args: { command: 'git log || rm -rf /' },
148
+ };
149
+ const result = await policyEngine.check(toolCall, undefined);
150
+ expect(result.decision).toBe(PolicyDecision.ASK_USER);
151
+ });
64
152
  it('SHOULD NOT allow "git log &&& rm -rf /" when prefix is "git log" (parse failure)', async () => {
65
153
  const toolCall = {
66
154
  name: 'run_shell_command',
67
155
  args: { command: 'git log &&& rm -rf /' },
68
156
  };
69
157
  // Desired behavior: Should fail safe (ASK_USER or DENY) because parsing failed.
70
- // If we let it pass as "single command" that matches prefix, it's dangerous.
71
158
  const result = await policyEngine.check(toolCall, undefined);
72
159
  expect(result.decision).toBe(PolicyDecision.ASK_USER);
73
160
  });
161
+ it('SHOULD NOT allow command substitution $(rm -rf /)', async () => {
162
+ const toolCall = {
163
+ name: 'run_shell_command',
164
+ args: { command: 'echo $(rm -rf /)' },
165
+ };
166
+ // `splitCommands` recursively finds nested commands (e.g., `rm` inside `echo $()`).
167
+ // The policy engine requires ALL extracted commands to be allowed.
168
+ // Since `rm` does not match the allowed prefix, this should result in ASK_USER.
169
+ const echoPolicy = createPolicyEngineWithPrefix('echo');
170
+ const result = await echoPolicy.check(toolCall, undefined);
171
+ expect(result.decision).toBe(PolicyDecision.ASK_USER);
172
+ });
173
+ it('SHOULD allow command substitution if inner command is ALSO allowed', async () => {
174
+ // Both `echo` and `git` allowed.
175
+ const argsPatternsEcho = buildArgsPatterns(undefined, 'echo', undefined);
176
+ const argsPatternsGit = buildArgsPatterns(undefined, 'git', undefined); // Allow all git
177
+ const policyEngineWithBoth = new PolicyEngine({
178
+ rules: [
179
+ {
180
+ toolName: 'run_shell_command',
181
+ argsPattern: new RegExp(argsPatternsEcho[0]),
182
+ decision: PolicyDecision.ALLOW,
183
+ priority: 2,
184
+ },
185
+ {
186
+ toolName: 'run_shell_command',
187
+ argsPattern: new RegExp(argsPatternsGit[0]),
188
+ decision: PolicyDecision.ALLOW,
189
+ priority: 2,
190
+ },
191
+ ],
192
+ defaultDecision: PolicyDecision.ASK_USER,
193
+ });
194
+ const toolCall = {
195
+ name: 'run_shell_command',
196
+ args: { command: 'echo $(git log)' },
197
+ };
198
+ const result = await policyEngineWithBoth.check(toolCall, undefined);
199
+ expect(result.decision).toBe(PolicyDecision.ALLOW);
200
+ });
201
+ it('SHOULD NOT allow command substitution with backticks `rm -rf /`', async () => {
202
+ const toolCall = {
203
+ name: 'run_shell_command',
204
+ args: { command: 'echo `rm -rf /`' },
205
+ };
206
+ const result = await policyEngine.check(toolCall, undefined);
207
+ expect(result.decision).toBe(PolicyDecision.ASK_USER);
208
+ });
209
+ it('SHOULD NOT allow process substitution <(rm -rf /)', async () => {
210
+ const toolCall = {
211
+ name: 'run_shell_command',
212
+ args: { command: 'diff <(git log) <(rm -rf /)' },
213
+ };
214
+ const result = await policyEngine.check(toolCall, undefined);
215
+ expect(result.decision).toBe(PolicyDecision.ASK_USER);
216
+ });
217
+ it('SHOULD NOT allow process substitution >(rm -rf /)', async () => {
218
+ // Note: >(...) is output substitution, but syntax is similar.
219
+ const toolCall = {
220
+ name: 'run_shell_command',
221
+ args: { command: 'tee >(rm -rf /)' },
222
+ };
223
+ const result = await policyEngine.check(toolCall, undefined);
224
+ expect(result.decision).toBe(PolicyDecision.ASK_USER);
225
+ });
226
+ it('SHOULD NOT allow piped commands "git log | rm -rf /"', async () => {
227
+ const toolCall = {
228
+ name: 'run_shell_command',
229
+ args: { command: 'git log | rm -rf /' },
230
+ };
231
+ const result = await policyEngine.check(toolCall, undefined);
232
+ expect(result.decision).toBe(PolicyDecision.ASK_USER);
233
+ });
234
+ it('SHOULD NOT allow argument injection via --arg=$(rm -rf /)', async () => {
235
+ const toolCall = {
236
+ name: 'run_shell_command',
237
+ args: { command: 'git log --format=$(rm -rf /)' },
238
+ };
239
+ const result = await policyEngine.check(toolCall, undefined);
240
+ expect(result.decision).toBe(PolicyDecision.ASK_USER);
241
+ });
242
+ it('SHOULD NOT allow complex nested commands "git log && echo $(git log | rm -rf /)"', async () => {
243
+ const toolCall = {
244
+ name: 'run_shell_command',
245
+ args: { command: 'git log && echo $(git log | rm -rf /)' },
246
+ };
247
+ const result = await policyEngine.check(toolCall, undefined);
248
+ expect(result.decision).toBe(PolicyDecision.ASK_USER);
249
+ });
250
+ it('SHOULD allow complex allowed commands "git log && echo $(git log)"', async () => {
251
+ // Both `echo` and `git` allowed.
252
+ const argsPatternsEcho = buildArgsPatterns(undefined, 'echo', undefined);
253
+ const argsPatternsGit = buildArgsPatterns(undefined, 'git', undefined);
254
+ const policyEngineWithBoth = new PolicyEngine({
255
+ rules: [
256
+ {
257
+ toolName: 'run_shell_command',
258
+ argsPattern: new RegExp(argsPatternsEcho[0]),
259
+ decision: PolicyDecision.ALLOW,
260
+ priority: 2,
261
+ },
262
+ {
263
+ toolName: 'run_shell_command',
264
+ // Matches "git" at start of *subcommand*
265
+ argsPattern: new RegExp(argsPatternsGit[0]),
266
+ decision: PolicyDecision.ALLOW,
267
+ priority: 2,
268
+ },
269
+ ],
270
+ defaultDecision: PolicyDecision.ASK_USER,
271
+ });
272
+ const toolCall = {
273
+ name: 'run_shell_command',
274
+ args: { command: 'git log && echo $(git log)' },
275
+ };
276
+ const result = await policyEngineWithBoth.check(toolCall, undefined);
277
+ expect(result.decision).toBe(PolicyDecision.ALLOW);
278
+ });
279
+ it('SHOULD NOT allow generic redirection > /tmp/test', async () => {
280
+ // Current logic downgrades ALLOW to ASK_USER for redirections if redirection is not explicitly allowed.
281
+ const toolCall = {
282
+ name: 'run_shell_command',
283
+ args: { command: 'git log > /tmp/test' },
284
+ };
285
+ const result = await policyEngine.check(toolCall, undefined);
286
+ expect(result.decision).toBe(PolicyDecision.ASK_USER);
287
+ });
288
+ it('SHOULD allow generic redirection > /tmp/test if allowRedirection is true', async () => {
289
+ // If PolicyRule has allowRedirection: true, it should stay ALLOW
290
+ const argsPatternsGitLog = buildArgsPatterns(undefined, 'git log', undefined);
291
+ const policyWithRedirection = new PolicyEngine({
292
+ rules: [
293
+ {
294
+ toolName: 'run_shell_command',
295
+ argsPattern: new RegExp(argsPatternsGitLog[0]),
296
+ decision: PolicyDecision.ALLOW,
297
+ priority: 2,
298
+ allowRedirection: true,
299
+ },
300
+ ],
301
+ defaultDecision: PolicyDecision.ASK_USER,
302
+ });
303
+ const toolCall = {
304
+ name: 'run_shell_command',
305
+ args: { command: 'git log > /tmp/test' },
306
+ };
307
+ const result = await policyWithRedirection.check(toolCall, undefined);
308
+ expect(result.decision).toBe(PolicyDecision.ALLOW);
309
+ });
310
+ it('SHOULD NOT allow PowerShell @(...) usage if it implies code execution', async () => {
311
+ // Bash parser fails on PowerShell syntax @(...) (returns empty subcommands).
312
+ // The policy engine correctly identifies this as unparseable and falls back to ASK_USER.
313
+ const toolCall = {
314
+ name: 'run_shell_command',
315
+ args: { command: 'git log @(Get-Process)' },
316
+ };
317
+ const result = await policyEngine.check(toolCall, undefined);
318
+ expect(result.decision).toBe(PolicyDecision.ASK_USER);
319
+ });
320
+ it('SHOULD match DENY rule even if nested/chained with unknown command', async () => {
321
+ // Scenario:
322
+ // git commit -m "..." (Unknown/No Rule -> ASK_USER)
323
+ // git push (DENY -> DENY)
324
+ // Overall should be DENY.
325
+ const argsPatternsPush = buildArgsPatterns(undefined, 'git push', undefined);
326
+ const denyPushPolicy = new PolicyEngine({
327
+ rules: [
328
+ {
329
+ toolName: 'run_shell_command',
330
+ argsPattern: new RegExp(argsPatternsPush[0]),
331
+ decision: PolicyDecision.DENY,
332
+ priority: 2,
333
+ },
334
+ ],
335
+ defaultDecision: PolicyDecision.ASK_USER,
336
+ });
337
+ const toolCall = {
338
+ name: 'run_shell_command',
339
+ args: { command: 'git commit -m "msg" && git push' },
340
+ };
341
+ const result = await denyPushPolicy.check(toolCall, undefined);
342
+ expect(result.decision).toBe(PolicyDecision.DENY);
343
+ });
344
+ it('SHOULD aggregate ALLOW + ASK_USER to ASK_USER and blame the ASK_USER part', async () => {
345
+ // Scenario:
346
+ // `git status` (ALLOW) && `unknown_command` (ASK_USER by default)
347
+ // Expected: ASK_USER, and the matched rule should be related to the unknown_command
348
+ const argsPatternsGitStatus = buildArgsPatterns(undefined, 'git status', undefined);
349
+ const policyEngine = new PolicyEngine({
350
+ rules: [
351
+ {
352
+ toolName: 'run_shell_command',
353
+ argsPattern: new RegExp(argsPatternsGitStatus[0]),
354
+ decision: PolicyDecision.ALLOW,
355
+ priority: 2,
356
+ name: 'allow_git_status_rule', // Give a name to easily identify
357
+ },
358
+ ],
359
+ defaultDecision: PolicyDecision.ASK_USER,
360
+ });
361
+ const toolCall = {
362
+ name: 'run_shell_command',
363
+ args: { command: 'git status && unknown_command' },
364
+ };
365
+ const result = await policyEngine.check(toolCall, undefined);
366
+ expect(result.decision).toBe(PolicyDecision.ASK_USER);
367
+ // Expect the matched rule to be null/undefined since it's the default decision for 'unknown_command'
368
+ // or the rule that led to the ASK_USER decision. In this case, it should be the rule for 'unknown_command', which is the default decision.
369
+ // The policy engine's `matchedRule` will be the rule that caused the final decision.
370
+ // If it's a default ASK_USER, then `result.rule` should be undefined.
371
+ expect(result.rule).toBeUndefined();
372
+ });
373
+ it('SHOULD aggregate ASK_USER (default) + ASK_USER (rule) to ASK_USER and blame the specific ASK_USER rule', async () => {
374
+ // Scenario:
375
+ // `unknown_command_1` (ASK_USER by default) && `another_unknown_command` (ASK_USER by explicit rule)
376
+ // Expected: ASK_USER, and the matched rule should be the explicit ASK_USER rule
377
+ const argsPatternsAnotherUnknown = buildArgsPatterns(undefined, 'another_unknown_command', undefined);
378
+ const policyEngine = new PolicyEngine({
379
+ rules: [
380
+ {
381
+ toolName: 'run_shell_command',
382
+ argsPattern: new RegExp(argsPatternsAnotherUnknown[0]),
383
+ decision: PolicyDecision.ASK_USER,
384
+ priority: 2,
385
+ name: 'ask_another_unknown_command_rule',
386
+ },
387
+ ],
388
+ defaultDecision: PolicyDecision.ASK_USER,
389
+ });
390
+ const toolCall = {
391
+ name: 'run_shell_command',
392
+ args: { command: 'unknown_command_1 && another_unknown_command' },
393
+ };
394
+ const result = await policyEngine.check(toolCall, undefined);
395
+ expect(result.decision).toBe(PolicyDecision.ASK_USER);
396
+ // The first command triggers default ASK_USER (undefined rule).
397
+ // The second triggers explicit ASK_USER rule.
398
+ // We attribute to the first cause => undefined.
399
+ expect(result.rule).toBeUndefined();
400
+ });
401
+ it('SHOULD aggregate ASK_USER (rule) + ASK_USER (rule) to ASK_USER and blame the first specific ASK_USER rule in subcommands', async () => {
402
+ // Scenario:
403
+ // `known_ask_command_1` (ASK_USER by explicit rule 1) && `known_ask_command_2` (ASK_USER by explicit rule 2)
404
+ // Expected: ASK_USER, and the matched rule should be explicit ASK_USER rule 1.
405
+ // The current implementation prioritizes the rule that changes the decision to ASK_USER, if any.
406
+ // If multiple rules lead to ASK_USER, it takes the first one.
407
+ const argsPatternsAsk1 = buildArgsPatterns(undefined, 'known_ask_command_1', undefined);
408
+ const argsPatternsAsk2 = buildArgsPatterns(undefined, 'known_ask_command_2', undefined);
409
+ const policyEngine = new PolicyEngine({
410
+ rules: [
411
+ {
412
+ toolName: 'run_shell_command',
413
+ argsPattern: new RegExp(argsPatternsAsk1[0]),
414
+ decision: PolicyDecision.ASK_USER,
415
+ priority: 2,
416
+ name: 'ask_rule_1',
417
+ },
418
+ {
419
+ toolName: 'run_shell_command',
420
+ argsPattern: new RegExp(argsPatternsAsk2[0]),
421
+ decision: PolicyDecision.ASK_USER,
422
+ priority: 2,
423
+ name: 'ask_rule_2',
424
+ },
425
+ ],
426
+ defaultDecision: PolicyDecision.ALLOW, // Set default to ALLOW to ensure rules are hit
427
+ });
428
+ const toolCall = {
429
+ name: 'run_shell_command',
430
+ args: { command: 'known_ask_command_1 && known_ask_command_2' },
431
+ };
432
+ const result = await policyEngine.check(toolCall, undefined);
433
+ expect(result.decision).toBe(PolicyDecision.ASK_USER);
434
+ // Expect the rule that first caused ASK_USER to be blamed
435
+ expect(result.rule?.name).toBe('ask_rule_1');
436
+ });
74
437
  });
75
438
  //# sourceMappingURL=shell-safety.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shell-safety.test.js","sourceRoot":"","sources":["../../../src/policy/shell-safety.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell-safety.test.js","sourceRoot":"","sources":["../../../src/policy/shell-safety.test.ts"],"names":[],"mappings":"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"}
@@ -29,14 +29,6 @@ export interface PolicyLoadResult {
29
29
  checkers: SafetyCheckerRule[];
30
30
  errors: PolicyFileError[];
31
31
  }
32
- /**
33
- * Escapes special regex characters in a string for use in a regex pattern.
34
- * This is used for commandPrefix to ensure literal string matching.
35
- *
36
- * @param str The string to escape
37
- * @returns The escaped string safe for use in a regex
38
- */
39
- export declare function escapeRegex(str: string): string;
40
32
  /**
41
33
  * Loads and parses policies from TOML files in the specified directories.
42
34
  *
@@ -4,6 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { PolicyDecision, ApprovalMode, InProcessCheckerType, } from './types.js';
7
+ import { buildArgsPatterns } from './utils.js';
7
8
  import fs from 'node:fs/promises';
8
9
  import path from 'node:path';
9
10
  import toml from '@iarna/toml';
@@ -34,6 +35,7 @@ const PolicyRuleSchema = z.object({
34
35
  message: 'priority must be <= 999 to prevent tier overflow. Priorities >= 1000 would jump to the next tier.',
35
36
  }),
36
37
  modes: z.array(z.nativeEnum(ApprovalMode)).optional(),
38
+ allow_redirection: z.boolean().optional(),
37
39
  });
38
40
  /**
39
41
  * Schema for a single safety checker rule in the TOML file.
@@ -68,16 +70,6 @@ const PolicyFileSchema = z.object({
68
70
  rule: z.array(PolicyRuleSchema).optional(),
69
71
  safety_checker: z.array(SafetyCheckerRuleSchema).optional(),
70
72
  });
71
- /**
72
- * Escapes special regex characters in a string for use in a regex pattern.
73
- * This is used for commandPrefix to ensure literal string matching.
74
- *
75
- * @param str The string to escape
76
- * @returns The escaped string safe for use in a regex
77
- */
78
- export function escapeRegex(str) {
79
- return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
80
- }
81
73
  /**
82
74
  * Converts a tier number to a human-readable tier name.
83
75
  */
@@ -226,7 +218,6 @@ export async function loadPoliciesFromToml(policyDirs, getPolicyTier) {
226
218
  }
227
219
  // Validate shell command convenience syntax
228
220
  const tomlRules = validationResult.data.rule ?? [];
229
- const tomlCheckers = validationResult.data.safety_checker ?? [];
230
221
  for (let i = 0; i < tomlRules.length; i++) {
231
222
  const rule = tomlRules[i];
232
223
  const validationError = validateShellCommandSyntax(rule, i);
@@ -255,8 +246,8 @@ export async function loadPoliciesFromToml(policyDirs, getPolicyTier) {
255
246
  });
256
247
  }
257
248
  }
258
- for (let i = 0; i < tomlCheckers.length; i++) {
259
- const checker = tomlCheckers[i];
249
+ for (let i = 0; i < checkers.length; i++) {
250
+ const checker = checkers[i];
260
251
  if (tier > 1 && checker.modes && checker.modes.length > 0) {
261
252
  errors.push({
262
253
  filePath,
@@ -273,22 +264,7 @@ export async function loadPoliciesFromToml(policyDirs, getPolicyTier) {
273
264
  // Transform rules
274
265
  const parsedRules = (validationResult.data.rule ?? [])
275
266
  .flatMap((rule) => {
276
- // Transform commandPrefix/commandRegex to argsPattern
277
- let effectiveArgsPattern = rule.argsPattern;
278
- const commandPrefixes = [];
279
- if (rule.commandPrefix) {
280
- const prefixes = Array.isArray(rule.commandPrefix)
281
- ? rule.commandPrefix
282
- : [rule.commandPrefix];
283
- commandPrefixes.push(...prefixes);
284
- }
285
- else if (rule.commandRegex) {
286
- effectiveArgsPattern = `"command":"${rule.commandRegex}`;
287
- }
288
- // Expand command prefixes to multiple patterns
289
- const argsPatterns = commandPrefixes.length > 0
290
- ? commandPrefixes.map((prefix) => `"command":"${escapeRegex(prefix)}(?:[\\s"]|$)`)
291
- : [effectiveArgsPattern];
267
+ const argsPatterns = buildArgsPatterns(rule.argsPattern, rule.commandPrefix, rule.commandRegex);
292
268
  // For each argsPattern, expand toolName arrays
293
269
  return argsPatterns.flatMap((argsPattern) => {
294
270
  const toolNames = rule.toolName
@@ -313,7 +289,12 @@ export async function loadPoliciesFromToml(policyDirs, getPolicyTier) {
313
289
  toolName: effectiveToolName,
314
290
  decision: rule.decision,
315
291
  priority: transformPriority(rule.priority, tier),
316
- modes: tier === 1 ? rule.modes : undefined,
292
+ // Only include modes if valid (tier 1 or empty/undefined)
293
+ // If invalid (tier > 1 with modes), it was already reported as error above
294
+ modes: tier === 1 || !rule.modes || rule.modes.length === 0
295
+ ? rule.modes
296
+ : undefined,
297
+ allowRedirection: rule.allow_redirection,
317
298
  };
318
299
  // Compile regex pattern
319
300
  if (argsPattern) {
@@ -344,20 +325,7 @@ export async function loadPoliciesFromToml(policyDirs, getPolicyTier) {
344
325
  // Transform checkers
345
326
  const parsedCheckers = (validationResult.data.safety_checker ?? [])
346
327
  .flatMap((checker) => {
347
- let effectiveArgsPattern = checker.argsPattern;
348
- const commandPrefixes = [];
349
- if (checker.commandPrefix) {
350
- const prefixes = Array.isArray(checker.commandPrefix)
351
- ? checker.commandPrefix
352
- : [checker.commandPrefix];
353
- commandPrefixes.push(...prefixes);
354
- }
355
- else if (checker.commandRegex) {
356
- effectiveArgsPattern = `"command":"${checker.commandRegex}`;
357
- }
358
- const argsPatterns = commandPrefixes.length > 0
359
- ? commandPrefixes.map((prefix) => `"command":"${escapeRegex(prefix)}(?:[\\s"]|$)`)
360
- : [effectiveArgsPattern];
328
+ const argsPatterns = buildArgsPatterns(checker.argsPattern, checker.commandPrefix, checker.commandRegex);
361
329
  return argsPatterns.flatMap((argsPattern) => {
362
330
  const toolNames = checker.toolName
363
331
  ? Array.isArray(checker.toolName)
@@ -379,7 +347,7 @@ export async function loadPoliciesFromToml(policyDirs, getPolicyTier) {
379
347
  toolName: effectiveToolName,
380
348
  priority: checker.priority,
381
349
  checker: checker.checker,
382
- modes: tier === 1 ? checker.modes : undefined,
350
+ modes: checker.modes,
383
351
  };
384
352
  if (argsPattern) {
385
353
  try {