@google/gemini-cli-core 0.31.0-preview.2 → 0.32.0-preview.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/docs/changelogs/index.md +22 -0
- package/dist/docs/changelogs/latest.md +307 -352
- package/dist/docs/changelogs/preview.md +391 -293
- package/dist/docs/cli/plan-mode.md +29 -7
- package/dist/docs/cli/settings.md +15 -6
- package/dist/docs/cli/telemetry.md +39 -11
- package/dist/docs/extensions/reference.md +36 -0
- package/dist/docs/get-started/installation.md +1 -1
- package/dist/docs/local-development.md +49 -43
- package/dist/docs/reference/configuration.md +32 -0
- package/dist/docs/reference/keyboard-shortcuts.md +6 -6
- package/dist/docs/reference/policy-engine.md +4 -3
- package/dist/docs/resources/faq.md +13 -0
- package/dist/docs/resources/tos-privacy.md +6 -0
- package/dist/docs/resources/uninstall.md +1 -10
- package/dist/docs/tools/mcp-server.md +22 -0
- package/dist/src/agents/a2a-client-manager.d.ts +7 -6
- package/dist/src/agents/a2a-client-manager.js +8 -9
- package/dist/src/agents/a2a-client-manager.js.map +1 -1
- package/dist/src/agents/a2a-client-manager.test.js +45 -31
- package/dist/src/agents/a2a-client-manager.test.js.map +1 -1
- package/dist/src/agents/a2aUtils.d.ts +25 -7
- package/dist/src/agents/a2aUtils.js +165 -58
- package/dist/src/agents/a2aUtils.js.map +1 -1
- package/dist/src/agents/a2aUtils.test.js +170 -27
- package/dist/src/agents/a2aUtils.test.js.map +1 -1
- package/dist/src/agents/generalist-agent.js +1 -2
- package/dist/src/agents/generalist-agent.js.map +1 -1
- package/dist/src/agents/registry.test.js +4 -2
- package/dist/src/agents/registry.test.js.map +1 -1
- package/dist/src/agents/remote-invocation.d.ts +2 -1
- package/dist/src/agents/remote-invocation.js +41 -22
- package/dist/src/agents/remote-invocation.js.map +1 -1
- package/dist/src/agents/remote-invocation.test.js +196 -56
- package/dist/src/agents/remote-invocation.test.js.map +1 -1
- package/dist/src/agents/subagent-tool-wrapper.js +1 -1
- package/dist/src/agents/subagent-tool-wrapper.test.js +1 -1
- package/dist/src/agents/subagent-tool.js +15 -2
- package/dist/src/agents/subagent-tool.js.map +1 -1
- package/dist/src/agents/subagent-tool.test.js +31 -0
- package/dist/src/agents/subagent-tool.test.js.map +1 -1
- package/dist/src/billing/billing.d.ts +80 -0
- package/dist/src/billing/billing.js +127 -0
- package/dist/src/billing/billing.js.map +1 -0
- package/dist/src/billing/billing.test.d.ts +6 -0
- package/dist/src/billing/billing.test.js +182 -0
- package/dist/src/billing/billing.test.js.map +1 -0
- package/dist/src/billing/index.d.ts +6 -0
- package/dist/src/billing/index.js +7 -0
- package/dist/src/billing/index.js.map +1 -0
- 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/converter.d.ts +9 -4
- package/dist/src/code_assist/converter.js +17 -2
- package/dist/src/code_assist/converter.js.map +1 -1
- package/dist/src/code_assist/converter.test.js.map +1 -1
- package/dist/src/code_assist/oauth2.js +6 -3
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +1 -0
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/server.d.ts +9 -4
- package/dist/src/code_assist/server.js +86 -5
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/server.test.js +11 -0
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/code_assist/setup.d.ts +2 -1
- package/dist/src/code_assist/setup.js +15 -4
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/code_assist/types.d.ts +33 -10
- package/dist/src/code_assist/types.js.map +1 -1
- package/dist/src/config/config.d.ts +50 -4
- package/dist/src/config/config.js +77 -3
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +151 -1
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/storage.d.ts +1 -0
- package/dist/src/config/storage.js +4 -1
- package/dist/src/config/storage.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +3 -2
- package/dist/src/core/contentGenerator.js +9 -2
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/coreToolScheduler.js +2 -1
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +21 -2
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/fakeContentGenerator.d.ts +2 -1
- package/dist/src/core/fakeContentGenerator.js +1 -0
- package/dist/src/core/fakeContentGenerator.js.map +1 -1
- package/dist/src/core/geminiChat.js +6 -2
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +34 -0
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/localLiteRtLmClient.d.ts +24 -0
- package/dist/src/core/localLiteRtLmClient.js +77 -0
- package/dist/src/core/localLiteRtLmClient.js.map +1 -0
- package/dist/src/core/localLiteRtLmClient.test.d.ts +6 -0
- package/dist/src/core/localLiteRtLmClient.test.js +87 -0
- package/dist/src/core/localLiteRtLmClient.test.js.map +1 -0
- package/dist/src/core/loggingContentGenerator.d.ts +2 -1
- package/dist/src/core/loggingContentGenerator.js +39 -17
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.test.js +122 -5
- package/dist/src/core/loggingContentGenerator.test.js.map +1 -1
- package/dist/src/core/prompts.test.js +1 -1
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/fallback/handler.js +2 -0
- package/dist/src/fallback/handler.js.map +1 -1
- package/dist/src/fallback/types.d.ts +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/policy/config.d.ts +18 -6
- package/dist/src/policy/config.js +51 -14
- package/dist/src/policy/config.js.map +1 -1
- package/dist/src/policy/config.test.js +26 -26
- package/dist/src/policy/config.test.js.map +1 -1
- package/dist/src/policy/persistence.test.js +9 -14
- package/dist/src/policy/persistence.test.js.map +1 -1
- package/dist/src/policy/policies/plan.toml +1 -1
- package/dist/src/policy/policy-engine.d.ts +8 -0
- package/dist/src/policy/policy-engine.js +12 -0
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/policy-engine.test.js +93 -0
- package/dist/src/policy/policy-engine.test.js.map +1 -1
- package/dist/src/policy/policy-updater.test.js +1 -1
- package/dist/src/policy/policy-updater.test.js.map +1 -1
- package/dist/src/policy/toml-loader.d.ts +1 -1
- package/dist/src/policy/toml-loader.js +4 -2
- package/dist/src/policy/toml-loader.js.map +1 -1
- package/dist/src/policy/toml-loader.test.js +15 -12
- package/dist/src/policy/toml-loader.test.js.map +1 -1
- package/dist/src/policy/workspace-policy.test.js +10 -10
- package/dist/src/prompts/snippets.js +43 -27
- package/dist/src/prompts/snippets.js.map +1 -1
- package/dist/src/routing/modelRouterService.js +19 -11
- package/dist/src/routing/modelRouterService.js.map +1 -1
- package/dist/src/routing/modelRouterService.test.js +38 -1
- package/dist/src/routing/modelRouterService.test.js.map +1 -1
- package/dist/src/routing/routingStrategy.d.ts +3 -2
- package/dist/src/routing/strategies/classifierStrategy.d.ts +2 -1
- 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 +15 -13
- package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/compositeStrategy.d.ts +2 -1
- package/dist/src/routing/strategies/compositeStrategy.js +3 -3
- package/dist/src/routing/strategies/compositeStrategy.js.map +1 -1
- package/dist/src/routing/strategies/compositeStrategy.test.js +10 -8
- package/dist/src/routing/strategies/compositeStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/defaultStrategy.d.ts +2 -1
- package/dist/src/routing/strategies/defaultStrategy.js +1 -1
- package/dist/src/routing/strategies/defaultStrategy.js.map +1 -1
- package/dist/src/routing/strategies/defaultStrategy.test.js +8 -4
- package/dist/src/routing/strategies/defaultStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.d.ts +2 -1
- package/dist/src/routing/strategies/fallbackStrategy.js +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.test.js +6 -5
- package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/gemmaClassifierStrategy.d.ts +14 -0
- package/dist/src/routing/strategies/gemmaClassifierStrategy.js +182 -0
- package/dist/src/routing/strategies/gemmaClassifierStrategy.js.map +1 -0
- package/dist/src/routing/strategies/gemmaClassifierStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/gemmaClassifierStrategy.test.js +218 -0
- package/dist/src/routing/strategies/gemmaClassifierStrategy.test.js.map +1 -0
- package/dist/src/routing/strategies/numericalClassifierStrategy.d.ts +2 -1
- package/dist/src/routing/strategies/numericalClassifierStrategy.js +1 -1
- package/dist/src/routing/strategies/numericalClassifierStrategy.js.map +1 -1
- package/dist/src/routing/strategies/numericalClassifierStrategy.test.js +24 -22
- package/dist/src/routing/strategies/numericalClassifierStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/overrideStrategy.d.ts +2 -1
- package/dist/src/routing/strategies/overrideStrategy.js +1 -1
- package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
- package/dist/src/routing/strategies/overrideStrategy.test.js +5 -4
- package/dist/src/routing/strategies/overrideStrategy.test.js.map +1 -1
- package/dist/src/scheduler/scheduler.d.ts +1 -0
- package/dist/src/scheduler/scheduler.js +18 -7
- package/dist/src/scheduler/scheduler.js.map +1 -1
- package/dist/src/scheduler/scheduler.test.js +19 -1
- package/dist/src/scheduler/scheduler.test.js.map +1 -1
- package/dist/src/scheduler/scheduler_parallel.test.js +94 -3
- package/dist/src/scheduler/scheduler_parallel.test.js.map +1 -1
- package/dist/src/scheduler/tool-executor.js +21 -12
- package/dist/src/scheduler/tool-executor.js.map +1 -1
- package/dist/src/scheduler/tool-executor.test.js +54 -0
- package/dist/src/scheduler/tool-executor.test.js.map +1 -1
- package/dist/src/services/trackerService.d.ts +49 -0
- package/dist/src/services/trackerService.js +172 -0
- package/dist/src/services/trackerService.js.map +1 -0
- package/dist/src/services/trackerService.test.d.ts +6 -0
- package/dist/src/services/trackerService.test.js +117 -0
- package/dist/src/services/trackerService.test.js.map +1 -0
- package/dist/src/services/trackerTypes.d.ts +51 -0
- package/dist/src/services/trackerTypes.js +33 -0
- package/dist/src/services/trackerTypes.js.map +1 -0
- package/dist/src/telemetry/billingEvents.d.ts +75 -0
- package/dist/src/telemetry/billingEvents.js +181 -0
- package/dist/src/telemetry/billingEvents.js.map +1 -0
- package/dist/src/telemetry/billingEvents.test.d.ts +6 -0
- package/dist/src/telemetry/billingEvents.test.js +139 -0
- package/dist/src/telemetry/billingEvents.test.js.map +1 -0
- package/dist/src/telemetry/conseca-logger.test.js +1 -0
- package/dist/src/telemetry/conseca-logger.test.js.map +1 -1
- package/dist/src/telemetry/constants.d.ts +25 -0
- package/dist/src/telemetry/constants.js +29 -0
- package/dist/src/telemetry/constants.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +3 -1
- package/dist/src/telemetry/index.js +5 -1
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +2 -0
- package/dist/src/telemetry/loggers.js +10 -0
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +16 -0
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +28 -0
- package/dist/src/telemetry/metrics.js +40 -0
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/sanitize.test.js +1 -0
- package/dist/src/telemetry/sanitize.test.js.map +1 -1
- package/dist/src/telemetry/sdk.test.js +1 -0
- package/dist/src/telemetry/sdk.test.js.map +1 -1
- package/dist/src/telemetry/telemetryAttributes.js +2 -0
- package/dist/src/telemetry/telemetryAttributes.js.map +1 -1
- package/dist/src/telemetry/trace.d.ts +2 -1
- package/dist/src/telemetry/trace.js +13 -18
- package/dist/src/telemetry/trace.js.map +1 -1
- package/dist/src/telemetry/trace.test.d.ts +6 -0
- package/dist/src/telemetry/trace.test.js +116 -0
- package/dist/src/telemetry/trace.test.js.map +1 -0
- package/dist/src/tools/confirmation-policy.test.js +1 -0
- package/dist/src/tools/confirmation-policy.test.js.map +1 -1
- package/dist/src/tools/definitions/model-family-sets/default-legacy.js +2 -2
- package/dist/src/tools/definitions/model-family-sets/default-legacy.js.map +1 -1
- package/dist/src/tools/definitions/model-family-sets/gemini-3.js +3 -3
- package/dist/src/tools/definitions/model-family-sets/gemini-3.js.map +1 -1
- package/dist/src/tools/grep-utils.d.ts +1 -1
- package/dist/src/tools/grep-utils.js +4 -4
- package/dist/src/tools/grep-utils.js.map +1 -1
- package/dist/src/tools/grep.d.ts +1 -1
- package/dist/src/tools/grep.js +9 -9
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/grep.test.js +8 -5
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/line-endings.test.js +3 -11
- package/dist/src/tools/line-endings.test.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.d.ts +25 -0
- package/dist/src/tools/mcp-client-manager.js +66 -3
- package/dist/src/tools/mcp-client-manager.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.test.js +47 -0
- package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +20 -9
- package/dist/src/tools/mcp-client.js +50 -46
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +96 -84
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +3 -3
- package/dist/src/tools/mcp-tool.js +1 -0
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/ripGrep.d.ts +1 -1
- package/dist/src/tools/ripGrep.js +7 -7
- package/dist/src/tools/ripGrep.js.map +1 -1
- package/dist/src/tools/ripGrep.test.js +10 -7
- package/dist/src/tools/ripGrep.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +1 -0
- package/dist/src/tools/tools.js +1 -0
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/write-file.js +4 -17
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +29 -83
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/utils/editCorrector.d.ts +1 -42
- package/dist/src/utils/editCorrector.js +9 -461
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editCorrector.test.js +17 -421
- package/dist/src/utils/editCorrector.test.js.map +1 -1
- package/dist/src/utils/envExpansion.js.map +1 -1
- package/dist/src/utils/errors.js +7 -0
- package/dist/src/utils/errors.js.map +1 -1
- package/dist/src/utils/errors_timeout.test.d.ts +6 -0
- package/dist/src/utils/errors_timeout.test.js +40 -0
- package/dist/src/utils/errors_timeout.test.js.map +1 -0
- package/dist/src/utils/extensionLoader.js +35 -0
- package/dist/src/utils/extensionLoader.js.map +1 -1
- package/dist/src/utils/extensionLoader.test.js +36 -0
- package/dist/src/utils/extensionLoader.test.js.map +1 -1
- package/dist/src/utils/fetch.js +13 -2
- package/dist/src/utils/fetch.js.map +1 -1
- package/dist/src/utils/fileUtils.js +0 -1
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +0 -1
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/flashFallback.test.js +24 -0
- package/dist/src/utils/flashFallback.test.js.map +1 -1
- package/dist/src/utils/googleErrors.d.ts +2 -2
- package/dist/src/utils/googleQuotaErrors.d.ts +3 -1
- package/dist/src/utils/googleQuotaErrors.js +22 -12
- package/dist/src/utils/googleQuotaErrors.js.map +1 -1
- package/dist/src/utils/googleQuotaErrors.test.js +33 -1
- package/dist/src/utils/googleQuotaErrors.test.js.map +1 -1
- package/dist/src/utils/retry.js +4 -2
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/retry.test.js +20 -0
- package/dist/src/utils/retry.test.js.map +1 -1
- package/dist/src/utils/schemaValidator.js +0 -1
- package/dist/src/utils/schemaValidator.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/google-gemini-cli-core-0.31.0-preview.1.tgz +0 -0
|
@@ -73,14 +73,14 @@ export class A2AClientManager {
|
|
|
73
73
|
debugLogger.debug('[A2AClientManager] Cache cleared.');
|
|
74
74
|
}
|
|
75
75
|
/**
|
|
76
|
-
* Sends a message to a loaded agent.
|
|
76
|
+
* Sends a message to a loaded agent and returns a stream of responses.
|
|
77
77
|
* @param agentName The name of the agent to send the message to.
|
|
78
78
|
* @param message The message content.
|
|
79
79
|
* @param options Optional context and task IDs to maintain conversation state.
|
|
80
|
-
* @returns
|
|
80
|
+
* @returns An async iterable of responses from the agent (Message or Task).
|
|
81
81
|
* @throws Error if the agent returns an error response.
|
|
82
82
|
*/
|
|
83
|
-
async
|
|
83
|
+
async *sendMessageStream(agentName, message, options) {
|
|
84
84
|
const client = this.clients.get(agentName);
|
|
85
85
|
if (!client) {
|
|
86
86
|
throw new Error(`Agent '${agentName}' not found.`);
|
|
@@ -94,19 +94,18 @@ export class A2AClientManager {
|
|
|
94
94
|
contextId: options?.contextId,
|
|
95
95
|
taskId: options?.taskId,
|
|
96
96
|
},
|
|
97
|
-
configuration: {
|
|
98
|
-
blocking: true,
|
|
99
|
-
},
|
|
100
97
|
};
|
|
101
98
|
try {
|
|
102
|
-
|
|
99
|
+
yield* client.sendMessageStream(messageParams, {
|
|
100
|
+
signal: options?.signal,
|
|
101
|
+
});
|
|
103
102
|
}
|
|
104
103
|
catch (error) {
|
|
105
|
-
const prefix = `
|
|
104
|
+
const prefix = `[A2AClientManager] sendMessageStream Error [${agentName}]`;
|
|
106
105
|
if (error instanceof Error) {
|
|
107
106
|
throw new Error(`${prefix}: ${error.message}`, { cause: error });
|
|
108
107
|
}
|
|
109
|
-
throw new Error(`${prefix}: Unexpected error during
|
|
108
|
+
throw new Error(`${prefix}: Unexpected error during sendMessageStream: ${String(error)}`);
|
|
110
109
|
}
|
|
111
110
|
}
|
|
112
111
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a2a-client-manager.js","sourceRoot":"","sources":["../../../src/agents/a2a-client-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"a2a-client-manager.js","sourceRoot":"","sources":["../../../src/agents/a2a-client-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,13 +36,13 @@ vi.mock('@a2a-js/sdk/client', () => {
|
|
|
36
36
|
describe('A2AClientManager', () => {
|
|
37
37
|
let manager;
|
|
38
38
|
// Stable mocks initialized once
|
|
39
|
-
const
|
|
39
|
+
const sendMessageStreamMock = vi.fn();
|
|
40
40
|
const getTaskMock = vi.fn();
|
|
41
41
|
const cancelTaskMock = vi.fn();
|
|
42
42
|
const getAgentCardMock = vi.fn();
|
|
43
43
|
const authFetchMock = vi.fn();
|
|
44
44
|
const mockClient = {
|
|
45
|
-
|
|
45
|
+
sendMessageStream: sendMessageStreamMock,
|
|
46
46
|
getTask: getTaskMock,
|
|
47
47
|
cancelTask: cancelTaskMock,
|
|
48
48
|
getAgentCard: getAgentCardMock,
|
|
@@ -115,56 +115,70 @@ describe('A2AClientManager', () => {
|
|
|
115
115
|
expect(debugLogger.debug).toHaveBeenCalledWith('[A2AClientManager] Cache cleared.');
|
|
116
116
|
});
|
|
117
117
|
});
|
|
118
|
-
describe('
|
|
118
|
+
describe('sendMessageStream', () => {
|
|
119
119
|
beforeEach(async () => {
|
|
120
120
|
await manager.loadAgent('TestAgent', 'http://test.agent');
|
|
121
121
|
});
|
|
122
|
-
it('should send a message
|
|
123
|
-
|
|
122
|
+
it('should send a message and return a stream', async () => {
|
|
123
|
+
const mockResult = {
|
|
124
124
|
kind: 'message',
|
|
125
125
|
messageId: 'a',
|
|
126
126
|
parts: [],
|
|
127
127
|
role: 'agent',
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
|
|
128
|
+
};
|
|
129
|
+
sendMessageStreamMock.mockReturnValue((async function* () {
|
|
130
|
+
yield mockResult;
|
|
131
|
+
})());
|
|
132
|
+
const stream = manager.sendMessageStream('TestAgent', 'Hello');
|
|
133
|
+
const results = [];
|
|
134
|
+
for await (const res of stream) {
|
|
135
|
+
results.push(res);
|
|
136
|
+
}
|
|
137
|
+
expect(results).toEqual([mockResult]);
|
|
138
|
+
expect(sendMessageStreamMock).toHaveBeenCalledWith(expect.objectContaining({
|
|
131
139
|
message: expect.anything(),
|
|
132
|
-
}));
|
|
140
|
+
}), expect.any(Object));
|
|
133
141
|
});
|
|
134
142
|
it('should use contextId and taskId when provided', async () => {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
143
|
+
sendMessageStreamMock.mockReturnValue((async function* () {
|
|
144
|
+
yield {
|
|
145
|
+
kind: 'message',
|
|
146
|
+
messageId: 'a',
|
|
147
|
+
parts: [],
|
|
148
|
+
role: 'agent',
|
|
149
|
+
};
|
|
150
|
+
})());
|
|
141
151
|
const expectedContextId = 'user-context-id';
|
|
142
152
|
const expectedTaskId = 'user-task-id';
|
|
143
|
-
|
|
153
|
+
const stream = manager.sendMessageStream('TestAgent', 'Hello', {
|
|
144
154
|
contextId: expectedContextId,
|
|
145
155
|
taskId: expectedTaskId,
|
|
146
156
|
});
|
|
147
|
-
const
|
|
157
|
+
for await (const _ of stream) {
|
|
158
|
+
// consume stream
|
|
159
|
+
}
|
|
160
|
+
const call = sendMessageStreamMock.mock.calls[0][0];
|
|
148
161
|
expect(call.message.contextId).toBe(expectedContextId);
|
|
149
162
|
expect(call.message.taskId).toBe(expectedTaskId);
|
|
150
163
|
});
|
|
151
|
-
it('should return result from client', async () => {
|
|
152
|
-
const mockResult = {
|
|
153
|
-
contextId: 'server-context-id',
|
|
154
|
-
id: 'ctx-1',
|
|
155
|
-
kind: 'task',
|
|
156
|
-
status: { state: 'working' },
|
|
157
|
-
};
|
|
158
|
-
sendMessageMock.mockResolvedValueOnce(mockResult);
|
|
159
|
-
const response = await manager.sendMessage('TestAgent', 'Hello');
|
|
160
|
-
expect(response).toEqual(mockResult);
|
|
161
|
-
});
|
|
162
164
|
it('should throw prefixed error on failure', async () => {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
+
sendMessageStreamMock.mockImplementationOnce(() => {
|
|
166
|
+
throw new Error('Network error');
|
|
167
|
+
});
|
|
168
|
+
const stream = manager.sendMessageStream('TestAgent', 'Hello');
|
|
169
|
+
await expect(async () => {
|
|
170
|
+
for await (const _ of stream) {
|
|
171
|
+
// consume
|
|
172
|
+
}
|
|
173
|
+
}).rejects.toThrow('[A2AClientManager] sendMessageStream Error [TestAgent]: Network error');
|
|
165
174
|
});
|
|
166
175
|
it('should throw an error if the agent is not found', async () => {
|
|
167
|
-
|
|
176
|
+
const stream = manager.sendMessageStream('NonExistentAgent', 'Hello');
|
|
177
|
+
await expect(async () => {
|
|
178
|
+
for await (const _ of stream) {
|
|
179
|
+
// consume
|
|
180
|
+
}
|
|
181
|
+
}).rejects.toThrow("Agent 'NonExistentAgent' not found.");
|
|
168
182
|
});
|
|
169
183
|
});
|
|
170
184
|
describe('getTask', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a2a-client-manager.test.js","sourceRoot":"","sources":["../../../src/agents/a2a-client-manager.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EACL,gBAAgB,GAEjB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,kCAAkC,EAClC,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,EAAE,CAAC,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,WAAW,EAAE;QACX,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;KACf;CACF,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE;IACjC,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAC9B,MAAM,wBAAwB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IACzC,MAAM,oBAAoB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IACrC,MAAM,uBAAuB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IACxC,MAAM,oBAAoB,GAAG;QAC3B,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;KACpB,CAAC;IACF,MAAM,kCAAkC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAEnD,wBAAwB,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IACrD,aAAa,CAAC,SAAS,CAAC,aAAa,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAEhD,OAAO;QACL,aAAa;QACb,oBAAoB;QACpB,wBAAwB;QACxB,oBAAoB;QACpB,uBAAuB;QACvB,kCAAkC;KACnC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,OAAyB,CAAC;IAE9B,gCAAgC;IAChC,MAAM,
|
|
1
|
+
{"version":3,"file":"a2a-client-manager.test.js","sourceRoot":"","sources":["../../../src/agents/a2a-client-manager.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,23 +3,41 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import type { Message,
|
|
6
|
+
import type { Message, TaskState } from '@a2a-js/sdk';
|
|
7
|
+
import type { SendMessageResult } from './a2a-client-manager.js';
|
|
8
|
+
/**
|
|
9
|
+
* Reassembles incremental A2A streaming updates into a coherent result.
|
|
10
|
+
* Shows sequential status/messages followed by all reassembled artifacts.
|
|
11
|
+
*/
|
|
12
|
+
export declare class A2AResultReassembler {
|
|
13
|
+
private messageLog;
|
|
14
|
+
private artifacts;
|
|
15
|
+
private artifactChunks;
|
|
16
|
+
/**
|
|
17
|
+
* Processes a new chunk from the A2A stream.
|
|
18
|
+
*/
|
|
19
|
+
update(chunk: SendMessageResult): void;
|
|
20
|
+
private pushMessage;
|
|
21
|
+
/**
|
|
22
|
+
* Returns a human-readable string representation of the current reassembled state.
|
|
23
|
+
*/
|
|
24
|
+
toString(): string;
|
|
25
|
+
}
|
|
7
26
|
/**
|
|
8
27
|
* Extracts a human-readable text representation from a Message object.
|
|
9
28
|
* Handles Text, Data (JSON), and File parts.
|
|
10
29
|
*/
|
|
11
30
|
export declare function extractMessageText(message: Message | undefined): string;
|
|
12
31
|
/**
|
|
13
|
-
*
|
|
14
|
-
* Includes the status message and any artifact content with context headers.
|
|
15
|
-
* Technical metadata like ID and State are omitted for better clarity and token efficiency.
|
|
32
|
+
* Returns true if the given state is a terminal state for a task.
|
|
16
33
|
*/
|
|
17
|
-
export declare function
|
|
34
|
+
export declare function isTerminalState(state: TaskState | undefined): boolean;
|
|
18
35
|
/**
|
|
19
|
-
* Extracts contextId and taskId from a Message or
|
|
36
|
+
* Extracts contextId and taskId from a Message, Task, or Update response.
|
|
20
37
|
* Follows the pattern from the A2A CLI sample to maintain conversational continuity.
|
|
21
38
|
*/
|
|
22
|
-
export declare function extractIdsFromResponse(result:
|
|
39
|
+
export declare function extractIdsFromResponse(result: SendMessageResult): {
|
|
23
40
|
contextId?: string;
|
|
24
41
|
taskId?: string;
|
|
42
|
+
clearTaskId?: boolean;
|
|
25
43
|
};
|
|
@@ -3,15 +3,142 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
/**
|
|
7
|
+
* Reassembles incremental A2A streaming updates into a coherent result.
|
|
8
|
+
* Shows sequential status/messages followed by all reassembled artifacts.
|
|
9
|
+
*/
|
|
10
|
+
export class A2AResultReassembler {
|
|
11
|
+
messageLog = [];
|
|
12
|
+
artifacts = new Map();
|
|
13
|
+
artifactChunks = new Map();
|
|
14
|
+
/**
|
|
15
|
+
* Processes a new chunk from the A2A stream.
|
|
16
|
+
*/
|
|
17
|
+
update(chunk) {
|
|
18
|
+
if (!('kind' in chunk))
|
|
19
|
+
return;
|
|
20
|
+
switch (chunk.kind) {
|
|
21
|
+
case 'status-update':
|
|
22
|
+
this.pushMessage(chunk.status?.message);
|
|
23
|
+
break;
|
|
24
|
+
case 'artifact-update':
|
|
25
|
+
if (chunk.artifact) {
|
|
26
|
+
const id = chunk.artifact.artifactId;
|
|
27
|
+
const existing = this.artifacts.get(id);
|
|
28
|
+
if (chunk.append && existing) {
|
|
29
|
+
for (const part of chunk.artifact.parts) {
|
|
30
|
+
existing.parts.push(structuredClone(part));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
this.artifacts.set(id, structuredClone(chunk.artifact));
|
|
35
|
+
}
|
|
36
|
+
const newText = extractPartsText(chunk.artifact.parts, '');
|
|
37
|
+
let chunks = this.artifactChunks.get(id);
|
|
38
|
+
if (!chunks) {
|
|
39
|
+
chunks = [];
|
|
40
|
+
this.artifactChunks.set(id, chunks);
|
|
41
|
+
}
|
|
42
|
+
if (chunk.append) {
|
|
43
|
+
chunks.push(newText);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
chunks.length = 0;
|
|
47
|
+
chunks.push(newText);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
break;
|
|
51
|
+
case 'task':
|
|
52
|
+
this.pushMessage(chunk.status?.message);
|
|
53
|
+
if (chunk.artifacts) {
|
|
54
|
+
for (const art of chunk.artifacts) {
|
|
55
|
+
this.artifacts.set(art.artifactId, structuredClone(art));
|
|
56
|
+
this.artifactChunks.set(art.artifactId, [
|
|
57
|
+
extractPartsText(art.parts, ''),
|
|
58
|
+
]);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// History Fallback: Some agent implementations do not populate the
|
|
62
|
+
// status.message in their final terminal response, instead archiving
|
|
63
|
+
// the final answer in the task's history array. To ensure we don't
|
|
64
|
+
// present an empty result, we fallback to the most recent agent message
|
|
65
|
+
// in the history only when the task is terminal and no other content
|
|
66
|
+
// (message log or artifacts) has been reassembled.
|
|
67
|
+
if (isTerminalState(chunk.status?.state) &&
|
|
68
|
+
this.messageLog.length === 0 &&
|
|
69
|
+
this.artifacts.size === 0 &&
|
|
70
|
+
chunk.history &&
|
|
71
|
+
chunk.history.length > 0) {
|
|
72
|
+
const lastAgentMsg = [...chunk.history]
|
|
73
|
+
.reverse()
|
|
74
|
+
.find((m) => m.role?.toLowerCase().includes('agent'));
|
|
75
|
+
if (lastAgentMsg) {
|
|
76
|
+
this.pushMessage(lastAgentMsg);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
break;
|
|
80
|
+
case 'message': {
|
|
81
|
+
this.pushMessage(chunk);
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
default:
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
pushMessage(message) {
|
|
89
|
+
if (!message)
|
|
90
|
+
return;
|
|
91
|
+
const text = extractPartsText(message.parts, '\n');
|
|
92
|
+
if (text && this.messageLog[this.messageLog.length - 1] !== text) {
|
|
93
|
+
this.messageLog.push(text);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Returns a human-readable string representation of the current reassembled state.
|
|
98
|
+
*/
|
|
99
|
+
toString() {
|
|
100
|
+
const joinedMessages = this.messageLog.join('\n\n');
|
|
101
|
+
const artifactsOutput = Array.from(this.artifacts.keys())
|
|
102
|
+
.map((id) => {
|
|
103
|
+
const chunks = this.artifactChunks.get(id);
|
|
104
|
+
const artifact = this.artifacts.get(id);
|
|
105
|
+
if (!chunks || !artifact)
|
|
106
|
+
return '';
|
|
107
|
+
const content = chunks.join('');
|
|
108
|
+
const header = artifact.name
|
|
109
|
+
? `Artifact (${artifact.name}):`
|
|
110
|
+
: 'Artifact:';
|
|
111
|
+
return `${header}\n${content}`;
|
|
112
|
+
})
|
|
113
|
+
.filter(Boolean)
|
|
114
|
+
.join('\n\n');
|
|
115
|
+
if (joinedMessages && artifactsOutput) {
|
|
116
|
+
return `${joinedMessages}\n\n${artifactsOutput}`;
|
|
117
|
+
}
|
|
118
|
+
return joinedMessages || artifactsOutput;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
6
121
|
/**
|
|
7
122
|
* Extracts a human-readable text representation from a Message object.
|
|
8
123
|
* Handles Text, Data (JSON), and File parts.
|
|
9
124
|
*/
|
|
10
125
|
export function extractMessageText(message) {
|
|
11
|
-
if (!message) {
|
|
126
|
+
if (!message || !message.parts || !Array.isArray(message.parts)) {
|
|
127
|
+
return '';
|
|
128
|
+
}
|
|
129
|
+
return extractPartsText(message.parts, '\n');
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Extracts text from an array of parts, joining them with the specified separator.
|
|
133
|
+
*/
|
|
134
|
+
function extractPartsText(parts, separator) {
|
|
135
|
+
if (!parts || parts.length === 0) {
|
|
12
136
|
return '';
|
|
13
137
|
}
|
|
14
|
-
return
|
|
138
|
+
return parts
|
|
139
|
+
.map((p) => extractPartText(p))
|
|
140
|
+
.filter(Boolean)
|
|
141
|
+
.join(separator);
|
|
15
142
|
}
|
|
16
143
|
/**
|
|
17
144
|
* Extracts text from a single Part.
|
|
@@ -21,7 +148,6 @@ function extractPartText(part) {
|
|
|
21
148
|
return part.text;
|
|
22
149
|
}
|
|
23
150
|
if (isDataPart(part)) {
|
|
24
|
-
// Attempt to format known data types if metadata exists, otherwise JSON stringify
|
|
25
151
|
return `Data: ${JSON.stringify(part.data)}`;
|
|
26
152
|
}
|
|
27
153
|
if (isFilePart(part)) {
|
|
@@ -36,44 +162,6 @@ function extractPartText(part) {
|
|
|
36
162
|
}
|
|
37
163
|
return '';
|
|
38
164
|
}
|
|
39
|
-
/**
|
|
40
|
-
* Extracts a clean, human-readable text summary from a Task object.
|
|
41
|
-
* Includes the status message and any artifact content with context headers.
|
|
42
|
-
* Technical metadata like ID and State are omitted for better clarity and token efficiency.
|
|
43
|
-
*/
|
|
44
|
-
export function extractTaskText(task) {
|
|
45
|
-
const parts = [];
|
|
46
|
-
// Status Message
|
|
47
|
-
const statusMessageText = extractMessageText(task.status?.message);
|
|
48
|
-
if (statusMessageText) {
|
|
49
|
-
parts.push(statusMessageText);
|
|
50
|
-
}
|
|
51
|
-
// Artifacts
|
|
52
|
-
if (task.artifacts) {
|
|
53
|
-
for (const artifact of task.artifacts) {
|
|
54
|
-
const artifactContent = extractPartsText(artifact.parts);
|
|
55
|
-
if (artifactContent) {
|
|
56
|
-
const header = artifact.name
|
|
57
|
-
? `Artifact (${artifact.name}):`
|
|
58
|
-
: 'Artifact:';
|
|
59
|
-
parts.push(`${header}\n${artifactContent}`);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return parts.join('\n\n');
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Extracts text from an array of parts.
|
|
67
|
-
*/
|
|
68
|
-
function extractPartsText(parts) {
|
|
69
|
-
if (!parts || parts.length === 0) {
|
|
70
|
-
return '';
|
|
71
|
-
}
|
|
72
|
-
return parts
|
|
73
|
-
.map((p) => extractPartText(p))
|
|
74
|
-
.filter(Boolean)
|
|
75
|
-
.join('\n');
|
|
76
|
-
}
|
|
77
165
|
// Type Guards
|
|
78
166
|
function isTextPart(part) {
|
|
79
167
|
return part.kind === 'text';
|
|
@@ -84,30 +172,49 @@ function isDataPart(part) {
|
|
|
84
172
|
function isFilePart(part) {
|
|
85
173
|
return part.kind === 'file';
|
|
86
174
|
}
|
|
175
|
+
function isStatusUpdateEvent(result) {
|
|
176
|
+
return result.kind === 'status-update';
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Returns true if the given state is a terminal state for a task.
|
|
180
|
+
*/
|
|
181
|
+
export function isTerminalState(state) {
|
|
182
|
+
return (state === 'completed' ||
|
|
183
|
+
state === 'failed' ||
|
|
184
|
+
state === 'canceled' ||
|
|
185
|
+
state === 'rejected');
|
|
186
|
+
}
|
|
87
187
|
/**
|
|
88
|
-
* Extracts contextId and taskId from a Message or
|
|
188
|
+
* Extracts contextId and taskId from a Message, Task, or Update response.
|
|
89
189
|
* Follows the pattern from the A2A CLI sample to maintain conversational continuity.
|
|
90
190
|
*/
|
|
91
191
|
export function extractIdsFromResponse(result) {
|
|
92
192
|
let contextId;
|
|
93
193
|
let taskId;
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
result.status
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
194
|
+
let clearTaskId = false;
|
|
195
|
+
if ('kind' in result) {
|
|
196
|
+
const kind = result.kind;
|
|
197
|
+
if (kind === 'message' || kind === 'artifact-update') {
|
|
198
|
+
taskId = result.taskId;
|
|
199
|
+
contextId = result.contextId;
|
|
200
|
+
}
|
|
201
|
+
else if (kind === 'task') {
|
|
202
|
+
taskId = result.id;
|
|
203
|
+
contextId = result.contextId;
|
|
204
|
+
if (isTerminalState(result.status?.state)) {
|
|
205
|
+
clearTaskId = true;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
else if (isStatusUpdateEvent(result)) {
|
|
209
|
+
taskId = result.taskId;
|
|
210
|
+
contextId = result.contextId;
|
|
211
|
+
// Note: We ignore the 'final' flag here per A2A protocol best practices,
|
|
212
|
+
// as a stream can close while a task is still in a 'working' state.
|
|
213
|
+
if (isTerminalState(result.status?.state)) {
|
|
214
|
+
clearTaskId = true;
|
|
215
|
+
}
|
|
109
216
|
}
|
|
110
217
|
}
|
|
111
|
-
return { contextId, taskId };
|
|
218
|
+
return { contextId, taskId, clearTaskId };
|
|
112
219
|
}
|
|
113
220
|
//# sourceMappingURL=a2aUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a2aUtils.js","sourceRoot":"","sources":["../../../src/agents/a2aUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"a2aUtils.js","sourceRoot":"","sources":["../../../src/agents/a2aUtils.ts"],"names":[],"mappings":"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"}
|