@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 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domains/health-checks/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,eAAe;AACf,+CAAiD;AAAxC,+GAAA,eAAe,OAAA;AAExB,cAAc;AACd,6CAAuD;AAA9C,sGAAA,OAAO,OAAA;AAAE,4GAAA,aAAa,OAAA;AAE/B,oBAAoB;AACpB,uDAAsF;AAA7E,kHAAA,cAAc,OAAA;AAAE,sHAAA,kBAAkB,OAAA;AAAE,gHAAA,YAAY,OAAA;AAYzD,uEAAuE"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Health check report generation
3
+ * Formats reports for terminal output, JSON, and GitHub Gist upload
4
+ */
5
+ import type { HealthCheckReport } from './types';
6
+ /**
7
+ * Generate formatted terminal report
8
+ */
9
+ export declare function generateReport(report: HealthCheckReport): string;
10
+ /**
11
+ * Generate JSON report
12
+ */
13
+ export declare function generateJsonReport(report: HealthCheckReport): string;
14
+ /**
15
+ * Upload report to GitHub Gist
16
+ */
17
+ export declare function uploadToGist(report: HealthCheckReport): Promise<string>;
18
+ //# sourceMappingURL=report-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-generator.d.ts","sourceRoot":"","sources":["../../../src/domains/health-checks/report-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAe,MAAM,SAAS,CAAC;AAE9D;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAqDhE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAEpE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsB7E"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ /**
3
+ * Health check report generation
4
+ * Formats reports for terminal output, JSON, and GitHub Gist upload
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.generateReport = generateReport;
11
+ exports.generateJsonReport = generateJsonReport;
12
+ exports.uploadToGist = uploadToGist;
13
+ const chalk_1 = __importDefault(require("chalk"));
14
+ const github_1 = require("../github");
15
+ /**
16
+ * Generate formatted terminal report
17
+ */
18
+ function generateReport(report) {
19
+ const lines = [];
20
+ lines.push('');
21
+ lines.push(chalk_1.default.bold.cyan('CSVibe Health Check Report'));
22
+ lines.push(chalk_1.default.gray(`Generated: ${new Date(report.timestamp).toLocaleString()}`));
23
+ lines.push('');
24
+ for (const result of report.results) {
25
+ // Category header
26
+ const categoryIcon = result.passed ? '✓' : '✗';
27
+ const categoryColor = result.passed ? chalk_1.default.green : chalk_1.default.red;
28
+ lines.push(categoryColor.bold(`${categoryIcon} ${result.category}`));
29
+ // Individual checks
30
+ for (const check of result.checks) {
31
+ const icon = getCheckIcon(check.status);
32
+ const color = getCheckColor(check.status);
33
+ lines.push(color(` ${icon} ${check.name}: ${check.message}`));
34
+ // Show fix suggestion if available
35
+ if (check.status !== 'pass' && check.fix) {
36
+ lines.push(chalk_1.default.gray(` 💡 Fix: ${check.fix}`));
37
+ }
38
+ // Show error details if available
39
+ if (check.error) {
40
+ lines.push(chalk_1.default.dim(` ⚠ Error: ${check.error}`));
41
+ }
42
+ }
43
+ lines.push('');
44
+ }
45
+ // Summary
46
+ if (report.passed) {
47
+ lines.push(chalk_1.default.green.bold('✓ All checks passed!'));
48
+ }
49
+ else {
50
+ lines.push(chalk_1.default.red.bold('✗ Some checks failed'));
51
+ if (report.fixable > 0) {
52
+ lines.push('');
53
+ lines.push(chalk_1.default.yellow(`💡 ${report.fixable} issue(s) can be auto-fixed with: ${chalk_1.default.cyan('csvibe doctor --fix')}`));
54
+ }
55
+ }
56
+ lines.push('');
57
+ return lines.join('\n');
58
+ }
59
+ /**
60
+ * Generate JSON report
61
+ */
62
+ function generateJsonReport(report) {
63
+ return JSON.stringify(report, null, 2);
64
+ }
65
+ /**
66
+ * Upload report to GitHub Gist
67
+ */
68
+ async function uploadToGist(report) {
69
+ try {
70
+ const client = await github_1.GitHubClient.create();
71
+ const content = generateReport(report);
72
+ // Use Octokit directly from the client
73
+ const octokit = client.octokit;
74
+ const gist = await octokit.gists.create({
75
+ files: {
76
+ 'csvibe-doctor-report.txt': { content },
77
+ },
78
+ description: `CSVibe Health Check Report - ${new Date(report.timestamp).toLocaleString()}`,
79
+ public: false,
80
+ });
81
+ return gist.data.html_url;
82
+ }
83
+ catch (error) {
84
+ throw new Error(`Failed to upload report to gist: ${error instanceof Error ? error.message : String(error)}`);
85
+ }
86
+ }
87
+ /**
88
+ * Get icon for check status
89
+ */
90
+ function getCheckIcon(status) {
91
+ switch (status) {
92
+ case 'pass':
93
+ return '✓';
94
+ case 'warn':
95
+ return '⚠';
96
+ case 'fail':
97
+ return '✗';
98
+ default:
99
+ return '?';
100
+ }
101
+ }
102
+ /**
103
+ * Get color function for check status
104
+ */
105
+ function getCheckColor(status) {
106
+ switch (status) {
107
+ case 'pass':
108
+ return chalk_1.default.green;
109
+ case 'warn':
110
+ return chalk_1.default.yellow;
111
+ case 'fail':
112
+ return chalk_1.default.red;
113
+ default:
114
+ return chalk_1.default.white;
115
+ }
116
+ }
117
+ //# sourceMappingURL=report-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-generator.js","sourceRoot":"","sources":["../../../src/domains/health-checks/report-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Health check types and interfaces
3
+ */
4
+ export type CheckStatus = 'pass' | 'warn' | 'fail';
5
+ export interface Check {
6
+ name: string;
7
+ status: CheckStatus;
8
+ message: string;
9
+ fixable: boolean;
10
+ fix?: string;
11
+ error?: string;
12
+ }
13
+ export interface CheckResult {
14
+ category: string;
15
+ checks: Check[];
16
+ passed: boolean;
17
+ }
18
+ export interface HealthCheckReport {
19
+ results: CheckResult[];
20
+ passed: boolean;
21
+ fixable: number;
22
+ timestamp: string;
23
+ }
24
+ export interface FixResult {
25
+ success: boolean;
26
+ message: string;
27
+ error?: string;
28
+ }
29
+ export interface DoctorOptions {
30
+ fix?: boolean;
31
+ report?: boolean;
32
+ json?: boolean;
33
+ checkOnly?: boolean;
34
+ }
35
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/domains/health-checks/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEnD,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Health check types and interfaces
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/domains/health-checks/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
package/dist/index.js CHANGED
@@ -42,6 +42,39 @@ program
42
42
  .action((0, errors_1.withErrorHandling)(async (options) => {
43
43
  await (0, commands_1.initCommand)();
44
44
  }));
45
+ /**
46
+ * Doctor command
47
+ */
48
+ program
49
+ .command('doctor')
50
+ .description('Run health checks and diagnostics')
51
+ .option('--fix', 'Auto-fix fixable issues')
52
+ .option('--report', 'Upload report to GitHub Gist')
53
+ .option('--json', 'Output JSON format')
54
+ .option('--check-only', 'CI mode (exit 1 on failures)')
55
+ .action((0, errors_1.withErrorHandling)(async (options) => {
56
+ await (0, commands_1.doctorCommand)(options);
57
+ }));
58
+ /**
59
+ * Scout command (Story 4)
60
+ */
61
+ program
62
+ .command('scout')
63
+ .description('Analyze project structure and gather context')
64
+ .option('-o, --output <path>', 'Output path for context JSON')
65
+ .action((0, errors_1.withErrorHandling)(async (options) => {
66
+ await (0, commands_1.scoutCommand)(options);
67
+ }));
68
+ /**
69
+ * Brainstorm command (Story 5)
70
+ */
71
+ program
72
+ .command('brainstorm')
73
+ .description('Generate solution approaches with trade-off analysis')
74
+ .option('-o, --output <path>', 'Output path for approaches JSON')
75
+ .action((0, errors_1.withErrorHandling)(async (options) => {
76
+ await (0, commands_1.brainstormCommand)(options);
77
+ }));
45
78
  // Default action (no subcommand)
46
79
  program.action(() => {
47
80
  (0, commands_1.helpCommand)();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA;;;GAGG;;AAEH,yCAAoC;AACpC,yCAAkF;AAClF,mDAAyD;AACzD,2CAAgE;AAEhE,2CAA2C;AAC3C,IAAI,CAAC;IACH,IAAA,gCAAmB,GAAE,CAAC;AACxB,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,IAAA,oBAAW,EAAC,KAAK,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,mBAAmB;AACnB,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,iDAAiD,CAAC;KAC9D,OAAO,CAAC,IAAA,qBAAU,GAAE,EAAE,eAAe,EAAE,wBAAwB,CAAC;KAChE,UAAU,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;AAExD,oBAAoB;AAEpB;;GAEG;AACH,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,sBAAW,CAAC,CAAC;AAEvB;;GAEG;AACH,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;KACjD,MAAM,CAAC,WAAW,EAAE,mCAAmC,CAAC;KACxD,MAAM,CAAC,IAAA,0BAAiB,EAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAC1C,MAAM,IAAA,sBAAW,GAAE,CAAC;AACtB,CAAC,CAAC,CAAC,CAAC;AAEN,iCAAiC;AACjC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;IAClB,IAAA,sBAAW,GAAE,CAAC;AAChB,CAAC,CAAC,CAAC;AAEH,+BAA+B;AAC/B,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,oBAAW,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA;;;GAGG;;AAEH,yCAAoC;AACpC,yCAAkI;AAClI,mDAAyD;AACzD,2CAAgE;AAEhE,2CAA2C;AAC3C,IAAI,CAAC;IACH,IAAA,gCAAmB,GAAE,CAAC;AACxB,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,IAAA,oBAAW,EAAC,KAAK,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,mBAAmB;AACnB,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,iDAAiD,CAAC;KAC9D,OAAO,CAAC,IAAA,qBAAU,GAAE,EAAE,eAAe,EAAE,wBAAwB,CAAC;KAChE,UAAU,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;AAExD,oBAAoB;AAEpB;;GAEG;AACH,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,sBAAW,CAAC,CAAC;AAEvB;;GAEG;AACH,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;KACjD,MAAM,CAAC,WAAW,EAAE,mCAAmC,CAAC;KACxD,MAAM,CAAC,IAAA,0BAAiB,EAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAC1C,MAAM,IAAA,sBAAW,GAAE,CAAC;AACtB,CAAC,CAAC,CAAC,CAAC;AAEN;;GAEG;AACH,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,OAAO,EAAE,yBAAyB,CAAC;KAC1C,MAAM,CAAC,UAAU,EAAE,8BAA8B,CAAC;KAClD,MAAM,CAAC,QAAQ,EAAE,oBAAoB,CAAC;KACtC,MAAM,CAAC,cAAc,EAAE,8BAA8B,CAAC;KACtD,MAAM,CAAC,IAAA,0BAAiB,EAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAC1C,MAAM,IAAA,wBAAa,EAAC,OAAO,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC,CAAC;AAEN;;GAEG;AACH,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,8CAA8C,CAAC;KAC3D,MAAM,CAAC,qBAAqB,EAAE,8BAA8B,CAAC;KAC7D,MAAM,CAAC,IAAA,0BAAiB,EAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAC1C,MAAM,IAAA,uBAAY,EAAC,OAAO,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC,CAAC;AAEN;;GAEG;AACH,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;KAChE,MAAM,CAAC,IAAA,0BAAiB,EAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAC1C,MAAM,IAAA,4BAAiB,EAAC,OAAO,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC,CAAC;AAEN,iCAAiC;AACjC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;IAClB,IAAA,sBAAW,GAAE,CAAC;AAChB,CAAC,CAAC,CAAC;AAEH,+BAA+B;AAC/B,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,oBAAW,CAAC,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Approaches validation utilities
3
+ * Validates approaches.json schema and content from brainstorm phase
4
+ */
5
+ /**
6
+ * Approach interface
7
+ */
8
+ export interface Approach {
9
+ name: string;
10
+ strategy: string;
11
+ technologies: string[];
12
+ pros: string[];
13
+ cons: string[];
14
+ effort: string;
15
+ }
16
+ /**
17
+ * Brainstorm context interface
18
+ */
19
+ export interface BrainstormContext {
20
+ requirement: string;
21
+ approaches: Approach[];
22
+ recommendation: string;
23
+ }
24
+ /**
25
+ * Validate individual approach structure
26
+ *
27
+ * @param approach - Approach object to validate
28
+ * @param index - Approach index for error messages
29
+ * @throws Error if approach structure is invalid
30
+ */
31
+ export declare function validateApproach(approach: unknown, index: number): Approach;
32
+ /**
33
+ * Validate approaches.json schema
34
+ *
35
+ * @param data - Unknown data to validate
36
+ * @returns Validated BrainstormContext
37
+ * @throws Error if schema is invalid
38
+ */
39
+ export declare function validateApproachesSchema(data: unknown): BrainstormContext;
40
+ //# sourceMappingURL=approaches-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approaches-validator.d.ts","sourceRoot":"","sources":["../../src/utils/approaches-validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAyD3E;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,CAwCzE"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ /**
3
+ * Approaches validation utilities
4
+ * Validates approaches.json schema and content from brainstorm phase
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.validateApproach = validateApproach;
8
+ exports.validateApproachesSchema = validateApproachesSchema;
9
+ /**
10
+ * Validate individual approach structure
11
+ *
12
+ * @param approach - Approach object to validate
13
+ * @param index - Approach index for error messages
14
+ * @throws Error if approach structure is invalid
15
+ */
16
+ function validateApproach(approach, index) {
17
+ if (!approach || typeof approach !== 'object') {
18
+ throw new Error(`Approach ${index + 1}: Must be an object`);
19
+ }
20
+ const app = approach;
21
+ // Validate name
22
+ if (!app.name || typeof app.name !== 'string' || app.name.trim().length === 0) {
23
+ throw new Error(`Approach ${index + 1}: Missing or invalid 'name' field`);
24
+ }
25
+ // Validate strategy
26
+ if (!app.strategy || typeof app.strategy !== 'string' || app.strategy.trim().length === 0) {
27
+ throw new Error(`Approach ${index + 1}: Missing or invalid 'strategy' field`);
28
+ }
29
+ // Validate technologies array
30
+ if (!Array.isArray(app.technologies) || app.technologies.length === 0) {
31
+ throw new Error(`Approach ${index + 1}: 'technologies' must be a non-empty array`);
32
+ }
33
+ if (!app.technologies.every((tech) => typeof tech === 'string' && tech.trim().length > 0)) {
34
+ throw new Error(`Approach ${index + 1}: All technologies must be non-empty strings`);
35
+ }
36
+ // Validate pros array
37
+ if (!Array.isArray(app.pros) || app.pros.length === 0) {
38
+ throw new Error(`Approach ${index + 1}: 'pros' must be a non-empty array`);
39
+ }
40
+ if (!app.pros.every((pro) => typeof pro === 'string' && pro.trim().length > 0)) {
41
+ throw new Error(`Approach ${index + 1}: All pros must be non-empty strings`);
42
+ }
43
+ // Validate cons array
44
+ if (!Array.isArray(app.cons) || app.cons.length === 0) {
45
+ throw new Error(`Approach ${index + 1}: 'cons' must be a non-empty array`);
46
+ }
47
+ if (!app.cons.every((con) => typeof con === 'string' && con.trim().length > 0)) {
48
+ throw new Error(`Approach ${index + 1}: All cons must be non-empty strings`);
49
+ }
50
+ // Validate effort
51
+ if (!app.effort || typeof app.effort !== 'string' || app.effort.trim().length === 0) {
52
+ throw new Error(`Approach ${index + 1}: Missing or invalid 'effort' field`);
53
+ }
54
+ return {
55
+ name: app.name,
56
+ strategy: app.strategy,
57
+ technologies: app.technologies,
58
+ pros: app.pros,
59
+ cons: app.cons,
60
+ effort: app.effort
61
+ };
62
+ }
63
+ /**
64
+ * Validate approaches.json schema
65
+ *
66
+ * @param data - Unknown data to validate
67
+ * @returns Validated BrainstormContext
68
+ * @throws Error if schema is invalid
69
+ */
70
+ function validateApproachesSchema(data) {
71
+ if (!data || typeof data !== 'object') {
72
+ throw new Error('Invalid approaches data: Must be an object');
73
+ }
74
+ const context = data;
75
+ // Validate requirement
76
+ if (!context.requirement || typeof context.requirement !== 'string' || context.requirement.trim().length === 0) {
77
+ throw new Error('Missing or invalid \'requirement\' field');
78
+ }
79
+ // Validate approaches array
80
+ if (!Array.isArray(context.approaches)) {
81
+ throw new Error('Missing or invalid \'approaches\' field: Must be an array');
82
+ }
83
+ if (context.approaches.length === 0) {
84
+ throw new Error('\'approaches\' array cannot be empty');
85
+ }
86
+ if (context.approaches.length < 2 || context.approaches.length > 3) {
87
+ throw new Error('Must have 2-3 approaches (got ' + context.approaches.length + ')');
88
+ }
89
+ // Validate each approach
90
+ const validatedApproaches = context.approaches.map((approach, index) => validateApproach(approach, index));
91
+ // Validate recommendation
92
+ if (!context.recommendation || typeof context.recommendation !== 'string' || context.recommendation.trim().length === 0) {
93
+ throw new Error('Missing or invalid \'recommendation\' field');
94
+ }
95
+ return {
96
+ requirement: context.requirement,
97
+ approaches: validatedApproaches,
98
+ recommendation: context.recommendation
99
+ };
100
+ }
101
+ //# sourceMappingURL=approaches-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approaches-validator.js","sourceRoot":"","sources":["../../src/utils/approaches-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Dependency analysis utilities
3
+ * Extracts dependencies from manifest files and infers tech stack
4
+ */
5
+ import { ProjectType } from './project-detector';
6
+ /**
7
+ * Extract dependencies from project manifest files
8
+ *
9
+ * @param projectRoot - Root directory of the project
10
+ * @param projectType - Detected project type
11
+ * @returns Record of dependency names to versions
12
+ */
13
+ export declare function analyzeDependencies(projectRoot: string, projectType: ProjectType): Promise<Record<string, string>>;
14
+ /**
15
+ * Infer tech stack from dependencies
16
+ * Uses pattern matching on dependency names to identify frameworks and tools
17
+ *
18
+ * @param dependencies - Dependency map from analyzeDependencies
19
+ * @param projectType - Detected project type
20
+ * @returns Array of detected technologies
21
+ */
22
+ export declare function inferTechStack(dependencies: Record<string, string>, projectType: ProjectType): string[];
23
+ /**
24
+ * Detect build tool from lock files
25
+ *
26
+ * @param projectRoot - Root directory of the project
27
+ * @param projectType - Detected project type
28
+ * @returns Detected build tool name
29
+ */
30
+ export declare function detectBuildTool(projectRoot: string, projectType: ProjectType): Promise<string>;
31
+ //# sourceMappingURL=dependency-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-analyzer.d.ts","sourceRoot":"","sources":["../../src/utils/dependency-analyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAYjC;AAoED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,WAAW,EAAE,WAAW,GACvB,MAAM,EAAE,CAyDV;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,MAAM,CAAC,CAqBjB"}