dsh-sidecar:在 DSH 主会话旁做只读旁问

前言

在 DeepSeek Harness(DSH)里跑智能体时,主会话的上下文往往是最贵、也最敏感的状态。若在主线程里随手追问「刚才为什么失败」「接下来该怎么做」,每条跟进都会往 transcript 里追加用户消息和助手轮次,还可能触发压缩边界,改写你原本打算保留的对话形态。

dsh-sidecar(旁问)针对的是这个具体矛盾:需要理解当前会话里模型可见的内容,又不想让主会话被写入、被转向或被中断。下面介绍它的定位、能力、安装方式与使用时的注意点。

这是什么

dsh-sidecar 是维护者 EliasKaslan 发布的 DSH 插件,在 SkillHub 目录 中归类为「模型推理」。一句话定位:只读上下文助手——针对当前 DeepSeek Harness 会话提问,不向主会话写入任何消息。

插件在 DSH Web 客户端右侧增加一个侧边栏面板,读取与主智能体相同的模型可见上下文(系统提示、对话、工具调用与结果、todos、goal、token 用量等),通过一次独立的辅助模型调用在侧栏流式回答。主会话不会被 append,不会被侧栏 steering。

只读保证在实现上是机械约束,而非仅靠提示词约定:宿主服务只调用 ctx.sessionQuery.readSurface() / observeSession();不调用 session.append() 或其它会话变异;侧栏答案走独立的 ctx.llm 流与独立 message list;浏览器侧历史保存在 localStorage,按会话键隔离。

环境与依赖

使用前需满足 README 与 package.json 中写明的版本要求:

  • DeepSeek Harness 0.2.2-rc.1(desktop 或 web profile)
  • Node.js 22.15+
  • 一条宿主可调用的模型路由:当前会话最后一次路由、智能体默认模型,或在插件行的 provider / model 上显式指定

许可证为 MIT(0.1.0)。

核心功能

界面与入口

  • 右侧边栏 Tab,以及会话头部的引导入口,均可打开旁问面板。
  • 实时上下文卡片:展示 agent 驻留状态、模型路由、上下文窗口、消息构成、系统提示大小、工具结果、todos、goal、token 用量及截断提示等。
  • 使用 DSH 的 --dsw-alias-* 主题令牌,支持明暗主题、全屏与窄布局。

旁问交互

  • 只读侧栏问答:答案以 Markdown 流式返回,支持代码块、表格、链接与 KaTeX;通过小型轮询协议拉取增量。
  • 停止、重试、复制、清空:支持两步确认清空;已停止的回答可重试;复制为纯文本。
  • 按会话保存历史:刷新页面或宿主重启后仍可恢复;作业在宿主保留约 30 分钟,重载页面后可继续 poll。
  • 无障碍:区域/日志地标、标签、焦点环、Esc 停止、Enter 发送、Shift+Enter 换行,并支持减少动效偏好。

宿主 API(只读快照与问答)

宿主侧为 Cordis TypertRemoteService,命名空间 sidecar,对外四个方法:

方法 作用
snapshot(sessionId) 面向 UI 的上下文摘要,不调用模型
ask({ sessionId, question, history }) 创建作业并立即返回 { jobId }
poll(jobId, cursor) 返回自 cursor 起的文本增量、状态、错误与用量
cancel(jobId) 中止模型流

快照规则要点:系统提示取折叠 surface 中最后一条非空 system/message;对话包含 user/assistant(含工具调用名与参数)、tool/result、developer/message;推理块 deliberately 丢弃,不在侧栏回显私有 chain-of-thought;在字符预算内优先保留最新消息,必要时省略旧消息并给出计数。

安装与启用

包声明了 dsh.bundle.patch,可由 DSH 插件管理器作为 bundle 安装。README 未提供 dsh plugin add github:... 一类 CLI 一行命令,应按下列官方路径操作。

方式 A:插件管理器(bundle)

  1. 打开 Settings → Plugins,从本地路径、.tgz 或已发布包安装。
  2. 启用 dsh-sidecar。
  3. bundle 会自动插入 sidecar 行,无需手改 Cordis 再配一行。

方式 B:手动 profile bundle(开发联调)

适合把仓库放在本机任意目录后,用 link: 挂到 desktop profile。desktop profile 由 Electron 应用管理,独立 dsh plugin CLI 不能操作该 profile,需用应用内 Add plugin 或下列编辑方式。

# 1) 将仓库放在任意路径,例如 D:\work\dsh-sidecar
cd $env:USERPROFILE\.dsh\profiles\desktop
# 2) 编辑 package.json:
#    dependencies."dsh-sidecar" = "link:D:/work/dsh-sidecar"
#    dsh.profile.bundles       += "dsh-sidecar"
pnpm install
# 3) 重启 DSH,或 touch ~/.dsh/cordis.patch.yml 触发 HMR 重组合

说明:cordis.patch.yml 由 bundle 自带并插入 sidecar 行,不要重复手写第二行。仅裸加 cordis.patch.yml 行虽能加载插件,但 Plugins 页只列出 profile bundle;改插件 manifest 的 package.json 需重启宿主,改 bundle 选择可由 HMR 或下次重启生效。

配置

配置项均可选,写在 Cordis 里 sidecar 行的 config: 块中。

字段 默认值 含义
provider — 显式 provider id,须与 model 成对
model — 显式 model id
maxTokens 2048 单次侧栏回答输出上限
maxContextChars 96000 只读快照字符预算(非 token)
maxHistoryMessages 8 转发给模型的此前侧栏问答条数
reasoningEffort — 可选 effort 覆盖;默认不继承主循环的 max effort

路由解析顺序:行上显式 provider + model → 当前会话最后一次 request/context 路由 → agentDefaultModel.currentSelection()。

典型用法

  1. 在主会话中照常与智能体协作,勿为「解释进度」而在主 transcript 里堆叠追问。
  2. 打开右侧 Sidecar / 旁问 Tab(或会话头部入口),先查看 上下文卡片,确认路由、token 与截断提示是否符合预期。
  3. 在侧栏输入问题,例如当前执行阶段、某次工具失败原因、建议的下一步;Enter 发送,Shift+Enter 换行。
  4. 答案流式出现后,可用复制、停止或重试;需要时可 清空 侧栏历史(两步确认),主会话内容不受影响。
  5. 关闭或刷新页面后,同一 sessionId 的侧栏历史仍可从 localStorage 恢复;进行中的作业在宿主侧一段时间内仍可 poll 续传。

旁问不执行工具:不能代你跑命令或按需读文件,答案完全基于当时只读快照与侧栏模型调用。

适用场景与注意

适合:长任务调试时想弄清上下文与失败原因,又不想污染主对话;需要对照 todos、goal、token 与路由做决策,但不愿打断主智能体循环。

安全与隐私(README 明确说明):

  • Sidecar 读取的与主智能体已发给模型服务商的上下文相同;快照会 发往同一已配置的模型服务商 以生成侧栏回答。若会话上下文不得到达该服务商,请勿在此会话使用旁问。
  • 无额外遥测或云端端点;RPC 留在 DSH 宿主,ctx.llm 负责模型调用。
  • 安装前建议阅读 GitHub 源码 与 MIT 许可证;插件以当前 DSH 进程权限运行,与主会话共享宿主环境。

DSH 生态奉行「一切皆插件」;SkillHub 为社区目录站点,与 DeepSeek / 幻方无官方从属关系,本文介绍对象以仓库 README 与包元数据为准。

结尾

dsh-sidecar 把「理解当前会话」从主 transcript 里拆到只读侧栏:主对话保持原样,旁路问答走独立模型流。需要安装包、配置字段与架构图时,以仓库为准。

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

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

小夜