@memlab/mcp-server 2.1.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/README.md +88 -3
  2. package/dist/analysis-budget.d.ts +71 -0
  3. package/dist/analysis-budget.d.ts.map +1 -0
  4. package/dist/analysis-budget.js +118 -0
  5. package/dist/analysis-budget.js.map +1 -0
  6. package/dist/guardrail.d.ts +24 -0
  7. package/dist/guardrail.d.ts.map +1 -0
  8. package/dist/guardrail.js +65 -0
  9. package/dist/guardrail.js.map +1 -0
  10. package/dist/heap-state.d.ts +46 -1
  11. package/dist/heap-state.d.ts.map +1 -1
  12. package/dist/heap-state.js +142 -10
  13. package/dist/heap-state.js.map +1 -1
  14. package/dist/index.js +36 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/tools/array-group-by.d.ts +12 -0
  17. package/dist/tools/array-group-by.d.ts.map +1 -0
  18. package/dist/tools/array-group-by.js +191 -0
  19. package/dist/tools/array-group-by.js.map +1 -0
  20. package/dist/tools/auto-investigate.d.ts.map +1 -1
  21. package/dist/tools/auto-investigate.js +999 -37
  22. package/dist/tools/auto-investigate.js.map +1 -1
  23. package/dist/tools/cache-analysis.d.ts.map +1 -1
  24. package/dist/tools/cache-analysis.js +438 -21
  25. package/dist/tools/cache-analysis.js.map +1 -1
  26. package/dist/tools/check-health.d.ts.map +1 -1
  27. package/dist/tools/check-health.js +261 -1
  28. package/dist/tools/check-health.js.map +1 -1
  29. package/dist/tools/class-histogram.d.ts.map +1 -1
  30. package/dist/tools/class-histogram.js +142 -33
  31. package/dist/tools/class-histogram.js.map +1 -1
  32. package/dist/tools/closure-inspection.d.ts.map +1 -1
  33. package/dist/tools/closure-inspection.js +238 -25
  34. package/dist/tools/closure-inspection.js.map +1 -1
  35. package/dist/tools/detached-dom.d.ts.map +1 -1
  36. package/dist/tools/detached-dom.js +25 -3
  37. package/dist/tools/detached-dom.js.map +1 -1
  38. package/dist/tools/dev-artifacts.d.ts +33 -0
  39. package/dist/tools/dev-artifacts.d.ts.map +1 -0
  40. package/dist/tools/dev-artifacts.js +165 -0
  41. package/dist/tools/dev-artifacts.js.map +1 -0
  42. package/dist/tools/diff-snapshots.d.ts.map +1 -1
  43. package/dist/tools/diff-snapshots.js +113 -18
  44. package/dist/tools/diff-snapshots.js.map +1 -1
  45. package/dist/tools/duplicated-strings.d.ts.map +1 -1
  46. package/dist/tools/duplicated-strings.js +74 -12
  47. package/dist/tools/duplicated-strings.js.map +1 -1
  48. package/dist/tools/eval.d.ts.map +1 -1
  49. package/dist/tools/eval.js +189 -10
  50. package/dist/tools/eval.js.map +1 -1
  51. package/dist/tools/event-listener-leaks.d.ts.map +1 -1
  52. package/dist/tools/event-listener-leaks.js +235 -13
  53. package/dist/tools/event-listener-leaks.js.map +1 -1
  54. package/dist/tools/event-registry.d.ts +12 -0
  55. package/dist/tools/event-registry.d.ts.map +1 -0
  56. package/dist/tools/event-registry.js +183 -0
  57. package/dist/tools/event-registry.js.map +1 -0
  58. package/dist/tools/find-by-property.d.ts.map +1 -1
  59. package/dist/tools/find-by-property.js +113 -31
  60. package/dist/tools/find-by-property.js.map +1 -1
  61. package/dist/tools/find-by-shape.d.ts +12 -0
  62. package/dist/tools/find-by-shape.d.ts.map +1 -0
  63. package/dist/tools/find-by-shape.js +178 -0
  64. package/dist/tools/find-by-shape.js.map +1 -0
  65. package/dist/tools/find-nodes-by-class.d.ts.map +1 -1
  66. package/dist/tools/find-nodes-by-class.js +50 -6
  67. package/dist/tools/find-nodes-by-class.js.map +1 -1
  68. package/dist/tools/for-each.d.ts.map +1 -1
  69. package/dist/tools/for-each.js +1 -1
  70. package/dist/tools/for-each.js.map +1 -1
  71. package/dist/tools/get-node.d.ts.map +1 -1
  72. package/dist/tools/get-node.js +6 -0
  73. package/dist/tools/get-node.js.map +1 -1
  74. package/dist/tools/get-string.d.ts +12 -0
  75. package/dist/tools/get-string.d.ts.map +1 -0
  76. package/dist/tools/get-string.js +223 -0
  77. package/dist/tools/get-string.js.map +1 -0
  78. package/dist/tools/get-value.d.ts +12 -0
  79. package/dist/tools/get-value.d.ts.map +1 -0
  80. package/dist/tools/get-value.js +152 -0
  81. package/dist/tools/get-value.js.map +1 -0
  82. package/dist/tools/global-variables.d.ts.map +1 -1
  83. package/dist/tools/global-variables.js +54 -34
  84. package/dist/tools/global-variables.js.map +1 -1
  85. package/dist/tools/growth-signals.d.ts +12 -0
  86. package/dist/tools/growth-signals.d.ts.map +1 -0
  87. package/dist/tools/growth-signals.js +211 -0
  88. package/dist/tools/growth-signals.js.map +1 -0
  89. package/dist/tools/intern-opportunities.d.ts +12 -0
  90. package/dist/tools/intern-opportunities.d.ts.map +1 -0
  91. package/dist/tools/intern-opportunities.js +289 -0
  92. package/dist/tools/intern-opportunities.js.map +1 -0
  93. package/dist/tools/load-snapshot.d.ts +10 -0
  94. package/dist/tools/load-snapshot.d.ts.map +1 -1
  95. package/dist/tools/load-snapshot.js +152 -15
  96. package/dist/tools/load-snapshot.js.map +1 -1
  97. package/dist/tools/object-cost-breakdown.d.ts +12 -0
  98. package/dist/tools/object-cost-breakdown.d.ts.map +1 -0
  99. package/dist/tools/object-cost-breakdown.js +439 -0
  100. package/dist/tools/object-cost-breakdown.js.map +1 -0
  101. package/dist/tools/object-shape.d.ts.map +1 -1
  102. package/dist/tools/object-shape.js +95 -2
  103. package/dist/tools/object-shape.js.map +1 -1
  104. package/dist/tools/pinch-points.d.ts.map +1 -1
  105. package/dist/tools/pinch-points.js +9 -9
  106. package/dist/tools/pinch-points.js.map +1 -1
  107. package/dist/tools/property-distribution.d.ts +12 -0
  108. package/dist/tools/property-distribution.d.ts.map +1 -0
  109. package/dist/tools/property-distribution.js +168 -0
  110. package/dist/tools/property-distribution.js.map +1 -0
  111. package/dist/tools/quick-diagnosis.d.ts.map +1 -1
  112. package/dist/tools/quick-diagnosis.js +56 -19
  113. package/dist/tools/quick-diagnosis.js.map +1 -1
  114. package/dist/tools/retainer-summary.d.ts.map +1 -1
  115. package/dist/tools/retainer-summary.js +90 -5
  116. package/dist/tools/retainer-summary.js.map +1 -1
  117. package/dist/tools/retainer-trace.d.ts.map +1 -1
  118. package/dist/tools/retainer-trace.js +74 -22
  119. package/dist/tools/retainer-trace.js.map +1 -1
  120. package/dist/tools/search-nodes.d.ts.map +1 -1
  121. package/dist/tools/search-nodes.js +10 -3
  122. package/dist/tools/search-nodes.js.map +1 -1
  123. package/dist/tools/search-strings.d.ts +12 -0
  124. package/dist/tools/search-strings.d.ts.map +1 -0
  125. package/dist/tools/search-strings.js +182 -0
  126. package/dist/tools/search-strings.js.map +1 -0
  127. package/dist/tools/sequence-analysis.d.ts +12 -0
  128. package/dist/tools/sequence-analysis.d.ts.map +1 -0
  129. package/dist/tools/sequence-analysis.js +234 -0
  130. package/dist/tools/sequence-analysis.js.map +1 -0
  131. package/dist/tools/server-status.d.ts +12 -0
  132. package/dist/tools/server-status.d.ts.map +1 -0
  133. package/dist/tools/server-status.js +41 -0
  134. package/dist/tools/server-status.js.map +1 -0
  135. package/dist/tools/shape-histogram.d.ts.map +1 -1
  136. package/dist/tools/shape-histogram.js +61 -16
  137. package/dist/tools/shape-histogram.js.map +1 -1
  138. package/dist/tools/sliced-strings.d.ts.map +1 -1
  139. package/dist/tools/sliced-strings.js +16 -11
  140. package/dist/tools/sliced-strings.js.map +1 -1
  141. package/dist/tools/snapshot-summary.d.ts.map +1 -1
  142. package/dist/tools/snapshot-summary.js +55 -13
  143. package/dist/tools/snapshot-summary.js.map +1 -1
  144. package/dist/tools/snapshots.d.ts +12 -0
  145. package/dist/tools/snapshots.d.ts.map +1 -0
  146. package/dist/tools/snapshots.js +93 -0
  147. package/dist/tools/snapshots.js.map +1 -0
  148. package/dist/tools/stale-collections.d.ts.map +1 -1
  149. package/dist/tools/stale-collections.js +248 -7
  150. package/dist/tools/stale-collections.js.map +1 -1
  151. package/dist/tools/trace-dominators.d.ts.map +1 -1
  152. package/dist/tools/trace-dominators.js +28 -1
  153. package/dist/tools/trace-dominators.js.map +1 -1
  154. package/dist/tools/weakmap-entries.d.ts +12 -0
  155. package/dist/tools/weakmap-entries.d.ts.map +1 -0
  156. package/dist/tools/weakmap-entries.js +156 -0
  157. package/dist/tools/weakmap-entries.js.map +1 -0
  158. package/dist/utils.d.ts +81 -2
  159. package/dist/utils.d.ts.map +1 -1
  160. package/dist/utils.js +303 -35
  161. package/dist/utils.js.map +1 -1
  162. package/package.json +3 -3
@@ -93,7 +93,12 @@ export function registerTraceDominators(server) {
93
93
  .optional()
94
94
  .default(true)
95
95
  .describe('Collapse repetitive Promise/PromiseReaction chains into a summary (default true)'),
96
- }, async ({ node_id, max_depth, min_retained_size, collapse_promises }) => {
96
+ show_siblings: z
97
+ .boolean()
98
+ .optional()
99
+ .default(false)
100
+ .describe('At each branch point (childCount > 1), show the top-3 children with their edge names and sizes, giving visibility into where memory fans out (default false)'),
101
+ }, async ({ node_id, max_depth, min_retained_size, collapse_promises, show_siblings, }) => {
97
102
  try {
98
103
  const snapshot = getSnapshot();
99
104
  const startNode = snapshot.getNodeById(node_id);
@@ -193,6 +198,28 @@ export function registerTraceDominators(server) {
193
198
  annotations.push(`${formatNumber(s.childCount)} children`);
194
199
  const ann = annotations.length > 0 ? ` — ${annotations.join(', ')}` : '';
195
200
  lines.push(`${indent}${arrow}@${s.nodeId} ${name} (${formatBytes(s.retainedSize)})${ann}`);
201
+ // Show top-3 sibling children at branch points
202
+ if (show_siblings && s.childCount > 1 && !s.collapsedPromiseHops) {
203
+ const siblings = topChildren.get(s.nodeId);
204
+ if (siblings && siblings.length > 1) {
205
+ const parentNode = snapshot.getNodeById(s.nodeId);
206
+ const siblingIndent = indent + ' ';
207
+ const nextNodeId = i + 1 < steps.length ? steps[i + 1].nodeId : -1;
208
+ const otherChildren = siblings
209
+ .filter(c => c.id !== nextNodeId)
210
+ .slice(0, 3);
211
+ if (otherChildren.length > 0) {
212
+ lines.push(`${siblingIndent}_(other children at this branch:)_`);
213
+ for (const child of otherChildren) {
214
+ const cName = truncateNodeName(child.name, child.type, child.self_size, 50);
215
+ const cEdge = parentNode
216
+ ? findEdgeName(parentNode, child.id)
217
+ : null;
218
+ lines.push(`${siblingIndent} [${cEdge ?? '?'}] @${child.id} ${cName} (${formatBytes(child.retainedSize)})`);
219
+ }
220
+ }
221
+ }
222
+ }
196
223
  }
197
224
  // Show top children of the terminal node
198
225
  const terminalStep = rawSteps[rawSteps.length - 1];
@@ -1 +1 @@
1
- {"version":3,"file":"trace-dominators.js","sourceRoot":"","sources":["../../src/tools/trace-dominators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trace-dominators.js","sourceRoot":"","sources":["../../src/tools/trace-dominators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @format
8
+ * @oncall memory_lab
9
+ */
10
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
11
+ export declare function registerWeakMapEntries(server: McpServer): void;
12
+ //# sourceMappingURL=weakmap-entries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weakmap-entries.d.ts","sourceRoot":"","sources":["../../src/tools/weakmap-entries.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAavE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0L9D"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @format
8
+ * @oncall memory_lab
9
+ */
10
+ import { z } from 'zod';
11
+ import { getSnapshot } from '../heap-state.js';
12
+ import { formatBytes, formatNumber, markdownTable, truncateNodeName, errorResult, toolResult, } from '../utils.js';
13
+ export function registerWeakMapEntries(server) {
14
+ server.tool('memlab_weakmap_entries', 'Enumerate the key-value pairs of ONE WeakMap (node_id is REQUIRED — this is not a global scan). WeakMaps back DataStore, private fields, and metadata caches; since keys are weakly held, their entries reveal which objects are associated and what metadata is stored. First locate a WeakMap with memlab_find_nodes_by_class("WeakMap") (or memlab_largest_objects), then pass its node id here.', {
15
+ node_id: z
16
+ .number()
17
+ .describe('REQUIRED. The numeric ID of a single WeakMap node. Find candidates with memlab_find_nodes_by_class("WeakMap"); there is no scan-all-WeakMaps mode.'),
18
+ limit: z
19
+ .number()
20
+ .optional()
21
+ .default(20)
22
+ .describe('Maximum number of entries to return (default 20)'),
23
+ sort_by: z
24
+ .enum(['retained_size', 'retained', 'key_name'])
25
+ .optional()
26
+ .default('retained_size')
27
+ .describe('Sort entries by key retained size ("retained_size", alias "retained") or key name ("key_name"). Default: retained_size.'),
28
+ }, async ({ node_id, limit, sort_by }) => {
29
+ try {
30
+ const snapshot = getSnapshot();
31
+ const node = snapshot.getNodeById(node_id);
32
+ if (!node) {
33
+ return errorResult(`Node with id ${node_id} not found`);
34
+ }
35
+ if (node.name !== 'WeakMap') {
36
+ return errorResult(`@${node_id} is a ${node.name} (${node.type}), not a WeakMap. ` +
37
+ `Use \`memlab_find_nodes_by_class("WeakMap")\` to find WeakMap instances.`);
38
+ }
39
+ const entries = [];
40
+ for (const edge of node.references) {
41
+ const eName = String(edge.name_or_index);
42
+ if (eName !== 'table' && eName !== 'backing_store')
43
+ continue;
44
+ const table = edge.toNode;
45
+ const tableRefs = [];
46
+ for (const te of table.references) {
47
+ if (te.type === 'internal' || te.type === 'hidden')
48
+ continue;
49
+ tableRefs.push(te.toNode);
50
+ }
51
+ // WeakMap tables store key-value pairs: [key1, val1, key2, val2, ...]
52
+ for (let i = 0; i < tableRefs.length - 1; i += 2) {
53
+ const key = tableRefs[i];
54
+ const value = tableRefs[i + 1];
55
+ if (key.id <= 3)
56
+ continue;
57
+ if (key.name === 'undefined' || key.name === 'the_hole')
58
+ continue;
59
+ entries.push({
60
+ key,
61
+ value,
62
+ keyRetained: key.retainedSize,
63
+ valueRetained: value.retainedSize,
64
+ });
65
+ }
66
+ break;
67
+ }
68
+ // Fallback: try to read entries from ephemeron edges (some V8 versions)
69
+ if (entries.length === 0) {
70
+ for (const edge of node.references) {
71
+ if (edge.type !== 'weak' &&
72
+ edge.type !== 'property' &&
73
+ edge.type !== 'element')
74
+ continue;
75
+ const target = edge.toNode;
76
+ if (target.id <= 3)
77
+ continue;
78
+ if (target.name === 'undefined' || target.name === 'the_hole')
79
+ continue;
80
+ // Each weak edge points to a key; the corresponding value
81
+ // is the next non-weak edge or accessible through the key's references
82
+ entries.push({
83
+ key: target,
84
+ value: target,
85
+ keyRetained: target.retainedSize,
86
+ valueRetained: 0,
87
+ });
88
+ }
89
+ }
90
+ if (entries.length === 0) {
91
+ return toolResult(`WeakMap @${node_id} has no enumerable entries.\n\n` +
92
+ `**Note:** V8's WeakMap implementation uses an EphemeronHashTable ` +
93
+ `whose entries may not be fully exposed in the heap snapshot. ` +
94
+ `Try \`memlab_get_references(${node_id})\` to inspect the raw structure.`);
95
+ }
96
+ if (sort_by === 'retained_size' || sort_by === 'retained') {
97
+ entries.sort((a, b) => b.keyRetained +
98
+ b.valueRetained -
99
+ (a.keyRetained + a.valueRetained));
100
+ }
101
+ else {
102
+ entries.sort((a, b) => a.key.name.localeCompare(b.key.name));
103
+ }
104
+ const shown = entries.slice(0, limit);
105
+ const totalEntries = entries.length;
106
+ const totalKeyRetained = entries.reduce((s, e) => s + e.keyRetained, 0);
107
+ const totalValueRetained = entries.reduce((s, e) => s + e.valueRetained, 0);
108
+ const headers = [
109
+ 'Key ID',
110
+ 'Key',
111
+ 'Key Retained',
112
+ 'Value ID',
113
+ 'Value',
114
+ 'Value Retained',
115
+ ];
116
+ const rightCols = new Set([2, 5]);
117
+ const rows = shown.map(e => {
118
+ const keyName = truncateNodeName(e.key.name, e.key.type, e.key.self_size, 40);
119
+ let valueName;
120
+ if (e.value === e.key) {
121
+ valueName = '(see key)';
122
+ }
123
+ else {
124
+ valueName = truncateNodeName(e.value.name, e.value.type, e.value.self_size, 40);
125
+ if (e.value.isString) {
126
+ const strNode = e.value.toStringNode();
127
+ if (strNode) {
128
+ const val = strNode.stringValue;
129
+ valueName = `"${val.length > 35 ? val.slice(0, 35) + '...' : val}"`;
130
+ }
131
+ }
132
+ }
133
+ return [
134
+ `@${e.key.id}`,
135
+ `${keyName} (${e.key.type})`,
136
+ formatBytes(e.keyRetained),
137
+ `@${e.value.id}`,
138
+ `${valueName} (${e.value.type})`,
139
+ formatBytes(e.valueRetained),
140
+ ];
141
+ });
142
+ const lines = [
143
+ `WeakMap @${node_id}: ${formatNumber(totalEntries)} entries` +
144
+ (totalEntries > limit ? ` (showing top ${limit})` : ''),
145
+ `Total key retained: ${formatBytes(totalKeyRetained)}, total value retained: ${formatBytes(totalValueRetained)}`,
146
+ '',
147
+ markdownTable(headers, rows, rightCols),
148
+ ];
149
+ return toolResult(lines.join('\n'));
150
+ }
151
+ catch (err) {
152
+ return errorResult(err);
153
+ }
154
+ });
155
+ }
156
+ //# sourceMappingURL=weakmap-entries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weakmap-entries.js","sourceRoot":"","sources":["../../src/tools/weakmap-entries.ts"],"names":[],"mappings":"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"}
package/dist/utils.d.ts CHANGED
@@ -7,7 +7,9 @@
7
7
  * @format
8
8
  * @oncall memory_lab
9
9
  */
10
- import type { IHeapNode, IHeapEdge, IHeapSnapshot } from '@memlab/core';
10
+ import type { IHeapNode, IHeapEdge, IHeapSnapshot, HeapNodeIdSet } from '@memlab/core';
11
+ import { ScanTimeoutError, makeScanBudget } from './analysis-budget.js';
12
+ export { ScanTimeoutError, makeScanBudget };
11
13
  export interface NodeSummary {
12
14
  id: number;
13
15
  name: string;
@@ -37,24 +39,95 @@ export interface OutgoingEdge extends EdgeSummary {
37
39
  export interface IncomingEdge extends EdgeSummary {
38
40
  from_node: NodeSummary;
39
41
  }
40
- export declare function truncateNodeName(name: string, type: string, selfSize: number, maxLen?: number): string;
42
+ export declare function truncateDomToTag(name: string): string;
43
+ export declare function truncateNodeName(name: string, type: string, selfSize: number, maxLen?: number, aggressiveDom?: boolean): string;
41
44
  export declare function serializeNodeSummary(node: IHeapNode): NodeSummary;
42
45
  export declare function serializeNodeDetail(node: IHeapNode): NodeDetail;
43
46
  export declare function serializeOutgoingEdge(edge: IHeapEdge): OutgoingEdge;
44
47
  export declare function serializeIncomingEdge(edge: IHeapEdge): IncomingEdge;
45
48
  export declare function isNodeWorthInspecting(node: IHeapNode): boolean;
49
+ /**
50
+ * Property names that mark a "freshness" timestamp on a TTL/warm cache wrapper
51
+ * object (e.g. `{entries, loadedAt}`, `{items, timestamp}`). Their presence next
52
+ * to a large array/Map means the collection was loaded as a point-in-time
53
+ * snapshot, not appended to over time. Shared by cache-analysis (to recognize
54
+ * the cache shape) and growth-signals (to suppress the append-only
55
+ * false-positive on load-once caches). Feedback round 4 §B/§C.
56
+ */
57
+ export declare const FRESHNESS_TIMESTAMP_PROPS: ReadonlySet<string>;
58
+ /**
59
+ * True when `node` (typically a large Array/Map) is held by a wrapper object
60
+ * that also carries a freshness-timestamp sibling property — i.e. it is the data
61
+ * side of a `{entries, loadedAt}`-style TTL/warm cache, loaded once rather than
62
+ * grown unboundedly.
63
+ */
64
+ export declare function hasFreshnessTimestampSibling(node: IHeapNode): boolean;
65
+ /**
66
+ * Heuristic: does a (JSON-ish) string look like a cached *failure* response?
67
+ * Cached error payloads are both wasted memory and a signal that an upstream
68
+ * dependency is failing — surfacing them links a memory finding to a likely
69
+ * correctness bug. Conservative: requires a JSON-object/array head plus an
70
+ * explicit failure marker. Feedback round 4 §D.
71
+ */
72
+ export declare function looksLikeFailurePayload(value: string): boolean;
46
73
  export declare function filterLargestObjects(snapshot: IHeapSnapshot, filter: (node: IHeapNode) => boolean, limit: number): IHeapNode[];
47
74
  export type OutputMode = 'full' | 'count' | 'ids';
48
75
  export interface QueryNodesResult {
49
76
  total_count: number;
50
77
  nodes?: NodeSummary[];
51
78
  ids?: number[];
79
+ timed_out?: boolean;
52
80
  }
53
81
  export declare function queryNodes(snapshot: IHeapSnapshot, filter: (node: IHeapNode) => boolean, opts: {
54
82
  limit: number;
55
83
  offset: number;
56
84
  outputMode: OutputMode;
85
+ budget?: {
86
+ tick: () => void;
87
+ };
57
88
  }): QueryNodesResult;
89
+ /**
90
+ * Dominator-deduped retained size for a set of nodes, with a BOUNDED upward
91
+ * dominator walk (default 500 steps, mirroring auto-investigate's
92
+ * `isDominatorAncestor` maxWalk). For each node we walk up its dominator chain
93
+ * looking for another in-set ancestor; if one is found the node is dominated
94
+ * (its bytes are already counted by that ancestor) so we skip it, otherwise we
95
+ * add its retained size.
96
+ *
97
+ * Unlike `@memlab/core`'s `aggregateDominatorMetrics`, the walk is capped and
98
+ * allocates no per-node Set, so a pathological deep dominator chain (e.g. a long
99
+ * PromiseReaction linked list) cannot make this blow up. Trade-off: if a node's
100
+ * nearest in-set dominator is deeper than `maxWalk`, we conservatively KEEP it
101
+ * (treat it as maximal), which can OVER-count — so `exact` is returned `false`
102
+ * whenever any node's walk was truncated, letting callers mark the figure as an
103
+ * upper bound. Calls `tickAnalysis()` per node so it also honors the wall-clock
104
+ * guardrail.
105
+ */
106
+ export declare function boundedDominatorRetainedSize(ids: HeapNodeIdSet, snapshot: IHeapSnapshot, maxWalk?: number): {
107
+ retained: number;
108
+ exact: boolean;
109
+ };
110
+ /**
111
+ * Best-effort detection of which app a Node snapshot came from, by tallying the
112
+ * `/app(s)/<name>/` segment in bundle paths embedded throughout the heap (string
113
+ * node values, function/script names). Returns the most common segment, or null
114
+ * if nothing decisive is found (Feedback round 3 §3d).
115
+ */
116
+ export declare function detectAppName(snapshot: IHeapSnapshot): string | null;
117
+ /**
118
+ * Recognize retainer paths that route through runtime instrumentation — a
119
+ * patched global `console`, OpenTelemetry context chains, structured loggers,
120
+ * etc. Such paths are frequently reported as the GC owner even though the
121
+ * *logical* owner (a module cache, an OTel logger, a source-map cache) lives
122
+ * elsewhere and is only incidentally reachable via the instrumentation's
123
+ * captured-closure → `context` → `previous` → `Context` chain. Returns a short
124
+ * annotation when the path looks instrumentation-routed, else null
125
+ * (Feedback round 3 §3a).
126
+ */
127
+ export declare function instrumentationRetainerNote(steps: Array<{
128
+ name: string;
129
+ edgeName?: string;
130
+ }>): string | null;
58
131
  export declare function formatBytes(bytes: number): string;
59
132
  export declare function formatNumber(n: number): string;
60
133
  export declare function markdownTable(headers: string[], rows: string[][], alignRight?: Set<number>): string;
@@ -74,6 +147,12 @@ export declare function toolResult(text: string): {
74
147
  text: string;
75
148
  }[];
76
149
  };
150
+ /**
151
+ * Whether tools should omit "Suggested next steps" / "How to fix" trailers.
152
+ * Honors the session-level `suppressSuggestions` config so callers can trim
153
+ * repeated boilerplate tokens across a long investigation.
154
+ */
155
+ export declare function suggestionsSuppressed(): boolean;
77
156
  export declare function jsonResult(data: unknown): {
78
157
  content: {
79
158
  type: "text";
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}