nexus-agents 2.141.6 → 2.142.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.
@@ -73,6 +73,38 @@ import {
73
73
  // src/mcp/tools/consensus-vote.ts
74
74
  import { z as z10 } from "zod";
75
75
 
76
+ // src/cli/voter-model-overrides.ts
77
+ function voterModelOverrideEnvKey(role) {
78
+ return `NEXUS_VOTER_MODEL_${role.toUpperCase()}`;
79
+ }
80
+ function resolveVoterModelOverrides(roles, gatewayAdapters, logger10) {
81
+ const overrides = /* @__PURE__ */ new Map();
82
+ if (gatewayAdapters.length === 0) return overrides;
83
+ const byId = /* @__PURE__ */ new Map();
84
+ for (const adapter of gatewayAdapters) byId.set(adapter.modelId, adapter);
85
+ for (const role of roles) {
86
+ const envKey = voterModelOverrideEnvKey(role);
87
+ const raw = process.env[envKey];
88
+ if (raw === void 0 || raw.trim() === "") continue;
89
+ const requested = raw.trim();
90
+ const adapter = byId.get(requested) ?? gatewayAdapters.find((a) => a.modelId.toLowerCase() === requested.toLowerCase());
91
+ if (adapter === void 0) {
92
+ logger10.warn(
93
+ `Voter model override ${envKey}="${requested}" is not a discovered gateway model \u2014 falling back to round-robin for role "${role}".`,
94
+ { role, requested, available: [...byId.keys()] }
95
+ );
96
+ continue;
97
+ }
98
+ overrides.set(role, adapter);
99
+ }
100
+ if (overrides.size > 0) {
101
+ logger10.info("Applied per-role voter model overrides (#4055)", {
102
+ overrides: Object.fromEntries([...overrides].map(([r, a]) => [r, a.modelId]))
103
+ });
104
+ }
105
+ return overrides;
106
+ }
107
+
76
108
  // src/cli/vote-types.ts
77
109
  var VOTER_ROLES = {
78
110
  architect: "Software Architect - evaluates technical design, scalability, and maintainability",
@@ -980,24 +1012,38 @@ function assignRoundRobinAdapters(roles, entries, logger10, source) {
980
1012
  });
981
1013
  return adapters;
982
1014
  }
983
- async function resolveDiverseAdapters(roles, logger10, fallbackAdapter, gatewayAdapters) {
984
- if (gatewayAdapters !== void 0 && gatewayAdapters.length > 0) {
985
- if (gatewayAdapters.length === 1) {
986
- if (roles.length > 1) {
987
- logger10.warn("Consensus panel collapsed to a single gateway model \u2014 votes may correlate", {
988
- model: gatewayAdapters[0]?.modelId,
989
- roleCount: roles.length
990
- });
991
- }
992
- return assignUniformAdapter(roles, gatewayAdapters[0] ?? fallbackAdapter);
1015
+ function resolveGatewayRoleAdapters(roles, gatewayAdapters, fallbackAdapter, logger10) {
1016
+ if (gatewayAdapters.length === 1) {
1017
+ if (roles.length > 1) {
1018
+ logger10.warn("Consensus panel collapsed to a single gateway model \u2014 votes may correlate", {
1019
+ model: gatewayAdapters[0]?.modelId,
1020
+ roleCount: roles.length
1021
+ });
993
1022
  }
994
- return assignRoundRobinAdapters(
995
- roles,
996
- gatewayAdapters.map((a) => ({ label: a.modelId, adapter: a })),
997
- logger10,
998
- "gateway"
1023
+ return assignUniformAdapter(roles, gatewayAdapters[0] ?? fallbackAdapter);
1024
+ }
1025
+ const overrides = resolveVoterModelOverrides(roles, gatewayAdapters, logger10);
1026
+ const roundRobinRoles = roles.filter((r) => !overrides.has(r));
1027
+ const assigned = assignRoundRobinAdapters(
1028
+ roundRobinRoles,
1029
+ gatewayAdapters.map((a) => ({ label: a.modelId, adapter: a })),
1030
+ logger10,
1031
+ "gateway"
1032
+ );
1033
+ for (const [role, adapter] of overrides) assigned.set(role, adapter);
1034
+ const distinctModels = new Set([...assigned.values()].map((a) => a.modelId));
1035
+ if (roles.length > 1 && distinctModels.size === 1) {
1036
+ logger10.warn(
1037
+ "Consensus panel collapsed to a single gateway model via overrides \u2014 votes may correlate",
1038
+ { model: [...distinctModels][0], roleCount: roles.length }
999
1039
  );
1000
1040
  }
1041
+ return assigned;
1042
+ }
1043
+ async function resolveDiverseAdapters(roles, logger10, fallbackAdapter, gatewayAdapters) {
1044
+ if (gatewayAdapters !== void 0 && gatewayAdapters.length > 0) {
1045
+ return resolveGatewayRoleAdapters(roles, gatewayAdapters, fallbackAdapter, logger10);
1046
+ }
1001
1047
  let availableClis;
1002
1048
  try {
1003
1049
  availableClis = await getAvailableClis();
@@ -6134,4 +6180,4 @@ export {
6134
6180
  CONSENSUS_VOTE_OUTPUT_SCHEMA,
6135
6181
  registerConsensusVoteTool
6136
6182
  };
6137
- //# sourceMappingURL=chunk-V2GQUJ3X.js.map
6183
+ //# sourceMappingURL=chunk-FPIAD37H.js.map