dsh-session-observer:用一句判决回答「我现在要不要插手」

前言

在 DeepSeek Harness(DSH)里跑 agent 会话时,事件流往往比人眼跟读快得多。Chat 告诉你说了什么,Trajectory 告诉你发生了什么,但日常更关心的其实是另一件事:能不能先去做别的事、什么时候必须回来。

常见做法是再加一层摘要,但一份三十分钟运行的摘要,往往只是又多了一件要读的东西。dsh-session-observer 是 DSH 上的第三个会话视图(客户端插件),定位不是摘要器,而是「通告器」:会话健康时尽量安静,只在需要人做决定时开口。默认完全基于规则、在本地从事件流计算,不调模型、不消耗 token。

这是什么

插件用 README 里的一句话概括核心价值:A conversation view for DeepSeek Harness that answers exactly one question: Do I need to step in right now? 中文描述(package.json)为:把事件流压成一句判决——我现在需要插手吗;零模型依赖,默认不花钱。

当前 package.json 中版本为 0.5.1,要求 Node >=20。

核心功能

五种判决,而不是大屏仪表盘

界面顶部给出五种判决之一,而不是堆满指标:

判决 含义(README 条件摘要)
running 正常推进,或有工具仍在执行
stuck 多层规则一致认为停滞
erroring 某工具耗时超过其自身历史 p99
waiting 等待审批或回合交还后空闲超过 5s
dangerous 当前有破坏性操作正等待你的决定

健康时界面极简:README 示例为「运行中」加时长,以及表示活动密度的条带;停滞时提示例如「6 分钟没有新进展」。UI 文案默认中文,字符串集中在 client.js 顶部,可自行改翻译对象。

默认规则模式:本地计算,¥0

  • 首屏数字默认全部由事件流在本地算出,无模型调用、无 token、无额外延迟。
  • 产品原则之一是 Miss rather than mislead:宁可漏报也不要误报;README 提到在一份 2,357 事件的实日志回放中,0 次假「stuck」。
  • 判定分多层:区分沉默类型(工具在飞、模型未出新步、等你审批、环境超时等);停滞阈值与会话自身节奏绑定(例如 stuck_after = max(p99_advance × 1.5, 180 s));在飞工具自带「心跳」证据。
  • 冷启动:advance 间隔不足 20 次时只观察、不报警。

可选 sidecar 模型(smart 模式)

配置里 mode 默认为 "free"(仅规则)。"smart" 时在语义边界调用旁路模型做短注解(约 README 报价表:rules + sidecar 约 ¥3 / 8h)。首次打开视图时会询问是否愿意为 sidecar 付费(README 截断处可见)。

布局与交互(单屏两栏)

  • 左:决策脊(decision spine);右:统计面板;点击某一 turn 的标签,两侧联动。
  • 按 turn 分节,而非整墙事件;分叉画成两条路,选中填充、放弃删除线。
  • 长时间空闲折叠显示,避免 overnight 暂停占满图表。
  • 颜色跟随宿主 --dsw-* 语义 token,暗色模式无需第二套样式表。

安装与启用

环境要求(README):DeepSeek Harness(在 0.1.7-rc.1 上测试过)、Node ≥ 20。

官方安装命令如下(会安装依赖并把包写入 dsh.profile.bundles):

dsh plugin --profile web add github:Anilams/dsh-session-observer

安装后重启 dsh web,在 Chat、Trajectory 旁会出现第三个标签页。

若手动改 package.json 安装,还必须执行:

dsh plugin --profile <name> install

否则宿主会静默跳过整个 bundle;--dump-config 里可能出现 skipping profile bundle "dsh-session-observer": cannot resolve ... 之类提示。

卸载:

dsh plugin --profile web remove dsh-session-observer

配置要点

默认配置随 cordis.patch.yml 下发,键在 apply(ctx, config) 中生效。README 中的字段(仅罗列资料已出现的项):

键 默认值 含义
enabled true 总开关
mode "free" free 仅规则;smart 另调 sidecar 模型
intervalMs 25000 sidecar 调用最小间隔
minNewEvents 3 窗口内新事件少于该值则跳过 sidecar
maxTokens 400 须显式设置
reasoningEffort "off" 须显式设置;省略时 DeepSeek 可能回落到 high,成本上升
timeoutMs 15000 单次 sidecar 端到端超时
provider / model 空 空则跟随会话记录的 request/header
maxInflight 1 并发闸
urgentFailStreak 2 连续失败达到该次数后忽略间隔

典型用法与观察方式

  1. 用上述命令为 web profile 安装插件并重启 dsh web。
  2. 打开长时会话,切到 Observer 标签;健康时应看到简短「运行中」与时长、密度条带。
  3. 需要审批或破坏性操作待决时,关注 waiting / dangerous;长时间无实质进展时关注 stuck / erroring。
  4. 若需要 turn 级细节,在脊上点选 turn,右侧数字与左侧叙述同步。
  5. 仅当确实需要边界注解时,再在配置中把 mode 改为 smart,并理解 sidecar 会产生模型费用。

开发侧:dev/harness/ 可在不启动完整 DSH 的情况下渲染真实组件;静态原型在 design/。

适用场景与注意

适合谁

  • 长时间挂 DSH agent、不想一直盯着 Chat/Trajectory 滚动的人。
  • 希望用单一判决判断「要不要现在回来」、且默认不想为观察视图付 token 费的团队。

注意

  • 插件以当前 DSH 进程的权限运行;安装前请自行阅读仓库源码与许可证(README 未在截断段列出许可证全称时,以仓库为准)。
  • DSH 生态理念是「一切皆插件」;SkillHub 为社区目录站点,与 DeepSeek / 幻方无官方从属关系,本文不将其描述为官方应用商店。
  • waiting 被设计为不向用户误报——等待往往是你自己造成的操作;dangerous 刻意收窄到「破坏性操作正在等你拍板」,避免执行中一闪而过的误报。

结尾

dsh-session-observer 补上了 DSH 会话 UI 里「要不要插手」这一层:默认规则、零模型、安静为主、异常才说话。若你在用 Harness 跑长任务,值得一并装上,与 Chat、Trajectory 组成三种互补视角。

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

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

Xiaoye