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
@@ -1,11 +1,66 @@
1
+ /**
2
+ * Database Client
3
+ *
4
+ * Unified database client with backward-compatible API.
5
+ * Automatically detects and uses PostgreSQL or SQLite.
6
+ */
1
7
  import pg from 'pg';
2
- export declare function getPool(): pg.Pool;
3
- export declare function query<T extends pg.QueryResultRow = pg.QueryResultRow>(text: string, params?: unknown[]): Promise<pg.QueryResult<T>>;
4
- export declare function getClient(): Promise<pg.PoolClient>;
5
- export declare function transaction<T>(callback: (client: pg.PoolClient) => Promise<T>): Promise<T>;
8
+ import type { QueryResult, TransactionClient } from './types.js';
9
+ /**
10
+ * Get PostgreSQL pool (for backward compatibility)
11
+ * Returns null if using SQLite
12
+ */
13
+ export declare function getPool(): pg.Pool | null;
14
+ /**
15
+ * Execute a database query
16
+ * Compatible with both PostgreSQL and SQLite
17
+ */
18
+ export declare function query<T extends Record<string, any> = Record<string, any>>(text: string, params?: unknown[]): Promise<QueryResult<T>>;
19
+ /**
20
+ * Get a transaction client
21
+ * For PostgreSQL: returns PoolClient
22
+ * For SQLite: returns a wrapper
23
+ */
24
+ export declare function getClient(): Promise<TransactionClient>;
25
+ /**
26
+ * Execute a transaction
27
+ */
28
+ export declare function transaction<T>(callback: (client: TransactionClient) => Promise<T>): Promise<T>;
29
+ /**
30
+ * Check database health
31
+ */
6
32
  export declare function healthCheck(): Promise<boolean>;
33
+ /**
34
+ * Close the database connection
35
+ */
7
36
  export declare function closePool(): Promise<void>;
37
+ /**
38
+ * Initialize the database
39
+ * Performs auto-detection, runs migrations, and starts health monitoring
40
+ */
8
41
  export declare function initDatabase(): Promise<void>;
42
+ /**
43
+ * Get database type
44
+ */
45
+ export declare function getDatabaseType(): 'postgresql' | 'sqlite' | null;
46
+ /**
47
+ * Check if database is initialized
48
+ */
49
+ export declare function isDatabaseInitialized(): boolean;
50
+ /**
51
+ * Get health status
52
+ */
53
+ export declare function getHealthStatus(): import("./types.js").DatabaseHealth | null;
54
+ /**
55
+ * Get health summary
56
+ */
57
+ export declare function getHealthSummary(): {
58
+ healthy: boolean;
59
+ status: string;
60
+ database: string;
61
+ latencyMs: number;
62
+ circuitBreaker: string;
63
+ };
9
64
  declare const _default: {
10
65
  getPool: typeof getPool;
11
66
  query: typeof query;
@@ -14,6 +69,10 @@ declare const _default: {
14
69
  healthCheck: typeof healthCheck;
15
70
  closePool: typeof closePool;
16
71
  initDatabase: typeof initDatabase;
72
+ getDatabaseType: typeof getDatabaseType;
73
+ isDatabaseInitialized: typeof isDatabaseInitialized;
74
+ getHealthStatus: typeof getHealthStatus;
75
+ getHealthSummary: typeof getHealthSummary;
17
76
  };
18
77
  export default _default;
19
78
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/database/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAUpB,wBAAgB,OAAO,IAAI,EAAE,CAAC,IAAI,CAmBjC;AAED,wBAAsB,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC,cAAc,EACzE,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAc5B;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,CAGxD;AAED,wBAAsB,WAAW,CAAC,CAAC,EACjC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,GAC9C,OAAO,CAAC,CAAC,CAAC,CAcZ;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAOpD;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAM/C;AAGD,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAOlD;;;;;;;;;;AAED,wBAQE"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/database/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AAKpB,OAAO,KAAK,EAAmB,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAgBlF;;;GAGG;AACH,wBAAgB,OAAO,IAAI,EAAE,CAAC,IAAI,GAAG,IAAI,CAYxC;AAED;;;GAGG;AACH,wBAAsB,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7E,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAGzB;AAED;;;;GAIG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAU5D;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,QAAQ,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,GAClD,OAAO,CAAC,CAAC,CAAC,CAGZ;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAOpD;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAO/C;AAED;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAiDlD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,GAAG,QAAQ,GAAG,IAAI,CAEhE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;GAEG;AACH,wBAAgB,eAAe,+CAE9B;AAED;;GAEG;AACH,wBAAgB,gBAAgB;;;;;;EAQ/B;;;;;;;;;;;;;;AAED,wBAYE"}
@@ -1,88 +1,172 @@
1
- import pg from 'pg';
2
- import { getDatabaseUrl } from '../config/index.js';
1
+ /**
2
+ * Database Client
3
+ *
4
+ * Unified database client with backward-compatible API.
5
+ * Automatically detects and uses PostgreSQL or SQLite.
6
+ */
7
+ import { getAdapter, closeAdapter, isAdapterInitialized, getAdapterType } from './adapters/index.js';
8
+ import { createMigrator } from './migrations/index.js';
9
+ import { createHealthSystem } from './health/index.js';
10
+ import { getDatabaseConfig } from './db-config.js';
3
11
  import { createLogger } from '../utils/logger.js';
4
12
  import { MemoryError } from '../utils/errors.js';
5
- const { Pool } = pg;
6
13
  const logger = createLogger('Database');
7
- let pool = null;
14
+ // Health system instance
15
+ let healthSystem = null;
16
+ /**
17
+ * Get the current database adapter
18
+ */
19
+ async function getAdapterInstance() {
20
+ return getAdapter();
21
+ }
22
+ /**
23
+ * Get PostgreSQL pool (for backward compatibility)
24
+ * Returns null if using SQLite
25
+ */
8
26
  export function getPool() {
9
- if (!pool) {
10
- pool = new Pool({
11
- connectionString: getDatabaseUrl(),
12
- max: 20,
13
- idleTimeoutMillis: 30000,
14
- connectionTimeoutMillis: 5000,
15
- });
16
- pool.on('error', (err) => {
17
- logger.error('Unexpected pool error', { error: err.message });
18
- });
19
- pool.on('connect', () => {
20
- logger.debug('New client connected to pool');
21
- });
27
+ if (getAdapterType() === 'postgresql') {
28
+ // Access the raw pool from PostgreSQL adapter
29
+ try {
30
+ const adapter = require('./adapters/postgres-adapter.js').PostgresAdapter;
31
+ // This is a simplified compatibility layer
32
+ return null; // Actual pool access requires async initialization
33
+ }
34
+ catch {
35
+ return null;
36
+ }
22
37
  }
23
- return pool;
38
+ return null;
24
39
  }
40
+ /**
41
+ * Execute a database query
42
+ * Compatible with both PostgreSQL and SQLite
43
+ */
25
44
  export async function query(text, params) {
26
- const pool = getPool();
27
- const start = Date.now();
28
- try {
29
- const result = await pool.query(text, params);
30
- const duration = Date.now() - start;
31
- logger.debug('Query executed', { duration, rows: result.rowCount });
32
- return result;
33
- }
34
- catch (error) {
35
- const errorMessage = error instanceof Error ? error.message : 'Unknown error';
36
- logger.error('Query failed', { error: errorMessage, query: text.slice(0, 100) });
37
- throw new MemoryError(`Database query failed: ${errorMessage}`);
38
- }
45
+ const adapter = await getAdapterInstance();
46
+ return adapter.query(text, params);
39
47
  }
48
+ /**
49
+ * Get a transaction client
50
+ * For PostgreSQL: returns PoolClient
51
+ * For SQLite: returns a wrapper
52
+ */
40
53
  export async function getClient() {
41
- const pool = getPool();
42
- return pool.connect();
54
+ const adapter = await getAdapterInstance();
55
+ return {
56
+ query: async (sql, params) => {
57
+ return adapter.query(sql, params);
58
+ },
59
+ };
43
60
  }
61
+ /**
62
+ * Execute a transaction
63
+ */
44
64
  export async function transaction(callback) {
45
- const client = await getClient();
46
- try {
47
- await client.query('BEGIN');
48
- const result = await callback(client);
49
- await client.query('COMMIT');
50
- return result;
51
- }
52
- catch (error) {
53
- await client.query('ROLLBACK');
54
- throw error;
55
- }
56
- finally {
57
- client.release();
58
- }
65
+ const adapter = await getAdapterInstance();
66
+ return adapter.transaction(callback);
59
67
  }
68
+ /**
69
+ * Check database health
70
+ */
60
71
  export async function healthCheck() {
61
72
  try {
62
- const result = await query('SELECT 1 as health');
63
- return result.rows.length > 0;
73
+ const adapter = await getAdapterInstance();
74
+ return adapter.healthCheck();
64
75
  }
65
76
  catch {
66
77
  return false;
67
78
  }
68
79
  }
80
+ /**
81
+ * Close the database connection
82
+ */
69
83
  export async function closePool() {
70
- if (pool) {
71
- await pool.end();
72
- pool = null;
73
- logger.info('Database pool closed');
84
+ if (healthSystem) {
85
+ healthSystem.healthMonitor.stop();
86
+ healthSystem = null;
74
87
  }
88
+ await closeAdapter();
89
+ logger.info('Database connection closed');
75
90
  }
76
- // Initialize the database connection
91
+ /**
92
+ * Initialize the database
93
+ * Performs auto-detection, runs migrations, and starts health monitoring
94
+ */
77
95
  export async function initDatabase() {
78
- const healthy = await healthCheck();
79
- if (healthy) {
80
- logger.info('Database connection established');
96
+ try {
97
+ const adapter = await getAdapterInstance();
98
+ const config = getDatabaseConfig();
99
+ logger.info('Database initialized', {
100
+ type: adapter.type,
101
+ path: adapter.type === 'sqlite' ? config.sqlitePath : undefined,
102
+ });
103
+ // Run migrations
104
+ const migrator = createMigrator(adapter);
105
+ const pending = await migrator.getPendingMigrations();
106
+ if (pending.length > 0) {
107
+ logger.info('Running pending migrations', { count: pending.length });
108
+ const results = await migrator.migrate();
109
+ const failed = results.filter((r) => !r.success);
110
+ if (failed.length > 0) {
111
+ logger.error('Some migrations failed', { failed });
112
+ throw new MemoryError(`Migration failed: ${failed[0]?.error}`);
113
+ }
114
+ logger.info('Migrations completed', { count: results.length });
115
+ }
116
+ // Start health monitoring
117
+ healthSystem = createHealthSystem(adapter, {
118
+ circuitBreaker: {
119
+ failureThreshold: config.circuitBreakerThreshold,
120
+ resetTimeoutMs: config.circuitBreakerTimeoutMs,
121
+ },
122
+ healthMonitor: {
123
+ checkIntervalMs: config.healthCheckIntervalMs,
124
+ },
125
+ });
126
+ healthSystem.healthMonitor.start();
127
+ // Verify connection
128
+ const healthy = await adapter.healthCheck();
129
+ if (!healthy) {
130
+ throw new MemoryError('Database health check failed after initialization');
131
+ }
132
+ logger.info('Database ready', { type: adapter.type });
81
133
  }
82
- else {
83
- throw new MemoryError('Failed to connect to database');
134
+ catch (error) {
135
+ const message = error instanceof Error ? error.message : 'Unknown error';
136
+ logger.error('Database initialization failed', { error: message });
137
+ throw new MemoryError(`Failed to initialize database: ${message}`);
84
138
  }
85
139
  }
140
+ /**
141
+ * Get database type
142
+ */
143
+ export function getDatabaseType() {
144
+ return getAdapterType();
145
+ }
146
+ /**
147
+ * Check if database is initialized
148
+ */
149
+ export function isDatabaseInitialized() {
150
+ return isAdapterInitialized();
151
+ }
152
+ /**
153
+ * Get health status
154
+ */
155
+ export function getHealthStatus() {
156
+ return healthSystem?.healthMonitor.getStatus() ?? null;
157
+ }
158
+ /**
159
+ * Get health summary
160
+ */
161
+ export function getHealthSummary() {
162
+ return healthSystem?.healthMonitor.getSummary() ?? {
163
+ healthy: false,
164
+ status: 'unknown',
165
+ database: 'unknown',
166
+ latencyMs: -1,
167
+ circuitBreaker: 'unknown',
168
+ };
169
+ }
86
170
  export default {
87
171
  getPool,
88
172
  query,
@@ -91,5 +175,9 @@ export default {
91
175
  healthCheck,
92
176
  closePool,
93
177
  initDatabase,
178
+ getDatabaseType,
179
+ isDatabaseInitialized,
180
+ getHealthStatus,
181
+ getHealthSummary,
94
182
  };
95
183
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/database/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/database/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Database Configuration
3
+ *
4
+ * Configuration management for the database layer.
5
+ * Supports both PostgreSQL and SQLite with validation.
6
+ */
7
+ import { z } from 'zod';
8
+ import type { DatabaseConfig } from './types.js';
9
+ /**
10
+ * Database configuration schema with Zod validation
11
+ */
12
+ export declare const databaseConfigSchema: z.ZodObject<{
13
+ DATABASE_TYPE: z.ZodDefault<z.ZodEnum<["auto", "postgresql", "sqlite"]>>;
14
+ DATABASE_URL: z.ZodOptional<z.ZodString>;
15
+ DB_HOST: z.ZodDefault<z.ZodString>;
16
+ DB_PORT: z.ZodDefault<z.ZodNumber>;
17
+ DB_USER: z.ZodDefault<z.ZodString>;
18
+ DB_PASSWORD: z.ZodDefault<z.ZodString>;
19
+ DB_NAME: z.ZodDefault<z.ZodString>;
20
+ DB_POOL_MAX: z.ZodDefault<z.ZodNumber>;
21
+ DB_POOL_IDLE_TIMEOUT_MS: z.ZodDefault<z.ZodNumber>;
22
+ DB_POOL_CONNECTION_TIMEOUT_MS: z.ZodDefault<z.ZodNumber>;
23
+ SQLITE_PATH: z.ZodOptional<z.ZodString>;
24
+ DB_HEALTH_CHECK_INTERVAL_MS: z.ZodDefault<z.ZodNumber>;
25
+ DB_CIRCUIT_BREAKER_THRESHOLD: z.ZodDefault<z.ZodNumber>;
26
+ DB_CIRCUIT_BREAKER_TIMEOUT_MS: z.ZodDefault<z.ZodNumber>;
27
+ DB_CACHE_MAX_SIZE: z.ZodDefault<z.ZodNumber>;
28
+ DB_CACHE_TTL_MS: z.ZodDefault<z.ZodNumber>;
29
+ VECTOR_DIMENSION: z.ZodDefault<z.ZodNumber>;
30
+ VECTOR_MIN_SIMILARITY: z.ZodDefault<z.ZodNumber>;
31
+ }, "strip", z.ZodTypeAny, {
32
+ DB_HOST: string;
33
+ DB_PORT: number;
34
+ DB_USER: string;
35
+ DB_PASSWORD: string;
36
+ DB_NAME: string;
37
+ DATABASE_TYPE: "postgresql" | "sqlite" | "auto";
38
+ DB_POOL_MAX: number;
39
+ DB_POOL_IDLE_TIMEOUT_MS: number;
40
+ DB_POOL_CONNECTION_TIMEOUT_MS: number;
41
+ DB_HEALTH_CHECK_INTERVAL_MS: number;
42
+ DB_CIRCUIT_BREAKER_THRESHOLD: number;
43
+ DB_CIRCUIT_BREAKER_TIMEOUT_MS: number;
44
+ DB_CACHE_MAX_SIZE: number;
45
+ DB_CACHE_TTL_MS: number;
46
+ VECTOR_DIMENSION: number;
47
+ VECTOR_MIN_SIMILARITY: number;
48
+ DATABASE_URL?: string | undefined;
49
+ SQLITE_PATH?: string | undefined;
50
+ }, {
51
+ DB_HOST?: string | undefined;
52
+ DB_PORT?: number | undefined;
53
+ DB_USER?: string | undefined;
54
+ DB_PASSWORD?: string | undefined;
55
+ DB_NAME?: string | undefined;
56
+ DATABASE_URL?: string | undefined;
57
+ DATABASE_TYPE?: "postgresql" | "sqlite" | "auto" | undefined;
58
+ DB_POOL_MAX?: number | undefined;
59
+ DB_POOL_IDLE_TIMEOUT_MS?: number | undefined;
60
+ DB_POOL_CONNECTION_TIMEOUT_MS?: number | undefined;
61
+ SQLITE_PATH?: string | undefined;
62
+ DB_HEALTH_CHECK_INTERVAL_MS?: number | undefined;
63
+ DB_CIRCUIT_BREAKER_THRESHOLD?: number | undefined;
64
+ DB_CIRCUIT_BREAKER_TIMEOUT_MS?: number | undefined;
65
+ DB_CACHE_MAX_SIZE?: number | undefined;
66
+ DB_CACHE_TTL_MS?: number | undefined;
67
+ VECTOR_DIMENSION?: number | undefined;
68
+ VECTOR_MIN_SIMILARITY?: number | undefined;
69
+ }>;
70
+ export type RawDatabaseConfig = z.infer<typeof databaseConfigSchema>;
71
+ /**
72
+ * Default SQLite database path
73
+ */
74
+ export declare function getDefaultSqlitePath(): string;
75
+ /**
76
+ * Build PostgreSQL connection URL from config
77
+ */
78
+ export declare function buildPostgresUrl(config: RawDatabaseConfig): string;
79
+ /**
80
+ * Load and validate database configuration from environment
81
+ */
82
+ export declare function loadDatabaseConfig(env?: Record<string, string | undefined>): DatabaseConfig;
83
+ /**
84
+ * Get database configuration
85
+ */
86
+ export declare function getDatabaseConfig(): DatabaseConfig;
87
+ /**
88
+ * Reset configuration (for testing)
89
+ */
90
+ export declare function resetDatabaseConfig(): void;
91
+ /**
92
+ * Set custom configuration (for testing)
93
+ */
94
+ export declare function setDatabaseConfig(config: Partial<DatabaseConfig>): void;
95
+ declare const _default: {
96
+ loadDatabaseConfig: typeof loadDatabaseConfig;
97
+ getDatabaseConfig: typeof getDatabaseConfig;
98
+ resetDatabaseConfig: typeof resetDatabaseConfig;
99
+ setDatabaseConfig: typeof setDatabaseConfig;
100
+ getDefaultSqlitePath: typeof getDefaultSqlitePath;
101
+ buildPostgresUrl: typeof buildPostgresUrl;
102
+ };
103
+ export default _default;
104
+ //# sourceMappingURL=db-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-config.d.ts","sourceRoot":"","sources":["../../src/database/db-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,cAAc,EAAyB,MAAM,YAAY,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmE/B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAErE;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAKlE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,cAAc,CAUhB;AA2CD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAGvE;;;;;;;;;AAED,wBAOE"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Database Configuration
3
+ *
4
+ * Configuration management for the database layer.
5
+ * Supports both PostgreSQL and SQLite with validation.
6
+ */
7
+ import { z } from 'zod';
8
+ import { homedir } from 'os';
9
+ import { join } from 'path';
10
+ /**
11
+ * Database configuration schema with Zod validation
12
+ */
13
+ export const databaseConfigSchema = z.object({
14
+ // Detection mode
15
+ DATABASE_TYPE: z
16
+ .enum(['auto', 'postgresql', 'sqlite'])
17
+ .default('auto')
18
+ .describe('Database type selection mode'),
19
+ // PostgreSQL settings
20
+ DATABASE_URL: z
21
+ .string()
22
+ .url()
23
+ .optional()
24
+ .describe('Full PostgreSQL connection URL'),
25
+ DB_HOST: z.string().default('localhost').describe('PostgreSQL host'),
26
+ DB_PORT: z.coerce.number().default(5432).describe('PostgreSQL port'),
27
+ DB_USER: z.string().default('familyai').describe('PostgreSQL user'),
28
+ DB_PASSWORD: z.string().default('familyai123').describe('PostgreSQL password'),
29
+ DB_NAME: z.string().default('familyai').describe('PostgreSQL database name'),
30
+ DB_POOL_MAX: z.coerce.number().default(20).describe('Maximum pool connections'),
31
+ DB_POOL_IDLE_TIMEOUT_MS: z.coerce
32
+ .number()
33
+ .default(30000)
34
+ .describe('Pool idle timeout'),
35
+ DB_POOL_CONNECTION_TIMEOUT_MS: z.coerce
36
+ .number()
37
+ .default(5000)
38
+ .describe('Connection timeout'),
39
+ // SQLite settings
40
+ SQLITE_PATH: z
41
+ .string()
42
+ .optional()
43
+ .describe('SQLite database file path'),
44
+ // Health monitoring
45
+ DB_HEALTH_CHECK_INTERVAL_MS: z.coerce
46
+ .number()
47
+ .default(30000)
48
+ .describe('Health check interval'),
49
+ DB_CIRCUIT_BREAKER_THRESHOLD: z.coerce
50
+ .number()
51
+ .default(5)
52
+ .describe('Circuit breaker failure threshold'),
53
+ DB_CIRCUIT_BREAKER_TIMEOUT_MS: z.coerce
54
+ .number()
55
+ .default(60000)
56
+ .describe('Circuit breaker reset timeout'),
57
+ // Cache settings
58
+ DB_CACHE_MAX_SIZE: z.coerce
59
+ .number()
60
+ .default(1000)
61
+ .describe('Maximum cache entries'),
62
+ DB_CACHE_TTL_MS: z.coerce
63
+ .number()
64
+ .default(300000)
65
+ .describe('Cache TTL in milliseconds'),
66
+ // Vector settings
67
+ VECTOR_DIMENSION: z.coerce
68
+ .number()
69
+ .default(1536)
70
+ .describe('Embedding vector dimension'),
71
+ VECTOR_MIN_SIMILARITY: z.coerce
72
+ .number()
73
+ .default(0.7)
74
+ .describe('Minimum similarity threshold'),
75
+ });
76
+ /**
77
+ * Default SQLite database path
78
+ */
79
+ export function getDefaultSqlitePath() {
80
+ return join(homedir(), '.family-ai-agent', 'data', 'family-ai.db');
81
+ }
82
+ /**
83
+ * Build PostgreSQL connection URL from config
84
+ */
85
+ export function buildPostgresUrl(config) {
86
+ if (config.DATABASE_URL) {
87
+ return config.DATABASE_URL;
88
+ }
89
+ return `postgresql://${config.DB_USER}:${config.DB_PASSWORD}@${config.DB_HOST}:${config.DB_PORT}/${config.DB_NAME}`;
90
+ }
91
+ /**
92
+ * Load and validate database configuration from environment
93
+ */
94
+ export function loadDatabaseConfig(env = process.env) {
95
+ const parsed = databaseConfigSchema.safeParse(env);
96
+ if (!parsed.success) {
97
+ // Return defaults on validation failure
98
+ const defaults = databaseConfigSchema.parse({});
99
+ return convertToConfig(defaults);
100
+ }
101
+ return convertToConfig(parsed.data);
102
+ }
103
+ /**
104
+ * Convert raw config to DatabaseConfig interface
105
+ */
106
+ function convertToConfig(raw) {
107
+ return {
108
+ type: raw.DATABASE_TYPE,
109
+ // PostgreSQL
110
+ postgresUrl: raw.DATABASE_URL,
111
+ postgresHost: raw.DB_HOST,
112
+ postgresPort: raw.DB_PORT,
113
+ postgresUser: raw.DB_USER,
114
+ postgresPassword: raw.DB_PASSWORD,
115
+ postgresDatabase: raw.DB_NAME,
116
+ postgresPoolMax: raw.DB_POOL_MAX,
117
+ postgresIdleTimeoutMs: raw.DB_POOL_IDLE_TIMEOUT_MS,
118
+ postgresConnectionTimeoutMs: raw.DB_POOL_CONNECTION_TIMEOUT_MS,
119
+ // SQLite
120
+ sqlitePath: raw.SQLITE_PATH ?? getDefaultSqlitePath(),
121
+ // Health monitoring
122
+ healthCheckIntervalMs: raw.DB_HEALTH_CHECK_INTERVAL_MS,
123
+ circuitBreakerThreshold: raw.DB_CIRCUIT_BREAKER_THRESHOLD,
124
+ circuitBreakerTimeoutMs: raw.DB_CIRCUIT_BREAKER_TIMEOUT_MS,
125
+ // Cache
126
+ cacheMaxSize: raw.DB_CACHE_MAX_SIZE,
127
+ cacheTtlMs: raw.DB_CACHE_TTL_MS,
128
+ // Vector
129
+ vectorDimension: raw.VECTOR_DIMENSION,
130
+ vectorMinSimilarity: raw.VECTOR_MIN_SIMILARITY,
131
+ };
132
+ }
133
+ /**
134
+ * Global database configuration instance
135
+ */
136
+ let dbConfig = null;
137
+ /**
138
+ * Get database configuration
139
+ */
140
+ export function getDatabaseConfig() {
141
+ if (!dbConfig) {
142
+ dbConfig = loadDatabaseConfig();
143
+ }
144
+ return dbConfig;
145
+ }
146
+ /**
147
+ * Reset configuration (for testing)
148
+ */
149
+ export function resetDatabaseConfig() {
150
+ dbConfig = null;
151
+ }
152
+ /**
153
+ * Set custom configuration (for testing)
154
+ */
155
+ export function setDatabaseConfig(config) {
156
+ const defaults = loadDatabaseConfig();
157
+ dbConfig = { ...defaults, ...config };
158
+ }
159
+ export default {
160
+ loadDatabaseConfig,
161
+ getDatabaseConfig,
162
+ resetDatabaseConfig,
163
+ setDatabaseConfig,
164
+ getDefaultSqlitePath,
165
+ buildPostgresUrl,
166
+ };
167
+ //# sourceMappingURL=db-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-config.js","sourceRoot":"","sources":["../../src/database/db-config.ts"],"names":[],"mappings":"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"}