Skip to content

v0.26.1 — 临时 agent 会话在新版 DSH 上恢复可用

Choose a tag to compare

@He2way He2way released this 22 Sep 11:53
· 1 commit to main since this release

v0.26.1 — 临时 agent 会话在新版 DSH 上恢复可用 / Temp agent sessions work again on newer DSH

症状 / Symptom:画布(和卡片)里的「一句话改画布」输入后报 临时 agent 会话不可用,会话列表里还会慢慢堆出空白的临时会话。

原因 / Cause:客户端 sessions 服务悄悄改了两处契约:

  1. sessions.binding(id) 不再返回任意会话的绑定,而是只借用「已有人 retain」的绑定("Borrow an already-retained binding without extending its lifetime")。插件用 sessions.create 新建的临时会话没有任何人 retain,于是 binding() 一直返回空:会话建出来了、却从未被提示,聊天直接失败。
  2. 会话列表快照不再有 current 字段(现在是 { ids, byId, phase, projectionsBySession }),工作区行的字段也从 id 改成 workspaceId;subagentsByParent / jobsBySession 已不存在。

修复 / Fix:

  • 临时会话现在会在整个任务期间被 retain(sessions.retain),并在每条退出路径上释放;老客户端的 binding() 路径保留为回退。
  • 当前会话改为按 harness 自己的规则解析——主视图 retain 的那个会话(同时仍兼容旧的 current),于是临时会话建在对话所在的工作区里,卡片聊天「发送到主会话」也能找到会话,任务台会话卡不再显示「未选择会话」。
  • 工作区行兼容 workspaceId(旧 id),临时会话会真正落在注册的工作区里。
  • 子代理卡改读每个会话的 subagentCatalog 投影,运行状态取自 useSessionStatus;jobsBySession 在新客户端没有替代品,「后台任务」卡退化为空态而不是报错。

测试 / Tests:smoke.mjs 用两个假服务把两代契约都钉住——新版(binding() 在 retain() 之前一直为空,这正是回归点:旧代码会失败)与旧版(binding() 始终可用),断言临时会话建在源会话工作区、真的被提示、应用到画布、被归档、并且 retain 恰好释放一次;另加当前会话解析、列表读取、工作区命名与两代子代理投影的断言。

Install / 安装

dsh plugin --profile web add dsh-task-console           # npm(发布后)
dsh plugin --profile web add ./dsh-task-console.tgz     # 本 Release 的预构建 tarball

更新 profile 后请按 Ctrl+Shift+R 硬刷新页面。

Full changelog / 完整变更记录: CHANGELOG.md