nexus-agents 8.46.15 → 8.47.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.
@@ -21,7 +21,7 @@ import {
21
21
  import {
22
22
  DEFAULT_TASK_TTL_MS,
23
23
  clampTaskTtl
24
- } from "./chunk-AOVMGKUI.js";
24
+ } from "./chunk-AR3RVMX7.js";
25
25
  import {
26
26
  executeExpert
27
27
  } from "./chunk-QLF22ILR.js";
@@ -55,7 +55,7 @@ import {
55
55
  toJobSummary,
56
56
  updateStage,
57
57
  writeJobCancelled
58
- } from "./chunk-R2MAX7UL.js";
58
+ } from "./chunk-ISUPN5U4.js";
59
59
  import {
60
60
  allOf,
61
61
  anyOf
@@ -75,7 +75,7 @@ import {
75
75
  } from "./chunk-43ONDTAK.js";
76
76
  import {
77
77
  withPrerequisite
78
- } from "./chunk-GUS6PTRG.js";
78
+ } from "./chunk-CEB525JC.js";
79
79
  import {
80
80
  NOOP_NOTIFIER,
81
81
  RateLimiter,
@@ -100,7 +100,7 @@ import {
100
100
  withAuditTrail,
101
101
  withProgressHeartbeat,
102
102
  wrapToolWithTimeout
103
- } from "./chunk-L4EZIS3F.js";
103
+ } from "./chunk-RSC54OHX.js";
104
104
  import {
105
105
  createAuditTrail,
106
106
  createGraphAuditBridge,
@@ -29636,7 +29636,7 @@ function formatCompileError(error) {
29636
29636
  case "no_entry":
29637
29637
  return `No entry point: ${error.message}`;
29638
29638
  case "unreachable_node":
29639
- return `Node '${error.nodeId}' is unreachable from START`;
29639
+ return `Node '${error.nodeId}' is unreachable from START. If it is entered by Command.goto, declare it: addNode(source, fn, { gotoTargets: ['${error.nodeId}'] })`;
29640
29640
  case "missing_reducer":
29641
29641
  return `State field '${error.field}' has no reducer defined`;
29642
29642
  }
@@ -30562,6 +30562,9 @@ async function withTimeout3(promise, ms) {
30562
30562
  }
30563
30563
 
30564
30564
  // src/orchestration/graph/graph-builder.ts
30565
+ function definedNodeOptions(opts) {
30566
+ return Object.fromEntries(Object.entries(opts ?? {}).filter(([, value]) => value !== void 0));
30567
+ }
30565
30568
  var GraphBuilder = class {
30566
30569
  nodes = /* @__PURE__ */ new Map();
30567
30570
  edges = [];
@@ -30578,14 +30581,7 @@ var GraphBuilder = class {
30578
30581
  * Supports optional precondition hooks (Issue #997) and verify hook (Issue #994).
30579
30582
  */
30580
30583
  addNode(id, handler3, opts) {
30581
- const node = {
30582
- id,
30583
- handler: handler3,
30584
- ...opts?.timeout !== void 0 ? { timeout: opts.timeout } : {},
30585
- ...opts?.retries !== void 0 ? { retries: opts.retries } : {},
30586
- ...opts?.preconditions !== void 0 ? { preconditions: opts.preconditions } : {},
30587
- ...opts?.verify !== void 0 ? { verify: opts.verify } : {}
30588
- };
30584
+ const node = { id, handler: handler3, ...definedNodeOptions(opts) };
30589
30585
  this.nodes.set(id, node);
30590
30586
  return this;
30591
30587
  }
@@ -30623,6 +30619,8 @@ var GraphBuilder = class {
30623
30619
  if (entryError !== void 0) return err(entryError);
30624
30620
  const cycleError = this.checkCycles();
30625
30621
  if (cycleError !== void 0) return err(cycleError);
30622
+ const gotoError = this.checkGotoTargets();
30623
+ if (gotoError !== void 0) return err(gotoError);
30626
30624
  const reachError = this.checkReachability();
30627
30625
  if (reachError !== void 0) return err(reachError);
30628
30626
  const entryEdges = this.edges.filter((e) => e.from === START);
@@ -30722,7 +30720,39 @@ var GraphBuilder = class {
30722
30720
  }
30723
30721
  return void 0;
30724
30722
  }
30725
- /** BFS from START to find all reachable node IDs. */
30723
+ /**
30724
+ * Every declared `gotoTargets` entry must name a real node (#5727). Checked
30725
+ * before reachability so the error names the DECLARING node, rather than
30726
+ * surfacing later as a confusing `unreachable_node` about something else.
30727
+ *
30728
+ * Reports the EXISTING `missing_node` rather than a new error variant: a
30729
+ * declared goto target is an edge reference, so `missing_node`'s own message
30730
+ * ("Edge references non-existent node 'x' (from 'y')") already reads correctly.
30731
+ * Adding a variant would widen a union the library RETURNS, which breaks any
30732
+ * consumer switching exhaustively over `GraphCompileError` — a breaking change
30733
+ * needing a unanimous panel, for a diagnostic distinction nothing consumes.
30734
+ */
30735
+ checkGotoTargets() {
30736
+ for (const [nodeId, node] of this.nodes) {
30737
+ for (const target of node.gotoTargets ?? []) {
30738
+ if (target === END) continue;
30739
+ if (!this.nodes.has(target)) {
30740
+ return { type: "missing_node", nodeId: target, referencedBy: nodeId };
30741
+ }
30742
+ }
30743
+ }
30744
+ return void 0;
30745
+ }
30746
+ /**
30747
+ * BFS from START over static edges PLUS declared `Command.goto` targets
30748
+ * (#5727).
30749
+ *
30750
+ * Goto targets are followed from the DECLARING node, exactly like an edge —
30751
+ * not seeded from START. That distinction is load-bearing: seeding would make
30752
+ * a target declared on an itself-unreachable node read as reachable, so a
30753
+ * whole orphaned subgraph could bless itself and `unreachable_node` would stop
30754
+ * being able to fail for the graphs that use goto.
30755
+ */
30726
30756
  findReachableNodes() {
30727
30757
  const reachable = /* @__PURE__ */ new Set();
30728
30758
  const queue = this.getStartTargets();
@@ -30731,6 +30761,7 @@ var GraphBuilder = class {
30731
30761
  if (current === void 0 || current === END || reachable.has(current)) continue;
30732
30762
  reachable.add(current);
30733
30763
  queue.push(...this.getEdgeTargets(current, reachable));
30764
+ queue.push(...this.nodes.get(current)?.gotoTargets ?? []);
30734
30765
  }
30735
30766
  return reachable;
30736
30767
  }
@@ -46107,7 +46138,7 @@ function buildVotingInput(plan, config) {
46107
46138
  }
46108
46139
  async function executeSingleVote(plan, config, log) {
46109
46140
  try {
46110
- const { executeVoting } = await import("./consensus-vote-ATICPOXQ.js");
46141
+ const { executeVoting } = await import("./consensus-vote-7GGJYVBF.js");
46111
46142
  const input = buildVotingInput(plan, config);
46112
46143
  const result = await executeVoting(input, log);
46113
46144
  return parseVotingResult(result);
@@ -47902,7 +47933,7 @@ ${contextBlock}`;
47902
47933
  const strategy = config.votingStrategy ?? "higher_order";
47903
47934
  await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
47904
47935
  try {
47905
- const { executeVoting } = await import("./consensus-vote-ATICPOXQ.js");
47936
+ const { executeVoting } = await import("./consensus-vote-7GGJYVBF.js");
47906
47937
  const votingResult = await executeVoting(
47907
47938
  {
47908
47939
  proposal: buildVoteProposal(plan, research),
@@ -48994,7 +49025,7 @@ function securityFirstPack(files, budget) {
48994
49025
  };
48995
49026
  }
48996
49027
  function packDiffForReview(prDiff, budget) {
48997
- if (prDiff.length <= budget) {
49028
+ if (byteLen(prDiff) <= budget) {
48998
49029
  return { coverage: void 0, packedDiff: prDiff, note: "" };
48999
49030
  }
49000
49031
  const pack = securityFirstPack(splitByFile(prDiff), budget);
@@ -56643,4 +56674,4 @@ export {
56643
56674
  startPipelineEventBridge,
56644
56675
  shutdownPipelineEventBridge
56645
56676
  };
56646
- //# sourceMappingURL=chunk-P6LLNTKM.js.map
56677
+ //# sourceMappingURL=chunk-6GGWO4B3.js.map