memorydetective 1.16.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.
- package/CHANGELOG.md +35 -0
- package/dist/parsers/schemaDiscovery.d.ts +26 -0
- package/dist/parsers/schemaDiscovery.js +40 -11
- package/dist/parsers/schemaDiscovery.js.map +1 -1
- package/dist/runtime/parseBooleanEnv.d.ts +22 -0
- package/dist/runtime/parseBooleanEnv.js +47 -0
- package/dist/runtime/parseBooleanEnv.js.map +1 -0
- package/dist/runtime/platformCheck.js +4 -1
- package/dist/runtime/platformCheck.js.map +1 -1
- package/dist/runtime/securityFlags.js +3 -1
- package/dist/runtime/securityFlags.js.map +1 -1
- package/dist/tools/analyzeEnergyImpact.d.ts +7 -1
- package/dist/tools/analyzeEnergyImpact.js +9 -3
- package/dist/tools/analyzeEnergyImpact.js.map +1 -1
- package/dist/tools/analyzeHangs.js +21 -12
- package/dist/tools/analyzeHangs.js.map +1 -1
- package/dist/tools/analyzeLeakTimeline.js +27 -10
- package/dist/tools/analyzeLeakTimeline.js.map +1 -1
- package/dist/tools/analyzeMemoryFootprint.js +1 -2
- package/dist/tools/analyzeMemoryFootprint.js.map +1 -1
- package/dist/tools/analyzeNetworkActivity.d.ts +6 -1
- package/dist/tools/analyzeNetworkActivity.js +13 -1
- package/dist/tools/analyzeNetworkActivity.js.map +1 -1
- package/dist/tools/cleanupTraces.js +2 -1
- package/dist/tools/cleanupTraces.js.map +1 -1
- package/dist/tools/countAlive.d.ts +51 -5
- package/dist/tools/countAlive.js +140 -11
- package/dist/tools/countAlive.js.map +1 -1
- package/dist/tools/inspectTrace.js +22 -1
- package/dist/tools/inspectTrace.js.map +1 -1
- package/dist/tools/recordTimeProfile.d.ts +24 -0
- package/dist/tools/recordTimeProfile.js +38 -5
- package/dist/tools/recordTimeProfile.js.map +1 -1
- package/dist/tools/recordViaInstrumentsApp.d.ts +25 -0
- package/dist/tools/recordViaInstrumentsApp.js +97 -23
- package/dist/tools/recordViaInstrumentsApp.js.map +1 -1
- package/dist/tools/verifyFix.d.ts +18 -3
- package/dist/tools/verifyFix.js +51 -31
- package/dist/tools/verifyFix.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspectTrace.js","sourceRoot":"","sources":["../../src/tools/inspectTrace.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"inspectTrace.js","sourceRoot":"","sources":["../../src/tools/inspectTrace.ts"],"names":[],"mappings":"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"}
|
|
@@ -81,6 +81,17 @@ export interface RecordTimeProfileResult {
|
|
|
81
81
|
* fail to export it. Inspect `workaroundNotice` for the recovery path.
|
|
82
82
|
*/
|
|
83
83
|
recordingTimedOut?: boolean;
|
|
84
|
+
/**
|
|
85
|
+
* v1.17 B-09. Reports whether the .trace bundle on disk is
|
|
86
|
+
* salvageable. `unknown` when recording succeeded normally
|
|
87
|
+
* (the caller can run inspectTrace to confirm). `salvageable` when
|
|
88
|
+
* a timeout / SIGINT path produced a bundle with the canonical
|
|
89
|
+
* Trace1.run/MANIFEST.plist marker (xctrace flushed cleanly).
|
|
90
|
+
* `wedged` when the bundle is missing MANIFEST.plist (the macOS 26.x
|
|
91
|
+
* regression signature; xctrace export will reject it). Use this to
|
|
92
|
+
* branch without re-checking the filesystem.
|
|
93
|
+
*/
|
|
94
|
+
bundleStatus?: "unknown" | "salvageable" | "wedged";
|
|
84
95
|
/**
|
|
85
96
|
* Present when `recordingTimedOut` is true. Documents the
|
|
86
97
|
* `xctrace --time-limit` regression observed on macOS 26.x simulators
|
|
@@ -151,6 +162,19 @@ export declare function shouldPreflightXctrace(input: RecordTimeProfileInput, en
|
|
|
151
162
|
* output path.
|
|
152
163
|
*/
|
|
153
164
|
export declare function preflightXctraceRecord(input: RecordTimeProfileInput, resolvedOutput: string): Promise<PreflightResult>;
|
|
165
|
+
/**
|
|
166
|
+
* v1.17 B-09. Classify a `.trace` bundle on disk by the canonical
|
|
167
|
+
* markers xctrace writes. The `MANIFEST.plist` file under `Trace1.run/`
|
|
168
|
+
* is the marker of a complete export; absent means xctrace was killed
|
|
169
|
+
* before flushing (the macOS 26.x wedge signature).
|
|
170
|
+
*
|
|
171
|
+
* Returns `unknown` when the path doesn't exist (caller error).
|
|
172
|
+
* Used by recordTimeProfile to surface `bundleStatus` on the response.
|
|
173
|
+
*
|
|
174
|
+
* Exported so other tools (recordViaInstrumentsApp, etc.) can share
|
|
175
|
+
* the heuristic.
|
|
176
|
+
*/
|
|
177
|
+
export declare function classifyBundleOnDisk(tracePath: string): "unknown" | "salvageable" | "wedged";
|
|
154
178
|
/**
|
|
155
179
|
* v1.14 item J. When a `recordTimeProfile` call times out, optionally
|
|
156
180
|
* launch the partial `.trace` in Instruments.app so the user has a GUI
|
|
@@ -5,6 +5,7 @@ import { resolve as resolvePath, dirname, isAbsolute as isAbsolutePath, join as
|
|
|
5
5
|
import { runCommand } from "../runtime/exec.js";
|
|
6
6
|
import { getSecurityFlags, maxRecordingExceededMessage, } from "../runtime/securityFlags.js";
|
|
7
7
|
import { getPlatformAdvisory } from "../runtime/platformCheck.js";
|
|
8
|
+
import { parseBooleanEnv } from "../runtime/parseBooleanEnv.js";
|
|
8
9
|
/**
|
|
9
10
|
* Base shape, exposed so the MCP layer can read `.shape` (ZodEffects from
|
|
10
11
|
* `.superRefine()` doesn't expose shape).
|
|
@@ -111,11 +112,12 @@ const PREFLIGHT_GRACEFUL_KILL_MS = 2000;
|
|
|
111
112
|
* when running on a real macOS 26.x machine.
|
|
112
113
|
*/
|
|
113
114
|
export function shouldPreflightXctrace(input, env = process.env, osPlatform, osRelease) {
|
|
115
|
+
// v1.17 B-03: accept the strtobool set, not just "1" / "0". Empty / unset
|
|
116
|
+
// falls through to the auto-detection arm.
|
|
114
117
|
const explicit = env.MEMORYDETECTIVE_PREFLIGHT_XCTRACE;
|
|
115
|
-
if (explicit
|
|
116
|
-
return
|
|
117
|
-
|
|
118
|
-
return false;
|
|
118
|
+
if (explicit != null && explicit.trim() !== "") {
|
|
119
|
+
return parseBooleanEnv(explicit, false, "MEMORYDETECTIVE_PREFLIGHT_XCTRACE");
|
|
120
|
+
}
|
|
119
121
|
// Auto: only when the known-broken combination applies.
|
|
120
122
|
const onMacOS26 = getPlatformAdvisory(env, osPlatform, osRelease) != null;
|
|
121
123
|
const isSimTarget = !!input.simulatorId && !input.deviceId;
|
|
@@ -166,6 +168,24 @@ export async function preflightXctraceRecord(input, resolvedOutput) {
|
|
|
166
168
|
}
|
|
167
169
|
return { healthy: true, durationMs };
|
|
168
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* v1.17 B-09. Classify a `.trace` bundle on disk by the canonical
|
|
173
|
+
* markers xctrace writes. The `MANIFEST.plist` file under `Trace1.run/`
|
|
174
|
+
* is the marker of a complete export; absent means xctrace was killed
|
|
175
|
+
* before flushing (the macOS 26.x wedge signature).
|
|
176
|
+
*
|
|
177
|
+
* Returns `unknown` when the path doesn't exist (caller error).
|
|
178
|
+
* Used by recordTimeProfile to surface `bundleStatus` on the response.
|
|
179
|
+
*
|
|
180
|
+
* Exported so other tools (recordViaInstrumentsApp, etc.) can share
|
|
181
|
+
* the heuristic.
|
|
182
|
+
*/
|
|
183
|
+
export function classifyBundleOnDisk(tracePath) {
|
|
184
|
+
if (!existsSync(tracePath))
|
|
185
|
+
return "unknown";
|
|
186
|
+
const manifest = `${tracePath}/Trace1.run/MANIFEST.plist`;
|
|
187
|
+
return existsSync(manifest) ? "salvageable" : "wedged";
|
|
188
|
+
}
|
|
169
189
|
/**
|
|
170
190
|
* v1.14 item J. When a `recordTimeProfile` call times out, optionally
|
|
171
191
|
* launch the partial `.trace` in Instruments.app so the user has a GUI
|
|
@@ -186,10 +206,19 @@ export async function preflightXctraceRecord(input, resolvedOutput) {
|
|
|
186
206
|
* Instruments in test runs.
|
|
187
207
|
*/
|
|
188
208
|
export function maybeOpenInInstruments(tracePath) {
|
|
189
|
-
if (process.env.MEMORYDETECTIVE_AUTO_OPEN_INSTRUMENTS
|
|
209
|
+
if (!parseBooleanEnv(process.env.MEMORYDETECTIVE_AUTO_OPEN_INSTRUMENTS, false, "MEMORYDETECTIVE_AUTO_OPEN_INSTRUMENTS")) {
|
|
190
210
|
return false;
|
|
211
|
+
}
|
|
191
212
|
if (!existsSync(tracePath))
|
|
192
213
|
return false;
|
|
214
|
+
// v1.17 B-04: skip the open when the bundle is a wedged shell.
|
|
215
|
+
// A complete xctrace export writes Trace1.run/MANIFEST.plist; a wedge
|
|
216
|
+
// produces only Trace1.run/RunIssues.storedata. Opening a wedge in
|
|
217
|
+
// Instruments shows a Document Missing Template Error dialog, which
|
|
218
|
+
// is worse UX than just not opening.
|
|
219
|
+
const manifest = `${tracePath}/Trace1.run/MANIFEST.plist`;
|
|
220
|
+
if (!existsSync(manifest))
|
|
221
|
+
return false;
|
|
193
222
|
try {
|
|
194
223
|
const child = spawn("open", ["-a", "Instruments", tracePath], {
|
|
195
224
|
detached: true,
|
|
@@ -281,6 +310,9 @@ export async function recordTimeProfile(input) {
|
|
|
281
310
|
});
|
|
282
311
|
if (result.timedOut) {
|
|
283
312
|
const openedInInstrumentsApp = maybeOpenInInstruments(output);
|
|
313
|
+
// v1.17 B-09: classify the bundle before returning so the caller
|
|
314
|
+
// does not need to re-check the filesystem.
|
|
315
|
+
const bundleStatus = classifyBundleOnDisk(output);
|
|
284
316
|
return {
|
|
285
317
|
ok: false,
|
|
286
318
|
command: `xcrun ${args.join(" ")}`,
|
|
@@ -295,6 +327,7 @@ export async function recordTimeProfile(input) {
|
|
|
295
327
|
fallbacks: XCTRACE_TIMEOUT_FALLBACKS,
|
|
296
328
|
},
|
|
297
329
|
openedInInstrumentsApp,
|
|
330
|
+
bundleStatus,
|
|
298
331
|
};
|
|
299
332
|
}
|
|
300
333
|
if (result.code !== 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recordTimeProfile.js","sourceRoot":"","sources":["../../src/tools/recordTimeProfile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EACL,OAAO,IAAI,WAAW,EACtB,OAAO,EACP,UAAU,IAAI,cAAc,EAC5B,IAAI,IAAI,QAAQ,GACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EACL,gBAAgB,EAChB,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"recordTimeProfile.js","sourceRoot":"","sources":["../../src/tools/recordTimeProfile.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,6 +45,15 @@ export interface RecordViaInstrumentsAppResult {
|
|
|
45
45
|
instructions: string[];
|
|
46
46
|
/** True when the watcher gave up before finding a new `.trace`. */
|
|
47
47
|
timedOut?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* v1.17 B-01. True when the trace was detected via the Instruments.app
|
|
50
|
+
* AppleScript document query, NOT via the filesystem watcher. Means
|
|
51
|
+
* the user saved the .trace OUTSIDE the configured `watchDir`. The
|
|
52
|
+
* `tracePath` still resolves correctly; this flag explains the
|
|
53
|
+
* detection path so callers can suggest "next time save to <watchDir>"
|
|
54
|
+
* or update their watcher config.
|
|
55
|
+
*/
|
|
56
|
+
savedOutsideWatchDir?: boolean;
|
|
48
57
|
/** Wall-clock seconds the user spent recording (start of watcher to detection). */
|
|
49
58
|
elapsedSec: number;
|
|
50
59
|
/** Chained inspectTrace summary when the recording was found AND was readable. */
|
|
@@ -78,4 +87,20 @@ export declare function isStable(candidatePath: string, nowMs: number, stableFor
|
|
|
78
87
|
* Exported for testing.
|
|
79
88
|
*/
|
|
80
89
|
export declare function buildInstructions(template: string, watchDir: string): string[];
|
|
90
|
+
/**
|
|
91
|
+
* v1.17 B-01: query Instruments.app for the file paths of currently
|
|
92
|
+
* open documents via AppleScript. Used as a cross-check during the
|
|
93
|
+
* poll loop: if the user saves a `.trace` OUTSIDE `watchDir`, the
|
|
94
|
+
* directory watcher misses it, but Instruments.app will have the new
|
|
95
|
+
* document open and we can read its `file` property.
|
|
96
|
+
*
|
|
97
|
+
* Returns an array of absolute POSIX paths. Empty array when Instruments
|
|
98
|
+
* is not running, has no documents open, or the AppleScript fails.
|
|
99
|
+
*
|
|
100
|
+
* Exported for testing.
|
|
101
|
+
*/
|
|
102
|
+
export declare function queryInstrumentsDocumentPaths(exec: (cmd: string, args: string[]) => Promise<{
|
|
103
|
+
code: number;
|
|
104
|
+
stdout: string;
|
|
105
|
+
}>): Promise<string[]>;
|
|
81
106
|
export declare function recordViaInstrumentsApp(input: RecordViaInstrumentsAppInput): Promise<RecordViaInstrumentsAppResult>;
|
|
@@ -21,6 +21,7 @@ import { z } from "zod";
|
|
|
21
21
|
import { existsSync, mkdirSync, statSync, readdirSync } from "node:fs";
|
|
22
22
|
import { resolve as resolvePath, join as joinPath } from "node:path";
|
|
23
23
|
import { spawn } from "node:child_process";
|
|
24
|
+
import { runCommand } from "../runtime/exec.js";
|
|
24
25
|
import { getSecurityFlags } from "../runtime/securityFlags.js";
|
|
25
26
|
import { inspectTrace } from "./inspectTrace.js";
|
|
26
27
|
export const recordViaInstrumentsAppSchema = z.object({
|
|
@@ -111,6 +112,45 @@ export function buildInstructions(template, watchDir) {
|
|
|
111
112
|
`Once saved, this tool detects the new \`.trace\` bundle (within ~10 seconds) and returns its path.`,
|
|
112
113
|
];
|
|
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
|
+
}
|
|
114
154
|
/**
|
|
115
155
|
* Spawn `open -a Instruments` fire-and-forget. v1.16. Returns immediately;
|
|
116
156
|
* Instruments.app launch takes a few seconds and the user interacts with
|
|
@@ -140,6 +180,38 @@ function sleep(ms) {
|
|
|
140
180
|
}
|
|
141
181
|
const POLL_INTERVAL_MS = 5_000;
|
|
142
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
|
+
}
|
|
143
215
|
export async function recordViaInstrumentsApp(input) {
|
|
144
216
|
const security = getSecurityFlags();
|
|
145
217
|
const watchDir = resolvePath(input.watchDir ?? security.traceRoot);
|
|
@@ -153,37 +225,39 @@ export async function recordViaInstrumentsApp(input) {
|
|
|
153
225
|
? new Set(input.preexistingTraces.map((p) => resolvePath(p)))
|
|
154
226
|
: snapshotTracesInDir(watchDir);
|
|
155
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));
|
|
156
234
|
const start = Date.now();
|
|
157
235
|
while (Date.now() - start < timeoutMs) {
|
|
236
|
+
// Path A: directory watcher. Detects saves under watchDir.
|
|
158
237
|
const current = snapshotTracesInDir(watchDir);
|
|
159
238
|
const fresh = detectNewTraces(current, baseline);
|
|
160
|
-
// Pick the first stable new trace (oldest mtime that is also stable).
|
|
161
239
|
for (const candidate of fresh) {
|
|
162
240
|
if (isStable(candidate, Date.now(), STABLE_FOR_MS)) {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
// immediate summary. Failures here do not invalidate the
|
|
166
|
-
// recording itself; we just omit the field.
|
|
167
|
-
let inspection;
|
|
168
|
-
try {
|
|
169
|
-
inspection = await inspectTrace({ tracePath: candidate });
|
|
170
|
-
}
|
|
171
|
-
catch {
|
|
172
|
-
// Inspection failure is non-fatal.
|
|
173
|
-
}
|
|
174
|
-
return {
|
|
175
|
-
ok: true,
|
|
176
|
-
tracePath: candidate,
|
|
177
|
-
watchDir,
|
|
178
|
-
instructions,
|
|
179
|
-
elapsedSec,
|
|
180
|
-
...(inspection ? { inspection } : {}),
|
|
181
|
-
diagnosis: inspection
|
|
182
|
-
? `Captured \`${candidate}\` after ${elapsedSec}s. ${inspection.schemas.length} schemas in the TOC.`
|
|
183
|
-
: `Captured \`${candidate}\` after ${elapsedSec}s. Inspect failed; pass the path to inspectTrace manually.`,
|
|
184
|
-
};
|
|
241
|
+
return await buildSuccessResult(candidate, watchDir, instructions, start,
|
|
242
|
+
/* savedOutsideWatchDir */ false);
|
|
185
243
|
}
|
|
186
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
|
+
}
|
|
187
261
|
await sleep(POLL_INTERVAL_MS);
|
|
188
262
|
}
|
|
189
263
|
const elapsedSec = Math.round((Date.now() - start) / 1000);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recordViaInstrumentsApp.js","sourceRoot":"","sources":["../../src/tools/recordViaInstrumentsApp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAA2B,MAAM,mBAAmB,CAAC;AAE1E,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,OAAO,CAAC,eAAe,CAAC;SACxB,QAAQ,CACP,kPAAkP,CACnP;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,4NAA4N,CAC7N;IACH,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,GAAG,CAAC,IAAI,CAAC;SACT,OAAO,CAAC,GAAG,CAAC;SACZ,QAAQ,CACP,wIAAwI,CACzI;IACH,iBAAiB,EAAE,CAAC;SACjB,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CACP,yOAAyO,CAC1O;CACJ,CAAC,CAAC;
|
|
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,
|
|
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
|
|
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
|
|
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>;
|
package/dist/tools/verifyFix.js
CHANGED
|
@@ -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.
|
|
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
|
|
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
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
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.
|
|
269
|
-
*
|
|
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
|
|
273
|
-
|
|
274
|
-
|
|
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
|
-
*
|
|
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.
|
|
289
|
+
if (whitelist.length === 0)
|
|
282
290
|
return false;
|
|
283
291
|
const lc = className.toLowerCase();
|
|
284
|
-
for (const
|
|
285
|
-
if (
|
|
286
|
-
|
|
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) {
|