Open websites in the Page view and let agents drive them

This commit is contained in:
Ian Gulliver
2026-10-21 21:34:26 -07:00
parent d6e1895591
commit 57d660c57f
8 changed files with 786 additions and 390 deletions
+7 -4
View File
@@ -2337,14 +2337,17 @@ components:
description: Work a task agent, or a merge, asks a connected Mac to do, sent over /api/clients/connect.
properties:
id: { type: string }
op: { type: string, enum: [bash, exec, upload, download, read_file, write_file, hands, sign, open_page, open_file] }
op: { type: string, enum: [bash, exec, upload, download, read_file, write_file, hands, sign, open_page, open_file, page_tabs, page_navigate, page_js, page_capture] }
command: { type: string, description: "bash, exec: run with zsh as a login shell in the home directory, in its own process group." }
timeout_ms: { type: integer, description: "bash, exec, sign: kill the process group after this long." }
ident: { type: string, description: "sign: the committer, as \"Name <email>\", to sign as when the Mac's git config has no user.signingkey." }
transfer: { type: string, description: "upload: the transfer id to get from /api/clients/transfers/{transferId}. download: the transfer id to put the archive to." }
dest: { type: string, description: "upload: where the archive's one entry ends up, absolute or starting with ~/; whatever is there is replaced." }
path: { type: string, description: "download, read_file, write_file: the file (or, for download, file or directory) on the client, absolute or starting with ~/. open_page, open_file: the file (or, for open_file, file or directory, a directory ending in /) on the server, absolute or relative to the task's worktree." }
task: { type: string, description: "open_page, open_file: the task beside whose transcript the app shows the file: open_page in its page view, open_file in its Files tab." }
task: { type: string, description: "open_page, open_file: the task beside whose transcript the app shows the file: open_page in its page view, open_file in its Files tab. page_tabs, page_navigate, page_js, page_capture: the task whose page view tabs they act on." }
url: { type: string, description: "open_page: a web address to open in a new tab instead of path. page_navigate: the address to load." }
tab: { type: integer, description: "page_navigate, page_js, page_capture: the tab, by the number page_tabs lists; absent for the tab the page view shows." }
code: { type: string, description: "page_js: the body of an async function to run in the tab's page; its return value is the result." }
data: { type: string, format: byte, description: "write_file: the file's new contents; parent directories are created. sign: the unsigned commit object, which the Mac signs with the program its git config names for its gpg.format (openpgp or x509), called as git calls it." }
tool: { type: string, description: "hands: the byre-hands tool to call." }
arguments:
@@ -2363,10 +2366,10 @@ components:
accepted: { type: boolean, description: "Set only on the first reply, which says the app received the request and started on it." }
error: { type: string, description: Set when the request couldn't be carried out. }
exit_code: { type: integer, description: "bash, exec, sign: the exit status, -1 when it was killed by its timeout." }
output: { type: string, description: "bash: stdout and stderr together, at most their last 64 KiB. sign: the signing program's stderr, where it writes its GnuPG status lines, and the login shell's output." }
output: { type: string, description: "bash: stdout and stderr together, at most their last 64 KiB. sign: the signing program's stderr, where it writes its GnuPG status lines, and the login shell's output. open_page, page_tabs, page_navigate, page_js: what the app did, for the agent." }
stdout: { type: string, format: byte, description: "exec: everything the command wrote to stdout." }
stderr: { type: string, format: byte, description: "exec: everything the command wrote to stderr." }
data: { type: string, format: byte, description: "read_file: the file's contents. sign: the detached signature." }
data: { type: string, format: byte, description: "read_file: the file's contents. sign: the detached signature. page_capture: a PNG of the tab." }
result:
type: object
additionalProperties: true