hazo_llm_api 1.0.4 → 1.0.5

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 (145) hide show
  1. package/dist/components/index.d.ts +7 -0
  2. package/dist/components/index.d.ts.map +1 -0
  3. package/dist/components/index.js +7 -0
  4. package/dist/components/index.js.map +1 -0
  5. package/dist/components/layout/index.d.ts +7 -0
  6. package/dist/components/layout/index.d.ts.map +1 -0
  7. package/dist/components/layout/index.js +7 -0
  8. package/dist/components/layout/index.js.map +1 -0
  9. package/dist/components/layout/layout.d.ts +21 -0
  10. package/dist/components/layout/layout.d.ts.map +1 -0
  11. package/dist/components/layout/layout.js +18 -0
  12. package/dist/components/layout/layout.js.map +1 -0
  13. package/dist/index.d.ts +15 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +21 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/lib/config/config_parser.d.ts +131 -0
  18. package/dist/lib/config/config_parser.d.ts.map +1 -0
  19. package/dist/lib/config/config_parser.js +297 -0
  20. package/dist/lib/config/config_parser.js.map +1 -0
  21. package/dist/lib/config/index.d.ts +8 -0
  22. package/dist/lib/config/index.d.ts.map +1 -0
  23. package/dist/lib/config/index.js +22 -0
  24. package/dist/lib/config/index.js.map +1 -0
  25. package/dist/lib/config/provider_loader.d.ts +113 -0
  26. package/dist/lib/config/provider_loader.d.ts.map +1 -0
  27. package/dist/lib/config/provider_loader.js +169 -0
  28. package/dist/lib/config/provider_loader.js.map +1 -0
  29. package/dist/lib/database/index.d.ts +8 -0
  30. package/dist/lib/database/index.d.ts.map +1 -0
  31. package/dist/lib/database/index.js +10 -0
  32. package/dist/lib/database/index.js.map +1 -0
  33. package/dist/lib/database/init_database.d.ts +118 -0
  34. package/dist/lib/database/init_database.d.ts.map +1 -0
  35. package/dist/lib/database/init_database.js +591 -0
  36. package/dist/lib/database/init_database.js.map +1 -0
  37. package/dist/lib/database/utils.d.ts +53 -0
  38. package/dist/lib/database/utils.d.ts.map +1 -0
  39. package/dist/lib/database/utils.js +87 -0
  40. package/dist/lib/database/utils.js.map +1 -0
  41. package/dist/lib/index.d.ts +14 -0
  42. package/dist/lib/index.d.ts.map +1 -0
  43. package/dist/lib/index.js +17 -0
  44. package/dist/lib/index.js.map +1 -0
  45. package/dist/lib/llm_api/chain_helpers.d.ts +117 -0
  46. package/dist/lib/llm_api/chain_helpers.d.ts.map +1 -0
  47. package/dist/lib/llm_api/chain_helpers.js +445 -0
  48. package/dist/lib/llm_api/chain_helpers.js.map +1 -0
  49. package/dist/lib/llm_api/hazo_llm_image_image.d.ts +26 -0
  50. package/dist/lib/llm_api/hazo_llm_image_image.d.ts.map +1 -0
  51. package/dist/lib/llm_api/hazo_llm_image_image.js +94 -0
  52. package/dist/lib/llm_api/hazo_llm_image_image.js.map +1 -0
  53. package/dist/lib/llm_api/hazo_llm_image_image_text.d.ts +26 -0
  54. package/dist/lib/llm_api/hazo_llm_image_image_text.d.ts.map +1 -0
  55. package/dist/lib/llm_api/hazo_llm_image_image_text.js +222 -0
  56. package/dist/lib/llm_api/hazo_llm_image_image_text.js.map +1 -0
  57. package/dist/lib/llm_api/hazo_llm_image_text.d.ts +20 -0
  58. package/dist/lib/llm_api/hazo_llm_image_text.d.ts.map +1 -0
  59. package/dist/lib/llm_api/hazo_llm_image_text.js +78 -0
  60. package/dist/lib/llm_api/hazo_llm_image_text.js.map +1 -0
  61. package/dist/lib/llm_api/hazo_llm_prompt_chain.d.ts +20 -0
  62. package/dist/lib/llm_api/hazo_llm_prompt_chain.d.ts.map +1 -0
  63. package/dist/lib/llm_api/hazo_llm_prompt_chain.js +368 -0
  64. package/dist/lib/llm_api/hazo_llm_prompt_chain.js.map +1 -0
  65. package/dist/lib/llm_api/hazo_llm_text_image.d.ts +20 -0
  66. package/dist/lib/llm_api/hazo_llm_text_image.d.ts.map +1 -0
  67. package/dist/lib/llm_api/hazo_llm_text_image.js +69 -0
  68. package/dist/lib/llm_api/hazo_llm_text_image.js.map +1 -0
  69. package/dist/lib/llm_api/hazo_llm_text_image_text.d.ts +26 -0
  70. package/dist/lib/llm_api/hazo_llm_text_image_text.d.ts.map +1 -0
  71. package/dist/lib/llm_api/hazo_llm_text_image_text.js +154 -0
  72. package/dist/lib/llm_api/hazo_llm_text_image_text.js.map +1 -0
  73. package/dist/lib/llm_api/hazo_llm_text_text.d.ts +20 -0
  74. package/dist/lib/llm_api/hazo_llm_text_text.d.ts.map +1 -0
  75. package/dist/lib/llm_api/hazo_llm_text_text.js +91 -0
  76. package/dist/lib/llm_api/hazo_llm_text_text.js.map +1 -0
  77. package/dist/lib/llm_api/index.d.ts +223 -0
  78. package/dist/lib/llm_api/index.d.ts.map +1 -0
  79. package/dist/lib/llm_api/index.js +1220 -0
  80. package/dist/lib/llm_api/index.js.map +1 -0
  81. package/dist/lib/llm_api/provider_helper.d.ts +163 -0
  82. package/dist/lib/llm_api/provider_helper.d.ts.map +1 -0
  83. package/dist/lib/llm_api/provider_helper.js +346 -0
  84. package/dist/lib/llm_api/provider_helper.js.map +1 -0
  85. package/dist/lib/llm_api/types.d.ts +667 -0
  86. package/dist/lib/llm_api/types.d.ts.map +1 -0
  87. package/dist/lib/llm_api/types.js +49 -0
  88. package/dist/lib/llm_api/types.js.map +1 -0
  89. package/dist/lib/prompts/get_prompt.d.ts +76 -0
  90. package/dist/lib/prompts/get_prompt.d.ts.map +1 -0
  91. package/dist/lib/prompts/get_prompt.js +342 -0
  92. package/dist/lib/prompts/get_prompt.js.map +1 -0
  93. package/dist/lib/prompts/index.d.ts +9 -0
  94. package/dist/lib/prompts/index.d.ts.map +1 -0
  95. package/dist/lib/prompts/index.js +9 -0
  96. package/dist/lib/prompts/index.js.map +1 -0
  97. package/dist/lib/prompts/prompt_cache.d.ts +151 -0
  98. package/dist/lib/prompts/prompt_cache.d.ts.map +1 -0
  99. package/dist/lib/prompts/prompt_cache.js +276 -0
  100. package/dist/lib/prompts/prompt_cache.js.map +1 -0
  101. package/dist/lib/prompts/substitute_variables.d.ts +38 -0
  102. package/dist/lib/prompts/substitute_variables.d.ts.map +1 -0
  103. package/dist/lib/prompts/substitute_variables.js +171 -0
  104. package/dist/lib/prompts/substitute_variables.js.map +1 -0
  105. package/dist/lib/providers/gemini/gemini_client.d.ts +25 -0
  106. package/dist/lib/providers/gemini/gemini_client.d.ts.map +1 -0
  107. package/dist/lib/providers/gemini/gemini_client.js +235 -0
  108. package/dist/lib/providers/gemini/gemini_client.js.map +1 -0
  109. package/dist/lib/providers/gemini/gemini_provider.d.ts +111 -0
  110. package/dist/lib/providers/gemini/gemini_provider.d.ts.map +1 -0
  111. package/dist/lib/providers/gemini/gemini_provider.js +431 -0
  112. package/dist/lib/providers/gemini/gemini_provider.js.map +1 -0
  113. package/dist/lib/providers/gemini/index.d.ts +8 -0
  114. package/dist/lib/providers/gemini/index.d.ts.map +1 -0
  115. package/dist/lib/providers/gemini/index.js +8 -0
  116. package/dist/lib/providers/gemini/index.js.map +1 -0
  117. package/dist/lib/providers/index.d.ts +8 -0
  118. package/dist/lib/providers/index.d.ts.map +1 -0
  119. package/dist/lib/providers/index.js +8 -0
  120. package/dist/lib/providers/index.js.map +1 -0
  121. package/dist/lib/providers/qwen/index.d.ts +8 -0
  122. package/dist/lib/providers/qwen/index.d.ts.map +1 -0
  123. package/dist/lib/providers/qwen/index.js +8 -0
  124. package/dist/lib/providers/qwen/index.js.map +1 -0
  125. package/dist/lib/providers/qwen/qwen_client.d.ts +154 -0
  126. package/dist/lib/providers/qwen/qwen_client.d.ts.map +1 -0
  127. package/dist/lib/providers/qwen/qwen_client.js +1002 -0
  128. package/dist/lib/providers/qwen/qwen_client.js.map +1 -0
  129. package/dist/lib/providers/qwen/qwen_provider.d.ts +139 -0
  130. package/dist/lib/providers/qwen/qwen_provider.d.ts.map +1 -0
  131. package/dist/lib/providers/qwen/qwen_provider.js +304 -0
  132. package/dist/lib/providers/qwen/qwen_provider.js.map +1 -0
  133. package/dist/lib/providers/registry.d.ts +66 -0
  134. package/dist/lib/providers/registry.d.ts.map +1 -0
  135. package/dist/lib/providers/registry.js +158 -0
  136. package/dist/lib/providers/registry.js.map +1 -0
  137. package/dist/lib/providers/types.d.ts +145 -0
  138. package/dist/lib/providers/types.d.ts.map +1 -0
  139. package/dist/lib/providers/types.js +37 -0
  140. package/dist/lib/providers/types.js.map +1 -0
  141. package/dist/server.d.ts +27 -0
  142. package/dist/server.d.ts.map +1 -0
  143. package/dist/server.js +50 -0
  144. package/dist/server.js.map +1 -0
  145. package/package.json +12 -1
@@ -0,0 +1,591 @@
1
+ /**
2
+ * Database Initialization Module
3
+ *
4
+ * Initializes and manages the SQLite database for prompt storage.
5
+ * Uses sql.js for database operations (pure JavaScript SQLite).
6
+ * Creates the prompts_library table if it doesn't exist.
7
+ */
8
+ import initSqlJs from 'sql.js';
9
+ import fs from 'fs';
10
+ import path from 'path';
11
+ import os from 'os';
12
+ import { randomUUID } from 'crypto';
13
+ import { row_to_prompt_record } from './utils.js';
14
+ // =============================================================================
15
+ // Path Helpers
16
+ // =============================================================================
17
+ /**
18
+ * Default SQLite database filename
19
+ */
20
+ const DEFAULT_SQLITE_FILENAME = 'prompt_library.sqlite';
21
+ /**
22
+ * Get the default SQLite database path
23
+ * Returns an absolute path relative to the current working directory
24
+ *
25
+ * @returns Default database path: "{process.cwd()}/prompt_library.sqlite"
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * import { get_default_sqlite_path } from 'hazo_llm_api/server';
30
+ *
31
+ * const path = get_default_sqlite_path();
32
+ * // Returns: "/path/to/your/app/prompt_library.sqlite"
33
+ * ```
34
+ */
35
+ export function get_default_sqlite_path() {
36
+ return path.join(process.cwd(), DEFAULT_SQLITE_FILENAME);
37
+ }
38
+ /**
39
+ * Expand tilde (~) in path to user's home directory
40
+ * Also supports environment variables in the format ${VAR_NAME}
41
+ *
42
+ * @param file_path - Path that may contain ~ or environment variables
43
+ * @returns Expanded path
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * import { expand_path } from 'hazo_llm_api/server';
48
+ *
49
+ * expand_path('~/data/prompts.db');
50
+ * // Returns: "/Users/username/data/prompts.db"
51
+ *
52
+ * expand_path('${HOME}/data/prompts.db');
53
+ * // Returns: "/Users/username/data/prompts.db"
54
+ * ```
55
+ */
56
+ export function expand_path(file_path) {
57
+ let expanded = file_path;
58
+ // Expand tilde to home directory
59
+ if (expanded.startsWith('~')) {
60
+ expanded = path.join(os.homedir(), expanded.slice(1));
61
+ }
62
+ // Expand environment variables ${VAR_NAME}
63
+ expanded = expanded.replace(/\$\{([^}]+)\}/g, (_, var_name) => {
64
+ return process.env[var_name] || '';
65
+ });
66
+ // Also support $VAR_NAME format (common in Unix)
67
+ expanded = expanded.replace(/\$([A-Za-z_][A-Za-z0-9_]*)/g, (_, var_name) => {
68
+ return process.env[var_name] || '';
69
+ });
70
+ return expanded;
71
+ }
72
+ /**
73
+ * Resolve a database path to an absolute path
74
+ * Handles tilde expansion, environment variables, and relative paths
75
+ *
76
+ * @param sqlite_path - Path to resolve (can be relative, absolute, or contain ~/$VAR)
77
+ * @returns Absolute path to the database file
78
+ *
79
+ * @example
80
+ * ```typescript
81
+ * import { resolve_sqlite_path } from 'hazo_llm_api/server';
82
+ *
83
+ * resolve_sqlite_path('prompt_library.sqlite');
84
+ * // Returns: "/path/to/cwd/prompt_library.sqlite"
85
+ *
86
+ * resolve_sqlite_path('~/data/prompts.db');
87
+ * // Returns: "/Users/username/data/prompts.db"
88
+ *
89
+ * resolve_sqlite_path('/absolute/path/prompts.db');
90
+ * // Returns: "/absolute/path/prompts.db"
91
+ * ```
92
+ */
93
+ export function resolve_sqlite_path(sqlite_path) {
94
+ // First expand any special characters
95
+ const expanded = expand_path(sqlite_path);
96
+ // Then resolve to absolute path if needed
97
+ return path.isAbsolute(expanded)
98
+ ? expanded
99
+ : path.join(process.cwd(), expanded);
100
+ }
101
+ // =============================================================================
102
+ // Database Instance
103
+ // =============================================================================
104
+ let db_instance = null;
105
+ let db_path = null;
106
+ let sql_initialized = false;
107
+ // =============================================================================
108
+ // Database Initialization
109
+ // =============================================================================
110
+ /**
111
+ * Initialize the SQLite database connection and create tables if needed
112
+ * @param sqlite_path - Path to the SQLite database file (relative to app root)
113
+ * @param logger - Logger instance for logging operations
114
+ * @returns Database instance
115
+ */
116
+ export async function initialize_database(sqlite_path, logger) {
117
+ const file_name = 'init_database.ts';
118
+ // Return existing instance if already initialized
119
+ if (db_instance) {
120
+ logger.debug('Database already initialized, returning existing instance', {
121
+ file: file_name,
122
+ line: 36,
123
+ });
124
+ return db_instance;
125
+ }
126
+ try {
127
+ // Initialize sql.js
128
+ if (!sql_initialized) {
129
+ await initSqlJs();
130
+ sql_initialized = true;
131
+ }
132
+ // Resolve database path relative to process.cwd() (consuming app root)
133
+ const resolved_path = path.isAbsolute(sqlite_path)
134
+ ? sqlite_path
135
+ : path.join(process.cwd(), sqlite_path);
136
+ db_path = resolved_path;
137
+ logger.info('Initializing SQLite database', {
138
+ file: file_name,
139
+ line: 56,
140
+ data: { path: resolved_path },
141
+ });
142
+ // Check if database file exists
143
+ let file_buffer = null;
144
+ try {
145
+ if (fs.existsSync(resolved_path)) {
146
+ file_buffer = fs.readFileSync(resolved_path);
147
+ logger.debug('Loading existing database file', {
148
+ file: file_name,
149
+ line: 66,
150
+ data: { path: resolved_path },
151
+ });
152
+ }
153
+ }
154
+ catch {
155
+ // File doesn't exist, will create new database
156
+ logger.debug('Database file does not exist, will create new', {
157
+ file: file_name,
158
+ line: 73,
159
+ data: { path: resolved_path },
160
+ });
161
+ }
162
+ // Create database connection
163
+ const SQL = await initSqlJs();
164
+ db_instance = file_buffer
165
+ ? new SQL.Database(file_buffer)
166
+ : new SQL.Database();
167
+ // Create prompts_library table if it doesn't exist
168
+ create_prompts_table(db_instance, logger);
169
+ // Save database to file
170
+ save_database(logger);
171
+ logger.info('Database initialized successfully', {
172
+ file: file_name,
173
+ line: 92,
174
+ data: { path: resolved_path },
175
+ });
176
+ return db_instance;
177
+ }
178
+ catch (error) {
179
+ const error_message = error instanceof Error ? error.message : String(error);
180
+ logger.error('Failed to initialize database', {
181
+ file: file_name,
182
+ line: 100,
183
+ data: { error: error_message, sqlite_path },
184
+ });
185
+ throw error;
186
+ }
187
+ }
188
+ /**
189
+ * Initialize database synchronously (for use in already async contexts)
190
+ * Note: This should only be called after initialize_database has been called once
191
+ */
192
+ export function initialize_database_sync(sqlite_path, logger) {
193
+ // If already initialized, return the instance
194
+ if (db_instance) {
195
+ return db_instance;
196
+ }
197
+ // Otherwise, we need to initialize asynchronously first
198
+ logger.warn('Database not initialized. Call initialize_database first.', {
199
+ file: 'init_database.ts',
200
+ line: 120,
201
+ });
202
+ return null;
203
+ }
204
+ // =============================================================================
205
+ // Table Creation
206
+ // =============================================================================
207
+ /**
208
+ * Create the prompts_library table if it doesn't exist
209
+ * @param db - Database instance
210
+ * @param logger - Logger instance
211
+ */
212
+ function create_prompts_table(db, logger) {
213
+ const file_name = 'init_database.ts';
214
+ const create_table_sql = `
215
+ CREATE TABLE IF NOT EXISTS prompts_library (
216
+ uuid TEXT PRIMARY KEY,
217
+ prompt_area TEXT NOT NULL,
218
+ prompt_key TEXT NOT NULL,
219
+ local_1 TEXT DEFAULT NULL,
220
+ local_2 TEXT DEFAULT NULL,
221
+ local_3 TEXT DEFAULT NULL,
222
+ prompt_text TEXT NOT NULL,
223
+ prompt_variables TEXT DEFAULT '[]',
224
+ prompt_notes TEXT DEFAULT '',
225
+ created_at TEXT DEFAULT (datetime('now')),
226
+ changed_by TEXT DEFAULT NULL
227
+ )
228
+ `;
229
+ try {
230
+ db.run(create_table_sql);
231
+ // Migrate existing tables: add local_1, local_2, local_3 columns if they don't exist
232
+ migrate_add_local_columns(db, logger);
233
+ // Create index for faster lookups by prompt_area, prompt_key, and local filters
234
+ const create_index_sql = `
235
+ CREATE INDEX IF NOT EXISTS idx_prompts_area_key
236
+ ON prompts_library(prompt_area, prompt_key, local_1, local_2, local_3)
237
+ `;
238
+ db.run(create_index_sql);
239
+ logger.debug('prompts_library table created/verified', {
240
+ file: file_name,
241
+ line: 164,
242
+ });
243
+ }
244
+ catch (error) {
245
+ const error_message = error instanceof Error ? error.message : String(error);
246
+ logger.error('Failed to create prompts_library table', {
247
+ file: file_name,
248
+ line: 170,
249
+ data: { error: error_message },
250
+ });
251
+ throw error;
252
+ }
253
+ }
254
+ /**
255
+ * Migrate existing database: add local_1, local_2, local_3 columns if they don't exist
256
+ * @param db - Database instance
257
+ * @param logger - Logger instance
258
+ */
259
+ function migrate_add_local_columns(db, logger) {
260
+ const file_name = 'init_database.ts';
261
+ try {
262
+ // Check if local_1 column exists
263
+ const table_info = db.exec("PRAGMA table_info(prompts_library)");
264
+ if (table_info.length === 0) {
265
+ return; // Table doesn't exist yet
266
+ }
267
+ const columns = table_info[0].values.map(row => row[1]);
268
+ // Add local_1 if it doesn't exist
269
+ if (!columns.includes('local_1')) {
270
+ db.run('ALTER TABLE prompts_library ADD COLUMN local_1 TEXT DEFAULT NULL');
271
+ logger.info('Migration: Added local_1 column to prompts_library', {
272
+ file: file_name,
273
+ });
274
+ }
275
+ // Add local_2 if it doesn't exist
276
+ if (!columns.includes('local_2')) {
277
+ db.run('ALTER TABLE prompts_library ADD COLUMN local_2 TEXT DEFAULT NULL');
278
+ logger.info('Migration: Added local_2 column to prompts_library', {
279
+ file: file_name,
280
+ });
281
+ }
282
+ // Add local_3 if it doesn't exist
283
+ if (!columns.includes('local_3')) {
284
+ db.run('ALTER TABLE prompts_library ADD COLUMN local_3 TEXT DEFAULT NULL');
285
+ logger.info('Migration: Added local_3 column to prompts_library', {
286
+ file: file_name,
287
+ });
288
+ }
289
+ }
290
+ catch (error) {
291
+ const error_message = error instanceof Error ? error.message : String(error);
292
+ logger.warn('Migration warning (may be harmless)', {
293
+ file: file_name,
294
+ data: { error: error_message },
295
+ });
296
+ }
297
+ }
298
+ // =============================================================================
299
+ // Database Operations
300
+ // =============================================================================
301
+ /**
302
+ * Get the current database instance
303
+ * @returns Database instance or null if not initialized
304
+ */
305
+ export function get_database() {
306
+ return db_instance;
307
+ }
308
+ /**
309
+ * Save the database to file
310
+ * @param logger - Logger instance
311
+ */
312
+ export function save_database(logger) {
313
+ const file_name = 'init_database.ts';
314
+ if (!db_instance || !db_path) {
315
+ logger.warn('Cannot save database: not initialized', {
316
+ file: file_name,
317
+ line: 197,
318
+ });
319
+ return;
320
+ }
321
+ try {
322
+ const data = db_instance.export();
323
+ const buffer = Buffer.from(data);
324
+ // Ensure directory exists
325
+ const dir = path.dirname(db_path);
326
+ if (!fs.existsSync(dir)) {
327
+ fs.mkdirSync(dir, { recursive: true });
328
+ }
329
+ fs.writeFileSync(db_path, buffer);
330
+ logger.debug('Database saved to file', {
331
+ file: file_name,
332
+ line: 214,
333
+ data: { path: db_path },
334
+ });
335
+ }
336
+ catch (error) {
337
+ const error_message = error instanceof Error ? error.message : String(error);
338
+ logger.error('Failed to save database', {
339
+ file: file_name,
340
+ line: 220,
341
+ data: { error: error_message },
342
+ });
343
+ }
344
+ }
345
+ /**
346
+ * Close the database connection
347
+ * @param logger - Logger instance
348
+ */
349
+ export function close_database(logger) {
350
+ const file_name = 'init_database.ts';
351
+ if (db_instance) {
352
+ try {
353
+ // Save before closing
354
+ save_database(logger);
355
+ db_instance.close();
356
+ db_instance = null;
357
+ db_path = null;
358
+ logger.info('Database connection closed', {
359
+ file: file_name,
360
+ line: 243,
361
+ });
362
+ }
363
+ catch (error) {
364
+ const error_message = error instanceof Error ? error.message : String(error);
365
+ logger.error('Failed to close database connection', {
366
+ file: file_name,
367
+ line: 249,
368
+ data: { error: error_message },
369
+ });
370
+ }
371
+ }
372
+ }
373
+ // =============================================================================
374
+ // Prompt CRUD Operations
375
+ // =============================================================================
376
+ /**
377
+ * Insert a new prompt into the database
378
+ * @param db - Database instance
379
+ * @param prompt - Prompt data to insert
380
+ * @param logger - Logger instance
381
+ * @returns The inserted prompt record
382
+ */
383
+ export function insert_prompt(db, prompt, logger) {
384
+ const file_name = 'init_database.ts';
385
+ const uuid = randomUUID();
386
+ const insert_sql = `
387
+ INSERT INTO prompts_library (uuid, prompt_area, prompt_key, local_1, local_2, local_3, prompt_text, prompt_variables, prompt_notes)
388
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
389
+ `;
390
+ try {
391
+ logger.debug('Inserting prompt into database', {
392
+ file: file_name,
393
+ line: 282,
394
+ data: {
395
+ uuid,
396
+ prompt_area: prompt.prompt_area,
397
+ prompt_key: prompt.prompt_key,
398
+ local_1: prompt.local_1,
399
+ local_2: prompt.local_2,
400
+ local_3: prompt.local_3,
401
+ },
402
+ });
403
+ db.run(insert_sql, [
404
+ uuid,
405
+ prompt.prompt_area,
406
+ prompt.prompt_key,
407
+ prompt.local_1 || null,
408
+ prompt.local_2 || null,
409
+ prompt.local_3 || null,
410
+ prompt.prompt_text,
411
+ prompt.prompt_variables,
412
+ prompt.prompt_notes,
413
+ ]);
414
+ // Save changes to file
415
+ save_database(logger);
416
+ // Fetch the inserted record
417
+ const result = db.exec('SELECT * FROM prompts_library WHERE uuid = ?', [uuid]);
418
+ if (result.length === 0 || result[0].values.length === 0) {
419
+ throw new Error('Failed to retrieve inserted prompt');
420
+ }
421
+ const row = result[0].values[0];
422
+ const columns = result[0].columns;
423
+ const record = row_to_prompt_record(row, columns);
424
+ logger.info('Prompt inserted successfully', {
425
+ file: file_name,
426
+ line: 318,
427
+ data: { uuid, prompt_area: prompt.prompt_area, prompt_key: prompt.prompt_key },
428
+ });
429
+ return record;
430
+ }
431
+ catch (error) {
432
+ const error_message = error instanceof Error ? error.message : String(error);
433
+ logger.error('Failed to insert prompt', {
434
+ file: file_name,
435
+ line: 326,
436
+ data: { error: error_message, prompt_area: prompt.prompt_area, prompt_key: prompt.prompt_key },
437
+ });
438
+ throw error;
439
+ }
440
+ }
441
+ /**
442
+ * Update an existing prompt in the database
443
+ * @param db - Database instance
444
+ * @param uuid - UUID of the prompt to update
445
+ * @param updates - Fields to update
446
+ * @param logger - Logger instance
447
+ * @returns The updated prompt record
448
+ */
449
+ export function update_prompt(db, uuid, updates, logger) {
450
+ const file_name = 'init_database.ts';
451
+ // Build dynamic update SQL
452
+ const fields = [];
453
+ const values = [];
454
+ if (updates.prompt_area !== undefined) {
455
+ fields.push('prompt_area = ?');
456
+ values.push(updates.prompt_area);
457
+ }
458
+ if (updates.prompt_key !== undefined) {
459
+ fields.push('prompt_key = ?');
460
+ values.push(updates.prompt_key);
461
+ }
462
+ if (updates.local_1 !== undefined) {
463
+ fields.push('local_1 = ?');
464
+ values.push(updates.local_1 || null);
465
+ }
466
+ if (updates.local_2 !== undefined) {
467
+ fields.push('local_2 = ?');
468
+ values.push(updates.local_2 || null);
469
+ }
470
+ if (updates.local_3 !== undefined) {
471
+ fields.push('local_3 = ?');
472
+ values.push(updates.local_3 || null);
473
+ }
474
+ if (updates.prompt_text !== undefined) {
475
+ fields.push('prompt_text = ?');
476
+ values.push(updates.prompt_text);
477
+ }
478
+ if (updates.prompt_variables !== undefined) {
479
+ fields.push('prompt_variables = ?');
480
+ values.push(updates.prompt_variables);
481
+ }
482
+ if (updates.prompt_notes !== undefined) {
483
+ fields.push('prompt_notes = ?');
484
+ values.push(updates.prompt_notes);
485
+ }
486
+ if (fields.length === 0) {
487
+ logger.warn('No fields to update', {
488
+ file: file_name,
489
+ line: 377,
490
+ data: { uuid },
491
+ });
492
+ return null;
493
+ }
494
+ // Add changed_by timestamp
495
+ fields.push("changed_by = datetime('now')");
496
+ values.push(uuid);
497
+ const update_sql = `
498
+ UPDATE prompts_library
499
+ SET ${fields.join(', ')}
500
+ WHERE uuid = ?
501
+ `;
502
+ try {
503
+ logger.debug('Updating prompt in database', {
504
+ file: file_name,
505
+ line: 395,
506
+ data: { uuid, fields: Object.keys(updates) },
507
+ });
508
+ db.run(update_sql, values);
509
+ // Save changes to file
510
+ save_database(logger);
511
+ // Fetch the updated record
512
+ const result = db.exec('SELECT * FROM prompts_library WHERE uuid = ?', [uuid]);
513
+ if (result.length === 0 || result[0].values.length === 0) {
514
+ logger.warn('Prompt not found after update', {
515
+ file: file_name,
516
+ line: 412,
517
+ data: { uuid },
518
+ });
519
+ return null;
520
+ }
521
+ const row = result[0].values[0];
522
+ const columns = result[0].columns;
523
+ const record = row_to_prompt_record(row, columns);
524
+ logger.info('Prompt updated successfully', {
525
+ file: file_name,
526
+ line: 423,
527
+ data: { uuid },
528
+ });
529
+ return record;
530
+ }
531
+ catch (error) {
532
+ const error_message = error instanceof Error ? error.message : String(error);
533
+ logger.error('Failed to update prompt', {
534
+ file: file_name,
535
+ line: 431,
536
+ data: { error: error_message, uuid },
537
+ });
538
+ throw error;
539
+ }
540
+ }
541
+ /**
542
+ * Delete a prompt from the database
543
+ * @param db - Database instance
544
+ * @param uuid - UUID of the prompt to delete
545
+ * @param logger - Logger instance
546
+ * @returns True if deleted successfully, false if not found
547
+ */
548
+ export function delete_prompt(db, uuid, logger) {
549
+ const file_name = 'init_database.ts';
550
+ const delete_sql = `DELETE FROM prompts_library WHERE uuid = ?`;
551
+ try {
552
+ logger.debug('Deleting prompt from database', {
553
+ file: file_name,
554
+ line: 475,
555
+ data: { uuid },
556
+ });
557
+ // Check if prompt exists first
558
+ const check_result = db.exec('SELECT uuid FROM prompts_library WHERE uuid = ?', [uuid]);
559
+ if (check_result.length === 0 || check_result[0].values.length === 0) {
560
+ logger.warn('Prompt not found for deletion', {
561
+ file: file_name,
562
+ line: 485,
563
+ data: { uuid },
564
+ });
565
+ return false;
566
+ }
567
+ db.run(delete_sql, [uuid]);
568
+ // Save changes to file
569
+ save_database(logger);
570
+ logger.info('Prompt deleted successfully', {
571
+ file: file_name,
572
+ line: 495,
573
+ data: { uuid },
574
+ });
575
+ return true;
576
+ }
577
+ catch (error) {
578
+ const error_message = error instanceof Error ? error.message : String(error);
579
+ logger.error('Failed to delete prompt', {
580
+ file: file_name,
581
+ line: 502,
582
+ data: { error: error_message, uuid },
583
+ });
584
+ throw error;
585
+ }
586
+ }
587
+ // =============================================================================
588
+ // Helper Functions
589
+ // =============================================================================
590
+ // Note: row_to_prompt_record is now imported from ./utils.js for single source of truth
591
+ //# sourceMappingURL=init_database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init_database.js","sourceRoot":"","sources":["../../../src/lib/database/init_database.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Database Utilities
3
+ *
4
+ * Shared utility functions for database operations.
5
+ * Single source of truth for common database helpers.
6
+ */
7
+ import type { PromptRecord } from '../llm_api/types.js';
8
+ /**
9
+ * Convert a database row to a PromptRecord object using column names
10
+ *
11
+ * This is the single source of truth for row-to-record conversion.
12
+ * Used by both database initialization and prompt retrieval functions.
13
+ *
14
+ * @param row - Raw database row as array of values
15
+ * @param columns - Array of column names from the query result
16
+ * @returns PromptRecord object
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const result = db.exec('SELECT * FROM prompts_library WHERE uuid = ?', [uuid]);
21
+ * if (result.length > 0 && result[0].values.length > 0) {
22
+ * const record = row_to_prompt_record(result[0].values[0], result[0].columns);
23
+ * }
24
+ * ```
25
+ */
26
+ export declare function row_to_prompt_record(row: unknown[], columns: string[]): PromptRecord;
27
+ /**
28
+ * Column indices for prompts_library table
29
+ * Use these constants when building queries to ensure consistency
30
+ */
31
+ export declare const PROMPT_COLUMNS: {
32
+ readonly UUID: 0;
33
+ readonly PROMPT_AREA: 1;
34
+ readonly PROMPT_KEY: 2;
35
+ readonly LOCAL_1: 3;
36
+ readonly LOCAL_2: 4;
37
+ readonly LOCAL_3: 5;
38
+ readonly PROMPT_TEXT: 6;
39
+ readonly PROMPT_VARIABLES: 7;
40
+ readonly PROMPT_NOTES: 8;
41
+ readonly CREATED_AT: 9;
42
+ readonly CHANGED_BY: 10;
43
+ };
44
+ /**
45
+ * SQL column names for prompts_library table
46
+ */
47
+ export declare const PROMPT_COLUMN_NAMES: readonly ["uuid", "prompt_area", "prompt_key", "local_1", "local_2", "local_3", "prompt_text", "prompt_variables", "prompt_notes", "created_at", "changed_by"];
48
+ /**
49
+ * Get the SELECT clause for all prompt columns
50
+ * @returns SQL SELECT clause string
51
+ */
52
+ export declare function get_prompt_select_clause(): string;
53
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/database/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMxD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,YAAY,CAoBpF;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;CAYjB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,mBAAmB,gKAYtB,CAAC;AAEX;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD"}