nexus-agents 2.129.2 → 2.130.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 (119) hide show
  1. package/dist/{child-mcp-config-TQIZEHVP.js → child-mcp-config-F7R7BFEF.js} +2 -2
  2. package/dist/{chunk-U7HHO4UI.js → chunk-2ECAJTUP.js} +2 -2
  3. package/dist/{chunk-JQHZS7GU.js → chunk-4SDY75WA.js} +4 -4
  4. package/dist/{chunk-6RXWD3HT.js → chunk-6BF3BRJ3.js} +2 -2
  5. package/dist/{chunk-RAAMLWMY.js → chunk-AZFHCHYX.js} +7 -7
  6. package/dist/{chunk-BKZ5YD66.js → chunk-BPGSM6U5.js} +2 -2
  7. package/dist/{chunk-4FFWDTUE.js → chunk-CFXL5LJC.js} +2 -2
  8. package/dist/{chunk-EORN73QB.js → chunk-CXGIRMHT.js} +7 -7
  9. package/dist/{chunk-V2E74WBI.js → chunk-F6Y2CE24.js} +2 -2
  10. package/dist/{chunk-JAKYPFLI.js → chunk-FYECPZKQ.js} +3 -3
  11. package/dist/{chunk-NKAPCKHN.js → chunk-GIKZBQY7.js} +4 -4
  12. package/dist/{chunk-GO7JE2MA.js → chunk-GMC6DYG7.js} +2 -2
  13. package/dist/{chunk-YVJFUOHY.js → chunk-JDHCHN7U.js} +3 -3
  14. package/dist/{chunk-GZFECWWZ.js → chunk-KBX2Q3DG.js} +2 -2
  15. package/dist/{chunk-SDLDZL4K.js → chunk-KOICNQMN.js} +90 -129
  16. package/dist/chunk-KOICNQMN.js.map +1 -0
  17. package/dist/{chunk-QJ52FRQX.js → chunk-L4ETHMN6.js} +2 -2
  18. package/dist/{chunk-U3FNIYWH.js → chunk-LICM3H4J.js} +2 -2
  19. package/dist/{chunk-VBAGMX5I.js → chunk-MII2DHXL.js} +119 -10
  20. package/dist/chunk-MII2DHXL.js.map +1 -0
  21. package/dist/{chunk-GZTPQMD5.js → chunk-MJTTQCJS.js} +3 -3
  22. package/dist/{chunk-KYLVH42N.js → chunk-P5TYSLNS.js} +2 -2
  23. package/dist/{chunk-XMQ3EC2B.js → chunk-PLVZ64OM.js} +2 -2
  24. package/dist/{chunk-47M2C4SO.js → chunk-PP724WVD.js} +5 -5
  25. package/dist/{chunk-TP3VZUQL.js → chunk-QENZCLR2.js} +3 -3
  26. package/dist/{chunk-VLL4L5TK.js → chunk-R3ZNBC2O.js} +2 -2
  27. package/dist/{chunk-ZJPKYTH5.js → chunk-RBPGEUHT.js} +3 -3
  28. package/dist/{chunk-5QJTUA7Y.js → chunk-RDJMBYZ2.js} +3 -3
  29. package/dist/{chunk-FJREQSFG.js → chunk-SUJFJVAM.js} +2 -2
  30. package/dist/{chunk-IASJVOVO.js → chunk-SWKSR5R7.js} +2 -2
  31. package/dist/{chunk-4IBBMLNR.js → chunk-TT7DZ6XW.js} +4 -4
  32. package/dist/{chunk-HMOPW3XC.js → chunk-TULQAVRC.js} +7 -7
  33. package/dist/{chunk-RFXBV3A2.js → chunk-UXTCUMJM.js} +4 -4
  34. package/dist/{chunk-MXEUDSWT.js → chunk-V5EI2KEG.js} +5 -5
  35. package/dist/{chunk-6RXP55DL.js → chunk-W4PM3PLE.js} +7 -7
  36. package/dist/{cli-circuit-breaker-3CWRA7DZ.js → cli-circuit-breaker-VXHOHBE6.js} +4 -4
  37. package/dist/cli.js +39 -39
  38. package/dist/{composite-router-MN6W5CEQ.js → composite-router-NJZMYTXG.js} +2 -2
  39. package/dist/{consensus-vote-3EMLBZ25.js → consensus-vote-SH5CKJQR.js} +13 -13
  40. package/dist/{context-retriever-OLWFVOJG.js → context-retriever-LVW25GWO.js} +8 -8
  41. package/dist/{doctor-deep-W3QB24SM.js → doctor-deep-HCT3LW5G.js} +3 -3
  42. package/dist/{expert-bridge-LAB2W5ET.js → expert-bridge-FBYWLGB3.js} +4 -4
  43. package/dist/factory-5IYTNTA2.js +21 -0
  44. package/dist/{factory-7ZKKQDCI.js → factory-GP5SJCTQ.js} +5 -5
  45. package/dist/{improvement-review-ATYDIHSF.js → improvement-review-OUGGPW4A.js} +4 -4
  46. package/dist/index.d.ts +3030 -2943
  47. package/dist/index.js +28 -28
  48. package/dist/{init-opencode-4O2R5S72.js → init-opencode-6PZVSSZY.js} +5 -5
  49. package/dist/{issue-triage-G2AKATE4.js → issue-triage-TPPWEE5N.js} +5 -5
  50. package/dist/{pr-reviewer-helpers-Y6LEGX2P.js → pr-reviewer-helpers-MMVZFL2P.js} +4 -4
  51. package/dist/{registry-command-X6A27TNG.js → registry-command-IDC5G3EZ.js} +2 -2
  52. package/dist/{repo-security-plan-356NFHOZ.js → repo-security-plan-XL3LTBPN.js} +3 -3
  53. package/dist/{research-helpers-synthesize-7XWIAM5D.js → research-helpers-synthesize-6ROTFLGO.js} +4 -4
  54. package/dist/{routing-memory-YTLUUXXX.js → routing-memory-YAW2AIRX.js} +2 -2
  55. package/dist/{session-memory-IHQCJWBK.js → session-memory-VR3BJMWL.js} +3 -3
  56. package/dist/{setup-command-Q4RVDZOO.js → setup-command-SMJX3TES.js} +11 -11
  57. package/dist/{setup-config-UA4M5OQ4.js → setup-config-IXZAAYYH.js} +3 -3
  58. package/dist/{setup-custom-api-UXFN75SS.js → setup-custom-api-6ZBOVWEU.js} +3 -3
  59. package/dist/{tool-memory-SJ57ZJ5F.js → tool-memory-ZKMPHKG5.js} +5 -5
  60. package/dist/{unified-registry-WMJQUA43.js → unified-registry-WP4XC656.js} +9 -9
  61. package/dist/{weather-report-WSATZR44.js → weather-report-CETWTNE5.js} +2 -2
  62. package/package.json +1 -1
  63. package/dist/chunk-SDLDZL4K.js.map +0 -1
  64. package/dist/chunk-VBAGMX5I.js.map +0 -1
  65. package/dist/factory-JNLNQ67U.js +0 -21
  66. /package/dist/{child-mcp-config-TQIZEHVP.js.map → child-mcp-config-F7R7BFEF.js.map} +0 -0
  67. /package/dist/{chunk-U7HHO4UI.js.map → chunk-2ECAJTUP.js.map} +0 -0
  68. /package/dist/{chunk-JQHZS7GU.js.map → chunk-4SDY75WA.js.map} +0 -0
  69. /package/dist/{chunk-6RXWD3HT.js.map → chunk-6BF3BRJ3.js.map} +0 -0
  70. /package/dist/{chunk-RAAMLWMY.js.map → chunk-AZFHCHYX.js.map} +0 -0
  71. /package/dist/{chunk-BKZ5YD66.js.map → chunk-BPGSM6U5.js.map} +0 -0
  72. /package/dist/{chunk-4FFWDTUE.js.map → chunk-CFXL5LJC.js.map} +0 -0
  73. /package/dist/{chunk-EORN73QB.js.map → chunk-CXGIRMHT.js.map} +0 -0
  74. /package/dist/{chunk-V2E74WBI.js.map → chunk-F6Y2CE24.js.map} +0 -0
  75. /package/dist/{chunk-JAKYPFLI.js.map → chunk-FYECPZKQ.js.map} +0 -0
  76. /package/dist/{chunk-NKAPCKHN.js.map → chunk-GIKZBQY7.js.map} +0 -0
  77. /package/dist/{chunk-GO7JE2MA.js.map → chunk-GMC6DYG7.js.map} +0 -0
  78. /package/dist/{chunk-YVJFUOHY.js.map → chunk-JDHCHN7U.js.map} +0 -0
  79. /package/dist/{chunk-GZFECWWZ.js.map → chunk-KBX2Q3DG.js.map} +0 -0
  80. /package/dist/{chunk-QJ52FRQX.js.map → chunk-L4ETHMN6.js.map} +0 -0
  81. /package/dist/{chunk-U3FNIYWH.js.map → chunk-LICM3H4J.js.map} +0 -0
  82. /package/dist/{chunk-GZTPQMD5.js.map → chunk-MJTTQCJS.js.map} +0 -0
  83. /package/dist/{chunk-KYLVH42N.js.map → chunk-P5TYSLNS.js.map} +0 -0
  84. /package/dist/{chunk-XMQ3EC2B.js.map → chunk-PLVZ64OM.js.map} +0 -0
  85. /package/dist/{chunk-47M2C4SO.js.map → chunk-PP724WVD.js.map} +0 -0
  86. /package/dist/{chunk-TP3VZUQL.js.map → chunk-QENZCLR2.js.map} +0 -0
  87. /package/dist/{chunk-VLL4L5TK.js.map → chunk-R3ZNBC2O.js.map} +0 -0
  88. /package/dist/{chunk-ZJPKYTH5.js.map → chunk-RBPGEUHT.js.map} +0 -0
  89. /package/dist/{chunk-5QJTUA7Y.js.map → chunk-RDJMBYZ2.js.map} +0 -0
  90. /package/dist/{chunk-FJREQSFG.js.map → chunk-SUJFJVAM.js.map} +0 -0
  91. /package/dist/{chunk-IASJVOVO.js.map → chunk-SWKSR5R7.js.map} +0 -0
  92. /package/dist/{chunk-4IBBMLNR.js.map → chunk-TT7DZ6XW.js.map} +0 -0
  93. /package/dist/{chunk-HMOPW3XC.js.map → chunk-TULQAVRC.js.map} +0 -0
  94. /package/dist/{chunk-RFXBV3A2.js.map → chunk-UXTCUMJM.js.map} +0 -0
  95. /package/dist/{chunk-MXEUDSWT.js.map → chunk-V5EI2KEG.js.map} +0 -0
  96. /package/dist/{chunk-6RXP55DL.js.map → chunk-W4PM3PLE.js.map} +0 -0
  97. /package/dist/{cli-circuit-breaker-3CWRA7DZ.js.map → cli-circuit-breaker-VXHOHBE6.js.map} +0 -0
  98. /package/dist/{composite-router-MN6W5CEQ.js.map → composite-router-NJZMYTXG.js.map} +0 -0
  99. /package/dist/{consensus-vote-3EMLBZ25.js.map → consensus-vote-SH5CKJQR.js.map} +0 -0
  100. /package/dist/{context-retriever-OLWFVOJG.js.map → context-retriever-LVW25GWO.js.map} +0 -0
  101. /package/dist/{doctor-deep-W3QB24SM.js.map → doctor-deep-HCT3LW5G.js.map} +0 -0
  102. /package/dist/{expert-bridge-LAB2W5ET.js.map → expert-bridge-FBYWLGB3.js.map} +0 -0
  103. /package/dist/{factory-7ZKKQDCI.js.map → factory-5IYTNTA2.js.map} +0 -0
  104. /package/dist/{factory-JNLNQ67U.js.map → factory-GP5SJCTQ.js.map} +0 -0
  105. /package/dist/{improvement-review-ATYDIHSF.js.map → improvement-review-OUGGPW4A.js.map} +0 -0
  106. /package/dist/{init-opencode-4O2R5S72.js.map → init-opencode-6PZVSSZY.js.map} +0 -0
  107. /package/dist/{issue-triage-G2AKATE4.js.map → issue-triage-TPPWEE5N.js.map} +0 -0
  108. /package/dist/{pr-reviewer-helpers-Y6LEGX2P.js.map → pr-reviewer-helpers-MMVZFL2P.js.map} +0 -0
  109. /package/dist/{registry-command-X6A27TNG.js.map → registry-command-IDC5G3EZ.js.map} +0 -0
  110. /package/dist/{repo-security-plan-356NFHOZ.js.map → repo-security-plan-XL3LTBPN.js.map} +0 -0
  111. /package/dist/{research-helpers-synthesize-7XWIAM5D.js.map → research-helpers-synthesize-6ROTFLGO.js.map} +0 -0
  112. /package/dist/{routing-memory-YTLUUXXX.js.map → routing-memory-YAW2AIRX.js.map} +0 -0
  113. /package/dist/{session-memory-IHQCJWBK.js.map → session-memory-VR3BJMWL.js.map} +0 -0
  114. /package/dist/{setup-command-Q4RVDZOO.js.map → setup-command-SMJX3TES.js.map} +0 -0
  115. /package/dist/{setup-config-UA4M5OQ4.js.map → setup-config-IXZAAYYH.js.map} +0 -0
  116. /package/dist/{setup-custom-api-UXFN75SS.js.map → setup-custom-api-6ZBOVWEU.js.map} +0 -0
  117. /package/dist/{tool-memory-SJ57ZJ5F.js.map → tool-memory-ZKMPHKG5.js.map} +0 -0
  118. /package/dist/{unified-registry-WMJQUA43.js.map → unified-registry-WP4XC656.js.map} +0 -0
  119. /package/dist/{weather-report-WSATZR44.js.map → weather-report-CETWTNE5.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  generateSecurityPlan
3
- } from "./chunk-GO7JE2MA.js";
3
+ } from "./chunk-GMC6DYG7.js";
4
4
  import {
5
5
  CodebaseIndex,
6
6
  extractSymbolIndex,
@@ -13,7 +13,7 @@ import {
13
13
  } from "./chunk-WAYGXUSM.js";
14
14
  import {
15
15
  executeExpert
16
- } from "./chunk-RAAMLWMY.js";
16
+ } from "./chunk-AZFHCHYX.js";
17
17
  import {
18
18
  JobStatusSchema,
19
19
  collectRealVotes,
@@ -31,24 +31,24 @@ import {
31
31
  toJobSummary,
32
32
  warnIfSimulatedOutsideTests,
33
33
  writeJobCancelled
34
- } from "./chunk-HMOPW3XC.js";
34
+ } from "./chunk-TULQAVRC.js";
35
35
  import {
36
36
  normalizeTopicToCanonical,
37
37
  synthesizeResearch
38
- } from "./chunk-ZJPKYTH5.js";
38
+ } from "./chunk-RBPGEUHT.js";
39
39
  import {
40
40
  IssueTriage,
41
41
  createAuditTrail,
42
42
  createGraphAuditBridge,
43
43
  emitPipelinePolicyEvent
44
- } from "./chunk-RFXBV3A2.js";
44
+ } from "./chunk-UXTCUMJM.js";
45
45
  import {
46
46
  resolveEnvMode,
47
47
  sanitizeInput
48
- } from "./chunk-4FFWDTUE.js";
48
+ } from "./chunk-CFXL5LJC.js";
49
49
  import {
50
50
  withPrerequisite
51
- } from "./chunk-JAKYPFLI.js";
51
+ } from "./chunk-FYECPZKQ.js";
52
52
  import {
53
53
  NOOP_NOTIFIER,
54
54
  RateLimiter,
@@ -70,7 +70,7 @@ import {
70
70
  withAccessPolicy,
71
71
  withProgressHeartbeat,
72
72
  wrapToolWithTimeout
73
- } from "./chunk-BKZ5YD66.js";
73
+ } from "./chunk-BPGSM6U5.js";
74
74
  import {
75
75
  analyzeGitHubRepo
76
76
  } from "./chunk-HFOQKCD2.js";
@@ -101,29 +101,29 @@ import {
101
101
  parseRegistry,
102
102
  sourceExistsInRegistry,
103
103
  summarizeContextForPrompt
104
- } from "./chunk-47M2C4SO.js";
104
+ } from "./chunk-PP724WVD.js";
105
105
  import {
106
106
  getTokenEnvVars,
107
107
  resolveToken
108
- } from "./chunk-XMQ3EC2B.js";
108
+ } from "./chunk-PLVZ64OM.js";
109
109
  import {
110
110
  loadPapersRegistry,
111
111
  loadTechniquesRegistry
112
- } from "./chunk-U3FNIYWH.js";
112
+ } from "./chunk-LICM3H4J.js";
113
113
  import {
114
114
  DEFAULT_RELEVANCE_CONFIG,
115
115
  MemoryImportance,
116
116
  calculateTextJaccardSimilarity,
117
117
  getToolMemory
118
- } from "./chunk-JQHZS7GU.js";
118
+ } from "./chunk-4SDY75WA.js";
119
119
  import {
120
120
  createSessionMemory
121
- } from "./chunk-QJ52FRQX.js";
121
+ } from "./chunk-L4ETHMN6.js";
122
122
  import {
123
123
  DEFAULT_TASK_TTL_MS,
124
124
  DEFAULT_TOOL_RATE_LIMITS,
125
125
  clampTaskTtl
126
- } from "./chunk-6RXP55DL.js";
126
+ } from "./chunk-W4PM3PLE.js";
127
127
  import {
128
128
  resolveInsideRoot
129
129
  } from "./chunk-NUBSJGQZ.js";
@@ -145,7 +145,7 @@ import {
145
145
  createEvent,
146
146
  getGlobalEventBus,
147
147
  getGlobalRegistry
148
- } from "./chunk-NKAPCKHN.js";
148
+ } from "./chunk-GIKZBQY7.js";
149
149
  import {
150
150
  CliDetectionCache,
151
151
  asRecord,
@@ -153,19 +153,19 @@ import {
153
153
  getAvailableClis,
154
154
  sleep,
155
155
  withTimeout
156
- } from "./chunk-EORN73QB.js";
156
+ } from "./chunk-CXGIRMHT.js";
157
157
  import {
158
158
  DEFAULTS
159
- } from "./chunk-GZFECWWZ.js";
159
+ } from "./chunk-KBX2Q3DG.js";
160
160
  import {
161
161
  getAvailabilityCache,
162
162
  getCliForModelId,
163
163
  resolveFallback
164
- } from "./chunk-FJREQSFG.js";
164
+ } from "./chunk-SUJFJVAM.js";
165
165
  import {
166
166
  generateHyphenId,
167
167
  generateUUID
168
- } from "./chunk-KYLVH42N.js";
168
+ } from "./chunk-P5TYSLNS.js";
169
169
  import {
170
170
  AGENT_ROUTER_TIMEOUTS,
171
171
  API_TIMEOUTS,
@@ -204,6 +204,7 @@ import {
204
204
  WorkflowError,
205
205
  buildCapabilityProfiles,
206
206
  buildDefaultModelSources,
207
+ buildResearchContext,
207
208
  categorizeOutcomeError,
208
209
  categorizeOutcomeErrorMessage,
209
210
  clamp,
@@ -212,6 +213,7 @@ import {
212
213
  createLogger,
213
214
  createSharedTaskAnalyzer,
214
215
  deriveEntry,
216
+ deriveResearchMaturity,
215
217
  detectCapabilityGaps,
216
218
  detectTaskCategory,
217
219
  detectTrend,
@@ -245,12 +247,13 @@ import {
245
247
  modelSupportsAll,
246
248
  ok,
247
249
  recordRoutingGaps,
250
+ researchContextFromText,
248
251
  resolveModelIdentity,
249
252
  resolveModelIdentitySync,
250
253
  routingArmDisplaySlot,
251
254
  toExpertTaskAnalysisResult,
252
255
  withStep
253
- } from "./chunk-VBAGMX5I.js";
256
+ } from "./chunk-MII2DHXL.js";
254
257
  import {
255
258
  ensureLearningDir,
256
259
  getMetaOutcomesFile,
@@ -26278,7 +26281,7 @@ function execIdFields(executionId) {
26278
26281
  async function populateUnifiedContextOnState(state, options) {
26279
26282
  const taskCandidate = state["task"];
26280
26283
  if (typeof taskCandidate !== "string" || taskCandidate === "") return;
26281
- const { getContextForTask: getContextForTask2, inferTaskCategory: inferTaskCategory2 } = await import("./context-retriever-OLWFVOJG.js");
26284
+ const { getContextForTask: getContextForTask2, inferTaskCategory: inferTaskCategory2 } = await import("./context-retriever-LVW25GWO.js");
26282
26285
  const category = inferTaskCategory2(taskCandidate);
26283
26286
  const executionId = options?.executionId;
26284
26287
  const execFields = execIdFields(executionId);
@@ -41177,7 +41180,7 @@ async function tryIssueTriage(task) {
41177
41180
  try {
41178
41181
  const issueMatch = task.match(/github\.com\/([^/]+\/[^/]+)\/issues\/(\d+)/);
41179
41182
  if (issueMatch === null) return null;
41180
- const { createIssueTriage } = await import("./issue-triage-G2AKATE4.js");
41183
+ const { createIssueTriage } = await import("./issue-triage-TPPWEE5N.js");
41181
41184
  const triage = createIssueTriage();
41182
41185
  const owner = issueMatch[1] ?? "";
41183
41186
  const num = issueMatch[2] ?? "";
@@ -41205,7 +41208,7 @@ var VALID_TEMPLATES = /* @__PURE__ */ new Set([
41205
41208
  ]);
41206
41209
  async function classifyWithLLM(task) {
41207
41210
  try {
41208
- const { executeExpert: executeExpert2 } = await import("./expert-bridge-LAB2W5ET.js");
41211
+ const { executeExpert: executeExpert2 } = await import("./expert-bridge-FBYWLGB3.js");
41209
41212
  const prompt = [
41210
41213
  "Classify this task into exactly one pipeline template.",
41211
41214
  "Templates: dev (implementation/bug fix/refactor), research (investigate/evaluate/compare),",
@@ -41669,7 +41672,7 @@ async function runDevPipeline(task, stages, options) {
41669
41672
  }
41670
41673
  async function runDevPipelineInner(task, stages, options, sid, prior) {
41671
41674
  const { beliefMemory: bm, auditLogger, trustTier } = options ?? {};
41672
- const { planResult } = await runPlanningPhase(task, stages, prior, options);
41675
+ const { planResult, researchMaturity } = await runPlanningPhase(task, stages, prior, options);
41673
41676
  if (options?.dryRun === true) {
41674
41677
  logger39.info("Dry run \u2014 stopping after plan+vote");
41675
41678
  return buildDryRunResult(planResult);
@@ -41678,7 +41681,8 @@ async function runDevPipelineInner(task, stages, options, sid, prior) {
41678
41681
  const tasks = await runOrResumeDecompose(prior, planResult.plan, stages, {
41679
41682
  conditional: planResult.conditional,
41680
41683
  conditions: planResult.conditions,
41681
- caveats: planResult.caveats
41684
+ caveats: planResult.caveats,
41685
+ researchMaturity
41682
41686
  });
41683
41687
  if (sid !== void 0) saveStageCheckpoint(sid, "decompose", { type: "decompose", tasks });
41684
41688
  if (options?.mode === "harness") {
@@ -41874,31 +41878,33 @@ function buildDryRunResult(planResult) {
41874
41878
  };
41875
41879
  }
41876
41880
  async function resolveResearch(prior, task, stages, options) {
41877
- return runOrResume(
41878
- prior,
41879
- "research",
41880
- () => withStep(
41881
- { name: "research", kind: "pipeline.stage", attrs: { task: task.slice(0, 100) } },
41882
- async (ctx) => {
41883
- const override = options?.researchOverride;
41884
- if (override !== void 0) {
41885
- ctx.setSummary(`override: ${String(override.length)} chars`);
41886
- return override;
41887
- }
41888
- options?.untrustedInputGuard?.();
41889
- const r = await stages.research(task);
41890
- ctx.setSummary(`${String(r.length)} chars`);
41891
- return r;
41892
- }
41893
- )
41881
+ if (prior?.research !== void 0) {
41882
+ logger39.info("Resuming from checkpoint", { stage: "research" });
41883
+ return researchContextFromText(prior.research);
41884
+ }
41885
+ const override = options?.researchOverride;
41886
+ if (override !== void 0) {
41887
+ return researchContextFromText(override);
41888
+ }
41889
+ options?.untrustedInputGuard?.();
41890
+ return withStep(
41891
+ { name: "research", kind: "pipeline.stage", attrs: { task: task.slice(0, 100) } },
41892
+ async (ctx) => {
41893
+ const rc = await stages.research(task);
41894
+ ctx.setSummary(`${String(rc.text.length)} chars`);
41895
+ return rc;
41896
+ }
41894
41897
  );
41895
41898
  }
41896
41899
  async function runPlanningPhase(task, stages, prior, options) {
41897
41900
  const sid = options?.sessionId;
41898
41901
  const bm = options?.beliefMemory;
41899
41902
  const research = await resolveResearch(prior, task, stages, options);
41900
- if (sid !== void 0) saveStageCheckpoint(sid, "research", { type: "research", text: research });
41901
- const planContext = await assemblePlanContext(research, task, sid, bm);
41903
+ const researchMaturity = deriveResearchMaturity(research.metadata);
41904
+ if (sid !== void 0) {
41905
+ saveStageCheckpoint(sid, "research", { type: "research", text: research.text });
41906
+ }
41907
+ const planContext = await assemblePlanContext(research.text, task, sid, bm);
41902
41908
  const planResult = await runPlanOrResume(prior, task, planContext, stages, sid);
41903
41909
  if (sid !== void 0) {
41904
41910
  saveStageCheckpoint(sid, "plan", {
@@ -41915,7 +41921,7 @@ async function runPlanningPhase(task, stages, prior, options) {
41915
41921
  iterations: planResult.iterations
41916
41922
  });
41917
41923
  }
41918
- return { planResult };
41924
+ return { planResult, researchMaturity };
41919
41925
  }
41920
41926
  function buildHarnessResult(planResult, tasks) {
41921
41927
  return {
@@ -41983,13 +41989,6 @@ async function runQualityGateStage(stages, mode) {
41983
41989
  }
41984
41990
  );
41985
41991
  }
41986
- async function runOrResume(prior, stage, run) {
41987
- if (prior?.research !== void 0 && stage === "research") {
41988
- logger39.info("Resuming from checkpoint", { stage });
41989
- return prior.research;
41990
- }
41991
- return run();
41992
- }
41993
41992
  async function runPlanOrResume(prior, task, research, stages, sessionId) {
41994
41993
  if (prior?.plan !== void 0) {
41995
41994
  logger39.info("Resuming from checkpoint", { stage: "plan", sessionId });
@@ -42013,14 +42012,11 @@ async function runOrResumeDecompose(prior, plan, stages, meta) {
42013
42012
  ctx.setSummary(`${String(r.length)} tasks`);
42014
42013
  return r;
42015
42014
  });
42016
- if (meta.conditional && tasks.length > 0) {
42017
- return tasks.map((t) => ({
42018
- ...t,
42019
- conditions: meta.conditions,
42020
- caveats: meta.caveats
42021
- }));
42022
- }
42023
- return tasks;
42015
+ return tasks.map((t) => ({
42016
+ ...t,
42017
+ ...meta.conditional ? { conditions: meta.conditions, caveats: meta.caveats } : {},
42018
+ ...meta.researchMaturity !== void 0 ? { researchMaturity: meta.researchMaturity } : {}
42019
+ }));
42024
42020
  }
42025
42021
  function extractConditionalMeta(vote) {
42026
42022
  if (vote.kind === "conditional_go") {
@@ -42077,7 +42073,9 @@ async function implementSingleTask(task, stages) {
42077
42073
  description: task.description,
42078
42074
  assignedTo: task.assignedTo,
42079
42075
  status: "rejected",
42080
- feedback
42076
+ feedback,
42077
+ // #3234: preserve research-maturity across the rejection reconstruction.
42078
+ researchMaturity: task.researchMaturity
42081
42079
  };
42082
42080
  }
42083
42081
  return stages.implement(currentTask);
@@ -42095,7 +42093,9 @@ async function implementSingleTask(task, stages) {
42095
42093
  assignedTo: task.assignedTo,
42096
42094
  status: qaResult.approved ? "done" : "rejected",
42097
42095
  implementation: qaResult.output,
42098
- feedback: qaResult.feedback
42096
+ feedback: qaResult.feedback,
42097
+ // #3234: preserve research-maturity through to the final task.
42098
+ researchMaturity: task.researchMaturity
42099
42099
  };
42100
42100
  return { iterations: qaResult.iterations, task: finalTask };
42101
42101
  }
@@ -42838,57 +42838,6 @@ async function runQualityGate(stage, checks, iteration = 1) {
42838
42838
  };
42839
42839
  }
42840
42840
 
42841
- // src/pipeline/research-context.ts
42842
- var MAX_RENDERED_ITEMS = 8;
42843
- function sanitizeExternal(value, maxLen = 160) {
42844
- const collapsed = value.replace(/`/g, "").replace(/[-]/g, " ").replace(/\s+/g, " ").trim();
42845
- return collapsed.length > maxLen ? `${collapsed.slice(0, maxLen - 1)}\u2026` : collapsed;
42846
- }
42847
- function buildResearchContextMetadata(discover, analyze) {
42848
- const discoveredItems = discover.items.map((item) => ({
42849
- title: item.title,
42850
- url: item.url,
42851
- ...item.relevanceScore !== void 0 ? { relevanceScore: item.relevanceScore } : {},
42852
- alreadyInRegistry: item.alreadyInRegistry
42853
- })).sort((a, b) => (b.relevanceScore ?? 0) - (a.relevanceScore ?? 0));
42854
- return {
42855
- discoveredItems,
42856
- recommendations: analyze?.recommendations ?? [],
42857
- qualitySignals: {
42858
- totalFound: discover.totalFound,
42859
- newItems: discover.newItems,
42860
- alreadyInRegistry: discover.alreadyInRegistry
42861
- }
42862
- };
42863
- }
42864
- function renderResearchText(metadata, topic) {
42865
- const { discoveredItems, recommendations, qualitySignals } = metadata;
42866
- const lines = [];
42867
- lines.push(`[Research] ${sanitizeExternal(topic, 120)}`);
42868
- lines.push(
42869
- `Maturity: ${String(qualitySignals.totalFound)} found, ${String(qualitySignals.newItems)} new, ${String(qualitySignals.alreadyInRegistry)} already in registry.`
42870
- );
42871
- if (discoveredItems.length > 0) {
42872
- lines.push("Top discoveries (by relevance):");
42873
- for (const item of discoveredItems.slice(0, MAX_RENDERED_ITEMS)) {
42874
- const score = item.relevanceScore !== void 0 ? item.relevanceScore.toFixed(2) : "n/a";
42875
- const known = item.alreadyInRegistry ? " [in registry]" : "";
42876
- lines.push(`- ${sanitizeExternal(item.title)} (relevance ${score})${known}`);
42877
- }
42878
- } else {
42879
- lines.push("Top discoveries (by relevance): none.");
42880
- }
42881
- if (recommendations.length > 0) {
42882
- lines.push("Gap recommendations:");
42883
- for (const rec of recommendations) lines.push(`- ${sanitizeExternal(rec)}`);
42884
- }
42885
- return lines.join("\n");
42886
- }
42887
- function buildResearchContext(discover, analyze, topic = discover.topic) {
42888
- const metadata = buildResearchContextMetadata(discover, analyze);
42889
- return { text: renderResearchText(metadata, topic), metadata };
42890
- }
42891
-
42892
42841
  // src/pipeline/budget-guard.ts
42893
42842
  var BudgetGuard = class {
42894
42843
  breaker;
@@ -43018,7 +42967,7 @@ var memoryInitPromise = null;
43018
42967
  async function initPipelineMemory() {
43019
42968
  if (cachedMemory !== null) return cachedMemory;
43020
42969
  try {
43021
- const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-IHQCJWBK.js");
42970
+ const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-VR3BJMWL.js");
43022
42971
  const { getLearningDir } = await import("./learning-persistence-C737Q6EP.js");
43023
42972
  const mem = createSessionMemory2(getLearningDir());
43024
42973
  mem.startSession(`pipeline-${String(getTimeProvider().now())}`);
@@ -43066,8 +43015,13 @@ function flushPipelineMemory() {
43066
43015
  }
43067
43016
  var routingMemoryCache = null;
43068
43017
  var routingMemoryInitPromise = null;
43069
- function recordRoutingExperience(category, success, durationMs, tokensUsed = 0) {
43070
- const metrics = { durationMs, tokensUsed };
43018
+ function recordRoutingExperience(category, success, durationMs, tokensUsed = 0, researchMaturity) {
43019
+ const metrics = {
43020
+ durationMs,
43021
+ tokensUsed,
43022
+ // #3234: record the run's research-maturity (RECORD + measure; #3815 gates use).
43023
+ ...researchMaturity !== void 0 ? { researchMaturity } : {}
43024
+ };
43071
43025
  const callRecord = (rm) => {
43072
43026
  rm.recordExperience(category, ["claude"], success, metrics);
43073
43027
  };
@@ -43075,7 +43029,7 @@ function recordRoutingExperience(category, success, durationMs, tokensUsed = 0)
43075
43029
  callRecord(routingMemoryCache);
43076
43030
  return;
43077
43031
  }
43078
- routingMemoryInitPromise ??= import("./routing-memory-YTLUUXXX.js").then(({ createRoutingMemory }) => {
43032
+ routingMemoryInitPromise ??= import("./routing-memory-YAW2AIRX.js").then(({ createRoutingMemory }) => {
43079
43033
  routingMemoryCache ??= createRoutingMemory();
43080
43034
  return routingMemoryCache;
43081
43035
  }).catch((error) => {
@@ -43109,7 +43063,7 @@ ${text}` : "";
43109
43063
  }
43110
43064
  async function getWeatherContext() {
43111
43065
  try {
43112
- const { generateWeatherReport: generateWeatherReport2 } = await import("./weather-report-WSATZR44.js");
43066
+ const { generateWeatherReport: generateWeatherReport2 } = await import("./weather-report-CETWTNE5.js");
43113
43067
  const report = generateWeatherReport2({ includeAdaptive: true });
43114
43068
  const mappings = "recommendedMappings" in report ? report.recommendedMappings : [];
43115
43069
  if (!Array.isArray(mappings) || mappings.length === 0) return "";
@@ -43127,7 +43081,7 @@ ${lines}
43127
43081
  }
43128
43082
  async function getMemoryContext(task) {
43129
43083
  try {
43130
- const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-IHQCJWBK.js");
43084
+ const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-VR3BJMWL.js");
43131
43085
  const { getLearningDir } = await import("./learning-persistence-C737Q6EP.js");
43132
43086
  const memory = createSessionMemory2(getLearningDir(), { maxLearningsInContext: 10 });
43133
43087
  const learnings = memory.searchLearnings(task.slice(0, 200));
@@ -43192,14 +43146,15 @@ function createAgentStages(config = {}) {
43192
43146
  "Research",
43193
43147
  `Done (${String(ctx.metadata.discoveredItems.length)} items, ${String(durationMs)}ms)`
43194
43148
  );
43195
- return memoryCtx ? `${ctx.text}${memoryCtx}` : ctx.text;
43149
+ const text = memoryCtx ? `${ctx.text}${memoryCtx}` : ctx.text;
43150
+ return { text, metadata: ctx.metadata };
43196
43151
  } catch (error) {
43197
43152
  const durationMs = getTimeProvider().now() - start;
43198
43153
  emitStageEvent2("research", "failed", { durationMs });
43199
43154
  logger44.debug("Research stage failed; continuing with minimal context", {
43200
43155
  error: error instanceof Error ? error.message : String(error)
43201
43156
  });
43202
- return `[Research failed] ${task.slice(0, 500)}`;
43157
+ return researchContextFromText(`[Research failed] ${task.slice(0, 500)}`);
43203
43158
  }
43204
43159
  },
43205
43160
  plan: async (task, research, feedback) => {
@@ -43238,7 +43193,7 @@ ${contextBlock}`;
43238
43193
  const strategy = config.votingStrategy ?? "higher_order";
43239
43194
  await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
43240
43195
  try {
43241
- const { executeVoting } = await import("./consensus-vote-3EMLBZ25.js");
43196
+ const { executeVoting } = await import("./consensus-vote-SH5CKJQR.js");
43242
43197
  const votingResult = await executeVoting(
43243
43198
  {
43244
43199
  proposal: buildVoteProposal(plan, research),
@@ -43335,7 +43290,13 @@ ${task.description}${fb}`,
43335
43290
  success: r.success,
43336
43291
  durationMs: r.durationMs
43337
43292
  });
43338
- recordRoutingExperience("code_generation", r.success, r.durationMs, r.tokensUsed);
43293
+ recordRoutingExperience(
43294
+ "code_generation",
43295
+ r.success,
43296
+ r.durationMs,
43297
+ r.tokensUsed,
43298
+ task.researchMaturity
43299
+ );
43339
43300
  await postProgress(config, `Code [${task.id}]`, `Done (${r.durationMs}ms)`);
43340
43301
  return r.text || `[Implementation failed: ${r.error}]`;
43341
43302
  },
@@ -43512,7 +43473,7 @@ ${codeContext}`;
43512
43473
  ${enrichedTask}`;
43513
43474
  }
43514
43475
  const result = await stages.research(enrichedTask);
43515
- return output(PIPELINE_STATE_KEYS.RESEARCH, result, getTimeProvider().now() - start, true);
43476
+ return output(PIPELINE_STATE_KEYS.RESEARCH, result.text, getTimeProvider().now() - start, true);
43516
43477
  } catch (e) {
43517
43478
  return failOutput(PIPELINE_STATE_KEYS.RESEARCH, getErrorMessage(e), getTimeProvider().now() - start);
43518
43479
  }
@@ -43669,7 +43630,7 @@ async function searchCodebaseForTask(task) {
43669
43630
  }
43670
43631
  async function queryResearchRegistry(task) {
43671
43632
  try {
43672
- const { synthesizeResearch: synthesizeResearch2 } = await import("./research-helpers-synthesize-7XWIAM5D.js");
43633
+ const { synthesizeResearch: synthesizeResearch2 } = await import("./research-helpers-synthesize-6ROTFLGO.js");
43673
43634
  const topic = task.split(/[.!?\n]/).filter((s) => s.trim().length > 10)[0]?.trim();
43674
43635
  if (topic === void 0) return null;
43675
43636
  const result = await synthesizeResearch2(topic.slice(0, 50));
@@ -43740,7 +43701,7 @@ function createScanStageWrapper() {
43740
43701
  try {
43741
43702
  const slug = ctx.task.match(/([a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+)/)?.[1];
43742
43703
  if (slug !== void 0) {
43743
- const { generateSecurityPlan: generateSecurityPlan2 } = await import("./repo-security-plan-356NFHOZ.js");
43704
+ const { generateSecurityPlan: generateSecurityPlan2 } = await import("./repo-security-plan-XL3LTBPN.js");
43744
43705
  const plan = await generateSecurityPlan2({ repo: slug, maxScanners: 10 });
43745
43706
  const recs = plan.recommendations.slice(0, 5).map((r) => `${r.priority}: ${r.displayName} (${r.category})`).join("; ");
43746
43707
  return output(PIPELINE_STATE_KEYS.FINDINGS, recs, getTimeProvider().now() - start, true);
@@ -45791,7 +45752,7 @@ var GitHubTaskTracker = class {
45791
45752
  cachedProvider = null;
45792
45753
  async getProvider() {
45793
45754
  if (this.cachedProvider !== null) return this.cachedProvider;
45794
- const { createScmProvider } = await import("./factory-7ZKKQDCI.js");
45755
+ const { createScmProvider } = await import("./factory-GP5SJCTQ.js");
45795
45756
  const result = await createScmProvider({ repo: this.config.repo ?? "" });
45796
45757
  if (!result.ok) throw new Error(`SCM provider error: ${result.error.message}`);
45797
45758
  this.cachedProvider = result.value;
@@ -46563,7 +46524,7 @@ async function probeSource(source, includeModelIds) {
46563
46524
  }
46564
46525
  }
46565
46526
  async function defaultSources(includeOpenRouter) {
46566
- const { createAllAdapters: createAllAdapters2 } = await import("./factory-JNLNQ67U.js");
46527
+ const { createAllAdapters: createAllAdapters2 } = await import("./factory-5IYTNTA2.js");
46567
46528
  const adapters = createAllAdapters2();
46568
46529
  return buildDefaultModelSources(adapters, { includeOpenRouter });
46569
46530
  }
@@ -50582,4 +50543,4 @@ export {
50582
50543
  shutdownFeedbackSubscriber,
50583
50544
  createEventBusBridge
50584
50545
  };
50585
- //# sourceMappingURL=chunk-SDLDZL4K.js.map
50546
+ //# sourceMappingURL=chunk-KOICNQMN.js.map