nexus-agents 4.22.2 → 4.22.4

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 (124) hide show
  1. package/dist/{child-mcp-config-Y3QSDCYI.js → child-mcp-config-I3IQVN7P.js} +2 -2
  2. package/dist/{chunk-DGLAEH7Y.js → chunk-3K3IPRED.js} +2 -2
  3. package/dist/{chunk-IK6JPHMX.js → chunk-3PVG7CQS.js} +5 -5
  4. package/dist/{chunk-KDUSLLZM.js → chunk-5RC54HVU.js} +2 -2
  5. package/dist/{chunk-XYWCZNFC.js → chunk-5YBFBXEB.js} +2 -2
  6. package/dist/{chunk-FVUQY73A.js → chunk-6TV765AS.js} +2 -2
  7. package/dist/{chunk-GMJQ6QMZ.js → chunk-7MBFKJJT.js} +2 -2
  8. package/dist/{chunk-JR4XD3T7.js → chunk-ANVPNLZE.js} +4 -4
  9. package/dist/{chunk-RE2GYZRK.js → chunk-AXG2IGOK.js} +5 -5
  10. package/dist/{chunk-6U3LS57H.js → chunk-BTAWCQP6.js} +6 -6
  11. package/dist/{chunk-CQ77TF4Y.js → chunk-BYUVLVN7.js} +1 -1
  12. package/dist/{chunk-CQ77TF4Y.js.map → chunk-BYUVLVN7.js.map} +1 -1
  13. package/dist/{chunk-QRG7UR2F.js → chunk-BZGTZKXY.js} +2 -2
  14. package/dist/{chunk-MM7BINTV.js → chunk-DXWF7V74.js} +3 -3
  15. package/dist/{chunk-P422WQJM.js → chunk-EPOKODTI.js} +2 -2
  16. package/dist/{chunk-JDWXD3YZ.js → chunk-HLVST3JE.js} +7 -7
  17. package/dist/{chunk-RMTTKP4L.js → chunk-HWPFUVMS.js} +2 -2
  18. package/dist/{chunk-BK3NHWSW.js → chunk-I6YC5PIL.js} +13 -7
  19. package/dist/chunk-I6YC5PIL.js.map +1 -0
  20. package/dist/{chunk-EU7S5CDW.js → chunk-IBW6CJ4G.js} +4 -4
  21. package/dist/{chunk-CBORIR4Y.js → chunk-MCCN5UUW.js} +2 -2
  22. package/dist/{chunk-SBLLJXJO.js → chunk-N45MVUY7.js} +5 -4
  23. package/dist/{chunk-SBLLJXJO.js.map → chunk-N45MVUY7.js.map} +1 -1
  24. package/dist/{chunk-H7CV35LZ.js → chunk-NQ65EKMG.js} +3 -3
  25. package/dist/{chunk-D6ZTSN34.js → chunk-PLO6VSSN.js} +8 -20
  26. package/dist/chunk-PLO6VSSN.js.map +1 -0
  27. package/dist/{chunk-TBXAEAKP.js → chunk-PX7AYAHF.js} +2 -2
  28. package/dist/{chunk-MTGMOLRO.js → chunk-QQS6FVTQ.js} +2 -2
  29. package/dist/{chunk-V533P6BT.js → chunk-QS5K3PAY.js} +4 -4
  30. package/dist/{chunk-JV6SMJMJ.js → chunk-RF5N4HME.js} +2 -2
  31. package/dist/{chunk-TMKBZG3W.js → chunk-RXGHRVL2.js} +2 -2
  32. package/dist/{chunk-JM42KPWJ.js → chunk-SBWVYOTV.js} +8 -8
  33. package/dist/{chunk-ICGYXBS6.js → chunk-SJPZHT6D.js} +2 -2
  34. package/dist/{chunk-2SVIHHNJ.js → chunk-TBWKMKCX.js} +6 -4
  35. package/dist/{chunk-2SVIHHNJ.js.map → chunk-TBWKMKCX.js.map} +1 -1
  36. package/dist/{chunk-BG2LQ5I2.js → chunk-VDEDTAHZ.js} +99 -56
  37. package/dist/{chunk-BG2LQ5I2.js.map → chunk-VDEDTAHZ.js.map} +1 -1
  38. package/dist/{chunk-PSXX2GBZ.js → chunk-VSHQMS37.js} +7 -7
  39. package/dist/{chunk-X7MLVGJV.js → chunk-YSOWQJ5S.js} +2 -2
  40. package/dist/{chunk-W2DYH4WL.js → chunk-ZRSKNV3E.js} +8 -8
  41. package/dist/{cli-circuit-breaker-T2IKLJVA.js → cli-circuit-breaker-OKOGXUQY.js} +3 -3
  42. package/dist/cli.js +41 -43
  43. package/dist/cli.js.map +1 -1
  44. package/dist/{composite-router-CCDCVYTY.js → composite-router-UFQSYHJF.js} +2 -2
  45. package/dist/{consensus-vote-TMMGZROW.js → consensus-vote-65UZRQMY.js} +16 -16
  46. package/dist/{context-retriever-CKJ7EJME.js → context-retriever-BROUADMF.js} +8 -8
  47. package/dist/{doctor-deep-MIQ5QYUL.js → doctor-deep-SBSUG54R.js} +3 -3
  48. package/dist/{doctor-live-IAERE7DO.js → doctor-live-LBH7XDZX.js} +9 -9
  49. package/dist/{expert-bridge-5MK4DOB7.js → expert-bridge-H6ITLZUY.js} +4 -4
  50. package/dist/{factory-OO7MN24L.js → factory-WJ6AV4WU.js} +5 -5
  51. package/dist/{factory-6FNJM6P3.js → factory-ZIYR7YJ3.js} +9 -9
  52. package/dist/{improvement-review-DKCVIJSF.js → improvement-review-LJQ2CXAP.js} +5 -5
  53. package/dist/index.js +31 -31
  54. package/dist/{init-opencode-CM2HL2PI.js → init-opencode-NTS5ZWXU.js} +6 -6
  55. package/dist/issue-triage-PM67ACC5.js +17 -0
  56. package/dist/{pr-reviewer-helpers-Q6GRH5PP.js → pr-reviewer-helpers-IAKFHBM6.js} +5 -5
  57. package/dist/{registry-command-BYRGRQ3I.js → registry-command-6HVXEW23.js} +2 -2
  58. package/dist/{repo-security-plan-NP6AT3NR.js → repo-security-plan-MF4E5MG6.js} +3 -3
  59. package/dist/{research-helpers-synthesize-2R6TO2SP.js → research-helpers-synthesize-2XQBWVG6.js} +4 -4
  60. package/dist/{routing-memory-IZH3XQQH.js → routing-memory-YIKR7EMC.js} +2 -2
  61. package/dist/{session-memory-OWEWA5BX.js → session-memory-B6TFD55A.js} +3 -3
  62. package/dist/{setup-config-O7LHHD42.js → setup-config-A5DWVRQB.js} +3 -3
  63. package/dist/{setup-custom-api-OZ3QCQTJ.js → setup-custom-api-ATC26B2O.js} +4 -4
  64. package/dist/setup-data-dir-DWMKVY6G.js +28 -0
  65. package/dist/{tool-memory-LYKMCW7U.js → tool-memory-XDUJUM2O.js} +5 -5
  66. package/dist/{unified-registry-ZSPVJ4BO.js → unified-registry-H2NNOXB3.js} +10 -10
  67. package/dist/{weather-report-4OFVK5Q5.js → weather-report-YDYML3JW.js} +2 -2
  68. package/package.json +1 -1
  69. package/dist/chunk-BK3NHWSW.js.map +0 -1
  70. package/dist/chunk-D6ZTSN34.js.map +0 -1
  71. package/dist/issue-triage-NH25YRNT.js +0 -17
  72. package/dist/setup-data-dir-T6K5PKM5.js +0 -28
  73. /package/dist/{child-mcp-config-Y3QSDCYI.js.map → child-mcp-config-I3IQVN7P.js.map} +0 -0
  74. /package/dist/{chunk-DGLAEH7Y.js.map → chunk-3K3IPRED.js.map} +0 -0
  75. /package/dist/{chunk-IK6JPHMX.js.map → chunk-3PVG7CQS.js.map} +0 -0
  76. /package/dist/{chunk-KDUSLLZM.js.map → chunk-5RC54HVU.js.map} +0 -0
  77. /package/dist/{chunk-XYWCZNFC.js.map → chunk-5YBFBXEB.js.map} +0 -0
  78. /package/dist/{chunk-FVUQY73A.js.map → chunk-6TV765AS.js.map} +0 -0
  79. /package/dist/{chunk-GMJQ6QMZ.js.map → chunk-7MBFKJJT.js.map} +0 -0
  80. /package/dist/{chunk-JR4XD3T7.js.map → chunk-ANVPNLZE.js.map} +0 -0
  81. /package/dist/{chunk-RE2GYZRK.js.map → chunk-AXG2IGOK.js.map} +0 -0
  82. /package/dist/{chunk-6U3LS57H.js.map → chunk-BTAWCQP6.js.map} +0 -0
  83. /package/dist/{chunk-QRG7UR2F.js.map → chunk-BZGTZKXY.js.map} +0 -0
  84. /package/dist/{chunk-MM7BINTV.js.map → chunk-DXWF7V74.js.map} +0 -0
  85. /package/dist/{chunk-P422WQJM.js.map → chunk-EPOKODTI.js.map} +0 -0
  86. /package/dist/{chunk-JDWXD3YZ.js.map → chunk-HLVST3JE.js.map} +0 -0
  87. /package/dist/{chunk-RMTTKP4L.js.map → chunk-HWPFUVMS.js.map} +0 -0
  88. /package/dist/{chunk-EU7S5CDW.js.map → chunk-IBW6CJ4G.js.map} +0 -0
  89. /package/dist/{chunk-CBORIR4Y.js.map → chunk-MCCN5UUW.js.map} +0 -0
  90. /package/dist/{chunk-H7CV35LZ.js.map → chunk-NQ65EKMG.js.map} +0 -0
  91. /package/dist/{chunk-TBXAEAKP.js.map → chunk-PX7AYAHF.js.map} +0 -0
  92. /package/dist/{chunk-MTGMOLRO.js.map → chunk-QQS6FVTQ.js.map} +0 -0
  93. /package/dist/{chunk-V533P6BT.js.map → chunk-QS5K3PAY.js.map} +0 -0
  94. /package/dist/{chunk-JV6SMJMJ.js.map → chunk-RF5N4HME.js.map} +0 -0
  95. /package/dist/{chunk-TMKBZG3W.js.map → chunk-RXGHRVL2.js.map} +0 -0
  96. /package/dist/{chunk-JM42KPWJ.js.map → chunk-SBWVYOTV.js.map} +0 -0
  97. /package/dist/{chunk-ICGYXBS6.js.map → chunk-SJPZHT6D.js.map} +0 -0
  98. /package/dist/{chunk-PSXX2GBZ.js.map → chunk-VSHQMS37.js.map} +0 -0
  99. /package/dist/{chunk-X7MLVGJV.js.map → chunk-YSOWQJ5S.js.map} +0 -0
  100. /package/dist/{chunk-W2DYH4WL.js.map → chunk-ZRSKNV3E.js.map} +0 -0
  101. /package/dist/{cli-circuit-breaker-T2IKLJVA.js.map → cli-circuit-breaker-OKOGXUQY.js.map} +0 -0
  102. /package/dist/{composite-router-CCDCVYTY.js.map → composite-router-UFQSYHJF.js.map} +0 -0
  103. /package/dist/{consensus-vote-TMMGZROW.js.map → consensus-vote-65UZRQMY.js.map} +0 -0
  104. /package/dist/{context-retriever-CKJ7EJME.js.map → context-retriever-BROUADMF.js.map} +0 -0
  105. /package/dist/{doctor-deep-MIQ5QYUL.js.map → doctor-deep-SBSUG54R.js.map} +0 -0
  106. /package/dist/{doctor-live-IAERE7DO.js.map → doctor-live-LBH7XDZX.js.map} +0 -0
  107. /package/dist/{expert-bridge-5MK4DOB7.js.map → expert-bridge-H6ITLZUY.js.map} +0 -0
  108. /package/dist/{factory-6FNJM6P3.js.map → factory-WJ6AV4WU.js.map} +0 -0
  109. /package/dist/{factory-OO7MN24L.js.map → factory-ZIYR7YJ3.js.map} +0 -0
  110. /package/dist/{improvement-review-DKCVIJSF.js.map → improvement-review-LJQ2CXAP.js.map} +0 -0
  111. /package/dist/{init-opencode-CM2HL2PI.js.map → init-opencode-NTS5ZWXU.js.map} +0 -0
  112. /package/dist/{issue-triage-NH25YRNT.js.map → issue-triage-PM67ACC5.js.map} +0 -0
  113. /package/dist/{pr-reviewer-helpers-Q6GRH5PP.js.map → pr-reviewer-helpers-IAKFHBM6.js.map} +0 -0
  114. /package/dist/{registry-command-BYRGRQ3I.js.map → registry-command-6HVXEW23.js.map} +0 -0
  115. /package/dist/{repo-security-plan-NP6AT3NR.js.map → repo-security-plan-MF4E5MG6.js.map} +0 -0
  116. /package/dist/{research-helpers-synthesize-2R6TO2SP.js.map → research-helpers-synthesize-2XQBWVG6.js.map} +0 -0
  117. /package/dist/{routing-memory-IZH3XQQH.js.map → routing-memory-YIKR7EMC.js.map} +0 -0
  118. /package/dist/{session-memory-OWEWA5BX.js.map → session-memory-B6TFD55A.js.map} +0 -0
  119. /package/dist/{setup-config-O7LHHD42.js.map → setup-config-A5DWVRQB.js.map} +0 -0
  120. /package/dist/{setup-custom-api-OZ3QCQTJ.js.map → setup-custom-api-ATC26B2O.js.map} +0 -0
  121. /package/dist/{setup-data-dir-T6K5PKM5.js.map → setup-data-dir-DWMKVY6G.js.map} +0 -0
  122. /package/dist/{tool-memory-LYKMCW7U.js.map → tool-memory-XDUJUM2O.js.map} +0 -0
  123. /package/dist/{unified-registry-ZSPVJ4BO.js.map → unified-registry-H2NNOXB3.js.map} +0 -0
  124. /package/dist/{weather-report-4OFVK5Q5.js.map → weather-report-YDYML3JW.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  generateSecurityPlan
3
- } from "./chunk-QRG7UR2F.js";
3
+ } from "./chunk-BZGTZKXY.js";
4
4
  import {
5
5
  analyzeGitHubRepo
6
6
  } from "./chunk-HFOQKCD2.js";
@@ -17,14 +17,14 @@ import {
17
17
  FINDING_SEVERITY_LEVELS,
18
18
  SARIF_LEVEL_MAP,
19
19
  SEVERITY_ORDER
20
- } from "./chunk-CQ77TF4Y.js";
20
+ } from "./chunk-BYUVLVN7.js";
21
21
  import {
22
22
  DEFAULT_TASK_TTL_MS,
23
23
  clampTaskTtl
24
- } from "./chunk-JDWXD3YZ.js";
24
+ } from "./chunk-HLVST3JE.js";
25
25
  import {
26
26
  executeExpert
27
- } from "./chunk-PSXX2GBZ.js";
27
+ } from "./chunk-VSHQMS37.js";
28
28
  import {
29
29
  JobStatusSchema,
30
30
  abortJob,
@@ -46,24 +46,24 @@ import {
46
46
  simulationDeniedResult,
47
47
  toJobSummary,
48
48
  writeJobCancelled
49
- } from "./chunk-W2DYH4WL.js";
49
+ } from "./chunk-ZRSKNV3E.js";
50
50
  import {
51
51
  allOf
52
52
  } from "./chunk-OQB3XC5O.js";
53
53
  import {
54
54
  normalizeTopicToCanonical,
55
55
  synthesizeResearch
56
- } from "./chunk-H7CV35LZ.js";
56
+ } from "./chunk-NQ65EKMG.js";
57
57
  import {
58
58
  IssueTriage
59
- } from "./chunk-6U3LS57H.js";
59
+ } from "./chunk-BTAWCQP6.js";
60
60
  import {
61
61
  resolveEnvMode,
62
62
  sanitizeInput
63
- } from "./chunk-GMJQ6QMZ.js";
63
+ } from "./chunk-7MBFKJJT.js";
64
64
  import {
65
65
  withPrerequisite
66
- } from "./chunk-MM7BINTV.js";
66
+ } from "./chunk-DXWF7V74.js";
67
67
  import {
68
68
  NOOP_NOTIFIER,
69
69
  RateLimiter,
@@ -87,18 +87,18 @@ import {
87
87
  withAuditTrail,
88
88
  withProgressHeartbeat,
89
89
  wrapToolWithTimeout
90
- } from "./chunk-D6ZTSN34.js";
90
+ } from "./chunk-PLO6VSSN.js";
91
91
  import {
92
92
  createAuditTrail,
93
93
  createGraphAuditBridge,
94
94
  emitPipelinePolicyEvent
95
- } from "./chunk-X7MLVGJV.js";
95
+ } from "./chunk-YSOWQJ5S.js";
96
96
  import {
97
97
  EventTopics,
98
98
  createEvent,
99
99
  getGlobalEventBus,
100
100
  getGlobalRegistry
101
- } from "./chunk-V533P6BT.js";
101
+ } from "./chunk-QS5K3PAY.js";
102
102
  import {
103
103
  IDENTIFIER_RE,
104
104
  LANG_VALUES,
@@ -131,29 +131,29 @@ import {
131
131
  parseRegistry,
132
132
  sourceExistsInRegistry,
133
133
  summarizeContextForPrompt
134
- } from "./chunk-IK6JPHMX.js";
134
+ } from "./chunk-3PVG7CQS.js";
135
135
  import {
136
136
  loadPapersRegistry,
137
137
  loadTechniquesRegistry,
138
138
  resolveInsideRoot
139
- } from "./chunk-P422WQJM.js";
139
+ } from "./chunk-EPOKODTI.js";
140
140
  import {
141
141
  getTokenEnvVars,
142
142
  resolveToken
143
- } from "./chunk-XYWCZNFC.js";
143
+ } from "./chunk-5YBFBXEB.js";
144
144
  import {
145
145
  DEFAULT_RELEVANCE_CONFIG,
146
146
  MemoryImportance,
147
147
  calculateTextJaccardSimilarity,
148
148
  getToolMemory
149
- } from "./chunk-EU7S5CDW.js";
149
+ } from "./chunk-IBW6CJ4G.js";
150
150
  import {
151
151
  STOPWORDS,
152
152
  truncateWithInfo
153
153
  } from "./chunk-6T3EPABN.js";
154
154
  import {
155
155
  createSessionMemory
156
- } from "./chunk-DGLAEH7Y.js";
156
+ } from "./chunk-3K3IPRED.js";
157
157
  import {
158
158
  BUILT_IN_EXPERTS,
159
159
  BuiltInExpertTypeSchema,
@@ -171,25 +171,25 @@ import {
171
171
  getAvailableClis,
172
172
  sleep,
173
173
  withTimeout
174
- } from "./chunk-JM42KPWJ.js";
174
+ } from "./chunk-SBWVYOTV.js";
175
175
  import {
176
176
  BaseAdapter,
177
177
  createStream,
178
178
  requireApiKey,
179
179
  validateApiKeyPresence
180
- } from "./chunk-CBORIR4Y.js";
180
+ } from "./chunk-MCCN5UUW.js";
181
181
  import {
182
182
  DEFAULTS
183
- } from "./chunk-TMKBZG3W.js";
183
+ } from "./chunk-RXGHRVL2.js";
184
184
  import {
185
185
  getAvailabilityCache,
186
186
  getCliForModelId,
187
187
  resolveFallback
188
- } from "./chunk-RMTTKP4L.js";
188
+ } from "./chunk-HWPFUVMS.js";
189
189
  import {
190
190
  generateHyphenId,
191
191
  generateUUID
192
- } from "./chunk-MTGMOLRO.js";
192
+ } from "./chunk-QQS6FVTQ.js";
193
193
  import {
194
194
  AGENT_ROUTER_TIMEOUTS,
195
195
  API_TIMEOUTS,
@@ -293,7 +293,7 @@ import {
293
293
  selectStrategyByManifest,
294
294
  toExpertTaskAnalysisResult,
295
295
  withStep
296
- } from "./chunk-2SVIHHNJ.js";
296
+ } from "./chunk-TBWKMKCX.js";
297
297
  import {
298
298
  ensureLearningDir,
299
299
  getMetaOutcomesFile,
@@ -29544,7 +29544,7 @@ function execIdFields(executionId) {
29544
29544
  async function populateUnifiedContextOnState(state, options) {
29545
29545
  const taskCandidate = state["task"];
29546
29546
  if (typeof taskCandidate !== "string" || taskCandidate === "") return;
29547
- const { getContextForTask: getContextForTask2, inferTaskCategory: inferTaskCategory2 } = await import("./context-retriever-CKJ7EJME.js");
29547
+ const { getContextForTask: getContextForTask2, inferTaskCategory: inferTaskCategory2 } = await import("./context-retriever-BROUADMF.js");
29548
29548
  const category = inferTaskCategory2(taskCandidate);
29549
29549
  const executionId = options?.executionId;
29550
29550
  const execFields = execIdFields(executionId);
@@ -41482,7 +41482,13 @@ function recordGraphWorkflowResult(result) {
41482
41482
  const store = getOutcomeStore();
41483
41483
  store.append({
41484
41484
  id: `graph-${String(getTimeProvider().now())}-${getRandomProvider().random().toString(36).slice(2, 8)}`,
41485
- cli: DEFAULT_CLI,
41485
+ // #5020: NOT `DEFAULT_CLI`. This tool does not know which CLI served the
41486
+ // work — the model field below is a synthetic label, not a model id — and
41487
+ // hardcoding 'claude' credited or debited claude for every run, poisoning
41488
+ // the same routing learner #5003 fixed in the feedback bridge.
41489
+ // `'unknown'` is the schema's own unattributed value, and the bandit's
41490
+ // warm-start already partitions it out (#4935) instead of replaying it.
41491
+ cli: "unknown",
41486
41492
  category: workflowToCategory(result.workflow),
41487
41493
  model: "graph-workflow",
41488
41494
  success: succeeded,
@@ -42097,7 +42103,13 @@ function recordSpecOutcome(success, durationMs, stage) {
42097
42103
  const store = getOutcomeStore();
42098
42104
  store.append({
42099
42105
  id: `spec-${String(getTimeProvider().now())}-${getRandomProvider().random().toString(36).slice(2, 8)}`,
42100
- cli: DEFAULT_CLI,
42106
+ // #5020: NOT `DEFAULT_CLI`. This tool does not know which CLI served the
42107
+ // work — the model field below is a synthetic label, not a model id — and
42108
+ // hardcoding 'claude' credited or debited claude for every run, poisoning
42109
+ // the same routing learner #5003 fixed in the feedback bridge.
42110
+ // `'unknown'` is the schema's own unattributed value, and the bandit's
42111
+ // warm-start already partitions it out (#4935) instead of replaying it.
42112
+ cli: "unknown",
42101
42113
  category: "code_generation",
42102
42114
  model: "spec-executor",
42103
42115
  success,
@@ -45272,7 +45284,7 @@ async function tryIssueTriage(task) {
45272
45284
  try {
45273
45285
  const issueMatch = task.match(/github\.com\/([^/]+\/[^/]+)\/issues\/(\d+)/);
45274
45286
  if (issueMatch === null) return null;
45275
- const { createIssueTriage } = await import("./issue-triage-NH25YRNT.js");
45287
+ const { createIssueTriage } = await import("./issue-triage-PM67ACC5.js");
45276
45288
  const triage = createIssueTriage();
45277
45289
  const owner = issueMatch[1] ?? "";
45278
45290
  const num = issueMatch[2] ?? "";
@@ -45300,7 +45312,7 @@ var VALID_TEMPLATES = /* @__PURE__ */ new Set([
45300
45312
  ]);
45301
45313
  async function classifyWithLLM(task) {
45302
45314
  try {
45303
- const { executeExpert: executeExpert2 } = await import("./expert-bridge-5MK4DOB7.js");
45315
+ const { executeExpert: executeExpert2 } = await import("./expert-bridge-H6ITLZUY.js");
45304
45316
  const prompt = [
45305
45317
  "Classify this task into exactly one pipeline template.",
45306
45318
  "Templates: dev (implementation/bug fix/refactor), research (investigate/evaluate/compare),",
@@ -46679,7 +46691,8 @@ async function runTriagePipeline(sarifResult, targetDir, config, start) {
46679
46691
  });
46680
46692
  lastTriageVerdicts = triageResult.triaged;
46681
46693
  recordTriageLifecycle(triageResult.triaged, lifecycleEntries);
46682
- const osvVulns = await runOsvCheck(targetDir, config.enableOsv ?? true);
46694
+ const osv = await runOsvCheck(targetDir, config.enableOsv ?? true);
46695
+ const osvVulns = osv.vulnerabilities;
46683
46696
  lastOsvVulnerabilities = osvVulns;
46684
46697
  const confirmed = getConfirmedBlockingFindings(sarifResult.findings, triageResult.triaged);
46685
46698
  const lifecycle = summarizeLifecycle(lifecycleEntries);
@@ -46687,13 +46700,15 @@ async function runTriagePipeline(sarifResult, targetDir, config, start) {
46687
46700
  sarifResult.totalFindings,
46688
46701
  confirmed.length,
46689
46702
  lifecycle.falsePositiveCount,
46690
- osvVulns.length
46703
+ osvVulns.length,
46704
+ osv
46691
46705
  );
46692
46706
  logger46.info("Security gate complete", {
46693
46707
  total: sarifResult.totalFindings,
46694
46708
  confirmed: confirmed.length,
46695
46709
  falsePositives: lifecycle.falsePositiveCount,
46696
- osvVulns: osvVulns.length
46710
+ osvVulns: osvVulns.length,
46711
+ osvFailedLookups: osv.failedLookups
46697
46712
  });
46698
46713
  const failed = confirmed.length > 0 || osvVulns.some((v) => v.severity === "CRITICAL");
46699
46714
  return {
@@ -46708,24 +46723,39 @@ function recordTriageLifecycle(verdicts, entries) {
46708
46723
  recordTriaged(triaged.finding, triaged.verdict, (entry) => entries.push(entry));
46709
46724
  }
46710
46725
  }
46726
+ var OSV_EMPTY = {
46727
+ vulnerabilities: [],
46728
+ failedLookups: 0,
46729
+ queried: 0,
46730
+ declared: 0
46731
+ };
46732
+ var OSV_DEPENDENCY_CAP = 20;
46711
46733
  async function runOsvCheck(targetDir, enabled) {
46712
- if (!enabled) return [];
46734
+ if (!enabled) return OSV_EMPTY;
46713
46735
  try {
46714
46736
  const fs13 = await import("fs");
46715
46737
  const path12 = await import("path");
46716
46738
  const pkgPath = path12.join(targetDir, "package.json");
46717
- if (!fs13.existsSync(pkgPath)) return [];
46739
+ if (!fs13.existsSync(pkgPath)) return OSV_EMPTY;
46718
46740
  const pkg = JSON.parse(fs13.readFileSync(pkgPath, "utf-8"));
46719
- const deps = Object.entries(pkg.dependencies ?? {}).slice(0, 20).map(([name, version]) => ({
46741
+ const declared = Object.keys(pkg.dependencies ?? {}).length;
46742
+ const deps = Object.entries(pkg.dependencies ?? {}).slice(0, OSV_DEPENDENCY_CAP).map(([name, version]) => ({
46720
46743
  name,
46721
46744
  version: version.replace(/^[\^~>=<]+/, "")
46722
46745
  }));
46723
- if (deps.length === 0) return [];
46746
+ if (deps.length === 0) return OSV_EMPTY;
46724
46747
  const results = await queryOsvBatch(deps);
46725
- return results.flatMap((r) => [...r.vulnerabilities]);
46748
+ return {
46749
+ vulnerabilities: results.flatMap((r) => [...r.vulnerabilities]),
46750
+ // The half that used to be dropped: a 503 or a timeout yields an empty
46751
+ // `vulnerabilities` array with an `error` set, which read as "clean".
46752
+ failedLookups: results.filter((r) => r.error !== null).length,
46753
+ queried: deps.length,
46754
+ declared
46755
+ };
46726
46756
  } catch (error) {
46727
46757
  logger46.debug("OSV check skipped", { error: String(error) });
46728
- return [];
46758
+ return OSV_EMPTY;
46729
46759
  }
46730
46760
  }
46731
46761
  function getConfirmedBlockingFindings(findings, verdicts) {
@@ -46737,12 +46767,23 @@ function getConfirmedBlockingFindings(findings, verdicts) {
46737
46767
  return verdict === void 0 || verdict.confirmed;
46738
46768
  });
46739
46769
  }
46740
- function buildScanSummary(total, confirmed, falsePositives, osvCount) {
46770
+ function buildScanSummary(total, confirmed, falsePositives, osvCount, osv) {
46741
46771
  const parts = [`${String(total)} SAST findings`];
46742
46772
  if (falsePositives > 0) parts.push(`${String(falsePositives)} filtered as false positives`);
46743
46773
  if (confirmed > 0) parts.push(`${String(confirmed)} confirmed blocking`);
46744
46774
  if (osvCount > 0) parts.push(`${String(osvCount)} OSV dependency vulnerabilities`);
46745
- if (confirmed === 0 && osvCount === 0) parts.push("none blocking");
46775
+ if (osv !== void 0 && osv.failedLookups > 0) {
46776
+ parts.push(
46777
+ `OSV not checked for ${String(osv.failedLookups)} of ${String(osv.queried)} dependencies (lookup failed)`
46778
+ );
46779
+ } else if (confirmed === 0 && osvCount === 0) {
46780
+ parts.push("none blocking");
46781
+ }
46782
+ if (osv !== void 0 && osv.declared > osv.queried) {
46783
+ parts.push(
46784
+ `OSV covered ${String(osv.queried)} of ${String(osv.declared)} declared dependencies`
46785
+ );
46786
+ }
46746
46787
  return parts.join(", ");
46747
46788
  }
46748
46789
 
@@ -47052,7 +47093,7 @@ var memoryInitPromise = null;
47052
47093
  async function initPipelineMemory() {
47053
47094
  if (cachedMemory !== null) return cachedMemory;
47054
47095
  try {
47055
- const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-OWEWA5BX.js");
47096
+ const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-B6TFD55A.js");
47056
47097
  const { getLearningDir } = await import("./learning-persistence-SR5F4DSY.js");
47057
47098
  const mem = createSessionMemory2(getLearningDir());
47058
47099
  mem.startSession(`pipeline-${String(getTimeProvider().now())}`);
@@ -47114,7 +47155,7 @@ function recordRoutingExperience(category, success, durationMs, tokensUsed = 0,
47114
47155
  callRecord(routingMemoryCache);
47115
47156
  return;
47116
47157
  }
47117
- routingMemoryInitPromise ??= import("./routing-memory-IZH3XQQH.js").then(({ createRoutingMemory }) => {
47158
+ routingMemoryInitPromise ??= import("./routing-memory-YIKR7EMC.js").then(({ createRoutingMemory }) => {
47118
47159
  routingMemoryCache ??= createRoutingMemory();
47119
47160
  return routingMemoryCache;
47120
47161
  }).catch((error) => {
@@ -47148,7 +47189,7 @@ ${text}` : "";
47148
47189
  }
47149
47190
  async function getWeatherContext() {
47150
47191
  try {
47151
- const { generateWeatherReport: generateWeatherReport2 } = await import("./weather-report-4OFVK5Q5.js");
47192
+ const { generateWeatherReport: generateWeatherReport2 } = await import("./weather-report-YDYML3JW.js");
47152
47193
  const report = generateWeatherReport2({ includeAdaptive: true });
47153
47194
  const mappings = "recommendedMappings" in report ? report.recommendedMappings : [];
47154
47195
  if (!Array.isArray(mappings) || mappings.length === 0) return "";
@@ -47166,7 +47207,7 @@ ${lines}
47166
47207
  }
47167
47208
  async function getMemoryContext(task) {
47168
47209
  try {
47169
- const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-OWEWA5BX.js");
47210
+ const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-B6TFD55A.js");
47170
47211
  const { getLearningDir } = await import("./learning-persistence-SR5F4DSY.js");
47171
47212
  const memory = createSessionMemory2(getLearningDir(), { maxLearningsInContext: 10 });
47172
47213
  const learnings = memory.searchLearnings(task.slice(0, 200));
@@ -47285,7 +47326,7 @@ ${contextBlock}`;
47285
47326
  const strategy = config.votingStrategy ?? "higher_order";
47286
47327
  await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
47287
47328
  try {
47288
- const { executeVoting } = await import("./consensus-vote-TMMGZROW.js");
47329
+ const { executeVoting } = await import("./consensus-vote-65UZRQMY.js");
47289
47330
  const votingResult = await executeVoting(
47290
47331
  {
47291
47332
  proposal: buildVoteProposal(plan, research),
@@ -47724,7 +47765,7 @@ async function searchCodebaseForTask(task) {
47724
47765
  }
47725
47766
  async function queryResearchRegistry(task) {
47726
47767
  try {
47727
- const { synthesizeResearch: synthesizeResearch2 } = await import("./research-helpers-synthesize-2R6TO2SP.js");
47768
+ const { synthesizeResearch: synthesizeResearch2 } = await import("./research-helpers-synthesize-2XQBWVG6.js");
47728
47769
  const topic = task.split(/[.!?\n]/).filter((s) => s.trim().length > 10)[0]?.trim();
47729
47770
  if (topic === void 0) return null;
47730
47771
  const result = await synthesizeResearch2(topic.slice(0, 50));
@@ -47795,7 +47836,7 @@ function createScanStageWrapper() {
47795
47836
  try {
47796
47837
  const slug = ctx.task.match(/([a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+)/)?.[1];
47797
47838
  if (slug !== void 0) {
47798
- const { generateSecurityPlan: generateSecurityPlan2 } = await import("./repo-security-plan-NP6AT3NR.js");
47839
+ const { generateSecurityPlan: generateSecurityPlan2 } = await import("./repo-security-plan-MF4E5MG6.js");
47799
47840
  const plan = await generateSecurityPlan2({ repo: slug, maxScanners: 10 });
47800
47841
  const recs = plan.recommendations.slice(0, 5).map((r) => `${r.priority}: ${r.displayName} (${r.category})`).join("; ");
47801
47842
  return output(PIPELINE_STATE_KEYS.FINDINGS, recs, getTimeProvider().now() - start, true);
@@ -50920,7 +50961,7 @@ var GitHubTaskTracker = class {
50920
50961
  cachedProvider = null;
50921
50962
  async getProvider() {
50922
50963
  if (this.cachedProvider !== null) return this.cachedProvider;
50923
- const { createScmProvider } = await import("./factory-OO7MN24L.js");
50964
+ const { createScmProvider } = await import("./factory-WJ6AV4WU.js");
50924
50965
  const result = await createScmProvider({ repo: this.config.repo ?? "" });
50925
50966
  if (!result.ok) throw new Error(`SCM provider error: ${result.error.message}`);
50926
50967
  this.cachedProvider = result.value;
@@ -51833,7 +51874,7 @@ async function probeSource(source, includeModelIds) {
51833
51874
  }
51834
51875
  }
51835
51876
  async function defaultSources(includeOpenRouter) {
51836
- const { createAllAdapters: createAllAdapters2 } = await import("./factory-6FNJM6P3.js");
51877
+ const { createAllAdapters: createAllAdapters2 } = await import("./factory-ZIYR7YJ3.js");
51837
51878
  const adapters = createAllAdapters2();
51838
51879
  return buildDefaultModelSources(adapters, { includeOpenRouter });
51839
51880
  }
@@ -55204,10 +55245,6 @@ function createFeedbackSubscriber(bus, store) {
55204
55245
  });
55205
55246
  }
55206
55247
  var cachedFeedbackUnsubscribe = null;
55207
- function startFeedbackSubscriber(bus, store) {
55208
- if (cachedFeedbackUnsubscribe !== null) return;
55209
- cachedFeedbackUnsubscribe = createFeedbackSubscriber(bus, store);
55210
- }
55211
55248
  function shutdownFeedbackSubscriber() {
55212
55249
  if (cachedFeedbackUnsubscribe !== null) {
55213
55250
  cachedFeedbackUnsubscribe();
@@ -55220,10 +55257,17 @@ function handleEvent2(event, store) {
55220
55257
  }
55221
55258
  }
55222
55259
  function recordStageFailed(event, store) {
55260
+ const cli = event.model === void 0 ? void 0 : lookupInTreeCapability(event.model)?.cliName;
55261
+ if (cli === void 0) {
55262
+ logger57.debug("Skipping stage-failure outcome \u2014 no attributable CLI", {
55263
+ stageId: event.stageId,
55264
+ model: event.model ?? "absent"
55265
+ });
55266
+ return;
55267
+ }
55223
55268
  const outcome = {
55224
55269
  id: `fb-fail-${event.executionId}-${String(event.timestamp)}`,
55225
- cli: DEFAULT_CLI,
55226
- // Stage failures don't carry CLI info; default to canonical fallback
55270
+ cli,
55227
55271
  category: "code_generation",
55228
55272
  // Real model id when the emitter attributed one (#4194); 'unknown' is
55229
55273
  // reserved for stages that genuinely have no single model — never a guess.
@@ -55891,8 +55935,7 @@ export {
55891
55935
  initializeSandbox,
55892
55936
  getSandboxMode,
55893
55937
  createFeedbackSubscriber,
55894
- startFeedbackSubscriber,
55895
55938
  shutdownFeedbackSubscriber,
55896
55939
  createEventBusBridge
55897
55940
  };
55898
- //# sourceMappingURL=chunk-BG2LQ5I2.js.map
55941
+ //# sourceMappingURL=chunk-VDEDTAHZ.js.map