@memlab/mcp-server 2.18.1 → 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 +30 -16
- package/bin/.eslintrc.js +26 -0
- package/bin/memlab-cli.js +313 -0
- 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/artifact-classes.d.ts +86 -0
- package/dist/artifact-classes.d.ts.map +1 -0
- package/dist/artifact-classes.js +261 -0
- package/dist/artifact-classes.js.map +1 -0
- package/dist/capture-mode.d.ts +60 -0
- package/dist/capture-mode.d.ts.map +1 -0
- package/dist/capture-mode.js +39 -0
- package/dist/capture-mode.js.map +1 -0
- package/dist/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/guardrail.d.ts.map +1 -1
- package/dist/guardrail.js +13 -0
- package/dist/guardrail.js.map +1 -1
- 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 +109 -2
- package/dist/heap-state.d.ts.map +1 -1
- package/dist/heap-state.js +194 -3
- package/dist/heap-state.js.map +1 -1
- package/dist/index.js +102 -1
- package/dist/index.js.map +1 -1
- package/dist/progress.d.ts +25 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +46 -0
- package/dist/progress.js.map +1 -0
- package/dist/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/result-handles.d.ts +11 -0
- package/dist/result-handles.d.ts.map +1 -0
- package/dist/result-handles.js +77 -0
- package/dist/result-handles.js.map +1 -0
- package/dist/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 +55 -0
- package/dist/string-index.d.ts.map +1 -0
- package/dist/string-index.js +99 -0
- package/dist/string-index.js.map +1 -0
- package/dist/tool-registry.d.ts +42 -0
- package/dist/tool-registry.d.ts.map +1 -0
- package/dist/tool-registry.js +20 -0
- package/dist/tool-registry.js.map +1 -0
- package/dist/tools/analyze-run.d.ts +12 -0
- package/dist/tools/analyze-run.d.ts.map +1 -0
- package/dist/tools/analyze-run.js +404 -0
- package/dist/tools/analyze-run.js.map +1 -0
- 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 +30 -0
- package/dist/tools/app-heap.d.ts.map +1 -0
- package/dist/tools/app-heap.js +106 -0
- package/dist/tools/app-heap.js.map +1 -0
- 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 +12 -0
- package/dist/tools/batch.d.ts.map +1 -0
- package/dist/tools/batch.js +196 -0
- package/dist/tools/batch.js.map +1 -0
- 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 +240 -14
- 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/class-histogram.d.ts.map +1 -1
- package/dist/tools/class-histogram.js +14 -3
- package/dist/tools/class-histogram.js.map +1 -1
- package/dist/tools/collection-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 +55 -0
- package/dist/tools/collection-trend.d.ts.map +1 -0
- package/dist/tools/collection-trend.js +315 -0
- package/dist/tools/collection-trend.js.map +1 -0
- package/dist/tools/detached-dom.d.ts +5 -0
- package/dist/tools/detached-dom.d.ts.map +1 -1
- package/dist/tools/detached-dom.js +368 -22
- package/dist/tools/detached-dom.js.map +1 -1
- package/dist/tools/dev-artifacts.d.ts +62 -6
- package/dist/tools/dev-artifacts.d.ts.map +1 -1
- package/dist/tools/dev-artifacts.js +685 -24
- 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/dominator-attribution.d.ts +12 -0
- package/dist/tools/dominator-attribution.d.ts.map +1 -0
- package/dist/tools/dominator-attribution.js +189 -0
- package/dist/tools/dominator-attribution.js.map +1 -0
- package/dist/tools/dominator-chain.d.ts +12 -0
- package/dist/tools/dominator-chain.d.ts.map +1 -0
- package/dist/tools/dominator-chain.js +92 -0
- package/dist/tools/dominator-chain.js.map +1 -0
- package/dist/tools/duplicate-objects.d.ts +12 -0
- package/dist/tools/duplicate-objects.d.ts.map +1 -0
- package/dist/tools/duplicate-objects.js +172 -0
- package/dist/tools/duplicate-objects.js.map +1 -0
- package/dist/tools/duplicated-strings.d.ts.map +1 -1
- package/dist/tools/duplicated-strings.js +49 -40
- 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 +79 -0
- package/dist/tools/eval.d.ts.map +1 -1
- package/dist/tools/eval.js +2523 -197
- 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 +12 -0
- package/dist/tools/explain-delta.d.ts.map +1 -0
- package/dist/tools/explain-delta.js +221 -0
- package/dist/tools/explain-delta.js.map +1 -0
- package/dist/tools/find-nodes-by-class.d.ts.map +1 -1
- package/dist/tools/find-nodes-by-class.js +112 -13
- package/dist/tools/find-nodes-by-class.js.map +1 -1
- package/dist/tools/finding-index.d.ts +203 -0
- package/dist/tools/finding-index.d.ts.map +1 -0
- package/dist/tools/finding-index.js +566 -0
- package/dist/tools/finding-index.js.map +1 -0
- package/dist/tools/for-each.d.ts.map +1 -1
- package/dist/tools/for-each.js +15 -3
- package/dist/tools/for-each.js.map +1 -1
- package/dist/tools/get-referrers.d.ts.map +1 -1
- package/dist/tools/get-referrers.js +17 -0
- package/dist/tools/get-referrers.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/hunt-report.d.ts +12 -0
- package/dist/tools/hunt-report.d.ts.map +1 -0
- package/dist/tools/hunt-report.js +186 -0
- package/dist/tools/hunt-report.js.map +1 -0
- package/dist/tools/hypothesis.d.ts +12 -0
- package/dist/tools/hypothesis.d.ts.map +1 -0
- package/dist/tools/hypothesis.js +280 -0
- package/dist/tools/hypothesis.js.map +1 -0
- 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 +116 -50
- 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 +33 -0
- package/dist/tools/ladder.d.ts.map +1 -0
- package/dist/tools/ladder.js +266 -0
- package/dist/tools/ladder.js.map +1 -0
- package/dist/tools/largest-objects.d.ts.map +1 -1
- package/dist/tools/largest-objects.js +6 -2
- package/dist/tools/largest-objects.js.map +1 -1
- package/dist/tools/leak-report.d.ts +35 -0
- package/dist/tools/leak-report.d.ts.map +1 -0
- package/dist/tools/leak-report.js +398 -0
- package/dist/tools/leak-report.js.map +1 -0
- package/dist/tools/load-snapshot.d.ts +29 -0
- package/dist/tools/load-snapshot.d.ts.map +1 -1
- package/dist/tools/load-snapshot.js +294 -23
- package/dist/tools/load-snapshot.js.map +1 -1
- package/dist/tools/map-entries.d.ts +12 -0
- package/dist/tools/map-entries.d.ts.map +1 -0
- package/dist/tools/map-entries.js +139 -0
- package/dist/tools/map-entries.js.map +1 -0
- package/dist/tools/match-object.d.ts +12 -0
- package/dist/tools/match-object.d.ts.map +1 -0
- package/dist/tools/match-object.js +165 -0
- package/dist/tools/match-object.js.map +1 -0
- package/dist/tools/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/object-shape.d.ts.map +1 -1
- package/dist/tools/object-shape.js +53 -5
- package/dist/tools/object-shape.js.map +1 -1
- package/dist/tools/population-diff.d.ts +57 -0
- package/dist/tools/population-diff.d.ts.map +1 -0
- package/dist/tools/population-diff.js +338 -0
- package/dist/tools/population-diff.js.map +1 -0
- package/dist/tools/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-layers.d.ts +23 -0
- package/dist/tools/retainer-layers.d.ts.map +1 -0
- package/dist/tools/retainer-layers.js +179 -0
- package/dist/tools/retainer-layers.js.map +1 -0
- package/dist/tools/retainer-summary.d.ts +18 -0
- package/dist/tools/retainer-summary.d.ts.map +1 -1
- package/dist/tools/retainer-summary.js +210 -51
- 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 +14 -2
- 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/search-nodes.d.ts.map +1 -1
- package/dist/tools/search-nodes.js +5 -1
- package/dist/tools/search-nodes.js.map +1 -1
- package/dist/tools/search-strings.d.ts.map +1 -1
- package/dist/tools/search-strings.js +53 -7
- package/dist/tools/search-strings.js.map +1 -1
- package/dist/tools/sequence-analysis.d.ts +53 -0
- package/dist/tools/sequence-analysis.d.ts.map +1 -1
- package/dist/tools/sequence-analysis.js +313 -89
- 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/shape-histogram.d.ts.map +1 -1
- package/dist/tools/shape-histogram.js +9 -2
- package/dist/tools/shape-histogram.js.map +1 -1
- package/dist/tools/sliced-strings.d.ts.map +1 -1
- package/dist/tools/sliced-strings.js +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 +7 -5
- package/dist/tools/string-patterns.js.map +1 -1
- package/dist/tools/tools-index.d.ts +12 -0
- package/dist/tools/tools-index.d.ts.map +1 -0
- package/dist/tools/tools-index.js +492 -0
- package/dist/tools/tools-index.js.map +1 -0
- 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 +23 -0
- package/dist/tools/verify-fix.d.ts.map +1 -0
- package/dist/tools/verify-fix.js +219 -0
- package/dist/tools/verify-fix.js.map +1 -0
- package/dist/tools/weakmap-entries.d.ts.map +1 -1
- package/dist/tools/weakmap-entries.js +6 -1
- package/dist/tools/weakmap-entries.js.map +1 -1
- package/dist/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 +238 -3
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +507 -15
- package/dist/utils.js.map +1 -1
- package/package.json +7 -6
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { z } from 'zod';
|
|
11
11
|
import { getSnapshot } from '../heap-state.js';
|
|
12
|
-
import {
|
|
12
|
+
import { resolveSavedNodeIds } from '../result-handles.js';
|
|
13
|
+
import { abbreviateBlinkTypeName, collapseRepeatedLabels, errorResult, filterLargestObjectsCounted, formatBytes, toolResult, truncateDomToTag, } from '../utils.js';
|
|
13
14
|
const FRAMEWORK_PATTERNS = new Set([
|
|
14
15
|
'system / Context',
|
|
15
16
|
'system / PromiseReaction',
|
|
@@ -40,7 +41,7 @@ function isFrameworkStep(step) {
|
|
|
40
41
|
return true;
|
|
41
42
|
return false;
|
|
42
43
|
}
|
|
43
|
-
function getRetainerTrace(node) {
|
|
44
|
+
export function getRetainerTrace(node) {
|
|
44
45
|
if (!node.hasPathEdge)
|
|
45
46
|
return null;
|
|
46
47
|
const visited = new Set([node.id]);
|
|
@@ -67,61 +68,130 @@ function getRetainerTrace(node) {
|
|
|
67
68
|
function normalizeEdgeName(name) {
|
|
68
69
|
return /^\d+$/.test(name) ? '*' : name;
|
|
69
70
|
}
|
|
70
|
-
|
|
71
|
+
// V8 suffixes per-instance node ids onto some internal names (e.g.
|
|
72
|
+
// "system / Context / scope @2548323"). Those ids differ per instance, so two
|
|
73
|
+
// traces through the SAME structural path produce different keys and are
|
|
74
|
+
// reported as separate "distinct retainer patterns" whose rendered paths are
|
|
75
|
+
// byte-for-byte identical — observed as "6 distinct retainer patterns found"
|
|
76
|
+
// followed by six indistinguishable blocks. Normalize the id out of the
|
|
77
|
+
// grouping key so structurally identical paths collapse into one row with a
|
|
78
|
+
// real N/M count. Display still uses the concrete name from a representative
|
|
79
|
+
// instance, so nothing is lost.
|
|
80
|
+
function normalizeStepName(name) {
|
|
81
|
+
return name.replace(/ @\d+\b/g, ' @…');
|
|
82
|
+
}
|
|
83
|
+
export function traceToKey(steps, frameworkFilter) {
|
|
71
84
|
const filtered = frameworkFilter
|
|
72
85
|
? steps.filter((s, i) => i === 0 || i === steps.length - 1 || !isFrameworkStep(s))
|
|
73
86
|
: steps;
|
|
74
87
|
return filtered
|
|
75
88
|
.map(s => {
|
|
76
89
|
const edge = s.edgeName != null ? `--${normalizeEdgeName(s.edgeName)}-->` : '';
|
|
77
|
-
return `${s.name}(${s.type})${edge}`;
|
|
90
|
+
return `${normalizeStepName(s.name)}(${s.type})${edge}`;
|
|
78
91
|
})
|
|
79
92
|
.join(' ');
|
|
80
93
|
}
|
|
81
|
-
|
|
94
|
+
/**
|
|
95
|
+
* Hard ceiling on ONE hop's label.
|
|
96
|
+
*
|
|
97
|
+
* Blink template names are the reason this exists. A single Oilpan collection
|
|
98
|
+
* node renders as ~600 characters of nested template arguments and write-barrier
|
|
99
|
+
* policies, e.g.
|
|
100
|
+
* `blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<
|
|
101
|
+
* blink::SVGSVGElement, cppgc::internal::StrongMemberTag, …>>>`. A sampled
|
|
102
|
+
* summary is dozens of hops across dozens of paths, so this is not a cosmetic
|
|
103
|
+
* problem: `memlab_retainer_summary` at `sample: 8, compact: true` produced
|
|
104
|
+
* **86,700 characters** and exceeded the tool-result limit outright, i.e. the
|
|
105
|
+
* tool could not be used at the sample size it is meant for.
|
|
106
|
+
*/
|
|
107
|
+
const MAX_STEP_NAME_LEN = 90;
|
|
108
|
+
/**
|
|
109
|
+
* Shorten one hop's label without changing which node it names.
|
|
110
|
+
*
|
|
111
|
+
* Order matters: elide C++ template arguments FIRST (that is where the bytes
|
|
112
|
+
* are and the elision is information-preserving about the outer type), and only
|
|
113
|
+
* then fall back to a blunt truncation.
|
|
114
|
+
*/
|
|
115
|
+
export function shortenPath(name) {
|
|
82
116
|
const isDomLike = name.includes('class="') ||
|
|
83
117
|
name.includes('aria-') ||
|
|
84
118
|
name.startsWith('<') ||
|
|
85
119
|
name.startsWith('Detached <');
|
|
86
120
|
if (isDomLike)
|
|
87
121
|
return truncateDomToTag(name);
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
122
|
+
const abbreviated = abbreviateBlinkTypeName(name);
|
|
123
|
+
if (abbreviated.length <= 40)
|
|
124
|
+
return abbreviated;
|
|
125
|
+
const parts = abbreviated.split('/');
|
|
126
|
+
if (parts.length > 2) {
|
|
127
|
+
const fileName = parts[parts.length - 1];
|
|
128
|
+
const dir = parts[parts.length - 2];
|
|
129
|
+
const short = `…/${dir}/${fileName}`;
|
|
130
|
+
return short.length <= MAX_STEP_NAME_LEN
|
|
131
|
+
? short
|
|
132
|
+
: `${short.slice(0, MAX_STEP_NAME_LEN)}…`;
|
|
133
|
+
}
|
|
134
|
+
return abbreviated.length <= MAX_STEP_NAME_LEN
|
|
135
|
+
? abbreviated
|
|
136
|
+
: `${abbreviated.slice(0, MAX_STEP_NAME_LEN)}…`;
|
|
96
137
|
}
|
|
97
|
-
function formatTraceChain(steps) {
|
|
98
|
-
|
|
138
|
+
export function formatTraceChain(steps) {
|
|
139
|
+
// Fold runs of identical `Name (type) --edge-->` hops. A linked structure
|
|
140
|
+
// (e.g. a React update queue's `.next` chain) otherwise renders hundreds of
|
|
141
|
+
// byte-identical hops, which is pure token cost.
|
|
142
|
+
const hops = [];
|
|
99
143
|
for (let i = 0; i < steps.length; i++) {
|
|
100
144
|
const s = steps[i];
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
145
|
+
const edge = s.edgeName != null && i < steps.length - 1 ? ` --${s.edgeName}--> ` : '';
|
|
146
|
+
// Same ceiling as the compact formatter: the full chain is the FATTER of
|
|
147
|
+
// the two renderings, so leaving it unbounded means the non-compact path
|
|
148
|
+
// blows the result limit even sooner than the compact one did.
|
|
149
|
+
hops.push(`${shortenPath(s.name)} (${s.type})${edge}`);
|
|
105
150
|
}
|
|
106
|
-
return
|
|
151
|
+
return collapseRepeatedLabels(hops).join('');
|
|
107
152
|
}
|
|
153
|
+
// Marks hops the framework filter removed between two rendered nodes, so a
|
|
154
|
+
// compacted chain never implies that two nodes are directly connected when they
|
|
155
|
+
// are not.
|
|
156
|
+
export const COMPACT_GAP_MARKER = '⋯';
|
|
157
|
+
/**
|
|
158
|
+
* Compact retainer chain.
|
|
159
|
+
*
|
|
160
|
+
* Compact mode used to render node names ONLY and drop every edge name. That is
|
|
161
|
+
* backwards: the edge name is usually the finding. A measured case collapsed to
|
|
162
|
+
* `Object ×3` and silently discarded `.memoizedState` and `.undoStack` — the two
|
|
163
|
+
* properties that identified the leak — and recovering them cost a full snapshot
|
|
164
|
+
* reload. So edge names are never elided here; repetition is collapsed on the
|
|
165
|
+
* NODE+edge pair instead, which still folds a genuinely repetitive `.next ×12`
|
|
166
|
+
* linked-list walk while keeping two different properties distinct.
|
|
167
|
+
*/
|
|
108
168
|
function formatTraceChainCompact(steps, frameworkFilter) {
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
169
|
+
const keep = [];
|
|
170
|
+
for (let i = 0; i < steps.length; i++) {
|
|
171
|
+
if (!frameworkFilter ||
|
|
172
|
+
i === 0 ||
|
|
173
|
+
i === steps.length - 1 ||
|
|
174
|
+
!isFrameworkStep(steps[i])) {
|
|
175
|
+
keep.push(i);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
112
178
|
const parts = [];
|
|
113
|
-
for (let
|
|
114
|
-
const
|
|
179
|
+
for (let k = 0; k < keep.length; k++) {
|
|
180
|
+
const i = keep[k];
|
|
181
|
+
const s = steps[i];
|
|
115
182
|
const name = shortenPath(s.name);
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
|
|
183
|
+
const isEnd = k === 0 || k === keep.length - 1;
|
|
184
|
+
const suffix = isEnd && s.type === 'closure' ? '()' : '';
|
|
185
|
+
// The property on THIS node that holds the next hop.
|
|
186
|
+
const edge = k < keep.length - 1 && s.edgeName != null ? `.${s.edgeName}` : '';
|
|
187
|
+
parts.push(`${name}${suffix}${edge}`);
|
|
188
|
+
// A filtered-out run between this hop and the next is an elision and must
|
|
189
|
+
// be visible; it also stops a run-collapse from spanning the gap.
|
|
190
|
+
if (k < keep.length - 1 && keep[k + 1] !== i + 1) {
|
|
191
|
+
parts.push(COMPACT_GAP_MARKER);
|
|
122
192
|
}
|
|
123
193
|
}
|
|
124
|
-
return parts.join(' → ');
|
|
194
|
+
return collapseRepeatedLabels(parts).join(' → ');
|
|
125
195
|
}
|
|
126
196
|
export function registerRetainerSummary(server) {
|
|
127
197
|
server.tool('memlab_retainer_summary', 'Trace retainer paths for multiple instances of a class (or a specific set of node IDs) and group by common patterns. Instead of tracing one node at a time, this samples N instances and shows how many share each retainer path pattern. Essential for confirming whether leaked objects share a single root cause. Use node_ids to cluster retainer patterns for specific nodes (e.g., example_node_ids from duplicated_strings). Set compact=true for abbreviated paths that use 50-70% fewer tokens.', {
|
|
@@ -140,6 +210,10 @@ export function registerRetainerSummary(server) {
|
|
|
140
210
|
'Use instead of class_name when constructor is "Object" and you know the property ' +
|
|
141
211
|
'structure (e.g., ["callback", "context"]). Matches the {prop1, prop2} naming ' +
|
|
142
212
|
'from shape_histogram output.'),
|
|
213
|
+
from_result: z
|
|
214
|
+
.string()
|
|
215
|
+
.optional()
|
|
216
|
+
.describe('Read the node ids from a result saved by memlab_eval ({save_as} / helpers.save) instead of listing them.'),
|
|
143
217
|
node_ids: z
|
|
144
218
|
.array(z.number())
|
|
145
219
|
.optional()
|
|
@@ -170,23 +244,36 @@ export function registerRetainerSummary(server) {
|
|
|
170
244
|
.describe('For each sampled node, also show its direct property edges (name -> target type/name). ' +
|
|
171
245
|
'Combines "where is it retained?" with "what does it contain?" in one call. ' +
|
|
172
246
|
'Saves a follow-up memlab_object_shape call per node.'),
|
|
173
|
-
}, async ({ class_name, name_prefix, shape, node_ids, sample, max_depth, compact, framework_filter, include_properties, }) => {
|
|
247
|
+
}, async ({ class_name, name_prefix, shape, node_ids, sample, max_depth, compact, framework_filter, include_properties, from_result, }) => {
|
|
174
248
|
try {
|
|
175
249
|
const snapshot = getSnapshot();
|
|
176
250
|
let nodes;
|
|
177
251
|
let label;
|
|
178
|
-
|
|
252
|
+
// How many nodes MATCHED, as opposed to how many were traced. Without
|
|
253
|
+
// it, a verdict drawn from the top 5 reads the same whether the
|
|
254
|
+
// population was 5 or 23,918.
|
|
255
|
+
let population = 0;
|
|
256
|
+
// A saved result stands in for an explicit id list (see
|
|
257
|
+
// result-handles.ts): same code path, ids never printed.
|
|
258
|
+
const effectiveNodeIds = node_ids && node_ids.length > 0
|
|
259
|
+
? node_ids
|
|
260
|
+
: from_result != null
|
|
261
|
+
? resolveSavedNodeIds(from_result)
|
|
262
|
+
: null;
|
|
263
|
+
if (effectiveNodeIds && effectiveNodeIds.length > 0) {
|
|
179
264
|
nodes = [];
|
|
180
|
-
for (const id of
|
|
265
|
+
for (const id of effectiveNodeIds) {
|
|
181
266
|
const node = snapshot.getNodeById(id);
|
|
182
267
|
if (node)
|
|
183
268
|
nodes.push(node);
|
|
184
269
|
}
|
|
270
|
+
// Explicit ids ARE the population; nothing was sampled away.
|
|
271
|
+
population = nodes.length;
|
|
185
272
|
label = `${nodes.length} specified node(s)`;
|
|
186
273
|
}
|
|
187
274
|
else if (shape && shape.length > 0) {
|
|
188
275
|
const requiredProps = new Set(shape);
|
|
189
|
-
nodes =
|
|
276
|
+
({ nodes, matched: population } = filterLargestObjectsCounted(snapshot, node => {
|
|
190
277
|
if (node.type !== 'object' || node.id <= 3)
|
|
191
278
|
return false;
|
|
192
279
|
const foundProps = new Set();
|
|
@@ -198,25 +285,25 @@ export function registerRetainerSummary(server) {
|
|
|
198
285
|
}
|
|
199
286
|
}
|
|
200
287
|
return foundProps.size === requiredProps.size;
|
|
201
|
-
}, sample);
|
|
288
|
+
}, sample));
|
|
202
289
|
label = `shape {${shape.join(', ')}}`;
|
|
203
290
|
}
|
|
204
291
|
else if (name_prefix) {
|
|
205
|
-
nodes =
|
|
292
|
+
({ nodes, matched: population } = filterLargestObjectsCounted(snapshot, node => node.name.startsWith(name_prefix), sample));
|
|
206
293
|
label = `prefix "${name_prefix}"`;
|
|
207
294
|
}
|
|
208
295
|
else if (class_name) {
|
|
209
296
|
// Try exact match first
|
|
210
|
-
nodes =
|
|
297
|
+
({ nodes, matched: population } = filterLargestObjectsCounted(snapshot, node => node.name === class_name, sample));
|
|
211
298
|
// Fall back to substring match (handles V8 detached DOM names
|
|
212
299
|
// like "Detached <div>" which contain angle brackets)
|
|
213
300
|
if (nodes.length === 0) {
|
|
214
|
-
nodes =
|
|
301
|
+
({ nodes, matched: population } = filterLargestObjectsCounted(snapshot, node => node.name.includes(class_name), sample));
|
|
215
302
|
}
|
|
216
303
|
label = `"${class_name}"`;
|
|
217
304
|
}
|
|
218
305
|
else {
|
|
219
|
-
return errorResult(new Error('Either class_name, name_prefix, shape, or
|
|
306
|
+
return errorResult(new Error('Either class_name, name_prefix, shape, node_ids, or from_result must be provided.'));
|
|
220
307
|
}
|
|
221
308
|
if (nodes.length === 0) {
|
|
222
309
|
const suggestions = [`No objects found for ${label}.`, ''];
|
|
@@ -265,6 +352,7 @@ export function registerRetainerSummary(server) {
|
|
|
265
352
|
}
|
|
266
353
|
}
|
|
267
354
|
const sorted = [...patterns.values()].sort((a, b) => b.count - a.count);
|
|
355
|
+
let patternHeaderIndex = -1;
|
|
268
356
|
const totalSampled = sorted.reduce((s, p) => s + p.count, 0) + noTrace;
|
|
269
357
|
const modifiers = [];
|
|
270
358
|
if (max_depth)
|
|
@@ -276,18 +364,43 @@ export function registerRetainerSummary(server) {
|
|
|
276
364
|
if (earlyStop)
|
|
277
365
|
modifiers.push('early termination — high confidence');
|
|
278
366
|
const modStr = modifiers.length > 0 ? `, ${modifiers.join(', ')}` : '';
|
|
367
|
+
// The fraction, not the count, is what licenses a conclusion. Below
|
|
368
|
+
// this the tool states what it saw and refuses to generalize from it.
|
|
369
|
+
const REPRESENTATIVE_FRACTION = 0.2;
|
|
370
|
+
const coverage = population > 0 ? totalSampled / population : 1;
|
|
371
|
+
const representative = population <= totalSampled || coverage >= REPRESENTATIVE_FRACTION;
|
|
372
|
+
const ofPopulation = population > totalSampled
|
|
373
|
+
? ` of ${population} matching — ${(coverage * 100).toFixed(1)}% sampled`
|
|
374
|
+
: '';
|
|
279
375
|
const lines = [
|
|
280
|
-
`Retainer summary for ${label} (${totalSampled} sampled${modStr})`,
|
|
376
|
+
`Retainer summary for ${label} (${totalSampled} sampled${ofPopulation}${modStr})`,
|
|
281
377
|
'',
|
|
282
378
|
];
|
|
283
379
|
if (sorted.length === 1) {
|
|
284
380
|
const conf = earlyStop
|
|
285
381
|
? ' (early termination — all samples matched)'
|
|
286
382
|
: '';
|
|
287
|
-
|
|
383
|
+
if (representative) {
|
|
384
|
+
lines.push(`**All ${sorted[0].count} sampled instances share the same retainer pattern** — likely a single root cause.${conf}`, '');
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
// Refusing the "single root cause" phrasing here is the point. A
|
|
388
|
+
// measured case reported it from 5 samples where the full
|
|
389
|
+
// population held 1,468 distinct paths, the largest covering 2.2%
|
|
390
|
+
// — and a dismissal written from that verdict names the wrong
|
|
391
|
+
// artifact family.
|
|
392
|
+
lines.push(`**All ${sorted[0].count} sampled instances share the same retainer pattern**, but they are ` +
|
|
393
|
+
`only ${(coverage * 100).toFixed(1)}% of the ${population} matching nodes.${conf}`, '', `> ⚠️ **This does NOT establish a single root cause.** The sample is picked by retained ` +
|
|
394
|
+
`size, so it is biased toward whichever subtree is largest, and a uniform top-${totalSampled} ` +
|
|
395
|
+
`is routine in populations that hold thousands of distinct paths. Run ` +
|
|
396
|
+
`\`memlab_trace_all\` over the full population before making that claim, or raise \`sample\`.`, '');
|
|
397
|
+
}
|
|
288
398
|
}
|
|
289
399
|
else {
|
|
290
|
-
|
|
400
|
+
// Filled in after the render-dedup pass below, so the count reflects
|
|
401
|
+
// what is actually printed rather than the raw trace-key count.
|
|
402
|
+
patternHeaderIndex = lines.length;
|
|
403
|
+
lines.push('', '');
|
|
291
404
|
}
|
|
292
405
|
const filterSteps = (steps) => framework_filter
|
|
293
406
|
? steps.filter((s, i) => i === 0 || i === steps.length - 1 || !isFrameworkStep(s))
|
|
@@ -320,17 +433,63 @@ export function registerRetainerSummary(server) {
|
|
|
320
433
|
lines.push(formatFn(prefixSteps));
|
|
321
434
|
lines.push('');
|
|
322
435
|
}
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
436
|
+
// Second dedup pass, on the RENDERED path. Grouping by trace key is not
|
|
437
|
+
// sufficient: the display elides a common prefix, so two patterns whose
|
|
438
|
+
// keys differ only upstream of that prefix render byte-identically and
|
|
439
|
+
// were printed as separate "distinct patterns" — measured as 10 patterns
|
|
440
|
+
// with 1 distinct body. Merge on what the caller actually sees.
|
|
441
|
+
const rendered = sorted.map(p => {
|
|
328
442
|
const displaySteps = commonPrefixLen >= 2
|
|
329
443
|
? getDisplaySteps(p).slice(commonPrefixLen)
|
|
330
444
|
: p.steps;
|
|
331
|
-
|
|
445
|
+
return commonPrefixLen >= 2
|
|
332
446
|
? `… → ${formatFn(displaySteps)}`
|
|
333
|
-
: formatFn(displaySteps)
|
|
447
|
+
: formatFn(displaySteps);
|
|
448
|
+
});
|
|
449
|
+
const merged = [];
|
|
450
|
+
const mergedByBody = new Map();
|
|
451
|
+
for (let i = 0; i < sorted.length; i++) {
|
|
452
|
+
const body = rendered[i];
|
|
453
|
+
const existing = mergedByBody.get(body);
|
|
454
|
+
if (existing) {
|
|
455
|
+
existing.count += sorted[i].count;
|
|
456
|
+
existing.total_retained += sorted[i].total_retained;
|
|
457
|
+
for (const id of sorted[i].example_ids) {
|
|
458
|
+
if (existing.example_ids.length < 3)
|
|
459
|
+
existing.example_ids.push(id);
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
else {
|
|
463
|
+
const entry = {
|
|
464
|
+
body,
|
|
465
|
+
count: sorted[i].count,
|
|
466
|
+
total_retained: sorted[i].total_retained,
|
|
467
|
+
example_ids: [...sorted[i].example_ids],
|
|
468
|
+
};
|
|
469
|
+
mergedByBody.set(body, entry);
|
|
470
|
+
merged.push(entry);
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
merged.sort((a, b) => b.count - a.count);
|
|
474
|
+
if (patternHeaderIndex >= 0) {
|
|
475
|
+
const collapsedNote = merged.length < sorted.length
|
|
476
|
+
? ` _(${sorted.length} trace keys collapsed to ${merged.length}: they differ only above the common prefix and are identical as shown.)_`
|
|
477
|
+
: '';
|
|
478
|
+
lines[patternHeaderIndex] =
|
|
479
|
+
merged.length === 1
|
|
480
|
+
? representative
|
|
481
|
+
? `**All ${totalSampled} sampled instances share ONE retainer path** — a single root cause:${collapsedNote}`
|
|
482
|
+
: `**All ${totalSampled} sampled instances share ONE retainer path**, but that is only ` +
|
|
483
|
+
`${(coverage * 100).toFixed(1)}% of the ${population} matching nodes — NOT evidence of a ` +
|
|
484
|
+
`single root cause. Confirm with \`memlab_trace_all\` over the full population.${collapsedNote}`
|
|
485
|
+
: `**${merged.length} distinct retainer patterns found**${collapsedNote}`;
|
|
486
|
+
}
|
|
487
|
+
for (let i = 0; i < merged.length; i++) {
|
|
488
|
+
const p = merged[i];
|
|
489
|
+
const pct = ((p.count / totalSampled) * 100).toFixed(0);
|
|
490
|
+
lines.push(`### Pattern ${i + 1}: ${p.count}/${totalSampled} instances (${pct}%), ${formatBytes(p.total_retained)} retained`);
|
|
491
|
+
lines.push('');
|
|
492
|
+
lines.push(p.body);
|
|
334
493
|
lines.push('');
|
|
335
494
|
lines.push(`Example nodes: ${p.example_ids.map(id => `@${id}`).join(', ')}`);
|
|
336
495
|
if (include_properties) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retainer-summary.js","sourceRoot":"","sources":["../../src/tools/retainer-summary.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"retainer-summary.js","sourceRoot":"","sources":["../../src/tools/retainer-summary.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retainer-trace.d.ts","sourceRoot":"","sources":["../../src/tools/retainer-trace.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"retainer-trace.d.ts","sourceRoot":"","sources":["../../src/tools/retainer-trace.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAqCvE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6T7D"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { z } from 'zod';
|
|
11
11
|
import { getSnapshot } from '../heap-state.js';
|
|
12
|
-
import { formatBytes, formatNodeInline, formatRetainerTree, isNodeWorthInspecting, instrumentationRetainerNote, errorResult, toolResult, } from '../utils.js';
|
|
12
|
+
import { formatBytes, formatNodeInline, collapseRepeatedRuns, formatRetainerTree, isNodeWorthInspecting, instrumentationRetainerNote, errorResult, toolResult, parseEphemeronEdge, ephemeronCaveat, } from '../utils.js';
|
|
13
13
|
// async/await desugars to a repeating retainer ladder: each suspended `await`
|
|
14
14
|
// frame is a `Promise → system / Context → Generator` triplet, and a deep async
|
|
15
15
|
// stack repeats it dozens of times with identical retained sizes. Folding the
|
|
@@ -209,6 +209,16 @@ export function registerRetainerTrace(server) {
|
|
|
209
209
|
if (instrNote) {
|
|
210
210
|
lines.push(`⚠ ${instrNote}`, '');
|
|
211
211
|
}
|
|
212
|
+
// A hop through a WeakMap key→value pair does not explain retention.
|
|
213
|
+
// Checked from the TARGET end backwards, because the last hop is the
|
|
214
|
+
// one that invalidates the conclusion outright.
|
|
215
|
+
for (let i = reverseItems.length - 1; i >= 0; i--) {
|
|
216
|
+
const eph = parseEphemeronEdge(reverseItems[i].edgeName);
|
|
217
|
+
if (!eph)
|
|
218
|
+
continue;
|
|
219
|
+
lines.push(ephemeronCaveat(eph, i === reverseItems.length - 1), '');
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
212
222
|
if (show_sizes) {
|
|
213
223
|
// Top-down indented tree: GC root at the top, each node retained by
|
|
214
224
|
// the one above it. Single, unambiguous reading direction (no mixing
|
|
@@ -243,7 +253,9 @@ export function registerRetainerTrace(server) {
|
|
|
243
253
|
collapsedBefore: fullLength - max_depth,
|
|
244
254
|
});
|
|
245
255
|
}
|
|
246
|
-
|
|
256
|
+
// Fold runs of identical hops (linked lists / intrusive chains)
|
|
257
|
+
// unless the caller explicitly asked to see every node.
|
|
258
|
+
lines.push(formatRetainerTree(expand ? treeSteps : collapseRepeatedRuns(treeSteps), { showSizes: true }));
|
|
247
259
|
}
|
|
248
260
|
else {
|
|
249
261
|
// Compact inline chain format
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retainer-trace.js","sourceRoot":"","sources":["../../src/tools/retainer-trace.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,2BAA2B,EAC3B,WAAW,EACX,UAAU,
|
|
1
|
+
{"version":3,"file":"retainer-trace.js","sourceRoot":"","sources":["../../src/tools/retainer-trace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @format
|
|
8
|
+
* @oncall memory_lab
|
|
9
|
+
*/
|
|
10
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
11
|
+
export type CheckStatus = 'ok' | 'caveat' | 'blocking';
|
|
12
|
+
export interface AuditCheck {
|
|
13
|
+
name: string;
|
|
14
|
+
status: CheckStatus;
|
|
15
|
+
detail: string;
|
|
16
|
+
}
|
|
17
|
+
interface RunManifest {
|
|
18
|
+
run_id?: string;
|
|
19
|
+
totals?: {
|
|
20
|
+
cycles?: number;
|
|
21
|
+
ok?: number;
|
|
22
|
+
fail?: number;
|
|
23
|
+
};
|
|
24
|
+
rungs?: Array<{
|
|
25
|
+
index?: number;
|
|
26
|
+
path?: string;
|
|
27
|
+
isolate_restarted?: boolean;
|
|
28
|
+
}>;
|
|
29
|
+
steps?: Record<string, {
|
|
30
|
+
attempted?: number;
|
|
31
|
+
landed?: number;
|
|
32
|
+
errors?: number;
|
|
33
|
+
rate?: number;
|
|
34
|
+
}>;
|
|
35
|
+
ladder_splits_after_rung?: number[];
|
|
36
|
+
mutates_content_per_cycle?: string[];
|
|
37
|
+
gating_verified?: Record<string, unknown>;
|
|
38
|
+
/** {declared, verified, absent, absent_props} written by hunt_runner. */
|
|
39
|
+
gating_summary?: {
|
|
40
|
+
declared?: number;
|
|
41
|
+
verified?: number;
|
|
42
|
+
absent?: number;
|
|
43
|
+
absent_props?: string[];
|
|
44
|
+
};
|
|
45
|
+
caveats?: string[];
|
|
46
|
+
stop_reason?: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Decide whether a completed round can carry a conclusion.
|
|
50
|
+
*
|
|
51
|
+
* The recurring failure is not a round that fails — it is a round that LOOKS
|
|
52
|
+
* complete and is not. One run reported `165 ok / 135 fail`, was written up as
|
|
53
|
+
* valid, and had two of its ten declared operations at 58/165 and 0/165. Another
|
|
54
|
+
* was split down the middle by a page reload and read as "the app shrank, the
|
|
55
|
+
* cleanest round on record". Every signal needed to catch both is already in the
|
|
56
|
+
* manifest; nothing was reading it.
|
|
57
|
+
*
|
|
58
|
+
* Split out as a pure function so the adjudication is testable without a run.
|
|
59
|
+
*/
|
|
60
|
+
export declare function auditManifest(m: RunManifest): {
|
|
61
|
+
checks: AuditCheck[];
|
|
62
|
+
verdict: 'TRUSTWORTHY' | 'CAVEATED' | 'UNTRUSTWORTHY';
|
|
63
|
+
};
|
|
64
|
+
export declare function registerRoundAudit(server: McpServer): void;
|
|
65
|
+
export {};
|
|
66
|
+
//# sourceMappingURL=round-audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"round-audit.d.ts","sourceRoot":"","sources":["../../src/tools/round-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAWvE,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEvD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC;IACvD,KAAK,CAAC,EAAE,KAAK,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAC,CAAC,CAAC;IAC5E,KAAK,CAAC,EAAE,MAAM,CACZ,MAAM,EACN;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC,CACtE,CAAC;IACF,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,yEAAyE;IACzE,cAAc,CAAC,EAAE;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAKD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,WAAW,GAAG;IAC7C,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,OAAO,EAAE,aAAa,GAAG,UAAU,GAAG,eAAe,CAAC;CACvD,CAkMA;AAQD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0E1D"}
|