@prductr/carlos 1.0.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.
- package/LICENSE +21 -0
- package/README.md +165 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +157 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +21 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +43 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/market-fit/index.d.ts +13 -0
- package/dist/market-fit/index.d.ts.map +1 -0
- package/dist/market-fit/index.js +325 -0
- package/dist/market-fit/index.js.map +1 -0
- package/dist/product/index.d.ts +28 -0
- package/dist/product/index.d.ts.map +1 -0
- package/dist/product/index.js +258 -0
- package/dist/product/index.js.map +1 -0
- package/dist/roadmap/index.d.ts +13 -0
- package/dist/roadmap/index.d.ts.map +1 -0
- package/dist/roadmap/index.js +368 -0
- package/dist/roadmap/index.js.map +1 -0
- package/dist/technical/index.d.ts +13 -0
- package/dist/technical/index.d.ts.map +1 -0
- package/dist/technical/index.js +417 -0
- package/dist/technical/index.js.map +1 -0
- package/dist/types.d.ts +503 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +169 -0
- package/dist/types.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Technical - Technical debt audit and infrastructure assessment
|
|
3
|
+
* Evaluates code quality, architecture, testing, and security
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, existsSync, readdirSync, statSync, writeFileSync, mkdirSync } from "fs";
|
|
6
|
+
import { join } from "path";
|
|
7
|
+
/**
|
|
8
|
+
* Perform technical audit
|
|
9
|
+
*
|
|
10
|
+
* @param config - Carlos configuration
|
|
11
|
+
* @returns Technical audit with scores and debt items
|
|
12
|
+
*/
|
|
13
|
+
export async function auditTechnical(config) {
|
|
14
|
+
console.log("🔍 Performing technical audit...");
|
|
15
|
+
// Collect debt items
|
|
16
|
+
const debtItems = [];
|
|
17
|
+
// Audit different areas
|
|
18
|
+
debtItems.push(...auditCodeQuality(config));
|
|
19
|
+
debtItems.push(...auditArchitecture(config));
|
|
20
|
+
debtItems.push(...auditTesting(config));
|
|
21
|
+
debtItems.push(...auditDependencies(config));
|
|
22
|
+
debtItems.push(...auditSecurity(config));
|
|
23
|
+
debtItems.push(...auditDocumentation(config));
|
|
24
|
+
// Calculate scores
|
|
25
|
+
const codeQualityScore = calculateCodeQualityScore(config, debtItems);
|
|
26
|
+
const architectureScore = calculateArchitectureScore(config, debtItems);
|
|
27
|
+
const testCoverageScore = calculateTestCoverageScore(config, debtItems);
|
|
28
|
+
const securityScore = calculateSecurityScore(config, debtItems);
|
|
29
|
+
const overallHealth = Math.round((codeQualityScore + architectureScore + testCoverageScore + securityScore) /
|
|
30
|
+
4);
|
|
31
|
+
const recommendations = generateTechnicalRecommendations(debtItems, overallHealth);
|
|
32
|
+
const prioritizedActions = prioritizeActions(debtItems);
|
|
33
|
+
const audit = {
|
|
34
|
+
overallHealth,
|
|
35
|
+
debtItems,
|
|
36
|
+
architectureScore,
|
|
37
|
+
codeQualityScore,
|
|
38
|
+
testCoverageScore,
|
|
39
|
+
securityScore,
|
|
40
|
+
recommendations,
|
|
41
|
+
prioritizedActions,
|
|
42
|
+
};
|
|
43
|
+
// Write audit file
|
|
44
|
+
writeTechnicalAuditFile(config, audit);
|
|
45
|
+
return audit;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Audit code quality
|
|
49
|
+
*/
|
|
50
|
+
function auditCodeQuality(config) {
|
|
51
|
+
const items = [];
|
|
52
|
+
// Check for linter config
|
|
53
|
+
const linterConfigs = [".eslintrc", ".eslintrc.json", "eslint.config.js"];
|
|
54
|
+
const hasLinter = linterConfigs.some((f) => existsSync(join(config.projectRoot, f)));
|
|
55
|
+
if (!hasLinter) {
|
|
56
|
+
items.push({
|
|
57
|
+
id: "debt-001",
|
|
58
|
+
category: "code-quality",
|
|
59
|
+
severity: "medium",
|
|
60
|
+
description: "No linter configuration found",
|
|
61
|
+
impact: "Inconsistent code style and potential bugs",
|
|
62
|
+
effort: "1-2 days",
|
|
63
|
+
recommendation: "Add ESLint with recommended config",
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// Check for formatter
|
|
67
|
+
const hasFormatter = existsSync(join(config.projectRoot, ".prettierrc")) ||
|
|
68
|
+
existsSync(join(config.projectRoot, "prettier.config.js"));
|
|
69
|
+
if (!hasFormatter) {
|
|
70
|
+
items.push({
|
|
71
|
+
id: "debt-002",
|
|
72
|
+
category: "code-quality",
|
|
73
|
+
severity: "low",
|
|
74
|
+
description: "No code formatter configured",
|
|
75
|
+
impact: "Inconsistent code formatting",
|
|
76
|
+
effort: "1 day",
|
|
77
|
+
recommendation: "Add Prettier for automatic formatting",
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return items;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Audit architecture
|
|
84
|
+
*/
|
|
85
|
+
function auditArchitecture(config) {
|
|
86
|
+
const items = [];
|
|
87
|
+
// Check for TypeScript
|
|
88
|
+
const hasTypeScript = existsSync(join(config.projectRoot, "tsconfig.json"));
|
|
89
|
+
if (!hasTypeScript) {
|
|
90
|
+
items.push({
|
|
91
|
+
id: "debt-003",
|
|
92
|
+
category: "architecture",
|
|
93
|
+
severity: "high",
|
|
94
|
+
description: "Project not using TypeScript",
|
|
95
|
+
impact: "Lack of type safety increases bug risk",
|
|
96
|
+
effort: "2-4 weeks",
|
|
97
|
+
recommendation: "Migrate to TypeScript for better type safety",
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
// Check for monorepo
|
|
101
|
+
const isMonorepo = existsSync(join(config.projectRoot, "turbo.json")) ||
|
|
102
|
+
existsSync(join(config.projectRoot, "pnpm-workspace.yaml"));
|
|
103
|
+
if (!isMonorepo && existsSync(join(config.projectRoot, "packages"))) {
|
|
104
|
+
items.push({
|
|
105
|
+
id: "debt-004",
|
|
106
|
+
category: "architecture",
|
|
107
|
+
severity: "medium",
|
|
108
|
+
description: "Monorepo structure without build orchestration",
|
|
109
|
+
impact: "Inefficient builds and dependency management",
|
|
110
|
+
effort: "1 week",
|
|
111
|
+
recommendation: "Add Turborepo for build orchestration",
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
return items;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Audit testing
|
|
118
|
+
*/
|
|
119
|
+
function auditTesting(config) {
|
|
120
|
+
const items = [];
|
|
121
|
+
// Check for test framework
|
|
122
|
+
const pkgPath = join(config.projectRoot, "package.json");
|
|
123
|
+
let hasTests = false;
|
|
124
|
+
if (existsSync(pkgPath)) {
|
|
125
|
+
try {
|
|
126
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
|
|
127
|
+
const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
128
|
+
hasTests = Boolean(allDeps.vitest || allDeps.jest || allDeps.mocha || allDeps.ava);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// malformed package.json — treat as no test framework
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (!hasTests) {
|
|
135
|
+
items.push({
|
|
136
|
+
id: "debt-005",
|
|
137
|
+
category: "testing",
|
|
138
|
+
severity: "critical",
|
|
139
|
+
description: "No testing framework configured",
|
|
140
|
+
impact: "No automated testing - high bug risk",
|
|
141
|
+
effort: "1-2 weeks",
|
|
142
|
+
recommendation: "Add Vitest or Jest for comprehensive testing",
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
// Check for test files
|
|
146
|
+
const hasTestFiles = findTestFiles(config.projectRoot).length > 0;
|
|
147
|
+
if (hasTests && !hasTestFiles) {
|
|
148
|
+
items.push({
|
|
149
|
+
id: "debt-006",
|
|
150
|
+
category: "testing",
|
|
151
|
+
severity: "high",
|
|
152
|
+
description: "Test framework present but no test files",
|
|
153
|
+
impact: "Zero test coverage",
|
|
154
|
+
effort: "2-4 weeks",
|
|
155
|
+
recommendation: "Write tests for critical functionality",
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
return items;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Find test files in project
|
|
162
|
+
*/
|
|
163
|
+
function findTestFiles(dir) {
|
|
164
|
+
const testFiles = [];
|
|
165
|
+
const excludeDirs = ["node_modules", "dist", ".next", ".git"];
|
|
166
|
+
try {
|
|
167
|
+
const entries = readdirSync(dir);
|
|
168
|
+
for (const entry of entries) {
|
|
169
|
+
if (excludeDirs.includes(entry))
|
|
170
|
+
continue;
|
|
171
|
+
const fullPath = join(dir, entry);
|
|
172
|
+
const stat = statSync(fullPath);
|
|
173
|
+
if (stat.isDirectory()) {
|
|
174
|
+
testFiles.push(...findTestFiles(fullPath));
|
|
175
|
+
}
|
|
176
|
+
else if (entry.includes(".test.") ||
|
|
177
|
+
entry.includes(".spec.") ||
|
|
178
|
+
entry.endsWith("_test.ts") ||
|
|
179
|
+
entry.endsWith("_test.js")) {
|
|
180
|
+
testFiles.push(fullPath);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
// Ignore permission errors
|
|
186
|
+
}
|
|
187
|
+
return testFiles;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Audit dependencies
|
|
191
|
+
*/
|
|
192
|
+
function auditDependencies(config) {
|
|
193
|
+
const items = [];
|
|
194
|
+
const pkgPath = join(config.projectRoot, "package.json");
|
|
195
|
+
if (!existsSync(pkgPath))
|
|
196
|
+
return items;
|
|
197
|
+
let pkg;
|
|
198
|
+
try {
|
|
199
|
+
pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
return items; // malformed package.json — skip dependency audit
|
|
203
|
+
}
|
|
204
|
+
// Check for lock file
|
|
205
|
+
const hasLockFile = existsSync(join(config.projectRoot, "package-lock.json")) ||
|
|
206
|
+
existsSync(join(config.projectRoot, "yarn.lock")) ||
|
|
207
|
+
existsSync(join(config.projectRoot, "pnpm-lock.yaml"));
|
|
208
|
+
if (!hasLockFile) {
|
|
209
|
+
items.push({
|
|
210
|
+
id: "debt-007",
|
|
211
|
+
category: "dependencies",
|
|
212
|
+
severity: "high",
|
|
213
|
+
description: "No package lock file",
|
|
214
|
+
impact: "Inconsistent dependency versions across environments",
|
|
215
|
+
effort: "1 hour",
|
|
216
|
+
recommendation: "Generate and commit lock file",
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
return items;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Audit security
|
|
223
|
+
*/
|
|
224
|
+
function auditSecurity(config) {
|
|
225
|
+
const items = [];
|
|
226
|
+
// Check for environment file in git
|
|
227
|
+
const gitignorePath = join(config.projectRoot, ".gitignore");
|
|
228
|
+
if (existsSync(gitignorePath)) {
|
|
229
|
+
const gitignore = readFileSync(gitignorePath, "utf8");
|
|
230
|
+
if (!gitignore.includes(".env")) {
|
|
231
|
+
items.push({
|
|
232
|
+
id: "debt-008",
|
|
233
|
+
category: "security",
|
|
234
|
+
severity: "critical",
|
|
235
|
+
description: ".env not in .gitignore",
|
|
236
|
+
impact: "Risk of exposing secrets in version control",
|
|
237
|
+
effort: "5 minutes",
|
|
238
|
+
recommendation: "Add .env* to .gitignore immediately",
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return items;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Audit documentation
|
|
246
|
+
*/
|
|
247
|
+
function auditDocumentation(config) {
|
|
248
|
+
const items = [];
|
|
249
|
+
// Check for README
|
|
250
|
+
const hasREADME = existsSync(join(config.projectRoot, "README.md"));
|
|
251
|
+
if (!hasREADME) {
|
|
252
|
+
items.push({
|
|
253
|
+
id: "debt-009",
|
|
254
|
+
category: "documentation",
|
|
255
|
+
severity: "medium",
|
|
256
|
+
description: "No README.md file",
|
|
257
|
+
impact: "Difficult for new contributors to get started",
|
|
258
|
+
effort: "1 day",
|
|
259
|
+
recommendation: "Create comprehensive README with setup instructions",
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
return items;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Calculate code quality score
|
|
266
|
+
*/
|
|
267
|
+
function calculateCodeQualityScore(config, debtItems) {
|
|
268
|
+
let score = 100;
|
|
269
|
+
const qualityIssues = debtItems.filter((d) => d.category === "code-quality");
|
|
270
|
+
for (const issue of qualityIssues) {
|
|
271
|
+
if (issue.severity === "critical")
|
|
272
|
+
score -= 30;
|
|
273
|
+
else if (issue.severity === "high")
|
|
274
|
+
score -= 20;
|
|
275
|
+
else if (issue.severity === "medium")
|
|
276
|
+
score -= 10;
|
|
277
|
+
else
|
|
278
|
+
score -= 5;
|
|
279
|
+
}
|
|
280
|
+
return Math.max(score, 0);
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Calculate architecture score
|
|
284
|
+
*/
|
|
285
|
+
function calculateArchitectureScore(config, debtItems) {
|
|
286
|
+
let score = 100;
|
|
287
|
+
const archIssues = debtItems.filter((d) => d.category === "architecture");
|
|
288
|
+
for (const issue of archIssues) {
|
|
289
|
+
if (issue.severity === "critical")
|
|
290
|
+
score -= 30;
|
|
291
|
+
else if (issue.severity === "high")
|
|
292
|
+
score -= 20;
|
|
293
|
+
else if (issue.severity === "medium")
|
|
294
|
+
score -= 10;
|
|
295
|
+
else
|
|
296
|
+
score -= 5;
|
|
297
|
+
}
|
|
298
|
+
return Math.max(score, 0);
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Calculate test coverage score
|
|
302
|
+
*/
|
|
303
|
+
function calculateTestCoverageScore(config, debtItems) {
|
|
304
|
+
let score = 100;
|
|
305
|
+
const testIssues = debtItems.filter((d) => d.category === "testing");
|
|
306
|
+
for (const issue of testIssues) {
|
|
307
|
+
if (issue.severity === "critical")
|
|
308
|
+
score -= 40;
|
|
309
|
+
else if (issue.severity === "high")
|
|
310
|
+
score -= 25;
|
|
311
|
+
else if (issue.severity === "medium")
|
|
312
|
+
score -= 15;
|
|
313
|
+
else
|
|
314
|
+
score -= 5;
|
|
315
|
+
}
|
|
316
|
+
return Math.max(score, 0);
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Calculate security score
|
|
320
|
+
*/
|
|
321
|
+
function calculateSecurityScore(config, debtItems) {
|
|
322
|
+
let score = 100;
|
|
323
|
+
const securityIssues = debtItems.filter((d) => d.category === "security");
|
|
324
|
+
for (const issue of securityIssues) {
|
|
325
|
+
if (issue.severity === "critical")
|
|
326
|
+
score -= 50;
|
|
327
|
+
else if (issue.severity === "high")
|
|
328
|
+
score -= 30;
|
|
329
|
+
else if (issue.severity === "medium")
|
|
330
|
+
score -= 15;
|
|
331
|
+
else
|
|
332
|
+
score -= 5;
|
|
333
|
+
}
|
|
334
|
+
return Math.max(score, 0);
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Generate recommendations
|
|
338
|
+
*/
|
|
339
|
+
function generateTechnicalRecommendations(debtItems, overallHealth) {
|
|
340
|
+
const recommendations = [];
|
|
341
|
+
if (overallHealth < 50) {
|
|
342
|
+
recommendations.push("🚨 Critical: Address technical debt before adding new features");
|
|
343
|
+
}
|
|
344
|
+
const criticalItems = debtItems.filter((d) => d.severity === "critical");
|
|
345
|
+
if (criticalItems.length > 0) {
|
|
346
|
+
recommendations.push(`Immediately address ${criticalItems.length} critical technical debt items`);
|
|
347
|
+
}
|
|
348
|
+
const testingIssues = debtItems.filter((d) => d.category === "testing");
|
|
349
|
+
if (testingIssues.length > 0) {
|
|
350
|
+
recommendations.push("Prioritize testing infrastructure - foundation for quality");
|
|
351
|
+
}
|
|
352
|
+
if (overallHealth >= 80) {
|
|
353
|
+
recommendations.push("✅ Strong technical foundation - maintain quality as you scale");
|
|
354
|
+
}
|
|
355
|
+
return recommendations;
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Prioritize actions
|
|
359
|
+
*/
|
|
360
|
+
function prioritizeActions(debtItems) {
|
|
361
|
+
// Sort by severity: critical > high > medium > low
|
|
362
|
+
const severityOrder = { critical: 0, high: 1, medium: 2, low: 3 };
|
|
363
|
+
const sorted = [...debtItems].sort((a, b) => severityOrder[a.severity] - severityOrder[b.severity]);
|
|
364
|
+
return sorted.slice(0, 5).map((item) => item.recommendation);
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Write technical audit file
|
|
368
|
+
*/
|
|
369
|
+
function writeTechnicalAuditFile(config, audit) {
|
|
370
|
+
const outputDir = join(config.projectRoot, config.outputDir);
|
|
371
|
+
if (!existsSync(outputDir)) {
|
|
372
|
+
mkdirSync(outputDir, { recursive: true });
|
|
373
|
+
}
|
|
374
|
+
const outputPath = join(outputDir, "TECHNICAL_AUDIT.md");
|
|
375
|
+
const content = `# Technical Audit Report
|
|
376
|
+
|
|
377
|
+
## Overall Health Score
|
|
378
|
+
**${audit.overallHealth}/100** ${audit.overallHealth >= 80 ? "🟢" : audit.overallHealth >= 50 ? "🟡" : "🔴"}
|
|
379
|
+
|
|
380
|
+
## Category Scores
|
|
381
|
+
|
|
382
|
+
| Category | Score | Status |
|
|
383
|
+
|----------|-------|--------|
|
|
384
|
+
| Code Quality | ${audit.codeQualityScore}/100 | ${audit.codeQualityScore >= 70 ? "✅" : "⚠️"} |
|
|
385
|
+
| Architecture | ${audit.architectureScore}/100 | ${audit.architectureScore >= 70 ? "✅" : "⚠️"} |
|
|
386
|
+
| Test Coverage | ${audit.testCoverageScore}/100 | ${audit.testCoverageScore >= 70 ? "✅" : "⚠️"} |
|
|
387
|
+
| Security | ${audit.securityScore}/100 | ${audit.securityScore >= 70 ? "✅" : "⚠️"} |
|
|
388
|
+
|
|
389
|
+
## Technical Debt Items (${audit.debtItems.length})
|
|
390
|
+
|
|
391
|
+
${audit.debtItems
|
|
392
|
+
.map((item) => `### ${item.id}: ${item.description}
|
|
393
|
+
**Category:** ${item.category} | **Severity:** ${item.severity}
|
|
394
|
+
|
|
395
|
+
**Impact:** ${item.impact}
|
|
396
|
+
|
|
397
|
+
**Effort:** ${item.effort}
|
|
398
|
+
|
|
399
|
+
**Recommendation:** ${item.recommendation}
|
|
400
|
+
`)
|
|
401
|
+
.join("\n")}
|
|
402
|
+
|
|
403
|
+
## Recommendations
|
|
404
|
+
|
|
405
|
+
${audit.recommendations.map((r, i) => `${i + 1}. ${r}`).join("\n")}
|
|
406
|
+
|
|
407
|
+
## Prioritized Actions
|
|
408
|
+
|
|
409
|
+
${audit.prioritizedActions.map((a, i) => `${i + 1}. ${a}`).join("\n")}
|
|
410
|
+
|
|
411
|
+
---
|
|
412
|
+
Generated: ${new Date().toISOString()}
|
|
413
|
+
`;
|
|
414
|
+
writeFileSync(outputPath, content);
|
|
415
|
+
console.log(`✅ Wrote technical audit to ${outputPath}`);
|
|
416
|
+
}
|
|
417
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/technical/index.ts"],"names":[],"mappings":"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"}
|