@mastra/code-sdk 0.0.0-client-tool-results-20260912062135
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +32 -0
- package/README.md +37 -0
- package/dist/acp/agent.d.ts +35 -0
- package/dist/acp/agent.d.ts.map +1 -0
- package/dist/acp/agent.js +161 -0
- package/dist/acp/agent.js.map +1 -0
- package/dist/acp/event-mapper.d.ts +22 -0
- package/dist/acp/event-mapper.d.ts.map +1 -0
- package/dist/acp/event-mapper.js +214 -0
- package/dist/acp/event-mapper.js.map +1 -0
- package/dist/acp/index.d.ts +8 -0
- package/dist/acp/index.d.ts.map +1 -0
- package/dist/acp/index.js +65 -0
- package/dist/acp/index.js.map +1 -0
- package/dist/acp/server.d.ts +7 -0
- package/dist/acp/server.d.ts.map +1 -0
- package/dist/acp/server.js +35 -0
- package/dist/acp/server.js.map +1 -0
- package/dist/acp.d.ts +2 -0
- package/dist/acp.d.ts.map +1 -0
- package/dist/acp.js +2 -0
- package/dist/agents/context-audit.d.ts +84 -0
- package/dist/agents/context-audit.d.ts.map +1 -0
- package/dist/agents/context-audit.js +118 -0
- package/dist/agents/context-audit.js.map +1 -0
- package/dist/agents/credential-resolver.d.ts +63 -0
- package/dist/agents/credential-resolver.d.ts.map +1 -0
- package/dist/agents/credential-resolver.js +97 -0
- package/dist/agents/credential-resolver.js.map +1 -0
- package/dist/agents/custom-provider-source.d.ts +35 -0
- package/dist/agents/custom-provider-source.d.ts.map +1 -0
- package/dist/agents/custom-provider-source.js +25 -0
- package/dist/agents/custom-provider-source.js.map +1 -0
- package/dist/agents/instructions.d.ts +29 -0
- package/dist/agents/instructions.d.ts.map +1 -0
- package/dist/agents/instructions.js +58 -0
- package/dist/agents/instructions.js.map +1 -0
- package/dist/agents/mastracode-gateway.d.ts +74 -0
- package/dist/agents/mastracode-gateway.d.ts.map +1 -0
- package/dist/agents/mastracode-gateway.js +431 -0
- package/dist/agents/mastracode-gateway.js.map +1 -0
- package/dist/agents/memory.d.ts +30 -0
- package/dist/agents/memory.d.ts.map +1 -0
- package/dist/agents/memory.js +171 -0
- package/dist/agents/memory.js.map +1 -0
- package/dist/agents/model.d.ts +81 -0
- package/dist/agents/model.d.ts.map +1 -0
- package/dist/agents/model.js +155 -0
- package/dist/agents/model.js.map +1 -0
- package/dist/agents/modes/build.d.ts +10 -0
- package/dist/agents/modes/build.d.ts.map +1 -0
- package/dist/agents/modes/build.js +49 -0
- package/dist/agents/modes/build.js.map +1 -0
- package/dist/agents/modes/explore.d.ts +10 -0
- package/dist/agents/modes/explore.d.ts.map +1 -0
- package/dist/agents/modes/explore.js +42 -0
- package/dist/agents/modes/explore.js.map +1 -0
- package/dist/agents/modes/plan.d.ts +6 -0
- package/dist/agents/modes/plan.d.ts.map +1 -0
- package/dist/agents/modes/plan.js +42 -0
- package/dist/agents/modes/plan.js.map +1 -0
- package/dist/agents/prompts/agent-instructions.d.ts +70 -0
- package/dist/agents/prompts/agent-instructions.d.ts.map +1 -0
- package/dist/agents/prompts/agent-instructions.js +211 -0
- package/dist/agents/prompts/agent-instructions.js.map +1 -0
- package/dist/agents/prompts/build.d.ts +12 -0
- package/dist/agents/prompts/build.d.ts.map +1 -0
- package/dist/agents/prompts/build.js +76 -0
- package/dist/agents/prompts/build.js.map +1 -0
- package/dist/agents/prompts/fast.d.ts +5 -0
- package/dist/agents/prompts/fast.d.ts.map +1 -0
- package/dist/agents/prompts/fast.js +26 -0
- package/dist/agents/prompts/fast.js.map +1 -0
- package/dist/agents/prompts/index.d.ts +50 -0
- package/dist/agents/prompts/index.d.ts.map +1 -0
- package/dist/agents/prompts/index.js +119 -0
- package/dist/agents/prompts/index.js.map +1 -0
- package/dist/agents/prompts/model.d.ts +5 -0
- package/dist/agents/prompts/model.d.ts.map +1 -0
- package/dist/agents/prompts/model.js +23 -0
- package/dist/agents/prompts/model.js.map +1 -0
- package/dist/agents/prompts/plan.d.ts +6 -0
- package/dist/agents/prompts/plan.d.ts.map +1 -0
- package/dist/agents/prompts/plan.js +111 -0
- package/dist/agents/prompts/plan.js.map +1 -0
- package/dist/agents/prompts/tool-guidance.d.ts +18 -0
- package/dist/agents/prompts/tool-guidance.d.ts.map +1 -0
- package/dist/agents/prompts/tool-guidance.js +180 -0
- package/dist/agents/prompts/tool-guidance.js.map +1 -0
- package/dist/agents/sandbox-filesystem.d.ts +117 -0
- package/dist/agents/sandbox-filesystem.d.ts.map +1 -0
- package/dist/agents/sandbox-filesystem.js +356 -0
- package/dist/agents/sandbox-filesystem.js.map +1 -0
- package/dist/agents/subagents/execute.d.ts +3 -0
- package/dist/agents/subagents/execute.d.ts.map +1 -0
- package/dist/agents/subagents/execute.js +27 -0
- package/dist/agents/subagents/execute.js.map +1 -0
- package/dist/agents/subagents/explore.d.ts +3 -0
- package/dist/agents/subagents/explore.d.ts.map +1 -0
- package/dist/agents/subagents/explore.js +18 -0
- package/dist/agents/subagents/explore.js.map +1 -0
- package/dist/agents/subagents/plan.d.ts +3 -0
- package/dist/agents/subagents/plan.d.ts.map +1 -0
- package/dist/agents/subagents/plan.js +18 -0
- package/dist/agents/subagents/plan.js.map +1 -0
- package/dist/agents/thread-caveman-state.d.ts +17 -0
- package/dist/agents/thread-caveman-state.d.ts.map +1 -0
- package/dist/agents/thread-caveman-state.js +107 -0
- package/dist/agents/thread-caveman-state.js.map +1 -0
- package/dist/agents/tool-availability.d.ts +10 -0
- package/dist/agents/tool-availability.d.ts.map +1 -0
- package/dist/agents/tool-availability.js +96 -0
- package/dist/agents/tool-availability.js.map +1 -0
- package/dist/agents/tools.d.ts +36 -0
- package/dist/agents/tools.d.ts.map +1 -0
- package/dist/agents/tools.js +117 -0
- package/dist/agents/tools.js.map +1 -0
- package/dist/agents/workflow-builder-agent.d.ts +2 -0
- package/dist/agents/workflow-builder-agent.d.ts.map +1 -0
- package/dist/agents/workflow-builder-agent.js +80 -0
- package/dist/agents/workflow-builder-agent.js.map +1 -0
- package/dist/agents/workspace.d.ts +32 -0
- package/dist/agents/workspace.d.ts.map +1 -0
- package/dist/agents/workspace.js +208 -0
- package/dist/agents/workspace.js.map +1 -0
- package/dist/analytics.d.ts +18 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/analytics.js +163 -0
- package/dist/analytics.js.map +1 -0
- package/dist/auth/authorization-input.d.ts +16 -0
- package/dist/auth/authorization-input.d.ts.map +1 -0
- package/dist/auth/authorization-input.js +42 -0
- package/dist/auth/authorization-input.js.map +1 -0
- package/dist/auth/device-code.d.ts +93 -0
- package/dist/auth/device-code.d.ts.map +1 -0
- package/dist/auth/device-code.js +129 -0
- package/dist/auth/device-code.js.map +1 -0
- package/dist/auth/index.d.ts +12 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +8 -0
- package/dist/auth/pkce.d.ts +13 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +32 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/auth/provider-auth-error.d.ts +12 -0
- package/dist/auth/provider-auth-error.d.ts.map +1 -0
- package/dist/auth/provider-auth-error.js +16 -0
- package/dist/auth/provider-auth-error.js.map +1 -0
- package/dist/auth/providers/anthropic.d.ts +40 -0
- package/dist/auth/providers/anthropic.d.ts.map +1 -0
- package/dist/auth/providers/anthropic.js +126 -0
- package/dist/auth/providers/anthropic.js.map +1 -0
- package/dist/auth/providers/github-copilot.d.ts +154 -0
- package/dist/auth/providers/github-copilot.d.ts.map +1 -0
- package/dist/auth/providers/github-copilot.js +340 -0
- package/dist/auth/providers/github-copilot.js.map +1 -0
- package/dist/auth/providers/kimi-coding.d.ts +38 -0
- package/dist/auth/providers/kimi-coding.d.ts.map +1 -0
- package/dist/auth/providers/kimi-coding.js +232 -0
- package/dist/auth/providers/kimi-coding.js.map +1 -0
- package/dist/auth/providers/openai-codex.d.ts +139 -0
- package/dist/auth/providers/openai-codex.d.ts.map +1 -0
- package/dist/auth/providers/openai-codex.js +519 -0
- package/dist/auth/providers/openai-codex.js.map +1 -0
- package/dist/auth/providers/xai.d.ts +64 -0
- package/dist/auth/providers/xai.d.ts.map +1 -0
- package/dist/auth/providers/xai.js +205 -0
- package/dist/auth/providers/xai.js.map +1 -0
- package/dist/auth/storage.d.ts +92 -0
- package/dist/auth/storage.d.ts.map +1 -0
- package/dist/auth/storage.js +211 -0
- package/dist/auth/storage.js.map +1 -0
- package/dist/auth/types.d.ts +89 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +1 -0
- package/dist/clipboard/index.d.ts +26 -0
- package/dist/clipboard/index.d.ts.map +1 -0
- package/dist/clipboard/index.js +226 -0
- package/dist/clipboard/index.js.map +1 -0
- package/dist/constants.d.ts +10 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +18 -0
- package/dist/constants.js.map +1 -0
- package/dist/error-classification.d.ts +10 -0
- package/dist/error-classification.d.ts.map +1 -0
- package/dist/error-classification.js +22 -0
- package/dist/error-classification.js.map +1 -0
- package/dist/evals/context-builder.d.ts +41 -0
- package/dist/evals/context-builder.d.ts.map +1 -0
- package/dist/evals/context-builder.js +161 -0
- package/dist/evals/context-builder.js.map +1 -0
- package/dist/evals/index.d.ts +4 -0
- package/dist/evals/index.d.ts.map +1 -0
- package/dist/evals/index.js +5 -0
- package/dist/evals/scorers/classify-command.d.ts +31 -0
- package/dist/evals/scorers/classify-command.d.ts.map +1 -0
- package/dist/evals/scorers/classify-command.js +73 -0
- package/dist/evals/scorers/classify-command.js.map +1 -0
- package/dist/evals/scorers/efficiency.d.ts +44 -0
- package/dist/evals/scorers/efficiency.d.ts.map +1 -0
- package/dist/evals/scorers/efficiency.js +259 -0
- package/dist/evals/scorers/efficiency.js.map +1 -0
- package/dist/evals/scorers/extract-tools.d.ts +25 -0
- package/dist/evals/scorers/extract-tools.d.ts.map +1 -0
- package/dist/evals/scorers/extract-tools.js +60 -0
- package/dist/evals/scorers/extract-tools.js.map +1 -0
- package/dist/evals/scorers/index.d.ts +3 -0
- package/dist/evals/scorers/index.d.ts.map +1 -0
- package/dist/evals/scorers/index.js +3 -0
- package/dist/evals/scorers/outcome.d.ts +49 -0
- package/dist/evals/scorers/outcome.d.ts.map +1 -0
- package/dist/evals/scorers/outcome.js +347 -0
- package/dist/evals/scorers/outcome.js.map +1 -0
- package/dist/goal-manager.d.ts +78 -0
- package/dist/goal-manager.d.ts.map +1 -0
- package/dist/goal-manager.js +273 -0
- package/dist/goal-manager.js.map +1 -0
- package/dist/goal-signal.d.ts +14 -0
- package/dist/goal-signal.d.ts.map +1 -0
- package/dist/goal-signal.js +17 -0
- package/dist/goal-signal.js.map +1 -0
- package/dist/headless/cli.d.ts +42 -0
- package/dist/headless/cli.d.ts.map +1 -0
- package/dist/headless/cli.js +209 -0
- package/dist/headless/cli.js.map +1 -0
- package/dist/headless/flags.d.ts +33 -0
- package/dist/headless/flags.d.ts.map +1 -0
- package/dist/headless/flags.js +190 -0
- package/dist/headless/flags.js.map +1 -0
- package/dist/headless/format.d.ts +38 -0
- package/dist/headless/format.d.ts.map +1 -0
- package/dist/headless/format.js +89 -0
- package/dist/headless/format.js.map +1 -0
- package/dist/headless/index.d.ts +25 -0
- package/dist/headless/index.d.ts.map +1 -0
- package/dist/headless/index.js +6 -0
- package/dist/headless/policy.d.ts +17 -0
- package/dist/headless/policy.d.ts.map +1 -0
- package/dist/headless/policy.js +42 -0
- package/dist/headless/policy.js.map +1 -0
- package/dist/headless/run-mc.d.ts +7 -0
- package/dist/headless/run-mc.d.ts.map +1 -0
- package/dist/headless/run-mc.js +346 -0
- package/dist/headless/run-mc.js.map +1 -0
- package/dist/headless/types.d.ts +158 -0
- package/dist/headless/types.d.ts.map +1 -0
- package/dist/headless/types.js +19 -0
- package/dist/headless/types.js.map +1 -0
- package/dist/hooks/config.d.ts +11 -0
- package/dist/hooks/config.d.ts.map +1 -0
- package/dist/hooks/config.js +73 -0
- package/dist/hooks/config.js.map +1 -0
- package/dist/hooks/executor.d.ts +13 -0
- package/dist/hooks/executor.d.ts.map +1 -0
- package/dist/hooks/executor.js +129 -0
- package/dist/hooks/executor.js.map +1 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +5 -0
- package/dist/hooks/manager.d.ts +54 -0
- package/dist/hooks/manager.d.ts.map +1 -0
- package/dist/hooks/manager.js +241 -0
- package/dist/hooks/manager.js.map +1 -0
- package/dist/hooks/types.d.ts +172 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +8 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +341 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +919 -0
- package/dist/index.js.map +1 -0
- package/dist/ipc/ipc-reporter.d.ts +14 -0
- package/dist/ipc/ipc-reporter.d.ts.map +1 -0
- package/dist/ipc/ipc-reporter.js +21 -0
- package/dist/ipc/ipc-reporter.js.map +1 -0
- package/dist/knowledge-inspector.d.ts +119 -0
- package/dist/knowledge-inspector.d.ts.map +1 -0
- package/dist/knowledge-inspector.js +508 -0
- package/dist/knowledge-inspector.js.map +1 -0
- package/dist/knowledge-scope.d.ts +35 -0
- package/dist/knowledge-scope.d.ts.map +1 -0
- package/dist/knowledge-scope.js +47 -0
- package/dist/knowledge-scope.js.map +1 -0
- package/dist/lsp/client.d.ts +56 -0
- package/dist/lsp/client.d.ts.map +1 -0
- package/dist/lsp/client.js +251 -0
- package/dist/lsp/client.js.map +1 -0
- package/dist/lsp/index.d.ts +4 -0
- package/dist/lsp/index.d.ts.map +1 -0
- package/dist/lsp/index.js +4 -0
- package/dist/lsp/language.d.ts +9 -0
- package/dist/lsp/language.d.ts.map +1 -0
- package/dist/lsp/language.js +44 -0
- package/dist/lsp/language.js.map +1 -0
- package/dist/lsp/manager.d.ts +34 -0
- package/dist/lsp/manager.d.ts.map +1 -0
- package/dist/lsp/manager.js +82 -0
- package/dist/lsp/manager.js.map +1 -0
- package/dist/lsp/server.d.ts +27 -0
- package/dist/lsp/server.d.ts.map +1 -0
- package/dist/lsp/server.js +159 -0
- package/dist/lsp/server.js.map +1 -0
- package/dist/lsp/workspace.d.ts +9 -0
- package/dist/lsp/workspace.d.ts.map +1 -0
- package/dist/lsp/workspace.js +55 -0
- package/dist/lsp/workspace.js.map +1 -0
- package/dist/mcp/config.d.ts +62 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +301 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/index.d.ts +6 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +3 -0
- package/dist/mcp/manager.d.ts +101 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +644 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/state.d.ts +35 -0
- package/dist/mcp/state.d.ts.map +1 -0
- package/dist/mcp/state.js +97 -0
- package/dist/mcp/state.js.map +1 -0
- package/dist/mcp/types.d.ts +125 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +1 -0
- package/dist/onboarding/custom-packs.d.ts +7 -0
- package/dist/onboarding/custom-packs.d.ts.map +1 -0
- package/dist/onboarding/custom-packs.js +17 -0
- package/dist/onboarding/custom-packs.js.map +1 -0
- package/dist/onboarding/custom-providers.d.ts +4 -0
- package/dist/onboarding/custom-providers.d.ts.map +1 -0
- package/dist/onboarding/custom-providers.js +30 -0
- package/dist/onboarding/custom-providers.js.map +1 -0
- package/dist/onboarding/index.d.ts +5 -0
- package/dist/onboarding/index.d.ts.map +1 -0
- package/dist/onboarding/index.js +3 -0
- package/dist/onboarding/om-settings.d.ts +25 -0
- package/dist/onboarding/om-settings.d.ts.map +1 -0
- package/dist/onboarding/om-settings.js +47 -0
- package/dist/onboarding/om-settings.js.map +1 -0
- package/dist/onboarding/packs.d.ts +49 -0
- package/dist/onboarding/packs.d.ts.map +1 -0
- package/dist/onboarding/packs.js +182 -0
- package/dist/onboarding/packs.js.map +1 -0
- package/dist/onboarding/settings.d.ts +438 -0
- package/dist/onboarding/settings.d.ts.map +1 -0
- package/dist/onboarding/settings.js +847 -0
- package/dist/onboarding/settings.js.map +1 -0
- package/dist/permissions.d.ts +55 -0
- package/dist/permissions.d.ts.map +1 -0
- package/dist/permissions.js +137 -0
- package/dist/permissions.js.map +1 -0
- package/dist/plugin.d.ts +144 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +30 -0
- package/dist/plugin.js.map +1 -0
- package/dist/plugins/dependencies.d.ts +9 -0
- package/dist/plugins/dependencies.d.ts.map +1 -0
- package/dist/plugins/dependencies.js +88 -0
- package/dist/plugins/dependencies.js.map +1 -0
- package/dist/plugins/install.d.ts +21 -0
- package/dist/plugins/install.d.ts.map +1 -0
- package/dist/plugins/install.js +190 -0
- package/dist/plugins/install.js.map +1 -0
- package/dist/plugins/loader.d.ts +19 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +258 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +98 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +456 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/manifest.d.ts +14 -0
- package/dist/plugins/manifest.d.ts.map +1 -0
- package/dist/plugins/manifest.js +50 -0
- package/dist/plugins/manifest.js.map +1 -0
- package/dist/plugins/package-link.d.ts +3 -0
- package/dist/plugins/package-link.d.ts.map +1 -0
- package/dist/plugins/package-link.js +61 -0
- package/dist/plugins/package-link.js.map +1 -0
- package/dist/plugins/paths.d.ts +10 -0
- package/dist/plugins/paths.d.ts.map +1 -0
- package/dist/plugins/paths.js +25 -0
- package/dist/plugins/paths.js.map +1 -0
- package/dist/plugins/registry.d.ts +8 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +112 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/scaffold.d.ts +10 -0
- package/dist/plugins/scaffold.d.ts.map +1 -0
- package/dist/plugins/scaffold.js +116 -0
- package/dist/plugins/scaffold.js.map +1 -0
- package/dist/plugins/signal-lane.d.ts +58 -0
- package/dist/plugins/signal-lane.d.ts.map +1 -0
- package/dist/plugins/signal-lane.js +166 -0
- package/dist/plugins/signal-lane.js.map +1 -0
- package/dist/plugins/types.d.ts +81 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +1 -0
- package/dist/process-memory-diagnostics.d.ts +135 -0
- package/dist/process-memory-diagnostics.d.ts.map +1 -0
- package/dist/process-memory-diagnostics.js +500 -0
- package/dist/process-memory-diagnostics.js.map +1 -0
- package/dist/processors/plan-rejection-abort.d.ts +12 -0
- package/dist/processors/plan-rejection-abort.d.ts.map +1 -0
- package/dist/processors/plan-rejection-abort.js +54 -0
- package/dist/processors/plan-rejection-abort.js.map +1 -0
- package/dist/providers/amazon-bedrock-gateway.d.ts +47 -0
- package/dist/providers/amazon-bedrock-gateway.d.ts.map +1 -0
- package/dist/providers/amazon-bedrock-gateway.js +153 -0
- package/dist/providers/amazon-bedrock-gateway.js.map +1 -0
- package/dist/providers/amazon-bedrock.d.ts +28 -0
- package/dist/providers/amazon-bedrock.d.ts.map +1 -0
- package/dist/providers/amazon-bedrock.js +102 -0
- package/dist/providers/amazon-bedrock.js.map +1 -0
- package/dist/providers/claude-max.d.ts +65 -0
- package/dist/providers/claude-max.d.ts.map +1 -0
- package/dist/providers/claude-max.js +252 -0
- package/dist/providers/claude-max.js.map +1 -0
- package/dist/providers/github-copilot.d.ts +60 -0
- package/dist/providers/github-copilot.d.ts.map +1 -0
- package/dist/providers/github-copilot.js +266 -0
- package/dist/providers/github-copilot.js.map +1 -0
- package/dist/providers/kimi-coding.d.ts +15 -0
- package/dist/providers/kimi-coding.d.ts.map +1 -0
- package/dist/providers/kimi-coding.js +69 -0
- package/dist/providers/kimi-coding.js.map +1 -0
- package/dist/providers/openai-codex.d.ts +73 -0
- package/dist/providers/openai-codex.d.ts.map +1 -0
- package/dist/providers/openai-codex.js +306 -0
- package/dist/providers/openai-codex.js.map +1 -0
- package/dist/providers/xai.d.ts +33 -0
- package/dist/providers/xai.d.ts.map +1 -0
- package/dist/providers/xai.js +71 -0
- package/dist/providers/xai.js.map +1 -0
- package/dist/schema.d.ts +200 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +92 -0
- package/dist/schema.js.map +1 -0
- package/dist/theme-palette.d.ts +17 -0
- package/dist/theme-palette.d.ts.map +1 -0
- package/dist/theme-palette.js +21 -0
- package/dist/theme-palette.js.map +1 -0
- package/dist/thinking.d.ts +33 -0
- package/dist/thinking.d.ts.map +1 -0
- package/dist/thinking.js +58 -0
- package/dist/thinking.js.map +1 -0
- package/dist/tool-names.d.ts +73 -0
- package/dist/tool-names.d.ts.map +1 -0
- package/dist/tool-names.js +52 -0
- package/dist/tool-names.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +3 -0
- package/dist/tools/request-sandbox-access.d.ts +6 -0
- package/dist/tools/request-sandbox-access.d.ts.map +1 -0
- package/dist/tools/request-sandbox-access.js +79 -0
- package/dist/tools/request-sandbox-access.js.map +1 -0
- package/dist/tools/utils.d.ts +20 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +32 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools/web-search.d.ts +114 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +155 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/tools/workflows/create-workflow.d.ts +7 -0
- package/dist/tools/workflows/create-workflow.d.ts.map +1 -0
- package/dist/tools/workflows/create-workflow.js +81 -0
- package/dist/tools/workflows/create-workflow.js.map +1 -0
- package/dist/tools/workflows/delete-workflow.d.ts +7 -0
- package/dist/tools/workflows/delete-workflow.d.ts.map +1 -0
- package/dist/tools/workflows/delete-workflow.js +21 -0
- package/dist/tools/workflows/delete-workflow.js.map +1 -0
- package/dist/tools/workflows/ephemeral-memory.d.ts +7 -0
- package/dist/tools/workflows/ephemeral-memory.d.ts.map +1 -0
- package/dist/tools/workflows/ephemeral-memory.js +45 -0
- package/dist/tools/workflows/ephemeral-memory.js.map +1 -0
- package/dist/tools/workflows/extract-json-schema.d.ts +12 -0
- package/dist/tools/workflows/extract-json-schema.d.ts.map +1 -0
- package/dist/tools/workflows/extract-json-schema.js +22 -0
- package/dist/tools/workflows/extract-json-schema.js.map +1 -0
- package/dist/tools/workflows/get-workflow.d.ts +11 -0
- package/dist/tools/workflows/get-workflow.d.ts.map +1 -0
- package/dist/tools/workflows/get-workflow.js +34 -0
- package/dist/tools/workflows/get-workflow.js.map +1 -0
- package/dist/tools/workflows/list-available-agents.d.ts +8 -0
- package/dist/tools/workflows/list-available-agents.d.ts.map +1 -0
- package/dist/tools/workflows/list-available-agents.js +32 -0
- package/dist/tools/workflows/list-available-agents.js.map +1 -0
- package/dist/tools/workflows/list-available-tools.d.ts +9 -0
- package/dist/tools/workflows/list-available-tools.d.ts.map +1 -0
- package/dist/tools/workflows/list-available-tools.js +40 -0
- package/dist/tools/workflows/list-available-tools.js.map +1 -0
- package/dist/tools/workflows/list-available-workflows.d.ts +9 -0
- package/dist/tools/workflows/list-available-workflows.d.ts.map +1 -0
- package/dist/tools/workflows/list-available-workflows.js +32 -0
- package/dist/tools/workflows/list-available-workflows.js.map +1 -0
- package/dist/tools/workflows/list-workflows.d.ts +9 -0
- package/dist/tools/workflows/list-workflows.d.ts.map +1 -0
- package/dist/tools/workflows/list-workflows.js +33 -0
- package/dist/tools/workflows/list-workflows.js.map +1 -0
- package/dist/tools/workflows/run-workflow.d.ts +9 -0
- package/dist/tools/workflows/run-workflow.d.ts.map +1 -0
- package/dist/tools/workflows/run-workflow.js +52 -0
- package/dist/tools/workflows/run-workflow.js.map +1 -0
- package/dist/tools/workflows/save-workflow.d.ts +1015 -0
- package/dist/tools/workflows/save-workflow.d.ts.map +1 -0
- package/dist/tools/workflows/save-workflow.js +28 -0
- package/dist/tools/workflows/save-workflow.js.map +1 -0
- package/dist/tools/workflows/tool-ids.d.ts +15 -0
- package/dist/tools/workflows/tool-ids.d.ts.map +1 -0
- package/dist/tools/workflows/tool-ids.js +19 -0
- package/dist/tools/workflows/tool-ids.js.map +1 -0
- package/dist/utils/binaries.d.ts +7 -0
- package/dist/utils/binaries.d.ts.map +1 -0
- package/dist/utils/binaries.js +78 -0
- package/dist/utils/binaries.js.map +1 -0
- package/dist/utils/debug-log.d.ts +12 -0
- package/dist/utils/debug-log.d.ts.map +1 -0
- package/dist/utils/debug-log.js +59 -0
- package/dist/utils/debug-log.js.map +1 -0
- package/dist/utils/errors.d.ts +36 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +196 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/gateway-sync.d.ts +26 -0
- package/dist/utils/gateway-sync.d.ts.map +1 -0
- package/dist/utils/gateway-sync.js +61 -0
- package/dist/utils/gateway-sync.js.map +1 -0
- package/dist/utils/path-security.d.ts +2 -0
- package/dist/utils/path-security.d.ts.map +1 -0
- package/dist/utils/path-security.js +10 -0
- package/dist/utils/path-security.js.map +1 -0
- package/dist/utils/plan-diff.d.ts +25 -0
- package/dist/utils/plan-diff.d.ts.map +1 -0
- package/dist/utils/plan-diff.js +62 -0
- package/dist/utils/plan-diff.js.map +1 -0
- package/dist/utils/plans.d.ts +59 -0
- package/dist/utils/plans.d.ts.map +1 -0
- package/dist/utils/plans.js +117 -0
- package/dist/utils/plans.js.map +1 -0
- package/dist/utils/project.d.ts +160 -0
- package/dist/utils/project.d.ts.map +1 -0
- package/dist/utils/project.js +364 -0
- package/dist/utils/project.js.map +1 -0
- package/dist/utils/signals-pubsub.d.ts +41 -0
- package/dist/utils/signals-pubsub.d.ts.map +1 -0
- package/dist/utils/signals-pubsub.js +122 -0
- package/dist/utils/signals-pubsub.js.map +1 -0
- package/dist/utils/slash-command-loader.d.ts +52 -0
- package/dist/utils/slash-command-loader.d.ts.map +1 -0
- package/dist/utils/slash-command-loader.js +142 -0
- package/dist/utils/slash-command-loader.js.map +1 -0
- package/dist/utils/slash-command-processor.d.ts +14 -0
- package/dist/utils/slash-command-processor.d.ts.map +1 -0
- package/dist/utils/slash-command-processor.js +109 -0
- package/dist/utils/slash-command-processor.js.map +1 -0
- package/dist/utils/stdin-pipe.d.ts +33 -0
- package/dist/utils/stdin-pipe.d.ts.map +1 -0
- package/dist/utils/stdin-pipe.js +96 -0
- package/dist/utils/stdin-pipe.js.map +1 -0
- package/dist/utils/storage-factory.d.ts +50 -0
- package/dist/utils/storage-factory.d.ts.map +1 -0
- package/dist/utils/storage-factory.js +121 -0
- package/dist/utils/storage-factory.js.map +1 -0
- package/dist/utils/storage-maintenance.d.ts +103 -0
- package/dist/utils/storage-maintenance.d.ts.map +1 -0
- package/dist/utils/storage-maintenance.js +274 -0
- package/dist/utils/storage-maintenance.js.map +1 -0
- package/dist/utils/thread-lock.d.ts +26 -0
- package/dist/utils/thread-lock.d.ts.map +1 -0
- package/dist/utils/thread-lock.js +112 -0
- package/dist/utils/thread-lock.js.map +1 -0
- package/dist/utils/token-estimator.d.ts +3 -0
- package/dist/utils/token-estimator.d.ts.map +1 -0
- package/dist/utils/token-estimator.js +21 -0
- package/dist/utils/token-estimator.js.map +1 -0
- package/dist/utils/update-check.d.ts +101 -0
- package/dist/utils/update-check.d.ts.map +1 -0
- package/dist/utils/update-check.js +383 -0
- package/dist/utils/update-check.js.map +1 -0
- package/dist/voice/stt-registry.d.ts +64 -0
- package/dist/voice/stt-registry.d.ts.map +1 -0
- package/dist/voice/stt-registry.js +144 -0
- package/dist/voice/stt-registry.js.map +1 -0
- package/dist/workflows/register-primitives.d.ts +52 -0
- package/dist/workflows/register-primitives.d.ts.map +1 -0
- package/dist/workflows/register-primitives.js +40 -0
- package/dist/workflows/register-primitives.js.map +1 -0
- package/dist/workflows/service.d.ts +64 -0
- package/dist/workflows/service.d.ts.map +1 -0
- package/dist/workflows/service.js +53 -0
- package/dist/workflows/service.js.map +1 -0
- package/package.json +97 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","names":[],"sources":["../../src/plugins/loader.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\n\nimport { isSignalProvider } from '@mastra/core/signals';\nimport type { SignalProvider } from '@mastra/core/signals';\n\nimport type {\n MastraCodePlugin,\n MastraCodePluginConfigSchema,\n MastraCodePluginConfigValues,\n MastraCodePluginContext,\n MastraCodePluginProcessorEntries,\n MastraCodePluginRuntime,\n MastraCodePluginSignalProviderEntries,\n MastraCodePluginToolEntries,\n MastraCodePluginTools,\n MastraCodeToolRenderConfig,\n} from '../plugin.js';\nimport { getPluginRoot } from './paths.js';\nimport type { PluginPathOptions } from './paths.js';\nimport { loadPluginRegistry, mergePluginRegistries } from './registry.js';\nimport type { LoadedPlugin, LoadedPluginProcessors, PluginRegistry, ScopedInstalledPluginRecord } from './types.js';\n\nexport type LoadPluginRecordOptions = PluginPathOptions & {\n /** Lazy accessors for Mastra Code's runtime, passed on to plugin field resolvers. */\n runtime?: MastraCodePluginRuntime;\n};\n\nexport type LoadPluginsOptions = LoadPluginRecordOptions & {\n globalRegistry?: PluginRegistry;\n projectRegistry?: PluginRegistry;\n};\n\nexport async function loadPlugins(options: LoadPluginsOptions): Promise<LoadedPlugin[]> {\n const globalRegistry =\n options.globalRegistry ?? loadPluginRegistry(path.join(getPluginRoot('global', options), 'plugins.json'));\n const projectRegistry =\n options.projectRegistry ?? loadPluginRegistry(path.join(getPluginRoot('project', options), 'plugins.json'));\n const records = mergePluginRegistries(globalRegistry, projectRegistry);\n const loaded: LoadedPlugin[] = [];\n\n for (const record of records) {\n if (record.blocked) {\n loaded.push({ ...record, status: 'blocked', tools: {}, toolNames: [] });\n continue;\n }\n if (!record.enabled) {\n loaded.push({ ...record, status: 'inactive', tools: {}, toolNames: [] });\n continue;\n }\n\n loaded.push(await loadPluginRecord(record, options));\n }\n\n return markToolConflicts(loaded);\n}\n\nexport async function loadPluginRecord(\n record: ScopedInstalledPluginRecord,\n options: LoadPluginRecordOptions,\n): Promise<LoadedPlugin> {\n try {\n const entryPath = resolvePluginEntryPath(record, options);\n const plugin = await importPluginModule(entryPath);\n if (plugin.id !== record.id) {\n throw new Error(`Plugin id mismatch: registry has \"${record.id}\" but module exports \"${plugin.id}\"`);\n }\n\n const configSchema = validatePluginConfigSchema(plugin.config);\n const configValues = resolvePluginConfigValues(configSchema, record.config);\n const pluginDir = path.dirname(entryPath);\n const pluginRoot = resolvePluginRoot(record, options);\n const context: MastraCodePluginContext = {\n cwd: options.projectRoot,\n scope: record.scope,\n pluginDir,\n config: configValues,\n // Accessors, not instances: plugins load before the controller and the\n // session exist, so a plugin resolves these when it needs them, not now.\n getController: options.runtime?.getController,\n getActiveSession: options.runtime?.getActiveSession,\n };\n const { tools, renderConfigs } = await resolvePluginTools(plugin, context);\n const processors = await resolvePluginProcessors(plugin, context);\n const signalProviders = await resolvePluginSignalProviders(plugin, context);\n const instructions = await resolvePluginInstructions(plugin, context);\n\n return {\n ...record,\n name: plugin.name,\n version: plugin.version ?? record.version,\n description: plugin.description,\n instructions,\n status: 'active',\n tools,\n renderConfigs,\n toolNames: Object.keys(tools).sort(),\n processors,\n signalProviders,\n skillPaths: resolveExistingAssetDirs(pluginRoot, 'skills'),\n commandPaths: resolveExistingAssetDirs(pluginRoot, 'commands'),\n configSchema,\n configValues,\n };\n } catch (error) {\n return {\n ...record,\n status: 'load failed',\n error: error instanceof Error ? error.message : String(error),\n tools: {},\n toolNames: [],\n };\n }\n}\n\nexport async function loadPluginFromEntry(entryPath: string): Promise<MastraCodePlugin> {\n return validatePluginExport(await importPluginModule(entryPath));\n}\n\nexport function resolvePluginRoot(record: ScopedInstalledPluginRecord, options: PluginPathOptions): string {\n const scopeRoot = path.resolve(getPluginRoot(record.scope, options));\n const pluginRoot = path.resolve(path.isAbsolute(record.path) ? record.path : path.join(scopeRoot, record.path));\n if (record.source === 'github' && !isInsideDirectory(pluginRoot, scopeRoot)) {\n throw new Error(`Plugin path for \"${record.id}\" must be inside the ${record.scope} plugin directory`);\n }\n return pluginRoot;\n}\n\nexport function resolvePluginEntryPath(record: ScopedInstalledPluginRecord, options: PluginPathOptions): string {\n const pluginRoot = resolvePluginRoot(record, options);\n const entryPath = path.resolve(pluginRoot, record.entry);\n if (!isInsideDirectory(entryPath, pluginRoot)) {\n throw new Error(`Plugin entry for \"${record.id}\" must be inside the plugin directory`);\n }\n return entryPath;\n}\n\nexport function isInsideDirectory(targetPath: string, root: string): boolean {\n const resolvedTarget = path.resolve(targetPath);\n const resolvedRoot = path.resolve(root);\n return resolvedTarget === resolvedRoot || resolvedTarget.startsWith(resolvedRoot + path.sep);\n}\n\nfunction resolveExistingAssetDirs(pluginRoot: string, dirname: 'skills' | 'commands'): string[] {\n const dir = path.join(pluginRoot, dirname);\n try {\n return fs.statSync(dir).isDirectory() ? [dir] : [];\n } catch {\n return [];\n }\n}\n\nasync function importPluginModule(entryPath: string): Promise<MastraCodePlugin> {\n if (path.extname(entryPath) !== '.ts') {\n throw new Error(\n `Unsupported plugin entry extension \"${path.extname(entryPath)}\". V1 plugins must use .ts entries.`,\n );\n }\n\n const url = pathToFileURL(entryPath);\n const stat = fs.statSync(entryPath, { bigint: true });\n url.searchParams.set('mtimeNs', stat.mtimeNs.toString());\n url.searchParams.set('size', stat.size.toString());\n const mod = (await import(url.href)) as { default?: unknown; plugin?: unknown };\n return validatePluginExport(mod.default ?? mod.plugin);\n}\n\nfunction validatePluginExport(value: unknown): MastraCodePlugin {\n if (!value || typeof value !== 'object') {\n throw new Error('Plugin module must export a plugin object as default or named \"plugin\" export');\n }\n\n const plugin = value as MastraCodePlugin;\n if (typeof plugin.id !== 'string' || plugin.id.trim().length === 0) {\n throw new Error('Plugin id must be a non-empty string');\n }\n\n if (plugin.tools !== undefined && typeof plugin.tools !== 'object' && typeof plugin.tools !== 'function') {\n throw new Error('Plugin tools must be an object or function');\n }\n\n if (\n plugin.processors !== undefined &&\n typeof plugin.processors !== 'object' &&\n typeof plugin.processors !== 'function'\n ) {\n throw new Error('Plugin processors must be an array, object, or function');\n }\n\n if (\n plugin.signalProviders !== undefined &&\n !Array.isArray(plugin.signalProviders) &&\n typeof plugin.signalProviders !== 'function'\n ) {\n throw new Error('Plugin signal providers must be an array or function');\n }\n\n return plugin;\n}\n\nasync function resolvePluginTools(\n plugin: MastraCodePlugin,\n context: MastraCodePluginContext,\n): Promise<{ tools: MastraCodePluginTools; renderConfigs: Record<string, MastraCodeToolRenderConfig> }> {\n if (!plugin.tools) return { tools: {}, renderConfigs: {} };\n const entries = typeof plugin.tools === 'function' ? await plugin.tools(context) : plugin.tools;\n if (!entries || typeof entries !== 'object' || Array.isArray(entries)) {\n throw new Error('Plugin tools function must return an object');\n }\n return normalizePluginToolEntries(entries);\n}\n\n/** Mirrors {@link resolvePluginTools}: object-or-function, resolved with the same context. */\nasync function resolvePluginProcessors(\n plugin: MastraCodePlugin,\n context: MastraCodePluginContext,\n): Promise<LoadedPluginProcessors> {\n if (!plugin.processors) return { input: [], output: [] };\n const entries = typeof plugin.processors === 'function' ? await plugin.processors(context) : plugin.processors;\n if (!entries || typeof entries !== 'object') {\n throw new Error('Plugin processors function must return an array or object');\n }\n return normalizePluginProcessorEntries(entries);\n}\n\nasync function resolvePluginSignalProviders(\n plugin: MastraCodePlugin,\n context: MastraCodePluginContext,\n): Promise<MastraCodePluginSignalProviderEntries> {\n if (!plugin.signalProviders) return [];\n const entries =\n typeof plugin.signalProviders === 'function' ? await plugin.signalProviders(context) : plugin.signalProviders;\n if (!Array.isArray(entries)) {\n throw new Error('Plugin signal providers function must return an array');\n }\n for (const [index, provider] of entries.entries()) {\n if (!isPluginSignalProvider(provider)) {\n throw new Error(\n `Plugin signal provider at index ${index} must be a SignalProvider (an object with an id that implements connect, startPolling, stop and __registerMastra)`,\n );\n }\n }\n return entries;\n}\n\n/**\n * Structural, not `instanceof`.\n *\n * A plugin that depends on a published provider package — the motivating case, a plugin wrapping\n * `@mastra/github-signals` — installs that package's own copy of `@mastra/core`, so its provider is\n * never an instance of the `SignalProvider` class Mastra Code loaded. `isSignalProvider` would reject\n * a perfectly working provider. Nothing in the lifecycle needs class identity: the lane only calls\n * these methods, so the methods are what is checked.\n */\nfunction isPluginSignalProvider(value: unknown): value is SignalProvider<string> {\n if (isSignalProvider(value)) return true;\n if (!value || typeof value !== 'object') return false;\n const candidate = value as Partial<SignalProvider<string>> & { __registerMastra?: unknown };\n return (\n typeof candidate.id === 'string' &&\n candidate.id.length > 0 &&\n typeof candidate.connect === 'function' &&\n typeof candidate.startPolling === 'function' &&\n typeof candidate.stop === 'function' &&\n typeof candidate.__registerMastra === 'function'\n );\n}\n\n/** A bare array is shorthand for the input lane, the common case. */\nfunction normalizePluginProcessorEntries(entries: MastraCodePluginProcessorEntries): LoadedPluginProcessors {\n const input = Array.isArray(entries) ? entries : (entries.input ?? []);\n const output = Array.isArray(entries) ? [] : (entries.output ?? []);\n if (!Array.isArray(input) || !Array.isArray(output)) {\n throw new Error('Plugin processor lanes must be arrays');\n }\n for (const processor of [...input, ...output]) {\n if (!processor || typeof processor !== 'object' || typeof processor.id !== 'string') {\n throw new Error('Plugin processors must be objects with an id');\n }\n }\n return { input, output };\n}\n\nasync function resolvePluginInstructions(\n plugin: MastraCodePlugin,\n context: MastraCodePluginContext,\n): Promise<string | undefined> {\n if (plugin.instructions === undefined) return undefined;\n const instructions =\n typeof plugin.instructions === 'function' ? await plugin.instructions(context) : plugin.instructions;\n if (typeof instructions !== 'string') {\n throw new Error('Plugin instructions must be a string');\n }\n const trimmed = instructions.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction normalizePluginToolEntries(entries: MastraCodePluginToolEntries): {\n tools: MastraCodePluginTools;\n renderConfigs: Record<string, MastraCodeToolRenderConfig>;\n} {\n const tools: MastraCodePluginTools = {};\n const renderConfigs: Record<string, MastraCodeToolRenderConfig> = {};\n for (const [name, entry] of Object.entries(entries)) {\n if (!isToolEntryObject(entry)) {\n throw new Error(`Plugin tool \"${name}\" must be an object with a tool property`);\n }\n tools[name] = entry.tool;\n if (entry.render) renderConfigs[name] = entry.render;\n }\n return { tools, renderConfigs };\n}\n\nfunction isToolEntryObject(entry: MastraCodePluginToolEntries[string]): entry is MastraCodePluginToolEntries[string] {\n if (!entry || typeof entry !== 'object' || !('tool' in entry)) return false;\n const tool = (entry as { tool?: unknown }).tool;\n return !!tool && typeof tool === 'object' && !Array.isArray(tool);\n}\n\nfunction validatePluginConfigSchema(schema: unknown): MastraCodePluginConfigSchema | undefined {\n if (!schema || typeof schema !== 'object' || Array.isArray(schema)) return undefined;\n const validated: MastraCodePluginConfigSchema = {};\n for (const [key, option] of Object.entries(schema)) {\n if (!option || typeof option !== 'object' || Array.isArray(option)) continue;\n const record = option as Record<string, unknown>;\n if (record.type !== 'model' && record.type !== 'boolean' && record.type !== 'string') continue;\n validated[key] = {\n type: record.type,\n ...(typeof record.label === 'string' ? { label: record.label } : {}),\n ...(typeof record.description === 'string' ? { description: record.description } : {}),\n ...(typeof record.default === 'string' || typeof record.default === 'boolean' ? { default: record.default } : {}),\n };\n }\n return Object.keys(validated).length > 0 ? validated : undefined;\n}\n\nfunction resolvePluginConfigValues(\n schema: MastraCodePluginConfigSchema | undefined,\n recordValues: Record<string, unknown> | undefined,\n): MastraCodePluginConfigValues {\n const values: MastraCodePluginConfigValues = {};\n if (!schema) return values;\n for (const [key, option] of Object.entries(schema)) {\n const value = recordValues?.[key];\n if (option.type === 'boolean') {\n values[key] = typeof value === 'boolean' ? value : typeof option.default === 'boolean' ? option.default : false;\n continue;\n }\n values[key] = typeof value === 'string' ? value : typeof option.default === 'string' ? option.default : undefined;\n }\n return values;\n}\n\nexport function collectActivePluginTools(plugins: LoadedPlugin[]): MastraCodePluginTools {\n const tools: MastraCodePluginTools = {};\n for (const plugin of plugins) {\n if (plugin.status !== 'active') continue;\n for (const [name, tool] of Object.entries(plugin.tools)) {\n if (!(name in tools)) {\n tools[name] = tool;\n }\n }\n }\n return tools;\n}\n\nfunction markToolConflicts(plugins: LoadedPlugin[]): LoadedPlugin[] {\n const seen = new Map<string, string>();\n return plugins.map(plugin => {\n if (plugin.status !== 'active') return plugin;\n const conflicts = plugin.toolNames.filter(toolName => seen.has(toolName));\n for (const toolName of plugin.toolNames) {\n if (!seen.has(toolName)) seen.set(toolName, plugin.id);\n }\n return conflicts.length > 0 ? { ...plugin, status: 'conflicted', conflicts } : plugin;\n });\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { SignalProvider } from '@mastra/core/signals';
|
|
2
|
+
import type { MastraCodePluginConfigValue, MastraCodePluginRuntime } from '../plugin.js';
|
|
3
|
+
import { discoverLocalPlugins } from './install.js';
|
|
4
|
+
import type { InstallPluginOptions } from './install.js';
|
|
5
|
+
import type { PluginPathOptions } from './paths.js';
|
|
6
|
+
import type { LoadedPlugin, PluginContribution, PluginProcessorEntries, PluginScope } from './types.js';
|
|
7
|
+
type PluginManagerOptions = PluginPathOptions & {
|
|
8
|
+
githubCliPath?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Lazy accessors for Mastra Code's runtime, handed to plugin field resolvers on
|
|
11
|
+
* every load and reload.
|
|
12
|
+
*/
|
|
13
|
+
runtime?: MastraCodePluginRuntime;
|
|
14
|
+
};
|
|
15
|
+
export declare class PluginManager {
|
|
16
|
+
private readonly options;
|
|
17
|
+
private loadedPlugins;
|
|
18
|
+
private readonly pluginTools;
|
|
19
|
+
private readonly rawPluginTools;
|
|
20
|
+
private readonly toolRenderConfigs;
|
|
21
|
+
private readonly watchedLocalEntries;
|
|
22
|
+
private readonly localEntryVersions;
|
|
23
|
+
/** Last known git HEAD per GitHub checkout, kept current by the poller. */
|
|
24
|
+
private readonly githubCheckoutHeads;
|
|
25
|
+
private githubPollTimer;
|
|
26
|
+
private githubPollInFlight;
|
|
27
|
+
private reloadInFlight;
|
|
28
|
+
private readonly reloadListeners;
|
|
29
|
+
private readonly githubUpdateListeners;
|
|
30
|
+
private runtime;
|
|
31
|
+
constructor(options: PluginManagerOptions);
|
|
32
|
+
/**
|
|
33
|
+
* Publish (or replace) the runtime accessors handed to plugin field resolvers.
|
|
34
|
+
* Takes effect on the next load or reload. `createMastraCode` calls this for
|
|
35
|
+
* every manager it uses — including an injected one — so a manager constructed
|
|
36
|
+
* without a runtime still exposes `getController`/`getActiveSession` to plugins.
|
|
37
|
+
* A manager shared across controllers sees the most recent controller's accessors.
|
|
38
|
+
*/
|
|
39
|
+
setRuntime(runtime: MastraCodePluginRuntime): void;
|
|
40
|
+
onReload(listener: (plugins: LoadedPlugin[]) => void | Promise<void>): () => void;
|
|
41
|
+
/** Notified with the display names of GitHub plugins that were updated by the background poll. */
|
|
42
|
+
onGithubPluginsUpdated(listener: (pluginNames: string[]) => void | Promise<void>): () => void;
|
|
43
|
+
reload(): Promise<LoadedPlugin[]>;
|
|
44
|
+
listPlugins(): Promise<LoadedPlugin[]>;
|
|
45
|
+
getLoadedPlugins(): LoadedPlugin[];
|
|
46
|
+
getPluginTools(): import("../plugin.js").MastraCodePluginTools;
|
|
47
|
+
getToolRenderConfig(toolName: string): import("../plugin.js").MastraCodeToolRenderConfig | undefined;
|
|
48
|
+
getPluginSkillPaths(): string[];
|
|
49
|
+
getPluginCommandPaths(): string[];
|
|
50
|
+
getPluginInstructions(): string[];
|
|
51
|
+
/**
|
|
52
|
+
* Processors contributed by active plugins, tagged with the plugin that owns
|
|
53
|
+
* each one. Reads already-resolved state — no filesystem access — because the
|
|
54
|
+
* agent's processor lanes call this before every request.
|
|
55
|
+
*/
|
|
56
|
+
getPluginProcessors(): PluginProcessorEntries;
|
|
57
|
+
/** Signal providers contributed by active plugins, tagged with their owning plugin. */
|
|
58
|
+
getPluginSignalProviders(): PluginContribution<SignalProvider<string>>[];
|
|
59
|
+
private collectActive;
|
|
60
|
+
private notifyReloadListeners;
|
|
61
|
+
/**
|
|
62
|
+
* Stamps each plugin with a value that changes when its contributions should
|
|
63
|
+
* be rebuilt. Runs on every reload, so it stays off the network: GitHub heads
|
|
64
|
+
* come from the cache the poller keeps current and cost one `git rev-parse`
|
|
65
|
+
* per checkout the first time it is seen.
|
|
66
|
+
*/
|
|
67
|
+
private stampLoadedPlugins;
|
|
68
|
+
private readSourceStamp;
|
|
69
|
+
private updatePluginRenderConfigs;
|
|
70
|
+
private updatePluginTools;
|
|
71
|
+
private createLiveToolProxy;
|
|
72
|
+
private syncLiveToolProxy;
|
|
73
|
+
private reloadChangedLocalPlugins;
|
|
74
|
+
private updateLocalEntryWatchers;
|
|
75
|
+
private updateGithubPoller;
|
|
76
|
+
pollGithubSourcesForUpdates(): Promise<boolean>;
|
|
77
|
+
private pollGithubSourcesForUpdatesOnce;
|
|
78
|
+
private notifyGithubUpdateListeners;
|
|
79
|
+
private refreshGithubCheckout;
|
|
80
|
+
private backupGitCheckout;
|
|
81
|
+
private resolveGitUpstream;
|
|
82
|
+
private readGitAheadBehind;
|
|
83
|
+
private hasGitWorkingTreeChanges;
|
|
84
|
+
private hasGitStagedChanges;
|
|
85
|
+
private restoreGitCheckout;
|
|
86
|
+
private readGitCurrentBranch;
|
|
87
|
+
private createGitBackupBranchName;
|
|
88
|
+
private resolvePluginSourcePath;
|
|
89
|
+
private readGitHead;
|
|
90
|
+
discoverLocal(searchRoot?: string): ReturnType<typeof discoverLocalPlugins>;
|
|
91
|
+
installLocal(localPath: string, scope: PluginScope, options?: Pick<InstallPluginOptions, 'entry'>): Promise<string>;
|
|
92
|
+
installGithub(url: string, scope: PluginScope, options?: Pick<InstallPluginOptions, 'entry' | 'ref' | 'onOutput' | 'signal'>): Promise<string>;
|
|
93
|
+
setEnabled(pluginId: string, scope: PluginScope, enabled: boolean): Promise<void>;
|
|
94
|
+
setConfigValue(pluginId: string, scope: PluginScope, key: string, value: MastraCodePluginConfigValue): Promise<void>;
|
|
95
|
+
uninstall(pluginId: string, scope: PluginScope): Promise<void>;
|
|
96
|
+
}
|
|
97
|
+
export {};
|
|
98
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/plugins/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
import { getEntryPackageRoot, installPluginDependenciesForEntry } from "./dependencies.js";
|
|
2
|
+
import { getPluginScopePaths } from "./paths.js";
|
|
3
|
+
import { loadPluginRegistry, removePluginRecord, savePluginRegistry, setPluginRecord } from "./registry.js";
|
|
4
|
+
import { collectActivePluginTools, isInsideDirectory, loadPlugins, resolvePluginEntryPath } from "./loader.js";
|
|
5
|
+
import { ensureMastraCodePackageLink } from "./package-link.js";
|
|
6
|
+
import { NON_INTERACTIVE_GIT_ENV, discoverLocalPlugins, installGithubPlugin, installLocalPlugin } from "./install.js";
|
|
7
|
+
import fs from "fs";
|
|
8
|
+
import path from "path";
|
|
9
|
+
import { execa } from "execa";
|
|
10
|
+
//#region src/plugins/manager.ts
|
|
11
|
+
const GITHUB_PLUGIN_POLL_INTERVAL_MS = 6e4;
|
|
12
|
+
function gitExecOptions(cwd) {
|
|
13
|
+
return {
|
|
14
|
+
cwd,
|
|
15
|
+
env: NON_INTERACTIVE_GIT_ENV
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function getEntryVersion(entryPath) {
|
|
19
|
+
const stat = fs.statSync(entryPath, { bigint: true });
|
|
20
|
+
return `${stat.mtimeNs}:${stat.size}`;
|
|
21
|
+
}
|
|
22
|
+
var PluginManager = class {
|
|
23
|
+
options;
|
|
24
|
+
loadedPlugins = [];
|
|
25
|
+
pluginTools = {};
|
|
26
|
+
rawPluginTools = {};
|
|
27
|
+
toolRenderConfigs = /* @__PURE__ */ new Map();
|
|
28
|
+
watchedLocalEntries = /* @__PURE__ */ new Set();
|
|
29
|
+
localEntryVersions = /* @__PURE__ */ new Map();
|
|
30
|
+
/** Last known git HEAD per GitHub checkout, kept current by the poller. */
|
|
31
|
+
githubCheckoutHeads = /* @__PURE__ */ new Map();
|
|
32
|
+
githubPollTimer;
|
|
33
|
+
githubPollInFlight;
|
|
34
|
+
reloadInFlight;
|
|
35
|
+
reloadListeners = /* @__PURE__ */ new Set();
|
|
36
|
+
githubUpdateListeners = /* @__PURE__ */ new Set();
|
|
37
|
+
runtime;
|
|
38
|
+
constructor(options) {
|
|
39
|
+
this.options = options;
|
|
40
|
+
this.runtime = options.runtime;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Publish (or replace) the runtime accessors handed to plugin field resolvers.
|
|
44
|
+
* Takes effect on the next load or reload. `createMastraCode` calls this for
|
|
45
|
+
* every manager it uses — including an injected one — so a manager constructed
|
|
46
|
+
* without a runtime still exposes `getController`/`getActiveSession` to plugins.
|
|
47
|
+
* A manager shared across controllers sees the most recent controller's accessors.
|
|
48
|
+
*/
|
|
49
|
+
setRuntime(runtime) {
|
|
50
|
+
this.runtime = runtime;
|
|
51
|
+
}
|
|
52
|
+
onReload(listener) {
|
|
53
|
+
this.reloadListeners.add(listener);
|
|
54
|
+
return () => this.reloadListeners.delete(listener);
|
|
55
|
+
}
|
|
56
|
+
/** Notified with the display names of GitHub plugins that were updated by the background poll. */
|
|
57
|
+
onGithubPluginsUpdated(listener) {
|
|
58
|
+
this.githubUpdateListeners.add(listener);
|
|
59
|
+
return () => this.githubUpdateListeners.delete(listener);
|
|
60
|
+
}
|
|
61
|
+
async reload() {
|
|
62
|
+
if (this.reloadInFlight) return this.reloadInFlight;
|
|
63
|
+
this.reloadInFlight = (async () => {
|
|
64
|
+
this.loadedPlugins = await loadPlugins({
|
|
65
|
+
...this.options,
|
|
66
|
+
runtime: this.runtime
|
|
67
|
+
});
|
|
68
|
+
await this.stampLoadedPlugins(this.loadedPlugins);
|
|
69
|
+
this.updateLocalEntryWatchers(this.loadedPlugins);
|
|
70
|
+
this.updateGithubPoller(this.loadedPlugins);
|
|
71
|
+
this.updatePluginRenderConfigs(this.loadedPlugins);
|
|
72
|
+
this.updatePluginTools(collectActivePluginTools(this.loadedPlugins));
|
|
73
|
+
await this.notifyReloadListeners(this.loadedPlugins);
|
|
74
|
+
return this.loadedPlugins;
|
|
75
|
+
})().finally(() => {
|
|
76
|
+
this.reloadInFlight = void 0;
|
|
77
|
+
});
|
|
78
|
+
return this.reloadInFlight;
|
|
79
|
+
}
|
|
80
|
+
async listPlugins() {
|
|
81
|
+
if (this.loadedPlugins.length === 0) await this.reload();
|
|
82
|
+
return this.loadedPlugins;
|
|
83
|
+
}
|
|
84
|
+
getLoadedPlugins() {
|
|
85
|
+
return this.loadedPlugins;
|
|
86
|
+
}
|
|
87
|
+
getPluginTools() {
|
|
88
|
+
return this.pluginTools;
|
|
89
|
+
}
|
|
90
|
+
getToolRenderConfig(toolName) {
|
|
91
|
+
return this.toolRenderConfigs.get(toolName);
|
|
92
|
+
}
|
|
93
|
+
getPluginSkillPaths() {
|
|
94
|
+
return this.loadedPlugins.flatMap((plugin) => plugin.status === "active" ? plugin.skillPaths ?? [] : []);
|
|
95
|
+
}
|
|
96
|
+
getPluginCommandPaths() {
|
|
97
|
+
return this.loadedPlugins.flatMap((plugin) => plugin.status === "active" ? plugin.commandPaths ?? [] : []);
|
|
98
|
+
}
|
|
99
|
+
getPluginInstructions() {
|
|
100
|
+
return this.loadedPlugins.flatMap((plugin) => plugin.status === "active" && plugin.instructions ? [plugin.instructions] : []);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Processors contributed by active plugins, tagged with the plugin that owns
|
|
104
|
+
* each one. Reads already-resolved state — no filesystem access — because the
|
|
105
|
+
* agent's processor lanes call this before every request.
|
|
106
|
+
*/
|
|
107
|
+
getPluginProcessors() {
|
|
108
|
+
return {
|
|
109
|
+
input: this.collectActive((plugin) => plugin.processors?.input ?? []),
|
|
110
|
+
output: this.collectActive((plugin) => plugin.processors?.output ?? [])
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/** Signal providers contributed by active plugins, tagged with their owning plugin. */
|
|
114
|
+
getPluginSignalProviders() {
|
|
115
|
+
return this.collectActive((plugin) => plugin.signalProviders ?? []);
|
|
116
|
+
}
|
|
117
|
+
collectActive(select) {
|
|
118
|
+
return this.loadedPlugins.flatMap((plugin) => plugin.status === "active" ? select(plugin).map((value) => ({
|
|
119
|
+
pluginId: plugin.id,
|
|
120
|
+
versionStamp: plugin.versionStamp ?? "",
|
|
121
|
+
value
|
|
122
|
+
})) : []);
|
|
123
|
+
}
|
|
124
|
+
async notifyReloadListeners(plugins) {
|
|
125
|
+
await Promise.all([...this.reloadListeners].map((listener) => Promise.resolve(listener(plugins))));
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Stamps each plugin with a value that changes when its contributions should
|
|
129
|
+
* be rebuilt. Runs on every reload, so it stays off the network: GitHub heads
|
|
130
|
+
* come from the cache the poller keeps current and cost one `git rev-parse`
|
|
131
|
+
* per checkout the first time it is seen.
|
|
132
|
+
*/
|
|
133
|
+
async stampLoadedPlugins(plugins) {
|
|
134
|
+
for (const plugin of plugins) plugin.versionStamp = [
|
|
135
|
+
plugin.status,
|
|
136
|
+
await this.readSourceStamp(plugin),
|
|
137
|
+
JSON.stringify(plugin.configValues ?? {})
|
|
138
|
+
].join("|");
|
|
139
|
+
}
|
|
140
|
+
async readSourceStamp(plugin) {
|
|
141
|
+
try {
|
|
142
|
+
if (plugin.source === "github") {
|
|
143
|
+
const checkoutPath = this.resolvePluginSourcePath(plugin);
|
|
144
|
+
let head = this.githubCheckoutHeads.get(checkoutPath);
|
|
145
|
+
if (head === void 0) {
|
|
146
|
+
head = await this.readGitHead(checkoutPath);
|
|
147
|
+
this.githubCheckoutHeads.set(checkoutPath, head);
|
|
148
|
+
}
|
|
149
|
+
return head;
|
|
150
|
+
}
|
|
151
|
+
return getEntryVersion(resolvePluginEntryPath(plugin, this.options));
|
|
152
|
+
} catch {
|
|
153
|
+
return "";
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
updatePluginRenderConfigs(plugins) {
|
|
157
|
+
this.toolRenderConfigs.clear();
|
|
158
|
+
for (const plugin of plugins) {
|
|
159
|
+
if (plugin.status !== "active") continue;
|
|
160
|
+
for (const [toolName, renderConfig] of Object.entries(plugin.renderConfigs ?? {})) if (!this.toolRenderConfigs.has(toolName)) this.toolRenderConfigs.set(toolName, renderConfig);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
updatePluginTools(nextTools) {
|
|
164
|
+
for (const name of Object.keys(this.rawPluginTools)) if (!(name in nextTools)) {
|
|
165
|
+
delete this.rawPluginTools[name];
|
|
166
|
+
delete this.pluginTools[name];
|
|
167
|
+
}
|
|
168
|
+
for (const [name, tool] of Object.entries(nextTools)) {
|
|
169
|
+
this.rawPluginTools[name] = tool;
|
|
170
|
+
if (!this.pluginTools[name]) this.pluginTools[name] = this.createLiveToolProxy(name);
|
|
171
|
+
this.syncLiveToolProxy(name, tool);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
createLiveToolProxy(toolName) {
|
|
175
|
+
return { execute: async (...args) => {
|
|
176
|
+
await this.reloadChangedLocalPlugins();
|
|
177
|
+
const latestTool = this.rawPluginTools[toolName];
|
|
178
|
+
if (!latestTool?.execute) throw new Error(`Plugin tool "${toolName}" is no longer available`);
|
|
179
|
+
return latestTool.execute(...args);
|
|
180
|
+
} };
|
|
181
|
+
}
|
|
182
|
+
syncLiveToolProxy(toolName, tool) {
|
|
183
|
+
const proxy = this.pluginTools[toolName];
|
|
184
|
+
if (!proxy) return;
|
|
185
|
+
const mutableProxy = proxy;
|
|
186
|
+
for (const key of Object.keys(mutableProxy)) delete mutableProxy[key];
|
|
187
|
+
Object.assign(proxy, tool);
|
|
188
|
+
proxy.execute = this.createLiveToolProxy(toolName).execute;
|
|
189
|
+
}
|
|
190
|
+
async reloadChangedLocalPlugins() {
|
|
191
|
+
for (const plugin of this.loadedPlugins) {
|
|
192
|
+
if (plugin.source !== "local" || plugin.status !== "active") continue;
|
|
193
|
+
const entryPath = resolvePluginEntryPath(plugin, this.options);
|
|
194
|
+
const currentVersion = getEntryVersion(entryPath);
|
|
195
|
+
if (this.localEntryVersions.get(entryPath) !== currentVersion) {
|
|
196
|
+
await this.reload();
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
updateLocalEntryWatchers(plugins) {
|
|
202
|
+
const nextEntries = /* @__PURE__ */ new Set();
|
|
203
|
+
for (const plugin of plugins) {
|
|
204
|
+
if (plugin.source !== "local" || plugin.status !== "active") continue;
|
|
205
|
+
let entryPath;
|
|
206
|
+
let entryVersion;
|
|
207
|
+
try {
|
|
208
|
+
entryPath = resolvePluginEntryPath(plugin, this.options);
|
|
209
|
+
entryVersion = getEntryVersion(entryPath);
|
|
210
|
+
} catch {
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
nextEntries.add(entryPath);
|
|
214
|
+
this.localEntryVersions.set(entryPath, entryVersion);
|
|
215
|
+
if (this.watchedLocalEntries.has(entryPath)) continue;
|
|
216
|
+
fs.watchFile(entryPath, { interval: 500 }, (current, previous) => {
|
|
217
|
+
if (current.mtimeMs === previous.mtimeMs) return;
|
|
218
|
+
this.reload().catch(() => void 0);
|
|
219
|
+
}).unref?.();
|
|
220
|
+
this.watchedLocalEntries.add(entryPath);
|
|
221
|
+
}
|
|
222
|
+
for (const entryPath of this.watchedLocalEntries) {
|
|
223
|
+
if (nextEntries.has(entryPath)) continue;
|
|
224
|
+
fs.unwatchFile(entryPath);
|
|
225
|
+
this.watchedLocalEntries.delete(entryPath);
|
|
226
|
+
this.localEntryVersions.delete(entryPath);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
updateGithubPoller(plugins) {
|
|
230
|
+
const hasGithubPlugin = plugins.some((plugin) => plugin.source === "github" && plugin.status !== "inactive" && plugin.status !== "blocked");
|
|
231
|
+
if (hasGithubPlugin && !this.githubPollTimer) {
|
|
232
|
+
this.githubPollTimer = setInterval(() => {
|
|
233
|
+
this.pollGithubSourcesForUpdates().catch(() => void 0);
|
|
234
|
+
}, GITHUB_PLUGIN_POLL_INTERVAL_MS);
|
|
235
|
+
this.githubPollTimer.unref?.();
|
|
236
|
+
}
|
|
237
|
+
if (!hasGithubPlugin && this.githubPollTimer) {
|
|
238
|
+
clearInterval(this.githubPollTimer);
|
|
239
|
+
this.githubPollTimer = void 0;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
async pollGithubSourcesForUpdates() {
|
|
243
|
+
if (this.githubPollInFlight) return this.githubPollInFlight;
|
|
244
|
+
this.githubPollInFlight = this.pollGithubSourcesForUpdatesOnce().finally(() => {
|
|
245
|
+
this.githubPollInFlight = void 0;
|
|
246
|
+
});
|
|
247
|
+
return this.githubPollInFlight;
|
|
248
|
+
}
|
|
249
|
+
async pollGithubSourcesForUpdatesOnce() {
|
|
250
|
+
const changedCheckouts = /* @__PURE__ */ new Set();
|
|
251
|
+
const seen = /* @__PURE__ */ new Set();
|
|
252
|
+
for (const plugin of this.loadedPlugins) {
|
|
253
|
+
if (plugin.source !== "github" || plugin.status === "inactive" || plugin.status === "blocked") continue;
|
|
254
|
+
const checkoutPath = this.resolvePluginSourcePath(plugin);
|
|
255
|
+
if (seen.has(checkoutPath) || !fs.existsSync(path.join(checkoutPath, ".git"))) continue;
|
|
256
|
+
seen.add(checkoutPath);
|
|
257
|
+
const before = await this.readGitHead(checkoutPath);
|
|
258
|
+
const checkoutChanged = await this.refreshGithubCheckout(plugin, checkoutPath, before);
|
|
259
|
+
const after = await this.readGitHead(checkoutPath);
|
|
260
|
+
this.githubCheckoutHeads.set(checkoutPath, after);
|
|
261
|
+
if (checkoutChanged || before !== after) changedCheckouts.add(checkoutPath);
|
|
262
|
+
}
|
|
263
|
+
if (changedCheckouts.size === 0) return false;
|
|
264
|
+
await this.reload();
|
|
265
|
+
const updatedPluginNames = this.loadedPlugins.filter((plugin) => plugin.source === "github" && plugin.status !== "inactive" && plugin.status !== "blocked" && changedCheckouts.has(this.resolvePluginSourcePath(plugin))).map((plugin) => plugin.name ?? plugin.id);
|
|
266
|
+
await this.notifyGithubUpdateListeners(updatedPluginNames);
|
|
267
|
+
return true;
|
|
268
|
+
}
|
|
269
|
+
async notifyGithubUpdateListeners(pluginNames) {
|
|
270
|
+
await Promise.all([...this.githubUpdateListeners].map((listener) => Promise.resolve(listener(pluginNames))));
|
|
271
|
+
}
|
|
272
|
+
async refreshGithubCheckout(plugin, checkoutPath, currentHead) {
|
|
273
|
+
await execa("git", ["fetch", "origin"], gitExecOptions(checkoutPath));
|
|
274
|
+
const upstream = await this.resolveGitUpstream(checkoutPath, plugin.ref);
|
|
275
|
+
if (!upstream) return false;
|
|
276
|
+
const [localOnly, remoteOnly] = await this.readGitAheadBehind(checkoutPath, upstream);
|
|
277
|
+
const hasLocalChanges = await this.hasGitWorkingTreeChanges(checkoutPath);
|
|
278
|
+
if (localOnly > 0 || hasLocalChanges) await this.backupGitCheckout(checkoutPath, currentHead, hasLocalChanges);
|
|
279
|
+
if (remoteOnly > 0 || localOnly > 0 || hasLocalChanges) {
|
|
280
|
+
await execa("git", [
|
|
281
|
+
"reset",
|
|
282
|
+
"--hard",
|
|
283
|
+
upstream
|
|
284
|
+
], gitExecOptions(checkoutPath));
|
|
285
|
+
try {
|
|
286
|
+
await installPluginDependenciesForEntry(checkoutPath, plugin.entry);
|
|
287
|
+
ensureMastraCodePackageLink(getEntryPackageRoot(checkoutPath, plugin.entry));
|
|
288
|
+
} catch (error) {
|
|
289
|
+
await execa("git", [
|
|
290
|
+
"reset",
|
|
291
|
+
"--hard",
|
|
292
|
+
currentHead
|
|
293
|
+
], gitExecOptions(checkoutPath));
|
|
294
|
+
throw error;
|
|
295
|
+
}
|
|
296
|
+
return true;
|
|
297
|
+
}
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
async backupGitCheckout(checkoutPath, currentHead, includeWorkingTree) {
|
|
301
|
+
const backupBranch = this.createGitBackupBranchName(currentHead);
|
|
302
|
+
if (includeWorkingTree) {
|
|
303
|
+
const currentBranch = await this.readGitCurrentBranch(checkoutPath);
|
|
304
|
+
await execa("git", [
|
|
305
|
+
"switch",
|
|
306
|
+
"-c",
|
|
307
|
+
backupBranch
|
|
308
|
+
], gitExecOptions(checkoutPath));
|
|
309
|
+
await execa("git", ["add", "-A"], gitExecOptions(checkoutPath));
|
|
310
|
+
if (await this.hasGitStagedChanges(checkoutPath)) await execa("git", [
|
|
311
|
+
"-c",
|
|
312
|
+
"user.name=Mastra Code",
|
|
313
|
+
"-c",
|
|
314
|
+
"user.email=noreply@mastra.ai",
|
|
315
|
+
"commit",
|
|
316
|
+
"-m",
|
|
317
|
+
"chore: backup local plugin checkout changes"
|
|
318
|
+
], gitExecOptions(checkoutPath));
|
|
319
|
+
await this.restoreGitCheckout(checkoutPath, currentBranch, currentHead);
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
await execa("git", [
|
|
323
|
+
"branch",
|
|
324
|
+
backupBranch,
|
|
325
|
+
"HEAD"
|
|
326
|
+
], gitExecOptions(checkoutPath));
|
|
327
|
+
}
|
|
328
|
+
async resolveGitUpstream(cwd, installedRef) {
|
|
329
|
+
try {
|
|
330
|
+
const { stdout } = await execa("git", [
|
|
331
|
+
"rev-parse",
|
|
332
|
+
"--abbrev-ref",
|
|
333
|
+
"--symbolic-full-name",
|
|
334
|
+
"@{u}"
|
|
335
|
+
], gitExecOptions(cwd));
|
|
336
|
+
return stdout.trim();
|
|
337
|
+
} catch {
|
|
338
|
+
return installedRef ? void 0 : "origin/main";
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
async readGitAheadBehind(cwd, upstream) {
|
|
342
|
+
const { stdout } = await execa("git", [
|
|
343
|
+
"rev-list",
|
|
344
|
+
"--left-right",
|
|
345
|
+
"--count",
|
|
346
|
+
`HEAD...${upstream}`
|
|
347
|
+
], gitExecOptions(cwd));
|
|
348
|
+
const [ahead = "0", behind = "0"] = stdout.trim().split(/\s+/);
|
|
349
|
+
return [Number(ahead) || 0, Number(behind) || 0];
|
|
350
|
+
}
|
|
351
|
+
async hasGitWorkingTreeChanges(cwd) {
|
|
352
|
+
const { stdout } = await execa("git", ["status", "--porcelain"], gitExecOptions(cwd));
|
|
353
|
+
return stdout.trim().length > 0;
|
|
354
|
+
}
|
|
355
|
+
async hasGitStagedChanges(cwd) {
|
|
356
|
+
try {
|
|
357
|
+
await execa("git", [
|
|
358
|
+
"diff",
|
|
359
|
+
"--cached",
|
|
360
|
+
"--quiet"
|
|
361
|
+
], gitExecOptions(cwd));
|
|
362
|
+
return false;
|
|
363
|
+
} catch {
|
|
364
|
+
return true;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
async restoreGitCheckout(cwd, branch, fallbackHead) {
|
|
368
|
+
if (branch) {
|
|
369
|
+
await execa("git", ["switch", branch], gitExecOptions(cwd));
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
await execa("git", ["checkout", fallbackHead], gitExecOptions(cwd));
|
|
373
|
+
}
|
|
374
|
+
async readGitCurrentBranch(cwd) {
|
|
375
|
+
const { stdout } = await execa("git", ["branch", "--show-current"], gitExecOptions(cwd));
|
|
376
|
+
const branch = stdout.trim();
|
|
377
|
+
return branch.length > 0 ? branch : void 0;
|
|
378
|
+
}
|
|
379
|
+
createGitBackupBranchName(currentHead) {
|
|
380
|
+
return `mastracode/plugin-backup/${(/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-")}-${currentHead.slice(0, 8)}`;
|
|
381
|
+
}
|
|
382
|
+
resolvePluginSourcePath(plugin) {
|
|
383
|
+
const paths = getPluginScopePaths(plugin.scope, this.options);
|
|
384
|
+
return path.resolve(path.isAbsolute(plugin.path) ? plugin.path : path.join(paths.root, plugin.path));
|
|
385
|
+
}
|
|
386
|
+
async readGitHead(cwd) {
|
|
387
|
+
const { stdout } = await execa("git", ["rev-parse", "HEAD"], gitExecOptions(cwd));
|
|
388
|
+
return stdout.trim();
|
|
389
|
+
}
|
|
390
|
+
discoverLocal(searchRoot = ".") {
|
|
391
|
+
return discoverLocalPlugins(searchRoot, this.options);
|
|
392
|
+
}
|
|
393
|
+
async installLocal(localPath, scope, options = {}) {
|
|
394
|
+
const id = await installLocalPlugin(localPath, scope, {
|
|
395
|
+
...this.options,
|
|
396
|
+
...options
|
|
397
|
+
});
|
|
398
|
+
await this.reload();
|
|
399
|
+
return id;
|
|
400
|
+
}
|
|
401
|
+
async installGithub(url, scope, options = {}) {
|
|
402
|
+
const id = await installGithubPlugin(url, scope, {
|
|
403
|
+
...this.options,
|
|
404
|
+
...options
|
|
405
|
+
});
|
|
406
|
+
this.githubCheckoutHeads.clear();
|
|
407
|
+
await this.reload();
|
|
408
|
+
return id;
|
|
409
|
+
}
|
|
410
|
+
async setEnabled(pluginId, scope, enabled) {
|
|
411
|
+
const paths = getPluginScopePaths(scope, this.options);
|
|
412
|
+
const registry = loadPluginRegistry(paths.registryPath);
|
|
413
|
+
const record = registry.plugins[pluginId];
|
|
414
|
+
if (!record) throw new Error(`Plugin "${pluginId}" is not installed in ${scope} scope`);
|
|
415
|
+
savePluginRegistry(paths.registryPath, setPluginRecord(registry, pluginId, {
|
|
416
|
+
...record,
|
|
417
|
+
enabled
|
|
418
|
+
}));
|
|
419
|
+
await this.reload();
|
|
420
|
+
}
|
|
421
|
+
async setConfigValue(pluginId, scope, key, value) {
|
|
422
|
+
const paths = getPluginScopePaths(scope, this.options);
|
|
423
|
+
const registry = loadPluginRegistry(paths.registryPath);
|
|
424
|
+
const record = registry.plugins[pluginId];
|
|
425
|
+
if (!record) throw new Error(`Plugin "${pluginId}" is not installed in ${scope} scope`);
|
|
426
|
+
const config = { ...record.config ?? {} };
|
|
427
|
+
if (value === void 0 || value === "") delete config[key];
|
|
428
|
+
else config[key] = value;
|
|
429
|
+
const nextRecord = {
|
|
430
|
+
...record,
|
|
431
|
+
config: Object.keys(config).length > 0 ? config : void 0
|
|
432
|
+
};
|
|
433
|
+
savePluginRegistry(paths.registryPath, setPluginRecord(registry, pluginId, nextRecord));
|
|
434
|
+
await this.reload();
|
|
435
|
+
}
|
|
436
|
+
async uninstall(pluginId, scope) {
|
|
437
|
+
const paths = getPluginScopePaths(scope, this.options);
|
|
438
|
+
const registry = loadPluginRegistry(paths.registryPath);
|
|
439
|
+
const record = registry.plugins[pluginId];
|
|
440
|
+
if (!record) throw new Error(`Plugin "${pluginId}" is not installed in ${scope} scope`);
|
|
441
|
+
savePluginRegistry(paths.registryPath, removePluginRecord(registry, pluginId));
|
|
442
|
+
if (record.source === "github") {
|
|
443
|
+
const checkoutPath = path.resolve(path.isAbsolute(record.path) ? record.path : path.join(paths.root, record.path));
|
|
444
|
+
if (isInsideDirectory(checkoutPath, path.resolve(paths.sourcesPath, "github"))) fs.rmSync(checkoutPath, {
|
|
445
|
+
recursive: true,
|
|
446
|
+
force: true
|
|
447
|
+
});
|
|
448
|
+
this.githubCheckoutHeads.delete(checkoutPath);
|
|
449
|
+
}
|
|
450
|
+
await this.reload();
|
|
451
|
+
}
|
|
452
|
+
};
|
|
453
|
+
//#endregion
|
|
454
|
+
export { PluginManager };
|
|
455
|
+
|
|
456
|
+
//# sourceMappingURL=manager.js.map
|