@google/gemini-cli-core 0.23.0-preview.2 → 0.24.0-nightly.20251227.37be16243

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.
Files changed (155) hide show
  1. package/dist/docs/cli/settings.md +7 -5
  2. package/dist/docs/get-started/configuration.md +67 -0
  3. package/dist/google-gemini-cli-core-0.24.0-nightly.20251226.546baf993.tgz +0 -0
  4. package/dist/src/agents/a2a-client-manager.d.ts +73 -0
  5. package/dist/src/agents/a2a-client-manager.js +165 -0
  6. package/dist/src/agents/a2a-client-manager.js.map +1 -0
  7. package/dist/src/agents/a2a-client-manager.test.d.ts +6 -0
  8. package/dist/src/agents/a2a-client-manager.test.js +211 -0
  9. package/dist/src/agents/a2a-client-manager.test.js.map +1 -0
  10. package/dist/src/agents/local-executor.js +1 -0
  11. package/dist/src/agents/local-executor.js.map +1 -1
  12. package/dist/src/availability/policyHelpers.js +0 -2
  13. package/dist/src/availability/policyHelpers.js.map +1 -1
  14. package/dist/src/code_assist/server.js +7 -2
  15. package/dist/src/code_assist/server.js.map +1 -1
  16. package/dist/src/code_assist/server.test.js +3 -0
  17. package/dist/src/code_assist/server.test.js.map +1 -1
  18. package/dist/src/config/config.d.ts +25 -4
  19. package/dist/src/config/config.js +37 -6
  20. package/dist/src/config/config.js.map +1 -1
  21. package/dist/src/config/config.test.js +18 -0
  22. package/dist/src/config/config.test.js.map +1 -1
  23. package/dist/src/config/models.d.ts +1 -9
  24. package/dist/src/config/models.js +1 -11
  25. package/dist/src/config/models.js.map +1 -1
  26. package/dist/src/config/models.test.js +16 -16
  27. package/dist/src/config/models.test.js.map +1 -1
  28. package/dist/src/confirmation-bus/types.d.ts +1 -1
  29. package/dist/src/core/client.d.ts +1 -1
  30. package/dist/src/core/client.js +3 -3
  31. package/dist/src/core/client.js.map +1 -1
  32. package/dist/src/core/contentGenerator.js +2 -2
  33. package/dist/src/core/contentGenerator.js.map +1 -1
  34. package/dist/src/core/coreToolScheduler.d.ts +5 -85
  35. package/dist/src/core/coreToolScheduler.js +13 -184
  36. package/dist/src/core/coreToolScheduler.js.map +1 -1
  37. package/dist/src/core/coreToolScheduler.test.js +18 -365
  38. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  39. package/dist/src/core/turn.d.ts +3 -21
  40. package/dist/src/core/turn.js +1 -0
  41. package/dist/src/core/turn.js.map +1 -1
  42. package/dist/src/fallback/handler.js +0 -6
  43. package/dist/src/fallback/handler.js.map +1 -1
  44. package/dist/src/generated/git-commit.d.ts +2 -2
  45. package/dist/src/generated/git-commit.js +2 -2
  46. package/dist/src/generated/git-commit.js.map +1 -1
  47. package/dist/src/hooks/hookPlanner.d.ts +1 -5
  48. package/dist/src/hooks/hookPlanner.js +2 -9
  49. package/dist/src/hooks/hookPlanner.js.map +1 -1
  50. package/dist/src/hooks/hookPlanner.test.js +1 -2
  51. package/dist/src/hooks/hookPlanner.test.js.map +1 -1
  52. package/dist/src/hooks/hookRegistry.d.ts +5 -10
  53. package/dist/src/hooks/hookRegistry.js +39 -12
  54. package/dist/src/hooks/hookRegistry.js.map +1 -1
  55. package/dist/src/hooks/hookRegistry.test.js +93 -2
  56. package/dist/src/hooks/hookRegistry.test.js.map +1 -1
  57. package/dist/src/hooks/hookRunner.d.ts +3 -1
  58. package/dist/src/hooks/hookRunner.js +20 -3
  59. package/dist/src/hooks/hookRunner.js.map +1 -1
  60. package/dist/src/hooks/hookRunner.test.js +58 -2
  61. package/dist/src/hooks/hookRunner.test.js.map +1 -1
  62. package/dist/src/hooks/hookSystem.js +1 -1
  63. package/dist/src/hooks/hookSystem.js.map +1 -1
  64. package/dist/src/hooks/index.d.ts +1 -1
  65. package/dist/src/hooks/index.js +1 -1
  66. package/dist/src/hooks/index.js.map +1 -1
  67. package/dist/src/hooks/trustedHooks.d.ts +28 -0
  68. package/dist/src/hooks/trustedHooks.js +90 -0
  69. package/dist/src/hooks/trustedHooks.js.map +1 -0
  70. package/dist/src/hooks/trustedHooks.test.d.ts +6 -0
  71. package/dist/src/hooks/trustedHooks.test.js +154 -0
  72. package/dist/src/hooks/trustedHooks.test.js.map +1 -0
  73. package/dist/src/hooks/types.d.ts +15 -11
  74. package/dist/src/hooks/types.js +19 -30
  75. package/dist/src/hooks/types.js.map +1 -1
  76. package/dist/src/hooks/types.test.js +1 -24
  77. package/dist/src/hooks/types.test.js.map +1 -1
  78. package/dist/src/ide/ide-client.js +3 -0
  79. package/dist/src/ide/ide-client.js.map +1 -1
  80. package/dist/src/index.d.ts +1 -0
  81. package/dist/src/index.js +1 -0
  82. package/dist/src/index.js.map +1 -1
  83. package/dist/src/policy/config.js +34 -17
  84. package/dist/src/policy/config.js.map +1 -1
  85. package/dist/src/policy/persistence.test.js +7 -2
  86. package/dist/src/policy/persistence.test.js.map +1 -1
  87. package/dist/src/policy/policy-engine.d.ts +10 -1
  88. package/dist/src/policy/policy-engine.js +24 -4
  89. package/dist/src/policy/policy-engine.js.map +1 -1
  90. package/dist/src/policy/policy-engine.test.js +26 -2
  91. package/dist/src/policy/policy-engine.test.js.map +1 -1
  92. package/dist/src/policy/policy-updater.test.d.ts +6 -0
  93. package/dist/src/policy/policy-updater.test.js +116 -0
  94. package/dist/src/policy/policy-updater.test.js.map +1 -0
  95. package/dist/src/policy/shell-safety.test.js +2 -1
  96. package/dist/src/policy/shell-safety.test.js.map +1 -1
  97. package/dist/src/policy/toml-loader.d.ts +3 -5
  98. package/dist/src/policy/toml-loader.js +35 -20
  99. package/dist/src/policy/toml-loader.js.map +1 -1
  100. package/dist/src/policy/toml-loader.test.js +28 -7
  101. package/dist/src/policy/toml-loader.test.js.map +1 -1
  102. package/dist/src/policy/types.d.ts +15 -0
  103. package/dist/src/routing/strategies/overrideStrategy.js +2 -2
  104. package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
  105. package/dist/src/scheduler/types.d.ts +95 -0
  106. package/dist/src/scheduler/types.js +7 -0
  107. package/dist/src/scheduler/types.js.map +1 -0
  108. package/dist/src/services/environmentSanitization.d.ts +15 -0
  109. package/dist/src/services/environmentSanitization.js +141 -0
  110. package/dist/src/services/environmentSanitization.js.map +1 -0
  111. package/dist/src/services/environmentSanitization.test.d.ts +6 -0
  112. package/dist/src/services/environmentSanitization.test.js +284 -0
  113. package/dist/src/services/environmentSanitization.test.js.map +1 -0
  114. package/dist/src/services/gitService.js +10 -1
  115. package/dist/src/services/gitService.js.map +1 -1
  116. package/dist/src/services/gitService.test.js +18 -0
  117. package/dist/src/services/gitService.test.js.map +1 -1
  118. package/dist/src/services/shellExecutionService.d.ts +2 -0
  119. package/dist/src/services/shellExecutionService.js +5 -65
  120. package/dist/src/services/shellExecutionService.js.map +1 -1
  121. package/dist/src/services/shellExecutionService.test.js +26 -3
  122. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  123. package/dist/src/telemetry/loggers.test.circular.js +1 -0
  124. package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
  125. package/dist/src/tools/mcp-client.d.ts +3 -2
  126. package/dist/src/tools/mcp-client.js +7 -6
  127. package/dist/src/tools/mcp-client.js.map +1 -1
  128. package/dist/src/tools/mcp-client.test.js +47 -42
  129. package/dist/src/tools/mcp-client.test.js.map +1 -1
  130. package/dist/src/tools/shell.js +13 -2
  131. package/dist/src/tools/shell.js.map +1 -1
  132. package/dist/src/tools/tools.d.ts +2 -2
  133. package/dist/src/tools/tools.js +1 -1
  134. package/dist/src/utils/checkpointUtils.d.ts +1 -1
  135. package/dist/src/utils/fileUtils.d.ts +4 -0
  136. package/dist/src/utils/fileUtils.js +53 -0
  137. package/dist/src/utils/fileUtils.js.map +1 -1
  138. package/dist/src/utils/fileUtils.test.js +112 -1
  139. package/dist/src/utils/fileUtils.test.js.map +1 -1
  140. package/dist/src/utils/generateContentResponseUtilities.d.ts +2 -1
  141. package/dist/src/utils/generateContentResponseUtilities.js +96 -0
  142. package/dist/src/utils/generateContentResponseUtilities.js.map +1 -1
  143. package/dist/src/utils/generateContentResponseUtilities.test.js +221 -1
  144. package/dist/src/utils/generateContentResponseUtilities.test.js.map +1 -1
  145. package/dist/src/utils/terminal.d.ts +2 -0
  146. package/dist/src/utils/terminal.js +6 -0
  147. package/dist/src/utils/terminal.js.map +1 -1
  148. package/dist/src/utils/tool-utils.d.ts +9 -0
  149. package/dist/src/utils/tool-utils.js +29 -0
  150. package/dist/src/utils/tool-utils.js.map +1 -1
  151. package/dist/src/utils/tool-utils.test.js +15 -1
  152. package/dist/src/utils/tool-utils.test.js.map +1 -1
  153. package/dist/tsconfig.tsbuildinfo +1 -1
  154. package/package.json +2 -1
  155. package/dist/google-gemini-cli-core-0.23.0-preview.1.tgz +0 -0
@@ -98,11 +98,13 @@ they appear in the UI.
98
98
 
99
99
  ### Security
100
100
 
101
- | UI Label | Setting | Description | Default |
102
- | -------------------------- | ------------------------------ | -------------------------------------------------- | ------- |
103
- | Disable YOLO Mode | `security.disableYoloMode` | Disable YOLO mode, even if enabled by a flag. | `false` |
104
- | Blocks extensions from Git | `security.blockGitExtensions` | Blocks installing and loading extensions from Git. | `false` |
105
- | Folder Trust | `security.folderTrust.enabled` | Setting to track whether Folder trust is enabled. | `false` |
101
+ | UI Label | Setting | Description | Default |
102
+ | ----------------------------- | ----------------------------------------------- | --------------------------------------------------------- | ------- |
103
+ | Disable YOLO Mode | `security.disableYoloMode` | Disable YOLO mode, even if enabled by a flag. | `false` |
104
+ | Blocks extensions from Git | `security.blockGitExtensions` | Blocks installing and loading extensions from Git. | `false` |
105
+ | Folder Trust | `security.folderTrust.enabled` | Setting to track whether Folder trust is enabled. | `false` |
106
+ | Allowed Environment Variables | `security.environmentVariableRedaction.allowed` | Environment variables to always allow (bypass redaction). | `[]` |
107
+ | Blocked Environment Variables | `security.environmentVariableRedaction.blocked` | Environment variables to always redact. | `[]` |
106
108
 
107
109
  ### Experimental
108
110
 
@@ -621,6 +621,11 @@ their corresponding top-level category object in your `settings.json` file.
621
621
  shell command. Defaults to 5 minutes.
622
622
  - **Default:** `300`
623
623
 
624
+ - **`tools.shell.enableShellOutputEfficiency`** (boolean):
625
+ - **Description:** Enable shell output efficiency optimizations for better
626
+ performance.
627
+ - **Default:** `true`
628
+
624
629
  - **`tools.autoAccept`** (boolean):
625
630
  - **Description:** Automatically accept and execute tool calls that are
626
631
  considered safe (e.g., read-only operations).
@@ -746,6 +751,22 @@ their corresponding top-level category object in your `settings.json` file.
746
751
  - **Default:** `false`
747
752
  - **Requires restart:** Yes
748
753
 
754
+ - **`security.environmentVariableRedaction.allowed`** (array):
755
+ - **Description:** Environment variables to always allow (bypass redaction).
756
+ - **Default:** `[]`
757
+ - **Requires restart:** Yes
758
+
759
+ - **`security.environmentVariableRedaction.blocked`** (array):
760
+ - **Description:** Environment variables to always redact.
761
+ - **Default:** `[]`
762
+ - **Requires restart:** Yes
763
+
764
+ - **`security.environmentVariableRedaction.enabled`** (boolean):
765
+ - **Description:** Enable redaction of environment variables that may contain
766
+ secrets.
767
+ - **Default:** `false`
768
+ - **Requires restart:** Yes
769
+
749
770
  - **`security.auth.selectedType`** (string):
750
771
  - **Description:** The currently selected authentication type.
751
772
  - **Default:** `undefined`
@@ -1171,6 +1192,52 @@ the `advanced.excludedEnvVars` setting in your `settings.json` file.
1171
1192
  - Specifies the endpoint for the code assist server.
1172
1193
  - This is useful for development and testing.
1173
1194
 
1195
+ ### Environment variable redaction
1196
+
1197
+ To prevent accidental leakage of sensitive information, Gemini CLI automatically
1198
+ redacts potential secrets from environment variables when executing tools (such
1199
+ as shell commands). This "best effort" redaction applies to variables inherited
1200
+ from the system or loaded from `.env` files.
1201
+
1202
+ **Default Redaction Rules:**
1203
+
1204
+ - **By Name:** Variables are redacted if their names contain sensitive terms
1205
+ like `TOKEN`, `SECRET`, `PASSWORD`, `KEY`, `AUTH`, `CREDENTIAL`, `PRIVATE`, or
1206
+ `CERT`.
1207
+ - **By Value:** Variables are redacted if their values match known secret
1208
+ patterns, such as:
1209
+ - Private keys (RSA, OpenSSH, PGP, etc.)
1210
+ - Certificates
1211
+ - URLs containing credentials
1212
+ - API keys and tokens (GitHub, Google, AWS, Stripe, Slack, etc.)
1213
+ - **Specific Blocklist:** Certain variables like `CLIENT_ID`, `DB_URI`,
1214
+ `DATABASE_URL`, and `CONNECTION_STRING` are always redacted by default.
1215
+
1216
+ **Allowlist (Never Redacted):**
1217
+
1218
+ - Common system variables (e.g., `PATH`, `HOME`, `USER`, `SHELL`, `TERM`,
1219
+ `LANG`).
1220
+ - Variables starting with `GEMINI_CLI_`.
1221
+ - GitHub Action specific variables.
1222
+
1223
+ **Configuration:**
1224
+
1225
+ You can customize this behavior in your `settings.json` file:
1226
+
1227
+ - **`security.allowedEnvironmentVariables`**: A list of variable names to
1228
+ _never_ redact, even if they match sensitive patterns.
1229
+ - **`security.blockedEnvironmentVariables`**: A list of variable names to
1230
+ _always_ redact, even if they don't match sensitive patterns.
1231
+
1232
+ ```json
1233
+ {
1234
+ "security": {
1235
+ "allowedEnvironmentVariables": ["MY_PUBLIC_KEY", "NOT_A_SECRET_TOKEN"],
1236
+ "blockedEnvironmentVariables": ["INTERNAL_IP_ADDRESS"]
1237
+ }
1238
+ }
1239
+ ```
1240
+
1174
1241
  ## Command-line arguments
1175
1242
 
1176
1243
  Arguments passed directly when running the CLI can override other configurations
@@ -0,0 +1,73 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { AgentCard, Message, Task } from '@a2a-js/sdk';
7
+ import { type Client, type AuthenticationHandler } from '@a2a-js/sdk/client';
8
+ export type SendMessageResult = Message | Task;
9
+ /**
10
+ * Manages A2A clients and caches loaded agent information.
11
+ * Follows a singleton pattern to ensure a single client instance.
12
+ */
13
+ export declare class A2AClientManager {
14
+ private static instance;
15
+ private clients;
16
+ private agentCards;
17
+ private constructor();
18
+ /**
19
+ * Gets the singleton instance of the A2AClientManager.
20
+ */
21
+ static getInstance(): A2AClientManager;
22
+ /**
23
+ * Resets the singleton instance. Only for testing purposes.
24
+ * @internal
25
+ */
26
+ static resetInstanceForTesting(): void;
27
+ /**
28
+ * Loads an agent by fetching its AgentCard and caches the client.
29
+ * @param name The name to assign to the agent.
30
+ * @param agentCardUrl The full URL to the agent's card.
31
+ * @param authHandler Optional authentication handler to use for this agent.
32
+ * @returns The loaded AgentCard.
33
+ */
34
+ loadAgent(name: string, agentCardUrl: string, authHandler?: AuthenticationHandler): Promise<AgentCard>;
35
+ /**
36
+ * Sends a message to a loaded agent.
37
+ * @param agentName The name of the agent to send the message to.
38
+ * @param message The message content.
39
+ * @param options Optional context and task IDs to maintain conversation state.
40
+ * @returns The response from the agent (Message or Task).
41
+ * @throws Error if the agent returns an error response.
42
+ */
43
+ sendMessage(agentName: string, message: string, options?: {
44
+ contextId?: string;
45
+ taskId?: string;
46
+ }): Promise<SendMessageResult>;
47
+ /**
48
+ * Retrieves a loaded agent card.
49
+ * @param name The name of the agent.
50
+ * @returns The agent card, or undefined if not found.
51
+ */
52
+ getAgentCard(name: string): AgentCard | undefined;
53
+ /**
54
+ * Retrieves a loaded client.
55
+ * @param name The name of the agent.
56
+ * @returns The client, or undefined if not found.
57
+ */
58
+ getClient(name: string): Client | undefined;
59
+ /**
60
+ * Retrieves a task from an agent.
61
+ * @param agentName The name of the agent.
62
+ * @param taskId The ID of the task to retrieve.
63
+ * @returns The task details.
64
+ */
65
+ getTask(agentName: string, taskId: string): Promise<Task>;
66
+ /**
67
+ * Cancels a task on an agent.
68
+ * @param agentName The name of the agent.
69
+ * @param taskId The ID of the task to cancel.
70
+ * @returns The cancellation response.
71
+ */
72
+ cancelTask(agentName: string, taskId: string): Promise<Task>;
73
+ }
@@ -0,0 +1,165 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { ClientFactory, ClientFactoryOptions, DefaultAgentCardResolver, RestTransportFactory, JsonRpcTransportFactory, createAuthenticatingFetchWithRetry, } from '@a2a-js/sdk/client';
7
+ import { v4 as uuidv4 } from 'uuid';
8
+ import { debugLogger } from '../utils/debugLogger.js';
9
+ /**
10
+ * Manages A2A clients and caches loaded agent information.
11
+ * Follows a singleton pattern to ensure a single client instance.
12
+ */
13
+ export class A2AClientManager {
14
+ static instance;
15
+ // Each agent should manage their own context/taskIds/card/etc
16
+ clients = new Map();
17
+ agentCards = new Map();
18
+ constructor() { }
19
+ /**
20
+ * Gets the singleton instance of the A2AClientManager.
21
+ */
22
+ static getInstance() {
23
+ if (!A2AClientManager.instance) {
24
+ A2AClientManager.instance = new A2AClientManager();
25
+ }
26
+ return A2AClientManager.instance;
27
+ }
28
+ /**
29
+ * Resets the singleton instance. Only for testing purposes.
30
+ * @internal
31
+ */
32
+ static resetInstanceForTesting() {
33
+ // @ts-expect-error - Resetting singleton for testing
34
+ A2AClientManager.instance = undefined;
35
+ }
36
+ /**
37
+ * Loads an agent by fetching its AgentCard and caches the client.
38
+ * @param name The name to assign to the agent.
39
+ * @param agentCardUrl The full URL to the agent's card.
40
+ * @param authHandler Optional authentication handler to use for this agent.
41
+ * @returns The loaded AgentCard.
42
+ */
43
+ async loadAgent(name, agentCardUrl, authHandler) {
44
+ if (this.clients.has(name)) {
45
+ throw new Error(`Agent with name '${name}' is already loaded.`);
46
+ }
47
+ let fetchImpl = fetch;
48
+ if (authHandler) {
49
+ fetchImpl = createAuthenticatingFetchWithRetry(fetch, authHandler);
50
+ }
51
+ const resolver = new DefaultAgentCardResolver({ fetchImpl });
52
+ const options = ClientFactoryOptions.createFrom(ClientFactoryOptions.default, {
53
+ transports: [
54
+ new RestTransportFactory({ fetchImpl }),
55
+ new JsonRpcTransportFactory({ fetchImpl }),
56
+ ],
57
+ cardResolver: resolver,
58
+ });
59
+ const factory = new ClientFactory(options);
60
+ const client = await factory.createFromUrl(agentCardUrl, '');
61
+ const agentCard = await client.getAgentCard();
62
+ this.clients.set(name, client);
63
+ this.agentCards.set(name, agentCard);
64
+ debugLogger.debug(`[A2AClientManager] Loaded agent '${name}' from ${agentCardUrl}`);
65
+ return agentCard;
66
+ }
67
+ /**
68
+ * Sends a message to a loaded agent.
69
+ * @param agentName The name of the agent to send the message to.
70
+ * @param message The message content.
71
+ * @param options Optional context and task IDs to maintain conversation state.
72
+ * @returns The response from the agent (Message or Task).
73
+ * @throws Error if the agent returns an error response.
74
+ */
75
+ async sendMessage(agentName, message, options) {
76
+ const client = this.clients.get(agentName);
77
+ if (!client) {
78
+ throw new Error(`Agent '${agentName}' not found.`);
79
+ }
80
+ const messageParams = {
81
+ message: {
82
+ kind: 'message',
83
+ role: 'user',
84
+ messageId: uuidv4(),
85
+ parts: [{ kind: 'text', text: message }],
86
+ contextId: options?.contextId,
87
+ taskId: options?.taskId,
88
+ },
89
+ configuration: {
90
+ blocking: true,
91
+ },
92
+ };
93
+ try {
94
+ return await client.sendMessage(messageParams);
95
+ }
96
+ catch (error) {
97
+ const prefix = `A2AClient SendMessage Error [${agentName}]`;
98
+ if (error instanceof Error) {
99
+ throw new Error(`${prefix}: ${error.message}`, { cause: error });
100
+ }
101
+ throw new Error(`${prefix}: Unexpected error during sendMessage: ${String(error)}`);
102
+ }
103
+ }
104
+ /**
105
+ * Retrieves a loaded agent card.
106
+ * @param name The name of the agent.
107
+ * @returns The agent card, or undefined if not found.
108
+ */
109
+ getAgentCard(name) {
110
+ return this.agentCards.get(name);
111
+ }
112
+ /**
113
+ * Retrieves a loaded client.
114
+ * @param name The name of the agent.
115
+ * @returns The client, or undefined if not found.
116
+ */
117
+ getClient(name) {
118
+ return this.clients.get(name);
119
+ }
120
+ /**
121
+ * Retrieves a task from an agent.
122
+ * @param agentName The name of the agent.
123
+ * @param taskId The ID of the task to retrieve.
124
+ * @returns The task details.
125
+ */
126
+ async getTask(agentName, taskId) {
127
+ const client = this.clients.get(agentName);
128
+ if (!client) {
129
+ throw new Error(`Agent '${agentName}' not found.`);
130
+ }
131
+ try {
132
+ return await client.getTask({ id: taskId });
133
+ }
134
+ catch (error) {
135
+ const prefix = `A2AClient getTask Error [${agentName}]`;
136
+ if (error instanceof Error) {
137
+ throw new Error(`${prefix}: ${error.message}`, { cause: error });
138
+ }
139
+ throw new Error(`${prefix}: Unexpected error: ${String(error)}`);
140
+ }
141
+ }
142
+ /**
143
+ * Cancels a task on an agent.
144
+ * @param agentName The name of the agent.
145
+ * @param taskId The ID of the task to cancel.
146
+ * @returns The cancellation response.
147
+ */
148
+ async cancelTask(agentName, taskId) {
149
+ const client = this.clients.get(agentName);
150
+ if (!client) {
151
+ throw new Error(`Agent '${agentName}' not found.`);
152
+ }
153
+ try {
154
+ return await client.cancelTask({ id: taskId });
155
+ }
156
+ catch (error) {
157
+ const prefix = `A2AClient cancelTask Error [${agentName}]`;
158
+ if (error instanceof Error) {
159
+ throw new Error(`${prefix}: ${error.message}`, { cause: error });
160
+ }
161
+ throw new Error(`${prefix}: Unexpected error: ${String(error)}`);
162
+ }
163
+ }
164
+ }
165
+ //# sourceMappingURL=a2a-client-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a-client-manager.js","sourceRoot":"","sources":["../../../src/agents/a2a-client-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,211 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest';
7
+ import { A2AClientManager, } from './a2a-client-manager.js';
8
+ import { ClientFactory, DefaultAgentCardResolver } from '@a2a-js/sdk/client';
9
+ import { debugLogger } from '../utils/debugLogger.js';
10
+ import { createAuthenticatingFetchWithRetry, ClientFactoryOptions, } from '@a2a-js/sdk/client';
11
+ vi.mock('../utils/debugLogger.js', () => ({
12
+ debugLogger: {
13
+ debug: vi.fn(),
14
+ },
15
+ }));
16
+ vi.mock('@a2a-js/sdk/client', () => {
17
+ const ClientFactory = vi.fn();
18
+ const DefaultAgentCardResolver = vi.fn();
19
+ const RestTransportFactory = vi.fn();
20
+ const JsonRpcTransportFactory = vi.fn();
21
+ const ClientFactoryOptions = {
22
+ default: {},
23
+ createFrom: vi.fn(),
24
+ };
25
+ const createAuthenticatingFetchWithRetry = vi.fn();
26
+ DefaultAgentCardResolver.prototype.resolve = vi.fn();
27
+ ClientFactory.prototype.createFromUrl = vi.fn();
28
+ return {
29
+ ClientFactory,
30
+ ClientFactoryOptions,
31
+ DefaultAgentCardResolver,
32
+ RestTransportFactory,
33
+ JsonRpcTransportFactory,
34
+ createAuthenticatingFetchWithRetry,
35
+ };
36
+ });
37
+ describe('A2AClientManager', () => {
38
+ let manager;
39
+ // Stable mocks initialized once
40
+ const sendMessageMock = vi.fn();
41
+ const getTaskMock = vi.fn();
42
+ const cancelTaskMock = vi.fn();
43
+ const getAgentCardMock = vi.fn();
44
+ const authFetchMock = vi.fn();
45
+ const mockClient = {
46
+ sendMessage: sendMessageMock,
47
+ getTask: getTaskMock,
48
+ cancelTask: cancelTaskMock,
49
+ getAgentCard: getAgentCardMock,
50
+ };
51
+ const mockAgentCard = { name: 'TestAgent' };
52
+ beforeEach(() => {
53
+ vi.clearAllMocks();
54
+ A2AClientManager.resetInstanceForTesting();
55
+ manager = A2AClientManager.getInstance();
56
+ // Default mock implementations
57
+ getAgentCardMock.mockResolvedValue({
58
+ ...mockAgentCard,
59
+ url: 'http://test.agent/real/endpoint',
60
+ });
61
+ vi.mocked(ClientFactory.prototype.createFromUrl).mockResolvedValue(mockClient);
62
+ vi.mocked(DefaultAgentCardResolver.prototype.resolve).mockResolvedValue({
63
+ ...mockAgentCard,
64
+ url: 'http://test.agent/real/endpoint',
65
+ });
66
+ vi.mocked(ClientFactoryOptions.createFrom).mockImplementation((_defaults, overrides) => overrides);
67
+ vi.mocked(createAuthenticatingFetchWithRetry).mockReturnValue(authFetchMock);
68
+ vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
69
+ ok: true,
70
+ json: async () => ({}),
71
+ }));
72
+ });
73
+ afterEach(() => {
74
+ vi.restoreAllMocks();
75
+ vi.unstubAllGlobals();
76
+ });
77
+ it('should enforce the singleton pattern', () => {
78
+ const instance1 = A2AClientManager.getInstance();
79
+ const instance2 = A2AClientManager.getInstance();
80
+ expect(instance1).toBe(instance2);
81
+ });
82
+ describe('loadAgent', () => {
83
+ it('should create and cache an A2AClient', async () => {
84
+ const agentCard = await manager.loadAgent('TestAgent', 'http://test.agent/card');
85
+ expect(agentCard).toMatchObject(mockAgentCard);
86
+ expect(manager.getAgentCard('TestAgent')).toBe(agentCard);
87
+ expect(manager.getClient('TestAgent')).toBeDefined();
88
+ });
89
+ it('should throw an error if an agent with the same name is already loaded', async () => {
90
+ await manager.loadAgent('TestAgent', 'http://test.agent/card');
91
+ await expect(manager.loadAgent('TestAgent', 'http://another.agent/card')).rejects.toThrow("Agent with name 'TestAgent' is already loaded.");
92
+ });
93
+ it('should use native fetch by default', async () => {
94
+ await manager.loadAgent('TestAgent', 'http://test.agent/card');
95
+ expect(createAuthenticatingFetchWithRetry).not.toHaveBeenCalled();
96
+ });
97
+ it('should use provided custom authentication handler', async () => {
98
+ const customAuthHandler = {
99
+ headers: vi.fn(),
100
+ shouldRetryWithHeaders: vi.fn(),
101
+ };
102
+ await manager.loadAgent('CustomAuthAgent', 'http://custom.agent/card', customAuthHandler);
103
+ expect(createAuthenticatingFetchWithRetry).toHaveBeenCalledWith(expect.anything(), customAuthHandler);
104
+ });
105
+ it('should log a debug message upon loading an agent', async () => {
106
+ await manager.loadAgent('TestAgent', 'http://test.agent/card');
107
+ expect(debugLogger.debug).toHaveBeenCalledWith("[A2AClientManager] Loaded agent 'TestAgent' from http://test.agent/card");
108
+ });
109
+ });
110
+ describe('sendMessage', () => {
111
+ beforeEach(async () => {
112
+ await manager.loadAgent('TestAgent', 'http://test.agent');
113
+ });
114
+ it('should send a message to the correct agent', async () => {
115
+ sendMessageMock.mockResolvedValue({
116
+ kind: 'message',
117
+ messageId: 'a',
118
+ parts: [],
119
+ role: 'agent',
120
+ });
121
+ await manager.sendMessage('TestAgent', 'Hello');
122
+ expect(sendMessageMock).toHaveBeenCalledWith(expect.objectContaining({
123
+ message: expect.anything(),
124
+ }));
125
+ });
126
+ it('should use contextId and taskId when provided', async () => {
127
+ sendMessageMock.mockResolvedValue({
128
+ kind: 'message',
129
+ messageId: 'a',
130
+ parts: [],
131
+ role: 'agent',
132
+ });
133
+ const expectedContextId = 'user-context-id';
134
+ const expectedTaskId = 'user-task-id';
135
+ await manager.sendMessage('TestAgent', 'Hello', {
136
+ contextId: expectedContextId,
137
+ taskId: expectedTaskId,
138
+ });
139
+ const call = sendMessageMock.mock.calls[0][0];
140
+ expect(call.message.contextId).toBe(expectedContextId);
141
+ expect(call.message.taskId).toBe(expectedTaskId);
142
+ });
143
+ it('should return result from client', async () => {
144
+ const mockResult = {
145
+ contextId: 'server-context-id',
146
+ id: 'ctx-1',
147
+ kind: 'task',
148
+ status: { state: 'working' },
149
+ };
150
+ sendMessageMock.mockResolvedValueOnce(mockResult);
151
+ const response = await manager.sendMessage('TestAgent', 'Hello');
152
+ expect(response).toEqual(mockResult);
153
+ });
154
+ it('should throw prefixed error on failure', async () => {
155
+ sendMessageMock.mockRejectedValueOnce(new Error('Network error'));
156
+ await expect(manager.sendMessage('TestAgent', 'Hello')).rejects.toThrow('A2AClient SendMessage Error [TestAgent]: Network error');
157
+ });
158
+ it('should throw an error if the agent is not found', async () => {
159
+ await expect(manager.sendMessage('NonExistentAgent', 'Hello')).rejects.toThrow("Agent 'NonExistentAgent' not found.");
160
+ });
161
+ });
162
+ describe('getTask', () => {
163
+ beforeEach(async () => {
164
+ await manager.loadAgent('TestAgent', 'http://test.agent');
165
+ });
166
+ it('should get a task from the correct agent', async () => {
167
+ getTaskMock.mockResolvedValue({
168
+ id: 'task123',
169
+ contextId: 'a',
170
+ kind: 'task',
171
+ status: { state: 'completed' },
172
+ });
173
+ await manager.getTask('TestAgent', 'task123');
174
+ expect(getTaskMock).toHaveBeenCalledWith({
175
+ id: 'task123',
176
+ });
177
+ });
178
+ it('should throw prefixed error on failure', async () => {
179
+ getTaskMock.mockRejectedValueOnce(new Error('Network error'));
180
+ await expect(manager.getTask('TestAgent', 'task123')).rejects.toThrow('A2AClient getTask Error [TestAgent]: Network error');
181
+ });
182
+ it('should throw an error if the agent is not found', async () => {
183
+ await expect(manager.getTask('NonExistentAgent', 'task123')).rejects.toThrow("Agent 'NonExistentAgent' not found.");
184
+ });
185
+ });
186
+ describe('cancelTask', () => {
187
+ beforeEach(async () => {
188
+ await manager.loadAgent('TestAgent', 'http://test.agent');
189
+ });
190
+ it('should cancel a task on the correct agent', async () => {
191
+ cancelTaskMock.mockResolvedValue({
192
+ id: 'task123',
193
+ contextId: 'a',
194
+ kind: 'task',
195
+ status: { state: 'canceled' },
196
+ });
197
+ await manager.cancelTask('TestAgent', 'task123');
198
+ expect(cancelTaskMock).toHaveBeenCalledWith({
199
+ id: 'task123',
200
+ });
201
+ });
202
+ it('should throw prefixed error on failure', async () => {
203
+ cancelTaskMock.mockRejectedValueOnce(new Error('Network error'));
204
+ await expect(manager.cancelTask('TestAgent', 'task123')).rejects.toThrow('A2AClient cancelTask Error [TestAgent]: Network error');
205
+ });
206
+ it('should throw an error if the agent is not found', async () => {
207
+ await expect(manager.cancelTask('NonExistentAgent', 'task123')).rejects.toThrow("Agent 'NonExistentAgent' not found.");
208
+ });
209
+ });
210
+ });
211
+ //# sourceMappingURL=a2a-client-manager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a-client-manager.test.js","sourceRoot":"","sources":["../../../src/agents/a2a-client-manager.test.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ import { Type } from '@google/genai';
9
9
  import { executeToolCall } from '../core/nonInteractiveToolExecutor.js';
10
10
  import { ToolRegistry } from '../tools/tool-registry.js';
11
11
  import { CompressionStatus } from '../core/turn.js';
12
+ import {} from '../scheduler/types.js';
12
13
  import { ChatCompressionService } from '../services/chatCompressionService.js';
13
14
  import { getDirectoryContextString } from '../utils/environmentContext.js';
14
15
  import { promptIdContext } from '../utils/promptIdContext.js';