codeloop-mcp-server 0.1.62 → 0.1.64
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/auth/critical_floors.d.ts.map +1 -1
- package/dist/auth/critical_floors.js +8 -0
- package/dist/auth/critical_floors.js.map +1 -1
- package/dist/auth/key_resolver.d.ts +55 -0
- package/dist/auth/key_resolver.d.ts.map +1 -0
- package/dist/auth/key_resolver.js +41 -0
- package/dist/auth/key_resolver.js.map +1 -0
- package/dist/auth/key_source.d.ts +60 -4
- package/dist/auth/key_source.d.ts.map +1 -1
- package/dist/auth/key_source.js +281 -48
- package/dist/auth/key_source.js.map +1 -1
- package/dist/evidence/observability.d.ts +67 -0
- package/dist/evidence/observability.d.ts.map +1 -0
- package/dist/evidence/observability.js +57 -0
- package/dist/evidence/observability.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +91 -5
- package/dist/index.js.map +1 -1
- package/dist/runners/app_logger.d.ts.map +1 -1
- package/dist/runners/app_logger.js +31 -3
- package/dist/runners/app_logger.js.map +1 -1
- package/dist/runners/logging_readiness.d.ts +72 -0
- package/dist/runners/logging_readiness.d.ts.map +1 -0
- package/dist/runners/logging_readiness.js +419 -0
- package/dist/runners/logging_readiness.js.map +1 -0
- package/dist/runners/modal_close_strategies.d.ts +23 -0
- package/dist/runners/modal_close_strategies.d.ts.map +1 -1
- package/dist/runners/modal_close_strategies.js +59 -0
- package/dist/runners/modal_close_strategies.js.map +1 -1
- package/dist/runners/modal_detector.d.ts +36 -0
- package/dist/runners/modal_detector.d.ts.map +1 -1
- package/dist/runners/modal_detector.js +160 -78
- package/dist/runners/modal_detector.js.map +1 -1
- package/dist/runners/remote_logs.d.ts +105 -0
- package/dist/runners/remote_logs.d.ts.map +1 -0
- package/dist/runners/remote_logs.js +336 -0
- package/dist/runners/remote_logs.js.map +1 -0
- package/dist/runners/win_accessibility.d.ts.map +1 -1
- package/dist/runners/win_accessibility.js +3 -6
- package/dist/runners/win_accessibility.js.map +1 -1
- package/dist/runners/window_manager.d.ts +24 -0
- package/dist/runners/window_manager.d.ts.map +1 -1
- package/dist/runners/window_manager.js +70 -0
- package/dist/runners/window_manager.js.map +1 -1
- package/dist/tools/gate_check.d.ts.map +1 -1
- package/dist/tools/gate_check.js +25 -0
- package/dist/tools/gate_check.js.map +1 -1
- package/dist/tools/interaction_replay.d.ts +18 -0
- package/dist/tools/interaction_replay.d.ts.map +1 -1
- package/dist/tools/interaction_replay.js +102 -1
- package/dist/tools/interaction_replay.js.map +1 -1
- package/dist/tools/verify.d.ts.map +1 -1
- package/dist/tools/verify.js +61 -5
- package/dist/tools/verify.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { checkToolAvailable, runCommand } from "./base.js";
|
|
4
|
+
const FILE = "remote_logs.json";
|
|
5
|
+
function fileExists(cwd, ...names) {
|
|
6
|
+
return names.some((n) => existsSync(join(cwd, n)));
|
|
7
|
+
}
|
|
8
|
+
function pkgIncludes(cwd, re) {
|
|
9
|
+
try {
|
|
10
|
+
const p = join(cwd, "package.json");
|
|
11
|
+
return existsSync(p) && re.test(readFileSync(p, "utf-8"));
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function hasEnvRef(cwd, re) {
|
|
18
|
+
for (const f of [".env", ".env.local", ".env.production"]) {
|
|
19
|
+
try {
|
|
20
|
+
const p = join(cwd, f);
|
|
21
|
+
if (existsSync(p) && re.test(readFileSync(p, "utf-8")))
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
/* ignore */
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Built-in provider registry. Covers the common deploy + SaaS targets; the
|
|
32
|
+
* long tail is handled via config.remote_logs.providers overrides.
|
|
33
|
+
*/
|
|
34
|
+
export const PROVIDER_REGISTRY = [
|
|
35
|
+
{
|
|
36
|
+
id: "vercel",
|
|
37
|
+
displayName: "Vercel",
|
|
38
|
+
cli: "vercel",
|
|
39
|
+
detect: (cwd) => fileExists(cwd, "vercel.json", ".vercel") || pkgIncludes(cwd, /"vercel"/),
|
|
40
|
+
logsArgs: () => null, // `vercel logs <deployment-url>` needs a target
|
|
41
|
+
installHint: "npm i -g vercel (then `vercel login`)",
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
id: "netlify",
|
|
45
|
+
displayName: "Netlify",
|
|
46
|
+
cli: "netlify",
|
|
47
|
+
detect: (cwd) => fileExists(cwd, "netlify.toml", ".netlify"),
|
|
48
|
+
logsArgs: () => null, // `netlify logs:function <name>` needs a function target
|
|
49
|
+
installHint: "npm i -g netlify-cli (then `netlify login`)",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: "heroku",
|
|
53
|
+
displayName: "Heroku",
|
|
54
|
+
cli: "heroku",
|
|
55
|
+
detect: (cwd) => fileExists(cwd, "Procfile", "app.json") || hasGitRemoteMatch(cwd, /heroku/),
|
|
56
|
+
logsArgs: (tail) => ["logs", "-n", String(tail)],
|
|
57
|
+
installHint: "https://devcenter.heroku.com/articles/heroku-cli (then `heroku login`)",
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
id: "fly",
|
|
61
|
+
displayName: "Fly.io",
|
|
62
|
+
cli: "fly",
|
|
63
|
+
detect: (cwd) => fileExists(cwd, "fly.toml"),
|
|
64
|
+
logsArgs: () => ["logs"], // streams; killed by timeout, partial output captured
|
|
65
|
+
installHint: "https://fly.io/docs/flyctl/install/ (then `fly auth login`)",
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: "railway",
|
|
69
|
+
displayName: "Railway",
|
|
70
|
+
cli: "railway",
|
|
71
|
+
detect: (cwd) => fileExists(cwd, "railway.json", "railway.toml"),
|
|
72
|
+
logsArgs: () => ["logs"],
|
|
73
|
+
installHint: "npm i -g @railway/cli (then `railway login`)",
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
id: "render",
|
|
77
|
+
displayName: "Render",
|
|
78
|
+
cli: "render",
|
|
79
|
+
detect: (cwd) => fileExists(cwd, "render.yaml"),
|
|
80
|
+
logsArgs: () => null, // needs a service id
|
|
81
|
+
installHint: "https://render.com/docs/cli (then `render login`)",
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
id: "cloudflare",
|
|
85
|
+
displayName: "Cloudflare Workers",
|
|
86
|
+
cli: "wrangler",
|
|
87
|
+
detect: (cwd) => fileExists(cwd, "wrangler.toml", "wrangler.jsonc", "wrangler.json"),
|
|
88
|
+
logsArgs: () => ["tail", "--format", "json"], // streams; killed by timeout
|
|
89
|
+
installHint: "npm i -g wrangler (then `wrangler login`)",
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
id: "firebase",
|
|
93
|
+
displayName: "Firebase",
|
|
94
|
+
cli: "firebase",
|
|
95
|
+
detect: (cwd) => fileExists(cwd, "firebase.json", ".firebaserc"),
|
|
96
|
+
logsArgs: (tail) => ["functions:log", "-n", String(tail)],
|
|
97
|
+
installHint: "npm i -g firebase-tools (then `firebase login`)",
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
id: "gcloud",
|
|
101
|
+
displayName: "Google Cloud",
|
|
102
|
+
cli: "gcloud",
|
|
103
|
+
detect: (cwd) => fileExists(cwd, "app.yaml", ".gcloudignore", "cloudbuild.yaml"),
|
|
104
|
+
logsArgs: (tail) => ["logging", "read", "severity>=ERROR", "--limit", String(tail), "--freshness=1d"],
|
|
105
|
+
installHint: "https://cloud.google.com/sdk/docs/install (then `gcloud auth login`)",
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
id: "aws",
|
|
109
|
+
displayName: "AWS CloudWatch",
|
|
110
|
+
cli: "aws",
|
|
111
|
+
detect: (cwd) => fileExists(cwd, "serverless.yml", "serverless.yaml", "samconfig.toml", "template.yaml", "cdk.json"),
|
|
112
|
+
logsArgs: () => null, // `aws logs tail <log-group>` needs the group name
|
|
113
|
+
installHint: "https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html (then `aws configure`)",
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
id: "supabase",
|
|
117
|
+
displayName: "Supabase",
|
|
118
|
+
cli: "supabase",
|
|
119
|
+
detect: (cwd) => fileExists(cwd, "supabase") || pkgIncludes(cwd, /"@supabase\/supabase-js"/),
|
|
120
|
+
logsArgs: () => null,
|
|
121
|
+
installHint: "npm i -g supabase (then `supabase login`)",
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
id: "stripe",
|
|
125
|
+
displayName: "Stripe",
|
|
126
|
+
cli: "stripe",
|
|
127
|
+
detect: (cwd) => pkgIncludes(cwd, /"stripe"/) || hasEnvRef(cwd, /STRIPE_(SECRET|API)_KEY/),
|
|
128
|
+
logsArgs: () => ["logs", "tail"], // streams; killed by timeout
|
|
129
|
+
installHint: "https://stripe.com/docs/stripe-cli (then `stripe login`)",
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
id: "convex",
|
|
133
|
+
displayName: "Convex",
|
|
134
|
+
cli: "convex",
|
|
135
|
+
detect: (cwd) => fileExists(cwd, "convex") || pkgIncludes(cwd, /"convex"/),
|
|
136
|
+
logsArgs: () => ["logs"],
|
|
137
|
+
installHint: "npm i -g convex (then `npx convex login`)",
|
|
138
|
+
},
|
|
139
|
+
];
|
|
140
|
+
function hasGitRemoteMatch(cwd, re) {
|
|
141
|
+
try {
|
|
142
|
+
const cfg = join(cwd, ".git", "config");
|
|
143
|
+
return existsSync(cfg) && re.test(readFileSync(cfg, "utf-8"));
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Pure: pick the candidate providers given the project, config, and registry.
|
|
151
|
+
* - mode "off" / enabled:false -> []
|
|
152
|
+
* - mode "configured" -> only providers explicitly listed in config (enabled).
|
|
153
|
+
* - mode "auto" (default) -> registry providers whose detect() matches, PLUS
|
|
154
|
+
* any explicitly-configured providers; config can disable a provider.
|
|
155
|
+
*/
|
|
156
|
+
export function selectRemoteLogCandidates(cwd, config, registry = PROVIDER_REGISTRY) {
|
|
157
|
+
if (config.enabled === false || config.mode === "off")
|
|
158
|
+
return [];
|
|
159
|
+
const mode = config.mode ?? "auto";
|
|
160
|
+
const overrides = new Map((config.providers ?? []).map((p) => [p.id, p]));
|
|
161
|
+
const byId = new Map(registry.map((p) => [p.id, p]));
|
|
162
|
+
const out = [];
|
|
163
|
+
const seen = new Set();
|
|
164
|
+
const pushCandidate = (provider) => {
|
|
165
|
+
if (seen.has(provider.id))
|
|
166
|
+
return;
|
|
167
|
+
const ov = overrides.get(provider.id);
|
|
168
|
+
if (ov?.enabled === false)
|
|
169
|
+
return;
|
|
170
|
+
seen.add(provider.id);
|
|
171
|
+
out.push({
|
|
172
|
+
provider,
|
|
173
|
+
cli: ov?.cli ?? provider.cli,
|
|
174
|
+
commandOverride: ov?.logs_command,
|
|
175
|
+
installHint: ov?.install_hint ?? provider.installHint,
|
|
176
|
+
});
|
|
177
|
+
};
|
|
178
|
+
if (mode === "auto") {
|
|
179
|
+
for (const provider of registry) {
|
|
180
|
+
try {
|
|
181
|
+
if (provider.detect(cwd))
|
|
182
|
+
pushCandidate(provider);
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
/* detect is best-effort */
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Explicitly-configured providers are always candidates (both modes).
|
|
190
|
+
for (const ov of config.providers ?? []) {
|
|
191
|
+
if (ov.enabled === false)
|
|
192
|
+
continue;
|
|
193
|
+
const known = byId.get(ov.id);
|
|
194
|
+
if (known) {
|
|
195
|
+
pushCandidate(known);
|
|
196
|
+
}
|
|
197
|
+
else if (ov.cli || ov.logs_command) {
|
|
198
|
+
// Custom provider not in the registry — long-tail CLI support.
|
|
199
|
+
seen.add(ov.id);
|
|
200
|
+
out.push({
|
|
201
|
+
provider: {
|
|
202
|
+
id: ov.id,
|
|
203
|
+
displayName: ov.id,
|
|
204
|
+
cli: ov.cli ?? ov.id,
|
|
205
|
+
detect: () => true,
|
|
206
|
+
logsArgs: () => null,
|
|
207
|
+
installHint: ov.install_hint ?? `install the ${ov.id} CLI`,
|
|
208
|
+
},
|
|
209
|
+
cli: ov.cli ?? ov.id,
|
|
210
|
+
commandOverride: ov.logs_command,
|
|
211
|
+
installHint: ov.install_hint ?? `install the ${ov.id} CLI`,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return out;
|
|
216
|
+
}
|
|
217
|
+
const AUTH_ERROR_RE = /(not (logged in|authenticated)|unauthorized|please (log|sign) ?in|run `?\w+ login|no active account|credentials? (not|missing)|401 )/i;
|
|
218
|
+
/**
|
|
219
|
+
* Collect remote logs. Best-effort: never throws. Writes remote_logs.json
|
|
220
|
+
* into runDir and the per-provider logs into logDir.
|
|
221
|
+
*/
|
|
222
|
+
export async function collectRemoteLogs(cwd, config, logDir) {
|
|
223
|
+
const mode = config.mode ?? "auto";
|
|
224
|
+
const ev = {
|
|
225
|
+
generated_at: new Date().toISOString(),
|
|
226
|
+
enabled: config.enabled !== false && mode !== "off",
|
|
227
|
+
mode,
|
|
228
|
+
detected: [],
|
|
229
|
+
captured: [],
|
|
230
|
+
missing_clis: [],
|
|
231
|
+
auth_needed: [],
|
|
232
|
+
needs_config: [],
|
|
233
|
+
};
|
|
234
|
+
if (!ev.enabled) {
|
|
235
|
+
ev.reason = "remote log collection disabled in config";
|
|
236
|
+
return ev;
|
|
237
|
+
}
|
|
238
|
+
const tail = config.tail_lines ?? 200;
|
|
239
|
+
const timeoutMs = (config.timeout_seconds ?? 25) * 1000;
|
|
240
|
+
let candidates;
|
|
241
|
+
try {
|
|
242
|
+
candidates = selectRemoteLogCandidates(cwd, config);
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
candidates = [];
|
|
246
|
+
}
|
|
247
|
+
ev.detected = candidates.map((c) => c.provider.id);
|
|
248
|
+
for (const cand of candidates) {
|
|
249
|
+
try {
|
|
250
|
+
const installed = await checkToolAvailable(cand.cli);
|
|
251
|
+
if (!installed) {
|
|
252
|
+
ev.missing_clis.push({
|
|
253
|
+
id: cand.provider.id,
|
|
254
|
+
displayName: cand.provider.displayName,
|
|
255
|
+
cli: cand.cli,
|
|
256
|
+
install_hint: cand.installHint,
|
|
257
|
+
});
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
let cmd;
|
|
261
|
+
let args;
|
|
262
|
+
if (cand.commandOverride) {
|
|
263
|
+
const parts = cand.commandOverride.split(/\s+/).filter(Boolean);
|
|
264
|
+
cmd = parts[0];
|
|
265
|
+
args = parts.slice(1);
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
const a = cand.provider.logsArgs(tail);
|
|
269
|
+
if (!a) {
|
|
270
|
+
ev.needs_config.push(cand.provider.id);
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
cmd = cand.cli;
|
|
274
|
+
args = a;
|
|
275
|
+
}
|
|
276
|
+
mkdirSync(logDir, { recursive: true });
|
|
277
|
+
const outPath = join(logDir, `remote_${cand.provider.id}.log`);
|
|
278
|
+
const res = await runCommand(cmd, args, cwd, undefined, undefined, timeoutMs);
|
|
279
|
+
const body = `$ ${cmd} ${args.join(" ")}\nexit_code: ${res.exit_code}\n\n${res.stdout}\n${res.stderr}\n`;
|
|
280
|
+
try {
|
|
281
|
+
writeFileSync(outPath, body, "utf-8");
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
/* best-effort */
|
|
285
|
+
}
|
|
286
|
+
if (AUTH_ERROR_RE.test(res.stderr) || AUTH_ERROR_RE.test(res.stdout)) {
|
|
287
|
+
ev.auth_needed.push(cand.provider.id);
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
ev.captured.push({
|
|
291
|
+
id: cand.provider.id,
|
|
292
|
+
displayName: cand.provider.displayName,
|
|
293
|
+
path: outPath,
|
|
294
|
+
command: `${cmd} ${args.join(" ")}`,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
/* one provider failing must never break the others or verify */
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return ev;
|
|
302
|
+
}
|
|
303
|
+
export function writeRemoteLogsEvidence(runDir, ev) {
|
|
304
|
+
try {
|
|
305
|
+
mkdirSync(runDir, { recursive: true });
|
|
306
|
+
writeFileSync(join(runDir, FILE), JSON.stringify(ev, null, 2), "utf-8");
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
/* best-effort */
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
export function loadRemoteLogsEvidence(runDir) {
|
|
313
|
+
const p = join(runDir, FILE);
|
|
314
|
+
if (!existsSync(p))
|
|
315
|
+
return null;
|
|
316
|
+
try {
|
|
317
|
+
return JSON.parse(readFileSync(p, "utf-8"));
|
|
318
|
+
}
|
|
319
|
+
catch {
|
|
320
|
+
return null;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/** Captured remote log files in a run's logs dir, for runtime_log_scan. */
|
|
324
|
+
export function listCapturedRemoteLogs(logDir) {
|
|
325
|
+
if (!existsSync(logDir))
|
|
326
|
+
return [];
|
|
327
|
+
try {
|
|
328
|
+
return readdirSync(logDir)
|
|
329
|
+
.filter((f) => f.startsWith("remote_") && f.endsWith(".log"))
|
|
330
|
+
.map((f) => ({ source: f.replace(/\.log$/, ""), path: join(logDir, f) }));
|
|
331
|
+
}
|
|
332
|
+
catch {
|
|
333
|
+
return [];
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=remote_logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote_logs.js","sourceRoot":"","sources":["../../src/runners/remote_logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"win_accessibility.d.ts","sourceRoot":"","sources":["../../src/runners/win_accessibility.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"win_accessibility.d.ts","sourceRoot":"","sources":["../../src/runners/win_accessibility.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;CACxB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAoD7F;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE;QACT,YAAY,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,eAAe,CAAC;QAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF;;;;OAIG;IACH,eAAe,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EAC9D,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EAC9D,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,CAwMzB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { platform } from "os";
|
|
2
2
|
import { runCommand, checkToolAvailable } from "./base.js";
|
|
3
|
+
import { buildUiaAppElementLookup } from "./window_manager.js";
|
|
3
4
|
export async function inspectUITree(appName) {
|
|
4
5
|
if (platform() !== "win32") {
|
|
5
6
|
return { error: "UI Automation is only available on Windows" };
|
|
@@ -31,9 +32,7 @@ function Get-UITree($element, $depth) {
|
|
|
31
32
|
return $children
|
|
32
33
|
}
|
|
33
34
|
|
|
34
|
-
$
|
|
35
|
-
$condition = New-Object System.Windows.Automation.PropertyCondition([System.Windows.Automation.AutomationElement]::NameProperty, "${appName}")
|
|
36
|
-
$appElement = $root.FindFirst([System.Windows.Automation.TreeScope]::Children, $condition)
|
|
35
|
+
${buildUiaAppElementLookup(appName)}
|
|
37
36
|
|
|
38
37
|
if ($appElement) {
|
|
39
38
|
$tree = Get-UITree $appElement 0
|
|
@@ -88,9 +87,7 @@ $ErrorActionPreference = 'Stop'
|
|
|
88
87
|
Add-Type -AssemblyName UIAutomationClient
|
|
89
88
|
Add-Type -AssemblyName UIAutomationTypes
|
|
90
89
|
|
|
91
|
-
$
|
|
92
|
-
$appCondition = New-Object System.Windows.Automation.PropertyCondition([System.Windows.Automation.AutomationElement]::NameProperty, "${appName}")
|
|
93
|
-
$appElement = $root.FindFirst([System.Windows.Automation.TreeScope]::Children, $appCondition)
|
|
90
|
+
${buildUiaAppElementLookup(appName)}
|
|
94
91
|
if (-not $appElement) {
|
|
95
92
|
Write-Output (ConvertTo-Json @{ success = $false; reason = 'app-not-found' } -Compress)
|
|
96
93
|
exit 1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"win_accessibility.js","sourceRoot":"","sources":["../../src/runners/win_accessibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"win_accessibility.js","sourceRoot":"","sources":["../../src/runners/win_accessibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,6 +54,30 @@ export declare function findWindowIdDetailed(appName: string): Promise<WindowLoo
|
|
|
54
54
|
* filter has its own `Select-Object -First 1`.
|
|
55
55
|
*/
|
|
56
56
|
export declare function buildWindowsProcessLookup(appName: string): string;
|
|
57
|
+
/**
|
|
58
|
+
* 0.1.63 H12 — robust UIA app-window resolver.
|
|
59
|
+
*
|
|
60
|
+
* win_ui_inspect / win_ui_automate previously located the app window
|
|
61
|
+
* with an EXACT NameProperty match:
|
|
62
|
+
* PropertyCondition(NameProperty, appName)
|
|
63
|
+
* so a caller passing app_name="Photometry DB" never matched the live
|
|
64
|
+
* window title "PhotometryDB - Professional Photometric Data Management"
|
|
65
|
+
* (no space, extra suffix) and every inspect returned the unhelpful
|
|
66
|
+
* "App window not found". The Photometry-DB delete-confirm E2E showed
|
|
67
|
+
* the agent fall back to coordinate guessing because of this.
|
|
68
|
+
*
|
|
69
|
+
* This emits a PowerShell block that sets `$appElement` to the running
|
|
70
|
+
* app's top-level Window via a tolerant ladder:
|
|
71
|
+
* 1. exact Name match
|
|
72
|
+
* 2. whitespace-insensitive, case-insensitive contains (either way)
|
|
73
|
+
* 3. owning-process match (ProcessName / MainWindowTitle fuzzy) so a
|
|
74
|
+
* window whose title doesn't embed the app name at all still resolves
|
|
75
|
+
*
|
|
76
|
+
* Requires `Add-Type -AssemblyName UIAutomationClient` to have run
|
|
77
|
+
* already (both call sites do). Uses `cl`-prefixed variable names so it
|
|
78
|
+
* can't collide with the caller's `$appElement` consumers.
|
|
79
|
+
*/
|
|
80
|
+
export declare function buildUiaAppElementLookup(appName: string): string;
|
|
57
81
|
/**
|
|
58
82
|
* Bring an app to the front, un-minimizing if needed.
|
|
59
83
|
* Returns the name/title of the previously frontmost app for later restoration.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"window_manager.d.ts","sourceRoot":"","sources":["../../src/runners/window_manager.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAG1E;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,IAAI,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,mBAAmB,CAAC;AAEnE,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAoBvF;AA+FD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"window_manager.d.ts","sourceRoot":"","sources":["../../src/runners/window_manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -160,12 +160,82 @@ export function buildWindowsProcessLookup(appName) {
|
|
|
160
160
|
const regexLiteral = appName
|
|
161
161
|
.replace(/'/g, "''")
|
|
162
162
|
.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
163
|
+
// 0.1.63 H12 — whitespace-insensitive fallback. The Photometry-DB
|
|
164
|
+
// window title is "PhotometryDB - Professional Photometric Data
|
|
165
|
+
// Management" but evidence.target_app / app_name is "Photometry DB"
|
|
166
|
+
// (with a space). The exact / starts-with / substring ladder all
|
|
167
|
+
// miss because "Photometry DB" is not a substring of "PhotometryDB".
|
|
168
|
+
// Stripping ALL whitespace from both sides lets the two reconcile.
|
|
169
|
+
// -like is case-insensitive in PowerShell; we escape the wildcard
|
|
170
|
+
// metacharacters so a literal '[' in an app name can't break it.
|
|
171
|
+
const normLiteral = appName
|
|
172
|
+
.replace(/\s+/g, "")
|
|
173
|
+
.replace(/'/g, "''")
|
|
174
|
+
.replace(/([[\]*?])/g, "`$1");
|
|
163
175
|
return `
|
|
164
176
|
$candidates = Get-Process | Where-Object { $_.MainWindowHandle -ne 0 }
|
|
165
177
|
$proc = $candidates | Where-Object { $_.ProcessName -eq '${psLiteral}' } | Select-Object -First 1
|
|
166
178
|
if (-not $proc) { $proc = $candidates | Where-Object { $_.MainWindowTitle -eq '${psLiteral}' } | Select-Object -First 1 }
|
|
167
179
|
if (-not $proc) { $proc = $candidates | Where-Object { $_.MainWindowTitle -like '${psLiteral}*' } | Select-Object -First 1 }
|
|
168
180
|
if (-not $proc) { $proc = $candidates | Where-Object { $_.MainWindowTitle -match '${regexLiteral}' } | Select-Object -First 1 }
|
|
181
|
+
if (-not $proc) { $proc = $candidates | Where-Object { ($_.ProcessName -replace '\\s','') -like '${normLiteral}' } | Select-Object -First 1 }
|
|
182
|
+
if (-not $proc) { $proc = $candidates | Where-Object { $_.MainWindowTitle -and (($_.MainWindowTitle -replace '\\s','') -like '*${normLiteral}*') } | Select-Object -First 1 }
|
|
183
|
+
`;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* 0.1.63 H12 — robust UIA app-window resolver.
|
|
187
|
+
*
|
|
188
|
+
* win_ui_inspect / win_ui_automate previously located the app window
|
|
189
|
+
* with an EXACT NameProperty match:
|
|
190
|
+
* PropertyCondition(NameProperty, appName)
|
|
191
|
+
* so a caller passing app_name="Photometry DB" never matched the live
|
|
192
|
+
* window title "PhotometryDB - Professional Photometric Data Management"
|
|
193
|
+
* (no space, extra suffix) and every inspect returned the unhelpful
|
|
194
|
+
* "App window not found". The Photometry-DB delete-confirm E2E showed
|
|
195
|
+
* the agent fall back to coordinate guessing because of this.
|
|
196
|
+
*
|
|
197
|
+
* This emits a PowerShell block that sets `$appElement` to the running
|
|
198
|
+
* app's top-level Window via a tolerant ladder:
|
|
199
|
+
* 1. exact Name match
|
|
200
|
+
* 2. whitespace-insensitive, case-insensitive contains (either way)
|
|
201
|
+
* 3. owning-process match (ProcessName / MainWindowTitle fuzzy) so a
|
|
202
|
+
* window whose title doesn't embed the app name at all still resolves
|
|
203
|
+
*
|
|
204
|
+
* Requires `Add-Type -AssemblyName UIAutomationClient` to have run
|
|
205
|
+
* already (both call sites do). Uses `cl`-prefixed variable names so it
|
|
206
|
+
* can't collide with the caller's `$appElement` consumers.
|
|
207
|
+
*/
|
|
208
|
+
export function buildUiaAppElementLookup(appName) {
|
|
209
|
+
const psLiteral = appName.replace(/'/g, "''");
|
|
210
|
+
return `
|
|
211
|
+
$clTarget = '${psLiteral}'
|
|
212
|
+
$clNorm = ($clTarget -replace '\\s','').ToLowerInvariant()
|
|
213
|
+
$clRoot = [System.Windows.Automation.AutomationElement]::RootElement
|
|
214
|
+
$clWinCond = New-Object System.Windows.Automation.PropertyCondition([System.Windows.Automation.AutomationElement]::ControlTypeProperty, [System.Windows.Automation.ControlType]::Window)
|
|
215
|
+
$clWins = $clRoot.FindAll([System.Windows.Automation.TreeScope]::Children, $clWinCond)
|
|
216
|
+
$appElement = $null
|
|
217
|
+
foreach ($clW in $clWins) { try { if ($clW.Current.Name -eq $clTarget) { $appElement = $clW; break } } catch {} }
|
|
218
|
+
if (-not $appElement) {
|
|
219
|
+
foreach ($clW in $clWins) {
|
|
220
|
+
try {
|
|
221
|
+
$clN = $clW.Current.Name
|
|
222
|
+
if ([string]::IsNullOrWhiteSpace($clN)) { continue }
|
|
223
|
+
$clNn = ($clN -replace '\\s','').ToLowerInvariant()
|
|
224
|
+
if ($clNn -eq $clNorm -or $clNn.Contains($clNorm) -or $clNorm.Contains($clNn)) { $appElement = $clW; break }
|
|
225
|
+
} catch {}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
if (-not $appElement -and $clNorm.Length -gt 0) {
|
|
229
|
+
try {
|
|
230
|
+
$clPids = @(Get-Process | Where-Object {
|
|
231
|
+
($_.ProcessName -replace '\\s','').ToLowerInvariant() -eq $clNorm -or
|
|
232
|
+
($_.MainWindowTitle -and ((($_.MainWindowTitle -replace '\\s','').ToLowerInvariant()).Contains($clNorm)))
|
|
233
|
+
} | Select-Object -ExpandProperty Id)
|
|
234
|
+
if ($clPids.Count -gt 0) {
|
|
235
|
+
foreach ($clW in $clWins) { try { if ($clPids -contains $clW.Current.ProcessId) { $appElement = $clW; break } } catch {} }
|
|
236
|
+
}
|
|
237
|
+
} catch {}
|
|
238
|
+
}
|
|
169
239
|
`;
|
|
170
240
|
}
|
|
171
241
|
async function findWindowsWindowId(appName) {
|