DSH Session Keep-alive: Bounded Per-Tab Preservation of Open Sessions

前言

在 DeepSeek Harness(DSH)里同时开多个聊天会话时,切换标签或视图往往会触发原生 session 释放,再切回来就要重新加载历史。对需要频繁对照多个会话的开发者来说,这类重复加载既费时间,也打断思路。下面介绍社区插件 dsh-session-keepalive(包名 @local/dsh-session-keepalive):它在每个浏览器标签页内,用 DSH 原生的 session retain 机制保留「已经打开过」的会话引用,并在数量与闲置时间上设上限,避免无节制占用内存。

这是什么

dsh-session-keepalive 由 edgora-ai 维护,分类为客户端插件。当前发布版本 1.1.2,声明适配 DSH 0.2.1-rc.3 或 0.2.1-rc.4;其他 DSH 版本不保证兼容。

一句话定位:在每个浏览器标签页内,对有界数量的、已成功打开过的会话做 session retain 保温,减少左右切换时的反复释放与历史重载;只保温实际打开过的会话,不预取未打开的会话。简介中的 “Bounded per-tab session keep-alive” 即指这种「按标签页、有上限」的策略;设置与诊断走 DSH 原生能力,诊断元数据不包含聊天内容。

核心功能

保温策略(默认)

  • 默认最多保留 8 个会话(含当前)。
  • 最后一个显示该会话的视图离开后,闲置 30 分钟再释放引用。
  • 不创建独立 WebSocket,不改网络配置,不持久复制聊天记录;真实断网、代理超时或服务重启仍由 DSH 原生恢复逻辑处理。

原生设置

在聊天输入区附近展开 「会话保温」→「保温设置」:

项 范围 默认
保温会话数量 1–32 整数 8(含当前)
闲置释放分钟数 1–240 整数 30

保存后通过 DSH 原生 configForms → settings.mutate 写入当前 profile 配置;同一 Host/profile 下已认证浏览器共享设置,每个标签页仍独立持有缓存。设置变更会动态生效:提高上限不丢已有引用;降低上限优先释放闲置最久的项。

恢复继承默认值 会删除用户覆盖,回到 profile 组合配置;无组合自定义时为 8 / 30。

标签页内临时控制

  • 本标签页暂停 / 恢复:只影响本页是否允许插件保温,不改持久设置。
  • 释放未显示的会话:仅清除本插件持有的闲置引用。
  • 永久关闭:在插件管理中禁用 @local/dsh-session-keepalive。
  • 刷新页面会清空当前标签页内存缓存,但保留已保存的设置。

缓存诊断(隐私边界)

在 「会话保温」→「缓存诊断(不含聊天内容)」 可查看最多 20 条近期元数据(新到旧),用于区分正常到期、数量上限、手动释放、页面重载、标签页回收等原因。记录写入本标签页 sessionStorage,不保存聊天、会话 ID、页面地址或错误正文;关闭标签页或清除站点数据后可能无法保留。

Agent 工具

Host 提供 session_keepalive_settings,支持 get、set、reset,字段与 UI 一致,同样走 settings.mutate;可用 expectedRevision 避免并发覆盖。写入要求当前会话 Full access,工具不会自行申请提权。

安装与启用

预构建包通过 GitHub Release 附件分发(非 npm 注册表)。安装需要 Full access 或相应批准,会影响目标 profile 的全部会话;安装前建议查看仓库源码与 MIT 许可证。插件在当前 DSH 进程权限下运行,与手动改 profile 的 package.json 或 patch 不是同一路径。

推荐命令(将 web 换成你的 profile 名称):

dsh plugin --profile web add 'https://github.com/edgora-ai/dsh-session-keepalive/releases/download/v1.1.2/local-dsh-session-keepalive-1.1.2.tgz'

也可把同一 URL 粘贴到 DSH 插件页安装入口,或由 Agent 通过 Plugin Manager 的 install_bundle 安装。若已下载 .tgz,可执行:

dsh plugin --profile web add /absolute/path/local-dsh-session-keepalive-1.1.2.tgz

无需解压。包内已含构建后的 client.js 等资源,安装期无构建脚本。

安装完成后按管理器返回的状态操作,刷新已有 DSH 网页,在输入区附近找到「会话保温」。从旧版无 Config 升级到 1.1.0 时,若设置暂不可用,可能需在当前任务结束后重启 DSH 实例再刷新 GUI,不要另起服务。

典型用法

  1. 确认 DSH 为 0.2.1-rc.3 或 0.2.1-rc.4,用上一节命令安装 v1.1.2 包。
  2. 刷新 Web 客户端,打开多个你确实需要来回切换的会话。
  3. 若同时打开的会话较多,在 保温设置 里把「保温会话数量」调到 1–32 之间(注意数值越大,内存与实时订阅流量越高),保存至提示「已保存并应用」。
  4. 长时间不用某会话时,可依赖默认 30 分钟闲置释放,或调「闲置释放分钟数」(1–240)。
  5. 若发现缓存被清,用 缓存诊断 看释放原因,而不是从诊断里恢复内存缓存(诊断不能恢复页面缓存)。

需要自动化时,在具备 Full access 的会话里让 Agent 调用 session_keepalive_settings 的 get / set / reset,与 UI 行为一致。

适用场景与注意

适合:在同一浏览器标签页内频繁切换多个已打开会话、希望减少历史重载的 DSH Web 用户;需要与 UI 一致的 profile 级保温配置或 Agent 调参的场景。

不适合或需知边界:

  • 无法替代网络层修复;连接问题仍依赖 DSH 原生恢复。
  • 多个可见视图占满保温名额时,超额视图只登记显示需求,不立刻新增引用;名额空出或提高上限后才可能补上。
  • 并发在不同浏览器编辑同一设置时,修订冲突会拒绝写入并保留草稿。
  • 社区目录 skillhub.cn 插件页 与 GitHub 仓库用于发现与分发,与 DeepSeek / 幻方无官方从属关系;DSH 生态本身是「一切皆插件」,本插件是社区客户端扩展之一。

结尾

dsh-session-keepalive 用有界的 per-tab retain,在可控内存前提下减轻多会话切换时的重复加载;设置与持久化走 DSH 原生路径,诊断只保留不含聊天内容的元数据。进一步了解与 issue 反馈见 GitHub 仓库,目录介绍见 SkillHub 插件页。

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

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

Xiaoye