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,81 @@
1
+ /**
2
+ * Circuit Breaker
3
+ *
4
+ * Prevents cascade failures by temporarily blocking calls to failing services.
5
+ * Implements the circuit breaker pattern for database resilience.
6
+ */
7
+ import type { CircuitBreakerState, CircuitBreakerOptions } from '../types.js';
8
+ /**
9
+ * Error thrown when circuit is open
10
+ */
11
+ export declare class CircuitOpenError extends Error {
12
+ constructor(message?: string);
13
+ }
14
+ /**
15
+ * Circuit breaker for database operations
16
+ */
17
+ export declare class CircuitBreaker {
18
+ private state;
19
+ private failureCount;
20
+ private successCount;
21
+ private lastFailureTime;
22
+ private options;
23
+ private stateChangeListeners;
24
+ constructor(options?: Partial<CircuitBreakerOptions>);
25
+ /**
26
+ * Execute a function with circuit breaker protection
27
+ */
28
+ execute<T>(fn: () => Promise<T>): Promise<T>;
29
+ /**
30
+ * Handle successful execution
31
+ */
32
+ private onSuccess;
33
+ /**
34
+ * Handle failed execution
35
+ */
36
+ private onFailure;
37
+ /**
38
+ * Transition to a new state
39
+ */
40
+ private transitionTo;
41
+ /**
42
+ * Register a state change listener
43
+ */
44
+ onStateChange(listener: (state: CircuitBreakerState) => void): () => void;
45
+ /**
46
+ * Get current state
47
+ */
48
+ getState(): CircuitBreakerState;
49
+ /**
50
+ * Check if circuit is open
51
+ */
52
+ isOpen(): boolean;
53
+ /**
54
+ * Check if circuit is half-open
55
+ */
56
+ isHalfOpen(): boolean;
57
+ /**
58
+ * Check if circuit is closed
59
+ */
60
+ isClosed(): boolean;
61
+ /**
62
+ * Force circuit to open state
63
+ */
64
+ trip(): void;
65
+ /**
66
+ * Force circuit to closed state
67
+ */
68
+ reset(): void;
69
+ /**
70
+ * Get circuit breaker statistics
71
+ */
72
+ getStats(): {
73
+ state: CircuitBreakerState;
74
+ failureCount: number;
75
+ successCount: number;
76
+ lastFailureTime: number | null;
77
+ timeSinceLastFailure: number | null;
78
+ };
79
+ }
80
+ export default CircuitBreaker;
81
+ //# sourceMappingURL=circuit-breaker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../../src/database/health/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAK9E;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,GAAE,MAAkC;CAIxD;AAWD;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,oBAAoB,CAAmD;gBAEnE,OAAO,GAAE,OAAO,CAAC,qBAAqB,CAAM;IAIxD;;OAEG;IACG,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAyBlD;;OAEG;IACH,OAAO,CAAC,SAAS;IAWjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAajB;;OAEG;IACH,OAAO,CAAC,YAAY;IA4BpB;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,GAAG,MAAM,IAAI;IAUzE;;OAEG;IACH,QAAQ,IAAI,mBAAmB;IAI/B;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,IAAI,IAAI,IAAI;IAKZ;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,QAAQ,IAAI;QACV,KAAK,EAAE,mBAAmB,CAAC;QAC3B,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;KACrC;CAWF;AAED,eAAe,cAAc,CAAC"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * Circuit Breaker
3
+ *
4
+ * Prevents cascade failures by temporarily blocking calls to failing services.
5
+ * Implements the circuit breaker pattern for database resilience.
6
+ */
7
+ import { createLogger } from '../../utils/logger.js';
8
+ const logger = createLogger('CircuitBreaker');
9
+ /**
10
+ * Error thrown when circuit is open
11
+ */
12
+ export class CircuitOpenError extends Error {
13
+ constructor(message = 'Circuit breaker is open') {
14
+ super(message);
15
+ this.name = 'CircuitOpenError';
16
+ }
17
+ }
18
+ /**
19
+ * Default circuit breaker options
20
+ */
21
+ const DEFAULT_OPTIONS = {
22
+ failureThreshold: 5,
23
+ resetTimeoutMs: 60000,
24
+ halfOpenMaxAttempts: 3,
25
+ };
26
+ /**
27
+ * Circuit breaker for database operations
28
+ */
29
+ export class CircuitBreaker {
30
+ state = 'closed';
31
+ failureCount = 0;
32
+ successCount = 0;
33
+ lastFailureTime = 0;
34
+ options;
35
+ stateChangeListeners = [];
36
+ constructor(options = {}) {
37
+ this.options = { ...DEFAULT_OPTIONS, ...options };
38
+ }
39
+ /**
40
+ * Execute a function with circuit breaker protection
41
+ */
42
+ async execute(fn) {
43
+ // Check if circuit should transition from open to half-open
44
+ if (this.state === 'open') {
45
+ const timeSinceLastFailure = Date.now() - this.lastFailureTime;
46
+ if (timeSinceLastFailure >= this.options.resetTimeoutMs) {
47
+ this.transitionTo('half-open');
48
+ }
49
+ else {
50
+ throw new CircuitOpenError(`Circuit breaker is open. Retry in ${Math.ceil((this.options.resetTimeoutMs - timeSinceLastFailure) / 1000)} seconds.`);
51
+ }
52
+ }
53
+ try {
54
+ const result = await fn();
55
+ this.onSuccess();
56
+ return result;
57
+ }
58
+ catch (error) {
59
+ this.onFailure();
60
+ throw error;
61
+ }
62
+ }
63
+ /**
64
+ * Handle successful execution
65
+ */
66
+ onSuccess() {
67
+ this.failureCount = 0;
68
+ if (this.state === 'half-open') {
69
+ this.successCount++;
70
+ if (this.successCount >= this.options.halfOpenMaxAttempts) {
71
+ this.transitionTo('closed');
72
+ }
73
+ }
74
+ }
75
+ /**
76
+ * Handle failed execution
77
+ */
78
+ onFailure() {
79
+ this.failureCount++;
80
+ this.lastFailureTime = Date.now();
81
+ this.successCount = 0;
82
+ if (this.state === 'half-open') {
83
+ // Immediately open on failure in half-open state
84
+ this.transitionTo('open');
85
+ }
86
+ else if (this.failureCount >= this.options.failureThreshold) {
87
+ this.transitionTo('open');
88
+ }
89
+ }
90
+ /**
91
+ * Transition to a new state
92
+ */
93
+ transitionTo(newState) {
94
+ if (this.state === newState)
95
+ return;
96
+ const oldState = this.state;
97
+ this.state = newState;
98
+ if (newState === 'closed') {
99
+ this.failureCount = 0;
100
+ this.successCount = 0;
101
+ }
102
+ else if (newState === 'half-open') {
103
+ this.successCount = 0;
104
+ }
105
+ logger.info('Circuit breaker state changed', {
106
+ from: oldState,
107
+ to: newState,
108
+ });
109
+ // Notify listeners
110
+ for (const listener of this.stateChangeListeners) {
111
+ try {
112
+ listener(newState);
113
+ }
114
+ catch (error) {
115
+ logger.error('State change listener error', { error });
116
+ }
117
+ }
118
+ }
119
+ /**
120
+ * Register a state change listener
121
+ */
122
+ onStateChange(listener) {
123
+ this.stateChangeListeners.push(listener);
124
+ return () => {
125
+ const index = this.stateChangeListeners.indexOf(listener);
126
+ if (index >= 0) {
127
+ this.stateChangeListeners.splice(index, 1);
128
+ }
129
+ };
130
+ }
131
+ /**
132
+ * Get current state
133
+ */
134
+ getState() {
135
+ return this.state;
136
+ }
137
+ /**
138
+ * Check if circuit is open
139
+ */
140
+ isOpen() {
141
+ return this.state === 'open';
142
+ }
143
+ /**
144
+ * Check if circuit is half-open
145
+ */
146
+ isHalfOpen() {
147
+ return this.state === 'half-open';
148
+ }
149
+ /**
150
+ * Check if circuit is closed
151
+ */
152
+ isClosed() {
153
+ return this.state === 'closed';
154
+ }
155
+ /**
156
+ * Force circuit to open state
157
+ */
158
+ trip() {
159
+ this.lastFailureTime = Date.now();
160
+ this.transitionTo('open');
161
+ }
162
+ /**
163
+ * Force circuit to closed state
164
+ */
165
+ reset() {
166
+ this.transitionTo('closed');
167
+ }
168
+ /**
169
+ * Get circuit breaker statistics
170
+ */
171
+ getStats() {
172
+ return {
173
+ state: this.state,
174
+ failureCount: this.failureCount,
175
+ successCount: this.successCount,
176
+ lastFailureTime: this.lastFailureTime || null,
177
+ timeSinceLastFailure: this.lastFailureTime
178
+ ? Date.now() - this.lastFailureTime
179
+ : null,
180
+ };
181
+ }
182
+ }
183
+ export default CircuitBreaker;
184
+ //# sourceMappingURL=circuit-breaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../../src/database/health/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,MAAM,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;AAE9C;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,UAAkB,yBAAyB;QACrD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,eAAe,GAA0B;IAC7C,gBAAgB,EAAE,CAAC;IACnB,cAAc,EAAE,KAAK;IACrB,mBAAmB,EAAE,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,cAAc;IACjB,KAAK,GAAwB,QAAQ,CAAC;IACtC,YAAY,GAAW,CAAC,CAAC;IACzB,YAAY,GAAW,CAAC,CAAC;IACzB,eAAe,GAAW,CAAC,CAAC;IAC5B,OAAO,CAAwB;IAC/B,oBAAoB,GAAgD,EAAE,CAAC;IAE/E,YAAY,UAA0C,EAAE;QACtD,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO,EAAE,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAI,EAAoB;QACnC,4DAA4D;QAC5D,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC1B,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC;YAC/D,IAAI,oBAAoB,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;gBACxD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,gBAAgB,CACxB,qCAAqC,IAAI,CAAC,IAAI,CAC5C,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,oBAAoB,CAAC,GAAG,IAAI,CAC5D,WAAW,CACb,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,SAAS;QACf,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QAEtB,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;gBAC1D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,SAAS;QACf,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QAEtB,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAC/B,iDAAiD;YACjD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC9D,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,QAA6B;QAChD,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO;QAEpC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QAEtB,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;YACpC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACxB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE;YAC3C,IAAI,EAAE,QAAQ;YACd,EAAE,EAAE,QAAQ;SACb,CAAC,CAAC;QAEH,mBAAmB;QACnB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACjD,IAAI,CAAC;gBACH,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACrB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAA8C;QAC1D,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,GAAG,EAAE;YACV,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC1D,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,QAAQ;QAON,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI;YAC7C,oBAAoB,EAAE,IAAI,CAAC,eAAe;gBACxC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe;gBACnC,CAAC,CAAC,IAAI;SACT,CAAC;IACJ,CAAC;CACF;AAED,eAAe,cAAc,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Health Monitor
3
+ *
4
+ * Monitors database connection health and provides status information.
5
+ * Integrates with circuit breaker for resilience.
6
+ */
7
+ import type { DatabaseAdapter, DatabaseHealth, HealthMonitorOptions } from '../types.js';
8
+ import { CircuitBreaker } from './circuit-breaker.js';
9
+ /**
10
+ * Database health monitor
11
+ */
12
+ export declare class HealthMonitor {
13
+ private adapter;
14
+ private circuitBreaker;
15
+ private options;
16
+ private checkInterval;
17
+ private lastStatus;
18
+ private consecutiveErrors;
19
+ private isRunning;
20
+ constructor(adapter: DatabaseAdapter, circuitBreaker: CircuitBreaker, options?: Partial<HealthMonitorOptions>);
21
+ /**
22
+ * Start health monitoring
23
+ */
24
+ start(): void;
25
+ /**
26
+ * Stop health monitoring
27
+ */
28
+ stop(): void;
29
+ /**
30
+ * Perform a health check
31
+ */
32
+ check(): Promise<DatabaseHealth>;
33
+ /**
34
+ * Determine overall health status
35
+ */
36
+ private determineStatus;
37
+ /**
38
+ * Get current health status
39
+ */
40
+ getStatus(): DatabaseHealth | null;
41
+ /**
42
+ * Check if database is healthy
43
+ */
44
+ isHealthy(): boolean;
45
+ /**
46
+ * Check if database is degraded
47
+ */
48
+ isDegraded(): boolean;
49
+ /**
50
+ * Check if database is unhealthy
51
+ */
52
+ isUnhealthy(): boolean;
53
+ /**
54
+ * Wait for database to become healthy
55
+ */
56
+ waitForHealthy(timeoutMs?: number): Promise<boolean>;
57
+ /**
58
+ * Get health summary for API responses
59
+ */
60
+ getSummary(): {
61
+ healthy: boolean;
62
+ status: string;
63
+ database: string;
64
+ latencyMs: number;
65
+ circuitBreaker: string;
66
+ };
67
+ }
68
+ export default HealthMonitor;
69
+ //# sourceMappingURL=health-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-monitor.d.ts","sourceRoot":"","sources":["../../../src/database/health/health-monitor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAatD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,OAAO,CAAuB;IAEtC,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,SAAS,CAAkB;gBAGjC,OAAO,EAAE,eAAe,EACxB,cAAc,EAAE,cAAc,EAC9B,OAAO,GAAE,OAAO,CAAC,oBAAoB,CAAM;IAO7C;;OAEG;IACH,KAAK,IAAI,IAAI;IAgBb;;OAEG;IACH,IAAI,IAAI,IAAI;IAYZ;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,cAAc,CAAC;IAgDtC;;OAEG;IACH,OAAO,CAAC,eAAe;IAwBvB;;OAEG;IACH,SAAS,IAAI,cAAc,GAAG,IAAI;IAIlC;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,cAAc,CAAC,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAcjE;;OAEG;IACH,UAAU,IAAI;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;KACxB;CAWF;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Health Monitor
3
+ *
4
+ * Monitors database connection health and provides status information.
5
+ * Integrates with circuit breaker for resilience.
6
+ */
7
+ import { createLogger } from '../../utils/logger.js';
8
+ const logger = createLogger('HealthMonitor');
9
+ /**
10
+ * Default health monitor options
11
+ */
12
+ const DEFAULT_OPTIONS = {
13
+ checkIntervalMs: 30000,
14
+ errorThreshold: 3,
15
+ };
16
+ /**
17
+ * Database health monitor
18
+ */
19
+ export class HealthMonitor {
20
+ adapter;
21
+ circuitBreaker;
22
+ options;
23
+ checkInterval = null;
24
+ lastStatus = null;
25
+ consecutiveErrors = 0;
26
+ isRunning = false;
27
+ constructor(adapter, circuitBreaker, options = {}) {
28
+ this.adapter = adapter;
29
+ this.circuitBreaker = circuitBreaker;
30
+ this.options = { ...DEFAULT_OPTIONS, ...options };
31
+ }
32
+ /**
33
+ * Start health monitoring
34
+ */
35
+ start() {
36
+ if (this.isRunning)
37
+ return;
38
+ this.isRunning = true;
39
+ this.check(); // Initial check
40
+ this.checkInterval = setInterval(() => this.check(), this.options.checkIntervalMs);
41
+ logger.info('Health monitor started', {
42
+ intervalMs: this.options.checkIntervalMs,
43
+ });
44
+ }
45
+ /**
46
+ * Stop health monitoring
47
+ */
48
+ stop() {
49
+ if (!this.isRunning)
50
+ return;
51
+ if (this.checkInterval) {
52
+ clearInterval(this.checkInterval);
53
+ this.checkInterval = null;
54
+ }
55
+ this.isRunning = false;
56
+ logger.info('Health monitor stopped');
57
+ }
58
+ /**
59
+ * Perform a health check
60
+ */
61
+ async check() {
62
+ const startTime = Date.now();
63
+ const errors = [];
64
+ let isHealthy = false;
65
+ try {
66
+ isHealthy = await this.circuitBreaker.execute(async () => {
67
+ return this.adapter.healthCheck();
68
+ });
69
+ if (isHealthy) {
70
+ this.consecutiveErrors = 0;
71
+ }
72
+ else {
73
+ this.consecutiveErrors++;
74
+ errors.push('Health check returned false');
75
+ }
76
+ }
77
+ catch (error) {
78
+ this.consecutiveErrors++;
79
+ const message = error instanceof Error ? error.message : 'Unknown error';
80
+ errors.push(message);
81
+ logger.warn('Health check failed', { error: message });
82
+ }
83
+ const latencyMs = Date.now() - startTime;
84
+ const status = this.determineStatus(errors.length > 0, latencyMs);
85
+ this.lastStatus = {
86
+ status,
87
+ type: this.adapter.type,
88
+ latencyMs,
89
+ poolStats: this.adapter.getPoolStats?.(),
90
+ circuitState: this.circuitBreaker.getState(),
91
+ lastCheck: new Date(),
92
+ errors,
93
+ };
94
+ // Log status changes
95
+ if (status !== 'healthy') {
96
+ logger.warn('Database health degraded', {
97
+ status,
98
+ errors,
99
+ consecutiveErrors: this.consecutiveErrors,
100
+ });
101
+ }
102
+ return this.lastStatus;
103
+ }
104
+ /**
105
+ * Determine overall health status
106
+ */
107
+ determineStatus(hasErrors, latencyMs) {
108
+ // Unhealthy if circuit is open or too many consecutive errors
109
+ if (this.circuitBreaker.isOpen() ||
110
+ this.consecutiveErrors >= this.options.errorThreshold) {
111
+ return 'unhealthy';
112
+ }
113
+ // Degraded if circuit is half-open, has errors, or high latency
114
+ if (this.circuitBreaker.isHalfOpen() ||
115
+ hasErrors ||
116
+ latencyMs > 1000) {
117
+ return 'degraded';
118
+ }
119
+ return 'healthy';
120
+ }
121
+ /**
122
+ * Get current health status
123
+ */
124
+ getStatus() {
125
+ return this.lastStatus;
126
+ }
127
+ /**
128
+ * Check if database is healthy
129
+ */
130
+ isHealthy() {
131
+ return this.lastStatus?.status === 'healthy';
132
+ }
133
+ /**
134
+ * Check if database is degraded
135
+ */
136
+ isDegraded() {
137
+ return this.lastStatus?.status === 'degraded';
138
+ }
139
+ /**
140
+ * Check if database is unhealthy
141
+ */
142
+ isUnhealthy() {
143
+ return this.lastStatus?.status === 'unhealthy';
144
+ }
145
+ /**
146
+ * Wait for database to become healthy
147
+ */
148
+ async waitForHealthy(timeoutMs = 30000) {
149
+ const startTime = Date.now();
150
+ while (Date.now() - startTime < timeoutMs) {
151
+ const status = await this.check();
152
+ if (status.status === 'healthy') {
153
+ return true;
154
+ }
155
+ await new Promise((resolve) => setTimeout(resolve, 1000));
156
+ }
157
+ return false;
158
+ }
159
+ /**
160
+ * Get health summary for API responses
161
+ */
162
+ getSummary() {
163
+ const status = this.lastStatus;
164
+ return {
165
+ healthy: status?.status === 'healthy',
166
+ status: status?.status ?? 'unknown',
167
+ database: this.adapter.type,
168
+ latencyMs: status?.latencyMs ?? -1,
169
+ circuitBreaker: this.circuitBreaker.getState(),
170
+ };
171
+ }
172
+ }
173
+ export default HealthMonitor;
174
+ //# sourceMappingURL=health-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-monitor.js","sourceRoot":"","sources":["../../../src/database/health/health-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Health Monitoring Exports
3
+ *
4
+ * Central export for health monitoring and circuit breaker functionality.
5
+ */
6
+ export { CircuitBreaker, CircuitOpenError } from './circuit-breaker.js';
7
+ export { HealthMonitor } from './health-monitor.js';
8
+ import { CircuitBreaker } from './circuit-breaker.js';
9
+ import { HealthMonitor } from './health-monitor.js';
10
+ import type { DatabaseAdapter, CircuitBreakerOptions, HealthMonitorOptions } from '../types.js';
11
+ /**
12
+ * Create a health monitoring system for an adapter
13
+ */
14
+ export declare function createHealthSystem(adapter: DatabaseAdapter, options?: {
15
+ circuitBreaker?: Partial<CircuitBreakerOptions>;
16
+ healthMonitor?: Partial<HealthMonitorOptions>;
17
+ }): {
18
+ circuitBreaker: CircuitBreaker;
19
+ healthMonitor: HealthMonitor;
20
+ };
21
+ declare const _default: {
22
+ CircuitBreaker: typeof CircuitBreaker;
23
+ HealthMonitor: typeof HealthMonitor;
24
+ createHealthSystem: typeof createHealthSystem;
25
+ };
26
+ export default _default;
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/database/health/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEhG;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE;IACP,cAAc,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAChD,aAAa,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAC1C,GACL;IACD,cAAc,EAAE,cAAc,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;CAC9B,CASA;;;;;;AAED,wBAIE"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Health Monitoring Exports
3
+ *
4
+ * Central export for health monitoring and circuit breaker functionality.
5
+ */
6
+ export { CircuitBreaker, CircuitOpenError } from './circuit-breaker.js';
7
+ export { HealthMonitor } from './health-monitor.js';
8
+ import { CircuitBreaker } from './circuit-breaker.js';
9
+ import { HealthMonitor } from './health-monitor.js';
10
+ /**
11
+ * Create a health monitoring system for an adapter
12
+ */
13
+ export function createHealthSystem(adapter, options = {}) {
14
+ const circuitBreaker = new CircuitBreaker(options.circuitBreaker);
15
+ const healthMonitor = new HealthMonitor(adapter, circuitBreaker, options.healthMonitor);
16
+ return { circuitBreaker, healthMonitor };
17
+ }
18
+ export default {
19
+ CircuitBreaker,
20
+ HealthMonitor,
21
+ createHealthSystem,
22
+ };
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/database/health/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAwB,EACxB,UAGI,EAAE;IAKN,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,MAAM,aAAa,GAAG,IAAI,aAAa,CACrC,OAAO,EACP,cAAc,EACd,OAAO,CAAC,aAAa,CACtB,CAAC;IAEF,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;AAC3C,CAAC;AAED,eAAe;IACb,cAAc;IACd,aAAa;IACb,kBAAkB;CACnB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Database Layer
3
+ *
4
+ * Main entry point for the database abstraction layer.
5
+ * Provides unified access to PostgreSQL and SQLite with auto-detection.
6
+ */
7
+ export * from './types.js';
8
+ export { getDatabaseConfig, loadDatabaseConfig, buildPostgresUrl, getDefaultSqlitePath } from './db-config.js';
9
+ export { getAdapter, closeAdapter, resetAdapter, detectDatabase, isAdapterInitialized, getAdapterType, PostgresAdapter, SQLiteAdapter, BaseAdapter, } from './adapters/index.js';
10
+ export { createPgDrizzle, createSqliteDrizzle, isPgDrizzle, isSqliteDrizzle, type DrizzlePgInstance, type DrizzleSqliteInstance, type DrizzleInstance, conversationsPg, messagesPg, conversationsSqlite, messagesSqlite, type ConversationPg, type NewConversationPg, type MessagePg, type NewMessagePg, type ConversationSqlite, type NewConversationSqlite, type MessageSqlite, type NewMessageSqlite, type Conversation, type NewConversation, type Message, type NewMessage, longTermMemoriesPg, longTermMemoriesSqlite, type LongTermMemoryPg, type NewLongTermMemoryPg, type LongTermMemorySqlite, type NewLongTermMemorySqlite, type LongTermMemory, type NewLongTermMemory, type ParsedMemory, documentsPg, documentChunksPg, documentsSqlite, documentChunksSqlite, type DocumentPg, type NewDocumentPg, type DocumentChunkPg, type NewDocumentChunkPg, type DocumentSqlite, type NewDocumentSqlite, type DocumentChunkSqlite, type NewDocumentChunkSqlite, type Document, type NewDocument, type DocumentChunk, type NewDocumentChunk, type ParsedDocumentChunk, checkpointsPg, checkpointWritesPg, checkpointsSqlite, checkpointWritesSqlite, type CheckpointPg, type NewCheckpointPg, type CheckpointWritePg, type NewCheckpointWritePg, type CheckpointSqlite, type NewCheckpointSqlite, type CheckpointWriteSqlite, type NewCheckpointWriteSqlite, type Checkpoint, type NewCheckpoint, type CheckpointWrite, type NewCheckpointWrite, auditLogsPg, auditLogsSqlite, type AuditLogPg, type NewAuditLogPg, type AuditLogSqlite, type NewAuditLogSqlite, type AuditLog, type NewAuditLog, type AuditStatus, tasksPg, tasksSqlite, type TaskPg, type NewTaskPg, type TaskSqlite, type NewTaskSqlite, type Task, type NewTask, TaskPriority, type TaskPriorityLevel, pgSchema, sqliteSchema, } from './drizzle/index.js';
11
+ export { HNSWIndex, EmbeddingCache, PgVectorSearchEngine, SqliteVectorSearchEngine, createVectorSearchEngine, cosineSimilarity, euclideanDistance, parseEmbedding, serializeEmbedding, } from './vector/index.js';
12
+ export { Migrator, createMigrator, runMigrations, getCurrentVersion, allMigrations } from './migrations/index.js';
13
+ export { CircuitBreaker, CircuitOpenError, HealthMonitor, createHealthSystem } from './health/index.js';
14
+ export { QueryCache, getQueryCache, resetQueryCache, cacheKeys, invalidationPatterns } from './cache/index.js';
15
+ export { initDatabase, closePool, query, transaction, getClient, healthCheck, getPool, } from './client.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Database Layer
3
+ *
4
+ * Main entry point for the database abstraction layer.
5
+ * Provides unified access to PostgreSQL and SQLite with auto-detection.
6
+ */
7
+ // Core types
8
+ export * from './types.js';
9
+ // Configuration
10
+ export { getDatabaseConfig, loadDatabaseConfig, buildPostgresUrl, getDefaultSqlitePath } from './db-config.js';
11
+ // Adapters
12
+ export { getAdapter, closeAdapter, resetAdapter, detectDatabase, isAdapterInitialized, getAdapterType, PostgresAdapter, SQLiteAdapter, BaseAdapter, } from './adapters/index.js';
13
+ // Drizzle ORM (exclude duplicate types already exported from types.js)
14
+ export {
15
+ // Drizzle factories
16
+ createPgDrizzle, createSqliteDrizzle, isPgDrizzle, isSqliteDrizzle,
17
+ // Conversations
18
+ conversationsPg, messagesPg, conversationsSqlite, messagesSqlite,
19
+ // Long-term memories (excluding MemoryType - already in types.js)
20
+ longTermMemoriesPg, longTermMemoriesSqlite,
21
+ // Documents
22
+ documentsPg, documentChunksPg, documentsSqlite, documentChunksSqlite,
23
+ // Checkpoints
24
+ checkpointsPg, checkpointWritesPg, checkpointsSqlite, checkpointWritesSqlite,
25
+ // Audit logs (excluding AuditActionType - already in types.js)
26
+ auditLogsPg, auditLogsSqlite,
27
+ // Tasks (excluding TaskStatus - already in types.js)
28
+ tasksPg, tasksSqlite, TaskPriority,
29
+ // Schema helpers
30
+ pgSchema, sqliteSchema, } from './drizzle/index.js';
31
+ // Vector search
32
+ export { HNSWIndex, EmbeddingCache, PgVectorSearchEngine, SqliteVectorSearchEngine, createVectorSearchEngine, cosineSimilarity, euclideanDistance, parseEmbedding, serializeEmbedding, } from './vector/index.js';
33
+ // Migrations
34
+ export { Migrator, createMigrator, runMigrations, getCurrentVersion, allMigrations } from './migrations/index.js';
35
+ // Health monitoring
36
+ export { CircuitBreaker, CircuitOpenError, HealthMonitor, createHealthSystem } from './health/index.js';
37
+ // Caching
38
+ export { QueryCache, getQueryCache, resetQueryCache, cacheKeys, invalidationPatterns } from './cache/index.js';
39
+ // Re-export client functions for backward compatibility
40
+ export { initDatabase, closePool, query, transaction, getClient, healthCheck, getPool, } from './client.js';
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,aAAa;AACb,cAAc,YAAY,CAAC;AAE3B,gBAAgB;AAChB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE/G,WAAW;AACX,OAAO,EACL,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,aAAa,EACb,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAE7B,uEAAuE;AACvE,OAAO;AACL,oBAAoB;AACpB,eAAe,EACf,mBAAmB,EACnB,WAAW,EACX,eAAe;AAKf,gBAAgB;AAChB,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,cAAc;AAad,kEAAkE;AAClE,kBAAkB,EAClB,sBAAsB;AAQtB,YAAY;AACZ,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,oBAAoB;AAcpB,cAAc;AACd,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB;AAatB,+DAA+D;AAC/D,WAAW,EACX,eAAe;AAQf,qDAAqD;AACrD,OAAO,EACP,WAAW,EAOX,YAAY;AAEZ,iBAAiB;AACjB,QAAQ,EACR,YAAY,GACb,MAAM,oBAAoB,CAAC;AAE5B,gBAAgB;AAChB,OAAO,EACL,SAAS,EACT,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,EACxB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAE3B,aAAa;AACb,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAElH,oBAAoB;AACpB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAExG,UAAU;AACV,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE/G,wDAAwD;AACxD,OAAO,EACL,YAAY,EACZ,SAAS,EACT,KAAK,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,OAAO,GACR,MAAM,aAAa,CAAC"}