nexus-agents 2.166.2 → 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 (120) 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-RXI5ONP7.js → chunk-AWPSFL5C.js} +2 -2
  6. package/dist/{chunk-NBPA4PQD.js → chunk-BFDVV3Q3.js} +2 -2
  7. package/dist/{chunk-MYNI3CYT.js → chunk-BZFF3YWU.js} +4 -4
  8. package/dist/{chunk-LQ2ABFLI.js → chunk-DMFMJFRY.js} +2 -2
  9. package/dist/{chunk-TZNJCTNQ.js → chunk-F2YZ3U6O.js} +2 -2
  10. package/dist/{chunk-2255SARF.js → chunk-FKHQWC2L.js} +2 -2
  11. package/dist/{chunk-55NRU7SV.js → chunk-FQNG6ZIW.js} +8 -8
  12. package/dist/{chunk-2UMMVKUW.js → chunk-FZV4YAYT.js} +3 -3
  13. package/dist/{chunk-33X5V4PL.js → chunk-GS3UPAUE.js} +2 -2
  14. package/dist/{chunk-U43BUJSN.js → chunk-HNAFWKJG.js} +7 -7
  15. package/dist/{chunk-MQUSJVER.js → chunk-I7OZP6FS.js} +4 -4
  16. package/dist/{chunk-RBN4WXOA.js → chunk-IF46G2LM.js} +2 -2
  17. package/dist/{chunk-RLRAUL43.js → chunk-JBH4CU46.js} +133 -59
  18. package/dist/{chunk-RLRAUL43.js.map → chunk-JBH4CU46.js.map} +1 -1
  19. package/dist/{chunk-CVLVWHXG.js → chunk-JYVPM37A.js} +5 -5
  20. package/dist/{chunk-LUP26FMZ.js → chunk-K2IX6BEK.js} +4 -4
  21. package/dist/{chunk-ZNY7MM2J.js → chunk-LRBEUBZ3.js} +3 -3
  22. package/dist/{chunk-FKOWIKR4.js → chunk-NEQJSYJH.js} +3 -3
  23. package/dist/{chunk-LKSG75LC.js → chunk-OI6H3DL6.js} +4 -4
  24. package/dist/{chunk-TFYQRAWT.js → chunk-ORRKK563.js} +3 -3
  25. package/dist/{chunk-6PYVTJZF.js → chunk-P54BDACX.js} +2 -2
  26. package/dist/{chunk-DUUMMELV.js → chunk-PRSGZQNB.js} +3 -3
  27. package/dist/{chunk-YIEMNZUD.js → chunk-PXTZ6RPP.js} +7 -7
  28. package/dist/{chunk-SF2AK3JB.js → chunk-THI3VWHO.js} +2 -2
  29. package/dist/{chunk-MLURL552.js → chunk-UO6C5J5D.js} +5 -5
  30. package/dist/{chunk-JV64QX3Y.js → chunk-UWRDWX6L.js} +2 -2
  31. package/dist/{chunk-3SMFRAX5.js → chunk-V5RPW2ZX.js} +3 -3
  32. package/dist/{chunk-JBZMUKT4.js → chunk-WL4SGKAW.js} +2 -2
  33. package/dist/{chunk-3GYRM7D6.js → chunk-WOY6TQCH.js} +33 -9
  34. package/dist/{chunk-3GYRM7D6.js.map → chunk-WOY6TQCH.js.map} +1 -1
  35. package/dist/{chunk-NXJJZEUO.js → chunk-YKTVN2TF.js} +2 -2
  36. package/dist/{chunk-PZ3BB3PO.js → chunk-Z66EEQ4A.js} +3 -3
  37. package/dist/{chunk-IXZXG2MY.js → chunk-ZI4PO2A3.js} +7 -7
  38. package/dist/{cli-circuit-breaker-5IGBBD7R.js → cli-circuit-breaker-FSUDU7BV.js} +4 -4
  39. package/dist/cli.js +41 -41
  40. package/dist/{composite-router-62KI56W6.js → composite-router-HC4YLG5W.js} +2 -2
  41. package/dist/{consensus-vote-M4ZELBV4.js → consensus-vote-KWPS6WNH.js} +15 -15
  42. package/dist/{context-retriever-5UJC5KDZ.js → context-retriever-YCKTCDGM.js} +10 -8
  43. package/dist/{doctor-deep-7OR5MYMI.js → doctor-deep-4UARVVSD.js} +3 -3
  44. package/dist/{expert-bridge-BNMCDENK.js → expert-bridge-EAR6XZJA.js} +4 -4
  45. package/dist/{factory-QLW773DP.js → factory-7SVW7XMV.js} +5 -5
  46. package/dist/{factory-77GX5DG4.js → factory-JYAUOFEN.js} +8 -8
  47. package/dist/{improvement-review-KDM6OL25.js → improvement-review-AHSY5ZXD.js} +5 -5
  48. package/dist/index.d.ts +2 -0
  49. package/dist/index.js +30 -30
  50. package/dist/{init-opencode-FXKABSGS.js → init-opencode-5BKE7UEB.js} +6 -6
  51. package/dist/{issue-triage-OVX4VSUN.js → issue-triage-TNV4R33I.js} +6 -6
  52. package/dist/{pr-reviewer-helpers-VGIBNZBX.js → pr-reviewer-helpers-ZC2I5ZYD.js} +4 -4
  53. package/dist/{registry-command-CGMRLZQ2.js → registry-command-O2GLHG3G.js} +2 -2
  54. package/dist/{repo-security-plan-TBCMGL5Z.js → repo-security-plan-CFRLHIMY.js} +3 -3
  55. package/dist/{research-helpers-synthesize-76ZZYWJ5.js → research-helpers-synthesize-ONWBGXHO.js} +4 -4
  56. package/dist/{routing-memory-PZ4LTLXJ.js → routing-memory-XHZKEPUH.js} +2 -2
  57. package/dist/{session-memory-C55R7LGY.js → session-memory-5QVKDE4U.js} +3 -3
  58. package/dist/{setup-command-AVQWHV5L.js → setup-command-G7OB4QQG.js} +11 -11
  59. package/dist/{setup-config-SMRMMT6Z.js → setup-config-MMBOL5CW.js} +3 -3
  60. package/dist/{setup-custom-api-42JXTJHU.js → setup-custom-api-RQ3BUMJC.js} +3 -3
  61. package/dist/{tool-memory-LCDNVPFI.js → tool-memory-VK4IZLPN.js} +5 -5
  62. package/dist/{unified-registry-XEXWGKV5.js → unified-registry-ZOTGM4EY.js} +9 -9
  63. package/dist/{weather-report-DPADAXFN.js → weather-report-MPD66LKP.js} +2 -2
  64. package/package.json +1 -1
  65. /package/dist/{child-mcp-config-LQ4IKFSN.js.map → child-mcp-config-AUA4TFBG.js.map} +0 -0
  66. /package/dist/{chunk-3HVF4BG4.js.map → chunk-3LVB5OE2.js.map} +0 -0
  67. /package/dist/{chunk-YPPYRLDF.js.map → chunk-6LXTT6AK.js.map} +0 -0
  68. /package/dist/{chunk-YOFRUVPJ.js.map → chunk-76Q6GTPU.js.map} +0 -0
  69. /package/dist/{chunk-RXI5ONP7.js.map → chunk-AWPSFL5C.js.map} +0 -0
  70. /package/dist/{chunk-NBPA4PQD.js.map → chunk-BFDVV3Q3.js.map} +0 -0
  71. /package/dist/{chunk-MYNI3CYT.js.map → chunk-BZFF3YWU.js.map} +0 -0
  72. /package/dist/{chunk-LQ2ABFLI.js.map → chunk-DMFMJFRY.js.map} +0 -0
  73. /package/dist/{chunk-TZNJCTNQ.js.map → chunk-F2YZ3U6O.js.map} +0 -0
  74. /package/dist/{chunk-2255SARF.js.map → chunk-FKHQWC2L.js.map} +0 -0
  75. /package/dist/{chunk-55NRU7SV.js.map → chunk-FQNG6ZIW.js.map} +0 -0
  76. /package/dist/{chunk-2UMMVKUW.js.map → chunk-FZV4YAYT.js.map} +0 -0
  77. /package/dist/{chunk-33X5V4PL.js.map → chunk-GS3UPAUE.js.map} +0 -0
  78. /package/dist/{chunk-U43BUJSN.js.map → chunk-HNAFWKJG.js.map} +0 -0
  79. /package/dist/{chunk-MQUSJVER.js.map → chunk-I7OZP6FS.js.map} +0 -0
  80. /package/dist/{chunk-RBN4WXOA.js.map → chunk-IF46G2LM.js.map} +0 -0
  81. /package/dist/{chunk-CVLVWHXG.js.map → chunk-JYVPM37A.js.map} +0 -0
  82. /package/dist/{chunk-LUP26FMZ.js.map → chunk-K2IX6BEK.js.map} +0 -0
  83. /package/dist/{chunk-ZNY7MM2J.js.map → chunk-LRBEUBZ3.js.map} +0 -0
  84. /package/dist/{chunk-FKOWIKR4.js.map → chunk-NEQJSYJH.js.map} +0 -0
  85. /package/dist/{chunk-LKSG75LC.js.map → chunk-OI6H3DL6.js.map} +0 -0
  86. /package/dist/{chunk-TFYQRAWT.js.map → chunk-ORRKK563.js.map} +0 -0
  87. /package/dist/{chunk-6PYVTJZF.js.map → chunk-P54BDACX.js.map} +0 -0
  88. /package/dist/{chunk-DUUMMELV.js.map → chunk-PRSGZQNB.js.map} +0 -0
  89. /package/dist/{chunk-YIEMNZUD.js.map → chunk-PXTZ6RPP.js.map} +0 -0
  90. /package/dist/{chunk-SF2AK3JB.js.map → chunk-THI3VWHO.js.map} +0 -0
  91. /package/dist/{chunk-MLURL552.js.map → chunk-UO6C5J5D.js.map} +0 -0
  92. /package/dist/{chunk-JV64QX3Y.js.map → chunk-UWRDWX6L.js.map} +0 -0
  93. /package/dist/{chunk-3SMFRAX5.js.map → chunk-V5RPW2ZX.js.map} +0 -0
  94. /package/dist/{chunk-JBZMUKT4.js.map → chunk-WL4SGKAW.js.map} +0 -0
  95. /package/dist/{chunk-NXJJZEUO.js.map → chunk-YKTVN2TF.js.map} +0 -0
  96. /package/dist/{chunk-PZ3BB3PO.js.map → chunk-Z66EEQ4A.js.map} +0 -0
  97. /package/dist/{chunk-IXZXG2MY.js.map → chunk-ZI4PO2A3.js.map} +0 -0
  98. /package/dist/{cli-circuit-breaker-5IGBBD7R.js.map → cli-circuit-breaker-FSUDU7BV.js.map} +0 -0
  99. /package/dist/{composite-router-62KI56W6.js.map → composite-router-HC4YLG5W.js.map} +0 -0
  100. /package/dist/{consensus-vote-M4ZELBV4.js.map → consensus-vote-KWPS6WNH.js.map} +0 -0
  101. /package/dist/{context-retriever-5UJC5KDZ.js.map → context-retriever-YCKTCDGM.js.map} +0 -0
  102. /package/dist/{doctor-deep-7OR5MYMI.js.map → doctor-deep-4UARVVSD.js.map} +0 -0
  103. /package/dist/{expert-bridge-BNMCDENK.js.map → expert-bridge-EAR6XZJA.js.map} +0 -0
  104. /package/dist/{factory-77GX5DG4.js.map → factory-7SVW7XMV.js.map} +0 -0
  105. /package/dist/{factory-QLW773DP.js.map → factory-JYAUOFEN.js.map} +0 -0
  106. /package/dist/{improvement-review-KDM6OL25.js.map → improvement-review-AHSY5ZXD.js.map} +0 -0
  107. /package/dist/{init-opencode-FXKABSGS.js.map → init-opencode-5BKE7UEB.js.map} +0 -0
  108. /package/dist/{issue-triage-OVX4VSUN.js.map → issue-triage-TNV4R33I.js.map} +0 -0
  109. /package/dist/{pr-reviewer-helpers-VGIBNZBX.js.map → pr-reviewer-helpers-ZC2I5ZYD.js.map} +0 -0
  110. /package/dist/{registry-command-CGMRLZQ2.js.map → registry-command-O2GLHG3G.js.map} +0 -0
  111. /package/dist/{repo-security-plan-TBCMGL5Z.js.map → repo-security-plan-CFRLHIMY.js.map} +0 -0
  112. /package/dist/{research-helpers-synthesize-76ZZYWJ5.js.map → research-helpers-synthesize-ONWBGXHO.js.map} +0 -0
  113. /package/dist/{routing-memory-PZ4LTLXJ.js.map → routing-memory-XHZKEPUH.js.map} +0 -0
  114. /package/dist/{session-memory-C55R7LGY.js.map → session-memory-5QVKDE4U.js.map} +0 -0
  115. /package/dist/{setup-command-AVQWHV5L.js.map → setup-command-G7OB4QQG.js.map} +0 -0
  116. /package/dist/{setup-config-SMRMMT6Z.js.map → setup-config-MMBOL5CW.js.map} +0 -0
  117. /package/dist/{setup-custom-api-42JXTJHU.js.map → setup-custom-api-RQ3BUMJC.js.map} +0 -0
  118. /package/dist/{tool-memory-LCDNVPFI.js.map → tool-memory-VK4IZLPN.js.map} +0 -0
  119. /package/dist/{unified-registry-XEXWGKV5.js.map → unified-registry-ZOTGM4EY.js.map} +0 -0
  120. /package/dist/{weather-report-DPADAXFN.js.map → weather-report-MPD66LKP.js.map} +0 -0
@@ -1,6 +1,6 @@
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";
@@ -20,10 +20,10 @@ import {
20
20
  DEFAULT_TASK_TTL_MS,
21
21
  DEFAULT_TOOL_RATE_LIMITS,
22
22
  clampTaskTtl
23
- } from "./chunk-YIEMNZUD.js";
23
+ } from "./chunk-PXTZ6RPP.js";
24
24
  import {
25
25
  executeExpert
26
- } from "./chunk-U43BUJSN.js";
26
+ } from "./chunk-HNAFWKJG.js";
27
27
  import {
28
28
  JobStatusSchema,
29
29
  abortJob,
@@ -44,21 +44,21 @@ import {
44
44
  simulationDeniedResult,
45
45
  toJobSummary,
46
46
  writeJobCancelled
47
- } from "./chunk-55NRU7SV.js";
47
+ } from "./chunk-FQNG6ZIW.js";
48
48
  import {
49
49
  normalizeTopicToCanonical,
50
50
  synthesizeResearch
51
- } from "./chunk-TFYQRAWT.js";
51
+ } from "./chunk-ORRKK563.js";
52
52
  import {
53
53
  IssueTriage
54
- } from "./chunk-CVLVWHXG.js";
54
+ } from "./chunk-JYVPM37A.js";
55
55
  import {
56
56
  resolveEnvMode,
57
57
  sanitizeInput
58
- } from "./chunk-TZNJCTNQ.js";
58
+ } from "./chunk-F2YZ3U6O.js";
59
59
  import {
60
60
  withPrerequisite
61
- } from "./chunk-DUUMMELV.js";
61
+ } from "./chunk-PRSGZQNB.js";
62
62
  import {
63
63
  NOOP_NOTIFIER,
64
64
  RateLimiter,
@@ -81,12 +81,12 @@ import {
81
81
  withAuditTrail,
82
82
  withProgressHeartbeat,
83
83
  wrapToolWithTimeout
84
- } from "./chunk-3SMFRAX5.js";
84
+ } from "./chunk-V5RPW2ZX.js";
85
85
  import {
86
86
  createAuditTrail,
87
87
  createGraphAuditBridge,
88
88
  emitPipelinePolicyEvent
89
- } from "./chunk-NBPA4PQD.js";
89
+ } from "./chunk-BFDVV3Q3.js";
90
90
  import {
91
91
  addResearchPaper,
92
92
  addSourceToRegistry,
@@ -114,15 +114,15 @@ import {
114
114
  parseRegistry,
115
115
  sourceExistsInRegistry,
116
116
  summarizeContextForPrompt
117
- } from "./chunk-3GYRM7D6.js";
117
+ } from "./chunk-WOY6TQCH.js";
118
118
  import {
119
119
  getTokenEnvVars,
120
120
  resolveToken
121
- } from "./chunk-JV64QX3Y.js";
121
+ } from "./chunk-UWRDWX6L.js";
122
122
  import {
123
123
  loadPapersRegistry,
124
124
  loadTechniquesRegistry
125
- } from "./chunk-YPPYRLDF.js";
125
+ } from "./chunk-6LXTT6AK.js";
126
126
  import {
127
127
  resolveInsideRoot
128
128
  } from "./chunk-NUBSJGQZ.js";
@@ -131,14 +131,14 @@ import {
131
131
  MemoryImportance,
132
132
  calculateTextJaccardSimilarity,
133
133
  getToolMemory
134
- } from "./chunk-MQUSJVER.js";
134
+ } from "./chunk-I7OZP6FS.js";
135
135
  import {
136
136
  STOPWORDS,
137
137
  truncateWithInfo
138
138
  } from "./chunk-6T3EPABN.js";
139
139
  import {
140
140
  createSessionMemory
141
- } from "./chunk-LQ2ABFLI.js";
141
+ } from "./chunk-DMFMJFRY.js";
142
142
  import {
143
143
  BUILT_IN_EXPERTS,
144
144
  BuiltInExpertTypeSchema,
@@ -153,7 +153,7 @@ import {
153
153
  createEvent,
154
154
  getGlobalEventBus,
155
155
  getGlobalRegistry
156
- } from "./chunk-MYNI3CYT.js";
156
+ } from "./chunk-BZFF3YWU.js";
157
157
  import {
158
158
  CliDetectionCache,
159
159
  asRecord,
@@ -161,19 +161,19 @@ import {
161
161
  getAvailableClis,
162
162
  sleep,
163
163
  withTimeout
164
- } from "./chunk-IXZXG2MY.js";
164
+ } from "./chunk-ZI4PO2A3.js";
165
165
  import {
166
166
  DEFAULTS
167
- } from "./chunk-6PYVTJZF.js";
167
+ } from "./chunk-P54BDACX.js";
168
168
  import {
169
169
  getAvailabilityCache,
170
170
  getCliForModelId,
171
171
  resolveFallback
172
- } from "./chunk-3HVF4BG4.js";
172
+ } from "./chunk-3LVB5OE2.js";
173
173
  import {
174
174
  generateHyphenId,
175
175
  generateUUID
176
- } from "./chunk-33X5V4PL.js";
176
+ } from "./chunk-GS3UPAUE.js";
177
177
  import {
178
178
  AGENT_ROUTER_TIMEOUTS,
179
179
  API_TIMEOUTS,
@@ -265,7 +265,7 @@ import {
265
265
  selectStrategyByManifest,
266
266
  toExpertTaskAnalysisResult,
267
267
  withStep
268
- } from "./chunk-PZ3BB3PO.js";
268
+ } from "./chunk-Z66EEQ4A.js";
269
269
  import {
270
270
  ensureLearningDir,
271
271
  getMetaOutcomesFile,
@@ -26300,7 +26300,7 @@ function execIdFields(executionId) {
26300
26300
  async function populateUnifiedContextOnState(state, options) {
26301
26301
  const taskCandidate = state["task"];
26302
26302
  if (typeof taskCandidate !== "string" || taskCandidate === "") return;
26303
- const { getContextForTask: getContextForTask2, inferTaskCategory: inferTaskCategory2 } = await import("./context-retriever-5UJC5KDZ.js");
26303
+ const { getContextForTask: getContextForTask2, inferTaskCategory: inferTaskCategory2 } = await import("./context-retriever-YCKTCDGM.js");
26304
26304
  const category = inferTaskCategory2(taskCandidate);
26305
26305
  const executionId = options?.executionId;
26306
26306
  const execFields = execIdFields(executionId);
@@ -39689,30 +39689,93 @@ function registerSearchCodebaseTool(server, deps) {
39689
39689
  // src/mcp/tools/extract-symbols-tool.ts
39690
39690
  import { resolve as resolve8, sep as sep4 } from "path";
39691
39691
  import { z as z80 } from "zod";
39692
+ var DEFAULT_EXTRACT_MAX_CHARS = 2e4;
39693
+ var DEFAULT_EXTRACT_MAX_SYMBOLS = 200;
39692
39694
  var ExtractSymbolsInputSchema = z80.object({
39693
39695
  filePath: z80.string().min(1).max(500).describe("Path to TypeScript/JavaScript file to extract symbols from"),
39694
- 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
+ )
39695
39703
  });
39696
- function buildFullSymbolOutput(result) {
39697
- return JSON.stringify(
39698
- {
39699
- filePath: result.filePath,
39700
- totalLines: result.totalLines,
39701
- totalChars: result.totalChars,
39702
- symbolChars: result.symbolChars,
39703
- savingsPercent: result.savingsPercent,
39704
- symbols: result.symbols.map((s) => ({
39705
- name: s.name,
39706
- kind: s.kind,
39707
- startLine: s.startLine,
39708
- endLine: s.endLine,
39709
- exported: s.exported,
39710
- text: s.text
39711
- }))
39712
- },
39713
- null,
39714
- 2
39715
- );
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);
39716
39779
  }
39717
39780
  async function extractSymbolsHandler(args, ctx) {
39718
39781
  const parsed = ExtractSymbolsInputSchema.safeParse(args);
@@ -39722,7 +39785,7 @@ async function extractSymbolsHandler(args, ctx) {
39722
39785
  message: `Validation error: ${formatZodError(parsed.error)}`
39723
39786
  });
39724
39787
  }
39725
- const { filePath, mode } = parsed.data;
39788
+ const { filePath, mode, maxChars, maxSymbols } = parsed.data;
39726
39789
  const resolvedPath = resolve8(filePath);
39727
39790
  const cwdRoot = resolve8(".");
39728
39791
  if (resolvedPath !== cwdRoot && !resolvedPath.startsWith(cwdRoot + sep4)) {
@@ -39733,7 +39796,12 @@ async function extractSymbolsHandler(args, ctx) {
39733
39796
  }
39734
39797
  try {
39735
39798
  if (mode === "full") {
39736
- 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);
39737
39805
  }
39738
39806
  const index = await extractSymbolIndex(resolvedPath);
39739
39807
  if (index === "") {
@@ -39753,9 +39821,15 @@ function registerExtractSymbolsTool(server, deps) {
39753
39821
  const logger58 = deps.logger ?? createLogger({ tool: "extract_symbols" });
39754
39822
  const toolSchema = {
39755
39823
  filePath: z80.string().min(1).max(500).describe("Path to TypeScript/JavaScript file"),
39756
- 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
+ )
39757
39831
  };
39758
- 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.";
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.`;
39759
39833
  const secureHandler = createSecureHandler(extractSymbolsHandler, {
39760
39834
  toolName: "extract_symbols",
39761
39835
  rateLimiter: deps.rateLimiter,
@@ -41600,7 +41674,7 @@ async function tryIssueTriage(task) {
41600
41674
  try {
41601
41675
  const issueMatch = task.match(/github\.com\/([^/]+\/[^/]+)\/issues\/(\d+)/);
41602
41676
  if (issueMatch === null) return null;
41603
- const { createIssueTriage } = await import("./issue-triage-OVX4VSUN.js");
41677
+ const { createIssueTriage } = await import("./issue-triage-TNV4R33I.js");
41604
41678
  const triage = createIssueTriage();
41605
41679
  const owner = issueMatch[1] ?? "";
41606
41680
  const num = issueMatch[2] ?? "";
@@ -41628,7 +41702,7 @@ var VALID_TEMPLATES = /* @__PURE__ */ new Set([
41628
41702
  ]);
41629
41703
  async function classifyWithLLM(task) {
41630
41704
  try {
41631
- const { executeExpert: executeExpert2 } = await import("./expert-bridge-BNMCDENK.js");
41705
+ const { executeExpert: executeExpert2 } = await import("./expert-bridge-EAR6XZJA.js");
41632
41706
  const prompt = [
41633
41707
  "Classify this task into exactly one pipeline template.",
41634
41708
  "Templates: dev (implementation/bug fix/refactor), research (investigate/evaluate/compare),",
@@ -43269,7 +43343,7 @@ var memoryInitPromise = null;
43269
43343
  async function initPipelineMemory() {
43270
43344
  if (cachedMemory !== null) return cachedMemory;
43271
43345
  try {
43272
- const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-C55R7LGY.js");
43346
+ const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-5QVKDE4U.js");
43273
43347
  const { getLearningDir } = await import("./learning-persistence-6D5GGT7D.js");
43274
43348
  const mem = createSessionMemory2(getLearningDir());
43275
43349
  mem.startSession(`pipeline-${String(getTimeProvider().now())}`);
@@ -43331,7 +43405,7 @@ function recordRoutingExperience(category, success, durationMs, tokensUsed = 0,
43331
43405
  callRecord(routingMemoryCache);
43332
43406
  return;
43333
43407
  }
43334
- routingMemoryInitPromise ??= import("./routing-memory-PZ4LTLXJ.js").then(({ createRoutingMemory }) => {
43408
+ routingMemoryInitPromise ??= import("./routing-memory-XHZKEPUH.js").then(({ createRoutingMemory }) => {
43335
43409
  routingMemoryCache ??= createRoutingMemory();
43336
43410
  return routingMemoryCache;
43337
43411
  }).catch((error) => {
@@ -43365,7 +43439,7 @@ ${text}` : "";
43365
43439
  }
43366
43440
  async function getWeatherContext() {
43367
43441
  try {
43368
- const { generateWeatherReport: generateWeatherReport2 } = await import("./weather-report-DPADAXFN.js");
43442
+ const { generateWeatherReport: generateWeatherReport2 } = await import("./weather-report-MPD66LKP.js");
43369
43443
  const report = generateWeatherReport2({ includeAdaptive: true });
43370
43444
  const mappings = "recommendedMappings" in report ? report.recommendedMappings : [];
43371
43445
  if (!Array.isArray(mappings) || mappings.length === 0) return "";
@@ -43383,7 +43457,7 @@ ${lines}
43383
43457
  }
43384
43458
  async function getMemoryContext(task) {
43385
43459
  try {
43386
- const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-C55R7LGY.js");
43460
+ const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-5QVKDE4U.js");
43387
43461
  const { getLearningDir } = await import("./learning-persistence-6D5GGT7D.js");
43388
43462
  const memory = createSessionMemory2(getLearningDir(), { maxLearningsInContext: 10 });
43389
43463
  const learnings = memory.searchLearnings(task.slice(0, 200));
@@ -43498,7 +43572,7 @@ ${contextBlock}`;
43498
43572
  const strategy = config.votingStrategy ?? "higher_order";
43499
43573
  await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
43500
43574
  try {
43501
- const { executeVoting } = await import("./consensus-vote-M4ZELBV4.js");
43575
+ const { executeVoting } = await import("./consensus-vote-KWPS6WNH.js");
43502
43576
  const votingResult = await executeVoting(
43503
43577
  {
43504
43578
  proposal: buildVoteProposal(plan, research),
@@ -43939,7 +44013,7 @@ async function searchCodebaseForTask(task) {
43939
44013
  }
43940
44014
  async function queryResearchRegistry(task) {
43941
44015
  try {
43942
- const { synthesizeResearch: synthesizeResearch2 } = await import("./research-helpers-synthesize-76ZZYWJ5.js");
44016
+ const { synthesizeResearch: synthesizeResearch2 } = await import("./research-helpers-synthesize-ONWBGXHO.js");
43943
44017
  const topic = task.split(/[.!?\n]/).filter((s) => s.trim().length > 10)[0]?.trim();
43944
44018
  if (topic === void 0) return null;
43945
44019
  const result = await synthesizeResearch2(topic.slice(0, 50));
@@ -44010,7 +44084,7 @@ function createScanStageWrapper() {
44010
44084
  try {
44011
44085
  const slug = ctx.task.match(/([a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+)/)?.[1];
44012
44086
  if (slug !== void 0) {
44013
- const { generateSecurityPlan: generateSecurityPlan2 } = await import("./repo-security-plan-TBCMGL5Z.js");
44087
+ const { generateSecurityPlan: generateSecurityPlan2 } = await import("./repo-security-plan-CFRLHIMY.js");
44014
44088
  const plan = await generateSecurityPlan2({ repo: slug, maxScanners: 10 });
44015
44089
  const recs = plan.recommendations.slice(0, 5).map((r) => `${r.priority}: ${r.displayName} (${r.category})`).join("; ");
44016
44090
  return output(PIPELINE_STATE_KEYS.FINDINGS, recs, getTimeProvider().now() - start, true);
@@ -46970,7 +47044,7 @@ var GitHubTaskTracker = class {
46970
47044
  cachedProvider = null;
46971
47045
  async getProvider() {
46972
47046
  if (this.cachedProvider !== null) return this.cachedProvider;
46973
- const { createScmProvider } = await import("./factory-QLW773DP.js");
47047
+ const { createScmProvider } = await import("./factory-7SVW7XMV.js");
46974
47048
  const result = await createScmProvider({ repo: this.config.repo ?? "" });
46975
47049
  if (!result.ok) throw new Error(`SCM provider error: ${result.error.message}`);
46976
47050
  this.cachedProvider = result.value;
@@ -47777,7 +47851,7 @@ async function probeSource(source, includeModelIds) {
47777
47851
  }
47778
47852
  }
47779
47853
  async function defaultSources(includeOpenRouter) {
47780
- const { createAllAdapters: createAllAdapters2 } = await import("./factory-77GX5DG4.js");
47854
+ const { createAllAdapters: createAllAdapters2 } = await import("./factory-JYAUOFEN.js");
47781
47855
  const adapters = createAllAdapters2();
47782
47856
  return buildDefaultModelSources(adapters, { includeOpenRouter });
47783
47857
  }
@@ -51846,4 +51920,4 @@ export {
51846
51920
  shutdownFeedbackSubscriber,
51847
51921
  createEventBusBridge
51848
51922
  };
51849
- //# sourceMappingURL=chunk-RLRAUL43.js.map
51923
+ //# sourceMappingURL=chunk-JBH4CU46.js.map