nexus-agents 8.48.4 → 8.49.1

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.
@@ -1,6 +1,6 @@
1
1
  // src/version.ts
2
2
  import semver from "semver";
3
- var VERSION = true ? "8.48.4" : "dev";
3
+ var VERSION = true ? "8.49.1" : "dev";
4
4
  var NODE_ENGINE_RANGE = ">=22.5.0";
5
5
  function isNodeVersionSupported(version) {
6
6
  return semver.satisfies(version, NODE_ENGINE_RANGE);
@@ -11,4 +11,4 @@ export {
11
11
  NODE_ENGINE_RANGE,
12
12
  isNodeVersionSupported
13
13
  };
14
- //# sourceMappingURL=chunk-PFQ7QLNA.js.map
14
+ //# sourceMappingURL=chunk-4R6VXWI2.js.map
@@ -21,7 +21,7 @@ import {
21
21
  import {
22
22
  DEFAULT_TASK_TTL_MS,
23
23
  clampTaskTtl
24
- } from "./chunk-OGJN2C5P.js";
24
+ } from "./chunk-XQBVUWTA.js";
25
25
  import {
26
26
  executeExpert
27
27
  } from "./chunk-GLDK3R2H.js";
@@ -57,7 +57,7 @@ import {
57
57
  toJobSummary,
58
58
  updateStage,
59
59
  writeJobCancelled
60
- } from "./chunk-6TDRAXFS.js";
60
+ } from "./chunk-KYQELL4K.js";
61
61
  import {
62
62
  allOf,
63
63
  anyOf
@@ -77,7 +77,7 @@ import {
77
77
  } from "./chunk-4Y5TFSYP.js";
78
78
  import {
79
79
  withPrerequisite
80
- } from "./chunk-H7QOYRWN.js";
80
+ } from "./chunk-HMJZKWGL.js";
81
81
  import {
82
82
  NOOP_NOTIFIER,
83
83
  RateLimiter,
@@ -102,7 +102,7 @@ import {
102
102
  withAuditTrail,
103
103
  withProgressHeartbeat,
104
104
  wrapToolWithTimeout
105
- } from "./chunk-4RBYWXD4.js";
105
+ } from "./chunk-UEBWHV3X.js";
106
106
  import {
107
107
  createAuditTrail,
108
108
  createGraphAuditBridge,
@@ -46164,7 +46164,7 @@ function buildVotingInput(plan, config) {
46164
46164
  }
46165
46165
  async function executeSingleVote(plan, config, log) {
46166
46166
  try {
46167
- const { executeVoting } = await import("./consensus-vote-3536ASJE.js");
46167
+ const { executeVoting } = await import("./consensus-vote-URWRLQBE.js");
46168
46168
  const input = buildVotingInput(plan, config);
46169
46169
  const result = await executeVoting(input, log);
46170
46170
  return parseVotingResult(result);
@@ -47959,7 +47959,7 @@ ${contextBlock}`;
47959
47959
  const strategy = config.votingStrategy ?? "higher_order";
47960
47960
  await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
47961
47961
  try {
47962
- const { executeVoting } = await import("./consensus-vote-3536ASJE.js");
47962
+ const { executeVoting } = await import("./consensus-vote-URWRLQBE.js");
47963
47963
  const votingResult = await executeVoting(
47964
47964
  {
47965
47965
  proposal: buildVoteProposal(plan, research),
@@ -56865,4 +56865,4 @@ export {
56865
56865
  startPipelineEventBridge,
56866
56866
  shutdownPipelineEventBridge
56867
56867
  };
56868
- //# sourceMappingURL=chunk-MM2IIDDY.js.map
56868
+ //# sourceMappingURL=chunk-6OEZ2JFM.js.map
@@ -7,7 +7,7 @@ import {
7
7
  toolStructuredError,
8
8
  toolSuccessStructured,
9
9
  wrapToolWithTimeout
10
- } from "./chunk-4RBYWXD4.js";
10
+ } from "./chunk-UEBWHV3X.js";
11
11
  import {
12
12
  JsonlStore,
13
13
  SECURITY_KEYWORDS,
@@ -2173,4 +2173,4 @@ export {
2173
2173
  runImprovementReview,
2174
2174
  registerImprovementReviewTool
2175
2175
  };
2176
- //# sourceMappingURL=chunk-H7QOYRWN.js.map
2176
+ //# sourceMappingURL=chunk-HMJZKWGL.js.map
@@ -23,10 +23,10 @@ import {
23
23
  toolSuccessStructured,
24
24
  withProgressHeartbeat,
25
25
  wrapToolWithTimeout
26
- } from "./chunk-4RBYWXD4.js";
26
+ } from "./chunk-UEBWHV3X.js";
27
27
  import {
28
28
  VERSION
29
- } from "./chunk-PFQ7QLNA.js";
29
+ } from "./chunk-4R6VXWI2.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-KYQELL4K.js.map