@mastra/code-sdk 0.0.0-mastracode-cloud-20260706153555
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 +22 -0
- package/LICENSE.md +30 -0
- package/README.md +50 -0
- package/dist/acp/agent.d.ts +35 -0
- package/dist/acp/agent.d.ts.map +1 -0
- package/dist/acp/agent.js +173 -0
- package/dist/acp/agent.js.map +1 -0
- package/dist/acp/event-mapper.d.ts +22 -0
- package/dist/acp/event-mapper.d.ts.map +1 -0
- package/dist/acp/event-mapper.js +166 -0
- package/dist/acp/event-mapper.js.map +1 -0
- package/dist/acp/index.d.ts +8 -0
- package/dist/acp/index.d.ts.map +1 -0
- package/dist/acp/index.js +54 -0
- package/dist/acp/index.js.map +1 -0
- package/dist/acp/server.d.ts +7 -0
- package/dist/acp/server.d.ts.map +1 -0
- package/dist/acp/server.js +34 -0
- package/dist/acp/server.js.map +1 -0
- package/dist/acp.d.ts +2 -0
- package/dist/acp.d.ts.map +1 -0
- package/dist/acp.js +5 -0
- package/dist/acp.js.map +1 -0
- package/dist/agents/instructions.d.ts +6 -0
- package/dist/agents/instructions.d.ts.map +1 -0
- package/dist/agents/instructions.js +41 -0
- package/dist/agents/instructions.js.map +1 -0
- package/dist/agents/mastracode-gateway.d.ts +65 -0
- package/dist/agents/mastracode-gateway.d.ts.map +1 -0
- package/dist/agents/mastracode-gateway.js +442 -0
- package/dist/agents/mastracode-gateway.js.map +1 -0
- package/dist/agents/memory.d.ts +13 -0
- package/dist/agents/memory.d.ts.map +1 -0
- package/dist/agents/memory.js +107 -0
- package/dist/agents/memory.js.map +1 -0
- package/dist/agents/model.d.ts +55 -0
- package/dist/agents/model.d.ts.map +1 -0
- package/dist/agents/model.js +115 -0
- package/dist/agents/model.js.map +1 -0
- package/dist/agents/modes/build.d.ts +10 -0
- package/dist/agents/modes/build.d.ts.map +1 -0
- package/dist/agents/modes/build.js +45 -0
- package/dist/agents/modes/build.js.map +1 -0
- package/dist/agents/modes/explore.d.ts +10 -0
- package/dist/agents/modes/explore.d.ts.map +1 -0
- package/dist/agents/modes/explore.js +38 -0
- package/dist/agents/modes/explore.js.map +1 -0
- package/dist/agents/modes/plan.d.ts +6 -0
- package/dist/agents/modes/plan.d.ts.map +1 -0
- package/dist/agents/modes/plan.js +38 -0
- package/dist/agents/modes/plan.js.map +1 -0
- package/dist/agents/prompts/agent-instructions.d.ts +20 -0
- package/dist/agents/prompts/agent-instructions.d.ts.map +1 -0
- package/dist/agents/prompts/agent-instructions.js +82 -0
- package/dist/agents/prompts/agent-instructions.js.map +1 -0
- package/dist/agents/prompts/build.d.ts +12 -0
- package/dist/agents/prompts/build.d.ts.map +1 -0
- package/dist/agents/prompts/build.js +73 -0
- package/dist/agents/prompts/build.js.map +1 -0
- package/dist/agents/prompts/fast.d.ts +5 -0
- package/dist/agents/prompts/fast.d.ts.map +1 -0
- package/dist/agents/prompts/fast.js +22 -0
- package/dist/agents/prompts/fast.js.map +1 -0
- package/dist/agents/prompts/index.d.ts +19 -0
- package/dist/agents/prompts/index.d.ts.map +1 -0
- package/dist/agents/prompts/index.js +57 -0
- package/dist/agents/prompts/index.js.map +1 -0
- package/dist/agents/prompts/model.d.ts +5 -0
- package/dist/agents/prompts/model.d.ts.map +1 -0
- package/dist/agents/prompts/model.js +22 -0
- package/dist/agents/prompts/model.js.map +1 -0
- package/dist/agents/prompts/plan.d.ts +6 -0
- package/dist/agents/prompts/plan.d.ts.map +1 -0
- package/dist/agents/prompts/plan.js +107 -0
- package/dist/agents/prompts/plan.js.map +1 -0
- package/dist/agents/prompts/tool-guidance.d.ts +13 -0
- package/dist/agents/prompts/tool-guidance.d.ts.map +1 -0
- package/dist/agents/prompts/tool-guidance.js +181 -0
- package/dist/agents/prompts/tool-guidance.js.map +1 -0
- package/dist/agents/sandbox-filesystem.d.ts +89 -0
- package/dist/agents/sandbox-filesystem.d.ts.map +1 -0
- package/dist/agents/sandbox-filesystem.js +268 -0
- package/dist/agents/sandbox-filesystem.js.map +1 -0
- package/dist/agents/sandbox-reattach.d.ts +19 -0
- package/dist/agents/sandbox-reattach.d.ts.map +1 -0
- package/dist/agents/sandbox-reattach.js +17 -0
- package/dist/agents/sandbox-reattach.js.map +1 -0
- package/dist/agents/thread-caveman-state.d.ts +17 -0
- package/dist/agents/thread-caveman-state.d.ts.map +1 -0
- package/dist/agents/thread-caveman-state.js +96 -0
- package/dist/agents/thread-caveman-state.js.map +1 -0
- package/dist/agents/tool-availability.d.ts +10 -0
- package/dist/agents/tool-availability.d.ts.map +1 -0
- package/dist/agents/tool-availability.js +105 -0
- package/dist/agents/tool-availability.js.map +1 -0
- package/dist/agents/tools.d.ts +18 -0
- package/dist/agents/tools.d.ts.map +1 -0
- package/dist/agents/tools.js +126 -0
- package/dist/agents/tools.js.map +1 -0
- package/dist/agents/workspace.d.ts +22 -0
- package/dist/agents/workspace.d.ts.map +1 -0
- package/dist/agents/workspace.js +194 -0
- package/dist/agents/workspace.js.map +1 -0
- package/dist/analytics.d.ts +18 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/analytics.js +152 -0
- package/dist/analytics.js.map +1 -0
- package/dist/auth/index.d.ts +9 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +11 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/pkce.d.ts +13 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +21 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/auth/providers/anthropic.d.ts +17 -0
- package/dist/auth/providers/anthropic.d.ts.map +1 -0
- package/dist/auth/providers/anthropic.js +94 -0
- package/dist/auth/providers/anthropic.js.map +1 -0
- package/dist/auth/providers/github-copilot.d.ts +100 -0
- package/dist/auth/providers/github-copilot.d.ts.map +1 -0
- package/dist/auth/providers/github-copilot.js +302 -0
- package/dist/auth/providers/github-copilot.js.map +1 -0
- package/dist/auth/providers/openai-codex.d.ts +95 -0
- package/dist/auth/providers/openai-codex.d.ts.map +1 -0
- package/dist/auth/providers/openai-codex.js +527 -0
- package/dist/auth/providers/openai-codex.js.map +1 -0
- package/dist/auth/storage.d.ts +91 -0
- package/dist/auth/storage.d.ts.map +1 -0
- package/dist/auth/storage.js +187 -0
- package/dist/auth/storage.js.map +1 -0
- package/dist/auth/types.d.ts +68 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +1 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/clipboard/index.d.ts +26 -0
- package/dist/clipboard/index.d.ts.map +1 -0
- package/dist/clipboard/index.js +192 -0
- package/dist/clipboard/index.js.map +1 -0
- package/dist/constants.d.ts +10 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +23 -0
- package/dist/constants.js.map +1 -0
- package/dist/error-classification.d.ts +10 -0
- package/dist/error-classification.d.ts.map +1 -0
- package/dist/error-classification.js +14 -0
- package/dist/error-classification.js.map +1 -0
- package/dist/evals/context-builder.d.ts +41 -0
- package/dist/evals/context-builder.d.ts.map +1 -0
- package/dist/evals/context-builder.js +120 -0
- package/dist/evals/context-builder.js.map +1 -0
- package/dist/evals/index.d.ts +4 -0
- package/dist/evals/index.d.ts.map +1 -0
- package/dist/evals/index.js +8 -0
- package/dist/evals/index.js.map +1 -0
- package/dist/evals/scorers/classify-command.d.ts +31 -0
- package/dist/evals/scorers/classify-command.d.ts.map +1 -0
- package/dist/evals/scorers/classify-command.js +52 -0
- package/dist/evals/scorers/classify-command.js.map +1 -0
- package/dist/evals/scorers/efficiency.d.ts +44 -0
- package/dist/evals/scorers/efficiency.d.ts.map +1 -0
- package/dist/evals/scorers/efficiency.js +201 -0
- package/dist/evals/scorers/efficiency.js.map +1 -0
- package/dist/evals/scorers/extract-tools.d.ts +25 -0
- package/dist/evals/scorers/extract-tools.d.ts.map +1 -0
- package/dist/evals/scorers/extract-tools.js +56 -0
- package/dist/evals/scorers/extract-tools.js.map +1 -0
- package/dist/evals/scorers/index.d.ts +3 -0
- package/dist/evals/scorers/index.d.ts.map +1 -0
- package/dist/evals/scorers/index.js +7 -0
- package/dist/evals/scorers/index.js.map +1 -0
- package/dist/evals/scorers/outcome.d.ts +49 -0
- package/dist/evals/scorers/outcome.d.ts.map +1 -0
- package/dist/evals/scorers/outcome.js +238 -0
- package/dist/evals/scorers/outcome.js.map +1 -0
- package/dist/headless/cli.d.ts +42 -0
- package/dist/headless/cli.d.ts.map +1 -0
- package/dist/headless/cli.js +196 -0
- package/dist/headless/cli.js.map +1 -0
- package/dist/headless/flags.d.ts +33 -0
- package/dist/headless/flags.d.ts.map +1 -0
- package/dist/headless/flags.js +188 -0
- package/dist/headless/flags.js.map +1 -0
- package/dist/headless/format.d.ts +38 -0
- package/dist/headless/format.d.ts.map +1 -0
- package/dist/headless/format.js +85 -0
- package/dist/headless/format.js.map +1 -0
- package/dist/headless/index.d.ts +25 -0
- package/dist/headless/index.d.ts.map +1 -0
- package/dist/headless/index.js +32 -0
- package/dist/headless/index.js.map +1 -0
- package/dist/headless/policy.d.ts +17 -0
- package/dist/headless/policy.d.ts.map +1 -0
- package/dist/headless/policy.js +38 -0
- package/dist/headless/policy.js.map +1 -0
- package/dist/headless/run-mc.d.ts +7 -0
- package/dist/headless/run-mc.d.ts.map +1 -0
- package/dist/headless/run-mc.js +296 -0
- package/dist/headless/run-mc.js.map +1 -0
- package/dist/headless/types.d.ts +134 -0
- package/dist/headless/types.d.ts.map +1 -0
- package/dist/headless/types.js +9 -0
- package/dist/headless/types.js.map +1 -0
- package/dist/hooks/config.d.ts +11 -0
- package/dist/hooks/config.d.ts.map +1 -0
- package/dist/hooks/config.js +78 -0
- package/dist/hooks/config.js.map +1 -0
- package/dist/hooks/executor.d.ts +13 -0
- package/dist/hooks/executor.d.ts.map +1 -0
- package/dist/hooks/executor.js +125 -0
- package/dist/hooks/executor.js.map +1 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +16 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/manager.d.ts +47 -0
- package/dist/hooks/manager.d.ts.map +1 -0
- package/dist/hooks/manager.js +284 -0
- package/dist/hooks/manager.js.map +1 -0
- package/dist/hooks/types.d.ts +152 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +7 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +241 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +712 -0
- package/dist/index.js.map +1 -0
- package/dist/ipc/ipc-reporter.d.ts +14 -0
- package/dist/ipc/ipc-reporter.d.ts.map +1 -0
- package/dist/ipc/ipc-reporter.js +24 -0
- package/dist/ipc/ipc-reporter.js.map +1 -0
- package/dist/lsp/client.d.ts +56 -0
- package/dist/lsp/client.d.ts.map +1 -0
- package/dist/lsp/client.js +309 -0
- package/dist/lsp/client.js.map +1 -0
- package/dist/lsp/index.d.ts +4 -0
- package/dist/lsp/index.d.ts.map +1 -0
- package/dist/lsp/index.js +9 -0
- package/dist/lsp/index.js.map +1 -0
- package/dist/lsp/language.d.ts +9 -0
- package/dist/lsp/language.d.ts.map +1 -0
- package/dist/lsp/language.js +48 -0
- package/dist/lsp/language.js.map +1 -0
- package/dist/lsp/manager.d.ts +34 -0
- package/dist/lsp/manager.d.ts.map +1 -0
- package/dist/lsp/manager.js +97 -0
- package/dist/lsp/manager.js.map +1 -0
- package/dist/lsp/server.d.ts +27 -0
- package/dist/lsp/server.d.ts.map +1 -0
- package/dist/lsp/server.js +128 -0
- package/dist/lsp/server.js.map +1 -0
- package/dist/lsp/workspace.d.ts +9 -0
- package/dist/lsp/workspace.d.ts.map +1 -0
- package/dist/lsp/workspace.js +52 -0
- package/dist/lsp/workspace.js.map +1 -0
- package/dist/mcp/config.d.ts +34 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +205 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +10 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +49 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +374 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/types.d.ts +85 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +1 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/onboarding/custom-packs.d.ts +7 -0
- package/dist/onboarding/custom-packs.d.ts.map +1 -0
- package/dist/onboarding/custom-packs.js +20 -0
- package/dist/onboarding/custom-packs.js.map +1 -0
- package/dist/onboarding/custom-providers.d.ts +4 -0
- package/dist/onboarding/custom-providers.d.ts.map +1 -0
- package/dist/onboarding/custom-providers.js +28 -0
- package/dist/onboarding/custom-providers.js.map +1 -0
- package/dist/onboarding/index.d.ts +5 -0
- package/dist/onboarding/index.d.ts.map +1 -0
- package/dist/onboarding/index.js +21 -0
- package/dist/onboarding/index.js.map +1 -0
- package/dist/onboarding/om-settings.d.ts +20 -0
- package/dist/onboarding/om-settings.d.ts.map +1 -0
- package/dist/onboarding/om-settings.js +26 -0
- package/dist/onboarding/om-settings.js.map +1 -0
- package/dist/onboarding/packs.d.ts +48 -0
- package/dist/onboarding/packs.d.ts.map +1 -0
- package/dist/onboarding/packs.js +111 -0
- package/dist/onboarding/packs.js.map +1 -0
- package/dist/onboarding/settings.d.ts +323 -0
- package/dist/onboarding/settings.d.ts.map +1 -0
- package/dist/onboarding/settings.js +594 -0
- package/dist/onboarding/settings.js.map +1 -0
- package/dist/permissions.d.ts +55 -0
- package/dist/permissions.d.ts.map +1 -0
- package/dist/permissions.js +119 -0
- package/dist/permissions.js.map +1 -0
- package/dist/plugin.d.ts +81 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +30 -0
- package/dist/plugin.js.map +1 -0
- package/dist/plugins/install.d.ts +20 -0
- package/dist/plugins/install.d.ts.map +1 -0
- package/dist/plugins/install.js +179 -0
- package/dist/plugins/install.js.map +1 -0
- package/dist/plugins/loader.d.ts +15 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +221 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +60 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +369 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/manifest.d.ts +14 -0
- package/dist/plugins/manifest.d.ts.map +1 -0
- package/dist/plugins/manifest.js +75 -0
- package/dist/plugins/manifest.js.map +1 -0
- package/dist/plugins/package-link.d.ts +2 -0
- package/dist/plugins/package-link.d.ts.map +1 -0
- package/dist/plugins/package-link.js +20 -0
- package/dist/plugins/package-link.js.map +1 -0
- package/dist/plugins/paths.d.ts +10 -0
- package/dist/plugins/paths.d.ts.map +1 -0
- package/dist/plugins/paths.js +26 -0
- package/dist/plugins/paths.js.map +1 -0
- package/dist/plugins/registry.d.ts +8 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +96 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/scaffold.d.ts +10 -0
- package/dist/plugins/scaffold.d.ts.map +1 -0
- package/dist/plugins/scaffold.js +152 -0
- package/dist/plugins/scaffold.js.map +1 -0
- package/dist/plugins/types.d.ts +45 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +1 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/processors/plan-rejection-abort.d.ts +12 -0
- package/dist/processors/plan-rejection-abort.d.ts.map +1 -0
- package/dist/processors/plan-rejection-abort.js +53 -0
- package/dist/processors/plan-rejection-abort.js.map +1 -0
- package/dist/providers/amazon-bedrock-gateway.d.ts +40 -0
- package/dist/providers/amazon-bedrock-gateway.d.ts.map +1 -0
- package/dist/providers/amazon-bedrock-gateway.js +79 -0
- package/dist/providers/amazon-bedrock-gateway.js.map +1 -0
- package/dist/providers/amazon-bedrock.d.ts +28 -0
- package/dist/providers/amazon-bedrock.d.ts.map +1 -0
- package/dist/providers/amazon-bedrock.js +62 -0
- package/dist/providers/amazon-bedrock.js.map +1 -0
- package/dist/providers/claude-max.d.ts +50 -0
- package/dist/providers/claude-max.d.ts.map +1 -0
- package/dist/providers/claude-max.js +151 -0
- package/dist/providers/claude-max.js.map +1 -0
- package/dist/providers/github-copilot.d.ts +58 -0
- package/dist/providers/github-copilot.d.ts.map +1 -0
- package/dist/providers/github-copilot.js +263 -0
- package/dist/providers/github-copilot.js.map +1 -0
- package/dist/providers/openai-codex.d.ts +70 -0
- package/dist/providers/openai-codex.d.ts.map +1 -0
- package/dist/providers/openai-codex.js +291 -0
- package/dist/providers/openai-codex.js.map +1 -0
- package/dist/schema.d.ts +167 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +92 -0
- package/dist/schema.js.map +1 -0
- package/dist/theme-palette.d.ts +17 -0
- package/dist/theme-palette.d.ts.map +1 -0
- package/dist/theme-palette.js +17 -0
- package/dist/theme-palette.js.map +1 -0
- package/dist/tool-names.d.ts +73 -0
- package/dist/tool-names.d.ts.map +1 -0
- package/dist/tool-names.js +43 -0
- package/dist/tool-names.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +9 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/request-sandbox-access.d.ts +6 -0
- package/dist/tools/request-sandbox-access.d.ts.map +1 -0
- package/dist/tools/request-sandbox-access.js +88 -0
- package/dist/tools/request-sandbox-access.js.map +1 -0
- package/dist/tools/utils.d.ts +20 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +22 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools/web-search.d.ts +35 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +65 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/utils/binaries.d.ts +7 -0
- package/dist/utils/binaries.d.ts.map +1 -0
- package/dist/utils/binaries.js +74 -0
- package/dist/utils/binaries.js.map +1 -0
- package/dist/utils/debug-log.d.ts +12 -0
- package/dist/utils/debug-log.d.ts.map +1 -0
- package/dist/utils/debug-log.js +55 -0
- package/dist/utils/debug-log.js.map +1 -0
- package/dist/utils/errors.d.ts +36 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +207 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/gateway-sync.d.ts +26 -0
- package/dist/utils/gateway-sync.d.ts.map +1 -0
- package/dist/utils/gateway-sync.js +49 -0
- package/dist/utils/gateway-sync.js.map +1 -0
- package/dist/utils/plan-diff.d.ts +25 -0
- package/dist/utils/plan-diff.d.ts.map +1 -0
- package/dist/utils/plan-diff.js +43 -0
- package/dist/utils/plan-diff.js.map +1 -0
- package/dist/utils/plans.d.ts +56 -0
- package/dist/utils/plans.d.ts.map +1 -0
- package/dist/utils/plans.js +99 -0
- package/dist/utils/plans.js.map +1 -0
- package/dist/utils/project.d.ts +161 -0
- package/dist/utils/project.d.ts.map +1 -0
- package/dist/utils/project.js +302 -0
- package/dist/utils/project.js.map +1 -0
- package/dist/utils/signals-pubsub.d.ts +41 -0
- package/dist/utils/signals-pubsub.d.ts.map +1 -0
- package/dist/utils/signals-pubsub.js +104 -0
- package/dist/utils/signals-pubsub.js.map +1 -0
- package/dist/utils/slash-command-loader.d.ts +48 -0
- package/dist/utils/slash-command-loader.d.ts.map +1 -0
- package/dist/utils/slash-command-loader.js +155 -0
- package/dist/utils/slash-command-loader.js.map +1 -0
- package/dist/utils/slash-command-processor.d.ts +14 -0
- package/dist/utils/slash-command-processor.d.ts.map +1 -0
- package/dist/utils/slash-command-processor.js +96 -0
- package/dist/utils/slash-command-processor.js.map +1 -0
- package/dist/utils/stdin-pipe.d.ts +33 -0
- package/dist/utils/stdin-pipe.d.ts.map +1 -0
- package/dist/utils/stdin-pipe.js +72 -0
- package/dist/utils/stdin-pipe.js.map +1 -0
- package/dist/utils/storage-factory.d.ts +50 -0
- package/dist/utils/storage-factory.d.ts.map +1 -0
- package/dist/utils/storage-factory.js +98 -0
- package/dist/utils/storage-factory.js.map +1 -0
- package/dist/utils/thread-lock.d.ts +26 -0
- package/dist/utils/thread-lock.d.ts.map +1 -0
- package/dist/utils/thread-lock.js +108 -0
- package/dist/utils/thread-lock.js.map +1 -0
- package/dist/utils/token-estimator.d.ts +3 -0
- package/dist/utils/token-estimator.d.ts.map +1 -0
- package/dist/utils/token-estimator.js +21 -0
- package/dist/utils/token-estimator.js.map +1 -0
- package/dist/utils/update-check.d.ts +52 -0
- package/dist/utils/update-check.d.ts.map +1 -0
- package/dist/utils/update-check.js +177 -0
- package/dist/utils/update-check.js.map +1 -0
- package/dist/voice/stt-registry.d.ts +64 -0
- package/dist/voice/stt-registry.d.ts.map +1 -0
- package/dist/voice/stt-registry.js +126 -0
- package/dist/voice/stt-registry.js.map +1 -0
- package/package.json +92 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# @mastra/code-sdk
|
|
2
|
+
|
|
3
|
+
## 0.0.0-mastracode-cloud-20260706153555
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Publish the Mastra Code agent core as `@mastra/code-sdk` (previously the internal `@internal/mastracode` package), so third parties can build their own UIs and surfaces on top of the Mastra Code coding agent. The `mastracode` CLI now consumes it as a regular runtime dependency instead of bundling it into its published output. ([`62ead38`](https://github.com/mastra-ai/mastra/commit/62ead38d2371fc8565f682611af9771bd58e5433))
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [[`81e1ad4`](https://github.com/mastra-ai/mastra/commit/81e1ad440fd7ae0cd3b2977ae0c31eab0168efa7), [`3ffb8b7`](https://github.com/mastra-ai/mastra/commit/3ffb8b720e90f5e6977129ec1f6707d43c2bebe0), [`6ef59fe`](https://github.com/mastra-ai/mastra/commit/6ef59fef1da52ed8da5fbb2a892c71cf4fb6c739), [`a51c63d`](https://github.com/mastra-ai/mastra/commit/a51c63d8ee639e4daeba2a0be093efa6a1b5e52f), [`5ea76a7`](https://github.com/mastra-ai/mastra/commit/5ea76a723d966c72da9aa3ab30ae20276e049765), [`6445560`](https://github.com/mastra-ai/mastra/commit/6445560327045d20b239585fc63fed72e9ce36ec), [`e2b9f33`](https://github.com/mastra-ai/mastra/commit/e2b9f33456fd638eca555f9466c6519d8d049666), [`911281c`](https://github.com/mastra-ai/mastra/commit/911281c57893ba2630428bf88d0cd0c5101ce76f), [`a2ba369`](https://github.com/mastra-ai/mastra/commit/a2ba369e796dfab610f41c6875965b488272fa55), [`02705fd`](https://github.com/mastra-ai/mastra/commit/02705fd2f5a9062210d64ea061adeeb10dc9452e), [`ae51e81`](https://github.com/mastra-ai/mastra/commit/ae51e818825582d42500338dfc1929a082eff0ba), [`6f304ef`](https://github.com/mastra-ai/mastra/commit/6f304ef319e99725e884bdb8d3193c001b6e5964)]:
|
|
12
|
+
- @mastra/agent-browser@0.0.0-mastracode-cloud-20260706153555
|
|
13
|
+
- @mastra/core@0.0.0-mastracode-cloud-20260706153555
|
|
14
|
+
- @mastra/observability@0.0.0-mastracode-cloud-20260706153555
|
|
15
|
+
- @mastra/mcp@0.0.0-mastracode-cloud-20260706153555
|
|
16
|
+
- @mastra/stagehand@0.0.0-mastracode-cloud-20260706153555
|
|
17
|
+
- @mastra/tavily@0.0.0-mastracode-cloud-20260706153555
|
|
18
|
+
- @mastra/memory@0.0.0-mastracode-cloud-20260706153555
|
|
19
|
+
- @mastra/github-signals@0.0.0-mastracode-cloud-20260706153555
|
|
20
|
+
- @mastra/duckdb@0.0.0-mastracode-cloud-20260706153555
|
|
21
|
+
- @mastra/libsql@0.0.0-mastracode-cloud-20260706153555
|
|
22
|
+
- @mastra/pg@0.0.0-mastracode-cloud-20260706153555
|
package/LICENSE.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
Portions of this software are licensed as follows:
|
|
2
|
+
|
|
3
|
+
- All content that resides under any directory named "ee/" within this
|
|
4
|
+
repository, including but not limited to:
|
|
5
|
+
- `packages/core/src/auth/ee/`
|
|
6
|
+
- `packages/server/src/server/auth/ee/`
|
|
7
|
+
is licensed under the license defined in `ee/LICENSE`.
|
|
8
|
+
|
|
9
|
+
- All third-party components incorporated into the Mastra Software are
|
|
10
|
+
licensed under the original license provided by the owner of the
|
|
11
|
+
applicable component.
|
|
12
|
+
|
|
13
|
+
- Content outside of the above-mentioned directories or restrictions is
|
|
14
|
+
available under the "Apache License 2.0" as defined below.
|
|
15
|
+
|
|
16
|
+
# Apache License 2.0
|
|
17
|
+
|
|
18
|
+
Copyright (c) 2025 Kepler Software, Inc.
|
|
19
|
+
|
|
20
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
21
|
+
you may not use this file except in compliance with the License.
|
|
22
|
+
You may obtain a copy of the License at
|
|
23
|
+
|
|
24
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
25
|
+
|
|
26
|
+
Unless required by applicable law or agreed to in writing, software
|
|
27
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
28
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
29
|
+
See the License for the specific language governing permissions and
|
|
30
|
+
limitations under the License.
|
package/README.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# @mastra/code-sdk
|
|
2
|
+
|
|
3
|
+
The agent core behind [Mastra Code](https://mastra.ai) — everything except the terminal UI. Use it to build your own UIs and surfaces (web apps, editors, bots) on top of the Mastra Code coding agent.
|
|
4
|
+
|
|
5
|
+
The published [`mastracode`](https://www.npmjs.com/package/mastracode) CLI/TUI and the Mastra Code web surface are both built on this SDK.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @mastra/code-sdk
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
Mount the Mastra Code agent controller on a Mastra instance:
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { mountAgentControllerOnMastra } from '@mastra/code-sdk';
|
|
19
|
+
|
|
20
|
+
// Creates a Mastra instance that hosts the Mastra Code agent controller
|
|
21
|
+
// (thread management, modes, tools, memory) and starts its workers.
|
|
22
|
+
const { mastra, controller } = await mountAgentControllerOnMastra({
|
|
23
|
+
cwd: process.cwd(),
|
|
24
|
+
});
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
To construct the `Mastra` instance yourself (e.g. in a deployable `mastra` entry file), use `prepareAgentControllerMount`:
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
import { Mastra } from '@mastra/core/mastra';
|
|
31
|
+
import { prepareAgentControllerMount } from '@mastra/code-sdk';
|
|
32
|
+
|
|
33
|
+
const prepared = await prepareAgentControllerMount({ cwd: process.cwd() });
|
|
34
|
+
|
|
35
|
+
export const mastra = new Mastra(prepared.mastraArgs);
|
|
36
|
+
|
|
37
|
+
await prepared.finalize();
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Deep modules are available as subpath imports, e.g.:
|
|
41
|
+
|
|
42
|
+
```ts
|
|
43
|
+
import { loadSettings } from '@mastra/code-sdk/onboarding/settings';
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
> The subpath API surface is still evolving and may change between minor releases while the package is pre-1.0.
|
|
47
|
+
|
|
48
|
+
## License
|
|
49
|
+
|
|
50
|
+
Apache-2.0
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Agent, AgentSideConnection, InitializeRequest, InitializeResponse, NewSessionRequest, NewSessionResponse, PromptRequest, PromptResponse, CancelNotification, ContentBlock } from '@agentclientprotocol/sdk';
|
|
2
|
+
import type { AgentController, AgentControllerMode, Session } from '@mastra/core/agent-controller';
|
|
3
|
+
/**
|
|
4
|
+
* ACP Agent implementation that wraps a mastracode Controller.
|
|
5
|
+
* Each instance represents one ACP connection from a client.
|
|
6
|
+
*/
|
|
7
|
+
export declare class MastraCodeAcpAgent implements Agent {
|
|
8
|
+
private readonly connection;
|
|
9
|
+
private readonly controller;
|
|
10
|
+
private readonly session;
|
|
11
|
+
private readonly modes;
|
|
12
|
+
private readonly unsubscribeSessionEvents;
|
|
13
|
+
private readonly sessionMap;
|
|
14
|
+
private currentPromptState;
|
|
15
|
+
private promptMutex;
|
|
16
|
+
private getThreadIdOrThrow;
|
|
17
|
+
constructor(connection: AgentSideConnection, controller: AgentController, session: Session, modes: AgentControllerMode[]);
|
|
18
|
+
dispose(): void;
|
|
19
|
+
initialize(_request: InitializeRequest): Promise<InitializeResponse>;
|
|
20
|
+
authenticate(): Promise<void>;
|
|
21
|
+
newSession(_request: NewSessionRequest): Promise<NewSessionResponse>;
|
|
22
|
+
prompt(request: PromptRequest): Promise<PromptResponse>;
|
|
23
|
+
cancel(_notification: CancelNotification): Promise<void>;
|
|
24
|
+
setSessionMode(params: {
|
|
25
|
+
sessionId: string;
|
|
26
|
+
modeId: string;
|
|
27
|
+
}): Promise<void>;
|
|
28
|
+
unstable_setSessionModel(params: {
|
|
29
|
+
sessionId: string;
|
|
30
|
+
modelId: string;
|
|
31
|
+
}): Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
export declare function extractTextFromContentBlocks(blocks: ContentBlock[]): string;
|
|
34
|
+
export declare function mapStopReason(reason: 'complete' | 'aborted' | 'error' | 'suspended'): 'end_turn' | 'cancelled' | 'max_tokens' | 'max_turn_requests' | 'refusal';
|
|
35
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/acp/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,YAAY,EACb,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAInG;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,KAAK;IAC9C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwB;IAC9C,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAa;IACtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IACxD,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,WAAW,CAAoC;IAEvD,OAAO,CAAC,kBAAkB;gBASxB,UAAU,EAAE,mBAAmB,EAC/B,UAAU,EAAE,eAAe,EAC3B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,mBAAmB,EAAE;IAa9B,OAAO,IAAI,IAAI;IAIT,UAAU,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAcpE,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,UAAU,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA0CpE,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAsEvD,MAAM,CAAC,aAAa,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,cAAc,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5E,wBAAwB,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAK9F;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAY3E;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GACrD,UAAU,GAAG,WAAW,GAAG,YAAY,GAAG,mBAAmB,GAAG,SAAS,CAW3E"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { PROTOCOL_VERSION } from "@agentclientprotocol/sdk";
|
|
2
|
+
import { handleAgentControllerEvent } from "./event-mapper.js";
|
|
3
|
+
class MastraCodeAcpAgent {
|
|
4
|
+
connection;
|
|
5
|
+
controller;
|
|
6
|
+
session;
|
|
7
|
+
modes;
|
|
8
|
+
unsubscribeSessionEvents;
|
|
9
|
+
sessionMap = /* @__PURE__ */ new Map();
|
|
10
|
+
// sessionId -> threadId
|
|
11
|
+
currentPromptState = null;
|
|
12
|
+
promptMutex = Promise.resolve();
|
|
13
|
+
getThreadIdOrThrow(sessionId) {
|
|
14
|
+
const threadId = this.sessionMap.get(sessionId);
|
|
15
|
+
if (!threadId) {
|
|
16
|
+
throw new Error(`Unknown ACP sessionId: ${sessionId}`);
|
|
17
|
+
}
|
|
18
|
+
return threadId;
|
|
19
|
+
}
|
|
20
|
+
constructor(connection, controller, session, modes) {
|
|
21
|
+
this.connection = connection;
|
|
22
|
+
this.controller = controller;
|
|
23
|
+
this.session = session;
|
|
24
|
+
this.modes = modes;
|
|
25
|
+
this.unsubscribeSessionEvents = this.session.subscribe((event) => {
|
|
26
|
+
handleAgentControllerEvent(event, this.currentPromptState, this.connection, this.session);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
dispose() {
|
|
30
|
+
this.unsubscribeSessionEvents();
|
|
31
|
+
}
|
|
32
|
+
async initialize(_request) {
|
|
33
|
+
return {
|
|
34
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
35
|
+
agentInfo: {
|
|
36
|
+
name: "mastracode",
|
|
37
|
+
title: "Mastra Code",
|
|
38
|
+
version: "0.1.0"
|
|
39
|
+
},
|
|
40
|
+
agentCapabilities: {
|
|
41
|
+
loadSession: false
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
async authenticate() {
|
|
46
|
+
}
|
|
47
|
+
async newSession(_request) {
|
|
48
|
+
const thread = await this.session.thread.create();
|
|
49
|
+
const sessionId = thread.id;
|
|
50
|
+
this.sessionMap.set(sessionId, thread.id);
|
|
51
|
+
await this.session.thread.switch({ threadId: thread.id });
|
|
52
|
+
const availableModes = this.modes.map((m) => ({
|
|
53
|
+
id: m.id,
|
|
54
|
+
name: m.name ?? m.id
|
|
55
|
+
}));
|
|
56
|
+
const currentModeId = this.session.mode.get();
|
|
57
|
+
let models;
|
|
58
|
+
try {
|
|
59
|
+
const availableModels = await this.controller.listAvailableModels();
|
|
60
|
+
const currentModelId = this.session.model.get();
|
|
61
|
+
models = {
|
|
62
|
+
currentModelId: currentModelId ?? "",
|
|
63
|
+
availableModels: availableModels.map((m) => ({
|
|
64
|
+
modelId: m.id,
|
|
65
|
+
name: m.modelName
|
|
66
|
+
}))
|
|
67
|
+
};
|
|
68
|
+
} catch {
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
sessionId,
|
|
72
|
+
modes: {
|
|
73
|
+
currentModeId,
|
|
74
|
+
availableModes
|
|
75
|
+
},
|
|
76
|
+
models
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
async prompt(request) {
|
|
80
|
+
const { sessionId, prompt: contentBlocks } = request;
|
|
81
|
+
const text = extractTextFromContentBlocks(contentBlocks);
|
|
82
|
+
const threadId = this.getThreadIdOrThrow(sessionId);
|
|
83
|
+
const prevMutex = this.promptMutex;
|
|
84
|
+
let resolveMutex;
|
|
85
|
+
this.promptMutex = new Promise((resolve) => {
|
|
86
|
+
resolveMutex = resolve;
|
|
87
|
+
});
|
|
88
|
+
await prevMutex;
|
|
89
|
+
try {
|
|
90
|
+
await this.session.thread.switch({ threadId });
|
|
91
|
+
const result = new Promise((resolve) => {
|
|
92
|
+
const usage2 = {
|
|
93
|
+
promptTokens: 0,
|
|
94
|
+
completionTokens: 0,
|
|
95
|
+
totalTokens: 0
|
|
96
|
+
};
|
|
97
|
+
this.currentPromptState = {
|
|
98
|
+
sessionId,
|
|
99
|
+
lastTextLength: 0,
|
|
100
|
+
usage: usage2,
|
|
101
|
+
resolve: (reason2) => {
|
|
102
|
+
resolve({ reason: reason2, usage: usage2 });
|
|
103
|
+
this.currentPromptState = null;
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
});
|
|
107
|
+
try {
|
|
108
|
+
await this.session.sendMessage({ content: text });
|
|
109
|
+
} catch (error) {
|
|
110
|
+
this.currentPromptState = null;
|
|
111
|
+
throw error;
|
|
112
|
+
}
|
|
113
|
+
const { reason, usage } = await result;
|
|
114
|
+
return {
|
|
115
|
+
stopReason: mapStopReason(reason),
|
|
116
|
+
usage: {
|
|
117
|
+
inputTokens: usage.promptTokens,
|
|
118
|
+
outputTokens: usage.completionTokens,
|
|
119
|
+
totalTokens: usage.totalTokens,
|
|
120
|
+
thoughtTokens: usage.reasoningTokens,
|
|
121
|
+
cachedReadTokens: usage.cachedInputTokens,
|
|
122
|
+
cachedWriteTokens: usage.cacheCreationInputTokens
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
} finally {
|
|
126
|
+
resolveMutex();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async cancel(_notification) {
|
|
130
|
+
this.session.abort();
|
|
131
|
+
}
|
|
132
|
+
async setSessionMode(params) {
|
|
133
|
+
const threadId = this.getThreadIdOrThrow(params.sessionId);
|
|
134
|
+
await this.session.thread.switch({ threadId });
|
|
135
|
+
this.session.mode.set({ modeId: params.modeId });
|
|
136
|
+
}
|
|
137
|
+
async unstable_setSessionModel(params) {
|
|
138
|
+
const threadId = this.getThreadIdOrThrow(params.sessionId);
|
|
139
|
+
await this.session.thread.switch({ threadId });
|
|
140
|
+
this.session.model.set({ modelId: params.modelId });
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function extractTextFromContentBlocks(blocks) {
|
|
144
|
+
const parts = [];
|
|
145
|
+
for (const block of blocks) {
|
|
146
|
+
if (block.type === "text") {
|
|
147
|
+
parts.push(block.text);
|
|
148
|
+
} else if (block.type === "resource_link") {
|
|
149
|
+
parts.push(`[resource: ${block.uri}]`);
|
|
150
|
+
} else if (block.type === "resource") {
|
|
151
|
+
parts.push(`[resource: ${block.resource.uri}]`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return parts.join("\n");
|
|
155
|
+
}
|
|
156
|
+
function mapStopReason(reason) {
|
|
157
|
+
switch (reason) {
|
|
158
|
+
case "complete":
|
|
159
|
+
return "end_turn";
|
|
160
|
+
case "aborted":
|
|
161
|
+
return "cancelled";
|
|
162
|
+
case "error":
|
|
163
|
+
return "end_turn";
|
|
164
|
+
case "suspended":
|
|
165
|
+
return "end_turn";
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
export {
|
|
169
|
+
MastraCodeAcpAgent,
|
|
170
|
+
extractTextFromContentBlocks,
|
|
171
|
+
mapStopReason
|
|
172
|
+
};
|
|
173
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/acp/agent.ts"],"sourcesContent":["import type {\n Agent,\n AgentSideConnection,\n InitializeRequest,\n InitializeResponse,\n NewSessionRequest,\n NewSessionResponse,\n PromptRequest,\n PromptResponse,\n CancelNotification,\n ContentBlock,\n} from '@agentclientprotocol/sdk';\nimport { PROTOCOL_VERSION } from '@agentclientprotocol/sdk';\nimport type { AgentController, AgentControllerMode, Session } from '@mastra/core/agent-controller';\nimport { handleAgentControllerEvent } from './event-mapper.js';\nimport type { PromptState } from './event-mapper.js';\n\n/**\n * ACP Agent implementation that wraps a mastracode Controller.\n * Each instance represents one ACP connection from a client.\n */\nexport class MastraCodeAcpAgent implements Agent {\n private readonly connection: AgentSideConnection;\n private readonly controller: AgentController;\n private readonly session: Session;\n private readonly modes: AgentControllerMode[];\n private readonly unsubscribeSessionEvents: () => void;\n private readonly sessionMap = new Map<string, string>(); // sessionId -> threadId\n private currentPromptState: PromptState | null = null;\n private promptMutex: Promise<void> = Promise.resolve();\n\n private getThreadIdOrThrow(sessionId: string): string {\n const threadId = this.sessionMap.get(sessionId);\n if (!threadId) {\n throw new Error(`Unknown ACP sessionId: ${sessionId}`);\n }\n return threadId;\n }\n\n constructor(\n connection: AgentSideConnection,\n controller: AgentController,\n session: Session,\n modes: AgentControllerMode[],\n ) {\n this.connection = connection;\n this.controller = controller;\n this.session = session;\n this.modes = modes;\n\n // Register persistent event listener\n this.unsubscribeSessionEvents = this.session.subscribe(event => {\n handleAgentControllerEvent(event, this.currentPromptState, this.connection, this.session);\n });\n }\n\n dispose(): void {\n this.unsubscribeSessionEvents();\n }\n\n async initialize(_request: InitializeRequest): Promise<InitializeResponse> {\n return {\n protocolVersion: PROTOCOL_VERSION,\n agentInfo: {\n name: 'mastracode',\n title: 'Mastra Code',\n version: '0.1.0',\n },\n agentCapabilities: {\n loadSession: false,\n },\n };\n }\n\n async authenticate(): Promise<void> {\n // No-op: mastracode handles its own auth\n }\n\n async newSession(_request: NewSessionRequest): Promise<NewSessionResponse> {\n const thread = await this.session.thread.create();\n const sessionId = thread.id;\n this.sessionMap.set(sessionId, thread.id);\n\n // Switch to the new thread\n await this.session.thread.switch({ threadId: thread.id });\n\n // Build modes list from constructor param\n const availableModes = this.modes.map((m: AgentControllerMode) => ({\n id: m.id,\n name: m.name ?? m.id,\n }));\n\n const currentModeId = this.session.mode.get();\n\n // Build models list (best-effort)\n let models: NewSessionResponse['models'];\n try {\n const availableModels = await this.controller.listAvailableModels();\n const currentModelId = this.session.model.get();\n models = {\n currentModelId: currentModelId ?? '',\n availableModels: availableModels.map(m => ({\n modelId: m.id,\n name: m.modelName,\n })),\n };\n } catch {\n // Model listing may fail if no providers are configured\n }\n\n return {\n sessionId,\n modes: {\n currentModeId,\n availableModes,\n },\n models,\n };\n }\n\n async prompt(request: PromptRequest): Promise<PromptResponse> {\n const { sessionId, prompt: contentBlocks } = request;\n\n // Extract text from content blocks\n const text = extractTextFromContentBlocks(contentBlocks);\n\n const threadId = this.getThreadIdOrThrow(sessionId);\n\n // Serialize prompts via mutex\n const prevMutex = this.promptMutex;\n let resolveMutex: () => void;\n this.promptMutex = new Promise<void>(resolve => {\n resolveMutex = resolve;\n });\n\n await prevMutex;\n\n try {\n // Ensure we're on the right thread while prompts are serialized\n await this.session.thread.switch({ threadId });\n\n // Create prompt state that will be resolved when agent_end fires\n const result = new Promise<{\n reason: 'complete' | 'aborted' | 'error' | 'suspended';\n usage: PromptState['usage'];\n }>(resolve => {\n const usage: PromptState['usage'] = {\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n };\n\n this.currentPromptState = {\n sessionId,\n lastTextLength: 0,\n usage,\n resolve: reason => {\n resolve({ reason, usage });\n this.currentPromptState = null;\n },\n };\n });\n\n // Send the message to the session\n try {\n await this.session.sendMessage({ content: text });\n } catch (error) {\n this.currentPromptState = null;\n throw error;\n }\n\n // Wait for agent_end to resolve\n const { reason, usage } = await result;\n\n return {\n stopReason: mapStopReason(reason),\n usage: {\n inputTokens: usage.promptTokens,\n outputTokens: usage.completionTokens,\n totalTokens: usage.totalTokens,\n thoughtTokens: usage.reasoningTokens,\n cachedReadTokens: usage.cachedInputTokens,\n cachedWriteTokens: usage.cacheCreationInputTokens,\n },\n };\n } finally {\n resolveMutex!();\n }\n }\n\n async cancel(_notification: CancelNotification): Promise<void> {\n this.session.abort();\n }\n\n async setSessionMode(params: { sessionId: string; modeId: string }): Promise<void> {\n const threadId = this.getThreadIdOrThrow(params.sessionId);\n await this.session.thread.switch({ threadId });\n this.session.mode.set({ modeId: params.modeId });\n }\n\n async unstable_setSessionModel(params: { sessionId: string; modelId: string }): Promise<void> {\n const threadId = this.getThreadIdOrThrow(params.sessionId);\n await this.session.thread.switch({ threadId });\n this.session.model.set({ modelId: params.modelId });\n }\n}\n\nexport function extractTextFromContentBlocks(blocks: ContentBlock[]): string {\n const parts: string[] = [];\n for (const block of blocks) {\n if (block.type === 'text') {\n parts.push(block.text);\n } else if (block.type === 'resource_link') {\n parts.push(`[resource: ${block.uri}]`);\n } else if (block.type === 'resource') {\n parts.push(`[resource: ${block.resource.uri}]`);\n }\n }\n return parts.join('\\n');\n}\n\nexport function mapStopReason(\n reason: 'complete' | 'aborted' | 'error' | 'suspended',\n): 'end_turn' | 'cancelled' | 'max_tokens' | 'max_turn_requests' | 'refusal' {\n switch (reason) {\n case 'complete':\n return 'end_turn';\n case 'aborted':\n return 'cancelled';\n case 'error':\n return 'end_turn';\n case 'suspended':\n return 'end_turn';\n }\n}\n"],"mappings":"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","names":["usage","reason"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { AgentSideConnection } from '@agentclientprotocol/sdk';
|
|
2
|
+
import type { AgentControllerEvent, Session, TokenUsage } from '@mastra/core/agent-controller';
|
|
3
|
+
/**
|
|
4
|
+
* Enable or disable automatic tool approval (set via --dangerous-auto-approve CLI flag).
|
|
5
|
+
*/
|
|
6
|
+
export declare function setAutoApprove(value: boolean): void;
|
|
7
|
+
/**
|
|
8
|
+
* Accumulated state for an active prompt turn.
|
|
9
|
+
*/
|
|
10
|
+
export interface PromptState {
|
|
11
|
+
sessionId: string;
|
|
12
|
+
lastTextLength: number;
|
|
13
|
+
usage: TokenUsage;
|
|
14
|
+
resolve: (reason: 'complete' | 'aborted' | 'error' | 'suspended') => void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Translate an AgentControllerEvent into an ACP SessionNotification and send it
|
|
18
|
+
* via the provided connection. Returns null for events that don't produce
|
|
19
|
+
* a session update.
|
|
20
|
+
*/
|
|
21
|
+
export declare function handleAgentControllerEvent(event: AgentControllerEvent, state: PromptState | null, connection: AgentSideConnection, session: Session): void;
|
|
22
|
+
//# sourceMappingURL=event-mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-mapper.d.ts","sourceRoot":"","sources":["../../src/acp/event-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiD,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACnH,OAAO,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAI/F;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAEnD;AA4BD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,KAAK,IAAI,CAAC;CAC3E;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,oBAAoB,EAC3B,KAAK,EAAE,WAAW,GAAG,IAAI,EACzB,UAAU,EAAE,mBAAmB,EAC/B,OAAO,EAAE,OAAO,GACf,IAAI,CAyEN"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
let autoApprove = false;
|
|
2
|
+
function setAutoApprove(value) {
|
|
3
|
+
autoApprove = value;
|
|
4
|
+
}
|
|
5
|
+
function mapToolKind(toolName) {
|
|
6
|
+
const name = toolName.toLowerCase();
|
|
7
|
+
if (name.includes("edit") || name.includes("write") || name.includes("replace") || name.includes("patch"))
|
|
8
|
+
return "edit";
|
|
9
|
+
if (name.includes("read") || name.includes("view") || name.includes("list") || name.includes("find")) return "read";
|
|
10
|
+
if (name.includes("delete") || name.includes("remove")) return "delete";
|
|
11
|
+
if (name.includes("search") || name.includes("grep") || name.includes("query")) return "search";
|
|
12
|
+
if (name.includes("execute") || name.includes("run") || name.includes("command") || name.includes("shell"))
|
|
13
|
+
return "execute";
|
|
14
|
+
if (name.includes("fetch") || name.includes("curl") || name.includes("http") || name.includes("browse") || name.includes("navigate"))
|
|
15
|
+
return "fetch";
|
|
16
|
+
if (name.includes("think") || name.includes("reason")) return "think";
|
|
17
|
+
return "other";
|
|
18
|
+
}
|
|
19
|
+
function handleAgentControllerEvent(event, state, connection, session) {
|
|
20
|
+
if (!state) return;
|
|
21
|
+
switch (event.type) {
|
|
22
|
+
case "agent_start":
|
|
23
|
+
state.lastTextLength = 0;
|
|
24
|
+
break;
|
|
25
|
+
case "message_update": {
|
|
26
|
+
if (event.message.role !== "assistant") break;
|
|
27
|
+
const fullText = event.message.content.filter((c) => c.type === "text").map((p) => p.text).join("");
|
|
28
|
+
if (fullText.length > state.lastTextLength) {
|
|
29
|
+
const delta = fullText.slice(state.lastTextLength);
|
|
30
|
+
state.lastTextLength = fullText.length;
|
|
31
|
+
sendUpdate(connection, state.sessionId, {
|
|
32
|
+
sessionUpdate: "agent_message_chunk",
|
|
33
|
+
content: { type: "text", text: delta }
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
case "message_end":
|
|
39
|
+
state.lastTextLength = 0;
|
|
40
|
+
break;
|
|
41
|
+
case "tool_start":
|
|
42
|
+
sendUpdate(connection, state.sessionId, {
|
|
43
|
+
sessionUpdate: "tool_call",
|
|
44
|
+
toolCallId: event.toolCallId,
|
|
45
|
+
title: event.toolName,
|
|
46
|
+
kind: mapToolKind(event.toolName),
|
|
47
|
+
status: "in_progress",
|
|
48
|
+
rawInput: JSON.stringify(event.args)
|
|
49
|
+
});
|
|
50
|
+
break;
|
|
51
|
+
case "tool_end":
|
|
52
|
+
sendUpdate(connection, state.sessionId, {
|
|
53
|
+
sessionUpdate: "tool_call_update",
|
|
54
|
+
toolCallId: event.toolCallId,
|
|
55
|
+
status: event.isError ? "failed" : "completed",
|
|
56
|
+
rawOutput: typeof event.result === "string" ? event.result : JSON.stringify(event.result)
|
|
57
|
+
});
|
|
58
|
+
break;
|
|
59
|
+
case "tool_approval_required":
|
|
60
|
+
void handleToolApproval(state, connection, session, event).catch((err) => {
|
|
61
|
+
process.stderr.write(`[acp] handleToolApproval error: ${err}
|
|
62
|
+
`);
|
|
63
|
+
});
|
|
64
|
+
break;
|
|
65
|
+
case "tool_suspended":
|
|
66
|
+
void handleToolSuspended(state, connection, session, event).catch((err) => {
|
|
67
|
+
process.stderr.write(`[acp] handleToolSuspended error: ${err}
|
|
68
|
+
`);
|
|
69
|
+
});
|
|
70
|
+
break;
|
|
71
|
+
case "usage_update":
|
|
72
|
+
accumulateUsage(state.usage, event.usage);
|
|
73
|
+
break;
|
|
74
|
+
case "agent_end":
|
|
75
|
+
state.resolve(event.reason ?? "complete");
|
|
76
|
+
break;
|
|
77
|
+
// Ignored in v1: om_*, subagent_*, workspace_*, task_updated, etc.
|
|
78
|
+
default:
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function sendUpdate(connection, sessionId, update) {
|
|
83
|
+
connection.sessionUpdate({ sessionId, update }).catch((err) => {
|
|
84
|
+
process.stderr.write(`[acp] sessionUpdate error: ${err}
|
|
85
|
+
`);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
async function handleToolApproval(state, connection, session, event) {
|
|
89
|
+
if (autoApprove) {
|
|
90
|
+
session.respondToToolApproval({ decision: "approve" });
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const req = {
|
|
94
|
+
sessionId: state.sessionId,
|
|
95
|
+
toolCall: {
|
|
96
|
+
toolCallId: event.toolCallId,
|
|
97
|
+
title: event.toolName,
|
|
98
|
+
rawInput: JSON.stringify(event.args)
|
|
99
|
+
},
|
|
100
|
+
options: [
|
|
101
|
+
{ optionId: "approve", name: "Allow", kind: "allow_once" },
|
|
102
|
+
{ optionId: "reject", name: "Reject", kind: "reject_once" }
|
|
103
|
+
]
|
|
104
|
+
};
|
|
105
|
+
try {
|
|
106
|
+
const resp = await connection.requestPermission(req);
|
|
107
|
+
if (resp.outcome.outcome === "selected") {
|
|
108
|
+
const decision = resp.outcome.optionId === "approve" ? "approve" : "decline";
|
|
109
|
+
session.respondToToolApproval({ decision });
|
|
110
|
+
} else {
|
|
111
|
+
session.respondToToolApproval({ decision: "decline" });
|
|
112
|
+
}
|
|
113
|
+
} catch (err) {
|
|
114
|
+
process.stderr.write(`[acp] requestPermission error: ${err}
|
|
115
|
+
`);
|
|
116
|
+
session.respondToToolApproval({ decision: "decline" });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async function handleToolSuspended(state, connection, session, event) {
|
|
120
|
+
const { toolCallId, toolName, args, suspendPayload } = event;
|
|
121
|
+
if (toolName === "request_access" || suspendPayload?.kind === "sandbox_access_request") {
|
|
122
|
+
void session.respondToToolSuspension({ toolCallId, resumeData: "Yes" });
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (toolName === "submit_plan") {
|
|
126
|
+
const req = {
|
|
127
|
+
sessionId: state.sessionId,
|
|
128
|
+
toolCall: {
|
|
129
|
+
toolCallId,
|
|
130
|
+
title: toolName,
|
|
131
|
+
rawInput: JSON.stringify(args)
|
|
132
|
+
},
|
|
133
|
+
options: [
|
|
134
|
+
{ optionId: "approve", name: "Approve Plan", kind: "allow_once" },
|
|
135
|
+
{ optionId: "reject", name: "Reject Plan", kind: "reject_once" }
|
|
136
|
+
]
|
|
137
|
+
};
|
|
138
|
+
try {
|
|
139
|
+
const resp = await connection.requestPermission(req);
|
|
140
|
+
const action = resp.outcome.outcome === "selected" && resp.outcome.optionId === "approve" ? "approved" : "rejected";
|
|
141
|
+
void session.respondToToolSuspension({ toolCallId, resumeData: { action } });
|
|
142
|
+
} catch {
|
|
143
|
+
void session.respondToToolSuspension({ toolCallId, resumeData: { action: "rejected" } });
|
|
144
|
+
}
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
void session.respondToToolSuspension({
|
|
148
|
+
toolCallId,
|
|
149
|
+
resumeData: "Proceed with your best judgment. Do not ask further questions."
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
function accumulateUsage(target, usage) {
|
|
153
|
+
target.promptTokens += usage.promptTokens;
|
|
154
|
+
target.completionTokens += usage.completionTokens;
|
|
155
|
+
target.totalTokens += usage.totalTokens;
|
|
156
|
+
if (usage.reasoningTokens) target.reasoningTokens = (target.reasoningTokens ?? 0) + usage.reasoningTokens;
|
|
157
|
+
if (usage.cachedInputTokens) target.cachedInputTokens = (target.cachedInputTokens ?? 0) + usage.cachedInputTokens;
|
|
158
|
+
if (usage.cacheCreationInputTokens) {
|
|
159
|
+
target.cacheCreationInputTokens = (target.cacheCreationInputTokens ?? 0) + usage.cacheCreationInputTokens;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
export {
|
|
163
|
+
handleAgentControllerEvent,
|
|
164
|
+
setAutoApprove
|
|
165
|
+
};
|
|
166
|
+
//# sourceMappingURL=event-mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/acp/event-mapper.ts"],"sourcesContent":["import type { SessionNotification, RequestPermissionRequest, AgentSideConnection } from '@agentclientprotocol/sdk';\nimport type { AgentControllerEvent, Session, TokenUsage } from '@mastra/core/agent-controller';\n\nlet autoApprove = false;\n\n/**\n * Enable or disable automatic tool approval (set via --dangerous-auto-approve CLI flag).\n */\nexport function setAutoApprove(value: boolean): void {\n autoApprove = value;\n}\n\n/**\n * Map a mastracode tool name to an ACP ToolKind.\n */\nfunction mapToolKind(\n toolName: string,\n): 'read' | 'edit' | 'delete' | 'move' | 'search' | 'execute' | 'think' | 'fetch' | 'other' {\n const name = toolName.toLowerCase();\n if (name.includes('edit') || name.includes('write') || name.includes('replace') || name.includes('patch'))\n return 'edit';\n if (name.includes('read') || name.includes('view') || name.includes('list') || name.includes('find')) return 'read';\n if (name.includes('delete') || name.includes('remove')) return 'delete';\n if (name.includes('search') || name.includes('grep') || name.includes('query')) return 'search';\n if (name.includes('execute') || name.includes('run') || name.includes('command') || name.includes('shell'))\n return 'execute';\n if (\n name.includes('fetch') ||\n name.includes('curl') ||\n name.includes('http') ||\n name.includes('browse') ||\n name.includes('navigate')\n )\n return 'fetch';\n if (name.includes('think') || name.includes('reason')) return 'think';\n return 'other';\n}\n\n/**\n * Accumulated state for an active prompt turn.\n */\nexport interface PromptState {\n sessionId: string;\n lastTextLength: number;\n usage: TokenUsage;\n resolve: (reason: 'complete' | 'aborted' | 'error' | 'suspended') => void;\n}\n\n/**\n * Translate an AgentControllerEvent into an ACP SessionNotification and send it\n * via the provided connection. Returns null for events that don't produce\n * a session update.\n */\nexport function handleAgentControllerEvent(\n event: AgentControllerEvent,\n state: PromptState | null,\n connection: AgentSideConnection,\n session: Session,\n): void {\n if (!state) return;\n\n switch (event.type) {\n case 'agent_start':\n state.lastTextLength = 0;\n break;\n\n case 'message_update': {\n if (event.message.role !== 'assistant') break;\n const fullText = event.message.content\n .filter((c): c is { type: 'text'; text: string } => c.type === 'text')\n .map(p => p.text)\n .join('');\n if (fullText.length > state.lastTextLength) {\n const delta = fullText.slice(state.lastTextLength);\n state.lastTextLength = fullText.length;\n sendUpdate(connection, state.sessionId, {\n sessionUpdate: 'agent_message_chunk',\n content: { type: 'text', text: delta },\n });\n }\n break;\n }\n\n case 'message_end':\n state.lastTextLength = 0;\n break;\n\n case 'tool_start':\n sendUpdate(connection, state.sessionId, {\n sessionUpdate: 'tool_call',\n toolCallId: event.toolCallId,\n title: event.toolName,\n kind: mapToolKind(event.toolName),\n status: 'in_progress',\n rawInput: JSON.stringify(event.args),\n });\n break;\n\n case 'tool_end':\n sendUpdate(connection, state.sessionId, {\n sessionUpdate: 'tool_call_update',\n toolCallId: event.toolCallId,\n status: event.isError ? 'failed' : 'completed',\n rawOutput: typeof event.result === 'string' ? event.result : JSON.stringify(event.result),\n });\n break;\n\n case 'tool_approval_required':\n void handleToolApproval(state, connection, session, event).catch(err => {\n process.stderr.write(`[acp] handleToolApproval error: ${err}\\n`);\n });\n break;\n\n case 'tool_suspended':\n void handleToolSuspended(state, connection, session, event).catch(err => {\n process.stderr.write(`[acp] handleToolSuspended error: ${err}\\n`);\n });\n break;\n\n case 'usage_update':\n accumulateUsage(state.usage, event.usage);\n break;\n\n case 'agent_end':\n state.resolve(event.reason ?? 'complete');\n break;\n\n // Ignored in v1: om_*, subagent_*, workspace_*, task_updated, etc.\n default:\n break;\n }\n}\n\nfunction sendUpdate(connection: AgentSideConnection, sessionId: string, update: SessionNotification['update']): void {\n connection.sessionUpdate({ sessionId, update }).catch(err => {\n process.stderr.write(`[acp] sessionUpdate error: ${err}\\n`);\n });\n}\n\nasync function handleToolApproval(\n state: PromptState,\n connection: AgentSideConnection,\n session: Session,\n event: Extract<AgentControllerEvent, { type: 'tool_approval_required' }>,\n): Promise<void> {\n // Auto-approve if --dangerous-auto-approve flag is set\n if (autoApprove) {\n session.respondToToolApproval({ decision: 'approve' });\n return;\n }\n\n const req: RequestPermissionRequest = {\n sessionId: state.sessionId,\n toolCall: {\n toolCallId: event.toolCallId,\n title: event.toolName,\n rawInput: JSON.stringify(event.args),\n },\n options: [\n { optionId: 'approve', name: 'Allow', kind: 'allow_once' },\n { optionId: 'reject', name: 'Reject', kind: 'reject_once' },\n ],\n };\n\n try {\n const resp = await connection.requestPermission(req);\n if (resp.outcome.outcome === 'selected') {\n const decision = resp.outcome.optionId === 'approve' ? 'approve' : 'decline';\n session.respondToToolApproval({ decision });\n } else {\n session.respondToToolApproval({ decision: 'decline' });\n }\n } catch (err) {\n process.stderr.write(`[acp] requestPermission error: ${err}\\n`);\n session.respondToToolApproval({ decision: 'decline' });\n }\n}\n\nasync function handleToolSuspended(\n state: PromptState,\n connection: AgentSideConnection,\n session: Session,\n event: Extract<AgentControllerEvent, { type: 'tool_suspended' }>,\n): Promise<void> {\n const { toolCallId, toolName, args, suspendPayload } = event;\n\n // Auto-resolve certain suspensions (mirrors headless.ts autoResolve)\n if (toolName === 'request_access' || (suspendPayload as any)?.kind === 'sandbox_access_request') {\n void session.respondToToolSuspension({ toolCallId, resumeData: 'Yes' });\n return;\n }\n\n if (toolName === 'submit_plan') {\n // Request permission for plan approval\n const req: RequestPermissionRequest = {\n sessionId: state.sessionId,\n toolCall: {\n toolCallId,\n title: toolName,\n rawInput: JSON.stringify(args),\n },\n options: [\n { optionId: 'approve', name: 'Approve Plan', kind: 'allow_once' },\n { optionId: 'reject', name: 'Reject Plan', kind: 'reject_once' },\n ],\n };\n\n try {\n const resp = await connection.requestPermission(req);\n const action =\n resp.outcome.outcome === 'selected' && resp.outcome.optionId === 'approve' ? 'approved' : 'rejected';\n void session.respondToToolSuspension({ toolCallId, resumeData: { action } });\n } catch {\n void session.respondToToolSuspension({ toolCallId, resumeData: { action: 'rejected' } });\n }\n return;\n }\n\n // For ask_user and other suspensions, auto-resolve\n void session.respondToToolSuspension({\n toolCallId,\n resumeData: 'Proceed with your best judgment. Do not ask further questions.',\n });\n}\n\nfunction accumulateUsage(target: TokenUsage, usage: TokenUsage): void {\n target.promptTokens += usage.promptTokens;\n target.completionTokens += usage.completionTokens;\n target.totalTokens += usage.totalTokens;\n if (usage.reasoningTokens) target.reasoningTokens = (target.reasoningTokens ?? 0) + usage.reasoningTokens;\n if (usage.cachedInputTokens) target.cachedInputTokens = (target.cachedInputTokens ?? 0) + usage.cachedInputTokens;\n if (usage.cacheCreationInputTokens) {\n target.cacheCreationInputTokens = (target.cacheCreationInputTokens ?? 0) + usage.cacheCreationInputTokens;\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/acp/index.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAsB,OAAO,CAAC,OAAO,CAAC,EAAE;IAAE,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8DzF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { createMastraCode } from "../index.js";
|
|
2
|
+
import { releaseAllThreadLocks } from "../utils/thread-lock.js";
|
|
3
|
+
import { setAutoApprove } from "./event-mapper.js";
|
|
4
|
+
import { runAcpServer } from "./server.js";
|
|
5
|
+
async function acpMain(options) {
|
|
6
|
+
if (options?.dangerousAutoApprove) {
|
|
7
|
+
setAutoApprove(true);
|
|
8
|
+
}
|
|
9
|
+
const originalConsoleLog = console.log;
|
|
10
|
+
console.log = (...args) => {
|
|
11
|
+
process.stderr.write(args.map(String).join(" ") + "\n");
|
|
12
|
+
};
|
|
13
|
+
let result;
|
|
14
|
+
try {
|
|
15
|
+
result = await createMastraCode({
|
|
16
|
+
unixSocketPubSub: false,
|
|
17
|
+
disableMcp: false,
|
|
18
|
+
disableHooks: false
|
|
19
|
+
});
|
|
20
|
+
const { controller, mcpManager, signalsPubSub } = result;
|
|
21
|
+
const modes = [
|
|
22
|
+
{ id: "build", name: "Build" },
|
|
23
|
+
{ id: "plan", name: "Plan" },
|
|
24
|
+
{ id: "fast", name: "Fast" }
|
|
25
|
+
];
|
|
26
|
+
const cleanup = async () => {
|
|
27
|
+
releaseAllThreadLocks();
|
|
28
|
+
const closeSignalsPubSub = signalsPubSub?.close;
|
|
29
|
+
await Promise.allSettled([
|
|
30
|
+
mcpManager?.disconnect(),
|
|
31
|
+
controller?.getMastra()?.stopWorkers(),
|
|
32
|
+
controller?.stopIntervals(),
|
|
33
|
+
closeSignalsPubSub?.()
|
|
34
|
+
]);
|
|
35
|
+
console.log = originalConsoleLog;
|
|
36
|
+
};
|
|
37
|
+
const handleSignal = async () => {
|
|
38
|
+
await cleanup();
|
|
39
|
+
process.exit(0);
|
|
40
|
+
};
|
|
41
|
+
process.on("SIGINT", handleSignal);
|
|
42
|
+
process.on("SIGTERM", handleSignal);
|
|
43
|
+
await runAcpServer(controller, modes, cleanup);
|
|
44
|
+
} catch (error) {
|
|
45
|
+
process.stderr.write(`[acp] Fatal error: ${error}
|
|
46
|
+
`);
|
|
47
|
+
console.log = originalConsoleLog;
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export {
|
|
52
|
+
acpMain
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/acp/index.ts"],"sourcesContent":["import type { AgentControllerMode } from '@mastra/core/agent-controller';\n\nimport { createMastraCode } from '../index.js';\nimport { releaseAllThreadLocks } from '../utils/thread-lock.js';\nimport { setAutoApprove } from './event-mapper.js';\nimport { runAcpServer } from './server.js';\n\n/**\n * Entry point for ACP server mode.\n * Initializes mastracode and runs the ACP protocol over stdio.\n */\nexport async function acpMain(options?: { dangerousAutoApprove?: boolean }): Promise<void> {\n if (options?.dangerousAutoApprove) {\n setAutoApprove(true);\n }\n // Redirect console.log to stderr to avoid polluting the JSON-RPC stream on stdout.\n // eslint-disable-next-line no-console\n const originalConsoleLog = console.log;\n // eslint-disable-next-line no-console\n console.log = (...args: unknown[]) => {\n process.stderr.write(args.map(String).join(' ') + '\\n');\n };\n\n let result: Awaited<ReturnType<typeof createMastraCode>> | undefined;\n\n try {\n result = await createMastraCode({\n unixSocketPubSub: false,\n disableMcp: false,\n disableHooks: false,\n });\n\n const { controller, mcpManager, signalsPubSub } = result;\n\n // Default modes (same as createMastraCode defaults)\n const modes: AgentControllerMode[] = [\n { id: 'build', name: 'Build' },\n { id: 'plan', name: 'Plan' },\n { id: 'fast', name: 'Fast' },\n ];\n\n // Cleanup function (mirrors main.ts asyncCleanup)\n const cleanup = async () => {\n releaseAllThreadLocks();\n const closeSignalsPubSub = (signalsPubSub as { close?: () => Promise<void> | void } | undefined)?.close;\n await Promise.allSettled([\n mcpManager?.disconnect(),\n controller?.getMastra()?.stopWorkers(),\n controller?.stopIntervals(),\n closeSignalsPubSub?.(),\n ]);\n\n // Restore console.log\n // eslint-disable-next-line no-console\n console.log = originalConsoleLog;\n };\n\n // Handle signals\n const handleSignal = async () => {\n await cleanup();\n process.exit(0);\n };\n\n process.on('SIGINT', handleSignal);\n process.on('SIGTERM', handleSignal);\n\n await runAcpServer(controller, modes, cleanup);\n } catch (error) {\n process.stderr.write(`[acp] Fatal error: ${error}\\n`);\n // eslint-disable-next-line no-console\n console.log = originalConsoleLog;\n process.exit(1);\n }\n}\n"],"mappings":"AAEA,SAAS,wBAAwB;AACjC,SAAS,6BAA6B;AACtC,SAAS,sBAAsB;AAC/B,SAAS,oBAAoB;AAM7B,eAAsB,QAAQ,SAA6D;AACzF,MAAI,SAAS,sBAAsB;AACjC,mBAAe,IAAI;AAAA,EACrB;AAGA,QAAM,qBAAqB,QAAQ;AAEnC,UAAQ,MAAM,IAAI,SAAoB;AACpC,YAAQ,OAAO,MAAM,KAAK,IAAI,MAAM,EAAE,KAAK,GAAG,IAAI,IAAI;AAAA,EACxD;AAEA,MAAI;AAEJ,MAAI;AACF,aAAS,MAAM,iBAAiB;AAAA,MAC9B,kBAAkB;AAAA,MAClB,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB,CAAC;AAED,UAAM,EAAE,YAAY,YAAY,cAAc,IAAI;AAGlD,UAAM,QAA+B;AAAA,MACnC,EAAE,IAAI,SAAS,MAAM,QAAQ;AAAA,MAC7B,EAAE,IAAI,QAAQ,MAAM,OAAO;AAAA,MAC3B,EAAE,IAAI,QAAQ,MAAM,OAAO;AAAA,IAC7B;AAGA,UAAM,UAAU,YAAY;AAC1B,4BAAsB;AACtB,YAAM,qBAAsB,eAAsE;AAClG,YAAM,QAAQ,WAAW;AAAA,QACvB,YAAY,WAAW;AAAA,QACvB,YAAY,UAAU,GAAG,YAAY;AAAA,QACrC,YAAY,cAAc;AAAA,QAC1B,qBAAqB;AAAA,MACvB,CAAC;AAID,cAAQ,MAAM;AAAA,IAChB;AAGA,UAAM,eAAe,YAAY;AAC/B,YAAM,QAAQ;AACd,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,YAAQ,GAAG,UAAU,YAAY;AACjC,YAAQ,GAAG,WAAW,YAAY;AAElC,UAAM,aAAa,YAAY,OAAO,OAAO;AAAA,EAC/C,SAAS,OAAO;AACd,YAAQ,OAAO,MAAM,sBAAsB,KAAK;AAAA,CAAI;AAEpD,YAAQ,MAAM;AACd,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;","names":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AgentController, AgentControllerMode } from '@mastra/core/agent-controller';
|
|
2
|
+
/**
|
|
3
|
+
* Run the ACP server over stdio.
|
|
4
|
+
* This sets up the JSON-RPC stream and keeps the process alive until the client disconnects.
|
|
5
|
+
*/
|
|
6
|
+
export declare function runAcpServer(controller: AgentController, modes: AgentControllerMode[], cleanup?: () => Promise<void>): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=server.d.ts.map
|