codeloop-mcp-server 0.1.48 → 0.1.50

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 (58) hide show
  1. package/dist/auth/critical_floors.d.ts +8 -4
  2. package/dist/auth/critical_floors.d.ts.map +1 -1
  3. package/dist/auth/critical_floors.js +17 -17
  4. package/dist/auth/critical_floors.js.map +1 -1
  5. package/dist/auth/init_hint_cache.d.ts +35 -0
  6. package/dist/auth/init_hint_cache.d.ts.map +1 -0
  7. package/dist/auth/init_hint_cache.js +143 -0
  8. package/dist/auth/init_hint_cache.js.map +1 -0
  9. package/dist/evidence/screenshot_diff.d.ts +23 -0
  10. package/dist/evidence/screenshot_diff.d.ts.map +1 -1
  11. package/dist/evidence/screenshot_diff.js +46 -13
  12. package/dist/evidence/screenshot_diff.js.map +1 -1
  13. package/dist/index.js +291 -53
  14. package/dist/index.js.map +1 -1
  15. package/dist/runners/csproj_output_path.d.ts +22 -0
  16. package/dist/runners/csproj_output_path.d.ts.map +1 -0
  17. package/dist/runners/csproj_output_path.js +108 -0
  18. package/dist/runners/csproj_output_path.js.map +1 -0
  19. package/dist/runners/png_dims.d.ts +20 -0
  20. package/dist/runners/png_dims.d.ts.map +1 -0
  21. package/dist/runners/png_dims.js +58 -0
  22. package/dist/runners/png_dims.js.map +1 -0
  23. package/dist/runners/resolve_project_dir.d.ts +67 -0
  24. package/dist/runners/resolve_project_dir.d.ts.map +1 -0
  25. package/dist/runners/resolve_project_dir.js +82 -0
  26. package/dist/runners/resolve_project_dir.js.map +1 -0
  27. package/dist/runners/screenshot.d.ts.map +1 -1
  28. package/dist/runners/screenshot.js +17 -2
  29. package/dist/runners/screenshot.js.map +1 -1
  30. package/dist/runners/uia_resolver.d.ts +70 -0
  31. package/dist/runners/uia_resolver.d.ts.map +1 -0
  32. package/dist/runners/uia_resolver.js +210 -0
  33. package/dist/runners/uia_resolver.js.map +1 -0
  34. package/dist/runners/window_manager.d.ts +45 -4
  35. package/dist/runners/window_manager.d.ts.map +1 -1
  36. package/dist/runners/window_manager.js +254 -26
  37. package/dist/runners/window_manager.js.map +1 -1
  38. package/dist/tools/design_compare.d.ts.map +1 -1
  39. package/dist/tools/design_compare.js +85 -33
  40. package/dist/tools/design_compare.js.map +1 -1
  41. package/dist/tools/desktop_app_mode.d.ts +48 -0
  42. package/dist/tools/desktop_app_mode.d.ts.map +1 -0
  43. package/dist/tools/desktop_app_mode.js +86 -0
  44. package/dist/tools/desktop_app_mode.js.map +1 -0
  45. package/dist/tools/diagnose.d.ts.map +1 -1
  46. package/dist/tools/diagnose.js +32 -1
  47. package/dist/tools/diagnose.js.map +1 -1
  48. package/dist/tools/discover_screens.d.ts.map +1 -1
  49. package/dist/tools/discover_screens.js +94 -2
  50. package/dist/tools/discover_screens.js.map +1 -1
  51. package/dist/tools/self_test.d.ts +40 -0
  52. package/dist/tools/self_test.d.ts.map +1 -0
  53. package/dist/tools/self_test.js +205 -0
  54. package/dist/tools/self_test.js.map +1 -0
  55. package/dist/tools/verify.d.ts.map +1 -1
  56. package/dist/tools/verify.js +4 -5
  57. package/dist/tools/verify.js.map +1 -1
  58. package/package.json +1 -1
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Scans every `.csproj` / `.vbproj` under `projectAbs` (depth-capped
3
+ * to keep wide repos cheap) and returns the union of relative or
4
+ * absolute output paths declared via `<OutputPath>` and
5
+ * `<BaseOutputPath>`. The returned paths are normalised: backslash
6
+ * separators preserved on Windows-style hits, MSBuild variables like
7
+ * `$(Configuration)` collapsed to `Release` (so the helper never
8
+ * yields an unresolvable path), and trailing slashes stripped.
9
+ *
10
+ * Photometry-DB E2E 7+8: shipped with
11
+ * <BaseOutputPath>artifacts\bin\Release\</BaseOutputPath>
12
+ * which the pre-0.1.49 launchDesktopApp ignored — every
13
+ * codeloop_launch_app call returned "no .exe found" and the agent
14
+ * fell back to capturing the IDE.
15
+ *
16
+ * The helper takes its fs primitives as injected functions so the
17
+ * caller (window_manager) keeps its existing dynamic-import shape and
18
+ * we don't have to import `fs` at the top of the module twice.
19
+ */
20
+ export function collectCsprojOutputPaths(projectAbs, pjoin, existsSync, statSync, readdirSync) {
21
+ const out = new Set();
22
+ const csprojFiles = [];
23
+ const visit = (dir, depth) => {
24
+ if (depth > 4 || csprojFiles.length >= 100)
25
+ return;
26
+ let entries;
27
+ try {
28
+ entries = readdirSync(dir);
29
+ }
30
+ catch {
31
+ return;
32
+ }
33
+ for (const e of entries) {
34
+ if (e === "node_modules" || e === "bin" || e === "obj" || e === ".git" ||
35
+ e === "publish" || e === "dist" || e === ".next" || e === ".cache" ||
36
+ e === "artifacts") {
37
+ // Note: we DO scan artifacts in `bin`/`publish`/`dist` mode
38
+ // through standardSubs, but we don't recurse INTO them
39
+ // looking for more .csproj files.
40
+ continue;
41
+ }
42
+ const full = pjoin(dir, e);
43
+ let st;
44
+ try {
45
+ st = statSync(full);
46
+ }
47
+ catch {
48
+ continue;
49
+ }
50
+ if (st.isDirectory())
51
+ visit(full, depth + 1);
52
+ else if (e.endsWith(".csproj") || e.endsWith(".vbproj")) {
53
+ csprojFiles.push(full);
54
+ }
55
+ }
56
+ };
57
+ if (existsSync(projectAbs))
58
+ visit(projectAbs, 0);
59
+ for (const proj of csprojFiles) {
60
+ let content = "";
61
+ try {
62
+ // We avoid pulling readFileSync from fs — the caller already
63
+ // has it. Use a local require if available (we're in CJS via
64
+ // ts-node / esbuild bundle); otherwise read via dynamic import.
65
+ // Simplest: read via fs.readFileSync indirectly by trying to
66
+ // open the file with statSync first and bailing if huge.
67
+ const st = statSync(proj);
68
+ if (!st.isFile() || st.size > 1024 * 1024)
69
+ continue;
70
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
71
+ content = require("fs").readFileSync(proj, "utf-8");
72
+ }
73
+ catch {
74
+ continue;
75
+ }
76
+ const matches = [
77
+ ...content.matchAll(/<OutputPath[^>]*>([^<]+)<\/OutputPath>/gi),
78
+ ...content.matchAll(/<BaseOutputPath[^>]*>([^<]+)<\/BaseOutputPath>/gi),
79
+ ];
80
+ for (const m of matches) {
81
+ let raw = (m[1] || "").trim();
82
+ if (!raw)
83
+ continue;
84
+ // Resolve common MSBuild variables to safe defaults so the
85
+ // resulting path is at least walkable. The actual output is
86
+ // newest-mtime-wins, so picking Release here is fine.
87
+ raw = raw
88
+ .replace(/\$\(Configuration\)/gi, "Release")
89
+ .replace(/\$\(Platform\)/gi, "AnyCPU")
90
+ .replace(/\$\(TargetFramework\)/gi, "")
91
+ .replace(/\$\(MSBuildProjectName\)/gi, "")
92
+ .replace(/[\\/]+$/, "");
93
+ // If <OutputPath> is relative, it lives next to the .csproj
94
+ // (MSBuild semantics). Resolve relative to the project file's
95
+ // directory so we walk the right place.
96
+ if (!/^[A-Za-z]:[\\/]/.test(raw) && !raw.startsWith("/") && !raw.startsWith("\\")) {
97
+ const projDir = proj.substring(0, Math.max(proj.lastIndexOf("\\"), proj.lastIndexOf("/")));
98
+ const resolved = pjoin(projDir, raw);
99
+ out.add(resolved);
100
+ }
101
+ else {
102
+ out.add(raw);
103
+ }
104
+ }
105
+ }
106
+ return Array.from(out);
107
+ }
108
+ //# sourceMappingURL=csproj_output_path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csproj_output_path.js","sourceRoot":"","sources":["../../src/runners/csproj_output_path.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Reads the IHDR width/height of a PNG file without decoding the
3
+ * pixel stream. Used by codeloop_interact's `coords: "screenshot"`
4
+ * mode to scale agent-supplied coordinates from the dimensions of
5
+ * the captured PNG (which the MCP transport may have downscaled
6
+ * before the agent ever saw it) up to the window's actual pixel
7
+ * dimensions.
8
+ *
9
+ * The PNG layout is fixed: 8-byte magic header + 8-byte IHDR chunk
10
+ * length+type + 4-byte BE width at offset 16 + 4-byte BE height at
11
+ * offset 20.
12
+ *
13
+ * Returns `null` on any failure (missing file, truncated, not a
14
+ * PNG); callers fall back to the un-scaled translation path.
15
+ */
16
+ export declare function readPngDims(filePath: string): {
17
+ width: number;
18
+ height: number;
19
+ } | null;
20
+ //# sourceMappingURL=png_dims.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"png_dims.d.ts","sourceRoot":"","sources":["../../src/runners/png_dims.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAkCtF"}
@@ -0,0 +1,58 @@
1
+ import { existsSync, openSync, readSync, closeSync } from "fs";
2
+ /**
3
+ * Reads the IHDR width/height of a PNG file without decoding the
4
+ * pixel stream. Used by codeloop_interact's `coords: "screenshot"`
5
+ * mode to scale agent-supplied coordinates from the dimensions of
6
+ * the captured PNG (which the MCP transport may have downscaled
7
+ * before the agent ever saw it) up to the window's actual pixel
8
+ * dimensions.
9
+ *
10
+ * The PNG layout is fixed: 8-byte magic header + 8-byte IHDR chunk
11
+ * length+type + 4-byte BE width at offset 16 + 4-byte BE height at
12
+ * offset 20.
13
+ *
14
+ * Returns `null` on any failure (missing file, truncated, not a
15
+ * PNG); callers fall back to the un-scaled translation path.
16
+ */
17
+ export function readPngDims(filePath) {
18
+ if (!existsSync(filePath))
19
+ return null;
20
+ let fd;
21
+ try {
22
+ fd = openSync(filePath, "r");
23
+ }
24
+ catch {
25
+ return null;
26
+ }
27
+ try {
28
+ const buf = Buffer.alloc(24);
29
+ const bytesRead = readSync(fd, buf, 0, 24, 0);
30
+ if (bytesRead < 24)
31
+ return null;
32
+ // PNG magic header
33
+ if (buf[0] !== 0x89 || buf[1] !== 0x50 || buf[2] !== 0x4e || buf[3] !== 0x47 ||
34
+ buf[4] !== 0x0d || buf[5] !== 0x0a || buf[6] !== 0x1a || buf[7] !== 0x0a) {
35
+ return null;
36
+ }
37
+ // IHDR chunk type at bytes 12-15 ("IHDR")
38
+ if (buf[12] !== 0x49 || buf[13] !== 0x48 || buf[14] !== 0x44 || buf[15] !== 0x52) {
39
+ return null;
40
+ }
41
+ const width = buf.readUInt32BE(16);
42
+ const height = buf.readUInt32BE(20);
43
+ if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) {
44
+ return null;
45
+ }
46
+ return { width, height };
47
+ }
48
+ catch {
49
+ return null;
50
+ }
51
+ finally {
52
+ try {
53
+ closeSync(fd);
54
+ }
55
+ catch { /* ignore */ }
56
+ }
57
+ }
58
+ //# sourceMappingURL=png_dims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"png_dims.js","sourceRoot":"","sources":["../../src/runners/png_dims.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/D;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,EAAU,CAAC;IACf,IAAI,CAAC;QACH,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9C,IAAI,SAAS,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC;QAChC,mBAAmB;QACnB,IACE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI;YACxE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EACxE,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,0CAA0C;QAC1C,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;YACjF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;YACrF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * 0.1.50 H4 — single source of truth for the `project_dir` precedence
3
+ * ladder used across every CodeLoop tool handler.
4
+ *
5
+ * Photometry-DB E2E logs 2 / 7 surfaced the recurrence path:
6
+ * codeloop_capture_screenshot was called WITHOUT project_dir on a
7
+ * Cursor-launched MCP server whose cwd was C:\Users\<user>. The
8
+ * handler defaulted to `params.project_dir || params.workspace_root || projectDir`,
9
+ * `projectDir` resolved to the home folder, and screenshots ended
10
+ * up under C:\Users\<user>\artifacts\... — invisible to every
11
+ * subsequent gate_check / design_compare run that looked under
12
+ * the actual workspace.
13
+ *
14
+ * The fix: every capture / interact / record / replay handler runs
15
+ * the same ladder:
16
+ * 1. Explicit `params.project_dir`
17
+ * 2. Explicit `params.workspace_root` (alias)
18
+ * 3. Active recording session's project_dir (when one is in flight)
19
+ * 4. `process.env.CODELOOP_PROJECT_DIR` (the workspace pin)
20
+ * 5. Walked-up `.codeloop/config.json` ancestor of `defaultDir`
21
+ * (catches the case where the agent's cwd is a sub-folder)
22
+ * 6. `defaultDir` (the discovery-time projectDir from index.ts)
23
+ *
24
+ * Step 5 is the new bit — it walks UP from the supplied default to
25
+ * find the nearest ancestor with `.codeloop/config.json`. That way,
26
+ * even if the MCP server boots with a stale projectDir (e.g. the
27
+ * pin became invalid because the workspace was renamed), as long
28
+ * as the cwd lives under a real project root we still land on it.
29
+ *
30
+ * Step 6 is the existing behaviour — preserved so callers that
31
+ * pre-flight their inputs aren't surprised.
32
+ */
33
+ export interface ResolveProjectDirInput {
34
+ /** Explicit param from the tool call. */
35
+ project_dir?: string;
36
+ /** Alias for project_dir. */
37
+ workspace_root?: string;
38
+ /** Active recording project_dir, if known. */
39
+ recording_project_dir?: string;
40
+ /** The discovery-time projectDir to fall back to. */
41
+ default_dir: string;
42
+ }
43
+ /**
44
+ * Result of `resolveProjectDir` — includes the chosen path AND
45
+ * the source so callers can log it for diagnostic purposes.
46
+ */
47
+ export interface ResolvedProjectDir {
48
+ path: string;
49
+ source: "explicit" | "workspace_root" | "recording" | "env" | "walked_up" | "default";
50
+ }
51
+ /**
52
+ * Resolve the effective project_dir for a tool call using the H4
53
+ * precedence ladder. ALWAYS returns a non-empty path.
54
+ */
55
+ export declare function resolveProjectDir(input: ResolveProjectDirInput): ResolvedProjectDir;
56
+ /**
57
+ * Cheaper variant that returns just the path. Use when you don't
58
+ * care about the source (most callers).
59
+ */
60
+ export declare function resolveProjectDirPath(input: ResolveProjectDirInput): string;
61
+ /**
62
+ * Defensive guard — refuse paths that look like the user's home
63
+ * folder when we're about to scaffold side-effects (artifacts/,
64
+ * .codeloop/). Used by handlers that write to disk.
65
+ */
66
+ export declare function isLikelyHomeDir(p: string): boolean;
67
+ //# sourceMappingURL=resolve_project_dir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve_project_dir.d.ts","sourceRoot":"","sources":["../../src/runners/resolve_project_dir.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,WAAW,sBAAsB;IACrC,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,GAAG,gBAAgB,GAAG,WAAW,GAAG,KAAK,GAAG,WAAW,GAAG,SAAS,CAAC;CACvF;AA4BD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,kBAAkB,CAwBnF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAE3E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAMlD"}
@@ -0,0 +1,82 @@
1
+ import { existsSync, statSync } from "fs";
2
+ import { dirname, join, resolve } from "path";
3
+ import { homedir } from "os";
4
+ function looksLikeProjectRoot(p) {
5
+ if (!existsSync(p))
6
+ return false;
7
+ try {
8
+ return statSync(join(p, ".codeloop", "config.json")).isFile();
9
+ }
10
+ catch {
11
+ return false;
12
+ }
13
+ }
14
+ function walkUpForConfig(start, maxDepth = 8) {
15
+ // Walk up from `start` to find the nearest ancestor with
16
+ // .codeloop/config.json. Returns the ancestor path on hit, null
17
+ // otherwise. Bounded depth avoids ever walking past the home dir.
18
+ if (!start)
19
+ return null;
20
+ let cur = resolve(start);
21
+ let depth = 0;
22
+ while (depth < maxDepth) {
23
+ if (looksLikeProjectRoot(cur))
24
+ return cur;
25
+ const parent = dirname(cur);
26
+ if (!parent || parent === cur)
27
+ break;
28
+ cur = parent;
29
+ depth += 1;
30
+ }
31
+ return null;
32
+ }
33
+ /**
34
+ * Resolve the effective project_dir for a tool call using the H4
35
+ * precedence ladder. ALWAYS returns a non-empty path.
36
+ */
37
+ export function resolveProjectDir(input) {
38
+ if (input.project_dir && input.project_dir.length > 0) {
39
+ return { path: input.project_dir, source: "explicit" };
40
+ }
41
+ if (input.workspace_root && input.workspace_root.length > 0) {
42
+ return { path: input.workspace_root, source: "workspace_root" };
43
+ }
44
+ if (input.recording_project_dir && input.recording_project_dir.length > 0) {
45
+ return { path: input.recording_project_dir, source: "recording" };
46
+ }
47
+ const env = process.env.CODELOOP_PROJECT_DIR;
48
+ if (env && env.length > 0 && existsSync(env)) {
49
+ return { path: env, source: "env" };
50
+ }
51
+ const walked = walkUpForConfig(input.default_dir);
52
+ if (walked) {
53
+ // Only treat the walk-up result as authoritative if it differs
54
+ // from the default — otherwise we'd noisily relabel the default
55
+ // path as "walked_up".
56
+ if (resolve(walked) !== resolve(input.default_dir)) {
57
+ return { path: walked, source: "walked_up" };
58
+ }
59
+ }
60
+ return { path: input.default_dir, source: "default" };
61
+ }
62
+ /**
63
+ * Cheaper variant that returns just the path. Use when you don't
64
+ * care about the source (most callers).
65
+ */
66
+ export function resolveProjectDirPath(input) {
67
+ return resolveProjectDir(input).path;
68
+ }
69
+ /**
70
+ * Defensive guard — refuse paths that look like the user's home
71
+ * folder when we're about to scaffold side-effects (artifacts/,
72
+ * .codeloop/). Used by handlers that write to disk.
73
+ */
74
+ export function isLikelyHomeDir(p) {
75
+ try {
76
+ return resolve(p) === resolve(homedir());
77
+ }
78
+ catch {
79
+ return false;
80
+ }
81
+ }
82
+ //# sourceMappingURL=resolve_project_dir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve_project_dir.js","sourceRoot":"","sources":["../../src/runners/resolve_project_dir.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../src/runners/screenshot.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,MAAiB,EACxB,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CAsC3B;AA+UD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAMrD"}
1
+ {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../src/runners/screenshot.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,MAAiB,EACxB,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CAsC3B;AA8VD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAMrD"}
@@ -116,12 +116,21 @@ async function captureMacOS(outputPath, appName, options = {}) {
116
116
  // captures the entire screen, so what we just saved is almost
117
117
  // certainly the IDE / browser, not the app under test.
118
118
  if (!windowId && options.desktopAppMode) {
119
+ // 0.1.50 H8 — pull the structured diagnostic so the agent
120
+ // sees the candidate window titles and a concrete next_step
121
+ // instead of the bare "No window found" string.
122
+ const { findWindowIdDetailed } = await import("./window_manager.js");
123
+ const diagnostic = await findWindowIdDetailed(appName);
124
+ const tail = !diagnostic.found
125
+ ? ` Diagnostic: ${diagnostic.next_step}`
126
+ : "";
119
127
  return {
120
128
  captured: false,
121
129
  paths: [],
122
130
  method: "refused",
123
131
  error: `No window found for app "${appName}" — screencapture would have fallen back to a full-screen capture, ` +
124
- `which is not valid evidence for a desktop-app project. Launch the app first (or grant Screen Recording permission if the window exists but can't be enumerated), then retry.`,
132
+ `which is not valid evidence for a desktop-app project. Launch the app first (or grant Screen Recording permission if the window exists but can't be enumerated), then retry.` +
133
+ tail,
125
134
  };
126
135
  }
127
136
  return { captured: true, paths: [outputPath], method: `screencapture (app "${appName}" brought to front, then restored)${hint}` };
@@ -240,6 +249,12 @@ $graphics.Dispose(); $bitmap.Dispose()
240
249
  const tail = options.desktopAppMode
241
250
  ? " (Desktop-app verify mode is enabled via evidence.target_app — this is treated as a verify-blocker, not a soft warning.)"
242
251
  : "";
252
+ // 0.1.50 H8 — surface the structured diagnostic so the agent
253
+ // sees process-name + window-title candidates rather than
254
+ // having to guess what to set evidence.target_app to.
255
+ const { findWindowIdDetailed } = await import("./window_manager.js");
256
+ const diagnostic = await findWindowIdDetailed(appName);
257
+ const diagTail = !diagnostic.found ? ` Diagnostic: ${diagnostic.next_step}` : "";
243
258
  return {
244
259
  captured: false,
245
260
  paths: [],
@@ -248,7 +263,7 @@ $graphics.Dispose(); $bitmap.Dispose()
248
263
  `(e.g. \`Start-Process "<path-to-${appName}.exe>"\`), wait for the ` +
249
264
  `main window to appear, then retry. Do NOT continue with the ` +
250
265
  `verification loop — a screenshot of the IDE / browser is not ` +
251
- `valid evidence of the app under test.` + tail,
266
+ `valid evidence of the app under test.` + tail + diagTail,
252
267
  };
253
268
  }
254
269
  if (result.exit_code === 0 && existsSync(outputPath)) {
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/runners/screenshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/runners/screenshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * 0.1.50 H1 — convert text / role / automation_id selectors to (x, y)
3
+ * coordinates by walking the UIA tree from the named app's main window.
4
+ *
5
+ * Photometry-DB E2E 8 surfaced the recurrence path:
6
+ * codeloop_interact { action: "click", text: "Luminaire Photometric Data" }
7
+ * → click at (undefined, undefined)
8
+ * because the desktop click branch only resolved coords from raw x/y or
9
+ * through `automateElement` (Invoke/Toggle/Value patterns). Many WPF
10
+ * controls — notably tab headers, list-box items, and content elements
11
+ * inside a custom DataTemplate — don't expose Invoke; the agent has to
12
+ * land an actual mouse-click on the rendered region.
13
+ *
14
+ * This module bridges the gap: take a logical selector (AutomationId,
15
+ * Name, or ControlType.ProgrammaticName) and return the centre of the
16
+ * matching element's BoundingRectangle. The caller then routes through
17
+ * the existing `clickAtPosition` / `translateXY` plumbing so DPI scaling
18
+ * and window-origin offsets work unchanged.
19
+ */
20
+ export interface UIAResolveOptions {
21
+ appName: string;
22
+ /** AutomationId (highest priority — most stable identifier). */
23
+ automationId?: string;
24
+ /** Name property — the visible text or accessibility name. */
25
+ text?: string;
26
+ /**
27
+ * ControlType.ProgrammaticName (e.g. `ControlType.Button`,
28
+ * `ControlType.TabItem`). Use as a last resort when neither
29
+ * AutomationId nor Name is specific enough.
30
+ */
31
+ role?: string;
32
+ }
33
+ export interface UIAResolveResult {
34
+ found: boolean;
35
+ x?: number;
36
+ y?: number;
37
+ /** Which property actually matched. Useful for debugging. */
38
+ foundBy?: "AutomationId" | "Name-exact" | "Name-contains" | "ControlType";
39
+ /** Bounding rect in screen pixels (helpful for diagnostics). */
40
+ bounds?: {
41
+ x: number;
42
+ y: number;
43
+ width: number;
44
+ height: number;
45
+ };
46
+ reason?: string;
47
+ }
48
+ /**
49
+ * Walks the UIA tree under the named app window and returns the
50
+ * centre of the FIRST element matching (in priority order):
51
+ * 1. AutomationId exact (the most stable identifier)
52
+ * 2. Name property exact
53
+ * 3. Name property substring (helps when the agent passes a
54
+ * readable label like "Luminaire Photometric Data" that is
55
+ * actually the visible text of a wider control whose Name
56
+ * includes additional context)
57
+ * 4. ControlType.ProgrammaticName
58
+ *
59
+ * Returns `{ found: false, reason }` on any failure path so the
60
+ * caller can log a structured error and fall through to other
61
+ * strategies (e.g. raw coord click).
62
+ */
63
+ export declare function resolveSelectorToXY(opts: UIAResolveOptions): Promise<UIAResolveResult>;
64
+ /**
65
+ * Test-only helper exporting the script body so unit tests can pin
66
+ * the priority ordering (AutomationId > Name-exact > Name-contains >
67
+ * ControlType) without needing a live Windows host.
68
+ */
69
+ export declare function buildResolveScriptForTest(opts: UIAResolveOptions): string;
70
+ //# sourceMappingURL=uia_resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uia_resolver.d.ts","sourceRoot":"","sources":["../../src/runners/uia_resolver.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,6DAA6D;IAC7D,OAAO,CAAC,EAAE,cAAc,GAAG,YAAY,GAAG,eAAe,GAAG,aAAa,CAAC;IAC1E,gEAAgE;IAChE,MAAM,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmL5F;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAQzE"}