@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/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