@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
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license
|
|
3
|
-
* Copyright
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import
|
|
6
|
+
import yaml from 'js-yaml';
|
|
7
7
|
import * as fs from 'node:fs/promises';
|
|
8
8
|
import {} from 'node:fs';
|
|
9
9
|
import * as path from 'node:path';
|
|
10
10
|
import { z } from 'zod';
|
|
11
11
|
import { isValidToolName, DELEGATE_TO_AGENT_TOOL_NAME, } from '../tools/tool-names.js';
|
|
12
|
+
import { FRONTMATTER_REGEX } from '../skills/skillLoader.js';
|
|
12
13
|
/**
|
|
13
14
|
* Error thrown when an agent definition is invalid or cannot be loaded.
|
|
14
15
|
*/
|
|
@@ -34,22 +35,10 @@ const localAgentSchema = z
|
|
|
34
35
|
message: 'Invalid tool name',
|
|
35
36
|
}))
|
|
36
37
|
.optional(),
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
model: z
|
|
42
|
-
.object({
|
|
43
|
-
model: z.string().optional(),
|
|
44
|
-
temperature: z.number().optional(),
|
|
45
|
-
})
|
|
46
|
-
.optional(),
|
|
47
|
-
run: z
|
|
48
|
-
.object({
|
|
49
|
-
max_turns: z.number().int().positive().optional(),
|
|
50
|
-
timeout_mins: z.number().int().positive().optional(),
|
|
51
|
-
})
|
|
52
|
-
.optional(),
|
|
38
|
+
model: z.string().optional(),
|
|
39
|
+
temperature: z.number().optional(),
|
|
40
|
+
max_turns: z.number().int().positive().optional(),
|
|
41
|
+
timeout_mins: z.number().int().positive().optional(),
|
|
53
42
|
})
|
|
54
43
|
.strict();
|
|
55
44
|
const remoteAgentSchema = z
|
|
@@ -61,20 +50,14 @@ const remoteAgentSchema = z
|
|
|
61
50
|
agent_card_url: z.string().url(),
|
|
62
51
|
})
|
|
63
52
|
.strict();
|
|
64
|
-
const remoteAgentsConfigSchema = z
|
|
65
|
-
.object({
|
|
66
|
-
remote_agents: z.array(remoteAgentSchema),
|
|
67
|
-
})
|
|
68
|
-
.strict();
|
|
69
53
|
// Use a Zod union to automatically discriminate between local and remote
|
|
70
|
-
// agent types.
|
|
71
|
-
// as it correctly handles cases where 'kind' is omitted by relying on
|
|
72
|
-
// the presence of unique fields like `agent_card_url` or `prompts`.
|
|
54
|
+
// agent types.
|
|
73
55
|
const agentUnionOptions = [
|
|
74
56
|
{ schema: localAgentSchema, label: 'Local Agent' },
|
|
75
57
|
{ schema: remoteAgentSchema, label: 'Remote Agent' },
|
|
76
58
|
];
|
|
77
|
-
const
|
|
59
|
+
const remoteAgentsListSchema = z.array(remoteAgentSchema);
|
|
60
|
+
const markdownFrontmatterSchema = z.union([
|
|
78
61
|
agentUnionOptions[0].schema,
|
|
79
62
|
agentUnionOptions[1].schema,
|
|
80
63
|
]);
|
|
@@ -99,13 +82,13 @@ function formatZodError(error, context) {
|
|
|
99
82
|
return `${context}:\n${issues}`;
|
|
100
83
|
}
|
|
101
84
|
/**
|
|
102
|
-
* Parses and validates an agent
|
|
85
|
+
* Parses and validates an agent Markdown file with frontmatter.
|
|
103
86
|
*
|
|
104
|
-
* @param filePath Path to the
|
|
105
|
-
* @returns An array
|
|
87
|
+
* @param filePath Path to the Markdown file.
|
|
88
|
+
* @returns An array containing the single parsed agent definition.
|
|
106
89
|
* @throws AgentLoadError if parsing or validation fails.
|
|
107
90
|
*/
|
|
108
|
-
export async function
|
|
91
|
+
export async function parseAgentMarkdown(filePath) {
|
|
109
92
|
let content;
|
|
110
93
|
try {
|
|
111
94
|
content = await fs.readFile(filePath, 'utf-8');
|
|
@@ -113,42 +96,65 @@ export async function parseAgentToml(filePath) {
|
|
|
113
96
|
catch (error) {
|
|
114
97
|
throw new AgentLoadError(filePath, `Could not read file: ${error.message}`);
|
|
115
98
|
}
|
|
116
|
-
|
|
99
|
+
// Split frontmatter and body
|
|
100
|
+
const match = content.match(FRONTMATTER_REGEX);
|
|
101
|
+
if (!match) {
|
|
102
|
+
throw new AgentLoadError(filePath, 'Invalid markdown format. File must start with YAML frontmatter enclosed in "---".');
|
|
103
|
+
}
|
|
104
|
+
const frontmatterStr = match[1];
|
|
105
|
+
const body = match[2] || '';
|
|
106
|
+
let rawFrontmatter;
|
|
117
107
|
try {
|
|
118
|
-
|
|
108
|
+
rawFrontmatter = yaml.load(frontmatterStr);
|
|
119
109
|
}
|
|
120
110
|
catch (error) {
|
|
121
|
-
throw new AgentLoadError(filePath, `
|
|
111
|
+
throw new AgentLoadError(filePath, `YAML frontmatter parsing failed: ${error.message}`);
|
|
122
112
|
}
|
|
123
|
-
//
|
|
124
|
-
if (
|
|
125
|
-
|
|
126
|
-
'remote_agents' in raw) {
|
|
127
|
-
const result = remoteAgentsConfigSchema.safeParse(raw);
|
|
113
|
+
// Handle array of remote agents
|
|
114
|
+
if (Array.isArray(rawFrontmatter)) {
|
|
115
|
+
const result = remoteAgentsListSchema.safeParse(rawFrontmatter);
|
|
128
116
|
if (!result.success) {
|
|
129
|
-
throw new AgentLoadError(filePath, `Validation failed: ${formatZodError(result.error, 'Remote Agents
|
|
117
|
+
throw new AgentLoadError(filePath, `Validation failed: ${formatZodError(result.error, 'Remote Agents List')}`);
|
|
130
118
|
}
|
|
131
|
-
return result.data.
|
|
119
|
+
return result.data.map((agent) => ({
|
|
120
|
+
...agent,
|
|
121
|
+
kind: 'remote',
|
|
122
|
+
}));
|
|
132
123
|
}
|
|
133
|
-
|
|
134
|
-
const result = singleAgentSchema.safeParse(raw);
|
|
124
|
+
const result = markdownFrontmatterSchema.safeParse(rawFrontmatter);
|
|
135
125
|
if (!result.success) {
|
|
136
126
|
throw new AgentLoadError(filePath, `Validation failed: ${formatZodError(result.error, 'Agent Definition')}`);
|
|
137
127
|
}
|
|
138
|
-
const
|
|
139
|
-
|
|
140
|
-
|
|
128
|
+
const frontmatter = result.data;
|
|
129
|
+
if (frontmatter.kind === 'remote') {
|
|
130
|
+
return [
|
|
131
|
+
{
|
|
132
|
+
...frontmatter,
|
|
133
|
+
kind: 'remote',
|
|
134
|
+
},
|
|
135
|
+
];
|
|
136
|
+
}
|
|
137
|
+
// Local agent validation
|
|
138
|
+
// Validate tools
|
|
139
|
+
if (frontmatter.tools &&
|
|
140
|
+
frontmatter.tools.includes(DELEGATE_TO_AGENT_TOOL_NAME)) {
|
|
141
141
|
throw new AgentLoadError(filePath, `Validation failed: tools list cannot include '${DELEGATE_TO_AGENT_TOOL_NAME}'. Sub-agents cannot delegate to other agents.`);
|
|
142
142
|
}
|
|
143
|
-
|
|
143
|
+
// Construct the local agent definition
|
|
144
|
+
const agentDef = {
|
|
145
|
+
...frontmatter,
|
|
146
|
+
kind: 'local',
|
|
147
|
+
system_prompt: body.trim(),
|
|
148
|
+
};
|
|
149
|
+
return [agentDef];
|
|
144
150
|
}
|
|
145
151
|
/**
|
|
146
|
-
* Converts a
|
|
152
|
+
* Converts a FrontmatterAgentDefinition DTO to the internal AgentDefinition structure.
|
|
147
153
|
*
|
|
148
|
-
* @param
|
|
154
|
+
* @param markdown The parsed Markdown/Frontmatter definition.
|
|
149
155
|
* @returns The internal AgentDefinition.
|
|
150
156
|
*/
|
|
151
|
-
export function
|
|
157
|
+
export function markdownToAgentDefinition(markdown) {
|
|
152
158
|
const inputConfig = {
|
|
153
159
|
inputs: {
|
|
154
160
|
query: {
|
|
@@ -158,39 +164,39 @@ export function tomlToAgentDefinition(toml) {
|
|
|
158
164
|
},
|
|
159
165
|
},
|
|
160
166
|
};
|
|
161
|
-
if (
|
|
167
|
+
if (markdown.kind === 'remote') {
|
|
162
168
|
return {
|
|
163
169
|
kind: 'remote',
|
|
164
|
-
name:
|
|
165
|
-
description:
|
|
166
|
-
displayName:
|
|
167
|
-
agentCardUrl:
|
|
170
|
+
name: markdown.name,
|
|
171
|
+
description: markdown.description || '(Loading description...)',
|
|
172
|
+
displayName: markdown.display_name,
|
|
173
|
+
agentCardUrl: markdown.agent_card_url,
|
|
168
174
|
inputConfig,
|
|
169
175
|
};
|
|
170
176
|
}
|
|
171
177
|
// If a model is specified, use it. Otherwise, inherit
|
|
172
|
-
const modelName =
|
|
178
|
+
const modelName = markdown.model || 'inherit';
|
|
173
179
|
return {
|
|
174
180
|
kind: 'local',
|
|
175
|
-
name:
|
|
176
|
-
description:
|
|
177
|
-
displayName:
|
|
181
|
+
name: markdown.name,
|
|
182
|
+
description: markdown.description,
|
|
183
|
+
displayName: markdown.display_name,
|
|
178
184
|
promptConfig: {
|
|
179
|
-
systemPrompt:
|
|
180
|
-
query:
|
|
185
|
+
systemPrompt: markdown.system_prompt,
|
|
186
|
+
query: '${query}',
|
|
181
187
|
},
|
|
182
188
|
modelConfig: {
|
|
183
189
|
model: modelName,
|
|
184
|
-
temp:
|
|
190
|
+
temp: markdown.temperature ?? 1,
|
|
185
191
|
top_p: 0.95,
|
|
186
192
|
},
|
|
187
193
|
runConfig: {
|
|
188
|
-
max_turns:
|
|
189
|
-
max_time_minutes:
|
|
194
|
+
max_turns: markdown.max_turns,
|
|
195
|
+
max_time_minutes: markdown.timeout_mins || 5,
|
|
190
196
|
},
|
|
191
|
-
toolConfig:
|
|
197
|
+
toolConfig: markdown.tools
|
|
192
198
|
? {
|
|
193
|
-
tools:
|
|
199
|
+
tools: markdown.tools,
|
|
194
200
|
}
|
|
195
201
|
: undefined,
|
|
196
202
|
inputConfig,
|
|
@@ -198,7 +204,8 @@ export function tomlToAgentDefinition(toml) {
|
|
|
198
204
|
}
|
|
199
205
|
/**
|
|
200
206
|
* Loads all agents from a specific directory.
|
|
201
|
-
* Ignores
|
|
207
|
+
* Ignores files starting with _ and non-supported extensions.
|
|
208
|
+
* Supported extensions: .md
|
|
202
209
|
*
|
|
203
210
|
* @param dir Directory path to scan.
|
|
204
211
|
* @returns Object containing successfully loaded agents and any errors.
|
|
@@ -220,17 +227,15 @@ export async function loadAgentsFromDirectory(dir) {
|
|
|
220
227
|
result.errors.push(new AgentLoadError(dir, `Could not list directory: ${error.message}`));
|
|
221
228
|
return result;
|
|
222
229
|
}
|
|
223
|
-
const files = dirEntries
|
|
224
|
-
|
|
225
|
-
entry.name.endsWith('.
|
|
226
|
-
|
|
227
|
-
.
|
|
228
|
-
for (const file of files) {
|
|
229
|
-
const filePath = path.join(dir, file);
|
|
230
|
+
const files = dirEntries.filter((entry) => entry.isFile() &&
|
|
231
|
+
!entry.name.startsWith('_') &&
|
|
232
|
+
entry.name.endsWith('.md'));
|
|
233
|
+
for (const entry of files) {
|
|
234
|
+
const filePath = path.join(dir, entry.name);
|
|
230
235
|
try {
|
|
231
|
-
const
|
|
232
|
-
for (const
|
|
233
|
-
const agent =
|
|
236
|
+
const agentDefs = await parseAgentMarkdown(filePath);
|
|
237
|
+
for (const def of agentDefs) {
|
|
238
|
+
const agent = markdownToAgentDefinition(def);
|
|
234
239
|
result.agents.push(agent);
|
|
235
240
|
}
|
|
236
241
|
}
|
|
@@ -245,4 +250,4 @@ export async function loadAgentsFromDirectory(dir) {
|
|
|
245
250
|
}
|
|
246
251
|
return result;
|
|
247
252
|
}
|
|
248
|
-
//# sourceMappingURL=
|
|
253
|
+
//# sourceMappingURL=agentLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentLoader.js","sourceRoot":"","sources":["../../../src/agents/agentLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,283 @@
|
|
|
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 { parseAgentMarkdown, markdownToAgentDefinition, loadAgentsFromDirectory, AgentLoadError, } from './agentLoader.js';
|
|
11
|
+
import { GEMINI_MODEL_ALIAS_PRO } from '../config/models.js';
|
|
12
|
+
describe('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 writeAgentMarkdown(content, fileName = 'test.md') {
|
|
23
|
+
const filePath = path.join(tempDir, fileName);
|
|
24
|
+
await fs.writeFile(filePath, content);
|
|
25
|
+
return filePath;
|
|
26
|
+
}
|
|
27
|
+
describe('parseAgentMarkdown', () => {
|
|
28
|
+
it('should parse a valid markdown agent file', async () => {
|
|
29
|
+
const filePath = await writeAgentMarkdown(`---
|
|
30
|
+
name: test-agent-md
|
|
31
|
+
description: A markdown agent
|
|
32
|
+
---
|
|
33
|
+
You are a markdown agent.`);
|
|
34
|
+
const result = await parseAgentMarkdown(filePath);
|
|
35
|
+
expect(result).toHaveLength(1);
|
|
36
|
+
expect(result[0]).toMatchObject({
|
|
37
|
+
name: 'test-agent-md',
|
|
38
|
+
description: 'A markdown agent',
|
|
39
|
+
kind: 'local',
|
|
40
|
+
system_prompt: 'You are a markdown agent.',
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
it('should parse frontmatter with tools and model config', async () => {
|
|
44
|
+
const filePath = await writeAgentMarkdown(`---
|
|
45
|
+
name: complex-agent
|
|
46
|
+
description: A complex markdown agent
|
|
47
|
+
tools:
|
|
48
|
+
- run_shell_command
|
|
49
|
+
model: gemini-pro
|
|
50
|
+
temperature: 0.7
|
|
51
|
+
---
|
|
52
|
+
System prompt content.`);
|
|
53
|
+
const result = await parseAgentMarkdown(filePath);
|
|
54
|
+
expect(result).toHaveLength(1);
|
|
55
|
+
expect(result[0]).toMatchObject({
|
|
56
|
+
name: 'complex-agent',
|
|
57
|
+
description: 'A complex markdown agent',
|
|
58
|
+
tools: ['run_shell_command'],
|
|
59
|
+
model: 'gemini-pro',
|
|
60
|
+
temperature: 0.7,
|
|
61
|
+
system_prompt: 'System prompt content.',
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
it('should throw AgentLoadError if frontmatter is missing', async () => {
|
|
65
|
+
const filePath = await writeAgentMarkdown(`Just some markdown content.`);
|
|
66
|
+
await expect(parseAgentMarkdown(filePath)).rejects.toThrow(AgentLoadError);
|
|
67
|
+
await expect(parseAgentMarkdown(filePath)).rejects.toThrow('Invalid markdown format');
|
|
68
|
+
});
|
|
69
|
+
it('should throw AgentLoadError if frontmatter is invalid YAML', async () => {
|
|
70
|
+
const filePath = await writeAgentMarkdown(`---
|
|
71
|
+
name: [invalid yaml
|
|
72
|
+
---
|
|
73
|
+
Body`);
|
|
74
|
+
await expect(parseAgentMarkdown(filePath)).rejects.toThrow(AgentLoadError);
|
|
75
|
+
await expect(parseAgentMarkdown(filePath)).rejects.toThrow('YAML frontmatter parsing failed');
|
|
76
|
+
});
|
|
77
|
+
it('should throw AgentLoadError if validation fails (missing required field)', async () => {
|
|
78
|
+
const filePath = await writeAgentMarkdown(`---
|
|
79
|
+
name: test-agent
|
|
80
|
+
# missing description
|
|
81
|
+
---
|
|
82
|
+
Body`);
|
|
83
|
+
await expect(parseAgentMarkdown(filePath)).rejects.toThrow(/Validation failed/);
|
|
84
|
+
});
|
|
85
|
+
it('should throw AgentLoadError if tools list includes forbidden tool', async () => {
|
|
86
|
+
const filePath = await writeAgentMarkdown(`---
|
|
87
|
+
name: test-agent
|
|
88
|
+
description: Test
|
|
89
|
+
tools:
|
|
90
|
+
- delegate_to_agent
|
|
91
|
+
---
|
|
92
|
+
Body`);
|
|
93
|
+
await expect(parseAgentMarkdown(filePath)).rejects.toThrow(/tools list cannot include 'delegate_to_agent'/);
|
|
94
|
+
});
|
|
95
|
+
it('should parse a valid remote agent markdown file', async () => {
|
|
96
|
+
const filePath = await writeAgentMarkdown(`---
|
|
97
|
+
kind: remote
|
|
98
|
+
name: remote-agent
|
|
99
|
+
description: A remote agent
|
|
100
|
+
agent_card_url: https://example.com/card
|
|
101
|
+
---
|
|
102
|
+
`);
|
|
103
|
+
const result = await parseAgentMarkdown(filePath);
|
|
104
|
+
expect(result).toHaveLength(1);
|
|
105
|
+
expect(result[0]).toEqual({
|
|
106
|
+
kind: 'remote',
|
|
107
|
+
name: 'remote-agent',
|
|
108
|
+
description: 'A remote agent',
|
|
109
|
+
agent_card_url: 'https://example.com/card',
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
it('should infer remote agent kind from agent_card_url', async () => {
|
|
113
|
+
const filePath = await writeAgentMarkdown(`---
|
|
114
|
+
name: inferred-remote
|
|
115
|
+
description: Inferred
|
|
116
|
+
agent_card_url: https://example.com/inferred
|
|
117
|
+
---
|
|
118
|
+
`);
|
|
119
|
+
const result = await parseAgentMarkdown(filePath);
|
|
120
|
+
expect(result).toHaveLength(1);
|
|
121
|
+
expect(result[0]).toEqual({
|
|
122
|
+
kind: 'remote',
|
|
123
|
+
name: 'inferred-remote',
|
|
124
|
+
description: 'Inferred',
|
|
125
|
+
agent_card_url: 'https://example.com/inferred',
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
it('should parse a remote agent with no body', async () => {
|
|
129
|
+
const filePath = await writeAgentMarkdown(`---
|
|
130
|
+
kind: remote
|
|
131
|
+
name: no-body-remote
|
|
132
|
+
agent_card_url: https://example.com/card
|
|
133
|
+
---
|
|
134
|
+
`);
|
|
135
|
+
const result = await parseAgentMarkdown(filePath);
|
|
136
|
+
expect(result).toHaveLength(1);
|
|
137
|
+
expect(result[0]).toEqual({
|
|
138
|
+
kind: 'remote',
|
|
139
|
+
name: 'no-body-remote',
|
|
140
|
+
agent_card_url: 'https://example.com/card',
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
it('should parse multiple remote agents in a list', async () => {
|
|
144
|
+
const filePath = await writeAgentMarkdown(`---
|
|
145
|
+
- kind: remote
|
|
146
|
+
name: remote-1
|
|
147
|
+
agent_card_url: https://example.com/1
|
|
148
|
+
- kind: remote
|
|
149
|
+
name: remote-2
|
|
150
|
+
agent_card_url: https://example.com/2
|
|
151
|
+
---
|
|
152
|
+
`);
|
|
153
|
+
const result = await parseAgentMarkdown(filePath);
|
|
154
|
+
expect(result).toHaveLength(2);
|
|
155
|
+
expect(result[0]).toEqual({
|
|
156
|
+
kind: 'remote',
|
|
157
|
+
name: 'remote-1',
|
|
158
|
+
agent_card_url: 'https://example.com/1',
|
|
159
|
+
});
|
|
160
|
+
expect(result[1]).toEqual({
|
|
161
|
+
kind: 'remote',
|
|
162
|
+
name: 'remote-2',
|
|
163
|
+
agent_card_url: 'https://example.com/2',
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
describe('markdownToAgentDefinition', () => {
|
|
168
|
+
it('should convert valid Markdown DTO to AgentDefinition with defaults', () => {
|
|
169
|
+
const markdown = {
|
|
170
|
+
kind: 'local',
|
|
171
|
+
name: 'test-agent',
|
|
172
|
+
description: 'A test agent',
|
|
173
|
+
system_prompt: 'You are a test agent.',
|
|
174
|
+
};
|
|
175
|
+
const result = markdownToAgentDefinition(markdown);
|
|
176
|
+
expect(result).toMatchObject({
|
|
177
|
+
name: 'test-agent',
|
|
178
|
+
description: 'A test agent',
|
|
179
|
+
promptConfig: {
|
|
180
|
+
systemPrompt: 'You are a test agent.',
|
|
181
|
+
query: '${query}',
|
|
182
|
+
},
|
|
183
|
+
modelConfig: {
|
|
184
|
+
model: 'inherit',
|
|
185
|
+
top_p: 0.95,
|
|
186
|
+
},
|
|
187
|
+
runConfig: {
|
|
188
|
+
max_time_minutes: 5,
|
|
189
|
+
},
|
|
190
|
+
inputConfig: {
|
|
191
|
+
inputs: {
|
|
192
|
+
query: {
|
|
193
|
+
type: 'string',
|
|
194
|
+
required: false,
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
it('should pass through model aliases', () => {
|
|
201
|
+
const markdown = {
|
|
202
|
+
kind: 'local',
|
|
203
|
+
name: 'test-agent',
|
|
204
|
+
description: 'A test agent',
|
|
205
|
+
model: GEMINI_MODEL_ALIAS_PRO,
|
|
206
|
+
system_prompt: 'You are a test agent.',
|
|
207
|
+
};
|
|
208
|
+
const result = markdownToAgentDefinition(markdown);
|
|
209
|
+
expect(result.modelConfig.model).toBe(GEMINI_MODEL_ALIAS_PRO);
|
|
210
|
+
});
|
|
211
|
+
it('should pass through unknown model names (e.g. auto)', () => {
|
|
212
|
+
const markdown = {
|
|
213
|
+
kind: 'local',
|
|
214
|
+
name: 'test-agent',
|
|
215
|
+
description: 'A test agent',
|
|
216
|
+
model: 'auto',
|
|
217
|
+
system_prompt: 'You are a test agent.',
|
|
218
|
+
};
|
|
219
|
+
const result = markdownToAgentDefinition(markdown);
|
|
220
|
+
expect(result.modelConfig.model).toBe('auto');
|
|
221
|
+
});
|
|
222
|
+
it('should convert remote agent definition', () => {
|
|
223
|
+
const markdown = {
|
|
224
|
+
kind: 'remote',
|
|
225
|
+
name: 'remote-agent',
|
|
226
|
+
description: 'A remote agent',
|
|
227
|
+
agent_card_url: 'https://example.com/card',
|
|
228
|
+
};
|
|
229
|
+
const result = markdownToAgentDefinition(markdown);
|
|
230
|
+
expect(result).toEqual({
|
|
231
|
+
kind: 'remote',
|
|
232
|
+
name: 'remote-agent',
|
|
233
|
+
description: 'A remote agent',
|
|
234
|
+
displayName: undefined,
|
|
235
|
+
agentCardUrl: 'https://example.com/card',
|
|
236
|
+
inputConfig: {
|
|
237
|
+
inputs: {
|
|
238
|
+
query: {
|
|
239
|
+
type: 'string',
|
|
240
|
+
description: 'The task for the agent.',
|
|
241
|
+
required: false,
|
|
242
|
+
},
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
describe('loadAgentsFromDirectory', () => {
|
|
249
|
+
it('should load definitions from a directory (Markdown only)', async () => {
|
|
250
|
+
await writeAgentMarkdown(`---
|
|
251
|
+
name: agent-1
|
|
252
|
+
description: Agent 1
|
|
253
|
+
---
|
|
254
|
+
Prompt 1`, 'valid.md');
|
|
255
|
+
// Create a non-supported file
|
|
256
|
+
await fs.writeFile(path.join(tempDir, 'other.txt'), 'content');
|
|
257
|
+
// Create a hidden file
|
|
258
|
+
await writeAgentMarkdown(`---
|
|
259
|
+
name: hidden
|
|
260
|
+
description: Hidden
|
|
261
|
+
---
|
|
262
|
+
Hidden`, '_hidden.md');
|
|
263
|
+
const result = await loadAgentsFromDirectory(tempDir);
|
|
264
|
+
expect(result.agents).toHaveLength(1);
|
|
265
|
+
expect(result.agents[0].name).toBe('agent-1');
|
|
266
|
+
expect(result.errors).toHaveLength(0);
|
|
267
|
+
});
|
|
268
|
+
it('should return empty result if directory does not exist', async () => {
|
|
269
|
+
const nonExistentDir = path.join(tempDir, 'does-not-exist');
|
|
270
|
+
const result = await loadAgentsFromDirectory(nonExistentDir);
|
|
271
|
+
expect(result.agents).toHaveLength(0);
|
|
272
|
+
expect(result.errors).toHaveLength(0);
|
|
273
|
+
});
|
|
274
|
+
it('should capture errors for malformed individual files', async () => {
|
|
275
|
+
// Create a malformed Markdown file
|
|
276
|
+
await writeAgentMarkdown('invalid markdown', 'malformed.md');
|
|
277
|
+
const result = await loadAgentsFromDirectory(tempDir);
|
|
278
|
+
expect(result.agents).toHaveLength(0);
|
|
279
|
+
expect(result.errors).toHaveLength(1);
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
//# sourceMappingURL=agentLoader.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentLoader.test.js","sourceRoot":"","sources":["../../../src/agents/agentLoader.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { AgentDefinition } from './types.js';
|
|
7
7
|
import { z } from 'zod';
|
|
8
|
-
|
|
8
|
+
import type { Config } from '../config/config.js';
|
|
9
|
+
declare const CliHelpReportSchema: z.ZodObject<{
|
|
9
10
|
answer: z.ZodString;
|
|
10
11
|
sources: z.ZodArray<z.ZodString, "many">;
|
|
11
12
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -19,5 +20,5 @@ declare const IntrospectionReportSchema: z.ZodObject<{
|
|
|
19
20
|
* An agent specialized in answering questions about Gemini CLI itself,
|
|
20
21
|
* using its own documentation and runtime state.
|
|
21
22
|
*/
|
|
22
|
-
export declare const
|
|
23
|
+
export declare const CliHelpAgent: (config: Config) => AgentDefinition<typeof CliHelpReportSchema>;
|
|
23
24
|
export {};
|