Skip to content

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

Closed
ttmouse wants to merge 79 commits into
esengine:main-v2from
ttmouse:main-v2
Closed

feat: 移除 Tab 栏,优化顶部布局#3439
ttmouse wants to merge 79 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 13 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.
ttmouse added 11 commits June 9, 2026 09:45
…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
ttmouse added 13 commits June 9, 2026 21:29
生成中显示的停止按钮新增 CSS 动画:0.25s 顺时针转90°、
0.75s 停顿,1s 周期循环。利用正方形转90°与0°视觉一致
的特性,一次旋转即完成视觉闭环。

- 动画装在 .composer-meta__action-btn--stop:not(:disabled) svg
- ease-in-out 缓动,节奏不抢戏但能感知系统在运行
时间筛选面板:
- 菜单改为左侧对齐,去边框描边
- 面板宽度收窄(min-width: 108px→84px)
- 字体缩小至12px,字重400,不加粗
- 选中项颜色改为 accent 蓝色
- 筛选激活时图标旁显示短标签(10/1h/3h/24h)
- 按钮间距统一6px,自适应宽度

ApprovalModal:工具审批弹窗新增 attention chime 提示音
Merge 上游时 auto-merge 用上游版本覆盖了 SettingsPanel.tsx,
导致通知音效设置(生成完成 + AI提问)丢失。手动恢复 import、
state 和 UI 代码。
Merge 上游时 SettingsPanel.tsx 被上游版本覆盖,丢失了
生成式背景音乐预设选择器。恢复 import、state 和 UI。
通知音效(生成完成、AI提问)下拉框统一改为 mem-select,
预览按钮统一改为 chip,与生成式背景音乐保持一致。
…pen support

Each copy of the .app at a different path now gets its own Wails
SingleInstanceLock ID (com.reasonix.desktop.<sha256[:8]>), allowing
them to run side by side. The same binary still prevents double-launch.
…ative-PID kill)

On Unix (macOS/Linux), KillTree only killed the direct child process
(cmd.Process.Kill()), leaving orphan grandchildren alive — e.g. the
codegraph launcher shell's bundled node runtime. Over time, 40+ orphan
processes accumulated, causing severe system slowdown.

Fix: Set Setpgid on the child before starting it, making it the leader
of a new process group. KillTree (and the Cancel handler) now uses
syscall.Kill with a negative PID to reap the entire process group.

This matches the pattern already proven in bash_kill_other.go and
shell_kill_other.go, and is symmetric with the Windows Job Object
approach in kill_windows.go.
Sync with upstream esengine/DeepSeek-Reasonix main-v2 through commit
54531f3. Key upstream changes:

- Split mode into collaborationMode + toolApprovalMode axes
- Add goal mode (/goal) and /clear command
- Add workspace-scoped session directories (session isolation)
- Remove Browser* methods from desktop backend
- Add bot gateway (Feishu/Weixin/QQ) with ChatDirect support
- Add PDF attachment text extraction
- Add TUI shortcuts (Ctrl+Home/End)

Conflicts resolved with upstream version as base, preserving local
custom features (browser panel, dock tabs, sidebar improvements,
sound/music features, generative background music).

Run 'cd desktop && wails generate module' to regenerate Wails bindings.
@github-actions github-actions Bot added the mcp MCP servers / plugins (internal/plugin, codegraph) label Jun 10, 2026
@esengine

Copy link
Copy Markdown
Owner

Closing this one: removing the tab bar reverses a settled decision 鈥?the tab-strip chrome was deliberately re-landed (#2925, after the #3011 revert) and it's the direction we're building on, so a PR that deletes it can't go in. The branch is also the fork's main-v2 carrying ~5.5k lines of unrelated changes, and 7 required checks are red. If you want an option to hide the tab bar, open an issue for that settings discussion first (same note as on #3458 鈥?it'd persist via desktop config, not localStorage). The topicbar polish bits could stand alone as small PRs from clean branches; see also the re-cut request on #3698.

@esengine esengine closed this Jun 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

desktop Wails desktop app (desktop/**) mcp MCP servers / plugins (internal/plugin, codegraph)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants