family-ai-agent 1.0.5 → 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 (153) hide show
  1. package/.letta/settings.local.json +3 -0
  2. package/dist/cli/index.js +6 -4
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/database/adapters/base-adapter.d.ts +81 -0
  5. package/dist/database/adapters/base-adapter.d.ts.map +1 -0
  6. package/dist/database/adapters/base-adapter.js +105 -0
  7. package/dist/database/adapters/base-adapter.js.map +1 -0
  8. package/dist/database/adapters/index.d.ts +49 -0
  9. package/dist/database/adapters/index.d.ts.map +1 -0
  10. package/dist/database/adapters/index.js +200 -0
  11. package/dist/database/adapters/index.js.map +1 -0
  12. package/dist/database/adapters/postgres-adapter.d.ts +75 -0
  13. package/dist/database/adapters/postgres-adapter.d.ts.map +1 -0
  14. package/dist/database/adapters/postgres-adapter.js +225 -0
  15. package/dist/database/adapters/postgres-adapter.js.map +1 -0
  16. package/dist/database/adapters/sqlite-adapter.d.ts +72 -0
  17. package/dist/database/adapters/sqlite-adapter.d.ts.map +1 -0
  18. package/dist/database/adapters/sqlite-adapter.js +368 -0
  19. package/dist/database/adapters/sqlite-adapter.js.map +1 -0
  20. package/dist/database/cache/cache-keys.d.ts +180 -0
  21. package/dist/database/cache/cache-keys.d.ts.map +1 -0
  22. package/dist/database/cache/cache-keys.js +107 -0
  23. package/dist/database/cache/cache-keys.js.map +1 -0
  24. package/dist/database/cache/index.d.ts +24 -0
  25. package/dist/database/cache/index.d.ts.map +1 -0
  26. package/dist/database/cache/index.js +34 -0
  27. package/dist/database/cache/index.js.map +1 -0
  28. package/dist/database/cache/query-cache.d.ts +67 -0
  29. package/dist/database/cache/query-cache.d.ts.map +1 -0
  30. package/dist/database/cache/query-cache.js +177 -0
  31. package/dist/database/cache/query-cache.js.map +1 -0
  32. package/dist/database/client.d.ts +63 -4
  33. package/dist/database/client.d.ts.map +1 -1
  34. package/dist/database/client.js +147 -59
  35. package/dist/database/client.js.map +1 -1
  36. package/dist/database/db-config.d.ts +104 -0
  37. package/dist/database/db-config.d.ts.map +1 -0
  38. package/dist/database/db-config.js +167 -0
  39. package/dist/database/db-config.js.map +1 -0
  40. package/dist/database/drizzle/index.d.ts +42 -0
  41. package/dist/database/drizzle/index.d.ts.map +1 -0
  42. package/dist/database/drizzle/index.js +48 -0
  43. package/dist/database/drizzle/index.js.map +1 -0
  44. package/dist/database/drizzle/schema/audit.d.ts +533 -0
  45. package/dist/database/drizzle/schema/audit.d.ts.map +1 -0
  46. package/dist/database/drizzle/schema/audit.js +71 -0
  47. package/dist/database/drizzle/schema/audit.js.map +1 -0
  48. package/dist/database/drizzle/schema/checkpoints.d.ts +665 -0
  49. package/dist/database/drizzle/schema/checkpoints.d.ts.map +1 -0
  50. package/dist/database/drizzle/schema/checkpoints.js +110 -0
  51. package/dist/database/drizzle/schema/checkpoints.js.map +1 -0
  52. package/dist/database/drizzle/schema/conversations.d.ts +449 -0
  53. package/dist/database/drizzle/schema/conversations.d.ts.map +1 -0
  54. package/dist/database/drizzle/schema/conversations.js +91 -0
  55. package/dist/database/drizzle/schema/conversations.js.map +1 -0
  56. package/dist/database/drizzle/schema/documents.d.ts +600 -0
  57. package/dist/database/drizzle/schema/documents.d.ts.map +1 -0
  58. package/dist/database/drizzle/schema/documents.js +100 -0
  59. package/dist/database/drizzle/schema/documents.js.map +1 -0
  60. package/dist/database/drizzle/schema/index.d.ts +3084 -0
  61. package/dist/database/drizzle/schema/index.d.ts.map +1 -0
  62. package/dist/database/drizzle/schema/index.js +46 -0
  63. package/dist/database/drizzle/schema/index.js.map +1 -0
  64. package/dist/database/drizzle/schema/memories.d.ts +435 -0
  65. package/dist/database/drizzle/schema/memories.d.ts.map +1 -0
  66. package/dist/database/drizzle/schema/memories.js +73 -0
  67. package/dist/database/drizzle/schema/memories.js.map +1 -0
  68. package/dist/database/drizzle/schema/tasks.d.ts +565 -0
  69. package/dist/database/drizzle/schema/tasks.d.ts.map +1 -0
  70. package/dist/database/drizzle/schema/tasks.js +84 -0
  71. package/dist/database/drizzle/schema/tasks.js.map +1 -0
  72. package/dist/database/health/circuit-breaker.d.ts +81 -0
  73. package/dist/database/health/circuit-breaker.d.ts.map +1 -0
  74. package/dist/database/health/circuit-breaker.js +184 -0
  75. package/dist/database/health/circuit-breaker.js.map +1 -0
  76. package/dist/database/health/health-monitor.d.ts +69 -0
  77. package/dist/database/health/health-monitor.d.ts.map +1 -0
  78. package/dist/database/health/health-monitor.js +174 -0
  79. package/dist/database/health/health-monitor.js.map +1 -0
  80. package/dist/database/health/index.d.ts +27 -0
  81. package/dist/database/health/index.d.ts.map +1 -0
  82. package/dist/database/health/index.js +23 -0
  83. package/dist/database/health/index.js.map +1 -0
  84. package/dist/database/index.d.ts +16 -0
  85. package/dist/database/index.d.ts.map +1 -0
  86. package/dist/database/index.js +41 -0
  87. package/dist/database/index.js.map +1 -0
  88. package/dist/database/migrations/index.d.ts +34 -0
  89. package/dist/database/migrations/index.d.ts.map +1 -0
  90. package/dist/database/migrations/index.js +45 -0
  91. package/dist/database/migrations/index.js.map +1 -0
  92. package/dist/database/migrations/migrator.d.ts +77 -0
  93. package/dist/database/migrations/migrator.d.ts.map +1 -0
  94. package/dist/database/migrations/migrator.js +258 -0
  95. package/dist/database/migrations/migrator.js.map +1 -0
  96. package/dist/database/migrations/versions/001_initial.d.ts +9 -0
  97. package/dist/database/migrations/versions/001_initial.d.ts.map +1 -0
  98. package/dist/database/migrations/versions/001_initial.js +183 -0
  99. package/dist/database/migrations/versions/001_initial.js.map +1 -0
  100. package/dist/database/types.d.ts +255 -0
  101. package/dist/database/types.d.ts.map +1 -0
  102. package/dist/database/types.js +8 -0
  103. package/dist/database/types.js.map +1 -0
  104. package/dist/database/vector/embedding-cache.d.ts +92 -0
  105. package/dist/database/vector/embedding-cache.d.ts.map +1 -0
  106. package/dist/database/vector/embedding-cache.js +185 -0
  107. package/dist/database/vector/embedding-cache.js.map +1 -0
  108. package/dist/database/vector/hnsw-index.d.ts +111 -0
  109. package/dist/database/vector/hnsw-index.d.ts.map +1 -0
  110. package/dist/database/vector/hnsw-index.js +337 -0
  111. package/dist/database/vector/hnsw-index.js.map +1 -0
  112. package/dist/database/vector/index.d.ts +75 -0
  113. package/dist/database/vector/index.d.ts.map +1 -0
  114. package/dist/database/vector/index.js +213 -0
  115. package/dist/database/vector/index.js.map +1 -0
  116. package/dist/database/vector/similarity.d.ts +67 -0
  117. package/dist/database/vector/similarity.d.ts.map +1 -0
  118. package/dist/database/vector/similarity.js +176 -0
  119. package/dist/database/vector/similarity.js.map +1 -0
  120. package/dist/index.d.ts +1 -1
  121. package/dist/index.js +1 -1
  122. package/package.json +6 -3
  123. package/src/cli/index.ts +5 -5
  124. package/src/database/adapters/base-adapter.ts +171 -0
  125. package/src/database/adapters/index.ts +224 -0
  126. package/src/database/adapters/postgres-adapter.ts +285 -0
  127. package/src/database/adapters/sqlite-adapter.ts +420 -0
  128. package/src/database/cache/cache-keys.ts +150 -0
  129. package/src/database/cache/index.ts +44 -0
  130. package/src/database/cache/query-cache.ts +213 -0
  131. package/src/database/client.ts +166 -64
  132. package/src/database/db-config.ts +194 -0
  133. package/src/database/drizzle/index.ts +66 -0
  134. package/src/database/drizzle/schema/audit.ts +127 -0
  135. package/src/database/drizzle/schema/checkpoints.ts +164 -0
  136. package/src/database/drizzle/schema/conversations.ts +138 -0
  137. package/src/database/drizzle/schema/documents.ts +157 -0
  138. package/src/database/drizzle/schema/index.ts +139 -0
  139. package/src/database/drizzle/schema/memories.ts +127 -0
  140. package/src/database/drizzle/schema/tasks.ts +129 -0
  141. package/src/database/health/circuit-breaker.ts +214 -0
  142. package/src/database/health/health-monitor.ts +224 -0
  143. package/src/database/health/index.ts +41 -0
  144. package/src/database/index.ts +157 -0
  145. package/src/database/migrations/index.ts +52 -0
  146. package/src/database/migrations/migrator.ts +325 -0
  147. package/src/database/migrations/versions/001_initial.ts +198 -0
  148. package/src/database/types.ts +324 -0
  149. package/src/database/vector/embedding-cache.ts +234 -0
  150. package/src/database/vector/hnsw-index.ts +452 -0
  151. package/src/database/vector/index.ts +292 -0
  152. package/src/database/vector/similarity.ts +198 -0
  153. package/src/index.ts +1 -1
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Vector Similarity Functions
3
+ *
4
+ * Mathematical utilities for computing vector similarity.
5
+ * Used for in-memory vector search in SQLite mode.
6
+ */
7
+ /**
8
+ * Compute cosine similarity between two vectors
9
+ * Returns a value between -1 and 1, where 1 means identical direction
10
+ */
11
+ export declare function cosineSimilarity(a: number[], b: number[]): number;
12
+ /**
13
+ * Compute Euclidean distance between two vectors
14
+ */
15
+ export declare function euclideanDistance(a: number[], b: number[]): number;
16
+ /**
17
+ * Compute dot product of two vectors
18
+ */
19
+ export declare function dotProduct(a: number[], b: number[]): number;
20
+ /**
21
+ * Compute L2 norm (magnitude) of a vector
22
+ */
23
+ export declare function l2Norm(v: number[]): number;
24
+ /**
25
+ * Normalize a vector to unit length
26
+ */
27
+ export declare function normalize(v: number[]): number[];
28
+ /**
29
+ * Parse embedding from JSON string or array
30
+ */
31
+ export declare function parseEmbedding(value: string | number[] | null | undefined): number[] | null;
32
+ /**
33
+ * Serialize embedding to JSON string
34
+ */
35
+ export declare function serializeEmbedding(embedding: number[]): string;
36
+ /**
37
+ * Compute hash of embedding for caching
38
+ */
39
+ export declare function hashEmbedding(embedding: number[]): string;
40
+ /**
41
+ * Quantize embedding to reduce memory usage
42
+ * Converts float32 to int8 (-128 to 127)
43
+ */
44
+ export declare function quantize(embedding: number[]): Int8Array;
45
+ /**
46
+ * Dequantize int8 back to float
47
+ */
48
+ export declare function dequantize(quantized: Int8Array): number[];
49
+ /**
50
+ * Cosine similarity for quantized vectors (faster)
51
+ */
52
+ export declare function quantizedCosineSimilarity(a: Int8Array, b: Int8Array): number;
53
+ declare const _default: {
54
+ cosineSimilarity: typeof cosineSimilarity;
55
+ euclideanDistance: typeof euclideanDistance;
56
+ dotProduct: typeof dotProduct;
57
+ l2Norm: typeof l2Norm;
58
+ normalize: typeof normalize;
59
+ parseEmbedding: typeof parseEmbedding;
60
+ serializeEmbedding: typeof serializeEmbedding;
61
+ hashEmbedding: typeof hashEmbedding;
62
+ quantize: typeof quantize;
63
+ dequantize: typeof dequantize;
64
+ quantizedCosineSimilarity: typeof quantizedCosineSimilarity;
65
+ };
66
+ export default _default;
67
+ //# sourceMappingURL=similarity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"similarity.d.ts","sourceRoot":"","sources":["../../../src/database/vector/similarity.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAoBjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAYlE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAW3D;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAM1C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAM/C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,GAAG,IAAI,CA0B3F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAE9D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAKzD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,SAAS,CAOvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,EAAE,CAMzD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CAoB5E;;;;;;;;;;;;;;AAED,wBAYE"}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Vector Similarity Functions
3
+ *
4
+ * Mathematical utilities for computing vector similarity.
5
+ * Used for in-memory vector search in SQLite mode.
6
+ */
7
+ /**
8
+ * Compute cosine similarity between two vectors
9
+ * Returns a value between -1 and 1, where 1 means identical direction
10
+ */
11
+ export function cosineSimilarity(a, b) {
12
+ if (a.length !== b.length) {
13
+ throw new Error(`Vector dimension mismatch: ${a.length} vs ${b.length}`);
14
+ }
15
+ let dotProduct = 0;
16
+ let normA = 0;
17
+ let normB = 0;
18
+ for (let i = 0; i < a.length; i++) {
19
+ dotProduct += a[i] * b[i];
20
+ normA += a[i] * a[i];
21
+ normB += b[i] * b[i];
22
+ }
23
+ if (normA === 0 || normB === 0) {
24
+ return 0;
25
+ }
26
+ return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
27
+ }
28
+ /**
29
+ * Compute Euclidean distance between two vectors
30
+ */
31
+ export function euclideanDistance(a, b) {
32
+ if (a.length !== b.length) {
33
+ throw new Error(`Vector dimension mismatch: ${a.length} vs ${b.length}`);
34
+ }
35
+ let sum = 0;
36
+ for (let i = 0; i < a.length; i++) {
37
+ const diff = a[i] - b[i];
38
+ sum += diff * diff;
39
+ }
40
+ return Math.sqrt(sum);
41
+ }
42
+ /**
43
+ * Compute dot product of two vectors
44
+ */
45
+ export function dotProduct(a, b) {
46
+ if (a.length !== b.length) {
47
+ throw new Error(`Vector dimension mismatch: ${a.length} vs ${b.length}`);
48
+ }
49
+ let sum = 0;
50
+ for (let i = 0; i < a.length; i++) {
51
+ sum += a[i] * b[i];
52
+ }
53
+ return sum;
54
+ }
55
+ /**
56
+ * Compute L2 norm (magnitude) of a vector
57
+ */
58
+ export function l2Norm(v) {
59
+ let sum = 0;
60
+ for (let i = 0; i < v.length; i++) {
61
+ sum += v[i] * v[i];
62
+ }
63
+ return Math.sqrt(sum);
64
+ }
65
+ /**
66
+ * Normalize a vector to unit length
67
+ */
68
+ export function normalize(v) {
69
+ const norm = l2Norm(v);
70
+ if (norm === 0) {
71
+ return v.slice();
72
+ }
73
+ return v.map((x) => x / norm);
74
+ }
75
+ /**
76
+ * Parse embedding from JSON string or array
77
+ */
78
+ export function parseEmbedding(value) {
79
+ if (!value)
80
+ return null;
81
+ if (Array.isArray(value)) {
82
+ return value;
83
+ }
84
+ try {
85
+ // Try parsing as JSON array
86
+ const parsed = JSON.parse(value);
87
+ if (Array.isArray(parsed)) {
88
+ return parsed;
89
+ }
90
+ return null;
91
+ }
92
+ catch {
93
+ // Try parsing as PostgreSQL vector format: [0.1, 0.2, ...]
94
+ const match = value.match(/^\[(.+)\]$/);
95
+ if (match) {
96
+ try {
97
+ return match[1].split(',').map((s) => parseFloat(s.trim()));
98
+ }
99
+ catch {
100
+ return null;
101
+ }
102
+ }
103
+ return null;
104
+ }
105
+ }
106
+ /**
107
+ * Serialize embedding to JSON string
108
+ */
109
+ export function serializeEmbedding(embedding) {
110
+ return JSON.stringify(embedding);
111
+ }
112
+ /**
113
+ * Compute hash of embedding for caching
114
+ */
115
+ export function hashEmbedding(embedding) {
116
+ // Simple hash using first and last few elements + length
117
+ const first = embedding.slice(0, 4).map((n) => n.toFixed(4)).join(',');
118
+ const last = embedding.slice(-4).map((n) => n.toFixed(4)).join(',');
119
+ return `${embedding.length}:${first}:${last}`;
120
+ }
121
+ /**
122
+ * Quantize embedding to reduce memory usage
123
+ * Converts float32 to int8 (-128 to 127)
124
+ */
125
+ export function quantize(embedding) {
126
+ const quantized = new Int8Array(embedding.length);
127
+ for (let i = 0; i < embedding.length; i++) {
128
+ // Scale from [-1, 1] to [-128, 127]
129
+ quantized[i] = Math.round(Math.max(-128, Math.min(127, embedding[i] * 127)));
130
+ }
131
+ return quantized;
132
+ }
133
+ /**
134
+ * Dequantize int8 back to float
135
+ */
136
+ export function dequantize(quantized) {
137
+ const result = new Array(quantized.length);
138
+ for (let i = 0; i < quantized.length; i++) {
139
+ result[i] = quantized[i] / 127;
140
+ }
141
+ return result;
142
+ }
143
+ /**
144
+ * Cosine similarity for quantized vectors (faster)
145
+ */
146
+ export function quantizedCosineSimilarity(a, b) {
147
+ if (a.length !== b.length) {
148
+ throw new Error(`Vector dimension mismatch: ${a.length} vs ${b.length}`);
149
+ }
150
+ let dotProduct = 0;
151
+ let normA = 0;
152
+ let normB = 0;
153
+ for (let i = 0; i < a.length; i++) {
154
+ dotProduct += a[i] * b[i];
155
+ normA += a[i] * a[i];
156
+ normB += b[i] * b[i];
157
+ }
158
+ if (normA === 0 || normB === 0) {
159
+ return 0;
160
+ }
161
+ return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
162
+ }
163
+ export default {
164
+ cosineSimilarity,
165
+ euclideanDistance,
166
+ dotProduct,
167
+ l2Norm,
168
+ normalize,
169
+ parseEmbedding,
170
+ serializeEmbedding,
171
+ hashEmbedding,
172
+ quantize,
173
+ dequantize,
174
+ quantizedCosineSimilarity,
175
+ };
176
+ //# sourceMappingURL=similarity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"similarity.js","sourceRoot":"","sources":["../../../src/database/vector/similarity.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -30,7 +30,7 @@ export { config, getDatabaseUrl, getRedisUrl, isProduction, isDevelopment } from
30
30
  export { AVAILABLE_MODELS, getModelConfig, getRecommendedModel } from './config/models.js';
31
31
  export { logger, createLogger } from './utils/logger.js';
32
32
  export * from './utils/errors.js';
33
- export declare const VERSION = "1.0.5";
33
+ export declare const VERSION = "1.0.6";
34
34
  export declare function quickStart(): Promise<{
35
35
  ask: (input: string) => Promise<string>;
36
36
  remember: (content: string) => Promise<string>;
package/dist/index.js CHANGED
@@ -38,7 +38,7 @@ export { AVAILABLE_MODELS, getModelConfig, getRecommendedModel } from './config/
38
38
  export { logger, createLogger } from './utils/logger.js';
39
39
  export * from './utils/errors.js';
40
40
  // Version
41
- export const VERSION = '1.0.5';
41
+ export const VERSION = '1.0.6';
42
42
  // Quick start function
43
43
  import { initDatabase } from './database/client.js';
44
44
  import { runOrchestrator } from './core/orchestrator/graph.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "family-ai-agent",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "description": "Multi-agent AI system with memory and autonomous capabilities",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -50,7 +50,9 @@
50
50
  "jsdom": "^25.0.1",
51
51
  "validator": "^13.12.0",
52
52
  "dockerode": "^4.0.2",
53
- "marked": "^15.0.4"
53
+ "marked": "^15.0.4",
54
+ "sql.js": "^1.11.0",
55
+ "better-sqlite3": "^11.6.0"
54
56
  },
55
57
  "devDependencies": {
56
58
  "@types/node": "^22.10.2",
@@ -65,7 +67,8 @@
65
67
  "prettier": "^3.4.2",
66
68
  "drizzle-kit": "^0.30.1",
67
69
  "@typescript-eslint/eslint-plugin": "^8.18.1",
68
- "@typescript-eslint/parser": "^8.18.1"
70
+ "@typescript-eslint/parser": "^8.18.1",
71
+ "@types/better-sqlite3": "^7.6.11"
69
72
  },
70
73
  "engines": {
71
74
  "node": ">=20.0.0"
package/src/cli/index.ts CHANGED
@@ -320,7 +320,7 @@ async function runQuery(query: string): Promise<void> {
320
320
  program
321
321
  .name('family-ai-agent')
322
322
  .description('Family AI Agent - Your AI Family for All Tasks')
323
- .version('1.0.5');
323
+ .version('1.0.6');
324
324
 
325
325
  // Add config command group
326
326
  program.addCommand(createConfigCommand());
@@ -480,10 +480,7 @@ process.on('unhandledRejection', (error) => {
480
480
  process.exit(1);
481
481
  });
482
482
 
483
- // Parse command line arguments
484
- program.parse();
485
-
486
- // If no command specified, start interactive chat
483
+ // If no command specified, start interactive chat (handle BEFORE parse)
487
484
  if (!process.argv.slice(2).length) {
488
485
  (async () => {
489
486
  try {
@@ -499,4 +496,7 @@ if (!process.argv.slice(2).length) {
499
496
  await closePool();
500
497
  }
501
498
  })();
499
+ } else {
500
+ // Parse command line arguments
501
+ program.parse();
502
502
  }
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Base Database Adapter
3
+ *
4
+ * Abstract base class for database adapters.
5
+ * Provides common functionality and interface contract.
6
+ */
7
+
8
+ import type {
9
+ DatabaseAdapter,
10
+ DatabaseType,
11
+ QueryResult,
12
+ TransactionClient,
13
+ PoolStats,
14
+ } from '../types.js';
15
+ import { createLogger } from '../../utils/logger.js';
16
+ import { MemoryError } from '../../utils/errors.js';
17
+
18
+ const logger = createLogger('DatabaseAdapter');
19
+
20
+ /**
21
+ * Abstract base adapter class
22
+ */
23
+ export abstract class BaseAdapter implements DatabaseAdapter {
24
+ abstract readonly type: DatabaseType;
25
+ protected _isInitialized = false;
26
+
27
+ get isInitialized(): boolean {
28
+ return this._isInitialized;
29
+ }
30
+
31
+ /**
32
+ * Initialize the database connection
33
+ */
34
+ abstract initialize(): Promise<void>;
35
+
36
+ /**
37
+ * Execute a raw SQL query
38
+ */
39
+ abstract query<T extends Record<string, any> = Record<string, any>>(
40
+ sql: string,
41
+ params?: unknown[]
42
+ ): Promise<QueryResult<T>>;
43
+
44
+ /**
45
+ * Execute a transaction
46
+ */
47
+ abstract transaction<T>(
48
+ callback: (client: TransactionClient) => Promise<T>
49
+ ): Promise<T>;
50
+
51
+ /**
52
+ * Check database health
53
+ */
54
+ abstract healthCheck(): Promise<boolean>;
55
+
56
+ /**
57
+ * Get connection pool statistics
58
+ */
59
+ getPoolStats?(): PoolStats;
60
+
61
+ /**
62
+ * Close all connections
63
+ */
64
+ abstract close(): Promise<void>;
65
+
66
+ /**
67
+ * Ensure adapter is initialized before operations
68
+ */
69
+ protected ensureInitialized(): void {
70
+ if (!this._isInitialized) {
71
+ throw new MemoryError('Database adapter not initialized. Call initialize() first.');
72
+ }
73
+ }
74
+
75
+ /**
76
+ * Log query execution
77
+ */
78
+ protected logQuery(sql: string, durationMs: number, rowCount: number | null): void {
79
+ logger.debug('Query executed', {
80
+ database: this.type,
81
+ duration: durationMs,
82
+ rows: rowCount,
83
+ query: sql.slice(0, 100),
84
+ });
85
+ }
86
+
87
+ /**
88
+ * Log query error
89
+ */
90
+ protected logError(sql: string, error: unknown): void {
91
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
92
+ logger.error('Query failed', {
93
+ database: this.type,
94
+ error: errorMessage,
95
+ query: sql.slice(0, 100),
96
+ });
97
+ }
98
+
99
+ /**
100
+ * Convert PostgreSQL parameter placeholders ($1, $2) to SQLite (?)
101
+ */
102
+ protected convertPlaceholders(sql: string): string {
103
+ return sql.replace(/\$\d+/g, '?');
104
+ }
105
+
106
+ /**
107
+ * Convert PostgreSQL-specific syntax to SQLite
108
+ */
109
+ protected convertToSqlite(sql: string): string {
110
+ let converted = this.convertPlaceholders(sql);
111
+
112
+ // Replace NOW() with CURRENT_TIMESTAMP
113
+ converted = converted.replace(/NOW\(\)/gi, 'CURRENT_TIMESTAMP');
114
+
115
+ // Remove ::type casts
116
+ converted = converted.replace(/::[a-zA-Z_]+(\[\])?/g, '');
117
+
118
+ // Replace JSONB with JSON (SQLite uses text)
119
+ converted = converted.replace(/JSONB/gi, 'JSON');
120
+
121
+ // Replace gen_random_uuid() with a placeholder (handled in code)
122
+ converted = converted.replace(/gen_random_uuid\(\)/gi, "lower(hex(randomblob(16)))");
123
+
124
+ return converted;
125
+ }
126
+
127
+ /**
128
+ * Extract RETURNING clause from SQL
129
+ */
130
+ protected extractReturning(sql: string): string | null {
131
+ const match = sql.match(/RETURNING\s+(.+?)$/i);
132
+ return match ? match[1]!.trim() : null;
133
+ }
134
+
135
+ /**
136
+ * Extract table name from INSERT/UPDATE/DELETE
137
+ */
138
+ protected extractTableName(sql: string): string | null {
139
+ const insertMatch = sql.match(/INSERT\s+INTO\s+["']?(\w+)["']?/i);
140
+ if (insertMatch) return insertMatch[1]!;
141
+
142
+ const updateMatch = sql.match(/UPDATE\s+["']?(\w+)["']?/i);
143
+ if (updateMatch) return updateMatch[1]!;
144
+
145
+ const deleteMatch = sql.match(/DELETE\s+FROM\s+["']?(\w+)["']?/i);
146
+ if (deleteMatch) return deleteMatch[1]!;
147
+
148
+ return null;
149
+ }
150
+
151
+ /**
152
+ * Check if SQL is a SELECT query
153
+ */
154
+ protected isSelectQuery(sql: string): boolean {
155
+ return sql.trim().toUpperCase().startsWith('SELECT');
156
+ }
157
+
158
+ /**
159
+ * Check if SQL has RETURNING clause
160
+ */
161
+ protected hasReturning(sql: string): boolean {
162
+ return /RETURNING\s+/i.test(sql);
163
+ }
164
+ }
165
+
166
+ /**
167
+ * Adapter factory function type
168
+ */
169
+ export type AdapterFactory = () => Promise<DatabaseAdapter>;
170
+
171
+ export default BaseAdapter;