@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,93 @@
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 { listSnapshots, getCurrentHandle, setCurrentSnapshot, removeSnapshot, setSessionConfig, getSessionConfig, } from '../heap-state.js';
12
+ import { formatBytes, formatNumber, errorResult, textResult } from '../utils.js';
13
+ export function registerSnapshots(server) {
14
+ server.tool('memlab_snapshots', 'Manage the multi-snapshot session: list resident snapshots, switch the active one, or unload one to free memory. Also toggles session-level output controls (quiet header, suppress suggestions) to trim repeated boilerplate tokens. Load several snapshots with memlab_load_snapshot({keep_previous:true}) then switch between them by handle. Node ids are only valid within the snapshot they came from.', {
15
+ action: z
16
+ .enum(['list', 'switch', 'unload'])
17
+ .optional()
18
+ .default('list')
19
+ .describe('"list" (default) shows resident snapshots; "switch" makes the given handle active; "unload" removes the given handle to free memory.'),
20
+ handle: z
21
+ .string()
22
+ .optional()
23
+ .describe('Snapshot handle to switch to or unload (see action).'),
24
+ quiet: z
25
+ .boolean()
26
+ .optional()
27
+ .describe('When set, toggles the session "quiet header" mode: the "> Snapshot: …" header prints once per snapshot instead of on every tool result.'),
28
+ suppress_suggestions: z
29
+ .boolean()
30
+ .optional()
31
+ .describe('When set, toggles whether tools omit their "Suggested next steps" trailers.'),
32
+ }, async ({ action, handle, quiet, suppress_suggestions }) => {
33
+ try {
34
+ const configChanges = [];
35
+ if (quiet != null || suppress_suggestions != null) {
36
+ setSessionConfig({
37
+ ...(quiet != null ? { quietHeader: quiet } : {}),
38
+ ...(suppress_suggestions != null
39
+ ? { suppressSuggestions: suppress_suggestions }
40
+ : {}),
41
+ });
42
+ const cfg = getSessionConfig();
43
+ configChanges.push(`Output config: quietHeader=${cfg.quietHeader}, suppressSuggestions=${cfg.suppressSuggestions}`);
44
+ }
45
+ if (action === 'switch') {
46
+ if (!handle) {
47
+ return errorResult('action "switch" requires a handle.');
48
+ }
49
+ if (!setCurrentSnapshot(handle)) {
50
+ return errorResult(`No resident snapshot with handle "${handle}". Use action:"list" to see handles.`);
51
+ }
52
+ return textResult([`Active snapshot is now "${handle}".`, ...configChanges].join('\n'));
53
+ }
54
+ if (action === 'unload') {
55
+ if (!handle) {
56
+ return errorResult('action "unload" requires a handle.');
57
+ }
58
+ if (!removeSnapshot(handle)) {
59
+ return errorResult(`No resident snapshot with handle "${handle}".`);
60
+ }
61
+ const cur = getCurrentHandle();
62
+ return textResult([
63
+ `Unloaded snapshot "${handle}".`,
64
+ cur
65
+ ? `Active snapshot is now "${cur}".`
66
+ : 'No snapshots remain loaded.',
67
+ ...configChanges,
68
+ ].join('\n'));
69
+ }
70
+ // list
71
+ const all = listSnapshots();
72
+ const cur = getCurrentHandle();
73
+ if (all.length === 0) {
74
+ return textResult([
75
+ 'No snapshots loaded. Use memlab_load_snapshot first.',
76
+ ...configChanges,
77
+ ].join('\n'));
78
+ }
79
+ const lines = [`Resident snapshots (${all.length}):`];
80
+ for (const m of all) {
81
+ lines.push(`${m.handle === cur ? '→' : ' '} ${m.handle} — ${m.fileName}, ` +
82
+ `${formatBytes(m.totalSize)}, ${formatNumber(m.nodeCount)} nodes (${m.env})`);
83
+ }
84
+ if (configChanges.length > 0)
85
+ lines.push('', ...configChanges);
86
+ return textResult(lines.join('\n'));
87
+ }
88
+ catch (err) {
89
+ return errorResult(err);
90
+ }
91
+ });
92
+ }
93
+ //# sourceMappingURL=snapshots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshots.js","sourceRoot":"","sources":["../../src/tools/snapshots.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAC,MAAM,aAAa,CAAC;AAE/E,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,8YAA8Y,EAC9Y;QACE,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;aAClC,QAAQ,EAAE;aACV,OAAO,CAAC,MAAM,CAAC;aACf,QAAQ,CACP,sIAAsI,CACvI;QACH,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,sDAAsD,CAAC;QACnE,KAAK,EAAE,CAAC;aACL,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CACP,yIAAyI,CAC1I;QACH,oBAAoB,EAAE,CAAC;aACpB,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CACP,6EAA6E,CAC9E;KACJ,EACD,KAAK,EAAE,EAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAC,EAAE,EAAE;QACtD,IAAI,CAAC;YACH,MAAM,aAAa,GAAa,EAAE,CAAC;YACnC,IAAI,KAAK,IAAI,IAAI,IAAI,oBAAoB,IAAI,IAAI,EAAE,CAAC;gBAClD,gBAAgB,CAAC;oBACf,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAC,WAAW,EAAE,KAAK,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9C,GAAG,CAAC,oBAAoB,IAAI,IAAI;wBAC9B,CAAC,CAAC,EAAC,mBAAmB,EAAE,oBAAoB,EAAC;wBAC7C,CAAC,CAAC,EAAE,CAAC;iBACR,CAAC,CAAC;gBACH,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;gBAC/B,aAAa,CAAC,IAAI,CAChB,8BAA8B,GAAG,CAAC,WAAW,yBAAyB,GAAG,CAAC,mBAAmB,EAAE,CAChG,CAAC;YACJ,CAAC;YAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO,WAAW,CAAC,oCAAoC,CAAC,CAAC;gBAC3D,CAAC;gBACD,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;oBAChC,OAAO,WAAW,CAChB,qCAAqC,MAAM,sCAAsC,CAClF,CAAC;gBACJ,CAAC;gBACD,OAAO,UAAU,CACf,CAAC,2BAA2B,MAAM,IAAI,EAAE,GAAG,aAAa,CAAC,CAAC,IAAI,CAC5D,IAAI,CACL,CACF,CAAC;YACJ,CAAC;YAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO,WAAW,CAAC,oCAAoC,CAAC,CAAC;gBAC3D,CAAC;gBACD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5B,OAAO,WAAW,CAAC,qCAAqC,MAAM,IAAI,CAAC,CAAC;gBACtE,CAAC;gBACD,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;gBAC/B,OAAO,UAAU,CACf;oBACE,sBAAsB,MAAM,IAAI;oBAChC,GAAG;wBACD,CAAC,CAAC,2BAA2B,GAAG,IAAI;wBACpC,CAAC,CAAC,6BAA6B;oBACjC,GAAG,aAAa;iBACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;YACJ,CAAC;YAED,OAAO;YACP,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;YAC/B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrB,OAAO,UAAU,CACf;oBACE,sDAAsD;oBACtD,GAAG,aAAa;iBACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,GAAG,CAAC,uBAAuB,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;YACtD,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;gBACpB,KAAK,CAAC,IAAI,CACR,GAAG,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,QAAQ,IAAI;oBAC7D,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,GAAG,CAC/E,CAAC;YACJ,CAAC;YACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,aAAa,CAAC,CAAC;YAC/D,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"stale-collections.d.ts","sourceRoot":"","sources":["../../src/tools/stale-collections.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AA8CvE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsGhE"}
1
+ {"version":3,"file":"stale-collections.d.ts","sourceRoot":"","sources":["../../src/tools/stale-collections.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAoKvE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiQhE"}
@@ -34,8 +34,123 @@ function getCollectionChildren(node) {
34
34
  // For Array and others, use direct references
35
35
  return node.references;
36
36
  }
37
+ function isOrphanedEntry(node) {
38
+ if (node.id <= 3)
39
+ return false;
40
+ if (node.type !== 'object')
41
+ return false;
42
+ return node.numOfReferrers <= 1;
43
+ }
44
+ const LISTENER_CALLBACK_PROPS = new Set([
45
+ 'callback',
46
+ 'fn',
47
+ 'handler',
48
+ 'listener',
49
+ ]);
50
+ const LISTENER_CONTEXT_PROPS = new Set([
51
+ 'context',
52
+ 'ctx',
53
+ 'this',
54
+ 'target',
55
+ 'scope',
56
+ ]);
57
+ /**
58
+ * One pass over the heap to collect the ids of objects that look like a listener
59
+ * record — i.e. they carry BOTH a callback-ish and a context-ish property
60
+ * (`{callback, context}`, `{fn, ctx}`, …). Precomputing this once turns the
61
+ * `listener_orphaned` check from O(entries × referrers × referrer-edges) — a
62
+ * per-entry re-walk of every referrer's outgoing edges — into an O(1) set lookup
63
+ * per referrer, which is what made the unbounded scan wedge on large Node heaps.
64
+ */
65
+ function buildListenerObjectIds(snapshot, deadline) {
66
+ const ids = new Set();
67
+ let timedOut = false;
68
+ let seen = 0;
69
+ snapshot.nodes.forEach(node => {
70
+ if (timedOut)
71
+ return;
72
+ // This precompute is a full O(N) pass; keep it inside the same wall-clock
73
+ // budget as the scan so timeout_ms bounds the whole operation.
74
+ if ((seen++ & 0x7ff) === 0 && Date.now() > deadline) {
75
+ timedOut = true;
76
+ return;
77
+ }
78
+ if (node.type !== 'object' || node.id <= 3)
79
+ return;
80
+ let hasCallback = false;
81
+ let hasContext = false;
82
+ for (const edge of node.references) {
83
+ if (edge.type !== 'property')
84
+ continue;
85
+ const pName = String(edge.name_or_index);
86
+ if (LISTENER_CALLBACK_PROPS.has(pName))
87
+ hasCallback = true;
88
+ else if (LISTENER_CONTEXT_PROPS.has(pName))
89
+ hasContext = true;
90
+ if (hasCallback && hasContext) {
91
+ ids.add(node.id);
92
+ break;
93
+ }
94
+ }
95
+ });
96
+ return { ids, timedOut };
97
+ }
98
+ function isListenerOrphaned(node, ownershipEdges, listenerObjectIds) {
99
+ if (node.id <= 3)
100
+ return false;
101
+ if (node.type !== 'object')
102
+ return false;
103
+ // Single pass over the entry's (typically few) referrers: an ownership edge
104
+ // disqualifies it; a referrer that is a known listener record qualifies it.
105
+ let hasListenerRef = false;
106
+ for (const edge of node.referrers) {
107
+ if (ownershipEdges.has(String(edge.name_or_index))) {
108
+ return false;
109
+ }
110
+ if (listenerObjectIds.has(edge.fromNode.id)) {
111
+ hasListenerRef = true;
112
+ }
113
+ }
114
+ return hasListenerRef;
115
+ }
116
+ function hasTerminalStatus(node) {
117
+ if (node.id <= 3)
118
+ return false;
119
+ if (node.type !== 'object')
120
+ return false;
121
+ const TERMINAL_VALUES = new Set([
122
+ 'PENDING',
123
+ 'UPLOAD_PENDING',
124
+ 'UPLOADING',
125
+ 'FAILED',
126
+ 'ERROR',
127
+ 'TIMED_OUT',
128
+ 'CANCELLED',
129
+ 'EXPIRED',
130
+ 'ABORTED',
131
+ ]);
132
+ for (const edge of node.references) {
133
+ const eName = String(edge.name_or_index);
134
+ if (eName === 'status' ||
135
+ eName === 'state' ||
136
+ eName === '_status' ||
137
+ eName === '_state') {
138
+ const target = edge.toNode;
139
+ if (target.isString) {
140
+ const strNode = target.toStringNode();
141
+ if (strNode && TERMINAL_VALUES.has(strNode.stringValue)) {
142
+ return true;
143
+ }
144
+ }
145
+ }
146
+ }
147
+ return false;
148
+ }
37
149
  export function registerStaleCollections(server) {
38
- server.tool('memlab_stale_collections', 'Find Map, Set, and Array collections holding references to detached DOM nodes or unmounted React Fiber nodes. These collections prevent garbage collection of stale objects.', {
150
+ server.tool('memlab_stale_collections', 'Find Map, Set, and Array collections holding stale references. Detects: (1) detached DOM / ' +
151
+ 'unmounted Fiber nodes, (2) entries with a status/state property stuck at terminal values ' +
152
+ '(PENDING, FAILED, TIMED_OUT, etc.), and (3) orphaned entries with no referrers outside ' +
153
+ 'the collection. Use detect_modes to control which heuristics are applied.', {
39
154
  limit: z
40
155
  .number()
41
156
  .optional()
@@ -51,22 +166,132 @@ export function registerStaleCollections(server) {
51
166
  .optional()
52
167
  .default(0)
53
168
  .describe('Minimum total stale retained size in bytes to include (default 0). Use e.g., 10240 for 10 KB to filter noise.'),
54
- }, async ({ limit, min_stale_count, min_stale_retained_size }) => {
169
+ detect_modes: z
170
+ .array(z.enum([
171
+ 'detached',
172
+ 'terminal_status',
173
+ 'orphaned',
174
+ 'listener_orphaned',
175
+ ]))
176
+ .optional()
177
+ .default(['detached', 'terminal_status'])
178
+ .describe('Which stale detection heuristics to apply. "detached" = detached DOM / unmounted Fiber, ' +
179
+ '"terminal_status" = entries with status stuck at terminal values, ' +
180
+ '"orphaned" = entries with no referrers outside the collection (can be slow), ' +
181
+ '"listener_orphaned" = objects only kept alive by event listener registrations ' +
182
+ '(no ownership references like "msgs", "items", "children" — the classic listener-based ' +
183
+ 'memory leak pattern). Default: detached + terminal_status.'),
184
+ ownership_edges: z
185
+ .array(z.string())
186
+ .optional()
187
+ .default([
188
+ 'msgs',
189
+ 'msgChunks',
190
+ 'items',
191
+ 'children',
192
+ 'models',
193
+ '_models',
194
+ 'entries',
195
+ 'data',
196
+ 'elements',
197
+ ])
198
+ .describe('Property names that constitute "ownership" references for the listener_orphaned ' +
199
+ 'detection mode. Objects that lack any of these incoming edges are considered orphaned. ' +
200
+ "Customize for your app's collection naming conventions."),
201
+ timeout_ms: z
202
+ .number()
203
+ .optional()
204
+ .default(45000)
205
+ .describe('Wall-clock budget for the scan (default 45000). On very large heaps the per-entry ' +
206
+ 'checks (esp. orphaned/listener_orphaned) can be expensive; when the budget is hit the ' +
207
+ 'tool returns partial results with a note instead of hanging.'),
208
+ max_children_per_collection: z
209
+ .number()
210
+ .optional()
211
+ .default(200000)
212
+ .describe('Cap on how many entries are examined per collection (default 200000). Collections larger ' +
213
+ 'than this are partially scanned (noted in output) so one giant collection cannot dominate runtime.'),
214
+ }, async ({ limit, min_stale_count, min_stale_retained_size, detect_modes, ownership_edges, timeout_ms, max_children_per_collection, }) => {
55
215
  try {
56
216
  const snapshot = getSnapshot();
57
217
  const results = [];
218
+ const detectDetached = detect_modes.includes('detached');
219
+ const detectTerminal = detect_modes.includes('terminal_status');
220
+ const detectOrphaned = detect_modes.includes('orphaned');
221
+ const detectListenerOrphaned = detect_modes.includes('listener_orphaned');
222
+ const ownershipEdgeSet = new Set(ownership_edges);
223
+ // Wall-clock budget + per-collection cap so a huge heap/collection
224
+ // returns partial results instead of wedging.
225
+ const deadline = Date.now() + timeout_ms;
226
+ let timedOut = false;
227
+ let cappedCollections = 0;
228
+ let scanned = 0;
229
+ // Precompute listener-record ids once (single pass) so the
230
+ // listener_orphaned check is an O(1) lookup per referrer instead of a
231
+ // per-entry re-walk of every referrer's edges. This pass is itself a
232
+ // full O(N) traversal, so it shares the same deadline as the scan —
233
+ // timeout_ms bounds the whole operation, precompute included.
234
+ let listenerObjectIds = new Set();
235
+ if (detectListenerOrphaned) {
236
+ const built = buildListenerObjectIds(snapshot, deadline);
237
+ listenerObjectIds = built.ids;
238
+ if (built.timedOut)
239
+ timedOut = true;
240
+ }
58
241
  snapshot.nodes.forEach(node => {
242
+ if (timedOut)
243
+ return;
59
244
  if (!isCollectionNode(node))
60
245
  return;
61
246
  const children = getCollectionChildren(node);
62
247
  let staleCount = 0;
63
248
  let staleRetainedSize = 0;
64
249
  let totalChildren = 0;
250
+ let reason = '';
65
251
  for (const edge of children) {
252
+ // Bounded: check the deadline every ~2k entries; cap per collection.
253
+ // The interval is kept small so a heavy per-entry cost (e.g.
254
+ // terminal_status walking each entry's edges) can't blow well past
255
+ // the budget between checks.
256
+ if ((scanned & 0x7ff) === 0 && Date.now() > deadline) {
257
+ timedOut = true;
258
+ break;
259
+ }
260
+ scanned++;
261
+ if (totalChildren >= max_children_per_collection) {
262
+ cappedCollections++;
263
+ break;
264
+ }
66
265
  totalChildren++;
67
- if (isStaleNode(edge.toNode)) {
266
+ const child = edge.toNode;
267
+ if (child.id <= 3)
268
+ continue;
269
+ let isStale = false;
270
+ if (detectDetached && isStaleNode(child)) {
271
+ isStale = true;
272
+ if (!reason)
273
+ reason = 'detached DOM/Fiber';
274
+ }
275
+ if (!isStale && detectTerminal && hasTerminalStatus(child)) {
276
+ isStale = true;
277
+ if (!reason)
278
+ reason = 'terminal status';
279
+ }
280
+ if (!isStale && detectOrphaned && isOrphanedEntry(child)) {
281
+ isStale = true;
282
+ if (!reason)
283
+ reason = 'orphaned entries';
284
+ }
285
+ if (!isStale &&
286
+ detectListenerOrphaned &&
287
+ isListenerOrphaned(child, ownershipEdgeSet, listenerObjectIds)) {
288
+ isStale = true;
289
+ if (!reason)
290
+ reason = 'listener-only retention';
291
+ }
292
+ if (isStale) {
68
293
  staleCount++;
69
- staleRetainedSize += edge.toNode.retainedSize;
294
+ staleRetainedSize += child.retainedSize;
70
295
  }
71
296
  }
72
297
  if (staleCount >= min_stale_count &&
@@ -76,28 +301,43 @@ export function registerStaleCollections(server) {
76
301
  stale_item_count: staleCount,
77
302
  stale_retained_size: staleRetainedSize,
78
303
  total_children: totalChildren,
304
+ stale_reason: reason,
79
305
  });
80
306
  }
81
307
  });
82
308
  // Sort by stale retained size descending
83
309
  results.sort((a, b) => b.stale_retained_size - a.stale_retained_size);
84
310
  const topResults = results.slice(0, limit);
311
+ const scanNotes = [];
312
+ if (timedOut) {
313
+ const where = scanned === 0
314
+ ? 'while precomputing listener records (before scanning collections)'
315
+ : `after ${formatNumber(scanned)} entries`;
316
+ scanNotes.push(`⚠ Scan hit the ${formatNumber(timeout_ms)}ms time budget ${where} — results are PARTIAL. Re-run with a higher \`timeout_ms\`, narrow \`detect_modes\`, or raise \`min_stale_count\` to focus.`);
317
+ }
318
+ if (cappedCollections > 0) {
319
+ scanNotes.push(`⚠ ${formatNumber(cappedCollections)} collection(s) exceeded \`max_children_per_collection\` (${formatNumber(max_children_per_collection)}) and were only partially scanned.`);
320
+ }
321
+ const scanNote = scanNotes.length > 0 ? scanNotes.join('\n') + '\n\n' : '';
85
322
  if (topResults.length === 0) {
86
323
  const env = getSnapshotEnv();
87
324
  if (env === 'node') {
88
- return toolResult('No stale collections found. This is a Node.js snapshot — detached DOM detection is not applicable.\n\n' +
325
+ return toolResult(scanNote +
326
+ 'No stale collections found. This is a Node.js snapshot — detached DOM detection is not applicable.\n\n' +
89
327
  'For Node.js memory investigation, try:\n' +
90
328
  '- `memlab_largest_objects` — find objects consuming the most memory\n' +
91
329
  '- `memlab_class_histogram` — per-class instance counts and sizes\n' +
92
330
  '- `memlab_sliced_strings` — find sliced strings keeping large parents alive');
93
331
  }
94
- return toolResult('No stale collections found.');
332
+ return toolResult(scanNote + 'No stale collections found.');
95
333
  }
334
+ const hasMultipleReasons = new Set(topResults.map(r => r.stale_reason)).size > 1;
96
335
  const headers = [
97
336
  'Collection ID',
98
337
  'Name',
99
338
  'Stale / Total',
100
339
  'Stale Retained',
340
+ ...(hasMultipleReasons ? ['Reason'] : []),
101
341
  ];
102
342
  const rightCols = new Set([2, 3]);
103
343
  const rows = topResults.map(r => [
@@ -105,8 +345,9 @@ export function registerStaleCollections(server) {
105
345
  r.collection.name,
106
346
  `${formatNumber(r.stale_item_count)} / ${formatNumber(r.total_children)}`,
107
347
  formatBytes(r.stale_retained_size),
348
+ ...(hasMultipleReasons ? [r.stale_reason] : []),
108
349
  ]);
109
- const output = `Stale collections (${topResults.length} found)\n\n${markdownTable(headers, rows, rightCols)}`;
350
+ const output = `${scanNote}Stale collections (${topResults.length} found)\n\n${markdownTable(headers, rows, rightCols)}`;
110
351
  return toolResult(output +
111
352
  '\n\n---\n\n' +
112
353
  '**Suggested action:** Collections holding detached/stale references prevent garbage collection. ' +
@@ -1 +1 @@
1
- {"version":3,"file":"stale-collections.js","sourceRoot":"","sources":["../../src/tools/stale-collections.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stale-collections.js","sourceRoot":"","sources":["../../src/tools/stale-collections.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"trace-dominators.d.ts","sourceRoot":"","sources":["../../src/tools/trace-dominators.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAqGvE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8M/D"}
1
+ {"version":3,"file":"trace-dominators.d.ts","sourceRoot":"","sources":["../../src/tools/trace-dominators.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAqGvE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4P/D"}
@@ -93,7 +93,12 @@ export function registerTraceDominators(server) {
93
93
  .optional()
94
94
  .default(true)
95
95
  .describe('Collapse repetitive Promise/PromiseReaction chains into a summary (default true)'),
96
- }, async ({ node_id, max_depth, min_retained_size, collapse_promises }) => {
96
+ show_siblings: z
97
+ .boolean()
98
+ .optional()
99
+ .default(false)
100
+ .describe('At each branch point (childCount > 1), show the top-3 children with their edge names and sizes, giving visibility into where memory fans out (default false)'),
101
+ }, async ({ node_id, max_depth, min_retained_size, collapse_promises, show_siblings, }) => {
97
102
  try {
98
103
  const snapshot = getSnapshot();
99
104
  const startNode = snapshot.getNodeById(node_id);
@@ -193,6 +198,28 @@ export function registerTraceDominators(server) {
193
198
  annotations.push(`${formatNumber(s.childCount)} children`);
194
199
  const ann = annotations.length > 0 ? ` — ${annotations.join(', ')}` : '';
195
200
  lines.push(`${indent}${arrow}@${s.nodeId} ${name} (${formatBytes(s.retainedSize)})${ann}`);
201
+ // Show top-3 sibling children at branch points
202
+ if (show_siblings && s.childCount > 1 && !s.collapsedPromiseHops) {
203
+ const siblings = topChildren.get(s.nodeId);
204
+ if (siblings && siblings.length > 1) {
205
+ const parentNode = snapshot.getNodeById(s.nodeId);
206
+ const siblingIndent = indent + ' ';
207
+ const nextNodeId = i + 1 < steps.length ? steps[i + 1].nodeId : -1;
208
+ const otherChildren = siblings
209
+ .filter(c => c.id !== nextNodeId)
210
+ .slice(0, 3);
211
+ if (otherChildren.length > 0) {
212
+ lines.push(`${siblingIndent}_(other children at this branch:)_`);
213
+ for (const child of otherChildren) {
214
+ const cName = truncateNodeName(child.name, child.type, child.self_size, 50);
215
+ const cEdge = parentNode
216
+ ? findEdgeName(parentNode, child.id)
217
+ : null;
218
+ lines.push(`${siblingIndent} [${cEdge ?? '?'}] @${child.id} ${cName} (${formatBytes(child.retainedSize)})`);
219
+ }
220
+ }
221
+ }
222
+ }
196
223
  }
197
224
  // Show top children of the terminal node
198
225
  const terminalStep = rawSteps[rawSteps.length - 1];
@@ -1 +1 @@
1
- {"version":3,"file":"trace-dominators.js","sourceRoot":"","sources":["../../src/tools/trace-dominators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trace-dominators.js","sourceRoot":"","sources":["../../src/tools/trace-dominators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @format
8
+ * @oncall memory_lab
9
+ */
10
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
11
+ export declare function registerWeakMapEntries(server: McpServer): void;
12
+ //# sourceMappingURL=weakmap-entries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weakmap-entries.d.ts","sourceRoot":"","sources":["../../src/tools/weakmap-entries.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAavE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0L9D"}