@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 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
@@ -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;AAqXD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAiSD,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;CA2CpC"}
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 = ${normalized ? `frame.size.width * ${x}` : x};
86
- const y = ${normalized ? `frame.size.height * ${y}` : 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
- const move = $.CGEventCreateMouseEvent(null, $.kCGEventMouseMoved, point, $.kCGMouseButtonLeft);
89
- $.CGEventPost($.kCGHIDEventTap, move);
147
+ function post(type, at) {
148
+ $.CGEventPost($.kCGHIDEventTap, $.CGEventCreateMouseEvent(null, type, at, $.kCGMouseButtonLeft));
149
+ }
150
+ post($.kCGEventMouseMoved, point);
90
151
  ${operation.action === "click" ? `
91
- const down = $.CGEventCreateMouseEvent(null, $.kCGEventLeftMouseDown, point, $.kCGMouseButtonLeft);
92
- const up = $.CGEventCreateMouseEvent(null, $.kCGEventLeftMouseUp, point, $.kCGMouseButtonLeft);
93
- $.CGEventPost($.kCGHIDEventTap, down);
94
- $.CGEventPost($.kCGHIDEventTap, up);` : ""}
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 xdotool(args, operation, signal) {
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 coordinates(operation, signal) {
220
- if (operation.x === undefined || operation.y === undefined) {
221
- throw new Error(`computer_${operation.action}_requires_coordinates`);
222
- }
223
- if (operation.coordinateSpace === "pixel") {
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 (!Number.isFinite(width) || !Number.isFinite(height)) {
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
- x: Math.round(width * operation.x),
236
- y: Math.round(height * operation.y),
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
- Write-Output "$x $y"
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
- if (operation.x === undefined || operation.y === undefined) {
476
- throw new Error(`computer_${operation.action}_requires_coordinates`);
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(operation.x),
480
- MELRA_Y: String(operation.y),
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 point it actually used is reported back rather
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 (!Number.isFinite(x) || !Number.isFinite(y)) {
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 === "click" || operation.action === "move"
589
- ? "pointer"
590
- : operation.action === "type" || operation.action === "key"
591
- ? "keyboard"
592
- : operation.action === "scroll"
593
- ? "scroll"
594
- : undefined;
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.x === undefined || operation.y === undefined)) {
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
- ((operation.x ?? 0) > 1 || (operation.y ?? 0) > 1)) {
605
- throw new Error("computer_normalized_coordinates_out_of_range");
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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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
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",
4
- "description": "Policy-governed local computer-use runtime for MELRA.",
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.4"
24
+ "@melra/protocol": "0.3.0-alpha.6"
25
25
  },
26
26
  "scripts": {
27
27
  "build": "tsc -p tsconfig.json",