fss-link 1.0.51 → 1.0.53

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 (41) hide show
  1. package/README.md +42 -2
  2. package/dist/package.json +1 -1
  3. package/dist/src/config/auth.js +5 -8
  4. package/dist/src/config/auth.js.map +1 -1
  5. package/dist/src/config/config.d.ts +1 -0
  6. package/dist/src/config/config.js +5 -0
  7. package/dist/src/config/config.js.map +1 -1
  8. package/dist/src/config/database-utils.d.ts +185 -0
  9. package/dist/src/config/database-utils.js +295 -0
  10. package/dist/src/config/database-utils.js.map +1 -0
  11. package/dist/src/config/database.d.ts +197 -1
  12. package/dist/src/config/database.js +499 -160
  13. package/dist/src/config/database.js.map +1 -1
  14. package/dist/src/config/databaseHealthMonitor.d.ts +86 -0
  15. package/dist/src/config/databaseHealthMonitor.js +180 -0
  16. package/dist/src/config/databaseHealthMonitor.js.map +1 -0
  17. package/dist/src/config/databaseMetrics.d.ts +147 -0
  18. package/dist/src/config/databaseMetrics.js +369 -0
  19. package/dist/src/config/databaseMetrics.js.map +1 -0
  20. package/dist/src/config/databaseMigrations.js +40 -2
  21. package/dist/src/config/databaseMigrations.js.map +1 -1
  22. package/dist/src/config/databaseSchemaValidator.d.ts +114 -0
  23. package/dist/src/config/databaseSchemaValidator.js +499 -0
  24. package/dist/src/config/databaseSchemaValidator.js.map +1 -0
  25. package/dist/src/config/providerPersistence.d.ts +7 -0
  26. package/dist/src/config/providerPersistence.js +14 -7
  27. package/dist/src/config/providerPersistence.js.map +1 -1
  28. package/dist/src/gemini.js +35 -2
  29. package/dist/src/gemini.js.map +1 -1
  30. package/dist/src/generated/git-commit.d.ts +2 -2
  31. package/dist/src/generated/git-commit.js +2 -2
  32. package/dist/src/ui/utils/updateCheck.js +1 -1
  33. package/dist/src/ui/utils/updateCheck.js.map +1 -1
  34. package/dist/src/utils/installationInfo.js +16 -0
  35. package/dist/src/utils/installationInfo.js.map +1 -1
  36. package/dist/src/utils/installationInfo.test.js +6 -6
  37. package/dist/src/utils/installationInfo.test.js.map +1 -1
  38. package/dist/src/validateNonInterActiveAuth.js +18 -4
  39. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  40. package/dist/tsconfig.tsbuildinfo +1 -1
  41. package/package.json +1 -1
@@ -0,0 +1,499 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Database Schema Validator
8
+ * Validates database schema against expected structure
9
+ */
10
+ export class DatabaseSchemaValidator {
11
+ expectedSchemas = [];
12
+ expectedVersion = 4; // Current schema version
13
+ constructor() {
14
+ this.initializeExpectedSchemas();
15
+ }
16
+ /**
17
+ * Initialize expected database schemas
18
+ */
19
+ initializeExpectedSchemas() {
20
+ // Model configurations table
21
+ this.expectedSchemas.push({
22
+ name: 'model_configs',
23
+ columns: [
24
+ { name: 'id', type: 'INTEGER', nullable: false, primaryKey: true },
25
+ { name: 'auth_type', type: 'TEXT', nullable: false },
26
+ { name: 'model_name', type: 'TEXT', nullable: false },
27
+ { name: 'endpoint_url', type: 'TEXT', nullable: true },
28
+ { name: 'api_key', type: 'TEXT', nullable: true },
29
+ { name: 'display_name', type: 'TEXT', nullable: true },
30
+ { name: 'is_favorite', type: 'BOOLEAN', nullable: false, defaultValue: '0' },
31
+ { name: 'is_active', type: 'BOOLEAN', nullable: false, defaultValue: '0' },
32
+ { name: 'last_used', type: 'DATETIME', nullable: true },
33
+ { name: 'created_at', type: 'DATETIME', nullable: false, defaultValue: 'CURRENT_TIMESTAMP' },
34
+ { name: 'source', type: 'TEXT', nullable: false, defaultValue: 'db' }
35
+ ],
36
+ indexes: [
37
+ { name: 'idx_model_configs_active_unique', columns: ['auth_type'], unique: true, partial: 'is_active = 1' },
38
+ { name: 'idx_model_configs_favorite', columns: ['is_favorite', 'last_used'], unique: false, partial: 'is_favorite = 1' },
39
+ { name: 'idx_model_configs_recent', columns: ['last_used'], unique: false, partial: 'last_used IS NOT NULL' }
40
+ ]
41
+ });
42
+ // User preferences table
43
+ this.expectedSchemas.push({
44
+ name: 'user_preferences',
45
+ columns: [
46
+ { name: 'key', type: 'TEXT', nullable: false, primaryKey: true },
47
+ { name: 'value', type: 'TEXT', nullable: false },
48
+ { name: 'updated_at', type: 'DATETIME', nullable: false, defaultValue: 'CURRENT_TIMESTAMP' }
49
+ ],
50
+ indexes: []
51
+ });
52
+ // Custom endpoints table
53
+ this.expectedSchemas.push({
54
+ name: 'custom_endpoints',
55
+ columns: [
56
+ { name: 'id', type: 'INTEGER', nullable: false, primaryKey: true },
57
+ { name: 'provider_id', type: 'INTEGER', nullable: false },
58
+ { name: 'name', type: 'TEXT', nullable: false },
59
+ { name: 'url', type: 'TEXT', nullable: false },
60
+ { name: 'description', type: 'TEXT', nullable: true },
61
+ { name: 'is_default', type: 'BOOLEAN', nullable: false, defaultValue: '0' },
62
+ { name: 'created_at', type: 'DATETIME', nullable: false, defaultValue: 'CURRENT_TIMESTAMP' }
63
+ ],
64
+ indexes: []
65
+ });
66
+ // Provider settings table
67
+ this.expectedSchemas.push({
68
+ name: 'provider_settings',
69
+ columns: [
70
+ { name: 'id', type: 'INTEGER', nullable: false, primaryKey: true },
71
+ { name: 'provider_id', type: 'INTEGER', nullable: false },
72
+ { name: 'setting_key', type: 'TEXT', nullable: false },
73
+ { name: 'setting_value', type: 'TEXT', nullable: false },
74
+ { name: 'updated_at', type: 'DATETIME', nullable: false, defaultValue: 'CURRENT_TIMESTAMP' }
75
+ ],
76
+ indexes: [
77
+ { name: 'idx_provider_settings_lookup', columns: ['provider_id', 'setting_key'], unique: false }
78
+ ]
79
+ });
80
+ // Provider usage stats table
81
+ this.expectedSchemas.push({
82
+ name: 'provider_usage_stats',
83
+ columns: [
84
+ { name: 'id', type: 'INTEGER', nullable: false, primaryKey: true },
85
+ { name: 'provider_id', type: 'INTEGER', nullable: false },
86
+ { name: 'tokens_used', type: 'INTEGER', nullable: false, defaultValue: '0' },
87
+ { name: 'session_duration_seconds', type: 'INTEGER', nullable: false, defaultValue: '0' },
88
+ { name: 'created_at', type: 'DATETIME', nullable: false, defaultValue: 'CURRENT_TIMESTAMP' }
89
+ ],
90
+ indexes: [
91
+ { name: 'idx_provider_usage_stats_aggregation', columns: ['provider_id', 'created_at'], unique: false }
92
+ ]
93
+ });
94
+ // Schema info table
95
+ this.expectedSchemas.push({
96
+ name: 'schema_info',
97
+ columns: [
98
+ { name: 'key', type: 'TEXT', nullable: false, primaryKey: true },
99
+ { name: 'value', type: 'TEXT', nullable: false },
100
+ { name: 'updated_at', type: 'DATETIME', nullable: false, defaultValue: 'CURRENT_TIMESTAMP' }
101
+ ],
102
+ indexes: []
103
+ });
104
+ }
105
+ /**
106
+ * Validate complete database schema
107
+ */
108
+ async validateSchema(db) {
109
+ const errors = [];
110
+ const warnings = [];
111
+ try {
112
+ // Get current schema version
113
+ const currentVersion = await this.getCurrentSchemaVersion(db);
114
+ // Check schema version
115
+ if (currentVersion !== this.expectedVersion) {
116
+ errors.push({
117
+ type: 'version_mismatch',
118
+ expected: this.expectedVersion.toString(),
119
+ actual: currentVersion.toString(),
120
+ severity: 'error',
121
+ message: `Schema version mismatch: expected ${this.expectedVersion}, found ${currentVersion}`,
122
+ recommendation: 'Run database migrations to update schema'
123
+ });
124
+ }
125
+ // Get actual tables and indexes
126
+ const actualTables = await this.getActualTables(db);
127
+ const actualIndexes = await this.getActualIndexes(db);
128
+ // Validate each expected table
129
+ for (const expectedTable of this.expectedSchemas) {
130
+ await this.validateTable(db, expectedTable, actualTables, actualIndexes, errors, warnings);
131
+ }
132
+ // Check for extra tables
133
+ const expectedTableNames = new Set(this.expectedSchemas.map(t => t.name));
134
+ const extraTables = actualTables.filter(t => !expectedTableNames.has(t.name) && !t.name.startsWith('sqlite_'));
135
+ for (const extraTable of extraTables) {
136
+ warnings.push({
137
+ type: 'extra_table',
138
+ table: extraTable.name,
139
+ message: `Unexpected table found: ${extraTable.name}`,
140
+ recommendation: 'Consider removing if no longer needed'
141
+ });
142
+ }
143
+ // Check for extra indexes
144
+ const expectedIndexNames = new Set(this.expectedSchemas.flatMap(t => t.indexes.map(i => i.name)));
145
+ const extraIndexes = actualIndexes.filter(i => !expectedIndexNames.has(i.name) &&
146
+ !i.name.startsWith('sqlite_') &&
147
+ !i.name.startsWith('idx_unique_'));
148
+ for (const extraIndex of extraIndexes) {
149
+ warnings.push({
150
+ type: 'extra_index',
151
+ index: extraIndex.name,
152
+ message: `Unexpected index found: ${extraIndex.name}`,
153
+ recommendation: 'Consider removing if no longer needed'
154
+ });
155
+ }
156
+ // Generate summary
157
+ const summary = {
158
+ totalTables: actualTables.length,
159
+ totalIndexes: actualIndexes.length,
160
+ missingTables: errors.filter(e => e.type === 'missing_table').length,
161
+ missingIndexes: errors.filter(e => e.type === 'missing_index').length,
162
+ extraTables: extraTables.length,
163
+ extraIndexes: extraIndexes.length,
164
+ schemaVersion: currentVersion,
165
+ expectedVersion: this.expectedVersion
166
+ };
167
+ return {
168
+ isValid: errors.length === 0,
169
+ errors,
170
+ warnings,
171
+ summary
172
+ };
173
+ }
174
+ catch (error) {
175
+ errors.push({
176
+ type: 'constraint_violation',
177
+ expected: 'Valid database structure',
178
+ actual: 'Validation failed',
179
+ severity: 'error',
180
+ message: `Schema validation failed: ${error}`,
181
+ recommendation: 'Check database integrity and run migrations'
182
+ });
183
+ return {
184
+ isValid: false,
185
+ errors,
186
+ warnings,
187
+ summary: {
188
+ totalTables: 0,
189
+ totalIndexes: 0,
190
+ missingTables: 0,
191
+ missingIndexes: 0,
192
+ extraTables: 0,
193
+ extraIndexes: 0,
194
+ schemaVersion: 0,
195
+ expectedVersion: this.expectedVersion
196
+ }
197
+ };
198
+ }
199
+ }
200
+ /**
201
+ * Validate a specific table
202
+ */
203
+ async validateTable(db, expectedTable, actualTables, actualIndexes, errors, warnings) {
204
+ // Check if table exists
205
+ const actualTable = actualTables.find(t => t.name === expectedTable.name);
206
+ if (!actualTable) {
207
+ errors.push({
208
+ type: 'missing_table',
209
+ table: expectedTable.name,
210
+ expected: expectedTable.name,
211
+ actual: 'missing',
212
+ severity: 'error',
213
+ message: `Required table '${expectedTable.name}' is missing`,
214
+ recommendation: 'Run database migrations to create missing table'
215
+ });
216
+ return;
217
+ }
218
+ // Get table info
219
+ const tableInfo = await this.getTableInfo(db, expectedTable.name);
220
+ // Validate columns
221
+ for (const expectedColumn of expectedTable.columns) {
222
+ const actualColumn = tableInfo.find(c => c.name === expectedColumn.name);
223
+ if (!actualColumn) {
224
+ errors.push({
225
+ type: 'missing_column',
226
+ table: expectedTable.name,
227
+ column: expectedColumn.name,
228
+ expected: `${expectedColumn.name} ${expectedColumn.type}`,
229
+ actual: 'missing',
230
+ severity: 'error',
231
+ message: `Column '${expectedColumn.name}' is missing from table '${expectedTable.name}'`,
232
+ recommendation: 'Run database migrations to add missing column'
233
+ });
234
+ continue;
235
+ }
236
+ // Check column type (simplified check)
237
+ if (!this.isTypeCompatible(expectedColumn.type, actualColumn.type)) {
238
+ errors.push({
239
+ type: 'wrong_type',
240
+ table: expectedTable.name,
241
+ column: expectedColumn.name,
242
+ expected: expectedColumn.type,
243
+ actual: actualColumn.type,
244
+ severity: 'error',
245
+ message: `Column '${expectedColumn.name}' has wrong type: expected ${expectedColumn.type}, found ${actualColumn.type}`,
246
+ recommendation: 'Check migration scripts for type consistency'
247
+ });
248
+ }
249
+ // Check nullable constraint
250
+ if (expectedColumn.nullable === false && actualColumn.notnull === 0) {
251
+ errors.push({
252
+ type: 'constraint_violation',
253
+ table: expectedTable.name,
254
+ column: expectedColumn.name,
255
+ expected: 'NOT NULL',
256
+ actual: 'nullable',
257
+ severity: 'error',
258
+ message: `Column '${expectedColumn.name}' should be NOT NULL`,
259
+ recommendation: 'Update column constraint or migration'
260
+ });
261
+ }
262
+ }
263
+ // Validate indexes
264
+ for (const expectedIndex of expectedTable.indexes) {
265
+ const actualIndex = actualIndexes.find(i => i.name === expectedIndex.name);
266
+ if (!actualIndex) {
267
+ errors.push({
268
+ type: 'missing_index',
269
+ table: expectedTable.name,
270
+ index: expectedIndex.name,
271
+ expected: expectedIndex.name,
272
+ actual: 'missing',
273
+ severity: 'error',
274
+ message: `Required index '${expectedIndex.name}' is missing`,
275
+ recommendation: 'Run database migrations to create missing index'
276
+ });
277
+ }
278
+ }
279
+ }
280
+ /**
281
+ * Get current schema version
282
+ */
283
+ async getCurrentSchemaVersion(db) {
284
+ try {
285
+ const result = db.exec(`
286
+ SELECT value FROM schema_info WHERE key = 'schema_version'
287
+ `);
288
+ if (result.length > 0 && result[0].values.length > 0) {
289
+ return parseInt(result[0].values[0][0], 10);
290
+ }
291
+ // Fallback: check if any tables exist to determine if this is a legacy database
292
+ const tablesResult = db.exec(`
293
+ SELECT name FROM sqlite_master WHERE type='table' AND name='model_configs'
294
+ `);
295
+ return tablesResult.length > 0 ? 1 : 0; // Legacy or fresh database
296
+ }
297
+ catch (error) {
298
+ return 0; // Assume fresh database
299
+ }
300
+ }
301
+ /**
302
+ * Get actual tables in database
303
+ */
304
+ async getActualTables(db) {
305
+ try {
306
+ const result = db.exec(`
307
+ SELECT name, type FROM sqlite_master
308
+ WHERE type='table'
309
+ ORDER BY name
310
+ `);
311
+ if (result.length === 0)
312
+ return [];
313
+ return result[0].values.map(row => ({
314
+ name: row[0],
315
+ type: row[1]
316
+ }));
317
+ }
318
+ catch (error) {
319
+ return [];
320
+ }
321
+ }
322
+ /**
323
+ * Get actual indexes in database
324
+ */
325
+ async getActualIndexes(db) {
326
+ try {
327
+ const result = db.exec(`
328
+ SELECT name, tbl_name, [unique] FROM sqlite_master
329
+ WHERE type='index'
330
+ ORDER BY name
331
+ `);
332
+ if (result.length === 0)
333
+ return [];
334
+ return result[0].values.map(row => ({
335
+ name: row[0],
336
+ tableName: row[1],
337
+ unique: Boolean(row[2])
338
+ }));
339
+ }
340
+ catch (error) {
341
+ return [];
342
+ }
343
+ }
344
+ /**
345
+ * Get table column information
346
+ */
347
+ async getTableInfo(db, tableName) {
348
+ try {
349
+ const result = db.exec(`PRAGMA table_info("${tableName}")`);
350
+ if (result.length === 0)
351
+ return [];
352
+ return result[0].values.map(row => ({
353
+ cid: row[0],
354
+ name: row[1],
355
+ type: row[2],
356
+ notnull: row[3],
357
+ dflt_value: row[4],
358
+ pk: row[5]
359
+ }));
360
+ }
361
+ catch (error) {
362
+ return [];
363
+ }
364
+ }
365
+ /**
366
+ * Check if column types are compatible
367
+ */
368
+ isTypeCompatible(expected, actual) {
369
+ // Normalize types for comparison
370
+ const normalizeType = (type) => {
371
+ return type.toUpperCase()
372
+ .replace(/\(\d+\)/g, '') // Remove length specifiers
373
+ .replace(/\s+/g, ' ')
374
+ .trim();
375
+ };
376
+ const expectedNorm = normalizeType(expected);
377
+ const actualNorm = normalizeType(actual);
378
+ // Direct match
379
+ if (expectedNorm === actualNorm)
380
+ return true;
381
+ // SQLite type affinity rules
382
+ const typeAliases = {
383
+ 'INTEGER': ['INT', 'BIGINT', 'SMALLINT', 'TINYINT'],
384
+ 'TEXT': ['VARCHAR', 'CHAR', 'STRING', 'CLOB'],
385
+ 'REAL': ['FLOAT', 'DOUBLE', 'DECIMAL', 'NUMERIC'],
386
+ 'BLOB': ['BINARY', 'VARBINARY'],
387
+ 'BOOLEAN': ['BOOL']
388
+ };
389
+ for (const [baseType, aliases] of Object.entries(typeAliases)) {
390
+ if ((expectedNorm === baseType && aliases.includes(actualNorm)) ||
391
+ (actualNorm === baseType && aliases.includes(expectedNorm))) {
392
+ return true;
393
+ }
394
+ }
395
+ return false;
396
+ }
397
+ /**
398
+ * Validate specific table by name
399
+ */
400
+ async validateTableSchema(db, tableName) {
401
+ const expectedTable = this.expectedSchemas.find(t => t.name === tableName);
402
+ if (!expectedTable) {
403
+ return {
404
+ isValid: false,
405
+ errors: [{
406
+ type: 'missing_table',
407
+ table: tableName,
408
+ expected: tableName,
409
+ actual: 'unknown',
410
+ severity: 'error',
411
+ message: `No schema definition found for table '${tableName}'`
412
+ }],
413
+ warnings: []
414
+ };
415
+ }
416
+ const errors = [];
417
+ const warnings = [];
418
+ const actualTables = await this.getActualTables(db);
419
+ const actualIndexes = await this.getActualIndexes(db);
420
+ await this.validateTable(db, expectedTable, actualTables, actualIndexes, errors, warnings);
421
+ return {
422
+ isValid: errors.length === 0,
423
+ errors,
424
+ warnings
425
+ };
426
+ }
427
+ /**
428
+ * Get schema validation report as formatted text
429
+ */
430
+ formatValidationReport(result) {
431
+ const lines = [];
432
+ lines.push('=== Database Schema Validation Report ===');
433
+ lines.push('');
434
+ // Summary
435
+ lines.push(`Status: ${result.isValid ? '✅ VALID' : '❌ INVALID'}`);
436
+ lines.push(`Schema Version: ${result.summary.schemaVersion} (expected: ${result.summary.expectedVersion})`);
437
+ lines.push(`Tables: ${result.summary.totalTables} (${result.summary.missingTables} missing, ${result.summary.extraTables} extra)`);
438
+ lines.push(`Indexes: ${result.summary.totalIndexes} (${result.summary.missingIndexes} missing, ${result.summary.extraIndexes} extra)`);
439
+ lines.push('');
440
+ // Errors
441
+ if (result.errors.length > 0) {
442
+ lines.push('🚨 ERRORS:');
443
+ for (const error of result.errors) {
444
+ lines.push(` • ${error.message}`);
445
+ if (error.recommendation) {
446
+ lines.push(` → ${error.recommendation}`);
447
+ }
448
+ }
449
+ lines.push('');
450
+ }
451
+ // Warnings
452
+ if (result.warnings.length > 0) {
453
+ lines.push('⚠️ WARNINGS:');
454
+ for (const warning of result.warnings) {
455
+ lines.push(` • ${warning.message}`);
456
+ if (warning.recommendation) {
457
+ lines.push(` → ${warning.recommendation}`);
458
+ }
459
+ }
460
+ lines.push('');
461
+ }
462
+ if (result.isValid && result.warnings.length === 0) {
463
+ lines.push('✅ Database schema is valid and up to date!');
464
+ }
465
+ return lines.join('\n');
466
+ }
467
+ /**
468
+ * Check if database needs migration
469
+ */
470
+ async needsMigration(db) {
471
+ try {
472
+ const currentVersion = await this.getCurrentSchemaVersion(db);
473
+ return currentVersion < this.expectedVersion;
474
+ }
475
+ catch (error) {
476
+ return true; // Assume migration needed if we can't determine version
477
+ }
478
+ }
479
+ /**
480
+ * Get missing tables
481
+ */
482
+ async getMissingTables(db) {
483
+ const actualTables = await this.getActualTables(db);
484
+ const actualTableNames = new Set(actualTables.map(t => t.name));
485
+ return this.expectedSchemas
486
+ .filter(schema => !actualTableNames.has(schema.name))
487
+ .map(schema => schema.name);
488
+ }
489
+ /**
490
+ * Get missing indexes
491
+ */
492
+ async getMissingIndexes(db) {
493
+ const actualIndexes = await this.getActualIndexes(db);
494
+ const actualIndexNames = new Set(actualIndexes.map(i => i.name));
495
+ const expectedIndexNames = this.expectedSchemas.flatMap(t => t.indexes.map(i => i.name));
496
+ return expectedIndexNames.filter(name => !actualIndexNames.has(name));
497
+ }
498
+ }
499
+ //# sourceMappingURL=databaseSchemaValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"databaseSchemaValidator.js","sourceRoot":"","sources":["../../../src/config/databaseSchemaValidator.ts"],"names":[],"mappings":"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"}
@@ -44,32 +44,39 @@ export interface ProviderUsage {
44
44
  }
45
45
  /**
46
46
  * Enhanced provider persistence manager
47
+ * NOTE: This is a legacy interface - use ProviderManager directly instead
47
48
  */
48
49
  export declare class ProviderPersistenceManager {
49
50
  private static instance;
50
51
  static getInstance(): ProviderPersistenceManager;
51
52
  /**
52
53
  * Save provider configuration with usage tracking
54
+ * @deprecated Use ProviderManager.saveProvider() instead
53
55
  */
54
56
  saveProviderConfig(_config: ProviderConfig): Promise<number>;
55
57
  /**
56
58
  * Get all saved providers with usage statistics
59
+ * @deprecated Use ProviderManager.getAllProviders() instead
57
60
  */
58
61
  getAllProviders(): Promise<ProviderConfig[]>;
59
62
  /**
60
63
  * Get smart default provider based on usage and configuration
64
+ * @deprecated Use ProviderManager.getDefaultProvider() instead
61
65
  */
62
66
  getDefaultProvider(): Promise<ProviderConfig | null>;
63
67
  /**
64
68
  * Track provider usage for intelligent defaults
69
+ * @deprecated Use ProviderManager.recordUsage() instead
65
70
  */
66
71
  recordProviderUsage(_providerId: number, _tokens: number, _sessionDuration: number): Promise<void>;
67
72
  /**
68
73
  * Get custom endpoints for a provider
74
+ * @deprecated Use ProviderManager.getCustomEndpoints() instead
69
75
  */
70
76
  getCustomEndpoints(_providerId: number): Promise<CustomEndpoint[]>;
71
77
  /**
72
78
  * Save custom endpoint
79
+ * @deprecated Use ProviderManager.saveCustomEndpoint() instead
73
80
  */
74
81
  saveCustomEndpoint(_endpoint: CustomEndpoint): Promise<number>;
75
82
  }
@@ -5,6 +5,7 @@
5
5
  */
6
6
  /**
7
7
  * Enhanced provider persistence manager
8
+ * NOTE: This is a legacy interface - use ProviderManager directly instead
8
9
  */
9
10
  export class ProviderPersistenceManager {
10
11
  static instance;
@@ -16,40 +17,46 @@ export class ProviderPersistenceManager {
16
17
  }
17
18
  /**
18
19
  * Save provider configuration with usage tracking
20
+ * @deprecated Use ProviderManager.saveProvider() instead
19
21
  */
20
22
  async saveProviderConfig(_config) {
21
- // Implementation will integrate with existing database
22
- throw new Error('Implementation pending');
23
+ // This interface is deprecated - ProviderManager handles this functionality
24
+ throw new Error('ProviderPersistenceManager is deprecated - use ProviderManager instead');
23
25
  }
24
26
  /**
25
27
  * Get all saved providers with usage statistics
28
+ * @deprecated Use ProviderManager.getAllProviders() instead
26
29
  */
27
30
  async getAllProviders() {
28
- throw new Error('Implementation pending');
31
+ throw new Error('ProviderPersistenceManager is deprecated - use ProviderManager instead');
29
32
  }
30
33
  /**
31
34
  * Get smart default provider based on usage and configuration
35
+ * @deprecated Use ProviderManager.getDefaultProvider() instead
32
36
  */
33
37
  async getDefaultProvider() {
34
- throw new Error('Implementation pending');
38
+ throw new Error('ProviderPersistenceManager is deprecated - use ProviderManager instead');
35
39
  }
36
40
  /**
37
41
  * Track provider usage for intelligent defaults
42
+ * @deprecated Use ProviderManager.recordUsage() instead
38
43
  */
39
44
  async recordProviderUsage(_providerId, _tokens, _sessionDuration) {
40
- throw new Error('Implementation pending');
45
+ throw new Error('ProviderPersistenceManager is deprecated - use ProviderManager instead');
41
46
  }
42
47
  /**
43
48
  * Get custom endpoints for a provider
49
+ * @deprecated Use ProviderManager.getCustomEndpoints() instead
44
50
  */
45
51
  async getCustomEndpoints(_providerId) {
46
- throw new Error('Implementation pending');
52
+ throw new Error('ProviderPersistenceManager is deprecated - use ProviderManager instead');
47
53
  }
48
54
  /**
49
55
  * Save custom endpoint
56
+ * @deprecated Use ProviderManager.saveCustomEndpoint() instead
50
57
  */
51
58
  async saveCustomEndpoint(_endpoint) {
52
- throw new Error('Implementation pending');
59
+ throw new Error('ProviderPersistenceManager is deprecated - use ProviderManager instead');
53
60
  }
54
61
  }
55
62
  //# sourceMappingURL=providerPersistence.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"providerPersistence.js","sourceRoot":"","sources":["../../../src/config/providerPersistence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA6CH;;GAEG;AACH,MAAM,OAAO,0BAA0B;IAC7B,MAAM,CAAC,QAAQ,CAA6B;IAEpD,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE,CAAC;YACzC,0BAA0B,CAAC,QAAQ,GAAG,IAAI,0BAA0B,EAAE,CAAC;QACzE,CAAC;QACD,OAAO,0BAA0B,CAAC,QAAQ,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,OAAuB;QAC9C,uDAAuD;QACvD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB;QACtB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,WAAmB,EAAE,OAAe,EAAE,gBAAwB;QACtF,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,WAAmB;QAC1C,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,SAAyB;QAChD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;CACF"}
1
+ {"version":3,"file":"providerPersistence.js","sourceRoot":"","sources":["../../../src/config/providerPersistence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA6CH;;;GAGG;AACH,MAAM,OAAO,0BAA0B;IAC7B,MAAM,CAAC,QAAQ,CAA6B;IAEpD,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE,CAAC;YACzC,0BAA0B,CAAC,QAAQ,GAAG,IAAI,0BAA0B,EAAE,CAAC;QACzE,CAAC;QACD,OAAO,0BAA0B,CAAC,QAAQ,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,kBAAkB,CAAC,OAAuB;QAC9C,4EAA4E;QAC5E,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,kBAAkB;QACtB,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,mBAAmB,CAAC,WAAmB,EAAE,OAAe,EAAE,gBAAwB;QACtF,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,kBAAkB,CAAC,WAAmB;QAC1C,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,kBAAkB,CAAC,SAAyB;QAChD,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;CACF"}