dsh-gui-last-session:重啓 DSH 後自動回到上次會話

前言

用 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

核心功能

資料中明確的能力如下。

  1. 頁面記錄、重啓恢復
    頁面半邊在你切換會話時更新指針;加載時會嘗試重新打開存下的會話。

  2. 不記空白會話
    引擎啓動時產生的未使用空白會話有兩道防線,不會被寫入指針,避免續接一個空對話。

  3. 等待會話列表就緒
    恢復前會輪詢直到目標 id 出現在列表裏(約每 150ms、最長約 30 秒),避免對未知 id 調用 open() 失敗。

  4. 目標已刪則安靜放棄
    若記住的會話已被刪除,插件不再強行打開,保留引擎自身的啓動行爲。

  5. 不記錄子代理會話
    記錄邏輯會跳過 subagent 會話。

  6. 與 DSH Ready GUI 的遷移
    從 DSH Ready GUI 遷出時,GUI 可把已有指針交給插件;插件若已有指針則不會被覆蓋,原「上一個會話」可延續。

  7. 狀態極簡
    僅在 <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 的完整包,裝完無需額外配置即可工作。

典型用法

經過上面的安裝步驟後:

  1. 重啓 DSH 引擎。
  2. 刷新 Web 頁面。
  3. 之後無需額外操作:頁面加載時會嘗試回到存下的會話;你每次切換會話都會更新指針。

若需關閉或調試日誌,見下一節配置。

配置

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 / 幻方無官方從屬關係)。

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

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

小夜