feat: 初始化项目结构并添加核心功能模块

- 新增文档模板和导航结构
- 实现服务器基础API路由和控制器
- 添加扩展插件配置和前端框架
- 引入多租户和权限管理模块
- 集成日志和数据库配置
- 添加核心业务模型和类型定义
This commit is contained in:
2026-03-17 22:07:19 +08:00
parent c0870dce50
commit 136c2fa579
728 changed files with 107690 additions and 5614 deletions

View File

@@ -0,0 +1,132 @@
# 项目特定规则 (Project-Specific Rules)
> 本文件包含 Crawlful Hub 项目的特定规则和配置
---
## 1. 数据与存储
- **表前缀**: 所有数据库表必须以 `cf_` 为前缀(如 `cf_product`, `cf_order`
- **金额字段**: 必须使用 `decimal(10,2)` 或更高精度,禁止使用 float/double
- **物理属性单位**: 长度(cm), 重量(kg), 体积(m3)
- **唯一约束**: `cf_product` 平台+productId 唯一约束;避免重复插入
- **JSON 字段**: images/skus/attributes 入库前序列化;出库解析
---
## 2. 核心业务规则
- **建议优先原则**: 后端 Agent 严禁在未经人工审核的情况下直接修改核心业务数据(如调价、退款、下单)
- **流程门禁**: 所有 Agent 决策必须遵循 `SUGGESTED -> PENDING_REVIEW -> EXECUTED/REJECTED` 状态机
- **Console 决策闭环**: Agent 仅负责生成“决策建议包”,必须由人工在 `Console` 端确认后方可执行
- **计价逻辑**: 必须收敛于 `PricingService`,禁止在 Controller 或前端硬编码公式
- **利润红线**: B2B 利润率 < 15% 禁止报价B2C 利润率 < 20% 触发风控预警
- **设备标记**: 所有设备必须标记Commercial Use Only, Non-Returnable
- **订单限制**: 严禁处理住宅地址订单轻B模式
---
## 3. 插件消息规范
- **消息类型**: 所有 message.type 统一在 `src/shared/types/messaging.ts` 声明
- **新增类型**: 必须在 background 与调用方同时适配,并补充最小冒烟测试
---
## 4. 安全与权限规范
- **权限模型**: RBAC (基于角色的访问控制) + 颗粒度权限点 (如 `order:read`)
- **预设角色**: ADMIN (全权), MANAGER (运营主管), OPERATOR (运营专员), FINANCE (财务主管), SOURCING (采购专家), LOGISTICS (物流专家), ANALYST (数据分析师)
- **权限校验**: 路由层必须通过 `authorize(permission)` 中间件进行拦截,禁止在 Controller 中硬编码 `role === 'ADMIN'`
- **数据隔离**: 非 ADMIN 用户在查询列表时必须根据 `parentId` 进行层级过滤,仅能看到自身及下属数据
---
## 5. AI生成代码规范 (AI-Generated Code)
### 核心原则
- **AI优先开发**: 99%代码由AI生成人工仅负责审核和微调
- **智能注释**: 每个服务类必须包含完整的JSDoc注释明确标识任务ID和功能描述
- **自动同步**: 代码生成自动更新协作看板,实现代码驱动看板
### 技术规范
- **服务类命名**: 统一使用`Service`后缀,避免`Manager`/`Helper`等后缀
- **代码结构**: 遵循标准服务类模式(表初始化 + 核心业务方法)
- **同步机制**: 使用`ai-sync-engine.js`实现自动同步
### 详细规范
> 详见:[AI生成代码规范](../docs/ai-generated-code-specification.md)
## 6. 架构与性能边界
### 基础设施配置
- **数据库**: 阿里云 RDS (MySQL 8.0);禁止在代码中执行 `DROP/TRUNCATE`;复杂查询必须通过 `EXPLAIN` 校验索引
- **缓存与队列**: 本地 Redis (服务器 6379 端口);所有异步任务通过 BullMQ 走本地 Redis
### 单机资源保护
- **内存管理**: 后端 Node.js 进程限制 `--max-old-space-size=4096`;图片处理 (Sharp) 必须开启 `sequentialRead`
- **并发控制**: API 速率限制必须基于本地 Redis 实现Worker 并发数严禁超过 10
### 边界隔离
- **Domain 间引用**: 禁止跨 Domain 直接操作数据库模型,必须通过 `Service` 暴露接口或 `EventBus` 异步通信
---
## 6. 1 (Brain) + 3 (Agents) 指挥与自省协议
- **角色定位**: 大脑 (Brain) 负责全局调度与决策Agent (AI-1, AI-2, AI-3) 负责原子任务包的闭环开发
- **Agent 问题显性化**: 必须在对话开始、执行中、交付前三个阶段明确上报“自我问题”
- **深度思考与文档反哺**: Agent 必须承担“架构思考者”的角色,在任务包闭环后主动更新相关文档
- **任务规格书驱动**: 复杂任务必须先在 `docs/governance/task-specifications.md` 定义原子化规格
- **收益优先原则**: 优先实现提升转化率与降低成本的任务
- **变更编年史**: 每次完成变更必须在看板追加记录
---
## 7. AI-First 代码库治理规范
- **补全优先编码**: 标准命名、JSDoc 驱动、小函数原则
- **前端方案强制性**: 后端 Agent 在完成任何 Service 或 API 逻辑后,必须在 `docs/blueprints/frontend-integration/` 下产出对应的详细前端实现方案
- **物理 Schema 唯一源**: `LegacyTableInitializer.ts` 是项目中**唯一的**物理表初始化入口
- **Schema 幂等性**: 所有建表语句必须使用 `db.schema.hasTable` 进行前置校验
- **契约驱动的数据库协作**: 新表未完成物理建表前,必须先定义 Zod Schema 作为“逻辑契约”
- **严禁 Mock 数据**: 严禁在生产级 Service 或前端 Page/Component 中使用硬编码的模拟数据
- **因果链强制性**: 每一个 AGI 建议必须通过 `DecisionExplainabilityEngine` 记录真实的因果叙述
- **部署即运行**: `completed` 的标志是:数据库表已初始化、核心逻辑已闭环、通过 `GetDiagnostics` 校验
- **影子测试**: AI-2 (Internal) 必须产出该功能的 **Shadow-Test**(最小冒烟测试)
- **目录职责固化**: 后端必须遵循 `core/ domains/ workers/ api/ shared` 分层,禁止跨层越权调用
- **状态机门禁**: 发布、审核、对账流程必须落入统一 FSM禁止散落在 Controller 中硬编码流程分支
- **追踪四元组必填**: 所有任务与日志必须携带 `tenantId/shopId/taskId/traceId`
---
## 8. TOB 与套利专项约束
- **套利口径统一**: 禁止仅用“售价-采购价”判断套利;必须使用净利公式(含平台费/物流/税费/汇率/售后/广告摊销)
- **利润红线强制执行**: B2B `<15%` 禁止放行B2C `<20%` 必须进入风控审核
- **无 API 执行约束**: 无 API 平台必须走 `No-API Bridge` + `PENDING_REVIEW`,禁止全自动直发
- **Win 节点隔离约束**: 一店一执行上下文profileDir/proxy/fingerprintPolicy同店任务严格串行
- **企业交付底线**: 上线前必须具备租户隔离、审计追责、配额治理、SLA 指标可观测四项能力
---
## 9. 文档管理规范
- **命名规范**: 文件名必须使用小写短横线kebab-case`global-business-blueprint.md`
- **分类存放**: `docs/blueprints/` (全局业务蓝图)、`docs/benchmarks/` (行业标杆)、`docs/quality/` (质量保障)、`docs/governance/` (协同看板)
- **引用闭环**: 文档内引用必须使用完整 Markdown 链接,并确保 `README.md``doc-index.md` 的导航同步更新
- **原子化更新**: 每次功能变更必须同步更新对应的标杆规格或蓝图,确保 AGI “先验知识”的实时性
---
## 10. 三AI同目录并行执行协议
- **一次性分发原则**: 每轮必须一次性下发完整任务包P0/P1/P2禁止仅下发单点任务
- **连续执行原则**: 每个 AI 在其任务包内必须连续执行到“完成或明确阻塞”才允许结束回合
- **停机条件白名单**: 仅允许外部依赖阻塞或已达到任务包验收标准并完成文档归档
- **文件占用锁**: 同目录协作时必须先声明文件归属,遵循“谁领取谁编辑”,避免并发覆盖
- **冲突处理**: 出现同文件冲突时,后写入方必须先 `Read` 最新内容并做增量合并,不得回滚他人变更
---
*本文件包含 Crawlful Hub 项目的特定规则,与通用编码规范分离管理。*

View File

@@ -1,188 +0,0 @@
# 代码与提交规范
- 使用 TypeScript禁止 any必要场景以 TODO 标注并跟进)
- 文件命名小写短横线TypeScript 类型与接口使用大驼峰
- 分支命名feature/, fix/, docs/, chore/;提交信息以动词开头,中文或英文均可
- 变更前必须通过构建与基础校验脚本npm run check
- 注释要求:中文注释,紧贴代码语句,描述意图而非过程;禁止冗长段落
# Lint 与格式化
- 插件启用 ESLintReact+TS后端暂不强制 ESLint
- 统一缩进 2 空格UTF-8换行 LF末尾换行
- 建议在本地启用编辑器保存时格式化(遵循 .editorconfig
# TypeScript 约束
- extension/ tsconfigstrict 开启paths 使用 @/\*
- server/ tsconfig保持严格类型避免 any 与隐式 any
# API 约定
- 所有响应统一结构:{ success: boolean, data?: any, error?: string }
- 错误码与信息需清晰、可定位4xx 为入参错误5xx 为服务异常
- CORS 白名单通过环境变量 ALLOWED_ORIGINS 配置
- 速率限制通过 RATE_LIMIT_REQUESTS 与 RATE_LIMIT_WINDOW_MS 配置
# 数据与存储
- 所有数据库表必须以 `cf_` 为前缀(如 `cf_product`, `cf_order`
- 金额字段必须使用 `decimal(10,2)` 或更高精度,禁止使用 float/double
- 物理属性单位统一:长度(cm), 重量(kg), 体积(m3)
- cf_product 平台+productId 唯一约束;避免重复插入
- JSON 字段images/skus/attributes入库前进行序列化出库进行解析
# 核心业务规则
- **建议优先原则 (Suggestion-First/Semi-Auto)**:鉴于业务复杂性,后端 Agent 严禁在未经人工审核的情况下直接修改核心业务数据(如调价、退款、下单)。
- **流程门禁**:所有 Agent 决策必须遵循 `SUGGESTED -> PENDING_REVIEW -> EXECUTED/REJECTED` 状态机。
- **Console 决策闭环**Agent 仅负责生成“决策建议包”(含因果叙述与证据链),必须由人工在 `Console` 端确认后方可执行。
- 计价逻辑必须收敛于 `PricingService`,禁止在 Controller 或前端硬编码公式
- B2B 利润率红线:< 15% 禁止报价
- B2C 利润率红线:< 20% 触发风控预警
- 所有设备必须标记Commercial Use Only, Non-Returnable
- 严禁处理住宅地址订单轻B模式
# 插件消息规范
- 所有 message.type 统一在 src/shared/types/messaging.ts 声明
- 新增类型前必须在 background 与调用方同时适配,并补充最小冒烟测试
# 安全与权限规范
- 权限模型RBAC (基于角色的访问控制) + 颗粒度权限点 (如 `order:read`)
- 预设角色ADMIN (全权), MANAGER (运营主管), OPERATOR (运营专员), FINANCE (财务主管), SOURCING (采购专家), LOGISTICS (物流专家), ANALYST (数据分析师)
- 权限校验:路由层必须通过 `authorize(permission)` 中间件进行拦截,禁止在 Controller 中硬编码 `role === 'ADMIN'`
- 数据隔离:非 ADMIN 用户在查询列表时必须根据 `parentId` 进行层级过滤,仅能看到自身及下属数据
# 提交前校验 (V30.0 - 生产级自我审计)
- **严禁全量构建 (No Heavy Build)**:为节省服务器/本机开销,日常开发流程中**严禁运行** `npm run build`
- **强制自我审计 (Self-Check Only)**
- 开发者AI必须在交付代码前通过 `Read``GetDiagnostics` 进行逻辑自查与类型校验。
- 逻辑自查标准:代码必须细致到“部署即运行”,业务链路必须闭环(如:新增字段必须在 API 响应中体现,且在 Service 中有对应处理)。
- **禁止跨 AI 审计**:每个窗口仅负责自身代码的业务完整性,无需等待其他 AI 审计,直接交付。
# 安全与保密
- 严禁提交任何密钥或私密配置;环境变量由 .env 管理并忽略提交
# Todo 列表执行规范
- 必须通过 `TodoWrite` 工具同步任务进度;每次对话开始时应优先规划或更新任务列表。
- 在任务列表中所有 `pending``in_progress` 的任务未处理完成或未记录明确阻塞原因前,严禁主动终止对话回合或将控制权交还给用户。
- **阻塞即自查 (Self-Diagnosis on Blockage)**如果任务被阻塞BlockedAI 必须在 Todo 或看板中清晰列举出当前遇到的“自我问题”,并遵循 **RCA 强制模板**
- `[CATEGORY]`(Context Missing / Logic Conflict / API Hallucination / Env Issue)
- `[ROOT_CAUSE]`(具体原因,如:.env 缺少某 Key)
- `[MITIGATION]`(修复建议或 Fallback 路径,如:手动在 .env 补充该 Key 或使用模拟数据)
- 必须遵循“规划 -> 执行 -> 验证 -> 归档”的完整闭环,单次执行应尽可能覆盖多个关联任务以提高效率。
- 任务描述必须使用中文,并清晰定义“核心/架构/业务/UI”等模块属性。
# 架构与性能边界 (Single-Node Architecture)
- **基础设施配置**
- **数据库**:阿里云 RDS (MySQL 8.0);禁止在代码中执行 `DROP/TRUNCATE`;复杂查询必须通过 `EXPLAIN` 校验索引。
- **缓存与队列**:本地 Redis (服务器 6379 端口);所有异步任务通过 BullMQ 走本地 Redis。
- **单机资源保护**
- **内存管理**:后端 Node.js 进程限制 `--max-old-space-size=4096`;图片处理 (Sharp) 必须开启 `sequentialRead` 以降低内存峰值。
- **并发控制**API 速率限制 (Rate Limit) 必须基于本地 Redis 实现Worker 并发数 (Concurrency) 严禁超过 10防止单机 CPU 耗尽。
- **边界隔离**
- **Domain 间引用**:禁止跨 Domain 直接操作数据库模型,必须通过 `Service` 暴露接口或 `EventBus` 异步通信。
# 1 (Brain) + 3 (Agents) 指挥与自省协议 (V30.0)
- **角色定位**:大脑 (Brain) 负责全局调度与决策Agent (AI-1, AI-2, AI-3) 负责原子任务包的闭环开发。
- **Agent 问题显性化 (Explicit Issue Disclosure)**Agent 必须在对话开始、执行中、交付前三个阶段明确上报“自我问题”:
- **认知自省**:若不理解大脑下发的任务背景或逻辑,必须立即回传 `[CONTEXT_BLOCKED]` 并说明缺失的具体 MD 或代码上下文。
- **逻辑自省**:若发现大脑的指令与现有代码或 project_rules 存在矛盾,必须回传 `[LOGIC_CONFLICT]` 并指出矛盾点。
- **环境自省**:若由于本地环境(如 Redis 未启动、.env 缺失)导致代码无法验证,必须回传 `[ENV_LIMITATION]` 并提供模拟验证结果。
- **深度思考与文档反哺 (Reflective Documentation)**Agent 不仅仅是代码执行器,必须承担“架构思考者”的角色。在任务包闭环后,必须主动执行以下动作:
- **逻辑升华**:若在开发中发现更优的业务逻辑或架构路径,必须同步更新 `docs/blueprints/` 下的相关蓝图。
- **规格校准**:若实际实现与 `task-specifications.md` 存在偏差,必须立即校准规格文档,确保“实现即规格”。
- **知识沉淀**:将开发过程中遇到的深坑、避坑指南记录至 `docs/quality/` 或相关 MD实现 AGI 知识库的自我增量进化。
- **看板强制反馈**:所有 `[ISSUE-AI-X]` 标签必须包含具体的“自我认知”描述,严禁使用“任务无法完成”等模糊词汇。
- **任务规格书驱动 (Spec-Driven)**:复杂任务必须先在 `docs/governance/task-specifications.md` 定义原子化规格。
- **收益优先原则 (ROI-First)**
- **业务收益**:优先实现提升转化率(如 AR 预览、智能预测)与降低成本的任务。
- **开发收益**:优先实现提升自动化测试与隔离环境(如 Sandbox Crawler的任务。
- **极限增量更新原则 (Absolute Incremental Update)**
- **物理删除禁令**:严禁物理删除任何已存在的文字信息。
- **状态演进标注**:失效信息使用 ~~删除线~~,并标注 `[AI-X @ YYYY-MM-DD]`
- **变更编年史 (Change Log) 强制同步**:每次完成变更必须在看板追加记录。
- **原子化文档同步 (Atomic Doc Sync)**:变更代码的同时必须追加文档记录。
- **自适应任务领取 (Auto-Claiming)**AI 需主动读取看板领取任务。
# AI-First 代码库治理规范 (V31.5 - Autocomplete 友好型工程)
- **补全优先编码 (Autocomplete-First)**
- **标准命名**:禁止任何语义不明的缩写。变量名与函数名必须具备强描述性,以最大化 IDE 自动补全的预测准确度。
- **JSDoc 驱动**:在实现逻辑前,必须编写详尽的 JSDoc`@param`, `@returns`, `@throws`)。这不仅是文档,更是为 Autocomplete 提供精准的上下文先验知识。
- **小函数原则**:单个函数逻辑控制在 30 行以内。函数越短Autocomplete 的补全信心指数越高,从而减少人工手动输入的 Dollar Usage 成本。
- **全栈蓝图协议 (V31.3 - 全栈蓝图协议)**
- **前端方案强制性 (Frontend Blueprinting)**
- 后端 Agent 在完成任何 Service 或 API 逻辑后,必须在 `docs/blueprints/frontend-integration/` 下产出对应的详细前端实现方案。
- **详细度要求**:必须包含 UI 布局草图Markdown 描述)、交互状态机(如按钮 Loading 逻辑)、核心 API 字段映射及 ROI 可视化逻辑。
- **逻辑对齐**:确保后端提供的 `causalChain`(因果链)能在前端 `Console` 端完美呈现,杜绝“后端有数据,前端没位置”的尴尬。
- **物理 Schema 唯一源 (Single Source of Schema)**
- [LegacyTableInitializer.ts](file:///d:/trae_projects/crawlful-hub/server/src/core/runtime/LegacyTableInitializer.ts) 是项目中**唯一的**物理表初始化入口(禁止新增其它初始化文件)。
- 任何 Agent 在新增业务实体时,必须首先在对应的 `Service` 中实现静态 `initTable()` 方法,并将其**注册**到 `LegacyTableInitializer` 中。
- **Schema 幂等性 (Idempotency)**
- 所有建表语句必须使用 `db.schema.hasTable` 进行前置校验。
- 严禁在业务逻辑执行过程中动态创建表,必须在系统启动/初始化阶段通过上述唯一入口完成。
- **契约驱动的数据库协作 (Contract-Driven DB)**
- 如果 AI-3 (Biz) 需要的新表尚未由 AI-1 (Kernel) 完成物理建表AI-3 必须先在 `shared/contracts` 定义 Zod Schema 作为“逻辑契约”。
- AI-3 可以基于此契约编写业务逻辑,但任务在物理表未在唯一入口落地并验证前,严禁标记为 `completed`
- **严禁 Mock 数据 (Zero-Mock Policy)**
- 严禁在生产级 Service 或前端 Page/Component 中使用硬编码的 `return { ... }``setTimeout` 模拟或模拟数据。
- 所有业务输出必须来自 `cf_` 数据库表、第三方生产 API 或后端真实 Controller 响应。
- **因果链强制性 (Causal Chain Enforcement)**
- 每一个 AGI 建议必须通过 `DecisionExplainabilityEngine` 记录真实的因果叙述。
- 严禁生成无数据支撑的“空洞建议”AI-2 (Internal) 将对因果链进行逻辑真实性审计。
- **部署即运行 (Deploy-Ready)**
- `completed` 的标志是:数据库表已初始化、核心逻辑已闭环、通过 `GetDiagnostics` 校验。
- 严禁提交带有 `// TODO: implement later` 或仅有接口定义而无实现的代码。
- **影子测试 (Shadow Auditing)**
- AI-2 (Internal) 在 AI-1/3 开发的同时,必须产出该功能的 **Shadow-Test**(最小冒烟测试),并在看板同步。
- **目录职责固化**:后端必须遵循 `core/ domains/ workers/ api/ shared` 分层,禁止跨层越权调用。
- **契约先行**跨端能力Console/Extension/NodeAgent必须先定义 contract再实现逻辑。
- **状态机门禁**:发布、审核、对账流程必须落入统一 FSM禁止散落在 Controller 中硬编码流程分支。
- **追踪四元组必填**:所有任务与日志必须携带 `tenantId/shopId/taskId/traceId`
- **Agent 异常自省 (Self-Problem Awareness)**Agent 必须能够明确识别并记录自身的问题。在执行链路中若由于输入不规范、逻辑矛盾、API 幻觉或环境约束导致无法继续,必须遵循以下 **异常处理准则**
- **级别化 (Leveling)**:明确标注错误级别 (`FATAL` 流程中断, `WARN` 降级运行)。
- **归因化 (Attribution)**:必须定位至具体模块 (`Service/Controller/Worker`)。
- **闭环化 (Closing)**:必须提供至少一个 **降级/Fallback 路径**,确保系统整体逻辑不产生静默失败。
- 术语统一:中台前端统一称为 `Console`;历史术语以 `~~Dashboard~~ -> Console` 标注演进。
- **AI 可读性优先**:函数命名必须表达业务意图(禁止缩写语义漂移),同类逻辑必须复用统一 Service。
- **防幻觉约束**:新增能力必须能映射到看板任务 ID 与规格任务 ID未入规格的实现不得进入主干。
# TOB 与套利专项约束 (V30.0)
- **套利口径统一**:禁止仅用“售价-采购价”判断套利;必须使用净利公式(含平台费/物流/税费/汇率/售后/广告摊销)。
- **利润红线强制执行**B2B `<15%` 禁止放行B2C `<20%` 必须进入风控审核。
- **无 API 执行约束**:无 API 平台必须走 `No-API Bridge` + `PENDING_REVIEW`,禁止全自动直发。
- **Win 节点隔离约束**一店一执行上下文profileDir/proxy/fingerprintPolicy同店任务严格串行。
- **企业交付底线**上线前必须具备租户隔离、审计追责、配额治理、SLA 指标可观测四项能力。
# 文档管理规范 (V30.0 - 结构化与 AGI 友好)
- **命名规范**文件名必须使用小写短横线kebab-case`global-business-blueprint.md`
- **分类存放**
- `docs/blueprints/`:存放全局业务蓝图、架构设计与演进路线。
- `docs/benchmarks/`:存放行业标杆(易仓、蝉妈妈等)的专项拆解与 AGI 规格。
- `docs/quality/`:存放质量保障清单与红线规范。
- `docs/governance/`:存放协同看板、任务规格与 AI 交互规范。
- **引用闭环**:文档内引用必须使用完整 Markdown 链接,并确保 `README.md``doc-index.md` 的导航同步更新。
- **原子化更新**:每次功能变更必须同步更新对应的标杆规格或蓝图,确保 AGI “先验知识”的实时性。
# 三AI同目录并行执行协议 (V30.0)
- **一次性分发原则**每轮必须一次性下发完整任务包P0/P1/P2禁止仅下发单点任务。
- **连续执行原则**:每个 AI 在其任务包内必须连续执行到“完成或明确阻塞”才允许结束回合。
- **停机条件白名单**:仅允许以下两类停机:
1. 外部依赖阻塞(账号权限/第三方不可用);
2. 已达到任务包验收标准并完成文档归档。
- **文件占用锁**:同目录协作时必须先声明文件归属,遵循“谁领取谁编辑”,避免并发覆盖。
- **冲突处理**:出现同文件冲突时,后写入方必须先 `Read` 最新内容并做增量合并,不得回滚他人变更。
- **任务包格式固定**:每个任务包必须包含 `任务ID/负责人/输入文件/输出文件/验收标准/阻塞升级路径`
- **批次节奏**:推荐 1 日 2 批(上午分发、下午回收),回收后立即进行下一批一次性分发。