@memlab/mcp-server 2.3.0 → 2.52.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 +18 -14
- package/bin/.eslintrc.js +26 -0
- package/bin/memlab-cli.js +313 -0
- package/dist/artifact-classes.d.ts +86 -0
- package/dist/artifact-classes.d.ts.map +1 -0
- package/dist/artifact-classes.js +261 -0
- package/dist/artifact-classes.js.map +1 -0
- package/dist/capture-mode.d.ts +60 -0
- package/dist/capture-mode.d.ts.map +1 -0
- package/dist/capture-mode.js +39 -0
- package/dist/capture-mode.js.map +1 -0
- package/dist/guardrail.d.ts.map +1 -1
- package/dist/guardrail.js +13 -0
- package/dist/guardrail.js.map +1 -1
- package/dist/heap-state.d.ts +96 -2
- package/dist/heap-state.d.ts.map +1 -1
- package/dist/heap-state.js +197 -2
- package/dist/heap-state.js.map +1 -1
- package/dist/index.js +41 -1
- package/dist/index.js.map +1 -1
- package/dist/progress.d.ts +25 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +46 -0
- package/dist/progress.js.map +1 -0
- package/dist/result-handles.d.ts +11 -0
- package/dist/result-handles.d.ts.map +1 -0
- package/dist/result-handles.js +77 -0
- package/dist/result-handles.js.map +1 -0
- package/dist/string-index.d.ts +55 -0
- package/dist/string-index.d.ts.map +1 -0
- package/dist/string-index.js +91 -0
- package/dist/string-index.js.map +1 -0
- package/dist/tool-registry.d.ts +42 -0
- package/dist/tool-registry.d.ts.map +1 -0
- package/dist/tool-registry.js +20 -0
- package/dist/tool-registry.js.map +1 -0
- package/dist/tools/analyze-run.d.ts +12 -0
- package/dist/tools/analyze-run.d.ts.map +1 -0
- package/dist/tools/analyze-run.js +343 -0
- package/dist/tools/analyze-run.js.map +1 -0
- package/dist/tools/app-heap.d.ts +12 -0
- package/dist/tools/app-heap.d.ts.map +1 -0
- package/dist/tools/app-heap.js +140 -0
- package/dist/tools/app-heap.js.map +1 -0
- package/dist/tools/auto-investigate.d.ts.map +1 -1
- package/dist/tools/auto-investigate.js +91 -49
- package/dist/tools/auto-investigate.js.map +1 -1
- package/dist/tools/batch.d.ts +12 -0
- package/dist/tools/batch.d.ts.map +1 -0
- package/dist/tools/batch.js +168 -0
- package/dist/tools/batch.js.map +1 -0
- package/dist/tools/cache-analysis.d.ts.map +1 -1
- package/dist/tools/cache-analysis.js +156 -5
- package/dist/tools/cache-analysis.js.map +1 -1
- package/dist/tools/class-histogram.d.ts.map +1 -1
- package/dist/tools/class-histogram.js +14 -3
- package/dist/tools/class-histogram.js.map +1 -1
- package/dist/tools/collection-trend.d.ts +55 -0
- package/dist/tools/collection-trend.d.ts.map +1 -0
- package/dist/tools/collection-trend.js +315 -0
- package/dist/tools/collection-trend.js.map +1 -0
- package/dist/tools/detached-dom.d.ts +2 -0
- package/dist/tools/detached-dom.d.ts.map +1 -1
- package/dist/tools/detached-dom.js +291 -20
- package/dist/tools/detached-dom.js.map +1 -1
- package/dist/tools/dev-artifacts.d.ts +62 -6
- package/dist/tools/dev-artifacts.d.ts.map +1 -1
- package/dist/tools/dev-artifacts.js +466 -23
- package/dist/tools/dev-artifacts.js.map +1 -1
- package/dist/tools/diff-snapshots.d.ts.map +1 -1
- package/dist/tools/diff-snapshots.js +101 -44
- package/dist/tools/diff-snapshots.js.map +1 -1
- package/dist/tools/dominator-attribution.d.ts +12 -0
- package/dist/tools/dominator-attribution.d.ts.map +1 -0
- package/dist/tools/dominator-attribution.js +189 -0
- package/dist/tools/dominator-attribution.js.map +1 -0
- package/dist/tools/dominator-chain.d.ts +12 -0
- package/dist/tools/dominator-chain.d.ts.map +1 -0
- package/dist/tools/dominator-chain.js +92 -0
- package/dist/tools/dominator-chain.js.map +1 -0
- package/dist/tools/duplicate-objects.d.ts +12 -0
- package/dist/tools/duplicate-objects.d.ts.map +1 -0
- package/dist/tools/duplicate-objects.js +172 -0
- package/dist/tools/duplicate-objects.js.map +1 -0
- package/dist/tools/duplicated-strings.d.ts.map +1 -1
- package/dist/tools/duplicated-strings.js +46 -38
- package/dist/tools/duplicated-strings.js.map +1 -1
- package/dist/tools/eval.d.ts +1 -0
- package/dist/tools/eval.d.ts.map +1 -1
- package/dist/tools/eval.js +787 -30
- package/dist/tools/eval.js.map +1 -1
- package/dist/tools/explain-delta.d.ts +12 -0
- package/dist/tools/explain-delta.d.ts.map +1 -0
- package/dist/tools/explain-delta.js +170 -0
- package/dist/tools/explain-delta.js.map +1 -0
- package/dist/tools/find-nodes-by-class.d.ts.map +1 -1
- package/dist/tools/find-nodes-by-class.js +112 -13
- package/dist/tools/find-nodes-by-class.js.map +1 -1
- package/dist/tools/finding-index.d.ts +22 -0
- package/dist/tools/finding-index.d.ts.map +1 -0
- package/dist/tools/finding-index.js +247 -0
- package/dist/tools/finding-index.js.map +1 -0
- package/dist/tools/for-each.d.ts.map +1 -1
- package/dist/tools/for-each.js +15 -3
- package/dist/tools/for-each.js.map +1 -1
- package/dist/tools/get-references.d.ts.map +1 -1
- package/dist/tools/get-references.js +35 -6
- package/dist/tools/get-references.js.map +1 -1
- package/dist/tools/get-referrers.d.ts.map +1 -1
- package/dist/tools/get-referrers.js +52 -6
- package/dist/tools/get-referrers.js.map +1 -1
- package/dist/tools/hunt-report.d.ts +12 -0
- package/dist/tools/hunt-report.d.ts.map +1 -0
- package/dist/tools/hunt-report.js +186 -0
- package/dist/tools/hunt-report.js.map +1 -0
- package/dist/tools/hypothesis.d.ts +12 -0
- package/dist/tools/hypothesis.d.ts.map +1 -0
- package/dist/tools/hypothesis.js +221 -0
- package/dist/tools/hypothesis.js.map +1 -0
- package/dist/tools/intern-opportunities.d.ts.map +1 -1
- package/dist/tools/intern-opportunities.js +721 -75
- package/dist/tools/intern-opportunities.js.map +1 -1
- package/dist/tools/ladder.d.ts +33 -0
- package/dist/tools/ladder.d.ts.map +1 -0
- package/dist/tools/ladder.js +266 -0
- package/dist/tools/ladder.js.map +1 -0
- package/dist/tools/largest-objects.d.ts.map +1 -1
- package/dist/tools/largest-objects.js +43 -16
- package/dist/tools/largest-objects.js.map +1 -1
- package/dist/tools/leak-report.d.ts +12 -0
- package/dist/tools/leak-report.d.ts.map +1 -0
- package/dist/tools/leak-report.js +256 -0
- package/dist/tools/leak-report.js.map +1 -0
- package/dist/tools/load-snapshot.d.ts +78 -0
- package/dist/tools/load-snapshot.d.ts.map +1 -1
- package/dist/tools/load-snapshot.js +519 -29
- package/dist/tools/load-snapshot.js.map +1 -1
- package/dist/tools/map-entries.d.ts +12 -0
- package/dist/tools/map-entries.d.ts.map +1 -0
- package/dist/tools/map-entries.js +139 -0
- package/dist/tools/map-entries.js.map +1 -0
- package/dist/tools/match-object.d.ts +12 -0
- package/dist/tools/match-object.d.ts.map +1 -0
- package/dist/tools/match-object.js +165 -0
- package/dist/tools/match-object.js.map +1 -0
- package/dist/tools/object-shape.d.ts.map +1 -1
- package/dist/tools/object-shape.js +92 -30
- package/dist/tools/object-shape.js.map +1 -1
- package/dist/tools/population-diff.d.ts +57 -0
- package/dist/tools/population-diff.d.ts.map +1 -0
- package/dist/tools/population-diff.js +338 -0
- package/dist/tools/population-diff.js.map +1 -0
- package/dist/tools/quick-diagnosis.d.ts.map +1 -1
- package/dist/tools/quick-diagnosis.js +12 -4
- package/dist/tools/quick-diagnosis.js.map +1 -1
- package/dist/tools/retainer-layers.d.ts +23 -0
- package/dist/tools/retainer-layers.d.ts.map +1 -0
- package/dist/tools/retainer-layers.js +179 -0
- package/dist/tools/retainer-layers.js.map +1 -0
- package/dist/tools/retainer-summary.d.ts +1 -0
- package/dist/tools/retainer-summary.d.ts.map +1 -1
- package/dist/tools/retainer-summary.js +128 -32
- 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 +105 -25
- 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 +5 -1
- package/dist/tools/search-nodes.js.map +1 -1
- package/dist/tools/search-strings.d.ts.map +1 -1
- package/dist/tools/search-strings.js +53 -7
- package/dist/tools/search-strings.js.map +1 -1
- package/dist/tools/sequence-analysis.d.ts +49 -0
- package/dist/tools/sequence-analysis.d.ts.map +1 -1
- package/dist/tools/sequence-analysis.js +268 -78
- package/dist/tools/sequence-analysis.js.map +1 -1
- package/dist/tools/shape-histogram.d.ts.map +1 -1
- package/dist/tools/shape-histogram.js +9 -2
- 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 +22 -4
- package/dist/tools/sliced-strings.js.map +1 -1
- package/dist/tools/snapshot-header.d.ts +28 -0
- package/dist/tools/snapshot-header.d.ts.map +1 -0
- package/dist/tools/snapshot-header.js +111 -0
- package/dist/tools/snapshot-header.js.map +1 -0
- package/dist/tools/string-patterns.d.ts.map +1 -1
- package/dist/tools/string-patterns.js +5 -4
- package/dist/tools/string-patterns.js.map +1 -1
- package/dist/tools/tools-index.d.ts +12 -0
- package/dist/tools/tools-index.d.ts.map +1 -0
- package/dist/tools/tools-index.js +342 -0
- package/dist/tools/tools-index.js.map +1 -0
- package/dist/tools/verify-fix.d.ts +23 -0
- package/dist/tools/verify-fix.d.ts.map +1 -0
- package/dist/tools/verify-fix.js +211 -0
- package/dist/tools/verify-fix.js.map +1 -0
- package/dist/tools/weakmap-entries.d.ts.map +1 -1
- package/dist/tools/weakmap-entries.js +6 -1
- package/dist/tools/weakmap-entries.js.map +1 -1
- package/dist/utils.d.ts +204 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +478 -8
- package/dist/utils.js.map +1 -1
- package/package.json +5 -4
|
@@ -0,0 +1,179 @@
|
|
|
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 } from '../heap-state.js';
|
|
12
|
+
import { errorResult, formatBytes, formatNumber, isNodeWorthInspecting, markdownTable, toolResult, truncateNodeName, } from '../utils.js';
|
|
13
|
+
/**
|
|
14
|
+
* Reachability from the synthetic GC roots with one node treated as a sink:
|
|
15
|
+
* `blocked` is marked reached (so it is not reported as unreachable) but its
|
|
16
|
+
* outgoing edges are never followed. Anything left unmarked is reachable ONLY
|
|
17
|
+
* through `blocked`, i.e. it lives inside that node's retained subtree.
|
|
18
|
+
*
|
|
19
|
+
* Mirrors `computeReachableWithoutDevRoots` in dev-artifacts.ts, which does the
|
|
20
|
+
* same walk with the dev/automation roots as sinks.
|
|
21
|
+
*/
|
|
22
|
+
export function computeReachableWithoutNode(snapshot, blockedId) {
|
|
23
|
+
const reached = new Uint8Array(snapshot.nodes.length);
|
|
24
|
+
const stack = [];
|
|
25
|
+
snapshot.nodes.forEach((node) => {
|
|
26
|
+
if (node.type !== 'synthetic' && node.id > 3)
|
|
27
|
+
return;
|
|
28
|
+
if (reached[node.nodeIndex])
|
|
29
|
+
return;
|
|
30
|
+
reached[node.nodeIndex] = 1;
|
|
31
|
+
if (node.id !== blockedId)
|
|
32
|
+
stack.push(node);
|
|
33
|
+
});
|
|
34
|
+
while (stack.length > 0) {
|
|
35
|
+
const node = stack.pop();
|
|
36
|
+
node.forEachReference((edge) => {
|
|
37
|
+
const to = edge.toNode;
|
|
38
|
+
if (reached[to.nodeIndex])
|
|
39
|
+
return;
|
|
40
|
+
reached[to.nodeIndex] = 1;
|
|
41
|
+
if (to.id !== blockedId)
|
|
42
|
+
stack.push(to);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return reached;
|
|
46
|
+
}
|
|
47
|
+
function groupKey(g) {
|
|
48
|
+
return `${g.fromType}\u0000${g.fromName}\u0000${g.edgeType}\u0000${g.edgeName}`;
|
|
49
|
+
}
|
|
50
|
+
export function registerRetainerLayers(server) {
|
|
51
|
+
server.tool('memlab_retainer_layers', 'Counterfactual retainer analysis: answer "if I cut this edge, would the object still be retained, and by what?". ' +
|
|
52
|
+
"Enumerates the INDEPENDENT retaining edges into a node — the incoming edges whose source is still reachable from a GC root when the target itself is treated as a sink — so back-edges from inside the target's own retained subtree are excluded. " +
|
|
53
|
+
'The object becomes unreachable only when ALL independent retainers are cut, so a count above 1 means any single fix leaves it retained by the others. ' +
|
|
54
|
+
'Use this BEFORE writing a fix: memlab_retainer_trace and memlab_detached_dom --group_by retainer each report ONE path/grouping, which is why a stack of caches holding the same object looks like a single retainer and a partial fix reports a misleading win. ' +
|
|
55
|
+
'Complements memlab_dominator_chain (accountability chain upward) and memlab_retainer_trace (one shortest path).', {
|
|
56
|
+
node_id: z
|
|
57
|
+
.number()
|
|
58
|
+
.int()
|
|
59
|
+
.describe('The numeric ID of the heap node to analyze'),
|
|
60
|
+
max_retainers: z
|
|
61
|
+
.number()
|
|
62
|
+
.int()
|
|
63
|
+
.min(1)
|
|
64
|
+
.optional()
|
|
65
|
+
.default(20)
|
|
66
|
+
.describe('Maximum number of distinct retainer groups to list (default 20). Grouping is by (source class, source type, edge name, edge type).'),
|
|
67
|
+
}, async ({ node_id, max_retainers }) => {
|
|
68
|
+
try {
|
|
69
|
+
const snapshot = getSnapshot();
|
|
70
|
+
const target = snapshot.getNodeById(node_id);
|
|
71
|
+
if (!target) {
|
|
72
|
+
return errorResult(`Node with id ${node_id} not found`);
|
|
73
|
+
}
|
|
74
|
+
const reached = computeReachableWithoutNode(snapshot, target.id);
|
|
75
|
+
// Partition incoming edges into independent retainers (source still
|
|
76
|
+
// reachable with the target blocked) and internal back-edges (source
|
|
77
|
+
// only reachable through the target).
|
|
78
|
+
const groups = new Map();
|
|
79
|
+
let independentEdgeCount = 0;
|
|
80
|
+
let backEdgeCount = 0;
|
|
81
|
+
for (const edge of target.referrers) {
|
|
82
|
+
const from = edge.fromNode;
|
|
83
|
+
// A self-edge (V8 emits them for DOM nodes) cannot retain the target,
|
|
84
|
+
// but the sink walk marks the target itself reached so it would
|
|
85
|
+
// otherwise pass the test below. Count it with the back-edges.
|
|
86
|
+
if (from.id === target.id || !reached[from.nodeIndex]) {
|
|
87
|
+
backEdgeCount++;
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
independentEdgeCount++;
|
|
91
|
+
const g = {
|
|
92
|
+
fromName: from.name,
|
|
93
|
+
fromType: from.type,
|
|
94
|
+
edgeName: String(edge.name_or_index),
|
|
95
|
+
edgeType: edge.type,
|
|
96
|
+
};
|
|
97
|
+
const key = groupKey(g);
|
|
98
|
+
const existing = groups.get(key);
|
|
99
|
+
if (existing) {
|
|
100
|
+
existing.count++;
|
|
101
|
+
if (from.retainedSize > existing.maxRetained) {
|
|
102
|
+
existing.maxRetained = from.retainedSize;
|
|
103
|
+
existing.exampleFromId = from.id;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
groups.set(key, {
|
|
108
|
+
...g,
|
|
109
|
+
count: 1,
|
|
110
|
+
exampleFromId: from.id,
|
|
111
|
+
maxRetained: from.retainedSize,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const sorted = [...groups.values()].sort((a, b) => b.maxRetained - a.maxRetained || b.count - a.count);
|
|
116
|
+
const shown = sorted.slice(0, max_retainers);
|
|
117
|
+
const targetLabel = truncateNodeName(target.name, target.type, target.self_size, 60);
|
|
118
|
+
const lines = [
|
|
119
|
+
`## Retainer layers for @${target.id} (${targetLabel})`,
|
|
120
|
+
'',
|
|
121
|
+
`Retained ${formatBytes(target.retainedSize)}. ` +
|
|
122
|
+
`${formatNumber(independentEdgeCount)} independent retaining edge(s) in ${formatNumber(sorted.length)} group(s)` +
|
|
123
|
+
(backEdgeCount > 0
|
|
124
|
+
? `; ${formatNumber(backEdgeCount)} back-edge(s) from inside its own retained subtree excluded.`
|
|
125
|
+
: '.'),
|
|
126
|
+
'',
|
|
127
|
+
];
|
|
128
|
+
if (independentEdgeCount === 0) {
|
|
129
|
+
lines.push(target.type === 'synthetic' || target.id <= 3
|
|
130
|
+
? '**This node is a GC root itself** — it has no external retainer to cut.'
|
|
131
|
+
: "**No independent retainer found.** Nothing outside this object's own subtree references it, so it is already GC-eligible (or reachable only via weak references). It should not be counted toward a leak total — see `memlab_detached_dom --only_with_retainer_path`.");
|
|
132
|
+
return toolResult(lines.join('\n'));
|
|
133
|
+
}
|
|
134
|
+
// The counterfactual verdict. Cutting one independent edge cannot change
|
|
135
|
+
// the reachability of any other independent source, because every such
|
|
136
|
+
// source is reachable on a path that does not pass through the target.
|
|
137
|
+
if (independentEdgeCount === 1) {
|
|
138
|
+
const only = sorted[0];
|
|
139
|
+
lines.push(`**Sole retainer — cutting it frees the object.** \`${only.edgeName}\` (${only.edgeType}) from @${only.exampleFromId} ${only.fromName} (${only.fromType}). ` +
|
|
140
|
+
`Fixing this one reference reclaims ${formatBytes(target.retainedSize)}.`, '');
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
lines.push(`**${formatNumber(independentEdgeCount)} independent retainers — cutting any ONE leaves the object retained by the other ${formatNumber(independentEdgeCount - 1)}.** ` +
|
|
144
|
+
'A fix that removes a single one of these will show little or no memory win, and a before/after measurement that attributes the whole object to the removed retainer will overstate the result. ' +
|
|
145
|
+
'All of them must be cut to reclaim the object.', '');
|
|
146
|
+
}
|
|
147
|
+
lines.push(markdownTable(['#', 'edges', 'from', 'edge', 'example', 'source retains'], shown.map((g, i) => [
|
|
148
|
+
String(i + 1),
|
|
149
|
+
formatNumber(g.count),
|
|
150
|
+
`${g.fromName} (${g.fromType})`,
|
|
151
|
+
`${g.edgeName} (${g.edgeType})`,
|
|
152
|
+
`@${g.exampleFromId}`,
|
|
153
|
+
formatBytes(g.maxRetained),
|
|
154
|
+
])));
|
|
155
|
+
if (sorted.length > shown.length) {
|
|
156
|
+
lines.push('', `_${formatNumber(sorted.length - shown.length)} more retainer group(s) not shown — raise max_retainers to see them._`);
|
|
157
|
+
}
|
|
158
|
+
// A dominator that is not the GC-roots super-node means every path to
|
|
159
|
+
// the target passes through it, so it is a single choke point even when
|
|
160
|
+
// several independent edges exist.
|
|
161
|
+
const dom = target.dominatorNode;
|
|
162
|
+
if (independentEdgeCount > 1 &&
|
|
163
|
+
dom &&
|
|
164
|
+
dom.id !== target.id &&
|
|
165
|
+
dom.name !== '(GC roots)' &&
|
|
166
|
+
isNodeWorthInspecting(dom)) {
|
|
167
|
+
lines.push('', `**Single choke point:** every path still passes through the immediate dominator @${dom.id} ${truncateNodeName(dom.name, dom.type, dom.self_size, 60)} (retains ${formatBytes(dom.retainedSize)}). ` +
|
|
168
|
+
'Cutting there frees the target in one change instead of cutting each retainer. Use `memlab_dominator_chain` to walk further up.');
|
|
169
|
+
}
|
|
170
|
+
lines.push('', '_Independence test: an incoming edge counts only if its source is still reachable from a GC root when the target is treated as a sink. ' +
|
|
171
|
+
"Edges failing that test originate inside the target's own retained subtree and cannot keep it alive._");
|
|
172
|
+
return toolResult(lines.join('\n'));
|
|
173
|
+
}
|
|
174
|
+
catch (err) {
|
|
175
|
+
return errorResult(err);
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=retainer-layers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retainer-layers.js","sourceRoot":"","sources":["../../src/tools/retainer-layers.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,5 +8,6 @@
|
|
|
8
8
|
* @oncall memory_lab
|
|
9
9
|
*/
|
|
10
10
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
11
|
+
export declare const COMPACT_GAP_MARKER = "\u22EF";
|
|
11
12
|
export declare function registerRetainerSummary(server: McpServer): void;
|
|
12
13
|
//# sourceMappingURL=retainer-summary.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retainer-summary.d.ts","sourceRoot":"","sources":["../../src/tools/retainer-summary.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"retainer-summary.d.ts","sourceRoot":"","sources":["../../src/tools/retainer-summary.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAwIvE,eAAO,MAAM,kBAAkB,WAAM,CAAC;AAgDtC,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqb/D"}
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { z } from 'zod';
|
|
11
11
|
import { getSnapshot } from '../heap-state.js';
|
|
12
|
-
import {
|
|
12
|
+
import { resolveSavedNodeIds } from '../result-handles.js';
|
|
13
|
+
import { collapseRepeatedLabels, filterLargestObjects, formatBytes, truncateDomToTag, errorResult, toolResult, } from '../utils.js';
|
|
13
14
|
const FRAMEWORK_PATTERNS = new Set([
|
|
14
15
|
'system / Context',
|
|
15
16
|
'system / PromiseReaction',
|
|
@@ -67,6 +68,18 @@ function getRetainerTrace(node) {
|
|
|
67
68
|
function normalizeEdgeName(name) {
|
|
68
69
|
return /^\d+$/.test(name) ? '*' : name;
|
|
69
70
|
}
|
|
71
|
+
// V8 suffixes per-instance node ids onto some internal names (e.g.
|
|
72
|
+
// "system / Context / scope @2548323"). Those ids differ per instance, so two
|
|
73
|
+
// traces through the SAME structural path produce different keys and are
|
|
74
|
+
// reported as separate "distinct retainer patterns" whose rendered paths are
|
|
75
|
+
// byte-for-byte identical — observed as "6 distinct retainer patterns found"
|
|
76
|
+
// followed by six indistinguishable blocks. Normalize the id out of the
|
|
77
|
+
// grouping key so structurally identical paths collapse into one row with a
|
|
78
|
+
// real N/M count. Display still uses the concrete name from a representative
|
|
79
|
+
// instance, so nothing is lost.
|
|
80
|
+
function normalizeStepName(name) {
|
|
81
|
+
return name.replace(/ @\d+\b/g, ' @…');
|
|
82
|
+
}
|
|
70
83
|
function traceToKey(steps, frameworkFilter) {
|
|
71
84
|
const filtered = frameworkFilter
|
|
72
85
|
? steps.filter((s, i) => i === 0 || i === steps.length - 1 || !isFrameworkStep(s))
|
|
@@ -74,7 +87,7 @@ function traceToKey(steps, frameworkFilter) {
|
|
|
74
87
|
return filtered
|
|
75
88
|
.map(s => {
|
|
76
89
|
const edge = s.edgeName != null ? `--${normalizeEdgeName(s.edgeName)}-->` : '';
|
|
77
|
-
return `${s.name}(${s.type})${edge}`;
|
|
90
|
+
return `${normalizeStepName(s.name)}(${s.type})${edge}`;
|
|
78
91
|
})
|
|
79
92
|
.join(' ');
|
|
80
93
|
}
|
|
@@ -95,33 +108,59 @@ function shortenPath(name) {
|
|
|
95
108
|
return `…/${dir}/${fileName}`;
|
|
96
109
|
}
|
|
97
110
|
function formatTraceChain(steps) {
|
|
98
|
-
|
|
111
|
+
// Fold runs of identical `Name (type) --edge-->` hops. A linked structure
|
|
112
|
+
// (e.g. a React update queue's `.next` chain) otherwise renders hundreds of
|
|
113
|
+
// byte-identical hops, which is pure token cost.
|
|
114
|
+
const hops = [];
|
|
99
115
|
for (let i = 0; i < steps.length; i++) {
|
|
100
116
|
const s = steps[i];
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
parts.push(` --${s.edgeName}--> `);
|
|
104
|
-
}
|
|
117
|
+
const edge = s.edgeName != null && i < steps.length - 1 ? ` --${s.edgeName}--> ` : '';
|
|
118
|
+
hops.push(`${s.name} (${s.type})${edge}`);
|
|
105
119
|
}
|
|
106
|
-
return
|
|
120
|
+
return collapseRepeatedLabels(hops).join('');
|
|
107
121
|
}
|
|
122
|
+
// Marks hops the framework filter removed between two rendered nodes, so a
|
|
123
|
+
// compacted chain never implies that two nodes are directly connected when they
|
|
124
|
+
// are not.
|
|
125
|
+
export const COMPACT_GAP_MARKER = '⋯';
|
|
126
|
+
/**
|
|
127
|
+
* Compact retainer chain.
|
|
128
|
+
*
|
|
129
|
+
* Compact mode used to render node names ONLY and drop every edge name. That is
|
|
130
|
+
* backwards: the edge name is usually the finding. A measured case collapsed to
|
|
131
|
+
* `Object ×3` and silently discarded `.memoizedState` and `.undoStack` — the two
|
|
132
|
+
* properties that identified the leak — and recovering them cost a full snapshot
|
|
133
|
+
* reload. So edge names are never elided here; repetition is collapsed on the
|
|
134
|
+
* NODE+edge pair instead, which still folds a genuinely repetitive `.next ×12`
|
|
135
|
+
* linked-list walk while keeping two different properties distinct.
|
|
136
|
+
*/
|
|
108
137
|
function formatTraceChainCompact(steps, frameworkFilter) {
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
138
|
+
const keep = [];
|
|
139
|
+
for (let i = 0; i < steps.length; i++) {
|
|
140
|
+
if (!frameworkFilter ||
|
|
141
|
+
i === 0 ||
|
|
142
|
+
i === steps.length - 1 ||
|
|
143
|
+
!isFrameworkStep(steps[i])) {
|
|
144
|
+
keep.push(i);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
112
147
|
const parts = [];
|
|
113
|
-
for (let
|
|
114
|
-
const
|
|
148
|
+
for (let k = 0; k < keep.length; k++) {
|
|
149
|
+
const i = keep[k];
|
|
150
|
+
const s = steps[i];
|
|
115
151
|
const name = shortenPath(s.name);
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
|
|
152
|
+
const isEnd = k === 0 || k === keep.length - 1;
|
|
153
|
+
const suffix = isEnd && s.type === 'closure' ? '()' : '';
|
|
154
|
+
// The property on THIS node that holds the next hop.
|
|
155
|
+
const edge = k < keep.length - 1 && s.edgeName != null ? `.${s.edgeName}` : '';
|
|
156
|
+
parts.push(`${name}${suffix}${edge}`);
|
|
157
|
+
// A filtered-out run between this hop and the next is an elision and must
|
|
158
|
+
// be visible; it also stops a run-collapse from spanning the gap.
|
|
159
|
+
if (k < keep.length - 1 && keep[k + 1] !== i + 1) {
|
|
160
|
+
parts.push(COMPACT_GAP_MARKER);
|
|
122
161
|
}
|
|
123
162
|
}
|
|
124
|
-
return parts.join(' → ');
|
|
163
|
+
return collapseRepeatedLabels(parts).join(' → ');
|
|
125
164
|
}
|
|
126
165
|
export function registerRetainerSummary(server) {
|
|
127
166
|
server.tool('memlab_retainer_summary', 'Trace retainer paths for multiple instances of a class (or a specific set of node IDs) and group by common patterns. Instead of tracing one node at a time, this samples N instances and shows how many share each retainer path pattern. Essential for confirming whether leaked objects share a single root cause. Use node_ids to cluster retainer patterns for specific nodes (e.g., example_node_ids from duplicated_strings). Set compact=true for abbreviated paths that use 50-70% fewer tokens.', {
|
|
@@ -140,6 +179,10 @@ export function registerRetainerSummary(server) {
|
|
|
140
179
|
'Use instead of class_name when constructor is "Object" and you know the property ' +
|
|
141
180
|
'structure (e.g., ["callback", "context"]). Matches the {prop1, prop2} naming ' +
|
|
142
181
|
'from shape_histogram output.'),
|
|
182
|
+
from_result: z
|
|
183
|
+
.string()
|
|
184
|
+
.optional()
|
|
185
|
+
.describe('Read the node ids from a result saved by memlab_eval ({save_as} / helpers.save) instead of listing them.'),
|
|
143
186
|
node_ids: z
|
|
144
187
|
.array(z.number())
|
|
145
188
|
.optional()
|
|
@@ -170,14 +213,21 @@ export function registerRetainerSummary(server) {
|
|
|
170
213
|
.describe('For each sampled node, also show its direct property edges (name -> target type/name). ' +
|
|
171
214
|
'Combines "where is it retained?" with "what does it contain?" in one call. ' +
|
|
172
215
|
'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, }) => {
|
|
216
|
+
}, async ({ class_name, name_prefix, shape, node_ids, sample, max_depth, compact, framework_filter, include_properties, from_result, }) => {
|
|
174
217
|
try {
|
|
175
218
|
const snapshot = getSnapshot();
|
|
176
219
|
let nodes;
|
|
177
220
|
let label;
|
|
178
|
-
|
|
221
|
+
// A saved result stands in for an explicit id list (see
|
|
222
|
+
// result-handles.ts): same code path, ids never printed.
|
|
223
|
+
const effectiveNodeIds = node_ids && node_ids.length > 0
|
|
224
|
+
? node_ids
|
|
225
|
+
: from_result != null
|
|
226
|
+
? resolveSavedNodeIds(from_result)
|
|
227
|
+
: null;
|
|
228
|
+
if (effectiveNodeIds && effectiveNodeIds.length > 0) {
|
|
179
229
|
nodes = [];
|
|
180
|
-
for (const id of
|
|
230
|
+
for (const id of effectiveNodeIds) {
|
|
181
231
|
const node = snapshot.getNodeById(id);
|
|
182
232
|
if (node)
|
|
183
233
|
nodes.push(node);
|
|
@@ -216,7 +266,7 @@ export function registerRetainerSummary(server) {
|
|
|
216
266
|
label = `"${class_name}"`;
|
|
217
267
|
}
|
|
218
268
|
else {
|
|
219
|
-
return errorResult(new Error('Either class_name, name_prefix, shape, or
|
|
269
|
+
return errorResult(new Error('Either class_name, name_prefix, shape, node_ids, or from_result must be provided.'));
|
|
220
270
|
}
|
|
221
271
|
if (nodes.length === 0) {
|
|
222
272
|
const suggestions = [`No objects found for ${label}.`, ''];
|
|
@@ -265,6 +315,7 @@ export function registerRetainerSummary(server) {
|
|
|
265
315
|
}
|
|
266
316
|
}
|
|
267
317
|
const sorted = [...patterns.values()].sort((a, b) => b.count - a.count);
|
|
318
|
+
let patternHeaderIndex = -1;
|
|
268
319
|
const totalSampled = sorted.reduce((s, p) => s + p.count, 0) + noTrace;
|
|
269
320
|
const modifiers = [];
|
|
270
321
|
if (max_depth)
|
|
@@ -287,7 +338,10 @@ export function registerRetainerSummary(server) {
|
|
|
287
338
|
lines.push(`**All ${sorted[0].count} sampled instances share the same retainer pattern** — likely a single root cause.${conf}`, '');
|
|
288
339
|
}
|
|
289
340
|
else {
|
|
290
|
-
|
|
341
|
+
// Filled in after the render-dedup pass below, so the count reflects
|
|
342
|
+
// what is actually printed rather than the raw trace-key count.
|
|
343
|
+
patternHeaderIndex = lines.length;
|
|
344
|
+
lines.push('', '');
|
|
291
345
|
}
|
|
292
346
|
const filterSteps = (steps) => framework_filter
|
|
293
347
|
? steps.filter((s, i) => i === 0 || i === steps.length - 1 || !isFrameworkStep(s))
|
|
@@ -320,17 +374,59 @@ export function registerRetainerSummary(server) {
|
|
|
320
374
|
lines.push(formatFn(prefixSteps));
|
|
321
375
|
lines.push('');
|
|
322
376
|
}
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
377
|
+
// Second dedup pass, on the RENDERED path. Grouping by trace key is not
|
|
378
|
+
// sufficient: the display elides a common prefix, so two patterns whose
|
|
379
|
+
// keys differ only upstream of that prefix render byte-identically and
|
|
380
|
+
// were printed as separate "distinct patterns" — measured as 10 patterns
|
|
381
|
+
// with 1 distinct body. Merge on what the caller actually sees.
|
|
382
|
+
const rendered = sorted.map(p => {
|
|
328
383
|
const displaySteps = commonPrefixLen >= 2
|
|
329
384
|
? getDisplaySteps(p).slice(commonPrefixLen)
|
|
330
385
|
: p.steps;
|
|
331
|
-
|
|
386
|
+
return commonPrefixLen >= 2
|
|
332
387
|
? `… → ${formatFn(displaySteps)}`
|
|
333
|
-
: formatFn(displaySteps)
|
|
388
|
+
: formatFn(displaySteps);
|
|
389
|
+
});
|
|
390
|
+
const merged = [];
|
|
391
|
+
const mergedByBody = new Map();
|
|
392
|
+
for (let i = 0; i < sorted.length; i++) {
|
|
393
|
+
const body = rendered[i];
|
|
394
|
+
const existing = mergedByBody.get(body);
|
|
395
|
+
if (existing) {
|
|
396
|
+
existing.count += sorted[i].count;
|
|
397
|
+
existing.total_retained += sorted[i].total_retained;
|
|
398
|
+
for (const id of sorted[i].example_ids) {
|
|
399
|
+
if (existing.example_ids.length < 3)
|
|
400
|
+
existing.example_ids.push(id);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
else {
|
|
404
|
+
const entry = {
|
|
405
|
+
body,
|
|
406
|
+
count: sorted[i].count,
|
|
407
|
+
total_retained: sorted[i].total_retained,
|
|
408
|
+
example_ids: [...sorted[i].example_ids],
|
|
409
|
+
};
|
|
410
|
+
mergedByBody.set(body, entry);
|
|
411
|
+
merged.push(entry);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
merged.sort((a, b) => b.count - a.count);
|
|
415
|
+
if (patternHeaderIndex >= 0) {
|
|
416
|
+
const collapsedNote = merged.length < sorted.length
|
|
417
|
+
? ` _(${sorted.length} trace keys collapsed to ${merged.length}: they differ only above the common prefix and are identical as shown.)_`
|
|
418
|
+
: '';
|
|
419
|
+
lines[patternHeaderIndex] =
|
|
420
|
+
merged.length === 1
|
|
421
|
+
? `**All ${totalSampled} sampled instances share ONE retainer path** — a single root cause:${collapsedNote}`
|
|
422
|
+
: `**${merged.length} distinct retainer patterns found**${collapsedNote}`;
|
|
423
|
+
}
|
|
424
|
+
for (let i = 0; i < merged.length; i++) {
|
|
425
|
+
const p = merged[i];
|
|
426
|
+
const pct = ((p.count / totalSampled) * 100).toFixed(0);
|
|
427
|
+
lines.push(`### Pattern ${i + 1}: ${p.count}/${totalSampled} instances (${pct}%), ${formatBytes(p.total_retained)} retained`);
|
|
428
|
+
lines.push('');
|
|
429
|
+
lines.push(p.body);
|
|
334
430
|
lines.push('');
|
|
335
431
|
lines.push(`Example nodes: ${p.example_ids.map(id => `@${id}`).join(', ')}`);
|
|
336
432
|
if (include_properties) {
|
|
@@ -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":"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"}
|
|
@@ -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;
|
|
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;AAmCvE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmT7D"}
|