@office-ai/aioncli-core 0.18.6 → 0.24.0-preview.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/docs/CONTRIBUTING.md +546 -0
- package/dist/docs/architecture.md +80 -0
- package/dist/docs/assets/connected_devtools.png +0 -0
- package/dist/docs/assets/gemini-screenshot.png +0 -0
- package/dist/docs/assets/release_patch.png +0 -0
- package/dist/docs/assets/theme-ansi-light.png +0 -0
- package/dist/docs/assets/theme-ansi.png +0 -0
- package/dist/docs/assets/theme-atom-one.png +0 -0
- package/dist/docs/assets/theme-ayu-light.png +0 -0
- package/dist/docs/assets/theme-ayu.png +0 -0
- package/dist/docs/assets/theme-custom.png +0 -0
- package/dist/docs/assets/theme-default-light.png +0 -0
- package/dist/docs/assets/theme-default.png +0 -0
- package/dist/docs/assets/theme-dracula.png +0 -0
- package/dist/docs/assets/theme-github-light.png +0 -0
- package/dist/docs/assets/theme-github.png +0 -0
- package/dist/docs/assets/theme-google-light.png +0 -0
- package/dist/docs/assets/theme-xcode-light.png +0 -0
- package/dist/docs/changelogs/index.md +592 -0
- package/dist/docs/changelogs/latest.md +225 -0
- package/dist/docs/changelogs/preview.md +129 -0
- package/dist/docs/changelogs/releases.md +896 -0
- package/dist/docs/cli/authentication.md +3 -0
- package/dist/docs/cli/checkpointing.md +94 -0
- package/dist/docs/cli/commands.md +354 -0
- package/dist/docs/cli/configuration.md +780 -0
- package/dist/docs/cli/custom-commands.md +315 -0
- package/dist/docs/cli/enterprise.md +565 -0
- package/dist/docs/cli/gemini-ignore.md +71 -0
- package/dist/docs/cli/gemini-md.md +108 -0
- package/dist/docs/cli/generation-settings.md +210 -0
- package/dist/docs/cli/headless.md +388 -0
- package/dist/docs/cli/index.md +63 -0
- package/dist/docs/cli/keyboard-shortcuts.md +143 -0
- package/dist/docs/cli/model-routing.md +37 -0
- package/dist/docs/cli/model.md +62 -0
- package/dist/docs/cli/sandbox.md +171 -0
- package/dist/docs/cli/session-management.md +158 -0
- package/dist/docs/cli/settings.md +114 -0
- package/dist/docs/cli/skills.md +156 -0
- package/dist/docs/cli/system-prompt.md +93 -0
- package/dist/docs/cli/telemetry.md +791 -0
- package/dist/docs/cli/themes.md +237 -0
- package/dist/docs/cli/token-caching.md +20 -0
- package/dist/docs/cli/trusted-folders.md +95 -0
- package/dist/docs/cli/tutorials/skills-getting-started.md +124 -0
- package/dist/docs/cli/tutorials.md +87 -0
- package/dist/docs/cli/uninstall.md +47 -0
- package/dist/docs/core/index.md +101 -0
- package/dist/docs/core/memport.md +244 -0
- package/dist/docs/core/policy-engine.md +267 -0
- package/dist/docs/core/tools-api.md +131 -0
- package/dist/docs/examples/proxy-script.md +83 -0
- package/dist/docs/extension.md +160 -0
- package/dist/docs/extensions/extension-releasing.md +183 -0
- package/dist/docs/extensions/getting-started-extensions.md +245 -0
- package/dist/docs/extensions/index.md +293 -0
- package/dist/docs/faq.md +154 -0
- package/dist/docs/get-started/authentication.md +321 -0
- package/dist/docs/get-started/configuration-v1.md +888 -0
- package/dist/docs/get-started/configuration.md +1536 -0
- package/dist/docs/get-started/deployment.md +143 -0
- package/dist/docs/get-started/examples.md +219 -0
- package/dist/docs/get-started/gemini-3.md +116 -0
- package/dist/docs/get-started/index.md +71 -0
- package/dist/docs/get-started/installation.md +141 -0
- package/dist/docs/hooks/best-practices.md +856 -0
- package/dist/docs/hooks/index.md +687 -0
- package/dist/docs/hooks/reference.md +168 -0
- package/dist/docs/hooks/writing-hooks.md +1026 -0
- package/dist/docs/ide-integration/ide-companion-spec.md +267 -0
- package/dist/docs/ide-integration/index.md +202 -0
- package/dist/docs/index.md +147 -0
- package/dist/docs/integration-tests.md +211 -0
- package/dist/docs/issue-and-pr-automation.md +134 -0
- package/dist/docs/local-development.md +128 -0
- package/dist/docs/mermaid/context.mmd +103 -0
- package/dist/docs/mermaid/render-path.mmd +64 -0
- package/dist/docs/npm.md +62 -0
- package/dist/docs/quota-and-pricing.md +158 -0
- package/dist/docs/release-confidence.md +164 -0
- package/dist/docs/releases.md +540 -0
- package/dist/docs/sidebar.json +301 -0
- package/dist/docs/tools/file-system.md +217 -0
- package/dist/docs/tools/index.md +95 -0
- package/dist/docs/tools/mcp-server.md +1044 -0
- package/dist/docs/tools/memory.md +54 -0
- package/dist/docs/tools/shell.md +260 -0
- package/dist/docs/tools/todos.md +57 -0
- package/dist/docs/tools/web-fetch.md +59 -0
- package/dist/docs/tools/web-search.md +42 -0
- package/dist/docs/tos-privacy.md +96 -0
- package/dist/docs/troubleshooting.md +158 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/src/agents/a2a-client-manager.d.ts +78 -0
- package/dist/src/agents/a2a-client-manager.js +295 -0
- package/dist/src/agents/a2a-client-manager.js.map +1 -0
- package/dist/src/agents/a2a-client-manager.test.d.ts +6 -0
- package/dist/src/agents/a2a-client-manager.test.js +237 -0
- package/dist/src/agents/a2a-client-manager.test.js.map +1 -0
- package/dist/src/agents/a2aUtils.d.ts +28 -0
- package/dist/src/agents/a2aUtils.js +111 -0
- package/dist/src/agents/a2aUtils.js.map +1 -0
- package/dist/src/agents/a2aUtils.test.d.ts +6 -0
- package/dist/src/agents/a2aUtils.test.js +147 -0
- package/dist/src/agents/a2aUtils.test.js.map +1 -0
- package/dist/src/agents/codebase-investigator.d.ts +2 -2
- package/dist/src/agents/codebase-investigator.js +5 -4
- package/dist/src/agents/codebase-investigator.js.map +1 -1
- package/dist/src/agents/delegate-to-agent-tool.d.ts +19 -0
- package/dist/src/agents/delegate-to-agent-tool.js +115 -0
- package/dist/src/agents/delegate-to-agent-tool.js.map +1 -0
- package/dist/src/agents/delegate-to-agent-tool.test.d.ts +6 -0
- package/dist/src/agents/delegate-to-agent-tool.test.js +165 -0
- package/dist/src/agents/delegate-to-agent-tool.test.js.map +1 -0
- package/dist/src/agents/introspection-agent.d.ts +23 -0
- package/dist/src/agents/introspection-agent.js +72 -0
- package/dist/src/agents/introspection-agent.js.map +1 -0
- package/dist/src/agents/introspection-agent.test.d.ts +6 -0
- package/dist/src/agents/introspection-agent.test.js +47 -0
- package/dist/src/agents/introspection-agent.test.js.map +1 -0
- package/dist/src/agents/local-executor.d.ts +108 -0
- package/dist/src/agents/local-executor.js +801 -0
- package/dist/src/agents/local-executor.js.map +1 -0
- package/dist/src/agents/local-executor.test.d.ts +6 -0
- package/dist/src/agents/local-executor.test.js +1380 -0
- package/dist/src/agents/local-executor.test.js.map +1 -0
- package/dist/src/agents/local-invocation.d.ts +45 -0
- package/dist/src/agents/local-invocation.js +101 -0
- package/dist/src/agents/local-invocation.js.map +1 -0
- package/dist/src/agents/local-invocation.test.d.ts +6 -0
- package/dist/src/agents/local-invocation.test.js +218 -0
- package/dist/src/agents/local-invocation.test.js.map +1 -0
- package/dist/src/agents/registry.d.ts +25 -1
- package/dist/src/agents/registry.js +149 -5
- package/dist/src/agents/registry.js.map +1 -1
- package/dist/src/agents/registry.test.js +247 -25
- package/dist/src/agents/registry.test.js.map +1 -1
- package/dist/src/agents/remote-invocation.d.ts +35 -0
- package/dist/src/agents/remote-invocation.js +129 -0
- package/dist/src/agents/remote-invocation.js.map +1 -0
- package/dist/src/agents/remote-invocation.test.d.ts +6 -0
- package/dist/src/agents/remote-invocation.test.js +201 -0
- package/dist/src/agents/remote-invocation.test.js.map +1 -0
- package/dist/src/agents/subagent-tool-wrapper.d.ts +2 -2
- package/dist/src/agents/subagent-tool-wrapper.js +11 -6
- package/dist/src/agents/subagent-tool-wrapper.js.map +1 -1
- package/dist/src/agents/subagent-tool-wrapper.test.js +25 -17
- package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -1
- package/dist/src/agents/toml-loader.d.ts +74 -0
- package/dist/src/agents/toml-loader.js +248 -0
- package/dist/src/agents/toml-loader.js.map +1 -0
- package/dist/src/agents/toml-loader.test.d.ts +6 -0
- package/dist/src/agents/toml-loader.test.js +309 -0
- package/dist/src/agents/toml-loader.test.js.map +1 -0
- package/dist/src/agents/types.d.ts +18 -4
- package/dist/src/availability/errorClassification.d.ts +7 -0
- package/dist/src/availability/errorClassification.js +20 -0
- package/dist/src/availability/errorClassification.js.map +1 -0
- package/dist/src/availability/modelAvailabilityService.d.ts +36 -0
- package/dist/src/availability/modelAvailabilityService.js +87 -0
- package/dist/src/availability/modelAvailabilityService.js.map +1 -0
- package/dist/src/availability/modelAvailabilityService.test.d.ts +6 -0
- package/dist/src/availability/modelAvailabilityService.test.js +140 -0
- package/dist/src/availability/modelAvailabilityService.test.js.map +1 -0
- package/dist/src/availability/modelPolicy.d.ts +49 -0
- package/dist/src/availability/modelPolicy.js +7 -0
- package/dist/src/availability/modelPolicy.js.map +1 -0
- package/dist/src/availability/policyCatalog.d.ts +23 -0
- package/dist/src/availability/policyCatalog.js +82 -0
- package/dist/src/availability/policyCatalog.js.map +1 -0
- package/dist/src/availability/policyCatalog.test.d.ts +6 -0
- package/dist/src/availability/policyCatalog.test.js +70 -0
- package/dist/src/availability/policyCatalog.test.js.map +1 -0
- package/dist/src/availability/policyHelpers.d.ts +52 -0
- package/dist/src/availability/policyHelpers.js +136 -0
- package/dist/src/availability/policyHelpers.js.map +1 -0
- package/dist/src/availability/policyHelpers.test.d.ts +6 -0
- package/dist/src/availability/policyHelpers.test.js +182 -0
- package/dist/src/availability/policyHelpers.test.js.map +1 -0
- package/dist/src/availability/testUtils.d.ts +10 -0
- package/dist/src/availability/testUtils.js +22 -0
- package/dist/src/availability/testUtils.js.map +1 -0
- package/dist/src/code_assist/experiments/client_metadata.js +3 -2
- package/dist/src/code_assist/experiments/client_metadata.js.map +1 -1
- package/dist/src/code_assist/experiments/client_metadata.test.js +7 -10
- package/dist/src/code_assist/experiments/client_metadata.test.js.map +1 -1
- package/dist/src/code_assist/experiments/experiments.js +2 -2
- package/dist/src/code_assist/experiments/experiments.js.map +1 -1
- package/dist/src/code_assist/oauth2.d.ts +2 -0
- package/dist/src/code_assist/oauth2.js +73 -17
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +195 -18
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/server.d.ts +10 -1
- package/dist/src/code_assist/server.js +81 -15
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/server.test.js +221 -25
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/code_assist/setup.js +6 -4
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/code_assist/setup.test.js +63 -0
- package/dist/src/code_assist/setup.test.js.map +1 -1
- package/dist/src/code_assist/telemetry.d.ts +14 -0
- package/dist/src/code_assist/telemetry.js +156 -0
- package/dist/src/code_assist/telemetry.js.map +1 -0
- package/dist/src/code_assist/telemetry.test.d.ts +6 -0
- package/dist/src/code_assist/telemetry.test.js +300 -0
- package/dist/src/code_assist/telemetry.test.js.map +1 -0
- package/dist/src/code_assist/types.d.ts +84 -1
- package/dist/src/code_assist/types.js +21 -0
- package/dist/src/code_assist/types.js.map +1 -1
- package/dist/src/commands/init.d.ts +7 -0
- package/dist/src/commands/init.js +53 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/init.test.d.ts +6 -0
- package/dist/src/commands/init.test.js +25 -0
- package/dist/src/commands/init.test.js.map +1 -0
- package/dist/src/commands/restore.d.ts +9 -0
- package/dist/src/commands/restore.js +46 -0
- package/dist/src/commands/restore.js.map +1 -0
- package/dist/src/commands/restore.test.d.ts +6 -0
- package/dist/src/commands/restore.test.js +137 -0
- package/dist/src/commands/restore.test.js.map +1 -0
- package/dist/src/commands/types.d.ts +41 -0
- package/dist/src/commands/types.js +7 -0
- package/dist/src/commands/types.js.map +1 -0
- package/dist/src/config/config.d.ts +120 -23
- package/dist/src/config/config.js +336 -116
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +373 -95
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/defaultModelConfigs.js +46 -0
- package/dist/src/config/defaultModelConfigs.js.map +1 -1
- package/dist/src/config/flashFallback.test.js +11 -35
- package/dist/src/config/flashFallback.test.js.map +1 -1
- package/dist/src/config/models.d.ts +29 -15
- package/dist/src/config/models.js +78 -28
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/models.test.js +91 -77
- package/dist/src/config/models.test.js.map +1 -1
- package/dist/src/config/storage.d.ts +4 -0
- package/dist/src/config/storage.js +12 -0
- package/dist/src/config/storage.js.map +1 -1
- package/dist/src/config/storage.test.js +16 -0
- package/dist/src/config/storage.test.js.map +1 -1
- package/dist/src/confirmation-bus/message-bus.d.ts +6 -0
- package/dist/src/confirmation-bus/message-bus.js +66 -3
- package/dist/src/confirmation-bus/message-bus.js.map +1 -1
- package/dist/src/confirmation-bus/types.d.ts +29 -2
- package/dist/src/confirmation-bus/types.js +3 -0
- package/dist/src/confirmation-bus/types.js.map +1 -1
- package/dist/src/core/baseLlmClient.d.ts +30 -2
- package/dist/src/core/baseLlmClient.js +107 -49
- package/dist/src/core/baseLlmClient.js.map +1 -1
- package/dist/src/core/baseLlmClient.test.js +271 -13
- package/dist/src/core/baseLlmClient.test.js.map +1 -1
- package/dist/src/core/client.d.ts +5 -1
- package/dist/src/core/client.js +241 -63
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +462 -72
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/clientHookTriggers.d.ts +36 -0
- package/dist/src/core/clientHookTriggers.js +76 -0
- package/dist/src/core/clientHookTriggers.js.map +1 -0
- package/dist/src/core/contentGenerator.js +17 -4
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +132 -3
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/coreToolHookTriggers.d.ts +55 -0
- package/dist/src/core/coreToolHookTriggers.js +304 -0
- package/dist/src/core/coreToolHookTriggers.js.map +1 -0
- package/dist/src/core/coreToolHookTriggers.test.d.ts +6 -0
- package/dist/src/core/coreToolHookTriggers.test.js +191 -0
- package/dist/src/core/coreToolHookTriggers.test.js.map +1 -0
- package/dist/src/core/coreToolScheduler.d.ts +6 -85
- package/dist/src/core/coreToolScheduler.js +69 -267
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +161 -346
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.js +132 -76
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +240 -257
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/geminiChatHookTriggers.d.ts +64 -0
- package/dist/src/core/geminiChatHookTriggers.js +136 -0
- package/dist/src/core/geminiChatHookTriggers.js.map +1 -0
- package/dist/src/core/geminiChat_network_retry.test.d.ts +6 -0
- package/dist/src/core/geminiChat_network_retry.test.js +196 -0
- package/dist/src/core/geminiChat_network_retry.test.js.map +1 -0
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.js +23 -6
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +13 -8
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/openaiContentGenerator.d.ts +25 -0
- package/dist/src/core/openaiContentGenerator.js +243 -14
- package/dist/src/core/openaiContentGenerator.js.map +1 -1
- package/dist/src/core/prompts.js +82 -26
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/prompts.test.js +102 -3
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/core/sessionHookTriggers.d.ts +29 -0
- package/dist/src/core/sessionHookTriggers.js +75 -0
- package/dist/src/core/sessionHookTriggers.js.map +1 -0
- package/dist/src/core/turn.d.ts +34 -21
- package/dist/src/core/turn.js +33 -13
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/core/turn.test.js +0 -5
- package/dist/src/core/turn.test.js.map +1 -1
- package/dist/src/fallback/handler.js +101 -93
- package/dist/src/fallback/handler.js.map +1 -1
- package/dist/src/fallback/handler.test.js +186 -173
- package/dist/src/fallback/handler.test.js.map +1 -1
- package/dist/src/fallback/types.d.ts +8 -0
- package/dist/src/generated/git-commit.d.ts +3 -3
- package/dist/src/generated/git-commit.js +3 -3
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/hooks/hookAggregator.js +7 -0
- package/dist/src/hooks/hookAggregator.js.map +1 -1
- package/dist/src/hooks/hookEventHandler.d.ts +113 -0
- package/dist/src/hooks/hookEventHandler.js +571 -0
- package/dist/src/hooks/hookEventHandler.js.map +1 -0
- package/dist/src/hooks/hookEventHandler.test.d.ts +6 -0
- package/dist/src/hooks/hookEventHandler.test.js +461 -0
- package/dist/src/hooks/hookEventHandler.test.js.map +1 -0
- package/dist/src/hooks/hookPlanner.d.ts +1 -5
- package/dist/src/hooks/hookPlanner.js +2 -7
- package/dist/src/hooks/hookPlanner.js.map +1 -1
- package/dist/src/hooks/hookPlanner.test.js +62 -2
- package/dist/src/hooks/hookPlanner.test.js.map +1 -1
- package/dist/src/hooks/hookRegistry.d.ts +6 -18
- package/dist/src/hooks/hookRegistry.js +49 -35
- package/dist/src/hooks/hookRegistry.js.map +1 -1
- package/dist/src/hooks/hookRegistry.test.js +167 -8
- package/dist/src/hooks/hookRegistry.test.js.map +1 -1
- package/dist/src/hooks/hookRunner.d.ts +5 -3
- package/dist/src/hooks/hookRunner.js +74 -18
- package/dist/src/hooks/hookRunner.js.map +1 -1
- package/dist/src/hooks/hookRunner.test.js +174 -36
- package/dist/src/hooks/hookRunner.test.js.map +1 -1
- package/dist/src/hooks/hookSystem.d.ts +40 -0
- package/dist/src/hooks/hookSystem.js +65 -0
- package/dist/src/hooks/hookSystem.js.map +1 -0
- package/dist/src/hooks/hookSystem.test.d.ts +6 -0
- package/dist/src/hooks/hookSystem.test.js +319 -0
- package/dist/src/hooks/hookSystem.test.js.map +1 -0
- package/dist/src/hooks/index.d.ts +17 -0
- package/dist/src/hooks/index.js +18 -0
- package/dist/src/hooks/index.js.map +1 -0
- package/dist/src/hooks/trustedHooks.d.ts +28 -0
- package/dist/src/hooks/trustedHooks.js +90 -0
- package/dist/src/hooks/trustedHooks.js.map +1 -0
- package/dist/src/hooks/trustedHooks.test.d.ts +6 -0
- package/dist/src/hooks/trustedHooks.test.js +154 -0
- package/dist/src/hooks/trustedHooks.test.js.map +1 -0
- package/dist/src/hooks/types.d.ts +21 -11
- package/dist/src/hooks/types.js +31 -27
- package/dist/src/hooks/types.js.map +1 -1
- package/dist/src/hooks/types.test.js +5 -24
- package/dist/src/hooks/types.test.js.map +1 -1
- package/dist/src/ide/detect-ide.test.js +32 -1
- package/dist/src/ide/detect-ide.test.js.map +1 -1
- package/dist/src/ide/ide-client.js +9 -4
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-client.test.js +17 -0
- package/dist/src/ide/ide-client.test.js.map +1 -1
- package/dist/src/ide/ide-installer.test.js +1 -1
- package/dist/src/ide/ide-installer.test.js.map +1 -1
- package/dist/src/ide/types.d.ts +4 -4
- package/dist/src/index.d.ts +17 -1
- package/dist/src/index.js +18 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/auth-provider.d.ts +16 -0
- package/dist/src/mcp/auth-provider.js +7 -0
- package/dist/src/mcp/auth-provider.js.map +1 -0
- package/dist/src/mcp/google-auth-provider.d.ts +10 -2
- package/dist/src/mcp/google-auth-provider.js +28 -0
- package/dist/src/mcp/google-auth-provider.js.map +1 -1
- package/dist/src/mcp/google-auth-provider.test.js +45 -0
- package/dist/src/mcp/google-auth-provider.test.js.map +1 -1
- package/dist/src/mcp/oauth-provider.js +6 -2
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/oauth-provider.test.js +4 -1
- package/dist/src/mcp/oauth-provider.test.js.map +1 -1
- package/dist/src/mcp/oauth-utils.d.ts +8 -1
- package/dist/src/mcp/oauth-utils.js +31 -2
- package/dist/src/mcp/oauth-utils.js.map +1 -1
- package/dist/src/mcp/oauth-utils.test.js +42 -0
- package/dist/src/mcp/oauth-utils.test.js.map +1 -1
- package/dist/src/mcp/sa-impersonation-provider.d.ts +2 -2
- package/dist/src/mcp/sa-impersonation-provider.js.map +1 -1
- package/dist/src/mcp/token-storage/hybrid-token-storage.js +1 -1
- package/dist/src/mcp/token-storage/hybrid-token-storage.js.map +1 -1
- package/dist/src/mcp/token-storage/keychain-token-storage.js +1 -1
- package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -1
- package/dist/src/output/json-formatter.d.ts +2 -2
- package/dist/src/output/json-formatter.js +6 -3
- package/dist/src/output/json-formatter.js.map +1 -1
- package/dist/src/output/json-formatter.test.js +37 -9
- package/dist/src/output/json-formatter.test.js.map +1 -1
- package/dist/src/output/stream-json-formatter.js +6 -0
- package/dist/src/output/stream-json-formatter.js.map +1 -1
- package/dist/src/output/stream-json-formatter.test.js +98 -100
- package/dist/src/output/stream-json-formatter.test.js.map +1 -1
- package/dist/src/output/types.d.ts +3 -0
- package/dist/src/output/types.js.map +1 -1
- package/dist/src/policy/config.js +140 -15
- package/dist/src/policy/config.js.map +1 -1
- package/dist/src/policy/config.test.js +21 -0
- package/dist/src/policy/config.test.js.map +1 -1
- package/dist/src/policy/persistence.test.d.ts +6 -0
- package/dist/src/policy/persistence.test.js +154 -0
- package/dist/src/policy/persistence.test.js.map +1 -0
- package/dist/src/policy/policies/agent.toml +31 -0
- package/dist/src/policy/policies/read-only.toml +5 -0
- package/dist/src/policy/policies/write.toml +5 -0
- package/dist/src/policy/policies/yolo.toml +1 -0
- package/dist/src/policy/policy-engine.d.ts +30 -1
- package/dist/src/policy/policy-engine.js +192 -5
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/policy-engine.test.js +520 -3
- package/dist/src/policy/policy-engine.test.js.map +1 -1
- package/dist/src/policy/policy-updater.test.d.ts +6 -0
- package/dist/src/policy/policy-updater.test.js +116 -0
- package/dist/src/policy/policy-updater.test.js.map +1 -0
- package/dist/src/policy/shell-safety.test.d.ts +6 -0
- package/dist/src/policy/shell-safety.test.js +75 -0
- package/dist/src/policy/shell-safety.test.js.map +1 -0
- package/dist/src/policy/toml-loader.d.ts +3 -5
- package/dist/src/policy/toml-loader.js +12 -60
- package/dist/src/policy/toml-loader.js.map +1 -1
- package/dist/src/policy/toml-loader.test.js +38 -7
- package/dist/src/policy/toml-loader.test.js.map +1 -1
- package/dist/src/policy/types.d.ts +72 -1
- package/dist/src/policy/types.js +21 -0
- package/dist/src/policy/types.js.map +1 -1
- package/dist/src/policy/utils.d.ts +21 -0
- package/dist/src/policy/utils.js +42 -0
- package/dist/src/policy/utils.js.map +1 -0
- package/dist/src/policy/utils.test.d.ts +6 -0
- package/dist/src/policy/utils.test.js +64 -0
- package/dist/src/policy/utils.test.js.map +1 -0
- package/dist/src/resources/resource-registry.d.ts +30 -0
- package/dist/src/resources/resource-registry.js +57 -0
- package/dist/src/resources/resource-registry.js.map +1 -0
- package/dist/src/resources/resource-registry.test.d.ts +6 -0
- package/dist/src/resources/resource-registry.test.js +54 -0
- package/dist/src/resources/resource-registry.test.js.map +1 -0
- package/dist/src/routing/modelRouterService.js +0 -15
- package/dist/src/routing/modelRouterService.js.map +1 -1
- package/dist/src/routing/modelRouterService.test.js +0 -62
- package/dist/src/routing/modelRouterService.test.js.map +1 -1
- package/dist/src/routing/strategies/classifierStrategy.js +10 -21
- package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
- package/dist/src/routing/strategies/classifierStrategy.test.js +2 -1
- package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/compositeStrategy.js +4 -2
- package/dist/src/routing/strategies/compositeStrategy.js.map +1 -1
- package/dist/src/routing/strategies/compositeStrategy.test.js +11 -10
- package/dist/src/routing/strategies/compositeStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.js +20 -12
- package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.test.js +63 -39
- package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/overrideStrategy.js +3 -2
- package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
- package/dist/src/safety/checker-runner.js +17 -6
- package/dist/src/safety/checker-runner.js.map +1 -1
- package/dist/src/scheduler/tool-executor.d.ts +22 -0
- package/dist/src/scheduler/tool-executor.js +198 -0
- package/dist/src/scheduler/tool-executor.js.map +1 -0
- package/dist/src/scheduler/tool-executor.test.d.ts +6 -0
- package/dist/src/scheduler/tool-executor.test.js +231 -0
- package/dist/src/scheduler/tool-executor.test.js.map +1 -0
- package/dist/src/scheduler/types.d.ts +95 -0
- package/dist/src/scheduler/types.js +7 -0
- package/dist/src/scheduler/types.js.map +1 -0
- package/dist/src/services/chatCompressionService.d.ts +1 -0
- package/dist/src/services/chatCompressionService.js +38 -8
- package/dist/src/services/chatCompressionService.js.map +1 -1
- package/dist/src/services/chatCompressionService.test.js +35 -31
- package/dist/src/services/chatCompressionService.test.js.map +1 -1
- package/dist/src/services/chatRecordingService.d.ts +14 -0
- package/dist/src/services/chatRecordingService.js +37 -0
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/contextManager.d.ts +29 -0
- package/dist/src/services/contextManager.js +71 -0
- package/dist/src/services/contextManager.js.map +1 -0
- package/dist/src/services/contextManager.test.d.ts +6 -0
- package/dist/src/services/contextManager.test.js +104 -0
- package/dist/src/services/contextManager.test.js.map +1 -0
- package/dist/src/services/environmentSanitization.d.ts +15 -0
- package/dist/src/services/environmentSanitization.js +141 -0
- package/dist/src/services/environmentSanitization.js.map +1 -0
- package/dist/src/services/environmentSanitization.test.d.ts +6 -0
- package/dist/src/services/environmentSanitization.test.js +284 -0
- package/dist/src/services/environmentSanitization.test.js.map +1 -0
- package/dist/src/services/fileSystemService.d.ts +0 -9
- package/dist/src/services/fileSystemService.js +0 -11
- package/dist/src/services/fileSystemService.js.map +1 -1
- package/dist/src/services/gitService.js +18 -2
- package/dist/src/services/gitService.js.map +1 -1
- package/dist/src/services/gitService.test.js +56 -0
- package/dist/src/services/gitService.test.js.map +1 -1
- package/dist/src/services/loopDetectionService.js +5 -4
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/loopDetectionService.test.js +14 -8
- package/dist/src/services/loopDetectionService.test.js.map +1 -1
- package/dist/src/services/modelConfig.golden.test.js +32 -0
- package/dist/src/services/modelConfig.golden.test.js.map +1 -1
- package/dist/src/services/modelConfig.integration.test.js +1 -1
- package/dist/src/services/modelConfig.integration.test.js.map +1 -1
- package/dist/src/services/modelConfigService.d.ts +4 -0
- package/dist/src/services/modelConfigService.js +8 -3
- package/dist/src/services/modelConfigService.js.map +1 -1
- package/dist/src/services/modelConfigService.test.js +221 -0
- package/dist/src/services/modelConfigService.test.js.map +1 -1
- package/dist/src/services/modelConfigServiceTestUtils.d.ts +10 -0
- package/dist/src/services/modelConfigServiceTestUtils.js +17 -0
- package/dist/src/services/modelConfigServiceTestUtils.js.map +1 -0
- package/dist/src/services/sessionSummaryService.d.ts +28 -0
- package/dist/src/services/sessionSummaryService.js +131 -0
- package/dist/src/services/sessionSummaryService.js.map +1 -0
- package/dist/src/services/sessionSummaryService.test.d.ts +6 -0
- package/dist/src/services/sessionSummaryService.test.js +785 -0
- package/dist/src/services/sessionSummaryService.test.js.map +1 -0
- package/dist/src/services/sessionSummaryUtils.d.ts +16 -0
- package/dist/src/services/sessionSummaryUtils.js +129 -0
- package/dist/src/services/sessionSummaryUtils.js.map +1 -0
- package/dist/src/services/sessionSummaryUtils.test.d.ts +6 -0
- package/dist/src/services/sessionSummaryUtils.test.js +137 -0
- package/dist/src/services/sessionSummaryUtils.test.js.map +1 -0
- package/dist/src/services/shellExecutionService.d.ts +4 -0
- package/dist/src/services/shellExecutionService.js +45 -27
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +240 -8
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/services/test-data/resolved-aliases-retry.golden.json +238 -0
- package/dist/src/services/test-data/resolved-aliases.golden.json +36 -0
- package/dist/src/skills/skillLoader.d.ts +28 -0
- package/dist/src/skills/skillLoader.js +77 -0
- package/dist/src/skills/skillLoader.js.map +1 -0
- package/dist/src/skills/skillLoader.test.d.ts +1 -0
- package/dist/src/skills/skillLoader.test.js +2 -0
- package/dist/src/skills/skillLoader.test.js.map +1 -0
- package/dist/src/skills/skillManager.d.ts +51 -0
- package/dist/src/skills/skillManager.js +89 -0
- package/dist/src/skills/skillManager.js.map +1 -0
- package/dist/src/skills/skillManager.test.d.ts +6 -0
- package/dist/src/skills/skillManager.test.js +128 -0
- package/dist/src/skills/skillManager.test.js.map +1 -0
- package/dist/src/telemetry/activity-detector.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +11 -7
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +127 -47
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +105 -18
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +9 -3
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +20 -5
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/config.js +2 -0
- package/dist/src/telemetry/config.js.map +1 -1
- package/dist/src/telemetry/config.test.js +25 -0
- package/dist/src/telemetry/config.test.js.map +1 -1
- package/dist/src/telemetry/gcp-exporters.d.ts +4 -3
- package/dist/src/telemetry/gcp-exporters.js +8 -4
- package/dist/src/telemetry/gcp-exporters.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +2 -1
- package/dist/src/telemetry/index.js +2 -1
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +5 -3
- package/dist/src/telemetry/loggers.js +353 -334
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.circular.js +1 -0
- package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +238 -31
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +22 -0
- package/dist/src/telemetry/metrics.js +32 -0
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js +64 -0
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/telemetry/sanitize.d.ts +25 -0
- package/dist/src/telemetry/sanitize.js +48 -0
- package/dist/src/telemetry/sanitize.js.map +1 -0
- package/dist/src/telemetry/sanitize.test.d.ts +6 -0
- package/dist/src/telemetry/sanitize.test.js +279 -0
- package/dist/src/telemetry/sanitize.test.js.map +1 -0
- package/dist/src/telemetry/sdk.d.ts +9 -2
- package/dist/src/telemetry/sdk.js +142 -17
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/sdk.test.js +130 -28
- package/dist/src/telemetry/sdk.test.js.map +1 -1
- package/dist/src/telemetry/semantic.js +1 -1
- package/dist/src/telemetry/semantic.js.map +1 -1
- package/dist/src/telemetry/startupProfiler.d.ts +51 -0
- package/dist/src/telemetry/startupProfiler.js +170 -0
- package/dist/src/telemetry/startupProfiler.js.map +1 -0
- package/dist/src/telemetry/startupProfiler.test.d.ts +6 -0
- package/dist/src/telemetry/startupProfiler.test.js +285 -0
- package/dist/src/telemetry/startupProfiler.test.js.map +1 -0
- package/dist/src/telemetry/telemetry.test.js +10 -3
- package/dist/src/telemetry/telemetry.test.js.map +1 -1
- package/dist/src/telemetry/trace.js +2 -2
- package/dist/src/telemetry/trace.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +62 -16
- package/dist/src/telemetry/types.js +157 -27
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.d.ts +1 -0
- package/dist/src/telemetry/uiTelemetry.js +2 -0
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +4 -0
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/test-utils/mock-message-bus.d.ts +61 -0
- package/dist/src/test-utils/mock-message-bus.js +160 -0
- package/dist/src/test-utils/mock-message-bus.js.map +1 -0
- package/dist/src/test-utils/mock-tool.d.ts +5 -3
- package/dist/src/test-utils/mock-tool.js +12 -11
- package/dist/src/test-utils/mock-tool.js.map +1 -1
- package/dist/src/tools/activate-skill.d.ts +27 -0
- package/dist/src/tools/activate-skill.js +120 -0
- package/dist/src/tools/activate-skill.js.map +1 -0
- package/dist/src/tools/activate-skill.test.d.ts +6 -0
- package/dist/src/tools/activate-skill.test.js +95 -0
- package/dist/src/tools/activate-skill.test.js.map +1 -0
- package/dist/src/tools/confirmation-policy.test.d.ts +6 -0
- package/dist/src/tools/confirmation-policy.test.js +142 -0
- package/dist/src/tools/confirmation-policy.test.js.map +1 -0
- package/dist/src/tools/edit.d.ts +27 -5
- package/dist/src/tools/edit.js +449 -137
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +258 -526
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/get-internal-docs.d.ts +27 -0
- package/dist/src/tools/get-internal-docs.js +129 -0
- package/dist/src/tools/get-internal-docs.js.map +1 -0
- package/dist/src/tools/get-internal-docs.test.d.ts +6 -0
- package/dist/src/tools/get-internal-docs.test.js +57 -0
- package/dist/src/tools/get-internal-docs.test.js.map +1 -0
- package/dist/src/tools/glob.d.ts +2 -2
- package/dist/src/tools/glob.js +1 -1
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +2 -1
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/grep.d.ts +2 -2
- package/dist/src/tools/grep.js +1 -1
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/grep.test.js +5 -4
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/ls.d.ts +2 -2
- package/dist/src/tools/ls.js +2 -2
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/ls.test.js +2 -1
- package/dist/src/tools/ls.test.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.d.ts +3 -1
- package/dist/src/tools/mcp-client-manager.js +42 -9
- package/dist/src/tools/mcp-client-manager.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.test.js +66 -10
- package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +44 -6
- package/dist/src/tools/mcp-client.js +476 -176
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +633 -36
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +2 -2
- package/dist/src/tools/mcp-tool.js +20 -7
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.test.js +35 -5
- package/dist/src/tools/mcp-tool.test.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +3 -3
- package/dist/src/tools/memoryTool.js +3 -4
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/memoryTool.test.js +5 -2
- package/dist/src/tools/memoryTool.test.js.map +1 -1
- package/dist/src/tools/message-bus-integration.test.js +10 -37
- package/dist/src/tools/message-bus-integration.test.js.map +1 -1
- package/dist/src/tools/modifiable-tool.js.map +1 -1
- package/dist/src/tools/modifiable-tool.test.js +22 -13
- package/dist/src/tools/modifiable-tool.test.js.map +1 -1
- package/dist/src/tools/read-file.d.ts +2 -2
- package/dist/src/tools/read-file.js +2 -2
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +3 -2
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.d.ts +2 -2
- package/dist/src/tools/read-many-files.js +7 -6
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +4 -3
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/ripGrep.d.ts +3 -2
- package/dist/src/tools/ripGrep.js +18 -7
- package/dist/src/tools/ripGrep.js.map +1 -1
- package/dist/src/tools/ripGrep.test.js +60 -4
- package/dist/src/tools/ripGrep.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +5 -7
- package/dist/src/tools/shell.js +77 -51
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +59 -63
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/tool-error.d.ts +2 -1
- package/dist/src/tools/tool-error.js +2 -0
- package/dist/src/tools/tool-error.js.map +1 -1
- package/dist/src/tools/tool-names.d.ts +17 -0
- package/dist/src/tools/tool-names.js +59 -0
- package/dist/src/tools/tool-names.js.map +1 -1
- package/dist/src/tools/tool-names.test.d.ts +6 -0
- package/dist/src/tools/tool-names.test.js +43 -0
- package/dist/src/tools/tool-names.test.js.map +1 -0
- package/dist/src/tools/tool-registry.d.ts +11 -7
- package/dist/src/tools/tool-registry.js +15 -10
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +16 -11
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +25 -6
- package/dist/src/tools/tools.js +44 -25
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/tools.test.js +3 -1
- package/dist/src/tools/tools.test.js.map +1 -1
- package/dist/src/tools/web-fetch.d.ts +2 -2
- package/dist/src/tools/web-fetch.js +22 -9
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-fetch.test.js +18 -19
- package/dist/src/tools/web-fetch.test.js.map +1 -1
- package/dist/src/tools/web-search.d.ts +2 -2
- package/dist/src/tools/web-search.js +5 -5
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/web-search.test.js +2 -1
- package/dist/src/tools/web-search.test.js.map +1 -1
- package/dist/src/tools/write-file.d.ts +2 -2
- package/dist/src/tools/write-file.js +10 -4
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +4 -1
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/tools/write-todos.d.ts +2 -2
- package/dist/src/tools/write-todos.js +5 -4
- package/dist/src/tools/write-todos.js.map +1 -1
- package/dist/src/tools/write-todos.test.js +2 -1
- package/dist/src/tools/write-todos.test.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.d.ts +8 -0
- package/dist/src/utils/bfsFileSearch.js +63 -23
- package/dist/src/utils/bfsFileSearch.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.test.js +65 -1
- package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
- package/dist/src/utils/checkpointUtils.d.ts +82 -0
- package/dist/src/utils/checkpointUtils.js +117 -0
- package/dist/src/utils/checkpointUtils.js.map +1 -0
- package/dist/src/utils/checkpointUtils.test.d.ts +6 -0
- package/dist/src/utils/checkpointUtils.test.js +229 -0
- package/dist/src/utils/checkpointUtils.test.js.map +1 -0
- package/dist/src/utils/customHeaderUtils.d.ts +9 -0
- package/dist/src/utils/customHeaderUtils.js +34 -0
- package/dist/src/utils/customHeaderUtils.js.map +1 -0
- package/dist/src/utils/customHeaderUtils.test.d.ts +6 -0
- package/dist/src/utils/customHeaderUtils.test.js +77 -0
- package/dist/src/utils/customHeaderUtils.test.js.map +1 -0
- package/dist/src/utils/debugLogger.d.ts +3 -0
- package/dist/src/utils/debugLogger.js +28 -0
- package/dist/src/utils/debugLogger.js.map +1 -1
- package/dist/src/utils/editCorrector.js +6 -5
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editCorrector.test.js +7 -3
- package/dist/src/utils/editCorrector.test.js.map +1 -1
- package/dist/src/utils/editor.d.ts +9 -1
- package/dist/src/utils/editor.js +23 -14
- package/dist/src/utils/editor.js.map +1 -1
- package/dist/src/utils/environmentContext.d.ts +1 -0
- package/dist/src/utils/environmentContext.js +4 -0
- package/dist/src/utils/environmentContext.js.map +1 -1
- package/dist/src/utils/environmentContext.test.js +2 -0
- package/dist/src/utils/environmentContext.test.js.map +1 -1
- package/dist/src/utils/errorReporting.d.ts +1 -1
- package/dist/src/utils/errorReporting.js +13 -12
- package/dist/src/utils/errorReporting.js.map +1 -1
- package/dist/src/utils/errorReporting.test.js +17 -14
- package/dist/src/utils/errorReporting.test.js.map +1 -1
- package/dist/src/utils/errors.d.ts +8 -0
- package/dist/src/utils/errors.js +39 -2
- package/dist/src/utils/errors.js.map +1 -1
- package/dist/src/utils/errors.test.d.ts +6 -0
- package/dist/src/utils/errors.test.js +155 -0
- package/dist/src/utils/errors.test.js.map +1 -0
- package/dist/src/utils/events.d.ts +49 -19
- package/dist/src/utils/events.js +21 -9
- package/dist/src/utils/events.js.map +1 -1
- package/dist/src/utils/events.test.js +25 -0
- package/dist/src/utils/events.test.js.map +1 -1
- package/dist/src/utils/exitCodes.d.ts +12 -0
- package/dist/src/utils/exitCodes.js +13 -0
- package/dist/src/utils/exitCodes.js.map +1 -0
- package/dist/src/utils/extensionLoader.d.ts +2 -2
- package/dist/src/utils/extensionLoader.js +5 -6
- package/dist/src/utils/extensionLoader.js.map +1 -1
- package/dist/src/utils/extensionLoader.test.js +11 -0
- package/dist/src/utils/extensionLoader.test.js.map +1 -1
- package/dist/src/utils/fetch.d.ts +1 -1
- package/dist/src/utils/fetch.js +3 -3
- package/dist/src/utils/fetch.js.map +1 -1
- package/dist/src/utils/fileUtils.d.ts +4 -0
- package/dist/src/utils/fileUtils.js +53 -0
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +127 -1
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/filesearch/crawlCache.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
- package/dist/src/utils/flashFallback.test.js +1 -1
- package/dist/src/utils/flashFallback.test.js.map +1 -1
- package/dist/src/utils/geminiIgnoreParser.d.ts +11 -0
- package/dist/src/utils/geminiIgnoreParser.js +20 -0
- package/dist/src/utils/geminiIgnoreParser.js.map +1 -1
- package/dist/src/utils/geminiIgnoreParser.test.js +48 -0
- package/dist/src/utils/geminiIgnoreParser.test.js.map +1 -1
- package/dist/src/utils/generateContentResponseUtilities.d.ts +3 -1
- package/dist/src/utils/generateContentResponseUtilities.js +106 -0
- package/dist/src/utils/generateContentResponseUtilities.js.map +1 -1
- package/dist/src/utils/generateContentResponseUtilities.test.js +279 -2
- package/dist/src/utils/generateContentResponseUtilities.test.js.map +1 -1
- package/dist/src/utils/getFolderStructure.js +7 -2
- package/dist/src/utils/getFolderStructure.js.map +1 -1
- package/dist/src/utils/googleErrors.js +31 -18
- package/dist/src/utils/googleErrors.js.map +1 -1
- package/dist/src/utils/googleErrors.test.js +10 -2
- package/dist/src/utils/googleErrors.test.js.map +1 -1
- package/dist/src/utils/googleQuotaErrors.d.ts +3 -3
- package/dist/src/utils/googleQuotaErrors.js +32 -6
- package/dist/src/utils/googleQuotaErrors.js.map +1 -1
- package/dist/src/utils/googleQuotaErrors.test.js +94 -2
- package/dist/src/utils/googleQuotaErrors.test.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.d.ts +5 -0
- package/dist/src/utils/memoryDiscovery.js +9 -5
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +31 -1
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.test.js +4 -0
- package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
- package/dist/src/utils/package.d.ts +14 -0
- package/dist/src/utils/package.js +15 -2
- package/dist/src/utils/package.js.map +1 -1
- package/dist/src/utils/pathCorrector.js +12 -2
- package/dist/src/utils/pathCorrector.js.map +1 -1
- package/dist/src/utils/pathCorrector.test.js +6 -2
- package/dist/src/utils/pathCorrector.test.js.map +1 -1
- package/dist/src/utils/retry.d.ts +11 -0
- package/dist/src/utils/retry.js +62 -21
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/retry.test.js +170 -10
- package/dist/src/utils/retry.test.js.map +1 -1
- package/dist/src/utils/schemaValidator.d.ts +1 -1
- package/dist/src/utils/schemaValidator.js +1 -1
- package/dist/src/utils/shell-permissions.d.ts +52 -0
- package/dist/src/utils/shell-permissions.js +188 -0
- package/dist/src/utils/shell-permissions.js.map +1 -0
- package/dist/src/utils/shell-permissions.test.d.ts +6 -0
- package/dist/src/utils/shell-permissions.test.js +369 -0
- package/dist/src/utils/shell-permissions.test.js.map +1 -0
- package/dist/src/utils/shell-utils.d.ts +16 -47
- package/dist/src/utils/shell-utils.js +99 -195
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/shell-utils.test.js +99 -288
- package/dist/src/utils/shell-utils.test.js.map +1 -1
- package/dist/src/utils/stdio.d.ts +2 -2
- package/dist/src/utils/stdio.js +2 -2
- package/dist/src/utils/stdio.js.map +1 -1
- package/dist/src/utils/stdio.test.js +5 -5
- package/dist/src/utils/stdio.test.js.map +1 -1
- package/dist/src/utils/summarizer.test.js +3 -2
- package/dist/src/utils/summarizer.test.js.map +1 -1
- package/dist/src/utils/terminal.d.ts +4 -0
- package/dist/src/utils/terminal.js +12 -0
- package/dist/src/utils/terminal.js.map +1 -1
- package/dist/src/utils/terminalSerializer.test.js +17 -0
- package/dist/src/utils/terminalSerializer.test.js.map +1 -1
- package/dist/src/utils/tokenCalculation.d.ts +19 -0
- package/dist/src/utils/tokenCalculation.js +85 -0
- package/dist/src/utils/tokenCalculation.js.map +1 -0
- package/dist/src/utils/tokenCalculation.test.d.ts +6 -0
- package/dist/src/utils/tokenCalculation.test.js +87 -0
- package/dist/src/utils/tokenCalculation.test.js.map +1 -0
- package/dist/src/utils/tool-utils.d.ts +9 -0
- package/dist/src/utils/tool-utils.js +29 -0
- package/dist/src/utils/tool-utils.js.map +1 -1
- package/dist/src/utils/tool-utils.test.js +17 -2
- package/dist/src/utils/tool-utils.test.js.map +1 -1
- package/dist/src/utils/version.d.ts +6 -0
- package/dist/src/utils/version.js +15 -0
- package/dist/src/utils/version.js.map +1 -0
- package/dist/src/utils/version.test.d.ts +6 -0
- package/dist/src/utils/version.test.js +39 -0
- package/dist/src/utils/version.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -7
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { Logger } from '@opentelemetry/api-logs';
|
|
7
|
+
import type { Config } from '../config/config.js';
|
|
8
|
+
import type { HookPlanner } from './hookPlanner.js';
|
|
9
|
+
import type { HookRunner } from './hookRunner.js';
|
|
10
|
+
import type { HookAggregator, AggregatedHookResult } from './hookAggregator.js';
|
|
11
|
+
import type { NotificationType, SessionStartSource, SessionEndReason, PreCompressTrigger } from './types.js';
|
|
12
|
+
import type { GenerateContentParameters, GenerateContentResponse } from '@google/genai';
|
|
13
|
+
import type { MessageBus } from '../confirmation-bus/message-bus.js';
|
|
14
|
+
/**
|
|
15
|
+
* Hook event bus that coordinates hook execution across the system
|
|
16
|
+
*/
|
|
17
|
+
export declare class HookEventHandler {
|
|
18
|
+
private readonly config;
|
|
19
|
+
private readonly hookPlanner;
|
|
20
|
+
private readonly hookRunner;
|
|
21
|
+
private readonly hookAggregator;
|
|
22
|
+
private readonly messageBus;
|
|
23
|
+
constructor(config: Config, logger: Logger, hookPlanner: HookPlanner, hookRunner: HookRunner, hookAggregator: HookAggregator, messageBus: MessageBus);
|
|
24
|
+
/**
|
|
25
|
+
* Fire a BeforeTool event
|
|
26
|
+
* Called by handleHookExecutionRequest - executes hooks directly
|
|
27
|
+
*/
|
|
28
|
+
fireBeforeToolEvent(toolName: string, toolInput: Record<string, unknown>): Promise<AggregatedHookResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Fire an AfterTool event
|
|
31
|
+
* Called by handleHookExecutionRequest - executes hooks directly
|
|
32
|
+
*/
|
|
33
|
+
fireAfterToolEvent(toolName: string, toolInput: Record<string, unknown>, toolResponse: Record<string, unknown>): Promise<AggregatedHookResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Fire a BeforeAgent event
|
|
36
|
+
* Called by handleHookExecutionRequest - executes hooks directly
|
|
37
|
+
*/
|
|
38
|
+
fireBeforeAgentEvent(prompt: string): Promise<AggregatedHookResult>;
|
|
39
|
+
/**
|
|
40
|
+
* Fire a Notification event
|
|
41
|
+
*/
|
|
42
|
+
fireNotificationEvent(type: NotificationType, message: string, details: Record<string, unknown>): Promise<AggregatedHookResult>;
|
|
43
|
+
/**
|
|
44
|
+
* Fire an AfterAgent event
|
|
45
|
+
* Called by handleHookExecutionRequest - executes hooks directly
|
|
46
|
+
*/
|
|
47
|
+
fireAfterAgentEvent(prompt: string, promptResponse: string, stopHookActive?: boolean): Promise<AggregatedHookResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Fire a SessionStart event
|
|
50
|
+
*/
|
|
51
|
+
fireSessionStartEvent(source: SessionStartSource): Promise<AggregatedHookResult>;
|
|
52
|
+
/**
|
|
53
|
+
* Fire a SessionEnd event
|
|
54
|
+
*/
|
|
55
|
+
fireSessionEndEvent(reason: SessionEndReason): Promise<AggregatedHookResult>;
|
|
56
|
+
/**
|
|
57
|
+
* Fire a PreCompress event
|
|
58
|
+
*/
|
|
59
|
+
firePreCompressEvent(trigger: PreCompressTrigger): Promise<AggregatedHookResult>;
|
|
60
|
+
/**
|
|
61
|
+
* Fire a BeforeModel event
|
|
62
|
+
* Called by handleHookExecutionRequest - executes hooks directly
|
|
63
|
+
*/
|
|
64
|
+
fireBeforeModelEvent(llmRequest: GenerateContentParameters): Promise<AggregatedHookResult>;
|
|
65
|
+
/**
|
|
66
|
+
* Fire an AfterModel event
|
|
67
|
+
* Called by handleHookExecutionRequest - executes hooks directly
|
|
68
|
+
*/
|
|
69
|
+
fireAfterModelEvent(llmRequest: GenerateContentParameters, llmResponse: GenerateContentResponse): Promise<AggregatedHookResult>;
|
|
70
|
+
/**
|
|
71
|
+
* Fire a BeforeToolSelection event
|
|
72
|
+
* Called by handleHookExecutionRequest - executes hooks directly
|
|
73
|
+
*/
|
|
74
|
+
fireBeforeToolSelectionEvent(llmRequest: GenerateContentParameters): Promise<AggregatedHookResult>;
|
|
75
|
+
/**
|
|
76
|
+
* Execute hooks for a specific event (direct execution without MessageBus)
|
|
77
|
+
* Used as fallback when MessageBus is not available
|
|
78
|
+
*/
|
|
79
|
+
private executeHooks;
|
|
80
|
+
/**
|
|
81
|
+
* Create base hook input with common fields
|
|
82
|
+
*/
|
|
83
|
+
private createBaseInput;
|
|
84
|
+
/**
|
|
85
|
+
* Log hook execution for observability
|
|
86
|
+
*/
|
|
87
|
+
private logHookExecution;
|
|
88
|
+
/**
|
|
89
|
+
* Process common hook output fields centrally
|
|
90
|
+
*/
|
|
91
|
+
private processCommonHookOutputFields;
|
|
92
|
+
/**
|
|
93
|
+
* Get hook name from config for display or telemetry
|
|
94
|
+
*/
|
|
95
|
+
private getHookName;
|
|
96
|
+
/**
|
|
97
|
+
* Get hook name from execution result for telemetry
|
|
98
|
+
*/
|
|
99
|
+
private getHookNameFromResult;
|
|
100
|
+
/**
|
|
101
|
+
* Get hook type from execution result for telemetry
|
|
102
|
+
*/
|
|
103
|
+
private getHookTypeFromResult;
|
|
104
|
+
/**
|
|
105
|
+
* Handle hook execution requests from MessageBus
|
|
106
|
+
* This method routes the request to the appropriate fire*Event method
|
|
107
|
+
* and publishes the response back through MessageBus
|
|
108
|
+
*
|
|
109
|
+
* The request input only contains event-specific fields. This method adds
|
|
110
|
+
* the common base fields (session_id, cwd, etc.) before routing.
|
|
111
|
+
*/
|
|
112
|
+
private handleHookExecutionRequest;
|
|
113
|
+
}
|
|
@@ -0,0 +1,571 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { HookEventName } from './types.js';
|
|
7
|
+
import { defaultHookTranslator } from './hookTranslator.js';
|
|
8
|
+
import { logHookCall } from '../telemetry/loggers.js';
|
|
9
|
+
import { HookCallEvent } from '../telemetry/types.js';
|
|
10
|
+
import { MessageBusType, } from '../confirmation-bus/types.js';
|
|
11
|
+
import { debugLogger } from '../utils/debugLogger.js';
|
|
12
|
+
import { coreEvents } from '../utils/events.js';
|
|
13
|
+
/**
|
|
14
|
+
* Validates that a value is a non-null object
|
|
15
|
+
*/
|
|
16
|
+
function isObject(value) {
|
|
17
|
+
return typeof value === 'object' && value !== null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Validates BeforeTool input fields
|
|
21
|
+
*/
|
|
22
|
+
function validateBeforeToolInput(input) {
|
|
23
|
+
const toolName = input['tool_name'];
|
|
24
|
+
const toolInput = input['tool_input'];
|
|
25
|
+
if (typeof toolName !== 'string') {
|
|
26
|
+
throw new Error('Invalid input for BeforeTool hook event: tool_name must be a string');
|
|
27
|
+
}
|
|
28
|
+
if (!isObject(toolInput)) {
|
|
29
|
+
throw new Error('Invalid input for BeforeTool hook event: tool_input must be an object');
|
|
30
|
+
}
|
|
31
|
+
return { toolName, toolInput };
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Validates AfterTool input fields
|
|
35
|
+
*/
|
|
36
|
+
function validateAfterToolInput(input) {
|
|
37
|
+
const toolName = input['tool_name'];
|
|
38
|
+
const toolInput = input['tool_input'];
|
|
39
|
+
const toolResponse = input['tool_response'];
|
|
40
|
+
if (typeof toolName !== 'string') {
|
|
41
|
+
throw new Error('Invalid input for AfterTool hook event: tool_name must be a string');
|
|
42
|
+
}
|
|
43
|
+
if (!isObject(toolInput)) {
|
|
44
|
+
throw new Error('Invalid input for AfterTool hook event: tool_input must be an object');
|
|
45
|
+
}
|
|
46
|
+
if (!isObject(toolResponse)) {
|
|
47
|
+
throw new Error('Invalid input for AfterTool hook event: tool_response must be an object');
|
|
48
|
+
}
|
|
49
|
+
return { toolName, toolInput, toolResponse };
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Validates BeforeAgent input fields
|
|
53
|
+
*/
|
|
54
|
+
function validateBeforeAgentInput(input) {
|
|
55
|
+
const prompt = input['prompt'];
|
|
56
|
+
if (typeof prompt !== 'string') {
|
|
57
|
+
throw new Error('Invalid input for BeforeAgent hook event: prompt must be a string');
|
|
58
|
+
}
|
|
59
|
+
return { prompt };
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Validates AfterAgent input fields
|
|
63
|
+
*/
|
|
64
|
+
function validateAfterAgentInput(input) {
|
|
65
|
+
const prompt = input['prompt'];
|
|
66
|
+
const promptResponse = input['prompt_response'];
|
|
67
|
+
const stopHookActive = input['stop_hook_active'];
|
|
68
|
+
if (typeof prompt !== 'string') {
|
|
69
|
+
throw new Error('Invalid input for AfterAgent hook event: prompt must be a string');
|
|
70
|
+
}
|
|
71
|
+
if (typeof promptResponse !== 'string') {
|
|
72
|
+
throw new Error('Invalid input for AfterAgent hook event: prompt_response must be a string');
|
|
73
|
+
}
|
|
74
|
+
// stopHookActive defaults to false if not a boolean
|
|
75
|
+
return {
|
|
76
|
+
prompt,
|
|
77
|
+
promptResponse,
|
|
78
|
+
stopHookActive: typeof stopHookActive === 'boolean' ? stopHookActive : false,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Validates model-related input fields (llm_request)
|
|
83
|
+
*/
|
|
84
|
+
function validateModelInput(input, eventName) {
|
|
85
|
+
const llmRequest = input['llm_request'];
|
|
86
|
+
if (!isObject(llmRequest)) {
|
|
87
|
+
throw new Error(`Invalid input for ${eventName} hook event: llm_request must be an object`);
|
|
88
|
+
}
|
|
89
|
+
return { llmRequest: llmRequest };
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Validates AfterModel input fields
|
|
93
|
+
*/
|
|
94
|
+
function validateAfterModelInput(input) {
|
|
95
|
+
const llmRequest = input['llm_request'];
|
|
96
|
+
const llmResponse = input['llm_response'];
|
|
97
|
+
if (!isObject(llmRequest)) {
|
|
98
|
+
throw new Error('Invalid input for AfterModel hook event: llm_request must be an object');
|
|
99
|
+
}
|
|
100
|
+
if (!isObject(llmResponse)) {
|
|
101
|
+
throw new Error('Invalid input for AfterModel hook event: llm_response must be an object');
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
llmRequest: llmRequest,
|
|
105
|
+
llmResponse: llmResponse,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Validates Notification input fields
|
|
110
|
+
*/
|
|
111
|
+
function validateNotificationInput(input) {
|
|
112
|
+
const notificationType = input['notification_type'];
|
|
113
|
+
const message = input['message'];
|
|
114
|
+
const details = input['details'];
|
|
115
|
+
if (typeof notificationType !== 'string') {
|
|
116
|
+
throw new Error('Invalid input for Notification hook event: notification_type must be a string');
|
|
117
|
+
}
|
|
118
|
+
if (typeof message !== 'string') {
|
|
119
|
+
throw new Error('Invalid input for Notification hook event: message must be a string');
|
|
120
|
+
}
|
|
121
|
+
if (!isObject(details)) {
|
|
122
|
+
throw new Error('Invalid input for Notification hook event: details must be an object');
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
notificationType: notificationType,
|
|
126
|
+
message,
|
|
127
|
+
details,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Validates SessionStart input fields
|
|
132
|
+
*/
|
|
133
|
+
function validateSessionStartInput(input) {
|
|
134
|
+
const source = input['source'];
|
|
135
|
+
if (typeof source !== 'string') {
|
|
136
|
+
throw new Error('Invalid input for SessionStart hook event: source must be a string');
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
source: source,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Validates SessionEnd input fields
|
|
144
|
+
*/
|
|
145
|
+
function validateSessionEndInput(input) {
|
|
146
|
+
const reason = input['reason'];
|
|
147
|
+
if (typeof reason !== 'string') {
|
|
148
|
+
throw new Error('Invalid input for SessionEnd hook event: reason must be a string');
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
reason: reason,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Validates PreCompress input fields
|
|
156
|
+
*/
|
|
157
|
+
function validatePreCompressInput(input) {
|
|
158
|
+
const trigger = input['trigger'];
|
|
159
|
+
if (typeof trigger !== 'string') {
|
|
160
|
+
throw new Error('Invalid input for PreCompress hook event: trigger must be a string');
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
trigger: trigger,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Hook event bus that coordinates hook execution across the system
|
|
168
|
+
*/
|
|
169
|
+
export class HookEventHandler {
|
|
170
|
+
config;
|
|
171
|
+
hookPlanner;
|
|
172
|
+
hookRunner;
|
|
173
|
+
hookAggregator;
|
|
174
|
+
messageBus;
|
|
175
|
+
constructor(config, logger, hookPlanner, hookRunner, hookAggregator, messageBus) {
|
|
176
|
+
this.config = config;
|
|
177
|
+
this.hookPlanner = hookPlanner;
|
|
178
|
+
this.hookRunner = hookRunner;
|
|
179
|
+
this.hookAggregator = hookAggregator;
|
|
180
|
+
this.messageBus = messageBus;
|
|
181
|
+
// Subscribe to hook execution requests from MessageBus
|
|
182
|
+
if (this.messageBus) {
|
|
183
|
+
this.messageBus.subscribe(MessageBusType.HOOK_EXECUTION_REQUEST, (request) => this.handleHookExecutionRequest(request));
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Fire a BeforeTool event
|
|
188
|
+
* Called by handleHookExecutionRequest - executes hooks directly
|
|
189
|
+
*/
|
|
190
|
+
async fireBeforeToolEvent(toolName, toolInput) {
|
|
191
|
+
const input = {
|
|
192
|
+
...this.createBaseInput(HookEventName.BeforeTool),
|
|
193
|
+
tool_name: toolName,
|
|
194
|
+
tool_input: toolInput,
|
|
195
|
+
};
|
|
196
|
+
const context = { toolName };
|
|
197
|
+
return this.executeHooks(HookEventName.BeforeTool, input, context);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Fire an AfterTool event
|
|
201
|
+
* Called by handleHookExecutionRequest - executes hooks directly
|
|
202
|
+
*/
|
|
203
|
+
async fireAfterToolEvent(toolName, toolInput, toolResponse) {
|
|
204
|
+
const input = {
|
|
205
|
+
...this.createBaseInput(HookEventName.AfterTool),
|
|
206
|
+
tool_name: toolName,
|
|
207
|
+
tool_input: toolInput,
|
|
208
|
+
tool_response: toolResponse,
|
|
209
|
+
};
|
|
210
|
+
const context = { toolName };
|
|
211
|
+
return this.executeHooks(HookEventName.AfterTool, input, context);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Fire a BeforeAgent event
|
|
215
|
+
* Called by handleHookExecutionRequest - executes hooks directly
|
|
216
|
+
*/
|
|
217
|
+
async fireBeforeAgentEvent(prompt) {
|
|
218
|
+
const input = {
|
|
219
|
+
...this.createBaseInput(HookEventName.BeforeAgent),
|
|
220
|
+
prompt,
|
|
221
|
+
};
|
|
222
|
+
return this.executeHooks(HookEventName.BeforeAgent, input);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Fire a Notification event
|
|
226
|
+
*/
|
|
227
|
+
async fireNotificationEvent(type, message, details) {
|
|
228
|
+
const input = {
|
|
229
|
+
...this.createBaseInput(HookEventName.Notification),
|
|
230
|
+
notification_type: type,
|
|
231
|
+
message,
|
|
232
|
+
details,
|
|
233
|
+
};
|
|
234
|
+
return this.executeHooks(HookEventName.Notification, input);
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Fire an AfterAgent event
|
|
238
|
+
* Called by handleHookExecutionRequest - executes hooks directly
|
|
239
|
+
*/
|
|
240
|
+
async fireAfterAgentEvent(prompt, promptResponse, stopHookActive = false) {
|
|
241
|
+
const input = {
|
|
242
|
+
...this.createBaseInput(HookEventName.AfterAgent),
|
|
243
|
+
prompt,
|
|
244
|
+
prompt_response: promptResponse,
|
|
245
|
+
stop_hook_active: stopHookActive,
|
|
246
|
+
};
|
|
247
|
+
return this.executeHooks(HookEventName.AfterAgent, input);
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Fire a SessionStart event
|
|
251
|
+
*/
|
|
252
|
+
async fireSessionStartEvent(source) {
|
|
253
|
+
const input = {
|
|
254
|
+
...this.createBaseInput(HookEventName.SessionStart),
|
|
255
|
+
source,
|
|
256
|
+
};
|
|
257
|
+
const context = { trigger: source };
|
|
258
|
+
return this.executeHooks(HookEventName.SessionStart, input, context);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Fire a SessionEnd event
|
|
262
|
+
*/
|
|
263
|
+
async fireSessionEndEvent(reason) {
|
|
264
|
+
const input = {
|
|
265
|
+
...this.createBaseInput(HookEventName.SessionEnd),
|
|
266
|
+
reason,
|
|
267
|
+
};
|
|
268
|
+
const context = { trigger: reason };
|
|
269
|
+
return this.executeHooks(HookEventName.SessionEnd, input, context);
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Fire a PreCompress event
|
|
273
|
+
*/
|
|
274
|
+
async firePreCompressEvent(trigger) {
|
|
275
|
+
const input = {
|
|
276
|
+
...this.createBaseInput(HookEventName.PreCompress),
|
|
277
|
+
trigger,
|
|
278
|
+
};
|
|
279
|
+
const context = { trigger };
|
|
280
|
+
return this.executeHooks(HookEventName.PreCompress, input, context);
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Fire a BeforeModel event
|
|
284
|
+
* Called by handleHookExecutionRequest - executes hooks directly
|
|
285
|
+
*/
|
|
286
|
+
async fireBeforeModelEvent(llmRequest) {
|
|
287
|
+
const input = {
|
|
288
|
+
...this.createBaseInput(HookEventName.BeforeModel),
|
|
289
|
+
llm_request: defaultHookTranslator.toHookLLMRequest(llmRequest),
|
|
290
|
+
};
|
|
291
|
+
return this.executeHooks(HookEventName.BeforeModel, input);
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Fire an AfterModel event
|
|
295
|
+
* Called by handleHookExecutionRequest - executes hooks directly
|
|
296
|
+
*/
|
|
297
|
+
async fireAfterModelEvent(llmRequest, llmResponse) {
|
|
298
|
+
const input = {
|
|
299
|
+
...this.createBaseInput(HookEventName.AfterModel),
|
|
300
|
+
llm_request: defaultHookTranslator.toHookLLMRequest(llmRequest),
|
|
301
|
+
llm_response: defaultHookTranslator.toHookLLMResponse(llmResponse),
|
|
302
|
+
};
|
|
303
|
+
return this.executeHooks(HookEventName.AfterModel, input);
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Fire a BeforeToolSelection event
|
|
307
|
+
* Called by handleHookExecutionRequest - executes hooks directly
|
|
308
|
+
*/
|
|
309
|
+
async fireBeforeToolSelectionEvent(llmRequest) {
|
|
310
|
+
const input = {
|
|
311
|
+
...this.createBaseInput(HookEventName.BeforeToolSelection),
|
|
312
|
+
llm_request: defaultHookTranslator.toHookLLMRequest(llmRequest),
|
|
313
|
+
};
|
|
314
|
+
return this.executeHooks(HookEventName.BeforeToolSelection, input);
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Execute hooks for a specific event (direct execution without MessageBus)
|
|
318
|
+
* Used as fallback when MessageBus is not available
|
|
319
|
+
*/
|
|
320
|
+
async executeHooks(eventName, input, context) {
|
|
321
|
+
try {
|
|
322
|
+
// Create execution plan
|
|
323
|
+
const plan = this.hookPlanner.createExecutionPlan(eventName, context);
|
|
324
|
+
if (!plan || plan.hookConfigs.length === 0) {
|
|
325
|
+
return {
|
|
326
|
+
success: true,
|
|
327
|
+
allOutputs: [],
|
|
328
|
+
errors: [],
|
|
329
|
+
totalDuration: 0,
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
const onHookStart = (config, index) => {
|
|
333
|
+
coreEvents.emitHookStart({
|
|
334
|
+
hookName: this.getHookName(config),
|
|
335
|
+
eventName,
|
|
336
|
+
hookIndex: index + 1,
|
|
337
|
+
totalHooks: plan.hookConfigs.length,
|
|
338
|
+
});
|
|
339
|
+
};
|
|
340
|
+
const onHookEnd = (config, result) => {
|
|
341
|
+
coreEvents.emitHookEnd({
|
|
342
|
+
hookName: this.getHookName(config),
|
|
343
|
+
eventName,
|
|
344
|
+
success: result.success,
|
|
345
|
+
});
|
|
346
|
+
};
|
|
347
|
+
// Execute hooks according to the plan's strategy
|
|
348
|
+
const results = plan.sequential
|
|
349
|
+
? await this.hookRunner.executeHooksSequential(plan.hookConfigs, eventName, input, onHookStart, onHookEnd)
|
|
350
|
+
: await this.hookRunner.executeHooksParallel(plan.hookConfigs, eventName, input, onHookStart, onHookEnd);
|
|
351
|
+
// Aggregate results
|
|
352
|
+
const aggregated = this.hookAggregator.aggregateResults(results, eventName);
|
|
353
|
+
// Process common hook output fields centrally
|
|
354
|
+
this.processCommonHookOutputFields(aggregated);
|
|
355
|
+
// Log hook execution
|
|
356
|
+
this.logHookExecution(eventName, input, results, aggregated);
|
|
357
|
+
return aggregated;
|
|
358
|
+
}
|
|
359
|
+
catch (error) {
|
|
360
|
+
debugLogger.error(`Hook event bus error for ${eventName}: ${error}`);
|
|
361
|
+
return {
|
|
362
|
+
success: false,
|
|
363
|
+
allOutputs: [],
|
|
364
|
+
errors: [error instanceof Error ? error : new Error(String(error))],
|
|
365
|
+
totalDuration: 0,
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Create base hook input with common fields
|
|
371
|
+
*/
|
|
372
|
+
createBaseInput(eventName) {
|
|
373
|
+
// Get the transcript path from the ChatRecordingService if available
|
|
374
|
+
const transcriptPath = this.config
|
|
375
|
+
.getGeminiClient()
|
|
376
|
+
?.getChatRecordingService()
|
|
377
|
+
?.getConversationFilePath() ?? '';
|
|
378
|
+
return {
|
|
379
|
+
session_id: this.config.getSessionId(),
|
|
380
|
+
transcript_path: transcriptPath,
|
|
381
|
+
cwd: this.config.getWorkingDir(),
|
|
382
|
+
hook_event_name: eventName,
|
|
383
|
+
timestamp: new Date().toISOString(),
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Log hook execution for observability
|
|
388
|
+
*/
|
|
389
|
+
logHookExecution(eventName, input, results, aggregated) {
|
|
390
|
+
const failedHooks = results.filter((r) => !r.success);
|
|
391
|
+
const successCount = results.length - failedHooks.length;
|
|
392
|
+
const errorCount = failedHooks.length;
|
|
393
|
+
if (errorCount > 0) {
|
|
394
|
+
const failedNames = failedHooks
|
|
395
|
+
.map((r) => this.getHookNameFromResult(r))
|
|
396
|
+
.join(', ');
|
|
397
|
+
debugLogger.warn(`Hook execution for ${eventName}: ${successCount} succeeded, ${errorCount} failed (${failedNames}), ` +
|
|
398
|
+
`total duration: ${aggregated.totalDuration}ms`);
|
|
399
|
+
coreEvents.emitFeedback('warning', `Hook(s) [${failedNames}] failed for event ${eventName}. Press F12 to see the debug drawer for more details.\n`);
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
debugLogger.debug(`Hook execution for ${eventName}: ${successCount} hooks executed successfully, ` +
|
|
403
|
+
`total duration: ${aggregated.totalDuration}ms`);
|
|
404
|
+
}
|
|
405
|
+
// Log individual hook calls to telemetry
|
|
406
|
+
for (const result of results) {
|
|
407
|
+
// Determine hook name and type for telemetry
|
|
408
|
+
const hookName = this.getHookNameFromResult(result);
|
|
409
|
+
const hookType = this.getHookTypeFromResult(result);
|
|
410
|
+
const hookCallEvent = new HookCallEvent(eventName, hookType, hookName, { ...input }, result.duration, result.success, result.output ? { ...result.output } : undefined, result.exitCode, result.stdout, result.stderr, result.error?.message);
|
|
411
|
+
logHookCall(this.config, hookCallEvent);
|
|
412
|
+
}
|
|
413
|
+
// Log individual errors
|
|
414
|
+
for (const error of aggregated.errors) {
|
|
415
|
+
debugLogger.warn(`Hook execution error: ${error.message}`);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Process common hook output fields centrally
|
|
420
|
+
*/
|
|
421
|
+
processCommonHookOutputFields(aggregated) {
|
|
422
|
+
if (!aggregated.finalOutput) {
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
425
|
+
// Handle systemMessage - show to user in transcript mode (not to agent)
|
|
426
|
+
const systemMessage = aggregated.finalOutput.systemMessage;
|
|
427
|
+
if (systemMessage && !aggregated.finalOutput.suppressOutput) {
|
|
428
|
+
debugLogger.warn(`Hook system message: ${systemMessage}`);
|
|
429
|
+
}
|
|
430
|
+
// Handle suppressOutput - already handled by not logging above when true
|
|
431
|
+
// Handle continue=false - this should stop the entire agent execution
|
|
432
|
+
if (aggregated.finalOutput.shouldStopExecution()) {
|
|
433
|
+
const stopReason = aggregated.finalOutput.getEffectiveReason();
|
|
434
|
+
debugLogger.log(`Hook requested to stop execution: ${stopReason}`);
|
|
435
|
+
// Note: The actual stopping of execution must be handled by integration points
|
|
436
|
+
// as they need to interpret this signal in the context of their specific workflow
|
|
437
|
+
// This is just logging the request centrally
|
|
438
|
+
}
|
|
439
|
+
// Other common fields like decision/reason are handled by specific hook output classes
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Get hook name from config for display or telemetry
|
|
443
|
+
*/
|
|
444
|
+
getHookName(config) {
|
|
445
|
+
return config.name || config.command || 'unknown-command';
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Get hook name from execution result for telemetry
|
|
449
|
+
*/
|
|
450
|
+
getHookNameFromResult(result) {
|
|
451
|
+
return this.getHookName(result.hookConfig);
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Get hook type from execution result for telemetry
|
|
455
|
+
*/
|
|
456
|
+
getHookTypeFromResult(result) {
|
|
457
|
+
return result.hookConfig.type;
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Handle hook execution requests from MessageBus
|
|
461
|
+
* This method routes the request to the appropriate fire*Event method
|
|
462
|
+
* and publishes the response back through MessageBus
|
|
463
|
+
*
|
|
464
|
+
* The request input only contains event-specific fields. This method adds
|
|
465
|
+
* the common base fields (session_id, cwd, etc.) before routing.
|
|
466
|
+
*/
|
|
467
|
+
async handleHookExecutionRequest(request) {
|
|
468
|
+
try {
|
|
469
|
+
// Add base fields to the input
|
|
470
|
+
const enrichedInput = {
|
|
471
|
+
...this.createBaseInput(request.eventName),
|
|
472
|
+
...request.input,
|
|
473
|
+
};
|
|
474
|
+
let result;
|
|
475
|
+
// Route to appropriate event handler based on eventName
|
|
476
|
+
switch (request.eventName) {
|
|
477
|
+
case HookEventName.BeforeTool: {
|
|
478
|
+
const { toolName, toolInput } = validateBeforeToolInput(enrichedInput);
|
|
479
|
+
result = await this.fireBeforeToolEvent(toolName, toolInput);
|
|
480
|
+
break;
|
|
481
|
+
}
|
|
482
|
+
case HookEventName.AfterTool: {
|
|
483
|
+
const { toolName, toolInput, toolResponse } = validateAfterToolInput(enrichedInput);
|
|
484
|
+
result = await this.fireAfterToolEvent(toolName, toolInput, toolResponse);
|
|
485
|
+
break;
|
|
486
|
+
}
|
|
487
|
+
case HookEventName.BeforeAgent: {
|
|
488
|
+
const { prompt } = validateBeforeAgentInput(enrichedInput);
|
|
489
|
+
result = await this.fireBeforeAgentEvent(prompt);
|
|
490
|
+
break;
|
|
491
|
+
}
|
|
492
|
+
case HookEventName.AfterAgent: {
|
|
493
|
+
const { prompt, promptResponse, stopHookActive } = validateAfterAgentInput(enrichedInput);
|
|
494
|
+
result = await this.fireAfterAgentEvent(prompt, promptResponse, stopHookActive);
|
|
495
|
+
break;
|
|
496
|
+
}
|
|
497
|
+
case HookEventName.BeforeModel: {
|
|
498
|
+
const { llmRequest } = validateModelInput(enrichedInput, 'BeforeModel');
|
|
499
|
+
const translatedRequest = defaultHookTranslator.toHookLLMRequest(llmRequest);
|
|
500
|
+
// Update the enrichedInput with translated request
|
|
501
|
+
enrichedInput['llm_request'] = translatedRequest;
|
|
502
|
+
result = await this.fireBeforeModelEvent(llmRequest);
|
|
503
|
+
break;
|
|
504
|
+
}
|
|
505
|
+
case HookEventName.AfterModel: {
|
|
506
|
+
const { llmRequest, llmResponse } = validateAfterModelInput(enrichedInput);
|
|
507
|
+
const translatedRequest = defaultHookTranslator.toHookLLMRequest(llmRequest);
|
|
508
|
+
const translatedResponse = defaultHookTranslator.toHookLLMResponse(llmResponse);
|
|
509
|
+
// Update the enrichedInput with translated versions
|
|
510
|
+
enrichedInput['llm_request'] = translatedRequest;
|
|
511
|
+
enrichedInput['llm_response'] = translatedResponse;
|
|
512
|
+
result = await this.fireAfterModelEvent(llmRequest, llmResponse);
|
|
513
|
+
break;
|
|
514
|
+
}
|
|
515
|
+
case HookEventName.BeforeToolSelection: {
|
|
516
|
+
const { llmRequest } = validateModelInput(enrichedInput, 'BeforeToolSelection');
|
|
517
|
+
const translatedRequest = defaultHookTranslator.toHookLLMRequest(llmRequest);
|
|
518
|
+
// Update the enrichedInput with translated request
|
|
519
|
+
enrichedInput['llm_request'] = translatedRequest;
|
|
520
|
+
result = await this.fireBeforeToolSelectionEvent(llmRequest);
|
|
521
|
+
break;
|
|
522
|
+
}
|
|
523
|
+
case HookEventName.Notification: {
|
|
524
|
+
const { notificationType, message, details } = validateNotificationInput(enrichedInput);
|
|
525
|
+
result = await this.fireNotificationEvent(notificationType, message, details);
|
|
526
|
+
break;
|
|
527
|
+
}
|
|
528
|
+
case HookEventName.SessionStart: {
|
|
529
|
+
const { source } = validateSessionStartInput(enrichedInput);
|
|
530
|
+
result = await this.fireSessionStartEvent(source);
|
|
531
|
+
break;
|
|
532
|
+
}
|
|
533
|
+
case HookEventName.SessionEnd: {
|
|
534
|
+
const { reason } = validateSessionEndInput(enrichedInput);
|
|
535
|
+
result = await this.fireSessionEndEvent(reason);
|
|
536
|
+
break;
|
|
537
|
+
}
|
|
538
|
+
case HookEventName.PreCompress: {
|
|
539
|
+
const { trigger } = validatePreCompressInput(enrichedInput);
|
|
540
|
+
result = await this.firePreCompressEvent(trigger);
|
|
541
|
+
break;
|
|
542
|
+
}
|
|
543
|
+
default:
|
|
544
|
+
throw new Error(`Unsupported hook event: ${request.eventName}`);
|
|
545
|
+
}
|
|
546
|
+
// Publish response through MessageBus
|
|
547
|
+
if (this.messageBus) {
|
|
548
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
549
|
+
this.messageBus.publish({
|
|
550
|
+
type: MessageBusType.HOOK_EXECUTION_RESPONSE,
|
|
551
|
+
correlationId: request.correlationId,
|
|
552
|
+
success: result.success,
|
|
553
|
+
output: result.finalOutput,
|
|
554
|
+
});
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
catch (error) {
|
|
558
|
+
// Publish error response
|
|
559
|
+
if (this.messageBus) {
|
|
560
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
561
|
+
this.messageBus.publish({
|
|
562
|
+
type: MessageBusType.HOOK_EXECUTION_RESPONSE,
|
|
563
|
+
correlationId: request.correlationId,
|
|
564
|
+
success: false,
|
|
565
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
566
|
+
});
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
//# sourceMappingURL=hookEventHandler.js.map
|