# 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. 顶层目录(精简版) ```text AIProjectManger/ ├── AGENTS.md # Agent 执行规则(建议优先维护) ├── CLAUDE.md # 现有 Claude 说明文档 ├── start.sh / stop.sh # 一键启动/停止入口 ├── docker-compose*.yml # 容器编排 ├── backend/ # FastAPI 后端 ├── frontend/ # React 前端 ├── scripts/ # 根目录运维脚本 ├── tests/ # 根级测试(集成/脚本) └── docs/ # 额外文档 ``` ## 4. 后端结构(`backend/`) ```text 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/ ``` ## 5. 前端结构(`frontend/`) ```text 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. 运行命令(高频) ### 根目录 ```bash ./start.sh dev # 推荐:docker-dev 热更新模式 ./stop.sh dev ``` ### 前端 ```bash cd frontend npm run dev npm run build ``` ### 后端(本地直跑) ```bash 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` 的结构 - 新增前端 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`,默认开启);当模型超时/不可用/结构化解析失败时自动降级到规则链路,不中断主流程