feat: 添加自动化任务(automation_jobs)功能模块

This commit is contained in:
qzl
2026-03-24 12:38:11 +08:00
parent f4b7eb7e09
commit 23359c2d01
43 changed files with 4266 additions and 1139 deletions
@@ -0,0 +1,50 @@
# Bug: 前端未渲染 events 接口事件
## 日期
- 2026-03-24
## 现象
- 用户反馈:改动后前端无法获取/渲染 `/api/v1/agent/runs/{threadId}/events` 的事件。
- 页面表现为消息流无事件增量或工具执行状态未更新。
## 本次背景
- 本次清理了前端死链路:
- `ToolRegistry`
- `RouteNavigationTool`
- `AiDecisionEngine`
- 当前主链路仍为 AG-UI SSE`AgUiService -> AgUiEvent -> ChatBloc -> HomeChatItemRenderer`
## 影响范围
- Chat 事件流渲染(运行状态、工具调用状态、文本完成事件)
- 可能影响 Home 聊天视图实时反馈
## 初步判断
- 已清理的死链路不在当前主流程中,理论上不应直接导致 SSE 事件无法渲染。
- 更可能的问题点:
1. `runId` 绑定过滤导致事件被丢弃(`shouldDispatch` 为 false
2. `onEvent` 回调异常导致流提前停止
3. SSE `data` 结构变化,`AgUiEvent.fromJson` 解析失败
## 关键代码位置
- `apps/lib/features/chat/data/services/ag_ui_service.dart`
- `apps/lib/features/chat/data/models/ag_ui_event.dart`
- `apps/lib/features/chat/presentation/bloc/chat_bloc.dart`
- `apps/lib/features/home/ui/widgets/home_chat_item_renderer.dart`
## 待执行排查
1.`_streamEventsFromApi` 增加临时诊断日志:`eventType``eventRunId``expectedRunId``shouldDispatch`
2. 捕获并输出 `onEvent` 抛错栈,确认是否由 UI/Bloc 处理异常中断
3. 抓取真实 SSE 帧,核对 `runId/threadId/type/data` 与解析模型一致性
4. 复测 `RUN_STARTED -> TOOL_* -> TEXT_MESSAGE_END -> RUN_FINISHED/RUN_ERROR` 完整链路
## 当前状态
- 状态:待定位
- 优先级:高
+29
View File
@@ -171,6 +171,35 @@ data: <json>
- `tool_call_args` 仅表示输入参数快照。
- `result` 仅表示执行输出事实,不重复 `tool_call_args` 已包含的输入参数。
#### 3.3.1 tool 名称展示规范(前端本地化)
SSE 协议中的工具名字段保持后端原样,不做服务端翻译:
- `TOOL_CALL_START/ARGS/END.toolCallName`
- `TOOL_CALL_RESULT.tool_name`
前端展示层统一通过工具名本地化映射进行中文渲染,要求兼容两类命名风格:
- dot 风格:`memory.write``calendar.read`
- snake 风格:`memory_write``calendar_read`
当前规范映射(canonical -> 中文)如下:
- `calendar.read` -> `读取日程`
- `calendar.write` -> `写入日程`
- `calendar.share` -> `共享日程`
- `user.lookup` -> `查找联系人`
- `memory.write` -> `写入记忆`
- `memory.forget` -> `清理记忆`
兼容策略:
1. 优先按 alias 归一化(例如 `memory_write` -> `memory.write`
2. 命中 canonical 映射后展示中文
3. 未命中时回退显示原始工具名(保证向后兼容)
该规范只约束展示,不改变 wire event 字段定义与取值。
### 3.4 文本完成事件
#### `TEXT_MESSAGE_END`