@algosuite/vo-mcp 0.2.0-beta.49 → 0.2.0-beta.50
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/README.md +2 -0
- package/dist/cli.js +169 -18
- package/dist/cli.js.map +4 -4
- package/dist/index.js +46 -8
- package/dist/index.js.map +2 -2
- package/dist/runner-cli.js +443 -93
- package/dist/runner-cli.js.map +4 -4
- package/dist/runner-supervisor.js +55 -29
- package/dist/runner-supervisor.js.map +4 -4
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1490,7 +1490,17 @@ function assertWithinByteCap(toolName, fieldName, value, maxBytes) {
|
|
|
1490
1490
|
);
|
|
1491
1491
|
}
|
|
1492
1492
|
}
|
|
1493
|
+
var REPO_RE = /^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/u;
|
|
1494
|
+
function subjectFromEnv(env = process.env) {
|
|
1495
|
+
const code_task_id = (env["VO_CODE_TASK_ID"] ?? "").trim().slice(0, 120);
|
|
1496
|
+
const repo = (env["VO_CODE_TASK_REPO"] ?? "").trim();
|
|
1497
|
+
const subject = {};
|
|
1498
|
+
if (code_task_id) subject.code_task_id = code_task_id;
|
|
1499
|
+
if (repo && REPO_RE.test(repo) && repo.length <= 200) subject.repo = repo;
|
|
1500
|
+
return subject.code_task_id || subject.repo ? subject : null;
|
|
1501
|
+
}
|
|
1493
1502
|
function buildBaseEvent(args) {
|
|
1503
|
+
const subject = args.subject === void 0 ? subjectFromEnv() : args.subject;
|
|
1494
1504
|
return {
|
|
1495
1505
|
schema_version: 1,
|
|
1496
1506
|
event_id: args.eventId ?? randomUUID(),
|
|
@@ -1516,7 +1526,12 @@ function buildBaseEvent(args) {
|
|
|
1516
1526
|
downstream_outcome: null,
|
|
1517
1527
|
vo_mcp_version: VO_MCP_VERSION,
|
|
1518
1528
|
consensus_engine_version: null,
|
|
1519
|
-
cache_hit: false
|
|
1529
|
+
cache_hit: false,
|
|
1530
|
+
// OMIT the key when there is no subject (rather than `subject: null`): the
|
|
1531
|
+
// ingest schema is `.strict()`, so an event with no subject stays valid on a
|
|
1532
|
+
// sink that has not learned the field yet — only subject-carrying events
|
|
1533
|
+
// depend on the sink being current (deploy ordering: sink before producer).
|
|
1534
|
+
...subject ? { subject } : {}
|
|
1520
1535
|
};
|
|
1521
1536
|
}
|
|
1522
1537
|
function jsonContent(value) {
|
|
@@ -1582,6 +1597,16 @@ function aggregateEventTokenUsage(src, engineUsage) {
|
|
|
1582
1597
|
total_cost_usd: anyCost ? costMicroUsd / 1e6 : null
|
|
1583
1598
|
};
|
|
1584
1599
|
}
|
|
1600
|
+
function trajectoryFromEngine(result, known = {}) {
|
|
1601
|
+
const rounds = typeof result.token_usage?.rounds_counted === "number" && Number.isInteger(result.token_usage.rounds_counted) && result.token_usage.rounds_counted >= 0 ? result.token_usage.rounds_counted : null;
|
|
1602
|
+
const called = result.fan_out_diagnostics?.models_called;
|
|
1603
|
+
const turns = typeof called === "number" && Number.isInteger(called) && called >= 0 ? called : rounds !== null && rounds > 0 ? result.per_model_verdicts.length * rounds : null;
|
|
1604
|
+
const sourceGrounded = result.citation_grade !== void 0 || result.low_confidence_sources !== void 0;
|
|
1605
|
+
const tool_calls = typeof known.tool_calls === "number" && Number.isInteger(known.tool_calls) && known.tool_calls >= 0 ? known.tool_calls : sourceGrounded ? null : 0;
|
|
1606
|
+
if (rounds === null && turns === null && tool_calls === null) return {};
|
|
1607
|
+
const trajectory = { rounds, turns, tool_calls };
|
|
1608
|
+
return { trajectory };
|
|
1609
|
+
}
|
|
1585
1610
|
function toEventSynthesizedVerdict(src) {
|
|
1586
1611
|
return {
|
|
1587
1612
|
verdict: src.verdict,
|
|
@@ -1954,7 +1979,8 @@ async function handleCheckHollowTest(deps, rawInput, signal) {
|
|
|
1954
1979
|
consensus_confidence: engineResult.synthesized_verdict.confidence,
|
|
1955
1980
|
duration_ms: engineResult.duration_ms,
|
|
1956
1981
|
consensus_engine_version: engineResult.engine_version,
|
|
1957
|
-
...aggregateEventTokenUsage(engineResult.per_model_verdicts, engineResult.token_usage)
|
|
1982
|
+
...aggregateEventTokenUsage(engineResult.per_model_verdicts, engineResult.token_usage),
|
|
1983
|
+
...trajectoryFromEngine(engineResult)
|
|
1958
1984
|
};
|
|
1959
1985
|
const payload = {
|
|
1960
1986
|
verdict: engineResult.synthesized_verdict.verdict,
|
|
@@ -2137,7 +2163,8 @@ async function handleVerifyAnswer(deps, rawInput, signal) {
|
|
|
2137
2163
|
consensus_confidence: engineResult.synthesized_verdict.confidence,
|
|
2138
2164
|
duration_ms: engineResult.duration_ms,
|
|
2139
2165
|
consensus_engine_version: engineResult.engine_version,
|
|
2140
|
-
...aggregateEventTokenUsage(engineResult.per_model_verdicts, engineResult.token_usage)
|
|
2166
|
+
...aggregateEventTokenUsage(engineResult.per_model_verdicts, engineResult.token_usage),
|
|
2167
|
+
...trajectoryFromEngine(engineResult)
|
|
2141
2168
|
};
|
|
2142
2169
|
const payload = {
|
|
2143
2170
|
verdict: engineResult.synthesized_verdict.verdict,
|
|
@@ -2403,7 +2430,8 @@ async function handleConsensusJudgment(deps, rawInput, signal) {
|
|
|
2403
2430
|
consensus_engine_version: engineResult.engine_version,
|
|
2404
2431
|
per_model_verdicts: perModelForEvent,
|
|
2405
2432
|
synthesized_verdict: synthForEvent,
|
|
2406
|
-
...aggregateEventTokenUsage(engineResult.per_model_verdicts, engineResult.token_usage)
|
|
2433
|
+
...aggregateEventTokenUsage(engineResult.per_model_verdicts, engineResult.token_usage),
|
|
2434
|
+
...trajectoryFromEngine(engineResult)
|
|
2407
2435
|
};
|
|
2408
2436
|
const payload = {
|
|
2409
2437
|
verdict: engineResult.synthesized_verdict.verdict,
|
|
@@ -2616,7 +2644,8 @@ async function handleArchitectureReview(deps, rawInput, signal) {
|
|
|
2616
2644
|
consensus_confidence: engineResult.synthesized_verdict.confidence,
|
|
2617
2645
|
duration_ms: engineResult.duration_ms,
|
|
2618
2646
|
consensus_engine_version: engineResult.engine_version,
|
|
2619
|
-
...aggregateEventTokenUsage(engineResult.per_model_verdicts, engineResult.token_usage)
|
|
2647
|
+
...aggregateEventTokenUsage(engineResult.per_model_verdicts, engineResult.token_usage),
|
|
2648
|
+
...trajectoryFromEngine(engineResult)
|
|
2620
2649
|
};
|
|
2621
2650
|
const escalationRequired = engineResult.escalation_required === true || engineResult.escalation_required === void 0 && engineResult.synthesized_verdict.dissent_summary !== null;
|
|
2622
2651
|
const escalationReason = engineResult.escalation_reason ?? engineResult.synthesized_verdict.dissent_summary ?? "";
|
|
@@ -4102,7 +4131,8 @@ Produce the JSON dispatch plan now.`;
|
|
|
4102
4131
|
consensus_engine_version: engineResult.engine_version,
|
|
4103
4132
|
per_model_verdicts: toEventPerModelVerdicts(engineResult.per_model_verdicts),
|
|
4104
4133
|
synthesized_verdict: toEventSynthesizedVerdict(engineResult.synthesized_verdict),
|
|
4105
|
-
...aggregateEventTokenUsage(engineResult.per_model_verdicts, engineResult.token_usage)
|
|
4134
|
+
...aggregateEventTokenUsage(engineResult.per_model_verdicts, engineResult.token_usage),
|
|
4135
|
+
...trajectoryFromEngine(engineResult)
|
|
4106
4136
|
};
|
|
4107
4137
|
deps.events.append(enrichedEvent);
|
|
4108
4138
|
return jsonContent(envelope);
|
|
@@ -4672,6 +4702,7 @@ async function handleRejectAndRetry(deps, rawInput, _signal) {
|
|
|
4672
4702
|
// src/tools/pr/review-merge.ts
|
|
4673
4703
|
var TOOL_NAME18 = "vo_review_merge";
|
|
4674
4704
|
var LIST_PATH = "/api/v1/admin/pr/list";
|
|
4705
|
+
var DEFAULT_REVIEW_REPO = "Algosuite-ai/Nexus";
|
|
4675
4706
|
var ENGINE_GATE = "final-deep-verify";
|
|
4676
4707
|
var EVENT_GATE = "merge-review";
|
|
4677
4708
|
var UNAVAILABLE_REASON = "vo_review_merge needs cloud mode to fetch PR context \u2014 set VO_CONTROL_PLANE_URL + VO_CONTROL_PLANE_ADMIN_TOKEN in the MCP env. (It is read-only; it never merges.)";
|
|
@@ -4736,6 +4767,11 @@ async function handleReviewMerge(deps, rawInput, signal) {
|
|
|
4736
4767
|
if (rawInput.notes !== void 0) normalizedInput.notes = rawInput.notes;
|
|
4737
4768
|
const inputJson = JSON.stringify(normalizedInput);
|
|
4738
4769
|
const key = deps.cache.keyFor(TOOL_NAME18, normalizedInput);
|
|
4770
|
+
const subject = {
|
|
4771
|
+
...subjectFromEnv() ?? {},
|
|
4772
|
+
repo: subjectFromEnv()?.repo ?? DEFAULT_REVIEW_REPO,
|
|
4773
|
+
pr_number: prNumber
|
|
4774
|
+
};
|
|
4739
4775
|
const baseEvent = buildBaseEvent({
|
|
4740
4776
|
tool: TOOL_NAME18,
|
|
4741
4777
|
gateType: EVENT_GATE,
|
|
@@ -4743,7 +4779,8 @@ async function handleReviewMerge(deps, rawInput, signal) {
|
|
|
4743
4779
|
inputExcerpt: inputJson.slice(0, 300),
|
|
4744
4780
|
inputSizeBytes: bytesOf(inputJson),
|
|
4745
4781
|
session: deps.session,
|
|
4746
|
-
now: deps.now()
|
|
4782
|
+
now: deps.now(),
|
|
4783
|
+
subject
|
|
4747
4784
|
});
|
|
4748
4785
|
const emit = (payload2, eventExtra) => {
|
|
4749
4786
|
deps.events.append(eventExtra ? { ...baseEvent, ...eventExtra } : baseEvent);
|
|
@@ -4845,7 +4882,8 @@ async function handleReviewMerge(deps, rawInput, signal) {
|
|
|
4845
4882
|
consensus_engine_version: result.engine_version,
|
|
4846
4883
|
per_model_verdicts: perModel,
|
|
4847
4884
|
synthesized_verdict: synth,
|
|
4848
|
-
...aggregateEventTokenUsage(result.per_model_verdicts, result.token_usage)
|
|
4885
|
+
...aggregateEventTokenUsage(result.per_model_verdicts, result.token_usage),
|
|
4886
|
+
...trajectoryFromEngine(result)
|
|
4849
4887
|
});
|
|
4850
4888
|
}
|
|
4851
4889
|
|