@mastra/code-sdk 0.0.0-livekit-beta-v3-20260709031728
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +41 -0
- package/LICENSE.md +30 -0
- package/README.md +50 -0
- package/dist/acp/agent.d.ts +35 -0
- package/dist/acp/agent.d.ts.map +1 -0
- package/dist/acp/agent.js +173 -0
- package/dist/acp/agent.js.map +1 -0
- package/dist/acp/event-mapper.d.ts +22 -0
- package/dist/acp/event-mapper.d.ts.map +1 -0
- package/dist/acp/event-mapper.js +166 -0
- package/dist/acp/event-mapper.js.map +1 -0
- package/dist/acp/index.d.ts +8 -0
- package/dist/acp/index.d.ts.map +1 -0
- package/dist/acp/index.js +54 -0
- package/dist/acp/index.js.map +1 -0
- package/dist/acp/server.d.ts +7 -0
- package/dist/acp/server.d.ts.map +1 -0
- package/dist/acp/server.js +34 -0
- package/dist/acp/server.js.map +1 -0
- package/dist/acp.d.ts +2 -0
- package/dist/acp.d.ts.map +1 -0
- package/dist/acp.js +5 -0
- package/dist/acp.js.map +1 -0
- package/dist/agents/instructions.d.ts +6 -0
- package/dist/agents/instructions.d.ts.map +1 -0
- package/dist/agents/instructions.js +41 -0
- package/dist/agents/instructions.js.map +1 -0
- package/dist/agents/mastracode-gateway.d.ts +65 -0
- package/dist/agents/mastracode-gateway.d.ts.map +1 -0
- package/dist/agents/mastracode-gateway.js +442 -0
- package/dist/agents/mastracode-gateway.js.map +1 -0
- package/dist/agents/memory.d.ts +13 -0
- package/dist/agents/memory.d.ts.map +1 -0
- package/dist/agents/memory.js +107 -0
- package/dist/agents/memory.js.map +1 -0
- package/dist/agents/model.d.ts +55 -0
- package/dist/agents/model.d.ts.map +1 -0
- package/dist/agents/model.js +115 -0
- package/dist/agents/model.js.map +1 -0
- package/dist/agents/modes/build.d.ts +10 -0
- package/dist/agents/modes/build.d.ts.map +1 -0
- package/dist/agents/modes/build.js +45 -0
- package/dist/agents/modes/build.js.map +1 -0
- package/dist/agents/modes/explore.d.ts +10 -0
- package/dist/agents/modes/explore.d.ts.map +1 -0
- package/dist/agents/modes/explore.js +38 -0
- package/dist/agents/modes/explore.js.map +1 -0
- package/dist/agents/modes/plan.d.ts +6 -0
- package/dist/agents/modes/plan.d.ts.map +1 -0
- package/dist/agents/modes/plan.js +38 -0
- package/dist/agents/modes/plan.js.map +1 -0
- package/dist/agents/prompts/agent-instructions.d.ts +20 -0
- package/dist/agents/prompts/agent-instructions.d.ts.map +1 -0
- package/dist/agents/prompts/agent-instructions.js +82 -0
- package/dist/agents/prompts/agent-instructions.js.map +1 -0
- package/dist/agents/prompts/build.d.ts +12 -0
- package/dist/agents/prompts/build.d.ts.map +1 -0
- package/dist/agents/prompts/build.js +73 -0
- package/dist/agents/prompts/build.js.map +1 -0
- package/dist/agents/prompts/fast.d.ts +5 -0
- package/dist/agents/prompts/fast.d.ts.map +1 -0
- package/dist/agents/prompts/fast.js +22 -0
- package/dist/agents/prompts/fast.js.map +1 -0
- package/dist/agents/prompts/index.d.ts +19 -0
- package/dist/agents/prompts/index.d.ts.map +1 -0
- package/dist/agents/prompts/index.js +57 -0
- package/dist/agents/prompts/index.js.map +1 -0
- package/dist/agents/prompts/model.d.ts +5 -0
- package/dist/agents/prompts/model.d.ts.map +1 -0
- package/dist/agents/prompts/model.js +22 -0
- package/dist/agents/prompts/model.js.map +1 -0
- package/dist/agents/prompts/plan.d.ts +6 -0
- package/dist/agents/prompts/plan.d.ts.map +1 -0
- package/dist/agents/prompts/plan.js +107 -0
- package/dist/agents/prompts/plan.js.map +1 -0
- package/dist/agents/prompts/tool-guidance.d.ts +13 -0
- package/dist/agents/prompts/tool-guidance.d.ts.map +1 -0
- package/dist/agents/prompts/tool-guidance.js +181 -0
- package/dist/agents/prompts/tool-guidance.js.map +1 -0
- package/dist/agents/sandbox-filesystem.d.ts +89 -0
- package/dist/agents/sandbox-filesystem.d.ts.map +1 -0
- package/dist/agents/sandbox-filesystem.js +268 -0
- package/dist/agents/sandbox-filesystem.js.map +1 -0
- package/dist/agents/sandbox-reattach.d.ts +19 -0
- package/dist/agents/sandbox-reattach.d.ts.map +1 -0
- package/dist/agents/sandbox-reattach.js +17 -0
- package/dist/agents/sandbox-reattach.js.map +1 -0
- package/dist/agents/thread-caveman-state.d.ts +17 -0
- package/dist/agents/thread-caveman-state.d.ts.map +1 -0
- package/dist/agents/thread-caveman-state.js +96 -0
- package/dist/agents/thread-caveman-state.js.map +1 -0
- package/dist/agents/tool-availability.d.ts +10 -0
- package/dist/agents/tool-availability.d.ts.map +1 -0
- package/dist/agents/tool-availability.js +105 -0
- package/dist/agents/tool-availability.js.map +1 -0
- package/dist/agents/tools.d.ts +18 -0
- package/dist/agents/tools.d.ts.map +1 -0
- package/dist/agents/tools.js +126 -0
- package/dist/agents/tools.js.map +1 -0
- package/dist/agents/workspace.d.ts +22 -0
- package/dist/agents/workspace.d.ts.map +1 -0
- package/dist/agents/workspace.js +194 -0
- package/dist/agents/workspace.js.map +1 -0
- package/dist/analytics.d.ts +18 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/analytics.js +152 -0
- package/dist/analytics.js.map +1 -0
- package/dist/auth/index.d.ts +9 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +11 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/pkce.d.ts +13 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +21 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/auth/providers/anthropic.d.ts +17 -0
- package/dist/auth/providers/anthropic.d.ts.map +1 -0
- package/dist/auth/providers/anthropic.js +94 -0
- package/dist/auth/providers/anthropic.js.map +1 -0
- package/dist/auth/providers/github-copilot.d.ts +100 -0
- package/dist/auth/providers/github-copilot.d.ts.map +1 -0
- package/dist/auth/providers/github-copilot.js +302 -0
- package/dist/auth/providers/github-copilot.js.map +1 -0
- package/dist/auth/providers/openai-codex.d.ts +95 -0
- package/dist/auth/providers/openai-codex.d.ts.map +1 -0
- package/dist/auth/providers/openai-codex.js +527 -0
- package/dist/auth/providers/openai-codex.js.map +1 -0
- package/dist/auth/storage.d.ts +91 -0
- package/dist/auth/storage.d.ts.map +1 -0
- package/dist/auth/storage.js +187 -0
- package/dist/auth/storage.js.map +1 -0
- package/dist/auth/types.d.ts +68 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +1 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/clipboard/index.d.ts +26 -0
- package/dist/clipboard/index.d.ts.map +1 -0
- package/dist/clipboard/index.js +192 -0
- package/dist/clipboard/index.js.map +1 -0
- package/dist/constants.d.ts +10 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +23 -0
- package/dist/constants.js.map +1 -0
- package/dist/error-classification.d.ts +10 -0
- package/dist/error-classification.d.ts.map +1 -0
- package/dist/error-classification.js +14 -0
- package/dist/error-classification.js.map +1 -0
- package/dist/evals/context-builder.d.ts +41 -0
- package/dist/evals/context-builder.d.ts.map +1 -0
- package/dist/evals/context-builder.js +120 -0
- package/dist/evals/context-builder.js.map +1 -0
- package/dist/evals/index.d.ts +4 -0
- package/dist/evals/index.d.ts.map +1 -0
- package/dist/evals/index.js +8 -0
- package/dist/evals/index.js.map +1 -0
- package/dist/evals/scorers/classify-command.d.ts +31 -0
- package/dist/evals/scorers/classify-command.d.ts.map +1 -0
- package/dist/evals/scorers/classify-command.js +52 -0
- package/dist/evals/scorers/classify-command.js.map +1 -0
- package/dist/evals/scorers/efficiency.d.ts +44 -0
- package/dist/evals/scorers/efficiency.d.ts.map +1 -0
- package/dist/evals/scorers/efficiency.js +201 -0
- package/dist/evals/scorers/efficiency.js.map +1 -0
- package/dist/evals/scorers/extract-tools.d.ts +25 -0
- package/dist/evals/scorers/extract-tools.d.ts.map +1 -0
- package/dist/evals/scorers/extract-tools.js +56 -0
- package/dist/evals/scorers/extract-tools.js.map +1 -0
- package/dist/evals/scorers/index.d.ts +3 -0
- package/dist/evals/scorers/index.d.ts.map +1 -0
- package/dist/evals/scorers/index.js +7 -0
- package/dist/evals/scorers/index.js.map +1 -0
- package/dist/evals/scorers/outcome.d.ts +49 -0
- package/dist/evals/scorers/outcome.d.ts.map +1 -0
- package/dist/evals/scorers/outcome.js +238 -0
- package/dist/evals/scorers/outcome.js.map +1 -0
- package/dist/headless/cli.d.ts +42 -0
- package/dist/headless/cli.d.ts.map +1 -0
- package/dist/headless/cli.js +196 -0
- package/dist/headless/cli.js.map +1 -0
- package/dist/headless/flags.d.ts +33 -0
- package/dist/headless/flags.d.ts.map +1 -0
- package/dist/headless/flags.js +188 -0
- package/dist/headless/flags.js.map +1 -0
- package/dist/headless/format.d.ts +38 -0
- package/dist/headless/format.d.ts.map +1 -0
- package/dist/headless/format.js +85 -0
- package/dist/headless/format.js.map +1 -0
- package/dist/headless/index.d.ts +25 -0
- package/dist/headless/index.d.ts.map +1 -0
- package/dist/headless/index.js +32 -0
- package/dist/headless/index.js.map +1 -0
- package/dist/headless/policy.d.ts +17 -0
- package/dist/headless/policy.d.ts.map +1 -0
- package/dist/headless/policy.js +38 -0
- package/dist/headless/policy.js.map +1 -0
- package/dist/headless/run-mc.d.ts +7 -0
- package/dist/headless/run-mc.d.ts.map +1 -0
- package/dist/headless/run-mc.js +296 -0
- package/dist/headless/run-mc.js.map +1 -0
- package/dist/headless/types.d.ts +134 -0
- package/dist/headless/types.d.ts.map +1 -0
- package/dist/headless/types.js +9 -0
- package/dist/headless/types.js.map +1 -0
- package/dist/hooks/config.d.ts +11 -0
- package/dist/hooks/config.d.ts.map +1 -0
- package/dist/hooks/config.js +78 -0
- package/dist/hooks/config.js.map +1 -0
- package/dist/hooks/executor.d.ts +13 -0
- package/dist/hooks/executor.d.ts.map +1 -0
- package/dist/hooks/executor.js +125 -0
- package/dist/hooks/executor.js.map +1 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +16 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/manager.d.ts +47 -0
- package/dist/hooks/manager.d.ts.map +1 -0
- package/dist/hooks/manager.js +284 -0
- package/dist/hooks/manager.js.map +1 -0
- package/dist/hooks/types.d.ts +152 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +7 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +241 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +712 -0
- package/dist/index.js.map +1 -0
- package/dist/ipc/ipc-reporter.d.ts +14 -0
- package/dist/ipc/ipc-reporter.d.ts.map +1 -0
- package/dist/ipc/ipc-reporter.js +24 -0
- package/dist/ipc/ipc-reporter.js.map +1 -0
- package/dist/lsp/client.d.ts +56 -0
- package/dist/lsp/client.d.ts.map +1 -0
- package/dist/lsp/client.js +309 -0
- package/dist/lsp/client.js.map +1 -0
- package/dist/lsp/index.d.ts +4 -0
- package/dist/lsp/index.d.ts.map +1 -0
- package/dist/lsp/index.js +9 -0
- package/dist/lsp/index.js.map +1 -0
- package/dist/lsp/language.d.ts +9 -0
- package/dist/lsp/language.d.ts.map +1 -0
- package/dist/lsp/language.js +48 -0
- package/dist/lsp/language.js.map +1 -0
- package/dist/lsp/manager.d.ts +34 -0
- package/dist/lsp/manager.d.ts.map +1 -0
- package/dist/lsp/manager.js +97 -0
- package/dist/lsp/manager.js.map +1 -0
- package/dist/lsp/server.d.ts +27 -0
- package/dist/lsp/server.d.ts.map +1 -0
- package/dist/lsp/server.js +128 -0
- package/dist/lsp/server.js.map +1 -0
- package/dist/lsp/workspace.d.ts +9 -0
- package/dist/lsp/workspace.d.ts.map +1 -0
- package/dist/lsp/workspace.js +52 -0
- package/dist/lsp/workspace.js.map +1 -0
- package/dist/mcp/config.d.ts +34 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +205 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +10 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +49 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +374 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/types.d.ts +85 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +1 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/onboarding/custom-packs.d.ts +7 -0
- package/dist/onboarding/custom-packs.d.ts.map +1 -0
- package/dist/onboarding/custom-packs.js +20 -0
- package/dist/onboarding/custom-packs.js.map +1 -0
- package/dist/onboarding/custom-providers.d.ts +4 -0
- package/dist/onboarding/custom-providers.d.ts.map +1 -0
- package/dist/onboarding/custom-providers.js +28 -0
- package/dist/onboarding/custom-providers.js.map +1 -0
- package/dist/onboarding/index.d.ts +5 -0
- package/dist/onboarding/index.d.ts.map +1 -0
- package/dist/onboarding/index.js +21 -0
- package/dist/onboarding/index.js.map +1 -0
- package/dist/onboarding/om-settings.d.ts +20 -0
- package/dist/onboarding/om-settings.d.ts.map +1 -0
- package/dist/onboarding/om-settings.js +26 -0
- package/dist/onboarding/om-settings.js.map +1 -0
- package/dist/onboarding/packs.d.ts +48 -0
- package/dist/onboarding/packs.d.ts.map +1 -0
- package/dist/onboarding/packs.js +111 -0
- package/dist/onboarding/packs.js.map +1 -0
- package/dist/onboarding/settings.d.ts +323 -0
- package/dist/onboarding/settings.d.ts.map +1 -0
- package/dist/onboarding/settings.js +594 -0
- package/dist/onboarding/settings.js.map +1 -0
- package/dist/permissions.d.ts +55 -0
- package/dist/permissions.d.ts.map +1 -0
- package/dist/permissions.js +119 -0
- package/dist/permissions.js.map +1 -0
- package/dist/plugin.d.ts +81 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +30 -0
- package/dist/plugin.js.map +1 -0
- package/dist/plugins/dependencies.d.ts +9 -0
- package/dist/plugins/dependencies.d.ts.map +1 -0
- package/dist/plugins/dependencies.js +141 -0
- package/dist/plugins/dependencies.js.map +1 -0
- package/dist/plugins/install.d.ts +21 -0
- package/dist/plugins/install.d.ts.map +1 -0
- package/dist/plugins/install.js +200 -0
- package/dist/plugins/install.js.map +1 -0
- package/dist/plugins/loader.d.ts +15 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +221 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +60 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +378 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/manifest.d.ts +14 -0
- package/dist/plugins/manifest.d.ts.map +1 -0
- package/dist/plugins/manifest.js +75 -0
- package/dist/plugins/manifest.js.map +1 -0
- package/dist/plugins/package-link.d.ts +3 -0
- package/dist/plugins/package-link.d.ts.map +1 -0
- package/dist/plugins/package-link.js +77 -0
- package/dist/plugins/package-link.js.map +1 -0
- package/dist/plugins/paths.d.ts +10 -0
- package/dist/plugins/paths.d.ts.map +1 -0
- package/dist/plugins/paths.js +26 -0
- package/dist/plugins/paths.js.map +1 -0
- package/dist/plugins/registry.d.ts +8 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +96 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/scaffold.d.ts +10 -0
- package/dist/plugins/scaffold.d.ts.map +1 -0
- package/dist/plugins/scaffold.js +152 -0
- package/dist/plugins/scaffold.js.map +1 -0
- package/dist/plugins/types.d.ts +45 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +1 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/processors/plan-rejection-abort.d.ts +12 -0
- package/dist/processors/plan-rejection-abort.d.ts.map +1 -0
- package/dist/processors/plan-rejection-abort.js +53 -0
- package/dist/processors/plan-rejection-abort.js.map +1 -0
- package/dist/providers/amazon-bedrock-gateway.d.ts +40 -0
- package/dist/providers/amazon-bedrock-gateway.d.ts.map +1 -0
- package/dist/providers/amazon-bedrock-gateway.js +79 -0
- package/dist/providers/amazon-bedrock-gateway.js.map +1 -0
- package/dist/providers/amazon-bedrock.d.ts +28 -0
- package/dist/providers/amazon-bedrock.d.ts.map +1 -0
- package/dist/providers/amazon-bedrock.js +62 -0
- package/dist/providers/amazon-bedrock.js.map +1 -0
- package/dist/providers/claude-max.d.ts +50 -0
- package/dist/providers/claude-max.d.ts.map +1 -0
- package/dist/providers/claude-max.js +151 -0
- package/dist/providers/claude-max.js.map +1 -0
- package/dist/providers/github-copilot.d.ts +58 -0
- package/dist/providers/github-copilot.d.ts.map +1 -0
- package/dist/providers/github-copilot.js +263 -0
- package/dist/providers/github-copilot.js.map +1 -0
- package/dist/providers/openai-codex.d.ts +70 -0
- package/dist/providers/openai-codex.d.ts.map +1 -0
- package/dist/providers/openai-codex.js +291 -0
- package/dist/providers/openai-codex.js.map +1 -0
- package/dist/schema.d.ts +167 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +92 -0
- package/dist/schema.js.map +1 -0
- package/dist/theme-palette.d.ts +17 -0
- package/dist/theme-palette.d.ts.map +1 -0
- package/dist/theme-palette.js +17 -0
- package/dist/theme-palette.js.map +1 -0
- package/dist/tool-names.d.ts +73 -0
- package/dist/tool-names.d.ts.map +1 -0
- package/dist/tool-names.js +43 -0
- package/dist/tool-names.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +9 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/request-sandbox-access.d.ts +6 -0
- package/dist/tools/request-sandbox-access.d.ts.map +1 -0
- package/dist/tools/request-sandbox-access.js +88 -0
- package/dist/tools/request-sandbox-access.js.map +1 -0
- package/dist/tools/utils.d.ts +20 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +22 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools/web-search.d.ts +35 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +65 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/utils/binaries.d.ts +7 -0
- package/dist/utils/binaries.d.ts.map +1 -0
- package/dist/utils/binaries.js +74 -0
- package/dist/utils/binaries.js.map +1 -0
- package/dist/utils/debug-log.d.ts +12 -0
- package/dist/utils/debug-log.d.ts.map +1 -0
- package/dist/utils/debug-log.js +55 -0
- package/dist/utils/debug-log.js.map +1 -0
- package/dist/utils/errors.d.ts +36 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +207 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/gateway-sync.d.ts +26 -0
- package/dist/utils/gateway-sync.d.ts.map +1 -0
- package/dist/utils/gateway-sync.js +49 -0
- package/dist/utils/gateway-sync.js.map +1 -0
- package/dist/utils/plan-diff.d.ts +25 -0
- package/dist/utils/plan-diff.d.ts.map +1 -0
- package/dist/utils/plan-diff.js +43 -0
- package/dist/utils/plan-diff.js.map +1 -0
- package/dist/utils/plans.d.ts +56 -0
- package/dist/utils/plans.d.ts.map +1 -0
- package/dist/utils/plans.js +99 -0
- package/dist/utils/plans.js.map +1 -0
- package/dist/utils/project.d.ts +161 -0
- package/dist/utils/project.d.ts.map +1 -0
- package/dist/utils/project.js +302 -0
- package/dist/utils/project.js.map +1 -0
- package/dist/utils/signals-pubsub.d.ts +41 -0
- package/dist/utils/signals-pubsub.d.ts.map +1 -0
- package/dist/utils/signals-pubsub.js +104 -0
- package/dist/utils/signals-pubsub.js.map +1 -0
- package/dist/utils/slash-command-loader.d.ts +48 -0
- package/dist/utils/slash-command-loader.d.ts.map +1 -0
- package/dist/utils/slash-command-loader.js +155 -0
- package/dist/utils/slash-command-loader.js.map +1 -0
- package/dist/utils/slash-command-processor.d.ts +14 -0
- package/dist/utils/slash-command-processor.d.ts.map +1 -0
- package/dist/utils/slash-command-processor.js +96 -0
- package/dist/utils/slash-command-processor.js.map +1 -0
- package/dist/utils/stdin-pipe.d.ts +33 -0
- package/dist/utils/stdin-pipe.d.ts.map +1 -0
- package/dist/utils/stdin-pipe.js +72 -0
- package/dist/utils/stdin-pipe.js.map +1 -0
- package/dist/utils/storage-factory.d.ts +50 -0
- package/dist/utils/storage-factory.d.ts.map +1 -0
- package/dist/utils/storage-factory.js +98 -0
- package/dist/utils/storage-factory.js.map +1 -0
- package/dist/utils/thread-lock.d.ts +26 -0
- package/dist/utils/thread-lock.d.ts.map +1 -0
- package/dist/utils/thread-lock.js +108 -0
- package/dist/utils/thread-lock.js.map +1 -0
- package/dist/utils/token-estimator.d.ts +3 -0
- package/dist/utils/token-estimator.d.ts.map +1 -0
- package/dist/utils/token-estimator.js +21 -0
- package/dist/utils/token-estimator.js.map +1 -0
- package/dist/utils/update-check.d.ts +52 -0
- package/dist/utils/update-check.d.ts.map +1 -0
- package/dist/utils/update-check.js +177 -0
- package/dist/utils/update-check.js.map +1 -0
- package/dist/voice/stt-registry.d.ts +64 -0
- package/dist/voice/stt-registry.d.ts.map +1 -0
- package/dist/voice/stt-registry.js +126 -0
- package/dist/voice/stt-registry.js.map +1 -0
- package/package.json +92 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared tool invocation extraction from MastraDBMessages.
|
|
3
|
+
*
|
|
4
|
+
* Used by both the Outcome and Efficiency scorers to extract completed
|
|
5
|
+
* tool calls from message content, handling both the `parts` array (primary)
|
|
6
|
+
* and the legacy `toolInvocations` array.
|
|
7
|
+
*/
|
|
8
|
+
import type { MastraDBMessage } from '@mastra/core/agent';
|
|
9
|
+
export type ExtractedToolCall = {
|
|
10
|
+
toolCallId?: string;
|
|
11
|
+
toolName: string;
|
|
12
|
+
args: Record<string, unknown>;
|
|
13
|
+
result: unknown;
|
|
14
|
+
isError: boolean;
|
|
15
|
+
index: number;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Extract completed tool invocations from MastraDBMessages.
|
|
19
|
+
*
|
|
20
|
+
* Handles both:
|
|
21
|
+
* - `content.parts` (primary format, MastraToolInvocationPart)
|
|
22
|
+
* - `content.toolInvocations` (legacy format, AI SDK ToolInvocation[])
|
|
23
|
+
*/
|
|
24
|
+
export declare function extractToolCalls(messages: MastraDBMessage[]): ExtractedToolCall[];
|
|
25
|
+
//# sourceMappingURL=extract-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-tools.d.ts","sourceRoot":"","sources":["../../../src/evals/scorers/extract-tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAmBF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,iBAAiB,EAAE,CAoDjF"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
function isToolInvocationPart(part) {
|
|
2
|
+
return "type" in part && part.type === "tool-invocation" && "toolInvocation" in part;
|
|
3
|
+
}
|
|
4
|
+
function isCompleted(inv) {
|
|
5
|
+
return inv.state === "result" || inv.state === "error" || inv.state === "output-error" || inv.state === "output-denied";
|
|
6
|
+
}
|
|
7
|
+
function isErrorState(inv) {
|
|
8
|
+
return inv.state === "error" || inv.state === "output-error" || inv.state === "output-denied";
|
|
9
|
+
}
|
|
10
|
+
function extractToolCalls(messages) {
|
|
11
|
+
const results = [];
|
|
12
|
+
const seenToolCallIds = /* @__PURE__ */ new Set();
|
|
13
|
+
let index = 0;
|
|
14
|
+
for (const msg of messages) {
|
|
15
|
+
if (!msg.content) continue;
|
|
16
|
+
for (const part of msg.content.parts ?? []) {
|
|
17
|
+
if (isToolInvocationPart(part)) {
|
|
18
|
+
const inv = part.toolInvocation;
|
|
19
|
+
if (isCompleted(inv)) {
|
|
20
|
+
const toolCallId = "toolCallId" in inv ? inv.toolCallId : void 0;
|
|
21
|
+
if (toolCallId) seenToolCallIds.add(toolCallId);
|
|
22
|
+
results.push({
|
|
23
|
+
toolCallId,
|
|
24
|
+
toolName: inv.toolName ?? "",
|
|
25
|
+
args: inv.args ?? {},
|
|
26
|
+
result: inv.result,
|
|
27
|
+
isError: isErrorState(inv),
|
|
28
|
+
index: index++
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (msg.content.toolInvocations) {
|
|
34
|
+
for (const inv of msg.content.toolInvocations) {
|
|
35
|
+
if (inv.state === "result") {
|
|
36
|
+
const toolCallId = "toolCallId" in inv ? inv.toolCallId : void 0;
|
|
37
|
+
if (toolCallId && seenToolCallIds.has(toolCallId)) continue;
|
|
38
|
+
if (toolCallId) seenToolCallIds.add(toolCallId);
|
|
39
|
+
results.push({
|
|
40
|
+
toolCallId,
|
|
41
|
+
toolName: inv.toolName ?? "",
|
|
42
|
+
args: inv.args ?? {},
|
|
43
|
+
result: inv.result,
|
|
44
|
+
isError: false,
|
|
45
|
+
index: index++
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return results;
|
|
52
|
+
}
|
|
53
|
+
export {
|
|
54
|
+
extractToolCalls
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=extract-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/evals/scorers/extract-tools.ts"],"sourcesContent":["/**\n * Shared tool invocation extraction from MastraDBMessages.\n *\n * Used by both the Outcome and Efficiency scorers to extract completed\n * tool calls from message content, handling both the `parts` array (primary)\n * and the legacy `toolInvocations` array.\n */\n\nimport type { MastraDBMessage } from '@mastra/core/agent';\nimport type { MastraMessagePart, MastraToolInvocation } from '@mastra/core/agent/message-list';\n\nexport type ExtractedToolCall = {\n toolCallId?: string;\n toolName: string;\n args: Record<string, unknown>;\n result: unknown;\n isError: boolean;\n index: number;\n};\n\nfunction isToolInvocationPart(part: MastraMessagePart): part is MastraMessagePart & {\n type: 'tool-invocation';\n toolInvocation: MastraToolInvocation;\n} {\n return 'type' in part && part.type === 'tool-invocation' && 'toolInvocation' in part;\n}\n\nfunction isCompleted(inv: { state: string }): boolean {\n return (\n inv.state === 'result' || inv.state === 'error' || inv.state === 'output-error' || inv.state === 'output-denied'\n );\n}\n\nfunction isErrorState(inv: { state: string }): boolean {\n return inv.state === 'error' || inv.state === 'output-error' || inv.state === 'output-denied';\n}\n\n/**\n * Extract completed tool invocations from MastraDBMessages.\n *\n * Handles both:\n * - `content.parts` (primary format, MastraToolInvocationPart)\n * - `content.toolInvocations` (legacy format, AI SDK ToolInvocation[])\n */\nexport function extractToolCalls(messages: MastraDBMessage[]): ExtractedToolCall[] {\n const results: ExtractedToolCall[] = [];\n const seenToolCallIds = new Set<string>();\n let index = 0;\n\n for (const msg of messages) {\n if (!msg.content) continue;\n\n // Primary format: parts array with tool-invocation parts\n for (const part of msg.content.parts ?? []) {\n if (isToolInvocationPart(part)) {\n const inv = part.toolInvocation;\n if (isCompleted(inv)) {\n const toolCallId = 'toolCallId' in inv ? (inv.toolCallId as string) : undefined;\n if (toolCallId) seenToolCallIds.add(toolCallId);\n\n results.push({\n toolCallId,\n toolName: inv.toolName ?? '',\n args: (inv.args ?? {}) as Record<string, unknown>,\n result: inv.result,\n isError: isErrorState(inv),\n index: index++,\n });\n }\n }\n }\n\n // Legacy format: toolInvocations array (AI SDK ToolInvocation)\n // Only states here are 'partial-call' | 'call' | 'result' — no error state.\n if (msg.content.toolInvocations) {\n for (const inv of msg.content.toolInvocations) {\n if (inv.state === 'result') {\n // Skip if we already extracted this from parts (deduplicate by toolCallId)\n const toolCallId = 'toolCallId' in inv ? inv.toolCallId : undefined;\n if (toolCallId && seenToolCallIds.has(toolCallId)) continue;\n if (toolCallId) seenToolCallIds.add(toolCallId);\n\n results.push({\n toolCallId,\n toolName: inv.toolName ?? '',\n args: (inv.args ?? {}) as Record<string, unknown>,\n result: inv.result,\n isError: false,\n index: index++,\n });\n }\n }\n }\n }\n\n return results;\n}\n"],"mappings":"AAoBA,SAAS,qBAAqB,MAG5B;AACA,SAAO,UAAU,QAAQ,KAAK,SAAS,qBAAqB,oBAAoB;AAClF;AAEA,SAAS,YAAY,KAAiC;AACpD,SACE,IAAI,UAAU,YAAY,IAAI,UAAU,WAAW,IAAI,UAAU,kBAAkB,IAAI,UAAU;AAErG;AAEA,SAAS,aAAa,KAAiC;AACrD,SAAO,IAAI,UAAU,WAAW,IAAI,UAAU,kBAAkB,IAAI,UAAU;AAChF;AASO,SAAS,iBAAiB,UAAkD;AACjF,QAAM,UAA+B,CAAC;AACtC,QAAM,kBAAkB,oBAAI,IAAY;AACxC,MAAI,QAAQ;AAEZ,aAAW,OAAO,UAAU;AAC1B,QAAI,CAAC,IAAI,QAAS;AAGlB,eAAW,QAAQ,IAAI,QAAQ,SAAS,CAAC,GAAG;AAC1C,UAAI,qBAAqB,IAAI,GAAG;AAC9B,cAAM,MAAM,KAAK;AACjB,YAAI,YAAY,GAAG,GAAG;AACpB,gBAAM,aAAa,gBAAgB,MAAO,IAAI,aAAwB;AACtE,cAAI,WAAY,iBAAgB,IAAI,UAAU;AAE9C,kBAAQ,KAAK;AAAA,YACX;AAAA,YACA,UAAU,IAAI,YAAY;AAAA,YAC1B,MAAO,IAAI,QAAQ,CAAC;AAAA,YACpB,QAAQ,IAAI;AAAA,YACZ,SAAS,aAAa,GAAG;AAAA,YACzB,OAAO;AAAA,UACT,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAIA,QAAI,IAAI,QAAQ,iBAAiB;AAC/B,iBAAW,OAAO,IAAI,QAAQ,iBAAiB;AAC7C,YAAI,IAAI,UAAU,UAAU;AAE1B,gBAAM,aAAa,gBAAgB,MAAM,IAAI,aAAa;AAC1D,cAAI,cAAc,gBAAgB,IAAI,UAAU,EAAG;AACnD,cAAI,WAAY,iBAAgB,IAAI,UAAU;AAE9C,kBAAQ,KAAK;AAAA,YACX;AAAA,YACA,UAAU,IAAI,YAAY;AAAA,YAC1B,MAAO,IAAI,QAAQ,CAAC;AAAA,YACpB,QAAQ,IAAI;AAAA,YACZ,SAAS;AAAA,YACT,OAAO;AAAA,UACT,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/evals/scorers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/evals/scorers/index.ts"],"sourcesContent":["export { createOutcomeScorer } from './outcome.js';\nexport { createEfficiencyScorer } from './efficiency.js';\n"],"mappings":"AAAA,SAAS,2BAA2B;AACpC,SAAS,8BAA8B;","names":[]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MastraCode Outcome Scorer (Code-based, Agent type, always-on)
|
|
3
|
+
*
|
|
4
|
+
* Grades the objective outcome of a coding session by checking hard facts:
|
|
5
|
+
* - Did the build/typecheck pass?
|
|
6
|
+
* - Did tests pass?
|
|
7
|
+
* - What was the tool error rate?
|
|
8
|
+
* - Did the agent get stuck in a loop?
|
|
9
|
+
* - Was there a regression (build passed earlier, failed later)?
|
|
10
|
+
* - Did the agent use ask_user unnecessarily? (autonomy)
|
|
11
|
+
*
|
|
12
|
+
* This scorer is always-on (no sampling) because it's cheap — it only
|
|
13
|
+
* reads exit codes and error states from tool results already in the messages.
|
|
14
|
+
*
|
|
15
|
+
* Scoring philosophy (from Anthropic's eval guidance):
|
|
16
|
+
* "Grade outcomes, not paths" — we check what happened, not how.
|
|
17
|
+
* Partial credit: a session that passes build but fails tests scores
|
|
18
|
+
* higher than one that fails build entirely.
|
|
19
|
+
*
|
|
20
|
+
* Dimensions that don't apply to a session (e.g. build for a docs-only task)
|
|
21
|
+
* are excluded from the weighted average, so sessions aren't penalized for
|
|
22
|
+
* irrelevant criteria.
|
|
23
|
+
*/
|
|
24
|
+
type DimensionResult = {
|
|
25
|
+
score: number;
|
|
26
|
+
detail: string;
|
|
27
|
+
applicable: boolean;
|
|
28
|
+
};
|
|
29
|
+
export declare function createOutcomeScorer(): import("@mastra/core/evals").MastraScorer<"mastracode-outcome", import("@mastra/core/evals").ScorerRunInputForAgent, import("@mastra/core/evals").ScorerRunOutputForAgent, Record<"preprocessStepResult", {
|
|
30
|
+
empty: true;
|
|
31
|
+
build: DimensionResult;
|
|
32
|
+
tests: DimensionResult;
|
|
33
|
+
toolErrors: DimensionResult;
|
|
34
|
+
loops: DimensionResult;
|
|
35
|
+
regression: DimensionResult;
|
|
36
|
+
autonomy: DimensionResult;
|
|
37
|
+
totalCalls: number;
|
|
38
|
+
} | {
|
|
39
|
+
empty: false;
|
|
40
|
+
build: DimensionResult;
|
|
41
|
+
tests: DimensionResult;
|
|
42
|
+
toolErrors: DimensionResult;
|
|
43
|
+
loops: DimensionResult;
|
|
44
|
+
regression: DimensionResult;
|
|
45
|
+
autonomy: DimensionResult;
|
|
46
|
+
totalCalls: number;
|
|
47
|
+
}> & Record<"generateScoreStepResult", number> & Record<"generateReasonStepResult", string>>;
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=outcome.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../../../src/evals/scorers/outcome.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAsDH,KAAK,eAAe,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC;AAuN9E,wBAAgB,mBAAmB;;;;;;;;;;;;;;;;;;6FAkFlC"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { createScorer, filterRun } from "@mastra/core/evals";
|
|
2
|
+
import { isBuildCommand, isTestCommand, getExitCode } from "./classify-command.js";
|
|
3
|
+
import { extractToolCalls } from "./extract-tools.js";
|
|
4
|
+
const WEIGHTS = {
|
|
5
|
+
build: 0.3,
|
|
6
|
+
tests: 0.25,
|
|
7
|
+
toolErrors: 0.2,
|
|
8
|
+
loops: 0.1,
|
|
9
|
+
regression: 0.1,
|
|
10
|
+
autonomy: 0.05
|
|
11
|
+
};
|
|
12
|
+
const THRESHOLDS = {
|
|
13
|
+
/** Multiplier for tool error rate penalty. Score = max(0, 1 - rate × this). */
|
|
14
|
+
toolErrorPenaltyMultiplier: 1,
|
|
15
|
+
/** How many consecutive identical calls (or same-error repeats) before it's a "loop". */
|
|
16
|
+
loopMinRepetitions: 3,
|
|
17
|
+
/** Score penalty per detected loop. */
|
|
18
|
+
loopPenaltyPerOccurrence: 0.3,
|
|
19
|
+
/** Score deducted per ask_user call. */
|
|
20
|
+
autonomyPenaltyPerAsk: 0.25,
|
|
21
|
+
/** Score when a command ran but exit code is ambiguous. */
|
|
22
|
+
ambiguousExitScore: 0.75,
|
|
23
|
+
/** Minimum tool calls required to produce a meaningful score. */
|
|
24
|
+
minToolCalls: 1,
|
|
25
|
+
/** Tool names whose errors are expected/benign (not penalized). */
|
|
26
|
+
benignErrorTools: ["search_content", "find_files", "lsp_inspect"]
|
|
27
|
+
};
|
|
28
|
+
function isBuildArgs(args) {
|
|
29
|
+
return isBuildCommand(String(args.command ?? ""));
|
|
30
|
+
}
|
|
31
|
+
function isTestArgs(args) {
|
|
32
|
+
return isTestCommand(String(args.command ?? ""));
|
|
33
|
+
}
|
|
34
|
+
function scoreBuild(execResults) {
|
|
35
|
+
const builds = execResults.filter((r) => r.toolName === "execute_command" && isBuildArgs(r.args));
|
|
36
|
+
if (builds.length === 0) return { score: 0, detail: "No build/typecheck ran", applicable: false };
|
|
37
|
+
const last = builds[builds.length - 1];
|
|
38
|
+
if (last.isError) return { score: 0, detail: "Build/typecheck tool errored", applicable: true };
|
|
39
|
+
const exitCode = getExitCode(last.result);
|
|
40
|
+
if (exitCode === 0) return { score: 1, detail: "Build/typecheck passed", applicable: true };
|
|
41
|
+
if (exitCode !== null && exitCode !== 0)
|
|
42
|
+
return { score: 0, detail: `Build failed (exit ${exitCode})`, applicable: true };
|
|
43
|
+
const text = typeof last.result === "string" ? last.result : JSON.stringify(last.result ?? "");
|
|
44
|
+
if (/error TS\d+|Cannot find module|is not assignable/i.test(text)) {
|
|
45
|
+
return { score: 0, detail: "Build failed (TypeScript errors in output)", applicable: true };
|
|
46
|
+
}
|
|
47
|
+
return { score: THRESHOLDS.ambiguousExitScore, detail: "Build ran, outcome unclear", applicable: true };
|
|
48
|
+
}
|
|
49
|
+
function scoreTests(execResults) {
|
|
50
|
+
const tests = execResults.filter((r) => r.toolName === "execute_command" && isTestArgs(r.args));
|
|
51
|
+
if (tests.length === 0) return { score: 0, detail: "No tests ran", applicable: false };
|
|
52
|
+
const last = tests[tests.length - 1];
|
|
53
|
+
if (last.isError) return { score: 0, detail: "Test command errored", applicable: true };
|
|
54
|
+
const exitCode = getExitCode(last.result);
|
|
55
|
+
if (exitCode === 0) return { score: 1, detail: "Tests passed", applicable: true };
|
|
56
|
+
if (exitCode !== null && exitCode !== 0)
|
|
57
|
+
return { score: 0, detail: `Tests failed (exit ${exitCode})`, applicable: true };
|
|
58
|
+
const text = typeof last.result === "string" ? last.result : JSON.stringify(last.result ?? "");
|
|
59
|
+
if (/\d+ (?:tests? )?passed|✓|PASS/i.test(text) && !/\bfail(?:ed|ure)?\b|\berror\b/i.test(text)) {
|
|
60
|
+
return { score: 1, detail: "Tests passed (inferred)", applicable: true };
|
|
61
|
+
}
|
|
62
|
+
if (/\bFAIL\b|failed|✗|✘/i.test(text)) {
|
|
63
|
+
return { score: 0, detail: "Tests failed (inferred)", applicable: true };
|
|
64
|
+
}
|
|
65
|
+
return { score: THRESHOLDS.ambiguousExitScore, detail: "Tests ran, outcome unclear", applicable: true };
|
|
66
|
+
}
|
|
67
|
+
function scoreToolErrors(results) {
|
|
68
|
+
if (results.length === 0) return { score: 1, detail: "No tool calls", applicable: false };
|
|
69
|
+
const nonBenign = results.filter((r) => !THRESHOLDS.benignErrorTools.includes(r.toolName));
|
|
70
|
+
if (nonBenign.length === 0) return { score: 1, detail: "All tool calls are benign-error tools", applicable: true };
|
|
71
|
+
const errors = nonBenign.filter((r) => r.isError);
|
|
72
|
+
const rate = errors.length / nonBenign.length;
|
|
73
|
+
if (rate === 0) return { score: 1, detail: "No tool errors", applicable: true };
|
|
74
|
+
const score = Math.max(0, 1 - rate * THRESHOLDS.toolErrorPenaltyMultiplier);
|
|
75
|
+
return {
|
|
76
|
+
score,
|
|
77
|
+
detail: `${errors.length}/${nonBenign.length} tools errored (${(rate * 100).toFixed(0)}%)`,
|
|
78
|
+
applicable: true
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function scoreStuckLoops(results) {
|
|
82
|
+
if (results.length < 3) return { score: 1, detail: "Too few calls for loop detection", applicable: true };
|
|
83
|
+
const fingerprint = (r) => `${r.toolName}:${JSON.stringify(r.args)}`;
|
|
84
|
+
let maxConsecutive = 1;
|
|
85
|
+
let currentRun = 1;
|
|
86
|
+
for (let i = 1; i < results.length; i++) {
|
|
87
|
+
if (fingerprint(results[i]) === fingerprint(results[i - 1])) {
|
|
88
|
+
currentRun++;
|
|
89
|
+
maxConsecutive = Math.max(maxConsecutive, currentRun);
|
|
90
|
+
} else {
|
|
91
|
+
currentRun = 1;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const errorCounts = /* @__PURE__ */ new Map();
|
|
95
|
+
for (const r of results) {
|
|
96
|
+
if (!r.isError) continue;
|
|
97
|
+
const fp = fingerprint(r);
|
|
98
|
+
errorCounts.set(fp, (errorCounts.get(fp) ?? 0) + 1);
|
|
99
|
+
}
|
|
100
|
+
const maxErrorRepeat = Math.max(0, ...[...errorCounts.values()]);
|
|
101
|
+
const minReps = THRESHOLDS.loopMinRepetitions;
|
|
102
|
+
const loopSeverity = Math.max(
|
|
103
|
+
maxConsecutive >= minReps ? maxConsecutive - (minReps - 1) : 0,
|
|
104
|
+
maxErrorRepeat >= minReps ? maxErrorRepeat - (minReps - 1) : 0
|
|
105
|
+
);
|
|
106
|
+
if (loopSeverity === 0) return { score: 1, detail: "No stuck loops", applicable: true };
|
|
107
|
+
const score = Math.max(0, 1 - loopSeverity * THRESHOLDS.loopPenaltyPerOccurrence);
|
|
108
|
+
const details = [];
|
|
109
|
+
if (maxConsecutive >= minReps) details.push(`${maxConsecutive} consecutive identical calls`);
|
|
110
|
+
if (maxErrorRepeat >= minReps) details.push(`same error repeated ${maxErrorRepeat}x`);
|
|
111
|
+
return { score, detail: details.join("; "), applicable: true };
|
|
112
|
+
}
|
|
113
|
+
function scoreRegression(execResults) {
|
|
114
|
+
const regressions = [];
|
|
115
|
+
for (const [label, filter] of [
|
|
116
|
+
["Build", isBuildArgs],
|
|
117
|
+
["Tests", isTestArgs]
|
|
118
|
+
]) {
|
|
119
|
+
const cmds = execResults.filter((r) => r.toolName === "execute_command" && filter(r.args));
|
|
120
|
+
if (cmds.length < 2) continue;
|
|
121
|
+
let sawPass = false;
|
|
122
|
+
let sawRegression = false;
|
|
123
|
+
for (const cmd of cmds) {
|
|
124
|
+
const exit = getExitCode(cmd.result);
|
|
125
|
+
if (exit === 0) {
|
|
126
|
+
if (sawRegression) {
|
|
127
|
+
regressions.push({ label, recovered: true });
|
|
128
|
+
sawRegression = false;
|
|
129
|
+
}
|
|
130
|
+
sawPass = true;
|
|
131
|
+
}
|
|
132
|
+
if (sawPass && exit !== null && exit !== 0) {
|
|
133
|
+
sawRegression = true;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (sawRegression) {
|
|
137
|
+
regressions.push({ label, recovered: false });
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (regressions.length === 0) return { score: 1, detail: "No regressions", applicable: true };
|
|
141
|
+
const persistentCount = regressions.filter((r) => !r.recovered).length;
|
|
142
|
+
const recoveredCount = regressions.filter((r) => r.recovered).length;
|
|
143
|
+
const score = Math.max(0, 1 - persistentCount * 0.5 - recoveredCount * 0.1);
|
|
144
|
+
const details = regressions.map(
|
|
145
|
+
(r) => `${r.label} ${r.recovered ? "regressed then recovered" : "regressed (persisted)"}`
|
|
146
|
+
);
|
|
147
|
+
return { score, detail: details.join("; "), applicable: true };
|
|
148
|
+
}
|
|
149
|
+
function scoreAutonomy(results) {
|
|
150
|
+
const askUserCalls = results.filter((r) => r.toolName === "ask_user");
|
|
151
|
+
const count = askUserCalls.length;
|
|
152
|
+
if (count === 0) return { score: 1, detail: "No ask_user calls (fully autonomous)", applicable: true };
|
|
153
|
+
const score = Math.max(0, 1 - count * THRESHOLDS.autonomyPenaltyPerAsk);
|
|
154
|
+
return { score, detail: `${count} ask_user call${count > 1 ? "s" : ""}`, applicable: true };
|
|
155
|
+
}
|
|
156
|
+
function weightedAverage(dimensions, weights) {
|
|
157
|
+
let totalWeight = 0;
|
|
158
|
+
let weightedSum = 0;
|
|
159
|
+
for (const [key, result] of Object.entries(dimensions)) {
|
|
160
|
+
if (!result.applicable) continue;
|
|
161
|
+
const weight = weights[key] ?? 0;
|
|
162
|
+
totalWeight += weight;
|
|
163
|
+
weightedSum += result.score * weight;
|
|
164
|
+
}
|
|
165
|
+
if (totalWeight === 0) return null;
|
|
166
|
+
return weightedSum / totalWeight;
|
|
167
|
+
}
|
|
168
|
+
function createOutcomeScorer() {
|
|
169
|
+
return createScorer({
|
|
170
|
+
id: "mastracode-outcome",
|
|
171
|
+
name: "MastraCode Outcome",
|
|
172
|
+
description: "Grades coding session outcomes: build/test pass, tool errors, stuck loops, regressions, autonomy. Always-on.",
|
|
173
|
+
type: "agent",
|
|
174
|
+
prepareRun: filterRun({ partTypes: ["tool-invocation", "text"] })
|
|
175
|
+
}).preprocess(async ({ run }) => {
|
|
176
|
+
const messages = run.output ?? [];
|
|
177
|
+
const allResults = extractToolCalls(messages);
|
|
178
|
+
const totalCalls = allResults.length;
|
|
179
|
+
if (totalCalls < THRESHOLDS.minToolCalls) {
|
|
180
|
+
const empty = { score: 0, detail: "No tool calls", applicable: false };
|
|
181
|
+
return {
|
|
182
|
+
empty: true,
|
|
183
|
+
build: empty,
|
|
184
|
+
tests: empty,
|
|
185
|
+
toolErrors: empty,
|
|
186
|
+
loops: empty,
|
|
187
|
+
regression: empty,
|
|
188
|
+
autonomy: empty,
|
|
189
|
+
totalCalls
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
const execResults = allResults.filter((r) => r.toolName === "execute_command");
|
|
193
|
+
return {
|
|
194
|
+
empty: false,
|
|
195
|
+
build: scoreBuild(execResults),
|
|
196
|
+
tests: scoreTests(execResults),
|
|
197
|
+
toolErrors: scoreToolErrors(allResults),
|
|
198
|
+
loops: scoreStuckLoops(allResults),
|
|
199
|
+
regression: scoreRegression(execResults),
|
|
200
|
+
autonomy: scoreAutonomy(allResults),
|
|
201
|
+
totalCalls
|
|
202
|
+
};
|
|
203
|
+
}).generateScore(({ results }) => {
|
|
204
|
+
const p = results.preprocessStepResult;
|
|
205
|
+
if (p.empty) return 0;
|
|
206
|
+
const score = weightedAverage(
|
|
207
|
+
{
|
|
208
|
+
build: p.build,
|
|
209
|
+
tests: p.tests,
|
|
210
|
+
toolErrors: p.toolErrors,
|
|
211
|
+
loops: p.loops,
|
|
212
|
+
regression: p.regression,
|
|
213
|
+
autonomy: p.autonomy
|
|
214
|
+
},
|
|
215
|
+
WEIGHTS
|
|
216
|
+
);
|
|
217
|
+
return score === null ? 0 : Math.round(score * 100) / 100;
|
|
218
|
+
}).generateReason(({ results, score }) => {
|
|
219
|
+
const p = results.preprocessStepResult;
|
|
220
|
+
if (p.empty) {
|
|
221
|
+
return `Score: 0 (${p.totalCalls} tool calls \u2014 below minimum threshold for scoring)`;
|
|
222
|
+
}
|
|
223
|
+
const pct = (w) => `${(w * 100).toFixed(0)}%`;
|
|
224
|
+
const dimLine = (name, weight, r) => r.applicable ? `${name} (${pct(weight)}): ${r.detail} [${r.score}]` : `${name}: ${r.detail} [N/A \u2014 excluded from average]`;
|
|
225
|
+
const parts = [`Score: ${score} (${p.totalCalls} tool calls total)`];
|
|
226
|
+
parts.push(dimLine("Build", WEIGHTS.build, p.build));
|
|
227
|
+
parts.push(dimLine("Tests", WEIGHTS.tests, p.tests));
|
|
228
|
+
parts.push(dimLine("Tool errors", WEIGHTS.toolErrors, p.toolErrors));
|
|
229
|
+
parts.push(dimLine("Loops", WEIGHTS.loops, p.loops));
|
|
230
|
+
parts.push(dimLine("Regression", WEIGHTS.regression, p.regression));
|
|
231
|
+
parts.push(dimLine("Autonomy", WEIGHTS.autonomy, p.autonomy));
|
|
232
|
+
return parts.join("\n");
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
export {
|
|
236
|
+
createOutcomeScorer
|
|
237
|
+
};
|
|
238
|
+
//# sourceMappingURL=outcome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/evals/scorers/outcome.ts"],"sourcesContent":["/**\n * MastraCode Outcome Scorer (Code-based, Agent type, always-on)\n *\n * Grades the objective outcome of a coding session by checking hard facts:\n * - Did the build/typecheck pass?\n * - Did tests pass?\n * - What was the tool error rate?\n * - Did the agent get stuck in a loop?\n * - Was there a regression (build passed earlier, failed later)?\n * - Did the agent use ask_user unnecessarily? (autonomy)\n *\n * This scorer is always-on (no sampling) because it's cheap — it only\n * reads exit codes and error states from tool results already in the messages.\n *\n * Scoring philosophy (from Anthropic's eval guidance):\n * \"Grade outcomes, not paths\" — we check what happened, not how.\n * Partial credit: a session that passes build but fails tests scores\n * higher than one that fails build entirely.\n *\n * Dimensions that don't apply to a session (e.g. build for a docs-only task)\n * are excluded from the weighted average, so sessions aren't penalized for\n * irrelevant criteria.\n */\n\nimport type { MastraDBMessage } from '@mastra/core/agent';\nimport { createScorer, filterRun } from '@mastra/core/evals';\n\nimport { isBuildCommand, isTestCommand, getExitCode } from './classify-command.js';\nimport type { ExtractedToolCall } from './extract-tools.js';\nimport { extractToolCalls } from './extract-tools.js';\n\n// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n// CONFIGURATION — Adjust weights and thresholds here\n// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n/**\n * Dimension weights. Used to compute the weighted average of applicable dimensions.\n * Dimensions that don't apply (e.g. no build ran) are excluded from the average.\n */\nconst WEIGHTS = {\n build: 0.3,\n tests: 0.25,\n toolErrors: 0.2,\n loops: 0.1,\n regression: 0.1,\n autonomy: 0.05,\n} as const;\n\n/**\n * Scoring thresholds and multipliers.\n */\nconst THRESHOLDS = {\n /** Multiplier for tool error rate penalty. Score = max(0, 1 - rate × this). */\n toolErrorPenaltyMultiplier: 1.0,\n\n /** How many consecutive identical calls (or same-error repeats) before it's a \"loop\". */\n loopMinRepetitions: 3,\n\n /** Score penalty per detected loop. */\n loopPenaltyPerOccurrence: 0.3,\n\n /** Score deducted per ask_user call. */\n autonomyPenaltyPerAsk: 0.25,\n\n /** Score when a command ran but exit code is ambiguous. */\n ambiguousExitScore: 0.75,\n\n /** Minimum tool calls required to produce a meaningful score. */\n minToolCalls: 1,\n\n /** Tool names whose errors are expected/benign (not penalized). */\n benignErrorTools: ['search_content', 'find_files', 'lsp_inspect'] as string[],\n} as const;\n\n// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\ntype DimensionResult = { score: number; detail: string; applicable: boolean };\n\n/**\n * Check if the primary verb of an execute_command is a build/typecheck command.\n * Splits compound commands (&&, ;) and checks the first segment.\n */\n/** Extract command string from tool call args, then delegate to shared classifier. */\nfunction isBuildArgs(args: Record<string, unknown>): boolean {\n return isBuildCommand(String(args.command ?? ''));\n}\n\nfunction isTestArgs(args: Record<string, unknown>): boolean {\n return isTestCommand(String(args.command ?? ''));\n}\n\n/**\n * Score build/typecheck outcome (final state).\n */\nfunction scoreBuild(execResults: ExtractedToolCall[]): DimensionResult {\n const builds = execResults.filter(r => r.toolName === 'execute_command' && isBuildArgs(r.args));\n if (builds.length === 0) return { score: 0, detail: 'No build/typecheck ran', applicable: false };\n\n const last = builds[builds.length - 1]!;\n if (last.isError) return { score: 0, detail: 'Build/typecheck tool errored', applicable: true };\n\n const exitCode = getExitCode(last.result);\n if (exitCode === 0) return { score: 1, detail: 'Build/typecheck passed', applicable: true };\n if (exitCode !== null && exitCode !== 0)\n return { score: 0, detail: `Build failed (exit ${exitCode})`, applicable: true };\n\n // Fallback: check result text for TS errors\n const text = typeof last.result === 'string' ? last.result : JSON.stringify(last.result ?? '');\n if (/error TS\\d+|Cannot find module|is not assignable/i.test(text)) {\n return { score: 0, detail: 'Build failed (TypeScript errors in output)', applicable: true };\n }\n\n return { score: THRESHOLDS.ambiguousExitScore, detail: 'Build ran, outcome unclear', applicable: true };\n}\n\n/**\n * Score test outcome (final state).\n */\nfunction scoreTests(execResults: ExtractedToolCall[]): DimensionResult {\n const tests = execResults.filter(r => r.toolName === 'execute_command' && isTestArgs(r.args));\n if (tests.length === 0) return { score: 0, detail: 'No tests ran', applicable: false };\n\n const last = tests[tests.length - 1]!;\n if (last.isError) return { score: 0, detail: 'Test command errored', applicable: true };\n\n const exitCode = getExitCode(last.result);\n if (exitCode === 0) return { score: 1, detail: 'Tests passed', applicable: true };\n if (exitCode !== null && exitCode !== 0)\n return { score: 0, detail: `Tests failed (exit ${exitCode})`, applicable: true };\n\n const text = typeof last.result === 'string' ? last.result : JSON.stringify(last.result ?? '');\n if (/\\d+ (?:tests? )?passed|✓|PASS/i.test(text) && !/\\bfail(?:ed|ure)?\\b|\\berror\\b/i.test(text)) {\n return { score: 1, detail: 'Tests passed (inferred)', applicable: true };\n }\n if (/\\bFAIL\\b|failed|✗|✘/i.test(text)) {\n return { score: 0, detail: 'Tests failed (inferred)', applicable: true };\n }\n\n return { score: THRESHOLDS.ambiguousExitScore, detail: 'Tests ran, outcome unclear', applicable: true };\n}\n\n/**\n * Score tool error rate, excluding benign errors from expected-to-fail tools.\n */\nfunction scoreToolErrors(results: ExtractedToolCall[]): DimensionResult {\n if (results.length === 0) return { score: 1, detail: 'No tool calls', applicable: false };\n\n // Only count errors from non-benign tools\n const nonBenign = results.filter(r => !THRESHOLDS.benignErrorTools.includes(r.toolName));\n if (nonBenign.length === 0) return { score: 1, detail: 'All tool calls are benign-error tools', applicable: true };\n\n const errors = nonBenign.filter(r => r.isError);\n const rate = errors.length / nonBenign.length;\n\n if (rate === 0) return { score: 1, detail: 'No tool errors', applicable: true };\n\n const score = Math.max(0, 1 - rate * THRESHOLDS.toolErrorPenaltyMultiplier);\n return {\n score,\n detail: `${errors.length}/${nonBenign.length} tools errored (${(rate * 100).toFixed(0)}%)`,\n applicable: true,\n };\n}\n\n/**\n * Detect stuck loops: same tool + same args appearing 3+ times consecutively,\n * or same tool + same args erroring 3+ times total.\n */\nfunction scoreStuckLoops(results: ExtractedToolCall[]): DimensionResult {\n if (results.length < 3) return { score: 1, detail: 'Too few calls for loop detection', applicable: true };\n\n const fingerprint = (r: ExtractedToolCall) => `${r.toolName}:${JSON.stringify(r.args)}`;\n\n // Check consecutive identical calls\n let maxConsecutive = 1;\n let currentRun = 1;\n for (let i = 1; i < results.length; i++) {\n if (fingerprint(results[i]!) === fingerprint(results[i - 1]!)) {\n currentRun++;\n maxConsecutive = Math.max(maxConsecutive, currentRun);\n } else {\n currentRun = 1;\n }\n }\n\n // Check repeated error fingerprints\n const errorCounts = new Map<string, number>();\n for (const r of results) {\n if (!r.isError) continue;\n const fp = fingerprint(r);\n errorCounts.set(fp, (errorCounts.get(fp) ?? 0) + 1);\n }\n const maxErrorRepeat = Math.max(0, ...[...errorCounts.values()]);\n\n const minReps = THRESHOLDS.loopMinRepetitions;\n const loopSeverity = Math.max(\n maxConsecutive >= minReps ? maxConsecutive - (minReps - 1) : 0,\n maxErrorRepeat >= minReps ? maxErrorRepeat - (minReps - 1) : 0,\n );\n\n if (loopSeverity === 0) return { score: 1, detail: 'No stuck loops', applicable: true };\n\n const score = Math.max(0, 1 - loopSeverity * THRESHOLDS.loopPenaltyPerOccurrence);\n const details: string[] = [];\n if (maxConsecutive >= minReps) details.push(`${maxConsecutive} consecutive identical calls`);\n if (maxErrorRepeat >= minReps) details.push(`same error repeated ${maxErrorRepeat}x`);\n return { score, detail: details.join('; '), applicable: true };\n}\n\n/**\n * Detect regressions: build/test passed at some point, then failed later.\n * Gives partial credit if the agent recovered (final state passes).\n */\nfunction scoreRegression(execResults: ExtractedToolCall[]): DimensionResult {\n const regressions: { label: string; recovered: boolean }[] = [];\n\n for (const [label, filter] of [\n ['Build', isBuildArgs],\n ['Tests', isTestArgs],\n ] as const) {\n const cmds = execResults.filter(r => r.toolName === 'execute_command' && filter(r.args));\n if (cmds.length < 2) continue;\n\n let sawPass = false;\n let sawRegression = false;\n for (const cmd of cmds) {\n const exit = getExitCode(cmd.result);\n if (exit === 0) {\n if (sawRegression) {\n // Recovered from regression\n regressions.push({ label, recovered: true });\n sawRegression = false;\n }\n sawPass = true;\n }\n if (sawPass && exit !== null && exit !== 0) {\n sawRegression = true;\n }\n }\n\n if (sawRegression) {\n // Regression persisted at end of session\n regressions.push({ label, recovered: false });\n }\n }\n\n if (regressions.length === 0) return { score: 1, detail: 'No regressions', applicable: true };\n\n // Persistent regressions are severe (0), recovered regressions get partial credit (0.5)\n const persistentCount = regressions.filter(r => !r.recovered).length;\n const recoveredCount = regressions.filter(r => r.recovered).length;\n const score = Math.max(0, 1 - persistentCount * 0.5 - recoveredCount * 0.1);\n const details = regressions.map(\n r => `${r.label} ${r.recovered ? 'regressed then recovered' : 'regressed (persisted)'}`,\n );\n return { score, detail: details.join('; '), applicable: true };\n}\n\n/**\n * Score autonomy: penalize ask_user calls.\n * 0 calls = 1.0, each call reduces by 0.25 (up to a floor of 0).\n */\nfunction scoreAutonomy(results: ExtractedToolCall[]): DimensionResult {\n const askUserCalls = results.filter(r => r.toolName === 'ask_user');\n const count = askUserCalls.length;\n\n if (count === 0) return { score: 1, detail: 'No ask_user calls (fully autonomous)', applicable: true };\n\n const score = Math.max(0, 1 - count * THRESHOLDS.autonomyPenaltyPerAsk);\n return { score, detail: `${count} ask_user call${count > 1 ? 's' : ''}`, applicable: true };\n}\n\n/**\n * Compute weighted average of only applicable dimensions.\n * Returns null if no dimensions are applicable.\n */\nfunction weightedAverage(dimensions: Record<string, DimensionResult>, weights: Record<string, number>): number | null {\n let totalWeight = 0;\n let weightedSum = 0;\n\n for (const [key, result] of Object.entries(dimensions)) {\n if (!result.applicable) continue;\n const weight = weights[key] ?? 0;\n totalWeight += weight;\n weightedSum += result.score * weight;\n }\n\n if (totalWeight === 0) return null;\n return weightedSum / totalWeight;\n}\n\nexport function createOutcomeScorer() {\n return createScorer({\n id: 'mastracode-outcome',\n name: 'MastraCode Outcome',\n description:\n 'Grades coding session outcomes: build/test pass, tool errors, stuck loops, regressions, autonomy. Always-on.',\n type: 'agent',\n prepareRun: filterRun({ partTypes: ['tool-invocation', 'text'] }),\n })\n .preprocess(async ({ run }) => {\n const messages = (run.output ?? []) as MastraDBMessage[];\n const allResults = extractToolCalls(messages);\n const totalCalls = allResults.length;\n\n // H1: Empty sessions or sessions with no tool calls → score 0\n if (totalCalls < THRESHOLDS.minToolCalls) {\n const empty: DimensionResult = { score: 0, detail: 'No tool calls', applicable: false };\n return {\n empty: true as const,\n build: empty,\n tests: empty,\n toolErrors: empty,\n loops: empty,\n regression: empty,\n autonomy: empty,\n totalCalls,\n };\n }\n\n const execResults = allResults.filter(r => r.toolName === 'execute_command');\n\n return {\n empty: false as const,\n build: scoreBuild(execResults),\n tests: scoreTests(execResults),\n toolErrors: scoreToolErrors(allResults),\n loops: scoreStuckLoops(allResults),\n regression: scoreRegression(execResults),\n autonomy: scoreAutonomy(allResults),\n totalCalls,\n };\n })\n .generateScore(({ results }) => {\n const p = results.preprocessStepResult;\n if (p.empty) return 0;\n\n const score = weightedAverage(\n {\n build: p.build,\n tests: p.tests,\n toolErrors: p.toolErrors,\n loops: p.loops,\n regression: p.regression,\n autonomy: p.autonomy,\n },\n WEIGHTS,\n );\n\n return score === null ? 0 : Math.round(score * 100) / 100;\n })\n .generateReason(({ results, score }) => {\n const p = results.preprocessStepResult;\n if (p.empty) {\n return `Score: 0 (${p.totalCalls} tool calls — below minimum threshold for scoring)`;\n }\n\n const pct = (w: number) => `${(w * 100).toFixed(0)}%`;\n const dimLine = (name: string, weight: number, r: DimensionResult) =>\n r.applicable\n ? `${name} (${pct(weight)}): ${r.detail} [${r.score}]`\n : `${name}: ${r.detail} [N/A — excluded from average]`;\n\n const parts: string[] = [`Score: ${score} (${p.totalCalls} tool calls total)`];\n parts.push(dimLine('Build', WEIGHTS.build, p.build));\n parts.push(dimLine('Tests', WEIGHTS.tests, p.tests));\n parts.push(dimLine('Tool errors', WEIGHTS.toolErrors, p.toolErrors));\n parts.push(dimLine('Loops', WEIGHTS.loops, p.loops));\n parts.push(dimLine('Regression', WEIGHTS.regression, p.regression));\n parts.push(dimLine('Autonomy', WEIGHTS.autonomy, p.autonomy));\n\n return parts.join('\\n');\n });\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { PermissionMode, RunMode, ThinkingLevel } from './types.js';
|
|
2
|
+
/** Consolidated output mode (replaces the old `--format` + `--output-format`). */
|
|
3
|
+
export type OutputMode = 'human' | 'json' | 'jsonl';
|
|
4
|
+
export interface HeadlessArgs {
|
|
5
|
+
prompt?: string;
|
|
6
|
+
/** Timeout in seconds (CLI surface); converted to ms before `runMC`. */
|
|
7
|
+
timeout?: number;
|
|
8
|
+
output: OutputMode;
|
|
9
|
+
continue_: boolean;
|
|
10
|
+
model?: string;
|
|
11
|
+
mode?: RunMode;
|
|
12
|
+
thinkingLevel?: ThinkingLevel;
|
|
13
|
+
settings?: string;
|
|
14
|
+
thread?: string;
|
|
15
|
+
title?: string;
|
|
16
|
+
cloneThread: boolean;
|
|
17
|
+
resourceId?: string;
|
|
18
|
+
/** Max agentic turns before the run aborts with exit code 1. */
|
|
19
|
+
maxTurns?: number;
|
|
20
|
+
/** Named permission mode resolving to a built-in policy. Defaults to `auto`. */
|
|
21
|
+
permissionMode?: PermissionMode;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Returns true if `argv` selects headless mode. This must agree with what
|
|
25
|
+
* {@link parseHeadlessArgs} (and `runMCCli`) accept as a prompt: `--prompt`/`-p`
|
|
26
|
+
* or a bare positional prompt (e.g. `mastracode "Fix the bug"`). Note that a
|
|
27
|
+
* prompt piped via stdin without a flag is handled separately by the caller.
|
|
28
|
+
*/
|
|
29
|
+
export declare function hasHeadlessFlag(argv: string[]): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Parse CLI arguments for headless mode. The flag table in `flags.ts` is the
|
|
32
|
+
* single source of truth: each flag carries its own coercion/validation, so this
|
|
33
|
+
* function just walks {@link FLAGS} and assembles the typed {@link HeadlessArgs}.
|
|
34
|
+
*/
|
|
35
|
+
export declare function parseHeadlessArgs(argv: string[]): HeadlessArgs;
|
|
36
|
+
export declare function printHeadlessUsage(): void;
|
|
37
|
+
/**
|
|
38
|
+
* Headless CLI entry point: parse arguments, read stdin, initialize MastraCode,
|
|
39
|
+
* run via `runMC`, render output, and exit with the mapped code.
|
|
40
|
+
*/
|
|
41
|
+
export declare function runMCCli(predrainedInput?: string | null): Promise<never>;
|
|
42
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/headless/cli.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEzE,kFAAkF;AAClF,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAID;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAcvD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAsC9D;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CA+BzC;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CA+G9E"}
|