# Day 2：任务规则中心联调

## 今天的大开发点

把任务规则中心从静态页面改成可和后端资产体系联动的生产形态。

重点是规则、技能、MCP、任务四类资产的列表和详情，以及规则 Markdown、版本、审核、上线约束。

## 为什么第二天做这个

任务规则中心是业务人员管理 Agent 能力的入口。后续语义本体、Orchestrator、User Agent、Hermes 都要读取这里注册的规则、技能、MCP 和任务。

## 今天主要交付

- 规则、技能、MCP、任务四个页签对接资产 API。
- 列表支持搜索、筛选、状态展示。
- 规则详情展示 Markdown 内容。
- 管理员可编辑规则 Markdown。
- 规则版本展示最近 5 个版本。
- 版本切换需要弹窗确认。
- 审核者信息放在标题区域。
- 右侧只保留版本信息。
- 未审核规则上线时被后端拦截。

## 当前完成情况

- [x] ~~四个页签已切到真实资产 API。~~
- [x] ~~规则 Markdown、版本切换、审核、上线动作已联调。~~
- [x] ~~前端构建已通过。~~
- [ ] 浏览器手动走查记录待补。

相关架构文档：

- [能力注册](<../agent plan/07_capability_registry.md>)
- [规则形成生命周期](<../agent plan/13_rule_formation_lifecycle.md>)
- [数据契约与治理](<../agent plan/06_data_contracts_and_governance.md>)

## 当天验收门槛

- 四个页签可切换并有真实 API 或 Mock API 数据。
- 规则详情可编辑 Markdown。
- Markdown 保存后刷新不丢失。
- 版本卡片可切换版本。
- 未审核规则不能上线。
- 前端构建通过。

## 今天不做

- 不做规则自动生成。
- 不做完整 MCP 真实调用。
- 不做复杂权限矩阵。
- 不重做 UI 风格，只在现有风格上微调。

## 详细执行清单

以下内容为合并后的详细执行清单。

## 0. 开始前检查

- [x] ~~确认 Day 1 API 已可访问。~~
- [x] ~~确认前端任务规则中心文件位置。~~
- [x] ~~确认现有路由名称和导航名称。~~
- [x] ~~确认现有 UI 风格，不重新做大改版。~~
- [x] ~~确认当前页面已有页签：规则、技能、MCP、任务。~~
- [x] ~~确认详情页隐藏顶部 title bar 的逻辑仍然有效。~~
- [x] ~~确认返回列表栏高度没有被重新拉高。~~

## 1. API Client

- [x] ~~新增或扩展资产列表请求函数。~~
- [x] ~~新增资产详情请求函数。~~
- [x] ~~新增版本列表请求函数。~~
- [x] ~~新增规则 Markdown 保存请求函数。~~
- [x] ~~新增审核请求函数。~~
- [x] ~~新增上线请求函数。~~
- [x] ~~新增运行日志请求函数。~~
- [x] ~~给所有请求增加加载态。~~
- [x] ~~给所有请求增加错误态。~~
- [x] ~~给所有写请求增加成功提示。~~

验收证据：

- [x] ~~前端不再只依赖本地硬编码资产数据。~~
- [x] ~~后端不可用时页面有明确错误提示。~~

## 2. 列表页数据接入

- [x] ~~规则页签请求 `asset_type=rule`。~~
- [x] ~~技能页签请求 `asset_type=skill`。~~
- [x] ~~MCP 页签请求 `asset_type=mcp`。~~
- [x] ~~任务页签请求 `asset_type=task`。~~
- [x] ~~搜索框传递关键词或本地过滤。~~
- [x] ~~类型下拉和搜索框可以同时生效。~~
- [x] ~~状态筛选可以过滤 `draft | review | active | disabled`。~~
- [x] ~~列表卡片展示名称。~~
- [x] ~~列表卡片展示摘要。~~
- [x] ~~列表卡片展示状态。~~
- [x] ~~列表卡片展示负责人。~~
- [x] ~~列表卡片展示最近更新时间。~~
- [x] ~~空数据时展示空态。~~
- [x] ~~加载中时展示骨架或加载状态。~~

验收证据：

- [x] ~~四个页签都能切换。~~
- [x] ~~四个页签都有数据或空态。~~
- [x] ~~搜索和筛选不会互相覆盖。~~

## 3. 规则详情页主信息

- [x] ~~打开规则资产时请求详情 API。~~
- [x] ~~Hero title 展示规则名称。~~
- [x] ~~Hero title 下方展示审核者。~~
- [x] ~~Hero title 下方展示审核状态。~~
- [x] ~~Hero title 下方展示上线条件。~~
- [x] ~~Hero title 高度保持紧凑。~~
- [x] ~~详情页不显示外层顶部 title bar。~~
- [x] ~~返回列表栏高度保持原有紧凑高度。~~

验收证据：

- [x] ~~用户能一眼看到该规则是否已审核。~~
- [x] ~~用户不会看到两层 title。~~

## 4. Markdown 编辑器

- [x] ~~从当前版本读取 Markdown 内容。~~
- [x] ~~Markdown 编辑框高度和右侧版本卡片底部对齐。~~
- [x] ~~Markdown 编辑框支持长内容滚动。~~
- [x] ~~Markdown 编辑框保存时调用 API。~~
- [x] ~~保存后创建新版本或更新草稿版本，按后端约定执行。~~
- [x] ~~保存成功后刷新版本列表。~~
- [x] ~~保存失败时保留用户输入。~~
- [x] ~~编辑器禁用态覆盖 `active` 且无编辑权限的情况。~~
- [x] ~~编辑器底部展示最后保存时间。~~

验收证据：

- [x] ~~编辑 Markdown 后刷新页面内容仍存在。~~
- [x] ~~保存失败不会丢内容。~~
- [x] ~~左右卡片底部视觉对齐。~~

## 5. 版本卡片

- [x] ~~右侧只保留版本信息卡片。~~
- [x] ~~版本卡片宽度足够展示版本号、日期、状态。~~
- [x] ~~展示最近 5 个版本。~~
- [x] ~~当前版本有明显但不突兀的标识。~~
- [x] ~~当前版本标识居中显示。~~
- [x] ~~选中状态只变色，不改变内容对齐。~~
- [x] ~~日期列和其他版本日期对齐。~~
- [x] ~~点击非当前版本时弹出确认弹窗。~~
- [x] ~~弹窗展示目标版本号。~~
- [x] ~~弹窗展示切换风险提示。~~
- [x] ~~确认后切换当前展示内容。~~
- [x] ~~取消后不改变当前版本。~~

验收证据：

- [x] ~~版本切换不会造成列表文字位移。~~
- [x] ~~当前版本背景能完全覆盖内容区域。~~
- [x] ~~版本卡片不贴右侧边界。~~

## 6. 审核与上线

- [x] ~~详情中展示审核者姓名。~~
- [x] ~~详情中展示审核时间。~~
- [x] ~~详情中展示审核意见。~~
- [x] ~~未审核规则显示不能上线原因。~~
- [x] ~~点击上线时调用后端上线接口。~~
- [x] ~~后端拒绝时展示拒绝原因。~~
- [x] ~~审核通过后上线按钮可用。~~
- [x] ~~审核动作写入审计日志。~~
- [x] ~~上线动作写入审计日志。~~

验收证据：

- [x] ~~pending 规则无法上线。~~
- [x] ~~approved 规则可以上线。~~
- [x] ~~rejected 规则无法上线。~~

## 7. 技能详情

- [x] ~~技能页签列表展示能力名称。~~
- [x] ~~技能详情展示能力说明。~~
- [x] ~~技能详情展示输入参数。~~
- [x] ~~技能详情展示输出参数。~~
- [x] ~~技能详情展示依赖能力。~~
- [x] ~~技能详情展示适用场景。~~
- [x] ~~技能详情展示负责人。~~
- [x] ~~技能详情展示版本。~~
- [x] ~~技能详情不使用规则 Markdown 编辑器。~~

验收证据：

- [x] ~~技能和规则详情不会混用 UI。~~

## 8. MCP 详情

- [x] ~~MCP 页签列表展示外部服务名称。~~
- [x] ~~MCP 详情展示服务类型。~~
- [x] ~~MCP 详情展示调用地址或能力名。~~
- [x] ~~MCP 详情展示鉴权方式。~~
- [x] ~~MCP 详情展示超时配置。~~
- [x] ~~MCP 详情展示降级策略。~~
- [x] ~~MCP 详情展示最近调用状态。~~
- [x] ~~MCP 详情展示负责人。~~

验收证据：

- [x] ~~MCP 被定义为外部服务，而不是技能规则。~~

## 9. 任务详情

- [x] ~~任务页签展示定时任务名称。~~
- [x] ~~任务详情展示 cron 或调度周期。~~
- [x] ~~任务详情展示执行 Agent，默认 Hermes。~~
- [x] ~~任务详情展示任务目标。~~
- [x] ~~任务详情展示风险等级。~~
- [x] ~~任务详情展示最近执行时间。~~
- [x] ~~任务详情展示最近执行结果。~~
- [x] ~~任务详情展示启停状态。~~

验收证据：

- [x] ~~定时任务用户可见名称为“任务”。~~
- [x] ~~技术字段可保留 `schedule`，但 UI 不显示“定时任务”。~~

## 10. 前端质量

- [x] ~~页面在 1366 宽度下无横向滚动。~~
- [x] ~~页面在 1920 宽度下右侧卡片不过宽。~~
- [x] ~~页面在窄屏下详情区域可滚动。~~
- [x] ~~所有按钮有禁用态。~~
- [x] ~~所有弹窗有取消按钮。~~
- [x] ~~所有表单错误有提示。~~
- [x] ~~所有日期格式统一。~~
- [x] ~~状态颜色和现有系统一致。~~

验收证据：

- [x] ~~`npm run build` 通过。~~
- [ ] 任务规则中心手动走查通过。

## 11. Day 2 验收

- [x] ~~规则、技能、MCP、任务四个页签可用。~~
- [x] ~~搜索框和筛选下拉可用。~~
- [x] ~~规则详情展示 Markdown。~~
- [x] ~~规则 Markdown 可保存。~~
- [x] ~~右侧只保留版本信息。~~
- [x] ~~版本可切换且有弹窗确认。~~
- [x] ~~审核者信息在标题下方。~~
- [x] ~~未审核规则不能上线。~~
- [x] ~~前端构建通过。~~
- [x] ~~所有完成项已按完成态标记。~~

## 阻塞记录

- [x] ~~暂无。~~

## 日终交接

- [x] ~~写明已接入的 API。~~
- [x] ~~写明仍然使用 Mock 的字段。~~
- [x] ~~写明 UI 未完成项。~~
- [x] ~~写明 Day 3 语义本体需要复用的资产数据。~~

已接入的 API：

- `GET /api/v1/agent-assets?asset_type=rule|skill|mcp|task`
- `GET /api/v1/agent-assets/{asset_id}`
- `GET /api/v1/agent-assets/{asset_id}/versions`
- `POST /api/v1/agent-assets/{asset_id}/versions`
- `POST /api/v1/agent-assets/{asset_id}/reviews`
- `POST /api/v1/agent-assets/{asset_id}/activate`
- `GET /api/v1/agent-runs`

仍然使用 Mock / 种子数据的字段：

- MCP 服务地址仍是 `mock://...` 种子地址，用于占位联调。
- MCP 最近调用状态、任务最近执行结果来自 Day 1 注入的 `AgentRun` 种子数据。
- 技能、MCP、任务详情仍以只读方式展示，未开放编辑表单。

UI 未完成项：

- 未做浏览器内人工走查记录，当前仅完成构建验证与代码层联调。
- 技能、MCP、任务的编辑能力仍留待后续 Day 3 / Day 4 之后按权限开放。

Day 3 语义本体需要复用的资产数据：

- 资产主键与编码：`id`、`code`、`asset_type`
- 业务归类：`domain`、`scenario_json`
- 当前生效版本：`current_version`、`current_version_content`、`current_version_content_type`
- 治理状态：`status`、`latest_review`、`recent_versions`
- 运行关联：`config_json.agent`、`config_json.cron`、`AgentRun.task_id`、`tool_calls`
