dsh-ctx-log:在上下文壓縮後仍能回溯會話軌跡

前言

DeepSeek Harness(DSH)會在長會話裏自動壓縮上下文。壓縮之後,早期的用戶與助手原文、工具調用的參數和返回會從模型可見窗口裏消失,常見後果包括重複查同一類資料、把過時結論當成當前事實,或在新會話裏不知道上一輪做過什麼。Claude Code、Codex 等環境可以用會話鉤子把原始軌跡寫到磁盤;DSH 沒有內置同類鉤子,但 Host 側的 session/event 足以實現等價能力。下面介紹社區插件 dsh-ctx-log(維護者 Tom-l-j-h,分類:記憶),它把會話事件按日落盤爲 JSONL,並在每輪系統提示裏注入軌跡位置、最近摘要與當前時間,讓細節在壓縮之後仍有機會被模型「撈回來」。

插件定位

dsh-ctx-log 是 DeepSeek Harness 的 Host 插件:訂閱 session/event,將五類事件逐條追加到按日 JSONL;同時通過 systemPrompt 注入軌跡文件路徑、本會話條數、最近 N 條消息摘要以及準確當前時間。依賴僅爲 Node 內置模塊(node:fs / node:path / node:os),無第三方包,也未聲明 @deepseek-ai/* 的 peerDependencies,因此不會觸發 DSH 的插件版本閘門。許可證爲 MIT(package.json 版本 1.0.0)。

它解決什麼問題

壓縮後的上下文缺口主要體現在三類行爲上:

  • 忘記剛纔查到的結論,重複做同樣的事;
  • 把很久以前的舊信息當成「現在」;
  • 跨會話接手時,不瞭解上一輪實際發生了什麼。

本插件用「全量落盤 + 提示注入」補上這條縫:磁盤上保留可審計的軌跡,系統提示裏給模型一條簡短的「你在哪裏、最近說了什麼、現在幾點」。

核心功能

全量記錄

插件監聽 session/event,對以下類型逐條寫入 JSONL(單條有長度截斷,默認用戶/助手消息 4000 字、工具參數/結果 1500 字):

  • user/message
  • assistant/message
  • tool/call
  • tool/result
  • turn/end

另在 agent/created 時寫入 session/start 一行(含來源與 cwd),便於按會話聚合。

落盤示例(每行一條 JSON):

{"ts":"2026-11-06T07:31:22.123Z","sess":"session-…","seq":42,"type":"user/message","role":"user","text":"…"}
{"ts":"2026-11-06T07:31:25.456Z","sess":"session-…","seq":44,"type":"tool/call","tool":"pwsh","args":"…"}
{"ts":"2026-11-06T07:31:26.789Z","sess":"session-…","seq":45,"type":"tool/result","isError":false,"result":"…"}

默認目錄爲 ~/.dsh/ctx-log/ctx_YYYY-MM-DD.jsonl(Windows 爲 C:\Users\<你>\.dsh\ctx-log\)。

軌跡注入

每輪系統提示可注入:

  • 軌跡文件的絕對路徑;
  • 本會話已記錄條數;
  • 最近 N 條(默認 6)用戶/助手消息摘要(跨天時會自動回看上一天的文件尾部)。

實現上約 60 秒緩存尾部讀取,避免每輪全量掃盤。

時間與新鮮度

每輪注入當前時間,避免長回合中途模型不知道「幾點」。可選 watchFiles 監控指定文件的 mtime:超過 3 天標 ⏳、超過 7 天標 ⚠️,並提示引用前先覈實。

安裝與啓用

DSH 桌面端的 profile 由 Electron 獨佔管理,不能通過命令行安裝,需在桌面端插件流程中完成。README 給出的步驟如下:

  1. 取得本倉庫目錄(例如從 GitHub 倉庫 下載 zip 解壓,或使用你已信任的本地副本路徑);
  2. 打開 DSH 桌面端 → 側欄 插件 → 添加插件 → 填寫該目錄的絕對路徑(也支持 git 地址、npm 包名或 zip);
  3. 應用後等待一次重載;
  4. 驗證:新開一輪對話,系統提示應出現 【上下文軌跡】… 相關行;同時 ~/.dsh/ctx-log/ 下應出現當天的 ctx_*.jsonl。

本插件裝進 profile 後對所有會話生效。修改配置後可在插件管理器中 disable → enable 做熱重載,或重啓應用。

社區目錄頁:skillhub.cn/plugins/Tom-l-j-h/dsh-ctx-log(獨立站點,與 DeepSeek / 幻方無官方從屬關係)。

配置

配置通過 cordis.patch.yml 傳入(安裝後也可在 profile 對應條目中修改)。README 中的示例:

- insert:
    - id: dsh-ctx-log
      name: 'dsh-ctx-log'
      config:
        logDir: ''                 # 留空 = ~/.dsh/ctx-log
        maxTextChars: 4000         # 用戶/助手消息單條上限
        maxToolChars: 1500         # 工具參數/結果單條上限
        injectTrail: true          # 是否注入軌跡路徑與摘要
        trailRecentLines: 6        # 摘要條數
        skipTypes: []              # 例:['tool/call','tool/result'] 可顯著降低落盤敏感度
        watchFiles: []             # 例:[{ path: 'D:/notes/TODO.md', label: '筆記' }]
字段 默認 說明
logDir ~/.dsh/ctx-log 落盤目錄,不存在會自動創建
maxTextChars 4000 用戶/助手消息截斷長度
maxToolChars 1500 工具參數/結果截斷長度
injectTrail true 關閉則只記錄、不注入
trailRecentLines 6 注入的最近消息條數
skipTypes [] 跳過的 session 事件類型
watchFiles [] [{ path, label }],按 mtime 提示新鮮度

若只希望落盤、不想污染系統提示,可將 injectTrail 設爲 false。

典型用法與數據流

工作原理可概括爲:

session/event ──(5 類過濾)──> appendFileSync ──> ~/.dsh/ctx-log/ctx_YYYY-MM-DD.jsonl
                                                        │
systemPrompt.context() ──每輪──> 讀尾部 400 行 ──> 最近 6 條摘要 + 軌跡路徑 + 當前時間/新鮮度

日常使用時無需額外命令:啓用插件後正常對話即可。需要人工覈對歷史時,可直接打開對應日期的 ctx_*.jsonl,按 sess、seq、type 檢索。README 建議默認保留約 7 天,可用系統命令清理舊文件,例如 Linux/macOS:

find ~/.dsh/ctx-log -name 'ctx_*.jsonl' -mtime +7 -delete

適用場景與注意

適合誰: 長會話、多工具調用的 DSH 桌面用戶;需要在壓縮後仍讓模型感知「最近說過什麼」、或事後按 JSONL 審計軌跡的開發者。

隱私與安全(必讀):

  • 默認記錄對話全文與工具參數/結果,可能含密鑰、個人信息或業務數據;
  • 內置 scrub() 僅兜底處理常見密碼、api_key、Bearer、URL 憑據等模式,不保證脫敏完整;
  • logDir 應放在本機專用目錄,不要放入雲同步盤或共享目錄;
  • 敏感環境可配置 skipTypes: ['tool/call','tool/result'] 只保留對話;
  • 插件運行在 Harness Host 進程內,與應用同級文件訪問能力 —— 安裝前應閱讀源碼與 MIT 許可證,只裝可信來源。

兼容性: README 記載在 DSH Desktop 0.2.x(Windows) 實測;其他版本需自測。注入文案爲中文,英文界面下功能不受影響。

結尾

dsh-ctx-log 用按日 JSONL 保存會話事件,並在系統提示中注入軌跡路徑與最近摘要,針對性緩解 DSH 上下文壓縮帶來的信息丟失。安裝走桌面端插件頁,配置集中在 cordis.patch.yml。進一步細節見 GitHub README 與 社區目錄頁。

羽毛球分组比赛记分
小程序二维码

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

小夜