Open computers from the chat, let bots ask for a take-over, show task progress

- Serve each computer to its owner under /computers/<id>/ (HTTP and
  websockets proxied to the AIO sandbox) and show it in a shared
  ComputerView with browser, terminal and code modes, opened from the
  computers modal or a take-over button in the thread.
- ask_user_to_take_over lets a bot hand a computer to the user for a
  login or captcha; the message gets a take-over button and needs-you,
  and the viewer hands it back with a chat message.
- While a task runs the thread shows "<bot> is working..." with the
  task's latest step; steps read as plain words, not tool names.
- A coordinator with no workers no longer claims to delegate, and bots
  describe started tasks in the first person.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-19 05:35:44 +01:00
co-authored by Claude Opus 5.5
parent b1023ba8ff
commit 56daf0c462
44 changed files with 1289 additions and 75 deletions
+26
View File
@@ -42,3 +42,29 @@ export const BotReplyJobTitle = "Thinking";
* The bot's status line while its job waits for a rate-limited model.
*/
export const BotWaitingStatusLine = "Waiting for a free model";
/**
* How a job step that called a tool reads in the chat's working row, by
* tool name. Tools not listed read "Using <name>".
*/
export const JobStepToolLabels: Record<string, string> = {
sandbox_execute_bash: "Running a command",
sandbox_execute_code: "Running code",
sandbox_read_file: "Reading a file",
sandbox_write_file: "Writing a file",
sandbox_file_operations: "Working with files",
search_computers: "Searching the computers",
ask_user_to_take_over: "Asking you to take over",
start_task: "Starting a task",
delegate_task: "Handing work to the crew",
assign_computer: "Changing computer access",
update_memory: "Updating memory",
update_instructions: "Updating instructions",
};
/**
* Labels for whole families of tools, by name prefix.
*/
export const JobStepToolPrefixLabels: Record<string, string> = {
browser_: "Using the browser",
};
+31
View File
@@ -87,3 +87,34 @@ export const ComputerMcpExcludedTools = [
"browser_gui_screenshot",
"browser_gui_execute_action",
] as const;
/**
* How the user can open a computer, each one of the AIO sandbox's own
* apps at `path` (relative to the computer's address). More of them
* (VNC, opencode, codex) can join later.
*/
export const ComputerViewModes = [
{
title: "Browser",
value: "browser",
path: "browser-ui",
},
{
title: "Terminal",
value: "terminal",
path: "terminal",
},
{
title: "Code",
value: "code",
path: "code-server/",
},
] as const;
export type ComputerViewMode = (typeof ComputerViewModes)[number]["value"];
/**
* Where the app serves a computer to its owner's browser:
* `/computers/<id>/<path>`, proxied to the sandbox (`handleComputerProxy`).
*/
export const ComputerProxyPrefix = "/computers";