@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
@@ -0,0 +1,178 @@
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 memlabCore from '@memlab/core';
11
+ const { utils, NumericSet } = memlabCore;
12
+ import { z } from 'zod';
13
+ import { getSnapshot } from '../heap-state.js';
14
+ import { isNodeWorthInspecting, serializeNodeSummary, formatNodeSummaryTable, formatNumber, formatBytes, errorResult, toolResult, } from '../utils.js';
15
+ export function registerFindByShape(server) {
16
+ server.tool('memlab_find_by_shape', 'Find all objects that have a specific set of property names (multi-property intersection search). Unlike find_by_property which searches for a single property, this finds objects matching a "shape" — objects that have ALL of the specified properties. Useful for finding instances of a specific record type, data structure, or component when you know its property names but not its constructor.', {
17
+ properties: z
18
+ .array(z.string())
19
+ .min(1)
20
+ .describe('Property names that must ALL be present on matching objects (e.g., ["callback", "context", "priority"])'),
21
+ exclude_properties: z
22
+ .array(z.string())
23
+ .optional()
24
+ .describe('Property names that must NOT be present. Use to distinguish between similar shapes.'),
25
+ class_name: z
26
+ .string()
27
+ .optional()
28
+ .describe('Optional constructor name filter to narrow results (e.g., "Object", "EventHandlerRefInternal")'),
29
+ output_mode: z
30
+ .enum(['full', 'count', 'ids'])
31
+ .optional()
32
+ .default('full')
33
+ .describe('Output verbosity: "full" returns node summaries (default), "count" returns only count and aggregate size, "ids" returns node IDs'),
34
+ follow_property: z
35
+ .string()
36
+ .optional()
37
+ .describe("For each matched object, resolve this property edge and include the target's " +
38
+ 'name, type, and ID in the output. Enables "find objects with shape X and tell ' +
39
+ 'me the distribution of property Y" in a single call.'),
40
+ limit: z
41
+ .number()
42
+ .optional()
43
+ .default(20)
44
+ .describe('Maximum number of results (default 20)'),
45
+ }, async ({ properties, exclude_properties, class_name, output_mode, follow_property, limit, }) => {
46
+ try {
47
+ const snapshot = getSnapshot();
48
+ const requiredSet = new Set(properties);
49
+ const excludeSet = new Set(exclude_properties ?? []);
50
+ const matchesShape = (node) => {
51
+ if (!isNodeWorthInspecting(node))
52
+ return false;
53
+ if (class_name && node.name !== class_name)
54
+ return false;
55
+ const foundProps = new Set();
56
+ for (const edge of node.references) {
57
+ if (edge.type !== 'property' && edge.type !== 'element')
58
+ continue;
59
+ const name = String(edge.name_or_index);
60
+ if (excludeSet.has(name))
61
+ return false;
62
+ if (requiredSet.has(name))
63
+ foundProps.add(name);
64
+ }
65
+ return foundProps.size === requiredSet.size;
66
+ };
67
+ const shapeDesc = `{${properties.join(', ')}}` +
68
+ (exclude_properties?.length
69
+ ? ` without {${exclude_properties.join(', ')}}`
70
+ : '') +
71
+ (class_name ? ` (class: ${class_name})` : '');
72
+ if (output_mode === 'count') {
73
+ let totalCount = 0;
74
+ let totalSelf = 0;
75
+ const nodeIds = new NumericSet();
76
+ snapshot.nodes.forEach(node => {
77
+ if (!matchesShape(node))
78
+ return;
79
+ totalCount++;
80
+ totalSelf += node.self_size;
81
+ nodeIds.add(node.id);
82
+ });
83
+ if (totalCount === 0) {
84
+ return toolResult(`No objects found matching shape ${shapeDesc}`);
85
+ }
86
+ // Dominator-aware aggregate: shape-matching objects can nest on the
87
+ // dominator tree, so a raw sum of retainedSize would double-count and
88
+ // can exceed 100% of heap.
89
+ const totalRetained = utils.aggregateDominatorMetrics(nodeIds, snapshot, () => true, (node) => node.retainedSize);
90
+ return toolResult(`Objects matching shape ${shapeDesc}: ${formatNumber(totalCount)} total, ${formatBytes(totalSelf)} self size, ${formatBytes(totalRetained)} aggregate retained size (dominator-deduplicated)`);
91
+ }
92
+ const results = [];
93
+ let totalCount = 0;
94
+ snapshot.nodes.forEach(node => {
95
+ if (!matchesShape(node))
96
+ return;
97
+ totalCount++;
98
+ const size = node.retainedSize;
99
+ let inserted = false;
100
+ for (let i = 0; i < results.length; i++) {
101
+ if (size > results[i].retainedSize) {
102
+ results.splice(i, 0, node);
103
+ inserted = true;
104
+ break;
105
+ }
106
+ }
107
+ if (!inserted) {
108
+ results.push(node);
109
+ }
110
+ if (results.length > limit) {
111
+ results.length = limit;
112
+ }
113
+ });
114
+ if (totalCount === 0) {
115
+ return toolResult(`No objects found matching shape ${shapeDesc}\n\n` +
116
+ `**Tips:**\n` +
117
+ `- Check property names with \`memlab_object_shape\` on a known instance\n` +
118
+ `- Try fewer required properties to broaden the search\n` +
119
+ `- Use \`memlab_find_by_property\` with a single distinctive property first`);
120
+ }
121
+ if (output_mode === 'ids') {
122
+ return toolResult(`Found ${formatNumber(totalCount)} objects matching shape ${shapeDesc} (showing ${results.length} IDs)\n\nIDs: ${results.map(n => n.id).join(', ')}`);
123
+ }
124
+ const summaries = results.map(serializeNodeSummary);
125
+ const countNote = totalCount > results.length
126
+ ? ` (${formatNumber(totalCount)} total, showing top ${results.length})`
127
+ : '';
128
+ const outputLines = [
129
+ `Found ${formatNumber(totalCount)} objects matching shape ${shapeDesc}${countNote}`,
130
+ '',
131
+ formatNodeSummaryTable(summaries),
132
+ ];
133
+ if (follow_property && results.length > 0) {
134
+ const followDistribution = new Map();
135
+ let missingCount = 0;
136
+ for (const node of results) {
137
+ let found = false;
138
+ for (const edge of node.references) {
139
+ if (String(edge.name_or_index) === follow_property) {
140
+ const target = edge.toNode;
141
+ const key = `${target.name} (${target.type})`;
142
+ const existing = followDistribution.get(key);
143
+ if (existing) {
144
+ existing.count++;
145
+ }
146
+ else {
147
+ followDistribution.set(key, {
148
+ count: 1,
149
+ exampleId: target.id,
150
+ });
151
+ }
152
+ found = true;
153
+ break;
154
+ }
155
+ }
156
+ if (!found)
157
+ missingCount++;
158
+ }
159
+ const sorted = [...followDistribution.entries()].sort((a, b) => b[1].count - a[1].count);
160
+ outputLines.push('', `**Property \`${follow_property}\` distribution across ${results.length} matches:**`);
161
+ for (const [key, info] of sorted.slice(0, 15)) {
162
+ outputLines.push(` - ${formatNumber(info.count)}× ${key} (example: @${info.exampleId})`);
163
+ }
164
+ if (sorted.length > 15) {
165
+ outputLines.push(` - … and ${sorted.length - 15} more types`);
166
+ }
167
+ if (missingCount > 0) {
168
+ outputLines.push(` - ${formatNumber(missingCount)} object(s) missing property \`${follow_property}\``);
169
+ }
170
+ }
171
+ return toolResult(outputLines.join('\n'));
172
+ }
173
+ catch (err) {
174
+ return errorResult(err);
175
+ }
176
+ });
177
+ }
178
+ //# sourceMappingURL=find-by-shape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-by-shape.js","sourceRoot":"","sources":["../../src/tools/find-by-shape.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"find-nodes-by-class.d.ts","sourceRoot":"","sources":["../../src/tools/find-nodes-by-class.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAYvE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkChE"}
1
+ {"version":3,"file":"find-nodes-by-class.d.ts","sourceRoot":"","sources":["../../src/tools/find-nodes-by-class.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAgBvE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwFhE"}
@@ -7,28 +7,72 @@
7
7
  * @format
8
8
  * @oncall memory_lab
9
9
  */
10
+ import memlabCore from '@memlab/core';
11
+ const { utils, NumericSet } = memlabCore;
10
12
  import { z } from 'zod';
11
13
  import { getSnapshot } from '../heap-state.js';
12
- import { filterLargestObjects, serializeNodeSummary, formatNodeSummaryTable, errorResult, toolResult, } from '../utils.js';
14
+ import { filterLargestObjects, serializeNodeSummary, formatNodeSummaryTable, formatNumber, formatBytes, errorResult, toolResult, } from '../utils.js';
13
15
  export function registerFindNodesByClass(server) {
14
16
  server.tool('memlab_find_nodes_by_class', 'Find heap objects by constructor/class name. Returns matching objects sorted by retained size. Follow up with memlab_retainer_trace on a result node to see why it is retained, memlab_get_references to inspect its properties, or memlab_retainer_summary to find common retainer patterns across all instances.', {
15
17
  class_name: z
16
18
  .string()
17
19
  .describe('The constructor or class name to search for'),
20
+ output_mode: z
21
+ .enum(['full', 'count', 'ids'])
22
+ .optional()
23
+ .default('full')
24
+ .describe('Output verbosity: "full" returns node summaries sorted by retained size (default), "count" returns only total count and aggregate retained size, "ids" returns only node IDs sorted by retained size'),
18
25
  limit: z
19
26
  .number()
20
27
  .optional()
21
28
  .default(20)
22
29
  .describe('Maximum number of results (default 20)'),
23
- }, async ({ class_name, limit }) => {
30
+ }, async ({ class_name, output_mode, limit }) => {
24
31
  try {
25
32
  const snapshot = getSnapshot();
26
- const nodes = filterLargestObjects(snapshot, node => node.name === class_name && node.type === 'object', limit);
27
- const summaries = nodes.map(serializeNodeSummary);
28
- if (summaries.length === 0) {
33
+ const classFilter = (node) => node.name === class_name && node.type === 'object';
34
+ if (output_mode === 'count') {
35
+ let totalCount = 0;
36
+ let totalSelf = 0;
37
+ const nodeIds = new NumericSet();
38
+ snapshot.nodes.forEach(node => {
39
+ if (!classFilter(node))
40
+ return;
41
+ totalCount++;
42
+ totalSelf += node.self_size;
43
+ nodeIds.add(node.id);
44
+ });
45
+ if (totalCount === 0) {
46
+ return toolResult(`No objects found with class "${class_name}"`);
47
+ }
48
+ // Dominator-aware aggregate: instances of a class often nest on the
49
+ // dominator tree (e.g. a Foo retaining another Foo), so a raw sum of
50
+ // retainedSize would double-count and can exceed 100% of heap.
51
+ const totalRetained = utils.aggregateDominatorMetrics(nodeIds, snapshot, () => true, (node) => node.retainedSize);
52
+ return toolResult(`"${class_name}": ${formatNumber(totalCount)} instances, ${formatBytes(totalSelf)} total self size, ${formatBytes(totalRetained)} aggregate retained size (dominator-deduplicated)`);
53
+ }
54
+ const nodes = filterLargestObjects(snapshot, classFilter, limit);
55
+ let totalCount = 0;
56
+ if (nodes.length === limit) {
57
+ snapshot.nodes.forEach(node => {
58
+ if (classFilter(node))
59
+ totalCount++;
60
+ });
61
+ }
62
+ else {
63
+ totalCount = nodes.length;
64
+ }
65
+ if (nodes.length === 0) {
29
66
  return toolResult(`No objects found with class "${class_name}"`);
30
67
  }
31
- return toolResult(`Found ${summaries.length} "${class_name}" objects\n\n${formatNodeSummaryTable(summaries)}`);
68
+ if (output_mode === 'ids') {
69
+ return toolResult(`"${class_name}": ${formatNumber(totalCount)} total instances (showing ${nodes.length} IDs by retained size)\n\nIDs: ${nodes.map(n => n.id).join(', ')}`);
70
+ }
71
+ const summaries = nodes.map(serializeNodeSummary);
72
+ const countNote = totalCount > nodes.length
73
+ ? ` (${formatNumber(totalCount)} total, showing top ${nodes.length})`
74
+ : '';
75
+ return toolResult(`Found ${formatNumber(totalCount)} "${class_name}" objects${countNote}\n\n${formatNodeSummaryTable(summaries)}`);
32
76
  }
33
77
  catch (err) {
34
78
  return errorResult(err);
@@ -1 +1 @@
1
- {"version":3,"file":"find-nodes-by-class.js","sourceRoot":"","sources":["../../src/tools/find-nodes-by-class.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,WAAW,EAEX,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,oTAAoT,EACpT;QACE,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,QAAQ,CAAC,6CAA6C,CAAC;QAC1D,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,OAAO,CAAC,EAAE,CAAC;aACX,QAAQ,CAAC,wCAAwC,CAAC;KACtD,EACD,KAAK,EAAE,EAAC,UAAU,EAAE,KAAK,EAAC,EAAE,EAAE;QAC5B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,oBAAoB,CAChC,QAAQ,EACR,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAC1D,KAAK,CACN,CAAC;YACF,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,UAAU,CAAC,gCAAgC,UAAU,GAAG,CAAC,CAAC;YACnE,CAAC;YACD,OAAO,UAAU,CACf,SAAS,SAAS,CAAC,MAAM,KAAK,UAAU,gBAAgB,sBAAsB,CAAC,SAAS,CAAC,EAAE,CAC5F,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"find-nodes-by-class.js","sourceRoot":"","sources":["../../src/tools/find-nodes-by-class.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,MAAM,EAAC,KAAK,EAAE,UAAU,EAAC,GAAG,UAAU,CAAC;AACvC,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,oTAAoT,EACpT;QACE,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,QAAQ,CAAC,6CAA6C,CAAC;QAC1D,WAAW,EAAE,CAAC;aACX,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;aAC9B,QAAQ,EAAE;aACV,OAAO,CAAC,MAAM,CAAC;aACf,QAAQ,CACP,sMAAsM,CACvM;QACH,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,OAAO,CAAC,EAAE,CAAC;aACX,QAAQ,CAAC,wCAAwC,CAAC;KACtD,EACD,KAAK,EAAE,EAAC,UAAU,EAAE,WAAW,EAAE,KAAK,EAAC,EAAE,EAAE;QACzC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;YAC/B,MAAM,WAAW,GAAG,CAAC,IAAe,EAAE,EAAE,CACtC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;YAErD,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;gBAC5B,IAAI,UAAU,GAAG,CAAC,CAAC;gBACnB,IAAI,SAAS,GAAG,CAAC,CAAC;gBAClB,MAAM,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;gBACjC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;wBAAE,OAAO;oBAC/B,UAAU,EAAE,CAAC;oBACb,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;oBAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;gBACH,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;oBACrB,OAAO,UAAU,CAAC,gCAAgC,UAAU,GAAG,CAAC,CAAC;gBACnE,CAAC;gBACD,oEAAoE;gBACpE,qEAAqE;gBACrE,+DAA+D;gBAC/D,MAAM,aAAa,GAAG,KAAK,CAAC,yBAAyB,CACnD,OAAO,EACP,QAAQ,EACR,GAAG,EAAE,CAAC,IAAI,EACV,CAAC,IAAe,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CACvC,CAAC;gBACF,OAAO,UAAU,CACf,IAAI,UAAU,MAAM,YAAY,CAAC,UAAU,CAAC,eAAe,WAAW,CAAC,SAAS,CAAC,qBAAqB,WAAW,CAAC,aAAa,CAAC,mDAAmD,CACpL,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG,oBAAoB,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;YAEjE,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC3B,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBAC5B,IAAI,WAAW,CAAC,IAAI,CAAC;wBAAE,UAAU,EAAE,CAAC;gBACtC,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;YAC5B,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,UAAU,CAAC,gCAAgC,UAAU,GAAG,CAAC,CAAC;YACnE,CAAC;YAED,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;gBAC1B,OAAO,UAAU,CACf,IAAI,UAAU,MAAM,YAAY,CAAC,UAAU,CAAC,6BAA6B,KAAK,CAAC,MAAM,kCAAkC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACzJ,CAAC;YACJ,CAAC;YAED,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClD,MAAM,SAAS,GACb,UAAU,GAAG,KAAK,CAAC,MAAM;gBACvB,CAAC,CAAC,KAAK,YAAY,CAAC,UAAU,CAAC,uBAAuB,KAAK,CAAC,MAAM,GAAG;gBACrE,CAAC,CAAC,EAAE,CAAC;YACT,OAAO,UAAU,CACf,SAAS,YAAY,CAAC,UAAU,CAAC,KAAK,UAAU,YAAY,SAAS,OAAO,sBAAsB,CAAC,SAAS,CAAC,EAAE,CAChH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"for-each.d.ts","sourceRoot":"","sources":["../../src/tools/for-each.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AA2BvE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6MvD"}
1
+ {"version":3,"file":"for-each.d.ts","sourceRoot":"","sources":["../../src/tools/for-each.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AA2BvE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+MvD"}
@@ -176,7 +176,7 @@ export function registerForEach(server) {
176
176
  catch (err) {
177
177
  if (err instanceof Error &&
178
178
  err.message.includes('Script execution timed out')) {
179
- return errorResult(new Error(`Execution timed out after ${timeout_ms}ms`));
179
+ return errorResult(new Error(`Execution timed out after ${timeout_ms}ms. Increase timeout_ms, or use a dedicated indexed tool (memlab_find_by_property, memlab_property_distribution, memlab_class_histogram) instead of a full-snapshot walk on a large heap.`));
180
180
  }
181
181
  return errorResult(err);
182
182
  }
@@ -1 +1 @@
1
- {"version":3,"file":"for-each.js","sourceRoot":"","sources":["../../src/tools/for-each.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"for-each.js","sourceRoot":"","sources":["../../src/tools/for-each.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-node.d.ts","sourceRoot":"","sources":["../../src/tools/get-node.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAYvE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4CvD"}
1
+ {"version":3,"file":"get-node.d.ts","sourceRoot":"","sources":["../../src/tools/get-node.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAYvE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmDvD"}
@@ -41,6 +41,12 @@ export function registerGetNode(server) {
41
41
  : d.string_value;
42
42
  lines.push(`**String Value:** "${val}"`);
43
43
  }
44
+ if (node.name === 'smi number' && node.self_size === 0) {
45
+ lines.push(`**Decoded SMI Value:** ${node.id >> 1}`);
46
+ }
47
+ else if (node.name === 'heap number') {
48
+ lines.push(`**Type:** Heap Number (boxed double — value not stored in snapshot format)`);
49
+ }
44
50
  return toolResult(lines.join('\n'));
45
51
  }
46
52
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"get-node.js","sourceRoot":"","sources":["../../src/tools/get-node.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,WAAW,EAEX,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,2JAA2J,EAC3J;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;KAChE,EACD,KAAK,EAAE,EAAC,OAAO,EAAC,EAAE,EAAE;QAClB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,WAAW,CAAC,gBAAgB,OAAO,YAAY,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,KAAK,GAAG;gBACZ,YAAY,CAAC,CAAC,EAAE,EAAE;gBAClB,aAAa,CAAC,CAAC,IAAI,EAAE;gBACrB,aAAa,CAAC,CAAC,IAAI,EAAE;gBACrB,kBAAkB,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;gBAC5C,sBAAsB,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE;gBACpD,kBAAkB,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE;gBAC9C,kBAAkB,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE;gBAClD,iBAAiB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;gBAC/C,kBAAkB,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE;aAC3E,CAAC;YACF,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,CACR,wBAAwB,CAAC,CAAC,QAAQ,CAAC,SAAS,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAClG,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACjC,MAAM,GAAG,GACP,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,GAAG;oBACzB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK;oBACtC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;gBACrB,KAAK,CAAC,IAAI,CAAC,sBAAsB,GAAG,GAAG,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"get-node.js","sourceRoot":"","sources":["../../src/tools/get-node.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 registerGetString(server: McpServer): void;
12
+ //# sourceMappingURL=get-string.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-string.d.ts","sourceRoot":"","sources":["../../src/tools/get-string.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAsLvE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsGzD"}
@@ -0,0 +1,223 @@
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, formatNodeInline, errorResult, toolResult, } from '../utils.js';
13
+ function resolveStringValue(node, maxLen) {
14
+ // Try the standard stringValue API first
15
+ if (node.isString) {
16
+ const strNode = node.toStringNode();
17
+ if (strNode) {
18
+ const val = strNode.stringValue;
19
+ if (val.length > maxLen) {
20
+ return {
21
+ value: val.slice(0, maxLen),
22
+ truncated: true,
23
+ encoding: 'direct',
24
+ };
25
+ }
26
+ return { value: val, truncated: false, encoding: 'direct' };
27
+ }
28
+ }
29
+ // For concatenated strings, walk the first/second tree
30
+ if (node.name === '(concatenated string)' ||
31
+ node.type === 'concatenated string') {
32
+ return resolveConcatenatedString(node, maxLen);
33
+ }
34
+ // For sliced strings, resolve the parent and extract the slice
35
+ if (node.name === '(sliced string)' || node.type === 'sliced string') {
36
+ return resolveSlicedString(node, maxLen);
37
+ }
38
+ // For cons strings (another name for concatenated)
39
+ if (node.name === '(cons string)') {
40
+ return resolveConcatenatedString(node, maxLen);
41
+ }
42
+ return { value: '', truncated: false, encoding: 'unknown' };
43
+ }
44
+ function resolveConcatenatedString(node, maxLen) {
45
+ const parts = [];
46
+ let totalLen = 0;
47
+ let truncated = false;
48
+ function walk(n) {
49
+ if (truncated)
50
+ return;
51
+ // If this node is a flat string, get its value directly
52
+ if (n.isString) {
53
+ const strNode = n.toStringNode();
54
+ if (strNode) {
55
+ const val = strNode.stringValue;
56
+ if (totalLen + val.length > maxLen) {
57
+ parts.push(val.slice(0, maxLen - totalLen));
58
+ totalLen = maxLen;
59
+ truncated = true;
60
+ return;
61
+ }
62
+ parts.push(val);
63
+ totalLen += val.length;
64
+ return;
65
+ }
66
+ }
67
+ // Walk first and second edges for concatenated/cons strings
68
+ let first = null;
69
+ let second = null;
70
+ for (const edge of n.references) {
71
+ const name = String(edge.name_or_index);
72
+ if (name === 'first')
73
+ first = edge.toNode;
74
+ else if (name === 'second')
75
+ second = edge.toNode;
76
+ }
77
+ if (first)
78
+ walk(first);
79
+ if (second)
80
+ walk(second);
81
+ }
82
+ walk(node);
83
+ return { value: parts.join(''), truncated, encoding: 'concatenated' };
84
+ }
85
+ function resolveSlicedString(node, maxLen) {
86
+ // Sliced strings have a "parent" edge pointing to the original string
87
+ for (const edge of node.references) {
88
+ const name = String(edge.name_or_index);
89
+ if (name === 'parent') {
90
+ const parent = edge.toNode;
91
+ const resolved = resolveStringValue(parent, maxLen * 2);
92
+ // The sliced string is a substring of the parent.
93
+ // V8 stores offset and length internally, but the snapshot API
94
+ // exposes the stringValue directly via toStringNode() which should
95
+ // already handle this. If we got here, toStringNode() didn't work,
96
+ // so return the parent's full value as context.
97
+ return {
98
+ value: resolved.value,
99
+ truncated: resolved.truncated,
100
+ encoding: `sliced (from parent @${parent.id}, ${formatBytes(parent.self_size)})`,
101
+ };
102
+ }
103
+ }
104
+ return { value: '', truncated: false, encoding: 'sliced (parent not found)' };
105
+ }
106
+ function getStringStructure(node, depth = 0, maxDepth = 5) {
107
+ const lines = [];
108
+ const indent = ' '.repeat(depth);
109
+ if (depth > maxDepth) {
110
+ lines.push(`${indent}… (max depth reached)`);
111
+ return lines;
112
+ }
113
+ const typeLabel = node.type === 'concatenated string'
114
+ ? 'concat'
115
+ : node.name === '(concatenated string)'
116
+ ? 'concat'
117
+ : node.name === '(cons string)'
118
+ ? 'cons'
119
+ : node.name === '(sliced string)'
120
+ ? 'sliced'
121
+ : node.isString
122
+ ? 'flat'
123
+ : node.type;
124
+ if (node.isString &&
125
+ node.type !== 'concatenated string' &&
126
+ node.name !== '(concatenated string)' &&
127
+ node.name !== '(cons string)') {
128
+ const strNode = node.toStringNode();
129
+ if (strNode) {
130
+ const val = strNode.stringValue;
131
+ const preview = val.length > 60 ? val.slice(0, 60) + '…' : val;
132
+ lines.push(`${indent}@${node.id} [${typeLabel}] "${preview}" (${formatBytes(node.self_size)})`);
133
+ return lines;
134
+ }
135
+ }
136
+ lines.push(`${indent}@${node.id} [${typeLabel}] (${formatBytes(node.self_size)})`);
137
+ for (const edge of node.references) {
138
+ const name = String(edge.name_or_index);
139
+ if (name === 'first' || name === 'second' || name === 'parent') {
140
+ lines.push(`${indent} ${name}:`);
141
+ lines.push(...getStringStructure(edge.toNode, depth + 2, maxDepth));
142
+ }
143
+ }
144
+ return lines;
145
+ }
146
+ export function registerGetString(server) {
147
+ server.tool('memlab_get_string', 'Resolve any V8 string node to its full text value. Handles all V8 string encodings: ' +
148
+ 'flat strings, concatenated strings (ConsString with first/second tree), sliced strings ' +
149
+ '(substring of a parent), and cons strings. Returns the resolved text value and optionally ' +
150
+ 'shows the internal string tree structure. Essential when investigating event names, log ' +
151
+ 'messages, or error strings that V8 stores as concatenated string trees rather than flat strings.', {
152
+ node_id: z.number().describe('The numeric ID of the string node'),
153
+ max_length: z
154
+ .number()
155
+ .optional()
156
+ .default(10000)
157
+ .describe('Maximum characters to return (default 10000). Use higher values for full log messages.'),
158
+ show_structure: z
159
+ .boolean()
160
+ .optional()
161
+ .default(false)
162
+ .describe('Show the internal string tree structure (concatenation tree, parent references). Useful for understanding why a large parent string is kept alive by a small sliced substring.'),
163
+ }, async ({ node_id, max_length, show_structure }) => {
164
+ try {
165
+ const snapshot = getSnapshot();
166
+ const node = snapshot.getNodeById(node_id);
167
+ if (!node) {
168
+ return errorResult(`Node with id ${node_id} not found`);
169
+ }
170
+ const isStringType = node.isString ||
171
+ node.type === 'concatenated string' ||
172
+ node.type === 'sliced string' ||
173
+ node.name === '(concatenated string)' ||
174
+ node.name === '(cons string)' ||
175
+ node.name === '(sliced string)' ||
176
+ node.type === 'string';
177
+ if (!isStringType) {
178
+ return toolResult(`Node @${node_id} is not a string node (type: "${node.type}", name: "${node.name}"). ` +
179
+ 'This tool is designed for string, concatenated string, sliced string, and cons string nodes.\n\n' +
180
+ 'If you need to read a string property of an object, use `memlab_get_property` to navigate to the string node first.');
181
+ }
182
+ const resolved = resolveStringValue(node, max_length);
183
+ const lines = [];
184
+ lines.push(`**Node:** ${formatNodeInline(node.id, node.name, node.type, node.self_size)}`);
185
+ lines.push(`**Self Size:** ${formatBytes(node.self_size)} | **Retained Size:** ${formatBytes(node.retainedSize)}`);
186
+ lines.push(`**Encoding:** ${resolved.encoding}`);
187
+ lines.push(`**Length:** ${resolved.value.length}${resolved.truncated ? ` (truncated from longer value, use max_length to see more)` : ''} characters`);
188
+ lines.push('');
189
+ lines.push('**Value:**');
190
+ lines.push('```');
191
+ lines.push(resolved.value);
192
+ lines.push('```');
193
+ if (show_structure) {
194
+ lines.push('');
195
+ lines.push('**String Tree Structure:**');
196
+ lines.push('```');
197
+ lines.push(...getStringStructure(node));
198
+ lines.push('```');
199
+ }
200
+ // Show referrers for context
201
+ const referrerContexts = [];
202
+ let refCount = 0;
203
+ for (const edge of node.referrers) {
204
+ if (refCount >= 5)
205
+ break;
206
+ if (edge.fromNode.id <= 3)
207
+ continue;
208
+ referrerContexts.push(`- \`${String(edge.name_or_index)}\` on @${edge.fromNode.id} \`${edge.fromNode.name}\` (${edge.fromNode.type})`);
209
+ refCount++;
210
+ }
211
+ if (referrerContexts.length > 0) {
212
+ lines.push('');
213
+ lines.push('**Referenced by:**');
214
+ lines.push(...referrerContexts);
215
+ }
216
+ return toolResult(lines.join('\n'));
217
+ }
218
+ catch (err) {
219
+ return errorResult(err);
220
+ }
221
+ });
222
+ }
223
+ //# sourceMappingURL=get-string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-string.js","sourceRoot":"","sources":["../../src/tools/get-string.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 registerGetValue(server: McpServer): void;
12
+ //# sourceMappingURL=get-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-value.d.ts","sourceRoot":"","sources":["../../src/tools/get-value.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AA4EvE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmIxD"}