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/LICENSE +21 -0
- package/README.md +184 -0
- package/dist/analyzer.d.ts +23 -0
- package/dist/analyzer.d.ts.map +1 -0
- package/dist/analyzer.js +334 -0
- package/dist/analyzer.js.map +1 -0
- package/dist/cicd.d.ts +10 -0
- package/dist/cicd.d.ts.map +1 -0
- package/dist/cicd.js +105 -0
- package/dist/cicd.js.map +1 -0
- package/dist/cli.d.ts +16 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +203 -0
- package/dist/cli.js.map +1 -0
- package/dist/detector.d.ts +13 -0
- package/dist/detector.d.ts.map +1 -0
- package/dist/detector.js +203 -0
- package/dist/detector.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +116 -0
- package/dist/index.js.map +1 -0
- package/dist/platform.d.ts +29 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +97 -0
- package/dist/platform.js.map +1 -0
- package/dist/registry.d.ts +27 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +141 -0
- package/dist/registry.js.map +1 -0
- package/dist/runner.d.ts +30 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +157 -0
- package/dist/runner.js.map +1 -0
- package/dist/summarizer.d.ts +34 -0
- package/dist/summarizer.d.ts.map +1 -0
- package/dist/summarizer.js +180 -0
- package/dist/summarizer.js.map +1 -0
- package/package.json +60 -0
package/dist/runner.js
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
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.runCommand = runCommand;
|
|
7
|
+
exports.scaffoldGoogleTest = scaffoldGoogleTest;
|
|
8
|
+
exports.resolveTestStrategy = resolveTestStrategy;
|
|
9
|
+
/**
|
|
10
|
+
* runner.ts — cross-platform command runner that streams output,
|
|
11
|
+
* detects failures, and invokes the error analyzer.
|
|
12
|
+
*/
|
|
13
|
+
const child_process_1 = require("child_process");
|
|
14
|
+
const os_1 = __importDefault(require("os"));
|
|
15
|
+
const path_1 = __importDefault(require("path"));
|
|
16
|
+
const fs_1 = __importDefault(require("fs"));
|
|
17
|
+
const analyzer_1 = require("./analyzer");
|
|
18
|
+
function isWindows() {
|
|
19
|
+
return os_1.default.platform() === "win32";
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Run a shell command in a given directory, capture output, and analyze errors.
|
|
23
|
+
*/
|
|
24
|
+
function runCommand(command, cwd, onData) {
|
|
25
|
+
return new Promise(resolve => {
|
|
26
|
+
const start = Date.now();
|
|
27
|
+
const shell = isWindows() ? "cmd.exe" : "/bin/sh";
|
|
28
|
+
const shellFlag = isWindows() ? "/C" : "-c";
|
|
29
|
+
let stdout = "";
|
|
30
|
+
let stderr = "";
|
|
31
|
+
const child = (0, child_process_1.spawn)(shell, [shellFlag, command], {
|
|
32
|
+
cwd,
|
|
33
|
+
env: { ...process.env },
|
|
34
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
35
|
+
});
|
|
36
|
+
child.stdout.on("data", (chunk) => {
|
|
37
|
+
const s = chunk.toString();
|
|
38
|
+
stdout += s;
|
|
39
|
+
onData?.(s);
|
|
40
|
+
});
|
|
41
|
+
child.stderr.on("data", (chunk) => {
|
|
42
|
+
const s = chunk.toString();
|
|
43
|
+
stderr += s;
|
|
44
|
+
onData?.(s);
|
|
45
|
+
});
|
|
46
|
+
child.on("close", exitCode => {
|
|
47
|
+
const combined = stdout + "\n" + stderr;
|
|
48
|
+
const analysis = (0, analyzer_1.analyze)(combined, exitCode);
|
|
49
|
+
resolve({
|
|
50
|
+
command,
|
|
51
|
+
stdout,
|
|
52
|
+
stderr,
|
|
53
|
+
exitCode,
|
|
54
|
+
analysis,
|
|
55
|
+
durationMs: Date.now() - start,
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
child.on("error", err => {
|
|
59
|
+
const msg = `Failed to start command: ${err.message}`;
|
|
60
|
+
stderr += msg;
|
|
61
|
+
const analysis = (0, analyzer_1.analyze)(msg, 1);
|
|
62
|
+
resolve({ command, stdout, stderr, exitCode: 1, analysis, durationMs: Date.now() - start });
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// ── GoogleTest scaffold ───────────────────────────────────────────────────────
|
|
67
|
+
const GTEST_CMAKE = `cmake_minimum_required(VERSION 3.14)
|
|
68
|
+
project(devlens_tests)
|
|
69
|
+
|
|
70
|
+
set(CMAKE_CXX_STANDARD 17)
|
|
71
|
+
|
|
72
|
+
include(FetchContent)
|
|
73
|
+
FetchContent_Declare(
|
|
74
|
+
googletest
|
|
75
|
+
URL https://github.com/google/googletest/archive/refs/heads/main.zip
|
|
76
|
+
)
|
|
77
|
+
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
|
78
|
+
FetchContent_MakeAvailable(googletest)
|
|
79
|
+
|
|
80
|
+
enable_testing()
|
|
81
|
+
|
|
82
|
+
file(GLOB_RECURSE TEST_SOURCES "*.cpp" "*.cc" "*.cxx")
|
|
83
|
+
list(FILTER TEST_SOURCES EXCLUDE REGEX ".*CMakeFiles.*")
|
|
84
|
+
|
|
85
|
+
add_executable(devlens_tests \${TEST_SOURCES})
|
|
86
|
+
target_link_libraries(devlens_tests GTest::gtest_main)
|
|
87
|
+
include(GoogleTestDiscover)
|
|
88
|
+
gtest_discover_tests(devlens_tests)
|
|
89
|
+
`;
|
|
90
|
+
const GTEST_WRAPPER_HEADER = `// devlens_test_wrapper.h — auto-generated by devlens
|
|
91
|
+
// Include this in your source to use GoogleTest without any setup.
|
|
92
|
+
#pragma once
|
|
93
|
+
#include <gtest/gtest.h>
|
|
94
|
+
`;
|
|
95
|
+
/**
|
|
96
|
+
* When no test framework is detected for a C/C++ project,
|
|
97
|
+
* scaffold GoogleTest CMake files and return the test command.
|
|
98
|
+
*/
|
|
99
|
+
function scaffoldGoogleTest(projectRoot) {
|
|
100
|
+
const cmakePath = path_1.default.join(projectRoot, "CMakeLists.txt");
|
|
101
|
+
const headerPath = path_1.default.join(projectRoot, "devlens_test_wrapper.h");
|
|
102
|
+
// Only write CMakeLists.txt if it doesn't exist
|
|
103
|
+
if (!fs_1.default.existsSync(cmakePath)) {
|
|
104
|
+
fs_1.default.writeFileSync(cmakePath, GTEST_CMAKE, "utf-8");
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
// Append GoogleTest section if not already present
|
|
108
|
+
const existing = fs_1.default.readFileSync(cmakePath, "utf-8");
|
|
109
|
+
if (!existing.includes("googletest") && !existing.includes("GTest")) {
|
|
110
|
+
fs_1.default.appendFileSync(cmakePath, "\n" + GTEST_CMAKE);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (!fs_1.default.existsSync(headerPath)) {
|
|
114
|
+
fs_1.default.writeFileSync(headerPath, GTEST_WRAPPER_HEADER, "utf-8");
|
|
115
|
+
}
|
|
116
|
+
return "cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug && cmake --build build && cd build && ctest --output-on-failure";
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Returns the best test command for the project.
|
|
120
|
+
* Falls back to GoogleTest scaffold for C/C++ with no detected test framework.
|
|
121
|
+
*/
|
|
122
|
+
function resolveTestStrategy(detection) {
|
|
123
|
+
const { detected, projectRoot } = detection;
|
|
124
|
+
// Check for a dedicated testing framework first
|
|
125
|
+
const testingFramework = detected.find(d => d.category === "testing" && d.testCommand);
|
|
126
|
+
if (testingFramework) {
|
|
127
|
+
return { command: testingFramework.testCommand, framework: testingFramework.name, scaffolded: false };
|
|
128
|
+
}
|
|
129
|
+
// C/C++ without a dedicated test framework → scaffold GoogleTest
|
|
130
|
+
const hasCCpp = detected.some(d => ["C", "C++"].includes(d.name));
|
|
131
|
+
if (hasCCpp) {
|
|
132
|
+
const cmd = scaffoldGoogleTest(projectRoot);
|
|
133
|
+
return { command: cmd, framework: "GoogleTest (scaffolded)", scaffolded: true };
|
|
134
|
+
}
|
|
135
|
+
// Python without pytest → use unittest
|
|
136
|
+
if (detected.some(d => d.name === "Python")) {
|
|
137
|
+
return { command: "python -m pytest --tb=short", framework: "pytest (fallback)", scaffolded: false };
|
|
138
|
+
}
|
|
139
|
+
// JS/TS without jest → use jest
|
|
140
|
+
if (detected.some(d => ["JavaScript", "TypeScript"].includes(d.name))) {
|
|
141
|
+
return { command: "npx jest --passWithNoTests", framework: "Jest (fallback)", scaffolded: false };
|
|
142
|
+
}
|
|
143
|
+
// Go
|
|
144
|
+
if (detected.some(d => d.name === "Go")) {
|
|
145
|
+
return { command: "go test ./...", framework: "go test", scaffolded: false };
|
|
146
|
+
}
|
|
147
|
+
// Rust
|
|
148
|
+
if (detected.some(d => d.name === "Rust")) {
|
|
149
|
+
return { command: "cargo test", framework: "cargo test", scaffolded: false };
|
|
150
|
+
}
|
|
151
|
+
// Java
|
|
152
|
+
if (detected.some(d => d.name === "Java")) {
|
|
153
|
+
return { command: "mvn test", framework: "JUnit/Maven", scaffolded: false };
|
|
154
|
+
}
|
|
155
|
+
return { command: "", framework: "none", scaffolded: false };
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { DetectionResult } from "./detector";
|
|
2
|
+
export interface ProjectSummary {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
projectType: string;
|
|
6
|
+
primaryLanguage: string | null;
|
|
7
|
+
primaryFramework: string | null;
|
|
8
|
+
technologies: {
|
|
9
|
+
languages: string[];
|
|
10
|
+
frameworks: string[];
|
|
11
|
+
gameEngines: string[];
|
|
12
|
+
ai: string[];
|
|
13
|
+
databases: string[];
|
|
14
|
+
cicd: string[];
|
|
15
|
+
apis: string[];
|
|
16
|
+
testing: string[];
|
|
17
|
+
app: string[];
|
|
18
|
+
dsa: boolean;
|
|
19
|
+
};
|
|
20
|
+
commands: {
|
|
21
|
+
test: string | null;
|
|
22
|
+
build: string | null;
|
|
23
|
+
run: string | null;
|
|
24
|
+
};
|
|
25
|
+
stats: {
|
|
26
|
+
totalFiles: number;
|
|
27
|
+
totalDirs: number;
|
|
28
|
+
linesOfCode: number;
|
|
29
|
+
};
|
|
30
|
+
readmeSummary: string | null;
|
|
31
|
+
markdown: string;
|
|
32
|
+
}
|
|
33
|
+
export declare function summarize(detection: DetectionResult): ProjectSummary;
|
|
34
|
+
//# sourceMappingURL=summarizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarizer.d.ts","sourceRoot":"","sources":["../src/summarizer.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAgB,MAAM,YAAY,CAAC;AAE3D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,YAAY,EAAE;QACZ,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,EAAE,EAAE,MAAM,EAAE,CAAC;QACb,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,GAAG,EAAE,MAAM,EAAE,CAAC;QACd,GAAG,EAAE,OAAO,CAAC;KACd,CAAC;IACF,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;KACpB,CAAC;IACF,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAqHD,wBAAgB,SAAS,CAAC,SAAS,EAAE,eAAe,GAAG,cAAc,CAuBpE"}
|
|
@@ -0,0 +1,180 @@
|
|
|
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.summarize = summarize;
|
|
7
|
+
/**
|
|
8
|
+
* summarizer.ts — generates a human-readable project summary.
|
|
9
|
+
*/
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
function groupByCategory(detected) {
|
|
13
|
+
const get = (cat) => detected.filter(d => d.category === cat).map(d => d.name);
|
|
14
|
+
return {
|
|
15
|
+
languages: get("language"),
|
|
16
|
+
frameworks: get("framework"),
|
|
17
|
+
gameEngines: get("game-engine"),
|
|
18
|
+
ai: get("ai"),
|
|
19
|
+
databases: get("database"),
|
|
20
|
+
cicd: get("cicd"),
|
|
21
|
+
apis: get("api"),
|
|
22
|
+
testing: get("testing"),
|
|
23
|
+
app: get("app"),
|
|
24
|
+
dsa: false, // enriched below
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function inferProjectType(detected, hasDSA) {
|
|
28
|
+
const cats = new Set(detected.map(d => d.category));
|
|
29
|
+
if (cats.has("game-engine"))
|
|
30
|
+
return "Game Development";
|
|
31
|
+
if (cats.has("ai"))
|
|
32
|
+
return "AI / ML";
|
|
33
|
+
if (cats.has("app") && detected.some(d => ["Flutter", "React Native", "Expo", "iOS (Xcode)", "Android (Gradle)"].includes(d.name)))
|
|
34
|
+
return "Mobile App";
|
|
35
|
+
if (cats.has("app"))
|
|
36
|
+
return "Desktop / Cross-platform App";
|
|
37
|
+
if (hasDSA)
|
|
38
|
+
return "DSA / Competitive Programming";
|
|
39
|
+
if (cats.has("framework") || cats.has("database") || cats.has("api"))
|
|
40
|
+
return "Full-stack / Backend Web";
|
|
41
|
+
if (cats.has("language"))
|
|
42
|
+
return "General / Script / Library";
|
|
43
|
+
return "Unknown";
|
|
44
|
+
}
|
|
45
|
+
function countStats(projectRoot) {
|
|
46
|
+
let files = 0, dirs = 0, loc = 0;
|
|
47
|
+
const codeExts = new Set([".ts", ".tsx", ".js", ".jsx", ".py", ".go", ".rs", ".java", ".kt", ".c", ".cpp", ".cc", ".cxx", ".h", ".hpp", ".cs", ".rb", ".php", ".swift", ".dart", ".lua", ".zig", ".ex", ".exs", ".hs", ".scala", ".r", ".jl", ".sh", ".bash", ".ps1", ".sol"]);
|
|
48
|
+
function walk(dir, depth) {
|
|
49
|
+
if (depth > 5)
|
|
50
|
+
return;
|
|
51
|
+
let entries;
|
|
52
|
+
try {
|
|
53
|
+
entries = fs_1.default.readdirSync(dir);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
for (const e of entries) {
|
|
59
|
+
if (e === "node_modules" || e === "vendor" || e === ".git" || e === "dist" || e === "build" || e === "__pycache__")
|
|
60
|
+
continue;
|
|
61
|
+
const full = path_1.default.join(dir, e);
|
|
62
|
+
try {
|
|
63
|
+
const stat = fs_1.default.statSync(full);
|
|
64
|
+
if (stat.isDirectory()) {
|
|
65
|
+
dirs++;
|
|
66
|
+
walk(full, depth + 1);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
files++;
|
|
70
|
+
if (codeExts.has(path_1.default.extname(e).toLowerCase())) {
|
|
71
|
+
try {
|
|
72
|
+
const lines = fs_1.default.readFileSync(full, "utf-8").split("\n").length;
|
|
73
|
+
loc += lines;
|
|
74
|
+
}
|
|
75
|
+
catch { /* ignore */ }
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch { /* ignore */ }
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
walk(projectRoot, 0);
|
|
83
|
+
return { totalFiles: files, totalDirs: dirs, linesOfCode: loc };
|
|
84
|
+
}
|
|
85
|
+
function readReadme(projectRoot) {
|
|
86
|
+
for (const name of ["README.md", "README.txt", "README", "readme.md"]) {
|
|
87
|
+
const p = path_1.default.join(projectRoot, name);
|
|
88
|
+
if (fs_1.default.existsSync(p)) {
|
|
89
|
+
try {
|
|
90
|
+
const content = fs_1.default.readFileSync(p, "utf-8");
|
|
91
|
+
// Extract first non-empty paragraph (up to 400 chars)
|
|
92
|
+
const lines = content.split("\n").filter(l => l.trim() && !l.trim().startsWith("#")).join(" ").trim();
|
|
93
|
+
return lines.slice(0, 400) + (lines.length > 400 ? "…" : "");
|
|
94
|
+
}
|
|
95
|
+
catch { /* ignore */ }
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
function detectDSA(projectRoot) {
|
|
101
|
+
// Heuristic: look for common DSA folder/file names
|
|
102
|
+
const dsaHints = ["main.cpp", "main.c", "solution.py", "Solution.java", "solve.py", "main.py", "competitive", "leetcode", "codeforces", "hackerrank", "dsa", "algorithms", "data-structures", "ds"];
|
|
103
|
+
const entries = (() => { try {
|
|
104
|
+
return fs_1.default.readdirSync(projectRoot).map(e => e.toLowerCase());
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return [];
|
|
108
|
+
} })();
|
|
109
|
+
return entries.some(e => dsaHints.includes(e) || dsaHints.some(h => e.includes(h)));
|
|
110
|
+
}
|
|
111
|
+
function buildMarkdown(summary) {
|
|
112
|
+
const t = summary.technologies;
|
|
113
|
+
const lines = [
|
|
114
|
+
`# 📦 ${summary.name}`,
|
|
115
|
+
"",
|
|
116
|
+
`> **Project Type:** ${summary.projectType}`,
|
|
117
|
+
"",
|
|
118
|
+
];
|
|
119
|
+
if (summary.description)
|
|
120
|
+
lines.push(`${summary.description}`, "");
|
|
121
|
+
if (summary.readmeSummary)
|
|
122
|
+
lines.push(`**README:** ${summary.readmeSummary}`, "");
|
|
123
|
+
lines.push("## 🔍 Detected Technologies", "");
|
|
124
|
+
if (t.languages.length)
|
|
125
|
+
lines.push(`- **Languages:** ${t.languages.join(", ")}`);
|
|
126
|
+
if (t.frameworks.length)
|
|
127
|
+
lines.push(`- **Frameworks:** ${t.frameworks.join(", ")}`);
|
|
128
|
+
if (t.gameEngines.length)
|
|
129
|
+
lines.push(`- **Game Engines:** ${t.gameEngines.join(", ")}`);
|
|
130
|
+
if (t.ai.length)
|
|
131
|
+
lines.push(`- **AI / ML:** ${t.ai.join(", ")}`);
|
|
132
|
+
if (t.databases.length)
|
|
133
|
+
lines.push(`- **Databases:** ${t.databases.join(", ")}`);
|
|
134
|
+
if (t.cicd.length)
|
|
135
|
+
lines.push(`- **CI/CD:** ${t.cicd.join(", ")}`);
|
|
136
|
+
if (t.apis.length)
|
|
137
|
+
lines.push(`- **APIs:** ${t.apis.join(", ")}`);
|
|
138
|
+
if (t.testing.length)
|
|
139
|
+
lines.push(`- **Testing:** ${t.testing.join(", ")}`);
|
|
140
|
+
if (t.app.length)
|
|
141
|
+
lines.push(`- **App / Mobile:** ${t.app.join(", ")}`);
|
|
142
|
+
if (t.dsa)
|
|
143
|
+
lines.push(`- **DSA / Competitive Programming:** detected`);
|
|
144
|
+
lines.push("", "## ⚙️ Commands", "");
|
|
145
|
+
if (summary.commands.test)
|
|
146
|
+
lines.push(`- **Test:** \`${summary.commands.test}\``);
|
|
147
|
+
if (summary.commands.build)
|
|
148
|
+
lines.push(`- **Build:** \`${summary.commands.build}\``);
|
|
149
|
+
if (summary.commands.run)
|
|
150
|
+
lines.push(`- **Run:** \`${summary.commands.run}\``);
|
|
151
|
+
lines.push("", "## 📊 Project Stats", "");
|
|
152
|
+
lines.push(`- Files: ${summary.stats.totalFiles}`);
|
|
153
|
+
lines.push(`- Directories: ${summary.stats.totalDirs}`);
|
|
154
|
+
lines.push(`- Lines of code: ${summary.stats.linesOfCode.toLocaleString()}`);
|
|
155
|
+
return lines.join("\n");
|
|
156
|
+
}
|
|
157
|
+
function summarize(detection) {
|
|
158
|
+
const { projectRoot, detected, primaryLanguage, primaryFramework, testCommand, buildCommand, runCommand } = detection;
|
|
159
|
+
const name = path_1.default.basename(projectRoot);
|
|
160
|
+
const technologies = groupByCategory(detected);
|
|
161
|
+
const hasDSA = detectDSA(projectRoot);
|
|
162
|
+
technologies.dsa = hasDSA;
|
|
163
|
+
const projectType = inferProjectType(detected, hasDSA);
|
|
164
|
+
const stats = countStats(projectRoot);
|
|
165
|
+
const readmeSummary = readReadme(projectRoot);
|
|
166
|
+
const description = `${primaryLanguage ?? "Unknown"} project${primaryFramework ? ` using ${primaryFramework}` : ""}`;
|
|
167
|
+
const base = {
|
|
168
|
+
name,
|
|
169
|
+
description,
|
|
170
|
+
projectType,
|
|
171
|
+
primaryLanguage,
|
|
172
|
+
primaryFramework,
|
|
173
|
+
technologies,
|
|
174
|
+
commands: { test: testCommand, build: buildCommand, run: runCommand },
|
|
175
|
+
stats,
|
|
176
|
+
readmeSummary,
|
|
177
|
+
};
|
|
178
|
+
return { ...base, markdown: buildMarkdown(base) };
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=summarizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarizer.js","sourceRoot":"","sources":["../src/summarizer.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "devlens-cli-susmit",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Universal project summarizer, error root-cause analyzer and test runner — supports full-stack, app, game, AI, DSA and any language/framework.",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"devlens": "dist/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsc --watch",
|
|
13
|
+
"lint": "eslint src --ext .ts",
|
|
14
|
+
"test": "jest --testPathPattern=tests/",
|
|
15
|
+
"prepublishOnly": "npm run build"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"summarize",
|
|
19
|
+
"error",
|
|
20
|
+
"root-cause",
|
|
21
|
+
"testing",
|
|
22
|
+
"multi-language",
|
|
23
|
+
"fullstack",
|
|
24
|
+
"gamedev",
|
|
25
|
+
"ai",
|
|
26
|
+
"dsa",
|
|
27
|
+
"cicd",
|
|
28
|
+
"database",
|
|
29
|
+
"api",
|
|
30
|
+
"cross-platform"
|
|
31
|
+
],
|
|
32
|
+
"author": "",
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"chalk": "^5.3.0",
|
|
36
|
+
"commander": "^12.0.0",
|
|
37
|
+
"glob": "^10.3.12",
|
|
38
|
+
"ora": "^8.0.1",
|
|
39
|
+
"yaml": "^2.4.1"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/jest": "^29.5.12",
|
|
43
|
+
"@types/node": "^20.12.7",
|
|
44
|
+
"@typescript-eslint/eslint-plugin": "^7.7.1",
|
|
45
|
+
"@typescript-eslint/parser": "^7.7.1",
|
|
46
|
+
"eslint": "^8.57.0",
|
|
47
|
+
"jest": "^29.7.0",
|
|
48
|
+
"ts-jest": "^29.1.2",
|
|
49
|
+
"typescript": "^5.4.5"
|
|
50
|
+
},
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": ">=18.0.0"
|
|
53
|
+
},
|
|
54
|
+
"os": ["linux", "darwin", "win32"],
|
|
55
|
+
"files": [
|
|
56
|
+
"dist/",
|
|
57
|
+
"README.md",
|
|
58
|
+
"LICENSE"
|
|
59
|
+
]
|
|
60
|
+
}
|