Skip to content

UI 打磨批次 + renderer 简化重构(7 项) - #38

Merged
Jaxton07 merged 19 commits into
mainfrom
polish/overall
Aug 28, 2026
Merged

UI 打磨批次 + renderer 简化重构(7 项)#38
Jaxton07 merged 19 commits into
mainfrom
polish/overall

Conversation

@Jaxton07

Copy link
Copy Markdown
Owner

UI 打磨批次

  • 代码块重设计:无边框悬浮卡片、复制按钮移右上、阴影收敛 shadow-soft、去语言标签/折叠、首行灰底修复
  • 消息区 git 分支悬浮胶囊(收进变更侧栏 header 下方,长名省略截断)
  • Composer:斜杠命令任意位置触发(空格+/),选中不再清空输入框
  • 状态行 error 圆点改琥珀;缩略图删除键遮挡修复;diff 行重叠修复;中断错误卡修复
  • 修 dev 启动 monaco worker 404(接管 worker 注册)
  • README 更新 + 演示截图重拍

renderer 简化重构(纯重构,零行为变化)

7 项结构收敛,8+1 commits 各自独立可回退:

  • sessions.ts:四处重复的「history + followUpQueue + todos」装载序列收敛为 loadSessionBundle(取数并行化,应用顺序不变)
  • MessageItem(409→107 行):拆出 message-actions / UserMessage / SystemMessagereadOnly×3、agentActive||compacting×2 重复 selector 收敛为 hooks/use-session-state.ts
  • MetaGroup(342→212 行):rAF 扫光引擎抽 use-sweep-highlight.ts,展示与动画分离
  • settings store(730→429 行):拆出 catalog.ts(目录搜索/装卸)与 provider-login.ts(OAuth 状态机),依赖单向;登录取消时机从 setOpen 挪 LoginDialog 卸载 cleanup
  • App(154→123 行):事件订阅抽 use-session-event-bridge.ts
  • turnDiff chip 定位进 shared buildChatRows(opts 注入,lan-web 默认零影响)+ lan-web 未知行型 guard
  • 设置面板纯搬家:settings/extensions/ 目录 + ModelRowsEditor/BuiltinProviderEditForm 独立文件

质量门:typecheck / lint(373 files 0 err 0 warn)/ test(458+289,净增 7 例)全绿;设计→实施→review 全程经跨会话频道协作(spec/plan/REVIEW 存档于 .local,不入库)。

- docs: 更新 README/README.zh(Homebrew 安装、macOS 更新行为修正、0.4.3-0.5.3 新功能清单:子代理/上下文蒸发/视觉代理/报错系统/LAN 观察/订阅 OAuth 等)
- assets: CDP 确定性截图重拍 README 演示图 3 张(欢迎页+桌宠 / UI 插件设置 / 深色背景聊天)
- fix(MessageList): 被打断轮(纯工具轮无正文)diff chip 与折叠组圆点行重叠 8px —— chip 上提 -mt-4 与 MetaGroup -mb-4 叠加所致,chip 前邻折叠组时不再上提
- fix(errors/reducer/mapping): 用户主动中断不再落「模型请求失败」错误卡 —— SDK 把 in-flight 请求取消标成 stopReason=error(This operation was aborted / Request aborted),live 与历史回放统一用 isUserAbortError 排除;含 abort 字样但主动语态的真实错误仍产卡(回归保护)
- style: 键盘焦点环 :focus-visible 统一接管(accent 低饱和描边,替代 Chromium UA 默认环)
- scripts: 新增 CDP 断言截图工具 cdp-shot.mjs 与 GIF 帧场景编排 shoot-demo-gif.mjs
- 触发从「仅文本开头」改为光标探测:/ 在行首或空白后即弹菜单
  (extractSlashToken,与 @ token 同构;onSelect 光标移动重探;
  胶囊已存在时不触发)
- 选中/Tab 补全:命令转胶囊、触发 token 原地移除、其余文字保留
  为参数(发送拼 /cmd args,SDK 仅展开开头命令,故需提升为胶囊
  而非原地留文本);无参内置 compact/settings 仅整条文本恰为该
  命令时保持选完即跑
- Esc 从清空全部改为收起菜单保留文字;胶囊撤销(Esc)支持非空
  文本,命令拼回开头
- MetaGroup 圆点 error 态从 ink-faint 改 warn token(琥珀,深浅色自适应)
- 代码块:语言标签胶囊 display:none;折叠按钮 showCollapseButton:false
  关闭(不再支持折叠),清除 :has(aria-pressed) 折叠态残留规则
- 首行灰底根因:markstream 的 monaco 默认值(renderLineHighlight:"none"
  等)只对 diff 块生效,普通块光标恒停第一行 → 当前行高亮让首行多一层
  灰底;经 codeBlockProps.monacoOptions 显式关闭
- 输入框顶部图片缩略图的 × 删除键 -top-1.5 伸出容器顶落入消息区,
  被 MessageList(z-10)盖住:ApprovalDock 两个分支根节点提为 z-20
stream-monaco 用 new URL(裸说明符, import.meta.url) 拼 worker 地址,
dev 下被 Vite 预打包进 .vite/deps/chunk-*.js 后指向不存在的
.vite/deps/monaco-editor/esm/... → worker 404:终端 "The file does
not exist" 警告 + renderer "Uncaught [object Event]"(每次代码块
编辑器实例化触发)。

用 Vite 官方 monaco 模式修复:monaco-contribs.ts(main.tsx 早期引
入)经 ?worker 导入抢先注册 self.MonacoEnvironment.getWorker,
stream-monaco 的 ensureMonacoWorkers 检测到已有 getWorker 自动让位。
只注册 editor + typescript 两个 worker:只读代码块语法高亮由 shiki
主线程承担,language service 用不上,其余语言 label 落 editor worker
兜底,避免打包 5 个 worker 膨胀产物。
- 容器去边框(border:none 压掉库的 border 工具类 + inline
  borderColor),--ms-radius 抬到 12px,shadow-soft——设计语言
  rounded-xl bg-surface shadow-soft 同 QueueBar/TodoPanel
- 语言标签隐藏后 header 只剩按钮组落到左侧:justify-content:
  flex-end 靠右,复制钮回到右上角
- 阴影:shadow-soft 的 0 0 14px -2px 微光在 700px 宽卡片上左右不可
  见,改双层环境光(近场 0 2px 24px -2px + 远场伞 0 0 64px -12px),
  颜色从 ink 派生(color-mix)——深色 ink 为浅色自动变白色发光,
  符合既有深色阴影约定
- 黑杠根因:Monaco 概览标尺(overview ruler)的光标行标记,又是
  库默认值只对 diff 块生效的漏网之鱼;monacoOptions 补 overview
  RulerLanes:0 / renderOverviewRuler:false / overviewRulerBorder:
  false / hideCursorInOverviewRuler:true
双层大伞环境光叠太重,700px 宽卡片糊出一圈灰框(观感像被正文
边界截断)。改回 shadow-soft 柔和微光,卡片左右各收 8px 给阴影
外扩(约 12px)留出空间,四周完整悬浮。
- 显示当前会话 cwd 的分支,只读:点击展开本地分支列表(当前分支
  圆点高亮),不做切换(空态 ProjectBranchPicker 才是切换入口),
  列表无 hover/click 态避免假交互
- 显示条件与 showEmpty 同判定:有消息或流式中才显示,新会话隐藏
  (输入框下方已有分支选择器);非 git 目录不渲染
- 卡片形态照 TodoPanel:rounded-xl bg-surface shadow-pop,胶囊
  w-40 ↔ 面板 w-56 + grid-rows 0fr→1fr 抽拉 300ms,点击外部关闭
- 数据走已有 IPC listGitBranches,零新增通道与文案
- 折叠态分支名原挂 shrink-0 + truncate:shrink-0 阻止收缩使
  truncate 失效,长名被容器 overflow-hidden 硬裁无省略号;改为
  min-w-0 + truncate
- 折叠/列表行补 title 悬停看全名
- 临时长名分支实测两处截断后已删
- 左上角悬浮胶囊被用户判为突兀;分支与变更同域(仓库状态),
  收进 DiffSidebar:header 下方一条幽灵文字行(⎇ 分支名,11.5px
  ink-faint,hover 现 bg-hover 底),点击下弹只读分支列表(无边框
  浮卡 shadow-pop,当前分支圆点 + 加重),点击外部关闭
- 列表行无 hover/click 态避免假交互(切换仍走空态 ProjectBranch-
  Picker);显示条件不变:有消息内容才显示、非 git 目录不渲染
- 分隔线从 .diff-side-head 移到 .diff-side-branch(head+branch
  同为一组头部);数据仍走已有 IPC listGitBranches
- 删除消息区左上角悬浮胶囊 BranchBadge(App.tsx 挂载一并移除)
…Message,readOnly/busy selector 收敛为 hooks
…可选),MessageList 删本地计算,lan-web 加未知行型 guard
@Jaxton07
Jaxton07 merged commit 26c3a36 into main Aug 28, 2026
1 check passed
@Jaxton07
Jaxton07 deleted the polish/overall branch August 28, 2026 07:42
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