From ff78ea9f358ca8ebb9726fcfc2d3d1cae3b17b9b Mon Sep 17 00:00:00 2001 From: Rohit C Prasad Date: Thu, 20 Aug 2026 16:33:36 -0700 Subject: [PATCH] Chrome cleanup: menu dedup, implicit cloud label, Context optimization section Account menu drops Automations (sidebar nav has it) and the OpenWorker Cloud suffix. Token savings + compaction move from Models to a new Settings - Context optimization tab. Coworkers page loses its duplicate intro line. --- surfaces/gui/e2e/automations-manage.spec.ts | 3 +-- .../gui/e2e/automations-quickstart.spec.ts | 3 +-- surfaces/gui/e2e/automations.spec.ts | 3 +-- surfaces/gui/e2e/compaction.spec.ts | 2 +- surfaces/gui/e2e/settings.spec.ts | 7 +++--- surfaces/gui/e2e/sidebar-account.spec.ts | 3 ++- surfaces/gui/src/components/PersonasTab.tsx | 7 ++---- surfaces/gui/src/components/SettingsView.tsx | 22 +++++++++++-------- surfaces/gui/src/components/Sidebar.tsx | 7 +++--- 9 files changed, 29 insertions(+), 28 deletions(-) diff --git a/surfaces/gui/e2e/automations-manage.spec.ts b/surfaces/gui/e2e/automations-manage.spec.ts index 9604399d..2c91d087 100644 --- a/surfaces/gui/e2e/automations-manage.spec.ts +++ b/surfaces/gui/e2e/automations-manage.spec.ts @@ -6,8 +6,7 @@ import { test } from "./fixtures"; async function openAutomations(page) { await page.goto("/"); - await page.getByTestId("account-row").click(); - await page.getByTestId("account-menu").getByRole("button", { name: "Automations", exact: true }).click(); + await page.getByTestId("nav-automations").click(); await expect(page.getByText("Recurring tasks OpenWorker runs on a schedule.")).toBeVisible(); } diff --git a/surfaces/gui/e2e/automations-quickstart.spec.ts b/surfaces/gui/e2e/automations-quickstart.spec.ts index 24a9b79d..e38662b2 100644 --- a/surfaces/gui/e2e/automations-quickstart.spec.ts +++ b/surfaces/gui/e2e/automations-quickstart.spec.ts @@ -7,8 +7,7 @@ import { test } from "./fixtures"; async function openAutomations(page) { await page.goto("/"); - await page.getByTestId("account-row").click(); - await page.getByTestId("account-menu").getByRole("button", { name: "Automations", exact: true }).click(); + await page.getByTestId("nav-automations").click(); await expect(page.getByText("Recurring tasks OpenWorker runs on a schedule.")).toBeVisible(); } diff --git a/surfaces/gui/e2e/automations.spec.ts b/surfaces/gui/e2e/automations.spec.ts index 146b1c40..1c7074da 100644 --- a/surfaces/gui/e2e/automations.spec.ts +++ b/surfaces/gui/e2e/automations.spec.ts @@ -7,8 +7,7 @@ test("scheduled run session shows the run banner; Back returns to the task detai page, }) => { await page.goto("/"); - await page.getByTestId("account-row").click(); - await page.getByTestId("account-menu").getByRole("button", { name: "Automations", exact: true }).click(); + await page.getByTestId("nav-automations").click(); // Task list → detail (runs list). await page.getByText("Daily AI News").first().click(); diff --git a/surfaces/gui/e2e/compaction.spec.ts b/surfaces/gui/e2e/compaction.spec.ts index c5fa0b61..af905815 100644 --- a/surfaces/gui/e2e/compaction.spec.ts +++ b/surfaces/gui/e2e/compaction.spec.ts @@ -10,7 +10,7 @@ test("Settings: Context compaction card edits threshold, cap, and summarizer mod await page.goto("/"); await page.getByTestId("account-row").click(); await page.getByRole("button", { name: "Settings", exact: true }).click(); - await page.getByRole("button", { name: "Models", exact: true }).click(); + await page.getByRole("button", { name: "Context optimization", exact: true }).click(); const card = page.getByTestId("compaction-card"); await expect(card).toBeVisible(); diff --git a/surfaces/gui/e2e/settings.spec.ts b/surfaces/gui/e2e/settings.spec.ts index 82f791be..3acbf3fa 100644 --- a/surfaces/gui/e2e/settings.spec.ts +++ b/surfaces/gui/e2e/settings.spec.ts @@ -96,13 +96,14 @@ test("Models: Remove key reverts a configured provider", async ({ page }) => { await expect(page.getByTestId("set-provider-anthropic")).toContainText("Not set up"); }); -// Token savings (owner ask 2026-07-17; moved under Models by UX-021): the card renders with -// the PDF fallback segmented control + attach thresholds, and edits POST through. +// Token savings (owner ask 2026-07-17; now under Settings ▸ Context optimization, +// owner 2026-08-21): the card renders with the PDF fallback segmented control + +// attach thresholds, and edits POST through. test("Settings: Token savings card edits PDF fallback and thresholds", async ({ page }) => { await page.goto("/"); await page.getByTestId("account-row").click(); await page.getByRole("button", { name: "Settings", exact: true }).click(); - await page.getByRole("button", { name: "Models", exact: true }).click(); + await page.getByRole("button", { name: "Context optimization", exact: true }).click(); const card = page.getByTestId("token-savings-card"); await expect(card).toBeVisible(); diff --git a/surfaces/gui/e2e/sidebar-account.spec.ts b/surfaces/gui/e2e/sidebar-account.spec.ts index eefc996d..1a2a8246 100644 --- a/surfaces/gui/e2e/sidebar-account.spec.ts +++ b/surfaces/gui/e2e/sidebar-account.spec.ts @@ -33,7 +33,8 @@ test("the account menu: Inbox + Connectors always listed; Settings carries the s await expect(menu.getByRole("button", { name: "Inbox" })).toBeVisible(); await expect(menu.getByRole("button", { name: "Connectors", exact: true })).toBeVisible(); await expect(menu.getByRole("button", { name: /Settings/ })).toContainText("⌘"); - await expect(menu.getByRole("button", { name: "Automations", exact: true })).toBeVisible(); + // Automations left the menu (owner 2026-08-21) — the sidebar nav row carries it. + await expect(menu.getByRole("button", { name: "Automations", exact: true })).toHaveCount(0); await expect(menu.getByRole("button", { name: "Activity", exact: true })).toBeVisible(); }); diff --git a/surfaces/gui/src/components/PersonasTab.tsx b/surfaces/gui/src/components/PersonasTab.tsx index ff0b285b..5ae29d8b 100644 --- a/surfaces/gui/src/components/PersonasTab.tsx +++ b/surfaces/gui/src/components/PersonasTab.tsx @@ -136,11 +136,8 @@ export function PersonasTab({ onOpenPersona }: { onOpenPersona?: (id: string) => return (
-

- Enable a coworker, then choose whether it appears in the coworker picker. The starred coworker - is the default for new sessions. -

- + {/* No intro line here — the PanelHead above already explains the page + (the two stacked one-liners read as duplicates, owner 2026-08-21). */}
{personas.map((p) => (
diff --git a/surfaces/gui/src/components/SettingsView.tsx b/surfaces/gui/src/components/SettingsView.tsx index d294e73c..ea1b1c56 100644 --- a/surfaces/gui/src/components/SettingsView.tsx +++ b/surfaces/gui/src/components/SettingsView.tsx @@ -52,7 +52,7 @@ import { showPersonas } from "../flags"; // Models + Personas host the existing tab components inside the page shell (field re-skin to follow). // "appearance" is the General tab's stable key — callers deep-link with it, so the // rename (UX-021) changed only the label. "files" folded into General as a card. -type SetTab = "appearance" | "models" | "skills" | "voice" | "memory" | "personas"; +type SetTab = "appearance" | "models" | "context" | "skills" | "voice" | "memory" | "personas"; const CARD = "rounded-xl2 border border-line bg-panel"; const FIELD_LABEL = "text-[12.5px] font-medium text-ink"; @@ -66,10 +66,11 @@ const BTN_BORDERED = const SET_TABS: { key: SetTab; label: string; - icon: "sliders" | "code" | "mic" | "archive" | "sparkle" | "book"; + icon: "sliders" | "code" | "mic" | "archive" | "sparkle" | "book" | "refresh"; }[] = [ { key: "appearance", label: "General", icon: "sliders" }, { key: "models", label: "Models", icon: "code" }, + { key: "context", label: "Context optimization", icon: "refresh" }, { key: "skills", label: "Skills", icon: "book" }, { key: "voice", label: "Voice input", icon: "mic" }, { key: "memory", label: "Memory", icon: "archive" }, @@ -129,12 +130,15 @@ export function SettingsView({ sub="Providers and the models offered in the composer's picker. Keys are stored only on this computer." /> - {/* Token savings is model-spend behavior, so it lives here (UX-021), - not under General. */} -
- - -
+ + ) : tab === "context" ? ( +
+ + +
) : tab === "skills" ? ( @@ -379,7 +383,7 @@ function PersonasSection({ onOpenPersona }: { onOpenPersona?: (id: string) => vo