create-vibe-workflow 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/README.md +248 -57
  2. package/dist/adapters/next-only/skills.recommend.json +1 -0
  3. package/dist/adapters/node-api/skills.recommend.json +1 -0
  4. package/dist/cli.js +163 -5
  5. package/dist/cli.js.map +1 -1
  6. package/dist/generator.d.ts.map +1 -1
  7. package/dist/generator.js +255 -44
  8. package/dist/generator.js.map +1 -1
  9. package/dist/questions.d.ts +11 -1
  10. package/dist/questions.d.ts.map +1 -1
  11. package/dist/questions.js +103 -16
  12. package/dist/questions.js.map +1 -1
  13. package/dist/templates/claude-md/CLAUDE.zh-CN.md +51 -46
  14. package/dist/templates/claude-md/next-only/CLAUDE.zh-CN.md +46 -0
  15. package/dist/templates/claude-md/node-api/CLAUDE.zh-CN.md +47 -0
  16. package/dist/templates/commands/gstack/cso.md.ejs +213 -0
  17. package/dist/templates/commands/gstack/office-hours.md.ejs +109 -0
  18. package/dist/templates/commands/gstack/review.md.ejs +192 -0
  19. package/dist/templates/commands/gstack/ship.md.ejs +256 -0
  20. package/dist/templates/commands/opsx/apply.md.ejs +106 -0
  21. package/dist/templates/commands/opsx/archive.md.ejs +88 -0
  22. package/dist/templates/commands/opsx/explore.md.ejs +84 -0
  23. package/dist/templates/commands/opsx/propose.md.ejs +185 -0
  24. package/dist/templates/commands/superpowers/brainstorm.md.ejs +240 -0
  25. package/dist/templates/commands/superpowers/tdd.md.ejs +230 -0
  26. package/dist/templates/commands/superpowers/verify.md.ejs +211 -0
  27. package/dist/templates/commands/workflow/plan.md.ejs +219 -0
  28. package/dist/templates/hooks/check-deps.mjs +66 -65
  29. package/dist/templates/memory/.gitkeep +0 -0
  30. package/dist/templates/memory/MEMORY.md.ejs +88 -0
  31. package/dist/templates/memory/dev-notes.md.ejs +61 -0
  32. package/dist/templates/memory/troubleshooting.md.ejs +30 -0
  33. package/dist/templates/rules/agents.md +49 -49
  34. package/dist/templates/rules/coding-style.md +156 -117
  35. package/dist/templates/rules/development-workflow.md +103 -50
  36. package/dist/templates/rules/git-workflow.md +103 -47
  37. package/dist/templates/rules/hooks.md +159 -0
  38. package/dist/templates/rules/hooks.md.ejs +159 -0
  39. package/dist/templates/rules/memory.md +106 -0
  40. package/dist/templates/rules/memory.md.ejs +106 -0
  41. package/dist/templates/rules/patterns.md +117 -48
  42. package/dist/templates/rules/performance.md +108 -0
  43. package/dist/templates/rules/performance.md.ejs +108 -0
  44. package/dist/templates/rules/security.md +52 -37
  45. package/dist/templates/rules/testing.md +83 -30
  46. package/dist/templates/settings/settings.template.json +18 -2
  47. package/dist/templates/skills/advanced/caveman/SKILL.md.ejs +144 -0
  48. package/dist/templates/skills/advanced/diagnose/SKILL.md.ejs +159 -0
  49. package/dist/templates/skills/advanced/grill-with-docs/SKILL.md.ejs +154 -0
  50. package/dist/templates/skills/advanced/improve-codebase-architecture/SKILL.md.ejs +172 -0
  51. package/dist/templates/skills/backend/backend-patterns/SKILL.md.ejs +263 -0
  52. package/dist/templates/skills/database/database-migrations/SKILL.md.ejs +202 -0
  53. package/dist/templates/skills/database/postgres-patterns/SKILL.md.ejs +235 -0
  54. package/dist/templates/skills/devops/deployment-patterns/SKILL.md.ejs +228 -0
  55. package/dist/templates/skills/devops/docker-patterns/SKILL.md.ejs +215 -0
  56. package/dist/templates/skills/frontend/frontend-patterns/SKILL.md.ejs +195 -0
  57. package/dist/templates/skills/skill-manifest.json +59 -0
  58. package/dist/templates/skills/skills-lock.template.json +12 -0
  59. package/dist/templates/skills/testing/e2e-testing/SKILL.md.ejs +224 -0
  60. package/dist/templates/skills/workflow/coding-standards/SKILL.md.ejs +143 -0
  61. package/dist/templates/skills/workflow/search-first/SKILL.md.ejs +103 -0
  62. package/dist/templates/skills/workflow/security-review/SKILL.md.ejs +146 -0
  63. package/dist/templates/skills/workflow/strategic-compact/SKILL.md.ejs +108 -0
  64. package/dist/templates/skills/workflow/tdd-workflow/SKILL.md.ejs +104 -0
  65. package/dist/templates/skills/workflow/verification-loop/SKILL.md.ejs +144 -0
  66. package/dist/utils.d.ts +40 -0
  67. package/dist/utils.d.ts.map +1 -0
  68. package/dist/utils.js +110 -0
  69. package/dist/utils.js.map +1 -0
  70. package/package.json +2 -2
  71. package/templates/claude-md/CLAUDE.zh-CN.md +51 -46
  72. package/templates/claude-md/next-only/CLAUDE.zh-CN.md +46 -0
  73. package/templates/claude-md/node-api/CLAUDE.zh-CN.md +47 -0
  74. package/templates/commands/gstack/cso.md.ejs +213 -0
  75. package/templates/commands/gstack/office-hours.md.ejs +109 -0
  76. package/templates/commands/gstack/review.md.ejs +192 -0
  77. package/templates/commands/gstack/ship.md.ejs +256 -0
  78. package/templates/commands/opsx/apply.md.ejs +106 -0
  79. package/templates/commands/opsx/archive.md.ejs +88 -0
  80. package/templates/commands/opsx/explore.md.ejs +84 -0
  81. package/templates/commands/opsx/propose.md.ejs +185 -0
  82. package/templates/commands/superpowers/brainstorm.md.ejs +240 -0
  83. package/templates/commands/superpowers/tdd.md.ejs +230 -0
  84. package/templates/commands/superpowers/verify.md.ejs +211 -0
  85. package/templates/commands/workflow/plan.md.ejs +219 -0
  86. package/templates/hooks/check-deps.mjs +66 -65
  87. package/templates/memory/.gitkeep +0 -0
  88. package/templates/memory/MEMORY.md.ejs +88 -0
  89. package/templates/memory/dev-notes.md.ejs +61 -0
  90. package/templates/memory/troubleshooting.md.ejs +30 -0
  91. package/templates/rules/agents.md +49 -49
  92. package/templates/rules/coding-style.md +156 -117
  93. package/templates/rules/development-workflow.md +103 -50
  94. package/templates/rules/git-workflow.md +103 -47
  95. package/templates/rules/hooks.md +159 -0
  96. package/templates/rules/memory.md +106 -0
  97. package/templates/rules/patterns.md +117 -48
  98. package/templates/rules/performance.md +108 -0
  99. package/templates/rules/security.md +52 -37
  100. package/templates/rules/testing.md +83 -30
  101. package/templates/settings/settings.template.json +18 -2
  102. package/templates/skills/advanced/caveman/SKILL.md.ejs +144 -0
  103. package/templates/skills/advanced/diagnose/SKILL.md.ejs +159 -0
  104. package/templates/skills/advanced/grill-with-docs/SKILL.md.ejs +154 -0
  105. package/templates/skills/advanced/improve-codebase-architecture/SKILL.md.ejs +172 -0
  106. package/templates/skills/backend/backend-patterns/SKILL.md.ejs +263 -0
  107. package/templates/skills/database/database-migrations/SKILL.md.ejs +202 -0
  108. package/templates/skills/database/postgres-patterns/SKILL.md.ejs +235 -0
  109. package/templates/skills/devops/deployment-patterns/SKILL.md.ejs +228 -0
  110. package/templates/skills/devops/docker-patterns/SKILL.md.ejs +215 -0
  111. package/templates/skills/frontend/frontend-patterns/SKILL.md.ejs +195 -0
  112. package/templates/skills/skill-manifest.json +59 -0
  113. package/templates/skills/skills-lock.template.json +12 -0
  114. package/templates/skills/testing/e2e-testing/SKILL.md.ejs +224 -0
  115. package/templates/skills/workflow/coding-standards/SKILL.md.ejs +143 -0
  116. package/templates/skills/workflow/search-first/SKILL.md.ejs +103 -0
  117. package/templates/skills/workflow/security-review/SKILL.md.ejs +146 -0
  118. package/templates/skills/workflow/strategic-compact/SKILL.md.ejs +108 -0
  119. package/templates/skills/workflow/tdd-workflow/SKILL.md.ejs +104 -0
  120. package/templates/skills/workflow/verification-loop/SKILL.md.ejs +144 -0
@@ -0,0 +1,108 @@
1
+ # Strategic Context Compaction — 上下文策略压缩
2
+
3
+ > 使用此 skill 时:当上下文窗口使用超过 70%、或经历 30+ 轮对话、或在任务阶段切换时。
4
+
5
+ ## 什么是上下文压缩
6
+
7
+ 上下文压缩(Context Compaction)是指对话达到一定长度后,用户主动清理对话历史以释放上下文窗口的操作。作为 AI,你需要配合用户完成有意义的压缩,而不是简单地删除历史。
8
+
9
+ ## 什么时候该压缩
10
+
11
+ ```
12
+ ┌──────────────────────────────────────────────────────────┐
13
+ │ 触发条件 │
14
+ │ ✅ 任务阶段切换 (设计→实现、实现→测试、测试→审查) │
15
+ │ ✅ 长时间编码 (连续 30+ 轮对话未压缩) │
16
+ │ ✅ 上下文告警 (看到"上下文接近限制"提示) │
17
+ │ ✅ 方向变更 (需求变更、技术方案更换) │
18
+ │ ❌ 正在解决一个复杂 Bug — 先解决再压缩 │
19
+ └──────────────────────────────────────────────────────────┘
20
+ ```
21
+
22
+ ## 压缩中保留什么 vs 丢弃什么
23
+
24
+ ### 保留(Survives)
25
+
26
+ ```text
27
+ ✅ 项目核心结构
28
+ - 目录结构、模块组织方式
29
+ - 关键文件的用途和位置
30
+
31
+ ✅ 已做出的技术决策
32
+ - 架构选择及理由
33
+ - 约定和规范
34
+
35
+ ✅ 当前任务状态
36
+ - 哪些完成了、哪些进行中、哪些待办
37
+ - 当前遇到的阻塞问题(如果未解决)
38
+
39
+ ✅ 用户偏好和模式
40
+ - 用户喜欢的代码风格
41
+ - 用户对某些问题的处理方式
42
+
43
+ ✅ 关键上下文
44
+ - 当次对话的主要目标
45
+ - 项目 CLAUDE.md 中的规则
46
+ ```
47
+
48
+ ### 丢弃(Lost — 需重新加载)
49
+
50
+ ```text
51
+ ❌ 详细的实现步骤
52
+ - 具体写了哪些文件、哪些函数
53
+ - 修改的详细顺序
54
+
55
+ ❌ 调试过程
56
+ - 试过的错误方案
57
+ - 详细错误信息(除非当前仍相关)
58
+
59
+ ❌ 对话中的辅助内容
60
+ - 搜索结果的详细内容
61
+ - 文档片段
62
+
63
+ ❌ 确认性对话
64
+ - "好的"、"明白了"、"继续"
65
+ - 无信息量的来回确认
66
+ ```
67
+
68
+ ## 压缩后怎么做
69
+
70
+ 用户压缩后:
71
+
72
+ ```text
73
+ 1. 重新加载关键上下文
74
+ - 读取项目 CLAUDE.md
75
+ - 读取当前 todolist.md / PROGRESS.md
76
+ - 读取最近修改的关键文件
77
+
78
+ 2. 确认阶段
79
+ - "我们之前在实现 X 功能,当前进展到 Y 阶段"
80
+ - "下一个任务是 Z,继续吗?"
81
+
82
+ 3. 继续执行
83
+ - 从压缩前的断点继续
84
+ - 不要要求用户重复已经说过的话
85
+ ```
86
+
87
+ ## AI 端优化
88
+
89
+ 作为 AI,你可以主动帮助用户节省上下文空间:
90
+
91
+ ```text
92
+ 【精简回答】
93
+ - 避免重复确认(用户说"继续"后直接执行)
94
+ - 避免复述全部代码(只展示关键部分或 diff)
95
+ - 避免罗列所有选项(先推荐,再问是否看其他)
96
+
97
+ 【用引用代替复制】
98
+ - 使用 "参考 X 文件的 Y 函数" 代替粘贴整个函数
99
+ - 使用文件路径引用已存在的代码
100
+
101
+ 【结构化输出】
102
+ - 用表格/列表代替段落
103
+ - 结果优先:先给结论,再给(可折叠的)细节
104
+
105
+ 【及时建议压缩】
106
+ - 检测到轮数增加时主动提示:"已进行 X 轮对话,建议压缩上下文"
107
+ - 任务阶段切换时主动提示
108
+ ```
@@ -0,0 +1,104 @@
1
+ # TDD Workflow — Red-Green-Refactor
2
+
3
+ > 使用此 skill 时:写入任何实现代码之前,必须先调用此 skill。
4
+
5
+ ## TDD 铁律
6
+
7
+ **RED → GREEN → REFACTOR — 严格按顺序,不可跳过任一阶段。**
8
+
9
+ ```
10
+ ┌─────────────────────────────────────────────────────┐
11
+ │ ① RED 写一个失败的测试 │
12
+ │ ② GREEN 写最简实现让测试通过 │
13
+ │ ③ REFACTOR 重构代码,保持测试通过 │
14
+ │ ④ LOOP 回到 ① 直到功能完成 │
15
+ └─────────────────────────────────────────────────────┘
16
+ ```
17
+
18
+ ### 阶段详解
19
+
20
+ #### ① RED — 编写测试(先写!)
21
+
22
+ - 根据功能验收标准写测试用例
23
+ - 测试断言失败是正常的 — 功能还没实现
24
+ - 测试粒度:一个测试验证一个行为
25
+ - 命名格式:`{方法/组件名} — {场景} — {期望结果}`
26
+
27
+ ```text
28
+ // 示例命名
29
+ createUser — with valid data — returns user object with ID
30
+ createUser — with duplicate email — throws ValidationError
31
+ UserAvatar — when image fails to load — shows fallback initials
32
+ ```
33
+
34
+ #### ② GREEN — 最简实现
35
+
36
+ - 只写刚好够让测试通过的代码
37
+ - 不要优化、不要抽象、不要加"将来可能需要"的功能
38
+ - 可以硬编码返回值 — 后续测试会迫使你泛化
39
+ - 本阶段的目标是**通过测试**,不是"写好代码"
40
+
41
+ #### ③ REFACTOR — 清理代码
42
+
43
+ - 测试通过后才能重构
44
+ - 提取重复代码、优化命名、简化逻辑
45
+ - 重构时不改行为(不改测试、不改 API)
46
+ - 每步修改后跑测试确认没破坏任何东西
47
+
48
+ ## 测试类型决策矩阵
49
+
50
+ | 要验证什么 | 测试类型 | 速度 | 写几个 | 是否需要 mock |
51
+ |-----------|---------|------|--------|-------------|
52
+ | 工具函数/纯逻辑 | Unit | 毫秒级 | 边界值全覆盖 | 否 |
53
+ | 组件渲染逻辑 | Unit | 毫秒级 | 1-2 个 happy path | 否 |
54
+ | 组件交互行为 | Integration | 毫秒级 | 关键路径 | 否 |
55
+ | API 端点行为 | Integration | 秒级 | Happy + 错误路径 | 是(外部服务) |
56
+ | 数据库操作 | Integration | 秒级 | CRUD + 约束 | 是(mock DB 或内存 DB) |
57
+ | 跨服务流程 | E2E | 秒-分级 | 核心用户旅程 | 否(真实实例) |
58
+
59
+ ## 覆盖率要求
60
+
61
+ - **单元测试**:纯逻辑层 ≥95%,组件层 ≥80%
62
+ - **集成测试**:API 端点 100% 覆盖所有状态码路径
63
+ - **E2E 测试**:核心用户旅程 100%
64
+
65
+ > 不是数字游戏。覆盖率的目的是确保修改代码时测试能拦住回归。
66
+
67
+ ## 反模式(Anti-Patterns)
68
+
69
+ | 反模式 | 说明 | 正确做法 |
70
+ |--------|------|---------|
71
+ | 先写实现再补测试 | 测试只是验证而非驱动 | 先写测试,让测试驱动设计 |
72
+ | 测试依赖实现细节 | 重构时测试大面积红 | 测试行为而非实现 |
73
+ | 一个测试测多个东西 | 失败时不知道问题在哪 | 一个断言一个测试 |
74
+ | mock 过多 | 测试与实现耦合 | 只在边界层用 mock |
75
+ | 忽略 RED 阶段 | 直接写实现再测 | RED 阶段验证测试本身没问题 |
76
+ | 覆盖率 100% 强迫症 | 耗费精力在 trivial 代码上 | 按决策矩阵分配精力 |
77
+
78
+ ## CI 集成
79
+
80
+ ```text
81
+ 每次 push / PR 时自动运行:
82
+
83
+ [lint] → [type-check] → [unit-test] → [build] → [integration-test]
84
+
85
+ 门禁规则:
86
+ - 单元测试失败 → 阻断合并
87
+ - 集成测试失败 → 阻断合并
88
+ - 覆盖率低于阈值 → 警告(可配置是否阻断)
89
+ ```
90
+
91
+ ## 框架无关的测试结构模板
92
+
93
+ ```text
94
+ src/
95
+ ├── __tests__/
96
+ │ ├── unit/
97
+ │ │ └── {module}.test.* # 纯逻辑测试
98
+ │ ├── integration/
99
+ │ │ └── {module}.integration.* # 带 IO 的测试
100
+ │ └── helpers/
101
+ │ └── test-utils.* # 测试工具函数
102
+ └── e2e/
103
+ └── {feature}.spec.* # E2E 测试
104
+ ```
@@ -0,0 +1,144 @@
1
+ # Verification Loop — 6 阶段验证闭环
2
+
3
+ > 使用此 skill 时:在声称"完成"之前,必须执行此验证闭环。
4
+
5
+ ## 验证闭环
6
+
7
+ 每次修改后,按顺序执行 6 个阶段:
8
+
9
+ ```
10
+ ┌──────────────────────────────────────────────────────────┐
11
+ │ ① BUILD 编译通过,无错误 │
12
+ │ ② TYPE-CHECK 类型检查通过,无 `any` 遗漏 │
13
+ │ ③ LINT 静态分析通过,无违反规则 │
14
+ │ ④ TEST 所有测试通过,覆盖率达标 │
15
+ │ ⑤ SECURITY 安全检查通过,无敏感信息泄露 │
16
+ │ ⑥ DIFF-REVIEW 变更审查,确认改动范围与需求一致 │
17
+ └──────────────────────────────────────────────────────────┘
18
+ ```
19
+
20
+ ## 阶段详解
21
+
22
+ ### ① BUILD — 编译验证
23
+
24
+ 检查项目能否成功编译/转译。编译错误阻断后续所有步骤。
25
+
26
+ ```bash
27
+ # 通用
28
+ build # 项目构建命令
29
+ build --no-cache # 强制无缓存构建
30
+
31
+ # 验证标准
32
+ - 零编译错误
33
+ - 零编译警告(或已确认可忽略)
34
+ ```
35
+
36
+ ### ② TYPE-CHECK — 类型检查
37
+
38
+ 静态类型检查确保类型安全。
39
+
40
+ ```bash
41
+ # 通用
42
+ type-check # 类型检查命令
43
+ type-check --strict # 严格模式
44
+
45
+ # 验证标准
46
+ - 零类型错误
47
+ - 无显式 `any` 类型(除非有显式豁免注释)
48
+ - 无未使用的变量/导入
49
+ ```
50
+
51
+ ### ③ LINT — 静态分析
52
+
53
+ 代码风格和潜在错误检查。
54
+
55
+ ```bash
56
+ # 通用
57
+ lint # 静态分析命令
58
+ lint --fix # 自动修复可修复问题
59
+
60
+ # 验证标准
61
+ - 零错误(error)
62
+ - 零警告(warning)或已确认的豁免
63
+ - 无 `console.log`(生产代码中)
64
+ - 无 TODO/FIXME 残留(除非有对应 issue 跟踪)
65
+ ```
66
+
67
+ ### ④ TEST — 测试验证
68
+
69
+ 确保行为正确性。
70
+
71
+ ```bash
72
+ # 通用
73
+ test # 运行所有测试
74
+ test --coverage # 带覆盖率报告
75
+ test --changed # 仅运行受影响的测试(快速反馈)
76
+
77
+ # 验证标准
78
+ - 所有测试通过
79
+ - 新增代码覆盖率 ≥80%
80
+ - 总覆盖率不下降
81
+ ```
82
+
83
+ ### ⑤ SECURITY — 安全检查
84
+
85
+ 防止敏感信息泄露。
86
+
87
+ ```bash
88
+ # 检查清单(手动/自动化)
89
+ - 扫描硬编码密钥:git diff 中不应出现 token / password / secret
90
+ - 检查新增依赖:确认无已知漏洞(`audit`)
91
+ - 检查文件权限:配置文件不应包含真实凭据
92
+ - 检查日志语句:不输出请求体、响应体、堆栈信息
93
+ ```
94
+
95
+ ### ⑥ DIFF-REVIEW — 变更审查
96
+
97
+ 最后审视改动的完整性。
98
+
99
+ ```bash
100
+ # 审查命令
101
+ diff --stat # 概览变更文件
102
+ diff HEAD # 审查具体变更
103
+
104
+ # 审查清单
105
+ - [ ] 变更范围与需求一致(没有多余修改)
106
+ - [ ] 无死代码/注释掉的代码
107
+ - [ ] 无调试代码残留
108
+ - [ ] 错误提示对用户友好
109
+ - [ ] 边界情况已处理(空值、超长值、特殊字符)
110
+ - [ ] 文档已同步(如有需要)
111
+ ```
112
+
113
+ ## 持续模式
114
+
115
+ 在开发过程中,可以在后台持续运行验证循环:
116
+
117
+ ```bash
118
+ # 持续验证(文件变化时自动重跑)
119
+ test --watch # 测试持续模式
120
+ lint --watch # lint 持续模式
121
+ build --watch # 构建持续模式
122
+ ```
123
+
124
+ ## 各阶段速度参考
125
+
126
+ | 阶段 | 通常耗时 | 建议频率 |
127
+ |------|---------|---------|
128
+ | BUILD | 1-30s | 每次保存 |
129
+ | TYPE-CHECK | 1-10s | 每次保存 |
130
+ | LINT | 0.5-5s | 每次保存 |
131
+ | TEST | 2-60s | 每次提交前 |
132
+ | SECURITY | 1-5s | 每次提交前 |
133
+ | DIFF-REVIEW | 10-30s | 每次提交前 |
134
+
135
+ ## 故障场景处理
136
+
137
+ | 场景 | 动作 |
138
+ |------|------|
139
+ | BUILD 失败 | 修复语法/配置错误 → 重跑 ① |
140
+ | TYPE-CHECK 失败 | 修正类型 → 重跑 ② |
141
+ | LINT 报错 | 修复风格问题 → 重跑 ③ |
142
+ | TEST 失败 | 分析失败原因 → 修实现或修测试 → 重跑 ④ |
143
+ | 安全检查发现密钥 | 立即更换密钥 + 从 git 历史移除 → 重跑 ⑤ |
144
+ | DIFF 发现多余改动 | 还原无关变更 → 重跑 ⑥ |
@@ -0,0 +1,40 @@
1
+ export declare function isObject(value: unknown): value is Record<string, unknown>;
2
+ export declare function deepMerge(target: Record<string, unknown>, source: Record<string, unknown>): Record<string, unknown>;
3
+ /**
4
+ * 合并 CLAUDE.md 内容
5
+ * - 如果已有文件包含 WORKFLOW 标记,替换标记区间
6
+ * - 否则追加到末尾
7
+ */
8
+ export declare function appendCLAUDEmd(existingContent: string, newContent: string): string;
9
+ /**
10
+ * 深度合并 settings.json
11
+ * - meta 键不被覆盖
12
+ * - 嵌套对象递归合并
13
+ * - 数组和基本类型直接替换
14
+ */
15
+ export declare function mergeSettingsJson(existing: Record<string, unknown>, newSettings: Record<string, unknown>): string;
16
+ export type ProjectType = 'web' | 'api' | 'fullstack' | 'other';
17
+ export interface SkillManifest {
18
+ version: number;
19
+ domains: Record<string, {
20
+ always?: boolean;
21
+ manual?: boolean;
22
+ projectTypes?: string[];
23
+ needsDb?: boolean;
24
+ userLevel?: string;
25
+ label: string;
26
+ desc: string;
27
+ skills: string[];
28
+ }>;
29
+ }
30
+ export interface SkillSelectionInput {
31
+ projectType: ProjectType;
32
+ needsDb: boolean;
33
+ userLevel: 'vibe-coder' | 'developer';
34
+ selectedDomains: string[];
35
+ }
36
+ export declare function resolveSelectedSkills(input: SkillSelectionInput, manifest: SkillManifest): string[];
37
+ export declare function getSkillTemplateDir(skillName: string, manifest: SkillManifest): string;
38
+ export declare function loadSkillManifest(templatesDir: string): SkillManifest;
39
+ export declare function getRecommendedDomains(projectType: ProjectType, needsDb: boolean, userLevel: 'vibe-coder' | 'developer'): string[];
40
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAIA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAcnH;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAiBlF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAGjH;AAMD,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,WAAW,GAAG,OAAO,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QACtB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,YAAY,GAAG,WAAW,CAAC;IACtC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,EAAE,CAqCnG;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAOtF;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,CAGrE;AAED,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,GAAG,WAAW,GAAG,MAAM,EAAE,CAmBjI"}
package/dist/utils.js ADDED
@@ -0,0 +1,110 @@
1
+ // 核心工具函数 — 导出供测试使用
2
+ import { readFileSync } from 'node:fs';
3
+ export function isObject(value) {
4
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
5
+ }
6
+ export function deepMerge(target, source) {
7
+ const result = { ...target };
8
+ for (const key of Object.keys(source)) {
9
+ if (key === 'meta')
10
+ continue;
11
+ if (isObject(source[key]) && isObject(result[key])) {
12
+ result[key] = deepMerge(result[key], source[key]);
13
+ }
14
+ else {
15
+ result[key] = source[key];
16
+ }
17
+ }
18
+ return result;
19
+ }
20
+ /**
21
+ * 合并 CLAUDE.md 内容
22
+ * - 如果已有文件包含 WORKFLOW 标记,替换标记区间
23
+ * - 否则追加到末尾
24
+ */
25
+ export function appendCLAUDEmd(existingContent, newContent) {
26
+ const markerStart = '<!-- WORKFLOW-START -->';
27
+ const markerEnd = '<!-- WORKFLOW-END -->';
28
+ if (existingContent.includes(markerStart)) {
29
+ const before = existingContent.substring(0, existingContent.indexOf(markerStart));
30
+ const after = existingContent.substring(existingContent.indexOf(markerEnd) + markerEnd.length);
31
+ const workflowSection = newContent.substring(newContent.indexOf(markerStart), newContent.indexOf(markerEnd) + markerEnd.length);
32
+ return before + workflowSection + after;
33
+ }
34
+ return existingContent + '\n' + newContent;
35
+ }
36
+ /**
37
+ * 深度合并 settings.json
38
+ * - meta 键不被覆盖
39
+ * - 嵌套对象递归合并
40
+ * - 数组和基本类型直接替换
41
+ */
42
+ export function mergeSettingsJson(existing, newSettings) {
43
+ const merged = deepMerge(existing, newSettings);
44
+ return JSON.stringify(merged, null, 2) + '\n';
45
+ }
46
+ export function resolveSelectedSkills(input, manifest) {
47
+ const skills = new Set();
48
+ for (const [domainKey, domain] of Object.entries(manifest.domains)) {
49
+ if (domain.always) {
50
+ if (input.selectedDomains.includes(domainKey)) {
51
+ domain.skills.forEach(s => skills.add(s));
52
+ }
53
+ continue;
54
+ }
55
+ if (domain.manual) {
56
+ if (input.selectedDomains.includes(domainKey)) {
57
+ domain.skills.forEach(s => skills.add(s));
58
+ }
59
+ continue;
60
+ }
61
+ if (domain.projectTypes && input.selectedDomains.includes(domainKey)) {
62
+ if (domain.projectTypes.includes(input.projectType)) {
63
+ domain.skills.forEach(s => skills.add(s));
64
+ }
65
+ continue;
66
+ }
67
+ if (domain.needsDb && input.needsDb && input.selectedDomains.includes(domainKey)) {
68
+ domain.skills.forEach(s => skills.add(s));
69
+ continue;
70
+ }
71
+ if (domain.userLevel && input.userLevel === domain.userLevel && input.selectedDomains.includes(domainKey)) {
72
+ domain.skills.forEach(s => skills.add(s));
73
+ continue;
74
+ }
75
+ }
76
+ return [...skills].sort();
77
+ }
78
+ export function getSkillTemplateDir(skillName, manifest) {
79
+ for (const [domainKey, domain] of Object.entries(manifest.domains)) {
80
+ if (domain.skills.includes(skillName)) {
81
+ return domainKey;
82
+ }
83
+ }
84
+ return 'workflow';
85
+ }
86
+ export function loadSkillManifest(templatesDir) {
87
+ const manifestPath = `${templatesDir}/skills/skill-manifest.json`;
88
+ return JSON.parse(readFileSync(manifestPath, 'utf-8'));
89
+ }
90
+ export function getRecommendedDomains(projectType, needsDb, userLevel) {
91
+ const domains = ['workflow'];
92
+ if (projectType === 'web' || projectType === 'fullstack') {
93
+ domains.push('frontend', 'testing');
94
+ }
95
+ if (projectType === 'api' || projectType === 'fullstack') {
96
+ domains.push('backend');
97
+ if (needsDb)
98
+ domains.push('database');
99
+ if (!domains.includes('testing'))
100
+ domains.push('testing');
101
+ }
102
+ if (projectType === 'other') {
103
+ domains.push('testing');
104
+ }
105
+ if (userLevel === 'developer') {
106
+ domains.push('advanced');
107
+ }
108
+ return domains;
109
+ }
110
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "create-vibe-workflow",
3
- "version": "0.1.0",
4
- "description": "一键安装 Claude Code 开发工作流面向非专业编程人员的 Vibe Coding 编排插件",
3
+ "version": "0.2.0",
4
+ "description": "一键安装 Claude Code 完整工作流16 skills + 12 commands + 记忆系统 + 10 规则,面向非专业编程人员",
5
5
  "type": "module",
6
6
  "keywords": [
7
7
  "claude-code",
@@ -1,46 +1,51 @@
1
- <!-- WORKFLOW-START -->
2
- <!-- 此区域由 create-vibe-workflow 自动生成,重跑 CLI 时会更新 -->
3
-
4
- ## AI 协作工具链
5
-
6
- 本项目使用多层 AI 工具协作体系:
7
-
8
- ```
9
- 你的业务需求
10
-
11
- OpenSpec ─── 把想法变成结构化的需求规格和任务清单
12
-
13
- gstack ───── 虚拟团队角色审查(CEO审查/设计审查/工程审查)
14
-
15
- Superpowers 强制执行正确的开发流程(TDD/系统调试/验证)
16
- ```
17
-
18
- ### 标准开发流程
19
-
20
- ```
21
- ① 需求澄清(OpenSpec)→ ② 计划拆分 → ③ 研究复用
22
- ④ TodoList编写 → ⑤ TDD开发 → ⑥ 代码审查
23
- → ⑦ 安全审查 → ⑧ 文档反写 → ⑨ 提交归档
24
- ```
25
-
26
- ### 常用命令
27
-
28
- | 场景 | 命令 |
29
- |------|------|
30
- | 开发新功能 | `/opsx:propose` 开始 |
31
- | 修 Bug | 自动触发 `systematic-debugging` |
32
- | 审查代码 | `/review` |
33
- | 验收功能 | `/qa` |
34
- | 准备发布 | `/ship` |
35
- | 安全审查 | `/cso` |
36
-
37
- ## 技术栈
38
-
39
- - 语言: TypeScript 5.x (strict mode)
40
- - 前端: Next.js 15 (App Router) + shadcn/ui + Tailwind CSS
41
- - 后端: NestJS 11 (REST API)
42
- - 数据库: PostgreSQL 16+ + Drizzle ORM
43
- - 校验: Zod(前后端共享 schema)
44
- - 测试: Vitest (单元) + Playwright (E2E)
45
-
46
- <!-- WORKFLOW-END -->
1
+ <!-- WORKFLOW-START -->
2
+ <!-- 此区域由 create-vibe-workflow 自动生成,重跑 CLI 时会更新 -->
3
+
4
+ ## AI 协作工具链
5
+
6
+ 本项目使用多层 AI 工具协作体系,确保代码质量和开发纪律:
7
+
8
+ ```
9
+ 你的业务需求
10
+
11
+ 需求规格化 把想法变成结构化需求
12
+
13
+ 计划审查 拆解任务、验证假设、识别风险
14
+
15
+ 流程纪律 TDD / 文档反写 / 安全检查 / 代码审查
16
+ ```
17
+
18
+ ### 标准开发流程
19
+
20
+ > 完整 9 步流程(含各步骤完成标志 / 跳过条件)见 `.claude/rules/development-workflow.md`
21
+
22
+ ### 常用命令
23
+
24
+ | 场景 | 命令 | 说明 |
25
+ |------|------|------|
26
+ | 开发新功能 | 从第①步开始 | 先澄清需求,再拆计划 |
27
+ | 修 Bug | 先写复现步骤 → ⑤→⑥ | 遵循 TDD + 审查流程 |
28
+ | 代码审查 | 第⑥步 | 写完代码立即执行 |
29
+ | 安全检查 | 第⑦步 | 敏感模块必须执行 |
30
+ | 提交代码 | 第⑧→⑨步 | 同步文档后再提交 |
31
+
32
+ ## 技术栈
33
+
34
+ - **语言**: TypeScript 5.x (strict mode)
35
+ - **前端**: Next.js 15 (App Router) + shadcn/ui + Tailwind CSS
36
+ - **后端**: NestJS 11 (REST API)
37
+ - **数据库**: PostgreSQL 16+ + Drizzle ORM
38
+ - **校验**: Zod(前后端共享 schema)
39
+ - **测试**: Vitest (单元) + Playwright (E2E)
40
+
41
+ ## 项目约定
42
+
43
+ | 约定 | 说明 |
44
+ |------|------|
45
+ | 代码风格 | 见 `.claude/rules/coding-style.md` |
46
+ | Git 规范 | 见 `.claude/rules/git-workflow.md` |
47
+ | 测试要求 | 见 `.claude/rules/testing.md` |
48
+ | 安全标准 | 见 `.claude/rules/security.md`(仅 auth/finance/system 模块强制执行) |
49
+ | 设计模式 | 统一使用 Repository + Service 层 |
50
+
51
+ <!-- WORKFLOW-END -->
@@ -0,0 +1,46 @@
1
+ <!-- WORKFLOW-START -->
2
+ <!-- 此区域由 create-vibe-workflow 自动生成,重跑 CLI 时会更新 -->
3
+
4
+ ## AI 协作工具链
5
+
6
+ 本项目使用多层 AI 工具协作体系:
7
+
8
+ ```
9
+ 你的业务需求
10
+
11
+ ① 需求规格化 — 把想法变成结构化需求
12
+
13
+ ② 计划审查 — 拆解任务、验证假设
14
+
15
+ ③ 流程纪律 — TDD / 文档反写 / 安全检查
16
+ ```
17
+
18
+ ### 标准开发流程
19
+
20
+ ```
21
+ ① 需求澄清 → ② 计划拆分 → ③ 研究复用
22
+ → ④ TodoList编写 → ⑤ TDD开发 → ⑥ 代码审查
23
+ → ⑦ 安全审查 → ⑧ 文档反写 → ⑨ 提交归档
24
+ ```
25
+
26
+ ### 常用命令
27
+
28
+ | 场景 | 命令 |
29
+ |------|------|
30
+ | 开发新功能 | 从第①步开始,先写 PRD/用户故事 |
31
+ | 修 Bug | 先写复现步骤,再修 |
32
+ | 审查代码 | 每次写完代码后执行 |
33
+ | 提交代码 | 检查文档同步后提交 |
34
+
35
+ ## 技术栈
36
+
37
+ - 语言: TypeScript 5.x (strict mode)
38
+ - 框架: Next.js 15 (App Router)
39
+ - UI: shadcn/ui + Tailwind CSS 4
40
+ - 样式: CSS Modules / Tailwind CSS
41
+ - 状态管理: React hooks + Server State (SWR/TanStack Query)
42
+ - 校验: Zod schema
43
+ - 测试: Vitest (单元) + Playwright (E2E)
44
+ - 部署: Vercel
45
+
46
+ <!-- WORKFLOW-END -->