@google/gemini-cli-core 0.24.0-nightly.20260103.30f5c4af4 → 0.24.0-preview.1
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/dist/docs/cli/settings.md +1 -0
- 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/get-started/configuration.md +32 -5
- package/dist/docs/sidebar.json +4 -0
- package/dist/google-gemini-cli-core-0.24.0-preview.0.tgz +0 -0
- package/dist/src/agents/a2a-client-manager.d.ts +5 -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 +27 -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/delegate-to-agent-tool.d.ts +2 -2
- package/dist/src/agents/delegate-to-agent-tool.js +6 -6
- package/dist/src/agents/delegate-to-agent-tool.js.map +1 -1
- package/dist/src/agents/delegate-to-agent-tool.test.js +37 -7
- package/dist/src/agents/delegate-to-agent-tool.test.js.map +1 -1
- package/dist/src/agents/introspection-agent.js +2 -2
- package/dist/src/agents/introspection-agent.js.map +1 -1
- package/dist/src/agents/introspection-agent.test.js +2 -2
- package/dist/src/agents/introspection-agent.test.js.map +1 -1
- package/dist/src/agents/local-executor.js +1 -1
- package/dist/src/agents/local-executor.js.map +1 -1
- package/dist/src/agents/local-executor.test.js +2 -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/remote-invocation.d.ts +17 -3
- package/dist/src/agents/remote-invocation.js +104 -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/code_assist/oauth2.js +31 -1
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +75 -3
- 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/types.d.ts +18 -0
- package/dist/src/config/config.d.ts +19 -3
- package/dist/src/config/config.js +49 -25
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +81 -4
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/models.js +6 -4
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/models.test.js +21 -1
- package/dist/src/config/models.test.js.map +1 -1
- package/dist/src/core/client.js +39 -7
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +93 -0
- 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.test.js +11 -9
- package/dist/src/core/coreToolHookTriggers.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.d.ts +1 -0
- package/dist/src/core/coreToolScheduler.js +30 -106
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +21 -21
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.js +14 -2
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/prompts.js +1 -1
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/sessionHookTriggers.d.ts +3 -2
- package/dist/src/core/sessionHookTriggers.js +8 -1
- package/dist/src/core/sessionHookTriggers.js.map +1 -1
- package/dist/src/core/turn.d.ts +16 -2
- package/dist/src/core/turn.js +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/hookEventHandler.d.ts +6 -2
- package/dist/src/hooks/hookEventHandler.js +24 -3
- package/dist/src/hooks/hookEventHandler.js.map +1 -1
- package/dist/src/hooks/hookEventHandler.test.js +31 -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/index.d.ts +3 -1
- package/dist/src/index.js +3 -2
- package/dist/src/index.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/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/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 +42 -0
- package/dist/src/policy/utils.js.map +1 -0
- package/dist/src/policy/utils.test.js +64 -0
- package/dist/src/policy/utils.test.js.map +1 -0
- 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/skills/skillLoader.d.ts +28 -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 +73 -0
- package/dist/src/skills/skillLoader.test.js.map +1 -0
- package/dist/src/{services → skills}/skillManager.d.ts +10 -20
- package/dist/src/skills/skillManager.js +89 -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 +128 -0
- package/dist/src/skills/skillManager.test.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +5 -5
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +8 -8
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.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 +6 -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 +10 -10
- 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 +6 -1
- package/dist/src/tools/activate-skill.js.map +1 -1
- package/dist/src/tools/activate-skill.test.js +7 -5
- 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 +444 -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 +6 -6
- 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 +2 -2
- package/dist/src/tools/mcp-tool.js +7 -7
- 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-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 +5 -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 +3 -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/editCorrector.test.js +1 -1
- package/dist/src/utils/editCorrector.test.js.map +1 -1
- package/dist/src/utils/events.d.ts +46 -1
- package/dist/src/utils/events.js +21 -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/shell-permissions.test.js +27 -0
- package/dist/src/utils/shell-permissions.test.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/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/google-gemini-cli-core-0.24.0-nightly.20251227.37be16243.tgz +0 -0
- 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/{services/skillManager.test.d.ts → agents/a2aUtils.test.d.ts} +0 -0
- /package/dist/src/{tools/smart-edit.test.d.ts → policy/utils.test.d.ts} +0 -0
|
@@ -4,6 +4,37 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { BaseToolInvocation, } from '../tools/tools.js';
|
|
7
|
+
import { A2AClientManager } from './a2a-client-manager.js';
|
|
8
|
+
import { extractMessageText, extractTaskText, extractIdsFromResponse, } from './a2aUtils.js';
|
|
9
|
+
import { GoogleAuth } from 'google-auth-library';
|
|
10
|
+
import { debugLogger } from '../utils/debugLogger.js';
|
|
11
|
+
/**
|
|
12
|
+
* Authentication handler implementation using Google Application Default Credentials (ADC).
|
|
13
|
+
*/
|
|
14
|
+
export class ADCHandler {
|
|
15
|
+
auth = new GoogleAuth({
|
|
16
|
+
scopes: ['https://www.googleapis.com/auth/cloud-platform'],
|
|
17
|
+
});
|
|
18
|
+
async headers() {
|
|
19
|
+
try {
|
|
20
|
+
const client = await this.auth.getClient();
|
|
21
|
+
const token = await client.getAccessToken();
|
|
22
|
+
if (token.token) {
|
|
23
|
+
return { Authorization: `Bearer ${token.token}` };
|
|
24
|
+
}
|
|
25
|
+
throw new Error('Failed to retrieve ADC access token.');
|
|
26
|
+
}
|
|
27
|
+
catch (e) {
|
|
28
|
+
const errorMessage = `Failed to get ADC token: ${e instanceof Error ? e.message : String(e)}`;
|
|
29
|
+
debugLogger.log('ERROR', errorMessage);
|
|
30
|
+
throw new Error(errorMessage);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async shouldRetryWithHeaders(_response) {
|
|
34
|
+
// For ADC, we usually just re-fetch the token if needed.
|
|
35
|
+
return this.headers();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
7
38
|
/**
|
|
8
39
|
* A tool invocation that proxies to a remote A2A agent.
|
|
9
40
|
*
|
|
@@ -12,20 +43,87 @@ import { BaseToolInvocation, } from '../tools/tools.js';
|
|
|
12
43
|
*/
|
|
13
44
|
export class RemoteAgentInvocation extends BaseToolInvocation {
|
|
14
45
|
definition;
|
|
15
|
-
|
|
16
|
-
|
|
46
|
+
// Persist state across ephemeral invocation instances.
|
|
47
|
+
static sessionState = new Map();
|
|
48
|
+
// State for the ongoing conversation with the remote agent
|
|
49
|
+
contextId;
|
|
50
|
+
taskId;
|
|
51
|
+
// TODO: See if we can reuse the singleton from AppContainer or similar, but for now use getInstance directly
|
|
52
|
+
// as per the current pattern in the codebase.
|
|
53
|
+
clientManager = A2AClientManager.getInstance();
|
|
54
|
+
authHandler = new ADCHandler();
|
|
55
|
+
constructor(definition, params, messageBus, _toolName, _toolDisplayName) {
|
|
56
|
+
const query = params['query'];
|
|
57
|
+
if (typeof query !== 'string') {
|
|
58
|
+
throw new Error(`Remote agent '${definition.name}' requires a string 'query' input.`);
|
|
59
|
+
}
|
|
60
|
+
// Safe to pass strict object to super
|
|
61
|
+
super({ query }, messageBus, _toolName ?? definition.name, _toolDisplayName ?? definition.displayName);
|
|
17
62
|
this.definition = definition;
|
|
18
63
|
}
|
|
19
64
|
getDescription() {
|
|
20
65
|
return `Calling remote agent ${this.definition.displayName ?? this.definition.name}`;
|
|
21
66
|
}
|
|
22
67
|
async getConfirmationDetails(_abortSignal) {
|
|
23
|
-
//
|
|
24
|
-
return
|
|
68
|
+
// For now, always require confirmation for remote agents until we have a policy system for them.
|
|
69
|
+
return {
|
|
70
|
+
type: 'info',
|
|
71
|
+
title: `Call Remote Agent: ${this.definition.displayName ?? this.definition.name}`,
|
|
72
|
+
prompt: `This will send a message to the external agent at ${this.definition.agentCardUrl}.`,
|
|
73
|
+
onConfirm: async () => { }, // No-op for now, just informational
|
|
74
|
+
};
|
|
25
75
|
}
|
|
26
76
|
async execute(_signal) {
|
|
27
|
-
//
|
|
28
|
-
|
|
77
|
+
// 1. Ensure the agent is loaded (cached by manager)
|
|
78
|
+
// We assume the user has provided an access token via some mechanism (TODO),
|
|
79
|
+
// or we rely on ADC.
|
|
80
|
+
try {
|
|
81
|
+
const priorState = RemoteAgentInvocation.sessionState.get(this.definition.name);
|
|
82
|
+
if (priorState) {
|
|
83
|
+
this.contextId = priorState.contextId;
|
|
84
|
+
this.taskId = priorState.taskId;
|
|
85
|
+
}
|
|
86
|
+
if (!this.clientManager.getClient(this.definition.name)) {
|
|
87
|
+
await this.clientManager.loadAgent(this.definition.name, this.definition.agentCardUrl, this.authHandler);
|
|
88
|
+
}
|
|
89
|
+
const message = this.params.query;
|
|
90
|
+
const response = await this.clientManager.sendMessage(this.definition.name, message, {
|
|
91
|
+
contextId: this.contextId,
|
|
92
|
+
taskId: this.taskId,
|
|
93
|
+
});
|
|
94
|
+
// Extracts IDs, taskID will be undefined if the task is completed/failed/canceled.
|
|
95
|
+
const { contextId, taskId } = extractIdsFromResponse(response);
|
|
96
|
+
this.contextId = contextId ?? this.contextId;
|
|
97
|
+
this.taskId = taskId;
|
|
98
|
+
RemoteAgentInvocation.sessionState.set(this.definition.name, {
|
|
99
|
+
contextId: this.contextId,
|
|
100
|
+
taskId: this.taskId,
|
|
101
|
+
});
|
|
102
|
+
// Extract the output text
|
|
103
|
+
const resultData = response;
|
|
104
|
+
let outputText = '';
|
|
105
|
+
if (resultData.kind === 'message') {
|
|
106
|
+
outputText = extractMessageText(resultData);
|
|
107
|
+
}
|
|
108
|
+
else if (resultData.kind === 'task') {
|
|
109
|
+
outputText = extractTaskText(resultData);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
outputText = JSON.stringify(resultData);
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
llmContent: [{ text: outputText }],
|
|
116
|
+
returnDisplay: outputText,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
const errorMessage = `Error calling remote agent: ${error instanceof Error ? error.message : String(error)}`;
|
|
121
|
+
return {
|
|
122
|
+
llmContent: [{ text: errorMessage }],
|
|
123
|
+
returnDisplay: errorMessage,
|
|
124
|
+
error: { message: errorMessage },
|
|
125
|
+
};
|
|
126
|
+
}
|
|
29
127
|
}
|
|
30
128
|
}
|
|
31
129
|
//# sourceMappingURL=remote-invocation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-invocation.js","sourceRoot":"","sources":["../../../src/agents/remote-invocation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,kBAAkB,GAGnB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"remote-invocation.js","sourceRoot":"","sources":["../../../src/agents/remote-invocation.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,33 +3,199 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { describe, it, expect } from 'vitest';
|
|
6
|
+
import { describe, it, expect, vi, beforeEach, afterEach, } from 'vitest';
|
|
7
7
|
import { RemoteAgentInvocation } from './remote-invocation.js';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
import { A2AClientManager } from './a2a-client-manager.js';
|
|
9
|
+
import { createMockMessageBus } from '../test-utils/mock-message-bus.js';
|
|
10
|
+
// Mock A2AClientManager
|
|
11
|
+
vi.mock('./a2a-client-manager.js', () => {
|
|
12
|
+
const A2AClientManager = {
|
|
13
|
+
getInstance: vi.fn(),
|
|
14
|
+
};
|
|
15
|
+
return { A2AClientManager };
|
|
16
|
+
});
|
|
13
17
|
describe('RemoteAgentInvocation', () => {
|
|
14
18
|
const mockDefinition = {
|
|
19
|
+
name: 'test-agent',
|
|
15
20
|
kind: 'remote',
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
agentCardUrl: 'https://example.com/agent-card',
|
|
21
|
+
agentCardUrl: 'http://test-agent/card',
|
|
22
|
+
displayName: 'Test Agent',
|
|
23
|
+
description: 'A test agent',
|
|
20
24
|
inputConfig: {
|
|
21
25
|
inputs: {},
|
|
22
26
|
},
|
|
23
27
|
};
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
const mockClientManager = {
|
|
29
|
+
getClient: vi.fn(),
|
|
30
|
+
loadAgent: vi.fn(),
|
|
31
|
+
sendMessage: vi.fn(),
|
|
32
|
+
};
|
|
33
|
+
const mockMessageBus = createMockMessageBus();
|
|
34
|
+
beforeEach(() => {
|
|
35
|
+
vi.clearAllMocks();
|
|
36
|
+
A2AClientManager.getInstance.mockReturnValue(mockClientManager);
|
|
37
|
+
RemoteAgentInvocation.sessionState?.clear();
|
|
38
|
+
});
|
|
39
|
+
afterEach(() => {
|
|
40
|
+
vi.restoreAllMocks();
|
|
41
|
+
});
|
|
42
|
+
describe('Constructor Validation', () => {
|
|
43
|
+
it('accepts valid input with string query', () => {
|
|
44
|
+
expect(() => {
|
|
45
|
+
new RemoteAgentInvocation(mockDefinition, { query: 'valid' }, mockMessageBus);
|
|
46
|
+
}).not.toThrow();
|
|
47
|
+
});
|
|
48
|
+
it('throws if query is missing', () => {
|
|
49
|
+
expect(() => {
|
|
50
|
+
new RemoteAgentInvocation(mockDefinition, {}, mockMessageBus);
|
|
51
|
+
}).toThrow("requires a string 'query' input");
|
|
52
|
+
});
|
|
53
|
+
it('throws if query is not a string', () => {
|
|
54
|
+
expect(() => {
|
|
55
|
+
new RemoteAgentInvocation(mockDefinition, { query: 123 }, mockMessageBus);
|
|
56
|
+
}).toThrow("requires a string 'query' input");
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
describe('Execution Logic', () => {
|
|
60
|
+
it('should lazy load the agent with ADCHandler if not present', async () => {
|
|
61
|
+
mockClientManager.getClient.mockReturnValue(undefined);
|
|
62
|
+
mockClientManager.sendMessage.mockResolvedValue({
|
|
63
|
+
kind: 'message',
|
|
64
|
+
messageId: 'msg-1',
|
|
65
|
+
role: 'agent',
|
|
66
|
+
parts: [{ kind: 'text', text: 'Hello' }],
|
|
67
|
+
});
|
|
68
|
+
const invocation = new RemoteAgentInvocation(mockDefinition, {
|
|
69
|
+
query: 'hi',
|
|
70
|
+
}, mockMessageBus);
|
|
71
|
+
await invocation.execute(new AbortController().signal);
|
|
72
|
+
expect(mockClientManager.loadAgent).toHaveBeenCalledWith('test-agent', 'http://test-agent/card', expect.objectContaining({
|
|
73
|
+
headers: expect.any(Function),
|
|
74
|
+
shouldRetryWithHeaders: expect.any(Function),
|
|
75
|
+
}));
|
|
76
|
+
});
|
|
77
|
+
it('should not load the agent if already present', async () => {
|
|
78
|
+
mockClientManager.getClient.mockReturnValue({});
|
|
79
|
+
mockClientManager.sendMessage.mockResolvedValue({
|
|
80
|
+
kind: 'message',
|
|
81
|
+
messageId: 'msg-1',
|
|
82
|
+
role: 'agent',
|
|
83
|
+
parts: [{ kind: 'text', text: 'Hello' }],
|
|
84
|
+
});
|
|
85
|
+
const invocation = new RemoteAgentInvocation(mockDefinition, {
|
|
86
|
+
query: 'hi',
|
|
87
|
+
}, mockMessageBus);
|
|
88
|
+
await invocation.execute(new AbortController().signal);
|
|
89
|
+
expect(mockClientManager.loadAgent).not.toHaveBeenCalled();
|
|
90
|
+
});
|
|
91
|
+
it('should persist contextId and taskId across invocations', async () => {
|
|
92
|
+
mockClientManager.getClient.mockReturnValue({});
|
|
93
|
+
// First call return values
|
|
94
|
+
mockClientManager.sendMessage.mockResolvedValueOnce({
|
|
95
|
+
kind: 'message',
|
|
96
|
+
messageId: 'msg-1',
|
|
97
|
+
role: 'agent',
|
|
98
|
+
parts: [{ kind: 'text', text: 'Response 1' }],
|
|
99
|
+
contextId: 'ctx-1',
|
|
100
|
+
taskId: 'task-1',
|
|
101
|
+
});
|
|
102
|
+
const invocation1 = new RemoteAgentInvocation(mockDefinition, {
|
|
103
|
+
query: 'first',
|
|
104
|
+
}, mockMessageBus);
|
|
105
|
+
// Execute first time
|
|
106
|
+
const result1 = await invocation1.execute(new AbortController().signal);
|
|
107
|
+
expect(result1.returnDisplay).toBe('Response 1');
|
|
108
|
+
expect(mockClientManager.sendMessage).toHaveBeenLastCalledWith('test-agent', 'first', { contextId: undefined, taskId: undefined });
|
|
109
|
+
// Prepare for second call with simulated state persistence
|
|
110
|
+
mockClientManager.sendMessage.mockResolvedValueOnce({
|
|
111
|
+
kind: 'message',
|
|
112
|
+
messageId: 'msg-2',
|
|
113
|
+
role: 'agent',
|
|
114
|
+
parts: [{ kind: 'text', text: 'Response 2' }],
|
|
115
|
+
contextId: 'ctx-1',
|
|
116
|
+
taskId: 'task-2',
|
|
117
|
+
});
|
|
118
|
+
const invocation2 = new RemoteAgentInvocation(mockDefinition, {
|
|
119
|
+
query: 'second',
|
|
120
|
+
}, mockMessageBus);
|
|
121
|
+
const result2 = await invocation2.execute(new AbortController().signal);
|
|
122
|
+
expect(result2.returnDisplay).toBe('Response 2');
|
|
123
|
+
expect(mockClientManager.sendMessage).toHaveBeenLastCalledWith('test-agent', 'second', { contextId: 'ctx-1', taskId: 'task-1' });
|
|
124
|
+
// Third call: Task completes
|
|
125
|
+
mockClientManager.sendMessage.mockResolvedValueOnce({
|
|
126
|
+
kind: 'task',
|
|
127
|
+
id: 'task-2',
|
|
128
|
+
contextId: 'ctx-1',
|
|
129
|
+
status: { state: 'completed', message: undefined },
|
|
130
|
+
artifacts: [],
|
|
131
|
+
history: [],
|
|
132
|
+
});
|
|
133
|
+
const invocation3 = new RemoteAgentInvocation(mockDefinition, {
|
|
134
|
+
query: 'third',
|
|
135
|
+
}, mockMessageBus);
|
|
136
|
+
await invocation3.execute(new AbortController().signal);
|
|
137
|
+
// Fourth call: Should start new task (taskId undefined)
|
|
138
|
+
mockClientManager.sendMessage.mockResolvedValueOnce({
|
|
139
|
+
kind: 'message',
|
|
140
|
+
messageId: 'msg-3',
|
|
141
|
+
role: 'agent',
|
|
142
|
+
parts: [{ kind: 'text', text: 'New Task' }],
|
|
143
|
+
});
|
|
144
|
+
const invocation4 = new RemoteAgentInvocation(mockDefinition, {
|
|
145
|
+
query: 'fourth',
|
|
146
|
+
}, mockMessageBus);
|
|
147
|
+
await invocation4.execute(new AbortController().signal);
|
|
148
|
+
expect(mockClientManager.sendMessage).toHaveBeenLastCalledWith('test-agent', 'fourth', { contextId: 'ctx-1', taskId: undefined });
|
|
149
|
+
});
|
|
150
|
+
it('should handle errors gracefully', async () => {
|
|
151
|
+
mockClientManager.getClient.mockReturnValue({});
|
|
152
|
+
mockClientManager.sendMessage.mockRejectedValue(new Error('Network error'));
|
|
153
|
+
const invocation = new RemoteAgentInvocation(mockDefinition, {
|
|
154
|
+
query: 'hi',
|
|
155
|
+
}, mockMessageBus);
|
|
156
|
+
const result = await invocation.execute(new AbortController().signal);
|
|
157
|
+
expect(result.error).toBeDefined();
|
|
158
|
+
expect(result.error?.message).toContain('Network error');
|
|
159
|
+
expect(result.returnDisplay).toContain('Network error');
|
|
160
|
+
});
|
|
161
|
+
it('should use a2a helpers for extracting text', async () => {
|
|
162
|
+
mockClientManager.getClient.mockReturnValue({});
|
|
163
|
+
// Mock a complex message part that needs extraction
|
|
164
|
+
mockClientManager.sendMessage.mockResolvedValue({
|
|
165
|
+
kind: 'message',
|
|
166
|
+
messageId: 'msg-1',
|
|
167
|
+
role: 'agent',
|
|
168
|
+
parts: [
|
|
169
|
+
{ kind: 'text', text: 'Extracted text' },
|
|
170
|
+
{ kind: 'data', data: { foo: 'bar' } },
|
|
171
|
+
],
|
|
172
|
+
});
|
|
173
|
+
const invocation = new RemoteAgentInvocation(mockDefinition, {
|
|
174
|
+
query: 'hi',
|
|
175
|
+
}, mockMessageBus);
|
|
176
|
+
const result = await invocation.execute(new AbortController().signal);
|
|
177
|
+
// Just check that text is present, exact formatting depends on helper
|
|
178
|
+
expect(result.returnDisplay).toContain('Extracted text');
|
|
179
|
+
});
|
|
28
180
|
});
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
181
|
+
describe('Confirmations', () => {
|
|
182
|
+
it('should return info confirmation details', async () => {
|
|
183
|
+
const invocation = new RemoteAgentInvocation(mockDefinition, {
|
|
184
|
+
query: 'hi',
|
|
185
|
+
}, mockMessageBus);
|
|
186
|
+
// @ts-expect-error - getConfirmationDetails is protected
|
|
187
|
+
const confirmation = await invocation.getConfirmationDetails(new AbortController().signal);
|
|
188
|
+
expect(confirmation).not.toBe(false);
|
|
189
|
+
if (confirmation &&
|
|
190
|
+
typeof confirmation === 'object' &&
|
|
191
|
+
confirmation.type === 'info') {
|
|
192
|
+
expect(confirmation.title).toContain('Test Agent');
|
|
193
|
+
expect(confirmation.prompt).toContain('http://test-agent/card');
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
throw new Error('Expected confirmation to be of type info');
|
|
197
|
+
}
|
|
198
|
+
});
|
|
33
199
|
});
|
|
34
200
|
});
|
|
35
201
|
//# sourceMappingURL=remote-invocation.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-invocation.test.js","sourceRoot":"","sources":["../../../src/agents/remote-invocation.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"remote-invocation.test.js","sourceRoot":"","sources":["../../../src/agents/remote-invocation.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,7 +24,7 @@ export declare class SubagentToolWrapper extends BaseDeclarativeTool<AgentInputs
|
|
|
24
24
|
* @param config The runtime configuration, passed down to the subagent.
|
|
25
25
|
* @param messageBus Optional message bus for policy enforcement.
|
|
26
26
|
*/
|
|
27
|
-
constructor(definition: AgentDefinition, config: Config, messageBus
|
|
27
|
+
constructor(definition: AgentDefinition, config: Config, messageBus: MessageBus);
|
|
28
28
|
/**
|
|
29
29
|
* Creates an invocation instance for executing the subagent.
|
|
30
30
|
*
|
|
@@ -34,5 +34,5 @@ export declare class SubagentToolWrapper extends BaseDeclarativeTool<AgentInputs
|
|
|
34
34
|
* @param params The validated input parameters from the parent agent's call.
|
|
35
35
|
* @returns A `ToolInvocation` instance ready for execution.
|
|
36
36
|
*/
|
|
37
|
-
protected createInvocation(params: AgentInputs): ToolInvocation<AgentInputs, ToolResult>;
|
|
37
|
+
protected createInvocation(params: AgentInputs, messageBus: MessageBus, _toolName?: string, _toolDisplayName?: string): ToolInvocation<AgentInputs, ToolResult>;
|
|
38
38
|
}
|
|
@@ -26,9 +26,9 @@ export class SubagentToolWrapper extends BaseDeclarativeTool {
|
|
|
26
26
|
*/
|
|
27
27
|
constructor(definition, config, messageBus) {
|
|
28
28
|
const parameterSchema = convertInputConfigToJsonSchema(definition.inputConfig);
|
|
29
|
-
super(definition.name, definition.displayName ?? definition.name, definition.description, Kind.Think, parameterSchema,
|
|
29
|
+
super(definition.name, definition.displayName ?? definition.name, definition.description, Kind.Think, parameterSchema, messageBus,
|
|
30
30
|
/* isOutputMarkdown */ true,
|
|
31
|
-
/* canUpdateOutput */ true
|
|
31
|
+
/* canUpdateOutput */ true);
|
|
32
32
|
this.definition = definition;
|
|
33
33
|
this.config = config;
|
|
34
34
|
}
|
|
@@ -41,12 +41,13 @@ export class SubagentToolWrapper extends BaseDeclarativeTool {
|
|
|
41
41
|
* @param params The validated input parameters from the parent agent's call.
|
|
42
42
|
* @returns A `ToolInvocation` instance ready for execution.
|
|
43
43
|
*/
|
|
44
|
-
createInvocation(params) {
|
|
44
|
+
createInvocation(params, messageBus, _toolName, _toolDisplayName) {
|
|
45
45
|
const definition = this.definition;
|
|
46
|
+
const effectiveMessageBus = messageBus;
|
|
46
47
|
if (definition.kind === 'remote') {
|
|
47
|
-
return new RemoteAgentInvocation(definition, params,
|
|
48
|
+
return new RemoteAgentInvocation(definition, params, effectiveMessageBus, _toolName, _toolDisplayName);
|
|
48
49
|
}
|
|
49
|
-
return new LocalSubagentInvocation(definition, this.config, params,
|
|
50
|
+
return new LocalSubagentInvocation(definition, this.config, params, effectiveMessageBus, _toolName, _toolDisplayName);
|
|
50
51
|
}
|
|
51
52
|
}
|
|
52
53
|
//# sourceMappingURL=subagent-tool-wrapper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-tool-wrapper.js","sourceRoot":"","sources":["../../../src/agents/subagent-tool-wrapper.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,mBAAmB,EACnB,IAAI,GAGL,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAG/D;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,mBAGxC;IAYoB;IACA;IAZnB;;;;;;;;;OASG;IACH,YACmB,UAA2B,EAC3B,MAAc,EAC/B,
|
|
1
|
+
{"version":3,"file":"subagent-tool-wrapper.js","sourceRoot":"","sources":["../../../src/agents/subagent-tool-wrapper.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,mBAAmB,EACnB,IAAI,GAGL,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAG/D;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,mBAGxC;IAYoB;IACA;IAZnB;;;;;;;;;OASG;IACH,YACmB,UAA2B,EAC3B,MAAc,EAC/B,UAAsB;QAEtB,MAAM,eAAe,GAAG,8BAA8B,CACpD,UAAU,CAAC,WAAW,CACvB,CAAC;QAEF,KAAK,CACH,UAAU,CAAC,IAAI,EACf,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,IAAI,EACzC,UAAU,CAAC,WAAW,EACtB,IAAI,CAAC,KAAK,EACV,eAAe,EACf,UAAU;QACV,sBAAsB,CAAC,IAAI;QAC3B,qBAAqB,CAAC,IAAI,CAC3B,CAAC;QAjBe,eAAU,GAAV,UAAU,CAAiB;QAC3B,WAAM,GAAN,MAAM,CAAQ;IAiBjC,CAAC;IAED;;;;;;;;OAQG;IACO,gBAAgB,CACxB,MAAmB,EACnB,UAAsB,EACtB,SAAkB,EAClB,gBAAyB;QAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,MAAM,mBAAmB,GAAG,UAAU,CAAC;QAEvC,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,IAAI,qBAAqB,CAC9B,UAAU,EACV,MAAM,EACN,mBAAmB,EACnB,SAAS,EACT,gBAAgB,CACjB,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,uBAAuB,CAChC,UAAU,EACV,IAAI,CAAC,MAAM,EACX,MAAM,EACN,mBAAmB,EACnB,SAAS,EACT,gBAAgB,CACjB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -9,6 +9,7 @@ import { LocalSubagentInvocation } from './local-invocation.js';
|
|
|
9
9
|
import { convertInputConfigToJsonSchema } from './schema-utils.js';
|
|
10
10
|
import { makeFakeConfig } from '../test-utils/config.js';
|
|
11
11
|
import { Kind } from '../tools/tools.js';
|
|
12
|
+
import { createMockMessageBus } from '../test-utils/mock-message-bus.js';
|
|
12
13
|
// Mock dependencies to isolate the SubagentToolWrapper class
|
|
13
14
|
vi.mock('./local-invocation.js');
|
|
14
15
|
vi.mock('./schema-utils.js');
|
|
@@ -16,6 +17,7 @@ const MockedLocalSubagentInvocation = vi.mocked(LocalSubagentInvocation);
|
|
|
16
17
|
const mockConvertInputConfigToJsonSchema = vi.mocked(convertInputConfigToJsonSchema);
|
|
17
18
|
// Define reusable test data
|
|
18
19
|
let mockConfig;
|
|
20
|
+
let mockMessageBus;
|
|
19
21
|
const mockDefinition = {
|
|
20
22
|
kind: 'local',
|
|
21
23
|
name: 'TestAgent',
|
|
@@ -47,17 +49,18 @@ describe('SubagentToolWrapper', () => {
|
|
|
47
49
|
beforeEach(() => {
|
|
48
50
|
vi.clearAllMocks();
|
|
49
51
|
mockConfig = makeFakeConfig();
|
|
52
|
+
mockMessageBus = createMockMessageBus();
|
|
50
53
|
// Provide a mock implementation for the schema conversion utility
|
|
51
54
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
52
55
|
mockConvertInputConfigToJsonSchema.mockReturnValue(mockSchema);
|
|
53
56
|
});
|
|
54
57
|
describe('constructor', () => {
|
|
55
58
|
it('should call convertInputConfigToJsonSchema with the correct agent inputConfig', () => {
|
|
56
|
-
new SubagentToolWrapper(mockDefinition, mockConfig);
|
|
59
|
+
new SubagentToolWrapper(mockDefinition, mockConfig, mockMessageBus);
|
|
57
60
|
expect(convertInputConfigToJsonSchema).toHaveBeenCalledExactlyOnceWith(mockDefinition.inputConfig);
|
|
58
61
|
});
|
|
59
62
|
it('should correctly configure the tool properties from the agent definition', () => {
|
|
60
|
-
const wrapper = new SubagentToolWrapper(mockDefinition, mockConfig);
|
|
63
|
+
const wrapper = new SubagentToolWrapper(mockDefinition, mockConfig, mockMessageBus);
|
|
61
64
|
expect(wrapper.name).toBe(mockDefinition.name);
|
|
62
65
|
expect(wrapper.displayName).toBe(mockDefinition.displayName);
|
|
63
66
|
expect(wrapper.description).toBe(mockDefinition.description);
|
|
@@ -70,11 +73,11 @@ describe('SubagentToolWrapper', () => {
|
|
|
70
73
|
...mockDefinition,
|
|
71
74
|
displayName: undefined,
|
|
72
75
|
};
|
|
73
|
-
const wrapper = new SubagentToolWrapper(definitionWithoutDisplayName, mockConfig);
|
|
76
|
+
const wrapper = new SubagentToolWrapper(definitionWithoutDisplayName, mockConfig, mockMessageBus);
|
|
74
77
|
expect(wrapper.displayName).toBe(definitionWithoutDisplayName.name);
|
|
75
78
|
});
|
|
76
79
|
it('should generate a valid tool schema using the definition and converted schema', () => {
|
|
77
|
-
const wrapper = new SubagentToolWrapper(mockDefinition, mockConfig);
|
|
80
|
+
const wrapper = new SubagentToolWrapper(mockDefinition, mockConfig, mockMessageBus);
|
|
78
81
|
const schema = wrapper.schema;
|
|
79
82
|
expect(schema.name).toBe(mockDefinition.name);
|
|
80
83
|
expect(schema.description).toBe(mockDefinition.description);
|
|
@@ -83,22 +86,26 @@ describe('SubagentToolWrapper', () => {
|
|
|
83
86
|
});
|
|
84
87
|
describe('createInvocation', () => {
|
|
85
88
|
it('should create a LocalSubagentInvocation with the correct parameters', () => {
|
|
86
|
-
const wrapper = new SubagentToolWrapper(mockDefinition, mockConfig);
|
|
89
|
+
const wrapper = new SubagentToolWrapper(mockDefinition, mockConfig, mockMessageBus);
|
|
87
90
|
const params = { goal: 'Test the invocation', priority: 1 };
|
|
88
91
|
// The public `build` method calls the protected `createInvocation` after validation
|
|
89
92
|
const invocation = wrapper.build(params);
|
|
90
93
|
expect(invocation).toBeInstanceOf(LocalSubagentInvocation);
|
|
91
|
-
expect(MockedLocalSubagentInvocation).toHaveBeenCalledExactlyOnceWith(mockDefinition, mockConfig, params,
|
|
94
|
+
expect(MockedLocalSubagentInvocation).toHaveBeenCalledExactlyOnceWith(mockDefinition, mockConfig, params, mockMessageBus, mockDefinition.name, mockDefinition.displayName);
|
|
92
95
|
});
|
|
93
96
|
it('should pass the messageBus to the LocalSubagentInvocation constructor', () => {
|
|
94
|
-
const
|
|
95
|
-
|
|
97
|
+
const specificMessageBus = {
|
|
98
|
+
publish: vi.fn(),
|
|
99
|
+
subscribe: vi.fn(),
|
|
100
|
+
unsubscribe: vi.fn(),
|
|
101
|
+
};
|
|
102
|
+
const wrapper = new SubagentToolWrapper(mockDefinition, mockConfig, specificMessageBus);
|
|
96
103
|
const params = { goal: 'Test the invocation', priority: 1 };
|
|
97
104
|
wrapper.build(params);
|
|
98
|
-
expect(MockedLocalSubagentInvocation).toHaveBeenCalledWith(mockDefinition, mockConfig, params,
|
|
105
|
+
expect(MockedLocalSubagentInvocation).toHaveBeenCalledWith(mockDefinition, mockConfig, params, specificMessageBus, mockDefinition.name, mockDefinition.displayName);
|
|
99
106
|
});
|
|
100
107
|
it('should throw a validation error for invalid parameters before creating an invocation', () => {
|
|
101
|
-
const wrapper = new SubagentToolWrapper(mockDefinition, mockConfig);
|
|
108
|
+
const wrapper = new SubagentToolWrapper(mockDefinition, mockConfig, mockMessageBus);
|
|
102
109
|
// Missing the required 'goal' parameter
|
|
103
110
|
const invalidParams = { priority: 1 };
|
|
104
111
|
// The `build` method in the base class performs JSON schema validation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-tool-wrapper.test.js","sourceRoot":"","sources":["../../../src/agents/subagent-tool-wrapper.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAGzD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"subagent-tool-wrapper.test.js","sourceRoot":"","sources":["../../../src/agents/subagent-tool-wrapper.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,12 @@ export interface OutputObject {
|
|
|
32
32
|
* Used primarily for templating the system prompt. (Replaces ContextState)
|
|
33
33
|
*/
|
|
34
34
|
export type AgentInputs = Record<string, unknown>;
|
|
35
|
+
/**
|
|
36
|
+
* Simplified input structure for Remote Agents, which consumes a single string query.
|
|
37
|
+
*/
|
|
38
|
+
export type RemoteAgentInputs = {
|
|
39
|
+
query: string;
|
|
40
|
+
};
|
|
35
41
|
/**
|
|
36
42
|
* Structured events emitted during subagent execution for user observability.
|
|
37
43
|
*/
|
|
@@ -232,7 +232,37 @@ async function initOauthClient(authType, config) {
|
|
|
232
232
|
'Please try again or use NO_BROWSER=true for manual authentication.'));
|
|
233
233
|
}, authTimeout);
|
|
234
234
|
});
|
|
235
|
-
|
|
235
|
+
// Listen for SIGINT to stop waiting for auth so the terminal doesn't hang
|
|
236
|
+
// if the user chooses not to auth.
|
|
237
|
+
let sigIntHandler;
|
|
238
|
+
let stdinHandler;
|
|
239
|
+
const cancellationPromise = new Promise((_, reject) => {
|
|
240
|
+
sigIntHandler = () => reject(new FatalCancellationError('Authentication cancelled by user.'));
|
|
241
|
+
process.on('SIGINT', sigIntHandler);
|
|
242
|
+
// Note that SIGINT might not get raised on Ctrl+C in raw mode
|
|
243
|
+
// so we also need to look for Ctrl+C directly in stdin.
|
|
244
|
+
stdinHandler = (data) => {
|
|
245
|
+
if (data.includes(0x03)) {
|
|
246
|
+
reject(new FatalCancellationError('Authentication cancelled by user.'));
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
process.stdin.on('data', stdinHandler);
|
|
250
|
+
});
|
|
251
|
+
try {
|
|
252
|
+
await Promise.race([
|
|
253
|
+
webLogin.loginCompletePromise,
|
|
254
|
+
timeoutPromise,
|
|
255
|
+
cancellationPromise,
|
|
256
|
+
]);
|
|
257
|
+
}
|
|
258
|
+
finally {
|
|
259
|
+
if (sigIntHandler) {
|
|
260
|
+
process.removeListener('SIGINT', sigIntHandler);
|
|
261
|
+
}
|
|
262
|
+
if (stdinHandler) {
|
|
263
|
+
process.stdin.removeListener('data', stdinHandler);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
236
266
|
coreEvents.emit(CoreEvent.UserFeedback, {
|
|
237
267
|
severity: 'info',
|
|
238
268
|
message: 'Authentication succeeded\n',
|