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,34 @@
1
+ /**
2
+ * Migration System Exports
3
+ *
4
+ * Central export for the database migration system.
5
+ */
6
+ export { Migrator } from './migrator.js';
7
+ export { migration001Initial } from './versions/001_initial.js';
8
+ import { Migrator } from './migrator.js';
9
+ import type { DatabaseAdapter, Migration } from '../types.js';
10
+ /**
11
+ * All registered migrations in order
12
+ */
13
+ export declare const allMigrations: Migration[];
14
+ /**
15
+ * Create and configure a migrator with all registered migrations
16
+ */
17
+ export declare function createMigrator(adapter: DatabaseAdapter): Migrator;
18
+ /**
19
+ * Run all pending migrations
20
+ */
21
+ export declare function runMigrations(adapter: DatabaseAdapter): Promise<import("../types.js").MigrationResult[]>;
22
+ /**
23
+ * Get current schema version
24
+ */
25
+ export declare function getCurrentVersion(adapter: DatabaseAdapter): Promise<number>;
26
+ declare const _default: {
27
+ Migrator: typeof Migrator;
28
+ allMigrations: Migration[];
29
+ createMigrator: typeof createMigrator;
30
+ runMigrations: typeof runMigrations;
31
+ getCurrentVersion: typeof getCurrentVersion;
32
+ };
33
+ export default _default;
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/database/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,EAEpC,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CAIjE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,eAAe,oDAG3D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAGjF;;;;;;;;AAED,wBAME"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Migration System Exports
3
+ *
4
+ * Central export for the database migration system.
5
+ */
6
+ export { Migrator } from './migrator.js';
7
+ export { migration001Initial } from './versions/001_initial.js';
8
+ import { Migrator } from './migrator.js';
9
+ import { migration001Initial } from './versions/001_initial.js';
10
+ /**
11
+ * All registered migrations in order
12
+ */
13
+ export const allMigrations = [
14
+ migration001Initial,
15
+ ];
16
+ /**
17
+ * Create and configure a migrator with all registered migrations
18
+ */
19
+ export function createMigrator(adapter) {
20
+ const migrator = new Migrator(adapter);
21
+ migrator.registerAll(allMigrations);
22
+ return migrator;
23
+ }
24
+ /**
25
+ * Run all pending migrations
26
+ */
27
+ export async function runMigrations(adapter) {
28
+ const migrator = createMigrator(adapter);
29
+ return migrator.migrate();
30
+ }
31
+ /**
32
+ * Get current schema version
33
+ */
34
+ export async function getCurrentVersion(adapter) {
35
+ const migrator = createMigrator(adapter);
36
+ return migrator.getCurrentVersion();
37
+ }
38
+ export default {
39
+ Migrator,
40
+ allMigrations,
41
+ createMigrator,
42
+ runMigrations,
43
+ getCurrentVersion,
44
+ };
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/database/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGhE;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAgB;IACxC,mBAAmB;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAwB;IACrD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;IACvC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACpC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAwB;IAC1D,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAwB;IAC9D,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC,iBAAiB,EAAE,CAAC;AACtC,CAAC;AAED,eAAe;IACb,QAAQ;IACR,aAAa;IACb,cAAc;IACd,aAAa;IACb,iBAAiB;CAClB,CAAC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Database Migrator
3
+ *
4
+ * Handles automatic schema migrations with version tracking.
5
+ * Supports both PostgreSQL and SQLite.
6
+ */
7
+ import type { DatabaseAdapter, Migration, MigrationResult } from '../types.js';
8
+ /**
9
+ * Schema version record
10
+ */
11
+ interface SchemaVersion {
12
+ version: number;
13
+ name: string;
14
+ applied_at: number | Date;
15
+ checksum: string | null;
16
+ }
17
+ /**
18
+ * Database migrator for schema version management
19
+ */
20
+ export declare class Migrator {
21
+ private migrations;
22
+ private adapter;
23
+ constructor(adapter: DatabaseAdapter);
24
+ /**
25
+ * Register a migration
26
+ */
27
+ register(migration: Migration): void;
28
+ /**
29
+ * Register multiple migrations
30
+ */
31
+ registerAll(migrations: Migration[]): void;
32
+ /**
33
+ * Ensure schema_versions table exists
34
+ */
35
+ private ensureVersionTable;
36
+ /**
37
+ * Get current schema version
38
+ */
39
+ getCurrentVersion(): Promise<number>;
40
+ /**
41
+ * Get all applied migrations
42
+ */
43
+ getAppliedMigrations(): Promise<SchemaVersion[]>;
44
+ /**
45
+ * Get pending migrations
46
+ */
47
+ getPendingMigrations(): Promise<Migration[]>;
48
+ /**
49
+ * Run all pending migrations
50
+ */
51
+ migrate(): Promise<MigrationResult[]>;
52
+ /**
53
+ * Run a single migration
54
+ */
55
+ private runMigration;
56
+ /**
57
+ * Rollback to a specific version
58
+ */
59
+ rollback(targetVersion: number): Promise<MigrationResult[]>;
60
+ /**
61
+ * Run a single rollback
62
+ */
63
+ private runRollback;
64
+ /**
65
+ * Compute checksum for a migration
66
+ */
67
+ private computeChecksum;
68
+ /**
69
+ * Verify migration integrity
70
+ */
71
+ verify(): Promise<{
72
+ valid: boolean;
73
+ issues: string[];
74
+ }>;
75
+ }
76
+ export default Migrator;
77
+ //# sourceMappingURL=migrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrator.d.ts","sourceRoot":"","sources":["../../../src/database/migrations/migrator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAM/E;;GAEG;AACH,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,OAAO,CAAkB;gBAErB,OAAO,EAAE,eAAe;IAIpC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAUpC;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI;IAM1C;;OAEG;YACW,kBAAkB;IAYhC;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAa1C;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAQtD;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAKlD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAwB3C;;OAEG;YACW,YAAY;IA2D1B;;OAEG;IACG,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA6BjE;;OAEG;YACW,WAAW;IAmDzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAuB9D;AAED,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,258 @@
1
+ /**
2
+ * Database Migrator
3
+ *
4
+ * Handles automatic schema migrations with version tracking.
5
+ * Supports both PostgreSQL and SQLite.
6
+ */
7
+ import { createLogger } from '../../utils/logger.js';
8
+ import { MemoryError } from '../../utils/errors.js';
9
+ const logger = createLogger('Migrator');
10
+ /**
11
+ * Database migrator for schema version management
12
+ */
13
+ export class Migrator {
14
+ migrations = [];
15
+ adapter;
16
+ constructor(adapter) {
17
+ this.adapter = adapter;
18
+ }
19
+ /**
20
+ * Register a migration
21
+ */
22
+ register(migration) {
23
+ // Check for duplicate versions
24
+ if (this.migrations.some((m) => m.version === migration.version)) {
25
+ throw new MemoryError(`Duplicate migration version: ${migration.version}`);
26
+ }
27
+ this.migrations.push(migration);
28
+ this.migrations.sort((a, b) => a.version - b.version);
29
+ }
30
+ /**
31
+ * Register multiple migrations
32
+ */
33
+ registerAll(migrations) {
34
+ for (const migration of migrations) {
35
+ this.register(migration);
36
+ }
37
+ }
38
+ /**
39
+ * Ensure schema_versions table exists
40
+ */
41
+ async ensureVersionTable() {
42
+ const sql = `
43
+ CREATE TABLE IF NOT EXISTS schema_versions (
44
+ version INTEGER PRIMARY KEY,
45
+ name TEXT NOT NULL,
46
+ applied_at ${this.adapter.type === 'postgresql' ? 'TIMESTAMP WITH TIME ZONE' : 'INTEGER'} NOT NULL,
47
+ checksum TEXT
48
+ )
49
+ `;
50
+ await this.adapter.query(sql);
51
+ }
52
+ /**
53
+ * Get current schema version
54
+ */
55
+ async getCurrentVersion() {
56
+ try {
57
+ await this.ensureVersionTable();
58
+ const result = await this.adapter.query('SELECT MAX(version) as max_version FROM schema_versions');
59
+ return result.rows[0]?.max_version ?? 0;
60
+ }
61
+ catch (error) {
62
+ logger.debug('Could not get current version, assuming 0', { error });
63
+ return 0;
64
+ }
65
+ }
66
+ /**
67
+ * Get all applied migrations
68
+ */
69
+ async getAppliedMigrations() {
70
+ await this.ensureVersionTable();
71
+ const result = await this.adapter.query('SELECT version, name, applied_at, checksum FROM schema_versions ORDER BY version ASC');
72
+ return result.rows;
73
+ }
74
+ /**
75
+ * Get pending migrations
76
+ */
77
+ async getPendingMigrations() {
78
+ const currentVersion = await this.getCurrentVersion();
79
+ return this.migrations.filter((m) => m.version > currentVersion);
80
+ }
81
+ /**
82
+ * Run all pending migrations
83
+ */
84
+ async migrate() {
85
+ const pending = await this.getPendingMigrations();
86
+ const results = [];
87
+ if (pending.length === 0) {
88
+ logger.debug('No pending migrations');
89
+ return results;
90
+ }
91
+ logger.info('Running migrations', { count: pending.length });
92
+ for (const migration of pending) {
93
+ const result = await this.runMigration(migration);
94
+ results.push(result);
95
+ if (!result.success) {
96
+ logger.error('Migration failed, stopping', { version: migration.version });
97
+ break;
98
+ }
99
+ }
100
+ return results;
101
+ }
102
+ /**
103
+ * Run a single migration
104
+ */
105
+ async runMigration(migration) {
106
+ const start = Date.now();
107
+ logger.info('Running migration', {
108
+ version: migration.version,
109
+ name: migration.name,
110
+ });
111
+ try {
112
+ await this.adapter.transaction(async (client) => {
113
+ // Run the migration
114
+ await migration.up(this.adapter);
115
+ // Record the migration
116
+ const now = this.adapter.type === 'postgresql'
117
+ ? 'NOW()'
118
+ : String(Date.now());
119
+ await this.adapter.query(`INSERT INTO schema_versions (version, name, applied_at, checksum) VALUES ($1, $2, ${this.adapter.type === 'postgresql' ? 'NOW()' : '$3'}, $${this.adapter.type === 'postgresql' ? '3' : '4'})`, this.adapter.type === 'postgresql'
120
+ ? [migration.version, migration.name, this.computeChecksum(migration)]
121
+ : [migration.version, migration.name, Date.now(), this.computeChecksum(migration)]);
122
+ });
123
+ const durationMs = Date.now() - start;
124
+ logger.info('Migration completed', {
125
+ version: migration.version,
126
+ durationMs,
127
+ });
128
+ return {
129
+ version: migration.version,
130
+ name: migration.name,
131
+ success: true,
132
+ durationMs,
133
+ };
134
+ }
135
+ catch (error) {
136
+ const durationMs = Date.now() - start;
137
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
138
+ logger.error('Migration failed', {
139
+ version: migration.version,
140
+ error: errorMessage,
141
+ });
142
+ return {
143
+ version: migration.version,
144
+ name: migration.name,
145
+ success: false,
146
+ error: errorMessage,
147
+ durationMs,
148
+ };
149
+ }
150
+ }
151
+ /**
152
+ * Rollback to a specific version
153
+ */
154
+ async rollback(targetVersion) {
155
+ const currentVersion = await this.getCurrentVersion();
156
+ const results = [];
157
+ if (targetVersion >= currentVersion) {
158
+ logger.debug('Nothing to rollback');
159
+ return results;
160
+ }
161
+ // Get migrations to rollback (in reverse order)
162
+ const toRollback = this.migrations
163
+ .filter((m) => m.version > targetVersion && m.version <= currentVersion)
164
+ .reverse();
165
+ logger.info('Rolling back migrations', { count: toRollback.length });
166
+ for (const migration of toRollback) {
167
+ const result = await this.runRollback(migration);
168
+ results.push(result);
169
+ if (!result.success) {
170
+ logger.error('Rollback failed, stopping', { version: migration.version });
171
+ break;
172
+ }
173
+ }
174
+ return results;
175
+ }
176
+ /**
177
+ * Run a single rollback
178
+ */
179
+ async runRollback(migration) {
180
+ const start = Date.now();
181
+ logger.info('Rolling back migration', {
182
+ version: migration.version,
183
+ name: migration.name,
184
+ });
185
+ try {
186
+ await this.adapter.transaction(async () => {
187
+ // Run the down migration
188
+ await migration.down(this.adapter);
189
+ // Remove the migration record
190
+ await this.adapter.query('DELETE FROM schema_versions WHERE version = $1', [migration.version]);
191
+ });
192
+ const durationMs = Date.now() - start;
193
+ logger.info('Rollback completed', {
194
+ version: migration.version,
195
+ durationMs,
196
+ });
197
+ return {
198
+ version: migration.version,
199
+ name: migration.name,
200
+ success: true,
201
+ durationMs,
202
+ };
203
+ }
204
+ catch (error) {
205
+ const durationMs = Date.now() - start;
206
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
207
+ logger.error('Rollback failed', {
208
+ version: migration.version,
209
+ error: errorMessage,
210
+ });
211
+ return {
212
+ version: migration.version,
213
+ name: migration.name,
214
+ success: false,
215
+ error: errorMessage,
216
+ durationMs,
217
+ };
218
+ }
219
+ }
220
+ /**
221
+ * Compute checksum for a migration
222
+ */
223
+ computeChecksum(migration) {
224
+ // Simple checksum based on function string representation
225
+ const str = migration.up.toString() + migration.down.toString();
226
+ let hash = 0;
227
+ for (let i = 0; i < str.length; i++) {
228
+ const char = str.charCodeAt(i);
229
+ hash = ((hash << 5) - hash) + char;
230
+ hash = hash & hash; // Convert to 32bit integer
231
+ }
232
+ return hash.toString(16);
233
+ }
234
+ /**
235
+ * Verify migration integrity
236
+ */
237
+ async verify() {
238
+ const applied = await this.getAppliedMigrations();
239
+ const issues = [];
240
+ for (const record of applied) {
241
+ const migration = this.migrations.find((m) => m.version === record.version);
242
+ if (!migration) {
243
+ issues.push(`Applied migration v${record.version} not found in registered migrations`);
244
+ continue;
245
+ }
246
+ const currentChecksum = this.computeChecksum(migration);
247
+ if (record.checksum && record.checksum !== currentChecksum) {
248
+ issues.push(`Migration v${record.version} checksum mismatch (code may have changed)`);
249
+ }
250
+ }
251
+ return {
252
+ valid: issues.length === 0,
253
+ issues,
254
+ };
255
+ }
256
+ }
257
+ export default Migrator;
258
+ //# sourceMappingURL=migrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrator.js","sourceRoot":"","sources":["../../../src/database/migrations/migrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Migration 001: Initial Schema
3
+ *
4
+ * Creates all core tables for the Family AI Agent system.
5
+ */
6
+ import type { Migration } from '../../types.js';
7
+ export declare const migration001Initial: Migration;
8
+ export default migration001Initial;
9
+ //# sourceMappingURL=001_initial.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"001_initial.d.ts","sourceRoot":"","sources":["../../../../src/database/migrations/versions/001_initial.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAmB,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEjE,eAAO,MAAM,mBAAmB,EAAE,SA2LjC,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Migration 001: Initial Schema
3
+ *
4
+ * Creates all core tables for the Family AI Agent system.
5
+ */
6
+ export const migration001Initial = {
7
+ version: 1,
8
+ name: 'initial_schema',
9
+ async up(adapter) {
10
+ if (adapter.type === 'postgresql') {
11
+ // Enable pgvector extension
12
+ await adapter.query('CREATE EXTENSION IF NOT EXISTS vector');
13
+ }
14
+ // Note: For SQLite, tables are created in sqlite-adapter.ts initialize()
15
+ // This migration is primarily for PostgreSQL to ensure pgvector is enabled
16
+ if (adapter.type === 'postgresql') {
17
+ // Create conversations table
18
+ await adapter.query(`
19
+ CREATE TABLE IF NOT EXISTS conversations (
20
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
21
+ thread_id TEXT NOT NULL,
22
+ user_id TEXT,
23
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
24
+ updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL
25
+ )
26
+ `);
27
+ await adapter.query('CREATE INDEX IF NOT EXISTS idx_conversations_thread ON conversations(thread_id)');
28
+ await adapter.query('CREATE INDEX IF NOT EXISTS idx_conversations_user ON conversations(user_id)');
29
+ // Create messages table
30
+ await adapter.query(`
31
+ CREATE TABLE IF NOT EXISTS messages (
32
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
33
+ conversation_id UUID NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
34
+ role TEXT NOT NULL,
35
+ content TEXT NOT NULL,
36
+ metadata JSONB DEFAULT '{}' NOT NULL,
37
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL
38
+ )
39
+ `);
40
+ await adapter.query('CREATE INDEX IF NOT EXISTS idx_messages_conversation ON messages(conversation_id)');
41
+ // Create long_term_memories table with pgvector
42
+ await adapter.query(`
43
+ CREATE TABLE IF NOT EXISTS long_term_memories (
44
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
45
+ user_id TEXT,
46
+ memory_type TEXT NOT NULL,
47
+ content TEXT NOT NULL,
48
+ embedding vector(1536) NOT NULL,
49
+ importance REAL DEFAULT 0.5 NOT NULL,
50
+ access_count INTEGER DEFAULT 0 NOT NULL,
51
+ last_accessed TIMESTAMP WITH TIME ZONE,
52
+ metadata JSONB DEFAULT '{}' NOT NULL,
53
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
54
+ updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL
55
+ )
56
+ `);
57
+ await adapter.query('CREATE INDEX IF NOT EXISTS idx_memories_user ON long_term_memories(user_id)');
58
+ await adapter.query('CREATE INDEX IF NOT EXISTS idx_memories_type ON long_term_memories(memory_type)');
59
+ await adapter.query(`
60
+ CREATE INDEX IF NOT EXISTS idx_memories_embedding
61
+ ON long_term_memories USING hnsw (embedding vector_cosine_ops)
62
+ `);
63
+ // Create documents table
64
+ await adapter.query(`
65
+ CREATE TABLE IF NOT EXISTS documents (
66
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
67
+ user_id TEXT,
68
+ filename TEXT NOT NULL,
69
+ file_type TEXT,
70
+ file_size INTEGER,
71
+ content TEXT,
72
+ metadata JSONB DEFAULT '{}' NOT NULL,
73
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL
74
+ )
75
+ `);
76
+ await adapter.query('CREATE INDEX IF NOT EXISTS idx_documents_user ON documents(user_id)');
77
+ // Create document_chunks table with pgvector
78
+ await adapter.query(`
79
+ CREATE TABLE IF NOT EXISTS document_chunks (
80
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
81
+ document_id UUID NOT NULL REFERENCES documents(id) ON DELETE CASCADE,
82
+ chunk_index INTEGER NOT NULL,
83
+ content TEXT NOT NULL,
84
+ embedding vector(1536) NOT NULL,
85
+ metadata JSONB DEFAULT '{}' NOT NULL,
86
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL
87
+ )
88
+ `);
89
+ await adapter.query('CREATE INDEX IF NOT EXISTS idx_chunks_document ON document_chunks(document_id)');
90
+ await adapter.query(`
91
+ CREATE INDEX IF NOT EXISTS idx_chunks_embedding
92
+ ON document_chunks USING hnsw (embedding vector_cosine_ops)
93
+ `);
94
+ // Create checkpoints table
95
+ await adapter.query(`
96
+ CREATE TABLE IF NOT EXISTS checkpoints (
97
+ thread_id TEXT NOT NULL,
98
+ checkpoint_ns TEXT NOT NULL DEFAULT '',
99
+ checkpoint_id TEXT NOT NULL,
100
+ parent_checkpoint_id TEXT,
101
+ type TEXT,
102
+ checkpoint JSONB NOT NULL,
103
+ metadata JSONB DEFAULT '{}' NOT NULL,
104
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
105
+ PRIMARY KEY (thread_id, checkpoint_ns, checkpoint_id)
106
+ )
107
+ `);
108
+ // Create checkpoint_writes table
109
+ await adapter.query(`
110
+ CREATE TABLE IF NOT EXISTS checkpoint_writes (
111
+ thread_id TEXT NOT NULL,
112
+ checkpoint_ns TEXT NOT NULL DEFAULT '',
113
+ checkpoint_id TEXT NOT NULL,
114
+ task_id TEXT NOT NULL,
115
+ idx INTEGER NOT NULL,
116
+ channel TEXT NOT NULL,
117
+ type TEXT,
118
+ value JSONB,
119
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
120
+ PRIMARY KEY (thread_id, checkpoint_ns, checkpoint_id, task_id, idx)
121
+ )
122
+ `);
123
+ // Create audit_logs table
124
+ await adapter.query(`
125
+ CREATE TABLE IF NOT EXISTS audit_logs (
126
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
127
+ user_id TEXT,
128
+ agent_id TEXT,
129
+ action_type TEXT NOT NULL,
130
+ action_details JSONB DEFAULT '{}' NOT NULL,
131
+ input_hash TEXT,
132
+ output_hash TEXT,
133
+ status TEXT DEFAULT 'success' NOT NULL,
134
+ error_message TEXT,
135
+ execution_time_ms INTEGER,
136
+ ip_address TEXT,
137
+ user_agent TEXT,
138
+ success BOOLEAN DEFAULT true NOT NULL,
139
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL
140
+ )
141
+ `);
142
+ await adapter.query('CREATE INDEX IF NOT EXISTS idx_audit_user ON audit_logs(user_id)');
143
+ await adapter.query('CREATE INDEX IF NOT EXISTS idx_audit_created ON audit_logs(created_at)');
144
+ // Create tasks table
145
+ await adapter.query(`
146
+ CREATE TABLE IF NOT EXISTS tasks (
147
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
148
+ user_id TEXT,
149
+ task_type TEXT NOT NULL,
150
+ priority INTEGER DEFAULT 0 NOT NULL,
151
+ status TEXT DEFAULT 'pending' NOT NULL,
152
+ payload JSONB DEFAULT '{}' NOT NULL,
153
+ result JSONB,
154
+ error_message TEXT,
155
+ scheduled_at TIMESTAMP WITH TIME ZONE,
156
+ started_at TIMESTAMP WITH TIME ZONE,
157
+ completed_at TIMESTAMP WITH TIME ZONE,
158
+ retry_count INTEGER DEFAULT 0 NOT NULL,
159
+ max_retries INTEGER DEFAULT 3 NOT NULL,
160
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
161
+ updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL
162
+ )
163
+ `);
164
+ await adapter.query('CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status)');
165
+ await adapter.query('CREATE INDEX IF NOT EXISTS idx_tasks_user ON tasks(user_id)');
166
+ }
167
+ },
168
+ async down(adapter) {
169
+ if (adapter.type === 'postgresql') {
170
+ await adapter.query('DROP TABLE IF EXISTS checkpoint_writes CASCADE');
171
+ await adapter.query('DROP TABLE IF EXISTS checkpoints CASCADE');
172
+ await adapter.query('DROP TABLE IF EXISTS document_chunks CASCADE');
173
+ await adapter.query('DROP TABLE IF EXISTS documents CASCADE');
174
+ await adapter.query('DROP TABLE IF EXISTS long_term_memories CASCADE');
175
+ await adapter.query('DROP TABLE IF EXISTS messages CASCADE');
176
+ await adapter.query('DROP TABLE IF EXISTS conversations CASCADE');
177
+ await adapter.query('DROP TABLE IF EXISTS audit_logs CASCADE');
178
+ await adapter.query('DROP TABLE IF EXISTS tasks CASCADE');
179
+ }
180
+ },
181
+ };
182
+ export default migration001Initial;
183
+ //# sourceMappingURL=001_initial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"001_initial.js","sourceRoot":"","sources":["../../../../src/database/migrations/versions/001_initial.ts"],"names":[],"mappings":"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"}