memento-mcp-server 1.16.1-a → 1.16.2-a
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/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +4 -3
- package/dist/client/index.js.map +1 -1
- package/dist/domains/anchor/services/anchor/anchor-interfaces.d.ts +2 -4
- package/dist/domains/anchor/services/anchor/anchor-interfaces.d.ts.map +1 -1
- package/dist/domains/anchor/services/anchor/anchor-interfaces.js.map +1 -1
- package/dist/domains/anchor/services/anchor/anchor-manager.d.ts +2 -2
- package/dist/domains/anchor/services/anchor/anchor-manager.d.ts.map +1 -1
- package/dist/domains/anchor/services/anchor/anchor-manager.js.map +1 -1
- package/dist/domains/anchor/services/anchor/anchor-search-service.d.ts +11 -34
- package/dist/domains/anchor/services/anchor/anchor-search-service.d.ts.map +1 -1
- package/dist/domains/anchor/services/anchor/anchor-search-service.js +66 -549
- package/dist/domains/anchor/services/anchor/anchor-search-service.js.map +1 -1
- package/dist/domains/anchor/services/anchor/database-types.d.ts +28 -0
- package/dist/domains/anchor/services/anchor/database-types.d.ts.map +1 -0
- package/dist/domains/anchor/services/anchor/database-types.js +6 -0
- package/dist/domains/anchor/services/anchor/database-types.js.map +1 -0
- package/dist/domains/anchor/services/anchor/embedding-types.d.ts +20 -0
- package/dist/domains/anchor/services/anchor/embedding-types.d.ts.map +1 -0
- package/dist/domains/anchor/services/anchor/embedding-types.js +6 -0
- package/dist/domains/anchor/services/anchor/embedding-types.js.map +1 -0
- package/dist/domains/anchor/services/anchor/fallback-search-service.d.ts +36 -0
- package/dist/domains/anchor/services/anchor/fallback-search-service.d.ts.map +1 -0
- package/dist/domains/anchor/services/anchor/fallback-search-service.js +85 -0
- package/dist/domains/anchor/services/anchor/fallback-search-service.js.map +1 -0
- package/dist/domains/anchor/services/anchor/fallback-strategy.d.ts +25 -0
- package/dist/domains/anchor/services/anchor/fallback-strategy.d.ts.map +1 -0
- package/dist/domains/anchor/services/anchor/fallback-strategy.js +35 -0
- package/dist/domains/anchor/services/anchor/fallback-strategy.js.map +1 -0
- package/dist/domains/anchor/services/anchor/local-search-service.d.ts +72 -0
- package/dist/domains/anchor/services/anchor/local-search-service.d.ts.map +1 -0
- package/dist/domains/anchor/services/anchor/local-search-service.js +129 -0
- package/dist/domains/anchor/services/anchor/local-search-service.js.map +1 -0
- package/dist/domains/anchor/services/anchor/n-hop-search-service.d.ts +90 -0
- package/dist/domains/anchor/services/anchor/n-hop-search-service.d.ts.map +1 -0
- package/dist/domains/anchor/services/anchor/n-hop-search-service.js +385 -0
- package/dist/domains/anchor/services/anchor/n-hop-search-service.js.map +1 -0
- package/dist/domains/anchor/services/anchor/n-hop-search-strategy.d.ts +24 -0
- package/dist/domains/anchor/services/anchor/n-hop-search-strategy.d.ts.map +1 -0
- package/dist/domains/anchor/services/anchor/n-hop-search-strategy.js +39 -0
- package/dist/domains/anchor/services/anchor/n-hop-search-strategy.js.map +1 -0
- package/dist/domains/anchor/services/anchor/query-filter-service.d.ts +52 -0
- package/dist/domains/anchor/services/anchor/query-filter-service.d.ts.map +1 -0
- package/dist/domains/anchor/services/anchor/query-filter-service.js +136 -0
- package/dist/domains/anchor/services/anchor/query-filter-service.js.map +1 -0
- package/dist/domains/anchor/services/anchor/query-filter-strategy.d.ts +24 -0
- package/dist/domains/anchor/services/anchor/query-filter-strategy.d.ts.map +1 -0
- package/dist/domains/anchor/services/anchor/query-filter-strategy.js +34 -0
- package/dist/domains/anchor/services/anchor/query-filter-strategy.js.map +1 -0
- package/dist/domains/anchor/services/anchor/search-strategy-interfaces.d.ts +52 -0
- package/dist/domains/anchor/services/anchor/search-strategy-interfaces.d.ts.map +1 -0
- package/dist/domains/anchor/services/anchor/search-strategy-interfaces.js +6 -0
- package/dist/domains/anchor/services/anchor/search-strategy-interfaces.js.map +1 -0
- package/dist/domains/anchor/services/anchor/vector-search-engine-types.d.ts +18 -0
- package/dist/domains/anchor/services/anchor/vector-search-engine-types.d.ts.map +1 -0
- package/dist/domains/anchor/services/anchor/vector-search-engine-types.js +11 -0
- package/dist/domains/anchor/services/anchor/vector-search-engine-types.js.map +1 -0
- package/dist/domains/memory/repositories/core-memory-database.interface.d.ts +47 -0
- package/dist/domains/memory/repositories/core-memory-database.interface.d.ts.map +1 -0
- package/dist/domains/memory/repositories/core-memory-database.interface.js +7 -0
- package/dist/domains/memory/repositories/core-memory-database.interface.js.map +1 -0
- package/dist/domains/memory/repositories/core-memory-repository.d.ts +7 -77
- package/dist/domains/memory/repositories/core-memory-repository.d.ts.map +1 -1
- package/dist/domains/memory/repositories/core-memory-repository.interface.d.ts +92 -0
- package/dist/domains/memory/repositories/core-memory-repository.interface.d.ts.map +1 -0
- package/dist/domains/memory/repositories/core-memory-repository.interface.js +6 -0
- package/dist/domains/memory/repositories/core-memory-repository.interface.js.map +1 -0
- package/dist/domains/memory/repositories/core-memory-repository.js +7 -259
- package/dist/domains/memory/repositories/core-memory-repository.js.map +1 -1
- package/dist/domains/memory/services/core-memory-cache-service.d.ts +55 -0
- package/dist/domains/memory/services/core-memory-cache-service.d.ts.map +1 -1
- package/dist/domains/memory/services/core-memory-cache-service.js +110 -8
- package/dist/domains/memory/services/core-memory-cache-service.js.map +1 -1
- package/dist/domains/memory/services/core-memory-service.d.ts +2 -2
- package/dist/domains/memory/services/core-memory-service.d.ts.map +1 -1
- package/dist/domains/memory/services/core-memory-service.js +43 -24
- package/dist/domains/memory/services/core-memory-service.js.map +1 -1
- package/dist/domains/memory/tools/recall-tool.d.ts.map +1 -1
- package/dist/domains/memory/tools/recall-tool.js +2 -2
- package/dist/domains/memory/tools/recall-tool.js.map +1 -1
- package/dist/domains/memory/tools/remember-tool.d.ts.map +1 -1
- package/dist/domains/memory/tools/remember-tool.js +2 -2
- package/dist/domains/memory/tools/remember-tool.js.map +1 -1
- package/dist/domains/monitoring/services/performance-monitor.d.ts +8 -0
- package/dist/domains/monitoring/services/performance-monitor.d.ts.map +1 -1
- package/dist/domains/monitoring/services/performance-monitor.js +16 -0
- package/dist/domains/monitoring/services/performance-monitor.js.map +1 -1
- package/dist/infrastructure/async-optimizer.d.ts.map +1 -1
- package/dist/infrastructure/async-optimizer.js +8 -7
- package/dist/infrastructure/async-optimizer.js.map +1 -1
- package/dist/infrastructure/database/adapters/sqlite-core-memory-adapter.d.ts +31 -0
- package/dist/infrastructure/database/adapters/sqlite-core-memory-adapter.d.ts.map +1 -0
- package/dist/infrastructure/database/adapters/sqlite-core-memory-adapter.js +112 -0
- package/dist/infrastructure/database/adapters/sqlite-core-memory-adapter.js.map +1 -0
- package/dist/infrastructure/database/database/init.d.ts.map +1 -1
- package/dist/infrastructure/database/database/init.js +23 -2
- package/dist/infrastructure/database/database/init.js.map +1 -1
- package/dist/infrastructure/database/database/migration/migrations/010-add-core-memory-version.d.ts +64 -0
- package/dist/infrastructure/database/database/migration/migrations/010-add-core-memory-version.d.ts.map +1 -0
- package/dist/infrastructure/database/database/migration/migrations/010-add-core-memory-version.js +174 -0
- package/dist/infrastructure/database/database/migration/migrations/010-add-core-memory-version.js.map +1 -0
- package/dist/infrastructure/database/database/migration/migrations/010-add-core-memory-version.sql +25 -0
- package/dist/infrastructure/database/database-lock-monitor.d.ts +105 -0
- package/dist/infrastructure/database/database-lock-monitor.d.ts.map +1 -0
- package/dist/infrastructure/database/database-lock-monitor.js +265 -0
- package/dist/infrastructure/database/database-lock-monitor.js.map +1 -0
- package/dist/infrastructure/database/factories/core-memory-repository.factory.d.ts +17 -0
- package/dist/infrastructure/database/factories/core-memory-repository.factory.d.ts.map +1 -0
- package/dist/infrastructure/database/factories/core-memory-repository.factory.js +43 -0
- package/dist/infrastructure/database/factories/core-memory-repository.factory.js.map +1 -0
- package/dist/infrastructure/database/repositories/core-memory-repository-sqlite.impl.d.ts +63 -0
- package/dist/infrastructure/database/repositories/core-memory-repository-sqlite.impl.d.ts.map +1 -0
- package/dist/infrastructure/database/repositories/core-memory-repository-sqlite.impl.js +281 -0
- package/dist/infrastructure/database/repositories/core-memory-repository-sqlite.impl.js.map +1 -0
- package/dist/infrastructure/database/wal-checkpoint-scheduler.d.ts +166 -0
- package/dist/infrastructure/database/wal-checkpoint-scheduler.d.ts.map +1 -0
- package/dist/infrastructure/database/wal-checkpoint-scheduler.js +285 -0
- package/dist/infrastructure/database/wal-checkpoint-scheduler.js.map +1 -0
- package/dist/npm-client/memento-client.d.ts.map +1 -1
- package/dist/npm-client/memento-client.js +5 -4
- package/dist/npm-client/memento-client.js.map +1 -1
- package/dist/npm-client/memory-manager.d.ts.map +1 -1
- package/dist/npm-client/memory-manager.js +4 -3
- package/dist/npm-client/memory-manager.js.map +1 -1
- package/dist/scripts/check-migration-status.d.ts.map +1 -1
- package/dist/scripts/check-migration-status.js +1 -0
- package/dist/scripts/check-migration-status.js.map +1 -1
- package/dist/server/bootstrap.d.ts +4 -0
- package/dist/server/bootstrap.d.ts.map +1 -1
- package/dist/server/bootstrap.js +27 -2
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/http-server.d.ts.map +1 -1
- package/dist/server/http-server.js +59 -31
- package/dist/server/http-server.js.map +1 -1
- package/dist/server/index.js +32 -16
- package/dist/server/index.js.map +1 -1
- package/dist/server/simple-mcp-server.d.ts.map +1 -1
- package/dist/server/simple-mcp-server.js +15 -14
- package/dist/server/simple-mcp-server.js.map +1 -1
- package/dist/shared/config/environment.d.ts.map +1 -1
- package/dist/shared/config/environment.js +13 -1
- package/dist/shared/config/environment.js.map +1 -1
- package/dist/shared/config/index.d.ts.map +1 -1
- package/dist/shared/config/index.js +13 -1
- package/dist/shared/config/index.js.map +1 -1
- package/dist/shared/types/index.d.ts +10 -0
- package/dist/shared/types/index.d.ts.map +1 -1
- package/dist/tools/base-tool.d.ts.map +1 -1
- package/dist/tools/base-tool.js +5 -4
- package/dist/tools/base-tool.js.map +1 -1
- package/dist/tools/migrate-embeddings-tool.d.ts.map +1 -1
- package/dist/tools/migrate-embeddings-tool.js +2 -1
- package/dist/tools/migrate-embeddings-tool.js.map +1 -1
- package/dist/tools/tool-registry.d.ts.map +1 -1
- package/dist/tools/tool-registry.js +4 -3
- package/dist/tools/tool-registry.js.map +1 -1
- package/dist/workers/consolidation-score-worker.d.ts.map +1 -1
- package/dist/workers/consolidation-score-worker.js +5 -4
- package/dist/workers/consolidation-score-worker.js.map +1 -1
- package/package.json +1 -1
- package/scripts/check-file-sizes.ts +405 -0
- package/scripts/count-any-types.ts +375 -0
- package/scripts/count-console-logs.ts +451 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Memory Repository Factory
|
|
3
|
+
* 환경 변수에 따라 적절한 구현체를 생성
|
|
4
|
+
*/
|
|
5
|
+
import Database from 'better-sqlite3';
|
|
6
|
+
import type { CoreMemoryRepository } from '../../../domains/memory/repositories/core-memory-repository.interface.js';
|
|
7
|
+
/**
|
|
8
|
+
* Core Memory Repository Factory 함수
|
|
9
|
+
*
|
|
10
|
+
* @param db - better-sqlite3 Database 객체
|
|
11
|
+
* @returns CoreMemoryRepository 인터페이스를 구현한 인스턴스
|
|
12
|
+
*
|
|
13
|
+
* @throws {Error} 지원되지 않는 데이터베이스 타입인 경우
|
|
14
|
+
* @throws {Error} PostgreSQL이 요청되었지만 아직 구현되지 않은 경우
|
|
15
|
+
*/
|
|
16
|
+
export declare function createCoreMemoryRepository(db: Database.Database): CoreMemoryRepository;
|
|
17
|
+
//# sourceMappingURL=core-memory-repository.factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-memory-repository.factory.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/database/factories/core-memory-repository.factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0EAA0E,CAAC;AAgBrH;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,oBAAoB,CAqBtF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Memory Repository Factory
|
|
3
|
+
* 환경 변수에 따라 적절한 구현체를 생성
|
|
4
|
+
*/
|
|
5
|
+
import Database from 'better-sqlite3';
|
|
6
|
+
import { SqliteCoreMemoryAdapter } from '../adapters/sqlite-core-memory-adapter.js';
|
|
7
|
+
import { CoreMemoryRepositorySqliteImpl } from '../repositories/core-memory-repository-sqlite.impl.js';
|
|
8
|
+
/**
|
|
9
|
+
* 에러 메시지 상수
|
|
10
|
+
*/
|
|
11
|
+
const ERROR_MESSAGES = {
|
|
12
|
+
POSTGRES_NOT_AVAILABLE: 'PostgreSQL implementation is not yet available',
|
|
13
|
+
UNSUPPORTED_TYPE: (dbType) => `Unsupported database type: ${dbType}. Supported types: 'sqlite', 'postgres'`
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Core Memory Repository Factory 함수
|
|
17
|
+
*
|
|
18
|
+
* @param db - better-sqlite3 Database 객체
|
|
19
|
+
* @returns CoreMemoryRepository 인터페이스를 구현한 인스턴스
|
|
20
|
+
*
|
|
21
|
+
* @throws {Error} 지원되지 않는 데이터베이스 타입인 경우
|
|
22
|
+
* @throws {Error} PostgreSQL이 요청되었지만 아직 구현되지 않은 경우
|
|
23
|
+
*/
|
|
24
|
+
export function createCoreMemoryRepository(db) {
|
|
25
|
+
// 환경 변수에서 DB_TYPE 읽기 (기본값: 'sqlite')
|
|
26
|
+
const dbType = (process.env.DB_TYPE || 'sqlite');
|
|
27
|
+
switch (dbType) {
|
|
28
|
+
case 'sqlite': {
|
|
29
|
+
// SQLite 구현체 생성
|
|
30
|
+
const adapter = new SqliteCoreMemoryAdapter(db);
|
|
31
|
+
return new CoreMemoryRepositorySqliteImpl(adapter);
|
|
32
|
+
}
|
|
33
|
+
case 'postgres': {
|
|
34
|
+
// PostgreSQL은 아직 구현되지 않음
|
|
35
|
+
throw new Error(ERROR_MESSAGES.POSTGRES_NOT_AVAILABLE);
|
|
36
|
+
}
|
|
37
|
+
default: {
|
|
38
|
+
// 지원되지 않는 데이터베이스 타입
|
|
39
|
+
throw new Error(ERROR_MESSAGES.UNSUPPORTED_TYPE(dbType));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=core-memory-repository.factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-memory-repository.factory.js","sourceRoot":"","sources":["../../../../src/infrastructure/database/factories/core-memory-repository.factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,8BAA8B,EAAE,MAAM,uDAAuD,CAAC;AAQvG;;GAEG;AACH,MAAM,cAAc,GAAG;IACrB,sBAAsB,EAAE,gDAAgD;IACxE,gBAAgB,EAAE,CAAC,MAAc,EAAE,EAAE,CACnC,8BAA8B,MAAM,yCAAyC;CACvE,CAAC;AAEX;;;;;;;;GAQG;AACH,MAAM,UAAU,0BAA0B,CAAC,EAAqB;IAC9D,qCAAqC;IACrC,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ,CAAiB,CAAC;IAEjE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,gBAAgB;YAChB,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,CAAC,CAAC;YAChD,OAAO,IAAI,8BAA8B,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;QAED,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,yBAAyB;YACzB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;YACR,oBAAoB;YACpB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Memory Repository SQLite 구현체
|
|
3
|
+
* CoreMemoryDatabaseConnection 인터페이스를 사용하여 구현
|
|
4
|
+
*/
|
|
5
|
+
import type { CoreMemoryRepository } from '../../../domains/memory/repositories/core-memory-repository.interface.js';
|
|
6
|
+
import type { CoreMemoryRecord, CreateCoreMemoryInput, UpdateCoreMemoryInput } from '../../../domains/memory/repositories/core-memory-repository.interface.js';
|
|
7
|
+
import type { CoreMemoryDatabaseConnection } from '../../../domains/memory/repositories/core-memory-database.interface.js';
|
|
8
|
+
/**
|
|
9
|
+
* Core Memory Repository SQLite 구현체
|
|
10
|
+
*/
|
|
11
|
+
export declare class CoreMemoryRepositorySqliteImpl implements CoreMemoryRepository {
|
|
12
|
+
private db;
|
|
13
|
+
constructor(db: CoreMemoryDatabaseConnection);
|
|
14
|
+
/**
|
|
15
|
+
* Core Memory 생성
|
|
16
|
+
*/
|
|
17
|
+
create(input: CreateCoreMemoryInput): Promise<CoreMemoryRecord>;
|
|
18
|
+
/**
|
|
19
|
+
* ID로 Core Memory 조회
|
|
20
|
+
*/
|
|
21
|
+
findById(core_id: string): Promise<CoreMemoryRecord | null>;
|
|
22
|
+
/**
|
|
23
|
+
* agent_id와 key로 Core Memory 조회
|
|
24
|
+
*/
|
|
25
|
+
findByKey(agent_id: string, key: string): Promise<CoreMemoryRecord | null>;
|
|
26
|
+
/**
|
|
27
|
+
* agent_id로 모든 Core Memory 조회
|
|
28
|
+
*/
|
|
29
|
+
findByAgentId(agent_id: string): Promise<CoreMemoryRecord[]>;
|
|
30
|
+
/**
|
|
31
|
+
* always_load=true인 Core Memory 조회
|
|
32
|
+
*/
|
|
33
|
+
findAlwaysLoad(agent_id?: string): Promise<CoreMemoryRecord[]>;
|
|
34
|
+
/**
|
|
35
|
+
* Core Memory 업데이트
|
|
36
|
+
*/
|
|
37
|
+
update(core_id: string, input: UpdateCoreMemoryInput): Promise<CoreMemoryRecord | null>;
|
|
38
|
+
/**
|
|
39
|
+
* agent_id와 key로 Core Memory 업데이트
|
|
40
|
+
*/
|
|
41
|
+
updateByKey(agent_id: string, key: string, input: UpdateCoreMemoryInput): Promise<CoreMemoryRecord | null>;
|
|
42
|
+
/**
|
|
43
|
+
* Core Memory 삭제
|
|
44
|
+
*/
|
|
45
|
+
delete(core_id: string): Promise<boolean>;
|
|
46
|
+
/**
|
|
47
|
+
* agent_id와 key로 Core Memory 삭제
|
|
48
|
+
*/
|
|
49
|
+
deleteByKey(agent_id: string, key: string): Promise<boolean>;
|
|
50
|
+
/**
|
|
51
|
+
* agent_id로 모든 Core Memory 삭제
|
|
52
|
+
*/
|
|
53
|
+
deleteByAgentId(agent_id: string): Promise<number>;
|
|
54
|
+
/**
|
|
55
|
+
* 모든 Core Memory 조회 (관리용)
|
|
56
|
+
*/
|
|
57
|
+
findAll(): Promise<CoreMemoryRecord[]>;
|
|
58
|
+
/**
|
|
59
|
+
* Core Memory 개수 조회
|
|
60
|
+
*/
|
|
61
|
+
count(agent_id?: string): Promise<number>;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=core-memory-repository-sqlite.impl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-memory-repository-sqlite.impl.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/database/repositories/core-memory-repository-sqlite.impl.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0EAA0E,CAAC;AACrH,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,0EAA0E,CAAC;AAClF,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wEAAwE,CAAC;AAY3H;;GAEG;AACH,qBAAa,8BAA+B,YAAW,oBAAoB;IACzE,OAAO,CAAC,EAAE,CAA+B;gBAE7B,EAAE,EAAE,4BAA4B;IAI5C;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuBrE;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAwBjE;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAwBhF;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAqBlE;;OAEG;IACG,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAyCpE;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAqC7F;;OAEG;IACG,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAqCnC;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU/C;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUlE;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUxD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAoB5C;;OAEG;IACG,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAYhD"}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Memory Repository SQLite 구현체
|
|
3
|
+
* CoreMemoryDatabaseConnection 인터페이스를 사용하여 구현
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* always_load 불리언 변환 헬퍼 함수
|
|
7
|
+
*/
|
|
8
|
+
function convertAlwaysLoad(record) {
|
|
9
|
+
return {
|
|
10
|
+
...record,
|
|
11
|
+
always_load: Boolean(record.always_load)
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Core Memory Repository SQLite 구현체
|
|
16
|
+
*/
|
|
17
|
+
export class CoreMemoryRepositorySqliteImpl {
|
|
18
|
+
db;
|
|
19
|
+
constructor(db) {
|
|
20
|
+
this.db = db;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Core Memory 생성
|
|
24
|
+
*/
|
|
25
|
+
async create(input) {
|
|
26
|
+
const { core_id, agent_id = 'default', key, value, always_load = false, origin_source = null } = input;
|
|
27
|
+
const stmt = await this.db.prepare(`
|
|
28
|
+
INSERT INTO core_memory (core_id, agent_id, key, value, always_load, origin_source, version)
|
|
29
|
+
VALUES (?, ?, ?, ?, ?, ?, 1)
|
|
30
|
+
`);
|
|
31
|
+
await stmt.run(core_id, agent_id, key, value, always_load ? 1 : 0, origin_source);
|
|
32
|
+
const result = await this.findById(core_id);
|
|
33
|
+
if (!result) {
|
|
34
|
+
throw new Error(`Failed to create core memory with id: ${core_id}`);
|
|
35
|
+
}
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* ID로 Core Memory 조회
|
|
40
|
+
*/
|
|
41
|
+
async findById(core_id) {
|
|
42
|
+
const stmt = await this.db.prepare(`
|
|
43
|
+
SELECT
|
|
44
|
+
core_id,
|
|
45
|
+
agent_id,
|
|
46
|
+
key,
|
|
47
|
+
value,
|
|
48
|
+
always_load,
|
|
49
|
+
origin_source,
|
|
50
|
+
version,
|
|
51
|
+
created_at,
|
|
52
|
+
updated_at
|
|
53
|
+
FROM core_memory
|
|
54
|
+
WHERE core_id = ?
|
|
55
|
+
`);
|
|
56
|
+
const result = await stmt.get(core_id);
|
|
57
|
+
if (!result) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
return convertAlwaysLoad(result);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* agent_id와 key로 Core Memory 조회
|
|
64
|
+
*/
|
|
65
|
+
async findByKey(agent_id, key) {
|
|
66
|
+
const stmt = await this.db.prepare(`
|
|
67
|
+
SELECT
|
|
68
|
+
core_id,
|
|
69
|
+
agent_id,
|
|
70
|
+
key,
|
|
71
|
+
value,
|
|
72
|
+
always_load,
|
|
73
|
+
origin_source,
|
|
74
|
+
version,
|
|
75
|
+
created_at,
|
|
76
|
+
updated_at
|
|
77
|
+
FROM core_memory
|
|
78
|
+
WHERE agent_id = ? AND key = ?
|
|
79
|
+
`);
|
|
80
|
+
const result = await stmt.get(agent_id, key);
|
|
81
|
+
if (!result) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
return convertAlwaysLoad(result);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* agent_id로 모든 Core Memory 조회
|
|
88
|
+
*/
|
|
89
|
+
async findByAgentId(agent_id) {
|
|
90
|
+
const stmt = await this.db.prepare(`
|
|
91
|
+
SELECT
|
|
92
|
+
core_id,
|
|
93
|
+
agent_id,
|
|
94
|
+
key,
|
|
95
|
+
value,
|
|
96
|
+
always_load,
|
|
97
|
+
origin_source,
|
|
98
|
+
version,
|
|
99
|
+
created_at,
|
|
100
|
+
updated_at
|
|
101
|
+
FROM core_memory
|
|
102
|
+
WHERE agent_id = ?
|
|
103
|
+
ORDER BY created_at ASC
|
|
104
|
+
`);
|
|
105
|
+
const results = await stmt.all(agent_id);
|
|
106
|
+
return results.map(convertAlwaysLoad);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* always_load=true인 Core Memory 조회
|
|
110
|
+
*/
|
|
111
|
+
async findAlwaysLoad(agent_id) {
|
|
112
|
+
const query = agent_id
|
|
113
|
+
? `
|
|
114
|
+
SELECT
|
|
115
|
+
core_id,
|
|
116
|
+
agent_id,
|
|
117
|
+
key,
|
|
118
|
+
value,
|
|
119
|
+
always_load,
|
|
120
|
+
origin_source,
|
|
121
|
+
version,
|
|
122
|
+
created_at,
|
|
123
|
+
updated_at
|
|
124
|
+
FROM core_memory
|
|
125
|
+
WHERE always_load = 1 AND agent_id = ?
|
|
126
|
+
ORDER BY created_at ASC
|
|
127
|
+
`
|
|
128
|
+
: `
|
|
129
|
+
SELECT
|
|
130
|
+
core_id,
|
|
131
|
+
agent_id,
|
|
132
|
+
key,
|
|
133
|
+
value,
|
|
134
|
+
always_load,
|
|
135
|
+
origin_source,
|
|
136
|
+
version,
|
|
137
|
+
created_at,
|
|
138
|
+
updated_at
|
|
139
|
+
FROM core_memory
|
|
140
|
+
WHERE always_load = 1
|
|
141
|
+
ORDER BY created_at ASC
|
|
142
|
+
`;
|
|
143
|
+
const stmt = await this.db.prepare(query);
|
|
144
|
+
const results = agent_id
|
|
145
|
+
? await stmt.all(agent_id)
|
|
146
|
+
: await stmt.all();
|
|
147
|
+
return results.map(convertAlwaysLoad);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Core Memory 업데이트
|
|
151
|
+
*/
|
|
152
|
+
async update(core_id, input) {
|
|
153
|
+
const updates = [];
|
|
154
|
+
const values = [];
|
|
155
|
+
if (input.value !== undefined) {
|
|
156
|
+
updates.push('value = ?');
|
|
157
|
+
values.push(input.value);
|
|
158
|
+
}
|
|
159
|
+
if (input.always_load !== undefined) {
|
|
160
|
+
updates.push('always_load = ?');
|
|
161
|
+
values.push(input.always_load ? 1 : 0);
|
|
162
|
+
}
|
|
163
|
+
if (input.origin_source !== undefined) {
|
|
164
|
+
updates.push('origin_source = ?');
|
|
165
|
+
values.push(input.origin_source);
|
|
166
|
+
}
|
|
167
|
+
if (updates.length === 0) {
|
|
168
|
+
return this.findById(core_id);
|
|
169
|
+
}
|
|
170
|
+
// version = version + 1 추가 (항상 증가)
|
|
171
|
+
updates.push('version = version + 1');
|
|
172
|
+
values.push(core_id);
|
|
173
|
+
const stmt = await this.db.prepare(`
|
|
174
|
+
UPDATE core_memory
|
|
175
|
+
SET ${updates.join(', ')}
|
|
176
|
+
WHERE core_id = ?
|
|
177
|
+
`);
|
|
178
|
+
await stmt.run(...values);
|
|
179
|
+
return this.findById(core_id);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* agent_id와 key로 Core Memory 업데이트
|
|
183
|
+
*/
|
|
184
|
+
async updateByKey(agent_id, key, input) {
|
|
185
|
+
const updates = [];
|
|
186
|
+
const values = [];
|
|
187
|
+
if (input.value !== undefined) {
|
|
188
|
+
updates.push('value = ?');
|
|
189
|
+
values.push(input.value);
|
|
190
|
+
}
|
|
191
|
+
if (input.always_load !== undefined) {
|
|
192
|
+
updates.push('always_load = ?');
|
|
193
|
+
values.push(input.always_load ? 1 : 0);
|
|
194
|
+
}
|
|
195
|
+
if (input.origin_source !== undefined) {
|
|
196
|
+
updates.push('origin_source = ?');
|
|
197
|
+
values.push(input.origin_source);
|
|
198
|
+
}
|
|
199
|
+
if (updates.length === 0) {
|
|
200
|
+
return this.findByKey(agent_id, key);
|
|
201
|
+
}
|
|
202
|
+
// version = version + 1 추가 (항상 증가)
|
|
203
|
+
updates.push('version = version + 1');
|
|
204
|
+
values.push(agent_id, key);
|
|
205
|
+
const stmt = await this.db.prepare(`
|
|
206
|
+
UPDATE core_memory
|
|
207
|
+
SET ${updates.join(', ')}
|
|
208
|
+
WHERE agent_id = ? AND key = ?
|
|
209
|
+
`);
|
|
210
|
+
await stmt.run(...values);
|
|
211
|
+
return this.findByKey(agent_id, key);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Core Memory 삭제
|
|
215
|
+
*/
|
|
216
|
+
async delete(core_id) {
|
|
217
|
+
const stmt = await this.db.prepare(`
|
|
218
|
+
DELETE FROM core_memory
|
|
219
|
+
WHERE core_id = ?
|
|
220
|
+
`);
|
|
221
|
+
const result = await stmt.run(core_id);
|
|
222
|
+
return result.changes > 0;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* agent_id와 key로 Core Memory 삭제
|
|
226
|
+
*/
|
|
227
|
+
async deleteByKey(agent_id, key) {
|
|
228
|
+
const stmt = await this.db.prepare(`
|
|
229
|
+
DELETE FROM core_memory
|
|
230
|
+
WHERE agent_id = ? AND key = ?
|
|
231
|
+
`);
|
|
232
|
+
const result = await stmt.run(agent_id, key);
|
|
233
|
+
return result.changes > 0;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* agent_id로 모든 Core Memory 삭제
|
|
237
|
+
*/
|
|
238
|
+
async deleteByAgentId(agent_id) {
|
|
239
|
+
const stmt = await this.db.prepare(`
|
|
240
|
+
DELETE FROM core_memory
|
|
241
|
+
WHERE agent_id = ?
|
|
242
|
+
`);
|
|
243
|
+
const result = await stmt.run(agent_id);
|
|
244
|
+
return result.changes;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* 모든 Core Memory 조회 (관리용)
|
|
248
|
+
*/
|
|
249
|
+
async findAll() {
|
|
250
|
+
const stmt = await this.db.prepare(`
|
|
251
|
+
SELECT
|
|
252
|
+
core_id,
|
|
253
|
+
agent_id,
|
|
254
|
+
key,
|
|
255
|
+
value,
|
|
256
|
+
always_load,
|
|
257
|
+
origin_source,
|
|
258
|
+
version,
|
|
259
|
+
created_at,
|
|
260
|
+
updated_at
|
|
261
|
+
FROM core_memory
|
|
262
|
+
ORDER BY agent_id, created_at ASC
|
|
263
|
+
`);
|
|
264
|
+
const results = await stmt.all();
|
|
265
|
+
return results.map(convertAlwaysLoad);
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Core Memory 개수 조회
|
|
269
|
+
*/
|
|
270
|
+
async count(agent_id) {
|
|
271
|
+
const query = agent_id
|
|
272
|
+
? 'SELECT COUNT(*) as count FROM core_memory WHERE agent_id = ?'
|
|
273
|
+
: 'SELECT COUNT(*) as count FROM core_memory';
|
|
274
|
+
const stmt = await this.db.prepare(query);
|
|
275
|
+
const result = agent_id
|
|
276
|
+
? await stmt.get(agent_id)
|
|
277
|
+
: await stmt.get();
|
|
278
|
+
return result.count;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
//# sourceMappingURL=core-memory-repository-sqlite.impl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-memory-repository-sqlite.impl.js","sourceRoot":"","sources":["../../../../src/infrastructure/database/repositories/core-memory-repository-sqlite.impl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WAL Checkpoint Scheduler
|
|
3
|
+
* SQLite WAL 파일의 주기적 체크포인트를 관리하는 스케줄러
|
|
4
|
+
*
|
|
5
|
+
* 클린코드 원칙:
|
|
6
|
+
* - 단일 책임 원칙: WAL 체크포인트 스케줄링만 담당
|
|
7
|
+
* - 명확한 인터페이스: CheckpointMode enum과 CheckpointResult interface로 명확한 타입 정의
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* 체크포인트 모드
|
|
11
|
+
* - PASSIVE: 다른 연결이 읽기 중이면 체크포인트를 건너뜀 (성능 영향 최소화)
|
|
12
|
+
* - TRUNCATE: WAL 파일을 완전히 제거 (디스크 공간 절약)
|
|
13
|
+
* - FULL: 모든 페이지를 메인 DB로 이동 후 WAL 파일 제거 (장기 트랜잭션이 없을 때만 사용)
|
|
14
|
+
*/
|
|
15
|
+
export declare enum CheckpointMode {
|
|
16
|
+
PASSIVE = "PASSIVE",
|
|
17
|
+
TRUNCATE = "TRUNCATE",
|
|
18
|
+
FULL = "FULL"
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 체크포인트 실행 결과
|
|
22
|
+
*/
|
|
23
|
+
export interface CheckpointResult {
|
|
24
|
+
/**
|
|
25
|
+
* 체크포인트 모드
|
|
26
|
+
*/
|
|
27
|
+
mode: CheckpointMode;
|
|
28
|
+
/**
|
|
29
|
+
* 성공 여부
|
|
30
|
+
*/
|
|
31
|
+
success: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* WAL 파일의 페이지 수
|
|
34
|
+
*/
|
|
35
|
+
log: number;
|
|
36
|
+
/**
|
|
37
|
+
* 체크포인트된 페이지 수
|
|
38
|
+
*/
|
|
39
|
+
checkpointed: number;
|
|
40
|
+
/**
|
|
41
|
+
* 락 상태 (1: 락, 0: 정상)
|
|
42
|
+
*/
|
|
43
|
+
busy: number;
|
|
44
|
+
/**
|
|
45
|
+
* 에러 (실패 시)
|
|
46
|
+
*/
|
|
47
|
+
error?: Error;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* WAL 체크포인트 스케줄러 설정
|
|
51
|
+
*/
|
|
52
|
+
export interface WalCheckpointSchedulerConfig {
|
|
53
|
+
/**
|
|
54
|
+
* 체크포인트 실행 주기 (밀리초)
|
|
55
|
+
* 기본값: 5분 (300000ms)
|
|
56
|
+
*/
|
|
57
|
+
intervalMs: number;
|
|
58
|
+
/**
|
|
59
|
+
* WAL 파일 크기 경고 임계값 (바이트)
|
|
60
|
+
* 기본값: 16MB (16777216 bytes)
|
|
61
|
+
*/
|
|
62
|
+
walSizeWarningThreshold: number;
|
|
63
|
+
/**
|
|
64
|
+
* WAL 파일 크기 위험 임계값 (바이트)
|
|
65
|
+
* 기본값: 24MB (25165824 bytes)
|
|
66
|
+
*/
|
|
67
|
+
walSizeDangerThreshold: number;
|
|
68
|
+
/**
|
|
69
|
+
* 전용 커넥션 사용 여부
|
|
70
|
+
* 기본값: true
|
|
71
|
+
* true인 경우 체크포인트 전용 연결을 생성하여 메인 연결과 분리
|
|
72
|
+
*/
|
|
73
|
+
useDedicatedConnection: boolean;
|
|
74
|
+
/**
|
|
75
|
+
* 최대 재시도 횟수
|
|
76
|
+
* 기본값: 3
|
|
77
|
+
*/
|
|
78
|
+
maxRetries: number;
|
|
79
|
+
/**
|
|
80
|
+
* 재시도 백오프 시간 (밀리초)
|
|
81
|
+
* 기본값: 1000ms
|
|
82
|
+
* 지수 백오프의 기본 단위로 사용됨 (1초, 2초, 4초)
|
|
83
|
+
*/
|
|
84
|
+
retryBackoffMs: number;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Logger 인터페이스
|
|
88
|
+
*/
|
|
89
|
+
export interface Logger {
|
|
90
|
+
info(message: string, meta?: Record<string, unknown>): void;
|
|
91
|
+
warn(message: string, meta?: Record<string, unknown>): void;
|
|
92
|
+
error(message: string, meta?: Record<string, unknown>): void;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* PerformanceMonitor 인터페이스
|
|
96
|
+
*/
|
|
97
|
+
export interface PerformanceMonitor {
|
|
98
|
+
recordMetric(name: string, value: number): void;
|
|
99
|
+
incrementCounter(name: string): void;
|
|
100
|
+
}
|
|
101
|
+
import Database from 'better-sqlite3';
|
|
102
|
+
/**
|
|
103
|
+
* WAL 체크포인트 스케줄러 클래스
|
|
104
|
+
* SQLite WAL 파일의 주기적 체크포인트를 관리
|
|
105
|
+
*/
|
|
106
|
+
export declare class WalCheckpointScheduler {
|
|
107
|
+
private mainDb;
|
|
108
|
+
private config;
|
|
109
|
+
private logger?;
|
|
110
|
+
private performanceMonitor?;
|
|
111
|
+
private intervalId;
|
|
112
|
+
private isRunning;
|
|
113
|
+
private dedicatedConnection;
|
|
114
|
+
private checkpointInProgress;
|
|
115
|
+
constructor(mainDb: Database.Database, config: WalCheckpointSchedulerConfig, logger?: Logger | undefined, performanceMonitor?: PerformanceMonitor | undefined);
|
|
116
|
+
/**
|
|
117
|
+
* 스케줄러 시작 (idempotent)
|
|
118
|
+
*/
|
|
119
|
+
start(): void;
|
|
120
|
+
/**
|
|
121
|
+
* 스케줄러 중지 (idempotent, 비동기)
|
|
122
|
+
*/
|
|
123
|
+
stop(): Promise<void>;
|
|
124
|
+
/**
|
|
125
|
+
* 즉시 체크포인트 실행
|
|
126
|
+
* @param mode 체크포인트 모드 (기본값: TRUNCATE)
|
|
127
|
+
* @returns 체크포인트 실행 결과
|
|
128
|
+
*/
|
|
129
|
+
checkpointNow(mode?: CheckpointMode): Promise<CheckpointResult>;
|
|
130
|
+
/**
|
|
131
|
+
* 체크포인트 실행 (재시도 로직 포함)
|
|
132
|
+
* busy=1인 경우 실패로 간주하여 재시도 수행
|
|
133
|
+
* 동시 실행 방지: checkpointInProgress 플래그로 중첩 실행 방지
|
|
134
|
+
*
|
|
135
|
+
* @param mode 체크포인트 모드
|
|
136
|
+
* @returns 체크포인트 실행 결과
|
|
137
|
+
*/
|
|
138
|
+
private checkpoint;
|
|
139
|
+
/**
|
|
140
|
+
* 주기적 체크포인트 스케줄링
|
|
141
|
+
* 동시 실행 방지: checkpointInProgress 플래그로 중첩 실행 방지
|
|
142
|
+
*/
|
|
143
|
+
private scheduleCheckpoint;
|
|
144
|
+
/**
|
|
145
|
+
* 대기 함수 (지수 백오프용)
|
|
146
|
+
* @param ms 대기 시간 (밀리초)
|
|
147
|
+
*/
|
|
148
|
+
private sleep;
|
|
149
|
+
/**
|
|
150
|
+
* 체크포인트 실행 (실제 SQL 실행)
|
|
151
|
+
* better-sqlite3의 pragma는 기본적으로 배열을 반환함
|
|
152
|
+
*
|
|
153
|
+
* @param db 데이터베이스 연결
|
|
154
|
+
* @param mode 체크포인트 모드
|
|
155
|
+
* @returns 체크포인트 실행 결과
|
|
156
|
+
*/
|
|
157
|
+
private executeCheckpoint;
|
|
158
|
+
/**
|
|
159
|
+
* WAL 파일 크기 조회
|
|
160
|
+
* 파일 시스템 API를 통한 크기 조회 (읽기 전용, 락 유발 없음)
|
|
161
|
+
*
|
|
162
|
+
* @returns WAL 파일 크기 (바이트), 파일이 없거나 에러 발생 시 0 반환
|
|
163
|
+
*/
|
|
164
|
+
private getWalFileSize;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=wal-checkpoint-scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wal-checkpoint-scheduler.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/database/wal-checkpoint-scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;GAKG;AACH,oBAAY,cAAc;IACxB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,IAAI,SAAS;CACd;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,IAAI,EAAE,cAAc,CAAC;IAErB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,uBAAuB,EAAE,MAAM,CAAC;IAEhC;;;OAGG;IACH,sBAAsB,EAAE,MAAM,CAAC;IAE/B;;;;OAIG;IACH,sBAAsB,EAAE,OAAO,CAAC;IAEhC;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC9D;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC;;;GAGG;AACH,qBAAa,sBAAsB;IAO/B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,kBAAkB,CAAC;IAT7B,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,mBAAmB,CAAkC;IAC7D,OAAO,CAAC,oBAAoB,CAAkB;gBAGpC,MAAM,EAAE,QAAQ,CAAC,QAAQ,EACzB,MAAM,EAAE,4BAA4B,EACpC,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,kBAAkB,CAAC,EAAE,kBAAkB,YAAA;IAGjD;;OAEG;IACH,KAAK,IAAI,IAAI;IAuBb;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB3B;;;;OAIG;IACG,aAAa,CAAC,IAAI,GAAE,cAAwC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI9F;;;;;;;OAOG;YACW,UAAU;IA0GxB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;;OAGG;IACH,OAAO,CAAC,KAAK;IAIb;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;IAuCzB;;;;;OAKG;YACW,cAAc;CAY7B"}
|