| 字段 | 值 |
|---|---|
| 版本 | v0.1(草案) |
| 最后更新日期 | 2026-10-14 |
| 状态 | 草稿 · 待确认 |
| 本次变更原因 | 初次创建,基于存量调研逆向还原 |
| 图示规范 | mermaid(禁止静态图片,见 rules/11 必须规则 9) |
重要说明(评审 S5 修复): ① 本文档描述的是 v2 目标态,不是存量现状。凡与存量实现冲突处,以本文档为准。 ② 字段来源于逆向还原(存量代码 + 云函数调用点),未与云函数源码逐字段核对。 ③ 标
❓的字段/实体/关系尚未证实,需在阶段②核对契约后定稿。 ④ 禁止据此图直接建表。 ⑤ v2 数据源事实:AgentTask/AgentTaskRun/AgentLiveEvent三表已于 2026-10-13 建成(含company指针); 存量FmodeAgent.tasks[]死字段路径废弃。当前唯一缺口是云函数接收端未实现。
erDiagram
%% 注:Conversation 实体属性见 §三(本图只画关系,不重复定义)
Company ||--o{ AppUser : "多租户隔离"
Company ||--o{ Agent : "归属"
AppUser ||--o{ Agent : "拥有/可见"
AppUser ||--o{ Conversation : "参与"
Agent ||--o{ Conversation : "参与"
Company {
string objectId PK
string name
}
AppUser {
string objectId PK
string username
string mobile
pointer company FK "Pointer_Company 必须"
array roles "超管/普通"
bool isDeleted "软删"
}
Agent {
string objectId PK
pointer company FK "Pointer_Company 必须"
string name
string avatar
string kind "AI数字生命"
pointer owner FK "归属用户"
bool isDeleted
}
铁律(rules/05、CLAUDE.md 黄金规则 6):所有业务表必须带 company: Pointer<Company>;删除一律软删 isDeleted=true。
xlosi3m46q)v2 目标态:任务数据有独立落库表,由容器 kanban 采集上报(见 §二.B)。
erDiagram
Agent ||--o| AgentStatus : "实时状态"
Agent ||--o{ HostMetric : "主机指标"
Agent ||--o{ Channel : "通道配置"
Agent ||--o{ AgentTask : "多任务(真源)"
AgentStatus {
pointer agent FK
pointer company FK "必须"
string status "running/idle/error/offline"
string currentTask "当前任务(单值,来自 env)"
string currentAction "❓"
string headline "❓"
string balance "❓余额(服务端换算后余额,支撑 AC-07.1/07.4)"
string balancePageUrl "❓余额外链地址(支撑 AC-07.4)"
bool isDeleted
datetime updatedAt
}
HostMetric {
pointer agent FK
pointer company FK "必须"
float cpu
float memory
float disk "❓"
int uptime "❓"
bool isDeleted
}
Channel {
pointer agent FK
pointer company FK "必须"
string type "❓"
string name "❓"
bool enabled "❓"
bool isDeleted
}
⚠️ 存量问题(保留警示):存量
FmodeAgent.tasks[]数组字段从未落库上报,core/tasks.service.ts的多任务分支永不命中 —— "多任务并行"在存量中是宣传语而非实现。 v2 处置:废弃该字段路径,改由下节的三张表承载(裁决:任务看板纳入,见 SPEC FR-07b)。
erDiagram
Agent ||--o{ AgentTask : "产出"
AgentTask ||--o{ AgentTaskRun : "运行流水"
AgentTask ||--o{ AgentLiveEvent : "事件(仅落库)"
AgentTask ||--o{ AgentTaskComment : "评论"
AgentTask ||--o{ AgentTaskAttachment : "附件"
AgentTask {
pointer agent FK
pointer company FK "必须"
string taskId "源 kanban.db tasks.id"
string title
string status "triage/todo/scheduled/ready/running/blocked/done"
string assignee "❓取值域待核"
int priority "❓"
string body "markdown,截断 4000"
string branchName "❓"
string projectId "❓"
string blockKind "❓阻塞类型"
int consecutiveFailures "❓连续失败数"
string lastFailureError "❓"
string currentStepKey "❓"
datetime startedAt "❓"
datetime completedAt "❓"
datetime lastHeartbeatAt "❓"
datetime createdAt "❓"
bool isDeleted
}
AgentTaskRun {
pointer task FK "❓"
pointer company FK "必须"
int runId "源 task_runs.id"
string status "running/done/blocked/crashed/timed_out/failed/released"
string outcome "completed/blocked/crashed/timed_out/spawn_failed/gave_up/reclaimed"
string stepKey "❓"
string summary "❓截断 1000"
string error "❓"
int workerPid "❓"
datetime startedAt "❓"
datetime endedAt "❓"
bool isDeleted
}
AgentLiveEvent {
pointer task FK "❓"
pointer company FK "必须"
int eventId "源 task_events.id"
string kind "❓"
object payload "❓按需截断"
datetime createdAt "❓"
bool isDeleted
}
AgentTaskComment {
pointer task FK "必须"
pointer company FK "必须"
int commentId "源 task_comments.id"
string author "❓取值域待核"
string body "截断 2000"
datetime createdAt
bool isDeleted
}
AgentTaskAttachment {
pointer task FK "必须"
pointer company FK "必须"
int attachmentId "源 task_attachments.id"
string filename
string storedPath "容器内路径,非外链"
string contentType "❓"
int size
datetime createdAt
bool isDeleted
}
建表状态:
AgentTask/AgentTaskRun/AgentLiveEvent三表已于 2026-10-13 建成 (AgentTask21 业务字段 /AgentTaskRun13 /AgentLiveEvent14,均含companyPointer)。 ✅company指针已证实存在;其余字段名与取值域待核对(见 §七 核对表)。🔴
AgentTaskComment/AgentTaskAttachment两表尚未建成(本图为 v2 目标态)。 为何需要:SPEC FR-07b AC-07b.2 要求任务详情展示"评论 / 附件",而源库kanban.db确有task_comments(19 条)/task_attachments(7 条)两表,且采集脚本kanban-report.py已采集这两类数据并放入 payload。若只为三张表落库,这两类数据会丢在云函数里。 结论:这是云函数改造的一并新增,与 FR-07b 同属一个工作流,不额外增加阻塞面。 备选(若建表审批受阻):将评论/附件以 JSON 存入AgentTask.extra,但会牺牲查询能力; 推荐建表。前端消费口径:
AgentTask/AgentTaskRun/AgentTaskComment/AgentTaskAttachment= 任务看板消费;AgentLiveEvent一期仅落库,前端不消费(SPEC FR-07b)。
erDiagram
Agent ||--o| MatrixConfig : "容器签发(RP5Ht55NeX)"
Agent ||--o{ Message : "消息"
Conversation ||--o{ Message : "包含"
MatrixConfig {
pointer agent FK
pointer company FK "必须"
bool isDeleted
string userId "mxUserId"
string homeserverUrl
string accessToken "❓前端持有的凭据形态待确认"
bool provisioned
datetime provisionedAt
}
Conversation {
string roomId PK "Matrix room id"
pointer agent FK
pointer user FK
pointer company FK "必须"
bool isDeleted
string lastMessagePreview
datetime lastMessageAt
int unread
}
Message {
string eventId PK "Matrix event id"
string roomId FK
string sender
string body
string msgType "text/file/image/video"
string mediaUrl "OBS 外链 ❓"
pointer company FK "必须"
bool isDeleted
datetime ts
}
安全注记:
MatrixConfig.accessToken的存储位置与生命周期需在阶段②明确; 存量core/matrix-client.ts存在明文 TURN 凭据硬编码(违反黄金规则 9),v2 必须改为服务端签发。
lfYlgU7SkK)erDiagram
Project ||--o{ Deliverable : "包含"
Agent ||--o{ Deliverable : "产出"
Deliverable ||--o{ Artifact : "附件"
Project ||--o{ Conversation : "关联会话 ❓未证实"
Project {
string objectId PK "❓实体存在性待核对(见七-4)"
pointer company FK "必须"
string name "❓"
string status "❓"
bool isDeleted
}
Deliverable {
string objectId PK
pointer company FK "必须"
pointer project FK "❓"
pointer agent FK "必须"
string title
string summary
string type "交付物类型"
datetime deliveredAt
bool isDeleted "必须"
}
Artifact {
string objectId PK
pointer company FK "必须"
bool isDeleted
pointer deliverable FK
string name
string kind "file/image/video"
string url "OBS 外链 ❓"
int size "❓"
string mime "❓"
}
erDiagram
Event {
string id PK "派生的合成 id"
string category "delivery/exec/alert"
string level "info/warn/error"
pointer agent FK
string title
string detail
datetime ts
}
注:存量
EventsService的"事件"是由交付物 + 状态派生的合成数据,无独立事件表。 若 v2 需要真实事件流(审计/告警),须新增服务端落库——这是潜在的新需求,已列访谈问卷 Q3.4。
| 云函数 ID | 用途 | 涉及实体 | 契约文档 |
|---|---|---|---|
xlosi3m46q |
数字生命状态 | AgentStatus / HostMetric / (AgentTask ❓) | docs/03-interface/api/ 待建 |
lfYlgU7SkK |
交付物 | Deliverable / Artifact | 待建 |
RP5Ht55NeX |
Matrix 容器签发 | MatrixConfig | 待建 |
zl4yU8PAEB |
Token 同步 + 租户权威判定(SPEC FR-02 AC-02.4 的承载方) | AppUser.company |
待建 |
AlP56LCKFm |
上传预签名 | Artifact | 待建 |
统一入口:POST https://server.fmode.cn/api/functions,请求体 { id, token, params }。
| # | 待核对项 | 方式 |
|---|---|---|
| 1 | AgentTask/tasks[] 是否存在、字段定义 |
查云函数源码或问服务端归属方 |
| 2 | AgentStatus 全字段名(现为逆向推测) |
同上 |
| 3 | Deliverable/Artifact 字段名与类型 |
同上 |
| 4 | Project 是否真实存在独立表 |
同上 |
| 5 | 各表的 company 隔离落实情况 |
平台 Schema 查看 |
| 6 | 软删 isDeleted 是否所有业务表都有 |
同上 |