nexus-agents 8.42.14 → 8.44.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 (127) hide show
  1. package/dist/{ast-rule-runner-BOHCGJFS.js → ast-rule-runner-EPU4KNXJ.js} +3 -3
  2. package/dist/{child-mcp-config-WGA27P5Z.js → child-mcp-config-MQYS7D6P.js} +2 -2
  3. package/dist/{chunk-QKGWQ4O4.js → chunk-2U2CTX4Q.js} +104 -68
  4. package/dist/{chunk-QKGWQ4O4.js.map → chunk-2U2CTX4Q.js.map} +1 -1
  5. package/dist/{chunk-FDZVCOIQ.js → chunk-3QP3NJ4E.js} +2 -2
  6. package/dist/{chunk-ZXUJ4IZ4.js → chunk-4H44CQIZ.js} +2 -2
  7. package/dist/{chunk-UC4HIW3U.js → chunk-5CO7TEYR.js} +2 -2
  8. package/dist/{chunk-YPY3SKVB.js → chunk-6HMACBA3.js} +2 -2
  9. package/dist/{chunk-WENN453S.js → chunk-AMCNB2TJ.js} +5 -5
  10. package/dist/{chunk-LEY33SKP.js → chunk-AP3KIHPG.js} +2 -2
  11. package/dist/{chunk-QNZ5KLKB.js → chunk-B5R7KEZR.js} +7 -7
  12. package/dist/{chunk-EPX75GNG.js → chunk-BTWPTJF3.js} +3 -3
  13. package/dist/{chunk-3LIAXVMB.js → chunk-GCLLRAST.js} +3 -3
  14. package/dist/{chunk-E4DVW7L3.js → chunk-H77DZWRG.js} +2 -2
  15. package/dist/{chunk-4XTCKYTR.js → chunk-IOV4B5R5.js} +2 -2
  16. package/dist/{chunk-QRQTZNBE.js → chunk-JSH5GCZK.js} +3 -3
  17. package/dist/{chunk-LMHR3TKM.js → chunk-K2A6LRLL.js} +7 -7
  18. package/dist/{chunk-XZ47WD7T.js → chunk-LHIOFRJX.js} +6 -6
  19. package/dist/{chunk-FGBKWWIY.js → chunk-LVOXPW3M.js} +2 -2
  20. package/dist/{chunk-P6OFYKRT.js → chunk-LZL23U7Z.js} +2 -2
  21. package/dist/{chunk-AZ6KLPID.js → chunk-M7TQR4UU.js} +4 -4
  22. package/dist/{chunk-DN63HNKL.js → chunk-MLG2PR6E.js} +2 -2
  23. package/dist/{chunk-PPGJJRGB.js → chunk-NJ2EUCSY.js} +2 -2
  24. package/dist/{chunk-PPGJJRGB.js.map → chunk-NJ2EUCSY.js.map} +1 -1
  25. package/dist/{chunk-TKUKPHPX.js → chunk-NJDB4LVF.js} +19 -9
  26. package/dist/chunk-NJDB4LVF.js.map +1 -0
  27. package/dist/{chunk-F5M4MABK.js → chunk-OEKALQ2G.js} +2 -2
  28. package/dist/{chunk-PAQLTAX4.js → chunk-OO73573G.js} +2 -2
  29. package/dist/{chunk-5ZKIRWNN.js → chunk-P6DGZEWY.js} +4 -4
  30. package/dist/{chunk-IOCYTKGI.js → chunk-QHBW7AS7.js} +4 -4
  31. package/dist/{chunk-CHQRA33X.js → chunk-RL6F6IUQ.js} +2 -2
  32. package/dist/{chunk-TSCB7FGE.js → chunk-S4QNCIZF.js} +5 -5
  33. package/dist/{chunk-PG35556E.js → chunk-U7JRUYB3.js} +2 -2
  34. package/dist/{chunk-J5N4VAJN.js → chunk-UDZBMHCX.js} +9 -9
  35. package/dist/{chunk-J5N4VAJN.js.map → chunk-UDZBMHCX.js.map} +1 -1
  36. package/dist/{chunk-G2XNQ3QR.js → chunk-VOEKVO4Z.js} +3 -3
  37. package/dist/{chunk-KTRMTNZX.js → chunk-WPBF2POG.js} +4 -4
  38. package/dist/{chunk-3HEVTPO4.js → chunk-X2MX53O3.js} +2 -2
  39. package/dist/{chunk-KDFMC55T.js → chunk-Z4SCHKLH.js} +2 -2
  40. package/dist/{chunk-CY753H4P.js → chunk-ZSMK7RFK.js} +2 -2
  41. package/dist/{cli-circuit-breaker-SSHQHWU5.js → cli-circuit-breaker-LAOVTGFP.js} +3 -3
  42. package/dist/cli.js +43 -43
  43. package/dist/{composite-router-HA2E7JZA.js → composite-router-CN2SV6PX.js} +2 -2
  44. package/dist/{consensus-vote-CCZHRV5O.js → consensus-vote-GFIIMQW4.js} +17 -17
  45. package/dist/{context-retriever-HEOEBL6B.js → context-retriever-3XRHW4EG.js} +8 -8
  46. package/dist/{doctor-deep-VQH5LSJM.js → doctor-deep-5CSAHVEP.js} +3 -3
  47. package/dist/{doctor-live-B3GFHHQZ.js → doctor-live-5NRILDTR.js} +9 -9
  48. package/dist/{expert-bridge-2DIYRMB2.js → expert-bridge-ZNNMHOQH.js} +4 -4
  49. package/dist/{factory-JHWFG6RN.js → factory-TE7DQKRW.js} +9 -9
  50. package/dist/{factory-C66XGNEW.js → factory-UYBTTLHZ.js} +5 -5
  51. package/dist/{improvement-review-CTDPJDC5.js → improvement-review-5RWJT2SO.js} +6 -6
  52. package/dist/index.d.ts +58 -2
  53. package/dist/index.js +31 -31
  54. package/dist/{init-opencode-NYRABAU4.js → init-opencode-WKKW7V7A.js} +6 -6
  55. package/dist/issue-triage-FRPETYSK.js +17 -0
  56. package/dist/{pr-reviewer-helpers-LHETFNEE.js → pr-reviewer-helpers-BR6YMKMR.js} +4 -4
  57. package/dist/{registry-command-J4I45ROW.js → registry-command-TWZXTXWB.js} +2 -2
  58. package/dist/{repo-security-plan-XIZB37ZY.js → repo-security-plan-3E3FSPD5.js} +3 -3
  59. package/dist/{research-helpers-synthesize-PWIDEIZ6.js → research-helpers-synthesize-NIDQS4XT.js} +4 -4
  60. package/dist/{routing-memory-DMJYEGGI.js → routing-memory-PGYUB4UJ.js} +2 -2
  61. package/dist/{session-memory-QH65QG4V.js → session-memory-D2IK4PC2.js} +3 -3
  62. package/dist/{setup-config-6BNUAUFO.js → setup-config-QELDNFFB.js} +3 -3
  63. package/dist/{setup-custom-api-GVTCQZQM.js → setup-custom-api-57TCCU7N.js} +4 -4
  64. package/dist/setup-data-dir-5WWOT3M7.js +29 -0
  65. package/dist/{tool-memory-HICOKETR.js → tool-memory-3B44V6CP.js} +5 -5
  66. package/dist/{unified-registry-LLDXH3WD.js → unified-registry-AIHYR7FG.js} +10 -10
  67. package/dist/{weather-report-NDFTFLCH.js → weather-report-2Q6RXC2D.js} +2 -2
  68. package/package.json +1 -1
  69. package/dist/chunk-TKUKPHPX.js.map +0 -1
  70. package/dist/issue-triage-JZ4MDAHR.js +0 -17
  71. package/dist/setup-data-dir-227ZSEO4.js +0 -29
  72. /package/dist/{ast-rule-runner-BOHCGJFS.js.map → ast-rule-runner-EPU4KNXJ.js.map} +0 -0
  73. /package/dist/{child-mcp-config-WGA27P5Z.js.map → child-mcp-config-MQYS7D6P.js.map} +0 -0
  74. /package/dist/{chunk-FDZVCOIQ.js.map → chunk-3QP3NJ4E.js.map} +0 -0
  75. /package/dist/{chunk-ZXUJ4IZ4.js.map → chunk-4H44CQIZ.js.map} +0 -0
  76. /package/dist/{chunk-UC4HIW3U.js.map → chunk-5CO7TEYR.js.map} +0 -0
  77. /package/dist/{chunk-YPY3SKVB.js.map → chunk-6HMACBA3.js.map} +0 -0
  78. /package/dist/{chunk-WENN453S.js.map → chunk-AMCNB2TJ.js.map} +0 -0
  79. /package/dist/{chunk-LEY33SKP.js.map → chunk-AP3KIHPG.js.map} +0 -0
  80. /package/dist/{chunk-QNZ5KLKB.js.map → chunk-B5R7KEZR.js.map} +0 -0
  81. /package/dist/{chunk-EPX75GNG.js.map → chunk-BTWPTJF3.js.map} +0 -0
  82. /package/dist/{chunk-3LIAXVMB.js.map → chunk-GCLLRAST.js.map} +0 -0
  83. /package/dist/{chunk-E4DVW7L3.js.map → chunk-H77DZWRG.js.map} +0 -0
  84. /package/dist/{chunk-4XTCKYTR.js.map → chunk-IOV4B5R5.js.map} +0 -0
  85. /package/dist/{chunk-QRQTZNBE.js.map → chunk-JSH5GCZK.js.map} +0 -0
  86. /package/dist/{chunk-LMHR3TKM.js.map → chunk-K2A6LRLL.js.map} +0 -0
  87. /package/dist/{chunk-XZ47WD7T.js.map → chunk-LHIOFRJX.js.map} +0 -0
  88. /package/dist/{chunk-FGBKWWIY.js.map → chunk-LVOXPW3M.js.map} +0 -0
  89. /package/dist/{chunk-P6OFYKRT.js.map → chunk-LZL23U7Z.js.map} +0 -0
  90. /package/dist/{chunk-AZ6KLPID.js.map → chunk-M7TQR4UU.js.map} +0 -0
  91. /package/dist/{chunk-DN63HNKL.js.map → chunk-MLG2PR6E.js.map} +0 -0
  92. /package/dist/{chunk-F5M4MABK.js.map → chunk-OEKALQ2G.js.map} +0 -0
  93. /package/dist/{chunk-PAQLTAX4.js.map → chunk-OO73573G.js.map} +0 -0
  94. /package/dist/{chunk-5ZKIRWNN.js.map → chunk-P6DGZEWY.js.map} +0 -0
  95. /package/dist/{chunk-IOCYTKGI.js.map → chunk-QHBW7AS7.js.map} +0 -0
  96. /package/dist/{chunk-CHQRA33X.js.map → chunk-RL6F6IUQ.js.map} +0 -0
  97. /package/dist/{chunk-TSCB7FGE.js.map → chunk-S4QNCIZF.js.map} +0 -0
  98. /package/dist/{chunk-PG35556E.js.map → chunk-U7JRUYB3.js.map} +0 -0
  99. /package/dist/{chunk-G2XNQ3QR.js.map → chunk-VOEKVO4Z.js.map} +0 -0
  100. /package/dist/{chunk-KTRMTNZX.js.map → chunk-WPBF2POG.js.map} +0 -0
  101. /package/dist/{chunk-3HEVTPO4.js.map → chunk-X2MX53O3.js.map} +0 -0
  102. /package/dist/{chunk-KDFMC55T.js.map → chunk-Z4SCHKLH.js.map} +0 -0
  103. /package/dist/{chunk-CY753H4P.js.map → chunk-ZSMK7RFK.js.map} +0 -0
  104. /package/dist/{cli-circuit-breaker-SSHQHWU5.js.map → cli-circuit-breaker-LAOVTGFP.js.map} +0 -0
  105. /package/dist/{composite-router-HA2E7JZA.js.map → composite-router-CN2SV6PX.js.map} +0 -0
  106. /package/dist/{consensus-vote-CCZHRV5O.js.map → consensus-vote-GFIIMQW4.js.map} +0 -0
  107. /package/dist/{context-retriever-HEOEBL6B.js.map → context-retriever-3XRHW4EG.js.map} +0 -0
  108. /package/dist/{doctor-deep-VQH5LSJM.js.map → doctor-deep-5CSAHVEP.js.map} +0 -0
  109. /package/dist/{doctor-live-B3GFHHQZ.js.map → doctor-live-5NRILDTR.js.map} +0 -0
  110. /package/dist/{expert-bridge-2DIYRMB2.js.map → expert-bridge-ZNNMHOQH.js.map} +0 -0
  111. /package/dist/{factory-C66XGNEW.js.map → factory-TE7DQKRW.js.map} +0 -0
  112. /package/dist/{factory-JHWFG6RN.js.map → factory-UYBTTLHZ.js.map} +0 -0
  113. /package/dist/{improvement-review-CTDPJDC5.js.map → improvement-review-5RWJT2SO.js.map} +0 -0
  114. /package/dist/{init-opencode-NYRABAU4.js.map → init-opencode-WKKW7V7A.js.map} +0 -0
  115. /package/dist/{issue-triage-JZ4MDAHR.js.map → issue-triage-FRPETYSK.js.map} +0 -0
  116. /package/dist/{pr-reviewer-helpers-LHETFNEE.js.map → pr-reviewer-helpers-BR6YMKMR.js.map} +0 -0
  117. /package/dist/{registry-command-J4I45ROW.js.map → registry-command-TWZXTXWB.js.map} +0 -0
  118. /package/dist/{repo-security-plan-XIZB37ZY.js.map → repo-security-plan-3E3FSPD5.js.map} +0 -0
  119. /package/dist/{research-helpers-synthesize-PWIDEIZ6.js.map → research-helpers-synthesize-NIDQS4XT.js.map} +0 -0
  120. /package/dist/{routing-memory-DMJYEGGI.js.map → routing-memory-PGYUB4UJ.js.map} +0 -0
  121. /package/dist/{session-memory-QH65QG4V.js.map → session-memory-D2IK4PC2.js.map} +0 -0
  122. /package/dist/{setup-config-6BNUAUFO.js.map → setup-config-QELDNFFB.js.map} +0 -0
  123. /package/dist/{setup-custom-api-GVTCQZQM.js.map → setup-custom-api-57TCCU7N.js.map} +0 -0
  124. /package/dist/{setup-data-dir-227ZSEO4.js.map → setup-data-dir-5WWOT3M7.js.map} +0 -0
  125. /package/dist/{tool-memory-HICOKETR.js.map → tool-memory-3B44V6CP.js.map} +0 -0
  126. /package/dist/{unified-registry-LLDXH3WD.js.map → unified-registry-AIHYR7FG.js.map} +0 -0
  127. /package/dist/{weather-report-NDFTFLCH.js.map → weather-report-2Q6RXC2D.js.map} +0 -0
@@ -9,8 +9,8 @@ import {
9
9
  getBuiltInAstRulesPath,
10
10
  loadRules,
11
11
  runAstQaRules
12
- } from "./chunk-KDFMC55T.js";
13
- import "./chunk-EPX75GNG.js";
12
+ } from "./chunk-Z4SCHKLH.js";
13
+ import "./chunk-BTWPTJF3.js";
14
14
  import "./chunk-3HELETAQ.js";
15
15
  import "./chunk-JVNJJ2VL.js";
16
16
  import "./chunk-ZPWHCABL.js";
@@ -26,4 +26,4 @@ export {
26
26
  loadRules,
27
27
  runAstQaRules
28
28
  };
29
- //# sourceMappingURL=ast-rule-runner-BOHCGJFS.js.map
29
+ //# sourceMappingURL=ast-rule-runner-EPU4KNXJ.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-T5GVEXSA.js";
4
4
  import {
5
5
  createLogger
6
- } from "./chunk-EPX75GNG.js";
6
+ } from "./chunk-BTWPTJF3.js";
7
7
  import "./chunk-3HELETAQ.js";
8
8
  import "./chunk-JVNJJ2VL.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-WGA27P5Z.js.map
65
+ //# sourceMappingURL=child-mcp-config-MQYS7D6P.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  generateSecurityPlan
3
- } from "./chunk-ZXUJ4IZ4.js";
3
+ } from "./chunk-4H44CQIZ.js";
4
4
  import {
5
5
  analyzeGitHubRepo
6
6
  } from "./chunk-DGWT7DXX.js";
@@ -21,10 +21,10 @@ import {
21
21
  import {
22
22
  DEFAULT_TASK_TTL_MS,
23
23
  clampTaskTtl
24
- } from "./chunk-LMHR3TKM.js";
24
+ } from "./chunk-K2A6LRLL.js";
25
25
  import {
26
26
  executeExpert
27
- } from "./chunk-QNZ5KLKB.js";
27
+ } from "./chunk-B5R7KEZR.js";
28
28
  import {
29
29
  JobStatusSchema,
30
30
  VOTER_ROLES,
@@ -55,7 +55,7 @@ import {
55
55
  toJobSummary,
56
56
  updateStage,
57
57
  writeJobCancelled
58
- } from "./chunk-J5N4VAJN.js";
58
+ } from "./chunk-UDZBMHCX.js";
59
59
  import {
60
60
  allOf,
61
61
  anyOf
@@ -63,19 +63,19 @@ import {
63
63
  import {
64
64
  normalizeTopicToCanonical,
65
65
  synthesizeResearch
66
- } from "./chunk-3LIAXVMB.js";
66
+ } from "./chunk-GCLLRAST.js";
67
67
  import {
68
68
  IssueTriage,
69
69
  createDurableAuditSink,
70
70
  createDurableAuditTrail
71
- } from "./chunk-XZ47WD7T.js";
71
+ } from "./chunk-LHIOFRJX.js";
72
72
  import {
73
73
  resolveEnvMode,
74
74
  sanitizeInput
75
- } from "./chunk-CY753H4P.js";
75
+ } from "./chunk-ZSMK7RFK.js";
76
76
  import {
77
77
  withPrerequisite
78
- } from "./chunk-G2XNQ3QR.js";
78
+ } from "./chunk-VOEKVO4Z.js";
79
79
  import {
80
80
  NOOP_NOTIFIER,
81
81
  RateLimiter,
@@ -100,18 +100,18 @@ import {
100
100
  withAuditTrail,
101
101
  withProgressHeartbeat,
102
102
  wrapToolWithTimeout
103
- } from "./chunk-IOCYTKGI.js";
103
+ } from "./chunk-QHBW7AS7.js";
104
104
  import {
105
105
  createAuditTrail,
106
106
  createGraphAuditBridge,
107
107
  emitPipelinePolicyEvent
108
- } from "./chunk-DN63HNKL.js";
108
+ } from "./chunk-MLG2PR6E.js";
109
109
  import {
110
110
  EventTopics,
111
111
  createEvent,
112
112
  getGlobalEventBus,
113
113
  getGlobalRegistry
114
- } from "./chunk-KTRMTNZX.js";
114
+ } from "./chunk-WPBF2POG.js";
115
115
  import {
116
116
  IDENTIFIER_RE,
117
117
  LANG_VALUES,
@@ -144,7 +144,7 @@ import {
144
144
  parseRegistry,
145
145
  sourceExistsInRegistry,
146
146
  summarizeContextForPrompt
147
- } from "./chunk-TSCB7FGE.js";
147
+ } from "./chunk-S4QNCIZF.js";
148
148
  import {
149
149
  REGISTRY_PATH,
150
150
  getProjectRoot,
@@ -152,25 +152,25 @@ import {
152
152
  loadTechniquesRegistry,
153
153
  resolveInsideRoot,
154
154
  resolveRegistryRoot
155
- } from "./chunk-CHQRA33X.js";
155
+ } from "./chunk-RL6F6IUQ.js";
156
156
  import {
157
157
  getTokenEnvVars,
158
158
  resolveToken
159
- } from "./chunk-FGBKWWIY.js";
159
+ } from "./chunk-LVOXPW3M.js";
160
160
  import {
161
161
  DEFAULT_RELEVANCE_CONFIG,
162
162
  MemoryImportance,
163
163
  MemoryType,
164
164
  calculateTextJaccardSimilarity,
165
165
  getToolMemory
166
- } from "./chunk-5ZKIRWNN.js";
166
+ } from "./chunk-P6DGZEWY.js";
167
167
  import {
168
168
  STOPWORDS,
169
169
  truncateWithInfo
170
170
  } from "./chunk-7LP6VJRP.js";
171
171
  import {
172
172
  createSessionMemory
173
- } from "./chunk-E4DVW7L3.js";
173
+ } from "./chunk-H77DZWRG.js";
174
174
  import {
175
175
  BUILT_IN_EXPERTS,
176
176
  BuiltInExpertTypeSchema,
@@ -188,25 +188,25 @@ import {
188
188
  getAvailableClis,
189
189
  sleep,
190
190
  withTimeout
191
- } from "./chunk-TKUKPHPX.js";
191
+ } from "./chunk-NJDB4LVF.js";
192
192
  import {
193
193
  BaseAdapter,
194
194
  createStream,
195
195
  requireApiKey,
196
196
  validateApiKeyPresence
197
- } from "./chunk-P6OFYKRT.js";
197
+ } from "./chunk-LZL23U7Z.js";
198
198
  import {
199
199
  DEFAULTS
200
- } from "./chunk-F5M4MABK.js";
200
+ } from "./chunk-OEKALQ2G.js";
201
201
  import {
202
202
  getAvailabilityCache,
203
203
  getCliForModelId,
204
204
  resolveFallback
205
- } from "./chunk-LEY33SKP.js";
205
+ } from "./chunk-AP3KIHPG.js";
206
206
  import {
207
207
  generateHyphenId,
208
208
  generateUUID
209
- } from "./chunk-UC4HIW3U.js";
209
+ } from "./chunk-5CO7TEYR.js";
210
210
  import {
211
211
  AGENT_ROUTER_TIMEOUTS,
212
212
  API_TIMEOUTS,
@@ -318,7 +318,7 @@ import {
318
318
  selectStrategyByManifest,
319
319
  toExpertTaskAnalysisResult,
320
320
  withStep
321
- } from "./chunk-EPX75GNG.js";
321
+ } from "./chunk-BTWPTJF3.js";
322
322
  import {
323
323
  ensureLearningDir,
324
324
  getMetaOutcomesFile,
@@ -2314,13 +2314,38 @@ function mergeConfig(config) {
2314
2314
  jitterFactor: config.jitterFactor ?? DEFAULT_RETRY_CONFIG.jitterFactor
2315
2315
  };
2316
2316
  }
2317
+ function alreadyAborted(signal) {
2318
+ if (signal?.aborted !== true) return void 0;
2319
+ return new RetryExhaustedError(0, signal.reason);
2320
+ }
2321
+ function notifyRetry(onRetry, info) {
2322
+ if (onRetry !== void 0) onRetry(info);
2323
+ }
2324
+ function sleepUnlessAborted(ms, signal) {
2325
+ if (signal === void 0) return sleep(ms).then(() => true);
2326
+ if (signal.aborted) return Promise.resolve(false);
2327
+ return new Promise((resolve19) => {
2328
+ const onAbort = () => {
2329
+ clearTimeout(timer);
2330
+ resolve19(false);
2331
+ };
2332
+ const timer = setTimeout(() => {
2333
+ signal.removeEventListener("abort", onAbort);
2334
+ resolve19(true);
2335
+ }, ms);
2336
+ signal.addEventListener("abort", onAbort, { once: true });
2337
+ });
2338
+ }
2317
2339
  async function withRetry(operation, options = {}) {
2318
2340
  const config = mergeConfig(options.config ?? {});
2319
2341
  const isRetryable = options.isRetryable ?? isRetryableError;
2320
2342
  const onRetry = options.onRetry;
2343
+ const signal = options.signal;
2321
2344
  const maxAttempts = config.maxRetries + 1;
2322
2345
  let lastError;
2323
2346
  let attemptsMade = 0;
2347
+ const preAborted = alreadyAborted(signal);
2348
+ if (preAborted !== void 0) return err(preAborted);
2324
2349
  for (let attempt = 0; attempt < maxAttempts; attempt++) {
2325
2350
  attemptsMade = attempt + 1;
2326
2351
  try {
@@ -2333,15 +2358,9 @@ async function withRetry(operation, options = {}) {
2333
2358
  break;
2334
2359
  }
2335
2360
  const delayMs = calculateDelay(attempt, config);
2336
- if (onRetry) {
2337
- onRetry({
2338
- attempt: attempt + 1,
2339
- maxAttempts,
2340
- delayMs,
2341
- error
2342
- });
2343
- }
2344
- await sleep(delayMs);
2361
+ notifyRetry(onRetry, { attempt: attempt + 1, maxAttempts, delayMs, error });
2362
+ const waited = await sleepUnlessAborted(delayMs, signal);
2363
+ if (!waited) break;
2345
2364
  }
2346
2365
  }
2347
2366
  return err(new RetryExhaustedError(attemptsMade, lastError));
@@ -29996,7 +30015,7 @@ function execIdFields(executionId) {
29996
30015
  async function populateUnifiedContextOnState(state, options) {
29997
30016
  const taskCandidate = state["task"];
29998
30017
  if (typeof taskCandidate !== "string" || taskCandidate === "") return;
29999
- const { getContextForTask: getContextForTask2, inferTaskCategory: inferTaskCategory2 } = await import("./context-retriever-HEOEBL6B.js");
30018
+ const { getContextForTask: getContextForTask2, inferTaskCategory: inferTaskCategory2 } = await import("./context-retriever-3XRHW4EG.js");
30000
30019
  const category = inferTaskCategory2(taskCandidate);
30001
30020
  const executionId = options?.executionId;
30002
30021
  const execFields = execIdFields(executionId);
@@ -45591,7 +45610,7 @@ async function tryIssueTriage(task) {
45591
45610
  try {
45592
45611
  const issueMatch = task.match(/github\.com\/([^/]+\/[^/]+)\/issues\/(\d+)/);
45593
45612
  if (issueMatch === null) return null;
45594
- const { createIssueTriage } = await import("./issue-triage-JZ4MDAHR.js");
45613
+ const { createIssueTriage } = await import("./issue-triage-FRPETYSK.js");
45595
45614
  const triage = createIssueTriage();
45596
45615
  const owner = issueMatch[1] ?? "";
45597
45616
  const num = issueMatch[2] ?? "";
@@ -45619,7 +45638,7 @@ var VALID_TEMPLATES = /* @__PURE__ */ new Set([
45619
45638
  ]);
45620
45639
  async function classifyWithLLM(task) {
45621
45640
  try {
45622
- const { executeExpert: executeExpert2 } = await import("./expert-bridge-2DIYRMB2.js");
45641
+ const { executeExpert: executeExpert2 } = await import("./expert-bridge-ZNNMHOQH.js");
45623
45642
  const prompt = [
45624
45643
  "Classify this task into exactly one pipeline template.",
45625
45644
  "Templates: dev (implementation/bug fix/refactor), research (investigate/evaluate/compare),",
@@ -45993,7 +46012,7 @@ function buildVotingInput(plan, config) {
45993
46012
  }
45994
46013
  async function executeSingleVote(plan, config, log) {
45995
46014
  try {
45996
- const { executeVoting } = await import("./consensus-vote-CCZHRV5O.js");
46015
+ const { executeVoting } = await import("./consensus-vote-GFIIMQW4.js");
45997
46016
  const input = buildVotingInput(plan, config);
45998
46017
  const result = await executeVoting(input, log);
45999
46018
  return parseVotingResult(result);
@@ -47555,7 +47574,7 @@ var memoryInitPromise = null;
47555
47574
  async function initPipelineMemory() {
47556
47575
  if (cachedMemory !== null) return cachedMemory;
47557
47576
  try {
47558
- const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-QH65QG4V.js");
47577
+ const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-D2IK4PC2.js");
47559
47578
  const { getLearningDir } = await import("./learning-persistence-TX2WE7Y7.js");
47560
47579
  const mem = createSessionMemory2(getLearningDir());
47561
47580
  mem.startSession(`pipeline-${String(getTimeProvider().now())}`);
@@ -47617,7 +47636,7 @@ function recordRoutingExperience(category, success, durationMs, tokensUsed = 0,
47617
47636
  callRecord(routingMemoryCache);
47618
47637
  return;
47619
47638
  }
47620
- routingMemoryInitPromise ??= import("./routing-memory-DMJYEGGI.js").then(({ createRoutingMemory }) => {
47639
+ routingMemoryInitPromise ??= import("./routing-memory-PGYUB4UJ.js").then(({ createRoutingMemory }) => {
47621
47640
  routingMemoryCache ??= createRoutingMemory();
47622
47641
  return routingMemoryCache;
47623
47642
  }).catch((error) => {
@@ -47651,7 +47670,7 @@ ${text}` : "";
47651
47670
  }
47652
47671
  async function getWeatherContext() {
47653
47672
  try {
47654
- const { generateWeatherReport: generateWeatherReport2 } = await import("./weather-report-NDFTFLCH.js");
47673
+ const { generateWeatherReport: generateWeatherReport2 } = await import("./weather-report-2Q6RXC2D.js");
47655
47674
  const report = generateWeatherReport2({ includeAdaptive: true });
47656
47675
  const mappings = "recommendedMappings" in report ? report.recommendedMappings : [];
47657
47676
  if (!Array.isArray(mappings) || mappings.length === 0) return "";
@@ -47669,7 +47688,7 @@ ${lines}
47669
47688
  }
47670
47689
  async function getMemoryContext(task) {
47671
47690
  try {
47672
- const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-QH65QG4V.js");
47691
+ const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-D2IK4PC2.js");
47673
47692
  const { getLearningDir } = await import("./learning-persistence-TX2WE7Y7.js");
47674
47693
  const memory = createSessionMemory2(getLearningDir(), { maxLearningsInContext: 10 });
47675
47694
  const learnings = memory.searchLearnings(task.slice(0, 200));
@@ -47788,7 +47807,7 @@ ${contextBlock}`;
47788
47807
  const strategy = config.votingStrategy ?? "higher_order";
47789
47808
  await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
47790
47809
  try {
47791
- const { executeVoting } = await import("./consensus-vote-CCZHRV5O.js");
47810
+ const { executeVoting } = await import("./consensus-vote-GFIIMQW4.js");
47792
47811
  const votingResult = await executeVoting(
47793
47812
  {
47794
47813
  proposal: buildVoteProposal(plan, research),
@@ -48219,7 +48238,7 @@ async function searchCodebaseForTask(task) {
48219
48238
  }
48220
48239
  async function queryResearchRegistry(task) {
48221
48240
  try {
48222
- const { synthesizeResearch: synthesizeResearch2 } = await import("./research-helpers-synthesize-PWIDEIZ6.js");
48241
+ const { synthesizeResearch: synthesizeResearch2 } = await import("./research-helpers-synthesize-NIDQS4XT.js");
48223
48242
  const topic = task.split(/[.!?\n]/).filter((s) => s.trim().length > 10)[0]?.trim();
48224
48243
  if (topic === void 0) return null;
48225
48244
  const result = await synthesizeResearch2(topic.slice(0, 50));
@@ -48290,7 +48309,7 @@ function createScanStageWrapper() {
48290
48309
  try {
48291
48310
  const slug = ctx.task.match(/([a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+)/)?.[1];
48292
48311
  if (slug !== void 0) {
48293
- const { generateSecurityPlan: generateSecurityPlan2 } = await import("./repo-security-plan-XIZB37ZY.js");
48312
+ const { generateSecurityPlan: generateSecurityPlan2 } = await import("./repo-security-plan-3E3FSPD5.js");
48294
48313
  const plan = await generateSecurityPlan2({ repo: slug, maxScanners: 10 });
48295
48314
  const recs = plan.recommendations.slice(0, 5).map((r) => `${r.priority}: ${r.displayName} (${r.category})`).join("; ");
48296
48315
  return output(PIPELINE_STATE_KEYS.FINDINGS, recs, getTimeProvider().now() - start, true);
@@ -51530,7 +51549,7 @@ var GitHubTaskTracker = class {
51530
51549
  cachedProvider = null;
51531
51550
  async getProvider() {
51532
51551
  if (this.cachedProvider !== null) return this.cachedProvider;
51533
- const { createScmProvider } = await import("./factory-C66XGNEW.js");
51552
+ const { createScmProvider } = await import("./factory-UYBTTLHZ.js");
51534
51553
  const result = await createScmProvider({ repo: this.config.repo ?? "" });
51535
51554
  if (!result.ok) throw new Error(`SCM provider error: ${result.error.message}`);
51536
51555
  this.cachedProvider = result.value;
@@ -52461,7 +52480,7 @@ async function probeSource(source, includeModelIds) {
52461
52480
  }
52462
52481
  }
52463
52482
  async function defaultSources(includeOpenRouter) {
52464
- const { createAllAdapters: createAllAdapters2 } = await import("./factory-JHWFG6RN.js");
52483
+ const { createAllAdapters: createAllAdapters2 } = await import("./factory-TE7DQKRW.js");
52465
52484
  const adapters = createAllAdapters2();
52466
52485
  return buildDefaultModelSources(adapters, { includeOpenRouter });
52467
52486
  }
@@ -54354,6 +54373,9 @@ var RoutingDecisionSchema = z127.object({
54354
54373
  timestamp: z127.iso.datetime(),
54355
54374
  query: z127.string(),
54356
54375
  routerType: z127.enum(["linucb", "preference", "quality", "cascade", "topsis"]),
54376
+ // Optional so a row persisted before #5812 still parses. Absence is read as
54377
+ // unmeasured by `isRouterTypeMeasured`, never as measured.
54378
+ routerTypeMeasured: z127.boolean().optional(),
54357
54379
  selectedModel: z127.string(),
54358
54380
  selectedTier: z127.enum(["strong", "weak"]).optional(),
54359
54381
  armIndex: z127.number().int().min(0).optional(),
@@ -54417,18 +54439,26 @@ function countOutcomesByClass(outcomes) {
54417
54439
  }
54418
54440
  return counts;
54419
54441
  }
54442
+ function isRouterTypeMeasured(decision) {
54443
+ return decision.routerTypeMeasured === true;
54444
+ }
54420
54445
  function countDecisionsByRouter(decisions) {
54421
- const counts = {
54446
+ const byRouter = {
54422
54447
  linucb: 0,
54423
54448
  preference: 0,
54424
54449
  quality: 0,
54425
54450
  cascade: 0,
54426
54451
  topsis: 0
54427
54452
  };
54453
+ let unattributed = 0;
54428
54454
  for (const decision of decisions) {
54429
- counts[decision.routerType]++;
54455
+ if (isRouterTypeMeasured(decision)) {
54456
+ byRouter[decision.routerType]++;
54457
+ } else {
54458
+ unattributed++;
54459
+ }
54430
54460
  }
54431
- return counts;
54461
+ return { byRouter, unattributed };
54432
54462
  }
54433
54463
  function calculateAverageQuality(outcomes) {
54434
54464
  if (outcomes.length === 0) return 0;
@@ -54598,7 +54628,7 @@ var OutcomeFeedbackCollector = class {
54598
54628
  }
54599
54629
  getStats() {
54600
54630
  const outcomesByClass = countOutcomesByClass(this.outcomes);
54601
- const decisionsByRouter = countDecisionsByRouter(this.decisionHistory);
54631
+ const routerCounts = countDecisionsByRouter(this.decisionHistory);
54602
54632
  const avgQuality = calculateAverageQuality(this.outcomes);
54603
54633
  const avgReward = this.calculateAverageReward();
54604
54634
  return {
@@ -54608,7 +54638,8 @@ var OutcomeFeedbackCollector = class {
54608
54638
  outcomesByClass,
54609
54639
  avgQualityScore: avgQuality,
54610
54640
  avgReward,
54611
- decisionsByRouter,
54641
+ decisionsByRouter: routerCounts.byRouter,
54642
+ decisionsUnattributed: routerCounts.unattributed,
54612
54643
  lastUpdatedAt: getTimeProvider().nowIso()
54613
54644
  };
54614
54645
  }
@@ -54742,18 +54773,32 @@ var MAX_DECISION_MAP_SIZE = 1e4;
54742
54773
  function getDecisiveRouterType(decision) {
54743
54774
  const stages = decision.stagesExecuted;
54744
54775
  if (stages.includes("linucb-selection") && decision.ucbScore !== void 0) {
54745
- return "linucb";
54776
+ return { routerType: "linucb", measured: true };
54746
54777
  }
54747
54778
  if (stages.includes("preference-routing") && decision.preferenceScore !== void 0) {
54748
- return "preference";
54779
+ return { routerType: "preference", measured: true };
54749
54780
  }
54750
54781
  if (stages.includes("zero-router") && decision.difficultyTier !== void 0) {
54751
- return "cascade";
54782
+ return { routerType: "cascade", measured: true };
54752
54783
  }
54753
54784
  if (stages.includes("topsis-ranking") && decision.topsisScore !== void 0) {
54754
- return "topsis";
54785
+ return { routerType: "topsis", measured: true };
54755
54786
  }
54756
- return "topsis";
54787
+ return { routerType: "topsis", measured: false };
54788
+ }
54789
+ function buildStoredDecision(id, traceId, routerType, decision) {
54790
+ return {
54791
+ id,
54792
+ traceId,
54793
+ timestamp: getTimeProvider().nowIso(),
54794
+ routerType,
54795
+ // Persisted telemetry is slot-level; collapse the distinct arm (#3422).
54796
+ selectedModel: routingArmDisplaySlot(decision.cliName),
54797
+ alternativeModels: decision.alternatives.map(routingArmDisplaySlot),
54798
+ confidence: decision.confidence,
54799
+ reason: decision.reason,
54800
+ taskProfile: serializeTaskProfile(decision.taskProfile)
54801
+ };
54757
54802
  }
54758
54803
  function serializeTaskProfile(profile) {
54759
54804
  return {
@@ -54810,9 +54855,11 @@ var FeedbackIntegration = class {
54810
54855
  task: decision.taskProfile.taskType,
54811
54856
  createdAt: now
54812
54857
  });
54858
+ const decisive = getDecisiveRouterType(decision);
54813
54859
  const routingDecision = createRoutingDecision({
54814
54860
  traceId: trace,
54815
- routerType: getDecisiveRouterType(decision),
54861
+ routerType: decisive.routerType,
54862
+ routerTypeMeasured: decisive.measured,
54816
54863
  selectedModel: decision.cliName,
54817
54864
  confidence: decision.confidence,
54818
54865
  query: decision.reason,
@@ -54824,18 +54871,7 @@ var FeedbackIntegration = class {
54824
54871
  const decisionWithId = { ...routingDecision, id };
54825
54872
  this.collector.recordRoutingDecision(decisionWithId);
54826
54873
  if (this.outcomeStorage !== void 0) {
54827
- const storedDecision = {
54828
- id,
54829
- traceId: trace,
54830
- timestamp: getTimeProvider().nowIso(),
54831
- routerType: getDecisiveRouterType(decision),
54832
- // Persisted telemetry is slot-level; collapse the distinct arm (#3422).
54833
- selectedModel: routingArmDisplaySlot(decision.cliName),
54834
- alternativeModels: decision.alternatives.map(routingArmDisplaySlot),
54835
- confidence: decision.confidence,
54836
- reason: decision.reason,
54837
- taskProfile: serializeTaskProfile(decision.taskProfile)
54838
- };
54874
+ const storedDecision = buildStoredDecision(id, trace, decisive.routerType, decision);
54839
54875
  this.outcomeStorage.storeDecision(storedDecision).catch((error) => {
54840
54876
  this.logger.warn("Failed to persist routing decision to SQLite", { id, error });
54841
54877
  });
@@ -56498,4 +56534,4 @@ export {
56498
56534
  startPipelineEventBridge,
56499
56535
  shutdownPipelineEventBridge
56500
56536
  };
56501
- //# sourceMappingURL=chunk-QKGWQ4O4.js.map
56537
+ //# sourceMappingURL=chunk-2U2CTX4Q.js.map