@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.
Files changed (82) hide show
  1. package/dist/bin/cli.js +6 -0
  2. package/dist/bin/cli.js.map +1 -0
  3. package/dist/package.json +39 -0
  4. package/dist/src/commands/cliOptions.js +58 -0
  5. package/dist/src/commands/cliOptions.js.map +1 -0
  6. package/dist/src/commands/entryPoint.js +90 -0
  7. package/dist/src/commands/entryPoint.js.map +1 -0
  8. package/dist/src/commands/env.js +141 -0
  9. package/dist/src/commands/env.js.map +1 -0
  10. package/dist/src/commands/init.js +108 -0
  11. package/dist/src/commands/init.js.map +1 -0
  12. package/dist/src/commands/run.js +58 -0
  13. package/dist/src/commands/run.js.map +1 -0
  14. package/dist/src/commands/runner/checkerForRunManager.js +49 -0
  15. package/dist/src/commands/runner/checkerForRunManager.js.map +1 -0
  16. package/dist/src/commands/runner/runManager.js +137 -0
  17. package/dist/src/commands/runner/runManager.js.map +1 -0
  18. package/dist/src/commands/runner/runStatistics.js +55 -0
  19. package/dist/src/commands/runner/runStatistics.js.map +1 -0
  20. package/dist/src/config/config.js +135 -0
  21. package/dist/src/config/config.js.map +1 -0
  22. package/dist/src/config/configFinder.js +37 -0
  23. package/dist/src/config/configFinder.js.map +1 -0
  24. package/dist/src/llm/llm.js +117 -0
  25. package/dist/src/llm/llm.js.map +1 -0
  26. package/dist/src/llm/llmServiceByModel.js +43 -0
  27. package/dist/src/llm/llmServiceByModel.js.map +1 -0
  28. package/dist/src/llm/llmUtils.js +23 -0
  29. package/dist/src/llm/llmUtils.js.map +1 -0
  30. package/dist/src/llm/theMaximalistLlmJs/LlmJsFactories.js +27 -0
  31. package/dist/src/llm/theMaximalistLlmJs/LlmJsFactories.js.map +1 -0
  32. package/dist/src/llm/theMaximalistLlmJs/ModelUsageWrapper.js +55 -0
  33. package/dist/src/llm/theMaximalistLlmJs/ModelUsageWrapper.js.map +1 -0
  34. package/dist/src/svi/cacheManager.js +187 -0
  35. package/dist/src/svi/cacheManager.js.map +1 -0
  36. package/dist/src/svi/promptBuilder.js +59 -0
  37. package/dist/src/svi/promptBuilder.js.map +1 -0
  38. package/dist/src/svi/prompts/extractDeclarations.js +25 -0
  39. package/dist/src/svi/prompts/extractDeclarations.js.map +1 -0
  40. package/dist/src/svi/prompts/generate.js +36 -0
  41. package/dist/src/svi/prompts/generate.js.map +1 -0
  42. package/dist/src/svi/sviChecks.js +131 -0
  43. package/dist/src/svi/sviChecks.js.map +1 -0
  44. package/dist/src/svi/sviDependencies.js +139 -0
  45. package/dist/src/svi/sviDependencies.js.map +1 -0
  46. package/dist/src/svi/sviFileClass.js +105 -0
  47. package/dist/src/svi/sviFileClass.js.map +1 -0
  48. package/dist/src/svi/sviFileOrderOptimizer/sviDependencyCycleAnalyzer.js +154 -0
  49. package/dist/src/svi/sviFileOrderOptimizer/sviDependencyCycleAnalyzer.js.map +1 -0
  50. package/dist/src/svi/sviFileOrderOptimizer/sviDependencyFinder.js +57 -0
  51. package/dist/src/svi/sviFileOrderOptimizer/sviDependencyFinder.js.map +1 -0
  52. package/dist/src/svi/sviFileOrderOptimizer/sviFileOrderOptimizer.js +93 -0
  53. package/dist/src/svi/sviFileOrderOptimizer/sviFileOrderOptimizer.js.map +1 -0
  54. package/dist/src/svi/sviFileOrderOptimizer/types.js +3 -0
  55. package/dist/src/svi/sviFileOrderOptimizer/types.js.map +1 -0
  56. package/dist/src/svi/sviImportPrompts.js +138 -0
  57. package/dist/src/svi/sviImportPrompts.js.map +1 -0
  58. package/dist/src/svi/sviLoader.js +138 -0
  59. package/dist/src/svi/sviLoader.js.map +1 -0
  60. package/dist/src/svi/sviParser/parsedSviDirectory.js +34 -0
  61. package/dist/src/svi/sviParser/parsedSviDirectory.js.map +1 -0
  62. package/dist/src/svi/sviParser/sviParser.js +205 -0
  63. package/dist/src/svi/sviParser/sviParser.js.map +1 -0
  64. package/dist/src/svi/sviProcessor.js +138 -0
  65. package/dist/src/svi/sviProcessor.js.map +1 -0
  66. package/dist/src/svi/types.js +3 -0
  67. package/dist/src/svi/types.js.map +1 -0
  68. package/dist/src/utils/codeClear.js +29 -0
  69. package/dist/src/utils/codeClear.js.map +1 -0
  70. package/dist/src/utils/constants.js +6 -0
  71. package/dist/src/utils/constants.js.map +1 -0
  72. package/dist/src/utils/fastGlobWrapper.js +34 -0
  73. package/dist/src/utils/fastGlobWrapper.js.map +1 -0
  74. package/dist/src/utils/file.js +137 -0
  75. package/dist/src/utils/file.js.map +1 -0
  76. package/dist/src/utils/file2.js +26 -0
  77. package/dist/src/utils/file2.js.map +1 -0
  78. package/dist/src/utils/logger.js +105 -0
  79. package/dist/src/utils/logger.js.map +1 -0
  80. package/dist/src/utils/utils.js +34 -0
  81. package/dist/src/utils/utils.js.map +1 -0
  82. 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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -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,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UNLIMITED_TOKENS = exports.DEFAULT_ENV_FILE = void 0;
4
+ exports.DEFAULT_ENV_FILE = "svi.env";
5
+ exports.UNLIMITED_TOKENS = 999999999;
6
+ //# sourceMappingURL=constants.js.map
@@ -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
+ }