dsh-steer:会话头状态徽标与运行中不打断指导

前言

在 DeepSeek Harness(DSH)里跑长任务时,常见两类体验问题:界面长时间没有明显变化时,很难区分「还在等响应」和「已经卡住」;发现 Agent 方向偏了,往往只能等整轮结束,或在主对话框发一条新消息——后者通常会被当成新任务,相当于打断当前工作。官方 queue 与 steer 通道本质上也是「以用户身份发消息」,与主输入框能力重叠。

下面介绍社区插件 dsh-steer(维护者 lyonleeeee,分类:客户端):在会话头提供实时状态徽标,并提供「运行中指导」——在当前回合内、小步边界被读进上下文,不打断、不重开会话。

这是什么

dsh-steer 是 DeepSeek Harness 插件,当前版本 0.1.0(MIT 许可证)。它做两件事:

  1. 实时状态徽标:会话头右上角显示当前阶段(分析、思考、输出、工具调用等),点开可看步号、模型与诊断信息。
  2. 运行中指导:通过「指导」浮层补一句、纠一句,支持文字与图片附件,并记录本插件发出的插话是否已被 Agent 读取。

插件不依赖 @deepseek-ai 包,仅使用宿主公开的 ctx.agents、ctx.webServer,以及可选的 attachments、sessionController;路由只接受 loopback,无遥测与对外网络请求。

状态徽标

徽标按发生顺序显示单一阶段,例如:分析中 → 思考中 · 本步 N 字 → 输出中 · 本步 N 字 → 运行 <工具> → 读取工具结果,收尾回到「工作中」。工具阶段可带命令摘要,如「运行 bash · Run route probes」。

设计上有两处取舍:字数按 步 统计,每个 turn/step 边界重新计数,避免整段会话累计成一个无意义的大数;模型名不在徽标上展示,模型、provider、上下文窗口与步号(如 T4·S3)放在点开的详情面板。

耗时由客户端本地时钟根据 host 时间戳计算,空闲时不跑定时器,也不会每秒推 SSE。无新进展时显示「暂无新增量」;实时源断开时显示「状态实时源断开」,不保留过期阶段。请求失败只展示官方 failure.code;仅当 llm/retry 真正触发时才显示重试。

运行中指导

这是插件的主要能力。你输入一句话(可贴图或选文件),它会在 当前回合内、最近一次小步(一次推理或一次工具调用)结束的边界被读进上下文,任务继续执行——不打断、不重开、不等整轮结束。

实现上使用自定义消息 kind(source.kind 为 dsh-steer)配合 agent.steer()。若按普通用户消息投递,模型容易将其视为新任务,表现即为打断。

指导框支持附件,经宿主 attachments 服务落成持久引用;输入草稿按会话保存,刷新不丢。浮层列出本会话由本插件发出的插话,每条标注归宿:

  • ✓ 已读取,并标出轮步,如 T7·S3
  • · 已送达,尚未被读
  • ✗ 未读取(回合已结束或消息被丢弃)

可点击条目回填输入框;未读取的可一键重发,重发复用原附件(reuseAtts),无需重新上传。主对话框聊天记录不在此列表中。

界面语言在详情面板切换:自动、中文、English;选择写入 ~/.dsh/dsh-steer.lang,不使用 localStorage。

v0.1.0 刻意不提供官方 queue 与官方 steer 通道——二者与主对话框/官方队列栏能力重复;插件只保留上述不打断的投递路径。

安装与启用

通用 CLI(将 <profile> 换成你的 profile 名):

dsh plugin --profile <profile> add github:lyonleeeee/dsh-steer

桌面版 DeepSeek Harness.app 使用应用自带 CLI:

"/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh" \
  plugin --profile desktop add github:lyonleeeee/dsh-steer

装完后 重启应用(bundles 仅在启动时读取一次)。重启后会话头右上角会出现状态徽标和「指导」按钮。

数据通道与安全(开发者参考)

路由 用途
GET /dsh-steer/state?session=<id> SSE 实时快照,仅状态变化时推送
POST /dsh-steer/steer 运行中指导,请求体 {sessionId, text?, attachments?, reuseAtts?}
GET /dsh-steer/attachment?session=<id>&id=<attachmentId>[&raw=1] 读取指导附件
GET\|POST /dsh-steer/lang 界面语言:auto、zh、en
GET /dsh-steer/ping 健康检查

请求体限制:纯文字 3 KB,带附件 48 MB(在宿主 imageLimits 之上再封顶)。出错时返回稳定错误码(如 no-live-agent 409、payload too large 413 等),客户端按语言映射提示,不直接暴露原始码串给用户。

仓库内测试:npm test,38 个用例,运行于 node --test,零额外测试依赖。运行环境要求 Node ^22.19.0 || >=24.0.0(见 package.json engines)。

适用场景与注意

适合:需要长时间盯 Agent 进度、希望在工具链执行中途纠偏而不打断会话的 DSH 用户;需要插话带截图、并追踪「是否已被读到」的场景。

注意:

  • 插件以当前 dsh 进程权限 运行;安装前请阅读 GitHub 源码 与 LICENSE,自行判断是否满足安全要求。
  • 社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系;星标与版本以仓库与目录页为准(README 对应 v0.1.0)。
  • 宿主若不支持 attachments API,附件相关能力会返回 501;无 live agent 时 steer 返回 409。

结尾

dsh-steer 把「此刻在干什么」和「中途加一句不打断」拆成会话头徽标与指导浮层两条线,并用 agent.steer() 与自定义 kind 避免把纠偏当成新任务。若要安装或看截图说明,可访问目录页 lyonleeeee/dsh-steer 与仓库 github.com/lyonleeeee/dsh-steer。

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

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

Xiaoye