PMFlow/CLAUDE.md

9.5 KiB
Raw Blame History

PMFlow 项目结构说明(CLAUDE.md)

1. Agent 入口文件(你关心的“进项目先读什么”)

  • AGENTS.md:Codex/Coding Agent 的主规则入口(优先级最高的项目级约束)
  • CLAUDE.md:面向 Claude 风格的项目说明文档(补充背景)
  • 建议:规则放 AGENTS.md,架构/目录说明放 CLAUDE.md

2. 项目定位

  • 项目名:PMFlow / Neural Sync
  • 形态:AI 原生项目管理系统(多租户 + 角色权限 + SSTC 工作流)
  • 技术栈:
    • 后端:FastAPI + SQLAlchemy + Alembic
    • 前端:React + TypeScript + Vite + Tailwind + Radix + React Query

3. 顶层目录(精简版)

AIProjectManger/
├── AGENTS.md                  # Agent 执行规则(建议优先维护)
├── CLAUDE.md                  # 现有 Claude 说明文档
├── start.sh / stop.sh         # 一键启动/停止入口
├── docker-compose*.yml        # 容器编排
├── backend/                   # FastAPI 后端
├── frontend/                  # React 前端
├── scripts/                   # 根目录运维脚本
├── tests/                     # 根级测试(集成/脚本)
└── docs/                      # 额外文档

4. 后端结构(backend/)

backend/
├── app/
│   ├── api/                   # 路由层(含 endpoints)
│   ├── core/                  # 配置、日志、核心能力
│   ├── dependencies/          # 鉴权/租户等依赖注入
│   ├── models/                # SQLAlchemy 模型
│   ├── schemas/               # Pydantic 模型
│   ├── services/              # 业务服务(AI/SSTC/集成)
│   ├── config/                # 配置与 prompt
│   └── utils/                 # 工具函数
├── alembic/                   # 数据库迁移
│   └── versions/
│       ├── 20260310_add_feishu_outbox_reply_hash.py  # 飞书 outbox 回执哈希幂等字段
│       ├── 20260311_add_pg_trgm_text_indexes.py      # pg_trgm 扩展与文本检索索引
│       ├── 20260311_add_kb_chunk_ivfflat_index.py    # knowledge_base_chunks 向量 IVFFlat 索引
│       └── 20260311_add_conversation_sessions_table.py # 飞书多轮会话上下文持久化表
├── scripts/                   # 后端运维/数据修复脚本
│   └── backfill_orphan_signal_links.py               # 回填孤立 signal 的 project_signal_links
├── requirements.txt           # Python 依赖
├── Dockerfile
└── tests/
  • 新增:backend/app/api/llm_providers.py(AI 管家 LLM provider preset 配置读取接口)
  • 新增:backend/app/services/ai_agent_kernel.py(双 Agent 共享决策内核:复杂度路由/执行门控/修正识别)
  • 新增:backend/app/utils/timezone.py(统一北京时间工具:now_cn_aware/now_cn_naive)
  • 新增:backend/alembic/versions/20260311_shift_all_timestamps_to_beijing.py(全库历史时间 +8h,数据库默认时区切到 Asia/Shanghai)
  • 新增:backend/tests/test_ai_pmo_work_item_decision_api.py(AI PMO 审批动作接口回归测试)
  • 移除:backend/.env.example(配置模板统一到根目录 .env.example)
  • 移除:backend/.openclaw/pmflow-routing-rules.json(路由规则统一到根目录 .openclaw/)

5. 前端结构(frontend/)

frontend/
├── src/
│   ├── api/                   # 接口封装
│   ├── pages/                 # 页面级组件
│   ├── components/
│   │   ├── ui/                # 基础 UI 组件
│   │   └── sstc/              # SSTC 工作流组件(已模块化拆分)
│   ├── hooks/                 # 自定义 hooks
│   ├── lib/                   # 通用工具
│   ├── stores/                # 状态管理
│   ├── router/                # 路由
│   └── types/                 # TS 类型定义
├── package.json
└── vite.config.ts

5.1 frontend/src/components/sstc/ 目录说明(模块化拆分后)

  • SSTCWorkspace.tsx:SSTC 工作区主容器(组装各阶段组件)
  • useSSTCWorkspaceOrchestration.ts:工作区编排 Hook(状态聚合、请求编排、事件路由)
  • sstcUtils.ts:SSTC 工具函数(数据转换、状态判断、通用 helper)
  • SSTCSignalStagePanel.tsx:信号阶段面板
  • SSTCCharterStagePanel.tsx:宪章阶段面板
  • SSTCTaskStagePanel.tsx:任务阶段面板
  • SSTCExecutionBoardPanel.tsx:执行看板阶段面板
  • SSTCReleaseStagePanel.tsx:发布阶段面板
  • SSTCReviewStagePanel.tsx:复盘阶段面板
  • SSTCTaskCreateDialog.tsx:任务创建弹窗
  • SSTCReleaseCreateDialog.tsx:发布创建弹窗
  • SSTCReviewCreateDialog.tsx:复盘创建弹窗
  • AIVisibilityPanel.tsx:AI 可视化信息面板
  • SSTCGlobalHeader.tsx:SSTC 全局头部
  • SSTCStageNav.tsx:阶段导航
  • SSTCChainView.tsx:链路视图
  • SSTCRiskFloatPanel.tsx:风险浮层
  • SignalContentHoverCard.tsx:信号内容悬浮卡片
  • charterModules.ts:宪章模块配置与映射

5.2 修改前必须执行 FIND_USAGE 的 SSTC 组件清单

  • SSTCWorkspace.tsx
  • useSSTCWorkspaceOrchestration.ts
  • sstcUtils.ts
  • SSTCCharterStagePanel.tsx
  • SSTCSignalStagePanel.tsx
  • SSTCTaskStagePanel.tsx
  • SSTCExecutionBoardPanel.tsx
  • SSTCReleaseStagePanel.tsx
  • SSTCReviewStagePanel.tsx
  • SSTCReleaseCreateDialog.tsx
  • SSTCReviewCreateDialog.tsx
  • SSTCTaskCreateDialog.tsx

6. 运行命令(高频)

根目录

./start.sh dev      # 推荐:docker-dev 热更新模式
./stop.sh dev

前端

cd frontend
npm run dev
npm run build

后端(本地直跑)

cd backend
pip install -r requirements.txt
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

7. 团队维护建议(简版)

  • 规则变更:只改 AGENTS.md
  • 结构变更:同步改 CLAUDE.md
  • API/契约变更:后端 schemas + 前端 types 同步更新

8. 服务边界约束(禁止越界)

  • 数据库写操作必须通过 Alembic migration,禁止直接 ALTER TABLE
  • 新增接口必须遵循响应包络:{code, message, data},不得裸返回
  • 禁止在 API 层写业务逻辑,业务逻辑归属 services/
  • 禁止在前端组件内直接调用 fetch,必须通过 frontend/src/api/ 封装层
  • 前端状态管理:服务端数据用 React Query,本地 UI 状态用 useState
  • 飞书回执发送仅允许 main.py 的 drain_loop 作为消费者,禁止在业务路径即时派发 outbox 发送任务

9. 新增代码的参考模式

  • 新增后端接口:参考 backend/app/api/sstc.py 的结构
  • 配置读取类接口:参考 backend/app/api/llm_providers.py(GET /ai-steward/llm/providers)
  • 项目删除接口(DELETE /projects/{project_id}):参考 backend/app/api/projects.py,先清理强依赖外键、再置空弱依赖外键、最后删除主记录(单事务提交)
  • AI PMO 审批接口(POST /ai-pmo/work-items/{work_item_id}/decision):显式 approve/reject,reject 必须落 ignored(失效)并同步 decision_records.final_outcome
  • 新增前端 API 调用:参考 frontend/src/api/sstc.ts
  • 新增数据库表:参考 alembic/versions/ 最新 migration
  • 新增飞书事件处理:参考 backend/app/services/feishu_integration.py

10. 幂等与事务约束

  • 所有入站事件必须经过 ingest_events 幂等去重
  • 飞书回复必须经过 feishu_reply_outbox,禁止同步直接发送
  • 飞书回复发送幂等:reply_hash = MD5(source_message_id + reply_text),同租户下 status=sent 的相同哈希不得重复发送
  • 跨表写操作必须在同一个数据库事务内完成

11. 已知 BOUNDARY(不要幻构行为)

  • 飞书回调字段可能缺失文件名/大小,仅保证 attachment_id/key/type 可用
  • agents.defaults.timeoutSeconds 在 OpenClaw 网关行为未验证,当前以 LLM_REQUEST_TIMEOUT 环境变量为准
  • World Model 静态层已接入 Redis 缓存(key: wm:static:{tenant_id}:{project_id},TTL 600s)
  • 写操作后主动 invalidate,动态层不缓存
  • AI PMO 意图识别已启用 LLM 主路径(AI_PMO_INTENT_LLM_ENABLED,默认开启);当模型超时/不可用/结构化解析失败时自动降级到规则链路,不中断主流程
  • 环境变量以根目录 .env / .env.example 为唯一配置源;backend/.env 已移除且不再读取
  • OpenClaw 路由规则统一由根目录 .openclaw/pmflow-routing-rules.json 管理,容器通过 OPENCLAW_ROUTING_RULES_PATH 相对路径 ../.openclaw/pmflow-routing-rules.json 读取
  • 模型命名统一使用裸模型名(如 GLM-4.7、MiniMax-M2.5),不使用供应商前缀模型名
  • 双 Agent 路由治理:默认启用 OPENCLAW_ROUTING_ENABLED=true、关闭 LLM_MIXED_ROUTING_ENABLED,复杂意图使用 classify_intent_complex 走 high-tier
  • 写操作链路统一产出 decision_trace(intent/tier/confidence/gate_code/correction_action)用于离线回放与分桶评分
  • AI PMO 意图仲裁默认开启(AI_PMO_INTENT_ARBITRATION_ENABLED=true):规则与 LLM 写操作冲突时按 AI_PMO_INTENT_CONFLICT_POLICY=pending_manual 强制进入人工确认,不直接自动执行
  • project.create 启用槽位完整性闸门:无法从指令提取有效项目名时标记 slot_incomplete 并进入人工确认
  • 数据库与核心写入链路统一使用北京时间(Asia/Shanghai):PostgreSQL 会话时区、数据库默认时区与核心 _utc_now* 写入入口均已切换到北京时间