@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.
- package/README.md +652 -165
- package/bin/run.js +7 -0
- package/dist/api/DBAutoDocAPI.d.ts +252 -0
- package/dist/api/DBAutoDocAPI.d.ts.map +1 -0
- package/dist/api/DBAutoDocAPI.js +530 -0
- package/dist/api/DBAutoDocAPI.js.map +1 -0
- package/dist/api/index.d.ts +7 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +10 -0
- package/dist/api/index.js.map +1 -0
- package/dist/commands/analyze.d.ts +6 -4
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +58 -71
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/export.d.ts +14 -4
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +156 -61
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/init.d.ts +3 -4
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +155 -146
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/reset.d.ts +4 -1
- package/dist/commands/reset.d.ts.map +1 -1
- package/dist/commands/reset.js +33 -19
- package/dist/commands/reset.js.map +1 -1
- package/dist/commands/status.d.ts +10 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +66 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/core/AnalysisEngine.d.ts +108 -0
- package/dist/core/AnalysisEngine.d.ts.map +1 -0
- package/dist/core/AnalysisEngine.js +716 -0
- package/dist/core/AnalysisEngine.js.map +1 -0
- package/dist/core/AnalysisOrchestrator.d.ts +37 -0
- package/dist/core/AnalysisOrchestrator.d.ts.map +1 -0
- package/dist/core/AnalysisOrchestrator.js +294 -0
- package/dist/core/AnalysisOrchestrator.js.map +1 -0
- package/dist/core/BackpropagationEngine.d.ts +32 -0
- package/dist/core/BackpropagationEngine.d.ts.map +1 -0
- package/dist/core/BackpropagationEngine.js +121 -0
- package/dist/core/BackpropagationEngine.js.map +1 -0
- package/dist/core/ConvergenceDetector.d.ts +27 -0
- package/dist/core/ConvergenceDetector.d.ts.map +1 -0
- package/dist/core/ConvergenceDetector.js +92 -0
- package/dist/core/ConvergenceDetector.js.map +1 -0
- package/dist/core/GuardrailsManager.d.ts +78 -0
- package/dist/core/GuardrailsManager.d.ts.map +1 -0
- package/dist/core/GuardrailsManager.js +367 -0
- package/dist/core/GuardrailsManager.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +13 -0
- package/dist/core/index.js.map +1 -0
- package/dist/database/Database.d.ts +56 -0
- package/dist/database/Database.d.ts.map +1 -0
- package/dist/database/Database.js +172 -0
- package/dist/database/Database.js.map +1 -0
- package/dist/database/TopologicalSorter.d.ts +25 -0
- package/dist/database/TopologicalSorter.d.ts.map +1 -0
- package/dist/database/TopologicalSorter.js +150 -0
- package/dist/database/TopologicalSorter.js.map +1 -0
- package/dist/database/index.d.ts +6 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +14 -0
- package/dist/database/index.js.map +1 -0
- package/dist/discovery/ColumnStatsCache.d.ts +91 -0
- package/dist/discovery/ColumnStatsCache.d.ts.map +1 -0
- package/dist/discovery/ColumnStatsCache.js +231 -0
- package/dist/discovery/ColumnStatsCache.js.map +1 -0
- package/dist/discovery/DiscoveryEngine.d.ts +100 -0
- package/dist/discovery/DiscoveryEngine.d.ts.map +1 -0
- package/dist/discovery/DiscoveryEngine.js +726 -0
- package/dist/discovery/DiscoveryEngine.js.map +1 -0
- package/dist/discovery/DiscoveryTriggerAnalyzer.d.ts +57 -0
- package/dist/discovery/DiscoveryTriggerAnalyzer.d.ts.map +1 -0
- package/dist/discovery/DiscoveryTriggerAnalyzer.js +186 -0
- package/dist/discovery/DiscoveryTriggerAnalyzer.js.map +1 -0
- package/dist/discovery/FKDetector.d.ts +47 -0
- package/dist/discovery/FKDetector.d.ts.map +1 -0
- package/dist/discovery/FKDetector.js +317 -0
- package/dist/discovery/FKDetector.js.map +1 -0
- package/dist/discovery/LLMDiscoveryValidator.d.ts +64 -0
- package/dist/discovery/LLMDiscoveryValidator.d.ts.map +1 -0
- package/dist/discovery/LLMDiscoveryValidator.js +431 -0
- package/dist/discovery/LLMDiscoveryValidator.js.map +1 -0
- package/dist/discovery/LLMSanityChecker.d.ts +38 -0
- package/dist/discovery/LLMSanityChecker.d.ts.map +1 -0
- package/dist/discovery/LLMSanityChecker.js +156 -0
- package/dist/discovery/LLMSanityChecker.js.map +1 -0
- package/dist/discovery/PKDetector.d.ts +62 -0
- package/dist/discovery/PKDetector.d.ts.map +1 -0
- package/dist/discovery/PKDetector.js +436 -0
- package/dist/discovery/PKDetector.js.map +1 -0
- package/dist/discovery/index.d.ts +9 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +25 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/drivers/BaseAutoDocDriver.d.ts +132 -0
- package/dist/drivers/BaseAutoDocDriver.d.ts.map +1 -0
- package/dist/drivers/BaseAutoDocDriver.js +121 -0
- package/dist/drivers/BaseAutoDocDriver.js.map +1 -0
- package/dist/drivers/MySQLDriver.d.ts +61 -0
- package/dist/drivers/MySQLDriver.d.ts.map +1 -0
- package/dist/drivers/MySQLDriver.js +668 -0
- package/dist/drivers/MySQLDriver.js.map +1 -0
- package/dist/drivers/PostgreSQLDriver.d.ts +65 -0
- package/dist/drivers/PostgreSQLDriver.d.ts.map +1 -0
- package/dist/drivers/PostgreSQLDriver.js +704 -0
- package/dist/drivers/PostgreSQLDriver.js.map +1 -0
- package/dist/drivers/SQLServerDriver.d.ts +61 -0
- package/dist/drivers/SQLServerDriver.d.ts.map +1 -0
- package/dist/drivers/SQLServerDriver.js +667 -0
- package/dist/drivers/SQLServerDriver.js.map +1 -0
- package/dist/generators/CSVGenerator.d.ts +35 -0
- package/dist/generators/CSVGenerator.d.ts.map +1 -0
- package/dist/generators/CSVGenerator.js +154 -0
- package/dist/generators/CSVGenerator.js.map +1 -0
- package/dist/generators/HTMLGenerator.d.ts +29 -0
- package/dist/generators/HTMLGenerator.d.ts.map +1 -0
- package/dist/generators/HTMLGenerator.js +710 -0
- package/dist/generators/HTMLGenerator.js.map +1 -0
- package/dist/generators/MarkdownGenerator.d.ts +27 -0
- package/dist/generators/MarkdownGenerator.d.ts.map +1 -0
- package/dist/generators/MarkdownGenerator.js +361 -0
- package/dist/generators/MarkdownGenerator.js.map +1 -0
- package/dist/generators/MermaidGenerator.d.ts +35 -0
- package/dist/generators/MermaidGenerator.d.ts.map +1 -0
- package/dist/generators/MermaidGenerator.js +321 -0
- package/dist/generators/MermaidGenerator.js.map +1 -0
- package/dist/generators/ReportGenerator.d.ts +22 -0
- package/dist/generators/ReportGenerator.d.ts.map +1 -0
- package/dist/generators/ReportGenerator.js +176 -0
- package/dist/generators/ReportGenerator.js.map +1 -0
- package/dist/generators/SQLGenerator.d.ts +31 -0
- package/dist/generators/SQLGenerator.d.ts.map +1 -0
- package/dist/generators/SQLGenerator.js +168 -0
- package/dist/generators/SQLGenerator.js.map +1 -0
- package/dist/generators/index.d.ts +10 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +19 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/index.d.ts +11 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -20
- package/dist/index.js.map +1 -1
- package/dist/prompts/PromptEngine.d.ts +65 -0
- package/dist/prompts/PromptEngine.d.ts.map +1 -0
- package/dist/prompts/PromptEngine.js +282 -0
- package/dist/prompts/PromptEngine.js.map +1 -0
- package/dist/prompts/PromptFileLoader.d.ts +21 -0
- package/dist/prompts/PromptFileLoader.d.ts.map +1 -0
- package/dist/prompts/PromptFileLoader.js +74 -0
- package/dist/prompts/PromptFileLoader.js.map +1 -0
- package/dist/prompts/index.d.ts +6 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +11 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/state/IterationTracker.d.ts +64 -0
- package/dist/state/IterationTracker.d.ts.map +1 -0
- package/dist/state/IterationTracker.js +136 -0
- package/dist/state/IterationTracker.js.map +1 -0
- package/dist/state/StateManager.d.ts +79 -0
- package/dist/state/StateManager.d.ts.map +1 -0
- package/dist/state/StateManager.js +348 -0
- package/dist/state/StateManager.js.map +1 -0
- package/dist/state/StateValidator.d.ts +24 -0
- package/dist/state/StateValidator.d.ts.map +1 -0
- package/dist/state/StateValidator.js +147 -0
- package/dist/state/StateValidator.js.map +1 -0
- package/dist/state/index.d.ts +7 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +13 -0
- package/dist/state/index.js.map +1 -0
- package/dist/types/analysis.d.ts +76 -0
- package/dist/types/analysis.d.ts.map +1 -0
- package/dist/types/analysis.js +6 -0
- package/dist/types/analysis.js.map +1 -0
- package/dist/types/config.d.ts +132 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +7 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/discovery.d.ts +277 -0
- package/dist/types/discovery.d.ts.map +1 -0
- package/dist/types/discovery.js +7 -0
- package/dist/types/discovery.js.map +1 -0
- package/dist/types/driver.d.ts +148 -0
- package/dist/types/driver.d.ts.map +1 -0
- package/dist/types/driver.js +7 -0
- package/dist/types/driver.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +24 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/prompts.d.ts +158 -0
- package/dist/types/prompts.d.ts.map +1 -0
- package/dist/types/prompts.js +6 -0
- package/dist/types/prompts.js.map +1 -0
- package/dist/types/state.d.ts +278 -0
- package/dist/types/state.d.ts.map +1 -0
- package/dist/types/state.js +7 -0
- package/dist/types/state.js.map +1 -0
- package/dist/utils/config-loader.d.ts +29 -0
- package/dist/utils/config-loader.d.ts.map +1 -0
- package/dist/utils/config-loader.js +163 -0
- package/dist/utils/config-loader.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +24 -3
- package/dist/ai/simple-ai-client.d.ts +0 -70
- package/dist/ai/simple-ai-client.d.ts.map +0 -1
- package/dist/ai/simple-ai-client.js +0 -181
- package/dist/ai/simple-ai-client.js.map +0 -1
- package/dist/analyzers/analyzer.d.ts +0 -23
- package/dist/analyzers/analyzer.d.ts.map +0 -1
- package/dist/analyzers/analyzer.js +0 -127
- package/dist/analyzers/analyzer.js.map +0 -1
- package/dist/cli-old/cli.d.ts +0 -3
- package/dist/cli-old/cli.d.ts.map +0 -1
- package/dist/cli-old/cli.js +0 -388
- package/dist/cli-old/cli.js.map +0 -1
- package/dist/commands/review.d.ts +0 -11
- package/dist/commands/review.d.ts.map +0 -1
- package/dist/commands/review.js +0 -82
- package/dist/commands/review.js.map +0 -1
- package/dist/database/connection.d.ts +0 -40
- package/dist/database/connection.d.ts.map +0 -1
- package/dist/database/connection.js +0 -136
- package/dist/database/connection.js.map +0 -1
- package/dist/database/introspection.d.ts +0 -59
- package/dist/database/introspection.d.ts.map +0 -1
- package/dist/database/introspection.js +0 -124
- package/dist/database/introspection.js.map +0 -1
- package/dist/generators/markdown-generator.d.ts +0 -8
- package/dist/generators/markdown-generator.d.ts.map +0 -1
- package/dist/generators/markdown-generator.js +0 -106
- package/dist/generators/markdown-generator.js.map +0 -1
- package/dist/generators/sql-generator.d.ts +0 -20
- package/dist/generators/sql-generator.d.ts.map +0 -1
- package/dist/generators/sql-generator.js +0 -83
- package/dist/generators/sql-generator.js.map +0 -1
- package/dist/state/state-manager.d.ts +0 -95
- package/dist/state/state-manager.d.ts.map +0 -1
- package/dist/state/state-manager.js +0 -236
- package/dist/state/state-manager.js.map +0 -1
- package/dist/types/state-file.d.ts +0 -124
- package/dist/types/state-file.d.ts.map +0 -1
- package/dist/types/state-file.js +0 -79
- 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
|
-
*
|
|
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 './
|
|
16
|
-
export * from './
|
|
17
|
-
export * from './database/
|
|
18
|
-
export * from './
|
|
19
|
-
export * from './
|
|
20
|
-
export * from './
|
|
21
|
-
export * from './
|
|
22
|
-
export * from './generators/
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
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
|
-
*
|
|
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
|
-
|
|
32
|
-
__exportStar(require("./
|
|
33
|
-
|
|
34
|
-
__exportStar(require("./
|
|
35
|
-
|
|
36
|
-
__exportStar(require("./
|
|
37
|
-
|
|
38
|
-
__exportStar(require("./
|
|
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
|
|
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
|