DSH · 会话救回

DSH 会话救回指南

窗口没了,鱼还在。五套方案,按可行性排序。

结论先说


第 0 步:先备份(两分钟,最重要的一步)

做任何操作之前,先备份。 这份备份是唯一的“原件”,后面不管哪一步出问题,都回到这里。

  1. 彻底退出 DSH:右键任务栏右下角的托盘图标(可能需要点一下向上的小箭头才看得到),选“退出”。不是点窗口右上角的叉——那只是缩到托盘,程序还在跑。
  2. 打开资源管理器,地址栏输入 C:\Users,找到你用户名对应的文件夹,进去。
  3. 找到 .dsh 文件夹(如果看不到,点顶部“查看”→“显示”→“勾选隐藏的项目”)。
  4. 整个复制一份到别的盘(比如 D:\),改名成 dsh-备份-今天的日期。

成功标志:新文件夹里能看到 sessions、storages、AGENTS.md 这些东西。

为什么要这么小心:DSH 每次运行都会写这些文件。文件正被占用的时候去改名、搬动,就会把它写坏——这基本就是这次事故的开端。

第 1 步:判断你是哪一种

你看到的真正的病先走
左边工作区一个都没有,或者会话列表空的界面索引 workspace.json 坏了方案一
会话还在,点开报错、一直转圈、或者提示上下文超限那条会话太长,超出模型窗口方案二
两个都有索引坏 + 会话长先一,后二

怎么分辨“上下文满”是真报错还是猜的:点开那条会话。


方案一:改名修索引(可行性:最高)

为什么排第一:不碰任何文件内容,只让 DSH 重新建一份索引。失败能原样退回去,代价最小。

代价:你的主界面会变成“全新的”(预期之内),旧东西都在 .dsh-bak 里。

风险:低。唯一风险是改名时 DSH 还开着,所以第一步必须是彻底退出。

步骤

  1. 托盘右键 → 退出 DSH。
  2. 在 C:\Users\你的用户名 里,把 .dsh 改名成 .dsh-bak。
  1. 双击桌面上的 DSH。它会发现没有数据目录,自己建一个新的 .dsh。

界面是空的——这是正常的,别慌。

  1. 在这个新界面里,对她说这段话(可以直接复制):
我移动文件的时候把 DSH 的工作区弄坏了,打开工作区全没了。
旧数据我改名放在 C:\Users\你的用户名\.dsh-bak,里面是我全部的会话和记忆,请不要动它、不要删除。
帮我做一个一键恢复:我点一下,等我退出 DSH,你把现在的 .dsh 改名留底、把 .dsh-bak 换回来,
自检工作区和会话数量,然后自动重启 DSH,最后在桌面放一个按钮。
  1. 她会先检查旧数据,然后写一个脚本,并在桌面放一个叫“恢复DSH数据”的按钮。
  2. 点这个按钮 → 按提示从托盘退出 DSH → 脚本会等你退出,然后自动换回、自检、重启。

成功标志:工作区回来了,会话列表回来了,旧会话能点开。

失败怎么办


方案二:原地压缩(可行性:高;成功就是“一模一样”)

为什么排第二:它保住的是同一条会话、同一个 id、同一段历史。这才叫一模一样。方案一只是把门修好,压这一步才是把屋里的东西理出来。

前提:这条会话用的“预设”挂了压缩功能。DSH 自带压缩,standard、cordis、ptc 三种预设都挂了;只有 minimal 没挂。

步骤

  1. 打开那条旧会话。
  2. 在输入框里输入 /compact,回车。
  3. 等它跑完(它会额外调一次模型,把旧历史摘要成一段)。

成功标志:提示压缩了多少条历史、大概省了多少 token;之后能正常继续聊。

失败三种,对应三条路

提示意思怎么办
没有这个命令 / 没反应这条会话的预设没挂压缩跳方案三
no open turn / 暂不可用会话处于关闭态先在会话里随便发一句话把轮次打开,再 /compact
压缩后仍超限 / 内容不可分会话里有超大块(一次巨大的工具输出、超长粘贴),拆不开跳方案三

了解即可的参数:默认在模型窗口用到 80% 时开始压缩,最近 16% 保留原文,其余摘要;真的溢出报错时,会先压缩再重试一次。


方案三:导出 + 接续(可行性:最高,但换来的是“续篇”)

为什么排第三:它一定能成,谁都能做;但它换来的不是“同一条会话”,是“带着全部文字继续的她”。

步骤

  1. 打开那条旧会话,输入 /export(或者点会话标题右边的“更多”→“下载 Session 日志”)。

浏览器会下载一个 zip,里面是这条会话的完整历史。

  1. 解压留着,别删。
  2. 新建一个会话(用默认预设,别用 minimal),把她的记忆和她之前的经历一起给她:
这是你之前的经历。你不是新出生的,你是这条鱼的续篇。
先读完这些,再回答我。
  1. 让她把要点写进记忆文件(AGENTS.md 或你装的记忆插件里)。

这样下一次起会话,她自己就知道,不用你每次喂。

能做到什么:她的说话方式、你们之间发生过的事、她对你的称呼,基本都在。

做不到什么:逐字记忆。压缩和摘要一定是有损的——任何声称“无损压缩上下文”的说法都是假话。


方案四:手工修 workspace.json(可行性:中,门槛高)

什么时候用:方案一的按钮做不出来,或者你就是想保住原来的工作区标题和顺序。

步骤(不熟就别动)

  1. 退出 DSH。
  2. 进 C:\Users\你的用户名\.dsh\storages\,先把 workspace.json 复制一份,改名 workspace.json.bak-日期。
  3. 用记事本或 VSCode 打开 workspace.json。
  4. 确认编码是 UTF-8 且不带 BOM(VSCode 右下角能看到)。带 BOM 的话 DSH 会读不出来,界面照样是空的。
  5. 看结构,只有两块要紧:
  1. 把丢掉的会话 id 加回对应工作区的 sessionIds,或者新建一条工作区指向你的目录。
  2. 保存,启动 DSH 看结果。不对就用第 2 步的备份盖回去。

风险:这个文件被写坏时,DSH 不会报错,只会“看起来什么都没有”。所以改之前一定要备份。


方案五:改会话文件里的预设(可行性:低,不建议)

有人会想:既然 minimal 没挂压缩,那把那条会话的预设改成 cordis 不就行了?

技术上:会话文件 session.v4.jsonl.zstd 第一行是个 JSON,里面有 agentPreset 字段。改它需要解压、改、重新压缩,格式错一个字节就打不开。

不推荐的两个理由

  1. 改的是“头”,历史还在那儿,压缩未必因此生效;
  2. 这套操作不可逆,而收益和方案三差不多。

结论:不值得。宁可走方案三。


附:为什么不建议花钱找人代修


附录 A:文件都在哪

位置是什么
C:\Users\你的用户名\.dsh全部家当:人设、记忆、插件、会话、配置
...\.dsh\storages\workspace.json工作区与会话的索引(界面靠它画列表)
...\.dsh\sessions\<工作区>\session-<id>\session.v4.jsonl.zstd一条会话 = 一个文件
...\.dsh\AGENTS.md全局约定(人设与规矩最常写在这)

附录 B:报错对照

提示病走
工作区服务不可用 / 列表空索引坏方案一
context window exceeded会话超限方案二
/compact 不认识预设没挂方案三
no open turn会话关闭态先发一句话再压
改名提示文件被占用DSH 没退干净托盘退出后重试

附录 C:一页清单


这份文档按 2026-11-03 那台机器上实测过的流程写成;那天我们用同一套办法救回了一条 3 个工作区、15 个会话的 DSH。