@mastra/code-sdk 1.15.1-alpha.3 → 1.15.1-alpha.5
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/dist/acp/agent.js +1 -2
- package/dist/acp/errors.js +1 -2
- package/dist/acp/event-mapper.js +1 -2
- package/dist/acp/index.js +1 -2
- package/dist/acp/runtime.js +1 -2
- package/dist/acp/server.js +1 -2
- package/dist/acp/skills.js +1 -2
- package/dist/agent-connections/messaging-processor.js +1 -2
- package/dist/agent-connections/ownership.js +1 -2
- package/dist/agent-connections/registry.js +1 -2
- package/dist/agent-connections/session-advertisement.js +1 -2
- package/dist/agent-connections/signal-provider.js +1 -2
- package/dist/agent-connections/state-processor.js +1 -2
- package/dist/agent-connections/thread-state.js +1 -2
- package/dist/agent-connections/tools.js +1 -2
- package/dist/agent-connections/types.js +1 -2
- package/dist/agent-connections/untrusted-text.js +1 -2
- package/dist/agents/background-completion-events.js +1 -2
- package/dist/agents/background-completion.js +1 -2
- package/dist/agents/context-audit.js +1 -2
- package/dist/agents/credential-resolver.js +1 -2
- package/dist/agents/custom-provider-source.js +1 -2
- package/dist/agents/instructions.js +1 -2
- package/dist/agents/mastracode-gateway.d.ts.map +1 -1
- package/dist/agents/mastracode-gateway.js +6 -5
- package/dist/agents/mastracode-gateway.js.map +1 -1
- package/dist/agents/memory.js +1 -2
- package/dist/agents/model.js +1 -2
- package/dist/agents/modes/build.js +1 -2
- package/dist/agents/modes/explore.js +1 -2
- package/dist/agents/modes/plan.js +1 -2
- package/dist/agents/prompts/agent-instructions.js +1 -2
- package/dist/agents/prompts/build.js +1 -2
- package/dist/agents/prompts/fast.js +1 -2
- package/dist/agents/prompts/index.js +1 -2
- package/dist/agents/prompts/model.js +1 -2
- package/dist/agents/prompts/plan.js +1 -2
- package/dist/agents/prompts/tool-guidance.js +1 -2
- package/dist/agents/sandbox-filesystem.d.ts.map +1 -1
- package/dist/agents/sandbox-filesystem.js +9 -7
- package/dist/agents/sandbox-filesystem.js.map +1 -1
- package/dist/agents/subagents/execute.js +1 -2
- package/dist/agents/subagents/explore.js +1 -2
- package/dist/agents/subagents/plan.js +1 -2
- package/dist/agents/thread-caveman-state.js +1 -2
- package/dist/agents/tool-availability.js +1 -2
- package/dist/agents/tools.js +1 -2
- package/dist/agents/workflow-builder-agent.js +1 -2
- package/dist/agents/workspace.js +1 -2
- package/dist/analytics.js +1 -2
- package/dist/auth/account-rotation-processor.js +1 -2
- package/dist/auth/account-routing-context.js +1 -2
- package/dist/auth/authorization-input.js +1 -2
- package/dist/auth/device-code.js +1 -2
- package/dist/auth/pkce.js +1 -2
- package/dist/auth/provider-auth-error.d.ts +2 -0
- package/dist/auth/provider-auth-error.d.ts.map +1 -1
- package/dist/auth/provider-auth-error.js +8 -3
- package/dist/auth/provider-auth-error.js.map +1 -1
- package/dist/auth/providers/anthropic.js +1 -2
- package/dist/auth/providers/github-copilot.js +1 -2
- package/dist/auth/providers/kimi-coding.js +1 -2
- package/dist/auth/providers/openai-codex.js +1 -2
- package/dist/auth/providers/xai.js +1 -2
- package/dist/auth/storage.js +1 -2
- package/dist/clipboard/index.js +1 -2
- package/dist/constants.js +1 -2
- package/dist/error-classification.js +1 -2
- package/dist/evals/context-builder.js +1 -2
- package/dist/evals/scorers/classify-command.d.ts +1 -2
- package/dist/evals/scorers/classify-command.d.ts.map +1 -1
- package/dist/evals/scorers/classify-command.js +7 -17
- package/dist/evals/scorers/classify-command.js.map +1 -1
- package/dist/evals/scorers/efficiency.js +1 -2
- package/dist/evals/scorers/extract-tools.js +1 -2
- package/dist/evals/scorers/outcome.d.ts.map +1 -1
- package/dist/evals/scorers/outcome.js +36 -22
- package/dist/evals/scorers/outcome.js.map +1 -1
- package/dist/experimental-agent.js +1 -2
- package/dist/factory/client.js +1 -2
- package/dist/factory/remote-controller.js +1 -2
- package/dist/factory/remote-session.js +1 -2
- package/dist/goal-manager.js +1 -2
- package/dist/goal-signal.js +1 -2
- package/dist/headless/cli.js +1 -2
- package/dist/headless/flags.js +1 -2
- package/dist/headless/format.js +1 -2
- package/dist/headless/policy.js +1 -2
- package/dist/headless/run-mc.js +1 -2
- package/dist/headless/types.js +1 -2
- package/dist/hooks/config.js +1 -2
- package/dist/hooks/executor.js +1 -2
- package/dist/hooks/manager.js +1 -2
- package/dist/hooks/types.js +1 -2
- package/dist/index.js +1 -2
- package/dist/ipc/ipc-reporter.js +1 -2
- package/dist/knowledge-inspector.js +1 -2
- package/dist/knowledge-scope.js +1 -2
- package/dist/lsp/client.d.ts.map +1 -1
- package/dist/lsp/client.js +1 -2
- package/dist/lsp/client.js.map +1 -1
- package/dist/lsp/language.js +1 -2
- package/dist/lsp/manager.js +1 -2
- package/dist/lsp/server.js +1 -2
- package/dist/lsp/workspace.js +1 -2
- package/dist/mcp/config.js +1 -2
- package/dist/mcp/manager.js +1 -2
- package/dist/mcp/state.js +1 -2
- package/dist/onboarding/custom-packs.js +1 -2
- package/dist/onboarding/custom-providers.js +1 -2
- package/dist/onboarding/om-settings.js +1 -2
- package/dist/onboarding/pack-activation.js +1 -2
- package/dist/onboarding/packs.js +1 -2
- package/dist/onboarding/settings.js +1 -2
- package/dist/permissions.js +1 -2
- package/dist/platform/index.js +1 -2
- package/dist/plugin.js +1 -2
- package/dist/plugins/dependencies.js +1 -2
- package/dist/plugins/install.js +1 -2
- package/dist/plugins/loader.js +1 -2
- package/dist/plugins/manager.js +1 -2
- package/dist/plugins/manifest.js +1 -2
- package/dist/plugins/package-link.js +1 -2
- package/dist/plugins/paths.js +1 -2
- package/dist/plugins/registry.js +1 -2
- package/dist/plugins/scaffold.js +1 -2
- package/dist/plugins/signal-lane.js +1 -2
- package/dist/process-memory-diagnostics.js +1 -2
- package/dist/processors/plan-rejection-abort.js +1 -2
- package/dist/providers/amazon-bedrock-gateway.js +1 -2
- package/dist/providers/amazon-bedrock.js +1 -2
- package/dist/providers/anthropic-prompt-cache.js +1 -2
- package/dist/providers/anthropic-thinking.js +1 -2
- package/dist/providers/claude-max.d.ts.map +1 -1
- package/dist/providers/claude-max.js +4 -4
- package/dist/providers/claude-max.js.map +1 -1
- package/dist/providers/github-copilot-gateway.js +1 -2
- package/dist/providers/github-copilot.d.ts.map +1 -1
- package/dist/providers/github-copilot.js +5 -5
- package/dist/providers/github-copilot.js.map +1 -1
- package/dist/providers/google-thinking.js +1 -2
- package/dist/providers/kimi-coding.d.ts.map +1 -1
- package/dist/providers/kimi-coding.js +8 -7
- package/dist/providers/kimi-coding.js.map +1 -1
- package/dist/providers/model-ids.js +1 -2
- package/dist/providers/openai-codex.d.ts +15 -0
- package/dist/providers/openai-codex.d.ts.map +1 -1
- package/dist/providers/openai-codex.js +50 -11
- package/dist/providers/openai-codex.js.map +1 -1
- package/dist/providers/provider-thinking.js +1 -2
- package/dist/providers/thinking-request.js +1 -2
- package/dist/providers/xai.d.ts.map +1 -1
- package/dist/providers/xai.js +5 -5
- package/dist/providers/xai.js.map +1 -1
- package/dist/schedules/interval.js +1 -2
- package/dist/schedules/prompt.js +1 -2
- package/dist/schedules/run-script.js +1 -2
- package/dist/schedules/scheduler.js +1 -2
- package/dist/schedules/tools.js +1 -2
- package/dist/schema.js +1 -2
- package/dist/theme-palette.js +1 -2
- package/dist/thinking-catalog.js +1 -2
- package/dist/thinking.js +1 -2
- package/dist/tool-names.js +1 -2
- package/dist/tools/request-sandbox-access.js +1 -2
- package/dist/tools/utils.js +1 -2
- package/dist/tools/web-search.js +1 -2
- package/dist/tools/workflows/create-workflow.js +1 -2
- package/dist/tools/workflows/delete-workflow.js +1 -2
- package/dist/tools/workflows/ephemeral-memory.js +1 -2
- package/dist/tools/workflows/extract-json-schema.js +1 -2
- package/dist/tools/workflows/get-workflow.js +1 -2
- package/dist/tools/workflows/list-available-agents.js +1 -2
- package/dist/tools/workflows/list-available-classifiers.js +1 -2
- package/dist/tools/workflows/list-available-tools.js +1 -2
- package/dist/tools/workflows/list-available-workflows.js +1 -2
- package/dist/tools/workflows/list-workflows.js +1 -2
- package/dist/tools/workflows/run-workflow.js +1 -2
- package/dist/tools/workflows/save-workflow.js +1 -2
- package/dist/tools/workflows/tool-ids.js +1 -2
- package/dist/utils/binaries.js +1 -2
- package/dist/utils/debug-log.js +1 -2
- package/dist/utils/discarding-scores-storage.js +1 -2
- package/dist/utils/errors.js +1 -2
- package/dist/utils/gateway-sync.js +1 -2
- package/dist/utils/local-observability.js +1 -2
- package/dist/utils/maintenance-lock.js +1 -2
- package/dist/utils/notification-dispatch.js +1 -2
- package/dist/utils/open-url.js +1 -2
- package/dist/utils/path-security.js +1 -2
- package/dist/utils/plan-diff.js +1 -2
- package/dist/utils/plans.js +1 -2
- package/dist/utils/project.js +1 -2
- package/dist/utils/prune-cli.js +1 -2
- package/dist/utils/signals-pubsub.js +1 -2
- package/dist/utils/slash-command-loader.js +1 -2
- package/dist/utils/slash-command-processor.js +1 -2
- package/dist/utils/stdin-pipe.js +1 -2
- package/dist/utils/storage-factory.js +1 -2
- package/dist/utils/storage-maintenance.js +1 -2
- package/dist/utils/thread-lock.js +1 -2
- package/dist/utils/token-estimator.js +1 -2
- package/dist/utils/update-check.js +1 -2
- package/dist/utils/wake-session.js +1 -2
- package/dist/voice/stt-registry.js +1 -2
- package/dist/workflows/register-primitives.js +1 -2
- package/dist/workflows/service.js +1 -2
- package/package.json +36 -32
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { getExitCode, isBuildCommand, isTestCommand } from "./classify-command.js";
|
|
1
|
+
import { getExitCode, isBuildCommand, isSuccessResult, isTestCommand } from "./classify-command.js";
|
|
2
2
|
import { extractToolCalls } from "./extract-tools.js";
|
|
3
3
|
import { createScorer, filterRun } from "@mastra/core/evals";
|
|
4
|
-
|
|
4
|
+
// src/evals/scorers/outcome.ts
|
|
5
5
|
/**
|
|
6
6
|
* Dimension weights. Used to compute the weighted average of applicable dimensions.
|
|
7
7
|
* Dimensions that don't apply (e.g. no build ran) are excluded from the average.
|
|
@@ -48,11 +48,14 @@ function isBuildArgs(args) {
|
|
|
48
48
|
function isTestArgs(args) {
|
|
49
49
|
return isTestCommand(String(args.command ?? ""));
|
|
50
50
|
}
|
|
51
|
+
function isForegroundCommand(result) {
|
|
52
|
+
return result.args.background !== true;
|
|
53
|
+
}
|
|
51
54
|
/**
|
|
52
55
|
* Score build/typecheck outcome (final state).
|
|
53
56
|
*/
|
|
54
57
|
function scoreBuild(execResults) {
|
|
55
|
-
const builds = execResults.filter((r) => r.toolName === "execute_command" && isBuildArgs(r.args));
|
|
58
|
+
const builds = execResults.filter((r) => r.toolName === "execute_command" && isForegroundCommand(r) && isBuildArgs(r.args));
|
|
56
59
|
if (builds.length === 0) return {
|
|
57
60
|
score: 0,
|
|
58
61
|
detail: "No build/typecheck ran",
|
|
@@ -65,22 +68,27 @@ function scoreBuild(execResults) {
|
|
|
65
68
|
applicable: true
|
|
66
69
|
};
|
|
67
70
|
const exitCode = getExitCode(last.result);
|
|
68
|
-
if (exitCode === 0) return {
|
|
69
|
-
score: 1,
|
|
70
|
-
detail: "Build/typecheck passed",
|
|
71
|
-
applicable: true
|
|
72
|
-
};
|
|
73
71
|
if (exitCode !== null && exitCode !== 0) return {
|
|
74
72
|
score: 0,
|
|
75
73
|
detail: `Build failed (exit ${exitCode})`,
|
|
76
74
|
applicable: true
|
|
77
75
|
};
|
|
78
|
-
|
|
76
|
+
if (typeof last.result === "string") return {
|
|
77
|
+
score: 1,
|
|
78
|
+
detail: "Build/typecheck passed",
|
|
79
|
+
applicable: true
|
|
80
|
+
};
|
|
81
|
+
const text = JSON.stringify(last.result ?? "");
|
|
79
82
|
if (/error TS\d+|Cannot find module|is not assignable/i.test(text)) return {
|
|
80
83
|
score: 0,
|
|
81
84
|
detail: "Build failed (TypeScript errors in output)",
|
|
82
85
|
applicable: true
|
|
83
86
|
};
|
|
87
|
+
if (isSuccessResult(last.result)) return {
|
|
88
|
+
score: 1,
|
|
89
|
+
detail: "Build/typecheck passed",
|
|
90
|
+
applicable: true
|
|
91
|
+
};
|
|
84
92
|
return {
|
|
85
93
|
score: THRESHOLDS.ambiguousExitScore,
|
|
86
94
|
detail: "Build ran, outcome unclear",
|
|
@@ -91,7 +99,7 @@ function scoreBuild(execResults) {
|
|
|
91
99
|
* Score test outcome (final state).
|
|
92
100
|
*/
|
|
93
101
|
function scoreTests(execResults) {
|
|
94
|
-
const tests = execResults.filter((r) => r.toolName === "execute_command" && isTestArgs(r.args));
|
|
102
|
+
const tests = execResults.filter((r) => r.toolName === "execute_command" && isForegroundCommand(r) && isTestArgs(r.args));
|
|
95
103
|
if (tests.length === 0) return {
|
|
96
104
|
score: 0,
|
|
97
105
|
detail: "No tests ran",
|
|
@@ -104,25 +112,30 @@ function scoreTests(execResults) {
|
|
|
104
112
|
applicable: true
|
|
105
113
|
};
|
|
106
114
|
const exitCode = getExitCode(last.result);
|
|
107
|
-
if (exitCode
|
|
115
|
+
if (exitCode !== null && exitCode !== 0) return {
|
|
116
|
+
score: 0,
|
|
117
|
+
detail: `Tests failed (exit ${exitCode})`,
|
|
118
|
+
applicable: true
|
|
119
|
+
};
|
|
120
|
+
if (typeof last.result === "string") return {
|
|
108
121
|
score: 1,
|
|
109
122
|
detail: "Tests passed",
|
|
110
123
|
applicable: true
|
|
111
124
|
};
|
|
112
|
-
|
|
125
|
+
const text = JSON.stringify(last.result ?? "");
|
|
126
|
+
if (/\bFAIL\b|failed|✗|✘/i.test(text)) return {
|
|
113
127
|
score: 0,
|
|
114
|
-
detail:
|
|
128
|
+
detail: "Tests failed (inferred)",
|
|
115
129
|
applicable: true
|
|
116
130
|
};
|
|
117
|
-
const text = typeof last.result === "string" ? last.result : JSON.stringify(last.result ?? "");
|
|
118
131
|
if (/\d+ (?:tests? )?passed|✓|PASS/i.test(text) && !/\bfail(?:ed|ure)?\b|\berror\b/i.test(text)) return {
|
|
119
132
|
score: 1,
|
|
120
133
|
detail: "Tests passed (inferred)",
|
|
121
134
|
applicable: true
|
|
122
135
|
};
|
|
123
|
-
if (
|
|
124
|
-
score:
|
|
125
|
-
detail: "Tests
|
|
136
|
+
if (isSuccessResult(last.result)) return {
|
|
137
|
+
score: 1,
|
|
138
|
+
detail: "Tests passed",
|
|
126
139
|
applicable: true
|
|
127
140
|
};
|
|
128
141
|
return {
|
|
@@ -207,13 +220,15 @@ function scoreStuckLoops(results) {
|
|
|
207
220
|
function scoreRegression(execResults) {
|
|
208
221
|
const regressions = [];
|
|
209
222
|
for (const [label, filter] of [["Build", isBuildArgs], ["Tests", isTestArgs]]) {
|
|
210
|
-
const cmds = execResults.filter((r) => r.toolName === "execute_command" && filter(r.args));
|
|
223
|
+
const cmds = execResults.filter((r) => r.toolName === "execute_command" && isForegroundCommand(r) && filter(r.args));
|
|
211
224
|
if (cmds.length < 2) continue;
|
|
212
225
|
let sawPass = false;
|
|
213
226
|
let sawRegression = false;
|
|
214
227
|
for (const cmd of cmds) {
|
|
215
|
-
const
|
|
216
|
-
|
|
228
|
+
const exitCode = getExitCode(cmd.result);
|
|
229
|
+
const passed = isSuccessResult(cmd.result, cmd.isError);
|
|
230
|
+
const failed = cmd.isError || exitCode !== null && exitCode !== 0;
|
|
231
|
+
if (passed) {
|
|
217
232
|
if (sawRegression) {
|
|
218
233
|
regressions.push({
|
|
219
234
|
label,
|
|
@@ -223,7 +238,7 @@ function scoreRegression(execResults) {
|
|
|
223
238
|
}
|
|
224
239
|
sawPass = true;
|
|
225
240
|
}
|
|
226
|
-
if (sawPass &&
|
|
241
|
+
if (sawPass && failed) sawRegression = true;
|
|
227
242
|
}
|
|
228
243
|
if (sawRegression) regressions.push({
|
|
229
244
|
label,
|
|
@@ -342,7 +357,6 @@ function createOutcomeScorer() {
|
|
|
342
357
|
return parts.join("\n");
|
|
343
358
|
});
|
|
344
359
|
}
|
|
345
|
-
//#endregion
|
|
346
360
|
export { createOutcomeScorer };
|
|
347
361
|
|
|
348
362
|
//# sourceMappingURL=outcome.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outcome.js","names":[],"sources":["../../../src/evals/scorers/outcome.ts"],"sourcesContent":["/**\n * MastraCode Outcome Scorer (Code-based, Agent type, always-on)\n *\n * Grades the objective outcome of a coding session by checking hard facts:\n * - Did the build/typecheck pass?\n * - Did tests pass?\n * - What was the tool error rate?\n * - Did the agent get stuck in a loop?\n * - Was there a regression (build passed earlier, failed later)?\n * - Did the agent use ask_user unnecessarily? (autonomy)\n *\n * This scorer is always-on (no sampling) because it's cheap — it only\n * reads exit codes and error states from tool results already in the messages.\n *\n * Scoring philosophy (from Anthropic's eval guidance):\n * \"Grade outcomes, not paths\" — we check what happened, not how.\n * Partial credit: a session that passes build but fails tests scores\n * higher than one that fails build entirely.\n *\n * Dimensions that don't apply to a session (e.g. build for a docs-only task)\n * are excluded from the weighted average, so sessions aren't penalized for\n * irrelevant criteria.\n */\n\nimport type { MastraDBMessage } from '@mastra/core/agent';\nimport { createScorer, filterRun } from '@mastra/core/evals';\n\nimport { isBuildCommand, isTestCommand, getExitCode } from './classify-command.js';\nimport type { ExtractedToolCall } from './extract-tools.js';\nimport { extractToolCalls } from './extract-tools.js';\n\n// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n// CONFIGURATION — Adjust weights and thresholds here\n// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n/**\n * Dimension weights. Used to compute the weighted average of applicable dimensions.\n * Dimensions that don't apply (e.g. no build ran) are excluded from the average.\n */\nconst WEIGHTS = {\n build: 0.3,\n tests: 0.25,\n toolErrors: 0.2,\n loops: 0.1,\n regression: 0.1,\n autonomy: 0.05,\n} as const;\n\n/**\n * Scoring thresholds and multipliers.\n */\nconst THRESHOLDS = {\n /** Multiplier for tool error rate penalty. Score = max(0, 1 - rate × this). */\n toolErrorPenaltyMultiplier: 1.0,\n\n /** How many consecutive identical calls (or same-error repeats) before it's a \"loop\". */\n loopMinRepetitions: 3,\n\n /** Score penalty per detected loop. */\n loopPenaltyPerOccurrence: 0.3,\n\n /** Score deducted per ask_user call. */\n autonomyPenaltyPerAsk: 0.25,\n\n /** Score when a command ran but exit code is ambiguous. */\n ambiguousExitScore: 0.75,\n\n /** Minimum tool calls required to produce a meaningful score. */\n minToolCalls: 1,\n\n /** Tool names whose errors are expected/benign (not penalized). */\n benignErrorTools: ['search_content', 'find_files', 'lsp_inspect'] as string[],\n} as const;\n\n// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\ntype DimensionResult = { score: number; detail: string; applicable: boolean };\n\n/**\n * Check if the primary verb of an execute_command is a build/typecheck command.\n * Splits compound commands (&&, ;) and checks the first segment.\n */\n/** Extract command string from tool call args, then delegate to shared classifier. */\nfunction isBuildArgs(args: Record<string, unknown>): boolean {\n return isBuildCommand(String(args.command ?? ''));\n}\n\nfunction isTestArgs(args: Record<string, unknown>): boolean {\n return isTestCommand(String(args.command ?? ''));\n}\n\n/**\n * Score build/typecheck outcome (final state).\n */\nfunction scoreBuild(execResults: ExtractedToolCall[]): DimensionResult {\n const builds = execResults.filter(r => r.toolName === 'execute_command' && isBuildArgs(r.args));\n if (builds.length === 0) return { score: 0, detail: 'No build/typecheck ran', applicable: false };\n\n const last = builds[builds.length - 1]!;\n if (last.isError) return { score: 0, detail: 'Build/typecheck tool errored', applicable: true };\n\n const exitCode = getExitCode(last.result);\n if (exitCode === 0) return { score: 1, detail: 'Build/typecheck passed', applicable: true };\n if (exitCode !== null && exitCode !== 0)\n return { score: 0, detail: `Build failed (exit ${exitCode})`, applicable: true };\n\n // Fallback: check result text for TS errors\n const text = typeof last.result === 'string' ? last.result : JSON.stringify(last.result ?? '');\n if (/error TS\\d+|Cannot find module|is not assignable/i.test(text)) {\n return { score: 0, detail: 'Build failed (TypeScript errors in output)', applicable: true };\n }\n\n return { score: THRESHOLDS.ambiguousExitScore, detail: 'Build ran, outcome unclear', applicable: true };\n}\n\n/**\n * Score test outcome (final state).\n */\nfunction scoreTests(execResults: ExtractedToolCall[]): DimensionResult {\n const tests = execResults.filter(r => r.toolName === 'execute_command' && isTestArgs(r.args));\n if (tests.length === 0) return { score: 0, detail: 'No tests ran', applicable: false };\n\n const last = tests[tests.length - 1]!;\n if (last.isError) return { score: 0, detail: 'Test command errored', applicable: true };\n\n const exitCode = getExitCode(last.result);\n if (exitCode === 0) return { score: 1, detail: 'Tests passed', applicable: true };\n if (exitCode !== null && exitCode !== 0)\n return { score: 0, detail: `Tests failed (exit ${exitCode})`, applicable: true };\n\n const text = typeof last.result === 'string' ? last.result : JSON.stringify(last.result ?? '');\n if (/\\d+ (?:tests? )?passed|✓|PASS/i.test(text) && !/\\bfail(?:ed|ure)?\\b|\\berror\\b/i.test(text)) {\n return { score: 1, detail: 'Tests passed (inferred)', applicable: true };\n }\n if (/\\bFAIL\\b|failed|✗|✘/i.test(text)) {\n return { score: 0, detail: 'Tests failed (inferred)', applicable: true };\n }\n\n return { score: THRESHOLDS.ambiguousExitScore, detail: 'Tests ran, outcome unclear', applicable: true };\n}\n\n/**\n * Score tool error rate, excluding benign errors from expected-to-fail tools.\n */\nfunction scoreToolErrors(results: ExtractedToolCall[]): DimensionResult {\n if (results.length === 0) return { score: 1, detail: 'No tool calls', applicable: false };\n\n // Only count errors from non-benign tools\n const nonBenign = results.filter(r => !THRESHOLDS.benignErrorTools.includes(r.toolName));\n if (nonBenign.length === 0) return { score: 1, detail: 'All tool calls are benign-error tools', applicable: true };\n\n const errors = nonBenign.filter(r => r.isError);\n const rate = errors.length / nonBenign.length;\n\n if (rate === 0) return { score: 1, detail: 'No tool errors', applicable: true };\n\n const score = Math.max(0, 1 - rate * THRESHOLDS.toolErrorPenaltyMultiplier);\n return {\n score,\n detail: `${errors.length}/${nonBenign.length} tools errored (${(rate * 100).toFixed(0)}%)`,\n applicable: true,\n };\n}\n\n/**\n * Detect stuck loops: same tool + same args appearing 3+ times consecutively,\n * or same tool + same args erroring 3+ times total.\n */\nfunction scoreStuckLoops(results: ExtractedToolCall[]): DimensionResult {\n if (results.length < 3) return { score: 1, detail: 'Too few calls for loop detection', applicable: true };\n\n const fingerprint = (r: ExtractedToolCall) => `${r.toolName}:${JSON.stringify(r.args)}`;\n\n // Check consecutive identical calls\n let maxConsecutive = 1;\n let currentRun = 1;\n for (let i = 1; i < results.length; i++) {\n if (fingerprint(results[i]!) === fingerprint(results[i - 1]!)) {\n currentRun++;\n maxConsecutive = Math.max(maxConsecutive, currentRun);\n } else {\n currentRun = 1;\n }\n }\n\n // Check repeated error fingerprints\n const errorCounts = new Map<string, number>();\n for (const r of results) {\n if (!r.isError) continue;\n const fp = fingerprint(r);\n errorCounts.set(fp, (errorCounts.get(fp) ?? 0) + 1);\n }\n const maxErrorRepeat = Math.max(0, ...[...errorCounts.values()]);\n\n const minReps = THRESHOLDS.loopMinRepetitions;\n const loopSeverity = Math.max(\n maxConsecutive >= minReps ? maxConsecutive - (minReps - 1) : 0,\n maxErrorRepeat >= minReps ? maxErrorRepeat - (minReps - 1) : 0,\n );\n\n if (loopSeverity === 0) return { score: 1, detail: 'No stuck loops', applicable: true };\n\n const score = Math.max(0, 1 - loopSeverity * THRESHOLDS.loopPenaltyPerOccurrence);\n const details: string[] = [];\n if (maxConsecutive >= minReps) details.push(`${maxConsecutive} consecutive identical calls`);\n if (maxErrorRepeat >= minReps) details.push(`same error repeated ${maxErrorRepeat}x`);\n return { score, detail: details.join('; '), applicable: true };\n}\n\n/**\n * Detect regressions: build/test passed at some point, then failed later.\n * Gives partial credit if the agent recovered (final state passes).\n */\nfunction scoreRegression(execResults: ExtractedToolCall[]): DimensionResult {\n const regressions: { label: string; recovered: boolean }[] = [];\n\n for (const [label, filter] of [\n ['Build', isBuildArgs],\n ['Tests', isTestArgs],\n ] as const) {\n const cmds = execResults.filter(r => r.toolName === 'execute_command' && filter(r.args));\n if (cmds.length < 2) continue;\n\n let sawPass = false;\n let sawRegression = false;\n for (const cmd of cmds) {\n const exit = getExitCode(cmd.result);\n if (exit === 0) {\n if (sawRegression) {\n // Recovered from regression\n regressions.push({ label, recovered: true });\n sawRegression = false;\n }\n sawPass = true;\n }\n if (sawPass && exit !== null && exit !== 0) {\n sawRegression = true;\n }\n }\n\n if (sawRegression) {\n // Regression persisted at end of session\n regressions.push({ label, recovered: false });\n }\n }\n\n if (regressions.length === 0) return { score: 1, detail: 'No regressions', applicable: true };\n\n // Persistent regressions are severe (0), recovered regressions get partial credit (0.5)\n const persistentCount = regressions.filter(r => !r.recovered).length;\n const recoveredCount = regressions.filter(r => r.recovered).length;\n const score = Math.max(0, 1 - persistentCount * 0.5 - recoveredCount * 0.1);\n const details = regressions.map(\n r => `${r.label} ${r.recovered ? 'regressed then recovered' : 'regressed (persisted)'}`,\n );\n return { score, detail: details.join('; '), applicable: true };\n}\n\n/**\n * Score autonomy: penalize ask_user calls.\n * 0 calls = 1.0, each call reduces by 0.25 (up to a floor of 0).\n */\nfunction scoreAutonomy(results: ExtractedToolCall[]): DimensionResult {\n const askUserCalls = results.filter(r => r.toolName === 'ask_user');\n const count = askUserCalls.length;\n\n if (count === 0) return { score: 1, detail: 'No ask_user calls (fully autonomous)', applicable: true };\n\n const score = Math.max(0, 1 - count * THRESHOLDS.autonomyPenaltyPerAsk);\n return { score, detail: `${count} ask_user call${count > 1 ? 's' : ''}`, applicable: true };\n}\n\n/**\n * Compute weighted average of only applicable dimensions.\n * Returns null if no dimensions are applicable.\n */\nfunction weightedAverage(dimensions: Record<string, DimensionResult>, weights: Record<string, number>): number | null {\n let totalWeight = 0;\n let weightedSum = 0;\n\n for (const [key, result] of Object.entries(dimensions)) {\n if (!result.applicable) continue;\n const weight = weights[key] ?? 0;\n totalWeight += weight;\n weightedSum += result.score * weight;\n }\n\n if (totalWeight === 0) return null;\n return weightedSum / totalWeight;\n}\n\nexport function createOutcomeScorer() {\n return createScorer({\n id: 'mastracode-outcome',\n name: 'MastraCode Outcome',\n description:\n 'Grades coding session outcomes: build/test pass, tool errors, stuck loops, regressions, autonomy. Always-on.',\n type: 'agent',\n prepareRun: filterRun({ partTypes: ['tool-invocation', 'text'] }),\n })\n .preprocess(async ({ run }) => {\n const messages = (run.output ?? []) as MastraDBMessage[];\n const allResults = extractToolCalls(messages);\n const totalCalls = allResults.length;\n\n // H1: Empty sessions or sessions with no tool calls → score 0\n if (totalCalls < THRESHOLDS.minToolCalls) {\n const empty: DimensionResult = { score: 0, detail: 'No tool calls', applicable: false };\n return {\n empty: true as const,\n build: empty,\n tests: empty,\n toolErrors: empty,\n loops: empty,\n regression: empty,\n autonomy: empty,\n totalCalls,\n };\n }\n\n const execResults = allResults.filter(r => r.toolName === 'execute_command');\n\n return {\n empty: false as const,\n build: scoreBuild(execResults),\n tests: scoreTests(execResults),\n toolErrors: scoreToolErrors(allResults),\n loops: scoreStuckLoops(allResults),\n regression: scoreRegression(execResults),\n autonomy: scoreAutonomy(allResults),\n totalCalls,\n };\n })\n .generateScore(({ results }) => {\n const p = results.preprocessStepResult;\n if (p.empty) return 0;\n\n const score = weightedAverage(\n {\n build: p.build,\n tests: p.tests,\n toolErrors: p.toolErrors,\n loops: p.loops,\n regression: p.regression,\n autonomy: p.autonomy,\n },\n WEIGHTS,\n );\n\n return score === null ? 0 : Math.round(score * 100) / 100;\n })\n .generateReason(({ results, score }) => {\n const p = results.preprocessStepResult;\n if (p.empty) {\n return `Score: 0 (${p.totalCalls} tool calls — below minimum threshold for scoring)`;\n }\n\n const pct = (w: number) => `${(w * 100).toFixed(0)}%`;\n const dimLine = (name: string, weight: number, r: DimensionResult) =>\n r.applicable\n ? `${name} (${pct(weight)}): ${r.detail} [${r.score}]`\n : `${name}: ${r.detail} [N/A — excluded from average]`;\n\n const parts: string[] = [`Score: ${score} (${p.totalCalls} tool calls total)`];\n parts.push(dimLine('Build', WEIGHTS.build, p.build));\n parts.push(dimLine('Tests', WEIGHTS.tests, p.tests));\n parts.push(dimLine('Tool errors', WEIGHTS.toolErrors, p.toolErrors));\n parts.push(dimLine('Loops', WEIGHTS.loops, p.loops));\n parts.push(dimLine('Regression', WEIGHTS.regression, p.regression));\n parts.push(dimLine('Autonomy', WEIGHTS.autonomy, p.autonomy));\n\n return parts.join('\\n');\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"outcome.js","names":[],"sources":["../../../src/evals/scorers/outcome.ts"],"sourcesContent":["/**\n * MastraCode Outcome Scorer (Code-based, Agent type, always-on)\n *\n * Grades the objective outcome of a coding session by checking hard facts:\n * - Did the build/typecheck pass?\n * - Did tests pass?\n * - What was the tool error rate?\n * - Did the agent get stuck in a loop?\n * - Was there a regression (build passed earlier, failed later)?\n * - Did the agent use ask_user unnecessarily? (autonomy)\n *\n * This scorer is always-on (no sampling) because it's cheap — it only\n * reads exit codes and error states from tool results already in the messages.\n *\n * Scoring philosophy (from Anthropic's eval guidance):\n * \"Grade outcomes, not paths\" — we check what happened, not how.\n * Partial credit: a session that passes build but fails tests scores\n * higher than one that fails build entirely.\n *\n * Dimensions that don't apply to a session (e.g. build for a docs-only task)\n * are excluded from the weighted average, so sessions aren't penalized for\n * irrelevant criteria.\n */\n\nimport type { MastraDBMessage } from '@mastra/core/agent';\nimport { createScorer, filterRun } from '@mastra/core/evals';\n\nimport { isBuildCommand, isTestCommand, getExitCode, isSuccessResult } from './classify-command.js';\nimport type { ExtractedToolCall } from './extract-tools.js';\nimport { extractToolCalls } from './extract-tools.js';\n\n// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n// CONFIGURATION — Adjust weights and thresholds here\n// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n/**\n * Dimension weights. Used to compute the weighted average of applicable dimensions.\n * Dimensions that don't apply (e.g. no build ran) are excluded from the average.\n */\nconst WEIGHTS = {\n build: 0.3,\n tests: 0.25,\n toolErrors: 0.2,\n loops: 0.1,\n regression: 0.1,\n autonomy: 0.05,\n} as const;\n\n/**\n * Scoring thresholds and multipliers.\n */\nconst THRESHOLDS = {\n /** Multiplier for tool error rate penalty. Score = max(0, 1 - rate × this). */\n toolErrorPenaltyMultiplier: 1.0,\n\n /** How many consecutive identical calls (or same-error repeats) before it's a \"loop\". */\n loopMinRepetitions: 3,\n\n /** Score penalty per detected loop. */\n loopPenaltyPerOccurrence: 0.3,\n\n /** Score deducted per ask_user call. */\n autonomyPenaltyPerAsk: 0.25,\n\n /** Score when a command ran but exit code is ambiguous. */\n ambiguousExitScore: 0.75,\n\n /** Minimum tool calls required to produce a meaningful score. */\n minToolCalls: 1,\n\n /** Tool names whose errors are expected/benign (not penalized). */\n benignErrorTools: ['search_content', 'find_files', 'lsp_inspect'] as string[],\n} as const;\n\n// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\ntype DimensionResult = { score: number; detail: string; applicable: boolean };\n\n/**\n * Check if the primary verb of an execute_command is a build/typecheck command.\n * Splits compound commands (&&, ;) and checks the first segment.\n */\n/** Extract command string from tool call args, then delegate to shared classifier. */\nfunction isBuildArgs(args: Record<string, unknown>): boolean {\n return isBuildCommand(String(args.command ?? ''));\n}\n\nfunction isTestArgs(args: Record<string, unknown>): boolean {\n return isTestCommand(String(args.command ?? ''));\n}\n\nfunction isForegroundCommand(result: ExtractedToolCall): boolean {\n return result.args.background !== true;\n}\n\n/**\n * Score build/typecheck outcome (final state).\n */\nfunction scoreBuild(execResults: ExtractedToolCall[]): DimensionResult {\n const builds = execResults.filter(\n r => r.toolName === 'execute_command' && isForegroundCommand(r) && isBuildArgs(r.args),\n );\n if (builds.length === 0) return { score: 0, detail: 'No build/typecheck ran', applicable: false };\n\n const last = builds[builds.length - 1]!;\n if (last.isError) return { score: 0, detail: 'Build/typecheck tool errored', applicable: true };\n\n const exitCode = getExitCode(last.result);\n if (exitCode !== null && exitCode !== 0)\n return { score: 0, detail: `Build failed (exit ${exitCode})`, applicable: true };\n if (typeof last.result === 'string') return { score: 1, detail: 'Build/typecheck passed', applicable: true };\n\n const text = JSON.stringify(last.result ?? '');\n if (/error TS\\d+|Cannot find module|is not assignable/i.test(text)) {\n return { score: 0, detail: 'Build failed (TypeScript errors in output)', applicable: true };\n }\n if (isSuccessResult(last.result)) return { score: 1, detail: 'Build/typecheck passed', applicable: true };\n\n return { score: THRESHOLDS.ambiguousExitScore, detail: 'Build ran, outcome unclear', applicable: true };\n}\n\n/**\n * Score test outcome (final state).\n */\nfunction scoreTests(execResults: ExtractedToolCall[]): DimensionResult {\n const tests = execResults.filter(\n r => r.toolName === 'execute_command' && isForegroundCommand(r) && isTestArgs(r.args),\n );\n if (tests.length === 0) return { score: 0, detail: 'No tests ran', applicable: false };\n\n const last = tests[tests.length - 1]!;\n if (last.isError) return { score: 0, detail: 'Test command errored', applicable: true };\n\n const exitCode = getExitCode(last.result);\n if (exitCode !== null && exitCode !== 0)\n return { score: 0, detail: `Tests failed (exit ${exitCode})`, applicable: true };\n if (typeof last.result === 'string') return { score: 1, detail: 'Tests passed', applicable: true };\n\n const text = JSON.stringify(last.result ?? '');\n if (/\\bFAIL\\b|failed|✗|✘/i.test(text)) {\n return { score: 0, detail: 'Tests failed (inferred)', applicable: true };\n }\n if (/\\d+ (?:tests? )?passed|✓|PASS/i.test(text) && !/\\bfail(?:ed|ure)?\\b|\\berror\\b/i.test(text)) {\n return { score: 1, detail: 'Tests passed (inferred)', applicable: true };\n }\n if (isSuccessResult(last.result)) return { score: 1, detail: 'Tests passed', applicable: true };\n\n return { score: THRESHOLDS.ambiguousExitScore, detail: 'Tests ran, outcome unclear', applicable: true };\n}\n\n/**\n * Score tool error rate, excluding benign errors from expected-to-fail tools.\n */\nfunction scoreToolErrors(results: ExtractedToolCall[]): DimensionResult {\n if (results.length === 0) return { score: 1, detail: 'No tool calls', applicable: false };\n\n // Only count errors from non-benign tools\n const nonBenign = results.filter(r => !THRESHOLDS.benignErrorTools.includes(r.toolName));\n if (nonBenign.length === 0) return { score: 1, detail: 'All tool calls are benign-error tools', applicable: true };\n\n const errors = nonBenign.filter(r => r.isError);\n const rate = errors.length / nonBenign.length;\n\n if (rate === 0) return { score: 1, detail: 'No tool errors', applicable: true };\n\n const score = Math.max(0, 1 - rate * THRESHOLDS.toolErrorPenaltyMultiplier);\n return {\n score,\n detail: `${errors.length}/${nonBenign.length} tools errored (${(rate * 100).toFixed(0)}%)`,\n applicable: true,\n };\n}\n\n/**\n * Detect stuck loops: same tool + same args appearing 3+ times consecutively,\n * or same tool + same args erroring 3+ times total.\n */\nfunction scoreStuckLoops(results: ExtractedToolCall[]): DimensionResult {\n if (results.length < 3) return { score: 1, detail: 'Too few calls for loop detection', applicable: true };\n\n const fingerprint = (r: ExtractedToolCall) => `${r.toolName}:${JSON.stringify(r.args)}`;\n\n // Check consecutive identical calls\n let maxConsecutive = 1;\n let currentRun = 1;\n for (let i = 1; i < results.length; i++) {\n if (fingerprint(results[i]!) === fingerprint(results[i - 1]!)) {\n currentRun++;\n maxConsecutive = Math.max(maxConsecutive, currentRun);\n } else {\n currentRun = 1;\n }\n }\n\n // Check repeated error fingerprints\n const errorCounts = new Map<string, number>();\n for (const r of results) {\n if (!r.isError) continue;\n const fp = fingerprint(r);\n errorCounts.set(fp, (errorCounts.get(fp) ?? 0) + 1);\n }\n const maxErrorRepeat = Math.max(0, ...[...errorCounts.values()]);\n\n const minReps = THRESHOLDS.loopMinRepetitions;\n const loopSeverity = Math.max(\n maxConsecutive >= minReps ? maxConsecutive - (minReps - 1) : 0,\n maxErrorRepeat >= minReps ? maxErrorRepeat - (minReps - 1) : 0,\n );\n\n if (loopSeverity === 0) return { score: 1, detail: 'No stuck loops', applicable: true };\n\n const score = Math.max(0, 1 - loopSeverity * THRESHOLDS.loopPenaltyPerOccurrence);\n const details: string[] = [];\n if (maxConsecutive >= minReps) details.push(`${maxConsecutive} consecutive identical calls`);\n if (maxErrorRepeat >= minReps) details.push(`same error repeated ${maxErrorRepeat}x`);\n return { score, detail: details.join('; '), applicable: true };\n}\n\n/**\n * Detect regressions: build/test passed at some point, then failed later.\n * Gives partial credit if the agent recovered (final state passes).\n */\nfunction scoreRegression(execResults: ExtractedToolCall[]): DimensionResult {\n const regressions: { label: string; recovered: boolean }[] = [];\n\n for (const [label, filter] of [\n ['Build', isBuildArgs],\n ['Tests', isTestArgs],\n ] as const) {\n const cmds = execResults.filter(r => r.toolName === 'execute_command' && isForegroundCommand(r) && filter(r.args));\n if (cmds.length < 2) continue;\n\n let sawPass = false;\n let sawRegression = false;\n for (const cmd of cmds) {\n const exitCode = getExitCode(cmd.result);\n const passed = isSuccessResult(cmd.result, cmd.isError);\n const failed = cmd.isError || (exitCode !== null && exitCode !== 0);\n\n if (passed) {\n if (sawRegression) {\n // Recovered from regression\n regressions.push({ label, recovered: true });\n sawRegression = false;\n }\n sawPass = true;\n }\n if (sawPass && failed) {\n sawRegression = true;\n }\n }\n\n if (sawRegression) {\n // Regression persisted at end of session\n regressions.push({ label, recovered: false });\n }\n }\n\n if (regressions.length === 0) return { score: 1, detail: 'No regressions', applicable: true };\n\n // Persistent regressions are severe (0), recovered regressions get partial credit (0.5)\n const persistentCount = regressions.filter(r => !r.recovered).length;\n const recoveredCount = regressions.filter(r => r.recovered).length;\n const score = Math.max(0, 1 - persistentCount * 0.5 - recoveredCount * 0.1);\n const details = regressions.map(\n r => `${r.label} ${r.recovered ? 'regressed then recovered' : 'regressed (persisted)'}`,\n );\n return { score, detail: details.join('; '), applicable: true };\n}\n\n/**\n * Score autonomy: penalize ask_user calls.\n * 0 calls = 1.0, each call reduces by 0.25 (up to a floor of 0).\n */\nfunction scoreAutonomy(results: ExtractedToolCall[]): DimensionResult {\n const askUserCalls = results.filter(r => r.toolName === 'ask_user');\n const count = askUserCalls.length;\n\n if (count === 0) return { score: 1, detail: 'No ask_user calls (fully autonomous)', applicable: true };\n\n const score = Math.max(0, 1 - count * THRESHOLDS.autonomyPenaltyPerAsk);\n return { score, detail: `${count} ask_user call${count > 1 ? 's' : ''}`, applicable: true };\n}\n\n/**\n * Compute weighted average of only applicable dimensions.\n * Returns null if no dimensions are applicable.\n */\nfunction weightedAverage(dimensions: Record<string, DimensionResult>, weights: Record<string, number>): number | null {\n let totalWeight = 0;\n let weightedSum = 0;\n\n for (const [key, result] of Object.entries(dimensions)) {\n if (!result.applicable) continue;\n const weight = weights[key] ?? 0;\n totalWeight += weight;\n weightedSum += result.score * weight;\n }\n\n if (totalWeight === 0) return null;\n return weightedSum / totalWeight;\n}\n\nexport function createOutcomeScorer() {\n return createScorer({\n id: 'mastracode-outcome',\n name: 'MastraCode Outcome',\n description:\n 'Grades coding session outcomes: build/test pass, tool errors, stuck loops, regressions, autonomy. Always-on.',\n type: 'agent',\n prepareRun: filterRun({ partTypes: ['tool-invocation', 'text'] }),\n })\n .preprocess(async ({ run }) => {\n const messages = (run.output ?? []) as MastraDBMessage[];\n const allResults = extractToolCalls(messages);\n const totalCalls = allResults.length;\n\n // H1: Empty sessions or sessions with no tool calls → score 0\n if (totalCalls < THRESHOLDS.minToolCalls) {\n const empty: DimensionResult = { score: 0, detail: 'No tool calls', applicable: false };\n return {\n empty: true as const,\n build: empty,\n tests: empty,\n toolErrors: empty,\n loops: empty,\n regression: empty,\n autonomy: empty,\n totalCalls,\n };\n }\n\n const execResults = allResults.filter(r => r.toolName === 'execute_command');\n\n return {\n empty: false as const,\n build: scoreBuild(execResults),\n tests: scoreTests(execResults),\n toolErrors: scoreToolErrors(allResults),\n loops: scoreStuckLoops(allResults),\n regression: scoreRegression(execResults),\n autonomy: scoreAutonomy(allResults),\n totalCalls,\n };\n })\n .generateScore(({ results }) => {\n const p = results.preprocessStepResult;\n if (p.empty) return 0;\n\n const score = weightedAverage(\n {\n build: p.build,\n tests: p.tests,\n toolErrors: p.toolErrors,\n loops: p.loops,\n regression: p.regression,\n autonomy: p.autonomy,\n },\n WEIGHTS,\n );\n\n return score === null ? 0 : Math.round(score * 100) / 100;\n })\n .generateReason(({ results, score }) => {\n const p = results.preprocessStepResult;\n if (p.empty) {\n return `Score: 0 (${p.totalCalls} tool calls — below minimum threshold for scoring)`;\n }\n\n const pct = (w: number) => `${(w * 100).toFixed(0)}%`;\n const dimLine = (name: string, weight: number, r: DimensionResult) =>\n r.applicable\n ? `${name} (${pct(weight)}): ${r.detail} [${r.score}]`\n : `${name}: ${r.detail} [N/A — excluded from average]`;\n\n const parts: string[] = [`Score: ${score} (${p.totalCalls} tool calls total)`];\n parts.push(dimLine('Build', WEIGHTS.build, p.build));\n parts.push(dimLine('Tests', WEIGHTS.tests, p.tests));\n parts.push(dimLine('Tool errors', WEIGHTS.toolErrors, p.toolErrors));\n parts.push(dimLine('Loops', WEIGHTS.loops, p.loops));\n parts.push(dimLine('Regression', WEIGHTS.regression, p.regression));\n parts.push(dimLine('Autonomy', WEIGHTS.autonomy, p.autonomy));\n\n return parts.join('\\n');\n });\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { parseExperimentalAgentSetting } from "./onboarding/settings.js";
|
|
2
2
|
import { createDurableAgent, createEventedAgent, isDurableAgent, isEventedAgent } from "@mastra/core/agent/durable";
|
|
3
|
-
|
|
3
|
+
// src/experimental-agent.ts
|
|
4
4
|
const ACCEPTED_VALUES = "\"durable\", \"evented\", or unset";
|
|
5
5
|
function parseExperimentalAgentEnvironment(env = process.env) {
|
|
6
6
|
const value = env.MASTRACODE_EXPERIMENTAL_AGENT;
|
|
@@ -30,7 +30,6 @@ function validateExperimentalAgent(agent, mastra, report = console.info) {
|
|
|
30
30
|
if (engineType !== expectedEngine) throw new Error(`Experimental agent "${selection}" resolved workflow engine ${JSON.stringify(engineType)} instead of "${expectedEngine}".`);
|
|
31
31
|
report(`Experimental agent: ${selection} (workflow engine: ${engineType})`);
|
|
32
32
|
}
|
|
33
|
-
//#endregion
|
|
34
33
|
export { parseExperimentalAgentEnvironment, resolveExperimentalAgent, validateExperimentalAgent, wrapExperimentalAgent };
|
|
35
34
|
|
|
36
35
|
//# sourceMappingURL=experimental-agent.js.map
|
package/dist/factory/client.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getPlatformSession } from "../platform/index.js";
|
|
2
2
|
import { MastraClient } from "@mastra/client-js";
|
|
3
|
-
|
|
3
|
+
// src/factory/client.ts
|
|
4
4
|
/** The agent controller every Factory serves its coding sessions under. */
|
|
5
5
|
const FACTORY_CONTROLLER_ID = "code";
|
|
6
6
|
const ORGANIZATION_ID_HEADER = "X-Mastra-Organization-Id";
|
|
@@ -92,7 +92,6 @@ function createFactoryClient(address) {
|
|
|
92
92
|
fetch: refreshingFetch(address)
|
|
93
93
|
});
|
|
94
94
|
}
|
|
95
|
-
//#endregion
|
|
96
95
|
export { FACTORY_CONTROLLER_ID, createFactoryClient, createFactoryUserSession, factoryHeaders, listFactoryProjects, refreshingFetch };
|
|
97
96
|
|
|
98
97
|
//# sourceMappingURL=client.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FACTORY_CONTROLLER_ID, createFactoryClient } from "./client.js";
|
|
2
|
-
|
|
2
|
+
// src/factory/remote-controller.ts
|
|
3
3
|
/**
|
|
4
4
|
* The Factory-side counterpart to the local agent controller. Modes, models, and
|
|
5
5
|
* provider auth come from the Factory, never from local settings or auth storage.
|
|
@@ -37,7 +37,6 @@ var RemoteController = class {
|
|
|
37
37
|
} : { hasAuth: true };
|
|
38
38
|
}
|
|
39
39
|
};
|
|
40
|
-
//#endregion
|
|
41
40
|
export { RemoteController };
|
|
42
41
|
|
|
43
42
|
//# sourceMappingURL=remote-controller.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createFactoryClient } from "./client.js";
|
|
2
2
|
import { randomUUID } from "crypto";
|
|
3
3
|
import { defaultDisplayState } from "@mastra/core/agent-controller";
|
|
4
|
-
|
|
4
|
+
// src/factory/remote-session.ts
|
|
5
5
|
const MAP_FIELDS = [
|
|
6
6
|
"activeTools",
|
|
7
7
|
"toolInputBuffers",
|
|
@@ -412,7 +412,6 @@ var RemoteSession = class {
|
|
|
412
412
|
this.abort();
|
|
413
413
|
}
|
|
414
414
|
};
|
|
415
|
-
//#endregion
|
|
416
415
|
export { RemoteSession };
|
|
417
416
|
|
|
418
417
|
//# sourceMappingURL=remote-session.js.map
|
package/dist/goal-manager.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { loadSettings } from "./onboarding/settings.js";
|
|
2
2
|
import { getGoalActivityDurationMs } from "@mastra/core/agent";
|
|
3
|
-
|
|
3
|
+
// src/goal-manager.ts
|
|
4
4
|
/**
|
|
5
5
|
* GoalManager — persistent cross-turn goals, backed by the Agent's native goal
|
|
6
6
|
* mechanism.
|
|
@@ -348,7 +348,6 @@ var GoalManager = class {
|
|
|
348
348
|
};
|
|
349
349
|
}
|
|
350
350
|
};
|
|
351
|
-
//#endregion
|
|
352
351
|
export { DEFAULT_MAX_TURNS, GoalManager };
|
|
353
352
|
|
|
354
353
|
//# sourceMappingURL=goal-manager.js.map
|
package/dist/goal-signal.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// src/goal-signal.ts
|
|
2
2
|
function createGoalReminderSignal(goal) {
|
|
3
3
|
return {
|
|
4
4
|
type: "system-reminder",
|
|
@@ -11,7 +11,6 @@ function createGoalReminderSignal(goal) {
|
|
|
11
11
|
}
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
|
-
//#endregion
|
|
15
14
|
export { createGoalReminderSignal };
|
|
16
15
|
|
|
17
16
|
//# sourceMappingURL=goal-signal.js.map
|
package/dist/headless/cli.js
CHANGED
|
@@ -11,7 +11,7 @@ import { FLAGS, buildParseArgsOptions, renderFlagUsage } from "./flags.js";
|
|
|
11
11
|
import { createMastraCode } from "../index.js";
|
|
12
12
|
import { existsSync } from "fs";
|
|
13
13
|
import { parseArgs } from "util";
|
|
14
|
-
|
|
14
|
+
// src/headless/cli.ts
|
|
15
15
|
/**
|
|
16
16
|
* CLI adapter for headless MastraCode runs.
|
|
17
17
|
*
|
|
@@ -250,7 +250,6 @@ async function runMCCli(predrainedInput, options) {
|
|
|
250
250
|
if (!stdoutFlushed && exitCode === 0) exitCode = 1;
|
|
251
251
|
process.exit(exitCode);
|
|
252
252
|
}
|
|
253
|
-
//#endregion
|
|
254
253
|
export { flushWritable, hasHeadlessFlag, parseHeadlessArgs, printHeadlessUsage, runMCCli };
|
|
255
254
|
|
|
256
255
|
//# sourceMappingURL=cli.js.map
|
package/dist/headless/flags.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { VALID_MODES, VALID_PERMISSION_MODES, VALID_THINKING_LEVELS } from "./types.js";
|
|
2
|
-
|
|
2
|
+
// src/headless/flags.ts
|
|
3
3
|
const VALID_OUTPUTS = [
|
|
4
4
|
"human",
|
|
5
5
|
"json",
|
|
@@ -198,7 +198,6 @@ function renderFlagUsage() {
|
|
|
198
198
|
return [`${label.padEnd(width)}${lines[0]}`, ...lines.slice(1).map((line) => `${" ".repeat(width)}${line}`)].join("\n");
|
|
199
199
|
}).join("\n");
|
|
200
200
|
}
|
|
201
|
-
//#endregion
|
|
202
201
|
export { FLAGS, VALID_OUTPUTS, buildParseArgsOptions, renderFlagUsage };
|
|
203
202
|
|
|
204
203
|
//# sourceMappingURL=flags.js.map
|
package/dist/headless/format.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// src/headless/format.ts
|
|
2
2
|
/** Truncate a string to `max` characters, appending "..." if truncated. */
|
|
3
3
|
function truncate(s, max) {
|
|
4
4
|
return s.length > max ? s.slice(0, max) + "..." : s;
|
|
@@ -91,7 +91,6 @@ function renderJsonResult(result) {
|
|
|
91
91
|
exitCode: result.exitCode
|
|
92
92
|
}) + "\n";
|
|
93
93
|
}
|
|
94
|
-
//#endregion
|
|
95
94
|
export { createHumanFormatState, formatHuman, formatJsonl, isJsonlEvent, renderJsonResult, renderTextResult, truncate };
|
|
96
95
|
|
|
97
96
|
//# sourceMappingURL=format.js.map
|
package/dist/headless/policy.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// src/headless/policy.ts
|
|
2
2
|
/**
|
|
3
3
|
* Default policy — reproduces the historical headless behavior:
|
|
4
4
|
* - approve every tool approval request,
|
|
@@ -36,7 +36,6 @@ function permissionModeToPolicy(mode) {
|
|
|
36
36
|
default: return autoApprovePolicy;
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
-
//#endregion
|
|
40
39
|
export { autoApprovePolicy, denyPolicy, permissionModeToPolicy };
|
|
41
40
|
|
|
42
41
|
//# sourceMappingURL=policy.js.map
|
package/dist/headless/run-mc.js
CHANGED
|
@@ -4,7 +4,7 @@ import { createGoalReminderSignal } from "../goal-signal.js";
|
|
|
4
4
|
import { MODEL_FALLBACK_STATE_KEY } from "../auth/account-rotation-processor.js";
|
|
5
5
|
import { autoApprovePolicy } from "./policy.js";
|
|
6
6
|
import { isSessionStartupCancelledError } from "@mastra/core/agent-controller";
|
|
7
|
-
|
|
7
|
+
// src/headless/run-mc.ts
|
|
8
8
|
/**
|
|
9
9
|
* Core programmatic runner for MastraCode headless runs.
|
|
10
10
|
*
|
|
@@ -430,7 +430,6 @@ function runMC(options) {
|
|
|
430
430
|
}
|
|
431
431
|
};
|
|
432
432
|
}
|
|
433
|
-
//#endregion
|
|
434
433
|
export { runMC };
|
|
435
434
|
|
|
436
435
|
//# sourceMappingURL=run-mc.js.map
|
package/dist/headless/types.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// src/headless/types.ts
|
|
2
2
|
const VALID_MODES = [
|
|
3
3
|
"build",
|
|
4
4
|
"plan",
|
|
@@ -13,7 +13,6 @@ const VALID_THINKING_LEVELS = [
|
|
|
13
13
|
"max"
|
|
14
14
|
];
|
|
15
15
|
const VALID_PERMISSION_MODES = ["auto", "deny"];
|
|
16
|
-
//#endregion
|
|
17
16
|
export { VALID_MODES, VALID_PERMISSION_MODES, VALID_THINKING_LEVELS };
|
|
18
17
|
|
|
19
18
|
//# sourceMappingURL=types.js.map
|
package/dist/hooks/config.js
CHANGED
|
@@ -2,7 +2,7 @@ import { DEFAULT_CONFIG_DIR } from "../constants.js";
|
|
|
2
2
|
import * as path$1 from "path";
|
|
3
3
|
import * as fs$1 from "fs";
|
|
4
4
|
import * as os$1 from "os";
|
|
5
|
-
|
|
5
|
+
// src/hooks/config.ts
|
|
6
6
|
/**
|
|
7
7
|
* Hook configuration loading from filesystem.
|
|
8
8
|
* Loads from global (~/.mastracode/hooks.json) and project (.mastracode/hooks.json).
|
|
@@ -74,7 +74,6 @@ function mergeConfigs(global, project) {
|
|
|
74
74
|
}
|
|
75
75
|
return merged;
|
|
76
76
|
}
|
|
77
|
-
//#endregion
|
|
78
77
|
export { VALID_EVENTS, getGlobalHooksPath, getProjectHooksPath, loadHooksConfig };
|
|
79
78
|
|
|
80
79
|
//# sourceMappingURL=config.js.map
|
package/dist/hooks/executor.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isBlockingEvent } from "./types.js";
|
|
2
2
|
import { spawn } from "child_process";
|
|
3
|
-
|
|
3
|
+
// src/hooks/executor.ts
|
|
4
4
|
/**
|
|
5
5
|
* Hook process execution.
|
|
6
6
|
* Spawns shell commands, handles stdin/stdout/exit-code protocol.
|
|
@@ -125,7 +125,6 @@ async function runHooksForEvent(hooks, stdinPayload, matchContext = {}) {
|
|
|
125
125
|
warnings
|
|
126
126
|
};
|
|
127
127
|
}
|
|
128
|
-
//#endregion
|
|
129
128
|
export { executeHook, matchesHook, runHooksForEvent };
|
|
130
129
|
|
|
131
130
|
//# sourceMappingURL=executor.js.map
|
package/dist/hooks/manager.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DEFAULT_CONFIG_DIR } from "../constants.js";
|
|
2
2
|
import { getGlobalHooksPath, getProjectHooksPath, loadHooksConfig } from "./config.js";
|
|
3
3
|
import { runHooksForEvent } from "./executor.js";
|
|
4
|
-
|
|
4
|
+
// src/hooks/manager.ts
|
|
5
5
|
/**
|
|
6
6
|
* HookManager — high-level orchestration for the hooks system.
|
|
7
7
|
* Created once at startup, provides methods for each lifecycle event.
|
|
@@ -249,7 +249,6 @@ var HookManager = class {
|
|
|
249
249
|
return runHooksForEvent(hooks, stdin);
|
|
250
250
|
}
|
|
251
251
|
};
|
|
252
|
-
//#endregion
|
|
253
252
|
export { HookManager };
|
|
254
253
|
|
|
255
254
|
//# sourceMappingURL=manager.js.map
|
package/dist/hooks/types.js
CHANGED
package/dist/index.js
CHANGED
|
@@ -87,7 +87,7 @@ import { DEFAULT_GOAL_JUDGE_PROMPT } from "@mastra/core/tools";
|
|
|
87
87
|
import { GithubSignals } from "@mastra/github-signals";
|
|
88
88
|
import { LibSQLStore, LibSQLVector } from "@mastra/libsql";
|
|
89
89
|
import { MastraPlatformExporter, MastraStorageExporter, Observability, SensitiveDataFilter } from "@mastra/observability";
|
|
90
|
-
|
|
90
|
+
// src/index.ts
|
|
91
91
|
const CODE_AGENT_ID = "code-agent";
|
|
92
92
|
const MASTRACODE_TRANSIENT_CONNECTION_MAX_RETRIES = 10;
|
|
93
93
|
const MASTRACODE_MAX_PROCESSOR_RETRIES = 64;
|
|
@@ -1365,7 +1365,6 @@ async function prepareAgentControllerMount(config) {
|
|
|
1365
1365
|
* case: `bootLocalAgentController` (local) or {@link mountAgentControllerOnMastra} (server).
|
|
1366
1366
|
*/
|
|
1367
1367
|
const createMastraCode = bootLocalAgentController;
|
|
1368
|
-
//#endregion
|
|
1369
1368
|
export { KnowledgeInspectorError, LOCAL_KNOWLEDGE_ORG_ID, autoApprovePolicy, bootLocalAgentController, createAuthStorage, createKnowledgeInspector, createMastraCode, createMastraCodeAgentController, denyPolicy, formatHuman, formatJsonl, hasHeadlessFlag, mountAgentControllerOnMastra, permissionModeToPolicy, prepareAgentControllerMount, renderJsonResult, renderTextResult, resolveCloudObservabilityConfig, runMC, runMCCli, wireSessionConcerns };
|
|
1370
1369
|
|
|
1371
1370
|
//# sourceMappingURL=index.js.map
|
package/dist/ipc/ipc-reporter.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// src/ipc/ipc-reporter.ts
|
|
2
2
|
var IPCReporter = class {
|
|
3
3
|
enabled;
|
|
4
4
|
constructor() {
|
|
@@ -15,7 +15,6 @@ var IPCReporter = class {
|
|
|
15
15
|
}
|
|
16
16
|
};
|
|
17
17
|
const ipcReporter = new IPCReporter();
|
|
18
|
-
//#endregion
|
|
19
18
|
export { ipcReporter };
|
|
20
19
|
|
|
21
20
|
//# sourceMappingURL=ipc-reporter.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { resolveKnowledgeScopeIdentity } from "./knowledge-scope.js";
|
|
2
2
|
import { createKnowledgeNodeCursor, isKnowledgeScopeVisible, parseKnowledgeWikilinks } from "@mastra/core/storage";
|
|
3
|
-
|
|
3
|
+
// src/knowledge-inspector.ts
|
|
4
4
|
var KnowledgeInspectorError = class extends Error {
|
|
5
5
|
code;
|
|
6
6
|
constructor(code, message) {
|
|
@@ -510,7 +510,6 @@ async function createKnowledgeInspector(input) {
|
|
|
510
510
|
session: input.session
|
|
511
511
|
}) : void 0;
|
|
512
512
|
}
|
|
513
|
-
//#endregion
|
|
514
513
|
export { KnowledgeInspectorError, createKnowledgeInspector };
|
|
515
514
|
|
|
516
515
|
//# sourceMappingURL=knowledge-inspector.js.map
|
package/dist/knowledge-scope.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// src/knowledge-scope.ts
|
|
2
2
|
/**
|
|
3
3
|
* The organization rung local (TUI/studio) knowledge is curated under. A fixed
|
|
4
4
|
* literal on purpose: deriving it from a hostname, machine id, or path would
|
|
@@ -41,7 +41,6 @@ function resolveKnowledgeScopeIdentity(state) {
|
|
|
41
41
|
organizationId: LOCAL_KNOWLEDGE_ORG_ID
|
|
42
42
|
};
|
|
43
43
|
}
|
|
44
|
-
//#endregion
|
|
45
44
|
export { LOCAL_KNOWLEDGE_ORG_ID, resolveKnowledgeScopeIdentity };
|
|
46
45
|
|
|
47
46
|
//# sourceMappingURL=knowledge-scope.js.map
|
package/dist/lsp/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/lsp/client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAwC;IAC3D,OAAO,CAAC,qBAAqB,CAAa;gBAE9B,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM;IAK5D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkLjC;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAkBvE;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAYtE;;;OAGG;IACG,kBAAkB,CACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAa,EACxB,aAAa,GAAE,OAAe,GAC7B,OAAO,CAAC,UAAU,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/lsp/client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAwC;IAC3D,OAAO,CAAC,qBAAqB,CAAa;gBAE9B,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM;IAK5D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkLjC;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAkBvE;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAYtE;;;OAGG;IACG,kBAAkB,CACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAa,EACxB,aAAa,GAAE,OAAe,GAC7B,OAAO,CAAC,UAAU,EAAE,CAAC;IA8BxB;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAa/E;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE;IAK9C;;OAEG;IACH,iBAAiB,IAAI,UAAU,EAAE;IAQjC;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAcnC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAoChC"}
|
package/dist/lsp/client.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StreamMessageReader, StreamMessageWriter, createMessageConnection } from "vscode-jsonrpc/node.js";
|
|
2
2
|
import { Position, TextDocumentIdentifier } from "vscode-languageserver-protocol";
|
|
3
|
-
|
|
3
|
+
// src/lsp/client.ts
|
|
4
4
|
/**
|
|
5
5
|
* LSP Client wrapper for JSON-RPC communication
|
|
6
6
|
*/
|
|
@@ -245,7 +245,6 @@ var LSPClient = class {
|
|
|
245
245
|
this.diagnostics = /* @__PURE__ */ new Map();
|
|
246
246
|
}
|
|
247
247
|
};
|
|
248
|
-
//#endregion
|
|
249
248
|
export { LSPClient };
|
|
250
249
|
|
|
251
250
|
//# sourceMappingURL=client.js.map
|