Skip to content

feat(workbench): add auto-hide workspace chrome#1402

Open
devRickyyy wants to merge 11 commits into
mainfrom
feat/immersive-auto-hide-chrome
Open

feat(workbench): add auto-hide workspace chrome#1402
devRickyyy wants to merge 11 commits into
mainfrom
feat/immersive-auto-hide-chrome

Conversation

@devRickyyy

@devRickyyy devRickyyy commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

Summary

  • add a Lab experiment that auto-hides both the top workspace chrome and the Dock
  • leave keyboard-accessible handles inset from the screen edge so either surface can be revealed, then collapse it again after pointer and focus leave
  • let fullscreen workbench content reclaim the top chrome's 52 px only while that chrome is hidden
  • keep the Electron application's native macOS traffic lights intact and remove only the fullscreen internal workbench window's duplicated header
  • project the fullscreen app's complete original header into the workspace top chrome, composed as an app tab followed by the app's existing controls, session title, and actions
  • collapse the projected app header together with the top chrome so it behaves as part of the workspace's global top strip
  • restore the internal window to floating mode when the app-tab title is clicked
  • use the app-tab's trailing unfullscreen button to restore the app to a floating window without minimizing or closing it
  • flatten AgentGUI's existing header only in the projected slot while preserving AgentGUI ownership of its controls and state
  • document the immersive header projection, ownership, and reclaimed-space behavior in the workbench Dock architecture guide

Verification

  • normal pre-push hook: pnpm check:changed -- --push-ready (16 lanes passed)
  • pnpm check:changed --tail-lines 120 (13 lanes passed)
  • pnpm --filter @tutti-os/workbench-surface test (217 Node tests and 3 render tests passed)
  • pnpm --filter @tutti-os/workbench-surface typecheck
  • pnpm --filter @tutti-os/agent-gui typecheck
  • pnpm --filter @tutti-os/desktop typecheck
  • pnpm --filter @tutti-os/agent-gui exec vitest run workbench/contribution.test.ts --environment jsdom --maxWorkers=3 (55 tests passed)
  • pnpm --filter @tutti-os/desktop exec vitest run src/renderer/src/features/workspace-workbench/ui/WorkspaceChrome.test.ts --environment jsdom (9 tests passed)
  • pnpm --filter @tutti-os/desktop build
  • pnpm --filter @tutti-os/workbench-surface build
  • pnpm --filter @tutti-os/agent-gui build

Fix Scope Justification

Not applicable; this is a feature.

Fallback Three Questions

  • Source: Revealed chrome needs a short grace period after a click and after pointer/focus departure so controls remain practically interactive.
  • Why cannot this be fixed at the source? Pointer and focus events describe current interaction state, but cannot express the user's intended dwell time. Collapsing synchronously would make revealed controls difficult to click or keyboard-navigate.
  • Removal condition: Remove the timers if the interaction changes to an explicit pinned/open state, or if the platform provides an event-driven dismissal primitive that preserves the same interaction grace period.

Checklist

  • If this PR changes agent lifecycle semantics (session/turn/goal/runtime-operation creation, sendability, terminal state, or recovery): not applicable.
  • I kept the change focused on one concern.
  • I updated documentation when behavior, setup, or contributor workflow changed.
  • I updated all README/CONTRIBUTING language variants when changing their English source: not applicable.
  • I ran the lowest meaningful local checks for the changed surface.
  • My commits are signed off with DCO when required: git commit -s.

Signed-off-by: Test <test@example.com>
@cursor

cursor Bot commented Jul 18, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_c2f8d36e-7e21-4eda-9e3f-fec2e970deab)

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 2 potential issues.

View 1 additional finding in Devin Review.

Open in Devin Review

},
lab: {
autoHideWorkspaceChromeDescription:
"自动收起应用顶栏和 Dock;点击屏幕边缘留下的把手即可分别展开。",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Chinese settings description ends with a forbidden full stop

The new Simplified Chinese auto-hide description text (apps/desktop/src/shared/i18n/locales/zh-CN.ts:877) ends with the Chinese full stop , which the repository forbids for Chinese user-facing copy.
Impact: The settings text renders with punctuation that violates the product's Chinese copy style, inconsistent with sibling lab descriptions.

Rule violation detail

AGENTS.md states: "Chinese user-facing UI copy must not end with a Chinese full stop (。); keep this punctuation rule consistent across settings and other product surfaces." The sibling lab entries such as workbenchShortcutsDescription (apps/desktop/src/shared/i18n/locales/zh-CN.ts:889) and preferencesSaveFailed (:887) do not use a trailing , confirming the convention. The added string at :877 ends with .

Suggested change
"自动收起应用顶栏和 Dock;点击屏幕边缘留下的把手即可分别展开",
"自动收起应用顶栏和 Dock;点击屏幕边缘留下的把手即可分别展开",
Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment thread apps/desktop/src/shared/i18n/locales/zh-CN.ts Outdated
Test added 10 commits July 19, 2026 11:00
Signed-off-by: Test <test@example.com>
Signed-off-by: Test <test@example.com>
Signed-off-by: Test <test@example.com>
Signed-off-by: Test <test@example.com>
Signed-off-by: Test <test@example.com>
Signed-off-by: Test <test@example.com>
Signed-off-by: Test <test@example.com>
Signed-off-by: Test <test@example.com>
Signed-off-by: Test <test@example.com>
Signed-off-by: Test <test@example.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant