memorydetective 1.15.0 → 1.17.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 (44) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.md +5 -3
  3. package/USAGE.md +6 -5
  4. package/dist/index.js +9 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/parsers/schemaDiscovery.d.ts +26 -0
  7. package/dist/parsers/schemaDiscovery.js +40 -11
  8. package/dist/parsers/schemaDiscovery.js.map +1 -1
  9. package/dist/runtime/parseBooleanEnv.d.ts +22 -0
  10. package/dist/runtime/parseBooleanEnv.js +47 -0
  11. package/dist/runtime/parseBooleanEnv.js.map +1 -0
  12. package/dist/runtime/platformCheck.js +4 -1
  13. package/dist/runtime/platformCheck.js.map +1 -1
  14. package/dist/runtime/securityFlags.js +3 -1
  15. package/dist/runtime/securityFlags.js.map +1 -1
  16. package/dist/tools/analyzeEnergyImpact.d.ts +7 -1
  17. package/dist/tools/analyzeEnergyImpact.js +9 -3
  18. package/dist/tools/analyzeEnergyImpact.js.map +1 -1
  19. package/dist/tools/analyzeHangs.js +21 -12
  20. package/dist/tools/analyzeHangs.js.map +1 -1
  21. package/dist/tools/analyzeLeakTimeline.js +27 -10
  22. package/dist/tools/analyzeLeakTimeline.js.map +1 -1
  23. package/dist/tools/analyzeMemoryFootprint.js +1 -2
  24. package/dist/tools/analyzeMemoryFootprint.js.map +1 -1
  25. package/dist/tools/analyzeNetworkActivity.d.ts +6 -1
  26. package/dist/tools/analyzeNetworkActivity.js +13 -1
  27. package/dist/tools/analyzeNetworkActivity.js.map +1 -1
  28. package/dist/tools/cleanupTraces.js +2 -1
  29. package/dist/tools/cleanupTraces.js.map +1 -1
  30. package/dist/tools/countAlive.d.ts +51 -5
  31. package/dist/tools/countAlive.js +140 -11
  32. package/dist/tools/countAlive.js.map +1 -1
  33. package/dist/tools/inspectTrace.js +22 -1
  34. package/dist/tools/inspectTrace.js.map +1 -1
  35. package/dist/tools/recordTimeProfile.d.ts +24 -0
  36. package/dist/tools/recordTimeProfile.js +38 -5
  37. package/dist/tools/recordTimeProfile.js.map +1 -1
  38. package/dist/tools/recordViaInstrumentsApp.d.ts +106 -0
  39. package/dist/tools/recordViaInstrumentsApp.js +274 -0
  40. package/dist/tools/recordViaInstrumentsApp.js.map +1 -0
  41. package/dist/tools/verifyFix.d.ts +18 -3
  42. package/dist/tools/verifyFix.js +51 -31
  43. package/dist/tools/verifyFix.js.map +1 -1
  44. package/package.json +2 -2
@@ -0,0 +1,274 @@
1
+ /**
2
+ * `recordViaInstrumentsApp`: open Instruments.app, prompt the user to
3
+ * record + save, watch a directory for the resulting `.trace` bundle.
4
+ * v1.16 item G.
5
+ *
6
+ * The macOS 26.x escape hatch. `xcrun xctrace record` is broken on this
7
+ * OS (the regression we documented in v1.14: `--time-limit` ignored,
8
+ * wedge, partial bundle that fails template export). Instruments.app's
9
+ * GUI still produces valid `.trace` bundles. Until Apple fixes the CLI,
10
+ * the only automated path on macOS 26.x sims is "open Instruments,
11
+ * pick a template, hit Record, Stop, Save" - and we wrap that.
12
+ *
13
+ * Why not full AppleScript automation? Instruments.app's AppleScript
14
+ * surface is minimal (queries on the `document` class only, no verbs
15
+ * for start/stop/select-template). Documented in the .sdef file at
16
+ * `Xcode.app/Contents/Applications/Instruments.app/Contents/Resources/
17
+ * Instruments.sdef`. We can query open document file URLs but cannot
18
+ * programmatically drive recording. The user-in-loop step stays.
19
+ */
20
+ import { z } from "zod";
21
+ import { existsSync, mkdirSync, statSync, readdirSync } from "node:fs";
22
+ import { resolve as resolvePath, join as joinPath } from "node:path";
23
+ import { spawn } from "node:child_process";
24
+ import { runCommand } from "../runtime/exec.js";
25
+ import { getSecurityFlags } from "../runtime/securityFlags.js";
26
+ import { inspectTrace } from "./inspectTrace.js";
27
+ export const recordViaInstrumentsAppSchema = z.object({
28
+ template: z
29
+ .string()
30
+ .default("Time Profiler")
31
+ .describe("The Instruments template the user should pick after the app launches. Surfaced in the response's instructions array. Default 'Time Profiler'. Common alternatives: 'Allocations', 'Animation Hitches', 'Leaks', 'Energy Log', 'Network Profile'."),
32
+ watchDir: z
33
+ .string()
34
+ .optional()
35
+ .describe("Directory to watch for the saved `.trace` bundle. When omitted, defaults to $MEMORYDETECTIVE_TRACE_ROOT (typically `~/Library/Application Support/memorydetective/traces`). The directory is created if it does not exist."),
36
+ timeoutSec: z
37
+ .number()
38
+ .int()
39
+ .positive()
40
+ .max(3600)
41
+ .default(600)
42
+ .describe("Maximum seconds to wait for the user to save a `.trace` before returning a timeout. Default 600 (10 minutes). Capped at 3600 (1 hour)."),
43
+ preexistingTraces: z
44
+ .array(z.string())
45
+ .optional()
46
+ .describe("Absolute paths to `.trace` bundles already in `watchDir`. The watcher excludes these so it only matches NEW files. When omitted, the watcher snapshots the directory at start. Optional override for callers who want explicit control."),
47
+ });
48
+ /**
49
+ * Pure: snapshot the set of `.trace` bundle names currently in `dir`.
50
+ * Used as the "existing files" baseline so the watcher only matches
51
+ * NEW traces. Exported for testing.
52
+ */
53
+ export function snapshotTracesInDir(dir) {
54
+ if (!existsSync(dir))
55
+ return new Set();
56
+ try {
57
+ const entries = readdirSync(dir, { withFileTypes: true });
58
+ const out = new Set();
59
+ for (const e of entries) {
60
+ if (!e.name.endsWith(".trace"))
61
+ continue;
62
+ out.add(joinPath(dir, e.name));
63
+ }
64
+ return out;
65
+ }
66
+ catch {
67
+ return new Set();
68
+ }
69
+ }
70
+ /**
71
+ * Pure: given the set of trace paths now in `dir` and the baseline
72
+ * snapshot, return paths that are NEW (in current but not in baseline).
73
+ * The order is alphabetical for determinism. Exported for testing.
74
+ */
75
+ export function detectNewTraces(current, baseline) {
76
+ const fresh = [];
77
+ for (const path of current) {
78
+ if (!baseline.has(path))
79
+ fresh.push(path);
80
+ }
81
+ return fresh.sort();
82
+ }
83
+ /**
84
+ * Pure: given a candidate `.trace` bundle path and the current time
85
+ * (in ms since epoch), decide whether the bundle has been "stable" for
86
+ * at least `stableForMs` (the user has finished saving). Returns false
87
+ * when the path does not exist or stat fails. Exported for testing.
88
+ */
89
+ export function isStable(candidatePath, nowMs, stableForMs, statFn = (p) => statSync(p)) {
90
+ try {
91
+ if (!existsSync(candidatePath))
92
+ return false;
93
+ const s = statFn(candidatePath);
94
+ return nowMs - s.mtimeMs >= stableForMs;
95
+ }
96
+ catch {
97
+ return false;
98
+ }
99
+ }
100
+ /**
101
+ * Pure: build the step-by-step instruction text the response surfaces.
102
+ * Exported for testing.
103
+ */
104
+ export function buildInstructions(template, watchDir) {
105
+ return [
106
+ `Instruments.app is opening. Wait for the template chooser to appear.`,
107
+ `Pick the **${template}** template from the chooser (if it does not show, File > New > pick the template).`,
108
+ `Choose the target device + app from the toolbar (top-left in the Instruments window).`,
109
+ `Press the **Record** button (red circle). Drive the scenario you want to capture.`,
110
+ `Press **Stop** when finished.`,
111
+ `**File > Save As** the trace to \`${watchDir}\` (this MCP is watching that directory).`,
112
+ `Once saved, this tool detects the new \`.trace\` bundle (within ~10 seconds) and returns its path.`,
113
+ ];
114
+ }
115
+ /**
116
+ * v1.17 B-01: query Instruments.app for the file paths of currently
117
+ * open documents via AppleScript. Used as a cross-check during the
118
+ * poll loop: if the user saves a `.trace` OUTSIDE `watchDir`, the
119
+ * directory watcher misses it, but Instruments.app will have the new
120
+ * document open and we can read its `file` property.
121
+ *
122
+ * Returns an array of absolute POSIX paths. Empty array when Instruments
123
+ * is not running, has no documents open, or the AppleScript fails.
124
+ *
125
+ * Exported for testing.
126
+ */
127
+ export async function queryInstrumentsDocumentPaths(exec) {
128
+ const script = [
129
+ 'tell application "Instruments"',
130
+ " set docs to every document",
131
+ " set out to {}",
132
+ " repeat with d in docs",
133
+ " try",
134
+ " set f to file of d",
135
+ " set end of out to POSIX path of f",
136
+ " end try",
137
+ " end repeat",
138
+ " return out",
139
+ "end tell",
140
+ ].join("\n");
141
+ try {
142
+ const result = await exec("osascript", ["-e", script]);
143
+ if (result.code !== 0)
144
+ return [];
145
+ return result.stdout
146
+ .split(/[,\n]/)
147
+ .map((s) => s.trim())
148
+ .filter((s) => s.endsWith(".trace"));
149
+ }
150
+ catch {
151
+ return [];
152
+ }
153
+ }
154
+ /**
155
+ * Spawn `open -a Instruments` fire-and-forget. v1.16. Returns immediately;
156
+ * Instruments.app launch takes a few seconds and the user interacts with
157
+ * it independently of the watcher loop.
158
+ */
159
+ function openInstrumentsApp() {
160
+ try {
161
+ const child = spawn("open", ["-a", "Instruments"], {
162
+ detached: true,
163
+ stdio: "ignore",
164
+ });
165
+ child.unref();
166
+ }
167
+ catch {
168
+ // The watcher loop will still poll; surfacing the error here would
169
+ // bias toward false-negatives if the open command exited non-zero for
170
+ // a reason that doesn't actually prevent Instruments from launching
171
+ // (e.g. it was already open).
172
+ }
173
+ }
174
+ /**
175
+ * Async sleep. Tests inject a faster variant; production uses real
176
+ * setTimeout.
177
+ */
178
+ function sleep(ms) {
179
+ return new Promise((resolve) => setTimeout(resolve, ms));
180
+ }
181
+ const POLL_INTERVAL_MS = 5_000;
182
+ const STABLE_FOR_MS = 10_000;
183
+ /**
184
+ * v1.17 B-01 helper: assemble the success-path response when a new
185
+ * `.trace` is detected via either the filesystem watcher OR the
186
+ * Instruments.app AppleScript document query. Shared between both
187
+ * detection paths to keep the shape consistent.
188
+ */
189
+ async function buildSuccessResult(candidate, watchDir, instructions, startMs, savedOutsideWatchDir) {
190
+ const elapsedSec = Math.round((Date.now() - startMs) / 1000);
191
+ let inspection;
192
+ try {
193
+ inspection = await inspectTrace({ tracePath: candidate });
194
+ }
195
+ catch {
196
+ // Inspection failure is non-fatal.
197
+ }
198
+ const detectedVia = savedOutsideWatchDir
199
+ ? "Instruments.app GUI (user saved outside watchDir)"
200
+ : `watchDir \`${watchDir}\``;
201
+ const diagnosis = inspection
202
+ ? `Captured \`${candidate}\` after ${elapsedSec}s via ${detectedVia}. ${inspection.schemas.length} schemas in the TOC.`
203
+ : `Captured \`${candidate}\` after ${elapsedSec}s via ${detectedVia}. Inspect failed; pass the path to inspectTrace manually.`;
204
+ return {
205
+ ok: true,
206
+ tracePath: candidate,
207
+ watchDir,
208
+ instructions,
209
+ elapsedSec,
210
+ ...(inspection ? { inspection } : {}),
211
+ ...(savedOutsideWatchDir ? { savedOutsideWatchDir: true } : {}),
212
+ diagnosis,
213
+ };
214
+ }
215
+ export async function recordViaInstrumentsApp(input) {
216
+ const security = getSecurityFlags();
217
+ const watchDir = resolvePath(input.watchDir ?? security.traceRoot);
218
+ if (!existsSync(watchDir)) {
219
+ mkdirSync(watchDir, { recursive: true });
220
+ }
221
+ const template = input.template ?? "Time Profiler";
222
+ const timeoutMs = (input.timeoutSec ?? 600) * 1000;
223
+ const instructions = buildInstructions(template, watchDir);
224
+ const baseline = input.preexistingTraces && input.preexistingTraces.length > 0
225
+ ? new Set(input.preexistingTraces.map((p) => resolvePath(p)))
226
+ : snapshotTracesInDir(watchDir);
227
+ openInstrumentsApp();
228
+ // v1.17 B-01: also baseline the Instruments-open-document set so we
229
+ // can detect a NEW trace that's open in the GUI even when the user
230
+ // saves it outside our watchDir. The osascript adapter for the
231
+ // queryInstrumentsDocumentPaths function uses runCommand.
232
+ const oscAdapter = (cmd, args) => runCommand(cmd, args, { timeoutMs: 8_000 });
233
+ const instrumentsBaseline = new Set(await queryInstrumentsDocumentPaths(oscAdapter));
234
+ const start = Date.now();
235
+ while (Date.now() - start < timeoutMs) {
236
+ // Path A: directory watcher. Detects saves under watchDir.
237
+ const current = snapshotTracesInDir(watchDir);
238
+ const fresh = detectNewTraces(current, baseline);
239
+ for (const candidate of fresh) {
240
+ if (isStable(candidate, Date.now(), STABLE_FOR_MS)) {
241
+ return await buildSuccessResult(candidate, watchDir, instructions, start,
242
+ /* savedOutsideWatchDir */ false);
243
+ }
244
+ }
245
+ // Path B (v1.17 B-01): Instruments AppleScript document query.
246
+ // Detects saves OUTSIDE watchDir that the directory watcher misses.
247
+ // Only treats as success when the new document path exists AND is
248
+ // stable for the same window the directory watcher uses.
249
+ const docs = await queryInstrumentsDocumentPaths(oscAdapter);
250
+ for (const docPath of docs) {
251
+ if (instrumentsBaseline.has(docPath))
252
+ continue;
253
+ const resolvedDoc = resolvePath(docPath);
254
+ if (!existsSync(resolvedDoc))
255
+ continue;
256
+ if (!isStable(resolvedDoc, Date.now(), STABLE_FOR_MS))
257
+ continue;
258
+ return await buildSuccessResult(resolvedDoc, watchDir, instructions, start,
259
+ /* savedOutsideWatchDir */ !resolvedDoc.startsWith(watchDir));
260
+ }
261
+ await sleep(POLL_INTERVAL_MS);
262
+ }
263
+ const elapsedSec = Math.round((Date.now() - start) / 1000);
264
+ return {
265
+ ok: false,
266
+ tracePath: "",
267
+ watchDir,
268
+ instructions,
269
+ timedOut: true,
270
+ elapsedSec,
271
+ diagnosis: `Timed out after ${elapsedSec}s waiting for a \`.trace\` bundle to appear in \`${watchDir}\`. The user may not have saved yet, or saved to a different directory. Re-run with the correct \`watchDir\` if needed.`,
272
+ };
273
+ }
274
+ //# sourceMappingURL=recordViaInstrumentsApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recordViaInstrumentsApp.js","sourceRoot":"","sources":["../../src/tools/recordViaInstrumentsApp.ts"],"names":[],"mappings":"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"}
@@ -31,7 +31,16 @@ export declare const verifyFixSchema: z.ZodObject<{
31
31
  before: z.ZodString;
32
32
  after: z.ZodString;
33
33
  expectedPatternId: z.ZodOptional<z.ZodString>;
34
- expectedAliveClasses: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
34
+ expectedAliveClasses: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
35
+ pattern: z.ZodString;
36
+ mode: z.ZodDefault<z.ZodEnum<["exact", "substring", "regex"]>>;
37
+ }, "strip", z.ZodTypeAny, {
38
+ pattern: string;
39
+ mode: "exact" | "substring" | "regex";
40
+ }, {
41
+ pattern: string;
42
+ mode?: "exact" | "substring" | "regex" | undefined;
43
+ }>]>, "many">>;
35
44
  disableDefaultWhitelist: z.ZodDefault<z.ZodBoolean>;
36
45
  verbosity: z.ZodDefault<z.ZodEnum<["compact", "normal", "full"]>>;
37
46
  }, "strip", z.ZodTypeAny, {
@@ -40,13 +49,19 @@ export declare const verifyFixSchema: z.ZodObject<{
40
49
  before: string;
41
50
  disableDefaultWhitelist: boolean;
42
51
  expectedPatternId?: string | undefined;
43
- expectedAliveClasses?: string[] | undefined;
52
+ expectedAliveClasses?: (string | {
53
+ pattern: string;
54
+ mode: "exact" | "substring" | "regex";
55
+ })[] | undefined;
44
56
  }, {
45
57
  after: string;
46
58
  before: string;
47
59
  verbosity?: "compact" | "normal" | "full" | undefined;
48
60
  expectedPatternId?: string | undefined;
49
- expectedAliveClasses?: string[] | undefined;
61
+ expectedAliveClasses?: (string | {
62
+ pattern: string;
63
+ mode?: "exact" | "substring" | "regex" | undefined;
64
+ })[] | undefined;
50
65
  disableDefaultWhitelist?: boolean | undefined;
51
66
  }>;
52
67
  export type VerifyFixInput = z.infer<typeof verifyFixSchema>;
@@ -59,9 +59,15 @@ export const verifyFixSchema = z.object({
59
59
  .optional()
60
60
  .describe("If provided, the verdict is gated on whether this specific patternId disappeared from `after`. Defaults to checking every classified pattern."),
61
61
  expectedAliveClasses: z
62
- .array(z.string().min(1))
62
+ .array(z.union([
63
+ z.string().min(1),
64
+ z.object({
65
+ pattern: z.string().min(1),
66
+ mode: z.enum(["exact", "substring", "regex"]).default("substring"),
67
+ }),
68
+ ]))
63
69
  .optional()
64
- .describe("v1.14+. Class names (substrings) that legitimately stay alive across the before/after snapshots. Singletons, framework registrars, persistent caches. When a class in this list appears in regressionClasses[], it is moved to expectedAlive[] and does not flip the verdict to FAIL. Merged with the curated default list (DebugSwift's ignoredViewControllerClassNames + ignoredViewClassNames + ignoredWindowClassNames) unless `disableDefaultWhitelist: true`."),
70
+ .describe("v1.14+. Class names that legitimately stay alive across the before/after snapshots. Singletons, framework registrars, persistent caches. When a class in this list appears in regressionClasses[], it is moved to expectedAlive[] and does not flip the verdict to FAIL.\n\nEach entry can be a plain string (treated as case-insensitive substring, the v1.14 default behavior) OR an object `{ pattern: string, mode?: \"exact\" | \"substring\" | \"regex\" }` (v1.17+). Modes:\n- `exact`: case-insensitive full-string equality. Use for system class names that are stable.\n- `substring`: case-insensitive substring match (the v1.14 default).\n- `regex`: JavaScript regex (anchors / flags as written in the pattern). Use for nuanced class-name shapes.\n\nMerged with the curated default list (DebugSwift's ignoredViewControllerClassNames + ignoredViewClassNames + ignoredWindowClassNames, all `mode: \"exact\"`) unless `disableDefaultWhitelist: true`."),
65
71
  disableDefaultWhitelist: z
66
72
  .boolean()
67
73
  .default(false)
@@ -245,45 +251,59 @@ const ACTIONABLE_DELTA_THRESHOLD = 10;
245
251
  * slice of the deltas, not just the top-25 outliers. The response is
246
252
  * capped further by callers if they pass through `formatMcpResponse`. */
247
253
  const ABANDONED_MEMORY_TOPN = 100;
248
- /**
249
- * v1.12 fallback path: when classified-cycle data is absent from BOTH
250
- * snapshots, the v1.11 verifyFix returned `overallVerdict: "PASS"` with
251
- * no patterns. Useless for the user. Now we chain into
252
- * `analyzeAbandonedMemory` and emit a verdict based on heap-wide class
253
- * deltas:
254
- *
255
- * - At least one actionableShrinkage entry with |delta| >= 10 AND
256
- * actionableGrowth empty (or below threshold): PASS with freedClasses.
257
- * - actionableGrowth non-empty AND actionableShrinkage below threshold:
258
- * FAIL with regressionClasses.
259
- * - Both non-empty above threshold: PARTIAL with both.
260
- * - Both empty / below threshold: PASS with empty freedClasses (clean
261
- * state, no measurable change).
262
- *
263
- * Returns null when even the abandoned-memory path can't run (paths
264
- * inaccessible, etc.); the caller falls back to the cycle-pattern result.
265
- */
254
+ function normalizeWhitelistEntry(entry, defaultMode = "substring") {
255
+ if (typeof entry === "string") {
256
+ return { pattern: entry, mode: defaultMode };
257
+ }
258
+ const mode = entry.mode ?? defaultMode;
259
+ const rule = { pattern: entry.pattern, mode };
260
+ if (mode === "regex") {
261
+ try {
262
+ rule.compiled = new RegExp(entry.pattern);
263
+ }
264
+ catch {
265
+ // Invalid regex: degrade to substring match silently. The user's
266
+ // intent is "filter this", and substring is the safest fallback.
267
+ rule.mode = "substring";
268
+ }
269
+ }
270
+ return rule;
271
+ }
266
272
  /**
267
273
  * Build the effective expected-alive whitelist by merging the curated
268
- * default list (unless disabled) with the user-supplied set. Returns a
269
- * lowercase Set for case-insensitive substring matching. v1.14.
274
+ * default list (unless disabled) with the user-supplied set. v1.14;
275
+ * v1.17 B-02 added per-entry match modes (exact / substring / regex).
270
276
  */
271
277
  function buildExpectedAliveSet(userSupplied, disableDefault) {
272
- const base = disableDefault ? [] : DEFAULT_EXPECTED_ALIVE_CLASSES;
273
- const all = [...base, ...(userSupplied ?? [])];
274
- return new Set(all.map((s) => s.toLowerCase()));
278
+ const base = disableDefault
279
+ ? []
280
+ : DEFAULT_EXPECTED_ALIVE_CLASSES.map((pattern) => normalizeWhitelistEntry({ pattern, mode: "exact" }, "exact"));
281
+ const supplied = (userSupplied ?? []).map((e) => normalizeWhitelistEntry(e));
282
+ return [...base, ...supplied];
275
283
  }
276
284
  /**
277
- * Returns true when the className matches any entry in the whitelist
278
- * (substring match, case-insensitive). v1.14.
285
+ * Returns true when the className matches any entry in the whitelist.
286
+ * Each entry uses its configured match mode. v1.14; v1.17 B-02.
279
287
  */
280
288
  function isExpectedAlive(className, whitelist) {
281
- if (whitelist.size === 0)
289
+ if (whitelist.length === 0)
282
290
  return false;
283
291
  const lc = className.toLowerCase();
284
- for (const w of whitelist)
285
- if (lc.includes(w))
286
- return true;
292
+ for (const rule of whitelist) {
293
+ if (rule.mode === "exact") {
294
+ if (lc === rule.pattern.toLowerCase())
295
+ return true;
296
+ }
297
+ else if (rule.mode === "regex") {
298
+ if (rule.compiled && rule.compiled.test(className))
299
+ return true;
300
+ }
301
+ else {
302
+ // substring (default)
303
+ if (lc.includes(rule.pattern.toLowerCase()))
304
+ return true;
305
+ }
306
+ }
287
307
  return false;
288
308
  }
289
309
  async function buildAbandonedMemoryFallback(beforePath, afterPath, expectedAliveWhitelist) {
@@ -1 +1 @@
1
- {"version":3,"file":"verifyFix.js","sourceRoot":"","sources":["../../src/tools/verifyFix.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verifyFix.js","sourceRoot":"","sources":["../../src/tools/verifyFix.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "memorydetective",
3
- "version": "1.15.0",
3
+ "version": "1.17.0",
4
4
  "mcpName": "io.github.carloshpdoc/memorydetective",
5
- "description": "MCP server for iOS leak hunting and performance investigation. 40 tools across .memgraph and .trace files. v1.15 adds analyzeMemoryFootprint (VM resident/dirty/jetsam), analyzeEnergyImpact (battery drain), analyzeLeakTimeline (leaks as time series), summarizeTrace network chain integration, replayScenario screenshot capture. 36-pattern retain-cycle classifier with Swift fixTemplate snippets, abandoned-memory diff for KVO/NotificationCenter/cache shapes that escape leaks(1), per-test CI gate (detectLeaksInXCTest + detectLeaksInXCUITest with self-contained HTML reports), main-thread violation classifier on analyzeHangs, single-call build+boot+launch for the macOS 26.x leaks --outputGraph regression, replayScenario + captureScenarioState verify-fix loop, compareTracesByPattern CI gate on hangs/hitches/launch regressions, SourceKit-LSP source bridging. macOS only (depends on leaks(1) and xctrace).",
5
+ "description": "MCP server for iOS leak hunting and performance investigation. 41 tools across .memgraph and .trace files. v1.17 reliability pass: strtobool env truthy parsing, verifyFix whitelist match modes (exact / substring / regex), Instruments.app AppleScript document query for traces saved outside watchDir, inspectTrace fault-tolerant fallback on wedged bundles, configurable countAlive noise filter. v1.16 added recordViaInstrumentsApp (macOS 26.x trace recording workaround). 36-pattern retain-cycle classifier with Swift fixTemplate snippets, abandoned-memory diff for KVO/NotificationCenter/cache shapes that escape leaks(1), per-test CI gate (detectLeaksInXCTest + detectLeaksInXCUITest with self-contained HTML reports), main-thread violation classifier on analyzeHangs, single-call build+boot+launch for the macOS 26.x leaks --outputGraph regression, replayScenario + captureScenarioState verify-fix loop, compareTracesByPattern CI gate on hangs/hitches/launch regressions, SourceKit-LSP source bridging. macOS only (depends on leaks(1) and xctrace).",
6
6
  "type": "module",
7
7
  "bin": {
8
8
  "memorydetective": "dist/index.js"