首页/新闻资讯/正文详情

DeepSeek Harness 文件系统缺失观测:将“文件不存在“纳入事件门控的观察状态机,杜绝被外部删除后的死循环恢复

发布时间:2026/9/20 22:25:48 来源:云帆数科 栏目:资讯中心
DeepSeek Harness 文件系统缺失观测:将“文件不存在“纳入事件门控的观察状态机,杜绝被外部删除后的死循环恢复
DeepSeek Harness 文件系统缺失观测将文件不存在纳入事件门控的观察状态机杜绝被外部删除后的死循环恢复【免费下载链接】deepseek-harnessDeepSeek Harness: Everything is a Plugin.项目地址: https://gitcode.com/gh_mirrors/de/deepseek-harness导读在 DeepSeek Harness 中模型对文件的读写被一套基于事件门控event-gate的观测策略约束必须先读后改、必须基于所读版本进行受保护的写入与编辑。但当会话读到过某个文件、随后该文件被外部命令删除时旧的正向版本会永久滞留导致重新读取后重试这一恢复指令陷入不可恢复的循环。本篇文章以仓库内已实现的设计笔记 filesystem-absence-observation 为核心深入讲解dsh-fs-observation-policy如何把文件不存在提升为与文件存在并列的一等观察状态、fs/observed事件如何携带 present/absent 判别联合discriminated union以及本地与 E2B 两种 Provider 如何在发布点而非初始探测点强制createIfAbsent做到受保护的创建绝不覆盖在发布前出现的并发目标。读完你将掌握该机制的完整状态机、错误码语义、发布原子性策略及其源码实现位置。背景事件门控下的观测策略与版本守卫要理解本次缺陷修复需要先还原它所处的架构。在 file-context-as-event-gate 决策中DeepSeek Harness 将文件系统能力拆成了四层dsh-tool-fs执行器直接调用ctx.fs、dsh-fs-observation-policy事件门控插件、dsh-fsProvider 契约拥有事件词汇表以及具体的 Providerdsh-fs-local、dsh-fs-e2b。其中关键设计是dsh-fs-observation-policy自身不做任何文件 I/O它只通过三个事件参与决策fs/write-intent单槽瀑布产出写意图、fs/edit-intent单槽瀑布产出编辑版本守卫、fs/observedfire-and-forget 记录事件。策略层的核心数据结构是一个WeakMapowner, MaptargetKey, FsObservationowner 由事件携带的不透明objectactor 结构推导{ agent?: { session? } }见 policy/types.ts。版本是否仍然新鲜这一判断必须发生在 Provider 的原子变更临界区内由 Provider 通过 CAS 完成而不是策略层先stat再比较——后者会留下 TOCTOU 间隙。正是在这套只记录成功读与成功变更的目标版本的旧实现上出现了本笔记要修复的缺陷。Problem被外部删除后正向版本永久滞留形成死循环原事件门控策略只记录成功的读取与变更所产生的一个目标版本。缺陷链条如下会话读取了文件foo.ts策略记录了present(version)外部命令如用户手动删除、其他进程清理删除了该文件会话第一次受保护的变更按replaceIfVersion提交Provider 正确判定版本过期返回FS_STALE_VERSION按 guarded-mutation remedy 的约定模型看到re-read the file, then retry的恢复指令于是重新读取问题出现了重读时目标已缺失read返回FS_NOT_FOUND但旧实现不会在元数据缺失时发出fs/observed事件旧的present(version)记录永远保留于是后续写入继续选择replaceIfVersionProvider 继续拒绝已不存在的目标模型被要求重新读取然后重试却永远无法恢复——不可恢复的循环。笔记明确指出若把读取失败当作允许创建还会暴露第二条边界本地与 E2B Provider 在暂存前先探测目标然后历史上以 rename 发布在这两步之间另一个进程可能创建了目标并被覆盖——即便调用方提供的是createIfAbsent。进程内的目标锁无法保护这种跨进程的发布竞态。Decision缺失也是一等观察——present/absent 判别联合核心决策是文件不存在是一种观察结果absence is an observation受保护的创建在发布点绝不覆盖并发目标。它落成两个互相配合的改动。dsh-fs 拥有显式观察联合dsh-fs包Provider 契约事件词汇表所有者定义了观察载荷// 来源packages/fs/fs/src/types.ts export type FsObservation | { readonly kind: present; readonly version: FsVersion } | { readonly kind: absent }fs/observed事件携带该联合成功的读取与变更发出presentread的元数据缺失、或str_replace_editor的view/str_replace/insert命令的元数据缺失会在返回FS_NOT_FOUND之前同步发出absent其他读取失败不制造缺失观察例如权限错误、I/O 错误不会把状态改写为 absent。策略层三状态机unseen / absent / presentdsh-fs-observation-policy每个 owner target 存储三种逻辑状态且不注入也不调用ctx.fs见 policy/index.ts 的ObservedStateGate其注释明确 no inject —— this plugin reads no services; it operates only on its own WeakMap状态判定方式写意图write编辑守卫editunseen未观察map 中无条目createIfAbsentFS_NOT_OBSERVED必须先读absent确认缺失条目判别为absentcreateIfAbsentFS_NOT_FOUND无法编辑不存在的文件present(version)确认存在条目判别为presentreplaceIfVersion{ version: observedVersion }一次成功的创建或变更会把absent替换为其产生的present(version)从而允许后续 edit-then-edit / create-then-edit 而不必再次读取。对应源码中正是三个决策方法的实现packages/fs/fs-observation-policy/src/index.tswriteIntent(target, actor): FsWriteIntent { const owner this.owner(actor) const prior owner ? this.get(owner, target.targetKey) : undefined return prior?.kind present ? { kind: replaceIfVersion, version: prior.version } : { kind: createIfAbsent } } editIntent(target, actor): { version: FsVersion } { const owner this.owner(actor) const prior owner ? this.get(owner, target.targetKey) : undefined if (!owner || prior undefined) { throw new FsError(edit requires reading ${target.displayPath} first, FS_NOT_OBSERVED) } if (prior.kind absent) { throw new FsError(cannot edit ${target.displayPath}: not found, FS_NOT_FOUND) } return { version: prior.version } }注意writeIntent把 unseen 与 absent 统一映射到createIfAbsent而editIntent把二者区分成两个错误码——这正是删除缓存版本方案被否掉的原因之一unseen 与 confirmed absence 语义不同编辑必须能给出正确的FS_NOT_FOUND。发布点强制 createIfAbsent本地与 E2B 的无覆盖发布每个 Provider 都必须在发布点publication point而非仅初始探测点强制执行createIfAbsent。这是对 TOCTOU 的最终防线dsh-fs-local先在私有兄弟目录中暂存并fsync文件然后用硬链接hard link将暂存文件发布到目标位置链接失败后检查目标条目常规文件冲突 →FS_NOT_OBSERVED并保留对方内容不覆盖非常规条目目录/特殊文件/悬空符号链接→FS_NOT_REGULAR_FILE目标仍缺失时的失败 →FS_IO_ERROR。dsh-fs-e2b使用远程ln -T带显式的 created/existing 结果并在不可取消的提交之前通过元数据推导已提交的目标版本。替换replace和裸的无条件写入保留原有发布路径本决策不声称replaceIfVersion具备跨进程线性一致性——其版本检查与替换只受 Provider 自身锁和可检测元数据保护。这一较窄的保证对缺失恢复而言足够精确受保护的创建绝不会覆盖在发布前出现的目标。本地受保护创建依赖硬链接支持一旦某次本地发布成功暂存清理是尽力而为的因为私有残留不可能让已提交的写入变假。被否决的方案为什么不能读到不存在就删缓存设计笔记记录了四条被否决的替代方案理解它们有助于把握边界读到 not-found 就删除缓存的版本——否决。它把 unseen 与 confirmed absence 混为一谈无法让 edit 返回正确的FS_NOT_FOUND并且抹掉了fs/observed事件本应传达的状态迁移。让策略层在选择意图前自己stat——否决。这使纯事件策略依赖 Provider给每次决策增加 I/O而且在发布前仍留有 TOCTOU 间隙这正是 event-gate 架构 反复强调策略层零 stat的原因。让replaceIfVersion在目标消失时改为创建——否决。正向观察是替换的证据而非创建的证据静默改变 Provider 意图会绕过必需的缺失重读削弱陈旧保护。让删除目标死锁失败关闭fail-closed——否决。模型可见的恢复指令会因此失效会话内无法从一次正常的外部清理中恢复。恢复链与错误码语义修复后的端到端行为结合 guarded-mutation remedy修复后一次外部删除事故的完整恢复链为外部删除发生后第一次受保护变更仍失败返回FS_STALE_VERSION模型收到追加了 — re-read the file, then retry 的提示由dsh-tool-fs的remediateFsError在模型边界追加见 tool-fs/src/error.tsProvider 消息保持机器导向不变模型执行缺失重读返回FS_NOT_FOUND同时策略状态从present迁移为absent之后edit 依旧被禁止FS_NOT_FOUND不再叠加陈旧提示而write 可以重建路径按createIfAbsent原子创建若创建竞态输给了其他写者重试返回FS_NOT_OBSERVED保留胜者内容不被覆盖若遇到竞态的目录、特殊条目或悬空符号链接则返回FS_NOT_REGULAR_FILE不要求再读一次。观察载荷是包拥有的事件契约变更因此生产者、监听者、不变量、生成的 Cordis 目录、子系统文档、以及两族文件系统工具dsh-tool-fs与str_replace_editor必须一起迁移策略仍保持读一次 stat、写/编辑零 stat的预算、owner 隔离、销毁行为与可选的部署边界。验证测试如何钉死无覆盖发布笔记的验证路径有两条组装的文件系统快照钉死了模型可见的恢复链stale mutation → missing reread → guarded recreationProvider 测试在暂存之后注入一个创建者以证明无覆盖发布no-clobber publication即使目标在暂存与发布之间被并发创建受保护的创建也绝不覆盖它。这与 event-gate 的验证互为补充事件门控测试钉住了策略层不做 stat、由 Provider CAS 判定陈旧而本次测试钉住发布点原子性。小结dsh-fs-observation-policy的核心不变量可以浓缩为一句话写入/编辑的意图createIfAbsent 或 replaceIfVersion由观察状态决定而观察状态由权威的 present/absent 事件驱动版本是否新鲜、目标是否仍缺失则由 Provider 原子变更临界区内的 CAS 判定。本次修复补上了状态机缺失的一环——把文件不存在变成与文件存在等价的观察并把createIfAbsent的强制执行点从探测推进到发布点。自此外部删除不再是模型不可恢复的死胡同而是一次有明确状态迁移、有清晰错误码、有原子保护的常规恢复路径。延伸阅读文件系统缺失观察设计笔记本文主题事件门控架构决策被本次修复精化的上游设计受保护变更的模型边界恢复措辞决策策略插件实现ObservedStateGate 与三个 fs/* 监听器策略观察者类型owner 结构推导Provider 契约词汇FsObservation / FsWriteIntent / FsErrorCode模型边界恢复措辞remediateFsError【免费下载链接】deepseek-harnessDeepSeek Harness: Everything is a Plugin.项目地址: https://gitcode.com/gh_mirrors/de/deepseek-harness创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

PETS5口语备考全攻略:历年真题高效使用与评分规则详解
PETS5口语备考全攻略:历年真题高效使用与评分规则详解

简介:这是一份面向PETS5(全国外语水平考试英语五级)考生的口语历年真题PDF,覆盖自我介绍、家庭背景、工作与学习经历、兴趣爱好、合作讨论等核心环节,并附有考官引导语与话题卡示例,可用于熟悉真实考场流程… · 2026/9/20 22:25:48

不调陀螺仪,用OpenCV实现纯视觉EIS视频防抖
不调陀螺仪,用OpenCV实现纯视觉EIS视频防抖

最近整理一段运动相机拍的骑行素材,第一反应还是打开手机看陀螺仪数据、找IMU参数。但手里这份视频只有裸画面,没有传感器日志,我干脆用OpenCV做了一套纯视觉的EIS防抖:不做机械云台、不调陀螺仪,只用特征点追踪和透视… · 2026/9/20 22:25:48

短剧出海本地化实测:AI配音翻译工具怎么选才不踩坑
短剧出海本地化实测:AI配音翻译工具怎么选才不踩坑

短剧出海这个赛道最近有多火,不用我多说了吧。国内付费短剧、小程序短剧卷成一团,越来越多的团队把目光投向海外,北美和东南亚的盘子一天比一天大。但真正落地的时候,第一个卡住所有人的环节就是本地化——从中文原片变成英语、西… · 2026/9/20 22:24:48

Unidbg逆向小红书so层CRC32校验实战指南
Unidbg逆向小红书so层CRC32校验实战指南

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

public-apis实战指南:从API选型到生产级治理
public-apis实战指南:从API选型到生产级治理

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

双模音频解码器DIY:从USB到蓝牙LDAC的I2S统一架构与平衡输出实践
双模音频解码器DIY:从USB到蓝牙LDAC的I2S统一架构与平衡输出实践

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

Ubuntu启动分区丢失修复指南:Boot-Repair与GRUB重建实战
Ubuntu启动分区丢失修复指南:Boot-Repair与GRUB重建实战

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

RK3566适配YT8512C百兆以太网:RMII时钟方向与DTS配置实战排查
RK3566适配YT8512C百兆以太网:RMII时钟方向与DTS配置实战排查

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

STM32电子秤实战:HX711信号调理与Flash存储设计
STM32电子秤实战:HX711信号调理与Flash存储设计

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

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化
Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡… · 2026/9/21 0:02:39

Word表格编号全攻略:从列表编号到题注交叉引用
Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技… · 2026/9/21 0:02:39

从第一个站到第二个站:独立开发者的静态网站选型与落地实践
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&… · 2026/9/20 0:00:41

Claude Code 按智谱AI指南装完,ANTHROPIC_BASE_URL 改走 TaoToken 兼容通道行不行
Claude Code 按智谱AI指南装完,ANTHROPIC_BASE_URL 改走 TaoToken 兼容通道行不行

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

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程
agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and … · 2026/9/21 0:00:18

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,… · 2026/9/21 0:00:18

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码