---
title: 运行时过程事件
created: 2026-05-07
updated: 2026-05-07
type: concept
tags: [runtime, agent, tool, skill, websocket]
sources: [packages/backend/src/modules/netaclaw/runtime/process_events.ts, packages/backend/src/modules/netaclaw/runtime/attempt.ts, packages/backend/src/modules/netaclaw/service/skill_executor.ts, packages/backend/src/modules/netaclaw/tools/builtin/execute_skill.ts, packages/frontend/src/modules/agent/components/tool-process-timeline.vue, packages/frontend/src/modules/agent/utils/tool-process-display.ts]
---

# 运行时过程事件

运行时过程事件是 2026-05-07 新增的长耗时工具/Skill 进度表达机制。它把“工具正在做什么”从最终 `tool_result` 中拆出来，统一为可流式展示、可采样存档的 `RuntimeProcessEvent`，服务 [[skill-runtime]]、[[tool-system]]、[[vehicle-damage-skill]] 和前端对话页。

## 事件模型

`runtime/process_events.ts` 定义：

- `operationId`：一次工具、Skill、子 Agent 或 runtime 操作的稳定 ID。
- `parentOperationId`：父子操作关系。
- `targetType`：`tool`、`skill`、`subagent`、`task`、`runtime`。
- `source`：事件来源，当前包括 `skill`、`tool`、`subagent`、`runtime`。
- `stage`：阶段名，例如抽帧、检测、复核。
- `status`：`queued`、`started`、`running`、`completed`、`failed`、`cancelled`、`skipped`。
- `level`：`debug`、`info`、`warning`、`error`。
- `current/total/percent`：进度信息。
- `payload`：经过脱敏和截断的结构化补充信息。

`sanitizeProcessPayload()` 会过滤 key 中包含 api key、token、password、secret、authorization、credential 的字段，避免过程事件泄漏密钥。

## 缓冲与落盘

`ProcessEventBuffer` 对重复进度做节流，默认 400ms 聚合一次。终态事件会先 flush 同 operation 的待发送事件，再立即发出终态。

`appendRuntimeProcessLog()` 会把事件追加到：

```text
<dataDir>/netaclaw-process-events/<sessionId>/<operationId>.jsonl
```

同时返回 `runtime_process_log` 引用，便于 session metadata 保存抽样结果和完整日志位置。

## 工具与 Skill 接入

当前重点接入点：

- `execute_skill.ts`：把 compute-entry skill 的 process events 桥接为工具执行过程。
- `SkillExecutorService`：执行子进程时处理 stdout JSON 协议和过程事件。
- `runtime/attempt.ts`：在工具调用生命周期内携带 operationId、process log ref 和采样事件。
- `vehicle-damage-inspection`：在抽帧、检测、grounding、review 等长耗时阶段发出进度。

这使 compute-entry Skill 不再只能“运行结束后返回一个大 JSON”，而可以边运行边给用户可解释进度。

## 前端展示

前端新增：

- `components/tool-process-timeline.vue`：过程时间线组件。
- `utils/tool-process-display.ts`：事件文案、阶段和状态展示工具。
- `StreamingStatusCard.vue`、`message-item.vue`、`chat.ts`：消费流式/历史 metadata 中的 process events。

对话页可以从实时 WebSocket 事件展示进度，也可以从 session tree 节点 metadata 恢复历史过程回放。

## 相关页面

- [[tool-system]]
- [[skill-runtime]]
- [[vehicle-damage-skill]]
- [[websocket-gateway]]
- [[frontend-architecture]]
