DeepSeek Harness 會話惰性查看器

前言

DeepSeek Harness(DSH)運行後會在 ~/.dsh/sessions 下寫入會話文件,通常是 session.v3.jsonl.zstd 或 session.v4.jsonl.zstd 等多幀 zstd 壓縮文件。查看最近發生的事件時,傳統方式往往需要解壓整個文件,對大文件既慢又費內存。

本插件是 DSH web 插件:會話惰性查看器(純只讀)。它列出 ~/.dsh/sessions 下全部會話(只做 stat 不解壓),並可只解壓任意會話文件的最後 1–2 個 zstd 幀,快速查看最近發生的事件,不觸碰整份文件。

安裝與啓用

使用 DSH 官方插件命令安裝:

dsh plugin --profile web add @240xu/dsh-session-lazy-view

安裝完成後重啓 DSH web 實例,直接訪問 http://<dsh-web-地址>/lazyview 即可打開獨立面板頁。

核心功能

會話列表與預覽

  • 訪問 /lazyview 打開 HTML 面板,按項目分組列出會話。
  • 列表僅做 stat(不讀文件內容),文件大小超過 10MB 的行會標紅。
  • 每行提供「tail」按鈕,點擊展開最近 2 幀,支持「上一頁」翻頁。
  • 列字段包括 sessionId、path、artifact、format、bytes、mtime 等。

幀級惰性讀取

  • 使用 /lazyview/api/tail?path=<相對路徑>&frames=2&skip=0 端點。
  • path 必須是 /api/list 返回的相對路徑,且文件名以 session.v3.jsonl.zstd 或 session.jsonl.zstd 結尾。
  • 服務端從文件尾部讀一個窗口,掃描幀魔數 0x28 B5 2F FD,只解壓候選幀。
  • skip 參數用於翻頁偏移(跳過最新 skip 幀後再取 frames 幀)。
  • 幀內事件已文本化(role + 截斷到 2000 字符的 text / tool-call / tool-result)。
  • 解析失敗(壞幀、舊格式、窗口截斷等)返回 {ok:false, error:{code, message}} 結構化錯誤,不會導致面板 500。

會話搜索

  • 使用 /lazyview/api/search?path=&q=&max=20 進行會話內全文搜索。
  • 流式逐幀解壓做大小寫不敏感子串匹配,命中返回 {frameIndex, seq, type, role, snippet}(命中點前後各 60 字符窗口)。
  • 達到 max 截斷,默認最多掃 500 幀,未掃完返回 partial:true。
  • 每幀之間調用 setImmediate 讓出事件循環,客戶端斷開(AbortSignal)即中止掃描。

會話統計

  • 使用 /lazyview/api/stats?path=[&fast=1] 獲取會話統計信息。
  • 不帶 fast=1 時:幀數、總事件數、按 type 分組計數、首/末事件時間、文件字節數、session header。
  • 帶 fast=1 時:僅流式掃描幀魔數(不解壓),給出幀數與字節數,內存有界。

導出 Markdown

  • 使用 /lazyview/api/export?path=&frames=N 將最近 N 幀(≤20)導出爲 Markdown 文本下載。
  • 文本在內存中生成直接響應,不寫入任何文件。

Timeline 視圖

  • 在會話打開視圖中切換「時間線」視圖,按 turn 分組展示正序事件時間線(vscode Timeline 式閱讀投影)。
  • 分組規則:有 turn/start 事件時開啓新組;歷史格式以 user/message 爲組邊界。
  • 組默認摺疊一行摘要,展開顯示全部事件;摺疊狀態保存在內存中。
  • 支持深鏈:/lazyview?session=<id>&seq=<n> 自動打開會話、進入時間線、展開目標組並高亮首個 seq≥n 的事件。
  • 事件帶有 surfaceOp(op:”replace”)時,被替換區間內的事件在時間線上渲染爲半透明 +「已遮蔽」徽標(純本地計算)。

已知限制

  • 舊格式 session.jsonl.zstd 爲單幀,tail 讀取沒有惰性收益。
  • 尾部窗口默認 1MB,最多增長到 64MB;極端情況下單幀超過 64MB 時返回 truncatedScan: true 且可能少幀。
  • 幀魔數理論上可能出現在壓縮數據內部造成假候選;假候選解壓失敗後以 per-frame error 呈現。
  • 事件文本化只覆蓋已驗證的形狀(user/assistant/system message、tool call/result),其餘事件類型輸出緊湊 JSON 摘要。
  • 未做緩存,每次 tail 請求都重新讀窗口,對調試場景足夠。

適用場景與注意

  • 適合需要快速查看最近事件、對大會話文件做惰性讀取的 DSH 用戶。
  • 插件以當前 dsh 進程權限運行,讀取 ~/.dsh/sessions,請確保安裝前檢查源碼與許可證。
  • 面板是 /lazyview 獨立頁,DSH 宿主側邊欄沒有入口是有意設計(純只讀工具),若安裝了 dsh-devkit 可在 Ctrl+K 命令面板中打開。

總結

本插件通過掃描幀魔數、只解壓候選幀的方式,在保持純只讀的前提下,提供會話列表、幀級 tail、全文搜索、統計與 Markdown 導出能力,並支持 Timeline 視圖與深鏈跳轉,是查看 DSH 會話的高效工具。

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

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

小夜