dsh-archived-conversations

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

使用方法

  1. 打開 DSH Web 界面,進入 設置 頁面。
  2. 在導航欄中找到 已歸檔對話 入口(id: archived-conversations)。
  3. 頁面頂部會顯示提示:當前不支持取消歸檔。
  4. 點擊列表中的任意條目,即可在側邊欄底部查看該歸檔會話最近 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 端目前沒有 unarchiveSession API,且插件無法通過私有方法實現。歸檔會話一旦被清除回“新對話”狀態,將無法恢復。
  • 預覽限制:預覽僅限於最近 6 條消息,且受單條字符數限制。
  • 環境要求:需要 Node.js 22.19 或更高版本。
  • 生效方式:安裝插件後必須重啓 dsh web 服務,配置纔會生效。

該插件通過標準的 Web Server 註冊與 Fetch 通信模式,在不改變 DSH 現有狀態管理邏輯的前提下,爲用戶提供了安全、受控的歸檔會話查看途徑。

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

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

小夜