@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,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const llm_js_1 = require("@themaximalist/llm.js");
4
+ class ModelUsageWrapper {
5
+ constructor(service) {
6
+ this.modelUsage = new llm_js_1.ModelUsage(service);
7
+ }
8
+ getModel(model, quality_filter = {}) {
9
+ return this.modelUsage.getModel(model, quality_filter);
10
+ }
11
+ async refresh() {
12
+ await this.modelUsage.refresh();
13
+ }
14
+ models() {
15
+ return this.modelUsage.models();
16
+ }
17
+ static get(service, model, quality_filter = {}) {
18
+ return llm_js_1.ModelUsage.get(service, model, quality_filter);
19
+ }
20
+ static getAll() {
21
+ return llm_js_1.ModelUsage.getAll();
22
+ }
23
+ static getByService(service) {
24
+ return llm_js_1.ModelUsage.getByService(service);
25
+ }
26
+ static getByServiceModel(service, model) {
27
+ return llm_js_1.ModelUsage.getByServiceModel(service, model);
28
+ }
29
+ static filter(service) {
30
+ return llm_js_1.ModelUsage.filter(service);
31
+ }
32
+ static factories(data) {
33
+ return llm_js_1.ModelUsage.factories(data);
34
+ }
35
+ static async refresh() {
36
+ return await llm_js_1.ModelUsage.refresh();
37
+ }
38
+ static addCustom(info) {
39
+ llm_js_1.ModelUsage.addCustom(info);
40
+ }
41
+ static getCustom(service, model) {
42
+ return llm_js_1.ModelUsage.getCustom(service, model);
43
+ }
44
+ static getCustoms() {
45
+ return llm_js_1.ModelUsage.getCustoms();
46
+ }
47
+ static removeCustom(service, model) {
48
+ llm_js_1.ModelUsage.removeCustom(service, model);
49
+ }
50
+ static clearCustom() {
51
+ llm_js_1.ModelUsage.clearCustom();
52
+ }
53
+ }
54
+ exports.default = ModelUsageWrapper;
55
+ //# sourceMappingURL=ModelUsageWrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelUsageWrapper.js","sourceRoot":"","sources":["../../../../src/llm/theMaximalistLlmJs/ModelUsageWrapper.ts"],"names":[],"mappings":";;AAAA,kDAAmD;AAEnD,MAAqB,iBAAiB;IAGpC,YAAY,OAAgB;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,mBAAU,CAAC,OAAc,CAAC,CAAC;IACnD,CAAC;IAED,QAAQ,CACN,KAAa,EACb,iBAA6C,EAAE;QAE/C,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,GAAG,CACR,OAAe,EACf,KAAa,EACb,iBAA6C,EAAE;QAE/C,OAAO,mBAAU,CAAC,GAAG,CAAC,OAAc,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,mBAAU,CAAC,MAAM,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAgB;QAClC,OAAO,mBAAU,CAAC,YAAY,CAAC,OAAc,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,OAAe,EAAE,KAAa;QACrD,OAAO,mBAAU,CAAC,iBAAiB,CAAC,OAAc,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,OAAgB;QAC5B,OAAO,mBAAU,CAAC,MAAM,CAAC,OAAc,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,IAAS;QACxB,OAAO,mBAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO;QAClB,OAAO,MAAM,mBAAU,CAAC,OAAO,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,IAAS;QACxB,mBAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,OAAe,EAAE,KAAa;QAC7C,OAAO,mBAAU,CAAC,SAAS,CAAC,OAAc,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,UAAU;QACf,OAAO,mBAAU,CAAC,UAAU,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAe,EAAE,KAAa;QAChD,mBAAU,CAAC,YAAY,CAAC,OAAc,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,mBAAU,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC;CACF;AAzED,oCAyEC"}
@@ -0,0 +1,187 @@
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
+ const fs_1 = __importDefault(require("fs"));
7
+ const path_1 = __importDefault(require("path"));
8
+ const crypto_1 = __importDefault(require("crypto"));
9
+ const js_yaml_1 = __importDefault(require("js-yaml"));
10
+ const logger_1 = __importDefault(require("../utils/logger")); // Assuming logger exists at this path
11
+ const CACHE_FILE_NAME = ".svicache";
12
+ class CacheManager {
13
+ constructor(directory) {
14
+ if (!fs_1.default.existsSync(directory)) {
15
+ fs_1.default.mkdirSync(directory, { recursive: true });
16
+ }
17
+ this.cacheDirectory = directory;
18
+ this.cacheFilePath = path_1.default.join(directory, CACHE_FILE_NAME);
19
+ }
20
+ /**
21
+ * Resolves the full path to a file, considering if the input is already a full path
22
+ * or just a filename relative to the cache directory.
23
+ * @param filename The input filename, can be a full path or a base filename.
24
+ * @returns The resolved full path to the file.
25
+ */
26
+ _resolveFilePath(filename) {
27
+ return path_1.default.isAbsolute(filename) ? filename : path_1.default.join(this.cacheDirectory, filename);
28
+ }
29
+ /**
30
+ * Calculates the SHA256 hash of a file's content.
31
+ * @param filePath The full path to the file.
32
+ * @returns The SHA256 hash as a string, or null if the file cannot be read.
33
+ */
34
+ _calculateFileHash(filePath) {
35
+ try {
36
+ const fileBuffer = fs_1.default.readFileSync(filePath);
37
+ return crypto_1.default.createHash("sha256").update(fileBuffer).digest("hex");
38
+ }
39
+ catch (error) {
40
+ logger_1.default.error(`Failed to calculate hash for file ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
41
+ return null;
42
+ }
43
+ }
44
+ /**
45
+ * Loads the cache content from the .svicache file.
46
+ * If the file doesn't exist or is invalid, returns an empty default structure.
47
+ * @returns The parsed cache content.
48
+ */
49
+ _loadCache() {
50
+ if (!fs_1.default.existsSync(this.cacheFilePath)) {
51
+ return {
52
+ ProcessedSviFilesHash: {},
53
+ GeneratedDepenenciesExports: {},
54
+ };
55
+ }
56
+ try {
57
+ const fileContent = fs_1.default.readFileSync(this.cacheFilePath, "utf8");
58
+ const cache = js_yaml_1.default.load(fileContent); // Use Partial for initial load
59
+ return {
60
+ ProcessedSviFilesHash: cache.ProcessedSviFilesHash || {},
61
+ GeneratedDepenenciesExports: cache.GeneratedDepenenciesExports || {},
62
+ };
63
+ }
64
+ catch (error) {
65
+ logger_1.default.warn(`Failed to load or parse cache file ${this.cacheFilePath}: ${error instanceof Error ? error.message : String(error)}. Returning empty cache.`);
66
+ return {
67
+ ProcessedSviFilesHash: {},
68
+ GeneratedDepenenciesExports: {},
69
+ };
70
+ }
71
+ }
72
+ /**
73
+ * Saves the provided cache content to the .svicache file.
74
+ * @param cache The cache content to save.
75
+ */
76
+ _saveCache(cache) {
77
+ try {
78
+ const yamlContent = js_yaml_1.default.dump(cache);
79
+ fs_1.default.writeFileSync(this.cacheFilePath, yamlContent, "utf8");
80
+ }
81
+ catch (error) {
82
+ logger_1.default.error(`Failed to save cache file ${this.cacheFilePath}: ${error instanceof Error ? error.message : String(error)}`);
83
+ }
84
+ }
85
+ /**
86
+ * Checks if the cache for a given SVI file is valid.
87
+ * @param filename The SVI filename (can be full path or basename).
88
+ * @returns True if the file's hash matches the one in the cache, false otherwise.
89
+ */
90
+ isSviCacheValid(filename) {
91
+ const cacheKey = path_1.default.basename(filename);
92
+ const resolvedFilePath = this._resolveFilePath(filename);
93
+ const cache = this._loadCache();
94
+ const cachedEntry = cache.ProcessedSviFilesHash[cacheKey];
95
+ if (!cachedEntry || !cachedEntry.hash) {
96
+ return false; // Not found in cache or malformed entry
97
+ }
98
+ const currentHash = this._calculateFileHash(resolvedFilePath);
99
+ if (currentHash === null) {
100
+ // Failed to calculate hash for the current file, treat as invalid
101
+ return false;
102
+ }
103
+ return cachedEntry.hash === currentHash;
104
+ }
105
+ /**
106
+ * Updates the hash for a specific SVI file in the cache.
107
+ * Other cache data remains untouched.
108
+ * @param sviFileName The SVI filename (can be full path or basename).
109
+ */
110
+ updateSviCache(sviFileName) {
111
+ const cacheKey = path_1.default.basename(sviFileName);
112
+ const resolvedFilePath = this._resolveFilePath(sviFileName);
113
+ const currentHash = this._calculateFileHash(resolvedFilePath);
114
+ if (currentHash === null) {
115
+ logger_1.default.warn(`Could not update SVI cache for ${sviFileName}: Failed to calculate hash.`);
116
+ return;
117
+ }
118
+ const cache = this._loadCache();
119
+ cache.ProcessedSviFilesHash[cacheKey] = { hash: currentHash };
120
+ this._saveCache(cache);
121
+ logger_1.default.debug(`Updated SVI cache for ${sviFileName}`);
122
+ }
123
+ /**
124
+ * Checks if the exports cache for a given dependency file is valid.
125
+ * @param dependencyFilename The dependency filename (can be full path or basename).
126
+ * @returns True if the file's hash matches the one in the cache, false otherwise.
127
+ */
128
+ isFileExportsCacheValid(dependencyFilename) {
129
+ const cacheKey = path_1.default.basename(dependencyFilename);
130
+ const resolvedFilePath = this._resolveFilePath(dependencyFilename);
131
+ const cache = this._loadCache();
132
+ const cachedEntry = cache.GeneratedDepenenciesExports[cacheKey];
133
+ if (!cachedEntry || !cachedEntry.hash) {
134
+ return false; // Not found in cache or malformed entry
135
+ }
136
+ const currentHash = this._calculateFileHash(resolvedFilePath);
137
+ if (currentHash === null) {
138
+ // Failed to calculate hash for the current file, treat as invalid
139
+ return false;
140
+ }
141
+ return cachedEntry.hash === currentHash;
142
+ }
143
+ /**
144
+ * Retrieves the 'exports' content for a dependency file from the cache,
145
+ * but only if the cached hash matches the current file's hash.
146
+ * @param dependencyFilename The dependency filename (can be full path or basename).
147
+ * @returns The cached 'exports' string if valid, otherwise null.
148
+ */
149
+ getFileExportsFromCache(dependencyFilename) {
150
+ const cacheKey = path_1.default.basename(dependencyFilename);
151
+ const resolvedFilePath = this._resolveFilePath(dependencyFilename);
152
+ const cache = this._loadCache();
153
+ const cachedEntry = cache.GeneratedDepenenciesExports[cacheKey];
154
+ if (!cachedEntry || !cachedEntry.hash || cachedEntry.exports === undefined) {
155
+ return null; // Not found in cache or malformed entry
156
+ }
157
+ const currentHash = this._calculateFileHash(resolvedFilePath);
158
+ if (currentHash === null || cachedEntry.hash !== currentHash) {
159
+ return null; // File changed or hash calculation failed
160
+ }
161
+ return cachedEntry.exports;
162
+ }
163
+ /**
164
+ * Updates the 'exports' and hash for a dependency file in the cache.
165
+ * Other cache data remains untouched.
166
+ * @param dependencyFilename The dependency filename (can be full path or basename).
167
+ * @param exports The exports string to cache.
168
+ */
169
+ updateFileExportsInCache(dependencyFilename, exports) {
170
+ const cacheKey = path_1.default.basename(dependencyFilename);
171
+ const resolvedFilePath = this._resolveFilePath(dependencyFilename);
172
+ const currentHash = this._calculateFileHash(resolvedFilePath);
173
+ if (currentHash === null) {
174
+ logger_1.default.warn(`Could not update dependency exports cache for ${dependencyFilename}: Failed to calculate hash.`);
175
+ return;
176
+ }
177
+ const cache = this._loadCache();
178
+ cache.GeneratedDepenenciesExports[cacheKey] = {
179
+ hash: currentHash,
180
+ exports: exports,
181
+ };
182
+ this._saveCache(cache);
183
+ logger_1.default.debug(`Updated dependency exports cache for ${dependencyFilename}`);
184
+ }
185
+ }
186
+ exports.default = CacheManager;
187
+ //# sourceMappingURL=cacheManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cacheManager.js","sourceRoot":"","sources":["../../../src/svi/cacheManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
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.buildPrompt = buildPrompt;
7
+ const generate_1 = require("./prompts/generate");
8
+ const utils_1 = require("../utils/utils");
9
+ const sviImportPrompts_1 = require("./sviImportPrompts");
10
+ const sviDependencies_1 = __importDefault(require("./sviDependencies"));
11
+ const runStatistics_1 = __importDefault(require("../commands/runner/runStatistics"));
12
+ /**
13
+ * Build a final prompt text based on a SVI-File.
14
+ * @param svi The parsed SVI file.
15
+ * @returns The final prompt string for the LLM.
16
+ */
17
+ async function buildPrompt(svi, config, llm, isPreliminary) {
18
+ const programmingLanguage = (0, utils_1.optionValueAsString)(svi.options?.ProgrammingLanguage || config.programmingLanguage || "Node.js");
19
+ const outputParams = svi.output && svi.output.length > 0
20
+ ? `Output parameters: ${svi.output.join(", ")}.`
21
+ : "";
22
+ if (!svi.prompt) {
23
+ runStatistics_1.default.getInstance().addFileFailed(svi.getSviFileFullPath());
24
+ throw new Error("SVI file is missing the main prompt section.");
25
+ }
26
+ // Prompt from #Prompt section
27
+ const mainPrompt = svi.prompt || "";
28
+ // Add the dependencies declarations if any
29
+ let declarationsFromDependencies = "";
30
+ if (svi.dependencies && svi.dependencies.length > 0) {
31
+ const sviDependencies = new sviDependencies_1.default(llm, config, isPreliminary);
32
+ const loaded = await sviDependencies.loadDependenciesDeclarations(svi);
33
+ if (!loaded) {
34
+ runStatistics_1.default.getInstance().addFileFailed(svi.getSviFileFullPath());
35
+ throw new Error(`Failed to load dependencies declarations for file ${svi.getSviFileName()}.`);
36
+ }
37
+ declarationsFromDependencies =
38
+ sviDependencies.getDependenciesDeclarationsAsString();
39
+ }
40
+ // Import Prompts
41
+ const importPrompter = new sviImportPrompts_1.SVIImportPrompts(svi, llm, config, isPreliminary);
42
+ if (!(await importPrompter.loadImportedPrompts())) {
43
+ return "";
44
+ }
45
+ const importedPrompts = importPrompter.getImportedPromptsAsString();
46
+ const sviRelativePath = svi.getSviFileRelativePath();
47
+ const destinationRelativePath = svi.getDestinationFileRelativePath() || "";
48
+ // Build the final prompt
49
+ let finalPrompt = generate_1.generatorPromptTemplate
50
+ .replace("{{programmingLanguage}}", programmingLanguage)
51
+ .replace("{{dependencies}}", declarationsFromDependencies)
52
+ .replace("{{outputParameters}}", outputParams)
53
+ .replace("{{mainPrompt}}", mainPrompt)
54
+ .replace("{{importedPrompts}}", importedPrompts)
55
+ .replace("{{sviFilePath}}", sviRelativePath)
56
+ .replace("{{destinationFilePath}}", destinationRelativePath);
57
+ return finalPrompt.trim();
58
+ }
59
+ //# sourceMappingURL=promptBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptBuilder.js","sourceRoot":"","sources":["../../../src/svi/promptBuilder.ts"],"names":[],"mappings":";;;;;AAeA,kCA0DC;AAvED,iDAA6D;AAC7D,0CAAqD;AACrD,yDAAsD;AAEtD,wEAAgD;AAEhD,qFAA6D;AAE7D;;;;GAIG;AACI,KAAK,UAAU,WAAW,CAC/B,GAAY,EACZ,MAAiB,EACjB,GAAiB,EACjB,aAAsB;IAEtB,MAAM,mBAAmB,GAAG,IAAA,2BAAmB,EAC7C,GAAG,CAAC,OAAO,EAAE,mBAAmB,IAAI,MAAM,CAAC,mBAAmB,IAAI,SAAS,CAC5E,CAAC;IAEF,MAAM,YAAY,GAChB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QACjC,CAAC,CAAC,sBAAsB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QAChD,CAAC,CAAC,EAAE,CAAC;IAET,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAChB,uBAAa,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,8BAA8B;IAC9B,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;IAEpC,2CAA2C;IAC3C,IAAI,4BAA4B,GAAG,EAAE,CAAC;IACtC,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,eAAe,GAAG,IAAI,yBAAe,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,uBAAa,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC;YACpE,MAAM,IAAI,KAAK,CACb,qDAAqD,GAAG,CAAC,cAAc,EAAE,GAAG,CAC7E,CAAC;QACJ,CAAC;QACD,4BAA4B;YAC1B,eAAe,CAAC,mCAAmC,EAAE,CAAC;IAC1D,CAAC;IAED,iBAAiB;IACjB,MAAM,cAAc,GAAG,IAAI,mCAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IAC7E,IAAI,CAAC,CAAC,MAAM,cAAc,CAAC,mBAAmB,EAAE,CAAC,EAAE,CAAC;QAClD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,eAAe,GAAG,cAAc,CAAC,0BAA0B,EAAE,CAAC;IACpE,MAAM,eAAe,GAAG,GAAG,CAAC,sBAAsB,EAAE,CAAC;IACrD,MAAM,uBAAuB,GAAG,GAAG,CAAC,8BAA8B,EAAE,IAAI,EAAE,CAAC;IAE3E,yBAAyB;IACzB,IAAI,WAAW,GAAG,kCAAuB;SACtC,OAAO,CAAC,yBAAyB,EAAE,mBAAmB,CAAC;SACvD,OAAO,CAAC,kBAAkB,EAAE,4BAA4B,CAAC;SACzD,OAAO,CAAC,sBAAsB,EAAE,YAAY,CAAC;SAC7C,OAAO,CAAC,gBAAgB,EAAE,UAAU,CAAC;SACrC,OAAO,CAAC,qBAAqB,EAAE,eAAe,CAAC;SAC/C,OAAO,CAAC,iBAAiB,EAAE,eAAe,CAAC;SAC3C,OAAO,CAAC,yBAAyB,EAAE,uBAAuB,CAAC,CAAC;IAE/D,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractDeclarationsPromptTemplate = void 0;
4
+ exports.extractDeclarationsPromptTemplate = `
5
+ Below is a file with a source code {{programmingLanguage}}.
6
+ Your task is to extract all declarations from the code
7
+ (functions, classes, interfaces, enums, etc. depending on programming language).
8
+
9
+ Please return only the extracted declarations, without any implementations,
10
+ explanations, or additional text.
11
+ Return all the information about declarations that can be useful for writing
12
+ referencing files: class/interface names, method/function signatures,
13
+ types, constants, etc.
14
+ Don't return private declarations: private/protected attributes and methods, that
15
+ cannot be referenced by external code, not exported classes and functions, other
16
+ private and internal declarations according to the chosen programming language.
17
+ The extracted information should not be a syntaxically correct code,
18
+ but should contain all necessary details to understand how to use
19
+ the declared entities.
20
+
21
+ The code is as follows:
22
+ ----------------------------------
23
+ {{sourceCode}}
24
+ `;
25
+ //# sourceMappingURL=extractDeclarations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractDeclarations.js","sourceRoot":"","sources":["../../../../src/svi/prompts/extractDeclarations.ts"],"names":[],"mappings":";;;AAAa,QAAA,iCAAiC,GAAW;;;;;;;;;;;;;;;;;;;;CAoBxD,CAAC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generatorPromptTemplate = void 0;
4
+ exports.generatorPromptTemplate = `
5
+ Write a code in programming language {{programmingLanguage}}.
6
+ Please return only the code, without any explanations, installation manual,
7
+ reasoning info, or additional text. Don't add file path in the code,
8
+ or if you add it, please add as a commented line.
9
+
10
+ Please include your code in a code block mark as:
11
+ \`\`\`<programming language optional>
12
+ <code goes here>
13
+ \`\`\`
14
+
15
+ Generated file path is:
16
+ {{destinationFilePath}}.
17
+ Relative file path of the *.svi file is {{sviFilePath}}.
18
+ The code should fulfill the following requirements:
19
+
20
+ The main specification goes below:
21
+ {{mainPrompt}}
22
+
23
+ Output parameters:
24
+ {{outputParameters}}.
25
+
26
+ Declarations from external files that are dependencies of the generated file
27
+ and can be useful for writing the code.
28
+ Note!!! Please don't redeclare them in the generated code; instead,
29
+ import/include etc them from source files using programming language syntax!!!
30
+ {{dependencies}}
31
+ --- End of declarations from dependencies ---
32
+
33
+ Additional context:
34
+ {{importedPrompts}}
35
+ `;
36
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../src/svi/prompts/generate.ts"],"names":[],"mappings":";;;AAAa,QAAA,uBAAuB,GAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+B9C,CAAC"}
@@ -0,0 +1,131 @@
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
+ // src\svi\sviChecks.ts
7
+ const parsedSviDirectory_1 = __importDefault(require("./sviParser/parsedSviDirectory"));
8
+ const path_1 = __importDefault(require("path"));
9
+ class SviChecker {
10
+ constructor() {
11
+ this.errors = [];
12
+ this.parsedSviDirectory = parsedSviDirectory_1.default.getInstance();
13
+ }
14
+ /**
15
+ * Performs various correctness checks on a list of SVI files.
16
+ * @param sviFilePaths A list of full paths to SVI files to check.
17
+ * @returns `true` if all checks pass, `false` otherwise. Errors are stored internally.
18
+ */
19
+ check(sviFilePaths) {
20
+ this.errors = []; // Clear previous errors
21
+ // Map to store parsed SVI files by their full path for easy lookup
22
+ const parsedSviFilesMap = new Map();
23
+ // First pass: Parse all SVI files and store them.
24
+ // This also ensures that any parsing failures are noted.
25
+ for (const sviFileToLoad of sviFilePaths) {
26
+ const sviFile = this.parsedSviDirectory.getParsedSviFile(sviFileToLoad.filePath);
27
+ if (sviFile) {
28
+ parsedSviFilesMap.set(sviFile.getSviFileFullPath(), sviFile);
29
+ }
30
+ else {
31
+ // If parsing fails, we cannot reliably perform subsequent checks on this file.
32
+ // An error is logged, and the file is skipped for further checks.
33
+ this.errors.push(`Error: Failed to parse SVI file, skipping checks: ${sviFileToLoad.filePath}`);
34
+ }
35
+ }
36
+ // Perform the specified checks using the parsed file map
37
+ this.check1_DuplicateDestinationFiles(sviFilePaths, parsedSviFilesMap);
38
+ this.check2_DestinationIsSelf(sviFilePaths, parsedSviFilesMap);
39
+ this.check3_DestinationMultiLine(sviFilePaths, parsedSviFilesMap);
40
+ return this.errors.length === 0;
41
+ }
42
+ /**
43
+ * Check 1: Detects if several *.svi files (excluding those marked as preliminary)
44
+ * are configured to generate the same destination file.
45
+ */
46
+ check1_DuplicateDestinationFiles(sviFileToLoads, parsedSviFilesMap) {
47
+ const destinationToFilePaths = new Map(); // Map: destinationFullPath -> sviFileFullPaths[]
48
+ for (const sviFileToLoad of sviFileToLoads) {
49
+ // Per specification, ignore preliminary files for this check
50
+ if (sviFileToLoad.isPreliminary) {
51
+ continue;
52
+ }
53
+ const sviFile = parsedSviFilesMap.get(sviFileToLoad.filePath);
54
+ if (!sviFile) {
55
+ // This file either failed parsing or wasn't found in the map (error already logged by check method)
56
+ continue;
57
+ }
58
+ const destinationFullPath = sviFile.getDestinationFileFullPath();
59
+ if (destinationFullPath) {
60
+ // Normalize the path to handle platform-specific differences (e.g., path separators)
61
+ const normalizedDestinationPath = path_1.default.normalize(destinationFullPath);
62
+ if (!destinationToFilePaths.has(normalizedDestinationPath)) {
63
+ destinationToFilePaths.set(normalizedDestinationPath, []);
64
+ }
65
+ destinationToFilePaths.get(normalizedDestinationPath).push(sviFile.getSviFileFullPath());
66
+ }
67
+ }
68
+ // Report errors for any destination paths that appeared more than once
69
+ for (const [destination, sviPaths] of destinationToFilePaths.entries()) {
70
+ if (sviPaths.length > 1) {
71
+ let errorMessage = `Error: Multiple SVI files are configured to generate the same destination file: '${destination}':\n`;
72
+ sviPaths.forEach(sviPath => {
73
+ errorMessage += `- ${sviPath}\n`;
74
+ });
75
+ this.errors.push(errorMessage.trim()); // .trim() removes the last redundant newline
76
+ }
77
+ }
78
+ }
79
+ /**
80
+ * Check 2: Detects if an *.svi file's destination points to itself.
81
+ * Compares relative paths to ensure correctness and platform independence.
82
+ */
83
+ check2_DestinationIsSelf(sviFileToLoads, parsedSviFilesMap) {
84
+ for (const sviFileToLoad of sviFileToLoads) {
85
+ const sviFile = parsedSviFilesMap.get(sviFileToLoad.filePath);
86
+ if (!sviFile) {
87
+ continue; // Skip if file not parsed
88
+ }
89
+ const sviRelativePath = sviFile.getSviFileRelativePath();
90
+ const destinationRelativePath = sviFile.getDestinationFileRelativePath();
91
+ if (sviRelativePath && destinationRelativePath) {
92
+ // Normalize paths for reliable comparison (e.g., handling '/' vs '\' or redundant separators)
93
+ const normalizedSviRelativePath = path_1.default.normalize(sviRelativePath);
94
+ const normalizedDestinationRelativePath = path_1.default.normalize(destinationRelativePath);
95
+ if (normalizedSviRelativePath === normalizedDestinationRelativePath) {
96
+ this.errors.push(`Error in file ${sviFile.getSviFileFullPath()}: The destination file cannot be the same as the source file. Please change the destination file and try again.`);
97
+ }
98
+ }
99
+ }
100
+ }
101
+ /**
102
+ * Check 3: Detects if the # Destination section in an *.svi file contains more than one non-empty line.
103
+ */
104
+ check3_DestinationMultiLine(sviFileToLoads, parsedSviFilesMap) {
105
+ for (const sviFileToLoad of sviFileToLoads) {
106
+ const sviFile = parsedSviFilesMap.get(sviFileToLoad.filePath);
107
+ if (!sviFile) {
108
+ continue; // Skip if file not parsed
109
+ }
110
+ // The 'destinationFile' property holds the raw string content directly from the SVI file section.
111
+ const rawDestinationContent = sviFile.destinationFile;
112
+ if (rawDestinationContent !== undefined) {
113
+ // Split by common line endings and filter out empty lines to count meaningful entries
114
+ const lines = rawDestinationContent
115
+ .split(/\r?\n/) // Split by Windows (\r\n) or Unix (\n) line endings
116
+ .filter(line => line.trim() !== ''); // Filter out lines that are empty or contain only whitespace
117
+ if (lines.length > 1) {
118
+ this.errors.push(`Error in file ${sviFile.getSviFileFullPath()}: More than one item in the # Destination section`);
119
+ }
120
+ }
121
+ }
122
+ }
123
+ /**
124
+ * Logs all accumulated error messages to the console (typically stderr).
125
+ */
126
+ logErrors() {
127
+ this.errors.forEach(error => console.error(error));
128
+ }
129
+ }
130
+ exports.default = SviChecker;
131
+ //# sourceMappingURL=sviChecks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sviChecks.js","sourceRoot":"","sources":["../../../src/svi/sviChecks.ts"],"names":[],"mappings":"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"}