Workload 指标接入

September 5, 2026 · View on GitHub

RuntimeObservability.workload 是进程内 facade。它只接受固定 kind,不允许把 session、run、tool 或 MCP 名称放进标签。

const runtime = ctx.get('dshRuntimeObservability')

const endRun = runtime.workload.begin('agent_run')
try {
  await runAgent()
} finally {
  endRun() // 幂等,可安全放 finally
}

runtime.workload.setQueue('tool', pending.length, oldestAgeSeconds)
runtime.workload.setRecoveryBacklog('ledger', pendingLedgers)

固定集合:

  • active/queue:agent_run | llm | tool | mcp
  • recovery:session | task | ledger

setQueue(kind, 0) 会强制把 oldest age 清零;负数、NaN、Infinity 和未知 kind 会抛出 RangeError,防止静默污染时间序列。facade 在 metrics disabled 时仍可调用,便于宿主代码保持单一路径。

宿主集成状态

已确认 continuable subagent 提供稳定的公开 setup/event seam,因此 subagent 生命周期已由插件自动接入。通用 Agent Run、LLM、Tool、MCP queue/recovery facade 仍未接入宿主执行边界。

因此本阶段提交 facade 和 OTLP 指标注册,但不修改 profile 内依赖、不 monkey-patch 构建产物。取得宿主源码后,应分别在以下真实边界接入,并在宿主仓库独立提交:

  1. Agent Run、LLM、Tool、MCP 执行入口 begin(kind),在 finally 调用返回的 end。
  2. 调度器 enqueue/dequeue/cancel 后调用 setQueue,oldest age 来自队首入队时间。
  3. session/task/ledger 恢复器扫描或状态变更后调用 setRecoveryBacklog

验收要求:并发用例中 active 精确回零;取消/异常路径不泄漏;空队列 age=0;标签只出现上述固定集合。