前言¶
在 DeepSeek Harness(DSH)里跑 agent 会话时,事件流往往比人眼跟读快得多。Chat 告诉你说了什么,Trajectory 告诉你发生了什么,但日常更关心的其实是另一件事:能不能先去做别的事、什么时候必须回来。
常见做法是再加一层摘要,但一份三十分钟运行的摘要,往往只是又多了一件要读的东西。dsh-session-observer 是 DSH 上的第三个会话视图(客户端插件),定位不是摘要器,而是「通告器」:会话健康时尽量安静,只在需要人做决定时开口。默认完全基于规则、在本地从事件流计算,不调模型、不消耗 token。
这是什么¶
- 名称:dsh-session-observer(npm 包名与仓库同名)
- 维护者:Anilams
- 分类:客户端(web)
- 仓库:github.com/Anilams/dsh-session-observer
- 社区目录:skillhub.cn 插件页
插件用 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 |
连续失败达到该次数后忽略间隔 |
典型用法与观察方式¶
- 用上述命令为
webprofile 安装插件并重启dsh web。 - 打开长时会话,切到 Observer 标签;健康时应看到简短「运行中」与时长、密度条带。
- 需要审批或破坏性操作待决时,关注
waiting/dangerous;长时间无实质进展时关注stuck/erroring。 - 若需要 turn 级细节,在脊上点选 turn,右侧数字与左侧叙述同步。
- 仅当确实需要边界注解时,再在配置中把
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 组成三种互补视角。