codemelt-core 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.
- package/dist/analyzer/compressionAnalyzer.d.ts +4 -0
- package/dist/analyzer/compressionAnalyzer.d.ts.map +1 -0
- package/dist/analyzer/compressionAnalyzer.js +21 -0
- package/dist/analyzer/index.d.ts +3 -0
- package/dist/analyzer/index.d.ts.map +1 -0
- package/dist/analyzer/index.js +2 -0
- package/dist/analyzer/prompts/onboarding.d.ts +3 -0
- package/dist/analyzer/prompts/onboarding.d.ts.map +1 -0
- package/dist/analyzer/prompts/onboarding.js +14 -0
- package/dist/analyzer/prompts/performance.d.ts +3 -0
- package/dist/analyzer/prompts/performance.d.ts.map +1 -0
- package/dist/analyzer/prompts/performance.js +18 -0
- package/dist/analyzer/prompts/refactor.d.ts +3 -0
- package/dist/analyzer/prompts/refactor.d.ts.map +1 -0
- package/dist/analyzer/prompts/refactor.js +19 -0
- package/dist/analyzer/purposeDetector.d.ts +4 -0
- package/dist/analyzer/purposeDetector.d.ts.map +1 -0
- package/dist/analyzer/purposeDetector.js +141 -0
- package/dist/analyzer/readinessAnalyzer.d.ts +4 -0
- package/dist/analyzer/readinessAnalyzer.d.ts.map +1 -0
- package/dist/analyzer/readinessAnalyzer.js +111 -0
- package/dist/analyzer/repositoryAnalyzer.d.ts +4 -0
- package/dist/analyzer/repositoryAnalyzer.d.ts.map +1 -0
- package/dist/analyzer/repositoryAnalyzer.js +231 -0
- package/dist/analyzer/rules.d.ts +3 -0
- package/dist/analyzer/rules.d.ts.map +1 -0
- package/dist/analyzer/rules.js +156 -0
- package/dist/analyzer/types.d.ts +70 -0
- package/dist/analyzer/types.d.ts.map +1 -0
- package/dist/analyzer/types.js +1 -0
- package/dist/analyzer/workflowGenerator.d.ts +3 -0
- package/dist/analyzer/workflowGenerator.d.ts.map +1 -0
- package/dist/analyzer/workflowGenerator.js +22 -0
- package/dist/filters/shouldIgnore.d.ts +2 -0
- package/dist/filters/shouldIgnore.d.ts.map +1 -0
- package/dist/filters/shouldIgnore.js +10 -0
- package/dist/formatter/generateRepositoryContext.d.ts +10 -0
- package/dist/formatter/generateRepositoryContext.d.ts.map +1 -0
- package/dist/formatter/generateRepositoryContext.js +311 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/prioritizer/scoreFile.d.ts +3 -0
- package/dist/prioritizer/scoreFile.d.ts.map +1 -0
- package/dist/prioritizer/scoreFile.js +25 -0
- package/dist/prioritizer/sortFiles.d.ts +3 -0
- package/dist/prioritizer/sortFiles.d.ts.map +1 -0
- package/dist/prioritizer/sortFiles.js +9 -0
- package/dist/scanner/importanceDetector.d.ts +3 -0
- package/dist/scanner/importanceDetector.d.ts.map +1 -0
- package/dist/scanner/importanceDetector.js +70 -0
- package/dist/scanner/scanFiles.d.ts +3 -0
- package/dist/scanner/scanFiles.d.ts.map +1 -0
- package/dist/scanner/scanFiles.js +127 -0
- package/dist/summarizer/extractPatterns.d.ts +12 -0
- package/dist/summarizer/extractPatterns.d.ts.map +1 -0
- package/dist/summarizer/extractPatterns.js +83 -0
- package/dist/summarizer/flowDetector.d.ts +6 -0
- package/dist/summarizer/flowDetector.d.ts.map +1 -0
- package/dist/summarizer/flowDetector.js +29 -0
- package/dist/summarizer/index.d.ts +5 -0
- package/dist/summarizer/index.d.ts.map +1 -0
- package/dist/summarizer/index.js +25 -0
- package/dist/summarizer/inferPurpose.d.ts +10 -0
- package/dist/summarizer/inferPurpose.d.ts.map +1 -0
- package/dist/summarizer/inferPurpose.js +162 -0
- package/dist/summarizer/summarizeDirectory.d.ts +3 -0
- package/dist/summarizer/summarizeDirectory.d.ts.map +1 -0
- package/dist/summarizer/summarizeDirectory.js +87 -0
- package/dist/summarizer/summarizeFile.d.ts +4 -0
- package/dist/summarizer/summarizeFile.d.ts.map +1 -0
- package/dist/summarizer/summarizeFile.js +45 -0
- package/dist/summarizer/types.d.ts +35 -0
- package/dist/summarizer/types.d.ts.map +1 -0
- package/dist/summarizer/types.js +1 -0
- package/dist/tokenizer/estimateTokens.d.ts +2 -0
- package/dist/tokenizer/estimateTokens.d.ts.map +1 -0
- package/dist/tokenizer/estimateTokens.js +3 -0
- package/dist/tokenizer/estimateWords.d.ts +2 -0
- package/dist/tokenizer/estimateWords.d.ts.map +1 -0
- package/dist/tokenizer/estimateWords.js +6 -0
- package/package.json +28 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
export function summarizeDirectory(fileSummaries) {
|
|
2
|
+
const dirFilesMap = {};
|
|
3
|
+
// Group file summaries under their parent directory paths
|
|
4
|
+
for (const [filePath, summary] of Object.entries(fileSummaries)) {
|
|
5
|
+
const parts = filePath.split("/");
|
|
6
|
+
parts.pop(); // Remove the filename
|
|
7
|
+
// Track parent folders recursively
|
|
8
|
+
let currentPath = "";
|
|
9
|
+
for (const part of parts) {
|
|
10
|
+
currentPath = currentPath ? `${currentPath}/${part}` : part;
|
|
11
|
+
if (!dirFilesMap[currentPath]) {
|
|
12
|
+
dirFilesMap[currentPath] = [];
|
|
13
|
+
}
|
|
14
|
+
dirFilesMap[currentPath].push(summary);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const directorySummaries = {};
|
|
18
|
+
for (const [dirPath, summaries] of Object.entries(dirFilesMap)) {
|
|
19
|
+
const totalFiles = summaries.length;
|
|
20
|
+
const lowerDir = dirPath.toLowerCase();
|
|
21
|
+
let componentsCount = 0;
|
|
22
|
+
let controllersCount = 0;
|
|
23
|
+
let servicesCount = 0;
|
|
24
|
+
let middlewareCount = 0;
|
|
25
|
+
let configCount = 0;
|
|
26
|
+
let testCount = 0;
|
|
27
|
+
for (const file of summaries) {
|
|
28
|
+
const lowerName = file.name.toLowerCase();
|
|
29
|
+
const lowerFilePath = file.path.toLowerCase();
|
|
30
|
+
if (lowerName.includes("config") || lowerName.startsWith(".") || lowerName.endsWith(".json")) {
|
|
31
|
+
configCount++;
|
|
32
|
+
}
|
|
33
|
+
else if (lowerName.includes("controller") || lowerFilePath.includes("/controllers/")) {
|
|
34
|
+
controllersCount++;
|
|
35
|
+
}
|
|
36
|
+
else if (lowerName.includes("service") || lowerFilePath.includes("/services/")) {
|
|
37
|
+
servicesCount++;
|
|
38
|
+
}
|
|
39
|
+
else if (lowerName.includes("middleware") || lowerFilePath.includes("/middleware/")) {
|
|
40
|
+
middlewareCount++;
|
|
41
|
+
}
|
|
42
|
+
else if (lowerName.endsWith(".tsx") || lowerName.endsWith(".jsx") || lowerFilePath.includes("/components/")) {
|
|
43
|
+
componentsCount++;
|
|
44
|
+
}
|
|
45
|
+
if (lowerFilePath.includes("test") || lowerFilePath.includes("spec") || lowerFilePath.includes("__tests__")) {
|
|
46
|
+
testCount++;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
let summaryText = "";
|
|
50
|
+
// Heuristics mapping to derive highly contextual summaries
|
|
51
|
+
if (lowerDir.includes("controllers") || (controllersCount / totalFiles) > 0.5) {
|
|
52
|
+
summaryText = "Contains logical controllers processing API routes.";
|
|
53
|
+
}
|
|
54
|
+
else if (lowerDir.includes("services") || (servicesCount / totalFiles) > 0.5) {
|
|
55
|
+
summaryText = "Provides services handling backend logic and data queries.";
|
|
56
|
+
}
|
|
57
|
+
else if (lowerDir.includes("middleware") || (middlewareCount / totalFiles) > 0.5) {
|
|
58
|
+
summaryText = "Contains middlewares handling request pipelines.";
|
|
59
|
+
}
|
|
60
|
+
else if (lowerDir.includes("components/ui") || lowerDir.endsWith("/ui")) {
|
|
61
|
+
summaryText = "Contains styling and presentational UI components.";
|
|
62
|
+
}
|
|
63
|
+
else if (lowerDir.includes("components") || (componentsCount / totalFiles) > 0.5) {
|
|
64
|
+
summaryText = "Contains user interface view components.";
|
|
65
|
+
}
|
|
66
|
+
else if (lowerDir.includes("utils") || lowerDir.includes("helpers") || lowerDir.includes("lib")) {
|
|
67
|
+
summaryText = "Contains helper functions and shared utilities.";
|
|
68
|
+
}
|
|
69
|
+
else if (lowerDir.includes("app/api") || lowerDir.includes("pages/api")) {
|
|
70
|
+
summaryText = "Contains API route endpoint handlers.";
|
|
71
|
+
}
|
|
72
|
+
else if (lowerDir.includes("test") || lowerDir.includes("spec") || (testCount / totalFiles) > 0.5) {
|
|
73
|
+
summaryText = "Contains test files.";
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
// General fallbacks based on naming clues
|
|
77
|
+
const dirName = dirPath.split("/").pop() || "modules";
|
|
78
|
+
summaryText = `Contains files inside the ${dirName} folder.`;
|
|
79
|
+
}
|
|
80
|
+
directorySummaries[dirPath] = {
|
|
81
|
+
path: dirPath,
|
|
82
|
+
summary: summaryText,
|
|
83
|
+
itemCount: totalFiles,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
return directorySummaries;
|
|
87
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarizeFile.d.ts","sourceRoot":"","sources":["../../src/summarizer/summarizeFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAIjD,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,mBAAmB,CAgDpE"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { extractPatterns } from "./extractPatterns.js";
|
|
2
|
+
import { inferPurpose } from "./inferPurpose.js";
|
|
3
|
+
export function summarizeFile(file) {
|
|
4
|
+
// Extract regex patterns from the text content
|
|
5
|
+
const patterns = extractPatterns(file.content, file.path, file.name);
|
|
6
|
+
// Infer the semantic purpose of the file
|
|
7
|
+
const purpose = inferPurpose(file.path, file.name, patterns);
|
|
8
|
+
// Map router details if discovered
|
|
9
|
+
const routeStrings = [];
|
|
10
|
+
if (patterns.routes.length > 0) {
|
|
11
|
+
for (const r of patterns.routes) {
|
|
12
|
+
routeStrings.push(`${r.method} ${r.path}`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
// Next.js Route handlers (app/api/.../route.ts)
|
|
16
|
+
if (file.path.includes("app/api/") && (file.name.startsWith("route.ts") || file.name.startsWith("route.js"))) {
|
|
17
|
+
// Extract endpoint path from the relative path
|
|
18
|
+
const parts = file.path.split("app/api/");
|
|
19
|
+
if (parts.length > 1) {
|
|
20
|
+
const endpoint = "/api/" + parts[1].replace(/\/route\.(ts|js)$/, "");
|
|
21
|
+
// Map exported methods
|
|
22
|
+
const methods = ["GET", "POST", "PUT", "DELETE", "PATCH"];
|
|
23
|
+
for (const m of methods) {
|
|
24
|
+
if (patterns.exports.includes(m)) {
|
|
25
|
+
routeStrings.push(`${m} ${endpoint}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// If no explicit method exports were caught, register standard GET/POST
|
|
29
|
+
if (routeStrings.length === 0) {
|
|
30
|
+
routeStrings.push(`ALL ${endpoint}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
path: file.path,
|
|
36
|
+
name: file.name,
|
|
37
|
+
summary: purpose.summary,
|
|
38
|
+
importance: file.importance,
|
|
39
|
+
isEntrypoint: purpose.isEntrypoint,
|
|
40
|
+
entrypointType: purpose.entrypointType,
|
|
41
|
+
routes: routeStrings.length > 0 ? routeStrings : undefined,
|
|
42
|
+
exports: patterns.exports.length > 0 ? patterns.exports : undefined,
|
|
43
|
+
imports: patterns.imports.length > 0 ? patterns.imports : undefined,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { FileImportance } from "@codemelt/shared";
|
|
2
|
+
export type EntrypointType = "server" | "frontend" | "app-shell" | "router-root" | "layout-root";
|
|
3
|
+
export interface FileSemanticSummary {
|
|
4
|
+
path: string;
|
|
5
|
+
name: string;
|
|
6
|
+
summary: string;
|
|
7
|
+
importance: FileImportance;
|
|
8
|
+
isEntrypoint: boolean;
|
|
9
|
+
entrypointType?: EntrypointType;
|
|
10
|
+
routes?: string[];
|
|
11
|
+
exports?: string[];
|
|
12
|
+
imports?: string[];
|
|
13
|
+
}
|
|
14
|
+
export interface DirectorySemanticSummary {
|
|
15
|
+
path: string;
|
|
16
|
+
summary: string;
|
|
17
|
+
itemCount: number;
|
|
18
|
+
}
|
|
19
|
+
export interface RouteDetail {
|
|
20
|
+
path: string;
|
|
21
|
+
method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "ALL" | "UNKNOWN";
|
|
22
|
+
handlerFile: string;
|
|
23
|
+
}
|
|
24
|
+
export interface RequestFlow {
|
|
25
|
+
name: string;
|
|
26
|
+
steps: string[];
|
|
27
|
+
}
|
|
28
|
+
export interface SemanticRepositoryAnalysis {
|
|
29
|
+
fileSummaries: Record<string, FileSemanticSummary>;
|
|
30
|
+
directorySummaries: Record<string, DirectorySemanticSummary>;
|
|
31
|
+
entrypoints: FileSemanticSummary[];
|
|
32
|
+
routes: RouteDetail[];
|
|
33
|
+
flows: RequestFlow[];
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/summarizer/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,aAAa,CAAC;AAEjG,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,cAAc,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;IACxE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACnD,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAC7D,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estimateTokens.d.ts","sourceRoot":"","sources":["../../src/tokenizer/estimateTokens.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAC1B,OAAO,EAAE,MAAM,GAChB,MAAM,CAER"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estimateWords.d.ts","sourceRoot":"","sources":["../../src/tokenizer/estimateWords.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CACzB,OAAO,EAAE,MAAM,GAChB,MAAM,CAKR"}
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "codemelt-core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"minimatch": "^10.2.5",
|
|
23
|
+
"codemelt-shared": "^0.1.0"
|
|
24
|
+
},
|
|
25
|
+
"engines": {
|
|
26
|
+
"node": ">=18"
|
|
27
|
+
}
|
|
28
|
+
}
|