@google/gemini-cli-core 0.24.0-nightly.20260103.30f5c4af4 → 0.25.0-nightly.20260112.15891721a
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.
- package/README.md +1 -1
- package/dist/docs/changelogs/index.md +22 -0
- package/dist/docs/changelogs/latest.md +137 -209
- package/dist/docs/changelogs/preview.md +116 -114
- package/dist/docs/changelogs/releases.md +273 -7
- package/dist/docs/cli/model-routing.md +1 -1
- package/dist/docs/cli/model.md +1 -1
- package/dist/docs/cli/settings.md +67 -52
- package/dist/docs/cli/skills.md +156 -0
- package/dist/docs/cli/telemetry.md +3 -3
- package/dist/docs/cli/tutorials/skills-getting-started.md +124 -0
- package/dist/docs/cli/tutorials.md +4 -0
- package/dist/docs/core/policy-engine.md +3 -2
- package/dist/docs/extensions/index.md +57 -7
- package/dist/docs/get-started/configuration.md +44 -11
- package/dist/docs/get-started/gemini-3.md +2 -17
- package/dist/docs/hooks/best-practices.md +1 -1
- package/dist/docs/hooks/index.md +47 -11
- package/dist/docs/hooks/reference.md +19 -9
- package/dist/docs/hooks/writing-hooks.md +19 -1
- package/dist/docs/sidebar.json +4 -0
- package/dist/docs/troubleshooting.md +9 -3
- package/dist/google-gemini-cli-core-0.25.0-nightly.20260107.59a18e710.tgz +0 -0
- package/dist/src/agents/a2a-client-manager.d.ts +9 -0
- package/dist/src/agents/a2a-client-manager.js +130 -0
- package/dist/src/agents/a2a-client-manager.js.map +1 -1
- package/dist/src/agents/a2a-client-manager.test.js +71 -1
- package/dist/src/agents/a2a-client-manager.test.js.map +1 -1
- package/dist/src/agents/a2aUtils.d.ts +28 -0
- package/dist/src/agents/a2aUtils.js +111 -0
- package/dist/src/agents/a2aUtils.js.map +1 -0
- package/dist/src/agents/a2aUtils.test.js +147 -0
- package/dist/src/agents/a2aUtils.test.js.map +1 -0
- package/dist/src/agents/agentLoader.d.ts +68 -0
- package/dist/src/agents/{toml-loader.js → agentLoader.js} +83 -78
- package/dist/src/agents/agentLoader.js.map +1 -0
- package/dist/src/agents/agentLoader.test.js +283 -0
- package/dist/src/agents/agentLoader.test.js.map +1 -0
- package/dist/src/agents/{introspection-agent.d.ts → cli-help-agent.d.ts} +3 -2
- package/dist/src/agents/{introspection-agent.js → cli-help-agent.js} +17 -11
- package/dist/src/agents/cli-help-agent.js.map +1 -0
- package/dist/src/agents/{introspection-agent.test.js → cli-help-agent.test.js} +26 -8
- package/dist/src/agents/cli-help-agent.test.js.map +1 -0
- package/dist/src/agents/delegate-to-agent-tool.d.ts +2 -2
- package/dist/src/agents/delegate-to-agent-tool.js +23 -16
- package/dist/src/agents/delegate-to-agent-tool.js.map +1 -1
- package/dist/src/agents/delegate-to-agent-tool.test.js +88 -16
- package/dist/src/agents/delegate-to-agent-tool.test.js.map +1 -1
- package/dist/src/agents/local-executor.js +36 -2
- package/dist/src/agents/local-executor.js.map +1 -1
- package/dist/src/agents/local-executor.test.js +55 -2
- package/dist/src/agents/local-executor.test.js.map +1 -1
- package/dist/src/agents/local-invocation.d.ts +2 -2
- package/dist/src/agents/local-invocation.js +3 -3
- package/dist/src/agents/local-invocation.js.map +1 -1
- package/dist/src/agents/local-invocation.test.js +7 -5
- package/dist/src/agents/local-invocation.test.js.map +1 -1
- package/dist/src/agents/registry.d.ts +10 -0
- package/dist/src/agents/registry.js +61 -26
- package/dist/src/agents/registry.js.map +1 -1
- package/dist/src/agents/registry.test.js +66 -11
- package/dist/src/agents/registry.test.js.map +1 -1
- package/dist/src/agents/remote-invocation.d.ts +17 -3
- package/dist/src/agents/remote-invocation.js +106 -6
- package/dist/src/agents/remote-invocation.js.map +1 -1
- package/dist/src/agents/remote-invocation.test.js +184 -18
- package/dist/src/agents/remote-invocation.test.js.map +1 -1
- package/dist/src/agents/subagent-tool-wrapper.d.ts +2 -2
- package/dist/src/agents/subagent-tool-wrapper.js +6 -5
- package/dist/src/agents/subagent-tool-wrapper.js.map +1 -1
- package/dist/src/agents/subagent-tool-wrapper.test.js +17 -10
- package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -1
- package/dist/src/agents/types.d.ts +6 -0
- package/dist/src/availability/fallbackIntegration.test.js +58 -0
- package/dist/src/availability/fallbackIntegration.test.js.map +1 -0
- package/dist/src/code_assist/experiments/experiments.d.ts +1 -1
- package/dist/src/code_assist/experiments/experiments.js +21 -0
- package/dist/src/code_assist/experiments/experiments.js.map +1 -1
- package/dist/src/code_assist/experiments/experiments_local.test.js +110 -0
- package/dist/src/code_assist/experiments/experiments_local.test.js.map +1 -0
- package/dist/src/code_assist/oauth-credential-storage.js +3 -4
- package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
- package/dist/src/code_assist/oauth2.js +31 -1
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +105 -8
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/server.d.ts +5 -0
- package/dist/src/code_assist/server.js +19 -4
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/server.test.js +19 -0
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/code_assist/setup.js +6 -4
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/code_assist/setup.test.js +63 -0
- package/dist/src/code_assist/setup.test.js.map +1 -1
- package/dist/src/code_assist/telemetry.js +2 -1
- package/dist/src/code_assist/telemetry.js.map +1 -1
- package/dist/src/code_assist/telemetry.test.js +2 -1
- package/dist/src/code_assist/telemetry.test.js.map +1 -1
- package/dist/src/code_assist/types.d.ts +25 -0
- package/dist/src/code_assist/types.js +7 -0
- package/dist/src/code_assist/types.js.map +1 -1
- package/dist/src/config/config.d.ts +45 -9
- package/dist/src/config/config.js +128 -62
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +94 -7
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/models.d.ts +7 -0
- package/dist/src/config/models.js +17 -4
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/models.test.js +37 -1
- package/dist/src/config/models.test.js.map +1 -1
- package/dist/src/config/storage.d.ts +1 -0
- package/dist/src/config/storage.js +5 -2
- package/dist/src/config/storage.js.map +1 -1
- package/dist/src/core/client.js +66 -15
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +171 -22
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.js +1 -1
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +1 -1
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/coreToolHookTriggers.d.ts +8 -4
- package/dist/src/core/coreToolHookTriggers.js +43 -5
- package/dist/src/core/coreToolHookTriggers.js.map +1 -1
- package/dist/src/core/coreToolHookTriggers.test.js +11 -9
- package/dist/src/core/coreToolHookTriggers.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.d.ts +2 -8
- package/dist/src/core/coreToolScheduler.js +84 -166
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +51 -29
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +26 -1
- package/dist/src/core/geminiChat.js +74 -8
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +109 -0
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/geminiChatHookTriggers.d.ts +8 -4
- package/dist/src/core/geminiChatHookTriggers.js +31 -9
- package/dist/src/core/geminiChatHookTriggers.js.map +1 -1
- package/dist/src/core/geminiChatHookTriggers.test.d.ts +6 -0
- package/dist/src/core/geminiChatHookTriggers.test.js +153 -0
- package/dist/src/core/geminiChatHookTriggers.test.js.map +1 -0
- package/dist/src/core/loggingContentGenerator.js +19 -2
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.test.js +30 -0
- package/dist/src/core/loggingContentGenerator.test.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +4 -2
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/prompts.js +9 -9
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/prompts.test.js +4 -2
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/core/tokenLimits.js +6 -12
- package/dist/src/core/tokenLimits.js.map +1 -1
- package/dist/src/core/tokenLimits.test.js +8 -4
- package/dist/src/core/tokenLimits.test.js.map +1 -1
- package/dist/src/core/turn.d.ts +18 -2
- package/dist/src/core/turn.js +16 -0
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/hooks/hookEventHandler.d.ts +9 -5
- package/dist/src/hooks/hookEventHandler.js +51 -11
- package/dist/src/hooks/hookEventHandler.js.map +1 -1
- package/dist/src/hooks/hookEventHandler.test.js +176 -8
- package/dist/src/hooks/hookEventHandler.test.js.map +1 -1
- package/dist/src/hooks/hookRunner.d.ts +2 -2
- package/dist/src/hooks/hookRunner.js +12 -4
- package/dist/src/hooks/hookRunner.js.map +1 -1
- package/dist/src/hooks/hookRunner.test.js +33 -0
- package/dist/src/hooks/hookRunner.test.js.map +1 -1
- package/dist/src/hooks/hookSystem.d.ts +12 -0
- package/dist/src/hooks/hookSystem.js +36 -0
- package/dist/src/hooks/hookSystem.js.map +1 -1
- package/dist/src/hooks/hookTranslator.js +2 -1
- package/dist/src/hooks/hookTranslator.js.map +1 -1
- package/dist/src/hooks/index.d.ts +0 -1
- package/dist/src/hooks/index.js +0 -2
- package/dist/src/hooks/index.js.map +1 -1
- package/dist/src/hooks/types.d.ts +21 -0
- package/dist/src/hooks/types.js +0 -15
- package/dist/src/hooks/types.js.map +1 -1
- package/dist/src/hooks/types.test.js +4 -28
- package/dist/src/hooks/types.test.js.map +1 -1
- package/dist/src/ide/detect-ide.d.ts +4 -0
- package/dist/src/ide/detect-ide.js +7 -2
- package/dist/src/ide/detect-ide.js.map +1 -1
- package/dist/src/ide/detect-ide.test.js +10 -0
- package/dist/src/ide/detect-ide.test.js.map +1 -1
- package/dist/src/ide/ide-installer.js +2 -2
- package/dist/src/ide/ide-installer.js.map +1 -1
- package/dist/src/ide/ide-installer.test.js +11 -2
- package/dist/src/ide/ide-installer.test.js.map +1 -1
- package/dist/src/index.d.ts +11 -2
- package/dist/src/index.js +13 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/token-storage/file-token-storage.js +2 -2
- package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -1
- package/dist/src/policy/config.js +60 -22
- package/dist/src/policy/config.js.map +1 -1
- package/dist/src/policy/config.test.js +21 -0
- package/dist/src/policy/config.test.js.map +1 -1
- package/dist/src/policy/persistence.test.js +1 -1
- package/dist/src/policy/persistence.test.js.map +1 -1
- package/dist/src/policy/policies/agent.toml +1 -1
- package/dist/src/policy/policies/yolo.toml +1 -0
- package/dist/src/policy/policy-engine.js +22 -6
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/policy-engine.test.js +206 -1
- package/dist/src/policy/policy-engine.test.js.map +1 -1
- package/dist/src/policy/policy-updater.test.js +3 -3
- package/dist/src/policy/policy-updater.test.js.map +1 -1
- package/dist/src/policy/toml-loader.d.ts +0 -8
- package/dist/src/policy/toml-loader.js +7 -70
- package/dist/src/policy/toml-loader.js.map +1 -1
- package/dist/src/policy/toml-loader.test.js +16 -6
- package/dist/src/policy/toml-loader.test.js.map +1 -1
- package/dist/src/policy/utils.d.ts +21 -0
- package/dist/src/policy/utils.js +45 -0
- package/dist/src/policy/utils.js.map +1 -0
- package/dist/src/policy/utils.test.d.ts +6 -0
- package/dist/src/policy/utils.test.js +92 -0
- package/dist/src/policy/utils.test.js.map +1 -0
- package/dist/src/routing/routingStrategy.d.ts +2 -0
- package/dist/src/routing/strategies/classifierStrategy.js +1 -1
- package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
- package/dist/src/routing/strategies/classifierStrategy.test.js +16 -0
- package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.d.ts +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.js +2 -2
- package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.test.js +13 -0
- package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/overrideStrategy.d.ts +1 -1
- package/dist/src/routing/strategies/overrideStrategy.js +5 -5
- package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
- package/dist/src/routing/strategies/overrideStrategy.test.js +14 -0
- package/dist/src/routing/strategies/overrideStrategy.test.js.map +1 -1
- package/dist/src/scheduler/tool-executor.d.ts +22 -0
- package/dist/src/scheduler/tool-executor.js +198 -0
- package/dist/src/scheduler/tool-executor.js.map +1 -0
- package/dist/src/scheduler/tool-executor.test.d.ts +6 -0
- package/dist/src/scheduler/tool-executor.test.js +231 -0
- package/dist/src/scheduler/tool-executor.test.js.map +1 -0
- package/dist/src/scheduler/tool-modifier.d.ts +23 -0
- package/dist/src/scheduler/tool-modifier.js +50 -0
- package/dist/src/scheduler/tool-modifier.js.map +1 -0
- package/dist/src/scheduler/tool-modifier.test.d.ts +6 -0
- package/dist/src/scheduler/tool-modifier.test.js +159 -0
- package/dist/src/scheduler/tool-modifier.test.js.map +1 -0
- package/dist/src/services/chatCompressionService.js +3 -10
- package/dist/src/services/chatCompressionService.js.map +1 -1
- package/dist/src/services/chatCompressionService.test.js +1 -0
- package/dist/src/services/chatCompressionService.test.js.map +1 -1
- package/dist/src/services/chatRecordingService.d.ts +7 -1
- package/dist/src/services/chatRecordingService.js +20 -2
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/chatRecordingService.test.js +43 -0
- package/dist/src/services/chatRecordingService.test.js.map +1 -1
- package/dist/src/services/environmentSanitization.js +4 -3
- package/dist/src/services/environmentSanitization.js.map +1 -1
- package/dist/src/services/gitService.test.js +10 -2
- package/dist/src/services/gitService.test.js.map +1 -1
- package/dist/src/services/modelConfig.integration.test.js +2 -2
- package/dist/src/services/modelConfig.integration.test.js.map +1 -1
- package/dist/src/services/modelConfigService.d.ts +29 -1
- package/dist/src/services/modelConfigService.js +116 -69
- package/dist/src/services/modelConfigService.js.map +1 -1
- package/dist/src/services/modelConfigService.test.js +116 -0
- package/dist/src/services/modelConfigService.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.js +1 -1
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +43 -2
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/skills/skillLoader.d.ts +31 -0
- package/dist/src/skills/skillLoader.js +77 -0
- package/dist/src/skills/skillLoader.js.map +1 -0
- package/dist/src/skills/skillLoader.test.d.ts +6 -0
- package/dist/src/skills/skillLoader.test.js +75 -0
- package/dist/src/skills/skillLoader.test.js.map +1 -0
- package/dist/src/{services → skills}/skillManager.d.ts +18 -19
- package/dist/src/skills/skillManager.js +108 -0
- package/dist/src/skills/skillManager.js.map +1 -0
- package/dist/src/skills/skillManager.test.d.ts +6 -0
- package/dist/src/skills/skillManager.test.js +164 -0
- package/dist/src/skills/skillManager.test.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +9 -6
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +20 -16
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +43 -4
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +2 -2
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +4 -4
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +3 -3
- package/dist/src/telemetry/loggers.js +4 -4
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +7 -5
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +7 -7
- package/dist/src/telemetry/types.js +14 -12
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/test-utils/mock-message-bus.d.ts +1 -0
- package/dist/src/test-utils/mock-message-bus.js +29 -0
- package/dist/src/test-utils/mock-message-bus.js.map +1 -1
- package/dist/src/test-utils/mock-tool.d.ts +5 -3
- package/dist/src/test-utils/mock-tool.js +11 -10
- package/dist/src/test-utils/mock-tool.js.map +1 -1
- package/dist/src/tools/activate-skill.d.ts +2 -2
- package/dist/src/tools/activate-skill.js +28 -10
- package/dist/src/tools/activate-skill.js.map +1 -1
- package/dist/src/tools/activate-skill.test.js +31 -11
- package/dist/src/tools/activate-skill.test.js.map +1 -1
- package/dist/src/tools/confirmation-policy.test.js +2 -12
- package/dist/src/tools/confirmation-policy.test.js.map +1 -1
- package/dist/src/tools/edit.d.ts +27 -5
- package/dist/src/tools/edit.js +446 -137
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +257 -525
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/get-internal-docs.d.ts +2 -2
- package/dist/src/tools/get-internal-docs.js +17 -24
- package/dist/src/tools/get-internal-docs.js.map +1 -1
- package/dist/src/tools/get-internal-docs.test.js +2 -1
- package/dist/src/tools/get-internal-docs.test.js.map +1 -1
- package/dist/src/tools/glob.d.ts +2 -2
- package/dist/src/tools/glob.js +1 -1
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +2 -1
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/grep.d.ts +2 -2
- package/dist/src/tools/grep.js +1 -1
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/grep.test.js +5 -4
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/ls.d.ts +2 -2
- package/dist/src/tools/ls.js +2 -2
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/ls.test.js +2 -1
- package/dist/src/tools/ls.test.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +2 -2
- package/dist/src/tools/mcp-client.js +2 -1
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +20 -5
- package/dist/src/tools/mcp-tool.js +8 -8
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.test.js +11 -6
- package/dist/src/tools/mcp-tool.test.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +3 -3
- package/dist/src/tools/memoryTool.js +2 -2
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/memoryTool.test.js +5 -2
- package/dist/src/tools/memoryTool.test.js.map +1 -1
- package/dist/src/tools/message-bus-integration.test.js +10 -37
- package/dist/src/tools/message-bus-integration.test.js.map +1 -1
- package/dist/src/tools/read-file.d.ts +2 -2
- package/dist/src/tools/read-file.js +1 -1
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +3 -2
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.d.ts +2 -2
- package/dist/src/tools/read-many-files.js +2 -3
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +3 -2
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/ripGrep.d.ts +2 -2
- package/dist/src/tools/ripGrep.js +3 -4
- package/dist/src/tools/ripGrep.js.map +1 -1
- package/dist/src/tools/ripGrep.test.js +7 -6
- package/dist/src/tools/ripGrep.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +3 -4
- package/dist/src/tools/shell.js +9 -35
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +40 -57
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/tool-error.d.ts +4 -0
- package/dist/src/tools/tool-error.js +4 -0
- package/dist/src/tools/tool-error.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +11 -6
- package/dist/src/tools/tool-registry.js +13 -8
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +14 -10
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +7 -5
- package/dist/src/tools/tools.js +15 -17
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/tools.test.js +3 -1
- package/dist/src/tools/tools.test.js.map +1 -1
- package/dist/src/tools/web-fetch.d.ts +2 -2
- package/dist/src/tools/web-fetch.js +4 -4
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-fetch.test.js +17 -19
- package/dist/src/tools/web-fetch.test.js.map +1 -1
- package/dist/src/tools/web-search.d.ts +2 -2
- package/dist/src/tools/web-search.js +3 -4
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/web-search.test.js +2 -1
- package/dist/src/tools/web-search.test.js.map +1 -1
- package/dist/src/tools/write-file.d.ts +2 -2
- package/dist/src/tools/write-file.js +5 -3
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +4 -1
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/tools/write-todos.d.ts +2 -2
- package/dist/src/tools/write-todos.js +5 -4
- package/dist/src/tools/write-todos.js.map +1 -1
- package/dist/src/tools/write-todos.test.js +2 -1
- package/dist/src/tools/write-todos.test.js.map +1 -1
- package/dist/src/utils/apiConversionUtils.d.ts +12 -0
- package/dist/src/utils/apiConversionUtils.js +46 -0
- package/dist/src/utils/apiConversionUtils.js.map +1 -0
- package/dist/src/utils/apiConversionUtils.test.d.ts +6 -0
- package/dist/src/utils/apiConversionUtils.test.js +150 -0
- package/dist/src/utils/apiConversionUtils.test.js.map +1 -0
- package/dist/src/utils/editCorrector.test.js +1 -1
- package/dist/src/utils/editCorrector.test.js.map +1 -1
- package/dist/src/utils/editor.d.ts +2 -2
- package/dist/src/utils/editor.js +19 -2
- package/dist/src/utils/editor.js.map +1 -1
- package/dist/src/utils/editor.test.js +27 -4
- package/dist/src/utils/editor.test.js.map +1 -1
- package/dist/src/utils/events.d.ts +52 -1
- package/dist/src/utils/events.js +28 -0
- package/dist/src/utils/events.js.map +1 -1
- package/dist/src/utils/events.test.js +25 -0
- package/dist/src/utils/events.test.js.map +1 -1
- package/dist/src/utils/fileDiffUtils.d.ts +18 -0
- package/dist/src/utils/fileDiffUtils.js +37 -0
- package/dist/src/utils/fileDiffUtils.js.map +1 -0
- package/dist/src/utils/fileDiffUtils.test.d.ts +6 -0
- package/dist/src/utils/fileDiffUtils.test.js +84 -0
- package/dist/src/utils/fileDiffUtils.test.js.map +1 -0
- package/dist/src/utils/gitIgnoreParser.js +9 -10
- package/dist/src/utils/gitIgnoreParser.js.map +1 -1
- package/dist/src/utils/installationManager.test.js +11 -3
- package/dist/src/utils/installationManager.test.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.js +1 -2
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +9 -0
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/paths.d.ts +10 -0
- package/dist/src/utils/paths.js +20 -1
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/src/utils/terminal.d.ts +2 -0
- package/dist/src/utils/terminal.js +6 -0
- package/dist/src/utils/terminal.js.map +1 -1
- package/dist/src/utils/tokenCalculation.js +20 -5
- package/dist/src/utils/tokenCalculation.js.map +1 -1
- package/dist/src/utils/tokenCalculation.test.js +11 -2
- package/dist/src/utils/tokenCalculation.test.js.map +1 -1
- package/dist/src/utils/tool-utils.test.js +2 -1
- package/dist/src/utils/tool-utils.test.js.map +1 -1
- package/dist/src/utils/userAccountManager.test.js +5 -5
- package/dist/src/utils/userAccountManager.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -2
- package/dist/docs/cli/configuration.md +0 -780
- package/dist/docs/get-started/deployment.md +0 -143
- package/dist/google-gemini-cli-core-0.24.0-nightly.20251227.37be16243.tgz +0 -0
- package/dist/src/agents/introspection-agent.js.map +0 -1
- package/dist/src/agents/introspection-agent.test.js.map +0 -1
- package/dist/src/agents/toml-loader.d.ts +0 -74
- package/dist/src/agents/toml-loader.js.map +0 -1
- package/dist/src/agents/toml-loader.test.js +0 -309
- package/dist/src/agents/toml-loader.test.js.map +0 -1
- package/dist/src/core/sessionHookTriggers.d.ts +0 -28
- package/dist/src/core/sessionHookTriggers.js +0 -68
- package/dist/src/core/sessionHookTriggers.js.map +0 -1
- package/dist/src/services/skillManager.js +0 -157
- package/dist/src/services/skillManager.js.map +0 -1
- package/dist/src/services/skillManager.test.js +0 -169
- package/dist/src/services/skillManager.test.js.map +0 -1
- package/dist/src/tools/smart-edit.d.ts +0 -78
- package/dist/src/tools/smart-edit.js +0 -722
- package/dist/src/tools/smart-edit.js.map +0 -1
- package/dist/src/tools/smart-edit.test.js +0 -591
- package/dist/src/tools/smart-edit.test.js.map +0 -1
- package/dist/src/utils/shell-permissions.d.ts +0 -52
- package/dist/src/utils/shell-permissions.js +0 -188
- package/dist/src/utils/shell-permissions.js.map +0 -1
- package/dist/src/utils/shell-permissions.test.js +0 -342
- package/dist/src/utils/shell-permissions.test.js.map +0 -1
- /package/dist/src/agents/{introspection-agent.test.d.ts → a2aUtils.test.d.ts} +0 -0
- /package/dist/src/agents/{toml-loader.test.d.ts → agentLoader.test.d.ts} +0 -0
- /package/dist/src/{services/skillManager.test.d.ts → agents/cli-help-agent.test.d.ts} +0 -0
- /package/dist/src/{tools/smart-edit.test.d.ts → availability/fallbackIntegration.test.d.ts} +0 -0
- /package/dist/src/{utils/shell-permissions.test.d.ts → code_assist/experiments/experiments_local.test.d.ts} +0 -0
|
@@ -159,7 +159,7 @@ their corresponding top-level category object in your `settings.json` file.
|
|
|
159
159
|
#### `output`
|
|
160
160
|
|
|
161
161
|
- **`output.format`** (enum):
|
|
162
|
-
- **Description:** The format of the CLI output.
|
|
162
|
+
- **Description:** The format of the CLI output. Can be `text` or `json`.
|
|
163
163
|
- **Default:** `"text"`
|
|
164
164
|
- **Values:** `"text"`, `"json"`
|
|
165
165
|
|
|
@@ -184,6 +184,12 @@ their corresponding top-level category object in your `settings.json` file.
|
|
|
184
184
|
title
|
|
185
185
|
- **Default:** `false`
|
|
186
186
|
|
|
187
|
+
- **`ui.showHomeDirectoryWarning`** (boolean):
|
|
188
|
+
- **Description:** Show a warning when running Gemini CLI in the home
|
|
189
|
+
directory.
|
|
190
|
+
- **Default:** `true`
|
|
191
|
+
- **Requires restart:** Yes
|
|
192
|
+
|
|
187
193
|
- **`ui.hideTips`** (boolean):
|
|
188
194
|
- **Description:** Hide helpful tips in the UI
|
|
189
195
|
- **Default:** `false`
|
|
@@ -269,7 +275,7 @@ their corresponding top-level category object in your `settings.json` file.
|
|
|
269
275
|
#### `ide`
|
|
270
276
|
|
|
271
277
|
- **`ide.enabled`** (boolean):
|
|
272
|
-
- **Description:** Enable IDE integration mode
|
|
278
|
+
- **Description:** Enable IDE integration mode.
|
|
273
279
|
- **Default:** `false`
|
|
274
280
|
- **Requires restart:** Yes
|
|
275
281
|
|
|
@@ -573,12 +579,12 @@ their corresponding top-level category object in your `settings.json` file.
|
|
|
573
579
|
- **Default:** `false`
|
|
574
580
|
|
|
575
581
|
- **`context.fileFiltering.respectGitIgnore`** (boolean):
|
|
576
|
-
- **Description:** Respect .gitignore files when searching
|
|
582
|
+
- **Description:** Respect .gitignore files when searching.
|
|
577
583
|
- **Default:** `true`
|
|
578
584
|
- **Requires restart:** Yes
|
|
579
585
|
|
|
580
586
|
- **`context.fileFiltering.respectGeminiIgnore`** (boolean):
|
|
581
|
-
- **Description:** Respect .geminiignore files when searching
|
|
587
|
+
- **Description:** Respect .geminiignore files when searching.
|
|
582
588
|
- **Default:** `true`
|
|
583
589
|
- **Requires restart:** Yes
|
|
584
590
|
|
|
@@ -685,11 +691,9 @@ their corresponding top-level category object in your `settings.json` file.
|
|
|
685
691
|
- **Requires restart:** Yes
|
|
686
692
|
|
|
687
693
|
- **`tools.enableHooks`** (boolean):
|
|
688
|
-
- **Description:**
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
Requires MessageBus integration.
|
|
692
|
-
- **Default:** `false`
|
|
694
|
+
- **Description:** Enables the hooks system experiment. When disabled, the
|
|
695
|
+
hooks system is completely deactivated regardless of other settings.
|
|
696
|
+
- **Default:** `true`
|
|
693
697
|
- **Requires restart:** Yes
|
|
694
698
|
|
|
695
699
|
#### `mcp`
|
|
@@ -848,9 +852,14 @@ their corresponding top-level category object in your `settings.json` file.
|
|
|
848
852
|
- **Default:** `"auto"`
|
|
849
853
|
- **Requires restart:** Yes
|
|
850
854
|
|
|
851
|
-
- **`experimental.
|
|
852
|
-
- **Description:**
|
|
855
|
+
- **`experimental.useOSC52Paste`** (boolean):
|
|
856
|
+
- **Description:** Use OSC 52 sequence for pasting instead of clipboardy
|
|
857
|
+
(useful for remote sessions).
|
|
853
858
|
- **Default:** `false`
|
|
859
|
+
|
|
860
|
+
- **`experimental.cliHelpAgentSettings.enabled`** (boolean):
|
|
861
|
+
- **Description:** Enable the CLI Help Agent.
|
|
862
|
+
- **Default:** `true`
|
|
854
863
|
- **Requires restart:** Yes
|
|
855
864
|
|
|
856
865
|
#### `skills`
|
|
@@ -862,11 +871,20 @@ their corresponding top-level category object in your `settings.json` file.
|
|
|
862
871
|
|
|
863
872
|
#### `hooks`
|
|
864
873
|
|
|
874
|
+
- **`hooks.enabled`** (boolean):
|
|
875
|
+
- **Description:** Canonical toggle for the hooks system. When disabled, no
|
|
876
|
+
hooks will be executed.
|
|
877
|
+
- **Default:** `false`
|
|
878
|
+
|
|
865
879
|
- **`hooks.disabled`** (array):
|
|
866
880
|
- **Description:** List of hook names (commands) that should be disabled.
|
|
867
881
|
Hooks in this list will not execute even if configured.
|
|
868
882
|
- **Default:** `[]`
|
|
869
883
|
|
|
884
|
+
- **`hooks.notifications`** (boolean):
|
|
885
|
+
- **Description:** Show visual indicators when hooks are executing.
|
|
886
|
+
- **Default:** `true`
|
|
887
|
+
|
|
870
888
|
- **`hooks.BeforeTool`** (array):
|
|
871
889
|
- **Description:** Hooks that execute before tool execution. Can intercept,
|
|
872
890
|
validate, or modify tool calls.
|
|
@@ -921,6 +939,21 @@ their corresponding top-level category object in your `settings.json` file.
|
|
|
921
939
|
- **Description:** Hooks that execute before tool selection. Can filter or
|
|
922
940
|
prioritize available tools dynamically.
|
|
923
941
|
- **Default:** `[]`
|
|
942
|
+
|
|
943
|
+
#### `admin`
|
|
944
|
+
|
|
945
|
+
- **`admin.secureModeEnabled`** (boolean):
|
|
946
|
+
- **Description:** If true, disallows yolo mode from being used.
|
|
947
|
+
- **Default:** `false`
|
|
948
|
+
|
|
949
|
+
- **`admin.extensions.enabled`** (boolean):
|
|
950
|
+
- **Description:** If false, disallows extensions from being installed or
|
|
951
|
+
used.
|
|
952
|
+
- **Default:** `true`
|
|
953
|
+
|
|
954
|
+
- **`admin.mcp.enabled`** (boolean):
|
|
955
|
+
- **Description:** If false, disallows MCP servers from being used.
|
|
956
|
+
- **Default:** `true`
|
|
924
957
|
<!-- SETTINGS-AUTOGEN:END -->
|
|
925
958
|
|
|
926
959
|
#### `mcpServers`
|
|
@@ -1,25 +1,10 @@
|
|
|
1
1
|
# Gemini 3 Pro and Gemini 3 Flash on Gemini CLI
|
|
2
2
|
|
|
3
|
-
Gemini 3 Pro and Gemini 3 Flash are
|
|
4
|
-
paid customers of Gemini CLI will have access to both Gemini 3 Pro and Gemini 3
|
|
5
|
-
Flash, including the following subscribers:
|
|
6
|
-
|
|
7
|
-
- Google AI Pro and Google AI Ultra (excluding business customers).
|
|
8
|
-
- Gemini Code Assist Standard and Enterprise (requires
|
|
9
|
-
[administrative enablement](#administrator-instructions)).
|
|
10
|
-
- Paid Gemini API and Vertex API key holders.
|
|
11
|
-
|
|
12
|
-
For free tier users:
|
|
13
|
-
|
|
14
|
-
- If you signed up for the waitlist, please check your email for details. We’ve
|
|
15
|
-
onboarded everyone who signed up to the previously available waitlist.
|
|
16
|
-
- If you were not on our waitlist, we’re rolling out additional access gradually
|
|
17
|
-
to ensure the experience remains fast and reliable. Stay tuned for more
|
|
18
|
-
details.
|
|
3
|
+
Gemini 3 Pro and Gemini 3 Flash are available on Gemini CLI for all users!
|
|
19
4
|
|
|
20
5
|
## How to get started with Gemini 3 on Gemini CLI
|
|
21
6
|
|
|
22
|
-
Get started by upgrading Gemini CLI to the latest version
|
|
7
|
+
Get started by upgrading Gemini CLI to the latest version:
|
|
23
8
|
|
|
24
9
|
```bash
|
|
25
10
|
npm install -g @google/gemini-cli@latest
|
|
@@ -852,5 +852,5 @@ console.log(JSON.stringify(sanitizeOutput(hookOutput)));
|
|
|
852
852
|
|
|
853
853
|
- [Hooks Reference](index.md) - Complete API reference
|
|
854
854
|
- [Writing Hooks](writing-hooks.md) - Tutorial and examples
|
|
855
|
-
- [Configuration](../
|
|
855
|
+
- [Configuration](../get-started/configuration.md) - Gemini CLI settings
|
|
856
856
|
- [Hooks Design Document](../hooks-design.md) - Technical architecture
|
package/dist/docs/hooks/index.md
CHANGED
|
@@ -4,6 +4,19 @@ Hooks are scripts or programs that Gemini CLI executes at specific points in the
|
|
|
4
4
|
agentic loop, allowing you to intercept and customize behavior without modifying
|
|
5
5
|
the CLI's source code.
|
|
6
6
|
|
|
7
|
+
> **Note: Hooks are currently an experimental feature.**
|
|
8
|
+
>
|
|
9
|
+
> To use hooks, you must explicitly enable them in your `settings.json`:
|
|
10
|
+
>
|
|
11
|
+
> ```json
|
|
12
|
+
> {
|
|
13
|
+
> "tools": { "enableHooks": true },
|
|
14
|
+
> "hooks": { "enabled": true }
|
|
15
|
+
> }
|
|
16
|
+
> ```
|
|
17
|
+
>
|
|
18
|
+
> Both of these are needed in this experimental phase.
|
|
19
|
+
|
|
7
20
|
See [writing hooks guide](writing-hooks.md) for a tutorial on creating your
|
|
8
21
|
first hook and a comprehensive example.
|
|
9
22
|
|
|
@@ -29,10 +42,10 @@ Gemini CLI waits for all matching hooks to complete before continuing.
|
|
|
29
42
|
|
|
30
43
|
## Security and Risks
|
|
31
44
|
|
|
32
|
-
>
|
|
33
|
-
|
|
34
|
-
By configuring hooks, you are explicitly allowing Gemini CLI to run shell
|
|
35
|
-
commands on your machine. Malicious or poorly configured hooks can:
|
|
45
|
+
> **Warning: Hooks execute arbitrary code with your user privileges.**
|
|
46
|
+
>
|
|
47
|
+
> By configuring hooks, you are explicitly allowing Gemini CLI to run shell
|
|
48
|
+
> commands on your machine. Malicious or poorly configured hooks can:
|
|
36
49
|
|
|
37
50
|
- **Exfiltrate data**: Read sensitive files (`.env`, ssh keys) and send them to
|
|
38
51
|
remote servers.
|
|
@@ -46,6 +59,11 @@ project hook (identified by its name and command), but it is **your
|
|
|
46
59
|
responsibility** to review these hooks (and any installed extensions) before
|
|
47
60
|
trusting them.
|
|
48
61
|
|
|
62
|
+
> **Note:** Extension hooks are subject to a mandatory security warning and
|
|
63
|
+
> consent flow during extension installation or update if hooks are detected.
|
|
64
|
+
> You must explicitly approve the installation or update of any extension that
|
|
65
|
+
> contains hooks.
|
|
66
|
+
|
|
49
67
|
See [Security Considerations](best-practices.md#using-hooks-securely) for a
|
|
50
68
|
detailed threat model and mitigation strategies.
|
|
51
69
|
|
|
@@ -444,7 +462,8 @@ numbers run first):
|
|
|
444
462
|
2. **User settings:** `~/.gemini/settings.json`
|
|
445
463
|
3. **System settings:** `/etc/gemini-cli/settings.json`
|
|
446
464
|
4. **Extensions:** Internal hooks defined by installed extensions (lowest
|
|
447
|
-
priority)
|
|
465
|
+
priority). See [Extensions documentation](../extensions/index.md#hooks) for
|
|
466
|
+
details on how extensions define and configure hooks.
|
|
448
467
|
|
|
449
468
|
#### Deduplication and shadowing
|
|
450
469
|
|
|
@@ -514,14 +533,29 @@ Use the `/hooks panel` command to view all registered hooks:
|
|
|
514
533
|
|
|
515
534
|
This command displays:
|
|
516
535
|
|
|
517
|
-
- All
|
|
536
|
+
- All configured hooks organized by event
|
|
518
537
|
- Hook source (user, project, system)
|
|
519
538
|
- Hook type (command or plugin)
|
|
520
|
-
-
|
|
539
|
+
- Individual hook status (enabled/disabled)
|
|
540
|
+
|
|
541
|
+
### Enable and disable all hooks at once
|
|
542
|
+
|
|
543
|
+
You can enable or disable all hooks at once using commands:
|
|
544
|
+
|
|
545
|
+
```bash
|
|
546
|
+
/hooks enable-all
|
|
547
|
+
/hooks disable-all
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
These commands provide a shortcut to enable or disable all configured hooks
|
|
551
|
+
without managing them individually. The `enable-all` command removes all hooks
|
|
552
|
+
from the `hooks.disabled` array, while `disable-all` adds all configured hooks
|
|
553
|
+
to the disabled list. Changes take effect immediately without requiring a
|
|
554
|
+
restart.
|
|
521
555
|
|
|
522
|
-
### Enable and disable hooks
|
|
556
|
+
### Enable and disable individual hooks
|
|
523
557
|
|
|
524
|
-
You can
|
|
558
|
+
You can enable or disable individual hooks using commands:
|
|
525
559
|
|
|
526
560
|
```bash
|
|
527
561
|
/hooks enable hook-name
|
|
@@ -530,7 +564,8 @@ You can temporarily enable or disable individual hooks using commands:
|
|
|
530
564
|
|
|
531
565
|
These commands allow you to control hook execution without editing configuration
|
|
532
566
|
files. The hook name should match the `name` field in your hook configuration.
|
|
533
|
-
Changes made via these commands are persisted to your
|
|
567
|
+
Changes made via these commands are persisted to your settings. The settings are
|
|
568
|
+
saved to workspace scope if available, otherwise to your global user settings
|
|
534
569
|
(`~/.gemini/settings.json`).
|
|
535
570
|
|
|
536
571
|
### Disabled hooks configuration
|
|
@@ -683,5 +718,6 @@ matchers:
|
|
|
683
718
|
- [Best Practices](best-practices.md) - Security, performance, and debugging
|
|
684
719
|
- [Custom Commands](../cli/custom-commands.md) - Create reusable prompt
|
|
685
720
|
shortcuts
|
|
686
|
-
- [Configuration](../
|
|
721
|
+
- [Configuration](../get-started/configuration.md) - Gemini CLI configuration
|
|
722
|
+
options
|
|
687
723
|
- [Hooks Design Document](../hooks-design.md) - Technical architecture details
|
|
@@ -46,6 +46,16 @@ specific event.
|
|
|
46
46
|
- `tool_input`: (`object`) The arguments passed to the tool.
|
|
47
47
|
- `tool_response`: (`object`, **AfterTool only**) The raw output from the tool
|
|
48
48
|
execution.
|
|
49
|
+
- `mcp_context`: (`object`, **optional**) Present only for MCP tool invocations.
|
|
50
|
+
Contains server identity information:
|
|
51
|
+
- `server_name`: (`string`) The configured name of the MCP server.
|
|
52
|
+
- `tool_name`: (`string`) The original tool name from the MCP server.
|
|
53
|
+
- `command`: (`string`, optional) For stdio transport, the command used to
|
|
54
|
+
start the server.
|
|
55
|
+
- `args`: (`string[]`, optional) For stdio transport, the command arguments.
|
|
56
|
+
- `cwd`: (`string`, optional) For stdio transport, the working directory.
|
|
57
|
+
- `url`: (`string`, optional) For SSE/HTTP transport, the server URL.
|
|
58
|
+
- `tcp`: (`string`, optional) For WebSocket transport, the TCP address.
|
|
49
59
|
|
|
50
60
|
#### Agent Events (`BeforeAgent`, `AfterAgent`)
|
|
51
61
|
|
|
@@ -84,15 +94,15 @@ If the hook exits with `0`, the CLI attempts to parse `stdout` as JSON.
|
|
|
84
94
|
|
|
85
95
|
### Common Output Fields
|
|
86
96
|
|
|
87
|
-
| Field | Type | Description
|
|
88
|
-
| :------------------- | :-------- |
|
|
89
|
-
| `decision` | `string` | One of: `allow`, `deny`, `block`, `ask`, `approve`.
|
|
90
|
-
| `reason` | `string` | Explanation shown to the **agent** when a decision is `deny` or `block`.
|
|
91
|
-
| `systemMessage` | `string` | Message displayed to the **user**
|
|
92
|
-
| `continue` | `boolean` | If `false`, immediately terminates the agent loop for this turn.
|
|
93
|
-
| `stopReason` | `string` | Message shown to the user when `continue` is `false`.
|
|
94
|
-
| `suppressOutput` | `boolean` | If `true`, the hook execution is hidden from the CLI transcript.
|
|
95
|
-
| `hookSpecificOutput` | `object` | Container for event-specific data (see below).
|
|
97
|
+
| Field | Type | Description |
|
|
98
|
+
| :------------------- | :-------- | :------------------------------------------------------------------------------------- |
|
|
99
|
+
| `decision` | `string` | One of: `allow`, `deny`, `block`, `ask`, `approve`. |
|
|
100
|
+
| `reason` | `string` | Explanation shown to the **agent** when a decision is `deny` or `block`. |
|
|
101
|
+
| `systemMessage` | `string` | Message displayed in Gemini CLI terminal to provide warning or context to the **user** |
|
|
102
|
+
| `continue` | `boolean` | If `false`, immediately terminates the agent loop for this turn. |
|
|
103
|
+
| `stopReason` | `string` | Message shown to the user when `continue` is `false`. |
|
|
104
|
+
| `suppressOutput` | `boolean` | If `true`, the hook execution is hidden from the CLI transcript. |
|
|
105
|
+
| `hookSpecificOutput` | `object` | Container for event-specific data (see below). |
|
|
96
106
|
|
|
97
107
|
### `hookSpecificOutput` Reference
|
|
98
108
|
|
|
@@ -1018,9 +1018,27 @@ const SECRET_PATTERNS = [
|
|
|
1018
1018
|
];
|
|
1019
1019
|
```
|
|
1020
1020
|
|
|
1021
|
+
## Packaging as an extension
|
|
1022
|
+
|
|
1023
|
+
While project-level hooks are great for specific repositories, you might want to
|
|
1024
|
+
share your hooks across multiple projects or with other users. You can do this
|
|
1025
|
+
by packaging your hooks as a [Gemini CLI extension](../extensions/index.md).
|
|
1026
|
+
|
|
1027
|
+
Packaging as an extension provides:
|
|
1028
|
+
|
|
1029
|
+
- **Easy distribution:** Share hooks via a git repository or GitHub release.
|
|
1030
|
+
- **Centralized management:** Install, update, and disable hooks using
|
|
1031
|
+
`gemini extensions` commands.
|
|
1032
|
+
- **Version control:** Manage hook versions separately from your project code.
|
|
1033
|
+
- **Variable substitution:** Use `${extensionPath}` and `${process.execPath}`
|
|
1034
|
+
for portable, cross-platform scripts.
|
|
1035
|
+
|
|
1036
|
+
To package hooks as an extension, follow the
|
|
1037
|
+
[extensions hook documentation](../extensions/index.md#hooks).
|
|
1038
|
+
|
|
1021
1039
|
## Learn more
|
|
1022
1040
|
|
|
1023
1041
|
- [Hooks Reference](index.md) - Complete API reference and configuration
|
|
1024
1042
|
- [Best Practices](best-practices.md) - Security, performance, and debugging
|
|
1025
|
-
- [Configuration](../
|
|
1043
|
+
- [Configuration](../get-started/configuration.md) - Gemini CLI settings
|
|
1026
1044
|
- [Custom Commands](../cli/custom-commands.md) - Create custom commands
|
package/dist/docs/sidebar.json
CHANGED
|
@@ -43,9 +43,15 @@ topics on:
|
|
|
43
43
|
- **Cause:** You may be on a corporate network with a firewall that intercepts
|
|
44
44
|
and inspects SSL/TLS traffic. This often requires a custom root CA
|
|
45
45
|
certificate to be trusted by Node.js.
|
|
46
|
-
- **Solution:**
|
|
47
|
-
|
|
48
|
-
-
|
|
46
|
+
- **Solution:** First try setting `NODE_USE_SYSTEM_CA`; if that does not
|
|
47
|
+
resolve the issue, set `NODE_EXTRA_CA_CERTS`.
|
|
48
|
+
- Set the `NODE_USE_SYSTEM_CA=1` environment variable to tell Node.js to use
|
|
49
|
+
the operating system's native certificate store (where corporate
|
|
50
|
+
certificates are typically already installed).
|
|
51
|
+
- Example: `export NODE_USE_SYSTEM_CA=1`
|
|
52
|
+
- Set the `NODE_EXTRA_CA_CERTS` environment variable to the absolute path of
|
|
53
|
+
your corporate root CA certificate file.
|
|
54
|
+
- Example: `export NODE_EXTRA_CA_CERTS=/path/to/your/corporate-ca.crt`
|
|
49
55
|
|
|
50
56
|
## Common error messages and solutions
|
|
51
57
|
|
|
@@ -32,6 +32,10 @@ export declare class A2AClientManager {
|
|
|
32
32
|
* @returns The loaded AgentCard.
|
|
33
33
|
*/
|
|
34
34
|
loadAgent(name: string, agentCardUrl: string, authHandler?: AuthenticationHandler): Promise<AgentCard>;
|
|
35
|
+
/**
|
|
36
|
+
* Invalidates all cached clients and agent cards.
|
|
37
|
+
*/
|
|
38
|
+
clearCache(): void;
|
|
35
39
|
/**
|
|
36
40
|
* Sends a message to a loaded agent.
|
|
37
41
|
* @param agentName The name of the agent to send the message to.
|
|
@@ -71,3 +75,8 @@ export declare class A2AClientManager {
|
|
|
71
75
|
*/
|
|
72
76
|
cancelTask(agentName: string, taskId: string): Promise<Task>;
|
|
73
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Creates a fetch implementation that adapts standard A2A SDK requests to the
|
|
80
|
+
* proto-JSON dialect and endpoint shapes required by Vertex AI Agent Engine.
|
|
81
|
+
*/
|
|
82
|
+
export declare function createAdapterFetch(baseFetch: typeof fetch): typeof fetch;
|
|
@@ -48,6 +48,9 @@ export class A2AClientManager {
|
|
|
48
48
|
if (authHandler) {
|
|
49
49
|
fetchImpl = createAuthenticatingFetchWithRetry(fetch, authHandler);
|
|
50
50
|
}
|
|
51
|
+
// Wrap with custom adapter for ADK Reasoning Engine compatibility
|
|
52
|
+
// TODO: Remove this when a2a-js fixes compatibility
|
|
53
|
+
fetchImpl = createAdapterFetch(fetchImpl);
|
|
51
54
|
const resolver = new DefaultAgentCardResolver({ fetchImpl });
|
|
52
55
|
const options = ClientFactoryOptions.createFrom(ClientFactoryOptions.default, {
|
|
53
56
|
transports: [
|
|
@@ -64,6 +67,14 @@ export class A2AClientManager {
|
|
|
64
67
|
debugLogger.debug(`[A2AClientManager] Loaded agent '${name}' from ${agentCardUrl}`);
|
|
65
68
|
return agentCard;
|
|
66
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Invalidates all cached clients and agent cards.
|
|
72
|
+
*/
|
|
73
|
+
clearCache() {
|
|
74
|
+
this.clients.clear();
|
|
75
|
+
this.agentCards.clear();
|
|
76
|
+
debugLogger.debug('[A2AClientManager] Cache cleared.');
|
|
77
|
+
}
|
|
67
78
|
/**
|
|
68
79
|
* Sends a message to a loaded agent.
|
|
69
80
|
* @param agentName The name of the agent to send the message to.
|
|
@@ -162,4 +173,123 @@ export class A2AClientManager {
|
|
|
162
173
|
}
|
|
163
174
|
}
|
|
164
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* Maps TaskState proto-JSON enums to lower-case strings.
|
|
178
|
+
*/
|
|
179
|
+
function mapTaskState(state) {
|
|
180
|
+
if (!state)
|
|
181
|
+
return state;
|
|
182
|
+
if (state.startsWith('TASK_STATE_')) {
|
|
183
|
+
return state.replace('TASK_STATE_', '').toLowerCase();
|
|
184
|
+
}
|
|
185
|
+
return state.toLowerCase();
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Creates a fetch implementation that adapts standard A2A SDK requests to the
|
|
189
|
+
* proto-JSON dialect and endpoint shapes required by Vertex AI Agent Engine.
|
|
190
|
+
*/
|
|
191
|
+
export function createAdapterFetch(baseFetch) {
|
|
192
|
+
return async (input, init) => {
|
|
193
|
+
const body = init?.body;
|
|
194
|
+
// Protocol Detection
|
|
195
|
+
// JSON-RPC requests bypass the adapter as they are standard-compliant and
|
|
196
|
+
// don't require the dialect translation intended for Vertex AI REST bindings.
|
|
197
|
+
// This logic can be removed when a2a-js/sdk is fully compliant.
|
|
198
|
+
let effectiveBody = body;
|
|
199
|
+
if (typeof body === 'string') {
|
|
200
|
+
try {
|
|
201
|
+
const jsonBody = JSON.parse(body);
|
|
202
|
+
// If the SDK decided to use JSON-RPC, we bypass the adapter because
|
|
203
|
+
// JSON-RPC requests are correctly supported in a2a-js/sdk.
|
|
204
|
+
if (jsonBody.jsonrpc === '2.0') {
|
|
205
|
+
return await baseFetch(input, init);
|
|
206
|
+
}
|
|
207
|
+
// Dialect Mapping (REST / HTTP+JSON)
|
|
208
|
+
// Apply translation for Vertex AI Agent Engine compatibility.
|
|
209
|
+
const message = jsonBody.message || jsonBody;
|
|
210
|
+
if (message && typeof message === 'object') {
|
|
211
|
+
// Role: user -> ROLE_USER, agent/model -> ROLE_AGENT
|
|
212
|
+
if (message.role === 'user')
|
|
213
|
+
message.role = 'ROLE_USER';
|
|
214
|
+
if (message.role === 'agent' || message.role === 'model') {
|
|
215
|
+
message.role = 'ROLE_AGENT';
|
|
216
|
+
}
|
|
217
|
+
// Strip SDK-specific 'kind' field
|
|
218
|
+
delete message.kind;
|
|
219
|
+
// Map 'parts' to 'content' (Proto-JSON dialect often uses 'content' or typed parts)
|
|
220
|
+
// Also strip 'kind' from parts.
|
|
221
|
+
if (Array.isArray(message.parts)) {
|
|
222
|
+
message.content = message.parts.map((p) => {
|
|
223
|
+
const { kind: _k, ...rest } = p;
|
|
224
|
+
// If it's a simple text part, ensure it matches { text: "..." }
|
|
225
|
+
if (p.kind === 'text')
|
|
226
|
+
return { text: p.text };
|
|
227
|
+
return rest;
|
|
228
|
+
});
|
|
229
|
+
delete message.parts;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
effectiveBody = JSON.stringify(jsonBody);
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
debugLogger.debug('[A2AClientManager] Failed to parse request body for dialect translation:', error);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
const response = await baseFetch(input, { ...init, body: effectiveBody });
|
|
239
|
+
if (response.ok) {
|
|
240
|
+
try {
|
|
241
|
+
const responseData = await response.clone().json();
|
|
242
|
+
const result = responseData.task || responseData.message || responseData;
|
|
243
|
+
// Restore 'kind' for the SDK and a2aUtils parsing
|
|
244
|
+
if (result && typeof result === 'object' && !result.kind) {
|
|
245
|
+
if (responseData.task || (result.id && result.status)) {
|
|
246
|
+
result.kind = 'task';
|
|
247
|
+
}
|
|
248
|
+
else if (responseData.message || result.messageId) {
|
|
249
|
+
result.kind = 'message';
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// Restore 'kind' on parts so extractMessageText works
|
|
253
|
+
if (result?.parts && Array.isArray(result.parts)) {
|
|
254
|
+
for (const part of result.parts) {
|
|
255
|
+
if (!part.kind) {
|
|
256
|
+
if (part.file)
|
|
257
|
+
part.kind = 'file';
|
|
258
|
+
else if (part.data)
|
|
259
|
+
part.kind = 'data';
|
|
260
|
+
else if (part.text)
|
|
261
|
+
part.kind = 'text';
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// Recursively restore 'kind' on artifact parts
|
|
266
|
+
if (result?.artifacts && Array.isArray(result.artifacts)) {
|
|
267
|
+
for (const artifact of result.artifacts) {
|
|
268
|
+
if (artifact.parts && Array.isArray(artifact.parts)) {
|
|
269
|
+
for (const part of artifact.parts) {
|
|
270
|
+
if (!part.kind) {
|
|
271
|
+
if (part.file)
|
|
272
|
+
part.kind = 'file';
|
|
273
|
+
else if (part.data)
|
|
274
|
+
part.kind = 'data';
|
|
275
|
+
else if (part.text)
|
|
276
|
+
part.kind = 'text';
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
// Map Task States back to SDK expectations
|
|
283
|
+
if (result && typeof result === 'object' && result.status) {
|
|
284
|
+
result.status.state = mapTaskState(result.status.state);
|
|
285
|
+
}
|
|
286
|
+
return new Response(JSON.stringify(result), response);
|
|
287
|
+
}
|
|
288
|
+
catch (_e) {
|
|
289
|
+
// Non-JSON response or unwrapping failure
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return response;
|
|
293
|
+
};
|
|
294
|
+
}
|
|
165
295
|
//# sourceMappingURL=a2a-client-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a2a-client-manager.js","sourceRoot":"","sources":["../../../src/agents/a2a-client-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAEL,aAAa,EACb,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EAEvB,kCAAkC,GACnC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAItD;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IACnB,MAAM,CAAC,QAAQ,CAAmB;IAE1C,8DAA8D;IACtD,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpC,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAC;IAElD,gBAAuB,CAAC;IAExB;;OAEG;IACH,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;YAC/B,gBAAgB,CAAC,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACrD,CAAC;QACD,OAAO,gBAAgB,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,uBAAuB;QAC5B,qDAAqD;QACrD,gBAAgB,CAAC,QAAQ,GAAG,SAAS,CAAC;IACxC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,CACb,IAAY,EACZ,YAAoB,EACpB,WAAmC;QAEnC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,sBAAsB,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,SAAS,
|
|
1
|
+
{"version":3,"file":"a2a-client-manager.js","sourceRoot":"","sources":["../../../src/agents/a2a-client-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAEL,aAAa,EACb,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EAEvB,kCAAkC,GACnC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAItD;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IACnB,MAAM,CAAC,QAAQ,CAAmB;IAE1C,8DAA8D;IACtD,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpC,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAC;IAElD,gBAAuB,CAAC;IAExB;;OAEG;IACH,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;YAC/B,gBAAgB,CAAC,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACrD,CAAC;QACD,OAAO,gBAAgB,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,uBAAuB;QAC5B,qDAAqD;QACrD,gBAAgB,CAAC,QAAQ,GAAG,SAAS,CAAC;IACxC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,CACb,IAAY,EACZ,YAAoB,EACpB,WAAmC;QAEnC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,sBAAsB,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,SAAS,GAAiB,KAAK,CAAC;QACpC,IAAI,WAAW,EAAE,CAAC;YAChB,SAAS,GAAG,kCAAkC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACrE,CAAC;QAED,kEAAkE;QAClE,oDAAoD;QACpD,SAAS,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAE1C,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAE7D,MAAM,OAAO,GAAG,oBAAoB,CAAC,UAAU,CAC7C,oBAAoB,CAAC,OAAO,EAC5B;YACE,UAAU,EAAE;gBACV,IAAI,oBAAoB,CAAC,EAAE,SAAS,EAAE,CAAC;gBACvC,IAAI,uBAAuB,CAAC,EAAE,SAAS,EAAE,CAAC;aAC3C;YACD,YAAY,EAAE,QAAQ;SACvB,CACF,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;QAE9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAErC,WAAW,CAAC,KAAK,CACf,oCAAoC,IAAI,UAAU,YAAY,EAAE,CACjE,CAAC;QAEF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,WAAW,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACzD,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,WAAW,CACf,SAAiB,EACjB,OAAe,EACf,OAAiD;QAEjD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,cAAc,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,aAAa,GAAsB;YACvC,OAAO,EAAE;gBACP,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,MAAM;gBACZ,SAAS,EAAE,MAAM,EAAE;gBACnB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBACxC,SAAS,EAAE,OAAO,EAAE,SAAS;gBAC7B,MAAM,EAAE,OAAO,EAAE,MAAM;aACxB;YACD,aAAa,EAAE;gBACb,QAAQ,EAAE,IAAI;aACf;SACF,CAAC;QAEF,IAAI,CAAC;YACH,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,gCAAgC,SAAS,GAAG,CAAC;YAC5D,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,KAAK,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,MAAM,IAAI,KAAK,CACb,GAAG,MAAM,0CAA0C,MAAM,CAAC,KAAK,CAAC,EAAE,CACnE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,IAAY;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,SAAiB,EAAE,MAAc;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,cAAc,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,CAAC;YACH,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,4BAA4B,SAAS,GAAG,CAAC;YACxD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,KAAK,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,uBAAuB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAC,SAAiB,EAAE,MAAc;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,cAAc,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,CAAC;YACH,OAAO,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,+BAA+B,SAAS,GAAG,CAAC;YAC3D,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,KAAK,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,uBAAuB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,KAAyB;IAC7C,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACxD,CAAC;IACD,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAuB;IACxD,OAAO,KAAK,EACV,KAAwB,EACxB,IAAkB,EACC,EAAE;QACrB,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,CAAC;QACxB,qBAAqB;QACrB,0EAA0E;QAC1E,8EAA8E;QAC9E,gEAAgE;QAChE,IAAI,aAAa,GAAG,IAAI,CAAC;QACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAElC,oEAAoE;gBACpE,2DAA2D;gBAC3D,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;oBAC/B,OAAO,MAAM,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACtC,CAAC;gBAED,qCAAqC;gBACrC,8DAA8D;gBAC9D,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC;gBAC7C,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAC3C,qDAAqD;oBACrD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;wBAAE,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC;oBACxD,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBACzD,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC;oBAC9B,CAAC;oBAED,kCAAkC;oBAClC,OAAO,OAAO,CAAC,IAAI,CAAC;oBAEpB,oFAAoF;oBACpF,gCAAgC;oBAChC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;wBACjC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CACjC,CAAC,CAAmC,EAAE,EAAE;4BACtC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;4BAChC,gEAAgE;4BAChE,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;gCAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;4BAC/C,OAAO,IAAI,CAAC;wBACd,CAAC,CACF,CAAC;wBACF,OAAO,OAAO,CAAC,KAAK,CAAC;oBACvB,CAAC;gBACH,CAAC;gBAED,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,WAAW,CAAC,KAAK,CACf,0EAA0E,EAC1E,KAAK,CACN,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QAE1E,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;gBACnD,MAAM,MAAM,GACV,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC;gBAE5D,kDAAkD;gBAClD,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBACzD,IAAI,YAAY,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;wBACtD,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC;oBACvB,CAAC;yBAAM,IAAI,YAAY,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;wBACpD,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;oBAC1B,CAAC;gBACH,CAAC;gBAED,sDAAsD;gBACtD,IAAI,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBACjD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;wBAChC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;4BACf,IAAI,IAAI,CAAC,IAAI;gCAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;iCAC7B,IAAI,IAAI,CAAC,IAAI;gCAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;iCAClC,IAAI,IAAI,CAAC,IAAI;gCAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;wBACzC,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,+CAA+C;gBAC/C,IAAI,MAAM,EAAE,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;oBACzD,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;wBACxC,IAAI,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;4BACpD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gCAClC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oCACf,IAAI,IAAI,CAAC,IAAI;wCAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;yCAC7B,IAAI,IAAI,CAAC,IAAI;wCAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;yCAClC,IAAI,IAAI,CAAC,IAAI;wCAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;gCACzC,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,2CAA2C;gBAC3C,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC1D,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1D,CAAC;gBAED,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;YACxD,CAAC;YAAC,OAAO,EAAE,EAAE,CAAC;gBACZ,0CAA0C;YAC5C,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
7
|
-
import { A2AClientManager, } from './a2a-client-manager.js';
|
|
7
|
+
import { A2AClientManager, createAdapterFetch, } from './a2a-client-manager.js';
|
|
8
8
|
import { ClientFactory, DefaultAgentCardResolver } from '@a2a-js/sdk/client';
|
|
9
9
|
import { debugLogger } from '../utils/debugLogger.js';
|
|
10
10
|
import { createAuthenticatingFetchWithRetry, ClientFactoryOptions, } from '@a2a-js/sdk/client';
|
|
@@ -106,6 +106,15 @@ describe('A2AClientManager', () => {
|
|
|
106
106
|
await manager.loadAgent('TestAgent', 'http://test.agent/card');
|
|
107
107
|
expect(debugLogger.debug).toHaveBeenCalledWith("[A2AClientManager] Loaded agent 'TestAgent' from http://test.agent/card");
|
|
108
108
|
});
|
|
109
|
+
it('should clear the cache', async () => {
|
|
110
|
+
await manager.loadAgent('TestAgent', 'http://test.agent/card');
|
|
111
|
+
expect(manager.getAgentCard('TestAgent')).toBeDefined();
|
|
112
|
+
expect(manager.getClient('TestAgent')).toBeDefined();
|
|
113
|
+
manager.clearCache();
|
|
114
|
+
expect(manager.getAgentCard('TestAgent')).toBeUndefined();
|
|
115
|
+
expect(manager.getClient('TestAgent')).toBeUndefined();
|
|
116
|
+
expect(debugLogger.debug).toHaveBeenCalledWith('[A2AClientManager] Cache cleared.');
|
|
117
|
+
});
|
|
109
118
|
});
|
|
110
119
|
describe('sendMessage', () => {
|
|
111
120
|
beforeEach(async () => {
|
|
@@ -207,5 +216,66 @@ describe('A2AClientManager', () => {
|
|
|
207
216
|
await expect(manager.cancelTask('NonExistentAgent', 'task123')).rejects.toThrow("Agent 'NonExistentAgent' not found.");
|
|
208
217
|
});
|
|
209
218
|
});
|
|
219
|
+
describe('createAdapterFetch', () => {
|
|
220
|
+
it('normalizes TASK_STATE_ enums to lower-case', async () => {
|
|
221
|
+
const baseFetch = vi
|
|
222
|
+
.fn()
|
|
223
|
+
.mockResolvedValue(new Response(JSON.stringify({ status: { state: 'TASK_STATE_WORKING' } })));
|
|
224
|
+
const adapter = createAdapterFetch(baseFetch);
|
|
225
|
+
const response = await adapter('http://example.com', {
|
|
226
|
+
method: 'POST',
|
|
227
|
+
body: '{}',
|
|
228
|
+
});
|
|
229
|
+
const data = await response.json();
|
|
230
|
+
expect(data.status.state).toBe('working');
|
|
231
|
+
});
|
|
232
|
+
it('lowercases non-prefixed task states', async () => {
|
|
233
|
+
const baseFetch = vi
|
|
234
|
+
.fn()
|
|
235
|
+
.mockResolvedValue(new Response(JSON.stringify({ status: { state: 'WORKING' } })));
|
|
236
|
+
const adapter = createAdapterFetch(baseFetch);
|
|
237
|
+
const response = await adapter('http://example.com', {
|
|
238
|
+
method: 'POST',
|
|
239
|
+
body: '{}',
|
|
240
|
+
});
|
|
241
|
+
const data = await response.json();
|
|
242
|
+
expect(data.status.state).toBe('working');
|
|
243
|
+
});
|
|
244
|
+
it('bypasses adapter for JSON-RPC requests', async () => {
|
|
245
|
+
const baseFetch = vi.fn().mockResolvedValue(new Response('{}'));
|
|
246
|
+
const adapter = createAdapterFetch(baseFetch);
|
|
247
|
+
const rpcBody = JSON.stringify({ jsonrpc: '2.0', method: 'foo' });
|
|
248
|
+
await adapter('http://example.com', {
|
|
249
|
+
method: 'POST',
|
|
250
|
+
body: rpcBody,
|
|
251
|
+
});
|
|
252
|
+
// Verify baseFetch was called with original body, not modified
|
|
253
|
+
expect(baseFetch).toHaveBeenCalledWith('http://example.com', expect.objectContaining({ body: rpcBody }));
|
|
254
|
+
});
|
|
255
|
+
it('applies dialect translation for remote REST requests', async () => {
|
|
256
|
+
const baseFetch = vi.fn().mockResolvedValue(new Response('{}'));
|
|
257
|
+
const adapter = createAdapterFetch(baseFetch);
|
|
258
|
+
const originalBody = JSON.stringify({
|
|
259
|
+
message: {
|
|
260
|
+
role: 'user',
|
|
261
|
+
parts: [{ kind: 'text', text: 'hi' }],
|
|
262
|
+
},
|
|
263
|
+
});
|
|
264
|
+
await adapter('https://remote-agent.com/v1/message:send', {
|
|
265
|
+
method: 'POST',
|
|
266
|
+
body: originalBody,
|
|
267
|
+
});
|
|
268
|
+
// Verify body WAS modified:
|
|
269
|
+
// 1. role: 'user' -> 'ROLE_USER'
|
|
270
|
+
// 2. parts mapped to content, kind stripped
|
|
271
|
+
const expectedBody = JSON.stringify({
|
|
272
|
+
message: {
|
|
273
|
+
role: 'ROLE_USER',
|
|
274
|
+
content: [{ text: 'hi' }],
|
|
275
|
+
},
|
|
276
|
+
});
|
|
277
|
+
expect(baseFetch).toHaveBeenCalledWith(expect.any(String), expect.objectContaining({ body: expectedBody }));
|
|
278
|
+
});
|
|
279
|
+
});
|
|
210
280
|
});
|
|
211
281
|
//# sourceMappingURL=a2a-client-manager.test.js.map
|