nexus-agents 2.166.0 → 2.166.3

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/{child-mcp-config-LQ4IKFSN.js → child-mcp-config-AUA4TFBG.js} +2 -2
  2. package/dist/{chunk-3HVF4BG4.js → chunk-3LVB5OE2.js} +2 -2
  3. package/dist/{chunk-YPPYRLDF.js → chunk-6LXTT6AK.js} +2 -2
  4. package/dist/{chunk-YOFRUVPJ.js → chunk-76Q6GTPU.js} +2 -2
  5. package/dist/{chunk-3ACDP4E6.js → chunk-AO4X3BMP.js} +26 -9
  6. package/dist/chunk-AO4X3BMP.js.map +1 -0
  7. package/dist/{chunk-RXI5ONP7.js → chunk-AWPSFL5C.js} +2 -2
  8. package/dist/{chunk-NBPA4PQD.js → chunk-BFDVV3Q3.js} +2 -2
  9. package/dist/{chunk-MYNI3CYT.js → chunk-BZFF3YWU.js} +4 -4
  10. package/dist/{chunk-LQ2ABFLI.js → chunk-DMFMJFRY.js} +2 -2
  11. package/dist/{chunk-TZNJCTNQ.js → chunk-F2YZ3U6O.js} +2 -2
  12. package/dist/{chunk-2255SARF.js → chunk-FKHQWC2L.js} +2 -2
  13. package/dist/{chunk-55NRU7SV.js → chunk-FQNG6ZIW.js} +8 -8
  14. package/dist/{chunk-2UMMVKUW.js → chunk-FZV4YAYT.js} +3 -3
  15. package/dist/{chunk-33X5V4PL.js → chunk-GS3UPAUE.js} +2 -2
  16. package/dist/{chunk-U43BUJSN.js → chunk-HNAFWKJG.js} +7 -7
  17. package/dist/{chunk-MQUSJVER.js → chunk-I7OZP6FS.js} +4 -4
  18. package/dist/{chunk-RBN4WXOA.js → chunk-IF46G2LM.js} +2 -2
  19. package/dist/{chunk-RC5SCDGF.js → chunk-JBH4CU46.js} +180 -86
  20. package/dist/{chunk-RC5SCDGF.js.map → chunk-JBH4CU46.js.map} +1 -1
  21. package/dist/{chunk-CVLVWHXG.js → chunk-JYVPM37A.js} +5 -5
  22. package/dist/{chunk-LUP26FMZ.js → chunk-K2IX6BEK.js} +4 -4
  23. package/dist/{chunk-ZNY7MM2J.js → chunk-LRBEUBZ3.js} +3 -3
  24. package/dist/{chunk-FKOWIKR4.js → chunk-NEQJSYJH.js} +3 -3
  25. package/dist/{chunk-LKSG75LC.js → chunk-OI6H3DL6.js} +4 -4
  26. package/dist/{chunk-TFYQRAWT.js → chunk-ORRKK563.js} +3 -3
  27. package/dist/{chunk-6PYVTJZF.js → chunk-P54BDACX.js} +2 -2
  28. package/dist/{chunk-DUUMMELV.js → chunk-PRSGZQNB.js} +3 -3
  29. package/dist/{chunk-OUBDTDTC.js → chunk-PXTZ6RPP.js} +7 -7
  30. package/dist/{chunk-SF2AK3JB.js → chunk-THI3VWHO.js} +2 -2
  31. package/dist/{chunk-WOQCCQSE.js → chunk-UO6C5J5D.js} +5 -5
  32. package/dist/{chunk-JV64QX3Y.js → chunk-UWRDWX6L.js} +2 -2
  33. package/dist/{chunk-3SMFRAX5.js → chunk-V5RPW2ZX.js} +3 -3
  34. package/dist/{chunk-JBZMUKT4.js → chunk-WL4SGKAW.js} +2 -2
  35. package/dist/{chunk-3GYRM7D6.js → chunk-WOY6TQCH.js} +33 -9
  36. package/dist/{chunk-3GYRM7D6.js.map → chunk-WOY6TQCH.js.map} +1 -1
  37. package/dist/{chunk-NXJJZEUO.js → chunk-YKTVN2TF.js} +2 -2
  38. package/dist/{chunk-PZ3BB3PO.js → chunk-Z66EEQ4A.js} +3 -3
  39. package/dist/{chunk-IXZXG2MY.js → chunk-ZI4PO2A3.js} +7 -7
  40. package/dist/{cli-circuit-breaker-5IGBBD7R.js → cli-circuit-breaker-FSUDU7BV.js} +4 -4
  41. package/dist/cli.js +135 -108
  42. package/dist/cli.js.map +1 -1
  43. package/dist/codebase-search-DKLEA4PR.js +12 -0
  44. package/dist/{composite-router-62KI56W6.js → composite-router-HC4YLG5W.js} +2 -2
  45. package/dist/{consensus-vote-M4ZELBV4.js → consensus-vote-KWPS6WNH.js} +15 -15
  46. package/dist/{context-retriever-5UJC5KDZ.js → context-retriever-YCKTCDGM.js} +10 -8
  47. package/dist/{doctor-deep-7OR5MYMI.js → doctor-deep-4UARVVSD.js} +3 -3
  48. package/dist/{expert-bridge-BNMCDENK.js → expert-bridge-EAR6XZJA.js} +4 -4
  49. package/dist/{factory-QLW773DP.js → factory-7SVW7XMV.js} +5 -5
  50. package/dist/{factory-77GX5DG4.js → factory-JYAUOFEN.js} +8 -8
  51. package/dist/{improvement-review-KDM6OL25.js → improvement-review-AHSY5ZXD.js} +5 -5
  52. package/dist/index.d.ts +3 -0
  53. package/dist/index.js +31 -31
  54. package/dist/{init-opencode-FXKABSGS.js → init-opencode-5BKE7UEB.js} +6 -6
  55. package/dist/{issue-triage-OVX4VSUN.js → issue-triage-TNV4R33I.js} +6 -6
  56. package/dist/{pr-reviewer-helpers-VGIBNZBX.js → pr-reviewer-helpers-ZC2I5ZYD.js} +4 -4
  57. package/dist/{registry-command-CGMRLZQ2.js → registry-command-O2GLHG3G.js} +2 -2
  58. package/dist/{repo-security-plan-TBCMGL5Z.js → repo-security-plan-CFRLHIMY.js} +3 -3
  59. package/dist/{research-helpers-synthesize-76ZZYWJ5.js → research-helpers-synthesize-ONWBGXHO.js} +4 -4
  60. package/dist/{routing-memory-PZ4LTLXJ.js → routing-memory-XHZKEPUH.js} +2 -2
  61. package/dist/{session-memory-C55R7LGY.js → session-memory-5QVKDE4U.js} +3 -3
  62. package/dist/{setup-command-HMXY5UHN.js → setup-command-G7OB4QQG.js} +11 -11
  63. package/dist/{setup-config-SMRMMT6Z.js → setup-config-MMBOL5CW.js} +3 -3
  64. package/dist/{setup-custom-api-42JXTJHU.js → setup-custom-api-RQ3BUMJC.js} +3 -3
  65. package/dist/{tool-memory-LCDNVPFI.js → tool-memory-VK4IZLPN.js} +5 -5
  66. package/dist/{unified-registry-XEXWGKV5.js → unified-registry-ZOTGM4EY.js} +9 -9
  67. package/dist/{weather-report-DPADAXFN.js → weather-report-MPD66LKP.js} +2 -2
  68. package/package.json +5 -5
  69. package/dist/chunk-3ACDP4E6.js.map +0 -1
  70. package/dist/codebase-search-PWMWLU7O.js +0 -8
  71. /package/dist/{child-mcp-config-LQ4IKFSN.js.map → child-mcp-config-AUA4TFBG.js.map} +0 -0
  72. /package/dist/{chunk-3HVF4BG4.js.map → chunk-3LVB5OE2.js.map} +0 -0
  73. /package/dist/{chunk-YPPYRLDF.js.map → chunk-6LXTT6AK.js.map} +0 -0
  74. /package/dist/{chunk-YOFRUVPJ.js.map → chunk-76Q6GTPU.js.map} +0 -0
  75. /package/dist/{chunk-RXI5ONP7.js.map → chunk-AWPSFL5C.js.map} +0 -0
  76. /package/dist/{chunk-NBPA4PQD.js.map → chunk-BFDVV3Q3.js.map} +0 -0
  77. /package/dist/{chunk-MYNI3CYT.js.map → chunk-BZFF3YWU.js.map} +0 -0
  78. /package/dist/{chunk-LQ2ABFLI.js.map → chunk-DMFMJFRY.js.map} +0 -0
  79. /package/dist/{chunk-TZNJCTNQ.js.map → chunk-F2YZ3U6O.js.map} +0 -0
  80. /package/dist/{chunk-2255SARF.js.map → chunk-FKHQWC2L.js.map} +0 -0
  81. /package/dist/{chunk-55NRU7SV.js.map → chunk-FQNG6ZIW.js.map} +0 -0
  82. /package/dist/{chunk-2UMMVKUW.js.map → chunk-FZV4YAYT.js.map} +0 -0
  83. /package/dist/{chunk-33X5V4PL.js.map → chunk-GS3UPAUE.js.map} +0 -0
  84. /package/dist/{chunk-U43BUJSN.js.map → chunk-HNAFWKJG.js.map} +0 -0
  85. /package/dist/{chunk-MQUSJVER.js.map → chunk-I7OZP6FS.js.map} +0 -0
  86. /package/dist/{chunk-RBN4WXOA.js.map → chunk-IF46G2LM.js.map} +0 -0
  87. /package/dist/{chunk-CVLVWHXG.js.map → chunk-JYVPM37A.js.map} +0 -0
  88. /package/dist/{chunk-LUP26FMZ.js.map → chunk-K2IX6BEK.js.map} +0 -0
  89. /package/dist/{chunk-ZNY7MM2J.js.map → chunk-LRBEUBZ3.js.map} +0 -0
  90. /package/dist/{chunk-FKOWIKR4.js.map → chunk-NEQJSYJH.js.map} +0 -0
  91. /package/dist/{chunk-LKSG75LC.js.map → chunk-OI6H3DL6.js.map} +0 -0
  92. /package/dist/{chunk-TFYQRAWT.js.map → chunk-ORRKK563.js.map} +0 -0
  93. /package/dist/{chunk-6PYVTJZF.js.map → chunk-P54BDACX.js.map} +0 -0
  94. /package/dist/{chunk-DUUMMELV.js.map → chunk-PRSGZQNB.js.map} +0 -0
  95. /package/dist/{chunk-OUBDTDTC.js.map → chunk-PXTZ6RPP.js.map} +0 -0
  96. /package/dist/{chunk-SF2AK3JB.js.map → chunk-THI3VWHO.js.map} +0 -0
  97. /package/dist/{chunk-WOQCCQSE.js.map → chunk-UO6C5J5D.js.map} +0 -0
  98. /package/dist/{chunk-JV64QX3Y.js.map → chunk-UWRDWX6L.js.map} +0 -0
  99. /package/dist/{chunk-3SMFRAX5.js.map → chunk-V5RPW2ZX.js.map} +0 -0
  100. /package/dist/{chunk-JBZMUKT4.js.map → chunk-WL4SGKAW.js.map} +0 -0
  101. /package/dist/{chunk-NXJJZEUO.js.map → chunk-YKTVN2TF.js.map} +0 -0
  102. /package/dist/{chunk-PZ3BB3PO.js.map → chunk-Z66EEQ4A.js.map} +0 -0
  103. /package/dist/{chunk-IXZXG2MY.js.map → chunk-ZI4PO2A3.js.map} +0 -0
  104. /package/dist/{cli-circuit-breaker-5IGBBD7R.js.map → cli-circuit-breaker-FSUDU7BV.js.map} +0 -0
  105. /package/dist/{codebase-search-PWMWLU7O.js.map → codebase-search-DKLEA4PR.js.map} +0 -0
  106. /package/dist/{composite-router-62KI56W6.js.map → composite-router-HC4YLG5W.js.map} +0 -0
  107. /package/dist/{consensus-vote-M4ZELBV4.js.map → consensus-vote-KWPS6WNH.js.map} +0 -0
  108. /package/dist/{context-retriever-5UJC5KDZ.js.map → context-retriever-YCKTCDGM.js.map} +0 -0
  109. /package/dist/{doctor-deep-7OR5MYMI.js.map → doctor-deep-4UARVVSD.js.map} +0 -0
  110. /package/dist/{expert-bridge-BNMCDENK.js.map → expert-bridge-EAR6XZJA.js.map} +0 -0
  111. /package/dist/{factory-77GX5DG4.js.map → factory-7SVW7XMV.js.map} +0 -0
  112. /package/dist/{factory-QLW773DP.js.map → factory-JYAUOFEN.js.map} +0 -0
  113. /package/dist/{improvement-review-KDM6OL25.js.map → improvement-review-AHSY5ZXD.js.map} +0 -0
  114. /package/dist/{init-opencode-FXKABSGS.js.map → init-opencode-5BKE7UEB.js.map} +0 -0
  115. /package/dist/{issue-triage-OVX4VSUN.js.map → issue-triage-TNV4R33I.js.map} +0 -0
  116. /package/dist/{pr-reviewer-helpers-VGIBNZBX.js.map → pr-reviewer-helpers-ZC2I5ZYD.js.map} +0 -0
  117. /package/dist/{registry-command-CGMRLZQ2.js.map → registry-command-O2GLHG3G.js.map} +0 -0
  118. /package/dist/{repo-security-plan-TBCMGL5Z.js.map → repo-security-plan-CFRLHIMY.js.map} +0 -0
  119. /package/dist/{research-helpers-synthesize-76ZZYWJ5.js.map → research-helpers-synthesize-ONWBGXHO.js.map} +0 -0
  120. /package/dist/{routing-memory-PZ4LTLXJ.js.map → routing-memory-XHZKEPUH.js.map} +0 -0
  121. /package/dist/{session-memory-C55R7LGY.js.map → session-memory-5QVKDE4U.js.map} +0 -0
  122. /package/dist/{setup-command-HMXY5UHN.js.map → setup-command-G7OB4QQG.js.map} +0 -0
  123. /package/dist/{setup-config-SMRMMT6Z.js.map → setup-config-MMBOL5CW.js.map} +0 -0
  124. /package/dist/{setup-custom-api-42JXTJHU.js.map → setup-custom-api-RQ3BUMJC.js.map} +0 -0
  125. /package/dist/{tool-memory-LCDNVPFI.js.map → tool-memory-VK4IZLPN.js.map} +0 -0
  126. /package/dist/{unified-registry-XEXWGKV5.js.map → unified-registry-ZOTGM4EY.js.map} +0 -0
  127. /package/dist/{weather-report-DPADAXFN.js.map → weather-report-MPD66LKP.js.map} +0 -0
@@ -1,14 +1,16 @@
1
1
  import {
2
2
  generateSecurityPlan
3
- } from "./chunk-YOFRUVPJ.js";
3
+ } from "./chunk-76Q6GTPU.js";
4
4
  import {
5
5
  analyzeGitHubRepo
6
6
  } from "./chunk-HFOQKCD2.js";
7
7
  import {
8
8
  CodebaseIndex,
9
+ DEFAULT_INDEX_MAX_DEPTH,
10
+ MAX_INDEX_MAX_DEPTH,
9
11
  extractSymbolIndex,
10
12
  extractSymbols
11
- } from "./chunk-3ACDP4E6.js";
13
+ } from "./chunk-AO4X3BMP.js";
12
14
  import {
13
15
  FINDING_SEVERITY_LEVELS,
14
16
  SARIF_LEVEL_MAP,
@@ -18,10 +20,10 @@ import {
18
20
  DEFAULT_TASK_TTL_MS,
19
21
  DEFAULT_TOOL_RATE_LIMITS,
20
22
  clampTaskTtl
21
- } from "./chunk-OUBDTDTC.js";
23
+ } from "./chunk-PXTZ6RPP.js";
22
24
  import {
23
25
  executeExpert
24
- } from "./chunk-U43BUJSN.js";
26
+ } from "./chunk-HNAFWKJG.js";
25
27
  import {
26
28
  JobStatusSchema,
27
29
  abortJob,
@@ -42,21 +44,21 @@ import {
42
44
  simulationDeniedResult,
43
45
  toJobSummary,
44
46
  writeJobCancelled
45
- } from "./chunk-55NRU7SV.js";
47
+ } from "./chunk-FQNG6ZIW.js";
46
48
  import {
47
49
  normalizeTopicToCanonical,
48
50
  synthesizeResearch
49
- } from "./chunk-TFYQRAWT.js";
51
+ } from "./chunk-ORRKK563.js";
50
52
  import {
51
53
  IssueTriage
52
- } from "./chunk-CVLVWHXG.js";
54
+ } from "./chunk-JYVPM37A.js";
53
55
  import {
54
56
  resolveEnvMode,
55
57
  sanitizeInput
56
- } from "./chunk-TZNJCTNQ.js";
58
+ } from "./chunk-F2YZ3U6O.js";
57
59
  import {
58
60
  withPrerequisite
59
- } from "./chunk-DUUMMELV.js";
61
+ } from "./chunk-PRSGZQNB.js";
60
62
  import {
61
63
  NOOP_NOTIFIER,
62
64
  RateLimiter,
@@ -79,12 +81,12 @@ import {
79
81
  withAuditTrail,
80
82
  withProgressHeartbeat,
81
83
  wrapToolWithTimeout
82
- } from "./chunk-3SMFRAX5.js";
84
+ } from "./chunk-V5RPW2ZX.js";
83
85
  import {
84
86
  createAuditTrail,
85
87
  createGraphAuditBridge,
86
88
  emitPipelinePolicyEvent
87
- } from "./chunk-NBPA4PQD.js";
89
+ } from "./chunk-BFDVV3Q3.js";
88
90
  import {
89
91
  addResearchPaper,
90
92
  addSourceToRegistry,
@@ -112,15 +114,15 @@ import {
112
114
  parseRegistry,
113
115
  sourceExistsInRegistry,
114
116
  summarizeContextForPrompt
115
- } from "./chunk-3GYRM7D6.js";
117
+ } from "./chunk-WOY6TQCH.js";
116
118
  import {
117
119
  getTokenEnvVars,
118
120
  resolveToken
119
- } from "./chunk-JV64QX3Y.js";
121
+ } from "./chunk-UWRDWX6L.js";
120
122
  import {
121
123
  loadPapersRegistry,
122
124
  loadTechniquesRegistry
123
- } from "./chunk-YPPYRLDF.js";
125
+ } from "./chunk-6LXTT6AK.js";
124
126
  import {
125
127
  resolveInsideRoot
126
128
  } from "./chunk-NUBSJGQZ.js";
@@ -129,14 +131,14 @@ import {
129
131
  MemoryImportance,
130
132
  calculateTextJaccardSimilarity,
131
133
  getToolMemory
132
- } from "./chunk-MQUSJVER.js";
134
+ } from "./chunk-I7OZP6FS.js";
133
135
  import {
134
136
  STOPWORDS,
135
137
  truncateWithInfo
136
138
  } from "./chunk-6T3EPABN.js";
137
139
  import {
138
140
  createSessionMemory
139
- } from "./chunk-LQ2ABFLI.js";
141
+ } from "./chunk-DMFMJFRY.js";
140
142
  import {
141
143
  BUILT_IN_EXPERTS,
142
144
  BuiltInExpertTypeSchema,
@@ -151,7 +153,7 @@ import {
151
153
  createEvent,
152
154
  getGlobalEventBus,
153
155
  getGlobalRegistry
154
- } from "./chunk-MYNI3CYT.js";
156
+ } from "./chunk-BZFF3YWU.js";
155
157
  import {
156
158
  CliDetectionCache,
157
159
  asRecord,
@@ -159,19 +161,19 @@ import {
159
161
  getAvailableClis,
160
162
  sleep,
161
163
  withTimeout
162
- } from "./chunk-IXZXG2MY.js";
164
+ } from "./chunk-ZI4PO2A3.js";
163
165
  import {
164
166
  DEFAULTS
165
- } from "./chunk-6PYVTJZF.js";
167
+ } from "./chunk-P54BDACX.js";
166
168
  import {
167
169
  getAvailabilityCache,
168
170
  getCliForModelId,
169
171
  resolveFallback
170
- } from "./chunk-3HVF4BG4.js";
172
+ } from "./chunk-3LVB5OE2.js";
171
173
  import {
172
174
  generateHyphenId,
173
175
  generateUUID
174
- } from "./chunk-33X5V4PL.js";
176
+ } from "./chunk-GS3UPAUE.js";
175
177
  import {
176
178
  AGENT_ROUTER_TIMEOUTS,
177
179
  API_TIMEOUTS,
@@ -263,7 +265,7 @@ import {
263
265
  selectStrategyByManifest,
264
266
  toExpertTaskAnalysisResult,
265
267
  withStep
266
- } from "./chunk-PZ3BB3PO.js";
268
+ } from "./chunk-Z66EEQ4A.js";
267
269
  import {
268
270
  ensureLearningDir,
269
271
  getMetaOutcomesFile,
@@ -26298,7 +26300,7 @@ function execIdFields(executionId) {
26298
26300
  async function populateUnifiedContextOnState(state, options) {
26299
26301
  const taskCandidate = state["task"];
26300
26302
  if (typeof taskCandidate !== "string" || taskCandidate === "") return;
26301
- const { getContextForTask: getContextForTask2, inferTaskCategory: inferTaskCategory2 } = await import("./context-retriever-5UJC5KDZ.js");
26303
+ const { getContextForTask: getContextForTask2, inferTaskCategory: inferTaskCategory2 } = await import("./context-retriever-YCKTCDGM.js");
26302
26304
  const category = inferTaskCategory2(taskCandidate);
26303
26305
  const executionId = options?.executionId;
26304
26306
  const execFields = execIdFields(executionId);
@@ -39537,40 +39539,47 @@ var SearchCodebaseInputSchema = z79.object({
39537
39539
  query: z79.string().min(1).max(200).describe("Search query (symbol name, keyword, or pattern)"),
39538
39540
  directory: z79.string().min(1).max(500).optional().describe("Directory to search (default: current working directory)"),
39539
39541
  limit: z79.number().min(1).max(50).optional().describe("Max results (default: 20)"),
39540
- mode: z79.enum(["search", "summary", "list"]).optional().describe("search: find symbols. summary: file overview. list: list indexed files.")
39542
+ mode: z79.enum(["search", "summary", "list"]).optional().describe("search: find symbols. summary: file overview. list: list indexed files."),
39543
+ maxDepth: z79.number().int().min(1).max(MAX_INDEX_MAX_DEPTH).optional().describe(
39544
+ `Max directory depth to index below "directory" (default: ${String(DEFAULT_INDEX_MAX_DEPTH)}, clamped to ${String(MAX_INDEX_MAX_DEPTH)}). Raise this if results seem incomplete for a deeply nested tree.`
39545
+ )
39541
39546
  });
39542
39547
  var MAX_CACHED_DIRS = 3;
39543
39548
  var INDEX_TTL_MS = 15 * 60 * 1e3;
39544
39549
  var indexCache = /* @__PURE__ */ new Map();
39545
39550
  var inflightIndex = /* @__PURE__ */ new Map();
39546
- function getFromCache(dir) {
39551
+ function getFromCache(dir, maxDepth) {
39547
39552
  const entry = indexCache.get(dir);
39548
39553
  if (entry === void 0) return void 0;
39549
39554
  if (entry.expiresAt <= getTimeProvider().now()) {
39550
39555
  indexCache.delete(dir);
39551
39556
  return void 0;
39552
39557
  }
39558
+ if (entry.maxDepth < maxDepth) {
39559
+ indexCache.delete(dir);
39560
+ return void 0;
39561
+ }
39553
39562
  indexCache.delete(dir);
39554
39563
  indexCache.set(dir, entry);
39555
39564
  return entry.index;
39556
39565
  }
39557
- function putInCache(dir, index) {
39558
- indexCache.set(dir, { index, expiresAt: getTimeProvider().now() + INDEX_TTL_MS });
39566
+ function putInCache(dir, index, maxDepth) {
39567
+ indexCache.set(dir, { index, expiresAt: getTimeProvider().now() + INDEX_TTL_MS, maxDepth });
39559
39568
  while (indexCache.size > MAX_CACHED_DIRS) {
39560
39569
  const lruKey = indexCache.keys().next().value;
39561
39570
  if (lruKey === void 0) break;
39562
39571
  indexCache.delete(lruKey);
39563
39572
  }
39564
39573
  }
39565
- async function getIndex(dir) {
39566
- const cached = getFromCache(dir);
39574
+ async function getIndex(dir, maxDepth) {
39575
+ const cached = getFromCache(dir, maxDepth);
39567
39576
  if (cached !== void 0) return cached;
39568
39577
  const inflight = inflightIndex.get(dir);
39569
39578
  if (inflight !== void 0) return inflight;
39570
39579
  const promise = (async () => {
39571
39580
  const index = new CodebaseIndex(dir);
39572
- await index.index(4);
39573
- putInCache(dir, index);
39581
+ await index.index(maxDepth);
39582
+ putInCache(dir, index, maxDepth);
39574
39583
  return index;
39575
39584
  })().finally(() => {
39576
39585
  inflightIndex.delete(dir);
@@ -39586,6 +39595,25 @@ function resolveSearchDir(directory) {
39586
39595
  }
39587
39596
  return { dir };
39588
39597
  }
39598
+ function skippedDirsNote(index) {
39599
+ const { skippedDirs } = index.stats;
39600
+ if (skippedDirs === 0) return "";
39601
+ return `
39602
+
39603
+ Note: ${String(skippedDirs)} subdirector${skippedDirs === 1 ? "y was" : "ies were"} not indexed because maxDepth was exhausted. Pass a larger maxDepth (up to ${String(MAX_INDEX_MAX_DEPTH)}) to include them.`;
39604
+ }
39605
+ function formatSearchOutput(index, query, results) {
39606
+ if (results.length === 0) {
39607
+ return `No symbols matching "${query}" found in ${String(index.stats.files)} indexed files.${skippedDirsNote(index)}`;
39608
+ }
39609
+ const output2 = results.map((r) => {
39610
+ const exp = r.symbol.exported ? "export " : "";
39611
+ return `[${r.matchType}] ${exp}${r.symbol.kind} ${r.symbol.name} (${r.symbol.filePath}:${String(r.symbol.startLine)})`;
39612
+ }).join("\n");
39613
+ return `${String(results.length)} results for "${query}":
39614
+
39615
+ ${output2}${skippedDirsNote(index)}`;
39616
+ }
39589
39617
  function formatListOutput(index) {
39590
39618
  const files = index.listFiles();
39591
39619
  const output2 = files.sort((a, b) => b.symbols - a.symbols).map(
@@ -39593,7 +39621,7 @@ function formatListOutput(index) {
39593
39621
  ).join("\n");
39594
39622
  return `${String(index.stats.files)} files, ${String(index.stats.symbols)} symbols indexed
39595
39623
 
39596
- ${output2}`;
39624
+ ${output2}${skippedDirsNote(index)}`;
39597
39625
  }
39598
39626
  async function searchCodebaseHandler(args, ctx) {
39599
39627
  const parsed = SearchCodebaseInputSchema.safeParse(args);
@@ -39603,13 +39631,13 @@ async function searchCodebaseHandler(args, ctx) {
39603
39631
  message: `Validation error: ${formatZodError(parsed.error)}`
39604
39632
  });
39605
39633
  }
39606
- const { query, directory, limit, mode } = parsed.data;
39634
+ const { query, directory, limit, mode, maxDepth } = parsed.data;
39607
39635
  const dirResult = resolveSearchDir(directory);
39608
39636
  if ("error" in dirResult) {
39609
39637
  return toolStructuredError({ errorCategory: "permission", message: dirResult.error });
39610
39638
  }
39611
39639
  try {
39612
- const index = await getIndex(dirResult.dir);
39640
+ const index = await getIndex(dirResult.dir, maxDepth ?? DEFAULT_INDEX_MAX_DEPTH);
39613
39641
  if (mode === "list") return toolSuccess(formatListOutput(index));
39614
39642
  if (mode === "summary") {
39615
39643
  const summary = index.getFileSummary(query);
@@ -39621,18 +39649,7 @@ async function searchCodebaseHandler(args, ctx) {
39621
39649
  return toolSuccess(JSON.stringify(summary, null, 2));
39622
39650
  }
39623
39651
  const results = index.search(query, limit ?? 20);
39624
- if (results.length === 0) {
39625
- return toolSuccess(
39626
- `No symbols matching "${query}" found in ${String(index.stats.files)} indexed files.`
39627
- );
39628
- }
39629
- const output2 = results.map((r) => {
39630
- const exp = r.symbol.exported ? "export " : "";
39631
- return `[${r.matchType}] ${exp}${r.symbol.kind} ${r.symbol.name} (${r.symbol.filePath}:${String(r.symbol.startLine)})`;
39632
- }).join("\n");
39633
- return toolSuccess(`${String(results.length)} results for "${query}":
39634
-
39635
- ${output2}`);
39652
+ return toolSuccess(formatSearchOutput(index, query, results));
39636
39653
  } catch (caught) {
39637
39654
  const e = caught instanceof Error ? caught : new Error(String(caught));
39638
39655
  ctx.logger.error("Codebase search failed", e);
@@ -39648,9 +39665,12 @@ function registerSearchCodebaseTool(server, deps) {
39648
39665
  query: z79.string().min(1).max(200).describe("Search query or file path"),
39649
39666
  directory: z79.string().max(500).optional().describe("Directory to index"),
39650
39667
  limit: z79.number().min(1).max(50).optional().describe("Max results"),
39651
- mode: z79.enum(["search", "summary", "list"]).optional().describe("search/summary/list")
39668
+ mode: z79.enum(["search", "summary", "list"]).optional().describe("search/summary/list"),
39669
+ maxDepth: z79.number().int().min(1).max(MAX_INDEX_MAX_DEPTH).optional().describe(
39670
+ `Max directory depth to index (default: ${String(DEFAULT_INDEX_MAX_DEPTH)}, clamped to ${String(MAX_INDEX_MAX_DEPTH)})`
39671
+ )
39652
39672
  };
39653
- const description = "Cross-file ripgrep-style search across the working directory. Builds an in-memory symbol index and ranks matches with relevance scoring. Use when you need usages of a symbol or pattern across MANY files. For the AST of a single file, use `extract_symbols` instead. Modes: search (find by keyword), summary (per-file overview), list (all indexed files).";
39673
+ const description = "Cross-file search across an index of declared symbol NAMES in the working directory \u2014 declarations only (functions, classes, methods, interfaces, types); NOT usages, call-sites, comments, or string/text content. Builds an in-memory symbol index and ranks matches with relevance scoring. Use when you need to find where a symbol is DECLARED across MANY files. For the AST of a single file, use `extract_symbols` instead. Modes: search (find by keyword), summary (per-file overview), list (all indexed files).";
39654
39674
  const secureHandler = createSecureHandler(searchCodebaseHandler, {
39655
39675
  toolName: "search_codebase",
39656
39676
  rateLimiter: deps.rateLimiter,
@@ -39669,30 +39689,93 @@ function registerSearchCodebaseTool(server, deps) {
39669
39689
  // src/mcp/tools/extract-symbols-tool.ts
39670
39690
  import { resolve as resolve8, sep as sep4 } from "path";
39671
39691
  import { z as z80 } from "zod";
39692
+ var DEFAULT_EXTRACT_MAX_CHARS = 2e4;
39693
+ var DEFAULT_EXTRACT_MAX_SYMBOLS = 200;
39672
39694
  var ExtractSymbolsInputSchema = z80.object({
39673
39695
  filePath: z80.string().min(1).max(500).describe("Path to TypeScript/JavaScript file to extract symbols from"),
39674
- mode: z80.enum(["index", "full"]).optional().describe("index: names+lines only (minimal tokens). full: includes source text.")
39696
+ mode: z80.enum(["index", "full"]).optional().describe("index: names+lines only (minimal tokens). full: includes source text."),
39697
+ maxChars: z80.number().int().positive().max(1e6).optional().describe(
39698
+ `full mode only: cap on total emitted symbol source chars (default ${String(DEFAULT_EXTRACT_MAX_CHARS)}). Excess is truncated and reported, never silently dropped.`
39699
+ ),
39700
+ maxSymbols: z80.number().int().positive().max(1e4).optional().describe(
39701
+ `full mode only: cap on number of symbols emitted (default ${String(DEFAULT_EXTRACT_MAX_SYMBOLS)}).`
39702
+ )
39675
39703
  });
39676
- function buildFullSymbolOutput(result) {
39677
- return JSON.stringify(
39678
- {
39679
- filePath: result.filePath,
39680
- totalLines: result.totalLines,
39681
- totalChars: result.totalChars,
39682
- symbolChars: result.symbolChars,
39683
- savingsPercent: result.savingsPercent,
39684
- symbols: result.symbols.map((s) => ({
39685
- name: s.name,
39686
- kind: s.kind,
39687
- startLine: s.startLine,
39688
- endLine: s.endLine,
39689
- exported: s.exported,
39690
- text: s.text
39691
- }))
39692
- },
39693
- null,
39694
- 2
39695
- );
39704
+ function toOutputSymbol(s, text) {
39705
+ return {
39706
+ name: s.name,
39707
+ kind: s.kind,
39708
+ startLine: s.startLine,
39709
+ endLine: s.endLine,
39710
+ exported: s.exported,
39711
+ text: text ?? s.text
39712
+ };
39713
+ }
39714
+ function sumChars(symbols) {
39715
+ return symbols.reduce((sum, s) => sum + s.text.length, 0);
39716
+ }
39717
+ function truncateSymbolText(s, remaining) {
39718
+ const kept = s.text.slice(0, Math.max(0, remaining));
39719
+ const omittedChars = s.text.length - kept.length;
39720
+ return toOutputSymbol(s, `${kept}
39721
+ \u2026 [truncated: ${String(omittedChars)} more chars omitted]`);
39722
+ }
39723
+ function applyCharBudget(symbols, maxChars) {
39724
+ const out = [];
39725
+ let used = 0;
39726
+ for (let i = 0; i < symbols.length; i++) {
39727
+ const s = symbols[i];
39728
+ if (s === void 0) break;
39729
+ const remaining = maxChars - used;
39730
+ if (remaining <= 0) {
39731
+ const rest = symbols.slice(i);
39732
+ return { symbols: out, omittedCount: rest.length, omittedChars: sumChars(rest) };
39733
+ }
39734
+ if (s.text.length > remaining) {
39735
+ out.push(truncateSymbolText(s, remaining));
39736
+ const rest = symbols.slice(i + 1);
39737
+ return {
39738
+ symbols: out,
39739
+ omittedCount: rest.length,
39740
+ omittedChars: s.text.length - remaining + sumChars(rest)
39741
+ };
39742
+ }
39743
+ out.push(toOutputSymbol(s));
39744
+ used += s.text.length;
39745
+ }
39746
+ return { symbols: out, omittedCount: 0, omittedChars: 0 };
39747
+ }
39748
+ function capSymbols(all, maxChars, maxSymbols) {
39749
+ const kept = all.slice(0, Math.max(0, maxSymbols));
39750
+ const countOmitted = all.slice(kept.length);
39751
+ const budgeted = applyCharBudget(kept, maxChars);
39752
+ const omittedSymbols = countOmitted.length + budgeted.omittedCount;
39753
+ const omittedChars = sumChars(countOmitted) + budgeted.omittedChars;
39754
+ return {
39755
+ symbols: budgeted.symbols,
39756
+ omittedSymbols,
39757
+ omittedChars,
39758
+ truncated: omittedSymbols > 0
39759
+ };
39760
+ }
39761
+ function buildFullSymbolOutput(result, maxChars, maxSymbols) {
39762
+ const capped = capSymbols(result.symbols, maxChars, maxSymbols);
39763
+ const payload = {
39764
+ filePath: result.filePath,
39765
+ totalLines: result.totalLines,
39766
+ totalChars: result.totalChars,
39767
+ symbolChars: result.symbolChars,
39768
+ savingsPercent: result.savingsPercent,
39769
+ symbols: capped.symbols
39770
+ };
39771
+ if (capped.truncated) {
39772
+ payload["truncated"] = true;
39773
+ payload["omittedSymbols"] = capped.omittedSymbols;
39774
+ payload["omittedChars"] = capped.omittedChars;
39775
+ payload["maxChars"] = maxChars;
39776
+ payload["maxSymbols"] = maxSymbols;
39777
+ }
39778
+ return JSON.stringify(payload, null, 2);
39696
39779
  }
39697
39780
  async function extractSymbolsHandler(args, ctx) {
39698
39781
  const parsed = ExtractSymbolsInputSchema.safeParse(args);
@@ -39702,7 +39785,7 @@ async function extractSymbolsHandler(args, ctx) {
39702
39785
  message: `Validation error: ${formatZodError(parsed.error)}`
39703
39786
  });
39704
39787
  }
39705
- const { filePath, mode } = parsed.data;
39788
+ const { filePath, mode, maxChars, maxSymbols } = parsed.data;
39706
39789
  const resolvedPath = resolve8(filePath);
39707
39790
  const cwdRoot = resolve8(".");
39708
39791
  if (resolvedPath !== cwdRoot && !resolvedPath.startsWith(cwdRoot + sep4)) {
@@ -39713,7 +39796,12 @@ async function extractSymbolsHandler(args, ctx) {
39713
39796
  }
39714
39797
  try {
39715
39798
  if (mode === "full") {
39716
- return toolSuccess(buildFullSymbolOutput(await extractSymbols(resolvedPath)));
39799
+ const output2 = buildFullSymbolOutput(
39800
+ await extractSymbols(resolvedPath),
39801
+ maxChars ?? DEFAULT_EXTRACT_MAX_CHARS,
39802
+ maxSymbols ?? DEFAULT_EXTRACT_MAX_SYMBOLS
39803
+ );
39804
+ return toolSuccess(output2);
39717
39805
  }
39718
39806
  const index = await extractSymbolIndex(resolvedPath);
39719
39807
  if (index === "") {
@@ -39733,9 +39821,15 @@ function registerExtractSymbolsTool(server, deps) {
39733
39821
  const logger58 = deps.logger ?? createLogger({ tool: "extract_symbols" });
39734
39822
  const toolSchema = {
39735
39823
  filePath: z80.string().min(1).max(500).describe("Path to TypeScript/JavaScript file"),
39736
- mode: z80.enum(["index", "full"]).optional().describe("index (default): names+lines. full: includes source text")
39824
+ mode: z80.enum(["index", "full"]).optional().describe("index (default): names+lines. full: includes source text"),
39825
+ maxChars: z80.number().int().positive().max(1e6).optional().describe(
39826
+ `full mode only: cap on total emitted symbol source chars (default ${String(DEFAULT_EXTRACT_MAX_CHARS)})`
39827
+ ),
39828
+ maxSymbols: z80.number().int().positive().max(1e4).optional().describe(
39829
+ `full mode only: cap on number of symbols emitted (default ${String(DEFAULT_EXTRACT_MAX_SYMBOLS)})`
39830
+ )
39737
39831
  };
39738
- const description = "Parse a SINGLE TypeScript/JavaScript file with tree-sitter and return its structural AST symbols. Use when you need the structure of one file \u2014 function/class/method/interface/type definitions. Not a cross-file search; for that use `search_codebase`. Output is 80%+ smaller than reading the full file.";
39832
+ const description = `Parse a SINGLE TypeScript/JavaScript file with the TypeScript compiler API and return its structural AST symbols. Use when you need the structure of one file \u2014 function/class/method/interface/type definitions. Not a cross-file search; for that use \`search_codebase\`. Output is 80%+ smaller than reading the full file. Full mode caps total emitted source at ${String(DEFAULT_EXTRACT_MAX_CHARS)} chars / ${String(DEFAULT_EXTRACT_MAX_SYMBOLS)} symbols by default (override via maxChars/maxSymbols); truncation is reported, never silent.`;
39739
39833
  const secureHandler = createSecureHandler(extractSymbolsHandler, {
39740
39834
  toolName: "extract_symbols",
39741
39835
  rateLimiter: deps.rateLimiter,
@@ -41580,7 +41674,7 @@ async function tryIssueTriage(task) {
41580
41674
  try {
41581
41675
  const issueMatch = task.match(/github\.com\/([^/]+\/[^/]+)\/issues\/(\d+)/);
41582
41676
  if (issueMatch === null) return null;
41583
- const { createIssueTriage } = await import("./issue-triage-OVX4VSUN.js");
41677
+ const { createIssueTriage } = await import("./issue-triage-TNV4R33I.js");
41584
41678
  const triage = createIssueTriage();
41585
41679
  const owner = issueMatch[1] ?? "";
41586
41680
  const num = issueMatch[2] ?? "";
@@ -41608,7 +41702,7 @@ var VALID_TEMPLATES = /* @__PURE__ */ new Set([
41608
41702
  ]);
41609
41703
  async function classifyWithLLM(task) {
41610
41704
  try {
41611
- const { executeExpert: executeExpert2 } = await import("./expert-bridge-BNMCDENK.js");
41705
+ const { executeExpert: executeExpert2 } = await import("./expert-bridge-EAR6XZJA.js");
41612
41706
  const prompt = [
41613
41707
  "Classify this task into exactly one pipeline template.",
41614
41708
  "Templates: dev (implementation/bug fix/refactor), research (investigate/evaluate/compare),",
@@ -43249,7 +43343,7 @@ var memoryInitPromise = null;
43249
43343
  async function initPipelineMemory() {
43250
43344
  if (cachedMemory !== null) return cachedMemory;
43251
43345
  try {
43252
- const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-C55R7LGY.js");
43346
+ const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-5QVKDE4U.js");
43253
43347
  const { getLearningDir } = await import("./learning-persistence-6D5GGT7D.js");
43254
43348
  const mem = createSessionMemory2(getLearningDir());
43255
43349
  mem.startSession(`pipeline-${String(getTimeProvider().now())}`);
@@ -43311,7 +43405,7 @@ function recordRoutingExperience(category, success, durationMs, tokensUsed = 0,
43311
43405
  callRecord(routingMemoryCache);
43312
43406
  return;
43313
43407
  }
43314
- routingMemoryInitPromise ??= import("./routing-memory-PZ4LTLXJ.js").then(({ createRoutingMemory }) => {
43408
+ routingMemoryInitPromise ??= import("./routing-memory-XHZKEPUH.js").then(({ createRoutingMemory }) => {
43315
43409
  routingMemoryCache ??= createRoutingMemory();
43316
43410
  return routingMemoryCache;
43317
43411
  }).catch((error) => {
@@ -43345,7 +43439,7 @@ ${text}` : "";
43345
43439
  }
43346
43440
  async function getWeatherContext() {
43347
43441
  try {
43348
- const { generateWeatherReport: generateWeatherReport2 } = await import("./weather-report-DPADAXFN.js");
43442
+ const { generateWeatherReport: generateWeatherReport2 } = await import("./weather-report-MPD66LKP.js");
43349
43443
  const report = generateWeatherReport2({ includeAdaptive: true });
43350
43444
  const mappings = "recommendedMappings" in report ? report.recommendedMappings : [];
43351
43445
  if (!Array.isArray(mappings) || mappings.length === 0) return "";
@@ -43363,7 +43457,7 @@ ${lines}
43363
43457
  }
43364
43458
  async function getMemoryContext(task) {
43365
43459
  try {
43366
- const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-C55R7LGY.js");
43460
+ const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-5QVKDE4U.js");
43367
43461
  const { getLearningDir } = await import("./learning-persistence-6D5GGT7D.js");
43368
43462
  const memory = createSessionMemory2(getLearningDir(), { maxLearningsInContext: 10 });
43369
43463
  const learnings = memory.searchLearnings(task.slice(0, 200));
@@ -43478,7 +43572,7 @@ ${contextBlock}`;
43478
43572
  const strategy = config.votingStrategy ?? "higher_order";
43479
43573
  await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
43480
43574
  try {
43481
- const { executeVoting } = await import("./consensus-vote-M4ZELBV4.js");
43575
+ const { executeVoting } = await import("./consensus-vote-KWPS6WNH.js");
43482
43576
  const votingResult = await executeVoting(
43483
43577
  {
43484
43578
  proposal: buildVoteProposal(plan, research),
@@ -43904,7 +43998,7 @@ function createScaffoldStageWrapper() {
43904
43998
  }
43905
43999
  async function searchCodebaseForTask(task) {
43906
44000
  try {
43907
- const { CodebaseIndex: CodebaseIndex2 } = await import("./codebase-search-PWMWLU7O.js");
44001
+ const { CodebaseIndex: CodebaseIndex2 } = await import("./codebase-search-DKLEA4PR.js");
43908
44002
  const index = new CodebaseIndex2(process.cwd());
43909
44003
  const terms = task.toLowerCase().split(/\s+/).filter((w) => w.length > 4).slice(0, 3);
43910
44004
  if (terms.length === 0) return null;
@@ -43919,7 +44013,7 @@ async function searchCodebaseForTask(task) {
43919
44013
  }
43920
44014
  async function queryResearchRegistry(task) {
43921
44015
  try {
43922
- const { synthesizeResearch: synthesizeResearch2 } = await import("./research-helpers-synthesize-76ZZYWJ5.js");
44016
+ const { synthesizeResearch: synthesizeResearch2 } = await import("./research-helpers-synthesize-ONWBGXHO.js");
43923
44017
  const topic = task.split(/[.!?\n]/).filter((s) => s.trim().length > 10)[0]?.trim();
43924
44018
  if (topic === void 0) return null;
43925
44019
  const result = await synthesizeResearch2(topic.slice(0, 50));
@@ -43990,7 +44084,7 @@ function createScanStageWrapper() {
43990
44084
  try {
43991
44085
  const slug = ctx.task.match(/([a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+)/)?.[1];
43992
44086
  if (slug !== void 0) {
43993
- const { generateSecurityPlan: generateSecurityPlan2 } = await import("./repo-security-plan-TBCMGL5Z.js");
44087
+ const { generateSecurityPlan: generateSecurityPlan2 } = await import("./repo-security-plan-CFRLHIMY.js");
43994
44088
  const plan = await generateSecurityPlan2({ repo: slug, maxScanners: 10 });
43995
44089
  const recs = plan.recommendations.slice(0, 5).map((r) => `${r.priority}: ${r.displayName} (${r.category})`).join("; ");
43996
44090
  return output(PIPELINE_STATE_KEYS.FINDINGS, recs, getTimeProvider().now() - start, true);
@@ -46950,7 +47044,7 @@ var GitHubTaskTracker = class {
46950
47044
  cachedProvider = null;
46951
47045
  async getProvider() {
46952
47046
  if (this.cachedProvider !== null) return this.cachedProvider;
46953
- const { createScmProvider } = await import("./factory-QLW773DP.js");
47047
+ const { createScmProvider } = await import("./factory-7SVW7XMV.js");
46954
47048
  const result = await createScmProvider({ repo: this.config.repo ?? "" });
46955
47049
  if (!result.ok) throw new Error(`SCM provider error: ${result.error.message}`);
46956
47050
  this.cachedProvider = result.value;
@@ -47757,7 +47851,7 @@ async function probeSource(source, includeModelIds) {
47757
47851
  }
47758
47852
  }
47759
47853
  async function defaultSources(includeOpenRouter) {
47760
- const { createAllAdapters: createAllAdapters2 } = await import("./factory-77GX5DG4.js");
47854
+ const { createAllAdapters: createAllAdapters2 } = await import("./factory-JYAUOFEN.js");
47761
47855
  const adapters = createAllAdapters2();
47762
47856
  return buildDefaultModelSources(adapters, { includeOpenRouter });
47763
47857
  }
@@ -51826,4 +51920,4 @@ export {
51826
51920
  shutdownFeedbackSubscriber,
51827
51921
  createEventBusBridge
51828
51922
  };
51829
- //# sourceMappingURL=chunk-RC5SCDGF.js.map
51923
+ //# sourceMappingURL=chunk-JBH4CU46.js.map