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 现有状态管理逻辑的前提下,为用户提供了安全、受控的归档会话查看途径。

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

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

小夜