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,39 @@
1
+ import { Command } from 'clipanion';
2
+ export declare class InitCommand extends Command {
3
+ static paths: string[][];
4
+ static usage: import("clipanion").Usage;
5
+ projectName: string | undefined;
6
+ existing: boolean;
7
+ new_: boolean;
8
+ projectPath: string | undefined;
9
+ execute(): Promise<number>;
10
+ /**
11
+ * Check prerequisites (Claude Code, UV)
12
+ */
13
+ private checkPrerequisites;
14
+ /**
15
+ * Get project name interactively or from argument
16
+ */
17
+ private getProjectName;
18
+ /**
19
+ * Get project type (existing or new)
20
+ */
21
+ private getProjectType;
22
+ /**
23
+ * Validate the project path
24
+ */
25
+ private validateProjectPath;
26
+ /**
27
+ * Setup GitHub authentication
28
+ */
29
+ private setupGitHubAuth;
30
+ /**
31
+ * Create the planning hub
32
+ */
33
+ private createHub;
34
+ /**
35
+ * Show success message with next steps
36
+ */
37
+ private showSuccess;
38
+ }
39
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAiB5C,qBAAa,WAAY,SAAQ,OAAO;IACtC,OAAgB,KAAK,aAAc;IAEnC,OAAgB,KAAK,4BAiBlB;IAGH,WAAW,qBAAsC;IAGjD,QAAQ,UAEL;IAEH,IAAI,UAED;IAEH,WAAW,qBAER;IAEG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IA6ChC;;OAEG;YACW,kBAAkB;IAmChC;;OAEG;YACW,cAAc;IAqB5B;;OAEG;YACW,cAAc;IAuB5B;;OAEG;YACW,mBAAmB;IAuBjC;;OAEG;YACW,eAAe;IAsD7B;;OAEG;YACW,SAAS;IAiBvB;;OAEG;IACH,OAAO,CAAC,WAAW;CAepB"}
@@ -0,0 +1,246 @@
1
+ import { Command, Option } from 'clipanion';
2
+ import { input, select, confirm, password } from '@inquirer/prompts';
3
+ import chalk from 'chalk';
4
+ import ora from 'ora';
5
+ import path from 'path';
6
+ import { existsSync } from 'fs';
7
+ import { isValidProjectName, getProjectNameError } from '../../types/config.js';
8
+ import { validateGitHubToken, discoverGitHubToken, isGhCliInstalled, isClaudeCodeInstalled, isUvInstalled, } from '../../core/github.js';
9
+ import { createPlanningHub, isInsideVibeProject } from '../../core/project.js';
10
+ import { isVibeProject } from '../../core/config.js';
11
+ export class InitCommand extends Command {
12
+ static paths = [['init']];
13
+ static usage = Command.Usage({
14
+ description: 'Initialize a new vibe-fabric planning hub',
15
+ details: `
16
+ Creates a new planning hub for coordinating development across repositories.
17
+
18
+ The planning hub contains:
19
+ - PRD documents (docs/prd/)
20
+ - Scope briefs (docs/scopes/)
21
+ - Synced repository data (docs/sync-cache/)
22
+ - Claude Code commands (.claude/)
23
+ `,
24
+ examples: [
25
+ ['Interactive mode', 'vibe init'],
26
+ ['With project name', 'vibe init my-project'],
27
+ ['Existing project', 'vibe init my-project --existing'],
28
+ ['Custom path', 'vibe init my-project --path ~/projects'],
29
+ ],
30
+ });
31
+ // Positional argument: project name
32
+ projectName = Option.String({ required: false });
33
+ // Options
34
+ existing = Option.Boolean('--existing,-e', false, {
35
+ description: 'Skip to existing project flow',
36
+ });
37
+ new_ = Option.Boolean('--new,-n', false, {
38
+ description: 'Skip to new project flow',
39
+ });
40
+ projectPath = Option.String('--path,-p', {
41
+ description: 'Create project at specified path',
42
+ });
43
+ async execute() {
44
+ this.context.stdout.write('\n');
45
+ this.context.stdout.write(chalk.bold.blue(' VIBE-FABRIC') + chalk.gray(' - AI-Collaborative Development\n'));
46
+ this.context.stdout.write(chalk.gray(' ─'.repeat(25)) + '\n\n');
47
+ try {
48
+ // Step 1: Check prerequisites
49
+ await this.checkPrerequisites();
50
+ // Step 2: Get project name
51
+ const name = await this.getProjectName();
52
+ // Step 3: Get project type
53
+ const projectType = await this.getProjectType();
54
+ // Step 4: Determine project path
55
+ const finalPath = this.projectPath
56
+ ? path.resolve(this.projectPath, name)
57
+ : path.resolve(process.cwd(), name);
58
+ // Step 5: Validate path
59
+ await this.validateProjectPath(finalPath);
60
+ // Step 6: GitHub authentication
61
+ const token = await this.setupGitHubAuth();
62
+ // Step 7: Create planning hub
63
+ await this.createHub(finalPath, name, projectType, token);
64
+ // Step 8: Show success message
65
+ this.showSuccess(finalPath, name);
66
+ return 0;
67
+ }
68
+ catch (error) {
69
+ if (error instanceof Error && error.message === 'USER_CANCELLED') {
70
+ this.context.stdout.write(chalk.yellow('\nSetup cancelled.\n'));
71
+ return 1;
72
+ }
73
+ this.context.stderr.write(chalk.red(`\nError: ${error instanceof Error ? error.message : 'Unknown error'}\n`));
74
+ return 1;
75
+ }
76
+ }
77
+ /**
78
+ * Check prerequisites (Claude Code, UV)
79
+ */
80
+ async checkPrerequisites() {
81
+ const spinner = ora('Checking prerequisites...').start();
82
+ const claudeInstalled = isClaudeCodeInstalled();
83
+ const uvInstalled = isUvInstalled();
84
+ const ghInstalled = isGhCliInstalled();
85
+ spinner.stop();
86
+ // Claude Code is required
87
+ if (!claudeInstalled) {
88
+ this.context.stdout.write(chalk.red(' ✗ Claude Code not found\n'));
89
+ this.context.stdout.write(chalk.gray(' Install: npm install -g @anthropic-ai/claude-code\n'));
90
+ this.context.stdout.write(chalk.gray(' Required for AI-powered commands.\n\n'));
91
+ throw new Error('Claude Code is required. Please install it first.');
92
+ }
93
+ this.context.stdout.write(chalk.green(' ✓ Claude Code installed\n'));
94
+ // UV is recommended
95
+ if (!uvInstalled) {
96
+ this.context.stdout.write(chalk.yellow(' ⚠ UV not found (recommended)\n'));
97
+ this.context.stdout.write(chalk.gray(' Install: curl -LsSf https://astral.sh/uv/install.sh | sh\n'));
98
+ }
99
+ else {
100
+ this.context.stdout.write(chalk.green(' ✓ UV installed\n'));
101
+ }
102
+ // gh CLI is optional but helpful
103
+ if (ghInstalled) {
104
+ this.context.stdout.write(chalk.green(' ✓ GitHub CLI installed\n'));
105
+ }
106
+ this.context.stdout.write('\n');
107
+ }
108
+ /**
109
+ * Get project name interactively or from argument
110
+ */
111
+ async getProjectName() {
112
+ if (this.projectName && isValidProjectName(this.projectName)) {
113
+ return this.projectName;
114
+ }
115
+ if (this.projectName) {
116
+ const error = getProjectNameError(this.projectName);
117
+ this.context.stdout.write(chalk.yellow(` ⚠ ${error}\n\n`));
118
+ }
119
+ const name = await input({
120
+ message: 'Project name:',
121
+ validate: (value) => {
122
+ const error = getProjectNameError(value);
123
+ return error || true;
124
+ },
125
+ });
126
+ return name;
127
+ }
128
+ /**
129
+ * Get project type (existing or new)
130
+ */
131
+ async getProjectType() {
132
+ if (this.existing)
133
+ return 'existing';
134
+ if (this.new_)
135
+ return 'new';
136
+ const choice = await select({
137
+ message: 'What are you working with?',
138
+ choices: [
139
+ {
140
+ value: 'existing',
141
+ name: 'Existing project - I have repositories with code',
142
+ description: 'Analyze existing code and generate maps',
143
+ },
144
+ {
145
+ value: 'new',
146
+ name: 'New project - Starting from an idea',
147
+ description: 'Plan repos and capture requirements',
148
+ },
149
+ ],
150
+ });
151
+ return choice;
152
+ }
153
+ /**
154
+ * Validate the project path
155
+ */
156
+ async validateProjectPath(projectPath) {
157
+ // Check if path exists
158
+ if (existsSync(projectPath)) {
159
+ if (isVibeProject(projectPath)) {
160
+ throw new Error(`Directory "${projectPath}" is already a vibe-fabric project.`);
161
+ }
162
+ const overwrite = await confirm({
163
+ message: `Directory "${path.basename(projectPath)}" already exists. Use it anyway?`,
164
+ default: false,
165
+ });
166
+ if (!overwrite) {
167
+ throw new Error('USER_CANCELLED');
168
+ }
169
+ }
170
+ // Check if inside existing vibe project
171
+ if (isInsideVibeProject(projectPath)) {
172
+ throw new Error('Cannot create a planning hub inside another vibe-fabric project.');
173
+ }
174
+ }
175
+ /**
176
+ * Setup GitHub authentication
177
+ */
178
+ async setupGitHubAuth() {
179
+ this.context.stdout.write(chalk.bold('\n GitHub Authentication\n'));
180
+ this.context.stdout.write(chalk.gray(' ─'.repeat(25)) + '\n\n');
181
+ const spinner = ora('Checking for GitHub token...').start();
182
+ // Try to discover token automatically
183
+ const discovered = await discoverGitHubToken();
184
+ if (discovered) {
185
+ spinner.succeed(`Found token from ${discovered.source === 'env' ? 'environment variable' : 'GitHub CLI'}`);
186
+ return discovered.token;
187
+ }
188
+ spinner.info('No token found automatically');
189
+ // Prompt for token
190
+ this.context.stdout.write(chalk.gray('\n Create a token at: https://github.com/settings/tokens\n'));
191
+ this.context.stdout.write(chalk.gray(' Required scopes: repo, read:org\n\n'));
192
+ let attempts = 0;
193
+ const maxAttempts = 3;
194
+ while (attempts < maxAttempts) {
195
+ const token = await password({
196
+ message: 'Enter your GitHub Personal Access Token:',
197
+ mask: '*',
198
+ });
199
+ if (!token) {
200
+ throw new Error('USER_CANCELLED');
201
+ }
202
+ const validateSpinner = ora('Validating token...').start();
203
+ const result = await validateGitHubToken(token);
204
+ if (result.valid) {
205
+ validateSpinner.succeed(`Authenticated as ${chalk.green(result.username)}`);
206
+ return token;
207
+ }
208
+ validateSpinner.fail(`Invalid token: ${result.error}`);
209
+ attempts++;
210
+ if (attempts < maxAttempts) {
211
+ this.context.stdout.write(chalk.yellow(` ${maxAttempts - attempts} attempts remaining\n\n`));
212
+ }
213
+ }
214
+ throw new Error('Failed to authenticate with GitHub after multiple attempts.');
215
+ }
216
+ /**
217
+ * Create the planning hub
218
+ */
219
+ async createHub(projectPath, name, projectType, _token) {
220
+ const spinner = ora('Creating planning hub...').start();
221
+ try {
222
+ await createPlanningHub(projectPath, name, projectType);
223
+ spinner.succeed('Planning hub created');
224
+ }
225
+ catch (error) {
226
+ spinner.fail('Failed to create planning hub');
227
+ throw error;
228
+ }
229
+ }
230
+ /**
231
+ * Show success message with next steps
232
+ */
233
+ showSuccess(projectPath, name) {
234
+ this.context.stdout.write('\n');
235
+ this.context.stdout.write(chalk.green.bold(' ✓ Success!\n\n'));
236
+ this.context.stdout.write(chalk.bold(' Planning hub created at:\n'));
237
+ this.context.stdout.write(` ${chalk.cyan(projectPath)}\n\n`);
238
+ this.context.stdout.write(chalk.bold(' Next steps:\n'));
239
+ this.context.stdout.write(chalk.gray(` 1. cd ${name}\n`));
240
+ this.context.stdout.write(chalk.gray(' 2. vibe repo add # Add your repositories\n'));
241
+ this.context.stdout.write(chalk.gray(' 3. vibe prd # Create requirements\n'));
242
+ this.context.stdout.write(chalk.gray(' 4. vibe scope # Create work scopes\n\n'));
243
+ this.context.stdout.write(chalk.gray(' Run ') + chalk.cyan('vibe --help') + chalk.gray(' for all commands.\n\n'));
244
+ }
245
+ }
246
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * vibe prd - PRD Management Command
3
+ *
4
+ * AI-powered single entry point for all PRD operations.
5
+ * Uses the three-phase pattern: Discovery → Execute → Approve
6
+ */
7
+ import { Command } from 'clipanion';
8
+ export declare class PrdCommand extends Command {
9
+ static paths: string[][];
10
+ static usage: import("clipanion").Usage;
11
+ check: boolean;
12
+ resume: boolean;
13
+ verbose: boolean;
14
+ json: boolean;
15
+ cancel: boolean;
16
+ execute(): Promise<number>;
17
+ /**
18
+ * Handle --cancel flag
19
+ */
20
+ private handleCancel;
21
+ /**
22
+ * Run interactive PRD management
23
+ */
24
+ private runInteractive;
25
+ /**
26
+ * Start the Python runner
27
+ */
28
+ private startRunner;
29
+ }
30
+ //# sourceMappingURL=prd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/prd.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAW5C,qBAAa,UAAW,SAAQ,OAAO;IACrC,OAAgB,KAAK,aAAa;IAElC,OAAgB,KAAK,4BAmBlB;IAEH,KAAK,UAEF;IAEH,MAAM,UAEH;IAEH,OAAO,UAEJ;IAEH,IAAI,UAED;IAEH,MAAM,UAEH;IAEG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAehC;;OAEG;YACW,YAAY;IA8B1B;;OAEG;YACW,cAAc;IA8C5B;;OAEG;YACW,WAAW;CAwE1B"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * vibe prd - PRD Management Command
3
+ *
4
+ * AI-powered single entry point for all PRD operations.
5
+ * Uses the three-phase pattern: Discovery → Execute → Approve
6
+ */
7
+ import { Command, Option } from 'clipanion';
8
+ import chalk from 'chalk';
9
+ import { confirm, select } from '@inquirer/prompts';
10
+ import { runPrdCheck } from '../../core/prd/check.js';
11
+ import { runVibeRunner, checkOperationInProgress, cancelOperation, RunnerError, } from '../../core/runner.js';
12
+ export class PrdCommand extends Command {
13
+ static paths = [['prd']];
14
+ static usage = Command.Usage({
15
+ description: 'Manage PRD - create, capture, maintain, update',
16
+ details: `
17
+ AI-powered PRD management using Claude.
18
+
19
+ The command follows a three-phase pattern:
20
+ 1. Discovery - Analyze PRD state and determine tasks
21
+ 2. Execute - Run tasks (some interactive, some automatic)
22
+ 3. Approve - Review and apply changes
23
+
24
+ Use --check for a quick health report without making changes.
25
+ `,
26
+ examples: [
27
+ ['Interactive PRD management', 'vibe prd'],
28
+ ['Report-only mode (no changes)', 'vibe prd --check'],
29
+ ['Resume interrupted operation', 'vibe prd --resume'],
30
+ ['Verbose check output', 'vibe prd --check --verbose'],
31
+ ['JSON output for CI', 'vibe prd --check --json'],
32
+ ],
33
+ });
34
+ check = Option.Boolean('--check,-c', false, {
35
+ description: 'Report-only mode (no changes)',
36
+ });
37
+ resume = Option.Boolean('--resume,-r', false, {
38
+ description: 'Resume interrupted operation',
39
+ });
40
+ verbose = Option.Boolean('--verbose,-v', false, {
41
+ description: 'Show detailed output',
42
+ });
43
+ json = Option.Boolean('--json', false, {
44
+ description: 'Output as JSON (only with --check)',
45
+ });
46
+ cancel = Option.Boolean('--cancel', false, {
47
+ description: 'Cancel current operation',
48
+ });
49
+ async execute() {
50
+ // Handle cancel flag
51
+ if (this.cancel) {
52
+ return this.handleCancel();
53
+ }
54
+ // Handle check mode (report-only)
55
+ if (this.check) {
56
+ return runPrdCheck({ verbose: this.verbose, json: this.json });
57
+ }
58
+ // Interactive mode
59
+ return this.runInteractive();
60
+ }
61
+ /**
62
+ * Handle --cancel flag
63
+ */
64
+ async handleCancel() {
65
+ const existing = await checkOperationInProgress();
66
+ if (!existing) {
67
+ this.context.stdout.write(chalk.yellow('No operation in progress.\n'));
68
+ return 0;
69
+ }
70
+ const confirmed = await confirm({
71
+ message: `Cancel ${existing.operation} operation?`,
72
+ default: false,
73
+ });
74
+ if (!confirmed) {
75
+ this.context.stdout.write(chalk.gray('Cancelled.\n'));
76
+ return 0;
77
+ }
78
+ try {
79
+ await cancelOperation();
80
+ this.context.stdout.write(chalk.green('Operation cancelled.\n'));
81
+ return 0;
82
+ }
83
+ catch (error) {
84
+ this.context.stderr.write(chalk.red(`Failed to cancel: ${error instanceof Error ? error.message : error}\n`));
85
+ return 1;
86
+ }
87
+ }
88
+ /**
89
+ * Run interactive PRD management
90
+ */
91
+ async runInteractive() {
92
+ // Check for existing operation
93
+ const existing = await checkOperationInProgress();
94
+ if (existing && !this.resume) {
95
+ this.context.stdout.write('\n');
96
+ this.context.stdout.write(chalk.yellow(`An operation is already in progress: ${existing.operation}\n`));
97
+ this.context.stdout.write(chalk.gray(`Phase: ${existing.phase}, Task: ${existing.current_task}/${existing.total_tasks}\n`));
98
+ this.context.stdout.write('\n');
99
+ const action = await select({
100
+ message: 'What would you like to do?',
101
+ choices: [
102
+ { name: 'Resume the existing operation', value: 'resume' },
103
+ { name: 'Cancel and start fresh', value: 'cancel' },
104
+ { name: 'Exit', value: 'exit' },
105
+ ],
106
+ });
107
+ if (action === 'exit') {
108
+ return 0;
109
+ }
110
+ if (action === 'cancel') {
111
+ await cancelOperation();
112
+ this.context.stdout.write(chalk.green('Previous operation cancelled.\n\n'));
113
+ }
114
+ if (action === 'resume') {
115
+ return this.startRunner(true);
116
+ }
117
+ }
118
+ if (this.resume && !existing) {
119
+ this.context.stderr.write(chalk.red('No operation to resume.\n'));
120
+ this.context.stderr.write(chalk.gray('Start a new operation with: vibe prd\n'));
121
+ return 1;
122
+ }
123
+ return this.startRunner(this.resume);
124
+ }
125
+ /**
126
+ * Start the Python runner
127
+ */
128
+ async startRunner(resume) {
129
+ this.context.stdout.write('\n');
130
+ this.context.stdout.write(chalk.bold.blue(' VIBE PRD') + '\n');
131
+ this.context.stdout.write(chalk.gray(' ─'.repeat(25)) + '\n\n');
132
+ if (!resume) {
133
+ this.context.stdout.write(chalk.gray(' Starting PRD management with Claude...\n\n'));
134
+ }
135
+ else {
136
+ this.context.stdout.write(chalk.gray(' Resuming PRD operation...\n\n'));
137
+ }
138
+ try {
139
+ await runVibeRunner('prd', process.cwd(), {
140
+ resume,
141
+ loop: true,
142
+ });
143
+ return 0;
144
+ }
145
+ catch (error) {
146
+ if (error instanceof RunnerError) {
147
+ this.context.stderr.write('\n');
148
+ switch (error.code) {
149
+ case 'UV_NOT_INSTALLED':
150
+ this.context.stderr.write(chalk.red('UV is not installed.\n\n'));
151
+ this.context.stderr.write('Install UV with:\n');
152
+ this.context.stderr.write(chalk.cyan(' curl -LsSf https://astral.sh/uv/install.sh | sh\n\n'));
153
+ this.context.stderr.write(chalk.gray('UV is required to run Python scripts for AI operations.\n'));
154
+ break;
155
+ case 'RUNNER_NOT_FOUND':
156
+ this.context.stderr.write(chalk.red('Runner script not found.\n\n'));
157
+ this.context.stderr.write('The runner script should be at:\n' +
158
+ chalk.cyan(' .claude/scripts/vibe-runner.py\n\n'));
159
+ this.context.stderr.write(chalk.gray('Run ') + chalk.cyan('vibe doctor') + chalk.gray(' to diagnose.\n'));
160
+ break;
161
+ case 'RUNNER_FAILED':
162
+ this.context.stderr.write(chalk.red('Runner failed.\n\n'));
163
+ this.context.stderr.write(chalk.gray(`${error.message}\n\n`));
164
+ this.context.stderr.write('Your progress has been saved. Run ' +
165
+ chalk.cyan('vibe prd --resume') +
166
+ ' to continue.\n');
167
+ break;
168
+ default:
169
+ this.context.stderr.write(chalk.red(`Error: ${error.message}\n`));
170
+ }
171
+ return 1;
172
+ }
173
+ // Unexpected error
174
+ this.context.stderr.write(chalk.red(`Unexpected error: ${error instanceof Error ? error.message : error}\n`));
175
+ return 1;
176
+ }
177
+ }
178
+ }
179
+ //# sourceMappingURL=prd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prd.js","sourceRoot":"","sources":["../../../src/cli/commands/prd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { Command } from 'clipanion';
2
+ export declare class RepoAddCommand extends Command {
3
+ static paths: string[][];
4
+ static usage: import("clipanion").Usage;
5
+ url: string | undefined;
6
+ alias: string | undefined;
7
+ branch: string | undefined;
8
+ skipInject: boolean;
9
+ execute(): Promise<number>;
10
+ /**
11
+ * Get GitHub token from environment or prompt
12
+ */
13
+ private getGitHubToken;
14
+ /**
15
+ * Get repository URL from argument or prompt
16
+ */
17
+ private getRepoUrl;
18
+ /**
19
+ * Validate repository access
20
+ */
21
+ private validateAccess;
22
+ /**
23
+ * Get or generate alias
24
+ */
25
+ private getAlias;
26
+ /**
27
+ * Handle framework detection and injection
28
+ * Returns: true if injected, false if skipped, null if failed
29
+ */
30
+ private handleFrameworkInjection;
31
+ /**
32
+ * Show success message
33
+ */
34
+ private showSuccess;
35
+ }
36
+ //# sourceMappingURL=add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/repo/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAoB5C,qBAAa,cAAe,SAAQ,OAAO;IACzC,OAAgB,KAAK,aAAqB;IAE1C,OAAgB,KAAK,4BAgBlB;IAGH,GAAG,qBAAsC;IAGzC,KAAK,qBAEF;IAEH,MAAM,qBAEH;IAEH,UAAU,UAEP;IAEG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IA+IhC;;OAEG;YACW,cAAc;IAyB5B;;OAEG;YACW,UAAU;IAqBxB;;OAEG;YACW,cAAc;IAgC5B;;OAEG;YACW,QAAQ;IAkDtB;;;OAGG;YACW,wBAAwB;IAiEtC;;OAEG;IACH,OAAO,CAAC,WAAW;CAsBpB"}