@office-ai/aioncli-core 0.26.0 → 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/docs/CONTRIBUTING.md +19 -10
- package/dist/docs/admin/enterprise-controls.md +115 -0
- package/dist/docs/architecture.md +3 -3
- package/dist/docs/assets/monitoring-dashboard-logs.png +0 -0
- package/dist/docs/assets/monitoring-dashboard-metrics.png +0 -0
- package/dist/docs/assets/monitoring-dashboard-overview.png +0 -0
- package/dist/docs/bedrock-integration-plan.md +595 -0
- package/dist/docs/changelogs/index.md +187 -0
- package/dist/docs/changelogs/latest.md +299 -209
- package/dist/docs/changelogs/preview.md +353 -115
- package/dist/docs/cli/checkpointing.md +2 -3
- package/dist/docs/cli/cli-reference.md +115 -0
- package/dist/docs/cli/commands.md +360 -247
- package/dist/docs/cli/creating-skills.md +80 -0
- package/dist/docs/cli/custom-commands.md +12 -9
- package/dist/docs/cli/enterprise.md +25 -5
- package/dist/docs/cli/gemini-md.md +20 -12
- package/dist/docs/cli/headless.md +34 -372
- package/dist/docs/cli/index.md +123 -63
- package/dist/docs/cli/keyboard-shortcuts.md +95 -84
- package/dist/docs/cli/model-routing.md +7 -2
- package/dist/docs/cli/model.md +1 -1
- package/dist/docs/cli/plan-mode.md +190 -0
- package/dist/docs/cli/rewind.md +51 -0
- package/dist/docs/cli/sandbox.md +4 -3
- package/dist/docs/cli/session-management.md +61 -44
- package/dist/docs/cli/settings.md +95 -61
- package/dist/docs/cli/skills.md +49 -71
- package/dist/docs/cli/system-prompt.md +32 -0
- package/dist/docs/cli/telemetry.md +75 -4
- package/dist/docs/cli/themes.md +85 -53
- package/dist/docs/cli/tutorials/automation.md +187 -0
- package/dist/docs/cli/tutorials/file-management.md +142 -0
- package/dist/docs/cli/tutorials/mcp-setup.md +105 -0
- package/dist/docs/cli/tutorials/memory-management.md +126 -0
- package/dist/docs/cli/tutorials/session-management.md +105 -0
- package/dist/docs/cli/tutorials/shell-commands.md +107 -0
- package/dist/docs/cli/tutorials/skills-getting-started.md +36 -58
- package/dist/docs/cli/tutorials/task-planning.md +93 -0
- package/dist/docs/cli/tutorials/web-tools.md +78 -0
- package/dist/docs/cli/uninstall.md +18 -0
- package/dist/docs/core/concepts.md +137 -0
- package/dist/docs/core/index.md +6 -0
- package/dist/docs/core/memport.md +2 -0
- package/dist/docs/core/policy-engine.md +57 -7
- package/dist/docs/core/remote-agents.md +84 -0
- package/dist/docs/core/subagents.md +191 -0
- package/dist/docs/extensions/best-practices.md +188 -0
- package/dist/docs/extensions/index.md +38 -270
- package/dist/docs/extensions/reference.md +265 -0
- package/dist/docs/extensions/releasing.md +154 -0
- package/dist/docs/extensions/writing-extensions.md +292 -0
- package/dist/docs/get-started/authentication.md +162 -0
- package/dist/docs/get-started/configuration-v1.md +5 -11
- package/dist/docs/get-started/configuration.md +228 -99
- package/dist/docs/get-started/examples.md +39 -119
- package/dist/docs/get-started/gemini-3.md +2 -17
- package/dist/docs/get-started/index.md +6 -4
- package/dist/docs/get-started/installation.md +110 -77
- package/dist/docs/hooks/best-practices.md +219 -398
- package/dist/docs/hooks/index.md +99 -622
- package/dist/docs/hooks/reference.md +269 -115
- package/dist/docs/hooks/writing-hooks.md +203 -779
- package/dist/docs/index.md +146 -147
- package/dist/docs/local-development.md +1 -1
- package/dist/docs/releases.md +3 -3
- package/dist/docs/sidebar.json +105 -217
- package/dist/docs/tools/activate-skill.md +43 -0
- package/dist/docs/tools/ask-user.md +95 -0
- package/dist/docs/tools/file-system.md +48 -139
- package/dist/docs/tools/index.md +92 -85
- package/dist/docs/tools/internal-docs.md +46 -0
- package/dist/docs/tools/mcp-server.md +29 -5
- package/dist/docs/tools/memory.md +21 -40
- package/dist/docs/tools/planning.md +55 -0
- package/dist/docs/tools/shell.md +45 -89
- package/dist/docs/tools/todos.md +22 -44
- package/dist/docs/tools/web-fetch.md +22 -46
- package/dist/docs/tools/web-search.md +19 -29
- package/dist/docs/tos-privacy.md +1 -1
- package/dist/docs/troubleshooting.md +20 -5
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/src/agents/a2a-client-manager.d.ts +4 -5
- package/dist/src/agents/a2a-client-manager.js +9 -131
- package/dist/src/agents/a2a-client-manager.js.map +1 -1
- package/dist/src/agents/a2a-client-manager.test.js +10 -27
- package/dist/src/agents/a2a-client-manager.test.js.map +1 -1
- package/dist/src/agents/a2aUtils.d.ts +3 -2
- package/dist/src/agents/a2aUtils.js +28 -26
- package/dist/src/agents/a2aUtils.js.map +1 -1
- package/dist/src/agents/a2aUtils.test.js +9 -9
- package/dist/src/agents/a2aUtils.test.js.map +1 -1
- package/dist/src/agents/acknowledgedAgents.d.ts +18 -0
- package/dist/src/agents/acknowledgedAgents.js +58 -0
- package/dist/src/agents/acknowledgedAgents.js.map +1 -0
- package/dist/src/agents/acknowledgedAgents.test.d.ts +6 -0
- package/dist/src/agents/acknowledgedAgents.test.js +70 -0
- package/dist/src/agents/acknowledgedAgents.test.js.map +1 -0
- package/dist/src/agents/agent-scheduler.d.ts +35 -0
- package/dist/src/agents/agent-scheduler.js +30 -0
- package/dist/src/agents/agent-scheduler.js.map +1 -0
- package/dist/src/agents/agent-scheduler.test.d.ts +6 -0
- package/dist/src/agents/agent-scheduler.test.js +56 -0
- package/dist/src/agents/agent-scheduler.test.js.map +1 -0
- package/dist/src/agents/agentLoader.d.ts +88 -0
- package/dist/src/agents/agentLoader.js +394 -0
- package/dist/src/agents/agentLoader.js.map +1 -0
- package/dist/src/agents/agentLoader.test.d.ts +6 -0
- package/dist/src/agents/agentLoader.test.js +458 -0
- package/dist/src/agents/agentLoader.test.js.map +1 -0
- package/dist/src/agents/auth-provider/base-provider.d.ts +40 -0
- package/dist/src/agents/auth-provider/base-provider.js +43 -0
- package/dist/src/agents/auth-provider/base-provider.js.map +1 -0
- package/dist/src/agents/auth-provider/base-provider.test.d.ts +6 -0
- package/dist/src/agents/auth-provider/base-provider.test.js +107 -0
- package/dist/src/agents/auth-provider/base-provider.test.js.map +1 -0
- package/dist/src/agents/auth-provider/factory.d.ts +27 -0
- package/dist/src/agents/auth-provider/factory.js +161 -0
- package/dist/src/agents/auth-provider/factory.js.map +1 -0
- package/dist/src/agents/auth-provider/factory.test.d.ts +6 -0
- package/dist/src/agents/auth-provider/factory.test.js +344 -0
- package/dist/src/agents/auth-provider/factory.test.js.map +1 -0
- package/dist/src/agents/auth-provider/types.d.ts +74 -0
- package/dist/src/agents/auth-provider/types.js +7 -0
- package/dist/src/agents/auth-provider/types.js.map +1 -0
- package/dist/src/agents/auth-provider/value-resolver.d.ts +29 -0
- package/dist/src/agents/auth-provider/value-resolver.js +85 -0
- package/dist/src/agents/auth-provider/value-resolver.js.map +1 -0
- package/dist/src/agents/auth-provider/value-resolver.test.d.ts +6 -0
- package/dist/src/agents/auth-provider/value-resolver.test.js +100 -0
- package/dist/src/agents/auth-provider/value-resolver.test.js.map +1 -0
- package/dist/src/agents/cli-help-agent.d.ts +24 -0
- package/dist/src/agents/cli-help-agent.js +80 -0
- package/dist/src/agents/cli-help-agent.js.map +1 -0
- package/dist/src/agents/cli-help-agent.test.d.ts +6 -0
- package/dist/src/agents/cli-help-agent.test.js +53 -0
- package/dist/src/agents/cli-help-agent.test.js.map +1 -0
- package/dist/src/agents/codebase-investigator.d.ts +2 -1
- package/dist/src/agents/codebase-investigator.js +68 -39
- package/dist/src/agents/codebase-investigator.js.map +1 -1
- package/dist/src/agents/codebase-investigator.test.js +37 -9
- package/dist/src/agents/codebase-investigator.test.js.map +1 -1
- package/dist/src/agents/generalist-agent.d.ts +21 -0
- package/dist/src/agents/generalist-agent.js +60 -0
- package/dist/src/agents/generalist-agent.js.map +1 -0
- package/dist/src/agents/generalist-agent.test.d.ts +6 -0
- package/dist/src/agents/generalist-agent.test.js +32 -0
- package/dist/src/agents/generalist-agent.test.js.map +1 -0
- package/dist/src/agents/introspection-agent.d.ts +2 -2
- package/dist/src/agents/local-executor.d.ts +2 -0
- package/dist/src/agents/local-executor.js +186 -90
- package/dist/src/agents/local-executor.js.map +1 -1
- package/dist/src/agents/local-executor.test.js +431 -256
- package/dist/src/agents/local-executor.test.js.map +1 -1
- package/dist/src/agents/local-invocation.test.js +15 -5
- package/dist/src/agents/local-invocation.test.js.map +1 -1
- package/dist/src/agents/registry.d.ts +24 -8
- package/dist/src/agents/registry.js +193 -96
- package/dist/src/agents/registry.js.map +1 -1
- package/dist/src/agents/registry.test.js +509 -58
- package/dist/src/agents/registry.test.js.map +1 -1
- package/dist/src/agents/registry_acknowledgement.test.d.ts +6 -0
- package/dist/src/agents/registry_acknowledgement.test.js +130 -0
- package/dist/src/agents/registry_acknowledgement.test.js.map +1 -0
- package/dist/src/agents/remote-invocation.js +12 -14
- package/dist/src/agents/remote-invocation.js.map +1 -1
- package/dist/src/agents/remote-invocation.test.js +16 -4
- package/dist/src/agents/remote-invocation.test.js.map +1 -1
- package/dist/src/agents/subagent-tool-wrapper.js +1 -3
- package/dist/src/agents/subagent-tool-wrapper.js.map +1 -1
- package/dist/src/agents/subagent-tool-wrapper.test.js +18 -27
- package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -1
- package/dist/src/agents/subagent-tool.d.ts +15 -0
- package/dist/src/agents/subagent-tool.js +57 -0
- package/dist/src/agents/subagent-tool.js.map +1 -0
- package/dist/src/agents/subagent-tool.test.d.ts +6 -0
- package/dist/src/agents/subagent-tool.test.js +97 -0
- package/dist/src/agents/subagent-tool.test.js.map +1 -0
- package/dist/src/agents/types.d.ts +37 -22
- package/dist/src/agents/types.js +12 -0
- package/dist/src/agents/types.js.map +1 -1
- package/dist/src/availability/fallbackIntegration.test.d.ts +6 -0
- package/dist/src/availability/fallbackIntegration.test.js +57 -0
- package/dist/src/availability/fallbackIntegration.test.js.map +1 -0
- package/dist/src/availability/policyCatalog.d.ts +3 -0
- package/dist/src/availability/policyCatalog.js +29 -5
- package/dist/src/availability/policyCatalog.js.map +1 -1
- package/dist/src/availability/policyCatalog.test.js +20 -1
- package/dist/src/availability/policyCatalog.test.js.map +1 -1
- package/dist/src/availability/policyHelpers.js +40 -11
- package/dist/src/availability/policyHelpers.js.map +1 -1
- package/dist/src/availability/policyHelpers.test.js +72 -2
- package/dist/src/availability/policyHelpers.test.js.map +1 -1
- package/dist/src/availability/testUtils.js +1 -0
- package/dist/src/availability/testUtils.js.map +1 -1
- package/dist/src/code_assist/admin/admin_controls.d.ts +49 -0
- package/dist/src/code_assist/admin/admin_controls.js +197 -0
- package/dist/src/code_assist/admin/admin_controls.js.map +1 -0
- package/dist/src/code_assist/admin/admin_controls.test.d.ts +6 -0
- package/dist/src/code_assist/admin/admin_controls.test.js +589 -0
- package/dist/src/code_assist/admin/admin_controls.test.js.map +1 -0
- package/dist/src/code_assist/admin/mcpUtils.d.ts +22 -0
- package/dist/src/code_assist/admin/mcpUtils.js +53 -0
- package/dist/src/code_assist/admin/mcpUtils.js.map +1 -0
- package/dist/src/code_assist/admin/mcpUtils.test.d.ts +6 -0
- package/dist/src/code_assist/admin/mcpUtils.test.js +101 -0
- package/dist/src/code_assist/admin/mcpUtils.test.js.map +1 -0
- package/dist/src/code_assist/codeAssist.js +2 -2
- package/dist/src/code_assist/codeAssist.js.map +1 -1
- package/dist/src/code_assist/codeAssist.test.d.ts +1 -1
- package/dist/src/code_assist/codeAssist.test.js +10 -6
- package/dist/src/code_assist/codeAssist.test.js.map +1 -1
- package/dist/src/code_assist/converter.js +8 -3
- package/dist/src/code_assist/converter.js.map +1 -1
- package/dist/src/code_assist/converter.test.js +8 -0
- package/dist/src/code_assist/converter.test.js.map +1 -1
- package/dist/src/code_assist/experiments/experiments.d.ts +1 -1
- package/dist/src/code_assist/experiments/experiments.js +22 -0
- package/dist/src/code_assist/experiments/experiments.js.map +1 -1
- package/dist/src/code_assist/experiments/experiments.test.js +1 -0
- package/dist/src/code_assist/experiments/experiments.test.js.map +1 -1
- package/dist/src/code_assist/experiments/experiments_local.test.d.ts +6 -0
- package/dist/src/code_assist/experiments/experiments_local.test.js +115 -0
- package/dist/src/code_assist/experiments/experiments_local.test.js.map +1 -0
- package/dist/src/code_assist/experiments/flagNames.d.ts +7 -0
- package/dist/src/code_assist/experiments/flagNames.js +7 -0
- package/dist/src/code_assist/experiments/flagNames.js.map +1 -1
- package/dist/src/code_assist/oauth-credential-storage.js +4 -4
- package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +10 -3
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/server.d.ts +7 -4
- package/dist/src/code_assist/server.js +20 -4
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/server.test.js +18 -5
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/code_assist/setup.d.ts +35 -3
- package/dist/src/code_assist/setup.js +98 -16
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/code_assist/setup.test.js +322 -5
- package/dist/src/code_assist/setup.test.js.map +1 -1
- package/dist/src/code_assist/telemetry.js +2 -1
- package/dist/src/code_assist/telemetry.js.map +1 -1
- package/dist/src/code_assist/telemetry.test.js +2 -1
- package/dist/src/code_assist/telemetry.test.js.map +1 -1
- package/dist/src/code_assist/types.d.ts +255 -24
- package/dist/src/code_assist/types.js +57 -7
- package/dist/src/code_assist/types.js.map +1 -1
- package/dist/src/commands/memory.d.ts +11 -0
- package/dist/src/commands/memory.js +81 -0
- package/dist/src/commands/memory.js.map +1 -0
- package/dist/src/commands/memory.test.d.ts +6 -0
- package/dist/src/commands/memory.test.js +155 -0
- package/dist/src/commands/memory.test.js.map +1 -0
- package/dist/src/commands/restore.js +1 -0
- package/dist/src/commands/restore.js.map +1 -1
- package/dist/src/config/config.d.ts +267 -58
- package/dist/src/config/config.js +663 -164
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.d.ts +1 -1
- package/dist/src/config/config.test.js +585 -166
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/constants.d.ts +4 -0
- package/dist/src/config/constants.js +8 -0
- package/dist/src/config/constants.js.map +1 -1
- package/dist/src/config/defaultModelConfigs.js +27 -8
- package/dist/src/config/defaultModelConfigs.js.map +1 -1
- package/dist/src/config/memory.d.ts +14 -0
- package/dist/src/config/memory.js +28 -0
- package/dist/src/config/memory.js.map +1 -0
- package/dist/src/config/memory.test.d.ts +6 -0
- package/dist/src/config/memory.test.js +82 -0
- package/dist/src/config/memory.test.js.map +1 -0
- package/dist/src/config/models.d.ts +77 -6
- package/dist/src/config/models.js +240 -23
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/models.test.js +153 -47
- package/dist/src/config/models.test.js.map +1 -1
- package/dist/src/config/projectRegistry.d.ts +36 -0
- package/dist/src/config/projectRegistry.js +262 -0
- package/dist/src/config/projectRegistry.js.map +1 -0
- package/dist/src/config/projectRegistry.test.d.ts +6 -0
- package/dist/src/config/projectRegistry.test.js +219 -0
- package/dist/src/config/projectRegistry.test.js.map +1 -0
- package/dist/src/config/storage.d.ts +23 -1
- package/dist/src/config/storage.js +104 -15
- package/dist/src/config/storage.js.map +1 -1
- package/dist/src/config/storage.test.js +118 -2
- package/dist/src/config/storage.test.js.map +1 -1
- package/dist/src/config/storageMigration.d.ts +16 -0
- package/dist/src/config/storageMigration.js +42 -0
- package/dist/src/config/storageMigration.js.map +1 -0
- package/dist/src/config/storageMigration.test.d.ts +6 -0
- package/dist/src/config/storageMigration.test.js +70 -0
- package/dist/src/config/storageMigration.test.js.map +1 -0
- package/dist/src/confirmation-bus/message-bus.js +3 -33
- package/dist/src/confirmation-bus/message-bus.js.map +1 -1
- package/dist/src/confirmation-bus/types.d.ts +95 -20
- package/dist/src/confirmation-bus/types.js +9 -3
- package/dist/src/confirmation-bus/types.js.map +1 -1
- package/dist/src/core/anthropicContentGenerator.d.ts +3 -2
- package/dist/src/core/anthropicContentGenerator.js +2 -2
- package/dist/src/core/anthropicContentGenerator.js.map +1 -1
- package/dist/src/core/baseLlmClient.d.ts +9 -0
- package/dist/src/core/baseLlmClient.js +9 -8
- package/dist/src/core/baseLlmClient.js.map +1 -1
- package/dist/src/core/baseLlmClient.test.js +17 -7
- package/dist/src/core/baseLlmClient.test.js.map +1 -1
- package/dist/src/core/bedrockContentGenerator.d.ts +73 -0
- package/dist/src/core/bedrockContentGenerator.js +628 -0
- package/dist/src/core/bedrockContentGenerator.js.map +1 -0
- package/dist/src/core/client.d.ts +13 -4
- package/dist/src/core/client.js +132 -41
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +333 -79
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +16 -3
- package/dist/src/core/contentGenerator.js +56 -2
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.d.ts +1 -1
- package/dist/src/core/contentGenerator.test.js +127 -24
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/coreToolHookTriggers.d.ts +4 -36
- package/dist/src/core/coreToolHookTriggers.js +42 -150
- package/dist/src/core/coreToolHookTriggers.js.map +1 -1
- package/dist/src/core/coreToolHookTriggers.test.js +62 -94
- package/dist/src/core/coreToolHookTriggers.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.d.ts +1 -8
- package/dist/src/core/coreToolScheduler.js +160 -125
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +480 -62
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/fakeContentGenerator.d.ts +4 -2
- package/dist/src/core/fakeContentGenerator.js +9 -2
- package/dist/src/core/fakeContentGenerator.js.map +1 -1
- package/dist/src/core/fakeContentGenerator.test.js +8 -7
- package/dist/src/core/fakeContentGenerator.test.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +31 -3
- package/dist/src/core/geminiChat.js +144 -34
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +175 -50
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/geminiChat_network_retry.test.js +146 -16
- package/dist/src/core/geminiChat_network_retry.test.js.map +1 -1
- package/dist/src/core/logger.js +11 -0
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/logger.test.js +2 -4
- package/dist/src/core/logger.test.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.d.ts +7 -3
- package/dist/src/core/loggingContentGenerator.js +40 -21
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.test.d.ts +1 -1
- package/dist/src/core/loggingContentGenerator.test.js +50 -8
- package/dist/src/core/loggingContentGenerator.test.js.map +1 -1
- package/dist/src/core/openaiContentGenerator.d.ts +3 -2
- package/dist/src/core/openaiContentGenerator.js +18 -10
- package/dist/src/core/openaiContentGenerator.js.map +1 -1
- package/dist/src/core/openaiContentGenerator.test.js +57 -4
- package/dist/src/core/openaiContentGenerator.test.js.map +1 -1
- package/dist/src/core/prompts-substitution.test.d.ts +6 -0
- package/dist/src/core/prompts-substitution.test.js +109 -0
- package/dist/src/core/prompts-substitution.test.js.map +1 -0
- package/dist/src/core/prompts.d.ts +11 -9
- package/dist/src/core/prompts.js +14 -405
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/prompts.test.js +290 -56
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/core/recordingContentGenerator.d.ts +5 -3
- package/dist/src/core/recordingContentGenerator.js +12 -5
- package/dist/src/core/recordingContentGenerator.js.map +1 -1
- package/dist/src/core/recordingContentGenerator.test.js +5 -4
- package/dist/src/core/recordingContentGenerator.test.js.map +1 -1
- package/dist/src/core/tokenLimits.js +6 -10
- package/dist/src/core/tokenLimits.js.map +1 -1
- package/dist/src/core/tokenLimits.test.js +8 -4
- package/dist/src/core/tokenLimits.test.js.map +1 -1
- package/dist/src/core/turn.d.ts +10 -2
- package/dist/src/core/turn.js +36 -17
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/core/turn.test.js +82 -2
- package/dist/src/core/turn.test.js.map +1 -1
- package/dist/src/fallback/handler.js +1 -1
- package/dist/src/fallback/handler.js.map +1 -1
- package/dist/src/fallback/handler.test.js +10 -12
- package/dist/src/fallback/handler.test.js.map +1 -1
- package/dist/src/fallback/types.d.ts +9 -0
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/hooks/hookAggregator.js +16 -4
- package/dist/src/hooks/hookAggregator.js.map +1 -1
- package/dist/src/hooks/hookEventHandler.d.ts +10 -16
- package/dist/src/hooks/hookEventHandler.js +35 -281
- package/dist/src/hooks/hookEventHandler.js.map +1 -1
- package/dist/src/hooks/hookEventHandler.test.js +189 -4
- package/dist/src/hooks/hookEventHandler.test.js.map +1 -1
- package/dist/src/hooks/hookRegistry.js +8 -3
- package/dist/src/hooks/hookRegistry.js.map +1 -1
- package/dist/src/hooks/hookRegistry.test.js +31 -2
- package/dist/src/hooks/hookRegistry.test.js.map +1 -1
- package/dist/src/hooks/hookRunner.js +21 -18
- package/dist/src/hooks/hookRunner.js.map +1 -1
- package/dist/src/hooks/hookSystem.d.ts +59 -0
- package/dist/src/hooks/hookSystem.js +206 -6
- package/dist/src/hooks/hookSystem.js.map +1 -1
- package/dist/src/hooks/hookSystem.test.js +20 -9
- package/dist/src/hooks/hookSystem.test.js.map +1 -1
- package/dist/src/hooks/hookTranslator.js +13 -6
- package/dist/src/hooks/hookTranslator.js.map +1 -1
- package/dist/src/hooks/index.d.ts +0 -1
- package/dist/src/hooks/index.js +0 -2
- package/dist/src/hooks/index.js.map +1 -1
- package/dist/src/hooks/trustedHooks.js +2 -0
- package/dist/src/hooks/trustedHooks.js.map +1 -1
- package/dist/src/hooks/types.d.ts +49 -1
- package/dist/src/hooks/types.js +43 -19
- package/dist/src/hooks/types.js.map +1 -1
- package/dist/src/hooks/types.test.js +13 -29
- package/dist/src/hooks/types.test.js.map +1 -1
- package/dist/src/ide/detect-ide.d.ts +49 -0
- package/dist/src/ide/detect-ide.js +56 -3
- package/dist/src/ide/detect-ide.js.map +1 -1
- package/dist/src/ide/detect-ide.test.js +70 -0
- package/dist/src/ide/detect-ide.test.js.map +1 -1
- package/dist/src/ide/ide-client.d.ts +0 -10
- package/dist/src/ide/ide-client.js +31 -199
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-client.test.js +39 -191
- package/dist/src/ide/ide-client.test.js.map +1 -1
- package/dist/src/ide/ide-connection-utils.d.ts +27 -0
- package/dist/src/ide/ide-connection-utils.js +195 -0
- package/dist/src/ide/ide-connection-utils.js.map +1 -0
- package/dist/src/ide/ide-connection-utils.test.d.ts +6 -0
- package/dist/src/ide/ide-connection-utils.test.js +372 -0
- package/dist/src/ide/ide-connection-utils.test.js.map +1 -0
- package/dist/src/ide/ide-installer.js +76 -5
- package/dist/src/ide/ide-installer.js.map +1 -1
- package/dist/src/ide/ide-installer.test.js +40 -2
- package/dist/src/ide/ide-installer.test.js.map +1 -1
- package/dist/src/ide/types.d.ts +46 -46
- package/dist/src/index.d.ts +30 -2
- package/dist/src/index.js +31 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/oauth-provider.d.ts +10 -3
- package/dist/src/mcp/oauth-provider.js +49 -14
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/oauth-provider.test.js +180 -1
- package/dist/src/mcp/oauth-provider.test.js.map +1 -1
- package/dist/src/mcp/oauth-token-storage.js +3 -0
- package/dist/src/mcp/oauth-token-storage.js.map +1 -1
- package/dist/src/mcp/oauth-utils.d.ts +13 -4
- package/dist/src/mcp/oauth-utils.js +25 -19
- package/dist/src/mcp/oauth-utils.js.map +1 -1
- package/dist/src/mcp/oauth-utils.test.js +13 -8
- package/dist/src/mcp/oauth-utils.test.js.map +1 -1
- package/dist/src/mcp/sa-impersonation-provider.js +3 -1
- package/dist/src/mcp/sa-impersonation-provider.js.map +1 -1
- package/dist/src/mcp/token-storage/file-token-storage.js +6 -2
- package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -1
- package/dist/src/mcp/token-storage/hybrid-token-storage.js +4 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.js.map +1 -1
- package/dist/src/mcp/token-storage/hybrid-token-storage.test.js +12 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.test.js.map +1 -1
- package/dist/src/mcp/token-storage/keychain-token-storage.js +8 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -1
- package/dist/src/mcp/token-storage/keychain-token-storage.test.js +10 -5
- package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +1 -1
- package/dist/src/output/json-formatter.test.js +2 -0
- package/dist/src/output/json-formatter.test.js.map +1 -1
- package/dist/src/output/stream-json-formatter.test.js +4 -0
- package/dist/src/output/stream-json-formatter.test.js.map +1 -1
- package/dist/src/policy/config.d.ts +5 -3
- package/dist/src/policy/config.js +137 -64
- package/dist/src/policy/config.js.map +1 -1
- package/dist/src/policy/config.test.js +218 -12
- package/dist/src/policy/config.test.js.map +1 -1
- package/dist/src/policy/persistence.test.js +31 -11
- package/dist/src/policy/persistence.test.js.map +1 -1
- package/dist/src/policy/policies/plan.toml +56 -0
- package/dist/src/policy/policies/read-only.toml +1 -11
- package/dist/src/policy/policies/yolo.toml +13 -2
- package/dist/src/policy/policy-engine.d.ts +16 -11
- package/dist/src/policy/policy-engine.js +208 -101
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/policy-engine.test.js +538 -199
- package/dist/src/policy/policy-engine.test.js.map +1 -1
- package/dist/src/policy/policy-updater.test.js +20 -6
- package/dist/src/policy/policy-updater.test.js.map +1 -1
- package/dist/src/policy/shell-safety.test.js +371 -8
- package/dist/src/policy/shell-safety.test.js.map +1 -1
- package/dist/src/policy/stable-stringify.js +1 -0
- package/dist/src/policy/stable-stringify.js.map +1 -1
- package/dist/src/policy/toml-loader.d.ts +5 -5
- package/dist/src/policy/toml-loader.js +65 -22
- package/dist/src/policy/toml-loader.js.map +1 -1
- package/dist/src/policy/toml-loader.test.js +88 -9
- package/dist/src/policy/toml-loader.test.js.map +1 -1
- package/dist/src/policy/types.d.ts +26 -1
- package/dist/src/policy/types.js +8 -0
- package/dist/src/policy/types.js.map +1 -1
- package/dist/src/policy/utils.d.ts +5 -0
- package/dist/src/policy/utils.js +32 -1
- package/dist/src/policy/utils.js.map +1 -1
- package/dist/src/policy/utils.test.js +67 -7
- package/dist/src/policy/utils.test.js.map +1 -1
- package/dist/src/prompts/promptProvider.d.ts +19 -0
- package/dist/src/prompts/promptProvider.js +174 -0
- package/dist/src/prompts/promptProvider.js.map +1 -0
- package/dist/src/prompts/promptProvider.test.d.ts +6 -0
- package/dist/src/prompts/promptProvider.test.js +71 -0
- package/dist/src/prompts/promptProvider.test.js.map +1 -0
- package/dist/src/prompts/snippets.d.ts +86 -0
- package/dist/src/prompts/snippets.js +573 -0
- package/dist/src/prompts/snippets.js.map +1 -0
- package/dist/src/prompts/snippets.legacy.d.ts +91 -0
- package/dist/src/prompts/snippets.legacy.js +573 -0
- package/dist/src/prompts/snippets.legacy.js.map +1 -0
- package/dist/src/prompts/utils.d.ts +23 -0
- package/dist/src/prompts/utils.js +82 -0
- package/dist/src/prompts/utils.js.map +1 -0
- package/dist/src/routing/modelRouterService.js +18 -8
- package/dist/src/routing/modelRouterService.js.map +1 -1
- package/dist/src/routing/modelRouterService.test.js +14 -6
- package/dist/src/routing/modelRouterService.test.js.map +1 -1
- package/dist/src/routing/routingStrategy.d.ts +2 -0
- package/dist/src/routing/strategies/classifierStrategy.js +14 -9
- package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
- package/dist/src/routing/strategies/classifierStrategy.test.js +72 -7
- package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/compositeStrategy.js +1 -0
- package/dist/src/routing/strategies/compositeStrategy.js.map +1 -1
- package/dist/src/routing/strategies/defaultStrategy.d.ts +1 -1
- package/dist/src/routing/strategies/defaultStrategy.js +5 -4
- package/dist/src/routing/strategies/defaultStrategy.js.map +1 -1
- package/dist/src/routing/strategies/defaultStrategy.test.js +58 -4
- package/dist/src/routing/strategies/defaultStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.d.ts +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.js +3 -3
- package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.test.js +13 -1
- package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/numericalClassifierStrategy.d.ts +13 -0
- package/dist/src/routing/strategies/numericalClassifierStrategy.js +188 -0
- package/dist/src/routing/strategies/numericalClassifierStrategy.js.map +1 -0
- package/dist/src/routing/strategies/numericalClassifierStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/numericalClassifierStrategy.test.js +401 -0
- package/dist/src/routing/strategies/numericalClassifierStrategy.test.js.map +1 -0
- package/dist/src/routing/strategies/overrideStrategy.d.ts +1 -1
- package/dist/src/routing/strategies/overrideStrategy.js +6 -6
- package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
- package/dist/src/routing/strategies/overrideStrategy.test.js +13 -3
- package/dist/src/routing/strategies/overrideStrategy.test.js.map +1 -1
- package/dist/src/safety/built-in.js +1 -0
- package/dist/src/safety/built-in.js.map +1 -1
- package/dist/src/safety/context-builder.js +3 -1
- package/dist/src/safety/context-builder.js.map +1 -1
- package/dist/src/scheduler/confirmation.d.ts +50 -0
- package/dist/src/scheduler/confirmation.js +204 -0
- package/dist/src/scheduler/confirmation.js.map +1 -0
- package/dist/src/scheduler/confirmation.test.d.ts +6 -0
- package/dist/src/scheduler/confirmation.test.js +310 -0
- package/dist/src/scheduler/confirmation.test.js.map +1 -0
- package/dist/src/scheduler/policy.d.ts +33 -0
- package/dist/src/scheduler/policy.js +119 -0
- package/dist/src/scheduler/policy.js.map +1 -0
- package/dist/src/scheduler/policy.test.d.ts +6 -0
- package/dist/src/scheduler/policy.test.js +419 -0
- package/dist/src/scheduler/policy.test.js.map +1 -0
- package/dist/src/scheduler/scheduler.d.ts +63 -0
- package/dist/src/scheduler/scheduler.js +371 -0
- package/dist/src/scheduler/scheduler.js.map +1 -0
- package/dist/src/scheduler/scheduler.test.d.ts +6 -0
- package/dist/src/scheduler/scheduler.test.js +937 -0
- package/dist/src/scheduler/scheduler.test.js.map +1 -0
- package/dist/src/scheduler/scheduler_waiting_callback.test.d.ts +6 -0
- package/dist/src/scheduler/scheduler_waiting_callback.test.js +62 -0
- package/dist/src/scheduler/scheduler_waiting_callback.test.js.map +1 -0
- package/dist/src/scheduler/state-manager.d.ts +74 -0
- package/dist/src/scheduler/state-manager.js +368 -0
- package/dist/src/scheduler/state-manager.js.map +1 -0
- package/dist/src/scheduler/state-manager.test.d.ts +6 -0
- package/dist/src/scheduler/state-manager.test.js +433 -0
- package/dist/src/scheduler/state-manager.test.js.map +1 -0
- package/dist/src/scheduler/tool-executor.js +25 -27
- package/dist/src/scheduler/tool-executor.js.map +1 -1
- package/dist/src/scheduler/tool-executor.test.js +26 -25
- package/dist/src/scheduler/tool-executor.test.js.map +1 -1
- package/dist/src/scheduler/tool-modifier.d.ts +23 -0
- package/dist/src/scheduler/tool-modifier.js +53 -0
- package/dist/src/scheduler/tool-modifier.js.map +1 -0
- package/dist/src/scheduler/tool-modifier.test.d.ts +6 -0
- package/dist/src/scheduler/tool-modifier.test.js +179 -0
- package/dist/src/scheduler/tool-modifier.test.js.map +1 -0
- package/dist/src/scheduler/types.d.ts +51 -8
- package/dist/src/scheduler/types.js +15 -1
- package/dist/src/scheduler/types.js.map +1 -1
- package/dist/src/services/chatCompressionService.d.ts +5 -1
- package/dist/src/services/chatCompressionService.js +169 -23
- package/dist/src/services/chatCompressionService.js.map +1 -1
- package/dist/src/services/chatCompressionService.test.js +382 -18
- package/dist/src/services/chatCompressionService.test.js.map +1 -1
- package/dist/src/services/chatRecordingService.d.ts +23 -3
- package/dist/src/services/chatRecordingService.js +137 -7
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/chatRecordingService.test.js +450 -186
- package/dist/src/services/chatRecordingService.test.js.map +1 -1
- package/dist/src/services/contextManager.d.ts +7 -4
- package/dist/src/services/contextManager.js +43 -18
- package/dist/src/services/contextManager.js.map +1 -1
- package/dist/src/services/contextManager.test.js +54 -27
- package/dist/src/services/contextManager.test.js.map +1 -1
- package/dist/src/services/environmentSanitization.js +4 -3
- package/dist/src/services/environmentSanitization.js.map +1 -1
- package/dist/src/services/fileDiscoveryService.d.ts +14 -2
- package/dist/src/services/fileDiscoveryService.js +79 -7
- package/dist/src/services/fileDiscoveryService.js.map +1 -1
- package/dist/src/services/fileDiscoveryService.test.js +142 -10
- package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
- package/dist/src/services/gitService.d.ts +2 -1
- package/dist/src/services/gitService.js +16 -6
- package/dist/src/services/gitService.js.map +1 -1
- package/dist/src/services/gitService.test.js +26 -10
- package/dist/src/services/gitService.test.js.map +1 -1
- package/dist/src/services/loopDetectionService.js +23 -4
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/loopDetectionService.test.js +24 -0
- package/dist/src/services/loopDetectionService.test.js.map +1 -1
- package/dist/src/services/modelConfig.integration.test.js +2 -2
- package/dist/src/services/modelConfig.integration.test.js.map +1 -1
- package/dist/src/services/modelConfigService.d.ts +39 -4
- package/dist/src/services/modelConfigService.js +153 -76
- package/dist/src/services/modelConfigService.js.map +1 -1
- package/dist/src/services/modelConfigService.test.js +175 -0
- package/dist/src/services/modelConfigService.test.js.map +1 -1
- package/dist/src/services/modelConfigServiceTestUtils.js +3 -1
- package/dist/src/services/modelConfigServiceTestUtils.js.map +1 -1
- package/dist/src/services/sessionSummaryService.js +2 -0
- package/dist/src/services/sessionSummaryService.js.map +1 -1
- package/dist/src/services/sessionSummaryService.test.js +1 -1
- package/dist/src/services/sessionSummaryService.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.d.ts +48 -0
- package/dist/src/services/shellExecutionService.js +339 -97
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +132 -17
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/services/test-data/resolved-aliases-retry.golden.json +26 -8
- package/dist/src/services/test-data/resolved-aliases.golden.json +26 -8
- package/dist/src/services/toolOutputMaskingService.d.ts +43 -0
- package/dist/src/services/toolOutputMaskingService.js +286 -0
- package/dist/src/services/toolOutputMaskingService.js.map +1 -0
- package/dist/src/services/toolOutputMaskingService.test.d.ts +6 -0
- package/dist/src/services/toolOutputMaskingService.test.js +546 -0
- package/dist/src/services/toolOutputMaskingService.test.js.map +1 -0
- package/dist/src/skills/builtin/skill-creator/SKILL.md +382 -0
- package/dist/src/skills/builtin/skill-creator/scripts/init_skill.cjs +239 -0
- package/dist/src/skills/builtin/skill-creator/scripts/package_skill.cjs +106 -0
- package/dist/src/skills/builtin/skill-creator/scripts/validate_skill.cjs +131 -0
- package/dist/src/skills/skillLoader.d.ts +3 -0
- package/dist/src/skills/skillLoader.js +73 -12
- package/dist/src/skills/skillLoader.js.map +1 -1
- package/dist/src/skills/skillLoader.test.d.ts +5 -0
- package/dist/src/skills/skillLoader.test.js +195 -1
- package/dist/src/skills/skillLoader.test.js.map +1 -1
- package/dist/src/skills/skillManager.d.ts +25 -3
- package/dist/src/skills/skillManager.js +76 -11
- package/dist/src/skills/skillManager.js.map +1 -1
- package/dist/src/skills/skillManager.test.js +209 -9
- package/dist/src/skills/skillManager.test.js.map +1 -1
- package/dist/src/skills/skillManagerAlias.test.d.ts +6 -0
- package/dist/src/skills/skillManagerAlias.test.js +140 -0
- package/dist/src/skills/skillManagerAlias.test.js.map +1 -0
- package/dist/src/telemetry/activity-monitor.js +1 -0
- package/dist/src/telemetry/activity-monitor.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +25 -4
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +207 -12
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +210 -6
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +23 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +61 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/file-exporters.js +2 -1
- package/dist/src/telemetry/file-exporters.js.map +1 -1
- package/dist/src/telemetry/file-exporters.test.d.ts +6 -0
- package/dist/src/telemetry/file-exporters.test.js +142 -0
- package/dist/src/telemetry/file-exporters.test.js.map +1 -0
- package/dist/src/telemetry/gcp-exporters.js +1 -0
- package/dist/src/telemetry/gcp-exporters.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +3 -2
- package/dist/src/telemetry/index.js +3 -2
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/integration.test.circular.js +2 -1
- package/dist/src/telemetry/integration.test.circular.js.map +1 -1
- package/dist/src/telemetry/llmRole.d.ts +18 -0
- package/dist/src/telemetry/llmRole.js +20 -0
- package/dist/src/telemetry/llmRole.js.map +1 -0
- package/dist/src/telemetry/loggers.d.ts +8 -1
- package/dist/src/telemetry/loggers.js +113 -10
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.circular.js +5 -2
- package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +169 -19
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/memory-monitor.test.js +1 -0
- package/dist/src/telemetry/memory-monitor.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +39 -1
- package/dist/src/telemetry/metrics.js +105 -4
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js +84 -4
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/telemetry/sanitize.test.js +2 -0
- package/dist/src/telemetry/sanitize.test.js.map +1 -1
- package/dist/src/telemetry/sdk.js +24 -0
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/sdk.test.js +5 -1
- package/dist/src/telemetry/sdk.test.js.map +1 -1
- package/dist/src/telemetry/semantic.js +92 -0
- package/dist/src/telemetry/semantic.js.map +1 -1
- package/dist/src/telemetry/semantic.truncation.test.d.ts +1 -0
- package/dist/src/telemetry/semantic.truncation.test.js +92 -0
- package/dist/src/telemetry/semantic.truncation.test.js.map +1 -0
- package/dist/src/telemetry/telemetryAttributes.js +5 -0
- package/dist/src/telemetry/telemetryAttributes.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +98 -15
- package/dist/src/telemetry/types.js +227 -16
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.d.ts +16 -0
- package/dist/src/telemetry/uiTelemetry.js +39 -0
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +29 -0
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/test-utils/mock-message-bus.d.ts +1 -19
- package/dist/src/test-utils/mock-message-bus.js +5 -65
- package/dist/src/test-utils/mock-message-bus.js.map +1 -1
- package/dist/src/test-utils/mock-tool.d.ts +1 -0
- package/dist/src/test-utils/mock-tool.js +1 -0
- package/dist/src/test-utils/mock-tool.js.map +1 -1
- package/dist/src/test-utils/mockWorkspaceContext.js +1 -0
- package/dist/src/test-utils/mockWorkspaceContext.js.map +1 -1
- package/dist/src/tools/activate-skill.d.ts +1 -0
- package/dist/src/tools/activate-skill.js +28 -25
- package/dist/src/tools/activate-skill.js.map +1 -1
- package/dist/src/tools/activate-skill.test.js +24 -6
- package/dist/src/tools/activate-skill.test.js.map +1 -1
- package/dist/src/tools/ask-user.d.ts +29 -0
- package/dist/src/tools/ask-user.js +141 -0
- package/dist/src/tools/ask-user.js.map +1 -0
- package/dist/src/tools/ask-user.test.d.ts +6 -0
- package/dist/src/tools/ask-user.test.js +446 -0
- package/dist/src/tools/ask-user.test.js.map +1 -0
- package/dist/src/tools/confirmation-policy.test.js +21 -0
- package/dist/src/tools/confirmation-policy.test.js.map +1 -1
- package/dist/src/tools/constants.d.ts +7 -0
- package/dist/src/tools/constants.js +8 -0
- package/dist/src/tools/constants.js.map +1 -0
- package/dist/src/tools/definitions/base-declarations.d.ts +26 -0
- package/dist/src/tools/definitions/base-declarations.js +30 -0
- package/dist/src/tools/definitions/base-declarations.js.map +1 -0
- package/dist/src/tools/definitions/coreTools.d.ts +36 -0
- package/dist/src/tools/definitions/coreTools.js +143 -0
- package/dist/src/tools/definitions/coreTools.js.map +1 -0
- package/dist/src/tools/definitions/coreToolsModelSnapshots.test.d.ts +6 -0
- package/dist/src/tools/definitions/coreToolsModelSnapshots.test.js +82 -0
- package/dist/src/tools/definitions/coreToolsModelSnapshots.test.js.map +1 -0
- package/dist/src/tools/definitions/dynamic-declaration-helpers.d.ts +30 -0
- package/dist/src/tools/definitions/dynamic-declaration-helpers.js +135 -0
- package/dist/src/tools/definitions/dynamic-declaration-helpers.js.map +1 -0
- package/dist/src/tools/definitions/model-family-sets/default-legacy.d.ts +11 -0
- package/dist/src/tools/definitions/model-family-sets/default-legacy.js +575 -0
- package/dist/src/tools/definitions/model-family-sets/default-legacy.js.map +1 -0
- package/dist/src/tools/definitions/model-family-sets/gemini-3.d.ts +14 -0
- package/dist/src/tools/definitions/model-family-sets/gemini-3.js +578 -0
- package/dist/src/tools/definitions/model-family-sets/gemini-3.js.map +1 -0
- package/dist/src/tools/definitions/modelFamilyService.d.ts +14 -0
- package/dist/src/tools/definitions/modelFamilyService.js +29 -0
- package/dist/src/tools/definitions/modelFamilyService.js.map +1 -0
- package/dist/src/tools/definitions/resolver.d.ts +15 -0
- package/dist/src/tools/definitions/resolver.js +27 -0
- package/dist/src/tools/definitions/resolver.js.map +1 -0
- package/dist/src/tools/definitions/resolver.test.d.ts +6 -0
- package/dist/src/tools/definitions/resolver.test.js +58 -0
- package/dist/src/tools/definitions/resolver.test.js.map +1 -0
- package/dist/src/tools/definitions/types.d.ts +44 -0
- package/dist/src/tools/definitions/types.js +7 -0
- package/dist/src/tools/definitions/types.js.map +1 -0
- package/dist/src/tools/diffOptions.d.ts +1 -1
- package/dist/src/tools/diffOptions.js +7 -3
- package/dist/src/tools/diffOptions.js.map +1 -1
- package/dist/src/tools/diffOptions.test.js +17 -0
- package/dist/src/tools/diffOptions.test.js.map +1 -1
- package/dist/src/tools/edit.d.ts +1 -0
- package/dist/src/tools/edit.js +52 -82
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +96 -1
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/enter-plan-mode.d.ts +25 -0
- package/dist/src/tools/enter-plan-mode.js +69 -0
- package/dist/src/tools/enter-plan-mode.js.map +1 -0
- package/dist/src/tools/enter-plan-mode.test.d.ts +6 -0
- package/dist/src/tools/enter-plan-mode.test.js +102 -0
- package/dist/src/tools/enter-plan-mode.test.js.map +1 -0
- package/dist/src/tools/exit-plan-mode.d.ts +33 -0
- package/dist/src/tools/exit-plan-mode.js +173 -0
- package/dist/src/tools/exit-plan-mode.js.map +1 -0
- package/dist/src/tools/exit-plan-mode.test.d.ts +6 -0
- package/dist/src/tools/exit-plan-mode.test.js +311 -0
- package/dist/src/tools/exit-plan-mode.test.js.map +1 -0
- package/dist/src/tools/get-internal-docs.d.ts +1 -0
- package/dist/src/tools/get-internal-docs.js +17 -27
- package/dist/src/tools/get-internal-docs.js.map +1 -1
- package/dist/src/tools/glob.d.ts +1 -0
- package/dist/src/tools/glob.js +15 -36
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +219 -280
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/grep.d.ts +18 -8
- package/dist/src/tools/grep.js +273 -247
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/grep.test.js +165 -16
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/line-endings.test.d.ts +6 -0
- package/dist/src/tools/line-endings.test.js +209 -0
- package/dist/src/tools/line-endings.test.js.map +1 -0
- package/dist/src/tools/ls.d.ts +1 -0
- package/dist/src/tools/ls.js +18 -37
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/ls.test.js +25 -3
- package/dist/src/tools/ls.test.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.d.ts +18 -5
- package/dist/src/tools/mcp-client-manager.js +118 -37
- package/dist/src/tools/mcp-client-manager.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.test.js +124 -16
- package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +18 -7
- package/dist/src/tools/mcp-client.js +137 -42
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +248 -29
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +26 -4
- package/dist/src/tools/mcp-tool.js +17 -5
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.test.js +5 -5
- package/dist/src/tools/mcp-tool.test.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +2 -7
- package/dist/src/tools/memoryTool.js +54 -80
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/memoryTool.test.js +62 -114
- package/dist/src/tools/memoryTool.test.js.map +1 -1
- package/dist/src/tools/modifiable-tool.test.js +3 -3
- package/dist/src/tools/modifiable-tool.test.js.map +1 -1
- package/dist/src/tools/read-file.d.ts +2 -0
- package/dist/src/tools/read-file.js +26 -30
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +90 -3
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.d.ts +1 -0
- package/dist/src/tools/read-many-files.js +21 -63
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +43 -1
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/ripGrep.d.ts +20 -3
- package/dist/src/tools/ripGrep.js +217 -189
- package/dist/src/tools/ripGrep.js.map +1 -1
- package/dist/src/tools/ripGrep.test.js +745 -567
- package/dist/src/tools/ripGrep.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +1 -0
- package/dist/src/tools/shell.js +8 -3
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +248 -11
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/tool-error.d.ts +4 -0
- package/dist/src/tools/tool-error.js +4 -0
- package/dist/src/tools/tool-error.js.map +1 -1
- package/dist/src/tools/tool-names.d.ts +27 -17
- package/dist/src/tools/tool-names.js +59 -20
- package/dist/src/tools/tool-names.js.map +1 -1
- package/dist/src/tools/tool-names.test.js +55 -2
- package/dist/src/tools/tool-names.test.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +10 -2
- package/dist/src/tools/tool-registry.js +58 -11
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +113 -1
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +52 -5
- package/dist/src/tools/tools.js +35 -18
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/web-fetch.d.ts +1 -0
- package/dist/src/tools/web-fetch.js +12 -12
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-search.d.ts +1 -0
- package/dist/src/tools/web-search.js +9 -11
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/write-file.d.ts +1 -4
- package/dist/src/tools/write-file.js +42 -35
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +105 -18
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/tools/write-todos.d.ts +1 -30
- package/dist/src/tools/write-todos.js +5 -123
- package/dist/src/tools/write-todos.js.map +1 -1
- package/dist/src/tools/xcode-mcp-fix-transport.d.ts +30 -0
- package/dist/src/tools/xcode-mcp-fix-transport.js +82 -0
- package/dist/src/tools/xcode-mcp-fix-transport.js.map +1 -0
- package/dist/src/tools/xcode-mcp-fix-transport.test.d.ts +1 -0
- package/dist/src/tools/xcode-mcp-fix-transport.test.js +98 -0
- package/dist/src/tools/xcode-mcp-fix-transport.test.js.map +1 -0
- package/dist/src/utils/apiConversionUtils.d.ts +12 -0
- package/dist/src/utils/apiConversionUtils.js +46 -0
- package/dist/src/utils/apiConversionUtils.js.map +1 -0
- package/dist/src/utils/apiConversionUtils.test.d.ts +6 -0
- package/dist/src/utils/apiConversionUtils.test.js +150 -0
- package/dist/src/utils/apiConversionUtils.test.js.map +1 -0
- package/dist/src/utils/authConsent.d.ts +10 -0
- package/dist/src/utils/authConsent.js +52 -0
- package/dist/src/utils/authConsent.js.map +1 -0
- package/dist/src/utils/authConsent.test.d.ts +6 -0
- package/dist/src/utils/authConsent.test.js +74 -0
- package/dist/src/utils/authConsent.test.js.map +1 -0
- package/dist/src/utils/bfsFileSearch.js +2 -0
- package/dist/src/utils/bfsFileSearch.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.test.js +6 -1
- package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
- package/dist/src/utils/checkpointUtils.d.ts +2 -2
- package/dist/src/utils/checkpointUtils.js +2 -0
- package/dist/src/utils/checkpointUtils.js.map +1 -1
- package/dist/src/utils/checks.d.ts +19 -0
- package/dist/src/utils/checks.js +24 -0
- package/dist/src/utils/checks.js.map +1 -0
- package/dist/src/utils/checks.test.d.ts +6 -0
- package/dist/src/utils/checks.test.js +29 -0
- package/dist/src/utils/checks.test.js.map +1 -0
- package/dist/src/utils/constants.d.ts +7 -0
- package/dist/src/utils/constants.js +8 -0
- package/dist/src/utils/constants.js.map +1 -0
- package/dist/src/utils/deadlineTimer.d.ts +36 -0
- package/dist/src/utils/deadlineTimer.js +87 -0
- package/dist/src/utils/deadlineTimer.js.map +1 -0
- package/dist/src/utils/deadlineTimer.test.d.ts +6 -0
- package/dist/src/utils/deadlineTimer.test.js +64 -0
- package/dist/src/utils/deadlineTimer.test.js.map +1 -0
- package/dist/src/utils/editCorrector.d.ts +3 -3
- package/dist/src/utils/editCorrector.js +37 -10
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editCorrector.test.js +49 -20
- package/dist/src/utils/editCorrector.test.js.map +1 -1
- package/dist/src/utils/editor.d.ts +17 -3
- package/dist/src/utils/editor.js +84 -15
- package/dist/src/utils/editor.js.map +1 -1
- package/dist/src/utils/editor.test.js +160 -17
- package/dist/src/utils/editor.test.js.map +1 -1
- package/dist/src/utils/environmentContext.js +9 -20
- package/dist/src/utils/environmentContext.js.map +1 -1
- package/dist/src/utils/environmentContext.test.js +31 -14
- package/dist/src/utils/environmentContext.test.js.map +1 -1
- package/dist/src/utils/errors.d.ts +3 -0
- package/dist/src/utils/errors.js +13 -3
- package/dist/src/utils/errors.js.map +1 -1
- package/dist/src/utils/errors.test.js +23 -1
- package/dist/src/utils/errors.test.js.map +1 -1
- package/dist/src/utils/events.d.ts +107 -3
- package/dist/src/utils/events.js +65 -1
- package/dist/src/utils/events.js.map +1 -1
- package/dist/src/utils/events.test.js +43 -0
- package/dist/src/utils/events.test.js.map +1 -1
- package/dist/src/utils/extensionLoader.js +2 -0
- package/dist/src/utils/extensionLoader.js.map +1 -1
- package/dist/src/utils/extensionLoader.test.js +21 -0
- package/dist/src/utils/extensionLoader.test.js.map +1 -1
- package/dist/src/utils/fastAckHelper.d.ts +30 -0
- package/dist/src/utils/fastAckHelper.js +142 -0
- package/dist/src/utils/fastAckHelper.js.map +1 -0
- package/dist/src/utils/fastAckHelper.test.d.ts +6 -0
- package/dist/src/utils/fastAckHelper.test.js +115 -0
- package/dist/src/utils/fastAckHelper.test.js.map +1 -0
- package/dist/src/utils/fileDiffUtils.d.ts +18 -0
- package/dist/src/utils/fileDiffUtils.js +37 -0
- package/dist/src/utils/fileDiffUtils.js.map +1 -0
- package/dist/src/utils/fileDiffUtils.test.d.ts +6 -0
- package/dist/src/utils/fileDiffUtils.test.js +84 -0
- package/dist/src/utils/fileDiffUtils.test.js.map +1 -0
- package/dist/src/utils/fileUtils.d.ts +27 -3
- package/dist/src/utils/fileUtils.js +104 -60
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +129 -109
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/filesearch/crawler.d.ts +1 -0
- package/dist/src/utils/filesearch/crawler.js +18 -1
- package/dist/src/utils/filesearch/crawler.js.map +1 -1
- package/dist/src/utils/filesearch/crawler.test.js +101 -82
- package/dist/src/utils/filesearch/crawler.test.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.d.ts +4 -3
- package/dist/src/utils/filesearch/fileSearch.js +5 -4
- package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.test.js +172 -84
- package/dist/src/utils/filesearch/fileSearch.test.js.map +1 -1
- package/dist/src/utils/filesearch/ignore.d.ts +2 -7
- package/dist/src/utils/filesearch/ignore.js +7 -14
- package/dist/src/utils/filesearch/ignore.js.map +1 -1
- package/dist/src/utils/filesearch/ignore.test.js +30 -32
- package/dist/src/utils/filesearch/ignore.test.js.map +1 -1
- package/dist/src/utils/formatters.d.ts +1 -1
- package/dist/src/utils/formatters.js +1 -1
- package/dist/src/utils/formatters.js.map +1 -1
- package/dist/src/utils/formatters.test.js +5 -5
- package/dist/src/utils/formatters.test.js.map +1 -1
- package/dist/src/utils/generateContentResponseUtilities.js +3 -0
- package/dist/src/utils/generateContentResponseUtilities.js.map +1 -1
- package/dist/src/utils/getFolderStructure.test.js +5 -2
- package/dist/src/utils/getFolderStructure.test.js.map +1 -1
- package/dist/src/utils/getPty.js +3 -0
- package/dist/src/utils/getPty.js.map +1 -1
- package/dist/src/utils/gitIgnoreParser.js +10 -11
- package/dist/src/utils/gitIgnoreParser.js.map +1 -1
- package/dist/src/utils/googleErrors.js +4 -0
- package/dist/src/utils/googleErrors.js.map +1 -1
- package/dist/src/utils/googleQuotaErrors.d.ts +23 -9
- package/dist/src/utils/googleQuotaErrors.js +90 -23
- package/dist/src/utils/googleQuotaErrors.js.map +1 -1
- package/dist/src/utils/googleQuotaErrors.test.js +168 -23
- package/dist/src/utils/googleQuotaErrors.test.js.map +1 -1
- package/dist/src/utils/headless.d.ts +26 -0
- package/dist/src/utils/headless.js +33 -0
- package/dist/src/utils/headless.js.map +1 -0
- package/dist/src/utils/headless.test.d.ts +6 -0
- package/dist/src/utils/headless.test.js +167 -0
- package/dist/src/utils/headless.test.js.map +1 -0
- package/dist/src/utils/httpErrors.js +4 -1
- package/dist/src/utils/httpErrors.js.map +1 -1
- package/dist/src/utils/ignoreFileParser.d.ts +30 -0
- package/dist/src/utils/ignoreFileParser.js +100 -0
- package/dist/src/utils/ignoreFileParser.js.map +1 -0
- package/dist/src/utils/ignoreFileParser.test.d.ts +6 -0
- package/dist/src/utils/ignoreFileParser.test.js +167 -0
- package/dist/src/utils/ignoreFileParser.test.js.map +1 -0
- package/dist/src/utils/installationManager.test.js +11 -3
- package/dist/src/utils/installationManager.test.js.map +1 -1
- package/dist/src/utils/llm-edit-fixer.js +9 -9
- package/dist/src/utils/llm-edit-fixer.js.map +1 -1
- package/dist/src/utils/llm-edit-fixer.test.js +2 -2
- package/dist/src/utils/llm-edit-fixer.test.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.d.ts +11 -3
- package/dist/src/utils/memoryDiscovery.js +122 -102
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +163 -109
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/memoryImportProcessor.js +7 -24
- package/dist/src/utils/memoryImportProcessor.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.js +3 -0
- package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
- package/dist/src/utils/package.js +10 -3
- package/dist/src/utils/package.js.map +1 -1
- package/dist/src/utils/package.test.d.ts +6 -0
- package/dist/src/utils/package.test.js +57 -0
- package/dist/src/utils/package.test.js.map +1 -0
- package/dist/src/utils/partUtils.js +2 -1
- package/dist/src/utils/partUtils.js.map +1 -1
- package/dist/src/utils/paths.d.ts +33 -9
- package/dist/src/utils/paths.js +88 -29
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/src/utils/paths.test.js +206 -110
- package/dist/src/utils/paths.test.js.map +1 -1
- package/dist/src/utils/planUtils.d.ts +29 -0
- package/dist/src/utils/planUtils.js +55 -0
- package/dist/src/utils/planUtils.js.map +1 -0
- package/dist/src/utils/planUtils.test.d.ts +6 -0
- package/dist/src/utils/planUtils.test.js +76 -0
- package/dist/src/utils/planUtils.test.js.map +1 -0
- package/dist/src/utils/process-utils.d.ts +32 -0
- package/dist/src/utils/process-utils.js +88 -0
- package/dist/src/utils/process-utils.js.map +1 -0
- package/dist/src/utils/process-utils.test.d.ts +6 -0
- package/dist/src/utils/process-utils.test.js +103 -0
- package/dist/src/utils/process-utils.test.js.map +1 -0
- package/dist/src/utils/promptIdContext.d.ts +6 -0
- package/dist/src/utils/promptIdContext.js +15 -0
- package/dist/src/utils/promptIdContext.js.map +1 -1
- package/dist/src/utils/quotaErrorDetection.js +3 -0
- package/dist/src/utils/quotaErrorDetection.js.map +1 -1
- package/dist/src/utils/retry.d.ts +4 -0
- package/dist/src/utils/retry.js +84 -5
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/retry.test.js +70 -3
- package/dist/src/utils/retry.test.js.map +1 -1
- package/dist/src/utils/safeJsonStringify.js +1 -0
- package/dist/src/utils/safeJsonStringify.js.map +1 -1
- package/dist/src/utils/schemaValidator.d.ts +8 -1
- package/dist/src/utils/schemaValidator.js +78 -11
- package/dist/src/utils/schemaValidator.js.map +1 -1
- package/dist/src/utils/schemaValidator.test.js +77 -0
- package/dist/src/utils/schemaValidator.test.js.map +1 -1
- package/dist/src/utils/security.d.ts +16 -0
- package/dist/src/utils/security.js +91 -0
- package/dist/src/utils/security.js.map +1 -0
- package/dist/src/utils/security.test.d.ts +1 -0
- package/dist/src/utils/security.test.js +121 -0
- package/dist/src/utils/security.test.js.map +1 -0
- package/dist/src/utils/shell-utils.d.ts +14 -0
- package/dist/src/utils/shell-utils.integration.test.d.ts +1 -0
- package/dist/src/utils/shell-utils.integration.test.js +58 -0
- package/dist/src/utils/shell-utils.integration.test.js.map +1 -0
- package/dist/src/utils/shell-utils.js +191 -30
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/shell-utils.test.js +108 -1
- package/dist/src/utils/shell-utils.test.js.map +1 -1
- package/dist/src/utils/summarizer.js +2 -1
- package/dist/src/utils/summarizer.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.d.ts +1 -1
- package/dist/src/utils/terminalSerializer.js +25 -13
- package/dist/src/utils/terminalSerializer.js.map +1 -1
- package/dist/src/utils/testUtils.js +1 -0
- package/dist/src/utils/testUtils.js.map +1 -1
- package/dist/src/utils/textUtils.d.ts +14 -0
- package/dist/src/utils/textUtils.js +23 -0
- package/dist/src/utils/textUtils.js.map +1 -1
- package/dist/src/utils/textUtils.test.js +18 -1
- package/dist/src/utils/textUtils.test.js.map +1 -1
- package/dist/src/utils/tokenCalculation.d.ts +2 -2
- package/dist/src/utils/tokenCalculation.js +87 -21
- package/dist/src/utils/tokenCalculation.js.map +1 -1
- package/dist/src/utils/tokenCalculation.test.js +189 -76
- package/dist/src/utils/tokenCalculation.test.js.map +1 -1
- package/dist/src/utils/tool-utils.d.ts +26 -0
- package/dist/src/utils/tool-utils.js +36 -0
- package/dist/src/utils/tool-utils.js.map +1 -1
- package/dist/src/utils/tool-utils.test.js +73 -3
- package/dist/src/utils/tool-utils.test.js.map +1 -1
- package/dist/src/utils/toolCallContext.d.ts +35 -0
- package/dist/src/utils/toolCallContext.js +29 -0
- package/dist/src/utils/toolCallContext.js.map +1 -0
- package/dist/src/utils/toolCallContext.test.d.ts +6 -0
- package/dist/src/utils/toolCallContext.test.js +68 -0
- package/dist/src/utils/toolCallContext.test.js.map +1 -0
- package/dist/src/utils/userAccountManager.js +1 -0
- package/dist/src/utils/userAccountManager.js.map +1 -1
- package/dist/src/utils/userAccountManager.test.js +5 -5
- package/dist/src/utils/userAccountManager.test.js.map +1 -1
- package/dist/src/utils/version.d.ts +2 -0
- package/dist/src/utils/version.js +14 -3
- package/dist/src/utils/version.js.map +1 -1
- package/dist/src/utils/version.test.js +15 -1
- package/dist/src/utils/version.test.js.map +1 -1
- package/dist/src/utils/workspaceContext.d.ts +28 -0
- package/dist/src/utils/workspaceContext.js +74 -9
- package/dist/src/utils/workspaceContext.js.map +1 -1
- package/dist/src/utils/workspaceContext.test.js +56 -1
- package/dist/src/utils/workspaceContext.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +25 -15
|
@@ -5,12 +5,13 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { describe, it, expect, vi } from 'vitest';
|
|
7
7
|
import { CoreToolScheduler } from './coreToolScheduler.js';
|
|
8
|
-
import {
|
|
8
|
+
import { CoreToolCallStatus, } from '../scheduler/types.js';
|
|
9
|
+
import { DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD, BaseDeclarativeTool, BaseToolInvocation, ToolConfirmationOutcome, Kind, ApprovalMode, HookSystem, PolicyDecision, ToolErrorType, } from '../index.js';
|
|
9
10
|
import { createMockMessageBus } from '../test-utils/mock-message-bus.js';
|
|
10
11
|
import { MockModifiableTool, MockTool, MOCK_TOOL_SHOULD_CONFIRM_EXECUTE, } from '../test-utils/mock-tool.js';
|
|
11
12
|
import * as modifiableToolModule from '../tools/modifiable-tool.js';
|
|
12
|
-
import { isShellInvocationAllowlisted } from '../utils/shell-permissions.js';
|
|
13
13
|
import { DEFAULT_GEMINI_MODEL } from '../config/models.js';
|
|
14
|
+
import { DiscoveredMCPTool } from '../tools/mcp-tool.js';
|
|
14
15
|
vi.mock('fs/promises', () => ({
|
|
15
16
|
writeFile: vi.fn(),
|
|
16
17
|
}));
|
|
@@ -163,16 +164,34 @@ function createMockConfig(overrides = {}) {
|
|
|
163
164
|
getProjectTempDir: () => '/tmp',
|
|
164
165
|
},
|
|
165
166
|
getTruncateToolOutputThreshold: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
|
|
166
|
-
getTruncateToolOutputLines: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
|
|
167
167
|
getToolRegistry: () => defaultToolRegistry,
|
|
168
168
|
getActiveModel: () => DEFAULT_GEMINI_MODEL,
|
|
169
169
|
getGeminiClient: () => null,
|
|
170
170
|
getMessageBus: () => createMockMessageBus(),
|
|
171
171
|
getEnableHooks: () => false,
|
|
172
|
-
getPolicyEngine: () => null,
|
|
173
172
|
getExperiments: () => { },
|
|
174
173
|
};
|
|
175
|
-
|
|
174
|
+
const finalConfig = { ...baseConfig, ...overrides };
|
|
175
|
+
// Patch the policy engine to use the final config if not overridden
|
|
176
|
+
if (!overrides.getPolicyEngine) {
|
|
177
|
+
finalConfig.getPolicyEngine = () => ({
|
|
178
|
+
check: async (toolCall, _serverName) => {
|
|
179
|
+
// Mock simple policy logic for tests
|
|
180
|
+
const mode = finalConfig.getApprovalMode();
|
|
181
|
+
if (mode === ApprovalMode.YOLO) {
|
|
182
|
+
return { decision: PolicyDecision.ALLOW };
|
|
183
|
+
}
|
|
184
|
+
const allowed = finalConfig.getAllowedTools();
|
|
185
|
+
if (allowed &&
|
|
186
|
+
(allowed.includes(toolCall.name) ||
|
|
187
|
+
allowed.some((p) => toolCall.name.startsWith(p)))) {
|
|
188
|
+
return { decision: PolicyDecision.ALLOW };
|
|
189
|
+
}
|
|
190
|
+
return { decision: PolicyDecision.ASK_USER };
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
return finalConfig;
|
|
176
195
|
}
|
|
177
196
|
describe('CoreToolScheduler', () => {
|
|
178
197
|
it('should cancel a tool call if the signal is aborted before confirmation', async () => {
|
|
@@ -219,7 +238,7 @@ describe('CoreToolScheduler', () => {
|
|
|
219
238
|
expect(onAllToolCallsComplete).toHaveBeenCalled();
|
|
220
239
|
const completedCalls = onAllToolCallsComplete.mock
|
|
221
240
|
.calls[0][0];
|
|
222
|
-
expect(completedCalls[0].status).toBe(
|
|
241
|
+
expect(completedCalls[0].status).toBe(CoreToolCallStatus.Cancelled);
|
|
223
242
|
});
|
|
224
243
|
it('should cancel all tools when cancelAll is called', async () => {
|
|
225
244
|
const mockTool1 = new MockTool({
|
|
@@ -296,7 +315,7 @@ describe('CoreToolScheduler', () => {
|
|
|
296
315
|
// Don't await, let it run in the background
|
|
297
316
|
void scheduler.schedule(requests, abortController.signal);
|
|
298
317
|
// Wait for the first tool to be awaiting approval
|
|
299
|
-
await waitForStatus(onToolCallsUpdate,
|
|
318
|
+
await waitForStatus(onToolCallsUpdate, CoreToolCallStatus.AwaitingApproval);
|
|
300
319
|
// Cancel all operations
|
|
301
320
|
scheduler.cancelAll(abortController.signal);
|
|
302
321
|
abortController.abort(); // Also fire the signal
|
|
@@ -306,9 +325,9 @@ describe('CoreToolScheduler', () => {
|
|
|
306
325
|
const completedCalls = onAllToolCallsComplete.mock
|
|
307
326
|
.calls[0][0];
|
|
308
327
|
expect(completedCalls).toHaveLength(3);
|
|
309
|
-
expect(completedCalls.find((c) => c.request.callId === '1')?.status).toBe(
|
|
310
|
-
expect(completedCalls.find((c) => c.request.callId === '2')?.status).toBe(
|
|
311
|
-
expect(completedCalls.find((c) => c.request.callId === '3')?.status).toBe(
|
|
328
|
+
expect(completedCalls.find((c) => c.request.callId === '1')?.status).toBe(CoreToolCallStatus.Cancelled);
|
|
329
|
+
expect(completedCalls.find((c) => c.request.callId === '2')?.status).toBe(CoreToolCallStatus.Cancelled);
|
|
330
|
+
expect(completedCalls.find((c) => c.request.callId === '3')?.status).toBe(CoreToolCallStatus.Cancelled);
|
|
312
331
|
});
|
|
313
332
|
it('should cancel all tools in a batch when one is cancelled via confirmation', async () => {
|
|
314
333
|
const mockTool1 = new MockTool({
|
|
@@ -385,9 +404,10 @@ describe('CoreToolScheduler', () => {
|
|
|
385
404
|
// Don't await, let it run in the background
|
|
386
405
|
void scheduler.schedule(requests, abortController.signal);
|
|
387
406
|
// Wait for the first tool to be awaiting approval
|
|
388
|
-
const awaitingCall = (await waitForStatus(onToolCallsUpdate,
|
|
407
|
+
const awaitingCall = (await waitForStatus(onToolCallsUpdate, CoreToolCallStatus.AwaitingApproval));
|
|
389
408
|
// Cancel the first tool via its confirmation handler
|
|
390
|
-
|
|
409
|
+
const confirmationDetails = awaitingCall.confirmationDetails;
|
|
410
|
+
await confirmationDetails.onConfirm(ToolConfirmationOutcome.Cancel);
|
|
391
411
|
abortController.abort(); // User cancelling often involves an abort signal
|
|
392
412
|
await vi.waitFor(() => {
|
|
393
413
|
expect(onAllToolCallsComplete).toHaveBeenCalled();
|
|
@@ -395,9 +415,9 @@ describe('CoreToolScheduler', () => {
|
|
|
395
415
|
const completedCalls = onAllToolCallsComplete.mock
|
|
396
416
|
.calls[0][0];
|
|
397
417
|
expect(completedCalls).toHaveLength(3);
|
|
398
|
-
expect(completedCalls.find((c) => c.request.callId === '1')?.status).toBe(
|
|
399
|
-
expect(completedCalls.find((c) => c.request.callId === '2')?.status).toBe(
|
|
400
|
-
expect(completedCalls.find((c) => c.request.callId === '3')?.status).toBe(
|
|
418
|
+
expect(completedCalls.find((c) => c.request.callId === '1')?.status).toBe(CoreToolCallStatus.Cancelled);
|
|
419
|
+
expect(completedCalls.find((c) => c.request.callId === '2')?.status).toBe(CoreToolCallStatus.Cancelled);
|
|
420
|
+
expect(completedCalls.find((c) => c.request.callId === '3')?.status).toBe(CoreToolCallStatus.Cancelled);
|
|
401
421
|
});
|
|
402
422
|
it('should mark tool call as cancelled when abort happens during confirmation error', async () => {
|
|
403
423
|
const abortController = new AbortController();
|
|
@@ -420,7 +440,7 @@ describe('CoreToolScheduler', () => {
|
|
|
420
440
|
const onToolCallsUpdate = vi.fn();
|
|
421
441
|
const mockConfig = createMockConfig({
|
|
422
442
|
getToolRegistry: () => mockToolRegistry,
|
|
423
|
-
isInteractive: () =>
|
|
443
|
+
isInteractive: () => true,
|
|
424
444
|
});
|
|
425
445
|
const scheduler = new CoreToolScheduler({
|
|
426
446
|
config: mockConfig,
|
|
@@ -439,9 +459,9 @@ describe('CoreToolScheduler', () => {
|
|
|
439
459
|
expect(onAllToolCallsComplete).toHaveBeenCalled();
|
|
440
460
|
const completedCalls = onAllToolCallsComplete.mock
|
|
441
461
|
.calls[0][0];
|
|
442
|
-
expect(completedCalls[0].status).toBe(
|
|
462
|
+
expect(completedCalls[0].status).toBe(CoreToolCallStatus.Cancelled);
|
|
443
463
|
const statuses = onToolCallsUpdate.mock.calls.flatMap((call) => call[0].map((toolCall) => toolCall.status));
|
|
444
|
-
expect(statuses).not.toContain(
|
|
464
|
+
expect(statuses).not.toContain(CoreToolCallStatus.Error);
|
|
445
465
|
});
|
|
446
466
|
it('should error when tool requires confirmation in non-interactive mode', async () => {
|
|
447
467
|
const mockTool = new MockTool({
|
|
@@ -486,7 +506,7 @@ describe('CoreToolScheduler', () => {
|
|
|
486
506
|
expect(onAllToolCallsComplete).toHaveBeenCalled();
|
|
487
507
|
const completedCalls = onAllToolCallsComplete.mock
|
|
488
508
|
.calls[0][0];
|
|
489
|
-
expect(completedCalls[0].status).toBe(
|
|
509
|
+
expect(completedCalls[0].status).toBe(CoreToolCallStatus.Error);
|
|
490
510
|
const erroredCall = completedCalls[0];
|
|
491
511
|
const errorResponse = erroredCall.response;
|
|
492
512
|
const errorParts = errorResponse.responseParts;
|
|
@@ -539,19 +559,23 @@ describe('CoreToolScheduler with payload', () => {
|
|
|
539
559
|
prompt_id: 'prompt-id-2',
|
|
540
560
|
};
|
|
541
561
|
await scheduler.schedule([request], abortController.signal);
|
|
542
|
-
const awaitingCall = (await waitForStatus(onToolCallsUpdate,
|
|
562
|
+
const awaitingCall = (await waitForStatus(onToolCallsUpdate, CoreToolCallStatus.AwaitingApproval));
|
|
543
563
|
const confirmationDetails = awaitingCall.confirmationDetails;
|
|
544
564
|
if (confirmationDetails) {
|
|
545
565
|
const payload = { newContent: 'final version' };
|
|
546
566
|
await confirmationDetails.onConfirm(ToolConfirmationOutcome.ProceedOnce, payload);
|
|
547
567
|
}
|
|
568
|
+
// After internal update, the tool should be awaiting approval again with the NEW content.
|
|
569
|
+
const updatedAwaitingCall = (await waitForStatus(onToolCallsUpdate, CoreToolCallStatus.AwaitingApproval));
|
|
570
|
+
// Now confirm for real to execute.
|
|
571
|
+
await updatedAwaitingCall.confirmationDetails.onConfirm(ToolConfirmationOutcome.ProceedOnce);
|
|
548
572
|
// Wait for the tool execution to complete
|
|
549
573
|
await vi.waitFor(() => {
|
|
550
574
|
expect(onAllToolCallsComplete).toHaveBeenCalled();
|
|
551
575
|
});
|
|
552
576
|
const completedCalls = onAllToolCallsComplete.mock
|
|
553
577
|
.calls[0][0];
|
|
554
|
-
expect(completedCalls[0].status).toBe(
|
|
578
|
+
expect(completedCalls[0].status).toBe(CoreToolCallStatus.Success);
|
|
555
579
|
expect(mockTool.executeFn).toHaveBeenCalledWith({
|
|
556
580
|
newContent: 'final version',
|
|
557
581
|
});
|
|
@@ -633,7 +657,7 @@ describe('CoreToolScheduler edit cancellation', () => {
|
|
|
633
657
|
prompt_id: 'prompt-id-1',
|
|
634
658
|
};
|
|
635
659
|
await scheduler.schedule([request], abortController.signal);
|
|
636
|
-
const awaitingCall = (await waitForStatus(onToolCallsUpdate,
|
|
660
|
+
const awaitingCall = (await waitForStatus(onToolCallsUpdate, CoreToolCallStatus.AwaitingApproval));
|
|
637
661
|
// Cancel the edit
|
|
638
662
|
const confirmationDetails = awaitingCall.confirmationDetails;
|
|
639
663
|
if (confirmationDetails) {
|
|
@@ -642,7 +666,7 @@ describe('CoreToolScheduler edit cancellation', () => {
|
|
|
642
666
|
expect(onAllToolCallsComplete).toHaveBeenCalled();
|
|
643
667
|
const completedCalls = onAllToolCallsComplete.mock
|
|
644
668
|
.calls[0][0];
|
|
645
|
-
expect(completedCalls[0].status).toBe(
|
|
669
|
+
expect(completedCalls[0].status).toBe(CoreToolCallStatus.Cancelled);
|
|
646
670
|
// Check that the diff is preserved
|
|
647
671
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
648
672
|
const cancelledCall = completedCalls[0];
|
|
@@ -715,24 +739,24 @@ describe('CoreToolScheduler YOLO mode', () => {
|
|
|
715
739
|
// Assert
|
|
716
740
|
// 1. The tool's execute method was called directly.
|
|
717
741
|
expect(executeFn).toHaveBeenCalledWith({ param: 'value' });
|
|
718
|
-
// 2. The tool call status never entered
|
|
742
|
+
// 2. The tool call status never entered CoreToolCallStatus.AwaitingApproval.
|
|
719
743
|
const statusUpdates = onToolCallsUpdate.mock.calls
|
|
720
744
|
.map((call) => call[0][0]?.status)
|
|
721
745
|
.filter(Boolean);
|
|
722
|
-
expect(statusUpdates).not.toContain(
|
|
746
|
+
expect(statusUpdates).not.toContain(CoreToolCallStatus.AwaitingApproval);
|
|
723
747
|
expect(statusUpdates).toEqual([
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
748
|
+
CoreToolCallStatus.Validating,
|
|
749
|
+
CoreToolCallStatus.Scheduled,
|
|
750
|
+
CoreToolCallStatus.Executing,
|
|
751
|
+
CoreToolCallStatus.Success,
|
|
728
752
|
]);
|
|
729
753
|
// 3. The final callback indicates the tool call was successful.
|
|
730
754
|
const completedCalls = onAllToolCallsComplete.mock
|
|
731
755
|
.calls[0][0];
|
|
732
756
|
expect(completedCalls).toHaveLength(1);
|
|
733
757
|
const completedCall = completedCalls[0];
|
|
734
|
-
expect(completedCall.status).toBe(
|
|
735
|
-
if (completedCall.status ===
|
|
758
|
+
expect(completedCall.status).toBe(CoreToolCallStatus.Success);
|
|
759
|
+
if (completedCall.status === CoreToolCallStatus.Success) {
|
|
736
760
|
expect(completedCall.response.resultDisplay).toBe('Tool executed');
|
|
737
761
|
}
|
|
738
762
|
});
|
|
@@ -796,8 +820,8 @@ describe('CoreToolScheduler request queueing', () => {
|
|
|
796
820
|
// Schedule the first call, which will pause execution.
|
|
797
821
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
798
822
|
scheduler.schedule([request1], abortController.signal);
|
|
799
|
-
// Wait for the first call to be in the
|
|
800
|
-
await waitForStatus(onToolCallsUpdate,
|
|
823
|
+
// Wait for the first call to be in the CoreToolCallStatus.Executing state.
|
|
824
|
+
await waitForStatus(onToolCallsUpdate, CoreToolCallStatus.Executing);
|
|
801
825
|
// Schedule the second call while the first is "running".
|
|
802
826
|
const schedulePromise2 = scheduler.schedule([request2], abortController.signal);
|
|
803
827
|
// Ensure the second tool call hasn't been executed yet.
|
|
@@ -827,8 +851,8 @@ describe('CoreToolScheduler request queueing', () => {
|
|
|
827
851
|
expect(onAllToolCallsComplete).toHaveBeenCalledTimes(2);
|
|
828
852
|
});
|
|
829
853
|
// Verify the completion callbacks were called correctly.
|
|
830
|
-
expect(onAllToolCallsComplete.mock.calls[0][0][0].status).toBe(
|
|
831
|
-
expect(onAllToolCallsComplete.mock.calls[1][0][0].status).toBe(
|
|
854
|
+
expect(onAllToolCallsComplete.mock.calls[0][0][0].status).toBe(CoreToolCallStatus.Success);
|
|
855
|
+
expect(onAllToolCallsComplete.mock.calls[1][0][0].status).toBe(CoreToolCallStatus.Success);
|
|
832
856
|
});
|
|
833
857
|
it('should auto-approve a tool call if it is on the allowedTools list', async () => {
|
|
834
858
|
// Arrange
|
|
@@ -901,16 +925,16 @@ describe('CoreToolScheduler request queueing', () => {
|
|
|
901
925
|
// Assert
|
|
902
926
|
// 1. The tool's execute method was called directly.
|
|
903
927
|
expect(executeFn).toHaveBeenCalledWith({ param: 'value' });
|
|
904
|
-
// 2. The tool call status never entered
|
|
928
|
+
// 2. The tool call status never entered CoreToolCallStatus.AwaitingApproval.
|
|
905
929
|
const statusUpdates = onToolCallsUpdate.mock.calls
|
|
906
930
|
.map((call) => call[0][0]?.status)
|
|
907
931
|
.filter(Boolean);
|
|
908
|
-
expect(statusUpdates).not.toContain(
|
|
932
|
+
expect(statusUpdates).not.toContain(CoreToolCallStatus.AwaitingApproval);
|
|
909
933
|
expect(statusUpdates).toEqual([
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
934
|
+
CoreToolCallStatus.Validating,
|
|
935
|
+
CoreToolCallStatus.Scheduled,
|
|
936
|
+
CoreToolCallStatus.Executing,
|
|
937
|
+
CoreToolCallStatus.Success,
|
|
914
938
|
]);
|
|
915
939
|
// 3. The final callback indicates the tool call was successful.
|
|
916
940
|
expect(onAllToolCallsComplete).toHaveBeenCalled();
|
|
@@ -918,15 +942,12 @@ describe('CoreToolScheduler request queueing', () => {
|
|
|
918
942
|
.calls[0][0];
|
|
919
943
|
expect(completedCalls).toHaveLength(1);
|
|
920
944
|
const completedCall = completedCalls[0];
|
|
921
|
-
expect(completedCall.status).toBe(
|
|
922
|
-
if (completedCall.status ===
|
|
945
|
+
expect(completedCall.status).toBe(CoreToolCallStatus.Success);
|
|
946
|
+
if (completedCall.status === CoreToolCallStatus.Success) {
|
|
923
947
|
expect(completedCall.response.resultDisplay).toBe('Tool executed');
|
|
924
948
|
}
|
|
925
949
|
});
|
|
926
950
|
it('should require approval for a chained shell command even when prefix is allowlisted', async () => {
|
|
927
|
-
expect(isShellInvocationAllowlisted({
|
|
928
|
-
params: { command: 'git status && rm -rf /tmp/should-not-run' },
|
|
929
|
-
}, ['run_shell_command(git)'])).toBe(false);
|
|
930
951
|
const executeFn = vi.fn().mockResolvedValue({
|
|
931
952
|
llmContent: 'Shell command executed',
|
|
932
953
|
returnDisplay: 'Shell command executed',
|
|
@@ -938,6 +959,7 @@ describe('CoreToolScheduler request queueing', () => {
|
|
|
938
959
|
title: 'Confirm Shell Command',
|
|
939
960
|
command: String(params['command'] ?? ''),
|
|
940
961
|
rootCommand: 'git',
|
|
962
|
+
rootCommands: ['git'],
|
|
941
963
|
onConfirm: async () => { },
|
|
942
964
|
}),
|
|
943
965
|
execute: () => executeFn({}),
|
|
@@ -970,6 +992,9 @@ describe('CoreToolScheduler request queueing', () => {
|
|
|
970
992
|
}),
|
|
971
993
|
getToolRegistry: () => toolRegistry,
|
|
972
994
|
getHookSystem: () => undefined,
|
|
995
|
+
getPolicyEngine: () => ({
|
|
996
|
+
check: async () => ({ decision: PolicyDecision.ASK_USER }),
|
|
997
|
+
}),
|
|
973
998
|
});
|
|
974
999
|
const scheduler = new CoreToolScheduler({
|
|
975
1000
|
config: mockConfig,
|
|
@@ -989,7 +1014,7 @@ describe('CoreToolScheduler request queueing', () => {
|
|
|
989
1014
|
const statusUpdates = onToolCallsUpdate.mock.calls
|
|
990
1015
|
.map((call) => call[0][0]?.status)
|
|
991
1016
|
.filter(Boolean);
|
|
992
|
-
expect(statusUpdates).toContain(
|
|
1017
|
+
expect(statusUpdates).toContain(CoreToolCallStatus.AwaitingApproval);
|
|
993
1018
|
expect(executeFn).not.toHaveBeenCalled();
|
|
994
1019
|
expect(onAllToolCallsComplete).not.toHaveBeenCalled();
|
|
995
1020
|
}, 20000);
|
|
@@ -1104,12 +1129,13 @@ describe('CoreToolScheduler request queueing', () => {
|
|
|
1104
1129
|
onToolCallsUpdate(toolCalls);
|
|
1105
1130
|
// Capture confirmation handlers for awaiting_approval tools
|
|
1106
1131
|
toolCalls.forEach((call) => {
|
|
1107
|
-
if (call.status ===
|
|
1132
|
+
if (call.status === CoreToolCallStatus.AwaitingApproval) {
|
|
1108
1133
|
const waitingCall = call;
|
|
1109
|
-
|
|
1110
|
-
|
|
1134
|
+
const details = waitingCall.confirmationDetails;
|
|
1135
|
+
if (details?.onConfirm) {
|
|
1136
|
+
const originalHandler = pendingConfirmations.find((h) => h === details.onConfirm);
|
|
1111
1137
|
if (!originalHandler) {
|
|
1112
|
-
pendingConfirmations.push(
|
|
1138
|
+
pendingConfirmations.push(details.onConfirm);
|
|
1113
1139
|
}
|
|
1114
1140
|
}
|
|
1115
1141
|
}
|
|
@@ -1148,11 +1174,11 @@ describe('CoreToolScheduler request queueing', () => {
|
|
|
1148
1174
|
const calls = onToolCallsUpdate.mock.calls.at(-1)?.[0];
|
|
1149
1175
|
// With the sequential scheduler, the update includes the active call and the queue.
|
|
1150
1176
|
expect(calls?.length).toBe(3);
|
|
1151
|
-
expect(calls?.[0].status).toBe(
|
|
1177
|
+
expect(calls?.[0].status).toBe(CoreToolCallStatus.AwaitingApproval);
|
|
1152
1178
|
expect(calls?.[0].request.callId).toBe('1');
|
|
1153
|
-
// Check that the other two are in the queue (still in
|
|
1154
|
-
expect(calls?.[1].status).toBe(
|
|
1155
|
-
expect(calls?.[2].status).toBe(
|
|
1179
|
+
// Check that the other two are in the queue (still in CoreToolCallStatus.Validating state)
|
|
1180
|
+
expect(calls?.[1].status).toBe(CoreToolCallStatus.Validating);
|
|
1181
|
+
expect(calls?.[2].status).toBe(CoreToolCallStatus.Validating);
|
|
1156
1182
|
});
|
|
1157
1183
|
expect(pendingConfirmations.length).toBe(1);
|
|
1158
1184
|
// Approve the first tool with ProceedAlways
|
|
@@ -1164,7 +1190,7 @@ describe('CoreToolScheduler request queueing', () => {
|
|
|
1164
1190
|
});
|
|
1165
1191
|
const completedCalls = onAllToolCallsComplete.mock.calls.at(-1)?.[0];
|
|
1166
1192
|
expect(completedCalls?.length).toBe(3);
|
|
1167
|
-
expect(completedCalls?.every((call) => call.status ===
|
|
1193
|
+
expect(completedCalls?.every((call) => call.status === CoreToolCallStatus.Success)).toBe(true);
|
|
1168
1194
|
// Verify approval mode was changed
|
|
1169
1195
|
expect(approvalMode).toBe(ApprovalMode.AUTO_EDIT);
|
|
1170
1196
|
});
|
|
@@ -1258,8 +1284,8 @@ describe('CoreToolScheduler Sequential Execution', () => {
|
|
|
1258
1284
|
const completedCalls = onAllToolCallsComplete.mock
|
|
1259
1285
|
.calls[0][0];
|
|
1260
1286
|
expect(completedCalls).toHaveLength(2);
|
|
1261
|
-
expect(completedCalls[0].status).toBe(
|
|
1262
|
-
expect(completedCalls[1].status).toBe(
|
|
1287
|
+
expect(completedCalls[0].status).toBe(CoreToolCallStatus.Success);
|
|
1288
|
+
expect(completedCalls[1].status).toBe(CoreToolCallStatus.Success);
|
|
1263
1289
|
});
|
|
1264
1290
|
it('should cancel subsequent tools when the signal is aborted.', async () => {
|
|
1265
1291
|
// Arrange
|
|
@@ -1362,9 +1388,9 @@ describe('CoreToolScheduler Sequential Execution', () => {
|
|
|
1362
1388
|
const call1 = completedCalls.find((c) => c.request.callId === '1');
|
|
1363
1389
|
const call2 = completedCalls.find((c) => c.request.callId === '2');
|
|
1364
1390
|
const call3 = completedCalls.find((c) => c.request.callId === '3');
|
|
1365
|
-
expect(call1?.status).toBe(
|
|
1366
|
-
expect(call2?.status).toBe(
|
|
1367
|
-
expect(call3?.status).toBe(
|
|
1391
|
+
expect(call1?.status).toBe(CoreToolCallStatus.Success);
|
|
1392
|
+
expect(call2?.status).toBe(CoreToolCallStatus.Cancelled);
|
|
1393
|
+
expect(call3?.status).toBe(CoreToolCallStatus.Cancelled);
|
|
1368
1394
|
});
|
|
1369
1395
|
it('should pass confirmation diff data into modifyWithEditor overrides', async () => {
|
|
1370
1396
|
const modifyWithEditorSpy = vi
|
|
@@ -1416,7 +1442,7 @@ describe('CoreToolScheduler Sequential Execution', () => {
|
|
|
1416
1442
|
], abortController.signal);
|
|
1417
1443
|
const toolCall = scheduler
|
|
1418
1444
|
.toolCalls[0];
|
|
1419
|
-
expect(toolCall.status).toBe(
|
|
1445
|
+
expect(toolCall.status).toBe(CoreToolCallStatus.AwaitingApproval);
|
|
1420
1446
|
const confirmationSignal = new AbortController().signal;
|
|
1421
1447
|
await scheduler.handleConfirmationResponse(toolCall.request.callId, async () => { }, ToolConfirmationOutcome.ModifyWithEditor, confirmationSignal);
|
|
1422
1448
|
expect(modifyWithEditorSpy).toHaveBeenCalled();
|
|
@@ -1427,5 +1453,397 @@ describe('CoreToolScheduler Sequential Execution', () => {
|
|
|
1427
1453
|
});
|
|
1428
1454
|
modifyWithEditorSpy.mockRestore();
|
|
1429
1455
|
});
|
|
1456
|
+
it('should handle inline modify with empty new content', async () => {
|
|
1457
|
+
// Mock the modifiable check to return true for this test
|
|
1458
|
+
const isModifiableSpy = vi
|
|
1459
|
+
.spyOn(modifiableToolModule, 'isModifiableDeclarativeTool')
|
|
1460
|
+
.mockReturnValue(true);
|
|
1461
|
+
const mockTool = new MockModifiableTool();
|
|
1462
|
+
const mockToolRegistry = {
|
|
1463
|
+
getTool: () => mockTool,
|
|
1464
|
+
getAllToolNames: () => [],
|
|
1465
|
+
};
|
|
1466
|
+
const mockConfig = createMockConfig({
|
|
1467
|
+
getToolRegistry: () => mockToolRegistry,
|
|
1468
|
+
isInteractive: () => true,
|
|
1469
|
+
});
|
|
1470
|
+
mockConfig.getHookSystem = vi.fn().mockReturnValue(undefined);
|
|
1471
|
+
const scheduler = new CoreToolScheduler({
|
|
1472
|
+
config: mockConfig,
|
|
1473
|
+
getPreferredEditor: () => 'vscode',
|
|
1474
|
+
});
|
|
1475
|
+
// Manually inject a waiting tool call
|
|
1476
|
+
const callId = 'call-1';
|
|
1477
|
+
const toolCall = {
|
|
1478
|
+
status: CoreToolCallStatus.AwaitingApproval,
|
|
1479
|
+
request: {
|
|
1480
|
+
callId,
|
|
1481
|
+
name: 'mockModifiableTool',
|
|
1482
|
+
args: {},
|
|
1483
|
+
isClientInitiated: false,
|
|
1484
|
+
prompt_id: 'p1',
|
|
1485
|
+
},
|
|
1486
|
+
tool: mockTool,
|
|
1487
|
+
invocation: {},
|
|
1488
|
+
confirmationDetails: {
|
|
1489
|
+
type: 'edit',
|
|
1490
|
+
title: 'Confirm',
|
|
1491
|
+
fileName: 'test.txt',
|
|
1492
|
+
filePath: 'test.txt',
|
|
1493
|
+
fileDiff: 'diff',
|
|
1494
|
+
originalContent: 'old',
|
|
1495
|
+
newContent: 'new',
|
|
1496
|
+
onConfirm: async () => { },
|
|
1497
|
+
},
|
|
1498
|
+
startTime: Date.now(),
|
|
1499
|
+
};
|
|
1500
|
+
const schedulerInternals = scheduler;
|
|
1501
|
+
schedulerInternals.toolCalls = [toolCall];
|
|
1502
|
+
const applyInlineModifySpy = vi
|
|
1503
|
+
.spyOn(schedulerInternals.toolModifier, 'applyInlineModify')
|
|
1504
|
+
.mockResolvedValue({
|
|
1505
|
+
updatedParams: { content: '' },
|
|
1506
|
+
updatedDiff: 'diff-empty',
|
|
1507
|
+
});
|
|
1508
|
+
await scheduler.handleConfirmationResponse(callId, async () => { }, ToolConfirmationOutcome.ProceedOnce, new AbortController().signal, { newContent: '' });
|
|
1509
|
+
expect(applyInlineModifySpy).toHaveBeenCalled();
|
|
1510
|
+
isModifiableSpy.mockRestore();
|
|
1511
|
+
});
|
|
1512
|
+
it('should pass serverName to policy engine for DiscoveredMCPTool', async () => {
|
|
1513
|
+
const mockMcpTool = {
|
|
1514
|
+
tool: async () => ({ functionDeclarations: [] }),
|
|
1515
|
+
callTool: async () => [],
|
|
1516
|
+
};
|
|
1517
|
+
const serverName = 'test-server';
|
|
1518
|
+
const toolName = 'test-tool';
|
|
1519
|
+
const mcpTool = new DiscoveredMCPTool(mockMcpTool, serverName, toolName, 'description', { type: 'object', properties: {} }, createMockMessageBus());
|
|
1520
|
+
const mockToolRegistry = {
|
|
1521
|
+
getTool: () => mcpTool,
|
|
1522
|
+
getFunctionDeclarations: () => [],
|
|
1523
|
+
tools: new Map(),
|
|
1524
|
+
discovery: {},
|
|
1525
|
+
registerTool: () => { },
|
|
1526
|
+
getToolByName: () => mcpTool,
|
|
1527
|
+
getToolByDisplayName: () => mcpTool,
|
|
1528
|
+
getTools: () => [],
|
|
1529
|
+
discoverTools: async () => { },
|
|
1530
|
+
getAllTools: () => [],
|
|
1531
|
+
getToolsByServer: () => [],
|
|
1532
|
+
};
|
|
1533
|
+
const mockPolicyEngineCheck = vi.fn().mockResolvedValue({
|
|
1534
|
+
decision: PolicyDecision.ALLOW,
|
|
1535
|
+
});
|
|
1536
|
+
const mockConfig = createMockConfig({
|
|
1537
|
+
getToolRegistry: () => mockToolRegistry,
|
|
1538
|
+
getPolicyEngine: () => ({
|
|
1539
|
+
check: mockPolicyEngineCheck,
|
|
1540
|
+
}),
|
|
1541
|
+
isInteractive: () => false,
|
|
1542
|
+
});
|
|
1543
|
+
mockConfig.getHookSystem = vi.fn().mockReturnValue(undefined);
|
|
1544
|
+
const scheduler = new CoreToolScheduler({
|
|
1545
|
+
config: mockConfig,
|
|
1546
|
+
getPreferredEditor: () => 'vscode',
|
|
1547
|
+
});
|
|
1548
|
+
const abortController = new AbortController();
|
|
1549
|
+
const request = {
|
|
1550
|
+
callId: '1',
|
|
1551
|
+
name: toolName,
|
|
1552
|
+
args: {},
|
|
1553
|
+
isClientInitiated: false,
|
|
1554
|
+
prompt_id: 'prompt-id-1',
|
|
1555
|
+
};
|
|
1556
|
+
await scheduler.schedule(request, abortController.signal);
|
|
1557
|
+
expect(mockPolicyEngineCheck).toHaveBeenCalledWith(expect.objectContaining({ name: toolName }), serverName);
|
|
1558
|
+
});
|
|
1559
|
+
it('should not double-report completed tools when concurrent completions occur', async () => {
|
|
1560
|
+
// Arrange
|
|
1561
|
+
const executeFn = vi
|
|
1562
|
+
.fn()
|
|
1563
|
+
.mockResolvedValue({ llmContent: CoreToolCallStatus.Success });
|
|
1564
|
+
const mockTool = new MockTool({ name: 'mockTool', execute: executeFn });
|
|
1565
|
+
const declarativeTool = mockTool;
|
|
1566
|
+
const mockToolRegistry = {
|
|
1567
|
+
getTool: () => declarativeTool,
|
|
1568
|
+
getToolByName: () => declarativeTool,
|
|
1569
|
+
getFunctionDeclarations: () => [],
|
|
1570
|
+
tools: new Map(),
|
|
1571
|
+
discovery: {},
|
|
1572
|
+
registerTool: () => { },
|
|
1573
|
+
getToolByDisplayName: () => declarativeTool,
|
|
1574
|
+
getTools: () => [],
|
|
1575
|
+
discoverTools: async () => { },
|
|
1576
|
+
getAllTools: () => [],
|
|
1577
|
+
getToolsByServer: () => [],
|
|
1578
|
+
};
|
|
1579
|
+
let completionCallCount = 0;
|
|
1580
|
+
const onAllToolCallsComplete = vi.fn().mockImplementation(async () => {
|
|
1581
|
+
completionCallCount++;
|
|
1582
|
+
// Simulate slow reporting (e.g. Gemini API call)
|
|
1583
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
1584
|
+
});
|
|
1585
|
+
const mockConfig = createMockConfig({
|
|
1586
|
+
getToolRegistry: () => mockToolRegistry,
|
|
1587
|
+
getApprovalMode: () => ApprovalMode.YOLO,
|
|
1588
|
+
isInteractive: () => false,
|
|
1589
|
+
});
|
|
1590
|
+
const mockMessageBus = createMockMessageBus();
|
|
1591
|
+
mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
|
|
1592
|
+
mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
|
|
1593
|
+
mockConfig.getHookSystem = vi
|
|
1594
|
+
.fn()
|
|
1595
|
+
.mockReturnValue(new HookSystem(mockConfig));
|
|
1596
|
+
const scheduler = new CoreToolScheduler({
|
|
1597
|
+
config: mockConfig,
|
|
1598
|
+
onAllToolCallsComplete,
|
|
1599
|
+
getPreferredEditor: () => 'vscode',
|
|
1600
|
+
});
|
|
1601
|
+
const abortController = new AbortController();
|
|
1602
|
+
const request = {
|
|
1603
|
+
callId: '1',
|
|
1604
|
+
name: 'mockTool',
|
|
1605
|
+
args: {},
|
|
1606
|
+
isClientInitiated: false,
|
|
1607
|
+
prompt_id: 'prompt-1',
|
|
1608
|
+
};
|
|
1609
|
+
// Act
|
|
1610
|
+
// 1. Start execution
|
|
1611
|
+
const schedulePromise = scheduler.schedule([request], abortController.signal);
|
|
1612
|
+
// 2. Wait just enough for it to finish and enter checkAndNotifyCompletion
|
|
1613
|
+
// (awaiting our slow mock)
|
|
1614
|
+
await vi.waitFor(() => {
|
|
1615
|
+
expect(completionCallCount).toBe(1);
|
|
1616
|
+
});
|
|
1617
|
+
// 3. Trigger a concurrent completion event (e.g. via cancelAll)
|
|
1618
|
+
scheduler.cancelAll(abortController.signal);
|
|
1619
|
+
await schedulePromise;
|
|
1620
|
+
// Assert
|
|
1621
|
+
// Even though cancelAll was called while the first completion was in progress,
|
|
1622
|
+
// it should not have triggered a SECOND completion call because the first one
|
|
1623
|
+
// was still 'finalizing' and will drain any new tools.
|
|
1624
|
+
expect(onAllToolCallsComplete).toHaveBeenCalledTimes(1);
|
|
1625
|
+
});
|
|
1626
|
+
it('should complete reporting all tools even mid-callback during abort', async () => {
|
|
1627
|
+
// Arrange
|
|
1628
|
+
const onAllToolCallsComplete = vi.fn().mockImplementation(async () => {
|
|
1629
|
+
// Simulate slow reporting
|
|
1630
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
1631
|
+
});
|
|
1632
|
+
const mockTool = new MockTool({ name: 'mockTool' });
|
|
1633
|
+
const mockToolRegistry = {
|
|
1634
|
+
getTool: () => mockTool,
|
|
1635
|
+
getToolByName: () => mockTool,
|
|
1636
|
+
getFunctionDeclarations: () => [],
|
|
1637
|
+
tools: new Map(),
|
|
1638
|
+
discovery: {},
|
|
1639
|
+
registerTool: () => { },
|
|
1640
|
+
getToolByDisplayName: () => mockTool,
|
|
1641
|
+
getTools: () => [],
|
|
1642
|
+
discoverTools: async () => { },
|
|
1643
|
+
getAllTools: () => [],
|
|
1644
|
+
getToolsByServer: () => [],
|
|
1645
|
+
};
|
|
1646
|
+
const mockConfig = createMockConfig({
|
|
1647
|
+
getToolRegistry: () => mockToolRegistry,
|
|
1648
|
+
getApprovalMode: () => ApprovalMode.YOLO,
|
|
1649
|
+
isInteractive: () => false,
|
|
1650
|
+
});
|
|
1651
|
+
mockConfig.getHookSystem = vi.fn().mockReturnValue(undefined);
|
|
1652
|
+
const scheduler = new CoreToolScheduler({
|
|
1653
|
+
config: mockConfig,
|
|
1654
|
+
onAllToolCallsComplete,
|
|
1655
|
+
getPreferredEditor: () => 'vscode',
|
|
1656
|
+
});
|
|
1657
|
+
const abortController = new AbortController();
|
|
1658
|
+
const signal = abortController.signal;
|
|
1659
|
+
// Act
|
|
1660
|
+
// 1. Start execution of two tools
|
|
1661
|
+
const schedulePromise = scheduler.schedule([
|
|
1662
|
+
{
|
|
1663
|
+
callId: '1',
|
|
1664
|
+
name: 'mockTool',
|
|
1665
|
+
args: {},
|
|
1666
|
+
isClientInitiated: false,
|
|
1667
|
+
prompt_id: 'prompt-1',
|
|
1668
|
+
},
|
|
1669
|
+
{
|
|
1670
|
+
callId: '2',
|
|
1671
|
+
name: 'mockTool',
|
|
1672
|
+
args: {},
|
|
1673
|
+
isClientInitiated: false,
|
|
1674
|
+
prompt_id: 'prompt-1',
|
|
1675
|
+
},
|
|
1676
|
+
], signal);
|
|
1677
|
+
// 2. Wait for reporting to start
|
|
1678
|
+
await vi.waitFor(() => {
|
|
1679
|
+
expect(onAllToolCallsComplete).toHaveBeenCalled();
|
|
1680
|
+
});
|
|
1681
|
+
// 3. Abort the signal while reporting is in progress
|
|
1682
|
+
abortController.abort();
|
|
1683
|
+
await schedulePromise;
|
|
1684
|
+
// Assert
|
|
1685
|
+
// Verify that onAllToolCallsComplete was called and processed the tools,
|
|
1686
|
+
// and that the scheduler didn't just drop them because of the abort.
|
|
1687
|
+
expect(onAllToolCallsComplete).toHaveBeenCalled();
|
|
1688
|
+
const reportedTools = onAllToolCallsComplete.mock.calls.flatMap((call) =>
|
|
1689
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1690
|
+
call[0].map((t) => t.request.callId));
|
|
1691
|
+
// Both tools should have been reported exactly once with success status
|
|
1692
|
+
expect(reportedTools).toContain('1');
|
|
1693
|
+
expect(reportedTools).toContain('2');
|
|
1694
|
+
const allStatuses = onAllToolCallsComplete.mock.calls.flatMap((call) =>
|
|
1695
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1696
|
+
call[0].map((t) => t.status));
|
|
1697
|
+
expect(allStatuses).toEqual([
|
|
1698
|
+
CoreToolCallStatus.Success,
|
|
1699
|
+
CoreToolCallStatus.Success,
|
|
1700
|
+
]);
|
|
1701
|
+
expect(onAllToolCallsComplete).toHaveBeenCalledTimes(1);
|
|
1702
|
+
});
|
|
1703
|
+
describe('Policy Decisions in Plan Mode', () => {
|
|
1704
|
+
it('should return POLICY_VIOLATION error type and informative message when denied in Plan Mode', async () => {
|
|
1705
|
+
const mockTool = new MockTool({
|
|
1706
|
+
name: 'dangerous_tool',
|
|
1707
|
+
displayName: 'Dangerous Tool',
|
|
1708
|
+
description: 'Does risky stuff',
|
|
1709
|
+
});
|
|
1710
|
+
const mockToolRegistry = {
|
|
1711
|
+
getTool: () => mockTool,
|
|
1712
|
+
getAllToolNames: () => ['dangerous_tool'],
|
|
1713
|
+
};
|
|
1714
|
+
const onAllToolCallsComplete = vi.fn();
|
|
1715
|
+
const mockConfig = createMockConfig({
|
|
1716
|
+
getToolRegistry: () => mockToolRegistry,
|
|
1717
|
+
getApprovalMode: () => ApprovalMode.PLAN,
|
|
1718
|
+
getPolicyEngine: () => ({
|
|
1719
|
+
check: async () => ({ decision: PolicyDecision.DENY }),
|
|
1720
|
+
}),
|
|
1721
|
+
});
|
|
1722
|
+
mockConfig.getHookSystem = vi.fn().mockReturnValue(undefined);
|
|
1723
|
+
const scheduler = new CoreToolScheduler({
|
|
1724
|
+
config: mockConfig,
|
|
1725
|
+
onAllToolCallsComplete,
|
|
1726
|
+
getPreferredEditor: () => 'vscode',
|
|
1727
|
+
});
|
|
1728
|
+
const request = {
|
|
1729
|
+
callId: 'call-1',
|
|
1730
|
+
name: 'dangerous_tool',
|
|
1731
|
+
args: {},
|
|
1732
|
+
isClientInitiated: false,
|
|
1733
|
+
prompt_id: 'prompt-1',
|
|
1734
|
+
};
|
|
1735
|
+
await scheduler.schedule(request, new AbortController().signal);
|
|
1736
|
+
expect(onAllToolCallsComplete).toHaveBeenCalledTimes(1);
|
|
1737
|
+
const reportedTools = onAllToolCallsComplete.mock.calls[0][0];
|
|
1738
|
+
const result = reportedTools[0];
|
|
1739
|
+
expect(result.status).toBe(CoreToolCallStatus.Error);
|
|
1740
|
+
expect(result.response.errorType).toBe(ToolErrorType.POLICY_VIOLATION);
|
|
1741
|
+
expect(result.response.error.message).toBe('Tool execution denied by policy.');
|
|
1742
|
+
});
|
|
1743
|
+
it('should return custom deny message when denied in Plan Mode with a specific rule message', async () => {
|
|
1744
|
+
const mockTool = new MockTool({
|
|
1745
|
+
name: 'dangerous_tool',
|
|
1746
|
+
displayName: 'Dangerous Tool',
|
|
1747
|
+
description: 'Does risky stuff',
|
|
1748
|
+
});
|
|
1749
|
+
const mockToolRegistry = {
|
|
1750
|
+
getTool: () => mockTool,
|
|
1751
|
+
getAllToolNames: () => ['dangerous_tool'],
|
|
1752
|
+
};
|
|
1753
|
+
const onAllToolCallsComplete = vi.fn();
|
|
1754
|
+
const customDenyMessage = 'Custom denial message for testing';
|
|
1755
|
+
const mockConfig = createMockConfig({
|
|
1756
|
+
getToolRegistry: () => mockToolRegistry,
|
|
1757
|
+
getApprovalMode: () => ApprovalMode.PLAN,
|
|
1758
|
+
getPolicyEngine: () => ({
|
|
1759
|
+
check: async () => ({
|
|
1760
|
+
decision: PolicyDecision.DENY,
|
|
1761
|
+
rule: { denyMessage: customDenyMessage },
|
|
1762
|
+
}),
|
|
1763
|
+
}),
|
|
1764
|
+
});
|
|
1765
|
+
mockConfig.getHookSystem = vi.fn().mockReturnValue(undefined);
|
|
1766
|
+
const scheduler = new CoreToolScheduler({
|
|
1767
|
+
config: mockConfig,
|
|
1768
|
+
onAllToolCallsComplete,
|
|
1769
|
+
getPreferredEditor: () => 'vscode',
|
|
1770
|
+
});
|
|
1771
|
+
const request = {
|
|
1772
|
+
callId: 'call-1',
|
|
1773
|
+
name: 'dangerous_tool',
|
|
1774
|
+
args: {},
|
|
1775
|
+
isClientInitiated: false,
|
|
1776
|
+
prompt_id: 'prompt-1',
|
|
1777
|
+
};
|
|
1778
|
+
await scheduler.schedule(request, new AbortController().signal);
|
|
1779
|
+
expect(onAllToolCallsComplete).toHaveBeenCalledTimes(1);
|
|
1780
|
+
const reportedTools = onAllToolCallsComplete.mock.calls[0][0];
|
|
1781
|
+
const result = reportedTools[0];
|
|
1782
|
+
expect(result.status).toBe(CoreToolCallStatus.Error);
|
|
1783
|
+
expect(result.response.errorType).toBe(ToolErrorType.POLICY_VIOLATION);
|
|
1784
|
+
expect(result.response.error.message).toBe(`Tool execution denied by policy. ${customDenyMessage}`);
|
|
1785
|
+
});
|
|
1786
|
+
});
|
|
1787
|
+
describe('ApprovalMode Preservation', () => {
|
|
1788
|
+
it('should preserve approvalMode throughout tool lifecycle', async () => {
|
|
1789
|
+
// Arrange
|
|
1790
|
+
const executeFn = vi.fn().mockResolvedValue({
|
|
1791
|
+
llmContent: 'Tool executed',
|
|
1792
|
+
returnDisplay: 'Tool executed',
|
|
1793
|
+
});
|
|
1794
|
+
const mockTool = new MockTool({
|
|
1795
|
+
name: 'mockTool',
|
|
1796
|
+
execute: executeFn,
|
|
1797
|
+
shouldConfirmExecute: MOCK_TOOL_SHOULD_CONFIRM_EXECUTE,
|
|
1798
|
+
});
|
|
1799
|
+
const mockToolRegistry = {
|
|
1800
|
+
getTool: () => mockTool,
|
|
1801
|
+
getAllToolNames: () => ['mockTool'],
|
|
1802
|
+
};
|
|
1803
|
+
const onAllToolCallsComplete = vi.fn();
|
|
1804
|
+
const onToolCallsUpdate = vi.fn();
|
|
1805
|
+
// Set approval mode to PLAN
|
|
1806
|
+
const mockConfig = createMockConfig({
|
|
1807
|
+
getToolRegistry: () => mockToolRegistry,
|
|
1808
|
+
getApprovalMode: () => ApprovalMode.PLAN,
|
|
1809
|
+
// Ensure policy engine returns ASK_USER to trigger AwaitingApproval state
|
|
1810
|
+
getPolicyEngine: () => ({
|
|
1811
|
+
check: async () => ({ decision: PolicyDecision.ASK_USER }),
|
|
1812
|
+
}),
|
|
1813
|
+
});
|
|
1814
|
+
mockConfig.getHookSystem = vi.fn().mockReturnValue(undefined);
|
|
1815
|
+
const scheduler = new CoreToolScheduler({
|
|
1816
|
+
config: mockConfig,
|
|
1817
|
+
onAllToolCallsComplete,
|
|
1818
|
+
onToolCallsUpdate,
|
|
1819
|
+
getPreferredEditor: () => 'vscode',
|
|
1820
|
+
});
|
|
1821
|
+
const abortController = new AbortController();
|
|
1822
|
+
const request = {
|
|
1823
|
+
callId: '1',
|
|
1824
|
+
name: 'mockTool',
|
|
1825
|
+
args: { param: 'value' },
|
|
1826
|
+
isClientInitiated: false,
|
|
1827
|
+
prompt_id: 'test-prompt',
|
|
1828
|
+
};
|
|
1829
|
+
// Act - Schedule
|
|
1830
|
+
const schedulePromise = scheduler.schedule(request, abortController.signal);
|
|
1831
|
+
// Assert - Check AwaitingApproval state
|
|
1832
|
+
const awaitingCall = (await waitForStatus(onToolCallsUpdate, CoreToolCallStatus.AwaitingApproval));
|
|
1833
|
+
expect(awaitingCall).toBeDefined();
|
|
1834
|
+
expect(awaitingCall.approvalMode).toBe(ApprovalMode.PLAN);
|
|
1835
|
+
// Act - Confirm
|
|
1836
|
+
await awaitingCall.confirmationDetails.onConfirm(ToolConfirmationOutcome.ProceedOnce);
|
|
1837
|
+
// Wait for completion
|
|
1838
|
+
await schedulePromise;
|
|
1839
|
+
// Assert - Check Success state
|
|
1840
|
+
expect(onAllToolCallsComplete).toHaveBeenCalled();
|
|
1841
|
+
const completedCalls = onAllToolCallsComplete.mock
|
|
1842
|
+
.calls[0][0];
|
|
1843
|
+
expect(completedCalls).toHaveLength(1);
|
|
1844
|
+
expect(completedCalls[0].status).toBe(CoreToolCallStatus.Success);
|
|
1845
|
+
expect(completedCalls[0].approvalMode).toBe(ApprovalMode.PLAN);
|
|
1846
|
+
});
|
|
1847
|
+
});
|
|
1430
1848
|
});
|
|
1431
1849
|
//# sourceMappingURL=coreToolScheduler.test.js.map
|