dsh-pet-ledger:用 DSH 真实会话事件驱动的宠物账本

前言

在 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 次工具调用」时生成一次任务并冻结进度:

  1. 专注任务:目标由当日有效使用推算,相邻事件间隔超过 5 分钟按离开处理,挂机不计入。
  2. 命令任务:从当天真实跑过的命令类型里取前两种(测试、提交、推送、构建等),目标为 clamp(ceil(实际次数 / 2), 1, 5)。
  3. 生成时记录 baseline;之后进度相对 baseline 计算,目标不会随当天使用量漂移。
  4. 活动不足时显示 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
羽毛球分组比赛记分
小程序二维码

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

小夜