@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.
- package/README.md +88 -3
- package/dist/analysis-budget.d.ts +71 -0
- package/dist/analysis-budget.d.ts.map +1 -0
- package/dist/analysis-budget.js +118 -0
- package/dist/analysis-budget.js.map +1 -0
- package/dist/guardrail.d.ts +24 -0
- package/dist/guardrail.d.ts.map +1 -0
- package/dist/guardrail.js +65 -0
- package/dist/guardrail.js.map +1 -0
- package/dist/heap-state.d.ts +46 -1
- package/dist/heap-state.d.ts.map +1 -1
- package/dist/heap-state.js +142 -10
- package/dist/heap-state.js.map +1 -1
- package/dist/index.js +36 -1
- package/dist/index.js.map +1 -1
- package/dist/tools/array-group-by.d.ts +12 -0
- package/dist/tools/array-group-by.d.ts.map +1 -0
- package/dist/tools/array-group-by.js +191 -0
- package/dist/tools/array-group-by.js.map +1 -0
- package/dist/tools/auto-investigate.d.ts.map +1 -1
- package/dist/tools/auto-investigate.js +999 -37
- package/dist/tools/auto-investigate.js.map +1 -1
- package/dist/tools/cache-analysis.d.ts.map +1 -1
- package/dist/tools/cache-analysis.js +438 -21
- package/dist/tools/cache-analysis.js.map +1 -1
- package/dist/tools/check-health.d.ts.map +1 -1
- package/dist/tools/check-health.js +261 -1
- package/dist/tools/check-health.js.map +1 -1
- package/dist/tools/class-histogram.d.ts.map +1 -1
- package/dist/tools/class-histogram.js +142 -33
- package/dist/tools/class-histogram.js.map +1 -1
- package/dist/tools/closure-inspection.d.ts.map +1 -1
- package/dist/tools/closure-inspection.js +238 -25
- package/dist/tools/closure-inspection.js.map +1 -1
- package/dist/tools/detached-dom.d.ts.map +1 -1
- package/dist/tools/detached-dom.js +25 -3
- package/dist/tools/detached-dom.js.map +1 -1
- package/dist/tools/dev-artifacts.d.ts +33 -0
- package/dist/tools/dev-artifacts.d.ts.map +1 -0
- package/dist/tools/dev-artifacts.js +165 -0
- package/dist/tools/dev-artifacts.js.map +1 -0
- package/dist/tools/diff-snapshots.d.ts.map +1 -1
- package/dist/tools/diff-snapshots.js +113 -18
- package/dist/tools/diff-snapshots.js.map +1 -1
- package/dist/tools/duplicated-strings.d.ts.map +1 -1
- package/dist/tools/duplicated-strings.js +74 -12
- package/dist/tools/duplicated-strings.js.map +1 -1
- package/dist/tools/eval.d.ts.map +1 -1
- package/dist/tools/eval.js +189 -10
- package/dist/tools/eval.js.map +1 -1
- package/dist/tools/event-listener-leaks.d.ts.map +1 -1
- package/dist/tools/event-listener-leaks.js +235 -13
- package/dist/tools/event-listener-leaks.js.map +1 -1
- package/dist/tools/event-registry.d.ts +12 -0
- package/dist/tools/event-registry.d.ts.map +1 -0
- package/dist/tools/event-registry.js +183 -0
- package/dist/tools/event-registry.js.map +1 -0
- package/dist/tools/find-by-property.d.ts.map +1 -1
- package/dist/tools/find-by-property.js +113 -31
- package/dist/tools/find-by-property.js.map +1 -1
- package/dist/tools/find-by-shape.d.ts +12 -0
- package/dist/tools/find-by-shape.d.ts.map +1 -0
- package/dist/tools/find-by-shape.js +178 -0
- package/dist/tools/find-by-shape.js.map +1 -0
- package/dist/tools/find-nodes-by-class.d.ts.map +1 -1
- package/dist/tools/find-nodes-by-class.js +50 -6
- package/dist/tools/find-nodes-by-class.js.map +1 -1
- package/dist/tools/for-each.d.ts.map +1 -1
- package/dist/tools/for-each.js +1 -1
- package/dist/tools/for-each.js.map +1 -1
- package/dist/tools/get-node.d.ts.map +1 -1
- package/dist/tools/get-node.js +6 -0
- package/dist/tools/get-node.js.map +1 -1
- package/dist/tools/get-string.d.ts +12 -0
- package/dist/tools/get-string.d.ts.map +1 -0
- package/dist/tools/get-string.js +223 -0
- package/dist/tools/get-string.js.map +1 -0
- package/dist/tools/get-value.d.ts +12 -0
- package/dist/tools/get-value.d.ts.map +1 -0
- package/dist/tools/get-value.js +152 -0
- package/dist/tools/get-value.js.map +1 -0
- package/dist/tools/global-variables.d.ts.map +1 -1
- package/dist/tools/global-variables.js +54 -34
- package/dist/tools/global-variables.js.map +1 -1
- package/dist/tools/growth-signals.d.ts +12 -0
- package/dist/tools/growth-signals.d.ts.map +1 -0
- package/dist/tools/growth-signals.js +211 -0
- package/dist/tools/growth-signals.js.map +1 -0
- package/dist/tools/intern-opportunities.d.ts +12 -0
- package/dist/tools/intern-opportunities.d.ts.map +1 -0
- package/dist/tools/intern-opportunities.js +289 -0
- package/dist/tools/intern-opportunities.js.map +1 -0
- package/dist/tools/load-snapshot.d.ts +10 -0
- package/dist/tools/load-snapshot.d.ts.map +1 -1
- package/dist/tools/load-snapshot.js +152 -15
- package/dist/tools/load-snapshot.js.map +1 -1
- package/dist/tools/object-cost-breakdown.d.ts +12 -0
- package/dist/tools/object-cost-breakdown.d.ts.map +1 -0
- package/dist/tools/object-cost-breakdown.js +439 -0
- package/dist/tools/object-cost-breakdown.js.map +1 -0
- package/dist/tools/object-shape.d.ts.map +1 -1
- package/dist/tools/object-shape.js +95 -2
- package/dist/tools/object-shape.js.map +1 -1
- package/dist/tools/pinch-points.d.ts.map +1 -1
- package/dist/tools/pinch-points.js +9 -9
- package/dist/tools/pinch-points.js.map +1 -1
- package/dist/tools/property-distribution.d.ts +12 -0
- package/dist/tools/property-distribution.d.ts.map +1 -0
- package/dist/tools/property-distribution.js +168 -0
- package/dist/tools/property-distribution.js.map +1 -0
- package/dist/tools/quick-diagnosis.d.ts.map +1 -1
- package/dist/tools/quick-diagnosis.js +56 -19
- package/dist/tools/quick-diagnosis.js.map +1 -1
- package/dist/tools/retainer-summary.d.ts.map +1 -1
- package/dist/tools/retainer-summary.js +90 -5
- package/dist/tools/retainer-summary.js.map +1 -1
- package/dist/tools/retainer-trace.d.ts.map +1 -1
- package/dist/tools/retainer-trace.js +74 -22
- package/dist/tools/retainer-trace.js.map +1 -1
- package/dist/tools/search-nodes.d.ts.map +1 -1
- package/dist/tools/search-nodes.js +10 -3
- package/dist/tools/search-nodes.js.map +1 -1
- package/dist/tools/search-strings.d.ts +12 -0
- package/dist/tools/search-strings.d.ts.map +1 -0
- package/dist/tools/search-strings.js +182 -0
- package/dist/tools/search-strings.js.map +1 -0
- package/dist/tools/sequence-analysis.d.ts +12 -0
- package/dist/tools/sequence-analysis.d.ts.map +1 -0
- package/dist/tools/sequence-analysis.js +234 -0
- package/dist/tools/sequence-analysis.js.map +1 -0
- package/dist/tools/server-status.d.ts +12 -0
- package/dist/tools/server-status.d.ts.map +1 -0
- package/dist/tools/server-status.js +41 -0
- package/dist/tools/server-status.js.map +1 -0
- package/dist/tools/shape-histogram.d.ts.map +1 -1
- package/dist/tools/shape-histogram.js +61 -16
- package/dist/tools/shape-histogram.js.map +1 -1
- package/dist/tools/sliced-strings.d.ts.map +1 -1
- package/dist/tools/sliced-strings.js +16 -11
- package/dist/tools/sliced-strings.js.map +1 -1
- package/dist/tools/snapshot-summary.d.ts.map +1 -1
- package/dist/tools/snapshot-summary.js +55 -13
- package/dist/tools/snapshot-summary.js.map +1 -1
- package/dist/tools/snapshots.d.ts +12 -0
- package/dist/tools/snapshots.d.ts.map +1 -0
- package/dist/tools/snapshots.js +93 -0
- package/dist/tools/snapshots.js.map +1 -0
- package/dist/tools/stale-collections.d.ts.map +1 -1
- package/dist/tools/stale-collections.js +248 -7
- package/dist/tools/stale-collections.js.map +1 -1
- package/dist/tools/trace-dominators.d.ts.map +1 -1
- package/dist/tools/trace-dominators.js +28 -1
- package/dist/tools/trace-dominators.js.map +1 -1
- package/dist/tools/weakmap-entries.d.ts +12 -0
- package/dist/tools/weakmap-entries.d.ts.map +1 -0
- package/dist/tools/weakmap-entries.js +156 -0
- package/dist/tools/weakmap-entries.js.map +1 -0
- package/dist/utils.d.ts +81 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +303 -35
- package/dist/utils.js.map +1 -1
- package/package.json +3 -3
|
@@ -9,7 +9,23 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { z } from 'zod';
|
|
11
11
|
import { getSnapshot, getSnapshotMetadata } from '../heap-state.js';
|
|
12
|
-
import { formatBytes, formatNumber, markdownTable, truncateNodeName, errorResult, toolResult, } from '../utils.js';
|
|
12
|
+
import { formatBytes, formatNumber, markdownTable, truncateNodeName, errorResult, toolResult, suggestionsSuppressed, } from '../utils.js';
|
|
13
|
+
const CACHE_EDGE_RE = /cache|memo|store|registry|lru|dedup|pool|index|lookup|byId|byKey/i;
|
|
14
|
+
/**
|
|
15
|
+
* Distinguish a genuine cache (named like one, owned by a cache class, or
|
|
16
|
+
* carrying cache config) from a plain large collection / per-request working
|
|
17
|
+
* set. Avoids over-labeling every big Map/Array as an "unbounded cache"
|
|
18
|
+
* (Feedback §2c).
|
|
19
|
+
*/
|
|
20
|
+
function classifyCollection(collectionType, ownerEdge, framework) {
|
|
21
|
+
if (framework)
|
|
22
|
+
return 'cache-like';
|
|
23
|
+
if (/cache/i.test(collectionType))
|
|
24
|
+
return 'cache-like';
|
|
25
|
+
if (CACHE_EDGE_RE.test(ownerEdge))
|
|
26
|
+
return 'cache-like';
|
|
27
|
+
return 'collection';
|
|
28
|
+
}
|
|
13
29
|
function identifyCacheFramework(node, ownerEdge) {
|
|
14
30
|
// Check owner edge name for framework-specific patterns
|
|
15
31
|
if (ownerEdge === '$$cache' || ownerEdge.includes('.$$cache')) {
|
|
@@ -80,17 +96,42 @@ function getOwnerInfo(node) {
|
|
|
80
96
|
function countEntries(node) {
|
|
81
97
|
if (node.name === 'Map' || node.name === 'Set') {
|
|
82
98
|
for (const edge of node.references) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
99
|
+
const eName = String(edge.name_or_index);
|
|
100
|
+
if ((eName === 'table' || eName === 'backing_store') &&
|
|
101
|
+
(edge.toNode.type === 'array' || edge.toNode.type === 'hidden')) {
|
|
102
|
+
const tableNode = edge.toNode;
|
|
103
|
+
let filledSlots = 0;
|
|
104
|
+
let totalSlots = 0;
|
|
105
|
+
for (const e of tableNode.references) {
|
|
106
|
+
if (e.type === 'internal' || e.type === 'hidden')
|
|
107
|
+
continue;
|
|
108
|
+
totalSlots++;
|
|
109
|
+
const target = e.toNode;
|
|
110
|
+
if (target.id <= 3)
|
|
111
|
+
continue;
|
|
112
|
+
if (target.name === 'undefined' || target.name === 'the_hole')
|
|
113
|
+
continue;
|
|
114
|
+
filledSlots++;
|
|
115
|
+
}
|
|
116
|
+
if (filledSlots === 0 && totalSlots === 0) {
|
|
117
|
+
filledSlots = tableNode.edge_count;
|
|
118
|
+
totalSlots = filledSlots;
|
|
89
119
|
}
|
|
90
|
-
const entries = node.name === 'Map' ? Math.floor(
|
|
91
|
-
return { entries, tableSlots:
|
|
120
|
+
const entries = node.name === 'Map' ? Math.floor(filledSlots / 2) : filledSlots;
|
|
121
|
+
return { entries, tableSlots: filledSlots };
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Fallback: count non-internal outgoing edges as a proxy for entries
|
|
125
|
+
let propertyCount = 0;
|
|
126
|
+
for (const edge of node.references) {
|
|
127
|
+
if (edge.type === 'property' || edge.type === 'element') {
|
|
128
|
+
propertyCount++;
|
|
92
129
|
}
|
|
93
130
|
}
|
|
131
|
+
if (propertyCount > 0) {
|
|
132
|
+
const entries = node.name === 'Map' ? Math.floor(propertyCount / 2) : propertyCount;
|
|
133
|
+
return { entries, tableSlots: propertyCount };
|
|
134
|
+
}
|
|
94
135
|
return { entries: 0, tableSlots: 0 };
|
|
95
136
|
}
|
|
96
137
|
const count = node.edge_count;
|
|
@@ -137,13 +178,14 @@ function sampleCacheEntries(node, count) {
|
|
|
137
178
|
for (const ve of val.references) {
|
|
138
179
|
if (ve.type === 'property') {
|
|
139
180
|
props.push(String(ve.name_or_index));
|
|
140
|
-
if (props.length >=
|
|
181
|
+
if (props.length >= 8)
|
|
141
182
|
break;
|
|
142
183
|
}
|
|
143
184
|
}
|
|
185
|
+
const totalProps = [...val.references].filter(e => e.type === 'property').length;
|
|
144
186
|
valStr =
|
|
145
187
|
props.length > 0
|
|
146
|
-
? `${val.name} {${props.join(', ')}${
|
|
188
|
+
? `${val.name} {${props.join(', ')}${totalProps > props.length ? `, … +${totalProps - props.length} more` : ''}}`
|
|
147
189
|
: `${val.name} (${val.type}, ${formatBytes(val.retainedSize)})`;
|
|
148
190
|
}
|
|
149
191
|
}
|
|
@@ -212,12 +254,29 @@ export function registerCacheAnalysis(server) {
|
|
|
212
254
|
.optional()
|
|
213
255
|
.default(['Map', 'Set', 'Array'])
|
|
214
256
|
.describe('Collection types to scan (default: Map, Set, Array)'),
|
|
257
|
+
detect_object_caches: z
|
|
258
|
+
.boolean()
|
|
259
|
+
.optional()
|
|
260
|
+
.default(true)
|
|
261
|
+
.describe('Also scan for ad-hoc object caches: plain objects with TTL-cache shapes ({result,expiresAt}, {data,timestamp}, {value,ts}), objects with cache config properties (ttlMs, maxSize, retentionMs), globalThis properties retaining >1 MB, and objects with refreshTimer/inflight patterns (default true)'),
|
|
262
|
+
detect_identical_entries: z
|
|
263
|
+
.boolean()
|
|
264
|
+
.optional()
|
|
265
|
+
.default(true)
|
|
266
|
+
.describe('Compare entries within each cache for structural similarity (same array lengths, similar retained sizes). Flags caches where multiple entries appear to contain identical data — suggests caching once instead of per-key (default true)'),
|
|
215
267
|
sample_entries: z
|
|
216
268
|
.number()
|
|
217
269
|
.optional()
|
|
218
270
|
.default(0)
|
|
219
271
|
.describe('Number of sample entries to show per cache (default 0). Inspects representative key-value pairs showing key type/preview and value shape. Saves 2-3 follow-up tool calls per cache.'),
|
|
220
|
-
|
|
272
|
+
compact_samples: z
|
|
273
|
+
.boolean()
|
|
274
|
+
.optional()
|
|
275
|
+
.default(true)
|
|
276
|
+
.describe('Use compact one-line format for sampled entries (default true). ' +
|
|
277
|
+
'Shows "key_type → value_shape" instead of full object descriptions. ' +
|
|
278
|
+
'Set to false for verbose entry details.'),
|
|
279
|
+
}, async ({ limit, min_entries, min_retained_size, collection_types, detect_object_caches, detect_identical_entries, sample_entries, compact_samples, }) => {
|
|
221
280
|
try {
|
|
222
281
|
const snapshot = getSnapshot();
|
|
223
282
|
const meta = getSnapshotMetadata();
|
|
@@ -249,6 +308,7 @@ export function registerCacheAnalysis(server) {
|
|
|
249
308
|
ownerEdge: owner.edge,
|
|
250
309
|
hasWeakRefs: hasWeakRefEntries(node),
|
|
251
310
|
framework,
|
|
311
|
+
classification: classifyCollection(node.name, owner.edge, framework),
|
|
252
312
|
};
|
|
253
313
|
let inserted = false;
|
|
254
314
|
for (let i = 0; i < caches.length; i++) {
|
|
@@ -263,6 +323,168 @@ export function registerCacheAnalysis(server) {
|
|
|
263
323
|
if (caches.length > limit)
|
|
264
324
|
caches.length = limit;
|
|
265
325
|
});
|
|
326
|
+
// Detect ad-hoc object caches: plain objects with cache-like shapes
|
|
327
|
+
if (detect_object_caches) {
|
|
328
|
+
const DATA_PROPS = new Set([
|
|
329
|
+
'rows',
|
|
330
|
+
'data',
|
|
331
|
+
'items',
|
|
332
|
+
'results',
|
|
333
|
+
'result',
|
|
334
|
+
'value',
|
|
335
|
+
'response',
|
|
336
|
+
'payload',
|
|
337
|
+
// Common collection-property names on Nest/in-process TTL caches
|
|
338
|
+
// that were missed before (e.g. `{entries, timestamp, map}`,
|
|
339
|
+
// `{records, loadedAt}`). Feedback round 4 §B.
|
|
340
|
+
'entries',
|
|
341
|
+
'records',
|
|
342
|
+
'nodes',
|
|
343
|
+
'list',
|
|
344
|
+
'cache',
|
|
345
|
+
]);
|
|
346
|
+
const TIMESTAMP_PROPS = new Set([
|
|
347
|
+
'timestamp',
|
|
348
|
+
'cachedAt',
|
|
349
|
+
'ttl',
|
|
350
|
+
'expiresAt',
|
|
351
|
+
'updatedAt',
|
|
352
|
+
'ts',
|
|
353
|
+
'ttlMs',
|
|
354
|
+
'expiry',
|
|
355
|
+
'createdAt',
|
|
356
|
+
// Freshness markers used by load-once warm caches. `loadedAt` in
|
|
357
|
+
// particular is a very common Nest pattern that was missed before.
|
|
358
|
+
// Feedback round 4 §B.
|
|
359
|
+
'loadedAt',
|
|
360
|
+
'loaded_at',
|
|
361
|
+
'cached_at',
|
|
362
|
+
'fetchedAt',
|
|
363
|
+
'fetched_at',
|
|
364
|
+
'lastFetched',
|
|
365
|
+
'lastLoaded',
|
|
366
|
+
'lastUpdated',
|
|
367
|
+
]);
|
|
368
|
+
const CONFIG_PROPS = new Set([
|
|
369
|
+
'ttlMs',
|
|
370
|
+
'maxSize',
|
|
371
|
+
'retentionMs',
|
|
372
|
+
'maxAge',
|
|
373
|
+
'capacity',
|
|
374
|
+
]);
|
|
375
|
+
const INFLIGHT_PROPS = new Set([
|
|
376
|
+
'refreshTimer',
|
|
377
|
+
'inflight',
|
|
378
|
+
'pending',
|
|
379
|
+
'refreshInterval',
|
|
380
|
+
]);
|
|
381
|
+
const insertCache = (entry) => {
|
|
382
|
+
let inserted = false;
|
|
383
|
+
for (let i = 0; i < caches.length; i++) {
|
|
384
|
+
if (entry.retainedSize > caches[i].retainedSize) {
|
|
385
|
+
caches.splice(i, 0, entry);
|
|
386
|
+
inserted = true;
|
|
387
|
+
break;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
if (!inserted)
|
|
391
|
+
caches.push(entry);
|
|
392
|
+
if (caches.length > limit)
|
|
393
|
+
caches.length = limit;
|
|
394
|
+
};
|
|
395
|
+
snapshot.nodes.forEach(node => {
|
|
396
|
+
if (node.id <= 3)
|
|
397
|
+
return;
|
|
398
|
+
if (node.type !== 'object' || node.name !== 'Object')
|
|
399
|
+
return;
|
|
400
|
+
if (node.retainedSize < min_retained_size)
|
|
401
|
+
return;
|
|
402
|
+
let hasDataProp = false;
|
|
403
|
+
let hasTimestampProp = false;
|
|
404
|
+
let hasConfigProp = false;
|
|
405
|
+
let hasInflightProp = false;
|
|
406
|
+
let dataEntryCount = 0;
|
|
407
|
+
let cacheType = 'Object (ad-hoc cache)';
|
|
408
|
+
for (const edge of node.references) {
|
|
409
|
+
if (edge.type !== 'property')
|
|
410
|
+
continue;
|
|
411
|
+
const propName = String(edge.name_or_index);
|
|
412
|
+
if (DATA_PROPS.has(propName)) {
|
|
413
|
+
hasDataProp = true;
|
|
414
|
+
if (edge.toNode.name === 'Array' &&
|
|
415
|
+
edge.toNode.type === 'object') {
|
|
416
|
+
dataEntryCount = edge.toNode.edge_count;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
if (TIMESTAMP_PROPS.has(propName))
|
|
420
|
+
hasTimestampProp = true;
|
|
421
|
+
if (CONFIG_PROPS.has(propName))
|
|
422
|
+
hasConfigProp = true;
|
|
423
|
+
if (INFLIGHT_PROPS.has(propName))
|
|
424
|
+
hasInflightProp = true;
|
|
425
|
+
}
|
|
426
|
+
// Match any cache-like pattern
|
|
427
|
+
const isTTLCache = hasDataProp && hasTimestampProp;
|
|
428
|
+
const isConfiguredCache = hasDataProp && hasConfigProp;
|
|
429
|
+
const isWarmCache = hasDataProp && hasInflightProp;
|
|
430
|
+
if (!isTTLCache && !isConfiguredCache && !isWarmCache)
|
|
431
|
+
return;
|
|
432
|
+
if (isConfiguredCache)
|
|
433
|
+
cacheType = 'Object (configured cache)';
|
|
434
|
+
if (isWarmCache)
|
|
435
|
+
cacheType = 'Object (warm-on-boot cache)';
|
|
436
|
+
const owner = getOwnerInfo(node);
|
|
437
|
+
insertCache({
|
|
438
|
+
nodeId: node.id,
|
|
439
|
+
collectionType: cacheType,
|
|
440
|
+
entryCount: dataEntryCount,
|
|
441
|
+
tableSlots: dataEntryCount,
|
|
442
|
+
retainedSize: node.retainedSize,
|
|
443
|
+
selfSize: node.self_size,
|
|
444
|
+
ownerName: owner.name,
|
|
445
|
+
ownerEdge: owner.edge,
|
|
446
|
+
hasWeakRefs: false,
|
|
447
|
+
framework: '',
|
|
448
|
+
classification: classifyCollection(cacheType, owner.edge, ''),
|
|
449
|
+
});
|
|
450
|
+
});
|
|
451
|
+
// Detect globalThis properties retaining >1 MB
|
|
452
|
+
snapshot.nodes.forEach(node => {
|
|
453
|
+
if (node.id <= 3 || node.type !== 'object')
|
|
454
|
+
return;
|
|
455
|
+
if (node.name !== 'Window' &&
|
|
456
|
+
node.name !== 'global' &&
|
|
457
|
+
node.name !== 'globalThis')
|
|
458
|
+
return;
|
|
459
|
+
for (const edge of node.references) {
|
|
460
|
+
if (edge.type !== 'property')
|
|
461
|
+
continue;
|
|
462
|
+
const target = edge.toNode;
|
|
463
|
+
if (target.retainedSize < 1024 * 1024)
|
|
464
|
+
continue;
|
|
465
|
+
if (target.id <= 3)
|
|
466
|
+
continue;
|
|
467
|
+
const propName = String(edge.name_or_index);
|
|
468
|
+
// Skip well-known globals
|
|
469
|
+
if (propName.startsWith('__') &&
|
|
470
|
+
(propName.endsWith('__') || propName === '__proto__'))
|
|
471
|
+
continue;
|
|
472
|
+
insertCache({
|
|
473
|
+
nodeId: target.id,
|
|
474
|
+
collectionType: 'Global registry',
|
|
475
|
+
entryCount: target.edge_count,
|
|
476
|
+
tableSlots: target.edge_count,
|
|
477
|
+
retainedSize: target.retainedSize,
|
|
478
|
+
selfSize: target.self_size,
|
|
479
|
+
ownerName: node.name,
|
|
480
|
+
ownerEdge: propName,
|
|
481
|
+
hasWeakRefs: false,
|
|
482
|
+
framework: '',
|
|
483
|
+
classification: classifyCollection('Global registry', propName, ''),
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
});
|
|
487
|
+
}
|
|
266
488
|
if (caches.length === 0) {
|
|
267
489
|
return toolResult(`No unbounded caches found with >= ${min_entries} entries and >= ${formatBytes(min_retained_size)} retained. Try lowering the thresholds.`);
|
|
268
490
|
}
|
|
@@ -271,6 +493,7 @@ export function registerCacheAnalysis(server) {
|
|
|
271
493
|
const headers = [
|
|
272
494
|
'ID',
|
|
273
495
|
'Type',
|
|
496
|
+
'Kind',
|
|
274
497
|
'Entries',
|
|
275
498
|
...(hasSlotDifference ? ['Table Slots'] : []),
|
|
276
499
|
'Retained',
|
|
@@ -281,8 +504,8 @@ export function registerCacheAnalysis(server) {
|
|
|
281
504
|
...(hasAnyFramework ? ['Framework'] : []),
|
|
282
505
|
];
|
|
283
506
|
const rightCols = hasSlotDifference
|
|
284
|
-
? new Set([
|
|
285
|
-
: new Set([
|
|
507
|
+
? new Set([3, 4, 5, 6])
|
|
508
|
+
: new Set([3, 4, 5]);
|
|
286
509
|
const rows = caches.map(c => {
|
|
287
510
|
const pct = totalSize > 0
|
|
288
511
|
? ((c.retainedSize / totalSize) * 100).toFixed(1) + '%'
|
|
@@ -290,6 +513,7 @@ export function registerCacheAnalysis(server) {
|
|
|
290
513
|
return [
|
|
291
514
|
`@${c.nodeId}`,
|
|
292
515
|
c.collectionType,
|
|
516
|
+
c.classification,
|
|
293
517
|
formatNumber(c.entryCount),
|
|
294
518
|
...(hasSlotDifference ? [formatNumber(c.tableSlots)] : []),
|
|
295
519
|
formatBytes(c.retainedSize),
|
|
@@ -301,20 +525,121 @@ export function registerCacheAnalysis(server) {
|
|
|
301
525
|
];
|
|
302
526
|
});
|
|
303
527
|
const totalRetained = caches.reduce((sum, c) => sum + c.retainedSize, 0);
|
|
528
|
+
const cacheLike = caches.filter(c => c.classification === 'cache-like').length;
|
|
304
529
|
const lines = [
|
|
305
|
-
`Cache analysis: ${caches.length}
|
|
530
|
+
`Cache analysis: ${caches.length} large collection(s) (${cacheLike} cache-like, ${caches.length - cacheLike} plain collection/working-set), ${formatBytes(totalRetained)} total retained`,
|
|
306
531
|
'',
|
|
307
532
|
markdownTable(headers, rows, rightCols),
|
|
308
533
|
'',
|
|
534
|
+
'**Kind:**',
|
|
535
|
+
'- **cache-like** — named like a cache, owned by a cache class, or carrying TTL/maxSize config. Missing eviction here is a likely leak.',
|
|
536
|
+
'- **collection** — a plain large Map/Set/Array or per-request working set. Large is not the same as leaking; confirm it is actually retained across requests before treating it as a leak.',
|
|
537
|
+
'',
|
|
309
538
|
'**Risk indicators:**',
|
|
310
539
|
'- **Weak? = No** means entries are strongly held and will never be evicted by GC',
|
|
311
540
|
'- High entry count with no eviction suggests unbounded growth',
|
|
312
541
|
'- Check if the owner has `clear()`, `delete()`, or LRU logic',
|
|
313
|
-
'',
|
|
314
|
-
'**Suggested next steps:**',
|
|
315
542
|
];
|
|
316
|
-
|
|
317
|
-
|
|
543
|
+
if (!suggestionsSuppressed()) {
|
|
544
|
+
const top = caches[0];
|
|
545
|
+
lines.push('', '**Suggested next steps:**', `- Inspect largest cache: \`memlab_object_shape(${top.nodeId})\``, `- See what it retains: \`memlab_dominator_subtree(${top.nodeId})\``, `- Trace its retainer: \`memlab_retainer_trace(${top.nodeId})\``, `- Check for common patterns: \`memlab_retainer_summary\` with node_ids from the top caches`);
|
|
546
|
+
}
|
|
547
|
+
// Detect byte-tracking mismatch and extract cache config (Feedback #2, #10)
|
|
548
|
+
const SIZE_PROPS = new Set([
|
|
549
|
+
'bytes',
|
|
550
|
+
'size',
|
|
551
|
+
'currentSize',
|
|
552
|
+
'currentBytes',
|
|
553
|
+
'maxBytes',
|
|
554
|
+
'byteSize',
|
|
555
|
+
'totalSize',
|
|
556
|
+
]);
|
|
557
|
+
const DISPLAY_CONFIG_PROPS = new Set([
|
|
558
|
+
'maxBytes',
|
|
559
|
+
'ttlMs',
|
|
560
|
+
'maxSize',
|
|
561
|
+
'maxAge',
|
|
562
|
+
'capacity',
|
|
563
|
+
'layer',
|
|
564
|
+
'name',
|
|
565
|
+
'namespace',
|
|
566
|
+
'maxEntries',
|
|
567
|
+
'ttl',
|
|
568
|
+
]);
|
|
569
|
+
const mismatchAlerts = [];
|
|
570
|
+
const configAlerts = [];
|
|
571
|
+
for (const c of caches.slice(0, 15)) {
|
|
572
|
+
const node = snapshot.getNodeById(c.nodeId);
|
|
573
|
+
if (!node)
|
|
574
|
+
continue;
|
|
575
|
+
let selfReportedSize = -1;
|
|
576
|
+
let selfReportedProp = '';
|
|
577
|
+
const configPairs = [];
|
|
578
|
+
const scanNode = (n) => {
|
|
579
|
+
for (const edge of n.references) {
|
|
580
|
+
if (edge.type !== 'property')
|
|
581
|
+
continue;
|
|
582
|
+
const eName = String(edge.name_or_index);
|
|
583
|
+
const target = edge.toNode;
|
|
584
|
+
if (SIZE_PROPS.has(eName) &&
|
|
585
|
+
selfReportedSize < 0 &&
|
|
586
|
+
(target.type === 'number' ||
|
|
587
|
+
(target.type === 'hidden' &&
|
|
588
|
+
target.name === 'system / HeapNumber'))) {
|
|
589
|
+
selfReportedSize =
|
|
590
|
+
target.self_size === 0 ? 0 : target.self_size;
|
|
591
|
+
selfReportedProp = eName;
|
|
592
|
+
}
|
|
593
|
+
if (DISPLAY_CONFIG_PROPS.has(eName)) {
|
|
594
|
+
let val;
|
|
595
|
+
if (target.isString) {
|
|
596
|
+
const s = target.toStringNode();
|
|
597
|
+
val = s ? `"${s.stringValue.slice(0, 30)}"` : target.name;
|
|
598
|
+
}
|
|
599
|
+
else if (target.type === 'number' ||
|
|
600
|
+
(target.type === 'hidden' &&
|
|
601
|
+
target.name === 'system / HeapNumber')) {
|
|
602
|
+
val =
|
|
603
|
+
target.self_size === 0
|
|
604
|
+
? 'smi'
|
|
605
|
+
: formatBytes(target.self_size);
|
|
606
|
+
}
|
|
607
|
+
else {
|
|
608
|
+
val = target.name;
|
|
609
|
+
}
|
|
610
|
+
configPairs.push({ key: eName, value: val });
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
};
|
|
614
|
+
scanNode(node);
|
|
615
|
+
// Also check owner object for config props
|
|
616
|
+
if (node.hasPathEdge) {
|
|
617
|
+
const pathEdge = node.pathEdge;
|
|
618
|
+
if (pathEdge)
|
|
619
|
+
scanNode(pathEdge.fromNode);
|
|
620
|
+
}
|
|
621
|
+
if (selfReportedSize >= 0 &&
|
|
622
|
+
c.retainedSize > selfReportedSize * 5 &&
|
|
623
|
+
c.retainedSize > 1024 * 1024) {
|
|
624
|
+
mismatchAlerts.push(`⚠️ **@${c.nodeId} \`${c.collectionType}\`:** self-reported \`${selfReportedProp}\` tracks ~${formatBytes(selfReportedSize)} but actual retained size is **${formatBytes(c.retainedSize)}** (${Math.round(c.retainedSize / Math.max(selfReportedSize, 1))}×). The cache likely tracks serialized/compressed size but stores deserialized V8 objects that consume far more heap.`);
|
|
625
|
+
}
|
|
626
|
+
if (configPairs.length > 0) {
|
|
627
|
+
const configStr = configPairs
|
|
628
|
+
.map(p => `${p.key}=${p.value}`)
|
|
629
|
+
.join(', ');
|
|
630
|
+
configAlerts.push(`- @${c.nodeId} \`${c.collectionType}\`: ${configStr}`);
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
if (mismatchAlerts.length > 0) {
|
|
634
|
+
lines.push('', '---', '', '## Byte-Tracking Mismatch', '', 'Caches where the self-reported size property significantly underestimates actual heap retention:', '');
|
|
635
|
+
lines.push(...mismatchAlerts);
|
|
636
|
+
lines.push('', '_This happens when a cache tracks serialized/compressed blob size but stores deserialized V8 objects. Fix: track retained object count or V8 heap cost instead of blob bytes._');
|
|
637
|
+
}
|
|
638
|
+
if (configAlerts.length > 0) {
|
|
639
|
+
lines.push('', '---', '', '## Cache Configuration', '');
|
|
640
|
+
lines.push(...configAlerts);
|
|
641
|
+
lines.push('');
|
|
642
|
+
}
|
|
318
643
|
if (sample_entries > 0) {
|
|
319
644
|
lines.push('', '---', '');
|
|
320
645
|
for (const c of caches.slice(0, 5)) {
|
|
@@ -325,12 +650,104 @@ export function registerCacheAnalysis(server) {
|
|
|
325
650
|
if (samples.length === 0)
|
|
326
651
|
continue;
|
|
327
652
|
lines.push(`**@${c.nodeId} \`${c.collectionType}\` sample entries (${samples.length} of ${formatNumber(c.entryCount)}):**`);
|
|
328
|
-
|
|
329
|
-
|
|
653
|
+
if (compact_samples) {
|
|
654
|
+
for (const s of samples) {
|
|
655
|
+
const compactKey = s.keyPreview.length > 30
|
|
656
|
+
? s.keyPreview.slice(0, 27) + '...'
|
|
657
|
+
: s.keyPreview;
|
|
658
|
+
const compactVal = s.valuePreview.length > 50
|
|
659
|
+
? s.valuePreview.slice(0, 47) + '...'
|
|
660
|
+
: s.valuePreview;
|
|
661
|
+
lines.push(` - ${compactKey} → ${compactVal}`);
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
else {
|
|
665
|
+
for (const s of samples) {
|
|
666
|
+
lines.push(` - ${s.keyPreview} → ${s.valuePreview}`);
|
|
667
|
+
}
|
|
330
668
|
}
|
|
331
669
|
lines.push('');
|
|
332
670
|
}
|
|
333
671
|
}
|
|
672
|
+
// Detect structurally identical cache entries
|
|
673
|
+
if (detect_identical_entries) {
|
|
674
|
+
const identicalAlerts = [];
|
|
675
|
+
for (const c of caches.slice(0, 10)) {
|
|
676
|
+
if (c.collectionType === 'Global registry')
|
|
677
|
+
continue;
|
|
678
|
+
const node = snapshot.getNodeById(c.nodeId);
|
|
679
|
+
if (!node)
|
|
680
|
+
continue;
|
|
681
|
+
if (c.collectionType !== 'Map' && c.collectionType !== 'Set')
|
|
682
|
+
continue;
|
|
683
|
+
// Sample entries and compare structural fingerprints
|
|
684
|
+
const entryFingerprints = [];
|
|
685
|
+
for (const edge of node.references) {
|
|
686
|
+
if (edge.name_or_index !== 'table' ||
|
|
687
|
+
edge.toNode.type !== 'array')
|
|
688
|
+
continue;
|
|
689
|
+
const allRefs = [];
|
|
690
|
+
for (const te of edge.toNode.references) {
|
|
691
|
+
allRefs.push(te.toNode);
|
|
692
|
+
}
|
|
693
|
+
// For Maps: entries are key-value pairs
|
|
694
|
+
const step = c.collectionType === 'Map' ? 2 : 1;
|
|
695
|
+
const valOffset = c.collectionType === 'Map' ? 1 : 0;
|
|
696
|
+
for (let i = valOffset; i < allRefs.length && entryFingerprints.length < 10; i += step) {
|
|
697
|
+
const val = allRefs[i];
|
|
698
|
+
if (val.id <= 3 || val.type === 'hidden')
|
|
699
|
+
continue;
|
|
700
|
+
if (val.name === 'undefined' || val.name === 'the_hole')
|
|
701
|
+
continue;
|
|
702
|
+
let arrayLength = -1;
|
|
703
|
+
let childCount = 0;
|
|
704
|
+
for (const ve of val.references) {
|
|
705
|
+
childCount++;
|
|
706
|
+
if (ve.type === 'property' &&
|
|
707
|
+
ve.toNode.name === 'Array' &&
|
|
708
|
+
ve.toNode.type === 'object') {
|
|
709
|
+
arrayLength = ve.toNode.edge_count;
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
entryFingerprints.push({
|
|
713
|
+
arrayLength,
|
|
714
|
+
retainedSize: val.retainedSize,
|
|
715
|
+
childCount,
|
|
716
|
+
});
|
|
717
|
+
}
|
|
718
|
+
break;
|
|
719
|
+
}
|
|
720
|
+
if (entryFingerprints.length < 2)
|
|
721
|
+
continue;
|
|
722
|
+
// Check if entries are structurally similar
|
|
723
|
+
const ref = entryFingerprints[0];
|
|
724
|
+
let identicalCount = 0;
|
|
725
|
+
const sizeThreshold = ref.retainedSize * 0.1; // 10% tolerance
|
|
726
|
+
for (let i = 1; i < entryFingerprints.length; i++) {
|
|
727
|
+
const fp = entryFingerprints[i];
|
|
728
|
+
const sizeSimilar = Math.abs(fp.retainedSize - ref.retainedSize) < sizeThreshold;
|
|
729
|
+
const structSimilar = fp.arrayLength === ref.arrayLength &&
|
|
730
|
+
fp.arrayLength > 0 &&
|
|
731
|
+
fp.childCount === ref.childCount;
|
|
732
|
+
if (sizeSimilar && structSimilar) {
|
|
733
|
+
identicalCount++;
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
if (identicalCount >= 2 ||
|
|
737
|
+
(entryFingerprints.length <= 5 &&
|
|
738
|
+
identicalCount === entryFingerprints.length - 1)) {
|
|
739
|
+
const totalIdentical = identicalCount + 1;
|
|
740
|
+
const perEntry = ref.retainedSize;
|
|
741
|
+
identicalAlerts.push(`⚠️ **@${c.nodeId} \`${c.collectionType}\`:** ${totalIdentical} entries appear structurally identical (~${formatBytes(perEntry)} each, array length ${ref.arrayLength}). ` +
|
|
742
|
+
`Consider caching once instead of per-key — potential savings: ~${formatBytes(perEntry * (totalIdentical - 1))}.`);
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
if (identicalAlerts.length > 0) {
|
|
746
|
+
lines.push('', '---', '', '## Identical Cache Entries Detected', '');
|
|
747
|
+
lines.push(...identicalAlerts);
|
|
748
|
+
lines.push('', '_Entries have matching array lengths, child counts, and retained sizes. The cache key may not affect the cached data — consider deduplicating._');
|
|
749
|
+
}
|
|
750
|
+
}
|
|
334
751
|
return toolResult(lines.join('\n'));
|
|
335
752
|
}
|
|
336
753
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-analysis.js","sourceRoot":"","sources":["../../src/tools/cache-analysis.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cache-analysis.js","sourceRoot":"","sources":["../../src/tools/cache-analysis.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-health.d.ts","sourceRoot":"","sources":["../../src/tools/check-health.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAavE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"check-health.d.ts","sourceRoot":"","sources":["../../src/tools/check-health.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAavE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4nB3D"}
|