Skip to content

feat: M7 TUI 像素级对齐里程碑(截图校准/StructuredDiff/权限对话框/Markdown 渲染) - #434

Merged
liuqihonggit merged 16 commits into
mainfrom
w2
Oct 20, 2026
Merged

liuqihonggit merged 16 commits into
mainfrom
w2

Conversation

@liuqihonggit

Copy link
Copy Markdown
Owner

Summary

  • ReplShell 重构(M7 前置):HostSession/DemoSession 合并为共享 REPL 外壳,IReplEngine 统一引擎交互面,净删 919 行重复代码
  • M7-1 截图校准工具链:TS 参考帧与 C# 采集帧同字体栅格化后像素 diff,clawd/prompt 两 region 0 字符 0 像素差异
  • M7-2 StructuredDiff 完整链路:Core 渲染(DiffHunk 投影+折叠预览)+ Host 补丁投影 + 引擎侧协议扩展(BridgeDiffHunk 镜像 DTO)+ 模拟回合演示
  • M7-3 权限对话框:Core 渲染与模态改道(键盘三档环绕)+ Host 引擎闭环(TuiPermissionBridge TCS 桥 + 临时批准策略)
  • M7-4 Markdown 渲染:Core 块模型/布局器 + 卫星项目 NativeTui.Markdown(Markdig 隔离,ADR 0140 零依赖铁律)+ 引擎闭环事件分流 + Demo 演示全形态

Test

  • NativeTui.Tests 549 + Markdown.Tests 18 + Host.Tests 35 全绿
  • 像素回归 0 差异(渲染批次提交门禁)
  • selftest 真实容器组装验证通过

… | 决策: IReplEngine 接口(Submit/Interrupt/SetPermissionMode/DrainEvents/DrainDiagnostics/IsAlive)统一引擎交互面,模拟回合改事件驱动(SimulatedEngine 时钟注入+忙时拒绝 Error 诱导对齐 EngineTurnClient),权限本地回执统一走事件,spinner Message 直改弃用(真实路径本就空消息+随机动词);净删 919 行重复代码
…awd/PromptInput)与 C# 采集帧(ReferenceScene 80×24 fixture)同字体栅格化后像素 diff, clawd 9×3 与 prompt 边框 80×3 两 region 验收 0 字符 0 像素差异; py cells() 解析器 inverse 盲区为已知限制; Markdown 渲染已决策引入 Markdig
…ultItem 多行渲染 | 决策: Core 零依赖自带 DiffHunk/DiffLine 投影(DiffLineKind 数值对齐引擎 PatchLineType 可直转 byte), 着色用基准 theme.ts diff 前景键 DiffAddedWord/DiffRemovedWord 替代青蛙TUI 硬编码十六进制, 折叠预览 2 行对齐青蛙TUI Take(3) 先例且 Ctrl+O 展开交互留 M7 后续; JSON 往返 camelCase patch 字段且旧引擎无字段反序列化 null 兼容
…dPatch | 决策: ProjectPatch LINQ 链式投影引擎 StructuredPatchHunk 到 Core DiffHunk(DiffLineKind 与 PatchLineType 数值对齐直转 byte 免 switch), 空/null 补丁归 null 维持纯文本摘要形态; JoinCode.Cli.DiffLine 同名歧义沿用 EnginePermissionMode 别名先例加 CoreDiffLine 全局别名
…EventConsumer 透传 | 决策: ADR 0143 先事件模型后投影(IEventConsumer.OnToolEnd 已带 patch 参数属协议本体, 本批补齐 JSON 投影); 定义 BridgeDiffHunk/BridgeDiffLine 镜像 DTO 而非直接序列化 StructuredPatchHunk(其 type/oldStart 等字段会被 native_tui DiffLine 忽略致 kind 全部静默退化为 context 的语义丢失); 两侧 Patch 均加 WhenWritingNull(null 不输出字段, 旧 golden 契约不变且旧 TUI 兼容)
… Edit 工具并携带 4 行 hunk 补丁(超 2 行预览同时演示折叠提示), Demo 模拟回合成为 StructuredDiff 手动验收路径; M7-1 像素回归验证 clawd+prompt 两 region 0 差异
…I DialogRequest 取代语义+焦点三档环绕), PermissionRequestItem 像素对齐基准 FallbackPermissionRequest(仅顶边框 permission 色 round 无角全宽/bold permission 标题 paddingX=1/工具行 3 缩进/Select 数字前缀三档选项/焦点 ❯ suggestion/Esc to cancel dim), ReplShell 挂起时键盘模态路由(数字1-3/Esc=Deny/Enter 焦点档/上下环绕)且回合结束自动 Deny 收尾防对话框残留, 渲染方法按 DiffResultItem 先例收口 MessageRenderer
…话框挂起→TCS同步阻塞等按键(对齐CLI IConfirmationGate单通道先例,未绑定shell降级Deny防死锁), TuiPermissionConfirmationHandler 转发bridge+临时批准(Allow 1分钟/AlwaysAllow 30分钟+[红绿灯ask]同级批准,对齐CliPermissionConfirmationHandler), TuiInteractionModule(Order=80)经CreateGuiSessionAsync extraModules注册handler关闭PendingConfirmation闭环, BeginPermissionRequest/Permission升public(宿主生产消费面), selftest真实容器组装验证通过
…影期施加修饰+Code/Link 语义标签渲染期取色(Code→permission 色对齐基准 codespan), DTO 主题/宽度无关可在 Core 零依赖直测(对齐青蛙TUI GUI 三层分层先例); 布局对齐基准 formatToken(h1 三修饰/h2+ bold/引用每行▎dim+Italic 修青蛙TUI 前缀只加一次坑/列表 2 空格每层+有序分级编号/hr 三字符/表格列宽 max(显示宽,3)+分隔行/顶层块间空行=Box gap 视觉主路径); word wrap 词边界贪心+CJK 逐字+超宽硬断, 续行 continuationPrefix 对齐列表项内容列; 嵌套列表从项内容列起自带缩进
…离在卫星层保 Core 零依赖铁律(ADR 0140), 投影只产结构+行内样式 flags(标题级别样式布局层施加)实现职责分离; pipeline=UseAdvancedExtensions 对齐青蛙TUI 先例; 删除线忽略+html块丢弃+mailto降级+图片显示URL 对齐基准 formatToken(configureMarked 禁del/def/html不渲染); 有序start取首项Order(ListItemBlock.Order); MarkdigDocument同名歧义用全局别名先例; 18 用例全绿+slxn 全量编译零警告
…down 可空字段(WhenWritingNull 保旧 JSON 逐字节兼容), MarkdownBlock 树带 JsonPolymorphic discriminator 进 BridgeJsonContext; 投影决策在 Host consumer(OnDone 经 ProjectOptional 快路径: 无语法字符降级纯文本对齐基准 hasMarkdownSyntax 采样 500), Driver 分流 MarkdownMessageItem/AssistantMessageItem; 进程内直连路径内存对象携带 DTO 零序列化税, 引擎侧 JSON 协议未来携带同字段自动升级
… 手构 8 类块模型(对齐 SimulatedPatch 先例直接构 DTO 不经投影器, Core 零依赖), 公开静态供演示构造复用; 完成事件 AssistantMessage 携带 Markdown 走 Driver 分流渲染链路; SeedMessages 首条 assistant 回复升级 Markdown 行内样式(启动即见渲染, 与回合全形态内容区分避免重复); 表格 Headers 扁平单元格构造(深层嵌套集合表达式坑规避 MarkdownLayoutTests 先例); 549 用例+selftest 全绿
…星 Markdig 投影/引擎闭环/Demo 演示), formatToken 权威映射+青蛙TUI 四坑规避, 像素回归 0 差异, 基线 549+18+35
@liuqihonggit
liuqihonggit enabled auto-merge (squash) October 20, 2026 16:05
@liuqihonggit
liuqihonggit merged commit d1df342 into main Oct 20, 2026
26 checks passed
@liuqihonggit
liuqihonggit deleted the w2 branch October 20, 2026 16:17
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