@memlab/mcp-server 2.3.0 → 2.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +10 -0
  2. package/dist/heap-state.d.ts +7 -0
  3. package/dist/heap-state.d.ts.map +1 -1
  4. package/dist/heap-state.js +11 -0
  5. package/dist/heap-state.js.map +1 -1
  6. package/dist/index.js +3 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/tools/auto-investigate.d.ts.map +1 -1
  9. package/dist/tools/auto-investigate.js +91 -49
  10. package/dist/tools/auto-investigate.js.map +1 -1
  11. package/dist/tools/diff-snapshots.d.ts.map +1 -1
  12. package/dist/tools/diff-snapshots.js +101 -44
  13. package/dist/tools/diff-snapshots.js.map +1 -1
  14. package/dist/tools/eval.js +4 -4
  15. package/dist/tools/eval.js.map +1 -1
  16. package/dist/tools/get-references.d.ts.map +1 -1
  17. package/dist/tools/get-references.js +35 -6
  18. package/dist/tools/get-references.js.map +1 -1
  19. package/dist/tools/get-referrers.d.ts.map +1 -1
  20. package/dist/tools/get-referrers.js +35 -6
  21. package/dist/tools/get-referrers.js.map +1 -1
  22. package/dist/tools/intern-opportunities.d.ts.map +1 -1
  23. package/dist/tools/intern-opportunities.js +630 -49
  24. package/dist/tools/intern-opportunities.js.map +1 -1
  25. package/dist/tools/largest-objects.d.ts.map +1 -1
  26. package/dist/tools/largest-objects.js +37 -14
  27. package/dist/tools/largest-objects.js.map +1 -1
  28. package/dist/tools/load-snapshot.d.ts +60 -0
  29. package/dist/tools/load-snapshot.d.ts.map +1 -1
  30. package/dist/tools/load-snapshot.js +313 -21
  31. package/dist/tools/load-snapshot.js.map +1 -1
  32. package/dist/tools/object-shape.d.ts.map +1 -1
  33. package/dist/tools/object-shape.js +39 -25
  34. package/dist/tools/object-shape.js.map +1 -1
  35. package/dist/tools/quick-diagnosis.d.ts.map +1 -1
  36. package/dist/tools/quick-diagnosis.js +12 -4
  37. package/dist/tools/quick-diagnosis.js.map +1 -1
  38. package/dist/tools/retainer-trace.d.ts.map +1 -1
  39. package/dist/tools/retainer-trace.js +103 -25
  40. package/dist/tools/retainer-trace.js.map +1 -1
  41. package/dist/tools/sequence-analysis.d.ts.map +1 -1
  42. package/dist/tools/sequence-analysis.js +10 -0
  43. package/dist/tools/sequence-analysis.js.map +1 -1
  44. package/dist/tools/sliced-strings.d.ts.map +1 -1
  45. package/dist/tools/sliced-strings.js +22 -4
  46. package/dist/tools/sliced-strings.js.map +1 -1
  47. package/dist/tools/snapshot-header.d.ts +28 -0
  48. package/dist/tools/snapshot-header.d.ts.map +1 -0
  49. package/dist/tools/snapshot-header.js +111 -0
  50. package/dist/tools/snapshot-header.js.map +1 -0
  51. package/dist/utils.d.ts +58 -0
  52. package/dist/utils.d.ts.map +1 -1
  53. package/dist/utils.js +145 -0
  54. package/dist/utils.js.map +1 -1
  55. package/package.json +1 -1
@@ -10,15 +10,156 @@
10
10
  import fs from 'fs';
11
11
  import os from 'os';
12
12
  import path from 'path';
13
+ import v8 from 'v8';
13
14
  import { execFileSync } from 'child_process';
14
15
  import { z } from 'zod';
15
16
  import memlabHeapAnalysis from '@memlab/heap-analysis';
16
17
  const { getFullHeapFromFile } = memlabHeapAnalysis;
17
- import { setSnapshot, getSnapshotMetadata, setSessionConfig, listSnapshots, } from '../heap-state.js';
18
+ import { setSnapshot, getSnapshotMetadata, setSessionConfig, listSnapshots, clearAllSnapshots, } from '../heap-state.js';
18
19
  import { formatBytes, formatNumber, truncateNodeName, errorResult, textResult, } from '../utils.js';
19
20
  // The bucket the Nest auto-capture + the Manifold links in diffs use, so a
20
21
  // bare snapshot filename resolves predictably (Feedback §7).
21
22
  export const DEFAULT_MANIFOLD_BUCKET = 'nest_server_nodejs_heap_snapshots';
23
+ // Size caps for the OOM guard. Server heap snapshots (Nest auto-capture, the
24
+ // Manifold bucket above) routinely run 550–2100 MB, so every one exceeds the
25
+ // conservative local-file default and a sweep previously had to pass
26
+ // max_file_size_mb on EVERY load call. When a snapshot is fetched from Manifold
27
+ // (a server capture, not an arbitrary local file) raise the effective cap to the
28
+ // analyzer's documented safe ceiling — larger than this reliably OOMs the parser
29
+ // — unless the caller set an explicit limit. Local files keep the tighter guard.
30
+ // (Sweep feedback round 6 §2.)
31
+ export const LOCAL_FILE_SIZE_LIMIT_MB = 900;
32
+ export const MANIFOLD_FETCH_SIZE_LIMIT_MB = 2100;
33
+ // A node/edge-count ceiling complements the file-size cap. The load computes a
34
+ // dominator tree via the Chrome-DevTools iterative fix-point algorithm, whose
35
+ // cost is ~O(passes × edges) and blows up with graph DEPTH and cycle density,
36
+ // not raw disk size — so a structurally deep snapshot only modestly larger on
37
+ // disk can take effectively forever. Worse, the whole load is one synchronous
38
+ // block the cooperative wall-clock guardrail cannot preempt, so there is no
39
+ // timeout to fall back on (P2403258184). We therefore refuse BEFORE starting the
40
+ // pass when the (cheaply peeked) node/edge counts exceed the ceiling, and warn
41
+ // above the soft threshold. File size is a poor proxy for dominator-pass cost,
42
+ // so these are separate from the MB caps. Override with max_nodes/max_edges, or
43
+ // bypass entirely with force:true (expect a long, uninterruptible load).
44
+ //
45
+ // These fixed values are FLOORS: the effective ceiling is auto-scaled UP from the
46
+ // process's configured old-space limit (see computeDefaultCeilings) and only
47
+ // falls back to these when the limit can't be read. A memory-starved server is
48
+ // therefore never less safe than before, while an 8 GB server admits the tier
49
+ // that previously required a hand-passed override on every call.
50
+ export const DEFAULT_MAX_NODES = 12_000_000;
51
+ export const DEFAULT_MAX_EDGES = 24_000_000;
52
+ export const WARN_NODE_COUNT = 2_000_000;
53
+ // Auto-scaling rates (sweep feedback: "the load ceiling is mismatched to Nest
54
+ // server snapshots"). Nest server captures are edge-dense (~4 edges/node), so the
55
+ // EDGE ceiling — not the node ceiling — is what rejected essentially the whole
56
+ // meaningful part of the 550–2100 MB band. Empirically, on a server started with
57
+ // --max-old-space-size=8192 the ~11–14M-node / ~45–49M-edge / ~1.1 GB tier loads
58
+ // cleanly in seconds-to-tens-of-seconds with no OOM, while the ~2 GB / 24M-node /
59
+ // 89M-edge tier is genuinely risky. Rather than hard-code one ceiling tuned to a
60
+ // single heap size, scale it from the process's actual old-space limit so an 8 GB
61
+ // server admits the 1.1 GB tier by default and a smaller server stays
62
+ // conservative. Rates chosen so ~8192 MB → ~13.9M nodes / ~55.7M edges (admits the
63
+ // 45–49M-edge band, still rejects the 89M-edge / 2 GB band).
64
+ export const NODES_PER_HEAP_MB = 1700;
65
+ export const EDGES_PER_HEAP_MB = 6800;
66
+ /**
67
+ * Configured V8 old-space limit in MB (reflects --max-old-space-size). Returns 0
68
+ * when it can't be read, so callers fall back to the fixed floors.
69
+ */
70
+ export function getOldSpaceLimitMB() {
71
+ try {
72
+ return Math.round(v8.getHeapStatistics().heap_size_limit / (1024 * 1024));
73
+ }
74
+ catch {
75
+ return 0;
76
+ }
77
+ }
78
+ /**
79
+ * Default node/edge load ceilings, auto-scaled from the configured old-space
80
+ * limit and floored at the historical fixed defaults so the ceiling never
81
+ * regresses below what was previously safe. `heapLimitMB` is 0 when the limit
82
+ * couldn't be read (ceilings then equal the fixed floors).
83
+ */
84
+ export function computeDefaultCeilings() {
85
+ const heapLimitMB = getOldSpaceLimitMB();
86
+ if (heapLimitMB <= 0) {
87
+ return {
88
+ maxNodes: DEFAULT_MAX_NODES,
89
+ maxEdges: DEFAULT_MAX_EDGES,
90
+ heapLimitMB: 0,
91
+ };
92
+ }
93
+ return {
94
+ maxNodes: Math.max(DEFAULT_MAX_NODES, Math.round(heapLimitMB * NODES_PER_HEAP_MB)),
95
+ maxEdges: Math.max(DEFAULT_MAX_EDGES, Math.round(heapLimitMB * EDGES_PER_HEAP_MB)),
96
+ heapLimitMB,
97
+ };
98
+ }
99
+ /**
100
+ * Cheaply read `node_count` / `edge_count` from a .heapsnapshot header without
101
+ * parsing the whole file. The V8 format begins with
102
+ * `{"snapshot":{"meta":{…},"node_count":N,"edge_count":M,…},…}`, so both counts
103
+ * sit within the first few KB. Reads a bounded prefix and regex-extracts them;
104
+ * returns null when they aren't found in the prefix (caller then skips the count
105
+ * guard rather than failing the load).
106
+ */
107
+ export function peekSnapshotCounts(localPath) {
108
+ let fd = null;
109
+ try {
110
+ fd = fs.openSync(localPath, 'r');
111
+ const buf = Buffer.allocUnsafe(256 * 1024);
112
+ const bytes = fs.readSync(fd, buf, 0, buf.length, 0);
113
+ const head = buf.toString('utf8', 0, bytes);
114
+ const n = head.match(/"node_count"\s*:\s*(\d+)/);
115
+ const e = head.match(/"edge_count"\s*:\s*(\d+)/);
116
+ if (!n || !e)
117
+ return null;
118
+ return { nodeCount: Number(n[1]), edgeCount: Number(e[1]) };
119
+ }
120
+ catch {
121
+ return null;
122
+ }
123
+ finally {
124
+ if (fd != null)
125
+ fs.closeSync(fd);
126
+ }
127
+ }
128
+ /**
129
+ * Estimate the largest same-app capture (in MB) that would fit under the load
130
+ * ceiling, from THIS snapshot's own node/edge density. Server captures of one app
131
+ * have a roughly stable nodes-per-MB and edges-per-MB, so once a capture is
132
+ * refused for exceeding the ceiling, `ceiling ÷ density` tells the reader what
133
+ * file size to look for instead — turning the manual "hit ceiling → compute
134
+ * density by hand → re-query Scuba for a smaller file" loop into one number
135
+ * (sweep feedback round 7 §2: the guess-and-retry loop was the dominant friction).
136
+ * Edge-density usually binds first on edge-dense Nest heaps, so we take the min of
137
+ * the node-bound and edge-bound estimates. Returns null when it can't be computed.
138
+ */
139
+ export function estimateMaxLoadableMB(counts, fileSizeMB, ceilings) {
140
+ if (fileSizeMB <= 0)
141
+ return null;
142
+ const nodesPerMB = counts.nodeCount / fileSizeMB;
143
+ const edgesPerMB = counts.edgeCount / fileSizeMB;
144
+ const byNodes = nodesPerMB > 0 ? ceilings.maxNodes / nodesPerMB : Infinity;
145
+ const byEdges = edgesPerMB > 0 ? ceilings.maxEdges / edgesPerMB : Infinity;
146
+ const mb = Math.min(byNodes, byEdges);
147
+ if (!Number.isFinite(mb) || mb <= 0)
148
+ return null;
149
+ return Math.floor(mb);
150
+ }
151
+ /**
152
+ * Resolve the effective max-file-size limit (MB). An explicit caller value always
153
+ * wins; otherwise default by source — Manifold-fetched server snapshots get the
154
+ * higher ceiling, local files keep the tighter guard.
155
+ */
156
+ export function resolveMaxFileSizeMB(explicit, fetchedFromManifold) {
157
+ if (explicit != null)
158
+ return explicit;
159
+ return fetchedFromManifold
160
+ ? MANIFOLD_FETCH_SIZE_LIMIT_MB
161
+ : LOCAL_FILE_SIZE_LIMIT_MB;
162
+ }
22
163
  /**
23
164
  * Resolve a `file_path` that may be a local path, a `manifold://bucket/key`
24
165
  * URL, or a bare snapshot filename to a local path, fetching from Manifold
@@ -47,12 +188,39 @@ export function resolveSnapshotPath(filePath) {
47
188
  manifoldKey = `${DEFAULT_MANIFOLD_BUCKET}/${manifoldKey}`;
48
189
  }
49
190
  const dest = path.join(os.tmpdir(), `memlab-${path.basename(manifoldKey).replace(/[^A-Za-z0-9._-]/g, '_')}`);
191
+ // Reuse an already-downloaded copy. The temp name is derived from the unique
192
+ // Manifold key, so a non-empty file here IS this object. This makes a RETRY
193
+ // after a size-limit rejection succeed (the prior attempt fully downloaded
194
+ // before the size check ran) instead of failing with "Local object exists",
195
+ // and avoids re-downloading multi-GB snapshots (feedback §A.1).
196
+ if (fs.existsSync(dest) && fs.statSync(dest).size > 0) {
197
+ process.stderr.write(`Reusing already-downloaded ${dest}\n`);
198
+ return { localPath: dest, fetchedFrom: manifoldKey };
199
+ }
50
200
  process.stderr.write(`Fetching ${manifoldKey} from Manifold → ${dest}…\n`);
51
- execFileSync('manifold', ['get', manifoldKey, dest], {
52
- stdio: ['ignore', 'ignore', 'pipe'],
53
- timeout: 5 * 60 * 1000,
54
- maxBuffer: 64 * 1024 * 1024,
55
- });
201
+ try {
202
+ // --overwrite_local_path so a stale/empty/partial leftover never blocks the
203
+ // fetch (the cause of the "Local object exists" retry failure).
204
+ execFileSync('manifold', ['get', '--overwrite_local_path', manifoldKey, dest], {
205
+ stdio: ['ignore', 'ignore', 'pipe'],
206
+ timeout: 5 * 60 * 1000,
207
+ maxBuffer: 64 * 1024 * 1024,
208
+ });
209
+ }
210
+ catch (err) {
211
+ const msg = err instanceof Error ? err.message : String(err);
212
+ // Friendlier message for a missing object (feedback §E.18) — the raw
213
+ // StorageException is opaque about WHY a path isn't found.
214
+ if (/not found|does not map|StorageException/i.test(msg)) {
215
+ throw new Error(`Snapshot not found in Manifold at "${manifoldKey}". ` +
216
+ `It may never have been uploaded (OnDemand-host captures often aren't), ` +
217
+ `or the name/path is wrong. Available mounts: flat/, nodes/, tree/. ` +
218
+ `List an app's snapshots with: ` +
219
+ `manifold ls ${DEFAULT_MANIFOLD_BUCKET}/flat | grep <app-name>\n\n` +
220
+ `Underlying error: ${msg}`);
221
+ }
222
+ throw err;
223
+ }
56
224
  return { localPath: dest, fetchedFrom: manifoldKey };
57
225
  }
58
226
  function findLargestObject(snapshot) {
@@ -75,6 +243,26 @@ function findLargestObject(snapshot) {
75
243
  });
76
244
  return best;
77
245
  }
246
+ // Nest auto-capture filenames embed the capture time as an epoch (ms or s).
247
+ // Surfacing it lets the agent check whether a candidate leak was likely already
248
+ // fixed since the snapshot was taken — the dominant outcome when sweeping a
249
+ // backlog of old snapshots (Feedback round 5 §12).
250
+ export function extractCaptureTime(fileName) {
251
+ const msMatch = fileName.match(/(?<!\d)(1\d{12})(?!\d)/);
252
+ const sMatch = fileName.match(/(?<!\d)(1\d{9})(?!\d)/);
253
+ let ms = null;
254
+ if (msMatch)
255
+ ms = Number(msMatch[1]);
256
+ else if (sMatch)
257
+ ms = Number(sMatch[1]) * 1000;
258
+ if (ms == null)
259
+ return null;
260
+ const d = new Date(ms);
261
+ const year = d.getUTCFullYear();
262
+ if (year < 2020 || year > 2035)
263
+ return null;
264
+ return d;
265
+ }
78
266
  function detectEnv(snapshot) {
79
267
  let hasWindow = false;
80
268
  let hasModule = false;
@@ -154,7 +342,7 @@ function quickDiagnosis(snapshot, totalSelfSize) {
154
342
  return warnings;
155
343
  }
156
344
  export function registerLoadSnapshot(server) {
157
- server.tool('memlab_load_snapshot', 'Load and parse a .heapsnapshot file. This builds indexes, computes the dominator tree, and calculates retained sizes. Returns a quick diagnosis highlighting potential issues. Accepts a local absolute path, a manifold:// URL, or a bare snapshot filename (resolved against the nest_server_nodejs_heap_snapshots bucket and fetched automatically). Multiple snapshots can be kept resident — pass keep_previous:true to load several for diffing/comparison; switch between them with memlab_snapshots.', {
345
+ server.tool('memlab_load_snapshot', 'Load and parse a .heapsnapshot file. This builds indexes, computes the dominator tree, and calculates retained sizes. Returns a quick diagnosis highlighting potential issues. Accepts a local absolute path, a manifold:// URL, or a bare snapshot filename (resolved against the nest_server_nodejs_heap_snapshots bucket and fetched automatically). Multiple snapshots can be kept resident — pass keep_previous:true to load several for diffing/comparison; switch between them with memlab_snapshots. Cost note: the load working set is several× the file size and the dominator pass runs uninterruptibly, so large/deep snapshots are memory- and time-heavy — run the server with NODE_OPTIONS="--max-old-space-size=8192", load one snapshot at a time (omit keep_previous) on large heaps, and prefer memlab_sequence_analysis (transient per-snapshot loads) when you only need trend/growth across a ladder. A node/edge-count ceiling (max_nodes/max_edges) refuses pathologically large loads before they wedge the server; the ceiling auto-scales from the server\'s configured --max-old-space-size (an 8 GB server admits the ~1.1 GB / ~14M-node / ~55M-edge Nest tier by default), and force:true self-sizes from the header counts so a one-off oversized load needs no manual max_nodes/max_edges.', {
158
346
  file_path: z
159
347
  .string()
160
348
  .describe('A local absolute path to a .heapsnapshot file, a manifold:// URL (manifold://bucket/key), or a bare snapshot filename to fetch from the nest_server_nodejs_heap_snapshots bucket.'),
@@ -178,9 +366,20 @@ export function registerLoadSnapshot(server) {
178
366
  max_file_size_mb: z
179
367
  .number()
180
368
  .optional()
181
- .default(900)
182
- .describe('Maximum file size in MB to attempt loading (default 900). Snapshots larger than this will return an error instead of risking an OOM crash. Increase if your Node.js process has extra memory (--max-old-space-size).'),
183
- }, async ({ file_path, alias, keep_previous, quiet, suppress_suggestions, max_file_size_mb, }) => {
369
+ .describe(`Maximum file size in MB to attempt loading. Defaults to ${LOCAL_FILE_SIZE_LIMIT_MB} for local files; for snapshots fetched from Manifold (a bare Nest snapshot filename or a manifold:// URL) it defaults to ${MANIFOLD_FETCH_SIZE_LIMIT_MB} — the analyzer's safe ceiling — since server captures routinely exceed ${LOCAL_FILE_SIZE_LIMIT_MB} MB. Pass an explicit value to override either default (e.g. raise it if your Node.js process has extra memory via --max-old-space-size). Snapshots larger than the effective limit return an error instead of risking an OOM crash.`),
370
+ max_nodes: z
371
+ .number()
372
+ .optional()
373
+ .describe(`Maximum node count to attempt loading. Defaults to an auto-scaled ceiling derived from the server's configured --max-old-space-size (≈${formatNumber(NODES_PER_HEAP_MB)}× the old-space MB, floored at ${formatNumber(DEFAULT_MAX_NODES)}); an 8 GB server defaults to ~${formatNumber(8192 * NODES_PER_HEAP_MB)}. The dominator-tree computation done at load is super-linear in graph size AND depth and runs uninterruptibly, so a very large/deep snapshot can wedge the server with no timeout; the count is peeked cheaply from the header and the load is refused before it starts if it exceeds this. File size is a poor proxy for this cost, so this is separate from max_file_size_mb.`),
374
+ max_edges: z
375
+ .number()
376
+ .optional()
377
+ .describe(`Maximum edge count to attempt loading; see max_nodes. Defaults to an auto-scaled ceiling (≈${formatNumber(EDGES_PER_HEAP_MB)}× the old-space MB, floored at ${formatNumber(DEFAULT_MAX_EDGES)}); an 8 GB server defaults to ~${formatNumber(8192 * EDGES_PER_HEAP_MB)}. Nest server snapshots are edge-dense (~4 edges/node), so this — not max_nodes — is usually the binding limit. Peeked from the header; the load is refused before it starts if it exceeds this.`),
378
+ force: z
379
+ .boolean()
380
+ .optional()
381
+ .describe('Bypass the node/edge-count ceiling and attempt the load anyway (default false). force:true is self-sizing — it uses the header-peeked counts, so you do NOT also need to pass max_nodes/max_edges. The load cannot be interrupted once started, so only use this when you accept a potentially very long load or possible OOM.'),
382
+ }, async ({ file_path, alias, keep_previous, quiet, suppress_suggestions, max_file_size_mb, max_nodes, max_edges, force, }) => {
184
383
  try {
185
384
  if (quiet != null || suppress_suggestions != null) {
186
385
  setSessionConfig({
@@ -212,17 +411,95 @@ export function registerLoadSnapshot(server) {
212
411
  }
213
412
  const fileStat = fs.statSync(resolved);
214
413
  const fileSizeMB = fileStat.size / (1024 * 1024);
215
- if (fileSizeMB > max_file_size_mb) {
216
- return errorResult(new Error(`Snapshot file is ${formatBytes(fileStat.size)} exceeds the ${max_file_size_mb} MB safety limit. ` +
414
+ // Manifold-fetched server snapshots get the higher ceiling by default so
415
+ // the common 550–2100 MB Nest captures load without an explicit override
416
+ // (sweep feedback round 6 §2); an explicit caller value still wins.
417
+ const effectiveMaxFileSizeMB = resolveMaxFileSizeMB(max_file_size_mb, fetchedFrom != null);
418
+ if (fileSizeMB > effectiveMaxFileSizeMB) {
419
+ const heapMB = getOldSpaceLimitMB();
420
+ const options = [
421
+ `1. Use a smaller snapshot from the same app if available`,
422
+ `2. Increase the limit: memlab_load_snapshot({max_file_size_mb: ${Math.ceil(fileSizeMB + 100)}})`,
423
+ ];
424
+ // Only recommend more memory when the server isn't already at 8 GB —
425
+ // the shipped default (feedback: the "restart with more memory" advice
426
+ // was a red herring when the server was already at 8 GB). An unknown
427
+ // limit (heapMB === 0) also satisfies this and keeps the advice, since
428
+ // we can't confirm the server is already provisioned.
429
+ if (heapMB < 8192) {
430
+ options.push(`3. Restart the MCP server with more memory: NODE_OPTIONS="--max-old-space-size=8192"`);
431
+ }
432
+ return errorResult(new Error(`Snapshot file is ${formatBytes(fileStat.size)} — exceeds the ${effectiveMaxFileSizeMB} MB safety limit. ` +
217
433
  `Loading snapshots this large often causes the MCP server to crash with an out-of-memory error, ` +
218
- `losing all analysis state.\n\n` +
434
+ `losing all analysis state.` +
435
+ (heapMB > 0
436
+ ? ` (This server's Node.js heap is ~${formatNumber(heapMB)} MB.)`
437
+ : '') +
438
+ `\n\nOptions:\n` +
439
+ options.join('\n')));
440
+ }
441
+ // Node/edge-count ceiling (P2403258184). The load's dominator pass is
442
+ // super-linear in graph size AND depth and runs as one uninterruptible
443
+ // synchronous block the wall-clock guardrail cannot preempt, so a very
444
+ // large/deep snapshot can wedge the server with no timeout. Peek the
445
+ // counts cheaply from the header and refuse BEFORE starting the pass.
446
+ const counts = peekSnapshotCounts(resolved);
447
+ const autoCeilings = computeDefaultCeilings();
448
+ const effectiveMaxNodes = max_nodes ?? autoCeilings.maxNodes;
449
+ const effectiveMaxEdges = max_edges ?? autoCeilings.maxEdges;
450
+ if (counts &&
451
+ !force &&
452
+ (counts.nodeCount > effectiveMaxNodes ||
453
+ counts.edgeCount > effectiveMaxEdges)) {
454
+ const heapMB = autoCeilings.heapLimitMB;
455
+ // Tailor the advice to the server's ACTUAL old-space size. The generic
456
+ // "restart with more memory" line is a red herring when the server is
457
+ // already at 8 GB (the shipped default) — in that case force:true is all
458
+ // that's needed, and it self-sizes from these header counts.
459
+ const heapNote = heapMB > 0
460
+ ? `This server's Node.js heap is ~${formatNumber(heapMB)} MB (--max-old-space-size), so the auto-scaled ceiling is ${formatNumber(effectiveMaxNodes)} nodes / ${formatNumber(effectiveMaxEdges)} edges. `
461
+ : '';
462
+ // Density-derived hint: from this capture's own nodes/edges per MB,
463
+ // estimate the largest same-app capture that WOULD fit, so the reader
464
+ // can pick a smaller snapshot in one query instead of hand-computing
465
+ // density and guessing (sweep feedback round 7 §2).
466
+ const estMB = estimateMaxLoadableMB(counts, fileSizeMB, {
467
+ maxNodes: effectiveMaxNodes,
468
+ maxEdges: effectiveMaxEdges,
469
+ });
470
+ const sizeHint = estMB != null
471
+ ? `This capture is ${formatBytes(fileStat.size)} at ${formatNumber(Math.round(counts.nodeCount / fileSizeMB))} nodes/MB and ${formatNumber(Math.round(counts.edgeCount / fileSizeMB))} edges/MB, so for this app the ceiling corresponds to roughly a ≤${formatNumber(estMB)} MB capture — pick a smaller snapshot below that size.`
472
+ : '';
473
+ const options = [
474
+ `1. Get trend/growth WITHOUT a full load: memlab_sequence_analysis loads snapshots transiently (one at a time) and is the right tool for a ladder.`,
475
+ `2. Use a smaller/earlier snapshot from the same ladder.${estMB != null ? ` ${sizeHint}` : ''} Check a candidate's counts first WITHOUT a load via memlab_snapshot_header.`,
476
+ `3. Load it anyway with force:true — it self-sizes from these header counts, so you do NOT also need max_nodes/max_edges: memlab_load_snapshot({file_path: "${file_path}", force: true}). Expect a long, uninterruptible dominator pass.`,
477
+ ];
478
+ // Only suggest more memory when the server is actually under-provisioned.
479
+ if (heapMB > 0 && heapMB < 8192) {
480
+ options.push(`4. This server has only ~${formatNumber(heapMB)} MB — restart it with more memory to raise the ceiling before forcing: NODE_OPTIONS="--max-old-space-size=8192".`);
481
+ }
482
+ return errorResult(new Error(`Snapshot has ${formatNumber(counts.nodeCount)} nodes / ${formatNumber(counts.edgeCount)} edges — exceeds the load ceiling ` +
483
+ `(${formatNumber(effectiveMaxNodes)} nodes / ${formatNumber(effectiveMaxEdges)} edges). ${heapNote}\n\n` +
484
+ `The load computes a dominator tree whose cost grows super-linearly with graph size and depth, and it runs as one synchronous block that the wall-clock guardrail cannot interrupt — so a snapshot this large/deep can wedge the server with no timeout. Refusing before the pass starts.\n\n` +
219
485
  `Options:\n` +
220
- `1. Use a smaller snapshot from the same app if available\n` +
221
- `2. Increase the limit: memlab_load_snapshot({max_file_size_mb: ${Math.ceil(fileSizeMB + 100)}})\n` +
222
- `3. Restart the MCP server with more memory: NODE_OPTIONS="--max-old-space-size=8192"`));
486
+ options.join('\n')));
223
487
  }
224
- if (fileSizeMB > 200) {
225
- process.stderr.write(`Loading ${formatBytes(fileStat.size)} snapshot this may take a while (parsing, computing dominators, building indexes)...\n`);
488
+ const bigBySize = fileSizeMB > 200;
489
+ const bigByCount = counts != null && counts.nodeCount > WARN_NODE_COUNT;
490
+ if (bigBySize || bigByCount) {
491
+ const countStr = counts
492
+ ? `${formatNumber(counts.nodeCount)} nodes / ${formatNumber(counts.edgeCount)} edges, `
493
+ : '';
494
+ process.stderr.write(`Loading ${formatBytes(fileStat.size)} snapshot (${countStr}parsing → dominators → retained sizes). ` +
495
+ `This runs uninterruptibly and can take minutes on a large/deep heap; if it appears to hang it is the dominator pass, not a crash.\n`);
496
+ }
497
+ // Free any resident snapshot BEFORE parsing the next so peak memory is
498
+ // one heap, not two — the double-residency that tips a large load into
499
+ // GC thrash (P2403258184 §3). Only in replace mode; keep_previous
500
+ // callers explicitly opt into holding several resident.
501
+ if (!keep_previous) {
502
+ clearAllSnapshots();
226
503
  }
227
504
  let snapshot;
228
505
  try {
@@ -234,11 +511,17 @@ export function registerLoadSnapshot(server) {
234
511
  msg.includes('allocation failed') ||
235
512
  msg.includes('JavaScript heap') ||
236
513
  msg.includes('ENOMEM')) {
514
+ const heapMB = getOldSpaceLimitMB();
515
+ const already8g = heapMB >= 8192;
237
516
  return errorResult(new Error(`Out of memory while loading ${formatBytes(fileStat.size)} snapshot. ` +
238
- `The snapshot requires more memory than is available to the MCP server process.\n\n` +
517
+ `The snapshot requires more memory than is available to the MCP server process` +
518
+ (heapMB > 0 ? ` (~${formatNumber(heapMB)} MB heap)` : '') +
519
+ `.\n\n` +
239
520
  `Try:\n` +
240
- `1. A smaller snapshot from the same app\n` +
241
- `2. Restart with more memory: NODE_OPTIONS="--max-old-space-size=8192"`));
521
+ `1. A smaller/earlier snapshot from the same app or ladder\n` +
522
+ (already8g
523
+ ? `2. This server is already at ~${formatNumber(heapMB)} MB — this snapshot is simply too large to load in full; use memlab_sequence_analysis for trend/growth without a full load.`
524
+ : `2. Restart with more memory: NODE_OPTIONS="--max-old-space-size=8192"`)));
242
525
  }
243
526
  throw loadErr;
244
527
  }
@@ -274,6 +557,15 @@ export function registerLoadSnapshot(server) {
274
557
  lines.push(`Fetched from Manifold: ${fetchedFrom}`);
275
558
  }
276
559
  lines.push(`Loaded ${fileName} (${formatBytes(fileStat.size)} on disk): ${formatNumber(nodeCount)} nodes, ${formatNumber(edgeCount)} edges, ${formatBytes(totalSize)} heap size (${envLabel} snapshot) [handle: ${meta.handle}]`);
560
+ const captured = extractCaptureTime(fileName);
561
+ if (captured) {
562
+ const iso = captured.toISOString().slice(0, 10);
563
+ // Clamp to 0: a filename whose embedded epoch is slightly ahead of
564
+ // the host clock (clock skew, or a future-dated name within the
565
+ // allowed window) must not surface as "(-N day(s) ago)".
566
+ const ageDays = Math.max(0, Math.floor((Date.now() - captured.getTime()) / 86_400_000));
567
+ lines.push(`Captured ${iso} (${ageDays} day(s) ago) — if you find a candidate, verify the fix wasn't already deployed since then before writing one.`);
568
+ }
277
569
  if (keep_previous) {
278
570
  const all = listSnapshots();
279
571
  if (all.length > 1) {
@@ -1 +1 @@
1
- {"version":3,"file":"load-snapshot.js","sourceRoot":"","sources":["../../src/tools/load-snapshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"load-snapshot.js","sourceRoot":"","sources":["../../src/tools/load-snapshot.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"object-shape.d.ts","sourceRoot":"","sources":["../../src/tools/object-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAavE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoN3D"}
1
+ {"version":3,"file":"object-shape.d.ts","sourceRoot":"","sources":["../../src/tools/object-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAavE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8O3D"}
@@ -51,6 +51,34 @@ export function registerObjectShape(server) {
51
51
  'context',
52
52
  'shortcut',
53
53
  ]);
54
+ const NULL_NAMES = new Set(['null', 'undefined', 'false', '']);
55
+ // A property whose target carries no real payload: null/undefined/false,
56
+ // the empty string, "0"/"false", Oddballs, or a zero-size hidden node.
57
+ // Used both to drop rows under non_null_only and to summarize the empty
58
+ // bulk on wide objects without dropping anything (Feedback round 5 §11).
59
+ const isEmptyTarget = (target) => {
60
+ if (target.id <= 3)
61
+ return true;
62
+ if (target.type === 'hidden' && target.self_size === 0)
63
+ return true;
64
+ if (NULL_NAMES.has(target.name) && target.self_size === 0)
65
+ return true;
66
+ if (target.name === 'Oddball' || target.name === 'system / Oddball')
67
+ return true;
68
+ if (target.isString) {
69
+ const strNode = target.toStringNode();
70
+ if (strNode) {
71
+ const val = strNode.stringValue;
72
+ if (val === '' ||
73
+ val === '0' ||
74
+ val === 'false' ||
75
+ val === 'null' ||
76
+ val === 'undefined')
77
+ return true;
78
+ }
79
+ }
80
+ return false;
81
+ };
54
82
  const sections = [];
55
83
  for (const id of ids) {
56
84
  const node = snapshot.getNodeById(id);
@@ -58,39 +86,22 @@ export function registerObjectShape(server) {
58
86
  sections.push(`**@${id}** — not found\n`);
59
87
  continue;
60
88
  }
61
- const NULL_NAMES = new Set(['null', 'undefined', 'false', '']);
62
89
  const filteredEdges = node.references
63
90
  .filter(edge => {
64
91
  if (!include_internal && !userEdgeTypes.has(edge.type))
65
92
  return false;
66
- if (non_null_only) {
67
- const target = edge.toNode;
68
- if (target.id <= 3)
69
- return false;
70
- if (target.type === 'hidden' && target.self_size === 0)
71
- return false;
72
- if (NULL_NAMES.has(target.name) && target.self_size === 0)
73
- return false;
74
- if (target.name === 'Oddball' ||
75
- target.name === 'system / Oddball')
76
- return false;
77
- if (target.isString) {
78
- const strNode = target.toStringNode();
79
- if (strNode) {
80
- const val = strNode.stringValue;
81
- if (val === '' ||
82
- val === '0' ||
83
- val === 'false' ||
84
- val === 'null' ||
85
- val === 'undefined')
86
- return false;
87
- }
88
- }
89
- }
93
+ if (non_null_only && isEmptyTarget(edge.toNode))
94
+ return false;
90
95
  return true;
91
96
  })
92
97
  .sort((a, b) => b.toNode.retainedSize - a.toNode.retainedSize)
93
98
  .slice(0, limit);
99
+ // Count empty/null/0 fields over all user-visible edges (property +
100
+ // element/context/shortcut) so the footer's denominator matches the
101
+ // rows actually shown in the table (Feedback round 5 §11): a wide
102
+ // inventory object is mostly "" fields.
103
+ const userProps = node.references.filter(e => userEdgeTypes.has(e.type));
104
+ const emptyProps = userProps.filter(e => isEmptyTarget(e.toNode)).length;
94
105
  const totalEdges = node.references.length;
95
106
  const hiddenCount = include_internal
96
107
  ? 0
@@ -135,6 +146,9 @@ export function registerObjectShape(server) {
135
146
  ];
136
147
  });
137
148
  lines.push(markdownTable(headers, rows, rightCols));
149
+ if (emptyProps > 0 && userProps.length >= 8) {
150
+ lines.push('', `_${emptyProps} of ${userProps.length} fields are empty/null/0${non_null_only ? ' (hidden by non_null_only)' : ' — pass non_null_only:true to hide them'}._`);
151
+ }
138
152
  sections.push(lines.join('\n'));
139
153
  }
140
154
  // Compute property overlap summary for batch mode
@@ -1 +1 @@
1
- {"version":3,"file":"object-shape.js","sourceRoot":"","sources":["../../src/tools/object-shape.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"object-shape.js","sourceRoot":"","sources":["../../src/tools/object-shape.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"quick-diagnosis.d.ts","sourceRoot":"","sources":["../../src/tools/quick-diagnosis.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAoDvE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2S9D"}
1
+ {"version":3,"file":"quick-diagnosis.d.ts","sourceRoot":"","sources":["../../src/tools/quick-diagnosis.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAoDvE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoT9D"}