@mastra/code-sdk 0.0.0-client-tool-results-20260912062135
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 +37 -0
- package/dist/acp/agent.d.ts +35 -0
- package/dist/acp/agent.d.ts.map +1 -0
- package/dist/acp/agent.js +161 -0
- package/dist/acp/agent.js.map +1 -0
- package/dist/acp/event-mapper.d.ts +22 -0
- package/dist/acp/event-mapper.d.ts.map +1 -0
- package/dist/acp/event-mapper.js +214 -0
- package/dist/acp/event-mapper.js.map +1 -0
- package/dist/acp/index.d.ts +8 -0
- package/dist/acp/index.d.ts.map +1 -0
- package/dist/acp/index.js +65 -0
- package/dist/acp/index.js.map +1 -0
- package/dist/acp/server.d.ts +7 -0
- package/dist/acp/server.d.ts.map +1 -0
- package/dist/acp/server.js +35 -0
- package/dist/acp/server.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/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 +63 -0
- package/dist/agents/credential-resolver.d.ts.map +1 -0
- package/dist/agents/credential-resolver.js +97 -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 +29 -0
- package/dist/agents/instructions.d.ts.map +1 -0
- package/dist/agents/instructions.js +58 -0
- package/dist/agents/instructions.js.map +1 -0
- package/dist/agents/mastracode-gateway.d.ts +74 -0
- package/dist/agents/mastracode-gateway.d.ts.map +1 -0
- package/dist/agents/mastracode-gateway.js +431 -0
- package/dist/agents/mastracode-gateway.js.map +1 -0
- package/dist/agents/memory.d.ts +30 -0
- package/dist/agents/memory.d.ts.map +1 -0
- package/dist/agents/memory.js +171 -0
- package/dist/agents/memory.js.map +1 -0
- package/dist/agents/model.d.ts +81 -0
- package/dist/agents/model.d.ts.map +1 -0
- package/dist/agents/model.js +155 -0
- package/dist/agents/model.js.map +1 -0
- package/dist/agents/modes/build.d.ts +10 -0
- package/dist/agents/modes/build.d.ts.map +1 -0
- package/dist/agents/modes/build.js +49 -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 +42 -0
- package/dist/agents/modes/explore.js.map +1 -0
- package/dist/agents/modes/plan.d.ts +6 -0
- package/dist/agents/modes/plan.d.ts.map +1 -0
- package/dist/agents/modes/plan.js +42 -0
- package/dist/agents/modes/plan.js.map +1 -0
- package/dist/agents/prompts/agent-instructions.d.ts +70 -0
- package/dist/agents/prompts/agent-instructions.d.ts.map +1 -0
- package/dist/agents/prompts/agent-instructions.js +211 -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 +50 -0
- package/dist/agents/prompts/index.d.ts.map +1 -0
- package/dist/agents/prompts/index.js +119 -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 +6 -0
- package/dist/agents/prompts/plan.d.ts.map +1 -0
- package/dist/agents/prompts/plan.js +111 -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 +180 -0
- package/dist/agents/prompts/tool-guidance.js.map +1 -0
- package/dist/agents/sandbox-filesystem.d.ts +117 -0
- package/dist/agents/sandbox-filesystem.d.ts.map +1 -0
- package/dist/agents/sandbox-filesystem.js +356 -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 +10 -0
- package/dist/agents/tool-availability.d.ts.map +1 -0
- package/dist/agents/tool-availability.js +96 -0
- package/dist/agents/tool-availability.js.map +1 -0
- package/dist/agents/tools.d.ts +36 -0
- package/dist/agents/tools.d.ts.map +1 -0
- package/dist/agents/tools.js +117 -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 +80 -0
- package/dist/agents/workflow-builder-agent.js.map +1 -0
- package/dist/agents/workspace.d.ts +32 -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 +163 -0
- package/dist/analytics.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 +12 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +8 -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 +126 -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 +340 -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 +232 -0
- package/dist/auth/providers/kimi-coding.js.map +1 -0
- package/dist/auth/providers/openai-codex.d.ts +139 -0
- package/dist/auth/providers/openai-codex.d.ts.map +1 -0
- package/dist/auth/providers/openai-codex.js +519 -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 +205 -0
- package/dist/auth/providers/xai.js.map +1 -0
- package/dist/auth/storage.d.ts +92 -0
- package/dist/auth/storage.d.ts.map +1 -0
- package/dist/auth/storage.js +211 -0
- package/dist/auth/storage.js.map +1 -0
- package/dist/auth/types.d.ts +89 -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 +10 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +18 -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/goal-manager.d.ts +78 -0
- package/dist/goal-manager.d.ts.map +1 -0
- package/dist/goal-manager.js +273 -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 +42 -0
- package/dist/headless/cli.d.ts.map +1 -0
- package/dist/headless/cli.js +209 -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 +190 -0
- package/dist/headless/flags.js.map +1 -0
- package/dist/headless/format.d.ts +38 -0
- package/dist/headless/format.d.ts.map +1 -0
- package/dist/headless/format.js +89 -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 +346 -0
- package/dist/headless/run-mc.js.map +1 -0
- package/dist/headless/types.d.ts +158 -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 +73 -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 +341 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +919 -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 +119 -0
- package/dist/knowledge-inspector.d.ts.map +1 -0
- package/dist/knowledge-inspector.js +508 -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 +62 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +301 -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 +101 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +644 -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 +125 -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 +17 -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 +25 -0
- package/dist/onboarding/om-settings.d.ts.map +1 -0
- package/dist/onboarding/om-settings.js +47 -0
- package/dist/onboarding/om-settings.js.map +1 -0
- package/dist/onboarding/packs.d.ts +49 -0
- package/dist/onboarding/packs.d.ts.map +1 -0
- package/dist/onboarding/packs.js +182 -0
- package/dist/onboarding/packs.js.map +1 -0
- package/dist/onboarding/settings.d.ts +438 -0
- package/dist/onboarding/settings.d.ts.map +1 -0
- package/dist/onboarding/settings.js +847 -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 +137 -0
- package/dist/permissions.js.map +1 -0
- package/dist/plugin.d.ts +144 -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 +88 -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 +258 -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 +500 -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 +153 -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/claude-max.d.ts +65 -0
- package/dist/providers/claude-max.d.ts.map +1 -0
- package/dist/providers/claude-max.js +252 -0
- package/dist/providers/claude-max.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 +266 -0
- package/dist/providers/github-copilot.js.map +1 -0
- package/dist/providers/kimi-coding.d.ts +15 -0
- package/dist/providers/kimi-coding.d.ts.map +1 -0
- package/dist/providers/kimi-coding.js +69 -0
- package/dist/providers/kimi-coding.js.map +1 -0
- package/dist/providers/openai-codex.d.ts +73 -0
- package/dist/providers/openai-codex.d.ts.map +1 -0
- package/dist/providers/openai-codex.js +306 -0
- package/dist/providers/openai-codex.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/schema.d.ts +200 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +92 -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.d.ts +33 -0
- package/dist/thinking.d.ts.map +1 -0
- package/dist/thinking.js +58 -0
- package/dist/thinking.js.map +1 -0
- package/dist/tool-names.d.ts +73 -0
- package/dist/tool-names.d.ts.map +1 -0
- package/dist/tool-names.js +52 -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 +79 -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 +7 -0
- package/dist/tools/workflows/ephemeral-memory.d.ts.map +1 -0
- package/dist/tools/workflows/ephemeral-memory.js +45 -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-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 +1015 -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 +15 -0
- package/dist/tools/workflows/tool-ids.d.ts.map +1 -0
- package/dist/tools/workflows/tool-ids.js +19 -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/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/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/signals-pubsub.d.ts +41 -0
- package/dist/utils/signals-pubsub.d.ts.map +1 -0
- package/dist/utils/signals-pubsub.js +122 -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 +103 -0
- package/dist/utils/storage-maintenance.d.ts.map +1 -0
- package/dist/utils/storage-maintenance.js +274 -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 +101 -0
- package/dist/utils/update-check.d.ts.map +1 -0
- package/dist/utils/update-check.js +383 -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 +97 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AgentController, AgentControllerMode } from '@mastra/core/agent-controller';
|
|
2
|
+
/**
|
|
3
|
+
* Run the ACP server over stdio.
|
|
4
|
+
* This sets up the JSON-RPC stream and keeps the process alive until the client disconnects.
|
|
5
|
+
*/
|
|
6
|
+
export declare function runAcpServer(controller: AgentController, modes: AgentControllerMode[], cleanup?: () => Promise<void>): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/acp/server.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAW,MAAM,+BAA+B,CAAC;AAGnG;;;GAGG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,eAAe,EAC3B,KAAK,EAAE,mBAAmB,EAAE,EAC5B,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { MastraCodeAcpAgent } from "./agent.js";
|
|
2
|
+
import { AgentSideConnection, ndJsonStream } from "@agentclientprotocol/sdk";
|
|
3
|
+
import { randomUUID } from "crypto";
|
|
4
|
+
import { Readable, Writable } from "stream";
|
|
5
|
+
//#region src/acp/server.ts
|
|
6
|
+
/**
|
|
7
|
+
* Run the ACP server over stdio.
|
|
8
|
+
* This sets up the JSON-RPC stream and keeps the process alive until the client disconnects.
|
|
9
|
+
*/
|
|
10
|
+
async function runAcpServer(controller, modes, cleanup) {
|
|
11
|
+
const input = Readable.toWeb(process.stdin);
|
|
12
|
+
const stream = ndJsonStream(Writable.toWeb(process.stdout), input);
|
|
13
|
+
let session;
|
|
14
|
+
let agent;
|
|
15
|
+
try {
|
|
16
|
+
session = await controller.createSession({
|
|
17
|
+
id: `acp-${randomUUID()}`,
|
|
18
|
+
ownerId: `acp-owner-${randomUUID()}`
|
|
19
|
+
});
|
|
20
|
+
const activeSession = session;
|
|
21
|
+
await new AgentSideConnection((conn) => {
|
|
22
|
+
agent = new MastraCodeAcpAgent(conn, controller, activeSession, modes);
|
|
23
|
+
return agent;
|
|
24
|
+
}, stream).closed;
|
|
25
|
+
} finally {
|
|
26
|
+
agent?.dispose();
|
|
27
|
+
session?.thread.detachFromCurrent();
|
|
28
|
+
await session?.thread.clearAndReleaseLock();
|
|
29
|
+
if (cleanup) await cleanup();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//#endregion
|
|
33
|
+
export { runAcpServer };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","names":[],"sources":["../../src/acp/server.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { Readable, Writable } from 'node:stream';\nimport { AgentSideConnection, ndJsonStream } from '@agentclientprotocol/sdk';\nimport type { AgentController, AgentControllerMode, Session } from '@mastra/core/agent-controller';\nimport { MastraCodeAcpAgent } from './agent.js';\n\n/**\n * Run the ACP server over stdio.\n * This sets up the JSON-RPC stream and keeps the process alive until the client disconnects.\n */\nexport async function runAcpServer(\n controller: AgentController,\n modes: AgentControllerMode[],\n cleanup?: () => Promise<void>,\n): Promise<void> {\n // Create the ndJSON stream from stdin/stdout\n const input = Readable.toWeb(process.stdin) as ReadableStream<Uint8Array>;\n const output = Writable.toWeb(process.stdout) as WritableStream<Uint8Array>;\n const stream = ndJsonStream(output, input);\n let session: Session | undefined;\n let agent: MastraCodeAcpAgent | undefined;\n\n // Handle cleanup on disconnect (success or error)\n try {\n session = await controller.createSession({\n id: `acp-${randomUUID()}`,\n ownerId: `acp-owner-${randomUUID()}`,\n });\n const activeSession = session;\n\n // Create the agent-side connection\n const connection = new AgentSideConnection(conn => {\n agent = new MastraCodeAcpAgent(conn, controller, activeSession, modes);\n return agent;\n }, stream);\n\n await connection.closed;\n } finally {\n agent?.dispose();\n session?.thread.detachFromCurrent();\n await session?.thread.clearAndReleaseLock();\n if (cleanup) {\n await cleanup();\n }\n }\n}\n"],"mappings":";;;;;;;;;AAUA,eAAsB,aACpB,YACA,OACA,SACe;CAEf,MAAM,QAAQ,SAAS,MAAM,QAAQ,KAAK;CAE1C,MAAM,SAAS,aADA,SAAS,MAAM,QAAQ,MACL,GAAG,KAAK;CACzC,IAAI;CACJ,IAAI;CAGJ,IAAI;EACF,UAAU,MAAM,WAAW,cAAc;GACvC,IAAI,OAAO,WAAW;GACtB,SAAS,aAAa,WAAW;EACnC,CAAC;EACD,MAAM,gBAAgB;EAQtB,MAAM,IALiB,qBAAoB,SAAQ;GACjD,QAAQ,IAAI,mBAAmB,MAAM,YAAY,eAAe,KAAK;GACrE,OAAO;EACT,GAAG,MAEY,CAAC,CAAC;CACnB,UAAU;EACR,OAAO,QAAQ;EACf,SAAS,OAAO,kBAAkB;EAClC,MAAM,SAAS,OAAO,oBAAoB;EAC1C,IAAI,SACF,MAAM,QAAQ;CAElB;AACF"}
|
package/dist/acp.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acp.d.ts","sourceRoot":"","sources":["../src/acp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/acp.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { PromptSection } from './prompts/index.js';
|
|
2
|
+
/** A single measured contributor to the context window. */
|
|
3
|
+
export interface ContextAuditEntry {
|
|
4
|
+
id: string;
|
|
5
|
+
label: string;
|
|
6
|
+
/** Provenance: file path, server name, model id — whatever identifies the source. */
|
|
7
|
+
detail?: string;
|
|
8
|
+
tokens: number;
|
|
9
|
+
characters: number;
|
|
10
|
+
/** Share of the audit total, 0-100. */
|
|
11
|
+
percent: number;
|
|
12
|
+
}
|
|
13
|
+
/** A category of contributors (e.g. all agent instruction files). */
|
|
14
|
+
export interface ContextAuditGroup {
|
|
15
|
+
id: string;
|
|
16
|
+
label: string;
|
|
17
|
+
tokens: number;
|
|
18
|
+
/** Share of the audit total, 0-100. */
|
|
19
|
+
percent: number;
|
|
20
|
+
entries: ContextAuditEntry[];
|
|
21
|
+
/** Shown alongside the group when its numbers need qualifying. */
|
|
22
|
+
note?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface ContextAudit {
|
|
25
|
+
/** Context present before the first message: system prompt, skills, tools. */
|
|
26
|
+
startup: {
|
|
27
|
+
tokens: number;
|
|
28
|
+
percent: number;
|
|
29
|
+
groups: ContextAuditGroup[];
|
|
30
|
+
};
|
|
31
|
+
/** Context accumulated by the session: conversation and observation memory. */
|
|
32
|
+
accumulated: {
|
|
33
|
+
tokens: number;
|
|
34
|
+
percent: number;
|
|
35
|
+
groups: ContextAuditGroup[];
|
|
36
|
+
};
|
|
37
|
+
/** Startup + accumulated. Percentages elsewhere are shares of this. */
|
|
38
|
+
totalTokens: number;
|
|
39
|
+
/** Estimated rather than measured: token counts come from a heuristic estimator. */
|
|
40
|
+
estimated: true;
|
|
41
|
+
}
|
|
42
|
+
/** A tool definition as advertised to the model. */
|
|
43
|
+
export interface ContextAuditTool {
|
|
44
|
+
name: string;
|
|
45
|
+
description?: string;
|
|
46
|
+
/** JSON schema (or any serializable shape) sent with the definition. */
|
|
47
|
+
parameters?: unknown;
|
|
48
|
+
/** MCP server that provides the tool, when it is not built in. */
|
|
49
|
+
server?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface ContextAuditInput {
|
|
52
|
+
/** Labeled sections of the assembled system prompt. */
|
|
53
|
+
promptSections?: PromptSection[];
|
|
54
|
+
/** Labeled sections of the per-request dynamic instructions. */
|
|
55
|
+
instructionSections?: PromptSection[];
|
|
56
|
+
/** The skills catalog exactly as injected into the system message. */
|
|
57
|
+
skillsCatalog?: string;
|
|
58
|
+
/** Tool definitions advertised to the model. */
|
|
59
|
+
tools?: ContextAuditTool[];
|
|
60
|
+
/**
|
|
61
|
+
* Observation memory currently occupying the context window, either as the
|
|
62
|
+
* injected text or as a token count reported by the memory subsystem.
|
|
63
|
+
*
|
|
64
|
+
* Only observations that are actually in the context belong here.
|
|
65
|
+
* Observations that merely sit in storage cost nothing until recalled, and
|
|
66
|
+
* conflating the two is exactly the confusion this audit exists to resolve.
|
|
67
|
+
*/
|
|
68
|
+
injectedObservations?: string | {
|
|
69
|
+
tokens: number;
|
|
70
|
+
};
|
|
71
|
+
/** Prompt tokens the provider reported for the most recent request. */
|
|
72
|
+
conversation?: {
|
|
73
|
+
promptTokens?: number;
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Build a context audit from already-collected context.
|
|
78
|
+
*
|
|
79
|
+
* Percentages are shares of the audited total, not of the model's context
|
|
80
|
+
* window: window size is not exposed by the model registry, and inventing one
|
|
81
|
+
* would make every number wrong for models that disagree with the guess.
|
|
82
|
+
*/
|
|
83
|
+
export declare function buildContextAudit(input: ContextAuditInput): ContextAudit;
|
|
84
|
+
//# sourceMappingURL=context-audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-audit.d.ts","sourceRoot":"","sources":["../../src/agents/context-audit.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,2DAA2D;AAC3D,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qEAAqE;AACrE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,8EAA8E;IAC9E,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,iBAAiB,EAAE,CAAA;KAAE,CAAC;IAC1E,+EAA+E;IAC/E,WAAW,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,iBAAiB,EAAE,CAAA;KAAE,CAAC;IAC9E,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,oFAAoF;IACpF,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,oDAAoD;AACpD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,gEAAgE;IAChE,mBAAmB,CAAC,EAAE,aAAa,EAAE,CAAC;IACtC,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC3B;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,uEAAuE;IACvE,YAAY,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AA2CD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAsFxE"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { tokenEstimate } from "../utils/token-estimator.js";
|
|
2
|
+
//#region src/agents/context-audit.ts
|
|
3
|
+
/**
|
|
4
|
+
* Context audit — accounts for what occupies the model's context window.
|
|
5
|
+
*
|
|
6
|
+
* Deliberately pure: callers collect the real strings (prompt sections, the
|
|
7
|
+
* injected skills catalog, tool definitions) and this module only measures and
|
|
8
|
+
* groups them. That keeps the audit honest — it reports on the same text the
|
|
9
|
+
* model receives rather than a description of it — and keeps it testable
|
|
10
|
+
* without a live session.
|
|
11
|
+
*
|
|
12
|
+
* Nothing here reads file contents or secrets: entries carry labels, origins
|
|
13
|
+
* and sizes only, never the underlying text, so an audit can be shown or
|
|
14
|
+
* pasted without leaking whatever the context happens to contain.
|
|
15
|
+
*/
|
|
16
|
+
function measure(id, label, content, detail) {
|
|
17
|
+
return {
|
|
18
|
+
id,
|
|
19
|
+
label,
|
|
20
|
+
detail,
|
|
21
|
+
tokens: tokenEstimate(content),
|
|
22
|
+
characters: content.length,
|
|
23
|
+
percent: 0
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function sectionEntries(sections, prefix) {
|
|
27
|
+
return sections.filter((section) => section.content.length > 0).map((section) => measure(`${prefix}:${section.id}`, section.label, section.content, section.detail));
|
|
28
|
+
}
|
|
29
|
+
function group(id, label, entries, note) {
|
|
30
|
+
if (entries.length === 0) return void 0;
|
|
31
|
+
return {
|
|
32
|
+
id,
|
|
33
|
+
label,
|
|
34
|
+
tokens: entries.reduce((sum, entry) => sum + entry.tokens, 0),
|
|
35
|
+
percent: 0,
|
|
36
|
+
entries,
|
|
37
|
+
note
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Group tool definitions by their provider so a chatty MCP server is visible as
|
|
42
|
+
* one line rather than fifty. Per-tool entries stay available underneath.
|
|
43
|
+
*/
|
|
44
|
+
function toolEntries(tools) {
|
|
45
|
+
return tools.map((tool) => {
|
|
46
|
+
const serialized = [
|
|
47
|
+
tool.name,
|
|
48
|
+
tool.description ?? "",
|
|
49
|
+
tool.parameters ? JSON.stringify(tool.parameters) : ""
|
|
50
|
+
].join("\n");
|
|
51
|
+
return measure(`tool:${tool.server ?? "built-in"}:${tool.name}`, tool.name, serialized, tool.server);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
function withPercent(items, total) {
|
|
55
|
+
for (const item of items) item.percent = total > 0 ? item.tokens / total * 100 : 0;
|
|
56
|
+
return items;
|
|
57
|
+
}
|
|
58
|
+
function sumTokens(groups) {
|
|
59
|
+
return groups.reduce((sum, entry) => sum + entry.tokens, 0);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Build a context audit from already-collected context.
|
|
63
|
+
*
|
|
64
|
+
* Percentages are shares of the audited total, not of the model's context
|
|
65
|
+
* window: window size is not exposed by the model registry, and inventing one
|
|
66
|
+
* would make every number wrong for models that disagree with the guess.
|
|
67
|
+
*/
|
|
68
|
+
function buildContextAudit(input) {
|
|
69
|
+
const startupGroups = [
|
|
70
|
+
group("system-prompt", "System prompt", sectionEntries(input.promptSections ?? [], "prompt")),
|
|
71
|
+
group("dynamic-instructions", "Dynamic instructions", sectionEntries(input.instructionSections ?? [], "dynamic")),
|
|
72
|
+
group("skills", "Skills catalog", input.skillsCatalog ? [measure("skills:catalog", "Available skills", input.skillsCatalog)] : [], "Skill instructions are loaded on demand and are not counted here."),
|
|
73
|
+
group("tools", "Tool definitions", toolEntries(input.tools ?? []))
|
|
74
|
+
].filter((entry) => entry !== void 0);
|
|
75
|
+
const observationEntries = [];
|
|
76
|
+
if (typeof input.injectedObservations === "string") observationEntries.push(measure("observations:injected", "Injected into context", input.injectedObservations));
|
|
77
|
+
else if (input.injectedObservations && input.injectedObservations.tokens > 0) observationEntries.push({
|
|
78
|
+
id: "observations:injected",
|
|
79
|
+
label: "Injected into context",
|
|
80
|
+
tokens: input.injectedObservations.tokens,
|
|
81
|
+
characters: 0,
|
|
82
|
+
percent: 0
|
|
83
|
+
});
|
|
84
|
+
const startupTokens = sumTokens(startupGroups);
|
|
85
|
+
const injectedObservationTokens = observationEntries.reduce((sum, entry) => sum + entry.tokens, 0);
|
|
86
|
+
const promptTokens = input.conversation?.promptTokens ?? 0;
|
|
87
|
+
const conversationTokens = Math.max(0, promptTokens - startupTokens - injectedObservationTokens);
|
|
88
|
+
const accumulatedGroups = [group("conversation", "Conversation", promptTokens > 0 ? [{
|
|
89
|
+
id: "conversation:messages",
|
|
90
|
+
label: "Messages, tool calls and results",
|
|
91
|
+
tokens: conversationTokens,
|
|
92
|
+
characters: 0,
|
|
93
|
+
percent: 0
|
|
94
|
+
}] : [], `Derived from the provider's last request (~${promptTokens} prompt tokens) minus the startup context measured above.`), group("observations", "Observation memory", observationEntries, "Observations kept only in storage are not counted: they cost nothing until recalled.")].filter((entry) => entry !== void 0);
|
|
95
|
+
const accumulatedTokens = sumTokens(accumulatedGroups);
|
|
96
|
+
const totalTokens = startupTokens + accumulatedTokens;
|
|
97
|
+
for (const entry of [...startupGroups, ...accumulatedGroups]) withPercent(entry.entries, totalTokens);
|
|
98
|
+
withPercent(startupGroups, totalTokens);
|
|
99
|
+
withPercent(accumulatedGroups, totalTokens);
|
|
100
|
+
return {
|
|
101
|
+
startup: {
|
|
102
|
+
tokens: startupTokens,
|
|
103
|
+
percent: totalTokens > 0 ? startupTokens / totalTokens * 100 : 0,
|
|
104
|
+
groups: startupGroups
|
|
105
|
+
},
|
|
106
|
+
accumulated: {
|
|
107
|
+
tokens: accumulatedTokens,
|
|
108
|
+
percent: totalTokens > 0 ? accumulatedTokens / totalTokens * 100 : 0,
|
|
109
|
+
groups: accumulatedGroups
|
|
110
|
+
},
|
|
111
|
+
totalTokens,
|
|
112
|
+
estimated: true
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
//#endregion
|
|
116
|
+
export { buildContextAudit };
|
|
117
|
+
|
|
118
|
+
//# sourceMappingURL=context-audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-audit.js","names":[],"sources":["../../src/agents/context-audit.ts"],"sourcesContent":["/**\n * Context audit — accounts for what occupies the model's context window.\n *\n * Deliberately pure: callers collect the real strings (prompt sections, the\n * injected skills catalog, tool definitions) and this module only measures and\n * groups them. That keeps the audit honest — it reports on the same text the\n * model receives rather than a description of it — and keeps it testable\n * without a live session.\n *\n * Nothing here reads file contents or secrets: entries carry labels, origins\n * and sizes only, never the underlying text, so an audit can be shown or\n * pasted without leaking whatever the context happens to contain.\n */\nimport { tokenEstimate } from '../utils/token-estimator.js';\nimport type { PromptSection } from './prompts/index.js';\n\n/** A single measured contributor to the context window. */\nexport interface ContextAuditEntry {\n id: string;\n label: string;\n /** Provenance: file path, server name, model id — whatever identifies the source. */\n detail?: string;\n tokens: number;\n characters: number;\n /** Share of the audit total, 0-100. */\n percent: number;\n}\n\n/** A category of contributors (e.g. all agent instruction files). */\nexport interface ContextAuditGroup {\n id: string;\n label: string;\n tokens: number;\n /** Share of the audit total, 0-100. */\n percent: number;\n entries: ContextAuditEntry[];\n /** Shown alongside the group when its numbers need qualifying. */\n note?: string;\n}\n\nexport interface ContextAudit {\n /** Context present before the first message: system prompt, skills, tools. */\n startup: { tokens: number; percent: number; groups: ContextAuditGroup[] };\n /** Context accumulated by the session: conversation and observation memory. */\n accumulated: { tokens: number; percent: number; groups: ContextAuditGroup[] };\n /** Startup + accumulated. Percentages elsewhere are shares of this. */\n totalTokens: number;\n /** Estimated rather than measured: token counts come from a heuristic estimator. */\n estimated: true;\n}\n\n/** A tool definition as advertised to the model. */\nexport interface ContextAuditTool {\n name: string;\n description?: string;\n /** JSON schema (or any serializable shape) sent with the definition. */\n parameters?: unknown;\n /** MCP server that provides the tool, when it is not built in. */\n server?: string;\n}\n\nexport interface ContextAuditInput {\n /** Labeled sections of the assembled system prompt. */\n promptSections?: PromptSection[];\n /** Labeled sections of the per-request dynamic instructions. */\n instructionSections?: PromptSection[];\n /** The skills catalog exactly as injected into the system message. */\n skillsCatalog?: string;\n /** Tool definitions advertised to the model. */\n tools?: ContextAuditTool[];\n /**\n * Observation memory currently occupying the context window, either as the\n * injected text or as a token count reported by the memory subsystem.\n *\n * Only observations that are actually in the context belong here.\n * Observations that merely sit in storage cost nothing until recalled, and\n * conflating the two is exactly the confusion this audit exists to resolve.\n */\n injectedObservations?: string | { tokens: number };\n /** Prompt tokens the provider reported for the most recent request. */\n conversation?: { promptTokens?: number };\n}\n\nfunction measure(id: string, label: string, content: string, detail?: string): ContextAuditEntry {\n return { id, label, detail, tokens: tokenEstimate(content), characters: content.length, percent: 0 };\n}\n\nfunction sectionEntries(sections: PromptSection[], prefix: string): ContextAuditEntry[] {\n return sections\n .filter(section => section.content.length > 0)\n .map(section => measure(`${prefix}:${section.id}`, section.label, section.content, section.detail));\n}\n\nfunction group(id: string, label: string, entries: ContextAuditEntry[], note?: string): ContextAuditGroup | undefined {\n if (entries.length === 0) return undefined;\n return { id, label, tokens: entries.reduce((sum, entry) => sum + entry.tokens, 0), percent: 0, entries, note };\n}\n\n/**\n * Group tool definitions by their provider so a chatty MCP server is visible as\n * one line rather than fifty. Per-tool entries stay available underneath.\n */\nfunction toolEntries(tools: ContextAuditTool[]): ContextAuditEntry[] {\n return tools.map(tool => {\n // Approximates the serialized definition: name, description and schema are\n // what a provider sends, and the exact wire framing is provider-specific.\n const serialized = [tool.name, tool.description ?? '', tool.parameters ? JSON.stringify(tool.parameters) : ''].join(\n '\\n',\n );\n return measure(`tool:${tool.server ?? 'built-in'}:${tool.name}`, tool.name, serialized, tool.server);\n });\n}\n\nfunction withPercent<T extends { tokens: number; percent: number }>(items: T[], total: number): T[] {\n for (const item of items) {\n item.percent = total > 0 ? (item.tokens / total) * 100 : 0;\n }\n return items;\n}\n\nfunction sumTokens(groups: ContextAuditGroup[]): number {\n return groups.reduce((sum, entry) => sum + entry.tokens, 0);\n}\n\n/**\n * Build a context audit from already-collected context.\n *\n * Percentages are shares of the audited total, not of the model's context\n * window: window size is not exposed by the model registry, and inventing one\n * would make every number wrong for models that disagree with the guess.\n */\nexport function buildContextAudit(input: ContextAuditInput): ContextAudit {\n const startupGroups = [\n group('system-prompt', 'System prompt', sectionEntries(input.promptSections ?? [], 'prompt')),\n group('dynamic-instructions', 'Dynamic instructions', sectionEntries(input.instructionSections ?? [], 'dynamic')),\n group(\n 'skills',\n 'Skills catalog',\n input.skillsCatalog ? [measure('skills:catalog', 'Available skills', input.skillsCatalog)] : [],\n 'Skill instructions are loaded on demand and are not counted here.',\n ),\n group('tools', 'Tool definitions', toolEntries(input.tools ?? [])),\n ].filter((entry): entry is ContextAuditGroup => entry !== undefined);\n\n const observationEntries: ContextAuditEntry[] = [];\n if (typeof input.injectedObservations === 'string') {\n observationEntries.push(measure('observations:injected', 'Injected into context', input.injectedObservations));\n } else if (input.injectedObservations && input.injectedObservations.tokens > 0) {\n observationEntries.push({\n id: 'observations:injected',\n label: 'Injected into context',\n tokens: input.injectedObservations.tokens,\n characters: 0,\n percent: 0,\n });\n }\n\n const startupTokens = sumTokens(startupGroups);\n const injectedObservationTokens = observationEntries.reduce((sum, entry) => sum + entry.tokens, 0);\n\n // The provider's prompt token count covers the whole request — startup\n // context and injected observations included — so the conversation's own\n // contribution is what is left after subtracting everything already\n // accounted for. Using the raw prompt count would double-count all of it.\n const promptTokens = input.conversation?.promptTokens ?? 0;\n const conversationTokens = Math.max(0, promptTokens - startupTokens - injectedObservationTokens);\n const conversationEntries: ContextAuditEntry[] =\n promptTokens > 0\n ? [\n {\n id: 'conversation:messages',\n label: 'Messages, tool calls and results',\n tokens: conversationTokens,\n characters: 0,\n percent: 0,\n },\n ]\n : [];\n\n const accumulatedGroups = [\n group(\n 'conversation',\n 'Conversation',\n conversationEntries,\n `Derived from the provider's last request (~${promptTokens} prompt tokens) minus the startup context measured above.`,\n ),\n group(\n 'observations',\n 'Observation memory',\n observationEntries,\n 'Observations kept only in storage are not counted: they cost nothing until recalled.',\n ),\n ].filter((entry): entry is ContextAuditGroup => entry !== undefined);\n\n const accumulatedTokens = sumTokens(accumulatedGroups);\n const totalTokens = startupTokens + accumulatedTokens;\n\n for (const entry of [...startupGroups, ...accumulatedGroups]) {\n withPercent(entry.entries, totalTokens);\n }\n withPercent(startupGroups, totalTokens);\n withPercent(accumulatedGroups, totalTokens);\n\n return {\n startup: {\n tokens: startupTokens,\n percent: totalTokens > 0 ? (startupTokens / totalTokens) * 100 : 0,\n groups: startupGroups,\n },\n accumulated: {\n tokens: accumulatedTokens,\n percent: totalTokens > 0 ? (accumulatedTokens / totalTokens) * 100 : 0,\n groups: accumulatedGroups,\n },\n totalTokens,\n estimated: true,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;AAmFA,SAAS,QAAQ,IAAY,OAAe,SAAiB,QAAoC;CAC/F,OAAO;EAAE;EAAI;EAAO;EAAQ,QAAQ,cAAc,OAAO;EAAG,YAAY,QAAQ;EAAQ,SAAS;CAAE;AACrG;AAEA,SAAS,eAAe,UAA2B,QAAqC;CACtF,OAAO,SACJ,QAAO,YAAW,QAAQ,QAAQ,SAAS,CAAC,CAAC,CAC7C,KAAI,YAAW,QAAQ,GAAG,OAAO,GAAG,QAAQ,MAAM,QAAQ,OAAO,QAAQ,SAAS,QAAQ,MAAM,CAAC;AACtG;AAEA,SAAS,MAAM,IAAY,OAAe,SAA8B,MAA8C;CACpH,IAAI,QAAQ,WAAW,GAAG,OAAO,KAAA;CACjC,OAAO;EAAE;EAAI;EAAO,QAAQ,QAAQ,QAAQ,KAAK,UAAU,MAAM,MAAM,QAAQ,CAAC;EAAG,SAAS;EAAG;EAAS;CAAK;AAC/G;;;;;AAMA,SAAS,YAAY,OAAgD;CACnE,OAAO,MAAM,KAAI,SAAQ;EAGvB,MAAM,aAAa;GAAC,KAAK;GAAM,KAAK,eAAe;GAAI,KAAK,aAAa,KAAK,UAAU,KAAK,UAAU,IAAI;EAAE,CAAC,CAAC,KAC7G,IACF;EACA,OAAO,QAAQ,QAAQ,KAAK,UAAU,WAAW,GAAG,KAAK,QAAQ,KAAK,MAAM,YAAY,KAAK,MAAM;CACrG,CAAC;AACH;AAEA,SAAS,YAA2D,OAAY,OAAoB;CAClG,KAAK,MAAM,QAAQ,OACjB,KAAK,UAAU,QAAQ,IAAK,KAAK,SAAS,QAAS,MAAM;CAE3D,OAAO;AACT;AAEA,SAAS,UAAU,QAAqC;CACtD,OAAO,OAAO,QAAQ,KAAK,UAAU,MAAM,MAAM,QAAQ,CAAC;AAC5D;;;;;;;;AASA,SAAgB,kBAAkB,OAAwC;CACxE,MAAM,gBAAgB;EACpB,MAAM,iBAAiB,iBAAiB,eAAe,MAAM,kBAAkB,CAAC,GAAG,QAAQ,CAAC;EAC5F,MAAM,wBAAwB,wBAAwB,eAAe,MAAM,uBAAuB,CAAC,GAAG,SAAS,CAAC;EAChH,MACE,UACA,kBACA,MAAM,gBAAgB,CAAC,QAAQ,kBAAkB,oBAAoB,MAAM,aAAa,CAAC,IAAI,CAAC,GAC9F,mEACF;EACA,MAAM,SAAS,oBAAoB,YAAY,MAAM,SAAS,CAAC,CAAC,CAAC;CACnE,CAAC,CAAC,QAAQ,UAAsC,UAAU,KAAA,CAAS;CAEnE,MAAM,qBAA0C,CAAC;CACjD,IAAI,OAAO,MAAM,yBAAyB,UACxC,mBAAmB,KAAK,QAAQ,yBAAyB,yBAAyB,MAAM,oBAAoB,CAAC;MACxG,IAAI,MAAM,wBAAwB,MAAM,qBAAqB,SAAS,GAC3E,mBAAmB,KAAK;EACtB,IAAI;EACJ,OAAO;EACP,QAAQ,MAAM,qBAAqB;EACnC,YAAY;EACZ,SAAS;CACX,CAAC;CAGH,MAAM,gBAAgB,UAAU,aAAa;CAC7C,MAAM,4BAA4B,mBAAmB,QAAQ,KAAK,UAAU,MAAM,MAAM,QAAQ,CAAC;CAMjG,MAAM,eAAe,MAAM,cAAc,gBAAgB;CACzD,MAAM,qBAAqB,KAAK,IAAI,GAAG,eAAe,gBAAgB,yBAAyB;CAc/F,MAAM,oBAAoB,CACxB,MACE,gBACA,gBAfF,eAAe,IACX,CACE;EACE,IAAI;EACJ,OAAO;EACP,QAAQ;EACR,YAAY;EACZ,SAAS;CACX,CACF,IACA,CAAC,GAOH,8CAA8C,aAAa,0DAC7D,GACA,MACE,gBACA,sBACA,oBACA,sFACF,CACF,CAAC,CAAC,QAAQ,UAAsC,UAAU,KAAA,CAAS;CAEnE,MAAM,oBAAoB,UAAU,iBAAiB;CACrD,MAAM,cAAc,gBAAgB;CAEpC,KAAK,MAAM,SAAS,CAAC,GAAG,eAAe,GAAG,iBAAiB,GACzD,YAAY,MAAM,SAAS,WAAW;CAExC,YAAY,eAAe,WAAW;CACtC,YAAY,mBAAmB,WAAW;CAE1C,OAAO;EACL,SAAS;GACP,QAAQ;GACR,SAAS,cAAc,IAAK,gBAAgB,cAAe,MAAM;GACjE,QAAQ;EACV;EACA,aAAa;GACX,QAAQ;GACR,SAAS,cAAc,IAAK,oBAAoB,cAAe,MAAM;GACrE,QAAQ;EACV;EACA;EACA,WAAW;CACb;AACF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-tenant credential resolution seam for deployed (multi-user) servers.
|
|
3
|
+
*
|
|
4
|
+
* Locally, model resolution reads the server-global file-backed `AuthStorage`.
|
|
5
|
+
* A deployed web host registers a {@link CredentialStoreProvider} at boot; from
|
|
6
|
+
* then on `resolveModel` derives the calling tenant from the request context
|
|
7
|
+
* (the web auth gate stashes the authenticated user under the `user` key) and
|
|
8
|
+
* resolves credentials through the tenant's own store — user credentials over
|
|
9
|
+
* org credentials over server env vars, with OAuth refresh owned by the store.
|
|
10
|
+
*
|
|
11
|
+
* When no provider is registered (TUI, local web), everything falls through to
|
|
12
|
+
* the existing global behavior unchanged.
|
|
13
|
+
*/
|
|
14
|
+
import type { RequestContext } from '@mastra/core/request-context';
|
|
15
|
+
import type { CredentialStore } from '../auth/types.js';
|
|
16
|
+
/** The identity a credential lookup is scoped to. */
|
|
17
|
+
export interface CredentialTenant {
|
|
18
|
+
/** Org tenant; absent for personal accounts (store impls may synthesize one). */
|
|
19
|
+
orgId?: string;
|
|
20
|
+
/** Stable user id from the web auth adapter. */
|
|
21
|
+
userId: string;
|
|
22
|
+
/**
|
|
23
|
+
* Resolve org-shared credentials over the user's personal ones. Set by
|
|
24
|
+
* trusted server code for automated (factory) runs so they ride the org's
|
|
25
|
+
* shared keys first and only fall back to the acting user's credentials.
|
|
26
|
+
*/
|
|
27
|
+
orgFirst?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Returns a tenant-scoped {@link CredentialStore}, or `undefined` to fall back
|
|
31
|
+
* to the global store (e.g. tenant storage temporarily unavailable). Must be
|
|
32
|
+
* synchronous — implementations serve from a primed snapshot and do
|
|
33
|
+
* authoritative async work inside `getApiKey`.
|
|
34
|
+
*/
|
|
35
|
+
export type CredentialStoreProvider = (tenant: CredentialTenant) => CredentialStore | undefined;
|
|
36
|
+
/** Register (or clear) the tenant credential store provider. Deployed-web only. */
|
|
37
|
+
export declare function setCredentialStoreProvider(provider: CredentialStoreProvider | undefined): void;
|
|
38
|
+
/**
|
|
39
|
+
* Whether a tenant provider is registered. Used to disable the
|
|
40
|
+
* `loadStoredApiKeysIntoEnv` side-channel in deployed mode — per-tenant
|
|
41
|
+
* credentials must never leak into process-global env vars.
|
|
42
|
+
*/
|
|
43
|
+
export declare function hasCredentialStoreProvider(): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Derive the calling tenant from a request context, if an authenticated web
|
|
46
|
+
* user was stashed on it. Mirrors the web layer's stable-id resolution
|
|
47
|
+
* (`workosId` falling back to the provider `id`).
|
|
48
|
+
*
|
|
49
|
+
* The value under `user` is whatever the active auth provider's
|
|
50
|
+
* `authenticateToken` returned, so its shape follows the provider: a flat user
|
|
51
|
+
* (WorkOS) or a `{ session, user }` wrapper (better-auth). Reading only the
|
|
52
|
+
* flat shape resolves no tenant at all for the wrapper, which in deployed mode
|
|
53
|
+
* fails closed to an empty credential store.
|
|
54
|
+
*/
|
|
55
|
+
export declare function resolveTenantFromRequestContext(requestContext?: RequestContext): CredentialTenant | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* Resolve the credential store for a request. Local mode returns `undefined`
|
|
58
|
+
* and keeps the global `AuthStorage` behavior. Once deployed web registers a
|
|
59
|
+
* provider, missing tenant identity or unavailable tenant storage fails closed
|
|
60
|
+
* through an empty store that also disables process-environment fallback.
|
|
61
|
+
*/
|
|
62
|
+
export declare function resolveCredentialStore(requestContext?: RequestContext): CredentialStore | undefined;
|
|
63
|
+
//# sourceMappingURL=credential-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-resolver.d.ts","sourceRoot":"","sources":["../../src/agents/credential-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAC/B,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,gBAAgB,KAAK,eAAe,GAAG,SAAS,CAAC;AAkBhG,mFAAmF;AACnF,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,uBAAuB,GAAG,SAAS,GAAG,IAAI,CAE9F;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD;AAqCD;;;;;;;;;;GAUG;AACH,wBAAgB,+BAA+B,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,gBAAgB,GAAG,SAAS,CAsB7G;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,eAAe,GAAG,SAAS,CAsBnG"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
//#region src/agents/credential-resolver.ts
|
|
2
|
+
let credentialStoreProvider;
|
|
3
|
+
const unavailableTenantCredentialStore = {
|
|
4
|
+
allowEnvironmentFallback: false,
|
|
5
|
+
reload() {},
|
|
6
|
+
get() {},
|
|
7
|
+
getStoredApiKey() {},
|
|
8
|
+
async getApiKey() {}
|
|
9
|
+
};
|
|
10
|
+
/** Register (or clear) the tenant credential store provider. Deployed-web only. */
|
|
11
|
+
function setCredentialStoreProvider(provider) {
|
|
12
|
+
credentialStoreProvider = provider;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Whether a tenant provider is registered. Used to disable the
|
|
16
|
+
* `loadStoredApiKeysIntoEnv` side-channel in deployed mode — per-tenant
|
|
17
|
+
* credentials must never leak into process-global env vars.
|
|
18
|
+
*/
|
|
19
|
+
function hasCredentialStoreProvider() {
|
|
20
|
+
return credentialStoreProvider !== void 0;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Whether the request context belongs to a run on a factory-owned session.
|
|
24
|
+
*
|
|
25
|
+
* The agent controller stamps the session's state onto the request context
|
|
26
|
+
* under `controller`, and only trusted factory server code ever writes
|
|
27
|
+
* `factoryProjectId` into session state (board-run creation) — interactive
|
|
28
|
+
* chat sessions never carry it. Runs on such sessions resolve credentials
|
|
29
|
+
* org > user regardless of who sent the message: a board run continued
|
|
30
|
+
* interactively, or a model switch inside it, is still org work.
|
|
31
|
+
*/
|
|
32
|
+
function isFactorySessionContext(requestContext) {
|
|
33
|
+
const controller = requestContext?.get("controller");
|
|
34
|
+
if (!controller || typeof controller !== "object") return false;
|
|
35
|
+
const factoryProjectId = controller.state?.factoryProjectId;
|
|
36
|
+
return typeof factoryProjectId === "string" && factoryProjectId.length > 0;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Derive the calling tenant from a request context, if an authenticated web
|
|
40
|
+
* user was stashed on it. Mirrors the web layer's stable-id resolution
|
|
41
|
+
* (`workosId` falling back to the provider `id`).
|
|
42
|
+
*
|
|
43
|
+
* The value under `user` is whatever the active auth provider's
|
|
44
|
+
* `authenticateToken` returned, so its shape follows the provider: a flat user
|
|
45
|
+
* (WorkOS) or a `{ session, user }` wrapper (better-auth). Reading only the
|
|
46
|
+
* flat shape resolves no tenant at all for the wrapper, which in deployed mode
|
|
47
|
+
* fails closed to an empty credential store.
|
|
48
|
+
*/
|
|
49
|
+
function resolveTenantFromRequestContext(requestContext) {
|
|
50
|
+
const raw = requestContext?.get("user");
|
|
51
|
+
if (!raw || typeof raw !== "object") return void 0;
|
|
52
|
+
const wrapped = Boolean(raw.user && typeof raw.user === "object" && raw.session && typeof raw.session === "object");
|
|
53
|
+
const user = wrapped ? raw.user : raw;
|
|
54
|
+
const orgId = wrapped ? raw.session?.activeOrganizationId : user.organizationId;
|
|
55
|
+
const userId = user.workosId ?? user.id;
|
|
56
|
+
if (typeof userId !== "string" || !userId) return void 0;
|
|
57
|
+
if (orgId !== void 0 && typeof orgId !== "string") return void 0;
|
|
58
|
+
const orgFirst = raw.orgFirstCredentials === true || user.orgFirstCredentials === true || isFactorySessionContext(requestContext);
|
|
59
|
+
return {
|
|
60
|
+
orgId,
|
|
61
|
+
userId,
|
|
62
|
+
...orgFirst ? { orgFirst } : {}
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Resolve the credential store for a request. Local mode returns `undefined`
|
|
67
|
+
* and keeps the global `AuthStorage` behavior. Once deployed web registers a
|
|
68
|
+
* provider, missing tenant identity or unavailable tenant storage fails closed
|
|
69
|
+
* through an empty store that also disables process-environment fallback.
|
|
70
|
+
*/
|
|
71
|
+
function resolveCredentialStore(requestContext) {
|
|
72
|
+
if (!credentialStoreProvider) return void 0;
|
|
73
|
+
const tenant = resolveTenantFromRequestContext(requestContext);
|
|
74
|
+
if (!tenant) {
|
|
75
|
+
const rawUser = requestContext?.get("user");
|
|
76
|
+
console.warn("[MastraCode] Tenant credential resolution failed closed", {
|
|
77
|
+
reason: rawUser === void 0 ? "missing-user-context" : "invalid-principal-shape",
|
|
78
|
+
hasRequestContext: requestContext !== void 0,
|
|
79
|
+
factorySession: isFactorySessionContext(requestContext)
|
|
80
|
+
});
|
|
81
|
+
return unavailableTenantCredentialStore;
|
|
82
|
+
}
|
|
83
|
+
const store = credentialStoreProvider(tenant);
|
|
84
|
+
if (!store) {
|
|
85
|
+
console.warn("[MastraCode] Tenant credential resolution failed closed", {
|
|
86
|
+
reason: "credential-store-unavailable",
|
|
87
|
+
hasOrganization: tenant.orgId !== void 0,
|
|
88
|
+
orgFirst: tenant.orgFirst === true
|
|
89
|
+
});
|
|
90
|
+
return unavailableTenantCredentialStore;
|
|
91
|
+
}
|
|
92
|
+
return store;
|
|
93
|
+
}
|
|
94
|
+
//#endregion
|
|
95
|
+
export { hasCredentialStoreProvider, resolveCredentialStore, resolveTenantFromRequestContext, setCredentialStoreProvider };
|
|
96
|
+
|
|
97
|
+
//# sourceMappingURL=credential-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-resolver.js","names":[],"sources":["../../src/agents/credential-resolver.ts"],"sourcesContent":["/**\n * Per-tenant credential resolution seam for deployed (multi-user) servers.\n *\n * Locally, model resolution reads the server-global file-backed `AuthStorage`.\n * A deployed web host registers a {@link CredentialStoreProvider} at boot; from\n * then on `resolveModel` derives the calling tenant from the request context\n * (the web auth gate stashes the authenticated user under the `user` key) and\n * resolves credentials through the tenant's own store — user credentials over\n * org credentials over server env vars, with OAuth refresh owned by the store.\n *\n * When no provider is registered (TUI, local web), everything falls through to\n * the existing global behavior unchanged.\n */\n\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { CredentialStore } from '../auth/types.js';\n\n/** The identity a credential lookup is scoped to. */\nexport interface CredentialTenant {\n /** Org tenant; absent for personal accounts (store impls may synthesize one). */\n orgId?: string;\n /** Stable user id from the web auth adapter. */\n userId: string;\n /**\n * Resolve org-shared credentials over the user's personal ones. Set by\n * trusted server code for automated (factory) runs so they ride the org's\n * shared keys first and only fall back to the acting user's credentials.\n */\n orgFirst?: boolean;\n}\n\n/**\n * Returns a tenant-scoped {@link CredentialStore}, or `undefined` to fall back\n * to the global store (e.g. tenant storage temporarily unavailable). Must be\n * synchronous — implementations serve from a primed snapshot and do\n * authoritative async work inside `getApiKey`.\n */\nexport type CredentialStoreProvider = (tenant: CredentialTenant) => CredentialStore | undefined;\n\nlet credentialStoreProvider: CredentialStoreProvider | undefined;\n\nconst unavailableTenantCredentialStore: CredentialStore = {\n allowEnvironmentFallback: false,\n reload() {},\n get() {\n return undefined;\n },\n getStoredApiKey() {\n return undefined;\n },\n async getApiKey() {\n return undefined;\n },\n};\n\n/** Register (or clear) the tenant credential store provider. Deployed-web only. */\nexport function setCredentialStoreProvider(provider: CredentialStoreProvider | undefined): void {\n credentialStoreProvider = provider;\n}\n\n/**\n * Whether a tenant provider is registered. Used to disable the\n * `loadStoredApiKeysIntoEnv` side-channel in deployed mode — per-tenant\n * credentials must never leak into process-global env vars.\n */\nexport function hasCredentialStoreProvider(): boolean {\n return credentialStoreProvider !== undefined;\n}\n\n/** Shape the web auth gate stashes on the request context under `user`. */\ninterface RequestContextUser {\n workosId?: string;\n id?: string;\n organizationId?: string;\n /** Trusted server code marks automated runs to resolve org > user credentials. */\n orgFirstCredentials?: boolean;\n}\n\n/**\n * Session-shaped `authenticateToken` results (better-auth) arrive as a wrapper\n * whose active org lives on the session half rather than on the user.\n */\ninterface RequestContextSession {\n user?: RequestContextUser;\n session?: { activeOrganizationId?: string };\n}\n\n/**\n * Whether the request context belongs to a run on a factory-owned session.\n *\n * The agent controller stamps the session's state onto the request context\n * under `controller`, and only trusted factory server code ever writes\n * `factoryProjectId` into session state (board-run creation) — interactive\n * chat sessions never carry it. Runs on such sessions resolve credentials\n * org > user regardless of who sent the message: a board run continued\n * interactively, or a model switch inside it, is still org work.\n */\nfunction isFactorySessionContext(requestContext?: RequestContext): boolean {\n const controller = requestContext?.get('controller') as { state?: { factoryProjectId?: unknown } } | undefined;\n if (!controller || typeof controller !== 'object') return false;\n const factoryProjectId = controller.state?.factoryProjectId;\n return typeof factoryProjectId === 'string' && factoryProjectId.length > 0;\n}\n\n/**\n * Derive the calling tenant from a request context, if an authenticated web\n * user was stashed on it. Mirrors the web layer's stable-id resolution\n * (`workosId` falling back to the provider `id`).\n *\n * The value under `user` is whatever the active auth provider's\n * `authenticateToken` returned, so its shape follows the provider: a flat user\n * (WorkOS) or a `{ session, user }` wrapper (better-auth). Reading only the\n * flat shape resolves no tenant at all for the wrapper, which in deployed mode\n * fails closed to an empty credential store.\n */\nexport function resolveTenantFromRequestContext(requestContext?: RequestContext): CredentialTenant | undefined {\n const raw = requestContext?.get('user') as (RequestContextUser & RequestContextSession) | undefined;\n if (!raw || typeof raw !== 'object') return undefined;\n\n // Precedence matches `toFactoryAuthUser` in `@mastra/factory`: a wrapper's org\n // comes from the session half only, never from the inner user. The two parsers\n // cannot share code across the package boundary, so they must agree by rule.\n const wrapped = Boolean(raw.user && typeof raw.user === 'object' && raw.session && typeof raw.session === 'object');\n const user = wrapped ? (raw.user as RequestContextUser) : raw;\n const orgId = wrapped ? raw.session?.activeOrganizationId : user.organizationId;\n const userId = user.workosId ?? user.id;\n // The slot holds whatever the provider returned, so the declared string\n // types are hopes, not guarantees. A non-string id must refuse the tenant\n // (fail closed), not flow onward as a mistyped key.\n if (typeof userId !== 'string' || !userId) return undefined;\n if (orgId !== undefined && typeof orgId !== 'string') return undefined;\n // Only an exact `true` flips precedence — anything else keeps user > org.\n // Server code stamps the flag on the stashed value itself, so read it from\n // the top level as well as the unwrapped user (better-auth wrapper shape).\n const orgFirst =\n raw.orgFirstCredentials === true || user.orgFirstCredentials === true || isFactorySessionContext(requestContext);\n return { orgId, userId, ...(orgFirst ? { orgFirst } : {}) };\n}\n\n/**\n * Resolve the credential store for a request. Local mode returns `undefined`\n * and keeps the global `AuthStorage` behavior. Once deployed web registers a\n * provider, missing tenant identity or unavailable tenant storage fails closed\n * through an empty store that also disables process-environment fallback.\n */\nexport function resolveCredentialStore(requestContext?: RequestContext): CredentialStore | undefined {\n if (!credentialStoreProvider) return undefined;\n const tenant = resolveTenantFromRequestContext(requestContext);\n if (!tenant) {\n const rawUser = requestContext?.get('user');\n console.warn('[MastraCode] Tenant credential resolution failed closed', {\n reason: rawUser === undefined ? 'missing-user-context' : 'invalid-principal-shape',\n hasRequestContext: requestContext !== undefined,\n factorySession: isFactorySessionContext(requestContext),\n });\n return unavailableTenantCredentialStore;\n }\n const store = credentialStoreProvider(tenant);\n if (!store) {\n console.warn('[MastraCode] Tenant credential resolution failed closed', {\n reason: 'credential-store-unavailable',\n hasOrganization: tenant.orgId !== undefined,\n orgFirst: tenant.orgFirst === true,\n });\n return unavailableTenantCredentialStore;\n }\n return store;\n}\n"],"mappings":";AAuCA,IAAI;AAEJ,MAAM,mCAAoD;CACxD,0BAA0B;CAC1B,SAAS,CAAC;CACV,MAAM,CAEN;CACA,kBAAkB,CAElB;CACA,MAAM,YAAY,CAElB;AACF;;AAGA,SAAgB,2BAA2B,UAAqD;CAC9F,0BAA0B;AAC5B;;;;;;AAOA,SAAgB,6BAAsC;CACpD,OAAO,4BAA4B,KAAA;AACrC;;;;;;;;;;;AA8BA,SAAS,wBAAwB,gBAA0C;CACzE,MAAM,aAAa,gBAAgB,IAAI,YAAY;CACnD,IAAI,CAAC,cAAc,OAAO,eAAe,UAAU,OAAO;CAC1D,MAAM,mBAAmB,WAAW,OAAO;CAC3C,OAAO,OAAO,qBAAqB,YAAY,iBAAiB,SAAS;AAC3E;;;;;;;;;;;;AAaA,SAAgB,gCAAgC,gBAA+D;CAC7G,MAAM,MAAM,gBAAgB,IAAI,MAAM;CACtC,IAAI,CAAC,OAAO,OAAO,QAAQ,UAAU,OAAO,KAAA;CAK5C,MAAM,UAAU,QAAQ,IAAI,QAAQ,OAAO,IAAI,SAAS,YAAY,IAAI,WAAW,OAAO,IAAI,YAAY,QAAQ;CAClH,MAAM,OAAO,UAAW,IAAI,OAA8B;CAC1D,MAAM,QAAQ,UAAU,IAAI,SAAS,uBAAuB,KAAK;CACjE,MAAM,SAAS,KAAK,YAAY,KAAK;CAIrC,IAAI,OAAO,WAAW,YAAY,CAAC,QAAQ,OAAO,KAAA;CAClD,IAAI,UAAU,KAAA,KAAa,OAAO,UAAU,UAAU,OAAO,KAAA;CAI7D,MAAM,WACJ,IAAI,wBAAwB,QAAQ,KAAK,wBAAwB,QAAQ,wBAAwB,cAAc;CACjH,OAAO;EAAE;EAAO;EAAQ,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;CAAG;AAC5D;;;;;;;AAQA,SAAgB,uBAAuB,gBAA8D;CACnG,IAAI,CAAC,yBAAyB,OAAO,KAAA;CACrC,MAAM,SAAS,gCAAgC,cAAc;CAC7D,IAAI,CAAC,QAAQ;EACX,MAAM,UAAU,gBAAgB,IAAI,MAAM;EAC1C,QAAQ,KAAK,2DAA2D;GACtE,QAAQ,YAAY,KAAA,IAAY,yBAAyB;GACzD,mBAAmB,mBAAmB,KAAA;GACtC,gBAAgB,wBAAwB,cAAc;EACxD,CAAC;EACD,OAAO;CACT;CACA,MAAM,QAAQ,wBAAwB,MAAM;CAC5C,IAAI,CAAC,OAAO;EACV,QAAQ,KAAK,2DAA2D;GACtE,QAAQ;GACR,iBAAiB,OAAO,UAAU,KAAA;GAClC,UAAU,OAAO,aAAa;EAChC,CAAC;EACD,OAAO;CACT;CACA,OAAO;AACT"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom provider source seam for deployed (multi-user) servers.
|
|
3
|
+
*
|
|
4
|
+
* Locally, custom providers are read from the file-backed settings
|
|
5
|
+
* (settings.json). A deployed web host registers a {@link CustomProvidersSource}
|
|
6
|
+
* at boot; from then on model resolution and the gateway catalog read custom
|
|
7
|
+
* providers through the source — DB-backed and tenant-scoped — and never touch
|
|
8
|
+
* settings.json.
|
|
9
|
+
*
|
|
10
|
+
* When no source is registered (TUI, local web), everything falls through to
|
|
11
|
+
* the existing settings-based behavior unchanged.
|
|
12
|
+
*/
|
|
13
|
+
import type { RequestContext } from '@mastra/core/request-context';
|
|
14
|
+
import type { CredentialTenant } from './credential-resolver.js';
|
|
15
|
+
import type { MastraCodeCustomProvider } from './mastracode-gateway.js';
|
|
16
|
+
/**
|
|
17
|
+
* Returns the custom providers visible to the given tenant. `tenant` is
|
|
18
|
+
* `undefined` for calls without an authenticated request (boot-time catalog,
|
|
19
|
+
* local/no-auth mode) — implementations decide what that means (e.g. the
|
|
20
|
+
* local sentinel org, or an empty list in tenant mode). Must be synchronous —
|
|
21
|
+
* implementations serve from a primed snapshot.
|
|
22
|
+
*/
|
|
23
|
+
export type CustomProvidersSource = (tenant: CredentialTenant | undefined) => MastraCodeCustomProvider[];
|
|
24
|
+
/** Register (or clear) the custom providers source. Deployed-web only. */
|
|
25
|
+
export declare function setCustomProvidersSource(source: CustomProvidersSource | undefined): void;
|
|
26
|
+
/** Whether a custom providers source is registered. */
|
|
27
|
+
export declare function hasCustomProvidersSource(): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Resolve custom providers for a request. Returns `undefined` when no source
|
|
30
|
+
* is registered — callers fall back to settings.json. Once a source is
|
|
31
|
+
* registered it is authoritative: its result (possibly empty) is used and
|
|
32
|
+
* settings.json is never consulted.
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveCustomProviders(requestContext?: RequestContext): MastraCodeCustomProvider[] | undefined;
|
|
35
|
+
//# sourceMappingURL=custom-provider-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-provider-source.d.ts","sourceRoot":"","sources":["../../src/agents/custom-provider-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAExE;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,KAAK,wBAAwB,EAAE,CAAC;AAIzG,0EAA0E;AAC1E,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,qBAAqB,GAAG,SAAS,GAAG,IAAI,CAExF;AAED,uDAAuD;AACvD,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,wBAAwB,EAAE,GAAG,SAAS,CAG9G"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { resolveTenantFromRequestContext } from "./credential-resolver.js";
|
|
2
|
+
//#region src/agents/custom-provider-source.ts
|
|
3
|
+
let customProvidersSource;
|
|
4
|
+
/** Register (or clear) the custom providers source. Deployed-web only. */
|
|
5
|
+
function setCustomProvidersSource(source) {
|
|
6
|
+
customProvidersSource = source;
|
|
7
|
+
}
|
|
8
|
+
/** Whether a custom providers source is registered. */
|
|
9
|
+
function hasCustomProvidersSource() {
|
|
10
|
+
return customProvidersSource !== void 0;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Resolve custom providers for a request. Returns `undefined` when no source
|
|
14
|
+
* is registered — callers fall back to settings.json. Once a source is
|
|
15
|
+
* registered it is authoritative: its result (possibly empty) is used and
|
|
16
|
+
* settings.json is never consulted.
|
|
17
|
+
*/
|
|
18
|
+
function resolveCustomProviders(requestContext) {
|
|
19
|
+
if (!customProvidersSource) return void 0;
|
|
20
|
+
return customProvidersSource(resolveTenantFromRequestContext(requestContext));
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
export { hasCustomProvidersSource, resolveCustomProviders, setCustomProvidersSource };
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=custom-provider-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-provider-source.js","names":[],"sources":["../../src/agents/custom-provider-source.ts"],"sourcesContent":["/**\n * Custom provider source seam for deployed (multi-user) servers.\n *\n * Locally, custom providers are read from the file-backed settings\n * (settings.json). A deployed web host registers a {@link CustomProvidersSource}\n * at boot; from then on model resolution and the gateway catalog read custom\n * providers through the source — DB-backed and tenant-scoped — and never touch\n * settings.json.\n *\n * When no source is registered (TUI, local web), everything falls through to\n * the existing settings-based behavior unchanged.\n */\n\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { CredentialTenant } from './credential-resolver.js';\nimport { resolveTenantFromRequestContext } from './credential-resolver.js';\nimport type { MastraCodeCustomProvider } from './mastracode-gateway.js';\n\n/**\n * Returns the custom providers visible to the given tenant. `tenant` is\n * `undefined` for calls without an authenticated request (boot-time catalog,\n * local/no-auth mode) — implementations decide what that means (e.g. the\n * local sentinel org, or an empty list in tenant mode). Must be synchronous —\n * implementations serve from a primed snapshot.\n */\nexport type CustomProvidersSource = (tenant: CredentialTenant | undefined) => MastraCodeCustomProvider[];\n\nlet customProvidersSource: CustomProvidersSource | undefined;\n\n/** Register (or clear) the custom providers source. Deployed-web only. */\nexport function setCustomProvidersSource(source: CustomProvidersSource | undefined): void {\n customProvidersSource = source;\n}\n\n/** Whether a custom providers source is registered. */\nexport function hasCustomProvidersSource(): boolean {\n return customProvidersSource !== undefined;\n}\n\n/**\n * Resolve custom providers for a request. Returns `undefined` when no source\n * is registered — callers fall back to settings.json. Once a source is\n * registered it is authoritative: its result (possibly empty) is used and\n * settings.json is never consulted.\n */\nexport function resolveCustomProviders(requestContext?: RequestContext): MastraCodeCustomProvider[] | undefined {\n if (!customProvidersSource) return undefined;\n return customProvidersSource(resolveTenantFromRequestContext(requestContext));\n}\n"],"mappings":";;AA2BA,IAAI;;AAGJ,SAAgB,yBAAyB,QAAiD;CACxF,wBAAwB;AAC1B;;AAGA,SAAgB,2BAAoC;CAClD,OAAO,0BAA0B,KAAA;AACnC;;;;;;;AAQA,SAAgB,uBAAuB,gBAAyE;CAC9G,IAAI,CAAC,uBAAuB,OAAO,KAAA;CACnC,OAAO,sBAAsB,gCAAgC,cAAc,CAAC;AAC9E"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { MastraCodeState } from '../schema.js';
|
|
2
|
+
import type { PromptSection } from './prompts/index.js';
|
|
3
|
+
export declare function getDynamicInstructions({ requestContext, hostInstructions, hasSubconscious, hasSubagents, }: {
|
|
4
|
+
requestContext: {
|
|
5
|
+
get(key: string): unknown;
|
|
6
|
+
};
|
|
7
|
+
hostInstructions?: string;
|
|
8
|
+
hasSubconscious?: boolean | ((state: MastraCodeState | undefined) => boolean);
|
|
9
|
+
hasSubagents?: boolean;
|
|
10
|
+
}): Promise<string>;
|
|
11
|
+
/**
|
|
12
|
+
* The system instructions as labeled sections, so callers that attribute
|
|
13
|
+
* context cost per source (the `/context` audit) measure the same strings that
|
|
14
|
+
* `getDynamicInstructions` sends rather than reconstructing them.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getDynamicInstructionSections({ requestContext, hostInstructions, hasSubconscious, hasSubagents, }: {
|
|
17
|
+
requestContext: {
|
|
18
|
+
get(key: string): unknown;
|
|
19
|
+
};
|
|
20
|
+
hostInstructions?: string;
|
|
21
|
+
/**
|
|
22
|
+
* The subconscious knowledge tools are registered on the agent. A function
|
|
23
|
+
* is resolved against the session state, since Factory sessions can refuse
|
|
24
|
+
* the subconscious per request.
|
|
25
|
+
*/
|
|
26
|
+
hasSubconscious?: boolean | ((state: MastraCodeState | undefined) => boolean);
|
|
27
|
+
hasSubagents?: boolean;
|
|
28
|
+
}): Promise<PromptSection[]>;
|
|
29
|
+
//# sourceMappingURL=instructions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/agents/instructions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA2B,eAAe,EAAE,MAAM,cAAc,CAAC;AAG7E,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGvE,wBAAsB,sBAAsB,CAAC,EAC3C,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,YAAY,GACb,EAAE;IACD,cAAc,EAAE;QAAE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,KAAK,OAAO,CAAC,CAAC;IAC9E,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG,OAAO,CAAC,MAAM,CAAC,CAIlB;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,CAAC,EAClD,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,YAAY,GACb,EAAE;IACD,cAAc,EAAE;QAAE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,KAAK,OAAO,CAAC,CAAC;IAC9E,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAgD3B"}
|