nexus-agents 3.2.2 → 3.3.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.
Files changed (126) hide show
  1. package/dist/{child-mcp-config-IGZEHG37.js → child-mcp-config-EXZDHJBP.js} +3 -3
  2. package/dist/{chunk-SDVDWM3C.js → chunk-24GBX2E2.js} +5 -5
  3. package/dist/{chunk-ATNHVLKJ.js → chunk-26NSVQ65.js} +52 -17
  4. package/dist/chunk-26NSVQ65.js.map +1 -0
  5. package/dist/{chunk-47WSUCLS.js → chunk-3T3TZZKG.js} +3 -3
  6. package/dist/{chunk-WKJWUK67.js → chunk-3UYBYO46.js} +35 -35
  7. package/dist/{chunk-GQ5LHJD2.js → chunk-5QAGT56O.js} +2 -2
  8. package/dist/{chunk-25TDC2C4.js → chunk-5ZSWBPUZ.js} +2 -2
  9. package/dist/{chunk-F47KBREM.js → chunk-63EFLUVS.js} +2 -2
  10. package/dist/{chunk-GTU2GK4H.js → chunk-7HDPHBKE.js} +4 -4
  11. package/dist/{chunk-4AF6CP7P.js → chunk-7L7CUYAY.js} +4 -4
  12. package/dist/{chunk-OKVCJFZM.js → chunk-7OVUQKM2.js} +2 -2
  13. package/dist/{chunk-GMJUXSLK.js → chunk-CYXQRAJ2.js} +5 -5
  14. package/dist/{chunk-2WRW3MWB.js → chunk-DGMNPTPG.js} +3 -3
  15. package/dist/{chunk-43YJRZZW.js → chunk-E6YS4KOL.js} +2 -2
  16. package/dist/{chunk-5HG2M5CP.js → chunk-EQGTPGN6.js} +73 -8
  17. package/dist/chunk-EQGTPGN6.js.map +1 -0
  18. package/dist/{chunk-HEZ6VTMO.js → chunk-EV42DVHG.js} +2 -2
  19. package/dist/{chunk-ZBTEOM3T.js → chunk-FSDHFY3C.js} +2 -2
  20. package/dist/{chunk-TIQXKIIA.js → chunk-G2C4WNK7.js} +2 -2
  21. package/dist/{chunk-EL62KWUE.js → chunk-H3B6BSBZ.js} +7 -7
  22. package/dist/{chunk-D33VCEA6.js → chunk-HPQ6QOTI.js} +5 -5
  23. package/dist/{chunk-T6HI32EC.js → chunk-IHMUW7N5.js} +2 -2
  24. package/dist/{chunk-E6JME6SQ.js → chunk-M4IFLNLT.js} +2 -2
  25. package/dist/{chunk-Z2VEERCP.js → chunk-MRSTTALY.js} +3 -3
  26. package/dist/{chunk-OVAO5IMR.js → chunk-NNBX6YZI.js} +2 -2
  27. package/dist/{chunk-A5QBZ5EC.js → chunk-QJPR3Y4E.js} +71 -33
  28. package/dist/chunk-QJPR3Y4E.js.map +1 -0
  29. package/dist/{chunk-RHO52DBX.js → chunk-QZDWVJN6.js} +2 -2
  30. package/dist/{chunk-5NRFPUNP.js → chunk-RAYKASM4.js} +8 -8
  31. package/dist/{chunk-PE35GMXD.js → chunk-SISWFC5K.js} +5 -5
  32. package/dist/{chunk-YAF73ZMR.js → chunk-SNJNRDKZ.js} +2 -1
  33. package/dist/{chunk-NGFG5TIB.js → chunk-U64WRZQ2.js} +2 -2
  34. package/dist/{chunk-VV7KSMMR.js → chunk-UNDYHLRR.js} +3 -3
  35. package/dist/{chunk-UBHTXZR6.js → chunk-UWVHFMU2.js} +4 -4
  36. package/dist/{chunk-QRZPGTZN.js → chunk-YC3RAOU5.js} +2 -2
  37. package/dist/{chunk-344IEWHJ.js → chunk-YWGMDZR4.js} +2 -2
  38. package/dist/{chunk-ENZ3IWEM.js → chunk-ZP5QHPDX.js} +2 -2
  39. package/dist/{cli-circuit-breaker-FTN4E7PN.js → cli-circuit-breaker-76YQJDYE.js} +3 -3
  40. package/dist/cli.js +44 -41
  41. package/dist/cli.js.map +1 -1
  42. package/dist/{composite-router-AHUNMSEQ.js → composite-router-2SGU5BWW.js} +2 -2
  43. package/dist/{consensus-vote-PPZUA3EN.js → consensus-vote-UF73LBG6.js} +17 -17
  44. package/dist/{context-retriever-UDERFG2L.js → context-retriever-MBGPFZA7.js} +8 -8
  45. package/dist/{doctor-deep-XZX7RNDG.js → doctor-deep-N7ZS6YNE.js} +3 -3
  46. package/dist/{expert-bridge-NIYLN24L.js → expert-bridge-GSDGOVQT.js} +4 -4
  47. package/dist/factory-6AR32KPC.js +25 -0
  48. package/dist/{factory-2VYANO2Z.js → factory-KBKFR56R.js} +5 -5
  49. package/dist/{improvement-review-Z3BEZS73.js → improvement-review-B7DR4Y3C.js} +5 -5
  50. package/dist/index.d.ts +21 -0
  51. package/dist/index.js +31 -31
  52. package/dist/{init-opencode-3ENXQJKC.js → init-opencode-QBHHYWWF.js} +6 -6
  53. package/dist/{issue-triage-Q7SYODHT.js → issue-triage-5JONYJ5X.js} +6 -6
  54. package/dist/{pr-reviewer-helpers-CVMB2PRH.js → pr-reviewer-helpers-JMZOSZGY.js} +4 -4
  55. package/dist/{registry-command-XPA6LFHZ.js → registry-command-ZN2N6NB6.js} +2 -2
  56. package/dist/{repo-security-plan-NUMTKVMR.js → repo-security-plan-LM6CQJDK.js} +3 -3
  57. package/dist/{research-helpers-synthesize-EHDMCB6P.js → research-helpers-synthesize-5T3WTCAR.js} +4 -4
  58. package/dist/{routing-memory-3XURCXXF.js → routing-memory-WOYMTDXS.js} +2 -2
  59. package/dist/{session-memory-QISTJJOX.js → session-memory-2E2RFJQO.js} +3 -3
  60. package/dist/{setup-command-NPGRBUWK.js → setup-command-ILFC6FWM.js} +15 -15
  61. package/dist/{setup-config-D6V7HW6W.js → setup-config-GKSERLN5.js} +3 -3
  62. package/dist/{setup-custom-api-U2EUVTPO.js → setup-custom-api-DWREDJNN.js} +4 -4
  63. package/dist/{tool-memory-BR7N6EB6.js → tool-memory-CHAKVXF5.js} +5 -5
  64. package/dist/unified-registry-7WZ2BLIC.js +26 -0
  65. package/dist/{weather-report-22DR27KY.js → weather-report-UDBU5F52.js} +2 -2
  66. package/package.json +1 -1
  67. package/dist/chunk-5HG2M5CP.js.map +0 -1
  68. package/dist/chunk-A5QBZ5EC.js.map +0 -1
  69. package/dist/chunk-ATNHVLKJ.js.map +0 -1
  70. package/dist/factory-KDNW4GTS.js +0 -25
  71. package/dist/unified-registry-K4DRV5PF.js +0 -26
  72. /package/dist/{child-mcp-config-IGZEHG37.js.map → child-mcp-config-EXZDHJBP.js.map} +0 -0
  73. /package/dist/{chunk-SDVDWM3C.js.map → chunk-24GBX2E2.js.map} +0 -0
  74. /package/dist/{chunk-47WSUCLS.js.map → chunk-3T3TZZKG.js.map} +0 -0
  75. /package/dist/{chunk-WKJWUK67.js.map → chunk-3UYBYO46.js.map} +0 -0
  76. /package/dist/{chunk-GQ5LHJD2.js.map → chunk-5QAGT56O.js.map} +0 -0
  77. /package/dist/{chunk-25TDC2C4.js.map → chunk-5ZSWBPUZ.js.map} +0 -0
  78. /package/dist/{chunk-F47KBREM.js.map → chunk-63EFLUVS.js.map} +0 -0
  79. /package/dist/{chunk-GTU2GK4H.js.map → chunk-7HDPHBKE.js.map} +0 -0
  80. /package/dist/{chunk-4AF6CP7P.js.map → chunk-7L7CUYAY.js.map} +0 -0
  81. /package/dist/{chunk-OKVCJFZM.js.map → chunk-7OVUQKM2.js.map} +0 -0
  82. /package/dist/{chunk-GMJUXSLK.js.map → chunk-CYXQRAJ2.js.map} +0 -0
  83. /package/dist/{chunk-2WRW3MWB.js.map → chunk-DGMNPTPG.js.map} +0 -0
  84. /package/dist/{chunk-43YJRZZW.js.map → chunk-E6YS4KOL.js.map} +0 -0
  85. /package/dist/{chunk-HEZ6VTMO.js.map → chunk-EV42DVHG.js.map} +0 -0
  86. /package/dist/{chunk-ZBTEOM3T.js.map → chunk-FSDHFY3C.js.map} +0 -0
  87. /package/dist/{chunk-TIQXKIIA.js.map → chunk-G2C4WNK7.js.map} +0 -0
  88. /package/dist/{chunk-EL62KWUE.js.map → chunk-H3B6BSBZ.js.map} +0 -0
  89. /package/dist/{chunk-D33VCEA6.js.map → chunk-HPQ6QOTI.js.map} +0 -0
  90. /package/dist/{chunk-T6HI32EC.js.map → chunk-IHMUW7N5.js.map} +0 -0
  91. /package/dist/{chunk-E6JME6SQ.js.map → chunk-M4IFLNLT.js.map} +0 -0
  92. /package/dist/{chunk-Z2VEERCP.js.map → chunk-MRSTTALY.js.map} +0 -0
  93. /package/dist/{chunk-OVAO5IMR.js.map → chunk-NNBX6YZI.js.map} +0 -0
  94. /package/dist/{chunk-RHO52DBX.js.map → chunk-QZDWVJN6.js.map} +0 -0
  95. /package/dist/{chunk-5NRFPUNP.js.map → chunk-RAYKASM4.js.map} +0 -0
  96. /package/dist/{chunk-PE35GMXD.js.map → chunk-SISWFC5K.js.map} +0 -0
  97. /package/dist/{chunk-YAF73ZMR.js.map → chunk-SNJNRDKZ.js.map} +0 -0
  98. /package/dist/{chunk-NGFG5TIB.js.map → chunk-U64WRZQ2.js.map} +0 -0
  99. /package/dist/{chunk-VV7KSMMR.js.map → chunk-UNDYHLRR.js.map} +0 -0
  100. /package/dist/{chunk-UBHTXZR6.js.map → chunk-UWVHFMU2.js.map} +0 -0
  101. /package/dist/{chunk-QRZPGTZN.js.map → chunk-YC3RAOU5.js.map} +0 -0
  102. /package/dist/{chunk-344IEWHJ.js.map → chunk-YWGMDZR4.js.map} +0 -0
  103. /package/dist/{chunk-ENZ3IWEM.js.map → chunk-ZP5QHPDX.js.map} +0 -0
  104. /package/dist/{cli-circuit-breaker-FTN4E7PN.js.map → cli-circuit-breaker-76YQJDYE.js.map} +0 -0
  105. /package/dist/{composite-router-AHUNMSEQ.js.map → composite-router-2SGU5BWW.js.map} +0 -0
  106. /package/dist/{consensus-vote-PPZUA3EN.js.map → consensus-vote-UF73LBG6.js.map} +0 -0
  107. /package/dist/{context-retriever-UDERFG2L.js.map → context-retriever-MBGPFZA7.js.map} +0 -0
  108. /package/dist/{doctor-deep-XZX7RNDG.js.map → doctor-deep-N7ZS6YNE.js.map} +0 -0
  109. /package/dist/{expert-bridge-NIYLN24L.js.map → expert-bridge-GSDGOVQT.js.map} +0 -0
  110. /package/dist/{factory-2VYANO2Z.js.map → factory-6AR32KPC.js.map} +0 -0
  111. /package/dist/{factory-KDNW4GTS.js.map → factory-KBKFR56R.js.map} +0 -0
  112. /package/dist/{improvement-review-Z3BEZS73.js.map → improvement-review-B7DR4Y3C.js.map} +0 -0
  113. /package/dist/{init-opencode-3ENXQJKC.js.map → init-opencode-QBHHYWWF.js.map} +0 -0
  114. /package/dist/{issue-triage-Q7SYODHT.js.map → issue-triage-5JONYJ5X.js.map} +0 -0
  115. /package/dist/{pr-reviewer-helpers-CVMB2PRH.js.map → pr-reviewer-helpers-JMZOSZGY.js.map} +0 -0
  116. /package/dist/{registry-command-XPA6LFHZ.js.map → registry-command-ZN2N6NB6.js.map} +0 -0
  117. /package/dist/{repo-security-plan-NUMTKVMR.js.map → repo-security-plan-LM6CQJDK.js.map} +0 -0
  118. /package/dist/{research-helpers-synthesize-EHDMCB6P.js.map → research-helpers-synthesize-5T3WTCAR.js.map} +0 -0
  119. /package/dist/{routing-memory-3XURCXXF.js.map → routing-memory-WOYMTDXS.js.map} +0 -0
  120. /package/dist/{session-memory-QISTJJOX.js.map → session-memory-2E2RFJQO.js.map} +0 -0
  121. /package/dist/{setup-command-NPGRBUWK.js.map → setup-command-ILFC6FWM.js.map} +0 -0
  122. /package/dist/{setup-config-D6V7HW6W.js.map → setup-config-GKSERLN5.js.map} +0 -0
  123. /package/dist/{setup-custom-api-U2EUVTPO.js.map → setup-custom-api-DWREDJNN.js.map} +0 -0
  124. /package/dist/{tool-memory-BR7N6EB6.js.map → tool-memory-CHAKVXF5.js.map} +0 -0
  125. /package/dist/{unified-registry-K4DRV5PF.js.map → unified-registry-7WZ2BLIC.js.map} +0 -0
  126. /package/dist/{weather-report-22DR27KY.js.map → weather-report-UDBU5F52.js.map} +0 -0
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  nexusMkdtemp
3
- } from "./chunk-YAF73ZMR.js";
3
+ } from "./chunk-SNJNRDKZ.js";
4
4
  import {
5
5
  createLogger
6
- } from "./chunk-ATNHVLKJ.js";
6
+ } from "./chunk-26NSVQ65.js";
7
7
  import "./chunk-2HUC6NZN.js";
8
8
  import "./chunk-OQLFRJCW.js";
9
9
  import "./chunk-ZPWHCABL.js";
@@ -62,4 +62,4 @@ export {
62
62
  generateMcpConfig,
63
63
  getDefaultAllowedTools
64
64
  };
65
- //# sourceMappingURL=child-mcp-config-IGZEHG37.js.map
65
+ //# sourceMappingURL=child-mcp-config-EXZDHJBP.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runConfigInitSync
3
- } from "./chunk-43YJRZZW.js";
3
+ } from "./chunk-E6YS4KOL.js";
4
4
  import {
5
5
  VERSION,
6
6
  checkApiKeys,
@@ -8,13 +8,13 @@ import {
8
8
  checkSqlite,
9
9
  defaultConfig,
10
10
  initDataDirectories
11
- } from "./chunk-5HG2M5CP.js";
11
+ } from "./chunk-EQGTPGN6.js";
12
12
  import {
13
13
  BUILT_IN_EXPERTS
14
14
  } from "./chunk-YPNQPT2F.js";
15
15
  import {
16
16
  probeAllClis
17
- } from "./chunk-A5QBZ5EC.js";
17
+ } from "./chunk-QJPR3Y4E.js";
18
18
  import {
19
19
  CLI_SUBPROCESS_TIMEOUTS,
20
20
  colors,
@@ -25,7 +25,7 @@ import {
25
25
  getErrorMessage,
26
26
  getTimeProvider,
27
27
  symbols
28
- } from "./chunk-ATNHVLKJ.js";
28
+ } from "./chunk-26NSVQ65.js";
29
29
  import {
30
30
  ensureGitignored,
31
31
  findRepoRoot
@@ -2001,4 +2001,4 @@ export {
2001
2001
  setupCommand,
2002
2002
  setupCommandAsync
2003
2003
  };
2004
- //# sourceMappingURL=chunk-SDVDWM3C.js.map
2004
+ //# sourceMappingURL=chunk-24GBX2E2.js.map
@@ -2623,7 +2623,7 @@ function setDefaultRegistry(registry) {
2623
2623
  }
2624
2624
  async function reloadDefaultRegistry() {
2625
2625
  globalRegistry = buildDefaultRegistry();
2626
- const { resetGlobalRegistry } = await import("./unified-registry-K4DRV5PF.js");
2626
+ const { resetGlobalRegistry } = await import("./unified-registry-7WZ2BLIC.js");
2627
2627
  resetGlobalRegistry();
2628
2628
  return globalRegistry;
2629
2629
  }
@@ -9161,7 +9161,8 @@ var CapacityFilterStage = class {
9161
9161
  let updatedCtx = ctx;
9162
9162
  let exhausted = 0;
9163
9163
  let unmeasured = 0;
9164
- for (const [cli, assessment] of assessments) {
9164
+ for (const cli of remaining) {
9165
+ const assessment = assessments.get(cli) ?? "unmeasured";
9165
9166
  if (assessment === "unmeasured") {
9166
9167
  unmeasured++;
9167
9168
  continue;
@@ -9245,6 +9246,48 @@ var CapacityFilterStage = class {
9245
9246
  * partial adapter reaches this path — which is exactly the case that must not
9246
9247
  * be fatal.
9247
9248
  */
9249
+ /**
9250
+ * Assess capacity for a set of routing ARMS (#4455).
9251
+ *
9252
+ * Capacity belongs to the serving route, not the display slot: a CLI
9253
+ * subscription's quota and an API key's quota are genuinely independent, so
9254
+ * `claude` and `api:anthropic` must be probed separately even though they
9255
+ * share a vendor slot. Callers that hold the arm list should use this rather
9256
+ * than routing through the slot-collapsing `RoutingContext`.
9257
+ */
9258
+ async assessArms(arms) {
9259
+ return this.assessAll(arms);
9260
+ }
9261
+ /**
9262
+ * Arm-granular filter (#4455).
9263
+ *
9264
+ * The `route()` path filters at display-slot granularity because that is what
9265
+ * `RoutingContext` carries, but capacity is a property of the serving route:
9266
+ * `claude` and `api:anthropic` share a vendor slot and have entirely separate
9267
+ * quotas. Assessing per slot meant one arm's exhaustion excluded both — a
9268
+ * destructive false positive — while an exhausted api arm went unprobed.
9269
+ *
9270
+ * Enforcement and the metric counters stay in here rather than at the call
9271
+ * site so both paths share one policy.
9272
+ */
9273
+ async filterArms(arms) {
9274
+ const assessments = await this.assessAll(arms);
9275
+ const excluded = /* @__PURE__ */ new Map();
9276
+ const eligible = [];
9277
+ let unmeasured = 0;
9278
+ for (const arm of arms) {
9279
+ const assessment = assessments.get(arm) ?? "unmeasured";
9280
+ if (assessment === "unmeasured") unmeasured++;
9281
+ if (assessment === "exhausted" && this.config.enforceHardLimits) {
9282
+ excluded.set(arm, `${CAPACITY_EXHAUSTED}: no capacity remaining`);
9283
+ this.excludedCount++;
9284
+ continue;
9285
+ }
9286
+ eligible.push(arm);
9287
+ }
9288
+ this.unmeasuredCount += unmeasured;
9289
+ return { eligible, excluded };
9290
+ }
9248
9291
  async assessAll(candidates) {
9249
9292
  const settled = await Promise.allSettled(
9250
9293
  candidates.map(async (cli) => {
@@ -13217,26 +13260,18 @@ async function runCapacityStage(task, candidates, stagesExecuted, deps) {
13217
13260
  if (!deps.config.enableCapacityBalancing || deps.capacityFilterStage === void 0) {
13218
13261
  return ok(candidates);
13219
13262
  }
13220
- const ctx = createRoutingContext(task.content, armsToSlots(candidates));
13221
13263
  stagesExecuted.push("capacity-filter");
13222
- let result;
13264
+ let outcome;
13223
13265
  try {
13224
- result = await deps.capacityFilterStage.route(ctx);
13266
+ outcome = await deps.capacityFilterStage.filterArms(candidates);
13225
13267
  } catch (error) {
13226
13268
  deps.logger.debug("Capacity stage threw - keeping all candidates", {
13227
13269
  error: error instanceof Error ? error.message : String(error)
13228
13270
  });
13229
13271
  return ok(candidates);
13230
13272
  }
13231
- if (!result.ok) {
13232
- deps.logger.debug("Capacity stage failed - keeping all candidates", {
13233
- error: result.error.message
13234
- });
13235
- return ok(candidates);
13236
- }
13237
- const eligible = keepArmsForSlots(candidates, getRemainingCandidates(result.value.context));
13238
- if (eligible.length === 0) {
13239
- const reasons = [...result.value.context.filtered.entries()].map(([cli, reason]) => `${cli} (${reason})`).join(", ");
13273
+ if (outcome.eligible.length === 0) {
13274
+ const reasons = [...outcome.excluded.entries()].map(([arm, reason]) => `${arm} (${reason})`).join(", ");
13240
13275
  return err(
13241
13276
  new CompositeRoutingError(
13242
13277
  `All routing candidates excluded \u2014 ${CAPACITY_EXHAUSTED}. Excluded: ${reasons}`,
@@ -13244,7 +13279,7 @@ async function runCapacityStage(task, candidates, stagesExecuted, deps) {
13244
13279
  )
13245
13280
  );
13246
13281
  }
13247
- return ok(eligible);
13282
+ return ok(outcome.eligible);
13248
13283
  }
13249
13284
  var DEFAULT_COMPLEXITY = "moderate";
13250
13285
  function extractComplexityFromSignals(signals) {
@@ -14627,7 +14662,7 @@ var CompositeRouter = class _CompositeRouter {
14627
14662
  */
14628
14663
  async consultUnifiedContext(task) {
14629
14664
  try {
14630
- const { getContextForTask, inferTaskCategory } = await import("./context-retriever-UDERFG2L.js");
14665
+ const { getContextForTask, inferTaskCategory } = await import("./context-retriever-MBGPFZA7.js");
14631
14666
  const ctx = await getContextForTask({
14632
14667
  task: task.content,
14633
14668
  category: inferTaskCategory(task.content),
@@ -16211,4 +16246,4 @@ export {
16211
16246
  AgentCapability,
16212
16247
  OrchestratorError
16213
16248
  };
16214
- //# sourceMappingURL=chunk-ATNHVLKJ.js.map
16249
+ //# sourceMappingURL=chunk-26NSVQ65.js.map