nexus-agents 8.24.2 → 8.26.0

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.
@@ -23,10 +23,10 @@ import {
23
23
  toolSuccessStructured,
24
24
  withProgressHeartbeat,
25
25
  wrapToolWithTimeout
26
- } from "./chunk-YA3ULAKB.js";
26
+ } from "./chunk-7P2GCEXB.js";
27
27
  import {
28
28
  VERSION
29
- } from "./chunk-WGWKS6KS.js";
29
+ } from "./chunk-XR4LCWG2.js";
30
30
  import {
31
31
  assessPanelIndependence,
32
32
  countDistinctModels,
@@ -7682,4 +7682,4 @@ export {
7682
7682
  CONSENSUS_VOTE_TOOL_SCHEMA,
7683
7683
  registerConsensusVoteTool
7684
7684
  };
7685
- //# sourceMappingURL=chunk-4DDARPJT.js.map
7685
+ //# sourceMappingURL=chunk-4EZINMIF.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERSION
3
- } from "./chunk-WGWKS6KS.js";
3
+ } from "./chunk-XR4LCWG2.js";
4
4
  import {
5
5
  emitClawGuardViolation
6
6
  } from "./chunk-YOT4GWJV.js";
@@ -2255,4 +2255,4 @@ export {
2255
2255
  VOTING_THRESHOLDS,
2256
2256
  ConsensusMetricsSchema
2257
2257
  };
2258
- //# sourceMappingURL=chunk-YA3ULAKB.js.map
2258
+ //# sourceMappingURL=chunk-7P2GCEXB.js.map
@@ -8,7 +8,7 @@ import {
8
8
  NODE_ENGINE_RANGE,
9
9
  VERSION,
10
10
  isNodeVersionSupported
11
- } from "./chunk-WGWKS6KS.js";
11
+ } from "./chunk-XR4LCWG2.js";
12
12
  import {
13
13
  capitalize
14
14
  } from "./chunk-7LP6VJRP.js";
@@ -1228,7 +1228,7 @@ async function runDoctorFix(result) {
1228
1228
  writeLine2("\u2500".repeat(40));
1229
1229
  let fixCount = 0;
1230
1230
  if (!result.dataDirectory.rootExists || result.dataDirectory.subdirectories.some((d) => !d.exists || !d.writable)) {
1231
- const { initDataDirectories: initDataDirectories2, describeDataDirFix: describeDataDirFix2 } = await import("./setup-data-dir-5XI7DMHS.js");
1231
+ const { initDataDirectories: initDataDirectories2, describeDataDirFix: describeDataDirFix2 } = await import("./setup-data-dir-HAQK23WQ.js");
1232
1232
  const outcome = describeDataDirFix2(initDataDirectories2());
1233
1233
  writeLine2(outcome.line);
1234
1234
  if (outcome.counted) fixCount++;
@@ -1330,4 +1330,4 @@ export {
1330
1330
  startStdioServer,
1331
1331
  closeServer
1332
1332
  };
1333
- //# sourceMappingURL=chunk-I4LNM23C.js.map
1333
+ //# sourceMappingURL=chunk-D2EMIL3K.js.map
@@ -7,7 +7,7 @@ import {
7
7
  toolStructuredError,
8
8
  toolSuccessStructured,
9
9
  wrapToolWithTimeout
10
- } from "./chunk-YA3ULAKB.js";
10
+ } from "./chunk-7P2GCEXB.js";
11
11
  import {
12
12
  JsonlStore,
13
13
  SECURITY_KEYWORDS,
@@ -2159,4 +2159,4 @@ export {
2159
2159
  runImprovementReview,
2160
2160
  registerImprovementReviewTool
2161
2161
  };
2162
- //# sourceMappingURL=chunk-O2EJO2N5.js.map
2162
+ //# sourceMappingURL=chunk-FETVEDXN.js.map
@@ -21,7 +21,7 @@ import {
21
21
  import {
22
22
  DEFAULT_TASK_TTL_MS,
23
23
  clampTaskTtl
24
- } from "./chunk-I4LNM23C.js";
24
+ } from "./chunk-D2EMIL3K.js";
25
25
  import {
26
26
  executeExpert
27
27
  } from "./chunk-CN3VAMQD.js";
@@ -55,9 +55,10 @@ import {
55
55
  toJobSummary,
56
56
  updateStage,
57
57
  writeJobCancelled
58
- } from "./chunk-4DDARPJT.js";
58
+ } from "./chunk-4EZINMIF.js";
59
59
  import {
60
- allOf
60
+ allOf,
61
+ anyOf
61
62
  } from "./chunk-OQB3XC5O.js";
62
63
  import {
63
64
  normalizeTopicToCanonical,
@@ -74,7 +75,7 @@ import {
74
75
  } from "./chunk-OYTRYITB.js";
75
76
  import {
76
77
  withPrerequisite
77
- } from "./chunk-O2EJO2N5.js";
78
+ } from "./chunk-FETVEDXN.js";
78
79
  import {
79
80
  NOOP_NOTIFIER,
80
81
  RateLimiter,
@@ -99,7 +100,7 @@ import {
99
100
  withAuditTrail,
100
101
  withProgressHeartbeat,
101
102
  wrapToolWithTimeout
102
- } from "./chunk-YA3ULAKB.js";
103
+ } from "./chunk-7P2GCEXB.js";
103
104
  import {
104
105
  createAuditTrail,
105
106
  createGraphAuditBridge,
@@ -27448,7 +27449,8 @@ function renderModelPerformance(models, options) {
27448
27449
  String(mp.n).padStart(6),
27449
27450
  successRateStr.padStart(showCI ? 25 : 12),
27450
27451
  mp.avgReward.toFixed(3).padStart(10),
27451
- `${(mp.winRate * 100).toFixed(0)}%`.padStart(8)
27452
+ // No comparative outcomes → the win rate was never measured (#5650).
27453
+ (mp.comparableN === 0 ? "-" : `${(mp.winRate * 100).toFixed(0)}%`).padStart(8)
27452
27454
  ].join(" | ");
27453
27455
  lines.push(row);
27454
27456
  }
@@ -27489,8 +27491,12 @@ function renderHealthIndicators(health) {
27489
27491
  lines.push("-".repeat(60));
27490
27492
  const check = (ok2) => ok2 === null ? "?" : ok2 ? "\u2713" : "\u2717";
27491
27493
  lines.push(`${check(health.hasMinimumData)} Minimum Data`);
27492
- lines.push(`${check(health.isLearning)} Learning Progress${health.isLearning === null ? " (unmeasured)" : ""}`);
27493
- lines.push(`${check(health.healthyExploration)} Healthy Exploration${health.healthyExploration === null ? " (unmeasured)" : ""}`);
27494
+ lines.push(
27495
+ `${check(health.isLearning)} Learning Progress${health.isLearning === null ? " (unmeasured)" : ""}`
27496
+ );
27497
+ lines.push(
27498
+ `${check(health.healthyExploration)} Healthy Exploration${health.healthyExploration === null ? " (unmeasured)" : ""}`
27499
+ );
27494
27500
  lines.push(`${check(health.noUnderperformers)} No Underperformers`);
27495
27501
  lines.push("");
27496
27502
  lines.push(
@@ -27563,6 +27569,7 @@ function calculateModelPerformance(model, outcomes) {
27563
27569
  avgLatencyMs,
27564
27570
  winRate: winLoss.winRate,
27565
27571
  winRateCI: winLoss.winRateCI,
27572
+ comparableN: comparableOutcomes.length,
27566
27573
  costEfficiency
27567
27574
  };
27568
27575
  }
@@ -45665,7 +45672,7 @@ function buildVotingInput(plan, config) {
45665
45672
  }
45666
45673
  async function executeSingleVote(plan, config, log) {
45667
45674
  try {
45668
- const { executeVoting } = await import("./consensus-vote-UYC4OKHJ.js");
45675
+ const { executeVoting } = await import("./consensus-vote-6WG636MI.js");
45669
45676
  const input = buildVotingInput(plan, config);
45670
45677
  const result = await executeVoting(input, log);
45671
45678
  return parseVotingResult(result);
@@ -46057,11 +46064,29 @@ function buildHarnessResult(planResult, tasks) {
46057
46064
  securityRan: false
46058
46065
  };
46059
46066
  }
46067
+ function deriveTaskAggregate(plannedTasks, completedTasks) {
46068
+ const completedById = new Map(completedTasks.map((t) => [t.id, t]));
46069
+ const allTasksDone = allOf(
46070
+ plannedTasks,
46071
+ (task) => completedById.get(task.id)?.status === "done",
46072
+ false
46073
+ );
46074
+ const anyTaskDone = anyOf(
46075
+ plannedTasks,
46076
+ (task) => completedById.get(task.id)?.status === "done",
46077
+ false
46078
+ );
46079
+ return {
46080
+ allTasksDone,
46081
+ taskStatus: allTasksDone ? "all_done" : anyTaskDone ? "partial" : "none"
46082
+ };
46083
+ }
46060
46084
  async function runImplSecurityPhase(planResult, tasks, stages, run) {
46061
46085
  const { sid, qualityGateMode, limits } = run;
46062
46086
  const implResult = await implementQaLoop(tasks, stages, limits);
46063
46087
  if (sid !== void 0)
46064
46088
  saveStageCheckpoint(sid, "implement", { type: "implement", tasks: implResult.completedTasks });
46089
+ const { allTasksDone, taskStatus } = deriveTaskAggregate(tasks, implResult.completedTasks);
46065
46090
  const qaGate = await runQualityGateStage(stages, qualityGateMode);
46066
46091
  if (qualityGateMode === "blocking" && !qaGate.passed) {
46067
46092
  return {
@@ -46072,7 +46097,8 @@ async function runImplSecurityPhase(planResult, tasks, stages, run) {
46072
46097
  qaIterations: implResult.totalIterations,
46073
46098
  // The gate short-circuited before the scan — absence, not a verdict.
46074
46099
  securityPassed: false,
46075
- securityRan: false
46100
+ securityRan: false,
46101
+ taskStatus
46076
46102
  };
46077
46103
  }
46078
46104
  const security = await withStep({ name: "security-scan" }, async (ctx) => {
@@ -46085,13 +46111,14 @@ async function runImplSecurityPhase(planResult, tasks, stages, run) {
46085
46111
  if (security.passed) cleanupCheckpoint2(sid);
46086
46112
  }
46087
46113
  return {
46088
- completed: security.passed,
46114
+ completed: allTasksDone && security.passed,
46089
46115
  plan: planResult.plan,
46090
46116
  tasks: implResult.completedTasks.length > 0 ? implResult.completedTasks : tasks,
46091
46117
  voteIterations: planResult.iterations,
46092
46118
  qaIterations: implResult.totalIterations,
46093
46119
  securityPassed: security.passed,
46094
46120
  securityRan: security.verdict !== "skip",
46121
+ taskStatus,
46095
46122
  ...security.verdict === "skip" ? { securityNote: security.feedback } : {}
46096
46123
  };
46097
46124
  }
@@ -47437,7 +47464,7 @@ ${contextBlock}`;
47437
47464
  const strategy = config.votingStrategy ?? "higher_order";
47438
47465
  await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
47439
47466
  try {
47440
- const { executeVoting } = await import("./consensus-vote-UYC4OKHJ.js");
47467
+ const { executeVoting } = await import("./consensus-vote-6WG636MI.js");
47441
47468
  const votingResult = await executeVoting(
47442
47469
  {
47443
47470
  proposal: buildVoteProposal(plan, research),
@@ -50453,12 +50480,24 @@ function describePlanFailure(record) {
50453
50480
  }
50454
50481
  return void 0;
50455
50482
  }
50483
+ function describeTaskFailure(record) {
50484
+ if (record["taskStatus"] === "none") {
50485
+ return `${FAILURE_PREFIX} no planned tasks completed successfully`;
50486
+ }
50487
+ if (record["taskStatus"] === "partial") {
50488
+ return `${FAILURE_PREFIX} one or more planned tasks did not complete successfully`;
50489
+ }
50490
+ return void 0;
50491
+ }
50456
50492
  function describeIncompletePipeline(record) {
50457
50493
  const planFailure = describePlanFailure(record);
50458
50494
  if (planFailure !== void 0) return planFailure;
50459
- if (record["securityRan"] === true) {
50495
+ const taskFailure = describeTaskFailure(record);
50496
+ if (taskFailure !== void 0 && record["securityPassed"] !== false) return taskFailure;
50497
+ if (record["securityRan"] === true && record["securityPassed"] !== true) {
50460
50498
  return `${FAILURE_PREFIX} the security gate rejected the change`;
50461
50499
  }
50500
+ if (taskFailure !== void 0) return taskFailure;
50462
50501
  if (record["securityRan"] === false) {
50463
50502
  if (typeof record["securityNote"] === "string") {
50464
50503
  return `${FAILURE_PREFIX} the security scan did not run (${record["securityNote"]}); the change is blocked until it does`;
@@ -51433,6 +51472,7 @@ function buildStructuredOutput(result, simulated) {
51433
51472
  // describing it. A live `run_dev_pipeline({ dryRun: true })` came back with
51434
51473
  // no way to tell a successful dry run from a failed pipeline.
51435
51474
  ...result.dryRun !== void 0 ? { dryRun: result.dryRun } : {},
51475
+ ...result.taskStatus !== void 0 ? { taskStatus: result.taskStatus } : {},
51436
51476
  voteIterations: result.voteIterations,
51437
51477
  qaIterations: result.qaIterations,
51438
51478
  plan: result.plan,
@@ -56140,4 +56180,4 @@ export {
56140
56180
  shutdownFeedbackSubscriber,
56141
56181
  createEventBusBridge
56142
56182
  };
56143
- //# sourceMappingURL=chunk-CKTGOSEL.js.map
56183
+ //# sourceMappingURL=chunk-TDPV3VO5.js.map