nexus-agents 2.159.0 → 2.160.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 (122) hide show
  1. package/dist/{child-mcp-config-72S4OMRK.js → child-mcp-config-XEXFG3LA.js} +2 -2
  2. package/dist/{chunk-JEUWM2VZ.js → chunk-3QIXGEY7.js} +2 -2
  3. package/dist/{chunk-VOTYZUEG.js → chunk-4AXOISAP.js} +3 -3
  4. package/dist/{chunk-I3ROKMFF.js → chunk-5NVU25BA.js} +4 -4
  5. package/dist/{chunk-VCX3QMZE.js → chunk-7XISTLQP.js} +8 -8
  6. package/dist/{chunk-7WKSZZAX.js → chunk-AMY4S4VD.js} +2 -2
  7. package/dist/{chunk-24PRWXLQ.js → chunk-B23GFISN.js} +3 -3
  8. package/dist/{chunk-FENIEDNW.js → chunk-E7LG7L4O.js} +102 -4
  9. package/dist/chunk-E7LG7L4O.js.map +1 -0
  10. package/dist/{chunk-P3FNNFAW.js → chunk-ED6B55WK.js} +3 -3
  11. package/dist/{chunk-Y7637JDT.js → chunk-FYQSTNG6.js} +5 -5
  12. package/dist/{chunk-NTVJNSJC.js → chunk-HBLVOFLL.js} +2 -2
  13. package/dist/{chunk-VQ3ZVDSQ.js → chunk-HT3B6ZWV.js} +2 -2
  14. package/dist/{chunk-SLQJ746K.js → chunk-I2DK3KSH.js} +2 -2
  15. package/dist/{chunk-MWTAZEHK.js → chunk-I6NTUVGW.js} +2 -2
  16. package/dist/{chunk-I4SDEK6H.js → chunk-ICYEG7T4.js} +7 -7
  17. package/dist/{chunk-ZHGCHS2D.js → chunk-IG2SIC2E.js} +2 -2
  18. package/dist/{chunk-TMBVOQPL.js → chunk-JYV5MZC6.js} +4 -4
  19. package/dist/{chunk-GY4XQU2V.js → chunk-MXNIOTDY.js} +3 -3
  20. package/dist/{chunk-YNKEHMKX.js → chunk-O27ZG7BL.js} +3 -3
  21. package/dist/{chunk-ZQMTD74M.js → chunk-OQUELE4L.js} +54 -40
  22. package/dist/{chunk-ZQMTD74M.js.map → chunk-OQUELE4L.js.map} +1 -1
  23. package/dist/{chunk-AS6TNXKV.js → chunk-Q6EGZKLE.js} +2 -2
  24. package/dist/{chunk-XPPDWKZI.js → chunk-QD653D5O.js} +7 -7
  25. package/dist/{chunk-RZDIYKVH.js → chunk-QVIQAIOK.js} +2 -2
  26. package/dist/{chunk-3YGTLWNA.js → chunk-RNCBSF6I.js} +2 -2
  27. package/dist/{chunk-BK2IRU3L.js → chunk-RU336IEH.js} +2 -2
  28. package/dist/{chunk-6IXIKOLR.js → chunk-SHFCJJTY.js} +2 -2
  29. package/dist/{chunk-TB7GQCIH.js → chunk-SN4Q7TZT.js} +2 -2
  30. package/dist/{chunk-IYSD4VFM.js → chunk-SNKSSSAR.js} +4 -4
  31. package/dist/{chunk-DOTCPOLE.js → chunk-VKUP2PG5.js} +7 -7
  32. package/dist/{chunk-SHKRC6Z7.js → chunk-VWX75FKD.js} +5 -5
  33. package/dist/{chunk-TOJFRIVM.js → chunk-WP6UBBNJ.js} +4 -4
  34. package/dist/{chunk-VCFKTNCM.js → chunk-WRISLYLK.js} +2 -2
  35. package/dist/{chunk-P7SRGOLU.js → chunk-XLEZBTQG.js} +2 -2
  36. package/dist/{chunk-WTCREQRS.js → chunk-ZBEJITR6.js} +5 -5
  37. package/dist/{chunk-CY3QSLDQ.js → chunk-ZO54JW4V.js} +3 -3
  38. package/dist/{cli-circuit-breaker-BWZXZBNW.js → cli-circuit-breaker-SAHRY3BI.js} +4 -4
  39. package/dist/cli.js +41 -41
  40. package/dist/{composite-router-NPSNBLX7.js → composite-router-MFJNLR3O.js} +2 -2
  41. package/dist/{consensus-vote-ZX6NLTI4.js → consensus-vote-Z55357CP.js} +15 -15
  42. package/dist/{context-retriever-3QKHEA5U.js → context-retriever-Z474PNZ4.js} +8 -8
  43. package/dist/{doctor-deep-Y2PQCE6G.js → doctor-deep-IESAJDVW.js} +3 -3
  44. package/dist/{expert-bridge-NXG4Z7U7.js → expert-bridge-JW4DJPH3.js} +4 -4
  45. package/dist/{factory-JJ4N6YPR.js → factory-6JIXPGRH.js} +8 -8
  46. package/dist/{factory-YK2QA3TU.js → factory-Z7GGTUK2.js} +5 -5
  47. package/dist/{improvement-review-6LSV4QFA.js → improvement-review-5DRIOL5K.js} +5 -5
  48. package/dist/index.d.ts +72 -0
  49. package/dist/index.js +30 -30
  50. package/dist/index.js.map +1 -1
  51. package/dist/{init-opencode-AO2PEKXB.js → init-opencode-T2F5WSLT.js} +6 -6
  52. package/dist/{issue-triage-ZRRXCDAM.js → issue-triage-RC5VVUAV.js} +6 -6
  53. package/dist/{pr-reviewer-helpers-NEJJKQ7D.js → pr-reviewer-helpers-G35TGA7R.js} +4 -4
  54. package/dist/{registry-command-DKNGS752.js → registry-command-47UO65SV.js} +2 -2
  55. package/dist/{repo-security-plan-DEYYRMTB.js → repo-security-plan-CGXT5CIP.js} +3 -3
  56. package/dist/{research-helpers-synthesize-54UEJ24R.js → research-helpers-synthesize-37WHCE5I.js} +4 -4
  57. package/dist/{routing-memory-QFEXYF6G.js → routing-memory-YWPM45FH.js} +2 -2
  58. package/dist/{session-memory-DYU7XMQO.js → session-memory-ENUULCNK.js} +3 -3
  59. package/dist/{setup-command-PSYJ4M7Q.js → setup-command-T6I5TRFR.js} +11 -11
  60. package/dist/{setup-config-CBV4OUOE.js → setup-config-AMGGWQHX.js} +3 -3
  61. package/dist/{setup-custom-api-IJWYWAHX.js → setup-custom-api-UNAPYLEX.js} +3 -3
  62. package/dist/{tool-memory-2DI34M5Z.js → tool-memory-QH3DN2SU.js} +5 -5
  63. package/dist/{unified-registry-VQPPIL6M.js → unified-registry-YXQGTU3P.js} +9 -9
  64. package/dist/{weather-report-RETBQ4VD.js → weather-report-BUKQ7YPV.js} +6 -2
  65. package/package.json +1 -1
  66. package/dist/chunk-FENIEDNW.js.map +0 -1
  67. /package/dist/{child-mcp-config-72S4OMRK.js.map → child-mcp-config-XEXFG3LA.js.map} +0 -0
  68. /package/dist/{chunk-JEUWM2VZ.js.map → chunk-3QIXGEY7.js.map} +0 -0
  69. /package/dist/{chunk-VOTYZUEG.js.map → chunk-4AXOISAP.js.map} +0 -0
  70. /package/dist/{chunk-I3ROKMFF.js.map → chunk-5NVU25BA.js.map} +0 -0
  71. /package/dist/{chunk-VCX3QMZE.js.map → chunk-7XISTLQP.js.map} +0 -0
  72. /package/dist/{chunk-7WKSZZAX.js.map → chunk-AMY4S4VD.js.map} +0 -0
  73. /package/dist/{chunk-24PRWXLQ.js.map → chunk-B23GFISN.js.map} +0 -0
  74. /package/dist/{chunk-P3FNNFAW.js.map → chunk-ED6B55WK.js.map} +0 -0
  75. /package/dist/{chunk-Y7637JDT.js.map → chunk-FYQSTNG6.js.map} +0 -0
  76. /package/dist/{chunk-NTVJNSJC.js.map → chunk-HBLVOFLL.js.map} +0 -0
  77. /package/dist/{chunk-VQ3ZVDSQ.js.map → chunk-HT3B6ZWV.js.map} +0 -0
  78. /package/dist/{chunk-SLQJ746K.js.map → chunk-I2DK3KSH.js.map} +0 -0
  79. /package/dist/{chunk-MWTAZEHK.js.map → chunk-I6NTUVGW.js.map} +0 -0
  80. /package/dist/{chunk-I4SDEK6H.js.map → chunk-ICYEG7T4.js.map} +0 -0
  81. /package/dist/{chunk-ZHGCHS2D.js.map → chunk-IG2SIC2E.js.map} +0 -0
  82. /package/dist/{chunk-TMBVOQPL.js.map → chunk-JYV5MZC6.js.map} +0 -0
  83. /package/dist/{chunk-GY4XQU2V.js.map → chunk-MXNIOTDY.js.map} +0 -0
  84. /package/dist/{chunk-YNKEHMKX.js.map → chunk-O27ZG7BL.js.map} +0 -0
  85. /package/dist/{chunk-AS6TNXKV.js.map → chunk-Q6EGZKLE.js.map} +0 -0
  86. /package/dist/{chunk-XPPDWKZI.js.map → chunk-QD653D5O.js.map} +0 -0
  87. /package/dist/{chunk-RZDIYKVH.js.map → chunk-QVIQAIOK.js.map} +0 -0
  88. /package/dist/{chunk-3YGTLWNA.js.map → chunk-RNCBSF6I.js.map} +0 -0
  89. /package/dist/{chunk-BK2IRU3L.js.map → chunk-RU336IEH.js.map} +0 -0
  90. /package/dist/{chunk-6IXIKOLR.js.map → chunk-SHFCJJTY.js.map} +0 -0
  91. /package/dist/{chunk-TB7GQCIH.js.map → chunk-SN4Q7TZT.js.map} +0 -0
  92. /package/dist/{chunk-IYSD4VFM.js.map → chunk-SNKSSSAR.js.map} +0 -0
  93. /package/dist/{chunk-DOTCPOLE.js.map → chunk-VKUP2PG5.js.map} +0 -0
  94. /package/dist/{chunk-SHKRC6Z7.js.map → chunk-VWX75FKD.js.map} +0 -0
  95. /package/dist/{chunk-TOJFRIVM.js.map → chunk-WP6UBBNJ.js.map} +0 -0
  96. /package/dist/{chunk-VCFKTNCM.js.map → chunk-WRISLYLK.js.map} +0 -0
  97. /package/dist/{chunk-P7SRGOLU.js.map → chunk-XLEZBTQG.js.map} +0 -0
  98. /package/dist/{chunk-WTCREQRS.js.map → chunk-ZBEJITR6.js.map} +0 -0
  99. /package/dist/{chunk-CY3QSLDQ.js.map → chunk-ZO54JW4V.js.map} +0 -0
  100. /package/dist/{cli-circuit-breaker-BWZXZBNW.js.map → cli-circuit-breaker-SAHRY3BI.js.map} +0 -0
  101. /package/dist/{composite-router-NPSNBLX7.js.map → composite-router-MFJNLR3O.js.map} +0 -0
  102. /package/dist/{consensus-vote-ZX6NLTI4.js.map → consensus-vote-Z55357CP.js.map} +0 -0
  103. /package/dist/{context-retriever-3QKHEA5U.js.map → context-retriever-Z474PNZ4.js.map} +0 -0
  104. /package/dist/{doctor-deep-Y2PQCE6G.js.map → doctor-deep-IESAJDVW.js.map} +0 -0
  105. /package/dist/{expert-bridge-NXG4Z7U7.js.map → expert-bridge-JW4DJPH3.js.map} +0 -0
  106. /package/dist/{factory-JJ4N6YPR.js.map → factory-6JIXPGRH.js.map} +0 -0
  107. /package/dist/{factory-YK2QA3TU.js.map → factory-Z7GGTUK2.js.map} +0 -0
  108. /package/dist/{improvement-review-6LSV4QFA.js.map → improvement-review-5DRIOL5K.js.map} +0 -0
  109. /package/dist/{init-opencode-AO2PEKXB.js.map → init-opencode-T2F5WSLT.js.map} +0 -0
  110. /package/dist/{issue-triage-ZRRXCDAM.js.map → issue-triage-RC5VVUAV.js.map} +0 -0
  111. /package/dist/{pr-reviewer-helpers-NEJJKQ7D.js.map → pr-reviewer-helpers-G35TGA7R.js.map} +0 -0
  112. /package/dist/{registry-command-DKNGS752.js.map → registry-command-47UO65SV.js.map} +0 -0
  113. /package/dist/{repo-security-plan-DEYYRMTB.js.map → repo-security-plan-CGXT5CIP.js.map} +0 -0
  114. /package/dist/{research-helpers-synthesize-54UEJ24R.js.map → research-helpers-synthesize-37WHCE5I.js.map} +0 -0
  115. /package/dist/{routing-memory-QFEXYF6G.js.map → routing-memory-YWPM45FH.js.map} +0 -0
  116. /package/dist/{session-memory-DYU7XMQO.js.map → session-memory-ENUULCNK.js.map} +0 -0
  117. /package/dist/{setup-command-PSYJ4M7Q.js.map → setup-command-T6I5TRFR.js.map} +0 -0
  118. /package/dist/{setup-config-CBV4OUOE.js.map → setup-config-AMGGWQHX.js.map} +0 -0
  119. /package/dist/{setup-custom-api-IJWYWAHX.js.map → setup-custom-api-UNAPYLEX.js.map} +0 -0
  120. /package/dist/{tool-memory-2DI34M5Z.js.map → tool-memory-QH3DN2SU.js.map} +0 -0
  121. /package/dist/{unified-registry-VQPPIL6M.js.map → unified-registry-YXQGTU3P.js.map} +0 -0
  122. /package/dist/{weather-report-RETBQ4VD.js.map → weather-report-BUKQ7YPV.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createLogger
3
- } from "./chunk-FENIEDNW.js";
3
+ } from "./chunk-E7LG7L4O.js";
4
4
  import "./chunk-NL7SZQPW.js";
5
5
  import "./chunk-DHVMSIT5.js";
6
6
  import "./chunk-ZPWHCABL.js";
@@ -60,4 +60,4 @@ export {
60
60
  generateMcpConfig,
61
61
  getDefaultAllowedTools
62
62
  };
63
- //# sourceMappingURL=child-mcp-config-72S4OMRK.js.map
63
+ //# sourceMappingURL=child-mcp-config-XEXFG3LA.js.map
@@ -5,7 +5,7 @@ import {
5
5
  getErrorMessage,
6
6
  getTimeProvider,
7
7
  ok
8
- } from "./chunk-FENIEDNW.js";
8
+ } from "./chunk-E7LG7L4O.js";
9
9
 
10
10
  // src/cli-adapters/circuit-breaker-types.ts
11
11
  var CircuitErrorCode = {
@@ -375,4 +375,4 @@ export {
375
375
  mapCliErrorToCategory,
376
376
  mapModelErrorToCategory
377
377
  };
378
- //# sourceMappingURL=chunk-JEUWM2VZ.js.map
378
+ //# sourceMappingURL=chunk-3QIXGEY7.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  emitClawGuardViolation
3
- } from "./chunk-RZDIYKVH.js";
3
+ } from "./chunk-QVIQAIOK.js";
4
4
  import {
5
5
  CACHE_TIMEOUTS,
6
6
  MCP_TIMEOUTS,
@@ -16,7 +16,7 @@ import {
16
16
  getTimeProvider,
17
17
  ok,
18
18
  resolveToolClassGuardMs
19
- } from "./chunk-FENIEDNW.js";
19
+ } from "./chunk-E7LG7L4O.js";
20
20
  import {
21
21
  getNexusDataDir
22
22
  } from "./chunk-DHVMSIT5.js";
@@ -2023,4 +2023,4 @@ export {
2023
2023
  VOTING_THRESHOLDS,
2024
2024
  ConsensusMetricsSchema
2025
2025
  };
2026
- //# sourceMappingURL=chunk-VOTYZUEG.js.map
2026
+ //# sourceMappingURL=chunk-4AXOISAP.js.map
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  GitHubProvider,
3
3
  ScmError
4
- } from "./chunk-VQ3ZVDSQ.js";
4
+ } from "./chunk-HT3B6ZWV.js";
5
5
  import {
6
6
  resolveToken
7
- } from "./chunk-AS6TNXKV.js";
7
+ } from "./chunk-Q6EGZKLE.js";
8
8
  import {
9
9
  err,
10
10
  ok
11
- } from "./chunk-FENIEDNW.js";
11
+ } from "./chunk-E7LG7L4O.js";
12
12
 
13
13
  // src/scm/factory.ts
14
14
  async function createScmProvider(config) {
@@ -41,4 +41,4 @@ export {
41
41
  createScmProvider,
42
42
  createGitHubProvider
43
43
  };
44
- //# sourceMappingURL=chunk-I3ROKMFF.js.map
44
+ //# sourceMappingURL=chunk-5NVU25BA.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  computeCostDetail
3
- } from "./chunk-TB7GQCIH.js";
3
+ } from "./chunk-SN4Q7TZT.js";
4
4
  import {
5
5
  DEFAULT_CONSENSUS_CONFIG,
6
6
  DEFAULT_INCREMENTAL_QUORUM_CONFIG,
@@ -18,20 +18,20 @@ import {
18
18
  toolSuccess,
19
19
  withProgressHeartbeat,
20
20
  wrapToolWithTimeout
21
- } from "./chunk-VOTYZUEG.js";
21
+ } from "./chunk-4AXOISAP.js";
22
22
  import {
23
23
  getToolMemory
24
- } from "./chunk-TOJFRIVM.js";
24
+ } from "./chunk-WP6UBBNJ.js";
25
25
  import {
26
26
  createEvent,
27
27
  getGlobalRegistry
28
- } from "./chunk-TMBVOQPL.js";
28
+ } from "./chunk-JYV5MZC6.js";
29
29
  import {
30
30
  authRemediation,
31
31
  delay,
32
32
  getAvailableClis,
33
33
  withTimeout
34
- } from "./chunk-XPPDWKZI.js";
34
+ } from "./chunk-QD653D5O.js";
35
35
  import {
36
36
  AgentError,
37
37
  CLI_NAMES,
@@ -59,7 +59,7 @@ import {
59
59
  registerPersistentOutcomeStoreFactory,
60
60
  resolveClassGuardMs,
61
61
  resolveVoteTimeout
62
- } from "./chunk-FENIEDNW.js";
62
+ } from "./chunk-E7LG7L4O.js";
63
63
  import {
64
64
  ensureLearningDir,
65
65
  getOutcomesFile
@@ -5866,7 +5866,7 @@ async function processVotesWithCascade(engineVotes, opts) {
5866
5866
  var CONTRARIAN_ESCALATION_THRESHOLD = 0.8;
5867
5867
  async function runContrarianCheck(proposal, log) {
5868
5868
  try {
5869
- const { executeExpert } = await import("./expert-bridge-NXG4Z7U7.js");
5869
+ const { executeExpert } = await import("./expert-bridge-JW4DJPH3.js");
5870
5870
  const prompt = [
5871
5871
  "You are a contrarian analyst. Your job is to find reasons this proposal should be REJECTED.",
5872
5872
  "Look for: YAGNI (not needed), MISALIGNED (wrong tech/architecture), SECURITY_RISK, SCOPE_CREEP.",
@@ -6382,4 +6382,4 @@ export {
6382
6382
  CONSENSUS_VOTE_OUTPUT_SCHEMA,
6383
6383
  registerConsensusVoteTool
6384
6384
  };
6385
- //# sourceMappingURL=chunk-VCX3QMZE.js.map
6385
+ //# sourceMappingURL=chunk-7XISTLQP.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getErrorMessage
3
- } from "./chunk-FENIEDNW.js";
3
+ } from "./chunk-E7LG7L4O.js";
4
4
 
5
5
  // src/cli/setup-config.ts
6
6
  import { copyFileSync, existsSync, mkdirSync, writeFileSync } from "fs";
@@ -77,4 +77,4 @@ function ensureBackup(outputPath) {
77
77
  export {
78
78
  runConfigInitSync
79
79
  };
80
- //# sourceMappingURL=chunk-7WKSZZAX.js.map
80
+ //# sourceMappingURL=chunk-AMY4S4VD.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  loadPapersRegistry
3
- } from "./chunk-3YGTLWNA.js";
3
+ } from "./chunk-RNCBSF6I.js";
4
4
  import {
5
5
  getErrorMessage
6
- } from "./chunk-FENIEDNW.js";
6
+ } from "./chunk-E7LG7L4O.js";
7
7
 
8
8
  // src/cli/research-helpers-synthesize.ts
9
9
  import { z } from "zod";
@@ -876,4 +876,4 @@ export {
876
876
  AttributedInsightSchema,
877
877
  synthesizeResearch
878
878
  };
879
- //# sourceMappingURL=chunk-24PRWXLQ.js.map
879
+ //# sourceMappingURL=chunk-B23GFISN.js.map
@@ -2534,7 +2534,7 @@ function setDefaultRegistry(registry) {
2534
2534
  }
2535
2535
  async function reloadDefaultRegistry() {
2536
2536
  globalRegistry = buildDefaultRegistry();
2537
- const { resetGlobalRegistry } = await import("./unified-registry-VQPPIL6M.js");
2537
+ const { resetGlobalRegistry } = await import("./unified-registry-YXQGTU3P.js");
2538
2538
  resetGlobalRegistry();
2539
2539
  return globalRegistry;
2540
2540
  }
@@ -6175,6 +6175,8 @@ var LinUCBBandit = class {
6175
6175
  config;
6176
6176
  arms;
6177
6177
  armNames;
6178
+ /** Warm-start replay ledger keyed `arm model` (#4194). Telemetry only. */
6179
+ warmStartModelLedger = /* @__PURE__ */ new Map();
6178
6180
  constructor(armNames, config) {
6179
6181
  this.armNames = armNames;
6180
6182
  this.config = LinUCBConfigSchema.parse({
@@ -6365,10 +6367,33 @@ var LinUCBBandit = class {
6365
6367
  if (armIndex < 0) continue;
6366
6368
  const reward = outcome.success ? SUCCESS_REWARD : FAILURE_REWARD;
6367
6369
  this.update(armIndex, neutralContext, reward);
6370
+ this.recordWarmStartModelStat(outcome.cli, outcome.model, outcome.success);
6368
6371
  replayed++;
6369
6372
  }
6370
6373
  return replayed;
6371
6374
  }
6375
+ /** Accumulate the per-arm × per-model warm-start ledger (#4194). */
6376
+ recordWarmStartModelStat(arm, model, success) {
6377
+ const key = `${arm} ${model}`;
6378
+ const entry = this.warmStartModelLedger.get(key) ?? {
6379
+ arm,
6380
+ model,
6381
+ replayedCount: 0,
6382
+ successCount: 0
6383
+ };
6384
+ entry.replayedCount++;
6385
+ if (success) entry.successCount++;
6386
+ this.warmStartModelLedger.set(key, entry);
6387
+ }
6388
+ /**
6389
+ * Per-arm × per-model grouping of the outcomes replayed through
6390
+ * {@link warmStart} (#4194). A telemetry surface for per-model outcome
6391
+ * evaluation — arm structure and selection behavior are unchanged.
6392
+ * Sorted by arm, then model, for stable output.
6393
+ */
6394
+ getWarmStartModelStats() {
6395
+ return [...this.warmStartModelLedger.values()].map((s) => ({ ...s })).sort((a, b) => a.arm.localeCompare(b.arm) || a.model.localeCompare(b.model));
6396
+ }
6372
6397
  /**
6373
6398
  * Reset all arm statistics.
6374
6399
  */
@@ -6380,6 +6405,7 @@ var LinUCBBandit = class {
6380
6405
  arm.pullCount = 0;
6381
6406
  arm.cumulativeReward = 0;
6382
6407
  }
6408
+ this.warmStartModelLedger.clear();
6383
6409
  }
6384
6410
  };
6385
6411
 
@@ -12060,7 +12086,10 @@ function buildOptionalSections(input, cfg) {
12060
12086
  expertPerformance,
12061
12087
  swarmHealth: buildSwarmHealth(expertPerformance),
12062
12088
  triageStats: buildTriageStats(input),
12063
- recentWindow: buildRecentWindow(cfg)
12089
+ recentWindow: buildRecentWindow(cfg),
12090
+ // Per-model telemetry lens (#4194) — additive optional section; the
12091
+ // routing-visible adaptiveBonuses above stay CLI×category.
12092
+ modelWeather: getModelWeatherSummary(input, cfg)
12064
12093
  });
12065
12094
  }
12066
12095
  function generateWeatherReport(input, config, deps) {
@@ -12159,6 +12188,73 @@ function queryWithLookback(store, cli, category, cfg) {
12159
12188
  }
12160
12189
  return store.query({ cli, category, excludeQualitySignals: exclude });
12161
12190
  }
12191
+ var MODEL_WEATHER_MIN_SAMPLES = 5;
12192
+ var NON_MODEL_PLACEHOLDER_IDS = /* @__PURE__ */ new Set(["unknown", "pipeline"]);
12193
+ function isRealModelId(model) {
12194
+ return !NON_MODEL_PLACEHOLDER_IDS.has(model) && !model.startsWith(WORKER_MODEL_PREFIX);
12195
+ }
12196
+ function buildModelLensFilter(options) {
12197
+ return {
12198
+ ...options?.cli !== void 0 && { cli: options.cli },
12199
+ ...options?.category !== void 0 && { category: options.category },
12200
+ excludeQualitySignals: ["e2e-eval"]
12201
+ };
12202
+ }
12203
+ function getModelWeatherSummary(options, config) {
12204
+ const cfg = { ...createDefaultWeatherConfig(), ...config };
12205
+ const store = getOutcomeStore();
12206
+ const filter = buildModelLensFilter(options);
12207
+ const entries = [];
12208
+ for (const model of collectObservedModelIds(store, filter)) {
12209
+ const entry = buildModelWeatherEntry(store, model, filter, cfg);
12210
+ if (entry !== void 0) entries.push(entry);
12211
+ }
12212
+ return entries.sort((a, b) => b.sampleCount - a.sampleCount || a.model.localeCompare(b.model));
12213
+ }
12214
+ function collectObservedModelIds(store, filter) {
12215
+ const ids = /* @__PURE__ */ new Set();
12216
+ for (const o of store.query(filter)) {
12217
+ if (isRealModelId(o.model)) ids.add(o.model);
12218
+ }
12219
+ return [...ids];
12220
+ }
12221
+ function queryModelWithLookback(store, model, filter, cfg) {
12222
+ if (cfg.outcomeLookbackMs > 0) {
12223
+ const since = new Date(Date.now() - cfg.outcomeLookbackMs).toISOString();
12224
+ const windowed = store.queryByModelWithFamilyFallback(model, {
12225
+ threshold: MODEL_WEATHER_MIN_SAMPLES,
12226
+ extraFilter: { ...filter, since }
12227
+ });
12228
+ if (windowed.outcomes.length >= MODEL_WEATHER_MIN_SAMPLES) return windowed;
12229
+ }
12230
+ return store.queryByModelWithFamilyFallback(model, {
12231
+ threshold: MODEL_WEATHER_MIN_SAMPLES,
12232
+ extraFilter: filter
12233
+ });
12234
+ }
12235
+ function restrictFallbackScope(model, result) {
12236
+ if (result.scope !== "family") return { outcomes: result.outcomes, scope: "literal" };
12237
+ if (result.vendor !== "unknown" && result.family !== "unknown") {
12238
+ return { outcomes: result.outcomes, scope: "family" };
12239
+ }
12240
+ return { outcomes: result.outcomes.filter((o) => o.model === model), scope: "literal" };
12241
+ }
12242
+ function buildModelWeatherEntry(store, model, filter, cfg) {
12243
+ const result = queryModelWithLookback(store, model, filter, cfg);
12244
+ const { outcomes, scope } = restrictFallbackScope(model, result);
12245
+ if (outcomes.length < MODEL_WEATHER_MIN_SAMPLES) return void 0;
12246
+ const successes = outcomes.filter((o) => o.success).length;
12247
+ const totalDuration = outcomes.reduce((s, o) => s + o.durationMs, 0);
12248
+ return {
12249
+ model,
12250
+ vendor: result.vendor ?? "unknown",
12251
+ family: result.family ?? "unknown",
12252
+ scope,
12253
+ sampleCount: outcomes.length,
12254
+ successRate: round3(successes / outcomes.length),
12255
+ avgDurationMs: Math.round(totalDuration / outcomes.length)
12256
+ };
12257
+ }
12162
12258
  function getAdaptiveBonus(cli, category, config) {
12163
12259
  const cfg = { ...createDefaultWeatherConfig(), ...config };
12164
12260
  const store = getOutcomeStore();
@@ -13818,7 +13914,7 @@ var CompositeRouter = class _CompositeRouter {
13818
13914
  */
13819
13915
  async consultUnifiedContext(task) {
13820
13916
  try {
13821
- const { getContextForTask, inferTaskCategory } = await import("./context-retriever-3QKHEA5U.js");
13917
+ const { getContextForTask, inferTaskCategory } = await import("./context-retriever-Z474PNZ4.js");
13822
13918
  const ctx = await getContextForTask({
13823
13919
  task: task.content,
13824
13920
  category: inferTaskCategory(task.content),
@@ -15311,6 +15407,8 @@ export {
15311
15407
  rankStrategiesByManifest,
15312
15408
  generateWeatherReport,
15313
15409
  queryWithLookback,
15410
+ MODEL_WEATHER_MIN_SAMPLES,
15411
+ getModelWeatherSummary,
15314
15412
  getAdaptiveBonus,
15315
15413
  shouldExplore,
15316
15414
  getFallbackChainForCategory,
@@ -15321,4 +15419,4 @@ export {
15321
15419
  AgentCapability,
15322
15420
  OrchestratorError
15323
15421
  };
15324
- //# sourceMappingURL=chunk-FENIEDNW.js.map
15422
+ //# sourceMappingURL=chunk-E7LG7L4O.js.map