From a9229a4ee34d50c6b483e08b05ab36af468af80b Mon Sep 17 00:00:00 2001 From: Abhay Padmanabhan <58100924+abhaypadmanabhan@users.noreply.github.com> Date: Sat, 31 Oct 2026 16:17:29 -0700 Subject: [PATCH] Shared workspaces: the computer panel and Bots page say what a teammate can see A teammate's side panel was an empty card the size of a screen under a tab named for another bot ("Boppy's computer" in Orgo team's chat). The tab is now Owner's computer (or Owner's Mac), and the card a plain line saying its screens show only in the owner's Bops and its work shows in the chat. Settings, Bots no longer promises each bot a settings page a teammate can't open. Co-Authored-By: Claude Opus 5.5 --- components/app/bops-app.tsx | 2 +- components/app/computer.tsx | 8 ++++---- components/app/panel-tabs.tsx | 7 ++++++- scripts/test-shared.mjs | 1 + 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/components/app/bops-app.tsx b/components/app/bops-app.tsx index e99b90bce..786089d16 100644 --- a/components/app/bops-app.tsx +++ b/components/app/bops-app.tsx @@ -2176,7 +2176,7 @@ export function Settings({ else if (pane === "bots") body = ( <> - + ); diff --git a/components/app/computer.tsx b/components/app/computer.tsx index 981309c50..1b18cfb4d 100644 --- a/components/app/computer.tsx +++ b/components/app/computer.tsx @@ -1219,12 +1219,12 @@ function NoComputer({ state, bot: b, host }: { state: AppState; bot: Bot; /** Th ); // A workspace shared with the user: the computer (or the Mac) is the owner's, with nothing here to set up or watch. + // A plain line saying where its work shows, not an empty card the size of a screen. if (readOnly(state)) return ( -
- - {`${b.name} works on ${b.runsOn === "mac" ? yourMac(state) : "the owner's computer"}.`} -
+

+ {`${b.name} works on ${b.runsOn === "mac" ? yourMac(state) : "the owner's computer"}. Its screens show only in the owner's Bops; its work shows in the chat.`} +

); return (
diff --git a/components/app/panel-tabs.tsx b/components/app/panel-tabs.tsx index ff99e303c..17c48ac81 100644 --- a/components/app/panel-tabs.tsx +++ b/components/app/panel-tabs.tsx @@ -198,7 +198,12 @@ function Tab({ state, tab: t, on, closable, onPick, onClose }: { state: AppState const host = b ? computerOf(state, b) : undefined; const label = t.kind === "computer" - ? host && host.id !== b?.id + ? // A shared workspace's computers are its owner's, whichever bot's name the owner's Bops gives them. + state.shared + ? b?.runsOn === "mac" + ? "Owner's Mac" + : "Owner's computer" + : host && host.id !== b?.id ? `${host.name}'s computer` : `${b?.name ?? "Bot"}'s computer` : t.kind === "bot" diff --git a/scripts/test-shared.mjs b/scripts/test-shared.mjs index da5e87525..eb01eda0f 100644 --- a/scripts/test-shared.mjs +++ b/scripts/test-shared.mjs @@ -1340,6 +1340,7 @@ await check("the viewer's own Mac is never a shared workspace's: no Your Mac tab // The tab, were it shown: no Working dot for the owner's work. const bar = renderToStaticMarkup(h(TabBar, { state: st, tabs: [mac], active: "chat", chatBotId: "boppy", onPick: noop, onClose: noop, onNew: noop })); assert.ok(!/title="Working"/.test(bar), bar); + assert.match(bar, />Owner's computer