@mastra/code-sdk 0.0.0-livekit-beta-v3-20260709031728
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/CHANGELOG.md +41 -0
- package/LICENSE.md +30 -0
- package/README.md +50 -0
- package/dist/acp/agent.d.ts +35 -0
- package/dist/acp/agent.d.ts.map +1 -0
- package/dist/acp/agent.js +173 -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 +166 -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 +54 -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 +34 -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 +5 -0
- package/dist/acp.js.map +1 -0
- package/dist/agents/instructions.d.ts +6 -0
- package/dist/agents/instructions.d.ts.map +1 -0
- package/dist/agents/instructions.js +41 -0
- package/dist/agents/instructions.js.map +1 -0
- package/dist/agents/mastracode-gateway.d.ts +65 -0
- package/dist/agents/mastracode-gateway.d.ts.map +1 -0
- package/dist/agents/mastracode-gateway.js +442 -0
- package/dist/agents/mastracode-gateway.js.map +1 -0
- package/dist/agents/memory.d.ts +13 -0
- package/dist/agents/memory.d.ts.map +1 -0
- package/dist/agents/memory.js +107 -0
- package/dist/agents/memory.js.map +1 -0
- package/dist/agents/model.d.ts +55 -0
- package/dist/agents/model.d.ts.map +1 -0
- package/dist/agents/model.js +115 -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 +45 -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 +38 -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 +38 -0
- package/dist/agents/modes/plan.js.map +1 -0
- package/dist/agents/prompts/agent-instructions.d.ts +20 -0
- package/dist/agents/prompts/agent-instructions.d.ts.map +1 -0
- package/dist/agents/prompts/agent-instructions.js +82 -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 +73 -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 +22 -0
- package/dist/agents/prompts/fast.js.map +1 -0
- package/dist/agents/prompts/index.d.ts +19 -0
- package/dist/agents/prompts/index.d.ts.map +1 -0
- package/dist/agents/prompts/index.js +57 -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 +22 -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 +107 -0
- package/dist/agents/prompts/plan.js.map +1 -0
- package/dist/agents/prompts/tool-guidance.d.ts +13 -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 +89 -0
- package/dist/agents/sandbox-filesystem.d.ts.map +1 -0
- package/dist/agents/sandbox-filesystem.js +268 -0
- package/dist/agents/sandbox-filesystem.js.map +1 -0
- package/dist/agents/sandbox-reattach.d.ts +19 -0
- package/dist/agents/sandbox-reattach.d.ts.map +1 -0
- package/dist/agents/sandbox-reattach.js +17 -0
- package/dist/agents/sandbox-reattach.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 +96 -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 +105 -0
- package/dist/agents/tool-availability.js.map +1 -0
- package/dist/agents/tools.d.ts +18 -0
- package/dist/agents/tools.d.ts.map +1 -0
- package/dist/agents/tools.js +126 -0
- package/dist/agents/tools.js.map +1 -0
- package/dist/agents/workspace.d.ts +22 -0
- package/dist/agents/workspace.d.ts.map +1 -0
- package/dist/agents/workspace.js +194 -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 +152 -0
- package/dist/analytics.js.map +1 -0
- package/dist/auth/index.d.ts +9 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +11 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/pkce.d.ts +13 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +21 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/auth/providers/anthropic.d.ts +17 -0
- package/dist/auth/providers/anthropic.d.ts.map +1 -0
- package/dist/auth/providers/anthropic.js +94 -0
- package/dist/auth/providers/anthropic.js.map +1 -0
- package/dist/auth/providers/github-copilot.d.ts +100 -0
- package/dist/auth/providers/github-copilot.d.ts.map +1 -0
- package/dist/auth/providers/github-copilot.js +302 -0
- package/dist/auth/providers/github-copilot.js.map +1 -0
- package/dist/auth/providers/openai-codex.d.ts +95 -0
- package/dist/auth/providers/openai-codex.d.ts.map +1 -0
- package/dist/auth/providers/openai-codex.js +527 -0
- package/dist/auth/providers/openai-codex.js.map +1 -0
- package/dist/auth/storage.d.ts +91 -0
- package/dist/auth/storage.d.ts.map +1 -0
- package/dist/auth/storage.js +187 -0
- package/dist/auth/storage.js.map +1 -0
- package/dist/auth/types.d.ts +68 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +1 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/clipboard/index.d.ts +26 -0
- package/dist/clipboard/index.d.ts.map +1 -0
- package/dist/clipboard/index.js +192 -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 +23 -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 +14 -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 +120 -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 +8 -0
- package/dist/evals/index.js.map +1 -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 +52 -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 +201 -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 +56 -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 +7 -0
- package/dist/evals/scorers/index.js.map +1 -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 +238 -0
- package/dist/evals/scorers/outcome.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 +196 -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 +188 -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 +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 +32 -0
- package/dist/headless/index.js.map +1 -0
- package/dist/headless/policy.d.ts +17 -0
- package/dist/headless/policy.d.ts.map +1 -0
- package/dist/headless/policy.js +38 -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 +296 -0
- package/dist/headless/run-mc.js.map +1 -0
- package/dist/headless/types.d.ts +134 -0
- package/dist/headless/types.d.ts.map +1 -0
- package/dist/headless/types.js +9 -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 +78 -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 +125 -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 +16 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/manager.d.ts +47 -0
- package/dist/hooks/manager.d.ts.map +1 -0
- package/dist/hooks/manager.js +284 -0
- package/dist/hooks/manager.js.map +1 -0
- package/dist/hooks/types.d.ts +152 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +7 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +241 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +712 -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 +24 -0
- package/dist/ipc/ipc-reporter.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 +309 -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 +9 -0
- package/dist/lsp/index.js.map +1 -0
- package/dist/lsp/language.d.ts +9 -0
- package/dist/lsp/language.d.ts.map +1 -0
- package/dist/lsp/language.js +48 -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 +97 -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 +128 -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 +52 -0
- package/dist/lsp/workspace.js.map +1 -0
- package/dist/mcp/config.d.ts +34 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +205 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +10 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +49 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +374 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/types.d.ts +85 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +1 -0
- package/dist/mcp/types.js.map +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 +28 -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 +21 -0
- package/dist/onboarding/index.js.map +1 -0
- package/dist/onboarding/om-settings.d.ts +20 -0
- package/dist/onboarding/om-settings.d.ts.map +1 -0
- package/dist/onboarding/om-settings.js +26 -0
- package/dist/onboarding/om-settings.js.map +1 -0
- package/dist/onboarding/packs.d.ts +48 -0
- package/dist/onboarding/packs.d.ts.map +1 -0
- package/dist/onboarding/packs.js +111 -0
- package/dist/onboarding/packs.js.map +1 -0
- package/dist/onboarding/settings.d.ts +323 -0
- package/dist/onboarding/settings.d.ts.map +1 -0
- package/dist/onboarding/settings.js +594 -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 +119 -0
- package/dist/permissions.js.map +1 -0
- package/dist/plugin.d.ts +81 -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 +141 -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 +200 -0
- package/dist/plugins/install.js.map +1 -0
- package/dist/plugins/loader.d.ts +15 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +221 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +60 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +378 -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 +75 -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 +77 -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 +26 -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 +96 -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 +152 -0
- package/dist/plugins/scaffold.js.map +1 -0
- package/dist/plugins/types.d.ts +45 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +1 -0
- package/dist/plugins/types.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 +53 -0
- package/dist/processors/plan-rejection-abort.js.map +1 -0
- package/dist/providers/amazon-bedrock-gateway.d.ts +40 -0
- package/dist/providers/amazon-bedrock-gateway.d.ts.map +1 -0
- package/dist/providers/amazon-bedrock-gateway.js +79 -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 +62 -0
- package/dist/providers/amazon-bedrock.js.map +1 -0
- package/dist/providers/claude-max.d.ts +50 -0
- package/dist/providers/claude-max.d.ts.map +1 -0
- package/dist/providers/claude-max.js +151 -0
- package/dist/providers/claude-max.js.map +1 -0
- package/dist/providers/github-copilot.d.ts +58 -0
- package/dist/providers/github-copilot.d.ts.map +1 -0
- package/dist/providers/github-copilot.js +263 -0
- package/dist/providers/github-copilot.js.map +1 -0
- package/dist/providers/openai-codex.d.ts +70 -0
- package/dist/providers/openai-codex.d.ts.map +1 -0
- package/dist/providers/openai-codex.js +291 -0
- package/dist/providers/openai-codex.js.map +1 -0
- package/dist/schema.d.ts +167 -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 +17 -0
- package/dist/theme-palette.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 +43 -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 +9 -0
- package/dist/tools/index.js.map +1 -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 +88 -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 +22 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools/web-search.d.ts +35 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +65 -0
- package/dist/tools/web-search.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 +74 -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 +55 -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 +207 -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 +49 -0
- package/dist/utils/gateway-sync.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 +43 -0
- package/dist/utils/plan-diff.js.map +1 -0
- package/dist/utils/plans.d.ts +56 -0
- package/dist/utils/plans.d.ts.map +1 -0
- package/dist/utils/plans.js +99 -0
- package/dist/utils/plans.js.map +1 -0
- package/dist/utils/project.d.ts +161 -0
- package/dist/utils/project.d.ts.map +1 -0
- package/dist/utils/project.js +302 -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 +104 -0
- package/dist/utils/signals-pubsub.js.map +1 -0
- package/dist/utils/slash-command-loader.d.ts +48 -0
- package/dist/utils/slash-command-loader.d.ts.map +1 -0
- package/dist/utils/slash-command-loader.js +155 -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 +96 -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 +72 -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 +98 -0
- package/dist/utils/storage-factory.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 +108 -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 +52 -0
- package/dist/utils/update-check.d.ts.map +1 -0
- package/dist/utils/update-check.js +177 -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 +126 -0
- package/dist/voice/stt-registry.js.map +1 -0
- package/package.json +92 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Seam between the core workspace wiring and the web surface's sandbox
|
|
3
|
+
* provisioning. GitHub/cloud-sandbox projects are only reachable through the
|
|
4
|
+
* web tenant server, which owns the sandbox provider factory and its DB-backed
|
|
5
|
+
* bookkeeping. The web package registers its `reattachProjectSandbox`
|
|
6
|
+
* implementation here at startup so `getDynamicWorkspace` can reattach
|
|
7
|
+
* sandboxes without core depending on the web stack.
|
|
8
|
+
*/
|
|
9
|
+
import type { SandboxExec } from './sandbox-filesystem.js';
|
|
10
|
+
/** Minimal sandbox surface the workspace seam needs after reattach. */
|
|
11
|
+
export interface ReattachedSandbox extends SandboxExec {
|
|
12
|
+
start(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export type SandboxReattachFn = (providerSandboxId: string) => Promise<ReattachedSandbox>;
|
|
15
|
+
/** Register the sandbox reattach implementation (called by the web surface at startup). */
|
|
16
|
+
export declare function registerSandboxReattach(fn: SandboxReattachFn): void;
|
|
17
|
+
/** Reattach to an already-provisioned sandbox by provider id. */
|
|
18
|
+
export declare function reattachProjectSandbox(providerSandboxId: string): Promise<ReattachedSandbox>;
|
|
19
|
+
//# sourceMappingURL=sandbox-reattach.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox-reattach.d.ts","sourceRoot":"","sources":["../../src/agents/sandbox-reattach.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,uEAAuE;AACvE,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,iBAAiB,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAI1F,2FAA2F;AAC3F,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,iBAAiB,GAAG,IAAI,CAEnE;AAED,iEAAiE;AACjE,wBAAsB,sBAAsB,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAOlG"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
let reattachFn;
|
|
2
|
+
function registerSandboxReattach(fn) {
|
|
3
|
+
reattachFn = fn;
|
|
4
|
+
}
|
|
5
|
+
async function reattachProjectSandbox(providerSandboxId) {
|
|
6
|
+
if (!reattachFn) {
|
|
7
|
+
throw new Error(
|
|
8
|
+
"No sandbox reattach implementation registered. Sandbox-backed workspaces are only available when the web surface has called registerSandboxReattach()."
|
|
9
|
+
);
|
|
10
|
+
}
|
|
11
|
+
return reattachFn(providerSandboxId);
|
|
12
|
+
}
|
|
13
|
+
export {
|
|
14
|
+
reattachProjectSandbox,
|
|
15
|
+
registerSandboxReattach
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=sandbox-reattach.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/agents/sandbox-reattach.ts"],"sourcesContent":["/**\n * Seam between the core workspace wiring and the web surface's sandbox\n * provisioning. GitHub/cloud-sandbox projects are only reachable through the\n * web tenant server, which owns the sandbox provider factory and its DB-backed\n * bookkeeping. The web package registers its `reattachProjectSandbox`\n * implementation here at startup so `getDynamicWorkspace` can reattach\n * sandboxes without core depending on the web stack.\n */\nimport type { SandboxExec } from './sandbox-filesystem.js';\n\n/** Minimal sandbox surface the workspace seam needs after reattach. */\nexport interface ReattachedSandbox extends SandboxExec {\n start(): Promise<void>;\n}\n\nexport type SandboxReattachFn = (providerSandboxId: string) => Promise<ReattachedSandbox>;\n\nlet reattachFn: SandboxReattachFn | undefined;\n\n/** Register the sandbox reattach implementation (called by the web surface at startup). */\nexport function registerSandboxReattach(fn: SandboxReattachFn): void {\n reattachFn = fn;\n}\n\n/** Reattach to an already-provisioned sandbox by provider id. */\nexport async function reattachProjectSandbox(providerSandboxId: string): Promise<ReattachedSandbox> {\n if (!reattachFn) {\n throw new Error(\n 'No sandbox reattach implementation registered. Sandbox-backed workspaces are only available when the web surface has called registerSandboxReattach().',\n );\n }\n return reattachFn(providerSandboxId);\n}\n"],"mappings":"AAiBA,IAAI;AAGG,SAAS,wBAAwB,IAA6B;AACnE,eAAa;AACf;AAGA,eAAsB,uBAAuB,mBAAuD;AAClG,MAAI,CAAC,YAAY;AACf,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO,WAAW,iBAAiB;AACrC;","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Session } from '@mastra/core/agent-controller';
|
|
2
|
+
/**
|
|
3
|
+
* Wires MastraCode-owned state into controller thread events so it persists
|
|
4
|
+
* per-thread and new threads inherit the most recent value.
|
|
5
|
+
*
|
|
6
|
+
* This is intentionally implemented in mastracode rather than core: these
|
|
7
|
+
* settings are mastracode-specific concepts, so persistence stays scoped to
|
|
8
|
+
* the host.
|
|
9
|
+
*/
|
|
10
|
+
export declare function attachOMThreadStatePersistence(session: Session<Record<string, unknown>>): void;
|
|
11
|
+
/**
|
|
12
|
+
* Eagerly restores MastraCode-owned OM settings for the currently-selected
|
|
13
|
+
* thread. Called once at TUI startup after the initial thread is selected,
|
|
14
|
+
* since the subscription set up later misses the startup `thread_changed` event.
|
|
15
|
+
*/
|
|
16
|
+
export declare function restoreOMThreadStateForCurrentThread(session: Session<Record<string, unknown>>): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=thread-caveman-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-caveman-state.d.ts","sourceRoot":"","sources":["../../src/agents/thread-caveman-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAkGpF;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAqB9F;AAED;;;;GAIG;AACH,wBAAsB,oCAAoC,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAInH"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
const THREAD_STATE_SETTINGS = [
|
|
2
|
+
{
|
|
3
|
+
key: "cavemanObservations",
|
|
4
|
+
isValid: (value) => typeof value === "boolean",
|
|
5
|
+
seedMissingFromCurrentState: true
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
key: "observeAttachments",
|
|
9
|
+
isValid: (value) => value === "auto" || typeof value === "boolean",
|
|
10
|
+
seedMissingFromCurrentState: true
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
key: "sandboxAllowedPaths",
|
|
14
|
+
isValid: (value) => Array.isArray(value) && value.every((item) => typeof item === "string"),
|
|
15
|
+
clearValueWhenMissing: []
|
|
16
|
+
}
|
|
17
|
+
];
|
|
18
|
+
function getStateValue(session, setting) {
|
|
19
|
+
const value = session.state.get()[setting.key];
|
|
20
|
+
return setting.isValid(value) ? value : void 0;
|
|
21
|
+
}
|
|
22
|
+
function stateValuesEqual(left, right) {
|
|
23
|
+
if (Array.isArray(left) && Array.isArray(right)) {
|
|
24
|
+
return left.length === right.length && left.every((item, index) => item === right[index]);
|
|
25
|
+
}
|
|
26
|
+
return left === right;
|
|
27
|
+
}
|
|
28
|
+
async function findThread(session, threadId) {
|
|
29
|
+
const threads = await session.thread.list({ allResources: true });
|
|
30
|
+
return threads.find((t) => t.id === threadId);
|
|
31
|
+
}
|
|
32
|
+
async function restoreSettingsForThread(session, threadId) {
|
|
33
|
+
const thread = await findThread(session, threadId);
|
|
34
|
+
if (session.thread.getId() !== threadId) return;
|
|
35
|
+
const updates = {};
|
|
36
|
+
const settingsToSeed = [];
|
|
37
|
+
for (const setting of THREAD_STATE_SETTINGS) {
|
|
38
|
+
const persisted = thread?.metadata?.[setting.key];
|
|
39
|
+
if (setting.isValid(persisted)) {
|
|
40
|
+
if (getStateValue(session, setting) !== persisted) {
|
|
41
|
+
updates[setting.key] = persisted;
|
|
42
|
+
}
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (setting.clearValueWhenMissing !== void 0) {
|
|
46
|
+
const current = getStateValue(session, setting);
|
|
47
|
+
if (current !== void 0 && !stateValuesEqual(current, setting.clearValueWhenMissing)) {
|
|
48
|
+
updates[setting.key] = setting.clearValueWhenMissing;
|
|
49
|
+
}
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (setting.seedMissingFromCurrentState) {
|
|
53
|
+
const current = getStateValue(session, setting);
|
|
54
|
+
if (current !== void 0) {
|
|
55
|
+
settingsToSeed.push({ key: setting.key, value: current });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (Object.keys(updates).length > 0) {
|
|
60
|
+
if (session.thread.getId() !== threadId) return;
|
|
61
|
+
await session.state.set(updates);
|
|
62
|
+
}
|
|
63
|
+
for (const setting of settingsToSeed) {
|
|
64
|
+
if (session.thread.getId() !== threadId) return;
|
|
65
|
+
await session.thread.setSetting(setting);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function attachOMThreadStatePersistence(session) {
|
|
69
|
+
session.subscribe((event) => {
|
|
70
|
+
if (event.type === "thread_changed" || event.type === "thread_created") {
|
|
71
|
+
const threadId = event.type === "thread_changed" ? event.threadId : event.thread.id;
|
|
72
|
+
void restoreSettingsForThread(session, threadId).catch(() => {
|
|
73
|
+
});
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (event.type === "state_changed") {
|
|
77
|
+
for (const setting of THREAD_STATE_SETTINGS) {
|
|
78
|
+
if (!event.changedKeys.includes(setting.key)) continue;
|
|
79
|
+
const value = event.state[setting.key];
|
|
80
|
+
if (!setting.isValid(value)) continue;
|
|
81
|
+
void session.thread.setSetting({ key: setting.key, value }).catch(() => {
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
async function restoreOMThreadStateForCurrentThread(session) {
|
|
88
|
+
const threadId = session.thread.getId();
|
|
89
|
+
if (!threadId) return;
|
|
90
|
+
await restoreSettingsForThread(session, threadId);
|
|
91
|
+
}
|
|
92
|
+
export {
|
|
93
|
+
attachOMThreadStatePersistence,
|
|
94
|
+
restoreOMThreadStateForCurrentThread
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=thread-caveman-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/agents/thread-caveman-state.ts"],"sourcesContent":["import type { AgentControllerThread, Session } from '@mastra/core/agent-controller';\n\ninterface ThreadStateSetting {\n key: string;\n isValid(value: unknown): boolean;\n seedMissingFromCurrentState?: boolean;\n clearValueWhenMissing?: unknown;\n}\n\nconst THREAD_STATE_SETTINGS: ThreadStateSetting[] = [\n {\n key: 'cavemanObservations',\n isValid: (value: unknown): value is boolean => typeof value === 'boolean',\n seedMissingFromCurrentState: true,\n },\n {\n key: 'observeAttachments',\n isValid: (value: unknown): value is 'auto' | boolean => value === 'auto' || typeof value === 'boolean',\n seedMissingFromCurrentState: true,\n },\n {\n key: 'sandboxAllowedPaths',\n isValid: (value: unknown): value is string[] =>\n Array.isArray(value) && value.every(item => typeof item === 'string'),\n clearValueWhenMissing: [],\n },\n];\n\nfunction getStateValue(session: Session<Record<string, unknown>>, setting: ThreadStateSetting): unknown {\n const value = session.state.get()[setting.key];\n return setting.isValid(value) ? value : undefined;\n}\n\nfunction stateValuesEqual(left: unknown, right: unknown): boolean {\n if (Array.isArray(left) && Array.isArray(right)) {\n return left.length === right.length && left.every((item, index) => item === right[index]);\n }\n return left === right;\n}\n\nasync function findThread(\n session: Session<Record<string, unknown>>,\n threadId: string,\n): Promise<AgentControllerThread | undefined> {\n const threads = await session.thread.list({ allResources: true });\n return threads.find(t => t.id === threadId);\n}\n\n/**\n * Restores MastraCode-owned per-thread state for the given thread:\n * - If the thread already has a valid value in metadata, mirror it into controller state.\n * - Otherwise, persist the current session.state value to the thread so future\n * sessions see the user's last-selected setting.\n */\nasync function restoreSettingsForThread(session: Session<Record<string, unknown>>, threadId: string): Promise<void> {\n const thread = await findThread(session, threadId);\n if (session.thread.getId() !== threadId) return;\n\n const updates: Record<string, unknown> = {};\n const settingsToSeed: Array<{ key: string; value: unknown }> = [];\n\n for (const setting of THREAD_STATE_SETTINGS) {\n const persisted = thread?.metadata?.[setting.key];\n\n if (setting.isValid(persisted)) {\n if (getStateValue(session, setting) !== persisted) {\n updates[setting.key] = persisted;\n }\n continue;\n }\n\n if (setting.clearValueWhenMissing !== undefined) {\n const current = getStateValue(session, setting);\n if (current !== undefined && !stateValuesEqual(current, setting.clearValueWhenMissing)) {\n updates[setting.key] = setting.clearValueWhenMissing;\n }\n continue;\n }\n\n if (setting.seedMissingFromCurrentState) {\n const current = getStateValue(session, setting);\n if (current !== undefined) {\n settingsToSeed.push({ key: setting.key, value: current });\n }\n }\n }\n\n if (Object.keys(updates).length > 0) {\n if (session.thread.getId() !== threadId) return;\n await session.state.set(updates);\n }\n\n for (const setting of settingsToSeed) {\n if (session.thread.getId() !== threadId) return;\n await session.thread.setSetting(setting);\n }\n}\n\n/**\n * Wires MastraCode-owned state into controller thread events so it persists\n * per-thread and new threads inherit the most recent value.\n *\n * This is intentionally implemented in mastracode rather than core: these\n * settings are mastracode-specific concepts, so persistence stays scoped to\n * the host.\n */\nexport function attachOMThreadStatePersistence(session: Session<Record<string, unknown>>): void {\n session.subscribe(event => {\n if (event.type === 'thread_changed' || event.type === 'thread_created') {\n const threadId = event.type === 'thread_changed' ? event.threadId : event.thread.id;\n void restoreSettingsForThread(session, threadId).catch(() => {\n // Persistence is best-effort; don't crash the TUI if storage hiccups.\n });\n return;\n }\n\n if (event.type === 'state_changed') {\n for (const setting of THREAD_STATE_SETTINGS) {\n if (!event.changedKeys.includes(setting.key)) continue;\n const value = event.state[setting.key];\n if (!setting.isValid(value)) continue;\n void session.thread.setSetting({ key: setting.key, value }).catch(() => {\n // Persistence is best-effort; don't crash the TUI if storage hiccups.\n });\n }\n }\n });\n}\n\n/**\n * Eagerly restores MastraCode-owned OM settings for the currently-selected\n * thread. Called once at TUI startup after the initial thread is selected,\n * since the subscription set up later misses the startup `thread_changed` event.\n */\nexport async function restoreOMThreadStateForCurrentThread(session: Session<Record<string, unknown>>): Promise<void> {\n const threadId = session.thread.getId();\n if (!threadId) return;\n await restoreSettingsForThread(session, threadId);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { WorkspaceToolHookContext, WorkspaceToolsConfig } from '@mastra/core/workspace';
|
|
2
|
+
export declare function guardPlanModePlanFileWrites({ workspaceToolName, input, context }: WorkspaceToolHookContext): {
|
|
3
|
+
proceed: false;
|
|
4
|
+
output: string;
|
|
5
|
+
} | undefined;
|
|
6
|
+
export declare const MASTRACODE_WORKSPACE_TOOLS: WorkspaceToolsConfig;
|
|
7
|
+
export declare const PLAN_MODE_AVAILABLE_TOOLS: readonly string[];
|
|
8
|
+
export declare const EXPLORE_MODE_AVAILABLE_TOOLS: readonly string[];
|
|
9
|
+
export declare const GOAL_JUDGE_READONLY_TOOLS: readonly string[];
|
|
10
|
+
//# sourceMappingURL=tool-availability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-availability.d.ts","sourceRoot":"","sources":["../../src/agents/tool-availability.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAyD7F,wBAAgB,2BAA2B,CAAC,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,wBAAwB;;;cAuB1G;AAED,eAAO,MAAM,0BAA0B,EAAE,oBAKxC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAqBtD,CAAC;AAEF,eAAO,MAAM,4BAA4B,EAAE,SAAS,MAAM,EAOzD,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAMtD,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { WORKSPACE_TOOLS } from "@mastra/core/workspace";
|
|
2
|
+
import { MC_TOOLS, TOOL_NAME_OVERRIDES } from "../tool-names.js";
|
|
3
|
+
import { getLocalPlansRelativeDir, isPlanFilePath } from "../utils/plans.js";
|
|
4
|
+
const PLAN_MODE_WRITE_TOOL_NAMES = /* @__PURE__ */ new Set([
|
|
5
|
+
WORKSPACE_TOOLS.FILESYSTEM.WRITE_FILE,
|
|
6
|
+
WORKSPACE_TOOLS.FILESYSTEM.EDIT_FILE
|
|
7
|
+
]);
|
|
8
|
+
function getRequestContextValue(requestContext, key) {
|
|
9
|
+
if (!requestContext) return void 0;
|
|
10
|
+
if (typeof requestContext.get === "function") {
|
|
11
|
+
return requestContext.get(key);
|
|
12
|
+
}
|
|
13
|
+
return requestContext[key];
|
|
14
|
+
}
|
|
15
|
+
function getHarnessContext(context) {
|
|
16
|
+
const requestContext = context?.requestContext;
|
|
17
|
+
const harness = getRequestContextValue(requestContext, "harness");
|
|
18
|
+
return harness && typeof harness === "object" ? harness : void 0;
|
|
19
|
+
}
|
|
20
|
+
function getHarnessState(harness) {
|
|
21
|
+
const state = harness?.session?.state?.get?.();
|
|
22
|
+
return state && typeof state === "object" ? state : void 0;
|
|
23
|
+
}
|
|
24
|
+
function getHarnessModeId(harness) {
|
|
25
|
+
const modeId = harness?.session?.modeId ?? getHarnessState(harness)?.modeId;
|
|
26
|
+
return typeof modeId === "string" ? modeId : void 0;
|
|
27
|
+
}
|
|
28
|
+
function getHarnessProjectPath(harness) {
|
|
29
|
+
const projectPath = getHarnessState(harness)?.projectPath;
|
|
30
|
+
return typeof projectPath === "string" ? projectPath : void 0;
|
|
31
|
+
}
|
|
32
|
+
function getToolInputPath(input) {
|
|
33
|
+
const toolPath = input?.path;
|
|
34
|
+
return typeof toolPath === "string" ? toolPath : void 0;
|
|
35
|
+
}
|
|
36
|
+
const PLAN_DIR_HINT = `${getLocalPlansRelativeDir()}/`;
|
|
37
|
+
function guardPlanModePlanFileWrites({ workspaceToolName, input, context }) {
|
|
38
|
+
if (!PLAN_MODE_WRITE_TOOL_NAMES.has(workspaceToolName)) return;
|
|
39
|
+
const harness = getHarnessContext(context);
|
|
40
|
+
if (getHarnessModeId(harness) !== "plan") return;
|
|
41
|
+
const projectPath = getHarnessProjectPath(harness);
|
|
42
|
+
const inputPath = getToolInputPath(input);
|
|
43
|
+
if (!projectPath || !inputPath) {
|
|
44
|
+
return {
|
|
45
|
+
proceed: false,
|
|
46
|
+
output: `Plan mode can only write plan files inside ${PLAN_DIR_HINT}.`
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if (isPlanFilePath(projectPath, inputPath)) return;
|
|
50
|
+
return {
|
|
51
|
+
proceed: false,
|
|
52
|
+
output: `Plan mode can only write plan files inside ${PLAN_DIR_HINT}. Refusing to edit ${inputPath}.`
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
const MASTRACODE_WORKSPACE_TOOLS = {
|
|
56
|
+
...TOOL_NAME_OVERRIDES,
|
|
57
|
+
hooks: {
|
|
58
|
+
beforeToolCall: guardPlanModePlanFileWrites
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const PLAN_MODE_AVAILABLE_TOOLS = [
|
|
62
|
+
// Read-only exploration tools
|
|
63
|
+
MC_TOOLS.VIEW,
|
|
64
|
+
MC_TOOLS.FIND_FILES,
|
|
65
|
+
MC_TOOLS.SEARCH_CONTENT,
|
|
66
|
+
MC_TOOLS.FILE_STAT,
|
|
67
|
+
MC_TOOLS.LSP_INSPECT,
|
|
68
|
+
// Plan file writing. Tool hooks enforce that these can only write `.md`
|
|
69
|
+
// files inside `.mastracode/plans/` while the session is in plan mode.
|
|
70
|
+
MC_TOOLS.WRITE_FILE,
|
|
71
|
+
MC_TOOLS.STRING_REPLACE_LSP,
|
|
72
|
+
// Plan delivery tools
|
|
73
|
+
"ask_user",
|
|
74
|
+
"submit_plan",
|
|
75
|
+
// Task tools for plan-stage tracking
|
|
76
|
+
"task_write",
|
|
77
|
+
"task_update",
|
|
78
|
+
"task_complete",
|
|
79
|
+
"task_check",
|
|
80
|
+
// Notification access
|
|
81
|
+
MC_TOOLS.NOTIFICATION_INBOX
|
|
82
|
+
];
|
|
83
|
+
const EXPLORE_MODE_AVAILABLE_TOOLS = [
|
|
84
|
+
MC_TOOLS.VIEW,
|
|
85
|
+
MC_TOOLS.FIND_FILES,
|
|
86
|
+
MC_TOOLS.SEARCH_CONTENT,
|
|
87
|
+
MC_TOOLS.FILE_STAT,
|
|
88
|
+
MC_TOOLS.LSP_INSPECT,
|
|
89
|
+
"ask_user"
|
|
90
|
+
];
|
|
91
|
+
const GOAL_JUDGE_READONLY_TOOLS = [
|
|
92
|
+
MC_TOOLS.VIEW,
|
|
93
|
+
MC_TOOLS.SEARCH_CONTENT,
|
|
94
|
+
MC_TOOLS.FIND_FILES,
|
|
95
|
+
MC_TOOLS.FILE_STAT,
|
|
96
|
+
MC_TOOLS.LSP_INSPECT
|
|
97
|
+
];
|
|
98
|
+
export {
|
|
99
|
+
EXPLORE_MODE_AVAILABLE_TOOLS,
|
|
100
|
+
GOAL_JUDGE_READONLY_TOOLS,
|
|
101
|
+
MASTRACODE_WORKSPACE_TOOLS,
|
|
102
|
+
PLAN_MODE_AVAILABLE_TOOLS,
|
|
103
|
+
guardPlanModePlanFileWrites
|
|
104
|
+
};
|
|
105
|
+
//# sourceMappingURL=tool-availability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/agents/tool-availability.ts"],"sourcesContent":["import { WORKSPACE_TOOLS } from '@mastra/core/workspace';\nimport type { WorkspaceToolHookContext, WorkspaceToolsConfig } from '@mastra/core/workspace';\nimport { MC_TOOLS, TOOL_NAME_OVERRIDES } from '../tool-names.js';\nimport { getLocalPlansRelativeDir, isPlanFilePath } from '../utils/plans.js';\n\nconst PLAN_MODE_WRITE_TOOL_NAMES = new Set<string>([\n WORKSPACE_TOOLS.FILESYSTEM.WRITE_FILE,\n WORKSPACE_TOOLS.FILESYSTEM.EDIT_FILE,\n]);\n\nfunction getRequestContextValue(requestContext: unknown, key: string): unknown {\n if (!requestContext) return undefined;\n if (typeof (requestContext as { get?: unknown }).get === 'function') {\n return (requestContext as { get: (key: string) => unknown }).get(key);\n }\n return (requestContext as Record<string, unknown>)[key];\n}\n\n/**\n * Subset of the real `HarnessRequestContext` shape (see\n * packages/core/src/harness/types.ts). The mode is a string property\n * (`session.modeId`) and live state is read via `session.state.get()`.\n */\ninterface PlanModeGuardHarness {\n session?: {\n modeId?: unknown;\n state?: { get?: () => unknown };\n };\n}\n\nfunction getHarnessContext(context: unknown): PlanModeGuardHarness | undefined {\n const requestContext = (context as { requestContext?: unknown } | undefined)?.requestContext;\n const harness = getRequestContextValue(requestContext, 'harness');\n return harness && typeof harness === 'object' ? (harness as PlanModeGuardHarness) : undefined;\n}\n\nfunction getHarnessState(harness: PlanModeGuardHarness | undefined): Record<string, unknown> | undefined {\n const state = harness?.session?.state?.get?.();\n return state && typeof state === 'object' ? (state as Record<string, unknown>) : undefined;\n}\n\nfunction getHarnessModeId(harness: PlanModeGuardHarness | undefined): string | undefined {\n const modeId = harness?.session?.modeId ?? getHarnessState(harness)?.modeId;\n return typeof modeId === 'string' ? modeId : undefined;\n}\n\nfunction getHarnessProjectPath(harness: PlanModeGuardHarness | undefined): string | undefined {\n const projectPath = getHarnessState(harness)?.projectPath;\n return typeof projectPath === 'string' ? projectPath : undefined;\n}\n\nfunction getToolInputPath(input: unknown): string | undefined {\n const toolPath = (input as { path?: unknown } | undefined)?.path;\n return typeof toolPath === 'string' ? toolPath : undefined;\n}\n\nconst PLAN_DIR_HINT = `${getLocalPlansRelativeDir()}/`;\n\nexport function guardPlanModePlanFileWrites({ workspaceToolName, input, context }: WorkspaceToolHookContext) {\n if (!PLAN_MODE_WRITE_TOOL_NAMES.has(workspaceToolName)) return;\n\n const harness = getHarnessContext(context);\n if (getHarnessModeId(harness) !== 'plan') return;\n\n const projectPath = getHarnessProjectPath(harness);\n const inputPath = getToolInputPath(input);\n if (!projectPath || !inputPath) {\n return {\n proceed: false as const,\n output: `Plan mode can only write plan files inside ${PLAN_DIR_HINT}.`,\n };\n }\n\n // Plan mode may write any `.md` file directly inside `.mastracode/plans/`, but\n // nothing else in the project.\n if (isPlanFilePath(projectPath, inputPath)) return;\n\n return {\n proceed: false as const,\n output: `Plan mode can only write plan files inside ${PLAN_DIR_HINT}. Refusing to edit ${inputPath}.`,\n };\n}\n\nexport const MASTRACODE_WORKSPACE_TOOLS: WorkspaceToolsConfig = {\n ...TOOL_NAME_OVERRIDES,\n hooks: {\n beforeToolCall: guardPlanModePlanFileWrites,\n },\n};\n\nexport const PLAN_MODE_AVAILABLE_TOOLS: readonly string[] = [\n // Read-only exploration tools\n MC_TOOLS.VIEW,\n MC_TOOLS.FIND_FILES,\n MC_TOOLS.SEARCH_CONTENT,\n MC_TOOLS.FILE_STAT,\n MC_TOOLS.LSP_INSPECT,\n // Plan file writing. Tool hooks enforce that these can only write `.md`\n // files inside `.mastracode/plans/` while the session is in plan mode.\n MC_TOOLS.WRITE_FILE,\n MC_TOOLS.STRING_REPLACE_LSP,\n // Plan delivery tools\n 'ask_user',\n 'submit_plan',\n // Task tools for plan-stage tracking\n 'task_write',\n 'task_update',\n 'task_complete',\n 'task_check',\n // Notification access\n MC_TOOLS.NOTIFICATION_INBOX,\n];\n\nexport const EXPLORE_MODE_AVAILABLE_TOOLS: readonly string[] = [\n MC_TOOLS.VIEW,\n MC_TOOLS.FIND_FILES,\n MC_TOOLS.SEARCH_CONTENT,\n MC_TOOLS.FILE_STAT,\n MC_TOOLS.LSP_INSPECT,\n 'ask_user',\n];\n\nexport const GOAL_JUDGE_READONLY_TOOLS: readonly string[] = [\n MC_TOOLS.VIEW,\n MC_TOOLS.SEARCH_CONTENT,\n MC_TOOLS.FIND_FILES,\n MC_TOOLS.FILE_STAT,\n MC_TOOLS.LSP_INSPECT,\n];\n"],"mappings":"AAAA,SAAS,uBAAuB;AAEhC,SAAS,UAAU,2BAA2B;AAC9C,SAAS,0BAA0B,sBAAsB;AAEzD,MAAM,6BAA6B,oBAAI,IAAY;AAAA,EACjD,gBAAgB,WAAW;AAAA,EAC3B,gBAAgB,WAAW;AAC7B,CAAC;AAED,SAAS,uBAAuB,gBAAyB,KAAsB;AAC7E,MAAI,CAAC,eAAgB,QAAO;AAC5B,MAAI,OAAQ,eAAqC,QAAQ,YAAY;AACnE,WAAQ,eAAqD,IAAI,GAAG;AAAA,EACtE;AACA,SAAQ,eAA2C,GAAG;AACxD;AAcA,SAAS,kBAAkB,SAAoD;AAC7E,QAAM,iBAAkB,SAAsD;AAC9E,QAAM,UAAU,uBAAuB,gBAAgB,SAAS;AAChE,SAAO,WAAW,OAAO,YAAY,WAAY,UAAmC;AACtF;AAEA,SAAS,gBAAgB,SAAgF;AACvG,QAAM,QAAQ,SAAS,SAAS,OAAO,MAAM;AAC7C,SAAO,SAAS,OAAO,UAAU,WAAY,QAAoC;AACnF;AAEA,SAAS,iBAAiB,SAA+D;AACvF,QAAM,SAAS,SAAS,SAAS,UAAU,gBAAgB,OAAO,GAAG;AACrE,SAAO,OAAO,WAAW,WAAW,SAAS;AAC/C;AAEA,SAAS,sBAAsB,SAA+D;AAC5F,QAAM,cAAc,gBAAgB,OAAO,GAAG;AAC9C,SAAO,OAAO,gBAAgB,WAAW,cAAc;AACzD;AAEA,SAAS,iBAAiB,OAAoC;AAC5D,QAAM,WAAY,OAA0C;AAC5D,SAAO,OAAO,aAAa,WAAW,WAAW;AACnD;AAEA,MAAM,gBAAgB,GAAG,yBAAyB,CAAC;AAE5C,SAAS,4BAA4B,EAAE,mBAAmB,OAAO,QAAQ,GAA6B;AAC3G,MAAI,CAAC,2BAA2B,IAAI,iBAAiB,EAAG;AAExD,QAAM,UAAU,kBAAkB,OAAO;AACzC,MAAI,iBAAiB,OAAO,MAAM,OAAQ;AAE1C,QAAM,cAAc,sBAAsB,OAAO;AACjD,QAAM,YAAY,iBAAiB,KAAK;AACxC,MAAI,CAAC,eAAe,CAAC,WAAW;AAC9B,WAAO;AAAA,MACL,SAAS;AAAA,MACT,QAAQ,8CAA8C,aAAa;AAAA,IACrE;AAAA,EACF;AAIA,MAAI,eAAe,aAAa,SAAS,EAAG;AAE5C,SAAO;AAAA,IACL,SAAS;AAAA,IACT,QAAQ,8CAA8C,aAAa,sBAAsB,SAAS;AAAA,EACpG;AACF;AAEO,MAAM,6BAAmD;AAAA,EAC9D,GAAG;AAAA,EACH,OAAO;AAAA,IACL,gBAAgB;AAAA,EAClB;AACF;AAEO,MAAM,4BAA+C;AAAA;AAAA,EAE1D,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA;AAAA;AAAA,EAGT,SAAS;AAAA,EACT,SAAS;AAAA;AAAA,EAET;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA,SAAS;AACX;AAEO,MAAM,+BAAkD;AAAA,EAC7D,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT;AACF;AAEO,MAAM,4BAA+C;AAAA,EAC1D,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AACX;","names":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { RequestContext } from '@mastra/core/request-context';
|
|
2
|
+
import type { MastraCompositeStore } from '@mastra/core/storage';
|
|
3
|
+
import type { ToolHooks } from '@mastra/core/tools';
|
|
4
|
+
import type { HookManager } from '../hooks/index.js';
|
|
5
|
+
import type { McpManager } from '../mcp/index.js';
|
|
6
|
+
/** Minimal shape for tools passed to createDynamicTools. */
|
|
7
|
+
export type ToolLike = {
|
|
8
|
+
execute?: (...args: any[]) => Promise<unknown> | unknown;
|
|
9
|
+
} & Record<string, any>;
|
|
10
|
+
export declare function createToolHooks(hookManager?: HookManager): ToolHooks | undefined;
|
|
11
|
+
type DynamicToolProvider = Record<string, ToolLike | undefined> | ((ctx: {
|
|
12
|
+
requestContext: RequestContext;
|
|
13
|
+
}) => Record<string, ToolLike | undefined>);
|
|
14
|
+
export declare function createDynamicTools(mcpManager?: McpManager, extraTools?: DynamicToolProvider, disabledTools?: string[], storage?: MastraCompositeStore, pluginTools?: Record<string, ToolLike>): ({ requestContext }: {
|
|
15
|
+
requestContext: RequestContext;
|
|
16
|
+
}) => Record<string, ToolLike>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/agents/tools.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKlD,4DAA4D;AAC5D,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CAC1D,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAwCxB,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,CA0BhF;AAED,KAAK,mBAAmB,GACpB,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC,GACpC,CAAC,CAAC,GAAG,EAAE;IAAE,cAAc,EAAE,cAAc,CAAA;CAAE,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC;AAExF,wBAAgB,kBAAkB,CAChC,UAAU,CAAC,EAAE,UAAU,EACvB,UAAU,CAAC,EAAE,mBAAmB,EAChC,aAAa,CAAC,EAAE,MAAM,EAAE,EACxB,OAAO,CAAC,EAAE,oBAAoB,EAC9B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAEN,oBAAoB;IAAE,cAAc,EAAE,cAAc,CAAA;CAAE,8BAyEvF"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { createAnthropic } from "@ai-sdk/anthropic";
|
|
2
|
+
import { createOpenAI } from "@ai-sdk/openai";
|
|
3
|
+
import { createNotificationInboxTool, NotificationsStorage } from "@mastra/core/notifications";
|
|
4
|
+
import { MC_TOOLS } from "../tool-names.js";
|
|
5
|
+
import { createWebSearchTool, createWebExtractTool, hasTavilyKey, requestSandboxAccessTool } from "../tools/index.js";
|
|
6
|
+
class LazyNotificationsStorage extends NotificationsStorage {
|
|
7
|
+
constructor(storage) {
|
|
8
|
+
super();
|
|
9
|
+
this.storage = storage;
|
|
10
|
+
}
|
|
11
|
+
storage;
|
|
12
|
+
async getNotificationsStorage() {
|
|
13
|
+
const notifications = await this.storage.getStore("notifications");
|
|
14
|
+
if (!notifications) {
|
|
15
|
+
throw new Error("notification_inbox requires a notifications storage domain");
|
|
16
|
+
}
|
|
17
|
+
return notifications;
|
|
18
|
+
}
|
|
19
|
+
async createNotification(input) {
|
|
20
|
+
return (await this.getNotificationsStorage()).createNotification(input);
|
|
21
|
+
}
|
|
22
|
+
async listNotifications(input) {
|
|
23
|
+
return (await this.getNotificationsStorage()).listNotifications(input);
|
|
24
|
+
}
|
|
25
|
+
async listDueNotifications(input) {
|
|
26
|
+
return (await this.getNotificationsStorage()).listDueNotifications(input);
|
|
27
|
+
}
|
|
28
|
+
async getNotification(input) {
|
|
29
|
+
return (await this.getNotificationsStorage()).getNotification(input);
|
|
30
|
+
}
|
|
31
|
+
async updateNotification(input) {
|
|
32
|
+
return (await this.getNotificationsStorage()).updateNotification(input);
|
|
33
|
+
}
|
|
34
|
+
async dangerouslyClearAll() {
|
|
35
|
+
return (await this.getNotificationsStorage()).dangerouslyClearAll();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function createToolHooks(hookManager) {
|
|
39
|
+
if (!hookManager) return void 0;
|
|
40
|
+
return {
|
|
41
|
+
beforeToolCall: async ({ toolName, input }) => {
|
|
42
|
+
const preResult = await hookManager.runPreToolUse(toolName, input);
|
|
43
|
+
if (!preResult.allowed) {
|
|
44
|
+
return {
|
|
45
|
+
proceed: false,
|
|
46
|
+
output: {
|
|
47
|
+
error: preResult.blockReason ?? `Blocked by PreToolUse hook for tool "${toolName}"`
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
afterToolCall: async ({ toolName, input, output, error }) => {
|
|
53
|
+
await hookManager.runPostToolUse(
|
|
54
|
+
toolName,
|
|
55
|
+
input,
|
|
56
|
+
error ? { error: error instanceof Error ? error.message : String(error) } : output,
|
|
57
|
+
Boolean(error)
|
|
58
|
+
).catch(() => void 0);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function createDynamicTools(mcpManager, extraTools, disabledTools, storage, pluginTools) {
|
|
63
|
+
return function getDynamicTools({ requestContext }) {
|
|
64
|
+
const ctx = requestContext.get("controller");
|
|
65
|
+
const state = ctx?.getState();
|
|
66
|
+
const modelId = ctx?.session?.modelId;
|
|
67
|
+
const isAnthropicModel = modelId?.startsWith("anthropic/");
|
|
68
|
+
const isOpenAIModel = modelId?.startsWith("openai/");
|
|
69
|
+
const tools = {
|
|
70
|
+
request_access: requestSandboxAccessTool
|
|
71
|
+
};
|
|
72
|
+
if (storage) {
|
|
73
|
+
tools[MC_TOOLS.NOTIFICATION_INBOX] = createNotificationInboxTool({
|
|
74
|
+
storage: new LazyNotificationsStorage(storage)
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
if (hasTavilyKey()) {
|
|
78
|
+
tools.web_search = createWebSearchTool();
|
|
79
|
+
tools.web_extract = createWebExtractTool();
|
|
80
|
+
} else if (isAnthropicModel) {
|
|
81
|
+
const anthropic = createAnthropic({});
|
|
82
|
+
tools.web_search = anthropic.tools.webSearch_20250305();
|
|
83
|
+
} else if (isOpenAIModel) {
|
|
84
|
+
const openai = createOpenAI({});
|
|
85
|
+
tools.web_search = openai.tools.webSearch();
|
|
86
|
+
}
|
|
87
|
+
if (mcpManager) {
|
|
88
|
+
const mcpTools = mcpManager.getTools();
|
|
89
|
+
Object.assign(tools, mcpTools);
|
|
90
|
+
}
|
|
91
|
+
if (extraTools) {
|
|
92
|
+
const resolved = typeof extraTools === "function" ? extraTools({ requestContext }) : extraTools;
|
|
93
|
+
for (const [name, tool] of Object.entries(resolved)) {
|
|
94
|
+
if (tool && !(name in tools)) {
|
|
95
|
+
tools[name] = tool;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (pluginTools) {
|
|
100
|
+
for (const [name, tool] of Object.entries(pluginTools)) {
|
|
101
|
+
if (!(name in tools)) {
|
|
102
|
+
tools[name] = tool;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (disabledTools?.length) {
|
|
107
|
+
for (const toolName of disabledTools) {
|
|
108
|
+
delete tools[toolName];
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
const permissionRules = state?.permissionRules;
|
|
112
|
+
if (permissionRules?.tools) {
|
|
113
|
+
for (const [name, policy] of Object.entries(permissionRules.tools)) {
|
|
114
|
+
if (policy === "deny") {
|
|
115
|
+
delete tools[name];
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return tools;
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
export {
|
|
123
|
+
createDynamicTools,
|
|
124
|
+
createToolHooks
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/agents/tools.ts"],"sourcesContent":["import { createAnthropic } from '@ai-sdk/anthropic';\nimport { createOpenAI } from '@ai-sdk/openai';\nimport type { AgentControllerRequestContext } from '@mastra/core/agent-controller';\nimport { createNotificationInboxTool, NotificationsStorage } from '@mastra/core/notifications';\nimport type {\n CreateNotificationInput,\n ListDueNotificationsInput,\n ListNotificationsInput,\n UpdateNotificationInput,\n} from '@mastra/core/notifications';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { MastraCompositeStore } from '@mastra/core/storage';\nimport type { ToolHooks } from '@mastra/core/tools';\nimport type { HookManager } from '../hooks/index.js';\nimport type { McpManager } from '../mcp/index.js';\nimport type { MastraCodeComposedState } from '../schema.js';\nimport { MC_TOOLS } from '../tool-names.js';\nimport { createWebSearchTool, createWebExtractTool, hasTavilyKey, requestSandboxAccessTool } from '../tools/index.js';\n\n/** Minimal shape for tools passed to createDynamicTools. */\nexport type ToolLike = {\n execute?: (...args: any[]) => Promise<unknown> | unknown;\n} & Record<string, any>;\n\nclass LazyNotificationsStorage extends NotificationsStorage {\n constructor(private readonly storage: MastraCompositeStore) {\n super();\n }\n\n private async getNotificationsStorage(): Promise<NotificationsStorage> {\n const notifications = await this.storage.getStore('notifications');\n if (!notifications) {\n throw new Error('notification_inbox requires a notifications storage domain');\n }\n return notifications;\n }\n\n async createNotification(input: CreateNotificationInput) {\n return (await this.getNotificationsStorage()).createNotification(input);\n }\n\n async listNotifications(input: ListNotificationsInput) {\n return (await this.getNotificationsStorage()).listNotifications(input);\n }\n\n async listDueNotifications(input: ListDueNotificationsInput) {\n return (await this.getNotificationsStorage()).listDueNotifications(input);\n }\n\n async getNotification(input: { threadId: string; id: string }) {\n return (await this.getNotificationsStorage()).getNotification(input);\n }\n\n async updateNotification(input: UpdateNotificationInput) {\n return (await this.getNotificationsStorage()).updateNotification(input);\n }\n\n async dangerouslyClearAll() {\n return (await this.getNotificationsStorage()).dangerouslyClearAll();\n }\n}\n\nexport function createToolHooks(hookManager?: HookManager): ToolHooks | undefined {\n if (!hookManager) return undefined;\n\n return {\n beforeToolCall: async ({ toolName, input }) => {\n const preResult = await hookManager.runPreToolUse(toolName, input);\n if (!preResult.allowed) {\n return {\n proceed: false as const,\n output: {\n error: preResult.blockReason ?? `Blocked by PreToolUse hook for tool \"${toolName}\"`,\n },\n };\n }\n },\n afterToolCall: async ({ toolName, input, output, error }) => {\n await hookManager\n .runPostToolUse(\n toolName,\n input,\n error ? { error: error instanceof Error ? error.message : String(error) } : output,\n Boolean(error),\n )\n .catch(() => undefined);\n },\n };\n}\n\ntype DynamicToolProvider =\n | Record<string, ToolLike | undefined>\n | ((ctx: { requestContext: RequestContext }) => Record<string, ToolLike | undefined>);\n\nexport function createDynamicTools(\n mcpManager?: McpManager,\n extraTools?: DynamicToolProvider,\n disabledTools?: string[],\n storage?: MastraCompositeStore,\n pluginTools?: Record<string, ToolLike>,\n) {\n return function getDynamicTools({ requestContext }: { requestContext: RequestContext }) {\n const ctx = requestContext.get('controller') as AgentControllerRequestContext<MastraCodeComposedState> | undefined;\n const state = ctx?.getState();\n\n const modelId = ctx?.session?.modelId;\n const isAnthropicModel = modelId?.startsWith('anthropic/');\n const isOpenAIModel = modelId?.startsWith('openai/');\n\n // Filesystem, grep, glob, edit, write, execute_command, and process\n // management tools are now provided by the workspace (see workspace.ts).\n // Only tools without a workspace equivalent remain here.\n const tools: Record<string, ToolLike> = {\n request_access: requestSandboxAccessTool,\n };\n\n if (storage) {\n tools[MC_TOOLS.NOTIFICATION_INBOX] = createNotificationInboxTool({\n storage: new LazyNotificationsStorage(storage),\n });\n }\n\n if (hasTavilyKey()) {\n tools.web_search = createWebSearchTool();\n tools.web_extract = createWebExtractTool();\n } else if (isAnthropicModel) {\n const anthropic = createAnthropic({});\n tools.web_search = anthropic.tools.webSearch_20250305();\n } else if (isOpenAIModel) {\n const openai = createOpenAI({});\n tools.web_search = openai.tools.webSearch();\n }\n\n if (mcpManager) {\n const mcpTools = mcpManager.getTools();\n Object.assign(tools, mcpTools);\n }\n\n if (extraTools) {\n const resolved = typeof extraTools === 'function' ? extraTools({ requestContext }) : extraTools;\n for (const [name, tool] of Object.entries(resolved)) {\n if (tool && !(name in tools)) {\n tools[name] = tool;\n }\n }\n }\n\n if (pluginTools) {\n for (const [name, tool] of Object.entries(pluginTools)) {\n if (!(name in tools)) {\n tools[name] = tool;\n }\n }\n }\n\n // Remove tools explicitly disabled via config so the model never sees them.\n if (disabledTools?.length) {\n for (const toolName of disabledTools) {\n delete tools[toolName];\n }\n }\n\n // Remove tools that have a per-tool 'deny' policy so the model never sees them.\n const permissionRules = state?.permissionRules;\n if (permissionRules?.tools) {\n for (const [name, policy] of Object.entries(permissionRules.tools)) {\n if (policy === 'deny') {\n delete tools[name];\n }\n }\n }\n\n return tools;\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ToolsInput } from '@mastra/core/agent';
|
|
2
|
+
import type { Mastra } from '@mastra/core/mastra';
|
|
3
|
+
import type { RequestContext } from '@mastra/core/request-context';
|
|
4
|
+
import { Workspace, LocalFilesystem, LocalSandbox } from '@mastra/core/workspace';
|
|
5
|
+
export declare function buildSkillPaths(projectPath: string, configDir: string, homeDir?: string, pluginSkillPaths?: string[]): string[];
|
|
6
|
+
export declare function getDynamicWorkspace({ requestContext, mastra, }: {
|
|
7
|
+
requestContext: RequestContext;
|
|
8
|
+
mastra?: Mastra;
|
|
9
|
+
}): Promise<Workspace<import("@mastra/core/workspace").WorkspaceFilesystem | undefined, import("@mastra/core/workspace").WorkspaceSandbox | undefined, undefined> | Workspace<LocalFilesystem, LocalSandbox, undefined>>;
|
|
10
|
+
/**
|
|
11
|
+
* Resolver for the agent's `goal.tools` config. Builds the request's workspace
|
|
12
|
+
* (same per-request resolution as the agent's own tools) and returns only the
|
|
13
|
+
* read-only verification subset, remapped to mastracode's tool names (`view`,
|
|
14
|
+
* `search_content`, etc.). Returns `undefined` when no workspace can be resolved
|
|
15
|
+
* (e.g. no project path), keeping the default judge text-only rather than
|
|
16
|
+
* throwing inside the goal step.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getGoalJudgeTools({ requestContext, mastra, }: {
|
|
19
|
+
requestContext: RequestContext;
|
|
20
|
+
mastra?: Mastra;
|
|
21
|
+
}): Promise<ToolsInput | undefined>;
|
|
22
|
+
//# sourceMappingURL=workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/agents/workspace.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAwB,MAAM,wBAAwB,CAAC;AAiFxG,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,SAAe,EACtB,gBAAgB,GAAE,MAAM,EAAO,GAC9B,MAAM,EAAE,CAiBV;AAgFD,wBAAsB,mBAAmB,CAAC,EACxC,cAAc,EACd,MAAM,GACP,EAAE;IACD,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,wNA2EA;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,EACtC,cAAc,EACd,MAAM,GACP,EAAE;IACD,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAclC"}
|