@anthropic-field/core 0.1.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/.last_build +0 -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/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/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 +743 -0
- package/dist/docs/changelogs/latest.md +338 -0
- package/dist/docs/changelogs/preview.md +437 -0
- package/dist/docs/cli/authentication.md +3 -0
- package/dist/docs/cli/checkpointing.md +94 -0
- package/dist/docs/cli/cli-reference.md +101 -0
- package/dist/docs/cli/commands.md +430 -0
- package/dist/docs/cli/creating-skills.md +80 -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 +65 -0
- package/dist/docs/cli/keyboard-shortcuts.md +140 -0
- package/dist/docs/cli/model-routing.md +42 -0
- package/dist/docs/cli/model.md +62 -0
- package/dist/docs/cli/rewind.md +51 -0
- package/dist/docs/cli/sandbox.md +171 -0
- package/dist/docs/cli/session-management.md +158 -0
- package/dist/docs/cli/settings.md +139 -0
- package/dist/docs/cli/skills.md +112 -0
- package/dist/docs/cli/system-prompt.md +125 -0
- package/dist/docs/cli/telemetry.md +826 -0
- package/dist/docs/cli/themes.md +235 -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 +97 -0
- package/dist/docs/cli/tutorials.md +87 -0
- package/dist/docs/cli/uninstall.md +65 -0
- package/dist/docs/core/index.md +107 -0
- package/dist/docs/core/memport.md +246 -0
- package/dist/docs/core/policy-engine.md +305 -0
- package/dist/docs/core/remote-agents.md +84 -0
- package/dist/docs/core/subagents.md +191 -0
- package/dist/docs/core/tools-api.md +131 -0
- package/dist/docs/examples/proxy-script.md +83 -0
- package/dist/docs/extensions/best-practices.md +139 -0
- package/dist/docs/extensions/index.md +45 -0
- package/dist/docs/extensions/reference.md +336 -0
- package/dist/docs/extensions/releasing.md +183 -0
- package/dist/docs/extensions/writing-extensions.md +281 -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 +1585 -0
- package/dist/docs/get-started/examples.md +219 -0
- package/dist/docs/get-started/gemini-3.md +101 -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 +677 -0
- package/dist/docs/hooks/index.md +164 -0
- package/dist/docs/hooks/reference.md +322 -0
- package/dist/docs/hooks/writing-hooks.md +450 -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 +149 -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 +152 -0
- package/dist/docs/tools/file-system.md +217 -0
- package/dist/docs/tools/index.md +98 -0
- package/dist/docs/tools/mcp-server.md +1079 -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 +173 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/src/__mocks__/fs/promises.d.ts +11 -0
- package/dist/src/__mocks__/fs/promises.js +17 -0
- package/dist/src/__mocks__/fs/promises.js.map +1 -0
- package/dist/src/agents/a2a-client-manager.d.ts +77 -0
- package/dist/src/agents/a2a-client-manager.js +173 -0
- package/dist/src/agents/a2a-client-manager.js.map +1 -0
- package/dist/src/agents/a2aUtils.d.ts +29 -0
- package/dist/src/agents/a2aUtils.js +113 -0
- package/dist/src/agents/a2aUtils.js.map +1 -0
- 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/agent-scheduler.d.ts +33 -0
- package/dist/src/agents/agent-scheduler.js +29 -0
- package/dist/src/agents/agent-scheduler.js.map +1 -0
- package/dist/src/agents/agentLoader.d.ts +73 -0
- package/dist/src/agents/agentLoader.js +268 -0
- package/dist/src/agents/agentLoader.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/codebase-investigator.d.ts +47 -0
- package/dist/src/agents/codebase-investigator.js +159 -0
- package/dist/src/agents/codebase-investigator.js.map +1 -0
- 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/local-executor.d.ts +110 -0
- package/dist/src/agents/local-executor.js +879 -0
- package/dist/src/agents/local-executor.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/registry.d.ts +85 -0
- package/dist/src/agents/registry.js +374 -0
- package/dist/src/agents/registry.js.map +1 -0
- package/dist/src/agents/remote-invocation.d.ts +35 -0
- package/dist/src/agents/remote-invocation.js +127 -0
- package/dist/src/agents/remote-invocation.js.map +1 -0
- package/dist/src/agents/subagent-tool-wrapper.d.ts +38 -0
- package/dist/src/agents/subagent-tool-wrapper.js +51 -0
- package/dist/src/agents/subagent-tool-wrapper.js.map +1 -0
- package/dist/src/agents/subagent-tool.d.ts +15 -0
- package/dist/src/agents/subagent-tool.js +61 -0
- package/dist/src/agents/subagent-tool.js.map +1 -0
- package/dist/src/agents/types.d.ts +154 -0
- package/dist/src/agents/types.js +23 -0
- package/dist/src/agents/types.js.map +1 -0
- package/dist/src/agents/utils.d.ts +15 -0
- package/dist/src/agents/utils.js +29 -0
- package/dist/src/agents/utils.js.map +1 -0
- 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/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 +24 -0
- package/dist/src/availability/policyCatalog.js +106 -0
- package/dist/src/availability/policyCatalog.js.map +1 -0
- package/dist/src/availability/policyHelpers.d.ts +52 -0
- package/dist/src/availability/policyHelpers.js +143 -0
- package/dist/src/availability/policyHelpers.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/admin/admin_controls.d.ts +32 -0
- package/dist/src/code_assist/admin/admin_controls.js +120 -0
- package/dist/src/code_assist/admin/admin_controls.js.map +1 -0
- package/dist/src/code_assist/codeAssist.d.ts +12 -0
- package/dist/src/code_assist/codeAssist.js +31 -0
- package/dist/src/code_assist/codeAssist.js.map +1 -0
- package/dist/src/code_assist/converter.d.ts +75 -0
- package/dist/src/code_assist/converter.js +161 -0
- package/dist/src/code_assist/converter.js.map +1 -0
- package/dist/src/code_assist/experiments/client_metadata.d.ts +12 -0
- package/dist/src/code_assist/experiments/client_metadata.js +51 -0
- package/dist/src/code_assist/experiments/client_metadata.js.map +1 -0
- package/dist/src/code_assist/experiments/experiments.d.ts +17 -0
- package/dist/src/code_assist/experiments/experiments.js +57 -0
- package/dist/src/code_assist/experiments/experiments.js.map +1 -0
- package/dist/src/code_assist/experiments/flagNames.d.ts +16 -0
- package/dist/src/code_assist/experiments/flagNames.js +16 -0
- package/dist/src/code_assist/experiments/flagNames.js.map +1 -0
- package/dist/src/code_assist/experiments/types.d.ts +35 -0
- package/dist/src/code_assist/experiments/types.js +7 -0
- package/dist/src/code_assist/experiments/types.js.map +1 -0
- package/dist/src/code_assist/oauth-credential-storage.d.ts +25 -0
- package/dist/src/code_assist/oauth-credential-storage.js +109 -0
- package/dist/src/code_assist/oauth-credential-storage.js.map +1 -0
- package/dist/src/code_assist/oauth2.d.ts +25 -0
- package/dist/src/code_assist/oauth2.js +579 -0
- package/dist/src/code_assist/oauth2.js.map +1 -0
- package/dist/src/code_assist/server.d.ts +50 -0
- package/dist/src/code_assist/server.js +228 -0
- package/dist/src/code_assist/server.js.map +1 -0
- package/dist/src/code_assist/setup.d.ts +46 -0
- package/dist/src/code_assist/setup.js +179 -0
- package/dist/src/code_assist/setup.js.map +1 -0
- package/dist/src/code_assist/telemetry.d.ts +14 -0
- package/dist/src/code_assist/telemetry.js +157 -0
- package/dist/src/code_assist/telemetry.js.map +1 -0
- package/dist/src/code_assist/types.d.ts +306 -0
- package/dist/src/code_assist/types.js +94 -0
- package/dist/src/code_assist/types.js.map +1 -0
- package/dist/src/cognitive/gemini-adapter.d.ts +29 -0
- package/dist/src/cognitive/gemini-adapter.js +109 -0
- package/dist/src/cognitive/gemini-adapter.js.map +1 -0
- package/dist/src/cognitive/index.d.ts +22 -0
- package/dist/src/cognitive/index.js +50 -0
- package/dist/src/cognitive/index.js.map +1 -0
- package/dist/src/cognitive/integration.d.ts +57 -0
- package/dist/src/cognitive/integration.js +103 -0
- package/dist/src/cognitive/integration.js.map +1 -0
- package/dist/src/cognitive/loader/index.d.ts +8 -0
- package/dist/src/cognitive/loader/index.js +9 -0
- package/dist/src/cognitive/loader/index.js.map +1 -0
- package/dist/src/cognitive/loader/module-loader.d.ts +67 -0
- package/dist/src/cognitive/loader/module-loader.js +369 -0
- package/dist/src/cognitive/loader/module-loader.js.map +1 -0
- package/dist/src/cognitive/runtime/envelope.d.ts +31 -0
- package/dist/src/cognitive/runtime/envelope.js +167 -0
- package/dist/src/cognitive/runtime/envelope.js.map +1 -0
- package/dist/src/cognitive/runtime/executor.d.ts +65 -0
- package/dist/src/cognitive/runtime/executor.js +245 -0
- package/dist/src/cognitive/runtime/executor.js.map +1 -0
- package/dist/src/cognitive/runtime/index.d.ts +12 -0
- package/dist/src/cognitive/runtime/index.js +18 -0
- package/dist/src/cognitive/runtime/index.js.map +1 -0
- package/dist/src/cognitive/runtime/prompt-builder.d.ts +34 -0
- package/dist/src/cognitive/runtime/prompt-builder.js +216 -0
- package/dist/src/cognitive/runtime/prompt-builder.js.map +1 -0
- package/dist/src/cognitive/runtime/repair-pass.d.ts +43 -0
- package/dist/src/cognitive/runtime/repair-pass.js +170 -0
- package/dist/src/cognitive/runtime/repair-pass.js.map +1 -0
- package/dist/src/cognitive/runtime/risk-aggregator.d.ts +39 -0
- package/dist/src/cognitive/runtime/risk-aggregator.js +90 -0
- package/dist/src/cognitive/runtime/risk-aggregator.js.map +1 -0
- package/dist/src/cognitive/tool/cognitive-registry.d.ts +99 -0
- package/dist/src/cognitive/tool/cognitive-registry.js +192 -0
- package/dist/src/cognitive/tool/cognitive-registry.js.map +1 -0
- package/dist/src/cognitive/tool/cognitive-tool.d.ts +56 -0
- package/dist/src/cognitive/tool/cognitive-tool.js +217 -0
- package/dist/src/cognitive/tool/cognitive-tool.js.map +1 -0
- package/dist/src/cognitive/tool/index.d.ts +9 -0
- package/dist/src/cognitive/tool/index.js +10 -0
- package/dist/src/cognitive/tool/index.js.map +1 -0
- package/dist/src/cognitive/types.d.ts +234 -0
- package/dist/src/cognitive/types.js +10 -0
- package/dist/src/cognitive/types.js.map +1 -0
- package/dist/src/cognitive/validator/envelope-validator.d.ts +45 -0
- package/dist/src/cognitive/validator/envelope-validator.js +214 -0
- package/dist/src/cognitive/validator/envelope-validator.js.map +1 -0
- package/dist/src/cognitive/validator/index.d.ts +9 -0
- package/dist/src/cognitive/validator/index.js +10 -0
- package/dist/src/cognitive/validator/index.js.map +1 -0
- package/dist/src/cognitive/validator/schema-validator.d.ts +46 -0
- package/dist/src/cognitive/validator/schema-validator.js +202 -0
- package/dist/src/cognitive/validator/schema-validator.js.map +1 -0
- package/dist/src/commands/cognitive.d.ts +39 -0
- package/dist/src/commands/cognitive.js +335 -0
- package/dist/src/commands/cognitive.js.map +1 -0
- package/dist/src/commands/extensions.d.ts +7 -0
- package/dist/src/commands/extensions.js +9 -0
- package/dist/src/commands/extensions.js.map +1 -0
- 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/memory.d.ts +11 -0
- package/dist/src/commands/memory.js +80 -0
- package/dist/src/commands/memory.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/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 +766 -0
- package/dist/src/config/config.js +1625 -0
- package/dist/src/config/config.js.map +1 -0
- package/dist/src/config/constants.d.ts +15 -0
- package/dist/src/config/constants.js +24 -0
- package/dist/src/config/constants.js.map +1 -0
- package/dist/src/config/defaultModelConfigs.d.ts +7 -0
- package/dist/src/config/defaultModelConfigs.js +231 -0
- package/dist/src/config/defaultModelConfigs.js.map +1 -0
- package/dist/src/config/models.d.ts +67 -0
- package/dist/src/config/models.js +144 -0
- package/dist/src/config/models.js.map +1 -0
- package/dist/src/config/storage.d.ts +44 -0
- package/dist/src/config/storage.js +139 -0
- package/dist/src/config/storage.js.map +1 -0
- package/dist/src/confirmation-bus/index.d.ts +7 -0
- package/dist/src/confirmation-bus/index.js +8 -0
- package/dist/src/confirmation-bus/index.js.map +1 -0
- package/dist/src/confirmation-bus/message-bus.d.ts +24 -0
- package/dist/src/confirmation-bus/message-bus.js +120 -0
- package/dist/src/confirmation-bus/message-bus.js.map +1 -0
- package/dist/src/confirmation-bus/types.d.ts +147 -0
- package/dist/src/confirmation-bus/types.js +25 -0
- package/dist/src/confirmation-bus/types.js.map +1 -0
- package/dist/src/core/apiKeyCredentialStorage.d.ts +17 -0
- package/dist/src/core/apiKeyCredentialStorage.js +64 -0
- package/dist/src/core/apiKeyCredentialStorage.js.map +1 -0
- package/dist/src/core/baseLlmClient.d.ts +74 -0
- package/dist/src/core/baseLlmClient.js +167 -0
- package/dist/src/core/baseLlmClient.js.map +1 -0
- package/dist/src/core/client.d.ts +59 -0
- package/dist/src/core/client.js +716 -0
- package/dist/src/core/client.js.map +1 -0
- package/dist/src/core/contentGenerator.d.ts +34 -0
- package/dist/src/core/contentGenerator.js +107 -0
- package/dist/src/core/contentGenerator.js.map +1 -0
- package/dist/src/core/coreToolHookTriggers.d.ts +23 -0
- package/dist/src/core/coreToolHookTriggers.js +195 -0
- package/dist/src/core/coreToolHookTriggers.js.map +1 -0
- package/dist/src/core/coreToolScheduler.d.ts +50 -0
- package/dist/src/core/coreToolScheduler.js +703 -0
- package/dist/src/core/coreToolScheduler.js.map +1 -0
- package/dist/src/core/fakeContentGenerator.d.ts +34 -0
- package/dist/src/core/fakeContentGenerator.js +59 -0
- package/dist/src/core/fakeContentGenerator.js.map +1 -0
- package/dist/src/core/geminiChat.d.ts +160 -0
- package/dist/src/core/geminiChat.js +744 -0
- package/dist/src/core/geminiChat.js.map +1 -0
- package/dist/src/core/geminiRequest.d.ts +13 -0
- package/dist/src/core/geminiRequest.js +11 -0
- package/dist/src/core/geminiRequest.js.map +1 -0
- package/dist/src/core/logger.d.ts +65 -0
- package/dist/src/core/logger.js +368 -0
- package/dist/src/core/logger.js.map +1 -0
- package/dist/src/core/loggingContentGenerator.d.ts +29 -0
- package/dist/src/core/loggingContentGenerator.js +202 -0
- package/dist/src/core/loggingContentGenerator.js.map +1 -0
- package/dist/src/core/prompts.d.ts +19 -0
- package/dist/src/core/prompts.js +27 -0
- package/dist/src/core/prompts.js.map +1 -0
- package/dist/src/core/recordingContentGenerator.d.ts +19 -0
- package/dist/src/core/recordingContentGenerator.js +82 -0
- package/dist/src/core/recordingContentGenerator.js.map +1 -0
- package/dist/src/core/tokenLimits.d.ts +10 -0
- package/dist/src/core/tokenLimits.js +22 -0
- package/dist/src/core/tokenLimits.js.map +1 -0
- package/dist/src/core/turn.d.ts +167 -0
- package/dist/src/core/turn.js +209 -0
- package/dist/src/core/turn.js.map +1 -0
- package/dist/src/fallback/handler.d.ts +7 -0
- package/dist/src/fallback/handler.js +110 -0
- package/dist/src/fallback/handler.js.map +1 -0
- package/dist/src/fallback/types.d.ts +31 -0
- package/dist/src/fallback/types.js +7 -0
- package/dist/src/fallback/types.js.map +1 -0
- package/dist/src/generated/git-commit.d.ts +7 -0
- package/dist/src/generated/git-commit.js +10 -0
- package/dist/src/generated/git-commit.js.map +1 -0
- package/dist/src/hooks/hookAggregator.d.ts +68 -0
- package/dist/src/hooks/hookAggregator.js +279 -0
- package/dist/src/hooks/hookAggregator.js.map +1 -0
- package/dist/src/hooks/hookEventHandler.d.ts +107 -0
- package/dist/src/hooks/hookEventHandler.js +325 -0
- package/dist/src/hooks/hookEventHandler.js.map +1 -0
- package/dist/src/hooks/hookPlanner.d.ts +42 -0
- package/dist/src/hooks/hookPlanner.js +103 -0
- package/dist/src/hooks/hookPlanner.js.map +1 -0
- package/dist/src/hooks/hookRegistry.d.ts +75 -0
- package/dist/src/hooks/hookRegistry.js +215 -0
- package/dist/src/hooks/hookRegistry.js.map +1 -0
- package/dist/src/hooks/hookRunner.d.ts +44 -0
- package/dist/src/hooks/hookRunner.js +329 -0
- package/dist/src/hooks/hookRunner.js.map +1 -0
- package/dist/src/hooks/hookSystem.d.ts +99 -0
- package/dist/src/hooks/hookSystem.js +262 -0
- package/dist/src/hooks/hookSystem.js.map +1 -0
- package/dist/src/hooks/hookTranslator.d.ts +113 -0
- package/dist/src/hooks/hookTranslator.js +233 -0
- package/dist/src/hooks/hookTranslator.js.map +1 -0
- package/dist/src/hooks/index.d.ts +16 -0
- package/dist/src/hooks/index.js +16 -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/types.d.ts +442 -0
- package/dist/src/hooks/types.js +303 -0
- package/dist/src/hooks/types.js.map +1 -0
- package/dist/src/ide/constants.d.ts +9 -0
- package/dist/src/ide/constants.js +10 -0
- package/dist/src/ide/constants.js.map +1 -0
- package/dist/src/ide/detect-ide.d.ts +109 -0
- package/dist/src/ide/detect-ide.js +125 -0
- package/dist/src/ide/detect-ide.js.map +1 -0
- package/dist/src/ide/ide-client.d.ts +113 -0
- package/dist/src/ide/ide-client.js +669 -0
- package/dist/src/ide/ide-client.js.map +1 -0
- package/dist/src/ide/ide-installer.d.ts +14 -0
- package/dist/src/ide/ide-installer.js +227 -0
- package/dist/src/ide/ide-installer.js.map +1 -0
- package/dist/src/ide/ideContext.d.ts +44 -0
- package/dist/src/ide/ideContext.js +101 -0
- package/dist/src/ide/ideContext.js.map +1 -0
- package/dist/src/ide/process-utils.d.ts +21 -0
- package/dist/src/ide/process-utils.js +181 -0
- package/dist/src/ide/process-utils.js.map +1 -0
- package/dist/src/ide/types.d.ts +486 -0
- package/dist/src/ide/types.js +138 -0
- package/dist/src/ide/types.js.map +1 -0
- package/dist/src/index.d.ts +145 -0
- package/dist/src/index.js +161 -0
- package/dist/src/index.js.map +1 -0
- 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 +33 -0
- package/dist/src/mcp/google-auth-provider.js +118 -0
- package/dist/src/mcp/google-auth-provider.js.map +1 -0
- package/dist/src/mcp/oauth-provider.d.ts +160 -0
- package/dist/src/mcp/oauth-provider.js +729 -0
- package/dist/src/mcp/oauth-provider.js.map +1 -0
- package/dist/src/mcp/oauth-token-storage.d.ts +65 -0
- package/dist/src/mcp/oauth-token-storage.js +181 -0
- package/dist/src/mcp/oauth-token-storage.js.map +1 -0
- package/dist/src/mcp/oauth-utils.d.ts +142 -0
- package/dist/src/mcp/oauth-utils.js +289 -0
- package/dist/src/mcp/oauth-utils.js.map +1 -0
- package/dist/src/mcp/sa-impersonation-provider.d.ts +27 -0
- package/dist/src/mcp/sa-impersonation-provider.js +113 -0
- package/dist/src/mcp/sa-impersonation-provider.js.map +1 -0
- package/dist/src/mcp/token-storage/base-token-storage.d.ts +19 -0
- package/dist/src/mcp/token-storage/base-token-storage.js +36 -0
- package/dist/src/mcp/token-storage/base-token-storage.js.map +1 -0
- package/dist/src/mcp/token-storage/file-token-storage.d.ts +24 -0
- package/dist/src/mcp/token-storage/file-token-storage.js +145 -0
- package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.d.ts +23 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.js +78 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.js.map +1 -0
- package/dist/src/mcp/token-storage/index.d.ts +11 -0
- package/dist/src/mcp/token-storage/index.js +12 -0
- package/dist/src/mcp/token-storage/index.js.map +1 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.d.ts +35 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.js +246 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -0
- package/dist/src/mcp/token-storage/types.d.ts +44 -0
- package/dist/src/mcp/token-storage/types.js +11 -0
- package/dist/src/mcp/token-storage/types.js.map +1 -0
- package/dist/src/mocks/msw.d.ts +6 -0
- package/dist/src/mocks/msw.js +8 -0
- package/dist/src/mocks/msw.js.map +1 -0
- package/dist/src/output/json-formatter.d.ts +11 -0
- package/dist/src/output/json-formatter.js +33 -0
- package/dist/src/output/json-formatter.js.map +1 -0
- package/dist/src/output/stream-json-formatter.d.ts +32 -0
- package/dist/src/output/stream-json-formatter.js +58 -0
- package/dist/src/output/stream-json-formatter.js.map +1 -0
- package/dist/src/output/types.d.ts +85 -0
- package/dist/src/output/types.js +22 -0
- package/dist/src/output/types.js.map +1 -0
- package/dist/src/policy/config.d.ts +31 -0
- package/dist/src/policy/config.js +355 -0
- package/dist/src/policy/config.js.map +1 -0
- package/dist/src/policy/index.d.ts +9 -0
- package/dist/src/policy/index.js +10 -0
- package/dist/src/policy/index.js.map +1 -0
- package/dist/src/policy/policies/discovered.toml +8 -0
- package/dist/src/policy/policies/plan.toml +79 -0
- package/dist/src/policy/policies/read-only.toml +51 -0
- package/dist/src/policy/policies/write.toml +78 -0
- package/dist/src/policy/policies/yolo.toml +32 -0
- package/dist/src/policy/policy-engine.d.ts +65 -0
- package/dist/src/policy/policy-engine.js +357 -0
- package/dist/src/policy/policy-engine.js.map +1 -0
- package/dist/src/policy/stable-stringify.d.ts +58 -0
- package/dist/src/policy/stable-stringify.js +122 -0
- package/dist/src/policy/stable-stringify.js.map +1 -0
- package/dist/src/policy/toml-loader.d.ts +45 -0
- package/dist/src/policy/toml-loader.js +366 -0
- package/dist/src/policy/toml-loader.js.map +1 -0
- package/dist/src/policy/types.d.ts +220 -0
- package/dist/src/policy/types.js +44 -0
- package/dist/src/policy/types.js.map +1 -0
- package/dist/src/policy/utils.d.ts +21 -0
- package/dist/src/policy/utils.js +45 -0
- package/dist/src/policy/utils.js.map +1 -0
- package/dist/src/prompts/mcp-prompts.d.ts +8 -0
- package/dist/src/prompts/mcp-prompts.js +13 -0
- package/dist/src/prompts/mcp-prompts.js.map +1 -0
- package/dist/src/prompts/prompt-registry.d.ts +34 -0
- package/dist/src/prompts/prompt-registry.js +64 -0
- package/dist/src/prompts/prompt-registry.js.map +1 -0
- package/dist/src/prompts/promptProvider.d.ts +18 -0
- package/dist/src/prompts/promptProvider.js +129 -0
- package/dist/src/prompts/promptProvider.js.map +1 -0
- package/dist/src/prompts/snippets.d.ts +76 -0
- package/dist/src/prompts/snippets.js +455 -0
- package/dist/src/prompts/snippets.js.map +1 -0
- package/dist/src/prompts/utils.d.ts +23 -0
- package/dist/src/prompts/utils.js +72 -0
- package/dist/src/prompts/utils.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/routing/modelRouterService.d.ts +23 -0
- package/dist/src/routing/modelRouterService.js +80 -0
- package/dist/src/routing/modelRouterService.js.map +1 -0
- package/dist/src/routing/routingStrategy.d.ts +64 -0
- package/dist/src/routing/routingStrategy.js +7 -0
- package/dist/src/routing/routingStrategy.js.map +1 -0
- package/dist/src/routing/strategies/classifierStrategy.d.ts +12 -0
- package/dist/src/routing/strategies/classifierStrategy.js +152 -0
- package/dist/src/routing/strategies/classifierStrategy.js.map +1 -0
- package/dist/src/routing/strategies/compositeStrategy.d.ts +26 -0
- package/dist/src/routing/strategies/compositeStrategy.js +70 -0
- package/dist/src/routing/strategies/compositeStrategy.js.map +1 -0
- package/dist/src/routing/strategies/defaultStrategy.d.ts +12 -0
- package/dist/src/routing/strategies/defaultStrategy.js +21 -0
- package/dist/src/routing/strategies/defaultStrategy.js.map +1 -0
- package/dist/src/routing/strategies/fallbackStrategy.d.ts +12 -0
- package/dist/src/routing/strategies/fallbackStrategy.js +33 -0
- package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -0
- package/dist/src/routing/strategies/numericalClassifierStrategy.d.ts +13 -0
- package/dist/src/routing/strategies/numericalClassifierStrategy.js +178 -0
- package/dist/src/routing/strategies/numericalClassifierStrategy.js.map +1 -0
- package/dist/src/routing/strategies/overrideStrategy.d.ts +15 -0
- package/dist/src/routing/strategies/overrideStrategy.js +29 -0
- package/dist/src/routing/strategies/overrideStrategy.js.map +1 -0
- package/dist/src/safety/built-in.d.ts +21 -0
- package/dist/src/safety/built-in.js +106 -0
- package/dist/src/safety/built-in.js.map +1 -0
- package/dist/src/safety/checker-runner.d.ts +48 -0
- package/dist/src/safety/checker-runner.js +219 -0
- package/dist/src/safety/checker-runner.js.map +1 -0
- package/dist/src/safety/context-builder.d.ts +23 -0
- package/dist/src/safety/context-builder.js +47 -0
- package/dist/src/safety/context-builder.js.map +1 -0
- package/dist/src/safety/protocol.d.ts +88 -0
- package/dist/src/safety/protocol.js +15 -0
- package/dist/src/safety/protocol.js.map +1 -0
- package/dist/src/safety/registry.d.ts +26 -0
- package/dist/src/safety/registry.js +65 -0
- package/dist/src/safety/registry.js.map +1 -0
- package/dist/src/scheduler/confirmation.d.ts +49 -0
- package/dist/src/scheduler/confirmation.js +183 -0
- package/dist/src/scheduler/confirmation.js.map +1 -0
- package/dist/src/scheduler/policy.d.ts +25 -0
- package/dist/src/scheduler/policy.js +108 -0
- package/dist/src/scheduler/policy.js.map +1 -0
- package/dist/src/scheduler/scheduler.d.ts +61 -0
- package/dist/src/scheduler/scheduler.js +356 -0
- package/dist/src/scheduler/scheduler.js.map +1 -0
- package/dist/src/scheduler/state-manager.d.ts +73 -0
- package/dist/src/scheduler/state-manager.js +356 -0
- package/dist/src/scheduler/state-manager.js.map +1 -0
- package/dist/src/scheduler/tool-executor.d.ts +22 -0
- package/dist/src/scheduler/tool-executor.js +201 -0
- package/dist/src/scheduler/tool-executor.js.map +1 -0
- package/dist/src/scheduler/tool-modifier.d.ts +23 -0
- package/dist/src/scheduler/tool-modifier.js +50 -0
- package/dist/src/scheduler/tool-modifier.js.map +1 -0
- package/dist/src/scheduler/types.d.ts +118 -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 +41 -0
- package/dist/src/services/chatCompressionService.js +339 -0
- package/dist/src/services/chatCompressionService.js.map +1 -0
- package/dist/src/services/chatRecordingService.d.ts +174 -0
- package/dist/src/services/chatRecordingService.js +427 -0
- package/dist/src/services/chatRecordingService.js.map +1 -0
- 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/environmentSanitization.d.ts +15 -0
- package/dist/src/services/environmentSanitization.js +145 -0
- package/dist/src/services/environmentSanitization.js.map +1 -0
- package/dist/src/services/fileDiscoveryService.d.ts +45 -0
- package/dist/src/services/fileDiscoveryService.js +141 -0
- package/dist/src/services/fileDiscoveryService.js.map +1 -0
- package/dist/src/services/fileSystemService.d.ts +31 -0
- package/dist/src/services/fileSystemService.js +18 -0
- package/dist/src/services/fileSystemService.js.map +1 -0
- package/dist/src/services/gitService.d.ts +24 -0
- package/dist/src/services/gitService.js +132 -0
- package/dist/src/services/gitService.js.map +1 -0
- package/dist/src/services/loopDetectionService.d.ts +106 -0
- package/dist/src/services/loopDetectionService.js +433 -0
- package/dist/src/services/loopDetectionService.js.map +1 -0
- package/dist/src/services/modelConfigService.d.ts +86 -0
- package/dist/src/services/modelConfigService.js +215 -0
- package/dist/src/services/modelConfigService.js.map +1 -0
- 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/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/shellExecutionService.d.ts +145 -0
- package/dist/src/services/shellExecutionService.js +871 -0
- package/dist/src/services/shellExecutionService.js.map +1 -0
- package/dist/src/services/test-data/resolved-aliases-retry.golden.json +238 -0
- package/dist/src/services/test-data/resolved-aliases.golden.json +238 -0
- package/dist/src/skills/builtin/skill-creator/SKILL.md +382 -0
- package/dist/src/skills/builtin/skill-creator/scripts/init_skill.cjs +235 -0
- package/dist/src/skills/builtin/skill-creator/scripts/package_skill.cjs +102 -0
- package/dist/src/skills/builtin/skill-creator/scripts/validate_skill.cjs +127 -0
- package/dist/src/skills/skillLoader.d.ts +31 -0
- package/dist/src/skills/skillLoader.js +133 -0
- package/dist/src/skills/skillLoader.js.map +1 -0
- package/dist/src/skills/skillManager.d.ts +69 -0
- package/dist/src/skills/skillManager.js +138 -0
- package/dist/src/skills/skillManager.js.map +1 -0
- package/dist/src/telemetry/activity-detector.d.ts +41 -0
- package/dist/src/telemetry/activity-detector.js +61 -0
- package/dist/src/telemetry/activity-detector.js.map +1 -0
- package/dist/src/telemetry/activity-monitor.d.ts +116 -0
- package/dist/src/telemetry/activity-monitor.js +209 -0
- package/dist/src/telemetry/activity-monitor.js.map +1 -0
- package/dist/src/telemetry/activity-types.d.ts +19 -0
- package/dist/src/telemetry/activity-types.js +21 -0
- package/dist/src/telemetry/activity-types.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +172 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +1316 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +150 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +377 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -0
- package/dist/src/telemetry/config.d.ts +31 -0
- package/dist/src/telemetry/config.js +78 -0
- package/dist/src/telemetry/config.js.map +1 -0
- package/dist/src/telemetry/constants.d.ts +6 -0
- package/dist/src/telemetry/constants.js +7 -0
- package/dist/src/telemetry/constants.js.map +1 -0
- package/dist/src/telemetry/file-exporters.d.ts +29 -0
- package/dist/src/telemetry/file-exporters.js +62 -0
- package/dist/src/telemetry/file-exporters.js.map +1 -0
- package/dist/src/telemetry/gcp-exporters.d.ts +35 -0
- package/dist/src/telemetry/gcp-exporters.js +120 -0
- package/dist/src/telemetry/gcp-exporters.js.map +1 -0
- package/dist/src/telemetry/high-water-mark-tracker.d.ts +43 -0
- package/dist/src/telemetry/high-water-mark-tracker.js +88 -0
- package/dist/src/telemetry/high-water-mark-tracker.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +33 -0
- package/dist/src/telemetry/index.js +44 -0
- package/dist/src/telemetry/index.js.map +1 -0
- package/dist/src/telemetry/integration.test.circular.d.ts +6 -0
- package/dist/src/telemetry/integration.test.circular.js +54 -0
- package/dist/src/telemetry/integration.test.circular.js.map +1 -0
- package/dist/src/telemetry/loggers.d.ts +46 -0
- package/dist/src/telemetry/loggers.js +517 -0
- package/dist/src/telemetry/loggers.js.map +1 -0
- package/dist/src/telemetry/loggers.test.circular.d.ts +6 -0
- package/dist/src/telemetry/loggers.test.circular.js +107 -0
- package/dist/src/telemetry/loggers.test.circular.js.map +1 -0
- package/dist/src/telemetry/memory-monitor.d.ts +149 -0
- package/dist/src/telemetry/memory-monitor.js +335 -0
- package/dist/src/telemetry/memory-monitor.js.map +1 -0
- package/dist/src/telemetry/metrics.d.ts +533 -0
- package/dist/src/telemetry/metrics.js +852 -0
- package/dist/src/telemetry/metrics.js.map +1 -0
- package/dist/src/telemetry/rate-limiter.d.ts +48 -0
- package/dist/src/telemetry/rate-limiter.js +100 -0
- package/dist/src/telemetry/rate-limiter.js.map +1 -0
- 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/sdk.d.ts +16 -0
- package/dist/src/telemetry/sdk.js +307 -0
- package/dist/src/telemetry/sdk.js.map +1 -0
- package/dist/src/telemetry/semantic.d.ts +82 -0
- package/dist/src/telemetry/semantic.js +357 -0
- package/dist/src/telemetry/semantic.js.map +1 -0
- 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/telemetry-utils.d.ts +6 -0
- package/dist/src/telemetry/telemetry-utils.js +14 -0
- package/dist/src/telemetry/telemetry-utils.js.map +1 -0
- package/dist/src/telemetry/telemetryAttributes.d.ts +8 -0
- package/dist/src/telemetry/telemetryAttributes.js +19 -0
- package/dist/src/telemetry/telemetryAttributes.js.map +1 -0
- package/dist/src/telemetry/tool-call-decision.d.ts +13 -0
- package/dist/src/telemetry/tool-call-decision.js +29 -0
- package/dist/src/telemetry/tool-call-decision.js.map +1 -0
- package/dist/src/telemetry/trace.d.ts +46 -0
- package/dist/src/telemetry/trace.js +121 -0
- package/dist/src/telemetry/trace.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +566 -0
- package/dist/src/telemetry/types.js +1495 -0
- package/dist/src/telemetry/types.js.map +1 -0
- package/dist/src/telemetry/uiTelemetry.d.ts +76 -0
- package/dist/src/telemetry/uiTelemetry.js +154 -0
- package/dist/src/telemetry/uiTelemetry.js.map +1 -0
- package/dist/src/test-utils/config.d.ts +17 -0
- package/dist/src/test-utils/config.js +32 -0
- package/dist/src/test-utils/config.js.map +1 -0
- package/dist/src/test-utils/index.d.ts +6 -0
- package/dist/src/test-utils/index.js +7 -0
- package/dist/src/test-utils/index.js.map +1 -0
- package/dist/src/test-utils/mock-message-bus.d.ts +43 -0
- package/dist/src/test-utils/mock-message-bus.js +96 -0
- package/dist/src/test-utils/mock-message-bus.js.map +1 -0
- package/dist/src/test-utils/mock-tool.d.ts +69 -0
- package/dist/src/test-utils/mock-tool.js +123 -0
- package/dist/src/test-utils/mock-tool.js.map +1 -0
- package/dist/src/test-utils/mockWorkspaceContext.d.ts +13 -0
- package/dist/src/test-utils/mockWorkspaceContext.js +24 -0
- package/dist/src/test-utils/mockWorkspaceContext.js.map +1 -0
- package/dist/src/tools/activate-skill.d.ts +27 -0
- package/dist/src/tools/activate-skill.js +133 -0
- package/dist/src/tools/activate-skill.js.map +1 -0
- package/dist/src/tools/ask-user.d.ts +23 -0
- package/dist/src/tools/ask-user.js +155 -0
- package/dist/src/tools/ask-user.js.map +1 -0
- 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/diffOptions.d.ts +9 -0
- package/dist/src/tools/diffOptions.js +50 -0
- package/dist/src/tools/diffOptions.js.map +1 -0
- package/dist/src/tools/edit.d.ts +79 -0
- package/dist/src/tools/edit.js +750 -0
- package/dist/src/tools/edit.js.map +1 -0
- package/dist/src/tools/get-internal-docs.d.ts +27 -0
- package/dist/src/tools/get-internal-docs.js +122 -0
- package/dist/src/tools/get-internal-docs.js.map +1 -0
- package/dist/src/tools/glob.d.ts +57 -0
- package/dist/src/tools/glob.js +240 -0
- package/dist/src/tools/glob.js.map +1 -0
- package/dist/src/tools/grep.d.ts +41 -0
- package/dist/src/tools/grep.js +505 -0
- package/dist/src/tools/grep.js.map +1 -0
- package/dist/src/tools/ls.d.ts +69 -0
- package/dist/src/tools/ls.js +214 -0
- package/dist/src/tools/ls.js.map +1 -0
- package/dist/src/tools/mcp-client-manager.d.ts +93 -0
- package/dist/src/tools/mcp-client-manager.js +338 -0
- package/dist/src/tools/mcp-client-manager.js.map +1 -0
- package/dist/src/tools/mcp-client.d.ts +243 -0
- package/dist/src/tools/mcp-client.js +1351 -0
- package/dist/src/tools/mcp-client.js.map +1 -0
- package/dist/src/tools/mcp-tool.d.ts +49 -0
- package/dist/src/tools/mcp-tool.js +300 -0
- package/dist/src/tools/mcp-tool.js.map +1 -0
- package/dist/src/tools/memoryTool.d.ts +42 -0
- package/dist/src/tools/memoryTool.js +269 -0
- package/dist/src/tools/memoryTool.js.map +1 -0
- package/dist/src/tools/modifiable-tool.d.ts +36 -0
- package/dist/src/tools/modifiable-tool.js +110 -0
- package/dist/src/tools/modifiable-tool.js.map +1 -0
- package/dist/src/tools/read-file.d.ts +37 -0
- package/dist/src/tools/read-file.js +141 -0
- package/dist/src/tools/read-file.js.map +1 -0
- package/dist/src/tools/read-many-files.d.ts +54 -0
- package/dist/src/tools/read-many-files.js +364 -0
- package/dist/src/tools/read-many-files.js.map +1 -0
- package/dist/src/tools/ripGrep.d.ts +74 -0
- package/dist/src/tools/ripGrep.js +422 -0
- package/dist/src/tools/ripGrep.js.map +1 -0
- package/dist/src/tools/shell.d.ts +33 -0
- package/dist/src/tools/shell.js +436 -0
- package/dist/src/tools/shell.js.map +1 -0
- package/dist/src/tools/tool-error.d.ts +70 -0
- package/dist/src/tools/tool-error.js +92 -0
- package/dist/src/tools/tool-error.js.map +1 -0
- package/dist/src/tools/tool-names.d.ts +41 -0
- package/dist/src/tools/tool-names.js +94 -0
- package/dist/src/tools/tool-names.js.map +1 -0
- package/dist/src/tools/tool-registry.d.ts +103 -0
- package/dist/src/tools/tool-registry.js +429 -0
- package/dist/src/tools/tool-registry.js.map +1 -0
- package/dist/src/tools/tools.d.ts +347 -0
- package/dist/src/tools/tools.js +405 -0
- package/dist/src/tools/tools.js.map +1 -0
- package/dist/src/tools/web-fetch.d.ts +35 -0
- package/dist/src/tools/web-fetch.js +299 -0
- package/dist/src/tools/web-fetch.js.map +1 -0
- package/dist/src/tools/web-search.d.ts +50 -0
- package/dist/src/tools/web-search.js +141 -0
- package/dist/src/tools/web-search.js.map +1 -0
- package/dist/src/tools/write-file.d.ts +53 -0
- package/dist/src/tools/write-file.js +341 -0
- package/dist/src/tools/write-file.js.map +1 -0
- package/dist/src/tools/write-todos.d.ts +50 -0
- package/dist/src/tools/write-todos.js +194 -0
- package/dist/src/tools/write-todos.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/bfsFileSearch.d.ts +32 -0
- package/dist/src/utils/bfsFileSearch.js +136 -0
- package/dist/src/utils/bfsFileSearch.js.map +1 -0
- package/dist/src/utils/browser.d.ts +13 -0
- package/dist/src/utils/browser.js +50 -0
- package/dist/src/utils/browser.js.map +1 -0
- package/dist/src/utils/channel.d.ts +19 -0
- package/dist/src/utils/channel.js +49 -0
- package/dist/src/utils/channel.js.map +1 -0
- 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/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/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/debugLogger.d.ts +28 -0
- package/dist/src/utils/debugLogger.js +61 -0
- package/dist/src/utils/debugLogger.js.map +1 -0
- package/dist/src/utils/delay.d.ts +16 -0
- package/dist/src/utils/delay.js +43 -0
- package/dist/src/utils/delay.js.map +1 -0
- package/dist/src/utils/editCorrector.d.ts +54 -0
- package/dist/src/utils/editCorrector.js +596 -0
- package/dist/src/utils/editCorrector.js.map +1 -0
- package/dist/src/utils/editor.d.ts +39 -0
- package/dist/src/utils/editor.js +219 -0
- package/dist/src/utils/editor.js.map +1 -0
- package/dist/src/utils/environmentContext.d.ts +23 -0
- package/dist/src/utils/environmentContext.js +81 -0
- package/dist/src/utils/environmentContext.js.map +1 -0
- package/dist/src/utils/errorParsing.d.ts +8 -0
- package/dist/src/utils/errorParsing.js +65 -0
- package/dist/src/utils/errorParsing.js.map +1 -0
- package/dist/src/utils/errorReporting.d.ts +14 -0
- package/dist/src/utils/errorReporting.js +89 -0
- package/dist/src/utils/errorReporting.js.map +1 -0
- package/dist/src/utils/errors.d.ts +53 -0
- package/dist/src/utils/errors.js +145 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/events.d.ts +211 -0
- package/dist/src/utils/events.js +134 -0
- package/dist/src/utils/events.js.map +1 -0
- 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 +86 -0
- package/dist/src/utils/extensionLoader.js +208 -0
- package/dist/src/utils/extensionLoader.js.map +1 -0
- package/dist/src/utils/fetch.d.ts +12 -0
- package/dist/src/utils/fetch.js +55 -0
- package/dist/src/utils/fetch.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/fileUtils.d.ts +86 -0
- package/dist/src/utils/fileUtils.js +495 -0
- package/dist/src/utils/fileUtils.js.map +1 -0
- package/dist/src/utils/filesearch/crawlCache.d.ts +25 -0
- package/dist/src/utils/filesearch/crawlCache.js +57 -0
- package/dist/src/utils/filesearch/crawlCache.js.map +1 -0
- package/dist/src/utils/filesearch/crawler.d.ts +16 -0
- package/dist/src/utils/filesearch/crawler.js +67 -0
- package/dist/src/utils/filesearch/crawler.js.map +1 -0
- package/dist/src/utils/filesearch/fileSearch.d.ts +39 -0
- package/dist/src/utils/filesearch/fileSearch.js +192 -0
- package/dist/src/utils/filesearch/fileSearch.js.map +1 -0
- package/dist/src/utils/filesearch/ignore.d.ts +37 -0
- package/dist/src/utils/filesearch/ignore.js +99 -0
- package/dist/src/utils/filesearch/ignore.js.map +1 -0
- package/dist/src/utils/filesearch/result-cache.d.ts +33 -0
- package/dist/src/utils/filesearch/result-cache.js +59 -0
- package/dist/src/utils/filesearch/result-cache.js.map +1 -0
- package/dist/src/utils/formatters.d.ts +7 -0
- package/dist/src/utils/formatters.js +17 -0
- package/dist/src/utils/formatters.js.map +1 -0
- package/dist/src/utils/generateContentResponseUtilities.d.ts +15 -0
- package/dist/src/utils/generateContentResponseUtilities.js +186 -0
- package/dist/src/utils/generateContentResponseUtilities.js.map +1 -0
- package/dist/src/utils/getFolderStructure.d.ts +31 -0
- package/dist/src/utils/getFolderStructure.js +243 -0
- package/dist/src/utils/getFolderStructure.js.map +1 -0
- package/dist/src/utils/getPty.d.ts +19 -0
- package/dist/src/utils/getPty.js +23 -0
- package/dist/src/utils/getPty.js.map +1 -0
- package/dist/src/utils/gitIgnoreParser.d.ts +19 -0
- package/dist/src/utils/gitIgnoreParser.js +169 -0
- package/dist/src/utils/gitIgnoreParser.js.map +1 -0
- package/dist/src/utils/gitUtils.d.ts +17 -0
- package/dist/src/utils/gitUtils.js +61 -0
- package/dist/src/utils/gitUtils.js.map +1 -0
- package/dist/src/utils/googleErrors.d.ts +104 -0
- package/dist/src/utils/googleErrors.js +165 -0
- package/dist/src/utils/googleErrors.js.map +1 -0
- package/dist/src/utils/googleQuotaErrors.d.ts +51 -0
- package/dist/src/utils/googleQuotaErrors.js +250 -0
- package/dist/src/utils/googleQuotaErrors.js.map +1 -0
- package/dist/src/utils/httpErrors.d.ts +18 -0
- package/dist/src/utils/httpErrors.js +36 -0
- package/dist/src/utils/httpErrors.js.map +1 -0
- 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/ignorePatterns.d.ts +103 -0
- package/dist/src/utils/ignorePatterns.js +220 -0
- package/dist/src/utils/ignorePatterns.js.map +1 -0
- package/dist/src/utils/installationManager.d.ts +16 -0
- package/dist/src/utils/installationManager.js +51 -0
- package/dist/src/utils/installationManager.js.map +1 -0
- package/dist/src/utils/language-detection.d.ts +6 -0
- package/dist/src/utils/language-detection.js +101 -0
- package/dist/src/utils/language-detection.js.map +1 -0
- package/dist/src/utils/llm-edit-fixer.d.ts +26 -0
- package/dist/src/utils/llm-edit-fixer.js +152 -0
- package/dist/src/utils/llm-edit-fixer.js.map +1 -0
- package/dist/src/utils/memoryDiscovery.d.ts +40 -0
- package/dist/src/utils/memoryDiscovery.js +421 -0
- package/dist/src/utils/memoryDiscovery.js.map +1 -0
- package/dist/src/utils/memoryImportProcessor.d.ts +42 -0
- package/dist/src/utils/memoryImportProcessor.js +273 -0
- package/dist/src/utils/memoryImportProcessor.js.map +1 -0
- package/dist/src/utils/messageInspectors.d.ts +8 -0
- package/dist/src/utils/messageInspectors.js +16 -0
- package/dist/src/utils/messageInspectors.js.map +1 -0
- package/dist/src/utils/nextSpeakerChecker.d.ts +12 -0
- package/dist/src/utils/nextSpeakerChecker.js +97 -0
- package/dist/src/utils/nextSpeakerChecker.js.map +1 -0
- package/dist/src/utils/package.d.ts +26 -0
- package/dist/src/utils/package.js +35 -0
- package/dist/src/utils/package.js.map +1 -0
- package/dist/src/utils/partUtils.d.ts +35 -0
- package/dist/src/utils/partUtils.js +133 -0
- package/dist/src/utils/partUtils.js.map +1 -0
- package/dist/src/utils/pathCorrector.d.ts +25 -0
- package/dist/src/utils/pathCorrector.js +43 -0
- package/dist/src/utils/pathCorrector.js.map +1 -0
- package/dist/src/utils/pathReader.d.ts +17 -0
- package/dist/src/utils/pathReader.js +92 -0
- package/dist/src/utils/pathReader.js.map +1 -0
- package/dist/src/utils/paths.d.ts +78 -0
- package/dist/src/utils/paths.js +311 -0
- package/dist/src/utils/paths.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/promptIdContext.d.ts +13 -0
- package/dist/src/utils/promptIdContext.js +23 -0
- package/dist/src/utils/promptIdContext.js.map +1 -0
- package/dist/src/utils/quotaErrorDetection.d.ts +16 -0
- package/dist/src/utils/quotaErrorDetection.js +19 -0
- package/dist/src/utils/quotaErrorDetection.js.map +1 -0
- package/dist/src/utils/retry.d.ts +39 -0
- package/dist/src/utils/retry.js +267 -0
- package/dist/src/utils/retry.js.map +1 -0
- package/dist/src/utils/safeJsonStringify.d.ts +13 -0
- package/dist/src/utils/safeJsonStringify.js +49 -0
- package/dist/src/utils/safeJsonStringify.js.map +1 -0
- package/dist/src/utils/schemaValidator.d.ts +21 -0
- package/dist/src/utils/schemaValidator.js +59 -0
- package/dist/src/utils/schemaValidator.js.map +1 -0
- package/dist/src/utils/secure-browser-launcher.d.ts +23 -0
- package/dist/src/utils/secure-browser-launcher.js +165 -0
- package/dist/src/utils/secure-browser-launcher.js.map +1 -0
- package/dist/src/utils/security.d.ts +16 -0
- package/dist/src/utils/security.js +88 -0
- package/dist/src/utils/security.js.map +1 -0
- package/dist/src/utils/session.d.ts +6 -0
- package/dist/src/utils/session.js +8 -0
- package/dist/src/utils/session.js.map +1 -0
- package/dist/src/utils/shell-utils.d.ts +118 -0
- package/dist/src/utils/shell-utils.js +708 -0
- package/dist/src/utils/shell-utils.js.map +1 -0
- package/dist/src/utils/stdio.d.ts +32 -0
- package/dist/src/utils/stdio.js +85 -0
- package/dist/src/utils/stdio.js.map +1 -0
- package/dist/src/utils/summarizer.d.ts +27 -0
- package/dist/src/utils/summarizer.js +50 -0
- package/dist/src/utils/summarizer.js.map +1 -0
- package/dist/src/utils/systemEncoding.d.ts +40 -0
- package/dist/src/utils/systemEncoding.js +150 -0
- package/dist/src/utils/systemEncoding.js.map +1 -0
- package/dist/src/utils/terminal.d.ts +22 -0
- package/dist/src/utils/terminal.js +62 -0
- package/dist/src/utils/terminal.js.map +1 -0
- package/dist/src/utils/terminalSerializer.d.ts +25 -0
- package/dist/src/utils/terminalSerializer.js +444 -0
- package/dist/src/utils/terminalSerializer.js.map +1 -0
- package/dist/src/utils/testUtils.d.ts +29 -0
- package/dist/src/utils/testUtils.js +70 -0
- package/dist/src/utils/testUtils.js.map +1 -0
- package/dist/src/utils/textUtils.d.ts +32 -0
- package/dist/src/utils/textUtils.js +65 -0
- package/dist/src/utils/textUtils.js.map +1 -0
- package/dist/src/utils/thoughtUtils.d.ts +21 -0
- package/dist/src/utils/thoughtUtils.js +39 -0
- package/dist/src/utils/thoughtUtils.js.map +1 -0
- package/dist/src/utils/tokenCalculation.d.ts +19 -0
- package/dist/src/utils/tokenCalculation.js +150 -0
- package/dist/src/utils/tokenCalculation.js.map +1 -0
- package/dist/src/utils/tool-utils.d.ts +28 -0
- package/dist/src/utils/tool-utils.js +96 -0
- package/dist/src/utils/tool-utils.js.map +1 -0
- 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/userAccountManager.d.ts +20 -0
- package/dist/src/utils/userAccountManager.js +115 -0
- package/dist/src/utils/userAccountManager.js.map +1 -0
- 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/workspaceContext.d.ts +82 -0
- package/dist/src/utils/workspaceContext.js +192 -0
- package/dist/src/utils/workspaceContext.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +97 -0
|
@@ -0,0 +1,744 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { toParts } from '../code_assist/converter.js';
|
|
7
|
+
import { createUserContent, FinishReason } from '@google/genai';
|
|
8
|
+
import { retryWithBackoff, isRetryableError } from '../utils/retry.js';
|
|
9
|
+
import { resolveModel, isGemini2Model, isPreviewModel, } from '../config/models.js';
|
|
10
|
+
import { hasCycleInSchema } from '../tools/tools.js';
|
|
11
|
+
import { logContentRetry, logContentRetryFailure, } from '../telemetry/loggers.js';
|
|
12
|
+
import { ChatRecordingService, } from '../services/chatRecordingService.js';
|
|
13
|
+
import { ContentRetryEvent, ContentRetryFailureEvent, } from '../telemetry/types.js';
|
|
14
|
+
import { handleFallback } from '../fallback/handler.js';
|
|
15
|
+
import { isFunctionResponse } from '../utils/messageInspectors.js';
|
|
16
|
+
import { partListUnionToString } from './geminiRequest.js';
|
|
17
|
+
import { estimateTokenCountSync } from '../utils/tokenCalculation.js';
|
|
18
|
+
import { applyModelSelection, createAvailabilityContextProvider, } from '../availability/policyHelpers.js';
|
|
19
|
+
import { coreEvents } from '../utils/events.js';
|
|
20
|
+
export var StreamEventType;
|
|
21
|
+
(function (StreamEventType) {
|
|
22
|
+
/** A regular content chunk from the API. */
|
|
23
|
+
StreamEventType["CHUNK"] = "chunk";
|
|
24
|
+
/** A signal that a retry is about to happen. The UI should discard any partial
|
|
25
|
+
* content from the attempt that just failed. */
|
|
26
|
+
StreamEventType["RETRY"] = "retry";
|
|
27
|
+
/** A signal that the agent execution has been stopped by a hook. */
|
|
28
|
+
StreamEventType["AGENT_EXECUTION_STOPPED"] = "agent_execution_stopped";
|
|
29
|
+
/** A signal that the agent execution has been blocked by a hook. */
|
|
30
|
+
StreamEventType["AGENT_EXECUTION_BLOCKED"] = "agent_execution_blocked";
|
|
31
|
+
})(StreamEventType || (StreamEventType = {}));
|
|
32
|
+
const INVALID_CONTENT_RETRY_OPTIONS = {
|
|
33
|
+
maxAttempts: 2, // 1 initial call + 1 retry
|
|
34
|
+
initialDelayMs: 500,
|
|
35
|
+
};
|
|
36
|
+
export const SYNTHETIC_THOUGHT_SIGNATURE = 'skip_thought_signature_validator';
|
|
37
|
+
/**
|
|
38
|
+
* Returns true if the response is valid, false otherwise.
|
|
39
|
+
*/
|
|
40
|
+
function isValidResponse(response) {
|
|
41
|
+
if (response.candidates === undefined || response.candidates.length === 0) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
const content = response.candidates[0]?.content;
|
|
45
|
+
if (content === undefined) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
return isValidContent(content);
|
|
49
|
+
}
|
|
50
|
+
export function isValidNonThoughtTextPart(part) {
|
|
51
|
+
return (typeof part.text === 'string' &&
|
|
52
|
+
!part.thought &&
|
|
53
|
+
// Technically, the model should never generate parts that have text and
|
|
54
|
+
// any of these but we don't trust them so check anyways.
|
|
55
|
+
!part.functionCall &&
|
|
56
|
+
!part.functionResponse &&
|
|
57
|
+
!part.inlineData &&
|
|
58
|
+
!part.fileData);
|
|
59
|
+
}
|
|
60
|
+
function isValidContent(content) {
|
|
61
|
+
if (content.parts === undefined || content.parts.length === 0) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
for (const part of content.parts) {
|
|
65
|
+
if (part === undefined || Object.keys(part).length === 0) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
if (!part.thought && part.text !== undefined && part.text === '') {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Validates the history contains the correct roles.
|
|
76
|
+
*
|
|
77
|
+
* @throws Error if the history does not start with a user turn.
|
|
78
|
+
* @throws Error if the history contains an invalid role.
|
|
79
|
+
*/
|
|
80
|
+
function validateHistory(history) {
|
|
81
|
+
for (const content of history) {
|
|
82
|
+
if (content.role !== 'user' && content.role !== 'model') {
|
|
83
|
+
throw new Error(`Role must be user or model, but got ${content.role}.`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Extracts the curated (valid) history from a comprehensive history.
|
|
89
|
+
*
|
|
90
|
+
* @remarks
|
|
91
|
+
* The model may sometimes generate invalid or empty contents(e.g., due to safety
|
|
92
|
+
* filters or recitation). Extracting valid turns from the history
|
|
93
|
+
* ensures that subsequent requests could be accepted by the model.
|
|
94
|
+
*/
|
|
95
|
+
function extractCuratedHistory(comprehensiveHistory) {
|
|
96
|
+
if (comprehensiveHistory === undefined || comprehensiveHistory.length === 0) {
|
|
97
|
+
return [];
|
|
98
|
+
}
|
|
99
|
+
const curatedHistory = [];
|
|
100
|
+
const length = comprehensiveHistory.length;
|
|
101
|
+
let i = 0;
|
|
102
|
+
while (i < length) {
|
|
103
|
+
if (comprehensiveHistory[i].role === 'user') {
|
|
104
|
+
curatedHistory.push(comprehensiveHistory[i]);
|
|
105
|
+
i++;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
const modelOutput = [];
|
|
109
|
+
let isValid = true;
|
|
110
|
+
while (i < length && comprehensiveHistory[i].role === 'model') {
|
|
111
|
+
modelOutput.push(comprehensiveHistory[i]);
|
|
112
|
+
if (isValid && !isValidContent(comprehensiveHistory[i])) {
|
|
113
|
+
isValid = false;
|
|
114
|
+
}
|
|
115
|
+
i++;
|
|
116
|
+
}
|
|
117
|
+
if (isValid) {
|
|
118
|
+
curatedHistory.push(...modelOutput);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return curatedHistory;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Custom error to signal that a stream completed with invalid content,
|
|
126
|
+
* which should trigger a retry.
|
|
127
|
+
*/
|
|
128
|
+
export class InvalidStreamError extends Error {
|
|
129
|
+
type;
|
|
130
|
+
constructor(message, type) {
|
|
131
|
+
super(message);
|
|
132
|
+
this.name = 'InvalidStreamError';
|
|
133
|
+
this.type = type;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Custom error to signal that agent execution has been stopped.
|
|
138
|
+
*/
|
|
139
|
+
export class AgentExecutionStoppedError extends Error {
|
|
140
|
+
reason;
|
|
141
|
+
constructor(reason) {
|
|
142
|
+
super(reason);
|
|
143
|
+
this.reason = reason;
|
|
144
|
+
this.name = 'AgentExecutionStoppedError';
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Custom error to signal that agent execution has been blocked.
|
|
149
|
+
*/
|
|
150
|
+
export class AgentExecutionBlockedError extends Error {
|
|
151
|
+
reason;
|
|
152
|
+
syntheticResponse;
|
|
153
|
+
constructor(reason, syntheticResponse) {
|
|
154
|
+
super(reason);
|
|
155
|
+
this.reason = reason;
|
|
156
|
+
this.syntheticResponse = syntheticResponse;
|
|
157
|
+
this.name = 'AgentExecutionBlockedError';
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Chat session that enables sending messages to the model with previous
|
|
162
|
+
* conversation context.
|
|
163
|
+
*
|
|
164
|
+
* @remarks
|
|
165
|
+
* The session maintains all the turns between user and model.
|
|
166
|
+
*/
|
|
167
|
+
export class GeminiChat {
|
|
168
|
+
config;
|
|
169
|
+
systemInstruction;
|
|
170
|
+
tools;
|
|
171
|
+
history;
|
|
172
|
+
// A promise to represent the current state of the message being sent to the
|
|
173
|
+
// model.
|
|
174
|
+
sendPromise = Promise.resolve();
|
|
175
|
+
chatRecordingService;
|
|
176
|
+
lastPromptTokenCount;
|
|
177
|
+
constructor(config, systemInstruction = '', tools = [], history = [], resumedSessionData) {
|
|
178
|
+
this.config = config;
|
|
179
|
+
this.systemInstruction = systemInstruction;
|
|
180
|
+
this.tools = tools;
|
|
181
|
+
this.history = history;
|
|
182
|
+
validateHistory(history);
|
|
183
|
+
this.chatRecordingService = new ChatRecordingService(config);
|
|
184
|
+
this.chatRecordingService.initialize(resumedSessionData);
|
|
185
|
+
this.lastPromptTokenCount = estimateTokenCountSync(this.history.flatMap((c) => c.parts || []));
|
|
186
|
+
}
|
|
187
|
+
setSystemInstruction(sysInstr) {
|
|
188
|
+
this.systemInstruction = sysInstr;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Sends a message to the model and returns the response in chunks.
|
|
192
|
+
*
|
|
193
|
+
* @remarks
|
|
194
|
+
* This method will wait for the previous message to be processed before
|
|
195
|
+
* sending the next message.
|
|
196
|
+
*
|
|
197
|
+
* @see {@link Chat#sendMessage} for non-streaming method.
|
|
198
|
+
* @param modelConfigKey - The key for the model config.
|
|
199
|
+
* @param message - The list of messages to send.
|
|
200
|
+
* @param prompt_id - The ID of the prompt.
|
|
201
|
+
* @param signal - An abort signal for this message.
|
|
202
|
+
* @param displayContent - An optional user-friendly version of the message to record.
|
|
203
|
+
* @return The model's response.
|
|
204
|
+
*
|
|
205
|
+
* @example
|
|
206
|
+
* ```ts
|
|
207
|
+
* const chat = ai.chats.create({model: 'gemini-2.0-flash'});
|
|
208
|
+
* const response = await chat.sendMessageStream({
|
|
209
|
+
* message: 'Why is the sky blue?'
|
|
210
|
+
* });
|
|
211
|
+
* for await (const chunk of response) {
|
|
212
|
+
* console.log(chunk.text);
|
|
213
|
+
* }
|
|
214
|
+
* ```
|
|
215
|
+
*/
|
|
216
|
+
async sendMessageStream(modelConfigKey, message, prompt_id, signal, displayContent) {
|
|
217
|
+
await this.sendPromise;
|
|
218
|
+
let streamDoneResolver;
|
|
219
|
+
const streamDonePromise = new Promise((resolve) => {
|
|
220
|
+
streamDoneResolver = resolve;
|
|
221
|
+
});
|
|
222
|
+
this.sendPromise = streamDonePromise;
|
|
223
|
+
const userContent = createUserContent(message);
|
|
224
|
+
const { model } = this.config.modelConfigService.getResolvedConfig(modelConfigKey);
|
|
225
|
+
// Record user input - capture complete message with all parts (text, files, images, etc.)
|
|
226
|
+
// but skip recording function responses (tool call results) as they should be stored in tool call records
|
|
227
|
+
if (!isFunctionResponse(userContent)) {
|
|
228
|
+
const userMessageParts = userContent.parts || [];
|
|
229
|
+
const userMessageContent = partListUnionToString(userMessageParts);
|
|
230
|
+
let finalDisplayContent = undefined;
|
|
231
|
+
if (displayContent !== undefined) {
|
|
232
|
+
const displayParts = toParts(Array.isArray(displayContent) ? displayContent : [displayContent]);
|
|
233
|
+
const displayContentString = partListUnionToString(displayParts);
|
|
234
|
+
if (displayContentString !== userMessageContent) {
|
|
235
|
+
finalDisplayContent = displayParts;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
this.chatRecordingService.recordMessage({
|
|
239
|
+
model,
|
|
240
|
+
type: 'user',
|
|
241
|
+
content: userMessageParts,
|
|
242
|
+
displayContent: finalDisplayContent,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
// Add user content to history ONCE before any attempts.
|
|
246
|
+
this.history.push(userContent);
|
|
247
|
+
const requestContents = this.getHistory(true);
|
|
248
|
+
const streamWithRetries = async function* () {
|
|
249
|
+
try {
|
|
250
|
+
let lastError = new Error('Request failed after all retries.');
|
|
251
|
+
const maxAttempts = INVALID_CONTENT_RETRY_OPTIONS.maxAttempts;
|
|
252
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
253
|
+
let isConnectionPhase = true;
|
|
254
|
+
try {
|
|
255
|
+
if (attempt > 0) {
|
|
256
|
+
yield { type: StreamEventType.RETRY };
|
|
257
|
+
}
|
|
258
|
+
// If this is a retry, update the key with the new context.
|
|
259
|
+
const currentConfigKey = attempt > 0
|
|
260
|
+
? { ...modelConfigKey, isRetry: true }
|
|
261
|
+
: modelConfigKey;
|
|
262
|
+
isConnectionPhase = true;
|
|
263
|
+
const stream = await this.makeApiCallAndProcessStream(currentConfigKey, requestContents, prompt_id, signal);
|
|
264
|
+
isConnectionPhase = false;
|
|
265
|
+
for await (const chunk of stream) {
|
|
266
|
+
yield { type: StreamEventType.CHUNK, value: chunk };
|
|
267
|
+
}
|
|
268
|
+
lastError = null;
|
|
269
|
+
break;
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
if (error instanceof AgentExecutionStoppedError) {
|
|
273
|
+
yield {
|
|
274
|
+
type: StreamEventType.AGENT_EXECUTION_STOPPED,
|
|
275
|
+
reason: error.reason,
|
|
276
|
+
};
|
|
277
|
+
lastError = null; // Clear error as this is an expected stop
|
|
278
|
+
return; // Stop the generator
|
|
279
|
+
}
|
|
280
|
+
if (error instanceof AgentExecutionBlockedError) {
|
|
281
|
+
yield {
|
|
282
|
+
type: StreamEventType.AGENT_EXECUTION_BLOCKED,
|
|
283
|
+
reason: error.reason,
|
|
284
|
+
};
|
|
285
|
+
if (error.syntheticResponse) {
|
|
286
|
+
yield {
|
|
287
|
+
type: StreamEventType.CHUNK,
|
|
288
|
+
value: error.syntheticResponse,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
lastError = null; // Clear error as this is an expected stop
|
|
292
|
+
return; // Stop the generator
|
|
293
|
+
}
|
|
294
|
+
if (isConnectionPhase) {
|
|
295
|
+
throw error;
|
|
296
|
+
}
|
|
297
|
+
lastError = error;
|
|
298
|
+
const isContentError = error instanceof InvalidStreamError;
|
|
299
|
+
const isRetryable = isRetryableError(error, this.config.getRetryFetchErrors());
|
|
300
|
+
if ((isContentError && isGemini2Model(model)) ||
|
|
301
|
+
(isRetryable && !signal.aborted)) {
|
|
302
|
+
// Check if we have more attempts left.
|
|
303
|
+
if (attempt < maxAttempts - 1) {
|
|
304
|
+
const delayMs = INVALID_CONTENT_RETRY_OPTIONS.initialDelayMs;
|
|
305
|
+
const retryType = isContentError ? error.type : 'NETWORK_ERROR';
|
|
306
|
+
logContentRetry(this.config, new ContentRetryEvent(attempt, retryType, delayMs, model));
|
|
307
|
+
coreEvents.emitRetryAttempt({
|
|
308
|
+
attempt: attempt + 1,
|
|
309
|
+
maxAttempts,
|
|
310
|
+
delayMs: delayMs * (attempt + 1),
|
|
311
|
+
error: error instanceof Error ? error.message : String(error),
|
|
312
|
+
model,
|
|
313
|
+
});
|
|
314
|
+
await new Promise((res) => setTimeout(res, delayMs * (attempt + 1)));
|
|
315
|
+
continue;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
break;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
if (lastError) {
|
|
322
|
+
if (lastError instanceof InvalidStreamError &&
|
|
323
|
+
isGemini2Model(model)) {
|
|
324
|
+
logContentRetryFailure(this.config, new ContentRetryFailureEvent(maxAttempts, lastError.type, model));
|
|
325
|
+
}
|
|
326
|
+
throw lastError;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
finally {
|
|
330
|
+
streamDoneResolver();
|
|
331
|
+
}
|
|
332
|
+
};
|
|
333
|
+
return streamWithRetries.call(this);
|
|
334
|
+
}
|
|
335
|
+
async makeApiCallAndProcessStream(modelConfigKey, requestContents, prompt_id, abortSignal) {
|
|
336
|
+
const contentsForPreviewModel = this.ensureActiveLoopHasThoughtSignatures(requestContents);
|
|
337
|
+
// Track final request parameters for AfterModel hooks
|
|
338
|
+
const { model: availabilityFinalModel, config: newAvailabilityConfig, maxAttempts: availabilityMaxAttempts, } = applyModelSelection(this.config, modelConfigKey);
|
|
339
|
+
let lastModelToUse = availabilityFinalModel;
|
|
340
|
+
let currentGenerateContentConfig = newAvailabilityConfig;
|
|
341
|
+
let lastConfig = currentGenerateContentConfig;
|
|
342
|
+
let lastContentsToUse = requestContents;
|
|
343
|
+
const getAvailabilityContext = createAvailabilityContextProvider(this.config, () => lastModelToUse);
|
|
344
|
+
// Track initial active model to detect fallback changes
|
|
345
|
+
const initialActiveModel = this.config.getActiveModel();
|
|
346
|
+
const apiCall = async () => {
|
|
347
|
+
// Default to the last used model (which respects arguments/availability selection)
|
|
348
|
+
let modelToUse = resolveModel(lastModelToUse, this.config.getPreviewFeatures());
|
|
349
|
+
// If the active model has changed (e.g. due to a fallback updating the config),
|
|
350
|
+
// we switch to the new active model.
|
|
351
|
+
if (this.config.getActiveModel() !== initialActiveModel) {
|
|
352
|
+
modelToUse = resolveModel(this.config.getActiveModel(), this.config.getPreviewFeatures());
|
|
353
|
+
}
|
|
354
|
+
if (modelToUse !== lastModelToUse) {
|
|
355
|
+
const { generateContentConfig: newConfig } = this.config.modelConfigService.getResolvedConfig({
|
|
356
|
+
...modelConfigKey,
|
|
357
|
+
model: modelToUse,
|
|
358
|
+
});
|
|
359
|
+
currentGenerateContentConfig = newConfig;
|
|
360
|
+
}
|
|
361
|
+
lastModelToUse = modelToUse;
|
|
362
|
+
const config = {
|
|
363
|
+
...currentGenerateContentConfig,
|
|
364
|
+
// TODO(12622): Ensure we don't overrwrite these when they are
|
|
365
|
+
// passed via config.
|
|
366
|
+
systemInstruction: this.systemInstruction,
|
|
367
|
+
tools: this.tools,
|
|
368
|
+
abortSignal,
|
|
369
|
+
};
|
|
370
|
+
let contentsToUse = isPreviewModel(modelToUse)
|
|
371
|
+
? contentsForPreviewModel
|
|
372
|
+
: requestContents;
|
|
373
|
+
const hookSystem = this.config.getHookSystem();
|
|
374
|
+
if (hookSystem) {
|
|
375
|
+
const beforeModelResult = await hookSystem.fireBeforeModelEvent({
|
|
376
|
+
model: modelToUse,
|
|
377
|
+
config,
|
|
378
|
+
contents: contentsToUse,
|
|
379
|
+
});
|
|
380
|
+
if (beforeModelResult.stopped) {
|
|
381
|
+
throw new AgentExecutionStoppedError(beforeModelResult.reason || 'Agent execution stopped by hook');
|
|
382
|
+
}
|
|
383
|
+
if (beforeModelResult.blocked) {
|
|
384
|
+
const syntheticResponse = beforeModelResult.syntheticResponse;
|
|
385
|
+
for (const candidate of syntheticResponse?.candidates ?? []) {
|
|
386
|
+
if (!candidate.finishReason) {
|
|
387
|
+
candidate.finishReason = FinishReason.STOP;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
throw new AgentExecutionBlockedError(beforeModelResult.reason || 'Model call blocked by hook', syntheticResponse);
|
|
391
|
+
}
|
|
392
|
+
if (beforeModelResult.modifiedConfig) {
|
|
393
|
+
Object.assign(config, beforeModelResult.modifiedConfig);
|
|
394
|
+
}
|
|
395
|
+
if (beforeModelResult.modifiedContents &&
|
|
396
|
+
Array.isArray(beforeModelResult.modifiedContents)) {
|
|
397
|
+
contentsToUse = beforeModelResult.modifiedContents;
|
|
398
|
+
}
|
|
399
|
+
const toolSelectionResult = await hookSystem.fireBeforeToolSelectionEvent({
|
|
400
|
+
model: modelToUse,
|
|
401
|
+
config,
|
|
402
|
+
contents: contentsToUse,
|
|
403
|
+
});
|
|
404
|
+
if (toolSelectionResult.toolConfig) {
|
|
405
|
+
config.toolConfig = toolSelectionResult.toolConfig;
|
|
406
|
+
}
|
|
407
|
+
if (toolSelectionResult.tools &&
|
|
408
|
+
Array.isArray(toolSelectionResult.tools)) {
|
|
409
|
+
config.tools = toolSelectionResult.tools;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
// Track final request parameters for AfterModel hooks
|
|
413
|
+
lastModelToUse = modelToUse;
|
|
414
|
+
lastConfig = config;
|
|
415
|
+
lastContentsToUse = contentsToUse;
|
|
416
|
+
return this.config.getContentGenerator().generateContentStream({
|
|
417
|
+
model: modelToUse,
|
|
418
|
+
contents: contentsToUse,
|
|
419
|
+
config,
|
|
420
|
+
}, prompt_id);
|
|
421
|
+
};
|
|
422
|
+
const onPersistent429Callback = async (authType, error) => handleFallback(this.config, lastModelToUse, authType, error);
|
|
423
|
+
const onValidationRequiredCallback = async (validationError) => {
|
|
424
|
+
const handler = this.config.getValidationHandler();
|
|
425
|
+
if (typeof handler !== 'function') {
|
|
426
|
+
// No handler registered, re-throw to show default error message
|
|
427
|
+
throw validationError;
|
|
428
|
+
}
|
|
429
|
+
return handler(validationError.validationLink, validationError.validationDescription, validationError.learnMoreUrl);
|
|
430
|
+
};
|
|
431
|
+
const streamResponse = await retryWithBackoff(apiCall, {
|
|
432
|
+
onPersistent429: onPersistent429Callback,
|
|
433
|
+
onValidationRequired: onValidationRequiredCallback,
|
|
434
|
+
authType: this.config.getContentGeneratorConfig()?.authType,
|
|
435
|
+
retryFetchErrors: this.config.getRetryFetchErrors(),
|
|
436
|
+
signal: abortSignal,
|
|
437
|
+
maxAttempts: availabilityMaxAttempts,
|
|
438
|
+
getAvailabilityContext,
|
|
439
|
+
onRetry: (attempt, error, delayMs) => {
|
|
440
|
+
coreEvents.emitRetryAttempt({
|
|
441
|
+
attempt,
|
|
442
|
+
maxAttempts: availabilityMaxAttempts ?? 10,
|
|
443
|
+
delayMs,
|
|
444
|
+
error: error instanceof Error ? error.message : String(error),
|
|
445
|
+
model: lastModelToUse,
|
|
446
|
+
});
|
|
447
|
+
},
|
|
448
|
+
});
|
|
449
|
+
// Store the original request for AfterModel hooks
|
|
450
|
+
const originalRequest = {
|
|
451
|
+
model: lastModelToUse,
|
|
452
|
+
config: lastConfig,
|
|
453
|
+
contents: lastContentsToUse,
|
|
454
|
+
};
|
|
455
|
+
return this.processStreamResponse(lastModelToUse, streamResponse, originalRequest);
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Returns the chat history.
|
|
459
|
+
*
|
|
460
|
+
* @remarks
|
|
461
|
+
* The history is a list of contents alternating between user and model.
|
|
462
|
+
*
|
|
463
|
+
* There are two types of history:
|
|
464
|
+
* - The `curated history` contains only the valid turns between user and
|
|
465
|
+
* model, which will be included in the subsequent requests sent to the model.
|
|
466
|
+
* - The `comprehensive history` contains all turns, including invalid or
|
|
467
|
+
* empty model outputs, providing a complete record of the history.
|
|
468
|
+
*
|
|
469
|
+
* The history is updated after receiving the response from the model,
|
|
470
|
+
* for streaming response, it means receiving the last chunk of the response.
|
|
471
|
+
*
|
|
472
|
+
* The `comprehensive history` is returned by default. To get the `curated
|
|
473
|
+
* history`, set the `curated` parameter to `true`.
|
|
474
|
+
*
|
|
475
|
+
* @param curated - whether to return the curated history or the comprehensive
|
|
476
|
+
* history.
|
|
477
|
+
* @return History contents alternating between user and model for the entire
|
|
478
|
+
* chat session.
|
|
479
|
+
*/
|
|
480
|
+
getHistory(curated = false) {
|
|
481
|
+
const history = curated
|
|
482
|
+
? extractCuratedHistory(this.history)
|
|
483
|
+
: this.history;
|
|
484
|
+
// Deep copy the history to avoid mutating the history outside of the
|
|
485
|
+
// chat session.
|
|
486
|
+
return structuredClone(history);
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Clears the chat history.
|
|
490
|
+
*/
|
|
491
|
+
clearHistory() {
|
|
492
|
+
this.history = [];
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* Adds a new entry to the chat history.
|
|
496
|
+
*/
|
|
497
|
+
addHistory(content) {
|
|
498
|
+
this.history.push(content);
|
|
499
|
+
}
|
|
500
|
+
setHistory(history) {
|
|
501
|
+
this.history = history;
|
|
502
|
+
this.lastPromptTokenCount = estimateTokenCountSync(this.history.flatMap((c) => c.parts || []));
|
|
503
|
+
}
|
|
504
|
+
stripThoughtsFromHistory() {
|
|
505
|
+
this.history = this.history.map((content) => {
|
|
506
|
+
const newContent = { ...content };
|
|
507
|
+
if (newContent.parts) {
|
|
508
|
+
newContent.parts = newContent.parts.map((part) => {
|
|
509
|
+
if (part && typeof part === 'object' && 'thoughtSignature' in part) {
|
|
510
|
+
const newPart = { ...part };
|
|
511
|
+
delete newPart.thoughtSignature;
|
|
512
|
+
return newPart;
|
|
513
|
+
}
|
|
514
|
+
return part;
|
|
515
|
+
});
|
|
516
|
+
}
|
|
517
|
+
return newContent;
|
|
518
|
+
});
|
|
519
|
+
}
|
|
520
|
+
// To ensure our requests validate, the first function call in every model
|
|
521
|
+
// turn within the active loop must have a `thoughtSignature` property.
|
|
522
|
+
// If we do not do this, we will get back 400 errors from the API.
|
|
523
|
+
ensureActiveLoopHasThoughtSignatures(requestContents) {
|
|
524
|
+
// First, find the start of the active loop by finding the last user turn
|
|
525
|
+
// with a text message, i.e. that is not a function response.
|
|
526
|
+
let activeLoopStartIndex = -1;
|
|
527
|
+
for (let i = requestContents.length - 1; i >= 0; i--) {
|
|
528
|
+
const content = requestContents[i];
|
|
529
|
+
if (content.role === 'user' && content.parts?.some((part) => part.text)) {
|
|
530
|
+
activeLoopStartIndex = i;
|
|
531
|
+
break;
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
if (activeLoopStartIndex === -1) {
|
|
535
|
+
return requestContents;
|
|
536
|
+
}
|
|
537
|
+
// Iterate through every message in the active loop, ensuring that the first
|
|
538
|
+
// function call in each message's list of parts has a valid
|
|
539
|
+
// thoughtSignature property. If it does not we replace the function call
|
|
540
|
+
// with a copy that uses the synthetic thought signature.
|
|
541
|
+
const newContents = requestContents.slice(); // Shallow copy the array
|
|
542
|
+
for (let i = activeLoopStartIndex; i < newContents.length; i++) {
|
|
543
|
+
const content = newContents[i];
|
|
544
|
+
if (content.role === 'model' && content.parts) {
|
|
545
|
+
const newParts = content.parts.slice();
|
|
546
|
+
for (let j = 0; j < newParts.length; j++) {
|
|
547
|
+
const part = newParts[j];
|
|
548
|
+
if (part.functionCall) {
|
|
549
|
+
if (!part.thoughtSignature) {
|
|
550
|
+
newParts[j] = {
|
|
551
|
+
...part,
|
|
552
|
+
thoughtSignature: SYNTHETIC_THOUGHT_SIGNATURE,
|
|
553
|
+
};
|
|
554
|
+
newContents[i] = {
|
|
555
|
+
...content,
|
|
556
|
+
parts: newParts,
|
|
557
|
+
};
|
|
558
|
+
}
|
|
559
|
+
break; // Only consider the first function call
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
return newContents;
|
|
565
|
+
}
|
|
566
|
+
setTools(tools) {
|
|
567
|
+
this.tools = tools;
|
|
568
|
+
}
|
|
569
|
+
async maybeIncludeSchemaDepthContext(error) {
|
|
570
|
+
// Check for potentially problematic cyclic tools with cyclic schemas
|
|
571
|
+
// and include a recommendation to remove potentially problematic tools.
|
|
572
|
+
if (isSchemaDepthError(error.message) ||
|
|
573
|
+
isInvalidArgumentError(error.message)) {
|
|
574
|
+
const tools = this.config.getToolRegistry().getAllTools();
|
|
575
|
+
const cyclicSchemaTools = [];
|
|
576
|
+
for (const tool of tools) {
|
|
577
|
+
if ((tool.schema.parametersJsonSchema &&
|
|
578
|
+
hasCycleInSchema(tool.schema.parametersJsonSchema)) ||
|
|
579
|
+
(tool.schema.parameters && hasCycleInSchema(tool.schema.parameters))) {
|
|
580
|
+
cyclicSchemaTools.push(tool.displayName);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
if (cyclicSchemaTools.length > 0) {
|
|
584
|
+
const extraDetails = `\n\nThis error was probably caused by cyclic schema references in one of the following tools, try disabling them with excludeTools:\n\n - ` +
|
|
585
|
+
cyclicSchemaTools.join(`\n - `) +
|
|
586
|
+
`\n`;
|
|
587
|
+
error.message += extraDetails;
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
async *processStreamResponse(model, streamResponse, originalRequest) {
|
|
592
|
+
const modelResponseParts = [];
|
|
593
|
+
let hasToolCall = false;
|
|
594
|
+
let finishReason;
|
|
595
|
+
for await (const chunk of streamResponse) {
|
|
596
|
+
const candidateWithReason = chunk?.candidates?.find((candidate) => candidate.finishReason);
|
|
597
|
+
if (candidateWithReason) {
|
|
598
|
+
finishReason = candidateWithReason.finishReason;
|
|
599
|
+
}
|
|
600
|
+
if (isValidResponse(chunk)) {
|
|
601
|
+
const content = chunk.candidates?.[0]?.content;
|
|
602
|
+
if (content?.parts) {
|
|
603
|
+
if (content.parts.some((part) => part.thought)) {
|
|
604
|
+
// Record thoughts
|
|
605
|
+
this.recordThoughtFromContent(content);
|
|
606
|
+
}
|
|
607
|
+
if (content.parts.some((part) => part.functionCall)) {
|
|
608
|
+
hasToolCall = true;
|
|
609
|
+
}
|
|
610
|
+
modelResponseParts.push(...content.parts.filter((part) => !part.thought));
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
// Record token usage if this chunk has usageMetadata
|
|
614
|
+
if (chunk.usageMetadata) {
|
|
615
|
+
this.chatRecordingService.recordMessageTokens(chunk.usageMetadata);
|
|
616
|
+
if (chunk.usageMetadata.promptTokenCount !== undefined) {
|
|
617
|
+
this.lastPromptTokenCount = chunk.usageMetadata.promptTokenCount;
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
const hookSystem = this.config.getHookSystem();
|
|
621
|
+
if (originalRequest && chunk && hookSystem) {
|
|
622
|
+
const hookResult = await hookSystem.fireAfterModelEvent(originalRequest, chunk);
|
|
623
|
+
if (hookResult.stopped) {
|
|
624
|
+
throw new AgentExecutionStoppedError(hookResult.reason || 'Agent execution stopped by hook');
|
|
625
|
+
}
|
|
626
|
+
if (hookResult.blocked) {
|
|
627
|
+
throw new AgentExecutionBlockedError(hookResult.reason || 'Agent execution blocked by hook', hookResult.response);
|
|
628
|
+
}
|
|
629
|
+
yield hookResult.response;
|
|
630
|
+
}
|
|
631
|
+
else {
|
|
632
|
+
yield chunk;
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
// String thoughts and consolidate text parts.
|
|
636
|
+
const consolidatedParts = [];
|
|
637
|
+
for (const part of modelResponseParts) {
|
|
638
|
+
const lastPart = consolidatedParts[consolidatedParts.length - 1];
|
|
639
|
+
if (lastPart?.text &&
|
|
640
|
+
isValidNonThoughtTextPart(lastPart) &&
|
|
641
|
+
isValidNonThoughtTextPart(part)) {
|
|
642
|
+
lastPart.text += part.text;
|
|
643
|
+
}
|
|
644
|
+
else {
|
|
645
|
+
consolidatedParts.push(part);
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
const responseText = consolidatedParts
|
|
649
|
+
.filter((part) => part.text)
|
|
650
|
+
.map((part) => part.text)
|
|
651
|
+
.join('')
|
|
652
|
+
.trim();
|
|
653
|
+
// Record model response text from the collected parts
|
|
654
|
+
if (responseText) {
|
|
655
|
+
this.chatRecordingService.recordMessage({
|
|
656
|
+
model,
|
|
657
|
+
type: 'gemini',
|
|
658
|
+
content: responseText,
|
|
659
|
+
});
|
|
660
|
+
}
|
|
661
|
+
// Stream validation logic: A stream is considered successful if:
|
|
662
|
+
// 1. There's a tool call OR
|
|
663
|
+
// 2. A not MALFORMED_FUNCTION_CALL finish reason and a non-mepty resp
|
|
664
|
+
//
|
|
665
|
+
// We throw an error only when there's no tool call AND:
|
|
666
|
+
// - No finish reason, OR
|
|
667
|
+
// - MALFORMED_FUNCTION_CALL finish reason OR
|
|
668
|
+
// - Empty response text (e.g., only thoughts with no actual content)
|
|
669
|
+
if (!hasToolCall) {
|
|
670
|
+
if (!finishReason) {
|
|
671
|
+
throw new InvalidStreamError('Model stream ended without a finish reason.', 'NO_FINISH_REASON');
|
|
672
|
+
}
|
|
673
|
+
if (finishReason === FinishReason.MALFORMED_FUNCTION_CALL) {
|
|
674
|
+
throw new InvalidStreamError('Model stream ended with malformed function call.', 'MALFORMED_FUNCTION_CALL');
|
|
675
|
+
}
|
|
676
|
+
if (!responseText) {
|
|
677
|
+
throw new InvalidStreamError('Model stream ended with empty response text.', 'NO_RESPONSE_TEXT');
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
this.history.push({ role: 'model', parts: consolidatedParts });
|
|
681
|
+
}
|
|
682
|
+
getLastPromptTokenCount() {
|
|
683
|
+
return this.lastPromptTokenCount;
|
|
684
|
+
}
|
|
685
|
+
/**
|
|
686
|
+
* Gets the chat recording service instance.
|
|
687
|
+
*/
|
|
688
|
+
getChatRecordingService() {
|
|
689
|
+
return this.chatRecordingService;
|
|
690
|
+
}
|
|
691
|
+
/**
|
|
692
|
+
* Records completed tool calls with full metadata.
|
|
693
|
+
* This is called by external components when tool calls complete, before sending responses to Gemini.
|
|
694
|
+
*/
|
|
695
|
+
recordCompletedToolCalls(model, toolCalls) {
|
|
696
|
+
const toolCallRecords = toolCalls.map((call) => {
|
|
697
|
+
const resultDisplayRaw = call.response?.resultDisplay;
|
|
698
|
+
const resultDisplay = typeof resultDisplayRaw === 'string' ||
|
|
699
|
+
(typeof resultDisplayRaw === 'object' && resultDisplayRaw !== null)
|
|
700
|
+
? resultDisplayRaw
|
|
701
|
+
: undefined;
|
|
702
|
+
return {
|
|
703
|
+
id: call.request.callId,
|
|
704
|
+
name: call.request.name,
|
|
705
|
+
args: call.request.args,
|
|
706
|
+
result: call.response?.responseParts || null,
|
|
707
|
+
status: call.status,
|
|
708
|
+
timestamp: new Date().toISOString(),
|
|
709
|
+
resultDisplay,
|
|
710
|
+
};
|
|
711
|
+
});
|
|
712
|
+
this.chatRecordingService.recordToolCalls(model, toolCallRecords);
|
|
713
|
+
}
|
|
714
|
+
/**
|
|
715
|
+
* Extracts and records thought from thought content.
|
|
716
|
+
*/
|
|
717
|
+
recordThoughtFromContent(content) {
|
|
718
|
+
if (!content.parts || content.parts.length === 0) {
|
|
719
|
+
return;
|
|
720
|
+
}
|
|
721
|
+
const thoughtPart = content.parts[0];
|
|
722
|
+
if (thoughtPart.text) {
|
|
723
|
+
// Extract subject and description using the same logic as turn.ts
|
|
724
|
+
const rawText = thoughtPart.text;
|
|
725
|
+
const subjectStringMatches = rawText.match(/\*\*(.*?)\*\*/s);
|
|
726
|
+
const subject = subjectStringMatches
|
|
727
|
+
? subjectStringMatches[1].trim()
|
|
728
|
+
: '';
|
|
729
|
+
const description = rawText.replace(/\*\*(.*?)\*\*/s, '').trim();
|
|
730
|
+
this.chatRecordingService.recordThought({
|
|
731
|
+
subject,
|
|
732
|
+
description,
|
|
733
|
+
});
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
/** Visible for Testing */
|
|
738
|
+
export function isSchemaDepthError(errorMessage) {
|
|
739
|
+
return errorMessage.includes('maximum schema depth exceeded');
|
|
740
|
+
}
|
|
741
|
+
export function isInvalidArgumentError(errorMessage) {
|
|
742
|
+
return errorMessage.includes('Request contains an invalid argument');
|
|
743
|
+
}
|
|
744
|
+
//# sourceMappingURL=geminiChat.js.map
|