memento-mcp-server 1.7.5 → 1.9.0

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 (116) hide show
  1. package/README.md +1 -0
  2. package/dist/config/environment.d.ts.map +1 -1
  3. package/dist/config/environment.js +2 -1
  4. package/dist/config/environment.js.map +1 -1
  5. package/dist/config/index.d.ts.map +1 -1
  6. package/dist/config/index.js +5 -2
  7. package/dist/config/index.js.map +1 -1
  8. package/dist/database/init.d.ts.map +1 -1
  9. package/dist/database/init.js +159 -7
  10. package/dist/database/init.js.map +1 -1
  11. package/dist/database/migration/backup-manager.d.ts +55 -0
  12. package/dist/database/migration/backup-manager.d.ts.map +1 -0
  13. package/dist/database/migration/backup-manager.js +181 -0
  14. package/dist/database/migration/backup-manager.js.map +1 -0
  15. package/dist/database/migration/dependency-validator.d.ts +62 -0
  16. package/dist/database/migration/dependency-validator.d.ts.map +1 -0
  17. package/dist/database/migration/dependency-validator.js +260 -0
  18. package/dist/database/migration/dependency-validator.js.map +1 -0
  19. package/dist/database/migration/migration-detector.d.ts +67 -0
  20. package/dist/database/migration/migration-detector.d.ts.map +1 -0
  21. package/dist/database/migration/migration-detector.js +129 -0
  22. package/dist/database/migration/migration-detector.js.map +1 -0
  23. package/dist/database/migration/migration-logger.d.ts +82 -0
  24. package/dist/database/migration/migration-logger.d.ts.map +1 -0
  25. package/dist/database/migration/migration-logger.js +168 -0
  26. package/dist/database/migration/migration-logger.js.map +1 -0
  27. package/dist/database/migration/migration-runner.d.ts +45 -0
  28. package/dist/database/migration/migration-runner.d.ts.map +1 -0
  29. package/dist/database/migration/migration-runner.js +194 -0
  30. package/dist/database/migration/migration-runner.js.map +1 -0
  31. package/dist/database/migration/migrations/002-mirix-schema-expansion.d.ts +55 -0
  32. package/dist/database/migration/migrations/002-mirix-schema-expansion.d.ts.map +1 -0
  33. package/dist/database/migration/migrations/002-mirix-schema-expansion.js +154 -0
  34. package/dist/database/migration/migrations/002-mirix-schema-expansion.js.map +1 -0
  35. package/dist/database/migration/schema-version-manager.d.ts +43 -0
  36. package/dist/database/migration/schema-version-manager.d.ts.map +1 -0
  37. package/dist/database/migration/schema-version-manager.js +146 -0
  38. package/dist/database/migration/schema-version-manager.js.map +1 -0
  39. package/dist/database/migration/types.d.ts +127 -0
  40. package/dist/database/migration/types.d.ts.map +1 -0
  41. package/dist/database/migration/types.js +5 -0
  42. package/dist/database/migration/types.js.map +1 -0
  43. package/dist/database/schema.sql +69 -1
  44. package/dist/npm-client/memento-client.d.ts.map +1 -1
  45. package/dist/npm-client/memento-client.js +39 -8
  46. package/dist/npm-client/memento-client.js.map +1 -1
  47. package/dist/npm-client/types.d.ts +16 -2
  48. package/dist/npm-client/types.d.ts.map +1 -1
  49. package/dist/npm-client/types.js.map +1 -1
  50. package/dist/npm-client/utils.d.ts.map +1 -1
  51. package/dist/npm-client/utils.js +44 -5
  52. package/dist/npm-client/utils.js.map +1 -1
  53. package/dist/repositories/core-memory-repository.d.ts +81 -0
  54. package/dist/repositories/core-memory-repository.d.ts.map +1 -0
  55. package/dist/repositories/core-memory-repository.js +263 -0
  56. package/dist/repositories/core-memory-repository.js.map +1 -0
  57. package/dist/repositories/knowledge-vault-repository.d.ts +102 -0
  58. package/dist/repositories/knowledge-vault-repository.d.ts.map +1 -0
  59. package/dist/repositories/knowledge-vault-repository.js +395 -0
  60. package/dist/repositories/knowledge-vault-repository.js.map +1 -0
  61. package/dist/server/http-server.d.ts.map +1 -1
  62. package/dist/server/http-server.js +66 -1
  63. package/dist/server/http-server.js.map +1 -1
  64. package/dist/server/index.d.ts.map +1 -1
  65. package/dist/server/index.js +86 -1
  66. package/dist/server/index.js.map +1 -1
  67. package/dist/services/cache-service.d.ts.map +1 -1
  68. package/dist/services/cache-service.js +5 -2
  69. package/dist/services/cache-service.js.map +1 -1
  70. package/dist/services/core-memory-cache-service.d.ts +80 -0
  71. package/dist/services/core-memory-cache-service.d.ts.map +1 -0
  72. package/dist/services/core-memory-cache-service.js +122 -0
  73. package/dist/services/core-memory-cache-service.js.map +1 -0
  74. package/dist/services/core-memory-service.d.ts +117 -0
  75. package/dist/services/core-memory-service.d.ts.map +1 -0
  76. package/dist/services/core-memory-service.js +247 -0
  77. package/dist/services/core-memory-service.js.map +1 -0
  78. package/dist/services/knowledge-vault-service.d.ts +114 -0
  79. package/dist/services/knowledge-vault-service.d.ts.map +1 -0
  80. package/dist/services/knowledge-vault-service.js +233 -0
  81. package/dist/services/knowledge-vault-service.js.map +1 -0
  82. package/dist/services/memory-neighbor-service.d.ts +81 -0
  83. package/dist/services/memory-neighbor-service.d.ts.map +1 -0
  84. package/dist/services/memory-neighbor-service.js +295 -0
  85. package/dist/services/memory-neighbor-service.js.map +1 -0
  86. package/dist/tools/get-memory-neighbors-tool.d.ts +26 -0
  87. package/dist/tools/get-memory-neighbors-tool.d.ts.map +1 -0
  88. package/dist/tools/get-memory-neighbors-tool.js +125 -0
  89. package/dist/tools/get-memory-neighbors-tool.js.map +1 -0
  90. package/dist/tools/index.d.ts +2 -1
  91. package/dist/tools/index.d.ts.map +1 -1
  92. package/dist/tools/index.js +4 -2
  93. package/dist/tools/index.js.map +1 -1
  94. package/dist/tools/memory-injection-prompt.d.ts.map +1 -1
  95. package/dist/tools/memory-injection-prompt.js +28 -4
  96. package/dist/tools/memory-injection-prompt.js.map +1 -1
  97. package/dist/tools/recall-tool.d.ts.map +1 -1
  98. package/dist/tools/recall-tool.js +292 -82
  99. package/dist/tools/recall-tool.js.map +1 -1
  100. package/dist/tools/remember-tool.d.ts.map +1 -1
  101. package/dist/tools/remember-tool.js +293 -40
  102. package/dist/tools/remember-tool.js.map +1 -1
  103. package/dist/tools/types.d.ts +9 -2
  104. package/dist/tools/types.d.ts.map +1 -1
  105. package/dist/tools/types.js +11 -2
  106. package/dist/tools/types.js.map +1 -1
  107. package/dist/types/index.d.ts +20 -3
  108. package/dist/types/index.d.ts.map +1 -1
  109. package/dist/types/index.js +7 -1
  110. package/dist/types/index.js.map +1 -1
  111. package/dist/utils/type-param-validator.d.ts +31 -0
  112. package/dist/utils/type-param-validator.d.ts.map +1 -0
  113. package/dist/utils/type-param-validator.js +76 -0
  114. package/dist/utils/type-param-validator.js.map +1 -0
  115. package/package.json +1 -1
  116. package/src/database/schema.sql +69 -1
@@ -0,0 +1,168 @@
1
+ /**
2
+ * 마이그레이션 로깅 시스템
3
+ *
4
+ * 마이그레이션 실행 과정을 로그 파일에 기록합니다.
5
+ */
6
+ import fs from 'fs';
7
+ import { join, dirname } from 'path';
8
+ import { mementoConfig } from '../../config/index.js';
9
+ /**
10
+ * 로그 레벨
11
+ */
12
+ export var LogLevel;
13
+ (function (LogLevel) {
14
+ LogLevel["INFO"] = "INFO";
15
+ LogLevel["WARN"] = "WARN";
16
+ LogLevel["ERROR"] = "ERROR";
17
+ LogLevel["DEBUG"] = "DEBUG";
18
+ })(LogLevel || (LogLevel = {}));
19
+ /**
20
+ * 마이그레이션 로거
21
+ */
22
+ export class MigrationLogger {
23
+ logDir;
24
+ logFile = null;
25
+ entries = [];
26
+ constructor(logDir) {
27
+ // 기본 로그 디렉토리: data/logs
28
+ const dbDir = dirname(mementoConfig.dbPath);
29
+ this.logDir = logDir || join(dbDir, 'logs');
30
+ this.ensureLogDirectory();
31
+ }
32
+ /**
33
+ * 로그 디렉토리 생성
34
+ */
35
+ ensureLogDirectory() {
36
+ try {
37
+ if (!fs.existsSync(this.logDir)) {
38
+ fs.mkdirSync(this.logDir, { recursive: true });
39
+ }
40
+ }
41
+ catch (error) {
42
+ console.error('❌ 로그 디렉토리 생성 실패:', error);
43
+ throw error;
44
+ }
45
+ }
46
+ /**
47
+ * 로그 파일 초기화
48
+ */
49
+ initializeLogFile(migrationVersion) {
50
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
51
+ const fileName = `migration_${migrationVersion}_${timestamp}.log`;
52
+ this.logFile = join(this.logDir, fileName);
53
+ this.entries = [];
54
+ // 로그 파일 헤더 작성
55
+ this.writeToFile(`=== 마이그레이션 로그 시작 ===\n`);
56
+ this.writeToFile(`마이그레이션 버전: ${migrationVersion}\n`);
57
+ this.writeToFile(`시작 시간: ${new Date().toISOString()}\n`);
58
+ this.writeToFile(`데이터베이스 경로: ${mementoConfig.dbPath}\n`);
59
+ this.writeToFile(`================================\n\n`);
60
+ }
61
+ /**
62
+ * 로그 기록
63
+ */
64
+ log(level, message, data) {
65
+ const entry = {
66
+ timestamp: new Date(),
67
+ level,
68
+ message,
69
+ data
70
+ };
71
+ this.entries.push(entry);
72
+ // 콘솔에도 출력
73
+ const logMessage = `[${entry.timestamp.toISOString()}] [${level}] ${message}`;
74
+ if (level === LogLevel.ERROR) {
75
+ console.error(logMessage, data || '');
76
+ }
77
+ else if (level === LogLevel.WARN) {
78
+ console.warn(logMessage, data || '');
79
+ }
80
+ else {
81
+ console.log(logMessage, data || '');
82
+ }
83
+ // 파일에 기록
84
+ if (this.logFile) {
85
+ const fileMessage = `${logMessage}${data ? ` ${JSON.stringify(data, null, 2)}` : ''}\n`;
86
+ this.writeToFile(fileMessage);
87
+ }
88
+ }
89
+ /**
90
+ * INFO 레벨 로그
91
+ */
92
+ info(message, data) {
93
+ this.log(LogLevel.INFO, message, data);
94
+ }
95
+ /**
96
+ * WARN 레벨 로그
97
+ */
98
+ warn(message, data) {
99
+ this.log(LogLevel.WARN, message, data);
100
+ }
101
+ /**
102
+ * ERROR 레벨 로그
103
+ */
104
+ error(message, data) {
105
+ this.log(LogLevel.ERROR, message, data);
106
+ }
107
+ /**
108
+ * DEBUG 레벨 로그
109
+ */
110
+ debug(message, data) {
111
+ this.log(LogLevel.DEBUG, message, data);
112
+ }
113
+ /**
114
+ * 마이그레이션 결과 기록
115
+ */
116
+ logMigrationResult(result) {
117
+ this.writeToFile(`\n=== 마이그레이션 결과 ===\n`);
118
+ this.writeToFile(`버전: ${result.version}\n`);
119
+ this.writeToFile(`이름: ${result.name}\n`);
120
+ this.writeToFile(`성공 여부: ${result.success ? '성공' : '실패'}\n`);
121
+ this.writeToFile(`시작 시간: ${result.startTime.toISOString()}\n`);
122
+ if (result.endTime) {
123
+ const duration = result.endTime.getTime() - result.startTime.getTime();
124
+ this.writeToFile(`종료 시간: ${result.endTime.toISOString()}\n`);
125
+ this.writeToFile(`소요 시간: ${duration}ms\n`);
126
+ }
127
+ if (result.error) {
128
+ this.writeToFile(`에러: ${result.error}\n`);
129
+ }
130
+ if (result.rollbackSuccess !== undefined) {
131
+ this.writeToFile(`롤백 성공 여부: ${result.rollbackSuccess ? '성공' : '실패'}\n`);
132
+ }
133
+ this.writeToFile(`========================\n\n`);
134
+ }
135
+ /**
136
+ * 로그 파일에 쓰기
137
+ */
138
+ writeToFile(content) {
139
+ if (!this.logFile) {
140
+ return;
141
+ }
142
+ try {
143
+ fs.appendFileSync(this.logFile, content, 'utf-8');
144
+ }
145
+ catch (error) {
146
+ console.error('❌ 로그 파일 쓰기 실패:', error);
147
+ }
148
+ }
149
+ /**
150
+ * 로그 파일 경로 반환
151
+ */
152
+ getLogFile() {
153
+ return this.logFile;
154
+ }
155
+ /**
156
+ * 로그 엔트리 조회
157
+ */
158
+ getEntries() {
159
+ return [...this.entries];
160
+ }
161
+ /**
162
+ * 로그 디렉토리 경로 반환
163
+ */
164
+ getLogDirectory() {
165
+ return this.logDir;
166
+ }
167
+ }
168
+ //# sourceMappingURL=migration-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-logger.js","sourceRoot":"","sources":["../../../src/database/migration/migration-logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * 마이그레이션 실행 엔진
3
+ *
4
+ * 마이그레이션을 안전하게 실행하고, 실패 시 롤백을 수행합니다.
5
+ */
6
+ import type Database from 'better-sqlite3';
7
+ import type { Migration, MigrationResult, MigrationOptions } from './types.js';
8
+ import { BackupManager } from './backup-manager.js';
9
+ import { SchemaVersionManager } from './schema-version-manager.js';
10
+ import { MigrationLogger } from './migration-logger.js';
11
+ /**
12
+ * 마이그레이션 실행기
13
+ */
14
+ export declare class MigrationRunner {
15
+ private db;
16
+ private backupManager;
17
+ private versionManager;
18
+ private logger;
19
+ constructor(db: Database.Database, logger?: MigrationLogger);
20
+ /**
21
+ * 마이그레이션 실행
22
+ */
23
+ runMigration(migration: Migration, options?: MigrationOptions): Promise<MigrationResult>;
24
+ /**
25
+ * 마이그레이션 롤백
26
+ */
27
+ rollbackMigration(migration: Migration, backupPath: string): Promise<void>;
28
+ /**
29
+ * 여러 마이그레이션 순차 실행
30
+ */
31
+ runMigrations(migrations: Migration[], options?: MigrationOptions): Promise<MigrationResult[]>;
32
+ /**
33
+ * 마이그레이션 체크섬 계산
34
+ */
35
+ private calculateChecksum;
36
+ /**
37
+ * 백업 매니저 반환
38
+ */
39
+ getBackupManager(): BackupManager;
40
+ /**
41
+ * 버전 매니저 반환
42
+ */
43
+ getVersionManager(): SchemaVersionManager;
44
+ }
45
+ //# sourceMappingURL=migration-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-runner.d.ts","sourceRoot":"","sources":["../../../src/database/migration/migration-runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAY,MAAM,uBAAuB,CAAC;AAIlE;;GAEG;AACH,qBAAa,eAAe;IAKd,OAAO,CAAC,EAAE;IAJtB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,MAAM,CAAkB;gBAEZ,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,eAAe;IAMnE;;OAEG;IACG,YAAY,CAChB,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC;IA8H3B;;OAEG;IACG,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBhF;;OAEG;IACG,aAAa,CACjB,UAAU,EAAE,SAAS,EAAE,EACvB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,EAAE,CAAC;IAiB7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,gBAAgB,IAAI,aAAa;IAIjC;;OAEG;IACH,iBAAiB,IAAI,oBAAoB;CAG1C"}
@@ -0,0 +1,194 @@
1
+ /**
2
+ * 마이그레이션 실행 엔진
3
+ *
4
+ * 마이그레이션을 안전하게 실행하고, 실패 시 롤백을 수행합니다.
5
+ */
6
+ import { BackupManager } from './backup-manager.js';
7
+ import { SchemaVersionManager } from './schema-version-manager.js';
8
+ import { DependencyValidator } from './dependency-validator.js';
9
+ import { MigrationLogger, LogLevel } from './migration-logger.js';
10
+ import { createHash } from 'crypto';
11
+ import { readFileSync } from 'fs';
12
+ /**
13
+ * 마이그레이션 실행기
14
+ */
15
+ export class MigrationRunner {
16
+ db;
17
+ backupManager;
18
+ versionManager;
19
+ logger;
20
+ constructor(db, logger) {
21
+ this.db = db;
22
+ this.backupManager = new BackupManager();
23
+ this.versionManager = new SchemaVersionManager(db);
24
+ this.logger = logger || new MigrationLogger();
25
+ }
26
+ /**
27
+ * 마이그레이션 실행
28
+ */
29
+ async runMigration(migration, options = {}) {
30
+ const { createBackup = true, autoRollback = true, validate = true } = options;
31
+ const result = {
32
+ version: migration.version,
33
+ name: migration.name,
34
+ success: false,
35
+ startTime: new Date()
36
+ };
37
+ let backupPath = null;
38
+ // 로그 파일 초기화
39
+ this.logger.initializeLogFile(migration.version);
40
+ try {
41
+ this.logger.info(`마이그레이션 시작: ${migration.name} (v${migration.version})`);
42
+ console.log(`🚀 마이그레이션 시작: ${migration.name} (v${migration.version})`);
43
+ // 1. 마이그레이션 전 검증
44
+ if (validate) {
45
+ this.logger.info('마이그레이션 전 검증 시작');
46
+ console.log('🔍 마이그레이션 전 검증 중...');
47
+ await migration.validateBefore(this.db);
48
+ this.logger.info('마이그레이션 전 검증 완료');
49
+ console.log('✅ 마이그레이션 전 검증 완료');
50
+ }
51
+ // 2. 백업 생성
52
+ if (createBackup) {
53
+ this.logger.info('백업 생성 시작');
54
+ console.log('💾 백업 생성 중...');
55
+ const backup = await this.backupManager.createBackup(this.db, migration.version);
56
+ backupPath = backup.backupPath;
57
+ this.logger.info(`백업 생성 완료: ${backupPath}`, { size: backup.size });
58
+ console.log(`✅ 백업 생성 완료: ${backupPath}`);
59
+ }
60
+ // 3. 트랜잭션 시작
61
+ this.db.exec('BEGIN TRANSACTION');
62
+ try {
63
+ // 4. 마이그레이션 실행
64
+ this.logger.info('마이그레이션 실행 시작');
65
+ console.log('📝 마이그레이션 실행 중...');
66
+ await migration.up(this.db);
67
+ this.logger.info('마이그레이션 실행 완료');
68
+ console.log('✅ 마이그레이션 실행 완료');
69
+ // 5. 마이그레이션 후 검증
70
+ if (validate) {
71
+ this.logger.info('마이그레이션 후 검증 시작');
72
+ console.log('🔍 마이그레이션 후 검증 중...');
73
+ await migration.validateAfter(this.db);
74
+ this.logger.info('마이그레이션 후 검증 완료');
75
+ console.log('✅ 마이그레이션 후 검증 완료');
76
+ }
77
+ // 6. 스키마 버전 기록
78
+ const checksum = this.calculateChecksum(migration);
79
+ this.logger.info('스키마 버전 기록 시작');
80
+ await this.versionManager.recordVersion({
81
+ version: migration.version,
82
+ appliedAt: new Date(),
83
+ migrationName: migration.name,
84
+ checksum,
85
+ appliedBy: 'system',
86
+ description: migration.description
87
+ });
88
+ this.logger.info('스키마 버전 기록 완료');
89
+ // 7. 트랜잭션 커밋
90
+ this.db.exec('COMMIT');
91
+ this.logger.info('트랜잭션 커밋 완료');
92
+ console.log('✅ 트랜잭션 커밋 완료');
93
+ result.success = true;
94
+ result.endTime = new Date();
95
+ this.logger.logMigrationResult(result);
96
+ console.log(`🎉 마이그레이션 성공: ${migration.name} (v${migration.version})`);
97
+ return result;
98
+ }
99
+ catch (migrationError) {
100
+ // 마이그레이션 실패 시 롤백
101
+ this.logger.error('마이그레이션 실행 실패', migrationError);
102
+ console.error('❌ 마이그레이션 실행 실패:', migrationError);
103
+ this.db.exec('ROLLBACK');
104
+ this.logger.info('트랜잭션 롤백 완료');
105
+ console.log('↩️ 트랜잭션 롤백 완료');
106
+ result.error = migrationError instanceof Error
107
+ ? migrationError.message
108
+ : String(migrationError);
109
+ // 자동 롤백 시도
110
+ if (autoRollback && backupPath) {
111
+ try {
112
+ this.logger.info('자동 롤백 시도 시작');
113
+ console.log('🔄 자동 롤백 시도 중...');
114
+ await this.rollbackMigration(migration, backupPath);
115
+ result.rollbackSuccess = true;
116
+ this.logger.info('자동 롤백 성공');
117
+ console.log('✅ 자동 롤백 성공');
118
+ }
119
+ catch (rollbackError) {
120
+ result.rollbackSuccess = false;
121
+ this.logger.error('자동 롤백 실패', rollbackError);
122
+ console.error('❌ 자동 롤백 실패:', rollbackError);
123
+ console.error('⚠️ 수동 복구가 필요합니다. 백업 파일:', backupPath);
124
+ }
125
+ }
126
+ result.endTime = new Date();
127
+ this.logger.logMigrationResult(result);
128
+ return result;
129
+ }
130
+ }
131
+ catch (error) {
132
+ result.error = error instanceof Error ? error.message : String(error);
133
+ result.endTime = new Date();
134
+ return result;
135
+ }
136
+ }
137
+ /**
138
+ * 마이그레이션 롤백
139
+ */
140
+ async rollbackMigration(migration, backupPath) {
141
+ try {
142
+ console.log(`↩️ 마이그레이션 롤백 시작: ${migration.name} (v${migration.version})`);
143
+ // 1. 롤백 실행
144
+ await migration.down(this.db);
145
+ // 2. 스키마 버전 삭제
146
+ await this.versionManager.removeVersion(migration.version);
147
+ // 3. 백업 복원 (필요한 경우)
148
+ // 주의: down()이 완전히 롤백하지 못한 경우에만 백업 복원
149
+ // 일반적으로는 down()만으로 충분하므로 백업 복원은 선택적
150
+ console.log(`✅ 마이그레이션 롤백 완료: ${migration.name} (v${migration.version})`);
151
+ }
152
+ catch (error) {
153
+ console.error('❌ 마이그레이션 롤백 실패:', error);
154
+ throw error;
155
+ }
156
+ }
157
+ /**
158
+ * 여러 마이그레이션 순차 실행
159
+ */
160
+ async runMigrations(migrations, options = {}) {
161
+ const results = [];
162
+ for (const migration of migrations) {
163
+ const result = await this.runMigration(migration, options);
164
+ results.push(result);
165
+ // 실패한 마이그레이션이 있고 autoRollback이 true인 경우 중단
166
+ if (!result.success && options.autoRollback) {
167
+ console.error(`❌ 마이그레이션 실패로 인해 중단: ${migration.name} (v${migration.version})`);
168
+ break;
169
+ }
170
+ }
171
+ return results;
172
+ }
173
+ /**
174
+ * 마이그레이션 체크섬 계산
175
+ */
176
+ calculateChecksum(migration) {
177
+ // 마이그레이션의 버전, 이름, 설명을 기반으로 체크섬 생성
178
+ const content = `${migration.version}:${migration.name}:${migration.description || ''}`;
179
+ return createHash('sha256').update(content).digest('hex');
180
+ }
181
+ /**
182
+ * 백업 매니저 반환
183
+ */
184
+ getBackupManager() {
185
+ return this.backupManager;
186
+ }
187
+ /**
188
+ * 버전 매니저 반환
189
+ */
190
+ getVersionManager() {
191
+ return this.versionManager;
192
+ }
193
+ }
194
+ //# sourceMappingURL=migration-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-runner.js","sourceRoot":"","sources":["../../../src/database/migration/migration-runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAElC;;GAEG;AACH,MAAM,OAAO,eAAe;IAKN;IAJZ,aAAa,CAAgB;IAC7B,cAAc,CAAuB;IACrC,MAAM,CAAkB;IAEhC,YAAoB,EAAqB,EAAE,MAAwB;QAA/C,OAAE,GAAF,EAAE,CAAmB;QACvC,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,IAAI,oBAAoB,CAAC,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAChB,SAAoB,EACpB,UAA4B,EAAE;QAE9B,MAAM,EACJ,YAAY,GAAG,IAAI,EACnB,YAAY,GAAG,IAAI,EACnB,QAAQ,GAAG,IAAI,EAChB,GAAG,OAAO,CAAC;QAEZ,MAAM,MAAM,GAAoB;YAC9B,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QAEF,IAAI,UAAU,GAAkB,IAAI,CAAC;QAErC,YAAY;QACZ,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAEjD,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,SAAS,CAAC,IAAI,MAAM,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,iBAAiB,SAAS,CAAC,IAAI,MAAM,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC;YAEvE,iBAAiB;YACjB,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;gBACnC,MAAM,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAClC,CAAC;YAED,WAAW;YACX,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;gBACjF,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;gBAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBACnE,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,EAAE,CAAC,CAAC;YAC3C,CAAC;YAED,aAAa;YACb,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAElC,IAAI,CAAC;gBACH,eAAe;gBACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;gBACjC,MAAM,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAE9B,iBAAiB;gBACjB,IAAI,QAAQ,EAAE,CAAC;oBACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBACnC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;oBACnC,MAAM,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBACnC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBAClC,CAAC;gBAED,eAAe;gBACf,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;gBACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACjC,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;oBACtC,OAAO,EAAE,SAAS,CAAC,OAAO;oBAC1B,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,aAAa,EAAE,SAAS,CAAC,IAAI;oBAC7B,QAAQ;oBACR,SAAS,EAAE,QAAQ;oBACnB,WAAW,EAAE,SAAS,CAAC,WAAW;iBACnC,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAEjC,aAAa;gBACb,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBAE5B,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;gBACtB,MAAM,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBACvC,OAAO,CAAC,GAAG,CAAC,iBAAiB,SAAS,CAAC,IAAI,MAAM,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC;gBAEvE,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,cAAc,EAAE,CAAC;gBACxB,iBAAiB;gBACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;gBAClD,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;gBACjD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAE9B,MAAM,CAAC,KAAK,GAAG,cAAc,YAAY,KAAK;oBAC5C,CAAC,CAAC,cAAc,CAAC,OAAO;oBACxB,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBAE3B,WAAW;gBACX,IAAI,YAAY,IAAI,UAAU,EAAE,CAAC;oBAC/B,IAAI,CAAC;wBACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;wBAChC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;wBAChC,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;wBACpD,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;wBAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBAC7B,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBAC5B,CAAC;oBAAC,OAAO,aAAa,EAAE,CAAC;wBACvB,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC;wBAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;wBAC7C,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;wBAC5C,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,UAAU,CAAC,CAAC;oBACxD,CAAC;gBACH,CAAC;gBAED,MAAM,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBACvC,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtE,MAAM,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;YAC5B,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,SAAoB,EAAE,UAAkB;QAC9D,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,qBAAqB,SAAS,CAAC,IAAI,MAAM,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC;YAE3E,WAAW;YACX,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE9B,eAAe;YACf,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAE3D,oBAAoB;YACpB,qCAAqC;YACrC,oCAAoC;YAEpC,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,CAAC,IAAI,MAAM,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;YACxC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CACjB,UAAuB,EACvB,UAA4B,EAAE;QAE9B,MAAM,OAAO,GAAsB,EAAE,CAAC;QAEtC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAErB,2CAA2C;YAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBAC5C,OAAO,CAAC,KAAK,CAAC,uBAAuB,SAAS,CAAC,IAAI,MAAM,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC;gBAC/E,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,SAAoB;QAC5C,kCAAkC;QAClC,MAAM,OAAO,GAAG,GAAG,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;QACxF,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Migration: 002 - MIRIX Schema Expansion
3
+ * Description: Expand Memento schema to support MIRIX-based 5-memory architecture
4
+ * Version: 002
5
+ * Date: 2025-01-XX
6
+ */
7
+ import type Database from 'better-sqlite3';
8
+ import type { Migration } from '../types.js';
9
+ /**
10
+ * MIRIX Schema Expansion Migration
11
+ *
12
+ * This migration:
13
+ * 1. Creates core_memory table for Core Memory
14
+ * 2. Creates knowledge_vault table for Knowledge Vault
15
+ * 3. Adds new fields to memory_item table (origin_source, task_goal, steps, reflection_notes)
16
+ * 4. Creates memento_schema_version table for schema version tracking
17
+ */
18
+ export declare class MirixSchemaExpansionMigration implements Migration {
19
+ version: string;
20
+ name: string;
21
+ description: string;
22
+ /**
23
+ * Load SQL file content
24
+ */
25
+ private loadSQLFile;
26
+ /**
27
+ * Execute SQL script
28
+ */
29
+ private executeSQL;
30
+ /**
31
+ * Check if table exists
32
+ */
33
+ private tableExists;
34
+ /**
35
+ * Check if column exists in table
36
+ */
37
+ private columnExists;
38
+ /**
39
+ * Validate before migration
40
+ */
41
+ validateBefore(db: Database.Database): Promise<void>;
42
+ /**
43
+ * Execute migration (Up)
44
+ */
45
+ up(db: Database.Database): Promise<void>;
46
+ /**
47
+ * Rollback migration (Down)
48
+ */
49
+ down(db: Database.Database): Promise<void>;
50
+ /**
51
+ * Validate after migration
52
+ */
53
+ validateAfter(db: Database.Database): Promise<void>;
54
+ }
55
+ //# sourceMappingURL=002-mirix-schema-expansion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"002-mirix-schema-expansion.d.ts","sourceRoot":"","sources":["../../../../src/database/migration/migrations/002-mirix-schema-expansion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C;;;;;;;;GAQG;AACH,qBAAa,6BAA8B,YAAW,SAAS;IAC7D,OAAO,SAAS;IAChB,IAAI,SAA4B;IAChC,WAAW,SAAsH;IAEjI;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACG,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB1D;;OAEG;IACG,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB9C;;OAEG;IACG,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBhD;;OAEG;IACG,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CA4C1D"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Migration: 002 - MIRIX Schema Expansion
3
+ * Description: Expand Memento schema to support MIRIX-based 5-memory architecture
4
+ * Version: 002
5
+ * Date: 2025-01-XX
6
+ */
7
+ import { readFileSync } from 'fs';
8
+ import { join, dirname } from 'path';
9
+ import { fileURLToPath } from 'url';
10
+ import { DependencyValidator } from '../dependency-validator.js';
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = dirname(__filename);
13
+ /**
14
+ * MIRIX Schema Expansion Migration
15
+ *
16
+ * This migration:
17
+ * 1. Creates core_memory table for Core Memory
18
+ * 2. Creates knowledge_vault table for Knowledge Vault
19
+ * 3. Adds new fields to memory_item table (origin_source, task_goal, steps, reflection_notes)
20
+ * 4. Creates memento_schema_version table for schema version tracking
21
+ */
22
+ export class MirixSchemaExpansionMigration {
23
+ version = '002';
24
+ name = 'mirix-schema-expansion';
25
+ description = 'Expand Memento schema to support MIRIX-based 5-memory architecture (Core, Episodic, Semantic, Procedural, Vault)';
26
+ /**
27
+ * Load SQL file content
28
+ */
29
+ loadSQLFile(filename) {
30
+ const filePath = join(__dirname, filename);
31
+ return readFileSync(filePath, 'utf-8');
32
+ }
33
+ /**
34
+ * Execute SQL script
35
+ */
36
+ executeSQL(db, sql) {
37
+ db.exec(sql);
38
+ }
39
+ /**
40
+ * Check if table exists
41
+ */
42
+ tableExists(db, tableName) {
43
+ const result = db.prepare(`
44
+ SELECT name FROM sqlite_master
45
+ WHERE type='table' AND name=?
46
+ `).get(tableName);
47
+ return !!result;
48
+ }
49
+ /**
50
+ * Check if column exists in table
51
+ */
52
+ columnExists(db, tableName, columnName) {
53
+ const columns = db.prepare(`PRAGMA table_info(${tableName})`).all();
54
+ return columns.some(col => col.name === columnName);
55
+ }
56
+ /**
57
+ * Validate before migration
58
+ */
59
+ async validateBefore(db) {
60
+ // Check if memory_item table exists (required for migration)
61
+ if (!this.tableExists(db, 'memory_item')) {
62
+ throw new Error('memory_item table does not exist. Cannot proceed with migration.');
63
+ }
64
+ // Check if migration has already been applied
65
+ if (this.tableExists(db, 'memento_schema_version')) {
66
+ const version = db.prepare(`
67
+ SELECT version FROM memento_schema_version WHERE version = ?
68
+ `).get('2.0');
69
+ if (version) {
70
+ throw new Error('Migration 002 has already been applied. Current schema version: 2.0');
71
+ }
72
+ }
73
+ }
74
+ /**
75
+ * Execute migration (Up)
76
+ */
77
+ async up(db) {
78
+ // 1. Create schema version table first (if not exists)
79
+ const schemaVersionSQL = this.loadSQLFile('002-mirix-schema-expansion-schema-version.sql');
80
+ this.executeSQL(db, schemaVersionSQL);
81
+ // 2. Create core_memory table
82
+ const coreMemorySQL = this.loadSQLFile('002-mirix-schema-expansion-core-memory.sql');
83
+ this.executeSQL(db, coreMemorySQL);
84
+ // 3. Create knowledge_vault table
85
+ const knowledgeVaultSQL = this.loadSQLFile('002-mirix-schema-expansion-knowledge-vault.sql');
86
+ this.executeSQL(db, knowledgeVaultSQL);
87
+ // 4. Add new fields to memory_item table
88
+ const memoryItemSQL = this.loadSQLFile('002-mirix-schema-expansion-memory-item.sql');
89
+ this.executeSQL(db, memoryItemSQL);
90
+ // 5. Record schema version
91
+ db.prepare(`
92
+ INSERT OR REPLACE INTO memento_schema_version
93
+ (version, migration_name, description, applied_by)
94
+ VALUES (?, ?, ?, ?)
95
+ `).run('2.0', this.name, this.description, 'system');
96
+ }
97
+ /**
98
+ * Rollback migration (Down)
99
+ */
100
+ async down(db) {
101
+ // Rollback in reverse order
102
+ // 1. Remove new fields from memory_item table
103
+ // Note: SQLite does not support DROP COLUMN directly, so we'll skip this
104
+ // In production, this would require recreating the table
105
+ // 2. Drop knowledge_vault table
106
+ db.exec('DROP TABLE IF EXISTS knowledge_vault');
107
+ // 3. Drop core_memory table
108
+ db.exec('DROP TABLE IF EXISTS core_memory');
109
+ // 4. Remove schema version record
110
+ db.prepare('DELETE FROM memento_schema_version WHERE version = ?').run('2.0');
111
+ // Note: We keep memento_schema_version table for future migrations
112
+ }
113
+ /**
114
+ * Validate after migration
115
+ */
116
+ async validateAfter(db) {
117
+ // Verify core_memory table exists
118
+ if (!this.tableExists(db, 'core_memory')) {
119
+ throw new Error('core_memory table was not created');
120
+ }
121
+ // Verify knowledge_vault table exists
122
+ if (!this.tableExists(db, 'knowledge_vault')) {
123
+ throw new Error('knowledge_vault table was not created');
124
+ }
125
+ // Verify memento_schema_version table exists
126
+ if (!this.tableExists(db, 'memento_schema_version')) {
127
+ throw new Error('memento_schema_version table was not created');
128
+ }
129
+ // Verify new columns in memory_item table
130
+ const requiredColumns = ['origin_source', 'task_goal', 'steps', 'reflection_notes'];
131
+ for (const column of requiredColumns) {
132
+ if (!this.columnExists(db, 'memory_item', column)) {
133
+ throw new Error(`Column ${column} was not added to memory_item table`);
134
+ }
135
+ }
136
+ // Verify schema version was recorded
137
+ const version = db.prepare(`
138
+ SELECT version FROM memento_schema_version WHERE version = ?
139
+ `).get('2.0');
140
+ if (!version) {
141
+ throw new Error('Schema version 2.0 was not recorded');
142
+ }
143
+ // Verify existing dependencies are intact using DependencyValidator
144
+ const dependencyReport = await DependencyValidator.validateAll(db);
145
+ if (!dependencyReport.success) {
146
+ const errors = dependencyReport.results
147
+ .filter(r => !r.success)
148
+ .map(r => `${r.name}: ${r.error}`)
149
+ .join('; ');
150
+ throw new Error(`Dependency validation failed: ${errors}`);
151
+ }
152
+ }
153
+ }
154
+ //# sourceMappingURL=002-mirix-schema-expansion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"002-mirix-schema-expansion.js","sourceRoot":"","sources":["../../../../src/database/migration/migrations/002-mirix-schema-expansion.ts"],"names":[],"mappings":"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"}