@memberjunction/db-auto-doc 2.117.0 → 2.119.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 (263) hide show
  1. package/README.md +803 -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/generate-queries.d.ts +17 -0
  20. package/dist/commands/generate-queries.d.ts.map +1 -0
  21. package/dist/commands/generate-queries.js +182 -0
  22. package/dist/commands/generate-queries.js.map +1 -0
  23. package/dist/commands/init.d.ts +3 -4
  24. package/dist/commands/init.d.ts.map +1 -1
  25. package/dist/commands/init.js +206 -144
  26. package/dist/commands/init.js.map +1 -1
  27. package/dist/commands/reset.d.ts +4 -1
  28. package/dist/commands/reset.d.ts.map +1 -1
  29. package/dist/commands/reset.js +33 -19
  30. package/dist/commands/reset.js.map +1 -1
  31. package/dist/commands/status.d.ts +10 -0
  32. package/dist/commands/status.d.ts.map +1 -0
  33. package/dist/commands/status.js +66 -0
  34. package/dist/commands/status.js.map +1 -0
  35. package/dist/core/AnalysisEngine.d.ts +108 -0
  36. package/dist/core/AnalysisEngine.d.ts.map +1 -0
  37. package/dist/core/AnalysisEngine.js +716 -0
  38. package/dist/core/AnalysisEngine.js.map +1 -0
  39. package/dist/core/AnalysisOrchestrator.d.ts +41 -0
  40. package/dist/core/AnalysisOrchestrator.d.ts.map +1 -0
  41. package/dist/core/AnalysisOrchestrator.js +377 -0
  42. package/dist/core/AnalysisOrchestrator.js.map +1 -0
  43. package/dist/core/BackpropagationEngine.d.ts +32 -0
  44. package/dist/core/BackpropagationEngine.d.ts.map +1 -0
  45. package/dist/core/BackpropagationEngine.js +121 -0
  46. package/dist/core/BackpropagationEngine.js.map +1 -0
  47. package/dist/core/ConvergenceDetector.d.ts +27 -0
  48. package/dist/core/ConvergenceDetector.d.ts.map +1 -0
  49. package/dist/core/ConvergenceDetector.js +92 -0
  50. package/dist/core/ConvergenceDetector.js.map +1 -0
  51. package/dist/core/GuardrailsManager.d.ts +78 -0
  52. package/dist/core/GuardrailsManager.d.ts.map +1 -0
  53. package/dist/core/GuardrailsManager.js +367 -0
  54. package/dist/core/GuardrailsManager.js.map +1 -0
  55. package/dist/core/index.d.ts +7 -0
  56. package/dist/core/index.d.ts.map +1 -0
  57. package/dist/core/index.js +13 -0
  58. package/dist/core/index.js.map +1 -0
  59. package/dist/database/Database.d.ts +56 -0
  60. package/dist/database/Database.d.ts.map +1 -0
  61. package/dist/database/Database.js +172 -0
  62. package/dist/database/Database.js.map +1 -0
  63. package/dist/database/TopologicalSorter.d.ts +25 -0
  64. package/dist/database/TopologicalSorter.d.ts.map +1 -0
  65. package/dist/database/TopologicalSorter.js +150 -0
  66. package/dist/database/TopologicalSorter.js.map +1 -0
  67. package/dist/database/index.d.ts +6 -0
  68. package/dist/database/index.d.ts.map +1 -0
  69. package/dist/database/index.js +14 -0
  70. package/dist/database/index.js.map +1 -0
  71. package/dist/discovery/ColumnStatsCache.d.ts +91 -0
  72. package/dist/discovery/ColumnStatsCache.d.ts.map +1 -0
  73. package/dist/discovery/ColumnStatsCache.js +231 -0
  74. package/dist/discovery/ColumnStatsCache.js.map +1 -0
  75. package/dist/discovery/DiscoveryEngine.d.ts +100 -0
  76. package/dist/discovery/DiscoveryEngine.d.ts.map +1 -0
  77. package/dist/discovery/DiscoveryEngine.js +726 -0
  78. package/dist/discovery/DiscoveryEngine.js.map +1 -0
  79. package/dist/discovery/DiscoveryTriggerAnalyzer.d.ts +57 -0
  80. package/dist/discovery/DiscoveryTriggerAnalyzer.d.ts.map +1 -0
  81. package/dist/discovery/DiscoveryTriggerAnalyzer.js +186 -0
  82. package/dist/discovery/DiscoveryTriggerAnalyzer.js.map +1 -0
  83. package/dist/discovery/FKDetector.d.ts +47 -0
  84. package/dist/discovery/FKDetector.d.ts.map +1 -0
  85. package/dist/discovery/FKDetector.js +317 -0
  86. package/dist/discovery/FKDetector.js.map +1 -0
  87. package/dist/discovery/LLMDiscoveryValidator.d.ts +64 -0
  88. package/dist/discovery/LLMDiscoveryValidator.d.ts.map +1 -0
  89. package/dist/discovery/LLMDiscoveryValidator.js +431 -0
  90. package/dist/discovery/LLMDiscoveryValidator.js.map +1 -0
  91. package/dist/discovery/LLMSanityChecker.d.ts +38 -0
  92. package/dist/discovery/LLMSanityChecker.d.ts.map +1 -0
  93. package/dist/discovery/LLMSanityChecker.js +156 -0
  94. package/dist/discovery/LLMSanityChecker.js.map +1 -0
  95. package/dist/discovery/PKDetector.d.ts +62 -0
  96. package/dist/discovery/PKDetector.d.ts.map +1 -0
  97. package/dist/discovery/PKDetector.js +436 -0
  98. package/dist/discovery/PKDetector.js.map +1 -0
  99. package/dist/discovery/index.d.ts +9 -0
  100. package/dist/discovery/index.d.ts.map +1 -0
  101. package/dist/discovery/index.js +25 -0
  102. package/dist/discovery/index.js.map +1 -0
  103. package/dist/drivers/BaseAutoDocDriver.d.ts +132 -0
  104. package/dist/drivers/BaseAutoDocDriver.d.ts.map +1 -0
  105. package/dist/drivers/BaseAutoDocDriver.js +121 -0
  106. package/dist/drivers/BaseAutoDocDriver.js.map +1 -0
  107. package/dist/drivers/MySQLDriver.d.ts +61 -0
  108. package/dist/drivers/MySQLDriver.d.ts.map +1 -0
  109. package/dist/drivers/MySQLDriver.js +668 -0
  110. package/dist/drivers/MySQLDriver.js.map +1 -0
  111. package/dist/drivers/PostgreSQLDriver.d.ts +65 -0
  112. package/dist/drivers/PostgreSQLDriver.d.ts.map +1 -0
  113. package/dist/drivers/PostgreSQLDriver.js +704 -0
  114. package/dist/drivers/PostgreSQLDriver.js.map +1 -0
  115. package/dist/drivers/SQLServerDriver.d.ts +61 -0
  116. package/dist/drivers/SQLServerDriver.d.ts.map +1 -0
  117. package/dist/drivers/SQLServerDriver.js +667 -0
  118. package/dist/drivers/SQLServerDriver.js.map +1 -0
  119. package/dist/generators/CSVGenerator.d.ts +35 -0
  120. package/dist/generators/CSVGenerator.d.ts.map +1 -0
  121. package/dist/generators/CSVGenerator.js +154 -0
  122. package/dist/generators/CSVGenerator.js.map +1 -0
  123. package/dist/generators/HTMLGenerator.d.ts +29 -0
  124. package/dist/generators/HTMLGenerator.d.ts.map +1 -0
  125. package/dist/generators/HTMLGenerator.js +710 -0
  126. package/dist/generators/HTMLGenerator.js.map +1 -0
  127. package/dist/generators/MarkdownGenerator.d.ts +27 -0
  128. package/dist/generators/MarkdownGenerator.d.ts.map +1 -0
  129. package/dist/generators/MarkdownGenerator.js +361 -0
  130. package/dist/generators/MarkdownGenerator.js.map +1 -0
  131. package/dist/generators/MermaidGenerator.d.ts +35 -0
  132. package/dist/generators/MermaidGenerator.d.ts.map +1 -0
  133. package/dist/generators/MermaidGenerator.js +321 -0
  134. package/dist/generators/MermaidGenerator.js.map +1 -0
  135. package/dist/generators/ReportGenerator.d.ts +22 -0
  136. package/dist/generators/ReportGenerator.d.ts.map +1 -0
  137. package/dist/generators/ReportGenerator.js +176 -0
  138. package/dist/generators/ReportGenerator.js.map +1 -0
  139. package/dist/generators/SQLGenerator.d.ts +31 -0
  140. package/dist/generators/SQLGenerator.d.ts.map +1 -0
  141. package/dist/generators/SQLGenerator.js +168 -0
  142. package/dist/generators/SQLGenerator.js.map +1 -0
  143. package/dist/generators/SampleQueryGenerator.d.ts +64 -0
  144. package/dist/generators/SampleQueryGenerator.d.ts.map +1 -0
  145. package/dist/generators/SampleQueryGenerator.js +500 -0
  146. package/dist/generators/SampleQueryGenerator.js.map +1 -0
  147. package/dist/generators/index.d.ts +10 -0
  148. package/dist/generators/index.d.ts.map +1 -0
  149. package/dist/generators/index.js +19 -0
  150. package/dist/generators/index.js.map +1 -0
  151. package/dist/index.d.ts +11 -20
  152. package/dist/index.d.ts.map +1 -1
  153. package/dist/index.js +19 -20
  154. package/dist/index.js.map +1 -1
  155. package/dist/prompts/PromptEngine.d.ts +65 -0
  156. package/dist/prompts/PromptEngine.d.ts.map +1 -0
  157. package/dist/prompts/PromptEngine.js +305 -0
  158. package/dist/prompts/PromptEngine.js.map +1 -0
  159. package/dist/prompts/PromptFileLoader.d.ts +21 -0
  160. package/dist/prompts/PromptFileLoader.d.ts.map +1 -0
  161. package/dist/prompts/PromptFileLoader.js +74 -0
  162. package/dist/prompts/PromptFileLoader.js.map +1 -0
  163. package/dist/prompts/index.d.ts +6 -0
  164. package/dist/prompts/index.d.ts.map +1 -0
  165. package/dist/prompts/index.js +11 -0
  166. package/dist/prompts/index.js.map +1 -0
  167. package/dist/state/IterationTracker.d.ts +64 -0
  168. package/dist/state/IterationTracker.d.ts.map +1 -0
  169. package/dist/state/IterationTracker.js +136 -0
  170. package/dist/state/IterationTracker.js.map +1 -0
  171. package/dist/state/StateManager.d.ts +79 -0
  172. package/dist/state/StateManager.d.ts.map +1 -0
  173. package/dist/state/StateManager.js +348 -0
  174. package/dist/state/StateManager.js.map +1 -0
  175. package/dist/state/StateValidator.d.ts +24 -0
  176. package/dist/state/StateValidator.d.ts.map +1 -0
  177. package/dist/state/StateValidator.js +147 -0
  178. package/dist/state/StateValidator.js.map +1 -0
  179. package/dist/state/index.d.ts +7 -0
  180. package/dist/state/index.d.ts.map +1 -0
  181. package/dist/state/index.js +13 -0
  182. package/dist/state/index.js.map +1 -0
  183. package/dist/types/analysis.d.ts +76 -0
  184. package/dist/types/analysis.d.ts.map +1 -0
  185. package/dist/types/analysis.js +6 -0
  186. package/dist/types/analysis.js.map +1 -0
  187. package/dist/types/config.d.ts +143 -0
  188. package/dist/types/config.d.ts.map +1 -0
  189. package/dist/types/config.js +7 -0
  190. package/dist/types/config.js.map +1 -0
  191. package/dist/types/discovery.d.ts +277 -0
  192. package/dist/types/discovery.d.ts.map +1 -0
  193. package/dist/types/discovery.js +7 -0
  194. package/dist/types/discovery.js.map +1 -0
  195. package/dist/types/driver.d.ts +148 -0
  196. package/dist/types/driver.d.ts.map +1 -0
  197. package/dist/types/driver.js +7 -0
  198. package/dist/types/driver.js.map +1 -0
  199. package/dist/types/index.d.ts +8 -0
  200. package/dist/types/index.d.ts.map +1 -0
  201. package/dist/types/index.js +24 -0
  202. package/dist/types/index.js.map +1 -0
  203. package/dist/types/prompts.d.ts +158 -0
  204. package/dist/types/prompts.d.ts.map +1 -0
  205. package/dist/types/prompts.js +6 -0
  206. package/dist/types/prompts.js.map +1 -0
  207. package/dist/types/sample-queries.d.ts +172 -0
  208. package/dist/types/sample-queries.d.ts.map +1 -0
  209. package/dist/types/sample-queries.js +7 -0
  210. package/dist/types/sample-queries.js.map +1 -0
  211. package/dist/types/state.d.ts +291 -0
  212. package/dist/types/state.d.ts.map +1 -0
  213. package/dist/types/state.js +7 -0
  214. package/dist/types/state.js.map +1 -0
  215. package/dist/utils/config-loader.d.ts +29 -0
  216. package/dist/utils/config-loader.d.ts.map +1 -0
  217. package/dist/utils/config-loader.js +163 -0
  218. package/dist/utils/config-loader.js.map +1 -0
  219. package/dist/utils/index.d.ts +5 -0
  220. package/dist/utils/index.d.ts.map +1 -0
  221. package/dist/utils/index.js +9 -0
  222. package/dist/utils/index.js.map +1 -0
  223. package/package.json +28 -3
  224. package/dist/ai/simple-ai-client.d.ts +0 -70
  225. package/dist/ai/simple-ai-client.d.ts.map +0 -1
  226. package/dist/ai/simple-ai-client.js +0 -181
  227. package/dist/ai/simple-ai-client.js.map +0 -1
  228. package/dist/analyzers/analyzer.d.ts +0 -23
  229. package/dist/analyzers/analyzer.d.ts.map +0 -1
  230. package/dist/analyzers/analyzer.js +0 -127
  231. package/dist/analyzers/analyzer.js.map +0 -1
  232. package/dist/cli-old/cli.d.ts +0 -3
  233. package/dist/cli-old/cli.d.ts.map +0 -1
  234. package/dist/cli-old/cli.js +0 -388
  235. package/dist/cli-old/cli.js.map +0 -1
  236. package/dist/commands/review.d.ts +0 -11
  237. package/dist/commands/review.d.ts.map +0 -1
  238. package/dist/commands/review.js +0 -82
  239. package/dist/commands/review.js.map +0 -1
  240. package/dist/database/connection.d.ts +0 -40
  241. package/dist/database/connection.d.ts.map +0 -1
  242. package/dist/database/connection.js +0 -136
  243. package/dist/database/connection.js.map +0 -1
  244. package/dist/database/introspection.d.ts +0 -59
  245. package/dist/database/introspection.d.ts.map +0 -1
  246. package/dist/database/introspection.js +0 -124
  247. package/dist/database/introspection.js.map +0 -1
  248. package/dist/generators/markdown-generator.d.ts +0 -8
  249. package/dist/generators/markdown-generator.d.ts.map +0 -1
  250. package/dist/generators/markdown-generator.js +0 -106
  251. package/dist/generators/markdown-generator.js.map +0 -1
  252. package/dist/generators/sql-generator.d.ts +0 -20
  253. package/dist/generators/sql-generator.d.ts.map +0 -1
  254. package/dist/generators/sql-generator.js +0 -83
  255. package/dist/generators/sql-generator.js.map +0 -1
  256. package/dist/state/state-manager.d.ts +0 -95
  257. package/dist/state/state-manager.d.ts.map +0 -1
  258. package/dist/state/state-manager.js +0 -236
  259. package/dist/state/state-manager.js.map +0 -1
  260. package/dist/types/state-file.d.ts +0 -124
  261. package/dist/types/state-file.d.ts.map +0 -1
  262. package/dist/types/state-file.js +0 -79
  263. package/dist/types/state-file.js.map +0 -1
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;IAiCjB;;;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;IAgGpC;;;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;CAmE5C"}
@@ -0,0 +1,305 @@
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
+ // Map provider name to driver class name
72
+ const providerToDriverClass = {
73
+ 'openai': 'OpenAILLM',
74
+ 'anthropic': 'AnthropicLLM',
75
+ 'groq': 'GroqLLM',
76
+ 'mistral': 'MistralLLM',
77
+ 'gemini': 'GeminiLLM',
78
+ 'azure': 'AzureLLM',
79
+ 'lmstudio': 'LMStudioLLM'
80
+ };
81
+ const driverClass = providerToDriverClass[provider.toLowerCase()];
82
+ if (!driverClass) {
83
+ throw new Error(`Unknown provider: ${provider}. Supported providers: ${Object.keys(providerToDriverClass).join(', ')}`);
84
+ }
85
+ // Use MJ ClassFactory to create BaseLLM instance
86
+ const llm = global_1.MJGlobal.Instance.ClassFactory.CreateInstance(ai_1.BaseLLM, driverClass, apiKey);
87
+ if (!llm) {
88
+ throw new Error(`Failed to create LLM instance for provider: ${provider} (driver class: ${driverClass}). Check that the provider is installed.`);
89
+ }
90
+ return llm;
91
+ }
92
+ /**
93
+ * Add custom Nunjucks filters
94
+ * Pattern from Templates package
95
+ */
96
+ addCustomFilters() {
97
+ // JSON formatting with indentation
98
+ this.nunjucksEnv.addFilter('json', (obj, indent = 2) => {
99
+ try {
100
+ return JSON.stringify(obj, null, indent);
101
+ }
102
+ catch (error) {
103
+ return `[Error serializing to JSON: ${error.message}]`;
104
+ }
105
+ });
106
+ // Compact JSON
107
+ this.nunjucksEnv.addFilter('jsoninline', (obj) => {
108
+ try {
109
+ return JSON.stringify(obj);
110
+ }
111
+ catch (error) {
112
+ return `[Error serializing to JSON: ${error.message}]`;
113
+ }
114
+ });
115
+ // Parse JSON strings
116
+ this.nunjucksEnv.addFilter('jsonparse', (str) => {
117
+ try {
118
+ return JSON.parse(str);
119
+ }
120
+ catch (error) {
121
+ return str;
122
+ }
123
+ });
124
+ // Array join filter
125
+ this.nunjucksEnv.addFilter('join', (arr, separator = ', ') => {
126
+ return Array.isArray(arr) ? arr.join(separator) : arr;
127
+ });
128
+ }
129
+ /**
130
+ * Render a Nunjucks template with context
131
+ * Pattern from Templates.renderTemplateAsync()
132
+ */
133
+ async renderTemplate(promptName, context) {
134
+ return new Promise((resolve, reject) => {
135
+ this.nunjucksEnv.render(promptName, context, (err, result) => {
136
+ if (err) {
137
+ console.error(`[PromptEngine] FATAL: Template rendering failed for ${promptName}`);
138
+ console.error(`[PromptEngine] Error:`, err.message);
139
+ console.error(`[PromptEngine] Context keys:`, Object.keys(context));
140
+ console.error(`[PromptEngine] Terminating process due to template rendering failure`);
141
+ process.exit(1);
142
+ }
143
+ resolve(result || '');
144
+ });
145
+ });
146
+ }
147
+ /**
148
+ * Execute a prompt with AI/Core
149
+ * Main entry point for DBAutoDoc analysis
150
+ */
151
+ async executePrompt(promptName, context, options) {
152
+ try {
153
+ // Check guardrails before executing
154
+ if (this.guardrailCheck) {
155
+ const check = this.guardrailCheck();
156
+ if (!check.canContinue) {
157
+ return {
158
+ success: false,
159
+ errorMessage: `Guardrail limit exceeded: ${check.reason}`,
160
+ tokensUsed: 0,
161
+ guardrailExceeded: true
162
+ };
163
+ }
164
+ }
165
+ // 1. Render Nunjucks template with context
166
+ const renderedPrompt = await this.renderTemplate(promptName, context);
167
+ // 2. Build ChatParams for AI/Core
168
+ const messages = [];
169
+ // Add system prompt if provided
170
+ if (options?.systemPrompt) {
171
+ messages.push({
172
+ role: 'system',
173
+ content: options.systemPrompt
174
+ });
175
+ }
176
+ // Add rendered user prompt
177
+ messages.push({
178
+ role: 'user',
179
+ content: renderedPrompt
180
+ });
181
+ const params = {
182
+ model: this.config.model,
183
+ messages,
184
+ maxOutputTokens: options?.maxTokens ?? this.config.maxTokens,
185
+ responseFormat: options?.responseFormat ?? 'JSON',
186
+ ...(options?.temperature != null && { temperature: options.temperature }),
187
+ ...(this.config.temperature != null && options?.temperature == null && { temperature: this.config.temperature }),
188
+ ...(this.config.effortLevel != null && { effortLevel: this.config.effortLevel.toString() }) // Optional 1-100, BaseLLM drivers handle if supported
189
+ };
190
+ // 3. Execute with AI/Core (follows RunView pattern - doesn't throw)
191
+ const chatResult = await this.llm.ChatCompletion(params);
192
+ // 4. Check success (IMPORTANT: like RunView, check .success property)
193
+ if (!chatResult.success) {
194
+ return {
195
+ success: false,
196
+ errorMessage: chatResult.errorMessage || 'Unknown error',
197
+ tokensUsed: 0
198
+ };
199
+ }
200
+ // 5. Extract result and parse JSON if needed
201
+ const content = chatResult.data.choices[0].message.content;
202
+ const usage = chatResult.data.usage;
203
+ let parsedResult;
204
+ if (options?.responseFormat === 'JSON') {
205
+ try {
206
+ parsedResult = JSON.parse(content);
207
+ }
208
+ catch (parseError) {
209
+ return {
210
+ success: false,
211
+ errorMessage: `Failed to parse JSON response: ${parseError.message}\n\nRaw content:\n${content}`,
212
+ tokensUsed: usage?.totalTokens || 0,
213
+ promptInput: renderedPrompt,
214
+ promptOutput: content
215
+ };
216
+ }
217
+ }
218
+ else {
219
+ parsedResult = content;
220
+ }
221
+ return {
222
+ success: true,
223
+ result: parsedResult,
224
+ tokensUsed: usage?.totalTokens || 0,
225
+ cost: usage?.cost,
226
+ promptInput: renderedPrompt,
227
+ promptOutput: content
228
+ };
229
+ }
230
+ catch (error) {
231
+ return {
232
+ success: false,
233
+ errorMessage: `Prompt execution failed: ${error.message}`,
234
+ tokensUsed: 0
235
+ };
236
+ }
237
+ }
238
+ /**
239
+ * Execute multiple prompts in parallel
240
+ * Uses AI/Core's ChatCompletions for efficiency
241
+ */
242
+ async executePromptsParallel(requests) {
243
+ try {
244
+ // Render all templates first
245
+ const renderedPrompts = await Promise.all(requests.map(req => this.renderTemplate(req.promptName, req.context)));
246
+ // Build ChatParams array
247
+ const paramsArray = renderedPrompts.map((prompt, i) => {
248
+ const params = {
249
+ model: this.config.model,
250
+ messages: [{ role: 'user', content: prompt }],
251
+ maxOutputTokens: requests[i].options?.maxTokens ?? this.config.maxTokens,
252
+ responseFormat: requests[i].options?.responseFormat ?? 'JSON'
253
+ };
254
+ // Only add temperature if explicitly provided (don't default to 0.1)
255
+ if (requests[i].options?.temperature != null) {
256
+ params.temperature = requests[i].options.temperature;
257
+ }
258
+ else if (this.config.temperature != null) {
259
+ params.temperature = this.config.temperature;
260
+ }
261
+ return params;
262
+ });
263
+ // Execute in parallel using AI/Core
264
+ const results = await this.llm.ChatCompletions(paramsArray);
265
+ // Parse and return
266
+ return results.map((chatResult, i) => {
267
+ if (!chatResult.success) {
268
+ return {
269
+ success: false,
270
+ errorMessage: chatResult.errorMessage,
271
+ tokensUsed: 0
272
+ };
273
+ }
274
+ const content = chatResult.data.choices[0].message.content;
275
+ const usage = chatResult.data.usage;
276
+ try {
277
+ const parsed = JSON.parse(content);
278
+ return {
279
+ success: true,
280
+ result: parsed,
281
+ tokensUsed: usage?.totalTokens || 0,
282
+ cost: usage?.cost
283
+ };
284
+ }
285
+ catch (error) {
286
+ return {
287
+ success: false,
288
+ errorMessage: `JSON parse error: ${error.message}`,
289
+ tokensUsed: usage?.totalTokens || 0
290
+ };
291
+ }
292
+ });
293
+ }
294
+ catch (error) {
295
+ // If rendering or execution fails completely, return array of errors
296
+ return requests.map(() => ({
297
+ success: false,
298
+ errorMessage: `Parallel execution failed: ${error.message}`,
299
+ tokensUsed: 0
300
+ }));
301
+ }
302
+ }
303
+ }
304
+ exports.PromptEngine = PromptEngine;
305
+ //# sourceMappingURL=PromptEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptEngine.js","sourceRoot":"","sources":["../../src/prompts/PromptEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Custom Nunjucks loader for file-based prompts
3
+ * Pattern adapted from Templates package's TemplateEntityLoader
4
+ */
5
+ import * as nunjucks from 'nunjucks';
6
+ export declare class PromptFileLoader extends nunjucks.Loader {
7
+ private promptsDir;
8
+ async: true;
9
+ private prompts;
10
+ constructor(promptsDir: string);
11
+ /**
12
+ * Load all prompt files from directory
13
+ */
14
+ loadAll(): Promise<void>;
15
+ /**
16
+ * Required by Nunjucks Loader - provides template source
17
+ * Pattern from Templates package
18
+ */
19
+ getSource(name: string, callback: any): void;
20
+ }
21
+ //# sourceMappingURL=PromptFileLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptFileLoader.d.ts","sourceRoot":"","sources":["../../src/prompts/PromptFileLoader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAIrC,qBAAa,gBAAiB,SAAQ,QAAQ,CAAC,MAAM;IAKvC,OAAO,CAAC,UAAU;IAJvB,KAAK,EAAE,IAAI,CAAQ;IAE1B,OAAO,CAAC,OAAO,CAAkC;gBAE7B,UAAU,EAAE,MAAM;IAItC;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAarC;;;OAGG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI;CAYpD"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ /**
3
+ * Custom Nunjucks loader for file-based prompts
4
+ * Pattern adapted from Templates package's TemplateEntityLoader
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || function (mod) {
23
+ if (mod && mod.__esModule) return mod;
24
+ var result = {};
25
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
+ __setModuleDefault(result, mod);
27
+ return result;
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.PromptFileLoader = void 0;
31
+ const nunjucks = __importStar(require("nunjucks"));
32
+ const fs = __importStar(require("fs/promises"));
33
+ const path = __importStar(require("path"));
34
+ class PromptFileLoader extends nunjucks.Loader {
35
+ constructor(promptsDir) {
36
+ super();
37
+ this.promptsDir = promptsDir;
38
+ this.async = true;
39
+ this.prompts = new Map();
40
+ }
41
+ /**
42
+ * Load all prompt files from directory
43
+ */
44
+ async loadAll() {
45
+ const files = await fs.readdir(this.promptsDir);
46
+ for (const file of files) {
47
+ if (file.endsWith('.md') || file.endsWith('.txt')) {
48
+ const promptName = path.basename(file, path.extname(file));
49
+ const filePath = path.join(this.promptsDir, file);
50
+ const content = await fs.readFile(filePath, 'utf-8');
51
+ this.prompts.set(promptName, content);
52
+ }
53
+ }
54
+ }
55
+ /**
56
+ * Required by Nunjucks Loader - provides template source
57
+ * Pattern from Templates package
58
+ */
59
+ getSource(name, callback) {
60
+ const content = this.prompts.get(name);
61
+ if (content) {
62
+ callback(null, {
63
+ src: content,
64
+ path: name,
65
+ noCache: true
66
+ });
67
+ }
68
+ else {
69
+ callback(new Error(`Prompt not found: ${name}`));
70
+ }
71
+ }
72
+ }
73
+ exports.PromptFileLoader = PromptFileLoader;
74
+ //# sourceMappingURL=PromptFileLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptFileLoader.js","sourceRoot":"","sources":["../../src/prompts/PromptFileLoader.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,mDAAqC;AACrC,gDAAkC;AAClC,2CAA6B;AAE7B,MAAa,gBAAiB,SAAQ,QAAQ,CAAC,MAAM;IAKnD,YAAoB,UAAkB;QACpC,KAAK,EAAE,CAAC;QADU,eAAU,GAAV,UAAU,CAAQ;QAJ/B,UAAK,GAAS,IAAI,CAAC;QAElB,YAAO,GAAwB,IAAI,GAAG,EAAE,CAAC;IAIjD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAO;QAClB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEhD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBAClD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACrD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,SAAS,CAAC,IAAY,EAAE,QAAa;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,EAAE;gBACb,GAAG,EAAE,OAAO;gBACZ,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;CACF;AAzCD,4CAyCC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Exports for prompts module
3
+ */
4
+ export { PromptFileLoader } from './PromptFileLoader.js';
5
+ export { PromptEngine } from './PromptEngine.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ /**
3
+ * Exports for prompts module
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PromptEngine = exports.PromptFileLoader = void 0;
7
+ var PromptFileLoader_js_1 = require("./PromptFileLoader.js");
8
+ Object.defineProperty(exports, "PromptFileLoader", { enumerable: true, get: function () { return PromptFileLoader_js_1.PromptFileLoader; } });
9
+ var PromptEngine_js_1 = require("./PromptEngine.js");
10
+ Object.defineProperty(exports, "PromptEngine", { enumerable: true, get: function () { return PromptEngine_js_1.PromptEngine; } });
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,6DAAyD;AAAhD,uHAAA,gBAAgB,OAAA;AACzB,qDAAiD;AAAxC,+GAAA,YAAY,OAAA"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Tracks iteration metadata and changes
3
+ */
4
+ import { DatabaseDocumentation, AnalysisRun, ProcessingLogEntry } from '../types/state.js';
5
+ export declare class IterationTracker {
6
+ /**
7
+ * Get the current (latest) analysis run
8
+ */
9
+ getCurrentRun(state: DatabaseDocumentation): AnalysisRun | null;
10
+ /**
11
+ * Add processing log entry
12
+ */
13
+ addLogEntry(run: AnalysisRun, entry: Omit<ProcessingLogEntry, 'timestamp'>): void;
14
+ /**
15
+ * Add processing log entry with prompt I/O details
16
+ */
17
+ addLogEntryWithPrompt(run: AnalysisRun, entry: Omit<ProcessingLogEntry, 'timestamp'>, promptInput?: string, promptOutput?: string): void;
18
+ /**
19
+ * Mark run as complete
20
+ */
21
+ completeRun(run: AnalysisRun, converged: boolean, convergenceReason?: string): void;
22
+ /**
23
+ * Mark run as failed
24
+ */
25
+ failRun(run: AnalysisRun, error: string): void;
26
+ /**
27
+ * Get recent changes from processing log
28
+ */
29
+ getRecentChanges(run: AnalysisRun, count?: number): ProcessingLogEntry[];
30
+ /**
31
+ * Check if any changes occurred in last N iterations
32
+ */
33
+ hasRecentChanges(state: DatabaseDocumentation, windowSize: number): boolean;
34
+ /**
35
+ * Get iteration statistics
36
+ */
37
+ getIterationStats(run: AnalysisRun): {
38
+ totalProcessed: number;
39
+ changed: number;
40
+ unchanged: number;
41
+ errors: number;
42
+ };
43
+ /**
44
+ * Add tokens to run total
45
+ */
46
+ addTokenUsage(run: AnalysisRun, tokensUsed: number, cost?: number): void;
47
+ /**
48
+ * Increment iteration count
49
+ */
50
+ incrementIteration(state: DatabaseDocumentation, run: AnalysisRun): void;
51
+ /**
52
+ * Increment backpropagation count
53
+ */
54
+ incrementBackpropagation(run: AnalysisRun): void;
55
+ /**
56
+ * Add warning to run
57
+ */
58
+ addWarning(run: AnalysisRun, warning: string): void;
59
+ /**
60
+ * Add error to run
61
+ */
62
+ addError(run: AnalysisRun, error: string): void;
63
+ }
64
+ //# sourceMappingURL=IterationTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IterationTracker.d.ts","sourceRoot":"","sources":["../../src/state/IterationTracker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE3F,qBAAa,gBAAgB;IAC3B;;OAEG;IACI,aAAa,CAAC,KAAK,EAAE,qBAAqB,GAAG,WAAW,GAAG,IAAI;IAOtE;;OAEG;IACI,WAAW,CAChB,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAC3C,IAAI;IASP;;OAEG;IACI,qBAAqB,CAC1B,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,EAC5C,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI;IAWP;;OAEG;IACI,WAAW,CAChB,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,OAAO,EAClB,iBAAiB,CAAC,EAAE,MAAM,GACzB,IAAI;IAOP;;OAEG;IACI,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMrD;;OAEG;IACI,gBAAgB,CACrB,GAAG,EAAE,WAAW,EAChB,KAAK,GAAE,MAAW,GACjB,kBAAkB,EAAE;IAQvB;;OAEG;IACI,gBAAgB,CACrB,KAAK,EAAE,qBAAqB,EAC5B,UAAU,EAAE,MAAM,GACjB,OAAO;IAYV;;OAEG;IACI,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG;QAC1C,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB;IAyBD;;OAEG;IACI,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAO/E;;OAEG;IACI,kBAAkB,CAAC,KAAK,EAAE,qBAAqB,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI;IAK/E;;OAEG;IACI,wBAAwB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;IAIvD;;OAEG;IACI,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAI1D;;OAEG;IACI,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAGvD"}