@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":"android-adb.js","sourceRoot":"","sources":["../../src/backends/android-adb.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SandboxBackend — abstract device-control surface used by every MCP tool.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the Python reference at `mcp_tools/backend.py`. Implementations live
|
|
5
|
+
* in `backends/{android-adb,desktop,stubs/...}.ts`. The MCP server's tool
|
|
6
|
+
* registry maps each MCP tool (`click`, `tap`, `screenshot`, ...) to the
|
|
7
|
+
* matching method here.
|
|
8
|
+
*
|
|
9
|
+
* Methods are intentionally narrow / verb-shaped — the action-mapping layer in
|
|
10
|
+
* `server/action-mapping.ts` translates a unified `Action` into the right
|
|
11
|
+
* method+args.
|
|
12
|
+
*/
|
|
13
|
+
import type { BackendFamily, BackendOs, DeviceInfo, ExecuteCommandOutput, ListDirectoryEntry, ScreenshotOutput, ScreenSize, UiDumpOutput } from "@beeos-ai/device-common";
|
|
14
|
+
export type { BackendOs, BackendFamily, ScreenSize, UiDumpOutput, ExecuteCommandOutput, ListDirectoryEntry, ScreenshotOutput, };
|
|
15
|
+
export interface SandboxBackend {
|
|
16
|
+
/**
|
|
17
|
+
* Concrete operating system this backend drives. Wire-stable — the
|
|
18
|
+
* value flows through `/healthz.backend` and `info().type`.
|
|
19
|
+
*/
|
|
20
|
+
readonly os: BackendOs;
|
|
21
|
+
/**
|
|
22
|
+
* Coarse family discriminator derived from `os`. Drives the MCP tool
|
|
23
|
+
* catalogue split (mobile gestures vs. desktop mouse verbs). Internal
|
|
24
|
+
* — never appears on the wire.
|
|
25
|
+
*/
|
|
26
|
+
readonly family: BackendFamily;
|
|
27
|
+
/**
|
|
28
|
+
* Set of MCP tool names this backend advertises and answers.
|
|
29
|
+
*
|
|
30
|
+
* Drives `device-mcp-server`'s tool registry — at startup we filter
|
|
31
|
+
* `TOOLS` so `/healthz` and `/mcp/tools/list` only ever advertise
|
|
32
|
+
* tools that satisfy `backend.tools.has(name)`. `/mcp/tools/call`
|
|
33
|
+
* mirrors the same gate (returns 404 for filtered-out tools) so MCP
|
|
34
|
+
* clients never see an "unsupported" surprise after picking a tool
|
|
35
|
+
* out of the advertised list.
|
|
36
|
+
*
|
|
37
|
+
* Replaces the previous capability-bag + capability-port-interface
|
|
38
|
+
* model — the indirection through fine-grained capability kinds added
|
|
39
|
+
* no expressive power once we settled on OS-family as the primary
|
|
40
|
+
* discriminator.
|
|
41
|
+
*
|
|
42
|
+
* Distinct from `DeviceInfo.capabilities` — that field is a
|
|
43
|
+
* descriptive verb list returned to the agent for UX/prompt shaping;
|
|
44
|
+
* this set is the wire-level filter for the tool registry.
|
|
45
|
+
*/
|
|
46
|
+
readonly tools: ReadonlySet<string>;
|
|
47
|
+
/**
|
|
48
|
+
* Connect / warm up the backend. Idempotent. Implementations may probe
|
|
49
|
+
* external state (e.g. `adb devices`) and throw `DeviceError` on failure.
|
|
50
|
+
*/
|
|
51
|
+
connect(): Promise<void>;
|
|
52
|
+
disconnect(): Promise<void>;
|
|
53
|
+
info(): Promise<DeviceInfo>;
|
|
54
|
+
/**
|
|
55
|
+
* Capture a screenshot. Returns the encoded bytes plus the actual
|
|
56
|
+
* decoded image dimensions and format (see `ScreenshotOutput`).
|
|
57
|
+
*
|
|
58
|
+
* NOTE (0.2.3 breaking change): this used to return a bare `Buffer`.
|
|
59
|
+
* Callers MUST destructure `data` instead of treating the result as a
|
|
60
|
+
* Buffer directly. The new shape lets the wire layer populate
|
|
61
|
+
* `ScreenshotResult.width/height` consistently with the `b64` payload
|
|
62
|
+
* regardless of backend-side resizing.
|
|
63
|
+
*/
|
|
64
|
+
screenshot(): Promise<ScreenshotOutput>;
|
|
65
|
+
screenSize(): Promise<ScreenSize>;
|
|
66
|
+
uiDump(): Promise<UiDumpOutput>;
|
|
67
|
+
click(x: number, y: number, button?: "left" | "right" | "middle", clicks?: number): Promise<void>;
|
|
68
|
+
doubleClick(x: number, y: number): Promise<void>;
|
|
69
|
+
rightClick(x: number, y: number): Promise<void>;
|
|
70
|
+
tap(x: number, y: number): Promise<void>;
|
|
71
|
+
longPress(x: number, y: number, durationMs?: number): Promise<void>;
|
|
72
|
+
drag(x1: number, y1: number, x2: number, y2: number, durationMs?: number): Promise<void>;
|
|
73
|
+
swipe(x1: number, y1: number, x2: number, y2: number, durationMs?: number): Promise<void>;
|
|
74
|
+
scroll(x: number, y: number, direction: "up" | "down" | "left" | "right", amount?: number): Promise<void>;
|
|
75
|
+
move(x: number, y: number): Promise<void>;
|
|
76
|
+
typeText(text: string): Promise<void>;
|
|
77
|
+
pressKey(key: string): Promise<void>;
|
|
78
|
+
hotkey(...keys: string[]): Promise<void>;
|
|
79
|
+
back(): Promise<void>;
|
|
80
|
+
home(): Promise<void>;
|
|
81
|
+
navigate(direction: "back" | "forward" | "up"): Promise<void>;
|
|
82
|
+
launchApp(pkgOrName: string, activity?: string): Promise<void>;
|
|
83
|
+
executeCommand(body: string, opts?: {
|
|
84
|
+
timeoutS?: number;
|
|
85
|
+
cwd?: string;
|
|
86
|
+
}): Promise<ExecuteCommandOutput>;
|
|
87
|
+
fileRead(path: string): Promise<Buffer>;
|
|
88
|
+
fileWrite(path: string, content: Buffer | string): Promise<void>;
|
|
89
|
+
listDirectory(path: string): Promise<ListDirectoryEntry[]>;
|
|
90
|
+
/**
|
|
91
|
+
* Optional hook for backends that need to install an APK / package.
|
|
92
|
+
* Not part of the unified Action verb set but the ACP wire still has
|
|
93
|
+
* `device/install` so we keep an explicit slot here.
|
|
94
|
+
*/
|
|
95
|
+
install(path: string): Promise<void>;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Convenience base class — subclasses override only the verbs they support and
|
|
99
|
+
* unsupported verbs throw a `DeviceError("unsupported")` automatically.
|
|
100
|
+
*
|
|
101
|
+
* NOTE: keep the parameter lists in sync with `SandboxBackend` so overrides
|
|
102
|
+
* type-check against the same shape.
|
|
103
|
+
*/
|
|
104
|
+
export declare abstract class BaseSandboxBackend implements SandboxBackend {
|
|
105
|
+
abstract readonly os: BackendOs;
|
|
106
|
+
/** Derived from `os` via `osFamily()` — never override. */
|
|
107
|
+
get family(): BackendFamily;
|
|
108
|
+
/**
|
|
109
|
+
* Default to "no tools" — concrete backends override with their real
|
|
110
|
+
* set. Choosing `empty` rather than "all" forces every backend to opt
|
|
111
|
+
* in explicitly; a forgotten override surfaces immediately as an
|
|
112
|
+
* empty `/healthz.tools` instead of leaking unsupported tools.
|
|
113
|
+
*/
|
|
114
|
+
readonly tools: ReadonlySet<string>;
|
|
115
|
+
connect(): Promise<void>;
|
|
116
|
+
disconnect(): Promise<void>;
|
|
117
|
+
abstract info(): Promise<DeviceInfo>;
|
|
118
|
+
abstract screenshot(): Promise<ScreenshotOutput>;
|
|
119
|
+
abstract screenSize(): Promise<ScreenSize>;
|
|
120
|
+
uiDump(): Promise<UiDumpOutput>;
|
|
121
|
+
click(_x: number, _y: number, _button?: "left" | "right" | "middle", _clicks?: number): Promise<void>;
|
|
122
|
+
doubleClick(_x: number, _y: number): Promise<void>;
|
|
123
|
+
rightClick(_x: number, _y: number): Promise<void>;
|
|
124
|
+
tap(_x: number, _y: number): Promise<void>;
|
|
125
|
+
longPress(_x: number, _y: number, _durationMs?: number): Promise<void>;
|
|
126
|
+
drag(_x1: number, _y1: number, _x2: number, _y2: number, _durationMs?: number): Promise<void>;
|
|
127
|
+
swipe(_x1: number, _y1: number, _x2: number, _y2: number, _durationMs?: number): Promise<void>;
|
|
128
|
+
scroll(_x: number, _y: number, _direction: "up" | "down" | "left" | "right", _amount?: number): Promise<void>;
|
|
129
|
+
move(_x: number, _y: number): Promise<void>;
|
|
130
|
+
typeText(_text: string): Promise<void>;
|
|
131
|
+
pressKey(_key: string): Promise<void>;
|
|
132
|
+
hotkey(..._keys: string[]): Promise<void>;
|
|
133
|
+
back(): Promise<void>;
|
|
134
|
+
home(): Promise<void>;
|
|
135
|
+
navigate(_direction: "back" | "forward" | "up"): Promise<void>;
|
|
136
|
+
launchApp(_pkgOrName: string, _activity?: string): Promise<void>;
|
|
137
|
+
executeCommand(_body: string, _opts?: {
|
|
138
|
+
timeoutS?: number;
|
|
139
|
+
cwd?: string;
|
|
140
|
+
}): Promise<ExecuteCommandOutput>;
|
|
141
|
+
fileRead(_path: string): Promise<Buffer>;
|
|
142
|
+
fileWrite(_path: string, _content: Buffer | string): Promise<void>;
|
|
143
|
+
listDirectory(_path: string): Promise<ListDirectoryEntry[]>;
|
|
144
|
+
install(_path: string): Promise<void>;
|
|
145
|
+
/**
|
|
146
|
+
* Returns a rejected promise (not a sync throw) so callers using
|
|
147
|
+
* `await backend.foo()` always go through the async error pipe.
|
|
148
|
+
*/
|
|
149
|
+
protected unsupported<T = never>(verb: string): Promise<T>;
|
|
150
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SandboxBackend — abstract device-control surface used by every MCP tool.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the Python reference at `mcp_tools/backend.py`. Implementations live
|
|
5
|
+
* in `backends/{android-adb,desktop,stubs/...}.ts`. The MCP server's tool
|
|
6
|
+
* registry maps each MCP tool (`click`, `tap`, `screenshot`, ...) to the
|
|
7
|
+
* matching method here.
|
|
8
|
+
*
|
|
9
|
+
* Methods are intentionally narrow / verb-shaped — the action-mapping layer in
|
|
10
|
+
* `server/action-mapping.ts` translates a unified `Action` into the right
|
|
11
|
+
* method+args.
|
|
12
|
+
*/
|
|
13
|
+
import { DeviceError, osFamily } from "@beeos-ai/device-common";
|
|
14
|
+
/**
|
|
15
|
+
* Convenience base class — subclasses override only the verbs they support and
|
|
16
|
+
* unsupported verbs throw a `DeviceError("unsupported")` automatically.
|
|
17
|
+
*
|
|
18
|
+
* NOTE: keep the parameter lists in sync with `SandboxBackend` so overrides
|
|
19
|
+
* type-check against the same shape.
|
|
20
|
+
*/
|
|
21
|
+
export class BaseSandboxBackend {
|
|
22
|
+
/** Derived from `os` via `osFamily()` — never override. */
|
|
23
|
+
get family() {
|
|
24
|
+
return osFamily(this.os);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Default to "no tools" — concrete backends override with their real
|
|
28
|
+
* set. Choosing `empty` rather than "all" forces every backend to opt
|
|
29
|
+
* in explicitly; a forgotten override surfaces immediately as an
|
|
30
|
+
* empty `/healthz.tools` instead of leaking unsupported tools.
|
|
31
|
+
*/
|
|
32
|
+
tools = new Set();
|
|
33
|
+
async connect() {
|
|
34
|
+
/* default no-op */
|
|
35
|
+
}
|
|
36
|
+
async disconnect() {
|
|
37
|
+
/* default no-op */
|
|
38
|
+
}
|
|
39
|
+
async uiDump() {
|
|
40
|
+
return { supported: false };
|
|
41
|
+
}
|
|
42
|
+
click(_x, _y, _button, _clicks) {
|
|
43
|
+
return this.unsupported("click");
|
|
44
|
+
}
|
|
45
|
+
doubleClick(_x, _y) {
|
|
46
|
+
return this.unsupported("double_click");
|
|
47
|
+
}
|
|
48
|
+
rightClick(_x, _y) {
|
|
49
|
+
return this.unsupported("right_click");
|
|
50
|
+
}
|
|
51
|
+
tap(_x, _y) {
|
|
52
|
+
return this.unsupported("tap");
|
|
53
|
+
}
|
|
54
|
+
longPress(_x, _y, _durationMs) {
|
|
55
|
+
return this.unsupported("long_press");
|
|
56
|
+
}
|
|
57
|
+
drag(_x1, _y1, _x2, _y2, _durationMs) {
|
|
58
|
+
return this.unsupported("drag");
|
|
59
|
+
}
|
|
60
|
+
swipe(_x1, _y1, _x2, _y2, _durationMs) {
|
|
61
|
+
return this.unsupported("swipe");
|
|
62
|
+
}
|
|
63
|
+
scroll(_x, _y, _direction, _amount) {
|
|
64
|
+
return this.unsupported("scroll");
|
|
65
|
+
}
|
|
66
|
+
move(_x, _y) {
|
|
67
|
+
return this.unsupported("move");
|
|
68
|
+
}
|
|
69
|
+
typeText(_text) {
|
|
70
|
+
return this.unsupported("type");
|
|
71
|
+
}
|
|
72
|
+
pressKey(_key) {
|
|
73
|
+
return this.unsupported("key");
|
|
74
|
+
}
|
|
75
|
+
hotkey(..._keys) {
|
|
76
|
+
return this.unsupported("hotkey");
|
|
77
|
+
}
|
|
78
|
+
back() {
|
|
79
|
+
return this.unsupported("back");
|
|
80
|
+
}
|
|
81
|
+
home() {
|
|
82
|
+
return this.unsupported("home");
|
|
83
|
+
}
|
|
84
|
+
navigate(_direction) {
|
|
85
|
+
return this.unsupported("navigate");
|
|
86
|
+
}
|
|
87
|
+
launchApp(_pkgOrName, _activity) {
|
|
88
|
+
return this.unsupported("launch_app");
|
|
89
|
+
}
|
|
90
|
+
executeCommand(_body, _opts) {
|
|
91
|
+
return this.unsupported("execute_command");
|
|
92
|
+
}
|
|
93
|
+
fileRead(_path) {
|
|
94
|
+
return this.unsupported("file_read");
|
|
95
|
+
}
|
|
96
|
+
fileWrite(_path, _content) {
|
|
97
|
+
return this.unsupported("file_write");
|
|
98
|
+
}
|
|
99
|
+
listDirectory(_path) {
|
|
100
|
+
return this.unsupported("list_directory");
|
|
101
|
+
}
|
|
102
|
+
install(_path) {
|
|
103
|
+
return this.unsupported("install");
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Returns a rejected promise (not a sync throw) so callers using
|
|
107
|
+
* `await backend.foo()` always go through the async error pipe.
|
|
108
|
+
*/
|
|
109
|
+
unsupported(verb) {
|
|
110
|
+
return Promise.reject(new DeviceError(`tool '${verb}' is not supported by backend '${this.os}'`, {
|
|
111
|
+
subtype: "unsupported",
|
|
112
|
+
retriable: false,
|
|
113
|
+
}));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/backends/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DesktopBackend — mock desktop sandbox for local dev / unit tests / CI.
|
|
3
|
+
*
|
|
4
|
+
* Migrated from `device-agent/src/adapters/device-desktop.ts`. The mock returns
|
|
5
|
+
* a fixed canvas, records every action into an in-memory log, and never
|
|
6
|
+
* touches the host. It supports `executeCommand` returning a deterministic
|
|
7
|
+
* mock stdout so callers can exercise the full code path.
|
|
8
|
+
*/
|
|
9
|
+
import { type DeviceInfo } from "@beeos-ai/device-common";
|
|
10
|
+
import { BaseSandboxBackend, type ExecuteCommandOutput, type ScreenSize, type ScreenshotOutput } from "./base.js";
|
|
11
|
+
type MockDesktopOs = "desktop-macos" | "desktop-linux" | "desktop-windows";
|
|
12
|
+
export interface DesktopBackendOptions {
|
|
13
|
+
width?: number;
|
|
14
|
+
height?: number;
|
|
15
|
+
name?: string;
|
|
16
|
+
os?: MockDesktopOs;
|
|
17
|
+
}
|
|
18
|
+
interface DesktopAction {
|
|
19
|
+
verb: string;
|
|
20
|
+
args: Record<string, unknown>;
|
|
21
|
+
at: number;
|
|
22
|
+
}
|
|
23
|
+
export declare class DesktopBackend extends BaseSandboxBackend {
|
|
24
|
+
readonly os: MockDesktopOs;
|
|
25
|
+
readonly tools: ReadonlySet<string>;
|
|
26
|
+
/** In-memory action log, primarily for tests. */
|
|
27
|
+
readonly actions: DesktopAction[];
|
|
28
|
+
private readonly width;
|
|
29
|
+
private readonly height;
|
|
30
|
+
private readonly name;
|
|
31
|
+
private connected;
|
|
32
|
+
constructor(opts?: DesktopBackendOptions);
|
|
33
|
+
connect(): Promise<void>;
|
|
34
|
+
disconnect(): Promise<void>;
|
|
35
|
+
info(): Promise<DeviceInfo>;
|
|
36
|
+
screenshot(): Promise<ScreenshotOutput>;
|
|
37
|
+
screenSize(): Promise<ScreenSize>;
|
|
38
|
+
click(x: number, y: number, button?: "left" | "right" | "middle", clicks?: number): Promise<void>;
|
|
39
|
+
doubleClick(x: number, y: number): Promise<void>;
|
|
40
|
+
rightClick(x: number, y: number): Promise<void>;
|
|
41
|
+
tap(x: number, y: number): Promise<void>;
|
|
42
|
+
longPress(x: number, y: number, durationMs?: number): Promise<void>;
|
|
43
|
+
drag(x1: number, y1: number, x2: number, y2: number, durationMs?: number): Promise<void>;
|
|
44
|
+
swipe(x1: number, y1: number, x2: number, y2: number, durationMs?: number): Promise<void>;
|
|
45
|
+
scroll(x: number, y: number, direction: "up" | "down" | "left" | "right", amount?: number): Promise<void>;
|
|
46
|
+
move(x: number, y: number): Promise<void>;
|
|
47
|
+
typeText(text: string): Promise<void>;
|
|
48
|
+
pressKey(key: string): Promise<void>;
|
|
49
|
+
hotkey(...keys: string[]): Promise<void>;
|
|
50
|
+
back(): Promise<void>;
|
|
51
|
+
home(): Promise<void>;
|
|
52
|
+
navigate(direction: "back" | "forward" | "up"): Promise<void>;
|
|
53
|
+
launchApp(pkgOrName: string, activity?: string): Promise<void>;
|
|
54
|
+
executeCommand(body: string, opts?: {
|
|
55
|
+
timeoutS?: number;
|
|
56
|
+
cwd?: string;
|
|
57
|
+
}): Promise<ExecuteCommandOutput>;
|
|
58
|
+
install(path: string): Promise<void>;
|
|
59
|
+
fileWrite(path: string, content: Buffer | string): Promise<void>;
|
|
60
|
+
private record;
|
|
61
|
+
}
|
|
62
|
+
export {};
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DesktopBackend — mock desktop sandbox for local dev / unit tests / CI.
|
|
3
|
+
*
|
|
4
|
+
* Migrated from `device-agent/src/adapters/device-desktop.ts`. The mock returns
|
|
5
|
+
* a fixed canvas, records every action into an in-memory log, and never
|
|
6
|
+
* touches the host. It supports `executeCommand` returning a deterministic
|
|
7
|
+
* mock stdout so callers can exercise the full code path.
|
|
8
|
+
*/
|
|
9
|
+
import { randomBytes } from "node:crypto";
|
|
10
|
+
import { COMMON_TOOLS, DESKTOP_TOOLS, } from "@beeos-ai/device-common";
|
|
11
|
+
import { BaseSandboxBackend, } from "./base.js";
|
|
12
|
+
/**
|
|
13
|
+
* Mock desktop sandbox tool catalogue.
|
|
14
|
+
*
|
|
15
|
+
* The mock records gestures into an in-memory log without touching the
|
|
16
|
+
* host. We advertise the full common tool set MINUS `file_read` /
|
|
17
|
+
* `file_write` / `list_directory` (those deliberately stay unsupported
|
|
18
|
+
* so the integration test that asserts a strict "tool filtered out →
|
|
19
|
+
* 404" gate has something realistic to exercise) plus the full
|
|
20
|
+
* `DESKTOP_TOOLS` catalogue.
|
|
21
|
+
*
|
|
22
|
+
* Mobile-only tools (`tap`, `swipe`, `back`, `home`, `ui_dump`) are
|
|
23
|
+
* intentionally NOT advertised — the mock's `tap`/`swipe` overrides
|
|
24
|
+
* remain in place as a safety net for any direct callers, but the
|
|
25
|
+
* registry will never route to them on a desktop OS.
|
|
26
|
+
*/
|
|
27
|
+
const MOCK_DESKTOP_TOOLS = new Set([
|
|
28
|
+
...COMMON_TOOLS.filter((t) => !["file_read", "file_write", "list_directory"].includes(t)),
|
|
29
|
+
...DESKTOP_TOOLS,
|
|
30
|
+
]);
|
|
31
|
+
export class DesktopBackend extends BaseSandboxBackend {
|
|
32
|
+
os;
|
|
33
|
+
tools = MOCK_DESKTOP_TOOLS;
|
|
34
|
+
/** In-memory action log, primarily for tests. */
|
|
35
|
+
actions = [];
|
|
36
|
+
width;
|
|
37
|
+
height;
|
|
38
|
+
name;
|
|
39
|
+
connected = false;
|
|
40
|
+
constructor(opts = {}) {
|
|
41
|
+
super();
|
|
42
|
+
this.width = opts.width ?? 1920;
|
|
43
|
+
this.height = opts.height ?? 1080;
|
|
44
|
+
this.name = opts.name ?? "Desktop (mock)";
|
|
45
|
+
this.os = opts.os ?? defaultDesktopOs();
|
|
46
|
+
}
|
|
47
|
+
async connect() {
|
|
48
|
+
this.connected = true;
|
|
49
|
+
}
|
|
50
|
+
async disconnect() {
|
|
51
|
+
this.connected = false;
|
|
52
|
+
}
|
|
53
|
+
async info() {
|
|
54
|
+
const capabilities = [
|
|
55
|
+
"screenshot",
|
|
56
|
+
"tap",
|
|
57
|
+
"swipe",
|
|
58
|
+
"type",
|
|
59
|
+
"shell",
|
|
60
|
+
];
|
|
61
|
+
return {
|
|
62
|
+
type: this.os,
|
|
63
|
+
name: this.name,
|
|
64
|
+
os: prettyOsName(this.os),
|
|
65
|
+
width: this.width,
|
|
66
|
+
height: this.height,
|
|
67
|
+
capabilities,
|
|
68
|
+
osVersion: "mock",
|
|
69
|
+
density: 96,
|
|
70
|
+
metadata: { currentApp: "Mock", connected: String(this.connected) },
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
async screenshot() {
|
|
74
|
+
// The mock canvas is a fixed 1×1 PNG — but agents simulate against
|
|
75
|
+
// the configured canvas dimensions, so we report those here so that
|
|
76
|
+
// tests asserting `ScreenshotResult.width === backend.width` work
|
|
77
|
+
// without paying for a real `sharp` decode.
|
|
78
|
+
return {
|
|
79
|
+
data: Buffer.from(TINY_PNG_BASE64, "base64"),
|
|
80
|
+
width: this.width,
|
|
81
|
+
height: this.height,
|
|
82
|
+
format: "png",
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
async screenSize() {
|
|
86
|
+
return { w: this.width, h: this.height };
|
|
87
|
+
}
|
|
88
|
+
async click(x, y, button = "left", clicks = 1) {
|
|
89
|
+
this.record("click", { x, y, button, clicks });
|
|
90
|
+
}
|
|
91
|
+
async doubleClick(x, y) {
|
|
92
|
+
this.record("double_click", { x, y });
|
|
93
|
+
}
|
|
94
|
+
async rightClick(x, y) {
|
|
95
|
+
this.record("right_click", { x, y });
|
|
96
|
+
}
|
|
97
|
+
async tap(x, y) {
|
|
98
|
+
this.record("tap", { x, y });
|
|
99
|
+
}
|
|
100
|
+
async longPress(x, y, durationMs) {
|
|
101
|
+
this.record("long_press", { x, y, durationMs });
|
|
102
|
+
}
|
|
103
|
+
async drag(x1, y1, x2, y2, durationMs) {
|
|
104
|
+
this.record("drag", { x1, y1, x2, y2, durationMs });
|
|
105
|
+
}
|
|
106
|
+
async swipe(x1, y1, x2, y2, durationMs) {
|
|
107
|
+
this.record("swipe", { x1, y1, x2, y2, durationMs });
|
|
108
|
+
}
|
|
109
|
+
async scroll(x, y, direction, amount) {
|
|
110
|
+
this.record("scroll", { x, y, direction, amount });
|
|
111
|
+
}
|
|
112
|
+
async move(x, y) {
|
|
113
|
+
this.record("move", { x, y });
|
|
114
|
+
}
|
|
115
|
+
async typeText(text) {
|
|
116
|
+
this.record("type", { text });
|
|
117
|
+
}
|
|
118
|
+
async pressKey(key) {
|
|
119
|
+
this.record("key", { key });
|
|
120
|
+
}
|
|
121
|
+
async hotkey(...keys) {
|
|
122
|
+
this.record("hotkey", { keys });
|
|
123
|
+
}
|
|
124
|
+
async back() {
|
|
125
|
+
this.record("back", {});
|
|
126
|
+
}
|
|
127
|
+
async home() {
|
|
128
|
+
this.record("home", {});
|
|
129
|
+
}
|
|
130
|
+
async navigate(direction) {
|
|
131
|
+
this.record("navigate", { direction });
|
|
132
|
+
}
|
|
133
|
+
async launchApp(pkgOrName, activity) {
|
|
134
|
+
this.record("launch_app", { pkgOrName, activity });
|
|
135
|
+
}
|
|
136
|
+
async executeCommand(body, opts) {
|
|
137
|
+
this.record("execute_command", { body, ...opts });
|
|
138
|
+
return {
|
|
139
|
+
stdout: `mock-stdout:${randomBytes(4).toString("hex")}`,
|
|
140
|
+
stderr: "",
|
|
141
|
+
exitCode: 0,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
async install(path) {
|
|
145
|
+
this.record("install", { path });
|
|
146
|
+
}
|
|
147
|
+
async fileWrite(path, content) {
|
|
148
|
+
const len = typeof content === "string" ? Buffer.byteLength(content) : content.length;
|
|
149
|
+
this.record("file_write", { path, bytes: len });
|
|
150
|
+
}
|
|
151
|
+
record(verb, args) {
|
|
152
|
+
this.actions.push({ verb, args, at: Date.now() });
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function defaultDesktopOs() {
|
|
156
|
+
switch (process.platform) {
|
|
157
|
+
case "darwin":
|
|
158
|
+
return "desktop-macos";
|
|
159
|
+
case "win32":
|
|
160
|
+
return "desktop-windows";
|
|
161
|
+
default:
|
|
162
|
+
return "desktop-linux";
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function prettyOsName(t) {
|
|
166
|
+
switch (t) {
|
|
167
|
+
case "desktop-macos":
|
|
168
|
+
return "macOS";
|
|
169
|
+
case "desktop-windows":
|
|
170
|
+
return "Windows";
|
|
171
|
+
case "desktop-linux":
|
|
172
|
+
return "Linux";
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
const TINY_PNG_BASE64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";
|
|
176
|
+
//# sourceMappingURL=desktop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"desktop.js","sourceRoot":"","sources":["../../src/backends/desktop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backend registry — string → backend factory.
|
|
3
|
+
*
|
|
4
|
+
* Used by the CLI (`device-mcp-server --backend android ...`) and
|
|
5
|
+
* `server/app.ts` to resolve a `SandboxBackend` from configuration.
|
|
6
|
+
*
|
|
7
|
+
* **Naming convention** (after the self-hosted plan §3.4 "去掉 backend
|
|
8
|
+
* 私有词"):
|
|
9
|
+
*
|
|
10
|
+
* Canonical short name (CLI surface) Aliases (back-compat / verbose)
|
|
11
|
+
* --------------------------------- --------------------------------------
|
|
12
|
+
* adb → AndroidAdbBackend "android"
|
|
13
|
+
* macos → MacOsBackend "mac", "desktop-macos"
|
|
14
|
+
* linux → LinuxBackend "desktop-linux" (used to be the mock —
|
|
15
|
+
* now resolves to the real native
|
|
16
|
+
* LinuxBackend; the in-memory mock is
|
|
17
|
+
* still reachable via "mock-desktop"
|
|
18
|
+
* and is used by integration tests)
|
|
19
|
+
* windows → WindowsBackend "win", "desktop-windows"
|
|
20
|
+
* ios → IosBackend (zero caps stub, reserved for WDA / libimobiledevice)
|
|
21
|
+
*
|
|
22
|
+
* desktop "smart-resolve": MacOsBackend on darwin,
|
|
23
|
+
* LinuxBackend on linux, WindowsBackend
|
|
24
|
+
* on win32, mock elsewhere.
|
|
25
|
+
*
|
|
26
|
+
* mock-desktop DesktopBackend (in-memory, for tests
|
|
27
|
+
* — never picks itself in `desktop`).
|
|
28
|
+
*/
|
|
29
|
+
import type { BackendFamily, BackendOs, SandboxBackend } from "./base.js";
|
|
30
|
+
import { AndroidAdbBackend, type AndroidAdbBackendOptions } from "./android-adb.js";
|
|
31
|
+
import { DesktopBackend, type DesktopBackendOptions } from "./desktop.js";
|
|
32
|
+
import { LinuxBackend, type LinuxBackendOptions } from "./linux.js";
|
|
33
|
+
import { MacOsBackend, type MacOsBackendOptions } from "./mac.js";
|
|
34
|
+
import { WindowsBackend, type WindowsBackendOptions } from "./stubs/windows.js";
|
|
35
|
+
import { IosBackend } from "./stubs/ios.js";
|
|
36
|
+
/**
|
|
37
|
+
* Public CLI surface — what `--backend` accepts. Intentionally narrow:
|
|
38
|
+
* the four short names from the plan (`adb`, `macos`, `linux`,
|
|
39
|
+
* `windows`) plus `desktop` for "smart-resolve to my OS" and a small
|
|
40
|
+
* back-compat alias set so existing devices.json entries written by
|
|
41
|
+
* older CLI versions still work.
|
|
42
|
+
*/
|
|
43
|
+
export type BackendName = "adb" | "macos" | "linux" | "windows" | "desktop" | "android" | "mac" | "win" | "desktop-linux" | "desktop-windows" | "desktop-macos" | "mock-desktop" | "ios";
|
|
44
|
+
export interface CreateBackendOptions {
|
|
45
|
+
android?: AndroidAdbBackendOptions;
|
|
46
|
+
desktop?: DesktopBackendOptions;
|
|
47
|
+
macos?: MacOsBackendOptions;
|
|
48
|
+
linux?: LinuxBackendOptions;
|
|
49
|
+
windows?: WindowsBackendOptions;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Resolve any of the canonical / alias / smart-resolve names to a real
|
|
53
|
+
* backend instance. Aliases collapse early so the rest of the codebase
|
|
54
|
+
* only ever sees the canonical name when building options.
|
|
55
|
+
*/
|
|
56
|
+
export declare function createBackend(name: BackendName, opts?: CreateBackendOptions): SandboxBackend;
|
|
57
|
+
/**
|
|
58
|
+
* `--backend` autocomplete / `--help` source. Lists canonical names
|
|
59
|
+
* first, then aliases, so help output reads top-down most-useful.
|
|
60
|
+
*/
|
|
61
|
+
export declare const SUPPORTED_BACKENDS: BackendName[];
|
|
62
|
+
export type { SandboxBackend, BackendFamily, BackendOs, AndroidAdbBackendOptions, DesktopBackendOptions, LinuxBackendOptions, MacOsBackendOptions, WindowsBackendOptions, };
|
|
63
|
+
export { AndroidAdbBackend, DesktopBackend, LinuxBackend, MacOsBackend, WindowsBackend, IosBackend, };
|