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.
Files changed (163) hide show
  1. package/dist/client/index.d.ts.map +1 -1
  2. package/dist/client/index.js +4 -3
  3. package/dist/client/index.js.map +1 -1
  4. package/dist/domains/anchor/services/anchor/anchor-interfaces.d.ts +2 -4
  5. package/dist/domains/anchor/services/anchor/anchor-interfaces.d.ts.map +1 -1
  6. package/dist/domains/anchor/services/anchor/anchor-interfaces.js.map +1 -1
  7. package/dist/domains/anchor/services/anchor/anchor-manager.d.ts +2 -2
  8. package/dist/domains/anchor/services/anchor/anchor-manager.d.ts.map +1 -1
  9. package/dist/domains/anchor/services/anchor/anchor-manager.js.map +1 -1
  10. package/dist/domains/anchor/services/anchor/anchor-search-service.d.ts +11 -34
  11. package/dist/domains/anchor/services/anchor/anchor-search-service.d.ts.map +1 -1
  12. package/dist/domains/anchor/services/anchor/anchor-search-service.js +66 -549
  13. package/dist/domains/anchor/services/anchor/anchor-search-service.js.map +1 -1
  14. package/dist/domains/anchor/services/anchor/database-types.d.ts +28 -0
  15. package/dist/domains/anchor/services/anchor/database-types.d.ts.map +1 -0
  16. package/dist/domains/anchor/services/anchor/database-types.js +6 -0
  17. package/dist/domains/anchor/services/anchor/database-types.js.map +1 -0
  18. package/dist/domains/anchor/services/anchor/embedding-types.d.ts +20 -0
  19. package/dist/domains/anchor/services/anchor/embedding-types.d.ts.map +1 -0
  20. package/dist/domains/anchor/services/anchor/embedding-types.js +6 -0
  21. package/dist/domains/anchor/services/anchor/embedding-types.js.map +1 -0
  22. package/dist/domains/anchor/services/anchor/fallback-search-service.d.ts +36 -0
  23. package/dist/domains/anchor/services/anchor/fallback-search-service.d.ts.map +1 -0
  24. package/dist/domains/anchor/services/anchor/fallback-search-service.js +85 -0
  25. package/dist/domains/anchor/services/anchor/fallback-search-service.js.map +1 -0
  26. package/dist/domains/anchor/services/anchor/fallback-strategy.d.ts +25 -0
  27. package/dist/domains/anchor/services/anchor/fallback-strategy.d.ts.map +1 -0
  28. package/dist/domains/anchor/services/anchor/fallback-strategy.js +35 -0
  29. package/dist/domains/anchor/services/anchor/fallback-strategy.js.map +1 -0
  30. package/dist/domains/anchor/services/anchor/local-search-service.d.ts +72 -0
  31. package/dist/domains/anchor/services/anchor/local-search-service.d.ts.map +1 -0
  32. package/dist/domains/anchor/services/anchor/local-search-service.js +129 -0
  33. package/dist/domains/anchor/services/anchor/local-search-service.js.map +1 -0
  34. package/dist/domains/anchor/services/anchor/n-hop-search-service.d.ts +90 -0
  35. package/dist/domains/anchor/services/anchor/n-hop-search-service.d.ts.map +1 -0
  36. package/dist/domains/anchor/services/anchor/n-hop-search-service.js +385 -0
  37. package/dist/domains/anchor/services/anchor/n-hop-search-service.js.map +1 -0
  38. package/dist/domains/anchor/services/anchor/n-hop-search-strategy.d.ts +24 -0
  39. package/dist/domains/anchor/services/anchor/n-hop-search-strategy.d.ts.map +1 -0
  40. package/dist/domains/anchor/services/anchor/n-hop-search-strategy.js +39 -0
  41. package/dist/domains/anchor/services/anchor/n-hop-search-strategy.js.map +1 -0
  42. package/dist/domains/anchor/services/anchor/query-filter-service.d.ts +52 -0
  43. package/dist/domains/anchor/services/anchor/query-filter-service.d.ts.map +1 -0
  44. package/dist/domains/anchor/services/anchor/query-filter-service.js +136 -0
  45. package/dist/domains/anchor/services/anchor/query-filter-service.js.map +1 -0
  46. package/dist/domains/anchor/services/anchor/query-filter-strategy.d.ts +24 -0
  47. package/dist/domains/anchor/services/anchor/query-filter-strategy.d.ts.map +1 -0
  48. package/dist/domains/anchor/services/anchor/query-filter-strategy.js +34 -0
  49. package/dist/domains/anchor/services/anchor/query-filter-strategy.js.map +1 -0
  50. package/dist/domains/anchor/services/anchor/search-strategy-interfaces.d.ts +52 -0
  51. package/dist/domains/anchor/services/anchor/search-strategy-interfaces.d.ts.map +1 -0
  52. package/dist/domains/anchor/services/anchor/search-strategy-interfaces.js +6 -0
  53. package/dist/domains/anchor/services/anchor/search-strategy-interfaces.js.map +1 -0
  54. package/dist/domains/anchor/services/anchor/vector-search-engine-types.d.ts +18 -0
  55. package/dist/domains/anchor/services/anchor/vector-search-engine-types.d.ts.map +1 -0
  56. package/dist/domains/anchor/services/anchor/vector-search-engine-types.js +11 -0
  57. package/dist/domains/anchor/services/anchor/vector-search-engine-types.js.map +1 -0
  58. package/dist/domains/memory/repositories/core-memory-database.interface.d.ts +47 -0
  59. package/dist/domains/memory/repositories/core-memory-database.interface.d.ts.map +1 -0
  60. package/dist/domains/memory/repositories/core-memory-database.interface.js +7 -0
  61. package/dist/domains/memory/repositories/core-memory-database.interface.js.map +1 -0
  62. package/dist/domains/memory/repositories/core-memory-repository.d.ts +7 -77
  63. package/dist/domains/memory/repositories/core-memory-repository.d.ts.map +1 -1
  64. package/dist/domains/memory/repositories/core-memory-repository.interface.d.ts +92 -0
  65. package/dist/domains/memory/repositories/core-memory-repository.interface.d.ts.map +1 -0
  66. package/dist/domains/memory/repositories/core-memory-repository.interface.js +6 -0
  67. package/dist/domains/memory/repositories/core-memory-repository.interface.js.map +1 -0
  68. package/dist/domains/memory/repositories/core-memory-repository.js +7 -259
  69. package/dist/domains/memory/repositories/core-memory-repository.js.map +1 -1
  70. package/dist/domains/memory/services/core-memory-cache-service.d.ts +55 -0
  71. package/dist/domains/memory/services/core-memory-cache-service.d.ts.map +1 -1
  72. package/dist/domains/memory/services/core-memory-cache-service.js +110 -8
  73. package/dist/domains/memory/services/core-memory-cache-service.js.map +1 -1
  74. package/dist/domains/memory/services/core-memory-service.d.ts +2 -2
  75. package/dist/domains/memory/services/core-memory-service.d.ts.map +1 -1
  76. package/dist/domains/memory/services/core-memory-service.js +43 -24
  77. package/dist/domains/memory/services/core-memory-service.js.map +1 -1
  78. package/dist/domains/memory/tools/recall-tool.d.ts.map +1 -1
  79. package/dist/domains/memory/tools/recall-tool.js +2 -2
  80. package/dist/domains/memory/tools/recall-tool.js.map +1 -1
  81. package/dist/domains/memory/tools/remember-tool.d.ts.map +1 -1
  82. package/dist/domains/memory/tools/remember-tool.js +2 -2
  83. package/dist/domains/memory/tools/remember-tool.js.map +1 -1
  84. package/dist/domains/monitoring/services/performance-monitor.d.ts +8 -0
  85. package/dist/domains/monitoring/services/performance-monitor.d.ts.map +1 -1
  86. package/dist/domains/monitoring/services/performance-monitor.js +16 -0
  87. package/dist/domains/monitoring/services/performance-monitor.js.map +1 -1
  88. package/dist/infrastructure/async-optimizer.d.ts.map +1 -1
  89. package/dist/infrastructure/async-optimizer.js +8 -7
  90. package/dist/infrastructure/async-optimizer.js.map +1 -1
  91. package/dist/infrastructure/database/adapters/sqlite-core-memory-adapter.d.ts +31 -0
  92. package/dist/infrastructure/database/adapters/sqlite-core-memory-adapter.d.ts.map +1 -0
  93. package/dist/infrastructure/database/adapters/sqlite-core-memory-adapter.js +112 -0
  94. package/dist/infrastructure/database/adapters/sqlite-core-memory-adapter.js.map +1 -0
  95. package/dist/infrastructure/database/database/init.d.ts.map +1 -1
  96. package/dist/infrastructure/database/database/init.js +23 -2
  97. package/dist/infrastructure/database/database/init.js.map +1 -1
  98. package/dist/infrastructure/database/database/migration/migrations/010-add-core-memory-version.d.ts +64 -0
  99. package/dist/infrastructure/database/database/migration/migrations/010-add-core-memory-version.d.ts.map +1 -0
  100. package/dist/infrastructure/database/database/migration/migrations/010-add-core-memory-version.js +174 -0
  101. package/dist/infrastructure/database/database/migration/migrations/010-add-core-memory-version.js.map +1 -0
  102. package/dist/infrastructure/database/database/migration/migrations/010-add-core-memory-version.sql +25 -0
  103. package/dist/infrastructure/database/database-lock-monitor.d.ts +105 -0
  104. package/dist/infrastructure/database/database-lock-monitor.d.ts.map +1 -0
  105. package/dist/infrastructure/database/database-lock-monitor.js +265 -0
  106. package/dist/infrastructure/database/database-lock-monitor.js.map +1 -0
  107. package/dist/infrastructure/database/factories/core-memory-repository.factory.d.ts +17 -0
  108. package/dist/infrastructure/database/factories/core-memory-repository.factory.d.ts.map +1 -0
  109. package/dist/infrastructure/database/factories/core-memory-repository.factory.js +43 -0
  110. package/dist/infrastructure/database/factories/core-memory-repository.factory.js.map +1 -0
  111. package/dist/infrastructure/database/repositories/core-memory-repository-sqlite.impl.d.ts +63 -0
  112. package/dist/infrastructure/database/repositories/core-memory-repository-sqlite.impl.d.ts.map +1 -0
  113. package/dist/infrastructure/database/repositories/core-memory-repository-sqlite.impl.js +281 -0
  114. package/dist/infrastructure/database/repositories/core-memory-repository-sqlite.impl.js.map +1 -0
  115. package/dist/infrastructure/database/wal-checkpoint-scheduler.d.ts +166 -0
  116. package/dist/infrastructure/database/wal-checkpoint-scheduler.d.ts.map +1 -0
  117. package/dist/infrastructure/database/wal-checkpoint-scheduler.js +285 -0
  118. package/dist/infrastructure/database/wal-checkpoint-scheduler.js.map +1 -0
  119. package/dist/npm-client/memento-client.d.ts.map +1 -1
  120. package/dist/npm-client/memento-client.js +5 -4
  121. package/dist/npm-client/memento-client.js.map +1 -1
  122. package/dist/npm-client/memory-manager.d.ts.map +1 -1
  123. package/dist/npm-client/memory-manager.js +4 -3
  124. package/dist/npm-client/memory-manager.js.map +1 -1
  125. package/dist/scripts/check-migration-status.d.ts.map +1 -1
  126. package/dist/scripts/check-migration-status.js +1 -0
  127. package/dist/scripts/check-migration-status.js.map +1 -1
  128. package/dist/server/bootstrap.d.ts +4 -0
  129. package/dist/server/bootstrap.d.ts.map +1 -1
  130. package/dist/server/bootstrap.js +27 -2
  131. package/dist/server/bootstrap.js.map +1 -1
  132. package/dist/server/http-server.d.ts.map +1 -1
  133. package/dist/server/http-server.js +59 -31
  134. package/dist/server/http-server.js.map +1 -1
  135. package/dist/server/index.js +32 -16
  136. package/dist/server/index.js.map +1 -1
  137. package/dist/server/simple-mcp-server.d.ts.map +1 -1
  138. package/dist/server/simple-mcp-server.js +15 -14
  139. package/dist/server/simple-mcp-server.js.map +1 -1
  140. package/dist/shared/config/environment.d.ts.map +1 -1
  141. package/dist/shared/config/environment.js +13 -1
  142. package/dist/shared/config/environment.js.map +1 -1
  143. package/dist/shared/config/index.d.ts.map +1 -1
  144. package/dist/shared/config/index.js +13 -1
  145. package/dist/shared/config/index.js.map +1 -1
  146. package/dist/shared/types/index.d.ts +10 -0
  147. package/dist/shared/types/index.d.ts.map +1 -1
  148. package/dist/tools/base-tool.d.ts.map +1 -1
  149. package/dist/tools/base-tool.js +5 -4
  150. package/dist/tools/base-tool.js.map +1 -1
  151. package/dist/tools/migrate-embeddings-tool.d.ts.map +1 -1
  152. package/dist/tools/migrate-embeddings-tool.js +2 -1
  153. package/dist/tools/migrate-embeddings-tool.js.map +1 -1
  154. package/dist/tools/tool-registry.d.ts.map +1 -1
  155. package/dist/tools/tool-registry.js +4 -3
  156. package/dist/tools/tool-registry.js.map +1 -1
  157. package/dist/workers/consolidation-score-worker.d.ts.map +1 -1
  158. package/dist/workers/consolidation-score-worker.js +5 -4
  159. package/dist/workers/consolidation-score-worker.js.map +1 -1
  160. package/package.json +1 -1
  161. package/scripts/check-file-sizes.ts +405 -0
  162. package/scripts/count-any-types.ts +375 -0
  163. 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":"AAAA;;;GAGG;AAUH;;GAEG;AACH,SAAS,iBAAiB,CAAC,MAAW;IACpC,OAAO;QACL,GAAG,MAAM;QACT,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;KACzC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,8BAA8B;IACjC,EAAE,CAA+B;IAEzC,YAAY,EAAgC;QAC1C,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,KAA4B;QACvC,MAAM,EACJ,OAAO,EACP,QAAQ,GAAG,SAAS,EACpB,GAAG,EACH,KAAK,EACL,WAAW,GAAG,KAAK,EACnB,aAAa,GAAG,IAAI,EACrB,GAAG,KAAK,CAAC;QAEV,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAGlC,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;QAElF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;KAalC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAiC,CAAC;QAEvE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,GAAW;QAC3C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;KAalC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAiC,CAAC;QAE7E,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,QAAgB;QAClC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;KAclC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAuB,CAAC;QAE/D,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,QAAiB;QACpC,MAAM,KAAK,GAAG,QAAQ;YACpB,CAAC,CAAC;;;;;;;;;;;;;;OAcD;YACD,CAAC,CAAC;;;;;;;;;;;;;;OAcD,CAAC;QAEJ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,QAAQ;YACtB,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAuB;YAChD,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,EAAwB,CAAC;QAE3C,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,KAA4B;QACxD,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAU,EAAE,CAAC;QAEzB,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QAED,mCAAmC;QACnC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAErB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;YAE3B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;KAEzB,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAE1B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,QAAgB,EAChB,GAAW,EACX,KAA4B;QAE5B,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAU,EAAE,CAAC;QAEzB,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC;QAED,mCAAmC;QACnC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAE3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;YAE3B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;KAEzB,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAE1B,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,OAAe;QAC1B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAGlC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEvC,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,GAAW;QAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAGlC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAE7C,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,QAAgB;QACpC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAGlC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAExC,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;KAalC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,EAAwB,CAAC;QAEvD,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,QAAiB;QAC3B,MAAM,KAAK,GAAG,QAAQ;YACpB,CAAC,CAAC,8DAA8D;YAChE,CAAC,CAAC,2CAA2C,CAAC;QAEhD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,QAAQ;YACrB,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAsB;YAC/C,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,EAAuB,CAAC;QAE1C,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;CACF"}
@@ -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"}