vibe-fabric 0.1.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 (271) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +171 -0
  3. package/dist/cli/commands/claude.d.ts +19 -0
  4. package/dist/cli/commands/claude.d.ts.map +1 -0
  5. package/dist/cli/commands/claude.js +107 -0
  6. package/dist/cli/commands/claude.js.map +1 -0
  7. package/dist/cli/commands/coverage.d.ts +37 -0
  8. package/dist/cli/commands/coverage.d.ts.map +1 -0
  9. package/dist/cli/commands/coverage.js +374 -0
  10. package/dist/cli/commands/coverage.js.map +1 -0
  11. package/dist/cli/commands/doctor.d.ts +30 -0
  12. package/dist/cli/commands/doctor.d.ts.map +1 -0
  13. package/dist/cli/commands/doctor.js +187 -0
  14. package/dist/cli/commands/doctor.js.map +1 -0
  15. package/dist/cli/commands/gaps.d.ts +52 -0
  16. package/dist/cli/commands/gaps.d.ts.map +1 -0
  17. package/dist/cli/commands/gaps.js +487 -0
  18. package/dist/cli/commands/gaps.js.map +1 -0
  19. package/dist/cli/commands/help.d.ts +7 -0
  20. package/dist/cli/commands/help.d.ts.map +1 -0
  21. package/dist/cli/commands/help.js +51 -0
  22. package/dist/cli/commands/help.js.map +1 -0
  23. package/dist/cli/commands/init.d.ts +39 -0
  24. package/dist/cli/commands/init.d.ts.map +1 -0
  25. package/dist/cli/commands/init.js +246 -0
  26. package/dist/cli/commands/init.js.map +1 -0
  27. package/dist/cli/commands/prd.d.ts +30 -0
  28. package/dist/cli/commands/prd.d.ts.map +1 -0
  29. package/dist/cli/commands/prd.js +179 -0
  30. package/dist/cli/commands/prd.js.map +1 -0
  31. package/dist/cli/commands/repo/add.d.ts +36 -0
  32. package/dist/cli/commands/repo/add.d.ts.map +1 -0
  33. package/dist/cli/commands/repo/add.js +303 -0
  34. package/dist/cli/commands/repo/add.js.map +1 -0
  35. package/dist/cli/commands/scope.d.ts +36 -0
  36. package/dist/cli/commands/scope.d.ts.map +1 -0
  37. package/dist/cli/commands/scope.js +312 -0
  38. package/dist/cli/commands/scope.js.map +1 -0
  39. package/dist/cli/commands/send.d.ts +43 -0
  40. package/dist/cli/commands/send.d.ts.map +1 -0
  41. package/dist/cli/commands/send.js +469 -0
  42. package/dist/cli/commands/send.js.map +1 -0
  43. package/dist/cli/commands/status.d.ts +32 -0
  44. package/dist/cli/commands/status.d.ts.map +1 -0
  45. package/dist/cli/commands/status.js +422 -0
  46. package/dist/cli/commands/status.js.map +1 -0
  47. package/dist/cli/commands/sync.d.ts +37 -0
  48. package/dist/cli/commands/sync.d.ts.map +1 -0
  49. package/dist/cli/commands/sync.js +299 -0
  50. package/dist/cli/commands/sync.js.map +1 -0
  51. package/dist/cli/commands/version.d.ts +7 -0
  52. package/dist/cli/commands/version.d.ts.map +1 -0
  53. package/dist/cli/commands/version.js +45 -0
  54. package/dist/cli/commands/version.js.map +1 -0
  55. package/dist/cli/index.d.ts +3 -0
  56. package/dist/cli/index.d.ts.map +1 -0
  57. package/dist/cli/index.js +65 -0
  58. package/dist/cli/index.js.map +1 -0
  59. package/dist/cli/ui/components/ActiveScopes.d.ts +13 -0
  60. package/dist/cli/ui/components/ActiveScopes.d.ts.map +1 -0
  61. package/dist/cli/ui/components/ActiveScopes.js +25 -0
  62. package/dist/cli/ui/components/ActiveScopes.js.map +1 -0
  63. package/dist/cli/ui/components/EmptyState.d.ts +24 -0
  64. package/dist/cli/ui/components/EmptyState.d.ts.map +1 -0
  65. package/dist/cli/ui/components/EmptyState.js +13 -0
  66. package/dist/cli/ui/components/EmptyState.js.map +1 -0
  67. package/dist/cli/ui/components/Header.d.ts +11 -0
  68. package/dist/cli/ui/components/Header.d.ts.map +1 -0
  69. package/dist/cli/ui/components/Header.js +32 -0
  70. package/dist/cli/ui/components/Header.js.map +1 -0
  71. package/dist/cli/ui/components/PrdCoverage.d.ts +12 -0
  72. package/dist/cli/ui/components/PrdCoverage.d.ts.map +1 -0
  73. package/dist/cli/ui/components/PrdCoverage.js +15 -0
  74. package/dist/cli/ui/components/PrdCoverage.js.map +1 -0
  75. package/dist/cli/ui/components/RecentActivity.d.ts +12 -0
  76. package/dist/cli/ui/components/RecentActivity.d.ts.map +1 -0
  77. package/dist/cli/ui/components/RecentActivity.js +40 -0
  78. package/dist/cli/ui/components/RecentActivity.js.map +1 -0
  79. package/dist/cli/ui/components/RepoList.d.ts +12 -0
  80. package/dist/cli/ui/components/RepoList.d.ts.map +1 -0
  81. package/dist/cli/ui/components/RepoList.js +24 -0
  82. package/dist/cli/ui/components/RepoList.js.map +1 -0
  83. package/dist/cli/ui/components/Shortcuts.d.ts +7 -0
  84. package/dist/cli/ui/components/Shortcuts.d.ts.map +1 -0
  85. package/dist/cli/ui/components/Shortcuts.js +7 -0
  86. package/dist/cli/ui/components/Shortcuts.js.map +1 -0
  87. package/dist/cli/ui/components/index.d.ts +12 -0
  88. package/dist/cli/ui/components/index.d.ts.map +1 -0
  89. package/dist/cli/ui/components/index.js +12 -0
  90. package/dist/cli/ui/components/index.js.map +1 -0
  91. package/dist/cli/ui/dashboard.d.ts +9 -0
  92. package/dist/cli/ui/dashboard.d.ts.map +1 -0
  93. package/dist/cli/ui/dashboard.js +102 -0
  94. package/dist/cli/ui/dashboard.js.map +1 -0
  95. package/dist/core/commands.d.ts +32 -0
  96. package/dist/core/commands.d.ts.map +1 -0
  97. package/dist/core/commands.js +361 -0
  98. package/dist/core/commands.js.map +1 -0
  99. package/dist/core/config.d.ts +18 -0
  100. package/dist/core/config.d.ts.map +1 -0
  101. package/dist/core/config.js +78 -0
  102. package/dist/core/config.js.map +1 -0
  103. package/dist/core/coverage.d.ts +32 -0
  104. package/dist/core/coverage.d.ts.map +1 -0
  105. package/dist/core/coverage.js +286 -0
  106. package/dist/core/coverage.js.map +1 -0
  107. package/dist/core/dashboard/data.d.ts +73 -0
  108. package/dist/core/dashboard/data.d.ts.map +1 -0
  109. package/dist/core/dashboard/data.js +250 -0
  110. package/dist/core/dashboard/data.js.map +1 -0
  111. package/dist/core/dependencies.d.ts +39 -0
  112. package/dist/core/dependencies.d.ts.map +1 -0
  113. package/dist/core/dependencies.js +160 -0
  114. package/dist/core/dependencies.js.map +1 -0
  115. package/dist/core/doctor/auth.d.ts +22 -0
  116. package/dist/core/doctor/auth.d.ts.map +1 -0
  117. package/dist/core/doctor/auth.js +147 -0
  118. package/dist/core/doctor/auth.js.map +1 -0
  119. package/dist/core/doctor/config.d.ts +26 -0
  120. package/dist/core/doctor/config.d.ts.map +1 -0
  121. package/dist/core/doctor/config.js +172 -0
  122. package/dist/core/doctor/config.js.map +1 -0
  123. package/dist/core/doctor/environment.d.ts +26 -0
  124. package/dist/core/doctor/environment.d.ts.map +1 -0
  125. package/dist/core/doctor/environment.js +145 -0
  126. package/dist/core/doctor/environment.js.map +1 -0
  127. package/dist/core/doctor/index.d.ts +44 -0
  128. package/dist/core/doctor/index.d.ts.map +1 -0
  129. package/dist/core/doctor/index.js +134 -0
  130. package/dist/core/doctor/index.js.map +1 -0
  131. package/dist/core/doctor/repos.d.ts +22 -0
  132. package/dist/core/doctor/repos.d.ts.map +1 -0
  133. package/dist/core/doctor/repos.js +262 -0
  134. package/dist/core/doctor/repos.js.map +1 -0
  135. package/dist/core/doctor/sync.d.ts +18 -0
  136. package/dist/core/doctor/sync.d.ts.map +1 -0
  137. package/dist/core/doctor/sync.js +146 -0
  138. package/dist/core/doctor/sync.js.map +1 -0
  139. package/dist/core/gaps.d.ts +70 -0
  140. package/dist/core/gaps.d.ts.map +1 -0
  141. package/dist/core/gaps.js +448 -0
  142. package/dist/core/gaps.js.map +1 -0
  143. package/dist/core/github.d.ts +38 -0
  144. package/dist/core/github.d.ts.map +1 -0
  145. package/dist/core/github.js +102 -0
  146. package/dist/core/github.js.map +1 -0
  147. package/dist/core/prd/analyzer.d.ts +44 -0
  148. package/dist/core/prd/analyzer.d.ts.map +1 -0
  149. package/dist/core/prd/analyzer.js +259 -0
  150. package/dist/core/prd/analyzer.js.map +1 -0
  151. package/dist/core/prd/check.d.ts +17 -0
  152. package/dist/core/prd/check.d.ts.map +1 -0
  153. package/dist/core/prd/check.js +154 -0
  154. package/dist/core/prd/check.js.map +1 -0
  155. package/dist/core/prd/index.d.ts +6 -0
  156. package/dist/core/prd/index.d.ts.map +1 -0
  157. package/dist/core/prd/index.js +6 -0
  158. package/dist/core/prd/index.js.map +1 -0
  159. package/dist/core/project.d.ts +13 -0
  160. package/dist/core/project.d.ts.map +1 -0
  161. package/dist/core/project.js +810 -0
  162. package/dist/core/project.js.map +1 -0
  163. package/dist/core/prompts.d.ts +52 -0
  164. package/dist/core/prompts.d.ts.map +1 -0
  165. package/dist/core/prompts.js +266 -0
  166. package/dist/core/prompts.js.map +1 -0
  167. package/dist/core/repo/framework.d.ts +38 -0
  168. package/dist/core/repo/framework.d.ts.map +1 -0
  169. package/dist/core/repo/framework.js +142 -0
  170. package/dist/core/repo/framework.js.map +1 -0
  171. package/dist/core/repo/index.d.ts +6 -0
  172. package/dist/core/repo/index.d.ts.map +1 -0
  173. package/dist/core/repo/index.js +6 -0
  174. package/dist/core/repo/index.js.map +1 -0
  175. package/dist/core/repo/templates/claude-agents.d.ts +6 -0
  176. package/dist/core/repo/templates/claude-agents.d.ts.map +1 -0
  177. package/dist/core/repo/templates/claude-agents.js +173 -0
  178. package/dist/core/repo/templates/claude-agents.js.map +1 -0
  179. package/dist/core/repo/templates/claude-commands.d.ts +6 -0
  180. package/dist/core/repo/templates/claude-commands.d.ts.map +1 -0
  181. package/dist/core/repo/templates/claude-commands.js +278 -0
  182. package/dist/core/repo/templates/claude-commands.js.map +1 -0
  183. package/dist/core/repo/templates/claude-prompts.d.ts +6 -0
  184. package/dist/core/repo/templates/claude-prompts.d.ts.map +1 -0
  185. package/dist/core/repo/templates/claude-prompts.js +258 -0
  186. package/dist/core/repo/templates/claude-prompts.js.map +1 -0
  187. package/dist/core/repo/templates/claude-scripts.d.ts +6 -0
  188. package/dist/core/repo/templates/claude-scripts.d.ts.map +1 -0
  189. package/dist/core/repo/templates/claude-scripts.js +212 -0
  190. package/dist/core/repo/templates/claude-scripts.js.map +1 -0
  191. package/dist/core/repo/templates/index.d.ts +22 -0
  192. package/dist/core/repo/templates/index.d.ts.map +1 -0
  193. package/dist/core/repo/templates/index.js +121 -0
  194. package/dist/core/repo/templates/index.js.map +1 -0
  195. package/dist/core/repo/templates/vibe-readme.d.ts +6 -0
  196. package/dist/core/repo/templates/vibe-readme.d.ts.map +1 -0
  197. package/dist/core/repo/templates/vibe-readme.js +204 -0
  198. package/dist/core/repo/templates/vibe-readme.js.map +1 -0
  199. package/dist/core/repo/templates/vibe-scripts.d.ts +6 -0
  200. package/dist/core/repo/templates/vibe-scripts.d.ts.map +1 -0
  201. package/dist/core/repo/templates/vibe-scripts.js +308 -0
  202. package/dist/core/repo/templates/vibe-scripts.js.map +1 -0
  203. package/dist/core/repo/validation.d.ts +46 -0
  204. package/dist/core/repo/validation.d.ts.map +1 -0
  205. package/dist/core/repo/validation.js +154 -0
  206. package/dist/core/repo/validation.js.map +1 -0
  207. package/dist/core/runner.d.ts +38 -0
  208. package/dist/core/runner.d.ts.map +1 -0
  209. package/dist/core/runner.js +124 -0
  210. package/dist/core/runner.js.map +1 -0
  211. package/dist/core/send.d.ts +83 -0
  212. package/dist/core/send.d.ts.map +1 -0
  213. package/dist/core/send.js +565 -0
  214. package/dist/core/send.js.map +1 -0
  215. package/dist/core/status.d.ts +76 -0
  216. package/dist/core/status.d.ts.map +1 -0
  217. package/dist/core/status.js +430 -0
  218. package/dist/core/status.js.map +1 -0
  219. package/dist/core/sync/aggregator.d.ts +22 -0
  220. package/dist/core/sync/aggregator.d.ts.map +1 -0
  221. package/dist/core/sync/aggregator.js +278 -0
  222. package/dist/core/sync/aggregator.js.map +1 -0
  223. package/dist/core/sync/completion.d.ts +37 -0
  224. package/dist/core/sync/completion.d.ts.map +1 -0
  225. package/dist/core/sync/completion.js +264 -0
  226. package/dist/core/sync/completion.js.map +1 -0
  227. package/dist/core/sync/index.d.ts +51 -0
  228. package/dist/core/sync/index.d.ts.map +1 -0
  229. package/dist/core/sync/index.js +200 -0
  230. package/dist/core/sync/index.js.map +1 -0
  231. package/dist/core/sync/scanner.d.ts +39 -0
  232. package/dist/core/sync/scanner.d.ts.map +1 -0
  233. package/dist/core/sync/scanner.js +364 -0
  234. package/dist/core/sync/scanner.js.map +1 -0
  235. package/dist/types/config.d.ts +157 -0
  236. package/dist/types/config.d.ts.map +1 -0
  237. package/dist/types/config.js +58 -0
  238. package/dist/types/config.js.map +1 -0
  239. package/dist/types/coverage.d.ts +100 -0
  240. package/dist/types/coverage.d.ts.map +1 -0
  241. package/dist/types/coverage.js +8 -0
  242. package/dist/types/coverage.js.map +1 -0
  243. package/dist/types/doctor.d.ts +68 -0
  244. package/dist/types/doctor.d.ts.map +1 -0
  245. package/dist/types/doctor.js +5 -0
  246. package/dist/types/doctor.js.map +1 -0
  247. package/dist/types/gaps.d.ts +129 -0
  248. package/dist/types/gaps.d.ts.map +1 -0
  249. package/dist/types/gaps.js +8 -0
  250. package/dist/types/gaps.js.map +1 -0
  251. package/dist/types/prompts.d.ts +99 -0
  252. package/dist/types/prompts.d.ts.map +1 -0
  253. package/dist/types/prompts.js +5 -0
  254. package/dist/types/prompts.js.map +1 -0
  255. package/dist/types/runner.d.ts +156 -0
  256. package/dist/types/runner.d.ts.map +1 -0
  257. package/dist/types/runner.js +41 -0
  258. package/dist/types/runner.js.map +1 -0
  259. package/dist/types/send.d.ts +157 -0
  260. package/dist/types/send.d.ts.map +1 -0
  261. package/dist/types/send.js +18 -0
  262. package/dist/types/send.js.map +1 -0
  263. package/dist/types/status.d.ts +150 -0
  264. package/dist/types/status.d.ts.map +1 -0
  265. package/dist/types/status.js +15 -0
  266. package/dist/types/status.js.map +1 -0
  267. package/dist/types/sync.d.ts +259 -0
  268. package/dist/types/sync.d.ts.map +1 -0
  269. package/dist/types/sync.js +38 -0
  270. package/dist/types/sync.js.map +1 -0
  271. package/package.json +72 -0
@@ -0,0 +1,361 @@
1
+ /**
2
+ * Command file generation and management
3
+ *
4
+ * Handles creation and management of .claude/commands/ files for both
5
+ * the planning hub and dev repositories.
6
+ */
7
+ import { mkdir, writeFile, readFile, readdir, stat } from 'fs/promises';
8
+ import { existsSync } from 'fs';
9
+ import path from 'path';
10
+ /**
11
+ * Planning hub command templates
12
+ */
13
+ const PLANNING_HUB_COMMANDS = {
14
+ 'vibe-prd.md': `---
15
+ description: Create or update PRD using AI analysis
16
+ model: opus
17
+ ---
18
+
19
+ # PRD Management
20
+
21
+ You are helping manage a Product Requirements Document for this planning hub.
22
+
23
+ ## Instructions
24
+
25
+ 1. **Read current state:**
26
+ - Check \`docs/prd/\` for existing PRD structure
27
+ - Check \`docs/sync-cache/\` for synced repo data
28
+ - Read \`vibe-fabric.toml\` for project configuration
29
+
30
+ 2. **Determine intent:**
31
+ - If PRD doesn't exist: Create initial PRD structure
32
+ - If PRD exists: Assess what needs updating based on recent changes
33
+
34
+ 3. **For new PRD creation:**
35
+ - Ask user about core features and modules
36
+ - Create module structure in \`docs/prd/modules/\`
37
+ - Create vision document in \`docs/prd/vision/\`
38
+ - Update \`docs/prd/_index.md\` with overview
39
+
40
+ 4. **For PRD updates:**
41
+ - Identify gaps between PRD and implementation
42
+ - Suggest updates based on sync-cache data
43
+ - Mark deprecated requirements
44
+
45
+ ## Output
46
+
47
+ Update files in \`docs/prd/\` following the established structure.
48
+ `,
49
+ 'vibe-scope.md': `---
50
+ description: Create or manage scope briefs
51
+ model: sonnet
52
+ ---
53
+
54
+ # Scope Management
55
+
56
+ You are helping manage scope briefs for development work.
57
+
58
+ ## Instructions
59
+
60
+ 1. **Read current state:**
61
+ - Check \`docs/scopes/\` for existing scopes
62
+ - Check \`docs/prd/\` for requirements to scope
63
+ - Read coverage status from \`vibe coverage\` output
64
+
65
+ 2. **Determine action:**
66
+ - If creating new scope: Gather requirements from PRD
67
+ - If reviewing scope: Check completeness and dependencies
68
+ - If listing: Show scope summary by status
69
+
70
+ 3. **For new scope creation:**
71
+ - Identify uncovered PRD requirements
72
+ - Group related requirements into a scope
73
+ - Create scope file in \`docs/scopes/drafts/\`
74
+ - Link to PRD requirement IDs
75
+
76
+ 4. **Scope structure:**
77
+ - Follow template from existing completed scopes
78
+ - Include: Metadata, Summary, Requirements, Acceptance Criteria
79
+ - Specify dependencies on other scopes
80
+
81
+ ## Output
82
+
83
+ Create or update scope files in \`docs/scopes/\` directories.
84
+ `,
85
+ 'vibe-gaps.md': `---
86
+ description: Analyze gaps between PRD and implementation
87
+ model: sonnet
88
+ ---
89
+
90
+ # Gap Analysis
91
+
92
+ You are performing gap analysis between PRD requirements and implementation status.
93
+
94
+ ## Instructions
95
+
96
+ 1. **Read data:**
97
+ - \`docs/prd/\` for all requirements (REQ-XXX-NNN pattern)
98
+ - \`docs/scopes/\` for implementation coverage
99
+ - \`docs/sync-cache/\` for actual implementation state
100
+
101
+ 2. **Identify gaps:**
102
+ - **Missing:** Requirements with no scope coverage
103
+ - **Partial:** Requirements with incomplete scope coverage
104
+ - **Orphaned:** Scopes without PRD linkage
105
+
106
+ 3. **Prioritize gaps:**
107
+ - P1 (Critical): Security, data integrity, core features
108
+ - P2 (High): Important user-facing features
109
+ - P3 (Medium): Standard features
110
+ - P4 (Low): Nice-to-have, optimizations
111
+
112
+ 4. **Generate suggestions:**
113
+ - Recommend new scopes for missing requirements
114
+ - Suggest scope updates for partial coverage
115
+ - Flag potential technical debt
116
+
117
+ ## Output
118
+
119
+ Provide structured gap analysis with actionable recommendations.
120
+ `,
121
+ 'vibe-status.md': `---
122
+ description: Show project status summary
123
+ model: haiku
124
+ ---
125
+
126
+ # Status Summary
127
+
128
+ Generate a quick project status summary.
129
+
130
+ ## Instructions
131
+
132
+ 1. **Gather data:**
133
+ - Repository list from \`vibe-fabric.toml\`
134
+ - Scope counts by status (drafts, ready, sent, completed)
135
+ - PRD module coverage percentages
136
+ - Last sync timestamps from \`docs/sync-cache/\`
137
+
138
+ 2. **Format output:**
139
+ - Project overview (name, repos, sync status)
140
+ - Coverage metrics (PRD %, scope breakdown)
141
+ - Recent activity (last 5 scope changes)
142
+ - Next recommended actions
143
+
144
+ ## Output
145
+
146
+ Display a clear, formatted status table in the terminal.
147
+ `,
148
+ };
149
+ /**
150
+ * Dev repo command templates (subset for injection)
151
+ * Full set is in src/core/repo/templates/claude-commands.ts
152
+ */
153
+ const DEV_REPO_COMMANDS = {
154
+ 'plan-from-scope.md': `---
155
+ description: Create an implementation plan from a scope brief
156
+ ---
157
+
158
+ # Plan from Scope
159
+
160
+ Create a detailed implementation plan for scope: **$ARGUMENTS**
161
+
162
+ ## Instructions
163
+
164
+ 1. Read the scope file from \`vibe/incoming-scopes/$ARGUMENTS.md\`
165
+ 2. Understand all requirements and acceptance criteria
166
+ 3. Create a plan file in \`vibe/implementation-plans/active/\`
167
+ 4. Move the scope to \`vibe/incoming-scopes/processed/\`
168
+
169
+ ## Plan Structure
170
+
171
+ Include:
172
+ - Clear objective tied to scope
173
+ - All acceptance criteria as checklist items
174
+ - Concrete implementation steps
175
+ - Progress log section
176
+
177
+ ## Output
178
+
179
+ Create: \`vibe/implementation-plans/active/PLAN-[YYYYMMDD]-[short-name].md\`
180
+ `,
181
+ 'implement-plan.md': `---
182
+ description: Implement a plan step by step with guidance
183
+ ---
184
+
185
+ # Implement Plan
186
+
187
+ Implement the plan: **$ARGUMENTS**
188
+
189
+ ## Instructions
190
+
191
+ 1. Read the plan from \`vibe/implementation-plans/active/$ARGUMENTS.md\`
192
+ 2. Review the acceptance criteria
193
+ 3. Implement each step, updating progress log
194
+ 4. Check off criteria as completed
195
+ 5. When done, move plan to \`completed/\`
196
+
197
+ ## Guidelines
198
+
199
+ - Implement one step at a time
200
+ - Update progress log after each step
201
+ - Ask for clarification if requirements are unclear
202
+ - Document any deviations from the plan
203
+ `,
204
+ 'ralph.md': `---
205
+ description: Ralph autonomous multi-session executor
206
+ ---
207
+
208
+ # Ralph
209
+
210
+ Parse subcommand from $ARGUMENTS:
211
+
212
+ **execute {PLAN_ID}**:
213
+ Start autonomous execution loop for a plan.
214
+
215
+ **plan {SCOPE_ID}**:
216
+ Start autonomous planning loop for a scope.
217
+
218
+ **status**:
219
+ Show current Ralph progress.
220
+
221
+ **cancel**:
222
+ Stop active Ralph loop and cleanup.
223
+ `,
224
+ };
225
+ /**
226
+ * Parse command frontmatter from a command file
227
+ */
228
+ function parseCommandFrontmatter(content) {
229
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
230
+ if (!frontmatterMatch || !frontmatterMatch[1]) {
231
+ return { description: 'No description' };
232
+ }
233
+ const frontmatter = frontmatterMatch[1];
234
+ const descMatch = frontmatter.match(/description:\s*(.+)/);
235
+ const modelMatch = frontmatter.match(/model:\s*(.+)/);
236
+ return {
237
+ description: descMatch?.[1]?.trim() || 'No description',
238
+ model: modelMatch?.[1]?.trim(),
239
+ };
240
+ }
241
+ /**
242
+ * Generate planning hub commands in .claude/commands/
243
+ */
244
+ export async function generatePlanningHubCommands(projectPath) {
245
+ const commandsDir = path.join(projectPath, '.claude', 'commands');
246
+ await mkdir(commandsDir, { recursive: true });
247
+ const created = [];
248
+ for (const [filename, content] of Object.entries(PLANNING_HUB_COMMANDS)) {
249
+ const filePath = path.join(commandsDir, filename);
250
+ await writeFile(filePath, content, 'utf-8');
251
+ created.push(filename);
252
+ }
253
+ return created;
254
+ }
255
+ /**
256
+ * Generate dev repo commands (for injection via vibe repo add)
257
+ */
258
+ export async function generateDevRepoCommands(repoPath) {
259
+ const commandsDir = path.join(repoPath, '.claude', 'commands');
260
+ await mkdir(commandsDir, { recursive: true });
261
+ const created = [];
262
+ for (const [filename, content] of Object.entries(DEV_REPO_COMMANDS)) {
263
+ const filePath = path.join(commandsDir, filename);
264
+ await writeFile(filePath, content, 'utf-8');
265
+ created.push(filename);
266
+ }
267
+ return created;
268
+ }
269
+ /**
270
+ * List all commands in a project
271
+ */
272
+ export async function listCommands(projectPath) {
273
+ const commandsDir = path.join(projectPath, '.claude', 'commands');
274
+ const customDir = path.join(commandsDir, 'custom');
275
+ const builtin = [];
276
+ const custom = [];
277
+ // Scan builtin commands
278
+ if (existsSync(commandsDir)) {
279
+ const files = await readdir(commandsDir);
280
+ for (const file of files) {
281
+ if (!file.endsWith('.md'))
282
+ continue;
283
+ const filePath = path.join(commandsDir, file);
284
+ const fileStat = await stat(filePath);
285
+ if (!fileStat.isFile())
286
+ continue;
287
+ const content = await readFile(filePath, 'utf-8');
288
+ const { description, model } = parseCommandFrontmatter(content);
289
+ builtin.push({
290
+ name: file.replace('.md', ''),
291
+ description,
292
+ model,
293
+ content,
294
+ path: filePath,
295
+ });
296
+ }
297
+ }
298
+ // Scan custom commands
299
+ if (existsSync(customDir)) {
300
+ const files = await readdir(customDir);
301
+ for (const file of files) {
302
+ if (!file.endsWith('.md'))
303
+ continue;
304
+ const filePath = path.join(customDir, file);
305
+ const fileStat = await stat(filePath);
306
+ if (!fileStat.isFile())
307
+ continue;
308
+ const content = await readFile(filePath, 'utf-8');
309
+ const { description, model } = parseCommandFrontmatter(content);
310
+ custom.push({
311
+ name: file.replace('.md', ''),
312
+ description,
313
+ model,
314
+ content,
315
+ path: filePath,
316
+ });
317
+ }
318
+ }
319
+ // Sort by name
320
+ builtin.sort((a, b) => a.name.localeCompare(b.name));
321
+ custom.sort((a, b) => a.name.localeCompare(b.name));
322
+ return { builtin, custom };
323
+ }
324
+ /**
325
+ * Check if planning hub commands exist
326
+ */
327
+ export async function hasCommands(projectPath) {
328
+ const commandsDir = path.join(projectPath, '.claude', 'commands');
329
+ if (!existsSync(commandsDir))
330
+ return false;
331
+ const { builtin } = await listCommands(projectPath);
332
+ return builtin.length > 0;
333
+ }
334
+ /**
335
+ * Get specific command content
336
+ */
337
+ export async function getCommand(projectPath, name) {
338
+ const { builtin, custom } = await listCommands(projectPath);
339
+ // Check builtin first
340
+ const builtinCmd = builtin.find((c) => c.name === name);
341
+ if (builtinCmd)
342
+ return builtinCmd;
343
+ // Check custom
344
+ const customCmd = custom.find((c) => c.name === name);
345
+ if (customCmd)
346
+ return customCmd;
347
+ return null;
348
+ }
349
+ /**
350
+ * Create custom command directory
351
+ */
352
+ export async function ensureCustomCommandsDir(projectPath) {
353
+ const customDir = path.join(projectPath, '.claude', 'commands', 'custom');
354
+ await mkdir(customDir, { recursive: true });
355
+ // Add .gitkeep if empty
356
+ const gitkeepPath = path.join(customDir, '.gitkeep');
357
+ if (!existsSync(gitkeepPath)) {
358
+ await writeFile(gitkeepPath, '', 'utf-8');
359
+ }
360
+ }
361
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/core/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { Config } from '../types/config.js';
2
+ /**
3
+ * Load configuration from project directory
4
+ */
5
+ export declare function loadConfig(projectPath: string): Promise<Config | null>;
6
+ /**
7
+ * Save configuration to project directory
8
+ */
9
+ export declare function saveConfig(projectPath: string, config: Config): Promise<void>;
10
+ /**
11
+ * Check if a directory is a vibe-fabric project
12
+ */
13
+ export declare function isVibeProject(dirPath: string): boolean;
14
+ /**
15
+ * Get the config file path for a project
16
+ */
17
+ export declare function getConfigPath(projectPath: string): string;
18
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAgB,MAAM,oBAAoB,CAAC;AAmB1D;;GAEG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsB5E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBnF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD"}
@@ -0,0 +1,78 @@
1
+ import { cosmiconfig } from 'cosmiconfig';
2
+ import { readFile, writeFile } from 'fs/promises';
3
+ import { existsSync } from 'fs';
4
+ import path from 'path';
5
+ import TOML from '@iarna/toml';
6
+ import { ConfigSchema } from '../types/config.js';
7
+ const CONFIG_FILE_NAME = 'vibe-fabric.toml';
8
+ /**
9
+ * Create a cosmiconfig explorer for vibe-fabric configuration
10
+ */
11
+ function createExplorer() {
12
+ return cosmiconfig('vibe-fabric', {
13
+ searchPlaces: [CONFIG_FILE_NAME, '.vibe-fabric.toml', 'vibe-fabric.config.js'],
14
+ loaders: {
15
+ '.toml': async (filepath) => {
16
+ const content = await readFile(filepath, 'utf-8');
17
+ return TOML.parse(content);
18
+ },
19
+ },
20
+ });
21
+ }
22
+ /**
23
+ * Load configuration from project directory
24
+ */
25
+ export async function loadConfig(projectPath) {
26
+ const explorer = createExplorer();
27
+ try {
28
+ const result = await explorer.search(projectPath);
29
+ if (!result || result.isEmpty) {
30
+ return null;
31
+ }
32
+ // Validate with Zod
33
+ const parsed = ConfigSchema.safeParse(result.config);
34
+ if (!parsed.success) {
35
+ throw new Error(`Invalid configuration: ${parsed.error.message}`);
36
+ }
37
+ return parsed.data;
38
+ }
39
+ catch (error) {
40
+ if (error instanceof Error) {
41
+ throw new Error(`Failed to load configuration: ${error.message}`);
42
+ }
43
+ throw error;
44
+ }
45
+ }
46
+ /**
47
+ * Save configuration to project directory
48
+ */
49
+ export async function saveConfig(projectPath, config) {
50
+ const configPath = path.join(projectPath, CONFIG_FILE_NAME);
51
+ // Validate before saving
52
+ const parsed = ConfigSchema.safeParse(config);
53
+ if (!parsed.success) {
54
+ throw new Error(`Invalid configuration: ${parsed.error.message}`);
55
+ }
56
+ // Convert to TOML
57
+ const tomlContent = TOML.stringify(config);
58
+ // Add header comment
59
+ const content = `# Vibe-Fabric Configuration
60
+ # Generated by vibe init
61
+ # Documentation: https://github.com/jneaimi/vibe-fabric/blob/main/docs/wiki/README.md
62
+
63
+ ${tomlContent}`;
64
+ await writeFile(configPath, content, 'utf-8');
65
+ }
66
+ /**
67
+ * Check if a directory is a vibe-fabric project
68
+ */
69
+ export function isVibeProject(dirPath) {
70
+ return existsSync(path.join(dirPath, CONFIG_FILE_NAME));
71
+ }
72
+ /**
73
+ * Get the config file path for a project
74
+ */
75
+ export function getConfigPath(projectPath) {
76
+ return path.join(projectPath, CONFIG_FILE_NAME);
77
+ }
78
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Core coverage module - extended coverage analysis
3
+ *
4
+ * Provides detailed PRD coverage analysis with per-requirement
5
+ * breakdowns, status grouping, and scope linkage.
6
+ */
7
+ import { RequirementStatus, ScopeRef, ExtendedCoverageData, CoverageJsonOutput } from '../types/coverage.js';
8
+ /**
9
+ * Parse scope files to get scope references
10
+ */
11
+ export declare function loadScopes(projectPath: string): Promise<ScopeRef[]>;
12
+ /**
13
+ * Determine requirement status based on linked scopes
14
+ */
15
+ export declare function getRequirementStatus(reqId: string, scopes: ScopeRef[]): {
16
+ status: RequirementStatus;
17
+ scopeIds: string[];
18
+ completedAt: string | null;
19
+ };
20
+ /**
21
+ * Calculate extended coverage data with full requirement details
22
+ */
23
+ export declare function calculateExtendedCoverage(projectPath: string): Promise<ExtendedCoverageData>;
24
+ /**
25
+ * Get list of available module names
26
+ */
27
+ export declare function getModuleNames(projectPath: string): Promise<string[]>;
28
+ /**
29
+ * Convert coverage data to JSON output format
30
+ */
31
+ export declare function toCoverageJsonOutput(data: ExtendedCoverageData): CoverageJsonOutput;
32
+ //# sourceMappingURL=coverage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../src/core/coverage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EACL,iBAAiB,EAGjB,QAAQ,EACR,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAkEzE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,QAAQ,EAAE,GACjB;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAuC/E;AA6CD;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,oBAAoB,CAAC,CAmH/B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAe3E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,oBAAoB,GAAG,kBAAkB,CA+BnF"}