Skip to content

About

DSH 侧会话插件:/side 持续性侧会话(Codex 风格)与 /btw 一次性侧问(Claude 风格)——在临时 fork 中运行、不写入主会话历史;Web UI 右侧链面板内嵌对话,主会话保持不变

Topics

Resources

Stars

14 stars

Watchers

0 watching

Forks

Repository files navigation

dsh-sidechain

DSH 侧会话插件。它通过 fork 当前会话创建隔离子会话,让用户在不中断主线程的情况下发起一次性问题或持续对话。

当前 Sidechain 版本为 0.2.1-rc.5,支持 DSH 0.2.1-rc.2 至 0.2.1-rc.5。Sidechain 的版本号始终与最新适配的目标 DSH 完全一致,包括预发布后缀;同一个插件包可以支持多个已验证的宿主版本,兼容范围由 engines.dsh 声明。

命令 用途
/btw <问题> 发起一次性侧问,适合快速确认信息
/side <问题> 创建可持续追问的侧会话
/side list 列出当前会话的直接子代理

侧会话继承主会话已经完成的回合作为参考上下文,但拥有独立的消息记录和执行过程。侧会话的提示、思考、工具调用和回答不会进入主会话的模型上下文。

功能

  • /btw 在后台完成单轮问答,主会话可以继续使用。
  • /side 创建可续聊线程,可直接在侧栏中发送后续消息。
  • 右侧面板显示用户消息、上下文、思考、工具调用与回答。
  • 运行中的会话实时更新,并在列表中显示活动摘要。
  • 子会话历史持久化,重启 DSH 后仍可查看。
  • 面板支持拖拽调宽、展开、手动刷新和 Ctrl/Cmd+Shift+E 快捷开关。

安装与卸载

依赖 DSH 提供的 @deepseek-ai/dsh-subagent、@deepseek-ai/dsh-subagent-fork-in-process、@deepseek-ai/dsh-session-projection 和 @deepseek-ai/dsh-commands。默认 Web profile 已包含这些依赖。

从插件市场安装

在 DSH 插件 → 实验性插件 → 更多 中启用自定义插件市场,打开发现 → 添加索引源,填入:

https://omdsh-dev.github.io/dsh-sidechain/index.json

选择 Sidechain 侧会话,确认当前 DSH 在插件的兼容范围内后点击安装。索引中的 Git 来源固定到完整提交 SHA,发布包包含编译产物,无需为 Sidechain 授权安装构建脚本。

市场索引固定到已发布提交;若尚未列出与 DSH 配套的版本,可按下面的本地源码方式安装。切换版本时保留 DSH home 中的会话和 sidechain-children.json。

从命令行安装

使用包含 RC.5 适配的插件版本,并用 0.2.1-rc.2 至 0.2.1-rc.5 的 CLI 安装或更新:

dsh plugin --profile web add github:omdsh-dev/dsh-sidechain

安装后重启 DSH Web,并强制刷新浏览器。测试本地源码时,先运行 pnpm install 和 pnpm build,再安装本仓库的绝对路径:

dsh plugin --profile web add /absolute/path/to/dsh-sidechain

Git 发布包自带 lib/,不执行 prepare。开发源码时需显式运行 pnpm build。

插件会向 Web profile 添加以下配置:

- insert:
    - id: dsh-sidechain
      name: '@dsh-external/dsh-sidechain'

安装或更新插件代码后,重启 dsh web 并刷新页面。

卸载

dsh plugin --profile web remove @dsh-external/dsh-sidechain

该命令会同时移除 profile 依赖和插件配置层。完成后重启 dsh web 并刷新页面。

配置

配置项 默认值 说明
providerName fork 继承父历史、支持本地 continuable 会话的 fork provider
persona 内置侧会话 persona 追加到首条边界消息的行为约束;空字符串表示不追加;子会话继承父方 system persona
readOnlyTools 未设置 可选工具 allow-list,例如 ['read', 'grep', 'glob'];隐藏不允许的继承工具,并在执行入口拒绝白名单外的工具

DSH 自 RC.2 起已删除 subagent 启动参数中的 persona 和 toolFilter。插件保留上述配置入口:persona 作为子会话自己的用户消息持久化,不覆盖父方 system prompt;readOnlyTools 在侧会话创建、恢复及插件重新加载时应用当前配置,不依赖模型遵守提示词。旧子会话 descriptor 中的历史限制仍由 DSH 恢复,并与当前工具限制取交集。工具名称无效时创建失败;空列表与未设置均表示不增加限制。

宿主在子会话本地注册的工具可能仍显示在 schema 中,例如 subagent,但白名单外的调用会被执行守卫拒绝。PTC 的 run_code 传输入口保留,其调用的具体工具仍受白名单约束。

侧会话身份继续保存在 DSH_HOME/sidechain-children.json,用于恢复工具限制和父收件箱隔离。请保留此文件;文件损坏或不可写会明确报错,避免静默丢失保护。

配置示例:

- insert:
    - id: dsh-sidechain
      name: '@dsh-external/dsh-sidechain'
      config:
        providerName: fork
        readOnlyTools:
          - read
          - grep
          - glob

使用

一次性侧问:

/btw 这个目录下哪个文件最大?

命令立即返回,侧链面板自动打开并显示执行过程和答案。/btw 在插件中作为一次性问题展示,侧链面板不提供追问输入框。

持续侧会话:

/side 分析一下当前插件的事件流

侧链面板会打开新线程。在线程底部输入消息并按 Enter,即可继续对话。

查看子代理列表:

/side list

/side 和 /btw 都必须提供问题。

侧链面板

会话标题栏中的侧链按钮用于打开右侧面板。面板列表包含当前会话的直接子代理,并显示其类型、标题、运行状态和活动摘要。

选择一个线程后,面板显示该子会话的完整时间线:

  • 用户消息与模型回答
  • 上下文注入与模型思考
  • 工具调用、结果和错误
  • Markdown、代码块、表格与公式

/side 线程带输入框,可持续对话;/btw 线程不可继续发送消息。面板只读取子会话日志,不会切换或激活主会话中的当前对话。

会话隔离

fork 只继承父会话已经完成的回合。继承内容仅作为参考,boundary 之后的消息才是侧会话的当前任务。

每个侧会话拥有独立日志。侧会话的消息、工具活动和回答留在子会话中,不会作为用户消息或子代理通知进入主会话。主会话只保留创建侧会话的命令结果。

默认 persona 允许非破坏性探索,不会主动修改文件、请求提权、创建子代理或向父会话报告。用户在侧会话中明确要求修改时,实际权限仍由 DSH 的 sandbox 和工具配置决定。

限制

  • fork 不包含父会话正在进行的回合。
  • DSH 0.2.1-rc.2 至 0.2.1-rc.5 将新建本地子会话统一存为 continuable。本插件从父会话已有命令结果投影出 /btw 身份,重启后仍保持侧栏只读;这不是宿主层的不可续聊权限,DSH 原生子代理入口或其他调用方仍可能续聊。需要正常追问时使用 /side。
  • /side list 和侧栏列出当前会话的全部直接子代理,不限于本插件创建的线程。
  • /side 必须带首个问题;当前 subagent API 不支持创建后等待首次输入的空线程。
  • 多版本兼容指同一个插件包可运行于各个受支持宿主,不代表可以用旧版 DSH 打开新版宿主写入的会话数据。共享 DSH home 的宿主降级未验证;兼容范围外的后续版本需另行验证。

开发

pnpm install
pnpm check

pnpm check 依次执行类型检查、测试和构建。开发依赖固定到 DSH 0.2.1-rc.5,可直接从 npm registry 安装;DSH peer dependencies 与宿主兼容范围保持一致。

插件版本跟随最新适配的目标 DSH,不独立递增。宿主兼容范围以 package.json 的 engines.dsh 为准,当前为 >=0.2.1-rc.2 <=0.2.1-rc.5;验证新增版本后再调整范围。构建时校验包版本与目标 DSH 开发依赖一致,并校验插件清单的版本、兼容范围分别与包清单一致。市场索引从已提交的包清单派生版本和兼容范围。

发布插件市场

GitHub Pages 从 master 的 docs/ 发布索引。完成适配后运行 pnpm build,将源码与生成的 lib/ 一起提交;随后运行 pnpm build:market,再提交生成的 docs/index.json、docs/icon.svg 并推送 master。Pages 随推送自动更新,无需额外的 Actions 工作流。

pnpm build:market 先重新构建并检查 lib/ 与已提交产物一致,再由 scripts/build-market.mjs 从当前 Git 提交读取包清单、语言文件和图标;版本、兼容范围、发布时间和安装 SHA 均派生自同一提交。生成文件不手工编辑;每次发布代码时重新生成,确保索引固定到该次发布的源码。

索引仅列当前版本,不扫描历史标签,避免旧独立版本号 0.6.x 被市场误判为推荐更新。旧 Git 标签保留,npm 发布不是安装前提。

浏览器适配使用 ctx.remote、Session Controller 的 projectionsBySession 和 assistantStream 开场快照。sidechainModes 投影只从已有 command/done 记录推导命令身份,不根据可变标题猜测类型,也不另存一份身份记录。首次启动使用 delivery: 'caller',持久化的父收件箱过滤继续保护冷启动后的续聊。

本次验证记录与四个 issue 的处理结论见 DSH 0.2.1 适配记录。

About

DSH 侧会话插件:/side 持续性侧会话(Codex 风格)与 /btw 一次性侧问(Claude 风格)——在临时 fork 中运行、不写入主会话历史;Web UI 右侧链面板内嵌对话,主会话保持不变

Topics

Resources

Stars

14 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages