dsh-session-grep:在 DSH 多幀 zstd 會話裏按 seq 查原話

前言

DeepSeek Harness(DSH)把每次對話落成會話文件,格式是多幀 zstd:每次追加會再壓一幀。Node 裏常用的 zlib.zstdDecompressSync 只解出第一幀,磁盤上的 grep、Select-String 對着壓縮體同樣打不中正文。結果是:記錄明明在目錄裏,工具卻顯示零命中,復盤某輪「到底怎麼說的」只能靠猜。下面介紹社區插件 dsh-session-grep(維護者 abwp2,分類:記憶),它按幀解壓、按 seq 索引消息,提供 list、title、find、dump、around 等只讀查詢。

這是什麼

dsh-session-grep 是一個讀 DSH 會話轉錄的工具:拆多幀 zstd、順序解壓、解析 JSONL,讓你用命令行列出會話、按標題找會話、正則全庫搜、按序號導出或看上下文。當前 npm 包版本爲 0.1.0,許可證 MIT,要求 Node ≥ 22.15(依賴內置 zlib.zstdDecompressSync)。不寫入、不修改、不刪除會話文件,不聯網,不需要 API key。

爲什麼普通 grep 不夠

DSH 會話根目錄默認在 $DSH_HOME/sessions(可用環境變量 DSH_SESSION_ROOT 覆蓋)。內容以壓縮幀存放,系統自帶搜索只能掃到二進制或殘缺文本,例如:

grep -r "那句話" ~/.dsh/sessions     # 零命中(內容是壓縮的)

同一關鍵詞交給本工具的全庫檢索可以命中,並帶上時間、seq 和說話人角色信息。

核心功能

命令 作用
dsh-session list 列出全部會話:id 前綴、時間、消息條數、工作區、標題
dsh-session title <關鍵詞> 按標題找會話(標題由 DSH 根據首條消息自動生成)
dsh-session find <正則> [上下文寬] 全庫正則檢索,默認 40 條封頂,每條帶 seq / 說話人 / 時間
dsh-session dump <id片段> [lo] [hi] 按 seq 區間打印消息
dsh-session around <id片段> <seq> [前後] 以某條爲中心,前後各 N 條

消息處理規則(與 README 一致):

  • 每條消息拆成 role + text;只索引 text,跳過 reasoning 和 tool-call,避免把內部推理混進「說出口的話」。
  • 時間統一按北京時間輸出,格式 YYYY-MM-DD HH:MM:SS。

安裝與啓用

CLI(推薦穩定路徑)

不安裝,直接用 npx:

npx dsh-session-grep list

或全局安裝後使用 dsh-session 命令:

npm i -g dsh-session-grep
dsh-session list

作爲 DSH bundle 插件

倉庫帶有 cordis.patch.yml,可掛進 profile 並註冊 dsh_session 工具。官方 README 給出的命令爲:

dsh plugin --profile web add github:abwp2/dsh-session-grep

說明:工具註冊入口在不同 DSH 版本上可能不一致(如 ctx.tools / ctx.get('tools'));註冊失敗時通常只打一條 warning,不影響宿主啓動。若 bundle 註冊不穩定,仍以 CLI 與倉庫內 skill/SKILL.md 爲準。

安裝前建議自行查看倉庫源碼與 MIT 許可;插件以當前 dsh 進程權限運行,能讀本機會話目錄中的聊天內容。

典型用法

先按標題定位會話,再 around 看上下文,或全庫正則搜:

dsh-session title 部署                          # 先按標題找會話
dsh-session around session-a1b2c3d4 120 3      # 再看那條前後說了什麼
dsh-session find "那條命令|部署方式"             # 或者全庫正則搜

英文 README 中的等價示例:

dsh-session list                               # sessions: id, time, count, workspace, title
dsh-session title deploy                       # find a session by its generated title
dsh-session find "pattern|alternative" 3       # regex search, with context
dsh-session around session-a1b2c3d4 120 3      # N messages before and after a seq

按 seq 區間導出:

dsh-session dump <id片段> [lo] [hi]

適用場景與注意

適合誰

  • 在 DSH 下做智能體開發、需要按會話 id 或標題回溯某輪原話的人。
  • 需要在本機會話庫裏做正則檢索、導出片段、覈對 agent 是否「說過某句」的人。

隱私與輸出

  • 只讀本機會話文件;不埋點、不需要 key。
  • 命令輸出會包含你自己的聊天正文,貼 issue 或日誌前請先脫敏。

生態說明

DSH 社區插件目錄由獨立站點維護(SkillHub 等),與 DeepSeek / 幻方無官方從屬關係;本文所述安裝與用法以 GitHub README 與 package.json 爲準。

結尾

dsh-session-grep 解決的是 DSH 多幀 zstd 會話無法被普通解壓與 grep 檢索的問題,用只讀 CLI(及可選 bundle 工具)把「查原話」落到可復現命令上。進一步瞭解可看社區目錄頁與倉庫:

  • 目錄頁:https://www.skillhub.cn/plugins/abwp2/dsh-session-grep
  • GitHub:https://github.com/abwp2/dsh-session-grep
羽毛球分组比赛记分
小程序二维码

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

小夜