2035 lines
60 KiB
Markdown
2035 lines
60 KiB
Markdown
---
|
||
allowed-tools: Read, Write, AskUserQuestion, Bash(date:*), Glob, Grep
|
||
description: 智能分析项目并生成 CLAUDE.md 规范文件(完全跨平台)
|
||
---
|
||
|
||
智能分析现有项目结构和配置文件,自动推断技术栈、架构模式等信息,**只对无法确定的信息进行询问**,最终生成项目的 CLAUDE.md 开发规范文件。
|
||
|
||
**核心特性**:
|
||
- 🔍 **智能分析**: 自动检测项目类型、语言、框架
|
||
- 💡 **按需询问**: 只对无法推断的信息询问用户
|
||
- 🎯 **数据优先**: 优先使用项目实际数据,避免猜测
|
||
- 🌐 **跨平台**: 完全兼容 Windows / macOS / Linux
|
||
|
||
---
|
||
|
||
## 内置模板
|
||
|
||
以下是用于生成 CLAUDE.md 的内置模板:
|
||
|
||
```template
|
||
# CLAUDE.md 模板
|
||
|
||
> 用于在新项目中快速建立开发规范和最佳实践。使用时请填充 `[占位符]` 部分。
|
||
|
||
---
|
||
|
||
## 项目概述
|
||
|
||
**[项目名称]** - [项目一句话描述]
|
||
|
||
### 核心技术栈
|
||
- **框架**: [框架名称和版本]
|
||
- **数据存储**: [数据库/缓存技术]
|
||
- **开发语言**: [语言和版本]
|
||
- **代码风格**: [命名规范]
|
||
|
||
### 项目架构
|
||
```
|
||
[绘制项目架构图]
|
||
例如:
|
||
API层 → Service层 → Logic层 → Data层 → Storage
|
||
```
|
||
|
||
**关键模块**:
|
||
- **[模块1]**: [路径] - [说明]
|
||
- **[模块2]**: [路径] - [说明]
|
||
|
||
---
|
||
|
||
## 测试规范
|
||
- 测试覆盖率 > 80%
|
||
- 使用 Mock 模拟外部依赖
|
||
- Mock 数据存放在 `test/data/` 目录
|
||
- 测试文件存放在 `test/` 目录
|
||
|
||
---
|
||
|
||
## 架构规则(强制)
|
||
|
||
### 层职责定义
|
||
- **[Layer 1]**: ✅ [应该做的] / ❌ [不应该做的]
|
||
- **[Layer 2]**: ✅ [应该做的] / ❌ [不应该做的]
|
||
|
||
### 开发规则
|
||
1. **命名规范** - [统一命名规范]
|
||
2. **依赖管理** - [依赖引入规则]
|
||
3. **错误处理** - [统一错误处理机制]
|
||
4. **版本控制** - Git提交必须使用 AskUserQuestion 工具询问用户同意
|
||
5. **禁止行为** - [明确禁止的操作]
|
||
|
||
### Claude Code 工具使用规范
|
||
|
||
**AI 必须使用的工具**:
|
||
- **AskUserQuestion**: 数据不足或需要决策时,必须主动询问用户
|
||
- **TodoWrite**: 跟踪多步骤任务的进度,及时更新任务状态
|
||
- **Read/Grep/Glob**: 修改前必须先分析现有代码,避免重复定义
|
||
|
||
**Token 管理规范(强制)**:
|
||
|
||
在开始每个 todo 任务前,必须评估剩余 token 是否足够完成该任务:
|
||
|
||
1. **评估标准**:
|
||
- 当前剩余 token < 30000:存在风险
|
||
- 当前剩余 token < 20000:高风险
|
||
- 当前剩余 token < 10000:极高风险
|
||
|
||
2. **风险处理流程**:
|
||
|
||
**如果存在风险**,必须使用 AskUserQuestion 工具询问用户:
|
||
|
||
```yaml
|
||
question: "⚠️ Token 预警:当前剩余 [X] tokens,即将开始「[Todo任务名称]」可能存在 token 不足风险。您希望如何处理?"
|
||
header: "Token 管理"
|
||
multiSelect: false
|
||
options:
|
||
- label: "继续执行当前任务"
|
||
description: "继续完成当前任务,可能需要在新会话中继续未完成的工作"
|
||
- label: "生成进度总结文档"
|
||
description: "生成包含当前进度总结和剩余待办事项实施方案的文档,便于在新会话中继续"
|
||
```
|
||
|
||
3. **生成进度总结文档**(用户选择选项 2 时):
|
||
|
||
创建文档:`docs/progress/YYYY-MM-DD-HH-MM-[任务名称]-进度总结.md`
|
||
|
||
文档必须包含:
|
||
```markdown
|
||
# [任务名称] - 进度总结与实施方案
|
||
|
||
**创建时间**: YYYY-MM-DD HH:MM
|
||
**当前状态**: 进行中
|
||
**完成度**: X/Y 个任务
|
||
|
||
---
|
||
|
||
## 一、已完成任务
|
||
|
||
### 1.1 任务清单
|
||
- [x] 任务 1 - 完成情况描述
|
||
- [x] 任务 2 - 完成情况描述
|
||
- [x] 任务 3 - 完成情况描述
|
||
|
||
### 1.2 关键成果
|
||
- **成果 1**: 具体内容和路径
|
||
- **成果 2**: 具体内容和路径
|
||
- **成果 3**: 具体内容和路径
|
||
|
||
### 1.3 已修改文件
|
||
```
|
||
path/to/file1.ext - 修改内容描述
|
||
path/to/file2.ext - 修改内容描述
|
||
```
|
||
|
||
---
|
||
|
||
## 二、剩余待办任务
|
||
|
||
### 2.1 待办清单
|
||
- [ ] 任务 4 - 详细描述
|
||
- [ ] 任务 5 - 详细描述
|
||
- [ ] 任务 6 - 详细描述
|
||
|
||
### 2.2 实施方案
|
||
|
||
#### 任务 4: [任务名称]
|
||
**目标**: [具体目标]
|
||
**步骤**:
|
||
1. [详细步骤 1]
|
||
2. [详细步骤 2]
|
||
3. [详细步骤 3]
|
||
|
||
**需要修改的文件**:
|
||
- `path/to/file1.ext` - [修改说明]
|
||
- `path/to/file2.ext` - [修改说明]
|
||
|
||
**注意事项**:
|
||
- [注意点 1]
|
||
- [注意点 2]
|
||
|
||
#### 任务 5: [任务名称]
|
||
... (同上格式)
|
||
|
||
---
|
||
|
||
## 三、技术背景和上下文
|
||
|
||
### 3.1 项目架构
|
||
[关键架构信息]
|
||
|
||
### 3.2 技术栈
|
||
[使用的技术栈]
|
||
|
||
### 3.3 重要约束
|
||
- [约束 1]
|
||
- [约束 2]
|
||
|
||
### 3.4 已知问题
|
||
- [问题 1 及解决方案]
|
||
- [问题 2 及解决方案]
|
||
|
||
---
|
||
|
||
## 四、继续工作指南
|
||
|
||
### 4.1 快速启动
|
||
在新会话中执行以下步骤:
|
||
1. 阅读本文档了解当前进度
|
||
2. 使用 TodoWrite 工具恢复任务列表
|
||
3. 从「任务 4」开始继续执行
|
||
|
||
### 4.2 验证检查清单
|
||
开始前请确认:
|
||
- [ ] 已理解所有已完成任务的内容
|
||
- [ ] 已查看所有修改过的文件
|
||
- [ ] 已理解剩余任务的实施方案
|
||
- [ ] 已了解技术背景和约束
|
||
|
||
---
|
||
|
||
**🤖 Generated with Claude Code**
|
||
```
|
||
|
||
4. **文档生成后**:
|
||
- 输出文档路径
|
||
- 提示用户在新会话中使用 `@文档路径` 继续工作
|
||
- 优雅结束当前会话
|
||
|
||
**最佳实践**:
|
||
- 定期评估 token 使用情况
|
||
- 在大型任务开始前进行评估
|
||
- 预留至少 15000 tokens 的安全边际
|
||
- 及时保存进度,避免工作丢失
|
||
|
||
---
|
||
|
||
## 核心开发实践(强制)
|
||
|
||
### 1. 代码修改前的分析(强制)
|
||
|
||
**所有代码修改前,必须先完成深度分析,理解项目架构后再设计方案。**
|
||
|
||
#### 调用链路分析要点
|
||
```
|
||
HTTP请求 → 路由 → Controller → Service → Logic → Data → Storage
|
||
```
|
||
|
||
必须分析:
|
||
- **入口点**: 请求从哪个API端点或界面进入
|
||
- **数据流转**: 数据在各层之间如何传递和转换
|
||
- **依赖关系**: 各组件之间的依赖
|
||
- **错误传播**: 错误如何在调用链中传播
|
||
- **缓存策略**: 缓存的读写时机
|
||
- **事务边界**: 数据一致性保证点
|
||
|
||
#### 方案设计原则:KISS
|
||
|
||
设计前必须回答4个问题:
|
||
1. **"这是真问题还是臆想的?"** - 拒绝过度设计
|
||
2. **"有更简单的方法吗?"** - 永远寻找最简方案
|
||
3. **"会破坏什么吗?"** - 向后兼容是铁律
|
||
4. **"真的需要这个功能吗?"** - 确认功能必要性
|
||
|
||
**性能要求**:
|
||
- 最小化数据库/缓存操作次数
|
||
- 优先使用批量操作
|
||
- 合理使用并发和异步
|
||
- 避免不必要的数据复制
|
||
|
||
**代码简洁性**:
|
||
- 能用30行解决,绝不写300行
|
||
- 复用现有代码
|
||
- 函数职责单一
|
||
|
||
#### 数据驱动的方案设计(强制)
|
||
|
||
**所有方案必须有充足的数据支撑**:
|
||
|
||
数据充足性判断:
|
||
- ✅ 是否完整理解现有代码实现逻辑?
|
||
- ✅ 是否掌握性能瓶颈数据?
|
||
- ✅ 是否了解用户实际使用场景?
|
||
- ✅ 是否分析业界最佳实践?
|
||
- ✅ 是否评估不同方案优劣?
|
||
|
||
**数据不足时的处理**:
|
||
```
|
||
⚠️ 我没有足够的信心设计最佳方案
|
||
|
||
需要以下数据:
|
||
1. [具体需要的数据1]
|
||
2. [具体需要的数据2]
|
||
...
|
||
|
||
请提供这些数据或告诉我如何获取。
|
||
```
|
||
|
||
**禁止**:
|
||
- ❌ 基于猜测或假设进行方案设计
|
||
- ❌ 数据不足时强行给出方案
|
||
- ❌ 使用"可能"、"也许"等不确定词汇描述关键决策
|
||
|
||
#### 方案审批流程(强制)
|
||
|
||
**在实施任何代码修改前,必须先获得用户审批**:
|
||
|
||
**工作流程**:
|
||
1. **分析阶段**:AI 使用只读工具(Read/Grep/Glob)深度分析代码
|
||
2. **方案设计**:制定详细的实施方案(见下方"方案文档要求")
|
||
3. **展示方案**:向用户清晰展示方案,等待批准
|
||
4. **执行修改**:获得批准后才开始实际修改代码
|
||
|
||
**方案文档要求**:
|
||
1. **提交方案设计文档**,包含:
|
||
- 完整调用链路分析
|
||
- 问题诊断和根因分析
|
||
- **支撑数据和分析**(必须包含)
|
||
- 方案设计(架构图、时序图、代码片段)
|
||
- KISS原则4问题的回答
|
||
- 性能影响评估
|
||
- 风险分析和缓解措施
|
||
- **文档保存**: 保存到 `docs/todo/YYYY-MM-DD-HH-MM-功能名称-方案.md`
|
||
|
||
2. **等待用户确认** - 批准后方可开始实施
|
||
|
||
3. **实施** - 严格按照批准方案执行
|
||
|
||
#### 分析检查清单
|
||
|
||
开始编码前必须完成:
|
||
- [ ] 已完整追踪调用链路
|
||
- [ ] 已理解所有涉及层的职责
|
||
- [ ] 已识别所有数据转换点
|
||
- [ ] 已回答KISS原则4个问题
|
||
- [ ] 已收集充足数据支撑方案
|
||
- [ ] 已制定详细实施方案
|
||
- [ ] 已获得用户审批确认
|
||
|
||
### 2. SOLID原则(强制执行)
|
||
|
||
**所有架构设计和代码实现必须遵循SOLID原则**:
|
||
|
||
#### 1. 单一职责原则(SRP - Single Responsibility Principle)
|
||
- **定义**:一个类/模块只负责一个功能领域的变化
|
||
- **实践要点**:
|
||
- 每个包/模块职责单一且清晰
|
||
- 工厂负责创建,适配器负责转换,具体实现负责执行
|
||
- 避免"上帝类"或"万能函数"
|
||
- 一个模块的修改原因只能有一个
|
||
|
||
#### 2. 开闭原则(OCP - Open-Closed Principle)
|
||
- **定义**:对扩展开放,对修改封闭
|
||
- **实践要点**:
|
||
- 添加新功能通过扩展实现,不修改现有代码
|
||
- 使用接口和抽象类定义扩展点
|
||
- 新增实现只需创建新文件,无需修改旧代码
|
||
- 避免使用大量 switch/if-else 判断类型
|
||
|
||
#### 3. 里氏替换原则(LSP - Liskov Substitution Principle)
|
||
- **定义**:子类必须能够替换父类而不影响程序正确性
|
||
- **实践要点**:
|
||
- 所有实现同一接口的类必须可互换
|
||
- 接口契约必须保持一致
|
||
- 不违反接口定义的前置条件和后置条件
|
||
- 调用方不应关心具体实现类型
|
||
|
||
#### 4. 接口隔离原则(ISP - Interface Segregation Principle)
|
||
- **定义**:客户端不应该依赖它不需要的接口
|
||
- **实践要点**:
|
||
- 接口应该小而专注,只包含必要方法
|
||
- 避免臃肿的接口定义
|
||
- 根据客户端需求定义最小接口
|
||
- 大接口应拆分为多个小接口
|
||
|
||
#### 5. 依赖倒置原则(DIP - Dependency Inversion Principle)
|
||
- **定义**:高层模块不应该依赖低层模块,两者都应该依赖抽象
|
||
- **实践要点**:
|
||
- 依赖接口而不是具体实现
|
||
- 通过依赖注入传递依赖
|
||
- 抽象层不依赖具体层
|
||
- 具体实现可以随时替换
|
||
|
||
#### SOLID原则检查清单
|
||
|
||
**设计新功能前必须回答**:
|
||
- [ ] **SRP**:每个模块的职责是否单一明确?
|
||
- [ ] **OCP**:添加新功能是否需要修改现有代码?
|
||
- [ ] **LSP**:所有实现是否可以互换使用?
|
||
- [ ] **ISP**:接口是否臃肿,是否包含不必要的方法?
|
||
- [ ] **DIP**:是否依赖抽象而不是具体实现?
|
||
|
||
**违反SOLID原则的后果**:
|
||
- 代码耦合度高,难以维护
|
||
- 功能扩展需要大量修改现有代码
|
||
- 测试困难,无法进行单元测试
|
||
- 技术债务快速累积
|
||
|
||
### 3. 功能版本迭代限制
|
||
|
||
**禁止版本迭代**: 对于存量功能,严格禁止版本迭代(v1、v2、v3)
|
||
|
||
**核心原则**:
|
||
- **就地更新**: 所有改进必须直接修改现有代码
|
||
- **用户主导**: 只有用户明确要求才能创建新版本
|
||
- **单一实现**: 每个功能只能有一个实现版本
|
||
- **向后兼容**: 必须保持向后兼容
|
||
- **清理废弃**: 必须版本迭代时同时清理旧代码
|
||
|
||
### 4. 任务解析与影响分析
|
||
|
||
**任务前置分析原则**: 执行任何任务前,必须先进行全面分析
|
||
|
||
#### 文件影响评估
|
||
- **主要修改文件**: 直接需要编辑的核心文件
|
||
- **关联影响文件**: 可能受影响需同步更新的文件
|
||
- **测试相关文件**: 需要更新或新增的测试文件
|
||
- **配置文件**: 可能需要调整的配置
|
||
|
||
#### 依赖关系分析
|
||
- **文件依赖**: 识别导入/引用关系
|
||
- **功能依赖**: 识别模块间调用关系
|
||
|
||
#### 重复定义检查
|
||
|
||
添加任何新定义前,必须先检查:
|
||
```bash
|
||
# 检查函数/类/接口定义
|
||
grep -r "functionName\|className" --include="*.[ext]"
|
||
```
|
||
|
||
**原则**: 避免重复实现,优先复用现有代码
|
||
|
||
### 5. 前置条件信任原则
|
||
|
||
**避免重复验证**: 信任调用链的前置条件
|
||
|
||
```[语言]
|
||
// ❌ 过度防御:重复验证已验证数据
|
||
function process(data) {
|
||
if (!data) return // 前层已验证
|
||
if (!data.field) return // 前层已验证
|
||
// ...
|
||
}
|
||
|
||
// ✅ 信任前置条件
|
||
function process(data) {
|
||
// 前置条件: 调用方已验证
|
||
const value = data.field
|
||
// 业务逻辑...
|
||
}
|
||
```
|
||
|
||
**分层职责**:
|
||
- **入口层**: 负责验证和防护
|
||
- **业务层**: 信任前置条件,专注业务
|
||
- **数据层**: 处理持久化,不做业务验证
|
||
|
||
---
|
||
|
||
## 交互规范(强制)
|
||
|
||
### 沟通原则
|
||
- **中文响应**: 所有响应使用中文
|
||
- **详细说明**: 提供清晰的操作步骤和说明
|
||
- **操作确认**: 重要操作前进行确认
|
||
- **透明度**: 如实汇报进度、问题和风险
|
||
|
||
### 主动提问机制(强制)
|
||
- **数据不足时提问**: 缺乏必要信息时,必须使用 `AskUserQuestion` 工具询问用户
|
||
- **明确性优先**: 遇到模糊需求时,通过提问明确用户意图
|
||
- **必须提问的场景**:
|
||
- 技术方案有多种实现路径需权衡时
|
||
- 需要删除或修改重要功能/数据时
|
||
- 配置参数会显著影响系统行为时
|
||
- 不确定用户具体需求时
|
||
- 设计决策可能影响架构或性能时
|
||
- 存在向后兼容性风险时
|
||
- **提问质量要求**:
|
||
- 问题应具体、聚焦
|
||
- 提供2-4个清晰选项
|
||
- 每个选项附带详细说明
|
||
- 说明各选项的影响和优缺点
|
||
- **等待确认**: 提问后必须等待用户回答
|
||
|
||
### 文件创建限制(强制)
|
||
- **禁止主动创建文档**: 不主动创建文档文件(*.md)或README,除非用户明确要求
|
||
- **优先编辑**: 优先编辑现有文件而非创建新文件
|
||
- **必要性原则**: 只创建绝对必要的文件
|
||
- **用户确认**: 创建新文件前必须征得用户同意
|
||
|
||
---
|
||
|
||
**最后更新**: [日期]
|
||
```
|
||
|
||
```monorepo-template
|
||
# CLAUDE.md 模板 (Monorepo)
|
||
|
||
> Monorepo 项目的统一开发规范和最佳实践。包含多个子项目的协作规范。
|
||
|
||
---
|
||
|
||
## 项目概述
|
||
|
||
**[项目名称]** - [项目一句话描述]
|
||
|
||
### 项目类型
|
||
|
||
**Monorepo** ([Monorepo类型]: 前后端分离 / 多服务架构 / Workspace 管理等)
|
||
|
||
### 项目架构(Monorepo)
|
||
|
||
**整体架构**:
|
||
```
|
||
Monorepo 根目录
|
||
├── [子项目1路径] - [子项目1名称] ([技术栈])
|
||
├── [子项目2路径] - [子项目2名称] ([技术栈])
|
||
└── [子项目N路径] - [子项目N名称] ([技术栈])
|
||
```
|
||
|
||
**子项目详情**:
|
||
|
||
#### [子项目1名称] (`[子项目1路径]`)
|
||
- **技术栈**: [框架] + [语言]
|
||
- **职责**: [项目职责描述]
|
||
- **主要目录**:
|
||
- `src/` - 源代码
|
||
- `test/` - 测试文件
|
||
- [其他关键目录]
|
||
- **数据存储**: [数据库/缓存技术]
|
||
- **架构模式**: [架构模式]
|
||
|
||
#### [子项目2名称] (`[子项目2路径]`)
|
||
- **技术栈**: [框架] + [语言]
|
||
- **职责**: [项目职责描述]
|
||
- **主要目录**:
|
||
- `src/` - 源代码
|
||
- `test/` - 测试文件
|
||
- [其他关键目录]
|
||
- **数据存储**: [数据库/缓存技术]
|
||
- **架构模式**: [架构模式]
|
||
|
||
**项目间关系**:
|
||
- [子项目1] → [子项目2]: [关系描述,如 API 调用]
|
||
- [子项目2] → [数据存储]: [关系描述]
|
||
|
||
### 核心技术栈
|
||
|
||
**整体技术栈**:
|
||
- **语言**: [所有使用的语言,去重]
|
||
- **框架**: [所有使用的框架,去重]
|
||
- **数据存储**: [所有数据存储技术,去重]
|
||
- **代码风格**: [统一的命名规范,或注明差异]
|
||
|
||
---
|
||
|
||
## 测试规范
|
||
- 各子项目测试覆盖率 > 80%
|
||
- 使用 Mock 模拟外部依赖和跨项目依赖
|
||
- Mock 数据存放在各子项目的 `test/data/` 目录
|
||
- 测试文件存放在各子项目的 `test/` 目录
|
||
- 集成测试放在根目录 `integration-tests/` 目录
|
||
|
||
---
|
||
|
||
## 架构规则(强制)
|
||
|
||
### Monorepo 管理规则
|
||
|
||
1. **子项目独立性**
|
||
- ✅ 每个子项目应该能独立构建和测试
|
||
- ✅ 子项目间的依赖应该明确声明
|
||
- ❌ 禁止直接引用其他子项目的内部实现
|
||
- ❌ 禁止循环依赖
|
||
|
||
2. **共享代码管理**
|
||
- ✅ 共享工具库放在 `packages/` 或 `libs/` 目录
|
||
- ✅ 共享类型定义统一管理
|
||
- ❌ 禁止复制粘贴代码到多个子项目
|
||
|
||
3. **版本控制策略**
|
||
- ✅ 使用统一的版本管理工具(如 Lerna、pnpm workspaces)
|
||
- ✅ 子项目版本同步或独立管理(根据实际情况)
|
||
|
||
### 层职责定义
|
||
|
||
**[子项目1名称]**:
|
||
- **[Layer 1]**: ✅ [应该做的] / ❌ [不应该做的]
|
||
- **[Layer 2]**: ✅ [应该做的] / ❌ [不应该做的]
|
||
|
||
**[子项目2名称]**:
|
||
- **[Layer 1]**: ✅ [应该做的] / ❌ [不应该做的]
|
||
- **[Layer 2]**: ✅ [应该做的] / ❌ [不应该做的]
|
||
|
||
### 开发规则
|
||
1. **命名规范** - [统一命名规范,或注明各子项目差异]
|
||
2. **依赖管理** - 使用 workspace 特性管理子项目间依赖
|
||
3. **错误处理** - [统一错误处理机制]
|
||
4. **版本控制** - Git提交必须使用 AskUserQuestion 工具询问用户同意
|
||
5. **禁止行为** - [明确禁止的操作]
|
||
- 禁止子项目间的紧耦合
|
||
- 禁止绕过 API 直接访问其他子项目的数据库
|
||
|
||
### Claude Code 工具使用规范
|
||
|
||
**AI 必须使用的工具**:
|
||
- **AskUserQuestion**: 数据不足或需要决策时,必须主动询问用户
|
||
- **TodoWrite**: 跟踪多步骤任务的进度,及时更新任务状态
|
||
- **Read/Grep/Glob**: 修改前必须先分析现有代码,避免重复定义
|
||
- **跨项目影响分析**: 修改子项目代码时,必须分析对其他子项目的影响
|
||
|
||
**Token 管理规范(强制)**:
|
||
|
||
在开始每个 todo 任务前,必须评估剩余 token 是否足够完成该任务:
|
||
|
||
1. **评估标准**:
|
||
- 当前剩余 token < 30000:存在风险
|
||
- 当前剩余 token < 20000:高风险
|
||
- 当前剩余 token < 10000:极高风险
|
||
|
||
2. **风险处理流程**:
|
||
|
||
**如果存在风险**,必须使用 AskUserQuestion 工具询问用户:
|
||
|
||
```yaml
|
||
question: "⚠️ Token 预警:当前剩余 [X] tokens,即将开始「[Todo任务名称]」可能存在 token 不足风险。您希望如何处理?"
|
||
header: "Token 管理"
|
||
multiSelect: false
|
||
options:
|
||
- label: "继续执行当前任务"
|
||
description: "继续完成当前任务,可能需要在新会话中继续未完成的工作"
|
||
- label: "生成进度总结文档"
|
||
description: "生成包含当前进度总结和剩余待办事项实施方案的文档,便于在新会话中继续"
|
||
```
|
||
|
||
3. **生成进度总结文档**(用户选择选项 2 时):
|
||
|
||
创建文档:`docs/progress/YYYY-MM-DD-HH-MM-[任务名称]-进度总结.md`
|
||
|
||
文档必须包含:
|
||
```markdown
|
||
# [任务名称] - 进度总结与实施方案
|
||
|
||
**创建时间**: YYYY-MM-DD HH:MM
|
||
**当前状态**: 进行中
|
||
**完成度**: X/Y 个任务
|
||
**项目类型**: Monorepo
|
||
|
||
---
|
||
|
||
## 一、已完成任务
|
||
|
||
### 1.1 任务清单
|
||
- [x] 任务 1 - 完成情况描述
|
||
- [x] 任务 2 - 完成情况描述
|
||
- [x] 任务 3 - 完成情况描述
|
||
|
||
### 1.2 关键成果
|
||
- **成果 1**: 具体内容和路径
|
||
- **成果 2**: 具体内容和路径
|
||
- **成果 3**: 具体内容和路径
|
||
|
||
### 1.3 已修改文件(Monorepo)
|
||
```
|
||
[子项目1]/path/to/file1.ext - 修改内容描述
|
||
[子项目2]/path/to/file2.ext - 修改内容描述
|
||
共享库/path/to/shared.ext - 修改内容描述
|
||
```
|
||
|
||
### 1.4 跨项目影响
|
||
- **[子项目1]**: 影响描述
|
||
- **[子项目2]**: 影响描述
|
||
- **共享代码**: 影响范围
|
||
|
||
---
|
||
|
||
## 二、剩余待办任务
|
||
|
||
### 2.1 待办清单
|
||
- [ ] 任务 4 - 详细描述(涉及子项目:[列表])
|
||
- [ ] 任务 5 - 详细描述(涉及子项目:[列表])
|
||
- [ ] 任务 6 - 详细描述(涉及子项目:[列表])
|
||
|
||
### 2.2 实施方案
|
||
|
||
#### 任务 4: [任务名称]
|
||
**目标**: [具体目标]
|
||
**涉及子项目**: [子项目列表]
|
||
|
||
**步骤**:
|
||
1. [详细步骤 1]
|
||
2. [详细步骤 2]
|
||
3. [详细步骤 3]
|
||
|
||
**需要修改的文件**:
|
||
- `[子项目1]/path/to/file1.ext` - [修改说明]
|
||
- `[子项目2]/path/to/file2.ext` - [修改说明]
|
||
- `共享库/path/to/shared.ext` - [修改说明]
|
||
|
||
**跨项目影响**:
|
||
- [子项目1]: [影响说明]
|
||
- [子项目2]: [影响说明]
|
||
|
||
**注意事项**:
|
||
- [注意点 1]
|
||
- [注意点 2]
|
||
|
||
#### 任务 5: [任务名称]
|
||
... (同上格式)
|
||
|
||
---
|
||
|
||
## 三、技术背景和上下文
|
||
|
||
### 3.1 Monorepo 架构
|
||
```
|
||
[展示 monorepo 结构和子项目关系]
|
||
```
|
||
|
||
### 3.2 子项目信息
|
||
- **[子项目1]**: [技术栈] - [职责]
|
||
- **[子项目2]**: [技术栈] - [职责]
|
||
|
||
### 3.3 重要约束
|
||
- [约束 1]
|
||
- [约束 2]
|
||
- [Monorepo 特定约束]
|
||
|
||
### 3.4 已知问题
|
||
- [问题 1 及解决方案]
|
||
- [问题 2 及解决方案]
|
||
|
||
---
|
||
|
||
## 四、继续工作指南
|
||
|
||
### 4.1 快速启动
|
||
在新会话中执行以下步骤:
|
||
1. 阅读本文档了解当前进度
|
||
2. 使用 TodoWrite 工具恢复任务列表
|
||
3. 从「任务 4」开始继续执行
|
||
4. 注意跨项目影响分析
|
||
|
||
### 4.2 验证检查清单
|
||
开始前请确认:
|
||
- [ ] 已理解所有已完成任务的内容
|
||
- [ ] 已查看所有修改过的文件(包括所有子项目)
|
||
- [ ] 已理解剩余任务的实施方案
|
||
- [ ] 已了解 Monorepo 架构和子项目关系
|
||
- [ ] 已了解跨项目影响范围
|
||
|
||
---
|
||
|
||
**🤖 Generated with Claude Code**
|
||
```
|
||
|
||
4. **文档生成后**:
|
||
- 输出文档路径
|
||
- 提示用户在新会话中使用 `@文档路径` 继续工作
|
||
- 优雅结束当前会话
|
||
|
||
**最佳实践**:
|
||
- 定期评估 token 使用情况
|
||
- 在大型任务开始前进行评估
|
||
- Monorepo 项目由于涉及多个子项目,通常需要更多 tokens
|
||
- 预留至少 20000 tokens 的安全边际
|
||
- 及时保存进度,避免工作丢失
|
||
|
||
---
|
||
|
||
## 核心开发实践(强制)
|
||
|
||
### 1. 代码修改前的分析(强制)
|
||
|
||
**所有代码修改前,必须先完成深度分析,理解 Monorepo 架构后再设计方案。**
|
||
|
||
#### 调用链路分析要点(Monorepo)
|
||
```
|
||
用户请求 → [子项目1入口] → [子项目1业务逻辑] → [跨项目API调用] → [子项目2] → [数据存储]
|
||
```
|
||
|
||
必须分析:
|
||
- **入口点**: 请求从哪个子项目的哪个端点进入
|
||
- **跨项目调用**: 数据如何在子项目间流转
|
||
- **依赖关系**: 各子项目之间的依赖
|
||
- **错误传播**: 错误如何跨项目传播
|
||
- **数据一致性**: 跨项目的事务和一致性保证
|
||
|
||
#### 方案设计原则: KISS
|
||
|
||
设计前必须回答4个问题:
|
||
1. **"这是真问题还是臆想的?"** - 拒绝过度设计
|
||
2. **"有更简单的方法吗?"** - 永远寻找最简方案
|
||
3. **"会破坏什么吗?"** - 向后兼容是铁律,考虑对所有子项目的影响
|
||
4. **"真的需要这个功能吗?"** - 确认功能必要性
|
||
|
||
**性能要求**:
|
||
- 最小化跨项目通信次数
|
||
- 优先使用批量操作
|
||
- 合理使用缓存减少跨项目调用
|
||
- 避免不必要的数据复制
|
||
|
||
**代码简洁性**:
|
||
- 能用30行解决,绝不写300行
|
||
- 复用现有代码和共享库
|
||
- 函数职责单一
|
||
|
||
#### 数据驱动的方案设计(强制)
|
||
|
||
**所有方案必须有充足的数据支撑**:
|
||
|
||
数据充足性判断:
|
||
- ✅ 是否完整理解现有代码实现逻辑?
|
||
- ✅ 是否掌握各子项目之间的调用关系?
|
||
- ✅ 是否了解跨项目的性能瓶颈?
|
||
- ✅ 是否分析业界 Monorepo 最佳实践?
|
||
- ✅ 是否评估不同方案优劣?
|
||
|
||
**数据不足时的处理**:
|
||
```
|
||
⚠️ 我没有足够的信心设计最佳方案
|
||
|
||
需要以下数据:
|
||
1. [具体需要的数据1]
|
||
2. [具体需要的数据2]
|
||
...
|
||
|
||
请提供这些数据或告诉我如何获取。
|
||
```
|
||
|
||
**禁止**:
|
||
- ❌ 基于猜测或假设进行方案设计
|
||
- ❌ 数据不足时强行给出方案
|
||
- ❌ 使用"可能"、"也许"等不确定词汇描述关键决策
|
||
- ❌ 忽视跨项目影响
|
||
|
||
#### 方案审批流程(强制)
|
||
|
||
**在实施任何代码修改前,必须先获得用户审批**:
|
||
|
||
**工作流程**:
|
||
1. **分析阶段**: AI 使用只读工具(Read/Grep/Glob)深度分析所有相关子项目的代码
|
||
2. **方案设计**: 制定详细的实施方案,包括跨项目影响分析
|
||
3. **展示方案**: 向用户清晰展示方案,等待批准
|
||
4. **执行修改**: 获得批准后才开始实际修改代码
|
||
|
||
**方案文档要求**:
|
||
1. **提交方案设计文档**,包含:
|
||
- 完整调用链路分析(包括跨项目调用)
|
||
- 问题诊断和根因分析
|
||
- **支撑数据和分析**(必须包含)
|
||
- 方案设计(架构图、时序图、代码片段)
|
||
- KISS原则4问题的回答
|
||
- 性能影响评估(特别是跨项目通信)
|
||
- **跨项目影响分析**(列出所有受影响的子项目)
|
||
- 风险分析和缓解措施
|
||
- **文档保存**: 保存到 `docs/todo/YYYY-MM-DD-HH-MM-功能名称-方案.md`
|
||
|
||
2. **等待用户确认** - 批准后方可开始实施
|
||
|
||
3. **实施** - 严格按照批准方案执行
|
||
|
||
#### 分析检查清单
|
||
|
||
开始编码前必须完成:
|
||
- [ ] 已完整追踪调用链路(包括跨项目调用)
|
||
- [ ] 已理解所有涉及子项目的职责
|
||
- [ ] 已识别所有跨项目数据传递点
|
||
- [ ] 已回答KISS原则4个问题
|
||
- [ ] 已收集充足数据支撑方案
|
||
- [ ] 已分析对所有子项目的影响
|
||
- [ ] 已制定详细实施方案
|
||
- [ ] 已获得用户审批确认
|
||
|
||
### 2. SOLID原则(强制执行)
|
||
|
||
**所有架构设计和代码实现必须遵循SOLID原则**:
|
||
|
||
**Monorepo 特别注意**:
|
||
- 在 Monorepo 中,SOLID 原则不仅适用于单个子项目内部,也适用于子项目之间的关系
|
||
- 子项目间的接口设计同样需要遵循 SOLID 原则
|
||
|
||
#### 1. 单一职责原则(SRP - Single Responsibility Principle)
|
||
- **定义**:一个类/模块只负责一个功能领域的变化
|
||
- **实践要点**:
|
||
- 每个包/模块职责单一且清晰
|
||
- 工厂负责创建,适配器负责转换,具体实现负责执行
|
||
- 避免"上帝类"或"万能函数"
|
||
- 一个模块的修改原因只能有一个
|
||
- **Monorepo 应用**:
|
||
- 每个子项目应该有明确且单一的职责
|
||
- 避免子项目职责过于复杂或模糊
|
||
|
||
#### 2. 开闭原则(OCP - Open-Closed Principle)
|
||
- **定义**:对扩展开放,对修改封闭
|
||
- **实践要点**:
|
||
- 添加新功能通过扩展实现,不修改现有代码
|
||
- 使用接口和抽象类定义扩展点
|
||
- 新增实现只需创建新文件,无需修改旧代码
|
||
- 避免使用大量 switch/if-else 判断类型
|
||
- **Monorepo 应用**:
|
||
- 添加新子项目不应该需要修改现有子项目
|
||
- 子项目间的 API 应该稳定,通过版本控制实现兼容
|
||
|
||
#### 3. 里氏替换原则(LSP - Liskov Substitution Principle)
|
||
- **定义**:子类必须能够替换父类而不影响程序正确性
|
||
- **实践要点**:
|
||
- 所有实现同一接口的类必须可互换
|
||
- 接口契约必须保持一致
|
||
- 不违反接口定义的前置条件和后置条件
|
||
- 调用方不应关心具体实现类型
|
||
- **Monorepo 应用**:
|
||
- 如果多个子项目实现相同的接口,它们应该可以互相替换
|
||
- 共享接口的契约必须严格遵守
|
||
|
||
#### 4. 接口隔离原则(ISP - Interface Segregation Principle)
|
||
- **定义**:客户端不应该依赖它不需要的接口
|
||
- **实践要点**:
|
||
- 接口应该小而专注,只包含必要方法
|
||
- 避免臃肿的接口定义
|
||
- 根据客户端需求定义最小接口
|
||
- 大接口应拆分为多个小接口
|
||
- **Monorepo 应用**:
|
||
- 子项目之间的 API 应该精简,只暴露必要的接口
|
||
- 避免一个子项目暴露过多不相关的功能
|
||
|
||
#### 5. 依赖倒置原则(DIP - Dependency Inversion Principle)
|
||
- **定义**:高层模块不应该依赖低层模块,两者都应该依赖抽象
|
||
- **实践要点**:
|
||
- 依赖接口而不是具体实现
|
||
- 通过依赖注入传递依赖
|
||
- 抽象层不依赖具体层
|
||
- 具体实现可以随时替换
|
||
- **Monorepo 应用**:
|
||
- 子项目之间应该通过定义良好的接口通信
|
||
- 避免直接依赖其他子项目的具体实现
|
||
- 使用共享接口定义实现解耦
|
||
|
||
#### SOLID原则检查清单
|
||
|
||
**设计新功能前必须回答**:
|
||
- [ ] **SRP**:每个模块的职责是否单一明确?(包括子项目级别)
|
||
- [ ] **OCP**:添加新功能是否需要修改现有代码?(包括其他子项目)
|
||
- [ ] **LSP**:所有实现是否可以互换使用?(包括跨子项目)
|
||
- [ ] **ISP**:接口是否臃肿,是否包含不必要的方法?(包括跨项目 API)
|
||
- [ ] **DIP**:是否依赖抽象而不是具体实现?(包括子项目间依赖)
|
||
|
||
**违反SOLID原则的后果**:
|
||
- 代码耦合度高,难以维护
|
||
- 功能扩展需要大量修改现有代码
|
||
- 子项目间紧耦合,难以独立开发和部署
|
||
- 测试困难,无法进行单元测试
|
||
- 技术债务快速累积
|
||
|
||
### 3. 功能版本迭代限制
|
||
|
||
**禁止版本迭代**: 对于存量功能,严格禁止版本迭代(v1、v2、v3)
|
||
|
||
**核心原则**:
|
||
- **就地更新**: 所有改进必须直接修改现有代码
|
||
- **用户主导**: 只有用户明确要求才能创建新版本
|
||
- **单一实现**: 每个功能只能有一个实现版本
|
||
- **向后兼容**: 必须保持向后兼容,考虑所有依赖该功能的子项目
|
||
- **清理废弃**: 必须版本迭代时同时清理旧代码
|
||
|
||
### 4. 任务解析与影响分析
|
||
|
||
**任务前置分析原则**: 执行任何任务前,必须先进行全面分析
|
||
|
||
#### 文件影响评估(Monorepo)
|
||
- **主要修改文件**: 直接需要编辑的核心文件
|
||
- **关联影响文件**: 同一子项目中可能受影响的文件
|
||
- **跨项目影响文件**: 其他子项目中可能受影响的文件
|
||
- **共享代码影响**: 共享库和工具的影响范围
|
||
- **测试相关文件**: 需要更新或新增的测试文件(包括集成测试)
|
||
- **配置文件**: 可能需要调整的配置
|
||
|
||
#### 依赖关系分析(Monorepo)
|
||
- **子项目内依赖**: 识别导入/引用关系
|
||
- **跨项目依赖**: 识别子项目间的调用关系
|
||
- **共享代码依赖**: 识别对共享库的依赖
|
||
|
||
#### 重复定义检查
|
||
|
||
添加任何新定义前,必须先检查所有子项目:
|
||
```bash
|
||
# 检查所有子项目中的函数/类/接口定义
|
||
grep -r "functionName\|className" --include="*.[ext]" [所有子项目路径]
|
||
```
|
||
|
||
**原则**: 避免重复实现,优先复用现有代码和共享库
|
||
|
||
### 5. 前置条件信任原则
|
||
|
||
**避免重复验证**: 信任调用链的前置条件
|
||
|
||
**分层职责**:
|
||
- **入口层**: 负责验证和防护(通常在面向用户的子项目)
|
||
- **业务层**: 信任前置条件,专注业务
|
||
- **数据层**: 处理持久化,不做业务验证
|
||
- **跨项目调用**: 调用其他子项目的 API 时,信任其已完成验证
|
||
|
||
---
|
||
|
||
## 交互规范(强制)
|
||
|
||
### 沟通原则
|
||
- **中文响应**: 所有响应使用中文
|
||
- **详细说明**: 提供清晰的操作步骤和说明
|
||
- **操作确认**: 重要操作前进行确认
|
||
- **透明度**: 如实汇报进度、问题和风险
|
||
- **跨项目影响说明**: 修改代码时明确说明对其他子项目的影响
|
||
|
||
### 主动提问机制(强制)
|
||
- **数据不足时提问**: 缺乏必要信息时,必须使用 `AskUserQuestion` 工具询问用户
|
||
- **明确性优先**: 遇到模糊需求时,通过提问明确用户意图
|
||
- **必须提问的场景**:
|
||
- 技术方案有多种实现路径需权衡时
|
||
- 需要删除或修改重要功能/数据时
|
||
- 修改可能影响多个子项目时
|
||
- 配置参数会显著影响系统行为时
|
||
- 不确定用户具体需求时
|
||
- 设计决策可能影响架构或性能时
|
||
- 存在跨项目向后兼容性风险时
|
||
- **提问质量要求**:
|
||
- 问题应具体、聚焦
|
||
- 提供2-4个清晰选项
|
||
- 每个选项附带详细说明
|
||
- 说明各选项的影响和优缺点(包括对各子项目的影响)
|
||
- **等待确认**: 提问后必须等待用户回答
|
||
|
||
### 文件创建限制(强制)
|
||
- **禁止主动创建文档**: 不主动创建文档文件(*.md)或README,除非用户明确要求
|
||
- **优先编辑**: 优先编辑现有文件而非创建新文件
|
||
- **必要性原则**: 只创建绝对必要的文件
|
||
- **用户确认**: 创建新文件前必须征得用户同意
|
||
|
||
---
|
||
|
||
## Monorepo 特定规范
|
||
|
||
### 跨项目通信规范
|
||
|
||
1. **API 调用规范**
|
||
- 使用明确定义的 API 接口
|
||
- API 变更必须遵循版本管理策略
|
||
- 禁止直接访问其他子项目的内部实现
|
||
|
||
2. **共享代码规范**
|
||
- 共享代码放在独立的包中
|
||
- 共享代码必须有完善的文档和测试
|
||
- 修改共享代码必须评估对所有依赖方的影响
|
||
|
||
3. **数据共享规范**
|
||
- 优先使用 API 传递数据
|
||
- 必要时可共享数据库,但需明确所有权
|
||
- 禁止直接读写其他子项目的数据表
|
||
|
||
### 构建和部署规范
|
||
|
||
1. **独立构建**: 每个子项目应该能独立构建
|
||
2. **依赖顺序**: 明确子项目的构建依赖顺序
|
||
3. **并行构建**: 利用 workspace 工具进行并行构建
|
||
4. **增量构建**: 只构建有变更的子项目
|
||
|
||
---
|
||
|
||
**最后更新**: [日期]
|
||
```
|
||
|
||
---
|
||
|
||
## 执行步骤
|
||
|
||
### 1. 前置检查
|
||
|
||
a. 检查当前目录是否已存在 CLAUDE.md 文件
|
||
- 使用 Read 工具尝试读取 ./CLAUDE.md
|
||
- 如果文件存在,使用 AskUserQuestion 询问用户是否要覆盖:
|
||
- 选项 1: "备份后覆盖"(推荐) - 将现有文件备份为 CLAUDE.md.backup-{timestamp}
|
||
- 选项 2: "直接覆盖" - 直接覆盖现有文件
|
||
- 选项 3: "取消操作" - 退出命令
|
||
- 如果用户选择取消,立即终止执行并输出提示信息
|
||
|
||
### 1.5 检测 Monorepo 结构
|
||
|
||
**目标**: 智能检测项目是否为 Monorepo(包含多个子项目)
|
||
|
||
#### a. 检测显式 Monorepo 配置
|
||
|
||
使用 Read 工具检查是否有 Monorepo 配置:
|
||
|
||
```bash
|
||
# 1. 检测 Node.js workspaces
|
||
Read package.json → 检查 workspaces 字段
|
||
- 如果存在 workspaces 数组 → isMonorepo = true, confidence = "high", type = "workspaces"
|
||
|
||
# 2. 检测 Lerna
|
||
Read lerna.json → 是否存在
|
||
- 如果存在 → isMonorepo = true, confidence = "high", type = "lerna"
|
||
|
||
# 3. 检测 Turborepo
|
||
Read turbo.json → 是否存在
|
||
- 如果存在 → isMonorepo = true, confidence = "high", type = "turborepo"
|
||
|
||
# 4. 检测 pnpm workspaces
|
||
Read pnpm-workspace.yaml → 是否存在
|
||
- 如果存在 → isMonorepo = true, confidence = "high", type = "pnpm-workspaces"
|
||
```
|
||
|
||
#### b. 检测典型目录结构
|
||
|
||
如果没有检测到显式配置,使用 Glob 检测常见目录组合:
|
||
|
||
```bash
|
||
# 检测前后端分离
|
||
Glob: frontend
|
||
Glob: backend
|
||
- 如果同时存在 → 检查是否有独立配置文件
|
||
- frontend/package.json 或 frontend/其他配置 存在
|
||
- backend/go.mod 或 backend/其他配置 存在
|
||
- 如果是 → isMonorepo = true, confidence = "medium", type = "frontend-backend"
|
||
|
||
# 检测 client-server 结构
|
||
Glob: client
|
||
Glob: server
|
||
- 同上逻辑
|
||
|
||
# 检测 web-api 结构
|
||
Glob: web
|
||
Glob: api
|
||
- 同上逻辑
|
||
|
||
# 检测 Node.js packages/apps 结构
|
||
Glob: packages/*/package.json
|
||
Glob: apps/*/package.json
|
||
- 如果找到多个(≥2个)子项目 → isMonorepo = true, confidence = "medium", type = "multi-packages"
|
||
|
||
# 检测 Go 多应用结构
|
||
Glob: cmd/*
|
||
- 如果 cmd 目录下有多个子目录(≥2个)
|
||
- 且根目录有 go.mod
|
||
- → isMonorepo = true, confidence = "medium", type = "go-multi-app"
|
||
|
||
# 检测 Python/其他多服务结构
|
||
Glob: services/*/
|
||
- 如果 services 目录下有多个子目录(≥2个)
|
||
- 且子目录包含配置文件
|
||
- → isMonorepo = true, confidence = "medium", type = "multi-services"
|
||
```
|
||
|
||
#### c. 检测多配置文件(兜底检测)
|
||
|
||
如果以上都未检测到,搜索所有配置文件:
|
||
|
||
```bash
|
||
# 搜索所有主要配置文件
|
||
Glob: **/package.json
|
||
Glob: **/go.mod
|
||
Glob: **/pyproject.toml
|
||
Glob: **/pom.xml
|
||
Glob: **/Cargo.toml
|
||
|
||
# 统计配置文件数量和位置
|
||
如果在不同的一级子目录中找到多个配置文件(≥2个):
|
||
- isMonorepo = true
|
||
- confidence = "low" # 需要用户确认
|
||
- type = "multi-project"
|
||
```
|
||
|
||
#### d. 结果记录
|
||
|
||
创建 Monorepo 检测结果数据结构:
|
||
|
||
```javascript
|
||
MonorepoDetection = {
|
||
isMonorepo: true/false,
|
||
confidence: "high" | "medium" | "low" | null,
|
||
type: "workspaces" | "lerna" | "turborepo" | "pnpm-workspaces" |
|
||
"frontend-backend" | "multi-packages" | "go-multi-app" |
|
||
"multi-services" | "multi-project" | null,
|
||
subProjectPaths: [
|
||
"frontend/",
|
||
"backend/",
|
||
// ... 其他子项目路径
|
||
]
|
||
}
|
||
```
|
||
|
||
#### e. 用户确认(confidence = "low" 时)
|
||
|
||
如果置信度为 "low",使用 AskUserQuestion 确认:
|
||
|
||
```yaml
|
||
使用 AskUserQuestion:
|
||
question: "检测到项目中有多个配置文件,这是一个包含多个子项目的 Monorepo 吗?"
|
||
header: "Monorepo 确认"
|
||
multiSelect: false
|
||
options:
|
||
- label: "是,这是一个 Monorepo"
|
||
description: "项目包含多个独立的子项目(如前端+后端)"
|
||
- label: "否,这是单个项目"
|
||
description: "按照单项目模式分析"
|
||
```
|
||
|
||
#### f. 输出检测结果
|
||
|
||
输出检测摘要:
|
||
|
||
```
|
||
🔍 项目结构检测完成!
|
||
|
||
📦 项目类型: [Monorepo / 单项目]
|
||
🔧 检测方式: [检测到的配置类型]
|
||
📂 子项目: [子项目数量] 个
|
||
- [子项目1路径]
|
||
- [子项目2路径]
|
||
...
|
||
```
|
||
|
||
### 2. 项目分析(智能推断)
|
||
|
||
**核心原则**: 数据驱动,避免猜测。通过分析项目文件自动推断信息,减少用户输入负担。
|
||
|
||
#### a. 检测项目类型
|
||
|
||
使用 Read 工具检查项目配置文件:
|
||
|
||
**Node.js/TypeScript 项目检测**:
|
||
```bash
|
||
检测文件: package.json
|
||
提取信息:
|
||
- 项目名称: name 字段
|
||
- 项目描述: description 字段
|
||
- 语言: 检查 devDependencies 中是否有 typescript
|
||
- 框架: 从 dependencies 推断
|
||
- "next" → Next.js
|
||
- "react" → React
|
||
- "vue" → Vue
|
||
- "express" → Express
|
||
- "nestjs" → NestJS
|
||
- 测试框架: 从 devDependencies 推断 (jest, vitest, mocha 等)
|
||
- 代码风格: 检查 eslintConfig, prettier 配置
|
||
```
|
||
|
||
**Go 项目检测**:
|
||
```bash
|
||
检测文件: go.mod
|
||
提取信息:
|
||
- 项目名称: module 声明
|
||
- 语言版本: go 版本行
|
||
- 框架: 从 require 推断
|
||
- "gin-gonic/gin" → Gin
|
||
- "labstack/echo" → Echo
|
||
- "gofiber/fiber" → Fiber
|
||
|
||
检测文件: go.sum (确认依赖)
|
||
```
|
||
|
||
**Python 项目检测**:
|
||
```bash
|
||
检测文件: pyproject.toml (优先) 或 requirements.txt 或 setup.py
|
||
提取信息:
|
||
- 项目名称: [project].name 或从目录名推断
|
||
- 语言版本: requires-python 字段
|
||
- 框架: 从依赖推断
|
||
- "fastapi" → FastAPI
|
||
- "django" → Django
|
||
- "flask" → Flask
|
||
- 测试框架: pytest, unittest 等
|
||
```
|
||
|
||
**Java 项目检测**:
|
||
```bash
|
||
检测文件: pom.xml 或 build.gradle
|
||
提取信息:
|
||
- 项目名称: artifactId 或 name
|
||
- 语言版本: Java version
|
||
- 框架: 从依赖推断
|
||
- "spring-boot" → Spring Boot
|
||
- "micronaut" → Micronaut
|
||
- "quarkus" → Quarkus
|
||
```
|
||
|
||
#### b. 分析项目结构
|
||
|
||
使用 Glob 工具列举项目目录,推断架构模式:
|
||
|
||
```bash
|
||
# 检测顶层目录
|
||
检测路径:
|
||
- src/, lib/, pkg/ (源代码目录)
|
||
- test/, tests/, __tests__/ (测试目录)
|
||
- docs/ (文档目录)
|
||
|
||
架构模式推断:
|
||
- 存在 src/controllers, src/services, src/models → 分层架构(MVC)
|
||
- 存在 src/api, src/service, src/logic, src/data → 分层架构(四层)
|
||
- 存在 packages/, services/, apps/ → 微服务架构
|
||
- 存在 functions/, lambda/ → Serverless
|
||
- 否则 → 单体应用
|
||
```
|
||
|
||
#### c. 分析代码风格
|
||
|
||
使用 Read 工具读取几个代码文件样本:
|
||
|
||
```bash
|
||
# 读取 2-3 个代码文件
|
||
# 分析变量命名模式
|
||
|
||
命名规范检测:
|
||
- 检测变量/函数名中的模式
|
||
- camelCase: 首字母小写 (userName, getUserData)
|
||
- PascalCase: 首字母大写 (UserName, GetUserData)
|
||
- snake_case: 下划线连接 (user_name, get_user_data)
|
||
|
||
Lint 配置检测:
|
||
- .eslintrc.* (JavaScript/TypeScript)
|
||
- .golangci.yml (Go)
|
||
- .flake8, pyproject.toml (Python)
|
||
- checkstyle.xml (Java)
|
||
```
|
||
|
||
#### d. 分析数据存储
|
||
|
||
使用 Grep 工具搜索数据库相关导入和配置:
|
||
|
||
```bash
|
||
# 搜索数据库导入语句
|
||
关键词:
|
||
- "mysql", "pg", "postgres" → PostgreSQL/MySQL
|
||
- "mongodb", "mongo" → MongoDB
|
||
- "redis" → Redis
|
||
- "elasticsearch", "es" → Elasticsearch
|
||
|
||
# 搜索配置文件
|
||
检查:
|
||
- docker-compose.yml (服务定义)
|
||
- .env.example (环境变量示例)
|
||
- config/ 目录下的配置文件
|
||
```
|
||
|
||
#### e. 检测测试配置
|
||
|
||
```bash
|
||
检测测试目录:
|
||
- test/, tests/, __tests__/ 是否存在
|
||
- 测试文件数量和覆盖情况
|
||
|
||
检测测试配置:
|
||
- jest.config.js, vitest.config.ts (JS/TS)
|
||
- go.mod 中的测试依赖
|
||
- pytest.ini, tox.ini (Python)
|
||
- pom.xml 中的测试配置 (Java)
|
||
|
||
推断测试要求:
|
||
- 存在完善测试配置 + 多个测试文件 → 建议 >80%
|
||
- 存在基础测试 → 建议 >60%
|
||
- 无测试 → 不强制要求
|
||
```
|
||
|
||
#### f. 记录推断结果
|
||
|
||
创建推断结果数据结构,记录每项信息的值和置信度:
|
||
|
||
```javascript
|
||
分析结果 = {
|
||
projectName: {
|
||
value: "从配置文件读取的名称",
|
||
source: "package.json",
|
||
confidence: "high" // high: 确定 | medium: 较确定 | low: 需确认 | none: 未检测到
|
||
},
|
||
projectDescription: {
|
||
value: "从配置文件读取的描述",
|
||
source: "package.json",
|
||
confidence: "medium" // 描述可能不准确,建议用户确认
|
||
},
|
||
language: {
|
||
value: "TypeScript 5.0+",
|
||
source: "package.json devDependencies",
|
||
confidence: "high"
|
||
},
|
||
framework: {
|
||
value: "Next.js",
|
||
source: "package.json dependencies",
|
||
confidence: "high"
|
||
},
|
||
storage: {
|
||
value: ["PostgreSQL", "Redis"],
|
||
source: "grep 搜索和 docker-compose.yml",
|
||
confidence: "medium"
|
||
},
|
||
architecture: {
|
||
value: "分层架构",
|
||
source: "目录结构分析",
|
||
confidence: "medium"
|
||
},
|
||
namingStyle: {
|
||
value: "驼峰命名(camelCase)",
|
||
source: "代码文件分析",
|
||
confidence: "high"
|
||
},
|
||
testCoverage: {
|
||
value: ">80%",
|
||
source: "测试配置和文件检测",
|
||
confidence: "medium"
|
||
},
|
||
gitApproval: {
|
||
value: null, // 这个需要用户决策
|
||
source: null,
|
||
confidence: "none"
|
||
}
|
||
}
|
||
```
|
||
|
||
#### g. 输出分析结果
|
||
|
||
输出分析摘要供用户查看:
|
||
|
||
```
|
||
🔍 项目分析完成!
|
||
|
||
📊 自动检测结果:
|
||
✅ 项目类型: TypeScript 项目 (来源: package.json)
|
||
✅ 项目名称: my-app (来源: package.json)
|
||
✅ 开发语言: TypeScript 5.0+ (来源: package.json)
|
||
✅ 主要框架: Next.js (来源: dependencies)
|
||
✅ 数据存储: PostgreSQL, Redis (来源: docker-compose.yml)
|
||
✅ 架构模式: 分层架构 (来源: 目录结构)
|
||
✅ 命名规范: 驼峰命名 (来源: 代码分析)
|
||
⚠️ 测试要求: 建议 >80% (来源: 测试配置)
|
||
|
||
❓ 需要您确认的信息:
|
||
- 项目描述 (自动检测可能不准确)
|
||
- Git 提交流程 (需要您的决策)
|
||
```
|
||
|
||
### 2.5 分析子项目(Monorepo 场景)
|
||
|
||
**仅在步骤 1.5 检测到 Monorepo 时执行此步骤**
|
||
|
||
#### a. 遍历子项目
|
||
|
||
对 MonorepoDetection.subProjectPaths 中的每个子项目路径执行分析:
|
||
|
||
```bash
|
||
对于每个子项目路径 (例如 "frontend/", "backend/"):
|
||
1. 进入子项目目录上下文(相对路径)
|
||
|
||
2. 检测项目类型(重复步骤 2.a 的逻辑,但在子目录中)
|
||
- 读取 [子项目路径]/package.json
|
||
- 读取 [子项目路径]/go.mod
|
||
- 读取 [子项目路径]/pyproject.toml
|
||
- 读取 [子项目路径]/pom.xml
|
||
- ... 其他配置文件
|
||
|
||
3. 提取项目信息(重复步骤 2.a 的逻辑)
|
||
- 项目名称
|
||
- 项目描述
|
||
- 语言和框架
|
||
- 测试框架
|
||
- 代码风格
|
||
|
||
4. 分析项目结构(重复步骤 2.b 的逻辑)
|
||
- 使用 Glob 列举子项目的子目录
|
||
- 推断子项目的架构模式
|
||
|
||
5. 分析代码风格(重复步骤 2.c 的逻辑)
|
||
- 读取子项目中的代码文件样本
|
||
|
||
6. 分析数据存储(重复步骤 2.d 的逻辑)
|
||
- 搜索数据库相关导入
|
||
- 检查子项目的配置文件
|
||
|
||
7. 检测测试配置(重复步骤 2.e 的逻辑)
|
||
- 检测子项目的测试目录
|
||
- 检测子项目的测试配置
|
||
```
|
||
|
||
#### b. 汇总子项目分析结果
|
||
|
||
创建子项目分析结果数据结构:
|
||
|
||
```javascript
|
||
SubProjectsAnalysis = [
|
||
{
|
||
path: "frontend/",
|
||
projectName: {
|
||
value: "Web Frontend",
|
||
source: "frontend/package.json",
|
||
confidence: "high"
|
||
},
|
||
projectDescription: {
|
||
value: "用户界面应用",
|
||
source: "frontend/package.json",
|
||
confidence: "medium"
|
||
},
|
||
language: {
|
||
value: "TypeScript 5.0+",
|
||
source: "frontend/package.json",
|
||
confidence: "high"
|
||
},
|
||
framework: {
|
||
value: "Next.js 14",
|
||
source: "frontend/package.json dependencies",
|
||
confidence: "high"
|
||
},
|
||
architecture: {
|
||
value: "组件化架构",
|
||
source: "目录结构分析",
|
||
confidence: "medium"
|
||
},
|
||
namingStyle: {
|
||
value: "驼峰命名 (camelCase)",
|
||
source: "代码分析",
|
||
confidence: "high"
|
||
},
|
||
storage: {
|
||
value: null,
|
||
source: null,
|
||
confidence: "none" // 前端通常不直接访问数据库
|
||
},
|
||
testCoverage: {
|
||
value: ">80%",
|
||
source: "测试配置",
|
||
confidence: "medium"
|
||
}
|
||
},
|
||
{
|
||
path: "backend/",
|
||
projectName: {
|
||
value: "API Server",
|
||
source: "backend/go.mod",
|
||
confidence: "high"
|
||
},
|
||
projectDescription: {
|
||
value: "RESTful API 服务",
|
||
source: "推断",
|
||
confidence: "low"
|
||
},
|
||
language: {
|
||
value: "Go 1.21+",
|
||
source: "backend/go.mod",
|
||
confidence: "high"
|
||
},
|
||
framework: {
|
||
value: "Gin",
|
||
source: "backend/go.mod require",
|
||
confidence: "high"
|
||
},
|
||
architecture: {
|
||
value: "分层架构",
|
||
source: "目录结构分析",
|
||
confidence: "medium"
|
||
},
|
||
namingStyle: {
|
||
value: "驼峰命名 (camelCase)",
|
||
source: "代码分析",
|
||
confidence: "high"
|
||
},
|
||
storage: {
|
||
value: ["PostgreSQL", "Redis"],
|
||
source: "grep 搜索和配置文件",
|
||
confidence: "medium"
|
||
},
|
||
testCoverage: {
|
||
value: ">80%",
|
||
source: "测试配置",
|
||
confidence: "medium"
|
||
}
|
||
}
|
||
// ... 其他子项目
|
||
]
|
||
```
|
||
|
||
#### c. 推断项目间关系
|
||
|
||
基于子项目类型和配置,推断项目间的关系:
|
||
|
||
```javascript
|
||
ProjectRelations = [
|
||
{
|
||
from: "frontend/",
|
||
to: "backend/",
|
||
relation: "API 调用",
|
||
confidence: "high", // 基于前端是 web 应用,后端是 API 服务
|
||
description: "前端通过 HTTP API 调用后端服务"
|
||
}
|
||
// 可以根据配置文件中的 API 地址等信息进一步确认
|
||
]
|
||
```
|
||
|
||
#### d. 限制子项目数量
|
||
|
||
为了保证性能和可维护性:
|
||
|
||
```bash
|
||
如果检测到的子项目数量 > 10:
|
||
使用 AskUserQuestion 让用户选择:
|
||
question: "检测到 [数量] 个子项目,数量较多。您希望如何处理?"
|
||
header: "子项目数量"
|
||
multiSelect: false
|
||
options:
|
||
- label: "分析前 10 个子项目"
|
||
description: "只分析最重要的 10 个子项目"
|
||
- label: "让我手动选择"
|
||
description: "展示所有子项目,让我选择要分析的"
|
||
- label: "全部分析(不推荐)"
|
||
description: "可能需要较长时间"
|
||
```
|
||
|
||
#### e. 输出子项目分析摘要
|
||
|
||
```
|
||
📦 Monorepo 子项目分析完成!
|
||
|
||
共检测到 [数量] 个子项目:
|
||
|
||
📂 frontend/ - Web Frontend
|
||
✅ 语言: TypeScript 5.0+
|
||
✅ 框架: Next.js 14
|
||
✅ 架构: 组件化架构
|
||
|
||
📂 backend/ - API Server
|
||
✅ 语言: Go 1.21+
|
||
✅ 框架: Gin
|
||
✅ 架构: 分层架构
|
||
✅ 数据: PostgreSQL, Redis
|
||
|
||
🔗 项目关系:
|
||
frontend/ → backend/ (API 调用)
|
||
```
|
||
|
||
### 3. 智能信息收集
|
||
|
||
根据项目分析结果,**只对置信度低或无法推断的信息进行询问**。
|
||
|
||
#### 询问策略:
|
||
|
||
**A. confidence = "high" 的信息**:
|
||
- ✅ 直接使用,不询问
|
||
- 在最终确认时展示给用户
|
||
|
||
**B. confidence = "medium" 的信息**:
|
||
- ⚠️ 作为推荐选项,但仍询问用户确认
|
||
- 在选项中标注 "(已检测)"
|
||
|
||
**C. confidence = "low" 或 "none" 的信息**:
|
||
- ❌ 必须询问用户
|
||
- 提供常见选项供选择
|
||
|
||
#### 询问示例:
|
||
|
||
**场景 1: 项目名称 confidence="high"**
|
||
```
|
||
不询问,直接使用检测到的值
|
||
```
|
||
|
||
**场景 2: 项目描述 confidence="medium"**
|
||
```yaml
|
||
使用 AskUserQuestion:
|
||
question: "请确认项目描述:"
|
||
header: "项目描述"
|
||
multiSelect: false
|
||
options:
|
||
- label: "使用检测到的描述 (已检测)"
|
||
description: "Web application for user management"
|
||
- label: "Web 应用后端服务"
|
||
description: "提供 RESTful API 的后端服务"
|
||
- Other: 自定义描述
|
||
```
|
||
|
||
**场景 3: 数据存储 confidence="medium"**
|
||
```yaml
|
||
使用 AskUserQuestion:
|
||
question: "请确认项目使用的数据存储技术(可多选):"
|
||
header: "数据存储"
|
||
multiSelect: true
|
||
options:
|
||
- label: "PostgreSQL (已检测)"
|
||
description: "关系型数据库"
|
||
- label: "Redis (已检测)"
|
||
description: "缓存系统"
|
||
- label: "MySQL"
|
||
description: "关系型数据库"
|
||
- Other: 其他存储技术
|
||
```
|
||
|
||
**场景 4: Git 提交流程 confidence="none"**
|
||
```yaml
|
||
使用 AskUserQuestion:
|
||
question: "Git 提交是否需要审批确认?"
|
||
header: "提交规范"
|
||
multiSelect: false
|
||
options:
|
||
- label: "需要(使用 AskUserQuestion)"
|
||
description: "提交前必须询问用户确认"
|
||
- label: "不需要"
|
||
description: "允许直接提交"
|
||
```
|
||
|
||
#### 分批询问流程:
|
||
|
||
根据实际需要询问的问题数量,灵活分批:
|
||
|
||
**如果需要询问 0-2 个问题**: 一次性询问
|
||
**如果需要询问 3-5 个问题**: 分 2 批询问
|
||
**如果需要询问 6+ 个问题**: 分 3-4 批询问
|
||
|
||
**优先级排序**:
|
||
1. 高优先级: 项目描述、架构模式 (影响模板填充)
|
||
2. 中优先级: 数据存储、命名规范 (可能影响规范细节)
|
||
3. 低优先级: 测试要求、Git 提交规范 (配置项)
|
||
|
||
#### Monorepo 策略询问(仅 Monorepo 场景):
|
||
|
||
**仅在步骤 1.5 检测到 Monorepo 时执行**
|
||
|
||
在完成常规信息收集后,询问用户如何生成 CLAUDE.md:
|
||
|
||
```yaml
|
||
使用 AskUserQuestion:
|
||
question: "检测到这是一个 Monorepo 项目,包含 [数量] 个子项目。您希望如何生成 CLAUDE.md?"
|
||
header: "Monorepo 策略"
|
||
multiSelect: false
|
||
options:
|
||
- label: "只在根目录生成统一的 CLAUDE.md(推荐)"
|
||
description: "生成一个包含所有子项目信息的统一规范文件,便于整体管理"
|
||
- label: "为每个子项目生成独立的 CLAUDE.md"
|
||
description: "在根目录和每个子项目目录都生成独立的 CLAUDE.md,便于各自开发"
|
||
- label: "仅为根目录生成,忽略子项目"
|
||
description: "按照单项目模式生成,不体现子项目信息"
|
||
```
|
||
|
||
记录用户选择:
|
||
- 选项 1 → userStrategy = "unified"
|
||
- 选项 2 → userStrategy = "separate"
|
||
- 选项 3 → userStrategy = "ignore"
|
||
|
||
### 4. 生成 CLAUDE.md
|
||
|
||
根据分析结果和用户确认的信息,执行以下步骤:
|
||
|
||
**判断项目类型**:
|
||
- 如果是单项目 或 userStrategy = "ignore" → 使用**单项目模板**
|
||
- 如果是 Monorepo 且 userStrategy = "unified" → 使用**Monorepo 统一模板**
|
||
- 如果是 Monorepo 且 userStrategy = "separate" → 使用**Monorepo 统一模板 + 子项目模板**
|
||
|
||
#### 4.1 单项目场景
|
||
|
||
a. 从"内置模板"部分提取**单项目模板**内容(```template 和 ``` 之间的内容)
|
||
|
||
b. 创建变量映射表并进行字符串替换:
|
||
- `[项目名称]` → 分析结果中的项目名称(或用户输入)
|
||
- `[项目一句话描述]` → 分析结果中的项目描述(或用户输入)
|
||
- `[框架名称和版本]` → 分析结果中的框架(或用户选择)
|
||
- `[数据库/缓存技术]` → 分析结果中的数据存储(多个则用逗号连接)
|
||
- `[语言和版本]` → 分析结果中的开发语言(或用户选择)
|
||
- `[命名规范]` → 分析结果中的代码风格(或用户选择)
|
||
|
||
c. 添加生成时间戳:
|
||
- 使用 Bash date 命令获取当前日期
|
||
- 替换模板最后的 `[日期]` 为实际日期(格式:YYYY-MM-DD)
|
||
|
||
d. 根据分析结果和用户配置,调整对应章节:
|
||
- 如果测试覆盖率选择"不强制要求",修改"测试规范"章节,删除覆盖率要求
|
||
- 如果 Git 提交选择"不需要"审批,修改"版本控制"规则,移除 AskUserQuestion 要求
|
||
|
||
#### 4.2 Monorepo 场景(unified 或 separate)
|
||
|
||
a. 从"内置模板"部分提取**Monorepo 模板**内容(```monorepo-template 和 ``` 之间的内容)
|
||
|
||
b. 创建根项目变量映射并替换:
|
||
- `[项目名称]` → 根项目名称
|
||
- `[项目一句话描述]` → 根项目描述
|
||
- `[Monorepo类型]` → 检测到的类型(如 "前后端分离"、"多服务架构"等)
|
||
- `[子项目数量]` → SubProjectsAnalysis 的长度
|
||
|
||
c. 生成子项目信息部分:
|
||
|
||
```markdown
|
||
### 项目架构(Monorepo)
|
||
|
||
**项目类型**: Monorepo ([Monorepo类型])
|
||
|
||
**整体架构**:
|
||
```
|
||
Monorepo 根目录
|
||
├── [子项目1路径] - [子项目1名称] ([技术栈])
|
||
├── [子项目2路径] - [子项目2名称] ([技术栈])
|
||
└── [子项目N路径] - [子项目N名称] ([技术栈])
|
||
```
|
||
|
||
**子项目详情**:
|
||
|
||
#### [子项目1名称] (`[子项目1路径]`)
|
||
- **技术栈**: [框架] + [语言]
|
||
- **职责**: [从描述推断或用户提供]
|
||
- **主要目录**: [从分析结果提取]
|
||
- **数据存储**: [如果有]
|
||
- **架构模式**: [分析结果]
|
||
|
||
#### [子项目2名称] (`[子项目2路径]`)
|
||
...
|
||
|
||
**项目间关系**:
|
||
[根据 ProjectRelations 生成]
|
||
- [子项目1] → [子项目2]: [关系描述]
|
||
```
|
||
|
||
d. 生成核心技术栈部分(汇总所有子项目):
|
||
|
||
```markdown
|
||
### 核心技术栈
|
||
|
||
**整体技术栈**:
|
||
- **语言**: [去重后的所有语言]
|
||
- **框架**: [去重后的所有框架]
|
||
- **数据存储**: [去重后的所有数据存储]
|
||
- **代码风格**: [统一或列举差异]
|
||
```
|
||
|
||
e. 添加生成时间戳
|
||
|
||
f. 调整开发规范章节:
|
||
- 保留通用的开发规范
|
||
- 在必要时添加子项目特定的说明
|
||
|
||
#### 4.3 Monorepo separate 场景(额外步骤)
|
||
|
||
如果 userStrategy = "separate",为每个子项目生成独立的 CLAUDE.md:
|
||
|
||
对于每个子项目:
|
||
1. 使用单项目模板
|
||
2. 填充该子项目的分析数据
|
||
3. 添加"父项目引用"章节:
|
||
```markdown
|
||
## 父项目
|
||
|
||
本项目是 [根项目名称] Monorepo 的一部分。
|
||
|
||
**位置**: `[子项目路径]`
|
||
**其他子项目**: [列出其他子项目]
|
||
|
||
完整项目规范请参考根目录的 CLAUDE.md。
|
||
```
|
||
4. 记录要写入的文件路径:[子项目路径]/CLAUDE.md
|
||
|
||
### 5. 文件写入
|
||
|
||
#### 5.1 备份现有文件(如需要)
|
||
|
||
a. 如果用户在步骤 1 中选择了"备份后覆盖":
|
||
- 使用 Bash date 命令生成时间戳(格式:YYYYMMDDHHmmss)
|
||
- 使用 Read 工具读取现有的 CLAUDE.md
|
||
- 使用 Write 工具将内容写入 CLAUDE.md.backup-{timestamp}
|
||
- 输出备份成功信息
|
||
|
||
#### 5.2 写入根目录 CLAUDE.md
|
||
|
||
b. 使用 Write 工具将生成的内容写入 ./CLAUDE.md 文件
|
||
|
||
#### 5.3 写入子项目 CLAUDE.md(仅 separate 场景)
|
||
|
||
如果 userStrategy = "separate":
|
||
- 对每个子项目路径
|
||
- 使用 Write 工具将子项目的 CLAUDE.md 写入 [子项目路径]/CLAUDE.md
|
||
- 输出每个文件的写入成功信息
|
||
|
||
### 6. 确认完成
|
||
|
||
输出成功信息,展示完整的配置信息:
|
||
|
||
#### 6.1 单项目场景
|
||
|
||
```
|
||
✅ 项目规范文件生成成功!
|
||
|
||
📄 文件位置: ./CLAUDE.md
|
||
📅 生成时间: {当前时间}
|
||
|
||
📊 项目配置摘要:
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
✅ 项目名称: {项目名称}
|
||
✅ 项目描述: {项目描述}
|
||
✅ 开发语言: {语言和版本}
|
||
✅ 主要框架: {框架}
|
||
✅ 数据存储: {数据存储技术}
|
||
✅ 架构模式: {架构模式}
|
||
✅ 命名规范: {命名规范}
|
||
✅ 测试要求: {测试覆盖率}
|
||
✅ Git 提交: {是否需要审批}
|
||
|
||
🎯 自动检测项数: {检测成功的项数}/{总项数}
|
||
|
||
💡 下一步操作:
|
||
1. 查看生成的 CLAUDE.md 文件
|
||
2. 根据项目实际情况调整细节
|
||
3. 提交到版本控制系统
|
||
|
||
🤖 Generated with Claude Code
|
||
```
|
||
|
||
#### 6.2 Monorepo 场景(unified)
|
||
|
||
```
|
||
✅ Monorepo 项目规范文件生成成功!
|
||
|
||
📄 文件位置: ./CLAUDE.md
|
||
📅 生成时间: {当前时间}
|
||
|
||
📦 Monorepo 信息:
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
🏗️ 项目类型: Monorepo ({Monorepo类型})
|
||
📂 子项目数: {子项目数量}
|
||
|
||
📊 子项目摘要:
|
||
{对每个子项目}
|
||
📂 {子项目路径} - {子项目名称}
|
||
✅ 语言: {语言}
|
||
✅ 框架: {框架}
|
||
✅ 架构: {架构模式}
|
||
|
||
🔗 项目关系:
|
||
{项目间关系列表}
|
||
|
||
🎯 自动检测项数: {检测成功的项数}/{总项数}
|
||
|
||
💡 下一步操作:
|
||
1. 查看生成的 CLAUDE.md 文件
|
||
2. 根据各子项目实际情况调整细节
|
||
3. 提交到版本控制系统
|
||
|
||
🤖 Generated with Claude Code
|
||
```
|
||
|
||
#### 6.3 Monorepo 场景(separate)
|
||
|
||
```
|
||
✅ Monorepo 项目规范文件生成成功!
|
||
|
||
📄 生成的文件:
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
📄 ./CLAUDE.md (根目录统一规范)
|
||
📄 {子项目1路径}/CLAUDE.md
|
||
📄 {子项目2路径}/CLAUDE.md
|
||
...
|
||
|
||
📅 生成时间: {当前时间}
|
||
|
||
📦 Monorepo 信息:
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
🏗️ 项目类型: Monorepo ({Monorepo类型})
|
||
📂 子项目数: {子项目数量}
|
||
|
||
📊 子项目摘要:
|
||
{对每个子项目}
|
||
📂 {子项目路径} - {子项目名称}
|
||
✅ 语言: {语言}
|
||
✅ 框架: {框架}
|
||
✅ 架构: {架构模式}
|
||
✅ 独立规范: {子项目路径}/CLAUDE.md
|
||
|
||
🎯 自动检测项数: {检测成功的项数}/{总项数}
|
||
|
||
💡 下一步操作:
|
||
1. 查看根目录的 CLAUDE.md(整体规范)
|
||
2. 查看各子项目的 CLAUDE.md(特定规范)
|
||
3. 根据实际情况调整细节
|
||
4. 提交到版本控制系统
|
||
|
||
🤖 Generated with Claude Code
|
||
```
|
||
|
||
---
|
||
|
||
## 跨平台兼容性说明
|
||
|
||
此命令已优化为完全跨平台兼容:
|
||
|
||
### ✅ 跨平台特性
|
||
|
||
1. **内置模板** - 不需要读取外部文件,避免路径问题
|
||
2. **Claude Code 工具** - 仅使用跨平台的内置工具
|
||
- Read/Write: 文件读写
|
||
- Glob: 文件查找(跨平台模式匹配)
|
||
- Grep: 内容搜索(跨平台正则表达式)
|
||
- AskUserQuestion: 用户交互
|
||
- Bash date: 时间戳生成(Windows/Mac/Linux 均支持)
|
||
3. **最小依赖** - 仅依赖标准工具,无需额外安装
|
||
4. **相对路径** - 使用 `./CLAUDE.md` 相对路径,适配所有系统
|
||
|
||
### 🖥️ 系统支持
|
||
|
||
- ✅ **Windows**: 完全支持(包括 CMD 和 PowerShell)
|
||
- ✅ **macOS**: 完全支持
|
||
- ✅ **Linux**: 完全支持
|
||
- ✅ **WSL**: 完全支持
|
||
|
||
### 📝 核心改进
|
||
|
||
1. **智能分析优先**:
|
||
- 自动检测项目配置文件(package.json, go.mod, pyproject.toml 等)
|
||
- 智能推断技术栈、架构模式、代码风格
|
||
- 减少用户输入负担,提升体验
|
||
|
||
2. **数据驱动决策**:
|
||
- 基于实际项目数据进行推断
|
||
- 避免猜测和假设
|
||
- 置信度评估确保准确性
|
||
|
||
3. **按需询问**:
|
||
- 只对无法确定的信息询问用户
|
||
- 提供检测到的值作为推荐选项
|
||
- 灵活的分批询问策略
|
||
|
||
4. **错误处理**:
|
||
- 文件读写失败时,提供清晰的错误信息
|
||
- 权限不足时,建议用户检查目录权限
|
||
- 用户输入验证(避免空值)
|
||
|
||
5. **灵活性**:
|
||
- 支持空项目(使用传统询问模式)
|
||
- 支持已有项目(智能分析模式)
|
||
- 允许用户覆盖自动检测的结果
|
||
|
||
6. **向后兼容**:
|
||
- 备份机制确保不会丢失现有配置
|
||
- 提供清晰的操作提示和确认
|
||
|
||
7. **遵循 KISS 原则**:
|
||
- 不进行过度验证
|
||
- 不添加不必要的功能
|
||
- 专注于核心任务:分析项目 → 收集信息 → 生成文件
|
||
|
||
### 🎯 最佳实践
|
||
|
||
**对于新项目(空目录)**:
|
||
- 命令会检测到没有配置文件
|
||
- 自动切换到询问模式
|
||
- 引导用户完成所有配置
|
||
|
||
**对于已有项目**:
|
||
- 命令会自动分析项目文件
|
||
- 提取尽可能多的信息
|
||
- 只对不确定的信息进行询问
|
||
- 展示分析结果供用户确认
|
||
|
||
**最佳工作流程**:
|
||
1. 在项目根目录运行命令
|
||
2. 查看自动分析结果
|
||
3. 确认或修改推断的信息
|
||
4. 生成规范文件
|
||
5. 根据实际需求微调细节
|