# API 文档 —— 活动模块(L1 清单 / L2 活动详情 / L3 实例详情) > 本文是活动模块前端(运营中心 · 活动区,2026-08-25 重构模版)与服务端之间的接口约定, > 给后端编写接口、前端取数用。鉴权 / 票据 / 错误体 / 端归属通则:`docs/API文档-鉴权与人员.md` §0,本文不重复。 > 需求出处:`docs/活动模块重构需求-2026-08-25.md`;启动参数口径:`ACT-WORK-05-一键启动入参说明.md`(极简四参)。 > 契约落地后唯一真相在 `packages/contracts/src/api/*.ts`(zod schema,前后端共用);两者不一致时以契约为准并回来改本文。 ## 0. 通则(本文特有) | 项 | 值 | |---|---| | 前缀 | `/api/gov/activities/*`;**全部 `access: 'ops'`** —— 活动区落在运营中心,与工作流/任务看板同端 | | 时间 | 一律 ISO 8601 UTC 字符串(`2026-08-27T02:25:11.000Z`);**展示格式化是前端的事**(`YYYY-MM-DD HH:mm:ss` 本地时区) | | 人员 | 凡出人,都是 `{ "id": "", "name": "柴浩" }` 两段 —— 展示用 name,筛选/提交用 id;人员候选名单用既有 `GET /api/gov/staff`,本文不另做 | | 广播 | 写路由(启动 / 禁用 / 激活 / 终止)成功后广播 `{kind:'system', id:'gov'}` —— 前端按既有套路失效 `['gov',*]` 重取 | | 实例状态 | 五态,英文码:`pending`(待执行)/ `running`(进行中)/ `completed`(已完成)/ `rejected`(驳回)/ `failed`(失败);**没有第六态** —— 手动终止归入 `failed`,用 `reason.kind='terminated'` 区分「自己跑挂」(见 §6) | | 禁用语义 | **任何时刻都可禁用**(2026-08-27 用户重定,废除「有实例不能禁用」):禁用只拦「新启动」—— 已完成的实例是历史留痕,进行中的实例**继续跑完不受影响**;激活即恢复启动能力 | 状态码怎么读(通则之外本文特有的): | 状态 | code | 何时 | |---|---|---| | 400 | `validation-failed` | 入参不合 schema(`detail` 是 zod issues);启动参数缺必填 / 类型不对(`detail` 指明是哪个 `key`) | | 404 | `not-found` | 活动 / 实例不存在;实例不属于这个活动 | | 412 | `precondition-failed` | 启动:活动已禁用;终止:实例不在 `running` | ## 1. L1 活动清单 ### `GET /api/gov/activities?status=active|disabled` —— access: `ops` L1 两个页签(激活中 / 已禁用)各取一份;不带 `status` = 全量。量小,**不分页**。 ```json { "activities": [ { "id": "quote-intake", "name": "询价接收与结构化", "biz": "报价业务", "status": "active", "version": "1.3.0", "owner": { "id": "8f3c…", "name": "柴浩" }, "llm": "K3 · quote-intake", "instanceCount": 12, "createdAt": "2026-08-12T01:00:00.000Z", "ico": "inbox", "hue": "blue" } ] } ``` - `ico` / `hue`:展示元数据(语义图标名 / 业务色相 `blue|teal|amber|violet`),创建活动时可配;**缺省时前端兜底**(`inbox` / `blue`),后端可以暂时不存。 - `llm`:这个活动绑定的专属 agent 的人读标签;要链到 LLM 实例时再加 `llmId`,本期没有。 ## 2. L2 活动定义 ### `GET /api/gov/activities/:activityId` —— access: `ops` ```json { "id": "quote-intake", "name": "询价接收与结构化", "biz": "报价业务", "status": "active", "version": "1.3.0", "owner": { "id": "8f3c…", "name": "柴浩" }, "llm": "K3 · quote-intake", "createdAt": "2026-08-12T01:00:00.000Z", "ico": "inbox", "hue": "blue", "desc": "活动定义只读 —— 输入与输出在创建时定死,演进走版本迭代;验收在工作台,这里只看状态。", "view": { "url": "/api/gov/activities/quote-intake/view" } } ``` - `desc`:定义说明,创建时填,只读。 - `view`:沙箱要渲染的活动视图;**为 `null` 时前端藏起整个沙箱区块**(不再摆空 iframe)。 ### `GET /api/gov/activities/:activityId/view` —— access: `ops`(支持 `?ticket=`) → `content-type: text/html`,服务器托管的活动视图 HTML,前端 `