@beeos-ai/device-mcp-server 0.2.3

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 (62) hide show
  1. package/LICENSE +201 -0
  2. package/dist/backends/android-adb-runner.d.ts +32 -0
  3. package/dist/backends/android-adb-runner.js +15 -0
  4. package/dist/backends/android-adb-runner.js.map +1 -0
  5. package/dist/backends/android-adb.d.ts +153 -0
  6. package/dist/backends/android-adb.js +723 -0
  7. package/dist/backends/android-adb.js.map +1 -0
  8. package/dist/backends/base.d.ts +150 -0
  9. package/dist/backends/base.js +116 -0
  10. package/dist/backends/base.js.map +1 -0
  11. package/dist/backends/desktop.d.ts +62 -0
  12. package/dist/backends/desktop.js +176 -0
  13. package/dist/backends/desktop.js.map +1 -0
  14. package/dist/backends/index.d.ts +63 -0
  15. package/dist/backends/index.js +105 -0
  16. package/dist/backends/index.js.map +1 -0
  17. package/dist/backends/linux.d.ts +69 -0
  18. package/dist/backends/linux.js +230 -0
  19. package/dist/backends/linux.js.map +1 -0
  20. package/dist/backends/mac.d.ts +154 -0
  21. package/dist/backends/mac.js +881 -0
  22. package/dist/backends/mac.js.map +1 -0
  23. package/dist/backends/stubs/ios.d.ts +17 -0
  24. package/dist/backends/stubs/ios.js +32 -0
  25. package/dist/backends/stubs/ios.js.map +1 -0
  26. package/dist/backends/stubs/macos.d.ts +13 -0
  27. package/dist/backends/stubs/macos.js +27 -0
  28. package/dist/backends/stubs/macos.js.map +1 -0
  29. package/dist/backends/stubs/windows.d.ts +69 -0
  30. package/dist/backends/stubs/windows.js +191 -0
  31. package/dist/backends/stubs/windows.js.map +1 -0
  32. package/dist/cli.d.ts +37 -0
  33. package/dist/cli.js +177 -0
  34. package/dist/cli.js.map +1 -0
  35. package/dist/index.d.ts +13 -0
  36. package/dist/index.js +14 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/server/action-mapping.d.ts +21 -0
  39. package/dist/server/action-mapping.js +153 -0
  40. package/dist/server/action-mapping.js.map +1 -0
  41. package/dist/server/app.d.ts +23 -0
  42. package/dist/server/app.js +157 -0
  43. package/dist/server/app.js.map +1 -0
  44. package/dist/server/tool-registry.d.ts +50 -0
  45. package/dist/server/tool-registry.js +504 -0
  46. package/dist/server/tool-registry.js.map +1 -0
  47. package/dist/util/adb-files.d.ts +92 -0
  48. package/dist/util/adb-files.js +221 -0
  49. package/dist/util/adb-files.js.map +1 -0
  50. package/dist/util/adb-shell.d.ts +80 -0
  51. package/dist/util/adb-shell.js +102 -0
  52. package/dist/util/adb-shell.js.map +1 -0
  53. package/dist/util/android-apps.d.ts +10 -0
  54. package/dist/util/android-apps.js +103 -0
  55. package/dist/util/android-apps.js.map +1 -0
  56. package/dist/util/image-dim.d.ts +27 -0
  57. package/dist/util/image-dim.js +37 -0
  58. package/dist/util/image-dim.js.map +1 -0
  59. package/dist/util/ui-xml.d.ts +20 -0
  60. package/dist/util/ui-xml.js +184 -0
  61. package/dist/util/ui-xml.js.map +1 -0
  62. package/package.json +56 -0
@@ -0,0 +1,184 @@
1
+ /**
2
+ * Android uiautomator XML parser + compact LLM-ready formatter.
3
+ *
4
+ * Lifted from the legacy `device-agent/src/device/ui-xml.ts`. Used by the
5
+ * `ui_dump` MCP tool when the caller passes `query` (server-side filtering
6
+ * keeps the wire payload small).
7
+ *
8
+ * Pure data — no IO, no logging, safe to call inside hot paths.
9
+ */
10
+ /**
11
+ * Format raw uiautomator XML as a compact one-line-per-node summary suitable
12
+ * for VLM prompts.
13
+ */
14
+ export function formatUiXmlToolOutput(xml, query) {
15
+ const root = parseXmlTree(xml);
16
+ if (!root)
17
+ return "Failed to parse UI XML";
18
+ const nodes = collectNodes(root);
19
+ const filtered = query ? filterNodes(nodes, query) : nodes;
20
+ if (filtered.length === 0) {
21
+ return query ? `No elements found matching "${query}"` : "No interactive elements found";
22
+ }
23
+ return filtered.map(formatNode).join("\n");
24
+ }
25
+ /**
26
+ * Parse XML and return the structured `UiNode` list (for programmatic use,
27
+ * e.g. ACP `device/ui-tree`).
28
+ */
29
+ export function searchUiXmlNodes(xml, query) {
30
+ const root = parseXmlTree(xml);
31
+ if (!root)
32
+ return [];
33
+ const nodes = collectNodes(root);
34
+ const filtered = query ? filterNodes(nodes, query) : nodes;
35
+ return filtered.map(treeNodeToUiNode);
36
+ }
37
+ function parseXmlTree(xml) {
38
+ const re = /<(\/?)node(\s[^>]*)?(\/?)>/g;
39
+ let m;
40
+ const dummy = makeNode("");
41
+ const stack = [dummy];
42
+ while ((m = re.exec(xml)) !== null) {
43
+ const isClose = m[1] === "/";
44
+ const isSelf = m[3] === "/";
45
+ const attrs = m[2] ?? "";
46
+ if (isClose) {
47
+ if (stack.length > 1)
48
+ stack.pop();
49
+ }
50
+ else {
51
+ const node = makeNode(attrs);
52
+ const parent = stack[stack.length - 1];
53
+ node.parent = parent;
54
+ parent.children.push(node);
55
+ if (!isSelf)
56
+ stack.push(node);
57
+ }
58
+ }
59
+ return dummy.children[0] ?? null;
60
+ }
61
+ function makeNode(attrs) {
62
+ const bounds = attr(attrs, "bounds");
63
+ return {
64
+ text: attr(attrs, "text"),
65
+ contentDesc: attr(attrs, "content-desc"),
66
+ resourceId: attr(attrs, "resource-id"),
67
+ className: attr(attrs, "class"),
68
+ bounds,
69
+ clickable: attr(attrs, "clickable") === "true",
70
+ longClickable: attr(attrs, "long-clickable") === "true",
71
+ scrollable: attr(attrs, "scrollable") === "true",
72
+ focusable: attr(attrs, "focusable") === "true",
73
+ enabled: attr(attrs, "enabled") !== "false",
74
+ center: boundsCenter(bounds),
75
+ children: [],
76
+ };
77
+ }
78
+ function attr(attrs, name) {
79
+ return attrs.match(new RegExp(`${name}="([^"]*)"`, "i"))?.[1] ?? "";
80
+ }
81
+ function boundsCenter(bounds) {
82
+ const m = bounds.match(/\[(\d+),(\d+)\]\[(\d+),(\d+)\]/);
83
+ if (!m)
84
+ return { x: 0, y: 0 };
85
+ return { x: Math.round((+m[1] + +m[3]) / 2), y: Math.round((+m[2] + +m[4]) / 2) };
86
+ }
87
+ /* -------------------------------------------------------------------------- */
88
+ /* Node selection / filtering / formatting */
89
+ /* -------------------------------------------------------------------------- */
90
+ function isInteractive(n) {
91
+ return n.enabled && (n.clickable || n.longClickable || n.scrollable || n.focusable);
92
+ }
93
+ function hasInteractiveAncestor(n) {
94
+ let p = n.parent;
95
+ while (p) {
96
+ if (isInteractive(p))
97
+ return true;
98
+ p = p.parent;
99
+ }
100
+ return false;
101
+ }
102
+ function displayText(n) {
103
+ return n.text || n.contentDesc;
104
+ }
105
+ function collectNodes(root) {
106
+ const result = [];
107
+ function walk(n) {
108
+ if (!n.enabled)
109
+ return;
110
+ if (isInteractive(n)) {
111
+ result.push(n);
112
+ }
113
+ else if (displayText(n) && !hasInteractiveAncestor(n)) {
114
+ result.push(n);
115
+ }
116
+ for (const child of n.children)
117
+ walk(child);
118
+ }
119
+ walk(root);
120
+ return result;
121
+ }
122
+ function filterNodes(nodes, query) {
123
+ const q = query.toLowerCase();
124
+ return nodes.filter((n) => n.text.toLowerCase().includes(q) ||
125
+ n.contentDesc.toLowerCase().includes(q) ||
126
+ n.resourceId.toLowerCase().includes(q) ||
127
+ n.className.toLowerCase().includes(q));
128
+ }
129
+ const CLASS_SHORT = {
130
+ Button: "Btn",
131
+ ImageButton: "ImgBtn",
132
+ TextView: "Text",
133
+ EditText: "Edit",
134
+ ImageView: "Img",
135
+ CheckBox: "Check",
136
+ Switch: "Switch",
137
+ RadioButton: "Radio",
138
+ ListView: "List",
139
+ RecyclerView: "List",
140
+ ScrollView: "Scroll",
141
+ HorizontalScrollView: "HScroll",
142
+ ViewPager: "Pager",
143
+ WebView: "Web",
144
+ FrameLayout: "Frame",
145
+ LinearLayout: "Layout",
146
+ RelativeLayout: "Layout",
147
+ ConstraintLayout: "Layout",
148
+ };
149
+ function shortClass(cls) {
150
+ const base = cls.split(".").pop() ?? cls;
151
+ return CLASS_SHORT[base] ?? base;
152
+ }
153
+ function formatNode(n) {
154
+ const parts = [];
155
+ parts.push(`(${n.center.x},${n.center.y})`);
156
+ parts.push(shortClass(n.className));
157
+ const label = displayText(n);
158
+ if (label)
159
+ parts.push(`"${label}"`);
160
+ if (n.resourceId)
161
+ parts.push(`id=${n.resourceId}`);
162
+ if (n.clickable)
163
+ parts.push("*click");
164
+ if (n.longClickable)
165
+ parts.push("*lclick");
166
+ if (n.scrollable)
167
+ parts.push("*scroll");
168
+ if (n.focusable && !n.clickable)
169
+ parts.push("*focus");
170
+ return parts.join(" ");
171
+ }
172
+ function treeNodeToUiNode(n) {
173
+ return {
174
+ text: n.text,
175
+ resourceId: n.resourceId,
176
+ contentDesc: n.contentDesc,
177
+ className: n.className,
178
+ bounds: n.bounds,
179
+ center: n.center,
180
+ clickable: n.clickable,
181
+ enabled: n.enabled,
182
+ };
183
+ }
184
+ //# sourceMappingURL=ui-xml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-xml.js","sourceRoot":"","sources":["../../src/util/ui-xml.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "@beeos-ai/device-mcp-server",
3
+ "version": "0.2.3",
4
+ "description": "In-pod HTTP MCP tool server for BeeOS device-agent (Android / desktop / mobile sandboxes).",
5
+ "license": "Apache-2.0",
6
+ "type": "module",
7
+ "main": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ },
14
+ "./backends": {
15
+ "types": "./dist/backends/index.d.ts",
16
+ "import": "./dist/backends/index.js"
17
+ },
18
+ "./server": {
19
+ "types": "./dist/server/index.d.ts",
20
+ "import": "./dist/server/index.js"
21
+ }
22
+ },
23
+ "bin": {
24
+ "device-mcp-server": "dist/cli.js"
25
+ },
26
+ "files": [
27
+ "dist",
28
+ "README.md"
29
+ ],
30
+ "publishConfig": {
31
+ "access": "public"
32
+ },
33
+ "engines": {
34
+ "node": ">=20"
35
+ },
36
+ "dependencies": {
37
+ "fastify": "^5.8.5",
38
+ "pino": "^10.3.1",
39
+ "sharp": "^0.34.5",
40
+ "zod": "^4.3.6",
41
+ "@beeos-ai/device-common": "0.2.1"
42
+ },
43
+ "devDependencies": {
44
+ "@types/node": "^22.0.0",
45
+ "tsx": "^4.19.0",
46
+ "typescript": "^5.8.0",
47
+ "vitest": "^4.1.5"
48
+ },
49
+ "scripts": {
50
+ "build": "tsc -p tsconfig.json && chmod +x dist/cli.js",
51
+ "start": "tsx src/cli.ts",
52
+ "dev": "tsx --watch src/cli.ts",
53
+ "test": "vitest run",
54
+ "test:watch": "vitest"
55
+ }
56
+ }