前言¶
在 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)¶
- 打开 Settings → Plugins,从本地路径、
.tgz或已发布包安装。 - 启用
dsh-sidecar。 - 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()。
典型用法¶
- 在主会话中照常与智能体协作,勿为「解释进度」而在主 transcript 里堆叠追问。
- 打开右侧 Sidecar / 旁问 Tab(或会话头部入口),先查看 上下文卡片,确认路由、token 与截断提示是否符合预期。
- 在侧栏输入问题,例如当前执行阶段、某次工具失败原因、建议的下一步;Enter 发送,Shift+Enter 换行。
- 答案流式出现后,可用复制、停止或重试;需要时可 清空 侧栏历史(两步确认),主会话内容不受影响。
- 关闭或刷新页面后,同一
sessionId的侧栏历史仍可从localStorage恢复;进行中的作业在宿主侧一段时间内仍可poll续传。
旁问不执行工具:不能代你跑命令或按需读文件,答案完全基于当时只读快照与侧栏模型调用。
适用场景与注意¶
适合:长任务调试时想弄清上下文与失败原因,又不想污染主对话;需要对照 todos、goal、token 与路由做决策,但不愿打断主智能体循环。
安全与隐私(README 明确说明):
- Sidecar 读取的与主智能体已发给模型服务商的上下文相同;快照会 发往同一已配置的模型服务商 以生成侧栏回答。若会话上下文不得到达该服务商,请勿在此会话使用旁问。
- 无额外遥测或云端端点;RPC 留在 DSH 宿主,
ctx.llm负责模型调用。 - 安装前建议阅读 GitHub 源码 与 MIT 许可证;插件以当前 DSH 进程权限运行,与主会话共享宿主环境。
DSH 生态奉行「一切皆插件」;SkillHub 为社区目录站点,与 DeepSeek / 幻方无官方从属关系,本文介绍对象以仓库 README 与包元数据为准。
结尾¶
dsh-sidecar 把「理解当前会话」从主 transcript 里拆到只读侧栏:主对话保持原样,旁路问答走独立模型流。需要安装包、配置字段与架构图时,以仓库为准。