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,145 @@
1
+ /**
2
+ * Environment health checks
3
+ * Checks Node.js version, UV, and Claude Code installation
4
+ */
5
+ import { execSync } from 'child_process';
6
+ /**
7
+ * Get the current Node.js version
8
+ */
9
+ function getNodeVersion() {
10
+ const full = process.version;
11
+ const major = parseInt(full.slice(1).split('.')[0] ?? '0', 10);
12
+ return { major, full };
13
+ }
14
+ /**
15
+ * Check if a command exists and optionally get its version
16
+ */
17
+ function checkCommand(cmd) {
18
+ try {
19
+ const output = execSync(`${cmd} --version`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
20
+ // Extract version number from output (usually first line, may include 'v' prefix)
21
+ const versionMatch = output.match(/\d+\.\d+(\.\d+)?/);
22
+ return {
23
+ installed: true,
24
+ version: versionMatch ? versionMatch[0] : output.split('\n')[0],
25
+ };
26
+ }
27
+ catch {
28
+ return { installed: false };
29
+ }
30
+ }
31
+ /**
32
+ * Node.js version check
33
+ */
34
+ export const nodeVersionCheck = {
35
+ name: 'Node.js version',
36
+ category: 'environment',
37
+ critical: false,
38
+ run: async () => {
39
+ const { major, full } = getNodeVersion();
40
+ const minVersion = 18;
41
+ if (major >= minVersion) {
42
+ return {
43
+ name: 'Node.js version',
44
+ category: 'environment',
45
+ status: 'passed',
46
+ details: full,
47
+ };
48
+ }
49
+ return {
50
+ name: 'Node.js version',
51
+ category: 'environment',
52
+ status: 'failed',
53
+ details: `${full} (requires >= ${minVersion})`,
54
+ fix: `Install Node.js ${minVersion} or later: https://nodejs.org`,
55
+ };
56
+ },
57
+ };
58
+ /**
59
+ * UV installation check
60
+ */
61
+ export const uvInstalledCheck = {
62
+ name: 'UV installed',
63
+ category: 'environment',
64
+ critical: false,
65
+ run: async () => {
66
+ const result = checkCommand('uv');
67
+ if (result.installed) {
68
+ return {
69
+ name: 'UV installed',
70
+ category: 'environment',
71
+ status: 'passed',
72
+ details: result.version,
73
+ };
74
+ }
75
+ return {
76
+ name: 'UV installed',
77
+ category: 'environment',
78
+ status: 'warning',
79
+ details: 'Not found (recommended for AI scripts)',
80
+ fix: 'Install UV: curl -LsSf https://astral.sh/uv/install.sh | sh',
81
+ };
82
+ },
83
+ };
84
+ /**
85
+ * Claude Code installation check (critical)
86
+ */
87
+ export const claudeCodeCheck = {
88
+ name: 'Claude Code installed',
89
+ category: 'environment',
90
+ critical: true,
91
+ run: async () => {
92
+ const result = checkCommand('claude');
93
+ if (result.installed) {
94
+ return {
95
+ name: 'Claude Code installed',
96
+ category: 'environment',
97
+ status: 'passed',
98
+ details: result.version,
99
+ };
100
+ }
101
+ return {
102
+ name: 'Claude Code installed',
103
+ category: 'environment',
104
+ status: 'failed',
105
+ details: 'Not found (required)',
106
+ fix: 'Install Claude Code: npm install -g @anthropic-ai/claude-code',
107
+ };
108
+ },
109
+ };
110
+ /**
111
+ * GitHub CLI check (optional, helpful for auth)
112
+ */
113
+ export const ghCliCheck = {
114
+ name: 'GitHub CLI installed',
115
+ category: 'environment',
116
+ critical: false,
117
+ run: async () => {
118
+ const result = checkCommand('gh');
119
+ if (result.installed) {
120
+ return {
121
+ name: 'GitHub CLI installed',
122
+ category: 'environment',
123
+ status: 'passed',
124
+ details: result.version,
125
+ };
126
+ }
127
+ return {
128
+ name: 'GitHub CLI installed',
129
+ category: 'environment',
130
+ status: 'warning',
131
+ details: 'Not found (optional, helps with GitHub auth)',
132
+ fix: 'Install GitHub CLI: https://cli.github.com',
133
+ };
134
+ },
135
+ };
136
+ /**
137
+ * All environment checks
138
+ */
139
+ export const environmentChecks = [
140
+ nodeVersionCheck,
141
+ uvInstalledCheck,
142
+ claudeCodeCheck,
143
+ ghCliCheck,
144
+ ];
145
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/core/doctor/environment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Doctor - Health check orchestrator
3
+ * Runs all health checks and aggregates results
4
+ */
5
+ import type { CheckResult, DoctorSummary, HealthCheck, DoctorJsonOutput, CheckCategory } from '../../types/doctor.js';
6
+ /**
7
+ * All health checks grouped by category
8
+ */
9
+ export declare const allChecks: Map<CheckCategory, HealthCheck[]>;
10
+ /**
11
+ * Get category display name
12
+ */
13
+ export declare function getCategoryDisplayName(category: CheckCategory): string;
14
+ /**
15
+ * Run all checks in a category
16
+ */
17
+ export declare function runCategoryChecks(category: CheckCategory): Promise<CheckResult[]>;
18
+ /**
19
+ * Run all health checks
20
+ */
21
+ export declare function runAllChecks(): Promise<DoctorSummary>;
22
+ /**
23
+ * Run checks with callbacks for progress reporting
24
+ */
25
+ export declare function runChecksWithProgress(onCategoryStart: (category: CheckCategory, name: string) => void, onCheckComplete: (result: CheckResult) => void, onCategoryComplete: (category: CheckCategory, results: CheckResult[]) => void): Promise<DoctorSummary>;
26
+ /**
27
+ * Summarize check results
28
+ */
29
+ export declare function summarizeResults(checks: CheckResult[]): DoctorSummary;
30
+ /**
31
+ * Get fixable checks from results
32
+ */
33
+ export declare function getFixableChecks(checks: CheckResult[]): CheckResult[];
34
+ /**
35
+ * Convert summary to JSON output format
36
+ */
37
+ export declare function toJsonOutput(summary: DoctorSummary): DoctorJsonOutput;
38
+ export type { CheckResult, DoctorSummary, HealthCheck, DoctorJsonOutput, CheckCategory } from '../../types/doctor.js';
39
+ export * from './environment.js';
40
+ export * from './config.js';
41
+ export * from './auth.js';
42
+ export * from './repos.js';
43
+ export * from './sync.js';
44
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/doctor/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAOtH;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,CAMtD,CAAC;AAEH;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAStE;AAmBD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAUvF;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC,CAS3D;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,eAAe,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,EAChE,eAAe,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,EAC9C,kBAAkB,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,IAAI,GAC5E,OAAO,CAAC,aAAa,CAAC,CAmBxB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,aAAa,CAOrE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAErE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,gBAAgB,CAgBrE;AAGD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtH,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Doctor - Health check orchestrator
3
+ * Runs all health checks and aggregates results
4
+ */
5
+ import { environmentChecks } from './environment.js';
6
+ import { configChecks } from './config.js';
7
+ import { authChecks } from './auth.js';
8
+ import { repoChecks } from './repos.js';
9
+ import { syncChecks } from './sync.js';
10
+ /**
11
+ * All health checks grouped by category
12
+ */
13
+ export const allChecks = new Map([
14
+ ['environment', environmentChecks],
15
+ ['config', configChecks],
16
+ ['auth', authChecks],
17
+ ['repos', repoChecks],
18
+ ['sync', syncChecks],
19
+ ]);
20
+ /**
21
+ * Get category display name
22
+ */
23
+ export function getCategoryDisplayName(category) {
24
+ const names = {
25
+ environment: 'Environment',
26
+ config: 'Configuration',
27
+ auth: 'Authentication',
28
+ repos: 'Repositories',
29
+ sync: 'Sync Status',
30
+ };
31
+ return names[category];
32
+ }
33
+ /**
34
+ * Run a single check and handle errors
35
+ */
36
+ async function runCheck(check) {
37
+ try {
38
+ return await check.run();
39
+ }
40
+ catch (error) {
41
+ const message = error instanceof Error ? error.message : 'Unknown error';
42
+ return {
43
+ name: check.name,
44
+ category: check.category,
45
+ status: 'failed',
46
+ details: `Error running check: ${message}`,
47
+ };
48
+ }
49
+ }
50
+ /**
51
+ * Run all checks in a category
52
+ */
53
+ export async function runCategoryChecks(category) {
54
+ const checks = allChecks.get(category) ?? [];
55
+ const results = [];
56
+ for (const check of checks) {
57
+ const result = await runCheck(check);
58
+ results.push(result);
59
+ }
60
+ return results;
61
+ }
62
+ /**
63
+ * Run all health checks
64
+ */
65
+ export async function runAllChecks() {
66
+ const results = [];
67
+ for (const [category] of allChecks) {
68
+ const categoryResults = await runCategoryChecks(category);
69
+ results.push(...categoryResults);
70
+ }
71
+ return summarizeResults(results);
72
+ }
73
+ /**
74
+ * Run checks with callbacks for progress reporting
75
+ */
76
+ export async function runChecksWithProgress(onCategoryStart, onCheckComplete, onCategoryComplete) {
77
+ const allResults = [];
78
+ for (const [category, checks] of allChecks) {
79
+ onCategoryStart(category, getCategoryDisplayName(category));
80
+ const categoryResults = [];
81
+ for (const check of checks) {
82
+ const result = await runCheck(check);
83
+ categoryResults.push(result);
84
+ onCheckComplete(result);
85
+ }
86
+ onCategoryComplete(category, categoryResults);
87
+ allResults.push(...categoryResults);
88
+ }
89
+ return summarizeResults(allResults);
90
+ }
91
+ /**
92
+ * Summarize check results
93
+ */
94
+ export function summarizeResults(checks) {
95
+ return {
96
+ passed: checks.filter((c) => c.status === 'passed').length,
97
+ failed: checks.filter((c) => c.status === 'failed').length,
98
+ warnings: checks.filter((c) => c.status === 'warning').length,
99
+ checks,
100
+ };
101
+ }
102
+ /**
103
+ * Get fixable checks from results
104
+ */
105
+ export function getFixableChecks(checks) {
106
+ return checks.filter((c) => c.status !== 'passed' && c.fixable);
107
+ }
108
+ /**
109
+ * Convert summary to JSON output format
110
+ */
111
+ export function toJsonOutput(summary) {
112
+ return {
113
+ timestamp: new Date().toISOString(),
114
+ summary: {
115
+ passed: summary.passed,
116
+ failed: summary.failed,
117
+ warnings: summary.warnings,
118
+ },
119
+ checks: summary.checks.map((check) => ({
120
+ category: check.category,
121
+ name: check.name,
122
+ status: check.status,
123
+ details: check.details,
124
+ fix: check.fix,
125
+ })),
126
+ };
127
+ }
128
+ // Re-export individual check modules
129
+ export * from './environment.js';
130
+ export * from './config.js';
131
+ export * from './auth.js';
132
+ export * from './repos.js';
133
+ export * from './sync.js';
134
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/doctor/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Repository health checks
3
+ * Validates repository accessibility and vibe/ structure
4
+ */
5
+ import type { HealthCheck } from '../../types/doctor.js';
6
+ /**
7
+ * Repositories configured check
8
+ */
9
+ export declare const reposConfiguredCheck: HealthCheck;
10
+ /**
11
+ * All repositories accessible check
12
+ */
13
+ export declare const reposAccessibleCheck: HealthCheck;
14
+ /**
15
+ * All repositories have vibe/ structure check
16
+ */
17
+ export declare const reposHaveVibeStructureCheck: HealthCheck;
18
+ /**
19
+ * All repo checks
20
+ */
21
+ export declare const repoChecks: HealthCheck[];
22
+ //# sourceMappingURL=repos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repos.d.ts","sourceRoot":"","sources":["../../../src/core/doctor/repos.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,uBAAuB,CAAC;AA+BtE;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,WA2DlC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAuFlC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,EAAE,WAqFzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,WAAW,EAInC,CAAC"}
@@ -0,0 +1,262 @@
1
+ /**
2
+ * Repository health checks
3
+ * Validates repository accessibility and vibe/ structure
4
+ */
5
+ import { Octokit } from 'octokit';
6
+ import { loadConfig } from '../config.js';
7
+ import { findProjectRoot } from '../project.js';
8
+ import { getTokenFromEnv, getTokenFromGhCli } from '../github.js';
9
+ /**
10
+ * Get GitHub token from any available source
11
+ */
12
+ function getGitHubToken() {
13
+ return getTokenFromEnv() || getTokenFromGhCli();
14
+ }
15
+ /**
16
+ * Parse GitHub URL to get owner and repo name
17
+ */
18
+ function parseGitHubUrl(url) {
19
+ const patterns = [
20
+ /github\.com[/:]([^/]+)\/([^/.]+)/,
21
+ /^([^/]+)\/([^/]+)$/,
22
+ ];
23
+ for (const pattern of patterns) {
24
+ const match = url.match(pattern);
25
+ if (match?.[1] && match[2]) {
26
+ return { owner: match[1], repo: match[2].replace(/\.git$/, '') };
27
+ }
28
+ }
29
+ return null;
30
+ }
31
+ /**
32
+ * Repositories configured check
33
+ */
34
+ export const reposConfiguredCheck = {
35
+ name: 'Repositories configured',
36
+ category: 'repos',
37
+ critical: false,
38
+ run: async () => {
39
+ const cwd = process.cwd();
40
+ const projectRoot = findProjectRoot(cwd);
41
+ if (!projectRoot) {
42
+ return {
43
+ name: 'Repositories configured',
44
+ category: 'repos',
45
+ status: 'warning',
46
+ details: 'No project found',
47
+ fix: 'Run `vibe init` to create a new project',
48
+ };
49
+ }
50
+ try {
51
+ const config = await loadConfig(projectRoot);
52
+ if (!config) {
53
+ return {
54
+ name: 'Repositories configured',
55
+ category: 'repos',
56
+ status: 'warning',
57
+ details: 'Could not load config',
58
+ fix: 'Check vibe-fabric.toml for errors',
59
+ };
60
+ }
61
+ const repoCount = config.repos.length;
62
+ if (repoCount === 0) {
63
+ return {
64
+ name: 'Repositories configured',
65
+ category: 'repos',
66
+ status: 'warning',
67
+ details: 'No repositories configured',
68
+ fix: 'Run `vibe repo add` to add repositories',
69
+ };
70
+ }
71
+ return {
72
+ name: 'Repositories configured',
73
+ category: 'repos',
74
+ status: 'passed',
75
+ details: `${repoCount} ${repoCount === 1 ? 'repository' : 'repositories'} configured`,
76
+ };
77
+ }
78
+ catch (error) {
79
+ const message = error instanceof Error ? error.message : 'Unknown error';
80
+ return {
81
+ name: 'Repositories configured',
82
+ category: 'repos',
83
+ status: 'failed',
84
+ details: message,
85
+ };
86
+ }
87
+ },
88
+ };
89
+ /**
90
+ * All repositories accessible check
91
+ */
92
+ export const reposAccessibleCheck = {
93
+ name: 'All repos accessible',
94
+ category: 'repos',
95
+ critical: false,
96
+ run: async () => {
97
+ const token = getGitHubToken();
98
+ if (!token) {
99
+ return {
100
+ name: 'All repos accessible',
101
+ category: 'repos',
102
+ status: 'warning',
103
+ details: 'No token available to check repos',
104
+ fix: 'Set GITHUB_TOKEN environment variable',
105
+ };
106
+ }
107
+ const cwd = process.cwd();
108
+ const projectRoot = findProjectRoot(cwd);
109
+ if (!projectRoot) {
110
+ return {
111
+ name: 'All repos accessible',
112
+ category: 'repos',
113
+ status: 'warning',
114
+ details: 'No project found',
115
+ };
116
+ }
117
+ try {
118
+ const config = await loadConfig(projectRoot);
119
+ if (!config || config.repos.length === 0) {
120
+ return {
121
+ name: 'All repos accessible',
122
+ category: 'repos',
123
+ status: 'passed',
124
+ details: 'No repositories to check',
125
+ };
126
+ }
127
+ const octokit = new Octokit({ auth: token });
128
+ const inaccessible = [];
129
+ for (const repo of config.repos) {
130
+ const parsed = parseGitHubUrl(repo.url);
131
+ if (!parsed) {
132
+ inaccessible.push(`${repo.alias} (invalid URL)`);
133
+ continue;
134
+ }
135
+ try {
136
+ await octokit.rest.repos.get({
137
+ owner: parsed.owner,
138
+ repo: parsed.repo,
139
+ });
140
+ }
141
+ catch {
142
+ inaccessible.push(repo.alias);
143
+ }
144
+ }
145
+ if (inaccessible.length === 0) {
146
+ return {
147
+ name: 'All repos accessible',
148
+ category: 'repos',
149
+ status: 'passed',
150
+ details: `${config.repos.length} ${config.repos.length === 1 ? 'repo' : 'repos'} accessible`,
151
+ };
152
+ }
153
+ return {
154
+ name: 'All repos accessible',
155
+ category: 'repos',
156
+ status: 'failed',
157
+ details: `Cannot access: ${inaccessible.join(', ')}`,
158
+ fix: 'Check repository URLs and token permissions',
159
+ };
160
+ }
161
+ catch (error) {
162
+ const message = error instanceof Error ? error.message : 'Unknown error';
163
+ return {
164
+ name: 'All repos accessible',
165
+ category: 'repos',
166
+ status: 'failed',
167
+ details: message,
168
+ };
169
+ }
170
+ },
171
+ };
172
+ /**
173
+ * All repositories have vibe/ structure check
174
+ */
175
+ export const reposHaveVibeStructureCheck = {
176
+ name: 'All repos have vibe/ structure',
177
+ category: 'repos',
178
+ critical: false,
179
+ run: async () => {
180
+ const token = getGitHubToken();
181
+ if (!token) {
182
+ return {
183
+ name: 'All repos have vibe/ structure',
184
+ category: 'repos',
185
+ status: 'warning',
186
+ details: 'No token available to check repos',
187
+ };
188
+ }
189
+ const cwd = process.cwd();
190
+ const projectRoot = findProjectRoot(cwd);
191
+ if (!projectRoot) {
192
+ return {
193
+ name: 'All repos have vibe/ structure',
194
+ category: 'repos',
195
+ status: 'warning',
196
+ details: 'No project found',
197
+ };
198
+ }
199
+ try {
200
+ const config = await loadConfig(projectRoot);
201
+ if (!config || config.repos.length === 0) {
202
+ return {
203
+ name: 'All repos have vibe/ structure',
204
+ category: 'repos',
205
+ status: 'passed',
206
+ details: 'No repositories to check',
207
+ };
208
+ }
209
+ const octokit = new Octokit({ auth: token });
210
+ const missing = [];
211
+ for (const repo of config.repos) {
212
+ const parsed = parseGitHubUrl(repo.url);
213
+ if (!parsed)
214
+ continue;
215
+ try {
216
+ await octokit.rest.repos.getContent({
217
+ owner: parsed.owner,
218
+ repo: parsed.repo,
219
+ path: 'vibe',
220
+ });
221
+ }
222
+ catch {
223
+ missing.push(repo.alias);
224
+ }
225
+ }
226
+ if (missing.length === 0) {
227
+ return {
228
+ name: 'All repos have vibe/ structure',
229
+ category: 'repos',
230
+ status: 'passed',
231
+ details: 'All repos have vibe/ directory',
232
+ };
233
+ }
234
+ return {
235
+ name: 'All repos have vibe/ structure',
236
+ category: 'repos',
237
+ status: 'warning',
238
+ details: `Missing vibe/: ${missing.join(', ')}`,
239
+ fix: `Run \`vibe repo add\` for: ${missing.join(', ')}`,
240
+ fixable: true,
241
+ };
242
+ }
243
+ catch (error) {
244
+ const message = error instanceof Error ? error.message : 'Unknown error';
245
+ return {
246
+ name: 'All repos have vibe/ structure',
247
+ category: 'repos',
248
+ status: 'failed',
249
+ details: message,
250
+ };
251
+ }
252
+ },
253
+ };
254
+ /**
255
+ * All repo checks
256
+ */
257
+ export const repoChecks = [
258
+ reposConfiguredCheck,
259
+ reposAccessibleCheck,
260
+ reposHaveVibeStructureCheck,
261
+ ];
262
+ //# sourceMappingURL=repos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repos.js","sourceRoot":"","sources":["../../../src/core/doctor/repos.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Sync status health checks
3
+ * Validates sync data freshness
4
+ */
5
+ import type { HealthCheck } from '../../types/doctor.js';
6
+ /**
7
+ * Sync cache exists check
8
+ */
9
+ export declare const syncCacheExistsCheck: HealthCheck;
10
+ /**
11
+ * Sync data freshness check
12
+ */
13
+ export declare const syncDataFreshCheck: HealthCheck;
14
+ /**
15
+ * All sync checks
16
+ */
17
+ export declare const syncChecks: HealthCheck[];
18
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/core/doctor/sync.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAwDtE;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAoClC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAkDhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,WAAW,EAGnC,CAAC"}