Skip to content

Releases

v0.4.1 — 「合并结果为空」的真相

Choose a tag to compare

@RyeSama RyeSama released this 21 Oct 18:32

修掉「合并结果为空」

这不是后端报错,而是你勾中的对话本身没有内容。

DSH 里可以存在「建了但一句话没说」的空对话,日志里只有三条初始化事件
(permission/preset、sandbox/mode、approval/policy)。这种对话在选择面板里
和正常对话长得一样,勾进去合并,剥掉噪音之后自然什么都不剩。

改了三处

  • 选择面板把空对话灰掉、标「空对话」、点了没反应,悬停会说明原因
  • 合并失败时不再只说四个字,而是逐个列出「这个对话读到 N 条,截取最近 K 轮后剩 M 条」,
    读到 0 条就直接点名是它没有历史
  • 事件层的 tool/call、tool/result 也一并丢掉(正文里的工具调用块早就剥了,
    事件层还留着宿主会报 tool/call call_00_xxx has no advertised tool lifecycle)

排查记录

用 session-aeaa7874 + session-2140c055(各取最近 20 轮)连跑两次都成功:
5330 + 3441 → 5213 条事件,宿主写入并落盘。所以写入链路是通的。

0.4.0 — 合并会话正式可用

Choose a tag to compare

@RyeSama RyeSama released this 21 Oct 18:28

合并会话(/weld)正式可用

0.3.1 把它修通了,这一版扶正:按钮上不再标「实验」,文档从头讲清楚它装了什么、剥了什么、
什么情况下内容会显得少。

这一版改了什么

  • 视图里的「合并为新会话(实验)」去掉实验标记,提示文案改为「几秒后侧栏会多出未命名,点开就能接着聊」
  • README 新增「新对话里到底装了什么」:四类被剥掉的内容(思考过程 / 工具调用与结果 /
    图片卸载与上下文压缩 / 重复初始化事件)各自为什么被剥,以及「源对话里 AI 光调工具时
    看着内容少」这个代价
  • 已知限制重写:补上「逐条写几千条事件要几百毫秒到几十秒,中间没有进度条」和
    「同一个对话同时只能有一个写入者(session/writer-held)」
  • 技术细节那节重写:/weld 不再是「自己造文件」,改成讲清楚
    sessionPersistence.create + 逐条 append + flush 三步,以及为什么第一步不能省
  • 目录结构更新到当前实际文件

两个功能的分工

联合视图 /weld
类比 把几份文件摊在桌上,自己比对 把几份文件装订成一本新的,递给 AI
AI 看得见吗 看不见 看得见
会多出一个对话吗 不会 会
原对话会变吗 不会 不会

0.3.1 — 合并会话可用了

Choose a tag to compare

@RyeSama RyeSama released this 21 Oct 18:21

合并会话(/weld)不再是实验功能

之前生成的新对话点开报「加载失败」。根因是我们自己拼日志文件,而宿主对日志的校验很严
(turn 要连续、引用不能悬空、assistant 消息要带 stream……),照报错猜了四轮结构都没过。

现在改成让 dsh 自己写:

  1. sessionPersistence.create() 建日志文件与写句柄 —— 不能省,没有写句柄时
    flush 会静默返回,事件全留在内存里(账本有 id、磁盘没文件)
  2. sessions.create() + 逐条 append(),seq 由宿主发,天然连续
  3. handle.flush() 落盘

顺带修掉三处只有走这条路才会暴露的问题:图片卸载/压缩事件的引用会悬空(直接丢弃)、
data.stream 不能整段删(重建节点时要 for..of,改成留空数组)、header 载荷不能带
type 但必须带 version。

实测:两个会话各取最近 20 轮 → 8207 条事件 → 1.2 MB 日志,新会话正常打开、能接着聊。

其他

  • 视图按钮去掉「(实验)」标记
  • README 与 CHANGELOG 同步更新(CHANGELOG 之前被 PowerShell 写成 GBK 乱码,已重写)

v0.3.0 — 视图只显示正文

Choose a tag to compare

@RyeSama RyeSama released this 21 Oct 17:59

0.3.0

联合视图只显示你和 AI 说的话

以前一屏里混着三种噪音,现在都滤掉了:

  • AI 的思考过程:不显示,也不参与合并。以前的判断读的是内容块的 type 字段,实际字段叫 kind,所以一条都没命中——这是思考过程一直没被剥掉的真因。
  • 工具调用与工具结果:[调用 read_image] 这类行不再出现,几十条连着刷屏的情况没了。
  • 系统注入:<AEGIS_DSH_ROUTING_BOOTSTRAP>、Time sampled while preparing turn 12…、Browser time zone for this request…、[Compressed conversation section]、Current working directory… 这些宿主塞给 AI 的内容,以前被当成用户说的话搬上了桌,现在按整块/逐行规则过滤。

合并侧同步收紧

/weld 生成新对话时:剥掉思考过程(包括 data.stream 里那份逐 token 回放记录)、剥掉工具内容块与 tool/call、tool/result 事件、剥掉会话开头的重复初始化事件、引用去重。

已知问题:合并出来的新对话可能打不开

dsh 从磁盘读回日志时会校验结构(turn 必须连续、turn/start 必须跟在上一轮收尾之后、sourceEventSeqs 不能重复也不能指向后面的行),跨会话拼接很难同时满足,报 SessionFormatError: turn/start does not open the expected turn。

已试过四种修法都不行:按顺序重编号 turn、末尾轮补齐 turn/end、保留首组初始化事件、引用去重。要做稳得改成走宿主自己的 ctx.sessions.create(),让内核自己写日志,而不是手写文件。

按钮已标注「(实验)」,README 的「已知限制」里写清了。


安装:dsh plugin install dsh-union-view,装完重启 DSH。

0.2.0 — 联合视图里直接生成新对话

Choose a tag to compare

@RyeSama RyeSama released this 21 Oct 17:04

0.2.0 — 联合视图里直接生成新对话

在联合视图里直接生成新对话

勾几个对话 → 填「每个取最近 N 轮」→ 点「合并为新会话」。不用再手打 /weld 和对话编号。生成的新对话在侧栏最上面(显示「未命名」),点开能接着聊;原对话不受影响。提交后自动刷一次会话列表,不用手动刷新页面。

思考过程一律不搬

合并时会剥掉 AI 的思考过程,只留用户消息、AI 正文和工具调用记录。联合视图里也不显示思考过程。

具体剥两处:消息内容块里的 reasoning,以及 assistant/message.data.stream 里那份逐 token 的流式回放记录(blockType: reasoning + reasoning-chunks)。只剥前者不够——宿主重建节点时会读 stream,思考过程会从那儿冒回来。

实测焊 588 条事件:新会话里含 reasoning 字样的事件行 0 条、带 stream 的 0 条,文件 331 KB。同一批对话带思考过程时是 5 MB。

其它改动

  • /weld 不带参数时列出最近 12 个对话(编号、时间、第一句话),照着抄就行
  • README 重写为面向普通用户的说明,技术细节收进折叠区
  • 新增 CHANGELOG.md

安装

dsh plugin install dsh-union-view

或者从源码:

git clone https://github.com/RyeSama/dsh-union-view.git
cd dsh-union-view
node scripts/build-client.mjs
node scripts/install-local.mjs

装完要重启 DSH 整个应用(不是刷新页面),对话标签栏才会多一个「联合视图」。

为什么新对话标题是「未命名」

原对话的标题事件引用了它自己的消息编号,截断之后这些编号对不上,所以合并时直接丢掉标题事件,交给 DSH 显示默认名。改个名字就行。