@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 @@
1
+ {"version":3,"file":"mac.js","sourceRoot":"","sources":["../../src/backends/mac.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * IosBackend — stub backend reserved for iOS automation via WebDriverAgent /
3
+ * libimobiledevice. Declares only `device_info` so the health check has
4
+ * something to report; every other MCP tool is filtered out at the
5
+ * registry level (`backend.tools.has(name)` returns false) instead of
6
+ * advertising-then-throwing `unsupported`. `info()` / `screenSize()`
7
+ * still return placeholders so health checks don't crash.
8
+ */
9
+ import type { DeviceInfo } from "@beeos-ai/device-common";
10
+ import { BaseSandboxBackend, type ScreenSize, type ScreenshotOutput } from "../base.js";
11
+ export declare class IosBackend extends BaseSandboxBackend {
12
+ readonly os: "ios";
13
+ readonly tools: ReadonlySet<string>;
14
+ info(): Promise<DeviceInfo>;
15
+ screenshot(): Promise<ScreenshotOutput>;
16
+ screenSize(): Promise<ScreenSize>;
17
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * IosBackend — stub backend reserved for iOS automation via WebDriverAgent /
3
+ * libimobiledevice. Declares only `device_info` so the health check has
4
+ * something to report; every other MCP tool is filtered out at the
5
+ * registry level (`backend.tools.has(name)` returns false) instead of
6
+ * advertising-then-throwing `unsupported`. `info()` / `screenSize()`
7
+ * still return placeholders so health checks don't crash.
8
+ */
9
+ import { BaseSandboxBackend, } from "../base.js";
10
+ const IOS_STUB_TOOLS = new Set(["device_info"]);
11
+ export class IosBackend extends BaseSandboxBackend {
12
+ os = "ios";
13
+ tools = IOS_STUB_TOOLS;
14
+ async info() {
15
+ return {
16
+ type: this.os,
17
+ name: "iOS (stub)",
18
+ os: "iOS",
19
+ width: 1170,
20
+ height: 2532,
21
+ capabilities: [],
22
+ metadata: { stub: "true" },
23
+ };
24
+ }
25
+ screenshot() {
26
+ return this.unsupported("screenshot");
27
+ }
28
+ async screenSize() {
29
+ return { w: 1170, h: 2532 };
30
+ }
31
+ }
32
+ //# sourceMappingURL=ios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ios.js","sourceRoot":"","sources":["../../../src/backends/stubs/ios.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EACL,kBAAkB,GAGnB,MAAM,YAAY,CAAC;AAEpB,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAS,CAAC,aAAa,CAAC,CAAC,CAAC;AAE7E,MAAM,OAAO,UAAW,SAAQ,kBAAkB;IACvC,EAAE,GAAG,KAAc,CAAC;IACX,KAAK,GAAG,cAAc,CAAC;IAEzC,KAAK,CAAC,IAAI;QACR,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,EAAE;YACb,IAAI,EAAE,YAAY;YAClB,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;YACZ,YAAY,EAAE,EAAE;YAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;SAC3B,CAAC;IACJ,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * MacOsBackend — stub backend reserved for native macOS automation (Accessibility
3
+ * API / `osascript`). All verbs throw `DeviceError("unsupported")` until the
4
+ * concrete implementation lands.
5
+ */
6
+ import type { DeviceInfo } from "@beeos-ai/device-common";
7
+ import { BaseSandboxBackend, type BackendFamily, type ScreenSize } from "../base.js";
8
+ export declare class MacOsBackend extends BaseSandboxBackend {
9
+ readonly family: BackendFamily;
10
+ info(): Promise<DeviceInfo>;
11
+ screenshot(): Promise<Buffer>;
12
+ screenSize(): Promise<ScreenSize>;
13
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * MacOsBackend — stub backend reserved for native macOS automation (Accessibility
3
+ * API / `osascript`). All verbs throw `DeviceError("unsupported")` until the
4
+ * concrete implementation lands.
5
+ */
6
+ import { BaseSandboxBackend } from "../base.js";
7
+ export class MacOsBackend extends BaseSandboxBackend {
8
+ family = "desktop-macos";
9
+ async info() {
10
+ return {
11
+ type: this.family,
12
+ name: "macOS (stub)",
13
+ os: "macOS",
14
+ width: 2560,
15
+ height: 1440,
16
+ capabilities: [],
17
+ metadata: { stub: "true" },
18
+ };
19
+ }
20
+ screenshot() {
21
+ return this.unsupported("screenshot");
22
+ }
23
+ async screenSize() {
24
+ return { w: 2560, h: 1440 };
25
+ }
26
+ }
27
+ //# sourceMappingURL=macos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"macos.js","sourceRoot":"","sources":["../../../src/backends/stubs/macos.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,kBAAkB,EAAuC,MAAM,YAAY,CAAC;AAErF,MAAM,OAAO,YAAa,SAAQ,kBAAkB;IACzC,MAAM,GAAkB,eAAe,CAAC;IAEjD,KAAK,CAAC,IAAI;QACR,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,MAAM;YACjB,IAAI,EAAE,cAAc;YACpB,EAAE,EAAE,OAAO;YACX,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;YACZ,YAAY,EAAE,EAAE;YAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;SAC3B,CAAC;IACJ,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * WindowsBackend — minimal `SandboxBackend` driving a real Windows host.
3
+ *
4
+ * Scope (v0.2.0 stub): only `screenshot` / `screen_size` / `device_info` /
5
+ * `execute_command` are implemented natively. Everything else
6
+ * (pointer / keyboard / navigation / filesystem / app-management /
7
+ * package-install / accessibility) is **deliberately not in
8
+ * `WINDOWS_STUB_TOOLS`** so the MCP tool registry filters those tools out
9
+ * at `/mcp/tools/list` and `/mcp/tools/call` returns 404 — agents see
10
+ * exactly the verbs the backend can actually execute, no runtime
11
+ * "unsupported" surprises after picking a tool out of the advertised
12
+ * list.
13
+ *
14
+ * Implementations:
15
+ *
16
+ * - **Screenshot**: PowerShell one-liner using
17
+ * `System.Drawing.Graphics.CopyFromScreen` to grab the primary
18
+ * monitor and pipe PNG bytes to stdout. Zero external deps — every
19
+ * supported Windows release ships PowerShell.
20
+ * - **Screen size**: PowerShell `[System.Windows.Forms.SystemInformation]::PrimaryMonitorSize`.
21
+ * Cached after the first probe.
22
+ * - **executeCommand**: dispatches through `cmd.exe /d /s /c <body>`.
23
+ * `executeCommand` is the canonical shell verb; we keep `cmd.exe`
24
+ * rather than PowerShell so existing ADB-shaped agent prompts that
25
+ * emit `dir`, `type`, `ipconfig`, etc. work without quoting churn.
26
+ *
27
+ * Future expansion path:
28
+ * - pointer / keyboard → `Windows.UI.Input.Preview.Injection` (UWP)
29
+ * or Win32 `SendInput` via `node-windows-input` / `nut.js`.
30
+ * - app-management → PowerShell `Start-Process` / `Get-Process`.
31
+ * - package-install → MSI/EXE dispatch (`msiexec /i <path>` /
32
+ * `Start-Process -Wait <path>`).
33
+ * - accessibility → UI Automation COM via `ui-auto`.
34
+ *
35
+ * **Testability**: like `MacOsBackend` / `LinuxBackend`, the constructor
36
+ * accepts an injected `runner` (spawn-shape) so the suite runs identically
37
+ * on macOS / Linux CI without touching a real PowerShell.
38
+ */
39
+ import { type DeviceInfo } from "@beeos-ai/device-common";
40
+ import { BaseSandboxBackend, type ExecuteCommandOutput, type ScreenSize, type ScreenshotOutput } from "../base.js";
41
+ export interface RunResult {
42
+ code: number;
43
+ stdout: Buffer;
44
+ stderr: string;
45
+ }
46
+ export type Runner = (bin: string, args: readonly string[], opts?: {
47
+ stdin?: string;
48
+ timeoutMs?: number;
49
+ }) => Promise<RunResult>;
50
+ export interface WindowsBackendOptions {
51
+ runner?: Runner;
52
+ /** PowerShell binary; defaults to `powershell.exe`. Tests inject `pwsh` etc. */
53
+ powershellBin?: string;
54
+ /** Default-shell command timeout in ms. Defaults to 30s. */
55
+ shellTimeoutMs?: number;
56
+ }
57
+ export declare class WindowsBackend extends BaseSandboxBackend {
58
+ readonly os: "desktop-windows";
59
+ readonly tools: ReadonlySet<string>;
60
+ private readonly runner;
61
+ private readonly powershellBin;
62
+ private readonly shellTimeoutMs;
63
+ private cachedSize;
64
+ constructor(opts?: WindowsBackendOptions);
65
+ info(): Promise<DeviceInfo>;
66
+ screenshot(): Promise<ScreenshotOutput>;
67
+ screenSize(): Promise<ScreenSize>;
68
+ executeCommand(command: string): Promise<ExecuteCommandOutput>;
69
+ }
@@ -0,0 +1,191 @@
1
+ /**
2
+ * WindowsBackend — minimal `SandboxBackend` driving a real Windows host.
3
+ *
4
+ * Scope (v0.2.0 stub): only `screenshot` / `screen_size` / `device_info` /
5
+ * `execute_command` are implemented natively. Everything else
6
+ * (pointer / keyboard / navigation / filesystem / app-management /
7
+ * package-install / accessibility) is **deliberately not in
8
+ * `WINDOWS_STUB_TOOLS`** so the MCP tool registry filters those tools out
9
+ * at `/mcp/tools/list` and `/mcp/tools/call` returns 404 — agents see
10
+ * exactly the verbs the backend can actually execute, no runtime
11
+ * "unsupported" surprises after picking a tool out of the advertised
12
+ * list.
13
+ *
14
+ * Implementations:
15
+ *
16
+ * - **Screenshot**: PowerShell one-liner using
17
+ * `System.Drawing.Graphics.CopyFromScreen` to grab the primary
18
+ * monitor and pipe PNG bytes to stdout. Zero external deps — every
19
+ * supported Windows release ships PowerShell.
20
+ * - **Screen size**: PowerShell `[System.Windows.Forms.SystemInformation]::PrimaryMonitorSize`.
21
+ * Cached after the first probe.
22
+ * - **executeCommand**: dispatches through `cmd.exe /d /s /c <body>`.
23
+ * `executeCommand` is the canonical shell verb; we keep `cmd.exe`
24
+ * rather than PowerShell so existing ADB-shaped agent prompts that
25
+ * emit `dir`, `type`, `ipconfig`, etc. work without quoting churn.
26
+ *
27
+ * Future expansion path:
28
+ * - pointer / keyboard → `Windows.UI.Input.Preview.Injection` (UWP)
29
+ * or Win32 `SendInput` via `node-windows-input` / `nut.js`.
30
+ * - app-management → PowerShell `Start-Process` / `Get-Process`.
31
+ * - package-install → MSI/EXE dispatch (`msiexec /i <path>` /
32
+ * `Start-Process -Wait <path>`).
33
+ * - accessibility → UI Automation COM via `ui-auto`.
34
+ *
35
+ * **Testability**: like `MacOsBackend` / `LinuxBackend`, the constructor
36
+ * accepts an injected `runner` (spawn-shape) so the suite runs identically
37
+ * on macOS / Linux CI without touching a real PowerShell.
38
+ */
39
+ import { spawn } from "node:child_process";
40
+ import { DeviceError, } from "@beeos-ai/device-common";
41
+ import { BaseSandboxBackend, } from "../base.js";
42
+ import { parsePngDimensions } from "../../util/image-dim.js";
43
+ /**
44
+ * Windows backend tool catalogue (v0.2.0 stub).
45
+ *
46
+ * Only the four observation + shell tools the stub can actually fulfil
47
+ * are advertised. Everything else stays off until we wire up
48
+ * `SendInput` / UIA.
49
+ */
50
+ const WINDOWS_STUB_TOOLS = new Set([
51
+ "screenshot",
52
+ "screen_size",
53
+ "device_info",
54
+ "execute_command",
55
+ ]);
56
+ const defaultRunner = (bin, args, opts = {}) => new Promise((resolve, reject) => {
57
+ // `windowsHide` keeps spawn from popping a console window when the
58
+ // runtime itself is launched as a Windows Service / tray app.
59
+ const child = spawn(bin, args, {
60
+ stdio: ["pipe", "pipe", "pipe"],
61
+ windowsHide: true,
62
+ });
63
+ const out = [];
64
+ let err = "";
65
+ let timer;
66
+ if (opts.timeoutMs && opts.timeoutMs > 0) {
67
+ timer = setTimeout(() => child.kill("SIGKILL"), opts.timeoutMs);
68
+ }
69
+ child.stdout.on("data", (b) => out.push(b));
70
+ child.stderr.on("data", (b) => (err += b.toString("utf8")));
71
+ child.on("error", (e) => {
72
+ if (timer)
73
+ clearTimeout(timer);
74
+ reject(e);
75
+ });
76
+ child.on("close", (code) => {
77
+ if (timer)
78
+ clearTimeout(timer);
79
+ resolve({ code: code ?? 0, stdout: Buffer.concat(out), stderr: err });
80
+ });
81
+ if (opts.stdin) {
82
+ child.stdin.end(opts.stdin);
83
+ }
84
+ else {
85
+ child.stdin.end();
86
+ }
87
+ });
88
+ /* ----------------------------------------------------------------------- */
89
+ /* PowerShell snippets */
90
+ /* ----------------------------------------------------------------------- */
91
+ // Captures the full virtual desktop (primary monitor) and writes a PNG
92
+ // to stdout. We use `[Console]::OpenStandardOutput()` to guarantee a
93
+ // raw byte stream — `Out-File` would corrupt the PNG with BOM/encoding.
94
+ const SCREENSHOT_PS = `
95
+ Add-Type -AssemblyName System.Windows.Forms
96
+ Add-Type -AssemblyName System.Drawing
97
+ $bounds = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds
98
+ $bmp = New-Object System.Drawing.Bitmap $bounds.Width, $bounds.Height
99
+ $g = [System.Drawing.Graphics]::FromImage($bmp)
100
+ $g.CopyFromScreen($bounds.X, $bounds.Y, 0, 0, $bounds.Size)
101
+ $ms = New-Object System.IO.MemoryStream
102
+ $bmp.Save($ms, [System.Drawing.Imaging.ImageFormat]::Png)
103
+ $bytes = $ms.ToArray()
104
+ [Console]::OpenStandardOutput().Write($bytes, 0, $bytes.Length)
105
+ $g.Dispose(); $bmp.Dispose(); $ms.Dispose()
106
+ `.trim();
107
+ const SCREEN_SIZE_PS = `
108
+ Add-Type -AssemblyName System.Windows.Forms
109
+ $s = [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize
110
+ "${"$($s.Width)x$($s.Height)"}"
111
+ `.trim();
112
+ /* ----------------------------------------------------------------------- */
113
+ /* WindowsBackend */
114
+ /* ----------------------------------------------------------------------- */
115
+ export class WindowsBackend extends BaseSandboxBackend {
116
+ os = "desktop-windows";
117
+ tools = WINDOWS_STUB_TOOLS;
118
+ runner;
119
+ powershellBin;
120
+ shellTimeoutMs;
121
+ cachedSize = null;
122
+ constructor(opts = {}) {
123
+ super();
124
+ this.runner = opts.runner ?? defaultRunner;
125
+ this.powershellBin = opts.powershellBin ?? "powershell.exe";
126
+ this.shellTimeoutMs = opts.shellTimeoutMs ?? 30_000;
127
+ }
128
+ async info() {
129
+ // `DeviceCapability` is the agent-facing verb vocabulary (see
130
+ // common/device-info.ts). `screenshot` + `shell` are the two verbs
131
+ // the v0.2.0 stub actually fulfills.
132
+ const caps = ["screenshot", "shell"];
133
+ const size = await this.screenSize().catch(() => ({ w: 1920, h: 1080 }));
134
+ return {
135
+ type: this.os,
136
+ name: "Windows desktop (stub)",
137
+ os: "Windows",
138
+ width: size.w,
139
+ height: size.h,
140
+ capabilities: caps,
141
+ metadata: { stub: "true" },
142
+ };
143
+ }
144
+ async screenshot() {
145
+ const r = await this.runner(this.powershellBin, ["-NoProfile", "-NonInteractive", "-Command", "-"], { stdin: SCREENSHOT_PS });
146
+ if (r.code !== 0 || r.stdout.length === 0) {
147
+ throw new DeviceError(`windows screenshot failed: ${r.stderr.trim() || `exit ${r.code}`}`, { subtype: "environment", retriable: true });
148
+ }
149
+ const png = r.stdout;
150
+ let width = 1920;
151
+ let height = 1080;
152
+ try {
153
+ const dims = parsePngDimensions(png);
154
+ width = dims[0];
155
+ height = dims[1];
156
+ }
157
+ catch {
158
+ /* fall back to size guess */
159
+ }
160
+ return { data: png, width, height, format: "png" };
161
+ }
162
+ async screenSize() {
163
+ if (this.cachedSize)
164
+ return this.cachedSize;
165
+ const r = await this.runner(this.powershellBin, ["-NoProfile", "-NonInteractive", "-Command", "-"], { stdin: SCREEN_SIZE_PS });
166
+ const out = r.stdout.toString("utf8").trim();
167
+ const m = out.match(/^(\d+)x(\d+)$/);
168
+ if (r.code !== 0 || !m) {
169
+ // Last-resort fallback. Screenshot path will surface the real
170
+ // error if PowerShell is genuinely missing.
171
+ this.cachedSize = { w: 1920, h: 1080 };
172
+ return this.cachedSize;
173
+ }
174
+ this.cachedSize = { w: Number(m[1]), h: Number(m[2]) };
175
+ return this.cachedSize;
176
+ }
177
+ async executeCommand(command) {
178
+ // `cmd.exe /d /s /c "<body>"` — `/d` skips AutoRun, `/s` keeps the
179
+ // outer quotes intact (canonical Windows shell-out). Same shape as
180
+ // ADB / macOS / Linux backends.
181
+ const r = await this.runner("cmd.exe", ["/d", "/s", "/c", command], {
182
+ timeoutMs: this.shellTimeoutMs,
183
+ });
184
+ return {
185
+ stdout: r.stdout.toString("utf8"),
186
+ stderr: r.stderr,
187
+ exitCode: r.code,
188
+ };
189
+ }
190
+ }
191
+ //# sourceMappingURL=windows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows.js","sourceRoot":"","sources":["../../../src/backends/stubs/windows.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * device-mcp-server CLI — spins up a Fastify HTTP server on the chosen
4
+ * `SandboxBackend`. Designed to run as a sibling process inside a Redroid pod /
5
+ * edge site; the agent runtime in `@beeos-ai/device-agent` reaches it via HTTP
6
+ * loopback on port 7900 by default.
7
+ *
8
+ * Examples:
9
+ * device-mcp-server --backend adb --adb-serial emulator-5554
10
+ * device-mcp-server --backend desktop --port 7901 # smart-resolve to host OS
11
+ * device-mcp-server --backend macos # real macOS host control
12
+ * device-mcp-server --backend linux # real Linux host control
13
+ * device-mcp-server --backend windows # real Windows host control
14
+ *
15
+ * Env overrides:
16
+ * DEVICEAGENT_BACKEND=adb|macos|linux|windows|desktop|...
17
+ * ANDROID_SERIAL=<adb serial>
18
+ * ADB_DEFAULT_TIMEOUT_MS=10000 (per-call adb command timeout, ms)
19
+ * ADB_SHELL_TIMEOUT_MS=30000 (adb shell timeout, ms)
20
+ * ADB_SCREENSHOT_TIMEOUT_MS=15000 (adb exec-out screencap timeout, ms)
21
+ * ADB_INSTALL_TIMEOUT_MS=120000 (adb install timeout, ms)
22
+ * MAC_CLICLICK_PATH=/opt/homebrew/bin/cliclick (override autodetected path)
23
+ * MCP_HOST=0.0.0.0
24
+ * MCP_PORT=7900
25
+ *
26
+ * macOS notes:
27
+ * - The "macos" backend (and "desktop" on a darwin host) drives the real
28
+ * local Mac via cliclick + osascript + screencapture. The host process
29
+ * MUST hold Accessibility permission (System Settings → Privacy &
30
+ * Security → Accessibility) for synthetic input to take effect.
31
+ * - cliclick is auto-detected on PATH; install via `brew install cliclick`
32
+ * for the smoothest pointer ergonomics. Without it the backend falls back
33
+ * to JXA + Quartz CGEvent (`osascript -l JavaScript`), which is also
34
+ * production-grade — every verb keeps working, including scroll (cliclick
35
+ * itself has no scroll command; scroll is always JXA-driven).
36
+ */
37
+ export {};
package/dist/cli.js ADDED
@@ -0,0 +1,177 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * device-mcp-server CLI — spins up a Fastify HTTP server on the chosen
4
+ * `SandboxBackend`. Designed to run as a sibling process inside a Redroid pod /
5
+ * edge site; the agent runtime in `@beeos-ai/device-agent` reaches it via HTTP
6
+ * loopback on port 7900 by default.
7
+ *
8
+ * Examples:
9
+ * device-mcp-server --backend adb --adb-serial emulator-5554
10
+ * device-mcp-server --backend desktop --port 7901 # smart-resolve to host OS
11
+ * device-mcp-server --backend macos # real macOS host control
12
+ * device-mcp-server --backend linux # real Linux host control
13
+ * device-mcp-server --backend windows # real Windows host control
14
+ *
15
+ * Env overrides:
16
+ * DEVICEAGENT_BACKEND=adb|macos|linux|windows|desktop|...
17
+ * ANDROID_SERIAL=<adb serial>
18
+ * ADB_DEFAULT_TIMEOUT_MS=10000 (per-call adb command timeout, ms)
19
+ * ADB_SHELL_TIMEOUT_MS=30000 (adb shell timeout, ms)
20
+ * ADB_SCREENSHOT_TIMEOUT_MS=15000 (adb exec-out screencap timeout, ms)
21
+ * ADB_INSTALL_TIMEOUT_MS=120000 (adb install timeout, ms)
22
+ * MAC_CLICLICK_PATH=/opt/homebrew/bin/cliclick (override autodetected path)
23
+ * MCP_HOST=0.0.0.0
24
+ * MCP_PORT=7900
25
+ *
26
+ * macOS notes:
27
+ * - The "macos" backend (and "desktop" on a darwin host) drives the real
28
+ * local Mac via cliclick + osascript + screencapture. The host process
29
+ * MUST hold Accessibility permission (System Settings → Privacy &
30
+ * Security → Accessibility) for synthetic input to take effect.
31
+ * - cliclick is auto-detected on PATH; install via `brew install cliclick`
32
+ * for the smoothest pointer ergonomics. Without it the backend falls back
33
+ * to JXA + Quartz CGEvent (`osascript -l JavaScript`), which is also
34
+ * production-grade — every verb keeps working, including scroll (cliclick
35
+ * itself has no scroll command; scroll is always JXA-driven).
36
+ */
37
+ import { parseArgs } from "node:util";
38
+ import { DeviceError } from "@beeos-ai/device-common";
39
+ import { createBackend, SUPPORTED_BACKENDS } from "./backends/index.js";
40
+ import { buildApp } from "./server/app.js";
41
+ function parseCliArgs(argv) {
42
+ const { values } = parseArgs({
43
+ args: argv,
44
+ options: {
45
+ backend: { type: "string" },
46
+ "adb-serial": { type: "string" },
47
+ host: { type: "string" },
48
+ port: { type: "string" },
49
+ "skip-connect": { type: "boolean", default: false },
50
+ width: { type: "string" },
51
+ height: { type: "string" },
52
+ help: { type: "boolean", short: "h", default: false },
53
+ },
54
+ allowPositionals: false,
55
+ strict: true,
56
+ });
57
+ if (values.help) {
58
+ printHelp();
59
+ process.exit(0);
60
+ }
61
+ const backendName = (values.backend ?? process.env.DEVICEAGENT_BACKEND ?? "desktop");
62
+ if (!SUPPORTED_BACKENDS.includes(backendName)) {
63
+ throw new DeviceError(`unknown backend '${backendName}'. Supported: ${SUPPORTED_BACKENDS.join(", ")}`, { subtype: "invalid_args" });
64
+ }
65
+ const port = Number(values.port ?? process.env.MCP_PORT ?? "7900");
66
+ if (!Number.isFinite(port) || port < 1 || port > 65535) {
67
+ throw new DeviceError(`invalid --port: ${values.port}`, { subtype: "invalid_args" });
68
+ }
69
+ return {
70
+ backend: backendName,
71
+ host: values.host ?? process.env.MCP_HOST ?? "127.0.0.1",
72
+ port,
73
+ adbSerial: values["adb-serial"] ?? process.env.ANDROID_SERIAL,
74
+ skipConnectValidation: !!values["skip-connect"],
75
+ width: values.width ? Number(values.width) : undefined,
76
+ height: values.height ? Number(values.height) : undefined,
77
+ };
78
+ }
79
+ function printHelp() {
80
+ process.stdout.write(`device-mcp-server — BeeOS in-pod device control HTTP server.
81
+
82
+ Usage:
83
+ device-mcp-server [options]
84
+
85
+ Options:
86
+ --backend <name> Canonical: adb | macos | linux | windows | desktop
87
+ Aliases: android (= adb), mac (= macos), win (= windows),
88
+ desktop-{linux,macos,windows}, mock-desktop, ios
89
+ Default: "desktop" — smart-resolves to macOS / Linux /
90
+ Windows native control on the corresponding host.
91
+ macOS native control requires Accessibility permission
92
+ (System Settings → Privacy & Security → Accessibility).
93
+ linux/windows stubs cover screen-capture + shell only;
94
+ pointer / keyboard come in a follow-up.
95
+ --adb-serial <id> ADB serial (adb backend only)
96
+ --host <addr> Bind address (default: 127.0.0.1)
97
+ --port <n> Listen port (default: 7900)
98
+ --skip-connect Skip connect-time backend validation (tests / cold farms)
99
+ --width / --height Override mock-desktop canvas size (ignored on macos)
100
+ -h, --help Show this help
101
+
102
+ Env overrides:
103
+ DEVICEAGENT_BACKEND, ANDROID_SERIAL, MCP_HOST, MCP_PORT, MAC_CLICLICK_PATH,
104
+ ADB_DEFAULT_TIMEOUT_MS, ADB_SHELL_TIMEOUT_MS, ADB_SCREENSHOT_TIMEOUT_MS,
105
+ ADB_INSTALL_TIMEOUT_MS
106
+ `);
107
+ }
108
+ function parsePositiveIntEnv(name) {
109
+ const raw = process.env[name];
110
+ if (!raw)
111
+ return undefined;
112
+ const n = Number(raw);
113
+ if (!Number.isFinite(n) || n <= 0)
114
+ return undefined;
115
+ return Math.floor(n);
116
+ }
117
+ async function main() {
118
+ const cli = parseCliArgs(process.argv.slice(2));
119
+ const backend = createBackend(cli.backend, {
120
+ android: {
121
+ serial: cli.adbSerial,
122
+ skipConnectValidation: cli.skipConnectValidation,
123
+ defaultTimeoutMs: parsePositiveIntEnv("ADB_DEFAULT_TIMEOUT_MS"),
124
+ shellTimeoutMs: parsePositiveIntEnv("ADB_SHELL_TIMEOUT_MS"),
125
+ screenshotTimeoutMs: parsePositiveIntEnv("ADB_SCREENSHOT_TIMEOUT_MS"),
126
+ installTimeoutMs: parsePositiveIntEnv("ADB_INSTALL_TIMEOUT_MS"),
127
+ },
128
+ desktop: { width: cli.width, height: cli.height },
129
+ macos: {
130
+ cliclickPath: process.env.MAC_CLICLICK_PATH || undefined,
131
+ },
132
+ linux: {
133
+ shellTimeoutMs: parsePositiveIntEnv("LINUX_SHELL_TIMEOUT_MS"),
134
+ },
135
+ windows: {
136
+ shellTimeoutMs: parsePositiveIntEnv("WINDOWS_SHELL_TIMEOUT_MS"),
137
+ powershellBin: process.env.WINDOWS_POWERSHELL_BIN || undefined,
138
+ },
139
+ });
140
+ if (!cli.skipConnectValidation) {
141
+ await backend.connect();
142
+ }
143
+ if ((cli.backend === "desktop" && process.platform === "darwin") ||
144
+ cli.backend === "macos" ||
145
+ cli.backend === "mac" ||
146
+ cli.backend === "desktop-macos") {
147
+ // eslint-disable-next-line no-console
148
+ console.error("[device-mcp-server] macOS backend selected — ensure the host process " +
149
+ "holds Accessibility permission (System Settings → Privacy & Security " +
150
+ "→ Accessibility) for synthetic input to take effect.");
151
+ }
152
+ const app = await buildApp({ backend });
153
+ const address = await app.listen({ host: cli.host, port: cli.port });
154
+ app.log.info({ backend: cli.backend, address }, `device-mcp-server listening on ${address}`);
155
+ const shutdown = async (signal) => {
156
+ app.log.info({ signal }, "shutting down");
157
+ try {
158
+ await app.close();
159
+ await backend.disconnect();
160
+ }
161
+ finally {
162
+ process.exit(0);
163
+ }
164
+ };
165
+ process.on("SIGINT", () => void shutdown("SIGINT"));
166
+ process.on("SIGTERM", () => void shutdown("SIGTERM"));
167
+ }
168
+ main().catch((err) => {
169
+ // eslint-disable-next-line no-console
170
+ console.error(`[device-mcp-server] fatal: ${err?.message ?? err}`);
171
+ if (err instanceof DeviceError) {
172
+ // eslint-disable-next-line no-console
173
+ console.error(` subtype=${err.subtype} retriable=${err.retriable}`);
174
+ }
175
+ process.exit(1);
176
+ });
177
+ //# sourceMappingURL=cli.js.map