@melra/computer-runtime 0.3.0-alpha.4 → 0.3.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +375 -51
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +70 -1
- package/dist/index.test.js.map +1 -1
- package/package.json +3 -3
package/README.md
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# @melra/computer-runtime
|
|
2
|
+
|
|
3
|
+
Screen and input control for [MELRA](https://github.com/XAGI-Lab/melra):
|
|
4
|
+
capabilities, inspect, screenshot, click, move, drag, type, key, and scroll,
|
|
5
|
+
driven through the host's own automation tooling.
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @melra/computer-runtime
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import { ComputerOperationSchema } from "@melra/protocol";
|
|
13
|
+
import { ComputerRuntime } from "@melra/computer-runtime";
|
|
14
|
+
|
|
15
|
+
const computer = new ComputerRuntime({ artifactDirectory });
|
|
16
|
+
const report = await computer.execute(
|
|
17
|
+
ComputerOperationSchema.parse({ kind: "computer", action: "capabilities" }),
|
|
18
|
+
);
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Ask `capabilities` first. Desktop control depends on platform tooling and on
|
|
22
|
+
permissions the OS grants to the process — on macOS that means Accessibility and
|
|
23
|
+
Screen Recording — so the honest answer on many machines is that some actions are
|
|
24
|
+
unavailable. `capabilities` reports what this host can actually do instead of
|
|
25
|
+
letting a call fail halfway through a sequence; every other action is refused
|
|
26
|
+
with `computer_use_unavailable` when the host cannot support it.
|
|
27
|
+
|
|
28
|
+
Coordinates are validated against the reported screen bounds before an event is
|
|
29
|
+
synthesised, and typed text is escaped for the underlying tool rather than
|
|
30
|
+
concatenated into a script — `escapeSendKeys` is exported for that reason.
|
|
31
|
+
|
|
32
|
+
`inspect` is the read that makes the mutations checkable. It reports the
|
|
33
|
+
frontmost application, the focused window's title, and the display geometry, so
|
|
34
|
+
a task can declare "the frontmost application is Safari" as a post-condition
|
|
35
|
+
with `result_equals` rather than accepting an adapter's `success: true`. Fields
|
|
36
|
+
the platform cannot observe — a window title without macOS Accessibility
|
|
37
|
+
permission, an application on a bare X session — come back absent rather than
|
|
38
|
+
empty, because an empty string would verify as an observation.
|
|
39
|
+
|
|
40
|
+
On macOS `inspect` also reports `secureInput`, and `type` and `key` are refused
|
|
41
|
+
while it is held. Secure keyboard entry means the window server is dropping
|
|
42
|
+
synthetic keystrokes, so the alternative is a task that verifies as a success
|
|
43
|
+
having typed nothing into a focused password field.
|
|
44
|
+
|
|
45
|
+
This is the widest-blast-radius capability in MELRA: it drives the same input
|
|
46
|
+
devices the human is using, and it is not confined to a workspace the way files
|
|
47
|
+
and terminals are. Screenshots capture whatever is on screen, including windows
|
|
48
|
+
belonging to other applications, so treat the artifacts as sensitive.
|
|
49
|
+
|
|
50
|
+
Requires Node.js 22 or newer. Full documentation:
|
|
51
|
+
[github.com/XAGI-Lab/melra](https://github.com/XAGI-Lab/melra)
|
|
52
|
+
|
|
53
|
+
Apache-2.0
|
package/dist/index.d.ts
CHANGED
|
@@ -7,9 +7,35 @@ export interface ComputerCapabilities {
|
|
|
7
7
|
pointer: boolean;
|
|
8
8
|
keyboard: boolean;
|
|
9
9
|
scroll: boolean;
|
|
10
|
+
/** `inspect` can report the focused window and display geometry. */
|
|
11
|
+
inspect: boolean;
|
|
12
|
+
/** `drag` can hold the button down between two points. */
|
|
13
|
+
drag: boolean;
|
|
10
14
|
coordinateSpaces: Array<"normalized" | "pixel">;
|
|
11
15
|
limitations: string[];
|
|
12
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* What the desktop looked like at a moment in time. `inspect` returns this, and
|
|
19
|
+
* a caller can hold a task to it with `result_equals` — "the frontmost
|
|
20
|
+
* application is Safari" is a post-condition an adapter cannot fake by
|
|
21
|
+
* returning `success: true`.
|
|
22
|
+
*
|
|
23
|
+
* Every field is optional because the platforms degrade differently: macOS
|
|
24
|
+
* needs Accessibility permission to name a window at all, X11 needs a window
|
|
25
|
+
* manager that sets `_NET_ACTIVE_WINDOW`, and a headless session has no
|
|
26
|
+
* frontmost anything. A missing field is "not observable here", never "empty".
|
|
27
|
+
*/
|
|
28
|
+
export interface DesktopObservation {
|
|
29
|
+
application?: string;
|
|
30
|
+
windowTitle?: string;
|
|
31
|
+
displayWidth?: number;
|
|
32
|
+
displayHeight?: number;
|
|
33
|
+
/**
|
|
34
|
+
* The OS has given one process exclusive keyboard access — a password field
|
|
35
|
+
* is focused, or a lock screen is up. Synthetic keystrokes do not reach it.
|
|
36
|
+
*/
|
|
37
|
+
secureInput?: boolean;
|
|
38
|
+
}
|
|
13
39
|
export interface ComputerAdapter {
|
|
14
40
|
capabilities(): Promise<ComputerCapabilities>;
|
|
15
41
|
execute(operation: ComputerOperation, artifactDirectory: string, signal?: AbortSignal): Promise<Record<string, unknown>>;
|
|
@@ -18,6 +44,16 @@ export interface ComputerRuntimeOptions {
|
|
|
18
44
|
artifactDirectory: string;
|
|
19
45
|
adapter?: ComputerAdapter;
|
|
20
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Reads secure-input state out of an `ioreg` dump of the console-session
|
|
49
|
+
* dictionary. `undefined` means the dump held no session at all, which is "not
|
|
50
|
+
* observable here" rather than "off".
|
|
51
|
+
*
|
|
52
|
+
* Exported for the test: the negative case is the one a developer machine
|
|
53
|
+
* naturally produces, so the positive case — a real password field taking the
|
|
54
|
+
* keyboard — can only be exercised against captured output.
|
|
55
|
+
*/
|
|
56
|
+
export declare function parseSecureInput(stdout: string): boolean | undefined;
|
|
21
57
|
/**
|
|
22
58
|
* `SendKeys` reads `+^%~(){}[]` as modifiers and grouping rather than as
|
|
23
59
|
* literal characters, so a password containing `+` types a Shift chord and a
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAIzD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,OAAO,EAAE,cAAc,GAAG,eAAe,GAAG,oBAAoB,GAAG,aAAa,CAAC;IACjF,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC,CAAC;IAChD,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC9C,OAAO,CACL,SAAS,EAAE,iBAAiB,EAC5B,iBAAiB,EAAE,MAAM,EACzB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,sBAAsB;IACrC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAIzD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,OAAO,EAAE,cAAc,GAAG,eAAe,GAAG,oBAAoB,GAAG,aAAa,CAAC;IACjF,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,oEAAoE;IACpE,OAAO,EAAE,OAAO,CAAC;IACjB,0DAA0D;IAC1D,IAAI,EAAE,OAAO,CAAC;IACd,gBAAgB,EAAE,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC,CAAC;IAChD,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAkED,MAAM,WAAW,eAAe;IAC9B,YAAY,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC9C,OAAO,CACL,SAAS,EAAE,iBAAiB,EAC5B,iBAAiB,EAAE,MAAM,EACzB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,sBAAsB;IACrC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAwID;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAOpE;AA4bD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AA0XD,wBAAgB,2BAA2B,IAAI,eAAe,CAK7D;AAED,qBAAa,eAAe;IAGd,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;gBAEb,OAAO,EAAE,sBAAsB;IAItD,OAAO,CACX,SAAS,EAAE,iBAAiB,EAC5B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAmDpC"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,66 @@ import { access, mkdir, readFile } from "node:fs/promises";
|
|
|
7
7
|
import { basename, join } from "node:path";
|
|
8
8
|
import { promisify } from "node:util";
|
|
9
9
|
const execFileAsync = promisify(execFile);
|
|
10
|
+
/**
|
|
11
|
+
* Reads an adapter helper's JSON into a `DesktopObservation`, keeping only the
|
|
12
|
+
* declared fields and only when they carry a usable value. A helper that reports
|
|
13
|
+
* an empty window title or a zero display is reporting "I could not see it", and
|
|
14
|
+
* that has to arrive as an absent field: a caller verifying `windowTitle` with
|
|
15
|
+
* `result_equals` must not be handed `""` as though it were observed.
|
|
16
|
+
*/
|
|
17
|
+
function observationFrom(json) {
|
|
18
|
+
let parsed;
|
|
19
|
+
try {
|
|
20
|
+
parsed = JSON.parse(json.trim());
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
throw new Error("computer_inspect_unparseable");
|
|
24
|
+
}
|
|
25
|
+
if (typeof parsed !== "object" || parsed === null) {
|
|
26
|
+
throw new Error("computer_inspect_unparseable");
|
|
27
|
+
}
|
|
28
|
+
const record = parsed;
|
|
29
|
+
const text = (key) => {
|
|
30
|
+
const value = record[key];
|
|
31
|
+
return typeof value === "string" && value.trim() !== "" ? value : undefined;
|
|
32
|
+
};
|
|
33
|
+
const size = (key) => {
|
|
34
|
+
const value = record[key];
|
|
35
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0
|
|
36
|
+
? Math.round(value)
|
|
37
|
+
: undefined;
|
|
38
|
+
};
|
|
39
|
+
const application = text("application");
|
|
40
|
+
const windowTitle = text("windowTitle");
|
|
41
|
+
const displayWidth = size("displayWidth");
|
|
42
|
+
const displayHeight = size("displayHeight");
|
|
43
|
+
return {
|
|
44
|
+
...(application === undefined ? {} : { application }),
|
|
45
|
+
...(windowTitle === undefined ? {} : { windowTitle }),
|
|
46
|
+
...(displayWidth === undefined ? {} : { displayWidth }),
|
|
47
|
+
...(displayHeight === undefined ? {} : { displayHeight }),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Validates a positional action's coordinates and hands them back already
|
|
52
|
+
* narrowed, so callers work with numbers instead of re-asserting the optionals
|
|
53
|
+
* the schema has to leave open for the actions that carry no position.
|
|
54
|
+
*/
|
|
55
|
+
function requirePoints(operation) {
|
|
56
|
+
if (operation.x === undefined || operation.y === undefined) {
|
|
57
|
+
throw new Error(`computer_${operation.action}_requires_coordinates`);
|
|
58
|
+
}
|
|
59
|
+
if (operation.action !== "drag")
|
|
60
|
+
return { x: operation.x, y: operation.y };
|
|
61
|
+
if (operation.toX === undefined || operation.toY === undefined) {
|
|
62
|
+
throw new Error("computer_drag_requires_destination");
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
x: operation.x,
|
|
66
|
+
y: operation.y,
|
|
67
|
+
to: { x: operation.toX, y: operation.toY },
|
|
68
|
+
};
|
|
69
|
+
}
|
|
10
70
|
const ALLOWED_KEYS = {
|
|
11
71
|
ENTER: 36,
|
|
12
72
|
TAB: 48,
|
|
@@ -75,25 +135,93 @@ async function run(file, args, timeoutMs, signal, env) {
|
|
|
75
135
|
}
|
|
76
136
|
}
|
|
77
137
|
function coordinateScript(operation) {
|
|
78
|
-
const x = operation.x ?? 0;
|
|
79
|
-
const y = operation.y ?? 0;
|
|
80
138
|
const normalized = operation.coordinateSpace === "normalized";
|
|
139
|
+
const axis = (value, side) => normalized ? `frame.size.${side} * ${value}` : String(value);
|
|
81
140
|
return `
|
|
82
141
|
ObjC.import("AppKit");
|
|
83
142
|
ObjC.import("CoreGraphics");
|
|
84
143
|
const frame = $.NSScreen.mainScreen.frame;
|
|
85
|
-
const x = ${
|
|
86
|
-
const y = ${
|
|
144
|
+
const x = ${axis(operation.x ?? 0, "width")};
|
|
145
|
+
const y = ${axis(operation.y ?? 0, "height")};
|
|
87
146
|
const point = $.CGPointMake(x, y);
|
|
88
|
-
|
|
89
|
-
$.CGEventPost($.kCGHIDEventTap,
|
|
147
|
+
function post(type, at) {
|
|
148
|
+
$.CGEventPost($.kCGHIDEventTap, $.CGEventCreateMouseEvent(null, type, at, $.kCGMouseButtonLeft));
|
|
149
|
+
}
|
|
150
|
+
post($.kCGEventMouseMoved, point);
|
|
90
151
|
${operation.action === "click" ? `
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
152
|
+
post($.kCGEventLeftMouseDown, point);
|
|
153
|
+
post($.kCGEventLeftMouseUp, point);` : ""}
|
|
154
|
+
${operation.action === "drag" ? `
|
|
155
|
+
const toX = ${axis(operation.toX ?? 0, "width")};
|
|
156
|
+
const toY = ${axis(operation.toY ?? 0, "height")};
|
|
157
|
+
post($.kCGEventLeftMouseDown, point);
|
|
158
|
+
// A single jump from press to release is not a drag to most views — they track
|
|
159
|
+
// the intermediate motion and a lone dragged event reads as a click that moved.
|
|
160
|
+
for (let step = 1; step <= ${MACOS_DRAG_STEPS}; step += 1) {
|
|
161
|
+
const ratio = step / ${MACOS_DRAG_STEPS};
|
|
162
|
+
post($.kCGEventLeftMouseDragged, $.CGPointMake(x + (toX - x) * ratio, y + (toY - y) * ratio));
|
|
163
|
+
}
|
|
164
|
+
post($.kCGEventLeftMouseUp, $.CGPointMake(toX, toY));` : ""}
|
|
95
165
|
`;
|
|
96
166
|
}
|
|
167
|
+
/** Intermediate motion events synthesised between a drag's press and release. */
|
|
168
|
+
const MACOS_DRAG_STEPS = 10;
|
|
169
|
+
const MACOS_INSPECT_SCRIPT = `
|
|
170
|
+
ObjC.import("AppKit");
|
|
171
|
+
const frame = $.NSScreen.mainScreen.frame;
|
|
172
|
+
const out = {
|
|
173
|
+
displayWidth: Math.round(frame.size.width),
|
|
174
|
+
displayHeight: Math.round(frame.size.height),
|
|
175
|
+
};
|
|
176
|
+
// Naming the frontmost application needs Accessibility permission and naming
|
|
177
|
+
// its window needs the application to expose one. Either can be missing on a
|
|
178
|
+
// working machine, so each degrades to an absent field instead of an error.
|
|
179
|
+
try {
|
|
180
|
+
const frontmost = Application("System Events")
|
|
181
|
+
.applicationProcesses.whose({ frontmost: true })[0];
|
|
182
|
+
out.application = frontmost.name();
|
|
183
|
+
try {
|
|
184
|
+
out.windowTitle = frontmost.windows[0].name();
|
|
185
|
+
} catch (error) {}
|
|
186
|
+
} catch (error) {}
|
|
187
|
+
JSON.stringify(out);
|
|
188
|
+
`;
|
|
189
|
+
/**
|
|
190
|
+
* Reads secure-input state out of an `ioreg` dump of the console-session
|
|
191
|
+
* dictionary. `undefined` means the dump held no session at all, which is "not
|
|
192
|
+
* observable here" rather than "off".
|
|
193
|
+
*
|
|
194
|
+
* Exported for the test: the negative case is the one a developer machine
|
|
195
|
+
* naturally produces, so the positive case — a real password field taking the
|
|
196
|
+
* keyboard — can only be exercised against captured output.
|
|
197
|
+
*/
|
|
198
|
+
export function parseSecureInput(stdout) {
|
|
199
|
+
// Absence of the secure-input key only means "off" if a session was reported.
|
|
200
|
+
if (!stdout.includes("kCGSSessionOnConsoleKey"))
|
|
201
|
+
return undefined;
|
|
202
|
+
const match = /"kCGSSessionSecureInputPID"=(-?\d+)/.exec(stdout);
|
|
203
|
+
// The key is written with the holding process's pid and cleared to 0, so a
|
|
204
|
+
// present-but-zero value is still "off".
|
|
205
|
+
return match !== null && Number(match[1]) !== 0;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Whether some process holds a secure keyboard entry session — a password field
|
|
209
|
+
* is focused, or the screen is locked. While it does, synthetic keystrokes are
|
|
210
|
+
* dropped by the window server, so `type` and `key` would report success while
|
|
211
|
+
* typing into nothing.
|
|
212
|
+
*
|
|
213
|
+
* The state lives in the console-session dictionary on `IOResources`. `-d 1`
|
|
214
|
+
* keeps this to a few kilobytes rather than dumping the whole registry.
|
|
215
|
+
*/
|
|
216
|
+
async function macSecureInput(timeoutMs, signal) {
|
|
217
|
+
try {
|
|
218
|
+
const { stdout } = await run("/usr/sbin/ioreg", ["-l", "-d", "1", "-w", "0", "-r", "-c", "IOResources"], Math.min(timeoutMs, 5_000), signal);
|
|
219
|
+
return parseSecureInput(stdout);
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
return undefined;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
97
225
|
class MacOsAdapter {
|
|
98
226
|
async capabilities() {
|
|
99
227
|
const osascript = await executable("/usr/bin/osascript");
|
|
@@ -106,14 +234,32 @@ class MacOsAdapter {
|
|
|
106
234
|
pointer: osascript,
|
|
107
235
|
keyboard: osascript,
|
|
108
236
|
scroll: osascript,
|
|
237
|
+
inspect: osascript,
|
|
238
|
+
drag: osascript,
|
|
109
239
|
coordinateSpaces: ["normalized", "pixel"],
|
|
110
240
|
limitations: [
|
|
111
241
|
"macOS Screen Recording permission is required for screenshots",
|
|
112
242
|
"macOS Accessibility permission is required for input actions",
|
|
113
243
|
"normalized coordinates currently target the main display",
|
|
244
|
+
"inspect omits application and windowTitle without Accessibility permission",
|
|
114
245
|
],
|
|
115
246
|
};
|
|
116
247
|
}
|
|
248
|
+
/**
|
|
249
|
+
* Refuses to send keystrokes while secure input is held. `osascript` exits 0
|
|
250
|
+
* either way, so without this the task verifies as a success that typed
|
|
251
|
+
* nothing into a focused password field.
|
|
252
|
+
*
|
|
253
|
+
* Unconditional, and deliberately not a policy rule: it is not a restriction
|
|
254
|
+
* MELRA imposes on the caller but a fact about where the events go, so
|
|
255
|
+
* unhinged mode has nothing to lift here. An unobservable state is allowed
|
|
256
|
+
* through — only a positive reading blocks.
|
|
257
|
+
*/
|
|
258
|
+
async assertInputLands(operation, signal) {
|
|
259
|
+
if ((await macSecureInput(operation.timeoutMs, signal)) === true) {
|
|
260
|
+
throw new Error("computer_secure_input_active");
|
|
261
|
+
}
|
|
262
|
+
}
|
|
117
263
|
async execute(operation, artifactDirectory, signal) {
|
|
118
264
|
switch (operation.action) {
|
|
119
265
|
case "capabilities":
|
|
@@ -131,8 +277,20 @@ class MacOsAdapter {
|
|
|
131
277
|
sha256: createHash("sha256").update(bytes).digest("hex"),
|
|
132
278
|
};
|
|
133
279
|
}
|
|
280
|
+
case "inspect": {
|
|
281
|
+
const { stdout } = await run("/usr/bin/osascript", ["-l", "JavaScript", "-e", MACOS_INSPECT_SCRIPT], operation.timeoutMs, signal);
|
|
282
|
+
const secureInput = await macSecureInput(operation.timeoutMs, signal);
|
|
283
|
+
return {
|
|
284
|
+
success: true,
|
|
285
|
+
action: "inspect",
|
|
286
|
+
...observationFrom(stdout),
|
|
287
|
+
...(secureInput === undefined ? {} : { secureInput }),
|
|
288
|
+
};
|
|
289
|
+
}
|
|
134
290
|
case "click":
|
|
135
291
|
case "move":
|
|
292
|
+
case "drag":
|
|
293
|
+
requirePoints(operation);
|
|
136
294
|
await run("/usr/bin/osascript", ["-l", "JavaScript", "-e", coordinateScript(operation)], operation.timeoutMs, signal);
|
|
137
295
|
return {
|
|
138
296
|
success: true,
|
|
@@ -140,11 +298,15 @@ class MacOsAdapter {
|
|
|
140
298
|
coordinateSpace: operation.coordinateSpace,
|
|
141
299
|
x: operation.x,
|
|
142
300
|
y: operation.y,
|
|
301
|
+
...(operation.action === "drag"
|
|
302
|
+
? { toX: operation.toX, toY: operation.toY }
|
|
303
|
+
: {}),
|
|
143
304
|
};
|
|
144
305
|
case "type": {
|
|
145
306
|
if (operation.text === undefined) {
|
|
146
307
|
throw new Error("computer_type_requires_text");
|
|
147
308
|
}
|
|
309
|
+
await this.assertInputLands(operation, signal);
|
|
148
310
|
await run("/usr/bin/osascript", [
|
|
149
311
|
"-e",
|
|
150
312
|
"on run argv",
|
|
@@ -162,6 +324,7 @@ class MacOsAdapter {
|
|
|
162
324
|
const keyCode = key === undefined ? undefined : ALLOWED_KEYS[key];
|
|
163
325
|
if (keyCode === undefined)
|
|
164
326
|
throw new Error("computer_key_not_allowed");
|
|
327
|
+
await this.assertInputLands(operation, signal);
|
|
165
328
|
await run("/usr/bin/osascript", [
|
|
166
329
|
"-e",
|
|
167
330
|
`tell application "System Events" to key code ${keyCode}`,
|
|
@@ -202,39 +365,47 @@ class LinuxXdotoolAdapter {
|
|
|
202
365
|
pointer: xdotool !== undefined,
|
|
203
366
|
keyboard: xdotool !== undefined,
|
|
204
367
|
scroll: xdotool !== undefined,
|
|
368
|
+
inspect: xdotool !== undefined,
|
|
369
|
+
drag: xdotool !== undefined,
|
|
205
370
|
coordinateSpaces: ["normalized", "pixel"],
|
|
206
371
|
limitations: [
|
|
207
372
|
"input actions require xdotool and an X11 session",
|
|
208
373
|
"Wayland compositors may deny synthetic input",
|
|
209
374
|
"normalized coordinates target the current display size reported by xdotool",
|
|
375
|
+
"inspect cannot report secure input; X11 has no equivalent state",
|
|
210
376
|
],
|
|
211
377
|
};
|
|
212
378
|
}
|
|
213
|
-
async
|
|
379
|
+
async xdotoolOutput(args, operation, signal) {
|
|
214
380
|
const executablePath = await this.command("xdotool");
|
|
215
381
|
if (executablePath === undefined)
|
|
216
382
|
throw new Error("computer_input_unavailable");
|
|
217
|
-
await run(executablePath, args, operation.timeoutMs, signal);
|
|
383
|
+
return await run(executablePath, args, operation.timeoutMs, signal);
|
|
218
384
|
}
|
|
219
|
-
async
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
return { x: Math.round(operation.x), y: Math.round(operation.y) };
|
|
225
|
-
}
|
|
226
|
-
const executablePath = await this.command("xdotool");
|
|
227
|
-
if (executablePath === undefined)
|
|
228
|
-
throw new Error("computer_input_unavailable");
|
|
229
|
-
const { stdout } = await run(executablePath, ["getdisplaygeometry"], operation.timeoutMs, signal);
|
|
385
|
+
async xdotool(args, operation, signal) {
|
|
386
|
+
await this.xdotoolOutput(args, operation, signal);
|
|
387
|
+
}
|
|
388
|
+
async geometry(operation, signal) {
|
|
389
|
+
const { stdout } = await this.xdotoolOutput(["getdisplaygeometry"], operation, signal);
|
|
230
390
|
const [width, height] = stdout.trim().split(/\s+/).map(Number);
|
|
231
|
-
if (
|
|
391
|
+
if (width === undefined ||
|
|
392
|
+
height === undefined ||
|
|
393
|
+
!Number.isFinite(width) ||
|
|
394
|
+
!Number.isFinite(height)) {
|
|
232
395
|
throw new Error("computer_display_geometry_unavailable");
|
|
233
396
|
}
|
|
234
|
-
return {
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
397
|
+
return { width, height };
|
|
398
|
+
}
|
|
399
|
+
async toPixels(operation, x, y, signal) {
|
|
400
|
+
if (operation.coordinateSpace === "pixel") {
|
|
401
|
+
return { x: Math.round(x), y: Math.round(y) };
|
|
402
|
+
}
|
|
403
|
+
const { width, height } = await this.geometry(operation, signal);
|
|
404
|
+
return { x: Math.round(width * x), y: Math.round(height * y) };
|
|
405
|
+
}
|
|
406
|
+
async coordinates(operation, signal) {
|
|
407
|
+
const point = requirePoints(operation);
|
|
408
|
+
return await this.toPixels(operation, point.x, point.y, signal);
|
|
238
409
|
}
|
|
239
410
|
async execute(operation, artifactDirectory, signal) {
|
|
240
411
|
switch (operation.action) {
|
|
@@ -263,6 +434,38 @@ class LinuxXdotoolAdapter {
|
|
|
263
434
|
sha256: createHash("sha256").update(bytes).digest("hex"),
|
|
264
435
|
};
|
|
265
436
|
}
|
|
437
|
+
case "inspect": {
|
|
438
|
+
const { width, height } = await this.geometry(operation, signal);
|
|
439
|
+
const observation = {
|
|
440
|
+
displayWidth: width,
|
|
441
|
+
displayHeight: height,
|
|
442
|
+
};
|
|
443
|
+
// No active window is an ordinary state on a bare X session, and
|
|
444
|
+
// `xdotool` exits non-zero for it, so a failure here means "nothing is
|
|
445
|
+
// focused" rather than "inspect failed".
|
|
446
|
+
try {
|
|
447
|
+
const { stdout } = await this.xdotoolOutput(["getactivewindow", "getwindowname"], operation, signal);
|
|
448
|
+
const title = stdout.trim();
|
|
449
|
+
if (title !== "")
|
|
450
|
+
observation.windowTitle = title;
|
|
451
|
+
}
|
|
452
|
+
catch {
|
|
453
|
+
/* no focused window */
|
|
454
|
+
}
|
|
455
|
+
try {
|
|
456
|
+
const { stdout } = await this.xdotoolOutput(["getactivewindow", "getwindowpid"], operation, signal);
|
|
457
|
+
const pid = Number(stdout.trim());
|
|
458
|
+
if (Number.isInteger(pid) && pid > 0) {
|
|
459
|
+
const command = await readFile(`/proc/${pid}/comm`, "utf8");
|
|
460
|
+
if (command.trim() !== "")
|
|
461
|
+
observation.application = command.trim();
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
catch {
|
|
465
|
+
/* window belongs to a remote or exited process */
|
|
466
|
+
}
|
|
467
|
+
return { success: true, action: "inspect", ...observation };
|
|
468
|
+
}
|
|
266
469
|
case "click":
|
|
267
470
|
case "move": {
|
|
268
471
|
const point = await this.coordinates(operation, signal);
|
|
@@ -272,6 +475,36 @@ class LinuxXdotoolAdapter {
|
|
|
272
475
|
await this.xdotool(args, operation, signal);
|
|
273
476
|
return { success: true, action: operation.action, ...point };
|
|
274
477
|
}
|
|
478
|
+
case "drag": {
|
|
479
|
+
const points = requirePoints(operation);
|
|
480
|
+
// `requirePoints` guarantees this for a drag; repeated so the compiler
|
|
481
|
+
// sees it too, and so a future caller cannot reach here without one.
|
|
482
|
+
if (points.to === undefined) {
|
|
483
|
+
throw new Error("computer_drag_requires_destination");
|
|
484
|
+
}
|
|
485
|
+
const from = await this.toPixels(operation, points.x, points.y, signal);
|
|
486
|
+
const to = await this.toPixels(operation, points.to.x, points.to.y, signal);
|
|
487
|
+
await this.xdotool([
|
|
488
|
+
"mousemove",
|
|
489
|
+
String(from.x),
|
|
490
|
+
String(from.y),
|
|
491
|
+
"mousedown",
|
|
492
|
+
"1",
|
|
493
|
+
"mousemove",
|
|
494
|
+
String(to.x),
|
|
495
|
+
String(to.y),
|
|
496
|
+
"mouseup",
|
|
497
|
+
"1",
|
|
498
|
+
], operation, signal);
|
|
499
|
+
return {
|
|
500
|
+
success: true,
|
|
501
|
+
action: "drag",
|
|
502
|
+
x: from.x,
|
|
503
|
+
y: from.y,
|
|
504
|
+
toX: to.x,
|
|
505
|
+
toY: to.y,
|
|
506
|
+
};
|
|
507
|
+
}
|
|
275
508
|
case "type":
|
|
276
509
|
if (operation.text === undefined)
|
|
277
510
|
throw new Error("computer_type_requires_text");
|
|
@@ -373,10 +606,67 @@ if ($env:MELRA_CLICK -eq '1') {
|
|
|
373
606
|
[MelraInput]::mouse_event(0x0002, 0, 0, 0, [IntPtr]::Zero)
|
|
374
607
|
[MelraInput]::mouse_event(0x0004, 0, 0, 0, [IntPtr]::Zero)
|
|
375
608
|
}
|
|
609
|
+
if ($env:MELRA_DRAG -eq '1') {
|
|
610
|
+
if ($env:MELRA_NORMALIZED -eq '1') {
|
|
611
|
+
$tx = [int][Math]::Round($bounds.X + $bounds.Width * [double]$env:MELRA_TO_X)
|
|
612
|
+
$ty = [int][Math]::Round($bounds.Y + $bounds.Height * [double]$env:MELRA_TO_Y)
|
|
613
|
+
} else {
|
|
614
|
+
$tx = [int][Math]::Round([double]$env:MELRA_TO_X)
|
|
615
|
+
$ty = [int][Math]::Round([double]$env:MELRA_TO_Y)
|
|
616
|
+
}
|
|
617
|
+
[MelraInput]::mouse_event(0x0002, 0, 0, 0, [IntPtr]::Zero)
|
|
618
|
+
# Controls track the motion between press and release; jumping straight to the
|
|
619
|
+
# destination reads as a click, not a drag.
|
|
620
|
+
for ($step = 1; $step -le 10; $step++) {
|
|
621
|
+
[void][MelraInput]::SetCursorPos(
|
|
622
|
+
[int][Math]::Round($x + ($tx - $x) * $step / 10),
|
|
623
|
+
[int][Math]::Round($y + ($ty - $y) * $step / 10))
|
|
624
|
+
Start-Sleep -Milliseconds 10
|
|
625
|
+
}
|
|
626
|
+
[MelraInput]::mouse_event(0x0004, 0, 0, 0, [IntPtr]::Zero)
|
|
627
|
+
}
|
|
376
628
|
if ($env:MELRA_WHEEL -ne $null -and $env:MELRA_WHEEL -ne '') {
|
|
377
629
|
[MelraInput]::mouse_event(0x0800, 0, 0, [uint32][int]$env:MELRA_WHEEL, [IntPtr]::Zero)
|
|
378
630
|
}
|
|
379
|
-
|
|
631
|
+
# The press point, and for a drag the release point after it. Both come from
|
|
632
|
+
# here because only this script has seen the virtual desktop the caller's
|
|
633
|
+
# normalized coordinates resolve against.
|
|
634
|
+
Write-Output "$x $y $tx $ty".Trim()
|
|
635
|
+
`;
|
|
636
|
+
/**
|
|
637
|
+
* Foreground window, its owning process, and the virtual desktop size, as JSON.
|
|
638
|
+
*
|
|
639
|
+
* `ConvertTo-Json` is given an ordered hashtable so the shape is fixed, and
|
|
640
|
+
* `-Compress` keeps it to the single line the caller parses.
|
|
641
|
+
*/
|
|
642
|
+
const WINDOWS_INSPECT_SCRIPT = `
|
|
643
|
+
$ErrorActionPreference = 'Stop'
|
|
644
|
+
Add-Type -AssemblyName System.Windows.Forms
|
|
645
|
+
Add-Type -TypeDefinition @'
|
|
646
|
+
using System;
|
|
647
|
+
using System.Text;
|
|
648
|
+
using System.Runtime.InteropServices;
|
|
649
|
+
public static class MelraWindow {
|
|
650
|
+
[DllImport("user32.dll")] public static extern IntPtr GetForegroundWindow();
|
|
651
|
+
[DllImport("user32.dll", CharSet = CharSet.Unicode)] public static extern int GetWindowTextW(IntPtr handle, StringBuilder text, int count);
|
|
652
|
+
[DllImport("user32.dll")] public static extern uint GetWindowThreadProcessId(IntPtr handle, out uint processId);
|
|
653
|
+
}
|
|
654
|
+
'@
|
|
655
|
+
$bounds = [System.Windows.Forms.SystemInformation]::VirtualScreen
|
|
656
|
+
$out = [ordered]@{ displayWidth = $bounds.Width; displayHeight = $bounds.Height }
|
|
657
|
+
$window = [MelraWindow]::GetForegroundWindow()
|
|
658
|
+
if ($window -ne [IntPtr]::Zero) {
|
|
659
|
+
$buffer = New-Object System.Text.StringBuilder 512
|
|
660
|
+
[void][MelraWindow]::GetWindowTextW($window, $buffer, $buffer.Capacity)
|
|
661
|
+
$out.windowTitle = $buffer.ToString()
|
|
662
|
+
$processId = 0
|
|
663
|
+
[void][MelraWindow]::GetWindowThreadProcessId($window, [ref]$processId)
|
|
664
|
+
# The owning process can exit between the two calls, and a protected process
|
|
665
|
+
# cannot be opened at all; either way the window is still worth reporting.
|
|
666
|
+
$process = Get-Process -Id $processId -ErrorAction SilentlyContinue
|
|
667
|
+
if ($process -ne $null) { $out.application = $process.ProcessName }
|
|
668
|
+
}
|
|
669
|
+
Write-Output ($out | ConvertTo-Json -Compress)
|
|
380
670
|
`;
|
|
381
671
|
const WINDOWS_SCREENSHOT_SCRIPT = `
|
|
382
672
|
$ErrorActionPreference = 'Stop'
|
|
@@ -426,6 +716,8 @@ class WindowsAdapter {
|
|
|
426
716
|
pointer: available,
|
|
427
717
|
keyboard: available,
|
|
428
718
|
scroll: available,
|
|
719
|
+
inspect: available,
|
|
720
|
+
drag: available,
|
|
429
721
|
coordinateSpaces: ["normalized", "pixel"],
|
|
430
722
|
limitations: [
|
|
431
723
|
...(available
|
|
@@ -435,6 +727,7 @@ class WindowsAdapter {
|
|
|
435
727
|
"SendKeys cannot type into a window running elevated unless this process is elevated too",
|
|
436
728
|
"normalized coordinates span the whole virtual desktop, not one display",
|
|
437
729
|
"per-monitor DPI scaling is not compensated for",
|
|
730
|
+
"inspect cannot report secure input; Windows exposes no equivalent state",
|
|
438
731
|
"every action pays PowerShell startup, and pointer/scroll additionally compile a P/Invoke shim, so raise timeoutMs above its 10s default on a slow or loaded machine",
|
|
439
732
|
],
|
|
440
733
|
};
|
|
@@ -470,24 +763,40 @@ class WindowsAdapter {
|
|
|
470
763
|
sha256: createHash("sha256").update(bytes).digest("hex"),
|
|
471
764
|
};
|
|
472
765
|
}
|
|
766
|
+
case "inspect": {
|
|
767
|
+
const stdout = await this.powershellScript(WINDOWS_INSPECT_SCRIPT, operation, {}, signal);
|
|
768
|
+
return { success: true, action: "inspect", ...observationFrom(stdout) };
|
|
769
|
+
}
|
|
473
770
|
case "click":
|
|
474
|
-
case "move":
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
}
|
|
771
|
+
case "move":
|
|
772
|
+
case "drag": {
|
|
773
|
+
const points = requirePoints(operation);
|
|
478
774
|
const stdout = await this.powershellScript(WINDOWS_POINTER_SCRIPT, operation, {
|
|
479
|
-
MELRA_X: String(
|
|
480
|
-
MELRA_Y: String(
|
|
775
|
+
MELRA_X: String(points.x),
|
|
776
|
+
MELRA_Y: String(points.y),
|
|
481
777
|
MELRA_NORMALIZED: operation.coordinateSpace === "normalized" ? "1" : "0",
|
|
482
778
|
MELRA_MOVE: "1",
|
|
483
779
|
MELRA_CLICK: operation.action === "click" ? "1" : "0",
|
|
780
|
+
MELRA_DRAG: points.to === undefined ? "0" : "1",
|
|
781
|
+
MELRA_TO_X: String(points.to?.x ?? 0),
|
|
782
|
+
MELRA_TO_Y: String(points.to?.y ?? 0),
|
|
484
783
|
MELRA_WHEEL: "",
|
|
485
784
|
}, signal);
|
|
486
785
|
// The script resolves normalized coordinates against the virtual
|
|
487
|
-
// desktop, so the pixel
|
|
786
|
+
// desktop, so the pixel points it actually used are reported back rather
|
|
488
787
|
// than recomputed here from a display size this process never saw.
|
|
489
|
-
const [x, y] = stdout.trim().split(/\s+/).map(Number);
|
|
490
|
-
if (
|
|
788
|
+
const [x, y, toX, toY] = stdout.trim().split(/\s+/).map(Number);
|
|
789
|
+
if (x === undefined ||
|
|
790
|
+
y === undefined ||
|
|
791
|
+
!Number.isFinite(x) ||
|
|
792
|
+
!Number.isFinite(y)) {
|
|
793
|
+
throw new Error("computer_display_geometry_unavailable");
|
|
794
|
+
}
|
|
795
|
+
if (points.to !== undefined &&
|
|
796
|
+
(toX === undefined ||
|
|
797
|
+
toY === undefined ||
|
|
798
|
+
!Number.isFinite(toX) ||
|
|
799
|
+
!Number.isFinite(toY))) {
|
|
491
800
|
throw new Error("computer_display_geometry_unavailable");
|
|
492
801
|
}
|
|
493
802
|
return {
|
|
@@ -496,6 +805,7 @@ class WindowsAdapter {
|
|
|
496
805
|
coordinateSpace: operation.coordinateSpace,
|
|
497
806
|
x,
|
|
498
807
|
y,
|
|
808
|
+
...(points.to === undefined ? {} : { toX, toY }),
|
|
499
809
|
};
|
|
500
810
|
}
|
|
501
811
|
case "type": {
|
|
@@ -546,6 +856,8 @@ class UnavailableAdapter {
|
|
|
546
856
|
pointer: false,
|
|
547
857
|
keyboard: false,
|
|
548
858
|
scroll: false,
|
|
859
|
+
inspect: false,
|
|
860
|
+
drag: false,
|
|
549
861
|
coordinateSpaces: ["normalized", "pixel"],
|
|
550
862
|
limitations: ["no supported local computer-use adapter was detected"],
|
|
551
863
|
};
|
|
@@ -585,24 +897,36 @@ export class ComputerRuntime {
|
|
|
585
897
|
}
|
|
586
898
|
const requiredCapability = operation.action === "screenshot"
|
|
587
899
|
? "screenshot"
|
|
588
|
-
: operation.action === "
|
|
589
|
-
? "
|
|
590
|
-
: operation.action === "
|
|
591
|
-
? "
|
|
592
|
-
: operation.action === "
|
|
593
|
-
? "
|
|
594
|
-
:
|
|
900
|
+
: operation.action === "inspect"
|
|
901
|
+
? "inspect"
|
|
902
|
+
: operation.action === "drag"
|
|
903
|
+
? "drag"
|
|
904
|
+
: operation.action === "click" || operation.action === "move"
|
|
905
|
+
? "pointer"
|
|
906
|
+
: operation.action === "type" || operation.action === "key"
|
|
907
|
+
? "keyboard"
|
|
908
|
+
: operation.action === "scroll"
|
|
909
|
+
? "scroll"
|
|
910
|
+
: undefined;
|
|
595
911
|
if (requiredCapability !== undefined &&
|
|
596
912
|
!capabilities[requiredCapability]) {
|
|
597
913
|
throw new Error(`computer_${requiredCapability}_unavailable`);
|
|
598
914
|
}
|
|
599
|
-
if (["click", "move"].includes(operation.action)
|
|
600
|
-
(operation
|
|
601
|
-
throw new Error(`computer_${operation.action}_requires_coordinates`);
|
|
915
|
+
if (["click", "move", "drag"].includes(operation.action)) {
|
|
916
|
+
requirePoints(operation);
|
|
602
917
|
}
|
|
603
|
-
if (operation.coordinateSpace === "normalized"
|
|
604
|
-
|
|
605
|
-
|
|
918
|
+
if (operation.coordinateSpace === "normalized") {
|
|
919
|
+
// Every positional field shares one space, so the bound applies to the
|
|
920
|
+
// drag destination as much as to the press point.
|
|
921
|
+
const outOfRange = [
|
|
922
|
+
operation.x,
|
|
923
|
+
operation.y,
|
|
924
|
+
operation.toX,
|
|
925
|
+
operation.toY,
|
|
926
|
+
].some((value) => value !== undefined && value > 1);
|
|
927
|
+
if (outOfRange) {
|
|
928
|
+
throw new Error("computer_normalized_coordinates_out_of_range");
|
|
929
|
+
}
|
|
606
930
|
}
|
|
607
931
|
return await this.adapter.execute(operation, this.options.artifactDirectory, signal);
|
|
608
932
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.test.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
import { describe, expect, it } from "vitest";
|
|
4
4
|
import { ComputerOperationSchema } from "@melra/protocol";
|
|
5
|
-
import { ComputerRuntime, } from "./index.js";
|
|
5
|
+
import { ComputerRuntime, parseSecureInput, } from "./index.js";
|
|
6
6
|
class TestAdapter {
|
|
7
7
|
overrides;
|
|
8
8
|
calls = [];
|
|
@@ -18,6 +18,8 @@ class TestAdapter {
|
|
|
18
18
|
pointer: true,
|
|
19
19
|
keyboard: true,
|
|
20
20
|
scroll: true,
|
|
21
|
+
inspect: true,
|
|
22
|
+
drag: true,
|
|
21
23
|
coordinateSpaces: ["normalized", "pixel"],
|
|
22
24
|
limitations: [],
|
|
23
25
|
...this.overrides,
|
|
@@ -61,7 +63,9 @@ describe("ComputerRuntime", () => {
|
|
|
61
63
|
});
|
|
62
64
|
it.each([
|
|
63
65
|
["screenshot", "screenshot", "computer_screenshot_unavailable"],
|
|
66
|
+
["inspect", "inspect", "computer_inspect_unavailable"],
|
|
64
67
|
["click", "pointer", "computer_pointer_unavailable"],
|
|
68
|
+
["drag", "drag", "computer_drag_unavailable"],
|
|
65
69
|
["type", "keyboard", "computer_keyboard_unavailable"],
|
|
66
70
|
["scroll", "scroll", "computer_scroll_unavailable"],
|
|
67
71
|
])("rejects %s when its adapter capability is unavailable", async (action, capability, error) => {
|
|
@@ -76,10 +80,75 @@ describe("ComputerRuntime", () => {
|
|
|
76
80
|
...(action === "click"
|
|
77
81
|
? { coordinateSpace: "pixel", x: 10, y: 10 }
|
|
78
82
|
: {}),
|
|
83
|
+
...(action === "drag"
|
|
84
|
+
? { coordinateSpace: "pixel", x: 10, y: 10, toX: 40, toY: 40 }
|
|
85
|
+
: {}),
|
|
79
86
|
...(action === "type" ? { text: "safe" } : {}),
|
|
80
87
|
};
|
|
81
88
|
await expect(runtime.execute(ComputerOperationSchema.parse(operation))).rejects.toThrow(error);
|
|
82
89
|
expect(adapter.calls).toEqual([]);
|
|
83
90
|
});
|
|
91
|
+
it("requires a destination for a drag and bounds it like the press point", async () => {
|
|
92
|
+
const adapter = new TestAdapter();
|
|
93
|
+
const runtime = new ComputerRuntime({
|
|
94
|
+
artifactDirectory: "/tmp",
|
|
95
|
+
adapter,
|
|
96
|
+
});
|
|
97
|
+
await expect(runtime.execute(ComputerOperationSchema.parse({
|
|
98
|
+
kind: "computer",
|
|
99
|
+
action: "drag",
|
|
100
|
+
coordinateSpace: "pixel",
|
|
101
|
+
x: 10,
|
|
102
|
+
y: 10,
|
|
103
|
+
}))).rejects.toThrow("computer_drag_requires_destination");
|
|
104
|
+
// The destination shares the coordinate space, so it has to be bounded by
|
|
105
|
+
// the same rule — an out-of-range `toY` used to slip through untouched.
|
|
106
|
+
await expect(runtime.execute(ComputerOperationSchema.parse({
|
|
107
|
+
kind: "computer",
|
|
108
|
+
action: "drag",
|
|
109
|
+
coordinateSpace: "normalized",
|
|
110
|
+
x: 0.1,
|
|
111
|
+
y: 0.1,
|
|
112
|
+
toX: 0.5,
|
|
113
|
+
toY: 4,
|
|
114
|
+
}))).rejects.toThrow("computer_normalized_coordinates_out_of_range");
|
|
115
|
+
expect(adapter.calls).toEqual([]);
|
|
116
|
+
});
|
|
117
|
+
it("passes a bounded drag and a read-only inspect to the adapter", async () => {
|
|
118
|
+
const adapter = new TestAdapter();
|
|
119
|
+
const runtime = new ComputerRuntime({
|
|
120
|
+
artifactDirectory: "/tmp",
|
|
121
|
+
adapter,
|
|
122
|
+
});
|
|
123
|
+
await runtime.execute(ComputerOperationSchema.parse({ kind: "computer", action: "inspect" }));
|
|
124
|
+
await runtime.execute(ComputerOperationSchema.parse({
|
|
125
|
+
kind: "computer",
|
|
126
|
+
action: "drag",
|
|
127
|
+
coordinateSpace: "normalized",
|
|
128
|
+
x: 0.1,
|
|
129
|
+
y: 0.2,
|
|
130
|
+
toX: 0.8,
|
|
131
|
+
toY: 0.9,
|
|
132
|
+
}));
|
|
133
|
+
expect(adapter.calls).toEqual(["inspect", "drag"]);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
describe("parseSecureInput", () => {
|
|
137
|
+
// Trimmed from real `ioreg -l -d 1 -w 0 -r -c IOResources` output on macOS 26.
|
|
138
|
+
const session = '"IOConsoleUsers" = ({"kCGSSessionOnConsoleKey"=Yes,"kSCSecuritySessionID"=100024,' +
|
|
139
|
+
'"kCGSSessionIDKey"=257,"kCGSSessionUserNameKey"="dheeraj"';
|
|
140
|
+
it("reads a held secure-input session as active", () => {
|
|
141
|
+
expect(parseSecureInput(`${session},"kCGSSessionSecureInputPID"=843})`)).toBe(true);
|
|
142
|
+
});
|
|
143
|
+
it("reads a session without the key, or with it cleared, as inactive", () => {
|
|
144
|
+
expect(parseSecureInput(`${session}})`)).toBe(false);
|
|
145
|
+
expect(parseSecureInput(`${session},"kCGSSessionSecureInputPID"=0})`)).toBe(false);
|
|
146
|
+
});
|
|
147
|
+
it("reports no reading at all when no console session was dumped", () => {
|
|
148
|
+
// Absence of the key in output that never described a session is not
|
|
149
|
+
// evidence that secure input is off — reporting `false` here would let a
|
|
150
|
+
// keystroke-swallowing state through as verified.
|
|
151
|
+
expect(parseSecureInput("+-o Root <class IORegistryEntry>")).toBe(undefined);
|
|
152
|
+
});
|
|
84
153
|
});
|
|
85
154
|
//# sourceMappingURL=index.test.js.map
|
package/dist/index.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,sCAAsC;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EACL,eAAe,
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@melra/computer-runtime",
|
|
3
|
-
"version": "0.3.0-alpha.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.3.0-alpha.6",
|
|
4
|
+
"description": "Computer-use reference effect adapter for the MELRA kernel.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"dist"
|
|
22
22
|
],
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@melra/protocol": "0.3.0-alpha.
|
|
24
|
+
"@melra/protocol": "0.3.0-alpha.6"
|
|
25
25
|
},
|
|
26
26
|
"scripts": {
|
|
27
27
|
"build": "tsc -p tsconfig.json",
|