@google/gemini-cli-core 0.23.0-preview.4 → 0.24.0-nightly.20251231.05049b5ab
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 +7 -6
- package/dist/docs/get-started/configuration.md +79 -8
- package/dist/google-gemini-cli-core-0.24.0-nightly.20251227.37be16243.tgz +0 -0
- package/dist/src/agents/a2a-client-manager.d.ts +73 -0
- package/dist/src/agents/a2a-client-manager.js +165 -0
- package/dist/src/agents/a2a-client-manager.js.map +1 -0
- package/dist/src/agents/a2a-client-manager.test.d.ts +6 -0
- package/dist/src/agents/a2a-client-manager.test.js +211 -0
- package/dist/src/agents/a2a-client-manager.test.js.map +1 -0
- package/dist/src/agents/local-executor.js +1 -0
- package/dist/src/agents/local-executor.js.map +1 -1
- package/dist/src/agents/registry.d.ts +9 -1
- package/dist/src/agents/registry.js +74 -34
- package/dist/src/agents/registry.js.map +1 -1
- package/dist/src/agents/registry.test.js +79 -30
- package/dist/src/agents/registry.test.js.map +1 -1
- package/dist/src/agents/toml-loader.d.ts +14 -5
- package/dist/src/agents/toml-loader.js +98 -26
- package/dist/src/agents/toml-loader.js.map +1 -1
- package/dist/src/agents/toml-loader.test.js +121 -2
- package/dist/src/agents/toml-loader.test.js.map +1 -1
- package/dist/src/availability/policyHelpers.js +0 -2
- package/dist/src/availability/policyHelpers.js.map +1 -1
- package/dist/src/code_assist/server.js +7 -2
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/server.test.js +3 -0
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/config/config.d.ts +47 -7
- package/dist/src/config/config.js +59 -28
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +20 -1
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/models.d.ts +1 -9
- package/dist/src/config/models.js +1 -11
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/models.test.js +16 -16
- package/dist/src/config/models.test.js.map +1 -1
- package/dist/src/config/storage.d.ts +2 -0
- package/dist/src/config/storage.js +6 -0
- package/dist/src/config/storage.js.map +1 -1
- package/dist/src/config/storage.test.js +8 -0
- package/dist/src/config/storage.test.js.map +1 -1
- package/dist/src/confirmation-bus/message-bus.js +2 -1
- package/dist/src/confirmation-bus/message-bus.js.map +1 -1
- package/dist/src/core/client.d.ts +5 -1
- package/dist/src/core/client.js +159 -73
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +110 -5
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.js +2 -2
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/coreToolHookTriggers.d.ts +2 -2
- package/dist/src/core/coreToolHookTriggers.js +74 -14
- package/dist/src/core/coreToolHookTriggers.js.map +1 -1
- package/dist/src/core/coreToolHookTriggers.test.d.ts +6 -0
- package/dist/src/core/coreToolHookTriggers.test.js +189 -0
- package/dist/src/core/coreToolHookTriggers.test.js.map +1 -0
- package/dist/src/core/coreToolScheduler.d.ts +5 -85
- package/dist/src/core/coreToolScheduler.js +33 -206
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +19 -367
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +0 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/turn.d.ts +3 -21
- package/dist/src/core/turn.js +1 -0
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/fallback/handler.js +0 -6
- package/dist/src/fallback/handler.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/hooks/hookAggregator.js +7 -0
- package/dist/src/hooks/hookAggregator.js.map +1 -1
- package/dist/src/hooks/hookPlanner.d.ts +1 -5
- package/dist/src/hooks/hookPlanner.js +2 -9
- package/dist/src/hooks/hookPlanner.js.map +1 -1
- package/dist/src/hooks/hookPlanner.test.js +1 -2
- package/dist/src/hooks/hookPlanner.test.js.map +1 -1
- package/dist/src/hooks/hookRegistry.d.ts +5 -10
- package/dist/src/hooks/hookRegistry.js +39 -12
- package/dist/src/hooks/hookRegistry.js.map +1 -1
- package/dist/src/hooks/hookRegistry.test.js +93 -2
- package/dist/src/hooks/hookRegistry.test.js.map +1 -1
- package/dist/src/hooks/hookRunner.d.ts +3 -1
- package/dist/src/hooks/hookRunner.js +31 -3
- package/dist/src/hooks/hookRunner.js.map +1 -1
- package/dist/src/hooks/hookRunner.test.js +58 -2
- package/dist/src/hooks/hookRunner.test.js.map +1 -1
- package/dist/src/hooks/hookSystem.js +1 -1
- package/dist/src/hooks/hookSystem.js.map +1 -1
- package/dist/src/hooks/index.d.ts +1 -1
- package/dist/src/hooks/index.js +1 -1
- package/dist/src/hooks/index.js.map +1 -1
- package/dist/src/hooks/trustedHooks.d.ts +28 -0
- package/dist/src/hooks/trustedHooks.js +90 -0
- package/dist/src/hooks/trustedHooks.js.map +1 -0
- package/dist/src/hooks/trustedHooks.test.d.ts +6 -0
- package/dist/src/hooks/trustedHooks.test.js +154 -0
- package/dist/src/hooks/trustedHooks.test.js.map +1 -0
- package/dist/src/hooks/types.d.ts +18 -9
- package/dist/src/hooks/types.js +31 -26
- package/dist/src/hooks/types.js.map +1 -1
- package/dist/src/hooks/types.test.js +5 -24
- package/dist/src/hooks/types.test.js.map +1 -1
- package/dist/src/ide/ide-client.js +4 -1
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/oauth-utils.js +1 -1
- package/dist/src/mcp/oauth-utils.js.map +1 -1
- package/dist/src/mcp/token-storage/keychain-token-storage.js +1 -1
- package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -1
- package/dist/src/policy/config.js +4 -2
- package/dist/src/policy/config.js.map +1 -1
- package/dist/src/policy/persistence.test.js +6 -1
- package/dist/src/policy/persistence.test.js.map +1 -1
- package/dist/src/policy/policy-engine.d.ts +10 -1
- package/dist/src/policy/policy-engine.js +24 -4
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/policy-engine.test.js +26 -2
- package/dist/src/policy/policy-engine.test.js.map +1 -1
- package/dist/src/policy/shell-safety.test.js +2 -1
- package/dist/src/policy/shell-safety.test.js.map +1 -1
- package/dist/src/policy/toml-loader.d.ts +3 -5
- package/dist/src/policy/toml-loader.js +35 -20
- package/dist/src/policy/toml-loader.js.map +1 -1
- package/dist/src/policy/toml-loader.test.js +28 -7
- package/dist/src/policy/toml-loader.test.js.map +1 -1
- package/dist/src/policy/types.d.ts +15 -0
- package/dist/src/routing/strategies/compositeStrategy.js +4 -2
- package/dist/src/routing/strategies/compositeStrategy.js.map +1 -1
- package/dist/src/routing/strategies/compositeStrategy.test.js +11 -10
- package/dist/src/routing/strategies/compositeStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/overrideStrategy.js +2 -2
- package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
- package/dist/src/scheduler/types.d.ts +95 -0
- package/dist/src/scheduler/types.js +7 -0
- package/dist/src/scheduler/types.js.map +1 -0
- package/dist/src/services/environmentSanitization.d.ts +15 -0
- package/dist/src/services/environmentSanitization.js +141 -0
- package/dist/src/services/environmentSanitization.js.map +1 -0
- package/dist/src/services/environmentSanitization.test.d.ts +6 -0
- package/dist/src/services/environmentSanitization.test.js +284 -0
- package/dist/src/services/environmentSanitization.test.js.map +1 -0
- package/dist/src/services/gitService.js +10 -1
- package/dist/src/services/gitService.js.map +1 -1
- package/dist/src/services/gitService.test.js +18 -0
- package/dist/src/services/gitService.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.d.ts +2 -0
- package/dist/src/services/shellExecutionService.js +5 -65
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +26 -3
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/services/skillManager.d.ts +61 -0
- package/dist/src/services/skillManager.js +157 -0
- package/dist/src/services/skillManager.js.map +1 -0
- package/dist/src/services/skillManager.test.d.ts +6 -0
- package/dist/src/services/skillManager.test.js +169 -0
- package/dist/src/services/skillManager.test.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +4 -6
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/loggers.test.circular.js +1 -0
- package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
- package/dist/src/telemetry/sdk.js +3 -4
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/tools/edit.test.js +1 -1
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +3 -2
- package/dist/src/tools/mcp-client.js +7 -6
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +47 -42
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/memoryTool.js +0 -2
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/shell.js +6 -1
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/smart-edit.test.js +1 -1
- package/dist/src/tools/smart-edit.test.js.map +1 -1
- package/dist/src/tools/tool-error.d.ts +2 -1
- package/dist/src/tools/tool-error.js +2 -0
- package/dist/src/tools/tool-error.js.map +1 -1
- package/dist/src/tools/tool-registry.js +1 -1
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tools.d.ts +1 -1
- package/dist/src/tools/tools.js +1 -1
- package/dist/src/tools/web-search.js +2 -1
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/write-file.js +2 -1
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/utils/checkpointUtils.d.ts +1 -1
- package/dist/src/utils/debugLogger.js +1 -0
- package/dist/src/utils/debugLogger.js.map +1 -1
- package/dist/src/utils/editCorrector.js +5 -4
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/errorReporting.d.ts +1 -1
- package/dist/src/utils/errorReporting.js +13 -12
- package/dist/src/utils/errorReporting.js.map +1 -1
- package/dist/src/utils/errorReporting.test.js +17 -14
- package/dist/src/utils/errorReporting.test.js.map +1 -1
- package/dist/src/utils/fileUtils.d.ts +4 -0
- package/dist/src/utils/fileUtils.js +53 -0
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +112 -1
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/generateContentResponseUtilities.d.ts +2 -1
- package/dist/src/utils/generateContentResponseUtilities.js +96 -0
- package/dist/src/utils/generateContentResponseUtilities.js.map +1 -1
- package/dist/src/utils/generateContentResponseUtilities.test.js +221 -1
- package/dist/src/utils/generateContentResponseUtilities.test.js.map +1 -1
- package/dist/src/utils/getFolderStructure.js +1 -1
- package/dist/src/utils/getFolderStructure.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.js +1 -1
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/retry.js +3 -3
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/summarizer.test.js +3 -2
- package/dist/src/utils/summarizer.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/tool-utils.d.ts +9 -0
- package/dist/src/utils/tool-utils.js +29 -0
- package/dist/src/utils/tool-utils.js.map +1 -1
- package/dist/src/utils/tool-utils.test.js +15 -1
- package/dist/src/utils/tool-utils.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -1
- package/dist/google-gemini-cli-core-0.23.0-preview.3.tgz +0 -0
|
@@ -94,15 +94,16 @@ they appear in the UI.
|
|
|
94
94
|
| Enable Tool Output Truncation | `tools.enableToolOutputTruncation` | Enable truncation of large tool outputs. | `true` |
|
|
95
95
|
| Tool Output Truncation Threshold | `tools.truncateToolOutputThreshold` | Truncate tool output if it is larger than this many characters. Set to -1 to disable. | `10000` |
|
|
96
96
|
| Tool Output Truncation Lines | `tools.truncateToolOutputLines` | The number of lines to keep when truncating tool output. | `100` |
|
|
97
|
-
| Enable Message Bus Integration | `tools.enableMessageBusIntegration` | Enable policy-based tool confirmation via message bus integration. | `true` |
|
|
98
97
|
|
|
99
98
|
### Security
|
|
100
99
|
|
|
101
|
-
| UI Label
|
|
102
|
-
|
|
|
103
|
-
| Disable YOLO Mode
|
|
104
|
-
| Blocks extensions from Git
|
|
105
|
-
| Folder Trust
|
|
100
|
+
| UI Label | Setting | Description | Default |
|
|
101
|
+
| ----------------------------- | ----------------------------------------------- | --------------------------------------------------------- | ------- |
|
|
102
|
+
| Disable YOLO Mode | `security.disableYoloMode` | Disable YOLO mode, even if enabled by a flag. | `false` |
|
|
103
|
+
| Blocks extensions from Git | `security.blockGitExtensions` | Blocks installing and loading extensions from Git. | `false` |
|
|
104
|
+
| Folder Trust | `security.folderTrust.enabled` | Setting to track whether Folder trust is enabled. | `false` |
|
|
105
|
+
| Allowed Environment Variables | `security.environmentVariableRedaction.allowed` | Environment variables to always allow (bypass redaction). | `[]` |
|
|
106
|
+
| Blocked Environment Variables | `security.environmentVariableRedaction.blocked` | Environment variables to always redact. | `[]` |
|
|
106
107
|
|
|
107
108
|
### Experimental
|
|
108
109
|
|
|
@@ -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).
|
|
@@ -679,14 +684,6 @@ their corresponding top-level category object in your `settings.json` file.
|
|
|
679
684
|
- **Default:** `1000`
|
|
680
685
|
- **Requires restart:** Yes
|
|
681
686
|
|
|
682
|
-
- **`tools.enableMessageBusIntegration`** (boolean):
|
|
683
|
-
- **Description:** Enable policy-based tool confirmation via message bus
|
|
684
|
-
integration. When enabled, tools automatically respect policy engine
|
|
685
|
-
decisions (ALLOW/DENY/ASK_USER) without requiring individual tool
|
|
686
|
-
implementations.
|
|
687
|
-
- **Default:** `true`
|
|
688
|
-
- **Requires restart:** Yes
|
|
689
|
-
|
|
690
687
|
- **`tools.enableHooks`** (boolean):
|
|
691
688
|
- **Description:** Enable the hooks system for intercepting and customizing
|
|
692
689
|
Gemini CLI behavior. When enabled, hooks configured in settings will execute
|
|
@@ -746,6 +743,22 @@ their corresponding top-level category object in your `settings.json` file.
|
|
|
746
743
|
- **Default:** `false`
|
|
747
744
|
- **Requires restart:** Yes
|
|
748
745
|
|
|
746
|
+
- **`security.environmentVariableRedaction.allowed`** (array):
|
|
747
|
+
- **Description:** Environment variables to always allow (bypass redaction).
|
|
748
|
+
- **Default:** `[]`
|
|
749
|
+
- **Requires restart:** Yes
|
|
750
|
+
|
|
751
|
+
- **`security.environmentVariableRedaction.blocked`** (array):
|
|
752
|
+
- **Description:** Environment variables to always redact.
|
|
753
|
+
- **Default:** `[]`
|
|
754
|
+
- **Requires restart:** Yes
|
|
755
|
+
|
|
756
|
+
- **`security.environmentVariableRedaction.enabled`** (boolean):
|
|
757
|
+
- **Description:** Enable redaction of environment variables that may contain
|
|
758
|
+
secrets.
|
|
759
|
+
- **Default:** `false`
|
|
760
|
+
- **Requires restart:** Yes
|
|
761
|
+
|
|
749
762
|
- **`security.auth.selectedType`** (string):
|
|
750
763
|
- **Description:** The currently selected authentication type.
|
|
751
764
|
- **Default:** `undefined`
|
|
@@ -809,6 +822,11 @@ their corresponding top-level category object in your `settings.json` file.
|
|
|
809
822
|
- **Default:** `false`
|
|
810
823
|
- **Requires restart:** Yes
|
|
811
824
|
|
|
825
|
+
- **`experimental.skills`** (boolean):
|
|
826
|
+
- **Description:** Enable Agent Skills (experimental).
|
|
827
|
+
- **Default:** `false`
|
|
828
|
+
- **Requires restart:** Yes
|
|
829
|
+
|
|
812
830
|
- **`experimental.codebaseInvestigatorSettings.enabled`** (boolean):
|
|
813
831
|
- **Description:** Enable the Codebase Investigator agent.
|
|
814
832
|
- **Default:** `true`
|
|
@@ -841,6 +859,13 @@ their corresponding top-level category object in your `settings.json` file.
|
|
|
841
859
|
- **Default:** `false`
|
|
842
860
|
- **Requires restart:** Yes
|
|
843
861
|
|
|
862
|
+
#### `skills`
|
|
863
|
+
|
|
864
|
+
- **`skills.disabled`** (array):
|
|
865
|
+
- **Description:** List of disabled skills.
|
|
866
|
+
- **Default:** `[]`
|
|
867
|
+
- **Requires restart:** Yes
|
|
868
|
+
|
|
844
869
|
#### `hooks`
|
|
845
870
|
|
|
846
871
|
- **`hooks.disabled`** (array):
|
|
@@ -1171,6 +1196,52 @@ the `advanced.excludedEnvVars` setting in your `settings.json` file.
|
|
|
1171
1196
|
- Specifies the endpoint for the code assist server.
|
|
1172
1197
|
- This is useful for development and testing.
|
|
1173
1198
|
|
|
1199
|
+
### Environment variable redaction
|
|
1200
|
+
|
|
1201
|
+
To prevent accidental leakage of sensitive information, Gemini CLI automatically
|
|
1202
|
+
redacts potential secrets from environment variables when executing tools (such
|
|
1203
|
+
as shell commands). This "best effort" redaction applies to variables inherited
|
|
1204
|
+
from the system or loaded from `.env` files.
|
|
1205
|
+
|
|
1206
|
+
**Default Redaction Rules:**
|
|
1207
|
+
|
|
1208
|
+
- **By Name:** Variables are redacted if their names contain sensitive terms
|
|
1209
|
+
like `TOKEN`, `SECRET`, `PASSWORD`, `KEY`, `AUTH`, `CREDENTIAL`, `PRIVATE`, or
|
|
1210
|
+
`CERT`.
|
|
1211
|
+
- **By Value:** Variables are redacted if their values match known secret
|
|
1212
|
+
patterns, such as:
|
|
1213
|
+
- Private keys (RSA, OpenSSH, PGP, etc.)
|
|
1214
|
+
- Certificates
|
|
1215
|
+
- URLs containing credentials
|
|
1216
|
+
- API keys and tokens (GitHub, Google, AWS, Stripe, Slack, etc.)
|
|
1217
|
+
- **Specific Blocklist:** Certain variables like `CLIENT_ID`, `DB_URI`,
|
|
1218
|
+
`DATABASE_URL`, and `CONNECTION_STRING` are always redacted by default.
|
|
1219
|
+
|
|
1220
|
+
**Allowlist (Never Redacted):**
|
|
1221
|
+
|
|
1222
|
+
- Common system variables (e.g., `PATH`, `HOME`, `USER`, `SHELL`, `TERM`,
|
|
1223
|
+
`LANG`).
|
|
1224
|
+
- Variables starting with `GEMINI_CLI_`.
|
|
1225
|
+
- GitHub Action specific variables.
|
|
1226
|
+
|
|
1227
|
+
**Configuration:**
|
|
1228
|
+
|
|
1229
|
+
You can customize this behavior in your `settings.json` file:
|
|
1230
|
+
|
|
1231
|
+
- **`security.allowedEnvironmentVariables`**: A list of variable names to
|
|
1232
|
+
_never_ redact, even if they match sensitive patterns.
|
|
1233
|
+
- **`security.blockedEnvironmentVariables`**: A list of variable names to
|
|
1234
|
+
_always_ redact, even if they don't match sensitive patterns.
|
|
1235
|
+
|
|
1236
|
+
```json
|
|
1237
|
+
{
|
|
1238
|
+
"security": {
|
|
1239
|
+
"allowedEnvironmentVariables": ["MY_PUBLIC_KEY", "NOT_A_SECRET_TOKEN"],
|
|
1240
|
+
"blockedEnvironmentVariables": ["INTERNAL_IP_ADDRESS"]
|
|
1241
|
+
}
|
|
1242
|
+
}
|
|
1243
|
+
```
|
|
1244
|
+
|
|
1174
1245
|
## Command-line arguments
|
|
1175
1246
|
|
|
1176
1247
|
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,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';
|