@vyuhlabs/dxkit 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 (149) hide show
  1. package/dist/cli.d.ts +2 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +173 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/codebase-scanner.d.ts +33 -0
  6. package/dist/codebase-scanner.d.ts.map +1 -0
  7. package/dist/codebase-scanner.js +497 -0
  8. package/dist/codebase-scanner.js.map +1 -0
  9. package/dist/constants.d.ts +17 -0
  10. package/dist/constants.d.ts.map +1 -0
  11. package/dist/constants.js +80 -0
  12. package/dist/constants.js.map +1 -0
  13. package/dist/detect.d.ts +3 -0
  14. package/dist/detect.d.ts.map +1 -0
  15. package/dist/detect.js +264 -0
  16. package/dist/detect.js.map +1 -0
  17. package/dist/doctor.d.ts +2 -0
  18. package/dist/doctor.d.ts.map +1 -0
  19. package/dist/doctor.js +157 -0
  20. package/dist/doctor.js.map +1 -0
  21. package/dist/files.d.ts +17 -0
  22. package/dist/files.d.ts.map +1 -0
  23. package/dist/files.js +99 -0
  24. package/dist/files.js.map +1 -0
  25. package/dist/generator.d.ts +10 -0
  26. package/dist/generator.d.ts.map +1 -0
  27. package/dist/generator.js +405 -0
  28. package/dist/generator.js.map +1 -0
  29. package/dist/index.d.ts +3 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +9 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/logger.d.ts +9 -0
  34. package/dist/logger.d.ts.map +1 -0
  35. package/dist/logger.js +51 -0
  36. package/dist/logger.js.map +1 -0
  37. package/dist/prompts.d.ts +10 -0
  38. package/dist/prompts.d.ts.map +1 -0
  39. package/dist/prompts.js +125 -0
  40. package/dist/prompts.js.map +1 -0
  41. package/dist/template-engine.d.ts +22 -0
  42. package/dist/template-engine.d.ts.map +1 -0
  43. package/dist/template-engine.js +63 -0
  44. package/dist/template-engine.js.map +1 -0
  45. package/dist/types.d.ts +68 -0
  46. package/dist/types.d.ts.map +1 -0
  47. package/dist/types.js +3 -0
  48. package/dist/types.js.map +1 -0
  49. package/dist/update.d.ts +2 -0
  50. package/dist/update.d.ts.map +1 -0
  51. package/dist/update.js +97 -0
  52. package/dist/update.js.map +1 -0
  53. package/package.json +43 -0
  54. package/templates/.ai/README.md +117 -0
  55. package/templates/.ai/prompts/execution-prompt.md +9 -0
  56. package/templates/.ai/prompts/planning-prompt.md +18 -0
  57. package/templates/.ai/prompts/session-end-template.md +182 -0
  58. package/templates/.ai/prompts/session-end.md +132 -0
  59. package/templates/.ai/prompts/session-start.md +109 -0
  60. package/templates/.ai/prompts/step-by-step.md +113 -0
  61. package/templates/.ai/sessions/.gitkeep +0 -0
  62. package/templates/.ai/templates/session-checkpoint-template.md +97 -0
  63. package/templates/.claude/agents/knowledge-bot.md +62 -0
  64. package/templates/.claude/agents/onboarding.md +61 -0
  65. package/templates/.claude/agents/quality-reviewer.md +85 -0
  66. package/templates/.claude/agents-available/code-reviewer.md +29 -0
  67. package/templates/.claude/agents-available/codebase-explorer.md +99 -0
  68. package/templates/.claude/agents-available/debugger.md +29 -0
  69. package/templates/.claude/agents-available/knowledge-bot.md +62 -0
  70. package/templates/.claude/agents-available/test-writer.md +34 -0
  71. package/templates/.claude/commands/ask.md +7 -0
  72. package/templates/.claude/commands/check.md.template +55 -0
  73. package/templates/.claude/commands/doctor.md +21 -0
  74. package/templates/.claude/commands/enable-agent.md +12 -0
  75. package/templates/.claude/commands/explore-codebase.md +12 -0
  76. package/templates/.claude/commands/fix-issue.md +12 -0
  77. package/templates/.claude/commands/fix.md.template +32 -0
  78. package/templates/.claude/commands/help.md +36 -0
  79. package/templates/.claude/commands/learn.md +48 -0
  80. package/templates/.claude/commands/onboarding.md +21 -0
  81. package/templates/.claude/commands/quality.md.template +42 -0
  82. package/templates/.claude/commands/session-end.md +40 -0
  83. package/templates/.claude/commands/session-start.md +30 -0
  84. package/templates/.claude/commands/setup-hooks.md +60 -0
  85. package/templates/.claude/commands/test.md.template +49 -0
  86. package/templates/.claude/rules/csharp.md +18 -0
  87. package/templates/.claude/rules/go.md +16 -0
  88. package/templates/.claude/rules/nextjs.md +17 -0
  89. package/templates/.claude/rules/python.md +19 -0
  90. package/templates/.claude/rules/rust.md +14 -0
  91. package/templates/.claude/skills/build/SKILL.md.template +98 -0
  92. package/templates/.claude/skills/deploy/SKILL.md.template +131 -0
  93. package/templates/.claude/skills/deploy/references/gotchas.md +5 -0
  94. package/templates/.claude/skills/doctor/SKILL.md +54 -0
  95. package/templates/.claude/skills/gcloud/SKILL.md +61 -0
  96. package/templates/.claude/skills/gcloud/references/gotchas.md +5 -0
  97. package/templates/.claude/skills/learned/SKILL.md +55 -0
  98. package/templates/.claude/skills/learned/references/conventions.md +11 -0
  99. package/templates/.claude/skills/learned/references/deny-recommendations.md +18 -0
  100. package/templates/.claude/skills/learned/references/gotchas.md +11 -0
  101. package/templates/.claude/skills/pulumi/SKILL.md +67 -0
  102. package/templates/.claude/skills/quality/SKILL.md.template +108 -0
  103. package/templates/.claude/skills/quality/references/gotchas.md +5 -0
  104. package/templates/.claude/skills/review/SKILL.md.template +73 -0
  105. package/templates/.claude/skills/scaffold/SKILL.md.template +123 -0
  106. package/templates/.claude/skills/secrets/SKILL.md +45 -0
  107. package/templates/.claude/skills/session/SKILL.md +43 -0
  108. package/templates/.claude/skills/test/SKILL.md.template +109 -0
  109. package/templates/.claude/skills/test/references/gotchas.md +5 -0
  110. package/templates/.devcontainer/Dockerfile.dev.template +89 -0
  111. package/templates/.devcontainer/devcontainer.json.template +184 -0
  112. package/templates/.devcontainer/docker-compose.yml.template +105 -0
  113. package/templates/.devcontainer/init-scripts/01-init.sql.template +12 -0
  114. package/templates/.devcontainer/post-create.sh.template +298 -0
  115. package/templates/.github/workflows/ci.yml.template +399 -0
  116. package/templates/.github/workflows/quality.yml.template +376 -0
  117. package/templates/.pre-commit-config.yaml.template +106 -0
  118. package/templates/.project/config/edit_config.py +275 -0
  119. package/templates/.project/config/project_config.py +894 -0
  120. package/templates/.project/scripts/codegen/generate-all.sh +20 -0
  121. package/templates/.project/scripts/codegen/validate-all.sh +17 -0
  122. package/templates/.project/scripts/docs/generate-all.sh +30 -0
  123. package/templates/.project/scripts/docs/serve.sh +20 -0
  124. package/templates/.project/scripts/quality/fix-all.sh +138 -0
  125. package/templates/.project/scripts/quality/lint-go.sh +34 -0
  126. package/templates/.project/scripts/quality/lint-python.sh +54 -0
  127. package/templates/.project/scripts/quality/run-all.sh +497 -0
  128. package/templates/.project/scripts/session/commit.sh +70 -0
  129. package/templates/.project/scripts/session/create-pr.sh +165 -0
  130. package/templates/.project/scripts/session/end.sh +207 -0
  131. package/templates/.project/scripts/session/start.sh +233 -0
  132. package/templates/.project/scripts/setup/doctor.sh +404 -0
  133. package/templates/.project/scripts/setup/interactive-setup.sh +581 -0
  134. package/templates/.project/scripts/sync/sync-template.sh +328 -0
  135. package/templates/.project/scripts/test/run-all.sh +179 -0
  136. package/templates/.project/scripts/test/run-quick.sh +25 -0
  137. package/templates/CLAUDE.md.template +228 -0
  138. package/templates/Makefile +514 -0
  139. package/templates/config/versions.yaml +57 -0
  140. package/templates/configs/go/.golangci.yml.template +172 -0
  141. package/templates/configs/go/go.mod.template +15 -0
  142. package/templates/configs/node/package.json.template +67 -0
  143. package/templates/configs/node/tsconfig.json.template +53 -0
  144. package/templates/configs/python/pyproject.toml.template +92 -0
  145. package/templates/configs/python/pytest.ini.template +64 -0
  146. package/templates/configs/python/ruff.toml.template +79 -0
  147. package/templates/configs/rust/Cargo.toml.template +51 -0
  148. package/templates/configs/shared/.editorconfig +67 -0
  149. package/templates/scripts/validate-templates.sh +449 -0
@@ -0,0 +1,497 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.scanCodebase = scanCodebase;
37
+ exports.renderCodebaseSkill = renderCodebaseSkill;
38
+ exports.renderArchitectureRef = renderArchitectureRef;
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const IGNORE_DIRS = new Set([
42
+ 'node_modules', 'vendor', '.venv', 'venv', 'target', 'bin', 'obj',
43
+ '.git', '.next', '__pycache__', 'dist', 'build', '.tox', '.eggs',
44
+ 'htmlcov', 'coverage', '.mypy_cache', '.pytest_cache', '.ruff_cache',
45
+ ]);
46
+ const BINARY_EXTENSIONS = new Set([
47
+ '.png', '.jpg', '.jpeg', '.gif', '.ico', '.webp', '.svg',
48
+ '.woff', '.woff2', '.ttf', '.eot',
49
+ '.pdf', '.zip', '.tar', '.gz', '.br',
50
+ '.exe', '.dll', '.so', '.dylib',
51
+ '.lock', '.sum',
52
+ ]);
53
+ const MAX_FILE_SIZE = 100 * 1024; // 100KB
54
+ // --- File Walking ---
55
+ function walkFiles(cwd, callback, maxDepth = 5) {
56
+ function walk(dir, depth) {
57
+ if (depth > maxDepth)
58
+ return;
59
+ let entries;
60
+ try {
61
+ entries = fs.readdirSync(dir, { withFileTypes: true });
62
+ }
63
+ catch {
64
+ return;
65
+ }
66
+ for (const entry of entries) {
67
+ if (entry.name.startsWith('.') && entry.name !== '.env.example')
68
+ continue;
69
+ const full = path.join(dir, entry.name);
70
+ const rel = path.relative(cwd, full);
71
+ if (entry.isDirectory()) {
72
+ if (!IGNORE_DIRS.has(entry.name))
73
+ walk(full, depth + 1);
74
+ }
75
+ else if (entry.isFile()) {
76
+ const ext = path.extname(entry.name).toLowerCase();
77
+ if (BINARY_EXTENSIONS.has(ext))
78
+ continue;
79
+ try {
80
+ const stat = fs.statSync(full);
81
+ if (stat.size > MAX_FILE_SIZE)
82
+ continue;
83
+ const content = fs.readFileSync(full, 'utf-8');
84
+ callback(rel, content);
85
+ }
86
+ catch { /* skip unreadable */ }
87
+ }
88
+ }
89
+ }
90
+ walk(cwd, 0);
91
+ }
92
+ // --- Entry Points ---
93
+ const ENTRY_POINT_FILES = {
94
+ 'main.go': 'Go entry point',
95
+ 'app.py': 'Python application',
96
+ 'main.py': 'Python entry point',
97
+ 'manage.py': 'Django management',
98
+ 'index.ts': 'Node.js entry (TypeScript)',
99
+ 'index.js': 'Node.js entry',
100
+ 'server.ts': 'Node.js server (TypeScript)',
101
+ 'server.js': 'Node.js server',
102
+ 'Program.cs': 'C# entry point',
103
+ 'Startup.cs': 'C# ASP.NET startup',
104
+ 'main.rs': 'Rust entry point',
105
+ };
106
+ function findEntryPoints(cwd) {
107
+ const results = [];
108
+ const seen = new Set();
109
+ walkFiles(cwd, (rel, content) => {
110
+ const basename = path.basename(rel);
111
+ // Known entry point filenames
112
+ if (ENTRY_POINT_FILES[basename] && !seen.has(rel)) {
113
+ results.push({ file: rel, type: ENTRY_POINT_FILES[basename] });
114
+ seen.add(rel);
115
+ }
116
+ // Python __main__ pattern
117
+ if (basename.endsWith('.py') && content.includes("__name__") && content.includes("__main__") && !seen.has(rel)) {
118
+ results.push({ file: rel, type: 'Python __main__ entry' });
119
+ seen.add(rel);
120
+ }
121
+ // Go func main pattern (for non-main.go files)
122
+ if (basename.endsWith('.go') && /^func\s+main\s*\(/m.test(content) && basename !== 'main.go' && !seen.has(rel)) {
123
+ results.push({ file: rel, type: 'Go main function' });
124
+ seen.add(rel);
125
+ }
126
+ }, 3); // shallow depth for entry points
127
+ // Check package.json main field
128
+ const pkgPath = path.join(cwd, 'package.json');
129
+ if (fs.existsSync(pkgPath)) {
130
+ try {
131
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
132
+ if (pkg.main && !seen.has(pkg.main)) {
133
+ results.push({ file: pkg.main, type: 'package.json main' });
134
+ }
135
+ }
136
+ catch { /* ignore */ }
137
+ }
138
+ return results;
139
+ }
140
+ // --- API Routes ---
141
+ const ROUTE_PATTERNS = [
142
+ // Python FastAPI/Flask
143
+ { lang: 'python', regex: /@(?:app|router)\.(get|post|put|delete|patch)\s*\(\s*['"]([^'"]+)/gi, methodGroup: 1, pathGroup: 2 },
144
+ // Express/Node
145
+ { lang: 'node', regex: /(?:app|router)\.(get|post|put|delete|patch)\s*\(\s*['"]([^'"]+)/gi, methodGroup: 1, pathGroup: 2 },
146
+ // Go
147
+ { lang: 'go', regex: /(?:HandleFunc|Handle)\s*\(\s*"([^"]+)"/g, methodGroup: -1, pathGroup: 1 },
148
+ // C# attributes
149
+ { lang: 'csharp', regex: /\[Http(Get|Post|Put|Delete|Patch)(?:\s*\("([^"]*)"\))?\]/g, methodGroup: 1, pathGroup: 2 },
150
+ ];
151
+ function isSourceFile(rel) {
152
+ // Exclude test files, docs, and generated files from API route detection
153
+ const lower = rel.toLowerCase();
154
+ if (lower.endsWith('_test.go') || lower.includes('test_') || lower.includes('/tests/'))
155
+ return false;
156
+ if (lower.endsWith('.test.ts') || lower.endsWith('.test.js') || lower.endsWith('.spec.ts') || lower.endsWith('.spec.js'))
157
+ return false;
158
+ if (lower.includes('/docs/') || lower.includes('/documentation/'))
159
+ return false;
160
+ if (lower.endsWith('.md') || lower.endsWith('.mdx') || lower.endsWith('.txt') || lower.endsWith('.rst'))
161
+ return false;
162
+ if (lower.includes('example') || lower.includes('sample') || lower.includes('fixture'))
163
+ return false;
164
+ return true;
165
+ }
166
+ function findApiRoutes(cwd) {
167
+ const results = [];
168
+ walkFiles(cwd, (rel, content) => {
169
+ if (!isSourceFile(rel))
170
+ return;
171
+ for (const pattern of ROUTE_PATTERNS) {
172
+ const regex = new RegExp(pattern.regex.source, pattern.regex.flags);
173
+ let match;
174
+ while ((match = regex.exec(content)) !== null) {
175
+ const method = pattern.methodGroup === -1 ? 'ANY' : (match[pattern.methodGroup] || 'GET').toUpperCase();
176
+ const routePath = match[pattern.pathGroup] || '/';
177
+ results.push({ method, path: routePath, file: rel });
178
+ }
179
+ }
180
+ // Next.js API routes (file-based)
181
+ if (rel.includes('app/api/') || rel.includes('pages/api/')) {
182
+ const routePath = '/' + rel
183
+ .replace(/^.*(?:app|pages)\//, '')
184
+ .replace(/\/route\.[tj]sx?$/, '')
185
+ .replace(/\/index\.[tj]sx?$/, '')
186
+ .replace(/\.[tj]sx?$/, '');
187
+ results.push({ method: 'ANY', path: routePath, file: rel });
188
+ }
189
+ });
190
+ return results.slice(0, 50); // cap at 50 to avoid bloat
191
+ }
192
+ // --- Directory Classification ---
193
+ const DIR_PURPOSES = {
194
+ 'src': 'Source code',
195
+ 'lib': 'Library code',
196
+ 'pkg': 'Packages',
197
+ 'internal': 'Internal packages (Go)',
198
+ 'cmd': 'CLI commands (Go)',
199
+ 'tests': 'Test files',
200
+ 'test': 'Test files',
201
+ '__tests__': 'Test files (Jest)',
202
+ 'spec': 'Test specifications',
203
+ 'docs': 'Documentation',
204
+ 'documentation': 'Documentation',
205
+ 'scripts': 'Utility scripts',
206
+ 'tools': 'Development tools',
207
+ 'config': 'Configuration',
208
+ 'configs': 'Configuration',
209
+ 'migrations': 'Database migrations',
210
+ 'db': 'Database',
211
+ 'api': 'API layer',
212
+ 'routes': 'Route handlers',
213
+ 'controllers': 'Controllers',
214
+ 'handlers': 'Request handlers',
215
+ 'models': 'Data models',
216
+ 'services': 'Service layer',
217
+ 'middleware': 'Middleware',
218
+ 'components': 'UI components',
219
+ 'pages': 'Page components',
220
+ 'app': 'Application (Next.js App Router)',
221
+ 'public': 'Static assets',
222
+ 'static': 'Static files',
223
+ 'assets': 'Assets',
224
+ 'frontend': 'Frontend application',
225
+ 'backend': 'Backend application',
226
+ 'infra': 'Infrastructure code',
227
+ 'deploy': 'Deployment configuration',
228
+ '.github': 'GitHub workflows and config',
229
+ };
230
+ function classifyDirectories(cwd) {
231
+ const results = [];
232
+ try {
233
+ for (const entry of fs.readdirSync(cwd, { withFileTypes: true })) {
234
+ if (!entry.isDirectory())
235
+ continue;
236
+ if (entry.name.startsWith('.') && entry.name !== '.github')
237
+ continue;
238
+ if (IGNORE_DIRS.has(entry.name))
239
+ continue;
240
+ const purpose = DIR_PURPOSES[entry.name];
241
+ if (purpose) {
242
+ results.push({ path: entry.name + '/', purpose });
243
+ }
244
+ }
245
+ // Check one level deep for common patterns (services/python/, src/api/, etc.)
246
+ for (const dir of ['src', 'services', 'packages', 'apps']) {
247
+ const subdir = path.join(cwd, dir);
248
+ if (!fs.existsSync(subdir))
249
+ continue;
250
+ try {
251
+ for (const sub of fs.readdirSync(subdir, { withFileTypes: true })) {
252
+ if (!sub.isDirectory() || IGNORE_DIRS.has(sub.name))
253
+ continue;
254
+ const purpose = DIR_PURPOSES[sub.name];
255
+ if (purpose) {
256
+ results.push({ path: `${dir}/${sub.name}/`, purpose });
257
+ }
258
+ }
259
+ }
260
+ catch { /* skip */ }
261
+ }
262
+ }
263
+ catch { /* skip */ }
264
+ return results;
265
+ }
266
+ // --- Test Patterns ---
267
+ function detectTestPatterns(cwd) {
268
+ const results = [];
269
+ // pytest
270
+ if (fs.existsSync(path.join(cwd, 'pytest.ini')) ||
271
+ fs.existsSync(path.join(cwd, 'conftest.py'))) {
272
+ results.push({ framework: 'pytest', location: 'tests/', pattern: 'test_*.py' });
273
+ }
274
+ else {
275
+ try {
276
+ const pyproject = fs.readFileSync(path.join(cwd, 'pyproject.toml'), 'utf-8');
277
+ if (pyproject.includes('[tool.pytest')) {
278
+ results.push({ framework: 'pytest', location: 'tests/', pattern: 'test_*.py' });
279
+ }
280
+ }
281
+ catch { /* no pyproject */ }
282
+ }
283
+ // go test
284
+ let hasGoTests = false;
285
+ walkFiles(cwd, (rel) => {
286
+ if (rel.endsWith('_test.go'))
287
+ hasGoTests = true;
288
+ }, 2);
289
+ if (hasGoTests) {
290
+ results.push({ framework: 'go test', location: 'alongside source', pattern: '*_test.go' });
291
+ }
292
+ // Jest
293
+ if (fs.existsSync(path.join(cwd, 'jest.config.js')) ||
294
+ fs.existsSync(path.join(cwd, 'jest.config.ts'))) {
295
+ results.push({ framework: 'jest', location: '__tests__/ or *.test.ts', pattern: '*.test.{ts,tsx,js,jsx}' });
296
+ }
297
+ else {
298
+ try {
299
+ const pkg = JSON.parse(fs.readFileSync(path.join(cwd, 'package.json'), 'utf-8'));
300
+ if (pkg.jest || pkg.devDependencies?.jest) {
301
+ results.push({ framework: 'jest', location: '__tests__/ or *.test.ts', pattern: '*.test.{ts,tsx,js,jsx}' });
302
+ }
303
+ }
304
+ catch { /* no package.json */ }
305
+ }
306
+ // xUnit / NUnit (C#)
307
+ let hasCsharpTests = false;
308
+ walkFiles(cwd, (rel, content) => {
309
+ if (rel.endsWith('.csproj') && (content.includes('xunit') || content.includes('nunit') || content.includes('MSTest'))) {
310
+ hasCsharpTests = true;
311
+ const framework = content.includes('xunit') ? 'xUnit' : content.includes('nunit') ? 'NUnit' : 'MSTest';
312
+ results.push({ framework, location: '*.Tests projects', pattern: '*.cs with [Fact]/[Test]' });
313
+ }
314
+ }, 2);
315
+ // cargo test
316
+ if (fs.existsSync(path.join(cwd, 'Cargo.toml'))) {
317
+ results.push({ framework: 'cargo test', location: 'src/ (#[cfg(test)]) + tests/', pattern: '#[test] functions' });
318
+ }
319
+ return results;
320
+ }
321
+ // --- Config Files ---
322
+ const CONFIG_FILES = {
323
+ 'package.json': 'Node.js package manifest',
324
+ 'pyproject.toml': 'Python project config',
325
+ 'go.mod': 'Go module definition',
326
+ 'Cargo.toml': 'Rust package manifest',
327
+ 'Makefile': 'Build automation',
328
+ 'docker-compose.yml': 'Docker services',
329
+ 'docker-compose.yaml': 'Docker services',
330
+ 'Dockerfile': 'Container build',
331
+ '.env.example': 'Environment template',
332
+ 'tsconfig.json': 'TypeScript config',
333
+ '.eslintrc.js': 'ESLint config',
334
+ '.eslintrc.json': 'ESLint config',
335
+ 'ruff.toml': 'Python linter config',
336
+ '.golangci.yml': 'Go linter config',
337
+ 'pytest.ini': 'Python test config',
338
+ '.pre-commit-config.yaml': 'Pre-commit hooks',
339
+ '.editorconfig': 'Editor config',
340
+ '.project.yaml': 'Project config (template)',
341
+ 'Pulumi.yaml': 'Pulumi IaC config',
342
+ 'appsettings.json': 'C# application config',
343
+ 'global.json': '.NET SDK config',
344
+ };
345
+ function findConfigFiles(cwd) {
346
+ const results = [];
347
+ for (const [file, purpose] of Object.entries(CONFIG_FILES)) {
348
+ if (fs.existsSync(path.join(cwd, file))) {
349
+ results.push({ file, purpose });
350
+ }
351
+ }
352
+ return results;
353
+ }
354
+ // --- Convention Detection ---
355
+ function detectConventions(cwd) {
356
+ const conventions = [];
357
+ const fileNames = [];
358
+ walkFiles(cwd, (rel) => {
359
+ fileNames.push(path.basename(rel, path.extname(rel)));
360
+ }, 2);
361
+ // Naming convention
362
+ const snakeCount = fileNames.filter(n => n.includes('_') && !n.includes('-')).length;
363
+ const kebabCount = fileNames.filter(n => n.includes('-') && !n.includes('_')).length;
364
+ const camelCount = fileNames.filter(n => /^[a-z][a-zA-Z]+$/.test(n) && !n.includes('_') && !n.includes('-')).length;
365
+ const pascalCount = fileNames.filter(n => /^[A-Z][a-zA-Z]+$/.test(n)).length;
366
+ const max = Math.max(snakeCount, kebabCount, camelCount, pascalCount);
367
+ if (max > 5) {
368
+ if (snakeCount === max)
369
+ conventions.push({ pattern: 'snake_case', description: 'File names use snake_case convention' });
370
+ else if (kebabCount === max)
371
+ conventions.push({ pattern: 'kebab-case', description: 'File names use kebab-case convention' });
372
+ else if (pascalCount === max)
373
+ conventions.push({ pattern: 'PascalCase', description: 'File names use PascalCase convention' });
374
+ else if (camelCount === max)
375
+ conventions.push({ pattern: 'camelCase', description: 'File names use camelCase convention' });
376
+ }
377
+ // Test location
378
+ if (fs.existsSync(path.join(cwd, 'tests')) || fs.existsSync(path.join(cwd, 'test'))) {
379
+ conventions.push({ pattern: 'Separate test directory', description: 'Tests in dedicated tests/ directory' });
380
+ }
381
+ return conventions;
382
+ }
383
+ // --- Main Scanner ---
384
+ function scanCodebase(cwd) {
385
+ let fileCount = 0;
386
+ walkFiles(cwd, () => { fileCount++; }, 4);
387
+ return {
388
+ entryPoints: findEntryPoints(cwd),
389
+ directories: classifyDirectories(cwd),
390
+ testPatterns: detectTestPatterns(cwd),
391
+ apiEndpoints: findApiRoutes(cwd),
392
+ configFiles: findConfigFiles(cwd),
393
+ conventions: detectConventions(cwd),
394
+ fileCount,
395
+ };
396
+ }
397
+ // --- Render Functions ---
398
+ function renderCodebaseSkill(analysis) {
399
+ const lines = [
400
+ '---',
401
+ 'name: codebase',
402
+ 'description: Architecture overview and navigation guide for this project. Check before starting any task to understand structure, entry points, and conventions.',
403
+ '---',
404
+ '',
405
+ '# Codebase Overview',
406
+ '',
407
+ `Scanned ${analysis.fileCount} files.`,
408
+ '',
409
+ ];
410
+ if (analysis.entryPoints.length) {
411
+ lines.push('## Entry Points', '');
412
+ for (const ep of analysis.entryPoints) {
413
+ lines.push(`- \`${ep.file}\` — ${ep.type}`);
414
+ }
415
+ lines.push('');
416
+ }
417
+ if (analysis.directories.length) {
418
+ lines.push('## Key Directories', '');
419
+ for (const dir of analysis.directories) {
420
+ lines.push(`- \`${dir.path}\` — ${dir.purpose}`);
421
+ }
422
+ lines.push('');
423
+ }
424
+ if (analysis.apiEndpoints.length) {
425
+ lines.push('## API Surface', '');
426
+ for (const ep of analysis.apiEndpoints.slice(0, 30)) {
427
+ lines.push(`- ${ep.method} ${ep.path} (\`${ep.file}\`)`);
428
+ }
429
+ if (analysis.apiEndpoints.length > 30) {
430
+ lines.push(`- ... and ${analysis.apiEndpoints.length - 30} more (see references/architecture.md)`);
431
+ }
432
+ lines.push('');
433
+ }
434
+ if (analysis.testPatterns.length) {
435
+ lines.push('## Test Patterns', '');
436
+ for (const tp of analysis.testPatterns) {
437
+ lines.push(`- **${tp.framework}** — ${tp.location} (${tp.pattern})`);
438
+ }
439
+ lines.push('');
440
+ }
441
+ if (analysis.configFiles.length) {
442
+ lines.push('## Configuration', '');
443
+ for (const cf of analysis.configFiles) {
444
+ lines.push(`- \`${cf.file}\` — ${cf.purpose}`);
445
+ }
446
+ lines.push('');
447
+ }
448
+ if (analysis.conventions.length) {
449
+ lines.push('## Detected Conventions', '');
450
+ for (const c of analysis.conventions) {
451
+ lines.push(`- **${c.pattern}** — ${c.description}`);
452
+ }
453
+ lines.push('');
454
+ }
455
+ return lines.join('\n');
456
+ }
457
+ function renderArchitectureRef(analysis) {
458
+ const lines = [
459
+ '# Architecture Reference',
460
+ '',
461
+ '<!-- Auto-generated by vyuh-dxkit codebase scanner. -->',
462
+ '<!-- This file is evolving — your edits will be preserved across updates. -->',
463
+ '<!-- Use `vyuh-dxkit update --rescan` to regenerate. -->',
464
+ '',
465
+ ];
466
+ if (analysis.entryPoints.length) {
467
+ lines.push('## Entry Points', '');
468
+ for (const ep of analysis.entryPoints) {
469
+ lines.push(`### \`${ep.file}\``, `- Type: ${ep.type}`, '');
470
+ }
471
+ }
472
+ if (analysis.directories.length) {
473
+ lines.push('## Directory Map', '');
474
+ lines.push('```');
475
+ for (const dir of analysis.directories) {
476
+ lines.push(`${dir.path.padEnd(30)} # ${dir.purpose}`);
477
+ }
478
+ lines.push('```', '');
479
+ }
480
+ if (analysis.apiEndpoints.length) {
481
+ lines.push('## API Endpoints', '');
482
+ lines.push('| Method | Path | File |', '|--------|------|------|');
483
+ for (const ep of analysis.apiEndpoints) {
484
+ lines.push(`| ${ep.method} | ${ep.path} | \`${ep.file}\` |`);
485
+ }
486
+ lines.push('');
487
+ }
488
+ if (analysis.configFiles.length) {
489
+ lines.push('## Config Inventory', '');
490
+ for (const cf of analysis.configFiles) {
491
+ lines.push(`- \`${cf.file}\` — ${cf.purpose}`);
492
+ }
493
+ lines.push('');
494
+ }
495
+ return lines.join('\n');
496
+ }
497
+ //# sourceMappingURL=codebase-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codebase-scanner.js","sourceRoot":"","sources":["../src/codebase-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { ResolvedConfig } from './types';
2
+ export declare const VERSION = "0.1.0";
3
+ export declare const DEFAULT_VERSIONS: {
4
+ python: string;
5
+ go: string;
6
+ node: string;
7
+ rust: string;
8
+ csharp: string;
9
+ postgres: string;
10
+ redis: string;
11
+ };
12
+ export declare const DEFAULT_COVERAGE = "80";
13
+ /** Files that must NEVER be overwritten (user-accumulated knowledge). */
14
+ export declare const EVOLVING_FILES: string[];
15
+ export declare function buildVariables(config: ResolvedConfig): Record<string, string>;
16
+ export declare function buildConditions(config: ResolvedConfig): Record<string, boolean>;
17
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,eAAO,MAAM,gBAAgB;;;;;;;;CAQ5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC,yEAAyE;AACzE,eAAO,MAAM,cAAc,UAU1B,CAAC;AAEF,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA4B7E;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuB/E"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EVOLVING_FILES = exports.DEFAULT_COVERAGE = exports.DEFAULT_VERSIONS = exports.VERSION = void 0;
4
+ exports.buildVariables = buildVariables;
5
+ exports.buildConditions = buildConditions;
6
+ exports.VERSION = '0.1.0';
7
+ exports.DEFAULT_VERSIONS = {
8
+ python: '3.12',
9
+ go: '1.24.0',
10
+ node: '20',
11
+ rust: 'stable',
12
+ csharp: '8.0',
13
+ postgres: '16',
14
+ redis: '7',
15
+ };
16
+ exports.DEFAULT_COVERAGE = '80';
17
+ /** Files that must NEVER be overwritten (user-accumulated knowledge). */
18
+ exports.EVOLVING_FILES = [
19
+ '.claude/skills/learned/references/gotchas.md',
20
+ '.claude/skills/learned/references/conventions.md',
21
+ '.claude/skills/learned/references/deny-recommendations.md',
22
+ '.claude/skills/quality/references/gotchas.md',
23
+ '.claude/skills/test/references/gotchas.md',
24
+ '.claude/skills/deploy/references/gotchas.md',
25
+ '.claude/skills/gcloud/references/gotchas.md',
26
+ '.claude/skills/codebase/SKILL.md',
27
+ '.claude/skills/codebase/references/architecture.md',
28
+ ];
29
+ function buildVariables(config) {
30
+ const v = {
31
+ PROJECT_NAME: config.projectName,
32
+ PROJECT_NAME_SNAKE: config.projectName.replace(/-/g, '_'),
33
+ PROJECT_NAME_KEBAB: config.projectName.replace(/_/g, '-'),
34
+ PROJECT_DESCRIPTION: config.projectDescription || 'A project',
35
+ GITHUB_ORG: 'myorg',
36
+ PYTHON_VERSION: config.versions.python ?? exports.DEFAULT_VERSIONS.python,
37
+ GO_VERSION: config.versions.go ?? exports.DEFAULT_VERSIONS.go,
38
+ NODE_VERSION: config.versions.node ?? exports.DEFAULT_VERSIONS.node,
39
+ RUST_VERSION: config.versions.rust ?? exports.DEFAULT_VERSIONS.rust,
40
+ CSHARP_VERSION: config.versions.csharp ?? exports.DEFAULT_VERSIONS.csharp,
41
+ POSTGRES_VERSION: exports.DEFAULT_VERSIONS.postgres,
42
+ REDIS_VERSION: exports.DEFAULT_VERSIONS.redis,
43
+ DB_NAME: 'app_dev',
44
+ DB_USER: 'app_user',
45
+ DB_PASSWORD: 'dev_password',
46
+ COVERAGE_THRESHOLD: config.coverageThreshold || exports.DEFAULT_COVERAGE,
47
+ };
48
+ // Derived variables
49
+ v.PYTHON_VERSION_NODOT = v.PYTHON_VERSION.replace('.', '');
50
+ const goParts = v.GO_VERSION.split('.');
51
+ v.GO_VERSION_SHORT = goParts.length >= 2 ? goParts.slice(0, 2).join('.') : v.GO_VERSION;
52
+ v.RUST_MSRV = ['stable', 'nightly', 'beta'].includes(v.RUST_VERSION) ? '1.75' : v.RUST_VERSION;
53
+ v.CSHARP_TFM = 'net' + v.CSHARP_VERSION;
54
+ return v;
55
+ }
56
+ function buildConditions(config) {
57
+ return {
58
+ IF_PYTHON: config.languages.python,
59
+ IF_GO: config.languages.go,
60
+ IF_NODE: config.languages.node || config.languages.nextjs,
61
+ IF_RUST: config.languages.rust,
62
+ IF_NEXTJS: config.languages.nextjs,
63
+ IF_CSHARP: config.languages.csharp,
64
+ IF_POSTGRES: config.infrastructure.postgres,
65
+ IF_REDIS: config.infrastructure.redis,
66
+ IF_HAS_SERVICES: config.infrastructure.postgres || config.infrastructure.redis,
67
+ IF_DOCKER: config.infrastructure.docker,
68
+ IF_GCLOUD: config.tools.gcloud,
69
+ IF_PULUMI: config.tools.pulumi,
70
+ IF_INFISICAL: config.tools.infisical,
71
+ IF_GH_CLI: config.tools.ghCli,
72
+ IF_CLAUDE_CODE: config.claudeCode,
73
+ IF_QUALITY_CHECKS: config.qualityChecks,
74
+ IF_COVERAGE_ENABLED: parseInt(config.coverageThreshold || exports.DEFAULT_COVERAGE) > 0,
75
+ IF_PRECOMMIT: config.precommit,
76
+ IF_AI_SESSIONS: config.aiSessions,
77
+ IF_AI_PROMPTS: config.aiPrompts,
78
+ };
79
+ }
80
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { DetectedStack } from './types';
2
+ export declare function detect(cwd: string): DetectedStack;
3
+ //# sourceMappingURL=detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AA4LxC,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAmCjD"}