@memlab/mcp-server 2.52.0 → 2.86.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -2
- package/dist/anonymized-snapshot.d.ts +75 -0
- package/dist/anonymized-snapshot.d.ts.map +1 -0
- package/dist/anonymized-snapshot.js +101 -0
- package/dist/anonymized-snapshot.js.map +1 -0
- package/dist/eval-hints.d.ts +41 -0
- package/dist/eval-hints.d.ts.map +1 -0
- package/dist/eval-hints.js +115 -0
- package/dist/eval-hints.js.map +1 -0
- package/dist/heap-budget.d.ts +32 -0
- package/dist/heap-budget.d.ts.map +1 -0
- package/dist/heap-budget.js +90 -0
- package/dist/heap-budget.js.map +1 -0
- package/dist/heap-shapes.d.ts +148 -0
- package/dist/heap-shapes.d.ts.map +1 -0
- package/dist/heap-shapes.js +193 -0
- package/dist/heap-shapes.js.map +1 -0
- package/dist/heap-state.d.ts +20 -0
- package/dist/heap-state.d.ts.map +1 -1
- package/dist/heap-state.js +8 -1
- package/dist/heap-state.js.map +1 -1
- package/dist/index.js +64 -1
- package/dist/index.js.map +1 -1
- package/dist/react-shapes.d.ts +42 -0
- package/dist/react-shapes.d.ts.map +1 -0
- package/dist/react-shapes.js +149 -0
- package/dist/react-shapes.js.map +1 -0
- package/dist/server-version.d.ts +19 -0
- package/dist/server-version.d.ts.map +1 -0
- package/dist/server-version.js +19 -0
- package/dist/server-version.js.map +1 -0
- package/dist/snapshot-borrow.d.ts +67 -0
- package/dist/snapshot-borrow.d.ts.map +1 -0
- package/dist/snapshot-borrow.js +113 -0
- package/dist/snapshot-borrow.js.map +1 -0
- package/dist/string-index.d.ts.map +1 -1
- package/dist/string-index.js +8 -0
- package/dist/string-index.js.map +1 -1
- package/dist/tools/analyze-run.d.ts.map +1 -1
- package/dist/tools/analyze-run.js +79 -18
- package/dist/tools/analyze-run.js.map +1 -1
- package/dist/tools/anonymize-snapshot.d.ts +12 -0
- package/dist/tools/anonymize-snapshot.d.ts.map +1 -0
- package/dist/tools/anonymize-snapshot.js +159 -0
- package/dist/tools/anonymize-snapshot.js.map +1 -0
- package/dist/tools/app-config.d.ts +12 -0
- package/dist/tools/app-config.d.ts.map +1 -0
- package/dist/tools/app-config.js +217 -0
- package/dist/tools/app-config.js.map +1 -0
- package/dist/tools/app-heap.d.ts +18 -0
- package/dist/tools/app-heap.d.ts.map +1 -1
- package/dist/tools/app-heap.js +12 -46
- package/dist/tools/app-heap.js.map +1 -1
- package/dist/tools/artifact-budget.d.ts +12 -0
- package/dist/tools/artifact-budget.d.ts.map +1 -0
- package/dist/tools/artifact-budget.js +219 -0
- package/dist/tools/artifact-budget.js.map +1 -0
- package/dist/tools/async-census.d.ts +12 -0
- package/dist/tools/async-census.d.ts.map +1 -0
- package/dist/tools/async-census.js +243 -0
- package/dist/tools/async-census.js.map +1 -0
- package/dist/tools/auto-investigate.d.ts.map +1 -1
- package/dist/tools/auto-investigate.js +54 -5
- package/dist/tools/auto-investigate.js.map +1 -1
- package/dist/tools/batch.d.ts.map +1 -1
- package/dist/tools/batch.js +33 -5
- package/dist/tools/batch.js.map +1 -1
- package/dist/tools/cache-analysis.d.ts +15 -0
- package/dist/tools/cache-analysis.d.ts.map +1 -1
- package/dist/tools/cache-analysis.js +85 -10
- package/dist/tools/cache-analysis.js.map +1 -1
- package/dist/tools/census-diff.d.ts +55 -0
- package/dist/tools/census-diff.d.ts.map +1 -0
- package/dist/tools/census-diff.js +228 -0
- package/dist/tools/census-diff.js.map +1 -0
- package/dist/tools/chain-walk.d.ts +12 -0
- package/dist/tools/chain-walk.d.ts.map +1 -0
- package/dist/tools/chain-walk.js +184 -0
- package/dist/tools/chain-walk.js.map +1 -0
- package/dist/tools/collection-diff.d.ts +44 -0
- package/dist/tools/collection-diff.d.ts.map +1 -0
- package/dist/tools/collection-diff.js +343 -0
- package/dist/tools/collection-diff.js.map +1 -0
- package/dist/tools/collection-trend.d.ts.map +1 -1
- package/dist/tools/collection-trend.js +2 -2
- package/dist/tools/collection-trend.js.map +1 -1
- package/dist/tools/detached-dom.d.ts +3 -0
- package/dist/tools/detached-dom.d.ts.map +1 -1
- package/dist/tools/detached-dom.js +78 -3
- package/dist/tools/detached-dom.js.map +1 -1
- package/dist/tools/dev-artifacts.d.ts.map +1 -1
- package/dist/tools/dev-artifacts.js +221 -3
- package/dist/tools/dev-artifacts.js.map +1 -1
- package/dist/tools/diff-snapshots.d.ts.map +1 -1
- package/dist/tools/diff-snapshots.js +18 -2
- package/dist/tools/diff-snapshots.js.map +1 -1
- package/dist/tools/dom-audit.d.ts +37 -0
- package/dist/tools/dom-audit.d.ts.map +1 -0
- package/dist/tools/dom-audit.js +247 -0
- package/dist/tools/dom-audit.js.map +1 -0
- package/dist/tools/duplicated-strings.d.ts.map +1 -1
- package/dist/tools/duplicated-strings.js +3 -2
- package/dist/tools/duplicated-strings.js.map +1 -1
- package/dist/tools/eval-across.d.ts +12 -0
- package/dist/tools/eval-across.d.ts.map +1 -0
- package/dist/tools/eval-across.js +135 -0
- package/dist/tools/eval-across.js.map +1 -0
- package/dist/tools/eval.d.ts +78 -0
- package/dist/tools/eval.d.ts.map +1 -1
- package/dist/tools/eval.js +2270 -701
- package/dist/tools/eval.js.map +1 -1
- package/dist/tools/event-listener-leaks.d.ts.map +1 -1
- package/dist/tools/event-listener-leaks.js +42 -17
- package/dist/tools/event-listener-leaks.js.map +1 -1
- package/dist/tools/event-registry.d.ts.map +1 -1
- package/dist/tools/event-registry.js +42 -8
- package/dist/tools/event-registry.js.map +1 -1
- package/dist/tools/explain-delta.d.ts.map +1 -1
- package/dist/tools/explain-delta.js +61 -10
- package/dist/tools/explain-delta.js.map +1 -1
- package/dist/tools/finding-index.d.ts +181 -0
- package/dist/tools/finding-index.d.ts.map +1 -1
- package/dist/tools/finding-index.js +343 -24
- package/dist/tools/finding-index.js.map +1 -1
- package/dist/tools/get-value.d.ts +16 -0
- package/dist/tools/get-value.d.ts.map +1 -1
- package/dist/tools/get-value.js +96 -2
- package/dist/tools/get-value.js.map +1 -1
- package/dist/tools/hypothesis.d.ts.map +1 -1
- package/dist/tools/hypothesis.js +117 -58
- package/dist/tools/hypothesis.js.map +1 -1
- package/dist/tools/id-space-audit.d.ts +12 -0
- package/dist/tools/id-space-audit.d.ts.map +1 -0
- package/dist/tools/id-space-audit.js +262 -0
- package/dist/tools/id-space-audit.js.map +1 -0
- package/dist/tools/identify.d.ts +12 -0
- package/dist/tools/identify.d.ts.map +1 -0
- package/dist/tools/identify.js +205 -0
- package/dist/tools/identify.js.map +1 -0
- package/dist/tools/identity-diff.d.ts +12 -0
- package/dist/tools/identity-diff.d.ts.map +1 -0
- package/dist/tools/identity-diff.js +188 -0
- package/dist/tools/identity-diff.js.map +1 -0
- package/dist/tools/intern-opportunities.d.ts.map +1 -1
- package/dist/tools/intern-opportunities.js +4 -3
- package/dist/tools/intern-opportunities.js.map +1 -1
- package/dist/tools/ladder-probe.d.ts +65 -0
- package/dist/tools/ladder-probe.d.ts.map +1 -0
- package/dist/tools/ladder-probe.js +445 -0
- package/dist/tools/ladder-probe.js.map +1 -0
- package/dist/tools/ladder.d.ts.map +1 -1
- package/dist/tools/ladder.js +5 -5
- package/dist/tools/ladder.js.map +1 -1
- package/dist/tools/leak-report.d.ts +23 -0
- package/dist/tools/leak-report.d.ts.map +1 -1
- package/dist/tools/leak-report.js +153 -11
- package/dist/tools/leak-report.js.map +1 -1
- package/dist/tools/load-snapshot.d.ts +11 -0
- package/dist/tools/load-snapshot.d.ts.map +1 -1
- package/dist/tools/load-snapshot.js +83 -10
- package/dist/tools/load-snapshot.js.map +1 -1
- package/dist/tools/metric.d.ts +13 -0
- package/dist/tools/metric.d.ts.map +1 -0
- package/dist/tools/metric.js +185 -0
- package/dist/tools/metric.js.map +1 -0
- package/dist/tools/module-attribution.d.ts +36 -0
- package/dist/tools/module-attribution.d.ts.map +1 -0
- package/dist/tools/module-attribution.js +235 -0
- package/dist/tools/module-attribution.js.map +1 -0
- package/dist/tools/next-measurement.d.ts +26 -0
- package/dist/tools/next-measurement.d.ts.map +1 -0
- package/dist/tools/next-measurement.js +149 -0
- package/dist/tools/next-measurement.js.map +1 -0
- package/dist/tools/object-cost-breakdown.d.ts.map +1 -1
- package/dist/tools/object-cost-breakdown.js +64 -0
- package/dist/tools/object-cost-breakdown.js.map +1 -1
- package/dist/tools/population-vs-owners.d.ts +12 -0
- package/dist/tools/population-vs-owners.d.ts.map +1 -0
- package/dist/tools/population-vs-owners.js +183 -0
- package/dist/tools/population-vs-owners.js.map +1 -0
- package/dist/tools/property-names.d.ts +29 -0
- package/dist/tools/property-names.d.ts.map +1 -0
- package/dist/tools/property-names.js +131 -0
- package/dist/tools/property-names.js.map +1 -0
- package/dist/tools/quick-diagnosis.d.ts.map +1 -1
- package/dist/tools/quick-diagnosis.js +7 -1
- package/dist/tools/quick-diagnosis.js.map +1 -1
- package/dist/tools/react-owners.d.ts +12 -0
- package/dist/tools/react-owners.d.ts.map +1 -0
- package/dist/tools/react-owners.js +167 -0
- package/dist/tools/react-owners.js.map +1 -0
- package/dist/tools/react-update-queues.d.ts +12 -0
- package/dist/tools/react-update-queues.d.ts.map +1 -0
- package/dist/tools/react-update-queues.js +173 -0
- package/dist/tools/react-update-queues.js.map +1 -0
- package/dist/tools/replicate.d.ts +49 -0
- package/dist/tools/replicate.d.ts.map +1 -0
- package/dist/tools/replicate.js +241 -0
- package/dist/tools/replicate.js.map +1 -0
- package/dist/tools/retainer-diff.d.ts +12 -0
- package/dist/tools/retainer-diff.d.ts.map +1 -0
- package/dist/tools/retainer-diff.js +168 -0
- package/dist/tools/retainer-diff.js.map +1 -0
- package/dist/tools/retainer-summary.d.ts +17 -0
- package/dist/tools/retainer-summary.d.ts.map +1 -1
- package/dist/tools/retainer-summary.js +85 -22
- package/dist/tools/retainer-summary.js.map +1 -1
- package/dist/tools/retainer-trace.d.ts.map +1 -1
- package/dist/tools/retainer-trace.js +11 -1
- package/dist/tools/retainer-trace.js.map +1 -1
- package/dist/tools/round-audit.d.ts +66 -0
- package/dist/tools/round-audit.d.ts.map +1 -0
- package/dist/tools/round-audit.js +258 -0
- package/dist/tools/round-audit.js.map +1 -0
- package/dist/tools/round-digest.d.ts +12 -0
- package/dist/tools/round-digest.d.ts.map +1 -0
- package/dist/tools/round-digest.js +190 -0
- package/dist/tools/round-digest.js.map +1 -0
- package/dist/tools/script-census.d.ts +12 -0
- package/dist/tools/script-census.d.ts.map +1 -0
- package/dist/tools/script-census.js +182 -0
- package/dist/tools/script-census.js.map +1 -0
- package/dist/tools/sequence-analysis.d.ts +4 -0
- package/dist/tools/sequence-analysis.d.ts.map +1 -1
- package/dist/tools/sequence-analysis.js +53 -9
- package/dist/tools/sequence-analysis.js.map +1 -1
- package/dist/tools/server-status.d.ts.map +1 -1
- package/dist/tools/server-status.js +4 -1
- package/dist/tools/server-status.js.map +1 -1
- package/dist/tools/settle-check.d.ts +12 -0
- package/dist/tools/settle-check.d.ts.map +1 -0
- package/dist/tools/settle-check.js +188 -0
- package/dist/tools/settle-check.js.map +1 -0
- package/dist/tools/sliced-strings.d.ts.map +1 -1
- package/dist/tools/sliced-strings.js +2 -1
- package/dist/tools/sliced-strings.js.map +1 -1
- package/dist/tools/snapshots.d.ts.map +1 -1
- package/dist/tools/snapshots.js +24 -6
- package/dist/tools/snapshots.js.map +1 -1
- package/dist/tools/sparse-elements.d.ts +12 -0
- package/dist/tools/sparse-elements.d.ts.map +1 -0
- package/dist/tools/sparse-elements.js +215 -0
- package/dist/tools/sparse-elements.js.map +1 -0
- package/dist/tools/stale-collections.d.ts +17 -0
- package/dist/tools/stale-collections.d.ts.map +1 -1
- package/dist/tools/stale-collections.js +28 -0
- package/dist/tools/stale-collections.js.map +1 -1
- package/dist/tools/string-patterns.d.ts.map +1 -1
- package/dist/tools/string-patterns.js +2 -1
- package/dist/tools/string-patterns.js.map +1 -1
- package/dist/tools/tools-index.d.ts.map +1 -1
- package/dist/tools/tools-index.js +155 -5
- package/dist/tools/tools-index.js.map +1 -1
- package/dist/tools/trace-all.d.ts +42 -0
- package/dist/tools/trace-all.d.ts.map +1 -0
- package/dist/tools/trace-all.js +263 -0
- package/dist/tools/trace-all.js.map +1 -0
- package/dist/tools/unit-cost.d.ts +12 -0
- package/dist/tools/unit-cost.d.ts.map +1 -0
- package/dist/tools/unit-cost.js +219 -0
- package/dist/tools/unit-cost.js.map +1 -0
- package/dist/tools/verify-fix.d.ts.map +1 -1
- package/dist/tools/verify-fix.js +11 -3
- package/dist/tools/verify-fix.js.map +1 -1
- package/dist/tools/weakref-census.d.ts +15 -0
- package/dist/tools/weakref-census.d.ts.map +1 -0
- package/dist/tools/weakref-census.js +147 -0
- package/dist/tools/weakref-census.js.map +1 -0
- package/dist/tools/what-if.d.ts +12 -0
- package/dist/tools/what-if.d.ts.map +1 -0
- package/dist/tools/what-if.js +285 -0
- package/dist/tools/what-if.js.map +1 -0
- package/dist/utils.d.ts +92 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +172 -5
- package/dist/utils.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,148 @@
|
|
|
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
|
+
/**
|
|
11
|
+
* V8 elements-backing-store primitives, in one place.
|
|
12
|
+
*
|
|
13
|
+
* Reading an object's elements store correctly needs five separate facts, and
|
|
14
|
+
* each of them was got WRONG once before it was got right. They are stated here
|
|
15
|
+
* so no tool has to rediscover them:
|
|
16
|
+
*
|
|
17
|
+
* 1. A plain `Object` with integer keys emits an `element` edge per non-hole
|
|
18
|
+
* slot ON THE OWNER, small-integer values included (they point at a shared
|
|
19
|
+
* `smi number` node).
|
|
20
|
+
* 2. A `JSArray` frequently emits nothing on the owner and instead emits
|
|
21
|
+
* `internal` numeric edges ON THE STORE — but only for slots holding a
|
|
22
|
+
* heap object, so an all-SMI array reads as empty from there.
|
|
23
|
+
* 3. Therefore, when both sides read zero the occupancy is UNKNOWABLE: a
|
|
24
|
+
* `new Array(34)` of holes and an array of 34 timestamps are byte-identical
|
|
25
|
+
* in a snapshot. Scoring those as empty ranked 4,301 all-SMI index arrays
|
|
26
|
+
* as the second-largest "finding" in one run.
|
|
27
|
+
* 4. Capacity is `(storeBytes - 8) / slotBytes`, and `slotBytes` must be
|
|
28
|
+
* MEASURED. Wrong by 2x, it either invents slack that does not exist or
|
|
29
|
+
* classifies every dense store as a dictionary.
|
|
30
|
+
* 5. `maxIndex + 1 > capacity` means dictionary mode, where a hole costs
|
|
31
|
+
* nothing and "waste" is not defined.
|
|
32
|
+
*/
|
|
33
|
+
import type { IHeapNode, IHeapSnapshot } from '@memlab/core';
|
|
34
|
+
/**
|
|
35
|
+
* Bytes of the FixedArray header preceding the first slot. Same on a
|
|
36
|
+
* pointer-compressed and an uncompressed heap (map + length), so only the slot
|
|
37
|
+
* width has to be calibrated.
|
|
38
|
+
*/
|
|
39
|
+
export declare const STORE_HEADER_BYTES = 8;
|
|
40
|
+
/**
|
|
41
|
+
* V8 grows an elements store to `n + (n >> 1) + kMinAddedElementsCapacity`,
|
|
42
|
+
* with `kMinAddedElementsCapacity == 16`, so EVERY array built by `push`
|
|
43
|
+
* carries up to 16 slots of tail slack no application change can remove.
|
|
44
|
+
* Charging it turns a one-element array into a "94% empty" finding.
|
|
45
|
+
*
|
|
46
|
+
* https://github.com/v8/v8/blob/main/src/objects/js-objects.h
|
|
47
|
+
*/
|
|
48
|
+
export declare const FORGIVEN_TAIL_SLOTS = 16;
|
|
49
|
+
export type SlotBytes = 4 | 8;
|
|
50
|
+
export interface ElementsInfo {
|
|
51
|
+
storeId: number;
|
|
52
|
+
storeBytes: number;
|
|
53
|
+
slotBytes: SlotBytes;
|
|
54
|
+
/** Slots the backing store is sized for. */
|
|
55
|
+
capacity: number;
|
|
56
|
+
/** Slots holding a value. LOWER BOUND — see fact 3 above. */
|
|
57
|
+
used: number;
|
|
58
|
+
maxIndex: number;
|
|
59
|
+
/** `maxIndex + 1` — how far into the store the written keys reach. */
|
|
60
|
+
span: number;
|
|
61
|
+
/** Interior holes: written keys are sparse within their own span. */
|
|
62
|
+
holes: number;
|
|
63
|
+
/** Raw tail slack past the last written key, before any forgiveness. */
|
|
64
|
+
slack: number;
|
|
65
|
+
mode: 'dense' | 'dictionary';
|
|
66
|
+
/**
|
|
67
|
+
* `false` when nothing readable is in the store — it may be all holes or all
|
|
68
|
+
* small integers, and a snapshot cannot tell those apart. Callers must not
|
|
69
|
+
* count these as waste.
|
|
70
|
+
*/
|
|
71
|
+
measurable: boolean;
|
|
72
|
+
}
|
|
73
|
+
/** The raw two-sided read, before capacity is derived from a slot width. */
|
|
74
|
+
export interface RawElements {
|
|
75
|
+
store: IHeapNode;
|
|
76
|
+
/** Union occupancy: the owner's element edges are a superset of the store's. */
|
|
77
|
+
used: number;
|
|
78
|
+
maxIndex: number;
|
|
79
|
+
}
|
|
80
|
+
/** Read a node's elements store and its occupancy, or `null` if it has none. */
|
|
81
|
+
export declare function readRawElements(node: IHeapNode): RawElements | null;
|
|
82
|
+
/**
|
|
83
|
+
* Decide the slot width from evidence rather than assumption.
|
|
84
|
+
*
|
|
85
|
+
* A store whose largest written index fits in `(bytes - 8) / 4` slots but NOT
|
|
86
|
+
* in `(bytes - 8) / 8` can only be 4-byte-slotted. Dictionary-mode stores
|
|
87
|
+
* overflow both, so they cannot fake the signal. Pass any collection of
|
|
88
|
+
* observed `(storeBytes, maxIndex)` pairs; one witness is enough, and a real
|
|
89
|
+
* browser capture produces thousands.
|
|
90
|
+
*/
|
|
91
|
+
export declare function calibrateSlotBytes(samples: Iterable<{
|
|
92
|
+
storeBytes: number;
|
|
93
|
+
maxIndex: number;
|
|
94
|
+
}>): SlotBytes;
|
|
95
|
+
/**
|
|
96
|
+
* Memoized per-snapshot slot width for tools that do not already make their own
|
|
97
|
+
* pass. Stops as soon as it has enough witnesses, so on a real heap it reads a
|
|
98
|
+
* small prefix rather than the whole graph.
|
|
99
|
+
*/
|
|
100
|
+
export declare function getSlotBytes(snapshot: IHeapSnapshot): SlotBytes;
|
|
101
|
+
/** Derive the full picture from a raw read and a slot width. */
|
|
102
|
+
export declare function describeElements(raw: RawElements, slotBytes: SlotBytes): ElementsInfo | null;
|
|
103
|
+
/**
|
|
104
|
+
* Every node that owns an elements store, as parallel typed arrays.
|
|
105
|
+
*
|
|
106
|
+
* Built once per snapshot and memoized. Four tools ask the same structural
|
|
107
|
+
* questions of the same nodes (does this own an elements store? how many
|
|
108
|
+
* element edges? what is the largest index? how big is the store?), and each
|
|
109
|
+
* was paying its own full pass — on a 7.1M-node / 41.7M-edge capture that is
|
|
110
|
+
* the dominant cost of the call, and tuning one tool's parameters re-pays it
|
|
111
|
+
* every time.
|
|
112
|
+
*
|
|
113
|
+
* Typed arrays rather than objects: on the capture above this is ~370k entries,
|
|
114
|
+
* which is 6 MB as four typed arrays and several times that as objects. The
|
|
115
|
+
* index is keyed by the snapshot, so a `keep_previous` A/B keeps one per arm and
|
|
116
|
+
* both are released when the snapshot is.
|
|
117
|
+
*/
|
|
118
|
+
export interface ElementsIndex {
|
|
119
|
+
/**
|
|
120
|
+
* Node ids that own an elements store, ascending by scan order.
|
|
121
|
+
*
|
|
122
|
+
* Unsigned: ids, byte counts and occupancies cannot be negative, and a
|
|
123
|
+
* signed 32-bit lane wraps anything past 2^31-1 to a negative number. For
|
|
124
|
+
* `ownerIds` that failure is silent rather than loud — `getNodeById(-…)`
|
|
125
|
+
* returns null, so the entry is skipped by every consumer instead of
|
|
126
|
+
* throwing. `maxIndex` stays signed because -1 is its "the store holds no
|
|
127
|
+
* numeric slot" sentinel, and a real element index above 2^31-1 would need a
|
|
128
|
+
* sparse array indexed past two billion.
|
|
129
|
+
*
|
|
130
|
+
* The unsigned lanes have their own ceiling at 2^32-1, and it is assumed
|
|
131
|
+
* rather than checked: V8 hands out snapshot node ids by increment, so
|
|
132
|
+
* exceeding it means one isolate allocated over four billion objects — far
|
|
133
|
+
* past the point where the snapshot itself is loadable here. A capture that
|
|
134
|
+
* did would truncate an id and quietly drop that entry, so if this ever needs
|
|
135
|
+
* to hold arbitrarily large captures, widen to `Float64Array` (ids stay exact
|
|
136
|
+
* to 2^53) rather than adding a guard.
|
|
137
|
+
*/
|
|
138
|
+
ownerIds: Uint32Array;
|
|
139
|
+
storeBytes: Uint32Array;
|
|
140
|
+
used: Uint32Array;
|
|
141
|
+
maxIndex: Int32Array;
|
|
142
|
+
slotBytes: SlotBytes;
|
|
143
|
+
count: number;
|
|
144
|
+
}
|
|
145
|
+
export declare function getElementsIndex(snapshot: IHeapSnapshot): ElementsIndex;
|
|
146
|
+
/** One-shot read for a single node, calibrating the snapshot if needed. */
|
|
147
|
+
export declare function readElements(snapshot: IHeapSnapshot, node: IHeapNode): ElementsInfo | null;
|
|
148
|
+
//# sourceMappingURL=heap-shapes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heap-shapes.d.ts","sourceRoot":"","sources":["../src/heap-shapes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAE,aAAa,EAAC,MAAM,cAAc,CAAC;AAE3D;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;AAE9B,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,GAAG,YAAY,CAAC;IAC7B;;;;OAIG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,4EAA4E;AAC5E,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,SAAS,CAAC;IACjB,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,IAAI,CA4BnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,CAAC,GACxD,SAAS,CAWX;AAOD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,SAAS,CA6B/D;AAED,gEAAgE;AAChE,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,SAAS,GACnB,YAAY,GAAG,IAAI,CAmBrB;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;;;;;;;;;;;;;OAkBG;IACH,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,EAAE,WAAW,CAAC;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,UAAU,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa,CA4CvE;AAED,2EAA2E;AAC3E,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,SAAS,GACd,YAAY,GAAG,IAAI,CAIrB"}
|
|
@@ -0,0 +1,193 @@
|
|
|
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
|
+
/**
|
|
11
|
+
* Bytes of the FixedArray header preceding the first slot. Same on a
|
|
12
|
+
* pointer-compressed and an uncompressed heap (map + length), so only the slot
|
|
13
|
+
* width has to be calibrated.
|
|
14
|
+
*/
|
|
15
|
+
export const STORE_HEADER_BYTES = 8;
|
|
16
|
+
/**
|
|
17
|
+
* V8 grows an elements store to `n + (n >> 1) + kMinAddedElementsCapacity`,
|
|
18
|
+
* with `kMinAddedElementsCapacity == 16`, so EVERY array built by `push`
|
|
19
|
+
* carries up to 16 slots of tail slack no application change can remove.
|
|
20
|
+
* Charging it turns a one-element array into a "94% empty" finding.
|
|
21
|
+
*
|
|
22
|
+
* https://github.com/v8/v8/blob/main/src/objects/js-objects.h
|
|
23
|
+
*/
|
|
24
|
+
export const FORGIVEN_TAIL_SLOTS = 16;
|
|
25
|
+
/** Read a node's elements store and its occupancy, or `null` if it has none. */
|
|
26
|
+
export function readRawElements(node) {
|
|
27
|
+
let store = null;
|
|
28
|
+
let ownerSlots = 0;
|
|
29
|
+
let maxIndex = -1;
|
|
30
|
+
for (const edge of node.references) {
|
|
31
|
+
if (edge.type === 'element') {
|
|
32
|
+
ownerSlots++;
|
|
33
|
+
const index = Number(edge.name_or_index);
|
|
34
|
+
if (index > maxIndex)
|
|
35
|
+
maxIndex = index;
|
|
36
|
+
}
|
|
37
|
+
else if (edge.type === 'internal' &&
|
|
38
|
+
String(edge.name_or_index) === 'elements') {
|
|
39
|
+
store = edge.toNode;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (!store)
|
|
43
|
+
return null;
|
|
44
|
+
let storeSlots = 0;
|
|
45
|
+
for (const edge of store.references) {
|
|
46
|
+
const name = String(edge.name_or_index);
|
|
47
|
+
// Numeric edge names on the store are slot indices; `map` and friends are
|
|
48
|
+
// header fields, not contents.
|
|
49
|
+
if (!/^\d+$/.test(name))
|
|
50
|
+
continue;
|
|
51
|
+
storeSlots++;
|
|
52
|
+
const index = Number(name);
|
|
53
|
+
if (index > maxIndex)
|
|
54
|
+
maxIndex = index;
|
|
55
|
+
}
|
|
56
|
+
return { store, used: Math.max(ownerSlots, storeSlots), maxIndex };
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Decide the slot width from evidence rather than assumption.
|
|
60
|
+
*
|
|
61
|
+
* A store whose largest written index fits in `(bytes - 8) / 4` slots but NOT
|
|
62
|
+
* in `(bytes - 8) / 8` can only be 4-byte-slotted. Dictionary-mode stores
|
|
63
|
+
* overflow both, so they cannot fake the signal. Pass any collection of
|
|
64
|
+
* observed `(storeBytes, maxIndex)` pairs; one witness is enough, and a real
|
|
65
|
+
* browser capture produces thousands.
|
|
66
|
+
*/
|
|
67
|
+
export function calibrateSlotBytes(samples) {
|
|
68
|
+
for (const s of samples) {
|
|
69
|
+
const slots = s.maxIndex + 1;
|
|
70
|
+
if (slots <= 0)
|
|
71
|
+
continue;
|
|
72
|
+
const at8 = (s.storeBytes - STORE_HEADER_BYTES) / 8;
|
|
73
|
+
const at4 = (s.storeBytes - STORE_HEADER_BYTES) / 4;
|
|
74
|
+
if (slots > at8 && slots <= at4)
|
|
75
|
+
return 4;
|
|
76
|
+
}
|
|
77
|
+
// Default to 4: every browser capture is pointer-compressed, and a heap with
|
|
78
|
+
// no witness either way is one where the difference changes no ranking.
|
|
79
|
+
return 4;
|
|
80
|
+
}
|
|
81
|
+
/** Witnesses needed before the scan stops early; more than enough to be sure. */
|
|
82
|
+
const CALIBRATION_WITNESSES = 32;
|
|
83
|
+
const slotBytesBySnapshot = new WeakMap();
|
|
84
|
+
/**
|
|
85
|
+
* Memoized per-snapshot slot width for tools that do not already make their own
|
|
86
|
+
* pass. Stops as soon as it has enough witnesses, so on a real heap it reads a
|
|
87
|
+
* small prefix rather than the whole graph.
|
|
88
|
+
*/
|
|
89
|
+
export function getSlotBytes(snapshot) {
|
|
90
|
+
const cached = slotBytesBySnapshot.get(snapshot);
|
|
91
|
+
if (cached != null)
|
|
92
|
+
return cached;
|
|
93
|
+
const samples = [];
|
|
94
|
+
snapshot.nodes.forEach(node => {
|
|
95
|
+
// `false` is memlab's documented stop signal for this walk; a bare `return`
|
|
96
|
+
// only skips the current node, so returning undefined here kept iterating
|
|
97
|
+
// all 7M nodes of a large capture long after the 32nd witness. Every other
|
|
98
|
+
// `return` below is a per-node skip and must stay undefined.
|
|
99
|
+
if (samples.length >= CALIBRATION_WITNESSES)
|
|
100
|
+
return false;
|
|
101
|
+
if (node.type !== 'object' &&
|
|
102
|
+
node.type !== 'array' &&
|
|
103
|
+
node.type !== 'hidden')
|
|
104
|
+
return;
|
|
105
|
+
const raw = readRawElements(node);
|
|
106
|
+
if (!raw || raw.maxIndex < 0)
|
|
107
|
+
return;
|
|
108
|
+
const bytes = raw.store.self_size;
|
|
109
|
+
if (bytes <= STORE_HEADER_BYTES)
|
|
110
|
+
return;
|
|
111
|
+
const slots = raw.maxIndex + 1;
|
|
112
|
+
// Only witnesses that DISCRIMINATE are worth collecting.
|
|
113
|
+
if (slots > (bytes - STORE_HEADER_BYTES) / 8) {
|
|
114
|
+
samples.push({ storeBytes: bytes, maxIndex: raw.maxIndex });
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
const resolved = calibrateSlotBytes(samples);
|
|
118
|
+
slotBytesBySnapshot.set(snapshot, resolved);
|
|
119
|
+
return resolved;
|
|
120
|
+
}
|
|
121
|
+
/** Derive the full picture from a raw read and a slot width. */
|
|
122
|
+
export function describeElements(raw, slotBytes) {
|
|
123
|
+
const storeBytes = raw.store.self_size;
|
|
124
|
+
if (storeBytes <= STORE_HEADER_BYTES)
|
|
125
|
+
return null;
|
|
126
|
+
const capacity = Math.floor((storeBytes - STORE_HEADER_BYTES) / slotBytes);
|
|
127
|
+
const span = raw.maxIndex + 1;
|
|
128
|
+
const dictionary = span > capacity;
|
|
129
|
+
return {
|
|
130
|
+
storeId: raw.store.id,
|
|
131
|
+
storeBytes,
|
|
132
|
+
slotBytes,
|
|
133
|
+
capacity,
|
|
134
|
+
used: raw.used,
|
|
135
|
+
maxIndex: raw.maxIndex,
|
|
136
|
+
span,
|
|
137
|
+
holes: dictionary ? 0 : Math.max(0, span - raw.used),
|
|
138
|
+
slack: dictionary ? 0 : Math.max(0, capacity - span),
|
|
139
|
+
mode: dictionary ? 'dictionary' : 'dense',
|
|
140
|
+
measurable: raw.used > 0,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const elementsIndexBySnapshot = new WeakMap();
|
|
144
|
+
export function getElementsIndex(snapshot) {
|
|
145
|
+
const cached = elementsIndexBySnapshot.get(snapshot);
|
|
146
|
+
if (cached != null)
|
|
147
|
+
return cached;
|
|
148
|
+
const ownerIds = [];
|
|
149
|
+
const storeBytes = [];
|
|
150
|
+
const used = [];
|
|
151
|
+
const maxIndex = [];
|
|
152
|
+
snapshot.nodes.forEach(node => {
|
|
153
|
+
if (node.type !== 'object' &&
|
|
154
|
+
node.type !== 'array' &&
|
|
155
|
+
node.type !== 'hidden') {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const raw = readRawElements(node);
|
|
159
|
+
if (!raw)
|
|
160
|
+
return;
|
|
161
|
+
const bytes = raw.store.self_size;
|
|
162
|
+
if (bytes <= STORE_HEADER_BYTES)
|
|
163
|
+
return;
|
|
164
|
+
ownerIds.push(node.id);
|
|
165
|
+
storeBytes.push(bytes);
|
|
166
|
+
used.push(raw.used);
|
|
167
|
+
maxIndex.push(raw.maxIndex);
|
|
168
|
+
});
|
|
169
|
+
const index = {
|
|
170
|
+
ownerIds: Uint32Array.from(ownerIds),
|
|
171
|
+
storeBytes: Uint32Array.from(storeBytes),
|
|
172
|
+
used: Uint32Array.from(used),
|
|
173
|
+
maxIndex: Int32Array.from(maxIndex),
|
|
174
|
+
// Calibrating from the entries just collected costs nothing extra and is
|
|
175
|
+
// strictly better evidence than the early-exit prefix scan.
|
|
176
|
+
slotBytes: calibrateSlotBytes(ownerIds.map((_, i) => ({
|
|
177
|
+
storeBytes: storeBytes[i],
|
|
178
|
+
maxIndex: maxIndex[i],
|
|
179
|
+
}))),
|
|
180
|
+
count: ownerIds.length,
|
|
181
|
+
};
|
|
182
|
+
elementsIndexBySnapshot.set(snapshot, index);
|
|
183
|
+
slotBytesBySnapshot.set(snapshot, index.slotBytes);
|
|
184
|
+
return index;
|
|
185
|
+
}
|
|
186
|
+
/** One-shot read for a single node, calibrating the snapshot if needed. */
|
|
187
|
+
export function readElements(snapshot, node) {
|
|
188
|
+
const raw = readRawElements(node);
|
|
189
|
+
if (!raw)
|
|
190
|
+
return null;
|
|
191
|
+
return describeElements(raw, getSlotBytes(snapshot));
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=heap-shapes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heap-shapes.js","sourceRoot":"","sources":["../src/heap-shapes.ts"],"names":[],"mappings":"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"}
|
package/dist/heap-state.d.ts
CHANGED
|
@@ -52,10 +52,28 @@ export declare function getEvalScratch(): Record<string, unknown>;
|
|
|
52
52
|
* once per loaded snapshot instead of on every tool result.
|
|
53
53
|
* - `suppressSuggestions`: when true, tools omit their "Suggested next steps"
|
|
54
54
|
* trailers.
|
|
55
|
+
*
|
|
56
|
+
* `quietHeader` DEFAULTS ON. The header is worth exactly one printing per
|
|
57
|
+
* snapshot — after that it is the same line on every call, and an investigation
|
|
58
|
+
* makes dozens. Measured over one session: ~30 loads and far more tool calls,
|
|
59
|
+
* all repeating a line the caller already knew. Opting back in is
|
|
60
|
+
* `memlab_snapshots({quiet_header: false})`.
|
|
61
|
+
*
|
|
62
|
+
* Note this only governs the SESSION header. A tool that read snapshots by path
|
|
63
|
+
* passes its own header explicitly (see `pathsHeader`), and that is a per-call
|
|
64
|
+
* fact rather than boilerplate, so it is never suppressed by this.
|
|
55
65
|
*/
|
|
56
66
|
export interface SessionConfig {
|
|
57
67
|
quietHeader: boolean;
|
|
58
68
|
suppressSuggestions: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Trim the high-volume, low-decision sections of a report.
|
|
71
|
+
*
|
|
72
|
+
* The per-tool flags (`summary_only`, `show_breakdown`, ...) each cover one
|
|
73
|
+
* tool and are spelled differently in each, so trimming a whole round means
|
|
74
|
+
* remembering N names. This is one switch for the session.
|
|
75
|
+
*/
|
|
76
|
+
terse: boolean;
|
|
59
77
|
}
|
|
60
78
|
export declare function getSessionConfig(): SessionConfig;
|
|
61
79
|
export declare function setSessionConfig(patch: Partial<SessionConfig>): SessionConfig;
|
|
@@ -160,5 +178,7 @@ export declare function getSnapshotByHandle(handle: string): IHeapSnapshot | nul
|
|
|
160
178
|
export declare function getMetadataByHandle(handle: string): SnapshotMetadata | null;
|
|
161
179
|
export declare function setCurrentSnapshot(handle: string): boolean;
|
|
162
180
|
export declare function removeSnapshot(handle: string): boolean;
|
|
181
|
+
/** Is the session asking for trimmed, decision-only output? */
|
|
182
|
+
export declare function isTerse(): boolean;
|
|
163
183
|
export {};
|
|
164
184
|
//# sourceMappingURL=heap-state.d.ts.map
|
package/dist/heap-state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heap-state.d.ts","sourceRoot":"","sources":["../src/heap-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAGhD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAgCzD,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,WAAW,CAAC;IACjB;;;;;OAKG;IACH,KAAK,EAAE,OAAO,CAAC;CAChB;AAuBD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,GAAG,IAAI,CAiBhE;AAUD;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQxD;AAUD
|
|
1
|
+
{"version":3,"file":"heap-state.d.ts","sourceRoot":"","sources":["../src/heap-state.ts"],"names":[],"mappings":"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"}
|
package/dist/heap-state.js
CHANGED
|
@@ -109,8 +109,9 @@ function dropEvalScratch(handle) {
|
|
|
109
109
|
evalScratch.delete(handle);
|
|
110
110
|
}
|
|
111
111
|
const sessionConfig = {
|
|
112
|
-
quietHeader:
|
|
112
|
+
quietHeader: true,
|
|
113
113
|
suppressSuggestions: false,
|
|
114
|
+
terse: false,
|
|
114
115
|
};
|
|
115
116
|
// Tracks whether the header has been emitted since the current snapshot was
|
|
116
117
|
// loaded/activated, so `quietHeader` can print it exactly once.
|
|
@@ -124,6 +125,8 @@ export function setSessionConfig(patch) {
|
|
|
124
125
|
if (patch.suppressSuggestions != null) {
|
|
125
126
|
sessionConfig.suppressSuggestions = patch.suppressSuggestions;
|
|
126
127
|
}
|
|
128
|
+
if (patch.terse != null)
|
|
129
|
+
sessionConfig.terse = patch.terse;
|
|
127
130
|
return sessionConfig;
|
|
128
131
|
}
|
|
129
132
|
/**
|
|
@@ -355,4 +358,8 @@ export function removeSnapshot(handle) {
|
|
|
355
358
|
}
|
|
356
359
|
return existed;
|
|
357
360
|
}
|
|
361
|
+
/** Is the session asking for trimmed, decision-only output? */
|
|
362
|
+
export function isTerse() {
|
|
363
|
+
return sessionConfig.terse;
|
|
364
|
+
}
|
|
358
365
|
//# sourceMappingURL=heap-state.js.map
|
package/dist/heap-state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heap-state.js","sourceRoot":"","sources":["../src/heap-state.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"heap-state.js","sourceRoot":"","sources":["../src/heap-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAIlD,6EAA6E;AAC7E,gFAAgF;AAChF,+EAA+E;AAC/E,+EAA+E;AAC/E,iFAAiF;AACjF,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAE3C,SAAS,mBAAmB,CAAC,UAAmB,EAAE,OAAiB;IACjE,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ;QAAE,OAAO;IAC1D,MAAM,CAAC,GAAG,UAAqC,CAAC;IAChD,IAAI,CAAC,CAAC,YAAY,CAAC;QAAE,OAAO;IAC5B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,OAAO,EAAE,KAAK,UAAU;YAAE,SAAS;QACvC,MAAM,IAAI,GAAI,EAAoD,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAgC,EAAE,EAAE,CAC1C,IAAI,CAAC,CAAC,GAAG,IAAe,EAAE,EAAE;YAC1B,YAAY,EAAE,CAAC;YACf,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACP,CAAC;IACD,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,YAAY,EAAE,EAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAuB;IACjD,MAAM,CAAC,GAAG,QAAyD,CAAC;IACpE,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC9D,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5C,CAAC;AA6BD,2EAA2E;AAC3E,yEAAyE;AACzE,4CAA4C;AAC5C,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;AACjD,IAAI,aAAa,GAAkB,IAAI,CAAC;AAExC,6EAA6E;AAC7E,8EAA8E;AAC9E,gDAAgD;AAChD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;AAC3C,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB,SAAS,KAAK,CAAC,MAAqB;IAClC,IAAI,MAAM,IAAI,IAAI;QAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB;IACpC,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,WAAW,GAAG,QAAQ,CAAC;IAC3B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACnC,IAAI,MAAM,KAAK,aAAa;YAAE,SAAS;QACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,KAAK,GAAG,WAAW,EAAE,CAAC;YACxB,WAAW,GAAG,KAAK,CAAC;YACpB,MAAM,GAAG,MAAM,CAAC;QAClB,CAAC;IACH,CAAC;IACD,IAAI,MAAM,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC;IAClD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,eAAe,CAAC,MAAM,CAAC,CAAC;IACxB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,4EAA4E;AAC5E,sEAAsE;AACtE,6EAA6E;AAC7E,4EAA4E;AAC5E,4EAA4E;AAC5E,YAAY;AACZ,MAAM,WAAW,GAAG,IAAI,GAAG,EAAmC,CAAC;AAE/D;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,GAAG,GAAG,aAAa,IAAI,UAAU,CAAC;IACxC,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,CAAC,GAAG,EAAE,CAAC;QACP,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,eAAe,CAAC,MAAqB;IAC5C,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,WAAW,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO;IACT,CAAC;IACD,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC;AAgCD,MAAM,aAAa,GAAkB;IACnC,WAAW,EAAE,IAAI;IACjB,mBAAmB,EAAE,KAAK;IAC1B,KAAK,EAAE,KAAK;CACb,CAAC;AAEF,4EAA4E;AAC5E,gEAAgE;AAChE,IAAI,aAAa,GAAG,KAAK,CAAC;AAE1B,MAAM,UAAU,gBAAgB;IAC9B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAA6B;IAC5D,IAAI,KAAK,CAAC,WAAW,IAAI,IAAI;QAAE,aAAa,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IAC7E,IAAI,KAAK,CAAC,mBAAmB,IAAI,IAAI,EAAE,CAAC;QACtC,aAAa,CAAC,mBAAmB,GAAG,KAAK,CAAC,mBAAmB,CAAC;IAChE,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI;QAAE,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3D,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC,aAAa,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,aAAa;QAAE,OAAO,KAAK,CAAC;IAChC,aAAa,GAAG,IAAI,CAAC;IACrB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;AAEvC,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,OAAO,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,iBAAiB;IAC/B,YAAY,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AAiBD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;AAEpD,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,KAAc,EACd,MAAc;IAEd,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,MAAM,EAAC,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,CAAC,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI;QACJ,MAAM,EAAE,CAAC,CAAC,MAAM;KACjB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,wEAAwE;IACxE,MAAM,IAAI,GACR,IAAI;SACD,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;SAC/B,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC;SACjC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;QAAE,CAAC,EAAE,CAAC;IACvC,OAAO,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;AACxB,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,WAAW,CAAC,IAA6B;IACvD,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,aAAa,KAAK,CAAC,QAAQ,CAAC,MAAM,qGAAqG;YACrI,uTAAuT;YACvT,+DAA+D,KAAK,CAAC,QAAQ,CAAC,QAAQ,MAAM,CAC/F,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,aAAa,CAAC,CAAC;IACrB,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC,QAAQ,CAAC;AACxB,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC;IACjC,OAAO,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC,aAAa;QAAE,OAAO,SAAS,CAAC;IACrC,OAAO,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,GAAG,IAAI,SAAS,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC;AACrD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CACzB,QAAuB,EACvB,QAAgB,EAChB,QAEC,EACD,OAA4C,EAAE;IAE9C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;IACrC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,eAAe,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAqB;QAC7B,MAAM;QACN,QAAQ;QACR,GAAG,QAAQ;QACX,KAAK,EAAE,QAAQ,CAAC,KAAK,KAAK,IAAI;KAC/B,CAAC;IACF,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,EAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;IAC/C,aAAa,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,MAAM,CAAC,CAAC;IACd,aAAa,GAAG,KAAK,CAAC;IACtB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACnD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,eAAe,CAAC,IAAI,CAAC,CAAC;IACtB,aAAa,GAAG,IAAI,CAAC;IACrB,aAAa,GAAG,KAAK,CAAC;AACxB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,KAAK,MAAM,EAAC,QAAQ,EAAC,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACzC,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;IACtD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,MAAM;YAAE,SAAS;QAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACjB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,eAAe,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,aAAa,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,MAAM,CAAC,CAAC;IACd,aAAa,GAAG,KAAK,CAAC;IACtB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,aAAa,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,MAAM,CAAC,CAAC;IACd,aAAa,GAAG,KAAK,CAAC;IACtB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,OAAO,EAAE,CAAC;QACZ,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,OAAO,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;QACxC,aAAa,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/D,aAAa,GAAG,KAAK,CAAC;IACxB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,OAAO;IACrB,OAAO,aAAa,CAAC,KAAK,CAAC;AAC7B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -68,6 +68,9 @@ import { registerGrowthSignals } from './tools/growth-signals.js';
|
|
|
68
68
|
import { registerServerStatus } from './tools/server-status.js';
|
|
69
69
|
import { registerDevArtifacts } from './tools/dev-artifacts.js';
|
|
70
70
|
import { registerSequenceAnalysis } from './tools/sequence-analysis.js';
|
|
71
|
+
import { registerLadderProbe } from './tools/ladder-probe.js';
|
|
72
|
+
import { registerCensusDiff } from './tools/census-diff.js';
|
|
73
|
+
import { registerArtifactBudget } from './tools/artifact-budget.js';
|
|
71
74
|
import { registerLeakReport } from './tools/leak-report.js';
|
|
72
75
|
import { registerMatchObject } from './tools/match-object.js';
|
|
73
76
|
import { registerExplainDelta } from './tools/explain-delta.js';
|
|
@@ -77,6 +80,8 @@ import { registerFindingIndex } from './tools/finding-index.js';
|
|
|
77
80
|
import { registerAppHeap } from './tools/app-heap.js';
|
|
78
81
|
import { registerHuntReport } from './tools/hunt-report.js';
|
|
79
82
|
import { registerEventRegistry } from './tools/event-registry.js';
|
|
83
|
+
import { registerChainWalk } from './tools/chain-walk.js';
|
|
84
|
+
import { registerPopulationVsOwners } from './tools/population-vs-owners.js';
|
|
80
85
|
import { registerDominatorChain } from './tools/dominator-chain.js';
|
|
81
86
|
import { registerDuplicateObjects } from './tools/duplicate-objects.js';
|
|
82
87
|
import { registerRetainerLayers } from './tools/retainer-layers.js';
|
|
@@ -84,12 +89,39 @@ import { registerBatch } from './tools/batch.js';
|
|
|
84
89
|
import { registerPopulationDiff } from './tools/population-diff.js';
|
|
85
90
|
import { registerDominatorAttribution } from './tools/dominator-attribution.js';
|
|
86
91
|
import { registerCollectionTrend } from './tools/collection-trend.js';
|
|
92
|
+
import { registerCollectionDiff } from './tools/collection-diff.js';
|
|
93
|
+
import { registerModuleAttribution } from './tools/module-attribution.js';
|
|
94
|
+
import { registerScriptCensus } from './tools/script-census.js';
|
|
95
|
+
import { registerAsyncCensus } from './tools/async-census.js';
|
|
96
|
+
import { registerWeakRefCensus } from './tools/weakref-census.js';
|
|
97
|
+
import { registerPropertyNames } from './tools/property-names.js';
|
|
87
98
|
import { registerVerifyFix } from './tools/verify-fix.js';
|
|
88
99
|
import { registerToolsIndex } from './tools/tools-index.js';
|
|
89
100
|
import { registerAnalyzeRun } from './tools/analyze-run.js';
|
|
101
|
+
import { registerEvalAcross } from './tools/eval-across.js';
|
|
102
|
+
import { registerSettleCheck } from './tools/settle-check.js';
|
|
103
|
+
import { registerUnitCost } from './tools/unit-cost.js';
|
|
104
|
+
import { registerIdentify } from './tools/identify.js';
|
|
105
|
+
import { registerWhatIf } from './tools/what-if.js';
|
|
106
|
+
import { registerMetric } from './tools/metric.js';
|
|
107
|
+
import { registerTraceAll } from './tools/trace-all.js';
|
|
108
|
+
import { registerRetainerDiff } from './tools/retainer-diff.js';
|
|
109
|
+
import { registerAppConfig } from './tools/app-config.js';
|
|
110
|
+
import { registerIdentityDiff } from './tools/identity-diff.js';
|
|
111
|
+
import { registerNextMeasurement } from './tools/next-measurement.js';
|
|
112
|
+
import { registerReplicate } from './tools/replicate.js';
|
|
113
|
+
import { registerRoundAudit } from './tools/round-audit.js';
|
|
114
|
+
import { registerDomAudit } from './tools/dom-audit.js';
|
|
115
|
+
import { registerSparseElements } from './tools/sparse-elements.js';
|
|
116
|
+
import { registerAnonymizeSnapshot } from './tools/anonymize-snapshot.js';
|
|
117
|
+
import { registerRoundDigest } from './tools/round-digest.js';
|
|
118
|
+
import { registerReactOwners } from './tools/react-owners.js';
|
|
119
|
+
import { registerReactUpdateQueues } from './tools/react-update-queues.js';
|
|
120
|
+
import { registerIdSpaceAudit } from './tools/id-space-audit.js';
|
|
121
|
+
import { SERVER_VERSION } from './server-version.js';
|
|
90
122
|
const server = new McpServer({
|
|
91
123
|
name: 'memlab',
|
|
92
|
-
version:
|
|
124
|
+
version: SERVER_VERSION, // single source: src/server-version.ts
|
|
93
125
|
});
|
|
94
126
|
// Wrap every tool with a wall-clock guardrail (default 90s, override per-call
|
|
95
127
|
// with timeout_ms or globally with MEMLAB_ANALYSIS_TIMEOUT_MS). Must run before
|
|
@@ -147,6 +179,9 @@ registerGrowthSignals(server);
|
|
|
147
179
|
registerServerStatus(server);
|
|
148
180
|
registerDevArtifacts(server);
|
|
149
181
|
registerSequenceAnalysis(server);
|
|
182
|
+
registerLadderProbe(server);
|
|
183
|
+
registerCensusDiff(server);
|
|
184
|
+
registerArtifactBudget(server);
|
|
150
185
|
registerLeakReport(server);
|
|
151
186
|
registerMatchObject(server);
|
|
152
187
|
registerExplainDelta(server);
|
|
@@ -156,6 +191,8 @@ registerFindingIndex(server);
|
|
|
156
191
|
registerAppHeap(server);
|
|
157
192
|
registerHuntReport(server);
|
|
158
193
|
registerEventRegistry(server);
|
|
194
|
+
registerChainWalk(server);
|
|
195
|
+
registerPopulationVsOwners(server);
|
|
159
196
|
registerDominatorChain(server);
|
|
160
197
|
registerDuplicateObjects(server);
|
|
161
198
|
registerRetainerLayers(server);
|
|
@@ -163,9 +200,35 @@ registerBatch(server);
|
|
|
163
200
|
registerPopulationDiff(server);
|
|
164
201
|
registerDominatorAttribution(server);
|
|
165
202
|
registerCollectionTrend(server);
|
|
203
|
+
registerCollectionDiff(server);
|
|
204
|
+
registerModuleAttribution(server);
|
|
205
|
+
registerScriptCensus(server);
|
|
206
|
+
registerAsyncCensus(server);
|
|
207
|
+
registerWeakRefCensus(server);
|
|
208
|
+
registerPropertyNames(server);
|
|
166
209
|
registerVerifyFix(server);
|
|
167
210
|
registerToolsIndex(server);
|
|
168
211
|
registerAnalyzeRun(server);
|
|
212
|
+
registerEvalAcross(server);
|
|
213
|
+
registerSettleCheck(server);
|
|
214
|
+
registerUnitCost(server);
|
|
215
|
+
registerIdentify(server);
|
|
216
|
+
registerWhatIf(server);
|
|
217
|
+
registerMetric(server);
|
|
218
|
+
registerTraceAll(server);
|
|
219
|
+
registerRetainerDiff(server);
|
|
220
|
+
registerAppConfig(server);
|
|
221
|
+
registerIdentityDiff(server);
|
|
222
|
+
registerNextMeasurement(server);
|
|
223
|
+
registerReplicate(server);
|
|
224
|
+
registerRoundAudit(server);
|
|
225
|
+
registerDomAudit(server);
|
|
226
|
+
registerSparseElements(server);
|
|
227
|
+
registerAnonymizeSnapshot(server);
|
|
228
|
+
registerRoundDigest(server);
|
|
229
|
+
registerReactOwners(server);
|
|
230
|
+
registerReactUpdateQueues(server);
|
|
231
|
+
registerIdSpaceAudit(server);
|
|
169
232
|
async function main() {
|
|
170
233
|
const transport = new StdioServerTransport();
|
|
171
234
|
await server.connect(transport);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|