Files
MiragenFlow/system-diagrams.md
T

36 KiB
Raw Blame History

元境幻生系统图示

本文覆盖一期用户端、管理端、系统请求链路和整体架构。

SSI 在本文中指 ASCII 页面图示;Mermaid 图用于可渲染的流程图、时序图和架构图。 current 表示仓库已有页面,phase 1 表示 develop.md 规划的一期页面。

管理台实现状态同步:渠道、渠道组、模型产品支持编辑抽屉,渠道健康支持全部探活,审批支持状态筛选与驳回,任务支持脱敏详情;详情请求失败会保留抽屉并提供重试,设置与调用记录抽屉显式支持关闭按钮、遮罩和 ESC。管理台 401 自动刷新后的重试会复用原始请求头和幂等键,渠道生成测试会把平台显示模型 ID 映射为供应商请求模型 ID。用户端画布设置弹层已按窄屏视口收缩,创建/右键菜单补齐 ESC 与菜单语义;这些页面仍需浏览器逐页验收,详见 docs/content/docs/progress/pending-test.mdx。

1. 页面清单

1.1 用户端

页面/路由 状态 一期职责
/ current 首页、产品定位、开始创作、登录注册
/auth/login、/auth/register、/auth/verify、/auth/reset phase 1 注册、验证、登录、密码重置
/workspace phase 1 模型档位、分辨率、能力和价格选择
/canvas current 画布项目列表、导入、导出、删除
/canvas/:id current 无限画布、节点编排、任务和结果回写
/tools/image phase 1 万能渲染、局部编辑、反推、多角度、抠图、拆分、放大、扩图
/tools/audio phase 1 音频生成、播放、下载、画布引用
/tools/3d reserved / not V1 仅保留禁用契约;真正图生 3D、文生 3D、预览和导出后续再启用
/tasks、/tasks/:id phase 1 任务历史、进度、attempt、结果和计费
/assets current 图片/文本/音频资产、筛选、导入导出、平台镜像、画布插入
/account、/account/plans phase 1 身份、会话、金币余额、账单、充值和套餐购买
/settings phase 1 WebDAV 连接、同步、冲突和本地存储状态
/404、/error current/phase 1 统一错误、权限和模型不可用提示

1.2 管理端

页面/路由 模板来源 一期职责
/admin/login Login 管理员独立会话;默认邮箱密码,按后台开关追加 CAPTCHA/MFA
/admin/dashboard/base BusinessPage 用户、任务、余额、队列、渠道和告警统计
/admin/users BusinessPage 用户状态、脱敏身份、冻结/解冻
/admin/auth-messages BusinessPage 邮件/SMS outbox 和发送状态;供应商接入暂缓
/admin/channels BusinessPage 渠道启停、健康和脱敏配置
/admin/channel-groups BusinessPage priority、fallback 和版本
/admin/model-products、/admin/pricing BusinessPage 公开模型、能力、分辨率和价格
/admin/billing/units、/admin/plans BusinessPage 金币单位、换算、套餐和权益
/admin/tasks BusinessPage 任务、attempt、结果、重试、取消、unknown 对账
/admin/billing、/admin/recharges、/admin/payments BusinessPage 账本、充值申请、支付事件
/admin/payment-providers BusinessPage mock/adapter 支付配置;第三方支付待接入
/admin/approvals BusinessPage 人工充值和高风险操作审批,双人职责分离
/admin/storage、/admin/settings、/admin/ws-metrics BusinessPage staging/WebDAV 策略、系统开关和实时指标
/admin/audit、/admin/audit-logs BusinessPage 日志大板、详细审计列表和链式审计详情
/admin/security/mfa BusinessPage 管理员 MFA 状态、启用/验证/审计关闭(受全局策略约束)
/admin/403、/admin/404 Result 权限和路由错误

2. 用户端 SSI(ASCII)

V1 实现注记:图片/音频/文本以及反推、多角度、拆分、放大均通过 /api/v1/tasks/* 异步执行;本地画布只负责编排和缓存。资产页和任务详情同时读取平台资产 API,WebDAV 同步由存储设置触发并显示状态。

2.1 全局壳层

+--------------------------------------------------------------------------------+
| 元境幻生 | 首页 | 工作台 | 画布 | 资产 | 任务 | 余额 | 账户 | 主题/语言         |
+--------------------------------------------------------------------------------+
|                            当前页面内容                                      |
+--------------------------------------------------------------------------------+
| Toast | 任务事件 | 登录过期 | 模型不可用 | 余额不足                             |
+--------------------------------------------------------------------------------+
[Browser]
   +--> [UserLayout]
   |       +--> [AuthGuard for billable routes]
   |       +--> [CatalogStore] [BalanceStore] [TaskEventClient]
   |       +--> [WebDAVSyncClient]
   +--> [Public Home]

2.2 首页 /

+------------------------------------------------------------------------------+
| 元境幻生                                                                     |
| 游戏美术 / 艺术资产 / 多视图工作流                                           |
|                                                                              |
| [开始创作] [打开画布] [查看资产] [登录/注册]                                 |
|                                                                              |
| [万能渲染] [游戏资产] [反推/多角度] [音频]                                   |
+------------------------------------------------------------------------------+
[首页] --> [工作台/模型目录]
      +--> [认证页]
      +--> [/canvas]
      +--> [/assets]

2.3 认证 /auth/*

+-----------------------------------------------+
| 元境幻生 | 登录 / 注册 / 验证 / 重置密码        |
+-----------------------------------------------+
| 邮箱或手机号 [.........................]       |
| 密码/验证码  [.........................]       |
| 人机挑战   [ 7 + 5 = ? ] [.............]       |
| [发送验证码] [登录] [注册]                    |
| 忘记密码 | 重新发送验证 | 返回首页             |
+-----------------------------------------------+
[注册] --> [规范化身份] --> [人机挑战(IP/设备/目标绑定)] --> [验证码 Outbox] --> [一次性验证] --> [建立会话]
[登录] --> [人机挑战] --> [Access Token 内存 + HttpOnly Refresh Cookie] --> [工作台]
[重置] --> [单次 Reset Token] --> [修改密码] --> [撤销其他会话]

2.4 工作台 /workspace

+------------------------------------------------------------------------------+
| 创作类型 [图片] [音频]                                                       |
| 模型档位 [基础] [高级] [旗舰]     分辨率 [低] [中] [高] [超高]               |
| 能力 [文生图] [图生图] [局部] [反推] [多角度] [抠图] [拆分]                  |
| 数量 [ 1 ]   预计消耗 [ ]   当前余额 [ ]          [开始任务] [进入画布]       |
| 参考图 [上传]   Mask [上传]   参数 [编辑]                                    |
+------------------------------------------------------------------------------+
[目录 API] --> [公开产品/能力/分辨率/价格] --> [控件]
[控件] --> [参数校验] --> [POST /api/v1/tasks/*] --> [任务详情]

2.5 画布项目库 /canvas

+------------------------------------------------------------------------------+
| 画布项目库                                      [新建] [导入] [导出] [删除]     |
+------------------------------------------------------------------------------+
| [搜索项目.................................................................]   |
| +------------------+ +------------------+ +------------------+               |
| | 缩略图/名称      | | 缩略图/名称      | | 缩略图/名称      |               |
| | 更新时间         | | 更新时间         | | 更新时间         |               |
| | [打开] [更多]    | | [打开] [更多]    | | [打开] [更多]    |               |
| +------------------+ +------------------+ +------------------+               |
+------------------------------------------------------------------------------+
[新建] --> [本地 hydrated] --> [/canvas/:id]
[导入] --> [ZIP projects.json + files] --> [IndexedDB] --> [项目卡]
[导出] <-- [项目 + 媒体] <-- [IndexedDB]
[删除] --> [确认] --> [清理未引用媒体] --> [列表]

2.6 画布编辑器 /canvas/:id

+------------------------------------------------------------------------------+
| < 返回 | 撤销/重做 | 缩放 | 小地图 | 保存/同步 | 任务状态 | 余额               |
+------------------------------------------------------------------------------+
| 节点面板       |                         无限画布                         | 信息 |
| [Text]         | [Text] ---> [Config] ---> [Image Batch]                  | 面板 |
| [Image]        |    |                    |                                  |      |
| [Audio]        | [Reference]          [Output]                              |      |
| [Config]       |                                                          ... |      |
| [Group]        |                                                          ... |      |
+------------------------------------------------------------------------------+
| 生成/编辑/反推/多角度/抠图/拆分/放大/扩图/保存资产/下载                        |
+------------------------------------------------------------------------------+
[节点输入] --> [收集文字/图片/音频/mask 引用]
           --> [上传对象或使用 objectId]
           --> [估价 + 余额预扣]
           --> [任务队列] --> [事件/轮询]
           --> [结果节点] --> [资产] / [WebDAV] / [下一节点]

2.7 图片工具 /tools/image

+------------------------------------------------------------------------------+
| [万能渲染] [局部编辑] [反推提示词] [多角度] [抠图] [智能拆分] [放大] [扩图]     |
+------------------------------------------------------------------------------+
| 输入参考图/提示词/mask | 模型/分辨率/数量/专属参数 | 结果预览/版本/下载/资产     |
+------------------------------------------------------------------------------+
[图片工具] --> [capability + taskType] --> [任务详情]
            --> [image / mask / split manifest / prompt / angle group]

2.8 音频工具 /tools/audio

+------------------------------------------------------------------------------+
| 文本 [.................................................................]     |
| voice [ ]  格式 [mp3/wav]  速度 [---]  instructions [..................]     |
| 预计消耗 [ ]  当前余额 [ ]                         [开始生成]                 |
| 状态 [排队/生成中/成功/失败] [播放] [下载] [插入画布]                         |
+------------------------------------------------------------------------------+
[文本 + voice + format] --> [Audio Adapter] --> [音频对象]
                          --> [播放器] + [画布节点] + [WebDAV]

2.9 3D 契约预留 /tools/3d(V1 禁用)

+------------------------------------------------------------------------------+
| 入口状态: [CAPABILITY_NOT_ENABLED]                                          |
| 三视图/自由视角的 V1 能力请使用图片工具;真正图生3D/文生3D暂不开放。          |
| adapter 预留: GLB/GLTF、OBJ、纹理、缩略图、导出和 Three.js/WebGL 视口          |
+------------------------------------------------------------------------------+
[参考图/提示词] --> [3D task contract]
                 --> [CAPABILITY_NOT_ENABLED]
                 -. 后续启用 .-> [GLB/GLTF + texture + thumbnail]

2.10 任务历史 /tasks 和任务详情 /tasks/:id

+------------------------------------------------------------------------------+
| 任务历史 [状态] [类型] [模型] [时间] [项目] [搜索任务 ID]                     |
+------------------------------------------------------------------------------+
| taskId | 类型 | 产品 | 状态 | 预扣/实扣 | 创建时间 | [详情] [重试] [取消]      |
+------------------------------------------------------------------------------+
| 任务详情: 输入摘要 | attempt 时间线 | 输出 | 计费 | 错误建议 | 保存/下载        |
+------------------------------------------------------------------------------+
[任务列表] --> [GET /api/v1/tasks] --> [任务详情]
[详情] --> [事件流/轮询] --> [取消或重试] --> [输出签名 URL]

2.11 资产 /assets

+------------------------------------------------------------------------------+
| 我的资产                    [新建] [导入] [导出] [筛选] [搜索]                |
+------------------------------------------------------------------------------+
| 类型 [全部/图片/文本/音频]  标签 [........]  (3D 资产 V1 仅预留)               |
| +----------------+ +----------------+ +----------------+                      |
| | 缩略图/标题    | | 缩略图/标题    | | 缩略图/标题    |                      |
| | 标签/来源      | | 标签/来源      | | 标签/来源      |                      |
| | [预览] [编辑]  | | [下载] [画布]  | | [删除]          |                      |
| +----------------+ +----------------+ +----------------+                      |
+------------------------------------------------------------------------------+
[生成输出] --> [保存资产] --> [所有权校验] --> [Asset + outputId]
            --> [资产列表] --> [插入画布] / [签名下载] / [WebDAV]

2.12 账户/余额/WebDAV /account、/settings

+------------------------------------------------------------------------------+
| 账户 [个人资料] [安全/会话] [余额与账单] [充值] [WebDAV]                      |
+------------------------------------------------------------------------------+
| 可用余额 [ ]  预扣余额 [ ]                              [充值]              |
| 流水: reserve | settle | release | refund | manual_adj                       |
| 套餐: [名称] [时长] [包含金币] [价格] [模型/能力] [购买]                    |
| WebDAV URL [脱敏] 状态 [已连接/失败] [测试] [同步] [冲突列表]                 |
+------------------------------------------------------------------------------+
[充值] --> [recharge order] --> [签名 webhook] --> [payment_events] --> [账本]
[WebDAV] --> [加密凭证引用] --> [连接策略] --> [manifest/checksum]
         --> [上传/下载/冲突副本/离线重试]

2.13 用户错误页 /error

+-----------------------------------------------+
| 401/403/404/429/500                            |
| 登录过期 / 无权限 / 页面不存在 / 系统繁忙      |
| [重新登录] [返回首页] [查看任务]               |
+-----------------------------------------------+

错误页只显示公共错误码和可执行建议,不显示 provider 地址、Key、原始模型 ID 或内部 attempt 细节。

3. 管理端 SSI(ASCII)

3.1 管理壳层

+--------------------------------------------------------------------------------+
| 管理台 | 面包屑 | requestId | 告警 | 管理员 | 退出                              |
+--------------------------------------------------------------------------------+
| [总览] [用户] [认证消息] [渠道] [渠道组] [模型产品] [价格] [金币/换算]         |
| [套餐] [任务] [余额] [充值/支付] [存储] [审计] [管理员 MFA] [系统设置]         |
+--------------------------------------------------------------------------------+
| 内容区: 表格 / 表单 / 详情 / 时间线 / 审批                                     |
+--------------------------------------------------------------------------------+
[Admin Browser] --> [Admin Session Guard] --> [RBAC + Object Scope] --> [Admin API]
                                                                    --> [Audit Log]

3.2 管理员登录 /admin/login、/admin/mfa

+-----------------------------------------------+
| 元境幻生管理台                                 |
| 账号 [.................................]       |
| 密码 [.................................]       |
| [登录]                                         |
| MFA [........] [确认] | IP/设备策略            |
+-----------------------------------------------+
[登录] --> [密码校验] --> [MFA/IP/设备策略] --> [admin audience session] --> [总览]
[管理员 MFA] --> [当前动态码 + 权限校验] --> [setup / verify / disable] --> [审计]

3.3 总览 /admin/dashboard

+--------------------------------------------------------------------------------+
| 用户数 | 活跃数 | 余额总额 | 充值额 | 任务数 | 队列积压                        |
+--------------------------------------------------------------------------------+
| 模型成功率/P95       | 渠道组健康/熔断       | 邮件/SMS/支付告警                 |
| [图表]               | [图表]                | [事件列表]                        |
+--------------------------------------------------------------------------------+

3.4 用户/认证消息 /admin/users、/admin/auth-messages

+--------------------------------------------------------------------------------+
| 用户 [搜索] [状态] [注册时间] [余额]                                           |
+--------------------------------------------------------------------------------+
| userId | 脱敏身份 | 状态 | 余额 | 额度 | 最近活动 | [详情] [冻结]              |
+--------------------------------------------------------------------------------+
| 详情: 身份/验证 | 会话设备 | 任务 | 消费 | WebDAV | 审计                       |
+--------------------------------------------------------------------------------+
| 认证消息: Provider | 模板 | 验证码策略 | Outbox | 成功率 | 重试                 |
+--------------------------------------------------------------------------------+
[用户管理] --> [用户/会话/额度] --> [冻结/退出/重置/重发]
[消息管理] --> [Provider + Template] --> [Outbox] --> [邮件/SMS]

3.5 渠道/渠道组 /admin/channels、/admin/channel-groups

+--------------------------------------------------------------------------------+
| 渠道 [新增] [测试] [启用/禁用] [轮换凭证]                                      |
+--------------------------------------------------------------------------------+
| channelId | 供应商 | capability | 状态 | 并发 | 失败/熔断 | 最近成功          |
+--------------------------------------------------------------------------------+
| 旗舰组 vN [编辑] [预览] [发布] [回滚]                                         |
| 1 -> channel A -> providerModel A                                             |
| 2 -> channel B -> providerModel B                                             |
| 3 -> channel C -> providerModel C                                             |
| retry budget | 熔断 | fallback | 公共错误文案                                |
+--------------------------------------------------------------------------------+
[渠道] --> [加密凭证 + provider model] --> [探活]
      --> [显示模型 ID ↔ 供应商请求模型 ID 映射]
      --> [有序渠道组] --> [不可变路由版本] --> [新任务快照]
      --> [生成测试使用供应商请求模型 ID]

3.6 模型产品/价格 /admin/model-products、/admin/pricing

+--------------------------------------------------------------------------------+
| 产品 [基础] [高级] [旗舰] [专项] [新增] [上架/下架]                            |
+--------------------------------------------------------------------------------+
| 产品 | 能力 | 渠道组 | 分辨率 | 数量上限 | 价格版本 | 状态                     |
+--------------------------------------------------------------------------------+
| 详情: 公开说明 | capability schema | 像素限制 | 价格 | 替代模型 | [发布/回滚]  |
+--------------------------------------------------------------------------------+
[草稿] --> [能力/价格校验] --> [影响预览] --> [发布版本] --> [目录 API]

3.7 金币单位、换算和套餐 /admin/billing/units、/admin/plans

+--------------------------------------------------------------------------------+
| 金币单位 [名称] [短代码] [图标] [精度] [显示小数位] [启用]                     |
| 换算规则 [支付货币] [金币比例] [舍入] [最低/最高充值] [生效版本]              |
+--------------------------------------------------------------------------------+
| 套餐 [新增] [复制] [上架/下架]                                                |
| 名称 | 时长 | 购买价格 | 包含金币 | 模型/渠道组权益 | 并发 | 队列优先级       |
| 介绍 | 保留上限 | 可延长/归档 | 生效版本 | [发布] [回滚]                    |
+--------------------------------------------------------------------------------+
[金币单位/换算发布] --> [新充值订单快照]
[套餐发布] --> [购买订单 + 权益快照]
             --> [用户目录/账户] --> [并发与队列准入]

3.8 任务 /admin/tasks

+--------------------------------------------------------------------------------+
| 任务 [用户] [状态] [模型] [时间] [requestId]                                   |
+--------------------------------------------------------------------------------+
| taskId | 用户 | 产品 | 状态 | 预扣/实扣 | 创建时间 | [详情]                  |
+--------------------------------------------------------------------------------+
| 详情: 快照 | attempt 时间线 | provider 状态 | 输出 | 账本 | 脱敏审计日志         |
| [取消] [重试] [标记异常]                                                       |
+--------------------------------------------------------------------------------+

3.9 余额/支付 /admin/balance、/admin/recharges、/admin/payments

+--------------------------------------------------------------------------------+
| 账本: reserve | settle | release | refund | manual_adj                        |
| 不变量: available + reserved = confirmed balance                             |
| 调账: 申请人 -> 审批人 -> 执行人 | 原因 | 幂等键 | 审计                        |
+--------------------------------------------------------------------------------+
| 充值订单 | provider | 金额/币种 | 状态 | webhook | 对账 | 退款               |
+--------------------------------------------------------------------------------+
[调账] --> [申请] --> [第二审批人] --> [账本事务] --> [审计]
[支付] --> [签名/订单金额校验] --> [唯一 eventId] --> [订单状态] --> [余额]

3.10 存储/设置/审计 /admin/storage、/admin/settings、/admin/audit、/admin/audit-logs

+--------------------------------------------------------------------------------+
| 邮件/SMS | 目录 | 渠道健康 | 限流 | 对象存储 | WebDAV | TTL/GC | 安全         |
+--------------------------------------------------------------------------------+
| 审计 [管理员] [对象] [操作] [requestId] [时间] [导出]                         |
| 时间 | 操作者 | 动作 | 对象 | before/after 摘要 | IP | correlationId | 校验链  |
+--------------------------------------------------------------------------------+

4. 用户侧逻辑 Mermaid

flowchart TD
  HOME[首页 /]
  AUTH[认证 /auth/*]
  WORK[工作台 /workspace]
  CL[画布项目库 /canvas]
  CANVAS[画布 /canvas/:id]
  IMAGE[图片工具]
  AUDIO[音频工具]
  THREE[3D 契约预留<br/>V1 禁用]
  TASKS[任务历史 /tasks]
  ASSET[资产 /assets]
  ACCOUNT[账户与余额]
  PLANS[套餐购买 /account/plans]
  DAV[WebDAV 设置]
  ERROR[公共错误页]

  HOME -->|开始创作| WORK
  HOME -->|打开画布| CL
  HOME -->|登录注册| AUTH
  AUTH -->|会话成功| WORK
  WORK --> IMAGE
  WORK --> AUDIO
  WORK --> THREE
  WORK --> CL
  CL -->|打开项目| CANVAS
  IMAGE -->|提交 task| TASKS
  AUDIO -->|提交 task| TASKS
  THREE -.->|CAPABILITY_NOT_ENABLED| ERROR
  CANVAS -->|提交 task| TASKS
  TASKS -->|结果| ASSET
  TASKS -->|结果回写| CANVAS
  ASSET -->|插入| CANVAS
  ASSET -->|同步| DAV
  CANVAS -->|同步| DAV
  ACCOUNT -->|充值/账单| TASKS
  ACCOUNT --> PLANS
  PLANS -->|购买订单| TASKS
  WORK -.->|未登录或余额不足| AUTH
  IMAGE -.-> ERROR
  AUDIO -.-> ERROR
  THREE -.-> ERROR

5. 管理员侧逻辑 Mermaid

flowchart TD
  LOGIN[管理员登录]
  MFA[MFA/IP/设备策略]
  RBAC[RBAC 与对象范围]
  DASH[总览]
  USERS[用户与会话]
  MSG[邮件/SMS/验证码]
  CHANNELS[渠道]
  GROUPS[渠道组/健康]
  PRODUCTS[模型产品/分辨率]
  PRICE[价格版本]
  UNIT[金币单位/换算]
  PLANS[套餐与权益]
  TASKS[任务与 attempt]
  BALANCE[余额与人工调账]
  PAY[充值/支付/退款]
  STORAGE[存储/WebDAV/TTL]
  ADMIN_MFA[管理员 MFA 管理]
  AUDIT[审计]
  AUDIT_DASH[日志大板]
  AUDIT_LOGS[详细日志]
  API[Admin API]

  LOGIN --> MFA --> RBAC --> DASH
  DASH --> USERS
  DASH --> MSG
  DASH --> CHANNELS
  DASH --> GROUPS
  DASH --> PRODUCTS
  DASH --> PRICE
  DASH --> TASKS
  DASH --> BALANCE
  DASH --> PAY
  DASH --> STORAGE
  DASH --> ADMIN_MFA
  DASH --> AUDIT
  AUDIT --> AUDIT_DASH
  AUDIT --> AUDIT_LOGS
  USERS --> API
  MSG --> API
  CHANNELS --> API
  GROUPS --> API
  PRODUCTS --> API
  PRICE --> API
  UNIT --> API
  PLANS --> API
  TASKS --> API
  BALANCE -->|申请/审批/执行| API
  PAY --> API
  STORAGE --> API
  ADMIN_MFA --> API
  API -->|所有写操作| AUDIT
  GROUPS -->|路由版本| PRODUCTS
  PRODUCTS -->|目录/价格版本| TASKS
  RBAC -.->|拒绝越权| API

6. 系统请求逻辑 Mermaid

sequenceDiagram
  autonumber
  participant B as Browser
  participant G as API Gateway
  participant A as Auth/RBAC
  participant C as Catalog
  participant L as Balance Ledger
  participant Q as Queue/Worker
  participant R as Router
  participant P as Provider Adapter
  participant S as Object Storage
  participant E as Task Events

  B->>G: POST task + Access Token + Idempotency-Key
  G->>A: token/account/scope
  A-->>G: user identity
  G->>C: resolve product/resolution/capability
  C-->>G: catalog/price/route snapshot
  G->>G: validate inputs, ownership, MIME, scan
  G->>L: reserve expected amount
  L-->>G: available/reserved updated
  G->>Q: enqueue task with snapshot and lease
  G-->>B: taskId + queued + expected charge
  Q->>R: resolve ordered channels
  R->>P: attempt #1 + provider request ID
  P-->>R: success/retryable/permanent/unknown
  alt success
    R->>S: store normalized outputs
    R->>L: settle per successful output
    R->>E: succeeded/partial
  else retryable
    R->>R: backoff + budget + breaker
    R->>P: next channel attempt
  else unknown
    R->>P: query/reconcile provider request ID
    P-->>R: confirmed result/failure
    R->>L: settle or release exactly once
  else permanent
    R->>L: release unused reserve
    R->>E: failed + public error
  end
  E-->>B: WebSocket event with sequence/cursor
  B->>G: HTTP polling fallback after WS disconnect
flowchart LR
  U[用户] --> AUTH[Auth API]
  AUTH --> CODE[验证码哈希/限流]
  CODE --> OUTBOX[Message Outbox]
  OUTBOX --> MAIL[邮件适配器]
  OUTBOX --> SMS[短信适配器]
  U --> ORDER[充值订单]
  ORDER --> PAYMENT[Payment Adapter]
  PAYMENT --> WEBHOOK[签名 Webhook]
  WEBHOOK --> EVENTS[唯一 eventId]
  EVENTS --> LEDGER[Balance Ledger]
sequenceDiagram
  participant U as User Browser
  participant API as Platform API
  participant DAV as WebDAV Adapter
  participant W as User WebDAV
  participant DB as Manifest/Metadata

  U->>API: PUT /me/webdav
  API->>DAV: HTTPS/allowlist/private-network validation
  DAV->>W: PROPFIND connection test
  W-->>DAV: status
  DAV-->>API: redacted status
  U->>API: POST /me/webdav/sync
  API->>DB: load manifest cursor
  API->>DAV: merge remote manifest/checksums
  DAV->>W: GET/PUT user namespace files
  W-->>DAV: files/conflicts
  DAV-->>API: merge result/conflict copies
  API->>DB: persist cursor and status
  API-->>U: progress/result

7. 系统总览架构 Mermaid

flowchart TB
  subgraph Clients[客户端]
    WEB[用户前台 Vite/React]
    ADMIN[管理台 TDesign React]
    CANVAS[DOM/SVG Canvas + future Three.js]
  end

  subgraph Edge[统一 Origin]
    PROXY[Reverse Proxy]
    STATIC[Static / and /admin/]
    API[API Gateway /api/v1]
    EVENTS[WebSocket /ws task events]
  end

  subgraph Domain[服务端领域]
    AUTH[User/Admin Auth + RBAC]
    CATALOG[Catalog + Pricing]
    TASK[Task API + State Machine]
    ROUTER[Channel Router + Circuit Breaker]
    ADAPTER[Provider Adapters]
    LEDGER[Balance Ledger + Recharge]
    MESSAGE[Email/SMS Outbox]
    ASSET[Upload/Object/Asset]
    DAV[WebDAV Sync]
    AUDIT[Audit + Correlation]
  end

  subgraph Infra[基础设施]
    PG[(PostgreSQL)]
    REDIS[(Redis Queue/Locks)]
    STAGING[(Isolated local staging<br/>TTL/GC)]
    OBJECT[(Optional S3 Object Storage<br/>V1 adapter off)]
    PROVIDERS[Image/Text/Audio Providers]
    FUTURE3D[Future 3D Provider Adapter]
    MAIL[Email Provider]
    SMS[SMS Provider]
    PAY[Payment Provider]
    USERDAV[Per-user WebDAV]
    KMS[KMS/Secret Store]
  end

  WEB --> PROXY
  ADMIN --> PROXY
  CANVAS --> WEB
  PROXY --> STATIC
  PROXY --> API
  PROXY --> EVENTS
  API --> AUTH
  API --> CATALOG
  API --> TASK
  API --> LEDGER
  API --> ASSET
  API --> DAV
  API --> AUDIT
  EVENTS --> TASK
  TASK --> REDIS
  TASK --> ROUTER
  TASK --> ASSET
  TASK --> LEDGER
  ROUTER --> ADAPTER
  ADAPTER --> PROVIDERS
  ADAPTER -. V1 disabled .-> FUTURE3D
  AUTH --> PG
  AUTH --> KMS
  CATALOG --> PG
  TASK --> PG
  LEDGER --> PG
  LEDGER --> PAY
  MESSAGE --> PG
  MESSAGE --> MAIL
  MESSAGE --> SMS
  ASSET --> OBJECT
  ASSET --> STAGING
  DAV --> USERDAV
  DAV --> KMS
  AUDIT --> PG

8. 数据关系 Mermaid

erDiagram
  USERS ||--o{ SESSIONS : owns
  USERS ||--o{ GENERATION_TASKS : submits
  USERS ||--|| BALANCE_ACCOUNTS : has
  USERS ||--o{ UPLOAD_OBJECTS : uploads
  USERS ||--o{ ASSETS : owns
  MODEL_PRODUCTS }o--|| CHANNEL_GROUPS : routes_to
  MEMBERSHIP_PLANS ||--o{ PLAN_PURCHASES : sold_as
  USERS ||--o{ PLAN_PURCHASES : buys
  CHANNEL_GROUPS ||--o{ CHANNEL_BINDINGS : contains
  PROVIDER_CHANNELS ||--o{ CHANNEL_BINDINGS : binds
  GENERATION_TASKS ||--o{ GENERATION_ATTEMPTS : tries
  GENERATION_TASKS ||--o{ GENERATION_OUTPUTS : produces
  BALANCE_ACCOUNTS ||--o{ BALANCE_LEDGER : records
  BALANCE_UNITS ||--o{ BALANCE_CONVERSION_RULES : defines
  BALANCE_UNITS ||--o{ BALANCE_LEDGER : denominates
  BALANCE_CONVERSION_RULES ||--o{ RECHARGE_ORDERS : snapshots
  RECHARGE_ORDERS ||--o{ PAYMENT_EVENTS : receives
  USERS ||--o{ RECHARGE_ORDERS : creates
  USERS ||--o{ WEBDAV_CONNECTIONS : configures

  USERS {
    uuid id PK
    string status
    datetime created_at
  }
  SESSIONS {
    uuid id PK
    uuid user_id FK
    string audience
    string refresh_hash
    datetime expires_at
    datetime revoked_at
  }
  MODEL_PRODUCTS {
    uuid id PK
    string public_code
    string tier
    int version
    string status
  }
  CHANNEL_GROUPS {
    uuid id PK
    int published_version
    string circuit_state
  }
  CHANNEL_BINDINGS {
    uuid id PK
    uuid group_id FK
    uuid channel_id FK
    int priority
    string provider_model_id
  }
  GENERATION_TASKS {
    uuid id PK
    uuid user_id FK
    uuid product_id FK
    string status
    string idempotency_key
    decimal reserved_amount
    int snapshot_version
  }
  GENERATION_ATTEMPTS {
    uuid id PK
    uuid task_id FK
    string status
    string provider_request_id
    string error_class
  }
  BALANCE_ACCOUNTS {
    uuid id PK
    uuid user_id FK
    decimal available
    decimal reserved
    int version
  }
  BALANCE_LEDGER {
    uuid id PK
    uuid account_id FK
    string type
    decimal amount
    string idempotency_key
  }
  BALANCE_UNITS {
    uuid id PK
    string code
    string display_name
    string icon_key
    int scale
  }
  BALANCE_CONVERSION_RULES {
    uuid id PK
    uuid unit_id FK
    string payment_currency
    decimal rate
    int version
  }
  PROVIDER_CHANNELS {
    uuid id PK
    string provider
    string status
  }
  UPLOAD_OBJECTS {
    uuid id PK
    uuid owner_id FK
    string mime
    string scan_status
  }
  ASSETS {
    uuid id PK
    uuid owner_id FK
    string kind
    string object_id
  }
  GENERATION_OUTPUTS {
    uuid id PK
    uuid task_id FK
    string object_id
    decimal charged_amount
  }
  RECHARGE_ORDERS {
    uuid id PK
    uuid user_id FK
    decimal amount
    string status
  }
  PAYMENT_EVENTS {
    uuid id PK
    uuid order_id FK
    string provider_event_id
    string status
  }
  WEBDAV_CONNECTIONS {
    uuid id PK
    uuid user_id FK
    string base_url_redacted
    string status
  }
  MEMBERSHIP_PLANS {
    uuid id PK
    string public_code
    decimal purchase_amount
    decimal included_balance
    int duration_days
    string status
  }
  PLAN_PURCHASES {
    uuid id PK
    uuid user_id FK
    uuid plan_id FK
    decimal granted_balance
    datetime expires_at
    string status
  }

9. 页面与请求对照

页面 主要读取 主要写入/异步 用户可见错误
首页 公开能力和目录摘要 无 公共服务错误
认证 会话和账户状态 注册、验证、登录、刷新、重置 验证码失效、冻结、限流
工作台 目录、余额、上传限制 任务提交 参数错误、余额不足、模型不可用
画布 本地项目、任务、资产、同步 任务、保存资产、WebDAV 公共错误码和任务建议
图片/音频/多视图 目录、余额、上传对象 对应 taskType 任务失败和重试建议
任务详情 快照、事件、输出、账单 取消、重试、保存资产 不展示 provider attempt
资产 资产列表、下载授权 新建、编辑、删除、同步 过期、无权限、扫描失败
账户/余额 账户、账本、充值订单 充值订单、会话撤销 支付待确认、余额不足
WebDAV 连接和 manifest 测试、同步、冲突处理 连接失败、冲突副本
管理后台 列表、指标、审计 配置发布、审批、调账、重试 权限不足、版本冲突、需审批

10. 图示维护规则

  • 新增页面时,同时更新 1.1/1.2 页面清单、对应 ASCII 页面图和至少一张相关 Mermaid 图。
  • 新增 API、任务状态或账本状态时,同时更新第 6、7、8 节,保证请求链路、架构节点和数据关系一致。
  • 本文的页面范围必须与 develop.md 第 1、2、5、6、9 节保持一致;不开发的视频、动画、3D 生成、Local Agent、远程 Prompt、插件市场等功能不得重新出现在用户导航。
  • 一期固定使用本地画布/资产 + WebDAV;云端项目 CRUD 不进入 V1,仅保留 develop.md 中的团队/云端扩展预留契约。

11. 管理台重构图示索引

管理台一级/二级菜单、权限分组、每个页面的强交互 ASCII(SSII)线框、渠道→分组→模型产品→价格规则流程、版本冲突状态机和逐页验收清单,统一维护在 admin-plan.md。

当前管理台重构约束:

  • 左侧菜单必须使用一级分组 + 二级页面,不再把全部业务页面平铺成单层菜单。
  • 消息供应商、消息模板本期不进入可见菜单;认证消息只展示 outbox 状态和多行内容详情。
  • 新增/编辑渠道、分组、模型产品、用户、价格规则、套餐等都从按钮打开弹窗或抽屉,首屏不铺开全部配置字段。
  • 403/404 必须渲染可恢复页面,不允许白板;权限过滤和后端 scope 必须一致。