Merge remote-tracking branch 'upstream/main' into main (保留常驻通知与顺延迁移版本)
This commit is contained in:
@@ -18,10 +18,12 @@ description: 影策后端核心持久化表与状态边界
|
||||
| `schema_migrations` | 保存已成功应用的结构版本、名称、校验和与时间 | 已应用版本的校验和发生变化时拒绝启动;数据库版本高于当前二进制支持版本时拒绝旧程序连接 |
|
||||
| `cloud_agent_executions` | 保存 Agent 每轮的持久化执行状态、修订号和运行状态 | `(id, user_id)` 归属受服务端校验;状态通过 revision CAS 更新;`state_json` 包含技能快照、工具调用、审批、活动子任务和事件,不保存浏览器密钥 |
|
||||
| `agent_profiles` | 保存用户、项目和画布层的 Agent 常驻偏好、哈希和独立 revision | `(user_id, scope, project_id, canvas_id)` 唯一;归属由 service 校验,写入使用 revision CAS;正文不能授权新能力 |
|
||||
| `agent_lessons` | 用户私有的 Agent 记忆。Agent 写入待审,用户自己批准后才会注入该用户的会话 | 按 `author_user_id` 隔离;写入机械脱敏;`steps_json` 存路线;`hits` 是主动查阅、`injected` 是自动注入;管理员可按用户查看和删除,不能代批 |
|
||||
| `agent_memory_settings` | 用户私有的记忆压缩周期、文本模型和最近一次压缩任务状态 | 主键 `user_id`;压缩结果只在 `compact_task_id` 匹配时应用到该用户已批准记忆 |
|
||||
|
||||
容器内命令 `migrate-schema up` 应用缺失迁移,`migrate-schema status` 输出当前和期望版本,`migrate-schema verify` 只检查兼容性。`CANVAS_AUTO_MIGRATE=true` 仅用于开发和旧部署兼容;受管生产部署设置为 `false`,并由 Compose 的一次性 `migrate` 服务先完成迁移。后续迁移必须新增版本,不得修改已经发布迁移的实现或校验和。
|
||||
|
||||
当前结构版本为 15。版本 2 为 `schema_migrations.applied_at` 增加 `idx_schema_migrations_applied_at` 索引;版本 3 `asset_taxonomy_candidate_identity` 为资产候选增加规范化名称和来源,收敛资产分类,并为待确认候选建立项目内部分唯一索引;版本 4 `resource_upload_key` 为资源上传幂等补充 `resources.upload_key` 列和用户维度唯一索引;版本 5 `payment_topup` 创建积分充值、支付通知和对账所需结构;版本 6 `resource_playback_variant` 增加资源播放副本状态;版本 7 `asset_library_folders` 增加用户素材自定义分类及 `assets.folder_id`;版本 8 `logical_model_active_code` 将前台模型 code 的唯一约束限定为未归档记录;版本 9 `channel_presentation` 为渠道添加 `public_alias`(默认空字符串)与 `sort_order`(默认 0),为渠道模型添加 `sort_order`(默认 0),不重写既有凭据、价格或能力配置;版本 10 `creation_runtime` 创建创作运行与提交表,并为任务增加可空且唯一的 `creation_submission_id`,旧任务无需伪造提交标识即可继续使用;版本 11 `cloud_agent_runtime` 创建 `cloud_agent_executions`;版本 12 `agent_token_charge_limit` 为账单增加 Agent Token 收费上限;版本 13 `cloud_agent_canvas_mutation` 持久化 Agent 画布变更;版本 14 `cloud_agent_recovery_control` 增加运行恢复控制字段和旧运行回填;版本 15 `agent_profiles` 创建常驻偏好表。已发布版本的实现和校验和不得修改。
|
||||
当前结构版本为 18。版本 2 为 `schema_migrations.applied_at` 增加 `idx_schema_migrations_applied_at` 索引;版本 3 `asset_taxonomy_candidate_identity` 为资产候选增加规范化名称和来源,收敛资产分类,并为待确认候选建立项目内部分唯一索引;版本 4 `resource_upload_key` 为资源上传幂等补充 `resources.upload_key` 列和用户维度唯一索引;版本 5 `payment_topup` 创建积分充值、支付通知和对账所需结构;版本 6 `resource_playback_variant` 增加资源播放副本状态;版本 7 `asset_library_folders` 增加用户素材自定义分类及 `assets.folder_id`;版本 8 `logical_model_active_code` 将前台模型 code 的唯一约束限定为未归档记录;版本 9 `channel_presentation` 为渠道添加 `public_alias`(默认空字符串)与 `sort_order`(默认 0),为渠道模型添加 `sort_order`(默认 0),不重写既有凭据、价格或能力配置;版本 10 `creation_runtime` 创建创作运行与提交表,并为任务增加可空且唯一的 `creation_submission_id`,旧任务无需伪造提交标识即可继续使用;版本 11 `cloud_agent_runtime` 创建 `cloud_agent_executions`;版本 12 `agent_token_charge_limit` 为账单增加 Agent Token 收费上限;版本 13 `cloud_agent_canvas_mutation` 持久化 Agent 画布变更;版本 14 `cloud_agent_recovery_control` 增加运行恢复控制字段和旧运行回填;版本 15 `agent_profiles` 创建常驻偏好表;版本 16 `agent_lessons` 创建用户记忆表(含分类、路线 JSON、注入/查阅计数);版本 17 `agent_lessons_owner_index` 为 `(author_user_id, status)` 增加复合索引;版本 18 `agent_memory_settings` 创建按用户隔离的压缩周期与最近一次压缩任务状态。已发布版本的实现和校验和不得修改。
|
||||
|
||||
历史发布曾使用版本 6 `asset_library_folders`,之后合并引入了上述 6/7 顺序冲突。迁移器仅在该历史记录的名称和校验和均精确匹配时选择历史顺序:保留版本 6 的素材目录记录及时间,在版本 7 应用 `resource_playback_variant`,再继续版本 8。新数据库及已采用“6 播放副本、7 素材目录”的数据库保持原顺序;状态检查与启动校验采用同一套识别规则。未知名称、被改动的校验和或冲突的版本 7 记录仍会拒绝迁移,不通过删除、改名或伪造已应用记录绕过检查。
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ description: 从产品功能快速定位主要代码入口
|
||||
|
||||
## 前端页面
|
||||
|
||||
云端 Agent:`web/src/components/canvas/canvas-cloud-agent-panel.tsx` 协调对话、Skills 和审批,`canvas-cloud-agent-settings.tsx` 编辑长期偏好,`services/api/agent.ts` 适配运行快照与事件流;画布手工编辑与引用同步共用 `web/src/lib/canvas/canvas-node-prompt.ts`,已有媒体结果只更新 `composerContent` 草稿,不覆盖生成结果和已提交提示词。后端 `handler/agent.go` 负责 HTTP 合同,`app/cloud_agent.go` 负责权限、幂等、可信历史,`app/cloud_agent_profile.go` / `repository/agent_profile.go` 管理用户、项目、画布偏好及 revision CAS,`internal/prompts/agent-*-policy.md` 是随发布物编译、并在文档头声明 ID/版本的行为资源,`app/cloud_agent_policy.go` 编译本轮策略快照,`internal/canvas/capability/` 注册服务端节点能力和字段映射,`app/cloud_agent_canvas_state.go` 投影画布摘要和精读,`app/cloud_agent_runtime.go` 负责持久化模型循环,`app/cloud_agent_tools.go` 根据能力定义生成工具 schema,并从固定技能快照渐进读取 `SKILL.md` / reference,`app/cloud_agent_media.go` 负责收费媒体任务适配,`app/task_creation.go` 执行预算 admission,运行沿用任务 Worker。节点新增需要能力描述符和真实画布实现;新生成模式还需任务适配器,不由偏好或技能 md 授权。协议见 HTTP API 专题,未确认的真实登录态与上游联调见待测试清单。
|
||||
云端 Agent:`web/src/components/canvas/canvas-cloud-agent-panel.tsx` 协调对话、Skills 和审批,`canvas-cloud-agent-settings.tsx` 编辑长期偏好与个人记忆,`services/api/agent.ts` 适配运行快照与事件流;画布手工编辑与引用同步共用 `web/src/lib/canvas/canvas-node-prompt.ts`,已有媒体结果只更新 `composerContent` 草稿,不覆盖生成结果和已提交提示词。后端 `handler/agent.go` 负责 HTTP 合同,`app/cloud_agent.go` 负责权限、幂等、可信历史,`app/cloud_agent_profile.go` / `repository/agent_profile.go` 管理用户、项目、画布偏好及 revision CAS,`app/cloud_agent_lessons.go` / `app/cloud_agent_memory_compact.go` / `repository/agent_lesson.go` / `handler/agent_lesson.go` 管理用户私有记忆的写入脱敏、召回注入、用户自审批与压缩优化,`web/src/pages/settings/agent-memory-pane.tsx` 是用户批准/添加/导入导出/压缩入口,`web/src/pages/admin/components/agent-lessons-panel.tsx` 是管理员按用户查看入口,`internal/prompts/agent-*-policy.md` 是随发布物编译、并在文档头声明 ID/版本的行为资源,`app/cloud_agent_policy.go` 编译本轮策略快照,`internal/canvas/capability/` 注册服务端节点能力和字段映射,`app/cloud_agent_canvas_state.go` 投影画布摘要和精读,`app/cloud_agent_runtime.go` 负责持久化模型循环,`app/cloud_agent_tools.go` 根据能力定义生成工具 schema,并从固定技能快照渐进读取 `SKILL.md` / reference,`app/cloud_agent_media.go` 负责收费媒体任务适配,`app/task_creation.go` 执行预算 admission,运行沿用任务 Worker。节点新增需要能力描述符和真实画布实现;新生成模式还需任务适配器,不由偏好或技能 md 授权。协议见 HTTP API 专题,未确认的真实登录态与上游联调见待测试清单。
|
||||
|
||||
| 功能 | 页面入口 | 主要协作模块 |
|
||||
| --- | --- | --- |
|
||||
@@ -23,7 +23,7 @@ description: 从产品功能快速定位主要代码入口
|
||||
| 画布列表 | `web/src/pages/canvas/index.tsx` | `stores/canvas/use-canvas-store.ts` |
|
||||
| 画布编辑器 | `web/src/pages/canvas/project.tsx` | `pages/canvas/canvas-project-*`、`pages/canvas/use-canvas-*`、`components/canvas/`、`lib/canvas/`、`stores/canvas/` |
|
||||
| 公开分享 | `web/src/pages/canvas/shared.tsx` | `components/canvas/infinite-canvas.tsx`、`services/api/canvas-share.ts` |
|
||||
| 管理后台 | `web/src/pages/admin/`、`router.tsx` | `admin-context.tsx`、`users/`、`channels/`、`logs/`、`storyboard-prompts/`、`settings/` |
|
||||
| 管理后台 | `web/src/pages/admin/`、`router.tsx` | `admin-context.tsx`、`users/`、`channels/`、`logs/`、`storyboard-prompts/`、`settings/`、`components/agent-lessons-panel.tsx` |
|
||||
|
||||
## 画布核心
|
||||
|
||||
|
||||
@@ -17,11 +17,12 @@ description: 信封、错误码与 OpenAPI
|
||||
|
||||
## 云端 Agent
|
||||
|
||||
所有 `/agent` 路径都需要登录 Cookie。`GET /agent/capabilities` 返回当前版本(2)、权限模式、上下文范围、技能和工具清单;`maxHistoryPairs: 0`、`maxSteps: 0` 表示不设固定对话 / 模型调用轮数,历史仍受 `maxHistoryBytes: 64000` 约束。Agent 运行由服务端任务 Worker 驱动,浏览器断开不会停止运行。
|
||||
所有 `/agent` 路径都需要登录 Cookie。`GET /agent/capabilities` 返回当前版本(2)、权限模式、上下文范围、技能和工具清单;`maxHistoryPairs: 10` 表示跨轮对话只把最近 10 轮用户目标带进模型,`maxSteps: 0` 表示不设固定模型调用轮数,历史仍受 `maxHistoryBytes: 64000` 约束(超限先丢掉更早轮次,单轮仍超限才要求新建对话)。Agent 运行由服务端任务 Worker 驱动,浏览器断开不会停止运行。
|
||||
|
||||
- `POST /agent/runs` 创建一轮;`POST /agent/runs/:id/messages` 以上一轮为父节点创建新的不可变轮次,两者返回 `{ run }`,追加后必须使用新的 `run.id` 订阅。
|
||||
- `POST /agent/runs/:id/interjections` 向**正在运行**的轮次插入一句话,不新建轮次、不产生新的扣费身份。请求 `{ text, messageId }`,`text` 最多 4000 字符;同一 `messageId` 幂等。插话在下一次模型调用前注入;运行已结束返回 409,前端应回落为新一轮发送。步数耗尽或运行失败时发出 `user_interjection_dropped`,不会静默吞掉,也不会自动替用户开新一轮。
|
||||
- 请求字段:`canvasId`、`prompt`、受管 `logicalModelId` 或 `channelId` + `channelModelKey`、`permissionMode: "read_only" | "request_approval" | "auto"`、`reasoningMode: "off" | "auto" | "deep"`、`profileRevision`、`skillIds`、`contextScope: [] | ["canvas"]`、`budget: { maxCredits, maxGenerationTasks, maxVideoSeconds }`、`idempotencyKey`。不接受密钥、自定义 URL、客户端历史或未知字段。
|
||||
- 同用户同幂等键及相同请求返回同一运行;不同请求复用键返回 409。失败后重试同一提交应保留键。上一轮未完成时禁止追加;已完成、失败、取消或已拒绝的终态轮次作为不可变历史读取,即使其冻结的策略或节点能力版本早于当前服务,也可用于创建采用当前执行合同的新一轮,父运行不会被改写。旧版合同下仍活动或待审批的运行不得恢复执行。历史不设固定消息对数,JSON 最大 64000 字节,超限提示新建对话;历史结构损坏返回明确 409,不投影为通用 500。
|
||||
- 同用户同幂等键及相同请求返回同一运行;不同请求复用键返回 409。失败后重试同一提交应保留键。上一轮未完成时禁止追加;已完成、失败、取消或已拒绝的终态轮次作为不可变历史读取,即使其冻结的策略或节点能力版本早于当前服务,也可用于创建采用当前执行合同的新一轮,父运行不会被改写。旧版合同下仍活动或待审批的运行不得恢复执行。历史只保留最近 10 轮用户目标,JSON 最大 64000 字节,超限先丢掉更早轮次,单轮仍超限才提示新建对话;历史结构损坏返回明确 409,不投影为通用 500。
|
||||
- `POST /agent/runs/:id/approvals/:approvalId/decision` 的 `{ decision, reason? }` 可在批准图片生成时附带 `mediaSettings: { logicalModelId? | channelId? + channelModelKey?, size, quality }`。仅替换本次模型选择、画幅和质量,不允许修改目标、提示词、引用、模式或快照。服务端先无收费预检,失败保留待审批状态;成功原子更新审批调用、哈希及预览,提交任务时再次校验内容、资源归属、模型能力、价格与累计预算。相同参数重复批准幂等,不同参数复用已决定审批返回 409。
|
||||
- 审批拒绝是独立终态 `rejected`,表示本次操作未执行;不会生成 `tool_failed`、继续调用模型、写入画布、提交生成任务或扣费。拒绝后的草稿按既有草稿策略保留,用户可在下一轮说明修改方向。
|
||||
- 创建和追加消息可选择 `reasoningMode`,默认 `off`;`auto`/`deep` 为服务端行为策略与模型推理配置的选择,不等于允许暴露内部思维链。供应商能力由后端校验;声明式 Agent 渠道不支持时明确报错。推理可能增加耗时和费用。
|
||||
@@ -30,7 +31,10 @@ description: 信封、错误码与 OpenAPI
|
||||
- 系统行为策略与媒体默认策略是版本化、编译进后端发布物的资源,修改它们仍需发布后端,不是后台热更新;工具、校验、扣费和审批在代码侧强制执行。画布节点能力由服务端 registry 定义,工具 schema、创建、连线与画布摘要读取共同消费;新生成模式还必须接入媒体任务适配器,不能仅凭 md 或注册节点启用收费操作。
|
||||
- 已安装且属于当前用户的技能在创建时只保存版本、哈希和文本文件路径,不预存全部正文,也不按所有选中技能正文合计 128KB 拒绝创建。`skill_read_file` 按需读取 `SKILL.md` 或必要引用,支持字符偏移 `offset`(默认 0),每页最多 12000 字符,返回 `hasMore` / `nextOffset`。读取时重新验证用户权限、启用状态和版本;技能更新后拒绝混读,需新开一轮。技能是不可信数据,不能创造工具、改变权限或覆盖系统规则。
|
||||
- 模型上下文达到 96KB 或超过 24 条消息时,尝试移除较早工具结果中可重新读取的正文,保留工具调用/结果配对、用户原始要求、生成回执及最近完整工具轮次,并允许重新读取。此机制是确定性正文卸载,不是 LLM 语义摘要;不可压缩内容仍受 192KB 请求和 512KB 运行状态保护。技能读取事件只保存回执,不复制正文,正文页只进入模型对话。
|
||||
- 平台支持工具全集为 `agent_profile_read`、`canvas_list_node_types`、`canvas_get_state`、`skill_read_file`、`task_get`、`model_list`、`canvas_apply_ops`、`generate_media`;单轮实际工具仍按偏好快照、技能、权限、画布上下文和生成预算裁剪。画布写入工具要求本轮授权 `contextScope: ["canvas"]`。禁止 shell、任意网络请求和外部 MCP。
|
||||
- 平台支持工具全集为 `agent_profile_read`、`plan_update`、`ask_user`、`recall_lessons`、`remember_lesson`、`canvas_list_node_types`、`canvas_get_state`、`skill_read_file`、`task_get`、`model_list`、`canvas_apply_ops`、`generate_media`;单轮实际工具仍按偏好快照、技能、权限、画布上下文和生成预算裁剪。画布写入工具要求本轮授权 `contextScope: ["canvas"]`。禁止 shell、任意网络请求和外部 MCP。`remember_lesson` 在 `read_only` 下不可用。
|
||||
- `plan_update` 维护本轮结构化待办清单(整表替换,最多 20 项),跨轮继承未完成项,并在界面以 PlanBar 展示。权限为 `request_approval` 时,首次建立至少 2 项的清单会先进入审批;`auto` 直接写入清单。新一轮的第一次模型请求就会带上继承的清单。模型在没有工具调用且清单仍有未完成项时,服务端会催办并要求继续调用工具;这是软约束,不验证工作是否真的完成,也不会在没有清单时强行催建。
|
||||
- `ask_user` 给出一个问题与 2–6 个候选项后结束本轮,界面弹出选项面板;用户点选或输入后作为新一轮继续。运行中也可以用插话直接回答。
|
||||
- `recall_lessons` / `remember_lesson` 是当前用户的个人记忆:已批准条目在系统提示里只出现索引(标题 + 适用场景,最多 20 条,与当前目标可能相关的排在前面),完整做法由模型用 `recall_lessons(topic/keyword/category)` 取;Agent 写入先入待审,用户在 `GET/POST/PATCH/DELETE /agent/memories` 与 `POST /agent/memories/:id/decide` 自己批准、添加、编辑、删除,也可用 `GET /agent/memories/export`、`POST /agent/memories/import` 导出导入,并用 `GET/PATCH /agent/memories/settings`、`POST /agent/memories/compact` 选择文本模型后手动或按日/周/月压缩。管理员只在 `GET/DELETE /admin/agent-lessons` 按 `userId` / `keyword` / `status` 查看或删除,不能代批。写入会机械脱敏(拒绝链接、资源键、节点/任务 ID;@引用允许),只读模式不能写,本轮最多 3 条、每位用户最多 50 条待审、300 条已批准,一次导入最多 200 条。召回接口不返回作者。记忆只作参考,不能覆盖工具契约、权限、计费或审批。
|
||||
- `canvas_list_node_types` 从服务端节点能力 registry 返回当前可用类型;可更新节点的 `updateFields` 同时包含字段类型、最大字符数和字段语义。模型不能从前端渲染器、技能或偏好文档推断额外能力。
|
||||
- `canvas_apply_ops` 必须带 `snapshotHash`,每批最多 20 项;支持新增文本、Markdown、图片、视频、音频、分组与分镜表节点,以及 `connect_nodes` 引用连线。媒体占位节点的 `content` 是提示词,不是媒体 URL;只建节点不提交收费生成。`update_node` 的字段映射完全由能力 registry 决定:文本 / Markdown 可改标题和正文,图片 / 视频 / 音频可改标题和下一次生成使用的提示词草稿;媒体更新参数中的 `content` 写入 `metadata.composerContent`,不会覆盖媒体结果 `metadata.content`、已提交提示词 `metadata.prompt`、任务状态或引用状态。锁定节点、删除、任意元数据写入、自连接、重复边与不存在的端点仍被服务端拒绝。
|
||||
- `model_list` 复用生成面板的当前模型目录。生成前传 `mode` 和实际 `referenceNodeIds`(无参考传空数组),服务端读取当前用户画布内的就绪资源,按真实素材类型、数量及生成操作构建意图并调用统一能力匹配,不让多图生视频落入仅文生视频候选;返回 `intent` 供核对。空参数仍可浏览完整目录;空候选不降级到不匹配模型。每项的 `selection` 是 `logicalModelId` 或 `channelId` + `channelModelKey`,工具调用必须原样选择一种,不猜 ID 或混用;时长、画幅、音频、价格仍需核对返回配置,任务准入再次强校验。
|
||||
@@ -39,7 +43,7 @@ description: 信封、错误码与 OpenAPI
|
||||
- 媒体参数先进行无任务、无预留账单的准入校验,再在同一事务创建草稿节点、来源 / 资产连线及待审批检查点;`approval_requested` 和运行中的 `approval` 携带目录真实 `modelName`。用户批准后才在事务中绑定任务、创建预留账单并更新检查点;拒绝或取消保留未生成草稿,不提交媒体任务。`nodeId` 可续用同类型、未锁定、idle、无任务且无媒体结果的空白占位节点或当前运行草稿;跨轮 Agent 草稿还要求原运行属于同一用户和画布、已结束且清理完成。续用必须重新读取快照并重新审批,不能复用旧审批、覆盖已有任务或成品,不能通过循环新建节点绕过限制。画布读取的 `generationDraft` 提示未提交、原运行状态、是否仍在清理及仍需审批;写入仍重新强校验。已明确审批的规格不得被模型默认值静默替换。媒体终态回写原节点;已删除或已换任务的节点不自动复活,结果仍可从任务中心查看。
|
||||
- Agent 的 `snapshotHash` 忽略顶层 `viewport`、`updatedAt`。`canvas_get_state` 另返回 `mediaSnapshotHash`,供 `generate_media.snapshotHash` 使用,并额外忽略节点 `position`;创建生成草稿后的审批也固定该内容哈希。因此移动图片或草稿不会使生成审批失效,执行时保留最新坐标;节点内容、素材、锁定状态和连线变化仍需重新读取并审批。画布修改与撤销继续使用包含位置的 `snapshotHash`,数据库写入仍使用完整快照 CAS。客户端刷新保留本地视口。
|
||||
- `read_only` 只允许读取;`request_approval` 对写画布和媒体生成暂停为 `waiting_approval`;`auto` 可在预算内执行已授权画布操作,但图片 / 视频生成始终独立审批,不能绕过。`maxGenerationTasks` / `maxVideoSeconds` 为非负整数,0 表示该项不设业务上限,正数按本轮累计执行;不再固定 8 次模型调用、8 个生成任务或 120 秒视频。积分上限仍必填且大于 0,实际报价在任务创建与预留积分前校验,时长必须符合所选模型的实际能力。失败事件保留具体错误和已有任务的 `taskId`、`nodeId`、`status`;媒体结果的 `phase` 区分 `admission` 与 `completion`,`taskSubmitted` 表达是否已提交。模型应报告错误,不能自行删减提示词或自动重试收费生成。
|
||||
- 必须有当前用户已保存的画布。首轮摘要最多取前 80 个节点;`canvas_get_state` 可按 `offset` 每页读取 40 个节点、资产可引用状态及相关连线,按 `nodeIds` 精读最多 8 个节点(正文每字段最多 16000 字符),通过 `hasMore` / `nextOffset` 和字段 `Truncated` 判断是否完整。分镜表包含镜头、角色节点与资产绑定;摘要每页最多 20 行,精读每次 1 行,可用 `storyboardOffset` 翻页;单行叙事文本累计最多 24000 字符,角色 / 绑定各最多 16 项。上下文不含媒体 URL、任意元数据或未同步修改;节点名称不等于图像视觉识别。普通任务重试接口不能重试 Agent 任务。
|
||||
- 必须有当前用户已保存的画布。首轮摘要最多取前 80 个节点,并按约 60KB 预算截断;装不下的节点记入 `omittedNodes`,不因摘要过大整轮拒绝。`canvas_get_state` 可按 `offset` 每页读取 40 个节点、资产可引用状态及相关连线,按 `nodeIds` 精读最多 8 个节点(正文每字段最多 16000 字符),通过 `hasMore` / `nextOffset` 和字段 `Truncated` 判断是否完整。分镜表包含镜头、角色节点与资产绑定;摘要每页最多 20 行,精读每次 1 行,可用 `storyboardOffset` 翻页;单行叙事文本累计最多 24000 字符,角色 / 绑定各最多 16 项。上下文不含媒体 URL、任意元数据或未同步修改;节点名称不等于图像视觉识别。普通任务重试接口不能重试 Agent 任务。
|
||||
- `GET /agent/runs/:id` 返回运行信息;`POST /agent/runs/:id/cancel` 取消当前运行及活动子任务;`POST /agent/runs/:id/approvals/:approvalId/decision` 接受 `{"decision":"approve"|"reject","reason":"..."}`,审批决定幂等且服务端校验归属。
|
||||
- `GET /agent/runs/:id/events` 返回 `agent_event` 和首次 / 状态版本变化时的紧凑 `run_snapshot` SSE;无变化时只发送 heartbeat。事件 `Seq` 在运行内递增;支持 `?after=` / `Last-Event-ID`,游标不是运行 ID。`cleanupPending: true` 时即使运行已进入终态也会继续推送,直到后台收尾完成。前端应以快照恢复状态,代理只对这一精确路径关闭缓冲。
|
||||
- `generation_task_created` 携带 `canvasId`、`nodeId`、`taskId`、`title`、`mode`、`referenceNodeIds`。草稿、提交、画布工具写入,以及媒体成功 / 失败 / 取消的真实节点变更,均在画布写入与运行检查点的同一事务持久化 `canvas_updated`。节点已删除或换任务时不伪造更新;`run_failed` 本身不代表节点媒体任务失败。
|
||||
@@ -64,6 +68,14 @@ Skills 的 `tool_completed` / `tool_failed` 事件附带 `skillId`、`skillName`
|
||||
|
||||
后台支付订单列表展示用户身份,点击名称打开用户详情;订单详情提供完整订单号、渠道交易号、用户 ID 和各阶段时间。同步支付状态与关闭订单位于更多菜单,关闭订单仍需确认。
|
||||
|
||||
## 用户 Agent 记忆
|
||||
|
||||
`GET/POST /api/agent/memories`、`PATCH/DELETE /api/agent/memories/:id`、`POST /api/agent/memories/:id/decide`、`GET /api/agent/memories/export`、`POST /api/agent/memories/import`、`GET/PATCH /api/agent/memories/settings`、`POST /api/agent/memories/compact` 需要登录。记忆按 `author_user_id` 隔离;手动添加直接批准,Agent `remember_lesson` 写入待审,由本人 `decide`。导出 `kind` 为 `agent-memories`。压缩只处理该用户已批准记忆,创建 `canvas_text` 任务 `operation=agent_memory_compact`;worker 仅在 `agent_memory_settings.compact_task_id` 与任务 ID 一致时应用 JSON 计划(merge 保留第一条并删除其余,rewrite 原地更新)。周期为 `off` / `daily` / `weekly` / `monthly`,调度每 5 分钟扫描,每拍最多 3 个用户。
|
||||
|
||||
## 管理员查看 Agent 记忆
|
||||
|
||||
`GET /api/admin/agent-lessons`、`DELETE /api/admin/agent-lessons/:id` 需要管理员权限。列表支持 `status`、`userId`、`keyword`(主题/内容/用户名)与 `limit`;条目含解析后的 `steps`、`authorUserId`、`authorUsername`、`authorDisplayName`。管理员不能批准或拒绝,批准入口在用户设置页。
|
||||
|
||||
## 管理员系统渠道
|
||||
|
||||
`POST /api/admin/channels/:id/duplicate` 需要管理员权限,会复制指定系统渠道的连接配置、加密凭证、请求头、模型和价格档,生成新的渠道与模型 ID;复制渠道名称自动追加“ - 副本”。原渠道及其前台供应线路不受影响。
|
||||
|
||||
@@ -7,7 +7,7 @@ description: 当前项目已实现的核心工作台能力与使用入口
|
||||
|
||||
## 云端 Agent(写入与生成仍待真实环境验收)
|
||||
|
||||
浮窗支持移动、调整大小和浏览器偏好恢复;后端支持逐轮对话、可信历史、取消、Skills 快照、画布摘要/精读、审批后的画布写入及媒体生成。终态旧轮次按其冻结合同保留为不可变历史,新消息使用当前合同创建新轮,不篡改父运行;旧合同下仍活动或待审批的运行不会被新版服务恢复执行。生成由预算和独立审批控制,画布写入使用内容快照哈希;未开放外部 MCP。系统行为策略以版本化资源发布,用户/项目/画布可编辑常驻偏好;偏好正文固定在运行快照并按层只读,不整段塞入 system prompt,也不能提权或跳过审批。节点创建、更新字段、摘要投影和连线限制来自服务端能力 registry;能力卡同时描述用途、适用场景、不适用场景、维护代价和可用动作,由 Agent 结合镜头数量、连续性、逐镜审查和交接需求自主选择,不强制所有任务使用分镜。分镜脚本支持结构化创建、分页读取及按真实行 ID 追加、修改和删除;普通文本和 Markdown 不会被宣称为具备镜头级维护能力的分镜表。图片、视频和音频节点可安全修改标题与下一版提示词草稿,既有媒体、已提交提示词和任务状态不会被草稿编辑覆盖;媒体模型按生成模式和真实参考节点从统一目录筛选。审批和执行记录明确展示目标节点、类型、修改字段、名称变化及连线两端,前端不再依靠内部 ID 猜测;这些预览不替代服务端归属、快照、Capability、锁、预算与调用哈希校验。真实模型计费与浏览器联调仍待验收。
|
||||
浮窗支持移动、调整大小和浏览器偏好恢复;后端支持逐轮对话、可信历史、取消、Skills 快照、画布摘要/精读、审批后的画布写入及媒体生成。运行中可插话(下一步生效,不打断正在飞的调用);多步任务可用 `plan_update` 维护待办清单并在输入框上方展示,未完成项会催办;`request_approval` 下首次 ≥2 项清单会先确认,`auto` 直接建立。`ask_user` 可弹出选项并结束本轮。个人记忆由 `remember_lesson` 写入待审,用户在「设置 → Agent 记忆」自己批准、添加、导出导入,并可用自己的文本模型手动或按日/周/月压缩相近条目。系统提示只带已批准记忆的索引(标题+适用场景),完整做法由 `recall_lessons` 按 topic/关键词取;管理员可按用户查看和删除,不能代批。只读模式不能写记忆。终态旧轮次按其冻结合同保留为不可变历史,新消息使用当前合同创建新轮,不篡改父运行;旧合同下仍活动或待审批的运行不会被新版服务恢复执行。生成由预算和独立审批控制,画布写入使用内容快照哈希;未开放外部 MCP。系统行为策略以版本化资源发布,用户/项目/画布可编辑常驻偏好;偏好正文固定在运行快照并按层只读,不整段塞入 system prompt,也不能提权或跳过审批。节点创建、更新字段、摘要投影和连线限制来自服务端能力 registry;能力卡同时描述用途、适用场景、不适用场景、维护代价和可用动作,由 Agent 结合镜头数量、连续性、逐镜审查和交接需求自主选择,不强制所有任务使用分镜。分镜脚本支持结构化创建、分页读取及按真实行 ID 追加、修改和删除;普通文本和 Markdown 不会被宣称为具备镜头级维护能力的分镜表。图片、视频和音频节点可安全修改标题与下一版提示词草稿,既有媒体、已提交提示词和任务状态不会被草稿编辑覆盖;媒体模型按生成模式和真实参考节点从统一目录筛选。审批和执行记录明确展示目标节点、类型、修改字段、名称变化及连线两端,前端不再依靠内部 ID 猜测;这些预览不替代服务端归属、快照、Capability、锁、预算与调用哈希校验。真实模型计费与浏览器联调仍待验收。
|
||||
|
||||
## 画布智能引用
|
||||
|
||||
|
||||
@@ -5,6 +5,40 @@ description: 当前项目已实现功能的手工验证清单与未确认边界
|
||||
|
||||
# 待测试
|
||||
|
||||
## 管理后台独立设计系统(2026-09-17)
|
||||
|
||||
管理后台改为独立 token / Ant 主题 / 壳层控件,不再消费用户端皮肤和 `WorkspacePage`。待管理员登录后核对:
|
||||
|
||||
- [ ] `/admin/settings/features`:命令条不再是玻璃大卡,功能域是紧凑分组表,开关立即保存逻辑不变。
|
||||
- [ ] `/admin/users` 与 `/admin`:侧栏无树状分组线、无选中描边和左侧指示条;表格、分页与用户工作台视觉隔离;用户首页/作品库样式未被带动。颜色回到原来的中性黑白台阶,不是冷蓝灰。
|
||||
- [ ] 亮/暗切换只改变后台冷灰台阶,不套用当前产品皮肤的圆角、主色或动效。
|
||||
- [ ] 抽屉、下拉、确认框仍可操作;关闭积分/前台模型仍有确认。用户详情、支付订单、提示词版本、模型编辑器不再使用产品 `AppDrawer`/`AppModal`。
|
||||
|
||||
## 模型选择器、画布摘要与首页视频入库
|
||||
|
||||
- 全站 `ModelPicker` 统一为先选品牌、再选模型的左右二级菜单(左品牌轨 + 右模型列表),含 Agent 对话、审批卡、章节提取、分镜脚本节点、项目设置。窗口窄于 720px 时才收成单栏。
|
||||
- 「提取章节角色、场景与道具」及同类默认 `ModelPicker` 品牌列表改为纵向卡片;Agent 对话审批卡切换生成模型同样不再横排重叠。
|
||||
- 大画布 Agent 不再因摘要超过 64KB 整轮拒绝:按约 60KB 截断节点列表,`omittedNodes` 标明未列入数量,细节仍用 `canvas_get_state`。
|
||||
- 首页创作视频宽高未知(0)时允许入库并展示成功;图片仍要求正数尺寸。待登录后:打开提取弹窗、Agent 对话、画布脚本节点核对模型菜单均为左右二级;大画布可发送 Agent;首页文生视频成功后对话显示视频而非「素材字段 width 必须大于 0」。
|
||||
|
||||
## Agent 计划清单、插话与提问(待用户确认)
|
||||
|
||||
- 多步任务可出现待办清单:`request_approval` 下首次 ≥2 项会弹审批,`auto` 直接建清单。PlanBar 随 `plan_update` 刷新,全部完成后收起;新一轮第一拍就应带上未完成项。
|
||||
- 简单问答不应被强行催去建清单;有未完成项时只回文字会被催办(软约束,不验收真实产出)。
|
||||
- 运行中输入框可打字:发送走插话(下一步生效),停止按钮仍可用;本轮结束前未送达的插话应标「未送达」并可再发成新一轮。
|
||||
- Agent 调用 `ask_user` 后本轮收尾,输入框上方出现选项;点选或自由输入应开新一轮。
|
||||
- 官方「发送到 Agent」预填提示词仍可用。
|
||||
|
||||
## Agent 个人记忆(待用户确认)
|
||||
|
||||
- 用户在「设置 → Agent 记忆」或画布 Agent 设置的「个人记忆」批准、拒绝、添加、编辑、删除、导出导入;手动添加直接生效。
|
||||
- 记忆页视觉:顶部是筛选/添加,空态用产品空态组件;压缩优化收成次要区域(设置页在列表上方,Agent 面板贴在底部),「立即压缩」不再抢主按钮。
|
||||
- 可选择文本模型后立即压缩,或设为每天/每周/每月自动压缩;压缩走真实文本计费任务,完成后相近记忆应合并、含糊条目应被改写,别人的记忆不得被动。
|
||||
- Agent `remember_lesson` 写入待审;已批准记忆在系统提示里只出现索引(标题+适用场景),卡住或同类任务动手前用 `recall_lessons(topic)` 取全文。用户 A 的记忆不会进入用户 B 的会话。
|
||||
- 管理后台「运营 → Agent 记忆」可按用户、状态、关键词查看并删除,没有批准/拒绝按钮。
|
||||
- 只读 Agent 运行不应出现 `remember_lesson`;普通运行在真实画布/生成工具成功后才允许记录。
|
||||
- 新一轮系统提示可出现分类概览和最多 20 条索引,不应出现做法全文或路线。待办清单改挂在会话末尾,不能改写系统提示;同一轮连续模型调用应能复用前缀缓存。当前用户消息是本轮目标;跨轮只带最近 10 轮对话,接近 64KB 时丢掉更早轮次。记忆不得覆盖审批、预算或工具契约。
|
||||
|
||||
## 画布节点快速引用 Agent
|
||||
|
||||
- 多选节点后,选区浮动工具栏应显示 `@` 图标;点击「发送到 Agent」后,Agent 输入框应自动带入所有选中节点引用。
|
||||
|
||||
@@ -1191,3 +1191,30 @@
|
||||
- 集成验证:隔离迁移正常退出,schema current/expected 6/6,公开主题可从 schema 5 配置读取并投影为 schema 6;既有 appearance 数据摘要保持不变。首页、注册、登录、找回密码、后台深链、liveness、readiness、公开外观与版本接口均通过,未登录管理员外观 API 返回 401。生产构建产物已确认包含 `.admin-shell .app-workspace-nav-link{border-radius:var(--menu-radius)}` 与“后台菜单”预览。
|
||||
- 浏览器验收:1440×900、1280×800、430×932、390×844 均无横向溢出、无可见内置品牌或仓库名残留,首屏直接显示当前自定义品牌。测试会话无管理员登录态,因此真实主题增删改保存、危险按钮/开关各状态和后台菜单圆角的登录后截图仍留作人工验收,不伪造账户或运营数据。
|
||||
- 回滚与残余风险:本批不增加关系型数据库迁移;源码回滚应成对恢复 schema v6 新增颜色字段、前后端兼容补全、Ant/CSS 映射、编辑器和测试。回滚前先备份当前 appearance JSON,避免丢失管理员在 schema v6 下保存的主题状态色。`project-memory/` 继续 Git 忽略且不进入 Git。
|
||||
|
||||
## 批次 138:管理后台独立设计系统与用户端隔离
|
||||
|
||||
- 日期时间:2026-09-17 20:45 CST
|
||||
- 目的:把管理后台从用户工作台的皮肤、token、Ant 主题和共享控件中拆出来,用一套高密度运营台规范覆盖全部后台页面,而不是继续给每个入口打补丁。
|
||||
- 隔离:新增 `pages/admin/theme/admin-tokens.css`、`admin-chrome.css`、`admin-ant-theme.ts` 与 `pages/admin/ui/controls.tsx`。壳层挂 `data-admin-root`,浮层走 `body.admin-overlays`。后台不再调用 `getAdminAntThemeConfig`、`WorkspacePage`、用户端 `Switch/Select/Checkbox/Tooltip/StatusBadge/EmptyState`。`globals.css` 中约 1100 行管理端规则已删除。
|
||||
- 视觉:冷灰表面台阶、发丝线、32px 控件、40px 表行;命令条统一为页头下粘性条,设置卡与功能开放域共用同一分组卡,不做玻璃拟态或逐页皮肤。
|
||||
- 验证:后台回归测试覆盖隔离合同;`tsc` 中本批管理端文件无新增错误。用户端组件未被改样式。登录态浏览器验收见 pending-test。
|
||||
- 逐项回滚:恢复本批新增的 `pages/admin/theme/`、`pages/admin/ui/controls.tsx`,以及 `admin-shell.tsx`、`admin-ui.tsx`、`globals.css`、`admin-ui.css` 和各页面 import 改写。
|
||||
|
||||
## 批次 139:管理端抽屉/弹窗脱离产品壳
|
||||
|
||||
- 日期时间:2026-09-17 20:50 CST
|
||||
- 目的:后台浮层不再复用用户端 `AppDrawer` / `AppModal`,避免产品弹窗内边距和外壳样式渗进运营台。
|
||||
- 涉及文件:`web/src/pages/admin/ui/overlays.tsx`(新增)、用户详情抽屉、提示词模板页、支付页、渠道模型编辑器、`admin-chrome.css`。
|
||||
- 具体改动:新增 `AdminDrawer` / `AdminModal`,强制挂 `admin-drawer` / `admin-modal-root`;浮层表面、标题和分隔线走 `--admin-*`。
|
||||
- 验证:后台回归测试覆盖不再引用产品壳;浏览器用独立预览核对照片密度与用户登录页隔离。
|
||||
- 逐项回滚:删除 `overlays.tsx` 并把四处调用改回产品壳即可。
|
||||
|
||||
## 批次 140:侧栏去掉树状线并恢复原中性色
|
||||
|
||||
- 日期时间:2026-09-17 21:20 CST
|
||||
- 目的:上一批把后台换成冷蓝灰,但树状分组线、选中描边和左侧指示条还在。按反馈恢复原来的黑白后台色,并真正拆掉那些装饰线。
|
||||
- 涉及文件:`admin-tokens.css`、`admin-ant-theme.ts`、`admin-chrome.css`、`admin-ui.css`、设计规范。
|
||||
- 具体改动:暗色回到 `#0f0f0f / #181818`,亮色回到 `#f5f5f5 / #ffffff`,仍写死在后台 token 里不读皮肤。分组标题取消圆点与渐隐短线;组内取消竖向连接线和缩进;当前页只保留底色,不再加描边和左侧指示条。
|
||||
- 验证:回归测试更新隔离色值与“无树状线”断言。
|
||||
- 逐项回滚:恢复本批上述文件即可。
|
||||
|
||||
@@ -1,20 +1,27 @@
|
||||
# 管理后台 UI 与布局规范
|
||||
|
||||
本规范仅约束 `web/src/pages/admin/` 及对应的 `.admin-*` 样式,目标是在不改变业务流程、权限与 API 合同的前提下,统一管理界面的信息层级、密度、响应式行为和可访问性。
|
||||
本规范只约束 `web/src/pages/admin/` 及其专用样式。管理后台是运营控制台,不是创作工作台;视觉、组件和 token 必须与用户端隔离。改用户端不得影响后台,改后台也不得改用户端组件。
|
||||
|
||||
## 0. 隔离合同
|
||||
|
||||
- Token 源:`web/src/pages/admin/theme/admin-tokens.css`。只在 `[data-admin-root]`、`body.admin-overlays` 和 `.admin-drawer/.admin-modal-root` 内生效。
|
||||
- 控件主题:`getIsolatedAdminAntTheme()`。不读取产品皮肤、不复用 `getAntThemeConfig()`。
|
||||
- 壳层与控件:`admin-shell`、`admin-ui`、`pages/admin/ui/controls.tsx`、`pages/admin/ui/overlays.tsx`。不得再引用 `WorkspacePage`、`StatusBadge`、`EmptyState`、用户端 `Switch/Select/Checkbox/Tooltip`、`AppDrawer`、`AppModal`。
|
||||
- `globals.css` 与用户皮肤变量不得再承载后台视觉。后台可在自己的根节点上覆盖 `--workspace-*` 作为防火墙,但后台颜色的真值必须是 `--admin-*`。
|
||||
- 动效:只保留 120ms 颜色过渡,不做页面进入位移、主题圆形揭示或卡片抬升。尊重 `prefers-reduced-motion`。
|
||||
|
||||
## 1. 视觉基线
|
||||
|
||||
- 颜色:继续使用 `globals.css` 的 Primitive → Semantic → Component 三层 token。管理端组件优先引用 `--admin-*`,不在页面内新增亮暗主题颜色字面值。
|
||||
- 表面:页面与 PC 侧栏共用 `--admin-layer-0` 作为连续底色,表格、卡片、表单主体及当前导航项使用 `--admin-layer-1`,表头、摘要区、分页与输入底色使用 `--admin-layer-2`,强调表面使用 `--admin-layer-3`;区域关系通过细分隔线、选中表面和间距表达,不用大块异色把侧栏与内容割裂。亮暗主题均需保持相邻层级可见,不允许页面和卡片使用难以分辨的同色表面。
|
||||
- 文字:标题、正文、辅助信息分别使用 `--admin-text-primary`、`--admin-text-secondary`、`--admin-text-muted`;不以低于辅助色的透明度承载必要信息。
|
||||
- 浮层提示:侧栏图标、纯图标按钮等 Tooltip 必须同时声明主题背景、边框、箭头和文字色,不能只覆盖浮层背景而继续继承另一主题的文字 token。普通后台提示跟随当前主题;收起侧栏的图标提示与普通用户工作台复用同一高对比浮层类,亮色界面使用深底白字,暗色界面使用浅底深字,字号不低于 13px/650。侧栏提示尺寸必须由文字内容驱动,短文案自动收紧、长文案自然扩展,只在超过 220px 或视口安全宽度时换行;不得用固定宽高制造大面积空白,必要提示不得出现深底黑字或浅底白字。
|
||||
- 密度:桌面端表格保持 42px 表头、52px 基础行高;主操作可点区不小于 32px,移动端主要导航可点区不小于 40px。
|
||||
- 圆角与阴影:小控件使用 6–8px,主容器使用 10–12px;常态信息层级以底色和分隔线表达,不堆叠阴影。
|
||||
- 字体:系统无衬线栈(SF Pro / PingFang / Noto Sans),不用用户端 Inter Variable。
|
||||
- 颜色:沿用后台原有中性黑白台阶,不跟产品皮肤走,也不另造冷蓝灰。亮色画布/侧栏 `#f5f5f5`、表面 `#ffffff`。暗色画布/侧栏 `#0f0f0f`、表面 `#181818`。主按钮用墨色/浅字,开关开启用成功绿。
|
||||
- 密度:控件高 32px,表头 36px,数据行 40px,侧栏展开 224px / 收起 64px。间距走 8px 网格。
|
||||
- 圆角:控件 6px,卡片 8px。层级靠表面台阶和 1px 发丝线,不堆阴影。
|
||||
- 页面只有三种骨架:列表(页头 + 工具栏 + 表 + 分页)、设置(页头 + 命令条 + 分组卡)、概览(页头 + 指标 + 图表/表)。禁止为单个入口另造视觉语言。
|
||||
|
||||
## 2. 布局规则
|
||||
|
||||
- 大屏(≥1024px):保留可折叠侧栏;内容区使用弹性高度,表格自身滚动,页面标题和分页保持稳定。
|
||||
- PC 侧栏:与页面使用同一基底,右侧细线界定导航区域;分组标题采用“节点 + 标题 + 渐隐短线”的树状分组头,组内入口向右内缩,并用与标题节点对齐的低对比竖线连接。分组标题使用 12px/700,普通入口使用不低于 13px/500 和约 82% 前景色,不能因追求弱化而损失可读性。当前页面所属分组增强标题和节点;当前入口必须同时使用强调表面、至少 26% 前景色边框、较粗文字和左侧位置指示,确保亮暗主题与页面缩放下均能快速识别,不能只依赖轻微底色差。悬停项提升一个可见层级。顶部身份区使用单个可点击品牌信息块承载更新日志入口:展开态为左侧自适应品牌图标,右侧第一行品牌名“影策”、第二行当前版本号;点击整个信息块只打开更新日志弹窗,不执行页面导航。收起态仅保留水平居中的品牌图标,点击行为不变,并提供明确提示。底部辅助区只保留返回创作台等跨工作区动作,用分隔线与主导航区分,不额外引入整块背景;“返回创作台”固定进入 `/home`,并与普通用户端“管理员后台”使用相同的 34px 行高、图标尺寸和折叠提示。展开态宽 224px,收纳态宽 64px并保留品牌、导航和底部操作图标;展开/收纳入口放在侧栏与内容区之间的垂直中部边缘,不占用顶部品牌区。边缘把手必须用不透明侧栏表面和外围遮罩完整切断分界线,禁止线条从控件内部穿过;使用简洁左右方向箭头,默认融入边界,仅在悬停和聚焦时提升对比,并提供提示、`aria-label`、焦点反馈和与普通用户工作台即时同步的本地状态记忆。前后台展开宽度、折叠宽度和 PC 外壳外侧留白必须一致,往返页面不得发生 12px 内容宽度跳变。
|
||||
- PC 侧栏:与页面使用同一基底,右侧细线界定导航区域。分组标题只保留 11px 弱化文字,禁止节点、渐隐短线和组内竖向连接线。组内入口不缩进。当前入口只用强调底色和较粗文字,不加描边、不加左侧指示条。悬停项提升一个可见底色层级。顶部身份区使用单个可点击品牌信息块承载更新日志入口:展开态为左侧自适应品牌图标,右侧第一行品牌名“影策”、第二行当前版本号;点击整个信息块只打开更新日志弹窗,不执行页面导航。收起态仅保留水平居中的品牌图标,点击行为不变,并提供明确提示。底部辅助区只保留返回创作台等跨工作区动作,用分隔线与主导航区分,不额外引入整块背景;“返回创作台”固定进入 `/home`。展开态宽 224px,收纳态宽 64px并保留品牌、导航和底部操作图标;展开/收纳入口放在侧栏与内容区之间的垂直中部边缘,不占用顶部品牌区。边缘把手必须用不透明侧栏表面和外围遮罩完整切断分界线,禁止线条从控件内部穿过;使用简洁左右方向箭头,默认融入边界,仅在悬停和聚焦时提升对比,并提供提示、`aria-label`、焦点反馈和与普通用户工作台即时同步的本地状态记忆。前后台展开宽度、折叠宽度和 PC 外壳外侧留白必须一致,往返页面不得发生 12px 内容宽度跳变。
|
||||
- PC 后台主题入口:每个页面标题栏右上角必须提供独立明暗主题切换,不要求返回创作台;使用纯图标按钮、明确的 `aria-label` 和悬停提示,并与页面业务操作保持 8px 间距。
|
||||
- 数据概览:定位为“运营健康驾驶舱”,首屏必须依次回答当前健康度、变化趋势和待处理事项,不能只是指标卡与大图表的纵向堆叠。工具栏优先提供 7 天、30 天、本月快捷范围和明确日期范围,用户、模型、渠道、能力等低频条件收进可展开筛选;刷新与导出保持在右侧。健康指标固定归纳为用户活跃、生成任务、服务质量和估算费用四域,队列、上游请求、P95 等从属信息进入对应指标卡,禁止在下一行重复展示;日变化必须写明“较前一日”,费用不可估算时明确提示价格未完整配置,不显示含义不明的 `--`。趋势区只在“用量 / 质量 / 活跃”三类中切换显示相关曲线,避免双坐标和多条曲线同时争夺注意力,高度控制在约 `280px`。CSS 视口达到 `1280px` 时趋势与“需要关注”按约 2:0.82 双列排列,关注区提前展示异常请求、排队任务和费用覆盖,并可跳转到对应分析或配置;更窄 PC 自动纵向排列。下方深度分析只保留模型、用户和异常三类读操作,模型价格作为独立配置入口进入抽屉,不与分析标签混排。所有筛选、导出、价格 CRUD、分页、接口和原始统计口径保持兼容。
|
||||
- 中小屏(<1024px):不将全部导航项平铺成长横向列表;始终显示当前页面,完整导航通过分组菜单打开。
|
||||
|
||||
Reference in New Issue
Block a user