鲸察(dsh-jingcha):DSH 运行时监察与按调用强停

前言

在 DSH 里跑智能体时,界面往往只显示「运行中」,很难区分是任务本身慢、进程挂起、卡在审批,还是已经进入错误风暴。想停掉某一个跑飞的工具调用,又常常只能停整轮,其它正常进行中的调用会一起被终止。DeepSeek Harness 采用「一切皆插件」的扩展方式;社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系。下面介绍维护者 QTATQ233 发布的 鲸察(dsh-jingcha):在运行时只读观察工具流水线,给出判定与理由,支持按 callId 强制停止,并在 Web 控制台右下角提供红绿灯状态挂件,默认不向模型注册工具,占用 0 model token。

这是什么

鲸察 是分类为「工作流」的 DSH 插件,仓库地址 github.com/QTATQ233/dsh-jingcha。当前 package 版本为 0.5.1,许可证 MIT,运行时 零 npm 依赖,要求 Node ≥ 18。

它解决三类问题:工具调用长时间无反馈时缺少可操作的诊断;需要精确终止单个调用而非整轮;事后复盘缺少结构化现场。监察数据写入本机目录(默认 %DSH_HOME%\data\dsh-jingcha),不联网、不动态执行第三方代码。

核心功能

监察与判定

插件在 tools/pre-execute、tools/execute、tools/result 三层做只读观察,记录耗时、结果字节与错误分类。内置判定包括:慢、挂起、卡住、静默(有 agent 在跑却无输出)、等待审批、错误风暴、内存泄漏预警、插件自身报错。0.5.0 起判定规则可编排:内置 8 条可通过 disabledRules 按 id 停用,第三方可用 monitor.registerRule({ id, evaluate }) 注册。

默认阈值(可在配置中修改)如下:

判定 默认条件
慢 单次调用超过 30s(slowCallMs)
挂起 在途超过 2min(hangCallMs)
卡住 在途超过 5min(stuckCallMs)且期间没有产出
没有输出 有 agent 在跑但 90s 内没有流式帧 / 会话事件 / 工具结果(silenceMs)
等待审批 pre-execute 卡在审批超过 20s(approvalWarnMs)
错误风暴 连续 3 次失败(errorStormCount)
内存泄漏预警 RSS 连续 5 个心跳递增且增幅超过 10%

状态优先级为:stalled > erroring > degraded > busy / ok,避免次要告警淹没「卡住」类问题。

按调用强制停止

在 pre-execute 阶段为每次调用登记属于鲸察的 AbortController 并替换 exec.signal,与 DSH 上游 callerSignal 融合,上游取消语义不变,插件也可主动掐断。嵌套子调用(父 id 加 :ptc: 序号)同样可登记。面板中每条在途调用带强停按钮;还支持「停掉卡住的」「停止所有轮次」(带二次确认)。强停成功会写入 kill.forensics 事件,便于在 events.jsonl 中复盘。

挂件与本地 API

Web 端注入可拖动「胶囊」:按调用时长分级变色(绿 / 黄 / 红),悬停可看全文,快捷键 Ctrl+Shift+J。详情面板含判定、在途调用、最近告警、设置与时间线等可折叠区块。四个 HTTP 端点(status / kill / stop / settings)仅监听回环地址,Host 白名单,拒绝跨站来源;变更类只接受 POST JSON。可选 apiToken 要求请求头 x-jingcha-token。

落盘与零 token

  • status.json:原子替换的快照。
  • events.jsonl:追加式事件流,超过 8MB 自动轮转(约 16MB 上限)。
  • 默认 toolEnabled: false,模型上下文看不到插件工具;若打开,README 说明每请求约多 176 token 工具说明,每次查询约 0.5k token 报告。

安装与启用

官方通道安装后需 重启 dsh:

dsh plugin --profile web add github:QTATQ233/dsh-jingcha

仓库还提供 tools/install.ps1(junction + 修改 profile manifest,改前自动备份、可整体回滚)。安装、卸载或分享数据前可参考仓库 docs/SHARING.md。

不启动 dsh 也可做仓库自检:

node test/verify.mjs          # 179 项
node test/verify-client.mjs   # 111 项(挂件,DOM 桩)

配置要点

配置集中在 cordis.patch.yml(项旁有中文注释)。常用键:

键 默认 说明
dataDir %DSH_HOME%\data\dsh-jingcha 数据目录
displayName 鲸察 控制台前缀与报告标题
toolEnabled false 是否向模型注册查询工具
slowCallMs / hangCallMs / stuckCallMs 30s / 2min / 5min 慢 / 挂起 / 卡住
autoKillAfterMs 0(关) 自动强停;同时要求没有产出
previewArgs / redactPreviews true / true 参数摘要与敏感片段打码
apiToken 空 多用户机器建议设置

典型用法

  1. 安装并重启 dsh 后,打开 Web 控制台,右下角应出现状态胶囊;有在途工具调用时会显示类似「pwsh 1m33s」的摘要。
  2. 若判定为「等待审批」,到界面完成确认,避免误判为卡死。
  3. 若判定为「卡住」或单次调用异常偏长,打开面板查看在途列表,对目标 callId 点强停,或批量「停掉卡住的」。
  4. 需要复盘时读取 dataDir 下的 events.jsonl;分享前注意其中可能含工具参数摘要(默认截断并脱敏,仍建议人工过目,或设 previewArgs: false)。

挂件支持 ?session= 会话维度过滤;0.5.0 起面板含约 5 分钟迷你时间线。

适用场景与注意

适合:本地或单机 Web profile 下长时间跑工具链、需要可视化「慢 / 挂 / 卡 / 无输出 / 审批 / 错误风暴」并精确止损的开发者。

注意:

  • 插件以 当前 dsh 进程权限 运行;安装前应自行审阅源码与 MIT 许可证,勿在未检查的情况下信任第三方插件。
  • 回环 API 对本机其它进程/账号仍可能可达,共享机器请设 apiToken。
  • 忽略 exec.signal 的同进程死循环无法靠信号硬杀;嵌套场景若只有父调用在跑,插件会拒绝误杀父调用。
  • 监控路径包在 safe() 中,插件异常只记入 pluginErrors,不改写工具结果。

架构、状态机、接口 Schema 见仓库 docs/ARCHITECTURE.md 与 SECURITY.md。

结尾

鲸察把 DSH 运行时的工具调用、事件循环与错误模式做成可读的判定与可操作的强停,默认 0 token 观测,适合作为工作流侧的「运行时体检」插件。目录页:skillhub.cn/plugins/QTATQ233/dsh-jingcha;源码与文档:github.com/QTATQ233/dsh-jingcha。

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

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

小夜