codeloop-mcp-server 0.1.95 → 0.1.96
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/dist/evidence/binary_freshness.d.ts +27 -0
- package/dist/evidence/binary_freshness.d.ts.map +1 -1
- package/dist/evidence/binary_freshness.js +100 -22
- package/dist/evidence/binary_freshness.js.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/runners/modal_detector.d.ts +13 -0
- package/dist/runners/modal_detector.d.ts.map +1 -1
- package/dist/runners/modal_detector.js +101 -2
- package/dist/runners/modal_detector.js.map +1 -1
- package/dist/runners/uia_resolver.d.ts.map +1 -1
- package/dist/runners/uia_resolver.js +32 -0
- package/dist/runners/uia_resolver.js.map +1 -1
- package/dist/runners/window_manager.d.ts +23 -0
- package/dist/runners/window_manager.d.ts.map +1 -1
- package/dist/runners/window_manager.js +66 -3
- package/dist/runners/window_manager.js.map +1 -1
- package/package.json +1 -1
|
@@ -18,4 +18,31 @@ export declare function checkBinaryFreshness(opts: {
|
|
|
18
18
|
app_name?: string;
|
|
19
19
|
cwd: string;
|
|
20
20
|
}): BinaryFreshnessResult;
|
|
21
|
+
/**
|
|
22
|
+
* 0.1.96 — resolve the on-disk module path of the ACTUALLY-RUNNING process
|
|
23
|
+
* for `appName`, so freshness reflects what the recording will truly capture.
|
|
24
|
+
*
|
|
25
|
+
* Photometry-DB Windows E2E (#14): the configured target pointed at a stale
|
|
26
|
+
* `publish/PhotometryDB-Beta/Photometry DB.exe` (resolved by the directory
|
|
27
|
+
* walk), while the running app was a FRESH Debug build under a subproject
|
|
28
|
+
* dir (`PhotometryDB.UI/bin/Debug/...`) that the walk never reaches. The
|
|
29
|
+
* result was a false "BINARY MISMATCH" that told the agent it was recording
|
|
30
|
+
* stale code. The running process's own module path is the ground truth.
|
|
31
|
+
*
|
|
32
|
+
* Best-effort and bounded: win32 via `Get-Process .Path` (exact ProcessName
|
|
33
|
+
* match), darwin via `ps -axo comm=` (.app bundle / exec basename match).
|
|
34
|
+
* Returns undefined on any failure so callers fall back to the configured
|
|
35
|
+
* path resolver.
|
|
36
|
+
*/
|
|
37
|
+
export declare function runningAppBinaryPath(appName: string): Promise<string | undefined>;
|
|
38
|
+
/**
|
|
39
|
+
* 0.1.96 — async freshness that prefers the actually-running process binary
|
|
40
|
+
* over the configured/walked path, eliminating the stale-publish-folder false
|
|
41
|
+
* positive. Falls back to the sync configured-path check when no matching
|
|
42
|
+
* process is running.
|
|
43
|
+
*/
|
|
44
|
+
export declare function checkBinaryFreshnessAsync(opts: {
|
|
45
|
+
app_name?: string;
|
|
46
|
+
cwd: string;
|
|
47
|
+
}): Promise<BinaryFreshnessResult>;
|
|
21
48
|
//# sourceMappingURL=binary_freshness.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary_freshness.d.ts","sourceRoot":"","sources":["../../src/evidence/binary_freshness.ts"],"names":[],"mappings":"AAmIA,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,KAAK,EAAE,OAAO,CAAC;IACf,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,2CAA2C;IAC3C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"binary_freshness.d.ts","sourceRoot":"","sources":["../../src/evidence/binary_freshness.ts"],"names":[],"mappings":"AAmIA,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,KAAK,EAAE,OAAO,CAAC;IACf,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,2CAA2C;IAC3C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAmCD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,qBAAqB,CAOxB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAqCvF;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,OAAO,CAAC,qBAAqB,CAAC,CASjC"}
|
|
@@ -129,40 +129,118 @@ function binaryMtime(p) {
|
|
|
129
129
|
return 0;
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
132
|
+
/**
|
|
133
|
+
* Compares a SPECIFIC binary path against the newest source mtime. Returns
|
|
134
|
+
* null when the binary can't be statted or there's no source to compare.
|
|
135
|
+
* Shared by the sync (configured-path) and async (running-process) checks.
|
|
136
|
+
*/
|
|
137
|
+
function freshnessForBinary(binPath, cwd) {
|
|
138
138
|
const binMs = binaryMtime(binPath);
|
|
139
139
|
if (binMs === 0)
|
|
140
|
-
return
|
|
141
|
-
const newest = newestSourceMtime(
|
|
140
|
+
return null;
|
|
141
|
+
const newest = newestSourceMtime(cwd);
|
|
142
142
|
if (!newest)
|
|
143
|
-
return
|
|
143
|
+
return null;
|
|
144
144
|
const lagSeconds = Math.round((newest.mtimeMs - binMs) / 1000);
|
|
145
|
-
|
|
146
|
-
return {
|
|
147
|
-
stale: false,
|
|
148
|
-
binary_path: binPath,
|
|
149
|
-
binary_mtime: new Date(binMs).toISOString(),
|
|
150
|
-
newest_source_path: newest.path,
|
|
151
|
-
newest_source_mtime: new Date(newest.mtimeMs).toISOString(),
|
|
152
|
-
lag_seconds: lagSeconds,
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
const lagMin = Math.floor(lagSeconds / 60);
|
|
156
|
-
return {
|
|
157
|
-
stale: true,
|
|
145
|
+
const base = {
|
|
158
146
|
binary_path: binPath,
|
|
159
147
|
binary_mtime: new Date(binMs).toISOString(),
|
|
160
148
|
newest_source_path: newest.path,
|
|
161
149
|
newest_source_mtime: new Date(newest.mtimeMs).toISOString(),
|
|
162
150
|
lag_seconds: lagSeconds,
|
|
151
|
+
};
|
|
152
|
+
if (lagSeconds <= FRESHNESS_BUFFER_SECONDS)
|
|
153
|
+
return { stale: false, ...base };
|
|
154
|
+
const lagMin = Math.floor(lagSeconds / 60);
|
|
155
|
+
return {
|
|
156
|
+
stale: true,
|
|
157
|
+
...base,
|
|
163
158
|
reason: `BINARY MISMATCH — the running app at ${binPath} was built ${lagMin} minute(s) before your latest source edit ` +
|
|
164
159
|
`(${path.basename(newest.path)} @ ${new Date(newest.mtimeMs).toISOString()}). ` +
|
|
165
160
|
`Rebuild and re-deploy before recording. Re-running codeloop_start_recording without rebuilding will produce evidence against stale code.`,
|
|
166
161
|
};
|
|
167
162
|
}
|
|
163
|
+
export function checkBinaryFreshness(opts) {
|
|
164
|
+
if (!opts.app_name)
|
|
165
|
+
return { stale: false };
|
|
166
|
+
const binPath = resolveBinaryPath(opts.app_name, opts.cwd);
|
|
167
|
+
if (!binPath)
|
|
168
|
+
return { stale: false };
|
|
169
|
+
return freshnessForBinary(binPath, opts.cwd) ?? { stale: false };
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* 0.1.96 — resolve the on-disk module path of the ACTUALLY-RUNNING process
|
|
173
|
+
* for `appName`, so freshness reflects what the recording will truly capture.
|
|
174
|
+
*
|
|
175
|
+
* Photometry-DB Windows E2E (#14): the configured target pointed at a stale
|
|
176
|
+
* `publish/PhotometryDB-Beta/Photometry DB.exe` (resolved by the directory
|
|
177
|
+
* walk), while the running app was a FRESH Debug build under a subproject
|
|
178
|
+
* dir (`PhotometryDB.UI/bin/Debug/...`) that the walk never reaches. The
|
|
179
|
+
* result was a false "BINARY MISMATCH" that told the agent it was recording
|
|
180
|
+
* stale code. The running process's own module path is the ground truth.
|
|
181
|
+
*
|
|
182
|
+
* Best-effort and bounded: win32 via `Get-Process .Path` (exact ProcessName
|
|
183
|
+
* match), darwin via `ps -axo comm=` (.app bundle / exec basename match).
|
|
184
|
+
* Returns undefined on any failure so callers fall back to the configured
|
|
185
|
+
* path resolver.
|
|
186
|
+
*/
|
|
187
|
+
export async function runningAppBinaryPath(appName) {
|
|
188
|
+
if (!appName)
|
|
189
|
+
return undefined;
|
|
190
|
+
const norm = (s) => s.replace(/\s+/g, "").toLowerCase();
|
|
191
|
+
const want = norm(appName);
|
|
192
|
+
if (!want)
|
|
193
|
+
return undefined;
|
|
194
|
+
try {
|
|
195
|
+
const { runCommand } = await import("../runners/base.js");
|
|
196
|
+
if (process.platform === "win32") {
|
|
197
|
+
const esc = appName.replace(/'/g, "''");
|
|
198
|
+
const ps = [
|
|
199
|
+
`$wn = ('${esc}' -replace '\\s','').ToLowerInvariant()`,
|
|
200
|
+
"Get-Process | Where-Object { $_.Path -and ((($_.ProcessName -replace '\\s','').ToLowerInvariant()) -eq $wn) } | Select-Object -First 1 -ExpandProperty Path",
|
|
201
|
+
].join("; ");
|
|
202
|
+
const r = await runCommand("powershell", ["-NoProfile", "-Command", ps], process.cwd(), undefined, undefined, 8000);
|
|
203
|
+
const p = r.stdout
|
|
204
|
+
.split(/\r?\n/)
|
|
205
|
+
.map((s) => s.trim())
|
|
206
|
+
.filter(Boolean)
|
|
207
|
+
.pop();
|
|
208
|
+
return p && existsSync(p) ? p : undefined;
|
|
209
|
+
}
|
|
210
|
+
if (process.platform === "darwin") {
|
|
211
|
+
const r = await runCommand("ps", ["-axo", "comm="], process.cwd(), undefined, undefined, 8000);
|
|
212
|
+
const lines = r.stdout.split(/\r?\n/).map((s) => s.trim()).filter(Boolean);
|
|
213
|
+
for (const line of lines) {
|
|
214
|
+
const bundle = line.match(/\/([^/]+)\.app\//);
|
|
215
|
+
if (bundle && norm(bundle[1]) === want) {
|
|
216
|
+
return line.slice(0, line.indexOf(".app/") + 4);
|
|
217
|
+
}
|
|
218
|
+
if (norm(path.basename(line)) === want && existsSync(line))
|
|
219
|
+
return line;
|
|
220
|
+
}
|
|
221
|
+
return undefined;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
/* best-effort */
|
|
226
|
+
}
|
|
227
|
+
return undefined;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* 0.1.96 — async freshness that prefers the actually-running process binary
|
|
231
|
+
* over the configured/walked path, eliminating the stale-publish-folder false
|
|
232
|
+
* positive. Falls back to the sync configured-path check when no matching
|
|
233
|
+
* process is running.
|
|
234
|
+
*/
|
|
235
|
+
export async function checkBinaryFreshnessAsync(opts) {
|
|
236
|
+
if (!opts.app_name)
|
|
237
|
+
return { stale: false };
|
|
238
|
+
const runningPath = await runningAppBinaryPath(opts.app_name);
|
|
239
|
+
if (runningPath) {
|
|
240
|
+
const res = freshnessForBinary(runningPath, opts.cwd);
|
|
241
|
+
if (res)
|
|
242
|
+
return res;
|
|
243
|
+
}
|
|
244
|
+
return checkBinaryFreshness(opts);
|
|
245
|
+
}
|
|
168
246
|
//# sourceMappingURL=binary_freshness.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary_freshness.js","sourceRoot":"","sources":["../../src/evidence/binary_freshness.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"binary_freshness.js","sourceRoot":"","sources":["../../src/evidence/binary_freshness.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2170,8 +2170,11 @@ App logs (stdout, logcat, simctl log) are automatically captured alongside the v
|
|
|
2170
2170
|
let binaryFreshnessDetails;
|
|
2171
2171
|
if (targetType === "desktop" && appName) {
|
|
2172
2172
|
try {
|
|
2173
|
-
|
|
2174
|
-
|
|
2173
|
+
// 0.1.96 — prefer the actually-running process binary (E2E #14: the
|
|
2174
|
+
// configured path pointed at a stale publish/ copy while the running
|
|
2175
|
+
// app was a fresh subproject Debug build → false BINARY MISMATCH).
|
|
2176
|
+
const { checkBinaryFreshnessAsync } = await import("./evidence/binary_freshness.js");
|
|
2177
|
+
binaryFreshnessDetails = await checkBinaryFreshnessAsync({ app_name: appName, cwd });
|
|
2175
2178
|
if (binaryFreshnessDetails.stale) {
|
|
2176
2179
|
binaryFreshnessWarning = binaryFreshnessDetails.reason;
|
|
2177
2180
|
const { recordCycleIssue } = await import("./evidence/cycle_issues.js");
|