@mastra/code-sdk 0.0.0-aggregate-trace-20261015182851
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +32 -0
- package/README.md +284 -0
- package/dist/acp/agent.d.ts +48 -0
- package/dist/acp/agent.d.ts.map +1 -0
- package/dist/acp/agent.js +416 -0
- package/dist/acp/agent.js.map +1 -0
- package/dist/acp/errors.d.ts +3 -0
- package/dist/acp/errors.d.ts.map +1 -0
- package/dist/acp/errors.js +14 -0
- package/dist/acp/errors.js.map +1 -0
- package/dist/acp/event-mapper.d.ts +28 -0
- package/dist/acp/event-mapper.d.ts.map +1 -0
- package/dist/acp/event-mapper.js +279 -0
- package/dist/acp/event-mapper.js.map +1 -0
- package/dist/acp/index.d.ts +9 -0
- package/dist/acp/index.d.ts.map +1 -0
- package/dist/acp/index.js +24 -0
- package/dist/acp/index.js.map +1 -0
- package/dist/acp/runtime.d.ts +5 -0
- package/dist/acp/runtime.d.ts.map +1 -0
- package/dist/acp/runtime.js +91 -0
- package/dist/acp/runtime.js.map +1 -0
- package/dist/acp/server.d.ts +4 -0
- package/dist/acp/server.d.ts.map +1 -0
- package/dist/acp/server.js +38 -0
- package/dist/acp/server.js.map +1 -0
- package/dist/acp/skills.d.ts +6 -0
- package/dist/acp/skills.d.ts.map +1 -0
- package/dist/acp/skills.js +33 -0
- package/dist/acp/skills.js.map +1 -0
- package/dist/acp.d.ts +2 -0
- package/dist/acp.d.ts.map +1 -0
- package/dist/acp.js +2 -0
- package/dist/agent-connections/messaging-processor.d.ts +17 -0
- package/dist/agent-connections/messaging-processor.d.ts.map +1 -0
- package/dist/agent-connections/messaging-processor.js +134 -0
- package/dist/agent-connections/messaging-processor.js.map +1 -0
- package/dist/agent-connections/ownership.d.ts +24 -0
- package/dist/agent-connections/ownership.d.ts.map +1 -0
- package/dist/agent-connections/ownership.js +99 -0
- package/dist/agent-connections/ownership.js.map +1 -0
- package/dist/agent-connections/registry.d.ts +20 -0
- package/dist/agent-connections/registry.d.ts.map +1 -0
- package/dist/agent-connections/registry.js +170 -0
- package/dist/agent-connections/registry.js.map +1 -0
- package/dist/agent-connections/session-advertisement.d.ts +27 -0
- package/dist/agent-connections/session-advertisement.d.ts.map +1 -0
- package/dist/agent-connections/session-advertisement.js +89 -0
- package/dist/agent-connections/session-advertisement.js.map +1 -0
- package/dist/agent-connections/signal-provider.d.ts +141 -0
- package/dist/agent-connections/signal-provider.d.ts.map +1 -0
- package/dist/agent-connections/signal-provider.js +38 -0
- package/dist/agent-connections/signal-provider.js.map +1 -0
- package/dist/agent-connections/state-processor.d.ts +23 -0
- package/dist/agent-connections/state-processor.d.ts.map +1 -0
- package/dist/agent-connections/state-processor.js +273 -0
- package/dist/agent-connections/state-processor.js.map +1 -0
- package/dist/agent-connections/thread-state.d.ts +41 -0
- package/dist/agent-connections/thread-state.d.ts.map +1 -0
- package/dist/agent-connections/thread-state.js +160 -0
- package/dist/agent-connections/thread-state.js.map +1 -0
- package/dist/agent-connections/tools.d.ts +133 -0
- package/dist/agent-connections/tools.d.ts.map +1 -0
- package/dist/agent-connections/tools.js +552 -0
- package/dist/agent-connections/tools.js.map +1 -0
- package/dist/agent-connections/types.d.ts +99 -0
- package/dist/agent-connections/types.d.ts.map +1 -0
- package/dist/agent-connections/types.js +7 -0
- package/dist/agent-connections/types.js.map +1 -0
- package/dist/agent-connections/untrusted-text.d.ts +5 -0
- package/dist/agent-connections/untrusted-text.d.ts.map +1 -0
- package/dist/agent-connections/untrusted-text.js +22 -0
- package/dist/agent-connections/untrusted-text.js.map +1 -0
- package/dist/agents/background-completion-events.d.ts +16 -0
- package/dist/agents/background-completion-events.d.ts.map +1 -0
- package/dist/agents/background-completion-events.js +19 -0
- package/dist/agents/background-completion-events.js.map +1 -0
- package/dist/agents/background-completion.d.ts +9 -0
- package/dist/agents/background-completion.d.ts.map +1 -0
- package/dist/agents/background-completion.js +59 -0
- package/dist/agents/background-completion.js.map +1 -0
- package/dist/agents/context-audit.d.ts +84 -0
- package/dist/agents/context-audit.d.ts.map +1 -0
- package/dist/agents/context-audit.js +118 -0
- package/dist/agents/context-audit.js.map +1 -0
- package/dist/agents/credential-resolver.d.ts +67 -0
- package/dist/agents/credential-resolver.d.ts.map +1 -0
- package/dist/agents/credential-resolver.js +136 -0
- package/dist/agents/credential-resolver.js.map +1 -0
- package/dist/agents/custom-provider-source.d.ts +35 -0
- package/dist/agents/custom-provider-source.d.ts.map +1 -0
- package/dist/agents/custom-provider-source.js +25 -0
- package/dist/agents/custom-provider-source.js.map +1 -0
- package/dist/agents/instructions.d.ts +40 -0
- package/dist/agents/instructions.d.ts.map +1 -0
- package/dist/agents/instructions.js +63 -0
- package/dist/agents/instructions.js.map +1 -0
- package/dist/agents/mastracode-gateway.d.ts +76 -0
- package/dist/agents/mastracode-gateway.d.ts.map +1 -0
- package/dist/agents/mastracode-gateway.js +434 -0
- package/dist/agents/mastracode-gateway.js.map +1 -0
- package/dist/agents/memory.d.ts +39 -0
- package/dist/agents/memory.d.ts.map +1 -0
- package/dist/agents/memory.js +266 -0
- package/dist/agents/memory.js.map +1 -0
- package/dist/agents/model.d.ts +123 -0
- package/dist/agents/model.d.ts.map +1 -0
- package/dist/agents/model.js +295 -0
- package/dist/agents/model.js.map +1 -0
- package/dist/agents/modes/build.d.ts +12 -0
- package/dist/agents/modes/build.d.ts.map +1 -0
- package/dist/agents/modes/build.js +36 -0
- package/dist/agents/modes/build.js.map +1 -0
- package/dist/agents/modes/explore.d.ts +10 -0
- package/dist/agents/modes/explore.d.ts.map +1 -0
- package/dist/agents/modes/explore.js +28 -0
- package/dist/agents/modes/explore.js.map +1 -0
- package/dist/agents/modes/plan.d.ts +8 -0
- package/dist/agents/modes/plan.d.ts.map +1 -0
- package/dist/agents/modes/plan.js +46 -0
- package/dist/agents/modes/plan.js.map +1 -0
- package/dist/agents/prompts/agent-instructions.d.ts +99 -0
- package/dist/agents/prompts/agent-instructions.d.ts.map +1 -0
- package/dist/agents/prompts/agent-instructions.js +275 -0
- package/dist/agents/prompts/agent-instructions.js.map +1 -0
- package/dist/agents/prompts/build.d.ts +12 -0
- package/dist/agents/prompts/build.d.ts.map +1 -0
- package/dist/agents/prompts/build.js +76 -0
- package/dist/agents/prompts/build.js.map +1 -0
- package/dist/agents/prompts/fast.d.ts +5 -0
- package/dist/agents/prompts/fast.d.ts.map +1 -0
- package/dist/agents/prompts/fast.js +26 -0
- package/dist/agents/prompts/fast.js.map +1 -0
- package/dist/agents/prompts/index.d.ts +54 -0
- package/dist/agents/prompts/index.d.ts.map +1 -0
- package/dist/agents/prompts/index.js +127 -0
- package/dist/agents/prompts/index.js.map +1 -0
- package/dist/agents/prompts/model.d.ts +5 -0
- package/dist/agents/prompts/model.d.ts.map +1 -0
- package/dist/agents/prompts/model.js +23 -0
- package/dist/agents/prompts/model.js.map +1 -0
- package/dist/agents/prompts/plan.d.ts +8 -0
- package/dist/agents/prompts/plan.d.ts.map +1 -0
- package/dist/agents/prompts/plan.js +129 -0
- package/dist/agents/prompts/plan.js.map +1 -0
- package/dist/agents/prompts/tool-guidance.d.ts +18 -0
- package/dist/agents/prompts/tool-guidance.d.ts.map +1 -0
- package/dist/agents/prompts/tool-guidance.js +181 -0
- package/dist/agents/prompts/tool-guidance.js.map +1 -0
- package/dist/agents/sandbox-filesystem.d.ts +151 -0
- package/dist/agents/sandbox-filesystem.d.ts.map +1 -0
- package/dist/agents/sandbox-filesystem.js +581 -0
- package/dist/agents/sandbox-filesystem.js.map +1 -0
- package/dist/agents/subagents/execute.d.ts +3 -0
- package/dist/agents/subagents/execute.d.ts.map +1 -0
- package/dist/agents/subagents/execute.js +27 -0
- package/dist/agents/subagents/execute.js.map +1 -0
- package/dist/agents/subagents/explore.d.ts +3 -0
- package/dist/agents/subagents/explore.d.ts.map +1 -0
- package/dist/agents/subagents/explore.js +18 -0
- package/dist/agents/subagents/explore.js.map +1 -0
- package/dist/agents/subagents/plan.d.ts +3 -0
- package/dist/agents/subagents/plan.d.ts.map +1 -0
- package/dist/agents/subagents/plan.js +18 -0
- package/dist/agents/subagents/plan.js.map +1 -0
- package/dist/agents/thread-caveman-state.d.ts +17 -0
- package/dist/agents/thread-caveman-state.d.ts.map +1 -0
- package/dist/agents/thread-caveman-state.js +107 -0
- package/dist/agents/thread-caveman-state.js.map +1 -0
- package/dist/agents/tool-availability.d.ts +12 -0
- package/dist/agents/tool-availability.d.ts.map +1 -0
- package/dist/agents/tool-availability.js +129 -0
- package/dist/agents/tool-availability.js.map +1 -0
- package/dist/agents/tools.d.ts +37 -0
- package/dist/agents/tools.d.ts.map +1 -0
- package/dist/agents/tools.js +131 -0
- package/dist/agents/tools.js.map +1 -0
- package/dist/agents/workflow-builder-agent.d.ts +2 -0
- package/dist/agents/workflow-builder-agent.d.ts.map +1 -0
- package/dist/agents/workflow-builder-agent.js +82 -0
- package/dist/agents/workflow-builder-agent.js.map +1 -0
- package/dist/agents/workspace.d.ts +33 -0
- package/dist/agents/workspace.d.ts.map +1 -0
- package/dist/agents/workspace.js +208 -0
- package/dist/agents/workspace.js.map +1 -0
- package/dist/analytics.d.ts +18 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/analytics.js +162 -0
- package/dist/analytics.js.map +1 -0
- package/dist/auth/account-rotation-processor.d.ts +182 -0
- package/dist/auth/account-rotation-processor.d.ts.map +1 -0
- package/dist/auth/account-rotation-processor.js +609 -0
- package/dist/auth/account-rotation-processor.js.map +1 -0
- package/dist/auth/account-routing-context.d.ts +13 -0
- package/dist/auth/account-routing-context.d.ts.map +1 -0
- package/dist/auth/account-routing-context.js +41 -0
- package/dist/auth/account-routing-context.js.map +1 -0
- package/dist/auth/authorization-input.d.ts +16 -0
- package/dist/auth/authorization-input.d.ts.map +1 -0
- package/dist/auth/authorization-input.js +42 -0
- package/dist/auth/authorization-input.js.map +1 -0
- package/dist/auth/device-code.d.ts +93 -0
- package/dist/auth/device-code.d.ts.map +1 -0
- package/dist/auth/device-code.js +129 -0
- package/dist/auth/device-code.js.map +1 -0
- package/dist/auth/index.d.ts +13 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +9 -0
- package/dist/auth/pkce.d.ts +13 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +32 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/auth/provider-auth-error.d.ts +12 -0
- package/dist/auth/provider-auth-error.d.ts.map +1 -0
- package/dist/auth/provider-auth-error.js +16 -0
- package/dist/auth/provider-auth-error.js.map +1 -0
- package/dist/auth/providers/anthropic.d.ts +40 -0
- package/dist/auth/providers/anthropic.d.ts.map +1 -0
- package/dist/auth/providers/anthropic.js +120 -0
- package/dist/auth/providers/anthropic.js.map +1 -0
- package/dist/auth/providers/github-copilot.d.ts +154 -0
- package/dist/auth/providers/github-copilot.d.ts.map +1 -0
- package/dist/auth/providers/github-copilot.js +362 -0
- package/dist/auth/providers/github-copilot.js.map +1 -0
- package/dist/auth/providers/kimi-coding.d.ts +38 -0
- package/dist/auth/providers/kimi-coding.d.ts.map +1 -0
- package/dist/auth/providers/kimi-coding.js +228 -0
- package/dist/auth/providers/kimi-coding.js.map +1 -0
- package/dist/auth/providers/openai-codex.d.ts +141 -0
- package/dist/auth/providers/openai-codex.d.ts.map +1 -0
- package/dist/auth/providers/openai-codex.js +533 -0
- package/dist/auth/providers/openai-codex.js.map +1 -0
- package/dist/auth/providers/xai.d.ts +64 -0
- package/dist/auth/providers/xai.d.ts.map +1 -0
- package/dist/auth/providers/xai.js +226 -0
- package/dist/auth/providers/xai.js.map +1 -0
- package/dist/auth/storage.d.ts +214 -0
- package/dist/auth/storage.d.ts.map +1 -0
- package/dist/auth/storage.js +774 -0
- package/dist/auth/storage.js.map +1 -0
- package/dist/auth/types.d.ts +164 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +1 -0
- package/dist/clipboard/index.d.ts +26 -0
- package/dist/clipboard/index.d.ts.map +1 -0
- package/dist/clipboard/index.js +226 -0
- package/dist/clipboard/index.js.map +1 -0
- package/dist/constants.d.ts +12 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +20 -0
- package/dist/constants.js.map +1 -0
- package/dist/error-classification.d.ts +10 -0
- package/dist/error-classification.d.ts.map +1 -0
- package/dist/error-classification.js +22 -0
- package/dist/error-classification.js.map +1 -0
- package/dist/evals/context-builder.d.ts +41 -0
- package/dist/evals/context-builder.d.ts.map +1 -0
- package/dist/evals/context-builder.js +161 -0
- package/dist/evals/context-builder.js.map +1 -0
- package/dist/evals/index.d.ts +4 -0
- package/dist/evals/index.d.ts.map +1 -0
- package/dist/evals/index.js +5 -0
- package/dist/evals/scorers/classify-command.d.ts +31 -0
- package/dist/evals/scorers/classify-command.d.ts.map +1 -0
- package/dist/evals/scorers/classify-command.js +73 -0
- package/dist/evals/scorers/classify-command.js.map +1 -0
- package/dist/evals/scorers/efficiency.d.ts +44 -0
- package/dist/evals/scorers/efficiency.d.ts.map +1 -0
- package/dist/evals/scorers/efficiency.js +259 -0
- package/dist/evals/scorers/efficiency.js.map +1 -0
- package/dist/evals/scorers/extract-tools.d.ts +25 -0
- package/dist/evals/scorers/extract-tools.d.ts.map +1 -0
- package/dist/evals/scorers/extract-tools.js +60 -0
- package/dist/evals/scorers/extract-tools.js.map +1 -0
- package/dist/evals/scorers/index.d.ts +3 -0
- package/dist/evals/scorers/index.d.ts.map +1 -0
- package/dist/evals/scorers/index.js +3 -0
- package/dist/evals/scorers/outcome.d.ts +49 -0
- package/dist/evals/scorers/outcome.d.ts.map +1 -0
- package/dist/evals/scorers/outcome.js +347 -0
- package/dist/evals/scorers/outcome.js.map +1 -0
- package/dist/experimental-agent.d.ts +11 -0
- package/dist/experimental-agent.d.ts.map +1 -0
- package/dist/experimental-agent.js +36 -0
- package/dist/experimental-agent.js.map +1 -0
- package/dist/goal-manager.d.ts +114 -0
- package/dist/goal-manager.d.ts.map +1 -0
- package/dist/goal-manager.js +354 -0
- package/dist/goal-manager.js.map +1 -0
- package/dist/goal-signal.d.ts +14 -0
- package/dist/goal-signal.d.ts.map +1 -0
- package/dist/goal-signal.js +17 -0
- package/dist/goal-signal.js.map +1 -0
- package/dist/headless/cli.d.ts +48 -0
- package/dist/headless/cli.d.ts.map +1 -0
- package/dist/headless/cli.js +239 -0
- package/dist/headless/cli.js.map +1 -0
- package/dist/headless/flags.d.ts +33 -0
- package/dist/headless/flags.d.ts.map +1 -0
- package/dist/headless/flags.js +203 -0
- package/dist/headless/flags.js.map +1 -0
- package/dist/headless/format.d.ts +39 -0
- package/dist/headless/format.d.ts.map +1 -0
- package/dist/headless/format.js +85 -0
- package/dist/headless/format.js.map +1 -0
- package/dist/headless/index.d.ts +25 -0
- package/dist/headless/index.d.ts.map +1 -0
- package/dist/headless/index.js +6 -0
- package/dist/headless/policy.d.ts +17 -0
- package/dist/headless/policy.d.ts.map +1 -0
- package/dist/headless/policy.js +42 -0
- package/dist/headless/policy.js.map +1 -0
- package/dist/headless/run-mc.d.ts +7 -0
- package/dist/headless/run-mc.d.ts.map +1 -0
- package/dist/headless/run-mc.js +408 -0
- package/dist/headless/run-mc.js.map +1 -0
- package/dist/headless/types.d.ts +174 -0
- package/dist/headless/types.d.ts.map +1 -0
- package/dist/headless/types.js +19 -0
- package/dist/headless/types.js.map +1 -0
- package/dist/hooks/config.d.ts +11 -0
- package/dist/hooks/config.d.ts.map +1 -0
- package/dist/hooks/config.js +80 -0
- package/dist/hooks/config.js.map +1 -0
- package/dist/hooks/executor.d.ts +13 -0
- package/dist/hooks/executor.d.ts.map +1 -0
- package/dist/hooks/executor.js +129 -0
- package/dist/hooks/executor.js.map +1 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +5 -0
- package/dist/hooks/manager.d.ts +54 -0
- package/dist/hooks/manager.d.ts.map +1 -0
- package/dist/hooks/manager.js +241 -0
- package/dist/hooks/manager.js.map +1 -0
- package/dist/hooks/types.d.ts +172 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +8 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +463 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1305 -0
- package/dist/index.js.map +1 -0
- package/dist/ipc/ipc-reporter.d.ts +14 -0
- package/dist/ipc/ipc-reporter.d.ts.map +1 -0
- package/dist/ipc/ipc-reporter.js +21 -0
- package/dist/ipc/ipc-reporter.js.map +1 -0
- package/dist/knowledge-inspector.d.ts +123 -0
- package/dist/knowledge-inspector.d.ts.map +1 -0
- package/dist/knowledge-inspector.js +516 -0
- package/dist/knowledge-inspector.js.map +1 -0
- package/dist/knowledge-scope.d.ts +35 -0
- package/dist/knowledge-scope.d.ts.map +1 -0
- package/dist/knowledge-scope.js +47 -0
- package/dist/knowledge-scope.js.map +1 -0
- package/dist/lsp/client.d.ts +56 -0
- package/dist/lsp/client.d.ts.map +1 -0
- package/dist/lsp/client.js +251 -0
- package/dist/lsp/client.js.map +1 -0
- package/dist/lsp/index.d.ts +4 -0
- package/dist/lsp/index.d.ts.map +1 -0
- package/dist/lsp/index.js +4 -0
- package/dist/lsp/language.d.ts +9 -0
- package/dist/lsp/language.d.ts.map +1 -0
- package/dist/lsp/language.js +44 -0
- package/dist/lsp/language.js.map +1 -0
- package/dist/lsp/manager.d.ts +34 -0
- package/dist/lsp/manager.d.ts.map +1 -0
- package/dist/lsp/manager.js +82 -0
- package/dist/lsp/manager.js.map +1 -0
- package/dist/lsp/server.d.ts +27 -0
- package/dist/lsp/server.d.ts.map +1 -0
- package/dist/lsp/server.js +159 -0
- package/dist/lsp/server.js.map +1 -0
- package/dist/lsp/workspace.d.ts +9 -0
- package/dist/lsp/workspace.d.ts.map +1 -0
- package/dist/lsp/workspace.js +55 -0
- package/dist/lsp/workspace.js.map +1 -0
- package/dist/mcp/config.d.ts +77 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +316 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/index.d.ts +6 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +3 -0
- package/dist/mcp/manager.d.ts +102 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +650 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/state.d.ts +35 -0
- package/dist/mcp/state.d.ts.map +1 -0
- package/dist/mcp/state.js +97 -0
- package/dist/mcp/state.js.map +1 -0
- package/dist/mcp/types.d.ts +139 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +1 -0
- package/dist/onboarding/custom-packs.d.ts +7 -0
- package/dist/onboarding/custom-packs.d.ts.map +1 -0
- package/dist/onboarding/custom-packs.js +20 -0
- package/dist/onboarding/custom-packs.js.map +1 -0
- package/dist/onboarding/custom-providers.d.ts +4 -0
- package/dist/onboarding/custom-providers.d.ts.map +1 -0
- package/dist/onboarding/custom-providers.js +30 -0
- package/dist/onboarding/custom-providers.js.map +1 -0
- package/dist/onboarding/index.d.ts +5 -0
- package/dist/onboarding/index.d.ts.map +1 -0
- package/dist/onboarding/index.js +3 -0
- package/dist/onboarding/om-settings.d.ts +47 -0
- package/dist/onboarding/om-settings.d.ts.map +1 -0
- package/dist/onboarding/om-settings.js +83 -0
- package/dist/onboarding/om-settings.js.map +1 -0
- package/dist/onboarding/pack-activation.d.ts +52 -0
- package/dist/onboarding/pack-activation.d.ts.map +1 -0
- package/dist/onboarding/pack-activation.js +108 -0
- package/dist/onboarding/pack-activation.js.map +1 -0
- package/dist/onboarding/packs.d.ts +102 -0
- package/dist/onboarding/packs.d.ts.map +1 -0
- package/dist/onboarding/packs.js +278 -0
- package/dist/onboarding/packs.js.map +1 -0
- package/dist/onboarding/settings.d.ts +538 -0
- package/dist/onboarding/settings.d.ts.map +1 -0
- package/dist/onboarding/settings.js +1060 -0
- package/dist/onboarding/settings.js.map +1 -0
- package/dist/permissions.d.ts +55 -0
- package/dist/permissions.d.ts.map +1 -0
- package/dist/permissions.js +142 -0
- package/dist/permissions.js.map +1 -0
- package/dist/plugin.d.ts +156 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +30 -0
- package/dist/plugin.js.map +1 -0
- package/dist/plugins/dependencies.d.ts +9 -0
- package/dist/plugins/dependencies.d.ts.map +1 -0
- package/dist/plugins/dependencies.js +87 -0
- package/dist/plugins/dependencies.js.map +1 -0
- package/dist/plugins/install.d.ts +21 -0
- package/dist/plugins/install.d.ts.map +1 -0
- package/dist/plugins/install.js +190 -0
- package/dist/plugins/install.js.map +1 -0
- package/dist/plugins/loader.d.ts +19 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +260 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +98 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +456 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/manifest.d.ts +14 -0
- package/dist/plugins/manifest.d.ts.map +1 -0
- package/dist/plugins/manifest.js +50 -0
- package/dist/plugins/manifest.js.map +1 -0
- package/dist/plugins/package-link.d.ts +3 -0
- package/dist/plugins/package-link.d.ts.map +1 -0
- package/dist/plugins/package-link.js +61 -0
- package/dist/plugins/package-link.js.map +1 -0
- package/dist/plugins/paths.d.ts +10 -0
- package/dist/plugins/paths.d.ts.map +1 -0
- package/dist/plugins/paths.js +25 -0
- package/dist/plugins/paths.js.map +1 -0
- package/dist/plugins/registry.d.ts +8 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +112 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/scaffold.d.ts +10 -0
- package/dist/plugins/scaffold.d.ts.map +1 -0
- package/dist/plugins/scaffold.js +116 -0
- package/dist/plugins/scaffold.js.map +1 -0
- package/dist/plugins/signal-lane.d.ts +58 -0
- package/dist/plugins/signal-lane.d.ts.map +1 -0
- package/dist/plugins/signal-lane.js +166 -0
- package/dist/plugins/signal-lane.js.map +1 -0
- package/dist/plugins/types.d.ts +81 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +1 -0
- package/dist/process-memory-diagnostics.d.ts +135 -0
- package/dist/process-memory-diagnostics.d.ts.map +1 -0
- package/dist/process-memory-diagnostics.js +499 -0
- package/dist/process-memory-diagnostics.js.map +1 -0
- package/dist/processors/plan-rejection-abort.d.ts +12 -0
- package/dist/processors/plan-rejection-abort.d.ts.map +1 -0
- package/dist/processors/plan-rejection-abort.js +54 -0
- package/dist/processors/plan-rejection-abort.js.map +1 -0
- package/dist/providers/amazon-bedrock-gateway.d.ts +47 -0
- package/dist/providers/amazon-bedrock-gateway.d.ts.map +1 -0
- package/dist/providers/amazon-bedrock-gateway.js +144 -0
- package/dist/providers/amazon-bedrock-gateway.js.map +1 -0
- package/dist/providers/amazon-bedrock.d.ts +28 -0
- package/dist/providers/amazon-bedrock.d.ts.map +1 -0
- package/dist/providers/amazon-bedrock.js +102 -0
- package/dist/providers/amazon-bedrock.js.map +1 -0
- package/dist/providers/anthropic-prompt-cache.d.ts +19 -0
- package/dist/providers/anthropic-prompt-cache.d.ts.map +1 -0
- package/dist/providers/anthropic-prompt-cache.js +11 -0
- package/dist/providers/anthropic-prompt-cache.js.map +1 -0
- package/dist/providers/anthropic-thinking.d.ts +5 -0
- package/dist/providers/anthropic-thinking.d.ts.map +1 -0
- package/dist/providers/anthropic-thinking.js +25 -0
- package/dist/providers/anthropic-thinking.js.map +1 -0
- package/dist/providers/claude-max.d.ts +67 -0
- package/dist/providers/claude-max.d.ts.map +1 -0
- package/dist/providers/claude-max.js +226 -0
- package/dist/providers/claude-max.js.map +1 -0
- package/dist/providers/github-copilot-gateway.d.ts +35 -0
- package/dist/providers/github-copilot-gateway.d.ts.map +1 -0
- package/dist/providers/github-copilot-gateway.js +61 -0
- package/dist/providers/github-copilot-gateway.js.map +1 -0
- package/dist/providers/github-copilot.d.ts +60 -0
- package/dist/providers/github-copilot.d.ts.map +1 -0
- package/dist/providers/github-copilot.js +318 -0
- package/dist/providers/github-copilot.js.map +1 -0
- package/dist/providers/google-thinking.d.ts +31 -0
- package/dist/providers/google-thinking.d.ts.map +1 -0
- package/dist/providers/google-thinking.js +67 -0
- package/dist/providers/google-thinking.js.map +1 -0
- package/dist/providers/kimi-coding.d.ts +14 -0
- package/dist/providers/kimi-coding.d.ts.map +1 -0
- package/dist/providers/kimi-coding.js +78 -0
- package/dist/providers/kimi-coding.js.map +1 -0
- package/dist/providers/model-ids.d.ts +30 -0
- package/dist/providers/model-ids.d.ts.map +1 -0
- package/dist/providers/model-ids.js +79 -0
- package/dist/providers/model-ids.js.map +1 -0
- package/dist/providers/openai-codex.d.ts +84 -0
- package/dist/providers/openai-codex.d.ts.map +1 -0
- package/dist/providers/openai-codex.js +347 -0
- package/dist/providers/openai-codex.js.map +1 -0
- package/dist/providers/provider-thinking.d.ts +23 -0
- package/dist/providers/provider-thinking.d.ts.map +1 -0
- package/dist/providers/provider-thinking.js +64 -0
- package/dist/providers/provider-thinking.js.map +1 -0
- package/dist/providers/thinking-request.d.ts +14 -0
- package/dist/providers/thinking-request.d.ts.map +1 -0
- package/dist/providers/thinking-request.js +90 -0
- package/dist/providers/thinking-request.js.map +1 -0
- package/dist/providers/xai.d.ts +33 -0
- package/dist/providers/xai.d.ts.map +1 -0
- package/dist/providers/xai.js +71 -0
- package/dist/providers/xai.js.map +1 -0
- package/dist/schedules/index.d.ts +10 -0
- package/dist/schedules/index.d.ts.map +1 -0
- package/dist/schedules/index.js +6 -0
- package/dist/schedules/interval.d.ts +49 -0
- package/dist/schedules/interval.d.ts.map +1 -0
- package/dist/schedules/interval.js +215 -0
- package/dist/schedules/interval.js.map +1 -0
- package/dist/schedules/prompt.d.ts +36 -0
- package/dist/schedules/prompt.d.ts.map +1 -0
- package/dist/schedules/prompt.js +39 -0
- package/dist/schedules/prompt.js.map +1 -0
- package/dist/schedules/run-script.d.ts +8 -0
- package/dist/schedules/run-script.d.ts.map +1 -0
- package/dist/schedules/run-script.js +83 -0
- package/dist/schedules/run-script.js.map +1 -0
- package/dist/schedules/scheduler.d.ts +101 -0
- package/dist/schedules/scheduler.d.ts.map +1 -0
- package/dist/schedules/scheduler.js +169 -0
- package/dist/schedules/scheduler.js.map +1 -0
- package/dist/schedules/tools.d.ts +57 -0
- package/dist/schedules/tools.d.ts.map +1 -0
- package/dist/schedules/tools.js +220 -0
- package/dist/schedules/tools.js.map +1 -0
- package/dist/schema.d.ts +499 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +134 -0
- package/dist/schema.js.map +1 -0
- package/dist/theme-palette.d.ts +17 -0
- package/dist/theme-palette.d.ts.map +1 -0
- package/dist/theme-palette.js +21 -0
- package/dist/theme-palette.js.map +1 -0
- package/dist/thinking-catalog.d.ts +4 -0
- package/dist/thinking-catalog.d.ts.map +1 -0
- package/dist/thinking-catalog.js +13 -0
- package/dist/thinking-catalog.js.map +1 -0
- package/dist/thinking.d.ts +37 -0
- package/dist/thinking.d.ts.map +1 -0
- package/dist/thinking.js +137 -0
- package/dist/thinking.js.map +1 -0
- package/dist/tool-names.d.ts +77 -0
- package/dist/tool-names.d.ts.map +1 -0
- package/dist/tool-names.js +56 -0
- package/dist/tool-names.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +3 -0
- package/dist/tools/request-sandbox-access.d.ts +6 -0
- package/dist/tools/request-sandbox-access.d.ts.map +1 -0
- package/dist/tools/request-sandbox-access.js +80 -0
- package/dist/tools/request-sandbox-access.js.map +1 -0
- package/dist/tools/utils.d.ts +20 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +32 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools/web-search.d.ts +114 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +155 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/tools/workflows/create-workflow.d.ts +7 -0
- package/dist/tools/workflows/create-workflow.d.ts.map +1 -0
- package/dist/tools/workflows/create-workflow.js +81 -0
- package/dist/tools/workflows/create-workflow.js.map +1 -0
- package/dist/tools/workflows/delete-workflow.d.ts +7 -0
- package/dist/tools/workflows/delete-workflow.d.ts.map +1 -0
- package/dist/tools/workflows/delete-workflow.js +21 -0
- package/dist/tools/workflows/delete-workflow.js.map +1 -0
- package/dist/tools/workflows/ephemeral-memory.d.ts +28 -0
- package/dist/tools/workflows/ephemeral-memory.d.ts.map +1 -0
- package/dist/tools/workflows/ephemeral-memory.js +44 -0
- package/dist/tools/workflows/ephemeral-memory.js.map +1 -0
- package/dist/tools/workflows/extract-json-schema.d.ts +12 -0
- package/dist/tools/workflows/extract-json-schema.d.ts.map +1 -0
- package/dist/tools/workflows/extract-json-schema.js +22 -0
- package/dist/tools/workflows/extract-json-schema.js.map +1 -0
- package/dist/tools/workflows/get-workflow.d.ts +11 -0
- package/dist/tools/workflows/get-workflow.d.ts.map +1 -0
- package/dist/tools/workflows/get-workflow.js +34 -0
- package/dist/tools/workflows/get-workflow.js.map +1 -0
- package/dist/tools/workflows/list-available-agents.d.ts +8 -0
- package/dist/tools/workflows/list-available-agents.d.ts.map +1 -0
- package/dist/tools/workflows/list-available-agents.js +32 -0
- package/dist/tools/workflows/list-available-agents.js.map +1 -0
- package/dist/tools/workflows/list-available-classifiers.d.ts +19 -0
- package/dist/tools/workflows/list-available-classifiers.d.ts.map +1 -0
- package/dist/tools/workflows/list-available-classifiers.js +56 -0
- package/dist/tools/workflows/list-available-classifiers.js.map +1 -0
- package/dist/tools/workflows/list-available-tools.d.ts +9 -0
- package/dist/tools/workflows/list-available-tools.d.ts.map +1 -0
- package/dist/tools/workflows/list-available-tools.js +40 -0
- package/dist/tools/workflows/list-available-tools.js.map +1 -0
- package/dist/tools/workflows/list-available-workflows.d.ts +9 -0
- package/dist/tools/workflows/list-available-workflows.d.ts.map +1 -0
- package/dist/tools/workflows/list-available-workflows.js +32 -0
- package/dist/tools/workflows/list-available-workflows.js.map +1 -0
- package/dist/tools/workflows/list-workflows.d.ts +9 -0
- package/dist/tools/workflows/list-workflows.d.ts.map +1 -0
- package/dist/tools/workflows/list-workflows.js +33 -0
- package/dist/tools/workflows/list-workflows.js.map +1 -0
- package/dist/tools/workflows/run-workflow.d.ts +9 -0
- package/dist/tools/workflows/run-workflow.d.ts.map +1 -0
- package/dist/tools/workflows/run-workflow.js +52 -0
- package/dist/tools/workflows/run-workflow.js.map +1 -0
- package/dist/tools/workflows/save-workflow.d.ts +1125 -0
- package/dist/tools/workflows/save-workflow.d.ts.map +1 -0
- package/dist/tools/workflows/save-workflow.js +28 -0
- package/dist/tools/workflows/save-workflow.js.map +1 -0
- package/dist/tools/workflows/tool-ids.d.ts +16 -0
- package/dist/tools/workflows/tool-ids.d.ts.map +1 -0
- package/dist/tools/workflows/tool-ids.js +20 -0
- package/dist/tools/workflows/tool-ids.js.map +1 -0
- package/dist/utils/binaries.d.ts +7 -0
- package/dist/utils/binaries.d.ts.map +1 -0
- package/dist/utils/binaries.js +78 -0
- package/dist/utils/binaries.js.map +1 -0
- package/dist/utils/debug-log.d.ts +12 -0
- package/dist/utils/debug-log.d.ts.map +1 -0
- package/dist/utils/debug-log.js +59 -0
- package/dist/utils/debug-log.js.map +1 -0
- package/dist/utils/discarding-scores-storage.d.ts +33 -0
- package/dist/utils/discarding-scores-storage.d.ts.map +1 -0
- package/dist/utils/discarding-scores-storage.js +54 -0
- package/dist/utils/discarding-scores-storage.js.map +1 -0
- package/dist/utils/errors.d.ts +36 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +196 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/gateway-sync.d.ts +26 -0
- package/dist/utils/gateway-sync.d.ts.map +1 -0
- package/dist/utils/gateway-sync.js +61 -0
- package/dist/utils/gateway-sync.js.map +1 -0
- package/dist/utils/maintenance-lock.d.ts +42 -0
- package/dist/utils/maintenance-lock.d.ts.map +1 -0
- package/dist/utils/maintenance-lock.js +199 -0
- package/dist/utils/maintenance-lock.js.map +1 -0
- package/dist/utils/notification-dispatch.d.ts +59 -0
- package/dist/utils/notification-dispatch.d.ts.map +1 -0
- package/dist/utils/notification-dispatch.js +109 -0
- package/dist/utils/notification-dispatch.js.map +1 -0
- package/dist/utils/open-url.d.ts +10 -0
- package/dist/utils/open-url.d.ts.map +1 -0
- package/dist/utils/open-url.js +30 -0
- package/dist/utils/open-url.js.map +1 -0
- package/dist/utils/path-security.d.ts +2 -0
- package/dist/utils/path-security.d.ts.map +1 -0
- package/dist/utils/path-security.js +10 -0
- package/dist/utils/path-security.js.map +1 -0
- package/dist/utils/plan-diff.d.ts +25 -0
- package/dist/utils/plan-diff.d.ts.map +1 -0
- package/dist/utils/plan-diff.js +62 -0
- package/dist/utils/plan-diff.js.map +1 -0
- package/dist/utils/plans.d.ts +59 -0
- package/dist/utils/plans.d.ts.map +1 -0
- package/dist/utils/plans.js +117 -0
- package/dist/utils/plans.js.map +1 -0
- package/dist/utils/project.d.ts +160 -0
- package/dist/utils/project.d.ts.map +1 -0
- package/dist/utils/project.js +364 -0
- package/dist/utils/project.js.map +1 -0
- package/dist/utils/prune-cli.d.ts +24 -0
- package/dist/utils/prune-cli.d.ts.map +1 -0
- package/dist/utils/prune-cli.js +125 -0
- package/dist/utils/prune-cli.js.map +1 -0
- package/dist/utils/signals-pubsub.d.ts +101 -0
- package/dist/utils/signals-pubsub.d.ts.map +1 -0
- package/dist/utils/signals-pubsub.js +410 -0
- package/dist/utils/signals-pubsub.js.map +1 -0
- package/dist/utils/slash-command-loader.d.ts +52 -0
- package/dist/utils/slash-command-loader.d.ts.map +1 -0
- package/dist/utils/slash-command-loader.js +142 -0
- package/dist/utils/slash-command-loader.js.map +1 -0
- package/dist/utils/slash-command-processor.d.ts +14 -0
- package/dist/utils/slash-command-processor.d.ts.map +1 -0
- package/dist/utils/slash-command-processor.js +109 -0
- package/dist/utils/slash-command-processor.js.map +1 -0
- package/dist/utils/stdin-pipe.d.ts +33 -0
- package/dist/utils/stdin-pipe.d.ts.map +1 -0
- package/dist/utils/stdin-pipe.js +96 -0
- package/dist/utils/stdin-pipe.js.map +1 -0
- package/dist/utils/storage-factory.d.ts +50 -0
- package/dist/utils/storage-factory.d.ts.map +1 -0
- package/dist/utils/storage-factory.js +121 -0
- package/dist/utils/storage-factory.js.map +1 -0
- package/dist/utils/storage-maintenance.d.ts +121 -0
- package/dist/utils/storage-maintenance.d.ts.map +1 -0
- package/dist/utils/storage-maintenance.js +355 -0
- package/dist/utils/storage-maintenance.js.map +1 -0
- package/dist/utils/thread-lock.d.ts +26 -0
- package/dist/utils/thread-lock.d.ts.map +1 -0
- package/dist/utils/thread-lock.js +112 -0
- package/dist/utils/thread-lock.js.map +1 -0
- package/dist/utils/token-estimator.d.ts +3 -0
- package/dist/utils/token-estimator.d.ts.map +1 -0
- package/dist/utils/token-estimator.js +21 -0
- package/dist/utils/token-estimator.js.map +1 -0
- package/dist/utils/update-check.d.ts +151 -0
- package/dist/utils/update-check.d.ts.map +1 -0
- package/dist/utils/update-check.js +432 -0
- package/dist/utils/update-check.js.map +1 -0
- package/dist/voice/stt-registry.d.ts +64 -0
- package/dist/voice/stt-registry.d.ts.map +1 -0
- package/dist/voice/stt-registry.js +144 -0
- package/dist/voice/stt-registry.js.map +1 -0
- package/dist/workflows/register-primitives.d.ts +52 -0
- package/dist/workflows/register-primitives.d.ts.map +1 -0
- package/dist/workflows/register-primitives.js +40 -0
- package/dist/workflows/register-primitives.js.map +1 -0
- package/dist/workflows/service.d.ts +64 -0
- package/dist/workflows/service.d.ts.map +1 -0
- package/dist/workflows/service.js +53 -0
- package/dist/workflows/service.js.map +1 -0
- package/package.json +107 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-mc.js","names":["#maxBuffer","#closed","#resolvers","#buffer"],"sources":["../../src/headless/run-mc.ts"],"sourcesContent":["/**\n * Core programmatic runner for MastraCode headless runs.\n *\n * `runMC` is a pure async runner: it takes an already-built `controller` +\n * `session` (from `createMastraCode(...)`), resolves run config, subscribes to\n * the session, applies a {@link ResolutionPolicy} for approvals/suspensions,\n * sends the prompt, and aggregates events into a {@link RunMCResult}.\n *\n * It never touches `process.*` and never calls `process.exit`. The returned\n * {@link MCRun} is async-iterable over controller events and also resolves to a\n * final result via `result`.\n */\nimport { isSessionStartupCancelledError } from '@mastra/core/agent-controller';\nimport type { AgentControllerEvent, Session } from '@mastra/core/agent-controller';\n\nimport { MODEL_FALLBACK_STATE_KEY } from '../auth/account-rotation-processor.js';\nimport { GoalManager } from '../goal-manager.js';\nimport { createGoalReminderSignal } from '../goal-signal.js';\nimport { THREAD_ACTIVE_MODEL_PACK_ID_KEY } from '../onboarding/settings.js';\n\nimport { autoApprovePolicy } from './policy.js';\nimport type { MCRun, ResolutionPolicy, RunMCOptions, RunMCResult, RunMCStatus } from './types.js';\n\nfunction exitCodeForStatus(status: RunMCStatus): number {\n switch (status) {\n case 'completed':\n case 'done':\n return 0;\n case 'timeout':\n return 2;\n default:\n return 1;\n }\n}\n\ninterface MutableResult {\n text: string;\n finishReason?: string;\n usage?: RunMCResult['usage'];\n toolCalls: RunMCResult['toolCalls'];\n toolResults: RunMCResult['toolResults'];\n error?: RunMCResult['error'];\n threadId?: string;\n activeAssistantMessageId?: string;\n}\n\nfunction aggregate(event: AgentControllerEvent, acc: MutableResult): void {\n switch (event.type) {\n case 'message_start':\n if (event.message.role === 'assistant') acc.activeAssistantMessageId = event.message.id;\n break;\n case 'message_update':\n if (event.event.type === 'text-delta' && event.id === acc.activeAssistantMessageId) {\n acc.text += event.event.delta;\n }\n break;\n case 'message_end':\n if (event.id === acc.activeAssistantMessageId) acc.activeAssistantMessageId = undefined;\n break;\n case 'tool_start':\n acc.toolCalls.push({ id: event.toolCallId, name: event.toolName, args: event.args });\n break;\n case 'tool_end': {\n const matching = acc.toolCalls.find(c => c.id === event.toolCallId);\n acc.toolResults.push({\n id: event.toolCallId,\n name: matching?.name ?? '',\n result: event.result,\n isError: event.isError,\n });\n break;\n }\n case 'usage_update':\n acc.usage = {\n inputTokens: event.usage.promptTokens,\n outputTokens: event.usage.completionTokens,\n totalTokens: event.usage.totalTokens,\n };\n break;\n case 'error':\n acc.error = {\n name: event.error.name,\n message: event.error.message,\n stack: event.error.stack,\n };\n break;\n }\n}\n\n/** Resolve a thread by its exact ID. Titles are not unique, so we don't match on them. */\nasync function resolveThread<TState extends Record<string, unknown>>(\n session: Session<TState>,\n threadId: string,\n resourceId?: string,\n): Promise<{ threadId: string } | { error: string }> {\n const threads = await session.thread.list(resourceId ? { allResources: true } : undefined);\n\n const byId = threads.find(thread => thread.id === threadId && (!resourceId || thread.resourceId === resourceId));\n if (byId) return { threadId: byId.id };\n\n return { error: `No thread found with ID \"${threadId}\"` };\n}\n\n/**\n * A simple back-pressured async queue. Events are pushed in; consumers pull via\n * the async iterator. `close()` ends iteration after draining buffered events.\n *\n * Buffered events are bounded by `maxBuffer`: if a consumer never iterates (the\n * result-only path, `await run.result` without `for await (...)`) — or simply\n * falls far behind — the oldest buffered events are dropped instead of growing\n * without limit. The aggregated {@link RunMCResult} is built independently of\n * this queue, so dropping buffered events never affects the final result.\n */\nclass EventQueue<T> {\n #buffer: T[] = [];\n #resolvers: Array<(r: IteratorResult<T>) => void> = [];\n #closed = false;\n readonly #maxBuffer: number;\n\n constructor(maxBuffer = 10_000) {\n this.#maxBuffer = maxBuffer;\n }\n\n push(value: T): void {\n if (this.#closed) return;\n const resolve = this.#resolvers.shift();\n if (resolve) {\n resolve({ value, done: false });\n return;\n }\n this.#buffer.push(value);\n if (this.#buffer.length > this.#maxBuffer) {\n // Bound memory: drop the oldest event once over the cap.\n this.#buffer.shift();\n }\n }\n\n close(): void {\n if (this.#closed) return;\n this.#closed = true;\n for (const resolve of this.#resolvers.splice(0)) {\n resolve({ value: undefined as unknown as T, done: true });\n }\n }\n\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return {\n next: (): Promise<IteratorResult<T>> => {\n if (this.#buffer.length > 0) {\n return Promise.resolve({ value: this.#buffer.shift()!, done: false });\n }\n if (this.#closed) {\n return Promise.resolve({ value: undefined as unknown as T, done: true });\n }\n return new Promise<IteratorResult<T>>(resolve => this.#resolvers.push(resolve));\n },\n };\n }\n}\n\n/**\n * Run a headless MastraCode turn. Returns an {@link MCRun} handle that is\n * async-iterable over controller events and resolves to a {@link RunMCResult}.\n */\nexport function runMC<TState extends Record<string, unknown>>(options: RunMCOptions<TState>): MCRun {\n const { controller, session } = options;\n const goal = options.goal;\n const policy: ResolutionPolicy = options.policy ?? autoApprovePolicy;\n\n const queue = new EventQueue<AgentControllerEvent>();\n const acc: MutableResult = { text: '', toolCalls: [], toolResults: [] };\n\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n let timedOut = false;\n let aborted = false;\n let maxTurnsExceeded = false;\n let assistantTurns = 0;\n let activeAssistantMessageId: string | undefined;\n let settled = false;\n let unsubscribe: (() => void) | undefined;\n let resolveResult!: (r: RunMCResult) => void;\n\n const result = new Promise<RunMCResult>(resolve => {\n resolveResult = resolve;\n });\n\n function finish(status: RunMCStatus, data: Partial<RunMCResult> = {}): void {\n if (settled) return;\n settled = true;\n if (timeoutId) clearTimeout(timeoutId);\n unsubscribe?.();\n queue.close();\n resolveResult({\n status,\n text: acc.text,\n finishReason: acc.finishReason,\n usage: acc.usage,\n toolCalls: acc.toolCalls,\n toolResults: acc.toolResults,\n threadId: acc.threadId ?? session.thread.getId() ?? undefined,\n error: acc.error,\n exitCode: exitCodeForStatus(status),\n ...data,\n });\n }\n\n function fail(message: string, name = 'Error'): void {\n if (!acc.error) acc.error = { name, message };\n finish('error');\n }\n\n function abort(): void {\n if (settled) return;\n aborted = true;\n session.abort();\n }\n\n if (options.signal) {\n if (options.signal.aborted) {\n // Defer so the caller can attach iteration / result handlers first.\n queueMicrotask(() => abort());\n } else {\n options.signal.addEventListener('abort', () => abort(), { once: true });\n }\n }\n\n function armTimeout(): void {\n if (!options.timeoutMs || settled) return;\n if (timeoutId) clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n timedOut = true;\n session.abort();\n if (goal) finish('timeout');\n }, options.timeoutMs);\n }\n\n // Kick off the run asynchronously so the MCRun handle is returned synchronously.\n void (async () => {\n armTimeout();\n\n // --- Subscribe ---\n unsubscribe = session.subscribe(event => {\n if (settled) return;\n if (goal) armTimeout();\n\n if (event.type === 'tool_approval_required') {\n let decision: 'approve' | 'deny';\n try {\n decision = policy.onToolApproval(event);\n } catch (err) {\n fail(`Resolution policy failed: ${(err as Error).message}`);\n return;\n }\n session.respondToToolApproval({\n decision: decision === 'approve' ? 'approve' : 'decline',\n toolCallId: event.toolCallId,\n });\n queue.push(event);\n return;\n }\n\n if (event.type === 'tool_suspended') {\n let outcome: ReturnType<ResolutionPolicy['onSuspension']>;\n try {\n outcome = policy.onSuspension(event);\n } catch (err) {\n fail(`Resolution policy failed: ${(err as Error).message}`);\n return;\n }\n if ('abort' in outcome) {\n queue.push(event);\n abort();\n return;\n }\n void session.respondToToolSuspension({ toolCallId: event.toolCallId, resumeData: outcome.resumeData });\n queue.push(event);\n return;\n }\n\n if (event.type === 'message_start' && event.message.role === 'assistant') {\n activeAssistantMessageId = event.message.id;\n }\n\n aggregate(event, acc);\n queue.push(event);\n\n if (event.type === 'error' && goal) {\n finish('error');\n return;\n }\n\n // Count agentic turns (one assistant response = one turn). When the cap is\n // reached, abort the run; agent_end then resolves as 'max_turns'.\n if (event.type === 'message_end' && event.id === activeAssistantMessageId && options.maxTurns !== undefined) {\n activeAssistantMessageId = undefined;\n assistantTurns += 1;\n if (assistantTurns >= options.maxTurns && !maxTurnsExceeded) {\n maxTurnsExceeded = true;\n abort();\n }\n }\n\n if (event.type === 'goal_evaluation' && goal && !event.payload.pending) {\n if (event.payload.status === 'done' || event.payload.status === 'paused') {\n finish(event.payload.status, {\n objective: goal.objective,\n goalEvent: event,\n reason: event.payload.reason ?? event.payload.results?.[0]?.reason,\n iterations: event.payload.iteration,\n maxRuns: event.payload.maxRuns,\n });\n }\n return;\n }\n\n if (event.type === 'agent_end') {\n acc.finishReason = event.reason;\n // Goal evaluations can arrive after the agent stream ends, so goal runs\n // remain active until a terminal goal_evaluation is emitted.\n if (goal) return;\n if (timedOut) {\n finish('timeout');\n } else if (event.reason === 'error') {\n finish('error');\n } else if (maxTurnsExceeded && event.reason !== 'complete') {\n // The cap forced an abort while the agent still had work to do.\n finish('max_turns');\n } else if ((event.reason === 'aborted' || aborted) && !maxTurnsExceeded) {\n finish('aborted');\n } else {\n finish('completed');\n }\n }\n });\n\n // --- Thread resolution (read-only) ---\n const thread = options.thread;\n const targetResourceId = options.resourceId ?? session.identity.getResourceId();\n let restoredThreadId: string | undefined;\n try {\n if (thread?.id) {\n const resolved = await resolveThread(session, thread.id, targetResourceId);\n if ('error' in resolved) return fail(resolved.error);\n restoredThreadId = resolved.threadId;\n } else if (thread?.continueLatest) {\n const threads = await session.thread.list(targetResourceId ? { allResources: true } : undefined);\n const resourceThreads = targetResourceId\n ? threads.filter(candidate => candidate.resourceId === targetResourceId)\n : threads;\n if (resourceThreads.length > 0) {\n restoredThreadId = [...resourceThreads].sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime())[0]!.id;\n }\n }\n } catch (err) {\n return fail(`Failed to resolve thread: ${(err as Error).message}`);\n }\n\n // --- Config validation (read-only) ---\n const restoredThreadSelection = Boolean(restoredThreadId || thread?.clone);\n const modeIdForModel = options.mode ?? (options.modeDefaults ? session.mode.get() : undefined);\n const configuredDefaultModelId = modeIdForModel ? options.modeDefaults?.[modeIdForModel] : undefined;\n // A pack's model is not resolved here: a resumed thread restores its\n // persisted mode during thread selection, and the pack selection depends\n // on that mode. It is resolved and validated during config application.\n const modelIdToApply = options.pack\n ? options.model\n : (options.model ?? (options.mode || !restoredThreadSelection ? configuredDefaultModelId : undefined));\n // Where modelIdToApply came from, so validation errors name the right source.\n const modelSource = options.model ? 'flag' : 'mode';\n try {\n if (options.mode && !controller.listModes().some(mode => mode.id === options.mode)) {\n return fail(`Unknown mode: \"${options.mode}\"`);\n }\n\n if (modelIdToApply) {\n const available = await controller.listAvailableModels();\n const match = available.find(model => model.id === modelIdToApply);\n if (!match) {\n if (modelSource === 'flag') return fail(`Unknown model: \"${modelIdToApply}\"`);\n return fail(`Unknown model \"${modelIdToApply}\" configured for mode \"${modeIdForModel}\"`);\n }\n if (!match.hasApiKey) {\n const keyHint = match.apiKeyEnvVar ? ` Set ${match.apiKeyEnvVar} to use this model.` : '';\n if (modelSource === 'flag') return fail(`Model \"${modelIdToApply}\" has no API key configured.${keyHint}`);\n return fail(`Model \"${modelIdToApply}\" (mode: ${modeIdForModel}) has no API key configured.${keyHint}`);\n }\n }\n } catch (err) {\n return fail(`Failed to resolve run config: ${(err as Error).message}`);\n }\n\n // --- Resource id ---\n try {\n if (options.resourceId) {\n await controller.setResourceId(session, { resourceId: options.resourceId });\n }\n } catch (err) {\n return fail(`Failed to set resource id: ${(err as Error).message}`);\n }\n\n // --- Thread selection ---\n try {\n if (restoredThreadId) {\n await session.thread.switch({ threadId: restoredThreadId });\n } else if (!thread?.clone) {\n await session.thread.create();\n }\n } catch (err) {\n return fail(`Failed to select thread: ${(err as Error).message}`);\n }\n\n // --- Clone ---\n if (thread?.clone) {\n try {\n await session.thread.clone();\n } catch (err) {\n return fail(`Failed to clone thread: ${(err as Error).message}`);\n }\n }\n\n // --- Config application ---\n try {\n if (options.mode) {\n await session.mode.switch({ modeId: options.mode });\n }\n let packModelId: string | undefined;\n if (options.pack) {\n // Resolve the selection against the mode in effect now — thread\n // selection above may have restored a resumed thread's persisted mode.\n const packModeId = options.mode ?? session.mode.get();\n const packSelection = options.pack.resolve(packModeId);\n if (!packSelection) {\n return fail(`Model pack \"${options.pack.id}\" has no model for ${packModeId} mode`);\n }\n const available = await controller.listAvailableModels();\n const match = available.find(model => model.id === packSelection.modelId);\n if (!match) {\n return fail(`Unknown model \"${packSelection.modelId}\" from pack \"${options.pack.id}\"`);\n }\n if (!match.hasApiKey) {\n const keyHint = match.apiKeyEnvVar ? ` Set ${match.apiKeyEnvVar} to use this model.` : '';\n return fail(\n `Model \"${packSelection.modelId}\" (pack: ${options.pack.id}) has no API key configured.${keyHint}`,\n );\n }\n packModelId = packSelection.modelId;\n // Mirror /models → Activate on the session: sticky thread pack id,\n // subagent models, and the fallback route. Clears any pending fallback\n // from a continued thread so the pack's own route starts clean.\n await session.thread.setSetting({ key: THREAD_ACTIVE_MODEL_PACK_ID_KEY, value: options.pack.id });\n await session.thread.setSetting({ key: MODEL_FALLBACK_STATE_KEY, value: undefined });\n for (const [agentType, modelId] of Object.entries(packSelection.subagentModels ?? {})) {\n await session.subagents.model.set({ modelId, agentType });\n }\n await session.state.set({\n modelRoute: packSelection.modelRoute,\n [MODEL_FALLBACK_STATE_KEY]: null,\n } as unknown as Partial<TState>);\n }\n const sessionModelId = modelIdToApply ?? packModelId;\n if (sessionModelId) {\n await session.model.switch(sessionModelId);\n }\n // Persist the pack activation (global default) only once the pack has\n // fully taken effect on the session — a failed model switch above must\n // not leave the global default changed.\n options.pack?.onApplied?.();\n if (options.thinkingLevel) {\n await session.state.set({ thinkingLevel: options.thinkingLevel } as unknown as Partial<TState>);\n }\n } catch (err) {\n return fail(`Failed to apply run config: ${(err as Error).message}`);\n }\n\n // --- Title ---\n if (options.title) {\n try {\n await session.thread.rename({ title: options.title });\n } catch (err) {\n return fail(`Failed to set thread title: ${(err as Error).message}`);\n }\n }\n\n // --- Start ---\n try {\n if (goal) {\n const threadId = session.thread.getId();\n if (!threadId || !(await session.thread.getById({ threadId }))) {\n await session.thread.create();\n }\n\n const goalManager = goal.goalManager ?? new GoalManager();\n const state = {\n controller,\n session,\n goalManager,\n pendingNewThread: false,\n } as any;\n const objective = await goalManager.setGoal(state, goal.objective, goal.judgeModelId, goal.maxRuns);\n if (!objective) return fail('Failed to set goal.');\n\n const agent = controller.getCurrentAgent(session);\n const persisted = await agent.getObjective({ threadId: session.thread.getId()! });\n if (!persisted || persisted.id !== objective.id) {\n return fail('Failed to persist goal objective before sending goal signal.');\n }\n\n await goalManager.saveToThread(state);\n if (!settled) await session.sendSignal(createGoalReminderSignal(objective)).accepted;\n } else {\n if (!options.prompt) return fail('A prompt or goal is required.');\n await session.sendMessage({ content: options.prompt });\n }\n } catch (err) {\n if (\n isSessionStartupCancelledError(err) ||\n (err instanceof Error && err.name === 'AbortError' && (aborted || timedOut || options.signal?.aborted))\n ) {\n return finish(timedOut ? 'timeout' : maxTurnsExceeded ? 'max_turns' : 'aborted');\n }\n return fail(`Failed to start run: ${(err as Error).message}`);\n }\n })();\n\n return {\n result,\n abort,\n [Symbol.asyncIterator](): AsyncIterator<AgentControllerEvent> {\n return queue[Symbol.asyncIterator]();\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for the headless / programmatic MastraCode API.
|
|
3
|
+
*
|
|
4
|
+
* These types are consumed by the core runner (`runMC`), the resolution policy,
|
|
5
|
+
* the output formatters, and the CLI adapter. They are intentionally free of any
|
|
6
|
+
* `process.*` access so the core API is usable from CI / Node code.
|
|
7
|
+
*/
|
|
8
|
+
import type { AgentController, AgentControllerEvent, Session } from '@mastra/core/agent-controller';
|
|
9
|
+
import type { GoalManager } from '../goal-manager.js';
|
|
10
|
+
import type { PackSelection } from '../onboarding/pack-activation.js';
|
|
11
|
+
export type RunMode = 'build' | 'plan' | 'fast';
|
|
12
|
+
export type ThinkingLevel = 'off' | 'low' | 'medium' | 'high' | 'xhigh' | 'max';
|
|
13
|
+
export declare const VALID_MODES: readonly ["build", "plan", "fast"];
|
|
14
|
+
export declare const VALID_THINKING_LEVELS: readonly ["off", "low", "medium", "high", "xhigh", "max"];
|
|
15
|
+
/**
|
|
16
|
+
* Named permission modes for non-interactive runs. Maps to a built-in
|
|
17
|
+
* {@link ResolutionPolicy}:
|
|
18
|
+
* - `auto` — approve every tool and auto-resolve suspensions (the default).
|
|
19
|
+
* - `deny` — refuse every tool approval and abort on any suspension.
|
|
20
|
+
*/
|
|
21
|
+
export type PermissionMode = 'auto' | 'deny';
|
|
22
|
+
export declare const VALID_PERMISSION_MODES: readonly ["auto", "deny"];
|
|
23
|
+
/** How `runMC` should resume `tool_approval_required` and `tool_suspended` events. */
|
|
24
|
+
export interface ResolutionPolicy {
|
|
25
|
+
/**
|
|
26
|
+
* Called for every `tool_approval_required` event. Return the decision; the
|
|
27
|
+
* runner forwards it to `session.respondToToolApproval`.
|
|
28
|
+
*/
|
|
29
|
+
onToolApproval(event: Extract<AgentControllerEvent, {
|
|
30
|
+
type: 'tool_approval_required';
|
|
31
|
+
}>): 'approve' | 'deny';
|
|
32
|
+
/**
|
|
33
|
+
* Called for every `tool_suspended` event. Return `resumeData` to resume the
|
|
34
|
+
* tool, or `{ abort: true }` to abort the run.
|
|
35
|
+
*/
|
|
36
|
+
onSuspension(event: Extract<AgentControllerEvent, {
|
|
37
|
+
type: 'tool_suspended';
|
|
38
|
+
}>): {
|
|
39
|
+
resumeData: unknown;
|
|
40
|
+
} | {
|
|
41
|
+
abort: true;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/** Thread selection / mutation options resolved up front by `runMC`. */
|
|
45
|
+
export interface RunMCThreadOptions {
|
|
46
|
+
/** Resume a specific thread by its exact id. */
|
|
47
|
+
id?: string;
|
|
48
|
+
/** Resume the most recently updated thread instead of creating a new one. */
|
|
49
|
+
continueLatest?: boolean;
|
|
50
|
+
/** Clone the resolved (or current) thread before running — work on a copy. */
|
|
51
|
+
clone?: boolean;
|
|
52
|
+
}
|
|
53
|
+
interface RunMCBaseOptions<TState extends Record<string, unknown> = Record<string, unknown>> {
|
|
54
|
+
/** Controller built via `createMastraCode(...)`. */
|
|
55
|
+
controller: AgentController<TState>;
|
|
56
|
+
/** Session built via `createMastraCode(...)`. */
|
|
57
|
+
session: Session<TState>;
|
|
58
|
+
/** Explicit model id override. Takes precedence over `mode` and `pack`. */
|
|
59
|
+
model?: string;
|
|
60
|
+
/** Execution mode; resolves a model from `modeDefaults` when `model` is absent. */
|
|
61
|
+
mode?: RunMode;
|
|
62
|
+
/** Per-mode default model ids (resolved from settings at startup). */
|
|
63
|
+
modeDefaults?: Record<string, string>;
|
|
64
|
+
/**
|
|
65
|
+
* A model pack to activate for the run (canonical id from
|
|
66
|
+
* `resolveModePackArg`). The selection is resolved via `resolve` only after
|
|
67
|
+
* thread selection, because a resumed thread restores its persisted mode —
|
|
68
|
+
* the mode that decides which model the pack provides. Sets the thread's
|
|
69
|
+
* activeModelPackId, the subagent models, and the model route; `model`
|
|
70
|
+
* still wins for the active mode's session model. `onApplied` fires once
|
|
71
|
+
* the pack has been applied to the session (used by the CLI to persist the
|
|
72
|
+
* activation as the global default only when it actually took effect).
|
|
73
|
+
*/
|
|
74
|
+
pack?: {
|
|
75
|
+
id: string;
|
|
76
|
+
resolve: (modeId: string) => PackSelection | undefined;
|
|
77
|
+
onApplied?: () => void;
|
|
78
|
+
};
|
|
79
|
+
/** Thinking-effort level. */
|
|
80
|
+
thinkingLevel?: ThinkingLevel;
|
|
81
|
+
/** Thread selection / mutation. */
|
|
82
|
+
thread?: RunMCThreadOptions;
|
|
83
|
+
/** Resource id for thread scoping. */
|
|
84
|
+
resourceId?: string;
|
|
85
|
+
/** Set or rename the thread title before running. */
|
|
86
|
+
title?: string;
|
|
87
|
+
/** Abort with `status: 'timeout'` (exit code 2) after this many ms without an event. */
|
|
88
|
+
timeoutMs?: number;
|
|
89
|
+
/**
|
|
90
|
+
* Maximum number of agentic turns (assistant responses). When the limit is
|
|
91
|
+
* reached the run aborts with `status: 'max_turns'` (exit code 1). No limit
|
|
92
|
+
* by default.
|
|
93
|
+
*/
|
|
94
|
+
maxTurns?: number;
|
|
95
|
+
/** How approvals / suspensions are resolved. Defaults to {@link autoApprovePolicy}. */
|
|
96
|
+
policy?: ResolutionPolicy;
|
|
97
|
+
/** External abort signal; aborting it aborts the run. */
|
|
98
|
+
signal?: AbortSignal;
|
|
99
|
+
}
|
|
100
|
+
export interface RunMCGoalOptions {
|
|
101
|
+
objective: string;
|
|
102
|
+
judgeModelId: string;
|
|
103
|
+
maxRuns: number;
|
|
104
|
+
goalManager?: GoalManager;
|
|
105
|
+
}
|
|
106
|
+
export type RunMCOptions<TState extends Record<string, unknown> = Record<string, unknown>> = RunMCBaseOptions<TState> & ({
|
|
107
|
+
/** The task to run as a regular headless turn. */
|
|
108
|
+
prompt: string;
|
|
109
|
+
goal?: never;
|
|
110
|
+
} | {
|
|
111
|
+
prompt?: never;
|
|
112
|
+
/** Run a persisted goal instead of a regular prompt. */
|
|
113
|
+
goal: RunMCGoalOptions;
|
|
114
|
+
});
|
|
115
|
+
export type RunMCStatus = 'completed' | 'done' | 'paused' | 'error' | 'aborted' | 'timeout' | 'max_turns';
|
|
116
|
+
export interface RunMCUsage {
|
|
117
|
+
inputTokens?: number;
|
|
118
|
+
outputTokens?: number;
|
|
119
|
+
totalTokens?: number;
|
|
120
|
+
}
|
|
121
|
+
export interface RunMCToolCall {
|
|
122
|
+
id: string;
|
|
123
|
+
name: string;
|
|
124
|
+
args: unknown;
|
|
125
|
+
}
|
|
126
|
+
export interface RunMCToolResult {
|
|
127
|
+
id: string;
|
|
128
|
+
name: string;
|
|
129
|
+
result: unknown;
|
|
130
|
+
isError: boolean;
|
|
131
|
+
}
|
|
132
|
+
export interface RunMCError {
|
|
133
|
+
name: string;
|
|
134
|
+
message: string;
|
|
135
|
+
stack?: string;
|
|
136
|
+
}
|
|
137
|
+
export interface RunMCResult {
|
|
138
|
+
status: RunMCStatus;
|
|
139
|
+
/** Aggregated assistant text across all message_end events. */
|
|
140
|
+
text: string;
|
|
141
|
+
/** Goal objective when this was a goal run. */
|
|
142
|
+
objective?: string;
|
|
143
|
+
/** Terminal goal evaluation when this was a goal run. */
|
|
144
|
+
goalEvent?: Extract<AgentControllerEvent, {
|
|
145
|
+
type: 'goal_evaluation';
|
|
146
|
+
}>;
|
|
147
|
+
reason?: string;
|
|
148
|
+
iterations?: number;
|
|
149
|
+
maxRuns?: number;
|
|
150
|
+
/** Underlying finish reason from `agent_end`, when the run finished normally. */
|
|
151
|
+
finishReason?: string;
|
|
152
|
+
usage?: RunMCUsage;
|
|
153
|
+
toolCalls: RunMCToolCall[];
|
|
154
|
+
toolResults: RunMCToolResult[];
|
|
155
|
+
threadId?: string;
|
|
156
|
+
error?: RunMCError;
|
|
157
|
+
/** 0 success, 1 error/aborted/max_turns, 2 timeout. */
|
|
158
|
+
exitCode: number;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* A handle to an in-flight `runMC` run. It is async-iterable over controller
|
|
162
|
+
* events and also resolves to a final {@link RunMCResult} via `result`.
|
|
163
|
+
*
|
|
164
|
+
* Both `for await (const e of run)` and `await run.result` work on the same run;
|
|
165
|
+
* awaiting `result` without iterating still drains events internally.
|
|
166
|
+
*/
|
|
167
|
+
export interface MCRun extends AsyncIterable<AgentControllerEvent> {
|
|
168
|
+
/** Resolves once the run completes, times out, errors, or is aborted. */
|
|
169
|
+
result: Promise<RunMCResult>;
|
|
170
|
+
/** Abort the in-flight run. */
|
|
171
|
+
abort(): void;
|
|
172
|
+
}
|
|
173
|
+
export {};
|
|
174
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/headless/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/headless/types.ts
|
|
2
|
+
const VALID_MODES = [
|
|
3
|
+
"build",
|
|
4
|
+
"plan",
|
|
5
|
+
"fast"
|
|
6
|
+
];
|
|
7
|
+
const VALID_THINKING_LEVELS = [
|
|
8
|
+
"off",
|
|
9
|
+
"low",
|
|
10
|
+
"medium",
|
|
11
|
+
"high",
|
|
12
|
+
"xhigh",
|
|
13
|
+
"max"
|
|
14
|
+
];
|
|
15
|
+
const VALID_PERMISSION_MODES = ["auto", "deny"];
|
|
16
|
+
//#endregion
|
|
17
|
+
export { VALID_MODES, VALID_PERMISSION_MODES, VALID_THINKING_LEVELS };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../src/headless/types.ts"],"sourcesContent":["/**\n * Shared types for the headless / programmatic MastraCode API.\n *\n * These types are consumed by the core runner (`runMC`), the resolution policy,\n * the output formatters, and the CLI adapter. They are intentionally free of any\n * `process.*` access so the core API is usable from CI / Node code.\n */\nimport type { AgentController, AgentControllerEvent, Session } from '@mastra/core/agent-controller';\n\nimport type { GoalManager } from '../goal-manager.js';\nimport type { PackSelection } from '../onboarding/pack-activation.js';\n\nexport type RunMode = 'build' | 'plan' | 'fast';\nexport type ThinkingLevel = 'off' | 'low' | 'medium' | 'high' | 'xhigh' | 'max';\n\nexport const VALID_MODES = ['build', 'plan', 'fast'] as const;\nexport const VALID_THINKING_LEVELS = ['off', 'low', 'medium', 'high', 'xhigh', 'max'] as const;\n\n/**\n * Named permission modes for non-interactive runs. Maps to a built-in\n * {@link ResolutionPolicy}:\n * - `auto` — approve every tool and auto-resolve suspensions (the default).\n * - `deny` — refuse every tool approval and abort on any suspension.\n */\nexport type PermissionMode = 'auto' | 'deny';\nexport const VALID_PERMISSION_MODES = ['auto', 'deny'] as const;\n\n/** How `runMC` should resume `tool_approval_required` and `tool_suspended` events. */\nexport interface ResolutionPolicy {\n /**\n * Called for every `tool_approval_required` event. Return the decision; the\n * runner forwards it to `session.respondToToolApproval`.\n */\n onToolApproval(event: Extract<AgentControllerEvent, { type: 'tool_approval_required' }>): 'approve' | 'deny';\n /**\n * Called for every `tool_suspended` event. Return `resumeData` to resume the\n * tool, or `{ abort: true }` to abort the run.\n */\n onSuspension(\n event: Extract<AgentControllerEvent, { type: 'tool_suspended' }>,\n ): { resumeData: unknown } | { abort: true };\n}\n\n/** Thread selection / mutation options resolved up front by `runMC`. */\nexport interface RunMCThreadOptions {\n /** Resume a specific thread by its exact id. */\n id?: string;\n /** Resume the most recently updated thread instead of creating a new one. */\n continueLatest?: boolean;\n /** Clone the resolved (or current) thread before running — work on a copy. */\n clone?: boolean;\n}\n\ninterface RunMCBaseOptions<TState extends Record<string, unknown> = Record<string, unknown>> {\n /** Controller built via `createMastraCode(...)`. */\n controller: AgentController<TState>;\n /** Session built via `createMastraCode(...)`. */\n session: Session<TState>;\n\n /** Explicit model id override. Takes precedence over `mode` and `pack`. */\n model?: string;\n /** Execution mode; resolves a model from `modeDefaults` when `model` is absent. */\n mode?: RunMode;\n /** Per-mode default model ids (resolved from settings at startup). */\n modeDefaults?: Record<string, string>;\n /**\n * A model pack to activate for the run (canonical id from\n * `resolveModePackArg`). The selection is resolved via `resolve` only after\n * thread selection, because a resumed thread restores its persisted mode —\n * the mode that decides which model the pack provides. Sets the thread's\n * activeModelPackId, the subagent models, and the model route; `model`\n * still wins for the active mode's session model. `onApplied` fires once\n * the pack has been applied to the session (used by the CLI to persist the\n * activation as the global default only when it actually took effect).\n */\n pack?: {\n id: string;\n resolve: (modeId: string) => PackSelection | undefined;\n onApplied?: () => void;\n };\n /** Thinking-effort level. */\n thinkingLevel?: ThinkingLevel;\n /** Thread selection / mutation. */\n thread?: RunMCThreadOptions;\n /** Resource id for thread scoping. */\n resourceId?: string;\n /** Set or rename the thread title before running. */\n title?: string;\n /** Abort with `status: 'timeout'` (exit code 2) after this many ms without an event. */\n timeoutMs?: number;\n /**\n * Maximum number of agentic turns (assistant responses). When the limit is\n * reached the run aborts with `status: 'max_turns'` (exit code 1). No limit\n * by default.\n */\n maxTurns?: number;\n /** How approvals / suspensions are resolved. Defaults to {@link autoApprovePolicy}. */\n policy?: ResolutionPolicy;\n /** External abort signal; aborting it aborts the run. */\n signal?: AbortSignal;\n}\n\nexport interface RunMCGoalOptions {\n objective: string;\n judgeModelId: string;\n maxRuns: number;\n goalManager?: GoalManager;\n}\n\nexport type RunMCOptions<TState extends Record<string, unknown> = Record<string, unknown>> = RunMCBaseOptions<TState> &\n (\n | {\n /** The task to run as a regular headless turn. */\n prompt: string;\n goal?: never;\n }\n | {\n prompt?: never;\n /** Run a persisted goal instead of a regular prompt. */\n goal: RunMCGoalOptions;\n }\n );\n\nexport type RunMCStatus = 'completed' | 'done' | 'paused' | 'error' | 'aborted' | 'timeout' | 'max_turns';\n\nexport interface RunMCUsage {\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n}\n\nexport interface RunMCToolCall {\n id: string;\n name: string;\n args: unknown;\n}\n\nexport interface RunMCToolResult {\n id: string;\n name: string;\n result: unknown;\n isError: boolean;\n}\n\nexport interface RunMCError {\n name: string;\n message: string;\n stack?: string;\n}\n\nexport interface RunMCResult {\n status: RunMCStatus;\n /** Aggregated assistant text across all message_end events. */\n text: string;\n /** Goal objective when this was a goal run. */\n objective?: string;\n /** Terminal goal evaluation when this was a goal run. */\n goalEvent?: Extract<AgentControllerEvent, { type: 'goal_evaluation' }>;\n reason?: string;\n iterations?: number;\n maxRuns?: number;\n /** Underlying finish reason from `agent_end`, when the run finished normally. */\n finishReason?: string;\n usage?: RunMCUsage;\n toolCalls: RunMCToolCall[];\n toolResults: RunMCToolResult[];\n threadId?: string;\n error?: RunMCError;\n /** 0 success, 1 error/aborted/max_turns, 2 timeout. */\n exitCode: number;\n}\n\n/**\n * A handle to an in-flight `runMC` run. It is async-iterable over controller\n * events and also resolves to a final {@link RunMCResult} via `result`.\n *\n * Both `for await (const e of run)` and `await run.result` work on the same run;\n * awaiting `result` without iterating still drains events internally.\n */\nexport interface MCRun extends AsyncIterable<AgentControllerEvent> {\n /** Resolves once the run completes, times out, errors, or is aborted. */\n result: Promise<RunMCResult>;\n /** Abort the in-flight run. */\n abort(): void;\n}\n"],"mappings":";AAeA,MAAa,cAAc;CAAC;CAAS;CAAQ;AAAM;AACnD,MAAa,wBAAwB;CAAC;CAAO;CAAO;CAAU;CAAQ;CAAS;AAAK;AASpF,MAAa,yBAAyB,CAAC,QAAQ,MAAM"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook configuration loading from filesystem.
|
|
3
|
+
* Loads from global (~/.mastracode/hooks.json) and project (.mastracode/hooks.json).
|
|
4
|
+
* Global hooks run first, project hooks append.
|
|
5
|
+
*/
|
|
6
|
+
import type { HooksConfig, HookEventName } from './types.js';
|
|
7
|
+
export declare const VALID_EVENTS: HookEventName[];
|
|
8
|
+
export declare function loadHooksConfig(projectDir: string, configDirName?: string, homeDir?: string): HooksConfig;
|
|
9
|
+
export declare function getProjectHooksPath(projectDir: string, configDirName?: string): string;
|
|
10
|
+
export declare function getGlobalHooksPath(configDirName?: string, homeDir?: string): string;
|
|
11
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/hooks/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAkB,aAAa,EAAE,MAAM,YAAY,CAAC;AAE7E,eAAO,MAAM,YAAY,EAAE,aAAa,EAevC,CAAC;AAEF,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,SAAqB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAUrH;AAUD,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,SAAqB,GAAG,MAAM,CAElG;AAED,wBAAgB,kBAAkB,CAAC,aAAa,SAAqB,EAAE,OAAO,SAAe,GAAG,MAAM,CAErG"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { DEFAULT_CONFIG_DIR } from "../constants.js";
|
|
2
|
+
import * as path$1 from "path";
|
|
3
|
+
import * as fs$1 from "fs";
|
|
4
|
+
import * as os$1 from "os";
|
|
5
|
+
//#region src/hooks/config.ts
|
|
6
|
+
/**
|
|
7
|
+
* Hook configuration loading from filesystem.
|
|
8
|
+
* Loads from global (~/.mastracode/hooks.json) and project (.mastracode/hooks.json).
|
|
9
|
+
* Global hooks run first, project hooks append.
|
|
10
|
+
*/
|
|
11
|
+
const VALID_EVENTS = [
|
|
12
|
+
"PreToolUse",
|
|
13
|
+
"PostToolUse",
|
|
14
|
+
"Stop",
|
|
15
|
+
"UserPromptSubmit",
|
|
16
|
+
"SessionStart",
|
|
17
|
+
"SessionEnd",
|
|
18
|
+
"Notification",
|
|
19
|
+
"AgentStart",
|
|
20
|
+
"AgentEnd",
|
|
21
|
+
"PermissionRequest",
|
|
22
|
+
"PermissionResult",
|
|
23
|
+
"Interrupt",
|
|
24
|
+
"SubagentStart",
|
|
25
|
+
"SubagentEnd"
|
|
26
|
+
];
|
|
27
|
+
function loadHooksConfig(projectDir, configDirName = DEFAULT_CONFIG_DIR, homeDir) {
|
|
28
|
+
const globalPath = getGlobalHooksPath(configDirName, homeDir);
|
|
29
|
+
const projectPath = getProjectHooksPath(projectDir, configDirName);
|
|
30
|
+
return mergeConfigs(loadSingleConfig(globalPath), isSameFile(globalPath, projectPath) ? {} : loadSingleConfig(projectPath));
|
|
31
|
+
}
|
|
32
|
+
function isSameFile(a, b) {
|
|
33
|
+
try {
|
|
34
|
+
return fs$1.realpathSync(a) === fs$1.realpathSync(b);
|
|
35
|
+
} catch {
|
|
36
|
+
return path$1.resolve(a) === path$1.resolve(b);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function getProjectHooksPath(projectDir, configDirName = DEFAULT_CONFIG_DIR) {
|
|
40
|
+
return path$1.join(projectDir, configDirName, "hooks.json");
|
|
41
|
+
}
|
|
42
|
+
function getGlobalHooksPath(configDirName = DEFAULT_CONFIG_DIR, homeDir = os$1.homedir()) {
|
|
43
|
+
return path$1.join(homeDir, configDirName, "hooks.json");
|
|
44
|
+
}
|
|
45
|
+
function loadSingleConfig(filePath) {
|
|
46
|
+
try {
|
|
47
|
+
if (!fs$1.existsSync(filePath)) return {};
|
|
48
|
+
const raw = fs$1.readFileSync(filePath, "utf-8");
|
|
49
|
+
return validateConfig(JSON.parse(raw));
|
|
50
|
+
} catch {
|
|
51
|
+
return {};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function validateConfig(raw) {
|
|
55
|
+
if (!raw || typeof raw !== "object") return {};
|
|
56
|
+
const config = {};
|
|
57
|
+
const obj = raw;
|
|
58
|
+
for (const event of VALID_EVENTS) if (Array.isArray(obj[event])) {
|
|
59
|
+
const hooks = obj[event].filter(isValidHook);
|
|
60
|
+
if (hooks.length > 0) config[event] = hooks;
|
|
61
|
+
}
|
|
62
|
+
return config;
|
|
63
|
+
}
|
|
64
|
+
function isValidHook(raw) {
|
|
65
|
+
if (!raw || typeof raw !== "object") return false;
|
|
66
|
+
const obj = raw;
|
|
67
|
+
return obj.type === "command" && typeof obj.command === "string";
|
|
68
|
+
}
|
|
69
|
+
function mergeConfigs(global, project) {
|
|
70
|
+
const merged = {};
|
|
71
|
+
for (const event of VALID_EVENTS) {
|
|
72
|
+
const combined = [...global[event] ?? [], ...project[event] ?? []];
|
|
73
|
+
if (combined.length > 0) merged[event] = combined;
|
|
74
|
+
}
|
|
75
|
+
return merged;
|
|
76
|
+
}
|
|
77
|
+
//#endregion
|
|
78
|
+
export { VALID_EVENTS, getGlobalHooksPath, getProjectHooksPath, loadHooksConfig };
|
|
79
|
+
|
|
80
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","names":["fs","path","os"],"sources":["../../src/hooks/config.ts"],"sourcesContent":["/**\n * Hook configuration loading from filesystem.\n * Loads from global (~/.mastracode/hooks.json) and project (.mastracode/hooks.json).\n * Global hooks run first, project hooks append.\n */\n\nimport * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport { DEFAULT_CONFIG_DIR } from '../constants.js';\nimport type { HooksConfig, HookDefinition, HookEventName } from './types.js';\n\nexport const VALID_EVENTS: HookEventName[] = [\n 'PreToolUse',\n 'PostToolUse',\n 'Stop',\n 'UserPromptSubmit',\n 'SessionStart',\n 'SessionEnd',\n 'Notification',\n 'AgentStart',\n 'AgentEnd',\n 'PermissionRequest',\n 'PermissionResult',\n 'Interrupt',\n 'SubagentStart',\n 'SubagentEnd',\n];\n\nexport function loadHooksConfig(projectDir: string, configDirName = DEFAULT_CONFIG_DIR, homeDir?: string): HooksConfig {\n const globalPath = getGlobalHooksPath(configDirName, homeDir);\n const projectPath = getProjectHooksPath(projectDir, configDirName);\n\n const globalConfig = loadSingleConfig(globalPath);\n // A session started in the home directory resolves both paths to the same\n // file; loading it twice would register (and run) every hook twice.\n const projectConfig = isSameFile(globalPath, projectPath) ? {} : loadSingleConfig(projectPath);\n\n return mergeConfigs(globalConfig, projectConfig);\n}\n\nfunction isSameFile(a: string, b: string): boolean {\n try {\n return fs.realpathSync(a) === fs.realpathSync(b);\n } catch {\n return path.resolve(a) === path.resolve(b);\n }\n}\n\nexport function getProjectHooksPath(projectDir: string, configDirName = DEFAULT_CONFIG_DIR): string {\n return path.join(projectDir, configDirName, 'hooks.json');\n}\n\nexport function getGlobalHooksPath(configDirName = DEFAULT_CONFIG_DIR, homeDir = os.homedir()): string {\n return path.join(homeDir, configDirName, 'hooks.json');\n}\n\nfunction loadSingleConfig(filePath: string): HooksConfig {\n try {\n if (!fs.existsSync(filePath)) return {};\n const raw = fs.readFileSync(filePath, 'utf-8');\n return validateConfig(JSON.parse(raw));\n } catch {\n return {};\n }\n}\n\nfunction validateConfig(raw: unknown): HooksConfig {\n if (!raw || typeof raw !== 'object') return {};\n\n const config: HooksConfig = {};\n const obj = raw as Record<string, unknown>;\n\n for (const event of VALID_EVENTS) {\n if (Array.isArray(obj[event])) {\n const hooks = (obj[event] as unknown[]).filter(isValidHook);\n if (hooks.length > 0) {\n config[event] = hooks;\n }\n }\n }\n\n return config;\n}\n\nfunction isValidHook(raw: unknown): raw is HookDefinition {\n if (!raw || typeof raw !== 'object') return false;\n const obj = raw as Record<string, unknown>;\n return obj.type === 'command' && typeof obj.command === 'string';\n}\n\nfunction mergeConfigs(global: HooksConfig, project: HooksConfig): HooksConfig {\n const merged: HooksConfig = {};\n\n for (const event of VALID_EVENTS) {\n const combined = [...(global[event] ?? []), ...(project[event] ?? [])];\n if (combined.length > 0) {\n merged[event] = combined;\n }\n }\n\n return merged;\n}\n"],"mappings":";;;;;;;;;;AAYA,MAAa,eAAgC;CAC3C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,SAAgB,gBAAgB,YAAoB,gBAAgB,oBAAoB,SAA+B;CACrH,MAAM,aAAa,mBAAmB,eAAe,OAAO;CAC5D,MAAM,cAAc,oBAAoB,YAAY,aAAa;CAOjE,OAAO,aALc,iBAAiB,UAKP,GAFT,WAAW,YAAY,WAAW,IAAI,CAAC,IAAI,iBAAiB,WAAW,CAE9C;AACjD;AAEA,SAAS,WAAW,GAAW,GAAoB;CACjD,IAAI;EACF,OAAOA,KAAG,aAAa,CAAC,MAAMA,KAAG,aAAa,CAAC;CACjD,QAAQ;EACN,OAAOC,OAAK,QAAQ,CAAC,MAAMA,OAAK,QAAQ,CAAC;CAC3C;AACF;AAEA,SAAgB,oBAAoB,YAAoB,gBAAgB,oBAA4B;CAClG,OAAOA,OAAK,KAAK,YAAY,eAAe,YAAY;AAC1D;AAEA,SAAgB,mBAAmB,gBAAgB,oBAAoB,UAAUC,KAAG,QAAQ,GAAW;CACrG,OAAOD,OAAK,KAAK,SAAS,eAAe,YAAY;AACvD;AAEA,SAAS,iBAAiB,UAA+B;CACvD,IAAI;EACF,IAAI,CAACD,KAAG,WAAW,QAAQ,GAAG,OAAO,CAAC;EACtC,MAAM,MAAMA,KAAG,aAAa,UAAU,OAAO;EAC7C,OAAO,eAAe,KAAK,MAAM,GAAG,CAAC;CACvC,QAAQ;EACN,OAAO,CAAC;CACV;AACF;AAEA,SAAS,eAAe,KAA2B;CACjD,IAAI,CAAC,OAAO,OAAO,QAAQ,UAAU,OAAO,CAAC;CAE7C,MAAM,SAAsB,CAAC;CAC7B,MAAM,MAAM;CAEZ,KAAK,MAAM,SAAS,cAClB,IAAI,MAAM,QAAQ,IAAI,MAAM,GAAG;EAC7B,MAAM,QAAS,IAAI,MAAM,CAAe,OAAO,WAAW;EAC1D,IAAI,MAAM,SAAS,GACjB,OAAO,SAAS;CAEpB;CAGF,OAAO;AACT;AAEA,SAAS,YAAY,KAAqC;CACxD,IAAI,CAAC,OAAO,OAAO,QAAQ,UAAU,OAAO;CAC5C,MAAM,MAAM;CACZ,OAAO,IAAI,SAAS,aAAa,OAAO,IAAI,YAAY;AAC1D;AAEA,SAAS,aAAa,QAAqB,SAAmC;CAC5E,MAAM,SAAsB,CAAC;CAE7B,KAAK,MAAM,SAAS,cAAc;EAChC,MAAM,WAAW,CAAC,GAAI,OAAO,UAAU,CAAC,GAAI,GAAI,QAAQ,UAAU,CAAC,CAAE;EACrE,IAAI,SAAS,SAAS,GACpB,OAAO,SAAS;CAEpB;CAEA,OAAO;AACT"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook process execution.
|
|
3
|
+
* Spawns shell commands, handles stdin/stdout/exit-code protocol.
|
|
4
|
+
*/
|
|
5
|
+
import type { HookDefinition, HookStdin, HookResult, HookEventResult } from './types.js';
|
|
6
|
+
export declare function executeHook(hook: HookDefinition, stdinPayload: HookStdin): Promise<HookResult>;
|
|
7
|
+
export declare function matchesHook(hook: HookDefinition, context: {
|
|
8
|
+
tool_name?: string;
|
|
9
|
+
}): boolean;
|
|
10
|
+
export declare function runHooksForEvent(hooks: HookDefinition[], stdinPayload: HookStdin, matchContext?: {
|
|
11
|
+
tool_name?: string;
|
|
12
|
+
}): Promise<HookEventResult>;
|
|
13
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/hooks/executor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAc,eAAe,EAAE,MAAM,YAAY,CAAC;AAKrG,wBAAsB,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CA8FpG;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAa1F;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,cAAc,EAAE,EACvB,YAAY,EAAE,SAAS,EACvB,YAAY,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACxC,OAAO,CAAC,eAAe,CAAC,CA8C1B"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { isBlockingEvent } from "./types.js";
|
|
2
|
+
import { spawn } from "child_process";
|
|
3
|
+
//#region src/hooks/executor.ts
|
|
4
|
+
/**
|
|
5
|
+
* Hook process execution.
|
|
6
|
+
* Spawns shell commands, handles stdin/stdout/exit-code protocol.
|
|
7
|
+
*/
|
|
8
|
+
const DEFAULT_TIMEOUT = 1e4;
|
|
9
|
+
async function executeHook(hook, stdinPayload) {
|
|
10
|
+
const timeout = hook.timeout ?? DEFAULT_TIMEOUT;
|
|
11
|
+
const startTime = Date.now();
|
|
12
|
+
return new Promise((resolve) => {
|
|
13
|
+
const isWindows = process.platform === "win32";
|
|
14
|
+
const child = spawn(isWindows ? "cmd" : "/bin/sh", isWindows ? ["/c", hook.command] : ["-c", hook.command], {
|
|
15
|
+
stdio: [
|
|
16
|
+
"pipe",
|
|
17
|
+
"pipe",
|
|
18
|
+
"pipe"
|
|
19
|
+
],
|
|
20
|
+
cwd: stdinPayload.cwd,
|
|
21
|
+
...isWindows ? { windowsVerbatimArguments: true } : {},
|
|
22
|
+
env: {
|
|
23
|
+
...process.env,
|
|
24
|
+
MASTRA_HOOK_EVENT: stdinPayload.hook_event_name
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
let stdout = "";
|
|
28
|
+
let stderr = "";
|
|
29
|
+
let timedOut = false;
|
|
30
|
+
let resolved = false;
|
|
31
|
+
const timer = setTimeout(() => {
|
|
32
|
+
timedOut = true;
|
|
33
|
+
child.kill("SIGKILL");
|
|
34
|
+
}, timeout);
|
|
35
|
+
child.stdout?.on("data", (data) => {
|
|
36
|
+
stdout += data.toString();
|
|
37
|
+
});
|
|
38
|
+
child.stderr?.on("data", (data) => {
|
|
39
|
+
stderr += data.toString();
|
|
40
|
+
});
|
|
41
|
+
child.on("close", (exitCode) => {
|
|
42
|
+
clearTimeout(timer);
|
|
43
|
+
if (resolved) return;
|
|
44
|
+
resolved = true;
|
|
45
|
+
let parsedStdout;
|
|
46
|
+
if (stdout.trim()) try {
|
|
47
|
+
parsedStdout = JSON.parse(stdout.trim());
|
|
48
|
+
} catch {}
|
|
49
|
+
resolve({
|
|
50
|
+
hook,
|
|
51
|
+
exitCode: exitCode ?? 1,
|
|
52
|
+
stdout: parsedStdout,
|
|
53
|
+
stderr: stderr.trim() || void 0,
|
|
54
|
+
timedOut,
|
|
55
|
+
durationMs: Date.now() - startTime
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
child.on("error", (error) => {
|
|
59
|
+
clearTimeout(timer);
|
|
60
|
+
if (resolved) return;
|
|
61
|
+
resolved = true;
|
|
62
|
+
resolve({
|
|
63
|
+
hook,
|
|
64
|
+
exitCode: 1,
|
|
65
|
+
stderr: error.message,
|
|
66
|
+
timedOut: false,
|
|
67
|
+
durationMs: Date.now() - startTime
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
child.stdin?.on("error", () => {});
|
|
71
|
+
try {
|
|
72
|
+
child.stdin?.write(JSON.stringify(stdinPayload));
|
|
73
|
+
child.stdin?.end();
|
|
74
|
+
} catch {}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
function matchesHook(hook, context) {
|
|
78
|
+
if (!hook.matcher) return true;
|
|
79
|
+
if (hook.matcher.tool_name) {
|
|
80
|
+
if (!context.tool_name) return false;
|
|
81
|
+
try {
|
|
82
|
+
return new RegExp(hook.matcher.tool_name).test(context.tool_name);
|
|
83
|
+
} catch {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
async function runHooksForEvent(hooks, stdinPayload, matchContext = {}) {
|
|
90
|
+
const results = [];
|
|
91
|
+
const warnings = [];
|
|
92
|
+
let additionalContext;
|
|
93
|
+
const applicable = hooks.filter((h) => matchesHook(h, matchContext));
|
|
94
|
+
if (applicable.length === 0) return {
|
|
95
|
+
allowed: true,
|
|
96
|
+
results: [],
|
|
97
|
+
warnings: []
|
|
98
|
+
};
|
|
99
|
+
const blocking = isBlockingEvent(stdinPayload.hook_event_name);
|
|
100
|
+
for (const hook of applicable) {
|
|
101
|
+
const result = await executeHook(hook, stdinPayload);
|
|
102
|
+
results.push(result);
|
|
103
|
+
if (result.stdout?.additionalContext) additionalContext = additionalContext ? `${additionalContext}\n${result.stdout.additionalContext}` : result.stdout.additionalContext;
|
|
104
|
+
if (result.timedOut) {
|
|
105
|
+
warnings.push(`Hook timed out after ${hook.timeout ?? DEFAULT_TIMEOUT}ms: ${hook.command}`);
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (result.exitCode === 2 && blocking) return {
|
|
109
|
+
allowed: false,
|
|
110
|
+
blockReason: result.stdout?.reason || result.stderr || `Blocked by hook: ${hook.description || hook.command}`,
|
|
111
|
+
additionalContext,
|
|
112
|
+
results,
|
|
113
|
+
warnings
|
|
114
|
+
};
|
|
115
|
+
if (result.exitCode === 0) continue;
|
|
116
|
+
const warnMsg = result.stderr || `Hook exited with code ${result.exitCode}`;
|
|
117
|
+
warnings.push(`${hook.description || hook.command}: ${warnMsg}`);
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
allowed: true,
|
|
121
|
+
additionalContext,
|
|
122
|
+
results,
|
|
123
|
+
warnings
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
//#endregion
|
|
127
|
+
export { executeHook, matchesHook, runHooksForEvent };
|
|
128
|
+
|
|
129
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","names":[],"sources":["../../src/hooks/executor.ts"],"sourcesContent":["/**\n * Hook process execution.\n * Spawns shell commands, handles stdin/stdout/exit-code protocol.\n */\n\nimport { spawn } from 'node:child_process';\nimport type { HookDefinition, HookStdin, HookResult, HookStdout, HookEventResult } from './types.js';\nimport { isBlockingEvent } from './types.js';\n\nconst DEFAULT_TIMEOUT = 10_000;\n\nexport async function executeHook(hook: HookDefinition, stdinPayload: HookStdin): Promise<HookResult> {\n const timeout = hook.timeout ?? DEFAULT_TIMEOUT;\n const startTime = Date.now();\n\n return new Promise<HookResult>(resolve => {\n const isWindows = process.platform === 'win32';\n const shell = isWindows ? 'cmd' : '/bin/sh';\n const shellArgs = isWindows ? ['/c', hook.command] : ['-c', hook.command];\n\n const child = spawn(shell, shellArgs, {\n stdio: ['pipe', 'pipe', 'pipe'],\n cwd: stdinPayload.cwd,\n // Without this, Node's default Windows argument escaping re-quotes\n // hook.command before cmd.exe ever sees it, so a quoted path (or any\n // path containing spaces) reaches the child process with literal \"\n // characters embedded in it. mastracode/tui's shell-runner.ts already\n // sets this for its own cmd invocations; this call site just missed it.\n ...(isWindows ? { windowsVerbatimArguments: true } : {}),\n env: {\n ...process.env,\n MASTRA_HOOK_EVENT: stdinPayload.hook_event_name,\n },\n });\n\n let stdout = '';\n let stderr = '';\n let timedOut = false;\n let resolved = false;\n\n const timer = setTimeout(() => {\n timedOut = true;\n child.kill('SIGKILL');\n }, timeout);\n\n child.stdout?.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n child.on('close', exitCode => {\n clearTimeout(timer);\n if (resolved) return;\n resolved = true;\n\n let parsedStdout: HookStdout | undefined;\n if (stdout.trim()) {\n try {\n parsedStdout = JSON.parse(stdout.trim()) as HookStdout;\n } catch {\n // Not valid JSON — ignore\n }\n }\n\n resolve({\n hook,\n exitCode: exitCode ?? 1,\n stdout: parsedStdout,\n stderr: stderr.trim() || undefined,\n timedOut,\n durationMs: Date.now() - startTime,\n });\n });\n\n child.on('error', error => {\n clearTimeout(timer);\n if (resolved) return;\n resolved = true;\n\n resolve({\n hook,\n exitCode: 1,\n stderr: error.message,\n timedOut: false,\n durationMs: Date.now() - startTime,\n });\n });\n\n // A hook that never reads stdin (or exits before we finish writing) closes\n // the pipe under us. That surfaces asynchronously as an EPIPE 'error' event\n // on the socket, which Node escalates to an unhandled error — taking the\n // whole host process down — unless something is listening. The hook's real\n // outcome still arrives via 'close', so absorb it.\n child.stdin?.on('error', () => {});\n\n try {\n child.stdin?.write(JSON.stringify(stdinPayload));\n child.stdin?.end();\n } catch {\n // Synchronous stdin write failure — process continues\n }\n });\n}\n\nexport function matchesHook(hook: HookDefinition, context: { tool_name?: string }): boolean {\n if (!hook.matcher) return true;\n\n if (hook.matcher.tool_name) {\n if (!context.tool_name) return false;\n try {\n return new RegExp(hook.matcher.tool_name).test(context.tool_name);\n } catch {\n return false;\n }\n }\n\n return true;\n}\n\nexport async function runHooksForEvent(\n hooks: HookDefinition[],\n stdinPayload: HookStdin,\n matchContext: { tool_name?: string } = {},\n): Promise<HookEventResult> {\n const results: HookResult[] = [];\n const warnings: string[] = [];\n let additionalContext: string | undefined;\n\n const applicable = hooks.filter(h => matchesHook(h, matchContext));\n if (applicable.length === 0) {\n return { allowed: true, results: [], warnings: [] };\n }\n\n const blocking = isBlockingEvent(stdinPayload.hook_event_name);\n\n for (const hook of applicable) {\n const result = await executeHook(hook, stdinPayload);\n results.push(result);\n\n if (result.stdout?.additionalContext) {\n additionalContext = additionalContext\n ? `${additionalContext}\\n${result.stdout.additionalContext}`\n : result.stdout.additionalContext;\n }\n\n if (result.timedOut) {\n warnings.push(`Hook timed out after ${hook.timeout ?? DEFAULT_TIMEOUT}ms: ${hook.command}`);\n continue;\n }\n\n if (result.exitCode === 2 && blocking) {\n const reason = result.stdout?.reason || result.stderr || `Blocked by hook: ${hook.description || hook.command}`;\n\n return {\n allowed: false,\n blockReason: reason,\n additionalContext,\n results,\n warnings,\n };\n }\n\n if (result.exitCode === 0) continue;\n\n const warnMsg = result.stderr || `Hook exited with code ${result.exitCode}`;\n warnings.push(`${hook.description || hook.command}: ${warnMsg}`);\n }\n\n return { allowed: true, additionalContext, results, warnings };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { HookManager } from './manager.js';
|
|
2
|
+
export { loadHooksConfig, getProjectHooksPath, getGlobalHooksPath, VALID_EVENTS } from './config.js';
|
|
3
|
+
export { executeHook, runHooksForEvent, matchesHook } from './executor.js';
|
|
4
|
+
export { isBlockingEvent } from './types.js';
|
|
5
|
+
export type { HookEventName, HookDefinition, HookMatcher, HooksConfig, HookStdin, HookStdinBase, HookStdinToolEvent, HookStdinUserPrompt, HookStdinStop, HookStdinSession, HookStdinNotification, HookStdinAgentStart, HookStdinAgentEnd, HookStdinPermissionRequest, HookStdinPermissionResult, HookStdinInterrupt, HookStdinSubagentStart, HookStdinSubagentEnd, HookStdout, HookResult, HookEventResult, BlockingHookEvent, LifecycleHookEvent, PermissionKind, PermissionDecision, InterruptReason, } from './types.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACrG,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,YAAY,EACV,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EACX,SAAS,EACT,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,0BAA0B,EAC1B,yBAAyB,EACzB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,eAAe,GAChB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { VALID_EVENTS, getGlobalHooksPath, getProjectHooksPath, loadHooksConfig } from "./config.js";
|
|
2
|
+
import { isBlockingEvent } from "./types.js";
|
|
3
|
+
import { executeHook, matchesHook, runHooksForEvent } from "./executor.js";
|
|
4
|
+
import { HookManager } from "./manager.js";
|
|
5
|
+
export { HookManager, VALID_EVENTS, executeHook, getGlobalHooksPath, getProjectHooksPath, isBlockingEvent, loadHooksConfig, matchesHook, runHooksForEvent };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { HooksConfig, HookEventResult, PermissionKind, PermissionDecision, InterruptReason, SessionWorktreeInfo } from './types.js';
|
|
2
|
+
export declare class HookManager {
|
|
3
|
+
private config;
|
|
4
|
+
private projectDir;
|
|
5
|
+
private sessionId;
|
|
6
|
+
private configDirName;
|
|
7
|
+
private homeDir?;
|
|
8
|
+
private runId?;
|
|
9
|
+
private worktree?;
|
|
10
|
+
constructor(projectDir: string, sessionId: string, configDirName?: string, homeDir?: string, worktree?: SessionWorktreeInfo);
|
|
11
|
+
reload(): void;
|
|
12
|
+
setSessionId(sessionId: string): void;
|
|
13
|
+
/** Set the active agent run id. Included as `run_id` in all hook stdin while a run is active. */
|
|
14
|
+
setRunId(runId: string): void;
|
|
15
|
+
/** Clear the active run id. Call only after end-of-run hooks (AgentEnd, Stop) have been dispatched. */
|
|
16
|
+
clearRunId(): void;
|
|
17
|
+
getRunId(): string | undefined;
|
|
18
|
+
hasHooks(): boolean;
|
|
19
|
+
getConfig(): HooksConfig;
|
|
20
|
+
getConfigPaths(): {
|
|
21
|
+
project: string;
|
|
22
|
+
global: string;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Build the common stdin base fields. `run_id` is included when an active run
|
|
26
|
+
* is set, so every event dispatched during a run carries the same identifier.
|
|
27
|
+
*/
|
|
28
|
+
private baseStdinFields;
|
|
29
|
+
/**
|
|
30
|
+
* Session stdin, carrying worktree identity when there is one. Emitted on both
|
|
31
|
+
* session events so a hook that provisions on start can tear down on end using
|
|
32
|
+
* the same fields.
|
|
33
|
+
*/
|
|
34
|
+
private sessionStdin;
|
|
35
|
+
runPreToolUse(toolName: string, toolInput: unknown): Promise<HookEventResult>;
|
|
36
|
+
runPostToolUse(toolName: string, toolInput: unknown, toolOutput: unknown, toolError: boolean): Promise<HookEventResult>;
|
|
37
|
+
runUserPromptSubmit(userMessage: string): Promise<HookEventResult>;
|
|
38
|
+
runStop(assistantMessage: string | undefined, stopReason: 'complete' | 'aborted' | 'error'): Promise<HookEventResult>;
|
|
39
|
+
runSessionStart(): Promise<HookEventResult>;
|
|
40
|
+
runSessionEnd(): Promise<HookEventResult>;
|
|
41
|
+
/**
|
|
42
|
+
* Fire notification hooks (non-blocking, fire-and-forget).
|
|
43
|
+
* Called when the TUI is waiting for user input.
|
|
44
|
+
*/
|
|
45
|
+
runNotification(reason: string, message?: string): void;
|
|
46
|
+
runAgentStart(): Promise<HookEventResult>;
|
|
47
|
+
runAgentEnd(stopReason: 'complete' | 'aborted' | 'error' | 'suspended'): Promise<HookEventResult>;
|
|
48
|
+
runPermissionRequest(permissionKind: PermissionKind, toolCallId: string, toolName: string, toolInput?: unknown): Promise<HookEventResult>;
|
|
49
|
+
runPermissionResult(permissionKind: PermissionKind, toolCallId: string, toolName: string, decision: PermissionDecision, toolInput?: unknown): Promise<HookEventResult>;
|
|
50
|
+
runInterrupt(reason: InterruptReason): Promise<HookEventResult>;
|
|
51
|
+
runSubagentStart(toolCallId: string, agentType: string, task: string, modelId?: string, forked?: boolean): Promise<HookEventResult>;
|
|
52
|
+
runSubagentEnd(toolCallId: string, agentType: string, result: unknown, isError: boolean, durationMs: number): Promise<HookEventResult>;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=manager.d.ts.map
|