DeepSeek-Reasonix 桌面端“本轮结果“:回合级净变化统计与检查验证的完整实现解析

发布时间:2026/11/13 6:28:10

DeepSeek-Reasonix 桌面端“本轮结果“:回合级净变化统计与检查验证的完整实现解析 DeepSeek-Reasonix 桌面端本轮结果回合级净变化统计与检查验证的完整实现解析【免费下载链接】DeepSeek-ReasonixDeepSeek-native AI coding agent for your terminal. Engineered around prefix-cache stability — leave it running.项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-Reasonix导读当一轮执行结束、模型在回答中声明已完成修改时用户凭什么相信它DeepSeek-Reasonix 桌面端在回答下方渲染的本轮结果Turn Results面板回答了这个问题它基于宿主在回合结束时冻结的检查点快照展示已确认的文件净变化与实际执行的检查状态并且明确区分已记录的检查与对整个任务完成度的评分。本文以 docs/TURN_RESULTS.zh-CN.md 为骨架结合仓库中的后端冻结逻辑internal/checkpoint/turn_changes.go、事件回执协议internal/eventwire/receipt.go与前端归约器desktop/frontend/src/lib/turnResult.ts等源码证据完整讲解该功能的语义设计、统计边界、实现兼容性策略与可复现的验证方法。什么是本轮结果一轮turn执行产生文件改动或检查记录后桌面端在回答下方显示本轮结果分别展示已确认的文件净变化只统计本回合内、由宿主冻结并校验过的真实差异实际检查状态只反映已记录在案的检查命令的执行结果。一个需要反复强调的设计前提是检查通过仅描述已记录的检查不是对整个任务完成度的评分。它回答的是这一轮具体动了哪些文件、跑过哪些验证命令而不是任务是否整体达成。这一界限从文档到源码一以贯之例如前端归约器在 desktop/frontend/src/lib/turnResult.ts 中将检查状态归纳为running | failed | interrupted | stale | passed | none | unknown七种其中stale过期与interrupted中断都是独立于通过/失败的状态正是为了让用户区分检查确实失败与检查没能干净地完成。三个只读入口结果卡片提供三类查看入口全部仅用于查看不执行、不重跑、不安排任何检查也不需要新增配置入口作用查看差异打开该轮结束时保存的差异快照patch而非对当前磁盘实时 diff查看检查详情展示命令、退出码、过期或中断状态以及可展开的完整日志当前工作区全部差异返回原有工作区视图查看包括其他轮次和外部修改在内的当前变化仅查看的语义在源码中有硬性保障Store.TurnChanges(turn)返回的是冻结结果frozen result其注释明确指出reading history never touches the workspace且返回值是与存储可变状态分离的克隆见 internal/checkpoint/turn_changes.go。也就是说无论用户怎么翻历史卡片都不会触发对工作区的任何写入或重算。差异查看净变化Net Change的精确语义查看差异是整个功能的核心。它展示的是该轮结束时保存的差异其统计规则值得逐条拆解因为它们直接决定了用户对数字的信任度同一文件多次修改只计一次以本轮首次捕获的内容为基线baseline后续修改与之对比最终呈现的是一份这一轮开始时 → 这一轮结束时的净差异而不是工具调用次数的加总改回原样不增加行数如果在轮内先增后删、最终回到基线该文件不会出现在净变化中用户原有的未提交修改属于基线用户在智能体介入前就存在的脏文件改动不会被算作智能体本轮新增的改动。这是净变化最容易被误解的一点——它统计的是本轮造成的净变化而非工作区相对 HEAD 的全部差异。上述语义在后端FreezeTurnChanges中通过前后快照对比实现每一轮捕获文件的前镜像before content与后镜像after fingerprint只有前后身份不一致CompareIdentity返回非空的文件才进入差异构建流程且只有本轮前不存在→本轮后存在Create、本轮前存在→本轮后不存在Delete或内容/模式变化Modify三种情形会被记录见 internal/checkpoint/turn_changes.go。如果前镜像与后镜像完全一致直接跳过不产生任何行数——这正是改回原样不增加行数的实现来源。二进制与权限变化不虚构行数二进制文件和仅权限mode变化的文件有独立标识不虚构行数Binary标记二进制文件经 internal/fileutil/encoding 的编码探测后判定ModeOnly标记内容相同但权限位变化的文件两者都在TurnFile结构体中独立存在见 internal/checkpoint/turn_changes.go此时Added/Removed行数不参与统计展示。移动rename文件沿用已有捕获机制记录的路径不额外推断重命名——也就是说移动不会被猜成删除 A 新建 B而是如实呈现捕获到的路径变化。检查详情命令、退出码与日志的可信来源查看检查详情展示的是宿主实际执行并记录的检查命令包括命令本身退出码exitCode过期stale或中断interrupted状态可展开的日志。其中验证中…状态有严格的门槛只有宿主识别为检查且已进入执行的命令才会显示。从协议层看检查记录以ReceiptVerification形式存在于回合回执中包含Command、Passed、Stale、Interrupted、ExitCode以及用于日志关联的ToolCallID与ToolResultID见 internal/eventwire/receipt.go。前端在归一化时会做防御性校验passed true (exitCode undefined || exitCode 0)才被认定为通过见 desktop/frontend/src/lib/turnResult.ts避免标记通过但退出码非零的矛盾数据被渲染。日志的稳定标识与供应商复用防护日志并非从模型输出里抓取而是从已有本地会话记录读取同时校验两把钥匙工具调用 IDtoolCallId轮次结束时关联的稳定消息 IDtoolResultId。这把稳定消息 ID的校验非常关键即使供应商provider后续复用了工具调用 ID旧卡片也不会读到新日志——因为消息 ID 不匹配。这从协议结构上杜绝了历史卡片内容被新轮次数据污染的竞态。来源有歧义、尚未产生或已被清理时界面会明确提示不可用如改动统计不可用检查信息不完整而不是显示成零改动或检查通过。日志单次显示上限为2 MiB仅保留末尾部分时会提示截断。这一上限与后端TurnChangesBudget 2 20即 2 MiB保持同一量级见 internal/checkpoint/turn_changes.go。统计范围与历史诚实面对未知部分统计的语义部分统计partial coverage表示无法可靠归属所有修改或内容超出了捕获及差异处理的大小限制。此时已确认的数量仍会显示未知部分不会通过 Git HEAD、工具调用次数或变更回执数量来猜测。这一原则在后端体现为Coverage三态complete/partial/unknown加Reasons原因列表。FreezeTurnChanges在遇到以下任一情况时都会把覆盖度降级为partial并记录原因见 internal/checkpoint/turn_changes.go 与 internal/checkpoint/checkpoint.go原因触发条件snapshot_unavailable快照载荷已过期或指纹缺失无法对比ownership_unknown无法确认文件是否由本轮写入前后身份缺失active_writer冻结时仍有活跃写入者无法独占屏障size_limit内容或补丁超出 2 MiB 预算file_unavailable捕获当前路径失败external_change后镜像指纹与轮内记录不一致外部修改result_not_saved持久化失败前端展示层同样维护三态turnChangeText在coverage unknown时显示改动未知coverage partial时在统计后追加部分统计标记见 desktop/frontend/src/lib/turnResult.ts并明确差异算法的近似计数不作为精确统计展示。历史卡片的冻结语义历史卡片保留当时的统计打开旧轮次不会按当前磁盘内容重新计算差异。这与Store.TurnChanges返回冻结克隆的实现完全一致——历史读取与当前工作区状态解耦因此若 checkpoint 详情已被清理摘要仍保留并提示详情不可用旧会话缺少结果元数据时显示改动统计不可用检查信息不完整不会显示成零改动或检查通过。换句话说UI 对没有数据与数据为零做了严格区分——前者如实告知缺失后者才表示确认没有变化。从normalizeTurnChanges的防御性归一化非法数字一律归零、非法 coverage 一律归unknown见 desktop/frontend/src/lib/turnResult.ts可以看出这种未知就是未知的语义在前端渲染管线里同样被强制执行。实现与兼容性在既有协议上做加法turn_done.receipt 的可选扩展宿主在既有的turn_done.receipt中增加可选的diff与检查来源字段使用既有的检查分类和执行策略模型提示词、工具 schema 和执行权限均保持不变。回执的协议结构见 internal/eventwire/receipt.go为type CompletionReceipt struct { Diff *checkpoint.TurnChanges json:diff,omitempty Interrupted bool json:interrupted,omitempty Verdict string json:verdict Changes []ReceiptChange json:changes,omitempty Verifications []ReceiptVerification json:verifications,omitempty Gaps []ReceiptGap json:gaps,omitempty Risks []string json:risks,omitempty }差异摘要包含轮次turn、不可变结果 IDid格式为{turn}:{timeUnixNano}见 internal/checkpoint/turn_changes.go、覆盖范围coverage、文件列表files以及增删行数added/removed。一个重要的传输约束事件和历史摘要不携带补丁正文patch。TurnChanges.Summary()会显式清空所有文件的Patch字段见 internal/checkpoint/turn_changes.go补丁只在需要时按需从存储中读取。这既控制了事件流的体积也避免补丁内容在历史重放中被反复复制。Checkpoint 冻结非阻塞写屏障 指纹校验Checkpoint 在本轮结束、下一轮尚不能开始的窗口内保存结果复用原有非阻塞写入屏障TryEnterExclusive并校验写入后的指纹若屏障未被占有!owned或仍有活跃写入者len(s.activeWriters) 0记录active_writer缺口不强行生成统计对每个文件先校验后镜像指纹CompareIdentity确认没有外部修改external_change再生成差异持久化失败会追加result_not_saved缺口见 internal/checkpoint/turn_changes.go。2 MiB 预算与磁盘预算每轮参与处理的内容与保留补丁共限 2 MiBTurnChangesBudget超出时文件以size_limit缺口标记补丁以(diff omitted: ...前缀省略并设置Uncounted/Unavailable见 internal/checkpoint/turn_changes.go差异算法的近似计数不作为精确统计展示结果沿用 checkpoint 的清理策略补丁元数据纳入磁盘预算——因此历史详情可能被清理但摘要保留。前端复用与隔离桌面端复用已有显示记录与持久事件重放不另起一套渲染体系结果卡通过共同的轮次投影放在回答之后并保留稳定组件 ID便于重放与更新定位会话、标签页和结果标识隔离延迟返回的差异与日志——切换会话后上一会话的迟到响应不会串入当前标签页这也是回归测试清单中切换会话后的迟到响应一项要验证的行为。验证方法从单元测试到可视化夹具回归测试覆盖清单回归测试覆盖以下场景可在 internal/checkpoint/turn_changes_test.go、internal/control/turn_result_test.go、internal/eventwire/turn_result_test.go 与 desktop/workspace_turn_changes_test.go 中继续深入多次修改的净变化、无变化、原有脏文件用户基线、删除、二进制、权限变化并发与外部写入、大小限制重新打开旧轮次、旧版本读取legacy 格式兼容中断和失败轮次、检查退出码、日志稳定标识历史显示重放、重复事件、并行检查切换会话后的迟到响应。可视化夹具/bench/turn-result.html在desktop/frontend运行pnpm dev然后按 Vite 输出的网址打开/bench/turn-result.html入口见 desktop/frontend/bench/turn-result.html。该页面使用真实的 Transcript、状态归约器reducer、结果面板和差异组件执行数据为模拟数据host stub见 desktop/frontend/bench/turn-result.tsx可切换场景成功、失败、未检查、过期stale、中断、执行中、部分统计、旧格式legacy、历史history并验证主题深浅色、窄面板280px/410px 宽度切换和数据清理模拟数据已清理按钮添加?transcriptRenderModewindowed可验证同一结果在窗口化列表中的显示。此页面截图用于证明界面与交互真实存储、指纹校验和控制层结束流程由独立后端测试证明——这是验证策略上的明确分工前端夹具证明长什么样、怎么交互后端测试证明数据从哪来、是否可信。小结本轮结果是 DeepSeek-Reasonix 桌面端把智能体的自我声明转化为宿主可验证事实的关键一环净变化语义基线、去重、回改归零、用户脏文件豁免保证了统计的归属性coverage 三态与缺口原因列表保证了统计的诚实性冻结快照 指纹校验 稳定消息 ID保证了历史数据的不可变性与隔离性而turn_done.receipt 的可选扩展与前端复用则保证了向后兼容——旧会话、旧格式在缺少元数据时如实降级提示而不会被误显示为零改动或检查通过。对使用者而言这套设计意味着看到已确认的净变化 N −M时可以确信它是本轮造成、经宿主校验的真实结果看到检查通过时可以确信它对应的是实际执行过的命令日志而任何无法确认的部分界面会明确地告诉你不知道而不是假装成没有。【免费下载链接】DeepSeek-ReasonixDeepSeek-native AI coding agent for your terminal. Engineered around prefix-cache stability — leave it running.项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-Reasonix创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/13 6:28:08

PICO XR渲染报错renderPassIndex越界解决方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/13 6:27:24

工地太忙根本没时间复习考试?泗水电工证考试报名良心建议来了

工地太忙根本没时间复习考试?泗水电工证考试报名良心建议来了 工地太忙根本没时间复习考试,这是很多一线电工的真实写照。泗水电工证考试报名流程复杂,考试内容又偏理论,很多人在忙完一天的活儿后,连翻书的时间都没有。但你可能不知道,…

2026/11/13 6:27:24

双鸭山电工证真证怎么报名 避坑指南来了

双鸭山电工证真证怎么报名 避坑指南来了 证书过期了不知道怎么复审延期,其实很多人都遇到过这个问题。特别是从事电力相关工作的朋友,电工证不仅关系到你的职业发展,还直接关系到你能不能合法上岗作业。很多人因为忽视复审时间,导致证书失效,一旦被查到…

2026/11/13 6:27:24

临沂应急管理局电工证怎么选?上岗必备这些避坑干货你必须知道

临沂应急管理局电工证怎么选?上岗必备这些避坑干货你必须知道 你是不是也遇到过这样的情况,想考个电工证上岗,结果一打听,报名机构五花八门,价格参差不齐,担心被中介坑?临沂应急管理局电工证虽然是上岗必备的资质,但很多人在报名时却不知从何下手。本…

2026/11/13 6:27:24

电工证现在不发卡吗官方回应来了,应届生别慌

电工证现在不发卡吗官方回应来了,应届生别慌 你是不是正盯着手机屏幕,满脑子想着“电工证现在不发卡吗”?手上拿着电工证报名表,却听说现在不发卡了,心里慌得不行?别急,官方回应来了,今天咱们就来唠一唠这个事儿,让你心里有数,顺利拿到证上岗。…

2026/11/12 20:35:13

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/13 0:01:06

办上海高压电工证良心建议:别被中介坑了,自己看这篇就够了

办上海高压电工证良心建议:别被中介坑了,自己看这篇就够了 你是不是也像我一样,第一次听说“高压电工证”这个名词,就感觉一头雾水?其实很多人都跟我一样,不知道去哪报名、怕被中介坑,结果花了冤枉钱还考不上。今天我就从一个在商丘培训过的学员角度,…

2026/11/13 0:01:06

黎里考电工证在哪里值不值得考

黎里考电工证在哪里值不值得考 之前考的证在外省能不能转过来?这是很多在外地工作、准备回老家发展的朋友最关心的问题。特别是在黎里地区,很多从事电力相关工作的朋友,都面临这样一个难题: 外省的电工证能否在本地使用?值不值得考?…

2026/11/13 0:01:06

毕节哪里考电工证 怎么报名学历不高也能上手

毕节哪里考电工证 怎么报名学历不高也能上手 你是不是也和我一样,学历不高,想着考个电工证,但又担心自己条件不够,怕报不上名?其实不然,只要符合条件,学历不高也能考电工证。今天就来聊聊【毕节哪里考电工证】这个问题,还有怎么报名,让你一步到位不…

2026/11/12 22:10:13

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/12 9:51:42

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑