@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.
- package/LICENSE +201 -0
- package/dist/backends/android-adb-runner.d.ts +32 -0
- package/dist/backends/android-adb-runner.js +15 -0
- package/dist/backends/android-adb-runner.js.map +1 -0
- package/dist/backends/android-adb.d.ts +153 -0
- package/dist/backends/android-adb.js +723 -0
- package/dist/backends/android-adb.js.map +1 -0
- package/dist/backends/base.d.ts +150 -0
- package/dist/backends/base.js +116 -0
- package/dist/backends/base.js.map +1 -0
- package/dist/backends/desktop.d.ts +62 -0
- package/dist/backends/desktop.js +176 -0
- package/dist/backends/desktop.js.map +1 -0
- package/dist/backends/index.d.ts +63 -0
- package/dist/backends/index.js +105 -0
- package/dist/backends/index.js.map +1 -0
- package/dist/backends/linux.d.ts +69 -0
- package/dist/backends/linux.js +230 -0
- package/dist/backends/linux.js.map +1 -0
- package/dist/backends/mac.d.ts +154 -0
- package/dist/backends/mac.js +881 -0
- package/dist/backends/mac.js.map +1 -0
- package/dist/backends/stubs/ios.d.ts +17 -0
- package/dist/backends/stubs/ios.js +32 -0
- package/dist/backends/stubs/ios.js.map +1 -0
- package/dist/backends/stubs/macos.d.ts +13 -0
- package/dist/backends/stubs/macos.js +27 -0
- package/dist/backends/stubs/macos.js.map +1 -0
- package/dist/backends/stubs/windows.d.ts +69 -0
- package/dist/backends/stubs/windows.js +191 -0
- package/dist/backends/stubs/windows.js.map +1 -0
- package/dist/cli.d.ts +37 -0
- package/dist/cli.js +177 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/server/action-mapping.d.ts +21 -0
- package/dist/server/action-mapping.js +153 -0
- package/dist/server/action-mapping.js.map +1 -0
- package/dist/server/app.d.ts +23 -0
- package/dist/server/app.js +157 -0
- package/dist/server/app.js.map +1 -0
- package/dist/server/tool-registry.d.ts +50 -0
- package/dist/server/tool-registry.js +504 -0
- package/dist/server/tool-registry.js.map +1 -0
- package/dist/util/adb-files.d.ts +92 -0
- package/dist/util/adb-files.js +221 -0
- package/dist/util/adb-files.js.map +1 -0
- package/dist/util/adb-shell.d.ts +80 -0
- package/dist/util/adb-shell.js +102 -0
- package/dist/util/adb-shell.js.map +1 -0
- package/dist/util/android-apps.d.ts +10 -0
- package/dist/util/android-apps.js +103 -0
- package/dist/util/android-apps.js.map +1 -0
- package/dist/util/image-dim.d.ts +27 -0
- package/dist/util/image-dim.js +37 -0
- package/dist/util/image-dim.js.map +1 -0
- package/dist/util/ui-xml.d.ts +20 -0
- package/dist/util/ui-xml.js +184 -0
- package/dist/util/ui-xml.js.map +1 -0
- 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
|