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.
- package/README.md +48 -38
- package/RELEASE_NOTES.md +253 -0
- package/dist/bin/cli.js +2 -0
- package/dist/bin/cli.js.map +1 -1
- package/dist/src/figma/figma-properties.d.ts +88 -0
- package/dist/src/figma/figma-properties.d.ts.map +1 -0
- package/dist/src/figma/figma-properties.js +121 -0
- package/dist/src/figma/figma-properties.js.map +1 -0
- package/dist/src/figma/figma-structure.d.ts +43 -0
- package/dist/src/figma/figma-structure.d.ts.map +1 -0
- package/dist/src/figma/figma-structure.js +74 -0
- package/dist/src/figma/figma-structure.js.map +1 -0
- package/dist/src/figma/figma-url.d.ts +37 -0
- package/dist/src/figma/figma-url.d.ts.map +1 -0
- package/dist/src/figma/figma-url.js +68 -0
- package/dist/src/figma/figma-url.js.map +1 -0
- package/dist/src/jds-tokens/resolve-token.d.ts +2 -0
- package/dist/src/jds-tokens/resolve-token.d.ts.map +1 -0
- package/dist/src/jds-tokens/resolve-token.js +24 -0
- package/dist/src/jds-tokens/resolve-token.js.map +1 -0
- package/dist/src/jds-tokens/tokens.d.ts +2 -0
- package/dist/src/jds-tokens/tokens.d.ts.map +1 -0
- package/dist/src/jds-tokens/tokens.js +12 -0
- package/dist/src/jds-tokens/tokens.js.map +1 -0
- package/dist/src/platform/ios/ios-device.d.ts +2 -0
- package/dist/src/platform/ios/ios-device.d.ts.map +1 -1
- package/dist/src/platform/ios/ios-device.js +18 -8
- package/dist/src/platform/ios/ios-device.js.map +1 -1
- package/dist/src/platform/ios/scale-resolver.d.ts +29 -0
- package/dist/src/platform/ios/scale-resolver.d.ts.map +1 -0
- package/dist/src/platform/ios/scale-resolver.js +114 -0
- package/dist/src/platform/ios/scale-resolver.js.map +1 -0
- package/dist/src/platform/ios/simctl.d.ts +5 -0
- package/dist/src/platform/ios/simctl.d.ts.map +1 -1
- package/dist/src/platform/ios/simctl.js +4 -0
- package/dist/src/platform/ios/simctl.js.map +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +9 -1
- package/dist/src/server.js.map +1 -1
- package/dist/src/setup/config-patcher.d.ts +2 -0
- package/dist/src/setup/config-patcher.d.ts.map +1 -0
- package/dist/src/setup/config-patcher.js +128 -0
- package/dist/src/setup/config-patcher.js.map +1 -0
- package/dist/src/setup/shell-detector.d.ts +10 -0
- package/dist/src/setup/shell-detector.d.ts.map +1 -0
- package/dist/src/setup/shell-detector.js +72 -0
- package/dist/src/setup/shell-detector.js.map +1 -0
- package/dist/src/snapshot/device-properties.d.ts +53 -0
- package/dist/src/snapshot/device-properties.d.ts.map +1 -0
- package/dist/src/snapshot/device-properties.js +94 -0
- package/dist/src/snapshot/device-properties.js.map +1 -0
- package/dist/src/snapshot/formatter.d.ts +13 -5
- package/dist/src/snapshot/formatter.d.ts.map +1 -1
- package/dist/src/snapshot/formatter.js +28 -19
- package/dist/src/snapshot/formatter.js.map +1 -1
- package/dist/src/snapshot/layout-inference.d.ts +44 -0
- package/dist/src/snapshot/layout-inference.d.ts.map +1 -0
- package/dist/src/snapshot/layout-inference.js +138 -0
- package/dist/src/snapshot/layout-inference.js.map +1 -0
- package/dist/src/tools/analyze-tools.d.ts +60 -0
- package/dist/src/tools/analyze-tools.d.ts.map +1 -0
- package/dist/src/tools/analyze-tools.js +196 -0
- package/dist/src/tools/analyze-tools.js.map +1 -0
- package/dist/src/tools/interaction-tools.d.ts +6 -6
- package/dist/src/tools/interaction-tools.d.ts.map +1 -1
- package/dist/src/tools/interaction-tools.js +12 -2
- package/dist/src/tools/interaction-tools.js.map +1 -1
- package/dist/src/tools/metro-tools.d.ts +2 -2
- package/dist/src/tools/navigation-tools.d.ts.map +1 -1
- package/dist/src/tools/navigation-tools.js +6 -1
- package/dist/src/tools/navigation-tools.js.map +1 -1
- package/dist/src/tools/screenshot-tools.d.ts +75 -0
- package/dist/src/tools/screenshot-tools.d.ts.map +1 -1
- package/dist/src/tools/screenshot-tools.js +238 -8
- package/dist/src/tools/screenshot-tools.js.map +1 -1
- package/dist/src/tools/snapshot-tools.d.ts +15 -0
- package/dist/src/tools/snapshot-tools.d.ts.map +1 -1
- package/dist/src/tools/snapshot-tools.js +32 -1
- package/dist/src/tools/snapshot-tools.js.map +1 -1
- package/dist/src/tools/vqa-tools.d.ts +62 -0
- package/dist/src/tools/vqa-tools.d.ts.map +1 -0
- package/dist/src/tools/vqa-tools.js +204 -0
- package/dist/src/tools/vqa-tools.js.map +1 -0
- package/dist/src/utils/image-preprocess.d.ts +1 -1
- package/dist/src/utils/image-preprocess.d.ts.map +1 -1
- package/dist/src/utils/image-preprocess.js +79 -0
- package/dist/src/utils/image-preprocess.js.map +1 -1
- package/dist/src/visual/color-extractor.d.ts +37 -0
- package/dist/src/visual/color-extractor.d.ts.map +1 -0
- package/dist/src/visual/color-extractor.js +116 -0
- package/dist/src/visual/color-extractor.js.map +1 -0
- package/dist/src/visual/comparator.d.ts +21 -0
- package/dist/src/visual/comparator.d.ts.map +1 -1
- package/dist/src/visual/comparator.js +110 -13
- package/dist/src/visual/comparator.js.map +1 -1
- package/dist/src/visual/layout-analyzer.d.ts.map +1 -1
- package/dist/src/visual/layout-analyzer.js +17 -7
- package/dist/src/visual/layout-analyzer.js.map +1 -1
- package/dist/src/visual/node-matcher.d.ts +43 -0
- package/dist/src/visual/node-matcher.d.ts.map +1 -0
- package/dist/src/visual/node-matcher.js +190 -0
- package/dist/src/visual/node-matcher.js.map +1 -0
- package/dist/src/visual/property-comparator.d.ts +49 -0
- package/dist/src/visual/property-comparator.d.ts.map +1 -0
- package/dist/src/visual/property-comparator.js +246 -0
- package/dist/src/visual/property-comparator.js.map +1 -0
- package/dist/src/visual/structural-comparator.d.ts +46 -0
- package/dist/src/visual/structural-comparator.d.ts.map +1 -0
- package/dist/src/visual/structural-comparator.js +293 -0
- package/dist/src/visual/structural-comparator.js.map +1 -0
- package/dist/src/visual/vqa-analyzer.d.ts +30 -0
- package/dist/src/visual/vqa-analyzer.d.ts.map +1 -0
- package/dist/src/visual/vqa-analyzer.js +271 -0
- package/dist/src/visual/vqa-analyzer.js.map +1 -0
- package/docs/figma-workflow.md +210 -40
- package/docs/setup-guide.md +104 -40
- package/docs/tool-reference.md +137 -11
- package/package.json +1 -1
- package/tsconfig.json +1 -1
- package/INSTALLATION_GUIDE.md +0 -3
- 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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"}
|
package/dist/src/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;
|
|
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"}
|
package/dist/src/server.js
CHANGED
|
@@ -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.
|
|
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 () => {
|
package/dist/src/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
|
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;
|
|
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
|
-
|
|
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":";;
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../../src/snapshot/formatter.ts"],"names":[],"mappings":"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"}
|