@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
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license
|
|
3
|
-
* Copyright
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
import * as fs from 'node:fs';
|
|
6
7
|
import * as path from 'node:path';
|
|
8
|
+
import * as os from 'node:os';
|
|
7
9
|
import { inspect } from 'node:util';
|
|
8
10
|
import process from 'node:process';
|
|
9
11
|
import { AuthType, createContentGenerator, createContentGeneratorConfig, } from '../core/contentGenerator.js';
|
|
@@ -22,20 +24,23 @@ import { WriteFileTool } from '../tools/write-file.js';
|
|
|
22
24
|
import { WebFetchTool } from '../tools/web-fetch.js';
|
|
23
25
|
import { MemoryTool, setGeminiMdFilename } from '../tools/memoryTool.js';
|
|
24
26
|
import { WebSearchTool } from '../tools/web-search.js';
|
|
27
|
+
import { AskUserTool } from '../tools/ask-user.js';
|
|
28
|
+
import { ExitPlanModeTool } from '../tools/exit-plan-mode.js';
|
|
29
|
+
import { EnterPlanModeTool } from '../tools/enter-plan-mode.js';
|
|
25
30
|
import { GeminiClient } from '../core/client.js';
|
|
26
31
|
import { BaseLlmClient } from '../core/baseLlmClient.js';
|
|
27
32
|
import { FileDiscoveryService } from '../services/fileDiscoveryService.js';
|
|
28
33
|
import { GitService } from '../services/gitService.js';
|
|
29
34
|
import { initializeTelemetry, DEFAULT_TELEMETRY_TARGET, DEFAULT_OTLP_ENDPOINT, uiTelemetryService, } from '../telemetry/index.js';
|
|
30
|
-
import { coreEvents } from '../utils/events.js';
|
|
35
|
+
import { coreEvents, CoreEvent } from '../utils/events.js';
|
|
31
36
|
import { tokenLimit } from '../core/tokenLimits.js';
|
|
32
|
-
import { DEFAULT_GEMINI_EMBEDDING_MODEL, DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_MODEL_AUTO,
|
|
37
|
+
import { DEFAULT_GEMINI_EMBEDDING_MODEL, DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_MODEL, DEFAULT_GEMINI_MODEL_AUTO, isAutoModel, isPreviewModel, PREVIEW_GEMINI_FLASH_MODEL, PREVIEW_GEMINI_MODEL, PREVIEW_GEMINI_MODEL_AUTO, resolveModel, } from './models.js';
|
|
33
38
|
import { shouldAttemptBrowserLaunch } from '../utils/browser.js';
|
|
34
39
|
import { ideContextStore } from '../ide/ideContext.js';
|
|
35
40
|
import { WriteTodosTool } from '../tools/write-todos.js';
|
|
36
41
|
import { StandardFileSystemService } from '../services/fileSystemService.js';
|
|
37
42
|
import { logRipgrepFallback, logFlashFallback } from '../telemetry/loggers.js';
|
|
38
|
-
import { RipgrepFallbackEvent, FlashFallbackEvent, } from '../telemetry/types.js';
|
|
43
|
+
import { RipgrepFallbackEvent, FlashFallbackEvent, ApprovalModeSwitchEvent, ApprovalModeDurationEvent, } from '../telemetry/types.js';
|
|
39
44
|
import { ModelAvailabilityService } from '../availability/modelAvailabilityService.js';
|
|
40
45
|
import { ModelRouterService } from '../routing/modelRouterService.js';
|
|
41
46
|
import { OutputFormat } from '../output/types.js';
|
|
@@ -47,24 +52,29 @@ import { Storage } from './storage.js';
|
|
|
47
52
|
import { FileExclusions } from '../utils/ignorePatterns.js';
|
|
48
53
|
import { MessageBus } from '../confirmation-bus/message-bus.js';
|
|
49
54
|
import { PolicyEngine } from '../policy/policy-engine.js';
|
|
55
|
+
import { ApprovalMode } from '../policy/types.js';
|
|
50
56
|
import { HookSystem } from '../hooks/index.js';
|
|
51
57
|
import { getCodeAssistServer } from '../code_assist/codeAssist.js';
|
|
52
58
|
import { AgentRegistry } from '../agents/registry.js';
|
|
59
|
+
import { AcknowledgedAgentsService } from '../agents/acknowledgedAgents.js';
|
|
53
60
|
import { setGlobalProxy } from '../utils/fetch.js';
|
|
54
|
-
import {
|
|
55
|
-
import { DELEGATE_TO_AGENT_TOOL_NAME } from '../tools/tool-names.js';
|
|
61
|
+
import { SubagentTool } from '../agents/subagent-tool.js';
|
|
56
62
|
import { getExperiments } from '../code_assist/experiments/experiments.js';
|
|
57
63
|
import { ExperimentFlags } from '../code_assist/experiments/flagNames.js';
|
|
58
64
|
import { debugLogger } from '../utils/debugLogger.js';
|
|
59
65
|
import { SkillManager } from '../skills/skillManager.js';
|
|
60
66
|
import { startupProfiler } from '../telemetry/startupProfiler.js';
|
|
61
|
-
import {
|
|
67
|
+
import { logApprovalModeSwitch, logApprovalModeDuration, } from '../telemetry/loggers.js';
|
|
68
|
+
import { fetchAdminControls } from '../code_assist/admin/admin_controls.js';
|
|
69
|
+
import { isSubpath } from '../utils/paths.js';
|
|
62
70
|
import { DEFAULT_FILE_FILTERING_OPTIONS, DEFAULT_MEMORY_FILE_FILTERING_OPTIONS, } from './constants.js';
|
|
71
|
+
import { DEFAULT_TOOL_PROTECTION_THRESHOLD, DEFAULT_MIN_PRUNABLE_TOKENS_THRESHOLD, DEFAULT_PROTECT_LATEST_TURN, } from '../services/toolOutputMaskingService.js';
|
|
63
72
|
import { SimpleExtensionLoader, } from '../utils/extensionLoader.js';
|
|
64
73
|
import { McpClientManager } from '../tools/mcp-client-manager.js';
|
|
74
|
+
import { getErrorMessage } from '../utils/errors.js';
|
|
75
|
+
import { ENTER_PLAN_MODE_TOOL_NAME, EXIT_PLAN_MODE_TOOL_NAME, } from '../tools/tool-names.js';
|
|
65
76
|
export { DEFAULT_FILE_FILTERING_OPTIONS, DEFAULT_MEMORY_FILE_FILTERING_OPTIONS, };
|
|
66
|
-
export const DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD =
|
|
67
|
-
export const DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES = 1000;
|
|
77
|
+
export const DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD = 40_000;
|
|
68
78
|
export class MCPServerConfig {
|
|
69
79
|
command;
|
|
70
80
|
args;
|
|
@@ -149,8 +159,10 @@ export class Config {
|
|
|
149
159
|
promptRegistry;
|
|
150
160
|
resourceRegistry;
|
|
151
161
|
agentRegistry;
|
|
162
|
+
acknowledgedAgentsService;
|
|
152
163
|
skillManager;
|
|
153
164
|
sessionId;
|
|
165
|
+
clientVersion;
|
|
154
166
|
fileSystemService;
|
|
155
167
|
contentGeneratorConfig;
|
|
156
168
|
contentGenerator;
|
|
@@ -162,13 +174,17 @@ export class Config {
|
|
|
162
174
|
debugMode;
|
|
163
175
|
question;
|
|
164
176
|
coreTools;
|
|
177
|
+
/** @deprecated Use Policy Engine instead */
|
|
165
178
|
allowedTools;
|
|
179
|
+
/** @deprecated Use Policy Engine instead */
|
|
166
180
|
excludeTools;
|
|
167
181
|
toolDiscoveryCommand;
|
|
168
182
|
toolCallCommand;
|
|
169
183
|
mcpServerCommand;
|
|
170
184
|
mcpEnabled;
|
|
185
|
+
extensionsEnabled;
|
|
171
186
|
mcpServers;
|
|
187
|
+
mcpEnablementCallbacks;
|
|
172
188
|
userMemory;
|
|
173
189
|
geminiMdFileCount;
|
|
174
190
|
geminiMdFilePaths;
|
|
@@ -188,7 +204,7 @@ export class Config {
|
|
|
188
204
|
cwd;
|
|
189
205
|
bugCommand;
|
|
190
206
|
model;
|
|
191
|
-
|
|
207
|
+
disableLoopDetection;
|
|
192
208
|
hasAccessToPreviewModel = false;
|
|
193
209
|
noBrowser;
|
|
194
210
|
folderTrust;
|
|
@@ -202,26 +218,44 @@ export class Config {
|
|
|
202
218
|
_enabledExtensions;
|
|
203
219
|
enableExtensionReloading;
|
|
204
220
|
fallbackModelHandler;
|
|
221
|
+
validationHandler;
|
|
205
222
|
quotaErrorOccurred = false;
|
|
223
|
+
modelQuotas = new Map();
|
|
224
|
+
lastRetrievedQuota;
|
|
225
|
+
lastQuotaFetchTime = 0;
|
|
226
|
+
lastEmittedQuotaRemaining;
|
|
227
|
+
lastEmittedQuotaLimit;
|
|
228
|
+
emitQuotaChangedEvent() {
|
|
229
|
+
const pooled = this.getPooledQuota();
|
|
230
|
+
if (this.lastEmittedQuotaRemaining !== pooled.remaining ||
|
|
231
|
+
this.lastEmittedQuotaLimit !== pooled.limit) {
|
|
232
|
+
this.lastEmittedQuotaRemaining = pooled.remaining;
|
|
233
|
+
this.lastEmittedQuotaLimit = pooled.limit;
|
|
234
|
+
coreEvents.emitQuotaChanged(pooled.remaining, pooled.limit, pooled.resetTime);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
206
237
|
summarizeToolOutput;
|
|
207
238
|
experimentalZedIntegration = false;
|
|
208
239
|
loadMemoryFromIncludeDirectories = false;
|
|
240
|
+
includeDirectoryTree = true;
|
|
209
241
|
importFormat;
|
|
210
242
|
discoveryMaxDirs;
|
|
211
243
|
compressionThreshold;
|
|
244
|
+
/** Public for testing only */
|
|
212
245
|
interactive;
|
|
213
246
|
ptyInfo;
|
|
214
247
|
trustedFolder;
|
|
215
248
|
useRipgrep;
|
|
216
249
|
enableInteractiveShell;
|
|
217
250
|
skipNextSpeakerCheck;
|
|
251
|
+
useBackgroundColor;
|
|
218
252
|
shellExecutionConfig;
|
|
219
253
|
extensionManagement = true;
|
|
220
254
|
enablePromptCompletion = false;
|
|
221
255
|
truncateToolOutputThreshold;
|
|
222
|
-
|
|
223
|
-
enableToolOutputTruncation;
|
|
256
|
+
compressionTruncationCounter = 0;
|
|
224
257
|
initialized = false;
|
|
258
|
+
initPromise;
|
|
225
259
|
storage;
|
|
226
260
|
fileExclusions;
|
|
227
261
|
eventEmitter;
|
|
@@ -229,8 +263,6 @@ export class Config {
|
|
|
229
263
|
messageBus;
|
|
230
264
|
policyEngine;
|
|
231
265
|
outputSettings;
|
|
232
|
-
codebaseInvestigatorSettings;
|
|
233
|
-
introspectionAgentSettings;
|
|
234
266
|
continueOnFailedApiCall;
|
|
235
267
|
retryFetchErrors;
|
|
236
268
|
enableShellOutputEfficiency;
|
|
@@ -238,8 +270,12 @@ export class Config {
|
|
|
238
270
|
fakeResponses;
|
|
239
271
|
recordResponses;
|
|
240
272
|
disableYoloMode;
|
|
273
|
+
rawOutput;
|
|
274
|
+
acceptRawOutputRisk;
|
|
241
275
|
pendingIncludeDirectories;
|
|
242
276
|
enableHooks;
|
|
277
|
+
enableHooksUI;
|
|
278
|
+
toolOutputMasking;
|
|
243
279
|
hooks;
|
|
244
280
|
projectHooks;
|
|
245
281
|
disabledHooks;
|
|
@@ -249,14 +285,24 @@ export class Config {
|
|
|
249
285
|
onModelChange;
|
|
250
286
|
onReload;
|
|
251
287
|
enableAgents;
|
|
288
|
+
agents;
|
|
289
|
+
enableEventDrivenScheduler;
|
|
252
290
|
skillsSupport;
|
|
253
291
|
disabledSkills;
|
|
292
|
+
adminSkillsEnabled;
|
|
254
293
|
experimentalJitContext;
|
|
294
|
+
disableLLMCorrection;
|
|
295
|
+
planEnabled;
|
|
255
296
|
contextManager;
|
|
256
297
|
terminalBackground = undefined;
|
|
257
298
|
remoteAdminSettings;
|
|
299
|
+
latestApiRequest;
|
|
300
|
+
lastModeSwitchTime = Date.now();
|
|
301
|
+
approvedPlanPath;
|
|
258
302
|
constructor(params) {
|
|
259
303
|
this.sessionId = params.sessionId;
|
|
304
|
+
this.clientVersion = params.clientVersion ?? 'unknown';
|
|
305
|
+
this.approvedPlanPath = undefined;
|
|
260
306
|
this.embeddingModel =
|
|
261
307
|
params.embeddingModel ?? DEFAULT_GEMINI_EMBEDDING_MODEL;
|
|
262
308
|
this.fileSystemService = new StandardFileSystemService();
|
|
@@ -274,7 +320,9 @@ export class Config {
|
|
|
274
320
|
this.toolCallCommand = params.toolCallCommand;
|
|
275
321
|
this.mcpServerCommand = params.mcpServerCommand;
|
|
276
322
|
this.mcpServers = params.mcpServers;
|
|
323
|
+
this.mcpEnablementCallbacks = params.mcpEnablementCallbacks;
|
|
277
324
|
this.mcpEnabled = params.mcpEnabled ?? true;
|
|
325
|
+
this.extensionsEnabled = params.extensionsEnabled ?? true;
|
|
278
326
|
this.allowedMcpServers = params.allowedMcpServers ?? [];
|
|
279
327
|
this.blockedMcpServers = params.blockedMcpServers ?? [];
|
|
280
328
|
this.allowedEnvironmentVariables = params.allowedEnvironmentVariables ?? [];
|
|
@@ -303,7 +351,14 @@ export class Config {
|
|
|
303
351
|
respectGeminiIgnore: params.fileFiltering?.respectGeminiIgnore ??
|
|
304
352
|
DEFAULT_FILE_FILTERING_OPTIONS.respectGeminiIgnore,
|
|
305
353
|
enableRecursiveFileSearch: params.fileFiltering?.enableRecursiveFileSearch ?? true,
|
|
306
|
-
|
|
354
|
+
enableFuzzySearch: params.fileFiltering?.enableFuzzySearch ?? true,
|
|
355
|
+
maxFileCount: params.fileFiltering?.maxFileCount ??
|
|
356
|
+
DEFAULT_FILE_FILTERING_OPTIONS.maxFileCount ??
|
|
357
|
+
20000,
|
|
358
|
+
searchTimeout: params.fileFiltering?.searchTimeout ??
|
|
359
|
+
DEFAULT_FILE_FILTERING_OPTIONS.searchTimeout ??
|
|
360
|
+
5000,
|
|
361
|
+
customIgnoreFilePaths: params.fileFiltering?.customIgnoreFilePaths ?? [],
|
|
307
362
|
};
|
|
308
363
|
this.checkpointing = params.checkpointing ?? false;
|
|
309
364
|
this.proxy = params.proxy;
|
|
@@ -311,13 +366,27 @@ export class Config {
|
|
|
311
366
|
this.fileDiscoveryService = params.fileDiscoveryService ?? null;
|
|
312
367
|
this.bugCommand = params.bugCommand;
|
|
313
368
|
this.model = params.model;
|
|
369
|
+
this.disableLoopDetection = params.disableLoopDetection ?? false;
|
|
314
370
|
this._activeModel = params.model;
|
|
315
371
|
this.enableAgents = params.enableAgents ?? false;
|
|
316
|
-
this.
|
|
372
|
+
this.agents = params.agents ?? {};
|
|
373
|
+
this.disableLLMCorrection = params.disableLLMCorrection ?? true;
|
|
374
|
+
this.planEnabled = params.plan ?? false;
|
|
375
|
+
this.enableEventDrivenScheduler = params.enableEventDrivenScheduler ?? true;
|
|
376
|
+
this.skillsSupport = params.skillsSupport ?? true;
|
|
317
377
|
this.disabledSkills = params.disabledSkills ?? [];
|
|
378
|
+
this.adminSkillsEnabled = params.adminSkillsEnabled ?? true;
|
|
318
379
|
this.modelAvailabilityService = new ModelAvailabilityService();
|
|
319
|
-
this.previewFeatures = params.previewFeatures ?? undefined;
|
|
320
380
|
this.experimentalJitContext = params.experimentalJitContext ?? false;
|
|
381
|
+
this.toolOutputMasking = {
|
|
382
|
+
enabled: params.toolOutputMasking?.enabled ?? true,
|
|
383
|
+
toolProtectionThreshold: params.toolOutputMasking?.toolProtectionThreshold ??
|
|
384
|
+
DEFAULT_TOOL_PROTECTION_THRESHOLD,
|
|
385
|
+
minPrunableTokensThreshold: params.toolOutputMasking?.minPrunableTokensThreshold ??
|
|
386
|
+
DEFAULT_MIN_PRUNABLE_TOKENS_THRESHOLD,
|
|
387
|
+
protectLatestTurn: params.toolOutputMasking?.protectLatestTurn ??
|
|
388
|
+
DEFAULT_PROTECT_LATEST_TURN,
|
|
389
|
+
};
|
|
321
390
|
this.maxSessionTurns = params.maxSessionTurns ?? -1;
|
|
322
391
|
this.experimentalZedIntegration =
|
|
323
392
|
params.experimentalZedIntegration ?? false;
|
|
@@ -331,6 +400,7 @@ export class Config {
|
|
|
331
400
|
this.summarizeToolOutput = params.summarizeToolOutput;
|
|
332
401
|
this.folderTrust = params.folderTrust ?? false;
|
|
333
402
|
this.ideMode = params.ideMode ?? false;
|
|
403
|
+
this.includeDirectoryTree = params.includeDirectoryTree ?? true;
|
|
334
404
|
this.loadMemoryFromIncludeDirectories =
|
|
335
405
|
params.loadMemoryFromIncludeDirectories ?? false;
|
|
336
406
|
this.importFormat = params.importFormat ?? 'tree';
|
|
@@ -340,6 +410,7 @@ export class Config {
|
|
|
340
410
|
this.ptyInfo = params.ptyInfo ?? 'child_process';
|
|
341
411
|
this.trustedFolder = params.trustedFolder;
|
|
342
412
|
this.useRipgrep = params.useRipgrep ?? true;
|
|
413
|
+
this.useBackgroundColor = params.useBackgroundColor ?? true;
|
|
343
414
|
this.enableInteractiveShell = params.enableInteractiveShell ?? false;
|
|
344
415
|
this.skipNextSpeakerCheck = params.skipNextSpeakerCheck ?? true;
|
|
345
416
|
this.shellExecutionConfig = {
|
|
@@ -352,29 +423,13 @@ export class Config {
|
|
|
352
423
|
this.truncateToolOutputThreshold =
|
|
353
424
|
params.truncateToolOutputThreshold ??
|
|
354
425
|
DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD;
|
|
355
|
-
this.truncateToolOutputLines =
|
|
356
|
-
params.truncateToolOutputLines ?? DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES;
|
|
357
|
-
this.enableToolOutputTruncation = params.enableToolOutputTruncation ?? true;
|
|
358
426
|
// // TODO(joshualitt): Re-evaluate the todo tool for 3 family.
|
|
359
427
|
this.useWriteTodos = isPreviewModel(this.model)
|
|
360
428
|
? false
|
|
361
429
|
: (params.useWriteTodos ?? true);
|
|
362
|
-
this.
|
|
363
|
-
this.
|
|
364
|
-
|
|
365
|
-
? params.hooks.disabled
|
|
366
|
-
: undefined) ?? [];
|
|
367
|
-
this.codebaseInvestigatorSettings = {
|
|
368
|
-
enabled: params.codebaseInvestigatorSettings?.enabled ?? true,
|
|
369
|
-
maxNumTurns: params.codebaseInvestigatorSettings?.maxNumTurns ?? 10,
|
|
370
|
-
maxTimeMinutes: params.codebaseInvestigatorSettings?.maxTimeMinutes ?? 3,
|
|
371
|
-
thinkingBudget: params.codebaseInvestigatorSettings?.thinkingBudget ??
|
|
372
|
-
DEFAULT_THINKING_MODE,
|
|
373
|
-
model: params.codebaseInvestigatorSettings?.model,
|
|
374
|
-
};
|
|
375
|
-
this.introspectionAgentSettings = {
|
|
376
|
-
enabled: params.introspectionAgentSettings?.enabled ?? false,
|
|
377
|
-
};
|
|
430
|
+
this.enableHooksUI = params.enableHooksUI ?? true;
|
|
431
|
+
this.enableHooks = params.enableHooks ?? true;
|
|
432
|
+
this.disabledHooks = params.disabledHooks ?? [];
|
|
378
433
|
this.continueOnFailedApiCall = params.continueOnFailedApiCall ?? true;
|
|
379
434
|
this.enableShellOutputEfficiency =
|
|
380
435
|
params.enableShellOutputEfficiency ?? true;
|
|
@@ -382,7 +437,7 @@ export class Config {
|
|
|
382
437
|
(params.shellToolInactivityTimeout ?? 300) * 1000; // 5 minutes
|
|
383
438
|
this.extensionManagement = params.extensionManagement ?? true;
|
|
384
439
|
this.enableExtensionReloading = params.enableExtensionReloading ?? false;
|
|
385
|
-
this.storage = new Storage(this.targetDir);
|
|
440
|
+
this.storage = new Storage(this.targetDir, this.sessionId);
|
|
386
441
|
this.fakeResponses = params.fakeResponses;
|
|
387
442
|
this.recordResponses = params.recordResponses;
|
|
388
443
|
this.enablePromptCompletion = params.enablePromptCompletion ?? false;
|
|
@@ -393,14 +448,21 @@ export class Config {
|
|
|
393
448
|
approvalMode: params.approvalMode ?? params.policyEngineConfig?.approvalMode,
|
|
394
449
|
});
|
|
395
450
|
this.messageBus = new MessageBus(this.policyEngine, this.debugMode);
|
|
451
|
+
this.acknowledgedAgentsService = new AcknowledgedAgentsService();
|
|
396
452
|
this.skillManager = new SkillManager();
|
|
397
453
|
this.outputSettings = {
|
|
398
454
|
format: params.output?.format ?? OutputFormat.TEXT,
|
|
399
455
|
};
|
|
400
456
|
this.retryFetchErrors = params.retryFetchErrors ?? false;
|
|
401
457
|
this.disableYoloMode = params.disableYoloMode ?? false;
|
|
402
|
-
this.
|
|
403
|
-
this.
|
|
458
|
+
this.rawOutput = params.rawOutput ?? false;
|
|
459
|
+
this.acceptRawOutputRisk = params.acceptRawOutputRisk ?? false;
|
|
460
|
+
if (params.hooks) {
|
|
461
|
+
this.hooks = params.hooks;
|
|
462
|
+
}
|
|
463
|
+
if (params.projectHooks) {
|
|
464
|
+
this.projectHooks = params.projectHooks;
|
|
465
|
+
}
|
|
404
466
|
this.experiments = params.experiments;
|
|
405
467
|
this.onModelChange = params.onModelChange;
|
|
406
468
|
this.onReload = params.onReload;
|
|
@@ -446,14 +508,32 @@ export class Config {
|
|
|
446
508
|
}
|
|
447
509
|
this.modelConfigService = new ModelConfigService(modelConfigServiceConfig ?? DEFAULT_MODEL_CONFIGS);
|
|
448
510
|
}
|
|
511
|
+
isInitialized() {
|
|
512
|
+
return this.initialized;
|
|
513
|
+
}
|
|
449
514
|
/**
|
|
450
|
-
*
|
|
515
|
+
* Dedups initialization requests using a shared promise that is only resolved
|
|
516
|
+
* once.
|
|
451
517
|
*/
|
|
452
518
|
async initialize() {
|
|
453
|
-
if (this.
|
|
454
|
-
|
|
519
|
+
if (this.initPromise) {
|
|
520
|
+
return this.initPromise;
|
|
521
|
+
}
|
|
522
|
+
this.initPromise = this._initialize();
|
|
523
|
+
return this.initPromise;
|
|
524
|
+
}
|
|
525
|
+
async _initialize() {
|
|
526
|
+
await this.storage.initialize();
|
|
527
|
+
// Add pending directories to workspace context
|
|
528
|
+
for (const dir of this.pendingIncludeDirectories) {
|
|
529
|
+
this.workspaceContext.addDirectory(dir);
|
|
530
|
+
}
|
|
531
|
+
// Add plans directory to workspace context for plan file storage
|
|
532
|
+
if (this.planEnabled) {
|
|
533
|
+
const plansDir = this.storage.getProjectTempPlansDir();
|
|
534
|
+
await fs.promises.mkdir(plansDir, { recursive: true });
|
|
535
|
+
this.workspaceContext.addDirectory(plansDir);
|
|
455
536
|
}
|
|
456
|
-
this.initialized = true;
|
|
457
537
|
// Initialize centralized FileDiscoveryService
|
|
458
538
|
const discoverToolsHandle = startupProfiler.start('discover_tools');
|
|
459
539
|
this.getFileService();
|
|
@@ -464,22 +544,35 @@ export class Config {
|
|
|
464
544
|
this.resourceRegistry = new ResourceRegistry();
|
|
465
545
|
this.agentRegistry = new AgentRegistry(this);
|
|
466
546
|
await this.agentRegistry.initialize();
|
|
547
|
+
coreEvents.on(CoreEvent.AgentsRefreshed, this.onAgentsRefreshed);
|
|
467
548
|
this.toolRegistry = await this.createToolRegistry();
|
|
468
549
|
discoverToolsHandle?.end();
|
|
469
|
-
this.mcpClientManager = new McpClientManager(this.toolRegistry, this, this.eventEmitter);
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
550
|
+
this.mcpClientManager = new McpClientManager(this.clientVersion, this.toolRegistry, this, this.eventEmitter);
|
|
551
|
+
// We do not await this promise so that the CLI can start up even if
|
|
552
|
+
// MCP servers are slow to connect.
|
|
553
|
+
const mcpInitialization = Promise.allSettled([
|
|
554
|
+
this.mcpClientManager.startConfiguredMcpServers(),
|
|
555
|
+
this.getExtensionLoader().start(this),
|
|
556
|
+
]).then((results) => {
|
|
557
|
+
for (const result of results) {
|
|
558
|
+
if (result.status === 'rejected') {
|
|
559
|
+
debugLogger.error('Error initializing MCP clients:', result.reason);
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
});
|
|
563
|
+
if (!this.interactive || this.experimentalZedIntegration) {
|
|
564
|
+
await mcpInitialization;
|
|
565
|
+
}
|
|
477
566
|
if (this.skillsSupport) {
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
567
|
+
this.getSkillManager().setAdminSettings(this.adminSkillsEnabled);
|
|
568
|
+
if (this.adminSkillsEnabled) {
|
|
569
|
+
await this.getSkillManager().discoverSkills(this.storage, this.getExtensions(), this.isTrustedFolder());
|
|
570
|
+
this.getSkillManager().setDisabledSkills(this.disabledSkills);
|
|
571
|
+
// Re-register ActivateSkillTool to update its schema with the discovered enabled skill enums
|
|
572
|
+
if (this.getSkillManager().getSkills().length > 0) {
|
|
573
|
+
this.getToolRegistry().unregisterTool(ActivateSkillTool.Name);
|
|
574
|
+
this.getToolRegistry().registerTool(new ActivateSkillTool(this, this.messageBus));
|
|
575
|
+
}
|
|
483
576
|
}
|
|
484
577
|
}
|
|
485
578
|
// Initialize hook system if enabled
|
|
@@ -492,6 +585,8 @@ export class Config {
|
|
|
492
585
|
await this.contextManager.refresh();
|
|
493
586
|
}
|
|
494
587
|
await this.geminiClient.initialize();
|
|
588
|
+
this.syncPlanModeTools();
|
|
589
|
+
this.initialized = true;
|
|
495
590
|
}
|
|
496
591
|
getContentGenerator() {
|
|
497
592
|
return this.contentGenerator;
|
|
@@ -508,6 +603,11 @@ export class Config {
|
|
|
508
603
|
}
|
|
509
604
|
// Reset availability status when switching auth (e.g. from limited key to OAuth)
|
|
510
605
|
this.modelAvailabilityService.reset();
|
|
606
|
+
// Clear stale authType to ensure getGemini31LaunchedSync doesn't return stale results
|
|
607
|
+
// during the transition.
|
|
608
|
+
if (this.contentGeneratorConfig) {
|
|
609
|
+
this.contentGeneratorConfig.authType = undefined;
|
|
610
|
+
}
|
|
511
611
|
const newContentGeneratorConfig = await createContentGeneratorConfig(this, authMethod);
|
|
512
612
|
this.contentGenerator = await createContentGenerator(newContentGeneratorConfig, this, this.getSessionId());
|
|
513
613
|
// Only assign to instance properties after successful initialization
|
|
@@ -515,29 +615,16 @@ export class Config {
|
|
|
515
615
|
// Initialize BaseLlmClient now that the ContentGenerator is available
|
|
516
616
|
this.baseLlmClient = new BaseLlmClient(this.contentGenerator, this);
|
|
517
617
|
const codeAssistServer = getCodeAssistServer(this);
|
|
518
|
-
if (codeAssistServer) {
|
|
519
|
-
|
|
520
|
-
await this.refreshUserQuota();
|
|
521
|
-
}
|
|
522
|
-
this.experimentsPromise = getExperiments(codeAssistServer)
|
|
523
|
-
.then((experiments) => {
|
|
524
|
-
this.setExperiments(experiments);
|
|
525
|
-
// If preview features have not been set and the user authenticated through Google, we enable preview based on remote config only if it's true
|
|
526
|
-
if (this.getPreviewFeatures() === undefined) {
|
|
527
|
-
const remotePreviewFeatures = experiments.flags[ExperimentFlags.ENABLE_PREVIEW]?.boolValue;
|
|
528
|
-
if (remotePreviewFeatures === true) {
|
|
529
|
-
this.setPreviewFeatures(remotePreviewFeatures);
|
|
530
|
-
}
|
|
531
|
-
}
|
|
532
|
-
})
|
|
533
|
-
.catch((e) => {
|
|
534
|
-
debugLogger.error('Failed to fetch experiments', e);
|
|
535
|
-
});
|
|
536
|
-
}
|
|
537
|
-
else {
|
|
538
|
-
this.experiments = undefined;
|
|
539
|
-
this.experimentsPromise = undefined;
|
|
618
|
+
if (codeAssistServer?.projectId) {
|
|
619
|
+
await this.refreshUserQuota();
|
|
540
620
|
}
|
|
621
|
+
this.experimentsPromise = getExperiments(codeAssistServer)
|
|
622
|
+
.then((experiments) => {
|
|
623
|
+
this.setExperiments(experiments);
|
|
624
|
+
})
|
|
625
|
+
.catch((e) => {
|
|
626
|
+
debugLogger.error('Failed to fetch experiments', e);
|
|
627
|
+
});
|
|
541
628
|
const authType = this.contentGeneratorConfig.authType;
|
|
542
629
|
if (authType === AuthType.USE_GEMINI ||
|
|
543
630
|
authType === AuthType.USE_VERTEX_AI) {
|
|
@@ -547,20 +634,29 @@ export class Config {
|
|
|
547
634
|
if (!this.hasAccessToPreviewModel && isPreviewModel(this.model)) {
|
|
548
635
|
this.setModel(DEFAULT_GEMINI_MODEL_AUTO);
|
|
549
636
|
}
|
|
637
|
+
// Fetch admin controls
|
|
638
|
+
await this.ensureExperimentsLoaded();
|
|
639
|
+
const adminControlsEnabled = this.experiments?.flags[ExperimentFlags.ENABLE_ADMIN_CONTROLS]
|
|
640
|
+
?.boolValue ?? false;
|
|
641
|
+
const adminControls = await fetchAdminControls(codeAssistServer, this.getRemoteAdminSettings(), adminControlsEnabled, (newSettings) => {
|
|
642
|
+
this.setRemoteAdminSettings(newSettings);
|
|
643
|
+
coreEvents.emitAdminSettingsChanged();
|
|
644
|
+
});
|
|
645
|
+
this.setRemoteAdminSettings(adminControls);
|
|
550
646
|
}
|
|
551
647
|
async getExperimentsAsync() {
|
|
552
648
|
if (this.experiments) {
|
|
553
649
|
return this.experiments;
|
|
554
650
|
}
|
|
555
651
|
const codeAssistServer = getCodeAssistServer(this);
|
|
556
|
-
|
|
557
|
-
return getExperiments(codeAssistServer);
|
|
558
|
-
}
|
|
559
|
-
return undefined;
|
|
652
|
+
return getExperiments(codeAssistServer);
|
|
560
653
|
}
|
|
561
654
|
getUserTier() {
|
|
562
655
|
return this.contentGenerator?.userTier;
|
|
563
656
|
}
|
|
657
|
+
getUserTierName() {
|
|
658
|
+
return this.contentGenerator?.userTierName;
|
|
659
|
+
}
|
|
564
660
|
/**
|
|
565
661
|
* Provides access to the BaseLlmClient for stateless LLM operations.
|
|
566
662
|
*/
|
|
@@ -588,6 +684,12 @@ export class Config {
|
|
|
588
684
|
getTerminalBackground() {
|
|
589
685
|
return this.terminalBackground;
|
|
590
686
|
}
|
|
687
|
+
getLatestApiRequest() {
|
|
688
|
+
return this.latestApiRequest;
|
|
689
|
+
}
|
|
690
|
+
setLatestApiRequest(req) {
|
|
691
|
+
this.latestApiRequest = req;
|
|
692
|
+
}
|
|
591
693
|
getRemoteAdminSettings() {
|
|
592
694
|
return this.remoteAdminSettings;
|
|
593
695
|
}
|
|
@@ -597,6 +699,9 @@ export class Config {
|
|
|
597
699
|
shouldLoadMemoryFromIncludeDirectories() {
|
|
598
700
|
return this.loadMemoryFromIncludeDirectories;
|
|
599
701
|
}
|
|
702
|
+
getIncludeDirectoryTree() {
|
|
703
|
+
return this.includeDirectoryTree;
|
|
704
|
+
}
|
|
600
705
|
getImportFormat() {
|
|
601
706
|
return this.importFormat;
|
|
602
707
|
}
|
|
@@ -609,6 +714,9 @@ export class Config {
|
|
|
609
714
|
getModel() {
|
|
610
715
|
return this.model;
|
|
611
716
|
}
|
|
717
|
+
getDisableLoopDetection() {
|
|
718
|
+
return this.disableLoopDetection ?? false;
|
|
719
|
+
}
|
|
612
720
|
setModel(newModel, isTemporary = true) {
|
|
613
721
|
if (this.model !== newModel || this._activeModel !== newModel) {
|
|
614
722
|
this.model = newModel;
|
|
@@ -642,6 +750,12 @@ export class Config {
|
|
|
642
750
|
getFallbackModelHandler() {
|
|
643
751
|
return this.fallbackModelHandler;
|
|
644
752
|
}
|
|
753
|
+
setValidationHandler(handler) {
|
|
754
|
+
this.validationHandler = handler;
|
|
755
|
+
}
|
|
756
|
+
getValidationHandler() {
|
|
757
|
+
return this.validationHandler;
|
|
758
|
+
}
|
|
645
759
|
resetTurn() {
|
|
646
760
|
this.modelAvailabilityService.resetTurn();
|
|
647
761
|
}
|
|
@@ -654,6 +768,69 @@ export class Config {
|
|
|
654
768
|
getQuotaErrorOccurred() {
|
|
655
769
|
return this.quotaErrorOccurred;
|
|
656
770
|
}
|
|
771
|
+
setQuota(remaining, limit, modelId) {
|
|
772
|
+
const activeModel = modelId ?? this.getActiveModel();
|
|
773
|
+
if (remaining !== undefined && limit !== undefined) {
|
|
774
|
+
const current = this.modelQuotas.get(activeModel);
|
|
775
|
+
if (!current ||
|
|
776
|
+
current.remaining !== remaining ||
|
|
777
|
+
current.limit !== limit) {
|
|
778
|
+
this.modelQuotas.set(activeModel, { remaining, limit });
|
|
779
|
+
this.emitQuotaChangedEvent();
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
getPooledQuota() {
|
|
784
|
+
const model = this.getModel();
|
|
785
|
+
if (!isAutoModel(model)) {
|
|
786
|
+
return {};
|
|
787
|
+
}
|
|
788
|
+
const isPreview = model === PREVIEW_GEMINI_MODEL_AUTO ||
|
|
789
|
+
isPreviewModel(this.getActiveModel());
|
|
790
|
+
const proModel = isPreview ? PREVIEW_GEMINI_MODEL : DEFAULT_GEMINI_MODEL;
|
|
791
|
+
const flashModel = isPreview
|
|
792
|
+
? PREVIEW_GEMINI_FLASH_MODEL
|
|
793
|
+
: DEFAULT_GEMINI_FLASH_MODEL;
|
|
794
|
+
const proQuota = this.modelQuotas.get(proModel);
|
|
795
|
+
const flashQuota = this.modelQuotas.get(flashModel);
|
|
796
|
+
if (proQuota || flashQuota) {
|
|
797
|
+
// For reset time, take the one that is furthest in the future (most conservative)
|
|
798
|
+
const resetTime = [proQuota?.resetTime, flashQuota?.resetTime]
|
|
799
|
+
.filter((t) => !!t)
|
|
800
|
+
.sort()
|
|
801
|
+
.reverse()[0];
|
|
802
|
+
return {
|
|
803
|
+
remaining: (proQuota?.remaining ?? 0) + (flashQuota?.remaining ?? 0),
|
|
804
|
+
limit: (proQuota?.limit ?? 0) + (flashQuota?.limit ?? 0),
|
|
805
|
+
resetTime,
|
|
806
|
+
};
|
|
807
|
+
}
|
|
808
|
+
return {};
|
|
809
|
+
}
|
|
810
|
+
getQuotaRemaining() {
|
|
811
|
+
const pooled = this.getPooledQuota();
|
|
812
|
+
if (pooled.remaining !== undefined) {
|
|
813
|
+
return pooled.remaining;
|
|
814
|
+
}
|
|
815
|
+
const primaryModel = resolveModel(this.getModel(), this.getGemini31LaunchedSync());
|
|
816
|
+
return this.modelQuotas.get(primaryModel)?.remaining;
|
|
817
|
+
}
|
|
818
|
+
getQuotaLimit() {
|
|
819
|
+
const pooled = this.getPooledQuota();
|
|
820
|
+
if (pooled.limit !== undefined) {
|
|
821
|
+
return pooled.limit;
|
|
822
|
+
}
|
|
823
|
+
const primaryModel = resolveModel(this.getModel(), this.getGemini31LaunchedSync());
|
|
824
|
+
return this.modelQuotas.get(primaryModel)?.limit;
|
|
825
|
+
}
|
|
826
|
+
getQuotaResetTime() {
|
|
827
|
+
const pooled = this.getPooledQuota();
|
|
828
|
+
if (pooled.resetTime !== undefined) {
|
|
829
|
+
return pooled.resetTime;
|
|
830
|
+
}
|
|
831
|
+
const primaryModel = resolveModel(this.getModel(), this.getGemini31LaunchedSync());
|
|
832
|
+
return this.modelQuotas.get(primaryModel)?.resetTime;
|
|
833
|
+
}
|
|
657
834
|
getEmbeddingModel() {
|
|
658
835
|
return this.embeddingModel;
|
|
659
836
|
}
|
|
@@ -666,7 +843,8 @@ export class Config {
|
|
|
666
843
|
return (!!sandboxConfig &&
|
|
667
844
|
sandboxConfig.command === 'sandbox-exec' &&
|
|
668
845
|
!!seatbeltProfile &&
|
|
669
|
-
seatbeltProfile.startsWith('restrictive-')
|
|
846
|
+
(seatbeltProfile.startsWith('restrictive-') ||
|
|
847
|
+
seatbeltProfile.startsWith('strict-')));
|
|
670
848
|
}
|
|
671
849
|
getTargetDir() {
|
|
672
850
|
return this.targetDir;
|
|
@@ -683,6 +861,9 @@ export class Config {
|
|
|
683
861
|
getSkillManager() {
|
|
684
862
|
return this.skillManager;
|
|
685
863
|
}
|
|
864
|
+
getAcknowledgedAgentsService() {
|
|
865
|
+
return this.acknowledgedAgentsService;
|
|
866
|
+
}
|
|
686
867
|
getToolRegistry() {
|
|
687
868
|
return this.toolRegistry;
|
|
688
869
|
}
|
|
@@ -698,25 +879,6 @@ export class Config {
|
|
|
698
879
|
getQuestion() {
|
|
699
880
|
return this.question;
|
|
700
881
|
}
|
|
701
|
-
getPreviewFeatures() {
|
|
702
|
-
return this.previewFeatures;
|
|
703
|
-
}
|
|
704
|
-
setPreviewFeatures(previewFeatures) {
|
|
705
|
-
// No change in state, no action needed
|
|
706
|
-
if (this.previewFeatures === previewFeatures) {
|
|
707
|
-
return;
|
|
708
|
-
}
|
|
709
|
-
this.previewFeatures = previewFeatures;
|
|
710
|
-
const currentModel = this.getModel();
|
|
711
|
-
// Case 1: Disabling preview features while on a preview model
|
|
712
|
-
if (!previewFeatures && isPreviewModel(currentModel)) {
|
|
713
|
-
this.setModel(DEFAULT_GEMINI_MODEL_AUTO);
|
|
714
|
-
}
|
|
715
|
-
// Case 2: Enabling preview features while on the default auto model
|
|
716
|
-
else if (previewFeatures && currentModel === DEFAULT_GEMINI_MODEL_AUTO) {
|
|
717
|
-
this.setModel(PREVIEW_GEMINI_MODEL_AUTO);
|
|
718
|
-
}
|
|
719
|
-
}
|
|
720
882
|
getHasAccessToPreviewModel() {
|
|
721
883
|
return this.hasAccessToPreviewModel;
|
|
722
884
|
}
|
|
@@ -732,7 +894,30 @@ export class Config {
|
|
|
732
894
|
const quota = await codeAssistServer.retrieveUserQuota({
|
|
733
895
|
project: codeAssistServer.projectId,
|
|
734
896
|
});
|
|
735
|
-
|
|
897
|
+
if (quota.buckets) {
|
|
898
|
+
this.lastRetrievedQuota = quota;
|
|
899
|
+
this.lastQuotaFetchTime = Date.now();
|
|
900
|
+
for (const bucket of quota.buckets) {
|
|
901
|
+
if (bucket.modelId &&
|
|
902
|
+
bucket.remainingAmount &&
|
|
903
|
+
bucket.remainingFraction != null) {
|
|
904
|
+
const remaining = parseInt(bucket.remainingAmount, 10);
|
|
905
|
+
const limit = bucket.remainingFraction > 0
|
|
906
|
+
? Math.round(remaining / bucket.remainingFraction)
|
|
907
|
+
: (this.modelQuotas.get(bucket.modelId)?.limit ?? 0);
|
|
908
|
+
if (!isNaN(remaining) && Number.isFinite(limit) && limit > 0) {
|
|
909
|
+
this.modelQuotas.set(bucket.modelId, {
|
|
910
|
+
remaining,
|
|
911
|
+
limit,
|
|
912
|
+
resetTime: bucket.resetTime,
|
|
913
|
+
});
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
}
|
|
917
|
+
this.emitQuotaChangedEvent();
|
|
918
|
+
}
|
|
919
|
+
const hasAccess = quota.buckets?.some((b) => b.modelId && isPreviewModel(b.modelId)) ??
|
|
920
|
+
false;
|
|
736
921
|
this.setHasAccessToPreviewModel(hasAccess);
|
|
737
922
|
return quota;
|
|
738
923
|
}
|
|
@@ -741,6 +926,28 @@ export class Config {
|
|
|
741
926
|
return undefined;
|
|
742
927
|
}
|
|
743
928
|
}
|
|
929
|
+
async refreshUserQuotaIfStale(staleMs = 30_000) {
|
|
930
|
+
const now = Date.now();
|
|
931
|
+
if (now - this.lastQuotaFetchTime > staleMs) {
|
|
932
|
+
return this.refreshUserQuota();
|
|
933
|
+
}
|
|
934
|
+
return this.lastRetrievedQuota;
|
|
935
|
+
}
|
|
936
|
+
getLastRetrievedQuota() {
|
|
937
|
+
return this.lastRetrievedQuota;
|
|
938
|
+
}
|
|
939
|
+
getRemainingQuotaForModel(modelId) {
|
|
940
|
+
const bucket = this.lastRetrievedQuota?.buckets?.find((b) => b.modelId === modelId);
|
|
941
|
+
if (!bucket)
|
|
942
|
+
return undefined;
|
|
943
|
+
return {
|
|
944
|
+
remainingAmount: bucket.remainingAmount
|
|
945
|
+
? parseInt(bucket.remainingAmount, 10)
|
|
946
|
+
: undefined,
|
|
947
|
+
remainingFraction: bucket.remainingFraction,
|
|
948
|
+
resetTime: bucket.resetTime,
|
|
949
|
+
};
|
|
950
|
+
}
|
|
744
951
|
getCoreTools() {
|
|
745
952
|
return this.coreTools;
|
|
746
953
|
}
|
|
@@ -749,11 +956,12 @@ export class Config {
|
|
|
749
956
|
}
|
|
750
957
|
/**
|
|
751
958
|
* All the excluded tools from static configuration, loaded extensions, or
|
|
752
|
-
* other sources.
|
|
959
|
+
* other sources (like the Policy Engine).
|
|
753
960
|
*
|
|
754
961
|
* May change over time.
|
|
755
962
|
*/
|
|
756
963
|
getExcludeTools() {
|
|
964
|
+
// Right now this is present for backward compatibility with settings.json exclude
|
|
757
965
|
const excludeToolsSet = new Set([...(this.excludeTools ?? [])]);
|
|
758
966
|
for (const extension of this.getExtensionLoader().getExtensions()) {
|
|
759
967
|
if (!extension.isActive) {
|
|
@@ -763,6 +971,10 @@ export class Config {
|
|
|
763
971
|
excludeToolsSet.add(tool);
|
|
764
972
|
}
|
|
765
973
|
}
|
|
974
|
+
const policyExclusions = this.policyEngine.getExcludedTools();
|
|
975
|
+
for (const tool of policyExclusions) {
|
|
976
|
+
excludeToolsSet.add(tool);
|
|
977
|
+
}
|
|
766
978
|
return excludeToolsSet;
|
|
767
979
|
}
|
|
768
980
|
getToolDiscoveryCommand() {
|
|
@@ -785,6 +997,12 @@ export class Config {
|
|
|
785
997
|
getMcpEnabled() {
|
|
786
998
|
return this.mcpEnabled;
|
|
787
999
|
}
|
|
1000
|
+
getMcpEnablementCallbacks() {
|
|
1001
|
+
return this.mcpEnablementCallbacks;
|
|
1002
|
+
}
|
|
1003
|
+
getExtensionsEnabled() {
|
|
1004
|
+
return this.extensionsEnabled;
|
|
1005
|
+
}
|
|
788
1006
|
getMcpClientManager() {
|
|
789
1007
|
return this.mcpClientManager;
|
|
790
1008
|
}
|
|
@@ -806,15 +1024,30 @@ export class Config {
|
|
|
806
1024
|
}
|
|
807
1025
|
getUserMemory() {
|
|
808
1026
|
if (this.experimentalJitContext && this.contextManager) {
|
|
809
|
-
return
|
|
810
|
-
this.contextManager.getGlobalMemory(),
|
|
811
|
-
this.contextManager.
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
.join('\n\n');
|
|
1027
|
+
return {
|
|
1028
|
+
global: this.contextManager.getGlobalMemory(),
|
|
1029
|
+
extension: this.contextManager.getExtensionMemory(),
|
|
1030
|
+
project: this.contextManager.getEnvironmentMemory(),
|
|
1031
|
+
};
|
|
815
1032
|
}
|
|
816
1033
|
return this.userMemory;
|
|
817
1034
|
}
|
|
1035
|
+
/**
|
|
1036
|
+
* Refreshes the MCP context, including memory, tools, and system instructions.
|
|
1037
|
+
*/
|
|
1038
|
+
async refreshMcpContext() {
|
|
1039
|
+
if (this.experimentalJitContext && this.contextManager) {
|
|
1040
|
+
await this.contextManager.refresh();
|
|
1041
|
+
}
|
|
1042
|
+
else {
|
|
1043
|
+
const { refreshServerHierarchicalMemory } = await import('../utils/memoryDiscovery.js');
|
|
1044
|
+
await refreshServerHierarchicalMemory(this);
|
|
1045
|
+
}
|
|
1046
|
+
if (this.geminiClient?.isInitialized()) {
|
|
1047
|
+
await this.geminiClient.setTools();
|
|
1048
|
+
this.geminiClient.updateSystemInstruction();
|
|
1049
|
+
}
|
|
1050
|
+
}
|
|
818
1051
|
setUserMemory(newUserMemory) {
|
|
819
1052
|
this.userMemory = newUserMemory;
|
|
820
1053
|
}
|
|
@@ -830,6 +1063,34 @@ export class Config {
|
|
|
830
1063
|
isJitContextEnabled() {
|
|
831
1064
|
return this.experimentalJitContext;
|
|
832
1065
|
}
|
|
1066
|
+
getToolOutputMaskingEnabled() {
|
|
1067
|
+
return this.toolOutputMasking.enabled;
|
|
1068
|
+
}
|
|
1069
|
+
async getToolOutputMaskingConfig() {
|
|
1070
|
+
await this.ensureExperimentsLoaded();
|
|
1071
|
+
const remoteProtection = this.experiments?.flags[ExperimentFlags.MASKING_PROTECTION_THRESHOLD]
|
|
1072
|
+
?.intValue;
|
|
1073
|
+
const remotePrunable = this.experiments?.flags[ExperimentFlags.MASKING_PRUNABLE_THRESHOLD]
|
|
1074
|
+
?.intValue;
|
|
1075
|
+
const remoteProtectLatest = this.experiments?.flags[ExperimentFlags.MASKING_PROTECT_LATEST_TURN]
|
|
1076
|
+
?.boolValue;
|
|
1077
|
+
const parsedProtection = remoteProtection
|
|
1078
|
+
? parseInt(remoteProtection, 10)
|
|
1079
|
+
: undefined;
|
|
1080
|
+
const parsedPrunable = remotePrunable
|
|
1081
|
+
? parseInt(remotePrunable, 10)
|
|
1082
|
+
: undefined;
|
|
1083
|
+
return {
|
|
1084
|
+
enabled: this.toolOutputMasking.enabled,
|
|
1085
|
+
toolProtectionThreshold: parsedProtection !== undefined && !isNaN(parsedProtection)
|
|
1086
|
+
? parsedProtection
|
|
1087
|
+
: this.toolOutputMasking.toolProtectionThreshold,
|
|
1088
|
+
minPrunableTokensThreshold: parsedPrunable !== undefined && !isNaN(parsedPrunable)
|
|
1089
|
+
? parsedPrunable
|
|
1090
|
+
: this.toolOutputMasking.minPrunableTokensThreshold,
|
|
1091
|
+
protectLatestTurn: remoteProtectLatest ?? this.toolOutputMasking.protectLatestTurn,
|
|
1092
|
+
};
|
|
1093
|
+
}
|
|
833
1094
|
getGeminiMdFileCount() {
|
|
834
1095
|
if (this.experimentalJitContext && this.contextManager) {
|
|
835
1096
|
return this.contextManager.getLoadedPaths().size;
|
|
@@ -855,11 +1116,72 @@ export class Config {
|
|
|
855
1116
|
if (!this.isTrustedFolder() && mode !== ApprovalMode.DEFAULT) {
|
|
856
1117
|
throw new Error('Cannot enable privileged approval modes in an untrusted folder.');
|
|
857
1118
|
}
|
|
1119
|
+
const currentMode = this.getApprovalMode();
|
|
1120
|
+
if (currentMode !== mode) {
|
|
1121
|
+
this.logCurrentModeDuration(this.getApprovalMode());
|
|
1122
|
+
logApprovalModeSwitch(this, new ApprovalModeSwitchEvent(currentMode, mode));
|
|
1123
|
+
this.lastModeSwitchTime = Date.now();
|
|
1124
|
+
}
|
|
858
1125
|
this.policyEngine.setApprovalMode(mode);
|
|
1126
|
+
const isPlanModeTransition = currentMode !== mode &&
|
|
1127
|
+
(currentMode === ApprovalMode.PLAN || mode === ApprovalMode.PLAN);
|
|
1128
|
+
if (isPlanModeTransition) {
|
|
1129
|
+
this.syncPlanModeTools();
|
|
1130
|
+
this.updateSystemInstructionIfInitialized();
|
|
1131
|
+
}
|
|
1132
|
+
}
|
|
1133
|
+
/**
|
|
1134
|
+
* Synchronizes enter/exit plan mode tools based on current mode.
|
|
1135
|
+
*/
|
|
1136
|
+
syncPlanModeTools() {
|
|
1137
|
+
const isPlanMode = this.getApprovalMode() === ApprovalMode.PLAN;
|
|
1138
|
+
const registry = this.getToolRegistry();
|
|
1139
|
+
if (isPlanMode) {
|
|
1140
|
+
if (registry.getTool(ENTER_PLAN_MODE_TOOL_NAME)) {
|
|
1141
|
+
registry.unregisterTool(ENTER_PLAN_MODE_TOOL_NAME);
|
|
1142
|
+
}
|
|
1143
|
+
if (!registry.getTool(EXIT_PLAN_MODE_TOOL_NAME)) {
|
|
1144
|
+
registry.registerTool(new ExitPlanModeTool(this, this.messageBus));
|
|
1145
|
+
}
|
|
1146
|
+
}
|
|
1147
|
+
else {
|
|
1148
|
+
if (registry.getTool(EXIT_PLAN_MODE_TOOL_NAME)) {
|
|
1149
|
+
registry.unregisterTool(EXIT_PLAN_MODE_TOOL_NAME);
|
|
1150
|
+
}
|
|
1151
|
+
if (this.planEnabled) {
|
|
1152
|
+
if (!registry.getTool(ENTER_PLAN_MODE_TOOL_NAME)) {
|
|
1153
|
+
registry.registerTool(new EnterPlanModeTool(this, this.messageBus));
|
|
1154
|
+
}
|
|
1155
|
+
}
|
|
1156
|
+
else {
|
|
1157
|
+
if (registry.getTool(ENTER_PLAN_MODE_TOOL_NAME)) {
|
|
1158
|
+
registry.unregisterTool(ENTER_PLAN_MODE_TOOL_NAME);
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1161
|
+
}
|
|
1162
|
+
if (this.geminiClient?.isInitialized()) {
|
|
1163
|
+
this.geminiClient.setTools().catch((err) => {
|
|
1164
|
+
debugLogger.error('Failed to update tools', err);
|
|
1165
|
+
});
|
|
1166
|
+
}
|
|
1167
|
+
}
|
|
1168
|
+
/**
|
|
1169
|
+
* Logs the duration of the current approval mode.
|
|
1170
|
+
*/
|
|
1171
|
+
logCurrentModeDuration(mode) {
|
|
1172
|
+
const now = Date.now();
|
|
1173
|
+
const duration = now - this.lastModeSwitchTime;
|
|
1174
|
+
logApprovalModeDuration(this, new ApprovalModeDurationEvent(mode, duration));
|
|
859
1175
|
}
|
|
860
1176
|
isYoloModeDisabled() {
|
|
861
1177
|
return this.disableYoloMode || !this.isTrustedFolder();
|
|
862
1178
|
}
|
|
1179
|
+
getRawOutput() {
|
|
1180
|
+
return this.rawOutput;
|
|
1181
|
+
}
|
|
1182
|
+
getAcceptRawOutputRisk() {
|
|
1183
|
+
return this.acceptRawOutputRisk;
|
|
1184
|
+
}
|
|
863
1185
|
getPendingIncludeDirectories() {
|
|
864
1186
|
return this.pendingIncludeDirectories;
|
|
865
1187
|
}
|
|
@@ -903,10 +1225,10 @@ export class Config {
|
|
|
903
1225
|
* Updates the system instruction with the latest user memory.
|
|
904
1226
|
* Whenever the user memory (GEMINI.md files) is updated.
|
|
905
1227
|
*/
|
|
906
|
-
|
|
1228
|
+
updateSystemInstructionIfInitialized() {
|
|
907
1229
|
const geminiClient = this.getGeminiClient();
|
|
908
1230
|
if (geminiClient?.isInitialized()) {
|
|
909
|
-
|
|
1231
|
+
geminiClient.updateSystemInstruction();
|
|
910
1232
|
}
|
|
911
1233
|
}
|
|
912
1234
|
getModelRouterService() {
|
|
@@ -918,8 +1240,8 @@ export class Config {
|
|
|
918
1240
|
getEnableRecursiveFileSearch() {
|
|
919
1241
|
return this.fileFiltering.enableRecursiveFileSearch;
|
|
920
1242
|
}
|
|
921
|
-
|
|
922
|
-
return this.fileFiltering.
|
|
1243
|
+
getFileFilteringEnableFuzzySearch() {
|
|
1244
|
+
return this.fileFiltering.enableFuzzySearch;
|
|
923
1245
|
}
|
|
924
1246
|
getFileFilteringRespectGitIgnore() {
|
|
925
1247
|
return this.fileFiltering.respectGitIgnore;
|
|
@@ -927,10 +1249,16 @@ export class Config {
|
|
|
927
1249
|
getFileFilteringRespectGeminiIgnore() {
|
|
928
1250
|
return this.fileFiltering.respectGeminiIgnore;
|
|
929
1251
|
}
|
|
1252
|
+
getCustomIgnoreFilePaths() {
|
|
1253
|
+
return this.fileFiltering.customIgnoreFilePaths;
|
|
1254
|
+
}
|
|
930
1255
|
getFileFilteringOptions() {
|
|
931
1256
|
return {
|
|
932
1257
|
respectGitIgnore: this.fileFiltering.respectGitIgnore,
|
|
933
1258
|
respectGeminiIgnore: this.fileFiltering.respectGeminiIgnore,
|
|
1259
|
+
maxFileCount: this.fileFiltering.maxFileCount,
|
|
1260
|
+
searchTimeout: this.fileFiltering.searchTimeout,
|
|
1261
|
+
customIgnoreFilePaths: this.fileFiltering.customIgnoreFilePaths,
|
|
934
1262
|
};
|
|
935
1263
|
}
|
|
936
1264
|
/**
|
|
@@ -961,7 +1289,11 @@ export class Config {
|
|
|
961
1289
|
}
|
|
962
1290
|
getFileService() {
|
|
963
1291
|
if (!this.fileDiscoveryService) {
|
|
964
|
-
this.fileDiscoveryService = new FileDiscoveryService(this.targetDir
|
|
1292
|
+
this.fileDiscoveryService = new FileDiscoveryService(this.targetDir, {
|
|
1293
|
+
respectGitIgnore: this.fileFiltering.respectGitIgnore,
|
|
1294
|
+
respectGeminiIgnore: this.fileFiltering.respectGeminiIgnore,
|
|
1295
|
+
customIgnoreFilePaths: this.fileFiltering.customIgnoreFilePaths,
|
|
1296
|
+
});
|
|
965
1297
|
}
|
|
966
1298
|
return this.fileDiscoveryService;
|
|
967
1299
|
}
|
|
@@ -997,12 +1329,30 @@ export class Config {
|
|
|
997
1329
|
getEnableExtensionReloading() {
|
|
998
1330
|
return this.enableExtensionReloading;
|
|
999
1331
|
}
|
|
1332
|
+
getDisableLLMCorrection() {
|
|
1333
|
+
return this.disableLLMCorrection;
|
|
1334
|
+
}
|
|
1335
|
+
isPlanEnabled() {
|
|
1336
|
+
return this.planEnabled;
|
|
1337
|
+
}
|
|
1338
|
+
getApprovedPlanPath() {
|
|
1339
|
+
return this.approvedPlanPath;
|
|
1340
|
+
}
|
|
1341
|
+
setApprovedPlanPath(path) {
|
|
1342
|
+
this.approvedPlanPath = path;
|
|
1343
|
+
}
|
|
1000
1344
|
isAgentsEnabled() {
|
|
1001
1345
|
return this.enableAgents;
|
|
1002
1346
|
}
|
|
1347
|
+
isEventDrivenSchedulerEnabled() {
|
|
1348
|
+
return this.enableEventDrivenScheduler;
|
|
1349
|
+
}
|
|
1003
1350
|
getNoBrowser() {
|
|
1004
1351
|
return this.noBrowser;
|
|
1005
1352
|
}
|
|
1353
|
+
getAgentsSettings() {
|
|
1354
|
+
return this.agents;
|
|
1355
|
+
}
|
|
1006
1356
|
isBrowserLaunchSuppressed() {
|
|
1007
1357
|
return this.getNoBrowser() || !shouldAttemptBrowserLaunch();
|
|
1008
1358
|
}
|
|
@@ -1039,6 +1389,56 @@ export class Config {
|
|
|
1039
1389
|
getFileSystemService() {
|
|
1040
1390
|
return this.fileSystemService;
|
|
1041
1391
|
}
|
|
1392
|
+
/**
|
|
1393
|
+
* Checks if a given absolute path is allowed for file system operations.
|
|
1394
|
+
* A path is allowed if it's within the workspace context or the project's temporary directory.
|
|
1395
|
+
*
|
|
1396
|
+
* @param absolutePath The absolute path to check.
|
|
1397
|
+
* @returns true if the path is allowed, false otherwise.
|
|
1398
|
+
*/
|
|
1399
|
+
isPathAllowed(absolutePath) {
|
|
1400
|
+
const realpath = (p) => {
|
|
1401
|
+
let resolved;
|
|
1402
|
+
try {
|
|
1403
|
+
resolved = fs.realpathSync(p);
|
|
1404
|
+
}
|
|
1405
|
+
catch {
|
|
1406
|
+
resolved = path.resolve(p);
|
|
1407
|
+
}
|
|
1408
|
+
return os.platform() === 'win32' ? resolved.toLowerCase() : resolved;
|
|
1409
|
+
};
|
|
1410
|
+
const resolvedPath = realpath(absolutePath);
|
|
1411
|
+
const workspaceContext = this.getWorkspaceContext();
|
|
1412
|
+
if (workspaceContext.isPathWithinWorkspace(resolvedPath)) {
|
|
1413
|
+
return true;
|
|
1414
|
+
}
|
|
1415
|
+
const projectTempDir = this.storage.getProjectTempDir();
|
|
1416
|
+
const resolvedTempDir = realpath(projectTempDir);
|
|
1417
|
+
return isSubpath(resolvedTempDir, resolvedPath);
|
|
1418
|
+
}
|
|
1419
|
+
/**
|
|
1420
|
+
* Validates if a path is allowed and returns a detailed error message if not.
|
|
1421
|
+
*
|
|
1422
|
+
* @param absolutePath The absolute path to validate.
|
|
1423
|
+
* @param checkType The type of access to check ('read' or 'write'). Defaults to 'write' for safety.
|
|
1424
|
+
* @returns An error message string if the path is disallowed, null otherwise.
|
|
1425
|
+
*/
|
|
1426
|
+
validatePathAccess(absolutePath, checkType = 'write') {
|
|
1427
|
+
// For read operations, check read-only paths first
|
|
1428
|
+
if (checkType === 'read') {
|
|
1429
|
+
if (this.getWorkspaceContext().isPathReadable(absolutePath)) {
|
|
1430
|
+
return null;
|
|
1431
|
+
}
|
|
1432
|
+
}
|
|
1433
|
+
// Then check standard allowed paths (Workspace + Temp)
|
|
1434
|
+
// This covers 'write' checks and acts as a fallback/temp-dir check for 'read'
|
|
1435
|
+
if (this.isPathAllowed(absolutePath)) {
|
|
1436
|
+
return null;
|
|
1437
|
+
}
|
|
1438
|
+
const workspaceDirs = this.getWorkspaceContext().getDirectories();
|
|
1439
|
+
const projectTempDir = this.storage.getProjectTempDir();
|
|
1440
|
+
return `Path not in workspace: Attempted path "${absolutePath}" resolves outside the allowed workspace directories: ${workspaceDirs.join(', ')} or the project temp directory: ${projectTempDir}`;
|
|
1441
|
+
}
|
|
1042
1442
|
/**
|
|
1043
1443
|
* Set a custom FileSystemService
|
|
1044
1444
|
*/
|
|
@@ -1061,6 +1461,19 @@ export class Config {
|
|
|
1061
1461
|
await this.ensureExperimentsLoaded();
|
|
1062
1462
|
return this.experiments?.flags[ExperimentFlags.USER_CACHING]?.boolValue;
|
|
1063
1463
|
}
|
|
1464
|
+
async getNumericalRoutingEnabled() {
|
|
1465
|
+
await this.ensureExperimentsLoaded();
|
|
1466
|
+
return !!this.experiments?.flags[ExperimentFlags.ENABLE_NUMERICAL_ROUTING]
|
|
1467
|
+
?.boolValue;
|
|
1468
|
+
}
|
|
1469
|
+
async getClassifierThreshold() {
|
|
1470
|
+
await this.ensureExperimentsLoaded();
|
|
1471
|
+
const flag = this.experiments?.flags[ExperimentFlags.CLASSIFIER_THRESHOLD];
|
|
1472
|
+
if (flag?.intValue !== undefined) {
|
|
1473
|
+
return parseInt(flag.intValue, 10);
|
|
1474
|
+
}
|
|
1475
|
+
return flag?.floatValue;
|
|
1476
|
+
}
|
|
1064
1477
|
async getBannerTextNoCapacityIssues() {
|
|
1065
1478
|
await this.ensureExperimentsLoaded();
|
|
1066
1479
|
return (this.experiments?.flags[ExperimentFlags.BANNER_TEXT_NO_CAPACITY_ISSUES]
|
|
@@ -1071,6 +1484,30 @@ export class Config {
|
|
|
1071
1484
|
return (this.experiments?.flags[ExperimentFlags.BANNER_TEXT_CAPACITY_ISSUES]
|
|
1072
1485
|
?.stringValue ?? '');
|
|
1073
1486
|
}
|
|
1487
|
+
/**
|
|
1488
|
+
* Returns whether Gemini 3.1 has been launched.
|
|
1489
|
+
* This method is async and ensures that experiments are loaded before returning the result.
|
|
1490
|
+
*/
|
|
1491
|
+
async getGemini31Launched() {
|
|
1492
|
+
await this.ensureExperimentsLoaded();
|
|
1493
|
+
return this.getGemini31LaunchedSync();
|
|
1494
|
+
}
|
|
1495
|
+
/**
|
|
1496
|
+
* Returns whether Gemini 3.1 has been launched.
|
|
1497
|
+
*
|
|
1498
|
+
* Note: This method should only be called after startup, once experiments have been loaded.
|
|
1499
|
+
* If you need to call this during startup or from an async context, use
|
|
1500
|
+
* getGemini31Launched instead.
|
|
1501
|
+
*/
|
|
1502
|
+
getGemini31LaunchedSync() {
|
|
1503
|
+
const authType = this.contentGeneratorConfig?.authType;
|
|
1504
|
+
if (authType === AuthType.USE_GEMINI ||
|
|
1505
|
+
authType === AuthType.USE_VERTEX_AI) {
|
|
1506
|
+
return true;
|
|
1507
|
+
}
|
|
1508
|
+
return (this.experiments?.flags[ExperimentFlags.GEMINI_3_1_PRO_LAUNCHED]
|
|
1509
|
+
?.boolValue ?? false);
|
|
1510
|
+
}
|
|
1074
1511
|
async ensureExperimentsLoaded() {
|
|
1075
1512
|
if (!this.experimentsPromise) {
|
|
1076
1513
|
return;
|
|
@@ -1100,18 +1537,37 @@ export class Config {
|
|
|
1100
1537
|
if (this.onReload) {
|
|
1101
1538
|
const refreshed = await this.onReload();
|
|
1102
1539
|
this.disabledSkills = refreshed.disabledSkills ?? [];
|
|
1540
|
+
this.getSkillManager().setAdminSettings(refreshed.adminSkillsEnabled ?? this.adminSkillsEnabled);
|
|
1103
1541
|
}
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
this.
|
|
1542
|
+
if (this.getSkillManager().isAdminEnabled()) {
|
|
1543
|
+
await this.getSkillManager().discoverSkills(this.storage, this.getExtensions(), this.isTrustedFolder());
|
|
1544
|
+
this.getSkillManager().setDisabledSkills(this.disabledSkills);
|
|
1545
|
+
// Re-register ActivateSkillTool to update its schema with the newly discovered skills
|
|
1546
|
+
if (this.getSkillManager().getSkills().length > 0) {
|
|
1547
|
+
this.getToolRegistry().unregisterTool(ActivateSkillTool.Name);
|
|
1548
|
+
this.getToolRegistry().registerTool(new ActivateSkillTool(this, this.messageBus));
|
|
1549
|
+
}
|
|
1550
|
+
else {
|
|
1551
|
+
this.getToolRegistry().unregisterTool(ActivateSkillTool.Name);
|
|
1552
|
+
}
|
|
1109
1553
|
}
|
|
1110
1554
|
else {
|
|
1555
|
+
this.getSkillManager().clearSkills();
|
|
1111
1556
|
this.getToolRegistry().unregisterTool(ActivateSkillTool.Name);
|
|
1112
1557
|
}
|
|
1113
1558
|
// Notify the client that system instructions might need updating
|
|
1114
|
-
|
|
1559
|
+
this.updateSystemInstructionIfInitialized();
|
|
1560
|
+
}
|
|
1561
|
+
/**
|
|
1562
|
+
* Reloads agent settings.
|
|
1563
|
+
*/
|
|
1564
|
+
async reloadAgents() {
|
|
1565
|
+
if (this.onReload) {
|
|
1566
|
+
const refreshed = await this.onReload();
|
|
1567
|
+
if (refreshed.agents) {
|
|
1568
|
+
this.agents = refreshed.agents;
|
|
1569
|
+
}
|
|
1570
|
+
}
|
|
1115
1571
|
}
|
|
1116
1572
|
isInteractive() {
|
|
1117
1573
|
return this.interactive;
|
|
@@ -1119,6 +1575,9 @@ export class Config {
|
|
|
1119
1575
|
getUseRipgrep() {
|
|
1120
1576
|
return this.useRipgrep;
|
|
1121
1577
|
}
|
|
1578
|
+
getUseBackgroundColor() {
|
|
1579
|
+
return this.useBackgroundColor;
|
|
1580
|
+
}
|
|
1122
1581
|
getEnableInteractiveShell() {
|
|
1123
1582
|
return this.enableInteractiveShell;
|
|
1124
1583
|
}
|
|
@@ -1156,17 +1615,14 @@ export class Config {
|
|
|
1156
1615
|
getEnablePromptCompletion() {
|
|
1157
1616
|
return this.enablePromptCompletion;
|
|
1158
1617
|
}
|
|
1159
|
-
getEnableToolOutputTruncation() {
|
|
1160
|
-
return this.enableToolOutputTruncation;
|
|
1161
|
-
}
|
|
1162
1618
|
getTruncateToolOutputThreshold() {
|
|
1163
1619
|
return Math.min(
|
|
1164
1620
|
// Estimate remaining context window in characters (1 token ~= 4 chars).
|
|
1165
1621
|
4 *
|
|
1166
1622
|
(tokenLimit(this.model) - uiTelemetryService.getLastPromptTokenCount()), this.truncateToolOutputThreshold);
|
|
1167
1623
|
}
|
|
1168
|
-
|
|
1169
|
-
return this.
|
|
1624
|
+
getNextCompressionTruncationId() {
|
|
1625
|
+
return ++this.compressionTruncationCounter;
|
|
1170
1626
|
}
|
|
1171
1627
|
getUseWriteTodos() {
|
|
1172
1628
|
return this.useWriteTodos;
|
|
@@ -1195,19 +1651,15 @@ export class Config {
|
|
|
1195
1651
|
getEnableHooks() {
|
|
1196
1652
|
return this.enableHooks;
|
|
1197
1653
|
}
|
|
1198
|
-
|
|
1199
|
-
return this.
|
|
1200
|
-
}
|
|
1201
|
-
getIntrospectionAgentSettings() {
|
|
1202
|
-
return this.introspectionAgentSettings;
|
|
1654
|
+
getEnableHooksUI() {
|
|
1655
|
+
return this.enableHooksUI;
|
|
1203
1656
|
}
|
|
1204
1657
|
async createToolRegistry() {
|
|
1205
1658
|
const registry = new ToolRegistry(this, this.messageBus);
|
|
1206
1659
|
// helper to create & register core tools that are enabled
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
const
|
|
1210
|
-
const toolName = ToolClass.Name || className;
|
|
1660
|
+
const maybeRegister = (toolClass, registerFn) => {
|
|
1661
|
+
const className = toolClass.name;
|
|
1662
|
+
const toolName = toolClass.Name || className;
|
|
1211
1663
|
const coreTools = this.getCoreTools();
|
|
1212
1664
|
// On some platforms, the className can be minified to _ClassName.
|
|
1213
1665
|
const normalizedClassName = className.replace(/^_+/, '');
|
|
@@ -1219,13 +1671,11 @@ export class Config {
|
|
|
1219
1671
|
tool.startsWith(`${normalizedClassName}(`));
|
|
1220
1672
|
}
|
|
1221
1673
|
if (isEnabled) {
|
|
1222
|
-
|
|
1223
|
-
const toolArgs = [...args, this.getMessageBus()];
|
|
1224
|
-
registry.registerTool(new ToolClass(...toolArgs));
|
|
1674
|
+
registerFn();
|
|
1225
1675
|
}
|
|
1226
1676
|
};
|
|
1227
|
-
|
|
1228
|
-
|
|
1677
|
+
maybeRegister(LSTool, () => registry.registerTool(new LSTool(this, this.messageBus)));
|
|
1678
|
+
maybeRegister(ReadFileTool, () => registry.registerTool(new ReadFileTool(this, this.messageBus)));
|
|
1229
1679
|
if (this.getUseRipgrep()) {
|
|
1230
1680
|
let useRipgrep = false;
|
|
1231
1681
|
let errorString = undefined;
|
|
@@ -1236,43 +1686,58 @@ export class Config {
|
|
|
1236
1686
|
errorString = String(error);
|
|
1237
1687
|
}
|
|
1238
1688
|
if (useRipgrep) {
|
|
1239
|
-
|
|
1689
|
+
maybeRegister(RipGrepTool, () => registry.registerTool(new RipGrepTool(this, this.messageBus)));
|
|
1240
1690
|
}
|
|
1241
1691
|
else {
|
|
1242
1692
|
logRipgrepFallback(this, new RipgrepFallbackEvent(errorString));
|
|
1243
|
-
|
|
1693
|
+
maybeRegister(GrepTool, () => registry.registerTool(new GrepTool(this, this.messageBus)));
|
|
1244
1694
|
}
|
|
1245
1695
|
}
|
|
1246
1696
|
else {
|
|
1247
|
-
|
|
1248
|
-
}
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1697
|
+
maybeRegister(GrepTool, () => registry.registerTool(new GrepTool(this, this.messageBus)));
|
|
1698
|
+
}
|
|
1699
|
+
maybeRegister(GlobTool, () => registry.registerTool(new GlobTool(this, this.messageBus)));
|
|
1700
|
+
maybeRegister(ActivateSkillTool, () => registry.registerTool(new ActivateSkillTool(this, this.messageBus)));
|
|
1701
|
+
maybeRegister(EditTool, () => registry.registerTool(new EditTool(this, this.messageBus)));
|
|
1702
|
+
maybeRegister(WriteFileTool, () => registry.registerTool(new WriteFileTool(this, this.messageBus)));
|
|
1703
|
+
maybeRegister(WebFetchTool, () => registry.registerTool(new WebFetchTool(this, this.messageBus)));
|
|
1704
|
+
maybeRegister(ShellTool, () => registry.registerTool(new ShellTool(this, this.messageBus)));
|
|
1705
|
+
maybeRegister(MemoryTool, () => registry.registerTool(new MemoryTool(this.messageBus)));
|
|
1706
|
+
maybeRegister(WebSearchTool, () => registry.registerTool(new WebSearchTool(this, this.messageBus)));
|
|
1707
|
+
maybeRegister(AskUserTool, () => registry.registerTool(new AskUserTool(this.messageBus)));
|
|
1257
1708
|
if (this.getUseWriteTodos()) {
|
|
1258
|
-
|
|
1709
|
+
maybeRegister(WriteTodosTool, () => registry.registerTool(new WriteTodosTool(this.messageBus)));
|
|
1259
1710
|
}
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
this.getCodebaseInvestigatorSettings().enabled) {
|
|
1264
|
-
// Check if the delegate tool itself is allowed (if allowedTools is set)
|
|
1265
|
-
const allowedTools = this.getAllowedTools();
|
|
1266
|
-
const isAllowed = !allowedTools || allowedTools.includes(DELEGATE_TO_AGENT_TOOL_NAME);
|
|
1267
|
-
if (isAllowed) {
|
|
1268
|
-
const delegateTool = new DelegateToAgentTool(this.agentRegistry, this, this.getMessageBus());
|
|
1269
|
-
registry.registerTool(delegateTool);
|
|
1270
|
-
}
|
|
1711
|
+
if (this.isPlanEnabled()) {
|
|
1712
|
+
maybeRegister(ExitPlanModeTool, () => registry.registerTool(new ExitPlanModeTool(this, this.messageBus)));
|
|
1713
|
+
maybeRegister(EnterPlanModeTool, () => registry.registerTool(new EnterPlanModeTool(this, this.messageBus)));
|
|
1271
1714
|
}
|
|
1715
|
+
// Register Subagents as Tools
|
|
1716
|
+
this.registerSubAgentTools(registry);
|
|
1272
1717
|
await registry.discoverAllTools();
|
|
1273
1718
|
registry.sortTools();
|
|
1274
1719
|
return registry;
|
|
1275
1720
|
}
|
|
1721
|
+
/**
|
|
1722
|
+
* Registers SubAgentTools for all available agents.
|
|
1723
|
+
*/
|
|
1724
|
+
registerSubAgentTools(registry) {
|
|
1725
|
+
const agentsOverrides = this.getAgentsSettings().overrides ?? {};
|
|
1726
|
+
if (this.isAgentsEnabled() ||
|
|
1727
|
+
agentsOverrides['codebase_investigator']?.enabled !== false ||
|
|
1728
|
+
agentsOverrides['cli_help']?.enabled !== false) {
|
|
1729
|
+
const definitions = this.agentRegistry.getAllDefinitions();
|
|
1730
|
+
for (const definition of definitions) {
|
|
1731
|
+
try {
|
|
1732
|
+
const tool = new SubagentTool(definition, this, this.getMessageBus());
|
|
1733
|
+
registry.registerTool(tool);
|
|
1734
|
+
}
|
|
1735
|
+
catch (e) {
|
|
1736
|
+
debugLogger.warn(`Failed to register tool for agent ${definition.name}: ${getErrorMessage(e)}`);
|
|
1737
|
+
}
|
|
1738
|
+
}
|
|
1739
|
+
}
|
|
1740
|
+
}
|
|
1276
1741
|
/**
|
|
1277
1742
|
* Get the hook system instance
|
|
1278
1743
|
*/
|
|
@@ -1291,6 +1756,14 @@ export class Config {
|
|
|
1291
1756
|
getProjectHooks() {
|
|
1292
1757
|
return this.projectHooks;
|
|
1293
1758
|
}
|
|
1759
|
+
/**
|
|
1760
|
+
* Update the list of disabled hooks dynamically.
|
|
1761
|
+
* This is used to keep the running system in sync with settings changes
|
|
1762
|
+
* without risk of loading new hook definitions into memory.
|
|
1763
|
+
*/
|
|
1764
|
+
updateDisabledHooks(disabledHooks) {
|
|
1765
|
+
this.disabledHooks = disabledHooks;
|
|
1766
|
+
}
|
|
1294
1767
|
/**
|
|
1295
1768
|
* Get disabled hooks list
|
|
1296
1769
|
*/
|
|
@@ -1347,6 +1820,32 @@ export class Config {
|
|
|
1347
1820
|
});
|
|
1348
1821
|
debugLogger.debug('Experiments loaded', summaryString);
|
|
1349
1822
|
}
|
|
1823
|
+
onAgentsRefreshed = async () => {
|
|
1824
|
+
if (this.toolRegistry) {
|
|
1825
|
+
this.registerSubAgentTools(this.toolRegistry);
|
|
1826
|
+
}
|
|
1827
|
+
// Propagate updates to the active chat session
|
|
1828
|
+
const client = this.getGeminiClient();
|
|
1829
|
+
if (client?.isInitialized()) {
|
|
1830
|
+
await client.setTools();
|
|
1831
|
+
client.updateSystemInstruction();
|
|
1832
|
+
}
|
|
1833
|
+
else {
|
|
1834
|
+
debugLogger.debug('[Config] GeminiClient not initialized; skipping live prompt/tool refresh.');
|
|
1835
|
+
}
|
|
1836
|
+
};
|
|
1837
|
+
/**
|
|
1838
|
+
* Disposes of resources and removes event listeners.
|
|
1839
|
+
*/
|
|
1840
|
+
async dispose() {
|
|
1841
|
+
this.logCurrentModeDuration(this.getApprovalMode());
|
|
1842
|
+
coreEvents.off(CoreEvent.AgentsRefreshed, this.onAgentsRefreshed);
|
|
1843
|
+
this.agentRegistry?.dispose();
|
|
1844
|
+
this.geminiClient?.dispose();
|
|
1845
|
+
if (this.mcpClientManager) {
|
|
1846
|
+
await this.mcpClientManager.stop();
|
|
1847
|
+
}
|
|
1848
|
+
}
|
|
1350
1849
|
}
|
|
1351
1850
|
// Export model constants for use in CLI
|
|
1352
1851
|
export { DEFAULT_GEMINI_FLASH_MODEL };
|