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