@thanhvn14/csvibe 0.1.0 → 0.1.2

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 (176) hide show
  1. package/.csvibe/state/approaches.json +1 -0
  2. package/README.md +142 -3
  3. package/dist/commands/brainstorm.d.ts +16 -0
  4. package/dist/commands/brainstorm.d.ts.map +1 -0
  5. package/dist/commands/brainstorm.js +186 -0
  6. package/dist/commands/brainstorm.js.map +1 -0
  7. package/dist/commands/doctor.d.ts +9 -0
  8. package/dist/commands/doctor.d.ts.map +1 -0
  9. package/dist/commands/doctor.js +72 -0
  10. package/dist/commands/doctor.js.map +1 -0
  11. package/dist/commands/help.d.ts.map +1 -1
  12. package/dist/commands/help.js +13 -7
  13. package/dist/commands/help.js.map +1 -1
  14. package/dist/commands/index.d.ts +3 -0
  15. package/dist/commands/index.d.ts.map +1 -1
  16. package/dist/commands/index.js +7 -1
  17. package/dist/commands/index.js.map +1 -1
  18. package/dist/commands/init/index.d.ts +7 -0
  19. package/dist/commands/init/index.d.ts.map +1 -0
  20. package/dist/commands/init/index.js +10 -0
  21. package/dist/commands/init/index.js.map +1 -0
  22. package/dist/commands/init/init-command.d.ts +10 -0
  23. package/dist/commands/init/init-command.d.ts.map +1 -0
  24. package/dist/commands/init/init-command.js +75 -0
  25. package/dist/commands/init/init-command.js.map +1 -0
  26. package/dist/commands/init/phases/config-handler.d.ts +10 -0
  27. package/dist/commands/init/phases/config-handler.d.ts.map +1 -0
  28. package/dist/commands/init/phases/config-handler.js +21 -0
  29. package/dist/commands/init/phases/config-handler.js.map +1 -0
  30. package/dist/commands/init/phases/detection-handler.d.ts +10 -0
  31. package/dist/commands/init/phases/detection-handler.d.ts.map +1 -0
  32. package/dist/commands/init/phases/detection-handler.js +80 -0
  33. package/dist/commands/init/phases/detection-handler.js.map +1 -0
  34. package/dist/commands/init/phases/download-handler.d.ts +9 -0
  35. package/dist/commands/init/phases/download-handler.d.ts.map +1 -0
  36. package/dist/commands/init/phases/download-handler.js +16 -0
  37. package/dist/commands/init/phases/download-handler.js.map +1 -0
  38. package/dist/commands/init/phases/prompt-handler.d.ts +10 -0
  39. package/dist/commands/init/phases/prompt-handler.d.ts.map +1 -0
  40. package/dist/commands/init/phases/prompt-handler.js +24 -0
  41. package/dist/commands/init/phases/prompt-handler.js.map +1 -0
  42. package/dist/commands/init/phases/scaffold-handler.d.ts +9 -0
  43. package/dist/commands/init/phases/scaffold-handler.d.ts.map +1 -0
  44. package/dist/commands/init/phases/scaffold-handler.js +18 -0
  45. package/dist/commands/init/phases/scaffold-handler.js.map +1 -0
  46. package/dist/commands/init/phases/validation-handler.d.ts +14 -0
  47. package/dist/commands/init/phases/validation-handler.d.ts.map +1 -0
  48. package/dist/commands/init/phases/validation-handler.js +50 -0
  49. package/dist/commands/init/phases/validation-handler.js.map +1 -0
  50. package/dist/commands/init/phases/vscode-handler.d.ts +9 -0
  51. package/dist/commands/init/phases/vscode-handler.d.ts.map +1 -0
  52. package/dist/commands/init/phases/vscode-handler.js +16 -0
  53. package/dist/commands/init/phases/vscode-handler.js.map +1 -0
  54. package/dist/commands/init/types.d.ts +28 -0
  55. package/dist/commands/init/types.d.ts.map +1 -0
  56. package/dist/commands/init/types.js +6 -0
  57. package/dist/commands/init/types.js.map +1 -0
  58. package/dist/commands/scout.d.ts +30 -0
  59. package/dist/commands/scout.d.ts.map +1 -0
  60. package/dist/commands/scout.js +116 -0
  61. package/dist/commands/scout.js.map +1 -0
  62. package/dist/config/constants.d.ts +3 -3
  63. package/dist/config/constants.js +3 -3
  64. package/dist/config/constants.js.map +1 -1
  65. package/dist/domains/config/generator.d.ts +17 -0
  66. package/dist/domains/config/generator.d.ts.map +1 -0
  67. package/dist/domains/config/generator.js +67 -0
  68. package/dist/domains/config/generator.js.map +1 -0
  69. package/dist/domains/config/index.d.ts +8 -0
  70. package/dist/domains/config/index.d.ts.map +1 -0
  71. package/dist/domains/config/index.js +15 -0
  72. package/dist/domains/config/index.js.map +1 -0
  73. package/dist/domains/config/types.d.ts +39 -0
  74. package/dist/domains/config/types.d.ts.map +1 -0
  75. package/dist/domains/config/types.js +6 -0
  76. package/dist/domains/config/types.js.map +1 -0
  77. package/dist/domains/config/validator.d.ts +17 -0
  78. package/dist/domains/config/validator.d.ts.map +1 -0
  79. package/dist/domains/config/validator.js +54 -0
  80. package/dist/domains/config/validator.js.map +1 -0
  81. package/dist/domains/github/auth-api.d.ts +19 -0
  82. package/dist/domains/github/auth-api.d.ts.map +1 -0
  83. package/dist/domains/github/auth-api.js +196 -0
  84. package/dist/domains/github/auth-api.js.map +1 -0
  85. package/dist/domains/github/github-client.d.ts +323 -0
  86. package/dist/domains/github/github-client.d.ts.map +1 -0
  87. package/dist/domains/github/github-client.js +192 -0
  88. package/dist/domains/github/github-client.js.map +1 -0
  89. package/dist/domains/github/index.d.ts +9 -0
  90. package/dist/domains/github/index.d.ts.map +1 -0
  91. package/dist/domains/github/index.js +23 -0
  92. package/dist/domains/github/index.js.map +1 -0
  93. package/dist/domains/github/keychain.d.ts +19 -0
  94. package/dist/domains/github/keychain.d.ts.map +1 -0
  95. package/dist/domains/github/keychain.js +132 -0
  96. package/dist/domains/github/keychain.js.map +1 -0
  97. package/dist/domains/github/types.d.ts +40 -0
  98. package/dist/domains/github/types.d.ts.map +1 -0
  99. package/dist/domains/github/types.js +6 -0
  100. package/dist/domains/github/types.js.map +1 -0
  101. package/dist/domains/health-checks/auto-healer.d.ts +14 -0
  102. package/dist/domains/health-checks/auto-healer.d.ts.map +1 -0
  103. package/dist/domains/health-checks/auto-healer.js +160 -0
  104. package/dist/domains/health-checks/auto-healer.js.map +1 -0
  105. package/dist/domains/health-checks/check-runner.d.ts +10 -0
  106. package/dist/domains/health-checks/check-runner.d.ts.map +1 -0
  107. package/dist/domains/health-checks/check-runner.js +31 -0
  108. package/dist/domains/health-checks/check-runner.js.map +1 -0
  109. package/dist/domains/health-checks/checkers/auth-checker.d.ts +10 -0
  110. package/dist/domains/health-checks/checkers/auth-checker.d.ts.map +1 -0
  111. package/dist/domains/health-checks/checkers/auth-checker.js +90 -0
  112. package/dist/domains/health-checks/checkers/auth-checker.js.map +1 -0
  113. package/dist/domains/health-checks/checkers/deps-checker.d.ts +10 -0
  114. package/dist/domains/health-checks/checkers/deps-checker.d.ts.map +1 -0
  115. package/dist/domains/health-checks/checkers/deps-checker.js +150 -0
  116. package/dist/domains/health-checks/checkers/deps-checker.js.map +1 -0
  117. package/dist/domains/health-checks/checkers/project-checker.d.ts +10 -0
  118. package/dist/domains/health-checks/checkers/project-checker.d.ts.map +1 -0
  119. package/dist/domains/health-checks/checkers/project-checker.js +124 -0
  120. package/dist/domains/health-checks/checkers/project-checker.js.map +1 -0
  121. package/dist/domains/health-checks/checkers/system-checker.d.ts +10 -0
  122. package/dist/domains/health-checks/checkers/system-checker.d.ts.map +1 -0
  123. package/dist/domains/health-checks/checkers/system-checker.js +135 -0
  124. package/dist/domains/health-checks/checkers/system-checker.js.map +1 -0
  125. package/dist/domains/health-checks/index.d.ts +9 -0
  126. package/dist/domains/health-checks/index.d.ts.map +1 -0
  127. package/dist/domains/health-checks/index.js +21 -0
  128. package/dist/domains/health-checks/index.js.map +1 -0
  129. package/dist/domains/health-checks/report-generator.d.ts +18 -0
  130. package/dist/domains/health-checks/report-generator.d.ts.map +1 -0
  131. package/dist/domains/health-checks/report-generator.js +117 -0
  132. package/dist/domains/health-checks/report-generator.js.map +1 -0
  133. package/dist/domains/health-checks/types.d.ts +35 -0
  134. package/dist/domains/health-checks/types.d.ts.map +1 -0
  135. package/dist/domains/health-checks/types.js +6 -0
  136. package/dist/domains/health-checks/types.js.map +1 -0
  137. package/dist/index.js +33 -0
  138. package/dist/index.js.map +1 -1
  139. package/dist/utils/approaches-validator.d.ts +40 -0
  140. package/dist/utils/approaches-validator.d.ts.map +1 -0
  141. package/dist/utils/approaches-validator.js +101 -0
  142. package/dist/utils/approaches-validator.js.map +1 -0
  143. package/dist/utils/dependency-analyzer.d.ts +31 -0
  144. package/dist/utils/dependency-analyzer.d.ts.map +1 -0
  145. package/dist/utils/dependency-analyzer.js +294 -0
  146. package/dist/utils/dependency-analyzer.js.map +1 -0
  147. package/dist/utils/directory-analyzer.d.ts +23 -0
  148. package/dist/utils/directory-analyzer.d.ts.map +1 -0
  149. package/dist/utils/directory-analyzer.js +81 -0
  150. package/dist/utils/directory-analyzer.js.map +1 -0
  151. package/dist/utils/downloader.d.ts +3 -3
  152. package/dist/utils/downloader.d.ts.map +1 -1
  153. package/dist/utils/downloader.js +35 -65
  154. package/dist/utils/downloader.js.map +1 -1
  155. package/dist/utils/errors.d.ts +64 -10
  156. package/dist/utils/errors.d.ts.map +1 -1
  157. package/dist/utils/errors.js +136 -22
  158. package/dist/utils/errors.js.map +1 -1
  159. package/dist/utils/gh-cli.d.ts +4 -2
  160. package/dist/utils/gh-cli.d.ts.map +1 -1
  161. package/dist/utils/gh-cli.js +33 -38
  162. package/dist/utils/gh-cli.js.map +1 -1
  163. package/dist/utils/progress.d.ts +37 -0
  164. package/dist/utils/progress.d.ts.map +1 -0
  165. package/dist/utils/progress.js +121 -0
  166. package/dist/utils/progress.js.map +1 -0
  167. package/dist/utils/prompts.d.ts +5 -1
  168. package/dist/utils/prompts.d.ts.map +1 -1
  169. package/dist/utils/prompts.js +124 -64
  170. package/dist/utils/prompts.js.map +1 -1
  171. package/package.json +7 -3
  172. package/test-jira-prompt.js +32 -0
  173. package/dist/commands/init.d.ts +0 -6
  174. package/dist/commands/init.d.ts.map +0 -1
  175. package/dist/commands/init.js +0 -147
  176. package/dist/commands/init.js.map +0 -1
@@ -0,0 +1,294 @@
1
+ "use strict";
2
+ /**
3
+ * Dependency analysis utilities
4
+ * Extracts dependencies from manifest files and infers tech stack
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.analyzeDependencies = analyzeDependencies;
11
+ exports.inferTechStack = inferTechStack;
12
+ exports.detectBuildTool = detectBuildTool;
13
+ const fs_extra_1 = __importDefault(require("fs-extra"));
14
+ const path_1 = __importDefault(require("path"));
15
+ const project_detector_1 = require("./project-detector");
16
+ /**
17
+ * Extract dependencies from project manifest files
18
+ *
19
+ * @param projectRoot - Root directory of the project
20
+ * @param projectType - Detected project type
21
+ * @returns Record of dependency names to versions
22
+ */
23
+ async function analyzeDependencies(projectRoot, projectType) {
24
+ switch (projectType) {
25
+ case project_detector_1.ProjectType.Node:
26
+ case project_detector_1.ProjectType.NodeMonorepo:
27
+ return analyzeNodeDependencies(projectRoot);
28
+ case project_detector_1.ProjectType.Python:
29
+ return analyzePythonDependencies(projectRoot);
30
+ case project_detector_1.ProjectType.Rust:
31
+ return analyzeRustDependencies(projectRoot);
32
+ default:
33
+ return {};
34
+ }
35
+ }
36
+ /**
37
+ * Extract Node.js dependencies from package.json
38
+ */
39
+ async function analyzeNodeDependencies(projectRoot) {
40
+ const packageJsonPath = path_1.default.join(projectRoot, 'package.json');
41
+ if (!await fs_extra_1.default.pathExists(packageJsonPath)) {
42
+ return {};
43
+ }
44
+ try {
45
+ const pkg = await fs_extra_1.default.readJson(packageJsonPath);
46
+ return {
47
+ ...(pkg.dependencies || {}),
48
+ ...(pkg.devDependencies || {})
49
+ };
50
+ }
51
+ catch {
52
+ return {};
53
+ }
54
+ }
55
+ /**
56
+ * Extract Python dependencies from requirements.txt or pyproject.toml
57
+ */
58
+ async function analyzePythonDependencies(projectRoot) {
59
+ // Try requirements.txt first
60
+ const requirementsPath = path_1.default.join(projectRoot, 'requirements.txt');
61
+ if (await fs_extra_1.default.pathExists(requirementsPath)) {
62
+ try {
63
+ const content = await fs_extra_1.default.readFile(requirementsPath, 'utf-8');
64
+ return parseRequirementsTxt(content);
65
+ }
66
+ catch {
67
+ // Continue to try pyproject.toml
68
+ }
69
+ }
70
+ // Try pyproject.toml
71
+ const pyprojectPath = path_1.default.join(projectRoot, 'pyproject.toml');
72
+ if (await fs_extra_1.default.pathExists(pyprojectPath)) {
73
+ try {
74
+ const content = await fs_extra_1.default.readFile(pyprojectPath, 'utf-8');
75
+ return parsePyprojectToml(content);
76
+ }
77
+ catch {
78
+ return {};
79
+ }
80
+ }
81
+ return {};
82
+ }
83
+ /**
84
+ * Extract Rust dependencies from Cargo.toml
85
+ */
86
+ async function analyzeRustDependencies(projectRoot) {
87
+ const cargoPath = path_1.default.join(projectRoot, 'Cargo.toml');
88
+ if (!await fs_extra_1.default.pathExists(cargoPath)) {
89
+ return {};
90
+ }
91
+ try {
92
+ const content = await fs_extra_1.default.readFile(cargoPath, 'utf-8');
93
+ return parseCargoToml(content);
94
+ }
95
+ catch {
96
+ return {};
97
+ }
98
+ }
99
+ /**
100
+ * Infer tech stack from dependencies
101
+ * Uses pattern matching on dependency names to identify frameworks and tools
102
+ *
103
+ * @param dependencies - Dependency map from analyzeDependencies
104
+ * @param projectType - Detected project type
105
+ * @returns Array of detected technologies
106
+ */
107
+ function inferTechStack(dependencies, projectType) {
108
+ const stack = [];
109
+ // Language/runtime
110
+ if (projectType === project_detector_1.ProjectType.Node || projectType === project_detector_1.ProjectType.NodeMonorepo) {
111
+ if (dependencies.typescript || dependencies['@types/node']) {
112
+ stack.push('TypeScript');
113
+ }
114
+ else {
115
+ stack.push('JavaScript');
116
+ }
117
+ }
118
+ else if (projectType === project_detector_1.ProjectType.Python) {
119
+ stack.push('Python');
120
+ }
121
+ else if (projectType === project_detector_1.ProjectType.Rust) {
122
+ stack.push('Rust');
123
+ }
124
+ // Frontend frameworks
125
+ if (dependencies.react)
126
+ stack.push('React');
127
+ if (dependencies.vue)
128
+ stack.push('Vue');
129
+ if (dependencies.angular || dependencies['@angular/core'])
130
+ stack.push('Angular');
131
+ if (dependencies.svelte)
132
+ stack.push('Svelte');
133
+ if (dependencies.next)
134
+ stack.push('Next.js');
135
+ if (dependencies.nuxt)
136
+ stack.push('Nuxt');
137
+ // Backend frameworks
138
+ if (dependencies.express)
139
+ stack.push('Express');
140
+ if (dependencies.fastify)
141
+ stack.push('Fastify');
142
+ if (dependencies.nestjs || dependencies['@nestjs/core'])
143
+ stack.push('NestJS');
144
+ if (dependencies.django)
145
+ stack.push('Django');
146
+ if (dependencies.fastapi)
147
+ stack.push('FastAPI');
148
+ if (dependencies.flask)
149
+ stack.push('Flask');
150
+ if (dependencies.actix || dependencies['actix-web'])
151
+ stack.push('Actix');
152
+ // CSS frameworks
153
+ if (dependencies.tailwindcss)
154
+ stack.push('Tailwind CSS');
155
+ if (dependencies['@mui/material'])
156
+ stack.push('MUI');
157
+ if (dependencies.bootstrap)
158
+ stack.push('Bootstrap');
159
+ // Databases
160
+ if (dependencies.pg || dependencies.postgres)
161
+ stack.push('PostgreSQL');
162
+ if (dependencies.mongodb || dependencies.mongoose)
163
+ stack.push('MongoDB');
164
+ if (dependencies.mysql || dependencies.mysql2)
165
+ stack.push('MySQL');
166
+ if (dependencies.redis)
167
+ stack.push('Redis');
168
+ // Build tools
169
+ if (dependencies.vite)
170
+ stack.push('Vite');
171
+ if (dependencies.webpack)
172
+ stack.push('Webpack');
173
+ if (dependencies.rollup)
174
+ stack.push('Rollup');
175
+ if (dependencies.turbopack)
176
+ stack.push('Turbopack');
177
+ // Testing frameworks
178
+ if (dependencies.vitest)
179
+ stack.push('Vitest');
180
+ if (dependencies.jest)
181
+ stack.push('Jest');
182
+ if (dependencies.pytest)
183
+ stack.push('Pytest');
184
+ if (dependencies.mocha)
185
+ stack.push('Mocha');
186
+ return stack;
187
+ }
188
+ /**
189
+ * Detect build tool from lock files
190
+ *
191
+ * @param projectRoot - Root directory of the project
192
+ * @param projectType - Detected project type
193
+ * @returns Detected build tool name
194
+ */
195
+ async function detectBuildTool(projectRoot, projectType) {
196
+ switch (projectType) {
197
+ case project_detector_1.ProjectType.Node:
198
+ case project_detector_1.ProjectType.NodeMonorepo:
199
+ if (await fs_extra_1.default.pathExists(path_1.default.join(projectRoot, 'pnpm-lock.yaml')))
200
+ return 'pnpm';
201
+ if (await fs_extra_1.default.pathExists(path_1.default.join(projectRoot, 'yarn.lock')))
202
+ return 'yarn';
203
+ if (await fs_extra_1.default.pathExists(path_1.default.join(projectRoot, 'bun.lockb')))
204
+ return 'bun';
205
+ if (await fs_extra_1.default.pathExists(path_1.default.join(projectRoot, 'package-lock.json')))
206
+ return 'npm';
207
+ return 'npm'; // default
208
+ case project_detector_1.ProjectType.Python:
209
+ if (await fs_extra_1.default.pathExists(path_1.default.join(projectRoot, 'poetry.lock')))
210
+ return 'poetry';
211
+ if (await fs_extra_1.default.pathExists(path_1.default.join(projectRoot, 'Pipfile.lock')))
212
+ return 'pipenv';
213
+ return 'pip'; // default
214
+ case project_detector_1.ProjectType.Rust:
215
+ return 'cargo';
216
+ default:
217
+ return 'unknown';
218
+ }
219
+ }
220
+ // ===== Helper Parsers =====
221
+ /**
222
+ * Parse requirements.txt format
223
+ * Supports lines like: package==1.0.0, package>=1.0, package
224
+ */
225
+ function parseRequirementsTxt(content) {
226
+ const deps = {};
227
+ const lines = content.split('\n');
228
+ for (const line of lines) {
229
+ const trimmed = line.trim();
230
+ // Skip empty lines and comments
231
+ if (!trimmed || trimmed.startsWith('#'))
232
+ continue;
233
+ // Match package name with optional version specifier
234
+ const match = trimmed.match(/^([a-zA-Z0-9_-]+)([>=<~!]=?.*)?$/);
235
+ if (match) {
236
+ const packageName = match[1];
237
+ const version = match[2]?.trim() || '*';
238
+ deps[packageName] = version;
239
+ }
240
+ }
241
+ return deps;
242
+ }
243
+ /**
244
+ * Parse pyproject.toml format (simple regex-based)
245
+ * Extracts dependencies from [tool.poetry.dependencies] section
246
+ */
247
+ function parsePyprojectToml(content) {
248
+ const deps = {};
249
+ // Extract [tool.poetry.dependencies] section
250
+ const depSection = content.match(/\[tool\.poetry\.dependencies\]([\s\S]*?)(\[|$)/);
251
+ if (depSection) {
252
+ const lines = depSection[1].split('\n');
253
+ for (const line of lines) {
254
+ // Match: package = "^1.0.0" or package = { version = "^1.0.0" }
255
+ const match = line.match(/^(\w+)\s*=\s*["']([^"']+)["']/);
256
+ if (match) {
257
+ deps[match[1]] = match[2];
258
+ }
259
+ }
260
+ }
261
+ return deps;
262
+ }
263
+ /**
264
+ * Parse Cargo.toml format (simple regex-based)
265
+ * Extracts dependencies from [dependencies] section
266
+ */
267
+ function parseCargoToml(content) {
268
+ const deps = {};
269
+ // Extract [dependencies] section (until next section or end of file)
270
+ const depSection = content.match(/\[dependencies\]([\s\S]*?)(\n\[|$)/);
271
+ if (depSection) {
272
+ const lines = depSection[1].split('\n');
273
+ for (const line of lines) {
274
+ const trimmed = line.trim();
275
+ // Skip empty lines
276
+ if (!trimmed)
277
+ continue;
278
+ // Match: package = "1.0" or package = { version = "1.0" }
279
+ // Support hyphens in package names (e.g., actix-web)
280
+ const simpleMatch = trimmed.match(/^([\w-]+)\s*=\s*["']([^"']+)["']/);
281
+ if (simpleMatch) {
282
+ deps[simpleMatch[1]] = simpleMatch[2];
283
+ continue;
284
+ }
285
+ // Match object notation: package = { version = "1.0", ... }
286
+ const objectMatch = trimmed.match(/^([\w-]+)\s*=\s*\{.*version\s*=\s*["']([^"']+)["']/);
287
+ if (objectMatch) {
288
+ deps[objectMatch[1]] = objectMatch[2];
289
+ }
290
+ }
291
+ }
292
+ return deps;
293
+ }
294
+ //# sourceMappingURL=dependency-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-analyzer.js","sourceRoot":"","sources":["../../src/utils/dependency-analyzer.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAaH,kDAeC;AA4ED,wCA4DC;AASD,0CAwBC;AAnMD,wDAA0B;AAC1B,gDAAwB;AACxB,yDAAiD;AAEjD;;;;;;GAMG;AACI,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,WAAwB;IAExB,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,8BAAW,CAAC,IAAI,CAAC;QACtB,KAAK,8BAAW,CAAC,YAAY;YAC3B,OAAO,uBAAuB,CAAC,WAAW,CAAC,CAAC;QAC9C,KAAK,8BAAW,CAAC,MAAM;YACrB,OAAO,yBAAyB,CAAC,WAAW,CAAC,CAAC;QAChD,KAAK,8BAAW,CAAC,IAAI;YACnB,OAAO,uBAAuB,CAAC,WAAW,CAAC,CAAC;QAC9C;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,uBAAuB,CAAC,WAAmB;IACxD,MAAM,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC/D,IAAI,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QAC/C,OAAO;YACL,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;YAC3B,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;SAC/B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,yBAAyB,CAAC,WAAmB;IAC1D,6BAA6B;IAC7B,MAAM,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IACpE,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;YAC7D,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IAC/D,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAC1D,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,uBAAuB,CAAC,WAAmB;IACxD,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACtD,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,cAAc,CAC5B,YAAoC,EACpC,WAAwB;IAExB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,mBAAmB;IACnB,IAAI,WAAW,KAAK,8BAAW,CAAC,IAAI,IAAI,WAAW,KAAK,8BAAW,CAAC,YAAY,EAAE,CAAC;QACjF,IAAI,YAAY,CAAC,UAAU,IAAI,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC;YAC3D,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;SAAM,IAAI,WAAW,KAAK,8BAAW,CAAC,MAAM,EAAE,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;SAAM,IAAI,WAAW,KAAK,8BAAW,CAAC,IAAI,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IAED,sBAAsB;IACtB,IAAI,YAAY,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,YAAY,CAAC,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,eAAe,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjF,IAAI,YAAY,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,YAAY,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,YAAY,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAE1C,qBAAqB;IACrB,IAAI,YAAY,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,YAAY,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,cAAc,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9E,IAAI,YAAY,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,YAAY,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,YAAY,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,YAAY,CAAC,KAAK,IAAI,YAAY,CAAC,WAAW,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEzE,iBAAiB;IACjB,IAAI,YAAY,CAAC,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACzD,IAAI,YAAY,CAAC,eAAe,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,IAAI,YAAY,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAEpD,YAAY;IACZ,IAAI,YAAY,CAAC,EAAE,IAAI,YAAY,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACvE,IAAI,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzE,IAAI,YAAY,CAAC,KAAK,IAAI,YAAY,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnE,IAAI,YAAY,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE5C,cAAc;IACd,IAAI,YAAY,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,YAAY,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,YAAY,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,YAAY,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAEpD,qBAAqB;IACrB,IAAI,YAAY,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,YAAY,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,YAAY,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,YAAY,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE5C,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,eAAe,CACnC,WAAmB,EACnB,WAAwB;IAExB,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,8BAAW,CAAC,IAAI,CAAC;QACtB,KAAK,8BAAW,CAAC,YAAY;YAC3B,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;gBAAE,OAAO,MAAM,CAAC;YACjF,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;gBAAE,OAAO,MAAM,CAAC;YAC5E,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC3E,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YACnF,OAAO,KAAK,CAAC,CAAC,UAAU;QAE1B,KAAK,8BAAW,CAAC,MAAM;YACrB,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;gBAAE,OAAO,QAAQ,CAAC;YAChF,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;gBAAE,OAAO,QAAQ,CAAC;YACjF,OAAO,KAAK,CAAC,CAAC,UAAU;QAE1B,KAAK,8BAAW,CAAC,IAAI;YACnB,OAAO,OAAO,CAAC;QAEjB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,6BAA6B;AAE7B;;;GAGG;AACH,SAAS,oBAAoB,CAAC,OAAe;IAC3C,MAAM,IAAI,GAA2B,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,gCAAgC;QAChC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAElD,qDAAqD;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAChE,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC;YACxC,IAAI,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CAAC,OAAe;IACzC,MAAM,IAAI,GAA2B,EAAE,CAAC;IAExC,6CAA6C;IAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACnF,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,gEAAgE;YAChE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC1D,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,OAAe;IACrC,MAAM,IAAI,GAA2B,EAAE,CAAC;IAExC,qEAAqE;IACrE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACvE,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,mBAAmB;YACnB,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,0DAA0D;YAC1D,qDAAqD;YACrD,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACtE,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBACtC,SAAS;YACX,CAAC;YAED,4DAA4D;YAC5D,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACxF,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Directory structure analysis
3
+ * Analyzes project directory structure to identify source, test, and config directories
4
+ */
5
+ import { ProjectType } from './project-detector';
6
+ /**
7
+ * Directory structure result
8
+ */
9
+ export interface DirectoryStructure {
10
+ source: string[];
11
+ tests: string[];
12
+ config: string[];
13
+ }
14
+ /**
15
+ * Analyze project directory structure
16
+ * Uses predefined candidate lists to identify common directory patterns
17
+ *
18
+ * @param projectRoot - Root directory of the project
19
+ * @param projectType - Detected project type
20
+ * @returns Directory structure with source, test, and config directories
21
+ */
22
+ export declare function analyzeDirectories(projectRoot: string, projectType: ProjectType): Promise<DirectoryStructure>;
23
+ //# sourceMappingURL=directory-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directory-analyzer.d.ts","sourceRoot":"","sources":["../../src/utils/directory-analyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,kBAAkB,CAAC,CA6D7B"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ /**
3
+ * Directory structure analysis
4
+ * Analyzes project directory structure to identify source, test, and config directories
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.analyzeDirectories = analyzeDirectories;
11
+ const fs_extra_1 = __importDefault(require("fs-extra"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const project_detector_1 = require("./project-detector");
14
+ /**
15
+ * Analyze project directory structure
16
+ * Uses predefined candidate lists to identify common directory patterns
17
+ *
18
+ * @param projectRoot - Root directory of the project
19
+ * @param projectType - Detected project type
20
+ * @returns Directory structure with source, test, and config directories
21
+ */
22
+ async function analyzeDirectories(projectRoot, projectType) {
23
+ const result = {
24
+ source: [],
25
+ tests: [],
26
+ config: ['.'] // Root always has config files
27
+ };
28
+ try {
29
+ const entries = await fs_extra_1.default.readdir(projectRoot, { withFileTypes: true });
30
+ const dirs = entries.filter(e => e.isDirectory()).map(e => e.name);
31
+ // Source directories - common patterns across ecosystems
32
+ const sourceCandidates = ['src', 'lib', 'app', 'components', 'packages', 'apps'];
33
+ for (const candidate of sourceCandidates) {
34
+ if (dirs.includes(candidate)) {
35
+ result.source.push(candidate);
36
+ }
37
+ }
38
+ // Test directories - common test directory names
39
+ const testCandidates = ['test', 'tests', '__tests__', 'spec', '__test__'];
40
+ for (const candidate of testCandidates) {
41
+ if (dirs.includes(candidate)) {
42
+ result.tests.push(candidate);
43
+ }
44
+ }
45
+ // Additional config directories for monorepos
46
+ if (projectType === project_detector_1.ProjectType.NodeMonorepo) {
47
+ // Scan packages/ for individual package configs
48
+ if (dirs.includes('packages')) {
49
+ const packagesDir = path_1.default.join(projectRoot, 'packages');
50
+ try {
51
+ const packageDirs = await fs_extra_1.default.readdir(packagesDir, { withFileTypes: true });
52
+ packageDirs
53
+ .filter(e => e.isDirectory())
54
+ .forEach(e => result.config.push(`packages/${e.name}`));
55
+ }
56
+ catch {
57
+ // Ignore if packages/ is not accessible
58
+ }
59
+ }
60
+ // Scan apps/ for individual app configs
61
+ if (dirs.includes('apps')) {
62
+ const appsDir = path_1.default.join(projectRoot, 'apps');
63
+ try {
64
+ const appDirs = await fs_extra_1.default.readdir(appsDir, { withFileTypes: true });
65
+ appDirs
66
+ .filter(e => e.isDirectory())
67
+ .forEach(e => result.config.push(`apps/${e.name}`));
68
+ }
69
+ catch {
70
+ // Ignore if apps/ is not accessible
71
+ }
72
+ }
73
+ }
74
+ }
75
+ catch (error) {
76
+ // Return empty structure on error (graceful degradation)
77
+ console.warn(`Warning: Could not analyze directories: ${error}`);
78
+ }
79
+ return result;
80
+ }
81
+ //# sourceMappingURL=directory-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directory-analyzer.js","sourceRoot":"","sources":["../../src/utils/directory-analyzer.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  /**
2
- * GitHub asset download utilities
2
+ * GitHub asset download utilities using @octokit/rest
3
3
  */
4
4
  /**
5
- * Download .github directory from private repo
5
+ * Download .github directory from private repo using GitHub client
6
6
  */
7
7
  export declare function downloadGithubAssets(repo?: string, branch?: string, targetDir?: string): Promise<void>;
8
8
  /**
9
- * Download config template from repo
9
+ * Download config template from repo using GitHub client
10
10
  */
11
11
  export declare function downloadConfigTemplate(repo?: string): Promise<string>;
12
12
  //# sourceMappingURL=downloader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"downloader.d.ts","sourceRoot":"","sources":["../../src/utils/downloader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,GAAE,MAA4B,EAClC,MAAM,GAAE,MAAe,EACvB,SAAS,GAAE,MAAsB,GAChC,OAAO,CAAC,IAAI,CAAC,CAqEf;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,GAAE,MAA4B,GACjC,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
1
+ {"version":3,"file":"downloader.d.ts","sourceRoot":"","sources":["../../src/utils/downloader.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,GAAE,MAA4B,EAClC,MAAM,GAAE,MAAe,EACvB,SAAS,GAAE,MAAsB,GAChC,OAAO,CAAC,IAAI,CAAC,CA6Cf;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,GAAE,MAA4B,GACjC,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /**
3
- * GitHub asset download utilities
3
+ * GitHub asset download utilities using @octokit/rest
4
4
  */
5
5
  var __importDefault = (this && this.__importDefault) || function (mod) {
6
6
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -8,98 +8,68 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.downloadGithubAssets = downloadGithubAssets;
10
10
  exports.downloadConfigTemplate = downloadConfigTemplate;
11
- const execa_1 = require("execa");
12
11
  const fs_extra_1 = __importDefault(require("fs-extra"));
13
12
  const path_1 = __importDefault(require("path"));
14
13
  const constants_1 = require("../config/constants");
15
14
  const logger_1 = require("./logger");
15
+ const github_1 = require("../domains/github");
16
+ const progress_1 = require("./progress");
16
17
  /**
17
- * Download .github directory from private repo
18
+ * Download .github directory from private repo using GitHub client
18
19
  */
19
20
  async function downloadGithubAssets(repo = constants_1.CONSTANTS.REPO_FULL, branch = 'main', targetDir = process.cwd()) {
20
21
  const spinner = logger_1.logger.spinner(`Downloading assets from ${repo}...`);
21
- const tempDir = path_1.default.join(targetDir, '.csvibe-tmp');
22
22
  try {
23
- // Create temp directory
24
- await fs_extra_1.default.ensureDir(tempDir);
25
- // Clone repo with sparse checkout (only .github/)
26
- // Using gh repo clone with --depth=1 and --filter=blob:none
27
- await (0, execa_1.execa)('gh', [
28
- 'repo',
29
- 'clone',
30
- repo,
31
- tempDir,
32
- '--',
33
- '--depth=1',
34
- '--filter=blob:none',
35
- '--sparse'
36
- ]);
37
- // Sparse checkout .github/ directory
38
- await (0, execa_1.execa)('git', [
39
- '-C',
40
- tempDir,
41
- 'sparse-checkout',
42
- 'set',
43
- '.github'
44
- ]);
45
- // Copy .github/ to target directory
46
- const sourceGithub = path_1.default.join(tempDir, '.github');
47
- const targetGithub = path_1.default.join(targetDir, '.github');
48
- if (await fs_extra_1.default.pathExists(sourceGithub)) {
49
- // Copy agents
50
- await copyDirectory(path_1.default.join(sourceGithub, 'agents'), path_1.default.join(targetGithub, 'agents'));
51
- // Copy prompts (if exists)
52
- if (await fs_extra_1.default.pathExists(path_1.default.join(sourceGithub, 'prompts'))) {
53
- await copyDirectory(path_1.default.join(sourceGithub, 'prompts'), path_1.default.join(targetGithub, 'prompts'));
54
- }
55
- // Copy instructions (if exists)
56
- if (await fs_extra_1.default.pathExists(path_1.default.join(sourceGithub, 'instructions'))) {
57
- await copyDirectory(path_1.default.join(sourceGithub, 'instructions'), path_1.default.join(targetGithub, 'instructions'));
58
- }
59
- spinner.succeed('Assets downloaded successfully');
60
- }
61
- else {
23
+ const [owner, repoName] = repo.split('/');
24
+ const client = await github_1.GitHubClient.create();
25
+ // Download .github directory contents
26
+ const files = await client.downloadDirectory(owner, repoName, '.github', branch);
27
+ if (files.length === 0) {
62
28
  spinner.fail('No .github directory found in repository');
63
29
  throw new Error('Repository does not contain .github directory');
64
30
  }
31
+ // Create progress bar for file writing
32
+ const progressBar = (0, progress_1.createProgressBar)({
33
+ label: 'Writing files',
34
+ total: files.length,
35
+ unit: 'files',
36
+ });
37
+ let written = 0;
38
+ // Write files to target directory
39
+ for (const file of files) {
40
+ const targetPath = path_1.default.join(targetDir, file.path);
41
+ // Ensure directory exists
42
+ await fs_extra_1.default.ensureDir(path_1.default.dirname(targetPath));
43
+ // Write file
44
+ await fs_extra_1.default.writeFile(targetPath, file.content);
45
+ // Update progress
46
+ written++;
47
+ progressBar.update(written);
48
+ }
49
+ progressBar.stop();
50
+ spinner.succeed(`Assets downloaded successfully (${files.length} files)`);
65
51
  }
66
52
  catch (error) {
67
53
  spinner.fail('Failed to download assets');
68
54
  throw error;
69
55
  }
70
- finally {
71
- // Cleanup temp directory
72
- await fs_extra_1.default.remove(tempDir);
73
- }
74
56
  }
75
57
  /**
76
- * Download config template from repo
58
+ * Download config template from repo using GitHub client
77
59
  */
78
60
  async function downloadConfigTemplate(repo = constants_1.CONSTANTS.REPO_FULL) {
79
61
  try {
80
- // Use gh api to get file content
81
- const { stdout } = await (0, execa_1.execa)('gh', [
82
- 'api',
83
- `repos/${repo}/contents/templates/config.yml.template`,
84
- '--jq',
85
- '.content'
86
- ]);
87
- // Decode base64 content
88
- const content = Buffer.from(stdout, 'base64').toString('utf-8');
89
- return content;
62
+ const [owner, repoName] = repo.split('/');
63
+ const client = await github_1.GitHubClient.create();
64
+ // Download config template
65
+ const content = await client.downloadFile(owner, repoName, 'templates/config.yml.template');
66
+ return content.toString('utf-8');
90
67
  }
91
68
  catch (error) {
92
69
  // Return default template if not found
93
70
  return getDefaultConfigTemplate();
94
71
  }
95
72
  }
96
- /**
97
- * Copy directory recursively
98
- */
99
- async function copyDirectory(src, dest) {
100
- await fs_extra_1.default.ensureDir(dest);
101
- await fs_extra_1.default.copy(src, dest, { overwrite: true });
102
- }
103
73
  /**
104
74
  * Default config template (fallback)
105
75
  */
@@ -1 +1 @@
1
- {"version":3,"file":"downloader.js","sourceRoot":"","sources":["../../src/utils/downloader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"downloader.js","sourceRoot":"","sources":["../../src/utils/downloader.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AAYH,oDAiDC;AAKD,wDAmBC;AAnFD,wDAA0B;AAC1B,gDAAwB;AACxB,mDAAgD;AAChD,qCAAkC;AAClC,8CAAiD;AACjD,yCAA+C;AAE/C;;GAEG;AACI,KAAK,UAAU,oBAAoB,CACxC,OAAe,qBAAS,CAAC,SAAS,EAClC,SAAiB,MAAM,EACvB,YAAoB,OAAO,CAAC,GAAG,EAAE;IAEjC,MAAM,OAAO,GAAG,eAAM,CAAC,OAAO,CAAC,2BAA2B,IAAI,KAAK,CAAC,CAAC;IAErE,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,qBAAY,CAAC,MAAM,EAAE,CAAC;QAE3C,sCAAsC;QACtC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAEjF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAED,uCAAuC;QACvC,MAAM,WAAW,GAAG,IAAA,4BAAiB,EAAC;YACpC,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QAEH,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,kCAAkC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAEnD,0BAA0B;YAC1B,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;YAE7C,aAAa;YACb,MAAM,kBAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAE7C,kBAAkB;YAClB,OAAO,EAAE,CAAC;YACV,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QAED,WAAW,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,CAAC,OAAO,CAAC,mCAAmC,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC1C,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,sBAAsB,CAC1C,OAAe,qBAAS,CAAC,SAAS;IAElC,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,qBAAY,CAAC,MAAM,EAAE,CAAC;QAE3C,2BAA2B;QAC3B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,YAAY,CACvC,KAAK,EACL,QAAQ,EACR,+BAA+B,CAChC,CAAC;QAEF,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,uCAAuC;QACvC,OAAO,wBAAwB,EAAE,CAAC;IACpC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB;IAC/B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCR,CAAC;AACF,CAAC"}