Stop computer bash commands on the computer itself

The sandbox ignores sandbox_execute_bash's timeout and runs every call in
one shared shell session, so a command that never ended (a network read
without a timeout, a prompt) kept running after the call gave up, and
every later command on that computer, from any run, timed out behind it.
Each command now runs in its own bash under coreutils timeout (at most
ComputerCommandMaxSeconds, below McpToolTimeoutMs), reading no input, and
says when it was stopped.

Replies' env list says where each key comes from and that workspace,
computer and install-wide envs reach every bot there, so bots stop
telling users a workspace's keys must be set per bot. The computer
prompt says installed programs may be gone after a restart. An empty
open-only task list says closed tasks aren't shown, and update_task says
when a status was already set.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-28 04:34:39 +01:00
co-authored by Claude Opus 5.5
parent e51f2aa9a4
commit 2896e76256
10 changed files with 165 additions and 12 deletions
@@ -64,7 +64,7 @@ export default function listTasksTool({ bot_id, user_id, is_coordinator, admin_w
if (!tasks.length) {
return args.open_only
? `You have no open tasks${args.status ? ` with that status` : ""}.`
? `No open tasks${args.status ? ` with that status` : ""} here. Finished and cancelled ones aren't listed with open_only: list without it before saying a task is gone.`
: `No tasks${args.status ? ` with that status` : ""}.`;
}
@@ -90,7 +90,9 @@ export default function updateTaskTool({ user_id, bot_id, is_coordinator, admin_
updated_by_bot_id: bot_id,
});
if (args.status) said.push(`status is now ${args.status}`);
if (args.status) {
said.push(task.status == args.status ? `status was already ${args.status}` : `status is now ${args.status}`);
}
}
if (args.note?.trim()) {