@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.
Files changed (205) hide show
  1. package/README.md +18 -14
  2. package/bin/.eslintrc.js +26 -0
  3. package/bin/memlab-cli.js +313 -0
  4. package/dist/artifact-classes.d.ts +86 -0
  5. package/dist/artifact-classes.d.ts.map +1 -0
  6. package/dist/artifact-classes.js +261 -0
  7. package/dist/artifact-classes.js.map +1 -0
  8. package/dist/capture-mode.d.ts +60 -0
  9. package/dist/capture-mode.d.ts.map +1 -0
  10. package/dist/capture-mode.js +39 -0
  11. package/dist/capture-mode.js.map +1 -0
  12. package/dist/guardrail.d.ts.map +1 -1
  13. package/dist/guardrail.js +13 -0
  14. package/dist/guardrail.js.map +1 -1
  15. package/dist/heap-state.d.ts +96 -2
  16. package/dist/heap-state.d.ts.map +1 -1
  17. package/dist/heap-state.js +197 -2
  18. package/dist/heap-state.js.map +1 -1
  19. package/dist/index.js +41 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/progress.d.ts +25 -0
  22. package/dist/progress.d.ts.map +1 -0
  23. package/dist/progress.js +46 -0
  24. package/dist/progress.js.map +1 -0
  25. package/dist/result-handles.d.ts +11 -0
  26. package/dist/result-handles.d.ts.map +1 -0
  27. package/dist/result-handles.js +77 -0
  28. package/dist/result-handles.js.map +1 -0
  29. package/dist/string-index.d.ts +55 -0
  30. package/dist/string-index.d.ts.map +1 -0
  31. package/dist/string-index.js +91 -0
  32. package/dist/string-index.js.map +1 -0
  33. package/dist/tool-registry.d.ts +42 -0
  34. package/dist/tool-registry.d.ts.map +1 -0
  35. package/dist/tool-registry.js +20 -0
  36. package/dist/tool-registry.js.map +1 -0
  37. package/dist/tools/analyze-run.d.ts +12 -0
  38. package/dist/tools/analyze-run.d.ts.map +1 -0
  39. package/dist/tools/analyze-run.js +343 -0
  40. package/dist/tools/analyze-run.js.map +1 -0
  41. package/dist/tools/app-heap.d.ts +12 -0
  42. package/dist/tools/app-heap.d.ts.map +1 -0
  43. package/dist/tools/app-heap.js +140 -0
  44. package/dist/tools/app-heap.js.map +1 -0
  45. package/dist/tools/auto-investigate.d.ts.map +1 -1
  46. package/dist/tools/auto-investigate.js +91 -49
  47. package/dist/tools/auto-investigate.js.map +1 -1
  48. package/dist/tools/batch.d.ts +12 -0
  49. package/dist/tools/batch.d.ts.map +1 -0
  50. package/dist/tools/batch.js +168 -0
  51. package/dist/tools/batch.js.map +1 -0
  52. package/dist/tools/cache-analysis.d.ts.map +1 -1
  53. package/dist/tools/cache-analysis.js +156 -5
  54. package/dist/tools/cache-analysis.js.map +1 -1
  55. package/dist/tools/class-histogram.d.ts.map +1 -1
  56. package/dist/tools/class-histogram.js +14 -3
  57. package/dist/tools/class-histogram.js.map +1 -1
  58. package/dist/tools/collection-trend.d.ts +55 -0
  59. package/dist/tools/collection-trend.d.ts.map +1 -0
  60. package/dist/tools/collection-trend.js +315 -0
  61. package/dist/tools/collection-trend.js.map +1 -0
  62. package/dist/tools/detached-dom.d.ts +2 -0
  63. package/dist/tools/detached-dom.d.ts.map +1 -1
  64. package/dist/tools/detached-dom.js +291 -20
  65. package/dist/tools/detached-dom.js.map +1 -1
  66. package/dist/tools/dev-artifacts.d.ts +62 -6
  67. package/dist/tools/dev-artifacts.d.ts.map +1 -1
  68. package/dist/tools/dev-artifacts.js +466 -23
  69. package/dist/tools/dev-artifacts.js.map +1 -1
  70. package/dist/tools/diff-snapshots.d.ts.map +1 -1
  71. package/dist/tools/diff-snapshots.js +101 -44
  72. package/dist/tools/diff-snapshots.js.map +1 -1
  73. package/dist/tools/dominator-attribution.d.ts +12 -0
  74. package/dist/tools/dominator-attribution.d.ts.map +1 -0
  75. package/dist/tools/dominator-attribution.js +189 -0
  76. package/dist/tools/dominator-attribution.js.map +1 -0
  77. package/dist/tools/dominator-chain.d.ts +12 -0
  78. package/dist/tools/dominator-chain.d.ts.map +1 -0
  79. package/dist/tools/dominator-chain.js +92 -0
  80. package/dist/tools/dominator-chain.js.map +1 -0
  81. package/dist/tools/duplicate-objects.d.ts +12 -0
  82. package/dist/tools/duplicate-objects.d.ts.map +1 -0
  83. package/dist/tools/duplicate-objects.js +172 -0
  84. package/dist/tools/duplicate-objects.js.map +1 -0
  85. package/dist/tools/duplicated-strings.d.ts.map +1 -1
  86. package/dist/tools/duplicated-strings.js +46 -38
  87. package/dist/tools/duplicated-strings.js.map +1 -1
  88. package/dist/tools/eval.d.ts +1 -0
  89. package/dist/tools/eval.d.ts.map +1 -1
  90. package/dist/tools/eval.js +787 -30
  91. package/dist/tools/eval.js.map +1 -1
  92. package/dist/tools/explain-delta.d.ts +12 -0
  93. package/dist/tools/explain-delta.d.ts.map +1 -0
  94. package/dist/tools/explain-delta.js +170 -0
  95. package/dist/tools/explain-delta.js.map +1 -0
  96. package/dist/tools/find-nodes-by-class.d.ts.map +1 -1
  97. package/dist/tools/find-nodes-by-class.js +112 -13
  98. package/dist/tools/find-nodes-by-class.js.map +1 -1
  99. package/dist/tools/finding-index.d.ts +22 -0
  100. package/dist/tools/finding-index.d.ts.map +1 -0
  101. package/dist/tools/finding-index.js +247 -0
  102. package/dist/tools/finding-index.js.map +1 -0
  103. package/dist/tools/for-each.d.ts.map +1 -1
  104. package/dist/tools/for-each.js +15 -3
  105. package/dist/tools/for-each.js.map +1 -1
  106. package/dist/tools/get-references.d.ts.map +1 -1
  107. package/dist/tools/get-references.js +35 -6
  108. package/dist/tools/get-references.js.map +1 -1
  109. package/dist/tools/get-referrers.d.ts.map +1 -1
  110. package/dist/tools/get-referrers.js +52 -6
  111. package/dist/tools/get-referrers.js.map +1 -1
  112. package/dist/tools/hunt-report.d.ts +12 -0
  113. package/dist/tools/hunt-report.d.ts.map +1 -0
  114. package/dist/tools/hunt-report.js +186 -0
  115. package/dist/tools/hunt-report.js.map +1 -0
  116. package/dist/tools/hypothesis.d.ts +12 -0
  117. package/dist/tools/hypothesis.d.ts.map +1 -0
  118. package/dist/tools/hypothesis.js +221 -0
  119. package/dist/tools/hypothesis.js.map +1 -0
  120. package/dist/tools/intern-opportunities.d.ts.map +1 -1
  121. package/dist/tools/intern-opportunities.js +721 -75
  122. package/dist/tools/intern-opportunities.js.map +1 -1
  123. package/dist/tools/ladder.d.ts +33 -0
  124. package/dist/tools/ladder.d.ts.map +1 -0
  125. package/dist/tools/ladder.js +266 -0
  126. package/dist/tools/ladder.js.map +1 -0
  127. package/dist/tools/largest-objects.d.ts.map +1 -1
  128. package/dist/tools/largest-objects.js +43 -16
  129. package/dist/tools/largest-objects.js.map +1 -1
  130. package/dist/tools/leak-report.d.ts +12 -0
  131. package/dist/tools/leak-report.d.ts.map +1 -0
  132. package/dist/tools/leak-report.js +256 -0
  133. package/dist/tools/leak-report.js.map +1 -0
  134. package/dist/tools/load-snapshot.d.ts +78 -0
  135. package/dist/tools/load-snapshot.d.ts.map +1 -1
  136. package/dist/tools/load-snapshot.js +519 -29
  137. package/dist/tools/load-snapshot.js.map +1 -1
  138. package/dist/tools/map-entries.d.ts +12 -0
  139. package/dist/tools/map-entries.d.ts.map +1 -0
  140. package/dist/tools/map-entries.js +139 -0
  141. package/dist/tools/map-entries.js.map +1 -0
  142. package/dist/tools/match-object.d.ts +12 -0
  143. package/dist/tools/match-object.d.ts.map +1 -0
  144. package/dist/tools/match-object.js +165 -0
  145. package/dist/tools/match-object.js.map +1 -0
  146. package/dist/tools/object-shape.d.ts.map +1 -1
  147. package/dist/tools/object-shape.js +92 -30
  148. package/dist/tools/object-shape.js.map +1 -1
  149. package/dist/tools/population-diff.d.ts +57 -0
  150. package/dist/tools/population-diff.d.ts.map +1 -0
  151. package/dist/tools/population-diff.js +338 -0
  152. package/dist/tools/population-diff.js.map +1 -0
  153. package/dist/tools/quick-diagnosis.d.ts.map +1 -1
  154. package/dist/tools/quick-diagnosis.js +12 -4
  155. package/dist/tools/quick-diagnosis.js.map +1 -1
  156. package/dist/tools/retainer-layers.d.ts +23 -0
  157. package/dist/tools/retainer-layers.d.ts.map +1 -0
  158. package/dist/tools/retainer-layers.js +179 -0
  159. package/dist/tools/retainer-layers.js.map +1 -0
  160. package/dist/tools/retainer-summary.d.ts +1 -0
  161. package/dist/tools/retainer-summary.d.ts.map +1 -1
  162. package/dist/tools/retainer-summary.js +128 -32
  163. package/dist/tools/retainer-summary.js.map +1 -1
  164. package/dist/tools/retainer-trace.d.ts.map +1 -1
  165. package/dist/tools/retainer-trace.js +105 -25
  166. package/dist/tools/retainer-trace.js.map +1 -1
  167. package/dist/tools/search-nodes.d.ts.map +1 -1
  168. package/dist/tools/search-nodes.js +5 -1
  169. package/dist/tools/search-nodes.js.map +1 -1
  170. package/dist/tools/search-strings.d.ts.map +1 -1
  171. package/dist/tools/search-strings.js +53 -7
  172. package/dist/tools/search-strings.js.map +1 -1
  173. package/dist/tools/sequence-analysis.d.ts +49 -0
  174. package/dist/tools/sequence-analysis.d.ts.map +1 -1
  175. package/dist/tools/sequence-analysis.js +268 -78
  176. package/dist/tools/sequence-analysis.js.map +1 -1
  177. package/dist/tools/shape-histogram.d.ts.map +1 -1
  178. package/dist/tools/shape-histogram.js +9 -2
  179. package/dist/tools/shape-histogram.js.map +1 -1
  180. package/dist/tools/sliced-strings.d.ts.map +1 -1
  181. package/dist/tools/sliced-strings.js +22 -4
  182. package/dist/tools/sliced-strings.js.map +1 -1
  183. package/dist/tools/snapshot-header.d.ts +28 -0
  184. package/dist/tools/snapshot-header.d.ts.map +1 -0
  185. package/dist/tools/snapshot-header.js +111 -0
  186. package/dist/tools/snapshot-header.js.map +1 -0
  187. package/dist/tools/string-patterns.d.ts.map +1 -1
  188. package/dist/tools/string-patterns.js +5 -4
  189. package/dist/tools/string-patterns.js.map +1 -1
  190. package/dist/tools/tools-index.d.ts +12 -0
  191. package/dist/tools/tools-index.d.ts.map +1 -0
  192. package/dist/tools/tools-index.js +342 -0
  193. package/dist/tools/tools-index.js.map +1 -0
  194. package/dist/tools/verify-fix.d.ts +23 -0
  195. package/dist/tools/verify-fix.d.ts.map +1 -0
  196. package/dist/tools/verify-fix.js +211 -0
  197. package/dist/tools/verify-fix.js.map +1 -0
  198. package/dist/tools/weakmap-entries.d.ts.map +1 -1
  199. package/dist/tools/weakmap-entries.js +6 -1
  200. package/dist/tools/weakmap-entries.js.map +1 -1
  201. package/dist/utils.d.ts +204 -1
  202. package/dist/utils.d.ts.map +1 -1
  203. package/dist/utils.js +478 -8
  204. package/dist/utils.js.map +1 -1
  205. package/package.json +5 -4
@@ -7,9 +7,12 @@
7
7
  * @format
8
8
  * @oncall memory_lab
9
9
  */
10
+ import memlabCore from '@memlab/core';
11
+ const { utils, NumericSet } = memlabCore;
10
12
  import { z } from 'zod';
11
13
  import { getSnapshot, getSnapshotMetadata } from '../heap-state.js';
12
- import { formatBytes, markdownTable, truncateNodeName, errorResult, toolResult, } from '../utils.js';
14
+ import { describeSkipped, formatBytes, formatNumber, markdownTable, truncateNodeName, errorResult, toolResult, } from '../utils.js';
15
+ import { isReactRefreshSignatureShape, REACT_REFRESH_REGISTRY_EDGE_NAMES, REACT_REFRESH_SIGNATURE_GATE_PROP, } from '../artifact-classes.js';
13
16
  // Globals installed by browser dev tools / extensions. Anything retained ONLY
14
17
  // through one of these would be garbage-collected in production — it's a
15
18
  // profiling artifact, not a real leak (Feedback round 2 §6).
@@ -24,7 +27,157 @@ const DEV_GLOBAL_EDGE_NAMES = new Set([
24
27
  '__RECOIL_DEVTOOLS_EXTENSION__',
25
28
  'Debug', // window.Debug — common debugging handle (e.g. WhatsApp Web)
26
29
  ]);
30
+ // React Fast Refresh (react-refresh) bookkeeping, installed on the global by the
31
+ // DEV-only runtime. `$RefreshSig$` / `$RefreshReg$` close over the refresh
32
+ // runtime's module-scope registries — `allFamiliesByID`, `allSignaturesByType`,
33
+ // and the family/signature maps behind them — which hold every component type
34
+ // and hook signature the page has ever compiled, plus the fibers and DOM those
35
+ // types transitively reach.
36
+ //
37
+ // Neither the globals nor the registries exist in a production build, but the
38
+ // chain roots at the real Window (not at a devtools hook or the inspector), so
39
+ // every earlier check classified the whole family `production`. Measured cost of
40
+ // getting this wrong: on one WA Web round ~93 MB of a 137.7 MB "detached DOM
41
+ // leak" was Fast Refresh retention, and a later round reported a 16,375-entry /
42
+ // 1.2 MB `allFamiliesByID` Map as a production cache-like collection. Both were
43
+ // dev-build-only.
44
+ const REACT_REFRESH_GLOBAL_EDGE_NAMES = new Set([
45
+ '$RefreshSig$',
46
+ '$RefreshReg$',
47
+ ]);
48
+ // Detecting Fast Refresh by its GLOBALS alone is not enough, and the gap is
49
+ // large rather than marginal. `$RefreshSig$` / `$RefreshReg$` are thin wrappers;
50
+ // the registries they talk to live in the refresh runtime's module scope and are
51
+ // reachable only through compiled-code constant pools
52
+ // (`system/TrustedWeakFixedArray`, `system/InstructionStream`), so the globals
53
+ // DOMINATE almost nothing and the registries stay classified `production`.
54
+ //
55
+ // Measured on a WhatsApp Web round: dev_artifacts reported
56
+ // `React Fast Refresh registry ($RefreshSig$) x2` and attributed 1.4 KB, while
57
+ // in the same snapshot the `allSignaturesByType` WeakMap's backing table alone
58
+ // was 4,096 KB and `allFamiliesByID` held 16,367 entries / 1.2 MB. The 4 MB was
59
+ // filed as a production optimization opportunity before being withdrawn.
60
+ //
61
+ // So match the registries by CONTENT as well, independent of retainer path:
62
+ //
63
+ // 1. the registry container, by the edge name that binds it in module scope;
64
+ // 2. the per-type signature record react-refresh stores via
65
+ // `setSignature(type, key, forceReset, getCustomHooks)`.
66
+ //
67
+ // Both signatures live in `artifact-classes`, which is where every
68
+ // content-matched non-production family is registered.
69
+ /**
70
+ * True when `node` is a react-refresh signature record. Callers gate on the
71
+ * rare property first; this confirms the rest.
72
+ */
73
+ function isReactRefreshSignatureRecord(node) {
74
+ const propNames = [];
75
+ for (const edge of node.references) {
76
+ if (edge.type !== 'property')
77
+ continue;
78
+ propNames.push(String(edge.name_or_index));
79
+ }
80
+ return isReactRefreshSignatureShape(propNames);
81
+ }
82
+ // The automation/devtools *bridge* injected into the page by a CDP-driven
83
+ // harness (the browser MCP plugin, a browser-tools extension, Puppeteer helper
84
+ // bundles). This is the harness observing the app, not the app.
85
+ //
86
+ // Two independent signatures, both observed on real hunts:
87
+ // - `TOOL_DEFINITIONS`: the bridge's tool manifest, reached through its
88
+ // listener closure's scope chain. On one run it held 64 `.description`
89
+ // strings that `intern_opportunities` then reported as the single largest
90
+ // interning opportunity in the heap.
91
+ // - bridge entry points by name (`getDevToolBridge`,
92
+ // `BrowserToolsSuspenseInterop`), which show up as multi-MB `production`
93
+ // retainers in `dev_artifacts`' own table.
94
+ //
95
+ // Like `_debugStack` this is found by scanning edges rather than global roots,
96
+ // because the bridge is reached from ordinary app-side listeners.
97
+ const HARNESS_EDGE_NAMES = new Set(['TOOL_DEFINITIONS']);
98
+ const HARNESS_NODE_NAME_RE = /getDevToolBridge|BrowserToolsSuspenseInterop|__BROWSER_TOOLS_|__PUPPETEER_/;
27
99
  const DEV_NODE_NAME_RE = /__REACT_DEVTOOLS|DEVTOOLS_GLOBAL_HOOK|ReactDevTools/;
100
+ // Blink accessibility caches. Under CDP-driven automation the a11y tree is
101
+ // materialized (and browser_take_snapshot inflates it further), so this native
102
+ // cache balloons and co-retains detached DOM — automation-inflated retention
103
+ // that is not present at that scale in a normal user session, so it should not
104
+ // be counted toward a production leak total (Feedback: WA Web hunts §A).
105
+ const AX_NODE_NAME_RE = /AXObjectCache|AXNodeObject|AXDirtyObject|AXComputedObject|blink::AX/;
106
+ // CDP / DevTools inspector retention. When DevTools — or a CDP-driven
107
+ // automation session (Puppeteer / the browser MCP) — is attached, any object
108
+ // passed to console.log (or a dev-build devConsole) is held by the inspector
109
+ // via edges on the "(Global handles)" synthetic node named ".../ DevTools
110
+ // console". Such an object, and any subtree it pins (e.g. a logged
111
+ // `{node}` keeping a detached DOM tree alive), would be garbage-collected in a
112
+ // real user session with DevTools closed, so retention ONLY through them is a
113
+ // measurement artifact, not a production leak. `dev_artifacts` previously
114
+ // missed this because it only knew about dev globals and the a11y cache, which
115
+ // caused console-retained detached DOM to be mis-reported as production-real
116
+ // (Feedback round 3 §A).
117
+ const GLOBAL_HANDLES_NODE_NAME = '(Global handles)';
118
+ const CONSOLE_HANDLE_EDGE_RE = /DevTools console/i;
119
+ // React DEV-build owner stacks. In a development build React attaches
120
+ // `_debugStack` (a captured `Error`) to fibers. That Error's `ErrorStackData`
121
+ // holds the captured stack-frame array, which holds whatever closures were on
122
+ // the stack — commonly the `batchedUpdates` closure whose scope still refers to
123
+ // the handler's `nativeEvent`, which in turn pins the DOM subtree that was being
124
+ // unmounted. The result is a detached subtree retained entirely by DEV-only
125
+ // bookkeeping.
126
+ //
127
+ // This family is invisible to the checks above because the chain is rooted at a
128
+ // LIVE DOM element's fiber, not at a dev global or the inspector — so it was
129
+ // classified `production` and read as a genuine unmount leak. It is production-
130
+ // safe (`_debugStack` does not exist in a production React build) and, because
131
+ // it hangs off whatever handler was running, it fires on ANY synthetic-click
132
+ // hammer that unmounts a subtree.
133
+ //
134
+ // Marking the Error itself as a dev root is enough: the existing dev-only
135
+ // reachability pass then attributes the whole ErrorStackData -> frames ->
136
+ // closure -> nativeEvent -> detached-subtree chain to it.
137
+ const REACT_DEBUG_STACK_EDGE_NAMES = new Set(['_debugStack', '_debugTask']);
138
+ const CATEGORY_LABEL = {
139
+ console: 'DevTools console (CDP inspector)',
140
+ a11y: 'a11y / CDP automation cache',
141
+ devGlobal: 'dev/extension global',
142
+ reactDebugStack: 'React DEV owner stack (_debugStack)',
143
+ reactFastRefresh: 'React Fast Refresh registry ($RefreshSig$)',
144
+ harness: 'automation/devtools bridge (test harness)',
145
+ };
146
+ /**
147
+ * One-line summary of the dev/automation roots present, as counts per family.
148
+ *
149
+ * The full list was printed on every call and is unbounded: each Blink a11y
150
+ * object and each bridge export is its own root, so a measured WhatsApp Web run
151
+ * spent ~1,500 tokens per call on a single comma-separated line of names, and an
152
+ * Ads Manager run repeated an entire multi-sentence React warning inside it.
153
+ * Nothing downstream keyed on the individual names — the reader needs to know
154
+ * WHICH FAMILIES are present, which is what the categories already encode.
155
+ * `show_roots: true` restores the full list for the rare case of chasing one
156
+ * specific root.
157
+ */
158
+ export function summarizeDevRoots(devRoots, showAll = false) {
159
+ if (devRoots.byId.size === 0)
160
+ return 'none';
161
+ if (showAll) {
162
+ return [...new Set(devRoots.byId.values())].join(', ');
163
+ }
164
+ const byCat = new Map();
165
+ let uncategorized = 0;
166
+ for (const id of devRoots.byId.keys()) {
167
+ const cat = devRoots.categoryById.get(id);
168
+ if (cat == null) {
169
+ uncategorized++;
170
+ continue;
171
+ }
172
+ byCat.set(cat, (byCat.get(cat) ?? 0) + 1);
173
+ }
174
+ const parts = [...byCat.entries()]
175
+ .sort((a, b) => b[1] - a[1])
176
+ .map(([cat, n]) => `${CATEGORY_LABEL[cat]} ×${n}`);
177
+ if (uncategorized > 0)
178
+ parts.push(`other ×${uncategorized}`);
179
+ return `${devRoots.byId.size} root(s) — ${parts.join(', ')}`;
180
+ }
28
181
  /**
29
182
  * Find the dev/extension "root" objects: the targets of dev-global edges on
30
183
  * the Window/global object, plus any node whose own name marks it as a
@@ -32,6 +185,7 @@ const DEV_NODE_NAME_RE = /__REACT_DEVTOOLS|DEVTOOLS_GLOBAL_HOOK|ReactDevTools/;
32
185
  */
33
186
  export function collectDevRoots(snapshot) {
34
187
  const byId = new Map();
188
+ const categoryById = new Map();
35
189
  snapshot.nodes.forEach(node => {
36
190
  if (node.id <= 3)
37
191
  return;
@@ -43,25 +197,244 @@ export function collectDevRoots(snapshot) {
43
197
  const eName = String(edge.name_or_index);
44
198
  if (DEV_GLOBAL_EDGE_NAMES.has(eName) && edge.toNode.id > 3) {
45
199
  byId.set(edge.toNode.id, eName);
200
+ categoryById.set(edge.toNode.id, 'devGlobal');
201
+ }
202
+ if (REACT_REFRESH_GLOBAL_EDGE_NAMES.has(eName) && edge.toNode.id > 3) {
203
+ byId.set(edge.toNode.id, `${eName} (React Fast Refresh; absent in production builds)`);
204
+ categoryById.set(edge.toNode.id, 'reactFastRefresh');
205
+ }
206
+ }
207
+ }
208
+ // Objects held only by the attached inspector's console (CDP global
209
+ // handles named ".../ DevTools console"). Mark just those targets — NOT the
210
+ // whole (Global handles) node, which also holds legitimate native/global
211
+ // handles for real app objects.
212
+ if (node.name === GLOBAL_HANDLES_NODE_NAME) {
213
+ for (const edge of node.references) {
214
+ if (CONSOLE_HANDLE_EDGE_RE.test(String(edge.name_or_index)) &&
215
+ edge.toNode.id > 3) {
216
+ byId.set(edge.toNode.id, 'DevTools console (CDP inspector-retained; GC-eligible with DevTools closed)');
217
+ categoryById.set(edge.toNode.id, 'console');
46
218
  }
47
219
  }
48
220
  }
221
+ // React DEV owner stacks hang off fibers, which are reachable from LIVE
222
+ // DOM nodes — so they are found by scanning edges, not global roots. The
223
+ // automation bridge is reached the same way, from app-side listeners.
224
+ for (const edge of node.references) {
225
+ const eName = String(edge.name_or_index);
226
+ if (REACT_DEBUG_STACK_EDGE_NAMES.has(eName) && edge.toNode.id > 3) {
227
+ byId.set(edge.toNode.id, 'React DEV owner stack (_debugStack; absent in production builds)');
228
+ categoryById.set(edge.toNode.id, 'reactDebugStack');
229
+ }
230
+ if (HARNESS_EDGE_NAMES.has(eName) && edge.toNode.id > 3) {
231
+ byId.set(edge.toNode.id, `${eName} (automation/devtools bridge injected by the harness)`);
232
+ categoryById.set(edge.toNode.id, 'harness');
233
+ }
234
+ // Fast Refresh registries bound in the refresh runtime's module scope.
235
+ // Matched by edge name rather than by retainer path, because the path
236
+ // runs through compiled-code constant pools that no dev global dominates.
237
+ if (REACT_REFRESH_REGISTRY_EDGE_NAMES.has(eName) && edge.toNode.id > 3) {
238
+ byId.set(edge.toNode.id, `${eName} (React Fast Refresh registry; absent in production builds)`);
239
+ categoryById.set(edge.toNode.id, 'reactFastRefresh');
240
+ }
241
+ // The signature record itself, so entries survive being read out of a
242
+ // WeakMap whose table is not itself dominated by the registry edge.
243
+ if (eName === REACT_REFRESH_SIGNATURE_GATE_PROP &&
244
+ node.id > 3 &&
245
+ isReactRefreshSignatureRecord(node)) {
246
+ byId.set(node.id, 'react-refresh signature record ({forceReset, ownKey, fullKey, getCustomHooks}; absent in production builds)');
247
+ categoryById.set(node.id, 'reactFastRefresh');
248
+ }
249
+ }
49
250
  if (DEV_NODE_NAME_RE.test(node.name)) {
50
251
  byId.set(node.id, node.name);
252
+ categoryById.set(node.id, 'devGlobal');
253
+ }
254
+ if (AX_NODE_NAME_RE.test(node.name)) {
255
+ byId.set(node.id, `${node.name} (a11y/CDP automation cache)`);
256
+ categoryById.set(node.id, 'a11y');
257
+ }
258
+ if (HARNESS_NODE_NAME_RE.test(node.name)) {
259
+ byId.set(node.id, `${node.name} (automation/devtools bridge)`);
260
+ categoryById.set(node.id, 'harness');
51
261
  }
52
262
  });
53
- return { byId };
263
+ return { byId, categoryById };
54
264
  }
55
265
  /**
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.
266
+ * Reachability from GC roots with every dev/automation root treated as a sink
267
+ * (its outgoing edges are not followed). Returns a bitmap indexed by
268
+ * `node.nodeIndex`: 1 = still reachable from a real GC root without passing
269
+ * through a dev root (production-reachable), 0 = reachable ONLY through one or
270
+ * more dev roots (a dev/automation-only artifact).
271
+ *
272
+ * This is stricter and more complete than a dominator walk: when an object is
273
+ * co-retained by SEVERAL different dev roots (e.g. the DevTools console AND the
274
+ * a11y cache both point at the same detached-DOM subtree), no single dev root
275
+ * dominates it, so a dominator walk misses it — but it is still dev-only because
276
+ * every path to it passes through some dev root. This pass catches that case.
61
277
  */
62
- export function classifyDevOnly(node, devRoots, maxWalk = 1000) {
278
+ export function computeReachableWithoutDevRoots(snapshot, devRoots) {
279
+ const { byId } = devRoots;
280
+ const reached = new Uint8Array(snapshot.nodes.length);
281
+ const stack = [];
282
+ // Seed from the synthetic GC roots (the "(GC roots)" super-root and its
283
+ // synthetic children such as "(Global handles)"): all real objects are
284
+ // reachable from these. A dev root that is itself synthetic is seeded but not
285
+ // expanded.
286
+ snapshot.nodes.forEach(node => {
287
+ if (node.type !== 'synthetic' && node.id > 3)
288
+ return;
289
+ if (reached[node.nodeIndex])
290
+ return;
291
+ reached[node.nodeIndex] = 1;
292
+ if (!byId.has(node.id))
293
+ stack.push(node);
294
+ });
295
+ while (stack.length > 0) {
296
+ const node = stack.pop();
297
+ node.forEachReference((edge) => {
298
+ const to = edge.toNode;
299
+ if (reached[to.nodeIndex])
300
+ return;
301
+ reached[to.nodeIndex] = 1;
302
+ // Mark the dev root reached (it is held by a real global handle) but do
303
+ // NOT follow its edges — anything reachable only through it is dev-only.
304
+ if (!byId.has(to.id))
305
+ stack.push(to);
306
+ });
307
+ }
308
+ return reached;
309
+ }
310
+ const CATEGORY_BIT = {
311
+ console: 1,
312
+ a11y: 2,
313
+ devGlobal: 4,
314
+ reactDebugStack: 8,
315
+ reactFastRefresh: 16,
316
+ harness: 32,
317
+ };
318
+ /**
319
+ * Whole-heap total of everything retained ONLY via dev/automation roots, plus a
320
+ * per-source breakdown.
321
+ *
322
+ * This is deliberately independent of any display threshold. The previous
323
+ * implementation accumulated the total inside the same loop that filtered
324
+ * candidates by `min_retained_size`, so the headline number only counted
325
+ * objects above the cutoff. With the 512 KB default that made a heap holding
326
+ * thousands of small console-retained objects report **0 B dev-only** — read by
327
+ * a caller as "this is production-real". Whole classes of artifact (per-event
328
+ * log strings, one logged object per interaction) are individually tiny and
329
+ * collectively large, which is exactly the case that matters.
330
+ *
331
+ * Attribution is a single BFS over the dev-only subgraph, seeded from each dev
332
+ * root's dev-only successors and OR-ing a category bit as it goes, so a subtree
333
+ * co-retained by several artifact families is counted under each.
334
+ */
335
+ export function summarizeDevOnly(snapshot, devRoots, reached) {
336
+ const { byId, categoryById } = devRoots;
337
+ const mask = new Uint8Array(snapshot.nodes.length);
338
+ const stack = [];
339
+ const devOnlyIds = new NumericSet();
340
+ let nodes = 0;
341
+ // Seed: dev-only successors of each dev root, tagged with that root's family.
342
+ snapshot.nodes.forEach(node => {
343
+ const cat = categoryById.get(node.id);
344
+ if (cat == null || !byId.has(node.id))
345
+ return;
346
+ const bit = CATEGORY_BIT[cat];
347
+ node.forEachReference((edge) => {
348
+ const to = edge.toNode;
349
+ if (reached[to.nodeIndex])
350
+ return; // production-reachable, not an artifact
351
+ if ((mask[to.nodeIndex] & bit) !== 0)
352
+ return;
353
+ mask[to.nodeIndex] |= bit;
354
+ stack.push(to);
355
+ });
356
+ });
357
+ while (stack.length > 0) {
358
+ const node = stack.pop();
359
+ const bits = mask[node.nodeIndex];
360
+ node.forEachReference((edge) => {
361
+ const to = edge.toNode;
362
+ if (reached[to.nodeIndex])
363
+ return;
364
+ if ((mask[to.nodeIndex] & bits) === bits)
365
+ return; // nothing new to add
366
+ mask[to.nodeIndex] |= bits;
367
+ stack.push(to);
368
+ });
369
+ }
370
+ const byCategory = new Map();
371
+ snapshot.nodes.forEach(node => {
372
+ if (node.id <= 3)
373
+ return;
374
+ if (reached[node.nodeIndex])
375
+ return;
376
+ nodes++;
377
+ devOnlyIds.add(node.id);
378
+ const bits = mask[node.nodeIndex];
379
+ for (const cat of Object.keys(CATEGORY_BIT)) {
380
+ if ((bits & CATEGORY_BIT[cat]) === 0)
381
+ continue;
382
+ const cur = byCategory.get(cat) ?? { nodes: 0, selfBytes: 0 };
383
+ cur.nodes++;
384
+ cur.selfBytes += node.self_size;
385
+ byCategory.set(cat, cur);
386
+ }
387
+ });
388
+ // Dominator-deduplicated so nested artifacts are not double-counted.
389
+ const retained = nodes === 0
390
+ ? 0
391
+ : utils.aggregateDominatorMetrics(devOnlyIds, snapshot, () => true, (node) => node.retainedSize);
392
+ return { nodes, retained, byCategory };
393
+ }
394
+ /**
395
+ * Find a dev-root name on the node's shortest retainer path, for the "via"
396
+ * label. Best-effort: the shortest path usually runs through the dominant
397
+ * retainer; falls back to a generic label when it does not.
398
+ */
399
+ function findDevRootVia(node, devRoots) {
400
+ let cur = node;
401
+ const seen = new Set();
402
+ let steps = 0;
403
+ while (cur && cur.hasPathEdge && steps < 1000) {
404
+ const edge = cur.pathEdge;
405
+ if (!edge)
406
+ break;
407
+ const from = edge.fromNode;
408
+ const via = devRoots.byId.get(from.id);
409
+ if (via != null)
410
+ return via;
411
+ if (seen.has(from.id))
412
+ break;
413
+ seen.add(from.id);
414
+ cur = from;
415
+ steps++;
416
+ }
417
+ return null;
418
+ }
419
+ /**
420
+ * Classify whether a node is retained ONLY via dev/automation roots. Prefer the
421
+ * reachability bitmap from `computeReachableWithoutDevRoots` (rigorous and
422
+ * complete, including multi-dev-root co-retention). Without a bitmap, fall back
423
+ * to a dominator walk: if a dev root *dominates* the node, every path to it
424
+ * passes through that dev object — conservative, catches only single-dev-root
425
+ * retention.
426
+ */
427
+ export function classifyDevOnly(node, devRoots, reached, maxWalk = 1000) {
63
428
  if (devRoots.byId.size === 0)
64
429
  return { devOnly: false, via: null };
430
+ if (reached != null) {
431
+ if (reached[node.nodeIndex])
432
+ return { devOnly: false, via: null };
433
+ return {
434
+ devOnly: true,
435
+ via: findDevRootVia(node, devRoots) ?? 'dev/automation roots',
436
+ };
437
+ }
65
438
  let cur = node.dominatorNode ?? null;
66
439
  let steps = 0;
67
440
  while (cur && steps < maxWalk) {
@@ -76,7 +449,7 @@ export function classifyDevOnly(node, devRoots, maxWalk = 1000) {
76
449
  return { devOnly: false, via: null };
77
450
  }
78
451
  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.', {
452
+ server.tool('memlab_dev_artifacts', 'Classify large retainers as production-relevant vs. dev/automation-only (browser snapshots). Flags any object retained ONLY through a dev/extension global (__REACT_DEVTOOLS_GLOBAL_HOOK__, __REDUX_DEVTOOLS_EXTENSION__, window.Debug, …), through a Blink accessibility cache (AXObjectCacheImpl/AXNodeObject/AXDirtyObject) inflated by CDP-driven automation building the a11y tree, OR through the attached inspector\'s console objects passed to console.log / a dev-build devConsole are held by DevTools/CDP via "(Global handles) / DevTools console" edges (and can pin a whole detached DOM subtree, e.g. a logged {node} ref), which are GC\'d once DevTools/automation detaches. All three are measurement artifacts that should not be counted as production leaks. Reports total bytes attributable to them so "241 MB leak!" headlines that are really DevTools / a11y-cache / console retention get caught.', {
80
453
  limit: z
81
454
  .number()
82
455
  .optional()
@@ -92,30 +465,77 @@ export function registerDevArtifacts(server) {
92
465
  .optional()
93
466
  .default(false)
94
467
  .describe('Show only the dev-only artifacts (default false: show both, dev-only flagged).'),
95
- }, async ({ limit, min_retained_size, only_dev }) => {
468
+ show_roots: z
469
+ .boolean()
470
+ .optional()
471
+ .default(false)
472
+ .describe('List every dev/automation root by name instead of summarizing them as counts per family (default false). The full list is unbounded — one root per a11y object and per bridge export — and cost ~1,500 tokens per call on a measured run. Use it only when chasing one specific root.'),
473
+ }, async ({ limit, min_retained_size, only_dev, show_roots }) => {
96
474
  try {
97
475
  const snapshot = getSnapshot();
98
476
  const meta = getSnapshotMetadata();
99
477
  const totalSize = meta?.totalSize ?? 0;
100
478
  const devRoots = collectDevRoots(snapshot);
101
479
  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.');
480
+ return toolResult('No dev/extension globals (__REACT_DEVTOOLS_GLOBAL_HOOK__, __REDUX_DEVTOOLS_EXTENSION__, window.Debug, …) or accessibility caches (AXObjectCacheImpl, …) found in this snapshot. ' +
481
+ 'Either this is a production/clean capture, or none were installed — large retainers here are NOT dev/automation artifacts.');
104
482
  }
483
+ // One reachability pass (dev roots as sinks) drives every
484
+ // classification below — catches multi-dev-root co-retention that a
485
+ // per-node dominator walk misses.
486
+ const reached = computeReachableWithoutDevRoots(snapshot, devRoots);
105
487
  const cands = [];
106
- let devOnlyBytes = 0;
488
+ // Whole-heap total, independent of `min_retained_size` (see
489
+ // summarizeDevOnly): the headline number must never be filtered by the
490
+ // display threshold.
491
+ const totals = summarizeDevOnly(snapshot, devRoots, reached);
492
+ let examined = 0;
493
+ let skippedBySize = 0;
494
+ // Dev-only objects that fall UNDER the display threshold, aggregated by
495
+ // class. The headline total already counts them, but the table did not
496
+ // show them at any size, so the common shape of an automation artifact —
497
+ // thousands of ~10 KB console-retained records, none individually near
498
+ // the 512 KB default — was invisible: a reader saw "N MB is dev-only",
499
+ // scanned an empty-looking table, and concluded there was nothing to
500
+ // discount. Grouping restores them without lowering the threshold.
501
+ const belowByClass = new Map();
502
+ let belowDevOnlyCount = 0;
503
+ let belowDevOnlyBytes = 0;
107
504
  snapshot.nodes.forEach(node => {
108
505
  if (node.id <= 3)
109
506
  return;
110
- if (node.retainedSize < min_retained_size)
111
- return;
112
507
  if (node.type !== 'object' &&
113
508
  node.type !== 'closure' &&
114
509
  node.type !== 'array')
115
510
  return;
116
- const { devOnly, via } = classifyDevOnly(node, devRoots);
117
- if (devOnly)
118
- devOnlyBytes += node.retainedSize;
511
+ examined++;
512
+ if (node.retainedSize < min_retained_size) {
513
+ skippedBySize++;
514
+ // Test reachability directly rather than via classifyDevOnly: the
515
+ // latter also resolves the "via" label by walking retainers, which
516
+ // is far too expensive to pay per node on the below-threshold tail.
517
+ if (reached[node.nodeIndex] === 0) {
518
+ belowDevOnlyCount++;
519
+ // SELF size, not retained: retained sizes overlap wherever these
520
+ // objects nest, so summing them across a class reports more than
521
+ // exists. Self size is additive, and matches the units the
522
+ // "By source" breakdown above already uses.
523
+ belowDevOnlyBytes += node.self_size;
524
+ const key = node.name.length > 0
525
+ ? truncateNodeName(node.name, node.type, node.self_size, 40)
526
+ : `(unnamed ${node.type})`;
527
+ const e = belowByClass.get(key);
528
+ if (e) {
529
+ e.count++;
530
+ e.bytes += node.self_size;
531
+ }
532
+ else {
533
+ belowByClass.set(key, { count: 1, bytes: node.self_size });
534
+ }
535
+ }
536
+ return;
537
+ }
538
+ const { devOnly, via } = classifyDevOnly(node, devRoots, reached);
119
539
  if (only_dev && !devOnly)
120
540
  return;
121
541
  // keep top-N by retained size
@@ -129,16 +549,22 @@ export function registerDevArtifacts(server) {
129
549
  if (cands.length > limit)
130
550
  cands.length = limit;
131
551
  });
552
+ const breakdown = [...totals.byCategory.entries()]
553
+ .sort((a, b) => b[1].selfBytes - a[1].selfBytes)
554
+ .map(([cat, v]) => `${CATEGORY_LABEL[cat]} ${formatBytes(v.selfBytes)} self across ${formatNumber(v.nodes)} objects`);
132
555
  const lines = [
133
556
  '## Dev-only artifact classification',
134
557
  '',
135
- `Dev/extension globals present: ${[...new Set(devRoots.byId.values())].join(', ')}`,
136
- `Total retained held ONLY via dev artifacts: **${formatBytes(devOnlyBytes)}**` +
558
+ `Dev/automation roots present: ${summarizeDevRoots(devRoots, show_roots)}`,
559
+ `Total retained held ONLY via dev/automation artifacts: **${formatBytes(totals.retained)}** across **${formatNumber(totals.nodes)} objects**` +
137
560
  (totalSize > 0
138
- ? ` (${Math.min(100, (devOnlyBytes / totalSize) * 100).toFixed(1)}% of heap — exclude from production leak totals)`
561
+ ? ` (${Math.min(100, (totals.retained / totalSize) * 100).toFixed(1)}% of heap — exclude from production leak totals)`
139
562
  : ''),
140
- '',
141
563
  ];
564
+ if (breakdown.length > 0) {
565
+ lines.push(`By source: ${breakdown.join(' · ')}`);
566
+ }
567
+ lines.push('_This total covers the whole heap and is NOT limited by `min_retained_size` — high-count/low-size artifacts (per-event log strings, one logged object per interaction) are included._', '', "> ⚠️ **This is not the whole artifact bill.** This tool measures RETENTION-BY-A-DEV-ROOT (dev/extension globals, the inspector console, a11y caches, Fast Refresh, the automation bridge). It does NOT count **V8 JIT warmup** — `system/Code`, `InstructionStream`, `BytecodeArray`, `ProtectedFixedArray` — which is a separate and often larger bucket, and which grows simply because a hunt exercises new code paths. On one measured round this tool reported 4.8 MB / 1.5% dev-only while JIT warmup accounted for +5.7 MB of that round's 10.8 MB of growth. For the growth-side view of both, run `memlab_explain_delta` with `include_artifacts: true` against the baseline rung.", '');
142
568
  if (cands.length > 0) {
143
569
  const headers = ['ID', 'Name', 'Type', 'Retained', 'Classification'];
144
570
  const rightCols = new Set([3]);
@@ -154,7 +580,24 @@ export function registerDevArtifacts(server) {
154
580
  else {
155
581
  lines.push('No objects matched the size threshold.');
156
582
  }
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`._');
583
+ lines.push('', describeSkipped(examined, skippedBySize, `min_retained_size (${formatBytes(min_retained_size)})`));
584
+ // Below-threshold dev-only artifacts, grouped so a large aggregate made
585
+ // of small objects is visible in the table rather than only in the
586
+ // headline total.
587
+ if (belowDevOnlyCount > 0) {
588
+ const top = [...belowByClass.entries()]
589
+ .sort((a, b) => b[1].bytes - a[1].bytes)
590
+ .slice(0, 8);
591
+ lines.push('', `### Below \`min_retained_size\` — dev-only, aggregated by class`, '', `**${formatNumber(belowDevOnlyCount)} dev-only object(s) totalling ${formatBytes(belowDevOnlyBytes)} of self size** are individually under the ${formatBytes(min_retained_size)} threshold, so none appears above. This is the usual shape of an automation artifact: many small records, no single large one.`, '', markdownTable(['Class', 'Count', 'Self (sum)'], top.map(([name, v]) => [
592
+ name,
593
+ formatNumber(v.count),
594
+ formatBytes(v.bytes),
595
+ ]), new Set([1, 2])));
596
+ if (belowByClass.size > top.length) {
597
+ lines.push('', `_… +${formatNumber(belowByClass.size - top.length)} more class(es). Lower \`min_retained_size\` to list individual objects._`);
598
+ }
599
+ }
600
+ lines.push('', '_"dev-only" = the object\'s dominator chain passes through a dev/extension global, a Blink a11y cache, or an inspector "DevTools console" global handle, so every retainer path goes through it. Dev-global-retained objects would be GC\'d in production; a11y-cache and DevTools-console retention are automation/inspector-inflated (the a11y tree is materialized by CDP; console-logged objects are held by the attached inspector) and not present in a normal user session with DevTools closed. Either way, discount from production leak totals. Verify with `memlab_retainer_trace`._');
158
601
  return toolResult(lines.join('\n'));
159
602
  }
160
603
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"dev-artifacts.js","sourceRoot":"","sources":["../../src/tools/dev-artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,WAAW,EAAE,mBAAmB,EAAC,MAAM,kBAAkB,CAAC;AAClE,OAAO,EACL,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,8EAA8E;AAC9E,yEAAyE;AACzE,6DAA6D;AAC7D,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,gCAAgC;IAChC,2BAA2B;IAC3B,8BAA8B;IAC9B,qCAAqC;IACrC,8BAA8B;IAC9B,+BAA+B;IAC/B,iCAAiC;IACjC,+BAA+B;IAC/B,OAAO,EAAE,6DAA6D;CACvE,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,qDAAqD,CAAC;AAO/E;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,QAAuB;IACrD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC5B,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;YAAE,OAAO;QACzB,MAAM,QAAQ,GACZ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAC/B,IAAI,CAAC,IAAI,KAAK,QAAQ;YACtB,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACnC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACzC,IAAI,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;oBAC3D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,EAAC,IAAI,EAAC,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAe,EACf,QAAkB,EAClB,OAAO,GAAG,IAAI;IAEd,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAC,CAAC;IACjE,IAAI,GAAG,GAAqB,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC;IACvD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,GAAG,IAAI,KAAK,GAAG,OAAO,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,GAAG,IAAI,IAAI;YAAE,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAC,CAAC;QAC7C,IAAI,GAAG,CAAC,aAAa,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE;YAAE,MAAM;QAC5C,GAAG,GAAG,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC;QAChC,KAAK,EAAE,CAAC;IACV,CAAC;IACD,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,gdAAgd,EAChd;QACE,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,OAAO,CAAC,EAAE,CAAC;aACX,QAAQ,CAAC,qDAAqD,CAAC;QAClE,iBAAiB,EAAE,CAAC;aACjB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,OAAO,CAAC,MAAM,CAAC;aACf,QAAQ,CACP,iEAAiE,CAClE;QACH,QAAQ,EAAE,CAAC;aACR,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CACP,gFAAgF,CACjF;KACJ,EACD,KAAK,EAAE,EAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAC,EAAE,EAAE;QAC7C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,mBAAmB,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;YAE3C,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAC7B,OAAO,UAAU,CACf,mIAAmI;oBACjI,iHAAiH,CACpH,CAAC;YACJ,CAAC;YAQD,MAAM,KAAK,GAAW,EAAE,CAAC;YACzB,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAC5B,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;oBAAE,OAAO;gBACzB,IAAI,IAAI,CAAC,YAAY,GAAG,iBAAiB;oBAAE,OAAO;gBAClD,IACE,IAAI,CAAC,IAAI,KAAK,QAAQ;oBACtB,IAAI,CAAC,IAAI,KAAK,SAAS;oBACvB,IAAI,CAAC,IAAI,KAAK,OAAO;oBAErB,OAAO;gBACT,MAAM,EAAC,OAAO,EAAE,GAAG,EAAC,GAAG,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACvD,IAAI,OAAO;oBAAE,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC;gBAC/C,IAAI,QAAQ,IAAI,CAAC,OAAO;oBAAE,OAAO;gBACjC,8BAA8B;gBAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;gBAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY;wBAAE,MAAM;gBAC/C,CAAC;gBACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAC,CAAC,CAAC;gBACzC,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK;oBAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,MAAM,KAAK,GAAa;gBACtB,qCAAqC;gBACrC,EAAE;gBACF,kCAAkC,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACnF,iDAAiD,WAAW,CAAC,YAAY,CAAC,IAAI;oBAC5E,CAAC,SAAS,GAAG,CAAC;wBACZ,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,kDAAkD;wBACnH,CAAC,CAAC,EAAE,CAAC;gBACT,EAAE;aACH,CAAC;YAEF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;gBACrE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1B,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE;oBACf,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;oBAChE,CAAC,CAAC,IAAI,CAAC,IAAI;oBACX,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;oBAChC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY;iBACrD,CAAC,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YACvD,CAAC;YACD,KAAK,CAAC,IAAI,CACR,EAAE,EACF,sMAAsM,CACvM,CAAC;YACF,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"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;AA+CvE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmW7D"}
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"}