前言¶
在 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