前言¶
在 DeepSeek Harness(DSH)裏做長期項目時,上下文會越積越長。計費往往按被重新計算的上下文長度來算,而不是簡單按輪數。冷啓動——重啓 DSH、閒置一段時間或換機器——會讓大量歷史 token 全量重算,成本明顯高於日常續聊。
常見做法是單條對話聊到底、fork 新對話,或把狀態寫進 AGENTS.md。前者歷史越長每輪越貴;fork 仍繼承全部歷史;改 AGENTS.md 又會打斷工作區相關緩存。維護者 JungleYXu 的 dsh-dossier(社區目錄名 jungleyxu/dsh-dossier,分類:工作流)走的是另一條路:把項目切成多條較短對話(「卷宗」),用一份約 800–1500 token 的交接文檔傳遞狀態,新會話只讀文檔、不重放舊對話全文。側欄還提供卷宗面板,用來歸檔、排序和管理會話本身。
下面介紹插件定位、核心能力、安裝配置與典型用法;事實以 GitHub README 與 npm 包說明爲準。
這是什麼¶
dsh-dossier 是 DSH Desktop 插件(當前文檔標明平臺 DSH Desktop 0.2.x,宿主 Node ≥ 20),npm 包名 dsh-dossier,版本 1.0.0,許可證 MIT。
兩個核心部分:
- 對話管理 —— 側欄「卷宗」面板,按項目文件夾歸集會話,支持改名、排序、置頂、多選與批量操作。
- 項目交接 —— 當前會話生成固定骨架的交接 Markdown,接手會話讀文檔即可繼續,避免重放幾十萬 token 歷史。
數據全部落在本地(~/.dsh/dossier.json、工作區 goals/、全局備份目錄),README 未描述對外網絡請求。
核心功能¶
對話管理(卷宗面板)¶
點擊側欄「卷宗」進入全頁面板。左側導航大致爲:★ 交接文檔(置頂)→ 全部對話 → 未歸檔 → 各卷宗分組及其下的對話。
卷宗即項目文件夾:
- 可新建、重命名、刪除卷宗;支持上下調序、置頂、「按更新時間自動排序」。
- 刪除卷宗只解散分組,內部對話回到「未歸檔」,對話本身及已有交接文檔不刪。
- 一個對話最多屬於一個卷宗;「移到未歸檔」只退出分組,不刪對話與文件。
- 多選後可批量「歸入…」,浮層內可直接新建卷宗。
對話條目在面板內可改名(與工作區會話標題同步)、置頂、手動調位;雙擊或「進入對話」打開。排序分默認(手動)、時間、名稱三檔;支持卡片 / 列表視圖,選擇記在瀏覽器本地。
項目交接¶
一鍵交接:dossier_handoff_write¶
對話左下角「交接」按鈕會向當前會話投遞短指令,由 agent 調用工具寫盤,路徑約定爲:
<會話工作區>/goals/<卷宗名>/階段-NN-<標題>.md
~/.dsh/dossier/handoffs/<工作區>/<時間>-<會話id>-階段-NN-<標題>.md # 全局備份
階段號在同目錄下自動遞增。若宿主判斷會話「沒有幹過活」,返回 409 empty-session,不投遞 prompt,按鈕顯示「無可交接」。寫盤前會掃描密鑰與內網地址模式並告警;超過約 1800 token 會提示壓縮背景與過程。
文檔骨架固定爲八節(寫在工具描述中,供 agent 遵循):目標、當前狀態、關鍵決策、已否決的方案、約束、涉及文件、下一步、未解決與風險。README 強調「已否決的方案」若缺失,接手方容易重走已否路徑。
交接文檔目錄與遷移¶
面板直接列出工作區 goals/ 下的 Markdown。無卷宗時文檔落在 goals/ 根下,面板上歸在「未歸檔」。可對單份文檔導出、刪除(備份仍在)、定位到源會話;支持整組導出/刪除,以及整包 dossier-handoff-<時間>.json 導入導出(同名同內容跳過,同名不同內容另存後綴,不覆蓋)。宿主限制只能寫入 goals/ 前綴內路徑。
勾選一份或多份交接文檔後點「開新對話」:新對話建在同一工作目錄,首條消息要求先讀所選文檔並按「當前狀態」「下一步」續作;開聊前會確認所帶文檔與費用說明。
交接文檔質量檢查¶
倉庫提供 scripts/handoff-eval.mjs:23 項靜態檢查(骨架、≤1500 token、無代碼塊、路徑存在性、已否決 三段式、下一步驗收標準、無密鑰等)。README 還建議用「零上下文盲接」——把文檔單獨交給不讀倉庫的新會話,驗證能否複述下一步與驗收標準。
成本可見¶
面板頂部展示最近一條對話的步數、消息數、上下文長度、上一輪花費與緩存命中率(按 deepseek-flash 現價估算)。選中某條對話時追加冷啓動約算金額;狀態「對話中」(一小時內有過往來)與「已斷」僅按時間推斷,客戶端無精確「當前打開會話」接口。
安裝與啓用¶
在 DSH 插件市場搜索「卷宗」,或執行:
dsh plugin install dsh-dossier
本地開發時可在 profile 的 package.json 中用 link: 指向源碼路徑,把 dsh-dossier 加入 dsh.profile.bundles,在 profile 目錄 pnpm install 後重啓 DSH。改宿主 index.js 需重啓 DSH;只改 client.js 刷新頁面(Ctrl+F5)即可。
配置可通過 profile 的 cordis.patch.yml 覆蓋 bundle 默認項:
- insert:
- id: dossier
name: dsh-dossier
config:
handoffRoot: goals # 交接文檔根目錄,相對會話工作區
典型用法¶
- 在卷宗面板爲長期項目新建卷宗,把相關會話歸入該卷宗,便於檢索與排序。
- 階段告一段落時,在對話左下角點交接,讓 agent 生成
goals/<卷宗名>/階段-NN-<標題>.md。 - 需要新開短上下文會話時,在面板勾選交接文檔,點開新對話,按文檔中的下一步繼續。
- 換機器前用面板的整包導出生成
dossier-handoff-<時間>.json,在新環境導入;工作區goals/亦可直接納入 git。
自檢交接文檔質量(在插件倉庫目錄):
node scripts/handoff-eval.mjs <文檔.md> --cwd .
適用場景與注意¶
適合:跨多周、多會話的 DSH 項目;希望用結構化 handoff 換機或 fork 時降低上下文重放成本;需要在側欄統一歸檔大量對話的團隊或個人工作流。
注意:
- 插件在 當前 DSH 進程權限 下讀寫
~/.dsh/dossier.json、工作區goals/與備份目錄;安裝前宜瀏覽 源碼 與 MIT 許可證。 - 交接質量依賴 agent 是否按八節骨架寫全,尤其是「已否決的方案」與帶驗收標準的「下一步」;可配合
handoff-eval.mjs與盲接自測。 - 社區插件目錄 SkillHub 條目 與 GitHub 爲獨立生態信息源,與 DeepSeek / 幻方無官方從屬關係;星標等元數據以目錄頁爲準(當前線索爲 0 star)。
結尾¶
dsh-dossier 把「會話歸檔」和「狀態交接」做成一體:卷宗管對話歸屬,交接文檔用千字級 Markdown 替代全量歷史重放,並附帶目錄瀏覽、整包遷移與成本粗算。若要試用或反饋問題,可訪問 SkillHub 目錄頁 與 GitHub 倉庫(issue 區接受反饋)。