@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.
- package/dist/acp/claude.d.ts +34 -0
- package/dist/acp/claude.js +122 -0
- package/dist/acp/claude.js.map +1 -0
- package/dist/acp/client.d.ts +193 -0
- package/dist/acp/client.js +279 -0
- package/dist/acp/client.js.map +1 -0
- package/dist/acp/runner.d.ts +80 -0
- package/dist/acp/runner.js +159 -0
- package/dist/acp/runner.js.map +1 -0
- package/dist/agent/agent.d.ts +51 -1
- package/dist/agent/agent.js +322 -1
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/hooks.js +6 -6
- package/dist/agent/hooks.js.map +1 -1
- package/dist/agent/session.d.ts +2 -0
- package/dist/agent/session.js +19 -2
- package/dist/agent/session.js.map +1 -1
- package/dist/agent/subagent.d.ts +9 -0
- package/dist/agent/subagent.js +6 -0
- package/dist/agent/subagent.js.map +1 -1
- package/dist/auth/index.d.ts +3 -1
- package/dist/auth/index.js +3 -1
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/manager.js +4 -0
- package/dist/auth/manager.js.map +1 -1
- package/dist/auth/oauth.d.ts +33 -0
- package/dist/auth/oauth.js +59 -8
- package/dist/auth/oauth.js.map +1 -1
- package/dist/auth/providers/anthropic.d.ts +25 -5
- package/dist/auth/providers/anthropic.js +47 -6
- package/dist/auth/providers/anthropic.js.map +1 -1
- package/dist/auth/providers/chatgpt.d.ts +8 -0
- package/dist/auth/providers/chatgpt.js +180 -0
- package/dist/auth/providers/chatgpt.js.map +1 -0
- package/dist/auth/providers/openrouter.d.ts +2 -0
- package/dist/auth/providers/openrouter.js +101 -0
- package/dist/auth/providers/openrouter.js.map +1 -0
- package/dist/auth/types.d.ts +15 -0
- package/dist/auth/types.js.map +1 -1
- package/dist/browser/index.d.ts +1 -1
- package/dist/browser/plugin.d.ts +6 -1
- package/dist/browser/plugin.js.map +1 -1
- package/dist/browser/session.d.ts +47 -0
- package/dist/browser/session.js +177 -2
- package/dist/browser/session.js.map +1 -1
- package/dist/browser/tools.js +139 -18
- package/dist/browser/tools.js.map +1 -1
- package/dist/computer/cua-driver.d.ts +60 -1
- package/dist/computer/cua-driver.js +149 -5
- package/dist/computer/cua-driver.js.map +1 -1
- package/dist/computer/helper-client.d.ts +3 -1
- package/dist/computer/helper-client.js +3 -0
- package/dist/computer/helper-client.js.map +1 -1
- package/dist/computer/index.d.ts +3 -2
- package/dist/computer/index.js +1 -1
- package/dist/computer/index.js.map +1 -1
- package/dist/computer/mode.d.ts +15 -0
- package/dist/computer/mode.js +11 -1
- package/dist/computer/mode.js.map +1 -1
- package/dist/computer/session.d.ts +36 -7
- package/dist/computer/session.js +118 -17
- package/dist/computer/session.js.map +1 -1
- package/dist/computer/target.d.ts +19 -0
- package/dist/computer/target.js.map +1 -1
- package/dist/computer/tools.js +135 -8
- package/dist/computer/tools.js.map +1 -1
- package/dist/config.d.ts +7 -0
- package/dist/config.js.map +1 -1
- package/dist/harness.d.ts +52 -0
- package/dist/harness.js +113 -12
- package/dist/harness.js.map +1 -1
- package/dist/mcp/manager.d.ts +15 -0
- package/dist/mcp/manager.js +28 -1
- package/dist/mcp/manager.js.map +1 -1
- package/dist/providers/catalog.json +14 -3
- package/dist/providers/models-dev.d.ts +15 -0
- package/dist/providers/models-dev.js +14 -0
- package/dist/providers/models-dev.js.map +1 -1
- package/dist/providers/piai.d.ts +38 -1
- package/dist/providers/piai.js +70 -2
- package/dist/providers/piai.js.map +1 -1
- package/dist/providers/registry.d.ts +16 -1
- package/dist/providers/registry.js +42 -11
- package/dist/providers/registry.js.map +1 -1
- package/dist/runtime-plugins/builtin/studio.d.ts +7 -0
- package/dist/runtime-plugins/builtin/studio.js +69 -4
- package/dist/runtime-plugins/builtin/studio.js.map +1 -1
- package/dist/tools/builtin/bash.js +6 -10
- package/dist/tools/builtin/bash.js.map +1 -1
- package/dist/util/shell.d.ts +30 -0
- package/dist/util/shell.js +70 -0
- package/dist/util/shell.js.map +1 -1
- package/package.json +3 -3
- package/skills/media-generation/SKILL.md +22 -1
package/dist/computer/session.js
CHANGED
|
@@ -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
|
-
*
|
|
125
|
-
* screenshot of
|
|
126
|
-
*
|
|
127
|
-
*
|
|
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
|
-
|
|
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
|
-
|
|
334
|
-
|
|
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
|
|
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
|
-
|
|
358
|
-
|
|
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
|
-
*
|
|
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 =
|
|
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;
|
|
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"}
|
package/dist/computer/tools.js
CHANGED
|
@@ -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
|
-
|
|
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(
|
|
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
|
|
104
|
-
|
|
105
|
-
|
|
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
|