前言¶
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/messageassistant/messagetool/calltool/resultturn/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 給出的步驟如下:
- 取得本倉庫目錄(例如從 GitHub 倉庫 下載 zip 解壓,或使用你已信任的本地副本路徑);
- 打開 DSH 桌面端 → 側欄 插件 → 添加插件 → 填寫該目錄的絕對路徑(也支持 git 地址、npm 包名或 zip);
- 應用後等待一次重載;
- 驗證:新開一輪對話,系統提示應出現
【上下文軌跡】…相關行;同時~/.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 與 社區目錄頁。