devlens-cli-susmit 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/dist/index.js ADDED
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ /**
3
+ * index.ts — public API entry point for devlens.
4
+ *
5
+ * Usage (programmatic):
6
+ * import { devlens } from "devlens";
7
+ * const report = await devlens({ projectRoot: "./my-project", run: "test" });
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.TECH_REGISTRY = exports.formatCicdAdvisories = exports.adviseCicd = exports.scaffoldGoogleTest = exports.resolveTestStrategy = exports.runCommand = exports.formatAnalysis = exports.analyze = exports.summarize = exports.detect = void 0;
44
+ exports.devlens = devlens;
45
+ var detector_1 = require("./detector");
46
+ Object.defineProperty(exports, "detect", { enumerable: true, get: function () { return detector_1.detect; } });
47
+ var summarizer_1 = require("./summarizer");
48
+ Object.defineProperty(exports, "summarize", { enumerable: true, get: function () { return summarizer_1.summarize; } });
49
+ var analyzer_1 = require("./analyzer");
50
+ Object.defineProperty(exports, "analyze", { enumerable: true, get: function () { return analyzer_1.analyze; } });
51
+ Object.defineProperty(exports, "formatAnalysis", { enumerable: true, get: function () { return analyzer_1.formatAnalysis; } });
52
+ var runner_1 = require("./runner");
53
+ Object.defineProperty(exports, "runCommand", { enumerable: true, get: function () { return runner_1.runCommand; } });
54
+ Object.defineProperty(exports, "resolveTestStrategy", { enumerable: true, get: function () { return runner_1.resolveTestStrategy; } });
55
+ Object.defineProperty(exports, "scaffoldGoogleTest", { enumerable: true, get: function () { return runner_1.scaffoldGoogleTest; } });
56
+ var cicd_1 = require("./cicd");
57
+ Object.defineProperty(exports, "adviseCicd", { enumerable: true, get: function () { return cicd_1.adviseCicd; } });
58
+ Object.defineProperty(exports, "formatCicdAdvisories", { enumerable: true, get: function () { return cicd_1.formatCicdAdvisories; } });
59
+ var registry_1 = require("./registry");
60
+ Object.defineProperty(exports, "TECH_REGISTRY", { enumerable: true, get: function () { return registry_1.TECH_REGISTRY; } });
61
+ const detector_2 = require("./detector");
62
+ const summarizer_2 = require("./summarizer");
63
+ const runner_2 = require("./runner");
64
+ const cicd_2 = require("./cicd");
65
+ const analyzer_2 = require("./analyzer");
66
+ async function devlens(options = {}) {
67
+ const root = options.projectRoot ?? process.cwd();
68
+ const action = options.action ?? "summarize";
69
+ const detection = (0, detector_2.detect)(root);
70
+ const summary = (0, summarizer_2.summarize)(detection);
71
+ const cicdAdvisories = (0, cicd_2.adviseCicd)(root, detection.detected);
72
+ let runResult = null;
73
+ let testStrategy = null;
74
+ const outputParts = [];
75
+ outputParts.push(summary.markdown);
76
+ if (action === "test") {
77
+ testStrategy = (0, runner_2.resolveTestStrategy)(detection);
78
+ if (testStrategy.framework === "none") {
79
+ outputParts.push("\n⚠️ No test framework detected and no fallback available. Add tests to your project.");
80
+ }
81
+ else {
82
+ if (testStrategy.scaffolded) {
83
+ outputParts.push(`\n🔨 Scaffolded ${testStrategy.framework} — running: ${testStrategy.command}`);
84
+ }
85
+ else {
86
+ outputParts.push(`\n▶ Running tests with ${testStrategy.framework}: ${testStrategy.command}`);
87
+ }
88
+ runResult = await (0, runner_2.runCommand)(testStrategy.command, root, options.onData);
89
+ outputParts.push((0, analyzer_2.formatAnalysis)(runResult.analysis));
90
+ }
91
+ }
92
+ else if (action === "build" && detection.buildCommand) {
93
+ runResult = await (0, runner_2.runCommand)(detection.buildCommand, root, options.onData);
94
+ outputParts.push((0, analyzer_2.formatAnalysis)(runResult.analysis));
95
+ }
96
+ else if (action === "run" && detection.runCommand) {
97
+ runResult = await (0, runner_2.runCommand)(detection.runCommand, root, options.onData);
98
+ outputParts.push((0, analyzer_2.formatAnalysis)(runResult.analysis));
99
+ }
100
+ else if (action === "analyze" && options.output) {
101
+ const analysis = (await Promise.resolve().then(() => __importStar(require("./analyzer")))).analyze(options.output);
102
+ outputParts.push((0, analyzer_2.formatAnalysis)(analysis));
103
+ }
104
+ else if (action === "cicd") {
105
+ outputParts.push((await Promise.resolve().then(() => __importStar(require("./cicd")))).formatCicdAdvisories(cicdAdvisories));
106
+ }
107
+ return {
108
+ projectRoot: root,
109
+ summary,
110
+ runResult,
111
+ cicdAdvisories,
112
+ testStrategy,
113
+ formattedOutput: outputParts.join("\n"),
114
+ };
115
+ }
116
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export type Platform = "linux" | "darwin" | "win32" | "unknown";
2
+ export declare function getPlatform(): Platform;
3
+ export declare function getPlatformLabel(): string;
4
+ /**
5
+ * Normalize a shell command for the current OS.
6
+ * Mainly handles path separators and shell availability.
7
+ */
8
+ export declare function normalizeCommand(command: string): string;
9
+ /**
10
+ * Returns the cross-platform null device path.
11
+ */
12
+ export declare function nullDevice(): string;
13
+ /**
14
+ * Check if a binary is available in PATH.
15
+ */
16
+ export declare function commandExists(bin: string): boolean;
17
+ /**
18
+ * Return the first available command from a list.
19
+ */
20
+ export declare function firstAvailableCommand(commands: string[]): string | null;
21
+ /**
22
+ * Cross-platform temp directory.
23
+ */
24
+ export declare function tempDir(): string;
25
+ /**
26
+ * Make a path safe across all platforms.
27
+ */
28
+ export declare function safePath(...parts: string[]): string;
29
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAEhE,wBAAgB,WAAW,IAAI,QAAQ,CAItC;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAMzC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAelD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAMvE;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAEnD"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getPlatform = getPlatform;
7
+ exports.getPlatformLabel = getPlatformLabel;
8
+ exports.normalizeCommand = normalizeCommand;
9
+ exports.nullDevice = nullDevice;
10
+ exports.commandExists = commandExists;
11
+ exports.firstAvailableCommand = firstAvailableCommand;
12
+ exports.tempDir = tempDir;
13
+ exports.safePath = safePath;
14
+ /**
15
+ * platform.ts — cross-platform utilities.
16
+ * Normalizes command execution across macOS, Windows, and Linux.
17
+ */
18
+ const os_1 = __importDefault(require("os"));
19
+ const path_1 = __importDefault(require("path"));
20
+ const fs_1 = __importDefault(require("fs"));
21
+ function getPlatform() {
22
+ const p = os_1.default.platform();
23
+ if (p === "linux" || p === "darwin" || p === "win32")
24
+ return p;
25
+ return "unknown";
26
+ }
27
+ function getPlatformLabel() {
28
+ const p = getPlatform();
29
+ if (p === "linux")
30
+ return "Linux";
31
+ if (p === "darwin")
32
+ return "macOS";
33
+ if (p === "win32")
34
+ return "Windows";
35
+ return "Unknown";
36
+ }
37
+ /**
38
+ * Normalize a shell command for the current OS.
39
+ * Mainly handles path separators and shell availability.
40
+ */
41
+ function normalizeCommand(command) {
42
+ if (getPlatform() === "win32") {
43
+ // Replace forward slashes in paths with backslashes (heuristic)
44
+ return command.replace(/\//g, "\\");
45
+ }
46
+ return command;
47
+ }
48
+ /**
49
+ * Returns the cross-platform null device path.
50
+ */
51
+ function nullDevice() {
52
+ return getPlatform() === "win32" ? "NUL" : "/dev/null";
53
+ }
54
+ /**
55
+ * Check if a binary is available in PATH.
56
+ */
57
+ function commandExists(bin) {
58
+ const isWin = getPlatform() === "win32";
59
+ const pathEnv = process.env.PATH ?? "";
60
+ const dirs = pathEnv.split(isWin ? ";" : ":");
61
+ const exts = isWin ? (process.env.PATHEXT ?? ".EXE;.CMD;.BAT").split(";") : [""];
62
+ for (const dir of dirs) {
63
+ for (const ext of exts) {
64
+ const full = path_1.default.join(dir, bin + ext);
65
+ try {
66
+ fs_1.default.accessSync(full, fs_1.default.constants.X_OK);
67
+ return true;
68
+ }
69
+ catch { /* continue */ }
70
+ }
71
+ }
72
+ return false;
73
+ }
74
+ /**
75
+ * Return the first available command from a list.
76
+ */
77
+ function firstAvailableCommand(commands) {
78
+ for (const cmd of commands) {
79
+ const bin = cmd.split(" ")[0];
80
+ if (commandExists(bin))
81
+ return cmd;
82
+ }
83
+ return null;
84
+ }
85
+ /**
86
+ * Cross-platform temp directory.
87
+ */
88
+ function tempDir() {
89
+ return os_1.default.tmpdir();
90
+ }
91
+ /**
92
+ * Make a path safe across all platforms.
93
+ */
94
+ function safePath(...parts) {
95
+ return path_1.default.join(...parts);
96
+ }
97
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * devlens — language / framework / tool detection registry.
3
+ * Each entry maps a canonical name to the signals that identify it.
4
+ */
5
+ export type Category = "language" | "framework" | "game-engine" | "cicd" | "database" | "api" | "ai" | "dsa" | "app" | "testing";
6
+ export interface DetectedTech {
7
+ name: string;
8
+ category: Category;
9
+ confidence: "high" | "medium" | "low";
10
+ testCommand?: string;
11
+ buildCommand?: string;
12
+ runCommand?: string;
13
+ }
14
+ interface TechSignal {
15
+ name: string;
16
+ category: Category;
17
+ files?: string[];
18
+ dirs?: string[];
19
+ extensions?: string[];
20
+ keywords?: string[];
21
+ testCommand?: string;
22
+ buildCommand?: string;
23
+ runCommand?: string;
24
+ }
25
+ export type { TechSignal };
26
+ export declare const TECH_REGISTRY: TechSignal[];
27
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAChB,UAAU,GACV,WAAW,GACX,aAAa,GACb,MAAM,GACN,UAAU,GACV,KAAK,GACL,IAAI,GACJ,KAAK,GACL,KAAK,GACL,SAAS,CAAC;AAEd,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B,eAAO,MAAM,aAAa,EAAE,UAAU,EA4IrC,CAAC"}
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ /**
3
+ * devlens — language / framework / tool detection registry.
4
+ * Each entry maps a canonical name to the signals that identify it.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.TECH_REGISTRY = void 0;
8
+ exports.TECH_REGISTRY = [
9
+ // ── Languages ──────────────────────────────────────────────────────────────
10
+ { name: "TypeScript", category: "language", files: ["tsconfig.json"], extensions: [".ts", ".tsx"], testCommand: "npx jest", buildCommand: "npx tsc" },
11
+ { name: "JavaScript", category: "language", files: ["package.json"], extensions: [".js", ".mjs"], testCommand: "npx jest" },
12
+ { name: "Python", category: "language", files: ["requirements.txt", "pyproject.toml", "setup.py"], extensions: [".py"], testCommand: "pytest", buildCommand: "python -m build" },
13
+ { name: "Rust", category: "language", files: ["Cargo.toml"], extensions: [".rs"], testCommand: "cargo test", buildCommand: "cargo build --release" },
14
+ { name: "Go", category: "language", files: ["go.mod"], extensions: [".go"], testCommand: "go test ./...", buildCommand: "go build ./..." },
15
+ { name: "Java", category: "language", files: ["pom.xml", "build.gradle"], extensions: [".java"], testCommand: "mvn test", buildCommand: "mvn package -DskipTests" },
16
+ { name: "Kotlin", category: "language", files: ["build.gradle.kts"], extensions: [".kt"], testCommand: "gradle test", buildCommand: "gradle build" },
17
+ { name: "C", category: "language", extensions: [".c", ".h"], testCommand: "ctest --output-on-failure", buildCommand: "cmake --build build" },
18
+ { name: "C++", category: "language", extensions: [".cpp", ".cc", ".cxx", ".hpp"], testCommand: "ctest --output-on-failure", buildCommand: "cmake --build build" },
19
+ { name: "C#", category: "language", files: ["*.csproj", "*.sln"], extensions: [".cs"], testCommand: "dotnet test", buildCommand: "dotnet build" },
20
+ { name: "Ruby", category: "language", files: ["Gemfile"], extensions: [".rb"], testCommand: "bundle exec rspec", buildCommand: "bundle install" },
21
+ { name: "PHP", category: "language", files: ["composer.json"], extensions: [".php"], testCommand: "vendor/bin/phpunit", buildCommand: "composer install" },
22
+ { name: "Swift", category: "language", files: ["Package.swift"], extensions: [".swift"], testCommand: "swift test", buildCommand: "swift build -c release" },
23
+ { name: "Dart", category: "language", files: ["pubspec.yaml"], extensions: [".dart"], testCommand: "dart test", buildCommand: "dart compile exe" },
24
+ { name: "Lua", category: "language", extensions: [".lua"], testCommand: "busted" },
25
+ { name: "Zig", category: "language", files: ["build.zig"], extensions: [".zig"], testCommand: "zig build test", buildCommand: "zig build" },
26
+ { name: "Elixir", category: "language", files: ["mix.exs"], extensions: [".ex", ".exs"], testCommand: "mix test", buildCommand: "mix release" },
27
+ { name: "Haskell", category: "language", files: ["stack.yaml", "*.cabal"], extensions: [".hs"], testCommand: "stack test", buildCommand: "stack build" },
28
+ { name: "Scala", category: "language", files: ["build.sbt"], extensions: [".scala"], testCommand: "sbt test", buildCommand: "sbt assembly" },
29
+ { name: "R", category: "language", files: ["DESCRIPTION"], extensions: [".R"], testCommand: "Rscript -e 'devtools::test()'" },
30
+ { name: "Julia", category: "language", files: ["Project.toml"], extensions: [".jl"], testCommand: "julia --project -e 'using Pkg; Pkg.test()'" },
31
+ { name: "COBOL", category: "language", extensions: [".cob", ".cbl"], testCommand: "cobcrun main" },
32
+ { name: "Fortran", category: "language", extensions: [".f90", ".f95", ".f77"], testCommand: "ctest --output-on-failure", buildCommand: "cmake --build build" },
33
+ { name: "Assembly", category: "language", extensions: [".asm", ".s"], buildCommand: "nasm -f elf64" },
34
+ { name: "Bash/Shell", category: "language", extensions: [".sh", ".bash"], testCommand: "bats ." },
35
+ { name: "PowerShell", category: "language", extensions: [".ps1"], testCommand: "Invoke-Pester" },
36
+ // ── Web Frameworks ─────────────────────────────────────────────────────────
37
+ { name: "React", category: "framework", files: ["package.json"], keywords: ["react"], testCommand: "npx jest", buildCommand: "npm run build" },
38
+ { name: "Next.js", category: "framework", files: ["next.config.js", "next.config.ts", "next.config.mjs"], testCommand: "npx jest", buildCommand: "next build" },
39
+ { name: "Vue", category: "framework", files: ["vue.config.js", "vite.config.ts"], keywords: ["vue"], buildCommand: "npm run build" },
40
+ { name: "Nuxt", category: "framework", files: ["nuxt.config.ts", "nuxt.config.js"], buildCommand: "nuxt build" },
41
+ { name: "Angular", category: "framework", files: ["angular.json"], testCommand: "ng test --watch=false", buildCommand: "ng build --configuration production" },
42
+ { name: "Svelte", category: "framework", files: ["svelte.config.js", "svelte.config.ts"], buildCommand: "npm run build" },
43
+ { name: "SolidJS", category: "framework", files: ["vite.config.ts"], keywords: ["solid-js"], buildCommand: "npm run build" },
44
+ { name: "Astro", category: "framework", files: ["astro.config.mjs", "astro.config.ts"], buildCommand: "astro build" },
45
+ { name: "Django", category: "framework", files: ["manage.py"], testCommand: "python manage.py test", runCommand: "python manage.py runserver" },
46
+ { name: "Flask", category: "framework", files: ["app.py", "wsgi.py"], keywords: ["flask"], testCommand: "pytest", runCommand: "flask run" },
47
+ { name: "FastAPI", category: "framework", keywords: ["fastapi"], testCommand: "pytest", runCommand: "uvicorn main:app --reload" },
48
+ { name: "Express", category: "framework", files: ["package.json"], keywords: ["express"], testCommand: "npx jest", runCommand: "node index.js" },
49
+ { name: "NestJS", category: "framework", files: ["nest-cli.json"], testCommand: "npm run test", buildCommand: "npm run build" },
50
+ { name: "Laravel", category: "framework", files: ["artisan"], testCommand: "php artisan test", runCommand: "php artisan serve" },
51
+ { name: "Spring Boot", category: "framework", files: ["pom.xml"], keywords: ["spring-boot"], testCommand: "mvn test", buildCommand: "mvn package -DskipTests" },
52
+ { name: "Ruby on Rails", category: "framework", files: ["Rakefile", "config/routes.rb"], testCommand: "bundle exec rails test", runCommand: "rails server" },
53
+ { name: "Gin (Go)", category: "framework", keywords: ["gin-gonic"], testCommand: "go test ./...", runCommand: "go run main.go" },
54
+ { name: "Fiber (Go)", category: "framework", keywords: ["gofiber"], testCommand: "go test ./...", runCommand: "go run main.go" },
55
+ { name: "Actix (Rust)", category: "framework", keywords: ["actix-web"], testCommand: "cargo test", runCommand: "cargo run" },
56
+ { name: "ASP.NET Core", category: "framework", files: ["*.csproj"], keywords: ["Microsoft.AspNetCore"], testCommand: "dotnet test", runCommand: "dotnet run" },
57
+ // ── Mobile / App ───────────────────────────────────────────────────────────
58
+ { name: "Flutter", category: "app", files: ["pubspec.yaml"], keywords: ["flutter"], testCommand: "flutter test", buildCommand: "flutter build apk" },
59
+ { name: "React Native", category: "app", files: ["app.json", "App.tsx", "App.js"], keywords: ["react-native"], testCommand: "npx jest", buildCommand: "npx react-native build-android" },
60
+ { name: "Expo", category: "app", files: ["app.json", "expo.json"], keywords: ["expo"], testCommand: "npx jest", buildCommand: "expo build:android" },
61
+ { name: "Tauri", category: "app", files: ["tauri.conf.json", "src-tauri"], testCommand: "cargo test", buildCommand: "tauri build" },
62
+ { name: "Electron", category: "app", files: ["electron.js", "electron-builder.yml"], keywords: ["electron"], buildCommand: "electron-builder" },
63
+ { name: "Android (Gradle)", category: "app", files: ["app/build.gradle", "settings.gradle"], testCommand: "gradle test", buildCommand: "gradle assembleRelease" },
64
+ { name: "iOS (Xcode)", category: "app", files: ["*.xcodeproj", "*.xcworkspace"], buildCommand: "xcodebuild -scheme MyApp build" },
65
+ // ── Game Engines ───────────────────────────────────────────────────────────
66
+ { name: "Unity", category: "game-engine", dirs: ["Assets", "ProjectSettings"], files: ["ProjectSettings/ProjectVersion.txt"], buildCommand: "Unity -batchmode -buildLinux64Player Build/game" },
67
+ { name: "Unreal Engine", category: "game-engine", files: ["*.uproject"], buildCommand: "UnrealBuildTool" },
68
+ { name: "Godot", category: "game-engine", files: ["project.godot"], buildCommand: "godot --export-release Linux/X11 build/game.x86_64" },
69
+ { name: "Bevy (Rust)", category: "game-engine", keywords: ["bevy"], testCommand: "cargo test", buildCommand: "cargo build --release" },
70
+ { name: "Pygame", category: "game-engine", keywords: ["pygame"], testCommand: "pytest", runCommand: "python main.py" },
71
+ { name: "LÖVE2D", category: "game-engine", files: ["main.lua", "conf.lua"], runCommand: "love ." },
72
+ { name: "Phaser", category: "game-engine", keywords: ["phaser"], buildCommand: "npm run build" },
73
+ { name: "MonoGame", category: "game-engine", files: ["*.mgcb", "Content.mgcb"], buildCommand: "dotnet build" },
74
+ { name: "LibGDX", category: "game-engine", files: ["lwjgl3/build.gradle"], buildCommand: "gradle desktop:dist" },
75
+ { name: "raylib", category: "game-engine", files: ["CMakeLists.txt"], keywords: ["raylib"], buildCommand: "cmake --build build" },
76
+ // ── AI / ML ────────────────────────────────────────────────────────────────
77
+ { name: "PyTorch", category: "ai", keywords: ["torch"], testCommand: "pytest", runCommand: "python train.py" },
78
+ { name: "TensorFlow", category: "ai", keywords: ["tensorflow", "tf"], testCommand: "pytest", runCommand: "python train.py" },
79
+ { name: "JAX", category: "ai", keywords: ["jax", "flax"], testCommand: "pytest" },
80
+ { name: "Hugging Face", category: "ai", keywords: ["transformers", "diffusers"], testCommand: "pytest" },
81
+ { name: "LangChain", category: "ai", keywords: ["langchain"], testCommand: "pytest" },
82
+ { name: "scikit-learn", category: "ai", keywords: ["scikit-learn", "sklearn"], testCommand: "pytest" },
83
+ { name: "Keras", category: "ai", keywords: ["keras"], testCommand: "pytest" },
84
+ { name: "ONNX", category: "ai", files: ["*.onnx"], testCommand: "pytest" },
85
+ { name: "LlamaIndex", category: "ai", keywords: ["llama-index", "llama_index"], testCommand: "pytest" },
86
+ // ── Databases ──────────────────────────────────────────────────────────────
87
+ { name: "PostgreSQL", category: "database", keywords: ["pg", "postgres", "psycopg2", "asyncpg"] },
88
+ { name: "MySQL", category: "database", keywords: ["mysql", "mysql2", "PyMySQL"] },
89
+ { name: "MongoDB", category: "database", keywords: ["mongoose", "mongodb", "motor"] },
90
+ { name: "Redis", category: "database", keywords: ["redis", "ioredis"] },
91
+ { name: "SQLite", category: "database", files: ["*.db", "*.sqlite", "*.sqlite3"], keywords: ["sqlite", "sqlite3", "better-sqlite3"] },
92
+ { name: "Prisma", category: "database", files: ["prisma/schema.prisma"], testCommand: "npx prisma validate", buildCommand: "npx prisma generate" },
93
+ { name: "Drizzle ORM", category: "database", files: ["drizzle.config.ts", "drizzle.config.js"] },
94
+ { name: "Sequelize", category: "database", keywords: ["sequelize"] },
95
+ { name: "TypeORM", category: "database", keywords: ["typeorm"] },
96
+ { name: "SQLAlchemy", category: "database", keywords: ["sqlalchemy", "alembic"] },
97
+ { name: "Supabase", category: "database", keywords: ["supabase", "@supabase"] },
98
+ { name: "Firebase", category: "database", files: ["firebase.json", ".firebaserc"], keywords: ["firebase"] },
99
+ { name: "Cassandra", category: "database", keywords: ["cassandra-driver"] },
100
+ { name: "Elasticsearch", category: "database", keywords: ["elasticsearch", "@elastic"] },
101
+ // ── CI/CD ──────────────────────────────────────────────────────────────────
102
+ { name: "GitHub Actions", category: "cicd", dirs: [".github/workflows"], files: [".github/workflows/*.yml", ".github/workflows/*.yaml"] },
103
+ { name: "GitLab CI", category: "cicd", files: [".gitlab-ci.yml"] },
104
+ { name: "CircleCI", category: "cicd", files: [".circleci/config.yml"] },
105
+ { name: "Jenkins", category: "cicd", files: ["Jenkinsfile"] },
106
+ { name: "Travis CI", category: "cicd", files: [".travis.yml"] },
107
+ { name: "Bitbucket Pipelines", category: "cicd", files: ["bitbucket-pipelines.yml"] },
108
+ { name: "Azure Pipelines", category: "cicd", files: ["azure-pipelines.yml"] },
109
+ { name: "Drone CI", category: "cicd", files: [".drone.yml"] },
110
+ { name: "Tekton", category: "cicd", files: ["tekton/*.yaml", "tekton/*.yml"] },
111
+ { name: "ArgoCD", category: "cicd", files: ["argo*.yaml"] },
112
+ { name: "Docker", category: "cicd", files: ["Dockerfile", "docker-compose.yml", "docker-compose.yaml"] },
113
+ { name: "Kubernetes", category: "cicd", files: ["k8s/*.yaml", "helm/Chart.yaml", "Chart.yaml"] },
114
+ // ── APIs ───────────────────────────────────────────────────────────────────
115
+ { name: "GraphQL", category: "api", files: ["*.graphql", "*.gql", "schema.graphql"], keywords: ["graphql", "apollo-server", "graphql-yoga"] },
116
+ { name: "tRPC", category: "api", keywords: ["@trpc/server", "@trpc/client"] },
117
+ { name: "gRPC", category: "api", files: ["*.proto"], keywords: ["@grpc/grpc-js", "grpcio"] },
118
+ { name: "REST (OpenAPI)", category: "api", files: ["openapi.yaml", "openapi.json", "swagger.yaml", "swagger.json"] },
119
+ { name: "WebSocket", category: "api", keywords: ["ws", "socket.io", "websockets"] },
120
+ { name: "Kafka", category: "api", keywords: ["kafkajs", "kafka-python", "confluent-kafka"] },
121
+ { name: "RabbitMQ", category: "api", keywords: ["amqplib", "pika"] },
122
+ // ── Testing Frameworks ─────────────────────────────────────────────────────
123
+ { name: "Jest", category: "testing", files: ["jest.config.js", "jest.config.ts"], keywords: ["jest"], testCommand: "npx jest" },
124
+ { name: "Vitest", category: "testing", files: ["vitest.config.ts", "vitest.config.js"], keywords: ["vitest"], testCommand: "npx vitest run" },
125
+ { name: "Pytest", category: "testing", files: ["pytest.ini", "pyproject.toml", "setup.cfg"], keywords: ["pytest"], testCommand: "pytest" },
126
+ { name: "JUnit", category: "testing", keywords: ["junit"], testCommand: "mvn test" },
127
+ { name: "RSpec", category: "testing", dirs: ["spec"], files: [".rspec"], testCommand: "bundle exec rspec" },
128
+ { name: "PHPUnit", category: "testing", files: ["phpunit.xml", "phpunit.xml.dist"], testCommand: "vendor/bin/phpunit" },
129
+ { name: "Go test", category: "testing", extensions: [".go"], testCommand: "go test ./..." },
130
+ { name: "Cargo test", category: "testing", files: ["Cargo.toml"], testCommand: "cargo test" },
131
+ { name: "GoogleTest", category: "testing", keywords: ["gtest", "googletest"], testCommand: "ctest --output-on-failure" },
132
+ { name: "Catch2", category: "testing", keywords: ["Catch2"], testCommand: "ctest --output-on-failure" },
133
+ { name: "Mocha", category: "testing", files: [".mocharc.js", ".mocharc.yml"], keywords: ["mocha"], testCommand: "npx mocha" },
134
+ { name: "Cypress", category: "testing", files: ["cypress.config.ts", "cypress.config.js"], testCommand: "npx cypress run" },
135
+ { name: "Playwright", category: "testing", files: ["playwright.config.ts", "playwright.config.js"], testCommand: "npx playwright test" },
136
+ { name: "Bats", category: "testing", extensions: [".bats"], testCommand: "bats ." },
137
+ { name: "unittest", category: "testing", keywords: ["unittest"], testCommand: "python -m pytest" },
138
+ { name: "NUnit", category: "testing", keywords: ["NUnit"], testCommand: "dotnet test" },
139
+ { name: "xUnit", category: "testing", keywords: ["xunit"], testCommand: "dotnet test" },
140
+ ];
141
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { AnalysisResult } from "./analyzer";
2
+ import { DetectionResult } from "./detector";
3
+ export interface RunResult {
4
+ command: string;
5
+ stdout: string;
6
+ stderr: string;
7
+ exitCode: number | null;
8
+ analysis: AnalysisResult;
9
+ durationMs: number;
10
+ }
11
+ /**
12
+ * Run a shell command in a given directory, capture output, and analyze errors.
13
+ */
14
+ export declare function runCommand(command: string, cwd: string, onData?: (chunk: string) => void): Promise<RunResult>;
15
+ /**
16
+ * When no test framework is detected for a C/C++ project,
17
+ * scaffold GoogleTest CMake files and return the test command.
18
+ */
19
+ export declare function scaffoldGoogleTest(projectRoot: string): string;
20
+ export interface TestStrategy {
21
+ command: string;
22
+ framework: string;
23
+ scaffolded: boolean;
24
+ }
25
+ /**
26
+ * Returns the best test command for the project.
27
+ * Falls back to GoogleTest scaffold for C/C++ with no detected test framework.
28
+ */
29
+ export declare function resolveTestStrategy(detection: DetectionResult): TestStrategy;
30
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAQA,OAAO,EAAW,cAAc,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD;;GAEG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAC/B,OAAO,CAAC,SAAS,CAAC,CA8CpB;AAkCD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAoB9D;AAID,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,eAAe,GAAG,YAAY,CA0C5E"}