@oharness/engine 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/acp/claude.d.ts +34 -0
  2. package/dist/acp/claude.js +122 -0
  3. package/dist/acp/claude.js.map +1 -0
  4. package/dist/acp/client.d.ts +193 -0
  5. package/dist/acp/client.js +279 -0
  6. package/dist/acp/client.js.map +1 -0
  7. package/dist/acp/runner.d.ts +80 -0
  8. package/dist/acp/runner.js +159 -0
  9. package/dist/acp/runner.js.map +1 -0
  10. package/dist/agent/agent.d.ts +51 -1
  11. package/dist/agent/agent.js +322 -1
  12. package/dist/agent/agent.js.map +1 -1
  13. package/dist/agent/hooks.js +6 -6
  14. package/dist/agent/hooks.js.map +1 -1
  15. package/dist/agent/session.d.ts +2 -0
  16. package/dist/agent/session.js +19 -2
  17. package/dist/agent/session.js.map +1 -1
  18. package/dist/agent/subagent.d.ts +9 -0
  19. package/dist/agent/subagent.js +6 -0
  20. package/dist/agent/subagent.js.map +1 -1
  21. package/dist/auth/index.d.ts +3 -1
  22. package/dist/auth/index.js +3 -1
  23. package/dist/auth/index.js.map +1 -1
  24. package/dist/auth/manager.js +4 -0
  25. package/dist/auth/manager.js.map +1 -1
  26. package/dist/auth/oauth.d.ts +33 -0
  27. package/dist/auth/oauth.js +59 -8
  28. package/dist/auth/oauth.js.map +1 -1
  29. package/dist/auth/providers/anthropic.d.ts +25 -5
  30. package/dist/auth/providers/anthropic.js +47 -6
  31. package/dist/auth/providers/anthropic.js.map +1 -1
  32. package/dist/auth/providers/chatgpt.d.ts +8 -0
  33. package/dist/auth/providers/chatgpt.js +180 -0
  34. package/dist/auth/providers/chatgpt.js.map +1 -0
  35. package/dist/auth/providers/openrouter.d.ts +2 -0
  36. package/dist/auth/providers/openrouter.js +101 -0
  37. package/dist/auth/providers/openrouter.js.map +1 -0
  38. package/dist/auth/types.d.ts +15 -0
  39. package/dist/auth/types.js.map +1 -1
  40. package/dist/browser/index.d.ts +1 -1
  41. package/dist/browser/plugin.d.ts +6 -1
  42. package/dist/browser/plugin.js.map +1 -1
  43. package/dist/browser/session.d.ts +47 -0
  44. package/dist/browser/session.js +177 -2
  45. package/dist/browser/session.js.map +1 -1
  46. package/dist/browser/tools.js +139 -18
  47. package/dist/browser/tools.js.map +1 -1
  48. package/dist/computer/cua-driver.d.ts +60 -1
  49. package/dist/computer/cua-driver.js +149 -5
  50. package/dist/computer/cua-driver.js.map +1 -1
  51. package/dist/computer/helper-client.d.ts +3 -1
  52. package/dist/computer/helper-client.js +3 -0
  53. package/dist/computer/helper-client.js.map +1 -1
  54. package/dist/computer/index.d.ts +3 -2
  55. package/dist/computer/index.js +1 -1
  56. package/dist/computer/index.js.map +1 -1
  57. package/dist/computer/mode.d.ts +15 -0
  58. package/dist/computer/mode.js +11 -1
  59. package/dist/computer/mode.js.map +1 -1
  60. package/dist/computer/session.d.ts +36 -7
  61. package/dist/computer/session.js +118 -17
  62. package/dist/computer/session.js.map +1 -1
  63. package/dist/computer/target.d.ts +19 -0
  64. package/dist/computer/target.js.map +1 -1
  65. package/dist/computer/tools.js +135 -8
  66. package/dist/computer/tools.js.map +1 -1
  67. package/dist/config.d.ts +7 -0
  68. package/dist/config.js.map +1 -1
  69. package/dist/harness.d.ts +52 -0
  70. package/dist/harness.js +113 -12
  71. package/dist/harness.js.map +1 -1
  72. package/dist/mcp/manager.d.ts +15 -0
  73. package/dist/mcp/manager.js +28 -1
  74. package/dist/mcp/manager.js.map +1 -1
  75. package/dist/providers/catalog.json +14 -3
  76. package/dist/providers/models-dev.d.ts +15 -0
  77. package/dist/providers/models-dev.js +14 -0
  78. package/dist/providers/models-dev.js.map +1 -1
  79. package/dist/providers/piai.d.ts +38 -1
  80. package/dist/providers/piai.js +70 -2
  81. package/dist/providers/piai.js.map +1 -1
  82. package/dist/providers/registry.d.ts +16 -1
  83. package/dist/providers/registry.js +42 -11
  84. package/dist/providers/registry.js.map +1 -1
  85. package/dist/runtime-plugins/builtin/studio.d.ts +7 -0
  86. package/dist/runtime-plugins/builtin/studio.js +69 -4
  87. package/dist/runtime-plugins/builtin/studio.js.map +1 -1
  88. package/dist/tools/builtin/bash.js +6 -10
  89. package/dist/tools/builtin/bash.js.map +1 -1
  90. package/dist/util/shell.d.ts +30 -0
  91. package/dist/util/shell.js +70 -0
  92. package/dist/util/shell.js.map +1 -1
  93. package/package.json +3 -3
  94. package/skills/media-generation/SKILL.md +22 -1
@@ -1,6 +1,7 @@
1
1
  import { ComputerArbiter } from "./arbiter.js";
2
2
  import { tierAllows, tierFor, tierRefusal } from "./policy.js";
3
3
  import { ComputerError } from "./target.js";
4
+ import { isComputerEnableMode } from "./mode.js";
4
5
  /**
5
6
  * What every conversation shares: one helper process, one arbiter.
6
7
  *
@@ -15,6 +16,7 @@ export class ComputerRuntime {
15
16
  helperInfo;
16
17
  observers = new Set();
17
18
  snapshotObservers = new Set();
19
+ enableObservers = new Set();
18
20
  constructor(opts) {
19
21
  this.opts = opts;
20
22
  this.arbiter = opts.arbiter ?? new ComputerArbiter();
@@ -64,6 +66,29 @@ export class ComputerRuntime {
64
66
  takeover() {
65
67
  return this.opts.takeover?.() ?? "ask";
66
68
  }
69
+ enableMode() {
70
+ const mode = this.opts.enable?.();
71
+ return isComputerEnableMode(mode) ? mode : "ask";
72
+ }
73
+ /**
74
+ * A conversation's agent switched Computer use on. The + menu tells the
75
+ * server itself; this is how the server hears of the other way, to save the
76
+ * conversation and show the chip and the permission card.
77
+ */
78
+ onEnabled(listener) {
79
+ this.enableObservers.add(listener);
80
+ return () => this.enableObservers.delete(listener);
81
+ }
82
+ emitEnabled(sessionId) {
83
+ for (const listener of this.enableObservers) {
84
+ try {
85
+ listener(sessionId);
86
+ }
87
+ catch {
88
+ // Whoever was told cannot undo the switch by failing.
89
+ }
90
+ }
91
+ }
67
92
  onAction(listener) {
68
93
  this.observers.add(listener);
69
94
  return () => this.observers.delete(listener);
@@ -121,10 +146,12 @@ export class ComputerUseSession {
121
146
  shots = new Map();
122
147
  secureRefs = new Set();
123
148
  /**
124
- * Windows this turn worked in whose last state the agent has not seen in a
125
- * screenshot of its own. Each gets one picture when the turn ends; one the
126
- * agent screenshotted after its last action already has its picture in the
127
- * transcript.
149
+ * The windows this turn worked in, in the order last used, each with the
150
+ * agent's own screenshot of it while that is still how it looks. Each gets
151
+ * one picture under the reply when the turn ends: that screenshot when there
152
+ * is one, else a capture. The screenshot sits folded inside its tool card,
153
+ * where nobody reading the reply sees it, and reusing it costs no capture —
154
+ * so a host without Screen Recording still shows what the agent saw.
128
155
  */
129
156
  unseen = new Map();
130
157
  refFrames = new Map();
@@ -208,7 +235,20 @@ export class ComputerUseSession {
208
235
  }
209
236
  if (!app)
210
237
  throw new ComputerError("not_found", `${input.app} is not running. Use computer_open_app to start it.`);
211
- const windows = (await this.listWindows(app.pid)).filter((w) => !w.minimized);
238
+ let windows = (await this.listWindows(app.pid)).filter((w) => !w.minimized);
239
+ if (!windows.length) {
240
+ // Remembered from an earlier look, it may have been quit and opened
241
+ // again since, under a new pid: read the apps again before saying no.
242
+ const running = await this.listApps();
243
+ const fresh = this.apps.get(app.id.toLowerCase());
244
+ if (!running.some((a) => a.id === app.id)) {
245
+ throw new ComputerError("not_found", `${app.name} is not running. Use computer_open_app to start it.`);
246
+ }
247
+ if (fresh && fresh.pid !== app.pid) {
248
+ app = fresh;
249
+ windows = (await this.listWindows(app.pid)).filter((w) => !w.minimized);
250
+ }
251
+ }
212
252
  const window = windows.find((w) => w.focused) ?? windows[0];
213
253
  if (!window)
214
254
  throw new ComputerError("not_found", `${app.name} has no open window.`);
@@ -280,6 +320,59 @@ export class ComputerUseSession {
280
320
  rememberShot(key, shot) {
281
321
  this.shots.set(key, { width: shot.width, height: shot.height, frame: shot.frame });
282
322
  }
323
+ /**
324
+ * A rectangle `[x0, y0, x1, y1]` in the last screenshot under `key` (a
325
+ * window id, or `display:<id>`), on screen. Clipped to the screenshot, so a
326
+ * region drawn a little past its edge still means its edge.
327
+ */
328
+ regionToScreen(key, what, region) {
329
+ const shot = this.shots.get(key);
330
+ if (!shot) {
331
+ throw new ComputerError("refused", `Take a computer_screenshot of ${what} first; the region is pixels in that screenshot. Or zoom on a ref from computer_read_app.`);
332
+ }
333
+ const [x0, y0, x1, y1] = region.map(Number);
334
+ const left = Math.max(0, Math.min(x0, x1));
335
+ const top = Math.max(0, Math.min(y0, y1));
336
+ const right = Math.min(shot.width, Math.max(x0, x1));
337
+ const bottom = Math.min(shot.height, Math.max(y0, y1));
338
+ if (right - left < 1 || bottom - top < 1) {
339
+ throw new ComputerError("refused", `[${region.join(", ")}] is not inside the ${shot.width}x${shot.height} screenshot.`);
340
+ }
341
+ const sx = shot.frame.w / shot.width;
342
+ const sy = shot.frame.h / shot.height;
343
+ return { x: shot.frame.x + left * sx, y: shot.frame.y + top * sy, w: (right - left) * sx, h: (bottom - top) * sy };
344
+ }
345
+ /** Screen rect → `[x0, y0, x1, y1]` in the last screenshot under `key`, rounded. */
346
+ screenToRegion(key, rect) {
347
+ const shot = this.shots.get(key);
348
+ if (!shot)
349
+ return undefined;
350
+ const px = (x) => Math.round(((x - shot.frame.x) * shot.width) / shot.frame.w);
351
+ const py = (y) => Math.round(((y - shot.frame.y) * shot.height) / shot.frame.h);
352
+ return [px(rect.x), py(rect.y), px(rect.x + rect.w), py(rect.y + rect.h)];
353
+ }
354
+ // ---- displays ----------------------------------------------------------
355
+ /** The monitors, primary first; empty when the layer cannot say. */
356
+ async listDisplays() {
357
+ const target = await this.runtime.target();
358
+ const displays = (await target.displays?.().catch(() => undefined)) ?? [];
359
+ return [...displays].sort((a, b) => Number(b.primary) - Number(a.primary));
360
+ }
361
+ /** A display by id or by name, as the model wrote it. */
362
+ async resolveDisplay(wanted) {
363
+ const displays = await this.listDisplays();
364
+ if (!displays.length)
365
+ return undefined;
366
+ const lower = wanted.trim().toLowerCase();
367
+ const found = displays.find((d) => d.id === wanted.trim()) ??
368
+ displays.find((d) => d.name.toLowerCase() === lower) ??
369
+ (lower === "primary" || lower === "main" ? displays.find((d) => d.primary) : undefined) ??
370
+ displays.find((d) => d.name.toLowerCase().includes(lower));
371
+ if (!found) {
372
+ throw new ComputerError("not_found", `No display "${wanted}". Displays: ${displays.map((d) => `${d.id} "${d.name}"`).join(", ")}.`);
373
+ }
374
+ return found;
375
+ }
283
376
  /**
284
377
  * Map a point in the last screenshot of `window` back to the screen.
285
378
  *
@@ -329,9 +422,14 @@ export class ComputerUseSession {
329
422
  visible = await target.pointVisible(event.window, event.point.x, event.point.y).catch(() => false);
330
423
  }
331
424
  if (event.window && event.kind !== "control" && event.kind !== "release") {
425
+ const seen = this.unseen.get(event.window);
426
+ // Looking — a tree read, a zoom — changes nothing: a screenshot taken
427
+ // before it is still the window's state. Anything else makes it stale.
332
428
  // Re-inserted, so the order is the order the windows were last used in.
333
- this.unseen.delete(event.window);
334
- this.unseen.set(event.window, event.app ?? known?.app ?? "");
429
+ if (!(event.kind === "look" && seen?.shot)) {
430
+ this.unseen.delete(event.window);
431
+ this.unseen.set(event.window, { app: event.app ?? known?.app ?? "" });
432
+ }
335
433
  }
336
434
  this.runtime.emit({
337
435
  ...event,
@@ -341,9 +439,11 @@ export class ComputerUseSession {
341
439
  label: this.holder().label,
342
440
  });
343
441
  }
344
- /** The agent's own screenshot of this window: the transcript already shows its state. */
345
- sawWindow(window) {
442
+ /** The agent's own screenshot of this window: its state, until the next action on it. */
443
+ sawWindow(window, shot) {
444
+ const app = this.unseen.get(window)?.app ?? this.windowsById.get(window)?.app ?? "";
346
445
  this.unseen.delete(window);
446
+ this.unseen.set(window, { app, ...(shot ? { shot } : {}) });
347
447
  }
348
448
  /** The turn ended: let go of windows and control, so others need not wait out the lease. */
349
449
  endTurn() {
@@ -354,13 +454,14 @@ export class ComputerUseSession {
354
454
  this.runtime.emit({ sessionId: this.sessionId, label: this.holder().label, kind: "idle" });
355
455
  const windows = [...this.unseen].slice(-SNAPSHOT_MAX_WINDOWS);
356
456
  this.unseen.clear();
357
- if (windows.length && this.runtime.canSnapshot())
358
- void this.snapshotTurn(windows);
457
+ const capture = this.runtime.canSnapshot();
458
+ if (windows.some(([, seen]) => seen.shot || capture))
459
+ void this.snapshotTurn(windows, capture);
359
460
  }
360
- async snapshotTurn(windows) {
461
+ async snapshotTurn(windows, capture) {
361
462
  const shots = [];
362
- for (const [window, app] of windows) {
363
- const image = await this.runtime.snapshot(window);
463
+ for (const [window, { app, shot }] of windows) {
464
+ const image = shot ?? (capture ? await this.runtime.snapshot(window) : undefined);
364
465
  if (!image)
365
466
  continue;
366
467
  const title = this.windowsById.get(window)?.title;
@@ -380,10 +481,10 @@ export class ComputerUseSession {
380
481
  }
381
482
  /**
382
483
  * At most this many windows get a picture per turn: a turn that went through
383
- * six apps is read back by its last few, and each picture is a capture and a
384
- * file.
484
+ * ten apps is read back by its last few, and each picture is a capture and a
485
+ * file. The page shows one row of them and opens the rest from it.
385
486
  */
386
- const SNAPSHOT_MAX_WINDOWS = 3;
487
+ const SNAPSHOT_MAX_WINDOWS = 6;
387
488
  /** Refs look like `w<window>.<n>`; the window id is everything between. */
388
489
  export function windowOfRef(ref) {
389
490
  const match = /^w(.+)\.\d+$/.exec(ref);
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/computer/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/computer/session.ts"],"names":[],"mappings":"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"}
@@ -49,6 +49,16 @@ export interface Shot {
49
49
  /** Where the image sits on screen, in screen units. */
50
50
  frame: Rect;
51
51
  }
52
+ /** One monitor. Its `frame` is in screen units, like everything else here. */
53
+ export interface DisplayInfo {
54
+ /** Opaque: the CGDirectDisplayID on macOS, an index on Windows. */
55
+ id: string;
56
+ name: string;
57
+ frame: Rect;
58
+ /** Pixels per screen unit: 2 on a Retina display, 1 on Windows (already pixels). */
59
+ scale: number;
60
+ primary: boolean;
61
+ }
52
62
  export interface AxNode {
53
63
  /** Opaque, `w<window>.<n>`; valid until the window is read again. */
54
64
  ref: string;
@@ -142,11 +152,20 @@ export interface ComputerTarget {
142
152
  windows(opts?: {
143
153
  pid?: number;
144
154
  }): Promise<WindowInfo[]>;
155
+ /**
156
+ * A window (default) or a whole display, as an image at most `maxWidth`
157
+ * wide. With `region` — screen units, inside that window or display — only
158
+ * that part, at the display's full pixel density up to `maxWidth`; the
159
+ * shot's `frame` then says which part it is.
160
+ */
145
161
  screenshot(opts: {
146
162
  window?: string;
147
163
  display?: string;
164
+ region?: Rect;
148
165
  maxWidth?: number;
149
166
  }): Promise<Shot>;
167
+ /** The monitors, primary first. Optional: a layer without it has one display as far as the agent knows. */
168
+ displays?(): Promise<DisplayInfo[]>;
150
169
  axTree(opts: {
151
170
  window: string;
152
171
  depth?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"target.js","sourceRoot":"","sources":["../../src/computer/target.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAmFH;;;;GAIG;AACH,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,IAAI,CAAoB;IACxB,KAAK,CAA6B;IAE3C,YAAY,IAAuB,EAAE,OAAe,EAAE,KAAiC;QACrF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAChC,CAAC;CACF"}
1
+ {"version":3,"file":"target.js","sourceRoot":"","sources":["../../src/computer/target.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA8FH;;;;GAIG;AACH,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,IAAI,CAAoB;IACxB,KAAK,CAA6B;IAE3C,YAAY,IAAuB,EAAE,OAAe,EAAE,KAAiC;QACrF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAChC,CAAC;CACF"}
@@ -3,6 +3,7 @@ import { defineTool } from "../tools/define.js";
3
3
  import { toolError, toolImage, toolText } from "../tools/types.js";
4
4
  import { errorMessage } from "../core/errors.js";
5
5
  import { ComputerError } from "./target.js";
6
+ import { COMPUTER_ENABLE_TOOL, computerOn, setComputerOn } from "./mode.js";
6
7
  /**
7
8
  * The computer tools.
8
9
  *
@@ -16,6 +17,13 @@ import { ComputerError } from "./target.js";
16
17
  */
17
18
  /** Screenshots are sent at most this wide; the frame maps coordinates back. */
18
19
  const SHOT_MAX_WIDTH = 1280;
20
+ /**
21
+ * A zoom is sent at most this wide: past it a model downscales the image
22
+ * anyway, and the point of a zoom is that nothing gets downscaled.
23
+ */
24
+ const ZOOM_MAX_WIDTH = 1568;
25
+ /** Margin around a zoomed element, in screen units, so its edges are in the picture. */
26
+ const ZOOM_REF_MARGIN = 12;
19
27
  /** Nodes in one tree read, so a huge window cannot flood the context. */
20
28
  const TREE_MAX_NODES = 400;
21
29
  const target = {
@@ -41,8 +49,16 @@ export function createComputerTools(session) {
41
49
  renderTitle: () => "computer_list_apps",
42
50
  async execute(_input, ctx) {
43
51
  return run(session, ctx, async () => {
44
- const [apps, windows] = await Promise.all([session.listApps(), session.listWindows()]);
52
+ const [apps, windows, displays] = await Promise.all([session.listApps(), session.listWindows(), session.listDisplays()]);
45
53
  const lines = [];
54
+ // One monitor needs no saying; with more, each window says where it is.
55
+ const several = displays.length > 1;
56
+ if (several) {
57
+ lines.push("Displays:");
58
+ for (const d of displays)
59
+ lines.push(` display ${d.id}: ${d.name} — ${Math.round(d.frame.w)}x${Math.round(d.frame.h)} at (${Math.round(d.frame.x)}, ${Math.round(d.frame.y)})${d.primary ? " [primary]" : ""}`);
60
+ lines.push("");
61
+ }
46
62
  for (const app of apps) {
47
63
  const own = windows.filter((w) => w.pid === app.pid);
48
64
  if (!own.length && !app.active)
@@ -50,7 +66,8 @@ export function createComputerTools(session) {
50
66
  const tier = session.tierOf({ appId: app.id, app: app.name });
51
67
  lines.push(`${app.name} (${app.id})${app.active ? " — frontmost" : ""}${tier === "full" ? "" : ` — ${tier === "read" ? "look only" : tier === "click" ? "click only" : "blocked"}`}`);
52
68
  for (const w of own) {
53
- lines.push(` window ${w.id}: ${w.title || "(untitled)"}${w.minimized ? " [minimized]" : w.onScreen === false ? " [not on screen]" : ""}${w.focused ? " [focused]" : ""}`);
69
+ const on = several && !w.minimized && w.onScreen !== false ? displayOf(w.frame, displays) : undefined;
70
+ lines.push(` window ${w.id}: ${w.title || "(untitled)"}${w.minimized ? " [minimized]" : w.onScreen === false ? " [not on screen]" : ""}${w.focused ? " [focused]" : ""}${on ? ` [display ${on.id}]` : ""}`);
54
71
  }
55
72
  }
56
73
  return toolText(lines.join("\n") || "No apps with windows.");
@@ -89,7 +106,7 @@ export function createComputerTools(session) {
89
106
  description: "Take a screenshot of one window (default) or a whole display. Returns the image; x/y in other tools are pixels in the latest screenshot of that window.",
90
107
  parameters: z.object({
91
108
  ...target,
92
- display: z.string().optional().describe("A display id, to capture a whole screen instead of a window."),
109
+ display: z.string().optional().describe('A display id or name from computer_list_apps ("primary" works too), to capture a whole screen instead of a window.'),
93
110
  }),
94
111
  // Looking changes nothing, so plan mode allows it; the first look at an
95
112
  // app still asks, because a screenshot shows whatever is in it.
@@ -100,16 +117,18 @@ export function createComputerTools(session) {
100
117
  return run(session, ctx, async () => {
101
118
  const t = await session.runtime.target();
102
119
  if (input.display) {
103
- const shot = await t.screenshot({ display: input.display, maxWidth: SHOT_MAX_WIDTH });
104
- session.rememberShot(`display:${input.display}`, shot);
105
- return toolImage(shot.mimeType ?? "image/jpeg", shot.data, `Display ${input.display}, ${shot.width}x${shot.height}.`);
120
+ const display = await session.resolveDisplay(input.display);
121
+ const id = display?.id ?? input.display;
122
+ const shot = await t.screenshot({ display: id, maxWidth: SHOT_MAX_WIDTH });
123
+ session.rememberShot(`display:${id}`, shot);
124
+ return toolImage(shot.mimeType ?? "image/jpeg", shot.data, `Display ${id}${display ? ` (${display.name})` : ""}, ${shot.width}x${shot.height} px.`);
106
125
  }
107
126
  const window = await session.resolveWindow(input);
108
127
  session.guard(window, "look");
109
128
  const shot = await t.screenshot({ window: window.id, maxWidth: SHOT_MAX_WIDTH });
110
129
  session.rememberShot(window.id, shot);
111
130
  await session.announce({ kind: "look", window: window.id, app: window.app }, t);
112
- session.sawWindow(window.id);
131
+ session.sawWindow(window.id, { mimeType: shot.mimeType ?? "image/jpeg", data: shot.data });
113
132
  return toolImage(shot.mimeType ?? "image/jpeg", shot.data, `${window.app} — window ${window.id}, ${shot.width}x${shot.height} px.`);
114
133
  });
115
134
  },
@@ -123,6 +142,53 @@ export function createComputerTools(session) {
123
142
  double: z.boolean().optional(),
124
143
  modifiers: modifiersParam,
125
144
  });
145
+ const zoom = defineTool({
146
+ name: "computer_zoom",
147
+ description: "Look closely at part of a window (or display) you already have a screenshot of: returns just that region at the screen's full pixel density, so small text and fine detail are legible. Pass `region` as [x0, y0, x1, y1] in pixels of the latest computer_screenshot, or `ref` to zoom on an element from computer_read_app. A reading aid only: x/y for the other tools still refer to the screenshot, never to the zoomed image.",
148
+ parameters: z.object({
149
+ ...target,
150
+ display: z.string().optional().describe("Zoom into the last screenshot of this display instead of a window."),
151
+ region: z.array(z.number()).length(4).optional().describe("[x0, y0, x1, y1]: left, top, right, bottom, in pixels of the latest screenshot."),
152
+ ref: z.string().optional().describe("Element ref from computer_read_app; zooms on that element with a small margin."),
153
+ }),
154
+ observes: true,
155
+ principals,
156
+ renderTitle: (input) => `computer_zoom(${input.ref ?? input.region?.join(",") ?? ""})`,
157
+ async execute(input, ctx) {
158
+ return run(session, ctx, async () => {
159
+ if (!input.region === !input.ref)
160
+ throw new ComputerError("refused", "Pass either region (pixels of the latest screenshot) or ref, not both.");
161
+ const t = await session.runtime.target();
162
+ if (input.display) {
163
+ if (!input.region)
164
+ throw new ComputerError("refused", "On a display, zoom by region: refs belong to windows.");
165
+ const display = await session.resolveDisplay(input.display);
166
+ const id = display?.id ?? input.display;
167
+ const key = `display:${id}`;
168
+ const rect = session.regionToScreen(key, `display ${id}`, input.region);
169
+ const shot = await t.screenshot({ display: id, region: rect, maxWidth: ZOOM_MAX_WIDTH });
170
+ return toolImage(shot.mimeType ?? "image/jpeg", shot.data, zoomCaption(`Display ${id}`, session.screenToRegion(key, shot.frame), shot));
171
+ }
172
+ const window = await session.resolveWindow(input);
173
+ session.guard(window, "look");
174
+ let rect;
175
+ if (input.ref) {
176
+ const frame = session.frameOf(input.ref);
177
+ if (!frame)
178
+ throw new ComputerError("stale_ref", `Unknown ref ${input.ref}, or it has no place on screen. Read the window again with computer_read_app.`);
179
+ rect = within({ x: frame.x - ZOOM_REF_MARGIN, y: frame.y - ZOOM_REF_MARGIN, w: frame.w + 2 * ZOOM_REF_MARGIN, h: frame.h + 2 * ZOOM_REF_MARGIN }, window.frame);
180
+ }
181
+ else {
182
+ rect = session.regionToScreen(window.id, window.app, input.region);
183
+ }
184
+ const shot = await t.screenshot({ window: window.id, region: rect, maxWidth: ZOOM_MAX_WIDTH });
185
+ // Not remembered as the window's screenshot: coordinates keep meaning
186
+ // pixels of the full one.
187
+ await session.announce({ kind: "look", window: window.id, app: window.app }, t);
188
+ return toolImage(shot.mimeType ?? "image/jpeg", shot.data, zoomCaption(window.app, session.screenToRegion(window.id, shot.frame), shot));
189
+ });
190
+ },
191
+ });
126
192
  const click = defineTool({
127
193
  name: "computer_click",
128
194
  description: "Click an element by ref, or a point by x/y from a screenshot. Right-click opens a context menu.",
@@ -365,7 +431,7 @@ export function createComputerTools(session) {
365
431
  });
366
432
  },
367
433
  });
368
- return [listApps, readApp, screenshot, click, typeText, key, menu, scroll, drag, openApp, takeControl, releaseControl, batch];
434
+ return [enableTool(session), listApps, readApp, screenshot, zoom, click, typeText, key, menu, scroll, drag, openApp, takeControl, releaseControl, batch];
369
435
  }
370
436
  const PREVIOUS_FRONT = "computer:previousFront";
371
437
  async function doClick(session, input, _ctx) {
@@ -467,6 +533,29 @@ function refPoint(session, ref) {
467
533
  throw new ComputerError("stale_ref", `Unknown ref ${ref}. Read the window again with computer_read_app.`);
468
534
  return centre(frame);
469
535
  }
536
+ /** The display a window is mostly on: the one holding its centre, else the first it touches. */
537
+ function displayOf(frame, displays) {
538
+ const c = centre(frame);
539
+ const holds = (d, x, y) => x >= d.frame.x && x < d.frame.x + d.frame.w && y >= d.frame.y && y < d.frame.y + d.frame.h;
540
+ return displays.find((d) => holds(d, c.x, c.y)) ?? displays.find((d) => intersects(d.frame, frame));
541
+ }
542
+ function intersects(a, b) {
543
+ return a.x < b.x + b.w && b.x < a.x + a.w && a.y < b.y + b.h && b.y < a.y + a.h;
544
+ }
545
+ /** `rect` clipped to `bounds`. */
546
+ function within(rect, bounds) {
547
+ const x = Math.max(rect.x, bounds.x);
548
+ const y = Math.max(rect.y, bounds.y);
549
+ const right = Math.min(rect.x + rect.w, bounds.x + bounds.w);
550
+ const bottom = Math.min(rect.y + rect.h, bounds.y + bounds.h);
551
+ if (right <= x || bottom <= y)
552
+ throw new ComputerError("refused", "That element is outside its window; scroll it into view first.");
553
+ return { x, y, w: right - x, h: bottom - y };
554
+ }
555
+ function zoomCaption(what, region, shot) {
556
+ const where = region ? `region [${region.join(", ")}] of the last screenshot` : "the region";
557
+ return `${what} — ${where}, at ${shot.width}x${shot.height} px. A reading aid: x/y for other tools still refer to the screenshot, not this image.`;
558
+ }
470
559
  function centre(frame) {
471
560
  return { x: frame.x + frame.w / 2, y: frame.y + frame.h / 2 };
472
561
  }
@@ -534,4 +623,42 @@ async function run(session, ctx, fn) {
534
623
  return toolError(`The computer helper failed: ${errorMessage(err)}`);
535
624
  }
536
625
  }
626
+ /**
627
+ * `computer_enable`: the agent switches Computer use on for its conversation.
628
+ *
629
+ * The setting is read on every question rather than when the tool is built,
630
+ * because a conversation's tools outlive a change in Settings: `off` hides the
631
+ * tool, and `auto` makes it session-local, which the permission engine lets
632
+ * through unasked — what it changes is a flag in this conversation, and each
633
+ * app the agent then reaches still asks on its own. `ask` leaves it an
634
+ * ordinary call, so the prompt goes wherever prompts go, a paired phone too.
635
+ */
636
+ function enableTool(session) {
637
+ const tool = defineTool({
638
+ name: COMPUTER_ENABLE_TOOL,
639
+ description: "Switch on Computer use for this conversation, when the request needs you to see or operate apps on the user's computer (native apps such as Notes, Finder, Excel or Settings). " +
640
+ "Not for web pages (use the browser tools), files or commands (use the file tools and bash). The user may be asked to approve; once on, the computer_* tools appear.",
641
+ parameters: z.object({
642
+ reason: z.string().describe("What you need the computer for, in a few words the user will read, e.g. \"add the meeting to Notes\"."),
643
+ }),
644
+ // Switching it on looks at nothing; plan mode may still turn it on, to look.
645
+ observes: true,
646
+ renderTitle: (input) => `computer_enable(${input.reason})`,
647
+ async execute(_input, ctx) {
648
+ const state = ctx.host.state;
649
+ if (computerOn(state))
650
+ return toolText("Computer use is already on for this conversation.");
651
+ if (session.runtime.enableMode() === "off") {
652
+ return toolError("Computer use can only be switched on by the user here, from the + menu. Ask them to.");
653
+ }
654
+ setComputerOn(state, true);
655
+ session.bind(ctx.sessionId);
656
+ session.runtime.emitEnabled(ctx.sessionId);
657
+ return toolText("Computer use is on for this conversation. The computer_* tools are now available: start with computer_list_apps. Each app still asks the user the first time.");
658
+ },
659
+ });
660
+ Object.defineProperty(tool, "hidden", { get: () => session.runtime.enableMode() === "off", enumerable: true });
661
+ Object.defineProperty(tool, "sessionLocal", { get: () => session.runtime.enableMode() === "auto", enumerable: true });
662
+ return tool;
663
+ }
537
664
  //# sourceMappingURL=tools.js.map