family-ai-agent 1.0.6 → 1.0.7

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 (147) hide show
  1. package/.letta/settings.local.json +3 -0
  2. package/dist/database/adapters/base-adapter.d.ts +81 -0
  3. package/dist/database/adapters/base-adapter.d.ts.map +1 -0
  4. package/dist/database/adapters/base-adapter.js +105 -0
  5. package/dist/database/adapters/base-adapter.js.map +1 -0
  6. package/dist/database/adapters/index.d.ts +49 -0
  7. package/dist/database/adapters/index.d.ts.map +1 -0
  8. package/dist/database/adapters/index.js +200 -0
  9. package/dist/database/adapters/index.js.map +1 -0
  10. package/dist/database/adapters/postgres-adapter.d.ts +75 -0
  11. package/dist/database/adapters/postgres-adapter.d.ts.map +1 -0
  12. package/dist/database/adapters/postgres-adapter.js +225 -0
  13. package/dist/database/adapters/postgres-adapter.js.map +1 -0
  14. package/dist/database/adapters/sqlite-adapter.d.ts +72 -0
  15. package/dist/database/adapters/sqlite-adapter.d.ts.map +1 -0
  16. package/dist/database/adapters/sqlite-adapter.js +368 -0
  17. package/dist/database/adapters/sqlite-adapter.js.map +1 -0
  18. package/dist/database/cache/cache-keys.d.ts +180 -0
  19. package/dist/database/cache/cache-keys.d.ts.map +1 -0
  20. package/dist/database/cache/cache-keys.js +107 -0
  21. package/dist/database/cache/cache-keys.js.map +1 -0
  22. package/dist/database/cache/index.d.ts +24 -0
  23. package/dist/database/cache/index.d.ts.map +1 -0
  24. package/dist/database/cache/index.js +34 -0
  25. package/dist/database/cache/index.js.map +1 -0
  26. package/dist/database/cache/query-cache.d.ts +67 -0
  27. package/dist/database/cache/query-cache.d.ts.map +1 -0
  28. package/dist/database/cache/query-cache.js +177 -0
  29. package/dist/database/cache/query-cache.js.map +1 -0
  30. package/dist/database/client.d.ts +63 -4
  31. package/dist/database/client.d.ts.map +1 -1
  32. package/dist/database/client.js +147 -59
  33. package/dist/database/client.js.map +1 -1
  34. package/dist/database/db-config.d.ts +104 -0
  35. package/dist/database/db-config.d.ts.map +1 -0
  36. package/dist/database/db-config.js +167 -0
  37. package/dist/database/db-config.js.map +1 -0
  38. package/dist/database/drizzle/index.d.ts +42 -0
  39. package/dist/database/drizzle/index.d.ts.map +1 -0
  40. package/dist/database/drizzle/index.js +48 -0
  41. package/dist/database/drizzle/index.js.map +1 -0
  42. package/dist/database/drizzle/schema/audit.d.ts +533 -0
  43. package/dist/database/drizzle/schema/audit.d.ts.map +1 -0
  44. package/dist/database/drizzle/schema/audit.js +71 -0
  45. package/dist/database/drizzle/schema/audit.js.map +1 -0
  46. package/dist/database/drizzle/schema/checkpoints.d.ts +665 -0
  47. package/dist/database/drizzle/schema/checkpoints.d.ts.map +1 -0
  48. package/dist/database/drizzle/schema/checkpoints.js +110 -0
  49. package/dist/database/drizzle/schema/checkpoints.js.map +1 -0
  50. package/dist/database/drizzle/schema/conversations.d.ts +449 -0
  51. package/dist/database/drizzle/schema/conversations.d.ts.map +1 -0
  52. package/dist/database/drizzle/schema/conversations.js +91 -0
  53. package/dist/database/drizzle/schema/conversations.js.map +1 -0
  54. package/dist/database/drizzle/schema/documents.d.ts +600 -0
  55. package/dist/database/drizzle/schema/documents.d.ts.map +1 -0
  56. package/dist/database/drizzle/schema/documents.js +100 -0
  57. package/dist/database/drizzle/schema/documents.js.map +1 -0
  58. package/dist/database/drizzle/schema/index.d.ts +3084 -0
  59. package/dist/database/drizzle/schema/index.d.ts.map +1 -0
  60. package/dist/database/drizzle/schema/index.js +46 -0
  61. package/dist/database/drizzle/schema/index.js.map +1 -0
  62. package/dist/database/drizzle/schema/memories.d.ts +435 -0
  63. package/dist/database/drizzle/schema/memories.d.ts.map +1 -0
  64. package/dist/database/drizzle/schema/memories.js +73 -0
  65. package/dist/database/drizzle/schema/memories.js.map +1 -0
  66. package/dist/database/drizzle/schema/tasks.d.ts +565 -0
  67. package/dist/database/drizzle/schema/tasks.d.ts.map +1 -0
  68. package/dist/database/drizzle/schema/tasks.js +84 -0
  69. package/dist/database/drizzle/schema/tasks.js.map +1 -0
  70. package/dist/database/health/circuit-breaker.d.ts +81 -0
  71. package/dist/database/health/circuit-breaker.d.ts.map +1 -0
  72. package/dist/database/health/circuit-breaker.js +184 -0
  73. package/dist/database/health/circuit-breaker.js.map +1 -0
  74. package/dist/database/health/health-monitor.d.ts +69 -0
  75. package/dist/database/health/health-monitor.d.ts.map +1 -0
  76. package/dist/database/health/health-monitor.js +174 -0
  77. package/dist/database/health/health-monitor.js.map +1 -0
  78. package/dist/database/health/index.d.ts +27 -0
  79. package/dist/database/health/index.d.ts.map +1 -0
  80. package/dist/database/health/index.js +23 -0
  81. package/dist/database/health/index.js.map +1 -0
  82. package/dist/database/index.d.ts +16 -0
  83. package/dist/database/index.d.ts.map +1 -0
  84. package/dist/database/index.js +41 -0
  85. package/dist/database/index.js.map +1 -0
  86. package/dist/database/migrations/index.d.ts +34 -0
  87. package/dist/database/migrations/index.d.ts.map +1 -0
  88. package/dist/database/migrations/index.js +45 -0
  89. package/dist/database/migrations/index.js.map +1 -0
  90. package/dist/database/migrations/migrator.d.ts +77 -0
  91. package/dist/database/migrations/migrator.d.ts.map +1 -0
  92. package/dist/database/migrations/migrator.js +258 -0
  93. package/dist/database/migrations/migrator.js.map +1 -0
  94. package/dist/database/migrations/versions/001_initial.d.ts +9 -0
  95. package/dist/database/migrations/versions/001_initial.d.ts.map +1 -0
  96. package/dist/database/migrations/versions/001_initial.js +183 -0
  97. package/dist/database/migrations/versions/001_initial.js.map +1 -0
  98. package/dist/database/types.d.ts +255 -0
  99. package/dist/database/types.d.ts.map +1 -0
  100. package/dist/database/types.js +8 -0
  101. package/dist/database/types.js.map +1 -0
  102. package/dist/database/vector/embedding-cache.d.ts +92 -0
  103. package/dist/database/vector/embedding-cache.d.ts.map +1 -0
  104. package/dist/database/vector/embedding-cache.js +185 -0
  105. package/dist/database/vector/embedding-cache.js.map +1 -0
  106. package/dist/database/vector/hnsw-index.d.ts +111 -0
  107. package/dist/database/vector/hnsw-index.d.ts.map +1 -0
  108. package/dist/database/vector/hnsw-index.js +337 -0
  109. package/dist/database/vector/hnsw-index.js.map +1 -0
  110. package/dist/database/vector/index.d.ts +75 -0
  111. package/dist/database/vector/index.d.ts.map +1 -0
  112. package/dist/database/vector/index.js +213 -0
  113. package/dist/database/vector/index.js.map +1 -0
  114. package/dist/database/vector/similarity.d.ts +67 -0
  115. package/dist/database/vector/similarity.d.ts.map +1 -0
  116. package/dist/database/vector/similarity.js +176 -0
  117. package/dist/database/vector/similarity.js.map +1 -0
  118. package/package.json +6 -3
  119. package/src/database/adapters/base-adapter.ts +171 -0
  120. package/src/database/adapters/index.ts +224 -0
  121. package/src/database/adapters/postgres-adapter.ts +285 -0
  122. package/src/database/adapters/sqlite-adapter.ts +420 -0
  123. package/src/database/cache/cache-keys.ts +150 -0
  124. package/src/database/cache/index.ts +44 -0
  125. package/src/database/cache/query-cache.ts +213 -0
  126. package/src/database/client.ts +166 -64
  127. package/src/database/db-config.ts +194 -0
  128. package/src/database/drizzle/index.ts +66 -0
  129. package/src/database/drizzle/schema/audit.ts +127 -0
  130. package/src/database/drizzle/schema/checkpoints.ts +164 -0
  131. package/src/database/drizzle/schema/conversations.ts +138 -0
  132. package/src/database/drizzle/schema/documents.ts +157 -0
  133. package/src/database/drizzle/schema/index.ts +139 -0
  134. package/src/database/drizzle/schema/memories.ts +127 -0
  135. package/src/database/drizzle/schema/tasks.ts +129 -0
  136. package/src/database/health/circuit-breaker.ts +214 -0
  137. package/src/database/health/health-monitor.ts +224 -0
  138. package/src/database/health/index.ts +41 -0
  139. package/src/database/index.ts +157 -0
  140. package/src/database/migrations/index.ts +52 -0
  141. package/src/database/migrations/migrator.ts +325 -0
  142. package/src/database/migrations/versions/001_initial.ts +198 -0
  143. package/src/database/types.ts +324 -0
  144. package/src/database/vector/embedding-cache.ts +234 -0
  145. package/src/database/vector/hnsw-index.ts +452 -0
  146. package/src/database/vector/index.ts +292 -0
  147. package/src/database/vector/similarity.ts +198 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ "lastAgent": "agent-3a361625-47f4-46d7-bde9-c0f165ea2a58"
3
+ }
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Base Database Adapter
3
+ *
4
+ * Abstract base class for database adapters.
5
+ * Provides common functionality and interface contract.
6
+ */
7
+ import type { DatabaseAdapter, DatabaseType, QueryResult, TransactionClient, PoolStats } from '../types.js';
8
+ /**
9
+ * Abstract base adapter class
10
+ */
11
+ export declare abstract class BaseAdapter implements DatabaseAdapter {
12
+ abstract readonly type: DatabaseType;
13
+ protected _isInitialized: boolean;
14
+ get isInitialized(): boolean;
15
+ /**
16
+ * Initialize the database connection
17
+ */
18
+ abstract initialize(): Promise<void>;
19
+ /**
20
+ * Execute a raw SQL query
21
+ */
22
+ abstract query<T extends Record<string, any> = Record<string, any>>(sql: string, params?: unknown[]): Promise<QueryResult<T>>;
23
+ /**
24
+ * Execute a transaction
25
+ */
26
+ abstract transaction<T>(callback: (client: TransactionClient) => Promise<T>): Promise<T>;
27
+ /**
28
+ * Check database health
29
+ */
30
+ abstract healthCheck(): Promise<boolean>;
31
+ /**
32
+ * Get connection pool statistics
33
+ */
34
+ getPoolStats?(): PoolStats;
35
+ /**
36
+ * Close all connections
37
+ */
38
+ abstract close(): Promise<void>;
39
+ /**
40
+ * Ensure adapter is initialized before operations
41
+ */
42
+ protected ensureInitialized(): void;
43
+ /**
44
+ * Log query execution
45
+ */
46
+ protected logQuery(sql: string, durationMs: number, rowCount: number | null): void;
47
+ /**
48
+ * Log query error
49
+ */
50
+ protected logError(sql: string, error: unknown): void;
51
+ /**
52
+ * Convert PostgreSQL parameter placeholders ($1, $2) to SQLite (?)
53
+ */
54
+ protected convertPlaceholders(sql: string): string;
55
+ /**
56
+ * Convert PostgreSQL-specific syntax to SQLite
57
+ */
58
+ protected convertToSqlite(sql: string): string;
59
+ /**
60
+ * Extract RETURNING clause from SQL
61
+ */
62
+ protected extractReturning(sql: string): string | null;
63
+ /**
64
+ * Extract table name from INSERT/UPDATE/DELETE
65
+ */
66
+ protected extractTableName(sql: string): string | null;
67
+ /**
68
+ * Check if SQL is a SELECT query
69
+ */
70
+ protected isSelectQuery(sql: string): boolean;
71
+ /**
72
+ * Check if SQL has RETURNING clause
73
+ */
74
+ protected hasReturning(sql: string): boolean;
75
+ }
76
+ /**
77
+ * Adapter factory function type
78
+ */
79
+ export type AdapterFactory = () => Promise<DatabaseAdapter>;
80
+ export default BaseAdapter;
81
+ //# sourceMappingURL=base-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-adapter.d.ts","sourceRoot":"","sources":["../../../src/database/adapters/base-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,SAAS,EACV,MAAM,aAAa,CAAC;AAMrB;;GAEG;AACH,8BAAsB,WAAY,YAAW,eAAe;IAC1D,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IACrC,SAAS,CAAC,cAAc,UAAS;IAEjC,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED;;OAEG;IACH,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChE,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,CAAC,EACpB,QAAQ,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,GAClD,OAAO,CAAC,CAAC,CAAC;IAEb;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAExC;;OAEG;IACH,YAAY,CAAC,IAAI,SAAS;IAE1B;;OAEG;IACH,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAE/B;;OAEG;IACH,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAMnC;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IASlF;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IASrD;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIlD;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAkB9C;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKtD;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAatD;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI7C;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAG7C;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;AAE5D,eAAe,WAAW,CAAC"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Base Database Adapter
3
+ *
4
+ * Abstract base class for database adapters.
5
+ * Provides common functionality and interface contract.
6
+ */
7
+ import { createLogger } from '../../utils/logger.js';
8
+ import { MemoryError } from '../../utils/errors.js';
9
+ const logger = createLogger('DatabaseAdapter');
10
+ /**
11
+ * Abstract base adapter class
12
+ */
13
+ export class BaseAdapter {
14
+ _isInitialized = false;
15
+ get isInitialized() {
16
+ return this._isInitialized;
17
+ }
18
+ /**
19
+ * Ensure adapter is initialized before operations
20
+ */
21
+ ensureInitialized() {
22
+ if (!this._isInitialized) {
23
+ throw new MemoryError('Database adapter not initialized. Call initialize() first.');
24
+ }
25
+ }
26
+ /**
27
+ * Log query execution
28
+ */
29
+ logQuery(sql, durationMs, rowCount) {
30
+ logger.debug('Query executed', {
31
+ database: this.type,
32
+ duration: durationMs,
33
+ rows: rowCount,
34
+ query: sql.slice(0, 100),
35
+ });
36
+ }
37
+ /**
38
+ * Log query error
39
+ */
40
+ logError(sql, error) {
41
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
42
+ logger.error('Query failed', {
43
+ database: this.type,
44
+ error: errorMessage,
45
+ query: sql.slice(0, 100),
46
+ });
47
+ }
48
+ /**
49
+ * Convert PostgreSQL parameter placeholders ($1, $2) to SQLite (?)
50
+ */
51
+ convertPlaceholders(sql) {
52
+ return sql.replace(/\$\d+/g, '?');
53
+ }
54
+ /**
55
+ * Convert PostgreSQL-specific syntax to SQLite
56
+ */
57
+ convertToSqlite(sql) {
58
+ let converted = this.convertPlaceholders(sql);
59
+ // Replace NOW() with CURRENT_TIMESTAMP
60
+ converted = converted.replace(/NOW\(\)/gi, 'CURRENT_TIMESTAMP');
61
+ // Remove ::type casts
62
+ converted = converted.replace(/::[a-zA-Z_]+(\[\])?/g, '');
63
+ // Replace JSONB with JSON (SQLite uses text)
64
+ converted = converted.replace(/JSONB/gi, 'JSON');
65
+ // Replace gen_random_uuid() with a placeholder (handled in code)
66
+ converted = converted.replace(/gen_random_uuid\(\)/gi, "lower(hex(randomblob(16)))");
67
+ return converted;
68
+ }
69
+ /**
70
+ * Extract RETURNING clause from SQL
71
+ */
72
+ extractReturning(sql) {
73
+ const match = sql.match(/RETURNING\s+(.+?)$/i);
74
+ return match ? match[1].trim() : null;
75
+ }
76
+ /**
77
+ * Extract table name from INSERT/UPDATE/DELETE
78
+ */
79
+ extractTableName(sql) {
80
+ const insertMatch = sql.match(/INSERT\s+INTO\s+["']?(\w+)["']?/i);
81
+ if (insertMatch)
82
+ return insertMatch[1];
83
+ const updateMatch = sql.match(/UPDATE\s+["']?(\w+)["']?/i);
84
+ if (updateMatch)
85
+ return updateMatch[1];
86
+ const deleteMatch = sql.match(/DELETE\s+FROM\s+["']?(\w+)["']?/i);
87
+ if (deleteMatch)
88
+ return deleteMatch[1];
89
+ return null;
90
+ }
91
+ /**
92
+ * Check if SQL is a SELECT query
93
+ */
94
+ isSelectQuery(sql) {
95
+ return sql.trim().toUpperCase().startsWith('SELECT');
96
+ }
97
+ /**
98
+ * Check if SQL has RETURNING clause
99
+ */
100
+ hasReturning(sql) {
101
+ return /RETURNING\s+/i.test(sql);
102
+ }
103
+ }
104
+ export default BaseAdapter;
105
+ //# sourceMappingURL=base-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-adapter.js","sourceRoot":"","sources":["../../../src/database/adapters/base-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Database Adapter Factory
3
+ *
4
+ * Factory for creating database adapters with auto-detection support.
5
+ * Tries PostgreSQL first, falls back to SQLite automatically.
6
+ */
7
+ import type { DatabaseAdapter, DetectionResult, DatabaseConfig } from '../types.js';
8
+ /**
9
+ * Detect which database to use
10
+ */
11
+ export declare function detectDatabase(config: DatabaseConfig): Promise<DetectionResult>;
12
+ /**
13
+ * Create database adapter based on detection result
14
+ */
15
+ export declare function createAdapter(detection: DetectionResult, config: DatabaseConfig): Promise<DatabaseAdapter>;
16
+ /**
17
+ * Get or create the database adapter singleton
18
+ */
19
+ export declare function getAdapter(): Promise<DatabaseAdapter>;
20
+ /**
21
+ * Close the database adapter
22
+ */
23
+ export declare function closeAdapter(): Promise<void>;
24
+ /**
25
+ * Reset adapter (for testing)
26
+ */
27
+ export declare function resetAdapter(): void;
28
+ /**
29
+ * Check if adapter is initialized
30
+ */
31
+ export declare function isAdapterInitialized(): boolean;
32
+ /**
33
+ * Get current adapter type
34
+ */
35
+ export declare function getAdapterType(): 'postgresql' | 'sqlite' | null;
36
+ export { PostgresAdapter } from './postgres-adapter.js';
37
+ export { SQLiteAdapter } from './sqlite-adapter.js';
38
+ export { BaseAdapter } from './base-adapter.js';
39
+ declare const _default: {
40
+ getAdapter: typeof getAdapter;
41
+ closeAdapter: typeof closeAdapter;
42
+ resetAdapter: typeof resetAdapter;
43
+ detectDatabase: typeof detectDatabase;
44
+ createAdapter: typeof createAdapter;
45
+ isAdapterInitialized: typeof isAdapterInitialized;
46
+ getAdapterType: typeof getAdapterType;
47
+ };
48
+ export default _default;
49
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/database/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAUpF;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAoGrF;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAWhH;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC,CAU3D;AAmBD;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAOlD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAGnC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,YAAY,GAAG,QAAQ,GAAG,IAAI,CAE/D;AAGD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;;;;;;;;;;AAEhD,wBAQE"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Database Adapter Factory
3
+ *
4
+ * Factory for creating database adapters with auto-detection support.
5
+ * Tries PostgreSQL first, falls back to SQLite automatically.
6
+ */
7
+ import pg from 'pg';
8
+ import { PostgresAdapter } from './postgres-adapter.js';
9
+ import { SQLiteAdapter } from './sqlite-adapter.js';
10
+ import { getDatabaseConfig, buildPostgresUrl, getDefaultSqlitePath } from '../db-config.js';
11
+ import { createLogger } from '../../utils/logger.js';
12
+ const { Pool } = pg;
13
+ const logger = createLogger('AdapterFactory');
14
+ // Singleton adapter instance
15
+ let adapterInstance = null;
16
+ let initPromise = null;
17
+ /**
18
+ * Detect which database to use
19
+ */
20
+ export async function detectDatabase(config) {
21
+ // 1. Check for explicit configuration
22
+ if (config.type !== 'auto') {
23
+ if (config.type === 'postgresql') {
24
+ return {
25
+ type: 'postgresql',
26
+ connectionString: config.postgresUrl ?? buildPostgresUrl({
27
+ DATABASE_URL: config.postgresUrl,
28
+ DB_HOST: config.postgresHost,
29
+ DB_PORT: config.postgresPort,
30
+ DB_USER: config.postgresUser,
31
+ DB_PASSWORD: config.postgresPassword,
32
+ DB_NAME: config.postgresDatabase,
33
+ DB_POOL_MAX: config.postgresPoolMax,
34
+ DB_POOL_IDLE_TIMEOUT_MS: config.postgresIdleTimeoutMs,
35
+ DB_POOL_CONNECTION_TIMEOUT_MS: config.postgresConnectionTimeoutMs,
36
+ DATABASE_TYPE: 'postgresql',
37
+ SQLITE_PATH: config.sqlitePath,
38
+ DB_HEALTH_CHECK_INTERVAL_MS: config.healthCheckIntervalMs,
39
+ DB_CIRCUIT_BREAKER_THRESHOLD: config.circuitBreakerThreshold,
40
+ DB_CIRCUIT_BREAKER_TIMEOUT_MS: config.circuitBreakerTimeoutMs,
41
+ DB_CACHE_MAX_SIZE: config.cacheMaxSize,
42
+ DB_CACHE_TTL_MS: config.cacheTtlMs,
43
+ VECTOR_DIMENSION: config.vectorDimension,
44
+ VECTOR_MIN_SIMILARITY: config.vectorMinSimilarity,
45
+ }),
46
+ reason: 'Explicit PostgreSQL configuration',
47
+ };
48
+ }
49
+ return {
50
+ type: 'sqlite',
51
+ sqlitePath: config.sqlitePath ?? getDefaultSqlitePath(),
52
+ reason: 'Explicit SQLite configuration',
53
+ };
54
+ }
55
+ // 2. Check for DATABASE_URL (usually means PostgreSQL is intended)
56
+ if (config.postgresUrl) {
57
+ return {
58
+ type: 'postgresql',
59
+ connectionString: config.postgresUrl,
60
+ reason: 'DATABASE_URL environment variable set',
61
+ };
62
+ }
63
+ // 3. Try PostgreSQL connection
64
+ try {
65
+ const connectionString = buildPostgresUrl({
66
+ DATABASE_URL: config.postgresUrl,
67
+ DB_HOST: config.postgresHost,
68
+ DB_PORT: config.postgresPort,
69
+ DB_USER: config.postgresUser,
70
+ DB_PASSWORD: config.postgresPassword,
71
+ DB_NAME: config.postgresDatabase,
72
+ DB_POOL_MAX: config.postgresPoolMax,
73
+ DB_POOL_IDLE_TIMEOUT_MS: config.postgresIdleTimeoutMs,
74
+ DB_POOL_CONNECTION_TIMEOUT_MS: config.postgresConnectionTimeoutMs,
75
+ DATABASE_TYPE: 'auto',
76
+ SQLITE_PATH: config.sqlitePath,
77
+ DB_HEALTH_CHECK_INTERVAL_MS: config.healthCheckIntervalMs,
78
+ DB_CIRCUIT_BREAKER_THRESHOLD: config.circuitBreakerThreshold,
79
+ DB_CIRCUIT_BREAKER_TIMEOUT_MS: config.circuitBreakerTimeoutMs,
80
+ DB_CACHE_MAX_SIZE: config.cacheMaxSize,
81
+ DB_CACHE_TTL_MS: config.cacheTtlMs,
82
+ VECTOR_DIMENSION: config.vectorDimension,
83
+ VECTOR_MIN_SIMILARITY: config.vectorMinSimilarity,
84
+ });
85
+ const pool = new Pool({
86
+ connectionString,
87
+ connectionTimeoutMillis: 3000, // Quick timeout for detection
88
+ });
89
+ try {
90
+ const client = await pool.connect();
91
+ await client.query('SELECT 1');
92
+ client.release();
93
+ await pool.end();
94
+ logger.info('PostgreSQL connection successful');
95
+ return {
96
+ type: 'postgresql',
97
+ connectionString,
98
+ reason: 'PostgreSQL connection successful',
99
+ };
100
+ }
101
+ finally {
102
+ await pool.end().catch(() => { });
103
+ }
104
+ }
105
+ catch (error) {
106
+ const message = error instanceof Error ? error.message : 'Unknown error';
107
+ logger.debug('PostgreSQL not available, falling back to SQLite', { error: message });
108
+ }
109
+ // 4. Fall back to SQLite
110
+ const sqlitePath = config.sqlitePath ?? getDefaultSqlitePath();
111
+ return {
112
+ type: 'sqlite',
113
+ sqlitePath,
114
+ reason: 'PostgreSQL unavailable, using SQLite fallback',
115
+ };
116
+ }
117
+ /**
118
+ * Create database adapter based on detection result
119
+ */
120
+ export async function createAdapter(detection, config) {
121
+ let adapter;
122
+ if (detection.type === 'postgresql') {
123
+ adapter = new PostgresAdapter(detection.connectionString, config);
124
+ }
125
+ else {
126
+ adapter = new SQLiteAdapter(detection.sqlitePath, config);
127
+ }
128
+ await adapter.initialize();
129
+ return adapter;
130
+ }
131
+ /**
132
+ * Get or create the database adapter singleton
133
+ */
134
+ export async function getAdapter() {
135
+ if (adapterInstance?.isInitialized) {
136
+ return adapterInstance;
137
+ }
138
+ if (!initPromise) {
139
+ initPromise = initializeAdapter();
140
+ }
141
+ return initPromise;
142
+ }
143
+ /**
144
+ * Initialize the database adapter
145
+ */
146
+ async function initializeAdapter() {
147
+ const config = getDatabaseConfig();
148
+ const detection = await detectDatabase(config);
149
+ logger.info('Database detected', {
150
+ type: detection.type,
151
+ reason: detection.reason,
152
+ path: detection.sqlitePath,
153
+ });
154
+ adapterInstance = await createAdapter(detection, config);
155
+ return adapterInstance;
156
+ }
157
+ /**
158
+ * Close the database adapter
159
+ */
160
+ export async function closeAdapter() {
161
+ if (adapterInstance) {
162
+ await adapterInstance.close();
163
+ adapterInstance = null;
164
+ initPromise = null;
165
+ logger.info('Database adapter closed');
166
+ }
167
+ }
168
+ /**
169
+ * Reset adapter (for testing)
170
+ */
171
+ export function resetAdapter() {
172
+ adapterInstance = null;
173
+ initPromise = null;
174
+ }
175
+ /**
176
+ * Check if adapter is initialized
177
+ */
178
+ export function isAdapterInitialized() {
179
+ return adapterInstance?.isInitialized ?? false;
180
+ }
181
+ /**
182
+ * Get current adapter type
183
+ */
184
+ export function getAdapterType() {
185
+ return adapterInstance?.type ?? null;
186
+ }
187
+ // Re-export adapter classes
188
+ export { PostgresAdapter } from './postgres-adapter.js';
189
+ export { SQLiteAdapter } from './sqlite-adapter.js';
190
+ export { BaseAdapter } from './base-adapter.js';
191
+ export default {
192
+ getAdapter,
193
+ closeAdapter,
194
+ resetAdapter,
195
+ detectDatabase,
196
+ createAdapter,
197
+ isAdapterInitialized,
198
+ getAdapterType,
199
+ };
200
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/database/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE5F,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACpB,MAAM,MAAM,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;AAE9C,6BAA6B;AAC7B,IAAI,eAAe,GAA2B,IAAI,CAAC;AACnD,IAAI,WAAW,GAAoC,IAAI,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAsB;IACzD,sCAAsC;IACtC,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACjC,OAAO;gBACL,IAAI,EAAE,YAAY;gBAClB,gBAAgB,EAAE,MAAM,CAAC,WAAW,IAAI,gBAAgB,CAAC;oBACvD,YAAY,EAAE,MAAM,CAAC,WAAW;oBAChC,OAAO,EAAE,MAAM,CAAC,YAAY;oBAC5B,OAAO,EAAE,MAAM,CAAC,YAAY;oBAC5B,OAAO,EAAE,MAAM,CAAC,YAAY;oBAC5B,WAAW,EAAE,MAAM,CAAC,gBAAgB;oBACpC,OAAO,EAAE,MAAM,CAAC,gBAAgB;oBAChC,WAAW,EAAE,MAAM,CAAC,eAAe;oBACnC,uBAAuB,EAAE,MAAM,CAAC,qBAAqB;oBACrD,6BAA6B,EAAE,MAAM,CAAC,2BAA2B;oBACjE,aAAa,EAAE,YAAY;oBAC3B,WAAW,EAAE,MAAM,CAAC,UAAU;oBAC9B,2BAA2B,EAAE,MAAM,CAAC,qBAAqB;oBACzD,4BAA4B,EAAE,MAAM,CAAC,uBAAuB;oBAC5D,6BAA6B,EAAE,MAAM,CAAC,uBAAuB;oBAC7D,iBAAiB,EAAE,MAAM,CAAC,YAAY;oBACtC,eAAe,EAAE,MAAM,CAAC,UAAU;oBAClC,gBAAgB,EAAE,MAAM,CAAC,eAAe;oBACxC,qBAAqB,EAAE,MAAM,CAAC,mBAAmB;iBAClD,CAAC;gBACF,MAAM,EAAE,mCAAmC;aAC5C,CAAC;QACJ,CAAC;QACD,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,oBAAoB,EAAE;YACvD,MAAM,EAAE,+BAA+B;SACxC,CAAC;IACJ,CAAC;IAED,mEAAmE;IACnE,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO;YACL,IAAI,EAAE,YAAY;YAClB,gBAAgB,EAAE,MAAM,CAAC,WAAW;YACpC,MAAM,EAAE,uCAAuC;SAChD,CAAC;IACJ,CAAC;IAED,+BAA+B;IAC/B,IAAI,CAAC;QACH,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;YACxC,YAAY,EAAE,MAAM,CAAC,WAAW;YAChC,OAAO,EAAE,MAAM,CAAC,YAAY;YAC5B,OAAO,EAAE,MAAM,CAAC,YAAY;YAC5B,OAAO,EAAE,MAAM,CAAC,YAAY;YAC5B,WAAW,EAAE,MAAM,CAAC,gBAAgB;YACpC,OAAO,EAAE,MAAM,CAAC,gBAAgB;YAChC,WAAW,EAAE,MAAM,CAAC,eAAe;YACnC,uBAAuB,EAAE,MAAM,CAAC,qBAAqB;YACrD,6BAA6B,EAAE,MAAM,CAAC,2BAA2B;YACjE,aAAa,EAAE,MAAM;YACrB,WAAW,EAAE,MAAM,CAAC,UAAU;YAC9B,2BAA2B,EAAE,MAAM,CAAC,qBAAqB;YACzD,4BAA4B,EAAE,MAAM,CAAC,uBAAuB;YAC5D,6BAA6B,EAAE,MAAM,CAAC,uBAAuB;YAC7D,iBAAiB,EAAE,MAAM,CAAC,YAAY;YACtC,eAAe,EAAE,MAAM,CAAC,UAAU;YAClC,gBAAgB,EAAE,MAAM,CAAC,eAAe;YACxC,qBAAqB,EAAE,MAAM,CAAC,mBAAmB;SAClD,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC;YACpB,gBAAgB;YAChB,uBAAuB,EAAE,IAAI,EAAE,8BAA8B;SAC9D,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/B,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;YAEjB,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAChD,OAAO;gBACL,IAAI,EAAE,YAAY;gBAClB,gBAAgB;gBAChB,MAAM,EAAE,kCAAkC;aAC3C,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,MAAM,CAAC,KAAK,CAAC,kDAAkD,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,yBAAyB;IACzB,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,oBAAoB,EAAE,CAAC;IAC/D,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,UAAU;QACV,MAAM,EAAE,+CAA+C;KACxD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAA0B,EAAE,MAAsB;IACpF,IAAI,OAAwB,CAAC;IAE7B,IAAI,SAAS,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACpC,OAAO,GAAG,IAAI,eAAe,CAAC,SAAS,CAAC,gBAAiB,EAAE,MAAM,CAAC,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,IAAI,aAAa,CAAC,SAAS,CAAC,UAAW,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;IAC3B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,eAAe,EAAE,aAAa,EAAE,CAAC;QACnC,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,iBAAiB,EAAE,CAAC;IACpC,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB;IAC9B,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;IAE/C,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE;QAC/B,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,IAAI,EAAE,SAAS,CAAC,UAAU;KAC3B,CAAC,CAAC;IAEH,eAAe,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACzD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC;QAC9B,eAAe,GAAG,IAAI,CAAC;QACvB,WAAW,GAAG,IAAI,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,eAAe,GAAG,IAAI,CAAC;IACvB,WAAW,GAAG,IAAI,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,eAAe,EAAE,aAAa,IAAI,KAAK,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,eAAe,EAAE,IAAI,IAAI,IAAI,CAAC;AACvC,CAAC;AAED,4BAA4B;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,eAAe;IACb,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,aAAa;IACb,oBAAoB;IACpB,cAAc;CACf,CAAC"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * PostgreSQL Database Adapter
3
+ *
4
+ * Adapter for PostgreSQL with connection pooling and pgvector support.
5
+ */
6
+ import pg from 'pg';
7
+ import type { QueryResultRow } from 'pg';
8
+ import type { NodePgDatabase } from 'drizzle-orm/node-postgres';
9
+ import { BaseAdapter } from './base-adapter.js';
10
+ import type { QueryResult, TransactionClient, PoolStats, DatabaseConfig } from '../types.js';
11
+ import * as schema from '../drizzle/schema/index.js';
12
+ /**
13
+ * PostgreSQL database adapter with Drizzle ORM
14
+ */
15
+ export declare class PostgresAdapter extends BaseAdapter {
16
+ readonly type: "postgresql";
17
+ private pool;
18
+ private drizzleInstance;
19
+ private connectionString;
20
+ private config;
21
+ constructor(connectionString: string, config: DatabaseConfig);
22
+ /**
23
+ * Get Drizzle ORM instance
24
+ */
25
+ get drizzle(): NodePgDatabase<typeof schema>;
26
+ /**
27
+ * Get raw pool (for advanced operations)
28
+ */
29
+ get rawPool(): pg.Pool;
30
+ /**
31
+ * Initialize PostgreSQL connection pool
32
+ */
33
+ initialize(): Promise<void>;
34
+ /**
35
+ * Test database connection
36
+ */
37
+ private testConnection;
38
+ /**
39
+ * Enable pgvector extension if not already enabled
40
+ */
41
+ private enablePgVector;
42
+ /**
43
+ * Execute a raw SQL query
44
+ */
45
+ query<T extends QueryResultRow = Record<string, any>>(sqlText: string, params?: unknown[]): Promise<QueryResult<T>>;
46
+ /**
47
+ * Execute a transaction
48
+ */
49
+ transaction<T>(callback: (client: TransactionClient) => Promise<T>): Promise<T>;
50
+ /**
51
+ * Check database health
52
+ */
53
+ healthCheck(): Promise<boolean>;
54
+ /**
55
+ * Get connection pool statistics
56
+ */
57
+ getPoolStats(): PoolStats;
58
+ /**
59
+ * Close all connections
60
+ */
61
+ close(): Promise<void>;
62
+ /**
63
+ * Execute vector similarity search
64
+ */
65
+ vectorSearch<T = Record<string, unknown>>(table: string, embeddingColumn: string, queryEmbedding: number[], options?: {
66
+ limit?: number;
67
+ minSimilarity?: number;
68
+ filters?: Record<string, unknown>;
69
+ selectColumns?: string[];
70
+ }): Promise<Array<T & {
71
+ similarity: number;
72
+ }>>;
73
+ }
74
+ export default PostgresAdapter;
75
+ //# sourceMappingURL=postgres-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-adapter.d.ts","sourceRoot":"","sources":["../../../src/database/adapters/postgres-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AAEzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,cAAc,EACf,MAAM,aAAa,CAAC;AAIrB,OAAO,KAAK,MAAM,MAAM,4BAA4B,CAAC;AAKrD;;GAEG;AACH,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,QAAQ,CAAC,IAAI,EAAG,YAAY,CAAU;IAEtC,OAAO,CAAC,IAAI,CAAwB;IACpC,OAAO,CAAC,eAAe,CAA8C;IACrE,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,MAAM,CAAiB;gBAEnB,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc;IAM5D;;OAEG;IACH,IAAI,OAAO,IAAI,cAAc,CAAC,OAAO,MAAM,CAAC,CAG3C;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,EAAE,CAAC,IAAI,CAGrB;IAED;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA0CjC;;OAEG;YACW,cAAc;IAS5B;;OAEG;YACW,cAAc;IAY5B;;OAEG;IACG,KAAK,CAAC,CAAC,SAAS,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACxD,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAoB1B;;OAEG;IACG,WAAW,CAAC,CAAC,EACjB,QAAQ,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,GAClD,OAAO,CAAC,CAAC,CAAC;IA+Bb;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC;;OAEG;IACH,YAAY,IAAI,SAAS;IAYzB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B;;OAEG;IACG,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5C,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,MAAM,EAAE,EACxB,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,GACL,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAmC9C;AAED,eAAe,eAAe,CAAC"}