@mastra/code-sdk 0.0.0-aggregate-trace-20261015182851
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +32 -0
- package/README.md +284 -0
- package/dist/acp/agent.d.ts +48 -0
- package/dist/acp/agent.d.ts.map +1 -0
- package/dist/acp/agent.js +416 -0
- package/dist/acp/agent.js.map +1 -0
- package/dist/acp/errors.d.ts +3 -0
- package/dist/acp/errors.d.ts.map +1 -0
- package/dist/acp/errors.js +14 -0
- package/dist/acp/errors.js.map +1 -0
- package/dist/acp/event-mapper.d.ts +28 -0
- package/dist/acp/event-mapper.d.ts.map +1 -0
- package/dist/acp/event-mapper.js +279 -0
- package/dist/acp/event-mapper.js.map +1 -0
- package/dist/acp/index.d.ts +9 -0
- package/dist/acp/index.d.ts.map +1 -0
- package/dist/acp/index.js +24 -0
- package/dist/acp/index.js.map +1 -0
- package/dist/acp/runtime.d.ts +5 -0
- package/dist/acp/runtime.d.ts.map +1 -0
- package/dist/acp/runtime.js +91 -0
- package/dist/acp/runtime.js.map +1 -0
- package/dist/acp/server.d.ts +4 -0
- package/dist/acp/server.d.ts.map +1 -0
- package/dist/acp/server.js +38 -0
- package/dist/acp/server.js.map +1 -0
- package/dist/acp/skills.d.ts +6 -0
- package/dist/acp/skills.d.ts.map +1 -0
- package/dist/acp/skills.js +33 -0
- package/dist/acp/skills.js.map +1 -0
- package/dist/acp.d.ts +2 -0
- package/dist/acp.d.ts.map +1 -0
- package/dist/acp.js +2 -0
- package/dist/agent-connections/messaging-processor.d.ts +17 -0
- package/dist/agent-connections/messaging-processor.d.ts.map +1 -0
- package/dist/agent-connections/messaging-processor.js +134 -0
- package/dist/agent-connections/messaging-processor.js.map +1 -0
- package/dist/agent-connections/ownership.d.ts +24 -0
- package/dist/agent-connections/ownership.d.ts.map +1 -0
- package/dist/agent-connections/ownership.js +99 -0
- package/dist/agent-connections/ownership.js.map +1 -0
- package/dist/agent-connections/registry.d.ts +20 -0
- package/dist/agent-connections/registry.d.ts.map +1 -0
- package/dist/agent-connections/registry.js +170 -0
- package/dist/agent-connections/registry.js.map +1 -0
- package/dist/agent-connections/session-advertisement.d.ts +27 -0
- package/dist/agent-connections/session-advertisement.d.ts.map +1 -0
- package/dist/agent-connections/session-advertisement.js +89 -0
- package/dist/agent-connections/session-advertisement.js.map +1 -0
- package/dist/agent-connections/signal-provider.d.ts +141 -0
- package/dist/agent-connections/signal-provider.d.ts.map +1 -0
- package/dist/agent-connections/signal-provider.js +38 -0
- package/dist/agent-connections/signal-provider.js.map +1 -0
- package/dist/agent-connections/state-processor.d.ts +23 -0
- package/dist/agent-connections/state-processor.d.ts.map +1 -0
- package/dist/agent-connections/state-processor.js +273 -0
- package/dist/agent-connections/state-processor.js.map +1 -0
- package/dist/agent-connections/thread-state.d.ts +41 -0
- package/dist/agent-connections/thread-state.d.ts.map +1 -0
- package/dist/agent-connections/thread-state.js +160 -0
- package/dist/agent-connections/thread-state.js.map +1 -0
- package/dist/agent-connections/tools.d.ts +133 -0
- package/dist/agent-connections/tools.d.ts.map +1 -0
- package/dist/agent-connections/tools.js +552 -0
- package/dist/agent-connections/tools.js.map +1 -0
- package/dist/agent-connections/types.d.ts +99 -0
- package/dist/agent-connections/types.d.ts.map +1 -0
- package/dist/agent-connections/types.js +7 -0
- package/dist/agent-connections/types.js.map +1 -0
- package/dist/agent-connections/untrusted-text.d.ts +5 -0
- package/dist/agent-connections/untrusted-text.d.ts.map +1 -0
- package/dist/agent-connections/untrusted-text.js +22 -0
- package/dist/agent-connections/untrusted-text.js.map +1 -0
- package/dist/agents/background-completion-events.d.ts +16 -0
- package/dist/agents/background-completion-events.d.ts.map +1 -0
- package/dist/agents/background-completion-events.js +19 -0
- package/dist/agents/background-completion-events.js.map +1 -0
- package/dist/agents/background-completion.d.ts +9 -0
- package/dist/agents/background-completion.d.ts.map +1 -0
- package/dist/agents/background-completion.js +59 -0
- package/dist/agents/background-completion.js.map +1 -0
- package/dist/agents/context-audit.d.ts +84 -0
- package/dist/agents/context-audit.d.ts.map +1 -0
- package/dist/agents/context-audit.js +118 -0
- package/dist/agents/context-audit.js.map +1 -0
- package/dist/agents/credential-resolver.d.ts +67 -0
- package/dist/agents/credential-resolver.d.ts.map +1 -0
- package/dist/agents/credential-resolver.js +136 -0
- package/dist/agents/credential-resolver.js.map +1 -0
- package/dist/agents/custom-provider-source.d.ts +35 -0
- package/dist/agents/custom-provider-source.d.ts.map +1 -0
- package/dist/agents/custom-provider-source.js +25 -0
- package/dist/agents/custom-provider-source.js.map +1 -0
- package/dist/agents/instructions.d.ts +40 -0
- package/dist/agents/instructions.d.ts.map +1 -0
- package/dist/agents/instructions.js +63 -0
- package/dist/agents/instructions.js.map +1 -0
- package/dist/agents/mastracode-gateway.d.ts +76 -0
- package/dist/agents/mastracode-gateway.d.ts.map +1 -0
- package/dist/agents/mastracode-gateway.js +434 -0
- package/dist/agents/mastracode-gateway.js.map +1 -0
- package/dist/agents/memory.d.ts +39 -0
- package/dist/agents/memory.d.ts.map +1 -0
- package/dist/agents/memory.js +266 -0
- package/dist/agents/memory.js.map +1 -0
- package/dist/agents/model.d.ts +123 -0
- package/dist/agents/model.d.ts.map +1 -0
- package/dist/agents/model.js +295 -0
- package/dist/agents/model.js.map +1 -0
- package/dist/agents/modes/build.d.ts +12 -0
- package/dist/agents/modes/build.d.ts.map +1 -0
- package/dist/agents/modes/build.js +36 -0
- package/dist/agents/modes/build.js.map +1 -0
- package/dist/agents/modes/explore.d.ts +10 -0
- package/dist/agents/modes/explore.d.ts.map +1 -0
- package/dist/agents/modes/explore.js +28 -0
- package/dist/agents/modes/explore.js.map +1 -0
- package/dist/agents/modes/plan.d.ts +8 -0
- package/dist/agents/modes/plan.d.ts.map +1 -0
- package/dist/agents/modes/plan.js +46 -0
- package/dist/agents/modes/plan.js.map +1 -0
- package/dist/agents/prompts/agent-instructions.d.ts +99 -0
- package/dist/agents/prompts/agent-instructions.d.ts.map +1 -0
- package/dist/agents/prompts/agent-instructions.js +275 -0
- package/dist/agents/prompts/agent-instructions.js.map +1 -0
- package/dist/agents/prompts/build.d.ts +12 -0
- package/dist/agents/prompts/build.d.ts.map +1 -0
- package/dist/agents/prompts/build.js +76 -0
- package/dist/agents/prompts/build.js.map +1 -0
- package/dist/agents/prompts/fast.d.ts +5 -0
- package/dist/agents/prompts/fast.d.ts.map +1 -0
- package/dist/agents/prompts/fast.js +26 -0
- package/dist/agents/prompts/fast.js.map +1 -0
- package/dist/agents/prompts/index.d.ts +54 -0
- package/dist/agents/prompts/index.d.ts.map +1 -0
- package/dist/agents/prompts/index.js +127 -0
- package/dist/agents/prompts/index.js.map +1 -0
- package/dist/agents/prompts/model.d.ts +5 -0
- package/dist/agents/prompts/model.d.ts.map +1 -0
- package/dist/agents/prompts/model.js +23 -0
- package/dist/agents/prompts/model.js.map +1 -0
- package/dist/agents/prompts/plan.d.ts +8 -0
- package/dist/agents/prompts/plan.d.ts.map +1 -0
- package/dist/agents/prompts/plan.js +129 -0
- package/dist/agents/prompts/plan.js.map +1 -0
- package/dist/agents/prompts/tool-guidance.d.ts +18 -0
- package/dist/agents/prompts/tool-guidance.d.ts.map +1 -0
- package/dist/agents/prompts/tool-guidance.js +181 -0
- package/dist/agents/prompts/tool-guidance.js.map +1 -0
- package/dist/agents/sandbox-filesystem.d.ts +151 -0
- package/dist/agents/sandbox-filesystem.d.ts.map +1 -0
- package/dist/agents/sandbox-filesystem.js +581 -0
- package/dist/agents/sandbox-filesystem.js.map +1 -0
- package/dist/agents/subagents/execute.d.ts +3 -0
- package/dist/agents/subagents/execute.d.ts.map +1 -0
- package/dist/agents/subagents/execute.js +27 -0
- package/dist/agents/subagents/execute.js.map +1 -0
- package/dist/agents/subagents/explore.d.ts +3 -0
- package/dist/agents/subagents/explore.d.ts.map +1 -0
- package/dist/agents/subagents/explore.js +18 -0
- package/dist/agents/subagents/explore.js.map +1 -0
- package/dist/agents/subagents/plan.d.ts +3 -0
- package/dist/agents/subagents/plan.d.ts.map +1 -0
- package/dist/agents/subagents/plan.js +18 -0
- package/dist/agents/subagents/plan.js.map +1 -0
- package/dist/agents/thread-caveman-state.d.ts +17 -0
- package/dist/agents/thread-caveman-state.d.ts.map +1 -0
- package/dist/agents/thread-caveman-state.js +107 -0
- package/dist/agents/thread-caveman-state.js.map +1 -0
- package/dist/agents/tool-availability.d.ts +12 -0
- package/dist/agents/tool-availability.d.ts.map +1 -0
- package/dist/agents/tool-availability.js +129 -0
- package/dist/agents/tool-availability.js.map +1 -0
- package/dist/agents/tools.d.ts +37 -0
- package/dist/agents/tools.d.ts.map +1 -0
- package/dist/agents/tools.js +131 -0
- package/dist/agents/tools.js.map +1 -0
- package/dist/agents/workflow-builder-agent.d.ts +2 -0
- package/dist/agents/workflow-builder-agent.d.ts.map +1 -0
- package/dist/agents/workflow-builder-agent.js +82 -0
- package/dist/agents/workflow-builder-agent.js.map +1 -0
- package/dist/agents/workspace.d.ts +33 -0
- package/dist/agents/workspace.d.ts.map +1 -0
- package/dist/agents/workspace.js +208 -0
- package/dist/agents/workspace.js.map +1 -0
- package/dist/analytics.d.ts +18 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/analytics.js +162 -0
- package/dist/analytics.js.map +1 -0
- package/dist/auth/account-rotation-processor.d.ts +182 -0
- package/dist/auth/account-rotation-processor.d.ts.map +1 -0
- package/dist/auth/account-rotation-processor.js +609 -0
- package/dist/auth/account-rotation-processor.js.map +1 -0
- package/dist/auth/account-routing-context.d.ts +13 -0
- package/dist/auth/account-routing-context.d.ts.map +1 -0
- package/dist/auth/account-routing-context.js +41 -0
- package/dist/auth/account-routing-context.js.map +1 -0
- package/dist/auth/authorization-input.d.ts +16 -0
- package/dist/auth/authorization-input.d.ts.map +1 -0
- package/dist/auth/authorization-input.js +42 -0
- package/dist/auth/authorization-input.js.map +1 -0
- package/dist/auth/device-code.d.ts +93 -0
- package/dist/auth/device-code.d.ts.map +1 -0
- package/dist/auth/device-code.js +129 -0
- package/dist/auth/device-code.js.map +1 -0
- package/dist/auth/index.d.ts +13 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +9 -0
- package/dist/auth/pkce.d.ts +13 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +32 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/auth/provider-auth-error.d.ts +12 -0
- package/dist/auth/provider-auth-error.d.ts.map +1 -0
- package/dist/auth/provider-auth-error.js +16 -0
- package/dist/auth/provider-auth-error.js.map +1 -0
- package/dist/auth/providers/anthropic.d.ts +40 -0
- package/dist/auth/providers/anthropic.d.ts.map +1 -0
- package/dist/auth/providers/anthropic.js +120 -0
- package/dist/auth/providers/anthropic.js.map +1 -0
- package/dist/auth/providers/github-copilot.d.ts +154 -0
- package/dist/auth/providers/github-copilot.d.ts.map +1 -0
- package/dist/auth/providers/github-copilot.js +362 -0
- package/dist/auth/providers/github-copilot.js.map +1 -0
- package/dist/auth/providers/kimi-coding.d.ts +38 -0
- package/dist/auth/providers/kimi-coding.d.ts.map +1 -0
- package/dist/auth/providers/kimi-coding.js +228 -0
- package/dist/auth/providers/kimi-coding.js.map +1 -0
- package/dist/auth/providers/openai-codex.d.ts +141 -0
- package/dist/auth/providers/openai-codex.d.ts.map +1 -0
- package/dist/auth/providers/openai-codex.js +533 -0
- package/dist/auth/providers/openai-codex.js.map +1 -0
- package/dist/auth/providers/xai.d.ts +64 -0
- package/dist/auth/providers/xai.d.ts.map +1 -0
- package/dist/auth/providers/xai.js +226 -0
- package/dist/auth/providers/xai.js.map +1 -0
- package/dist/auth/storage.d.ts +214 -0
- package/dist/auth/storage.d.ts.map +1 -0
- package/dist/auth/storage.js +774 -0
- package/dist/auth/storage.js.map +1 -0
- package/dist/auth/types.d.ts +164 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +1 -0
- package/dist/clipboard/index.d.ts +26 -0
- package/dist/clipboard/index.d.ts.map +1 -0
- package/dist/clipboard/index.js +226 -0
- package/dist/clipboard/index.js.map +1 -0
- package/dist/constants.d.ts +12 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +20 -0
- package/dist/constants.js.map +1 -0
- package/dist/error-classification.d.ts +10 -0
- package/dist/error-classification.d.ts.map +1 -0
- package/dist/error-classification.js +22 -0
- package/dist/error-classification.js.map +1 -0
- package/dist/evals/context-builder.d.ts +41 -0
- package/dist/evals/context-builder.d.ts.map +1 -0
- package/dist/evals/context-builder.js +161 -0
- package/dist/evals/context-builder.js.map +1 -0
- package/dist/evals/index.d.ts +4 -0
- package/dist/evals/index.d.ts.map +1 -0
- package/dist/evals/index.js +5 -0
- package/dist/evals/scorers/classify-command.d.ts +31 -0
- package/dist/evals/scorers/classify-command.d.ts.map +1 -0
- package/dist/evals/scorers/classify-command.js +73 -0
- package/dist/evals/scorers/classify-command.js.map +1 -0
- package/dist/evals/scorers/efficiency.d.ts +44 -0
- package/dist/evals/scorers/efficiency.d.ts.map +1 -0
- package/dist/evals/scorers/efficiency.js +259 -0
- package/dist/evals/scorers/efficiency.js.map +1 -0
- package/dist/evals/scorers/extract-tools.d.ts +25 -0
- package/dist/evals/scorers/extract-tools.d.ts.map +1 -0
- package/dist/evals/scorers/extract-tools.js +60 -0
- package/dist/evals/scorers/extract-tools.js.map +1 -0
- package/dist/evals/scorers/index.d.ts +3 -0
- package/dist/evals/scorers/index.d.ts.map +1 -0
- package/dist/evals/scorers/index.js +3 -0
- package/dist/evals/scorers/outcome.d.ts +49 -0
- package/dist/evals/scorers/outcome.d.ts.map +1 -0
- package/dist/evals/scorers/outcome.js +347 -0
- package/dist/evals/scorers/outcome.js.map +1 -0
- package/dist/experimental-agent.d.ts +11 -0
- package/dist/experimental-agent.d.ts.map +1 -0
- package/dist/experimental-agent.js +36 -0
- package/dist/experimental-agent.js.map +1 -0
- package/dist/goal-manager.d.ts +114 -0
- package/dist/goal-manager.d.ts.map +1 -0
- package/dist/goal-manager.js +354 -0
- package/dist/goal-manager.js.map +1 -0
- package/dist/goal-signal.d.ts +14 -0
- package/dist/goal-signal.d.ts.map +1 -0
- package/dist/goal-signal.js +17 -0
- package/dist/goal-signal.js.map +1 -0
- package/dist/headless/cli.d.ts +48 -0
- package/dist/headless/cli.d.ts.map +1 -0
- package/dist/headless/cli.js +239 -0
- package/dist/headless/cli.js.map +1 -0
- package/dist/headless/flags.d.ts +33 -0
- package/dist/headless/flags.d.ts.map +1 -0
- package/dist/headless/flags.js +203 -0
- package/dist/headless/flags.js.map +1 -0
- package/dist/headless/format.d.ts +39 -0
- package/dist/headless/format.d.ts.map +1 -0
- package/dist/headless/format.js +85 -0
- package/dist/headless/format.js.map +1 -0
- package/dist/headless/index.d.ts +25 -0
- package/dist/headless/index.d.ts.map +1 -0
- package/dist/headless/index.js +6 -0
- package/dist/headless/policy.d.ts +17 -0
- package/dist/headless/policy.d.ts.map +1 -0
- package/dist/headless/policy.js +42 -0
- package/dist/headless/policy.js.map +1 -0
- package/dist/headless/run-mc.d.ts +7 -0
- package/dist/headless/run-mc.d.ts.map +1 -0
- package/dist/headless/run-mc.js +408 -0
- package/dist/headless/run-mc.js.map +1 -0
- package/dist/headless/types.d.ts +174 -0
- package/dist/headless/types.d.ts.map +1 -0
- package/dist/headless/types.js +19 -0
- package/dist/headless/types.js.map +1 -0
- package/dist/hooks/config.d.ts +11 -0
- package/dist/hooks/config.d.ts.map +1 -0
- package/dist/hooks/config.js +80 -0
- package/dist/hooks/config.js.map +1 -0
- package/dist/hooks/executor.d.ts +13 -0
- package/dist/hooks/executor.d.ts.map +1 -0
- package/dist/hooks/executor.js +129 -0
- package/dist/hooks/executor.js.map +1 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +5 -0
- package/dist/hooks/manager.d.ts +54 -0
- package/dist/hooks/manager.d.ts.map +1 -0
- package/dist/hooks/manager.js +241 -0
- package/dist/hooks/manager.js.map +1 -0
- package/dist/hooks/types.d.ts +172 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +8 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +463 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1305 -0
- package/dist/index.js.map +1 -0
- package/dist/ipc/ipc-reporter.d.ts +14 -0
- package/dist/ipc/ipc-reporter.d.ts.map +1 -0
- package/dist/ipc/ipc-reporter.js +21 -0
- package/dist/ipc/ipc-reporter.js.map +1 -0
- package/dist/knowledge-inspector.d.ts +123 -0
- package/dist/knowledge-inspector.d.ts.map +1 -0
- package/dist/knowledge-inspector.js +516 -0
- package/dist/knowledge-inspector.js.map +1 -0
- package/dist/knowledge-scope.d.ts +35 -0
- package/dist/knowledge-scope.d.ts.map +1 -0
- package/dist/knowledge-scope.js +47 -0
- package/dist/knowledge-scope.js.map +1 -0
- package/dist/lsp/client.d.ts +56 -0
- package/dist/lsp/client.d.ts.map +1 -0
- package/dist/lsp/client.js +251 -0
- package/dist/lsp/client.js.map +1 -0
- package/dist/lsp/index.d.ts +4 -0
- package/dist/lsp/index.d.ts.map +1 -0
- package/dist/lsp/index.js +4 -0
- package/dist/lsp/language.d.ts +9 -0
- package/dist/lsp/language.d.ts.map +1 -0
- package/dist/lsp/language.js +44 -0
- package/dist/lsp/language.js.map +1 -0
- package/dist/lsp/manager.d.ts +34 -0
- package/dist/lsp/manager.d.ts.map +1 -0
- package/dist/lsp/manager.js +82 -0
- package/dist/lsp/manager.js.map +1 -0
- package/dist/lsp/server.d.ts +27 -0
- package/dist/lsp/server.d.ts.map +1 -0
- package/dist/lsp/server.js +159 -0
- package/dist/lsp/server.js.map +1 -0
- package/dist/lsp/workspace.d.ts +9 -0
- package/dist/lsp/workspace.d.ts.map +1 -0
- package/dist/lsp/workspace.js +55 -0
- package/dist/lsp/workspace.js.map +1 -0
- package/dist/mcp/config.d.ts +77 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +316 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/index.d.ts +6 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +3 -0
- package/dist/mcp/manager.d.ts +102 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +650 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/state.d.ts +35 -0
- package/dist/mcp/state.d.ts.map +1 -0
- package/dist/mcp/state.js +97 -0
- package/dist/mcp/state.js.map +1 -0
- package/dist/mcp/types.d.ts +139 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +1 -0
- package/dist/onboarding/custom-packs.d.ts +7 -0
- package/dist/onboarding/custom-packs.d.ts.map +1 -0
- package/dist/onboarding/custom-packs.js +20 -0
- package/dist/onboarding/custom-packs.js.map +1 -0
- package/dist/onboarding/custom-providers.d.ts +4 -0
- package/dist/onboarding/custom-providers.d.ts.map +1 -0
- package/dist/onboarding/custom-providers.js +30 -0
- package/dist/onboarding/custom-providers.js.map +1 -0
- package/dist/onboarding/index.d.ts +5 -0
- package/dist/onboarding/index.d.ts.map +1 -0
- package/dist/onboarding/index.js +3 -0
- package/dist/onboarding/om-settings.d.ts +47 -0
- package/dist/onboarding/om-settings.d.ts.map +1 -0
- package/dist/onboarding/om-settings.js +83 -0
- package/dist/onboarding/om-settings.js.map +1 -0
- package/dist/onboarding/pack-activation.d.ts +52 -0
- package/dist/onboarding/pack-activation.d.ts.map +1 -0
- package/dist/onboarding/pack-activation.js +108 -0
- package/dist/onboarding/pack-activation.js.map +1 -0
- package/dist/onboarding/packs.d.ts +102 -0
- package/dist/onboarding/packs.d.ts.map +1 -0
- package/dist/onboarding/packs.js +278 -0
- package/dist/onboarding/packs.js.map +1 -0
- package/dist/onboarding/settings.d.ts +538 -0
- package/dist/onboarding/settings.d.ts.map +1 -0
- package/dist/onboarding/settings.js +1060 -0
- package/dist/onboarding/settings.js.map +1 -0
- package/dist/permissions.d.ts +55 -0
- package/dist/permissions.d.ts.map +1 -0
- package/dist/permissions.js +142 -0
- package/dist/permissions.js.map +1 -0
- package/dist/plugin.d.ts +156 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +30 -0
- package/dist/plugin.js.map +1 -0
- package/dist/plugins/dependencies.d.ts +9 -0
- package/dist/plugins/dependencies.d.ts.map +1 -0
- package/dist/plugins/dependencies.js +87 -0
- package/dist/plugins/dependencies.js.map +1 -0
- package/dist/plugins/install.d.ts +21 -0
- package/dist/plugins/install.d.ts.map +1 -0
- package/dist/plugins/install.js +190 -0
- package/dist/plugins/install.js.map +1 -0
- package/dist/plugins/loader.d.ts +19 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +260 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +98 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +456 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/manifest.d.ts +14 -0
- package/dist/plugins/manifest.d.ts.map +1 -0
- package/dist/plugins/manifest.js +50 -0
- package/dist/plugins/manifest.js.map +1 -0
- package/dist/plugins/package-link.d.ts +3 -0
- package/dist/plugins/package-link.d.ts.map +1 -0
- package/dist/plugins/package-link.js +61 -0
- package/dist/plugins/package-link.js.map +1 -0
- package/dist/plugins/paths.d.ts +10 -0
- package/dist/plugins/paths.d.ts.map +1 -0
- package/dist/plugins/paths.js +25 -0
- package/dist/plugins/paths.js.map +1 -0
- package/dist/plugins/registry.d.ts +8 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +112 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/scaffold.d.ts +10 -0
- package/dist/plugins/scaffold.d.ts.map +1 -0
- package/dist/plugins/scaffold.js +116 -0
- package/dist/plugins/scaffold.js.map +1 -0
- package/dist/plugins/signal-lane.d.ts +58 -0
- package/dist/plugins/signal-lane.d.ts.map +1 -0
- package/dist/plugins/signal-lane.js +166 -0
- package/dist/plugins/signal-lane.js.map +1 -0
- package/dist/plugins/types.d.ts +81 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +1 -0
- package/dist/process-memory-diagnostics.d.ts +135 -0
- package/dist/process-memory-diagnostics.d.ts.map +1 -0
- package/dist/process-memory-diagnostics.js +499 -0
- package/dist/process-memory-diagnostics.js.map +1 -0
- package/dist/processors/plan-rejection-abort.d.ts +12 -0
- package/dist/processors/plan-rejection-abort.d.ts.map +1 -0
- package/dist/processors/plan-rejection-abort.js +54 -0
- package/dist/processors/plan-rejection-abort.js.map +1 -0
- package/dist/providers/amazon-bedrock-gateway.d.ts +47 -0
- package/dist/providers/amazon-bedrock-gateway.d.ts.map +1 -0
- package/dist/providers/amazon-bedrock-gateway.js +144 -0
- package/dist/providers/amazon-bedrock-gateway.js.map +1 -0
- package/dist/providers/amazon-bedrock.d.ts +28 -0
- package/dist/providers/amazon-bedrock.d.ts.map +1 -0
- package/dist/providers/amazon-bedrock.js +102 -0
- package/dist/providers/amazon-bedrock.js.map +1 -0
- package/dist/providers/anthropic-prompt-cache.d.ts +19 -0
- package/dist/providers/anthropic-prompt-cache.d.ts.map +1 -0
- package/dist/providers/anthropic-prompt-cache.js +11 -0
- package/dist/providers/anthropic-prompt-cache.js.map +1 -0
- package/dist/providers/anthropic-thinking.d.ts +5 -0
- package/dist/providers/anthropic-thinking.d.ts.map +1 -0
- package/dist/providers/anthropic-thinking.js +25 -0
- package/dist/providers/anthropic-thinking.js.map +1 -0
- package/dist/providers/claude-max.d.ts +67 -0
- package/dist/providers/claude-max.d.ts.map +1 -0
- package/dist/providers/claude-max.js +226 -0
- package/dist/providers/claude-max.js.map +1 -0
- package/dist/providers/github-copilot-gateway.d.ts +35 -0
- package/dist/providers/github-copilot-gateway.d.ts.map +1 -0
- package/dist/providers/github-copilot-gateway.js +61 -0
- package/dist/providers/github-copilot-gateway.js.map +1 -0
- package/dist/providers/github-copilot.d.ts +60 -0
- package/dist/providers/github-copilot.d.ts.map +1 -0
- package/dist/providers/github-copilot.js +318 -0
- package/dist/providers/github-copilot.js.map +1 -0
- package/dist/providers/google-thinking.d.ts +31 -0
- package/dist/providers/google-thinking.d.ts.map +1 -0
- package/dist/providers/google-thinking.js +67 -0
- package/dist/providers/google-thinking.js.map +1 -0
- package/dist/providers/kimi-coding.d.ts +14 -0
- package/dist/providers/kimi-coding.d.ts.map +1 -0
- package/dist/providers/kimi-coding.js +78 -0
- package/dist/providers/kimi-coding.js.map +1 -0
- package/dist/providers/model-ids.d.ts +30 -0
- package/dist/providers/model-ids.d.ts.map +1 -0
- package/dist/providers/model-ids.js +79 -0
- package/dist/providers/model-ids.js.map +1 -0
- package/dist/providers/openai-codex.d.ts +84 -0
- package/dist/providers/openai-codex.d.ts.map +1 -0
- package/dist/providers/openai-codex.js +347 -0
- package/dist/providers/openai-codex.js.map +1 -0
- package/dist/providers/provider-thinking.d.ts +23 -0
- package/dist/providers/provider-thinking.d.ts.map +1 -0
- package/dist/providers/provider-thinking.js +64 -0
- package/dist/providers/provider-thinking.js.map +1 -0
- package/dist/providers/thinking-request.d.ts +14 -0
- package/dist/providers/thinking-request.d.ts.map +1 -0
- package/dist/providers/thinking-request.js +90 -0
- package/dist/providers/thinking-request.js.map +1 -0
- package/dist/providers/xai.d.ts +33 -0
- package/dist/providers/xai.d.ts.map +1 -0
- package/dist/providers/xai.js +71 -0
- package/dist/providers/xai.js.map +1 -0
- package/dist/schedules/index.d.ts +10 -0
- package/dist/schedules/index.d.ts.map +1 -0
- package/dist/schedules/index.js +6 -0
- package/dist/schedules/interval.d.ts +49 -0
- package/dist/schedules/interval.d.ts.map +1 -0
- package/dist/schedules/interval.js +215 -0
- package/dist/schedules/interval.js.map +1 -0
- package/dist/schedules/prompt.d.ts +36 -0
- package/dist/schedules/prompt.d.ts.map +1 -0
- package/dist/schedules/prompt.js +39 -0
- package/dist/schedules/prompt.js.map +1 -0
- package/dist/schedules/run-script.d.ts +8 -0
- package/dist/schedules/run-script.d.ts.map +1 -0
- package/dist/schedules/run-script.js +83 -0
- package/dist/schedules/run-script.js.map +1 -0
- package/dist/schedules/scheduler.d.ts +101 -0
- package/dist/schedules/scheduler.d.ts.map +1 -0
- package/dist/schedules/scheduler.js +169 -0
- package/dist/schedules/scheduler.js.map +1 -0
- package/dist/schedules/tools.d.ts +57 -0
- package/dist/schedules/tools.d.ts.map +1 -0
- package/dist/schedules/tools.js +220 -0
- package/dist/schedules/tools.js.map +1 -0
- package/dist/schema.d.ts +499 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +134 -0
- package/dist/schema.js.map +1 -0
- package/dist/theme-palette.d.ts +17 -0
- package/dist/theme-palette.d.ts.map +1 -0
- package/dist/theme-palette.js +21 -0
- package/dist/theme-palette.js.map +1 -0
- package/dist/thinking-catalog.d.ts +4 -0
- package/dist/thinking-catalog.d.ts.map +1 -0
- package/dist/thinking-catalog.js +13 -0
- package/dist/thinking-catalog.js.map +1 -0
- package/dist/thinking.d.ts +37 -0
- package/dist/thinking.d.ts.map +1 -0
- package/dist/thinking.js +137 -0
- package/dist/thinking.js.map +1 -0
- package/dist/tool-names.d.ts +77 -0
- package/dist/tool-names.d.ts.map +1 -0
- package/dist/tool-names.js +56 -0
- package/dist/tool-names.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +3 -0
- package/dist/tools/request-sandbox-access.d.ts +6 -0
- package/dist/tools/request-sandbox-access.d.ts.map +1 -0
- package/dist/tools/request-sandbox-access.js +80 -0
- package/dist/tools/request-sandbox-access.js.map +1 -0
- package/dist/tools/utils.d.ts +20 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +32 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools/web-search.d.ts +114 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +155 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/tools/workflows/create-workflow.d.ts +7 -0
- package/dist/tools/workflows/create-workflow.d.ts.map +1 -0
- package/dist/tools/workflows/create-workflow.js +81 -0
- package/dist/tools/workflows/create-workflow.js.map +1 -0
- package/dist/tools/workflows/delete-workflow.d.ts +7 -0
- package/dist/tools/workflows/delete-workflow.d.ts.map +1 -0
- package/dist/tools/workflows/delete-workflow.js +21 -0
- package/dist/tools/workflows/delete-workflow.js.map +1 -0
- package/dist/tools/workflows/ephemeral-memory.d.ts +28 -0
- package/dist/tools/workflows/ephemeral-memory.d.ts.map +1 -0
- package/dist/tools/workflows/ephemeral-memory.js +44 -0
- package/dist/tools/workflows/ephemeral-memory.js.map +1 -0
- package/dist/tools/workflows/extract-json-schema.d.ts +12 -0
- package/dist/tools/workflows/extract-json-schema.d.ts.map +1 -0
- package/dist/tools/workflows/extract-json-schema.js +22 -0
- package/dist/tools/workflows/extract-json-schema.js.map +1 -0
- package/dist/tools/workflows/get-workflow.d.ts +11 -0
- package/dist/tools/workflows/get-workflow.d.ts.map +1 -0
- package/dist/tools/workflows/get-workflow.js +34 -0
- package/dist/tools/workflows/get-workflow.js.map +1 -0
- package/dist/tools/workflows/list-available-agents.d.ts +8 -0
- package/dist/tools/workflows/list-available-agents.d.ts.map +1 -0
- package/dist/tools/workflows/list-available-agents.js +32 -0
- package/dist/tools/workflows/list-available-agents.js.map +1 -0
- package/dist/tools/workflows/list-available-classifiers.d.ts +19 -0
- package/dist/tools/workflows/list-available-classifiers.d.ts.map +1 -0
- package/dist/tools/workflows/list-available-classifiers.js +56 -0
- package/dist/tools/workflows/list-available-classifiers.js.map +1 -0
- package/dist/tools/workflows/list-available-tools.d.ts +9 -0
- package/dist/tools/workflows/list-available-tools.d.ts.map +1 -0
- package/dist/tools/workflows/list-available-tools.js +40 -0
- package/dist/tools/workflows/list-available-tools.js.map +1 -0
- package/dist/tools/workflows/list-available-workflows.d.ts +9 -0
- package/dist/tools/workflows/list-available-workflows.d.ts.map +1 -0
- package/dist/tools/workflows/list-available-workflows.js +32 -0
- package/dist/tools/workflows/list-available-workflows.js.map +1 -0
- package/dist/tools/workflows/list-workflows.d.ts +9 -0
- package/dist/tools/workflows/list-workflows.d.ts.map +1 -0
- package/dist/tools/workflows/list-workflows.js +33 -0
- package/dist/tools/workflows/list-workflows.js.map +1 -0
- package/dist/tools/workflows/run-workflow.d.ts +9 -0
- package/dist/tools/workflows/run-workflow.d.ts.map +1 -0
- package/dist/tools/workflows/run-workflow.js +52 -0
- package/dist/tools/workflows/run-workflow.js.map +1 -0
- package/dist/tools/workflows/save-workflow.d.ts +1125 -0
- package/dist/tools/workflows/save-workflow.d.ts.map +1 -0
- package/dist/tools/workflows/save-workflow.js +28 -0
- package/dist/tools/workflows/save-workflow.js.map +1 -0
- package/dist/tools/workflows/tool-ids.d.ts +16 -0
- package/dist/tools/workflows/tool-ids.d.ts.map +1 -0
- package/dist/tools/workflows/tool-ids.js +20 -0
- package/dist/tools/workflows/tool-ids.js.map +1 -0
- package/dist/utils/binaries.d.ts +7 -0
- package/dist/utils/binaries.d.ts.map +1 -0
- package/dist/utils/binaries.js +78 -0
- package/dist/utils/binaries.js.map +1 -0
- package/dist/utils/debug-log.d.ts +12 -0
- package/dist/utils/debug-log.d.ts.map +1 -0
- package/dist/utils/debug-log.js +59 -0
- package/dist/utils/debug-log.js.map +1 -0
- package/dist/utils/discarding-scores-storage.d.ts +33 -0
- package/dist/utils/discarding-scores-storage.d.ts.map +1 -0
- package/dist/utils/discarding-scores-storage.js +54 -0
- package/dist/utils/discarding-scores-storage.js.map +1 -0
- package/dist/utils/errors.d.ts +36 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +196 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/gateway-sync.d.ts +26 -0
- package/dist/utils/gateway-sync.d.ts.map +1 -0
- package/dist/utils/gateway-sync.js +61 -0
- package/dist/utils/gateway-sync.js.map +1 -0
- package/dist/utils/maintenance-lock.d.ts +42 -0
- package/dist/utils/maintenance-lock.d.ts.map +1 -0
- package/dist/utils/maintenance-lock.js +199 -0
- package/dist/utils/maintenance-lock.js.map +1 -0
- package/dist/utils/notification-dispatch.d.ts +59 -0
- package/dist/utils/notification-dispatch.d.ts.map +1 -0
- package/dist/utils/notification-dispatch.js +109 -0
- package/dist/utils/notification-dispatch.js.map +1 -0
- package/dist/utils/open-url.d.ts +10 -0
- package/dist/utils/open-url.d.ts.map +1 -0
- package/dist/utils/open-url.js +30 -0
- package/dist/utils/open-url.js.map +1 -0
- package/dist/utils/path-security.d.ts +2 -0
- package/dist/utils/path-security.d.ts.map +1 -0
- package/dist/utils/path-security.js +10 -0
- package/dist/utils/path-security.js.map +1 -0
- package/dist/utils/plan-diff.d.ts +25 -0
- package/dist/utils/plan-diff.d.ts.map +1 -0
- package/dist/utils/plan-diff.js +62 -0
- package/dist/utils/plan-diff.js.map +1 -0
- package/dist/utils/plans.d.ts +59 -0
- package/dist/utils/plans.d.ts.map +1 -0
- package/dist/utils/plans.js +117 -0
- package/dist/utils/plans.js.map +1 -0
- package/dist/utils/project.d.ts +160 -0
- package/dist/utils/project.d.ts.map +1 -0
- package/dist/utils/project.js +364 -0
- package/dist/utils/project.js.map +1 -0
- package/dist/utils/prune-cli.d.ts +24 -0
- package/dist/utils/prune-cli.d.ts.map +1 -0
- package/dist/utils/prune-cli.js +125 -0
- package/dist/utils/prune-cli.js.map +1 -0
- package/dist/utils/signals-pubsub.d.ts +101 -0
- package/dist/utils/signals-pubsub.d.ts.map +1 -0
- package/dist/utils/signals-pubsub.js +410 -0
- package/dist/utils/signals-pubsub.js.map +1 -0
- package/dist/utils/slash-command-loader.d.ts +52 -0
- package/dist/utils/slash-command-loader.d.ts.map +1 -0
- package/dist/utils/slash-command-loader.js +142 -0
- package/dist/utils/slash-command-loader.js.map +1 -0
- package/dist/utils/slash-command-processor.d.ts +14 -0
- package/dist/utils/slash-command-processor.d.ts.map +1 -0
- package/dist/utils/slash-command-processor.js +109 -0
- package/dist/utils/slash-command-processor.js.map +1 -0
- package/dist/utils/stdin-pipe.d.ts +33 -0
- package/dist/utils/stdin-pipe.d.ts.map +1 -0
- package/dist/utils/stdin-pipe.js +96 -0
- package/dist/utils/stdin-pipe.js.map +1 -0
- package/dist/utils/storage-factory.d.ts +50 -0
- package/dist/utils/storage-factory.d.ts.map +1 -0
- package/dist/utils/storage-factory.js +121 -0
- package/dist/utils/storage-factory.js.map +1 -0
- package/dist/utils/storage-maintenance.d.ts +121 -0
- package/dist/utils/storage-maintenance.d.ts.map +1 -0
- package/dist/utils/storage-maintenance.js +355 -0
- package/dist/utils/storage-maintenance.js.map +1 -0
- package/dist/utils/thread-lock.d.ts +26 -0
- package/dist/utils/thread-lock.d.ts.map +1 -0
- package/dist/utils/thread-lock.js +112 -0
- package/dist/utils/thread-lock.js.map +1 -0
- package/dist/utils/token-estimator.d.ts +3 -0
- package/dist/utils/token-estimator.d.ts.map +1 -0
- package/dist/utils/token-estimator.js +21 -0
- package/dist/utils/token-estimator.js.map +1 -0
- package/dist/utils/update-check.d.ts +151 -0
- package/dist/utils/update-check.d.ts.map +1 -0
- package/dist/utils/update-check.js +432 -0
- package/dist/utils/update-check.js.map +1 -0
- package/dist/voice/stt-registry.d.ts +64 -0
- package/dist/voice/stt-registry.d.ts.map +1 -0
- package/dist/voice/stt-registry.js +144 -0
- package/dist/voice/stt-registry.js.map +1 -0
- package/dist/workflows/register-primitives.d.ts +52 -0
- package/dist/workflows/register-primitives.d.ts.map +1 -0
- package/dist/workflows/register-primitives.js +40 -0
- package/dist/workflows/register-primitives.js.map +1 -0
- package/dist/workflows/service.d.ts +64 -0
- package/dist/workflows/service.d.ts.map +1 -0
- package/dist/workflows/service.js +53 -0
- package/dist/workflows/service.js.map +1 -0
- package/package.json +107 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import { fileURLToPath } from "url";
|
|
4
|
+
//#region src/plugins/package-link.ts
|
|
5
|
+
const MODULE_DIR = path.dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
let cachedPackageRoot;
|
|
7
|
+
function mastraCodePackageRoot() {
|
|
8
|
+
if (cachedPackageRoot === void 0) try {
|
|
9
|
+
cachedPackageRoot = findMastraCodePackageRoot(MODULE_DIR);
|
|
10
|
+
} catch (error) {
|
|
11
|
+
const entryScript = process.argv[1];
|
|
12
|
+
if (!entryScript) throw error;
|
|
13
|
+
cachedPackageRoot = findMastraCodePackageRoot(path.dirname(fs.realpathSync(entryScript)));
|
|
14
|
+
}
|
|
15
|
+
return cachedPackageRoot;
|
|
16
|
+
}
|
|
17
|
+
function readPackageName(dir) {
|
|
18
|
+
const packageJsonPath = path.join(dir, "package.json");
|
|
19
|
+
if (!fs.existsSync(packageJsonPath)) return void 0;
|
|
20
|
+
return JSON.parse(fs.readFileSync(packageJsonPath, "utf8")).name;
|
|
21
|
+
}
|
|
22
|
+
function findMastraCodePackageRoot(startDir) {
|
|
23
|
+
let currentDir = path.resolve(startDir);
|
|
24
|
+
while (true) {
|
|
25
|
+
const packageName = readPackageName(currentDir);
|
|
26
|
+
if (packageName === "mastracode") return currentDir;
|
|
27
|
+
if (packageName === "@mastra/code-sdk") {
|
|
28
|
+
for (const candidate of [path.resolve(currentDir, "..", "tui"), path.resolve(currentDir, "..", "..", "mastracode")]) if (readPackageName(candidate) === "mastracode") return candidate;
|
|
29
|
+
}
|
|
30
|
+
const parentDir = path.dirname(currentDir);
|
|
31
|
+
if (parentDir === currentDir) throw new Error(`Could not find mastracode package root from ${startDir}`);
|
|
32
|
+
currentDir = parentDir;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function ensureMastraCodePackageLink(pluginDir) {
|
|
36
|
+
if (declaresInstallableMastraCodeDependency(pluginDir)) return;
|
|
37
|
+
const packageRoot = mastraCodePackageRoot();
|
|
38
|
+
const nodeModulesDir = path.join(pluginDir, "node_modules");
|
|
39
|
+
const linkPath = path.join(nodeModulesDir, "mastracode");
|
|
40
|
+
try {
|
|
41
|
+
if (fs.realpathSync(linkPath) === fs.realpathSync(packageRoot)) return;
|
|
42
|
+
fs.rmSync(linkPath, {
|
|
43
|
+
recursive: true,
|
|
44
|
+
force: true
|
|
45
|
+
});
|
|
46
|
+
} catch (error) {
|
|
47
|
+
if (error.code !== "ENOENT") throw error;
|
|
48
|
+
}
|
|
49
|
+
fs.mkdirSync(nodeModulesDir, { recursive: true });
|
|
50
|
+
fs.symlinkSync(packageRoot, linkPath, "dir");
|
|
51
|
+
}
|
|
52
|
+
function declaresInstallableMastraCodeDependency(pluginDir) {
|
|
53
|
+
const packageJsonPath = path.join(pluginDir, "package.json");
|
|
54
|
+
if (!fs.existsSync(packageJsonPath)) return false;
|
|
55
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
|
|
56
|
+
return Boolean(packageJson.dependencies?.mastracode ?? packageJson.devDependencies?.mastracode ?? packageJson.optionalDependencies?.mastracode);
|
|
57
|
+
}
|
|
58
|
+
//#endregion
|
|
59
|
+
export { ensureMastraCodePackageLink, findMastraCodePackageRoot };
|
|
60
|
+
|
|
61
|
+
//# sourceMappingURL=package-link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-link.js","names":[],"sources":["../../src/plugins/package-link.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst MODULE_DIR = path.dirname(fileURLToPath(import.meta.url));\n\nlet cachedPackageRoot: string | undefined;\n\n// This module ships in @mastra/code-sdk, so the `mastracode` package root is\n// resolved lazily: from the module location (source tree / bundled dist), or —\n// for the published CLI where the sdk is an external dependency — from the\n// entry script, which lives inside the `mastracode` package.\nfunction mastraCodePackageRoot(): string {\n if (cachedPackageRoot === undefined) {\n try {\n cachedPackageRoot = findMastraCodePackageRoot(MODULE_DIR);\n } catch (error) {\n const entryScript = process.argv[1];\n if (!entryScript) throw error;\n cachedPackageRoot = findMastraCodePackageRoot(path.dirname(fs.realpathSync(entryScript)));\n }\n }\n return cachedPackageRoot;\n}\n\nfunction readPackageName(dir: string): string | undefined {\n const packageJsonPath = path.join(dir, 'package.json');\n if (!fs.existsSync(packageJsonPath)) return undefined;\n return (JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')) as { name?: string }).name;\n}\n\nexport function findMastraCodePackageRoot(startDir: string): string {\n let currentDir = path.resolve(startDir);\n\n while (true) {\n const packageName = readPackageName(currentDir);\n if (packageName === 'mastracode') {\n return currentDir;\n }\n if (packageName === '@mastra/code-sdk') {\n // The `mastracode` package sits next to the sdk: mastracode/sdk ↔\n // mastracode/tui in the source tree, node_modules/@mastra/code-sdk ↔\n // node_modules/mastracode when installed.\n for (const candidate of [\n path.resolve(currentDir, '..', 'tui'),\n path.resolve(currentDir, '..', '..', 'mastracode'),\n ]) {\n if (readPackageName(candidate) === 'mastracode') {\n return candidate;\n }\n }\n }\n\n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) {\n throw new Error(`Could not find mastracode package root from ${startDir}`);\n }\n currentDir = parentDir;\n }\n}\n\nexport function ensureMastraCodePackageLink(pluginDir: string): void {\n if (declaresInstallableMastraCodeDependency(pluginDir)) {\n return;\n }\n\n const packageRoot = mastraCodePackageRoot();\n const nodeModulesDir = path.join(pluginDir, 'node_modules');\n const linkPath = path.join(nodeModulesDir, 'mastracode');\n try {\n if (fs.realpathSync(linkPath) === fs.realpathSync(packageRoot)) {\n return;\n }\n fs.rmSync(linkPath, { recursive: true, force: true });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error;\n }\n\n fs.mkdirSync(nodeModulesDir, { recursive: true });\n fs.symlinkSync(packageRoot, linkPath, 'dir');\n}\n\nfunction declaresInstallableMastraCodeDependency(pluginDir: string): boolean {\n const packageJsonPath = path.join(pluginDir, 'package.json');\n if (!fs.existsSync(packageJsonPath)) return false;\n\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')) as {\n dependencies?: Record<string, unknown>;\n devDependencies?: Record<string, unknown>;\n optionalDependencies?: Record<string, unknown>;\n };\n\n return Boolean(\n packageJson.dependencies?.mastracode ??\n packageJson.devDependencies?.mastracode ??\n packageJson.optionalDependencies?.mastracode,\n );\n}\n"],"mappings":";;;;AAIA,MAAM,aAAa,KAAK,QAAQ,cAAc,OAAO,KAAK,GAAG,CAAC;AAE9D,IAAI;AAMJ,SAAS,wBAAgC;CACvC,IAAI,sBAAsB,KAAA,GACxB,IAAI;EACF,oBAAoB,0BAA0B,UAAU;CAC1D,SAAS,OAAO;EACd,MAAM,cAAc,QAAQ,KAAK;EACjC,IAAI,CAAC,aAAa,MAAM;EACxB,oBAAoB,0BAA0B,KAAK,QAAQ,GAAG,aAAa,WAAW,CAAC,CAAC;CAC1F;CAEF,OAAO;AACT;AAEA,SAAS,gBAAgB,KAAiC;CACxD,MAAM,kBAAkB,KAAK,KAAK,KAAK,cAAc;CACrD,IAAI,CAAC,GAAG,WAAW,eAAe,GAAG,OAAO,KAAA;CAC5C,OAAQ,KAAK,MAAM,GAAG,aAAa,iBAAiB,MAAM,CAAC,CAAC,CAAuB;AACrF;AAEA,SAAgB,0BAA0B,UAA0B;CAClE,IAAI,aAAa,KAAK,QAAQ,QAAQ;CAEtC,OAAO,MAAM;EACX,MAAM,cAAc,gBAAgB,UAAU;EAC9C,IAAI,gBAAgB,cAClB,OAAO;EAET,IAAI,gBAAgB,oBAIb;QAAA,MAAM,aAAa,CACtB,KAAK,QAAQ,YAAY,MAAM,KAAK,GACpC,KAAK,QAAQ,YAAY,MAAM,MAAM,YAAY,CACnD,GACE,IAAI,gBAAgB,SAAS,MAAM,cACjC,OAAO;EAAA;EAKb,MAAM,YAAY,KAAK,QAAQ,UAAU;EACzC,IAAI,cAAc,YAChB,MAAM,IAAI,MAAM,+CAA+C,UAAU;EAE3E,aAAa;CACf;AACF;AAEA,SAAgB,4BAA4B,WAAyB;CACnE,IAAI,wCAAwC,SAAS,GACnD;CAGF,MAAM,cAAc,sBAAsB;CAC1C,MAAM,iBAAiB,KAAK,KAAK,WAAW,cAAc;CAC1D,MAAM,WAAW,KAAK,KAAK,gBAAgB,YAAY;CACvD,IAAI;EACF,IAAI,GAAG,aAAa,QAAQ,MAAM,GAAG,aAAa,WAAW,GAC3D;EAEF,GAAG,OAAO,UAAU;GAAE,WAAW;GAAM,OAAO;EAAK,CAAC;CACtD,SAAS,OAAO;EACd,IAAK,MAAgC,SAAS,UAAU,MAAM;CAChE;CAEA,GAAG,UAAU,gBAAgB,EAAE,WAAW,KAAK,CAAC;CAChD,GAAG,YAAY,aAAa,UAAU,KAAK;AAC7C;AAEA,SAAS,wCAAwC,WAA4B;CAC3E,MAAM,kBAAkB,KAAK,KAAK,WAAW,cAAc;CAC3D,IAAI,CAAC,GAAG,WAAW,eAAe,GAAG,OAAO;CAE5C,MAAM,cAAc,KAAK,MAAM,GAAG,aAAa,iBAAiB,MAAM,CAAC;CAMvE,OAAO,QACL,YAAY,cAAc,cAC1B,YAAY,iBAAiB,cAC7B,YAAY,sBAAsB,UACpC;AACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { PluginScope, PluginScopePaths } from './types.js';
|
|
2
|
+
export type PluginPathOptions = {
|
|
3
|
+
projectRoot: string;
|
|
4
|
+
configDir?: string;
|
|
5
|
+
homeDir?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function getPluginRoot(scope: PluginScope, options: PluginPathOptions): string;
|
|
8
|
+
export declare function getPluginRegistryPath(scope: PluginScope, options: PluginPathOptions): string;
|
|
9
|
+
export declare function getPluginScopePaths(scope: PluginScope, options: PluginPathOptions): PluginScopePaths;
|
|
10
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/plugins/paths.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEhE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAIpF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAE5F;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAQpG"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import "../constants.js";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import os from "os";
|
|
4
|
+
//#region src/plugins/paths.ts
|
|
5
|
+
function getPluginRoot(scope, options) {
|
|
6
|
+
const configDir = options.configDir ?? ".mastracode";
|
|
7
|
+
const baseDir = scope === "project" ? options.projectRoot : options.homeDir ?? os.homedir();
|
|
8
|
+
return path.join(baseDir, configDir, "plugins");
|
|
9
|
+
}
|
|
10
|
+
function getPluginRegistryPath(scope, options) {
|
|
11
|
+
return path.join(getPluginRoot(scope, options), "plugins.json");
|
|
12
|
+
}
|
|
13
|
+
function getPluginScopePaths(scope, options) {
|
|
14
|
+
const root = getPluginRoot(scope, options);
|
|
15
|
+
return {
|
|
16
|
+
scope,
|
|
17
|
+
root,
|
|
18
|
+
registryPath: path.join(root, "plugins.json"),
|
|
19
|
+
sourcesPath: path.join(root, "sources")
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
export { getPluginRegistryPath, getPluginRoot, getPluginScopePaths };
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","names":[],"sources":["../../src/plugins/paths.ts"],"sourcesContent":["import os from 'node:os';\nimport path from 'node:path';\n\nimport { DEFAULT_CONFIG_DIR } from '../constants.js';\nimport type { PluginScope, PluginScopePaths } from './types.js';\n\nexport type PluginPathOptions = {\n projectRoot: string;\n configDir?: string;\n homeDir?: string;\n};\n\nexport function getPluginRoot(scope: PluginScope, options: PluginPathOptions): string {\n const configDir = options.configDir ?? DEFAULT_CONFIG_DIR;\n const baseDir = scope === 'project' ? options.projectRoot : (options.homeDir ?? os.homedir());\n return path.join(baseDir, configDir, 'plugins');\n}\n\nexport function getPluginRegistryPath(scope: PluginScope, options: PluginPathOptions): string {\n return path.join(getPluginRoot(scope, options), 'plugins.json');\n}\n\nexport function getPluginScopePaths(scope: PluginScope, options: PluginPathOptions): PluginScopePaths {\n const root = getPluginRoot(scope, options);\n return {\n scope,\n root,\n registryPath: path.join(root, 'plugins.json'),\n sourcesPath: path.join(root, 'sources'),\n };\n}\n"],"mappings":";;;;AAYA,SAAgB,cAAc,OAAoB,SAAoC;CACpF,MAAM,YAAY,QAAQ,aAAA;CAC1B,MAAM,UAAU,UAAU,YAAY,QAAQ,cAAe,QAAQ,WAAW,GAAG,QAAQ;CAC3F,OAAO,KAAK,KAAK,SAAS,WAAW,SAAS;AAChD;AAEA,SAAgB,sBAAsB,OAAoB,SAAoC;CAC5F,OAAO,KAAK,KAAK,cAAc,OAAO,OAAO,GAAG,cAAc;AAChE;AAEA,SAAgB,oBAAoB,OAAoB,SAA8C;CACpG,MAAM,OAAO,cAAc,OAAO,OAAO;CACzC,OAAO;EACL;EACA;EACA,cAAc,KAAK,KAAK,MAAM,cAAc;EAC5C,aAAa,KAAK,KAAK,MAAM,SAAS;CACxC;AACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { InstalledPluginRecord, PluginRegistry, ScopedInstalledPluginRecord } from './types.js';
|
|
2
|
+
export declare const EMPTY_PLUGIN_REGISTRY: PluginRegistry;
|
|
3
|
+
export declare function loadPluginRegistry(registryPath: string): PluginRegistry;
|
|
4
|
+
export declare function savePluginRegistry(registryPath: string, registry: PluginRegistry): void;
|
|
5
|
+
export declare function mergePluginRegistries(globalRegistry: PluginRegistry, projectRegistry: PluginRegistry): ScopedInstalledPluginRecord[];
|
|
6
|
+
export declare function setPluginRecord(registry: PluginRegistry, pluginId: string, record: InstalledPluginRecord): PluginRegistry;
|
|
7
|
+
export declare function removePluginRecord(registry: PluginRegistry, pluginId: string): PluginRegistry;
|
|
8
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/plugins/registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAErG,eAAO,MAAM,qBAAqB,EAAE,cAAqD,CAAC;AAE1F,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,CAQvE;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAGvF;AAED,wBAAgB,qBAAqB,CACnC,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,cAAc,GAC9B,2BAA2B,EAAE,CAqB/B;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,qBAAqB,GAC5B,cAAc,CAQhB;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CAI7F"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
//#region src/plugins/registry.ts
|
|
4
|
+
const EMPTY_PLUGIN_REGISTRY = {
|
|
5
|
+
plugins: {},
|
|
6
|
+
disabledPlugins: []
|
|
7
|
+
};
|
|
8
|
+
function loadPluginRegistry(registryPath) {
|
|
9
|
+
try {
|
|
10
|
+
if (!fs.existsSync(registryPath)) return {
|
|
11
|
+
plugins: {},
|
|
12
|
+
disabledPlugins: []
|
|
13
|
+
};
|
|
14
|
+
return validatePluginRegistry(JSON.parse(fs.readFileSync(registryPath, "utf-8")));
|
|
15
|
+
} catch {
|
|
16
|
+
return {
|
|
17
|
+
plugins: {},
|
|
18
|
+
disabledPlugins: []
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function savePluginRegistry(registryPath, registry) {
|
|
23
|
+
fs.mkdirSync(path.dirname(registryPath), { recursive: true });
|
|
24
|
+
fs.writeFileSync(registryPath, `${JSON.stringify(validatePluginRegistry(registry), null, 2)}\n`);
|
|
25
|
+
}
|
|
26
|
+
function mergePluginRegistries(globalRegistry, projectRegistry) {
|
|
27
|
+
const merged = /* @__PURE__ */ new Map();
|
|
28
|
+
const disabledPlugins = /* @__PURE__ */ new Set([...globalRegistry.disabledPlugins ?? [], ...projectRegistry.disabledPlugins ?? []]);
|
|
29
|
+
for (const [id, record] of Object.entries(globalRegistry.plugins)) merged.set(id, {
|
|
30
|
+
id,
|
|
31
|
+
scope: "global",
|
|
32
|
+
...record
|
|
33
|
+
});
|
|
34
|
+
for (const [id, record] of Object.entries(projectRegistry.plugins)) merged.set(id, {
|
|
35
|
+
id,
|
|
36
|
+
scope: "project",
|
|
37
|
+
...record
|
|
38
|
+
});
|
|
39
|
+
return [...merged.values()].map((record) => disabledPlugins.has(record.id) ? {
|
|
40
|
+
...record,
|
|
41
|
+
blocked: true
|
|
42
|
+
} : record).sort((a, b) => {
|
|
43
|
+
if (a.scope !== b.scope) return a.scope === "project" ? -1 : 1;
|
|
44
|
+
return a.id.localeCompare(b.id);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function setPluginRecord(registry, pluginId, record) {
|
|
48
|
+
return {
|
|
49
|
+
plugins: {
|
|
50
|
+
...registry.plugins,
|
|
51
|
+
[pluginId]: record
|
|
52
|
+
},
|
|
53
|
+
disabledPlugins: registry.disabledPlugins ?? []
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function removePluginRecord(registry, pluginId) {
|
|
57
|
+
const plugins = { ...registry.plugins };
|
|
58
|
+
delete plugins[pluginId];
|
|
59
|
+
return {
|
|
60
|
+
plugins,
|
|
61
|
+
disabledPlugins: registry.disabledPlugins ?? []
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function validatePluginRegistry(raw) {
|
|
65
|
+
if (!raw || typeof raw !== "object") return {
|
|
66
|
+
plugins: {},
|
|
67
|
+
disabledPlugins: []
|
|
68
|
+
};
|
|
69
|
+
const plugins = raw.plugins;
|
|
70
|
+
if (!plugins || typeof plugins !== "object" || Array.isArray(plugins)) return {
|
|
71
|
+
plugins: {},
|
|
72
|
+
disabledPlugins: []
|
|
73
|
+
};
|
|
74
|
+
const disabledPlugins = raw.disabledPlugins;
|
|
75
|
+
const validated = {
|
|
76
|
+
plugins: {},
|
|
77
|
+
disabledPlugins: Array.isArray(disabledPlugins) ? [...new Set(disabledPlugins.filter((pluginId) => typeof pluginId === "string"))].sort() : []
|
|
78
|
+
};
|
|
79
|
+
for (const [id, value] of Object.entries(plugins)) {
|
|
80
|
+
if (typeof id !== "string" || id.trim().length === 0) continue;
|
|
81
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) continue;
|
|
82
|
+
const record = value;
|
|
83
|
+
if (typeof record.enabled !== "boolean") continue;
|
|
84
|
+
if (record.source !== "local" && record.source !== "github") continue;
|
|
85
|
+
if (typeof record.specifier !== "string") continue;
|
|
86
|
+
if (typeof record.path !== "string") continue;
|
|
87
|
+
if (typeof record.entry !== "string") continue;
|
|
88
|
+
validated.plugins[id] = {
|
|
89
|
+
enabled: record.enabled,
|
|
90
|
+
source: record.source,
|
|
91
|
+
specifier: record.specifier,
|
|
92
|
+
path: record.path,
|
|
93
|
+
entry: record.entry,
|
|
94
|
+
...typeof record.ref === "string" ? { ref: record.ref } : {},
|
|
95
|
+
...typeof record.version === "string" ? { version: record.version } : {},
|
|
96
|
+
...record.config && typeof record.config === "object" && !Array.isArray(record.config) ? { config: validatePluginConfigValues(record.config) } : {}
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return validated;
|
|
100
|
+
}
|
|
101
|
+
function validatePluginConfigValues(raw) {
|
|
102
|
+
const values = {};
|
|
103
|
+
for (const [key, value] of Object.entries(raw)) {
|
|
104
|
+
if (typeof key !== "string" || key.trim().length === 0) continue;
|
|
105
|
+
if (typeof value === "string" || typeof value === "boolean") values[key] = value;
|
|
106
|
+
}
|
|
107
|
+
return values;
|
|
108
|
+
}
|
|
109
|
+
//#endregion
|
|
110
|
+
export { EMPTY_PLUGIN_REGISTRY, loadPluginRegistry, mergePluginRegistries, removePluginRecord, savePluginRegistry, setPluginRecord };
|
|
111
|
+
|
|
112
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","names":[],"sources":["../../src/plugins/registry.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { InstalledPluginRecord, PluginRegistry, ScopedInstalledPluginRecord } from './types.js';\n\nexport const EMPTY_PLUGIN_REGISTRY: PluginRegistry = { plugins: {}, disabledPlugins: [] };\n\nexport function loadPluginRegistry(registryPath: string): PluginRegistry {\n try {\n if (!fs.existsSync(registryPath)) return { plugins: {}, disabledPlugins: [] };\n const raw = JSON.parse(fs.readFileSync(registryPath, 'utf-8')) as unknown;\n return validatePluginRegistry(raw);\n } catch {\n return { plugins: {}, disabledPlugins: [] };\n }\n}\n\nexport function savePluginRegistry(registryPath: string, registry: PluginRegistry): void {\n fs.mkdirSync(path.dirname(registryPath), { recursive: true });\n fs.writeFileSync(registryPath, `${JSON.stringify(validatePluginRegistry(registry), null, 2)}\\n`);\n}\n\nexport function mergePluginRegistries(\n globalRegistry: PluginRegistry,\n projectRegistry: PluginRegistry,\n): ScopedInstalledPluginRecord[] {\n const merged = new Map<string, ScopedInstalledPluginRecord>();\n const disabledPlugins = new Set([\n ...(globalRegistry.disabledPlugins ?? []),\n ...(projectRegistry.disabledPlugins ?? []),\n ]);\n\n for (const [id, record] of Object.entries(globalRegistry.plugins)) {\n merged.set(id, { id, scope: 'global', ...record });\n }\n\n for (const [id, record] of Object.entries(projectRegistry.plugins)) {\n merged.set(id, { id, scope: 'project', ...record });\n }\n\n return [...merged.values()]\n .map(record => (disabledPlugins.has(record.id) ? { ...record, blocked: true } : record))\n .sort((a, b) => {\n if (a.scope !== b.scope) return a.scope === 'project' ? -1 : 1;\n return a.id.localeCompare(b.id);\n });\n}\n\nexport function setPluginRecord(\n registry: PluginRegistry,\n pluginId: string,\n record: InstalledPluginRecord,\n): PluginRegistry {\n return {\n plugins: {\n ...registry.plugins,\n [pluginId]: record,\n },\n disabledPlugins: registry.disabledPlugins ?? [],\n };\n}\n\nexport function removePluginRecord(registry: PluginRegistry, pluginId: string): PluginRegistry {\n const plugins = { ...registry.plugins };\n delete plugins[pluginId];\n return { plugins, disabledPlugins: registry.disabledPlugins ?? [] };\n}\n\nfunction validatePluginRegistry(raw: unknown): PluginRegistry {\n if (!raw || typeof raw !== 'object') return { plugins: {}, disabledPlugins: [] };\n const plugins = (raw as { plugins?: unknown }).plugins;\n if (!plugins || typeof plugins !== 'object' || Array.isArray(plugins)) return { plugins: {}, disabledPlugins: [] };\n\n const disabledPlugins = (raw as { disabledPlugins?: unknown }).disabledPlugins;\n const validated: PluginRegistry = {\n plugins: {},\n disabledPlugins: Array.isArray(disabledPlugins)\n ? [...new Set(disabledPlugins.filter((pluginId): pluginId is string => typeof pluginId === 'string'))].sort()\n : [],\n };\n for (const [id, value] of Object.entries(plugins)) {\n if (typeof id !== 'string' || id.trim().length === 0) continue;\n if (!value || typeof value !== 'object' || Array.isArray(value)) continue;\n const record = value as Record<string, unknown>;\n if (typeof record.enabled !== 'boolean') continue;\n if (record.source !== 'local' && record.source !== 'github') continue;\n if (typeof record.specifier !== 'string') continue;\n if (typeof record.path !== 'string') continue;\n if (typeof record.entry !== 'string') continue;\n\n validated.plugins[id] = {\n enabled: record.enabled,\n source: record.source,\n specifier: record.specifier,\n path: record.path,\n entry: record.entry,\n ...(typeof record.ref === 'string' ? { ref: record.ref } : {}),\n ...(typeof record.version === 'string' ? { version: record.version } : {}),\n ...(record.config && typeof record.config === 'object' && !Array.isArray(record.config)\n ? { config: validatePluginConfigValues(record.config) }\n : {}),\n };\n }\n\n return validated;\n}\n\nfunction validatePluginConfigValues(raw: object): Record<string, string | boolean> {\n const values: Record<string, string | boolean> = {};\n for (const [key, value] of Object.entries(raw)) {\n if (typeof key !== 'string' || key.trim().length === 0) continue;\n if (typeof value === 'string' || typeof value === 'boolean') values[key] = value;\n }\n return values;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type ScaffoldPluginOptions = {
|
|
2
|
+
id?: string;
|
|
3
|
+
name?: string;
|
|
4
|
+
projectRoot?: string;
|
|
5
|
+
configDir?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function resolveScaffoldTarget(target: string, options?: Pick<ScaffoldPluginOptions, 'projectRoot' | 'configDir'>): string;
|
|
8
|
+
export declare function scaffoldPlugin(targetDir: string, options?: ScaffoldPluginOptions): string;
|
|
9
|
+
export declare function formatScaffoldSuccess(targetDir: string): string;
|
|
10
|
+
//# sourceMappingURL=scaffold.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/plugins/scaffold.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,IAAI,CAAC,qBAAqB,EAAE,aAAa,GAAG,WAAW,CAAM,GACrE,MAAM,CAYR;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,MAAM,CA8D7F;AAqBD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAY/D"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import "../constants.js";
|
|
2
|
+
import { upsertPluginManifestEntry } from "./manifest.js";
|
|
3
|
+
import { ensureMastraCodePackageLink } from "./package-link.js";
|
|
4
|
+
import path from "path";
|
|
5
|
+
import fs from "fs";
|
|
6
|
+
//#region src/plugins/scaffold.ts
|
|
7
|
+
function resolveScaffoldTarget(target, options = {}) {
|
|
8
|
+
if (isBarePluginName(target)) return path.join(options.projectRoot ?? process.cwd(), options.configDir ?? ".mastracode", "plugins", "sources", "local", target);
|
|
9
|
+
return path.resolve(options.projectRoot ?? process.cwd(), target);
|
|
10
|
+
}
|
|
11
|
+
function scaffoldPlugin(targetDir, options = {}) {
|
|
12
|
+
const dir = resolveScaffoldTarget(targetDir, options);
|
|
13
|
+
if (fs.existsSync(dir) && fs.readdirSync(dir).length > 0) throw new Error(`Directory already exists and is not empty: ${targetDir}`);
|
|
14
|
+
const packageName = path.basename(dir).toLowerCase().replace(/[^a-z0-9_.-]+/g, "-").replace(/^-|-$/g, "") || "mastracode-plugin";
|
|
15
|
+
const pluginId = options.id ?? packageName;
|
|
16
|
+
const pluginName = options.name ?? humanizeName(packageName);
|
|
17
|
+
fs.mkdirSync(path.join(dir, "src"), { recursive: true });
|
|
18
|
+
fs.writeFileSync(path.join(dir, "package.json"), `${JSON.stringify({
|
|
19
|
+
name: packageName,
|
|
20
|
+
type: "module",
|
|
21
|
+
exports: "./src/index.ts",
|
|
22
|
+
peerDependencies: { mastracode: "*" },
|
|
23
|
+
devDependencies: { typescript: "^5.9.3" },
|
|
24
|
+
scripts: { check: "tsc --noEmit" }
|
|
25
|
+
}, null, 2)}\n`);
|
|
26
|
+
fs.writeFileSync(path.join(dir, "tsconfig.json"), `${JSON.stringify({
|
|
27
|
+
compilerOptions: {
|
|
28
|
+
target: "ES2024",
|
|
29
|
+
module: "NodeNext",
|
|
30
|
+
moduleResolution: "NodeNext",
|
|
31
|
+
strict: true,
|
|
32
|
+
verbatimModuleSyntax: true,
|
|
33
|
+
erasableSyntaxOnly: true,
|
|
34
|
+
skipLibCheck: true,
|
|
35
|
+
noEmit: true
|
|
36
|
+
},
|
|
37
|
+
include: ["src/**/*.ts"]
|
|
38
|
+
}, null, 2)}\n`);
|
|
39
|
+
fs.writeFileSync(path.join(dir, "src/index.ts"), renderIndex(pluginId, pluginName));
|
|
40
|
+
fs.writeFileSync(path.join(dir, "README.md"), renderReadme(pluginName, pluginId));
|
|
41
|
+
writeScaffoldManifest(targetDir, dir, pluginId, pluginName, options);
|
|
42
|
+
ensureMastraCodePackageLink(dir);
|
|
43
|
+
return dir;
|
|
44
|
+
}
|
|
45
|
+
function writeScaffoldManifest(originalTarget, scaffoldDir, pluginId, pluginName, options) {
|
|
46
|
+
const projectRoot = options.projectRoot ?? process.cwd();
|
|
47
|
+
upsertPluginManifestEntry(isBarePluginName(originalTarget) ? projectRoot : scaffoldDir, {
|
|
48
|
+
id: pluginId,
|
|
49
|
+
name: pluginName,
|
|
50
|
+
entry: (isBarePluginName(originalTarget) ? path.join(path.relative(projectRoot, scaffoldDir), "src/index.ts") : "src/index.ts").split(path.sep).join("/")
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function formatScaffoldSuccess(targetDir) {
|
|
54
|
+
return [
|
|
55
|
+
`Created Mastra Code plugin scaffold at ${targetDir}`,
|
|
56
|
+
"",
|
|
57
|
+
"Next steps:",
|
|
58
|
+
` cd ${targetDir}`,
|
|
59
|
+
" pnpm install",
|
|
60
|
+
" pnpm check",
|
|
61
|
+
" mastracode",
|
|
62
|
+
" /plugins",
|
|
63
|
+
" Install new plugin → Local path"
|
|
64
|
+
].join("\n");
|
|
65
|
+
}
|
|
66
|
+
function isBarePluginName(target) {
|
|
67
|
+
return !path.isAbsolute(target) && !target.startsWith(".") && !target.includes("/") && !target.includes("\\");
|
|
68
|
+
}
|
|
69
|
+
function renderIndex(pluginId, pluginName) {
|
|
70
|
+
return `import { createTool, defineMastraCodePlugin, z } from 'mastracode/plugin';
|
|
71
|
+
|
|
72
|
+
export default defineMastraCodePlugin({
|
|
73
|
+
id: ${JSON.stringify(pluginId)},
|
|
74
|
+
name: ${JSON.stringify(pluginName)},
|
|
75
|
+
description: 'A Mastra Code tool plugin.',
|
|
76
|
+
tools: {
|
|
77
|
+
example_tool: {
|
|
78
|
+
tool: createTool({
|
|
79
|
+
id: 'example_tool',
|
|
80
|
+
description: 'Echo a message from the scaffolded plugin.',
|
|
81
|
+
inputSchema: z.object({
|
|
82
|
+
message: z.string(),
|
|
83
|
+
}),
|
|
84
|
+
execute: async context => {
|
|
85
|
+
return { message: context.message };
|
|
86
|
+
},
|
|
87
|
+
}),
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
`;
|
|
92
|
+
}
|
|
93
|
+
function renderReadme(pluginName, pluginId) {
|
|
94
|
+
return `# ${pluginName}
|
|
95
|
+
|
|
96
|
+
Mastra Code tool plugin: \`${pluginId}\`.
|
|
97
|
+
|
|
98
|
+
## Develop
|
|
99
|
+
|
|
100
|
+
\`\`\`sh
|
|
101
|
+
pnpm install
|
|
102
|
+
pnpm check
|
|
103
|
+
\`\`\`
|
|
104
|
+
|
|
105
|
+
## Install locally
|
|
106
|
+
|
|
107
|
+
Open Mastra Code, run \`/plugins\`, and install this directory as a local plugin.
|
|
108
|
+
`;
|
|
109
|
+
}
|
|
110
|
+
function humanizeName(value) {
|
|
111
|
+
return value.split(/[-_.]+/g).filter(Boolean).map((part) => part[0]?.toUpperCase() + part.slice(1)).join(" ") || "Mastra Code Plugin";
|
|
112
|
+
}
|
|
113
|
+
//#endregion
|
|
114
|
+
export { formatScaffoldSuccess, resolveScaffoldTarget, scaffoldPlugin };
|
|
115
|
+
|
|
116
|
+
//# sourceMappingURL=scaffold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.js","names":[],"sources":["../../src/plugins/scaffold.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { DEFAULT_CONFIG_DIR } from '../constants.js';\nimport { upsertPluginManifestEntry } from './manifest.js';\nimport { ensureMastraCodePackageLink } from './package-link.js';\n\nexport type ScaffoldPluginOptions = {\n id?: string;\n name?: string;\n projectRoot?: string;\n configDir?: string;\n};\n\nexport function resolveScaffoldTarget(\n target: string,\n options: Pick<ScaffoldPluginOptions, 'projectRoot' | 'configDir'> = {},\n): string {\n if (isBarePluginName(target)) {\n return path.join(\n options.projectRoot ?? process.cwd(),\n options.configDir ?? DEFAULT_CONFIG_DIR,\n 'plugins',\n 'sources',\n 'local',\n target,\n );\n }\n return path.resolve(options.projectRoot ?? process.cwd(), target);\n}\n\nexport function scaffoldPlugin(targetDir: string, options: ScaffoldPluginOptions = {}): string {\n const dir = resolveScaffoldTarget(targetDir, options);\n if (fs.existsSync(dir) && fs.readdirSync(dir).length > 0) {\n throw new Error(`Directory already exists and is not empty: ${targetDir}`);\n }\n\n const packageName =\n path\n .basename(dir)\n .toLowerCase()\n .replace(/[^a-z0-9_.-]+/g, '-')\n .replace(/^-|-$/g, '') || 'mastracode-plugin';\n const pluginId = options.id ?? packageName;\n const pluginName = options.name ?? humanizeName(packageName);\n\n fs.mkdirSync(path.join(dir, 'src'), { recursive: true });\n fs.writeFileSync(\n path.join(dir, 'package.json'),\n `${JSON.stringify(\n {\n name: packageName,\n type: 'module',\n exports: './src/index.ts',\n peerDependencies: {\n mastracode: '*',\n },\n devDependencies: {\n typescript: '^5.9.3',\n },\n scripts: {\n check: 'tsc --noEmit',\n },\n },\n null,\n 2,\n )}\\n`,\n );\n fs.writeFileSync(\n path.join(dir, 'tsconfig.json'),\n `${JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2024',\n module: 'NodeNext',\n moduleResolution: 'NodeNext',\n strict: true,\n verbatimModuleSyntax: true,\n erasableSyntaxOnly: true,\n skipLibCheck: true,\n noEmit: true,\n },\n include: ['src/**/*.ts'],\n },\n null,\n 2,\n )}\\n`,\n );\n fs.writeFileSync(path.join(dir, 'src/index.ts'), renderIndex(pluginId, pluginName));\n fs.writeFileSync(path.join(dir, 'README.md'), renderReadme(pluginName, pluginId));\n writeScaffoldManifest(targetDir, dir, pluginId, pluginName, options);\n ensureMastraCodePackageLink(dir);\n return dir;\n}\n\nfunction writeScaffoldManifest(\n originalTarget: string,\n scaffoldDir: string,\n pluginId: string,\n pluginName: string,\n options: ScaffoldPluginOptions,\n): void {\n const projectRoot = options.projectRoot ?? process.cwd();\n const manifestRoot = isBarePluginName(originalTarget) ? projectRoot : scaffoldDir;\n const entry = isBarePluginName(originalTarget)\n ? path.join(path.relative(projectRoot, scaffoldDir), 'src/index.ts')\n : 'src/index.ts';\n upsertPluginManifestEntry(manifestRoot, {\n id: pluginId,\n name: pluginName,\n entry: entry.split(path.sep).join('/'),\n });\n}\n\nexport function formatScaffoldSuccess(targetDir: string): string {\n return [\n `Created Mastra Code plugin scaffold at ${targetDir}`,\n '',\n 'Next steps:',\n ` cd ${targetDir}`,\n ' pnpm install',\n ' pnpm check',\n ' mastracode',\n ' /plugins',\n ' Install new plugin → Local path',\n ].join('\\n');\n}\n\nfunction isBarePluginName(target: string): boolean {\n return !path.isAbsolute(target) && !target.startsWith('.') && !target.includes('/') && !target.includes('\\\\');\n}\n\nfunction renderIndex(pluginId: string, pluginName: string): string {\n return `import { createTool, defineMastraCodePlugin, z } from 'mastracode/plugin';\n\nexport default defineMastraCodePlugin({\n id: ${JSON.stringify(pluginId)},\n name: ${JSON.stringify(pluginName)},\n description: 'A Mastra Code tool plugin.',\n tools: {\n example_tool: {\n tool: createTool({\n id: 'example_tool',\n description: 'Echo a message from the scaffolded plugin.',\n inputSchema: z.object({\n message: z.string(),\n }),\n execute: async context => {\n return { message: context.message };\n },\n }),\n },\n },\n});\n`;\n}\n\nfunction renderReadme(pluginName: string, pluginId: string): string {\n return `# ${pluginName}\n\nMastra Code tool plugin: \\`${pluginId}\\`.\n\n## Develop\n\n\\`\\`\\`sh\npnpm install\npnpm check\n\\`\\`\\`\n\n## Install locally\n\nOpen Mastra Code, run \\`/plugins\\`, and install this directory as a local plugin.\n`;\n}\n\nfunction humanizeName(value: string): string {\n return (\n value\n .split(/[-_.]+/g)\n .filter(Boolean)\n .map(part => part[0]?.toUpperCase() + part.slice(1))\n .join(' ') || 'Mastra Code Plugin'\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Agent } from '@mastra/core/agent';
|
|
2
|
+
import type { Mastra } from '@mastra/core/mastra';
|
|
3
|
+
import type { InputProcessorOrWorkflow, OutputProcessorOrWorkflow } from '@mastra/core/processors';
|
|
4
|
+
import type { SignalProvider } from '@mastra/core/signals';
|
|
5
|
+
import type { PluginContribution } from './types.js';
|
|
6
|
+
export type PluginSignalLaneOptions = {
|
|
7
|
+
/**
|
|
8
|
+
* Ids of providers Mastra Code wires itself (through the Agent constructor).
|
|
9
|
+
* The lane refuses to start a provider that collides with one of them:
|
|
10
|
+
* two live instances of the same provider silently clobber each other's
|
|
11
|
+
* polling, and the built-ins are invisible to the lane's own registry.
|
|
12
|
+
*/
|
|
13
|
+
reservedProviderIds?: string[];
|
|
14
|
+
onError?: (message: string, error: unknown) => void;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Owns the lifecycle of signal providers contributed by plugins.
|
|
18
|
+
*
|
|
19
|
+
* Providers are long-lived; processors are per-request. The Agent constructor
|
|
20
|
+
* conflates the two — it harvests a provider's processors into a closure that
|
|
21
|
+
* can never be undone — so plugin providers are deliberately kept out of the
|
|
22
|
+
* `signals` array and driven from here instead, through the same public methods
|
|
23
|
+
* the constructor uses. That is what makes a provider removable when its plugin
|
|
24
|
+
* is disabled, updated or uninstalled.
|
|
25
|
+
*/
|
|
26
|
+
export declare class PluginSignalLane {
|
|
27
|
+
#private;
|
|
28
|
+
constructor(options?: PluginSignalLaneOptions);
|
|
29
|
+
getInputProcessors(): readonly InputProcessorOrWorkflow[];
|
|
30
|
+
getOutputProcessors(): readonly OutputProcessorOrWorkflow[];
|
|
31
|
+
/**
|
|
32
|
+
* Reconciles the live providers against a freshly loaded plugin list.
|
|
33
|
+
*
|
|
34
|
+
* A plugin whose stamp is unchanged keeps the provider instance it already
|
|
35
|
+
* has, and the freshly resolved one is dropped without ever being registered,
|
|
36
|
+
* connected or polled — reload re-runs every plugin's resolver, so unchanged
|
|
37
|
+
* plugins hand over new instances on every call.
|
|
38
|
+
*
|
|
39
|
+
* Providers of plugins that went inactive, failed to load or were uninstalled
|
|
40
|
+
* are absent from the contributions and get stopped here.
|
|
41
|
+
*/
|
|
42
|
+
sync(contributions: PluginContribution<SignalProvider<string>>[]): void;
|
|
43
|
+
/**
|
|
44
|
+
* Called once Mastra exists. Providers resolved before then are registered and
|
|
45
|
+
* started here — without a Mastra instance a provider has no storage, and
|
|
46
|
+
* nothing else will ever hand it one: the Agent propagates Mastra only to the
|
|
47
|
+
* providers in its own `signals` array, which these deliberately are not in.
|
|
48
|
+
*/
|
|
49
|
+
setMastra(mastra: Mastra, agent: Agent): void;
|
|
50
|
+
/**
|
|
51
|
+
* Retires every live provider and empties both processor lanes. The inverse of
|
|
52
|
+
* `sync()`, for a caller that is done with this lane — an embedder sharing one
|
|
53
|
+
* `PluginManager` across controllers would otherwise leave a controller's
|
|
54
|
+
* providers polling after it is gone.
|
|
55
|
+
*/
|
|
56
|
+
stopAll(): void;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=signal-lane.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal-lane.d.ts","sourceRoot":"","sources":["../../src/plugins/signal-lane.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACnG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AASrD,MAAM,MAAM,uBAAuB,GAAG;IACpC;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACrD,CAAC;AAEF;;;;;;;;;GASG;AACH,qBAAa,gBAAgB;;gBAYf,OAAO,GAAE,uBAA4B;IASjD,kBAAkB,IAAI,SAAS,wBAAwB,EAAE;IAIzD,mBAAmB,IAAI,SAAS,yBAAyB,EAAE;IAI3D;;;;;;;;;;OAUG;IACH,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,IAAI;IA+BvE;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAO7C;;;;;OAKG;IACH,OAAO,IAAI,IAAI;CAyGhB"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
//#region src/plugins/signal-lane.ts
|
|
2
|
+
/**
|
|
3
|
+
* Owns the lifecycle of signal providers contributed by plugins.
|
|
4
|
+
*
|
|
5
|
+
* Providers are long-lived; processors are per-request. The Agent constructor
|
|
6
|
+
* conflates the two — it harvests a provider's processors into a closure that
|
|
7
|
+
* can never be undone — so plugin providers are deliberately kept out of the
|
|
8
|
+
* `signals` array and driven from here instead, through the same public methods
|
|
9
|
+
* the constructor uses. That is what makes a provider removable when its plugin
|
|
10
|
+
* is disabled, updated or uninstalled.
|
|
11
|
+
*/
|
|
12
|
+
var PluginSignalLane = class {
|
|
13
|
+
#live = /* @__PURE__ */ new Map();
|
|
14
|
+
#reservedProviderIds;
|
|
15
|
+
#onError;
|
|
16
|
+
#agent;
|
|
17
|
+
#mastra;
|
|
18
|
+
#inputProcessors = [];
|
|
19
|
+
#outputProcessors = [];
|
|
20
|
+
constructor(options = {}) {
|
|
21
|
+
this.#reservedProviderIds = new Set(options.reservedProviderIds ?? []);
|
|
22
|
+
this.#onError = options.onError ?? ((message, error) => {
|
|
23
|
+
console.warn(message, error);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
getInputProcessors() {
|
|
27
|
+
return this.#inputProcessors;
|
|
28
|
+
}
|
|
29
|
+
getOutputProcessors() {
|
|
30
|
+
return this.#outputProcessors;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Reconciles the live providers against a freshly loaded plugin list.
|
|
34
|
+
*
|
|
35
|
+
* A plugin whose stamp is unchanged keeps the provider instance it already
|
|
36
|
+
* has, and the freshly resolved one is dropped without ever being registered,
|
|
37
|
+
* connected or polled — reload re-runs every plugin's resolver, so unchanged
|
|
38
|
+
* plugins hand over new instances on every call.
|
|
39
|
+
*
|
|
40
|
+
* Providers of plugins that went inactive, failed to load or were uninstalled
|
|
41
|
+
* are absent from the contributions and get stopped here.
|
|
42
|
+
*/
|
|
43
|
+
sync(contributions) {
|
|
44
|
+
const seen = /* @__PURE__ */ new Set();
|
|
45
|
+
for (const { pluginId, versionStamp, value: provider } of contributions) {
|
|
46
|
+
const key = `${pluginId}::${provider.id}`;
|
|
47
|
+
seen.add(key);
|
|
48
|
+
const live = this.#live.get(key);
|
|
49
|
+
if (live && live.versionStamp === versionStamp) continue;
|
|
50
|
+
if (live) this.#retire(key, live);
|
|
51
|
+
if (this.#isProviderIdTaken(provider.id)) {
|
|
52
|
+
this.#onError(`Plugin "${pluginId}" signal provider "${provider.id}" is already running; refusing to start a second instance.`, void 0);
|
|
53
|
+
seen.delete(key);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
this.#live.set(key, {
|
|
57
|
+
pluginId,
|
|
58
|
+
provider,
|
|
59
|
+
versionStamp,
|
|
60
|
+
started: false
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
for (const [key, live] of this.#live) if (!seen.has(key)) this.#retire(key, live);
|
|
64
|
+
this.#startPending();
|
|
65
|
+
this.#rebuildProcessors();
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Called once Mastra exists. Providers resolved before then are registered and
|
|
69
|
+
* started here — without a Mastra instance a provider has no storage, and
|
|
70
|
+
* nothing else will ever hand it one: the Agent propagates Mastra only to the
|
|
71
|
+
* providers in its own `signals` array, which these deliberately are not in.
|
|
72
|
+
*/
|
|
73
|
+
setMastra(mastra, agent) {
|
|
74
|
+
this.#mastra = mastra;
|
|
75
|
+
this.#agent = agent;
|
|
76
|
+
this.#startPending();
|
|
77
|
+
this.#rebuildProcessors();
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Retires every live provider and empties both processor lanes. The inverse of
|
|
81
|
+
* `sync()`, for a caller that is done with this lane — an embedder sharing one
|
|
82
|
+
* `PluginManager` across controllers would otherwise leave a controller's
|
|
83
|
+
* providers polling after it is gone.
|
|
84
|
+
*/
|
|
85
|
+
stopAll() {
|
|
86
|
+
for (const [key, live] of this.#live) this.#retire(key, live);
|
|
87
|
+
this.#rebuildProcessors();
|
|
88
|
+
}
|
|
89
|
+
#startPending() {
|
|
90
|
+
const mastra = this.#mastra;
|
|
91
|
+
const agent = this.#agent;
|
|
92
|
+
if (!mastra || !agent) return;
|
|
93
|
+
for (const [key, live] of this.#live) {
|
|
94
|
+
if (live.started) continue;
|
|
95
|
+
try {
|
|
96
|
+
live.provider.__registerMastra(mastra);
|
|
97
|
+
live.provider.connect(agent);
|
|
98
|
+
live.provider.startPolling();
|
|
99
|
+
live.started = true;
|
|
100
|
+
this.#runStart(key, live);
|
|
101
|
+
} catch (error) {
|
|
102
|
+
this.#failProvider(key, live, error);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
async #runStart(key, live) {
|
|
107
|
+
try {
|
|
108
|
+
await live.provider.start?.();
|
|
109
|
+
if (this.#live.get(key) !== live) this.#stopProvider(live);
|
|
110
|
+
} catch (error) {
|
|
111
|
+
if (this.#live.get(key) !== live) {
|
|
112
|
+
this.#stopProvider(live);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
this.#failProvider(key, live, error);
|
|
116
|
+
this.#rebuildProcessors();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Isolated: one failing provider does not take down its plugin's tools,
|
|
121
|
+
* commands, skills or sibling providers. A plugin author who wants a provider
|
|
122
|
+
* treated as required throws from the `signalProviders` resolver instead,
|
|
123
|
+
* which fails the whole plugin record.
|
|
124
|
+
*/
|
|
125
|
+
#failProvider(key, live, error) {
|
|
126
|
+
this.#onError(`Plugin "${live.pluginId}" signal provider "${live.provider.id}" failed to start:`, error);
|
|
127
|
+
this.#retire(key, live);
|
|
128
|
+
}
|
|
129
|
+
#retire(key, live) {
|
|
130
|
+
this.#stopProvider(live);
|
|
131
|
+
this.#live.delete(key);
|
|
132
|
+
}
|
|
133
|
+
#stopProvider(live) {
|
|
134
|
+
try {
|
|
135
|
+
live.provider.stop();
|
|
136
|
+
} catch (error) {
|
|
137
|
+
this.#onError(`Plugin "${live.pluginId}" signal provider "${live.provider.id}" failed to stop:`, error);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
#isProviderIdTaken(providerId) {
|
|
141
|
+
if (this.#reservedProviderIds.has(providerId)) return true;
|
|
142
|
+
for (const live of this.#live.values()) if (live.provider.id === providerId) return true;
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
#rebuildProcessors() {
|
|
146
|
+
const input = [];
|
|
147
|
+
const output = [];
|
|
148
|
+
for (const live of this.#live.values()) {
|
|
149
|
+
if (!live.started) continue;
|
|
150
|
+
try {
|
|
151
|
+
const providerInput = live.provider.getInputProcessors?.() ?? [];
|
|
152
|
+
const providerOutput = live.provider.getOutputProcessors?.() ?? [];
|
|
153
|
+
input.push(...providerInput);
|
|
154
|
+
output.push(...providerOutput);
|
|
155
|
+
} catch (error) {
|
|
156
|
+
this.#onError(`Plugin "${live.pluginId}" signal provider "${live.provider.id}" failed to provide processors:`, error);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
this.#inputProcessors = input;
|
|
160
|
+
this.#outputProcessors = output;
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
//#endregion
|
|
164
|
+
export { PluginSignalLane };
|
|
165
|
+
|
|
166
|
+
//# sourceMappingURL=signal-lane.js.map
|