Skip to content

Refresh desktop themeable workspace UI / 刷新桌面主题化工作区界面#3752

Merged
esengine merged 31 commits into
esengine:main-v2from
SivanCola:codex/desktop-theme-ui-refresh
Jun 10, 2026
Merged

Refresh desktop themeable workspace UI / 刷新桌面主题化工作区界面#3752
esengine merged 31 commits into
esengine:main-v2from
SivanCola:codex/desktop-theme-ui-refresh

Conversation

@SivanCola

@SivanCola SivanCola commented Jun 10, 2026

Copy link
Copy Markdown
Collaborator

Summary

This PR refreshes the desktop workspace UI and turns the redesign work into theme-aware production behavior. It also keeps the fork branch up to date with main-v2 and preserves the latest upstream safety behavior around ask prompts, plan mode, and stream handling.

What Changed

Desktop shell and workspace UI

  • Added a dedicated desktop app chrome and tab strip treatment for a more native desktop layout.
  • Refined the left sidebar project tree, active conversation rows, project folder controls, drag/reorder affordances, collapse behavior, and bottom navigation spacing.
  • Reworked the composer footer controls so collaboration mode, tool approval, model, and effort selectors have stable spacing and clearer grouping.
  • Stabilized the status bar with fixed metric slots for model, current session turns, context, compression, hit rate, tasks, current cost, and balance.
  • Unified right/left panel toggle behavior and removed layout drift between theme styles.
  • Removed non-modal full-screen transparent backdrops so popovers no longer block the rest of the app after a click.
  • Added shared modal motion for management dialogs and cleaned up close-button/modal chrome behavior.

Theme system and settings

  • Added/expanded theme style presets: Graphite, Aurora, Slate, Carbon, Nocturne, and Amber.
  • Migrated the strongest color cues from the redesign exploration into real theme tokens, including CTA gradients, active conversation rows, PLAN badges, panel toggles, workspace folder/file accents, and selected file rows.
  • Updated Settings appearance copy from directional wording to visual style wording.
  • Changed the visual style cards to a 3x2 layout and added richer theme previews/descriptions.
  • Preserved appearance defaults and migration behavior so existing users keep prior choices where possible, while new users get the Graphite/light default.

Right workspace dock and overview

  • Renamed the context tab to overview and reorganized the panel into context window, runtime metrics, cost, session status, and dependency file sections.
  • Removed redundant project path text from the right dock header.
  • Tightened right dock and header spacing while keeping overview/file/change tabs consistent.

Interaction and controller behavior

  • Split collaboration mode from tool approval mode so chat/plan/goal is independent from ask/auto/YOLO approvals.
  • Kept ask prompts user-driven even when tool approval is set to auto or YOLO.
  • Preserved upstream behavior that Esc does not silently change plan/YOLO modes.
  • Added current-session turn count handling and status bar fallback behavior for loaded topic metadata.
  • Synced model switcher state in the desktop mock bridge so the selected model updates the trigger, status bar, and menu check state together.

Verification helpers

  • Kept the browser preview stability check as a manual QA command (npm run check:browser-preview) to catch blank/frozen preview regressions without blocking normal frontend builds.
  • Updated desktop topic/tree tests for the invariant that the Global folder remains present even when empty.
  • Omitted local design artifacts and the external design skill bundle from the PR so the branch only carries production code and verification helpers.

Verification

  • go test ./internal/control ./internal/cli
  • go test ./internal/config
  • go test ./...
  • go test ./... from the desktop module
  • npm run typecheck from the desktop frontend
  • npm run check:css from the desktop frontend
  • npm run check:browser-preview from the desktop frontend

SivanCola added 24 commits June 8, 2026 00:58
…_update_ui

# Conflicts:
#	desktop/frontend/src/App.tsx
#	desktop/frontend/src/components/Composer.tsx
…ght+dark

Replace the 8 theme-bound accent styles with 4 visual "directions" that are
orthogonal to light/dark, so every direction supports both modes. Legacy style
ids migrate to the closest direction, so stored settings keep working.

- theme.ts: THEME_STYLES = slate/carbon/nocturne/amber; drop style->theme
  binding; LEGACY_STYLE_MAP migrates graphite/ember/aurora/midnight/sandstone/
  porcelain/linen/glacier to the nearest new direction
- styles.css: 4 directions x light/dark accent token blocks; three-swatch
  theme cards with per-direction light/dark previews
- SettingsPanel: appearance picker shows name + label + 3 swatches + desc;
  theme and direction now switch independently
- locales: add direction names/labels/descriptions (en + zh)
Self-contained HTML/React+Babel prototype that drove the theme-direction work:
Slate / Carbon / Nocturne / Amber, each with light and dark variants, plus the
streaming transcript, dock split-view, command palette, and settings/history/
trash modals. Kept for design provenance; not shipped in the app.
Visual polish for the management modals; no behavior changes.

History/Trash:
- selection shows a 3px accent bar + soft tint instead of a full ring
- status badges become colored dots (current/open/deleted)
- meta row reflows: status+scope left, turns/time right-aligned
- group titles get a count chip
- replace native <select> filters with segmented count pills

Memory:
- type-colored chips (user/feedback/project/reference) + a left accent
  stripe on each fact card, applied to both the drawer and settings renderers
- instruction-file rows get a file icon, title, path, and scope tag
The CommandPalette component (esengine#3124) shipped but was never imported by App —
git -S confirms it was never referenced, so this completes the wiring rather
than reverting a removal.

- App: ⌘K/Ctrl+K hotkey, paletteOpen state, and PaletteItem[] built from real
  nav actions (new session, history, trash, settings/appearance/memory/models)
  plus a snapshot of recent sessions (resume on enter)
- styles: full .palette* stylesheet (centered modal, dimmed backdrop via
  :has(> .palette), grouped list, active state, footer hints, enter animation)
- locales: palette.* strings (en + zh)
- ProcessCard: a tone-colored sweep bar animates along the bottom edge while
  the card is running (CSS-only, via :has(.process-card__spin); respects
  prefers-reduced-motion). Idle cards are untouched.
- Composer mode bar (auto/plan/yolo): a sliding thumb tracks the active mode,
  measured from the live button so it stays aligned with the variable-width
  labels. Per-mode accent colors move to the thumb; stacking uses source order
  to satisfy the z-index token lint.
Aligns the tab strip with the redesign prototype: a "search · commands ·
open file ⌘K" pill fills the strip after the new-tab button and opens the
command palette on click. Wired through both TabBar render sites (mac chrome
tabs + header). Optional onOpenPalette prop keeps TabBar decoupled.
Matches the redesign: auto/plan/yolo now sits in the composer-meta params
row alongside the workspace picker, model, and effort switchers instead of
on its own line above the input. Pure JSX relocation — the sliding thumb,
per-mode colors, and behavior are unchanged.
Matches the redesign hero: the welcome example prompts now lay out in a
2-column grid (4 suggestions) under the centered logo instead of a single
vertical column. Adds a fourth example (find-and-fix-a-bug) in en + zh.
Brings the workspace dock closer to the prototype's single-column feel:
default tree width 320→288 (ratio 0.25→0.22). Topicbar action buttons
(changes/copy/export) slim from 34px to 30px with tighter padding for a
lighter chip look. Min/max bounds and resize behavior unchanged.
The session list under a project folder now slides open/closed instead of
snapping. Uses the grid-template-rows 0fr→1fr technique (pure CSS, no JS
height measurement) with a content fade, and the chevron rotates 90° on
expand. Children always render so collapse animates too; ContextMenu is
portaled so the overflow:hidden inner wrap can't clip it. Respects
prefers-reduced-motion.
- StatusBar: switch to "label + bold value" stat layout; show model name
  on the left with a green idle dot; remove separator dots; add i18n
  label keys for each stat segment (ctxLabel, cacheLabel, costLabel, etc.)
- Animation system: add shared CSS motion tokens (--dur-*, --ease-*,
  --motion-pop-scale, --motion-rise) and apply enter keyframes to
  popovers, drawers, modals, menus, tooltips, tabs, prompt shelf,
  todo bar, settings pages, and process cards
- Mount transition hooks: add useMountTransition (for panels that own
  their mount logic) and useDeferredClose (for parent-controlled panels)
  with prefers-reduced-motion support; wire into CommandPalette,
  ResizableDrawer, SettingsPanel, and HistoryPanel for proper exit
  animations via data-state="closing"
- Composer: remove the workspace/project switcher popover and related
  workspace management (onPickFolder, onRemoveWorkspace,
  workspaceRefreshSignal) — these move to the sidebar
- Remove NotificationCenter, StreamingIndicator, and the in-app
  notification center store (notificationCenter.ts) — unused features
- Styles: round the mode segment pill (border-radius 999px), smaller
  font, add entrance animations for various overlay surfaces
- i18n: update placeholder hint to include "! shell" in en/zh
…_update_ui

# Conflicts:
#	desktop/frontend/src/App.tsx
#	desktop/frontend/src/lib/bridge.ts
#	desktop/settings_app.go
#	internal/cli/cli.go
#	internal/config/config.go
…to sivancola_20260608_update_ui

# Conflicts:
#	desktop/frontend/src/App.tsx
#	desktop/frontend/src/components/Composer.tsx
#	desktop/frontend/src/components/Welcome.tsx
…o sivancola_20260608_update_ui

# Conflicts:
#	desktop/frontend/src/App.tsx
#	desktop/frontend/src/components/Composer.tsx
#	desktop/frontend/src/components/StatusBar.tsx
#	desktop/frontend/src/components/TabBar.tsx
#	desktop/frontend/src/lib/bridge.ts
#	desktop/frontend/src/locales/en.ts
#	desktop/frontend/src/locales/zh.ts
#	desktop/frontend/src/styles.css
…e-ui-refresh

# Conflicts:
#	desktop/go.mod
#	desktop/go.sum
#	go.sum
#	internal/cli/chat_tui.go
#	internal/control/controller.go
#	internal/control/input.go
#	internal/control/yolo_test.go
@github-actions github-actions Bot added v2 Go rewrite (1.x) — main-v2 branch, active development desktop Wails desktop app (desktop/**) tui Terminal UI / CLI (internal/cli, internal/control) agent Core agent loop (internal/agent, internal/control) config Configuration & setup (internal/config) labels Jun 10, 2026
@SivanCola SivanCola marked this pull request as ready for review June 10, 2026 01:57
@SivanCola SivanCola requested a review from esengine as a code owner June 10, 2026 01:57
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@SivanCola SivanCola mentioned this pull request Jun 10, 2026

@esengine esengine left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Reviewed the backend carefully — strong work.

The tool-approval rework is exactly the right separation: ask/auto/yolo govern tool permission only. Deny rules still bite upstream, auto keeps explicit ask rules (only the writer fallback is drained), and plan approval (exit_plan_mode) plus the ask tool stay user decisions in every mode — verified in the gate and covered well by yolo_test.go. The /goal loop is opt-in, bounded (50-turn cap), cancellable, and the repeated-block guard is a nice touch. Making the headless ask fallback state its own provenance and bias to the safest reversible option is a good call.

Thanks for pulling the bot channel work back out — appreciate the responsiveness. Local build + the control/agent/permission/config suites are green here, and CI is green across the board. Merging.

@esengine esengine merged commit c80ba8a into esengine:main-v2 Jun 10, 2026
13 checks passed
esengine pushed a commit that referenced this pull request Jun 10, 2026
Lands the bot gateway as its own feature, extracted from #3752: gateway/session plumbing plus Feishu, Weixin, and QQ adapters, CLI/config support, and the desktop Settings UI for bot channel configuration and guided setup.

Co-authored-by trailers preserved from the source branch.
esengine pushed a commit that referenced this pull request Jun 10, 2026
…修复 (#3795)

* fix(desktop): preserve curated provider models on refresh

* fix(desktop): clarify composer collaboration entry

* fix(desktop): keep draft goal mode visible

* fix(desktop): allow approval mode changes while running
SuMuxi66 pushed a commit to SuMuxi66/DeepSeek-Reasonix that referenced this pull request Jun 10, 2026
… loop (esengine#3752)

Lands three changes from esengine#3752:

- Desktop: graphite UI redesign with slate/carbon/nocturne/amber theme
  directions (light+dark), Cmd-K command palette, and a status bar /
  composer / sidebar refresh. Default desktop appearance is now light.
- Controller: separate tool approvals from business asks and plan
  approval. Posture is ask/auto/yolo; deny rules still block upstream,
  auto keeps explicit ask rules while auto-approving the writer fallback,
  and plan approval plus the ask tool stay user decisions in every mode.
- Controller: opt-in /goal autonomous loop that self-continues up to 50
  turns, driven by [goal:complete|blocked|continue] markers, bounded and
  cancellable, with a repeated-block stop.
SuMuxi66 pushed a commit to SuMuxi66/DeepSeek-Reasonix that referenced this pull request Jun 10, 2026
)

Lands the bot gateway as its own feature, extracted from esengine#3752: gateway/session plumbing plus Feishu, Weixin, and QQ adapters, CLI/config support, and the desktop Settings UI for bot channel configuration and guided setup.

Co-authored-by trailers preserved from the source branch.
SuMuxi66 pushed a commit to SuMuxi66/DeepSeek-Reasonix that referenced this pull request Jun 10, 2026
…#3752 合并后的桌面 UI 修复 (esengine#3795)

* fix(desktop): preserve curated provider models on refresh

* fix(desktop): clarify composer collaboration entry

* fix(desktop): keep draft goal mode visible

* fix(desktop): allow approval mode changes while running
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent Core agent loop (internal/agent, internal/control) config Configuration & setup (internal/config) desktop Wails desktop app (desktop/**) tui Terminal UI / CLI (internal/cli, internal/control) v2 Go rewrite (1.x) — main-v2 branch, active development

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants