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