DSH Web 側邊欄頁腳目前沒有已歸檔會話的入口,這些對話被系統隱藏。要查看歸檔記錄,需要通過其他方式查詢日誌,操作繁瑣且容易混淆當前會話。dsh-archived-conversations 插件在 DSH Web 設置頁面中提供了歸檔對話列表和只讀預覽功能,解決無法直接查看歸檔歷史的問題。
插件概述¶
該插件由用戶 AKS1st 維護,旨在解決 DSH 用戶無法在 Web 界面查看已歸檔會話的需求。它通過在設置面板增加入口,允許用戶瀏覽歸檔列表,並點擊條目查看最近的消息預覽。由於 DSH 客戶端限制歸檔會話不能保持打開狀態,插件設計爲只讀預覽,不嘗試恢復或打開歸檔會話。
工作原理¶
插件分爲客戶端和 Host 端兩部分協作。
Host 端(src/index.ts)註冊了一個精確的路由 GET /__archived-conversations/preview?sessionId=<id>。當客戶端請求預覽時,Host 通過 sessionQuery.readSession 讀取會話日誌,提取最近 6 條用戶/助手文本消息(每條截斷 400 字符),並返回 JSON 數據。
客戶端(src/client/index.js)通過 window.__ModuleLoader__.load 加載靜態 bundle,註冊 settings.section 條目(id: archived-conversations)。列表數據通過 DSH 的標準 props 獲取,點擊條目後使用 fetch 調用 Host 的預覽路由。
安裝與啓用¶
確保系統已安裝 Node.js 22.19 或更高版本。安裝命令如下:
dsh plugin --profile web add github:AKS1st/dsh-archived-conversations
dsh web # 重啓 web 服務使 profile 生效
若遇到 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 錯誤,需將包加入 profile 的 pnpm-workspace.yaml 的 allowBuilds 列表並重試。
卸載插件:
dsh plugin --profile web remove archived-conversations
使用方法¶
- 打開 DSH Web 界面,進入 設置 頁面。
- 在導航欄中找到 已歸檔對話 入口(id:
archived-conversations)。 - 頁面頂部會顯示提示:當前不支持取消歸檔。
- 點擊列表中的任意條目,即可在側邊欄底部查看該歸檔會話最近 6 條消息的只讀預覽。
安全設計¶
插件在安全上做了多層防護:
- IDOR 防護:預覽路由僅響應
sessionId屬於workspaceRegistry.archivedSessionIds的請求。活動會話、子代理會話一律不可讀(返回 404)。 - 會話 ID 校驗:請求中的
sessionId必須符合 DSH 規範(session-前綴 + UUID/計數器),否則拒絕。 - 最小數據:僅返回最近 6 條消息,且每條文本長度限制在 400 字符以內。不返回推理內容、工具調用或完整日誌。
- XSS 防護:消息文本在瀏覽器端以 React 文本節點渲染,自動轉義,不使用
innerHTML或dangerouslySetInnerHTML。 - 請求限制:響應頭設置
Cache-Control: no-store和X-Content-Type-Options: nosniff。請求來源僅接受 loopback socket,拒絕跨站請求。 - 無憑據泄露:插件不讀取、不發送任何文件、憑據或系統信息。
限制與注意事項¶
- 不支持取消歸檔:DSH Host 端目前沒有
unarchiveSessionAPI,且插件無法通過私有方法實現。歸檔會話一旦被清除回“新對話”狀態,將無法恢復。 - 預覽限制:預覽僅限於最近 6 條消息,且受單條字符數限制。
- 環境要求:需要 Node.js 22.19 或更高版本。
- 生效方式:安裝插件後必須重啓
dsh web服務,配置纔會生效。
該插件通過標準的 Web Server 註冊與 Fetch 通信模式,在不改變 DSH 現有狀態管理邏輯的前提下,爲用戶提供了安全、受控的歸檔會話查看途徑。