@memlab/mcp-server 2.1.1 → 2.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/README.md +83 -3
  2. package/dist/analysis-budget.d.ts +71 -0
  3. package/dist/analysis-budget.d.ts.map +1 -0
  4. package/dist/analysis-budget.js +118 -0
  5. package/dist/analysis-budget.js.map +1 -0
  6. package/dist/guardrail.d.ts +24 -0
  7. package/dist/guardrail.d.ts.map +1 -0
  8. package/dist/guardrail.js +65 -0
  9. package/dist/guardrail.js.map +1 -0
  10. package/dist/heap-state.d.ts +53 -1
  11. package/dist/heap-state.d.ts.map +1 -1
  12. package/dist/heap-state.js +153 -10
  13. package/dist/heap-state.js.map +1 -1
  14. package/dist/index.js +38 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/tools/array-group-by.d.ts +12 -0
  17. package/dist/tools/array-group-by.d.ts.map +1 -0
  18. package/dist/tools/array-group-by.js +191 -0
  19. package/dist/tools/array-group-by.js.map +1 -0
  20. package/dist/tools/auto-investigate.d.ts.map +1 -1
  21. package/dist/tools/auto-investigate.js +1056 -52
  22. package/dist/tools/auto-investigate.js.map +1 -1
  23. package/dist/tools/cache-analysis.d.ts.map +1 -1
  24. package/dist/tools/cache-analysis.js +438 -21
  25. package/dist/tools/cache-analysis.js.map +1 -1
  26. package/dist/tools/check-health.d.ts.map +1 -1
  27. package/dist/tools/check-health.js +261 -1
  28. package/dist/tools/check-health.js.map +1 -1
  29. package/dist/tools/class-histogram.d.ts.map +1 -1
  30. package/dist/tools/class-histogram.js +142 -33
  31. package/dist/tools/class-histogram.js.map +1 -1
  32. package/dist/tools/closure-inspection.d.ts.map +1 -1
  33. package/dist/tools/closure-inspection.js +238 -25
  34. package/dist/tools/closure-inspection.js.map +1 -1
  35. package/dist/tools/detached-dom.d.ts.map +1 -1
  36. package/dist/tools/detached-dom.js +25 -3
  37. package/dist/tools/detached-dom.js.map +1 -1
  38. package/dist/tools/dev-artifacts.d.ts +33 -0
  39. package/dist/tools/dev-artifacts.d.ts.map +1 -0
  40. package/dist/tools/dev-artifacts.js +165 -0
  41. package/dist/tools/dev-artifacts.js.map +1 -0
  42. package/dist/tools/diff-snapshots.d.ts.map +1 -1
  43. package/dist/tools/diff-snapshots.js +200 -48
  44. package/dist/tools/diff-snapshots.js.map +1 -1
  45. package/dist/tools/duplicated-strings.d.ts.map +1 -1
  46. package/dist/tools/duplicated-strings.js +74 -12
  47. package/dist/tools/duplicated-strings.js.map +1 -1
  48. package/dist/tools/eval.d.ts.map +1 -1
  49. package/dist/tools/eval.js +189 -10
  50. package/dist/tools/eval.js.map +1 -1
  51. package/dist/tools/event-listener-leaks.d.ts.map +1 -1
  52. package/dist/tools/event-listener-leaks.js +235 -13
  53. package/dist/tools/event-listener-leaks.js.map +1 -1
  54. package/dist/tools/event-registry.d.ts +12 -0
  55. package/dist/tools/event-registry.d.ts.map +1 -0
  56. package/dist/tools/event-registry.js +183 -0
  57. package/dist/tools/event-registry.js.map +1 -0
  58. package/dist/tools/find-by-property.d.ts.map +1 -1
  59. package/dist/tools/find-by-property.js +113 -31
  60. package/dist/tools/find-by-property.js.map +1 -1
  61. package/dist/tools/find-by-shape.d.ts +12 -0
  62. package/dist/tools/find-by-shape.d.ts.map +1 -0
  63. package/dist/tools/find-by-shape.js +178 -0
  64. package/dist/tools/find-by-shape.js.map +1 -0
  65. package/dist/tools/find-nodes-by-class.d.ts.map +1 -1
  66. package/dist/tools/find-nodes-by-class.js +50 -6
  67. package/dist/tools/find-nodes-by-class.js.map +1 -1
  68. package/dist/tools/for-each.d.ts.map +1 -1
  69. package/dist/tools/for-each.js +1 -1
  70. package/dist/tools/for-each.js.map +1 -1
  71. package/dist/tools/get-node.d.ts.map +1 -1
  72. package/dist/tools/get-node.js +6 -0
  73. package/dist/tools/get-node.js.map +1 -1
  74. package/dist/tools/get-references.d.ts.map +1 -1
  75. package/dist/tools/get-references.js +35 -6
  76. package/dist/tools/get-references.js.map +1 -1
  77. package/dist/tools/get-referrers.d.ts.map +1 -1
  78. package/dist/tools/get-referrers.js +35 -6
  79. package/dist/tools/get-referrers.js.map +1 -1
  80. package/dist/tools/get-string.d.ts +12 -0
  81. package/dist/tools/get-string.d.ts.map +1 -0
  82. package/dist/tools/get-string.js +223 -0
  83. package/dist/tools/get-string.js.map +1 -0
  84. package/dist/tools/get-value.d.ts +12 -0
  85. package/dist/tools/get-value.d.ts.map +1 -0
  86. package/dist/tools/get-value.js +152 -0
  87. package/dist/tools/get-value.js.map +1 -0
  88. package/dist/tools/global-variables.d.ts.map +1 -1
  89. package/dist/tools/global-variables.js +54 -34
  90. package/dist/tools/global-variables.js.map +1 -1
  91. package/dist/tools/growth-signals.d.ts +12 -0
  92. package/dist/tools/growth-signals.d.ts.map +1 -0
  93. package/dist/tools/growth-signals.js +211 -0
  94. package/dist/tools/growth-signals.js.map +1 -0
  95. package/dist/tools/intern-opportunities.d.ts +12 -0
  96. package/dist/tools/intern-opportunities.d.ts.map +1 -0
  97. package/dist/tools/intern-opportunities.js +870 -0
  98. package/dist/tools/intern-opportunities.js.map +1 -0
  99. package/dist/tools/largest-objects.d.ts.map +1 -1
  100. package/dist/tools/largest-objects.js +37 -14
  101. package/dist/tools/largest-objects.js.map +1 -1
  102. package/dist/tools/load-snapshot.d.ts +70 -0
  103. package/dist/tools/load-snapshot.d.ts.map +1 -1
  104. package/dist/tools/load-snapshot.js +446 -17
  105. package/dist/tools/load-snapshot.js.map +1 -1
  106. package/dist/tools/object-cost-breakdown.d.ts +12 -0
  107. package/dist/tools/object-cost-breakdown.d.ts.map +1 -0
  108. package/dist/tools/object-cost-breakdown.js +439 -0
  109. package/dist/tools/object-cost-breakdown.js.map +1 -0
  110. package/dist/tools/object-shape.d.ts.map +1 -1
  111. package/dist/tools/object-shape.js +109 -2
  112. package/dist/tools/object-shape.js.map +1 -1
  113. package/dist/tools/pinch-points.d.ts.map +1 -1
  114. package/dist/tools/pinch-points.js +9 -9
  115. package/dist/tools/pinch-points.js.map +1 -1
  116. package/dist/tools/property-distribution.d.ts +12 -0
  117. package/dist/tools/property-distribution.d.ts.map +1 -0
  118. package/dist/tools/property-distribution.js +168 -0
  119. package/dist/tools/property-distribution.js.map +1 -0
  120. package/dist/tools/quick-diagnosis.d.ts.map +1 -1
  121. package/dist/tools/quick-diagnosis.js +65 -20
  122. package/dist/tools/quick-diagnosis.js.map +1 -1
  123. package/dist/tools/retainer-summary.d.ts.map +1 -1
  124. package/dist/tools/retainer-summary.js +90 -5
  125. package/dist/tools/retainer-summary.js.map +1 -1
  126. package/dist/tools/retainer-trace.d.ts.map +1 -1
  127. package/dist/tools/retainer-trace.js +173 -43
  128. package/dist/tools/retainer-trace.js.map +1 -1
  129. package/dist/tools/search-nodes.d.ts.map +1 -1
  130. package/dist/tools/search-nodes.js +10 -3
  131. package/dist/tools/search-nodes.js.map +1 -1
  132. package/dist/tools/search-strings.d.ts +12 -0
  133. package/dist/tools/search-strings.d.ts.map +1 -0
  134. package/dist/tools/search-strings.js +182 -0
  135. package/dist/tools/search-strings.js.map +1 -0
  136. package/dist/tools/sequence-analysis.d.ts +12 -0
  137. package/dist/tools/sequence-analysis.d.ts.map +1 -0
  138. package/dist/tools/sequence-analysis.js +244 -0
  139. package/dist/tools/sequence-analysis.js.map +1 -0
  140. package/dist/tools/server-status.d.ts +12 -0
  141. package/dist/tools/server-status.d.ts.map +1 -0
  142. package/dist/tools/server-status.js +41 -0
  143. package/dist/tools/server-status.js.map +1 -0
  144. package/dist/tools/shape-histogram.d.ts.map +1 -1
  145. package/dist/tools/shape-histogram.js +61 -16
  146. package/dist/tools/shape-histogram.js.map +1 -1
  147. package/dist/tools/sliced-strings.d.ts.map +1 -1
  148. package/dist/tools/sliced-strings.js +38 -15
  149. package/dist/tools/sliced-strings.js.map +1 -1
  150. package/dist/tools/snapshot-header.d.ts +28 -0
  151. package/dist/tools/snapshot-header.d.ts.map +1 -0
  152. package/dist/tools/snapshot-header.js +111 -0
  153. package/dist/tools/snapshot-header.js.map +1 -0
  154. package/dist/tools/snapshot-summary.d.ts.map +1 -1
  155. package/dist/tools/snapshot-summary.js +55 -13
  156. package/dist/tools/snapshot-summary.js.map +1 -1
  157. package/dist/tools/snapshots.d.ts +12 -0
  158. package/dist/tools/snapshots.d.ts.map +1 -0
  159. package/dist/tools/snapshots.js +93 -0
  160. package/dist/tools/snapshots.js.map +1 -0
  161. package/dist/tools/stale-collections.d.ts.map +1 -1
  162. package/dist/tools/stale-collections.js +248 -7
  163. package/dist/tools/stale-collections.js.map +1 -1
  164. package/dist/tools/trace-dominators.d.ts.map +1 -1
  165. package/dist/tools/trace-dominators.js +28 -1
  166. package/dist/tools/trace-dominators.js.map +1 -1
  167. package/dist/tools/weakmap-entries.d.ts +12 -0
  168. package/dist/tools/weakmap-entries.d.ts.map +1 -0
  169. package/dist/tools/weakmap-entries.js +156 -0
  170. package/dist/tools/weakmap-entries.js.map +1 -0
  171. package/dist/utils.d.ts +139 -2
  172. package/dist/utils.d.ts.map +1 -1
  173. package/dist/utils.js +448 -35
  174. package/dist/utils.js.map +1 -1
  175. package/package.json +3 -3
@@ -0,0 +1,165 @@
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, markdownTable, truncateNodeName, errorResult, toolResult, } from '../utils.js';
13
+ // Globals installed by browser dev tools / extensions. Anything retained ONLY
14
+ // through one of these would be garbage-collected in production — it's a
15
+ // profiling artifact, not a real leak (Feedback round 2 §6).
16
+ const DEV_GLOBAL_EDGE_NAMES = new Set([
17
+ '__REACT_DEVTOOLS_GLOBAL_HOOK__',
18
+ '__REACT_DEVTOOLS_ATTACH__',
19
+ '__REDUX_DEVTOOLS_EXTENSION__',
20
+ '__REDUX_DEVTOOLS_EXTENSION_COMPAT__',
21
+ '__VUE_DEVTOOLS_GLOBAL_HOOK__',
22
+ '__MOBX_DEVTOOLS_GLOBAL_HOOK__',
23
+ '__APOLLO_DEVTOOLS_GLOBAL_HOOK__',
24
+ '__RECOIL_DEVTOOLS_EXTENSION__',
25
+ 'Debug', // window.Debug — common debugging handle (e.g. WhatsApp Web)
26
+ ]);
27
+ const DEV_NODE_NAME_RE = /__REACT_DEVTOOLS|DEVTOOLS_GLOBAL_HOOK|ReactDevTools/;
28
+ /**
29
+ * Find the dev/extension "root" objects: the targets of dev-global edges on
30
+ * the Window/global object, plus any node whose own name marks it as a
31
+ * devtools hook.
32
+ */
33
+ export function collectDevRoots(snapshot) {
34
+ const byId = new Map();
35
+ snapshot.nodes.forEach(node => {
36
+ if (node.id <= 3)
37
+ return;
38
+ const isGlobal = node.name.startsWith('Window ') ||
39
+ node.name === 'global' ||
40
+ node.name === 'globalThis';
41
+ if (isGlobal) {
42
+ for (const edge of node.references) {
43
+ const eName = String(edge.name_or_index);
44
+ if (DEV_GLOBAL_EDGE_NAMES.has(eName) && edge.toNode.id > 3) {
45
+ byId.set(edge.toNode.id, eName);
46
+ }
47
+ }
48
+ }
49
+ if (DEV_NODE_NAME_RE.test(node.name)) {
50
+ byId.set(node.id, node.name);
51
+ }
52
+ });
53
+ return { byId };
54
+ }
55
+ /**
56
+ * Classify whether a node is retained ONLY via a dev/extension global. We walk
57
+ * the dominator chain upward: if a dev root *dominates* the node, then every
58
+ * path from a GC root to the node passes through that dev object, so it would
59
+ * be collected in production. Using the dominator (not the shortest retainer)
60
+ * makes the "only via" claim rigorous.
61
+ */
62
+ export function classifyDevOnly(node, devRoots, maxWalk = 1000) {
63
+ if (devRoots.byId.size === 0)
64
+ return { devOnly: false, via: null };
65
+ let cur = node.dominatorNode ?? null;
66
+ let steps = 0;
67
+ while (cur && steps < maxWalk) {
68
+ const via = devRoots.byId.get(cur.id);
69
+ if (via != null)
70
+ return { devOnly: true, via };
71
+ if (cur.dominatorNode?.id === cur.id)
72
+ break;
73
+ cur = cur.dominatorNode ?? null;
74
+ steps++;
75
+ }
76
+ return { devOnly: false, via: null };
77
+ }
78
+ export function registerDevArtifacts(server) {
79
+ server.tool('memlab_dev_artifacts', 'Classify large retainers as production-relevant vs. dev-only (browser snapshots). Flags any object retained ONLY through a dev/extension global (__REACT_DEVTOOLS_GLOBAL_HOOK__, __REDUX_DEVTOOLS_EXTENSION__, window.Debug, …) — these are profiling artifacts that would be garbage-collected in production and should not be counted as leaks. Reports total bytes attributable to dev artifacts so "241 MB leak!" headlines that are really DevTools retention get caught.', {
80
+ limit: z
81
+ .number()
82
+ .optional()
83
+ .default(25)
84
+ .describe('Maximum number of objects to classify (default 25).'),
85
+ min_retained_size: z
86
+ .number()
87
+ .optional()
88
+ .default(524288)
89
+ .describe('Only consider objects retaining at least this (default 512 KB).'),
90
+ only_dev: z
91
+ .boolean()
92
+ .optional()
93
+ .default(false)
94
+ .describe('Show only the dev-only artifacts (default false: show both, dev-only flagged).'),
95
+ }, async ({ limit, min_retained_size, only_dev }) => {
96
+ try {
97
+ const snapshot = getSnapshot();
98
+ const meta = getSnapshotMetadata();
99
+ const totalSize = meta?.totalSize ?? 0;
100
+ const devRoots = collectDevRoots(snapshot);
101
+ if (devRoots.byId.size === 0) {
102
+ return toolResult('No dev/extension globals (__REACT_DEVTOOLS_GLOBAL_HOOK__, __REDUX_DEVTOOLS_EXTENSION__, window.Debug, …) found in this snapshot. ' +
103
+ 'Either this is a production/clean capture, or none were installed — large retainers here are NOT dev artifacts.');
104
+ }
105
+ const cands = [];
106
+ let devOnlyBytes = 0;
107
+ snapshot.nodes.forEach(node => {
108
+ if (node.id <= 3)
109
+ return;
110
+ if (node.retainedSize < min_retained_size)
111
+ return;
112
+ if (node.type !== 'object' &&
113
+ node.type !== 'closure' &&
114
+ node.type !== 'array')
115
+ return;
116
+ const { devOnly, via } = classifyDevOnly(node, devRoots);
117
+ if (devOnly)
118
+ devOnlyBytes += node.retainedSize;
119
+ if (only_dev && !devOnly)
120
+ return;
121
+ // keep top-N by retained size
122
+ const size = node.retainedSize;
123
+ let i = 0;
124
+ for (; i < cands.length; i++) {
125
+ if (size > cands[i].node.retainedSize)
126
+ break;
127
+ }
128
+ cands.splice(i, 0, { node, devOnly, via });
129
+ if (cands.length > limit)
130
+ cands.length = limit;
131
+ });
132
+ const lines = [
133
+ '## Dev-only artifact classification',
134
+ '',
135
+ `Dev/extension globals present: ${[...new Set(devRoots.byId.values())].join(', ')}`,
136
+ `Total retained held ONLY via dev artifacts: **${formatBytes(devOnlyBytes)}**` +
137
+ (totalSize > 0
138
+ ? ` (${Math.min(100, (devOnlyBytes / totalSize) * 100).toFixed(1)}% of heap — exclude from production leak totals)`
139
+ : ''),
140
+ '',
141
+ ];
142
+ if (cands.length > 0) {
143
+ const headers = ['ID', 'Name', 'Type', 'Retained', 'Classification'];
144
+ const rightCols = new Set([3]);
145
+ const rows = cands.map(c => [
146
+ `@${c.node.id}`,
147
+ truncateNodeName(c.node.name, c.node.type, c.node.self_size, 40),
148
+ c.node.type,
149
+ formatBytes(c.node.retainedSize),
150
+ c.devOnly ? `dev-only (via ${c.via})` : 'production',
151
+ ]);
152
+ lines.push(markdownTable(headers, rows, rightCols));
153
+ }
154
+ else {
155
+ lines.push('No objects matched the size threshold.');
156
+ }
157
+ lines.push('', '_"dev-only" = the object\'s dominator chain passes through a dev/extension global, so every retainer path goes through it and it would be GC\'d in production. Verify with `memlab_retainer_trace`._');
158
+ return toolResult(lines.join('\n'));
159
+ }
160
+ catch (err) {
161
+ return errorResult(err);
162
+ }
163
+ });
164
+ }
165
+ //# sourceMappingURL=dev-artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-artifacts.js","sourceRoot":"","sources":["../../src/tools/dev-artifacts.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"diff-snapshots.d.ts","sourceRoot":"","sources":["../../src/tools/diff-snapshots.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAsCvE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyP7D"}
1
+ {"version":3,"file":"diff-snapshots.d.ts","sourceRoot":"","sources":["../../src/tools/diff-snapshots.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAmHvE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgX7D"}
@@ -12,7 +12,7 @@ import path from 'path';
12
12
  import { z } from 'zod';
13
13
  import memlabHeapAnalysis from '@memlab/heap-analysis';
14
14
  const { getFullHeapFromFile } = memlabHeapAnalysis;
15
- import { setSnapshot } from '../heap-state.js';
15
+ import { setSnapshot, getCurrentHandle, getSnapshotByHandle, listSnapshots, setCurrentSnapshot, } from '../heap-state.js';
16
16
  import { formatBytes, formatNumber, markdownTable, errorResult, toolResult, } from '../utils.js';
17
17
  function buildHistogram(snapshot) {
18
18
  const map = new Map();
@@ -31,19 +31,82 @@ function buildHistogram(snapshot) {
31
31
  });
32
32
  return map;
33
33
  }
34
+ // Value-named string "classes" (literal values used as the class name, e.g.
35
+ // "554", "1780525701808.81", "o:10,add") are noise in a diff (§10).
36
+ function isValueNamedStringClass(type, name) {
37
+ if (type !== 'string' && type !== 'concatenated string')
38
+ return false;
39
+ if (name.length < 8)
40
+ return true;
41
+ if (/^[\s\d.,:+-]*$/.test(name))
42
+ return true;
43
+ return false;
44
+ }
45
+ // Resolve a before/after argument to a snapshot, preferring already-resident
46
+ // snapshots so diffing a captured ladder never re-parses a file that is already
47
+ // in memory (each reparse is a full dominator-tree build + a second resident
48
+ // graph). Order: (1) a resident handle, (2) a path matching a resident
49
+ // snapshot's file, (3) load from disk.
50
+ async function resolveDiffSnapshot(arg) {
51
+ const byHandle = getSnapshotByHandle(arg);
52
+ if (byHandle) {
53
+ return {
54
+ snapshot: byHandle,
55
+ label: arg,
56
+ residentHandle: arg,
57
+ resolvedPath: null,
58
+ };
59
+ }
60
+ const resolved = path.resolve(arg);
61
+ for (const m of listSnapshots()) {
62
+ // Match against BOTH the canonicalized path and the raw arg: load_snapshot
63
+ // stores a path.resolve()d filePath, but a snapshot first loaded through a
64
+ // different entry point may have been registered under its raw arg, so
65
+ // comparing only one form would miss the resident hit and re-parse.
66
+ if (m.filePath === resolved || m.filePath === arg) {
67
+ const s = getSnapshotByHandle(m.handle);
68
+ if (s) {
69
+ return {
70
+ snapshot: s,
71
+ label: m.handle,
72
+ residentHandle: m.handle,
73
+ resolvedPath: null,
74
+ };
75
+ }
76
+ }
77
+ }
78
+ if (!fs.existsSync(resolved)) {
79
+ throw new Error(`"${arg}" is neither a resident snapshot handle nor an existing file. ` +
80
+ `Use memlab_snapshots (action:"list") to see resident handles, or pass a ` +
81
+ `valid .heapsnapshot path.`);
82
+ }
83
+ const snapshot = await getFullHeapFromFile(resolved);
84
+ return {
85
+ snapshot,
86
+ label: path.basename(arg),
87
+ residentHandle: null,
88
+ resolvedPath: resolved,
89
+ };
90
+ }
34
91
  export function registerDiffSnapshots(server) {
35
- server.tool('memlab_diff_snapshots', 'Compare two heap snapshots by class histogram. Shows classes that grew, shrunk, appeared, or disappeared between "before" and "after" snapshots. The "after" snapshot becomes the active snapshot for subsequent analysis.', {
92
+ server.tool('memlab_diff_snapshots', 'Compare two heap snapshots by class histogram. Shows classes that grew, shrunk, appeared, or disappeared between "before" and "after" snapshots. Each side accepts either a resident snapshot handle (from memlab_snapshots) or a file path — resident handles are reused in place, so diffing a ladder you already loaded never re-parses a file. By default the "after" snapshot becomes the active snapshot (set set_active:false to leave your active snapshot unchanged). For an ordered sequence of 3+ snapshots, use memlab_sequence_analysis instead.', {
36
93
  before_path: z
37
94
  .string()
38
- .describe('Absolute path to the "before" .heapsnapshot file'),
95
+ .optional()
96
+ .describe('The "before" snapshot: a resident handle (see memlab_snapshots) or a path (local, manifold://, or bare filename). Aliases: before, baseline.'),
39
97
  after_path: z
40
98
  .string()
41
- .describe('Absolute path to the "after" .heapsnapshot file'),
99
+ .optional()
100
+ .describe('The "after" snapshot: a resident handle (see memlab_snapshots) or a path (local, manifold://, or bare filename). Aliases: after, target.'),
101
+ before: z.string().optional().describe('Alias for before_path.'),
102
+ after: z.string().optional().describe('Alias for after_path.'),
103
+ baseline: z.string().optional().describe('Alias for before_path.'),
104
+ target: z.string().optional().describe('Alias for after_path.'),
42
105
  limit: z
43
106
  .number()
44
107
  .optional()
45
108
  .default(30)
46
- .describe('Maximum rows per section (default 30)'),
109
+ .describe('Maximum rows per section / top_n (default 30)'),
47
110
  min_count_delta: z
48
111
  .number()
49
112
  .optional()
@@ -54,54 +117,94 @@ export function registerDiffSnapshots(server) {
54
117
  .optional()
55
118
  .default(0)
56
119
  .describe('Minimum absolute change in self size (bytes) to show (default 0).'),
57
- }, async ({ before_path, after_path, limit, min_count_delta, min_size_delta, }) => {
120
+ include_value_classes: z
121
+ .boolean()
122
+ .optional()
123
+ .default(false)
124
+ .describe('Include anonymous value-named string "classes" (e.g. "554", literal values used as names). Default false: they are filtered and rolled up into a single "(string literals)" row to cut noise (§10).'),
125
+ hide_zero_size_delta: z
126
+ .boolean()
127
+ .optional()
128
+ .default(true)
129
+ .describe('Hide rows whose self-size delta is 0 B (default true) — these are usually noise.'),
130
+ set_active: z
131
+ .boolean()
132
+ .optional()
133
+ .default(true)
134
+ .describe('Make the "after" snapshot the active one for subsequent tools (default true). Set false to leave your current active snapshot unchanged.'),
135
+ }, async ({ before_path, after_path, before, after, baseline, target, limit, min_count_delta, min_size_delta, include_value_classes, hide_zero_size_delta, set_active, }) => {
58
136
  try {
59
- const resolvedBefore = path.resolve(before_path);
60
- const resolvedAfter = path.resolve(after_path);
61
- if (!fs.existsSync(resolvedBefore)) {
62
- return errorResult(new Error(`Before file not found: ${resolvedBefore}`));
137
+ const beforeArg = before_path ?? before ?? baseline;
138
+ const afterArg = after_path ?? after ?? target;
139
+ if (!beforeArg || !afterArg) {
140
+ return errorResult(new Error('Provide both a before and an after snapshot. Accepted names: before_path/before/baseline and after_path/after/target.'));
63
141
  }
64
- if (!fs.existsSync(resolvedAfter)) {
65
- return errorResult(new Error(`After file not found: ${resolvedAfter}`));
66
- }
67
- const [beforeSnapshot, afterSnapshot] = await Promise.all([
68
- getFullHeapFromFile(resolvedBefore),
69
- getFullHeapFromFile(resolvedAfter),
142
+ const [beforeResolved, afterResolved] = await Promise.all([
143
+ resolveDiffSnapshot(beforeArg),
144
+ resolveDiffSnapshot(afterArg),
70
145
  ]);
146
+ const beforeSnapshot = beforeResolved.snapshot;
147
+ const afterSnapshot = afterResolved.snapshot;
71
148
  const beforeHist = buildHistogram(beforeSnapshot);
72
149
  const afterHist = buildHistogram(afterSnapshot);
73
- // Make "after" the active snapshot
74
- let afterNodeCount = 0;
75
- let afterEdgeCount = 0;
76
- let afterTotalSize = 0;
77
- afterSnapshot.nodes.forEach(node => {
78
- afterNodeCount++;
79
- afterTotalSize += node.self_size;
80
- });
81
- afterSnapshot.edges.forEach(() => {
82
- afterEdgeCount++;
83
- });
84
- let hasWindow = false;
85
- let hasModule = false;
86
- afterSnapshot.nodes.forEach(node => {
87
- if (hasWindow)
88
- return;
89
- if (node.name.startsWith('Window ') && node.type === 'object')
90
- hasWindow = true;
91
- if (node.name === 'Module' && node.type === 'object' && !hasModule)
92
- hasModule = true;
93
- });
94
- const afterEnv = hasWindow ? 'browser' : hasModule ? 'node' : 'unknown';
95
- setSnapshot(afterSnapshot, after_path, {
96
- fileName: path.basename(after_path),
97
- nodeCount: afterNodeCount,
98
- edgeCount: afterEdgeCount,
99
- totalSize: afterTotalSize,
100
- env: afterEnv,
101
- });
150
+ // Make "after" the active snapshot. If it is already resident, switch to
151
+ // its handle in place; only a freshly-loaded snapshot needs registering
152
+ // (and the metadata scan that entails).
153
+ let activeHandle = getCurrentHandle();
154
+ if (set_active) {
155
+ if (afterResolved.residentHandle) {
156
+ setCurrentSnapshot(afterResolved.residentHandle);
157
+ activeHandle = afterResolved.residentHandle;
158
+ }
159
+ else {
160
+ let afterNodeCount = 0;
161
+ let afterEdgeCount = 0;
162
+ let afterTotalSize = 0;
163
+ afterSnapshot.nodes.forEach(node => {
164
+ afterNodeCount++;
165
+ afterTotalSize += node.self_size;
166
+ });
167
+ afterSnapshot.edges.forEach(() => {
168
+ afterEdgeCount++;
169
+ });
170
+ let hasWindow = false;
171
+ let hasModule = false;
172
+ afterSnapshot.nodes.forEach(node => {
173
+ if (hasWindow)
174
+ return;
175
+ if (node.name.startsWith('Window ') && node.type === 'object')
176
+ hasWindow = true;
177
+ if (node.name === 'Module' &&
178
+ node.type === 'object' &&
179
+ !hasModule)
180
+ hasModule = true;
181
+ });
182
+ const afterEnv = hasWindow
183
+ ? 'browser'
184
+ : hasModule
185
+ ? 'node'
186
+ : 'unknown';
187
+ activeHandle = setSnapshot(afterSnapshot, afterResolved.resolvedPath ?? afterArg, {
188
+ fileName: path.basename(afterArg),
189
+ nodeCount: afterNodeCount,
190
+ edgeCount: afterEdgeCount,
191
+ totalSize: afterTotalSize,
192
+ env: afterEnv,
193
+ }).handle;
194
+ }
195
+ }
102
196
  // Compute deltas
103
197
  const allKeys = new Set([...beforeHist.keys(), ...afterHist.keys()]);
104
198
  const diffs = [];
199
+ // Rollup accumulator for filtered value-named string classes (§10).
200
+ const rollup = {
201
+ grewCount: 0,
202
+ grewSize: 0,
203
+ grewClasses: 0,
204
+ shrunkCount: 0,
205
+ shrunkSize: 0,
206
+ shrunkClasses: 0,
207
+ };
105
208
  for (const key of allKeys) {
106
209
  const before = beforeHist.get(key);
107
210
  const after = afterHist.get(key);
@@ -115,11 +218,28 @@ export function registerDiffSnapshots(server) {
115
218
  Math.abs(sizeDelta) < min_size_delta) {
116
219
  continue;
117
220
  }
221
+ if (hide_zero_size_delta && sizeDelta === 0)
222
+ continue;
118
223
  const parts = key.split('::');
224
+ const type = parts[0];
225
+ const name = parts.slice(1).join('::');
226
+ if (!include_value_classes && isValueNamedStringClass(type, name)) {
227
+ if (countDelta > 0) {
228
+ rollup.grewCount += countDelta;
229
+ rollup.grewSize += sizeDelta;
230
+ rollup.grewClasses++;
231
+ }
232
+ else if (countDelta < 0) {
233
+ rollup.shrunkCount += countDelta;
234
+ rollup.shrunkSize += sizeDelta;
235
+ rollup.shrunkClasses++;
236
+ }
237
+ continue;
238
+ }
119
239
  diffs.push({
120
240
  key,
121
- name: parts.slice(1).join('::'),
122
- type: parts[0],
241
+ name,
242
+ type,
123
243
  before_count: bc,
124
244
  after_count: ac,
125
245
  count_delta: countDelta,
@@ -128,6 +248,33 @@ export function registerDiffSnapshots(server) {
128
248
  size_delta: sizeDelta,
129
249
  });
130
250
  }
251
+ // Emit the rolled-up value-string classes as single synthetic rows.
252
+ if (rollup.grewClasses > 0) {
253
+ diffs.push({
254
+ key: 'string::(string literals)',
255
+ name: `(string literals ×${formatNumber(rollup.grewClasses)})`,
256
+ type: 'string',
257
+ before_count: 0,
258
+ after_count: rollup.grewCount,
259
+ count_delta: rollup.grewCount,
260
+ before_size: 0,
261
+ after_size: rollup.grewSize,
262
+ size_delta: rollup.grewSize,
263
+ });
264
+ }
265
+ if (rollup.shrunkClasses > 0) {
266
+ diffs.push({
267
+ key: 'string::(string literals)-shrunk',
268
+ name: `(string literals ×${formatNumber(rollup.shrunkClasses)})`,
269
+ type: 'string',
270
+ before_count: -rollup.shrunkCount,
271
+ after_count: 0,
272
+ count_delta: rollup.shrunkCount,
273
+ before_size: -rollup.shrunkSize,
274
+ after_size: 0,
275
+ size_delta: rollup.shrunkSize,
276
+ });
277
+ }
131
278
  const grew = diffs
132
279
  .filter(d => d.count_delta > 0)
133
280
  .sort((a, b) => b.count_delta - a.count_delta);
@@ -153,6 +300,9 @@ export function registerDiffSnapshots(server) {
153
300
  const sign = (n) => (n >= 0 ? '+' : '-');
154
301
  lines.push('## Snapshot Comparison');
155
302
  lines.push('');
303
+ const residentTag = (r) => r.residentHandle ? ' (resident)' : '';
304
+ lines.push(`before: \`${beforeResolved.label}\`${residentTag(beforeResolved)} → after: \`${afterResolved.label}\`${residentTag(afterResolved)}`);
305
+ lines.push('');
156
306
  lines.push(`| | Before | After | Delta |`);
157
307
  lines.push(`|---|---:|---:|---:|`);
158
308
  lines.push(`| Nodes | ${formatNumber(totalBeforeNodes)} | ${formatNumber(totalAfterNodes)} | ${sign(nodeDelta)}${formatNumber(Math.abs(nodeDelta))} |`);
@@ -213,7 +363,9 @@ export function registerDiffSnapshots(server) {
213
363
  if (grew.length === 0 && shrunk.length === 0) {
214
364
  lines.push('No significant differences found between the two snapshots.');
215
365
  }
216
- lines.push(`\n*The "after" snapshot is now active for further analysis.*`);
366
+ lines.push(set_active
367
+ ? `\n*The "after" snapshot is now the active snapshot${activeHandle ? ` (handle: ${activeHandle})` : ''} for further analysis. Pass set_active:false to keep your current one.*`
368
+ : `\n*Active snapshot left unchanged${activeHandle ? ` (handle: ${activeHandle})` : ''} (set_active:false).*`);
217
369
  return toolResult(lines.join('\n'));
218
370
  }
219
371
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"diff-snapshots.js","sourceRoot":"","sources":["../../src/tools/diff-snapshots.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff-snapshots.js","sourceRoot":"","sources":["../../src/tools/diff-snapshots.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"duplicated-strings.d.ts","sourceRoot":"","sources":["../../src/tools/duplicated-strings.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAKvE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6IjE"}
1
+ {"version":3,"file":"duplicated-strings.d.ts","sourceRoot":"","sources":["../../src/tools/duplicated-strings.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAUvE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgOjE"}