nexus-agents 8.48.4 → 8.49.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.
@@ -8,7 +8,7 @@ import {
8
8
  NODE_ENGINE_RANGE,
9
9
  VERSION,
10
10
  isNodeVersionSupported
11
- } from "./chunk-PFQ7QLNA.js";
11
+ } from "./chunk-IEJ3TVIY.js";
12
12
  import {
13
13
  claimGlobalRegistry
14
14
  } from "./chunk-6GKP2RLC.js";
@@ -1247,7 +1247,7 @@ async function runDoctorFix(result) {
1247
1247
  writeLine2("\u2500".repeat(40));
1248
1248
  let fixCount = 0;
1249
1249
  if (!result.dataDirectory.rootExists || result.dataDirectory.subdirectories.some((d) => !d.exists || !d.writable)) {
1250
- const { initDataDirectories: initDataDirectories2, describeDataDirFix: describeDataDirFix2 } = await import("./setup-data-dir-RAKH2YJK.js");
1250
+ const { initDataDirectories: initDataDirectories2, describeDataDirFix: describeDataDirFix2 } = await import("./setup-data-dir-23DAGSYQ.js");
1251
1251
  const outcome = describeDataDirFix2(initDataDirectories2());
1252
1252
  writeLine2(outcome.line);
1253
1253
  if (outcome.counted) fixCount++;
@@ -1349,4 +1349,4 @@ export {
1349
1349
  startStdioServer,
1350
1350
  closeServer
1351
1351
  };
1352
- //# sourceMappingURL=chunk-OGJN2C5P.js.map
1352
+ //# sourceMappingURL=chunk-BEBLEQ7R.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERSION
3
- } from "./chunk-PFQ7QLNA.js";
3
+ } from "./chunk-IEJ3TVIY.js";
4
4
  import {
5
5
  emitClawGuardViolation
6
6
  } from "./chunk-MOVW4ZFU.js";
@@ -2360,4 +2360,4 @@ export {
2360
2360
  VOTING_THRESHOLDS,
2361
2361
  ConsensusMetricsSchema
2362
2362
  };
2363
- //# sourceMappingURL=chunk-4RBYWXD4.js.map
2363
+ //# sourceMappingURL=chunk-BUECRU6V.js.map
@@ -23,10 +23,10 @@ import {
23
23
  toolSuccessStructured,
24
24
  withProgressHeartbeat,
25
25
  wrapToolWithTimeout
26
- } from "./chunk-4RBYWXD4.js";
26
+ } from "./chunk-BUECRU6V.js";
27
27
  import {
28
28
  VERSION
29
- } from "./chunk-PFQ7QLNA.js";
29
+ } from "./chunk-IEJ3TVIY.js";
30
30
  import {
31
31
  assessPanelIndependence,
32
32
  countDistinctModels,
@@ -2813,6 +2813,7 @@ function createConsensusEngine(config, logger11) {
2813
2813
  }
2814
2814
 
2815
2815
  // src/consensus/quorum-validator.ts
2816
+ var TIE_TOLERANCE = 1e-9;
2816
2817
  var QuorumValidator = class {
2817
2818
  logger;
2818
2819
  constructor(logger11) {
@@ -2827,6 +2828,9 @@ var QuorumValidator = class {
2827
2828
  if (!breakdown.quorumReached) {
2828
2829
  return this.buildNotReachedResult(breakdown, config);
2829
2830
  }
2831
+ if (this.isTie(breakdown)) {
2832
+ return this.buildTieResult(breakdown);
2833
+ }
2830
2834
  return this.buildReachedResult(breakdown);
2831
2835
  }
2832
2836
  getQuorumBreakdown(input) {
@@ -3016,12 +3020,36 @@ var QuorumValidator = class {
3016
3020
  details: breakdown.reasoning
3017
3021
  };
3018
3022
  }
3019
- buildReachedResult(breakdown) {
3023
+ /** The tallies a decision is drawn from: weighted when weights apply, else headcount. */
3024
+ decisiveTallies(breakdown) {
3020
3025
  const { voteCounts, weightedCounts } = breakdown;
3021
- const approves = weightedCounts?.approve ?? voteCounts.approve;
3022
- const rejects = weightedCounts?.reject ?? voteCounts.reject;
3023
- const total = weightedCounts?.totalWeight ?? voteCounts.total;
3024
- const decision = approves >= rejects ? "approve" : "reject";
3026
+ return {
3027
+ approves: weightedCounts?.approve ?? voteCounts.approve,
3028
+ rejects: weightedCounts?.reject ?? voteCounts.reject,
3029
+ total: weightedCounts?.totalWeight ?? voteCounts.total
3030
+ };
3031
+ }
3032
+ isTie(breakdown) {
3033
+ const { approves, rejects } = this.decisiveTallies(breakdown);
3034
+ return Math.abs(approves - rejects) < TIE_TOLERANCE;
3035
+ }
3036
+ /**
3037
+ * A tie reuses the existing `no_consensus` variant rather than a new status
3038
+ * member (a new member is breaking for exhaustive switches downstream). The
3039
+ * tie survives in `details`, which is the only place it can be read from.
3040
+ */
3041
+ buildTieResult(breakdown) {
3042
+ const { approves, rejects } = this.decisiveTallies(breakdown);
3043
+ const kind = breakdown.weightedCounts === void 0 ? "" : " (weighted)";
3044
+ return {
3045
+ status: "not_reached",
3046
+ reason: "no_consensus",
3047
+ details: `tie: ${formatTally(approves)} approve vs ${formatTally(rejects)} reject${kind}; consensus not reached`
3048
+ };
3049
+ }
3050
+ buildReachedResult(breakdown) {
3051
+ const { approves, rejects, total } = this.decisiveTallies(breakdown);
3052
+ const decision = approves > rejects ? "approve" : "reject";
3025
3053
  const confidence = total > 0 ? Math.abs(approves - rejects) / total : 0;
3026
3054
  return {
3027
3055
  status: "reached",
@@ -3031,6 +3059,9 @@ var QuorumValidator = class {
3031
3059
  };
3032
3060
  }
3033
3061
  };
3062
+ function formatTally(value) {
3063
+ return Number.isInteger(value) ? String(value) : value.toFixed(2);
3064
+ }
3034
3065
  function createQuorumValidator(logger11) {
3035
3066
  return new QuorumValidator(logger11);
3036
3067
  }
@@ -7958,4 +7989,4 @@ export {
7958
7989
  CONSENSUS_VOTE_TOOL_SCHEMA,
7959
7990
  registerConsensusVoteTool
7960
7991
  };
7961
- //# sourceMappingURL=chunk-6TDRAXFS.js.map
7992
+ //# sourceMappingURL=chunk-D3HUY2BI.js.map