@office-ai/aioncli-core 0.18.6 → 0.24.0-preview.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/docs/CONTRIBUTING.md +546 -0
- package/dist/docs/architecture.md +80 -0
- package/dist/docs/assets/connected_devtools.png +0 -0
- package/dist/docs/assets/gemini-screenshot.png +0 -0
- package/dist/docs/assets/release_patch.png +0 -0
- package/dist/docs/assets/theme-ansi-light.png +0 -0
- package/dist/docs/assets/theme-ansi.png +0 -0
- package/dist/docs/assets/theme-atom-one.png +0 -0
- package/dist/docs/assets/theme-ayu-light.png +0 -0
- package/dist/docs/assets/theme-ayu.png +0 -0
- package/dist/docs/assets/theme-custom.png +0 -0
- package/dist/docs/assets/theme-default-light.png +0 -0
- package/dist/docs/assets/theme-default.png +0 -0
- package/dist/docs/assets/theme-dracula.png +0 -0
- package/dist/docs/assets/theme-github-light.png +0 -0
- package/dist/docs/assets/theme-github.png +0 -0
- package/dist/docs/assets/theme-google-light.png +0 -0
- package/dist/docs/assets/theme-xcode-light.png +0 -0
- package/dist/docs/changelogs/index.md +592 -0
- package/dist/docs/changelogs/latest.md +225 -0
- package/dist/docs/changelogs/preview.md +129 -0
- package/dist/docs/changelogs/releases.md +896 -0
- package/dist/docs/cli/authentication.md +3 -0
- package/dist/docs/cli/checkpointing.md +94 -0
- package/dist/docs/cli/commands.md +354 -0
- package/dist/docs/cli/configuration.md +780 -0
- package/dist/docs/cli/custom-commands.md +315 -0
- package/dist/docs/cli/enterprise.md +565 -0
- package/dist/docs/cli/gemini-ignore.md +71 -0
- package/dist/docs/cli/gemini-md.md +108 -0
- package/dist/docs/cli/generation-settings.md +210 -0
- package/dist/docs/cli/headless.md +388 -0
- package/dist/docs/cli/index.md +63 -0
- package/dist/docs/cli/keyboard-shortcuts.md +143 -0
- package/dist/docs/cli/model-routing.md +37 -0
- package/dist/docs/cli/model.md +62 -0
- package/dist/docs/cli/sandbox.md +171 -0
- package/dist/docs/cli/session-management.md +158 -0
- package/dist/docs/cli/settings.md +114 -0
- package/dist/docs/cli/skills.md +156 -0
- package/dist/docs/cli/system-prompt.md +93 -0
- package/dist/docs/cli/telemetry.md +791 -0
- package/dist/docs/cli/themes.md +237 -0
- package/dist/docs/cli/token-caching.md +20 -0
- package/dist/docs/cli/trusted-folders.md +95 -0
- package/dist/docs/cli/tutorials/skills-getting-started.md +124 -0
- package/dist/docs/cli/tutorials.md +87 -0
- package/dist/docs/cli/uninstall.md +47 -0
- package/dist/docs/core/index.md +101 -0
- package/dist/docs/core/memport.md +244 -0
- package/dist/docs/core/policy-engine.md +267 -0
- package/dist/docs/core/tools-api.md +131 -0
- package/dist/docs/examples/proxy-script.md +83 -0
- package/dist/docs/extension.md +160 -0
- package/dist/docs/extensions/extension-releasing.md +183 -0
- package/dist/docs/extensions/getting-started-extensions.md +245 -0
- package/dist/docs/extensions/index.md +293 -0
- package/dist/docs/faq.md +154 -0
- package/dist/docs/get-started/authentication.md +321 -0
- package/dist/docs/get-started/configuration-v1.md +888 -0
- package/dist/docs/get-started/configuration.md +1536 -0
- package/dist/docs/get-started/deployment.md +143 -0
- package/dist/docs/get-started/examples.md +219 -0
- package/dist/docs/get-started/gemini-3.md +116 -0
- package/dist/docs/get-started/index.md +71 -0
- package/dist/docs/get-started/installation.md +141 -0
- package/dist/docs/hooks/best-practices.md +856 -0
- package/dist/docs/hooks/index.md +687 -0
- package/dist/docs/hooks/reference.md +168 -0
- package/dist/docs/hooks/writing-hooks.md +1026 -0
- package/dist/docs/ide-integration/ide-companion-spec.md +267 -0
- package/dist/docs/ide-integration/index.md +202 -0
- package/dist/docs/index.md +147 -0
- package/dist/docs/integration-tests.md +211 -0
- package/dist/docs/issue-and-pr-automation.md +134 -0
- package/dist/docs/local-development.md +128 -0
- package/dist/docs/mermaid/context.mmd +103 -0
- package/dist/docs/mermaid/render-path.mmd +64 -0
- package/dist/docs/npm.md +62 -0
- package/dist/docs/quota-and-pricing.md +158 -0
- package/dist/docs/release-confidence.md +164 -0
- package/dist/docs/releases.md +540 -0
- package/dist/docs/sidebar.json +301 -0
- package/dist/docs/tools/file-system.md +217 -0
- package/dist/docs/tools/index.md +95 -0
- package/dist/docs/tools/mcp-server.md +1044 -0
- package/dist/docs/tools/memory.md +54 -0
- package/dist/docs/tools/shell.md +260 -0
- package/dist/docs/tools/todos.md +57 -0
- package/dist/docs/tools/web-fetch.md +59 -0
- package/dist/docs/tools/web-search.md +42 -0
- package/dist/docs/tos-privacy.md +96 -0
- package/dist/docs/troubleshooting.md +158 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/src/agents/a2a-client-manager.d.ts +78 -0
- package/dist/src/agents/a2a-client-manager.js +295 -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 +237 -0
- package/dist/src/agents/a2a-client-manager.test.js.map +1 -0
- package/dist/src/agents/a2aUtils.d.ts +28 -0
- package/dist/src/agents/a2aUtils.js +111 -0
- package/dist/src/agents/a2aUtils.js.map +1 -0
- package/dist/src/agents/a2aUtils.test.d.ts +6 -0
- package/dist/src/agents/a2aUtils.test.js +147 -0
- package/dist/src/agents/a2aUtils.test.js.map +1 -0
- package/dist/src/agents/codebase-investigator.d.ts +2 -2
- package/dist/src/agents/codebase-investigator.js +5 -4
- package/dist/src/agents/codebase-investigator.js.map +1 -1
- package/dist/src/agents/delegate-to-agent-tool.d.ts +19 -0
- package/dist/src/agents/delegate-to-agent-tool.js +115 -0
- package/dist/src/agents/delegate-to-agent-tool.js.map +1 -0
- package/dist/src/agents/delegate-to-agent-tool.test.d.ts +6 -0
- package/dist/src/agents/delegate-to-agent-tool.test.js +165 -0
- package/dist/src/agents/delegate-to-agent-tool.test.js.map +1 -0
- package/dist/src/agents/introspection-agent.d.ts +23 -0
- package/dist/src/agents/introspection-agent.js +72 -0
- package/dist/src/agents/introspection-agent.js.map +1 -0
- package/dist/src/agents/introspection-agent.test.d.ts +6 -0
- package/dist/src/agents/introspection-agent.test.js +47 -0
- package/dist/src/agents/introspection-agent.test.js.map +1 -0
- package/dist/src/agents/local-executor.d.ts +108 -0
- package/dist/src/agents/local-executor.js +801 -0
- package/dist/src/agents/local-executor.js.map +1 -0
- package/dist/src/agents/local-executor.test.d.ts +6 -0
- package/dist/src/agents/local-executor.test.js +1380 -0
- package/dist/src/agents/local-executor.test.js.map +1 -0
- package/dist/src/agents/local-invocation.d.ts +45 -0
- package/dist/src/agents/local-invocation.js +101 -0
- package/dist/src/agents/local-invocation.js.map +1 -0
- package/dist/src/agents/local-invocation.test.d.ts +6 -0
- package/dist/src/agents/local-invocation.test.js +218 -0
- package/dist/src/agents/local-invocation.test.js.map +1 -0
- package/dist/src/agents/registry.d.ts +25 -1
- package/dist/src/agents/registry.js +149 -5
- package/dist/src/agents/registry.js.map +1 -1
- package/dist/src/agents/registry.test.js +247 -25
- package/dist/src/agents/registry.test.js.map +1 -1
- package/dist/src/agents/remote-invocation.d.ts +35 -0
- package/dist/src/agents/remote-invocation.js +129 -0
- package/dist/src/agents/remote-invocation.js.map +1 -0
- package/dist/src/agents/remote-invocation.test.d.ts +6 -0
- package/dist/src/agents/remote-invocation.test.js +201 -0
- package/dist/src/agents/remote-invocation.test.js.map +1 -0
- package/dist/src/agents/subagent-tool-wrapper.d.ts +2 -2
- package/dist/src/agents/subagent-tool-wrapper.js +11 -6
- package/dist/src/agents/subagent-tool-wrapper.js.map +1 -1
- package/dist/src/agents/subagent-tool-wrapper.test.js +25 -17
- package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -1
- package/dist/src/agents/toml-loader.d.ts +74 -0
- package/dist/src/agents/toml-loader.js +248 -0
- package/dist/src/agents/toml-loader.js.map +1 -0
- package/dist/src/agents/toml-loader.test.d.ts +6 -0
- package/dist/src/agents/toml-loader.test.js +309 -0
- package/dist/src/agents/toml-loader.test.js.map +1 -0
- package/dist/src/agents/types.d.ts +18 -4
- package/dist/src/availability/errorClassification.d.ts +7 -0
- package/dist/src/availability/errorClassification.js +20 -0
- package/dist/src/availability/errorClassification.js.map +1 -0
- package/dist/src/availability/modelAvailabilityService.d.ts +36 -0
- package/dist/src/availability/modelAvailabilityService.js +87 -0
- package/dist/src/availability/modelAvailabilityService.js.map +1 -0
- package/dist/src/availability/modelAvailabilityService.test.d.ts +6 -0
- package/dist/src/availability/modelAvailabilityService.test.js +140 -0
- package/dist/src/availability/modelAvailabilityService.test.js.map +1 -0
- package/dist/src/availability/modelPolicy.d.ts +49 -0
- package/dist/src/availability/modelPolicy.js +7 -0
- package/dist/src/availability/modelPolicy.js.map +1 -0
- package/dist/src/availability/policyCatalog.d.ts +23 -0
- package/dist/src/availability/policyCatalog.js +82 -0
- package/dist/src/availability/policyCatalog.js.map +1 -0
- package/dist/src/availability/policyCatalog.test.d.ts +6 -0
- package/dist/src/availability/policyCatalog.test.js +70 -0
- package/dist/src/availability/policyCatalog.test.js.map +1 -0
- package/dist/src/availability/policyHelpers.d.ts +52 -0
- package/dist/src/availability/policyHelpers.js +136 -0
- package/dist/src/availability/policyHelpers.js.map +1 -0
- package/dist/src/availability/policyHelpers.test.d.ts +6 -0
- package/dist/src/availability/policyHelpers.test.js +182 -0
- package/dist/src/availability/policyHelpers.test.js.map +1 -0
- package/dist/src/availability/testUtils.d.ts +10 -0
- package/dist/src/availability/testUtils.js +22 -0
- package/dist/src/availability/testUtils.js.map +1 -0
- package/dist/src/code_assist/experiments/client_metadata.js +3 -2
- package/dist/src/code_assist/experiments/client_metadata.js.map +1 -1
- package/dist/src/code_assist/experiments/client_metadata.test.js +7 -10
- package/dist/src/code_assist/experiments/client_metadata.test.js.map +1 -1
- package/dist/src/code_assist/experiments/experiments.js +2 -2
- package/dist/src/code_assist/experiments/experiments.js.map +1 -1
- package/dist/src/code_assist/oauth2.d.ts +2 -0
- package/dist/src/code_assist/oauth2.js +73 -17
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +195 -18
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/server.d.ts +10 -1
- package/dist/src/code_assist/server.js +81 -15
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/server.test.js +221 -25
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/code_assist/setup.js +6 -4
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/code_assist/setup.test.js +63 -0
- package/dist/src/code_assist/setup.test.js.map +1 -1
- package/dist/src/code_assist/telemetry.d.ts +14 -0
- package/dist/src/code_assist/telemetry.js +156 -0
- package/dist/src/code_assist/telemetry.js.map +1 -0
- package/dist/src/code_assist/telemetry.test.d.ts +6 -0
- package/dist/src/code_assist/telemetry.test.js +300 -0
- package/dist/src/code_assist/telemetry.test.js.map +1 -0
- package/dist/src/code_assist/types.d.ts +84 -1
- package/dist/src/code_assist/types.js +21 -0
- package/dist/src/code_assist/types.js.map +1 -1
- package/dist/src/commands/init.d.ts +7 -0
- package/dist/src/commands/init.js +53 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/init.test.d.ts +6 -0
- package/dist/src/commands/init.test.js +25 -0
- package/dist/src/commands/init.test.js.map +1 -0
- package/dist/src/commands/restore.d.ts +9 -0
- package/dist/src/commands/restore.js +46 -0
- package/dist/src/commands/restore.js.map +1 -0
- package/dist/src/commands/restore.test.d.ts +6 -0
- package/dist/src/commands/restore.test.js +137 -0
- package/dist/src/commands/restore.test.js.map +1 -0
- package/dist/src/commands/types.d.ts +41 -0
- package/dist/src/commands/types.js +7 -0
- package/dist/src/commands/types.js.map +1 -0
- package/dist/src/config/config.d.ts +120 -23
- package/dist/src/config/config.js +336 -116
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +373 -95
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/defaultModelConfigs.js +46 -0
- package/dist/src/config/defaultModelConfigs.js.map +1 -1
- package/dist/src/config/flashFallback.test.js +11 -35
- package/dist/src/config/flashFallback.test.js.map +1 -1
- package/dist/src/config/models.d.ts +29 -15
- package/dist/src/config/models.js +78 -28
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/models.test.js +91 -77
- package/dist/src/config/models.test.js.map +1 -1
- package/dist/src/config/storage.d.ts +4 -0
- package/dist/src/config/storage.js +12 -0
- package/dist/src/config/storage.js.map +1 -1
- package/dist/src/config/storage.test.js +16 -0
- package/dist/src/config/storage.test.js.map +1 -1
- package/dist/src/confirmation-bus/message-bus.d.ts +6 -0
- package/dist/src/confirmation-bus/message-bus.js +66 -3
- package/dist/src/confirmation-bus/message-bus.js.map +1 -1
- package/dist/src/confirmation-bus/types.d.ts +29 -2
- package/dist/src/confirmation-bus/types.js +3 -0
- package/dist/src/confirmation-bus/types.js.map +1 -1
- package/dist/src/core/baseLlmClient.d.ts +30 -2
- package/dist/src/core/baseLlmClient.js +107 -49
- package/dist/src/core/baseLlmClient.js.map +1 -1
- package/dist/src/core/baseLlmClient.test.js +271 -13
- package/dist/src/core/baseLlmClient.test.js.map +1 -1
- package/dist/src/core/client.d.ts +5 -1
- package/dist/src/core/client.js +241 -63
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +462 -72
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/clientHookTriggers.d.ts +36 -0
- package/dist/src/core/clientHookTriggers.js +76 -0
- package/dist/src/core/clientHookTriggers.js.map +1 -0
- package/dist/src/core/contentGenerator.js +17 -4
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +132 -3
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/coreToolHookTriggers.d.ts +55 -0
- package/dist/src/core/coreToolHookTriggers.js +304 -0
- package/dist/src/core/coreToolHookTriggers.js.map +1 -0
- package/dist/src/core/coreToolHookTriggers.test.d.ts +6 -0
- package/dist/src/core/coreToolHookTriggers.test.js +191 -0
- package/dist/src/core/coreToolHookTriggers.test.js.map +1 -0
- package/dist/src/core/coreToolScheduler.d.ts +6 -85
- package/dist/src/core/coreToolScheduler.js +69 -267
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +161 -346
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.js +132 -76
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +240 -257
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/geminiChatHookTriggers.d.ts +64 -0
- package/dist/src/core/geminiChatHookTriggers.js +136 -0
- package/dist/src/core/geminiChatHookTriggers.js.map +1 -0
- package/dist/src/core/geminiChat_network_retry.test.d.ts +6 -0
- package/dist/src/core/geminiChat_network_retry.test.js +196 -0
- package/dist/src/core/geminiChat_network_retry.test.js.map +1 -0
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.js +23 -6
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +13 -8
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/openaiContentGenerator.d.ts +25 -0
- package/dist/src/core/openaiContentGenerator.js +243 -14
- package/dist/src/core/openaiContentGenerator.js.map +1 -1
- package/dist/src/core/prompts.js +82 -26
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/prompts.test.js +102 -3
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/core/sessionHookTriggers.d.ts +29 -0
- package/dist/src/core/sessionHookTriggers.js +75 -0
- package/dist/src/core/sessionHookTriggers.js.map +1 -0
- package/dist/src/core/turn.d.ts +34 -21
- package/dist/src/core/turn.js +33 -13
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/core/turn.test.js +0 -5
- package/dist/src/core/turn.test.js.map +1 -1
- package/dist/src/fallback/handler.js +101 -93
- package/dist/src/fallback/handler.js.map +1 -1
- package/dist/src/fallback/handler.test.js +186 -173
- package/dist/src/fallback/handler.test.js.map +1 -1
- package/dist/src/fallback/types.d.ts +8 -0
- package/dist/src/generated/git-commit.d.ts +3 -3
- package/dist/src/generated/git-commit.js +3 -3
- 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/hookEventHandler.d.ts +113 -0
- package/dist/src/hooks/hookEventHandler.js +571 -0
- package/dist/src/hooks/hookEventHandler.js.map +1 -0
- package/dist/src/hooks/hookEventHandler.test.d.ts +6 -0
- package/dist/src/hooks/hookEventHandler.test.js +461 -0
- package/dist/src/hooks/hookEventHandler.test.js.map +1 -0
- package/dist/src/hooks/hookPlanner.d.ts +1 -5
- package/dist/src/hooks/hookPlanner.js +2 -7
- package/dist/src/hooks/hookPlanner.js.map +1 -1
- package/dist/src/hooks/hookPlanner.test.js +62 -2
- package/dist/src/hooks/hookPlanner.test.js.map +1 -1
- package/dist/src/hooks/hookRegistry.d.ts +6 -18
- package/dist/src/hooks/hookRegistry.js +49 -35
- package/dist/src/hooks/hookRegistry.js.map +1 -1
- package/dist/src/hooks/hookRegistry.test.js +167 -8
- package/dist/src/hooks/hookRegistry.test.js.map +1 -1
- package/dist/src/hooks/hookRunner.d.ts +5 -3
- package/dist/src/hooks/hookRunner.js +74 -18
- package/dist/src/hooks/hookRunner.js.map +1 -1
- package/dist/src/hooks/hookRunner.test.js +174 -36
- package/dist/src/hooks/hookRunner.test.js.map +1 -1
- package/dist/src/hooks/hookSystem.d.ts +40 -0
- package/dist/src/hooks/hookSystem.js +65 -0
- package/dist/src/hooks/hookSystem.js.map +1 -0
- package/dist/src/hooks/hookSystem.test.d.ts +6 -0
- package/dist/src/hooks/hookSystem.test.js +319 -0
- package/dist/src/hooks/hookSystem.test.js.map +1 -0
- package/dist/src/hooks/index.d.ts +17 -0
- package/dist/src/hooks/index.js +18 -0
- package/dist/src/hooks/index.js.map +1 -0
- 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 +21 -11
- package/dist/src/hooks/types.js +31 -27
- 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/detect-ide.test.js +32 -1
- package/dist/src/ide/detect-ide.test.js.map +1 -1
- package/dist/src/ide/ide-client.js +9 -4
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-client.test.js +17 -0
- package/dist/src/ide/ide-client.test.js.map +1 -1
- package/dist/src/ide/ide-installer.test.js +1 -1
- package/dist/src/ide/ide-installer.test.js.map +1 -1
- package/dist/src/ide/types.d.ts +4 -4
- package/dist/src/index.d.ts +17 -1
- package/dist/src/index.js +18 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/auth-provider.d.ts +16 -0
- package/dist/src/mcp/auth-provider.js +7 -0
- package/dist/src/mcp/auth-provider.js.map +1 -0
- package/dist/src/mcp/google-auth-provider.d.ts +10 -2
- package/dist/src/mcp/google-auth-provider.js +28 -0
- package/dist/src/mcp/google-auth-provider.js.map +1 -1
- package/dist/src/mcp/google-auth-provider.test.js +45 -0
- package/dist/src/mcp/google-auth-provider.test.js.map +1 -1
- package/dist/src/mcp/oauth-provider.js +6 -2
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/oauth-provider.test.js +4 -1
- package/dist/src/mcp/oauth-provider.test.js.map +1 -1
- package/dist/src/mcp/oauth-utils.d.ts +8 -1
- package/dist/src/mcp/oauth-utils.js +31 -2
- package/dist/src/mcp/oauth-utils.js.map +1 -1
- package/dist/src/mcp/oauth-utils.test.js +42 -0
- package/dist/src/mcp/oauth-utils.test.js.map +1 -1
- package/dist/src/mcp/sa-impersonation-provider.d.ts +2 -2
- package/dist/src/mcp/sa-impersonation-provider.js.map +1 -1
- package/dist/src/mcp/token-storage/hybrid-token-storage.js +1 -1
- package/dist/src/mcp/token-storage/hybrid-token-storage.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/output/json-formatter.d.ts +2 -2
- package/dist/src/output/json-formatter.js +6 -3
- package/dist/src/output/json-formatter.js.map +1 -1
- package/dist/src/output/json-formatter.test.js +37 -9
- package/dist/src/output/json-formatter.test.js.map +1 -1
- package/dist/src/output/stream-json-formatter.js +6 -0
- package/dist/src/output/stream-json-formatter.js.map +1 -1
- package/dist/src/output/stream-json-formatter.test.js +98 -100
- package/dist/src/output/stream-json-formatter.test.js.map +1 -1
- package/dist/src/output/types.d.ts +3 -0
- package/dist/src/output/types.js.map +1 -1
- package/dist/src/policy/config.js +140 -15
- package/dist/src/policy/config.js.map +1 -1
- package/dist/src/policy/config.test.js +21 -0
- package/dist/src/policy/config.test.js.map +1 -1
- package/dist/src/policy/persistence.test.d.ts +6 -0
- package/dist/src/policy/persistence.test.js +154 -0
- package/dist/src/policy/persistence.test.js.map +1 -0
- package/dist/src/policy/policies/agent.toml +31 -0
- package/dist/src/policy/policies/read-only.toml +5 -0
- package/dist/src/policy/policies/write.toml +5 -0
- package/dist/src/policy/policies/yolo.toml +1 -0
- package/dist/src/policy/policy-engine.d.ts +30 -1
- package/dist/src/policy/policy-engine.js +192 -5
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/policy-engine.test.js +520 -3
- package/dist/src/policy/policy-engine.test.js.map +1 -1
- package/dist/src/policy/policy-updater.test.d.ts +6 -0
- package/dist/src/policy/policy-updater.test.js +116 -0
- package/dist/src/policy/policy-updater.test.js.map +1 -0
- package/dist/src/policy/shell-safety.test.d.ts +6 -0
- package/dist/src/policy/shell-safety.test.js +75 -0
- package/dist/src/policy/shell-safety.test.js.map +1 -0
- package/dist/src/policy/toml-loader.d.ts +3 -5
- package/dist/src/policy/toml-loader.js +12 -60
- package/dist/src/policy/toml-loader.js.map +1 -1
- package/dist/src/policy/toml-loader.test.js +38 -7
- package/dist/src/policy/toml-loader.test.js.map +1 -1
- package/dist/src/policy/types.d.ts +72 -1
- package/dist/src/policy/types.js +21 -0
- package/dist/src/policy/types.js.map +1 -1
- package/dist/src/policy/utils.d.ts +21 -0
- package/dist/src/policy/utils.js +42 -0
- package/dist/src/policy/utils.js.map +1 -0
- package/dist/src/policy/utils.test.d.ts +6 -0
- package/dist/src/policy/utils.test.js +64 -0
- package/dist/src/policy/utils.test.js.map +1 -0
- package/dist/src/resources/resource-registry.d.ts +30 -0
- package/dist/src/resources/resource-registry.js +57 -0
- package/dist/src/resources/resource-registry.js.map +1 -0
- package/dist/src/resources/resource-registry.test.d.ts +6 -0
- package/dist/src/resources/resource-registry.test.js +54 -0
- package/dist/src/resources/resource-registry.test.js.map +1 -0
- package/dist/src/routing/modelRouterService.js +0 -15
- package/dist/src/routing/modelRouterService.js.map +1 -1
- package/dist/src/routing/modelRouterService.test.js +0 -62
- package/dist/src/routing/modelRouterService.test.js.map +1 -1
- package/dist/src/routing/strategies/classifierStrategy.js +10 -21
- package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
- package/dist/src/routing/strategies/classifierStrategy.test.js +2 -1
- package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
- 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/fallbackStrategy.js +20 -12
- package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.test.js +63 -39
- package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/overrideStrategy.js +3 -2
- package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
- package/dist/src/safety/checker-runner.js +17 -6
- package/dist/src/safety/checker-runner.js.map +1 -1
- package/dist/src/scheduler/tool-executor.d.ts +22 -0
- package/dist/src/scheduler/tool-executor.js +198 -0
- package/dist/src/scheduler/tool-executor.js.map +1 -0
- package/dist/src/scheduler/tool-executor.test.d.ts +6 -0
- package/dist/src/scheduler/tool-executor.test.js +231 -0
- package/dist/src/scheduler/tool-executor.test.js.map +1 -0
- package/dist/src/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/chatCompressionService.d.ts +1 -0
- package/dist/src/services/chatCompressionService.js +38 -8
- package/dist/src/services/chatCompressionService.js.map +1 -1
- package/dist/src/services/chatCompressionService.test.js +35 -31
- package/dist/src/services/chatCompressionService.test.js.map +1 -1
- package/dist/src/services/chatRecordingService.d.ts +14 -0
- package/dist/src/services/chatRecordingService.js +37 -0
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/contextManager.d.ts +29 -0
- package/dist/src/services/contextManager.js +71 -0
- package/dist/src/services/contextManager.js.map +1 -0
- package/dist/src/services/contextManager.test.d.ts +6 -0
- package/dist/src/services/contextManager.test.js +104 -0
- package/dist/src/services/contextManager.test.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/fileSystemService.d.ts +0 -9
- package/dist/src/services/fileSystemService.js +0 -11
- package/dist/src/services/fileSystemService.js.map +1 -1
- package/dist/src/services/gitService.js +18 -2
- package/dist/src/services/gitService.js.map +1 -1
- package/dist/src/services/gitService.test.js +56 -0
- package/dist/src/services/gitService.test.js.map +1 -1
- package/dist/src/services/loopDetectionService.js +5 -4
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/loopDetectionService.test.js +14 -8
- package/dist/src/services/loopDetectionService.test.js.map +1 -1
- package/dist/src/services/modelConfig.golden.test.js +32 -0
- package/dist/src/services/modelConfig.golden.test.js.map +1 -1
- package/dist/src/services/modelConfig.integration.test.js +1 -1
- package/dist/src/services/modelConfig.integration.test.js.map +1 -1
- package/dist/src/services/modelConfigService.d.ts +4 -0
- package/dist/src/services/modelConfigService.js +8 -3
- package/dist/src/services/modelConfigService.js.map +1 -1
- package/dist/src/services/modelConfigService.test.js +221 -0
- package/dist/src/services/modelConfigService.test.js.map +1 -1
- package/dist/src/services/modelConfigServiceTestUtils.d.ts +10 -0
- package/dist/src/services/modelConfigServiceTestUtils.js +17 -0
- package/dist/src/services/modelConfigServiceTestUtils.js.map +1 -0
- package/dist/src/services/sessionSummaryService.d.ts +28 -0
- package/dist/src/services/sessionSummaryService.js +131 -0
- package/dist/src/services/sessionSummaryService.js.map +1 -0
- package/dist/src/services/sessionSummaryService.test.d.ts +6 -0
- package/dist/src/services/sessionSummaryService.test.js +785 -0
- package/dist/src/services/sessionSummaryService.test.js.map +1 -0
- package/dist/src/services/sessionSummaryUtils.d.ts +16 -0
- package/dist/src/services/sessionSummaryUtils.js +129 -0
- package/dist/src/services/sessionSummaryUtils.js.map +1 -0
- package/dist/src/services/sessionSummaryUtils.test.d.ts +6 -0
- package/dist/src/services/sessionSummaryUtils.test.js +137 -0
- package/dist/src/services/sessionSummaryUtils.test.js.map +1 -0
- package/dist/src/services/shellExecutionService.d.ts +4 -0
- package/dist/src/services/shellExecutionService.js +45 -27
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +240 -8
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/services/test-data/resolved-aliases-retry.golden.json +238 -0
- package/dist/src/services/test-data/resolved-aliases.golden.json +36 -0
- package/dist/src/skills/skillLoader.d.ts +28 -0
- package/dist/src/skills/skillLoader.js +77 -0
- package/dist/src/skills/skillLoader.js.map +1 -0
- package/dist/src/skills/skillLoader.test.d.ts +1 -0
- package/dist/src/skills/skillLoader.test.js +2 -0
- package/dist/src/skills/skillLoader.test.js.map +1 -0
- package/dist/src/skills/skillManager.d.ts +51 -0
- package/dist/src/skills/skillManager.js +89 -0
- package/dist/src/skills/skillManager.js.map +1 -0
- package/dist/src/skills/skillManager.test.d.ts +6 -0
- package/dist/src/skills/skillManager.test.js +128 -0
- package/dist/src/skills/skillManager.test.js.map +1 -0
- package/dist/src/telemetry/activity-detector.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +11 -7
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +127 -47
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +105 -18
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +9 -3
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +20 -5
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/config.js +2 -0
- package/dist/src/telemetry/config.js.map +1 -1
- package/dist/src/telemetry/config.test.js +25 -0
- package/dist/src/telemetry/config.test.js.map +1 -1
- package/dist/src/telemetry/gcp-exporters.d.ts +4 -3
- package/dist/src/telemetry/gcp-exporters.js +8 -4
- package/dist/src/telemetry/gcp-exporters.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +2 -1
- package/dist/src/telemetry/index.js +2 -1
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +5 -3
- package/dist/src/telemetry/loggers.js +353 -334
- package/dist/src/telemetry/loggers.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/loggers.test.js +238 -31
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +22 -0
- package/dist/src/telemetry/metrics.js +32 -0
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js +64 -0
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/telemetry/sanitize.d.ts +25 -0
- package/dist/src/telemetry/sanitize.js +48 -0
- package/dist/src/telemetry/sanitize.js.map +1 -0
- package/dist/src/telemetry/sanitize.test.d.ts +6 -0
- package/dist/src/telemetry/sanitize.test.js +279 -0
- package/dist/src/telemetry/sanitize.test.js.map +1 -0
- package/dist/src/telemetry/sdk.d.ts +9 -2
- package/dist/src/telemetry/sdk.js +142 -17
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/sdk.test.js +130 -28
- package/dist/src/telemetry/sdk.test.js.map +1 -1
- package/dist/src/telemetry/semantic.js +1 -1
- package/dist/src/telemetry/semantic.js.map +1 -1
- package/dist/src/telemetry/startupProfiler.d.ts +51 -0
- package/dist/src/telemetry/startupProfiler.js +170 -0
- package/dist/src/telemetry/startupProfiler.js.map +1 -0
- package/dist/src/telemetry/startupProfiler.test.d.ts +6 -0
- package/dist/src/telemetry/startupProfiler.test.js +285 -0
- package/dist/src/telemetry/startupProfiler.test.js.map +1 -0
- package/dist/src/telemetry/telemetry.test.js +10 -3
- package/dist/src/telemetry/telemetry.test.js.map +1 -1
- package/dist/src/telemetry/trace.js +2 -2
- package/dist/src/telemetry/trace.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +62 -16
- package/dist/src/telemetry/types.js +157 -27
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.d.ts +1 -0
- package/dist/src/telemetry/uiTelemetry.js +2 -0
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +4 -0
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/test-utils/mock-message-bus.d.ts +61 -0
- package/dist/src/test-utils/mock-message-bus.js +160 -0
- package/dist/src/test-utils/mock-message-bus.js.map +1 -0
- package/dist/src/test-utils/mock-tool.d.ts +5 -3
- package/dist/src/test-utils/mock-tool.js +12 -11
- package/dist/src/test-utils/mock-tool.js.map +1 -1
- package/dist/src/tools/activate-skill.d.ts +27 -0
- package/dist/src/tools/activate-skill.js +120 -0
- package/dist/src/tools/activate-skill.js.map +1 -0
- package/dist/src/tools/activate-skill.test.d.ts +6 -0
- package/dist/src/tools/activate-skill.test.js +95 -0
- package/dist/src/tools/activate-skill.test.js.map +1 -0
- package/dist/src/tools/confirmation-policy.test.d.ts +6 -0
- package/dist/src/tools/confirmation-policy.test.js +142 -0
- package/dist/src/tools/confirmation-policy.test.js.map +1 -0
- package/dist/src/tools/edit.d.ts +27 -5
- package/dist/src/tools/edit.js +449 -137
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +258 -526
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/get-internal-docs.d.ts +27 -0
- package/dist/src/tools/get-internal-docs.js +129 -0
- package/dist/src/tools/get-internal-docs.js.map +1 -0
- package/dist/src/tools/get-internal-docs.test.d.ts +6 -0
- package/dist/src/tools/get-internal-docs.test.js +57 -0
- package/dist/src/tools/get-internal-docs.test.js.map +1 -0
- package/dist/src/tools/glob.d.ts +2 -2
- package/dist/src/tools/glob.js +1 -1
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +2 -1
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/grep.d.ts +2 -2
- package/dist/src/tools/grep.js +1 -1
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/grep.test.js +5 -4
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/ls.d.ts +2 -2
- package/dist/src/tools/ls.js +2 -2
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/ls.test.js +2 -1
- package/dist/src/tools/ls.test.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.d.ts +3 -1
- package/dist/src/tools/mcp-client-manager.js +42 -9
- package/dist/src/tools/mcp-client-manager.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.test.js +66 -10
- package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +44 -6
- package/dist/src/tools/mcp-client.js +476 -176
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +633 -36
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +2 -2
- package/dist/src/tools/mcp-tool.js +20 -7
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.test.js +35 -5
- package/dist/src/tools/mcp-tool.test.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +3 -3
- package/dist/src/tools/memoryTool.js +3 -4
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/memoryTool.test.js +5 -2
- package/dist/src/tools/memoryTool.test.js.map +1 -1
- package/dist/src/tools/message-bus-integration.test.js +10 -37
- package/dist/src/tools/message-bus-integration.test.js.map +1 -1
- package/dist/src/tools/modifiable-tool.js.map +1 -1
- package/dist/src/tools/modifiable-tool.test.js +22 -13
- package/dist/src/tools/modifiable-tool.test.js.map +1 -1
- package/dist/src/tools/read-file.d.ts +2 -2
- package/dist/src/tools/read-file.js +2 -2
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +3 -2
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.d.ts +2 -2
- package/dist/src/tools/read-many-files.js +7 -6
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +4 -3
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/ripGrep.d.ts +3 -2
- package/dist/src/tools/ripGrep.js +18 -7
- package/dist/src/tools/ripGrep.js.map +1 -1
- package/dist/src/tools/ripGrep.test.js +60 -4
- package/dist/src/tools/ripGrep.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +5 -7
- package/dist/src/tools/shell.js +77 -51
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +59 -63
- package/dist/src/tools/shell.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-names.d.ts +17 -0
- package/dist/src/tools/tool-names.js +59 -0
- package/dist/src/tools/tool-names.js.map +1 -1
- package/dist/src/tools/tool-names.test.d.ts +6 -0
- package/dist/src/tools/tool-names.test.js +43 -0
- package/dist/src/tools/tool-names.test.js.map +1 -0
- package/dist/src/tools/tool-registry.d.ts +11 -7
- package/dist/src/tools/tool-registry.js +15 -10
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +16 -11
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +25 -6
- package/dist/src/tools/tools.js +44 -25
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/tools.test.js +3 -1
- package/dist/src/tools/tools.test.js.map +1 -1
- package/dist/src/tools/web-fetch.d.ts +2 -2
- package/dist/src/tools/web-fetch.js +22 -9
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-fetch.test.js +18 -19
- package/dist/src/tools/web-fetch.test.js.map +1 -1
- package/dist/src/tools/web-search.d.ts +2 -2
- package/dist/src/tools/web-search.js +5 -5
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/web-search.test.js +2 -1
- package/dist/src/tools/web-search.test.js.map +1 -1
- package/dist/src/tools/write-file.d.ts +2 -2
- package/dist/src/tools/write-file.js +10 -4
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +4 -1
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/tools/write-todos.d.ts +2 -2
- package/dist/src/tools/write-todos.js +5 -4
- package/dist/src/tools/write-todos.js.map +1 -1
- package/dist/src/tools/write-todos.test.js +2 -1
- package/dist/src/tools/write-todos.test.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.d.ts +8 -0
- package/dist/src/utils/bfsFileSearch.js +63 -23
- package/dist/src/utils/bfsFileSearch.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.test.js +65 -1
- package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
- package/dist/src/utils/checkpointUtils.d.ts +82 -0
- package/dist/src/utils/checkpointUtils.js +117 -0
- package/dist/src/utils/checkpointUtils.js.map +1 -0
- package/dist/src/utils/checkpointUtils.test.d.ts +6 -0
- package/dist/src/utils/checkpointUtils.test.js +229 -0
- package/dist/src/utils/checkpointUtils.test.js.map +1 -0
- package/dist/src/utils/customHeaderUtils.d.ts +9 -0
- package/dist/src/utils/customHeaderUtils.js +34 -0
- package/dist/src/utils/customHeaderUtils.js.map +1 -0
- package/dist/src/utils/customHeaderUtils.test.d.ts +6 -0
- package/dist/src/utils/customHeaderUtils.test.js +77 -0
- package/dist/src/utils/customHeaderUtils.test.js.map +1 -0
- package/dist/src/utils/debugLogger.d.ts +3 -0
- package/dist/src/utils/debugLogger.js +28 -0
- package/dist/src/utils/debugLogger.js.map +1 -1
- package/dist/src/utils/editCorrector.js +6 -5
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editCorrector.test.js +7 -3
- package/dist/src/utils/editCorrector.test.js.map +1 -1
- package/dist/src/utils/editor.d.ts +9 -1
- package/dist/src/utils/editor.js +23 -14
- package/dist/src/utils/editor.js.map +1 -1
- package/dist/src/utils/environmentContext.d.ts +1 -0
- package/dist/src/utils/environmentContext.js +4 -0
- package/dist/src/utils/environmentContext.js.map +1 -1
- package/dist/src/utils/environmentContext.test.js +2 -0
- package/dist/src/utils/environmentContext.test.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/errors.d.ts +8 -0
- package/dist/src/utils/errors.js +39 -2
- package/dist/src/utils/errors.js.map +1 -1
- package/dist/src/utils/errors.test.d.ts +6 -0
- package/dist/src/utils/errors.test.js +155 -0
- package/dist/src/utils/errors.test.js.map +1 -0
- package/dist/src/utils/events.d.ts +49 -19
- package/dist/src/utils/events.js +21 -9
- package/dist/src/utils/events.js.map +1 -1
- package/dist/src/utils/events.test.js +25 -0
- package/dist/src/utils/events.test.js.map +1 -1
- package/dist/src/utils/exitCodes.d.ts +12 -0
- package/dist/src/utils/exitCodes.js +13 -0
- package/dist/src/utils/exitCodes.js.map +1 -0
- package/dist/src/utils/extensionLoader.d.ts +2 -2
- package/dist/src/utils/extensionLoader.js +5 -6
- package/dist/src/utils/extensionLoader.js.map +1 -1
- package/dist/src/utils/extensionLoader.test.js +11 -0
- package/dist/src/utils/extensionLoader.test.js.map +1 -1
- package/dist/src/utils/fetch.d.ts +1 -1
- package/dist/src/utils/fetch.js +3 -3
- package/dist/src/utils/fetch.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 +127 -1
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/filesearch/crawlCache.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
- package/dist/src/utils/flashFallback.test.js +1 -1
- package/dist/src/utils/flashFallback.test.js.map +1 -1
- package/dist/src/utils/geminiIgnoreParser.d.ts +11 -0
- package/dist/src/utils/geminiIgnoreParser.js +20 -0
- package/dist/src/utils/geminiIgnoreParser.js.map +1 -1
- package/dist/src/utils/geminiIgnoreParser.test.js +48 -0
- package/dist/src/utils/geminiIgnoreParser.test.js.map +1 -1
- package/dist/src/utils/generateContentResponseUtilities.d.ts +3 -1
- package/dist/src/utils/generateContentResponseUtilities.js +106 -0
- package/dist/src/utils/generateContentResponseUtilities.js.map +1 -1
- package/dist/src/utils/generateContentResponseUtilities.test.js +279 -2
- package/dist/src/utils/generateContentResponseUtilities.test.js.map +1 -1
- package/dist/src/utils/getFolderStructure.js +7 -2
- package/dist/src/utils/getFolderStructure.js.map +1 -1
- package/dist/src/utils/googleErrors.js +31 -18
- package/dist/src/utils/googleErrors.js.map +1 -1
- package/dist/src/utils/googleErrors.test.js +10 -2
- package/dist/src/utils/googleErrors.test.js.map +1 -1
- package/dist/src/utils/googleQuotaErrors.d.ts +3 -3
- package/dist/src/utils/googleQuotaErrors.js +32 -6
- package/dist/src/utils/googleQuotaErrors.js.map +1 -1
- package/dist/src/utils/googleQuotaErrors.test.js +94 -2
- package/dist/src/utils/googleQuotaErrors.test.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.d.ts +5 -0
- package/dist/src/utils/memoryDiscovery.js +9 -5
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +31 -1
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.test.js +4 -0
- package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
- package/dist/src/utils/package.d.ts +14 -0
- package/dist/src/utils/package.js +15 -2
- package/dist/src/utils/package.js.map +1 -1
- package/dist/src/utils/pathCorrector.js +12 -2
- package/dist/src/utils/pathCorrector.js.map +1 -1
- package/dist/src/utils/pathCorrector.test.js +6 -2
- package/dist/src/utils/pathCorrector.test.js.map +1 -1
- package/dist/src/utils/retry.d.ts +11 -0
- package/dist/src/utils/retry.js +62 -21
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/retry.test.js +170 -10
- package/dist/src/utils/retry.test.js.map +1 -1
- package/dist/src/utils/schemaValidator.d.ts +1 -1
- package/dist/src/utils/schemaValidator.js +1 -1
- package/dist/src/utils/shell-permissions.d.ts +52 -0
- package/dist/src/utils/shell-permissions.js +188 -0
- package/dist/src/utils/shell-permissions.js.map +1 -0
- package/dist/src/utils/shell-permissions.test.d.ts +6 -0
- package/dist/src/utils/shell-permissions.test.js +369 -0
- package/dist/src/utils/shell-permissions.test.js.map +1 -0
- package/dist/src/utils/shell-utils.d.ts +16 -47
- package/dist/src/utils/shell-utils.js +99 -195
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/shell-utils.test.js +99 -288
- package/dist/src/utils/shell-utils.test.js.map +1 -1
- package/dist/src/utils/stdio.d.ts +2 -2
- package/dist/src/utils/stdio.js +2 -2
- package/dist/src/utils/stdio.js.map +1 -1
- package/dist/src/utils/stdio.test.js +5 -5
- package/dist/src/utils/stdio.test.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 +4 -0
- package/dist/src/utils/terminal.js +12 -0
- package/dist/src/utils/terminal.js.map +1 -1
- package/dist/src/utils/terminalSerializer.test.js +17 -0
- package/dist/src/utils/terminalSerializer.test.js.map +1 -1
- package/dist/src/utils/tokenCalculation.d.ts +19 -0
- package/dist/src/utils/tokenCalculation.js +85 -0
- package/dist/src/utils/tokenCalculation.js.map +1 -0
- package/dist/src/utils/tokenCalculation.test.d.ts +6 -0
- package/dist/src/utils/tokenCalculation.test.js +87 -0
- package/dist/src/utils/tokenCalculation.test.js.map +1 -0
- 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 +17 -2
- package/dist/src/utils/tool-utils.test.js.map +1 -1
- package/dist/src/utils/version.d.ts +6 -0
- package/dist/src/utils/version.js +15 -0
- package/dist/src/utils/version.js.map +1 -0
- package/dist/src/utils/version.test.d.ts +6 -0
- package/dist/src/utils/version.test.js +39 -0
- package/dist/src/utils/version.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -7
|
@@ -3,36 +3,36 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { describe, it, expect, vi
|
|
7
|
-
import { CoreToolScheduler
|
|
8
|
-
import { DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES, DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD, BaseDeclarativeTool, BaseToolInvocation, ToolConfirmationOutcome, Kind, ApprovalMode, } from '../index.js';
|
|
6
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
7
|
+
import { CoreToolScheduler } from './coreToolScheduler.js';
|
|
8
|
+
import { DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES, DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD, BaseDeclarativeTool, BaseToolInvocation, ToolConfirmationOutcome, Kind, ApprovalMode, HookSystem, } from '../index.js';
|
|
9
|
+
import { createMockMessageBus } from '../test-utils/mock-message-bus.js';
|
|
9
10
|
import { MockModifiableTool, MockTool, MOCK_TOOL_SHOULD_CONFIRM_EXECUTE, } from '../test-utils/mock-tool.js';
|
|
10
11
|
import * as modifiableToolModule from '../tools/modifiable-tool.js';
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import { isShellInvocationAllowlisted } from '../utils/shell-utils.js';
|
|
12
|
+
import { isShellInvocationAllowlisted } from '../utils/shell-permissions.js';
|
|
13
|
+
import { DEFAULT_GEMINI_MODEL } from '../config/models.js';
|
|
14
14
|
vi.mock('fs/promises', () => ({
|
|
15
15
|
writeFile: vi.fn(),
|
|
16
16
|
}));
|
|
17
17
|
class TestApprovalTool extends BaseDeclarativeTool {
|
|
18
18
|
config;
|
|
19
19
|
static Name = 'testApprovalTool';
|
|
20
|
-
constructor(config) {
|
|
20
|
+
constructor(config, messageBus) {
|
|
21
21
|
super(TestApprovalTool.Name, 'TestApprovalTool', 'A tool for testing approval logic', Kind.Edit, {
|
|
22
22
|
properties: { id: { type: 'string' } },
|
|
23
23
|
required: ['id'],
|
|
24
24
|
type: 'object',
|
|
25
|
-
});
|
|
25
|
+
}, messageBus);
|
|
26
26
|
this.config = config;
|
|
27
27
|
}
|
|
28
|
-
createInvocation(params) {
|
|
29
|
-
return new TestApprovalInvocation(this.config, params);
|
|
28
|
+
createInvocation(params, messageBus, _toolName, _toolDisplayName) {
|
|
29
|
+
return new TestApprovalInvocation(this.config, params, messageBus);
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
class TestApprovalInvocation extends BaseToolInvocation {
|
|
33
33
|
config;
|
|
34
|
-
constructor(config, params) {
|
|
35
|
-
super(params);
|
|
34
|
+
constructor(config, params, messageBus) {
|
|
35
|
+
super(params, messageBus);
|
|
36
36
|
this.config = config;
|
|
37
37
|
}
|
|
38
38
|
getDescription() {
|
|
@@ -68,8 +68,8 @@ class TestApprovalInvocation extends BaseToolInvocation {
|
|
|
68
68
|
class AbortDuringConfirmationInvocation extends BaseToolInvocation {
|
|
69
69
|
abortController;
|
|
70
70
|
abortError;
|
|
71
|
-
constructor(abortController, abortError, params) {
|
|
72
|
-
super(params);
|
|
71
|
+
constructor(abortController, abortError, params, messageBus) {
|
|
72
|
+
super(params, messageBus);
|
|
73
73
|
this.abortController = abortController;
|
|
74
74
|
this.abortError = abortError;
|
|
75
75
|
}
|
|
@@ -87,16 +87,16 @@ class AbortDuringConfirmationInvocation extends BaseToolInvocation {
|
|
|
87
87
|
class AbortDuringConfirmationTool extends BaseDeclarativeTool {
|
|
88
88
|
abortController;
|
|
89
89
|
abortError;
|
|
90
|
-
constructor(abortController, abortError) {
|
|
90
|
+
constructor(abortController, abortError, messageBus) {
|
|
91
91
|
super('abortDuringConfirmationTool', 'Abort During Confirmation Tool', 'A tool that aborts while confirming execution.', Kind.Other, {
|
|
92
92
|
type: 'object',
|
|
93
93
|
properties: {},
|
|
94
|
-
});
|
|
94
|
+
}, messageBus);
|
|
95
95
|
this.abortController = abortController;
|
|
96
96
|
this.abortError = abortError;
|
|
97
97
|
}
|
|
98
|
-
createInvocation(params) {
|
|
99
|
-
return new AbortDuringConfirmationInvocation(this.abortController, this.abortError, params);
|
|
98
|
+
createInvocation(params, messageBus, _toolName, _toolDisplayName) {
|
|
99
|
+
return new AbortDuringConfirmationInvocation(this.abortController, this.abortError, params, messageBus);
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
async function waitForStatus(onToolCallsUpdate, status, timeout = 5000) {
|
|
@@ -136,11 +136,13 @@ function createMockConfig(overrides = {}) {
|
|
|
136
136
|
discoverTools: async () => { },
|
|
137
137
|
getAllTools: () => [],
|
|
138
138
|
getToolsByServer: () => [],
|
|
139
|
+
getExperiments: () => { },
|
|
139
140
|
};
|
|
140
141
|
const baseConfig = {
|
|
141
142
|
getSessionId: () => 'test-session-id',
|
|
142
143
|
getUsageStatisticsEnabled: () => true,
|
|
143
144
|
getDebugMode: () => false,
|
|
145
|
+
isInteractive: () => true,
|
|
144
146
|
getApprovalMode: () => ApprovalMode.DEFAULT,
|
|
145
147
|
setApprovalMode: () => { },
|
|
146
148
|
getAllowedTools: () => [],
|
|
@@ -151,6 +153,11 @@ function createMockConfig(overrides = {}) {
|
|
|
151
153
|
getShellExecutionConfig: () => ({
|
|
152
154
|
terminalWidth: 90,
|
|
153
155
|
terminalHeight: 30,
|
|
156
|
+
sanitizationConfig: {
|
|
157
|
+
enableEnvironmentVariableRedaction: true,
|
|
158
|
+
allowedEnvironmentVariables: [],
|
|
159
|
+
blockedEnvironmentVariables: [],
|
|
160
|
+
},
|
|
154
161
|
}),
|
|
155
162
|
storage: {
|
|
156
163
|
getProjectTempDir: () => '/tmp',
|
|
@@ -158,12 +165,12 @@ function createMockConfig(overrides = {}) {
|
|
|
158
165
|
getTruncateToolOutputThreshold: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
|
|
159
166
|
getTruncateToolOutputLines: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
|
|
160
167
|
getToolRegistry: () => defaultToolRegistry,
|
|
161
|
-
|
|
162
|
-
getUseModelRouter: () => false,
|
|
168
|
+
getActiveModel: () => DEFAULT_GEMINI_MODEL,
|
|
163
169
|
getGeminiClient: () => null,
|
|
164
|
-
|
|
165
|
-
|
|
170
|
+
getMessageBus: () => createMockMessageBus(),
|
|
171
|
+
getEnableHooks: () => false,
|
|
166
172
|
getPolicyEngine: () => null,
|
|
173
|
+
getExperiments: () => { },
|
|
167
174
|
};
|
|
168
175
|
return { ...baseConfig, ...overrides };
|
|
169
176
|
}
|
|
@@ -254,7 +261,7 @@ describe('CoreToolScheduler', () => {
|
|
|
254
261
|
const onToolCallsUpdate = vi.fn();
|
|
255
262
|
const mockConfig = createMockConfig({
|
|
256
263
|
getToolRegistry: () => mockToolRegistry,
|
|
257
|
-
|
|
264
|
+
getHookSystem: () => undefined,
|
|
258
265
|
});
|
|
259
266
|
const scheduler = new CoreToolScheduler({
|
|
260
267
|
config: mockConfig,
|
|
@@ -343,7 +350,7 @@ describe('CoreToolScheduler', () => {
|
|
|
343
350
|
const onToolCallsUpdate = vi.fn();
|
|
344
351
|
const mockConfig = createMockConfig({
|
|
345
352
|
getToolRegistry: () => mockToolRegistry,
|
|
346
|
-
|
|
353
|
+
getHookSystem: () => undefined,
|
|
347
354
|
});
|
|
348
355
|
const scheduler = new CoreToolScheduler({
|
|
349
356
|
config: mockConfig,
|
|
@@ -395,7 +402,7 @@ describe('CoreToolScheduler', () => {
|
|
|
395
402
|
it('should mark tool call as cancelled when abort happens during confirmation error', async () => {
|
|
396
403
|
const abortController = new AbortController();
|
|
397
404
|
const abortError = new Error('Abort requested during confirmation');
|
|
398
|
-
const declarativeTool = new AbortDuringConfirmationTool(abortController, abortError);
|
|
405
|
+
const declarativeTool = new AbortDuringConfirmationTool(abortController, abortError, createMockMessageBus());
|
|
399
406
|
const mockToolRegistry = {
|
|
400
407
|
getTool: () => declarativeTool,
|
|
401
408
|
getFunctionDeclarations: () => [],
|
|
@@ -436,34 +443,56 @@ describe('CoreToolScheduler', () => {
|
|
|
436
443
|
const statuses = onToolCallsUpdate.mock.calls.flatMap((call) => call[0].map((toolCall) => toolCall.status));
|
|
437
444
|
expect(statuses).not.toContain('error');
|
|
438
445
|
});
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
446
|
+
it('should error when tool requires confirmation in non-interactive mode', async () => {
|
|
447
|
+
const mockTool = new MockTool({
|
|
448
|
+
name: 'mockTool',
|
|
449
|
+
shouldConfirmExecute: MOCK_TOOL_SHOULD_CONFIRM_EXECUTE,
|
|
450
|
+
});
|
|
451
|
+
const declarativeTool = mockTool;
|
|
452
|
+
const mockToolRegistry = {
|
|
453
|
+
getTool: () => declarativeTool,
|
|
454
|
+
getFunctionDeclarations: () => [],
|
|
455
|
+
tools: new Map(),
|
|
456
|
+
discovery: {},
|
|
457
|
+
registerTool: () => { },
|
|
458
|
+
getToolByName: () => declarativeTool,
|
|
459
|
+
getToolByDisplayName: () => declarativeTool,
|
|
460
|
+
getTools: () => [],
|
|
461
|
+
discoverTools: async () => { },
|
|
462
|
+
getAllTools: () => [],
|
|
463
|
+
getToolsByServer: () => [],
|
|
464
|
+
};
|
|
465
|
+
const onAllToolCallsComplete = vi.fn();
|
|
466
|
+
const onToolCallsUpdate = vi.fn();
|
|
467
|
+
const mockConfig = createMockConfig({
|
|
468
|
+
getToolRegistry: () => mockToolRegistry,
|
|
469
|
+
isInteractive: () => false,
|
|
470
|
+
});
|
|
471
|
+
const scheduler = new CoreToolScheduler({
|
|
472
|
+
config: mockConfig,
|
|
473
|
+
onAllToolCallsComplete,
|
|
474
|
+
onToolCallsUpdate,
|
|
475
|
+
getPreferredEditor: () => 'vscode',
|
|
466
476
|
});
|
|
477
|
+
const abortController = new AbortController();
|
|
478
|
+
const request = {
|
|
479
|
+
callId: '1',
|
|
480
|
+
name: 'mockTool',
|
|
481
|
+
args: {},
|
|
482
|
+
isClientInitiated: false,
|
|
483
|
+
prompt_id: 'prompt-id-1',
|
|
484
|
+
};
|
|
485
|
+
await scheduler.schedule([request], abortController.signal);
|
|
486
|
+
expect(onAllToolCallsComplete).toHaveBeenCalled();
|
|
487
|
+
const completedCalls = onAllToolCallsComplete.mock
|
|
488
|
+
.calls[0][0];
|
|
489
|
+
expect(completedCalls[0].status).toBe('error');
|
|
490
|
+
const erroredCall = completedCalls[0];
|
|
491
|
+
const errorResponse = erroredCall.response;
|
|
492
|
+
const errorParts = errorResponse.responseParts;
|
|
493
|
+
// @ts-expect-error - accessing internal structure of FunctionResponsePart
|
|
494
|
+
const errorMessage = errorParts[0].functionResponse.response.error;
|
|
495
|
+
expect(errorMessage).toContain('Tool execution for "mockTool" requires user confirmation, which is not supported in non-interactive mode.');
|
|
467
496
|
});
|
|
468
497
|
});
|
|
469
498
|
describe('CoreToolScheduler with payload', () => {
|
|
@@ -488,8 +517,13 @@ describe('CoreToolScheduler with payload', () => {
|
|
|
488
517
|
const onToolCallsUpdate = vi.fn();
|
|
489
518
|
const mockConfig = createMockConfig({
|
|
490
519
|
getToolRegistry: () => mockToolRegistry,
|
|
491
|
-
isInteractive: () => false,
|
|
492
520
|
});
|
|
521
|
+
const mockMessageBus = createMockMessageBus();
|
|
522
|
+
mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
|
|
523
|
+
mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
|
|
524
|
+
mockConfig.getHookSystem = vi
|
|
525
|
+
.fn()
|
|
526
|
+
.mockReturnValue(new HookSystem(mockConfig));
|
|
493
527
|
const scheduler = new CoreToolScheduler({
|
|
494
528
|
config: mockConfig,
|
|
495
529
|
onAllToolCallsComplete,
|
|
@@ -523,176 +557,9 @@ describe('CoreToolScheduler with payload', () => {
|
|
|
523
557
|
});
|
|
524
558
|
});
|
|
525
559
|
});
|
|
526
|
-
describe('convertToFunctionResponse', () => {
|
|
527
|
-
const toolName = 'testTool';
|
|
528
|
-
const callId = 'call1';
|
|
529
|
-
it('should handle simple string llmContent', () => {
|
|
530
|
-
const llmContent = 'Simple text output';
|
|
531
|
-
const result = convertToFunctionResponse(toolName, callId, llmContent);
|
|
532
|
-
expect(result).toEqual([
|
|
533
|
-
{
|
|
534
|
-
functionResponse: {
|
|
535
|
-
name: toolName,
|
|
536
|
-
id: callId,
|
|
537
|
-
response: { output: 'Simple text output' },
|
|
538
|
-
},
|
|
539
|
-
},
|
|
540
|
-
]);
|
|
541
|
-
});
|
|
542
|
-
it('should handle llmContent as a single Part with text', () => {
|
|
543
|
-
const llmContent = { text: 'Text from Part object' };
|
|
544
|
-
const result = convertToFunctionResponse(toolName, callId, llmContent);
|
|
545
|
-
expect(result).toEqual([
|
|
546
|
-
{
|
|
547
|
-
functionResponse: {
|
|
548
|
-
name: toolName,
|
|
549
|
-
id: callId,
|
|
550
|
-
response: { output: 'Text from Part object' },
|
|
551
|
-
},
|
|
552
|
-
},
|
|
553
|
-
]);
|
|
554
|
-
});
|
|
555
|
-
it('should handle llmContent as a PartListUnion array with a single text Part', () => {
|
|
556
|
-
const llmContent = [{ text: 'Text from array' }];
|
|
557
|
-
const result = convertToFunctionResponse(toolName, callId, llmContent);
|
|
558
|
-
expect(result).toEqual([
|
|
559
|
-
{
|
|
560
|
-
functionResponse: {
|
|
561
|
-
name: toolName,
|
|
562
|
-
id: callId,
|
|
563
|
-
response: { output: 'Text from array' },
|
|
564
|
-
},
|
|
565
|
-
},
|
|
566
|
-
]);
|
|
567
|
-
});
|
|
568
|
-
it('should handle llmContent with inlineData', () => {
|
|
569
|
-
const llmContent = {
|
|
570
|
-
inlineData: { mimeType: 'image/png', data: 'base64...' },
|
|
571
|
-
};
|
|
572
|
-
const result = convertToFunctionResponse(toolName, callId, llmContent);
|
|
573
|
-
expect(result).toEqual([
|
|
574
|
-
{
|
|
575
|
-
functionResponse: {
|
|
576
|
-
name: toolName,
|
|
577
|
-
id: callId,
|
|
578
|
-
response: {
|
|
579
|
-
output: 'Binary content of type image/png was processed.',
|
|
580
|
-
},
|
|
581
|
-
},
|
|
582
|
-
},
|
|
583
|
-
llmContent,
|
|
584
|
-
]);
|
|
585
|
-
});
|
|
586
|
-
it('should handle llmContent with fileData', () => {
|
|
587
|
-
const llmContent = {
|
|
588
|
-
fileData: { mimeType: 'application/pdf', fileUri: 'gs://...' },
|
|
589
|
-
};
|
|
590
|
-
const result = convertToFunctionResponse(toolName, callId, llmContent);
|
|
591
|
-
expect(result).toEqual([
|
|
592
|
-
{
|
|
593
|
-
functionResponse: {
|
|
594
|
-
name: toolName,
|
|
595
|
-
id: callId,
|
|
596
|
-
response: {
|
|
597
|
-
output: 'Binary content of type application/pdf was processed.',
|
|
598
|
-
},
|
|
599
|
-
},
|
|
600
|
-
},
|
|
601
|
-
llmContent,
|
|
602
|
-
]);
|
|
603
|
-
});
|
|
604
|
-
it('should handle llmContent as an array of multiple Parts (text and inlineData)', () => {
|
|
605
|
-
const llmContent = [
|
|
606
|
-
{ text: 'Some textual description' },
|
|
607
|
-
{ inlineData: { mimeType: 'image/jpeg', data: 'base64data...' } },
|
|
608
|
-
{ text: 'Another text part' },
|
|
609
|
-
];
|
|
610
|
-
const result = convertToFunctionResponse(toolName, callId, llmContent);
|
|
611
|
-
expect(result).toEqual([
|
|
612
|
-
{
|
|
613
|
-
functionResponse: {
|
|
614
|
-
name: toolName,
|
|
615
|
-
id: callId,
|
|
616
|
-
response: { output: 'Tool execution succeeded.' },
|
|
617
|
-
},
|
|
618
|
-
},
|
|
619
|
-
...llmContent,
|
|
620
|
-
]);
|
|
621
|
-
});
|
|
622
|
-
it('should handle llmContent as an array with a single inlineData Part', () => {
|
|
623
|
-
const llmContent = [
|
|
624
|
-
{ inlineData: { mimeType: 'image/gif', data: 'gifdata...' } },
|
|
625
|
-
];
|
|
626
|
-
const result = convertToFunctionResponse(toolName, callId, llmContent);
|
|
627
|
-
expect(result).toEqual([
|
|
628
|
-
{
|
|
629
|
-
functionResponse: {
|
|
630
|
-
name: toolName,
|
|
631
|
-
id: callId,
|
|
632
|
-
response: {
|
|
633
|
-
output: 'Binary content of type image/gif was processed.',
|
|
634
|
-
},
|
|
635
|
-
},
|
|
636
|
-
},
|
|
637
|
-
...llmContent,
|
|
638
|
-
]);
|
|
639
|
-
});
|
|
640
|
-
it('should handle llmContent as a generic Part (not text, inlineData, or fileData)', () => {
|
|
641
|
-
const llmContent = { functionCall: { name: 'test', args: {} } };
|
|
642
|
-
const result = convertToFunctionResponse(toolName, callId, llmContent);
|
|
643
|
-
expect(result).toEqual([
|
|
644
|
-
{
|
|
645
|
-
functionResponse: {
|
|
646
|
-
name: toolName,
|
|
647
|
-
id: callId,
|
|
648
|
-
response: { output: 'Tool execution succeeded.' },
|
|
649
|
-
},
|
|
650
|
-
},
|
|
651
|
-
]);
|
|
652
|
-
});
|
|
653
|
-
it('should handle empty string llmContent', () => {
|
|
654
|
-
const llmContent = '';
|
|
655
|
-
const result = convertToFunctionResponse(toolName, callId, llmContent);
|
|
656
|
-
expect(result).toEqual([
|
|
657
|
-
{
|
|
658
|
-
functionResponse: {
|
|
659
|
-
name: toolName,
|
|
660
|
-
id: callId,
|
|
661
|
-
response: { output: '' },
|
|
662
|
-
},
|
|
663
|
-
},
|
|
664
|
-
]);
|
|
665
|
-
});
|
|
666
|
-
it('should handle llmContent as an empty array', () => {
|
|
667
|
-
const llmContent = [];
|
|
668
|
-
const result = convertToFunctionResponse(toolName, callId, llmContent);
|
|
669
|
-
expect(result).toEqual([
|
|
670
|
-
{
|
|
671
|
-
functionResponse: {
|
|
672
|
-
name: toolName,
|
|
673
|
-
id: callId,
|
|
674
|
-
response: { output: 'Tool execution succeeded.' },
|
|
675
|
-
},
|
|
676
|
-
},
|
|
677
|
-
]);
|
|
678
|
-
});
|
|
679
|
-
it('should handle llmContent as a Part with undefined inlineData/fileData/text', () => {
|
|
680
|
-
const llmContent = {}; // An empty part object
|
|
681
|
-
const result = convertToFunctionResponse(toolName, callId, llmContent);
|
|
682
|
-
expect(result).toEqual([
|
|
683
|
-
{
|
|
684
|
-
functionResponse: {
|
|
685
|
-
name: toolName,
|
|
686
|
-
id: callId,
|
|
687
|
-
response: { output: 'Tool execution succeeded.' },
|
|
688
|
-
},
|
|
689
|
-
},
|
|
690
|
-
]);
|
|
691
|
-
});
|
|
692
|
-
});
|
|
693
560
|
class MockEditToolInvocation extends BaseToolInvocation {
|
|
694
|
-
constructor(params) {
|
|
695
|
-
super(params);
|
|
561
|
+
constructor(params, messageBus) {
|
|
562
|
+
super(params, messageBus);
|
|
696
563
|
}
|
|
697
564
|
getDescription() {
|
|
698
565
|
return 'A mock edit tool invocation';
|
|
@@ -717,16 +584,16 @@ class MockEditToolInvocation extends BaseToolInvocation {
|
|
|
717
584
|
}
|
|
718
585
|
}
|
|
719
586
|
class MockEditTool extends BaseDeclarativeTool {
|
|
720
|
-
constructor() {
|
|
721
|
-
super('mockEditTool', 'mockEditTool', 'A mock edit tool', Kind.Edit, {});
|
|
587
|
+
constructor(messageBus) {
|
|
588
|
+
super('mockEditTool', 'mockEditTool', 'A mock edit tool', Kind.Edit, {}, messageBus);
|
|
722
589
|
}
|
|
723
|
-
createInvocation(params) {
|
|
724
|
-
return new MockEditToolInvocation(params);
|
|
590
|
+
createInvocation(params, messageBus, _toolName, _toolDisplayName) {
|
|
591
|
+
return new MockEditToolInvocation(params, messageBus);
|
|
725
592
|
}
|
|
726
593
|
}
|
|
727
594
|
describe('CoreToolScheduler edit cancellation', () => {
|
|
728
595
|
it('should preserve diff when an edit is cancelled', async () => {
|
|
729
|
-
const mockEditTool = new MockEditTool();
|
|
596
|
+
const mockEditTool = new MockEditTool(createMockMessageBus());
|
|
730
597
|
const mockToolRegistry = {
|
|
731
598
|
getTool: () => mockEditTool,
|
|
732
599
|
getFunctionDeclarations: () => [],
|
|
@@ -744,8 +611,13 @@ describe('CoreToolScheduler edit cancellation', () => {
|
|
|
744
611
|
const onToolCallsUpdate = vi.fn();
|
|
745
612
|
const mockConfig = createMockConfig({
|
|
746
613
|
getToolRegistry: () => mockToolRegistry,
|
|
747
|
-
isInteractive: () => false,
|
|
748
614
|
});
|
|
615
|
+
const mockMessageBus = createMockMessageBus();
|
|
616
|
+
mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
|
|
617
|
+
mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
|
|
618
|
+
mockConfig.getHookSystem = vi
|
|
619
|
+
.fn()
|
|
620
|
+
.mockReturnValue(new HookSystem(mockConfig));
|
|
749
621
|
const scheduler = new CoreToolScheduler({
|
|
750
622
|
config: mockConfig,
|
|
751
623
|
onAllToolCallsComplete,
|
|
@@ -814,6 +686,12 @@ describe('CoreToolScheduler YOLO mode', () => {
|
|
|
814
686
|
getApprovalMode: () => ApprovalMode.YOLO,
|
|
815
687
|
isInteractive: () => false,
|
|
816
688
|
});
|
|
689
|
+
const mockMessageBus = createMockMessageBus();
|
|
690
|
+
mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
|
|
691
|
+
mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
|
|
692
|
+
mockConfig.getHookSystem = vi
|
|
693
|
+
.fn()
|
|
694
|
+
.mockReturnValue(new HookSystem(mockConfig));
|
|
817
695
|
const scheduler = new CoreToolScheduler({
|
|
818
696
|
config: mockConfig,
|
|
819
697
|
onAllToolCallsComplete,
|
|
@@ -888,6 +766,12 @@ describe('CoreToolScheduler request queueing', () => {
|
|
|
888
766
|
getApprovalMode: () => ApprovalMode.YOLO, // Use YOLO to avoid confirmation prompts
|
|
889
767
|
isInteractive: () => false,
|
|
890
768
|
});
|
|
769
|
+
const mockMessageBus = createMockMessageBus();
|
|
770
|
+
mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
|
|
771
|
+
mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
|
|
772
|
+
mockConfig.getHookSystem = vi
|
|
773
|
+
.fn()
|
|
774
|
+
.mockReturnValue(new HookSystem(mockConfig));
|
|
891
775
|
const scheduler = new CoreToolScheduler({
|
|
892
776
|
config: mockConfig,
|
|
893
777
|
onAllToolCallsComplete,
|
|
@@ -910,6 +794,7 @@ describe('CoreToolScheduler request queueing', () => {
|
|
|
910
794
|
prompt_id: 'prompt-2',
|
|
911
795
|
};
|
|
912
796
|
// Schedule the first call, which will pause execution.
|
|
797
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
913
798
|
scheduler.schedule([request1], abortController.signal);
|
|
914
799
|
// Wait for the first call to be in the 'executing' state.
|
|
915
800
|
await waitForStatus(onToolCallsUpdate, 'executing');
|
|
@@ -979,9 +864,20 @@ describe('CoreToolScheduler request queueing', () => {
|
|
|
979
864
|
getShellExecutionConfig: () => ({
|
|
980
865
|
terminalWidth: 80,
|
|
981
866
|
terminalHeight: 24,
|
|
867
|
+
sanitizationConfig: {
|
|
868
|
+
enableEnvironmentVariableRedaction: true,
|
|
869
|
+
allowedEnvironmentVariables: [],
|
|
870
|
+
blockedEnvironmentVariables: [],
|
|
871
|
+
},
|
|
982
872
|
}),
|
|
983
873
|
isInteractive: () => false,
|
|
984
874
|
});
|
|
875
|
+
const mockMessageBus = createMockMessageBus();
|
|
876
|
+
mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
|
|
877
|
+
mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
|
|
878
|
+
mockConfig.getHookSystem = vi
|
|
879
|
+
.fn()
|
|
880
|
+
.mockReturnValue(new HookSystem(mockConfig));
|
|
985
881
|
const scheduler = new CoreToolScheduler({
|
|
986
882
|
config: mockConfig,
|
|
987
883
|
onAllToolCallsComplete,
|
|
@@ -1066,9 +962,14 @@ describe('CoreToolScheduler request queueing', () => {
|
|
|
1066
962
|
getShellExecutionConfig: () => ({
|
|
1067
963
|
terminalWidth: 80,
|
|
1068
964
|
terminalHeight: 24,
|
|
965
|
+
sanitizationConfig: {
|
|
966
|
+
enableEnvironmentVariableRedaction: true,
|
|
967
|
+
allowedEnvironmentVariables: [],
|
|
968
|
+
blockedEnvironmentVariables: [],
|
|
969
|
+
},
|
|
1069
970
|
}),
|
|
1070
971
|
getToolRegistry: () => toolRegistry,
|
|
1071
|
-
|
|
972
|
+
getHookSystem: () => undefined,
|
|
1072
973
|
});
|
|
1073
974
|
const scheduler = new CoreToolScheduler({
|
|
1074
975
|
config: mockConfig,
|
|
@@ -1117,8 +1018,13 @@ describe('CoreToolScheduler request queueing', () => {
|
|
|
1117
1018
|
const mockConfig = createMockConfig({
|
|
1118
1019
|
getToolRegistry: () => mockToolRegistry,
|
|
1119
1020
|
getApprovalMode: () => ApprovalMode.YOLO,
|
|
1120
|
-
isInteractive: () => false,
|
|
1121
1021
|
});
|
|
1022
|
+
const mockMessageBus = createMockMessageBus();
|
|
1023
|
+
mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
|
|
1024
|
+
mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
|
|
1025
|
+
mockConfig.getHookSystem = vi
|
|
1026
|
+
.fn()
|
|
1027
|
+
.mockReturnValue(new HookSystem(mockConfig));
|
|
1122
1028
|
const scheduler = new CoreToolScheduler({
|
|
1123
1029
|
config: mockConfig,
|
|
1124
1030
|
onAllToolCallsComplete,
|
|
@@ -1159,9 +1065,14 @@ describe('CoreToolScheduler request queueing', () => {
|
|
|
1159
1065
|
setApprovalMode: (mode) => {
|
|
1160
1066
|
approvalMode = mode;
|
|
1161
1067
|
},
|
|
1162
|
-
isInteractive: () => false,
|
|
1163
1068
|
});
|
|
1164
|
-
const
|
|
1069
|
+
const mockMessageBus = createMockMessageBus();
|
|
1070
|
+
mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
|
|
1071
|
+
mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
|
|
1072
|
+
mockConfig.getHookSystem = vi
|
|
1073
|
+
.fn()
|
|
1074
|
+
.mockReturnValue(new HookSystem(mockConfig));
|
|
1075
|
+
const testTool = new TestApprovalTool(mockConfig, mockMessageBus);
|
|
1165
1076
|
const toolRegistry = {
|
|
1166
1077
|
getTool: () => testTool,
|
|
1167
1078
|
getFunctionDeclarations: () => [],
|
|
@@ -1302,6 +1213,12 @@ describe('CoreToolScheduler Sequential Execution', () => {
|
|
|
1302
1213
|
getApprovalMode: () => ApprovalMode.YOLO, // Use YOLO to avoid confirmation prompts
|
|
1303
1214
|
isInteractive: () => false,
|
|
1304
1215
|
});
|
|
1216
|
+
const mockMessageBus = createMockMessageBus();
|
|
1217
|
+
mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
|
|
1218
|
+
mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
|
|
1219
|
+
mockConfig.getHookSystem = vi
|
|
1220
|
+
.fn()
|
|
1221
|
+
.mockReturnValue(new HookSystem(mockConfig));
|
|
1305
1222
|
const scheduler = new CoreToolScheduler({
|
|
1306
1223
|
config: mockConfig,
|
|
1307
1224
|
onAllToolCallsComplete,
|
|
@@ -1388,6 +1305,12 @@ describe('CoreToolScheduler Sequential Execution', () => {
|
|
|
1388
1305
|
getApprovalMode: () => ApprovalMode.YOLO,
|
|
1389
1306
|
isInteractive: () => false,
|
|
1390
1307
|
});
|
|
1308
|
+
const mockMessageBus = createMockMessageBus();
|
|
1309
|
+
mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
|
|
1310
|
+
mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
|
|
1311
|
+
mockConfig.getHookSystem = vi
|
|
1312
|
+
.fn()
|
|
1313
|
+
.mockReturnValue(new HookSystem(mockConfig));
|
|
1391
1314
|
const scheduler = new CoreToolScheduler({
|
|
1392
1315
|
config: mockConfig,
|
|
1393
1316
|
onAllToolCallsComplete,
|
|
@@ -1469,6 +1392,12 @@ describe('CoreToolScheduler Sequential Execution', () => {
|
|
|
1469
1392
|
const mockConfig = createMockConfig({
|
|
1470
1393
|
getToolRegistry: () => mockToolRegistry,
|
|
1471
1394
|
});
|
|
1395
|
+
const mockMessageBus = createMockMessageBus();
|
|
1396
|
+
mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
|
|
1397
|
+
mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
|
|
1398
|
+
mockConfig.getHookSystem = vi
|
|
1399
|
+
.fn()
|
|
1400
|
+
.mockReturnValue(new HookSystem(mockConfig));
|
|
1472
1401
|
const scheduler = new CoreToolScheduler({
|
|
1473
1402
|
config: mockConfig,
|
|
1474
1403
|
onAllToolCallsComplete,
|
|
@@ -1499,118 +1428,4 @@ describe('CoreToolScheduler Sequential Execution', () => {
|
|
|
1499
1428
|
modifyWithEditorSpy.mockRestore();
|
|
1500
1429
|
});
|
|
1501
1430
|
});
|
|
1502
|
-
describe('truncateAndSaveToFile', () => {
|
|
1503
|
-
const mockWriteFile = vi.mocked(fs.writeFile);
|
|
1504
|
-
const THRESHOLD = 40_000;
|
|
1505
|
-
const TRUNCATE_LINES = 1000;
|
|
1506
|
-
beforeEach(() => {
|
|
1507
|
-
vi.clearAllMocks();
|
|
1508
|
-
});
|
|
1509
|
-
it('should return content unchanged if below threshold', async () => {
|
|
1510
|
-
const content = 'Short content';
|
|
1511
|
-
const callId = 'test-call-id';
|
|
1512
|
-
const projectTempDir = '/tmp';
|
|
1513
|
-
const result = await truncateAndSaveToFile(content, callId, projectTempDir, THRESHOLD, TRUNCATE_LINES);
|
|
1514
|
-
expect(result).toEqual({ content });
|
|
1515
|
-
expect(mockWriteFile).not.toHaveBeenCalled();
|
|
1516
|
-
});
|
|
1517
|
-
it('should truncate content by lines when content has many lines', async () => {
|
|
1518
|
-
// Create content that exceeds 100,000 character threshold with many lines
|
|
1519
|
-
const lines = Array(2000).fill('x'.repeat(100)); // 100 chars per line * 2000 lines = 200,000 chars
|
|
1520
|
-
const content = lines.join('\n');
|
|
1521
|
-
const callId = 'test-call-id';
|
|
1522
|
-
const projectTempDir = '/tmp';
|
|
1523
|
-
mockWriteFile.mockResolvedValue(undefined);
|
|
1524
|
-
const result = await truncateAndSaveToFile(content, callId, projectTempDir, THRESHOLD, TRUNCATE_LINES);
|
|
1525
|
-
expect(result.outputFile).toBe(path.join(projectTempDir, `${callId}.output`));
|
|
1526
|
-
expect(mockWriteFile).toHaveBeenCalledWith(path.join(projectTempDir, `${callId}.output`), content);
|
|
1527
|
-
// Should contain the first and last lines with 1/5 head and 4/5 tail
|
|
1528
|
-
const head = Math.floor(TRUNCATE_LINES / 5);
|
|
1529
|
-
const beginning = lines.slice(0, head);
|
|
1530
|
-
const end = lines.slice(-(TRUNCATE_LINES - head));
|
|
1531
|
-
const expectedTruncated = beginning.join('\n') + '\n... [CONTENT TRUNCATED] ...\n' + end.join('\n');
|
|
1532
|
-
expect(result.content).toContain('Tool output was too large and has been truncated');
|
|
1533
|
-
expect(result.content).toContain('Truncated part of the output:');
|
|
1534
|
-
expect(result.content).toContain(expectedTruncated);
|
|
1535
|
-
});
|
|
1536
|
-
it('should wrap and truncate content when content has few but long lines', async () => {
|
|
1537
|
-
const content = 'a'.repeat(200_000); // A single very long line
|
|
1538
|
-
const callId = 'test-call-id';
|
|
1539
|
-
const projectTempDir = '/tmp';
|
|
1540
|
-
const wrapWidth = 120;
|
|
1541
|
-
mockWriteFile.mockResolvedValue(undefined);
|
|
1542
|
-
// Manually wrap the content to generate the expected file content
|
|
1543
|
-
const wrappedLines = [];
|
|
1544
|
-
for (let i = 0; i < content.length; i += wrapWidth) {
|
|
1545
|
-
wrappedLines.push(content.substring(i, i + wrapWidth));
|
|
1546
|
-
}
|
|
1547
|
-
const expectedFileContent = wrappedLines.join('\n');
|
|
1548
|
-
const result = await truncateAndSaveToFile(content, callId, projectTempDir, THRESHOLD, TRUNCATE_LINES);
|
|
1549
|
-
expect(result.outputFile).toBe(path.join(projectTempDir, `${callId}.output`));
|
|
1550
|
-
// Check that the file was written with the wrapped content
|
|
1551
|
-
expect(mockWriteFile).toHaveBeenCalledWith(path.join(projectTempDir, `${callId}.output`), expectedFileContent);
|
|
1552
|
-
// Should contain the first and last lines with 1/5 head and 4/5 tail of the wrapped content
|
|
1553
|
-
const head = Math.floor(TRUNCATE_LINES / 5);
|
|
1554
|
-
const beginning = wrappedLines.slice(0, head);
|
|
1555
|
-
const end = wrappedLines.slice(-(TRUNCATE_LINES - head));
|
|
1556
|
-
const expectedTruncated = beginning.join('\n') + '\n... [CONTENT TRUNCATED] ...\n' + end.join('\n');
|
|
1557
|
-
expect(result.content).toContain('Tool output was too large and has been truncated');
|
|
1558
|
-
expect(result.content).toContain('Truncated part of the output:');
|
|
1559
|
-
expect(result.content).toContain(expectedTruncated);
|
|
1560
|
-
});
|
|
1561
|
-
it('should handle file write errors gracefully', async () => {
|
|
1562
|
-
const content = 'a'.repeat(2_000_000);
|
|
1563
|
-
const callId = 'test-call-id';
|
|
1564
|
-
const projectTempDir = '/tmp';
|
|
1565
|
-
mockWriteFile.mockRejectedValue(new Error('File write failed'));
|
|
1566
|
-
const result = await truncateAndSaveToFile(content, callId, projectTempDir, THRESHOLD, TRUNCATE_LINES);
|
|
1567
|
-
expect(result.outputFile).toBeUndefined();
|
|
1568
|
-
expect(result.content).toContain('[Note: Could not save full output to file]');
|
|
1569
|
-
expect(mockWriteFile).toHaveBeenCalled();
|
|
1570
|
-
});
|
|
1571
|
-
it('should save to correct file path with call ID', async () => {
|
|
1572
|
-
const content = 'a'.repeat(200_000);
|
|
1573
|
-
const callId = 'unique-call-123';
|
|
1574
|
-
const projectTempDir = '/custom/temp/dir';
|
|
1575
|
-
const wrapWidth = 120;
|
|
1576
|
-
mockWriteFile.mockResolvedValue(undefined);
|
|
1577
|
-
// Manually wrap the content to generate the expected file content
|
|
1578
|
-
const wrappedLines = [];
|
|
1579
|
-
for (let i = 0; i < content.length; i += wrapWidth) {
|
|
1580
|
-
wrappedLines.push(content.substring(i, i + wrapWidth));
|
|
1581
|
-
}
|
|
1582
|
-
const expectedFileContent = wrappedLines.join('\n');
|
|
1583
|
-
const result = await truncateAndSaveToFile(content, callId, projectTempDir, THRESHOLD, TRUNCATE_LINES);
|
|
1584
|
-
const expectedPath = path.join(projectTempDir, `${callId}.output`);
|
|
1585
|
-
expect(result.outputFile).toBe(expectedPath);
|
|
1586
|
-
expect(mockWriteFile).toHaveBeenCalledWith(expectedPath, expectedFileContent);
|
|
1587
|
-
});
|
|
1588
|
-
it('should include helpful instructions in truncated message', async () => {
|
|
1589
|
-
const content = 'a'.repeat(2_000_000);
|
|
1590
|
-
const callId = 'test-call-id';
|
|
1591
|
-
const projectTempDir = '/tmp';
|
|
1592
|
-
mockWriteFile.mockResolvedValue(undefined);
|
|
1593
|
-
const result = await truncateAndSaveToFile(content, callId, projectTempDir, THRESHOLD, TRUNCATE_LINES);
|
|
1594
|
-
expect(result.content).toContain('read_file tool with the absolute file path above');
|
|
1595
|
-
expect(result.content).toContain('read_file tool with offset=0, limit=100');
|
|
1596
|
-
expect(result.content).toContain('read_file tool with offset=N to skip N lines');
|
|
1597
|
-
expect(result.content).toContain('read_file tool with limit=M to read only M lines');
|
|
1598
|
-
});
|
|
1599
|
-
it('should sanitize callId to prevent path traversal', async () => {
|
|
1600
|
-
const content = 'a'.repeat(200_000);
|
|
1601
|
-
const callId = '../../../../../etc/passwd';
|
|
1602
|
-
const projectTempDir = '/tmp/safe_dir';
|
|
1603
|
-
const wrapWidth = 120;
|
|
1604
|
-
mockWriteFile.mockResolvedValue(undefined);
|
|
1605
|
-
// Manually wrap the content to generate the expected file content
|
|
1606
|
-
const wrappedLines = [];
|
|
1607
|
-
for (let i = 0; i < content.length; i += wrapWidth) {
|
|
1608
|
-
wrappedLines.push(content.substring(i, i + wrapWidth));
|
|
1609
|
-
}
|
|
1610
|
-
const expectedFileContent = wrappedLines.join('\n');
|
|
1611
|
-
await truncateAndSaveToFile(content, callId, projectTempDir, THRESHOLD, TRUNCATE_LINES);
|
|
1612
|
-
const expectedPath = path.join(projectTempDir, 'passwd.output');
|
|
1613
|
-
expect(mockWriteFile).toHaveBeenCalledWith(expectedPath, expectedFileContent);
|
|
1614
|
-
});
|
|
1615
|
-
});
|
|
1616
1431
|
//# sourceMappingURL=coreToolScheduler.test.js.map
|