@mastra/code-sdk 0.0.0-aggregate-trace-20261015182851
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/LICENSE.md +32 -0
- package/README.md +284 -0
- package/dist/acp/agent.d.ts +48 -0
- package/dist/acp/agent.d.ts.map +1 -0
- package/dist/acp/agent.js +416 -0
- package/dist/acp/agent.js.map +1 -0
- package/dist/acp/errors.d.ts +3 -0
- package/dist/acp/errors.d.ts.map +1 -0
- package/dist/acp/errors.js +14 -0
- package/dist/acp/errors.js.map +1 -0
- package/dist/acp/event-mapper.d.ts +28 -0
- package/dist/acp/event-mapper.d.ts.map +1 -0
- package/dist/acp/event-mapper.js +279 -0
- package/dist/acp/event-mapper.js.map +1 -0
- package/dist/acp/index.d.ts +9 -0
- package/dist/acp/index.d.ts.map +1 -0
- package/dist/acp/index.js +24 -0
- package/dist/acp/index.js.map +1 -0
- package/dist/acp/runtime.d.ts +5 -0
- package/dist/acp/runtime.d.ts.map +1 -0
- package/dist/acp/runtime.js +91 -0
- package/dist/acp/runtime.js.map +1 -0
- package/dist/acp/server.d.ts +4 -0
- package/dist/acp/server.d.ts.map +1 -0
- package/dist/acp/server.js +38 -0
- package/dist/acp/server.js.map +1 -0
- package/dist/acp/skills.d.ts +6 -0
- package/dist/acp/skills.d.ts.map +1 -0
- package/dist/acp/skills.js +33 -0
- package/dist/acp/skills.js.map +1 -0
- package/dist/acp.d.ts +2 -0
- package/dist/acp.d.ts.map +1 -0
- package/dist/acp.js +2 -0
- package/dist/agent-connections/messaging-processor.d.ts +17 -0
- package/dist/agent-connections/messaging-processor.d.ts.map +1 -0
- package/dist/agent-connections/messaging-processor.js +134 -0
- package/dist/agent-connections/messaging-processor.js.map +1 -0
- package/dist/agent-connections/ownership.d.ts +24 -0
- package/dist/agent-connections/ownership.d.ts.map +1 -0
- package/dist/agent-connections/ownership.js +99 -0
- package/dist/agent-connections/ownership.js.map +1 -0
- package/dist/agent-connections/registry.d.ts +20 -0
- package/dist/agent-connections/registry.d.ts.map +1 -0
- package/dist/agent-connections/registry.js +170 -0
- package/dist/agent-connections/registry.js.map +1 -0
- package/dist/agent-connections/session-advertisement.d.ts +27 -0
- package/dist/agent-connections/session-advertisement.d.ts.map +1 -0
- package/dist/agent-connections/session-advertisement.js +89 -0
- package/dist/agent-connections/session-advertisement.js.map +1 -0
- package/dist/agent-connections/signal-provider.d.ts +141 -0
- package/dist/agent-connections/signal-provider.d.ts.map +1 -0
- package/dist/agent-connections/signal-provider.js +38 -0
- package/dist/agent-connections/signal-provider.js.map +1 -0
- package/dist/agent-connections/state-processor.d.ts +23 -0
- package/dist/agent-connections/state-processor.d.ts.map +1 -0
- package/dist/agent-connections/state-processor.js +273 -0
- package/dist/agent-connections/state-processor.js.map +1 -0
- package/dist/agent-connections/thread-state.d.ts +41 -0
- package/dist/agent-connections/thread-state.d.ts.map +1 -0
- package/dist/agent-connections/thread-state.js +160 -0
- package/dist/agent-connections/thread-state.js.map +1 -0
- package/dist/agent-connections/tools.d.ts +133 -0
- package/dist/agent-connections/tools.d.ts.map +1 -0
- package/dist/agent-connections/tools.js +552 -0
- package/dist/agent-connections/tools.js.map +1 -0
- package/dist/agent-connections/types.d.ts +99 -0
- package/dist/agent-connections/types.d.ts.map +1 -0
- package/dist/agent-connections/types.js +7 -0
- package/dist/agent-connections/types.js.map +1 -0
- package/dist/agent-connections/untrusted-text.d.ts +5 -0
- package/dist/agent-connections/untrusted-text.d.ts.map +1 -0
- package/dist/agent-connections/untrusted-text.js +22 -0
- package/dist/agent-connections/untrusted-text.js.map +1 -0
- package/dist/agents/background-completion-events.d.ts +16 -0
- package/dist/agents/background-completion-events.d.ts.map +1 -0
- package/dist/agents/background-completion-events.js +19 -0
- package/dist/agents/background-completion-events.js.map +1 -0
- package/dist/agents/background-completion.d.ts +9 -0
- package/dist/agents/background-completion.d.ts.map +1 -0
- package/dist/agents/background-completion.js +59 -0
- package/dist/agents/background-completion.js.map +1 -0
- package/dist/agents/context-audit.d.ts +84 -0
- package/dist/agents/context-audit.d.ts.map +1 -0
- package/dist/agents/context-audit.js +118 -0
- package/dist/agents/context-audit.js.map +1 -0
- package/dist/agents/credential-resolver.d.ts +67 -0
- package/dist/agents/credential-resolver.d.ts.map +1 -0
- package/dist/agents/credential-resolver.js +136 -0
- package/dist/agents/credential-resolver.js.map +1 -0
- package/dist/agents/custom-provider-source.d.ts +35 -0
- package/dist/agents/custom-provider-source.d.ts.map +1 -0
- package/dist/agents/custom-provider-source.js +25 -0
- package/dist/agents/custom-provider-source.js.map +1 -0
- package/dist/agents/instructions.d.ts +40 -0
- package/dist/agents/instructions.d.ts.map +1 -0
- package/dist/agents/instructions.js +63 -0
- package/dist/agents/instructions.js.map +1 -0
- package/dist/agents/mastracode-gateway.d.ts +76 -0
- package/dist/agents/mastracode-gateway.d.ts.map +1 -0
- package/dist/agents/mastracode-gateway.js +434 -0
- package/dist/agents/mastracode-gateway.js.map +1 -0
- package/dist/agents/memory.d.ts +39 -0
- package/dist/agents/memory.d.ts.map +1 -0
- package/dist/agents/memory.js +266 -0
- package/dist/agents/memory.js.map +1 -0
- package/dist/agents/model.d.ts +123 -0
- package/dist/agents/model.d.ts.map +1 -0
- package/dist/agents/model.js +295 -0
- package/dist/agents/model.js.map +1 -0
- package/dist/agents/modes/build.d.ts +12 -0
- package/dist/agents/modes/build.d.ts.map +1 -0
- package/dist/agents/modes/build.js +36 -0
- package/dist/agents/modes/build.js.map +1 -0
- package/dist/agents/modes/explore.d.ts +10 -0
- package/dist/agents/modes/explore.d.ts.map +1 -0
- package/dist/agents/modes/explore.js +28 -0
- package/dist/agents/modes/explore.js.map +1 -0
- package/dist/agents/modes/plan.d.ts +8 -0
- package/dist/agents/modes/plan.d.ts.map +1 -0
- package/dist/agents/modes/plan.js +46 -0
- package/dist/agents/modes/plan.js.map +1 -0
- package/dist/agents/prompts/agent-instructions.d.ts +99 -0
- package/dist/agents/prompts/agent-instructions.d.ts.map +1 -0
- package/dist/agents/prompts/agent-instructions.js +275 -0
- package/dist/agents/prompts/agent-instructions.js.map +1 -0
- package/dist/agents/prompts/build.d.ts +12 -0
- package/dist/agents/prompts/build.d.ts.map +1 -0
- package/dist/agents/prompts/build.js +76 -0
- package/dist/agents/prompts/build.js.map +1 -0
- package/dist/agents/prompts/fast.d.ts +5 -0
- package/dist/agents/prompts/fast.d.ts.map +1 -0
- package/dist/agents/prompts/fast.js +26 -0
- package/dist/agents/prompts/fast.js.map +1 -0
- package/dist/agents/prompts/index.d.ts +54 -0
- package/dist/agents/prompts/index.d.ts.map +1 -0
- package/dist/agents/prompts/index.js +127 -0
- package/dist/agents/prompts/index.js.map +1 -0
- package/dist/agents/prompts/model.d.ts +5 -0
- package/dist/agents/prompts/model.d.ts.map +1 -0
- package/dist/agents/prompts/model.js +23 -0
- package/dist/agents/prompts/model.js.map +1 -0
- package/dist/agents/prompts/plan.d.ts +8 -0
- package/dist/agents/prompts/plan.d.ts.map +1 -0
- package/dist/agents/prompts/plan.js +129 -0
- package/dist/agents/prompts/plan.js.map +1 -0
- package/dist/agents/prompts/tool-guidance.d.ts +18 -0
- package/dist/agents/prompts/tool-guidance.d.ts.map +1 -0
- package/dist/agents/prompts/tool-guidance.js +181 -0
- package/dist/agents/prompts/tool-guidance.js.map +1 -0
- package/dist/agents/sandbox-filesystem.d.ts +151 -0
- package/dist/agents/sandbox-filesystem.d.ts.map +1 -0
- package/dist/agents/sandbox-filesystem.js +581 -0
- package/dist/agents/sandbox-filesystem.js.map +1 -0
- package/dist/agents/subagents/execute.d.ts +3 -0
- package/dist/agents/subagents/execute.d.ts.map +1 -0
- package/dist/agents/subagents/execute.js +27 -0
- package/dist/agents/subagents/execute.js.map +1 -0
- package/dist/agents/subagents/explore.d.ts +3 -0
- package/dist/agents/subagents/explore.d.ts.map +1 -0
- package/dist/agents/subagents/explore.js +18 -0
- package/dist/agents/subagents/explore.js.map +1 -0
- package/dist/agents/subagents/plan.d.ts +3 -0
- package/dist/agents/subagents/plan.d.ts.map +1 -0
- package/dist/agents/subagents/plan.js +18 -0
- package/dist/agents/subagents/plan.js.map +1 -0
- package/dist/agents/thread-caveman-state.d.ts +17 -0
- package/dist/agents/thread-caveman-state.d.ts.map +1 -0
- package/dist/agents/thread-caveman-state.js +107 -0
- package/dist/agents/thread-caveman-state.js.map +1 -0
- package/dist/agents/tool-availability.d.ts +12 -0
- package/dist/agents/tool-availability.d.ts.map +1 -0
- package/dist/agents/tool-availability.js +129 -0
- package/dist/agents/tool-availability.js.map +1 -0
- package/dist/agents/tools.d.ts +37 -0
- package/dist/agents/tools.d.ts.map +1 -0
- package/dist/agents/tools.js +131 -0
- package/dist/agents/tools.js.map +1 -0
- package/dist/agents/workflow-builder-agent.d.ts +2 -0
- package/dist/agents/workflow-builder-agent.d.ts.map +1 -0
- package/dist/agents/workflow-builder-agent.js +82 -0
- package/dist/agents/workflow-builder-agent.js.map +1 -0
- package/dist/agents/workspace.d.ts +33 -0
- package/dist/agents/workspace.d.ts.map +1 -0
- package/dist/agents/workspace.js +208 -0
- package/dist/agents/workspace.js.map +1 -0
- package/dist/analytics.d.ts +18 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/analytics.js +162 -0
- package/dist/analytics.js.map +1 -0
- package/dist/auth/account-rotation-processor.d.ts +182 -0
- package/dist/auth/account-rotation-processor.d.ts.map +1 -0
- package/dist/auth/account-rotation-processor.js +609 -0
- package/dist/auth/account-rotation-processor.js.map +1 -0
- package/dist/auth/account-routing-context.d.ts +13 -0
- package/dist/auth/account-routing-context.d.ts.map +1 -0
- package/dist/auth/account-routing-context.js +41 -0
- package/dist/auth/account-routing-context.js.map +1 -0
- package/dist/auth/authorization-input.d.ts +16 -0
- package/dist/auth/authorization-input.d.ts.map +1 -0
- package/dist/auth/authorization-input.js +42 -0
- package/dist/auth/authorization-input.js.map +1 -0
- package/dist/auth/device-code.d.ts +93 -0
- package/dist/auth/device-code.d.ts.map +1 -0
- package/dist/auth/device-code.js +129 -0
- package/dist/auth/device-code.js.map +1 -0
- package/dist/auth/index.d.ts +13 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +9 -0
- package/dist/auth/pkce.d.ts +13 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +32 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/auth/provider-auth-error.d.ts +12 -0
- package/dist/auth/provider-auth-error.d.ts.map +1 -0
- package/dist/auth/provider-auth-error.js +16 -0
- package/dist/auth/provider-auth-error.js.map +1 -0
- package/dist/auth/providers/anthropic.d.ts +40 -0
- package/dist/auth/providers/anthropic.d.ts.map +1 -0
- package/dist/auth/providers/anthropic.js +120 -0
- package/dist/auth/providers/anthropic.js.map +1 -0
- package/dist/auth/providers/github-copilot.d.ts +154 -0
- package/dist/auth/providers/github-copilot.d.ts.map +1 -0
- package/dist/auth/providers/github-copilot.js +362 -0
- package/dist/auth/providers/github-copilot.js.map +1 -0
- package/dist/auth/providers/kimi-coding.d.ts +38 -0
- package/dist/auth/providers/kimi-coding.d.ts.map +1 -0
- package/dist/auth/providers/kimi-coding.js +228 -0
- package/dist/auth/providers/kimi-coding.js.map +1 -0
- package/dist/auth/providers/openai-codex.d.ts +141 -0
- package/dist/auth/providers/openai-codex.d.ts.map +1 -0
- package/dist/auth/providers/openai-codex.js +533 -0
- package/dist/auth/providers/openai-codex.js.map +1 -0
- package/dist/auth/providers/xai.d.ts +64 -0
- package/dist/auth/providers/xai.d.ts.map +1 -0
- package/dist/auth/providers/xai.js +226 -0
- package/dist/auth/providers/xai.js.map +1 -0
- package/dist/auth/storage.d.ts +214 -0
- package/dist/auth/storage.d.ts.map +1 -0
- package/dist/auth/storage.js +774 -0
- package/dist/auth/storage.js.map +1 -0
- package/dist/auth/types.d.ts +164 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +1 -0
- package/dist/clipboard/index.d.ts +26 -0
- package/dist/clipboard/index.d.ts.map +1 -0
- package/dist/clipboard/index.js +226 -0
- package/dist/clipboard/index.js.map +1 -0
- package/dist/constants.d.ts +12 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +20 -0
- package/dist/constants.js.map +1 -0
- package/dist/error-classification.d.ts +10 -0
- package/dist/error-classification.d.ts.map +1 -0
- package/dist/error-classification.js +22 -0
- package/dist/error-classification.js.map +1 -0
- package/dist/evals/context-builder.d.ts +41 -0
- package/dist/evals/context-builder.d.ts.map +1 -0
- package/dist/evals/context-builder.js +161 -0
- package/dist/evals/context-builder.js.map +1 -0
- package/dist/evals/index.d.ts +4 -0
- package/dist/evals/index.d.ts.map +1 -0
- package/dist/evals/index.js +5 -0
- package/dist/evals/scorers/classify-command.d.ts +31 -0
- package/dist/evals/scorers/classify-command.d.ts.map +1 -0
- package/dist/evals/scorers/classify-command.js +73 -0
- package/dist/evals/scorers/classify-command.js.map +1 -0
- package/dist/evals/scorers/efficiency.d.ts +44 -0
- package/dist/evals/scorers/efficiency.d.ts.map +1 -0
- package/dist/evals/scorers/efficiency.js +259 -0
- package/dist/evals/scorers/efficiency.js.map +1 -0
- package/dist/evals/scorers/extract-tools.d.ts +25 -0
- package/dist/evals/scorers/extract-tools.d.ts.map +1 -0
- package/dist/evals/scorers/extract-tools.js +60 -0
- package/dist/evals/scorers/extract-tools.js.map +1 -0
- package/dist/evals/scorers/index.d.ts +3 -0
- package/dist/evals/scorers/index.d.ts.map +1 -0
- package/dist/evals/scorers/index.js +3 -0
- package/dist/evals/scorers/outcome.d.ts +49 -0
- package/dist/evals/scorers/outcome.d.ts.map +1 -0
- package/dist/evals/scorers/outcome.js +347 -0
- package/dist/evals/scorers/outcome.js.map +1 -0
- package/dist/experimental-agent.d.ts +11 -0
- package/dist/experimental-agent.d.ts.map +1 -0
- package/dist/experimental-agent.js +36 -0
- package/dist/experimental-agent.js.map +1 -0
- package/dist/goal-manager.d.ts +114 -0
- package/dist/goal-manager.d.ts.map +1 -0
- package/dist/goal-manager.js +354 -0
- package/dist/goal-manager.js.map +1 -0
- package/dist/goal-signal.d.ts +14 -0
- package/dist/goal-signal.d.ts.map +1 -0
- package/dist/goal-signal.js +17 -0
- package/dist/goal-signal.js.map +1 -0
- package/dist/headless/cli.d.ts +48 -0
- package/dist/headless/cli.d.ts.map +1 -0
- package/dist/headless/cli.js +239 -0
- package/dist/headless/cli.js.map +1 -0
- package/dist/headless/flags.d.ts +33 -0
- package/dist/headless/flags.d.ts.map +1 -0
- package/dist/headless/flags.js +203 -0
- package/dist/headless/flags.js.map +1 -0
- package/dist/headless/format.d.ts +39 -0
- package/dist/headless/format.d.ts.map +1 -0
- package/dist/headless/format.js +85 -0
- package/dist/headless/format.js.map +1 -0
- package/dist/headless/index.d.ts +25 -0
- package/dist/headless/index.d.ts.map +1 -0
- package/dist/headless/index.js +6 -0
- package/dist/headless/policy.d.ts +17 -0
- package/dist/headless/policy.d.ts.map +1 -0
- package/dist/headless/policy.js +42 -0
- package/dist/headless/policy.js.map +1 -0
- package/dist/headless/run-mc.d.ts +7 -0
- package/dist/headless/run-mc.d.ts.map +1 -0
- package/dist/headless/run-mc.js +408 -0
- package/dist/headless/run-mc.js.map +1 -0
- package/dist/headless/types.d.ts +174 -0
- package/dist/headless/types.d.ts.map +1 -0
- package/dist/headless/types.js +19 -0
- package/dist/headless/types.js.map +1 -0
- package/dist/hooks/config.d.ts +11 -0
- package/dist/hooks/config.d.ts.map +1 -0
- package/dist/hooks/config.js +80 -0
- package/dist/hooks/config.js.map +1 -0
- package/dist/hooks/executor.d.ts +13 -0
- package/dist/hooks/executor.d.ts.map +1 -0
- package/dist/hooks/executor.js +129 -0
- package/dist/hooks/executor.js.map +1 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +5 -0
- package/dist/hooks/manager.d.ts +54 -0
- package/dist/hooks/manager.d.ts.map +1 -0
- package/dist/hooks/manager.js +241 -0
- package/dist/hooks/manager.js.map +1 -0
- package/dist/hooks/types.d.ts +172 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +8 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +463 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1305 -0
- package/dist/index.js.map +1 -0
- package/dist/ipc/ipc-reporter.d.ts +14 -0
- package/dist/ipc/ipc-reporter.d.ts.map +1 -0
- package/dist/ipc/ipc-reporter.js +21 -0
- package/dist/ipc/ipc-reporter.js.map +1 -0
- package/dist/knowledge-inspector.d.ts +123 -0
- package/dist/knowledge-inspector.d.ts.map +1 -0
- package/dist/knowledge-inspector.js +516 -0
- package/dist/knowledge-inspector.js.map +1 -0
- package/dist/knowledge-scope.d.ts +35 -0
- package/dist/knowledge-scope.d.ts.map +1 -0
- package/dist/knowledge-scope.js +47 -0
- package/dist/knowledge-scope.js.map +1 -0
- package/dist/lsp/client.d.ts +56 -0
- package/dist/lsp/client.d.ts.map +1 -0
- package/dist/lsp/client.js +251 -0
- package/dist/lsp/client.js.map +1 -0
- package/dist/lsp/index.d.ts +4 -0
- package/dist/lsp/index.d.ts.map +1 -0
- package/dist/lsp/index.js +4 -0
- package/dist/lsp/language.d.ts +9 -0
- package/dist/lsp/language.d.ts.map +1 -0
- package/dist/lsp/language.js +44 -0
- package/dist/lsp/language.js.map +1 -0
- package/dist/lsp/manager.d.ts +34 -0
- package/dist/lsp/manager.d.ts.map +1 -0
- package/dist/lsp/manager.js +82 -0
- package/dist/lsp/manager.js.map +1 -0
- package/dist/lsp/server.d.ts +27 -0
- package/dist/lsp/server.d.ts.map +1 -0
- package/dist/lsp/server.js +159 -0
- package/dist/lsp/server.js.map +1 -0
- package/dist/lsp/workspace.d.ts +9 -0
- package/dist/lsp/workspace.d.ts.map +1 -0
- package/dist/lsp/workspace.js +55 -0
- package/dist/lsp/workspace.js.map +1 -0
- package/dist/mcp/config.d.ts +77 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +316 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/index.d.ts +6 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +3 -0
- package/dist/mcp/manager.d.ts +102 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +650 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/state.d.ts +35 -0
- package/dist/mcp/state.d.ts.map +1 -0
- package/dist/mcp/state.js +97 -0
- package/dist/mcp/state.js.map +1 -0
- package/dist/mcp/types.d.ts +139 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +1 -0
- package/dist/onboarding/custom-packs.d.ts +7 -0
- package/dist/onboarding/custom-packs.d.ts.map +1 -0
- package/dist/onboarding/custom-packs.js +20 -0
- package/dist/onboarding/custom-packs.js.map +1 -0
- package/dist/onboarding/custom-providers.d.ts +4 -0
- package/dist/onboarding/custom-providers.d.ts.map +1 -0
- package/dist/onboarding/custom-providers.js +30 -0
- package/dist/onboarding/custom-providers.js.map +1 -0
- package/dist/onboarding/index.d.ts +5 -0
- package/dist/onboarding/index.d.ts.map +1 -0
- package/dist/onboarding/index.js +3 -0
- package/dist/onboarding/om-settings.d.ts +47 -0
- package/dist/onboarding/om-settings.d.ts.map +1 -0
- package/dist/onboarding/om-settings.js +83 -0
- package/dist/onboarding/om-settings.js.map +1 -0
- package/dist/onboarding/pack-activation.d.ts +52 -0
- package/dist/onboarding/pack-activation.d.ts.map +1 -0
- package/dist/onboarding/pack-activation.js +108 -0
- package/dist/onboarding/pack-activation.js.map +1 -0
- package/dist/onboarding/packs.d.ts +102 -0
- package/dist/onboarding/packs.d.ts.map +1 -0
- package/dist/onboarding/packs.js +278 -0
- package/dist/onboarding/packs.js.map +1 -0
- package/dist/onboarding/settings.d.ts +538 -0
- package/dist/onboarding/settings.d.ts.map +1 -0
- package/dist/onboarding/settings.js +1060 -0
- package/dist/onboarding/settings.js.map +1 -0
- package/dist/permissions.d.ts +55 -0
- package/dist/permissions.d.ts.map +1 -0
- package/dist/permissions.js +142 -0
- package/dist/permissions.js.map +1 -0
- package/dist/plugin.d.ts +156 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +30 -0
- package/dist/plugin.js.map +1 -0
- package/dist/plugins/dependencies.d.ts +9 -0
- package/dist/plugins/dependencies.d.ts.map +1 -0
- package/dist/plugins/dependencies.js +87 -0
- package/dist/plugins/dependencies.js.map +1 -0
- package/dist/plugins/install.d.ts +21 -0
- package/dist/plugins/install.d.ts.map +1 -0
- package/dist/plugins/install.js +190 -0
- package/dist/plugins/install.js.map +1 -0
- package/dist/plugins/loader.d.ts +19 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +260 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +98 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +456 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/manifest.d.ts +14 -0
- package/dist/plugins/manifest.d.ts.map +1 -0
- package/dist/plugins/manifest.js +50 -0
- package/dist/plugins/manifest.js.map +1 -0
- package/dist/plugins/package-link.d.ts +3 -0
- package/dist/plugins/package-link.d.ts.map +1 -0
- package/dist/plugins/package-link.js +61 -0
- package/dist/plugins/package-link.js.map +1 -0
- package/dist/plugins/paths.d.ts +10 -0
- package/dist/plugins/paths.d.ts.map +1 -0
- package/dist/plugins/paths.js +25 -0
- package/dist/plugins/paths.js.map +1 -0
- package/dist/plugins/registry.d.ts +8 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +112 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/scaffold.d.ts +10 -0
- package/dist/plugins/scaffold.d.ts.map +1 -0
- package/dist/plugins/scaffold.js +116 -0
- package/dist/plugins/scaffold.js.map +1 -0
- package/dist/plugins/signal-lane.d.ts +58 -0
- package/dist/plugins/signal-lane.d.ts.map +1 -0
- package/dist/plugins/signal-lane.js +166 -0
- package/dist/plugins/signal-lane.js.map +1 -0
- package/dist/plugins/types.d.ts +81 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +1 -0
- package/dist/process-memory-diagnostics.d.ts +135 -0
- package/dist/process-memory-diagnostics.d.ts.map +1 -0
- package/dist/process-memory-diagnostics.js +499 -0
- package/dist/process-memory-diagnostics.js.map +1 -0
- package/dist/processors/plan-rejection-abort.d.ts +12 -0
- package/dist/processors/plan-rejection-abort.d.ts.map +1 -0
- package/dist/processors/plan-rejection-abort.js +54 -0
- package/dist/processors/plan-rejection-abort.js.map +1 -0
- package/dist/providers/amazon-bedrock-gateway.d.ts +47 -0
- package/dist/providers/amazon-bedrock-gateway.d.ts.map +1 -0
- package/dist/providers/amazon-bedrock-gateway.js +144 -0
- package/dist/providers/amazon-bedrock-gateway.js.map +1 -0
- package/dist/providers/amazon-bedrock.d.ts +28 -0
- package/dist/providers/amazon-bedrock.d.ts.map +1 -0
- package/dist/providers/amazon-bedrock.js +102 -0
- package/dist/providers/amazon-bedrock.js.map +1 -0
- package/dist/providers/anthropic-prompt-cache.d.ts +19 -0
- package/dist/providers/anthropic-prompt-cache.d.ts.map +1 -0
- package/dist/providers/anthropic-prompt-cache.js +11 -0
- package/dist/providers/anthropic-prompt-cache.js.map +1 -0
- package/dist/providers/anthropic-thinking.d.ts +5 -0
- package/dist/providers/anthropic-thinking.d.ts.map +1 -0
- package/dist/providers/anthropic-thinking.js +25 -0
- package/dist/providers/anthropic-thinking.js.map +1 -0
- package/dist/providers/claude-max.d.ts +67 -0
- package/dist/providers/claude-max.d.ts.map +1 -0
- package/dist/providers/claude-max.js +226 -0
- package/dist/providers/claude-max.js.map +1 -0
- package/dist/providers/github-copilot-gateway.d.ts +35 -0
- package/dist/providers/github-copilot-gateway.d.ts.map +1 -0
- package/dist/providers/github-copilot-gateway.js +61 -0
- package/dist/providers/github-copilot-gateway.js.map +1 -0
- package/dist/providers/github-copilot.d.ts +60 -0
- package/dist/providers/github-copilot.d.ts.map +1 -0
- package/dist/providers/github-copilot.js +318 -0
- package/dist/providers/github-copilot.js.map +1 -0
- package/dist/providers/google-thinking.d.ts +31 -0
- package/dist/providers/google-thinking.d.ts.map +1 -0
- package/dist/providers/google-thinking.js +67 -0
- package/dist/providers/google-thinking.js.map +1 -0
- package/dist/providers/kimi-coding.d.ts +14 -0
- package/dist/providers/kimi-coding.d.ts.map +1 -0
- package/dist/providers/kimi-coding.js +78 -0
- package/dist/providers/kimi-coding.js.map +1 -0
- package/dist/providers/model-ids.d.ts +30 -0
- package/dist/providers/model-ids.d.ts.map +1 -0
- package/dist/providers/model-ids.js +79 -0
- package/dist/providers/model-ids.js.map +1 -0
- package/dist/providers/openai-codex.d.ts +84 -0
- package/dist/providers/openai-codex.d.ts.map +1 -0
- package/dist/providers/openai-codex.js +347 -0
- package/dist/providers/openai-codex.js.map +1 -0
- package/dist/providers/provider-thinking.d.ts +23 -0
- package/dist/providers/provider-thinking.d.ts.map +1 -0
- package/dist/providers/provider-thinking.js +64 -0
- package/dist/providers/provider-thinking.js.map +1 -0
- package/dist/providers/thinking-request.d.ts +14 -0
- package/dist/providers/thinking-request.d.ts.map +1 -0
- package/dist/providers/thinking-request.js +90 -0
- package/dist/providers/thinking-request.js.map +1 -0
- package/dist/providers/xai.d.ts +33 -0
- package/dist/providers/xai.d.ts.map +1 -0
- package/dist/providers/xai.js +71 -0
- package/dist/providers/xai.js.map +1 -0
- package/dist/schedules/index.d.ts +10 -0
- package/dist/schedules/index.d.ts.map +1 -0
- package/dist/schedules/index.js +6 -0
- package/dist/schedules/interval.d.ts +49 -0
- package/dist/schedules/interval.d.ts.map +1 -0
- package/dist/schedules/interval.js +215 -0
- package/dist/schedules/interval.js.map +1 -0
- package/dist/schedules/prompt.d.ts +36 -0
- package/dist/schedules/prompt.d.ts.map +1 -0
- package/dist/schedules/prompt.js +39 -0
- package/dist/schedules/prompt.js.map +1 -0
- package/dist/schedules/run-script.d.ts +8 -0
- package/dist/schedules/run-script.d.ts.map +1 -0
- package/dist/schedules/run-script.js +83 -0
- package/dist/schedules/run-script.js.map +1 -0
- package/dist/schedules/scheduler.d.ts +101 -0
- package/dist/schedules/scheduler.d.ts.map +1 -0
- package/dist/schedules/scheduler.js +169 -0
- package/dist/schedules/scheduler.js.map +1 -0
- package/dist/schedules/tools.d.ts +57 -0
- package/dist/schedules/tools.d.ts.map +1 -0
- package/dist/schedules/tools.js +220 -0
- package/dist/schedules/tools.js.map +1 -0
- package/dist/schema.d.ts +499 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +134 -0
- package/dist/schema.js.map +1 -0
- package/dist/theme-palette.d.ts +17 -0
- package/dist/theme-palette.d.ts.map +1 -0
- package/dist/theme-palette.js +21 -0
- package/dist/theme-palette.js.map +1 -0
- package/dist/thinking-catalog.d.ts +4 -0
- package/dist/thinking-catalog.d.ts.map +1 -0
- package/dist/thinking-catalog.js +13 -0
- package/dist/thinking-catalog.js.map +1 -0
- package/dist/thinking.d.ts +37 -0
- package/dist/thinking.d.ts.map +1 -0
- package/dist/thinking.js +137 -0
- package/dist/thinking.js.map +1 -0
- package/dist/tool-names.d.ts +77 -0
- package/dist/tool-names.d.ts.map +1 -0
- package/dist/tool-names.js +56 -0
- package/dist/tool-names.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +3 -0
- package/dist/tools/request-sandbox-access.d.ts +6 -0
- package/dist/tools/request-sandbox-access.d.ts.map +1 -0
- package/dist/tools/request-sandbox-access.js +80 -0
- package/dist/tools/request-sandbox-access.js.map +1 -0
- package/dist/tools/utils.d.ts +20 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +32 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools/web-search.d.ts +114 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +155 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/tools/workflows/create-workflow.d.ts +7 -0
- package/dist/tools/workflows/create-workflow.d.ts.map +1 -0
- package/dist/tools/workflows/create-workflow.js +81 -0
- package/dist/tools/workflows/create-workflow.js.map +1 -0
- package/dist/tools/workflows/delete-workflow.d.ts +7 -0
- package/dist/tools/workflows/delete-workflow.d.ts.map +1 -0
- package/dist/tools/workflows/delete-workflow.js +21 -0
- package/dist/tools/workflows/delete-workflow.js.map +1 -0
- package/dist/tools/workflows/ephemeral-memory.d.ts +28 -0
- package/dist/tools/workflows/ephemeral-memory.d.ts.map +1 -0
- package/dist/tools/workflows/ephemeral-memory.js +44 -0
- package/dist/tools/workflows/ephemeral-memory.js.map +1 -0
- package/dist/tools/workflows/extract-json-schema.d.ts +12 -0
- package/dist/tools/workflows/extract-json-schema.d.ts.map +1 -0
- package/dist/tools/workflows/extract-json-schema.js +22 -0
- package/dist/tools/workflows/extract-json-schema.js.map +1 -0
- package/dist/tools/workflows/get-workflow.d.ts +11 -0
- package/dist/tools/workflows/get-workflow.d.ts.map +1 -0
- package/dist/tools/workflows/get-workflow.js +34 -0
- package/dist/tools/workflows/get-workflow.js.map +1 -0
- package/dist/tools/workflows/list-available-agents.d.ts +8 -0
- package/dist/tools/workflows/list-available-agents.d.ts.map +1 -0
- package/dist/tools/workflows/list-available-agents.js +32 -0
- package/dist/tools/workflows/list-available-agents.js.map +1 -0
- package/dist/tools/workflows/list-available-classifiers.d.ts +19 -0
- package/dist/tools/workflows/list-available-classifiers.d.ts.map +1 -0
- package/dist/tools/workflows/list-available-classifiers.js +56 -0
- package/dist/tools/workflows/list-available-classifiers.js.map +1 -0
- package/dist/tools/workflows/list-available-tools.d.ts +9 -0
- package/dist/tools/workflows/list-available-tools.d.ts.map +1 -0
- package/dist/tools/workflows/list-available-tools.js +40 -0
- package/dist/tools/workflows/list-available-tools.js.map +1 -0
- package/dist/tools/workflows/list-available-workflows.d.ts +9 -0
- package/dist/tools/workflows/list-available-workflows.d.ts.map +1 -0
- package/dist/tools/workflows/list-available-workflows.js +32 -0
- package/dist/tools/workflows/list-available-workflows.js.map +1 -0
- package/dist/tools/workflows/list-workflows.d.ts +9 -0
- package/dist/tools/workflows/list-workflows.d.ts.map +1 -0
- package/dist/tools/workflows/list-workflows.js +33 -0
- package/dist/tools/workflows/list-workflows.js.map +1 -0
- package/dist/tools/workflows/run-workflow.d.ts +9 -0
- package/dist/tools/workflows/run-workflow.d.ts.map +1 -0
- package/dist/tools/workflows/run-workflow.js +52 -0
- package/dist/tools/workflows/run-workflow.js.map +1 -0
- package/dist/tools/workflows/save-workflow.d.ts +1125 -0
- package/dist/tools/workflows/save-workflow.d.ts.map +1 -0
- package/dist/tools/workflows/save-workflow.js +28 -0
- package/dist/tools/workflows/save-workflow.js.map +1 -0
- package/dist/tools/workflows/tool-ids.d.ts +16 -0
- package/dist/tools/workflows/tool-ids.d.ts.map +1 -0
- package/dist/tools/workflows/tool-ids.js +20 -0
- package/dist/tools/workflows/tool-ids.js.map +1 -0
- package/dist/utils/binaries.d.ts +7 -0
- package/dist/utils/binaries.d.ts.map +1 -0
- package/dist/utils/binaries.js +78 -0
- package/dist/utils/binaries.js.map +1 -0
- package/dist/utils/debug-log.d.ts +12 -0
- package/dist/utils/debug-log.d.ts.map +1 -0
- package/dist/utils/debug-log.js +59 -0
- package/dist/utils/debug-log.js.map +1 -0
- package/dist/utils/discarding-scores-storage.d.ts +33 -0
- package/dist/utils/discarding-scores-storage.d.ts.map +1 -0
- package/dist/utils/discarding-scores-storage.js +54 -0
- package/dist/utils/discarding-scores-storage.js.map +1 -0
- package/dist/utils/errors.d.ts +36 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +196 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/gateway-sync.d.ts +26 -0
- package/dist/utils/gateway-sync.d.ts.map +1 -0
- package/dist/utils/gateway-sync.js +61 -0
- package/dist/utils/gateway-sync.js.map +1 -0
- package/dist/utils/maintenance-lock.d.ts +42 -0
- package/dist/utils/maintenance-lock.d.ts.map +1 -0
- package/dist/utils/maintenance-lock.js +199 -0
- package/dist/utils/maintenance-lock.js.map +1 -0
- package/dist/utils/notification-dispatch.d.ts +59 -0
- package/dist/utils/notification-dispatch.d.ts.map +1 -0
- package/dist/utils/notification-dispatch.js +109 -0
- package/dist/utils/notification-dispatch.js.map +1 -0
- package/dist/utils/open-url.d.ts +10 -0
- package/dist/utils/open-url.d.ts.map +1 -0
- package/dist/utils/open-url.js +30 -0
- package/dist/utils/open-url.js.map +1 -0
- package/dist/utils/path-security.d.ts +2 -0
- package/dist/utils/path-security.d.ts.map +1 -0
- package/dist/utils/path-security.js +10 -0
- package/dist/utils/path-security.js.map +1 -0
- package/dist/utils/plan-diff.d.ts +25 -0
- package/dist/utils/plan-diff.d.ts.map +1 -0
- package/dist/utils/plan-diff.js +62 -0
- package/dist/utils/plan-diff.js.map +1 -0
- package/dist/utils/plans.d.ts +59 -0
- package/dist/utils/plans.d.ts.map +1 -0
- package/dist/utils/plans.js +117 -0
- package/dist/utils/plans.js.map +1 -0
- package/dist/utils/project.d.ts +160 -0
- package/dist/utils/project.d.ts.map +1 -0
- package/dist/utils/project.js +364 -0
- package/dist/utils/project.js.map +1 -0
- package/dist/utils/prune-cli.d.ts +24 -0
- package/dist/utils/prune-cli.d.ts.map +1 -0
- package/dist/utils/prune-cli.js +125 -0
- package/dist/utils/prune-cli.js.map +1 -0
- package/dist/utils/signals-pubsub.d.ts +101 -0
- package/dist/utils/signals-pubsub.d.ts.map +1 -0
- package/dist/utils/signals-pubsub.js +410 -0
- package/dist/utils/signals-pubsub.js.map +1 -0
- package/dist/utils/slash-command-loader.d.ts +52 -0
- package/dist/utils/slash-command-loader.d.ts.map +1 -0
- package/dist/utils/slash-command-loader.js +142 -0
- package/dist/utils/slash-command-loader.js.map +1 -0
- package/dist/utils/slash-command-processor.d.ts +14 -0
- package/dist/utils/slash-command-processor.d.ts.map +1 -0
- package/dist/utils/slash-command-processor.js +109 -0
- package/dist/utils/slash-command-processor.js.map +1 -0
- package/dist/utils/stdin-pipe.d.ts +33 -0
- package/dist/utils/stdin-pipe.d.ts.map +1 -0
- package/dist/utils/stdin-pipe.js +96 -0
- package/dist/utils/stdin-pipe.js.map +1 -0
- package/dist/utils/storage-factory.d.ts +50 -0
- package/dist/utils/storage-factory.d.ts.map +1 -0
- package/dist/utils/storage-factory.js +121 -0
- package/dist/utils/storage-factory.js.map +1 -0
- package/dist/utils/storage-maintenance.d.ts +121 -0
- package/dist/utils/storage-maintenance.d.ts.map +1 -0
- package/dist/utils/storage-maintenance.js +355 -0
- package/dist/utils/storage-maintenance.js.map +1 -0
- package/dist/utils/thread-lock.d.ts +26 -0
- package/dist/utils/thread-lock.d.ts.map +1 -0
- package/dist/utils/thread-lock.js +112 -0
- package/dist/utils/thread-lock.js.map +1 -0
- package/dist/utils/token-estimator.d.ts +3 -0
- package/dist/utils/token-estimator.d.ts.map +1 -0
- package/dist/utils/token-estimator.js +21 -0
- package/dist/utils/token-estimator.js.map +1 -0
- package/dist/utils/update-check.d.ts +151 -0
- package/dist/utils/update-check.d.ts.map +1 -0
- package/dist/utils/update-check.js +432 -0
- package/dist/utils/update-check.js.map +1 -0
- package/dist/voice/stt-registry.d.ts +64 -0
- package/dist/voice/stt-registry.d.ts.map +1 -0
- package/dist/voice/stt-registry.js +144 -0
- package/dist/voice/stt-registry.js.map +1 -0
- package/dist/workflows/register-primitives.d.ts +52 -0
- package/dist/workflows/register-primitives.d.ts.map +1 -0
- package/dist/workflows/register-primitives.js +40 -0
- package/dist/workflows/register-primitives.js.map +1 -0
- package/dist/workflows/service.d.ts +64 -0
- package/dist/workflows/service.d.ts.map +1 -0
- package/dist/workflows/service.js +53 -0
- package/dist/workflows/service.js.map +1 -0
- package/package.json +107 -0
|
@@ -0,0 +1,609 @@
|
|
|
1
|
+
import { getOAuthProviders } from "./storage.js";
|
|
2
|
+
import { getCredentialProviderId, normalizeLegacyModelId } from "../providers/model-ids.js";
|
|
3
|
+
import { ProviderAuthRequiredError } from "./provider-auth-error.js";
|
|
4
|
+
import { resolveCredentialStore } from "../agents/credential-resolver.js";
|
|
5
|
+
import { getRequestAccountSelection, isRequestAccountRoutingExhausted, markRequestAccountRoutingExhausted, setRequestAccountSelection } from "./account-routing-context.js";
|
|
6
|
+
import { resolveModel, resolveRequestThinkingLevel } from "../agents/model.js";
|
|
7
|
+
import { TripWire } from "@mastra/core/agent";
|
|
8
|
+
//#region src/auth/account-rotation-processor.ts
|
|
9
|
+
/**
|
|
10
|
+
* Error-driven rotation across a provider's OAuth account registry.
|
|
11
|
+
*
|
|
12
|
+
* When the active account cannot serve a request (rate limit, quota
|
|
13
|
+
* exhaustion, dead token, persistent outage), the next account in insertion
|
|
14
|
+
* order is selected for the request and the request retried. OAuth fetch
|
|
15
|
+
* wrappers read that request-scoped selection on every HTTP attempt, so
|
|
16
|
+
* concurrent runs can't swap each other's credentials. Every switch is
|
|
17
|
+
* persisted as a non-transient `data-mastracode-account-switch` part so it
|
|
18
|
+
* shows in the transcript and survives history reload.
|
|
19
|
+
*
|
|
20
|
+
* Two classes, two lanes — the split is load-bearing. The processor runner
|
|
21
|
+
* walks `[...inputProcessors, ...outputProcessors, ...errorProcessors]` when
|
|
22
|
+
* running `processAPIError`, so a processor registered in the input lane that
|
|
23
|
+
* also implemented `processAPIError` would run BEFORE
|
|
24
|
+
* `StreamErrorRetryProcessor` and hop on 5xx errors before transient retries
|
|
25
|
+
* had a chance. `AccountRotationProcessor` therefore implements
|
|
26
|
+
* `processAPIError` only and is registered in `errorProcessors` after
|
|
27
|
+
* `StreamErrorRetryProcessor`; `AccountStartNoticeProcessor` implements
|
|
28
|
+
* `processInput` only and is registered in `inputProcessors`.
|
|
29
|
+
*/
|
|
30
|
+
const ACCOUNT_SWITCH_PART_TYPE = "data-mastracode-account-switch";
|
|
31
|
+
/** Rotatable providers = the OAuth provider registry; API-key-only providers never rotate. */
|
|
32
|
+
const KNOWN_PROVIDER_IDS = new Set(getOAuthProviders().map((provider) => provider.id));
|
|
33
|
+
/** Hostname suffixes → provider ids, for `APICallError.url`. */
|
|
34
|
+
const PROVIDER_HOST_PATTERNS = [
|
|
35
|
+
[/(^|\.)api\.anthropic\.com$/i, "anthropic"],
|
|
36
|
+
[/(^|\.)api\.kimi\.com$/i, "kimi-for-coding"],
|
|
37
|
+
[/(^|\.)api\.x\.ai$/i, "xai"],
|
|
38
|
+
[/(^|\.)chatgpt\.com$/i, "openai-codex"],
|
|
39
|
+
[/(^|\.)backend-api\.codex\.ai$/i, "openai-codex"],
|
|
40
|
+
[/(^|\.)githubcopilot\.com$/i, "github-copilot"],
|
|
41
|
+
[/(^|\.)api\.github\.com$/i, "github-copilot"]
|
|
42
|
+
];
|
|
43
|
+
/**
|
|
44
|
+
* Provider usage/quota-limit wording (locked Q7 bucket 1). Statuses 429/402
|
|
45
|
+
* are matched before this; some providers deliver quota errors as plain 400s,
|
|
46
|
+
* which only the message reveals. Deliberately restricted to unambiguous
|
|
47
|
+
* quota phrases — a generic "exceeded your … limit" can appear on non-quota
|
|
48
|
+
* client errors (request size, context length) that must never rotate.
|
|
49
|
+
*/
|
|
50
|
+
const USAGE_LIMIT_MESSAGE_PATTERN = /usage (?:limit|cap)|insufficient[_ ]quota|quota (?:exceeded|exhausted|reached)|exceeded (?:your )?current quota|insufficient (?:balance|credits?)|credits? exhausted|rate limit (?:exceeded|reached)|weekly limit|monthly limit/i;
|
|
51
|
+
const NETWORK_ERROR_CODES = /* @__PURE__ */ new Set([
|
|
52
|
+
"ECONNRESET",
|
|
53
|
+
"EPIPE",
|
|
54
|
+
"ECONNREFUSED",
|
|
55
|
+
"ENOTFOUND",
|
|
56
|
+
"ETIMEDOUT",
|
|
57
|
+
"EAI_AGAIN",
|
|
58
|
+
"UND_ERR_CONNECT_TIMEOUT",
|
|
59
|
+
"UND_ERR_SOCKET"
|
|
60
|
+
]);
|
|
61
|
+
const NETWORK_MESSAGE_PATTERN = /fetch failed|network error|socket hang up|getaddrinfo|econnrefused|enotfound|etimedout|connection (?:refused|reset|closed|timed out)|other side closed|write epipe/i;
|
|
62
|
+
const MAX_CAUSE_DEPTH = 4;
|
|
63
|
+
/** Persisted data-part type for a model-route hop. */
|
|
64
|
+
const MODEL_FALLBACK_PART_TYPE = "data-mastracode-model-fallback";
|
|
65
|
+
/** Session-state key set when account rotation advances the model route. */
|
|
66
|
+
const MODEL_FALLBACK_STATE_KEY = "mastracodePendingModelFallback";
|
|
67
|
+
function isErrorWithCode(error) {
|
|
68
|
+
return typeof error === "object" && error !== null && "code" in error;
|
|
69
|
+
}
|
|
70
|
+
function readErrorStatus(error) {
|
|
71
|
+
let current = error;
|
|
72
|
+
for (let depth = 0; current && depth < MAX_CAUSE_DEPTH; depth++) {
|
|
73
|
+
if (typeof current !== "object") break;
|
|
74
|
+
const { statusCode, status } = current;
|
|
75
|
+
if (typeof statusCode === "number") return statusCode;
|
|
76
|
+
if (typeof status === "number") return status;
|
|
77
|
+
current = current.cause;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function isProviderAuthRequiredError(error) {
|
|
81
|
+
let current = error;
|
|
82
|
+
for (let depth = 0; current && depth < MAX_CAUSE_DEPTH; depth++) {
|
|
83
|
+
if (current instanceof ProviderAuthRequiredError || current instanceof Error && current.name === "ProviderAuthRequiredError") return true;
|
|
84
|
+
if (typeof current !== "object") break;
|
|
85
|
+
current = current.cause;
|
|
86
|
+
}
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
/** Concatenate the error's message with its cause chain (bounded). */
|
|
90
|
+
function collectErrorText(error) {
|
|
91
|
+
const parts = [];
|
|
92
|
+
let current = error;
|
|
93
|
+
for (let depth = 0; current && depth < MAX_CAUSE_DEPTH; depth++) if (current instanceof Error) {
|
|
94
|
+
parts.push(current.message);
|
|
95
|
+
current = current.cause;
|
|
96
|
+
} else if (typeof current === "object" && "message" in current) {
|
|
97
|
+
const message = current.message;
|
|
98
|
+
if (typeof message === "string") parts.push(message);
|
|
99
|
+
current = current.cause;
|
|
100
|
+
} else break;
|
|
101
|
+
return parts.join(" | ");
|
|
102
|
+
}
|
|
103
|
+
function isNetworkErrorLike(error) {
|
|
104
|
+
let current = error;
|
|
105
|
+
for (let depth = 0; current && depth < MAX_CAUSE_DEPTH; depth++) {
|
|
106
|
+
if (isErrorWithCode(current) && typeof current.code === "string" && NETWORK_ERROR_CODES.has(current.code.toUpperCase())) return true;
|
|
107
|
+
if (current instanceof Error) {
|
|
108
|
+
if (NETWORK_MESSAGE_PATTERN.test(current.message)) return true;
|
|
109
|
+
current = current.cause;
|
|
110
|
+
} else if (typeof current === "object") current = current.cause;
|
|
111
|
+
else break;
|
|
112
|
+
}
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* The locked Q7 taxonomy. 429/402/usage-limit rotate immediately (429 is not
|
|
117
|
+
* covered by any transient matcher, so it arrives here on first occurrence);
|
|
118
|
+
* 401/403 and `ProviderAuthRequiredError` rotate after one forced refresh;
|
|
119
|
+
* 5xx/network hop only when the transient retry budget is already spent (they
|
|
120
|
+
* reach this processor because `StreamErrorRetryProcessor` declined); 400 and
|
|
121
|
+
* everything unknown never touch the registry.
|
|
122
|
+
*/
|
|
123
|
+
function classifyRotationError(error) {
|
|
124
|
+
if (isProviderAuthRequiredError(error)) return {
|
|
125
|
+
kind: "rotate",
|
|
126
|
+
reason: "auth-failed"
|
|
127
|
+
};
|
|
128
|
+
const status = readErrorStatus(error);
|
|
129
|
+
if (status === 429) return {
|
|
130
|
+
kind: "rotate",
|
|
131
|
+
reason: "rate-limit"
|
|
132
|
+
};
|
|
133
|
+
if (status === 402) return {
|
|
134
|
+
kind: "rotate",
|
|
135
|
+
reason: "quota-exhausted"
|
|
136
|
+
};
|
|
137
|
+
if (status === 401 || status === 403) return {
|
|
138
|
+
kind: "rotate",
|
|
139
|
+
reason: "auth-failed"
|
|
140
|
+
};
|
|
141
|
+
if (status !== void 0 && status >= 500 && status < 600) return { kind: "hop" };
|
|
142
|
+
if (status === void 0 || status === 400) {
|
|
143
|
+
if (USAGE_LIMIT_MESSAGE_PATTERN.test(collectErrorText(error))) return {
|
|
144
|
+
kind: "rotate",
|
|
145
|
+
reason: "quota-exhausted"
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
if (isNetworkErrorLike(error)) return { kind: "hop" };
|
|
149
|
+
return { kind: "never" };
|
|
150
|
+
}
|
|
151
|
+
/** Provider id off a router model id: `mastracode/<provider>/<model>` or `<provider>/<model>`. */
|
|
152
|
+
function providerFromModelId(modelId) {
|
|
153
|
+
const segments = normalizeLegacyModelId(modelId).replace(/^mastracode\//, "").split("/");
|
|
154
|
+
const providerId = segments[0] ? getCredentialProviderId(segments[0]) : void 0;
|
|
155
|
+
return providerId && KNOWN_PROVIDER_IDS.has(providerId) ? providerId : void 0;
|
|
156
|
+
}
|
|
157
|
+
function providerFromHost(hostname) {
|
|
158
|
+
for (const [pattern, providerId] of PROVIDER_HOST_PATTERNS) if (pattern.test(hostname)) return providerId;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Identify the provider an error came from: the request URL's hostname
|
|
162
|
+
* (`APICallError.url`, cause chain included), falling back to the router
|
|
163
|
+
* model id. Unknown → undefined (caller treats as never-rotate).
|
|
164
|
+
*/
|
|
165
|
+
function providerFromError(error) {
|
|
166
|
+
const causeChain = [];
|
|
167
|
+
let current = error;
|
|
168
|
+
for (let depth = 0; current && depth < MAX_CAUSE_DEPTH; depth++) {
|
|
169
|
+
if (typeof current !== "object") break;
|
|
170
|
+
causeChain.push(current);
|
|
171
|
+
current = current.cause;
|
|
172
|
+
}
|
|
173
|
+
for (const item of causeChain) {
|
|
174
|
+
const urls = [
|
|
175
|
+
item.url,
|
|
176
|
+
item.requestURL,
|
|
177
|
+
item.requestUrl
|
|
178
|
+
];
|
|
179
|
+
for (const url of urls) {
|
|
180
|
+
if (typeof url !== "string") continue;
|
|
181
|
+
try {
|
|
182
|
+
const providerId = providerFromHost(new URL(url).hostname);
|
|
183
|
+
if (providerId) return providerId;
|
|
184
|
+
} catch {}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
for (const item of causeChain) {
|
|
188
|
+
const modelId = item.modelId;
|
|
189
|
+
if (typeof modelId !== "string") continue;
|
|
190
|
+
const providerId = providerFromModelId(modelId);
|
|
191
|
+
if (providerId) return providerId;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
function getTriedInstances(state) {
|
|
195
|
+
const existing = state.triedInstances;
|
|
196
|
+
if (existing instanceof Set) return existing;
|
|
197
|
+
const created = /* @__PURE__ */ new Set();
|
|
198
|
+
state.triedInstances = created;
|
|
199
|
+
return created;
|
|
200
|
+
}
|
|
201
|
+
function getForcedRefreshInstances(state) {
|
|
202
|
+
const existing = state.forcedAuthRefresh;
|
|
203
|
+
if (existing instanceof Set) return existing;
|
|
204
|
+
const created = /* @__PURE__ */ new Set();
|
|
205
|
+
state.forcedAuthRefresh = created;
|
|
206
|
+
return created;
|
|
207
|
+
}
|
|
208
|
+
/** Friendly names for the part/notice copy (display only — never auth data). */
|
|
209
|
+
const PROVIDER_DISPLAY_NAMES = {
|
|
210
|
+
anthropic: "Anthropic",
|
|
211
|
+
"kimi-for-coding": "Kimi",
|
|
212
|
+
"openai-codex": "Codex",
|
|
213
|
+
"github-copilot": "GitHub Copilot",
|
|
214
|
+
xai: "xAI"
|
|
215
|
+
};
|
|
216
|
+
const REASON_TEXT = {
|
|
217
|
+
"rate-limit": "rate limit",
|
|
218
|
+
"quota-exhausted": "quota exhausted",
|
|
219
|
+
"auth-failed": "auth failed",
|
|
220
|
+
"pool-exhausted": "pool exhausted",
|
|
221
|
+
"persistent-outage": "persistent outage",
|
|
222
|
+
"preferred-routing": "subscription routing"
|
|
223
|
+
};
|
|
224
|
+
/** Validates untrusted `reason` values (e.g. persisted message parts). */
|
|
225
|
+
function isAccountSwitchReason(value) {
|
|
226
|
+
return typeof value === "string" && Object.prototype.hasOwnProperty.call(REASON_TEXT, value);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* One-line transcript copy for a switch part. Shared by the live `info`
|
|
230
|
+
* controller event (the TUI shows controller `info` events as transcript
|
|
231
|
+
* lines, and no message event carries data parts mid-run) and by the TUI's
|
|
232
|
+
* history rendering of the persisted part — one formatter, identical text.
|
|
233
|
+
*/
|
|
234
|
+
function accountSwitchNoticeText(data) {
|
|
235
|
+
const provider = PROVIDER_DISPLAY_NAMES[data.provider] ?? data.provider;
|
|
236
|
+
const reason = REASON_TEXT[data.reason];
|
|
237
|
+
if (data.to === null) {
|
|
238
|
+
if (data.exclusive) return `Pinned ${provider} account unavailable (${reason})`;
|
|
239
|
+
return `All ${provider} accounts unavailable (${reason})`;
|
|
240
|
+
}
|
|
241
|
+
return `Switched ${provider} account: ${data.from?.label ?? "unknown"} → ${data.to.label} (${reason})`;
|
|
242
|
+
}
|
|
243
|
+
/** Transcript line for a model-route hop; shared by the live info event and the TUI's history render. */
|
|
244
|
+
function modelFallbackNoticeText(data) {
|
|
245
|
+
const reason = REASON_TEXT[data.reason] ?? data.reason;
|
|
246
|
+
return `Switched model route: ${data.from.label} → ${data.to.label} (${reason})`;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Whether a persisted model-fallback reason is one this build understands.
|
|
250
|
+
* `REASON_TEXT` also covers the account-switch reasons, so the notice text
|
|
251
|
+
* alone would happily render a foreign value such as `rate-limit` as a
|
|
252
|
+
* model-fallback reason; history parsed from another build's part must be
|
|
253
|
+
* rejected instead.
|
|
254
|
+
*/
|
|
255
|
+
function isModelFallbackReason(value) {
|
|
256
|
+
return value === "pool-exhausted" || value === "persistent-outage";
|
|
257
|
+
}
|
|
258
|
+
async function emitAccountSwitchPart(args, data) {
|
|
259
|
+
await args.writer?.custom({
|
|
260
|
+
type: ACCOUNT_SWITCH_PART_TYPE,
|
|
261
|
+
data
|
|
262
|
+
});
|
|
263
|
+
(args.requestContext?.get("controller"))?.emitEvent?.({
|
|
264
|
+
type: "info",
|
|
265
|
+
message: accountSwitchNoticeText(data)
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Provider of the model the controller session is currently running — the
|
|
270
|
+
* fallback identification path for errors that carry neither a request URL
|
|
271
|
+
* nor a model id (e.g. `ProviderAuthRequiredError` thrown by a fetch wrapper
|
|
272
|
+
* before any HTTP request exists).
|
|
273
|
+
*/
|
|
274
|
+
function providerFromSession(args) {
|
|
275
|
+
const modelId = (args.requestContext?.get("controller"))?.session?.modelId;
|
|
276
|
+
return typeof modelId === "string" ? providerFromModelId(modelId) : void 0;
|
|
277
|
+
}
|
|
278
|
+
function getRoutingController(args) {
|
|
279
|
+
return args.requestContext?.get("controller");
|
|
280
|
+
}
|
|
281
|
+
/** A targeted route is exclusive; an entry without accountId uses automatic pool rotation. */
|
|
282
|
+
function getRouteTargetAccountId(route) {
|
|
283
|
+
return route?.accountId;
|
|
284
|
+
}
|
|
285
|
+
function getRequestActiveAccount(args, store, providerId) {
|
|
286
|
+
if (isRequestAccountRoutingExhausted(args.requestContext, providerId)) return void 0;
|
|
287
|
+
const selectedId = getRequestAccountSelection(args.requestContext, providerId);
|
|
288
|
+
if (selectedId) return store.listAccounts?.(providerId).find((account) => account.id === selectedId);
|
|
289
|
+
return store.getActiveAccount?.(providerId) ?? store.listAccounts?.(providerId).find((account) => account.active);
|
|
290
|
+
}
|
|
291
|
+
function resolveAccountRoute(args, explicit) {
|
|
292
|
+
const controller = getRoutingController(args);
|
|
293
|
+
const state = controller?.getState?.();
|
|
294
|
+
const pending = state?.mastracodePendingModelFallback;
|
|
295
|
+
const pendingMatchesThread = pending && typeof pending.toEntryId === "string" && typeof pending.toModelId === "string" && (pending.threadId === void 0 || pending.threadId === controller?.threadId);
|
|
296
|
+
const routeEntries = Array.isArray((state?.modelRoute)?.entries) ? (state?.modelRoute).entries ?? [] : [];
|
|
297
|
+
const entry = explicit ? explicit : pendingMatchesThread ? routeEntries.find((candidate) => candidate.id === pending.toEntryId && candidate.modelId === pending.toModelId) : routeEntries.find((candidate) => candidate.modelId === controller?.session?.modelId);
|
|
298
|
+
if (!entry || typeof entry.id !== "string" || typeof entry.modelId !== "string") return null;
|
|
299
|
+
const providerId = providerFromModelId(entry.modelId);
|
|
300
|
+
if (!providerId) return null;
|
|
301
|
+
return {
|
|
302
|
+
entryId: entry.id,
|
|
303
|
+
modelId: entry.modelId,
|
|
304
|
+
providerId,
|
|
305
|
+
...typeof entry.accountId === "string" ? { accountId: entry.accountId } : {}
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* A14: `Automatic` rotation starts *at* the persisted active account and walks
|
|
310
|
+
* insertion order from there, wrapping once. The active account is the cursor
|
|
311
|
+
* rotation last left at, so a turn that starts at index 0 regardless would
|
|
312
|
+
* re-activate and re-try an account the previous turn already moved past —
|
|
313
|
+
* which is the whole job the removed sticky-exclusion set was doing badly.
|
|
314
|
+
* With no persisted active account the order is plain insertion order.
|
|
315
|
+
*/
|
|
316
|
+
function orderAccountsFromActive(accounts, activeId) {
|
|
317
|
+
const index = activeId === void 0 ? -1 : accounts.findIndex((account) => account.id === activeId);
|
|
318
|
+
if (index <= 0) return accounts;
|
|
319
|
+
return [...accounts.slice(index), ...accounts.slice(0, index)];
|
|
320
|
+
}
|
|
321
|
+
async function applyPreferredAccountRoute(args, store, route) {
|
|
322
|
+
store.reload();
|
|
323
|
+
const preferredId = getRouteTargetAccountId(route);
|
|
324
|
+
const accounts = store.listAccounts?.(route.providerId) ?? [];
|
|
325
|
+
if (accounts.length === 0 && preferredId === void 0) return false;
|
|
326
|
+
const tried = getTriedInstances(args.state);
|
|
327
|
+
const unavailable = new Set(accounts.filter((account) => tried.has(account.id)).map((account) => account.id));
|
|
328
|
+
const active = getRequestActiveAccount(args, store, route.providerId) ?? store.getActiveAccount?.(route.providerId);
|
|
329
|
+
const selected = (preferredId ? accounts.filter((account) => account.id === preferredId) : orderAccountsFromActive(accounts, active?.id)).find((account) => !unavailable.has(account.id));
|
|
330
|
+
for (const accountId of unavailable) tried.add(accountId);
|
|
331
|
+
if (!selected) {
|
|
332
|
+
markRequestAccountRoutingExhausted(args.requestContext, route.providerId);
|
|
333
|
+
return false;
|
|
334
|
+
}
|
|
335
|
+
if (active?.id === selected.id) {
|
|
336
|
+
setRequestAccountSelection(args.requestContext, route.providerId, selected.id);
|
|
337
|
+
return false;
|
|
338
|
+
}
|
|
339
|
+
const activated = store.activateAccount ? store.activateAccount(route.providerId, selected.id) : selected;
|
|
340
|
+
if (!activated) {
|
|
341
|
+
if (preferredId !== void 0) markRequestAccountRoutingExhausted(args.requestContext, route.providerId);
|
|
342
|
+
return false;
|
|
343
|
+
}
|
|
344
|
+
setRequestAccountSelection(args.requestContext, route.providerId, activated.id);
|
|
345
|
+
if (preferredId === void 0) await emitAccountSwitchPart(args, {
|
|
346
|
+
provider: route.providerId,
|
|
347
|
+
from: active ? {
|
|
348
|
+
id: active.id,
|
|
349
|
+
label: active.label
|
|
350
|
+
} : null,
|
|
351
|
+
to: {
|
|
352
|
+
id: activated.id,
|
|
353
|
+
label: activated.label
|
|
354
|
+
},
|
|
355
|
+
reason: "preferred-routing",
|
|
356
|
+
at: (/* @__PURE__ */ new Date()).toISOString()
|
|
357
|
+
});
|
|
358
|
+
return true;
|
|
359
|
+
}
|
|
360
|
+
var AccountRotationProcessor = class {
|
|
361
|
+
options;
|
|
362
|
+
id = "mastracode-account-rotation";
|
|
363
|
+
constructor(options) {
|
|
364
|
+
this.options = options;
|
|
365
|
+
}
|
|
366
|
+
async processAPIError(args) {
|
|
367
|
+
const { error, state } = args;
|
|
368
|
+
if (args.retryCount >= this.options.maxProcessorRetries) {
|
|
369
|
+
await this.gateChainHop(args, error);
|
|
370
|
+
return { retry: false };
|
|
371
|
+
}
|
|
372
|
+
const classification = classifyRotationError(error);
|
|
373
|
+
if (classification.kind === "never") {
|
|
374
|
+
await this.gateChainHop(args, error);
|
|
375
|
+
return { retry: false };
|
|
376
|
+
}
|
|
377
|
+
const cascade = await this.getModelRouteCascade(args);
|
|
378
|
+
const currentEntry = cascade?.entries[cascade.position];
|
|
379
|
+
const providerId = providerFromError(error) ?? (currentEntry ? providerFromModelId(currentEntry.modelId) : void 0) ?? (cascade ? void 0 : providerFromSession(args));
|
|
380
|
+
if (!providerId) {
|
|
381
|
+
await this.emitModelFallbackPart(args, classification.kind === "hop" ? "persistent-outage" : "pool-exhausted");
|
|
382
|
+
return { retry: false };
|
|
383
|
+
}
|
|
384
|
+
const store = resolveCredentialStore(args.requestContext) ?? this.options.credentialStore;
|
|
385
|
+
store.reload();
|
|
386
|
+
const accounts = store.listAccounts?.(providerId) ?? [];
|
|
387
|
+
const active = getRequestActiveAccount(args, store, providerId);
|
|
388
|
+
const route = currentEntry ? resolveAccountRoute(args, currentEntry) : resolveAccountRoute(args);
|
|
389
|
+
if (classification.kind === "rotate" && classification.reason === "auth-failed" && active) {
|
|
390
|
+
const forced = getForcedRefreshInstances(state);
|
|
391
|
+
const refreshKey = `${providerId}:${active?.id ?? "active"}`;
|
|
392
|
+
if (!forced.has(refreshKey) && typeof store.forceRefreshActiveAccount === "function") {
|
|
393
|
+
forced.add(refreshKey);
|
|
394
|
+
if (await store.forceRefreshActiveAccount(providerId, active?.id) !== void 0) return { retry: true };
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
const targetAccountId = route?.providerId === providerId ? getRouteTargetAccountId(route) : void 0;
|
|
398
|
+
if (classification.kind === "hop") return this.declarePoolUnavailable(args, providerId, "persistent-outage", targetAccountId !== void 0);
|
|
399
|
+
if (targetAccountId !== void 0) return this.declarePoolUnavailable(args, providerId, "pool-exhausted", true);
|
|
400
|
+
const tried = getTriedInstances(state);
|
|
401
|
+
if (active) tried.add(active.id);
|
|
402
|
+
if (accounts.filter((account) => tried.has(account.id)).length >= accounts.length) return this.declarePoolUnavailable(args, providerId, "pool-exhausted");
|
|
403
|
+
const nextCandidate = (active ? accounts : orderAccountsFromActive(accounts, store.getActiveAccount?.(providerId)?.id)).find((account) => !tried.has(account.id));
|
|
404
|
+
const next = nextCandidate ? store.activateAccount?.(providerId, nextCandidate.id) : void 0;
|
|
405
|
+
if (!next) return this.declarePoolUnavailable(args, providerId, "pool-exhausted");
|
|
406
|
+
setRequestAccountSelection(args.requestContext, providerId, next.id);
|
|
407
|
+
tried.add(next.id);
|
|
408
|
+
args.rotateResponseMessageId?.();
|
|
409
|
+
await emitAccountSwitchPart(args, {
|
|
410
|
+
provider: providerId,
|
|
411
|
+
from: active ? {
|
|
412
|
+
id: active.id,
|
|
413
|
+
label: active.label
|
|
414
|
+
} : null,
|
|
415
|
+
to: {
|
|
416
|
+
id: next.id,
|
|
417
|
+
label: next.label
|
|
418
|
+
},
|
|
419
|
+
reason: classification.reason,
|
|
420
|
+
at: (/* @__PURE__ */ new Date()).toISOString()
|
|
421
|
+
});
|
|
422
|
+
return { retry: true };
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Resolve the request's host-supplied model route once and cache the reachable
|
|
426
|
+
* prefix in processor state. Resolution mirrors getDynamicModel so a hop is
|
|
427
|
+
* never announced for an entry core cannot reach.
|
|
428
|
+
*/
|
|
429
|
+
async getModelRouteCascade(args) {
|
|
430
|
+
if (args.state.modelRouteCascade !== void 0) return args.state.modelRouteCascade ?? null;
|
|
431
|
+
const controller = getRoutingController(args);
|
|
432
|
+
const state = controller?.getState?.();
|
|
433
|
+
const route = (state?.modelRoute)?.entries;
|
|
434
|
+
const pending = state?.mastracodePendingModelFallback;
|
|
435
|
+
const startIndex = pending && typeof pending.toEntryId === "string" && (pending.threadId === void 0 || pending.threadId === controller?.threadId) ? route?.findIndex((entry) => entry.id === pending.toEntryId) : route?.findIndex((entry) => entry.modelId === controller?.session?.modelId);
|
|
436
|
+
if (!route || startIndex === void 0 || startIndex < 0 || route.length - startIndex < 2) {
|
|
437
|
+
args.state.modelRouteCascade = null;
|
|
438
|
+
return null;
|
|
439
|
+
}
|
|
440
|
+
const thinkingLevel = resolveRequestThinkingLevel({
|
|
441
|
+
state: { thinkingLevel: state?.thinkingLevel },
|
|
442
|
+
...!this.options.modeless && { session: { modeId: typeof controller?.session?.modeId === "string" ? controller.session.modeId : "build" } }
|
|
443
|
+
}, this.options.settingsPath);
|
|
444
|
+
const entries = [];
|
|
445
|
+
for (const entry of route.slice(startIndex)) {
|
|
446
|
+
if (typeof entry.id !== "string" || entry.id.length === 0 || typeof entry.modelId !== "string" || entry.modelId.length === 0) break;
|
|
447
|
+
if (entries.length > 0) try {
|
|
448
|
+
resolveModel(entry.modelId, {
|
|
449
|
+
thinkingLevel,
|
|
450
|
+
remapForCodexOAuth: true,
|
|
451
|
+
requestContext: args.requestContext
|
|
452
|
+
});
|
|
453
|
+
} catch {
|
|
454
|
+
break;
|
|
455
|
+
}
|
|
456
|
+
entries.push({
|
|
457
|
+
id: entry.id,
|
|
458
|
+
label: typeof entry.label === "string" && entry.label.length > 0 ? entry.label : entry.id,
|
|
459
|
+
modelId: entry.modelId,
|
|
460
|
+
...typeof entry.accountId === "string" ? { accountId: entry.accountId } : {}
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
if (entries.length < 2) {
|
|
464
|
+
args.state.modelRouteCascade = null;
|
|
465
|
+
return null;
|
|
466
|
+
}
|
|
467
|
+
const cascade = {
|
|
468
|
+
entries,
|
|
469
|
+
position: 0
|
|
470
|
+
};
|
|
471
|
+
args.state.modelRouteCascade = cascade;
|
|
472
|
+
return cascade;
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
* Q14 gate: 400/unknown/unattributable errors never advance routes. Core's
|
|
476
|
+
* fallback array advances on ANY thrown error except TripWire
|
|
477
|
+
* (llm-execution-step.ts), so when the session route has another entry and the
|
|
478
|
+
* current entry is non-last, a bare `retry: false` would silently hop on an
|
|
479
|
+
* error class the user excluded from hop triggers. TripWire is the only
|
|
480
|
+
* no-advance escape: the runner rethrows it and the fallback loop declines
|
|
481
|
+
* to advance. No chain (or already on the last entry) → return and let the
|
|
482
|
+
* plain `retry: false` surface the error exactly as before.
|
|
483
|
+
*/
|
|
484
|
+
async gateChainHop(args, error) {
|
|
485
|
+
const cascade = await this.getModelRouteCascade(args);
|
|
486
|
+
if (!cascade) return;
|
|
487
|
+
if (cascade.position >= cascade.entries.length - 1) return;
|
|
488
|
+
throw new TripWire(error instanceof Error ? error.message : String(error), {}, this.id);
|
|
489
|
+
}
|
|
490
|
+
/** Announce and persist the next model-route hop before core advances. */
|
|
491
|
+
async emitModelFallbackPart(args, reason) {
|
|
492
|
+
const cascade = await this.getModelRouteCascade(args);
|
|
493
|
+
if (!cascade) return;
|
|
494
|
+
const from = cascade.entries[cascade.position];
|
|
495
|
+
const to = cascade.entries[cascade.position + 1];
|
|
496
|
+
if (!from || !to) return;
|
|
497
|
+
const controller = args.requestContext?.get("controller");
|
|
498
|
+
const at = (/* @__PURE__ */ new Date()).toISOString();
|
|
499
|
+
const threadId = typeof controller?.threadId === "string" ? controller.threadId : void 0;
|
|
500
|
+
const pending = {
|
|
501
|
+
fromEntryId: from.id,
|
|
502
|
+
toEntryId: to.id,
|
|
503
|
+
toModelId: to.modelId,
|
|
504
|
+
...threadId ? { threadId } : {},
|
|
505
|
+
reason,
|
|
506
|
+
at
|
|
507
|
+
};
|
|
508
|
+
await controller?.setThreadSetting?.({
|
|
509
|
+
key: MODEL_FALLBACK_STATE_KEY,
|
|
510
|
+
value: pending
|
|
511
|
+
});
|
|
512
|
+
const data = {
|
|
513
|
+
from: {
|
|
514
|
+
entryId: from.id,
|
|
515
|
+
label: from.label
|
|
516
|
+
},
|
|
517
|
+
to: {
|
|
518
|
+
entryId: to.id,
|
|
519
|
+
label: to.label
|
|
520
|
+
},
|
|
521
|
+
reason,
|
|
522
|
+
at
|
|
523
|
+
};
|
|
524
|
+
try {
|
|
525
|
+
await args.writer?.custom({
|
|
526
|
+
type: MODEL_FALLBACK_PART_TYPE,
|
|
527
|
+
data
|
|
528
|
+
});
|
|
529
|
+
} catch (error) {
|
|
530
|
+
await controller?.setThreadSetting?.({
|
|
531
|
+
key: MODEL_FALLBACK_STATE_KEY,
|
|
532
|
+
value: void 0
|
|
533
|
+
});
|
|
534
|
+
throw error;
|
|
535
|
+
}
|
|
536
|
+
await controller?.setState?.({ [MODEL_FALLBACK_STATE_KEY]: pending });
|
|
537
|
+
args.state.startNoticeEmitted = false;
|
|
538
|
+
const targetRoute = resolveAccountRoute(args, to);
|
|
539
|
+
if (targetRoute) await applyPreferredAccountRoute(args, resolveCredentialStore(args.requestContext) ?? this.options.credentialStore, targetRoute).catch(() => void 0);
|
|
540
|
+
controller?.emitEvent?.({
|
|
541
|
+
type: "info",
|
|
542
|
+
message: modelFallbackNoticeText(data)
|
|
543
|
+
});
|
|
544
|
+
cascade.position++;
|
|
545
|
+
}
|
|
546
|
+
/**
|
|
547
|
+
* Pool done for this request: every instance recorded in the tried-set and
|
|
548
|
+
* a `to: null` part emitted. Returns `retry: false` so core's fallback
|
|
549
|
+
* array can hop to the next route entry (announced by `emitModelFallbackPart`).
|
|
550
|
+
* Silent on the account part when the provider has no registry at all —
|
|
551
|
+
* there are no accounts to declare unavailable, but the hop still applies.
|
|
552
|
+
*/
|
|
553
|
+
async declarePoolUnavailable(args, providerId, reason, exclusive = false) {
|
|
554
|
+
const store = resolveCredentialStore(args.requestContext) ?? this.options.credentialStore;
|
|
555
|
+
const accounts = store.listAccounts?.(providerId) ?? [];
|
|
556
|
+
if (accounts.length === 0) {
|
|
557
|
+
await this.emitModelFallbackPart(args, reason);
|
|
558
|
+
return { retry: false };
|
|
559
|
+
}
|
|
560
|
+
const tried = getTriedInstances(args.state);
|
|
561
|
+
for (const account of accounts) tried.add(account.id);
|
|
562
|
+
const active = getRequestActiveAccount(args, store, providerId);
|
|
563
|
+
await emitAccountSwitchPart(args, {
|
|
564
|
+
provider: providerId,
|
|
565
|
+
from: active ? {
|
|
566
|
+
id: active.id,
|
|
567
|
+
label: active.label
|
|
568
|
+
} : null,
|
|
569
|
+
to: null,
|
|
570
|
+
reason,
|
|
571
|
+
at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
572
|
+
...exclusive ? { exclusive: true } : {}
|
|
573
|
+
});
|
|
574
|
+
await this.emitModelFallbackPart(args, reason);
|
|
575
|
+
return { retry: false };
|
|
576
|
+
}
|
|
577
|
+
};
|
|
578
|
+
/**
|
|
579
|
+
* Applies the pack's preferred account route once per request, before the
|
|
580
|
+
* first model call. Without a route it only reloads the credential store so
|
|
581
|
+
* the request sees accounts changed by other processes.
|
|
582
|
+
*
|
|
583
|
+
* TYPE CONSTRAINT: this class must NEVER implement `processAPIError`. It
|
|
584
|
+
* lives in `inputProcessors`; the runner walks input processors first when
|
|
585
|
+
* running `processAPIError`, so adding the method here would classify and
|
|
586
|
+
* rotate errors BEFORE `StreamErrorRetryProcessor`'s transient retries run.
|
|
587
|
+
*/
|
|
588
|
+
var AccountStartNoticeProcessor = class {
|
|
589
|
+
options;
|
|
590
|
+
id = "mastracode-account-start-notice";
|
|
591
|
+
constructor(options) {
|
|
592
|
+
this.options = options;
|
|
593
|
+
}
|
|
594
|
+
async processInput(args) {
|
|
595
|
+
if (args.state.startNoticeEmitted) return args.messageList;
|
|
596
|
+
const store = resolveCredentialStore(args.requestContext) ?? this.options.credentialStore;
|
|
597
|
+
const route = resolveAccountRoute(args);
|
|
598
|
+
if (!route) {
|
|
599
|
+
store.reload();
|
|
600
|
+
return args.messageList;
|
|
601
|
+
}
|
|
602
|
+
if (await applyPreferredAccountRoute(args, store, route) || getRouteTargetAccountId(route) !== void 0) args.state.startNoticeEmitted = true;
|
|
603
|
+
return args.messageList;
|
|
604
|
+
}
|
|
605
|
+
};
|
|
606
|
+
//#endregion
|
|
607
|
+
export { ACCOUNT_SWITCH_PART_TYPE, AccountRotationProcessor, AccountStartNoticeProcessor, MODEL_FALLBACK_PART_TYPE, MODEL_FALLBACK_STATE_KEY, PROVIDER_DISPLAY_NAMES, accountSwitchNoticeText, classifyRotationError, isAccountSwitchReason, isModelFallbackReason, modelFallbackNoticeText, providerFromError, providerFromModelId };
|
|
608
|
+
|
|
609
|
+
//# sourceMappingURL=account-rotation-processor.js.map
|