@avrm/svi 0.0.1
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/bin/cli.js +6 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/package.json +39 -0
- package/dist/src/commands/cliOptions.js +58 -0
- package/dist/src/commands/cliOptions.js.map +1 -0
- package/dist/src/commands/entryPoint.js +90 -0
- package/dist/src/commands/entryPoint.js.map +1 -0
- package/dist/src/commands/env.js +141 -0
- package/dist/src/commands/env.js.map +1 -0
- package/dist/src/commands/init.js +108 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/run.js +58 -0
- package/dist/src/commands/run.js.map +1 -0
- package/dist/src/commands/runner/checkerForRunManager.js +49 -0
- package/dist/src/commands/runner/checkerForRunManager.js.map +1 -0
- package/dist/src/commands/runner/runManager.js +137 -0
- package/dist/src/commands/runner/runManager.js.map +1 -0
- package/dist/src/commands/runner/runStatistics.js +55 -0
- package/dist/src/commands/runner/runStatistics.js.map +1 -0
- package/dist/src/config/config.js +135 -0
- package/dist/src/config/config.js.map +1 -0
- package/dist/src/config/configFinder.js +37 -0
- package/dist/src/config/configFinder.js.map +1 -0
- package/dist/src/llm/llm.js +117 -0
- package/dist/src/llm/llm.js.map +1 -0
- package/dist/src/llm/llmServiceByModel.js +43 -0
- package/dist/src/llm/llmServiceByModel.js.map +1 -0
- package/dist/src/llm/llmUtils.js +23 -0
- package/dist/src/llm/llmUtils.js.map +1 -0
- package/dist/src/llm/theMaximalistLlmJs/LlmJsFactories.js +27 -0
- package/dist/src/llm/theMaximalistLlmJs/LlmJsFactories.js.map +1 -0
- package/dist/src/llm/theMaximalistLlmJs/ModelUsageWrapper.js +55 -0
- package/dist/src/llm/theMaximalistLlmJs/ModelUsageWrapper.js.map +1 -0
- package/dist/src/svi/cacheManager.js +187 -0
- package/dist/src/svi/cacheManager.js.map +1 -0
- package/dist/src/svi/promptBuilder.js +59 -0
- package/dist/src/svi/promptBuilder.js.map +1 -0
- package/dist/src/svi/prompts/extractDeclarations.js +25 -0
- package/dist/src/svi/prompts/extractDeclarations.js.map +1 -0
- package/dist/src/svi/prompts/generate.js +36 -0
- package/dist/src/svi/prompts/generate.js.map +1 -0
- package/dist/src/svi/sviChecks.js +131 -0
- package/dist/src/svi/sviChecks.js.map +1 -0
- package/dist/src/svi/sviDependencies.js +139 -0
- package/dist/src/svi/sviDependencies.js.map +1 -0
- package/dist/src/svi/sviFileClass.js +105 -0
- package/dist/src/svi/sviFileClass.js.map +1 -0
- package/dist/src/svi/sviFileOrderOptimizer/sviDependencyCycleAnalyzer.js +154 -0
- package/dist/src/svi/sviFileOrderOptimizer/sviDependencyCycleAnalyzer.js.map +1 -0
- package/dist/src/svi/sviFileOrderOptimizer/sviDependencyFinder.js +57 -0
- package/dist/src/svi/sviFileOrderOptimizer/sviDependencyFinder.js.map +1 -0
- package/dist/src/svi/sviFileOrderOptimizer/sviFileOrderOptimizer.js +93 -0
- package/dist/src/svi/sviFileOrderOptimizer/sviFileOrderOptimizer.js.map +1 -0
- package/dist/src/svi/sviFileOrderOptimizer/types.js +3 -0
- package/dist/src/svi/sviFileOrderOptimizer/types.js.map +1 -0
- package/dist/src/svi/sviImportPrompts.js +138 -0
- package/dist/src/svi/sviImportPrompts.js.map +1 -0
- package/dist/src/svi/sviLoader.js +138 -0
- package/dist/src/svi/sviLoader.js.map +1 -0
- package/dist/src/svi/sviParser/parsedSviDirectory.js +34 -0
- package/dist/src/svi/sviParser/parsedSviDirectory.js.map +1 -0
- package/dist/src/svi/sviParser/sviParser.js +205 -0
- package/dist/src/svi/sviParser/sviParser.js.map +1 -0
- package/dist/src/svi/sviProcessor.js +138 -0
- package/dist/src/svi/sviProcessor.js.map +1 -0
- package/dist/src/svi/types.js +3 -0
- package/dist/src/svi/types.js.map +1 -0
- package/dist/src/utils/codeClear.js +29 -0
- package/dist/src/utils/codeClear.js.map +1 -0
- package/dist/src/utils/constants.js +6 -0
- package/dist/src/utils/constants.js.map +1 -0
- package/dist/src/utils/fastGlobWrapper.js +34 -0
- package/dist/src/utils/fastGlobWrapper.js.map +1 -0
- package/dist/src/utils/file.js +137 -0
- package/dist/src/utils/file.js.map +1 -0
- package/dist/src/utils/file2.js +26 -0
- package/dist/src/utils/file2.js.map +1 -0
- package/dist/src/utils/logger.js +105 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/utils.js +34 -0
- package/dist/src/utils/utils.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1,138 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.isActive = isActive;
|
|
40
|
+
exports.processSVIFile = processSVIFile;
|
|
41
|
+
// src/commands/runner/sviProcessor.ts
|
|
42
|
+
const path_1 = __importDefault(require("path"));
|
|
43
|
+
const fs_1 = __importDefault(require("fs"));
|
|
44
|
+
//import { SVIParser } from "./sviParser/sviParser";
|
|
45
|
+
const parsedSviDirectory_1 = __importDefault(require("./sviParser/parsedSviDirectory"));
|
|
46
|
+
const cacheManager_1 = __importDefault(require("./cacheManager"));
|
|
47
|
+
const logger_1 = __importDefault(require("../utils/logger"));
|
|
48
|
+
const promptBuilder_1 = require("./promptBuilder");
|
|
49
|
+
const fileUtils = __importStar(require("../utils/file"));
|
|
50
|
+
const codeClear_1 = require("../utils/codeClear");
|
|
51
|
+
const runStatistics_1 = __importDefault(require("../commands/runner/runStatistics"));
|
|
52
|
+
/**
|
|
53
|
+
* Check if file is active (according to options Active=true)
|
|
54
|
+
*/
|
|
55
|
+
function isActive(svi) {
|
|
56
|
+
if (!svi.options)
|
|
57
|
+
return true; // Default is active
|
|
58
|
+
if (svi.options["Active"] === undefined)
|
|
59
|
+
return true;
|
|
60
|
+
return svi.options["Active"] === true || svi.options["Active"] === "True";
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Load and process a single *.svi file
|
|
64
|
+
*/
|
|
65
|
+
async function processSVIFile(sviFileToLoad, llm, config) {
|
|
66
|
+
try {
|
|
67
|
+
const sviParserDirectory = parsedSviDirectory_1.default.getInstance();
|
|
68
|
+
const svi = sviParserDirectory.getParsedSviFile(sviFileToLoad.filePath);
|
|
69
|
+
const runStatistics = runStatistics_1.default.getInstance();
|
|
70
|
+
if (!svi) {
|
|
71
|
+
logger_1.default.error(`Failed to parse SVI file: ${sviFileToLoad.filePath}`);
|
|
72
|
+
runStatistics.addFileFailed(sviFileToLoad.filePath);
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
// Check if active
|
|
76
|
+
if (!isActive(svi)) {
|
|
77
|
+
logger_1.default.info(`Skipping inactive SVI file: ${sviFileToLoad.filePath}`);
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
// 6) Get destination file from the .svi file (from # Destination File section)
|
|
81
|
+
const destinationFromSvi = svi.destinationFile?.trim();
|
|
82
|
+
if (!destinationFromSvi) {
|
|
83
|
+
logger_1.default.info(`No destination file ${sviFileToLoad.filePath} provided. Skipping.`);
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
const fileFolder = path_1.default.dirname(sviFileToLoad.filePath);
|
|
87
|
+
// Check cache
|
|
88
|
+
const cache = new cacheManager_1.default(fileFolder);
|
|
89
|
+
if (cache.isSviCacheValid(sviFileToLoad.filePath)) {
|
|
90
|
+
if (!fileUtils.exists(svi.getDestinationFileFullPath() || "")) {
|
|
91
|
+
logger_1.default.info(`Destination file ${destinationFromSvi} does not exist. Regenerating...`);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
logger_1.default.info(`Cache is up to date, skipping file: ${sviFileToLoad.filePath}`);
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
sviParserDirectory.logParseMessagesForFile(sviFileToLoad.filePath);
|
|
99
|
+
logger_1.default.trace(`Building prompt for file: ${sviFileToLoad.filePath}`);
|
|
100
|
+
const prompt = await (0, promptBuilder_1.buildPrompt)(svi, config, llm, sviFileToLoad.isPreliminary);
|
|
101
|
+
if (!prompt || prompt.trim().length === 0) {
|
|
102
|
+
logger_1.default.error(`Error creating prompt for file: ${sviFileToLoad.filePath}.`);
|
|
103
|
+
runStatistics.addFileFailed(sviFileToLoad.filePath);
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
logger_1.default.debug(`Prompt for ${sviFileToLoad.filePath} was built.`);
|
|
107
|
+
logger_1.default.info(`Ask LLM for ${sviFileToLoad.filePath}...`);
|
|
108
|
+
const promptDescription = `Generation for SVI file ${svi.getSviFileRelativePath()}`;
|
|
109
|
+
const generated = await llm.ask(prompt, undefined, promptDescription);
|
|
110
|
+
if (!generated || generated.trim().length === 0) {
|
|
111
|
+
logger_1.default.error(`LLM returned no result for ${sviFileToLoad.filePath} or error occurred. Skipping.`);
|
|
112
|
+
runStatistics.addFileFailed(sviFileToLoad.filePath);
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
const clearedCode = (0, codeClear_1.clearCodeInLlmResponse)(generated);
|
|
116
|
+
const destPath = fileUtils.constructFullPath(fileFolder, destinationFromSvi);
|
|
117
|
+
const destDir = path_1.default.dirname(destPath);
|
|
118
|
+
await fileUtils.ensureDir(destDir);
|
|
119
|
+
logger_1.default.info(`Write generated code to ${destPath}`);
|
|
120
|
+
const fileIsNew = !(await fileUtils.exists(destPath));
|
|
121
|
+
await fs_1.default.writeFileSync(destPath, clearedCode);
|
|
122
|
+
if (!sviFileToLoad.isPreliminary) {
|
|
123
|
+
cache.updateSviCache(sviFileToLoad.filePath);
|
|
124
|
+
}
|
|
125
|
+
if (fileIsNew) {
|
|
126
|
+
runStatistics.addFileCreated(destPath);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
runStatistics.addFileUpdated(destPath);
|
|
130
|
+
}
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
logger_1.default.error(`Error processing SVI file ${sviFileToLoad.filePath}: ${err.message}`);
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=sviProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sviProcessor.js","sourceRoot":"","sources":["../../../src/svi/sviProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/svi/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.clearCodeInLlmResponse = clearCodeInLlmResponse;
|
|
4
|
+
// src/utils/codeClear.ts
|
|
5
|
+
function clearCodeInLlmResponse(llmResponse) {
|
|
6
|
+
const lines = llmResponse.split("\n");
|
|
7
|
+
const extractedCodeLines = [];
|
|
8
|
+
let inCodeBlock = false;
|
|
9
|
+
let foundAnyCodeBlocks = false;
|
|
10
|
+
for (const line of lines) {
|
|
11
|
+
const trimmedLine = line.trim();
|
|
12
|
+
if (trimmedLine.startsWith("\`\`\`")) {
|
|
13
|
+
inCodeBlock = !inCodeBlock;
|
|
14
|
+
foundAnyCodeBlocks = true;
|
|
15
|
+
// Do not include the markdown code block markers in the extracted content
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
if (inCodeBlock) {
|
|
19
|
+
extractedCodeLines.push(line);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
if (foundAnyCodeBlocks) {
|
|
23
|
+
return extractedCodeLines.join("\n");
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
return llmResponse;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=codeClear.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codeClear.js","sourceRoot":"","sources":["../../../src/utils/codeClear.ts"],"names":[],"mappings":";;AACA,wDA0BC;AA3BD,yBAAyB;AACzB,SAAgB,sBAAsB,CAAC,WAAmB;IACxD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,kBAAkB,GAAa,EAAE,CAAC;IACxC,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAEhC,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,WAAW,GAAG,CAAC,WAAW,CAAC;YAC3B,kBAAkB,GAAG,IAAI,CAAC;YAC1B,0EAA0E;YAC1E,SAAS;QACX,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,IAAI,kBAAkB,EAAE,CAAC;QACvB,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,gBAAgB,GAAG,SAAS,CAAC;AAC7B,QAAA,gBAAgB,GAAG,SAAS,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
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.fastGlobWrapper = void 0;
|
|
7
|
+
const fast_glob_1 = __importDefault(require("fast-glob"));
|
|
8
|
+
/**
|
|
9
|
+
* A wrapper around the fast-glob library to facilitate mocking in tests.
|
|
10
|
+
*/
|
|
11
|
+
exports.fastGlobWrapper = {
|
|
12
|
+
/**
|
|
13
|
+
* Finds files and directories asynchronously based on the given patterns and options.
|
|
14
|
+
* @param patterns A string or an array of strings for glob patterns.
|
|
15
|
+
* @param options Options for fast-glob.
|
|
16
|
+
* @returns A promise that resolves to an array of matching file paths.
|
|
17
|
+
*/
|
|
18
|
+
async fg(patterns, options) {
|
|
19
|
+
return (0, fast_glob_1.default)(patterns, options);
|
|
20
|
+
},
|
|
21
|
+
/**
|
|
22
|
+
* Finds files and directories synchronously based on the given patterns and options.
|
|
23
|
+
* @param patterns A string or an array of strings for glob patterns.
|
|
24
|
+
* @param options Options for fast-glob.
|
|
25
|
+
* @returns An array of matching file paths.
|
|
26
|
+
*/
|
|
27
|
+
/*globSync(
|
|
28
|
+
patterns: string | readonly string[],
|
|
29
|
+
options?: fg.Options,
|
|
30
|
+
): string[] {
|
|
31
|
+
return fg.sync(patterns, options);
|
|
32
|
+
},*/
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=fastGlobWrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fastGlobWrapper.js","sourceRoot":"","sources":["../../../src/utils/fastGlobWrapper.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA2B;AAE3B;;GAEG;AACU,QAAA,eAAe,GAAG;IAC7B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,CACN,QAA2B,EAC3B,OAAoB;QAEpB,OAAO,IAAA,mBAAE,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACH;;;;;QAKI;CACL,CAAC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
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.getRelativePath = void 0;
|
|
7
|
+
exports.exists = exists;
|
|
8
|
+
exports.isDirectory = isDirectory;
|
|
9
|
+
exports.isFile = isFile;
|
|
10
|
+
exports.readJSON = readJSON;
|
|
11
|
+
exports.writeJSON = writeJSON;
|
|
12
|
+
exports.createFileIfNotExists = createFileIfNotExists;
|
|
13
|
+
exports.ensureDir = ensureDir;
|
|
14
|
+
exports.getPathFromFile = getPathFromFile;
|
|
15
|
+
exports.constructFullPath = constructFullPath;
|
|
16
|
+
exports.fileNameContainsExtension = fileNameContainsExtension;
|
|
17
|
+
exports.getFileExtension = getFileExtension;
|
|
18
|
+
exports.fileHasExtension = fileHasExtension;
|
|
19
|
+
// src/utils/file.ts
|
|
20
|
+
const fs_1 = __importDefault(require("fs"));
|
|
21
|
+
const path_1 = __importDefault(require("path"));
|
|
22
|
+
const logger_1 = __importDefault(require("./logger"));
|
|
23
|
+
const file2_1 = require("./file2");
|
|
24
|
+
Object.defineProperty(exports, "getRelativePath", { enumerable: true, get: function () { return file2_1.getRelativePath; } });
|
|
25
|
+
/**
|
|
26
|
+
* Prüft, ob ein Pfad existiert
|
|
27
|
+
*/
|
|
28
|
+
function exists(filePath) {
|
|
29
|
+
return fs_1.default.existsSync(filePath);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Prüft, ob ein Pfad ein Verzeichnis ist
|
|
33
|
+
*/
|
|
34
|
+
function isDirectory(dirPath) {
|
|
35
|
+
try {
|
|
36
|
+
return fs_1.default.statSync(dirPath).isDirectory();
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Prüft, ob ein Pfad eine Datei ist
|
|
44
|
+
*/
|
|
45
|
+
function isFile(filePath) {
|
|
46
|
+
try {
|
|
47
|
+
return fs_1.default.statSync(filePath).isFile();
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Liest eine JSON-Datei
|
|
55
|
+
*/
|
|
56
|
+
function readJSON(filePath) {
|
|
57
|
+
const content = fs_1.default.readFileSync(filePath, "utf-8");
|
|
58
|
+
return JSON.parse(content);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Schreibt eine JSON-Datei (mit schöner Formatierung)
|
|
62
|
+
*/
|
|
63
|
+
function writeJSON(filePath, data) {
|
|
64
|
+
const dir = path_1.default.dirname(filePath);
|
|
65
|
+
if (!exists(dir)) {
|
|
66
|
+
fs_1.default.mkdirSync(dir, { recursive: true });
|
|
67
|
+
}
|
|
68
|
+
fs_1.default.writeFileSync(filePath, JSON.stringify(data, null, 2), "utf-8");
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Erstellt eine leere Datei mit Inhalt (falls sie nicht existiert)
|
|
72
|
+
*/
|
|
73
|
+
function createFileIfNotExists(filePath, content = "") {
|
|
74
|
+
if (!exists(filePath)) {
|
|
75
|
+
const dir = path_1.default.dirname(filePath);
|
|
76
|
+
if (!exists(dir)) {
|
|
77
|
+
fs_1.default.mkdirSync(dir, { recursive: true });
|
|
78
|
+
}
|
|
79
|
+
fs_1.default.writeFileSync(filePath, content, "utf-8");
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Holt den aktuellen Projekt-Stammordner (wo `svi.json` liegt)
|
|
84
|
+
*/
|
|
85
|
+
/*export function getProjectRoot(
|
|
86
|
+
startDir: string = process.cwd(),
|
|
87
|
+
): string | null {
|
|
88
|
+
let current = startDir;
|
|
89
|
+
|
|
90
|
+
while (true) {
|
|
91
|
+
const sviPath = path.join(current, "svi.json");
|
|
92
|
+
if (exists(sviPath)) {
|
|
93
|
+
return current;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const parent = path.dirname(current);
|
|
97
|
+
if (parent === current) break; // Root erreicht
|
|
98
|
+
current = parent;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return null;
|
|
102
|
+
}*/
|
|
103
|
+
async function ensureDir(dirPath) {
|
|
104
|
+
try {
|
|
105
|
+
await fs_1.default.promises.mkdir(dirPath, { recursive: true });
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
//console.error(`Error creating folder(s) for the path ${dirPath}:`, error);
|
|
109
|
+
logger_1.default.error(`Error creating folder(s) for the path ${dirPath}: ${error}`);
|
|
110
|
+
throw error;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function getPathFromFile(fullPath) {
|
|
114
|
+
return path_1.default.dirname(fullPath);
|
|
115
|
+
}
|
|
116
|
+
function constructFullPath(folderPathOrAnotherFileFullPath, filename) {
|
|
117
|
+
let filePath = folderPathOrAnotherFileFullPath;
|
|
118
|
+
if (isFile(filePath)) {
|
|
119
|
+
filePath = getPathFromFile(filePath);
|
|
120
|
+
}
|
|
121
|
+
if (path_1.default.isAbsolute(filename)) {
|
|
122
|
+
return filename;
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
return path_1.default.join(filePath, filename);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function fileNameContainsExtension(fileName) {
|
|
129
|
+
return path_1.default.extname(fileName) !== "";
|
|
130
|
+
}
|
|
131
|
+
function getFileExtension(fileName) {
|
|
132
|
+
return path_1.default.extname(fileName);
|
|
133
|
+
}
|
|
134
|
+
function fileHasExtension(fileName, extension) {
|
|
135
|
+
return path_1.default.extname(fileName).toLowerCase() === extension.toLowerCase();
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/utils/file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
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.getRelativePath = getRelativePath;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
function getRelativePath(fileOrFolderFullPath, basePath) {
|
|
9
|
+
const relativeToBase = path_1.default.relative(basePath, fileOrFolderFullPath);
|
|
10
|
+
// path.relative will return a path that starts with '..' if fileOrFolderFullPath
|
|
11
|
+
// is not a subpath of basePath (i.e., it needs to go up the directory tree).
|
|
12
|
+
// It can also return '.' if the paths are identical.
|
|
13
|
+
// We need to check for '..' specifically, but also consider Windows paths where
|
|
14
|
+
// it might be '..\'.
|
|
15
|
+
const isSubpath = !relativeToBase.startsWith('..') && !relativeToBase.startsWith('./..') && !relativeToBase.startsWith('..\\') && relativeToBase !== '';
|
|
16
|
+
// If relativeToBase is an empty string, it means fileOrFolderFullPath and basePath are identical.
|
|
17
|
+
// In this case, it's a subpath (or identical path).
|
|
18
|
+
if (isSubpath || relativeToBase === '') {
|
|
19
|
+
return relativeToBase;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
// If it's not a subpath, return the original full path.
|
|
23
|
+
return fileOrFolderFullPath;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=file2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file2.js","sourceRoot":"","sources":["../../../src/utils/file2.ts"],"names":[],"mappings":";;;;;AAGA,0CAkBC;AApBD,gDAAwB;AAExB,SAAgB,eAAe,CAAC,oBAA4B,EAAE,QAAgB;IAC5E,MAAM,cAAc,GAAG,cAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IAErE,iFAAiF;IACjF,6EAA6E;IAC7E,qDAAqD;IACrD,gFAAgF;IAChF,qBAAqB;IACrB,MAAM,SAAS,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,cAAc,KAAK,EAAE,CAAC;IAExJ,kGAAkG;IAClG,oDAAoD;IACpD,IAAI,SAAS,IAAI,cAAc,KAAK,EAAE,EAAE,CAAC;QACvC,OAAO,cAAc,CAAC;IACxB,CAAC;SAAM,CAAC;QACN,wDAAwD;QACxD,OAAO,oBAAoB,CAAC;IAC9B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// src/utils/logger.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
var LogLevel;
|
|
5
|
+
(function (LogLevel) {
|
|
6
|
+
LogLevel["INFO"] = "INFO";
|
|
7
|
+
LogLevel["WARN"] = "WARN";
|
|
8
|
+
LogLevel["ERROR"] = "ERROR";
|
|
9
|
+
LogLevel["SUCCESS"] = "SUCCESS";
|
|
10
|
+
LogLevel["DEBUG"] = "DEBUG";
|
|
11
|
+
LogLevel["TRACE"] = "TRACE";
|
|
12
|
+
})(LogLevel || (LogLevel = {}));
|
|
13
|
+
// ANSI-Colors
|
|
14
|
+
const colors = {
|
|
15
|
+
reset: "\x1b[0m",
|
|
16
|
+
fgRed: "\x1b[31m",
|
|
17
|
+
fgGreen: "\x1b[32m",
|
|
18
|
+
fgYellow: "\x1b[33m",
|
|
19
|
+
fgBlue: "\x1b[34m",
|
|
20
|
+
fgCyan: "\x1b[36m",
|
|
21
|
+
};
|
|
22
|
+
class Logger {
|
|
23
|
+
static setLogLevel(level) {
|
|
24
|
+
this.logLevel = level;
|
|
25
|
+
}
|
|
26
|
+
static setShowPrompts(show) {
|
|
27
|
+
this.showPrompts = show;
|
|
28
|
+
}
|
|
29
|
+
static info(message) {
|
|
30
|
+
if (this.logLevel === LogLevel.WARN || this.logLevel === LogLevel.ERROR) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
console.log(`${colors.fgBlue}[${LogLevel.INFO}]${colors.reset} ${message}`);
|
|
34
|
+
}
|
|
35
|
+
static success(message) {
|
|
36
|
+
if (this.logLevel === LogLevel.WARN || this.logLevel === LogLevel.ERROR) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
console.log(`${colors.fgGreen}[${LogLevel.SUCCESS}]${colors.reset} ${message}`);
|
|
40
|
+
}
|
|
41
|
+
static warn(message) {
|
|
42
|
+
if (this.logLevel === LogLevel.ERROR) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
console.warn(`${colors.fgYellow}[${LogLevel.WARN}]${colors.reset} ${message}`);
|
|
46
|
+
}
|
|
47
|
+
static warning(message) {
|
|
48
|
+
this.warn(message);
|
|
49
|
+
}
|
|
50
|
+
static error(message, err) {
|
|
51
|
+
console.error(`${colors.fgRed}[${LogLevel.ERROR}]${colors.reset} ${message}`);
|
|
52
|
+
if (err) {
|
|
53
|
+
console.error(err);
|
|
54
|
+
}
|
|
55
|
+
this.errorMessages.push(message + (err ? ": " + err.toString() : ""));
|
|
56
|
+
}
|
|
57
|
+
static debug(message) {
|
|
58
|
+
if (this.logLevel === LogLevel.WARN ||
|
|
59
|
+
this.logLevel === LogLevel.ERROR ||
|
|
60
|
+
this.logLevel === LogLevel.INFO ||
|
|
61
|
+
this.logLevel === LogLevel.SUCCESS) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
//if (process.env.DEBUG === "true") {
|
|
65
|
+
console.debug(`${colors.fgCyan}[${LogLevel.DEBUG}]${colors.reset} ${message}`);
|
|
66
|
+
//}
|
|
67
|
+
}
|
|
68
|
+
static trace(message) {
|
|
69
|
+
if (this.logLevel !== LogLevel.TRACE) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
//if (process.env.DEBUG === "true") {
|
|
73
|
+
console.log(`${colors.fgCyan}[${LogLevel.TRACE}]${colors.reset} ${message}`);
|
|
74
|
+
//}
|
|
75
|
+
}
|
|
76
|
+
static prompt(message) {
|
|
77
|
+
if (this.showPrompts) {
|
|
78
|
+
this.info(`${colors.fgCyan}[PROMPT]${colors.reset}\n===================\n${message}\n===================\n`);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
this.debug(`LLM prompt, length ${message.length}: ${message.substring(0, 100)}...`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
static llmResponse(message) {
|
|
85
|
+
if (this.showPrompts) {
|
|
86
|
+
this.info(`${colors.fgCyan}[LLM RESPONSE]${colors.reset}\n===================\n${message}\n===================`);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
this.trace(`LLM response, length ${message.length}: ${message.substring(0, 100)}...`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
static repeatErrorMessages() {
|
|
93
|
+
if (this.errorMessages.length > 0) {
|
|
94
|
+
console.error(`${colors.fgRed}[${LogLevel.ERROR}]${colors.reset} Summary of error messages:`);
|
|
95
|
+
for (const msg of this.errorMessages) {
|
|
96
|
+
console.error(`- ${msg}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
Logger.logLevel = LogLevel.INFO;
|
|
102
|
+
Logger.showPrompts = false;
|
|
103
|
+
Logger.errorMessages = [];
|
|
104
|
+
exports.default = Logger;
|
|
105
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
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.optionValueAsString = optionValueAsString;
|
|
7
|
+
exports.clearContentFromMarkdownCodeMarkers = clearContentFromMarkdownCodeMarkers;
|
|
8
|
+
exports.computeHashFromString = computeHashFromString;
|
|
9
|
+
exports.toCamelCase = toCamelCase;
|
|
10
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
11
|
+
function optionValueAsString(value) {
|
|
12
|
+
if (typeof value === "boolean") {
|
|
13
|
+
return value ? "True" : "False";
|
|
14
|
+
}
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
function clearContentFromMarkdownCodeMarkers(content) {
|
|
18
|
+
// Entfernt ```language und ``` aus dem Inhalt
|
|
19
|
+
return content
|
|
20
|
+
.replace(/```[a-zA-Z0-9]*\n/g, "")
|
|
21
|
+
.replace(/```/g, "")
|
|
22
|
+
.trim();
|
|
23
|
+
}
|
|
24
|
+
function computeHashFromString(content) {
|
|
25
|
+
return crypto_1.default.createHash("sha256").update(content).digest("hex");
|
|
26
|
+
}
|
|
27
|
+
function toCamelCase(value) {
|
|
28
|
+
return value
|
|
29
|
+
.toLowerCase()
|
|
30
|
+
.split("_")
|
|
31
|
+
.map((part, index) => index === 0 ? part : part.charAt(0).toUpperCase() + part.slice(1))
|
|
32
|
+
.join("");
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/utils/utils.ts"],"names":[],"mappings":";;;;;AAGA,kDAKC;AAED,kFAMC;AAED,sDAEC;AAED,kCAQC;AA7BD,oDAA4B;AAE5B,SAAgB,mBAAmB,CAAC,KAAqB;IACvD,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAClC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,mCAAmC,CAAC,OAAe;IACjE,8CAA8C;IAC9C,OAAO,OAAO;SACX,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;SACjC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;SACnB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,qBAAqB,CAAC,OAAe;IACnD,OAAO,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,SAAgB,WAAW,CAAC,KAAa;IACvC,OAAO,KAAK;SACT,WAAW,EAAE;SACb,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACnB,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAClE;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@avrm/svi",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "SVI - Structural Vibe Coding (SVI), CLI tools",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"build": "tsc && copy package.json dist",
|
|
8
|
+
"test": "vitest run",
|
|
9
|
+
"test:watch": "vitest",
|
|
10
|
+
"svi": "svi run -l TRACE -P"
|
|
11
|
+
},
|
|
12
|
+
"devDependencies": {
|
|
13
|
+
"@types/js-yaml": "^4.0.9",
|
|
14
|
+
"@types/node": "^24.7.2",
|
|
15
|
+
"@vitest/coverage-v8": "^4.0.6",
|
|
16
|
+
"fast-glob": "^3.3.3",
|
|
17
|
+
"ts-node": "^10.9.2",
|
|
18
|
+
"typescript": "^5.9.3",
|
|
19
|
+
"vitest": "^4.0.6"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@langchain/anthropic": "^0.3.32",
|
|
23
|
+
"@langchain/core": "^0.3.78",
|
|
24
|
+
"@langchain/google-genai": "^1.0.0",
|
|
25
|
+
"@langchain/openai": "^0.6.16",
|
|
26
|
+
"@themaximalist/llm.js": "^1.0.3",
|
|
27
|
+
"commander": "^14.0.1",
|
|
28
|
+
"dotenv": "^17.2.3",
|
|
29
|
+
"execa": "^9.6.0",
|
|
30
|
+
"js-yaml": "^4.1.0"
|
|
31
|
+
},
|
|
32
|
+
"bin": {
|
|
33
|
+
"svi": "dist/bin/cli.js"
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"dist"
|
|
37
|
+
]
|
|
38
|
+
}
|