READMESource: main@96a1c376
dsh-bite
DeepSeek Harness 插件:咬钩 —— 钉住的内容,压缩也带不走。 上下文压缩(compaction)会把聊过的东西揉成一团摘要,被压掉的原文模型就再也看不见了。 dsh-bite 让你把关键回合"钉住":压缩之后,自动把钉子内容打捞回来、重新塞回模型眼前。 点按钮的时候,一只 Q 版大肥鱼还会从屏幕左边掠过,把钉子一口吃掉。
特点
- 一条钉子按钮:每条助手回复的操作行上一枚小按钮,绿色「钉住」→ 点击 → 变红「已钉」;再点一次直接解钉。
- 肥鱼掠食动画:落钉时鱼从屏幕左侧与按钮同高窜出,嘴越过按钮那一刻按钮才变色 —— 数据先行,动画纯粹是表演。
- 抗压缩找回:插件监听会话里的压缩事件;压缩一旦把钉子的原文冲掉,下一个请求前自动把钉子内容(用户原话 + 当时回复)注入回去,并注明"这是历史背景,不是新指令"。
- 斜杠命令:
/pin钉最近一轮、/pins列出、/unpin [序号]解钉 —— 全流程无 UI 也能用(headless 一致)。 - 全留痕:所有找回注记走
source.kind = 'dsh-bite'的会话事件,日志里可审计、可检索。 - 完整保留:钉子保存完整原文(默认不截断:原问题 + 回复全量入库、全量找回);每会话默认最多 12 条,超出丢最旧并在响应里提示。
安装
GitHub 直装(推荐,国内网络可直连,无需 npm 账号):
dsh plugin --profile web add 'https://codeload.github.com/wobenshiwomu/dsh-bite/tar.gz/v0.1.1'
或在图形界面:侧栏「插件」→ 添加插件 → 填上面这条 URL。装完重启 DSH 生效。
URL 末段的 v0.1.1 是版本标签;升级时换成本仓库的新版本标签重装即可。
无需配置,开箱即用:装好即生效 —— 钉子存储默认在 $DSH_HOME/storages/dsh-bite/,客户端按钮与肥鱼动画随插件自带。
下面的配置全部可选,只想自定义行为时才需要。
本地/开发安装(本机路径):
dsh plugin --profile web add /path/to/dsh-bite
可选配置(profile 用户层 cordis.patch.yml,覆盖构建默认;不配置即用默认值):
# 示例:仅当要改默认值(12 条 / 完整保留)时才需要
- id: dsh-bite
config:
maxPins: 12 # 每会话钉子上限(超出丢最旧)
maxPinChars: 0 # 0=完整保留(默认);设正数则按预算截断(用户 40% / 回复 60%)
# storageDir: '' # 钉子存储目录,默认 $DSH_HOME/storages/dsh-bite
使用
- 按钮:助手回复操作行 → 绿色「钉住」点击落钉(肥鱼出没),红色「已钉」再点解钉。
- 命令:
/pin(钉最近一轮)//pins(列出,带摘要)//unpin(解最新一条)//unpin 2(按序号)。
它怎么工作(机制)
- 落钉:点按钮(或
/pin)→ 宿主按 messageId 在会话日志里精确定位那一轮:向前回溯最近一条真实用户消息 (跳过各种插件注入的注记),把用户原话 + 当时回复打包成一条钉子(按预算截断)。 - 盯压缩:插件监听
session/event,记录每一次compaction/end。 - 找回:在下一个模型请求前的
agent/pre-step里,若同时满足: ① 自上次找回之后发生过新的压缩;② 至少一条钉子的消息已不在当前请求面(被 shadow 掉了) → 把真正丢失的钉子拼成一条注记注入请求,标记source.kind = 'dsh-bite', subtype = 'digest'。 - 兼容任何压缩后端(官方 basic / 第三方压缩引擎都行):它不替换压缩,只在压缩之后把你的钉子捞回来。
配置项(全量 · 全部可选,不配置即取默认)
| 键 | 默认 | 说明 |
|---|---|---|
maxPins |
12 |
每会话钉子上限(超出丢最旧,响应里带提示) |
maxPinChars |
0 |
0=完整保留原文(默认,不截断);>0=按预算截断(用户 40% / 回复 60%) |
storageDir |
$DSH_HOME/storages/dsh-bite |
钉子存储目录 |
客户端动画常量(鱼高 240px、时长 900ms、嘴心比例 0.444 / 0.803)在 src/client/index.jsx 顶部,想微调改那里。
小提醒:
/pin命令名与生态里个别插件(如 dsh-pin-recall)可能相同;同装时有任何一条不生效,以先注册者为准。
测试
npm install # 首次:安装测试所需的宿主依赖
npm test # 仿真测试:44 项断言(提取/存储/上限/压缩侦测/找回/命令/路由)
已知边界
- 找回的时机是"下一次请求前":压缩发生后如果一直没有任何新请求,钉子不会主动注入(它服务于对话,不服务于空闲状态)。
- 压缩摘要本身也可能带上你钉的内容(摘要由模型撰写),无妨 —— 找回注记是保底。
- 子代理会话不参与找回(它们有自己的上下文生命周期)。
- 钉子默认完整保留原文,不截断;钉子越长,压缩后找回时占用的上下文越多(取舍:宁可多带,不带残)。钉子总量很大时,可以配合压缩线一起考虑成本。
License
MIT
No comments yet. Be the first to write one.