devlens-mcp 0.3.3 → 0.4.1

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 (121) hide show
  1. package/README.md +48 -38
  2. package/RELEASE_NOTES.md +253 -0
  3. package/dist/bin/cli.js +2 -0
  4. package/dist/bin/cli.js.map +1 -1
  5. package/dist/src/figma/figma-properties.d.ts +88 -0
  6. package/dist/src/figma/figma-properties.d.ts.map +1 -0
  7. package/dist/src/figma/figma-properties.js +121 -0
  8. package/dist/src/figma/figma-properties.js.map +1 -0
  9. package/dist/src/figma/figma-structure.d.ts +43 -0
  10. package/dist/src/figma/figma-structure.d.ts.map +1 -0
  11. package/dist/src/figma/figma-structure.js +74 -0
  12. package/dist/src/figma/figma-structure.js.map +1 -0
  13. package/dist/src/figma/figma-url.d.ts +37 -0
  14. package/dist/src/figma/figma-url.d.ts.map +1 -0
  15. package/dist/src/figma/figma-url.js +68 -0
  16. package/dist/src/figma/figma-url.js.map +1 -0
  17. package/dist/src/jds-tokens/resolve-token.d.ts +2 -0
  18. package/dist/src/jds-tokens/resolve-token.d.ts.map +1 -0
  19. package/dist/src/jds-tokens/resolve-token.js +24 -0
  20. package/dist/src/jds-tokens/resolve-token.js.map +1 -0
  21. package/dist/src/jds-tokens/tokens.d.ts +2 -0
  22. package/dist/src/jds-tokens/tokens.d.ts.map +1 -0
  23. package/dist/src/jds-tokens/tokens.js +12 -0
  24. package/dist/src/jds-tokens/tokens.js.map +1 -0
  25. package/dist/src/platform/ios/ios-device.d.ts +2 -0
  26. package/dist/src/platform/ios/ios-device.d.ts.map +1 -1
  27. package/dist/src/platform/ios/ios-device.js +18 -8
  28. package/dist/src/platform/ios/ios-device.js.map +1 -1
  29. package/dist/src/platform/ios/scale-resolver.d.ts +29 -0
  30. package/dist/src/platform/ios/scale-resolver.d.ts.map +1 -0
  31. package/dist/src/platform/ios/scale-resolver.js +114 -0
  32. package/dist/src/platform/ios/scale-resolver.js.map +1 -0
  33. package/dist/src/platform/ios/simctl.d.ts +5 -0
  34. package/dist/src/platform/ios/simctl.d.ts.map +1 -1
  35. package/dist/src/platform/ios/simctl.js +4 -0
  36. package/dist/src/platform/ios/simctl.js.map +1 -1
  37. package/dist/src/server.d.ts.map +1 -1
  38. package/dist/src/server.js +9 -1
  39. package/dist/src/server.js.map +1 -1
  40. package/dist/src/setup/config-patcher.d.ts +2 -0
  41. package/dist/src/setup/config-patcher.d.ts.map +1 -0
  42. package/dist/src/setup/config-patcher.js +128 -0
  43. package/dist/src/setup/config-patcher.js.map +1 -0
  44. package/dist/src/setup/shell-detector.d.ts +10 -0
  45. package/dist/src/setup/shell-detector.d.ts.map +1 -0
  46. package/dist/src/setup/shell-detector.js +72 -0
  47. package/dist/src/setup/shell-detector.js.map +1 -0
  48. package/dist/src/snapshot/device-properties.d.ts +53 -0
  49. package/dist/src/snapshot/device-properties.d.ts.map +1 -0
  50. package/dist/src/snapshot/device-properties.js +94 -0
  51. package/dist/src/snapshot/device-properties.js.map +1 -0
  52. package/dist/src/snapshot/formatter.d.ts +13 -5
  53. package/dist/src/snapshot/formatter.d.ts.map +1 -1
  54. package/dist/src/snapshot/formatter.js +28 -19
  55. package/dist/src/snapshot/formatter.js.map +1 -1
  56. package/dist/src/snapshot/layout-inference.d.ts +44 -0
  57. package/dist/src/snapshot/layout-inference.d.ts.map +1 -0
  58. package/dist/src/snapshot/layout-inference.js +138 -0
  59. package/dist/src/snapshot/layout-inference.js.map +1 -0
  60. package/dist/src/tools/analyze-tools.d.ts +60 -0
  61. package/dist/src/tools/analyze-tools.d.ts.map +1 -0
  62. package/dist/src/tools/analyze-tools.js +196 -0
  63. package/dist/src/tools/analyze-tools.js.map +1 -0
  64. package/dist/src/tools/interaction-tools.d.ts +6 -6
  65. package/dist/src/tools/interaction-tools.d.ts.map +1 -1
  66. package/dist/src/tools/interaction-tools.js +12 -2
  67. package/dist/src/tools/interaction-tools.js.map +1 -1
  68. package/dist/src/tools/metro-tools.d.ts +2 -2
  69. package/dist/src/tools/navigation-tools.d.ts.map +1 -1
  70. package/dist/src/tools/navigation-tools.js +6 -1
  71. package/dist/src/tools/navigation-tools.js.map +1 -1
  72. package/dist/src/tools/screenshot-tools.d.ts +75 -0
  73. package/dist/src/tools/screenshot-tools.d.ts.map +1 -1
  74. package/dist/src/tools/screenshot-tools.js +238 -8
  75. package/dist/src/tools/screenshot-tools.js.map +1 -1
  76. package/dist/src/tools/snapshot-tools.d.ts +15 -0
  77. package/dist/src/tools/snapshot-tools.d.ts.map +1 -1
  78. package/dist/src/tools/snapshot-tools.js +32 -1
  79. package/dist/src/tools/snapshot-tools.js.map +1 -1
  80. package/dist/src/tools/vqa-tools.d.ts +62 -0
  81. package/dist/src/tools/vqa-tools.d.ts.map +1 -0
  82. package/dist/src/tools/vqa-tools.js +204 -0
  83. package/dist/src/tools/vqa-tools.js.map +1 -0
  84. package/dist/src/utils/image-preprocess.d.ts +1 -1
  85. package/dist/src/utils/image-preprocess.d.ts.map +1 -1
  86. package/dist/src/utils/image-preprocess.js +79 -0
  87. package/dist/src/utils/image-preprocess.js.map +1 -1
  88. package/dist/src/visual/color-extractor.d.ts +37 -0
  89. package/dist/src/visual/color-extractor.d.ts.map +1 -0
  90. package/dist/src/visual/color-extractor.js +116 -0
  91. package/dist/src/visual/color-extractor.js.map +1 -0
  92. package/dist/src/visual/comparator.d.ts +21 -0
  93. package/dist/src/visual/comparator.d.ts.map +1 -1
  94. package/dist/src/visual/comparator.js +110 -13
  95. package/dist/src/visual/comparator.js.map +1 -1
  96. package/dist/src/visual/layout-analyzer.d.ts.map +1 -1
  97. package/dist/src/visual/layout-analyzer.js +17 -7
  98. package/dist/src/visual/layout-analyzer.js.map +1 -1
  99. package/dist/src/visual/node-matcher.d.ts +43 -0
  100. package/dist/src/visual/node-matcher.d.ts.map +1 -0
  101. package/dist/src/visual/node-matcher.js +190 -0
  102. package/dist/src/visual/node-matcher.js.map +1 -0
  103. package/dist/src/visual/property-comparator.d.ts +49 -0
  104. package/dist/src/visual/property-comparator.d.ts.map +1 -0
  105. package/dist/src/visual/property-comparator.js +246 -0
  106. package/dist/src/visual/property-comparator.js.map +1 -0
  107. package/dist/src/visual/structural-comparator.d.ts +46 -0
  108. package/dist/src/visual/structural-comparator.d.ts.map +1 -0
  109. package/dist/src/visual/structural-comparator.js +293 -0
  110. package/dist/src/visual/structural-comparator.js.map +1 -0
  111. package/dist/src/visual/vqa-analyzer.d.ts +30 -0
  112. package/dist/src/visual/vqa-analyzer.d.ts.map +1 -0
  113. package/dist/src/visual/vqa-analyzer.js +271 -0
  114. package/dist/src/visual/vqa-analyzer.js.map +1 -0
  115. package/docs/figma-workflow.md +210 -40
  116. package/docs/setup-guide.md +104 -40
  117. package/docs/tool-reference.md +137 -11
  118. package/package.json +1 -1
  119. package/tsconfig.json +1 -1
  120. package/INSTALLATION_GUIDE.md +0 -3
  121. package/QUICK_START.md +0 -3
@@ -1 +1 @@
1
- {"version":3,"file":"simctl.js","sourceRoot":"","sources":["../../../../src/platform/ios/simctl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"simctl.js","sourceRoot":"","sources":["../../../../src/platform/ios/simctl.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAuCnE,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAsHnD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AA+CnE,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAgInD"}
@@ -15,10 +15,12 @@ const screenshot_tools_js_1 = require("./tools/screenshot-tools.js");
15
15
  const app_tools_js_1 = require("./tools/app-tools.js");
16
16
  const metro_tools_js_1 = require("./tools/metro-tools.js");
17
17
  const navigation_tools_js_1 = require("./tools/navigation-tools.js");
18
+ const analyze_tools_js_1 = require("./tools/analyze-tools.js");
19
+ const vqa_tools_js_1 = require("./tools/vqa-tools.js");
18
20
  async function startServer() {
19
21
  const server = new index_js_1.Server({
20
22
  name: "devlens-mcp",
21
- version: "0.3.1",
23
+ version: "0.4.0",
22
24
  }, {
23
25
  capabilities: {
24
26
  tools: {},
@@ -39,6 +41,8 @@ async function startServer() {
39
41
  const appHandlers = (0, app_tools_js_1.createAppToolHandlers)(deviceManager);
40
42
  const metroHandlers = (0, metro_tools_js_1.createMetroToolHandlers)(metroPort, deviceManager);
41
43
  const navigationHandlers = (0, navigation_tools_js_1.createNavigationToolHandlers)(deviceManager, refRegistry, resetPreviousSnapshot);
44
+ const analyzeHandlers = (0, analyze_tools_js_1.createAnalyzeToolHandlers)(deviceManager, refRegistry, metroPort);
45
+ const vqaHandlers = (0, vqa_tools_js_1.createVqaToolHandlers)(deviceManager, refRegistry);
42
46
  // Merge all tool schemas
43
47
  const allSchemas = {
44
48
  ...ds_tools_js_1.dsToolSchemas,
@@ -49,6 +53,8 @@ async function startServer() {
49
53
  ...app_tools_js_1.appToolSchemas,
50
54
  ...metro_tools_js_1.metroToolSchemas,
51
55
  ...navigation_tools_js_1.navigationToolSchemas,
56
+ ...analyze_tools_js_1.analyzeToolSchemas,
57
+ ...vqa_tools_js_1.vqaToolSchemas,
52
58
  };
53
59
  // Merge all handlers
54
60
  const allHandlers = {
@@ -60,6 +66,8 @@ async function startServer() {
60
66
  ...appHandlers,
61
67
  ...metroHandlers,
62
68
  ...navigationHandlers,
69
+ ...analyzeHandlers,
70
+ ...vqaHandlers,
63
71
  };
64
72
  // Register tools/list handler
65
73
  server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function detectAndPatchConfig(): Promise<void>;
2
+ //# sourceMappingURL=config-patcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-patcher.d.ts","sourceRoot":"","sources":["../../../src/setup/config-patcher.ts"],"names":[],"mappings":"AAwJA,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuD1D"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectAndPatchConfig = detectAndPatchConfig;
4
+ const promises_1 = require("fs/promises");
5
+ const fs_1 = require("fs");
6
+ const path_1 = require("path");
7
+ const shell_detector_js_1 = require("./shell-detector.js");
8
+ const DEVLENS_SERVER_KEY = "devlens";
9
+ function getMcpConfigPaths() {
10
+ const home = process.env.HOME || process.env.USERPROFILE || "~";
11
+ return [
12
+ (0, path_1.resolve)(home, ".cursor", "mcp.json"),
13
+ (0, path_1.resolve)(home, "Library", "Application Support", "Claude", "claude_desktop_config.json"),
14
+ (0, path_1.resolve)(home, ".claude", "mcp.json"),
15
+ (0, path_1.resolve)(home, ".config", "claude", "mcp.json"),
16
+ ];
17
+ }
18
+ async function readMcpConfig(configPath) {
19
+ try {
20
+ const raw = await (0, promises_1.readFile)(configPath, "utf-8");
21
+ return JSON.parse(raw);
22
+ }
23
+ catch {
24
+ return null;
25
+ }
26
+ }
27
+ function hasShellStyleArgs(args) {
28
+ return args.some((a) => a === "-l" || a === "-c" || a === "-lc" || a === "-i");
29
+ }
30
+ function isNodeBinary(command) {
31
+ const name = (0, path_1.basename)(command);
32
+ return name === "node" || name === "npx";
33
+ }
34
+ function needsMiswiredCommandFix(entry) {
35
+ if (!isNodeBinary(entry.command))
36
+ return false;
37
+ if (!entry.args || entry.args.length === 0)
38
+ return false;
39
+ return hasShellStyleArgs(entry.args);
40
+ }
41
+ function needsShellPatch(entry, env) {
42
+ if (needsMiswiredCommandFix(entry))
43
+ return true;
44
+ const currentShell = (0, path_1.basename)(entry.command);
45
+ const isShellCommand = currentShell === "zsh" ||
46
+ currentShell === "bash" ||
47
+ currentShell === "fish" ||
48
+ currentShell === "sh";
49
+ if (!isShellCommand)
50
+ return false;
51
+ if (!(0, fs_1.existsSync)(entry.command))
52
+ return true;
53
+ if (entry.command !== env.shell)
54
+ return true;
55
+ return false;
56
+ }
57
+ function needsNodePathPatch(entry, env) {
58
+ if (!entry.args || entry.args.length === 0)
59
+ return false;
60
+ const argsStr = entry.args.join(" ");
61
+ const usesNpx = argsStr.includes("npx ");
62
+ const usesNode = argsStr.includes("node ");
63
+ if (usesNode && env.nodePath !== "node" && !argsStr.includes(env.nodePath)) {
64
+ return !(0, shell_detector_js_1.validateNodePath)(argsStr.match(/(\S+node)\s/)?.[1] || "node");
65
+ }
66
+ if (usesNpx && env.npxPath !== "npx" && !argsStr.includes(env.npxPath)) {
67
+ return !(0, shell_detector_js_1.validateNodePath)(argsStr.match(/(\S+npx)\s/)?.[1] || "npx");
68
+ }
69
+ return false;
70
+ }
71
+ function patchEntry(entry, env) {
72
+ const changes = [];
73
+ const patched = { ...entry, args: [...(entry.args || [])] };
74
+ if (needsShellPatch(entry, env)) {
75
+ const oldCmd = patched.command;
76
+ patched.command = env.shell;
77
+ changes.push(`command: "${oldCmd}" -> "${env.shell}"`);
78
+ }
79
+ if (needsNodePathPatch(entry, env)) {
80
+ patched.args = patched.args.map((arg) => {
81
+ let updated = arg;
82
+ updated = updated.replace(/(?:\/\S+\/)?npx\s/, `${env.npxPath} `);
83
+ updated = updated.replace(/(?:\/\S+\/)?node\s/, `${env.nodePath} `);
84
+ if (updated !== arg) {
85
+ changes.push(`args: "${arg}" -> "${updated}"`);
86
+ }
87
+ return updated;
88
+ });
89
+ }
90
+ return { entry: patched, changes };
91
+ }
92
+ async function detectAndPatchConfig() {
93
+ let env;
94
+ try {
95
+ env = await (0, shell_detector_js_1.detectShellEnvironment)();
96
+ }
97
+ catch (err) {
98
+ console.error(`[devlens] Shell detection failed: ${err.message}`);
99
+ return;
100
+ }
101
+ console.error(`[devlens] Detected shell: ${env.shell} | node: ${env.nodePath} | npx: ${env.npxPath}`);
102
+ const configPaths = getMcpConfigPaths();
103
+ const results = [];
104
+ for (const configPath of configPaths) {
105
+ if (!(0, fs_1.existsSync)(configPath))
106
+ continue;
107
+ const config = await readMcpConfig(configPath);
108
+ if (!config?.mcpServers?.[DEVLENS_SERVER_KEY])
109
+ continue;
110
+ const devlensEntry = config.mcpServers[DEVLENS_SERVER_KEY];
111
+ const { entry: patchedEntry, changes } = patchEntry(devlensEntry, env);
112
+ if (changes.length === 0) {
113
+ console.error(`[devlens] Config OK: ${configPath}`);
114
+ continue;
115
+ }
116
+ const backupPath = `${configPath}.bak`;
117
+ await (0, promises_1.copyFile)(configPath, backupPath);
118
+ console.error(`[devlens] Backup created: ${backupPath}`);
119
+ config.mcpServers[DEVLENS_SERVER_KEY] = patchedEntry;
120
+ await (0, promises_1.writeFile)(configPath, JSON.stringify(config, null, 2) + "\n");
121
+ results.push({ configPath, patched: true, changes });
122
+ console.error(`[devlens] Patched ${configPath}: ${changes.join(", ")}`);
123
+ }
124
+ if (results.length === 0) {
125
+ console.error("[devlens] All MCP configs are up to date.");
126
+ }
127
+ }
128
+ //# sourceMappingURL=config-patcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-patcher.js","sourceRoot":"","sources":["../../../src/setup/config-patcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface ShellEnvironment {
2
+ shell: string;
3
+ shellName: string;
4
+ rcFile: string;
5
+ nodePath: string;
6
+ npxPath: string;
7
+ }
8
+ export declare function detectShellEnvironment(): Promise<ShellEnvironment>;
9
+ export declare function validateNodePath(nodePath: string): boolean;
10
+ //# sourceMappingURL=shell-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-detector.d.ts","sourceRoot":"","sources":["../../../src/setup/shell-detector.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAqDD,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAoBxE;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1D"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectShellEnvironment = detectShellEnvironment;
4
+ exports.validateNodePath = validateNodePath;
5
+ const child_process_1 = require("child_process");
6
+ const util_1 = require("util");
7
+ const fs_1 = require("fs");
8
+ const path_1 = require("path");
9
+ const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
10
+ const RC_FILES = {
11
+ zsh: ".zshrc",
12
+ bash: ".bashrc",
13
+ fish: ".config/fish/config.fish",
14
+ sh: ".profile",
15
+ };
16
+ const COMMON_NODE_LOCATIONS = [
17
+ "/usr/local/bin/node",
18
+ "/opt/homebrew/bin/node",
19
+ "/usr/bin/node",
20
+ ];
21
+ const DYNAMIC_NODE_LOCATIONS = [
22
+ ".nvm/versions/node",
23
+ ".volta/bin/node",
24
+ ".fnm/node-versions",
25
+ ".nodenv/shims/node",
26
+ ".asdf/shims/node",
27
+ ];
28
+ async function execInLoginShell(shell, command) {
29
+ try {
30
+ const args = (0, path_1.basename)(shell) === "fish"
31
+ ? ["-l", "-c", command]
32
+ : ["-l", "-c", command];
33
+ const { stdout } = await execFileAsync(shell, args, { timeout: 10000 });
34
+ return stdout.trim();
35
+ }
36
+ catch {
37
+ return "";
38
+ }
39
+ }
40
+ function findNodeInKnownLocations(home) {
41
+ for (const loc of COMMON_NODE_LOCATIONS) {
42
+ if ((0, fs_1.existsSync)(loc))
43
+ return loc;
44
+ }
45
+ for (const rel of DYNAMIC_NODE_LOCATIONS) {
46
+ const full = (0, path_1.resolve)(home, rel);
47
+ if ((0, fs_1.existsSync)(full))
48
+ return full;
49
+ }
50
+ return null;
51
+ }
52
+ async function detectShellEnvironment() {
53
+ const home = process.env.HOME || process.env.USERPROFILE || "~";
54
+ const shell = process.env.SHELL || "/bin/zsh";
55
+ const shellName = (0, path_1.basename)(shell);
56
+ const rcFile = RC_FILES[shellName] || ".profile";
57
+ let nodePath = await execInLoginShell(shell, "which node");
58
+ let npxPath = await execInLoginShell(shell, "which npx");
59
+ if (!nodePath) {
60
+ nodePath = findNodeInKnownLocations(home) || "node";
61
+ }
62
+ if (!npxPath) {
63
+ const nodeDir = nodePath !== "node" ? (0, path_1.resolve)(nodePath, "..") : "";
64
+ const candidateNpx = nodeDir ? (0, path_1.resolve)(nodeDir, "npx") : "";
65
+ npxPath = candidateNpx && (0, fs_1.existsSync)(candidateNpx) ? candidateNpx : "npx";
66
+ }
67
+ return { shell, shellName, rcFile, nodePath, npxPath };
68
+ }
69
+ function validateNodePath(nodePath) {
70
+ return (0, fs_1.existsSync)(nodePath);
71
+ }
72
+ //# sourceMappingURL=shell-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-detector.js","sourceRoot":"","sources":["../../../src/setup/shell-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Extract comparable properties from device accessibility tree nodes.
3
+ * Combines SnapshotNode data with layout inference and optional
4
+ * screenshot-based color extraction.
5
+ */
6
+ import type { SnapshotNode } from "../platform/device.js";
7
+ export interface DeviceComponentProps {
8
+ ref: string;
9
+ type: string;
10
+ text?: string;
11
+ label?: string;
12
+ width: number;
13
+ height: number;
14
+ x: number;
15
+ y: number;
16
+ textMetrics?: {
17
+ content: string;
18
+ estimatedFontSize: number;
19
+ };
20
+ dominantColor?: {
21
+ r: number;
22
+ g: number;
23
+ b: number;
24
+ };
25
+ backgroundColor?: {
26
+ r: number;
27
+ g: number;
28
+ b: number;
29
+ };
30
+ layout?: {
31
+ direction: "row" | "column" | "stacked" | "wrap" | "unknown";
32
+ gap?: number;
33
+ padding?: {
34
+ top: number;
35
+ right: number;
36
+ bottom: number;
37
+ left: number;
38
+ };
39
+ isFullWidth: boolean;
40
+ };
41
+ children: DeviceComponentProps[];
42
+ }
43
+ /**
44
+ * Build DeviceComponentProps for a node and its children.
45
+ */
46
+ export declare function extractDeviceProperties(node: SnapshotNode, ref: string, nodeToRef: Map<SnapshotNode, string>, screenWidth: number, screenshotBuffer?: Buffer): Promise<DeviceComponentProps>;
47
+ /**
48
+ * Flatten a DeviceComponentProps tree into a list.
49
+ */
50
+ export declare function flattenDeviceTree(root: DeviceComponentProps, parentPath?: string): Array<DeviceComponentProps & {
51
+ path: string;
52
+ }>;
53
+ //# sourceMappingURL=device-properties.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-properties.d.ts","sourceRoot":"","sources":["../../../src/snapshot/device-properties.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAU1D,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IAGV,WAAW,CAAC,EAAE;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IAGF,aAAa,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,eAAe,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAGtD,MAAM,CAAC,EAAE;QACP,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;QAC7D,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QACvE,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IAEF,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,YAAY,EAClB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,EACpC,WAAW,EAAE,MAAM,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAwE/B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,oBAAoB,EAC1B,UAAU,SAAK,GACd,KAAK,CAAC,oBAAoB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAahD"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ /**
3
+ * Extract comparable properties from device accessibility tree nodes.
4
+ * Combines SnapshotNode data with layout inference and optional
5
+ * screenshot-based color extraction.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.extractDeviceProperties = extractDeviceProperties;
9
+ exports.flattenDeviceTree = flattenDeviceTree;
10
+ const layout_inference_js_1 = require("./layout-inference.js");
11
+ const color_extractor_js_1 = require("../visual/color-extractor.js");
12
+ /**
13
+ * Build DeviceComponentProps for a node and its children.
14
+ */
15
+ async function extractDeviceProperties(node, ref, nodeToRef, screenWidth, screenshotBuffer) {
16
+ const props = {
17
+ ref,
18
+ type: node.type,
19
+ text: node.text,
20
+ label: node.label,
21
+ width: node.bounds.width,
22
+ height: node.bounds.height,
23
+ x: node.bounds.x,
24
+ y: node.bounds.y,
25
+ children: [],
26
+ };
27
+ // Text metrics
28
+ const content = node.text || node.label;
29
+ if (content) {
30
+ const fontSize = (0, layout_inference_js_1.estimateFontSize)(node);
31
+ if (fontSize) {
32
+ props.textMetrics = { content, estimatedFontSize: fontSize };
33
+ }
34
+ }
35
+ // Layout inference
36
+ if (node.children.length >= 2) {
37
+ const direction = (0, layout_inference_js_1.inferLayoutDirection)(node);
38
+ const gap = direction === "row" || direction === "column"
39
+ ? (0, layout_inference_js_1.measureAverageGap)(node.children, direction)
40
+ : undefined;
41
+ const padding = direction === "row" || direction === "column"
42
+ ? (0, layout_inference_js_1.inferPadding)(node.bounds, node.children)
43
+ : undefined;
44
+ props.layout = {
45
+ direction,
46
+ gap,
47
+ padding: padding ?? undefined,
48
+ isFullWidth: (0, layout_inference_js_1.isFullWidth)(node.bounds, screenWidth),
49
+ };
50
+ }
51
+ // Color extraction from screenshot
52
+ if (screenshotBuffer && node.bounds.width > 4 && node.bounds.height > 4) {
53
+ try {
54
+ const colors = await (0, color_extractor_js_1.extractColorsFromRegion)(screenshotBuffer, {
55
+ left: Math.max(0, Math.round(node.bounds.x)),
56
+ top: Math.max(0, Math.round(node.bounds.y)),
57
+ width: Math.max(1, Math.round(node.bounds.width)),
58
+ height: Math.max(1, Math.round(node.bounds.height)),
59
+ });
60
+ if (colors.length > 0) {
61
+ props.dominantColor = { r: colors[0].r, g: colors[0].g, b: colors[0].b };
62
+ }
63
+ if (colors.length > 1) {
64
+ // Second most dominant is often the background
65
+ props.backgroundColor = { r: colors[1].r, g: colors[1].g, b: colors[1].b };
66
+ }
67
+ }
68
+ catch {
69
+ // Color extraction is optional — don't fail
70
+ }
71
+ }
72
+ // Recurse into children
73
+ for (const child of node.children) {
74
+ const childRef = nodeToRef.get(child) ?? "";
75
+ props.children.push(await extractDeviceProperties(child, childRef, nodeToRef, screenWidth, screenshotBuffer));
76
+ }
77
+ return props;
78
+ }
79
+ /**
80
+ * Flatten a DeviceComponentProps tree into a list.
81
+ */
82
+ function flattenDeviceTree(root, parentPath = "") {
83
+ const name = root.text || root.label || root.type;
84
+ const path = parentPath ? `${parentPath} > ${name}` : name;
85
+ const result = [];
86
+ if (root.width > 0 && root.height > 0) {
87
+ result.push({ ...root, path });
88
+ }
89
+ for (const child of root.children) {
90
+ result.push(...flattenDeviceTree(child, path));
91
+ }
92
+ return result;
93
+ }
94
+ //# sourceMappingURL=device-properties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-properties.js","sourceRoot":"","sources":["../../../src/snapshot/device-properties.ts"],"names":[],"mappings":"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"}
@@ -6,13 +6,21 @@ import type { SnapshotNode } from "../platform/device.js";
6
6
  * Output format (inspired by Playwright MCP):
7
7
  *
8
8
  * - FrameLayout
9
- * - LinearLayout
10
- * - TextView "Hello World" [ref=e1]
11
- * - Button "Submit" [ref=e2]
9
+ * - LinearLayout [390x200] [column gap=8] [full-width]
10
+ * - TextView "Hello World" [ref=e1] [~14px]
11
+ * - Button "Submit" [ref=e2] [350x44]
12
12
  * - EditText "Email" [ref=e3] [focused]
13
13
  * - RecyclerView [ref=e4]
14
14
  * - CardView
15
- * - TextView "Item 1" [ref=e5]
15
+ * - TextView "Item 1" [ref=e5] [~12px]
16
+ *
17
+ * When FormatContext is provided, layout annotations (size, direction,
18
+ * gap, full-width, font-size) are added to help the AI reason about
19
+ * spatial relationships.
16
20
  */
17
- export declare function formatSnapshot(root: SnapshotNode, nodeToRef: Map<SnapshotNode, string>): string;
21
+ export interface FormatContext {
22
+ screenWidth: number;
23
+ screenHeight: number;
24
+ }
25
+ export declare function formatSnapshot(root: SnapshotNode, nodeToRef: Map<SnapshotNode, string>, context?: FormatContext): string;
18
26
  //# sourceMappingURL=formatter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../../src/snapshot/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,YAAY,EAClB,SAAS,EAAE,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,GACnC,MAAM,CAIR"}
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../../src/snapshot/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG1D;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,YAAY,EAClB,SAAS,EAAE,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,EACpC,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAIR"}
@@ -1,27 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.formatSnapshot = formatSnapshot;
4
- /**
5
- * Formats a SnapshotNode tree into a YAML-like text representation
6
- * that LLMs can easily parse and reason about.
7
- *
8
- * Output format (inspired by Playwright MCP):
9
- *
10
- * - FrameLayout
11
- * - LinearLayout
12
- * - TextView "Hello World" [ref=e1]
13
- * - Button "Submit" [ref=e2]
14
- * - EditText "Email" [ref=e3] [focused]
15
- * - RecyclerView [ref=e4]
16
- * - CardView
17
- * - TextView "Item 1" [ref=e5]
18
- */
19
- function formatSnapshot(root, nodeToRef) {
4
+ const layout_inference_js_1 = require("./layout-inference.js");
5
+ function formatSnapshot(root, nodeToRef, context) {
20
6
  const lines = [];
21
- formatNode(root, nodeToRef, 0, lines);
7
+ formatNode(root, nodeToRef, 0, lines, context);
22
8
  return lines.join("\n");
23
9
  }
24
- function formatNode(node, nodeToRef, depth, lines) {
10
+ function formatNode(node, nodeToRef, depth, lines, context) {
25
11
  const indent = " ".repeat(depth);
26
12
  const parts = [];
27
13
  // Type
@@ -54,6 +40,29 @@ function formatNode(node, nodeToRef, depth, lines) {
54
40
  : node.resourceId;
55
41
  annotations.push(`id="${shortId}"`);
56
42
  }
43
+ // Layout annotations (only when context is provided and node has visible bounds)
44
+ if (context && node.bounds.width > 0 && node.bounds.height > 0) {
45
+ const layout = (0, layout_inference_js_1.analyzeLayout)(node, context.screenWidth);
46
+ // Size annotation for containers and interactive elements
47
+ if (node.children.length > 0 || node.interactive) {
48
+ annotations.push(`${node.bounds.width}x${node.bounds.height}`);
49
+ }
50
+ // Direction + gap for containers with multiple children
51
+ if (layout.direction !== "unknown" && node.children.length > 1) {
52
+ const dirStr = layout.gap != null
53
+ ? `${layout.direction} gap=${layout.gap}`
54
+ : layout.direction;
55
+ annotations.push(dirStr);
56
+ }
57
+ // Full-width flag
58
+ if (layout.isFullWidth) {
59
+ annotations.push("full-width");
60
+ }
61
+ // Font size estimate for text nodes
62
+ if (layout.estimatedFontSize && node.text) {
63
+ annotations.push(`~${layout.estimatedFontSize}px`);
64
+ }
65
+ }
57
66
  if (annotations.length > 0) {
58
67
  parts.push(`[${annotations.join("] [")}]`);
59
68
  }
@@ -65,7 +74,7 @@ function formatNode(node, nodeToRef, depth, lines) {
65
74
  }
66
75
  // Recurse into children
67
76
  for (const child of node.children) {
68
- formatNode(child, nodeToRef, depth + 1, lines);
77
+ formatNode(child, nodeToRef, depth + 1, lines, context);
69
78
  }
70
79
  }
71
80
  /** Check if any descendant has a ref assigned */
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../../src/snapshot/formatter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../../src/snapshot/formatter.ts"],"names":[],"mappings":"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"}