From af8f74e29ec50bcfaeae4324f928d28a12a1b556 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=9D=E5=B0=98?= <237809796@qq.com> Date: Mon, 15 Jun 2026 05:30:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20DOC-01=20ARCHITECTURE=20?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=A8=A1=E5=9E=8B=E9=87=8D=E5=86=99(?= =?UTF-8?q?=E5=88=A0=209=20=E8=99=9A=E6=9E=84=E8=A1=A8+=E8=A1=A5=207=20?= =?UTF-8?q?=E9=81=97=E6=BC=8F+=E5=AD=97=E6=AE=B5=E5=AF=B9=E9=BD=90)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 第六章数据模型段重写(其余 9 段未动)——删 9 虚构表(workflow_defs/runs/artifacts/connections/features/test_cases/test_runs/annotations/decisions)+补 7 遗漏(branches/node_executions/ai_conversations/ai_tool_executions/knowledges/knowledge_events/app_settings)+workflow 合并修正为单表 workflow_executions(dag_json 序列化)+字段对齐 models.rs/migrations.rs V1-V13(时间戳 INTEGER→TEXT 毫秒串,projects.idea_id 补外键)。主代理核查:虚构表零命中/CREATE TABLE 13 与 migrations.rs 一致/表名清单吻合。批2,另一会话文档核对 §1 --- ARCHITECTURE.md | 338 +++++++++++++++++++++++------------------------- 1 file changed, 159 insertions(+), 179 deletions(-) diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index cc3c2d1..3a954aa 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -263,214 +263,194 @@ pub struct Decision { ### SQLite 表结构 +> 真相源:`crates/df-storage/src/migrations.rs`(V1-V13,幂等迁移)。下表对齐真实 schema,字段/类型/默认值/外键与迁移文件一致。Rust 结构体见 `crates/df-storage/src/models.rs`。 + +共 **13 张业务表**(另含内部表 `schema_version` 记录迁移版本)。 + ```sql --- 想法池 +-- 想法池 (V1 建表 / V2 补 promoted_to + ai_analysis + scores) CREATE TABLE ideas ( - id TEXT PRIMARY KEY, - title TEXT NOT NULL, - description TEXT, - tags TEXT, -- JSON array - source TEXT NOT NULL, -- Manual/Clipboard/AI - status TEXT NOT NULL, -- Draft/PendingReview/Approved/Rejected/Promoted/Archived - scores TEXT, -- JSON: {market_potential, competition, feasibility, roi, overall} - ai_analysis TEXT, - related_ideas TEXT, -- JSON array of idea ids - promoted_to TEXT, -- project id - created_at INTEGER NOT NULL, - updated_at INTEGER NOT NULL + id TEXT PRIMARY KEY, + title TEXT NOT NULL, + description TEXT NOT NULL DEFAULT '', + status TEXT NOT NULL DEFAULT 'draft', -- draft/pending_review/approved/rejected/promoted/archived + priority INTEGER NOT NULL DEFAULT 1, + score REAL, + tags TEXT, -- JSON 数组 + source TEXT, + promoted_to TEXT, -- 晋升后的 project_id (V2) + ai_analysis TEXT, -- AI 分析结果 JSON (V2) + scores TEXT, -- 多维评分 JSON: feasibility/impact/urgency/overall (V2) + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL ); --- 项目 +-- 项目 (V1 建表 / V11 补 deleted_at / V12 补 path + stack) CREATE TABLE projects ( - id TEXT PRIMARY KEY, - name TEXT NOT NULL, - description TEXT, - idea_id TEXT, -- 来源想法 - repo_path TEXT, -- 仓库路径 - tech_stack TEXT, -- JSON array - status TEXT NOT NULL, -- Planning/InProgress/Testing/Releasing/Completed/Paused/Cancelled - priority INTEGER NOT NULL DEFAULT 1, -- 0=Low, 1=Medium, 2=High, 3=Critical - current_stage TEXT, -- Idea/Requirement/Coding/Testing/Release - config TEXT, -- JSON: 项目级配置 - created_at INTEGER NOT NULL, - updated_at INTEGER NOT NULL + id TEXT PRIMARY KEY, + name TEXT NOT NULL, + description TEXT NOT NULL DEFAULT '', + status TEXT NOT NULL DEFAULT 'planning', + idea_id TEXT REFERENCES ideas(id), + path TEXT, -- 绑定的本地代码目录绝对路径 (V12,可空=未绑定) + stack TEXT, -- 技术栈 JSON 数组字符串 (V12,探测填充) + deleted_at TEXT, -- 软删回收站: NULL=正常, 非空=已进回收站 (V11) + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL ); --- 工作流定义 -CREATE TABLE workflow_defs ( - id TEXT PRIMARY KEY, - project_id TEXT NOT NULL, - task_id TEXT, -- 关联的任务 (可为空,如项目级工作流) - name TEXT NOT NULL, - description TEXT, - dag TEXT NOT NULL, -- JSON: DAG 结构 - template_id TEXT, -- 来源模板 - version INTEGER NOT NULL DEFAULT 1, - created_at INTEGER NOT NULL, - updated_at INTEGER NOT NULL -); - --- 任务 (项目内的并行工作单元) +-- 任务 (V1 建表 / V2 补 workflow_def_id + base_branch) CREATE TABLE tasks ( - id TEXT PRIMARY KEY, - project_id TEXT NOT NULL, - title TEXT NOT NULL, - description TEXT, - status TEXT NOT NULL, -- Todo/InProgress/InReview/Testing/Done/Blocked/Cancelled - priority INTEGER NOT NULL DEFAULT 1, -- 0=Low, 1=Medium, 2=High, 3=Critical - branch_name TEXT, -- Git 分支名 - base_branch TEXT DEFAULT 'main', -- 基于哪个分支创建 - workflow_def_id TEXT, -- 关联的工作流定义 - assignee TEXT, -- AI agent 或人工 - merge_conflict TEXT, -- JSON: 冲突信息 - merged_at INTEGER, - created_at INTEGER NOT NULL, - updated_at INTEGER NOT NULL + id TEXT PRIMARY KEY, + project_id TEXT NOT NULL REFERENCES projects(id), + title TEXT NOT NULL, + description TEXT NOT NULL DEFAULT '', + status TEXT NOT NULL DEFAULT 'todo', -- todo/in_progress/in_review/testing/done/blocked/cancelled + priority INTEGER NOT NULL DEFAULT 1, + branch_name TEXT, + assignee TEXT, + workflow_def_id TEXT, -- 关联的工作流定义 ID (V2) + base_branch TEXT, -- 基础分支 (V2) + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL ); --- 发布计划 (合并多个 Task → 发布) +-- 分支 (V2 建表) — 任务与 Git 分支绑定 +CREATE TABLE branches ( + id TEXT PRIMARY KEY, + project_id TEXT NOT NULL REFERENCES projects(id), + task_id TEXT REFERENCES tasks(id), + name TEXT NOT NULL, + base TEXT NOT NULL DEFAULT 'main', + status TEXT NOT NULL DEFAULT 'active', + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL, + merged_at TEXT +); + +-- 发布计划 (V1 建表) CREATE TABLE releases ( - id TEXT PRIMARY KEY, - project_id TEXT NOT NULL, - version TEXT NOT NULL, -- e.g. v2.3.0 - branch_name TEXT, -- release 分支 - task_ids TEXT NOT NULL, -- JSON array: 包含的 Task ID 列表 - status TEXT NOT NULL, -- Planning/Integrating/Testing/Ready/Published - workflow_def_id TEXT, -- 发布工作流 - changelog TEXT, - published_at INTEGER, - created_at INTEGER NOT NULL, - updated_at INTEGER NOT NULL + id TEXT PRIMARY KEY, + project_id TEXT NOT NULL REFERENCES projects(id), + version TEXT NOT NULL, + status TEXT NOT NULL DEFAULT 'planned', + task_ids TEXT NOT NULL DEFAULT '[]', -- JSON 数组: 包含的 Task ID 列表 + changelog TEXT, + created_at TEXT NOT NULL, + released_at TEXT ); --- 工作流执行 -CREATE TABLE workflow_runs ( - id TEXT PRIMARY KEY, - workflow_def_id TEXT NOT NULL, - project_id TEXT NOT NULL, - task_id TEXT, -- 关联的任务 (可为空) - release_id TEXT, -- 关联的发布 (可为空) - status TEXT NOT NULL DEFAULT 'pending', -- Pending/Running/Paused/Completed/Failed/Cancelled - node_states TEXT, -- JSON: {node_id: {status(Pending/Running/Completed/Failed/Skipped/Waiting), output, started_at, finished_at}} - current_layer INTEGER, - started_at INTEGER, - finished_at INTEGER, - error TEXT +-- 工作流执行 (V1 建表 / V2 补 project_id + task_id) +-- 注: 不区分 def/run, DAG 直接序列化进 dag_json, 一次执行一行 +CREATE TABLE workflow_executions ( + id TEXT PRIMARY KEY, + name TEXT NOT NULL, + dag_json TEXT NOT NULL, -- DAG 的 JSON 序列化 + status TEXT NOT NULL DEFAULT 'pending', -- pending/running/paused/completed/failed/cancelled + triggered_by TEXT, + project_id TEXT, -- 关联项目 ID (V2) + task_id TEXT, -- 关联任务 ID (V2) + created_at TEXT NOT NULL, + completed_at TEXT ); --- 产出物 -CREATE TABLE artifacts ( - id TEXT PRIMARY KEY, - project_id TEXT NOT NULL, - workflow_run_id TEXT, - node_id TEXT, - kind TEXT NOT NULL, -- PRD/CodeChange/TestReport/ReleaseNote/Image - title TEXT, - content TEXT, - file_path TEXT, - metadata TEXT, -- JSON - created_at INTEGER NOT NULL +-- 节点执行 (V1 建表) — 工作流执行过程中每个节点的运行快照 +CREATE TABLE node_executions ( + id TEXT PRIMARY KEY, + workflow_id TEXT NOT NULL REFERENCES workflow_executions(id), + node_id TEXT NOT NULL, + node_type TEXT NOT NULL, + status TEXT NOT NULL DEFAULT 'pending', + input_json TEXT, + output_json TEXT, + error_message TEXT, + started_at TEXT, + completed_at TEXT ); --- 连接配置 -CREATE TABLE connections ( - id TEXT PRIMARY KEY, - name TEXT NOT NULL, - kind TEXT NOT NULL, -- MySQL/SSH/MongoDB/Redis/HTTP - config TEXT NOT NULL, -- JSON (加密存储) - created_at INTEGER NOT NULL, - updated_at INTEGER NOT NULL -); - --- AI 模型配置 +-- AI 提供商配置 (V9 建表) — 多 Provider 统一抽象 CREATE TABLE ai_providers ( - id TEXT PRIMARY KEY, - provider TEXT NOT NULL, -- Claude/GLM/DeepSeek/OpenAI - api_key TEXT, -- 加密存储 - base_url TEXT, - models TEXT, -- JSON: 可用模型列表 - is_default INTEGER DEFAULT 0, - config TEXT -- JSON: 额外配置 + id TEXT PRIMARY KEY, + name TEXT NOT NULL, + provider_type TEXT NOT NULL DEFAULT 'openai_compat', + api_key TEXT NOT NULL, + base_url TEXT NOT NULL, + default_model TEXT NOT NULL, + models TEXT, -- JSON array of model names + is_default INTEGER NOT NULL DEFAULT 0, + config TEXT, -- JSON extra config + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL ); --- 需求功能清单 -CREATE TABLE features ( - id TEXT PRIMARY KEY, - project_id TEXT NOT NULL, - task_id TEXT, -- 关联任务 - requirement_id TEXT, -- 来源需求 - title TEXT NOT NULL, - description TEXT, - status TEXT NOT NULL DEFAULT 'selected', -- Selected/Deferred/Rejected/Completed - priority INTEGER NOT NULL DEFAULT 1, -- 0=Low, 1=Medium, 2=High, 3=Critical - rejection_reason TEXT, -- 不做的原因(自动进入决策留痕) - test_case_count INTEGER DEFAULT 0, - order_index INTEGER NOT NULL, -- 排序 - metadata TEXT, -- JSON: 额外属性 - created_at INTEGER NOT NULL, - updated_at INTEGER NOT NULL +-- AI 对话 (V3 建表 / V4 补 archived / V5 补 prompt_tokens + completion_tokens / V6 补 models) +CREATE TABLE ai_conversations ( + id TEXT PRIMARY KEY, + title TEXT, + messages TEXT NOT NULL DEFAULT '[]', -- JSON array of ChatMessage + provider_id TEXT, + model TEXT, + models TEXT, -- 用过的所有 model JSON 数组字符串 (去重, V6) + archived INTEGER NOT NULL DEFAULT 0, -- 是否归档(侧栏折叠展示, V4) + prompt_tokens INTEGER, -- 输入 token 累计 (流式 usage 落库, V5) + completion_tokens INTEGER, -- 输出 token 累计 (流式 usage 落库, V5) + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL ); --- 测试用例 -CREATE TABLE test_cases ( - id TEXT PRIMARY KEY, - project_id TEXT NOT NULL, - feature_id TEXT NOT NULL, -- 关联功能 - title TEXT NOT NULL, - description TEXT, - preconditions TEXT, -- 前置条件 - steps TEXT NOT NULL, -- JSON: 测试步骤 [{step, expected}] - kind TEXT NOT NULL DEFAULT 'Manual', -- Manual/Auto/AI-Generated - priority INTEGER NOT NULL DEFAULT 1, -- 0=Low, 1=Medium, 2=High, 3=Critical +-- AI 工具执行审计 (V9 建表) — Agent 工具调用的审批/执行留痕 +CREATE TABLE ai_tool_executions ( + id TEXT PRIMARY KEY, + conversation_id TEXT, + tool_call_id TEXT NOT NULL, + tool_name TEXT NOT NULL, + arguments TEXT NOT NULL, + result TEXT, + status TEXT NOT NULL DEFAULT 'pending', -- pending/approved/rejected/executing/completed/failed + risk_level TEXT NOT NULL DEFAULT 'medium', -- low/medium/high + requested_at TEXT NOT NULL, + executed_at TEXT, + decided_by TEXT -- human/auto ); --- 测试执行记录 -CREATE TABLE test_runs ( - id TEXT PRIMARY KEY, - project_id TEXT NOT NULL, - task_id TEXT, -- 关联任务 - feature_id TEXT, -- 关联功能 - test_case_id TEXT NOT NULL, - status TEXT NOT NULL, -- Passed/Failed/Skipped/Blocked - actual_result TEXT, - error_detail TEXT, -- 失败详情 - executed_by TEXT, -- AI/Human - duration_ms INTEGER, - executed_at INTEGER NOT NULL +-- 知识条目 (V7 建表 / V8 补 embedding / V10 补 reasoning) — 经验沉淀基本单元, 共享记忆层 +-- 状态机: candidate → pending_review → published → archived +CREATE TABLE knowledges ( + id TEXT PRIMARY KEY, + kind TEXT NOT NULL DEFAULT 'pitfall', -- 7 种: review_rule/prompt_template/pitfall/architecture_pattern/diagnosis/deployment_note/workflow_optimization + title TEXT NOT NULL, + content TEXT NOT NULL DEFAULT '', + tags TEXT, -- JSON 数组字符串 + status TEXT NOT NULL DEFAULT 'candidate', -- candidate|pending_review|published|archived + confidence TEXT, -- high|medium|low (AI 提炼自评) + reuse_count INTEGER NOT NULL DEFAULT 0, -- 唯一客观排序信号 + verified INTEGER NOT NULL DEFAULT 0, -- 发布审核时一次性人工标 + source_project TEXT, -- 来源项目(仅溯源不过滤) + source_ref TEXT, -- 来源实体引用(如 conv:{id}) + reasoning TEXT, -- AI 提炼判断依据("为何值得沉淀"), 手动录入为 NULL (V10) + embedding BLOB, -- Vec 小端字节序列化, NULL=未嵌入走 LIKE 降级 (V8) + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL ); --- 标注 (贯穿所有内容) -CREATE TABLE annotations ( - id TEXT PRIMARY KEY, - project_id TEXT NOT NULL, - entity_type TEXT NOT NULL, -- Requirement/Feature/Code/TestCase/TestReport/DesignDoc - entity_id TEXT NOT NULL, -- 关联实体 ID - marker TEXT NOT NULL, -- FIXME/TODO/QUESTION/RISK/DECISION/OPTIMIZE - content TEXT NOT NULL, -- 标注内容 - location TEXT, -- 文件路径+行号 / 文档段落 - status TEXT NOT NULL DEFAULT 'Open', -- Open/AI-Processing/Resolved/WontFix - resolved_by TEXT, -- AI/Human - resolution TEXT, -- 处理结果 - created_at INTEGER NOT NULL, - resolved_at INTEGER +-- 知识生命线事件 (V10 建表) — 追加型审计: 产生/审核/引用/归档 +CREATE TABLE knowledge_events ( + id TEXT PRIMARY KEY, + knowledge_id TEXT NOT NULL, + event_type TEXT NOT NULL, -- created | extracted | status_changed | referenced | archived + source_ref TEXT, -- 触发来源: conv:{id} / manual / system + context_json TEXT, -- JSON: 因 event_type 而异 + timestamp TEXT NOT NULL ); --- 决策留痕 -CREATE TABLE decisions ( - id TEXT PRIMARY KEY, - project_id TEXT NOT NULL, - context TEXT NOT NULL, -- 决策背景 - question TEXT NOT NULL, -- 需要决定的问题 - alternatives TEXT, -- JSON array: 考虑过的方案 - decision TEXT NOT NULL, -- 最终决定 - reason TEXT NOT NULL, -- 决策原因 - decided_by TEXT NOT NULL, -- AI/Human - entity_type TEXT, -- 关联实体类型 - entity_id TEXT, -- 关联实体 ID - impact TEXT, -- 影响范围 - stage TEXT, -- Idea/Requirement/Coding/Testing/Release - created_at INTEGER NOT NULL +-- 通用应用设置 (V13 建表) — 前端 localStorage 迁移目标 KV 表 +CREATE TABLE app_settings ( + key TEXT PRIMARY KEY, + value TEXT NOT NULL, -- JSON 字符串 + updated_at TEXT NOT NULL ); + +-- 内部表: schema_version (version INTEGER PRIMARY KEY) — 迁移版本记录 ``` ## 七、阶段模板