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.
- package/README.md +1 -0
- package/dist/config/environment.d.ts.map +1 -1
- package/dist/config/environment.js +2 -1
- package/dist/config/environment.js.map +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +5 -2
- package/dist/config/index.js.map +1 -1
- package/dist/database/init.d.ts.map +1 -1
- package/dist/database/init.js +159 -7
- package/dist/database/init.js.map +1 -1
- package/dist/database/migration/backup-manager.d.ts +55 -0
- package/dist/database/migration/backup-manager.d.ts.map +1 -0
- package/dist/database/migration/backup-manager.js +181 -0
- package/dist/database/migration/backup-manager.js.map +1 -0
- package/dist/database/migration/dependency-validator.d.ts +62 -0
- package/dist/database/migration/dependency-validator.d.ts.map +1 -0
- package/dist/database/migration/dependency-validator.js +260 -0
- package/dist/database/migration/dependency-validator.js.map +1 -0
- package/dist/database/migration/migration-detector.d.ts +67 -0
- package/dist/database/migration/migration-detector.d.ts.map +1 -0
- package/dist/database/migration/migration-detector.js +129 -0
- package/dist/database/migration/migration-detector.js.map +1 -0
- package/dist/database/migration/migration-logger.d.ts +82 -0
- package/dist/database/migration/migration-logger.d.ts.map +1 -0
- package/dist/database/migration/migration-logger.js +168 -0
- package/dist/database/migration/migration-logger.js.map +1 -0
- package/dist/database/migration/migration-runner.d.ts +45 -0
- package/dist/database/migration/migration-runner.d.ts.map +1 -0
- package/dist/database/migration/migration-runner.js +194 -0
- package/dist/database/migration/migration-runner.js.map +1 -0
- package/dist/database/migration/migrations/002-mirix-schema-expansion.d.ts +55 -0
- package/dist/database/migration/migrations/002-mirix-schema-expansion.d.ts.map +1 -0
- package/dist/database/migration/migrations/002-mirix-schema-expansion.js +154 -0
- package/dist/database/migration/migrations/002-mirix-schema-expansion.js.map +1 -0
- package/dist/database/migration/schema-version-manager.d.ts +43 -0
- package/dist/database/migration/schema-version-manager.d.ts.map +1 -0
- package/dist/database/migration/schema-version-manager.js +146 -0
- package/dist/database/migration/schema-version-manager.js.map +1 -0
- package/dist/database/migration/types.d.ts +127 -0
- package/dist/database/migration/types.d.ts.map +1 -0
- package/dist/database/migration/types.js +5 -0
- package/dist/database/migration/types.js.map +1 -0
- package/dist/database/schema.sql +69 -1
- package/dist/npm-client/memento-client.d.ts.map +1 -1
- package/dist/npm-client/memento-client.js +39 -8
- package/dist/npm-client/memento-client.js.map +1 -1
- package/dist/npm-client/types.d.ts +16 -2
- package/dist/npm-client/types.d.ts.map +1 -1
- package/dist/npm-client/types.js.map +1 -1
- package/dist/npm-client/utils.d.ts.map +1 -1
- package/dist/npm-client/utils.js +44 -5
- package/dist/npm-client/utils.js.map +1 -1
- package/dist/repositories/core-memory-repository.d.ts +81 -0
- package/dist/repositories/core-memory-repository.d.ts.map +1 -0
- package/dist/repositories/core-memory-repository.js +263 -0
- package/dist/repositories/core-memory-repository.js.map +1 -0
- package/dist/repositories/knowledge-vault-repository.d.ts +102 -0
- package/dist/repositories/knowledge-vault-repository.d.ts.map +1 -0
- package/dist/repositories/knowledge-vault-repository.js +395 -0
- package/dist/repositories/knowledge-vault-repository.js.map +1 -0
- package/dist/server/http-server.d.ts.map +1 -1
- package/dist/server/http-server.js +66 -1
- package/dist/server/http-server.js.map +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +86 -1
- package/dist/server/index.js.map +1 -1
- package/dist/services/cache-service.d.ts.map +1 -1
- package/dist/services/cache-service.js +5 -2
- package/dist/services/cache-service.js.map +1 -1
- package/dist/services/core-memory-cache-service.d.ts +80 -0
- package/dist/services/core-memory-cache-service.d.ts.map +1 -0
- package/dist/services/core-memory-cache-service.js +122 -0
- package/dist/services/core-memory-cache-service.js.map +1 -0
- package/dist/services/core-memory-service.d.ts +117 -0
- package/dist/services/core-memory-service.d.ts.map +1 -0
- package/dist/services/core-memory-service.js +247 -0
- package/dist/services/core-memory-service.js.map +1 -0
- package/dist/services/knowledge-vault-service.d.ts +114 -0
- package/dist/services/knowledge-vault-service.d.ts.map +1 -0
- package/dist/services/knowledge-vault-service.js +233 -0
- package/dist/services/knowledge-vault-service.js.map +1 -0
- package/dist/services/memory-neighbor-service.d.ts +81 -0
- package/dist/services/memory-neighbor-service.d.ts.map +1 -0
- package/dist/services/memory-neighbor-service.js +295 -0
- package/dist/services/memory-neighbor-service.js.map +1 -0
- package/dist/tools/get-memory-neighbors-tool.d.ts +26 -0
- package/dist/tools/get-memory-neighbors-tool.d.ts.map +1 -0
- package/dist/tools/get-memory-neighbors-tool.js +125 -0
- package/dist/tools/get-memory-neighbors-tool.js.map +1 -0
- package/dist/tools/index.d.ts +2 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/memory-injection-prompt.d.ts.map +1 -1
- package/dist/tools/memory-injection-prompt.js +28 -4
- package/dist/tools/memory-injection-prompt.js.map +1 -1
- package/dist/tools/recall-tool.d.ts.map +1 -1
- package/dist/tools/recall-tool.js +292 -82
- package/dist/tools/recall-tool.js.map +1 -1
- package/dist/tools/remember-tool.d.ts.map +1 -1
- package/dist/tools/remember-tool.js +293 -40
- package/dist/tools/remember-tool.js.map +1 -1
- package/dist/tools/types.d.ts +9 -2
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js +11 -2
- package/dist/tools/types.js.map +1 -1
- package/dist/types/index.d.ts +20 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +7 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/type-param-validator.d.ts +31 -0
- package/dist/utils/type-param-validator.d.ts.map +1 -0
- package/dist/utils/type-param-validator.js +76 -0
- package/dist/utils/type-param-validator.js.map +1 -0
- package/package.json +1 -1
- 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":"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"}
|
|
@@ -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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"}
|