Skip to content

feat: 移除 Tab 栏,优化顶部布局#3439

Open
ttmouse wants to merge 64 commits into
esengine:main-v2from
ttmouse:main-v2
Open

feat: 移除 Tab 栏,优化顶部布局#3439
ttmouse wants to merge 64 commits into
esengine:main-v2from
ttmouse:main-v2

Conversation

@ttmouse

@ttmouse ttmouse commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

变更内容

  1. 移除 Tab 栏 — 删除 TabBar 组件及其所有相关 state/handlers:

    • tabOrderIdstabRevealSignalvisibleTabs 等 state
    • handleTabChangehandleTabClosehandleTabsReorderhandleNewTab 等 handler
    • workspace-tabs-bar 容器及其 CSS
  2. 右侧面板切换按钮移入 topicbar — 放在 topicbar__actions 最右侧,使用与 Copy/Export 一致的 topicbar__action-btn topicbar__action-btn--icon 样式

  3. 标题栏去掉重复的项目名前缀 — 不再显示 "项目名 / " 前缀

验证

  • tsc --noEmit 零错误
  • ✅ CSS 语法检查通过
  • wails build 构建成功

@github-actions github-actions Bot added v2 Go rewrite (1.x) — main-v2 branch, active development desktop Wails desktop app (desktop/**) and removed v2 Go rewrite (1.x) — main-v2 branch, active development labels Jun 7, 2026
@SivanCola

Copy link
Copy Markdown
Collaborator

有更改之后的效果图吗?

@ttmouse

ttmouse commented Jun 7, 2026

Copy link
Copy Markdown
Contributor Author

有更改之后的效果图吗?

image

@SivanCola

Copy link
Copy Markdown
Collaborator

tab 标签栏反馈下来是降低使用切换不同会话挑战难度的。直接移除有些跨越

@ttmouse

ttmouse commented Jun 7, 2026

Copy link
Copy Markdown
Contributor Author

tab 标签栏反馈下来是降低使用切换不同会话挑战难度的。直接移除有些跨越
恩 看个人习惯 我倾向于顶部和侧边栏两种模式二选一。
不要同时存在。
对于同时开的窗口不多的人来说。顶部的就可以了。Tab里面也可以相对完整的展示名称,也不需要记忆。
我个人的习惯是会多开很多窗口,顶部的Tab已经完全达不到区分的目的,展示的文字太有限了。
那我会更倾向于直接在侧边栏展示就好了,顶部的话根本就没有办法让我切换。

@ttmouse

ttmouse commented Jun 7, 2026

Copy link
Copy Markdown
Contributor Author
2026-06-07.19.00.28.mov

新增一个折叠按钮。

@SivanCola

Copy link
Copy Markdown
Collaborator

2026-06-07.19.00.28.mov
新增一个折叠按钮。

这个按钮很不错。关于上面那个 tab 栏能否也加一个开关设置或者按钮,让用户去选择是否展示 tab。这样的话应该就可以照顾到不同人的体验

@ttmouse

ttmouse commented Jun 7, 2026

Copy link
Copy Markdown
Contributor Author

2026-06-07.19.00.28.mov
新增一个折叠按钮。

这个按钮很不错。关于上面那个 tab 栏能否也加一个开关设置或者按钮,让用户去选择是否展示 tab。这样的话应该就可以照顾到不同人的体验

试试,那添加到设置里面吧。默认开启。有需求的自己去关。

2026-06-07.19.00.28.mov
新增一个折叠按钮。

这个按钮很不错。关于上面那个 tab 栏能否也加一个开关设置或者按钮,让用户去选择是否展示 tab。这样的话应该就可以照顾到不同人的体验

可以试试,添加到设置项。

image 侧边栏添加了时间展示。

@ttmouse

ttmouse commented Jun 7, 2026

Copy link
Copy Markdown
Contributor Author
image 支持切换了

@kekexunxun

Copy link
Copy Markdown
Contributor
image 越看越像 Qoder 的 Quest。是否可以考虑增加一个多任务状态展示,Qoder这个仿 Vibe-kanban 。我觉得还蛮有用的,尤其是多工作区任务执行的时候,状态查看非常方便

@ttmouse

ttmouse commented Jun 8, 2026

Copy link
Copy Markdown
Contributor Author

image 越看越像 Qoder 的 Quest。是否可以考虑增加一个多任务状态展示,Qoder这个仿 Vibe-kanban 。我觉得还蛮有用的,尤其是多工作区任务执行的时候,状态查看非常方便

我自己用的版本在侧边栏里面已经做了一些优化
比如说,当前对话哪个正在生成中,哪个是生成完之后需要读取,然后给个快捷键,快速定位到下一个需要读的。
然后还加了声音的效果。

我感觉这种可能会比看板更实用
image

ttmouse added 15 commits June 9, 2026 08:38
- 删除 TabBar 组件及其所有相关 state/handlers(tabOrderIds、tabRevealSignal、
  visibleTabs、handleTabChange/Close/Reorder/NewTab 等)
- 删除 workspace-tabs-bar 容器及 .workspace-tabs-bar CSS
- 将右侧面板切换按钮移入 topicbar__actions 末尾,使用与 Copy/Export
  一致的 topicbar__action-btn topicbar__action-btn--icon 样式
- 删除之前误加的 chat-pane__topbar 独立条及其 CSS
- 还原被构建过程误删的 dist/.gitkeep
- 非编辑模式:h1 直接显示 tab.topicTitle,不再包含 workspace 前缀
- 编辑模式:去掉 topicbarProjectPrefix / 前缀
- 删除不再需要的 topicbarProjectPrefix 变量
移除 .project-tree__topic 的 margin-right: var(--project-tree-action-column),
该 36px 右间距是为一级菜单的 '+' 按钮预留的,二级菜单没有操作按钮,
却保留了该间距导致右侧出现多余空白,无法撑满全宽。
删除项目行左侧无实际意义的 Folder 图标,只保留展开箭头和颜色标识圆点。
这样一二级菜单的视觉更简洁统一。
- 将 .project-tree__topic 的 margin-left 从 22px 改为 11px
- 文字起始位置 = 11px (margin) + 30px (padding: 14+16) = 41px
- 与一级菜单文字起始位置 8+12+7+7+7=41px 完全对齐
给 .sidebar__new、.project-tree__search、.project-tree__header
添加 flex-shrink: 0,防止当项目列表内容过多时被 flex 容器压缩高度。
在新增项目按钮左侧增加一个双向箭头按钮,点击切换全部折叠/展开。
- 递归收集所有可展开节点 key 判断当前状态
- 动态 Tooltip:全部已展开→'Collapse all',否则→'Expand all'
- 样式与旁边的 '+' 按钮一致
- 双击二级菜单直接进入重命名模式
- 选中状态改为圆角,移除左侧彩色条纹
- 右侧显示相对时间(3 分钟、1 天等),去掉'前'字
- 折叠/展开按钮图标区分状态:展开时 ⥮,折叠时 ⇅
The unread indicator dot in the left sidebar topic list used
`var(--fg-muted)` which was never defined anywhere in the project,
making the dot transparent and invisible.

Replaced with `var(--fg-dim)`, a defined gray variable available
in both dark and light themes.
…betically

Introduce sortTopicIDsByActivity() that accepts a callback to get each
topic's activity timestamp, and returns IDs sorted most-recent-first.
Updates both global and project topic list sections in ListProjectTree
to pass the activity from on-disk sessions or open tabs.

The old orderedTopicIDs() remains (unused) and will be removed in a
follow-up commit.
Replaced by sortTopicIDsByActivity() in the previous commit.
All 5 remaining uses of the undefined var(--fg-muted) are now
replaced with defined variables:
- workspace-branch-indicator → var(--fg-faint)
- settings-model-current__meta span → var(--fg-dim)
- provider-readonly-field--stacked span → var(--fg-faint)
- provider-model-fetch-row span → var(--fg-faint)
- right-panel__tab → var(--fg-dim)

This was the same root cause as the invisible unread dot: --fg-muted
was never defined in the project.
ttmouse added 27 commits June 9, 2026 08:43
…hevron to right

- Replace .project-tree__folder-color (7px dot) with a <Folder> icon
- Folder icon color follows --project-accent per-folder color setting
- Move expand/collapse chevron to the right of folder label
- Only render chevron when folder has children (no empty spacer)
…ide BrainCircuit

- Remove name prop from ProcessCard in AssistantMessage (hide Thinking label)
- Replace hand-drawn SVG ProcessBrainIcon with lucide-react BrainCircuit icon
- Update ProcessToolIcon SVG path
…nstead

- Remove /__browser_proxy endpoint and cspResponseWriter from app.go
- Add simple OpenURL binding that uses exec.Command('open', url)
- Simplify BrowserPanel: remove iframe, back/forward/reload buttons
- Keep URL input + 'Open in browser' button only
- Add translations for browserOpen (en/zh)
jump-bar 之前是 .transcript 的子元素,无论 position: absolute
还是 position: sticky,在 overflow-y: auto 容器内都会随内容滚动。

解决方案:新增 .transcript-wrap 包裹器(position: relative),
将 QuestionJumpBar 作为 .transcript 的兄弟元素放在包裹器中,
用 position: absolute 相对于包裹器定位,不受滚动影响。
- Remove the caret span (<span class="composer__caret">›</span>) from
  Composer.tsx
- Delete .composer__caret CSS rules
- Adjust .composer padding: 10px 10px 9px 13px → 10px (uniform)
- Reduce gap from 8px to 6px (no caret to space around)
- Add desktop/internal/browser/ headless Chrome CDP service (Go)
- Wire browser.Service lifecycle into App startup/shutdown
- Add bridge methods for browser: OpenURL, Navigate, GetPageTitle, Resize
- Build BrowserPanel.tsx with URL bar, back/forward/refresh, loading state
- Add i18n keys for browser panel (zh/en)
- Include setup-dev-aliases.sh helper script
- Remove ArrowUp send button from composer input row (textarea row)
- Replace single cancel button with multi-state action button in
  .composer-meta__stop-wrap: sends (!running) or cancels (running)
- Both states use icon-only design (ArrowUp / Square) with shared
  .composer-meta__action-btn style
- New unified CSS: blue bg rgb(2,83,229), 32x32px, 8px radius
- Remove unused .composer-runstatus__stop and override CSS
- BrowserTypeText: CDP Input.insertText for typing into focused elements
- BrowserSetViewportSize: sync viewport to sidebar iframe dimensions
- BrowserInspectElement: DOM element inspection at viewport coordinates
- Frontend: CDP readiness badge, sync iframe nav to CDP backend
- go-rod promoted from indirect to direct dependency
- New tab default title changed from '新标签页' to '浏览器'
- workspace_changes.go: remove duplicate workspaceGitBranch/GitBranches/GitCheckout
- WorkspacePanel.tsx: fix broken JSX nesting (extra closing tags from merge)
- types.ts: remove extra closing brace
- locales/zh.ts: fix straight quotes in plannerMaxStepsDisabledHint
- WorkspacePanel: revert to upstream version, adapt DockContent to use initialViewMode prop
- bridge.ts: add missing BrowserInspectElement/BrowserSetViewportSize mock methods
- locales/zh.ts: fix straight quote causing parse error
- Add gitBranch state, branchMenuOpen/branchList/switchingBranch state
- Add openBranchMenu/switchBranch/fetchGitBranch functions
- Add branch indicator with dropdown switcher in workspace-files section
- Works when viewMode === 'changed'
- Add isDeletedChange/changeDetail helper functions
- Add loadChanges with request dedup, changedRows memo
- Add renderChangedRows showing file name + path + detail + badges
- Add refresh button next to branch switcher
- Changed view shows git diff file list instead of file tree
- Floating action button appears when user scrolls up from bottom
- Smooth-scrolls to latest message on click
- Keyboard shortcut Cmd+↓ (Mac) / Ctrl+↓ (Win/Linux)
- Button auto-hides when at bottom or new messages arrive
- Centered relative to chat content area, 8px from bottom
- Add input/textarea/contenteditable guard to Cmd+↓ handler so it
  doesn't steal standard text-editing shortcuts (matches existing
  codebase pattern in AskCard/ApprovalModal)
- Add scrollingRef to suppress onScroll updates during smooth-scroll
  animation (prevents FAB flicker and stick.current overwrite)
- Use scrollend event to clear scrollingRef when animation completes
…workspace cleanup

- Add Memory dock panel (右侧面板「记忆」标签页)
- Add Default YOLO mode setting (新对话默认启用 YOLO)
- Status bar: compact% on ctx hover, avg% on cache hover, turn tokens only during generation
- WorkspacePanel: cleanup duplicate switchBranch, effectiveMode with comment
- Transcript: scrollend Safari 15+ fallback via setTimeout
- tabs.go: expose LastActivityAt in TabMeta
- types.ts: deduplicate gitBranch, add memory DockTabType
- zh.ts: remove orphaned agentRuntime keys
- styles.css: mem-fact type dots, z-index var, workspace-files height, sidebar 47px
- Add turnStartAt prop to StatusBar, passed from controller state
- Display as ↓ 2.3k tokens · 1.0s (or 1m 23s for long generations)
- Only visible during generation, hidden when stopped
…ction, add type-dot indicators

- Rewrite MemoryDockPanel to use mem-fact/mem-filter/mem-section__title CSS classes
- Remove inlined styles, align with workspace panel conventions
- Remove Docs section (REASONIX.md files) from memory panel
- Add .mem-fact__dot color indicators for memory types
- Add .workbench-dock__body > .workspace-files height constraint
- Fix unused ref and i18n for empty state
- dock-tabbar height 48px→47px
…memory types

- Add previewDismissed state backed by localStorage to keep git history
  preview panel closed across dock tab switches
- Show X button in preview header when no file is selected (changes view)
  to close the right preview panel without closing the dock tab
- Clicking a commit or file reopens the dismissed preview
- Add memory.typeLabel.* and memory.globalMemories i18n keys for
  MemoryDockPanel type filter and global memory section
…adding; composer mode chip and Cmd+K palette

- Remove border from .process-card and .tool, use var(--card-bg) background
  with separate formulas for dark (38% bg-elev) and light (16% bg-soft) themes
- Compact internal padding to 8px uniform, min-height reduced
- Restore tool card margin to 6px for spacing
- Remove file path subject from tool card headers (tool__subject)
- Remove composer modebar brightness filter that was dimming white text
- Add global Cmd+K keydown listener to open command palette
…aunch tab tree

- Add GlobalStore to memory.Set for cross-project facts stored globally
- Add GlobalFacts field to MemoryView for memory dock panel display
- Add StoreForGlobal() resolving to ~/.config/reasonix/memory/global
- Inject global memories into system prompt prefix via Block()
- fix(app): create default global tab with real topicID so project tree is
  immediately visible on first launch
- fix(ProjectTree): retry ListProjectTree with exponential backoff when
  Wails bindings are not yet ready on first render
- fix(TodoPanel): default to collapsed state (open=false)
- Update mock and TypeScript types for globalFacts
- Add 'commit' DockTabType with GitCommit icon
- Create GitPanel component with branch switcher, commit history, commit detail
- Changes tab (WorkspacePanel): remove branch indicator and git history,
  now only shows changed file list + file content preview
- Commit tab (GitPanel): branch switching, commit history, commit detail
  in a full-height panel
- Clean up unused git history states from WorkspacePanel (loadGitHistory,
  toggleCommit, formatCommitDate, gitHistory, etc.)
- commit 历史圆点与标题水平对齐,展开不位移
- changes badge 移到最右,discard 按钮放 badge 左侧
- 标题/文件名取消加粗
- 文件列表路径去除末尾文件名
- GitPanel / MemoryDockPanel 接收 refreshKey,切换项目时刷新
- WorkspacePanel: 移除分支切换按钮/菜单/状态及相关回调,替换为简洁的文件统计摘要
- bridge.ts: 新增 GitDiscardFile 方法签名与 mock 实现
- workspace_changes.go: 新增 GitDiscardFile(git checkout -- <file>)后端方法
Bringing in 27 upstream commits including:
- ci: Dependabot + CodeQL, Linux .deb, macOS signing
- cli: --resume flag, /sandbox status, empty-enter scroll
- desktop: toast notifications, font fixes, portal crash fix,
  session restore, context menu flash fix, composer @ refresh
- agent: rewind boundary, forget handling, evidence optimization
- memory: store changes, ACP dispatch updates
- boot: runtime bootstrap hardening
- permission: approval scopes by rule
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

desktop Wails desktop app (desktop/**)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants