@google/gemini-cli-core 0.35.0-preview.2 → 0.36.0-nightly.20260321.fc03891a1

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 (366) hide show
  1. package/README.md +0 -1
  2. package/dist/docs/CONTRIBUTING.md +0 -15
  3. package/dist/docs/admin/enterprise-controls.md +61 -0
  4. package/dist/docs/changelogs/index.md +11 -0
  5. package/dist/docs/changelogs/latest.md +459 -209
  6. package/dist/docs/changelogs/preview.md +355 -454
  7. package/dist/docs/cli/checkpointing.md +3 -1
  8. package/dist/docs/cli/cli-reference.md +1 -0
  9. package/dist/docs/cli/custom-commands.md +7 -5
  10. package/dist/docs/cli/enterprise.md +15 -9
  11. package/dist/docs/cli/git-worktrees.md +107 -0
  12. package/dist/docs/cli/model-steering.md +4 -3
  13. package/dist/docs/cli/model.md +3 -1
  14. package/dist/docs/cli/notifications.md +4 -3
  15. package/dist/docs/cli/plan-mode.md +28 -8
  16. package/dist/docs/cli/sandbox.md +24 -4
  17. package/dist/docs/cli/session-management.md +6 -0
  18. package/dist/docs/cli/settings.md +14 -1
  19. package/dist/docs/cli/skills.md +4 -2
  20. package/dist/docs/cli/system-prompt.md +3 -1
  21. package/dist/docs/cli/telemetry.md +6 -3
  22. package/dist/docs/cli/themes.md +12 -8
  23. package/dist/docs/cli/tutorials/file-management.md +8 -6
  24. package/dist/docs/cli/tutorials/mcp-setup.md +5 -3
  25. package/dist/docs/cli/tutorials/memory-management.md +6 -6
  26. package/dist/docs/cli/tutorials/plan-mode-steering.md +4 -3
  27. package/dist/docs/cli/tutorials/shell-commands.md +3 -3
  28. package/dist/docs/core/remote-agents.md +8 -3
  29. package/dist/docs/core/subagents.md +21 -13
  30. package/dist/docs/extensions/reference.md +8 -3
  31. package/dist/docs/get-started/authentication.md +60 -50
  32. package/dist/docs/get-started/examples.md +3 -1
  33. package/dist/docs/get-started/gemini-3.md +11 -5
  34. package/dist/docs/hooks/index.md +3 -1
  35. package/dist/docs/hooks/writing-hooks.md +2 -2
  36. package/dist/docs/ide-integration/ide-companion-spec.md +5 -3
  37. package/dist/docs/ide-integration/index.md +8 -4
  38. package/dist/docs/issue-and-pr-automation.md +3 -1
  39. package/dist/docs/local-development.md +3 -1
  40. package/dist/docs/reference/commands.md +2 -2
  41. package/dist/docs/reference/configuration.md +410 -16
  42. package/dist/docs/reference/policy-engine.md +47 -19
  43. package/dist/docs/reference/tools.md +3 -1
  44. package/dist/docs/release-confidence.md +7 -3
  45. package/dist/docs/releases.md +11 -7
  46. package/dist/docs/resources/faq.md +13 -0
  47. package/dist/docs/resources/tos-privacy.md +4 -2
  48. package/dist/docs/resources/troubleshooting.md +3 -1
  49. package/dist/docs/sidebar.json +5 -0
  50. package/dist/docs/tools/mcp-server.md +17 -9
  51. package/dist/docs/tools/planning.md +3 -1
  52. package/dist/docs/tools/shell.md +4 -4
  53. package/dist/docs/tools/todos.md +2 -1
  54. package/dist/{google-gemini-cli-core-0.35.0-preview.1.tgz → google-gemini-cli-core-0.36.0-nightly.20260317.2f90b4653.tgz} +0 -0
  55. package/dist/src/agent/agent-session.d.ts +37 -0
  56. package/dist/src/agent/agent-session.js +168 -0
  57. package/dist/src/agent/agent-session.js.map +1 -0
  58. package/dist/src/agent/agent-session.test.d.ts +6 -0
  59. package/dist/src/agent/agent-session.test.js +217 -0
  60. package/dist/src/agent/agent-session.test.js.map +1 -0
  61. package/dist/src/agent/content-utils.d.ts +33 -0
  62. package/dist/src/agent/content-utils.js +135 -0
  63. package/dist/src/agent/content-utils.js.map +1 -0
  64. package/dist/src/agent/content-utils.test.d.ts +6 -0
  65. package/dist/src/agent/content-utils.test.js +223 -0
  66. package/dist/src/agent/content-utils.test.js.map +1 -0
  67. package/dist/src/agent/mock.d.ts +9 -12
  68. package/dist/src/agent/mock.js +88 -129
  69. package/dist/src/agent/mock.js.map +1 -1
  70. package/dist/src/agent/mock.test.js +114 -144
  71. package/dist/src/agent/mock.test.js.map +1 -1
  72. package/dist/src/agent/types.d.ts +21 -21
  73. package/dist/src/agents/a2a-client-manager.d.ts +2 -11
  74. package/dist/src/agents/a2a-client-manager.js +3 -19
  75. package/dist/src/agents/a2a-client-manager.js.map +1 -1
  76. package/dist/src/agents/a2a-client-manager.test.js +6 -10
  77. package/dist/src/agents/a2a-client-manager.test.js.map +1 -1
  78. package/dist/src/agents/agent-scheduler.d.ts +6 -0
  79. package/dist/src/agents/agent-scheduler.js +3 -2
  80. package/dist/src/agents/agent-scheduler.js.map +1 -1
  81. package/dist/src/agents/agent-scheduler.test.js +6 -0
  82. package/dist/src/agents/agent-scheduler.test.js.map +1 -1
  83. package/dist/src/agents/browser/browserAgentDefinition.js +10 -1
  84. package/dist/src/agents/browser/browserAgentDefinition.js.map +1 -1
  85. package/dist/src/agents/browser/browserAgentFactory.js +62 -1
  86. package/dist/src/agents/browser/browserAgentFactory.js.map +1 -1
  87. package/dist/src/agents/browser/browserAgentFactory.test.js +73 -0
  88. package/dist/src/agents/browser/browserAgentFactory.test.js.map +1 -1
  89. package/dist/src/agents/browser/browserAgentInvocation.js +2 -97
  90. package/dist/src/agents/browser/browserAgentInvocation.js.map +1 -1
  91. package/dist/src/agents/browser/browserAgentInvocation.test.js +30 -0
  92. package/dist/src/agents/browser/browserAgentInvocation.test.js.map +1 -1
  93. package/dist/src/agents/browser/browserManager.js +11 -0
  94. package/dist/src/agents/browser/browserManager.js.map +1 -1
  95. package/dist/src/agents/browser/browserManager.test.js +37 -0
  96. package/dist/src/agents/browser/browserManager.test.js.map +1 -1
  97. package/dist/src/agents/browser/mcpToolWrapper.d.ts +4 -2
  98. package/dist/src/agents/browser/mcpToolWrapper.js +30 -8
  99. package/dist/src/agents/browser/mcpToolWrapper.js.map +1 -1
  100. package/dist/src/agents/browser/mcpToolWrapper.test.js +30 -0
  101. package/dist/src/agents/browser/mcpToolWrapper.test.js.map +1 -1
  102. package/dist/src/agents/browser/mcpToolWrapperConfirmation.test.js +3 -3
  103. package/dist/src/agents/codebase-investigator.js +3 -3
  104. package/dist/src/agents/codebase-investigator.js.map +1 -1
  105. package/dist/src/agents/local-executor.d.ts +3 -1
  106. package/dist/src/agents/local-executor.js +138 -39
  107. package/dist/src/agents/local-executor.js.map +1 -1
  108. package/dist/src/agents/local-executor.test.js +305 -12
  109. package/dist/src/agents/local-executor.test.js.map +1 -1
  110. package/dist/src/agents/local-invocation.js +43 -24
  111. package/dist/src/agents/local-invocation.js.map +1 -1
  112. package/dist/src/agents/local-invocation.test.js +89 -14
  113. package/dist/src/agents/local-invocation.test.js.map +1 -1
  114. package/dist/src/agents/memory-manager-agent.d.ts +25 -0
  115. package/dist/src/agents/memory-manager-agent.js +137 -0
  116. package/dist/src/agents/memory-manager-agent.js.map +1 -0
  117. package/dist/src/agents/memory-manager-agent.test.d.ts +6 -0
  118. package/dist/src/agents/memory-manager-agent.test.js +117 -0
  119. package/dist/src/agents/memory-manager-agent.test.js.map +1 -0
  120. package/dist/src/agents/registry.js +21 -3
  121. package/dist/src/agents/registry.js.map +1 -1
  122. package/dist/src/agents/registry.test.js +23 -24
  123. package/dist/src/agents/registry.test.js.map +1 -1
  124. package/dist/src/agents/remote-invocation.d.ts +3 -1
  125. package/dist/src/agents/remote-invocation.js +10 -5
  126. package/dist/src/agents/remote-invocation.js.map +1 -1
  127. package/dist/src/agents/remote-invocation.test.js +64 -41
  128. package/dist/src/agents/remote-invocation.test.js.map +1 -1
  129. package/dist/src/agents/subagent-tool-wrapper.js +1 -1
  130. package/dist/src/agents/subagent-tool-wrapper.js.map +1 -1
  131. package/dist/src/agents/types.d.ts +12 -0
  132. package/dist/src/agents/types.js +14 -0
  133. package/dist/src/agents/types.js.map +1 -1
  134. package/dist/src/availability/policyHelpers.js +41 -1
  135. package/dist/src/availability/policyHelpers.js.map +1 -1
  136. package/dist/src/availability/policyHelpers.test.js +47 -0
  137. package/dist/src/availability/policyHelpers.test.js.map +1 -1
  138. package/dist/src/code_assist/admin/admin_controls.js +11 -0
  139. package/dist/src/code_assist/admin/admin_controls.js.map +1 -1
  140. package/dist/src/code_assist/admin/admin_controls.test.js +68 -0
  141. package/dist/src/code_assist/admin/admin_controls.test.js.map +1 -1
  142. package/dist/src/code_assist/admin/mcpUtils.d.ts +16 -1
  143. package/dist/src/code_assist/admin/mcpUtils.js +43 -0
  144. package/dist/src/code_assist/admin/mcpUtils.js.map +1 -1
  145. package/dist/src/code_assist/admin/mcpUtils.test.js +130 -1
  146. package/dist/src/code_assist/admin/mcpUtils.test.js.map +1 -1
  147. package/dist/src/code_assist/types.d.ts +458 -0
  148. package/dist/src/code_assist/types.js +26 -0
  149. package/dist/src/code_assist/types.js.map +1 -1
  150. package/dist/src/config/agent-loop-context.d.ts +6 -0
  151. package/dist/src/config/config.d.ts +41 -10
  152. package/dist/src/config/config.js +96 -19
  153. package/dist/src/config/config.js.map +1 -1
  154. package/dist/src/config/config.test.js +29 -1
  155. package/dist/src/config/config.test.js.map +1 -1
  156. package/dist/src/config/defaultModelConfigs.js +265 -9
  157. package/dist/src/config/defaultModelConfigs.js.map +1 -1
  158. package/dist/src/config/models.d.ts +13 -2
  159. package/dist/src/config/models.js +31 -3
  160. package/dist/src/config/models.js.map +1 -1
  161. package/dist/src/config/models.test.js +52 -7
  162. package/dist/src/config/models.test.js.map +1 -1
  163. package/dist/src/config/path-validation.test.d.ts +6 -0
  164. package/dist/src/config/path-validation.test.js +59 -0
  165. package/dist/src/config/path-validation.test.js.map +1 -0
  166. package/dist/src/core/client.d.ts +1 -0
  167. package/dist/src/core/client.js +6 -1
  168. package/dist/src/core/client.js.map +1 -1
  169. package/dist/src/core/client.test.js +9 -1
  170. package/dist/src/core/client.test.js.map +1 -1
  171. package/dist/src/core/contentGenerator.js +36 -6
  172. package/dist/src/core/contentGenerator.js.map +1 -1
  173. package/dist/src/core/contentGenerator.test.js +97 -3
  174. package/dist/src/core/contentGenerator.test.js.map +1 -1
  175. package/dist/src/core/geminiChat.js +2 -2
  176. package/dist/src/core/geminiChat.js.map +1 -1
  177. package/dist/src/core/prompts.test.js +10 -0
  178. package/dist/src/core/prompts.test.js.map +1 -1
  179. package/dist/src/generated/git-commit.d.ts +2 -2
  180. package/dist/src/generated/git-commit.js +2 -2
  181. package/dist/src/generated/git-commit.js.map +1 -1
  182. package/dist/src/ide/ide-connection-utils.js +2 -7
  183. package/dist/src/ide/ide-connection-utils.js.map +1 -1
  184. package/dist/src/ide/ide-connection-utils.test.js +7 -0
  185. package/dist/src/ide/ide-connection-utils.test.js.map +1 -1
  186. package/dist/src/index.d.ts +4 -0
  187. package/dist/src/index.js +4 -0
  188. package/dist/src/index.js.map +1 -1
  189. package/dist/src/policy/config.js +2 -0
  190. package/dist/src/policy/config.js.map +1 -1
  191. package/dist/src/policy/config.test.js +15 -0
  192. package/dist/src/policy/config.test.js.map +1 -1
  193. package/dist/src/policy/memory-manager-policy.test.d.ts +6 -0
  194. package/dist/src/policy/memory-manager-policy.test.js +80 -0
  195. package/dist/src/policy/memory-manager-policy.test.js.map +1 -0
  196. package/dist/src/policy/policies/memory-manager.toml +10 -0
  197. package/dist/src/policy/policies/plan.toml +14 -0
  198. package/dist/src/policy/policies/yolo.toml +1 -0
  199. package/dist/src/policy/policy-engine.js +33 -6
  200. package/dist/src/policy/policy-engine.js.map +1 -1
  201. package/dist/src/policy/policy-engine.test.js +85 -3
  202. package/dist/src/policy/policy-engine.test.js.map +1 -1
  203. package/dist/src/policy/policy-updater.test.js +44 -0
  204. package/dist/src/policy/policy-updater.test.js.map +1 -1
  205. package/dist/src/policy/toml-loader.js +2 -0
  206. package/dist/src/policy/toml-loader.js.map +1 -1
  207. package/dist/src/policy/types.d.ts +11 -0
  208. package/dist/src/policy/types.js +5 -0
  209. package/dist/src/policy/types.js.map +1 -1
  210. package/dist/src/prompts/promptProvider.js +5 -3
  211. package/dist/src/prompts/promptProvider.js.map +1 -1
  212. package/dist/src/prompts/promptProvider.test.js +1 -0
  213. package/dist/src/prompts/promptProvider.test.js.map +1 -1
  214. package/dist/src/prompts/snippets-memory-manager.test.d.ts +6 -0
  215. package/dist/src/prompts/snippets-memory-manager.test.js +31 -0
  216. package/dist/src/prompts/snippets-memory-manager.test.js.map +1 -0
  217. package/dist/src/prompts/snippets.d.ts +2 -0
  218. package/dist/src/prompts/snippets.js +7 -3
  219. package/dist/src/prompts/snippets.js.map +1 -1
  220. package/dist/src/prompts/snippets.legacy.d.ts +5 -0
  221. package/dist/src/prompts/snippets.legacy.js +30 -2
  222. package/dist/src/prompts/snippets.legacy.js.map +1 -1
  223. package/dist/src/routing/strategies/classifierStrategy.js +1 -1
  224. package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
  225. package/dist/src/routing/strategies/defaultStrategy.js +1 -1
  226. package/dist/src/routing/strategies/defaultStrategy.js.map +1 -1
  227. package/dist/src/routing/strategies/fallbackStrategy.js +1 -1
  228. package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
  229. package/dist/src/routing/strategies/numericalClassifierStrategy.js +1 -1
  230. package/dist/src/routing/strategies/numericalClassifierStrategy.js.map +1 -1
  231. package/dist/src/routing/strategies/overrideStrategy.js +1 -1
  232. package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
  233. package/dist/src/sandbox/macos/MacOsSandboxManager.d.ts +28 -0
  234. package/dist/src/sandbox/macos/MacOsSandboxManager.integration.test.d.ts +1 -0
  235. package/dist/src/sandbox/macos/MacOsSandboxManager.integration.test.js +160 -0
  236. package/dist/src/sandbox/macos/MacOsSandboxManager.integration.test.js.map +1 -0
  237. package/dist/src/sandbox/macos/MacOsSandboxManager.js +33 -0
  238. package/dist/src/sandbox/macos/MacOsSandboxManager.js.map +1 -0
  239. package/dist/src/sandbox/macos/MacOsSandboxManager.test.d.ts +1 -0
  240. package/dist/src/sandbox/macos/MacOsSandboxManager.test.js +87 -0
  241. package/dist/src/sandbox/macos/MacOsSandboxManager.test.js.map +1 -0
  242. package/dist/src/sandbox/macos/baseProfile.d.ts +20 -0
  243. package/dist/src/sandbox/macos/baseProfile.js +93 -0
  244. package/dist/src/sandbox/macos/baseProfile.js.map +1 -0
  245. package/dist/src/sandbox/macos/seatbeltArgsBuilder.d.ts +25 -0
  246. package/dist/src/sandbox/macos/seatbeltArgsBuilder.js +58 -0
  247. package/dist/src/sandbox/macos/seatbeltArgsBuilder.js.map +1 -0
  248. package/dist/src/sandbox/macos/seatbeltArgsBuilder.test.d.ts +1 -0
  249. package/dist/src/sandbox/macos/seatbeltArgsBuilder.test.js +80 -0
  250. package/dist/src/sandbox/macos/seatbeltArgsBuilder.test.js.map +1 -0
  251. package/dist/src/scheduler/scheduler.js +2 -0
  252. package/dist/src/scheduler/scheduler.js.map +1 -1
  253. package/dist/src/services/contextManager.js +2 -3
  254. package/dist/src/services/contextManager.js.map +1 -1
  255. package/dist/src/services/contextManager.test.js +1 -1
  256. package/dist/src/services/contextManager.test.js.map +1 -1
  257. package/dist/src/services/modelConfigService.d.ts +36 -1
  258. package/dist/src/services/modelConfigService.js +66 -0
  259. package/dist/src/services/modelConfigService.js.map +1 -1
  260. package/dist/src/services/sandboxManager.d.ts +3 -4
  261. package/dist/src/services/sandboxManager.js +1 -14
  262. package/dist/src/services/sandboxManager.js.map +1 -1
  263. package/dist/src/services/sandboxManager.test.js +13 -16
  264. package/dist/src/services/sandboxManager.test.js.map +1 -1
  265. package/dist/src/services/sandboxManagerFactory.d.ts +11 -0
  266. package/dist/src/services/sandboxManagerFactory.js +31 -0
  267. package/dist/src/services/sandboxManagerFactory.js.map +1 -0
  268. package/dist/src/services/sandboxedFileSystemService.d.ts +17 -0
  269. package/dist/src/services/sandboxedFileSystemService.js +95 -0
  270. package/dist/src/services/sandboxedFileSystemService.js.map +1 -0
  271. package/dist/src/services/sandboxedFileSystemService.test.d.ts +6 -0
  272. package/dist/src/services/sandboxedFileSystemService.test.js +87 -0
  273. package/dist/src/services/sandboxedFileSystemService.test.js.map +1 -0
  274. package/dist/src/services/scripts/GeminiSandbox.cs +370 -0
  275. package/dist/src/services/shellExecutionService.d.ts +2 -0
  276. package/dist/src/services/shellExecutionService.js +79 -75
  277. package/dist/src/services/shellExecutionService.js.map +1 -1
  278. package/dist/src/services/trackerTypes.d.ts +1 -0
  279. package/dist/src/services/trackerTypes.js +1 -0
  280. package/dist/src/services/trackerTypes.js.map +1 -1
  281. package/dist/src/services/windowsSandboxManager.d.ts +27 -0
  282. package/dist/src/services/windowsSandboxManager.js +148 -0
  283. package/dist/src/services/windowsSandboxManager.js.map +1 -0
  284. package/dist/src/services/windowsSandboxManager.test.d.ts +6 -0
  285. package/dist/src/services/windowsSandboxManager.test.js +59 -0
  286. package/dist/src/services/windowsSandboxManager.test.js.map +1 -0
  287. package/dist/src/services/worktreeService.d.ts +33 -0
  288. package/dist/src/services/worktreeService.js +174 -0
  289. package/dist/src/services/worktreeService.js.map +1 -0
  290. package/dist/src/services/worktreeService.test.d.ts +6 -0
  291. package/dist/src/services/worktreeService.test.js +200 -0
  292. package/dist/src/services/worktreeService.test.js.map +1 -0
  293. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +4 -0
  294. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  295. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +1 -0
  296. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +2 -0
  297. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  298. package/dist/src/telemetry/loggers.test.js +62 -40
  299. package/dist/src/telemetry/loggers.test.js.map +1 -1
  300. package/dist/src/telemetry/types.d.ts +1 -0
  301. package/dist/src/telemetry/types.js +3 -0
  302. package/dist/src/telemetry/types.js.map +1 -1
  303. package/dist/src/tools/definitions/model-family-sets/default-legacy.js +8 -1
  304. package/dist/src/tools/definitions/model-family-sets/default-legacy.js.map +1 -1
  305. package/dist/src/tools/definitions/model-family-sets/gemini-3.js +8 -1
  306. package/dist/src/tools/definitions/model-family-sets/gemini-3.js.map +1 -1
  307. package/dist/src/tools/exit-plan-mode.d.ts +6 -1
  308. package/dist/src/tools/exit-plan-mode.js +17 -6
  309. package/dist/src/tools/exit-plan-mode.js.map +1 -1
  310. package/dist/src/tools/exit-plan-mode.test.js +22 -1
  311. package/dist/src/tools/exit-plan-mode.test.js.map +1 -1
  312. package/dist/src/tools/mcp-client-manager.d.ts +22 -3
  313. package/dist/src/tools/mcp-client-manager.js +84 -32
  314. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  315. package/dist/src/tools/mcp-client-manager.test.js +76 -56
  316. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  317. package/dist/src/tools/mcp-client.d.ts +15 -6
  318. package/dist/src/tools/mcp-client.js +85 -71
  319. package/dist/src/tools/mcp-client.js.map +1 -1
  320. package/dist/src/tools/mcp-client.test.js +195 -88
  321. package/dist/src/tools/mcp-client.test.js.map +1 -1
  322. package/dist/src/tools/tool-registry.d.ts +2 -1
  323. package/dist/src/tools/tool-registry.js +12 -1
  324. package/dist/src/tools/tool-registry.js.map +1 -1
  325. package/dist/src/tools/tool-registry.test.js +15 -0
  326. package/dist/src/tools/tool-registry.test.js.map +1 -1
  327. package/dist/src/tools/tools.d.ts +1 -1
  328. package/dist/src/tools/tools.js.map +1 -1
  329. package/dist/src/tools/trackerTools.js +6 -1
  330. package/dist/src/tools/trackerTools.js.map +1 -1
  331. package/dist/src/tools/trackerTools.test.js +9 -1
  332. package/dist/src/tools/trackerTools.test.js.map +1 -1
  333. package/dist/src/tools/write-todos.js +1 -0
  334. package/dist/src/tools/write-todos.js.map +1 -1
  335. package/dist/src/tools/write-todos.test.js +4 -1
  336. package/dist/src/tools/write-todos.test.js.map +1 -1
  337. package/dist/src/utils/agent-sanitization-utils.d.ts +23 -0
  338. package/dist/src/utils/agent-sanitization-utils.js +123 -0
  339. package/dist/src/utils/agent-sanitization-utils.js.map +1 -0
  340. package/dist/src/utils/agent-sanitization-utils.test.d.ts +6 -0
  341. package/dist/src/utils/agent-sanitization-utils.test.js +83 -0
  342. package/dist/src/utils/agent-sanitization-utils.test.js.map +1 -0
  343. package/dist/src/utils/browserConsent.d.ts +17 -0
  344. package/dist/src/utils/browserConsent.js +78 -0
  345. package/dist/src/utils/browserConsent.js.map +1 -0
  346. package/dist/src/utils/browserConsent.test.d.ts +6 -0
  347. package/dist/src/utils/browserConsent.test.js +93 -0
  348. package/dist/src/utils/browserConsent.test.js.map +1 -0
  349. package/dist/src/utils/compatibility.d.ts +16 -0
  350. package/dist/src/utils/compatibility.js +58 -9
  351. package/dist/src/utils/compatibility.js.map +1 -1
  352. package/dist/src/utils/compatibility.test.js +127 -29
  353. package/dist/src/utils/compatibility.test.js.map +1 -1
  354. package/dist/src/utils/memoryDiscovery.d.ts +2 -2
  355. package/dist/src/utils/memoryDiscovery.js +5 -10
  356. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  357. package/dist/src/utils/memoryDiscovery.test.js +37 -37
  358. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  359. package/dist/src/utils/memoryImportProcessor.js +5 -5
  360. package/dist/src/utils/memoryImportProcessor.js.map +1 -1
  361. package/dist/src/utils/surface.js +4 -3
  362. package/dist/src/utils/surface.js.map +1 -1
  363. package/dist/src/utils/toolCallContext.d.ts +2 -0
  364. package/dist/src/utils/toolCallContext.js.map +1 -1
  365. package/dist/tsconfig.tsbuildinfo +1 -1
  366. package/package.json +2 -1
@@ -4,10 +4,33 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { describe, it, expect, vi, beforeEach, afterEach, } from 'vitest';
7
+ const { mockSendMessageStream, mockScheduleAgentTools, mockSetSystemInstruction, mockCompress, mockMaybeDiscoverMcpServer, mockStopMcp, } = vi.hoisted(() => ({
8
+ mockSendMessageStream: vi.fn().mockResolvedValue({
9
+ async *[Symbol.asyncIterator]() {
10
+ yield {
11
+ type: 'chunk',
12
+ value: { candidates: [] },
13
+ };
14
+ },
15
+ }),
16
+ mockScheduleAgentTools: vi.fn(),
17
+ mockSetSystemInstruction: vi.fn(),
18
+ mockCompress: vi.fn(),
19
+ mockMaybeDiscoverMcpServer: vi.fn().mockResolvedValue(undefined),
20
+ mockStopMcp: vi.fn().mockResolvedValue(undefined),
21
+ }));
22
+ vi.mock('../tools/mcp-client-manager.js', () => ({
23
+ McpClientManager: class {
24
+ maybeDiscoverMcpServer = mockMaybeDiscoverMcpServer;
25
+ stop = mockStopMcp;
26
+ },
27
+ }));
7
28
  import { debugLogger } from '../utils/debugLogger.js';
8
29
  import { LocalAgentExecutor } from './local-executor.js';
9
30
  import { makeFakeConfig } from '../test-utils/config.js';
10
31
  import { ToolRegistry } from '../tools/tool-registry.js';
32
+ import { PromptRegistry } from '../prompts/prompt-registry.js';
33
+ import { ResourceRegistry } from '../resources/resource-registry.js';
11
34
  import { DiscoveredMCPTool } from '../tools/mcp-tool.js';
12
35
  import { LSTool } from '../tools/ls.js';
13
36
  import { LS_TOOL_NAME, READ_FILE_TOOL_NAME } from '../tools/tool-names.js';
@@ -20,16 +43,12 @@ import { getErrorMessage } from '../utils/errors.js';
20
43
  import { promptIdContext } from '../utils/promptIdContext.js';
21
44
  import { logAgentStart, logAgentFinish, logRecoveryAttempt, } from '../telemetry/loggers.js';
22
45
  import { LlmRole, AgentStartEvent, AgentFinishEvent, RecoveryAttemptEvent, } from '../telemetry/types.js';
23
- import { AgentTerminateMode, } from './types.js';
46
+ import { AgentTerminateMode, SubagentActivityErrorType, } from './types.js';
47
+ import { ToolConfirmationOutcome, } from '../tools/tools.js';
48
+ import { CoreToolCallStatus, } from '../scheduler/types.js';
24
49
  import { CompressionStatus } from '../core/turn.js';
25
50
  import { ChatCompressionService } from '../services/chatCompressionService.js';
26
51
  import { getModelConfigAlias } from './registry.js';
27
- const { mockSendMessageStream, mockScheduleAgentTools, mockSetSystemInstruction, mockCompress, } = vi.hoisted(() => ({
28
- mockSendMessageStream: vi.fn(),
29
- mockScheduleAgentTools: vi.fn(),
30
- mockSetSystemInstruction: vi.fn(),
31
- mockCompress: vi.fn(),
32
- }));
33
52
  let mockChatHistory = [];
34
53
  const mockSetHistory = vi.fn((newHistory) => {
35
54
  mockChatHistory = newHistory;
@@ -233,6 +252,51 @@ describe('LocalAgentExecutor', () => {
233
252
  vi.useRealTimers();
234
253
  });
235
254
  describe('create (Initialization and Validation)', () => {
255
+ it('should explicitly map execution context properties to prevent unintended propagation', async () => {
256
+ const definition = createTestDefinition([LS_TOOL_NAME]);
257
+ const mockGeminiClient = {};
258
+ const mockSandboxManager = {};
259
+ const extendedContext = {
260
+ config: mockConfig,
261
+ promptId: mockConfig.promptId,
262
+ toolRegistry: parentToolRegistry,
263
+ promptRegistry: mockConfig.promptRegistry,
264
+ resourceRegistry: mockConfig.resourceRegistry,
265
+ messageBus: mockConfig.messageBus,
266
+ geminiClient: mockGeminiClient,
267
+ sandboxManager: mockSandboxManager,
268
+ unintendedProperty: 'should not be here',
269
+ };
270
+ const executor = await LocalAgentExecutor.create(definition, extendedContext, onActivity);
271
+ mockModelResponse([
272
+ {
273
+ name: TASK_COMPLETE_TOOL_NAME,
274
+ args: { finalResult: 'done' },
275
+ id: 'call1',
276
+ },
277
+ ]);
278
+ await executor.run({ goal: 'test' }, signal);
279
+ const chatConstructorArgs = MockedGeminiChat.mock.calls[0];
280
+ const executionContext = chatConstructorArgs[0];
281
+ expect(executionContext).toBeDefined();
282
+ expect(executionContext.config).toBe(extendedContext.config);
283
+ expect(executionContext.promptId).toBe(extendedContext.promptId);
284
+ expect(executionContext.geminiClient).toBe(extendedContext.geminiClient);
285
+ expect(executionContext.sandboxManager).toBe(extendedContext.sandboxManager);
286
+ const agentToolRegistry = executor['toolRegistry'];
287
+ const agentPromptRegistry = executor['promptRegistry'];
288
+ const agentResourceRegistry = executor['resourceRegistry'];
289
+ expect(executionContext.toolRegistry).toBe(agentToolRegistry);
290
+ expect(executionContext.promptRegistry).toBe(agentPromptRegistry);
291
+ expect(executionContext.resourceRegistry).toBe(agentResourceRegistry);
292
+ expect(executionContext.messageBus).toBe(agentToolRegistry.getMessageBus());
293
+ // Ensure the unintended property was not spread
294
+ expect(executionContext
295
+ .unintendedProperty).toBeUndefined();
296
+ // Ensure registries and message bus are not the parent's
297
+ expect(executionContext.toolRegistry).not.toBe(extendedContext.toolRegistry);
298
+ expect(executionContext.messageBus).not.toBe(extendedContext.messageBus);
299
+ });
236
300
  it('should create successfully with allowed tools', async () => {
237
301
  const definition = createTestDefinition([LS_TOOL_NAME]);
238
302
  const executor = await LocalAgentExecutor.create(definition, mockConfig, onActivity);
@@ -611,6 +675,7 @@ describe('LocalAgentExecutor', () => {
611
675
  data: expect.objectContaining({
612
676
  context: 'protocol_violation',
613
677
  error: expectedError,
678
+ errorType: SubagentActivityErrorType.GENERIC,
614
679
  }),
615
680
  }));
616
681
  });
@@ -642,6 +707,7 @@ describe('LocalAgentExecutor', () => {
642
707
  context: 'tool_call',
643
708
  name: TASK_COMPLETE_TOOL_NAME,
644
709
  error: expectedError,
710
+ errorType: SubagentActivityErrorType.GENERIC,
645
711
  }),
646
712
  }));
647
713
  const turn2Params = getMockMessageParams(1);
@@ -712,7 +778,7 @@ describe('LocalAgentExecutor', () => {
712
778
  resolveCalls();
713
779
  await vi.advanceTimersByTimeAsync(100);
714
780
  return {
715
- status: 'success',
781
+ status: CoreToolCallStatus.Success,
716
782
  request: reqInfo,
717
783
  tool: {},
718
784
  invocation: {},
@@ -730,7 +796,7 @@ describe('LocalAgentExecutor', () => {
730
796
  ],
731
797
  error: undefined,
732
798
  errorType: undefined,
733
- contentLength: undefined,
799
+ contentLength: 0,
734
800
  },
735
801
  };
736
802
  }));
@@ -759,10 +825,10 @@ describe('LocalAgentExecutor', () => {
759
825
  expect(parts).toHaveLength(2);
760
826
  expect(parts).toEqual(expect.arrayContaining([
761
827
  expect.objectContaining({
762
- functionResponse: expect.objectContaining({ id: 'c1' }),
828
+ functionResponse: expect.objectContaining({ name: LS_TOOL_NAME }),
763
829
  }),
764
830
  expect.objectContaining({
765
- functionResponse: expect.objectContaining({ id: 'c2' }),
831
+ functionResponse: expect.objectContaining({ name: LS_TOOL_NAME }),
766
832
  }),
767
833
  ]));
768
834
  });
@@ -814,6 +880,7 @@ describe('LocalAgentExecutor', () => {
814
880
  data: expect.objectContaining({
815
881
  context: 'tool_call_unauthorized',
816
882
  name: READ_FILE_TOOL_NAME,
883
+ errorType: SubagentActivityErrorType.GENERIC,
817
884
  }),
818
885
  }));
819
886
  });
@@ -848,6 +915,7 @@ describe('LocalAgentExecutor', () => {
848
915
  context: 'tool_call',
849
916
  name: TASK_COMPLETE_TOOL_NAME,
850
917
  error: expect.stringContaining('Output validation failed'),
918
+ errorType: SubagentActivityErrorType.GENERIC,
851
919
  }),
852
920
  }));
853
921
  // Check that the error was sent back to the model for the next turn
@@ -880,6 +948,7 @@ describe('LocalAgentExecutor', () => {
880
948
  type: 'ERROR',
881
949
  data: expect.objectContaining({
882
950
  error: `Error: Failed to create chat object: ${getErrorMessage(initError)}`,
951
+ errorType: SubagentActivityErrorType.GENERIC,
883
952
  }),
884
953
  }));
885
954
  // Ensure the agent run was logged as a failure
@@ -897,7 +966,7 @@ describe('LocalAgentExecutor', () => {
897
966
  ]);
898
967
  mockScheduleAgentTools.mockResolvedValueOnce([
899
968
  {
900
- status: 'error',
969
+ status: CoreToolCallStatus.Error,
901
970
  request: {
902
971
  callId: 'call1',
903
972
  name: LS_TOOL_NAME,
@@ -943,6 +1012,7 @@ describe('LocalAgentExecutor', () => {
943
1012
  context: 'tool_call',
944
1013
  name: LS_TOOL_NAME,
945
1014
  error: toolErrorMessage,
1015
+ errorType: SubagentActivityErrorType.GENERIC,
946
1016
  }),
947
1017
  }));
948
1018
  // Verify the error was sent back to the model
@@ -962,6 +1032,129 @@ describe('LocalAgentExecutor', () => {
962
1032
  expect(output.terminate_reason).toBe(AgentTerminateMode.GOAL);
963
1033
  expect(output.result).toBe('Aborted due to tool failure.');
964
1034
  });
1035
+ it('should handle a soft tool rejection (outcome: Cancel) and provide direct instructions to the model', async () => {
1036
+ const definition = createTestDefinition([LS_TOOL_NAME]);
1037
+ const executor = await LocalAgentExecutor.create(definition, mockConfig, onActivity);
1038
+ // Turn 1: Model calls a tool that will be rejected
1039
+ mockModelResponse([
1040
+ { name: LS_TOOL_NAME, args: { path: '/secret' }, id: 'call1' },
1041
+ ]);
1042
+ mockScheduleAgentTools.mockResolvedValueOnce([
1043
+ {
1044
+ status: 'cancelled',
1045
+ request: {
1046
+ callId: 'call1',
1047
+ name: LS_TOOL_NAME,
1048
+ args: { path: '/secret' },
1049
+ isClientInitiated: false,
1050
+ prompt_id: 'test-prompt',
1051
+ },
1052
+ tool: {},
1053
+ invocation: {},
1054
+ outcome: ToolConfirmationOutcome.Cancel, // Soft rejection
1055
+ response: {
1056
+ callId: 'call1',
1057
+ resultDisplay: '',
1058
+ responseParts: [
1059
+ {
1060
+ functionResponse: {
1061
+ name: LS_TOOL_NAME,
1062
+ response: {
1063
+ error: '[Operation Cancelled] Reason: User denied execution.',
1064
+ },
1065
+ id: 'call1',
1066
+ },
1067
+ },
1068
+ ],
1069
+ error: undefined,
1070
+ errorType: undefined,
1071
+ contentLength: 0,
1072
+ },
1073
+ },
1074
+ ]);
1075
+ // Turn 2: Model sees the rejection + consolidated instructions and completes
1076
+ mockModelResponse([
1077
+ {
1078
+ name: TASK_COMPLETE_TOOL_NAME,
1079
+ args: { finalResult: 'User rejected access to /secret.' },
1080
+ id: 'call2',
1081
+ },
1082
+ ]);
1083
+ const output = await executor.run({ goal: 'Soft rejection test' }, signal);
1084
+ // Verify the activity stream reported the consolidated instruction
1085
+ expect(activities).toContainEqual(expect.objectContaining({
1086
+ type: 'ERROR',
1087
+ data: expect.objectContaining({
1088
+ context: 'tool_call',
1089
+ name: LS_TOOL_NAME,
1090
+ error: expect.stringContaining('User rejected this operation'),
1091
+ errorType: SubagentActivityErrorType.REJECTED,
1092
+ }),
1093
+ }));
1094
+ // Verify the instruction was sent back to the model as the tool error
1095
+ const turn2Params = getMockMessageParams(1);
1096
+ const parts = turn2Params.message;
1097
+ const errorMsg = parts[0].functionResponse?.response?.['error'];
1098
+ expect(typeof errorMsg).toBe('string');
1099
+ if (typeof errorMsg === 'string') {
1100
+ expect(errorMsg).toContain('User rejected this operation');
1101
+ expect(errorMsg).toContain('acknowledge this, rethink your strategy');
1102
+ }
1103
+ expect(output.terminate_reason).toBe(AgentTerminateMode.GOAL);
1104
+ expect(output.result).toBe('User rejected access to /secret.');
1105
+ });
1106
+ it('should handle a hard tool abort (cancelled with no outcome) and terminate the agent', async () => {
1107
+ const definition = createTestDefinition([LS_TOOL_NAME]);
1108
+ const executor = await LocalAgentExecutor.create(definition, mockConfig, onActivity);
1109
+ // Turn 1: Model calls a tool that will be aborted (e.g. Ctrl+C)
1110
+ mockModelResponse([
1111
+ { name: LS_TOOL_NAME, args: { path: '/secret' }, id: 'call1' },
1112
+ ]);
1113
+ mockScheduleAgentTools.mockResolvedValueOnce([
1114
+ {
1115
+ status: 'cancelled',
1116
+ request: {
1117
+ callId: 'call1',
1118
+ name: LS_TOOL_NAME,
1119
+ args: { path: '/secret' },
1120
+ isClientInitiated: false,
1121
+ prompt_id: 'test-prompt',
1122
+ },
1123
+ tool: {},
1124
+ invocation: {},
1125
+ outcome: undefined, // Hard abort
1126
+ response: {
1127
+ callId: 'call1',
1128
+ resultDisplay: '',
1129
+ responseParts: [
1130
+ {
1131
+ functionResponse: {
1132
+ name: LS_TOOL_NAME,
1133
+ response: { error: 'Request cancelled.' },
1134
+ id: 'call1',
1135
+ },
1136
+ },
1137
+ ],
1138
+ error: undefined,
1139
+ errorType: undefined,
1140
+ contentLength: 0,
1141
+ },
1142
+ },
1143
+ ]);
1144
+ const output = await executor.run({ goal: 'Hard abort test' }, signal);
1145
+ // Verify the activity stream reported the cancellation
1146
+ expect(activities).toContainEqual(expect.objectContaining({
1147
+ type: 'ERROR',
1148
+ data: expect.objectContaining({
1149
+ context: 'tool_call',
1150
+ name: LS_TOOL_NAME,
1151
+ error: 'Request cancelled.',
1152
+ errorType: SubagentActivityErrorType.CANCELLED,
1153
+ }),
1154
+ }));
1155
+ // Agent should terminate with ABORTED status
1156
+ expect(output.terminate_reason).toBe(AgentTerminateMode.ABORTED);
1157
+ });
965
1158
  });
966
1159
  describe('Model Routing', () => {
967
1160
  it('should use model routing when the agent model is "auto"', async () => {
@@ -1089,6 +1282,7 @@ describe('LocalAgentExecutor', () => {
1089
1282
  data: expect.objectContaining({
1090
1283
  context: 'timeout',
1091
1284
  error: 'Agent timed out after 0.5 minutes.',
1285
+ errorType: SubagentActivityErrorType.GENERIC,
1092
1286
  }),
1093
1287
  }));
1094
1288
  // Verify telemetry
@@ -1226,6 +1420,7 @@ describe('LocalAgentExecutor', () => {
1226
1420
  data: expect.objectContaining({
1227
1421
  context: 'recovery_turn',
1228
1422
  error: 'Graceful recovery attempt failed. Reason: stop',
1423
+ errorType: SubagentActivityErrorType.GENERIC,
1229
1424
  }),
1230
1425
  }));
1231
1426
  });
@@ -1273,6 +1468,7 @@ describe('LocalAgentExecutor', () => {
1273
1468
  data: expect.objectContaining({
1274
1469
  context: 'recovery_turn',
1275
1470
  error: 'Graceful recovery attempt failed. Reason: stop',
1471
+ errorType: SubagentActivityErrorType.GENERIC,
1276
1472
  }),
1277
1473
  }));
1278
1474
  });
@@ -1350,6 +1546,7 @@ describe('LocalAgentExecutor', () => {
1350
1546
  data: expect.objectContaining({
1351
1547
  context: 'recovery_turn',
1352
1548
  error: 'Graceful recovery attempt failed. Reason: stop',
1549
+ errorType: SubagentActivityErrorType.GENERIC,
1353
1550
  }),
1354
1551
  }));
1355
1552
  });
@@ -1876,6 +2073,40 @@ describe('LocalAgentExecutor', () => {
1876
2073
  expect(mockSetHistory).toHaveBeenCalledWith(compressedHistory);
1877
2074
  });
1878
2075
  });
2076
+ describe('MCP Isolation', () => {
2077
+ it('should initialize McpClientManager when mcpServers are defined', async () => {
2078
+ const { MCPServerConfig } = await import('../config/config.js');
2079
+ const mcpServers = {
2080
+ 'test-server': new MCPServerConfig('node', ['server.js']),
2081
+ };
2082
+ const definition = {
2083
+ ...createTestDefinition(),
2084
+ mcpServers,
2085
+ };
2086
+ vi.spyOn(mockConfig, 'getMcpClientManager').mockReturnValue({
2087
+ maybeDiscoverMcpServer: mockMaybeDiscoverMcpServer,
2088
+ });
2089
+ await LocalAgentExecutor.create(definition, mockConfig);
2090
+ const mcpManager = mockConfig.getMcpClientManager();
2091
+ expect(mcpManager?.maybeDiscoverMcpServer).toHaveBeenCalledWith('test-server', mcpServers['test-server'], expect.objectContaining({
2092
+ toolRegistry: expect.any(ToolRegistry),
2093
+ promptRegistry: expect.any(PromptRegistry),
2094
+ resourceRegistry: expect.any(ResourceRegistry),
2095
+ }));
2096
+ });
2097
+ it('should inherit main registry tools', async () => {
2098
+ const parentMcpTool = new DiscoveredMCPTool({}, 'main-server', 'tool1', 'desc1', {}, mockConfig.getMessageBus());
2099
+ parentToolRegistry.registerTool(parentMcpTool);
2100
+ const definition = createTestDefinition();
2101
+ definition.toolConfig = undefined; // trigger inheritance
2102
+ vi.spyOn(mockConfig, 'getMcpClientManager').mockReturnValue({
2103
+ maybeDiscoverMcpServer: vi.fn(),
2104
+ });
2105
+ const executor = await LocalAgentExecutor.create(definition, mockConfig, onActivity);
2106
+ const agentTools = executor.toolRegistry.getAllToolNames();
2107
+ expect(agentTools).toContain(parentMcpTool.name);
2108
+ });
2109
+ });
1879
2110
  describe('DeclarativeTool instance tools (browser agent pattern)', () => {
1880
2111
  /**
1881
2112
  * The browser agent passes DeclarativeTool instances (not string names) in
@@ -2133,6 +2364,68 @@ describe('LocalAgentExecutor', () => {
2133
2364
  const uniqueNames = new Set(names);
2134
2365
  expect(uniqueNames.size).toBe(names.length);
2135
2366
  });
2367
+ describe('Memory Injection', () => {
2368
+ it('should inject system instruction memory into system prompt', async () => {
2369
+ const definition = createTestDefinition();
2370
+ const executor = await LocalAgentExecutor.create(definition, mockConfig, onActivity);
2371
+ const mockMemory = 'Global memory constraint';
2372
+ vi.spyOn(mockConfig, 'getSystemInstructionMemory').mockReturnValue(mockMemory);
2373
+ mockModelResponse([
2374
+ {
2375
+ name: TASK_COMPLETE_TOOL_NAME,
2376
+ args: { finalResult: 'done' },
2377
+ id: 'call1',
2378
+ },
2379
+ ]);
2380
+ await executor.run({ goal: 'test' }, signal);
2381
+ const chatConstructorArgs = MockedGeminiChat.mock.calls[0];
2382
+ const systemInstruction = chatConstructorArgs[1];
2383
+ expect(systemInstruction).toContain(mockMemory);
2384
+ expect(systemInstruction).toContain('<loaded_context>');
2385
+ });
2386
+ it('should inject environment memory into the first message when JIT is disabled', async () => {
2387
+ const definition = createTestDefinition();
2388
+ const executor = await LocalAgentExecutor.create(definition, mockConfig, onActivity);
2389
+ const mockMemory = 'Project memory rule';
2390
+ vi.spyOn(mockConfig, 'getEnvironmentMemory').mockReturnValue(mockMemory);
2391
+ vi.spyOn(mockConfig, 'isJitContextEnabled').mockReturnValue(false);
2392
+ mockModelResponse([
2393
+ {
2394
+ name: TASK_COMPLETE_TOOL_NAME,
2395
+ args: { finalResult: 'done' },
2396
+ id: 'call1',
2397
+ },
2398
+ ]);
2399
+ await executor.run({ goal: 'test' }, signal);
2400
+ const { message } = getMockMessageParams(0);
2401
+ const parts = message;
2402
+ expect(parts).toBeDefined();
2403
+ const memoryPart = parts.find((p) => p.text?.includes(mockMemory));
2404
+ expect(memoryPart).toBeDefined();
2405
+ expect(memoryPart?.text).toBe(mockMemory);
2406
+ });
2407
+ it('should inject session memory into the first message when JIT is enabled', async () => {
2408
+ const definition = createTestDefinition();
2409
+ const executor = await LocalAgentExecutor.create(definition, mockConfig, onActivity);
2410
+ const mockMemory = '<loaded_context>\nExtension memory rule\n</loaded_context>';
2411
+ vi.spyOn(mockConfig, 'getSessionMemory').mockReturnValue(mockMemory);
2412
+ vi.spyOn(mockConfig, 'isJitContextEnabled').mockReturnValue(true);
2413
+ mockModelResponse([
2414
+ {
2415
+ name: TASK_COMPLETE_TOOL_NAME,
2416
+ args: { finalResult: 'done' },
2417
+ id: 'call1',
2418
+ },
2419
+ ]);
2420
+ await executor.run({ goal: 'test' }, signal);
2421
+ const { message } = getMockMessageParams(0);
2422
+ const parts = message;
2423
+ expect(parts).toBeDefined();
2424
+ const memoryPart = parts.find((p) => p.text?.includes('Extension memory rule'));
2425
+ expect(memoryPart).toBeDefined();
2426
+ expect(memoryPart?.text).toContain(mockMemory);
2427
+ });
2428
+ });
2136
2429
  });
2137
2430
  });
2138
2431
  //# sourceMappingURL=local-executor.test.js.map