@memlab/mcp-server 2.1.1 → 2.18.1

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 (175) hide show
  1. package/README.md +83 -3
  2. package/dist/analysis-budget.d.ts +71 -0
  3. package/dist/analysis-budget.d.ts.map +1 -0
  4. package/dist/analysis-budget.js +118 -0
  5. package/dist/analysis-budget.js.map +1 -0
  6. package/dist/guardrail.d.ts +24 -0
  7. package/dist/guardrail.d.ts.map +1 -0
  8. package/dist/guardrail.js +65 -0
  9. package/dist/guardrail.js.map +1 -0
  10. package/dist/heap-state.d.ts +53 -1
  11. package/dist/heap-state.d.ts.map +1 -1
  12. package/dist/heap-state.js +153 -10
  13. package/dist/heap-state.js.map +1 -1
  14. package/dist/index.js +38 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/tools/array-group-by.d.ts +12 -0
  17. package/dist/tools/array-group-by.d.ts.map +1 -0
  18. package/dist/tools/array-group-by.js +191 -0
  19. package/dist/tools/array-group-by.js.map +1 -0
  20. package/dist/tools/auto-investigate.d.ts.map +1 -1
  21. package/dist/tools/auto-investigate.js +1056 -52
  22. package/dist/tools/auto-investigate.js.map +1 -1
  23. package/dist/tools/cache-analysis.d.ts.map +1 -1
  24. package/dist/tools/cache-analysis.js +438 -21
  25. package/dist/tools/cache-analysis.js.map +1 -1
  26. package/dist/tools/check-health.d.ts.map +1 -1
  27. package/dist/tools/check-health.js +261 -1
  28. package/dist/tools/check-health.js.map +1 -1
  29. package/dist/tools/class-histogram.d.ts.map +1 -1
  30. package/dist/tools/class-histogram.js +142 -33
  31. package/dist/tools/class-histogram.js.map +1 -1
  32. package/dist/tools/closure-inspection.d.ts.map +1 -1
  33. package/dist/tools/closure-inspection.js +238 -25
  34. package/dist/tools/closure-inspection.js.map +1 -1
  35. package/dist/tools/detached-dom.d.ts.map +1 -1
  36. package/dist/tools/detached-dom.js +25 -3
  37. package/dist/tools/detached-dom.js.map +1 -1
  38. package/dist/tools/dev-artifacts.d.ts +33 -0
  39. package/dist/tools/dev-artifacts.d.ts.map +1 -0
  40. package/dist/tools/dev-artifacts.js +165 -0
  41. package/dist/tools/dev-artifacts.js.map +1 -0
  42. package/dist/tools/diff-snapshots.d.ts.map +1 -1
  43. package/dist/tools/diff-snapshots.js +200 -48
  44. package/dist/tools/diff-snapshots.js.map +1 -1
  45. package/dist/tools/duplicated-strings.d.ts.map +1 -1
  46. package/dist/tools/duplicated-strings.js +74 -12
  47. package/dist/tools/duplicated-strings.js.map +1 -1
  48. package/dist/tools/eval.d.ts.map +1 -1
  49. package/dist/tools/eval.js +189 -10
  50. package/dist/tools/eval.js.map +1 -1
  51. package/dist/tools/event-listener-leaks.d.ts.map +1 -1
  52. package/dist/tools/event-listener-leaks.js +235 -13
  53. package/dist/tools/event-listener-leaks.js.map +1 -1
  54. package/dist/tools/event-registry.d.ts +12 -0
  55. package/dist/tools/event-registry.d.ts.map +1 -0
  56. package/dist/tools/event-registry.js +183 -0
  57. package/dist/tools/event-registry.js.map +1 -0
  58. package/dist/tools/find-by-property.d.ts.map +1 -1
  59. package/dist/tools/find-by-property.js +113 -31
  60. package/dist/tools/find-by-property.js.map +1 -1
  61. package/dist/tools/find-by-shape.d.ts +12 -0
  62. package/dist/tools/find-by-shape.d.ts.map +1 -0
  63. package/dist/tools/find-by-shape.js +178 -0
  64. package/dist/tools/find-by-shape.js.map +1 -0
  65. package/dist/tools/find-nodes-by-class.d.ts.map +1 -1
  66. package/dist/tools/find-nodes-by-class.js +50 -6
  67. package/dist/tools/find-nodes-by-class.js.map +1 -1
  68. package/dist/tools/for-each.d.ts.map +1 -1
  69. package/dist/tools/for-each.js +1 -1
  70. package/dist/tools/for-each.js.map +1 -1
  71. package/dist/tools/get-node.d.ts.map +1 -1
  72. package/dist/tools/get-node.js +6 -0
  73. package/dist/tools/get-node.js.map +1 -1
  74. package/dist/tools/get-references.d.ts.map +1 -1
  75. package/dist/tools/get-references.js +35 -6
  76. package/dist/tools/get-references.js.map +1 -1
  77. package/dist/tools/get-referrers.d.ts.map +1 -1
  78. package/dist/tools/get-referrers.js +35 -6
  79. package/dist/tools/get-referrers.js.map +1 -1
  80. package/dist/tools/get-string.d.ts +12 -0
  81. package/dist/tools/get-string.d.ts.map +1 -0
  82. package/dist/tools/get-string.js +223 -0
  83. package/dist/tools/get-string.js.map +1 -0
  84. package/dist/tools/get-value.d.ts +12 -0
  85. package/dist/tools/get-value.d.ts.map +1 -0
  86. package/dist/tools/get-value.js +152 -0
  87. package/dist/tools/get-value.js.map +1 -0
  88. package/dist/tools/global-variables.d.ts.map +1 -1
  89. package/dist/tools/global-variables.js +54 -34
  90. package/dist/tools/global-variables.js.map +1 -1
  91. package/dist/tools/growth-signals.d.ts +12 -0
  92. package/dist/tools/growth-signals.d.ts.map +1 -0
  93. package/dist/tools/growth-signals.js +211 -0
  94. package/dist/tools/growth-signals.js.map +1 -0
  95. package/dist/tools/intern-opportunities.d.ts +12 -0
  96. package/dist/tools/intern-opportunities.d.ts.map +1 -0
  97. package/dist/tools/intern-opportunities.js +870 -0
  98. package/dist/tools/intern-opportunities.js.map +1 -0
  99. package/dist/tools/largest-objects.d.ts.map +1 -1
  100. package/dist/tools/largest-objects.js +37 -14
  101. package/dist/tools/largest-objects.js.map +1 -1
  102. package/dist/tools/load-snapshot.d.ts +70 -0
  103. package/dist/tools/load-snapshot.d.ts.map +1 -1
  104. package/dist/tools/load-snapshot.js +446 -17
  105. package/dist/tools/load-snapshot.js.map +1 -1
  106. package/dist/tools/object-cost-breakdown.d.ts +12 -0
  107. package/dist/tools/object-cost-breakdown.d.ts.map +1 -0
  108. package/dist/tools/object-cost-breakdown.js +439 -0
  109. package/dist/tools/object-cost-breakdown.js.map +1 -0
  110. package/dist/tools/object-shape.d.ts.map +1 -1
  111. package/dist/tools/object-shape.js +109 -2
  112. package/dist/tools/object-shape.js.map +1 -1
  113. package/dist/tools/pinch-points.d.ts.map +1 -1
  114. package/dist/tools/pinch-points.js +9 -9
  115. package/dist/tools/pinch-points.js.map +1 -1
  116. package/dist/tools/property-distribution.d.ts +12 -0
  117. package/dist/tools/property-distribution.d.ts.map +1 -0
  118. package/dist/tools/property-distribution.js +168 -0
  119. package/dist/tools/property-distribution.js.map +1 -0
  120. package/dist/tools/quick-diagnosis.d.ts.map +1 -1
  121. package/dist/tools/quick-diagnosis.js +65 -20
  122. package/dist/tools/quick-diagnosis.js.map +1 -1
  123. package/dist/tools/retainer-summary.d.ts.map +1 -1
  124. package/dist/tools/retainer-summary.js +90 -5
  125. package/dist/tools/retainer-summary.js.map +1 -1
  126. package/dist/tools/retainer-trace.d.ts.map +1 -1
  127. package/dist/tools/retainer-trace.js +173 -43
  128. package/dist/tools/retainer-trace.js.map +1 -1
  129. package/dist/tools/search-nodes.d.ts.map +1 -1
  130. package/dist/tools/search-nodes.js +10 -3
  131. package/dist/tools/search-nodes.js.map +1 -1
  132. package/dist/tools/search-strings.d.ts +12 -0
  133. package/dist/tools/search-strings.d.ts.map +1 -0
  134. package/dist/tools/search-strings.js +182 -0
  135. package/dist/tools/search-strings.js.map +1 -0
  136. package/dist/tools/sequence-analysis.d.ts +12 -0
  137. package/dist/tools/sequence-analysis.d.ts.map +1 -0
  138. package/dist/tools/sequence-analysis.js +244 -0
  139. package/dist/tools/sequence-analysis.js.map +1 -0
  140. package/dist/tools/server-status.d.ts +12 -0
  141. package/dist/tools/server-status.d.ts.map +1 -0
  142. package/dist/tools/server-status.js +41 -0
  143. package/dist/tools/server-status.js.map +1 -0
  144. package/dist/tools/shape-histogram.d.ts.map +1 -1
  145. package/dist/tools/shape-histogram.js +61 -16
  146. package/dist/tools/shape-histogram.js.map +1 -1
  147. package/dist/tools/sliced-strings.d.ts.map +1 -1
  148. package/dist/tools/sliced-strings.js +38 -15
  149. package/dist/tools/sliced-strings.js.map +1 -1
  150. package/dist/tools/snapshot-header.d.ts +28 -0
  151. package/dist/tools/snapshot-header.d.ts.map +1 -0
  152. package/dist/tools/snapshot-header.js +111 -0
  153. package/dist/tools/snapshot-header.js.map +1 -0
  154. package/dist/tools/snapshot-summary.d.ts.map +1 -1
  155. package/dist/tools/snapshot-summary.js +55 -13
  156. package/dist/tools/snapshot-summary.js.map +1 -1
  157. package/dist/tools/snapshots.d.ts +12 -0
  158. package/dist/tools/snapshots.d.ts.map +1 -0
  159. package/dist/tools/snapshots.js +93 -0
  160. package/dist/tools/snapshots.js.map +1 -0
  161. package/dist/tools/stale-collections.d.ts.map +1 -1
  162. package/dist/tools/stale-collections.js +248 -7
  163. package/dist/tools/stale-collections.js.map +1 -1
  164. package/dist/tools/trace-dominators.d.ts.map +1 -1
  165. package/dist/tools/trace-dominators.js +28 -1
  166. package/dist/tools/trace-dominators.js.map +1 -1
  167. package/dist/tools/weakmap-entries.d.ts +12 -0
  168. package/dist/tools/weakmap-entries.d.ts.map +1 -0
  169. package/dist/tools/weakmap-entries.js +156 -0
  170. package/dist/tools/weakmap-entries.js.map +1 -0
  171. package/dist/utils.d.ts +139 -2
  172. package/dist/utils.d.ts.map +1 -1
  173. package/dist/utils.js +448 -35
  174. package/dist/utils.js.map +1 -1
  175. package/package.json +3 -3
@@ -9,7 +9,7 @@
9
9
  */
10
10
  import { z } from 'zod';
11
11
  import { getSnapshot } from '../heap-state.js';
12
- import { filterLargestObjects, formatBytes, errorResult, toolResult, } from '../utils.js';
12
+ import { filterLargestObjects, formatBytes, truncateDomToTag, errorResult, toolResult, } from '../utils.js';
13
13
  const FRAMEWORK_PATTERNS = new Set([
14
14
  'system / Context',
15
15
  'system / PromiseReaction',
@@ -79,6 +79,12 @@ function traceToKey(steps, frameworkFilter) {
79
79
  .join(' ');
80
80
  }
81
81
  function shortenPath(name) {
82
+ const isDomLike = name.includes('class="') ||
83
+ name.includes('aria-') ||
84
+ name.startsWith('<') ||
85
+ name.startsWith('Detached <');
86
+ if (isDomLike)
87
+ return truncateDomToTag(name);
82
88
  if (name.length <= 40)
83
89
  return name;
84
90
  const parts = name.split('/');
@@ -127,6 +133,13 @@ export function registerRetainerSummary(server) {
127
133
  .string()
128
134
  .optional()
129
135
  .describe('Match nodes whose name starts with this prefix (e.g., "Detached" matches all detached DOM nodes regardless of element type). Use instead of class_name when the exact name varies.'),
136
+ shape: z
137
+ .array(z.string())
138
+ .optional()
139
+ .describe('Find objects by property shape — objects that have ALL of these property names. ' +
140
+ 'Use instead of class_name when constructor is "Object" and you know the property ' +
141
+ 'structure (e.g., ["callback", "context"]). Matches the {prop1, prop2} naming ' +
142
+ 'from shape_histogram output.'),
130
143
  node_ids: z
131
144
  .array(z.number())
132
145
  .optional()
@@ -150,7 +163,14 @@ export function registerRetainerSummary(server) {
150
163
  .optional()
151
164
  .default(false)
152
165
  .describe('Exclude known V8/Node.js framework internals (system / Context, PromiseReaction, module cache patterns) from retainer paths. Helps surface application-level retention.'),
153
- }, async ({ class_name, name_prefix, node_ids, sample, max_depth, compact, framework_filter, }) => {
166
+ include_properties: z
167
+ .boolean()
168
+ .optional()
169
+ .default(false)
170
+ .describe('For each sampled node, also show its direct property edges (name -> target type/name). ' +
171
+ 'Combines "where is it retained?" with "what does it contain?" in one call. ' +
172
+ 'Saves a follow-up memlab_object_shape call per node.'),
173
+ }, async ({ class_name, name_prefix, shape, node_ids, sample, max_depth, compact, framework_filter, include_properties, }) => {
154
174
  try {
155
175
  const snapshot = getSnapshot();
156
176
  let nodes;
@@ -164,6 +184,23 @@ export function registerRetainerSummary(server) {
164
184
  }
165
185
  label = `${nodes.length} specified node(s)`;
166
186
  }
187
+ else if (shape && shape.length > 0) {
188
+ const requiredProps = new Set(shape);
189
+ nodes = filterLargestObjects(snapshot, node => {
190
+ if (node.type !== 'object' || node.id <= 3)
191
+ return false;
192
+ const foundProps = new Set();
193
+ for (const edge of node.references) {
194
+ if (edge.type === 'property') {
195
+ const name = String(edge.name_or_index);
196
+ if (requiredProps.has(name))
197
+ foundProps.add(name);
198
+ }
199
+ }
200
+ return foundProps.size === requiredProps.size;
201
+ }, sample);
202
+ label = `shape {${shape.join(', ')}}`;
203
+ }
167
204
  else if (name_prefix) {
168
205
  nodes = filterLargestObjects(snapshot, node => node.name.startsWith(name_prefix), sample);
169
206
  label = `prefix "${name_prefix}"`;
@@ -179,10 +216,14 @@ export function registerRetainerSummary(server) {
179
216
  label = `"${class_name}"`;
180
217
  }
181
218
  else {
182
- return errorResult(new Error('Either class_name, name_prefix, or node_ids must be provided.'));
219
+ return errorResult(new Error('Either class_name, name_prefix, shape, or node_ids must be provided.'));
183
220
  }
184
221
  if (nodes.length === 0) {
185
- return toolResult(`No objects found for ${label}`);
222
+ const suggestions = [`No objects found for ${label}.`, ''];
223
+ if (class_name) {
224
+ suggestions.push(`**Possible reasons:**`, `- The class name may not match exactly — V8 uses constructor names, not class declarations`, `- For DOM nodes, try \`name_prefix: "Detached"\` instead of class_name`, `- For shape-based queries, use \`memlab_find_by_shape\` with property names instead`, '', `**Try instead:**`, `- \`memlab_search_nodes\` with a regex pattern to find partial matches`, `- \`memlab_class_histogram\` to see all class names in the snapshot`, `- \`memlab_find_by_property\` if you know a property name on the target objects`);
225
+ }
226
+ return toolResult(suggestions.join('\n'));
186
227
  }
187
228
  const patterns = new Map();
188
229
  let noTrace = 0;
@@ -292,10 +333,54 @@ export function registerRetainerSummary(server) {
292
333
  : formatFn(displaySteps));
293
334
  lines.push('');
294
335
  lines.push(`Example nodes: ${p.example_ids.map(id => `@${id}`).join(', ')}`);
336
+ if (include_properties) {
337
+ for (const exId of p.example_ids.slice(0, 2)) {
338
+ const exNode = snapshot.getNodeById(exId);
339
+ if (!exNode)
340
+ continue;
341
+ const props = [];
342
+ for (const edge of exNode.references) {
343
+ if (edge.type === 'property' ||
344
+ edge.type === 'element' ||
345
+ edge.type === 'context') {
346
+ const target = edge.toNode;
347
+ if (target.id <= 3)
348
+ continue;
349
+ let valPreview;
350
+ if (target.isString) {
351
+ const strNode = target.toStringNode();
352
+ const sv = strNode?.stringValue ?? target.name;
353
+ valPreview = `"${sv.length > 30 ? sv.slice(0, 27) + '...' : sv}"`;
354
+ }
355
+ else {
356
+ valPreview = `${target.name} (${target.type})`;
357
+ }
358
+ props.push(`${String(edge.name_or_index)}: ${valPreview}`);
359
+ if (props.length >= 8)
360
+ break;
361
+ }
362
+ }
363
+ if (props.length > 0) {
364
+ lines.push(` @${exId} properties: {${props.join(', ')}}`);
365
+ }
366
+ }
367
+ }
295
368
  lines.push('');
296
369
  }
297
370
  if (noTrace > 0) {
298
- lines.push(`(${noTrace} instance(s) had no retainer path — root or unreachable nodes)`);
371
+ const noTraceNodes = nodes.filter(n => !n.hasPathEdge);
372
+ const withReferrers = noTraceNodes.filter(n => n.numOfReferrers > 0).length;
373
+ const noReferrers = noTrace - withReferrers;
374
+ const parts = [
375
+ `${noTrace} instance(s) had no retainer path:`,
376
+ ];
377
+ if (noReferrers > 0) {
378
+ parts.push(`${noReferrers} with no referrers (GC-eligible, safe to ignore)`);
379
+ }
380
+ if (withReferrers > 0) {
381
+ parts.push(`${withReferrers} with referrers but no GC root path (possibly weak-only retention — use \`memlab_get_referrers\` to inspect)`);
382
+ }
383
+ lines.push(`(${parts.join('; ')})`);
299
384
  }
300
385
  return toolResult(lines.join('\n'));
301
386
  }
@@ -1 +1 @@
1
- {"version":3,"file":"retainer-summary.js","sourceRoot":"","sources":["../../src/tools/retainer-summary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retainer-summary.js","sourceRoot":"","sources":["../../src/tools/retainer-summary.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,UAAU,GACX,MAAM,aAAa,CAAC;AAQrB,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,kBAAkB;IAClB,0BAA0B;IAC1B,wBAAwB;IACxB,wBAAwB;IACxB,0BAA0B;IAC1B,uBAAuB;IACvB,uBAAuB;IACvB,sBAAsB;IACtB,sBAAsB;IACtB,wBAAwB;IACxB,kBAAkB;IAClB,YAAY;IACZ,gBAAgB;IAChB,YAAY;IACZ,wBAAwB;CACzB,CAAC,CAAC;AAEH,SAAS,eAAe,CAAC,IAAe;IACtC,IAAI,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACrE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACpE,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACrE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAe;IACvC,IAAI,CAAC,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3C,IAAI,OAAO,GAAqB,IAAI,CAAC;IACrC,MAAM,YAAY,GAAgB,CAAC,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAC,CAAC,CAAC;IAE7E,OAAO,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,IAAI,GAAqB,OAAO,CAAC,QAAQ,CAAC;QAChD,IAAI,CAAC,IAAI;YAAE,MAAM;QACjB,MAAM,QAAQ,GAAc,IAAI,CAAC,QAAQ,CAAC;QAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,MAAM;QACpC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzB,YAAY,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;SACrC,CAAC,CAAC;QACH,OAAO,GAAG,QAAQ,CAAC;IACrB,CAAC;IAED,YAAY,CAAC,OAAO,EAAE,CAAC;IACvB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACzC,CAAC;AAED,SAAS,UAAU,CAAC,KAAkB,EAAE,eAAwB;IAC9D,MAAM,QAAQ,GAAG,eAAe;QAC9B,CAAC,CAAC,KAAK,CAAC,MAAM,CACV,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CACnE;QACH,CAAC,CAAC,KAAK,CAAC;IACV,OAAO,QAAQ;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE;QACP,MAAM,IAAI,GACR,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;IACvC,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,SAAS,GACb,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAChC,IAAI,SAAS;QAAE,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpC,OAAO,KAAK,GAAG,IAAI,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAkB;IAC1C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAAkB,EAClB,eAAwB;IAExB,MAAM,QAAQ,GAAG,eAAe;QAC9B,CAAC,CAAC,KAAK,CAAC,MAAM,CACV,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CACnE;QACH,CAAC,CAAC,KAAK,CAAC;IACV,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,0eAA0e,EAC1e;QACE,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,uMAAuM,CACxM;QACH,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,oLAAoL,CACrL;QACH,KAAK,EAAE,CAAC;aACL,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,EAAE;aACV,QAAQ,CACP,kFAAkF;YAChF,mFAAmF;YACnF,+EAA+E;YAC/E,8BAA8B,CACjC;QACH,QAAQ,EAAE,CAAC;aACR,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,EAAE;aACV,QAAQ,CACP,yIAAyI,CAC1I;QACH,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,OAAO,CAAC,EAAE,CAAC;aACX,QAAQ,CACP,2HAA2H,CAC5H;QACH,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,sJAAsJ,CACvJ;QACH,OAAO,EAAE,CAAC;aACP,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CACP,sGAAsG,CACvG;QACH,gBAAgB,EAAE,CAAC;aAChB,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CACP,yKAAyK,CAC1K;QACH,kBAAkB,EAAE,CAAC;aAClB,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CACP,yFAAyF;YACvF,6EAA6E;YAC7E,sDAAsD,CACzD;KACJ,EACD,KAAK,EAAE,EACL,UAAU,EACV,WAAW,EACX,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,kBAAkB,GACnB,EAAE,EAAE;QACH,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;YAE/B,IAAI,KAAkB,CAAC;YACvB,IAAI,KAAa,CAAC;YAElB,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,KAAK,GAAG,EAAE,CAAC;gBACX,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;oBAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;oBACtC,IAAI,IAAI;wBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7B,CAAC;gBACD,KAAK,GAAG,GAAG,KAAK,CAAC,MAAM,oBAAoB,CAAC;YAC9C,CAAC;iBAAM,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;gBACrC,KAAK,GAAG,oBAAoB,CAC1B,QAAQ,EACR,IAAI,CAAC,EAAE;oBACL,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;wBAAE,OAAO,KAAK,CAAC;oBACzD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;oBACrC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;wBACnC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;4BAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;4BACxC,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;gCAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBACpD,CAAC;oBACH,CAAC;oBACD,OAAO,UAAU,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,CAAC;gBAChD,CAAC,EACD,MAAM,CACP,CAAC;gBACF,KAAK,GAAG,UAAU,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YACxC,CAAC;iBAAM,IAAI,WAAW,EAAE,CAAC;gBACvB,KAAK,GAAG,oBAAoB,CAC1B,QAAQ,EACR,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EACzC,MAAM,CACP,CAAC;gBACF,KAAK,GAAG,WAAW,WAAW,GAAG,CAAC;YACpC,CAAC;iBAAM,IAAI,UAAU,EAAE,CAAC;gBACtB,wBAAwB;gBACxB,KAAK,GAAG,oBAAoB,CAC1B,QAAQ,EACR,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,EAChC,MAAM,CACP,CAAC;gBACF,8DAA8D;gBAC9D,sDAAsD;gBACtD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,KAAK,GAAG,oBAAoB,CAC1B,QAAQ,EACR,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EACtC,MAAM,CACP,CAAC;gBACJ,CAAC;gBACD,KAAK,GAAG,IAAI,UAAU,GAAG,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,OAAO,WAAW,CAChB,IAAI,KAAK,CACP,sEAAsE,CACvE,CACF,CAAC;YACJ,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,WAAW,GAAa,CAAC,wBAAwB,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC;gBACrE,IAAI,UAAU,EAAE,CAAC;oBACf,WAAW,CAAC,IAAI,CACd,uBAAuB,EACvB,4FAA4F,EAC5F,wEAAwE,EACxE,qFAAqF,EACrF,EAAE,EACF,kBAAkB,EAClB,wEAAwE,EACxE,qEAAqE,EACrE,iFAAiF,CAClF,CAAC;gBACJ,CAAC;gBACD,OAAO,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5C,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAQrB,CAAC;YACJ,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,MAAM,oBAAoB,GAAG,CAAC,CAAC;YAE/B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;gBACzC,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;gBACvB,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO,EAAE,CAAC;oBACV,SAAS;gBACX,CAAC;gBAED,MAAM,KAAK,GACT,SAAS,IAAI,IAAI,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM;oBAC5D,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC;oBAC3B,CAAC,CAAC,KAAK,CAAC;gBACZ,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;gBAEhD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACnC,IAAI,QAAQ,EAAE,CAAC;oBACb,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACjB,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACpC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACrC,CAAC;oBACD,QAAQ,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,CAAC;gBAC/C,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE;wBAChB,KAAK;wBACL,KAAK,EAAE,CAAC;wBACR,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;wBACtB,cAAc,EAAE,IAAI,CAAC,YAAY;qBAClC,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,WAAW,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC;gBACrC,IACE,WAAW,IAAI,oBAAoB;oBACnC,QAAQ,CAAC,IAAI,KAAK,CAAC;oBACnB,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EACrB,CAAC;oBACD,SAAS,GAAG,IAAI,CAAC;oBACjB,MAAM;gBACR,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YACxE,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC;YAEvE,MAAM,SAAS,GAAa,EAAE,CAAC;YAC/B,IAAI,SAAS;gBAAE,SAAS,CAAC,IAAI,CAAC,oBAAoB,SAAS,EAAE,CAAC,CAAC;YAC/D,IAAI,OAAO;gBAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvC,IAAI,gBAAgB;gBAAE,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAC3D,IAAI,SAAS;gBAAE,SAAS,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAEvE,MAAM,KAAK,GAAG;gBACZ,wBAAwB,KAAK,KAAK,YAAY,WAAW,MAAM,GAAG;gBAClE,EAAE;aACH,CAAC;YAEF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAG,SAAS;oBACpB,CAAC,CAAC,4CAA4C;oBAC9C,CAAC,CAAC,EAAE,CAAC;gBACP,KAAK,CAAC,IAAI,CACR,SAAS,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,qFAAqF,IAAI,EAAE,EACnH,EAAE,CACH,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CACR,KAAK,MAAM,CAAC,MAAM,sCAAsC,EACxD,EAAE,CACH,CAAC;YACJ,CAAC;YAED,MAAM,WAAW,GAAG,CAAC,KAAkB,EAAe,EAAE,CACtD,gBAAgB;gBACd,CAAC,CAAC,KAAK,CAAC,MAAM,CACV,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAC3D;gBACH,CAAC,CAAC,KAAK,CAAC;YACZ,MAAM,QAAQ,GAAG,OAAO;gBACtB,CAAC,CAAC,CAAC,KAAkB,EAAE,EAAE,CACrB,uBAAuB,CAAC,KAAK,EAAE,gBAAgB,CAAC;gBACpD,CAAC,CAAC,CAAC,KAAkB,EAAE,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YAEjE,MAAM,eAAe,GAAG,CAAC,CAAuB,EAAE,EAAE,CAClD,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAE3C,IAAI,eAAe,GAAG,CAAC,CAAC;YACxB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBACxD,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;oBACvC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC5B,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;oBAC/D,IACE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;wBACjB,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;wBACnB,OAAO,CACL,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,KAAK,MAAM,CAC9D,CAAC;oBACJ,CAAC,CAAC,EACF,CAAC;wBACD,eAAe,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC3B,CAAC;yBAAM,CAAC;wBACN,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,eAAe,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAClD,CAAC,EACD,eAAe,CAChB,CAAC;gBACF,KAAK,CAAC,IAAI,CAAC,sBAAsB,eAAe,UAAU,CAAC,CAAC;gBAC5D,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;gBAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACxD,KAAK,CAAC,IAAI,CACR,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,YAAY,eAAe,GAAG,OAAO,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,WAAW,CAClH,CAAC;gBACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,MAAM,YAAY,GAChB,eAAe,IAAI,CAAC;oBAClB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;oBAC3C,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACd,KAAK,CAAC,IAAI,CACR,eAAe,IAAI,CAAC;oBAClB,CAAC,CAAC,OAAO,QAAQ,CAAC,YAAY,CAAC,EAAE;oBACjC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAC3B,CAAC;gBACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,CAAC,IAAI,CACR,kBAAkB,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjE,CAAC;gBAEF,IAAI,kBAAkB,EAAE,CAAC;oBACvB,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;wBAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;wBAC1C,IAAI,CAAC,MAAM;4BAAE,SAAS;wBACtB,MAAM,KAAK,GAAa,EAAE,CAAC;wBAC3B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;4BACrC,IACE,IAAI,CAAC,IAAI,KAAK,UAAU;gCACxB,IAAI,CAAC,IAAI,KAAK,SAAS;gCACvB,IAAI,CAAC,IAAI,KAAK,SAAS,EACvB,CAAC;gCACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gCAC3B,IAAI,MAAM,CAAC,EAAE,IAAI,CAAC;oCAAE,SAAS;gCAC7B,IAAI,UAAkB,CAAC;gCACvB,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oCACpB,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;oCACtC,MAAM,EAAE,GAAG,OAAO,EAAE,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC;oCAC/C,UAAU,GAAG,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;gCACpE,CAAC;qCAAM,CAAC;oCACN,UAAU,GAAG,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC;gCACjD,CAAC;gCACD,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,UAAU,EAAE,CAAC,CAAC;gCAC3D,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;oCAAE,MAAM;4BAC/B,CAAC;wBACH,CAAC;wBACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACrB,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,iBAAiB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAC7D,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gBACvD,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CACvC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAC1B,CAAC,MAAM,CAAC;gBACT,MAAM,WAAW,GAAG,OAAO,GAAG,aAAa,CAAC;gBAC5C,MAAM,KAAK,GAAa;oBACtB,GAAG,OAAO,oCAAoC;iBAC/C,CAAC;gBACF,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;oBACpB,KAAK,CAAC,IAAI,CACR,GAAG,WAAW,kDAAkD,CACjE,CAAC;gBACJ,CAAC;gBACD,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;oBACtB,KAAK,CAAC,IAAI,CACR,GAAG,aAAa,8GAA8G,CAC/H,CAAC;gBACJ,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtC,CAAC;YAED,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"retainer-trace.d.ts","sourceRoot":"","sources":["../../src/tools/retainer-trace.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAavE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0K7D"}
1
+ {"version":3,"file":"retainer-trace.d.ts","sourceRoot":"","sources":["../../src/tools/retainer-trace.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAkCvE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4S7D"}
@@ -9,7 +9,24 @@
9
9
  */
10
10
  import { z } from 'zod';
11
11
  import { getSnapshot } from '../heap-state.js';
12
- import { formatNodeInline, formatBytes, isNodeWorthInspecting, errorResult, toolResult, } from '../utils.js';
12
+ import { formatBytes, formatNodeInline, formatRetainerTree, isNodeWorthInspecting, instrumentationRetainerNote, errorResult, toolResult, } from '../utils.js';
13
+ // async/await desugars to a repeating retainer ladder: each suspended `await`
14
+ // frame is a `Promise → system / Context → Generator` triplet, and a deep async
15
+ // stack repeats it dozens of times with identical retained sizes. Folding the
16
+ // run keeps the signal (how much it retains) without the noise (Feedback round 5
17
+ // §10). We only fold runs of 3+ so a lone closure `system / Context` — which is
18
+ // frequently the actual leak owner — stays visible.
19
+ const ASYNC_CONTINUATION_NAMES = new Set([
20
+ 'Promise',
21
+ 'system / Context',
22
+ 'Generator',
23
+ 'AsyncGenerator',
24
+ 'AsyncGeneratorFunction',
25
+ 'AsyncFunction',
26
+ ]);
27
+ function isAsyncContinuationFrame(node) {
28
+ return ASYNC_CONTINUATION_NAMES.has(node.name);
29
+ }
13
30
  export function registerRetainerTrace(server) {
14
31
  server.tool('memlab_retainer_trace', 'Get the shortest path from a GC root to a specific heap node. This shows why the object is retained in memory by walking the pathEdge chain. Use memlab_retainer_summary to trace multiple instances of a class and group by common retainer patterns. Use memlab_get_referrers / memlab_get_references to explore incoming/outgoing edges from a node.', {
15
32
  node_id: z.number().describe('The numeric ID of the heap node'),
@@ -22,7 +39,12 @@ export function registerRetainerTrace(server) {
22
39
  .optional()
23
40
  .default(true)
24
41
  .describe('Show retained size at each node in the trace (default true). Makes it easy to see where memory concentrates along the path.'),
25
- }, async ({ node_id, max_depth, show_sizes }) => {
42
+ expand: z
43
+ .boolean()
44
+ .optional()
45
+ .default(false)
46
+ .describe('Expand the elided middle: show every node on the path instead of collapsing consecutive V8/internal runs and repeating async-continuation ladders (Promise → Context → Generator). Use when the interesting library/application boundary is hidden inside a "… N internal node(s) …" or "… N async continuation frames …" gap.'),
47
+ }, async ({ node_id, max_depth, show_sizes, expand }) => {
26
48
  try {
27
49
  const snapshot = getSnapshot();
28
50
  const node = snapshot.getNodeById(node_id);
@@ -30,7 +52,20 @@ export function registerRetainerTrace(server) {
30
52
  return errorResult(`Node with id ${node_id} not found`);
31
53
  }
32
54
  if (!node.hasPathEdge) {
33
- return toolResult('No retainer path available for this node. It may be a root node or unreachable.');
55
+ const isRoot = node.id <= 3 ||
56
+ node.name === '(GC roots)' ||
57
+ node.name === '(Strong roots)';
58
+ const hasReferrers = node.numOfReferrers > 0;
59
+ if (isRoot) {
60
+ return toolResult(`@${node_id} is a GC root node (${node.name}) — it has no retainer because it is itself a root of the object graph.`);
61
+ }
62
+ if (hasReferrers) {
63
+ return toolResult(`@${node_id} (${node.name}, ${node.type}) has ${node.numOfReferrers} referrer(s) but no computed shortest path to a GC root. ` +
64
+ `This can happen when the dominator tree was computed with a different root set, or when the node is reachable only through weak references. ` +
65
+ `Use \`memlab_get_referrers\` with node_id ${node_id} to manually trace its incoming edges.`);
66
+ }
67
+ return toolResult(`@${node_id} (${node.name}, ${node.type}) has no retainer path and no referrers — it is likely eligible for garbage collection ` +
68
+ `and retained only because a GC cycle hasn't reclaimed it yet. It is safe to ignore for leak investigation.`);
34
69
  }
35
70
  const visited = new Set([node.id]);
36
71
  let curNode = node;
@@ -53,31 +88,96 @@ export function registerRetainerTrace(server) {
53
88
  }
54
89
  // Reverse to get root-first order
55
90
  reverseItems.reverse();
56
- // Collapse consecutive internal/V8 nodes for readability
91
+ // Collapse consecutive internal/V8 nodes for readability, unless the
92
+ // caller asked to expand the full path (Feedback §3c).
57
93
  const collapsed = [];
58
- let internalRun = 0;
59
- for (const item of reverseItems) {
60
- if (!isNodeWorthInspecting(item.node) && collapsed.length > 0) {
61
- internalRun++;
94
+ if (expand) {
95
+ collapsed.push(...reverseItems);
96
+ }
97
+ else {
98
+ let internalRun = 0;
99
+ for (const item of reverseItems) {
100
+ if (!isNodeWorthInspecting(item.node) && collapsed.length > 0) {
101
+ internalRun++;
102
+ }
103
+ else {
104
+ if (internalRun > 0) {
105
+ collapsed.push({
106
+ node: item.node,
107
+ edgeName: item.edgeName,
108
+ edgeType: item.edgeType,
109
+ collapsedCount: internalRun,
110
+ });
111
+ internalRun = 0;
112
+ }
113
+ else {
114
+ collapsed.push(item);
115
+ }
116
+ }
62
117
  }
63
- else {
64
- if (internalRun > 0) {
65
- collapsed.push({
66
- node: item.node,
67
- edgeName: item.edgeName,
68
- edgeType: item.edgeType,
69
- collapsedCount: internalRun,
118
+ if (internalRun > 0 && collapsed.length > 0) {
119
+ const last = collapsed[collapsed.length - 1];
120
+ last.collapsedCount = (last.collapsedCount ?? 0) + internalRun;
121
+ }
122
+ // Second pass: fold repeating async-continuation ladders that the
123
+ // internal-node collapse leaves expanded (they're "worth inspecting"
124
+ // object/closure nodes). Replace a run of 3+ consecutive async frames
125
+ // with a single elision note on the node that follows it, carrying a
126
+ // representative retained size (Feedback round 5 §10).
127
+ const folded = [];
128
+ let i = 0;
129
+ while (i < collapsed.length) {
130
+ let j = i;
131
+ while (j < collapsed.length &&
132
+ isAsyncContinuationFrame(collapsed[j].node)) {
133
+ j++;
134
+ }
135
+ const runLen = j - i;
136
+ if (runLen >= 3 && j < collapsed.length) {
137
+ // Sum the frames elided within the run (each may already carry its
138
+ // own internal-collapse count) and attach the note to the next
139
+ // kept node, whose incoming edge stays valid.
140
+ const elided = collapsed
141
+ .slice(i, j)
142
+ .reduce((n, it) => n + 1 + (it.collapsedCount ?? 0), 0);
143
+ const retained = collapsed[i].node.retainedSize;
144
+ const next = collapsed[j];
145
+ const priorCount = next.collapsedCount ?? 0;
146
+ const asyncNote = `${elided} async continuation frames, all retaining ~${formatBytes(retained)}`;
147
+ folded.push({
148
+ ...next,
149
+ collapsedCount: priorCount + elided,
150
+ // Compose with any elision the first-pass internal-node collapse
151
+ // already attached to `next` so the rendered note describes the
152
+ // FULL collapsedCount — the renderer shows collapsedNote verbatim
153
+ // in place of the "N internal node(s)" default, so a bare async
154
+ // note would silently drop the prior internal-node count.
155
+ collapsedNote: next.collapsedNote
156
+ ? `${asyncNote}; ${next.collapsedNote}`
157
+ : priorCount > 0
158
+ ? `${asyncNote}; ${priorCount} internal node(s)`
159
+ : asyncNote,
70
160
  });
71
- internalRun = 0;
161
+ i = j + 1;
72
162
  }
73
163
  else {
74
- collapsed.push(item);
164
+ folded.push(collapsed[i]);
165
+ i++;
75
166
  }
76
167
  }
168
+ collapsed.length = 0;
169
+ collapsed.push(...folded);
77
170
  }
78
- if (internalRun > 0 && collapsed.length > 0) {
79
- const last = collapsed[collapsed.length - 1];
80
- last.collapsedCount = (last.collapsedCount ?? 0) + internalRun;
171
+ // Highlight the application/library boundary: the node closest to the
172
+ // target that has a source location (i.e. user/app code, not a V8
173
+ // internal). Helps when the boundary is otherwise buried in the path.
174
+ let appFrame = null;
175
+ for (let i = reverseItems.length - 1; i >= 0; i--) {
176
+ const n = reverseItems[i].node;
177
+ if (n.location && isNodeWorthInspecting(n)) {
178
+ appFrame = n;
179
+ break;
180
+ }
81
181
  }
82
182
  const fullLength = reverseItems.length;
83
183
  const truncated = max_depth != null && max_depth > 0 && max_depth < fullLength;
@@ -87,33 +187,63 @@ export function registerRetainerTrace(server) {
87
187
  : '';
88
188
  const lines = [
89
189
  `Retainer trace for @${node_id} (${fullLength} nodes${depthNote}):`,
90
- '',
91
190
  ];
92
191
  if (show_sizes) {
93
- // Vertical format with sizes for readability
94
- for (let i = 0; i < items.length; i++) {
95
- const item = items[i];
96
- const n = item.node;
97
- const sizeStr = formatBytes(n.retainedSize);
98
- const nodeStr = formatNodeInline(n.id, n.name, n.type, n.self_size);
99
- if (item.collapsedCount && item.collapsedCount > 0) {
100
- lines.push(` [${item.collapsedCount} internal node(s)] ←`);
101
- }
102
- if (i === 0) {
103
- lines.push(`${nodeStr} [${sizeStr}]`);
104
- }
105
- else {
106
- const prevItem = items[i - 1];
107
- const edgeLabel = prevItem.edgeName ?? '?';
108
- lines.push(` ← ${edgeLabel} ← ${nodeStr} [${sizeStr}]`);
109
- }
110
- }
192
+ lines.push('(top = GC root; each node is retained by the one above it)');
193
+ }
194
+ lines.push('');
195
+ if (appFrame) {
196
+ const loc = appFrame.location;
197
+ lines.push(`First source-located (app) frame: @${appFrame.id} ${formatNodeInline(appFrame.id, appFrame.name, appFrame.type, appFrame.self_size)}` +
198
+ (loc
199
+ ? ` — script ${loc.script_id}:${loc.line}:${loc.column}`
200
+ : ''), '');
201
+ }
202
+ // Flag paths that only reach this node through instrumentation
203
+ // (patched console / OTel context), which misleads "who owns it"
204
+ // (Feedback §3a).
205
+ const instrNote = instrumentationRetainerNote(reverseItems.map(it => ({
206
+ name: it.node.name,
207
+ edgeName: it.edgeName,
208
+ })));
209
+ if (instrNote) {
210
+ lines.push(`⚠ ${instrNote}`, '');
211
+ }
212
+ if (show_sizes) {
213
+ // Top-down indented tree: GC root at the top, each node retained by
214
+ // the one above it. Single, unambiguous reading direction (no mixing
215
+ // of ← and → on one line).
216
+ // `item.edgeName` is the OUTGOING edge (item -> next), so the edge
217
+ // pointing INTO item is the previous item's edgeName. The helper wants
218
+ // each node's incoming edge.
219
+ const treeSteps = items.map((item, i) => ({
220
+ id: item.node.id,
221
+ name: item.node.name,
222
+ type: item.node.type,
223
+ retainedSize: item.node.retainedSize,
224
+ selfSize: item.node.self_size,
225
+ edgeName: i > 0 ? items[i - 1].edgeName : undefined,
226
+ collapsedBefore: item.collapsedCount,
227
+ collapsedNote: item.collapsedNote,
228
+ }));
111
229
  if (truncated && max_depth != null) {
112
- lines.push(` ← ... (${fullLength - max_depth} more nodes) ...`);
113
- const target = reverseItems[reverseItems.length - 1];
114
- const tn = target.node;
115
- lines.push(` ← ${formatNodeInline(tn.id, tn.name, tn.type, tn.self_size)} [${formatBytes(tn.retainedSize)}]`);
230
+ const target = reverseItems[reverseItems.length - 1].node;
231
+ treeSteps.push({
232
+ id: target.id,
233
+ name: target.name,
234
+ type: target.type,
235
+ retainedSize: target.retainedSize,
236
+ selfSize: target.self_size,
237
+ // The target's real incoming edge is one of the elided middle
238
+ // nodes' edges and isn't available here. `items[last].edgeName`
239
+ // is the edge into the FIRST elided node, not into the target, so
240
+ // using it would misattribute an unrelated property to the target.
241
+ // Leave it undefined so no bogus `└─ .prop →` label is rendered.
242
+ edgeName: undefined,
243
+ collapsedBefore: fullLength - max_depth,
244
+ });
116
245
  }
246
+ lines.push(formatRetainerTree(treeSteps, { showSizes: true }));
117
247
  }
118
248
  else {
119
249
  // Compact inline chain format
@@ -1 +1 @@
1
- {"version":3,"file":"retainer-trace.js","sourceRoot":"","sources":["../../src/tools/retainer-trace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retainer-trace.js","sourceRoot":"","sources":["../../src/tools/retainer-trace.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"search-nodes.d.ts","sourceRoot":"","sources":["../../src/tools/search-nodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAavE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0F3D"}
1
+ {"version":3,"file":"search-nodes.d.ts","sourceRoot":"","sources":["../../src/tools/search-nodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAavE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoG3D"}
@@ -9,9 +9,10 @@
9
9
  */
10
10
  import { z } from 'zod';
11
11
  import { getSnapshot } from '../heap-state.js';
12
- import { queryNodes, formatQueryNodesResult, errorResult, toolResult, } from '../utils.js';
12
+ import { queryNodes, formatQueryNodesResult, errorResult, toolResult, makeScanBudget, } from '../utils.js';
13
13
  export function registerSearchNodes(server) {
14
- server.tool('memlab_search_nodes', 'General-purpose search for heap nodes by combining filters: name pattern (regex), node type, minimum retained/self size, and detachment status. Results sorted by retained size. Supports count-only and ids-only modes for large result sets.', {
14
+ server.tool('memlab_search_nodes', 'General-purpose search for heap nodes by combining filters: name pattern (regex), node type, minimum retained/self size, and detachment status. Results sorted by retained size. Supports count-only and ids-only modes for large result sets. ' +
15
+ '⚠ Full-heap scan — slow on very large heaps (millions of nodes); narrow with node type / min size filters and use count-only or ids-only modes.', {
15
16
  name_pattern: z
16
17
  .string()
17
18
  .optional()
@@ -47,7 +48,12 @@ export function registerSearchNodes(server) {
47
48
  .optional()
48
49
  .default(20)
49
50
  .describe('Maximum number of results (default 20, up to 10000 for ids mode)'),
50
- }, async ({ name_pattern, type, min_retained_size, min_self_size, is_detached, output_mode, offset, limit, }) => {
51
+ timeout_ms: z
52
+ .number()
53
+ .optional()
54
+ .default(45000)
55
+ .describe('Wall-clock budget for the full-heap scan (default 45000). On very large browser heaps, returns partial results with a note instead of hanging.'),
56
+ }, async ({ name_pattern, type, min_retained_size, min_self_size, is_detached, output_mode, offset, limit, timeout_ms, }) => {
51
57
  try {
52
58
  const snapshot = getSnapshot();
53
59
  const nameRegex = name_pattern ? new RegExp(name_pattern, 'i') : null;
@@ -74,6 +80,7 @@ export function registerSearchNodes(server) {
74
80
  limit: effectiveLimit,
75
81
  offset,
76
82
  outputMode: output_mode,
83
+ budget: makeScanBudget(timeout_ms),
77
84
  });
78
85
  return toolResult(formatQueryNodesResult(result, offset));
79
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"search-nodes.js","sourceRoot":"","sources":["../../src/tools/search-nodes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search-nodes.js","sourceRoot":"","sources":["../../src/tools/search-nodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EACL,UAAU,EACV,sBAAsB,EACtB,WAAW,EACX,UAAU,EACV,cAAc,GACf,MAAM,aAAa,CAAC;AAGrB,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,iPAAiP;QAC/O,iJAAiJ,EACnJ;QACE,YAAY,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,2CAA2C,CAAC;QACxD,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,yGAAyG,CAC1G;QACH,iBAAiB,EAAE,CAAC;aACjB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,gCAAgC,CAAC;QAC7C,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,sCAAsC,CAAC;QACnD,WAAW,EAAE,CAAC;aACX,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,6BAA6B,CAAC;QAC1C,WAAW,EAAE,CAAC;aACX,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;aAC9B,QAAQ,EAAE;aACV,OAAO,CAAC,MAAM,CAAC;aACf,QAAQ,CACP,8HAA8H,CAC/H;QACH,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,OAAO,CAAC,CAAC,CAAC;aACV,QAAQ,CAAC,2CAA2C,CAAC;QACxD,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,OAAO,CAAC,EAAE,CAAC;aACX,QAAQ,CACP,kEAAkE,CACnE;QACH,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CACP,gJAAgJ,CACjJ;KACJ,EACD,KAAK,EAAE,EACL,YAAY,EACZ,IAAI,EACJ,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,WAAW,EACX,MAAM,EACN,KAAK,EACL,UAAU,GACX,EAAE,EAAE;QACH,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACtE,MAAM,cAAc,GAClB,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAExE,MAAM,MAAM,GAAG,CAAC,IAAe,EAAE,EAAE;gBACjC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAC/B,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;oBAAE,OAAO,KAAK,CAAC;gBAC7C,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAC1D,IAAI,iBAAiB,IAAI,IAAI,CAAC,YAAY,GAAG,iBAAiB;oBAC5D,OAAO,KAAK,CAAC;gBACf,IAAI,aAAa,IAAI,IAAI,CAAC,SAAS,GAAG,aAAa;oBAAE,OAAO,KAAK,CAAC;gBAClE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;oBAC9B,MAAM,QAAQ,GACZ,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;oBACxD,IAAI,WAAW,KAAK,QAAQ;wBAAE,OAAO,KAAK,CAAC;gBAC7C,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;YAEF,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE;gBAC1C,KAAK,EAAE,cAAc;gBACrB,MAAM;gBACN,UAAU,EAAE,WAAyB;gBACrC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC;aACnC,CAAC,CAAC;YAEH,OAAO,UAAU,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @format
8
+ * @oncall memory_lab
9
+ */
10
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
11
+ export declare function registerSearchStrings(server: McpServer): void;
12
+ //# sourceMappingURL=search-strings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-strings.d.ts","sourceRoot":"","sources":["../../src/tools/search-strings.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAWvE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+M7D"}