nexus-agents 8.4.0 → 8.5.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.
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-OQB3XC5O.js";
7
7
  import {
8
8
  VERSION
9
- } from "./chunk-M5DIGZIM.js";
9
+ } from "./chunk-KIQLNY6S.js";
10
10
  import {
11
11
  capitalize
12
12
  } from "./chunk-6T3EPABN.js";
@@ -1201,7 +1201,7 @@ async function runDoctorFix(result) {
1201
1201
  writeLine2("\u2500".repeat(40));
1202
1202
  let fixCount = 0;
1203
1203
  if (!result.dataDirectory.rootExists || result.dataDirectory.subdirectories.some((d) => !d.exists || !d.writable)) {
1204
- const { initDataDirectories: initDataDirectories2, describeDataDirFix: describeDataDirFix2 } = await import("./setup-data-dir-EYIPKPGP.js");
1204
+ const { initDataDirectories: initDataDirectories2, describeDataDirFix: describeDataDirFix2 } = await import("./setup-data-dir-4P6HKDAD.js");
1205
1205
  const outcome = describeDataDirFix2(initDataDirectories2());
1206
1206
  writeLine2(outcome.line);
1207
1207
  if (outcome.counted) fixCount++;
@@ -1303,4 +1303,4 @@ export {
1303
1303
  startStdioServer,
1304
1304
  closeServer
1305
1305
  };
1306
- //# sourceMappingURL=chunk-2LQROHUE.js.map
1306
+ //# sourceMappingURL=chunk-2DRZS743.js.map
@@ -23,7 +23,7 @@ import {
23
23
  toolSuccessStructured,
24
24
  withProgressHeartbeat,
25
25
  wrapToolWithTimeout
26
- } from "./chunk-HVPF7BBS.js";
26
+ } from "./chunk-VXKWGJ36.js";
27
27
  import {
28
28
  assessPanelIndependence,
29
29
  countDistinctModels,
@@ -4497,6 +4497,31 @@ function createPersistedProposal(proposalId, votes, outcome) {
4497
4497
 
4498
4498
  // src/mcp/tools/consensus-vote-types.ts
4499
4499
  import { z as z6 } from "zod";
4500
+
4501
+ // src/mcp/tools/consensus-vote-option-detection.ts
4502
+ var MULTI_OPTION_PATTERNS = Object.freeze([
4503
+ // `Option A` and `OPTION A`, but NOT `option a` — the lowercase form appears
4504
+ // in ordinary prose ("there is no option a caller can set"), the capitalised
4505
+ // form is a heading. The motivating proposal used `Option A`; an
4506
+ // uppercase-only pattern would have missed the instance this exists for.
4507
+ /\b(?:Option|OPTION) [A-Z0-9]\b/,
4508
+ /\bchoose between\b/i,
4509
+ /\bwhich of (?:the )?(?:these|those|the following)\b/i,
4510
+ /\bpick exactly one\b/i,
4511
+ /\bvote for exactly one\b/i
4512
+ ]);
4513
+ function checkUndeclaredOptions(proposal, declaredOptions, allEngagedApproved) {
4514
+ if (declaredOptions !== void 0 && declaredOptions.length > 0) return { flagged: false };
4515
+ if (proposal === "") return { flagged: false };
4516
+ if (!MULTI_OPTION_PATTERNS.some((p) => p.test(proposal))) return { flagged: false };
4517
+ const base = "This proposal appears to name alternatives, but `options` was not declared, so the tally records approve/reject only and cannot say WHICH alternative won (#4452, #5360). Re-run with `options` to record the option tally.";
4518
+ return {
4519
+ flagged: true,
4520
+ warning: allEngagedApproved === true ? `${base} Every non-errored voter returned \`approve\`, which is the signature of this defect.` : base
4521
+ };
4522
+ }
4523
+
4524
+ // src/mcp/tools/consensus-vote-types.ts
4500
4525
  var MAX_PROPOSAL_LENGTH = 4e3;
4501
4526
  var VotingStrategySchema = z6.enum([
4502
4527
  "simple_majority",
@@ -4529,7 +4554,7 @@ function getDefaultErrorPolicy(strategy) {
4529
4554
  }
4530
4555
  var ConsensusVoteInputSchema = z6.object({
4531
4556
  proposal: z6.string().min(1).max(MAX_PROPOSAL_LENGTH).describe(
4532
- "Proposal text to vote on. If the proposal asks voters to choose among named alternatives, you MUST declare them in `options` (#4472). Without `options` the tally records approve/reject/abstain only, so every voter who engages returns `approve` and a 6-1 split on WHICH option persists as 7-0, 100% (#4452)."
4557
+ 'Proposal text to vote on. If the proposal asks voters to choose among named alternatives, declare them in `options` (#4472) \u2014 otherwise the tally records approve/reject/abstain only, so every voter who engages returns `approve` and a 6-1 split on WHICH option persists as 7-0, 100% (#4452). This is ENFORCED AS A WARNING, not a refusal: a heuristic over the proposal text flags an apparent multi-option proposal with no `options` and says so on `panelWarning` (#5360). The wording says "declare", not "MUST", because the warning is what the code actually holds \u2014 it is tightened back only in the same change that promotes the warning to a refusal.'
4533
4558
  ),
4534
4559
  options: z6.array(z6.string().min(1).max(200)).min(2).max(10).optional().describe(
4535
4560
  "Named alternatives for a multi-option proposal (#4472). When present, the threshold must ALSO be cleared by the leading option, in addition to the ordinary approve/reject bar: `unanimous` requires every approver to have chosen the SAME option, and `supermajority`/`majority` measure the leading option's share of approvers. An approving voter whose selection is absent or matches no declared option stays in the denominator and credits no option, so a degraded response can only lower the leading share, never raise it. Omit for an ordinary yes/no vote \u2014 behaviour is then unchanged."
@@ -4755,6 +4780,15 @@ function applyOptionalResponseFields(response, input, result, errorCount, costSu
4755
4780
  if (panelWarning !== void 0) {
4756
4781
  response.panelWarning = panelWarning;
4757
4782
  }
4783
+ const engaged = result.votes.length - errorCount;
4784
+ const undeclared = checkUndeclaredOptions(
4785
+ input.proposal,
4786
+ input.options,
4787
+ engaged > 0 && response.voteCounts.reject === 0 && response.voteCounts.abstain === 0
4788
+ );
4789
+ if (undeclared.flagged) {
4790
+ response.panelWarning = response.panelWarning === void 0 ? undeclared.warning : `${response.panelWarning} ${undeclared.warning}`;
4791
+ }
4758
4792
  if (isHigherOrderStrategy(result.strategy) && result.higherOrderResult) {
4759
4793
  response.higherOrderMetadata = toHigherOrderMetadata(result.higherOrderResult);
4760
4794
  }
@@ -6905,4 +6939,4 @@ export {
6905
6939
  CONSENSUS_VOTE_TOOL_SCHEMA,
6906
6940
  registerConsensusVoteTool
6907
6941
  };
6908
- //# sourceMappingURL=chunk-CFGJGRVF.js.map
6942
+ //# sourceMappingURL=chunk-3SKIHGZV.js.map