@memberjunction/db-auto-doc 2.117.0 → 2.118.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/README.md +652 -165
  2. package/bin/run.js +7 -0
  3. package/dist/api/DBAutoDocAPI.d.ts +252 -0
  4. package/dist/api/DBAutoDocAPI.d.ts.map +1 -0
  5. package/dist/api/DBAutoDocAPI.js +530 -0
  6. package/dist/api/DBAutoDocAPI.js.map +1 -0
  7. package/dist/api/index.d.ts +7 -0
  8. package/dist/api/index.d.ts.map +1 -0
  9. package/dist/api/index.js +10 -0
  10. package/dist/api/index.js.map +1 -0
  11. package/dist/commands/analyze.d.ts +6 -4
  12. package/dist/commands/analyze.d.ts.map +1 -1
  13. package/dist/commands/analyze.js +58 -71
  14. package/dist/commands/analyze.js.map +1 -1
  15. package/dist/commands/export.d.ts +14 -4
  16. package/dist/commands/export.d.ts.map +1 -1
  17. package/dist/commands/export.js +156 -61
  18. package/dist/commands/export.js.map +1 -1
  19. package/dist/commands/init.d.ts +3 -4
  20. package/dist/commands/init.d.ts.map +1 -1
  21. package/dist/commands/init.js +155 -146
  22. package/dist/commands/init.js.map +1 -1
  23. package/dist/commands/reset.d.ts +4 -1
  24. package/dist/commands/reset.d.ts.map +1 -1
  25. package/dist/commands/reset.js +33 -19
  26. package/dist/commands/reset.js.map +1 -1
  27. package/dist/commands/status.d.ts +10 -0
  28. package/dist/commands/status.d.ts.map +1 -0
  29. package/dist/commands/status.js +66 -0
  30. package/dist/commands/status.js.map +1 -0
  31. package/dist/core/AnalysisEngine.d.ts +108 -0
  32. package/dist/core/AnalysisEngine.d.ts.map +1 -0
  33. package/dist/core/AnalysisEngine.js +716 -0
  34. package/dist/core/AnalysisEngine.js.map +1 -0
  35. package/dist/core/AnalysisOrchestrator.d.ts +37 -0
  36. package/dist/core/AnalysisOrchestrator.d.ts.map +1 -0
  37. package/dist/core/AnalysisOrchestrator.js +294 -0
  38. package/dist/core/AnalysisOrchestrator.js.map +1 -0
  39. package/dist/core/BackpropagationEngine.d.ts +32 -0
  40. package/dist/core/BackpropagationEngine.d.ts.map +1 -0
  41. package/dist/core/BackpropagationEngine.js +121 -0
  42. package/dist/core/BackpropagationEngine.js.map +1 -0
  43. package/dist/core/ConvergenceDetector.d.ts +27 -0
  44. package/dist/core/ConvergenceDetector.d.ts.map +1 -0
  45. package/dist/core/ConvergenceDetector.js +92 -0
  46. package/dist/core/ConvergenceDetector.js.map +1 -0
  47. package/dist/core/GuardrailsManager.d.ts +78 -0
  48. package/dist/core/GuardrailsManager.d.ts.map +1 -0
  49. package/dist/core/GuardrailsManager.js +367 -0
  50. package/dist/core/GuardrailsManager.js.map +1 -0
  51. package/dist/core/index.d.ts +7 -0
  52. package/dist/core/index.d.ts.map +1 -0
  53. package/dist/core/index.js +13 -0
  54. package/dist/core/index.js.map +1 -0
  55. package/dist/database/Database.d.ts +56 -0
  56. package/dist/database/Database.d.ts.map +1 -0
  57. package/dist/database/Database.js +172 -0
  58. package/dist/database/Database.js.map +1 -0
  59. package/dist/database/TopologicalSorter.d.ts +25 -0
  60. package/dist/database/TopologicalSorter.d.ts.map +1 -0
  61. package/dist/database/TopologicalSorter.js +150 -0
  62. package/dist/database/TopologicalSorter.js.map +1 -0
  63. package/dist/database/index.d.ts +6 -0
  64. package/dist/database/index.d.ts.map +1 -0
  65. package/dist/database/index.js +14 -0
  66. package/dist/database/index.js.map +1 -0
  67. package/dist/discovery/ColumnStatsCache.d.ts +91 -0
  68. package/dist/discovery/ColumnStatsCache.d.ts.map +1 -0
  69. package/dist/discovery/ColumnStatsCache.js +231 -0
  70. package/dist/discovery/ColumnStatsCache.js.map +1 -0
  71. package/dist/discovery/DiscoveryEngine.d.ts +100 -0
  72. package/dist/discovery/DiscoveryEngine.d.ts.map +1 -0
  73. package/dist/discovery/DiscoveryEngine.js +726 -0
  74. package/dist/discovery/DiscoveryEngine.js.map +1 -0
  75. package/dist/discovery/DiscoveryTriggerAnalyzer.d.ts +57 -0
  76. package/dist/discovery/DiscoveryTriggerAnalyzer.d.ts.map +1 -0
  77. package/dist/discovery/DiscoveryTriggerAnalyzer.js +186 -0
  78. package/dist/discovery/DiscoveryTriggerAnalyzer.js.map +1 -0
  79. package/dist/discovery/FKDetector.d.ts +47 -0
  80. package/dist/discovery/FKDetector.d.ts.map +1 -0
  81. package/dist/discovery/FKDetector.js +317 -0
  82. package/dist/discovery/FKDetector.js.map +1 -0
  83. package/dist/discovery/LLMDiscoveryValidator.d.ts +64 -0
  84. package/dist/discovery/LLMDiscoveryValidator.d.ts.map +1 -0
  85. package/dist/discovery/LLMDiscoveryValidator.js +431 -0
  86. package/dist/discovery/LLMDiscoveryValidator.js.map +1 -0
  87. package/dist/discovery/LLMSanityChecker.d.ts +38 -0
  88. package/dist/discovery/LLMSanityChecker.d.ts.map +1 -0
  89. package/dist/discovery/LLMSanityChecker.js +156 -0
  90. package/dist/discovery/LLMSanityChecker.js.map +1 -0
  91. package/dist/discovery/PKDetector.d.ts +62 -0
  92. package/dist/discovery/PKDetector.d.ts.map +1 -0
  93. package/dist/discovery/PKDetector.js +436 -0
  94. package/dist/discovery/PKDetector.js.map +1 -0
  95. package/dist/discovery/index.d.ts +9 -0
  96. package/dist/discovery/index.d.ts.map +1 -0
  97. package/dist/discovery/index.js +25 -0
  98. package/dist/discovery/index.js.map +1 -0
  99. package/dist/drivers/BaseAutoDocDriver.d.ts +132 -0
  100. package/dist/drivers/BaseAutoDocDriver.d.ts.map +1 -0
  101. package/dist/drivers/BaseAutoDocDriver.js +121 -0
  102. package/dist/drivers/BaseAutoDocDriver.js.map +1 -0
  103. package/dist/drivers/MySQLDriver.d.ts +61 -0
  104. package/dist/drivers/MySQLDriver.d.ts.map +1 -0
  105. package/dist/drivers/MySQLDriver.js +668 -0
  106. package/dist/drivers/MySQLDriver.js.map +1 -0
  107. package/dist/drivers/PostgreSQLDriver.d.ts +65 -0
  108. package/dist/drivers/PostgreSQLDriver.d.ts.map +1 -0
  109. package/dist/drivers/PostgreSQLDriver.js +704 -0
  110. package/dist/drivers/PostgreSQLDriver.js.map +1 -0
  111. package/dist/drivers/SQLServerDriver.d.ts +61 -0
  112. package/dist/drivers/SQLServerDriver.d.ts.map +1 -0
  113. package/dist/drivers/SQLServerDriver.js +667 -0
  114. package/dist/drivers/SQLServerDriver.js.map +1 -0
  115. package/dist/generators/CSVGenerator.d.ts +35 -0
  116. package/dist/generators/CSVGenerator.d.ts.map +1 -0
  117. package/dist/generators/CSVGenerator.js +154 -0
  118. package/dist/generators/CSVGenerator.js.map +1 -0
  119. package/dist/generators/HTMLGenerator.d.ts +29 -0
  120. package/dist/generators/HTMLGenerator.d.ts.map +1 -0
  121. package/dist/generators/HTMLGenerator.js +710 -0
  122. package/dist/generators/HTMLGenerator.js.map +1 -0
  123. package/dist/generators/MarkdownGenerator.d.ts +27 -0
  124. package/dist/generators/MarkdownGenerator.d.ts.map +1 -0
  125. package/dist/generators/MarkdownGenerator.js +361 -0
  126. package/dist/generators/MarkdownGenerator.js.map +1 -0
  127. package/dist/generators/MermaidGenerator.d.ts +35 -0
  128. package/dist/generators/MermaidGenerator.d.ts.map +1 -0
  129. package/dist/generators/MermaidGenerator.js +321 -0
  130. package/dist/generators/MermaidGenerator.js.map +1 -0
  131. package/dist/generators/ReportGenerator.d.ts +22 -0
  132. package/dist/generators/ReportGenerator.d.ts.map +1 -0
  133. package/dist/generators/ReportGenerator.js +176 -0
  134. package/dist/generators/ReportGenerator.js.map +1 -0
  135. package/dist/generators/SQLGenerator.d.ts +31 -0
  136. package/dist/generators/SQLGenerator.d.ts.map +1 -0
  137. package/dist/generators/SQLGenerator.js +168 -0
  138. package/dist/generators/SQLGenerator.js.map +1 -0
  139. package/dist/generators/index.d.ts +10 -0
  140. package/dist/generators/index.d.ts.map +1 -0
  141. package/dist/generators/index.js +19 -0
  142. package/dist/generators/index.js.map +1 -0
  143. package/dist/index.d.ts +11 -20
  144. package/dist/index.d.ts.map +1 -1
  145. package/dist/index.js +19 -20
  146. package/dist/index.js.map +1 -1
  147. package/dist/prompts/PromptEngine.d.ts +65 -0
  148. package/dist/prompts/PromptEngine.d.ts.map +1 -0
  149. package/dist/prompts/PromptEngine.js +282 -0
  150. package/dist/prompts/PromptEngine.js.map +1 -0
  151. package/dist/prompts/PromptFileLoader.d.ts +21 -0
  152. package/dist/prompts/PromptFileLoader.d.ts.map +1 -0
  153. package/dist/prompts/PromptFileLoader.js +74 -0
  154. package/dist/prompts/PromptFileLoader.js.map +1 -0
  155. package/dist/prompts/index.d.ts +6 -0
  156. package/dist/prompts/index.d.ts.map +1 -0
  157. package/dist/prompts/index.js +11 -0
  158. package/dist/prompts/index.js.map +1 -0
  159. package/dist/state/IterationTracker.d.ts +64 -0
  160. package/dist/state/IterationTracker.d.ts.map +1 -0
  161. package/dist/state/IterationTracker.js +136 -0
  162. package/dist/state/IterationTracker.js.map +1 -0
  163. package/dist/state/StateManager.d.ts +79 -0
  164. package/dist/state/StateManager.d.ts.map +1 -0
  165. package/dist/state/StateManager.js +348 -0
  166. package/dist/state/StateManager.js.map +1 -0
  167. package/dist/state/StateValidator.d.ts +24 -0
  168. package/dist/state/StateValidator.d.ts.map +1 -0
  169. package/dist/state/StateValidator.js +147 -0
  170. package/dist/state/StateValidator.js.map +1 -0
  171. package/dist/state/index.d.ts +7 -0
  172. package/dist/state/index.d.ts.map +1 -0
  173. package/dist/state/index.js +13 -0
  174. package/dist/state/index.js.map +1 -0
  175. package/dist/types/analysis.d.ts +76 -0
  176. package/dist/types/analysis.d.ts.map +1 -0
  177. package/dist/types/analysis.js +6 -0
  178. package/dist/types/analysis.js.map +1 -0
  179. package/dist/types/config.d.ts +132 -0
  180. package/dist/types/config.d.ts.map +1 -0
  181. package/dist/types/config.js +7 -0
  182. package/dist/types/config.js.map +1 -0
  183. package/dist/types/discovery.d.ts +277 -0
  184. package/dist/types/discovery.d.ts.map +1 -0
  185. package/dist/types/discovery.js +7 -0
  186. package/dist/types/discovery.js.map +1 -0
  187. package/dist/types/driver.d.ts +148 -0
  188. package/dist/types/driver.d.ts.map +1 -0
  189. package/dist/types/driver.js +7 -0
  190. package/dist/types/driver.js.map +1 -0
  191. package/dist/types/index.d.ts +8 -0
  192. package/dist/types/index.d.ts.map +1 -0
  193. package/dist/types/index.js +24 -0
  194. package/dist/types/index.js.map +1 -0
  195. package/dist/types/prompts.d.ts +158 -0
  196. package/dist/types/prompts.d.ts.map +1 -0
  197. package/dist/types/prompts.js +6 -0
  198. package/dist/types/prompts.js.map +1 -0
  199. package/dist/types/state.d.ts +278 -0
  200. package/dist/types/state.d.ts.map +1 -0
  201. package/dist/types/state.js +7 -0
  202. package/dist/types/state.js.map +1 -0
  203. package/dist/utils/config-loader.d.ts +29 -0
  204. package/dist/utils/config-loader.d.ts.map +1 -0
  205. package/dist/utils/config-loader.js +163 -0
  206. package/dist/utils/config-loader.js.map +1 -0
  207. package/dist/utils/index.d.ts +5 -0
  208. package/dist/utils/index.d.ts.map +1 -0
  209. package/dist/utils/index.js +9 -0
  210. package/dist/utils/index.js.map +1 -0
  211. package/package.json +24 -3
  212. package/dist/ai/simple-ai-client.d.ts +0 -70
  213. package/dist/ai/simple-ai-client.d.ts.map +0 -1
  214. package/dist/ai/simple-ai-client.js +0 -181
  215. package/dist/ai/simple-ai-client.js.map +0 -1
  216. package/dist/analyzers/analyzer.d.ts +0 -23
  217. package/dist/analyzers/analyzer.d.ts.map +0 -1
  218. package/dist/analyzers/analyzer.js +0 -127
  219. package/dist/analyzers/analyzer.js.map +0 -1
  220. package/dist/cli-old/cli.d.ts +0 -3
  221. package/dist/cli-old/cli.d.ts.map +0 -1
  222. package/dist/cli-old/cli.js +0 -388
  223. package/dist/cli-old/cli.js.map +0 -1
  224. package/dist/commands/review.d.ts +0 -11
  225. package/dist/commands/review.d.ts.map +0 -1
  226. package/dist/commands/review.js +0 -82
  227. package/dist/commands/review.js.map +0 -1
  228. package/dist/database/connection.d.ts +0 -40
  229. package/dist/database/connection.d.ts.map +0 -1
  230. package/dist/database/connection.js +0 -136
  231. package/dist/database/connection.js.map +0 -1
  232. package/dist/database/introspection.d.ts +0 -59
  233. package/dist/database/introspection.d.ts.map +0 -1
  234. package/dist/database/introspection.js +0 -124
  235. package/dist/database/introspection.js.map +0 -1
  236. package/dist/generators/markdown-generator.d.ts +0 -8
  237. package/dist/generators/markdown-generator.d.ts.map +0 -1
  238. package/dist/generators/markdown-generator.js +0 -106
  239. package/dist/generators/markdown-generator.js.map +0 -1
  240. package/dist/generators/sql-generator.d.ts +0 -20
  241. package/dist/generators/sql-generator.d.ts.map +0 -1
  242. package/dist/generators/sql-generator.js +0 -83
  243. package/dist/generators/sql-generator.js.map +0 -1
  244. package/dist/state/state-manager.d.ts +0 -95
  245. package/dist/state/state-manager.d.ts.map +0 -1
  246. package/dist/state/state-manager.js +0 -236
  247. package/dist/state/state-manager.js.map +0 -1
  248. package/dist/types/state-file.d.ts +0 -124
  249. package/dist/types/state-file.d.ts.map +0 -1
  250. package/dist/types/state-file.js +0 -79
  251. package/dist/types/state-file.js.map +0 -1
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ /**
3
+ * Generates SQL scripts with sp_addextendedproperty statements
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SQLGenerator = void 0;
7
+ class SQLGenerator {
8
+ /**
9
+ * Generate SQL script
10
+ */
11
+ generate(state, options = {}) {
12
+ const lines = [];
13
+ // Header
14
+ lines.push('-- Database Documentation Script');
15
+ lines.push(`-- Generated: ${new Date().toISOString()}`);
16
+ lines.push(`-- Database: ${state.database.name}`);
17
+ lines.push(`-- Server: ${state.database.server}`);
18
+ lines.push('');
19
+ lines.push('-- This script adds MS_Description extended properties to database objects');
20
+ lines.push('');
21
+ // Generate statements for each schema
22
+ for (const schema of state.schemas) {
23
+ lines.push('');
24
+ lines.push(`-- Schema: ${schema.name}`);
25
+ lines.push('');
26
+ // Schema description
27
+ if (schema.description) {
28
+ lines.push(this.generateSchemaDescription(schema.name, schema.description));
29
+ lines.push('GO');
30
+ lines.push('');
31
+ }
32
+ // Table descriptions
33
+ for (const table of schema.tables) {
34
+ // Check filters
35
+ if (options.approvedOnly && !table.userApproved) {
36
+ continue;
37
+ }
38
+ if (options.confidenceThreshold && table.descriptionIterations.length > 0) {
39
+ const latest = table.descriptionIterations[table.descriptionIterations.length - 1];
40
+ if ((latest.confidence || 0) < options.confidenceThreshold) {
41
+ continue;
42
+ }
43
+ }
44
+ // Table description
45
+ if (table.description) {
46
+ lines.push(`-- Table: ${schema.name}.${table.name}`);
47
+ lines.push(this.generateTableDescription(schema.name, table.name, table.description));
48
+ lines.push('GO');
49
+ lines.push('');
50
+ }
51
+ // Column descriptions
52
+ for (const column of table.columns) {
53
+ if (column.description) {
54
+ lines.push(this.generateColumnDescription(schema.name, table.name, column.name, column.description));
55
+ lines.push('GO');
56
+ }
57
+ }
58
+ lines.push('');
59
+ }
60
+ }
61
+ return lines.join('\n');
62
+ }
63
+ /**
64
+ * Generate schema description statement
65
+ */
66
+ generateSchemaDescription(schemaName, description) {
67
+ const escapedDescription = this.escapeString(description);
68
+ return `
69
+ IF EXISTS (
70
+ SELECT 1 FROM sys.extended_properties
71
+ WHERE major_id = SCHEMA_ID('${schemaName}')
72
+ AND name = 'MS_Description'
73
+ AND minor_id = 0
74
+ )
75
+ BEGIN
76
+ EXEC sp_dropextendedproperty
77
+ @name = N'MS_Description',
78
+ @level0type = N'SCHEMA',
79
+ @level0name = N'${schemaName}';
80
+ END
81
+
82
+ EXEC sp_addextendedproperty
83
+ @name = N'MS_Description',
84
+ @value = N'${escapedDescription}',
85
+ @level0type = N'SCHEMA',
86
+ @level0name = N'${schemaName}';
87
+ `.trim();
88
+ }
89
+ /**
90
+ * Generate table description statement
91
+ */
92
+ generateTableDescription(schemaName, tableName, description) {
93
+ const escapedDescription = this.escapeString(description);
94
+ return `
95
+ IF EXISTS (
96
+ SELECT 1 FROM sys.extended_properties ep
97
+ INNER JOIN sys.tables t ON ep.major_id = t.object_id
98
+ INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
99
+ WHERE s.name = '${schemaName}'
100
+ AND t.name = '${tableName}'
101
+ AND ep.name = 'MS_Description'
102
+ AND ep.minor_id = 0
103
+ )
104
+ BEGIN
105
+ EXEC sp_dropextendedproperty
106
+ @name = N'MS_Description',
107
+ @level0type = N'SCHEMA',
108
+ @level0name = N'${schemaName}',
109
+ @level1type = N'TABLE',
110
+ @level1name = N'${tableName}';
111
+ END
112
+
113
+ EXEC sp_addextendedproperty
114
+ @name = N'MS_Description',
115
+ @value = N'${escapedDescription}',
116
+ @level0type = N'SCHEMA',
117
+ @level0name = N'${schemaName}',
118
+ @level1type = N'TABLE',
119
+ @level1name = N'${tableName}';
120
+ `.trim();
121
+ }
122
+ /**
123
+ * Generate column description statement
124
+ */
125
+ generateColumnDescription(schemaName, tableName, columnName, description) {
126
+ const escapedDescription = this.escapeString(description);
127
+ return `
128
+ IF EXISTS (
129
+ SELECT 1 FROM sys.extended_properties ep
130
+ INNER JOIN sys.tables t ON ep.major_id = t.object_id
131
+ INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
132
+ INNER JOIN sys.columns c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id
133
+ WHERE s.name = '${schemaName}'
134
+ AND t.name = '${tableName}'
135
+ AND c.name = '${columnName}'
136
+ AND ep.name = 'MS_Description'
137
+ )
138
+ BEGIN
139
+ EXEC sp_dropextendedproperty
140
+ @name = N'MS_Description',
141
+ @level0type = N'SCHEMA',
142
+ @level0name = N'${schemaName}',
143
+ @level1type = N'TABLE',
144
+ @level1name = N'${tableName}',
145
+ @level2type = N'COLUMN',
146
+ @level2name = N'${columnName}';
147
+ END
148
+
149
+ EXEC sp_addextendedproperty
150
+ @name = N'MS_Description',
151
+ @value = N'${escapedDescription}',
152
+ @level0type = N'SCHEMA',
153
+ @level0name = N'${schemaName}',
154
+ @level1type = N'TABLE',
155
+ @level1name = N'${tableName}',
156
+ @level2type = N'COLUMN',
157
+ @level2name = N'${columnName}';
158
+ `.trim();
159
+ }
160
+ /**
161
+ * Escape string for SQL
162
+ */
163
+ escapeString(str) {
164
+ return str.replace(/'/g, "''");
165
+ }
166
+ }
167
+ exports.SQLGenerator = SQLGenerator;
168
+ //# sourceMappingURL=SQLGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQLGenerator.js","sourceRoot":"","sources":["../../src/generators/SQLGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Exports for generators module
3
+ */
4
+ export { SQLGenerator, SQLGeneratorOptions } from './SQLGenerator.js';
5
+ export { MarkdownGenerator } from './MarkdownGenerator.js';
6
+ export { ReportGenerator } from './ReportGenerator.js';
7
+ export { HTMLGenerator, HTMLGeneratorOptions } from './HTMLGenerator.js';
8
+ export { CSVGenerator, CSVGeneratorOptions, CSVExport } from './CSVGenerator.js';
9
+ export { MermaidGenerator, MermaidGeneratorOptions } from './MermaidGenerator.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ /**
3
+ * Exports for generators module
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MermaidGenerator = exports.CSVGenerator = exports.HTMLGenerator = exports.ReportGenerator = exports.MarkdownGenerator = exports.SQLGenerator = void 0;
7
+ var SQLGenerator_js_1 = require("./SQLGenerator.js");
8
+ Object.defineProperty(exports, "SQLGenerator", { enumerable: true, get: function () { return SQLGenerator_js_1.SQLGenerator; } });
9
+ var MarkdownGenerator_js_1 = require("./MarkdownGenerator.js");
10
+ Object.defineProperty(exports, "MarkdownGenerator", { enumerable: true, get: function () { return MarkdownGenerator_js_1.MarkdownGenerator; } });
11
+ var ReportGenerator_js_1 = require("./ReportGenerator.js");
12
+ Object.defineProperty(exports, "ReportGenerator", { enumerable: true, get: function () { return ReportGenerator_js_1.ReportGenerator; } });
13
+ var HTMLGenerator_js_1 = require("./HTMLGenerator.js");
14
+ Object.defineProperty(exports, "HTMLGenerator", { enumerable: true, get: function () { return HTMLGenerator_js_1.HTMLGenerator; } });
15
+ var CSVGenerator_js_1 = require("./CSVGenerator.js");
16
+ Object.defineProperty(exports, "CSVGenerator", { enumerable: true, get: function () { return CSVGenerator_js_1.CSVGenerator; } });
17
+ var MermaidGenerator_js_1 = require("./MermaidGenerator.js");
18
+ Object.defineProperty(exports, "MermaidGenerator", { enumerable: true, get: function () { return MermaidGenerator_js_1.MermaidGenerator; } });
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,qDAAsE;AAA7D,+GAAA,YAAY,OAAA;AACrB,+DAA2D;AAAlD,yHAAA,iBAAiB,OAAA;AAC1B,2DAAuD;AAA9C,qHAAA,eAAe,OAAA;AACxB,uDAAyE;AAAhE,iHAAA,aAAa,OAAA;AACtB,qDAAiF;AAAxE,+GAAA,YAAY,OAAA;AACrB,6DAAkF;AAAzE,uHAAA,gBAAgB,OAAA"}
package/dist/index.d.ts CHANGED
@@ -1,23 +1,14 @@
1
1
  /**
2
- * @memberjunction/db-auto-doc - SQL Server Database Auto-Documentation
3
- *
4
- * AI-powered documentation generator for SQL Server databases.
5
- * Works standalone - no MemberJunction runtime required.
6
- *
7
- * Use via CLI:
8
- * db-auto-doc init
9
- * db-auto-doc analyze --interactive
10
- * db-auto-doc review
11
- * db-auto-doc export --format=sql
12
- *
13
- * Or programmatically:
2
+ * DBAutoDoc - AI-powered SQL Server database documentation generator
3
+ * Main exports for programmatic use
14
4
  */
15
- export * from './types/state-file';
16
- export * from './database/connection';
17
- export * from './database/introspection';
18
- export * from './state/state-manager';
19
- export * from './ai/simple-ai-client';
20
- export * from './analyzers/analyzer';
21
- export * from './generators/sql-generator';
22
- export * from './generators/markdown-generator';
5
+ export * from './api/index.js';
6
+ export * from './types/index.js';
7
+ export * from './database/index.js';
8
+ export * from './prompts/index.js';
9
+ export * from './state/index.js';
10
+ export * from './core/index.js';
11
+ export * from './core/AnalysisOrchestrator.js';
12
+ export * from './generators/index.js';
13
+ export * from './utils/index.js';
23
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,gBAAgB,CAAC;AAG/B,cAAc,kBAAkB,CAAC;AAGjC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gCAAgC,CAAC;AAG/C,cAAc,uBAAuB,CAAC;AAGtC,cAAc,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -1,17 +1,7 @@
1
1
  "use strict";
2
2
  /**
3
- * @memberjunction/db-auto-doc - SQL Server Database Auto-Documentation
4
- *
5
- * AI-powered documentation generator for SQL Server databases.
6
- * Works standalone - no MemberJunction runtime required.
7
- *
8
- * Use via CLI:
9
- * db-auto-doc init
10
- * db-auto-doc analyze --interactive
11
- * db-auto-doc review
12
- * db-auto-doc export --format=sql
13
- *
14
- * Or programmatically:
3
+ * DBAutoDoc - AI-powered SQL Server database documentation generator
4
+ * Main exports for programmatic use
15
5
  */
16
6
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
7
  if (k2 === undefined) k2 = k;
@@ -28,12 +18,21 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
28
18
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
29
19
  };
30
20
  Object.defineProperty(exports, "__esModule", { value: true });
31
- __exportStar(require("./types/state-file"), exports);
32
- __exportStar(require("./database/connection"), exports);
33
- __exportStar(require("./database/introspection"), exports);
34
- __exportStar(require("./state/state-manager"), exports);
35
- __exportStar(require("./ai/simple-ai-client"), exports);
36
- __exportStar(require("./analyzers/analyzer"), exports);
37
- __exportStar(require("./generators/sql-generator"), exports);
38
- __exportStar(require("./generators/markdown-generator"), exports);
21
+ // Programmatic API (primary entry point for library usage)
22
+ __exportStar(require("./api/index.js"), exports);
23
+ // Core types
24
+ __exportStar(require("./types/index.js"), exports);
25
+ // Database layer
26
+ __exportStar(require("./database/index.js"), exports);
27
+ // Prompts
28
+ __exportStar(require("./prompts/index.js"), exports);
29
+ // State management
30
+ __exportStar(require("./state/index.js"), exports);
31
+ // Analysis engine
32
+ __exportStar(require("./core/index.js"), exports);
33
+ __exportStar(require("./core/AnalysisOrchestrator.js"), exports);
34
+ // Generators
35
+ __exportStar(require("./generators/index.js"), exports);
36
+ // Utilities
37
+ __exportStar(require("./utils/index.js"), exports);
39
38
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;;;;;;;;;;;;;;AAEH,qDAAmC;AACnC,wDAAsC;AACtC,2DAAyC;AACzC,wDAAsC;AACtC,wDAAsC;AACtC,uDAAqC;AACrC,6DAA2C;AAC3C,kEAAgD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,2DAA2D;AAC3D,iDAA+B;AAE/B,aAAa;AACb,mDAAiC;AAEjC,iBAAiB;AACjB,sDAAoC;AAEpC,UAAU;AACV,qDAAmC;AAEnC,mBAAmB;AACnB,mDAAiC;AAEjC,kBAAkB;AAClB,kDAAgC;AAChC,iEAA+C;AAE/C,aAAa;AACb,wDAAsC;AAEtC,YAAY;AACZ,mDAAiC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Prompt execution engine combining Nunjucks templating with AI/Core
3
+ */
4
+ import { AIConfig } from '../types/config.js';
5
+ import { PromptExecutionResult } from '../types/prompts.js';
6
+ export type GuardrailCheckFn = () => {
7
+ canContinue: boolean;
8
+ reason?: string;
9
+ };
10
+ export declare class PromptEngine {
11
+ private config;
12
+ private nunjucksEnv;
13
+ private llm;
14
+ private guardrailCheck?;
15
+ constructor(config: AIConfig, promptsDir: string);
16
+ /**
17
+ * Set guardrail checking callback
18
+ * This will be called before every LLM execution to check if we should continue
19
+ */
20
+ setGuardrailCheck(checkFn: GuardrailCheckFn): void;
21
+ /**
22
+ * Initialize the prompt loader
23
+ */
24
+ initialize(): Promise<void>;
25
+ /**
26
+ * Create appropriate LLM based on provider configuration
27
+ * Uses MJ ClassFactory pattern for BaseLLM instantiation
28
+ */
29
+ private createLLM;
30
+ /**
31
+ * Add custom Nunjucks filters
32
+ * Pattern from Templates package
33
+ */
34
+ private addCustomFilters;
35
+ /**
36
+ * Render a Nunjucks template with context
37
+ * Pattern from Templates.renderTemplateAsync()
38
+ */
39
+ private renderTemplate;
40
+ /**
41
+ * Execute a prompt with AI/Core
42
+ * Main entry point for DBAutoDoc analysis
43
+ */
44
+ executePrompt<T>(promptName: string, context: any, options?: {
45
+ systemPrompt?: string;
46
+ temperature?: number;
47
+ maxTokens?: number;
48
+ responseFormat?: 'JSON' | 'Text';
49
+ }): Promise<PromptExecutionResult<T>>;
50
+ /**
51
+ * Execute multiple prompts in parallel
52
+ * Uses AI/Core's ChatCompletions for efficiency
53
+ */
54
+ executePromptsParallel<T>(requests: Array<{
55
+ promptName: string;
56
+ context: any;
57
+ options?: {
58
+ systemPrompt?: string;
59
+ temperature?: number;
60
+ maxTokens?: number;
61
+ responseFormat?: 'JSON' | 'Text';
62
+ };
63
+ }>): Promise<Array<PromptExecutionResult<T>>>;
64
+ }
65
+ //# sourceMappingURL=PromptEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptEngine.d.ts","sourceRoot":"","sources":["../../src/prompts/PromptEngine.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GAAG,MAAM;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/E,qBAAa,YAAY;IAMrB,OAAO,CAAC,MAAM;IALhB,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,cAAc,CAAC,CAAmB;gBAGhC,MAAM,EAAE,QAAQ,EACxB,UAAU,EAAE,MAAM;IAgBpB;;;OAGG;IACI,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAIzD;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQxC;;;OAGG;IACH,OAAO,CAAC,SAAS;IAkBjB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAkCxB;;;OAGG;YACW,cAAc;IAe5B;;;OAGG;IACU,aAAa,CAAC,CAAC,EAC1B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,GAAG,EACZ,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;KAClC,GACA,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IA+FpC;;;OAGG;IACU,sBAAsB,CAAC,CAAC,EACnC,QAAQ,EAAE,KAAK,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,GAAG,CAAC;QACb,OAAO,CAAC,EAAE;YACR,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;SAClC,CAAC;KACH,CAAC,GACD,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;CAyD5C"}
@@ -0,0 +1,282 @@
1
+ "use strict";
2
+ /**
3
+ * Prompt execution engine combining Nunjucks templating with AI/Core
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || function (mod) {
22
+ if (mod && mod.__esModule) return mod;
23
+ var result = {};
24
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
25
+ __setModuleDefault(result, mod);
26
+ return result;
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.PromptEngine = void 0;
30
+ const nunjucks = __importStar(require("nunjucks"));
31
+ const ai_1 = require("@memberjunction/ai");
32
+ const global_1 = require("@memberjunction/global");
33
+ const PromptFileLoader_js_1 = require("./PromptFileLoader.js");
34
+ class PromptEngine {
35
+ constructor(config, promptsDir) {
36
+ this.config = config;
37
+ // Initialize Nunjucks with custom loader
38
+ const loader = new PromptFileLoader_js_1.PromptFileLoader(promptsDir);
39
+ this.nunjucksEnv = new nunjucks.Environment(loader, {
40
+ autoescape: false,
41
+ dev: true
42
+ });
43
+ // Add custom filters
44
+ this.addCustomFilters();
45
+ // Initialize AI/Core LLM
46
+ this.llm = this.createLLM();
47
+ }
48
+ /**
49
+ * Set guardrail checking callback
50
+ * This will be called before every LLM execution to check if we should continue
51
+ */
52
+ setGuardrailCheck(checkFn) {
53
+ this.guardrailCheck = checkFn;
54
+ }
55
+ /**
56
+ * Initialize the prompt loader
57
+ */
58
+ async initialize() {
59
+ const env = this.nunjucksEnv;
60
+ const loader = env.loaders?.[0];
61
+ if (loader) {
62
+ await loader.loadAll();
63
+ }
64
+ }
65
+ /**
66
+ * Create appropriate LLM based on provider configuration
67
+ * Uses MJ ClassFactory pattern for BaseLLM instantiation
68
+ */
69
+ createLLM() {
70
+ const { provider, apiKey } = this.config;
71
+ // Use MJ ClassFactory to create BaseLLM instance
72
+ // Provider maps to class key (e.g., 'OpenAILLM', 'AnthropicLLM', etc.)
73
+ const llm = global_1.MJGlobal.Instance.ClassFactory.CreateInstance(ai_1.BaseLLM, provider, apiKey);
74
+ if (!llm) {
75
+ throw new Error(`Failed to create LLM instance for provider: ${provider}. Check that the provider name matches a registered BaseLLM subclass.`);
76
+ }
77
+ return llm;
78
+ }
79
+ /**
80
+ * Add custom Nunjucks filters
81
+ * Pattern from Templates package
82
+ */
83
+ addCustomFilters() {
84
+ // JSON formatting with indentation
85
+ this.nunjucksEnv.addFilter('json', (obj, indent = 2) => {
86
+ try {
87
+ return JSON.stringify(obj, null, indent);
88
+ }
89
+ catch (error) {
90
+ return `[Error serializing to JSON: ${error.message}]`;
91
+ }
92
+ });
93
+ // Compact JSON
94
+ this.nunjucksEnv.addFilter('jsoninline', (obj) => {
95
+ try {
96
+ return JSON.stringify(obj);
97
+ }
98
+ catch (error) {
99
+ return `[Error serializing to JSON: ${error.message}]`;
100
+ }
101
+ });
102
+ // Parse JSON strings
103
+ this.nunjucksEnv.addFilter('jsonparse', (str) => {
104
+ try {
105
+ return JSON.parse(str);
106
+ }
107
+ catch (error) {
108
+ return str;
109
+ }
110
+ });
111
+ // Array join filter
112
+ this.nunjucksEnv.addFilter('join', (arr, separator = ', ') => {
113
+ return Array.isArray(arr) ? arr.join(separator) : arr;
114
+ });
115
+ }
116
+ /**
117
+ * Render a Nunjucks template with context
118
+ * Pattern from Templates.renderTemplateAsync()
119
+ */
120
+ async renderTemplate(promptName, context) {
121
+ return new Promise((resolve, reject) => {
122
+ this.nunjucksEnv.render(promptName, context, (err, result) => {
123
+ if (err) {
124
+ console.error(`[PromptEngine] FATAL: Template rendering failed for ${promptName}`);
125
+ console.error(`[PromptEngine] Error:`, err.message);
126
+ console.error(`[PromptEngine] Context keys:`, Object.keys(context));
127
+ console.error(`[PromptEngine] Terminating process due to template rendering failure`);
128
+ process.exit(1);
129
+ }
130
+ resolve(result || '');
131
+ });
132
+ });
133
+ }
134
+ /**
135
+ * Execute a prompt with AI/Core
136
+ * Main entry point for DBAutoDoc analysis
137
+ */
138
+ async executePrompt(promptName, context, options) {
139
+ try {
140
+ // Check guardrails before executing
141
+ if (this.guardrailCheck) {
142
+ const check = this.guardrailCheck();
143
+ if (!check.canContinue) {
144
+ return {
145
+ success: false,
146
+ errorMessage: `Guardrail limit exceeded: ${check.reason}`,
147
+ tokensUsed: 0,
148
+ guardrailExceeded: true
149
+ };
150
+ }
151
+ }
152
+ // 1. Render Nunjucks template with context
153
+ const renderedPrompt = await this.renderTemplate(promptName, context);
154
+ // 2. Build ChatParams for AI/Core
155
+ const messages = [];
156
+ // Add system prompt if provided
157
+ if (options?.systemPrompt) {
158
+ messages.push({
159
+ role: 'system',
160
+ content: options.systemPrompt
161
+ });
162
+ }
163
+ // Add rendered user prompt
164
+ messages.push({
165
+ role: 'user',
166
+ content: renderedPrompt
167
+ });
168
+ const params = {
169
+ model: this.config.model,
170
+ messages,
171
+ temperature: options?.temperature ?? this.config.temperature ?? 0.1,
172
+ maxOutputTokens: options?.maxTokens ?? this.config.maxTokens,
173
+ responseFormat: options?.responseFormat ?? 'JSON',
174
+ ...(this.config.effortLevel != null && { effortLevel: this.config.effortLevel.toString() }) // Optional 1-100, BaseLLM drivers handle if supported
175
+ };
176
+ // 3. Execute with AI/Core (follows RunView pattern - doesn't throw)
177
+ const chatResult = await this.llm.ChatCompletion(params);
178
+ // 4. Check success (IMPORTANT: like RunView, check .success property)
179
+ if (!chatResult.success) {
180
+ return {
181
+ success: false,
182
+ errorMessage: chatResult.errorMessage || 'Unknown error',
183
+ tokensUsed: 0
184
+ };
185
+ }
186
+ // 5. Extract result and parse JSON if needed
187
+ const content = chatResult.data.choices[0].message.content;
188
+ const usage = chatResult.data.usage;
189
+ let parsedResult;
190
+ if (options?.responseFormat === 'JSON') {
191
+ try {
192
+ parsedResult = JSON.parse(content);
193
+ }
194
+ catch (parseError) {
195
+ return {
196
+ success: false,
197
+ errorMessage: `Failed to parse JSON response: ${parseError.message}\n\nRaw content:\n${content}`,
198
+ tokensUsed: usage?.totalTokens || 0,
199
+ promptInput: renderedPrompt,
200
+ promptOutput: content
201
+ };
202
+ }
203
+ }
204
+ else {
205
+ parsedResult = content;
206
+ }
207
+ return {
208
+ success: true,
209
+ result: parsedResult,
210
+ tokensUsed: usage?.totalTokens || 0,
211
+ cost: usage?.cost,
212
+ promptInput: renderedPrompt,
213
+ promptOutput: content
214
+ };
215
+ }
216
+ catch (error) {
217
+ return {
218
+ success: false,
219
+ errorMessage: `Prompt execution failed: ${error.message}`,
220
+ tokensUsed: 0
221
+ };
222
+ }
223
+ }
224
+ /**
225
+ * Execute multiple prompts in parallel
226
+ * Uses AI/Core's ChatCompletions for efficiency
227
+ */
228
+ async executePromptsParallel(requests) {
229
+ try {
230
+ // Render all templates first
231
+ const renderedPrompts = await Promise.all(requests.map(req => this.renderTemplate(req.promptName, req.context)));
232
+ // Build ChatParams array
233
+ const paramsArray = renderedPrompts.map((prompt, i) => ({
234
+ model: this.config.model,
235
+ messages: [{ role: 'user', content: prompt }],
236
+ temperature: requests[i].options?.temperature ?? this.config.temperature ?? 0.1,
237
+ maxOutputTokens: requests[i].options?.maxTokens ?? this.config.maxTokens,
238
+ responseFormat: requests[i].options?.responseFormat ?? 'JSON'
239
+ }));
240
+ // Execute in parallel using AI/Core
241
+ const results = await this.llm.ChatCompletions(paramsArray);
242
+ // Parse and return
243
+ return results.map((chatResult, i) => {
244
+ if (!chatResult.success) {
245
+ return {
246
+ success: false,
247
+ errorMessage: chatResult.errorMessage,
248
+ tokensUsed: 0
249
+ };
250
+ }
251
+ const content = chatResult.data.choices[0].message.content;
252
+ const usage = chatResult.data.usage;
253
+ try {
254
+ const parsed = JSON.parse(content);
255
+ return {
256
+ success: true,
257
+ result: parsed,
258
+ tokensUsed: usage?.totalTokens || 0,
259
+ cost: usage?.cost
260
+ };
261
+ }
262
+ catch (error) {
263
+ return {
264
+ success: false,
265
+ errorMessage: `JSON parse error: ${error.message}`,
266
+ tokensUsed: usage?.totalTokens || 0
267
+ };
268
+ }
269
+ });
270
+ }
271
+ catch (error) {
272
+ // If rendering or execution fails completely, return array of errors
273
+ return requests.map(() => ({
274
+ success: false,
275
+ errorMessage: `Parallel execution failed: ${error.message}`,
276
+ tokensUsed: 0
277
+ }));
278
+ }
279
+ }
280
+ }
281
+ exports.PromptEngine = PromptEngine;
282
+ //# sourceMappingURL=PromptEngine.js.map