前言¶
用 DeepSeek Harness(DSH)做 Web 界面或 CLI 開發時,引擎重啓後界面往往會落在一個空白會話或默認頁,需要自己在歷史裏一層層找到剛纔的對話。改引擎源碼去記「上次會話」既難維護,也不符合 DSH「一切皆插件」的做法。下面介紹社區插件 dsh-gui-last-session(維護者 itchenshi):在不動引擎文件的前提下,由宿主側持久化指針、頁面側記錄與恢復,重啓後儘量自動打開你離開前正在看的那場會話。
這是什麼¶
dsh-gui-last-session 是 DSH 的「記憶」類插件,當前版本 0.1.9(MIT)。一句話:記住你最後一次所在的會話 id,引擎與頁面就緒後自動 open() 回去。實現上是「宿主半邊寫盤 + 客戶端半邊監聽切換」,而不是 patch 引擎。
倉庫:https://github.com/itchenshi/dsh-gui-last-session
社區目錄:https://www.skillhub.cn/plugins/itchenshi/dsh-gui-last-session
核心功能¶
資料中明確的能力如下。
-
頁面記錄、重啓恢復
頁面半邊在你切換會話時更新指針;加載時會嘗試重新打開存下的會話。 -
不記空白會話
引擎啓動時產生的未使用空白會話有兩道防線,不會被寫入指針,避免續接一個空對話。 -
等待會話列表就緒
恢復前會輪詢直到目標 id 出現在列表裏(約每 150ms、最長約 30 秒),避免對未知 id 調用open()失敗。 -
目標已刪則安靜放棄
若記住的會話已被刪除,插件不再強行打開,保留引擎自身的啓動行爲。 -
不記錄子代理會話
記錄邏輯會跳過 subagent 會話。 -
與 DSH Ready GUI 的遷移
從 DSH Ready GUI 遷出時,GUI 可把已有指針交給插件;插件若已有指針則不會被覆蓋,原「上一個會話」可延續。 -
狀態極簡
僅在<DSH_HOME>/last-session.json保存 session id 與時間戳,原子寫入(臨時文件 + rename)。
記錄優先級(README 說明):優先引擎主視圖正在顯示的會話(retainedBy.mainView),否則取最近提問過的會話。
安裝與啓用¶
本包尚未發佈到 npm(registry.npmjs.org 查無此包),需用 DSH 插件命令或 Release tarball。
DSH Ready GUI(推薦)
插件隨 GUI 內置;在設置 →「第三方插件」中勾選或取消。這是帶頁面半邊的插件,安裝後按提示刷新頁面。
其它宿主(dsh web / CLI) 任選一條:
# 推薦:直接從 GitHub 裝
dsh plugin --profile web add github:itchenshi/dsh-gui-last-session
# 備選:從 Release tarball 裝
dsh plugin --profile web add https://github.com/itchenshi/dsh-gui-last-session/releases/download/v0.1.9/dsh-gui-last-session-0.1.9.tgz
兩條命令都會安裝含 cordis.patch.yml 的完整包,裝完無需額外配置即可工作。
典型用法¶
經過上面的安裝步驟後:
- 重啓 DSH 引擎。
- 刷新 Web 頁面。
- 之後無需額外操作:頁面加載時會嘗試回到存下的會話;你每次切換會話都會更新指針。
若需關閉或調試日誌,見下一節配置。
配置¶
cordis.patch.yml 中 id: gui-last-session 對應行的 config 全部可選:
| 鍵 | 默認 | 說明 |
|---|---|---|
enabled |
true |
爲 false 時插件直接返回,不註冊路由 |
quiet |
false |
爲 true 時激活過程不記日誌 |
若要在某個 profile 下覆蓋配置,在該 profile 自己的 cordis.patch.yml 裏增加 id 相同 的一行。注意:這會整體替換 config,覆蓋時每個鍵都要寫全。
兼容性與運行環境¶
- 清單聲明 DSH >= 0.1.5-rc.2,並將 0.1.5-rc.2、0.2.0-rc.2 標爲 compatible。
- Node >= 20。
- 插件本身不做版本號門禁,依賴公開服務契約(如
ctx.sessions);契約變化時引擎會報錯,而不是靜默失效。 - 倉庫內測試不啓動真實引擎,端到端行爲未在 CI 裏自動化。
適用場景與注意¶
適合誰
經常重啓引擎或刷新部署、又希望 Web 界面立刻回到上次對話的 DSH 用戶;尤其在使用 dsh web 或非 GUI 宿主時,可用官方 README 中的安裝命令單獨啓用。
安全與權限
插件以當前 DSH 進程權限運行;安裝前建議閱讀源碼與 MIT 許可證。指針通過宿主提供的 GET/POST/PUT /gui-last-session 與 POST /gui-last-session/report 訪問,走引擎的信任圍欄(Host 白名單 + 瀏覽器會話 cookie);無 cookie 的裸請求會得到 401。資料寫明插件沒有對外網絡請求。
排錯
重啓後未回到原會話時,查看應用日誌:成功記錄會有 [gui-last-session] pointer -> session-...;啓動時有 [gui-last-session] active (pointer: <DSH_HOME>/last-session.json)。恢復失敗時日誌會區分無指針、目標未出現、缺少打開會話接口等情況(如 reopen: no usable pointer、reopen: FAILED — ...、reopen: giving up ...)。
結尾¶
dsh-gui-last-session 用插件方式解決「重啓後找會話」的重複勞動:狀態只落一份 last-session.json,行爲邊界在 README 裏寫清楚。需要細節、Issue 或自行構建時,以 GitHub 倉庫爲準;在 SkillHub 等社區目錄可檢索同插件條目(目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係)。