From 45c68ce05e8249df41de179e38493bc8721e9416 Mon Sep 17 00:00:00 2001 From: David McKay Date: Sat, 22 Aug 2026 07:55:03 -0700 Subject: [PATCH] Let a person take the wheel without being offered it Take control only appeared once a Bot had called computer_request_help, so the button a person needs depended on the Bot getting one instruction right. It does not always. Asked to open a page behind a sign-in, the built-in Bot answered "If you'd like, I can prompt you to take control so you can complete the sign-in ... would you like to proceed with signing in?" and called nothing. Three times out of three, on a neutral question. The person was told to take control and there was no control to take, and the computer panel offered nothing: a dead end reached by following the Bot's own instruction. The prompt already forbids that sentence in as many words, and names two more like it, so the answer is not more prose. It is that somebody who wants their own browser should not have to be offered it first. The button is now there whenever the Bot holds the wheel. The amber row stays the Bot ASKING, which is a different thing and keeps its colour and its reason. Without a request the row is quiet and says who is driving. Driven in Chrome. Reproduced the prose answer, then took the wheel from that state: holder went to human with requested still false, the sign-in page was live and typeable in the full-size view, and handing back returned the Bot to driving. Leaves the Bot's behaviour alone. It should still call the tool, and a prompt that cannot make it is worth its own change. --- app/src/components/computer/computer-view.tsx | 51 +++++++++++++++---- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/app/src/components/computer/computer-view.tsx b/app/src/components/computer/computer-view.tsx index e6120c59..49352d37 100644 --- a/app/src/components/computer/computer-view.tsx +++ b/app/src/components/computer/computer-view.tsx @@ -1,15 +1,15 @@ import { useEffect, useRef, useState } from "react"; import { createPortal } from "react-dom"; -import { LiveScreen } from "./live-screen"; -import { ComputerPlaceholder } from "./placeholder"; import { + type ControlState, readControl, releaseControl, supplySecret, takeControl, - type ControlState, } from "@/lib/computers/control"; import { readScreenshot, type Screenshot } from "@/lib/computers/screen"; +import { LiveScreen } from "./live-screen"; +import { ComputerPlaceholder } from "./placeholder"; /** Explicit blank-browser URLs use placeholder artwork; missing URL fields are treated as real pages. */ function isBlankBrowser(shot: Screenshot): boolean { @@ -312,11 +312,37 @@ export function ComputerView({ ) : null} - {control?.requested && !driving ? ( -
+ {/* + * The wheel is offered whether or not the Bot asked for it. + * + * It only used to appear once the Bot called `computer_request_help`, which made the button + * depend on the Bot getting one instruction right. It does not always: asked to open a page + * behind a sign-in, a Bot answered "If you'd like, I can prompt you to take control … would + * you like to proceed with signing in?" and called nothing. The person was told to take + * control, and there was no control to take. The prompt already forbids that sentence in as + * many words, so the answer is not more prose: it is that a person who wants their own + * browser should not have to be offered it first. + * + * The amber row stays the Bot ASKING, which is a different thing and still worth its own + * colour and its reason. Without a request this is a quiet control that says who is driving. + */} + {!driving ? ( +
- The assistant needs you.{" "} - {control.reason} + {control?.requested ? ( + <> + + The assistant needs you. + {" "} + {control.reason} + + ) : ( + "The assistant is driving. You can take over whenever you want." + )} @@ -377,7 +407,8 @@ export function ComputerView({ > Hand back to the assistant - ) : control?.requested ? ( + ) : ( + /* Offered here too, and for the same reason: see the inline card above. */ - ) : null} + )} {driving ? "Press Escape to close"