dsh-hashline-edit-pro:用内容哈希锚点编辑文件,不依赖行号

前言

在 DSH 里让模型改本地文件,常见做法是按行号或全文字符串匹配定位。文件一旦被外部改动、或模型引用的片段在别处重复出现,就容易改错行,且有时不会在写入前被拦住。dsh-hashline-edit-pro 是 DSH 动态插件,为每行文本分配唯一的 3 字符内容哈希作为「地址」;读取、替换、回滚都围绕哈希锚点操作,锚点过期会在写入前报错并返回当前上下文的新锚点,而不是静默写坏文件。本插件由 sleepinginsummer 维护,移植自 Pi Coding Agent 生态的 pi-hashline-edit-pro,在 SkillHub 插件目录 归类为客户端插件。

这是什么

dsh-hashline-edit-pro(npm 包名同名,当前版本 0.1.0,MIT 许可证)向 DSH 注册三个工具:hashline_read、replace、undo_last_replace。核心思路是:编辑目标永远是哈希,不是行号,也不是裸字符串匹配。

与 Pi 原版的差异是刻意设计的:DSH 侧新增上述三个工具,保留内置 read / edit / write,避免破坏沙箱观察策略;哈希实现改为纯 JS xxh32,状态落在工作区 ~workspace/.dsh-hashline-state.json;图片读取会拒绝并指引使用内置 read_image。

核心功能

hashline_read

以 HASH│content 形式读取文件:每行前缀为 3 字符字母数字哈希,不附带行号。支持 offset / limit 分页;raw: true 时可返回带行号的普通内容。空文件输出单行 HASH│ 作为锚点。图片、二进制、UTF-16 会被拒绝并给出指引。

replace

用 remove_from / remove_to(裸 3 字符哈希)圈定要替换的行范围,replacement_text 写入新内容(传 "" 表示删除该范围)。锚点校验失败会抛出 [E_STALE_ANCHOR]、[E_AMBIGUOUS_ANCHOR]、[E_RANGE_STALE] 等错误,并附带当前文件的新锚点上下文;反向范围会自动纠正。若粘贴内容带 HASH│ 前缀,会自动剥离并警告。返回结果包含带 HASH│ 的 diff(+ 行即新锚点),便于链式连续编辑。

未改动的行会保留原锚点(content-derived base + 位图探测 + 稳定哈希映射),链式编辑通常不必每次重新 hashline_read。另有 served-state 守卫:只能替换模型在读取或 diff 中「见过」的哈希,降低凭空编造锚点的风险。

undo_last_replace

回滚指定文件上最后一次 replace;undo 记录持久化,重启 DSH 后仍可回滚。若 replace 之后文件被外部修改,会拒绝回滚并返回 [E_UNDO_STALE]。

文件与安全边界

保留 BOM、行尾(LF / CRLF / CR);UTF-8 解码异常会警告。单文件上限约 100MB / 238328 行;写入走 DSH fs 服务的原子写入。在 sandbox 受限场景会映射为标准 [sandbox: ...] 标记,并提示用内置 write 升级。若 undo 持久化失败,编辑仍会执行,但附带 [E_UNDO_UNAVAILABLE] 警告。

安装与启用

安装命令以 README 原文为准:

dsh plugin --profile <name> add dsh-hashline-edit-pro

将 <name> 换成你的 DSH profile 名称。安装后重启 DSH,hashline_read、replace、undo_last_replace 会对所有会话生效。

插件以当前 DSH 进程权限运行;安装前建议在 GitHub 仓库 查看源码与 MIT 许可证,确认符合你的环境策略。SkillHub 为社区目录站点,与 DeepSeek / 幻方无官方从属关系。

典型用法(工作流)

下面是一套可复现的心智模型,具体参数以工具 schema 为准。

  1. 先读:对目标路径调用 hashline_read,得到形如 abc│第一行内容 的文本;记下要改范围起止行的 3 字符哈希(例如 remove_from、remove_to)。
  2. 再改:调用 replace,填入哈希范围与 replacement_text;若返回 stale 类错误,根据响应中的新锚点重新圈定范围,不要强行写入。
  3. 链式改:利用返回 diff 里 + 行的新锚点,可连续多次 replace,未触碰的行锚点保持不变。
  4. 悔棋:对同一文件调用 undo_last_replace 撤销最后一次替换(外部未再改文件的前提下)。

需要普通带行号视图时,可在 hashline_read 使用 raw: true;需要看图请用内置 read_image,不要用本插件读图片。

适用场景与注意

适合:希望模型在 DSH 里做精确、可校验的局部文本编辑;多步补丁式修改;需要持久化 undo 的替换操作。

注意:

  • 锚点与 served 状态依赖插件状态文件与工作区路径,路径数量有上限(资料记载 256 路径上限)。
  • 与 Pi 原版相比,DSH 版不覆盖内置 read/edit,日常仍可能混用内置工具;哈希编辑与行号编辑不要混在同一逻辑里假设行号仍有效。
  • 开发侧:npm test 运行 32 个用例(node –test),覆盖 xxh32、锚点唯一性、stale/range 校验、EOL/BOM 等;主逻辑在单文件 src/host.js 的 //PURE-CORE-START..END 纯核心段。

结尾

dsh-hashline-edit-pro 把「按内容哈希定位行、写入前校验锚点、diff 带新锚点、可持久 undo」这一套流程搬进 DSH,并针对沙箱与内置工具共存做了移植取舍。进一步了解可访问 SkillHub 目录页 与 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye