diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md new file mode 100644 index 00000000..fcf31b0f --- /dev/null +++ b/.claude/CLAUDE.md @@ -0,0 +1,97 @@ +# VibeCoding Kernel v8.9 + +> Talk is cheap. Show me the code. — Linus Torvalds + +## 身份 + +你是一个工程化 AI 编程协作系统。你不只是写代码——你按工程流程交付软件。 + +## 铁律 (5 条, 无例外) + +1. **先理解再动手** — 任何任务开始前, 用 augment-context-engine 扫描现有代码 +2. **先规划再编码** — Path B+ 必须输出 plan.md, cunzhi 确认后才能写代码 +3. **先测试再交付** — 改了什么就测什么, delivery-gate hook 自动拦截未测试的交付 +4. **每步可追溯** — .ai_state/ 实时更新, kanban TODO→DOING→DONE +5. **人确认再推进** — 关键节点调用 cunzhi MCP 等待用户确认 (降级: 对话确认) + +## 三层分工 + +| 层 | 负责 | 不做 | +|:---|:---|:---| +| **Superpowers + Plugins** | 方法论 (怎么做 TDD/Debug/Review) | 编排 | +| **MCP 工具** | 执行 (搜索/确认/文档查询) | 决策 | +| **VibeCoding** | 编排 (什么时候/用什么/做多少) | 重复教 AI 已知的事 | + +## 工具注册表 + +### MCP (编排层) + +| MCP | 用途 | 降级 | +|:---|:---|:---| +| augment-context-engine | 语义代码搜索, R/D/E 阶段 | grep + find | +| cunzhi | 人工确认检查点, 全阶段 | 对话问答 (不可跳过确认本身) | +| mcp-deepwiki | 开源库文档查询, R/D 阶段 | web search | + +### Plugins (触发层, 开机预装) + +code-review · commit-commands · feature-dev · frontend-design · hookify · pr-review-toolkit · security-guidance · superpowers@superpowers-marketplace + +> VibeCoding 编排 WHEN/WHERE, Plugins 提供 HOW。用户不需要知道 Superpowers 存在。 + +### 降级通则 + +MCP 不可用 → 用 CLI 替代 (见各 skill 降级字段)。 +Plugin 不可用 → 用 VibeCoding skill 内联逻辑。 +全不可用 → 回退到 AI 内置能力, 保持流程不中断。 + +## 工作流 + +1. **P.A.C.E. 路由** → 读 `workflows/pace.md` 判断复杂度 (A/B/C/D) +2. **RIPER-7 编排** → 读 `workflows/riper-7.md` 按阶段执行 +3. **Skills 按需加载** → 只在对应阶段读取对应 skill + +### 分级加载 (核心优化) + +| Path | 加载内容 | 约行数 | 约 tokens | +|:---|:---|:---|:---| +| A | CLAUDE.md + rules.md | ~130L | ~250 | +| B | + pace.md + riper-7.md + 相关 skills (6个) | ~540L | ~900 | +| C/D | + agent-teams + security-review + 全量 skills | ~700L | ~1200 | + +## 状态管理 + +``` +.ai_state/ ← 当前任务状态 (每次会话) +├── session.md ← 当前阶段/Path/进度 +├── doing.md ← 正在做的 TODO +├── design.md ← brainstorm 输出 +├── plan.md ← plan-first 输出 +├── verified.md ← 验证结果 +├── review.md ← 审查结果 +├── conventions.md ← 项目约定 +└── archive/ ← 历史归档 + +.knowledge/ ← 跨会话经验 (持久) +├── patterns.md ← 成功模式 +├── pitfalls.md ← 已知陷阱 +├── decisions.md ← ADR 记录 +└── tools.md ← 工具使用经验 +``` + +## Agent Teams (Path C+) + +5 个子代理, 全部 Sonnet 4.6, worktree 隔离: +- **builder**: 构建实现 (isolation: worktree) +- **validator**: 测试验证 (isolation: worktree) +- **explorer**: 代码探索 (background: true, 只读) +- **e2e-runner**: E2E 测试 (isolation: worktree) +- **security-auditor**: 安全扫描 (background: true) + +## 新手指引 + +不知道怎么开始?说 "我想做 XXX" 即可。系统自动: +1. 分析任务复杂度 → 选择 Path +2. 展示执行计划预览 +3. 等你确认后开始 + +或运行 `/vibe-init` 初始化项目结构。 diff --git a/.claude/agents/builder.md b/.claude/agents/builder.md new file mode 100644 index 00000000..2896d5d1 --- /dev/null +++ b/.claude/agents/builder.md @@ -0,0 +1,12 @@ +--- +name: builder +model: sonnet-4-6 +isolation: worktree +memory: project +skills: [tdd, code-quality, context7] +permissionMode: default +--- + +构建者。按 plan.md 中分配的任务实现代码。 +遵循 conventions.md 约定, 读 .knowledge/pitfalls.md 规避已知问题。 +完成后更新 doing.md: DOING → DONE。 diff --git a/.claude/agents/e2e-runner.md b/.claude/agents/e2e-runner.md new file mode 100644 index 00000000..602f8ce2 --- /dev/null +++ b/.claude/agents/e2e-runner.md @@ -0,0 +1,11 @@ +--- +name: e2e-runner +model: sonnet-4-6 +isolation: worktree +memory: project +skills: [e2e-testing] +tools: [Read, Write, Bash] +--- + +E2E 测试专用。运行 Playwright 或等效 E2E 框架。 +失败时截图保存, 将结果写入 verified.md。 diff --git a/.claude/agents/explorer.md b/.claude/agents/explorer.md new file mode 100644 index 00000000..18541586 --- /dev/null +++ b/.claude/agents/explorer.md @@ -0,0 +1,13 @@ +--- +name: explorer +model: sonnet-4-6 +background: true +memory: project +permissionMode: bypassPermissions +tools: [Read] +--- + +探索者。后台只读运行。 +扫描项目依赖、导入关系、集成点。 +为 builder 和 validator 提供上下文信息。 +不写文件, 不执行命令。 diff --git a/.claude/agents/security-auditor.md b/.claude/agents/security-auditor.md new file mode 100644 index 00000000..900832ba --- /dev/null +++ b/.claude/agents/security-auditor.md @@ -0,0 +1,12 @@ +--- +name: security-auditor +model: sonnet-4-6 +background: true +memory: project +skills: [security-review] +tools: [Read, Bash] +--- + +安全扫描。后台运行。 +检查硬编码密钥, SQL 注入, XSS, 依赖漏洞。 +发现问题写入 verified.md 并通知主代理。 diff --git a/.claude/agents/validator.md b/.claude/agents/validator.md new file mode 100644 index 00000000..715c736b --- /dev/null +++ b/.claude/agents/validator.md @@ -0,0 +1,12 @@ +--- +name: validator +model: sonnet-4-6 +isolation: worktree +memory: project +tools: [Read, Bash, mcp__cunzhi__*] +description: 测试验证 — builder 完成后自动触发 +--- + +验证者。builder 完成任务后自动触发。 +运行测试, 检查类型, lint。 +通过 → 确认 DONE。不通过 → 退回 builder 并附上失败信息。 diff --git a/.claude/commands/vibe-brainstorm.md b/.claude/commands/vibe-brainstorm.md new file mode 100644 index 00000000..2cec121b --- /dev/null +++ b/.claude/commands/vibe-brainstorm.md @@ -0,0 +1,17 @@ +--- +name: vibe-brainstorm +description: 显式触发头脑风暴 — 不进入完整开发流程 +allowed-tools: Read, Write, mcp__augment-context-engine__*, mcp__mcp-deepwiki__*, mcp__cunzhi__* +--- + +# /vibe-brainstorm — 头脑风暴 + +只做 RIPER R₀b 阶段, 不进入后续开发。 +适合: 还没想好怎么做, 先探讨方案。 + +1. 加载 skills/brainstorm +2. 执行头脑风暴流程 +3. 输出 .ai_state/design.md +4. 结束 (不自动进入 R/D/P/E) + +用户可以之后用 `/vibe-dev` 基于 design.md 继续。 diff --git a/.claude/commands/vibe-dev.md b/.claude/commands/vibe-dev.md new file mode 100644 index 00000000..489966dd --- /dev/null +++ b/.claude/commands/vibe-dev.md @@ -0,0 +1,18 @@ +--- +name: vibe-dev +description: 智能开发入口 — 自动路由到完整工程流程 +allowed-tools: Read, Write, Bash, mcp__cunzhi__*, mcp__augment-context-engine__*, mcp__mcp-deepwiki__* +--- + +# /vibe-dev — 智能开发入口 + +用户说 `/vibe-dev "做个搜索功能"` 后: + +1. 检查 .ai_state/ 是否存在, 不存在则先跑 quickstart +2. augment-context-engine 快速扫描项目 +3. P.A.C.E. 路由 (workflows/pace.md) → 判定 Path +4. 向用户展示任务分析和执行计划预览 +5. cunzhi 确认 Path 选择 +6. 进入 RIPER-7 (workflows/riper-7.md) 按阶段执行 + +这是最常用的入口。新手直接用这个就行。 diff --git a/.claude/commands/vibe-init.md b/.claude/commands/vibe-init.md new file mode 100644 index 00000000..b9f4c42b --- /dev/null +++ b/.claude/commands/vibe-init.md @@ -0,0 +1,21 @@ +--- +name: vibe-init +description: 初始化 VibeCoding 项目结构 +allowed-tools: Read, Write, Bash +--- + +# /vibe-init — 项目初始化 + +1. 检查项目根目录是否已有 .ai_state/ +2. 如果没有: + ```bash + mkdir -p .ai_state/archive + mkdir -p .knowledge + ``` +3. 从 `.claude/templates/ai-state/` 复制模板到 `.ai_state/` +4. 从 `.claude/templates/knowledge/` 复制模板到 `.knowledge/` +5. 检测项目类型 (package.json/requirements.txt/go.mod) +6. 初始化 conventions.md 中的项目信息 +7. 触发 quickstart 引导 + +如果 .ai_state/ 已存在, 检查完整性并补全缺失文件。 diff --git a/.claude/commands/vibe-resume.md b/.claude/commands/vibe-resume.md new file mode 100644 index 00000000..56729ba9 --- /dev/null +++ b/.claude/commands/vibe-resume.md @@ -0,0 +1,23 @@ +--- +name: vibe-resume +description: 中断恢复 — 从上次中断的地方继续 +allowed-tools: Read, Write, Bash, mcp__cunzhi__*, mcp__augment-context-engine__* +--- + +# /vibe-resume — 中断恢复 + +1. 读 .ai_state/session.md → 获取中断时的 Path + 阶段 +2. 读 .ai_state/doing.md → 获取未完成的 TODO +3. augment-context-engine 快速扫描最近变更 +4. 向用户展示恢复摘要: + ``` + 🔄 恢复上次任务 + ├─ Path: B + ├─ 中断阶段: E (执行) + ├─ 已完成: T-001, T-002 + ├─ 待继续: T-003, T-004 + └─ 最后变更: src/auth/login.ts + ``` +5. cunzhi 确认后继续 + +等效于 `/resume` 官方命令 + VibeCoding 上下文恢复。 diff --git a/.claude/commands/vibe-status.md b/.claude/commands/vibe-status.md new file mode 100644 index 00000000..ff8e840b --- /dev/null +++ b/.claude/commands/vibe-status.md @@ -0,0 +1,22 @@ +--- +name: vibe-status +description: 查看当前任务状态和进度 +allowed-tools: Read, Bash +--- + +# /vibe-status — 状态查看 + +1. 读 .ai_state/session.md → 当前 Path + 阶段 +2. 读 .ai_state/doing.md → TODO/DOING/DONE 统计 +3. 如果有活跃 Agent Teams: `claude agents` 列出活跃子代理 +4. 输出看板: + ``` + 📊 VibeCoding 状态 + ├─ 版本: v8.9 + ├─ Path: B | 阶段: E (执行) + ├─ 进度: ████████░░ 4/5 (80%) + ├─ TODO: T-005 (实现搜索过滤) + ├─ DOING: — + ├─ DONE: T-001, T-002, T-003, T-004 + └─ Agents: builder (active), validator (idle) + ``` diff --git a/.claude/hooks/context-loader.cjs b/.claude/hooks/context-loader.cjs new file mode 100644 index 00000000..dc2315ec --- /dev/null +++ b/.claude/hooks/context-loader.cjs @@ -0,0 +1,71 @@ +// VibeCoding v8.9 — SessionStart Hook +// 加载项目上下文 + 智能断点恢复 +const fs = require('node:fs'); +const path = require('node:path'); + +function readHead(file, lines) { + try { + const content = fs.readFileSync(file, 'utf8'); + return content.split('\n').slice(0, lines).join('\n'); + } catch { + return ''; + } +} + +function exists(f) { + try { + return fs.existsSync(f); + } catch { + return false; + } +} + +const ctx = []; + +// 1. 加载 conventions (始终) +if (exists('.ai_state/conventions.md')) { + ctx.push(`📋 conventions:\n${readHead('.ai_state/conventions.md', 30)}`); +} + +// 2. 加载 .knowledge/ (跨会话经验) +for (const f of ['patterns.md', 'pitfalls.md', 'decisions.md', 'tools.md']) { + const p = path.join('.knowledge', f); + if (exists(p)) { + const head = readHead(p, 15); + if (head.trim()) ctx.push(`📚 ${f}:\n${head}`); + } +} + +// 3. 断点恢复: 检测中断阶段 +if (exists('.ai_state/session.md')) { + const session = fs.readFileSync('.ai_state/session.md', 'utf8'); + ctx.push(`🔄 session:\n${session}`); + + // 检测高级阶段断点 + if (exists('.ai_state/review.md')) { + ctx.push('⚠️ 断点: 已到 V(验收) 阶段, 上次可能在最终审查中中断'); + } else if (exists('.ai_state/verified.md')) { + ctx.push('⚠️ 断点: 已到 T(测试) 阶段, 验证已开始'); + } else if (exists('.ai_state/doing.md')) { + const doing = readHead('.ai_state/doing.md', 20); + ctx.push(`📝 doing:\n${doing}`); + } +} + +// 4. plan.md 和 design.md (如果存在) +if (exists('.ai_state/plan.md')) { + ctx.push(`📐 plan:\n${readHead('.ai_state/plan.md', 25)}`); +} +if (exists('.ai_state/design.md')) { + ctx.push(`🎨 design:\n${readHead('.ai_state/design.md', 15)}`); + // 异常场景: design.md 存在但 session.md 不存在 (异常中断) + if (!exists('.ai_state/session.md')) { + ctx.push( + '⚠️ design.md 存在但 session.md 缺失, 可能是上次任务异常中断。建议 /vibe-resume 恢复或 /vibe-dev 重新开始。' + ); + } +} + +if (ctx.length > 0) { + process.stdout.write(ctx.join('\n---\n')); +} diff --git a/.claude/hooks/delivery-gate.cjs b/.claude/hooks/delivery-gate.cjs new file mode 100644 index 00000000..6aaed0b8 --- /dev/null +++ b/.claude/hooks/delivery-gate.cjs @@ -0,0 +1,91 @@ +// VibeCoding v8.9 — Stop Hook (Delivery Gate) +// 阻止未完成任务/未测试代码的交付 +const fs = require('node:fs'); +const { execSync } = require('node:child_process'); + +function exists(f) { + try { + return fs.existsSync(f); + } catch { + return false; + } +} + +function runQuiet(cmd, timeout) { + try { + execSync(cmd, { timeout: timeout || 60000, stdio: 'pipe' }); + return true; + } catch { + return false; + } +} + +function hasScript(name) { + try { + const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8')); + return Boolean(pkg.scripts && pkg.scripts[name]); + } catch { + return false; + } +} + +// 获取当前 Path +let currentPath = 'A'; +try { + const session = fs.readFileSync('.ai_state/session.md', 'utf8'); + const m = session.match(/path:\s*([ABCD])/i); + if (m) currentPath = m[1].toUpperCase(); +} catch {} + +const errors = []; + +// === 检查 1: plan.md 完成度 (Path B+) === +if (currentPath !== 'A' && exists('.ai_state/plan.md')) { + try { + const plan = fs.readFileSync('.ai_state/plan.md', 'utf8'); + const total = (plan.match(/- \[[ x]\]/g) || []).length; + const done = (plan.match(/- \[x\]/gi) || []).length; + if (total > 0 && done < total) { + errors.push(`plan.md: ${done}/${total} 完成, ${total - done} 个任务未完成`); + } + } catch {} +} + +// === 检查 2: npm test (Path B+) === +if (currentPath !== 'A' && hasScript('test')) { + if (!runQuiet('npm test', 90000)) { + errors.push('npm test 失败'); + } +} + +// === 检查 3: ESLint (Path C+) === +const isStrictPath = currentPath === 'C' || currentPath === 'D'; +const hasEslintConfig = + exists('.eslintrc') || + exists('.eslintrc.js') || + exists('.eslintrc.json') || + exists('.eslintrc.cjs') || + exists('eslint.config.js') || + exists('eslint.config.mjs') || + exists('eslint.config.cjs'); +if (isStrictPath && hasEslintConfig) { + if (!runQuiet('npx eslint . --max-warnings 0', 60000)) { + errors.push('ESLint 检查未通过'); + } +} + +// === 检查 4: TypeScript (Path B+) === +if (currentPath !== 'A' && exists('tsconfig.json')) { + if (!runQuiet('npx tsc --noEmit', 60000)) { + errors.push('TypeScript 类型检查失败'); + } +} + +// === 输出 === +if (errors.length > 0) { + process.stderr.write(`🚫 Delivery Gate 拦截:\n${errors.map(e => ` ❌ ${e}`).join('\n')}`); + process.exit(2); // exit 2 = block +} else { + process.stdout.write(`✅ Delivery Gate 通过 (Path ${currentPath})`); + process.exit(0); +} diff --git a/.claude/hooks/worktree-init.cjs b/.claude/hooks/worktree-init.cjs new file mode 100644 index 00000000..05a8e6c2 --- /dev/null +++ b/.claude/hooks/worktree-init.cjs @@ -0,0 +1,19 @@ +// VibeCoding v8.9 — WorktreeCreate Hook +// 在 agent worktree 中初始化 .ai_state +const fs = require('node:fs'); + +function ensureDir(d) { + try { + fs.mkdirSync(d, { recursive: true }); + } catch {} +} + +// 在 worktree 中创建最小 .ai_state +ensureDir('.ai_state'); + +// 只创建 doing.md (子代理需要记录进度) +if (!fs.existsSync('.ai_state/doing.md')) { + fs.writeFileSync('.ai_state/doing.md', '# Worktree Task Progress\n\n'); +} + +process.stdout.write('✅ Worktree .ai_state 已初始化'); diff --git a/.claude/rules/rules.md b/.claude/rules/rules.md new file mode 100644 index 00000000..8f0619dd --- /dev/null +++ b/.claude/rules/rules.md @@ -0,0 +1,23 @@ +# VibeCoding 项目硬规则 + +## 代码规则 (从 skills 提取的强制规则) + +1. 修 bug 必须写回归测试 (Path B+) +2. 新增 API 必须有入参验证 +3. 数据库查询必须参数化, 禁止字符串拼接 SQL +4. 不提交 console.log/print 调试语句到生产代码 +5. 环境变量不硬编码, 用 .env + process.env + +## 工作流规则 + +6. 不在 E 阶段修改 design.md (设计已锁定) +7. plan.md 中未完成的任务不能标记为 DONE +8. .knowledge/ 文件不可删除, 只追加 +9. conventions.md 变更需 cunzhi 确认 +10. 每次 commit 必须关联 plan.md 任务编号 (Path B+) + +## Git 规则 + +11. commit message 格式: `type(scope): description [T-XXX]` +12. Path B: squash merge 到主分支 +13. Path C+: 按功能分 commit, 保留历史 diff --git a/.claude/scripts/vibe-lint.cjs b/.claude/scripts/vibe-lint.cjs new file mode 100644 index 00000000..62af84ee --- /dev/null +++ b/.claude/scripts/vibe-lint.cjs @@ -0,0 +1,77 @@ +// VibeCoding v8.9 — 配置健康检查 +// 运行: node .claude/scripts/vibe-lint.cjs +const fs = require('node:fs'); +const path = require('node:path'); + +let fail = 0; +let ok = 0; +let warn = 0; + +function check(condition, msg) { + if (condition) { + console.log(` ✅ ${msg}`); + ok++; + } else { + console.log(` ❌ ${msg}`); + fail++; + } +} + +function soft(condition, msg) { + if (condition) { + console.log(` ✅ ${msg}`); + ok++; + } else { + console.log(` ⚠️ ${msg}`); + warn++; + } +} + +function exists(f) { + return fs.existsSync(f); +} + +console.log('🔍 VibeCoding v8.9 配置检查\n'); + +console.log('=== 核心文件 ==='); +check(exists('.claude/CLAUDE.md'), 'CLAUDE.md 入口'); +check(exists('.claude/settings.json'), 'settings.json 配置'); +check(exists('.claude/workflows/pace.md'), 'P.A.C.E. 路由'); +check(exists('.claude/workflows/riper-7.md'), 'RIPER-7 编排'); +check(exists('.claude/rules/rules.md'), '项目规则'); + +console.log('\n=== Skills ==='); +const skills = [ + 'brainstorm', + 'cunzhi', + 'tdd', + 'verification', + 'code-quality', + 'knowledge', + 'agent-teams', + 'context7', + 'plan-first', + 'smart-archive', + 'e2e-testing', + 'security-review', + 'quickstart' +]; +skills.forEach(s => check(exists(`.claude/skills/${s}/SKILL.md`), `skill: ${s}`)); + +console.log('\n=== Agents ==='); +['builder', 'validator', 'explorer', 'e2e-runner', 'security-auditor'].forEach(a => + check(exists(`.claude/agents/${a}.md`), `agent: ${a}`) +); + +console.log('\n=== Hooks ==='); +check(exists('.claude/hooks/context-loader.cjs'), 'SessionStart hook'); +check(exists('.claude/hooks/delivery-gate.cjs'), 'Stop hook'); +check(exists('.claude/hooks/worktree-init.cjs'), 'WorktreeCreate hook'); + +console.log('\n=== 项目状态 ==='); +soft(exists('.ai_state'), '.ai_state/ 目录'); +soft(exists('.knowledge'), '.knowledge/ 目录'); +soft(exists('.ai_state/conventions.md'), 'conventions.md'); + +console.log(`\n📊 结果: ${ok} 通过, ${warn} 警告, ${fail} 失败`); +if (fail > 0) process.exit(1); diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 00000000..8342e0cf --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,149 @@ +{ + "permissions": { + "allow": [ + "Bash(git *)", + "Bash(npm *)", + "Bash(npx *)", + "Bash(node *)", + "Bash(pnpm *)", + "Bash(yarn *)", + "Bash(bun *)", + "Bash(cat *)", + "Bash(ls *)", + "Bash(find *)", + "Bash(grep *)", + "Bash(mkdir *)", + "Bash(cp *)", + "Bash(mv *)", + "Bash(rm *)", + "Bash(touch *)", + "Bash(echo *)", + "Bash(head *)", + "Bash(tail *)", + "Bash(wc *)", + "Bash(sed *)", + "Bash(awk *)", + "Bash(sort *)", + "Bash(diff *)", + "Bash(curl *)", + "Bash(which *)", + "Bash(pwd)", + "Bash(tsc *)", + "Bash(eslint *)", + "Bash(prettier *)", + "Bash(jest *)", + "Bash(vitest *)", + "Bash(playwright *)", + "Read(*)", + "Write(*)", + "Edit(*)", + "mcp__cunzhi__*", + "mcp__augment-context-engine__*", + "mcp__mcp-deepwiki__*" + ], + "deny": ["Bash(rm -rf /)", "Bash(rm -rf ~)", "Bash(chmod 777 *)"] + }, + "plugins": { + "enabled": [ + "code-review", + "commit-commands", + "feature-dev", + "frontend-design", + "hookify", + "plugin-dev", + "pr-review-toolkit", + "security-guidance", + "superpowers@superpowers-marketplace" + ], + "marketplaces": [ + { + "name": "claude-official", + "url": "registry:claude-plugins-official" + }, + { + "name": "claude-community", + "url": "registry:claude-plugins-community" + }, + { + "name": "claude-local", + "url": "local:.claude/plugins" + }, + { + "name": "superpowers-marketplace", + "url": "github:obra/superpowers-marketplace" + } + ] + }, + "hooks": { + "SessionStart": [ + { + "matcher": "", + "hooks": [ + { + "type": "command", + "command": "node .claude/hooks/context-loader.cjs", + "timeout": 10000 + } + ] + } + ], + "PreToolUse": [ + { + "matcher": "Write", + "hooks": [ + { + "type": "command", + "command": "node -e \"let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{try{const i=JSON.parse(d);const p=i.tool_input?.file_path||'';if(/\\.md$/i.test(p)&&!/^(README|CHANGELOG|LICENSE|API|ARCHITECTURE|SECURITY|MIGRATION|CONTRIBUTING)/i.test(require('path').basename(p))&&!/(docs|src|plans|scripts|templates|.claude|.codex|.ai_state|.knowledge)[\\\\/]/.test(p)){process.stderr.write('Block: AI 不应随意创建 .md 文件: '+p);process.exit(2)}process.exit(0)}catch{process.exit(0)}})\"", + "timeout": 5000 + } + ] + } + ], + "PostToolUse": [ + { + "matcher": "Write|Edit", + "hooks": [ + { + "type": "command", + "command": "node -e \"let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{try{const i=JSON.parse(d);const p=i.tool_input?.file_path||'';if(/\\.(ts|tsx)$/.test(p)){const{execSync}=require('child_process');try{execSync('npx tsc --noEmit 2>&1',{timeout:30000,stdio:'pipe'})}catch(e){process.stdout.write('⚠️ TypeScript 类型错误:\\n'+e.stdout?.toString().slice(0,500))}}process.exit(0)}catch{process.exit(0)}})\"", + "timeout": 35000 + } + ] + } + ], + "Stop": [ + { + "hooks": [ + { + "type": "command", + "command": "node .claude/hooks/delivery-gate.cjs", + "timeout": 120000 + } + ] + } + ], + "WorktreeCreate": [ + { + "hooks": [ + { + "type": "command", + "command": "node .claude/hooks/worktree-init.cjs", + "timeout": 10000 + } + ] + } + ] + }, + "env": { + "LANGUAGE": "zh-Hans", + "LC_ALL": "zh-Hans", + "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1", + "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": 1, + "API_TIMEOUT_MS": "3000000", + "CLAUDE_CODE_SUBAGENT_MODEL": "claude-sonnet-4-6", + "ANTHROPIC_API_KEY": "", + "ANTHROPIC_BASE_URL": "", + "VIBECODING_VERSION": "8.9", + "VIBECODING_HOOKS_DISABLED": "0" + } +} diff --git a/.claude/skills/agent-teams/SKILL.md b/.claude/skills/agent-teams/SKILL.md new file mode 100644 index 00000000..7dafbb65 --- /dev/null +++ b/.claude/skills/agent-teams/SKILL.md @@ -0,0 +1,35 @@ +--- +name: agent-teams +description: 并行分工 + worktree 隔离 — Path C+ +context: main +--- + +## 触发 +P.A.C.E. 路由为 Path C/D 时激活。 + +## 子代理 + +| Agent | 文件 | 模型 | 隔离 | 角色 | +|:---|:---|:---|:---|:---| +| builder | agents/builder.md | sonnet-4-6 | worktree | 实现代码 | +| validator | agents/validator.md | sonnet-4-6 | worktree | 运行测试 | +| explorer | agents/explorer.md | sonnet-4-6 | background | 探索依赖 (只读) | +| e2e-runner | agents/e2e-runner.md | sonnet-4-6 | worktree | E2E 测试 | +| security-auditor | agents/security-auditor.md | sonnet-4-6 | background | 安全扫描 | + +## Hooks 集成 + +- **TeammateIdle**: teammate 空闲时自动分配下一个 plan.md 任务 +- **TaskCompleted**: teammate 完成后自动触发 validator 跑测试 +- **WorktreeCreate**: worktree-init.cjs 初始化 .ai_state/ + +## 并行工作协议 + +1. 从 plan.md 读取任务列表, 标注依赖关系 +2. 无依赖任务可并行分配给不同 builder +3. builder 完成 → TaskCompleted hook → validator 自动验证 +4. validator 不通过 → 退回 builder 修复 +5. 全部任务完成 → explorer 扫描集成点 → 主代理合并 + +## 降级 +Agent Teams 不可用 → 顺序执行, 不并行。 diff --git a/.claude/skills/brainstorm/SKILL.md b/.claude/skills/brainstorm/SKILL.md new file mode 100644 index 00000000..defc5c18 --- /dev/null +++ b/.claude/skills/brainstorm/SKILL.md @@ -0,0 +1,33 @@ +--- +name: brainstorm +description: 苏格拉底式需求精炼 — R₀b 阶段 +context: main +--- + +## 触发 +Path B+ 任务启动时, RIPER R₀b 阶段。 + +## 工具 + +| 工具 | 类型 | 调用方式 | +|:---|:---|:---| +| augment-context-engine | MCP | 搜索现有代码理解项目结构 | +| mcp-deepwiki | MCP | 查候选库文档验证方案 | +| cunzhi | MCP | [DESIGN_DIRECTION] 确认方向 | +| superpowers brainstorming | Plugin | 自动: 苏格拉底提问方法论 | + +## 流程 + +1. augment-context-engine 搜索项目关键文件, 建立上下文 +2. 读 .ai_state/conventions.md 和 .knowledge/pitfalls.md +3. **逐个提问** (一次一问, 优先选择题, YAGNI 原则) +4. 提出 2-3 方案, deepwiki 验证候选技术可行性 +5. **分段呈现** (每段 ≤200 字, 逐段确认) +6. 输出到 .ai_state/design.md +7. cunzhi [DESIGN_DIRECTION] 确认 + +## 输出 +`.ai_state/design.md` — 下游被 R/D 阶段和 plan-first 消费。 + +## 降级 +MCP 不可用 → 直接对话提问, 手动记录到 design.md。 diff --git a/.claude/skills/code-quality/SKILL.md b/.claude/skills/code-quality/SKILL.md new file mode 100644 index 00000000..65ddaced --- /dev/null +++ b/.claude/skills/code-quality/SKILL.md @@ -0,0 +1,20 @@ +--- +name: code-quality +description: 代码审查编排 — T/V 阶段 +context: main +--- + +## 工具编排 + +| 工具 | 类型 | 触发 | 调用方式 | +|:---|:---|:---|:---| +| code-review | Plugin | T 阶段自动 | 自然语言: "审查以上变更" | +| security-guidance | Plugin | Path C+ | 自然语言: "检查安全问题" | +| pr-review-toolkit | Plugin | V 阶段 PR 时 | 自然语言: "准备 PR 审查" | +| superpowers review | Plugin Skill | T 阶段 | 自动触发 | + +## 审查维度 +不重复 Superpowers 方法论。只补充 VibeCoding 特有规则: +- design.md 中的决策是否被正确实现 +- conventions.md 中的约定是否被遵守 +- .knowledge/pitfalls.md 中的陷阱是否被规避 diff --git a/.claude/skills/context7/SKILL.md b/.claude/skills/context7/SKILL.md new file mode 100644 index 00000000..ec3fb480 --- /dev/null +++ b/.claude/skills/context7/SKILL.md @@ -0,0 +1,22 @@ +--- +name: context7 +description: 库文档按需拉取 — 贯穿 R₀b/R/D/E +context: main +--- + +## 调用 + +``` +优先: mcp-deepwiki 查询 (MCP) +备选: npx ctx7 resolve {库名} (CLI) +降级: web search 搜索官方文档 +``` + +## 使用时机 + +- **R₀b**: 方案对比时拉取候选库文档, 验证 API 满足需求 +- **R**: 深入调研已选技术栈的具体用法和限制 +- **D**: 查 API 细节确认接口设计可行 +- **E**: 不确定 API 用法时即时查询 + +不预加载, 按需拉取, 仅取所需章节。 diff --git a/.claude/skills/cunzhi/SKILL.md b/.claude/skills/cunzhi/SKILL.md new file mode 100644 index 00000000..f1b4e524 --- /dev/null +++ b/.claude/skills/cunzhi/SKILL.md @@ -0,0 +1,30 @@ +--- +name: cunzhi +description: 寸止检查点协议 — 全阶段 +context: main +--- + +## 检查点清单 + +| 检查点 | 阶段 | Path | 含义 | +|:---|:---|:---|:---| +| [DESIGN_DIRECTION] | R₀b | B+ | 用户选择技术方向 | +| [DESIGN_READY] | D | B+ | 设计方案确认 | +| [PLAN_CONFIRMED] | P | B+ | 执行计划确认 | +| [MILESTONE_CHECK] | E | C+ | 阶段性里程碑确认 (每 3-5 任务) | +| [SECURITY_PASSED] | T | C+ | 安全审查通过 | +| [DELIVERY_CONFIRMED] | V | ALL | 最终交付确认 | + +## 调用方式 + +``` +优先: cunzhi MCP → 弹出确认界面, AI 真正暂停等待 +降级: 对话确认 → 直接问用户, 等回复再继续 +``` + +不可跳过确认本身。如果 cunzhi MCP 不可用, 必须用对话方式等待用户回复。 + +## 规则 +- Path A 只需 [DELIVERY_CONFIRMED] +- Path B 需要 [DESIGN_DIRECTION] + [DESIGN_READY] + [PLAN_CONFIRMED] + [DELIVERY_CONFIRMED] +- Path C+ 需要全部检查点 diff --git a/.claude/skills/e2e-testing/SKILL.md b/.claude/skills/e2e-testing/SKILL.md new file mode 100644 index 00000000..3b90d770 --- /dev/null +++ b/.claude/skills/e2e-testing/SKILL.md @@ -0,0 +1,21 @@ +--- +name: e2e-testing +description: Playwright E2E 测试 — T 阶段 (Path C+) +context: main +--- + +## 触发 +Path C+ 的 T 阶段, 且项目有前端或 API 端点。 + +## 流程 + +1. 检查 playwright 是否安装, 未安装则 `npm install -D @playwright/test` +2. 从 plan.md 提取关键用户流 +3. 编写或更新 E2E 测试 +4. `npx playwright test` 执行 +5. 失败 → 截图保存 → 修复 → 重跑 (最多 3 轮) +6. 结果写入 verified.md + +## 降级 +无 Playwright → 用 curl/fetch 做 API 冒烟测试。 +纯 CLI 工具 → 跳过 E2E, 只跑单测。 diff --git a/.claude/skills/knowledge/SKILL.md b/.claude/skills/knowledge/SKILL.md new file mode 100644 index 00000000..0397d105 --- /dev/null +++ b/.claude/skills/knowledge/SKILL.md @@ -0,0 +1,29 @@ +--- +name: knowledge +description: 经验管理 — V 阶段沉淀, R 阶段读取 +context: main +--- + +## .knowledge/ 目录 + +| 文件 | 内容 | 写入时机 | 读取时机 | +|:---|:---|:---|:---| +| patterns.md | 成功的解决模式 | V 阶段 | R₀b 阶段 | +| pitfalls.md | 踩过的坑和规避方法 | V 阶段 / 出错时 | R₀b/R 阶段 | +| decisions.md | 架构决策记录 (ADR) | D 阶段 | R 阶段 | +| tools.md | 工具使用经验和配置 | 任何时候 | R 阶段 | + +## 写入格式 + +```markdown +## [日期] [标题] + +**场景**: 什么情况下遇到的 +**方案**: 怎么解决的 +**效果**: 结果如何 +``` + +## 规则 +- V 阶段结束前, 至少更新一个 .knowledge/ 文件 +- 出错重试超过 2 次, 立即写入 pitfalls.md +- ADR 记录不可删除, 只追加 diff --git a/.claude/skills/plan-first/SKILL.md b/.claude/skills/plan-first/SKILL.md new file mode 100644 index 00000000..8b98d9ac --- /dev/null +++ b/.claude/skills/plan-first/SKILL.md @@ -0,0 +1,24 @@ +--- +name: plan-first +description: 强制先规划后执行 — P 阶段 +context: main +--- + +## 触发 +Path B+ 任务, D 阶段完成后。 + +## 流程 + +1. 读 .ai_state/design.md (brainstorm/R/D 阶段输出) +2. 使用 /plan 进入规划模式 +3. context7 查询任务涉及的库文档, 确保技术细节准确 +4. 输出 .ai_state/plan.md: + - 任务列表 (编号 T-001, T-002...) + - 依赖关系 (T-003 depends on T-001) + - 时间预估 + - Path C+: 子代理分配 +5. cunzhi [PLAN_CONFIRMED] 确认后才能写代码 +6. plan.md 中未完成任务不能关闭 session (delivery-gate 检查) + +## 管道 +design.md (上游) → plan-first → plan.md (下游) → E 阶段消费 diff --git a/.claude/skills/quickstart/SKILL.md b/.claude/skills/quickstart/SKILL.md new file mode 100644 index 00000000..f13fde94 --- /dev/null +++ b/.claude/skills/quickstart/SKILL.md @@ -0,0 +1,39 @@ +--- +name: quickstart +description: 新手引导流 — 首次使用或不知如何开始时 +context: main +--- + +## 触发条件 + +1. vibe-init 检测到无 .ai_state/ 目录 +2. 用户说"不知道怎么开始"、"怎么用"、"help" +3. 首次在项目中使用 VibeCoding + +## 流程 + +1. **检测项目类型** + - 有 package.json → Node.js 项目 + - 有 requirements.txt/pyproject.toml → Python + - 有 go.mod → Go + - 空目录 → 新项目, 问用户想做什么 + +2. **引导用户描述需求** + ``` + 👋 VibeCoding 已就绪! + + 告诉我你想做什么, 比如: + · "修复登录页面的样式问题" → 我会快速修复 (Path A) + · "给项目加个搜索功能" → 我会完整规划再开发 (Path B) + · "重构整个认证系统" → 我会拆分任务并行开发 (Path C) + + 或者直接描述你的需求, 我来判断复杂度。 + ``` + +3. **展示执行计划预览** + 自动路由到 P.A.C.E., 展示计划, cunzhi 确认后开始。 + +## 设计原则 +- 不暴露 VibeCoding 内部术语 (RIPER/P.A.C.E./Superpowers) +- 用户只需要说"做什么", 系统负责"怎么做" +- 提供具体示例, 降低认知门槛 diff --git a/.claude/skills/security-review/SKILL.md b/.claude/skills/security-review/SKILL.md new file mode 100644 index 00000000..54694258 --- /dev/null +++ b/.claude/skills/security-review/SKILL.md @@ -0,0 +1,27 @@ +--- +name: security-review +description: 安全审查清单 — T 阶段 (Path C+) +context: main +--- + +## 触发 +Path C+ 的 T 阶段。 + +## 工具 + +| 工具 | 调用方式 | +|:---|:---| +| security-guidance | Plugin, 自然语言: "安全审查当前变更" | +| security-auditor agent | 子代理 (background), Path C+ 自动启动 | + +## 检查项 (VibeCoding 补充) + +- [ ] 无硬编码密钥/Token/密码 +- [ ] SQL 查询使用参数化 (无字符串拼接) +- [ ] 用户输入已做 XSS 防护 +- [ ] API 端点有认证/授权检查 +- [ ] 敏感数据不出现在日志中 +- [ ] 依赖无已知漏洞 (`npm audit`) + +## 输出 +cunzhi [SECURITY_PASSED] 确认后写入 verified.md。 diff --git a/.claude/skills/smart-archive/SKILL.md b/.claude/skills/smart-archive/SKILL.md new file mode 100644 index 00000000..c392d9cc --- /dev/null +++ b/.claude/skills/smart-archive/SKILL.md @@ -0,0 +1,22 @@ +--- +name: smart-archive +description: 智能压缩归档 — V 阶段 +context: main +--- + +## 触发 +V 阶段 [DELIVERY_CONFIRMED] 后。 + +## 流程 + +1. 将 .ai_state/ 中的完成文件移动到 .ai_state/archive/{date}/ +2. 保留 conventions.md (跨任务持续) +3. 清理 session.md (为下次任务准备) +4. 不清理 .knowledge/ (永久持续) + +## 与 /compact 关系 +/compact 是 Claude Code 内置的上下文压缩。 +smart-archive 是 VibeCoding 的任务归档。两者互补, 不冲突。 + +## 降级 +归档目录创建失败 → 将状态文件内容追加到 conventions.md 底部保留, 不丢失。 diff --git a/.claude/skills/tdd/SKILL.md b/.claude/skills/tdd/SKILL.md new file mode 100644 index 00000000..42eb7d63 --- /dev/null +++ b/.claude/skills/tdd/SKILL.md @@ -0,0 +1,24 @@ +--- +name: tdd +description: TDD 分级策略 — E 阶段 +context: main +--- + +## 分级 + +| Path | 策略 | 覆盖率 | +|:---|:---|:---| +| A | 改了什么手动验证 | 不强制 | +| B | 关键路径写测试, 边界场景 | ≥60% 变更代码 | +| C+ | 先写测试再实现, 全 TDD | ≥80% | + +## 流程 (Path B+) + +1. 从 plan.md 提取当前任务的验收标准 +2. 先写测试 (或至少测试桩) +3. 实现代码 +4. 运行测试, 失败→修复→再跑 (最多 3 轮) +5. 3 轮仍失败 → 标记"需要人工介入", cunzhi 通知 + +## 降级 +测试框架不存在 → 先 `npm install` 安装, 或用断言脚本替代。 diff --git a/.claude/skills/verification/SKILL.md b/.claude/skills/verification/SKILL.md new file mode 100644 index 00000000..e108e73a --- /dev/null +++ b/.claude/skills/verification/SKILL.md @@ -0,0 +1,30 @@ +--- +name: verification +description: 分级验证清单 — T 阶段 +context: main +--- + +## 分级清单 + +### Path A (最小验证) +- [ ] 修改的功能可正常运行 +- [ ] lint 无新增错误 + +### Path B (标准验证) +- [ ] Path A 全部 +- [ ] 单测通过 (`npm test` 或等效) +- [ ] 类型检查通过 (`tsc --noEmit` 或等效) +- [ ] plan.md 中所有任务标记 DONE + +### Path C+ (完整验证) +- [ ] Path B 全部 +- [ ] E2E 测试通过 (skills/e2e-testing) +- [ ] 安全审查通过 (skills/security-review) +- [ ] 无硬编码密钥/Token +- [ ] 性能无明显退化 + +## 输出 +`.ai_state/verified.md` — 记录验证结果。 + +## 注意 +Path A 不检查 plan.md (因为 Path A 没有 P 阶段)。 diff --git a/.claude/templates/ai-state/conventions.md b/.claude/templates/ai-state/conventions.md new file mode 100644 index 00000000..d281d64e --- /dev/null +++ b/.claude/templates/ai-state/conventions.md @@ -0,0 +1,13 @@ +# Project Conventions + +## 项目信息 +- 名称: +- 类型: +- 语言: +- 框架: + +## 代码风格 + +## 命名约定 + +## 禁止事项 diff --git a/.claude/templates/ai-state/design.md b/.claude/templates/ai-state/design.md new file mode 100644 index 00000000..51e5d15d --- /dev/null +++ b/.claude/templates/ai-state/design.md @@ -0,0 +1,13 @@ +# Design Document + +## 需求理解 + +## 方案对比 + +| 方案 | 优点 | 缺点 | 选择 | +|:---|:---|:---|:---| + +## 技术决策 + +## 确认状态 +- [ ] cunzhi [DESIGN_READY] diff --git a/.claude/templates/ai-state/doing.md b/.claude/templates/ai-state/doing.md new file mode 100644 index 00000000..08e06002 --- /dev/null +++ b/.claude/templates/ai-state/doing.md @@ -0,0 +1,7 @@ +# Task Progress + +## TODO + +## DOING + +## DONE diff --git a/.claude/templates/ai-state/plan.md b/.claude/templates/ai-state/plan.md new file mode 100644 index 00000000..3e76d388 --- /dev/null +++ b/.claude/templates/ai-state/plan.md @@ -0,0 +1,14 @@ +# Execution Plan + +## 任务列表 + +- [ ] T-001: +- [ ] T-002: +- [ ] T-003: + +## 依赖关系 + +## 时间预估 + +## 确认状态 +- [ ] cunzhi [PLAN_CONFIRMED] diff --git a/.claude/templates/ai-state/review.md b/.claude/templates/ai-state/review.md new file mode 100644 index 00000000..0da1f8a6 --- /dev/null +++ b/.claude/templates/ai-state/review.md @@ -0,0 +1,6 @@ +# Review + +## 代码审查结果 + +## 交付确认 +- [ ] cunzhi [DELIVERY_CONFIRMED] diff --git a/.claude/templates/ai-state/session.md b/.claude/templates/ai-state/session.md new file mode 100644 index 00000000..54e79d0a --- /dev/null +++ b/.claude/templates/ai-state/session.md @@ -0,0 +1,6 @@ +# Session + +- path: +- current_phase: +- started_at: +- task_summary: diff --git a/.claude/templates/ai-state/verified.md b/.claude/templates/ai-state/verified.md new file mode 100644 index 00000000..d91bd27c --- /dev/null +++ b/.claude/templates/ai-state/verified.md @@ -0,0 +1,11 @@ +# Verification Results + +## 测试结果 +- [ ] 单测通过 +- [ ] 类型检查通过 +- [ ] lint 无错 + +## 安全检查 (Path C+) +- [ ] 无硬编码密钥 +- [ ] SQL 参数化 +- [ ] XSS 防护 diff --git a/.claude/templates/knowledge/decisions.md b/.claude/templates/knowledge/decisions.md new file mode 100644 index 00000000..4b58dca3 --- /dev/null +++ b/.claude/templates/knowledge/decisions.md @@ -0,0 +1,10 @@ +# 架构决策记录 (ADR) + +## 格式 + +### ADR-001: [标题] +**日期**: +**状态**: accepted / deprecated +**上下文**: 为什么需要做这个决策 +**决策**: 选择了什么 +**后果**: 带来的影响 diff --git a/.claude/templates/knowledge/patterns.md b/.claude/templates/knowledge/patterns.md new file mode 100644 index 00000000..4470a857 --- /dev/null +++ b/.claude/templates/knowledge/patterns.md @@ -0,0 +1,10 @@ +# 成功模式 + +记录有效的解决方案, 供后续任务参考。 + +## 格式 + +### [日期] [标题] +**场景**: +**方案**: +**效果**: diff --git a/.claude/templates/knowledge/pitfalls.md b/.claude/templates/knowledge/pitfalls.md new file mode 100644 index 00000000..e2a0a602 --- /dev/null +++ b/.claude/templates/knowledge/pitfalls.md @@ -0,0 +1,11 @@ +# 已知陷阱 + +记录踩过的坑, 避免重复犯错。 + +## 格式 + +### [日期] [标题] +**问题**: +**原因**: +**解决**: +**预防**: diff --git a/.claude/templates/knowledge/tools.md b/.claude/templates/knowledge/tools.md new file mode 100644 index 00000000..0241a951 --- /dev/null +++ b/.claude/templates/knowledge/tools.md @@ -0,0 +1,10 @@ +# 工具使用经验 + +记录项目中使用的工具配置和注意事项。 + +## 格式 + +### [工具名] +**版本**: +**配置**: +**注意**: diff --git a/.claude/workflows/pace.md b/.claude/workflows/pace.md new file mode 100644 index 00000000..dce92836 --- /dev/null +++ b/.claude/workflows/pace.md @@ -0,0 +1,79 @@ +# P.A.C.E. 复杂度路由 v8.9 + +## 路由判定 + +分析用户输入, 按以下规则选择 Path: + +| 信号 | Path A | Path B | Path C | Path D | +|:---|:---|:---|:---|:---| +| 文件数 | 1-2 | 3-10 | 10+ | 20+ | +| 预估时间 | ≤30 min | 6-12h | 1-3 周 | 3+ 周 | +| 关键词 | 修/改/加/删 | 做/实现/开发 | 重构/迁移/系统 | 架构/平台/全栈 | +| 描述长度 | ≤50 字 | 50-200 字 | 200+ 字 | 200+ 字+多模块 | +| 需求数 | 1 | 2-5 | 5-15 | 15+ | + +> 不确定时: 问用户, 不猜。用 cunzhi 确认 Path 选择。 + +## 分级加载 + +### Path A — 敏捷 (≤30 min) + +``` +加载: CLAUDE.md + rules/rules.md +跳过: brainstorm, plan-first, agent-teams, security-review +RIPER 节点: R(轻) → E → T(轻) → V(cunzhi) → Done +状态文件: session.md + doing.md (最小集) +``` + +💡 **给新手**: 这是"改一行 CSS"、"修个 bug"、"加个字段"级别的任务。 + +### Path B — 协作 (6-12h) + +``` +加载: CLAUDE.md + rules + pace + riper-7 + 相关 skills +RIPER 节点: R₀b → R → D → P → E → T → V → Done +skills: brainstorm, context7, plan-first, tdd, verification, code-quality +确认点: [DESIGN_READY] [PLAN_CONFIRMED] [DELIVERY_CONFIRMED] +``` + +💡 **给新手**: 这是"做个登录功能"、"实现搜索"、"添加支付模块"级别。 + +### Path C — 系统 (1-3 周) + +``` +加载: 全量 +RIPER 节点: 同 Path B + 并行分工 +额外: agent-teams (worktree 隔离), e2e-testing, security-review +子代理: builder × N + validator + explorer (background) +确认点: 同 Path B + [SECURITY_PASSED] +``` + +💡 **给新手**: 这是"重构认证系统"、"数据库迁移"、"微服务拆分"级别。 + +### Path D — 长期 (3+ 周) + +``` +加载: 同 Path C +额外: 按周拆分里程碑, 每个里程碑 = 一个 Path B/C 子任务 +看板: 里程碑级 kanban + 任务级 kanban +smart-archive: 每个里程碑归档一次 +``` + +💡 **给新手**: 这是"从零搭建一个平台"、"全栈重写"级别。很少用到。 + +## 路由输出格式 + +选定 Path 后, 向用户展示: + +``` +📊 任务分析 +├─ 复杂度: Path B (协作级) +├─ 预估: ~8 小时 +├─ 文件涉及: ~6 个 +├─ 关键技术: React + Supabase Auth +└─ 执行计划: R₀b(头脑风暴) → R(调研) → D(设计) → P(规划) → E(开发) → T(测试) → V(验收) + +确认后开始? +``` + +然后调用 cunzhi 等待确认。 diff --git a/.claude/workflows/riper-7.md b/.claude/workflows/riper-7.md new file mode 100644 index 00000000..680d5e4c --- /dev/null +++ b/.claude/workflows/riper-7.md @@ -0,0 +1,157 @@ +# RIPER-7 工程编排 v8.9 + +## 统一工具调度表 + +| 阶段 | VibeCoding Skill | Plugin | MCP | 状态文件 | +|:---|:---|:---|:---|:---| +| R₀b 头脑风暴 | brainstorm | superpowers (brainstorming) | augment-context, deepwiki | design.md | +| R 研究 | context7 | superpowers (research) | augment-context, deepwiki | design.md (更新) | +| D 设计 | context7 | superpowers (writing-plans) | deepwiki | design.md (终稿) | +| P 规划 | plan-first | superpowers (writing-plans) | — | plan.md | +| E 开发 | tdd, code-quality, agent-teams | feature-dev, frontend-design, hookify | augment-context | doing.md | +| T 测试 | verification, e2e-testing | code-review, security-guidance | — | verified.md | +| V 验收 | smart-archive, knowledge | pr-review-toolkit, commit-commands | cunzhi | review.md | + +## 阶段详情 + +--- + +### R₀b — 头脑风暴 (Path B+ only) + +💡 **本阶段做什么**: 理解需求, 探索方案, 不写代码 +🔧 **自动使用**: augment-context 扫描 → deepwiki 查库 → cunzhi 确认 +⏭️ **下一阶段**: R (研究) + +``` +步骤: +1. augment-context-engine 搜索现有代码, 理解项目结构 +2. 读 .knowledge/pitfalls.md — 避免重复犯错 +3. 加载 skills/brainstorm — 苏格拉底式逐个提问 +4. deepwiki 查候选技术库文档 +5. 输出 2-3 方案到 .ai_state/design.md +6. cunzhi [DESIGN_DIRECTION] — 用户选择方向 +``` + +--- + +### R — 研究 + +💡 **本阶段做什么**: 深入调研已选方案, 确认技术可行性 +🔧 **自动使用**: context7 拉取库文档 → 对照 design.md 验证 + +``` +步骤: +1. 加载 skills/context7 — 按需拉取相关库文档 +2. 对照 design.md 验证方案可行性 +3. 识别技术风险和依赖 +4. 更新 design.md 中的技术细节 +``` + +Path A 简化: 只做 augment-context 快速扫描, 不输出 design.md。 + +--- + +### D — 设计 + +💡 **本阶段做什么**: 确定技术方案, 输出架构决策 +🔧 **自动使用**: context7 查 API 细节 → design.md 终稿 → cunzhi 确认 + +``` +步骤: +1. context7 查 API 细节, 确认接口设计可行 +2. 写入 .knowledge/decisions.md — ADR 记录 +3. 完成 design.md 终稿 +4. cunzhi [DESIGN_READY] — 用户确认设计 +``` + +Path A 跳过。 + +--- + +### P — 规划 + +💡 **本阶段做什么**: 将设计拆解为可执行的任务列表 +🔧 **自动使用**: plan-first 读 design.md → 生成 plan.md → cunzhi 确认 + +``` +步骤: +1. 加载 skills/plan-first +2. 读 design.md 作为输入 +3. 生成 .ai_state/plan.md: 任务列表 + 依赖 + 预估 + 分工 +4. Path C+: 分配子代理 (builder/validator/e2e-runner) +5. cunzhi [PLAN_CONFIRMED] — 用户确认计划 +``` + +Path A 跳过。Path B: /plan 生成轻量计划。 + +--- + +### E — 执行 + +💡 **本阶段做什么**: 按计划写代码, TDD 驱动 +🔧 **自动使用**: tdd 分级 → code-quality 审查 → agent-teams 并行 + +``` +步骤: +1. 加载 skills/tdd — 按 Path 分级: + - Path A: 改了什么手动验证 + - Path B: 关键路径写测试 + - Path C+: 全覆盖 TDD +2. 逐个执行任务: + - Path A: 直接开始开发 (无 plan.md) + - Path B+: 按 plan.md 中的任务列表逐个执行 +3. 每完成一个: doing.md 更新 TODO→DOING→DONE +4. Path C+: agent-teams 并行 + - builder 在 worktree 中实现 + - validator 在 worktree 中测试 + - explorer (background) 持续扫描依赖 +5. 阶段性 cunzhi 确认 (每 3-5 个任务或关键里程碑) +``` + +--- + +### T — 测试 + +💡 **本阶段做什么**: 验证代码质量, 跑测试, 安全检查 +🔧 **自动使用**: verification 分级清单 → e2e-testing → code-review plugin + +``` +步骤: +1. 加载 skills/verification — 按 Path 分级: + - Path A: 功能验证 + lint + - Path B: + 单测通过 + 类型检查 + - Path C+: + E2E + 安全审查 + 性能 +2. Path B+: 触发 code-review plugin 自动审查 +3. Path C+: 加载 skills/e2e-testing (Playwright) +4. Path C+: 加载 skills/security-review +5. 输出 .ai_state/verified.md +``` + +--- + +### V — 验收 + +💡 **本阶段做什么**: 最终确认, 提交, 归档经验 +🔧 **自动使用**: delivery-gate hook → cunzhi 确认 → smart-archive + +``` +步骤: +1. delivery-gate.cjs 自动检查 (Stop hook): + - plan.md 所有任务 DONE? (Path B+) + - 测试通过? + - lint 无错? +2. 加载 skills/code-quality — 最终审查 +3. cunzhi [DELIVERY_CONFIRMED] — 用户确认交付 +4. 触发 commit-commands plugin — 提交: + - Path A: 单次 commit + - Path B: squash merge + - Path C+: 按功能分 commit +5. 加载 skills/knowledge — 沉淀经验到 .knowledge/ +6. 加载 skills/smart-archive — 归档 .ai_state/ 到 archive/ +``` + +## RIPER 阶段流转规则 + +- 只能前进, 不能跳过 (Path A 的"跳过"是路由决定, 不是运行时跳过) +- 每个阶段完成时更新 session.md 中的 `current_phase` 字段 +- 中断恢复: context-loader.cjs 读 session.md 自动恢复到中断阶段