@google/gemini-cli-core 0.22.0-preview.3 → 0.23.0-preview.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. package/dist/docs/CONTRIBUTING.md +546 -0
  2. package/dist/docs/architecture.md +80 -0
  3. package/dist/docs/assets/connected_devtools.png +0 -0
  4. package/dist/docs/assets/gemini-screenshot.png +0 -0
  5. package/dist/docs/assets/release_patch.png +0 -0
  6. package/dist/docs/assets/theme-ansi-light.png +0 -0
  7. package/dist/docs/assets/theme-ansi.png +0 -0
  8. package/dist/docs/assets/theme-atom-one.png +0 -0
  9. package/dist/docs/assets/theme-ayu-light.png +0 -0
  10. package/dist/docs/assets/theme-ayu.png +0 -0
  11. package/dist/docs/assets/theme-custom.png +0 -0
  12. package/dist/docs/assets/theme-default-light.png +0 -0
  13. package/dist/docs/assets/theme-default.png +0 -0
  14. package/dist/docs/assets/theme-dracula.png +0 -0
  15. package/dist/docs/assets/theme-github-light.png +0 -0
  16. package/dist/docs/assets/theme-github.png +0 -0
  17. package/dist/docs/assets/theme-google-light.png +0 -0
  18. package/dist/docs/assets/theme-xcode-light.png +0 -0
  19. package/dist/docs/changelogs/index.md +592 -0
  20. package/dist/docs/changelogs/latest.md +225 -0
  21. package/dist/docs/changelogs/preview.md +129 -0
  22. package/dist/docs/changelogs/releases.md +896 -0
  23. package/dist/docs/cli/authentication.md +3 -0
  24. package/dist/docs/cli/checkpointing.md +94 -0
  25. package/dist/docs/cli/commands.md +354 -0
  26. package/dist/docs/cli/configuration.md +780 -0
  27. package/dist/docs/cli/custom-commands.md +315 -0
  28. package/dist/docs/cli/enterprise.md +565 -0
  29. package/dist/docs/cli/gemini-ignore.md +71 -0
  30. package/dist/docs/cli/gemini-md.md +108 -0
  31. package/dist/docs/cli/generation-settings.md +210 -0
  32. package/dist/docs/cli/headless.md +388 -0
  33. package/dist/docs/cli/index.md +63 -0
  34. package/dist/docs/cli/keyboard-shortcuts.md +143 -0
  35. package/dist/docs/cli/model-routing.md +37 -0
  36. package/dist/docs/cli/model.md +62 -0
  37. package/dist/docs/cli/sandbox.md +171 -0
  38. package/dist/docs/cli/session-management.md +158 -0
  39. package/dist/docs/cli/settings.md +112 -0
  40. package/dist/docs/cli/system-prompt.md +93 -0
  41. package/dist/docs/cli/telemetry.md +791 -0
  42. package/dist/docs/cli/themes.md +237 -0
  43. package/dist/docs/cli/token-caching.md +20 -0
  44. package/dist/docs/cli/trusted-folders.md +95 -0
  45. package/dist/docs/cli/tutorials.md +83 -0
  46. package/dist/docs/cli/uninstall.md +47 -0
  47. package/dist/docs/core/index.md +101 -0
  48. package/dist/docs/core/memport.md +244 -0
  49. package/dist/docs/core/policy-engine.md +267 -0
  50. package/dist/docs/core/tools-api.md +131 -0
  51. package/dist/docs/examples/proxy-script.md +83 -0
  52. package/dist/docs/extensions/extension-releasing.md +183 -0
  53. package/dist/docs/extensions/getting-started-extensions.md +245 -0
  54. package/dist/docs/extensions/index.md +293 -0
  55. package/dist/docs/faq.md +154 -0
  56. package/dist/docs/get-started/authentication.md +321 -0
  57. package/dist/docs/get-started/configuration-v1.md +888 -0
  58. package/dist/docs/get-started/configuration.md +1444 -0
  59. package/dist/docs/get-started/deployment.md +143 -0
  60. package/dist/docs/get-started/examples.md +219 -0
  61. package/dist/docs/get-started/gemini-3.md +116 -0
  62. package/dist/docs/get-started/index.md +71 -0
  63. package/dist/docs/get-started/installation.md +141 -0
  64. package/dist/docs/hooks/best-practices.md +806 -0
  65. package/dist/docs/hooks/index.md +665 -0
  66. package/dist/docs/hooks/reference.md +168 -0
  67. package/dist/docs/hooks/writing-hooks.md +1026 -0
  68. package/dist/docs/ide-integration/ide-companion-spec.md +267 -0
  69. package/dist/docs/ide-integration/index.md +202 -0
  70. package/dist/docs/index.md +147 -0
  71. package/dist/docs/integration-tests.md +211 -0
  72. package/dist/docs/issue-and-pr-automation.md +134 -0
  73. package/dist/docs/local-development.md +128 -0
  74. package/dist/docs/mermaid/context.mmd +103 -0
  75. package/dist/docs/mermaid/render-path.mmd +64 -0
  76. package/dist/docs/npm.md +62 -0
  77. package/dist/docs/quota-and-pricing.md +158 -0
  78. package/dist/docs/release-confidence.md +164 -0
  79. package/dist/docs/releases.md +540 -0
  80. package/dist/docs/sidebar.json +297 -0
  81. package/dist/docs/tools/file-system.md +217 -0
  82. package/dist/docs/tools/index.md +95 -0
  83. package/dist/docs/tools/mcp-server.md +1044 -0
  84. package/dist/docs/tools/memory.md +54 -0
  85. package/dist/docs/tools/shell.md +260 -0
  86. package/dist/docs/tools/todos.md +57 -0
  87. package/dist/docs/tools/web-fetch.md +59 -0
  88. package/dist/docs/tools/web-search.md +42 -0
  89. package/dist/docs/tos-privacy.md +96 -0
  90. package/dist/docs/troubleshooting.md +158 -0
  91. package/dist/src/agents/codebase-investigator.d.ts +2 -2
  92. package/dist/src/agents/codebase-investigator.js +4 -3
  93. package/dist/src/agents/codebase-investigator.js.map +1 -1
  94. package/dist/src/agents/delegate-to-agent-tool.js +8 -4
  95. package/dist/src/agents/delegate-to-agent-tool.js.map +1 -1
  96. package/dist/src/agents/delegate-to-agent-tool.test.js +6 -4
  97. package/dist/src/agents/delegate-to-agent-tool.test.js.map +1 -1
  98. package/dist/src/agents/introspection-agent.d.ts +23 -0
  99. package/dist/src/agents/introspection-agent.js +72 -0
  100. package/dist/src/agents/introspection-agent.js.map +1 -0
  101. package/dist/src/agents/introspection-agent.test.js +47 -0
  102. package/dist/src/agents/introspection-agent.test.js.map +1 -0
  103. package/dist/src/agents/{executor.d.ts → local-executor.d.ts} +5 -11
  104. package/dist/src/agents/{executor.js → local-executor.js} +79 -53
  105. package/dist/src/agents/local-executor.js.map +1 -0
  106. package/dist/src/agents/{executor.test.js → local-executor.test.js} +64 -45
  107. package/dist/src/agents/local-executor.test.js.map +1 -0
  108. package/dist/src/agents/{invocation.d.ts → local-invocation.d.ts} +5 -6
  109. package/dist/src/agents/{invocation.js → local-invocation.js} +8 -9
  110. package/dist/src/agents/local-invocation.js.map +1 -0
  111. package/dist/src/agents/local-invocation.test.d.ts +6 -0
  112. package/dist/src/agents/{invocation.test.js → local-invocation.test.js} +18 -17
  113. package/dist/src/agents/local-invocation.test.js.map +1 -0
  114. package/dist/src/agents/registry.d.ts +1 -0
  115. package/dist/src/agents/registry.js +68 -20
  116. package/dist/src/agents/registry.js.map +1 -1
  117. package/dist/src/agents/registry.test.js +113 -1
  118. package/dist/src/agents/registry.test.js.map +1 -1
  119. package/dist/src/agents/remote-invocation.d.ts +21 -0
  120. package/dist/src/agents/remote-invocation.js +31 -0
  121. package/dist/src/agents/remote-invocation.js.map +1 -0
  122. package/dist/src/agents/remote-invocation.test.d.ts +6 -0
  123. package/dist/src/agents/remote-invocation.test.js +35 -0
  124. package/dist/src/agents/remote-invocation.test.js.map +1 -0
  125. package/dist/src/agents/subagent-tool-wrapper.js +7 -3
  126. package/dist/src/agents/subagent-tool-wrapper.js.map +1 -1
  127. package/dist/src/agents/subagent-tool-wrapper.test.js +10 -9
  128. package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -1
  129. package/dist/src/agents/toml-loader.d.ts +65 -0
  130. package/dist/src/agents/toml-loader.js +176 -0
  131. package/dist/src/agents/toml-loader.js.map +1 -0
  132. package/dist/src/agents/toml-loader.test.d.ts +6 -0
  133. package/dist/src/agents/toml-loader.test.js +190 -0
  134. package/dist/src/agents/toml-loader.test.js.map +1 -0
  135. package/dist/src/agents/types.d.ts +12 -4
  136. package/dist/src/availability/modelAvailabilityService.d.ts +2 -1
  137. package/dist/src/availability/policyHelpers.d.ts +4 -3
  138. package/dist/src/availability/policyHelpers.js +13 -20
  139. package/dist/src/availability/policyHelpers.js.map +1 -1
  140. package/dist/src/availability/policyHelpers.test.js +28 -18
  141. package/dist/src/availability/policyHelpers.test.js.map +1 -1
  142. package/dist/src/code_assist/oauth2.js +1 -1
  143. package/dist/src/code_assist/oauth2.js.map +1 -1
  144. package/dist/src/code_assist/oauth2.test.js +6 -8
  145. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  146. package/dist/src/code_assist/server.d.ts +4 -1
  147. package/dist/src/code_assist/server.js +50 -7
  148. package/dist/src/code_assist/server.js.map +1 -1
  149. package/dist/src/code_assist/server.test.js +177 -27
  150. package/dist/src/code_assist/server.test.js.map +1 -1
  151. package/dist/src/code_assist/telemetry.d.ts +14 -0
  152. package/dist/src/code_assist/telemetry.js +156 -0
  153. package/dist/src/code_assist/telemetry.js.map +1 -0
  154. package/dist/src/code_assist/telemetry.test.d.ts +6 -0
  155. package/dist/src/code_assist/telemetry.test.js +300 -0
  156. package/dist/src/code_assist/telemetry.test.js.map +1 -0
  157. package/dist/src/code_assist/types.d.ts +52 -1
  158. package/dist/src/code_assist/types.js +21 -0
  159. package/dist/src/code_assist/types.js.map +1 -1
  160. package/dist/src/config/config.d.ts +10 -13
  161. package/dist/src/config/config.js +32 -32
  162. package/dist/src/config/config.js.map +1 -1
  163. package/dist/src/config/config.test.js +72 -19
  164. package/dist/src/config/config.test.js.map +1 -1
  165. package/dist/src/config/flashFallback.test.js +0 -37
  166. package/dist/src/config/flashFallback.test.js.map +1 -1
  167. package/dist/src/config/storage.d.ts +2 -0
  168. package/dist/src/config/storage.js +6 -0
  169. package/dist/src/config/storage.js.map +1 -1
  170. package/dist/src/config/storage.test.js +8 -0
  171. package/dist/src/config/storage.test.js.map +1 -1
  172. package/dist/src/core/baseLlmClient.js +44 -43
  173. package/dist/src/core/baseLlmClient.js.map +1 -1
  174. package/dist/src/core/baseLlmClient.test.js +12 -19
  175. package/dist/src/core/baseLlmClient.test.js.map +1 -1
  176. package/dist/src/core/client.js +23 -35
  177. package/dist/src/core/client.js.map +1 -1
  178. package/dist/src/core/client.test.js +32 -65
  179. package/dist/src/core/client.test.js.map +1 -1
  180. package/dist/src/core/clientHookTriggers.js +2 -2
  181. package/dist/src/core/clientHookTriggers.js.map +1 -1
  182. package/dist/src/core/contentGenerator.test.js +0 -6
  183. package/dist/src/core/contentGenerator.test.js.map +1 -1
  184. package/dist/src/core/coreToolHookTriggers.js +3 -3
  185. package/dist/src/core/coreToolHookTriggers.js.map +1 -1
  186. package/dist/src/core/geminiChat.js +21 -71
  187. package/dist/src/core/geminiChat.js.map +1 -1
  188. package/dist/src/core/geminiChat.test.js +16 -92
  189. package/dist/src/core/geminiChat.test.js.map +1 -1
  190. package/dist/src/core/geminiChatHookTriggers.js +3 -3
  191. package/dist/src/core/geminiChatHookTriggers.js.map +1 -1
  192. package/dist/src/core/geminiChat_network_retry.test.js +4 -6
  193. package/dist/src/core/geminiChat_network_retry.test.js.map +1 -1
  194. package/dist/src/core/prompts.test.js +0 -2
  195. package/dist/src/core/prompts.test.js.map +1 -1
  196. package/dist/src/core/sessionHookTriggers.js +3 -3
  197. package/dist/src/core/sessionHookTriggers.js.map +1 -1
  198. package/dist/src/core/turn.d.ts +1 -0
  199. package/dist/src/core/turn.js +4 -12
  200. package/dist/src/core/turn.js.map +1 -1
  201. package/dist/src/core/turn.test.js +0 -5
  202. package/dist/src/core/turn.test.js.map +1 -1
  203. package/dist/src/fallback/handler.test.js +0 -21
  204. package/dist/src/fallback/handler.test.js.map +1 -1
  205. package/dist/src/generated/git-commit.d.ts +2 -2
  206. package/dist/src/generated/git-commit.js +2 -2
  207. package/dist/src/hooks/hookEventHandler.js +10 -4
  208. package/dist/src/hooks/hookEventHandler.js.map +1 -1
  209. package/dist/src/hooks/hookEventHandler.test.js +47 -0
  210. package/dist/src/hooks/hookEventHandler.test.js.map +1 -1
  211. package/dist/src/hooks/hookPlanner.js +3 -1
  212. package/dist/src/hooks/hookPlanner.js.map +1 -1
  213. package/dist/src/hooks/hookPlanner.test.js +61 -0
  214. package/dist/src/hooks/hookPlanner.test.js.map +1 -1
  215. package/dist/src/hooks/hookRegistry.d.ts +1 -1
  216. package/dist/src/hooks/hookRegistry.js +2 -2
  217. package/dist/src/hooks/hookRegistry.js.map +1 -1
  218. package/dist/src/hooks/hookRegistry.test.js +73 -0
  219. package/dist/src/hooks/hookRegistry.test.js.map +1 -1
  220. package/dist/src/hooks/hookRunner.js +14 -10
  221. package/dist/src/hooks/hookRunner.js.map +1 -1
  222. package/dist/src/hooks/hookRunner.test.js +81 -33
  223. package/dist/src/hooks/hookRunner.test.js.map +1 -1
  224. package/dist/src/hooks/types.d.ts +2 -0
  225. package/dist/src/hooks/types.js.map +1 -1
  226. package/dist/src/index.d.ts +2 -0
  227. package/dist/src/index.js +2 -0
  228. package/dist/src/index.js.map +1 -1
  229. package/dist/src/mcp/oauth-provider.js +6 -2
  230. package/dist/src/mcp/oauth-provider.js.map +1 -1
  231. package/dist/src/mcp/oauth-provider.test.js +4 -1
  232. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  233. package/dist/src/mcp/oauth-utils.d.ts +8 -1
  234. package/dist/src/mcp/oauth-utils.js +30 -1
  235. package/dist/src/mcp/oauth-utils.js.map +1 -1
  236. package/dist/src/mcp/oauth-utils.test.js +42 -0
  237. package/dist/src/mcp/oauth-utils.test.js.map +1 -1
  238. package/dist/src/routing/strategies/fallbackStrategy.js +0 -3
  239. package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
  240. package/dist/src/routing/strategies/fallbackStrategy.test.js +0 -6
  241. package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
  242. package/dist/src/services/contextManager.d.ts +5 -11
  243. package/dist/src/services/contextManager.js +20 -17
  244. package/dist/src/services/contextManager.js.map +1 -1
  245. package/dist/src/services/contextManager.test.js +40 -41
  246. package/dist/src/services/contextManager.test.js.map +1 -1
  247. package/dist/src/services/loopDetectionService.js +2 -1
  248. package/dist/src/services/loopDetectionService.js.map +1 -1
  249. package/dist/src/services/loopDetectionService.test.js +14 -8
  250. package/dist/src/services/loopDetectionService.test.js.map +1 -1
  251. package/dist/src/services/modelConfig.integration.test.js +1 -1
  252. package/dist/src/services/modelConfig.integration.test.js.map +1 -1
  253. package/dist/src/services/shellExecutionService.js +18 -2
  254. package/dist/src/services/shellExecutionService.js.map +1 -1
  255. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +4 -2
  256. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +25 -0
  257. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  258. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +32 -1
  259. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  260. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +5 -1
  261. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +12 -1
  262. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  263. package/dist/src/telemetry/loggers.js +1 -0
  264. package/dist/src/telemetry/loggers.js.map +1 -1
  265. package/dist/src/telemetry/loggers.test.js +37 -2
  266. package/dist/src/telemetry/loggers.test.js.map +1 -1
  267. package/dist/src/telemetry/sdk.js +2 -2
  268. package/dist/src/telemetry/sdk.js.map +1 -1
  269. package/dist/src/tools/confirmation-policy.test.d.ts +6 -0
  270. package/dist/src/tools/confirmation-policy.test.js +152 -0
  271. package/dist/src/tools/confirmation-policy.test.js.map +1 -0
  272. package/dist/src/tools/edit.js +5 -1
  273. package/dist/src/tools/edit.js.map +1 -1
  274. package/dist/src/tools/get-internal-docs.d.ts +27 -0
  275. package/dist/src/tools/get-internal-docs.js +129 -0
  276. package/dist/src/tools/get-internal-docs.js.map +1 -0
  277. package/dist/src/tools/get-internal-docs.test.d.ts +6 -0
  278. package/dist/src/tools/get-internal-docs.test.js +56 -0
  279. package/dist/src/tools/get-internal-docs.test.js.map +1 -0
  280. package/dist/src/tools/ripGrep.d.ts +1 -0
  281. package/dist/src/tools/ripGrep.js +16 -4
  282. package/dist/src/tools/ripGrep.js.map +1 -1
  283. package/dist/src/tools/ripGrep.test.js +55 -0
  284. package/dist/src/tools/ripGrep.test.js.map +1 -1
  285. package/dist/src/tools/smart-edit.js +5 -1
  286. package/dist/src/tools/smart-edit.js.map +1 -1
  287. package/dist/src/tools/tool-names.d.ts +14 -0
  288. package/dist/src/tools/tool-names.js +55 -0
  289. package/dist/src/tools/tool-names.js.map +1 -1
  290. package/dist/src/tools/tool-names.test.d.ts +6 -0
  291. package/dist/src/tools/tool-names.test.js +43 -0
  292. package/dist/src/tools/tool-names.test.js.map +1 -0
  293. package/dist/src/tools/tool-registry.d.ts +0 -1
  294. package/dist/src/tools/tool-registry.js +1 -1
  295. package/dist/src/tools/tool-registry.js.map +1 -1
  296. package/dist/src/tools/tool-registry.test.js +2 -1
  297. package/dist/src/tools/tool-registry.test.js.map +1 -1
  298. package/dist/src/tools/web-fetch.js +5 -1
  299. package/dist/src/tools/web-fetch.js.map +1 -1
  300. package/dist/src/tools/write-file.js +5 -1
  301. package/dist/src/tools/write-file.js.map +1 -1
  302. package/dist/src/utils/checkpointUtils.js +1 -1
  303. package/dist/src/utils/checkpointUtils.js.map +1 -1
  304. package/dist/src/utils/checkpointUtils.test.js +1 -1
  305. package/dist/src/utils/checkpointUtils.test.js.map +1 -1
  306. package/dist/src/utils/editCorrector.js +1 -1
  307. package/dist/src/utils/editCorrector.js.map +1 -1
  308. package/dist/src/utils/editCorrector.test.js +2 -2
  309. package/dist/src/utils/editCorrector.test.js.map +1 -1
  310. package/dist/src/utils/environmentContext.d.ts +1 -0
  311. package/dist/src/utils/environmentContext.js +4 -0
  312. package/dist/src/utils/environmentContext.js.map +1 -1
  313. package/dist/src/utils/environmentContext.test.js +2 -0
  314. package/dist/src/utils/environmentContext.test.js.map +1 -1
  315. package/dist/src/utils/events.d.ts +3 -18
  316. package/dist/src/utils/events.js +0 -9
  317. package/dist/src/utils/events.js.map +1 -1
  318. package/dist/src/utils/geminiIgnoreParser.d.ts +11 -0
  319. package/dist/src/utils/geminiIgnoreParser.js +20 -0
  320. package/dist/src/utils/geminiIgnoreParser.js.map +1 -1
  321. package/dist/src/utils/geminiIgnoreParser.test.js +48 -0
  322. package/dist/src/utils/geminiIgnoreParser.test.js.map +1 -1
  323. package/dist/src/utils/generateContentResponseUtilities.d.ts +1 -0
  324. package/dist/src/utils/generateContentResponseUtilities.js +10 -0
  325. package/dist/src/utils/generateContentResponseUtilities.js.map +1 -1
  326. package/dist/src/utils/generateContentResponseUtilities.test.js +59 -2
  327. package/dist/src/utils/generateContentResponseUtilities.test.js.map +1 -1
  328. package/dist/src/utils/memoryDiscovery.js +1 -1
  329. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  330. package/dist/src/utils/memoryDiscovery.test.js +3 -1
  331. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  332. package/dist/src/utils/shell-utils.js +25 -4
  333. package/dist/src/utils/shell-utils.js.map +1 -1
  334. package/dist/tsconfig.tsbuildinfo +1 -1
  335. package/package.json +1 -6
  336. package/dist/google-gemini-cli-core-0.22.0-preview.2.tgz +0 -0
  337. package/dist/src/agents/executor.js.map +0 -1
  338. package/dist/src/agents/executor.test.js.map +0 -1
  339. package/dist/src/agents/invocation.js.map +0 -1
  340. package/dist/src/agents/invocation.test.js.map +0 -1
  341. /package/dist/src/agents/{executor.test.d.ts → introspection-agent.test.d.ts} +0 -0
  342. /package/dist/src/agents/{invocation.test.d.ts → local-executor.test.d.ts} +0 -0
@@ -5,7 +5,8 @@
5
5
  */
6
6
  import { BaseDeclarativeTool, Kind, } from '../tools/tools.js';
7
7
  import { convertInputConfigToJsonSchema } from './schema-utils.js';
8
- import { SubagentInvocation } from './invocation.js';
8
+ import { LocalSubagentInvocation } from './local-invocation.js';
9
+ import { RemoteAgentInvocation } from './remote-invocation.js';
9
10
  /**
10
11
  * A tool wrapper that dynamically exposes a subagent as a standard,
11
12
  * strongly-typed `DeclarativeTool`.
@@ -24,7 +25,6 @@ export class SubagentToolWrapper extends BaseDeclarativeTool {
24
25
  * @param messageBus Optional message bus for policy enforcement.
25
26
  */
26
27
  constructor(definition, config, messageBus) {
27
- // Dynamically generate the JSON schema required for the tool definition.
28
28
  const parameterSchema = convertInputConfigToJsonSchema(definition.inputConfig);
29
29
  super(definition.name, definition.displayName ?? definition.name, definition.description, Kind.Think, parameterSchema,
30
30
  /* isOutputMarkdown */ true,
@@ -42,7 +42,11 @@ export class SubagentToolWrapper extends BaseDeclarativeTool {
42
42
  * @returns A `ToolInvocation` instance ready for execution.
43
43
  */
44
44
  createInvocation(params) {
45
- return new SubagentInvocation(params, this.definition, this.config, this.messageBus);
45
+ const definition = this.definition;
46
+ if (definition.kind === 'remote') {
47
+ return new RemoteAgentInvocation(definition, params, this.messageBus);
48
+ }
49
+ return new LocalSubagentInvocation(definition, this.config, params, this.messageBus);
46
50
  }
47
51
  }
48
52
  //# sourceMappingURL=subagent-tool-wrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-tool-wrapper.js","sourceRoot":"","sources":["../../../src/agents/subagent-tool-wrapper.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,mBAAmB,EACnB,IAAI,GAGL,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,mBAGxC;IAYoB;IACA;IAZnB;;;;;;;;;OASG;IACH,YACmB,UAA2B,EAC3B,MAAc,EAC/B,UAAuB;QAEvB,yEAAyE;QACzE,MAAM,eAAe,GAAG,8BAA8B,CACpD,UAAU,CAAC,WAAW,CACvB,CAAC;QAEF,KAAK,CACH,UAAU,CAAC,IAAI,EACf,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,IAAI,EACzC,UAAU,CAAC,WAAW,EACtB,IAAI,CAAC,KAAK,EACV,eAAe;QACf,sBAAsB,CAAC,IAAI;QAC3B,qBAAqB,CAAC,IAAI,EAC1B,UAAU,CACX,CAAC;QAlBe,eAAU,GAAV,UAAU,CAAiB;QAC3B,WAAM,GAAN,MAAM,CAAQ;IAkBjC,CAAC;IAED;;;;;;;;OAQG;IACO,gBAAgB,CACxB,MAAmB;QAEnB,OAAO,IAAI,kBAAkB,CAC3B,MAAM,EACN,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAU,CAChB,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"subagent-tool-wrapper.js","sourceRoot":"","sources":["../../../src/agents/subagent-tool-wrapper.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,mBAAmB,EACnB,IAAI,GAGL,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAG/D;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,mBAGxC;IAYoB;IACA;IAZnB;;;;;;;;;OASG;IACH,YACmB,UAA2B,EAC3B,MAAc,EAC/B,UAAuB;QAEvB,MAAM,eAAe,GAAG,8BAA8B,CACpD,UAAU,CAAC,WAAW,CACvB,CAAC;QAEF,KAAK,CACH,UAAU,CAAC,IAAI,EACf,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,IAAI,EACzC,UAAU,CAAC,WAAW,EACtB,IAAI,CAAC,KAAK,EACV,eAAe;QACf,sBAAsB,CAAC,IAAI;QAC3B,qBAAqB,CAAC,IAAI,EAC1B,UAAU,CACX,CAAC;QAjBe,eAAU,GAAV,UAAU,CAAiB;QAC3B,WAAM,GAAN,MAAM,CAAQ;IAiBjC,CAAC;IAED;;;;;;;;OAQG;IACO,gBAAgB,CACxB,MAAmB;QAEnB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,IAAI,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,IAAI,uBAAuB,CAChC,UAAU,EACV,IAAI,CAAC,MAAM,EACX,MAAM,EACN,IAAI,CAAC,UAAU,CAChB,CAAC;IACJ,CAAC;CACF"}
@@ -5,18 +5,19 @@
5
5
  */
6
6
  import { describe, it, expect, vi, beforeEach } from 'vitest';
7
7
  import { SubagentToolWrapper } from './subagent-tool-wrapper.js';
8
- import { SubagentInvocation } from './invocation.js';
8
+ import { LocalSubagentInvocation } from './local-invocation.js';
9
9
  import { convertInputConfigToJsonSchema } from './schema-utils.js';
10
10
  import { makeFakeConfig } from '../test-utils/config.js';
11
11
  import { Kind } from '../tools/tools.js';
12
12
  // Mock dependencies to isolate the SubagentToolWrapper class
13
- vi.mock('./invocation.js');
13
+ vi.mock('./local-invocation.js');
14
14
  vi.mock('./schema-utils.js');
15
- const MockedSubagentInvocation = vi.mocked(SubagentInvocation);
15
+ const MockedLocalSubagentInvocation = vi.mocked(LocalSubagentInvocation);
16
16
  const mockConvertInputConfigToJsonSchema = vi.mocked(convertInputConfigToJsonSchema);
17
17
  // Define reusable test data
18
18
  let mockConfig;
19
19
  const mockDefinition = {
20
+ kind: 'local',
20
21
  name: 'TestAgent',
21
22
  displayName: 'Test Agent Display Name',
22
23
  description: 'An agent for testing.',
@@ -81,20 +82,20 @@ describe('SubagentToolWrapper', () => {
81
82
  });
82
83
  });
83
84
  describe('createInvocation', () => {
84
- it('should create a SubagentInvocation with the correct parameters', () => {
85
+ it('should create a LocalSubagentInvocation with the correct parameters', () => {
85
86
  const wrapper = new SubagentToolWrapper(mockDefinition, mockConfig);
86
87
  const params = { goal: 'Test the invocation', priority: 1 };
87
88
  // The public `build` method calls the protected `createInvocation` after validation
88
89
  const invocation = wrapper.build(params);
89
- expect(invocation).toBeInstanceOf(SubagentInvocation);
90
- expect(MockedSubagentInvocation).toHaveBeenCalledExactlyOnceWith(params, mockDefinition, mockConfig, undefined);
90
+ expect(invocation).toBeInstanceOf(LocalSubagentInvocation);
91
+ expect(MockedLocalSubagentInvocation).toHaveBeenCalledExactlyOnceWith(mockDefinition, mockConfig, params, undefined);
91
92
  });
92
- it('should pass the messageBus to the SubagentInvocation constructor', () => {
93
+ it('should pass the messageBus to the LocalSubagentInvocation constructor', () => {
93
94
  const mockMessageBus = {};
94
95
  const wrapper = new SubagentToolWrapper(mockDefinition, mockConfig, mockMessageBus);
95
96
  const params = { goal: 'Test the invocation', priority: 1 };
96
97
  wrapper.build(params);
97
- expect(MockedSubagentInvocation).toHaveBeenCalledWith(params, mockDefinition, mockConfig, mockMessageBus);
98
+ expect(MockedLocalSubagentInvocation).toHaveBeenCalledWith(mockDefinition, mockConfig, params, mockMessageBus);
98
99
  });
99
100
  it('should throw a validation error for invalid parameters before creating an invocation', () => {
100
101
  const wrapper = new SubagentToolWrapper(mockDefinition, mockConfig);
@@ -103,7 +104,7 @@ describe('SubagentToolWrapper', () => {
103
104
  // The `build` method in the base class performs JSON schema validation
104
105
  // before calling the protected `createInvocation` method.
105
106
  expect(() => wrapper.build(invalidParams)).toThrow("params must have required property 'goal'");
106
- expect(MockedSubagentInvocation).not.toHaveBeenCalled();
107
+ expect(MockedLocalSubagentInvocation).not.toHaveBeenCalled();
107
108
  });
108
109
  });
109
110
  });
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-tool-wrapper.test.js","sourceRoot":"","sources":["../../../src/agents/subagent-tool-wrapper.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subagent-tool-wrapper.test.js","sourceRoot":"","sources":["../../../src/agents/subagent-tool-wrapper.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { AgentDefinition } from './types.js';
7
+ /**
8
+ * DTO for TOML parsing - represents the raw structure of the TOML file.
9
+ */
10
+ interface TomlAgentDefinition {
11
+ name: string;
12
+ description: string;
13
+ display_name?: string;
14
+ tools?: string[];
15
+ prompts: {
16
+ system_prompt: string;
17
+ query?: string;
18
+ };
19
+ model?: {
20
+ model?: string;
21
+ temperature?: number;
22
+ };
23
+ run?: {
24
+ max_turns?: number;
25
+ timeout_mins?: number;
26
+ };
27
+ }
28
+ /**
29
+ * Error thrown when an agent definition is invalid or cannot be loaded.
30
+ */
31
+ export declare class AgentLoadError extends Error {
32
+ filePath: string;
33
+ constructor(filePath: string, message: string);
34
+ }
35
+ /**
36
+ * Result of loading agents from a directory.
37
+ */
38
+ export interface AgentLoadResult {
39
+ agents: AgentDefinition[];
40
+ errors: AgentLoadError[];
41
+ }
42
+ /**
43
+ * Parses and validates an agent TOML file.
44
+ *
45
+ * @param filePath Path to the TOML file.
46
+ * @returns The parsed and validated TomlAgentDefinition.
47
+ * @throws AgentLoadError if parsing or validation fails.
48
+ */
49
+ export declare function parseAgentToml(filePath: string): Promise<TomlAgentDefinition>;
50
+ /**
51
+ * Converts a TomlAgentDefinition DTO to the internal AgentDefinition structure.
52
+ *
53
+ * @param toml The parsed TOML definition.
54
+ * @returns The internal AgentDefinition.
55
+ */
56
+ export declare function tomlToAgentDefinition(toml: TomlAgentDefinition): AgentDefinition;
57
+ /**
58
+ * Loads all agents from a specific directory.
59
+ * Ignores non-TOML files and files starting with _.
60
+ *
61
+ * @param dir Directory path to scan.
62
+ * @returns Object containing successfully loaded agents and any errors.
63
+ */
64
+ export declare function loadAgentsFromDirectory(dir: string): Promise<AgentLoadResult>;
65
+ export {};
@@ -0,0 +1,176 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import TOML from '@iarna/toml';
7
+ import * as fs from 'node:fs/promises';
8
+ import {} from 'node:fs';
9
+ import * as path from 'node:path';
10
+ import { z } from 'zod';
11
+ import { isValidToolName, DELEGATE_TO_AGENT_TOOL_NAME, } from '../tools/tool-names.js';
12
+ /**
13
+ * Error thrown when an agent definition is invalid or cannot be loaded.
14
+ */
15
+ export class AgentLoadError extends Error {
16
+ filePath;
17
+ constructor(filePath, message) {
18
+ super(`Failed to load agent from ${filePath}: ${message}`);
19
+ this.filePath = filePath;
20
+ this.name = 'AgentLoadError';
21
+ }
22
+ }
23
+ const tomlSchema = z.object({
24
+ name: z.string().regex(/^[a-z0-9-_]+$/, 'Name must be a valid slug'),
25
+ description: z.string().min(1),
26
+ display_name: z.string().optional(),
27
+ tools: z
28
+ .array(z.string().refine((val) => isValidToolName(val), {
29
+ message: 'Invalid tool name',
30
+ }))
31
+ .optional(),
32
+ prompts: z.object({
33
+ system_prompt: z.string().min(1),
34
+ query: z.string().optional(),
35
+ }),
36
+ model: z
37
+ .object({
38
+ model: z.string().optional(),
39
+ temperature: z.number().optional(),
40
+ })
41
+ .optional(),
42
+ run: z
43
+ .object({
44
+ max_turns: z.number().int().positive().optional(),
45
+ timeout_mins: z.number().int().positive().optional(),
46
+ })
47
+ .optional(),
48
+ });
49
+ /**
50
+ * Parses and validates an agent TOML file.
51
+ *
52
+ * @param filePath Path to the TOML file.
53
+ * @returns The parsed and validated TomlAgentDefinition.
54
+ * @throws AgentLoadError if parsing or validation fails.
55
+ */
56
+ export async function parseAgentToml(filePath) {
57
+ let content;
58
+ try {
59
+ content = await fs.readFile(filePath, 'utf-8');
60
+ }
61
+ catch (error) {
62
+ throw new AgentLoadError(filePath, `Could not read file: ${error.message}`);
63
+ }
64
+ let raw;
65
+ try {
66
+ raw = TOML.parse(content);
67
+ }
68
+ catch (error) {
69
+ throw new AgentLoadError(filePath, `TOML parsing failed: ${error.message}`);
70
+ }
71
+ const result = tomlSchema.safeParse(raw);
72
+ if (!result.success) {
73
+ const issues = result.error.issues
74
+ .map((i) => `${i.path.join('.')}: ${i.message}`)
75
+ .join(', ');
76
+ throw new AgentLoadError(filePath, `Validation failed: ${issues}`);
77
+ }
78
+ const definition = result.data;
79
+ // Prevent sub-agents from delegating to other agents (to prevent recursion/complexity)
80
+ if (definition.tools?.includes(DELEGATE_TO_AGENT_TOOL_NAME)) {
81
+ throw new AgentLoadError(filePath, `Validation failed: tools list cannot include '${DELEGATE_TO_AGENT_TOOL_NAME}'. Sub-agents cannot delegate to other agents.`);
82
+ }
83
+ return definition;
84
+ }
85
+ /**
86
+ * Converts a TomlAgentDefinition DTO to the internal AgentDefinition structure.
87
+ *
88
+ * @param toml The parsed TOML definition.
89
+ * @returns The internal AgentDefinition.
90
+ */
91
+ export function tomlToAgentDefinition(toml) {
92
+ // If a model is specified, use it. Otherwise, inherit
93
+ const modelName = toml.model?.model || 'inherit';
94
+ return {
95
+ kind: 'local',
96
+ name: toml.name,
97
+ description: toml.description,
98
+ displayName: toml.display_name,
99
+ promptConfig: {
100
+ systemPrompt: toml.prompts.system_prompt,
101
+ query: toml.prompts.query,
102
+ },
103
+ modelConfig: {
104
+ model: modelName,
105
+ temp: toml.model?.temperature ?? 1,
106
+ top_p: 0.95,
107
+ },
108
+ runConfig: {
109
+ max_turns: toml.run?.max_turns,
110
+ max_time_minutes: toml.run?.timeout_mins || 5,
111
+ },
112
+ toolConfig: toml.tools
113
+ ? {
114
+ tools: toml.tools,
115
+ }
116
+ : undefined,
117
+ // Default input config for MVA
118
+ inputConfig: {
119
+ inputs: {
120
+ query: {
121
+ type: 'string',
122
+ description: 'The task for the agent.',
123
+ required: false,
124
+ },
125
+ },
126
+ },
127
+ };
128
+ }
129
+ /**
130
+ * Loads all agents from a specific directory.
131
+ * Ignores non-TOML files and files starting with _.
132
+ *
133
+ * @param dir Directory path to scan.
134
+ * @returns Object containing successfully loaded agents and any errors.
135
+ */
136
+ export async function loadAgentsFromDirectory(dir) {
137
+ const result = {
138
+ agents: [],
139
+ errors: [],
140
+ };
141
+ let dirEntries;
142
+ try {
143
+ dirEntries = await fs.readdir(dir, { withFileTypes: true });
144
+ }
145
+ catch (error) {
146
+ // If directory doesn't exist, just return empty
147
+ if (error.code === 'ENOENT') {
148
+ return result;
149
+ }
150
+ result.errors.push(new AgentLoadError(dir, `Could not list directory: ${error.message}`));
151
+ return result;
152
+ }
153
+ const files = dirEntries
154
+ .filter((entry) => entry.isFile() &&
155
+ entry.name.endsWith('.toml') &&
156
+ !entry.name.startsWith('_'))
157
+ .map((entry) => entry.name);
158
+ for (const file of files) {
159
+ const filePath = path.join(dir, file);
160
+ try {
161
+ const toml = await parseAgentToml(filePath);
162
+ const agent = tomlToAgentDefinition(toml);
163
+ result.agents.push(agent);
164
+ }
165
+ catch (error) {
166
+ if (error instanceof AgentLoadError) {
167
+ result.errors.push(error);
168
+ }
169
+ else {
170
+ result.errors.push(new AgentLoadError(filePath, `Unexpected error: ${error.message}`));
171
+ }
172
+ }
173
+ }
174
+ return result;
175
+ }
176
+ //# sourceMappingURL=toml-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toml-loader.js","sourceRoot":"","sources":["../../../src/agents/toml-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,190 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
7
+ import * as fs from 'node:fs/promises';
8
+ import * as path from 'node:path';
9
+ import * as os from 'node:os';
10
+ import { parseAgentToml, tomlToAgentDefinition, loadAgentsFromDirectory, AgentLoadError, } from './toml-loader.js';
11
+ import { GEMINI_MODEL_ALIAS_PRO } from '../config/models.js';
12
+ describe('toml-loader', () => {
13
+ let tempDir;
14
+ beforeEach(async () => {
15
+ tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'agent-test-'));
16
+ });
17
+ afterEach(async () => {
18
+ if (tempDir) {
19
+ await fs.rm(tempDir, { recursive: true, force: true });
20
+ }
21
+ });
22
+ async function writeAgentToml(content, fileName = 'test.toml') {
23
+ const filePath = path.join(tempDir, fileName);
24
+ await fs.writeFile(filePath, content);
25
+ return filePath;
26
+ }
27
+ describe('parseAgentToml', () => {
28
+ it('should parse a valid MVA TOML file', async () => {
29
+ const filePath = await writeAgentToml(`
30
+ name = "test-agent"
31
+ description = "A test agent"
32
+ [prompts]
33
+ system_prompt = "You are a test agent."
34
+ `);
35
+ const result = await parseAgentToml(filePath);
36
+ expect(result).toEqual({
37
+ name: 'test-agent',
38
+ description: 'A test agent',
39
+ prompts: {
40
+ system_prompt: 'You are a test agent.',
41
+ },
42
+ });
43
+ });
44
+ it('should throw AgentLoadError if file reading fails', async () => {
45
+ const filePath = path.join(tempDir, 'non-existent.toml');
46
+ await expect(parseAgentToml(filePath)).rejects.toThrow(AgentLoadError);
47
+ });
48
+ it('should throw AgentLoadError if TOML parsing fails', async () => {
49
+ const filePath = await writeAgentToml('invalid toml [');
50
+ await expect(parseAgentToml(filePath)).rejects.toThrow(AgentLoadError);
51
+ });
52
+ it('should throw AgentLoadError if validation fails (missing required field)', async () => {
53
+ const filePath = await writeAgentToml(`
54
+ name = "test-agent"
55
+ # missing description
56
+ [prompts]
57
+ system_prompt = "You are a test agent."
58
+ `);
59
+ await expect(parseAgentToml(filePath)).rejects.toThrow(/Validation failed/);
60
+ });
61
+ it('should throw AgentLoadError if name is not a slug', async () => {
62
+ const filePath = await writeAgentToml(`
63
+ name = "Test Agent!"
64
+ description = "A test agent"
65
+ [prompts]
66
+ system_prompt = "You are a test agent."
67
+ `);
68
+ await expect(parseAgentToml(filePath)).rejects.toThrow(/Name must be a valid slug/);
69
+ });
70
+ it('should throw AgentLoadError if delegate_to_agent is included in tools', async () => {
71
+ const filePath = await writeAgentToml(`
72
+ name = "test-agent"
73
+ description = "A test agent"
74
+ tools = ["run_shell_command", "delegate_to_agent"]
75
+ [prompts]
76
+ system_prompt = "You are a test agent."
77
+ `);
78
+ await expect(parseAgentToml(filePath)).rejects.toThrow(/tools list cannot include 'delegate_to_agent'/);
79
+ });
80
+ it('should throw AgentLoadError if tools contains invalid names', async () => {
81
+ const filePath = await writeAgentToml(`
82
+ name = "test-agent"
83
+ description = "A test agent"
84
+ tools = ["not-a-tool"]
85
+ [prompts]
86
+ system_prompt = "You are a test agent."
87
+ `);
88
+ await expect(parseAgentToml(filePath)).rejects.toThrow(/Validation failed: tools.0: Invalid tool name/);
89
+ });
90
+ });
91
+ describe('tomlToAgentDefinition', () => {
92
+ it('should convert valid TOML to AgentDefinition with defaults', () => {
93
+ const toml = {
94
+ name: 'test-agent',
95
+ description: 'A test agent',
96
+ prompts: {
97
+ system_prompt: 'You are a test agent.',
98
+ },
99
+ };
100
+ const result = tomlToAgentDefinition(toml);
101
+ expect(result).toMatchObject({
102
+ name: 'test-agent',
103
+ description: 'A test agent',
104
+ promptConfig: {
105
+ systemPrompt: 'You are a test agent.',
106
+ },
107
+ modelConfig: {
108
+ model: 'inherit',
109
+ top_p: 0.95,
110
+ },
111
+ runConfig: {
112
+ max_time_minutes: 5,
113
+ },
114
+ inputConfig: {
115
+ inputs: {
116
+ query: {
117
+ type: 'string',
118
+ required: false,
119
+ },
120
+ },
121
+ },
122
+ });
123
+ });
124
+ it('should pass through model aliases', () => {
125
+ const toml = {
126
+ name: 'test-agent',
127
+ description: 'A test agent',
128
+ model: {
129
+ model: GEMINI_MODEL_ALIAS_PRO,
130
+ },
131
+ prompts: {
132
+ system_prompt: 'You are a test agent.',
133
+ },
134
+ };
135
+ const result = tomlToAgentDefinition(toml);
136
+ expect(result.modelConfig.model).toBe(GEMINI_MODEL_ALIAS_PRO);
137
+ });
138
+ it('should pass through unknown model names (e.g. auto)', () => {
139
+ const toml = {
140
+ name: 'test-agent',
141
+ description: 'A test agent',
142
+ model: {
143
+ model: 'auto',
144
+ },
145
+ prompts: {
146
+ system_prompt: 'You are a test agent.',
147
+ },
148
+ };
149
+ const result = tomlToAgentDefinition(toml);
150
+ expect(result.modelConfig.model).toBe('auto');
151
+ });
152
+ });
153
+ describe('loadAgentsFromDirectory', () => {
154
+ it('should load definitions from a directory', async () => {
155
+ await writeAgentToml(`
156
+ name = "agent-1"
157
+ description = "Agent 1"
158
+ [prompts]
159
+ system_prompt = "Prompt 1"
160
+ `, 'valid.toml');
161
+ // Create a non-TOML file
162
+ await fs.writeFile(path.join(tempDir, 'other.txt'), 'content');
163
+ // Create a hidden file
164
+ await writeAgentToml(`
165
+ name = "hidden"
166
+ description = "Hidden"
167
+ [prompts]
168
+ system_prompt = "Hidden"
169
+ `, '_hidden.toml');
170
+ const result = await loadAgentsFromDirectory(tempDir);
171
+ expect(result.agents).toHaveLength(1);
172
+ expect(result.agents[0].name).toBe('agent-1');
173
+ expect(result.errors).toHaveLength(0);
174
+ });
175
+ it('should return empty result if directory does not exist', async () => {
176
+ const nonExistentDir = path.join(tempDir, 'does-not-exist');
177
+ const result = await loadAgentsFromDirectory(nonExistentDir);
178
+ expect(result.agents).toHaveLength(0);
179
+ expect(result.errors).toHaveLength(0);
180
+ });
181
+ it('should capture errors for malformed individual files', async () => {
182
+ // Create a malformed TOML file
183
+ await writeAgentToml('invalid toml [', 'malformed.toml');
184
+ const result = await loadAgentsFromDirectory(tempDir);
185
+ expect(result.agents).toHaveLength(0);
186
+ expect(result.errors).toHaveLength(1);
187
+ });
188
+ });
189
+ });
190
+ //# sourceMappingURL=toml-loader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toml-loader.test.js","sourceRoot":"","sources":["../../../src/agents/toml-loader.test.ts"],"names":[],"mappings":"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"}
@@ -42,20 +42,23 @@ export interface SubagentActivityEvent {
42
42
  data: Record<string, unknown>;
43
43
  }
44
44
  /**
45
- * The definition for an agent.
45
+ * The base definition for an agent.
46
46
  * @template TOutput The specific Zod schema for the agent's final output object.
47
47
  */
48
- export interface AgentDefinition<TOutput extends z.ZodTypeAny = z.ZodUnknown> {
48
+ export interface BaseAgentDefinition<TOutput extends z.ZodTypeAny = z.ZodUnknown> {
49
49
  /** Unique identifier for the agent. */
50
50
  name: string;
51
51
  displayName?: string;
52
52
  description: string;
53
+ inputConfig: InputConfig;
54
+ outputConfig?: OutputConfig<TOutput>;
55
+ }
56
+ export interface LocalAgentDefinition<TOutput extends z.ZodTypeAny = z.ZodUnknown> extends BaseAgentDefinition<TOutput> {
57
+ kind: 'local';
53
58
  promptConfig: PromptConfig;
54
59
  modelConfig: ModelConfig;
55
60
  runConfig: RunConfig;
56
61
  toolConfig?: ToolConfig;
57
- outputConfig?: OutputConfig<TOutput>;
58
- inputConfig: InputConfig;
59
62
  /**
60
63
  * An optional function to process the raw output from the agent's final tool
61
64
  * call into a string format.
@@ -65,6 +68,11 @@ export interface AgentDefinition<TOutput extends z.ZodTypeAny = z.ZodUnknown> {
65
68
  */
66
69
  processOutput?: (output: z.infer<TOutput>) => string;
67
70
  }
71
+ export interface RemoteAgentDefinition<TOutput extends z.ZodTypeAny = z.ZodUnknown> extends BaseAgentDefinition<TOutput> {
72
+ kind: 'remote';
73
+ agentCardUrl: string;
74
+ }
75
+ export type AgentDefinition<TOutput extends z.ZodTypeAny = z.ZodUnknown> = LocalAgentDefinition<TOutput> | RemoteAgentDefinition<TOutput>;
68
76
  /**
69
77
  * Configures the initial prompt for the agent.
70
78
  */
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  export type ModelId = string;
7
- export type TerminalUnavailabilityReason = 'quota' | 'capacity';
7
+ type TerminalUnavailabilityReason = 'quota' | 'capacity';
8
8
  export type TurnUnavailabilityReason = 'retry_once_per_turn';
9
9
  export type UnavailabilityReason = TerminalUnavailabilityReason | TurnUnavailabilityReason | 'unknown';
10
10
  export type ModelHealthStatus = 'terminal' | 'sticky_retry';
@@ -33,3 +33,4 @@ export declare class ModelAvailabilityService {
33
33
  private setState;
34
34
  private clearState;
35
35
  }
36
+ export {};