@mastra/code-sdk 0.0.0-esbuild-bundle-worker-20260807173433
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1349 -0
- package/LICENSE.md +30 -0
- package/README.md +70 -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/credential-resolver.d.ts +51 -0
- package/dist/agents/credential-resolver.d.ts.map +1 -0
- package/dist/agents/credential-resolver.js +52 -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 +6 -0
- package/dist/agents/instructions.d.ts.map +1 -0
- package/dist/agents/instructions.js +32 -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 +400 -0
- package/dist/agents/mastracode-gateway.js.map +1 -0
- package/dist/agents/memory.d.ts +13 -0
- package/dist/agents/memory.d.ts.map +1 -0
- package/dist/agents/memory.js +116 -0
- package/dist/agents/memory.js.map +1 -0
- package/dist/agents/model.d.ts +59 -0
- package/dist/agents/model.d.ts.map +1 -0
- package/dist/agents/model.js +132 -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 +44 -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 +39 -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 +37 -0
- package/dist/agents/modes/plan.js.map +1 -0
- package/dist/agents/prompts/agent-instructions.d.ts +61 -0
- package/dist/agents/prompts/agent-instructions.d.ts.map +1 -0
- package/dist/agents/prompts/agent-instructions.js +201 -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 +19 -0
- package/dist/agents/prompts/index.d.ts.map +1 -0
- package/dist/agents/prompts/index.js +65 -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 +13 -0
- package/dist/agents/prompts/tool-guidance.d.ts.map +1 -0
- package/dist/agents/prompts/tool-guidance.js +149 -0
- package/dist/agents/prompts/tool-guidance.js.map +1 -0
- package/dist/agents/sandbox-filesystem.d.ts +99 -0
- package/dist/agents/sandbox-filesystem.d.ts.map +1 -0
- package/dist/agents/sandbox-filesystem.js +328 -0
- package/dist/agents/sandbox-filesystem.js.map +1 -0
- package/dist/agents/sandbox-reattach.d.ts +19 -0
- package/dist/agents/sandbox-reattach.d.ts.map +1 -0
- package/dist/agents/sandbox-reattach.js +15 -0
- package/dist/agents/sandbox-reattach.js.map +1 -0
- package/dist/agents/thread-caveman-state.d.ts +17 -0
- package/dist/agents/thread-caveman-state.d.ts.map +1 -0
- package/dist/agents/thread-caveman-state.js +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 +87 -0
- package/dist/agents/tool-availability.js.map +1 -0
- package/dist/agents/tools.d.ts +19 -0
- package/dist/agents/tools.d.ts.map +1 -0
- package/dist/agents/tools.js +105 -0
- package/dist/agents/tools.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 +251 -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 +10 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +6 -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/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/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 +91 -0
- package/dist/auth/storage.d.ts.map +1 -0
- package/dist/auth/storage.js +197 -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 +195 -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 +18 -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 +128 -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 +47 -0
- package/dist/hooks/manager.d.ts.map +1 -0
- package/dist/hooks/manager.js +225 -0
- package/dist/hooks/manager.js.map +1 -0
- package/dist/hooks/types.d.ts +152 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +8 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +258 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +740 -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/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 +54 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +240 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +3 -0
- package/dist/mcp/manager.d.ts +98 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +612 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/state.d.ts +33 -0
- package/dist/mcp/state.d.ts.map +1 -0
- package/dist/mcp/state.js +88 -0
- package/dist/mcp/state.js.map +1 -0
- package/dist/mcp/types.d.ts +120 -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 +46 -0
- package/dist/onboarding/packs.d.ts.map +1 -0
- package/dist/onboarding/packs.js +160 -0
- package/dist/onboarding/packs.js.map +1 -0
- package/dist/onboarding/settings.d.ts +338 -0
- package/dist/onboarding/settings.d.ts.map +1 -0
- package/dist/onboarding/settings.js +673 -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 +132 -0
- package/dist/permissions.js.map +1 -0
- package/dist/plugin.d.ts +81 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +28 -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 +15 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +206 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +64 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +384 -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/types.d.ts +45 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +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 +152 -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 +83 -0
- package/dist/providers/amazon-bedrock.js.map +1 -0
- package/dist/providers/claude-max.d.ts +52 -0
- package/dist/providers/claude-max.d.ts.map +1 -0
- package/dist/providers/claude-max.js +171 -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 +265 -0
- package/dist/providers/github-copilot.js.map +1 -0
- package/dist/providers/openai-codex.d.ts +72 -0
- package/dist/providers/openai-codex.d.ts.map +1 -0
- package/dist/providers/openai-codex.js +302 -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 +70 -0
- package/dist/providers/xai.js.map +1 -0
- package/dist/schema.d.ts +192 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +98 -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/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 +35 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +61 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/utils/binaries.d.ts +7 -0
- package/dist/utils/binaries.d.ts.map +1 -0
- package/dist/utils/binaries.js +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 +172 -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 +56 -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 +141 -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 +105 -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/package.json +96 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-diff.js","names":[],"sources":["../../src/utils/plan-diff.ts"],"sourcesContent":["/**\n * Line-level diffing for plan revisions.\n *\n * Uses a real LCS (longest common subsequence) diff so that inserting or deleting a few\n * lines doesn't mark everything after it as changed. Both the rendered approval diff and\n * the \"is a diff worth showing\" heuristic share this so the heuristic measures the actual\n * diff rather than predicting one.\n */\n\nexport interface DiffEntry {\n type: 'added' | 'removed' | 'context';\n text: string;\n}\n\n/** Produce structured diff entries between two plan texts using an LCS diff. */\nexport function generatePlanDiff(oldText: string, newText: string): DiffEntry[] {\n const oldLines = oldText.split(/\\r?\\n/);\n const newLines = newText.split(/\\r?\\n/);\n const n = oldLines.length;\n const m = newLines.length;\n\n // LCS length table.\n const lcs: number[][] = Array.from({ length: n + 1 }, () => new Array<number>(m + 1).fill(0));\n for (let i = n - 1; i >= 0; i--) {\n for (let j = m - 1; j >= 0; j--) {\n lcs[i]![j] = oldLines[i] === newLines[j] ? lcs[i + 1]![j + 1]! + 1 : Math.max(lcs[i + 1]![j]!, lcs[i]![j + 1]!);\n }\n }\n\n const entries: DiffEntry[] = [];\n let i = 0;\n let j = 0;\n while (i < n && j < m) {\n if (oldLines[i] === newLines[j]) {\n entries.push({ type: 'context', text: oldLines[i]! });\n i++;\n j++;\n } else if (lcs[i + 1]![j]! >= lcs[i]![j + 1]!) {\n entries.push({ type: 'removed', text: oldLines[i]! });\n i++;\n } else {\n entries.push({ type: 'added', text: newLines[j]! });\n j++;\n }\n }\n while (i < n) entries.push({ type: 'removed', text: oldLines[i++]! });\n while (j < m) entries.push({ type: 'added', text: newLines[j++]! });\n\n return entries;\n}\n\n/**\n * Decide whether a diff is worth rendering instead of just showing the full new plan.\n *\n * We generate the real diff and compare its size (added + removed lines) against the size\n * of the whole diff (added + removed + unchanged context). When most of the diff is changes\n * rather than shared context, the diff is no clearer than the full text, so callers fall\n * back to rendering the whole plan. A genuinely new plan (no previous text, or no shared\n * lines) is therefore shown in full.\n */\nexport function shouldShowDiff(previousPlan: string, plan: string, maxChangedRatio = 0.5): boolean {\n if (!previousPlan || previousPlan === plan) return false;\n\n const entries = generatePlanDiff(previousPlan, plan);\n const changed = entries.filter(e => e.type !== 'context').length;\n if (changed === 0) return false;\n\n // changed / total entries == diff size relative to the full plan view.\n return changed / Math.max(entries.length, 1) <= maxChangedRatio;\n}\n"],"mappings":";;AAeA,SAAgB,iBAAiB,SAAiB,SAA8B;CAC9E,MAAM,WAAW,QAAQ,MAAM,OAAO;CACtC,MAAM,WAAW,QAAQ,MAAM,OAAO;CACtC,MAAM,IAAI,SAAS;CACnB,MAAM,IAAI,SAAS;CAGnB,MAAM,MAAkB,MAAM,KAAK,EAAE,QAAQ,IAAI,EAAE,SAAS,IAAI,MAAc,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;CAC5F,KAAK,IAAI,IAAI,IAAI,GAAG,KAAK,GAAG,KAC1B,KAAK,IAAI,IAAI,IAAI,GAAG,KAAK,GAAG,KAC1B,IAAI,EAAE,CAAE,KAAK,SAAS,OAAO,SAAS,KAAK,IAAI,IAAI,EAAE,CAAE,IAAI,KAAM,IAAI,KAAK,IAAI,IAAI,IAAI,EAAE,CAAE,IAAK,IAAI,EAAE,CAAE,IAAI,EAAG;CAIlH,MAAM,UAAuB,CAAC;CAC9B,IAAI,IAAI;CACR,IAAI,IAAI;CACR,OAAO,IAAI,KAAK,IAAI,GAClB,IAAI,SAAS,OAAO,SAAS,IAAI;EAC/B,QAAQ,KAAK;GAAE,MAAM;GAAW,MAAM,SAAS;EAAI,CAAC;EACpD;EACA;CACF,OAAO,IAAI,IAAI,IAAI,EAAE,CAAE,MAAO,IAAI,EAAE,CAAE,IAAI,IAAK;EAC7C,QAAQ,KAAK;GAAE,MAAM;GAAW,MAAM,SAAS;EAAI,CAAC;EACpD;CACF,OAAO;EACL,QAAQ,KAAK;GAAE,MAAM;GAAS,MAAM,SAAS;EAAI,CAAC;EAClD;CACF;CAEF,OAAO,IAAI,GAAG,QAAQ,KAAK;EAAE,MAAM;EAAW,MAAM,SAAS;CAAM,CAAC;CACpE,OAAO,IAAI,GAAG,QAAQ,KAAK;EAAE,MAAM;EAAS,MAAM,SAAS;CAAM,CAAC;CAElE,OAAO;AACT;;;;;;;;;;AAWA,SAAgB,eAAe,cAAsB,MAAc,kBAAkB,IAAc;CACjG,IAAI,CAAC,gBAAgB,iBAAiB,MAAM,OAAO;CAEnD,MAAM,UAAU,iBAAiB,cAAc,IAAI;CACnD,MAAM,UAAU,QAAQ,QAAO,MAAK,EAAE,SAAS,SAAS,CAAC,CAAC;CAC1D,IAAI,YAAY,GAAG,OAAO;CAG1B,OAAO,UAAU,KAAK,IAAI,QAAQ,QAAQ,CAAC,KAAK;AAClD"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/** Global plans directory for approved-plan archives. */
|
|
2
|
+
export declare function getPlansDir(): string;
|
|
3
|
+
/** Local (project-scoped) plans directory where the agent writes named plan files. */
|
|
4
|
+
export declare function getLocalPlansDir(projectPath: string): string;
|
|
5
|
+
/** Workspace-relative directory the agent writes plan files into. */
|
|
6
|
+
export declare function getLocalPlansRelativeDir(): string;
|
|
7
|
+
/** Derive a plan filename from a title (e.g. `add-dark-mode.md`). */
|
|
8
|
+
export declare function getPlanFilename(title: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Suggested workspace-relative path for a new plan file, shown in plan-mode prompts.
|
|
11
|
+
* Without a title we fall back to a generic name the agent can rename later.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getSuggestedPlanRelativePath(title?: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Resolve a plan path submitted by the agent (absolute or project-relative) to an
|
|
16
|
+
* absolute path. Returns `undefined` when no usable path was provided.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolvePlanPath(projectPath: string, submittedPath: string): string | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Whether `targetPath` (absolute or project-relative) is a valid plan file: a `.md`
|
|
21
|
+
* file located directly inside the project's `.mastracode/plans/` directory. Used by the
|
|
22
|
+
* plan-mode write guard so the agent can write any named plan file there, but nothing
|
|
23
|
+
* outside that directory.
|
|
24
|
+
*/
|
|
25
|
+
export declare function isPlanFilePath(projectPath: string, targetPath: string): boolean;
|
|
26
|
+
export declare function savePlanToDisk(opts: {
|
|
27
|
+
title: string;
|
|
28
|
+
plan: string;
|
|
29
|
+
resourceId: string;
|
|
30
|
+
plansDir?: string;
|
|
31
|
+
}): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Read a plan markdown file by absolute path.
|
|
34
|
+
*
|
|
35
|
+
* The leading `# <title>` heading (if present) is parsed as the title and the remaining
|
|
36
|
+
* content is returned as the plan body. Returns `undefined` when the file does not exist.
|
|
37
|
+
*/
|
|
38
|
+
export declare function readPlanFile(absPath: string): Promise<{
|
|
39
|
+
title: string;
|
|
40
|
+
plan: string;
|
|
41
|
+
} | undefined>;
|
|
42
|
+
/**
|
|
43
|
+
* Approve the plan file at `planPath`: write a timestamped copy to the global plans
|
|
44
|
+
* archive so approved plans are findable later. The local named plan file is left in
|
|
45
|
+
* place so the user can review every plan made over time.
|
|
46
|
+
*
|
|
47
|
+
* Returns the local plan filename (e.g. `add-dark-mode.md`), or `undefined` when there
|
|
48
|
+
* was no plan file to approve.
|
|
49
|
+
*/
|
|
50
|
+
export declare function approvePlanFile(opts: {
|
|
51
|
+
planPath: string;
|
|
52
|
+
title: string;
|
|
53
|
+
resourceId: string;
|
|
54
|
+
plansDir?: string;
|
|
55
|
+
}): Promise<string | undefined>;
|
|
56
|
+
//# sourceMappingURL=plans.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../../src/utils/plans.ts"],"names":[],"mappings":"AAKA,yDAAyD;AACzD,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,qEAAqE;AACrE,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAUD,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAGnE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG9F;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAU/E;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBhB;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAsBxG;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAc9B"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { DEFAULT_CONFIG_DIR } from "../constants.js";
|
|
2
|
+
import { getAppDataDir } from "./project.js";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import fs from "fs/promises";
|
|
5
|
+
//#region src/utils/plans.ts
|
|
6
|
+
/** Global plans directory for approved-plan archives. */
|
|
7
|
+
function getPlansDir() {
|
|
8
|
+
return process.env.MASTRA_PLANS_DIR ?? path.join(getAppDataDir(), "plans");
|
|
9
|
+
}
|
|
10
|
+
/** Local (project-scoped) plans directory where the agent writes named plan files. */
|
|
11
|
+
function getLocalPlansDir(projectPath) {
|
|
12
|
+
return path.join(projectPath, DEFAULT_CONFIG_DIR, "plans");
|
|
13
|
+
}
|
|
14
|
+
/** Workspace-relative directory the agent writes plan files into. */
|
|
15
|
+
function getLocalPlansRelativeDir() {
|
|
16
|
+
return path.join(DEFAULT_CONFIG_DIR, "plans");
|
|
17
|
+
}
|
|
18
|
+
function slugify(str) {
|
|
19
|
+
return str.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "") || "untitled";
|
|
20
|
+
}
|
|
21
|
+
/** Derive a plan filename from a title (e.g. `add-dark-mode.md`). */
|
|
22
|
+
function getPlanFilename(title) {
|
|
23
|
+
return `${slugify(title)}.md`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Suggested workspace-relative path for a new plan file, shown in plan-mode prompts.
|
|
27
|
+
* Without a title we fall back to a generic name the agent can rename later.
|
|
28
|
+
*/
|
|
29
|
+
function getSuggestedPlanRelativePath(title) {
|
|
30
|
+
const filename = title ? getPlanFilename(title) : "plan.md";
|
|
31
|
+
return path.join(getLocalPlansRelativeDir(), filename);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Resolve a plan path submitted by the agent (absolute or project-relative) to an
|
|
35
|
+
* absolute path. Returns `undefined` when no usable path was provided.
|
|
36
|
+
*/
|
|
37
|
+
function resolvePlanPath(projectPath, submittedPath) {
|
|
38
|
+
if (!submittedPath) return void 0;
|
|
39
|
+
return path.isAbsolute(submittedPath) ? submittedPath : path.resolve(projectPath, submittedPath);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Whether `targetPath` (absolute or project-relative) is a valid plan file: a `.md`
|
|
43
|
+
* file located directly inside the project's `.mastracode/plans/` directory. Used by the
|
|
44
|
+
* plan-mode write guard so the agent can write any named plan file there, but nothing
|
|
45
|
+
* outside that directory.
|
|
46
|
+
*/
|
|
47
|
+
function isPlanFilePath(projectPath, targetPath) {
|
|
48
|
+
const abs = resolvePlanPath(projectPath, targetPath);
|
|
49
|
+
if (!abs) return false;
|
|
50
|
+
if (path.extname(abs).toLowerCase() !== ".md") return false;
|
|
51
|
+
const plansDir = path.resolve(getLocalPlansDir(projectPath));
|
|
52
|
+
const rel = path.relative(plansDir, abs);
|
|
53
|
+
if (rel === "" || rel.startsWith("..") || path.isAbsolute(rel)) return false;
|
|
54
|
+
return !rel.includes(path.sep);
|
|
55
|
+
}
|
|
56
|
+
async function savePlanToDisk(opts) {
|
|
57
|
+
const { title, plan, resourceId } = opts;
|
|
58
|
+
const plansDir = opts.plansDir ?? getPlansDir();
|
|
59
|
+
const baseDir = path.resolve(plansDir);
|
|
60
|
+
const dir = path.resolve(baseDir, resourceId);
|
|
61
|
+
const rel = path.relative(baseDir, dir);
|
|
62
|
+
if (rel.startsWith("..") || path.isAbsolute(rel)) throw new Error(`Invalid resourceId: ${resourceId}`);
|
|
63
|
+
await fs.mkdir(dir, { recursive: true });
|
|
64
|
+
const now = /* @__PURE__ */ new Date();
|
|
65
|
+
const filename = `${now.toISOString().replace(/:/g, "-")}-${slugify(title)}.md`;
|
|
66
|
+
const content = `# ${title}\n\nApproved: ${now.toISOString()}\n\n${plan}\n`;
|
|
67
|
+
await fs.writeFile(path.join(dir, filename), content, "utf-8");
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Read a plan markdown file by absolute path.
|
|
71
|
+
*
|
|
72
|
+
* The leading `# <title>` heading (if present) is parsed as the title and the remaining
|
|
73
|
+
* content is returned as the plan body. Returns `undefined` when the file does not exist.
|
|
74
|
+
*/
|
|
75
|
+
async function readPlanFile(absPath) {
|
|
76
|
+
let raw;
|
|
77
|
+
try {
|
|
78
|
+
raw = await fs.readFile(absPath, "utf-8");
|
|
79
|
+
} catch {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const lines = raw.split(/\r?\n/);
|
|
83
|
+
const headingIndex = lines.findIndex((line) => line.trim().length > 0);
|
|
84
|
+
const heading = headingIndex >= 0 ? lines[headingIndex] : void 0;
|
|
85
|
+
if (heading?.startsWith("# ")) return {
|
|
86
|
+
title: heading.slice(2).trim(),
|
|
87
|
+
plan: lines.slice(headingIndex + 1).join("\n").replace(/^\n+/, "").trimEnd()
|
|
88
|
+
};
|
|
89
|
+
return {
|
|
90
|
+
title: "",
|
|
91
|
+
plan: raw.trimEnd()
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Approve the plan file at `planPath`: write a timestamped copy to the global plans
|
|
96
|
+
* archive so approved plans are findable later. The local named plan file is left in
|
|
97
|
+
* place so the user can review every plan made over time.
|
|
98
|
+
*
|
|
99
|
+
* Returns the local plan filename (e.g. `add-dark-mode.md`), or `undefined` when there
|
|
100
|
+
* was no plan file to approve.
|
|
101
|
+
*/
|
|
102
|
+
async function approvePlanFile(opts) {
|
|
103
|
+
const { planPath, title, resourceId, plansDir } = opts;
|
|
104
|
+
const current = await readPlanFile(planPath);
|
|
105
|
+
if (!current) return;
|
|
106
|
+
await savePlanToDisk({
|
|
107
|
+
title: title || current.title || "Implementation Plan",
|
|
108
|
+
plan: current.plan,
|
|
109
|
+
resourceId,
|
|
110
|
+
plansDir
|
|
111
|
+
});
|
|
112
|
+
return path.basename(planPath);
|
|
113
|
+
}
|
|
114
|
+
//#endregion
|
|
115
|
+
export { approvePlanFile, getLocalPlansDir, getLocalPlansRelativeDir, getPlanFilename, getPlansDir, getSuggestedPlanRelativePath, isPlanFilePath, readPlanFile, resolvePlanPath, savePlanToDisk };
|
|
116
|
+
|
|
117
|
+
//# sourceMappingURL=plans.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plans.js","names":[],"sources":["../../src/utils/plans.ts"],"sourcesContent":["import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { DEFAULT_CONFIG_DIR } from '../constants.js';\nimport { getAppDataDir } from './project.js';\n\n/** Global plans directory for approved-plan archives. */\nexport function getPlansDir(): string {\n return process.env.MASTRA_PLANS_DIR ?? path.join(getAppDataDir(), 'plans');\n}\n\n/** Local (project-scoped) plans directory where the agent writes named plan files. */\nexport function getLocalPlansDir(projectPath: string): string {\n return path.join(projectPath, DEFAULT_CONFIG_DIR, 'plans');\n}\n\n/** Workspace-relative directory the agent writes plan files into. */\nexport function getLocalPlansRelativeDir(): string {\n return path.join(DEFAULT_CONFIG_DIR, 'plans');\n}\n\nfunction slugify(str: string): string {\n const slug = str\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n return slug || 'untitled';\n}\n\n/** Derive a plan filename from a title (e.g. `add-dark-mode.md`). */\nexport function getPlanFilename(title: string): string {\n return `${slugify(title)}.md`;\n}\n\n/**\n * Suggested workspace-relative path for a new plan file, shown in plan-mode prompts.\n * Without a title we fall back to a generic name the agent can rename later.\n */\nexport function getSuggestedPlanRelativePath(title?: string): string {\n const filename = title ? getPlanFilename(title) : 'plan.md';\n return path.join(getLocalPlansRelativeDir(), filename);\n}\n\n/**\n * Resolve a plan path submitted by the agent (absolute or project-relative) to an\n * absolute path. Returns `undefined` when no usable path was provided.\n */\nexport function resolvePlanPath(projectPath: string, submittedPath: string): string | undefined {\n if (!submittedPath) return undefined;\n return path.isAbsolute(submittedPath) ? submittedPath : path.resolve(projectPath, submittedPath);\n}\n\n/**\n * Whether `targetPath` (absolute or project-relative) is a valid plan file: a `.md`\n * file located directly inside the project's `.mastracode/plans/` directory. Used by the\n * plan-mode write guard so the agent can write any named plan file there, but nothing\n * outside that directory.\n */\nexport function isPlanFilePath(projectPath: string, targetPath: string): boolean {\n const abs = resolvePlanPath(projectPath, targetPath);\n if (!abs) return false;\n if (path.extname(abs).toLowerCase() !== '.md') return false;\n\n const plansDir = path.resolve(getLocalPlansDir(projectPath));\n const rel = path.relative(plansDir, abs);\n // Must be directly inside the plans dir (no nested subdirectories, no escaping it).\n if (rel === '' || rel.startsWith('..') || path.isAbsolute(rel)) return false;\n return !rel.includes(path.sep);\n}\n\nexport async function savePlanToDisk(opts: {\n title: string;\n plan: string;\n resourceId: string;\n plansDir?: string;\n}): Promise<void> {\n const { title, plan, resourceId } = opts;\n const plansDir = opts.plansDir ?? getPlansDir();\n const baseDir = path.resolve(plansDir);\n const dir = path.resolve(baseDir, resourceId);\n const rel = path.relative(baseDir, dir);\n if (rel.startsWith('..') || path.isAbsolute(rel)) {\n throw new Error(`Invalid resourceId: ${resourceId}`);\n }\n\n await fs.mkdir(dir, { recursive: true });\n\n const now = new Date();\n const timestamp = now.toISOString().replace(/:/g, '-');\n const slug = slugify(title);\n const filename = `${timestamp}-${slug}.md`;\n\n const content = `# ${title}\\n\\nApproved: ${now.toISOString()}\\n\\n${plan}\\n`;\n\n await fs.writeFile(path.join(dir, filename), content, 'utf-8');\n}\n\n/**\n * Read a plan markdown file by absolute path.\n *\n * The leading `# <title>` heading (if present) is parsed as the title and the remaining\n * content is returned as the plan body. Returns `undefined` when the file does not exist.\n */\nexport async function readPlanFile(absPath: string): Promise<{ title: string; plan: string } | undefined> {\n let raw: string;\n try {\n raw = await fs.readFile(absPath, 'utf-8');\n } catch {\n return undefined;\n }\n\n const lines = raw.split(/\\r?\\n/);\n const headingIndex = lines.findIndex(line => line.trim().length > 0);\n const heading = headingIndex >= 0 ? lines[headingIndex] : undefined;\n if (heading?.startsWith('# ')) {\n const title = heading.slice(2).trim();\n const plan = lines\n .slice(headingIndex + 1)\n .join('\\n')\n .replace(/^\\n+/, '')\n .trimEnd();\n return { title, plan };\n }\n\n return { title: '', plan: raw.trimEnd() };\n}\n\n/**\n * Approve the plan file at `planPath`: write a timestamped copy to the global plans\n * archive so approved plans are findable later. The local named plan file is left in\n * place so the user can review every plan made over time.\n *\n * Returns the local plan filename (e.g. `add-dark-mode.md`), or `undefined` when there\n * was no plan file to approve.\n */\nexport async function approvePlanFile(opts: {\n planPath: string;\n title: string;\n resourceId: string;\n plansDir?: string;\n}): Promise<string | undefined> {\n const { planPath, title, resourceId, plansDir } = opts;\n\n const current = await readPlanFile(planPath);\n if (!current) {\n return undefined;\n }\n\n const resolvedTitle = title || current.title || 'Implementation Plan';\n\n // Global archive (timestamped, never overwritten) so approved plans are findable later.\n await savePlanToDisk({ title: resolvedTitle, plan: current.plan, resourceId, plansDir });\n\n return path.basename(planPath);\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project detection utilities
|
|
3
|
+
*
|
|
4
|
+
* Detects project identity from git repo or filesystem path.
|
|
5
|
+
* Handles git worktrees by finding the main repository.
|
|
6
|
+
*/
|
|
7
|
+
export interface ProjectInfo {
|
|
8
|
+
/** Unique resource ID for this project (used for thread grouping) */
|
|
9
|
+
resourceId: string;
|
|
10
|
+
/** Human-readable project name */
|
|
11
|
+
name: string;
|
|
12
|
+
/** Absolute path to the project root */
|
|
13
|
+
rootPath: string;
|
|
14
|
+
/** Git remote URL if available */
|
|
15
|
+
gitUrl?: string;
|
|
16
|
+
/** Current git branch */
|
|
17
|
+
gitBranch?: string;
|
|
18
|
+
/** Whether this is a git worktree */
|
|
19
|
+
isWorktree: boolean;
|
|
20
|
+
/** Path to main git repo (different from rootPath if worktree) */
|
|
21
|
+
mainRepoPath?: string;
|
|
22
|
+
/** Whether the resourceId was explicitly overridden (env var or config) */
|
|
23
|
+
resourceIdOverride?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Detect project info from a directory path
|
|
27
|
+
*/
|
|
28
|
+
export declare function detectProject(projectPath: string): ProjectInfo;
|
|
29
|
+
/**
|
|
30
|
+
* Get the current git branch for a given directory.
|
|
31
|
+
* Lightweight alternative to detectProject() for refreshing just the branch.
|
|
32
|
+
*/
|
|
33
|
+
export declare function getCurrentGitBranch(cwd: string): string | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Async version of getCurrentGitBranch — avoids blocking the event loop
|
|
36
|
+
* with execSync. Falls back to undefined on any failure.
|
|
37
|
+
*/
|
|
38
|
+
export declare function getCurrentGitBranchAsync(cwd: string): Promise<string | undefined>;
|
|
39
|
+
/**
|
|
40
|
+
* Get the application data directory for mastracode
|
|
41
|
+
* - macOS: ~/Library/Application Support/mastracode
|
|
42
|
+
* - Linux: ~/.local/share/mastracode
|
|
43
|
+
* - Windows: %APPDATA%/mastracode
|
|
44
|
+
*/
|
|
45
|
+
export declare function getAppDataDir(): string;
|
|
46
|
+
/**
|
|
47
|
+
* Get the database path for mastracode
|
|
48
|
+
* Can be overridden with the MASTRA_DB_PATH environment variable for debugging.
|
|
49
|
+
*/
|
|
50
|
+
export declare function getDatabasePath(): string;
|
|
51
|
+
/**
|
|
52
|
+
* Get the vector database path for mastracode.
|
|
53
|
+
* Separate from the main DB to avoid bloating it with embedding data.
|
|
54
|
+
*/
|
|
55
|
+
export declare function getVectorDatabasePath(): string;
|
|
56
|
+
/**
|
|
57
|
+
* Get the observability DuckDB database path for mastracode.
|
|
58
|
+
* Separate from the main DB — DuckDB is used for OLAP-style trace/score/feedback queries.
|
|
59
|
+
* Can be overridden with the MASTRA_OBSERVABILITY_DB_PATH environment variable.
|
|
60
|
+
*/
|
|
61
|
+
export declare function getObservabilityDatabasePath(): string;
|
|
62
|
+
import type { StorageSettings } from '../onboarding/settings.js';
|
|
63
|
+
/**
|
|
64
|
+
* LibSQL storage configuration.
|
|
65
|
+
*/
|
|
66
|
+
export interface LibSQLStorageConfig {
|
|
67
|
+
backend: 'libsql';
|
|
68
|
+
url: string;
|
|
69
|
+
authToken?: string;
|
|
70
|
+
isRemote: boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Optional explicit url for the recall vector DB. When omitted, the factory
|
|
73
|
+
* uses the shared default vector file.
|
|
74
|
+
*/
|
|
75
|
+
vectorUrl?: string;
|
|
76
|
+
/** Auth token for the vector DB when `vectorUrl` points at a remote libSQL. */
|
|
77
|
+
vectorAuthToken?: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* PostgreSQL storage configuration.
|
|
81
|
+
*/
|
|
82
|
+
export interface PgStorageConfig {
|
|
83
|
+
backend: 'pg';
|
|
84
|
+
connectionString?: string;
|
|
85
|
+
host?: string;
|
|
86
|
+
port?: number;
|
|
87
|
+
database?: string;
|
|
88
|
+
user?: string;
|
|
89
|
+
password?: string;
|
|
90
|
+
schemaName?: string;
|
|
91
|
+
disableInit?: boolean;
|
|
92
|
+
skipDefaultIndexes?: boolean;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Resolved storage configuration for either backend.
|
|
96
|
+
*/
|
|
97
|
+
export type StorageConfig = LibSQLStorageConfig | PgStorageConfig;
|
|
98
|
+
/**
|
|
99
|
+
* Get the resolved storage configuration.
|
|
100
|
+
*
|
|
101
|
+
* Priority (highest to lowest):
|
|
102
|
+
* 1. Environment variables: MASTRA_STORAGE_BACKEND + backend-specific vars
|
|
103
|
+
* 2. Global settings (from /settings): settings.storage
|
|
104
|
+
* 3. Legacy config files: .mastracode/database.json (LibSQL only)
|
|
105
|
+
* 4. Local file database (LibSQL default)
|
|
106
|
+
*
|
|
107
|
+
* For PG, the env vars are:
|
|
108
|
+
* MASTRA_STORAGE_BACKEND=pg
|
|
109
|
+
* MASTRA_PG_CONNECTION_STRING or MASTRA_PG_HOST/PORT/DATABASE/USER/PASSWORD
|
|
110
|
+
* MASTRA_PG_SCHEMA_NAME (optional)
|
|
111
|
+
*
|
|
112
|
+
* For LibSQL, the legacy env vars still work:
|
|
113
|
+
* MASTRA_DB_URL + MASTRA_DB_AUTH_TOKEN
|
|
114
|
+
*/
|
|
115
|
+
export declare function getStorageConfig(projectDir?: string, storageSettings?: StorageSettings, configDirName?: string): StorageConfig;
|
|
116
|
+
/**
|
|
117
|
+
* Get the current user identity.
|
|
118
|
+
*
|
|
119
|
+
* Priority:
|
|
120
|
+
* 1. MASTRA_USER_ID environment variable
|
|
121
|
+
* 2. git config user.email (from project dir or global)
|
|
122
|
+
* 3. OS username as fallback
|
|
123
|
+
*/
|
|
124
|
+
export declare function getUserId(projectDir?: string): string;
|
|
125
|
+
/**
|
|
126
|
+
* Get the current user's display name.
|
|
127
|
+
*
|
|
128
|
+
* Priority:
|
|
129
|
+
* 1. git config user.name
|
|
130
|
+
* 2. OS username as fallback
|
|
131
|
+
*/
|
|
132
|
+
export declare function getUserName(projectDir?: string): string;
|
|
133
|
+
/**
|
|
134
|
+
* Observational memory scope: "thread" (per-conversation) or "resource" (shared across threads).
|
|
135
|
+
*/
|
|
136
|
+
export type OmScope = 'thread' | 'resource';
|
|
137
|
+
/**
|
|
138
|
+
* Get the configured observational memory scope.
|
|
139
|
+
*
|
|
140
|
+
* Priority:
|
|
141
|
+
* 1. MASTRA_OM_SCOPE environment variable ("thread" or "resource")
|
|
142
|
+
* 2. Project config: .mastracode/database.json → omScope
|
|
143
|
+
* 3. Global config: ~/.mastracode/database.json → omScope
|
|
144
|
+
* 4. Default: "thread"
|
|
145
|
+
*/
|
|
146
|
+
export declare function getOmScope(projectDir?: string, configDirName?: string): OmScope;
|
|
147
|
+
/**
|
|
148
|
+
* Get an explicit resource ID override, if configured.
|
|
149
|
+
*
|
|
150
|
+
* Resource IDs act as shared tags — two users who set the same resourceId
|
|
151
|
+
* will share threads and observations for that resource.
|
|
152
|
+
*
|
|
153
|
+
* Priority:
|
|
154
|
+
* 1. MASTRA_RESOURCE_ID environment variable
|
|
155
|
+
* 2. Project config: .mastracode/database.json → resourceId
|
|
156
|
+
* 3. Global config: ~/.mastracode/database.json → resourceId
|
|
157
|
+
* 4. null (use auto-detected value)
|
|
158
|
+
*/
|
|
159
|
+
export declare function getResourceIdOverride(projectDir?: string, configDirName?: string): string | null;
|
|
160
|
+
//# sourceMappingURL=project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":"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"}
|