memento-mcp-server 1.8.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/config/environment.d.ts.map +1 -1
  2. package/dist/config/environment.js +2 -1
  3. package/dist/config/environment.js.map +1 -1
  4. package/dist/config/index.d.ts.map +1 -1
  5. package/dist/config/index.js +5 -2
  6. package/dist/config/index.js.map +1 -1
  7. package/dist/database/init.d.ts.map +1 -1
  8. package/dist/database/init.js +159 -7
  9. package/dist/database/init.js.map +1 -1
  10. package/dist/database/migration/backup-manager.d.ts +55 -0
  11. package/dist/database/migration/backup-manager.d.ts.map +1 -0
  12. package/dist/database/migration/backup-manager.js +181 -0
  13. package/dist/database/migration/backup-manager.js.map +1 -0
  14. package/dist/database/migration/dependency-validator.d.ts +62 -0
  15. package/dist/database/migration/dependency-validator.d.ts.map +1 -0
  16. package/dist/database/migration/dependency-validator.js +260 -0
  17. package/dist/database/migration/dependency-validator.js.map +1 -0
  18. package/dist/database/migration/migration-detector.d.ts +67 -0
  19. package/dist/database/migration/migration-detector.d.ts.map +1 -0
  20. package/dist/database/migration/migration-detector.js +129 -0
  21. package/dist/database/migration/migration-detector.js.map +1 -0
  22. package/dist/database/migration/migration-logger.d.ts +82 -0
  23. package/dist/database/migration/migration-logger.d.ts.map +1 -0
  24. package/dist/database/migration/migration-logger.js +168 -0
  25. package/dist/database/migration/migration-logger.js.map +1 -0
  26. package/dist/database/migration/migration-runner.d.ts +45 -0
  27. package/dist/database/migration/migration-runner.d.ts.map +1 -0
  28. package/dist/database/migration/migration-runner.js +194 -0
  29. package/dist/database/migration/migration-runner.js.map +1 -0
  30. package/dist/database/migration/migrations/002-mirix-schema-expansion.d.ts +55 -0
  31. package/dist/database/migration/migrations/002-mirix-schema-expansion.d.ts.map +1 -0
  32. package/dist/database/migration/migrations/002-mirix-schema-expansion.js +154 -0
  33. package/dist/database/migration/migrations/002-mirix-schema-expansion.js.map +1 -0
  34. package/dist/database/migration/schema-version-manager.d.ts +43 -0
  35. package/dist/database/migration/schema-version-manager.d.ts.map +1 -0
  36. package/dist/database/migration/schema-version-manager.js +146 -0
  37. package/dist/database/migration/schema-version-manager.js.map +1 -0
  38. package/dist/database/migration/types.d.ts +127 -0
  39. package/dist/database/migration/types.d.ts.map +1 -0
  40. package/dist/database/migration/types.js +5 -0
  41. package/dist/database/migration/types.js.map +1 -0
  42. package/dist/database/schema.sql +69 -1
  43. package/dist/npm-client/memento-client.d.ts.map +1 -1
  44. package/dist/npm-client/memento-client.js +39 -8
  45. package/dist/npm-client/memento-client.js.map +1 -1
  46. package/dist/npm-client/types.d.ts +16 -2
  47. package/dist/npm-client/types.d.ts.map +1 -1
  48. package/dist/npm-client/types.js.map +1 -1
  49. package/dist/npm-client/utils.d.ts.map +1 -1
  50. package/dist/npm-client/utils.js +44 -5
  51. package/dist/npm-client/utils.js.map +1 -1
  52. package/dist/repositories/core-memory-repository.d.ts +81 -0
  53. package/dist/repositories/core-memory-repository.d.ts.map +1 -0
  54. package/dist/repositories/core-memory-repository.js +263 -0
  55. package/dist/repositories/core-memory-repository.js.map +1 -0
  56. package/dist/repositories/knowledge-vault-repository.d.ts +102 -0
  57. package/dist/repositories/knowledge-vault-repository.d.ts.map +1 -0
  58. package/dist/repositories/knowledge-vault-repository.js +395 -0
  59. package/dist/repositories/knowledge-vault-repository.js.map +1 -0
  60. package/dist/services/core-memory-cache-service.d.ts +80 -0
  61. package/dist/services/core-memory-cache-service.d.ts.map +1 -0
  62. package/dist/services/core-memory-cache-service.js +122 -0
  63. package/dist/services/core-memory-cache-service.js.map +1 -0
  64. package/dist/services/core-memory-service.d.ts +117 -0
  65. package/dist/services/core-memory-service.d.ts.map +1 -0
  66. package/dist/services/core-memory-service.js +247 -0
  67. package/dist/services/core-memory-service.js.map +1 -0
  68. package/dist/services/knowledge-vault-service.d.ts +114 -0
  69. package/dist/services/knowledge-vault-service.d.ts.map +1 -0
  70. package/dist/services/knowledge-vault-service.js +233 -0
  71. package/dist/services/knowledge-vault-service.js.map +1 -0
  72. package/dist/tools/memory-injection-prompt.d.ts.map +1 -1
  73. package/dist/tools/memory-injection-prompt.js +28 -4
  74. package/dist/tools/memory-injection-prompt.js.map +1 -1
  75. package/dist/tools/recall-tool.d.ts.map +1 -1
  76. package/dist/tools/recall-tool.js +292 -82
  77. package/dist/tools/recall-tool.js.map +1 -1
  78. package/dist/tools/remember-tool.d.ts.map +1 -1
  79. package/dist/tools/remember-tool.js +282 -106
  80. package/dist/tools/remember-tool.js.map +1 -1
  81. package/dist/tools/types.d.ts +9 -2
  82. package/dist/tools/types.d.ts.map +1 -1
  83. package/dist/tools/types.js +11 -2
  84. package/dist/tools/types.js.map +1 -1
  85. package/dist/types/index.d.ts +20 -3
  86. package/dist/types/index.d.ts.map +1 -1
  87. package/dist/types/index.js +7 -1
  88. package/dist/types/index.js.map +1 -1
  89. package/dist/utils/type-param-validator.d.ts +31 -0
  90. package/dist/utils/type-param-validator.d.ts.map +1 -0
  91. package/dist/utils/type-param-validator.js +76 -0
  92. package/dist/utils/type-param-validator.js.map +1 -0
  93. package/package.json +1 -1
  94. package/src/database/schema.sql +69 -1
@@ -0,0 +1,395 @@
1
+ /**
2
+ * Knowledge Vault Repository
3
+ * Knowledge Vault 테이블에 대한 데이터베이스 접근 로직
4
+ */
5
+ import Database from 'better-sqlite3';
6
+ export class KnowledgeVaultRepository {
7
+ db;
8
+ constructor(db) {
9
+ this.db = db;
10
+ }
11
+ /**
12
+ * Knowledge Vault 생성
13
+ */
14
+ async create(input) {
15
+ const { vault_id, agent_id = 'default', key, value, immutable = true, version = 1, previous_version_id = null, admin_override = false, deleted_at = null, origin_source = null } = input;
16
+ this.db.prepare(`
17
+ INSERT INTO knowledge_vault (
18
+ vault_id, agent_id, key, value, immutable, version,
19
+ previous_version_id, admin_override, deleted_at, origin_source
20
+ )
21
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
22
+ `).run(vault_id, agent_id, key, value, immutable ? 1 : 0, version, previous_version_id, admin_override ? 1 : 0, deleted_at, origin_source);
23
+ const result = await this.findById(vault_id);
24
+ if (!result) {
25
+ throw new Error(`Failed to create knowledge vault with id: ${vault_id}`);
26
+ }
27
+ return result;
28
+ }
29
+ /**
30
+ * ID로 Knowledge Vault 조회
31
+ */
32
+ async findById(vault_id) {
33
+ const result = this.db.prepare(`
34
+ SELECT
35
+ vault_id,
36
+ agent_id,
37
+ key,
38
+ value,
39
+ immutable,
40
+ version,
41
+ previous_version_id,
42
+ admin_override,
43
+ deleted_at,
44
+ origin_source,
45
+ created_at,
46
+ updated_at
47
+ FROM knowledge_vault
48
+ WHERE vault_id = ?
49
+ `).get(vault_id);
50
+ if (!result) {
51
+ return null;
52
+ }
53
+ return {
54
+ ...result,
55
+ immutable: Boolean(result.immutable),
56
+ admin_override: Boolean(result.admin_override)
57
+ };
58
+ }
59
+ /**
60
+ * agent_id와 key로 활성 버전 조회 (deleted_at IS NULL인 최신 버전)
61
+ */
62
+ async findActiveByKey(agent_id, key) {
63
+ const result = this.db.prepare(`
64
+ SELECT
65
+ vault_id,
66
+ agent_id,
67
+ key,
68
+ value,
69
+ immutable,
70
+ version,
71
+ previous_version_id,
72
+ admin_override,
73
+ deleted_at,
74
+ origin_source,
75
+ created_at,
76
+ updated_at
77
+ FROM knowledge_vault
78
+ WHERE agent_id = ? AND key = ? AND deleted_at IS NULL
79
+ ORDER BY version DESC
80
+ LIMIT 1
81
+ `).get(agent_id, key);
82
+ if (!result) {
83
+ return null;
84
+ }
85
+ return {
86
+ ...result,
87
+ immutable: Boolean(result.immutable),
88
+ admin_override: Boolean(result.admin_override)
89
+ };
90
+ }
91
+ /**
92
+ * agent_id와 key로 특정 버전 조회
93
+ */
94
+ async findByKeyAndVersion(agent_id, key, version) {
95
+ const result = this.db.prepare(`
96
+ SELECT
97
+ vault_id,
98
+ agent_id,
99
+ key,
100
+ value,
101
+ immutable,
102
+ version,
103
+ previous_version_id,
104
+ admin_override,
105
+ deleted_at,
106
+ origin_source,
107
+ created_at,
108
+ updated_at
109
+ FROM knowledge_vault
110
+ WHERE agent_id = ? AND key = ? AND version = ?
111
+ `).get(agent_id, key, version);
112
+ if (!result) {
113
+ return null;
114
+ }
115
+ return {
116
+ ...result,
117
+ immutable: Boolean(result.immutable),
118
+ admin_override: Boolean(result.admin_override)
119
+ };
120
+ }
121
+ /**
122
+ * agent_id와 key로 모든 버전 조회 (삭제된 것 포함)
123
+ */
124
+ async findAllVersionsByKey(agent_id, key) {
125
+ const results = this.db.prepare(`
126
+ SELECT
127
+ vault_id,
128
+ agent_id,
129
+ key,
130
+ value,
131
+ immutable,
132
+ version,
133
+ previous_version_id,
134
+ admin_override,
135
+ deleted_at,
136
+ origin_source,
137
+ created_at,
138
+ updated_at
139
+ FROM knowledge_vault
140
+ WHERE agent_id = ? AND key = ?
141
+ ORDER BY version ASC
142
+ `).all(agent_id, key);
143
+ return results.map(result => ({
144
+ ...result,
145
+ immutable: Boolean(result.immutable),
146
+ admin_override: Boolean(result.admin_override)
147
+ }));
148
+ }
149
+ /**
150
+ * agent_id로 모든 활성 Knowledge Vault 조회 (deleted_at IS NULL)
151
+ */
152
+ async findActiveByAgentId(agent_id) {
153
+ const results = this.db.prepare(`
154
+ SELECT
155
+ vault_id,
156
+ agent_id,
157
+ key,
158
+ value,
159
+ immutable,
160
+ version,
161
+ previous_version_id,
162
+ admin_override,
163
+ deleted_at,
164
+ origin_source,
165
+ created_at,
166
+ updated_at
167
+ FROM knowledge_vault
168
+ WHERE agent_id = ? AND deleted_at IS NULL
169
+ ORDER BY key, version DESC
170
+ `).all(agent_id);
171
+ // 각 key별 최신 버전만 반환
172
+ const latestByKey = new Map();
173
+ for (const result of results) {
174
+ const existing = latestByKey.get(result.key);
175
+ if (!existing || result.version > existing.version) {
176
+ latestByKey.set(result.key, result);
177
+ }
178
+ }
179
+ return Array.from(latestByKey.values()).map(result => ({
180
+ ...result,
181
+ immutable: Boolean(result.immutable),
182
+ admin_override: Boolean(result.admin_override)
183
+ }));
184
+ }
185
+ /**
186
+ * agent_id로 모든 Knowledge Vault 조회 (삭제된 것 포함)
187
+ */
188
+ async findByAgentId(agent_id) {
189
+ const results = this.db.prepare(`
190
+ SELECT
191
+ vault_id,
192
+ agent_id,
193
+ key,
194
+ value,
195
+ immutable,
196
+ version,
197
+ previous_version_id,
198
+ admin_override,
199
+ deleted_at,
200
+ origin_source,
201
+ created_at,
202
+ updated_at
203
+ FROM knowledge_vault
204
+ WHERE agent_id = ?
205
+ ORDER BY key, version ASC
206
+ `).all(agent_id);
207
+ return results.map(result => ({
208
+ ...result,
209
+ immutable: Boolean(result.immutable),
210
+ admin_override: Boolean(result.admin_override)
211
+ }));
212
+ }
213
+ /**
214
+ * Knowledge Vault 업데이트 (immutable=true인 경우 제한)
215
+ */
216
+ async update(vault_id, input) {
217
+ const existing = await this.findById(vault_id);
218
+ if (!existing) {
219
+ return null;
220
+ }
221
+ // immutable=true이고 admin_override=false인 경우 업데이트 불가
222
+ if (existing.immutable && !existing.admin_override && !input.admin_override) {
223
+ throw new Error(`Cannot update immutable knowledge vault: ${vault_id}`);
224
+ }
225
+ const updates = [];
226
+ const values = [];
227
+ if (input.value !== undefined) {
228
+ updates.push('value = ?');
229
+ values.push(input.value);
230
+ }
231
+ if (input.immutable !== undefined) {
232
+ updates.push('immutable = ?');
233
+ values.push(input.immutable ? 1 : 0);
234
+ }
235
+ if (input.admin_override !== undefined) {
236
+ updates.push('admin_override = ?');
237
+ values.push(input.admin_override ? 1 : 0);
238
+ }
239
+ if (input.origin_source !== undefined) {
240
+ updates.push('origin_source = ?');
241
+ values.push(input.origin_source);
242
+ }
243
+ if (updates.length === 0) {
244
+ return existing;
245
+ }
246
+ values.push(vault_id);
247
+ this.db.prepare(`
248
+ UPDATE knowledge_vault
249
+ SET ${updates.join(', ')}
250
+ WHERE vault_id = ?
251
+ `).run(...values);
252
+ return this.findById(vault_id);
253
+ }
254
+ /**
255
+ * Knowledge Vault 삭제 (soft delete: deleted_at 설정)
256
+ */
257
+ async delete(vault_id) {
258
+ const existing = await this.findById(vault_id);
259
+ if (!existing) {
260
+ return false;
261
+ }
262
+ // immutable=true이고 admin_override=false인 경우 삭제 불가
263
+ if (existing.immutable && !existing.admin_override) {
264
+ throw new Error(`Cannot delete immutable knowledge vault: ${vault_id}`);
265
+ }
266
+ const result = this.db.prepare(`
267
+ UPDATE knowledge_vault
268
+ SET deleted_at = CURRENT_TIMESTAMP
269
+ WHERE vault_id = ?
270
+ `).run(vault_id);
271
+ return result.changes > 0;
272
+ }
273
+ /**
274
+ * agent_id와 key로 활성 버전 삭제 (soft delete)
275
+ */
276
+ async deleteActiveByKey(agent_id, key) {
277
+ const active = await this.findActiveByKey(agent_id, key);
278
+ if (!active) {
279
+ return false;
280
+ }
281
+ // immutable=true이고 admin_override=false인 경우 삭제 불가
282
+ if (active.immutable && !active.admin_override) {
283
+ throw new Error(`Cannot delete immutable knowledge vault: agent_id=${agent_id}, key=${key}`);
284
+ }
285
+ const result = this.db.prepare(`
286
+ UPDATE knowledge_vault
287
+ SET deleted_at = CURRENT_TIMESTAMP
288
+ WHERE agent_id = ? AND key = ? AND deleted_at IS NULL
289
+ `).run(agent_id, key);
290
+ return result.changes > 0;
291
+ }
292
+ /**
293
+ * 하드 삭제 (물리적 삭제, 주의 필요)
294
+ */
295
+ async hardDelete(vault_id) {
296
+ const result = this.db.prepare(`
297
+ DELETE FROM knowledge_vault
298
+ WHERE vault_id = ?
299
+ `).run(vault_id);
300
+ return result.changes > 0;
301
+ }
302
+ /**
303
+ * 모든 Knowledge Vault 조회 (관리용, 삭제된 것 포함)
304
+ */
305
+ async findAll() {
306
+ const results = this.db.prepare(`
307
+ SELECT
308
+ vault_id,
309
+ agent_id,
310
+ key,
311
+ value,
312
+ immutable,
313
+ version,
314
+ previous_version_id,
315
+ admin_override,
316
+ deleted_at,
317
+ origin_source,
318
+ created_at,
319
+ updated_at
320
+ FROM knowledge_vault
321
+ ORDER BY agent_id, key, version ASC
322
+ `).all();
323
+ return results.map(result => ({
324
+ ...result,
325
+ immutable: Boolean(result.immutable),
326
+ admin_override: Boolean(result.admin_override)
327
+ }));
328
+ }
329
+ /**
330
+ * 활성 Knowledge Vault만 조회 (deleted_at IS NULL)
331
+ */
332
+ async findAllActive() {
333
+ const results = this.db.prepare(`
334
+ SELECT
335
+ vault_id,
336
+ agent_id,
337
+ key,
338
+ value,
339
+ immutable,
340
+ version,
341
+ previous_version_id,
342
+ admin_override,
343
+ deleted_at,
344
+ origin_source,
345
+ created_at,
346
+ updated_at
347
+ FROM knowledge_vault
348
+ WHERE deleted_at IS NULL
349
+ ORDER BY agent_id, key, version DESC
350
+ `).all();
351
+ // 각 (agent_id, key) 조합별 최신 버전만 반환
352
+ const latestByKey = new Map();
353
+ for (const result of results) {
354
+ const mapKey = `${result.agent_id}:${result.key}`;
355
+ const existing = latestByKey.get(mapKey);
356
+ if (!existing || result.version > existing.version) {
357
+ latestByKey.set(mapKey, result);
358
+ }
359
+ }
360
+ return Array.from(latestByKey.values()).map(result => ({
361
+ ...result,
362
+ immutable: Boolean(result.immutable),
363
+ admin_override: Boolean(result.admin_override)
364
+ }));
365
+ }
366
+ /**
367
+ * Knowledge Vault 개수 조회
368
+ */
369
+ async count(agent_id, activeOnly = true) {
370
+ const whereClause = agent_id
371
+ ? activeOnly
372
+ ? 'WHERE agent_id = ? AND deleted_at IS NULL'
373
+ : 'WHERE agent_id = ?'
374
+ : activeOnly
375
+ ? 'WHERE deleted_at IS NULL'
376
+ : '';
377
+ const query = `SELECT COUNT(*) as count FROM knowledge_vault ${whereClause}`;
378
+ const result = agent_id
379
+ ? this.db.prepare(query).get(agent_id)
380
+ : this.db.prepare(query).get();
381
+ return result.count;
382
+ }
383
+ /**
384
+ * 다음 버전 번호 조회 (agent_id, key 기준)
385
+ */
386
+ async getNextVersion(agent_id, key) {
387
+ const result = this.db.prepare(`
388
+ SELECT MAX(version) as max_version
389
+ FROM knowledge_vault
390
+ WHERE agent_id = ? AND key = ?
391
+ `).get(agent_id, key);
392
+ return (result?.max_version ?? 0) + 1;
393
+ }
394
+ }
395
+ //# sourceMappingURL=knowledge-vault-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-vault-repository.js","sourceRoot":"","sources":["../../src/repositories/knowledge-vault-repository.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAqCtC,MAAM,OAAO,wBAAwB;IAC3B,EAAE,CAAoB;IAE9B,YAAY,EAAqB;QAC/B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,KAAgC;QAC3C,MAAM,EACJ,QAAQ,EACR,QAAQ,GAAG,SAAS,EACpB,GAAG,EACH,KAAK,EACL,SAAS,GAAG,IAAI,EAChB,OAAO,GAAG,CAAC,EACX,mBAAmB,GAAG,IAAI,EAC1B,cAAc,GAAG,KAAK,EACtB,UAAU,GAAG,IAAI,EACjB,aAAa,GAAG,IAAI,EACrB,GAAG,KAAK,CAAC;QAEV,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;KAMf,CAAC,CAAC,GAAG,CACJ,QAAQ,EACR,QAAQ,EACR,GAAG,EACH,KAAK,EACL,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACjB,OAAO,EACP,mBAAmB,EACnB,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACtB,UAAU,EACV,aAAa,CACd,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,6CAA6C,QAAQ,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;KAgB9B,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAqC,CAAC;QAErD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,GAAG,MAAM;YACT,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;YACpC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;SAC/C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,QAAgB,EAAE,GAAW;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;KAkB9B,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAqC,CAAC;QAE1D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,GAAG,MAAM;YACT,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;YACpC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;SAC/C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CACvB,QAAgB,EAChB,GAAW,EACX,OAAe;QAEf,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;KAgB9B,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAqC,CAAC;QAEnE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,GAAG,MAAM;YACT,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;YACpC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;SAC/C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB,CACxB,QAAgB,EAChB,GAAW;QAEX,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;KAiB/B,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAA2B,CAAC;QAEhD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5B,GAAG,MAAM;YACT,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;YACpC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;SAC/C,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,QAAgB;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;KAiB/B,CAAC,CAAC,GAAG,CAAC,QAAQ,CAA2B,CAAC;QAE3C,mBAAmB;QACnB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAgC,CAAC;QAC5D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACnD,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrD,GAAG,MAAM;YACT,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;YACpC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;SAC/C,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,QAAgB;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;KAiB/B,CAAC,CAAC,GAAG,CAAC,QAAQ,CAA2B,CAAC;QAE3C,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5B,GAAG,MAAM;YACT,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;YACpC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;SAC/C,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,KAAgC;QAC7D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QAED,oDAAoD;QACpD,IAAI,QAAQ,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,4CAA4C,QAAQ,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,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,SAAS,KAAK,SAAS,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,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,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEtB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;YAER,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;KAEzB,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAElB,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,QAAgB;QAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QAED,kDAAkD;QAClD,IAAI,QAAQ,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,4CAA4C,QAAQ,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAI9B,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEjB,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,QAAgB,EAAE,GAAW;QACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACf,CAAC;QAED,kDAAkD;QAClD,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,qDAAqD,QAAQ,SAAS,GAAG,EAAE,CAAC,CAAC;QAC/F,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAI9B,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAEtB,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAG9B,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEjB,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;KAgB/B,CAAC,CAAC,GAAG,EAA4B,CAAC;QAEnC,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5B,GAAG,MAAM;YACT,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;YACpC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;SAC/C,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;KAiB/B,CAAC,CAAC,GAAG,EAA4B,CAAC;QAEnC,kCAAkC;QAClC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAgC,CAAC;QAC5D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YAClD,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACnD,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrD,GAAG,MAAM;YACT,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;YACpC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;SAC/C,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,QAAiB,EAAE,aAAsB,IAAI;QACvD,MAAM,WAAW,GAAG,QAAQ;YAC1B,CAAC,CAAC,UAAU;gBACV,CAAC,CAAC,2CAA2C;gBAC7C,CAAC,CAAC,oBAAoB;YACxB,CAAC,CAAC,UAAU;gBACV,CAAC,CAAC,0BAA0B;gBAC5B,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,KAAK,GAAG,iDAAiD,WAAW,EAAE,CAAC;QAE7E,MAAM,MAAM,GAAG,QAAQ;YACrB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAsB;YAC3D,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,EAAuB,CAAC;QAEtD,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,QAAgB,EAAE,GAAW;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAI9B,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAA+C,CAAC;QAEpE,OAAO,CAAC,MAAM,EAAE,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC;CACF"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Core Memory Cache Service
3
+ * always_load=true인 Core Memory 항목들을 메모리에 캐싱
4
+ *
5
+ * 클린코드 원칙:
6
+ * - 단일 책임 원칙: Core Memory 캐싱만 담당
7
+ * - TTL 없음: always_load=true인 항목은 영구적으로 메모리에 유지
8
+ * - 빠른 조회: Map 기반 O(1) 조회 성능
9
+ */
10
+ import type { CoreMemoryRecord } from '../repositories/core-memory-repository.js';
11
+ import type { CoreMemoryCache } from './core-memory-service.js';
12
+ /**
13
+ * Core Memory Cache Service Implementation
14
+ * always_load=true인 Core Memory 항목들을 메모리에 캐싱
15
+ */
16
+ export declare class CoreMemoryCacheService implements CoreMemoryCache {
17
+ private cache;
18
+ /**
19
+ * 항목을 캐시에 저장
20
+ */
21
+ set(key: string, value: CoreMemoryRecord): void;
22
+ /**
23
+ * 캐시에서 항목 조회
24
+ */
25
+ get(key: string): CoreMemoryRecord | undefined;
26
+ /**
27
+ * 캐시에서 항목 삭제
28
+ */
29
+ delete(key: string): boolean;
30
+ /**
31
+ * 캐시 전체 조회 (always_load=true인 항목들)
32
+ */
33
+ getAll(): CoreMemoryRecord[];
34
+ /**
35
+ * 캐시 무효화
36
+ */
37
+ clear(): void;
38
+ /**
39
+ * 캐시에 항목이 있는지 확인
40
+ */
41
+ has(key: string): boolean;
42
+ /**
43
+ * 캐시 크기 반환
44
+ */
45
+ size(): number;
46
+ /**
47
+ * 캐시 키 목록 반환
48
+ */
49
+ keys(): string[];
50
+ /**
51
+ * agent_id로 필터링된 항목 조회
52
+ */
53
+ getByAgentId(agent_id: string): CoreMemoryRecord[];
54
+ /**
55
+ * agent_id로 필터링된 항목 삭제
56
+ */
57
+ deleteByAgentId(agent_id: string): number;
58
+ /**
59
+ * 캐시 통계 반환
60
+ */
61
+ getStats(): {
62
+ size: number;
63
+ agentIds: string[];
64
+ keys: string[];
65
+ };
66
+ }
67
+ /**
68
+ * 전역 Core Memory Cache 인스턴스 가져오기
69
+ * 서버 초기화 시 생성된 캐시를 공유합니다.
70
+ */
71
+ export declare function getCoreMemoryCache(): CoreMemoryCacheService;
72
+ /**
73
+ * Core Memory Cache 인스턴스 설정 (초기화 시 사용)
74
+ */
75
+ export declare function setCoreMemoryCache(cache: CoreMemoryCacheService): void;
76
+ /**
77
+ * Core Memory Cache 인스턴스 초기화 (테스트용)
78
+ */
79
+ export declare function resetCoreMemoryCache(): void;
80
+ //# sourceMappingURL=core-memory-cache-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-memory-cache-service.d.ts","sourceRoot":"","sources":["../../src/services/core-memory-cache-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;;GAGG;AACH,qBAAa,sBAAuB,YAAW,eAAe;IAC5D,OAAO,CAAC,KAAK,CAA4C;IAEzD;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAI/C;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAI9C;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B;;OAEG;IACH,MAAM,IAAI,gBAAgB,EAAE;IAI5B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;IAIhB;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAMlD;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAWzC;;OAEG;IACH,QAAQ,IAAI;QACV,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,IAAI,EAAE,MAAM,EAAE,CAAC;KAChB;CAYF;AAKD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,sBAAsB,CAK3D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAEtE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Core Memory Cache Service
3
+ * always_load=true인 Core Memory 항목들을 메모리에 캐싱
4
+ *
5
+ * 클린코드 원칙:
6
+ * - 단일 책임 원칙: Core Memory 캐싱만 담당
7
+ * - TTL 없음: always_load=true인 항목은 영구적으로 메모리에 유지
8
+ * - 빠른 조회: Map 기반 O(1) 조회 성능
9
+ */
10
+ /**
11
+ * Core Memory Cache Service Implementation
12
+ * always_load=true인 Core Memory 항목들을 메모리에 캐싱
13
+ */
14
+ export class CoreMemoryCacheService {
15
+ cache = new Map();
16
+ /**
17
+ * 항목을 캐시에 저장
18
+ */
19
+ set(key, value) {
20
+ this.cache.set(key, value);
21
+ }
22
+ /**
23
+ * 캐시에서 항목 조회
24
+ */
25
+ get(key) {
26
+ return this.cache.get(key);
27
+ }
28
+ /**
29
+ * 캐시에서 항목 삭제
30
+ */
31
+ delete(key) {
32
+ return this.cache.delete(key);
33
+ }
34
+ /**
35
+ * 캐시 전체 조회 (always_load=true인 항목들)
36
+ */
37
+ getAll() {
38
+ return Array.from(this.cache.values());
39
+ }
40
+ /**
41
+ * 캐시 무효화
42
+ */
43
+ clear() {
44
+ this.cache.clear();
45
+ }
46
+ /**
47
+ * 캐시에 항목이 있는지 확인
48
+ */
49
+ has(key) {
50
+ return this.cache.has(key);
51
+ }
52
+ /**
53
+ * 캐시 크기 반환
54
+ */
55
+ size() {
56
+ return this.cache.size;
57
+ }
58
+ /**
59
+ * 캐시 키 목록 반환
60
+ */
61
+ keys() {
62
+ return Array.from(this.cache.keys());
63
+ }
64
+ /**
65
+ * agent_id로 필터링된 항목 조회
66
+ */
67
+ getByAgentId(agent_id) {
68
+ return Array.from(this.cache.values()).filter(record => record.agent_id === agent_id);
69
+ }
70
+ /**
71
+ * agent_id로 필터링된 항목 삭제
72
+ */
73
+ deleteByAgentId(agent_id) {
74
+ let deletedCount = 0;
75
+ for (const [key, record] of this.cache.entries()) {
76
+ if (record.agent_id === agent_id) {
77
+ this.cache.delete(key);
78
+ deletedCount++;
79
+ }
80
+ }
81
+ return deletedCount;
82
+ }
83
+ /**
84
+ * 캐시 통계 반환
85
+ */
86
+ getStats() {
87
+ const agentIds = new Set();
88
+ for (const record of this.cache.values()) {
89
+ agentIds.add(record.agent_id);
90
+ }
91
+ return {
92
+ size: this.cache.size,
93
+ agentIds: Array.from(agentIds),
94
+ keys: Array.from(this.cache.keys())
95
+ };
96
+ }
97
+ }
98
+ // 싱글톤 인스턴스
99
+ let cacheInstance = null;
100
+ /**
101
+ * 전역 Core Memory Cache 인스턴스 가져오기
102
+ * 서버 초기화 시 생성된 캐시를 공유합니다.
103
+ */
104
+ export function getCoreMemoryCache() {
105
+ if (!cacheInstance) {
106
+ cacheInstance = new CoreMemoryCacheService();
107
+ }
108
+ return cacheInstance;
109
+ }
110
+ /**
111
+ * Core Memory Cache 인스턴스 설정 (초기화 시 사용)
112
+ */
113
+ export function setCoreMemoryCache(cache) {
114
+ cacheInstance = cache;
115
+ }
116
+ /**
117
+ * Core Memory Cache 인스턴스 초기화 (테스트용)
118
+ */
119
+ export function resetCoreMemoryCache() {
120
+ cacheInstance = null;
121
+ }
122
+ //# sourceMappingURL=core-memory-cache-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-memory-cache-service.js","sourceRoot":"","sources":["../../src/services/core-memory-cache-service.ts"],"names":[],"mappings":"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"}