nexus-agents 2.102.8 → 2.103.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 (115) hide show
  1. package/dist/{child-mcp-config-3FIENOGY.js → child-mcp-config-IPPKT47T.js} +2 -2
  2. package/dist/{chunk-WVZT4JGL.js → chunk-3TOHOAB2.js} +360 -212
  3. package/dist/chunk-3TOHOAB2.js.map +1 -0
  4. package/dist/{chunk-G3QQOU4H.js → chunk-3VSLKTD6.js} +4 -4
  5. package/dist/{chunk-TLTWQAHI.js → chunk-4FIY62UC.js} +3 -3
  6. package/dist/{chunk-UXBZ346L.js → chunk-6XWIR6JJ.js} +2 -2
  7. package/dist/{chunk-74QFV5ON.js → chunk-ANHBUWOI.js} +3 -3
  8. package/dist/{chunk-THUENUJA.js → chunk-AO2SCUPO.js} +2 -2
  9. package/dist/{chunk-ER6YMAZU.js → chunk-BUZ62ZOK.js} +2 -2
  10. package/dist/{chunk-J524D5GA.js → chunk-CNQZ6BJE.js} +2 -2
  11. package/dist/{chunk-NBAARQC6.js → chunk-F6X6UH6D.js} +7 -7
  12. package/dist/{chunk-VJFUIP6N.js → chunk-FESEHMBN.js} +21 -2
  13. package/dist/{chunk-VJFUIP6N.js.map → chunk-FESEHMBN.js.map} +1 -1
  14. package/dist/{chunk-2NSCF4PI.js → chunk-FPY53SSC.js} +7 -7
  15. package/dist/{chunk-RHH75VON.js → chunk-FSXN5GGJ.js} +3 -3
  16. package/dist/{chunk-HAKXSIBS.js → chunk-H6QEJT56.js} +2 -2
  17. package/dist/{chunk-4CPPYUBW.js → chunk-IEFH53RH.js} +2 -2
  18. package/dist/{chunk-ODN2O3XZ.js → chunk-K4H5LCSU.js} +77 -30
  19. package/dist/chunk-K4H5LCSU.js.map +1 -0
  20. package/dist/{chunk-GUHVV3Q4.js → chunk-M6QD4H7S.js} +2 -2
  21. package/dist/{chunk-Q7FINCKE.js → chunk-NO66DOR2.js} +2 -2
  22. package/dist/{chunk-CPGZRXY3.js → chunk-Q5DDXJWJ.js} +3 -3
  23. package/dist/{chunk-EYIIQ7KE.js → chunk-Q732LOXE.js} +14 -5
  24. package/dist/{chunk-EYIIQ7KE.js.map → chunk-Q732LOXE.js.map} +1 -1
  25. package/dist/{chunk-PF7GV22M.js → chunk-QA5IABQ4.js} +5 -5
  26. package/dist/{chunk-JEOFSMRI.js → chunk-QSTVUC2C.js} +2 -2
  27. package/dist/{chunk-L3RP7STR.js → chunk-RJ2FCK5T.js} +4 -4
  28. package/dist/{chunk-OIFFZHSV.js → chunk-S5LL7Y77.js} +4 -4
  29. package/dist/{chunk-GAX6YG5E.js → chunk-STLETCQJ.js} +2 -2
  30. package/dist/{chunk-IS2OUYGR.js → chunk-TJVGB4OE.js} +2 -2
  31. package/dist/{chunk-47YAIGCP.js → chunk-TNX3SEBY.js} +2 -2
  32. package/dist/{chunk-B73SAOST.js → chunk-TQLSHKPJ.js} +3 -3
  33. package/dist/{chunk-P6TYLTER.js → chunk-TY2M7UQD.js} +9 -9
  34. package/dist/{chunk-WPGVI2F2.js → chunk-VOGIG42V.js} +2 -2
  35. package/dist/{chunk-FYQ36FP3.js → chunk-VU252OUC.js} +3 -3
  36. package/dist/{chunk-ZW6NKOXT.js → chunk-YMBG7LCM.js} +2 -2
  37. package/dist/{cli-circuit-breaker-VHAHRE2J.js → cli-circuit-breaker-KSNJ2KWP.js} +4 -4
  38. package/dist/cli.js +40 -38
  39. package/dist/cli.js.map +1 -1
  40. package/dist/{composite-router-NQMFTZ6B.js → composite-router-5BO2RU4R.js} +2 -2
  41. package/dist/{consensus-vote-VGQW6LCB.js → consensus-vote-4W2MOXL2.js} +12 -12
  42. package/dist/{context-retriever-BE4DNAPM.js → context-retriever-EFEWHU3Z.js} +6 -6
  43. package/dist/{doctor-deep-7PN77HHM.js → doctor-deep-AWSHPMB3.js} +3 -3
  44. package/dist/{expert-bridge-HLSKV3PK.js → expert-bridge-P4NWKKOI.js} +4 -4
  45. package/dist/{factory-PTEIJ2H2.js → factory-BSWATZK3.js} +5 -5
  46. package/dist/{factory-2A2CZPQR.js → factory-OHAMFHSF.js} +5 -5
  47. package/dist/{improvement-review-6EV2FWXI.js → improvement-review-5ZWAZUB6.js} +4 -4
  48. package/dist/index.d.ts +13 -2
  49. package/dist/index.js +27 -27
  50. package/dist/{init-opencode-GZD26YXM.js → init-opencode-7O6XN2QB.js} +5 -5
  51. package/dist/{issue-triage-JGQTQVQI.js → issue-triage-MBNGFPVS.js} +5 -5
  52. package/dist/{pr-reviewer-helpers-SEA7L3XT.js → pr-reviewer-helpers-L5KOZXJO.js} +4 -4
  53. package/dist/{registry-command-O5G5VII2.js → registry-command-F565N7EI.js} +2 -2
  54. package/dist/{repo-security-plan-6QUW6JW5.js → repo-security-plan-JRL6NQKO.js} +3 -3
  55. package/dist/{research-helpers-synthesize-2HHHQP5I.js → research-helpers-synthesize-KJ7H75QA.js} +3 -3
  56. package/dist/{routing-memory-SCPATSY6.js → routing-memory-YECWDSDV.js} +2 -2
  57. package/dist/{session-memory-O77ISZYP.js → session-memory-AG4IM3JY.js} +3 -3
  58. package/dist/{setup-command-VZEAQM27.js → setup-command-WAUXPMOU.js} +10 -10
  59. package/dist/{setup-config-AKLJPGHL.js → setup-config-2GDDU5CV.js} +3 -3
  60. package/dist/{setup-custom-api-PK5OLVW5.js → setup-custom-api-6N2BTUGY.js} +4 -4
  61. package/dist/{tool-memory-KQ5N6GRC.js → tool-memory-3ZWQVJX3.js} +5 -5
  62. package/dist/{weather-report-BUPURZ6J.js → weather-report-WAOVQRGI.js} +2 -2
  63. package/package.json +1 -1
  64. package/dist/chunk-ODN2O3XZ.js.map +0 -1
  65. package/dist/chunk-WVZT4JGL.js.map +0 -1
  66. /package/dist/{child-mcp-config-3FIENOGY.js.map → child-mcp-config-IPPKT47T.js.map} +0 -0
  67. /package/dist/{chunk-G3QQOU4H.js.map → chunk-3VSLKTD6.js.map} +0 -0
  68. /package/dist/{chunk-TLTWQAHI.js.map → chunk-4FIY62UC.js.map} +0 -0
  69. /package/dist/{chunk-UXBZ346L.js.map → chunk-6XWIR6JJ.js.map} +0 -0
  70. /package/dist/{chunk-74QFV5ON.js.map → chunk-ANHBUWOI.js.map} +0 -0
  71. /package/dist/{chunk-THUENUJA.js.map → chunk-AO2SCUPO.js.map} +0 -0
  72. /package/dist/{chunk-ER6YMAZU.js.map → chunk-BUZ62ZOK.js.map} +0 -0
  73. /package/dist/{chunk-J524D5GA.js.map → chunk-CNQZ6BJE.js.map} +0 -0
  74. /package/dist/{chunk-NBAARQC6.js.map → chunk-F6X6UH6D.js.map} +0 -0
  75. /package/dist/{chunk-2NSCF4PI.js.map → chunk-FPY53SSC.js.map} +0 -0
  76. /package/dist/{chunk-RHH75VON.js.map → chunk-FSXN5GGJ.js.map} +0 -0
  77. /package/dist/{chunk-HAKXSIBS.js.map → chunk-H6QEJT56.js.map} +0 -0
  78. /package/dist/{chunk-4CPPYUBW.js.map → chunk-IEFH53RH.js.map} +0 -0
  79. /package/dist/{chunk-GUHVV3Q4.js.map → chunk-M6QD4H7S.js.map} +0 -0
  80. /package/dist/{chunk-Q7FINCKE.js.map → chunk-NO66DOR2.js.map} +0 -0
  81. /package/dist/{chunk-CPGZRXY3.js.map → chunk-Q5DDXJWJ.js.map} +0 -0
  82. /package/dist/{chunk-PF7GV22M.js.map → chunk-QA5IABQ4.js.map} +0 -0
  83. /package/dist/{chunk-JEOFSMRI.js.map → chunk-QSTVUC2C.js.map} +0 -0
  84. /package/dist/{chunk-L3RP7STR.js.map → chunk-RJ2FCK5T.js.map} +0 -0
  85. /package/dist/{chunk-OIFFZHSV.js.map → chunk-S5LL7Y77.js.map} +0 -0
  86. /package/dist/{chunk-GAX6YG5E.js.map → chunk-STLETCQJ.js.map} +0 -0
  87. /package/dist/{chunk-IS2OUYGR.js.map → chunk-TJVGB4OE.js.map} +0 -0
  88. /package/dist/{chunk-47YAIGCP.js.map → chunk-TNX3SEBY.js.map} +0 -0
  89. /package/dist/{chunk-B73SAOST.js.map → chunk-TQLSHKPJ.js.map} +0 -0
  90. /package/dist/{chunk-P6TYLTER.js.map → chunk-TY2M7UQD.js.map} +0 -0
  91. /package/dist/{chunk-WPGVI2F2.js.map → chunk-VOGIG42V.js.map} +0 -0
  92. /package/dist/{chunk-FYQ36FP3.js.map → chunk-VU252OUC.js.map} +0 -0
  93. /package/dist/{chunk-ZW6NKOXT.js.map → chunk-YMBG7LCM.js.map} +0 -0
  94. /package/dist/{cli-circuit-breaker-VHAHRE2J.js.map → cli-circuit-breaker-KSNJ2KWP.js.map} +0 -0
  95. /package/dist/{composite-router-NQMFTZ6B.js.map → composite-router-5BO2RU4R.js.map} +0 -0
  96. /package/dist/{consensus-vote-VGQW6LCB.js.map → consensus-vote-4W2MOXL2.js.map} +0 -0
  97. /package/dist/{context-retriever-BE4DNAPM.js.map → context-retriever-EFEWHU3Z.js.map} +0 -0
  98. /package/dist/{doctor-deep-7PN77HHM.js.map → doctor-deep-AWSHPMB3.js.map} +0 -0
  99. /package/dist/{expert-bridge-HLSKV3PK.js.map → expert-bridge-P4NWKKOI.js.map} +0 -0
  100. /package/dist/{factory-2A2CZPQR.js.map → factory-BSWATZK3.js.map} +0 -0
  101. /package/dist/{factory-PTEIJ2H2.js.map → factory-OHAMFHSF.js.map} +0 -0
  102. /package/dist/{improvement-review-6EV2FWXI.js.map → improvement-review-5ZWAZUB6.js.map} +0 -0
  103. /package/dist/{init-opencode-GZD26YXM.js.map → init-opencode-7O6XN2QB.js.map} +0 -0
  104. /package/dist/{issue-triage-JGQTQVQI.js.map → issue-triage-MBNGFPVS.js.map} +0 -0
  105. /package/dist/{pr-reviewer-helpers-SEA7L3XT.js.map → pr-reviewer-helpers-L5KOZXJO.js.map} +0 -0
  106. /package/dist/{registry-command-O5G5VII2.js.map → registry-command-F565N7EI.js.map} +0 -0
  107. /package/dist/{repo-security-plan-6QUW6JW5.js.map → repo-security-plan-JRL6NQKO.js.map} +0 -0
  108. /package/dist/{research-helpers-synthesize-2HHHQP5I.js.map → research-helpers-synthesize-KJ7H75QA.js.map} +0 -0
  109. /package/dist/{routing-memory-SCPATSY6.js.map → routing-memory-YECWDSDV.js.map} +0 -0
  110. /package/dist/{session-memory-O77ISZYP.js.map → session-memory-AG4IM3JY.js.map} +0 -0
  111. /package/dist/{setup-command-VZEAQM27.js.map → setup-command-WAUXPMOU.js.map} +0 -0
  112. /package/dist/{setup-config-AKLJPGHL.js.map → setup-config-2GDDU5CV.js.map} +0 -0
  113. /package/dist/{setup-custom-api-PK5OLVW5.js.map → setup-custom-api-6N2BTUGY.js.map} +0 -0
  114. /package/dist/{tool-memory-KQ5N6GRC.js.map → tool-memory-3ZWQVJX3.js.map} +0 -0
  115. /package/dist/{weather-report-BUPURZ6J.js.map → weather-report-WAOVQRGI.js.map} +0 -0
@@ -6,10 +6,10 @@ import {
6
6
  import {
7
7
  getTokenEnvVars,
8
8
  resolveToken
9
- } from "./chunk-ZW6NKOXT.js";
9
+ } from "./chunk-YMBG7LCM.js";
10
10
  import {
11
11
  executeExpert
12
- } from "./chunk-NBAARQC6.js";
12
+ } from "./chunk-F6X6UH6D.js";
13
13
  import {
14
14
  EventTopics,
15
15
  JobStatusSchema,
@@ -30,7 +30,7 @@ import {
30
30
  writeJobComplete,
31
31
  writeJobFailed,
32
32
  writeJobPending
33
- } from "./chunk-P6TYLTER.js";
33
+ } from "./chunk-TY2M7UQD.js";
34
34
  import {
35
35
  REGISTRY_PATH,
36
36
  getProjectRoot,
@@ -39,19 +39,19 @@ import {
39
39
  normalizeTopicToCanonical,
40
40
  savePapersRegistry,
41
41
  synthesizeResearch
42
- } from "./chunk-GAX6YG5E.js";
42
+ } from "./chunk-STLETCQJ.js";
43
43
  import {
44
44
  IssueTriage,
45
45
  createAuditTrail,
46
46
  createGraphAuditBridge
47
- } from "./chunk-G3QQOU4H.js";
47
+ } from "./chunk-3VSLKTD6.js";
48
48
  import {
49
49
  resolveEnvMode,
50
50
  sanitizeInput
51
- } from "./chunk-Q7FINCKE.js";
51
+ } from "./chunk-NO66DOR2.js";
52
52
  import {
53
53
  withPrerequisite
54
- } from "./chunk-TLTWQAHI.js";
54
+ } from "./chunk-4FIY62UC.js";
55
55
  import {
56
56
  NOOP_NOTIFIER,
57
57
  RateLimiter,
@@ -71,10 +71,10 @@ import {
71
71
  withAccessPolicy,
72
72
  withProgressHeartbeat,
73
73
  wrapToolWithTimeout
74
- } from "./chunk-VJFUIP6N.js";
74
+ } from "./chunk-FESEHMBN.js";
75
75
  import {
76
76
  generateSecurityPlan
77
- } from "./chunk-ER6YMAZU.js";
77
+ } from "./chunk-BUZ62ZOK.js";
78
78
  import {
79
79
  analyzeGitHubRepo
80
80
  } from "./chunk-HFOQKCD2.js";
@@ -82,26 +82,26 @@ import {
82
82
  getContextForTask,
83
83
  inferTaskCategory,
84
84
  summarizeContextForPrompt
85
- } from "./chunk-74QFV5ON.js";
85
+ } from "./chunk-ANHBUWOI.js";
86
86
  import {
87
87
  DEFAULT_RELEVANCE_CONFIG,
88
88
  MemoryImportance,
89
89
  calculateTextJaccardSimilarity,
90
90
  getToolMemory
91
- } from "./chunk-OIFFZHSV.js";
91
+ } from "./chunk-S5LL7Y77.js";
92
92
  import {
93
93
  DEFAULT_TASK_TTL_MS,
94
94
  DEFAULT_TOOL_RATE_LIMITS,
95
95
  clampTaskTtl
96
- } from "./chunk-2NSCF4PI.js";
96
+ } from "./chunk-FPY53SSC.js";
97
97
  import {
98
98
  getAvailabilityCache,
99
99
  getCliForModelId,
100
100
  resolveFallback
101
- } from "./chunk-UXBZ346L.js";
101
+ } from "./chunk-6XWIR6JJ.js";
102
102
  import {
103
103
  DEFAULTS
104
- } from "./chunk-GUHVV3Q4.js";
104
+ } from "./chunk-M6QD4H7S.js";
105
105
  import {
106
106
  resolveInsideRoot
107
107
  } from "./chunk-NUBSJGQZ.js";
@@ -117,11 +117,11 @@ import {
117
117
  getAvailableClis,
118
118
  sleep,
119
119
  withTimeout
120
- } from "./chunk-ODN2O3XZ.js";
120
+ } from "./chunk-K4H5LCSU.js";
121
121
  import {
122
122
  generateHyphenId,
123
123
  generateUUID
124
- } from "./chunk-WPGVI2F2.js";
124
+ } from "./chunk-VOGIG42V.js";
125
125
  import {
126
126
  BUILT_IN_EXPERTS,
127
127
  BuiltInExpertTypeSchema,
@@ -133,7 +133,7 @@ import {
133
133
  } from "./chunk-PQHVC4BD.js";
134
134
  import {
135
135
  createSessionMemory
136
- } from "./chunk-JEOFSMRI.js";
136
+ } from "./chunk-QSTVUC2C.js";
137
137
  import {
138
138
  AGENT_ROUTER_TIMEOUTS,
139
139
  API_TIMEOUTS,
@@ -164,6 +164,7 @@ import {
164
164
  WeatherReportInputSchema,
165
165
  WorkflowError,
166
166
  buildCapabilityProfiles,
167
+ buildDefaultModelSources,
167
168
  categorizeOutcomeErrorMessage,
168
169
  clamp,
169
170
  clamp01,
@@ -181,6 +182,7 @@ import {
181
182
  formatZodError,
182
183
  generateWeatherReport,
183
184
  getAdaptiveBonus,
185
+ getDefaultAvailableModelsCache,
184
186
  getDefaultModelForCli,
185
187
  getDefaultRegistry,
186
188
  getErrorMessage,
@@ -205,7 +207,7 @@ import {
205
207
  resolveModelIdentitySync,
206
208
  toExpertTaskAnalysisResult,
207
209
  withStep
208
- } from "./chunk-EYIIQ7KE.js";
210
+ } from "./chunk-Q732LOXE.js";
209
211
  import {
210
212
  nexusDataPath,
211
213
  nexusDataPathEnsure
@@ -23567,10 +23569,10 @@ function calculateZStatistic(params) {
23567
23569
  function calculateDifferenceCI(p1, p2, total1, total2, confidence) {
23568
23570
  const difference = p1 - p2;
23569
23571
  const seDiff = Math.sqrt(p1 * (1 - p1) / (total1 || 1) + p2 * (1 - p2) / (total2 || 1));
23570
- const z113 = getZScore(confidence);
23572
+ const z114 = getZScore(confidence);
23571
23573
  return {
23572
- lower: difference - z113 * seDiff,
23573
- upper: difference + z113 * seDiff,
23574
+ lower: difference - z114 * seDiff,
23575
+ upper: difference + z114 * seDiff,
23574
23576
  estimate: difference,
23575
23577
  confidence,
23576
23578
  n: total1 + total2,
@@ -23593,11 +23595,11 @@ function proportionConfidenceInterval(successes, total, options = {}) {
23593
23595
  standardError: 0
23594
23596
  };
23595
23597
  }
23596
- const z113 = getZScore(opts.confidence);
23597
- const z210 = z113 * z113;
23598
+ const z114 = getZScore(opts.confidence);
23599
+ const z210 = z114 * z114;
23598
23600
  const denominator = 1 + z210 / n;
23599
23601
  const center = (p + z210 / (2 * n)) / denominator;
23600
- const margin = z113 / denominator * Math.sqrt(p * (1 - p) / n + z210 / (4 * n * n));
23602
+ const margin = z114 / denominator * Math.sqrt(p * (1 - p) / n + z210 / (4 * n * n));
23601
23603
  const lower = Math.max(0, center - margin);
23602
23604
  const upper = Math.min(1, center + margin);
23603
23605
  const standardError = Math.sqrt(p * (1 - p) / n);
@@ -23627,8 +23629,8 @@ function meanConfidenceInterval(values, options = {}) {
23627
23629
  const variance = values.reduce((sum, v) => sum + (v - mean) ** 2, 0) / (n - 1 || 1);
23628
23630
  const stdDev = Math.sqrt(variance);
23629
23631
  const standardError = stdDev / Math.sqrt(n);
23630
- const z113 = getZScore(opts.confidence);
23631
- const margin = z113 * standardError;
23632
+ const z114 = getZScore(opts.confidence);
23633
+ const margin = z114 * standardError;
23632
23634
  return {
23633
23635
  lower: mean - margin,
23634
23636
  upper: mean + margin,
@@ -26129,14 +26131,64 @@ function registerExpertsResource(server, logger56) {
26129
26131
  logger56.info("Registered experts resource", { uri: EXPERTS_RESOURCE_URI });
26130
26132
  }
26131
26133
 
26134
+ // src/mcp/resources/available-models-resource.ts
26135
+ var AVAILABLE_MODELS_URI = "nexus://available-models";
26136
+ var AVAILABLE_MODELS_NAME = "available-models";
26137
+ async function buildAvailableModelsPayload(cache = getDefaultAvailableModelsCache()) {
26138
+ const all = await cache.getAll();
26139
+ const bySource = /* @__PURE__ */ new Map();
26140
+ for (const m of all) {
26141
+ const list = bySource.get(m.source) ?? [];
26142
+ list.push(m.id);
26143
+ bySource.set(m.source, list);
26144
+ }
26145
+ return {
26146
+ total: all.length,
26147
+ sources: [...bySource.entries()].map(([source, ids]) => ({
26148
+ source,
26149
+ modelCount: ids.length,
26150
+ ids
26151
+ })),
26152
+ note: "Live discovered model set (existence only). Empty if dynamic discovery is not enabled (NEXUS_DYNAMIC_MODELS)."
26153
+ };
26154
+ }
26155
+ function registerAvailableModelsResource(server, logger56) {
26156
+ server.registerResource(
26157
+ AVAILABLE_MODELS_NAME,
26158
+ AVAILABLE_MODELS_URI,
26159
+ {
26160
+ description: "Live, dynamically-discovered model set per transport (what routing can dispatch to now)",
26161
+ mimeType: "application/json"
26162
+ },
26163
+ async () => {
26164
+ logger56.debug("Reading available-models resource");
26165
+ const payload = await buildAvailableModelsPayload();
26166
+ return {
26167
+ contents: [
26168
+ {
26169
+ uri: AVAILABLE_MODELS_URI,
26170
+ mimeType: "application/json",
26171
+ text: JSON.stringify(payload, null, 2)
26172
+ }
26173
+ ]
26174
+ };
26175
+ }
26176
+ );
26177
+ logger56.info("Registered available-models resource", { uri: AVAILABLE_MODELS_URI });
26178
+ }
26179
+
26132
26180
  // src/mcp/resources/index.ts
26133
26181
  function registerResources(server, logger56) {
26134
26182
  const log = logger56 ?? createLogger({ component: "mcp-resources" });
26135
26183
  log.info("Registering MCP resources");
26136
- registerModelsResource(server, log);
26137
- registerResearchResource(server, log);
26138
- registerExpertsResource(server, log);
26139
- log.info("All MCP resources registered", { count: 3 });
26184
+ const registrars = [
26185
+ registerModelsResource,
26186
+ registerResearchResource,
26187
+ registerExpertsResource,
26188
+ registerAvailableModelsResource
26189
+ ];
26190
+ for (const register of registrars) register(server, log);
26191
+ log.info("All MCP resources registered", { count: registrars.length });
26140
26192
  }
26141
26193
 
26142
26194
  // src/mcp/tools/run-workflow-types.ts
@@ -27013,7 +27065,7 @@ async function populateUnifiedContextOnState(state) {
27013
27065
  try {
27014
27066
  const taskCandidate = state["task"];
27015
27067
  if (typeof taskCandidate !== "string" || taskCandidate === "") return;
27016
- const { getContextForTask: getContextForTask2, inferTaskCategory: inferTaskCategory2 } = await import("./context-retriever-BE4DNAPM.js");
27068
+ const { getContextForTask: getContextForTask2, inferTaskCategory: inferTaskCategory2 } = await import("./context-retriever-EFEWHU3Z.js");
27017
27069
  const ctx = await getContextForTask2({
27018
27070
  task: taskCandidate,
27019
27071
  category: inferTaskCategory2(taskCandidate),
@@ -42762,7 +42814,7 @@ async function tryIssueTriage(task) {
42762
42814
  try {
42763
42815
  const issueMatch = task.match(/github\.com\/([^/]+\/[^/]+)\/issues\/(\d+)/);
42764
42816
  if (issueMatch === null) return null;
42765
- const { createIssueTriage } = await import("./issue-triage-JGQTQVQI.js");
42817
+ const { createIssueTriage } = await import("./issue-triage-MBNGFPVS.js");
42766
42818
  const triage = createIssueTriage();
42767
42819
  const owner = issueMatch[1] ?? "";
42768
42820
  const num = issueMatch[2] ?? "";
@@ -42790,7 +42842,7 @@ var VALID_TEMPLATES = /* @__PURE__ */ new Set([
42790
42842
  ]);
42791
42843
  async function classifyWithLLM(task) {
42792
42844
  try {
42793
- const { executeExpert: executeExpert2 } = await import("./expert-bridge-HLSKV3PK.js");
42845
+ const { executeExpert: executeExpert2 } = await import("./expert-bridge-P4NWKKOI.js");
42794
42846
  const prompt = [
42795
42847
  "Classify this task into exactly one pipeline template.",
42796
42848
  "Templates: dev (implementation/bug fix/refactor), research (investigate/evaluate/compare),",
@@ -43696,7 +43748,7 @@ var memoryInitPromise = null;
43696
43748
  async function initPipelineMemory() {
43697
43749
  if (cachedMemory !== null) return cachedMemory;
43698
43750
  try {
43699
- const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-O77ISZYP.js");
43751
+ const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-AG4IM3JY.js");
43700
43752
  const { getLearningDir } = await import("./learning-persistence-UKPO7RYK.js");
43701
43753
  const mem = createSessionMemory2(getLearningDir());
43702
43754
  mem.startSession(`pipeline-${String(getTimeProvider().now())}`);
@@ -43753,7 +43805,7 @@ function recordRoutingExperience(category, success, durationMs, tokensUsed = 0)
43753
43805
  callRecord(routingMemoryCache);
43754
43806
  return;
43755
43807
  }
43756
- routingMemoryInitPromise ??= import("./routing-memory-SCPATSY6.js").then(({ createRoutingMemory }) => {
43808
+ routingMemoryInitPromise ??= import("./routing-memory-YECWDSDV.js").then(({ createRoutingMemory }) => {
43757
43809
  routingMemoryCache ??= createRoutingMemory();
43758
43810
  return routingMemoryCache;
43759
43811
  }).catch((error) => {
@@ -43787,7 +43839,7 @@ ${text}` : "";
43787
43839
  }
43788
43840
  async function getWeatherContext() {
43789
43841
  try {
43790
- const { generateWeatherReport: generateWeatherReport2 } = await import("./weather-report-BUPURZ6J.js");
43842
+ const { generateWeatherReport: generateWeatherReport2 } = await import("./weather-report-WAOVQRGI.js");
43791
43843
  const report = generateWeatherReport2({ includeAdaptive: true });
43792
43844
  const mappings = "recommendedMappings" in report ? report.recommendedMappings : [];
43793
43845
  if (!Array.isArray(mappings) || mappings.length === 0) return "";
@@ -43805,7 +43857,7 @@ ${lines}
43805
43857
  }
43806
43858
  async function getMemoryContext(task) {
43807
43859
  try {
43808
- const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-O77ISZYP.js");
43860
+ const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-AG4IM3JY.js");
43809
43861
  const { getLearningDir } = await import("./learning-persistence-UKPO7RYK.js");
43810
43862
  const memory = createSessionMemory2(getLearningDir(), { maxLearningsInContext: 10 });
43811
43863
  const learnings = memory.searchLearnings(task.slice(0, 200));
@@ -43914,7 +43966,7 @@ ${contextBlock}`;
43914
43966
  const strategy = config.votingStrategy ?? "higher_order";
43915
43967
  await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
43916
43968
  try {
43917
- const { executeVoting } = await import("./consensus-vote-VGQW6LCB.js");
43969
+ const { executeVoting } = await import("./consensus-vote-4W2MOXL2.js");
43918
43970
  const votingResult = await executeVoting(
43919
43971
  {
43920
43972
  proposal: buildVoteProposal(plan, research),
@@ -44909,7 +44961,7 @@ async function searchCodebaseForTask(task) {
44909
44961
  }
44910
44962
  async function queryResearchRegistry(task) {
44911
44963
  try {
44912
- const { synthesizeResearch: synthesizeResearch2 } = await import("./research-helpers-synthesize-2HHHQP5I.js");
44964
+ const { synthesizeResearch: synthesizeResearch2 } = await import("./research-helpers-synthesize-KJ7H75QA.js");
44913
44965
  const topic = task.split(/[.!?\n]/).filter((s) => s.trim().length > 10)[0]?.trim();
44914
44966
  if (topic === void 0) return null;
44915
44967
  const result = await synthesizeResearch2(topic.slice(0, 50));
@@ -44980,7 +45032,7 @@ function createScanStageWrapper() {
44980
45032
  try {
44981
45033
  const slug = ctx.task.match(/([a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+)/)?.[1];
44982
45034
  if (slug !== void 0) {
44983
- const { generateSecurityPlan: generateSecurityPlan2 } = await import("./repo-security-plan-6QUW6JW5.js");
45035
+ const { generateSecurityPlan: generateSecurityPlan2 } = await import("./repo-security-plan-JRL6NQKO.js");
44984
45036
  const plan = await generateSecurityPlan2({ repo: slug, maxScanners: 10 });
44985
45037
  const recs = plan.recommendations.slice(0, 5).map((r) => `${r.priority}: ${r.displayName} (${r.category})`).join("; ");
44986
45038
  return output(PIPELINE_STATE_KEYS.FINDINGS, recs, getTimeProvider().now() - start, true);
@@ -46468,19 +46520,113 @@ function registerSuggestResearchTasksTool(server, deps) {
46468
46520
  logger56.info("Registered suggest_research_tasks tool");
46469
46521
  }
46470
46522
 
46471
- // src/mcp/tools/pipeline-tool.ts
46523
+ // src/mcp/tools/list-available-models-tool.ts
46472
46524
  import { z as z104 } from "zod";
46525
+ var DESCRIPTION4 = "Probe every model-discovery transport (OpenRouter API + opencode/claude/codex/gemini CLIs) and report a per-transport health summary: probe ok/failed, model count, and a sample of ids. Use it to validate the CLIs and APIs are wired and reachable. Read-only; does not change routing.";
46526
+ var PROBE_TIMEOUT_MS = 12e3;
46527
+ var ListAvailableModelsInputSchema = z104.object({
46528
+ includeModelIds: z104.boolean().optional().describe("Include the full model-id list per transport (default false \u2192 sample of 5 only)."),
46529
+ includeOpenRouter: z104.boolean().optional().describe("Probe the OpenRouter live catalog (default true).")
46530
+ });
46531
+ async function probeSource(source, includeModelIds) {
46532
+ let timer;
46533
+ const timeout = new Promise((_, reject) => {
46534
+ timer = setTimeout(() => {
46535
+ reject(new Error(`probe timed out after ${String(PROBE_TIMEOUT_MS)}ms`));
46536
+ }, PROBE_TIMEOUT_MS);
46537
+ });
46538
+ try {
46539
+ const models = await Promise.race([source.listModels(), timeout]);
46540
+ const ids = models.map((m) => m.id);
46541
+ return {
46542
+ transport: source.name,
46543
+ ok: true,
46544
+ modelCount: ids.length,
46545
+ sampleModelIds: ids.slice(0, 5),
46546
+ ...includeModelIds ? { modelIds: ids } : {}
46547
+ };
46548
+ } catch (error) {
46549
+ return {
46550
+ transport: source.name,
46551
+ ok: false,
46552
+ modelCount: 0,
46553
+ sampleModelIds: [],
46554
+ error: error instanceof Error ? error.message : String(error)
46555
+ };
46556
+ } finally {
46557
+ if (timer !== void 0) clearTimeout(timer);
46558
+ }
46559
+ }
46560
+ async function defaultSources(includeOpenRouter) {
46561
+ const { createAllAdapters: createAllAdapters2 } = await import("./factory-BSWATZK3.js");
46562
+ const adapters = createAllAdapters2();
46563
+ return buildDefaultModelSources(adapters, { includeOpenRouter });
46564
+ }
46565
+ async function listAvailableModelsHandler(args, deps, logger56) {
46566
+ const parsed = ListAvailableModelsInputSchema.safeParse(args);
46567
+ if (!parsed.success) {
46568
+ return toolStructuredError({
46569
+ errorCategory: "validation",
46570
+ message: `Validation error: ${formatZodError(parsed.error)}`
46571
+ });
46572
+ }
46573
+ const includeModelIds = parsed.data.includeModelIds ?? false;
46574
+ const includeOpenRouter = parsed.data.includeOpenRouter ?? true;
46575
+ const sources = deps.sourcesFactory !== void 0 ? deps.sourcesFactory(includeOpenRouter) : await defaultSources(includeOpenRouter);
46576
+ const transports = await Promise.all(sources.map((s) => probeSource(s, includeModelIds)));
46577
+ const response = {
46578
+ transports,
46579
+ healthyTransports: transports.filter((t) => t.ok).length,
46580
+ totalTransports: transports.length,
46581
+ totalModels: transports.reduce((sum, t) => sum + t.modelCount, 0),
46582
+ note: "Probe results \u2014 existence only; the in-tree registry remains authoritative for pricing/capability."
46583
+ };
46584
+ logger56.debug("list_available_models probed transports", {
46585
+ healthy: response.healthyTransports,
46586
+ total: response.totalTransports
46587
+ });
46588
+ return toolSuccess(JSON.stringify(response, null, 2));
46589
+ }
46590
+ function registerListAvailableModelsTool(server, deps) {
46591
+ const logger56 = deps.logger ?? createLogger({ tool: "list_available_models" });
46592
+ const toolSchema = {
46593
+ includeModelIds: z104.boolean().optional().describe("Include the full model-id list per transport (default false \u2192 sample of 5 only)."),
46594
+ includeOpenRouter: z104.boolean().optional().describe("Probe the OpenRouter live catalog (default true).")
46595
+ };
46596
+ const secureHandler = createSecureHandler(
46597
+ (args) => listAvailableModelsHandler(args, deps, logger56),
46598
+ { toolName: "list_available_models", rateLimiter: deps.rateLimiter, logger: logger56 }
46599
+ );
46600
+ const timeoutMs = getToolTimeout("list_available_models", deps.security);
46601
+ const wrappedHandler = wrapToolWithTimeout("list_available_models", secureHandler, {
46602
+ timeoutMs,
46603
+ logger: logger56
46604
+ });
46605
+ server.registerTool(
46606
+ "list_available_models",
46607
+ {
46608
+ description: DESCRIPTION4,
46609
+ inputSchema: toolSchema,
46610
+ annotations: getToolAnnotations("list_available_models")
46611
+ },
46612
+ toSdkCallback(wrappedHandler)
46613
+ );
46614
+ logger56.info("Registered list_available_models tool");
46615
+ }
46616
+
46617
+ // src/mcp/tools/pipeline-tool.ts
46618
+ import { z as z105 } from "zod";
46473
46619
  import * as fs13 from "fs";
46474
46620
  import * as path12 from "path";
46475
- var PipelineInputSchema = z104.object({
46621
+ var PipelineInputSchema = z105.object({
46476
46622
  /** The task to execute. */
46477
- task: z104.string().min(5).max(1e4).describe("Task description \u2014 pipeline template auto-selected based on content"),
46623
+ task: z105.string().min(5).max(1e4).describe("Task description \u2014 pipeline template auto-selected based on content"),
46478
46624
  /** Path to a spec file (.md, .yaml) to use as task input. */
46479
- specFile: z104.string().max(500).optional().describe("Path to a spec file \u2014 content prepended to task for greenfield projects"),
46625
+ specFile: z105.string().max(500).optional().describe("Path to a spec file \u2014 content prepended to task for greenfield projects"),
46480
46626
  /** Override template — see `listTemplateIds()` for the canonical list (#2728). Auto-detected if omitted. */
46481
- template: z104.string().max(50).optional().describe(`Pipeline template override. Available: ${listTemplateIds().join(", ")}`),
46627
+ template: z105.string().max(50).optional().describe(`Pipeline template override. Available: ${listTemplateIds().join(", ")}`),
46482
46628
  /** Voting strategy for consensus stages. */
46483
- votingStrategy: z104.enum([
46629
+ votingStrategy: z105.enum([
46484
46630
  "simple_majority",
46485
46631
  "supermajority",
46486
46632
  "unanimous",
@@ -46491,13 +46637,13 @@ var PipelineInputSchema = z104.object({
46491
46637
  "Voting strategy for plan approval. simple_majority (default), supermajority (67%), unanimous, higher_order (Bayesian), proof_of_learning, opinion_wise"
46492
46638
  ),
46493
46639
  /** Use 3 agents instead of 6 for faster voting. */
46494
- quickMode: z104.boolean().default(false).describe("Use 3 agents instead of 6 for faster consensus voting"),
46640
+ quickMode: z105.boolean().default(false).describe("Use 3 agents instead of 6 for faster consensus voting"),
46495
46641
  /** Maximum execution time per stage in milliseconds (min 30s, max 600s). */
46496
- timeoutMs: z104.number().int().min(3e4).max(6e5).optional().describe("Max time per stage in ms (30000-600000). Default: varies by stage complexity"),
46642
+ timeoutMs: z105.number().int().min(3e4).max(6e5).optional().describe("Max time per stage in ms (30000-600000). Default: varies by stage complexity"),
46497
46643
  /** Stop after planning/voting (no implementation). */
46498
- dryRun: z104.boolean().default(false).describe("Stop after vote stage (no implementation)"),
46644
+ dryRun: z105.boolean().default(false).describe("Stop after vote stage (no implementation)"),
46499
46645
  /** TESTS ONLY — random output, must not be used for real decisions. (#2319) */
46500
- simulateVotes: z104.boolean().default(false).describe("TESTS ONLY \u2014 random output, must not be used for real decisions (#2319)")
46646
+ simulateVotes: z105.boolean().default(false).describe("TESTS ONLY \u2014 random output, must not be used for real decisions (#2319)")
46501
46647
  });
46502
46648
  function buildOutput2(result) {
46503
46649
  return {
@@ -46599,7 +46745,7 @@ function registerPipelineTool(server, deps) {
46599
46745
  }
46600
46746
 
46601
46747
  // src/mcp/tools/supply-chain-tradeoff-panel.ts
46602
- import { z as z105 } from "zod";
46748
+ import { z as z106 } from "zod";
46603
46749
  var DEFAULT_AXES = [
46604
46750
  "build_time_determinism",
46605
46751
  "supply_chain_risk",
@@ -46619,16 +46765,16 @@ var FULL_PANEL = [
46619
46765
  "scope_steward"
46620
46766
  ];
46621
46767
  var QUICK_PANEL = ["architect", "security", "scope_steward"];
46622
- var SupplyChainTradeoffPanelInputSchema = z105.object({
46623
- proposal: z105.string().min(1).max(MAX_PROPOSAL_LENGTH).describe('The proposal under tradeoff review (e.g. "Should aegis-boot adopt cargo-nextest?")'),
46624
- axes: z105.array(z105.string().min(1).max(MAX_AXIS_NAME_LENGTH)).min(1).max(MAX_AXES).optional().describe(
46768
+ var SupplyChainTradeoffPanelInputSchema = z106.object({
46769
+ proposal: z106.string().min(1).max(MAX_PROPOSAL_LENGTH).describe('The proposal under tradeoff review (e.g. "Should aegis-boot adopt cargo-nextest?")'),
46770
+ axes: z106.array(z106.string().min(1).max(MAX_AXIS_NAME_LENGTH)).min(1).max(MAX_AXES).optional().describe(
46625
46771
  `Tradeoff axes to evaluate. Default: ${DEFAULT_AXES.join(", ")}. Custom axes accepted; max ${String(MAX_AXES)}.`
46626
46772
  ),
46627
- context: z105.string().max(MAX_CONTEXT_LENGTH).optional().describe(
46773
+ context: z106.string().max(MAX_CONTEXT_LENGTH).optional().describe(
46628
46774
  "Optional context: relevant repo state, dependency tree, vendor publishing patterns, etc."
46629
46775
  ),
46630
- quickMode: z105.boolean().optional().default(false).describe("Use 3 voters (architect, security, scope_steward) instead of 7"),
46631
- simulate: z105.boolean().optional().default(false).describe("Use simulated voters (testing only)")
46776
+ quickMode: z106.boolean().optional().default(false).describe("Use 3 voters (architect, security, scope_steward) instead of 7"),
46777
+ simulate: z106.boolean().optional().default(false).describe("Use simulated voters (testing only)")
46632
46778
  });
46633
46779
  function buildTradeoffProposal(input) {
46634
46780
  const axes = input.axes ?? DEFAULT_AXES;
@@ -46989,7 +47135,8 @@ var REGISTERED_TOOL_NAMES = [
46989
47135
  "supply_chain_tradeoff_panel",
46990
47136
  "improvement_review",
46991
47137
  "run_quality_gate",
46992
- "suggest_research_tasks"
47138
+ "suggest_research_tasks",
47139
+ "list_available_models"
46993
47140
  ];
46994
47141
  function registerTools(server, options) {
46995
47142
  const logger56 = options?.logger ?? createMcpLogger({ component: "tools" });
@@ -47124,40 +47271,40 @@ var RiskLevel = /* @__PURE__ */ ((RiskLevel2) => {
47124
47271
  })(RiskLevel || {});
47125
47272
 
47126
47273
  // src/mcp/safety/stpa-schemas.ts
47127
- import { z as z106 } from "zod";
47128
- var HazardCategorySchema = z106.enum(HazardCategory);
47129
- var HazardSeveritySchema = z106.enum(HazardSeverity);
47130
- var ConstraintPrioritySchema = z106.enum(ConstraintPriority);
47131
- var RiskLevelSchema = z106.enum(RiskLevel);
47132
- var TriggerPatternSchema = z106.object({
47133
- parameter: z106.string().min(1),
47134
- matchType: z106.enum(["contains", "regex", "equals", "startsWith", "endsWith"]),
47135
- pattern: z106.string(),
47136
- reason: z106.string()
47274
+ import { z as z107 } from "zod";
47275
+ var HazardCategorySchema = z107.enum(HazardCategory);
47276
+ var HazardSeveritySchema = z107.enum(HazardSeverity);
47277
+ var ConstraintPrioritySchema = z107.enum(ConstraintPriority);
47278
+ var RiskLevelSchema = z107.enum(RiskLevel);
47279
+ var TriggerPatternSchema = z107.object({
47280
+ parameter: z107.string().min(1),
47281
+ matchType: z107.enum(["contains", "regex", "equals", "startsWith", "endsWith"]),
47282
+ pattern: z107.string(),
47283
+ reason: z107.string()
47137
47284
  });
47138
- var HazardSchema = z106.object({
47139
- id: z106.string().min(1),
47140
- description: z106.string(),
47285
+ var HazardSchema = z107.object({
47286
+ id: z107.string().min(1),
47287
+ description: z107.string(),
47141
47288
  category: HazardCategorySchema,
47142
47289
  severity: HazardSeveritySchema,
47143
- likelihood: z106.enum(["almost_certain", "likely", "possible", "unlikely", "rare"]),
47144
- triggerConditions: z106.array(z106.string()),
47145
- consequences: z106.array(z106.string())
47290
+ likelihood: z107.enum(["almost_certain", "likely", "possible", "unlikely", "rare"]),
47291
+ triggerConditions: z107.array(z107.string()),
47292
+ consequences: z107.array(z107.string())
47146
47293
  });
47147
- var UnsafeControlActionSchema = z106.object({
47148
- id: z106.string().min(1),
47149
- toolName: z106.string().min(1),
47150
- type: z106.enum(["not_provided", "provided_causes_hazard", "wrong_timing", "wrong_duration"]),
47151
- description: z106.string(),
47152
- unsafeContext: z106.string(),
47153
- relatedHazards: z106.array(z106.string()),
47154
- triggerPatterns: z106.array(TriggerPatternSchema).optional()
47294
+ var UnsafeControlActionSchema = z107.object({
47295
+ id: z107.string().min(1),
47296
+ toolName: z107.string().min(1),
47297
+ type: z107.enum(["not_provided", "provided_causes_hazard", "wrong_timing", "wrong_duration"]),
47298
+ description: z107.string(),
47299
+ unsafeContext: z107.string(),
47300
+ relatedHazards: z107.array(z107.string()),
47301
+ triggerPatterns: z107.array(TriggerPatternSchema).optional()
47155
47302
  });
47156
- var SafetyConstraintSchema = z106.object({
47157
- id: z106.string().min(1),
47158
- description: z106.string(),
47159
- mitigates: z106.array(z106.string()),
47160
- enforcement: z106.enum([
47303
+ var SafetyConstraintSchema = z107.object({
47304
+ id: z107.string().min(1),
47305
+ description: z107.string(),
47306
+ mitigates: z107.array(z107.string()),
47307
+ enforcement: z107.enum([
47161
47308
  "prevent",
47162
47309
  "require_confirmation",
47163
47310
  "alert",
@@ -47165,54 +47312,54 @@ var SafetyConstraintSchema = z106.object({
47165
47312
  "rate_limit",
47166
47313
  "require_privilege"
47167
47314
  ]),
47168
- validationFunction: z106.string().optional(),
47315
+ validationFunction: z107.string().optional(),
47169
47316
  priority: ConstraintPrioritySchema
47170
47317
  });
47171
- var PropertySchemaSchema = z106.object({
47172
- type: z106.string(),
47173
- description: z106.string().optional(),
47174
- enum: z106.array(z106.unknown()).optional(),
47175
- pattern: z106.string().optional(),
47176
- minimum: z106.number().optional(),
47177
- maximum: z106.number().optional()
47318
+ var PropertySchemaSchema = z107.object({
47319
+ type: z107.string(),
47320
+ description: z107.string().optional(),
47321
+ enum: z107.array(z107.unknown()).optional(),
47322
+ pattern: z107.string().optional(),
47323
+ minimum: z107.number().optional(),
47324
+ maximum: z107.number().optional()
47178
47325
  });
47179
- var ToolInputSchemaSchema = z106.object({
47180
- type: z106.string(),
47181
- properties: z106.record(z106.string(), PropertySchemaSchema).optional(),
47182
- required: z106.array(z106.string()).optional(),
47183
- additionalProperties: z106.boolean().optional()
47326
+ var ToolInputSchemaSchema = z107.object({
47327
+ type: z107.string(),
47328
+ properties: z107.record(z107.string(), PropertySchemaSchema).optional(),
47329
+ required: z107.array(z107.string()).optional(),
47330
+ additionalProperties: z107.boolean().optional()
47184
47331
  });
47185
- var ToolDefinitionSchema = z106.object({
47186
- name: z106.string().min(1),
47187
- description: z106.string(),
47332
+ var ToolDefinitionSchema = z107.object({
47333
+ name: z107.string().min(1),
47334
+ description: z107.string(),
47188
47335
  inputSchema: ToolInputSchemaSchema
47189
47336
  });
47190
- var AnalysisConfigurationSchema = z106.object({
47191
- includeLowSeverity: z106.boolean().default(true),
47192
- generateAllConstraints: z106.boolean().default(true),
47193
- checkInteractions: z106.boolean().default(true),
47194
- maxHazardsPerTool: z106.number().int().min(1).max(100).default(50),
47195
- categories: z106.array(HazardCategorySchema).default([])
47337
+ var AnalysisConfigurationSchema = z107.object({
47338
+ includeLowSeverity: z107.boolean().default(true),
47339
+ generateAllConstraints: z107.boolean().default(true),
47340
+ checkInteractions: z107.boolean().default(true),
47341
+ maxHazardsPerTool: z107.number().int().min(1).max(100).default(50),
47342
+ categories: z107.array(HazardCategorySchema).default([])
47196
47343
  });
47197
- var ConstraintViolationSchema = z106.object({
47198
- constraintId: z106.string().min(1),
47199
- constraintDescription: z106.string(),
47344
+ var ConstraintViolationSchema = z107.object({
47345
+ constraintId: z107.string().min(1),
47346
+ constraintDescription: z107.string(),
47200
47347
  severity: HazardSeveritySchema,
47201
- details: z106.string(),
47202
- remediation: z106.string()
47348
+ details: z107.string(),
47349
+ remediation: z107.string()
47203
47350
  });
47204
- var ValidationWarningSchema = z106.object({
47205
- code: z106.string().min(1),
47206
- message: z106.string(),
47207
- affected: z106.string()
47351
+ var ValidationWarningSchema = z107.object({
47352
+ code: z107.string().min(1),
47353
+ message: z107.string(),
47354
+ affected: z107.string()
47208
47355
  });
47209
- var ValidationResultSchema = z106.object({
47210
- valid: z106.boolean(),
47211
- toolName: z106.string().min(1),
47212
- violations: z106.array(ConstraintViolationSchema),
47213
- passed: z106.array(z106.string()),
47214
- warnings: z106.array(ValidationWarningSchema),
47215
- validatedAt: z106.date()
47356
+ var ValidationResultSchema = z107.object({
47357
+ valid: z107.boolean(),
47358
+ toolName: z107.string().min(1),
47359
+ violations: z107.array(ConstraintViolationSchema),
47360
+ passed: z107.array(z107.string()),
47361
+ warnings: z107.array(ValidationWarningSchema),
47362
+ validatedAt: z107.date()
47216
47363
  });
47217
47364
 
47218
47365
  // src/mcp/safety/stpa-types.ts
@@ -48297,43 +48444,43 @@ var GeminiResponseParser = class {
48297
48444
  };
48298
48445
 
48299
48446
  // src/cli-adapters/router-types.ts
48300
- import { z as z107 } from "zod";
48301
- var RouterConfigSchema = z107.object({
48302
- minCapacityThreshold: z107.number().min(0).max(1).default(0.1),
48303
- preferCostEfficient: z107.boolean().default(false),
48304
- maxDecisionTimeMs: z107.number().min(1).max(1e3).default(100)
48447
+ import { z as z108 } from "zod";
48448
+ var RouterConfigSchema = z108.object({
48449
+ minCapacityThreshold: z108.number().min(0).max(1).default(0.1),
48450
+ preferCostEfficient: z108.boolean().default(false),
48451
+ maxDecisionTimeMs: z108.number().min(1).max(1e3).default(100)
48305
48452
  });
48306
48453
 
48307
48454
  // src/cli-adapters/agreement-cascade-types.ts
48308
- import { z as z108 } from "zod";
48309
- var AgreementCascadeConfigSchema = z108.object({
48310
- agreementThreshold: z108.number().min(0.5).max(1).default(0.7),
48311
- maxStages: z108.number().int().min(1).max(5).default(3),
48312
- modelTimeoutMs: z108.number().int().min(1e3).max(3e5).default(6e4)
48455
+ import { z as z109 } from "zod";
48456
+ var AgreementCascadeConfigSchema = z109.object({
48457
+ agreementThreshold: z109.number().min(0.5).max(1).default(0.7),
48458
+ maxStages: z109.number().int().min(1).max(5).default(3),
48459
+ modelTimeoutMs: z109.number().int().min(1e3).max(3e5).default(6e4)
48313
48460
  });
48314
48461
 
48315
48462
  // src/cli-adapters/agreement-cascade-router.ts
48316
48463
  var logger46 = createLogger({ component: "agreement-cascade-router" });
48317
48464
 
48318
48465
  // src/cli-adapters/task-classifier.ts
48319
- import { z as z109 } from "zod";
48320
- var ClassificationPatternsSchema = z109.object({
48321
- code: z109.array(z109.string()).readonly(),
48322
- research: z109.array(z109.string()).readonly(),
48323
- documentation: z109.array(z109.string()).readonly(),
48324
- analysis: z109.array(z109.string()).readonly()
48466
+ import { z as z110 } from "zod";
48467
+ var ClassificationPatternsSchema = z110.object({
48468
+ code: z110.array(z110.string()).readonly(),
48469
+ research: z110.array(z110.string()).readonly(),
48470
+ documentation: z110.array(z110.string()).readonly(),
48471
+ analysis: z110.array(z110.string()).readonly()
48325
48472
  });
48326
48473
 
48327
48474
  // src/cli-adapters/response-cache-types.ts
48328
- import { z as z110 } from "zod";
48329
- var ResponseCacheConfigSchema = z110.object({
48330
- defaultTTL: z110.number().min(1e3).max(36e5).default(3e5),
48475
+ import { z as z111 } from "zod";
48476
+ var ResponseCacheConfigSchema = z111.object({
48477
+ defaultTTL: z111.number().min(1e3).max(36e5).default(3e5),
48331
48478
  // 5 minutes
48332
- maxEntries: z110.number().min(10).max(1e5).default(1e3),
48333
- maxMemoryMB: z110.number().min(1).max(1e3).default(50),
48334
- cleanupInterval: z110.number().min(1e3).max(6e5).default(6e4),
48479
+ maxEntries: z111.number().min(10).max(1e5).default(1e3),
48480
+ maxMemoryMB: z111.number().min(1).max(1e3).default(50),
48481
+ cleanupInterval: z111.number().min(1e3).max(6e5).default(6e4),
48335
48482
  // 1 minute
48336
- enableLogging: z110.boolean().default(false)
48483
+ enableLogging: z111.boolean().default(false)
48337
48484
  });
48338
48485
 
48339
48486
  // src/cli-adapters/response-cache-utils.ts
@@ -48341,12 +48488,12 @@ import { createHash as createHash4 } from "crypto";
48341
48488
  var logger47 = createLogger({ component: "ResponseCacheUtils" });
48342
48489
 
48343
48490
  // src/cli-adapters/unified-routing-types.ts
48344
- import { z as z111 } from "zod";
48345
- var UnifiedRoutingDecisionSchema = z111.object({
48346
- selectedCli: z111.string(),
48347
- confidence: z111.number().min(0).max(1),
48348
- reason: z111.string(),
48349
- strategy: z111.enum([
48491
+ import { z as z112 } from "zod";
48492
+ var UnifiedRoutingDecisionSchema = z112.object({
48493
+ selectedCli: z112.string(),
48494
+ confidence: z112.number().min(0).max(1),
48495
+ reason: z112.string(),
48496
+ strategy: z112.enum([
48350
48497
  "composite",
48351
48498
  "quality",
48352
48499
  "budget",
@@ -48358,57 +48505,57 @@ var UnifiedRoutingDecisionSchema = z111.object({
48358
48505
  "linucb",
48359
48506
  "direct"
48360
48507
  ]),
48361
- decisionTimeMs: z111.number().nonnegative(),
48362
- alternatives: z111.array(z111.string()).readonly(),
48363
- stagesExecuted: z111.array(z111.string()).readonly(),
48364
- withinBudget: z111.boolean().optional(),
48365
- estimatedComplexity: z111.enum(["simple", "moderate", "complex", "expert"]).optional(),
48366
- estimatedTokens: z111.number().int().positive().optional(),
48367
- topsisScore: z111.number().optional(),
48368
- ucbScore: z111.number().optional(),
48369
- resolvedAtStage: z111.number().int().nonnegative().optional(),
48370
- consensusReached: z111.boolean().optional(),
48371
- agreementScore: z111.number().min(0).max(1).optional(),
48372
- metadata: z111.record(z111.string(), z111.unknown()).optional()
48508
+ decisionTimeMs: z112.number().nonnegative(),
48509
+ alternatives: z112.array(z112.string()).readonly(),
48510
+ stagesExecuted: z112.array(z112.string()).readonly(),
48511
+ withinBudget: z112.boolean().optional(),
48512
+ estimatedComplexity: z112.enum(["simple", "moderate", "complex", "expert"]).optional(),
48513
+ estimatedTokens: z112.number().int().positive().optional(),
48514
+ topsisScore: z112.number().optional(),
48515
+ ucbScore: z112.number().optional(),
48516
+ resolvedAtStage: z112.number().int().nonnegative().optional(),
48517
+ consensusReached: z112.boolean().optional(),
48518
+ agreementScore: z112.number().min(0).max(1).optional(),
48519
+ metadata: z112.record(z112.string(), z112.unknown()).optional()
48373
48520
  });
48374
48521
 
48375
48522
  // src/learning/outcome-feedback-types.ts
48376
- import { z as z112 } from "zod";
48377
- var QualitySignalsSchema = z112.object({
48378
- testsPass: z112.boolean().optional(),
48379
- lintErrors: z112.number().int().min(0).optional(),
48380
- userApproved: z112.boolean().optional(),
48381
- retryCount: z112.number().int().min(0).default(0),
48382
- completionRatio: z112.number().min(0).max(1).default(1),
48383
- validStructure: z112.boolean().optional(),
48384
- coherenceScore: z112.number().min(0).max(1).optional()
48523
+ import { z as z113 } from "zod";
48524
+ var QualitySignalsSchema = z113.object({
48525
+ testsPass: z113.boolean().optional(),
48526
+ lintErrors: z113.number().int().min(0).optional(),
48527
+ userApproved: z113.boolean().optional(),
48528
+ retryCount: z113.number().int().min(0).default(0),
48529
+ completionRatio: z113.number().min(0).max(1).default(1),
48530
+ validStructure: z113.boolean().optional(),
48531
+ coherenceScore: z113.number().min(0).max(1).optional()
48385
48532
  });
48386
- var RoutingDecisionSchema = z112.object({
48387
- id: z112.uuid(),
48388
- timestamp: z112.iso.datetime(),
48389
- query: z112.string(),
48390
- routerType: z112.enum(["linucb", "preference", "quality", "cascade", "topsis"]),
48391
- selectedModel: z112.string(),
48392
- selectedTier: z112.enum(["strong", "weak"]).optional(),
48393
- armIndex: z112.number().int().min(0).optional(),
48394
- banditContext: z112.record(z112.string(), z112.unknown()).optional(),
48395
- queryFeatures: z112.record(z112.string(), z112.unknown()).optional(),
48396
- ucbScore: z112.number().optional(),
48397
- confidence: z112.number().min(0).max(1).optional(),
48398
- traceId: z112.string(),
48399
- domain: z112.string().optional()
48533
+ var RoutingDecisionSchema = z113.object({
48534
+ id: z113.uuid(),
48535
+ timestamp: z113.iso.datetime(),
48536
+ query: z113.string(),
48537
+ routerType: z113.enum(["linucb", "preference", "quality", "cascade", "topsis"]),
48538
+ selectedModel: z113.string(),
48539
+ selectedTier: z113.enum(["strong", "weak"]).optional(),
48540
+ armIndex: z113.number().int().min(0).optional(),
48541
+ banditContext: z113.record(z113.string(), z113.unknown()).optional(),
48542
+ queryFeatures: z113.record(z113.string(), z113.unknown()).optional(),
48543
+ ucbScore: z113.number().optional(),
48544
+ confidence: z113.number().min(0).max(1).optional(),
48545
+ traceId: z113.string(),
48546
+ domain: z113.string().optional()
48400
48547
  });
48401
- var TaskOutcomeSchema = z112.object({
48402
- routingDecisionId: z112.uuid(),
48403
- timestamp: z112.iso.datetime(),
48404
- outcomeClass: z112.enum(["success", "partial", "failure", "timeout", "error"]),
48405
- success: z112.boolean(),
48406
- qualityScore: z112.number().min(0).max(1),
48407
- durationMs: z112.number().min(0),
48408
- tokenUsage: z112.number().int().min(0),
48409
- errorMessage: z112.string().optional(),
48548
+ var TaskOutcomeSchema = z113.object({
48549
+ routingDecisionId: z113.uuid(),
48550
+ timestamp: z113.iso.datetime(),
48551
+ outcomeClass: z113.enum(["success", "partial", "failure", "timeout", "error"]),
48552
+ success: z113.boolean(),
48553
+ qualityScore: z113.number().min(0).max(1),
48554
+ durationMs: z113.number().min(0),
48555
+ tokenUsage: z113.number().int().min(0),
48556
+ errorMessage: z113.string().optional(),
48410
48557
  qualitySignals: QualitySignalsSchema,
48411
- traceId: z112.string()
48558
+ traceId: z113.string()
48412
48559
  });
48413
48560
  var DEFAULT_FEEDBACK_COLLECTOR_CONFIG = {
48414
48561
  maxPendingDecisions: 1e3,
@@ -48423,17 +48570,17 @@ var DEFAULT_FEEDBACK_COLLECTOR_CONFIG = {
48423
48570
  targetTokenUsage: 2e3,
48424
48571
  maxHistorySize: 1e4
48425
48572
  };
48426
- var FeedbackCollectorConfigSchema = z112.object({
48427
- maxPendingDecisions: z112.number().int().positive().default(1e3),
48428
- pendingTimeoutMs: z112.number().positive().default(3e5),
48429
- enableAutoReward: z112.boolean().default(true),
48430
- qualityWeight: z112.number().min(0).max(1).default(0.5),
48431
- speedWeight: z112.number().min(0).max(1).default(0.2),
48432
- efficiencyWeight: z112.number().min(0).max(1).default(0.2),
48433
- retryPenalty: z112.number().min(0).max(1).default(0.1),
48434
- targetDurationMs: z112.number().positive().default(5e3),
48435
- targetTokenUsage: z112.number().positive().default(2e3),
48436
- maxHistorySize: z112.number().int().positive().default(1e4)
48573
+ var FeedbackCollectorConfigSchema = z113.object({
48574
+ maxPendingDecisions: z113.number().int().positive().default(1e3),
48575
+ pendingTimeoutMs: z113.number().positive().default(3e5),
48576
+ enableAutoReward: z113.boolean().default(true),
48577
+ qualityWeight: z113.number().min(0).max(1).default(0.5),
48578
+ speedWeight: z113.number().min(0).max(1).default(0.2),
48579
+ efficiencyWeight: z113.number().min(0).max(1).default(0.2),
48580
+ retryPenalty: z113.number().min(0).max(1).default(0.1),
48581
+ targetDurationMs: z113.number().positive().default(5e3),
48582
+ targetTokenUsage: z113.number().positive().default(2e3),
48583
+ maxHistorySize: z113.number().int().positive().default(1e4)
48437
48584
  });
48438
48585
 
48439
48586
  // src/learning/outcome-feedback-helpers.ts
@@ -50025,7 +50172,7 @@ var GitHubTaskTracker = class {
50025
50172
  cachedProvider = null;
50026
50173
  async getProvider() {
50027
50174
  if (this.cachedProvider !== null) return this.cachedProvider;
50028
- const { createScmProvider } = await import("./factory-2A2CZPQR.js");
50175
+ const { createScmProvider } = await import("./factory-OHAMFHSF.js");
50029
50176
  const result = await createScmProvider({ repo: this.config.repo ?? "" });
50030
50177
  if (!result.ok) throw new Error(`SCM provider error: ${result.error.message}`);
50031
50178
  this.cachedProvider = result.value;
@@ -50667,6 +50814,7 @@ export {
50667
50814
  registerVerifyAuditChainTool,
50668
50815
  checkForResearchTriggers,
50669
50816
  registerSuggestResearchTasksTool,
50817
+ registerListAvailableModelsTool,
50670
50818
  PIPELINE_STATE_KEYS,
50671
50819
  compilePipelineGraph,
50672
50820
  runGraphPipeline,
@@ -50735,4 +50883,4 @@ export {
50735
50883
  detectBackend,
50736
50884
  createTaskTracker
50737
50885
  };
50738
- //# sourceMappingURL=chunk-WVZT4JGL.js.map
50886
+ //# sourceMappingURL=chunk-3TOHOAB2.js.map