Refresh desktop themeable workspace UI / 刷新桌面主题化工作区界面#3752
Conversation
…_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
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
esengine
left a comment
There was a problem hiding this comment.
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.
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.
…修复 (#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
… 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.
) 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.
…#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
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-v2and preserves the latest upstream safety behavior around ask prompts, plan mode, and stream handling.What Changed
Desktop shell and workspace UI
Theme system and settings
Right workspace dock and overview
Interaction and controller behavior
askprompts user-driven even when tool approval is set to auto or YOLO.Verification helpers
npm run check:browser-preview) to catch blank/frozen preview regressions without blocking normal frontend builds.Verification
go test ./internal/control ./internal/cligo test ./internal/configgo test ./...go test ./...from the desktop modulenpm run typecheckfrom the desktop frontendnpm run check:cssfrom the desktop frontendnpm run check:browser-previewfrom the desktop frontend