dsh-fork-relink: DSH fork 后自动复制子 agent 树

前言

DSH 官方 fork 功能在创建新会话时,原会话的子 agent 记录仍指向旧会话。这导致 fork 出的新对话中,子 agent 面板为空,虽然记录仍在磁盘上,但脱离了新对话。dsh-fork-relink 监听 session/created 事件,为原会话的直接子 agent 创建完整副本并挂载到新会话下。

功能特性

该插件通过监听官方事件来实现子 agent 的迁移与保留:

  1. 事件监听与筛选:监听 session/created 事件,仅对 isSeeded 且有 parentSession 且非 subagent 的会话(即 fork 子会话)进行操作。
  2. 递归复制树:为原会话的每个直接子 agent 调用官方 agents.create 创建完整副本,并递归复制整棵子 agent 树。
  3. 元数据保留:复制子 agent 的面板、代理路由、descriptor、label 等信息。
  4. 冷会话机制:副本是冷会话,落盘后释放活体。副本与原件互不干扰,副本通过官方恢复路径唤醒。
  5. 目录登记:创建副本后向父会话追加官方 subagent/catalog,确保副本在子代理面板中可见。
  6. 日志代际处理:按代际读取会话日志(session.vN.jsonl.zstd),自动读取最高代际文件,不把代际号写死。
  7. 运行状态过滤:跳过当前运行中的子 agent,避免与内存态冲突,并将跳过的记录记入日志。

安装与启用

安装插件后需重启 dsh web 生效。

从 GitHub 安装

dsh plugin --profile web add github:Enosensu/dsh-fork-relink

本地开发

直接指向工作目录:

dsh plugin --profile web add "link:<本目录>"

卸载

dsh plugin --profile web remove dsh-fork-relink

使用与限制

安装插件后,fork 出的新对话将自动拥有子 agent 副本,但需注意以下特性:

  1. 冷会话唤醒:副本是冷会话,首次发消息需要通过冷恢复唤醒。插件日志会记录每个副本的可寻址性。
  2. ID 使用:必须使用 list_agents 返回的副本 ID 发送消息。原 ID 仍归旧分支,对新父会话会返回 UNAUTHORIZED: belongs to another parent session。
  3. 队列消息:继承的排队消息不再由本插件呈现。0.3.0 版本已删除补位条,官方队列条会直接显示继承项。
  4. 零依赖:插件完全零依赖、零文件改写,所有操作均通过官方 API 完成。

适用场景

该插件适合需要在新 fork 对话中继续与原子 agent 进行交互的开发者。它解决了官方 fork 后子 agent 面板为空、记录无法在新对话中可见的问题,但要求用户在 fork 后使用副本 ID 进行操作。

插件目录 | GitHub 仓库

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

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

小夜