@memlab/mcp-server 2.1.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/README.md +88 -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 +46 -1
  11. package/dist/heap-state.d.ts.map +1 -1
  12. package/dist/heap-state.js +142 -10
  13. package/dist/heap-state.js.map +1 -1
  14. package/dist/index.js +36 -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 +999 -37
  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 +113 -18
  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-string.d.ts +12 -0
  75. package/dist/tools/get-string.d.ts.map +1 -0
  76. package/dist/tools/get-string.js +223 -0
  77. package/dist/tools/get-string.js.map +1 -0
  78. package/dist/tools/get-value.d.ts +12 -0
  79. package/dist/tools/get-value.d.ts.map +1 -0
  80. package/dist/tools/get-value.js +152 -0
  81. package/dist/tools/get-value.js.map +1 -0
  82. package/dist/tools/global-variables.d.ts.map +1 -1
  83. package/dist/tools/global-variables.js +54 -34
  84. package/dist/tools/global-variables.js.map +1 -1
  85. package/dist/tools/growth-signals.d.ts +12 -0
  86. package/dist/tools/growth-signals.d.ts.map +1 -0
  87. package/dist/tools/growth-signals.js +211 -0
  88. package/dist/tools/growth-signals.js.map +1 -0
  89. package/dist/tools/intern-opportunities.d.ts +12 -0
  90. package/dist/tools/intern-opportunities.d.ts.map +1 -0
  91. package/dist/tools/intern-opportunities.js +289 -0
  92. package/dist/tools/intern-opportunities.js.map +1 -0
  93. package/dist/tools/load-snapshot.d.ts +10 -0
  94. package/dist/tools/load-snapshot.d.ts.map +1 -1
  95. package/dist/tools/load-snapshot.js +152 -15
  96. package/dist/tools/load-snapshot.js.map +1 -1
  97. package/dist/tools/object-cost-breakdown.d.ts +12 -0
  98. package/dist/tools/object-cost-breakdown.d.ts.map +1 -0
  99. package/dist/tools/object-cost-breakdown.js +439 -0
  100. package/dist/tools/object-cost-breakdown.js.map +1 -0
  101. package/dist/tools/object-shape.d.ts.map +1 -1
  102. package/dist/tools/object-shape.js +95 -2
  103. package/dist/tools/object-shape.js.map +1 -1
  104. package/dist/tools/pinch-points.d.ts.map +1 -1
  105. package/dist/tools/pinch-points.js +9 -9
  106. package/dist/tools/pinch-points.js.map +1 -1
  107. package/dist/tools/property-distribution.d.ts +12 -0
  108. package/dist/tools/property-distribution.d.ts.map +1 -0
  109. package/dist/tools/property-distribution.js +168 -0
  110. package/dist/tools/property-distribution.js.map +1 -0
  111. package/dist/tools/quick-diagnosis.d.ts.map +1 -1
  112. package/dist/tools/quick-diagnosis.js +56 -19
  113. package/dist/tools/quick-diagnosis.js.map +1 -1
  114. package/dist/tools/retainer-summary.d.ts.map +1 -1
  115. package/dist/tools/retainer-summary.js +90 -5
  116. package/dist/tools/retainer-summary.js.map +1 -1
  117. package/dist/tools/retainer-trace.d.ts.map +1 -1
  118. package/dist/tools/retainer-trace.js +74 -22
  119. package/dist/tools/retainer-trace.js.map +1 -1
  120. package/dist/tools/search-nodes.d.ts.map +1 -1
  121. package/dist/tools/search-nodes.js +10 -3
  122. package/dist/tools/search-nodes.js.map +1 -1
  123. package/dist/tools/search-strings.d.ts +12 -0
  124. package/dist/tools/search-strings.d.ts.map +1 -0
  125. package/dist/tools/search-strings.js +182 -0
  126. package/dist/tools/search-strings.js.map +1 -0
  127. package/dist/tools/sequence-analysis.d.ts +12 -0
  128. package/dist/tools/sequence-analysis.d.ts.map +1 -0
  129. package/dist/tools/sequence-analysis.js +234 -0
  130. package/dist/tools/sequence-analysis.js.map +1 -0
  131. package/dist/tools/server-status.d.ts +12 -0
  132. package/dist/tools/server-status.d.ts.map +1 -0
  133. package/dist/tools/server-status.js +41 -0
  134. package/dist/tools/server-status.js.map +1 -0
  135. package/dist/tools/shape-histogram.d.ts.map +1 -1
  136. package/dist/tools/shape-histogram.js +61 -16
  137. package/dist/tools/shape-histogram.js.map +1 -1
  138. package/dist/tools/sliced-strings.d.ts.map +1 -1
  139. package/dist/tools/sliced-strings.js +16 -11
  140. package/dist/tools/sliced-strings.js.map +1 -1
  141. package/dist/tools/snapshot-summary.d.ts.map +1 -1
  142. package/dist/tools/snapshot-summary.js +55 -13
  143. package/dist/tools/snapshot-summary.js.map +1 -1
  144. package/dist/tools/snapshots.d.ts +12 -0
  145. package/dist/tools/snapshots.d.ts.map +1 -0
  146. package/dist/tools/snapshots.js +93 -0
  147. package/dist/tools/snapshots.js.map +1 -0
  148. package/dist/tools/stale-collections.d.ts.map +1 -1
  149. package/dist/tools/stale-collections.js +248 -7
  150. package/dist/tools/stale-collections.js.map +1 -1
  151. package/dist/tools/trace-dominators.d.ts.map +1 -1
  152. package/dist/tools/trace-dominators.js +28 -1
  153. package/dist/tools/trace-dominators.js.map +1 -1
  154. package/dist/tools/weakmap-entries.d.ts +12 -0
  155. package/dist/tools/weakmap-entries.d.ts.map +1 -0
  156. package/dist/tools/weakmap-entries.js +156 -0
  157. package/dist/tools/weakmap-entries.js.map +1 -0
  158. package/dist/utils.d.ts +81 -2
  159. package/dist/utils.d.ts.map +1 -1
  160. package/dist/utils.js +303 -35
  161. package/dist/utils.js.map +1 -1
  162. package/package.json +3 -3
@@ -0,0 +1,289 @@
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 { z } from 'zod';
11
+ import { getSnapshot, getSnapshotMetadata } from '../heap-state.js';
12
+ import { formatBytes, formatNumber, markdownTable, errorResult, toolResult, } from '../utils.js';
13
+ export function registerInternOpportunities(server) {
14
+ server.tool('memlab_intern_opportunities', 'Identify string interning opportunities by grouping duplicated strings by the property name and parent object shape that holds them. Shows total savings per (property × shape) combination — the key metric for deciding where to add a string interning pool. Replaces the manual workflow of: duplicated_strings → retainer_summary → codebase grep. ' +
15
+ '⚠ Full-heap scan (builds string-duplication groups) — slow and memory-heavy on very large heaps (millions of nodes); raise min_copies / min_savings to bound it.', {
16
+ limit: z
17
+ .number()
18
+ .optional()
19
+ .default(15)
20
+ .describe('Maximum number of intern groups to return (default 15)'),
21
+ min_copies: z
22
+ .number()
23
+ .optional()
24
+ .default(100)
25
+ .describe('Minimum total copies across all strings in a group (default 100)'),
26
+ min_savings: z
27
+ .number()
28
+ .optional()
29
+ .default(102400)
30
+ .describe('Minimum savings in bytes to include a group (default 100 KB)'),
31
+ }, async ({ limit, min_copies, min_savings }) => {
32
+ try {
33
+ const snapshot = getSnapshot();
34
+ const meta = getSnapshotMetadata();
35
+ const totalSize = meta?.totalSize ?? 0;
36
+ // Step 1: Build frequency map of duplicated strings
37
+ const stringMap = new Map();
38
+ snapshot.nodes.forEach(node => {
39
+ if (node.type !== 'string')
40
+ return;
41
+ if (node.name === 'system / SlicedString')
42
+ return;
43
+ const strNode = node.toStringNode();
44
+ if (!strNode)
45
+ return;
46
+ const value = strNode.stringValue;
47
+ const entry = stringMap.get(value);
48
+ if (entry) {
49
+ entry.count++;
50
+ entry.totalSize += node.retainedSize;
51
+ if (entry.exampleIds.length < 20) {
52
+ entry.exampleIds.push(node.id);
53
+ }
54
+ }
55
+ else {
56
+ stringMap.set(value, {
57
+ count: 1,
58
+ totalSize: node.retainedSize,
59
+ exampleIds: [node.id],
60
+ });
61
+ }
62
+ });
63
+ // Step 2: For duplicated strings, sample referrers to get property × shape
64
+ const groupMap = new Map();
65
+ for (const [value, stats] of stringMap) {
66
+ if (stats.count < 2)
67
+ continue;
68
+ // Sample referrers to determine which (property, shape) groups hold this string
69
+ const groupDist = new Map();
70
+ let samplesProcessed = 0;
71
+ for (const nodeId of stats.exampleIds) {
72
+ const node = snapshot.getNodeById(nodeId);
73
+ if (!node)
74
+ continue;
75
+ for (const ref of node.referrers) {
76
+ if (ref.type !== 'property' && ref.type !== 'context')
77
+ continue;
78
+ const propName = String(ref.name_or_index);
79
+ const parent = ref.fromNode;
80
+ const parentProps = [];
81
+ for (const edge of parent.references) {
82
+ if (edge.type === 'property') {
83
+ parentProps.push(String(edge.name_or_index));
84
+ if (parentProps.length >= 12)
85
+ break;
86
+ }
87
+ }
88
+ parentProps.sort();
89
+ const shapeKey = parent.name !== 'Object'
90
+ ? parent.name
91
+ : parentProps.length > 0
92
+ ? `{${parentProps.join(',')}}`
93
+ : 'Object';
94
+ const groupKey = `${propName}::${shapeKey}`;
95
+ const dist = groupDist.get(groupKey);
96
+ if (dist) {
97
+ dist.sampledCount++;
98
+ dist.sampleRetained += node.retainedSize;
99
+ }
100
+ else {
101
+ groupDist.set(groupKey, {
102
+ sampledCount: 1,
103
+ propName,
104
+ parentProps,
105
+ shapeKey,
106
+ parentId: parent.id,
107
+ sampleRetained: node.retainedSize,
108
+ });
109
+ }
110
+ samplesProcessed++;
111
+ break;
112
+ }
113
+ }
114
+ if (samplesProcessed === 0)
115
+ continue;
116
+ // Extrapolate true counts from sample using stats.count
117
+ for (const [groupKey, dist] of groupDist) {
118
+ const scaleFactor = stats.count / samplesProcessed;
119
+ const trueCount = Math.round(dist.sampledCount * scaleFactor);
120
+ const trueSize = stats.totalSize * (dist.sampledCount / samplesProcessed);
121
+ const existing = groupMap.get(groupKey);
122
+ if (existing) {
123
+ const strEntry = existing.strings.get(value);
124
+ if (strEntry) {
125
+ strEntry.count += trueCount;
126
+ strEntry.size += trueSize;
127
+ }
128
+ else {
129
+ existing.strings.set(value, {
130
+ count: trueCount,
131
+ size: trueSize,
132
+ });
133
+ }
134
+ existing.totalCopies += trueCount;
135
+ existing.totalSize += trueSize;
136
+ }
137
+ else {
138
+ groupMap.set(groupKey, {
139
+ propertyName: dist.propName,
140
+ parentShapeProps: dist.parentProps,
141
+ parentShapeKey: dist.shapeKey,
142
+ strings: new Map([[value, { count: trueCount, size: trueSize }]]),
143
+ totalCopies: trueCount,
144
+ totalSize: trueSize,
145
+ exampleParentId: dist.parentId,
146
+ });
147
+ }
148
+ }
149
+ }
150
+ // Step 3: Compute savings and filter
151
+ const groups = [];
152
+ for (const g of groupMap.values()) {
153
+ if (g.totalCopies < min_copies)
154
+ continue;
155
+ let savingsIfInterned = 0;
156
+ const topStrings = [];
157
+ for (const [value, strStats] of g.strings) {
158
+ if (strStats.count > 1) {
159
+ const perCopy = strStats.size / strStats.count;
160
+ savingsIfInterned += (strStats.count - 1) * perCopy;
161
+ }
162
+ topStrings.push({
163
+ value,
164
+ count: strStats.count,
165
+ size: strStats.size,
166
+ });
167
+ }
168
+ if (savingsIfInterned < min_savings)
169
+ continue;
170
+ topStrings.sort((a, b) => b.size - a.size);
171
+ groups.push({
172
+ propertyName: g.propertyName,
173
+ parentShape: g.parentShapeKey,
174
+ parentShapeProps: g.parentShapeProps,
175
+ uniqueStrings: g.strings.size,
176
+ totalCopies: g.totalCopies,
177
+ totalSize: g.totalSize,
178
+ savingsIfInterned,
179
+ topStrings: topStrings.slice(0, 3),
180
+ exampleParentId: g.exampleParentId,
181
+ });
182
+ }
183
+ groups.sort((a, b) => b.savingsIfInterned - a.savingsIfInterned);
184
+ const shown = groups.slice(0, limit);
185
+ if (shown.length === 0) {
186
+ return toolResult(`No significant interning opportunities found (min ${formatNumber(min_copies)} copies, min ${formatBytes(min_savings)} savings). Try lowering thresholds.`);
187
+ }
188
+ // Detect partial interning patterns (Feedback #3) and, while we're here,
189
+ // mark which groups' savings are CROSS-load (not capturable by a per-load
190
+ // intern pool) so the headline can split the two (Feedback round 3 §1c).
191
+ const partialInternAlerts = [];
192
+ for (const g of shown) {
193
+ if (g.uniqueStrings < 10)
194
+ continue;
195
+ const counts = g.topStrings.map(s => s.count);
196
+ if (counts.length < 2)
197
+ continue;
198
+ const median = counts.sort((a, b) => a - b)[Math.floor(counts.length / 2)];
199
+ if (median < 2 || median > 20)
200
+ continue;
201
+ const consistent = counts.every(c => c >= median * 0.5 && c <= median * 2);
202
+ if (!consistent)
203
+ continue;
204
+ g.crossLoad = true;
205
+ const perPoolSavings = g.savingsIfInterned;
206
+ partialInternAlerts.push(`⚠️ **\`.${g.propertyName}\` on \`${g.parentShape.length > 50 ? g.parentShape.slice(0, 47) + '…}' : g.parentShape}\`:** ` +
207
+ `${formatNumber(g.uniqueStrings)} unique strings each duplicated ~${median}× — ` +
208
+ `suggests **${median} independent intern pools** instead of one shared pool. ` +
209
+ `Consolidating into a single shared pool would save ~${formatBytes(perPoolSavings)}.`);
210
+ }
211
+ // Split savings: within-load is what a per-load/per-request intern pool
212
+ // can actually capture; cross-load duplication needs a shared/module
213
+ // pool or a retention/concurrency fix (Feedback round 3 §1c).
214
+ const withinLoadSavings = shown
215
+ .filter(g => !g.crossLoad)
216
+ .reduce((sum, g) => sum + g.savingsIfInterned, 0);
217
+ const crossLoadSavings = shown
218
+ .filter(g => g.crossLoad)
219
+ .reduce((sum, g) => sum + g.savingsIfInterned, 0);
220
+ const totalSavings = withinLoadSavings + crossLoadSavings;
221
+ const pctOf = (n) => totalSize > 0
222
+ ? ` (${((n / totalSize) * 100).toFixed(1)}% of heap)`
223
+ : '';
224
+ const pctOfHeap = pctOf(totalSavings);
225
+ const headers = [
226
+ 'Property',
227
+ 'Parent Shape',
228
+ 'Unique Strings',
229
+ 'Total Copies',
230
+ 'Total Size',
231
+ 'Savings',
232
+ '% Heap',
233
+ 'Example Parent',
234
+ ];
235
+ const rightCols = new Set([2, 3, 4, 5, 6]);
236
+ const rows = shown.map(g => {
237
+ const shape = g.parentShape.length > 40
238
+ ? g.parentShape.slice(0, 37) + '…}'
239
+ : g.parentShape;
240
+ const pct = totalSize > 0
241
+ ? ((g.savingsIfInterned / totalSize) * 100).toFixed(1) + '%'
242
+ : '-';
243
+ return [
244
+ `.${g.propertyName}`,
245
+ shape,
246
+ formatNumber(g.uniqueStrings),
247
+ formatNumber(g.totalCopies),
248
+ formatBytes(g.totalSize),
249
+ formatBytes(g.savingsIfInterned),
250
+ pct,
251
+ `@${g.exampleParentId}`,
252
+ ];
253
+ });
254
+ const headerLines = [
255
+ `# String Interning Opportunities`,
256
+ '',
257
+ `**Total duplication across top ${shown.length} groups: ${formatBytes(totalSavings)}${pctOfHeap}**`,
258
+ `- **Within-load (capturable by a per-load/per-request intern pool): ${formatBytes(withinLoadSavings)}${pctOf(withinLoadSavings)}**`,
259
+ ];
260
+ if (crossLoadSavings > 0) {
261
+ headerLines.push(`- **Cross-load (NOT capturable by a per-request pool — needs a shared/module-scope pool or a retention/concurrency fix): ${formatBytes(crossLoadSavings)}${pctOf(crossLoadSavings)}**`);
262
+ }
263
+ const lines = [
264
+ ...headerLines,
265
+ '',
266
+ markdownTable(headers, rows, rightCols),
267
+ '',
268
+ ];
269
+ // Show top strings for the top 5 groups
270
+ for (const g of shown.slice(0, 5)) {
271
+ lines.push(`### \`.${g.propertyName}\` on \`${g.parentShape.length > 60 ? g.parentShape.slice(0, 57) + '…}' : g.parentShape}\` — ${formatBytes(g.savingsIfInterned)} savings`);
272
+ for (const s of g.topStrings) {
273
+ const val = s.value.length > 60 ? s.value.slice(0, 60) + '…' : s.value;
274
+ lines.push(`- "${val}" × ${formatNumber(s.count)} copies (${formatBytes(s.size)})`);
275
+ }
276
+ lines.push('');
277
+ }
278
+ if (partialInternAlerts.length > 0) {
279
+ lines.push('## Partial Interning Detected', '', 'Strings that are partially deduplicated — interned within each dataset/call but duplicated across them:', '', ...partialInternAlerts, '', '_This typically happens when `internStrings()` or a dedup function creates a new Map per call instead of sharing one across datasets. Fix: lift the intern pool to module scope or pass it as a parameter._', '');
280
+ }
281
+ lines.push('---', '', '**How to fix:** Add a string interning pool at the JSON.parse / API response boundary:', '```js', 'const internPool = new Map();', 'function intern(s) { let v = internPool.get(s); if (!v) { internPool.set(s, s); v = s; } return v; }', '// Apply to the property during ingestion:', '// obj.propertyName = intern(obj.propertyName);', '```', '', '**Next steps:**', `- Inspect example parent: \`memlab_object_shape(${shown[0].exampleParentId})\``, `- Find all instances: \`memlab_find_by_shape\` with properties ${JSON.stringify(shown[0].parentShapeProps.slice(0, 5))}`, '- Search codebase for the constructor/factory that creates these objects');
282
+ return toolResult(lines.join('\n'));
283
+ }
284
+ catch (err) {
285
+ return errorResult(err);
286
+ }
287
+ });
288
+ }
289
+ //# sourceMappingURL=intern-opportunities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intern-opportunities.js","sourceRoot":"","sources":["../../src/tools/intern-opportunities.ts"],"names":[],"mappings":"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"}
@@ -8,5 +8,15 @@
8
8
  * @oncall memory_lab
9
9
  */
10
10
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
11
+ export declare const DEFAULT_MANIFOLD_BUCKET = "nest_server_nodejs_heap_snapshots";
12
+ /**
13
+ * Resolve a `file_path` that may be a local path, a `manifold://bucket/key`
14
+ * URL, or a bare snapshot filename to a local path, fetching from Manifold
15
+ * into a temp dir when needed. Returns {localPath, fetchedFrom}.
16
+ */
17
+ export declare function resolveSnapshotPath(filePath: string): {
18
+ localPath: string;
19
+ fetchedFrom: string | null;
20
+ };
11
21
  export declare function registerLoadSnapshot(server: McpServer): void;
12
22
  //# sourceMappingURL=load-snapshot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"load-snapshot.d.ts","sourceRoot":"","sources":["../../src/tools/load-snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAoIvE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgE5D"}
1
+ {"version":3,"file":"load-snapshot.d.ts","sourceRoot":"","sources":["../../src/tools/load-snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AA0BvE,eAAO,MAAM,uBAAuB,sCAAsC,CAAC;AAE3E;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAoCA;AAmID,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+M5D"}
@@ -8,12 +8,53 @@
8
8
  * @oncall memory_lab
9
9
  */
10
10
  import fs from 'fs';
11
+ import os from 'os';
11
12
  import path from 'path';
13
+ import { execFileSync } from 'child_process';
12
14
  import { z } from 'zod';
13
15
  import memlabHeapAnalysis from '@memlab/heap-analysis';
14
16
  const { getFullHeapFromFile } = memlabHeapAnalysis;
15
- import { setSnapshot } from '../heap-state.js';
17
+ import { setSnapshot, getSnapshotMetadata, setSessionConfig, listSnapshots, } from '../heap-state.js';
16
18
  import { formatBytes, formatNumber, truncateNodeName, errorResult, textResult, } from '../utils.js';
19
+ // The bucket the Nest auto-capture + the Manifold links in diffs use, so a
20
+ // bare snapshot filename resolves predictably (Feedback §7).
21
+ export const DEFAULT_MANIFOLD_BUCKET = 'nest_server_nodejs_heap_snapshots';
22
+ /**
23
+ * Resolve a `file_path` that may be a local path, a `manifold://bucket/key`
24
+ * URL, or a bare snapshot filename to a local path, fetching from Manifold
25
+ * into a temp dir when needed. Returns {localPath, fetchedFrom}.
26
+ */
27
+ export function resolveSnapshotPath(filePath) {
28
+ // Already a local file? Use it directly.
29
+ const asLocal = path.resolve(filePath);
30
+ if (!filePath.startsWith('manifold://') && fs.existsSync(asLocal)) {
31
+ return { localPath: asLocal, fetchedFrom: null };
32
+ }
33
+ let manifoldKey = null;
34
+ if (filePath.startsWith('manifold://')) {
35
+ manifoldKey = filePath.slice('manifold://'.length);
36
+ }
37
+ else if (!filePath.includes('/') && /\.heapsnapshot$/i.test(filePath)) {
38
+ // Bare snapshot filename → resolve against the default bucket's flat/ tree.
39
+ manifoldKey = `${DEFAULT_MANIFOLD_BUCKET}/flat/${filePath}`;
40
+ }
41
+ if (!manifoldKey) {
42
+ // Nothing we can fetch; let the caller report "file not found".
43
+ return { localPath: asLocal, fetchedFrom: null };
44
+ }
45
+ // A Manifold key must be bucket/key; if only a key was given, prefix bucket.
46
+ if (!manifoldKey.includes('/')) {
47
+ manifoldKey = `${DEFAULT_MANIFOLD_BUCKET}/${manifoldKey}`;
48
+ }
49
+ const dest = path.join(os.tmpdir(), `memlab-${path.basename(manifoldKey).replace(/[^A-Za-z0-9._-]/g, '_')}`);
50
+ process.stderr.write(`Fetching ${manifoldKey} from Manifold → ${dest}…\n`);
51
+ execFileSync('manifold', ['get', manifoldKey, dest], {
52
+ stdio: ['ignore', 'ignore', 'pipe'],
53
+ timeout: 5 * 60 * 1000,
54
+ maxBuffer: 64 * 1024 * 1024,
55
+ });
56
+ return { localPath: dest, fetchedFrom: manifoldKey };
57
+ }
17
58
  function findLargestObject(snapshot) {
18
59
  let best = null;
19
60
  snapshot.nodes.forEach(node => {
@@ -67,7 +108,9 @@ function quickDiagnosis(snapshot, totalSelfSize) {
67
108
  if (node.type === 'string' && node.self_size >= 1024 * 1024) {
68
109
  largeStrings.push({ id: node.id, name: node.name, size: node.self_size });
69
110
  }
70
- if (node.type === 'string' && node.name !== 'system / SlicedString') {
111
+ // Count flat-string duplication only. Sliced strings (type 'sliced
112
+ // string') share a parent's storage, so they aren't independent dupes.
113
+ if (node.type === 'string') {
71
114
  const key = node.name.length > 100 ? node.name.slice(0, 100) : node.name;
72
115
  stringCounts.set(key, (stringCounts.get(key) ?? 0) + 1);
73
116
  }
@@ -79,8 +122,12 @@ function quickDiagnosis(snapshot, totalSelfSize) {
79
122
  const totalSize = largeStrings.reduce((s, n) => s + n.size, 0);
80
123
  warnings.push(`⚠ ${largeStrings.length} string(s) > 1 MB (${formatBytes(totalSize)} total) — possible unbounded data retention`);
81
124
  }
125
+ // Suppress noise: tiny or purely-numeric/SMI-like strings duplicate heavily
126
+ // but carry no signal (e.g. "5" ×3,372, "0" ×2,733). Require some length and
127
+ // non-numeric content to be worth flagging.
128
+ const isNoisyDupKey = (s) => s.length < 8 || /^[\s\d.,:+-]*$/.test(s);
82
129
  const highDups = [...stringCounts.entries()]
83
- .filter(([, count]) => count >= 1000)
130
+ .filter(([val, count]) => count >= 1000 && !isNoisyDupKey(val))
84
131
  .sort((a, b) => b[1] - a[1])
85
132
  .slice(0, 3);
86
133
  for (const [val, count] of highDups) {
@@ -101,23 +148,100 @@ function quickDiagnosis(snapshot, totalSelfSize) {
101
148
  for (const [name, count] of anomalous) {
102
149
  warnings.push(`⚠ ${formatNumber(count)}× \`${name}\` instances`);
103
150
  }
151
+ if (warnings.length > 0) {
152
+ warnings.push('', 'Run `memlab_quick_diagnosis` for actionable triage or `memlab_auto_investigate` for deep analysis.');
153
+ }
104
154
  return warnings;
105
155
  }
106
156
  export function registerLoadSnapshot(server) {
107
- server.tool('memlab_load_snapshot', 'Load and parse a .heapsnapshot file. This builds indexes, computes the dominator tree, and calculates retained sizes. Returns a quick diagnosis highlighting potential issues. Only one snapshot can be loaded at a time.', {
108
- file_path: z.string().describe('Absolute path to a .heapsnapshot file'),
109
- }, async ({ file_path }) => {
157
+ server.tool('memlab_load_snapshot', 'Load and parse a .heapsnapshot file. This builds indexes, computes the dominator tree, and calculates retained sizes. Returns a quick diagnosis highlighting potential issues. Accepts a local absolute path, a manifold:// URL, or a bare snapshot filename (resolved against the nest_server_nodejs_heap_snapshots bucket and fetched automatically). Multiple snapshots can be kept resident pass keep_previous:true to load several for diffing/comparison; switch between them with memlab_snapshots.', {
158
+ file_path: z
159
+ .string()
160
+ .describe('A local absolute path to a .heapsnapshot file, a manifold:// URL (manifold://bucket/key), or a bare snapshot filename to fetch from the nest_server_nodejs_heap_snapshots bucket.'),
161
+ alias: z
162
+ .string()
163
+ .optional()
164
+ .describe('Optional short handle to identify this snapshot in a multi-snapshot session (defaults to the file name). Node ids are only valid within the snapshot they came from.'),
165
+ keep_previous: z
166
+ .boolean()
167
+ .optional()
168
+ .default(false)
169
+ .describe('Keep previously-loaded snapshots resident instead of replacing them (default false). Enables before/after diffing and app-to-app comparison without reloading. Each resident snapshot holds its full graph in memory — watch server RSS for very large heaps.'),
170
+ quiet: z
171
+ .boolean()
172
+ .optional()
173
+ .describe('Session output control: when true, the per-call "> Snapshot: …" header is printed once instead of on every subsequent tool result (saves tokens over a long investigation).'),
174
+ suppress_suggestions: z
175
+ .boolean()
176
+ .optional()
177
+ .describe('Session output control: when true, tools omit their "Suggested next steps" trailers to save tokens.'),
178
+ max_file_size_mb: z
179
+ .number()
180
+ .optional()
181
+ .default(900)
182
+ .describe('Maximum file size in MB to attempt loading (default 900). Snapshots larger than this will return an error instead of risking an OOM crash. Increase if your Node.js process has extra memory (--max-old-space-size).'),
183
+ }, async ({ file_path, alias, keep_previous, quiet, suppress_suggestions, max_file_size_mb, }) => {
110
184
  try {
111
- const resolved = path.resolve(file_path);
185
+ if (quiet != null || suppress_suggestions != null) {
186
+ setSessionConfig({
187
+ ...(quiet != null ? { quietHeader: quiet } : {}),
188
+ ...(suppress_suggestions != null
189
+ ? { suppressSuggestions: suppress_suggestions }
190
+ : {}),
191
+ });
192
+ }
193
+ const previousMeta = getSnapshotMetadata();
194
+ let resolved;
195
+ let fetchedFrom = null;
196
+ try {
197
+ const r = resolveSnapshotPath(file_path);
198
+ resolved = r.localPath;
199
+ fetchedFrom = r.fetchedFrom;
200
+ }
201
+ catch (fetchErr) {
202
+ const msg = fetchErr instanceof Error ? fetchErr.message : String(fetchErr);
203
+ return errorResult(new Error(`Failed to fetch "${file_path}" from Manifold: ${msg}\n` +
204
+ `Ensure the 'manifold' CLI is installed and you have access to the bucket, ` +
205
+ `or pass a local absolute path instead.`));
206
+ }
112
207
  if (!fs.existsSync(resolved)) {
113
- return errorResult(new Error(`File not found: ${resolved}`));
208
+ return errorResult(new Error(`File not found: ${resolved}` +
209
+ (file_path.includes('/')
210
+ ? ''
211
+ : ` (also tried fetching "${file_path}" from the ${DEFAULT_MANIFOLD_BUCKET} bucket)`)));
114
212
  }
115
213
  const fileStat = fs.statSync(resolved);
116
214
  const fileSizeMB = fileStat.size / (1024 * 1024);
215
+ if (fileSizeMB > max_file_size_mb) {
216
+ return errorResult(new Error(`Snapshot file is ${formatBytes(fileStat.size)} — exceeds the ${max_file_size_mb} MB safety limit. ` +
217
+ `Loading snapshots this large often causes the MCP server to crash with an out-of-memory error, ` +
218
+ `losing all analysis state.\n\n` +
219
+ `Options:\n` +
220
+ `1. Use a smaller snapshot from the same app if available\n` +
221
+ `2. Increase the limit: memlab_load_snapshot({max_file_size_mb: ${Math.ceil(fileSizeMB + 100)}})\n` +
222
+ `3. Restart the MCP server with more memory: NODE_OPTIONS="--max-old-space-size=8192"`));
223
+ }
117
224
  if (fileSizeMB > 200) {
118
225
  process.stderr.write(`Loading ${formatBytes(fileStat.size)} snapshot — this may take a while (parsing, computing dominators, building indexes)...\n`);
119
226
  }
120
- const snapshot = await getFullHeapFromFile(resolved);
227
+ let snapshot;
228
+ try {
229
+ snapshot = await getFullHeapFromFile(resolved);
230
+ }
231
+ catch (loadErr) {
232
+ const msg = loadErr instanceof Error ? loadErr.message : String(loadErr);
233
+ if (msg.includes('heap out of memory') ||
234
+ msg.includes('allocation failed') ||
235
+ msg.includes('JavaScript heap') ||
236
+ msg.includes('ENOMEM')) {
237
+ return errorResult(new Error(`Out of memory while loading ${formatBytes(fileStat.size)} snapshot. ` +
238
+ `The snapshot requires more memory than is available to the MCP server process.\n\n` +
239
+ `Try:\n` +
240
+ `1. A smaller snapshot from the same app\n` +
241
+ `2. Restart with more memory: NODE_OPTIONS="--max-old-space-size=8192"`));
242
+ }
243
+ throw loadErr;
244
+ }
121
245
  let nodeCount = 0;
122
246
  let edgeCount = 0;
123
247
  let totalSize = 0;
@@ -129,22 +253,35 @@ export function registerLoadSnapshot(server) {
129
253
  edgeCount++;
130
254
  });
131
255
  const env = detectEnv(snapshot);
132
- const fileName = path.basename(file_path);
133
- setSnapshot(snapshot, file_path, {
256
+ const fileName = path.basename(fetchedFrom ?? file_path.replace(/^manifold:\/\//, ''));
257
+ const meta = setSnapshot(snapshot, resolved, {
134
258
  fileName,
135
259
  nodeCount,
136
260
  edgeCount,
137
261
  totalSize,
138
262
  env,
139
- });
263
+ }, { alias, replace: !keep_previous });
140
264
  const envLabel = env === 'browser'
141
265
  ? 'Browser'
142
266
  : env === 'node'
143
267
  ? 'Node.js'
144
268
  : 'Unknown';
145
- const lines = [
146
- `Loaded ${file_path} (${formatBytes(fileStat.size)} on disk): ${formatNumber(nodeCount)} nodes, ${formatNumber(edgeCount)} edges, ${formatBytes(totalSize)} heap size (${envLabel} snapshot)`,
147
- ];
269
+ const lines = [];
270
+ if (previousMeta && !keep_previous) {
271
+ lines.push(`⚠ Replacing previously loaded snapshot "${previousMeta.fileName}"`);
272
+ }
273
+ if (fetchedFrom) {
274
+ lines.push(`Fetched from Manifold: ${fetchedFrom}`);
275
+ }
276
+ lines.push(`Loaded ${fileName} (${formatBytes(fileStat.size)} on disk): ${formatNumber(nodeCount)} nodes, ${formatNumber(edgeCount)} edges, ${formatBytes(totalSize)} heap size (${envLabel} snapshot) [handle: ${meta.handle}]`);
277
+ if (keep_previous) {
278
+ const all = listSnapshots();
279
+ if (all.length > 1) {
280
+ lines.push(`Resident snapshots (${all.length}): ${all
281
+ .map(m => `${m.handle === meta.handle ? '→ ' : ''}${m.handle} (${formatBytes(m.totalSize)})`)
282
+ .join(', ')}. Switch with memlab_snapshots.`);
283
+ }
284
+ }
148
285
  const warnings = quickDiagnosis(snapshot, totalSize);
149
286
  if (warnings.length > 0) {
150
287
  lines.push('', ...warnings);
@@ -1 +1 @@
1
- {"version":3,"file":"load-snapshot.js","sourceRoot":"","sources":["../../src/tools/load-snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,kBAAkB,MAAM,uBAAuB,CAAC;AACvD,MAAM,EAAC,mBAAmB,EAAC,GAAG,kBAAkB,CAAC;AACjD,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EACL,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,UAAU,GACX,MAAM,aAAa,CAAC;AASrB,SAAS,iBAAiB,CAAC,QAAuB;IAChD,IAAI,IAAI,GAA0B,IAAI,CAAC;IACvC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC5B,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;YAAE,OAAO;QACzB,IACE,IAAI,CAAC,IAAI,KAAK,QAAQ;YACtB,IAAI,CAAC,IAAI,KAAK,SAAS;YACvB,IAAI,CAAC,IAAI,KAAK,QAAQ,EACtB,CAAC;YACD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC3C,IAAI,GAAG;oBACL,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,IAAI,CAAC,YAAY;oBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;iBAChB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,QAAuB;IACxC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC5B,IAAI,SAAS;YAAE,OAAO;QACtB,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9D,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,IACE,IAAI,CAAC,IAAI,KAAK,QAAQ;YACtB,IAAI,CAAC,IAAI,KAAK,QAAQ;YACtB,CAAC,SAAS;YACV,CAAC,SAAS,EACV,CAAC;YACD,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,IAAI,SAAS;QAAE,OAAO,MAAM,CAAC;IAC7B,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CACrB,QAAuB,EACvB,aAAqB;IAErB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,MAAM,YAAY,GAA+C,EAAE,CAAC;IACpE,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE9C,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC5B,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;YAAE,OAAO;QAEzB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;YAC5D,YAAY,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAC,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;YACpE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACzE,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACpD,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/D,QAAQ,CAAC,IAAI,CACX,KAAK,YAAY,CAAC,MAAM,sBAAsB,WAAW,CAAC,SAAS,CAAC,6CAA6C,CAClH,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC;SACzC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC;SACpC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC/D,QAAQ,CAAC,IAAI,CAAC,MAAM,OAAO,gBAAgB,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,OAAO,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,OAAO,CAAC,IAAI,IAAI,aAAa,GAAG,GAAG,EAAE,CAAC;YACxC,QAAQ,CAAC,IAAI,CACX,MAAM,OAAO,CAAC,EAAE,IAAI,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,aAAa,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,YAAY,CAC9J,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;SACzC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,KAAK,CAAC;SACrC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QACtC,QAAQ,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,KAAK,CAAC,OAAO,IAAI,cAAc,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,2NAA2N,EAC3N;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;KACxE,EACD,KAAK,EAAE,EAAC,SAAS,EAAC,EAAE,EAAE;QACpB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,OAAO,WAAW,CAAC,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC/D,CAAC;YACD,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACvC,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;YACjD,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;gBACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,WAAW,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,0FAA0F,CAChI,CAAC;YACJ,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAErD,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAC5B,SAAS,EAAE,CAAC;gBACZ,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;YAC9B,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;gBAC1B,SAAS,EAAE,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC1C,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE;gBAC/B,QAAQ;gBACR,SAAS;gBACT,SAAS;gBACT,SAAS;gBACT,GAAG;aACJ,CAAC,CAAC;YAEH,MAAM,QAAQ,GACZ,GAAG,KAAK,SAAS;gBACf,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,GAAG,KAAK,MAAM;oBACd,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,SAAS,CAAC;YAClB,MAAM,KAAK,GAAG;gBACZ,UAAU,SAAS,KAAK,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,YAAY,CAAC,SAAS,CAAC,WAAW,YAAY,CAAC,SAAS,CAAC,WAAW,WAAW,CAAC,SAAS,CAAC,eAAe,QAAQ,YAAY;aAC9L,CAAC;YAEF,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACrD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC;YAC9B,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
+ {"version":3,"file":"load-snapshot.js","sourceRoot":"","sources":["../../src/tools/load-snapshot.ts"],"names":[],"mappings":"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"}
@@ -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 registerObjectCostBreakdown(server: McpServer): void;
12
+ //# sourceMappingURL=object-cost-breakdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-cost-breakdown.d.ts","sourceRoot":"","sources":["../../src/tools/object-cost-breakdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAuHvE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+bnE"}