dsh-gui-last-session:重启 DSH 后自动回到上次会话

前言

用 DeepSeek Harness(DSH)做 Web 界面或 CLI 开发时,引擎重启后界面往往会落在一个空白会话或默认页,需要自己在历史里一层层找到刚才的对话。改引擎源码去记「上次会话」既难维护,也不符合 DSH「一切皆插件」的做法。下面介绍社区插件 dsh-gui-last-session(维护者 itchenshi):在不动引擎文件的前提下,由宿主侧持久化指针、页面侧记录与恢复,重启后尽量自动打开你离开前正在看的那场会话。

这是什么

dsh-gui-last-session 是 DSH 的「记忆」类插件,当前版本 0.1.9(MIT)。一句话:记住你最后一次所在的会话 id,引擎与页面就绪后自动 open() 回去。实现上是「宿主半边写盘 + 客户端半边监听切换」,而不是 patch 引擎。

仓库:https://github.com/itchenshi/dsh-gui-last-session
社区目录:https://www.skillhub.cn/plugins/itchenshi/dsh-gui-last-session

核心功能

资料中明确的能力如下。

  1. 页面记录、重启恢复
    页面半边在你切换会话时更新指针;加载时会尝试重新打开存下的会话。

  2. 不记空白会话
    引擎启动时产生的未使用空白会话有两道防线,不会被写入指针,避免续接一个空对话。

  3. 等待会话列表就绪
    恢复前会轮询直到目标 id 出现在列表里(约每 150ms、最长约 30 秒),避免对未知 id 调用 open() 失败。

  4. 目标已删则安静放弃
    若记住的会话已被删除,插件不再强行打开,保留引擎自身的启动行为。

  5. 不记录子代理会话
    记录逻辑会跳过 subagent 会话。

  6. 与 DSH Ready GUI 的迁移
    从 DSH Ready GUI 迁出时,GUI 可把已有指针交给插件;插件若已有指针则不会被覆盖,原「上一个会话」可延续。

  7. 状态极简
    仅在 <DSH_HOME>/last-session.json 保存 session id 与时间戳,原子写入(临时文件 + rename)。

记录优先级(README 说明):优先引擎主视图正在显示的会话(retainedBy.mainView),否则取最近提问过的会话。

安装与启用

本包尚未发布到 npm(registry.npmjs.org 查无此包),需用 DSH 插件命令或 Release tarball。

DSH Ready GUI(推荐)
插件随 GUI 内置;在设置 →「第三方插件」中勾选或取消。这是带页面半边的插件,安装后按提示刷新页面。

其它宿主(dsh web / CLI) 任选一条:

# 推荐:直接从 GitHub 装
dsh plugin --profile web add github:itchenshi/dsh-gui-last-session

# 备选:从 Release tarball 装
dsh plugin --profile web add https://github.com/itchenshi/dsh-gui-last-session/releases/download/v0.1.9/dsh-gui-last-session-0.1.9.tgz

两条命令都会安装含 cordis.patch.yml 的完整包,装完无需额外配置即可工作。

典型用法

经过上面的安装步骤后:

  1. 重启 DSH 引擎。
  2. 刷新 Web 页面。
  3. 之后无需额外操作:页面加载时会尝试回到存下的会话;你每次切换会话都会更新指针。

若需关闭或调试日志,见下一节配置。

配置

cordis.patch.yml 中 id: gui-last-session 对应行的 config 全部可选:

键 默认 说明
enabled true 为 false 时插件直接返回,不注册路由
quiet false 为 true 时激活过程不记日志

若要在某个 profile 下覆盖配置,在该 profile 自己的 cordis.patch.yml 里增加 id 相同 的一行。注意:这会整体替换 config,覆盖时每个键都要写全。

兼容性与运行环境

  • 清单声明 DSH >= 0.1.5-rc.2,并将 0.1.5-rc.2、0.2.0-rc.2 标为 compatible。
  • Node >= 20。
  • 插件本身不做版本号门禁,依赖公开服务契约(如 ctx.sessions);契约变化时引擎会报错,而不是静默失效。
  • 仓库内测试不启动真实引擎,端到端行为未在 CI 里自动化。

适用场景与注意

适合谁
经常重启引擎或刷新部署、又希望 Web 界面立刻回到上次对话的 DSH 用户;尤其在使用 dsh web 或非 GUI 宿主时,可用官方 README 中的安装命令单独启用。

安全与权限
插件以当前 DSH 进程权限运行;安装前建议阅读源码与 MIT 许可证。指针通过宿主提供的 GET/POST/PUT /gui-last-session 与 POST /gui-last-session/report 访问,走引擎的信任围栏(Host 白名单 + 浏览器会话 cookie);无 cookie 的裸请求会得到 401。资料写明插件没有对外网络请求。

排错
重启后未回到原会话时,查看应用日志:成功记录会有 [gui-last-session] pointer -> session-...;启动时有 [gui-last-session] active (pointer: <DSH_HOME>/last-session.json)。恢复失败时日志会区分无指针、目标未出现、缺少打开会话接口等情况(如 reopen: no usable pointer、reopen: FAILED — ...、reopen: giving up ...)。

结尾

dsh-gui-last-session 用插件方式解决「重启后找会话」的重复劳动:状态只落一份 last-session.json,行为边界在 README 里写清楚。需要细节、Issue 或自行构建时,以 GitHub 仓库为准;在 SkillHub 等社区目录可检索同插件条目(目录为独立站点,与 DeepSeek / 幻方无官方从属关系)。

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

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

Xiaoye