@google/gemini-cli-core 0.26.0-preview.4 → 0.27.0-nightly.20260126.cb772a5b7

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 (325) hide show
  1. package/README.md +18 -1
  2. package/dist/docs/changelogs/index.md +87 -0
  3. package/dist/docs/changelogs/latest.md +355 -150
  4. package/dist/docs/changelogs/preview.md +318 -210
  5. package/dist/docs/cli/commands.md +0 -6
  6. package/dist/docs/cli/keyboard-shortcuts.md +32 -31
  7. package/dist/docs/cli/settings.md +16 -18
  8. package/dist/docs/cli/system-prompt.md +32 -0
  9. package/dist/docs/cli/uninstall.md +18 -0
  10. package/dist/docs/extensions/index.md +1 -1
  11. package/dist/docs/get-started/configuration.md +9 -34
  12. package/dist/docs/hooks/best-practices.md +219 -398
  13. package/dist/docs/hooks/index.md +111 -656
  14. package/dist/docs/hooks/reference.md +280 -136
  15. package/dist/docs/hooks/writing-hooks.md +202 -796
  16. package/dist/docs/sidebar.json +1 -5
  17. package/dist/docs/tools/mcp-server.md +24 -1
  18. package/dist/google-gemini-cli-core-0.27.0-nightly.20260121.97aac696f.tgz +0 -0
  19. package/dist/src/agents/agentLoader.js +10 -10
  20. package/dist/src/agents/agentLoader.js.map +1 -1
  21. package/dist/src/agents/agentLoader.test.js +16 -19
  22. package/dist/src/agents/agentLoader.test.js.map +1 -1
  23. package/dist/src/agents/cli-help-agent.js +8 -5
  24. package/dist/src/agents/cli-help-agent.js.map +1 -1
  25. package/dist/src/agents/cli-help-agent.test.js +4 -2
  26. package/dist/src/agents/cli-help-agent.test.js.map +1 -1
  27. package/dist/src/agents/codebase-investigator.d.ts +2 -1
  28. package/dist/src/agents/codebase-investigator.js +62 -41
  29. package/dist/src/agents/codebase-investigator.js.map +1 -1
  30. package/dist/src/agents/codebase-investigator.test.js +15 -8
  31. package/dist/src/agents/codebase-investigator.test.js.map +1 -1
  32. package/dist/src/agents/generalist-agent.js +9 -11
  33. package/dist/src/agents/generalist-agent.js.map +1 -1
  34. package/dist/src/agents/generalist-agent.test.js +3 -3
  35. package/dist/src/agents/generalist-agent.test.js.map +1 -1
  36. package/dist/src/agents/local-executor.js +25 -9
  37. package/dist/src/agents/local-executor.js.map +1 -1
  38. package/dist/src/agents/local-executor.test.js +74 -7
  39. package/dist/src/agents/local-executor.test.js.map +1 -1
  40. package/dist/src/agents/local-invocation.test.js +7 -3
  41. package/dist/src/agents/local-invocation.test.js.map +1 -1
  42. package/dist/src/agents/registry.d.ts +8 -5
  43. package/dist/src/agents/registry.js +31 -75
  44. package/dist/src/agents/registry.js.map +1 -1
  45. package/dist/src/agents/registry.test.js +93 -30
  46. package/dist/src/agents/registry.test.js.map +1 -1
  47. package/dist/src/agents/remote-invocation.js +2 -1
  48. package/dist/src/agents/remote-invocation.js.map +1 -1
  49. package/dist/src/agents/remote-invocation.test.js +15 -3
  50. package/dist/src/agents/remote-invocation.test.js.map +1 -1
  51. package/dist/src/agents/subagent-tool-wrapper.js +1 -3
  52. package/dist/src/agents/subagent-tool-wrapper.js.map +1 -1
  53. package/dist/src/agents/subagent-tool-wrapper.test.js +10 -25
  54. package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -1
  55. package/dist/src/agents/subagent-tool.d.ts +15 -0
  56. package/dist/src/agents/subagent-tool.js +61 -0
  57. package/dist/src/agents/subagent-tool.js.map +1 -0
  58. package/dist/src/agents/types.d.ts +6 -9
  59. package/dist/src/agents/types.js +4 -0
  60. package/dist/src/agents/types.js.map +1 -1
  61. package/dist/src/code_assist/codeAssist.js +1 -1
  62. package/dist/src/code_assist/codeAssist.js.map +1 -1
  63. package/dist/src/code_assist/codeAssist.test.js +2 -2
  64. package/dist/src/code_assist/codeAssist.test.js.map +1 -1
  65. package/dist/src/code_assist/experiments/experiments.test.js +1 -0
  66. package/dist/src/code_assist/experiments/experiments.test.js.map +1 -1
  67. package/dist/src/code_assist/experiments/experiments_local.test.js +11 -6
  68. package/dist/src/code_assist/experiments/experiments_local.test.js.map +1 -1
  69. package/dist/src/code_assist/experiments/flagNames.d.ts +2 -0
  70. package/dist/src/code_assist/experiments/flagNames.js +2 -0
  71. package/dist/src/code_assist/experiments/flagNames.js.map +1 -1
  72. package/dist/src/code_assist/oauth2.js +3 -3
  73. package/dist/src/code_assist/oauth2.test.js +1 -1
  74. package/dist/src/code_assist/server.d.ts +2 -1
  75. package/dist/src/code_assist/server.js +3 -1
  76. package/dist/src/code_assist/server.js.map +1 -1
  77. package/dist/src/code_assist/setup.d.ts +1 -0
  78. package/dist/src/code_assist/setup.js +5 -1
  79. package/dist/src/code_assist/setup.js.map +1 -1
  80. package/dist/src/code_assist/setup.test.js +10 -4
  81. package/dist/src/code_assist/setup.test.js.map +1 -1
  82. package/dist/src/config/config.d.ts +25 -18
  83. package/dist/src/config/config.js +70 -40
  84. package/dist/src/config/config.js.map +1 -1
  85. package/dist/src/config/config.test.js +48 -21
  86. package/dist/src/config/config.test.js.map +1 -1
  87. package/dist/src/confirmation-bus/message-bus.js +2 -32
  88. package/dist/src/confirmation-bus/message-bus.js.map +1 -1
  89. package/dist/src/confirmation-bus/types.d.ts +35 -21
  90. package/dist/src/confirmation-bus/types.js +8 -3
  91. package/dist/src/confirmation-bus/types.js.map +1 -1
  92. package/dist/src/core/client.js +25 -7
  93. package/dist/src/core/client.js.map +1 -1
  94. package/dist/src/core/client.test.js +52 -6
  95. package/dist/src/core/client.test.js.map +1 -1
  96. package/dist/src/core/contentGenerator.d.ts +1 -0
  97. package/dist/src/core/contentGenerator.js.map +1 -1
  98. package/dist/src/core/coreToolHookTriggers.d.ts +2 -38
  99. package/dist/src/core/coreToolHookTriggers.js +12 -159
  100. package/dist/src/core/coreToolHookTriggers.js.map +1 -1
  101. package/dist/src/core/coreToolHookTriggers.test.js +62 -94
  102. package/dist/src/core/coreToolHookTriggers.test.js.map +1 -1
  103. package/dist/src/core/coreToolScheduler.js +3 -5
  104. package/dist/src/core/coreToolScheduler.js.map +1 -1
  105. package/dist/src/core/coreToolScheduler.test.js +3 -0
  106. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  107. package/dist/src/core/fakeContentGenerator.d.ts +1 -0
  108. package/dist/src/core/fakeContentGenerator.js +1 -0
  109. package/dist/src/core/fakeContentGenerator.js.map +1 -1
  110. package/dist/src/core/geminiChat.js +1 -0
  111. package/dist/src/core/geminiChat.js.map +1 -1
  112. package/dist/src/core/geminiChat.test.js +21 -0
  113. package/dist/src/core/geminiChat.test.js.map +1 -1
  114. package/dist/src/core/geminiChat_network_retry.test.js +17 -12
  115. package/dist/src/core/geminiChat_network_retry.test.js.map +1 -1
  116. package/dist/src/core/loggingContentGenerator.d.ts +3 -0
  117. package/dist/src/core/loggingContentGenerator.js +6 -0
  118. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  119. package/dist/src/core/loggingContentGenerator.test.js +11 -0
  120. package/dist/src/core/loggingContentGenerator.test.js.map +1 -1
  121. package/dist/src/core/prompts-substitution.test.js +101 -0
  122. package/dist/src/core/prompts-substitution.test.js.map +1 -0
  123. package/dist/src/core/prompts.js +115 -31
  124. package/dist/src/core/prompts.js.map +1 -1
  125. package/dist/src/core/prompts.test.js +32 -0
  126. package/dist/src/core/prompts.test.js.map +1 -1
  127. package/dist/src/core/recordingContentGenerator.d.ts +2 -1
  128. package/dist/src/core/recordingContentGenerator.js +6 -1
  129. package/dist/src/core/recordingContentGenerator.js.map +1 -1
  130. package/dist/src/core/turn.d.ts +2 -0
  131. package/dist/src/core/turn.js.map +1 -1
  132. package/dist/src/generated/git-commit.d.ts +2 -2
  133. package/dist/src/generated/git-commit.js +2 -2
  134. package/dist/src/generated/git-commit.js.map +1 -1
  135. package/dist/src/hooks/hookAggregator.js +13 -3
  136. package/dist/src/hooks/hookAggregator.js.map +1 -1
  137. package/dist/src/hooks/hookEventHandler.d.ts +1 -13
  138. package/dist/src/hooks/hookEventHandler.js +1 -289
  139. package/dist/src/hooks/hookEventHandler.js.map +1 -1
  140. package/dist/src/hooks/hookEventHandler.test.js +1 -4
  141. package/dist/src/hooks/hookEventHandler.test.js.map +1 -1
  142. package/dist/src/hooks/hookSystem.d.ts +47 -3
  143. package/dist/src/hooks/hookSystem.js +90 -6
  144. package/dist/src/hooks/hookSystem.js.map +1 -1
  145. package/dist/src/hooks/hookSystem.test.js +19 -8
  146. package/dist/src/hooks/hookSystem.test.js.map +1 -1
  147. package/dist/src/hooks/types.d.ts +23 -1
  148. package/dist/src/hooks/types.js +28 -2
  149. package/dist/src/hooks/types.js.map +1 -1
  150. package/dist/src/hooks/types.test.js +9 -1
  151. package/dist/src/hooks/types.test.js.map +1 -1
  152. package/dist/src/ide/detect-ide.d.ts +41 -0
  153. package/dist/src/ide/detect-ide.js +47 -3
  154. package/dist/src/ide/detect-ide.js.map +1 -1
  155. package/dist/src/ide/detect-ide.test.js +46 -0
  156. package/dist/src/ide/detect-ide.test.js.map +1 -1
  157. package/dist/src/ide/ide-client.d.ts +1 -0
  158. package/dist/src/ide/ide-client.js +36 -9
  159. package/dist/src/ide/ide-client.js.map +1 -1
  160. package/dist/src/ide/ide-client.test.js +154 -6
  161. package/dist/src/ide/ide-client.test.js.map +1 -1
  162. package/dist/src/index.d.ts +2 -0
  163. package/dist/src/index.js +2 -0
  164. package/dist/src/index.js.map +1 -1
  165. package/dist/src/mcp/oauth-provider.d.ts +1 -2
  166. package/dist/src/mcp/oauth-provider.js +4 -8
  167. package/dist/src/mcp/oauth-provider.js.map +1 -1
  168. package/dist/src/mcp/oauth-provider.test.js +32 -0
  169. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  170. package/dist/src/mcp/oauth-utils.d.ts +13 -4
  171. package/dist/src/mcp/oauth-utils.js +23 -19
  172. package/dist/src/mcp/oauth-utils.js.map +1 -1
  173. package/dist/src/mcp/oauth-utils.test.js +13 -8
  174. package/dist/src/mcp/oauth-utils.test.js.map +1 -1
  175. package/dist/src/policy/policy-engine.d.ts +1 -8
  176. package/dist/src/policy/policy-engine.js +1 -75
  177. package/dist/src/policy/policy-engine.js.map +1 -1
  178. package/dist/src/policy/policy-engine.test.js +0 -222
  179. package/dist/src/policy/policy-engine.test.js.map +1 -1
  180. package/dist/src/routing/modelRouterService.js +18 -8
  181. package/dist/src/routing/modelRouterService.js.map +1 -1
  182. package/dist/src/routing/modelRouterService.test.js +14 -6
  183. package/dist/src/routing/modelRouterService.test.js.map +1 -1
  184. package/dist/src/routing/strategies/classifierStrategy.js +4 -7
  185. package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
  186. package/dist/src/routing/strategies/classifierStrategy.test.js +10 -4
  187. package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
  188. package/dist/src/routing/strategies/numericalClassifierStrategy.d.ts +13 -0
  189. package/dist/src/routing/strategies/numericalClassifierStrategy.js +178 -0
  190. package/dist/src/routing/strategies/numericalClassifierStrategy.js.map +1 -0
  191. package/dist/src/routing/strategies/numericalClassifierStrategy.test.js +347 -0
  192. package/dist/src/routing/strategies/numericalClassifierStrategy.test.js.map +1 -0
  193. package/dist/src/scheduler/confirmation.js +2 -3
  194. package/dist/src/scheduler/confirmation.js.map +1 -1
  195. package/dist/src/scheduler/confirmation.test.js +8 -8
  196. package/dist/src/scheduler/confirmation.test.js.map +1 -1
  197. package/dist/src/scheduler/scheduler.test.js +0 -3
  198. package/dist/src/scheduler/scheduler.test.js.map +1 -1
  199. package/dist/src/scheduler/state-manager.js +4 -0
  200. package/dist/src/scheduler/state-manager.js.map +1 -1
  201. package/dist/src/scheduler/state-manager.test.js +11 -0
  202. package/dist/src/scheduler/state-manager.test.js.map +1 -1
  203. package/dist/src/scheduler/tool-executor.js +2 -4
  204. package/dist/src/scheduler/tool-executor.js.map +1 -1
  205. package/dist/src/scheduler/tool-executor.test.js +1 -1
  206. package/dist/src/scheduler/tool-executor.test.js.map +1 -1
  207. package/dist/src/services/chatRecordingService.d.ts +1 -1
  208. package/dist/src/services/chatRecordingService.js +23 -1
  209. package/dist/src/services/chatRecordingService.js.map +1 -1
  210. package/dist/src/services/chatRecordingService.test.js +111 -0
  211. package/dist/src/services/chatRecordingService.test.js.map +1 -1
  212. package/dist/src/services/sessionSummaryService.test.js +1 -1
  213. package/dist/src/services/sessionSummaryService.test.js.map +1 -1
  214. package/dist/src/telemetry/metrics.js +15 -4
  215. package/dist/src/telemetry/metrics.js.map +1 -1
  216. package/dist/src/telemetry/metrics.test.js +7 -0
  217. package/dist/src/telemetry/metrics.test.js.map +1 -1
  218. package/dist/src/telemetry/types.d.ts +3 -1
  219. package/dist/src/telemetry/types.js +19 -4
  220. package/dist/src/telemetry/types.js.map +1 -1
  221. package/dist/src/test-utils/mock-message-bus.d.ts +1 -19
  222. package/dist/src/test-utils/mock-message-bus.js +1 -65
  223. package/dist/src/test-utils/mock-message-bus.js.map +1 -1
  224. package/dist/src/tools/ask-user.d.ts +20 -0
  225. package/dist/src/tools/ask-user.js +142 -0
  226. package/dist/src/tools/ask-user.js.map +1 -0
  227. package/dist/src/{core/geminiChatHookTriggers.test.d.ts → tools/ask-user.test.d.ts} +1 -1
  228. package/dist/src/tools/ask-user.test.js +187 -0
  229. package/dist/src/tools/ask-user.test.js.map +1 -0
  230. package/dist/src/tools/confirmation-policy.test.js +1 -1
  231. package/dist/src/tools/confirmation-policy.test.js.map +1 -1
  232. package/dist/src/tools/diffOptions.d.ts +1 -1
  233. package/dist/src/tools/diffOptions.js +7 -3
  234. package/dist/src/tools/diffOptions.js.map +1 -1
  235. package/dist/src/tools/diffOptions.test.js +17 -0
  236. package/dist/src/tools/diffOptions.test.js.map +1 -1
  237. package/dist/src/tools/edit.js +1 -1
  238. package/dist/src/tools/edit.js.map +1 -1
  239. package/dist/src/tools/edit.test.js +11 -3
  240. package/dist/src/tools/edit.test.js.map +1 -1
  241. package/dist/src/tools/mcp-client-manager.d.ts +13 -4
  242. package/dist/src/tools/mcp-client-manager.js +53 -21
  243. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  244. package/dist/src/tools/mcp-client-manager.test.js +1 -0
  245. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  246. package/dist/src/tools/mcp-client.test.js +1 -2
  247. package/dist/src/tools/mcp-client.test.js.map +1 -1
  248. package/dist/src/tools/modifiable-tool.test.js +3 -3
  249. package/dist/src/tools/modifiable-tool.test.js.map +1 -1
  250. package/dist/src/tools/read-many-files.js +3 -2
  251. package/dist/src/tools/read-many-files.js.map +1 -1
  252. package/dist/src/tools/ripGrep.js +7 -2
  253. package/dist/src/tools/ripGrep.js.map +1 -1
  254. package/dist/src/tools/ripGrep.test.js +2 -2
  255. package/dist/src/tools/ripGrep.test.js.map +1 -1
  256. package/dist/src/tools/tool-names.d.ts +8 -2
  257. package/dist/src/tools/tool-names.js +14 -2
  258. package/dist/src/tools/tool-names.js.map +1 -1
  259. package/dist/src/tools/tools.d.ts +1 -0
  260. package/dist/src/tools/tools.js +2 -1
  261. package/dist/src/tools/tools.js.map +1 -1
  262. package/dist/src/tools/write-file.test.js +7 -7
  263. package/dist/src/tools/write-file.test.js.map +1 -1
  264. package/dist/src/utils/constants.d.ts +7 -0
  265. package/dist/src/utils/constants.js +8 -0
  266. package/dist/src/utils/constants.js.map +1 -0
  267. package/dist/src/utils/editCorrector.js +1 -1
  268. package/dist/src/utils/editCorrector.js.map +1 -1
  269. package/dist/src/utils/editor.js +4 -1
  270. package/dist/src/utils/editor.js.map +1 -1
  271. package/dist/src/utils/editor.test.js +6 -4
  272. package/dist/src/utils/editor.test.js.map +1 -1
  273. package/dist/src/utils/events.d.ts +2 -0
  274. package/dist/src/utils/events.js +1 -0
  275. package/dist/src/utils/events.js.map +1 -1
  276. package/dist/src/utils/extensionLoader.js +1 -0
  277. package/dist/src/utils/extensionLoader.js.map +1 -1
  278. package/dist/src/utils/extensionLoader.test.js +11 -0
  279. package/dist/src/utils/extensionLoader.test.js.map +1 -1
  280. package/dist/src/utils/googleQuotaErrors.d.ts +3 -3
  281. package/dist/src/utils/googleQuotaErrors.js +6 -17
  282. package/dist/src/utils/googleQuotaErrors.js.map +1 -1
  283. package/dist/src/utils/googleQuotaErrors.test.js +4 -22
  284. package/dist/src/utils/googleQuotaErrors.test.js.map +1 -1
  285. package/dist/src/utils/llm-edit-fixer.js +4 -7
  286. package/dist/src/utils/llm-edit-fixer.js.map +1 -1
  287. package/dist/src/utils/llm-edit-fixer.test.js +2 -2
  288. package/dist/src/utils/llm-edit-fixer.test.js.map +1 -1
  289. package/dist/src/utils/memoryImportProcessor.js +7 -24
  290. package/dist/src/utils/memoryImportProcessor.js.map +1 -1
  291. package/dist/src/utils/promptIdContext.d.ts +6 -0
  292. package/dist/src/utils/promptIdContext.js +15 -0
  293. package/dist/src/utils/promptIdContext.js.map +1 -1
  294. package/dist/src/utils/schemaValidator.d.ts +6 -0
  295. package/dist/src/utils/schemaValidator.js +12 -1
  296. package/dist/src/utils/schemaValidator.js.map +1 -1
  297. package/dist/src/utils/workspaceContext.d.ts +15 -0
  298. package/dist/src/utils/workspaceContext.js +32 -11
  299. package/dist/src/utils/workspaceContext.js.map +1 -1
  300. package/dist/src/utils/workspaceContext.test.js +55 -0
  301. package/dist/src/utils/workspaceContext.test.js.map +1 -1
  302. package/dist/tsconfig.tsbuildinfo +1 -1
  303. package/package.json +2 -3
  304. package/dist/docs/changelogs/releases.md +0 -1543
  305. package/dist/google-gemini-cli-core-0.26.0-preview.3.tgz +0 -0
  306. package/dist/src/agents/delegate-to-agent-tool.d.ts +0 -19
  307. package/dist/src/agents/delegate-to-agent-tool.js +0 -178
  308. package/dist/src/agents/delegate-to-agent-tool.js.map +0 -1
  309. package/dist/src/agents/delegate-to-agent-tool.test.js +0 -213
  310. package/dist/src/agents/delegate-to-agent-tool.test.js.map +0 -1
  311. package/dist/src/agents/schema-utils.d.ts +0 -39
  312. package/dist/src/agents/schema-utils.js +0 -57
  313. package/dist/src/agents/schema-utils.js.map +0 -1
  314. package/dist/src/agents/schema-utils.test.js +0 -144
  315. package/dist/src/agents/schema-utils.test.js.map +0 -1
  316. package/dist/src/core/clientHookTriggers.d.ts +0 -36
  317. package/dist/src/core/clientHookTriggers.js +0 -76
  318. package/dist/src/core/clientHookTriggers.js.map +0 -1
  319. package/dist/src/core/geminiChatHookTriggers.d.ts +0 -68
  320. package/dist/src/core/geminiChatHookTriggers.js +0 -158
  321. package/dist/src/core/geminiChatHookTriggers.js.map +0 -1
  322. package/dist/src/core/geminiChatHookTriggers.test.js +0 -153
  323. package/dist/src/core/geminiChatHookTriggers.test.js.map +0 -1
  324. /package/dist/src/{agents/delegate-to-agent-tool.test.d.ts → core/prompts-substitution.test.d.ts} +0 -0
  325. /package/dist/src/{agents/schema-utils.test.d.ts → routing/strategies/numericalClassifierStrategy.test.d.ts} +0 -0
@@ -1,19 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { BaseDeclarativeTool, type ToolInvocation, type ToolResult } from '../tools/tools.js';
7
- import type { AgentRegistry } from './registry.js';
8
- import type { Config } from '../config/config.js';
9
- import type { MessageBus } from '../confirmation-bus/message-bus.js';
10
- export type DelegateParams = {
11
- agent_name: string;
12
- } & Record<string, unknown>;
13
- export declare class DelegateToAgentTool extends BaseDeclarativeTool<DelegateParams, ToolResult> {
14
- private readonly registry;
15
- private readonly config;
16
- constructor(registry: AgentRegistry, config: Config, messageBus: MessageBus);
17
- validateToolParams(_params: DelegateParams): string | null;
18
- protected createInvocation(params: DelegateParams, messageBus: MessageBus, _toolName?: string, _toolDisplayName?: string): ToolInvocation<DelegateParams, ToolResult>;
19
- }
@@ -1,178 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { z } from 'zod';
7
- import { zodToJsonSchema } from 'zod-to-json-schema';
8
- import { BaseDeclarativeTool, Kind, BaseToolInvocation, } from '../tools/tools.js';
9
- import { DELEGATE_TO_AGENT_TOOL_NAME } from '../tools/tool-names.js';
10
- import { SubagentToolWrapper } from './subagent-tool-wrapper.js';
11
- export class DelegateToAgentTool extends BaseDeclarativeTool {
12
- registry;
13
- config;
14
- constructor(registry, config, messageBus) {
15
- const definitions = registry.getAllDefinitions();
16
- let schema;
17
- if (definitions.length === 0) {
18
- // Fallback if no agents are registered (mostly for testing/safety)
19
- schema = z.object({
20
- agent_name: z.string().describe('No agents are currently available.'),
21
- });
22
- }
23
- else {
24
- const agentSchemas = definitions.map((def) => {
25
- const inputShape = {
26
- agent_name: z.literal(def.name).describe(def.description),
27
- };
28
- for (const [key, inputDef] of Object.entries(def.inputConfig.inputs)) {
29
- if (key === 'agent_name') {
30
- throw new Error(`Agent '${def.name}' cannot have an input parameter named 'agent_name' as it is a reserved parameter for delegation.`);
31
- }
32
- let validator;
33
- // Map input types to Zod
34
- switch (inputDef.type) {
35
- case 'string':
36
- validator = z.string();
37
- break;
38
- case 'number':
39
- validator = z.number();
40
- break;
41
- case 'boolean':
42
- validator = z.boolean();
43
- break;
44
- case 'integer':
45
- validator = z.number().int();
46
- break;
47
- case 'string[]':
48
- validator = z.array(z.string());
49
- break;
50
- case 'number[]':
51
- validator = z.array(z.number());
52
- break;
53
- default: {
54
- // This provides compile-time exhaustiveness checking.
55
- const _exhaustiveCheck = inputDef.type;
56
- void _exhaustiveCheck;
57
- throw new Error(`Unhandled agent input type: '${inputDef.type}'`);
58
- }
59
- }
60
- if (!inputDef.required) {
61
- validator = validator.optional();
62
- }
63
- inputShape[key] = validator.describe(inputDef.description);
64
- }
65
- // Cast required because Zod can't infer the discriminator from dynamic keys
66
- return z.object(inputShape);
67
- });
68
- // Create the discriminated union
69
- // z.discriminatedUnion requires at least 2 options, so we handle the single agent case
70
- if (agentSchemas.length === 1) {
71
- schema = agentSchemas[0];
72
- }
73
- else {
74
- schema = z.discriminatedUnion('agent_name', agentSchemas);
75
- }
76
- }
77
- super(DELEGATE_TO_AGENT_TOOL_NAME, 'Delegate to Agent', registry.getToolDescription(), Kind.Think, zodToJsonSchema(schema), messageBus,
78
- /* isOutputMarkdown */ true,
79
- /* canUpdateOutput */ true);
80
- this.registry = registry;
81
- this.config = config;
82
- }
83
- validateToolParams(_params) {
84
- // We override the default schema validation because the generic JSON schema validation
85
- // produces poor error messages for discriminated unions (anyOf).
86
- // Instead, we perform detailed, agent-specific validation in the `execute` method
87
- // to provide rich error messages that help the LLM self-heal.
88
- return null;
89
- }
90
- createInvocation(params, messageBus, _toolName, _toolDisplayName) {
91
- return new DelegateInvocation(params, this.registry, this.config, messageBus, _toolName, _toolDisplayName);
92
- }
93
- }
94
- class DelegateInvocation extends BaseToolInvocation {
95
- registry;
96
- config;
97
- constructor(params, registry, config, messageBus, _toolName, _toolDisplayName) {
98
- super(params, messageBus, _toolName ?? DELEGATE_TO_AGENT_TOOL_NAME, _toolDisplayName);
99
- this.registry = registry;
100
- this.config = config;
101
- }
102
- getDescription() {
103
- return `Delegating to agent '${this.params.agent_name}'`;
104
- }
105
- async shouldConfirmExecute(abortSignal) {
106
- const definition = this.registry.getDefinition(this.params.agent_name);
107
- if (!definition || definition.kind !== 'remote') {
108
- // Local agents should execute without confirmation. Inner tool calls will bubble up their own confirmations to the user.
109
- return false;
110
- }
111
- const { agent_name: _agent_name, ...agentArgs } = this.params;
112
- const invocation = this.buildSubInvocation(definition, agentArgs);
113
- return invocation.shouldConfirmExecute(abortSignal);
114
- }
115
- async execute(signal, updateOutput) {
116
- const definition = this.registry.getDefinition(this.params.agent_name);
117
- if (!definition) {
118
- const availableAgents = this.registry
119
- .getAllDefinitions()
120
- .map((def) => `'${def.name}' (${def.description})`)
121
- .join(', ');
122
- throw new Error(`Agent '${this.params.agent_name}' not found. Available agents are: ${availableAgents}. Please choose a valid agent_name.`);
123
- }
124
- const { agent_name: _agent_name, ...agentArgs } = this.params;
125
- // Validate specific agent arguments here using Zod to generate helpful error messages.
126
- const inputShape = {};
127
- for (const [key, inputDef] of Object.entries(definition.inputConfig.inputs)) {
128
- let validator;
129
- switch (inputDef.type) {
130
- case 'string':
131
- validator = z.string();
132
- break;
133
- case 'number':
134
- validator = z.number();
135
- break;
136
- case 'boolean':
137
- validator = z.boolean();
138
- break;
139
- case 'integer':
140
- validator = z.number().int();
141
- break;
142
- case 'string[]':
143
- validator = z.array(z.string());
144
- break;
145
- case 'number[]':
146
- validator = z.array(z.number());
147
- break;
148
- default:
149
- validator = z.unknown();
150
- }
151
- if (!inputDef.required) {
152
- validator = validator.optional();
153
- }
154
- inputShape[key] = validator.describe(inputDef.description);
155
- }
156
- const agentSchema = z.object(inputShape);
157
- try {
158
- agentSchema.parse(agentArgs);
159
- }
160
- catch (e) {
161
- if (e instanceof z.ZodError) {
162
- const errorMessages = e.errors.map((err) => `${err.path.join('.')}: ${err.message}`);
163
- const expectedInputs = Object.entries(definition.inputConfig.inputs)
164
- .map(([key, input]) => `'${key}' (${input.required ? 'required' : 'optional'} ${input.type})`)
165
- .join(', ');
166
- throw new Error(`${errorMessages.join(', ')}. Expected inputs: ${expectedInputs}.`);
167
- }
168
- throw e;
169
- }
170
- const invocation = this.buildSubInvocation(definition, agentArgs);
171
- return invocation.execute(signal, updateOutput);
172
- }
173
- buildSubInvocation(definition, agentArgs) {
174
- const wrapper = new SubagentToolWrapper(definition, this.config, this.messageBus);
175
- return wrapper.build(agentArgs);
176
- }
177
- }
178
- //# sourceMappingURL=delegate-to-agent-tool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delegate-to-agent-tool.js","sourceRoot":"","sources":["../../../src/agents/delegate-to-agent-tool.ts"],"names":[],"mappings":"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"}
@@ -1,213 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { describe, it, expect, vi, beforeEach } from 'vitest';
7
- import { DelegateToAgentTool, } from './delegate-to-agent-tool.js';
8
- import { AgentRegistry } from './registry.js';
9
- import { LocalSubagentInvocation } from './local-invocation.js';
10
- import { MessageBusType } from '../confirmation-bus/types.js';
11
- import { DELEGATE_TO_AGENT_TOOL_NAME } from '../tools/tool-names.js';
12
- import { RemoteAgentInvocation } from './remote-invocation.js';
13
- import { createMockMessageBus } from '../test-utils/mock-message-bus.js';
14
- vi.mock('./local-invocation.js', () => ({
15
- LocalSubagentInvocation: vi.fn().mockImplementation(() => ({
16
- execute: vi
17
- .fn()
18
- .mockResolvedValue({ content: [{ type: 'text', text: 'Success' }] }),
19
- shouldConfirmExecute: vi.fn().mockResolvedValue(false),
20
- })),
21
- }));
22
- vi.mock('./remote-invocation.js', () => ({
23
- RemoteAgentInvocation: vi.fn().mockImplementation(() => ({
24
- execute: vi.fn().mockResolvedValue({
25
- content: [{ type: 'text', text: 'Remote Success' }],
26
- }),
27
- shouldConfirmExecute: vi.fn().mockResolvedValue({
28
- type: 'info',
29
- title: 'Remote Confirmation',
30
- prompt: 'Confirm remote call',
31
- onConfirm: vi.fn(),
32
- }),
33
- })),
34
- }));
35
- describe('DelegateToAgentTool', () => {
36
- let registry;
37
- let config;
38
- let tool;
39
- let messageBus;
40
- const mockAgentDef = {
41
- kind: 'local',
42
- name: 'test_agent',
43
- description: 'A test agent',
44
- promptConfig: {},
45
- modelConfig: {
46
- model: 'test-model',
47
- generateContentConfig: {
48
- temperature: 0,
49
- topP: 0,
50
- },
51
- },
52
- inputConfig: {
53
- inputs: {
54
- arg1: { type: 'string', description: 'Argument 1', required: true },
55
- arg2: { type: 'number', description: 'Argument 2', required: false },
56
- },
57
- },
58
- runConfig: { maxTurns: 1, maxTimeMinutes: 1 },
59
- toolConfig: { tools: [] },
60
- };
61
- const mockRemoteAgentDef = {
62
- kind: 'remote',
63
- name: 'remote_agent',
64
- description: 'A remote agent',
65
- agentCardUrl: 'https://example.com/agent.json',
66
- inputConfig: {
67
- inputs: {
68
- query: { type: 'string', description: 'Query', required: true },
69
- },
70
- },
71
- };
72
- beforeEach(() => {
73
- config = {
74
- getDebugMode: () => false,
75
- getActiveModel: () => 'test-model',
76
- modelConfigService: {
77
- registerRuntimeModelConfig: vi.fn(),
78
- },
79
- };
80
- registry = new AgentRegistry(config);
81
- // Manually register the mock agent (bypassing protected method for testing)
82
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
- registry.agents.set(mockAgentDef.name, mockAgentDef);
84
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
85
- registry.agents.set(mockRemoteAgentDef.name, mockRemoteAgentDef);
86
- messageBus = createMockMessageBus();
87
- tool = new DelegateToAgentTool(registry, config, messageBus);
88
- });
89
- it('should use dynamic description from registry', () => {
90
- // registry has mockAgentDef registered in beforeEach
91
- expect(tool.description).toContain('Delegates a task to a specialized sub-agent');
92
- expect(tool.description).toContain(`- **${mockAgentDef.name}**: ${mockAgentDef.description}`);
93
- });
94
- it('should throw helpful error when agent_name does not exist', async () => {
95
- // We allow validation to pass now, checking happens in execute.
96
- const invocation = tool.build({
97
- agent_name: 'non_existent_agent',
98
- });
99
- await expect(() => invocation.execute(new AbortController().signal)).rejects.toThrow("Agent 'non_existent_agent' not found. Available agents are: 'test_agent' (A test agent), 'remote_agent' (A remote agent). Please choose a valid agent_name.");
100
- });
101
- it('should validate correct arguments', async () => {
102
- const invocation = tool.build({
103
- agent_name: 'test_agent',
104
- arg1: 'valid',
105
- });
106
- const result = await invocation.execute(new AbortController().signal);
107
- expect(result).toEqual({ content: [{ type: 'text', text: 'Success' }] });
108
- expect(LocalSubagentInvocation).toHaveBeenCalledWith(mockAgentDef, config, { arg1: 'valid' }, messageBus, mockAgentDef.name, mockAgentDef.name);
109
- });
110
- it('should throw helpful error for missing required argument', async () => {
111
- const invocation = tool.build({
112
- agent_name: 'test_agent',
113
- arg2: 123,
114
- });
115
- await expect(() => invocation.execute(new AbortController().signal)).rejects.toThrow("arg1: Required. Expected inputs: 'arg1' (required string), 'arg2' (optional number).");
116
- });
117
- it('should throw helpful error for invalid argument type', async () => {
118
- const invocation = tool.build({
119
- agent_name: 'test_agent',
120
- arg1: 123,
121
- });
122
- await expect(() => invocation.execute(new AbortController().signal)).rejects.toThrow("arg1: Expected string, received number. Expected inputs: 'arg1' (required string), 'arg2' (optional number).");
123
- });
124
- it('should allow optional arguments to be omitted', async () => {
125
- const invocation = tool.build({
126
- agent_name: 'test_agent',
127
- arg1: 'valid',
128
- // arg2 is optional
129
- });
130
- await expect(invocation.execute(new AbortController().signal)).resolves.toBeDefined();
131
- });
132
- it('should throw error if an agent has an input named "agent_name"', () => {
133
- const invalidAgentDef = {
134
- ...mockAgentDef,
135
- name: 'invalid_agent',
136
- inputConfig: {
137
- inputs: {
138
- agent_name: {
139
- type: 'string',
140
- description: 'Conflict',
141
- required: true,
142
- },
143
- },
144
- },
145
- };
146
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
147
- registry.agents.set(invalidAgentDef.name, invalidAgentDef);
148
- expect(() => new DelegateToAgentTool(registry, config, messageBus)).toThrow("Agent 'invalid_agent' cannot have an input parameter named 'agent_name' as it is a reserved parameter for delegation.");
149
- });
150
- it('should execute local agents silently without requesting confirmation', async () => {
151
- const invocation = tool.build({
152
- agent_name: 'test_agent',
153
- arg1: 'valid',
154
- });
155
- // Trigger confirmation check
156
- const result = await invocation.shouldConfirmExecute(new AbortController().signal);
157
- expect(result).toBe(false);
158
- // Verify it did NOT call messageBus.publish with 'delegate_to_agent'
159
- const delegateToAgentPublish = vi
160
- .mocked(messageBus.publish)
161
- .mock.calls.find((call) => call[0].type === MessageBusType.TOOL_CONFIRMATION_REQUEST &&
162
- call[0].toolCall.name === DELEGATE_TO_AGENT_TOOL_NAME);
163
- expect(delegateToAgentPublish).toBeUndefined();
164
- });
165
- it('should delegate to remote agent correctly', async () => {
166
- const invocation = tool.build({
167
- agent_name: 'remote_agent',
168
- query: 'hello remote',
169
- });
170
- const result = await invocation.execute(new AbortController().signal);
171
- expect(result).toEqual({
172
- content: [{ type: 'text', text: 'Remote Success' }],
173
- });
174
- expect(RemoteAgentInvocation).toHaveBeenCalledWith(mockRemoteAgentDef, { query: 'hello remote' }, messageBus, 'remote_agent', 'remote_agent');
175
- });
176
- describe('Confirmation', () => {
177
- it('should return false for local agents (silent execution)', async () => {
178
- const invocation = tool.build({
179
- agent_name: 'test_agent',
180
- arg1: 'valid',
181
- });
182
- // Local agents should now return false directly, bypassing policy check
183
- const result = await invocation.shouldConfirmExecute(new AbortController().signal);
184
- expect(result).toBe(false);
185
- const delegateToAgentPublish = vi
186
- .mocked(messageBus.publish)
187
- .mock.calls.find((call) => call[0].type === MessageBusType.TOOL_CONFIRMATION_REQUEST &&
188
- call[0].toolCall.name === DELEGATE_TO_AGENT_TOOL_NAME);
189
- expect(delegateToAgentPublish).toBeUndefined();
190
- });
191
- it('should forward to remote agent confirmation logic', async () => {
192
- const invocation = tool.build({
193
- agent_name: 'remote_agent',
194
- query: 'hello remote',
195
- });
196
- const result = await invocation.shouldConfirmExecute(new AbortController().signal);
197
- // Verify it returns the mock confirmation from RemoteAgentInvocation
198
- expect(result).toMatchObject({
199
- type: 'info',
200
- title: 'Remote Confirmation',
201
- });
202
- // Verify it did NOT call messageBus.publish with 'delegate_to_agent'
203
- // directly from DelegateInvocation, but instead went into RemoteAgentInvocation.
204
- // RemoteAgentInvocation (the mock) doesn't call publish in its mock implementation.
205
- const delegateToAgentPublish = vi
206
- .mocked(messageBus.publish)
207
- .mock.calls.find((call) => call[0].type === MessageBusType.TOOL_CONFIRMATION_REQUEST &&
208
- call[0].toolCall.name === DELEGATE_TO_AGENT_TOOL_NAME);
209
- expect(delegateToAgentPublish).toBeUndefined();
210
- });
211
- });
212
- });
213
- //# sourceMappingURL=delegate-to-agent-tool.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delegate-to-agent-tool.test.js","sourceRoot":"","sources":["../../../src/agents/delegate-to-agent-tool.test.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import type { InputConfig } from './types.js';
7
- /**
8
- * Defines the structure for a JSON Schema object, used for tool function
9
- * declarations.
10
- */
11
- interface JsonSchemaObject {
12
- type: 'object';
13
- properties: Record<string, JsonSchemaProperty>;
14
- required?: string[];
15
- }
16
- /**
17
- * Defines the structure for a property within a {@link JsonSchemaObject}.
18
- */
19
- interface JsonSchemaProperty {
20
- type: 'string' | 'number' | 'integer' | 'boolean' | 'array';
21
- description: string;
22
- items?: {
23
- type: 'string' | 'number';
24
- };
25
- }
26
- /**
27
- * Converts an internal `InputConfig` definition into a standard JSON Schema
28
- * object suitable for a tool's `FunctionDeclaration`.
29
- *
30
- * This utility ensures that the configuration for a subagent's inputs is
31
- * correctly translated into the format expected by the generative model.
32
- *
33
- * @param inputConfig The internal `InputConfig` to convert.
34
- * @returns A JSON Schema object representing the inputs.
35
- * @throws An `Error` if an unsupported input type is encountered, ensuring
36
- * configuration errors are caught early.
37
- */
38
- export declare function convertInputConfigToJsonSchema(inputConfig: InputConfig): JsonSchemaObject;
39
- export {};
@@ -1,57 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- /**
7
- * Converts an internal `InputConfig` definition into a standard JSON Schema
8
- * object suitable for a tool's `FunctionDeclaration`.
9
- *
10
- * This utility ensures that the configuration for a subagent's inputs is
11
- * correctly translated into the format expected by the generative model.
12
- *
13
- * @param inputConfig The internal `InputConfig` to convert.
14
- * @returns A JSON Schema object representing the inputs.
15
- * @throws An `Error` if an unsupported input type is encountered, ensuring
16
- * configuration errors are caught early.
17
- */
18
- export function convertInputConfigToJsonSchema(inputConfig) {
19
- const properties = {};
20
- const required = [];
21
- for (const [name, definition] of Object.entries(inputConfig.inputs)) {
22
- const schemaProperty = {
23
- description: definition.description,
24
- };
25
- switch (definition.type) {
26
- case 'string':
27
- case 'number':
28
- case 'integer':
29
- case 'boolean':
30
- schemaProperty.type = definition.type;
31
- break;
32
- case 'string[]':
33
- schemaProperty.type = 'array';
34
- schemaProperty.items = { type: 'string' };
35
- break;
36
- case 'number[]':
37
- schemaProperty.type = 'array';
38
- schemaProperty.items = { type: 'number' };
39
- break;
40
- default: {
41
- const exhaustiveCheck = definition.type;
42
- throw new Error(`Unsupported input type '${exhaustiveCheck}' for parameter '${name}'. ` +
43
- 'Supported types: string, number, integer, boolean, string[], number[]');
44
- }
45
- }
46
- properties[name] = schemaProperty;
47
- if (definition.required) {
48
- required.push(name);
49
- }
50
- }
51
- return {
52
- type: 'object',
53
- properties,
54
- required: required.length > 0 ? required : undefined,
55
- };
56
- }
57
- //# sourceMappingURL=schema-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema-utils.js","sourceRoot":"","sources":["../../../src/agents/schema-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAuBH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,8BAA8B,CAC5C,WAAwB;IAExB,MAAM,UAAU,GAAuC,EAAE,CAAC;IAC1D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACpE,MAAM,cAAc,GAAgC;YAClD,WAAW,EAAE,UAAU,CAAC,WAAW;SACpC,CAAC;QAEF,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;YACxB,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS,CAAC;YACf,KAAK,SAAS;gBACZ,cAAc,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;gBACtC,MAAM;YAER,KAAK,UAAU;gBACb,cAAc,CAAC,IAAI,GAAG,OAAO,CAAC;gBAC9B,cAAc,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;gBAC1C,MAAM;YAER,KAAK,UAAU;gBACb,cAAc,CAAC,IAAI,GAAG,OAAO,CAAC;gBAC9B,cAAc,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;gBAC1C,MAAM;YAER,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,eAAe,GAAU,UAAU,CAAC,IAAI,CAAC;gBAC/C,MAAM,IAAI,KAAK,CACb,2BAA2B,eAAe,oBAAoB,IAAI,KAAK;oBACrE,uEAAuE,CAC1E,CAAC;YACJ,CAAC;QACH,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,GAAG,cAAoC,CAAC;QAExD,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,UAAU;QACV,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;KACrD,CAAC;AACJ,CAAC"}