Files
MiragenFlow/goal.md
T

30 KiB
Raw Blame History

MiragenFlow 管理台重构 Goal

本轮综合长任务入口:docs/miragenflow-long-task-goal-prompt.md。本文继续维护管理台 22 页、权限和业务闭环细节;前后台组件统一规则见该入口及 docs/miragenflow-tdesign-unification-goal.md。如本文与综合入口的渠道交互描述冲突,以综合入口的“OpenAI 单一供应方式 + 三个可自由切换 Tab”规则为准。

0. 目标状态

  • 目标对象:/Users/qiu/Desktop/MiragenFlow
  • 目标名称:管理台商业业务工作台重构
  • 当前阶段:目标文档与逐页 SSII 基线已完成;代码已完成 P0 壳层/权限、认证开关、独立系统设置、用户详情分 Tab、任务详情/审批驳回、渠道/分组/模型产品编辑抽屉、渠道健康批量探活、任务并发投递、跨实例任务 dispatch 回载、系统概览趋势/告警、业务维度筛选、PostgreSQL 任务租约心跳/过期恢复、消息 outbox 发送期续租与业务幂等键、WebDAV 完成事务与保留期行锁扫描、管理员 MFA 开关门禁。仍需浏览器逐页验收,以及完整 PostgreSQL 领域表 CAS、远端 WebDAV/消息竞态、管理台列表跨路由异步回写保护和真实 provider 的部署验证。未完成项不得按“已完成”发布。
  • 依据:AGENTS.md、develop.md、system-diagrams.md、admin-plan.md、summary.md
  • 跨端组件目标:用户端与管理端统一 TDesign 的长期执行基线见 docs/miragenflow-tdesign-unification-goal.md;本文继续只负责管理台业务目标,不把两端页面、路由、权限或状态合并。
  • 禁止结果:白屏、无恢复路径的 403、假按钮、首屏堆满配置字段、mock 冒充业务、未接入供应商伪装成已接入。

1. 最终目标

把当前平铺的 TDesign Starter 管理台重构为商业化 V1 管理工作台:

  1. 管理员从 /admin/login 默认只使用邮箱和密码登录(本地默认 admin@admin.com / admin);MFA/CAPTCHA 仅在后台增强开关显式开启时追加,关闭时界面不得出现验证码、动态码或恢复码输入框。
  2. 用户端认证提供密码登录(邮箱、手机号、用户名)和手机号验证码登录;注册提供邮箱、手机号两条路径,注册邮箱验证与注册手机号验证由 /admin/settings 独立开关控制,开启后先完成验证码验证再设置并确认密码。
  3. 登录后加载管理员角色、scope、MFA 状态和可见菜单;权限不足隐藏菜单,不能白屏。
  4. 左侧使用一级分组 + 二级页面,URL 统一为 /admin/...。
  5. 新增、编辑、启停、调价、审批、调账全部通过 Modal/Drawer 完成。
  6. 用户、渠道、分组、模型产品、价格、套餐、余额、支付、任务、存储、审计形成真实业务闭环。
  7. 供应商消息暂不接入;消息供应商和模板页面隐藏,只保留认证消息 outbox 状态和详情。
  8. 状态、能力、错误码、按钮全部中文;长文本和 capability 不能撑高表格。
  9. 所有写操作提供成功、加载、空态、403、409、422、503、网络断开和重试反馈。

2. 必读文件

实施前依次读取以下绝对路径:

  • /Users/qiu/Desktop/MiragenFlow/AGENTS.md
  • /Users/qiu/Desktop/MiragenFlow/develop.md
  • /Users/qiu/Desktop/MiragenFlow/system-diagrams.md
  • /Users/qiu/Desktop/MiragenFlow/admin-plan.md
  • /Users/qiu/Desktop/MiragenFlow/summary.md
  • /Users/qiu/Desktop/MiragenFlow/admin/src/router/index.ts
  • /Users/qiu/Desktop/MiragenFlow/admin/src/layouts/components/Menu.tsx
  • /Users/qiu/Desktop/MiragenFlow/admin/src/layouts/components/AppRouter.tsx
  • /Users/qiu/Desktop/MiragenFlow/admin/src/components/ErrorPage/index.tsx
  • /Users/qiu/Desktop/MiragenFlow/admin/src/pages/Business/index.tsx
  • /Users/qiu/Desktop/MiragenFlow/admin/src/services/platform.ts
  • /Users/qiu/Desktop/MiragenFlow/server/src/app/http.ts
  • /Users/qiu/Desktop/MiragenFlow/server/src/shared/auth.ts
  • /Users/qiu/Desktop/MiragenFlow/packages/contracts/src/index.ts
  • 根目录、admin/、web/、server/ 的 package.json
  • /Users/qiu/Desktop/MiragenFlow/scripts/dev-all.mjs
  • /Users/qiu/Desktop/MiragenFlow/scripts/build-all.mjs

页面/API变更必须同步 admin-plan.md、system-diagrams.md、summary.md、CHANGELOG.md、docs/content/docs/progress/todo.mdx 和 docs/content/docs/progress/pending-test.mdx。

3. 产品边界

必须进入 V1

管理员登录/RBAC/审计、菜单分组、系统概览、用户管理、认证消息、管理员安全、渠道、渠道健康、渠道组、模型产品、价格、金币单位、换算、套餐、余额账本、充值订单、支付事件、支付适配器、审批、任务中心、WS 指标、存储策略、系统设置、审计日志。

不进入可见菜单

消息供应商、消息模板、视频、动画、真实 3D、团队、云端项目 CRUD、内容治理、Local Agent、Codex、MCP、Skill、远程 Prompt、插件市场。支付只保留人工充值、mock 和 adapter 接口,等待第三方支付文档。

前台、公开 API、日志和导出不得暴露 provider 名称、Base URL、API Key、内部 provider model ID、渠道顺序、Cookie、WebDAV 密文或完整敏感提示词。

4. 菜单信息架构

元境幻生管理台
├─ 总览
│  └─ 系统概览                         /admin/dashboard/base
├─ 用户与认证
│  ├─ 用户管理                         /admin/users
│  ├─ 认证消息                         /admin/auth-messages
│  └─ 管理员安全                       /admin/security/mfa
├─ 渠道与模型
│  ├─ 渠道管理                         /admin/channels
│  ├─ 渠道健康                         /admin/channel-health
│  ├─ 渠道分组                         /admin/channel-groups
│  ├─ 模型产品                         /admin/model-products
│  └─ 价格规则                         /admin/pricing
├─ 计费与套餐
│  ├─ 金币单位与换算                   /admin/billing/units
│  ├─ 余额与账本                       /admin/billing
│  ├─ 套餐管理                         /admin/plans
│  ├─ 充值订单                         /admin/recharges
│  ├─ 支付事件                         /admin/payments
│  ├─ 支付适配器                       /admin/payment-providers
│  └─ 审批中心                         /admin/approvals
├─ 任务与运行
│  ├─ 任务中心                         /admin/tasks
│  └─ 实时指标                         /admin/ws-metrics
├─ 存储与系统
│  ├─ 存储策略                         /admin/storage
│  └─ 系统设置                         /admin/settings
└─ 审计
   ├─ 日志大板                         /admin/audit
   └─ 详细日志                         /admin/audit-logs

菜单规则:一级节点可展开/收起;收起时侧栏完全隐藏,不保留窄图标栏;刷新 URL 自动展开;无 scope 的二级项不渲染;admin:read 只读,写操作需 admin:write 或 admin:finance;登录、403、404 不入业务菜单。

5. 统一布局与交互

+--------------------------------------------------------------------------------+
| 元境幻生 | 一级菜单/二级菜单 | 面包屑 | 刷新 | 帮助 | 管理员菜单              |
+--------------------------------------------------------------------------------+
| 页面标题+描述                  [搜索] [筛选] [批量操作] [新增/配置]             |
+--------------------------------------------------------------------------------+
| KPI/统计卡/当前版本/告警                                                     |
+--------------------------------------------------------------------------------+
| 固定列宽表格:选择 | 关键字段 | 中文状态 | 更新时间 | 操作                  |
+--------------------------------------------------------------------------------+
| 右侧 Drawer/Modal:字段分组 | 校验 | 风险提示 | 取消 | 保存/提交             |
+--------------------------------------------------------------------------------+

全页面必须有加载骨架、空态、网络错误重试、403权限卡、提交中禁用、成功 Toast、422 字段错误、409 版本冲突、503 保留表单重试;支持 Tab/Enter/Escape 和焦点回收。窄屏页面整体不得产生无意义的横向溢出,但业务表格允许在局部容器内横向滚动,以保留列表语义和列可读性。长文本用摘要/Tooltip/详情抽屉,不能撑高表格。

6. 页面目标、布局和验收

6.1 登录/错误

  • /admin/login:居中邮箱密码卡片;开关开启时追加 CAPTCHA/MFA;成功进入 /admin/dashboard/base;失败保留输入并显示错误。
  • /admin/403、/admin/404:错误码、角色、所需 scope、返回系统概览、重新登录、切换管理员;按钮必须可用,禁止静态白板。

6.2 系统概览 /admin/dashboard/base

顶部时间范围/刷新;KPI 展示用户、活跃用户、任务、金币消耗、充值金额、队列深度、WS 在线;图表展示任务成功/失败率、P50/P95、模型可用率、渠道错误率、邮件/SMS 成功率和支付回调异常;卡片可带筛选跳转,单卡片可重试。

6.3 用户管理 /admin/users

搜索、状态/等级/验证/创建时间筛选;表格展示脱敏身份、验证状态、MFA、套餐、并发、每日额度、余额、最近登录;新增用户 打开 Drawer,填写用户名、邮箱、手机号和初始密码;详情包含账户/会话/任务/账本/权益/审计 Tab;支持冻结、解冻、重置密码、重发认证和调账申请。新增成功只显示一次初始密码,冻结后计费任务必须拒绝。

6.4 认证消息 /admin/auth-messages

状态/通道/用途/时间筛选;表格展示目标脱敏、用途、通道、状态、重试次数、错误摘要、时间;详情 Drawer 展示状态时间线和完整多行内容;重试需确认;内容使用 white-space: pre-wrap;供应商配置不在此页面实现。

6.5 管理员安全 /admin/security/mfa

状态卡、全局策略、启用/验证/关闭操作和恢复码 Drawer;关闭需要当前 TOTP/原因;开关关闭时登录只需邮箱密码,开启时追加 MFA;恢复码只显示一次,全部操作写审计。

6.6 渠道管理 /admin/channels

列表首屏仅展示搜索/筛选/新增渠道按钮和固定列;列使用中文业务字段(名称、供应方式、环境、区域、能力、状态、健康、优先级、并发/限流、成本、维护窗口、版本),不直接展示密钥、Base URL 或供应商内部模型 ID。新增和编辑共用同一风格的 Drawer,内部只有三个可自由切换的 Tab:基础信息、模型列表、模型映射;不使用上一步/下一步,也不提供没有真实逻辑的“通用”供应商模板。支持编辑、启停、凭证轮换、手动探活和 If-Match;密钥不回显。

基础信息填写名称、完整请求地址(示例 https://example.com 或 https://example.com/v1)和 API Key;API Key 只校验去除首尾空白后非空。模型列表仅在管理员主动点击按钮后请求 {基础地址}/v1/models,结果由管理员勾选加入渠道模型列表;模型映射是可选的,分别保存平台显示模型 ID 与供应商请求模型 ID,不能自动把拉取结果变成映射。切换 Tab、编辑回填、保存失败和关闭重开都必须保留或恢复正确草稿。

6.7 渠道健康 /admin/channel-health

状态/分组/时间筛选、健康统计卡和固定表格;列为渠道、中文状态、延迟、成功率、连续失败、熔断剩余、探活时间、维护窗口;映射 healthy=健康、degraded=降级、open=熔断、disabled=已停用;支持单项/批量探活和错误时间线。

6.8 渠道分组 /admin/channel-groups

分组列表和 新增分组;详情 Drawer 包含用途/档位、启停、可用渠道池、拖拽顺序、重试预算、超时、并发、熔断、退避、half-open、公共失败文案、替代模型、发布和回滚。保存前校验渠道存在、启用、顺序唯一;模拟首渠道失败必须展示 fallback 顺序。

6.9 模型产品 /admin/model-products

列表和 新增产品;Drawer 配置公开 ID、名称、档位、默认质量、能力、分辨率、最大数量、参考图数量、mask、渠道组、价格、替代模型、生效时间、状态和版本。能力用中文标签,超出显示 +N 和详情 Drawer;启用产品必须绑定启用渠道组;公开 API 只显示公开 ID。

6.10 价格规则 /admin/pricing

产品/分辨率/档位筛选;价格版本表;新增规则/调整价格弹窗包含基础价、数量阶梯、分辨率倍率、金币单位、生效时间、原因;提交携带 If-Match;旧版本返回 409,展示当前版本并允许重载;成功刷新且保留筛选。

6.11 金币单位与换算 /admin/billing/units

单位卡展示图标、名称、短码、精度、比例、版本;换算规则表支持新增/编辑/停用/生效期;账本使用最小整数金币,比例变更有审计和版本。

6.12 套餐 /admin/plans

卡片/表格切换;新增和编辑 Drawer 配置公开编码、名称、图标、介绍、排序、时长、包含金币、购买金额、并发、队列优先级、保留期、最大延长、允许模型/渠道组、上架、归档、版本;上下架即时影响公开目录,支持回滚。

6.13 余额 /admin/billing

余额统计、用户/流水类型筛选、账本表和调账申请;展示 available/reserved、reserve/settle/release/refund,支持按用户/任务/订单追踪;调账必须申请→审批→执行,available + reserved 不变量成立。

6.14 充值/支付 /admin/recharges、/admin/payments

充值表展示订单、用户、金额、金币、渠道、状态、创建/回调时间;支付表展示 eventId、订单、签名、金额/币种、状态、重放结果和异常;重复 webhook 必须幂等,状态和账本同事务。

6.15 支付适配器 /admin/payment-providers

列表展示名称、mock/adapter 模式、状态、密钥状态、版本;Drawer 支持新增 mock、启停、测试 webhook、服务端加密签名密钥;第三方支付等待文档,不伪造 provider。

6.16 审批 /admin/approvals

待审批/已执行/已驳回/已过期 Tab;详情显示申请人、审批人、原因、金额/对象、审计;人工充值、退款、调账和高风险配置要求申请人/审批人分离,过期自动标记,策略开启时要求审批 MFA。

6.17 任务 /admin/tasks

状态/类型/模型/用户/时间筛选;列表展示 taskId、用户、类型、公开模型、状态、预扣/实扣、attempt、更新时间;详情 Drawer 展示输入快照、状态时间线、attempt、输出、账本、错误、脱敏 provider request ID;支持取消、重试、unknown 对账。

6.18 实时指标 /admin/ws-metrics

展示在线连接、订阅、事件吞吐、心跳、断线、轮询降级、事件积压;支持时间窗口、自动刷新暂停、断线恢复和实例/任务筛选;重连 cursor 不重复。

6.19 存储/系统 /admin/storage、/admin/settings

存储策略配置 staging TTL、结果/原图保留、WebDAV manifest 保留、最大延长、归档模式、GC、扫描/quarantine、对象存储 adapter;系统设置必须是独立资源(不能复用 storage-policies),配置用户验证/MFA/CAPTCHA、管理员 MFA/CAPTCHA、限流、队列和审计保留;默认关闭所有认证增强,开关即时影响认证并写入版本/审计,状态可追踪,对象存储默认关闭。

6.20 审计 /admin/audit、/admin/audit-logs

/admin/audit 展示分类、HTTP 结果和时间趋势,/admin/audit-logs 展示具体操作人、动作、对象和请求来源;两者均可打开详情 Drawer,展示脱敏 before/after、IP、requestId、correlationId、hash 链和摘要导出。绝不展示密钥、密码、Cookie、完整提示词、原图或 WebDAV 凭证。

6.21 逐页 SSII 索引

详细 ASCII/SSII 线框统一维护在 /Users/qiu/Desktop/MiragenFlow/admin-plan.md 第 4-5 节;每页验收按以下结构执行:顶部标题与筛选、统计/告警区、固定列宽列表、详情 Drawer/Modal、加载/空/错误/冲突状态。

页面 主布局 关键交互
系统概览 KPI 卡 + 趋势 + 告警 时间范围、单卡跳转、局部重试
用户管理 筛选栏 + 用户表 + 详情 Drawer 新增、冻结、重置、重发、强退、调账
认证消息 状态筛选 + outbox 表 + 消息 Drawer 多行详情、失败重试
管理员安全 策略卡 + MFA 操作 Drawer setup/verify/disable、恢复码一次性展示
渠道管理 渠道表 + 三 Tab 新增/编辑 Drawer 地址校验、手动拉取模型、勾选加入、可选映射、启停、轮换密钥
渠道健康 健康 KPI + 渠道表 中文状态、单项/全部探活、日志
渠道分组 分组表 + 拖拽排序 Drawer 成员校验、fallback 预览、版本保存
模型产品 产品表 + 产品 Drawer 能力折叠、分辨率、渠道绑定、上下架
价格规则 版本表 + 价格 Modal 新增/调价、If-Match 冲突重载
金币单位/换算 单位卡 + 规则表 比例、精度、舍入和生效期
套餐管理 卡片/表格 + 套餐 Drawer 权益、发布/回滚、归档
余额与账本 余额 KPI + 流水表 调账申请、审批链、reserve/settle/release 追踪
充值订单/支付事件 订单表 + 事件详情 失败标记、退款申请、webhook 幂等
支付适配器 适配器表 + 配置 Drawer mock/adapter、启停、密钥状态
审批中心 状态 Tab + 审批详情 申请人/审批人分离、条件 MFA、过期处理
任务中心 任务表 + 任务 Drawer attempt、取消、重试、unknown 对账
实时指标 指标卡 + 时间序列 WS 心跳、断线恢复、cursor 去重
存储策略/系统设置 策略表 + 设置 Drawer TTL、WebDAV、归档、增强开关
审计日志 筛选表 + 审计 Drawer 脱敏 before/after、hash 链和导出摘要

6.22 22 个页面的逐页 SSII 骨架

以下矩阵是开发与浏览器验收的逐页“图片蓝本”。每行对应一张页面线框:头部 固定标题/面包屑/刷新,筛选 固定在标题下方,主体 使用固定列宽表格或指标卡,侧栏 使用 Drawer/Modal;加载、空、403、409、422、503 都在同一位置替换主体,不改变页面骨架。

# 页面 头部与筛选 主体与详情 强交互验收
1 /admin/dashboard/base 时间范围、刷新、告警过滤 KPI 卡、趋势图、异常列表 卡片跳转、单卡重试、断线恢复
2 /admin/users 搜索、状态、等级、验证、时间 用户表、账户 Drawer、六个详情 Tab 新增、冻结、重置、重发、强退、调账
3 /admin/auth-messages 状态、通道、用途、时间 outbox 表、消息详情 Drawer 多行内容、失败重试、目标脱敏
4 /admin/security/mfa 管理员 MFA 状态/策略 策略卡、setup/verify/disable Drawer 开关门禁、恢复码一次性展示
5 /admin/channels 供应方式、环境、区域、状态 渠道表、三 Tab 新增/编辑 Drawer 地址校验、手动 /v1/models、勾选模型、可选映射、启停、轮换密钥
6 /admin/channel-health 健康、分组、时间 健康 KPI、渠道表、错误时间线 单项/批量探活、中文状态、重试
7 /admin/channel-groups 用途、档位、状态 分组表、成员排序/fallback Drawer 拖拽排序、成员启用校验、模拟故障
8 /admin/model-products 档位、能力、渠道组、状态 产品表、产品配置 Drawer 能力折叠、渠道绑定、发布/回滚
9 /admin/pricing 产品、分辨率、档位、版本 价格版本表、调价 Modal If-Match 409 展示当前版本并重载
10 /admin/billing/units 单位、状态、版本 金币单位卡与换算规则表、编辑 Drawer 比例/舍入/精度校验、版本审计
11 /admin/billing 用户、流水类型、时间 余额 KPI、账本表、调账 Drawer reserve/settle/release/refund 追踪
12 /admin/plans 上架、归档、版本 套餐卡/表、套餐 Drawer 权益配置、发布、回滚、归档
13 /admin/recharges 用户、状态、时间 充值订单表、订单 Drawer 失败标记、退款申请、幂等重放
14 /admin/payments provider、状态、时间 支付事件表、事件 Drawer 签名/金额/币种校验、异常重试
15 /admin/payment-providers 模式、状态、版本 适配器表、配置 Drawer mock 测试 webhook、密钥只显示状态
16 /admin/approvals 待处理/已执行/已驳回/已过期 Tab 审批表、申请详情 Drawer 申请人/审批人分离、条件 MFA、驳回
17 /admin/tasks 状态、类型、模型、用户、时间 任务表、任务详情/attempt Drawer 取消、重试、unknown 对账、脱敏
18 /admin/ws-metrics 时间窗、实例、任务 WS KPI、吞吐/心跳/积压趋势 暂停刷新、断线恢复、cursor 去重
19 /admin/storage adapter、保留期、GC 状态 存储策略表、配置 Drawer TTL、归档、扫描/quarantine、GC
20 /admin/settings 安全增强、限流、队列、审计 系统设置表、版本化编辑 Drawer 默认关闭、即时生效、If-Match
21 /admin/audit 操作者、动作、对象、结果、时间 日志大板、分类占比和趋势 200/4xx/5xx 统计、中文分类、局部重试
22 /admin/audit-logs 操作者、动作、对象、结果、时间 详细日志表、脱敏详情 Drawer 中文行为、requestId、hash 链、详情重试

7. 服务端契约工作项

权限和总览

  • 统一 super_admin/operator/finance/support/auditor 到 scopes;未知角色不能得到空权限。
  • /api/v1/admin/dashboard、me、菜单权限和前端 scope 一致。
  • 403/404 返回稳定错误码和 requestId,前端必须有可恢复页面。

用户

  • 增加管理员创建用户 API,校验身份唯一、初始密码、状态、套餐和限制字段;密码只显示一次并只存哈希。
  • 冻结、解冻、重置、重发认证、强退和调账申请审计;详情数据脱敏并按对象权限返回。

渠道和模型

  • 渠道新增校验 HTTPS、DNS/私网、协议、密钥、超时、并发和限流;密钥服务端密文保存。
  • 渠道组校验成员存在、启用、排序唯一;模型产品校验渠道组存在且可用;价格支持 If-Match 和幂等。
  • 公共 DTO 不得包含 provider model ID、Base URL、Key 或渠道顺序。

计费、任务、存储、审计

  • 余额、账本、支付订单、支付事件和审批保持一致事务;任务取消/重试/unknown 不重复扣款。
  • WS 指标、attempt、队列租约、WebDAV/GC/归档状态可查询。
  • 审计 before/after 递归脱敏,日志和导出不包含真实密钥或完整敏感内容。

8. 实施阶段

P0 壳层与权限

嵌套路由、一级/二级菜单、权限加载、403/404恢复、角色映射、真实总览指标和错误态。

P1 核心配置闭环

用户新增;渠道新增/探活/启停;健康中文化;渠道组排序/fallback;模型产品能力/分辨率/绑定;价格调整/版本冲突。

P2 商业和运维

金币、换算、套餐、余额、充值、支付、支付适配器、审批、任务、WS 指标、存储、设置、审计、认证消息多行详情。

P3 统一体验

加载/空/错/403/409/503、固定列宽、能力折叠、中文状态、响应式 Drawer、键盘无障碍、敏感扫描、同源回归。

9. 验收标准

静态和构建

npm --prefix server run typecheck
npm --prefix server test
npm --prefix web run typecheck
npm --prefix web run build
npm --prefix admin run typecheck
npm --prefix admin run build
npm --prefix admin run lint
npm run build:all
git diff --check

路由和菜单

  • /admin/ 自动进入 /admin/dashboard/base。
  • 22 个可见二级页面均能进入;刷新后一级展开、二级高亮、面包屑正确。
  • 无权限角色不显示对应菜单;403/404 有返回总览和重新登录按钮。
  • 消息供应商/模板不出现在菜单。

业务闭环

  1. 创建用户→列表→详情→冻结;冻结后计费任务拒绝。
  2. 新增渠道→探活→分组拖拽→模型绑定→调价。
  3. 首渠道失败→fallback→任务 attempt 时间线。
  4. 旧 If-Match 调价→409→重载→成功。
  5. 重放 webhook→订单/余额/账本不重复增加。
  6. 调账→审批→执行→完整审计。
  7. 取消/失败/unknown→释放或按实际结算,不重复扣款。
  8. WebDAV 保留/归档/删除→队列/GC 状态可见。

视觉和交互

  • 首屏不铺满配置字段,新增/编辑只能通过按钮打开弹窗/抽屉。
  • 认证消息保留换行,capability 不撑高表格,状态均为中文。
  • 所有操作在加载、失败、403、409、503 有明确反馈。
  • Tab/Enter/Escape 和焦点回收可用;宽屏、窄窗口和缩放下页面整体不产生无意义的横向溢出,业务表格在局部容器内允许横向滚动以保留列可读性。
  • 路由、筛选或分页切换期间,旧列表请求不会回写当前页面的行数据、加载态或错误态;必须有延迟请求回归证据。

安全扫描

git ls-files | rg '(^|/)(\.env|.*\.(pem|key))$|(^|/)(uploads?|staging|snapshots?)(/|$)'
rg -n -i 'api[_ -]?key|authorization:|bearer |providerModelId|baseUrl|BEGIN (RSA|EC|OPENSSH) PRIVATE KEY' \
  web/dist admin/dist server/src web/src admin/src --glob '!*.map'

10. 交付物

  • 嵌套路由、一级/二级菜单和权限安全壳层。
  • 22 个可见页面的真实布局、弹窗/抽屉、错误态和业务闭环。
  • 用户、渠道、分组、模型、价格、计费、任务、存储、审计 API 对齐。
  • 更新 admin-plan.md、system-diagrams.md、summary.md、CHANGELOG.md、todo.mdx、pending-test.mdx。
  • 完整构建、测试、同源启动和浏览器验收记录;未完成内容继续记录在 TODO/Pending Test。

10.1 进度反馈格式

每完成一个可独立验收的小任务,立即用以下格式反馈,不把未验证内容计入完成度:

已完成:{小任务名称}
验收证据:{命令、页面、API 或截图路径}
当前进度:██████▎░░░ {整数}%
剩余阻塞:{没有则写“无”;有则列出具体文件/接口}

百分比按“已通过验收的交付项 / 全部交付项”计算;文档规划、代码实现、自动化测试、同源运行和浏览器人工验收分别计项,不能用文档完成替代功能完成。

11. 目标引导提示词

你现在负责完成 /Users/qiu/Desktop/MiragenFlow 的管理台重构 Goal。

先完整读取:AGENTS.md、develop.md、system-diagrams.md、admin-plan.md、goal.md、summary.md;
再读取 admin/src/router/index.ts、Menu.tsx、AppRouter.tsx、ErrorPage、Business/index.tsx、
admin/src/services/platform.ts、server/src/app/http.ts、server/src/shared/auth.ts、
packages/contracts/src/index.ts,以及各 package.json、scripts/dev-all.mjs、scripts/build-all.mjs。

必须实现:
1. 路由统一为 /admin/...,实现 7 个一级菜单和 22 个二级页面;逐页同步 `admin-plan.md` 的 ASCII SSII 与 `system-diagrams.md` 的 Mermaid;权限不足隐藏菜单并显示可恢复 403 页面。
2. 管理员默认只显示邮箱/账号和密码输入;MFA、验证码、恢复码均由后台增强开关控制,关闭时不得渲染输入框。完成真实系统概览(含 P50/P95、渠道/模型/消息/支付异常指标)、用户新增/详情分 Tab/冻结/重置密码/重发认证、认证消息多行详情和管理员安全。
3. 完成渠道新增弹窗、编辑/探活/启停、中文健康状态、分组拖拽排序与 fallback。
4. 完成模型产品能力/分辨率/渠道组绑定、发布/回滚和价格 If-Match 冲突处理。
5. 完成金币、换算、套餐、余额、充值失败/退款申请、支付事件、支付适配器和审批中心;管理员 MFA 增强开关关闭时审批不追加动态码,开启时才校验。
6. 完成任务 attempt/unknown/取消/重试、WS 指标、独立 `/api/v1/admin/settings` 系统设置 API/持久化/If-Match、存储策略和审计;系统设置不能复用 `storage-policies`。
7. 消息供应商和模板本期隐藏,不接入第三方 provider,不伪造可用配置。
8. 所有新增/编辑/启停/调价/审批/调账均用弹窗或 Drawer;固定列宽,中文状态,长文本和 capability 不撑表格。
9. 不向前台、公开 API、日志或导出暴露 provider 名称、Base URL、API Key、内部模型 ID、渠道顺序。

按 P0 壳层权限 → P1 渠道/分组/模型/价格 → P2 用户/计费/任务/存储/审计 → P3 视觉回归实施。
不要做视频、动画、真实 3D、团队、内容治理、Local Agent、远程 Prompt 或插件市场。
不要回滚已有改动,不要用 mock 冒充业务,不要把配置字段永久铺在首屏。

每个阶段执行并记录:
npm --prefix server run typecheck
npm --prefix server test
npm --prefix web run typecheck && npm --prefix web run build
npm --prefix admin run typecheck && npm --prefix admin run build && npm --prefix admin run lint
npm run build:all
git diff --check

最终启动 npm run dev:all,用同一 origin 验证 /、/admin/、/api/health、/api/ready;
逐页验证 22 个页面、权限角色、弹窗/抽屉、ASCII SSII 对应布局、加载/空/错误/403/409/503、中文排版、
渠道→分组→模型→价格、用户新增、任务、余额、审批、WebDAV 和审计;执行敏感扫描,
同步更新 admin-plan.md、system-diagrams.md、summary.md、CHANGELOG.md、todo.mdx、pending-test.mdx。
未完成内容必须明确记录,不能宣布全部完成。