Skip to content

完善 Checkpoint 变更对比、差异展示与 Web 端交互修复#573

Open
Yumiue wants to merge 5 commits into1024XEngineer:mainfrom
Yumiue:html_gui_build
Open

完善 Checkpoint 变更对比、差异展示与 Web 端交互修复#573
Yumiue wants to merge 5 commits into1024XEngineer:mainfrom
Yumiue:html_gui_build

Conversation

@Yumiue
Copy link
Copy Markdown
Collaborator

@Yumiue Yumiue commented May 7, 2026

变更概述

  • Checkpoint 链路:完善变更对比与差异展示,补齐 per-edit 快照增强和恢复能力
  • Web 端修复:修正模型切换链路一致性,优化 ChatInput 多模态交互,修复 FileChangePanel 文件变更面板展示
  • Patch 解析增强:改进 unified diff 解析器,支持更准确的文件变更内容渲染
  • Bypass 机制:Gateway 层新增 bypass 通路,优化 Runtime 桥接层
  • 发布构建:补齐 goreleaser 配置,Web 端发布版本自动构建依赖

主要变化

Checkpoint

  • 增强 PerEditSnapshotStore 快照捕获与比较能力
  • 新增 checkpoint_restore.go 恢复逻辑
  • 补齐 end-of-turn checkpoint 创建与查找测试

Web 前端

  • ModelSelector:修复模型切换状态不一致问题
  • ChatInput:支持多模态输入,修复快捷键冲突
  • FileChangePanel:重构变更文件展示,适配 enhanced diff 格式
  • PatchParser:增强 unified diff 解析,支持 rename/copy/new file 模式
  • EventBridge:完善前后端事件桥接

Gateway / Runtime

  • Gateway Bootstrap 新增 bypass 模式
  • Runtime 桥接层接口优化

@chatgpt-codex-connector
Copy link
Copy Markdown

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Credits must be used to enable repository wide code reviews.

Copy link
Copy Markdown

@fennoai fennoai Bot left a comment

Choose a reason for hiding this comment

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

Found 2 noteworthy issues after code quality, performance, security, and documentation passes.

} catch (err) {
console.error('selectProviderModel failed:', err)
}
try {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

setSelected(m) has already committed the optimistic UI state by the time this RPC runs, but the failure path only logs to the console. If setSessionModel / selectProviderModel fails, the dropdown keeps showing the new model even though the backend state never changed, and the deferred path has the same problem. Please either revert the optimistic state on error or surface a toast and re-sync from listModels() after a failed apply.


return Array.from(byPath.entries())
.filter(([path]) => path)
.filter(([path]) => {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

This new filter drops every run-scoped file entry unless parseUnifiedPatch() produced at least one rendered diff line. That means legitimate backend-reported changes with no hunk body, such as zero-byte file add/delete or rename/copy-only patches, disappear from FileChangePanel even though diff.files still reports them. The UI should preserve those entries and treat the parsed patch as optional metadata instead of a hard requirement.

@codecov
Copy link
Copy Markdown

codecov Bot commented May 7, 2026

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