前言¶
在 DeepSeek Harness(DSH)里做智能体开发,终端命令、测试、提交推送会反复出现。不少「宠物 / 成就」类扩展靠插件内部计数器升级:开面板、点一下、过一天,数字就会涨,和当天实际写了什么代码、跑了什么命令对不上,也没法事后核对。
dsh-pet-ledger(维护者 dingchenhui0618-arch)把成就来源限定在 DSH 真实事件总线 上:只认工具调用结果、Agent 运行时长、会话结束原因等宿主发出的事件。客户端只渲染 host 折叠出来的快照,不计算、不授予、不递增任何成就。演示卡片带「演示」水印,不会混入真实账本。项目在 SkillHub 社区目录的分类为「趣味换装」,当前 GitHub 星标为 0;许可证 MIT,版本 0.1.0。
下面介绍它解决什么问题、四类成就如何判定、怎么安装与配置,以及使用时需要注意的边界。
这是什么¶
一句话:dsh-pet-ledger 是一只「只认真实会话事件」的宠物账本——连续失败、长任务完成、测试由红转绿、提交并推送成功,每条成就都能展开查看当时的会话 id、工作目录与工具调用证据;演示样张仅内存存在且带水印。
插件是 host + client 双半结构,零运行时依赖。灵感方向来自社区项目 dsh-whale-musume,但 README 明确说明未克隆或复制其代码,按 DSH 事件契约独立实现。
与普通成就插件的差异¶
| 维度 | 常见内部计数器式插件 | dsh-pet-ledger |
|---|---|---|
| 成就来源 | 签到、打开面板、运行天数等 | 仅四类系列、共 12 个等级,全部来自真实事件 |
| 可核对性 | 多为展示数字 | 每条成就可展开会话与工具调用证据链 |
| 演示数据 | 往往与真实数据混在同一计数 | 独立演示数组,橙色虚线边框与「演示」水印,不计数、不落盘 |
| 今日任务 | 固定或预设清单 | 按当天有效使用与实际命令类型生成,生成后冻结 baseline |
没有「登录成就」「打开面板成就」,也没有手动点亮接口。
监听哪些事件¶
成就判定在 host 端完成,订阅的事件包括:
| 事件 | 作用 |
|---|---|
tools/pre-execute |
记录即将发生的工具调用,始终继续 next(),不拦截工作 |
tools/result |
调用结束:成功、失败、非零退出码、耗时、结果摘要 |
agent/status |
Agent 从 running 到 idle,作为长任务时长的起止 |
session/event |
turn/end 与结束原因;长任务成就要求正常完成,而非中断/取消 |
session/created |
会话 cwd,写入证据中的会话位置 |
agent/disposed |
会话回收时清运行时状态,避免旧 streak 串到新会话 |
失败判定不只看 result.isError:非零退出码(exitCode / exit_code / code)或输出中的 [exit code: N] 也算真实失败,避免终端工具把失败静默漏掉。
四类成就¶
只有以下四个系列,不是这四类事件产生的记录不会进入成就墙。
| 系列 | 门槛 | 判定依据 |
|---|---|---|
| 工具连续失败 | 3 / 6 / 10 次 | 同一会话内连续 tools/result 失败;成功一次清零 |
| 长任务完成 | 1 / 3 / 10 次 | agent/status 从 running 到 idle 时长 ≥ 阈值(默认 90 秒),且 turn/end 为正常完成 |
| 测试由红转绿 | 1 / 3 / 8 次 | 同一会话内先失败再成功的测试命令;跨会话不算 |
| 提交并推送成功 | 1 / 5 / 15 次 | 同一会话内 git commit 成功后 git push 成功;commit 失败清标记,push 失败保留 commit 以便重试 |
点开成就卡可展开:会话 id、cwd、每次工具调用的时间、工具名、命令行或路径、结果摘要、耗时、成败;长任务还会显示持续时长与结束原因。证据在 host 端生成并持久化,前端只负责展开/收起。每条证据最多保留 8 行(MAX_EVIDENCE),超出保留最近关键行。
今日任务与演示样张¶
当天第一次满足「至少 60 秒有效使用或 3 次工具调用」时生成一次任务并冻结进度:
- 专注任务:目标由当日有效使用推算,相邻事件间隔超过 5 分钟按离开处理,挂机不计入。
- 命令任务:从当天真实跑过的命令类型里取前两种(测试、提交、推送、构建等),目标为
clamp(ceil(实际次数 / 2), 1, 5)。 - 生成时记录
baseline;之后进度相对 baseline 计算,目标不会随当天使用量漂移。 - 活动不足时显示 pending 原因,不凭空给任务。
命令分类在 src/commands.js 中启发式完成,例如 pytest 算测试、gh repo create ... --push 算推送。
面板底部「演示样张」可生成 4 张演示卡,带「演示」水印,只存在 host 内存,不写入 pet-ledger.json;DSH 或插件重启后消失。点「清除演示」立即移除。
安装与启用¶
要求 DSH 版本 >=0.2.1-rc.2 <0.3.0。从 GitHub 安装时使用 README 中的命令(将 <你的 profile> 换成实际 profile 名):
dsh plugin --profile <你的 profile> add github:dingchenhui0618-arch/dsh-pet-ledger
本机源码开发可改用 file: 路径指向仓库目录。装好后重启 DSH,在对话视图 Tab 栏会出现「宠物账本」。桌面端也可在插件市场/插件页安装,profile 由应用管理。
配置¶
在 profile 的 cordis.patch.yml 里为 dsh-pet-ledger 增加 config,例如:
- id: dsh-pet-ledger
name: dsh-pet-ledger
config:
longTaskMs: 90000 # 长任务阈值,默认 90 秒
idleGapMs: 300000 # 超过 5 分钟算离开,不计有效使用
timeZone: Asia/Shanghai
minActiveMs: 60000 # 生成今日任务所需的最少有效使用
minToolCalls: 3 # 或至少这么多次工具调用
dataPath: D:\somewhere\pet-ledger.json # 默认 $DSH_HOME/pet-ledger.json
enabled: true
enabled: false 时仍加载插件,但不记录、不落盘;面板可显示已有账本,但不会继续增长。
HTTP 接口与数据¶
路由前缀为 /dsh-pet-ledger:
GET /dsh-pet-ledger/state:当前快照(成就、证据、今日统计、任务、演示、数据文件路径)。POST /dsh-pet-ledger/demo:生成演示卡(仅内存)。POST /dsh-pet-ledger/demo-clear:清除演示卡。
请求体上限 64 KiB;无鉴权,与 DSH Web 面板同源;只读写本机账本,不发外网请求。
账本默认写到 $DSH_HOME/pet-ledger.json,仅本机;无遥测、无上传。不读取会话正文,只取 session.header.cwd 与会话 id;证据里的命令来自工具参数与结果摘要。保存采用临时文件 + rename;损坏的 JSON 会回退为空账本并记录 unreadable ledger。
面板数字来自 host 快照,轮询间隔约 1.5 秒,不是 WebSocket 实时推送。
适用场景与注意¶
适合希望在 DSH 日常开发里保留「可核对」趣味反馈、又不想让成就与真实工作脱节的开发者。若宿主未发出 agent/status 的 running/idle,则不会有长任务成就;自定义测试命令若不在 commands.js 的测试正则里,可能无法识别「红转绿」。连续失败 streak 按会话隔离。
DSH 社区目录(SkillHub)是独立站点,与 DeepSeek / 幻方无官方从属关系。插件以当前 DSH 进程权限运行,安装前建议阅读仓库源码、SECURITY.md 与 MIT 许可证。
结尾¶
dsh-pet-ledger 用事件总线把成就钉在真实工具调用与会话生命周期上,并用证据链与演示水印区分「真账本」和「预览样式」。更多信息见社区目录页与 GitHub 仓库:
- 目录页:https://www.skillhub.cn/plugins/dingchenhui0618-arch/dsh-pet-ledger
- GitHub:https://github.com/dingchenhui0618-arch/dsh-pet-ledger