memento-mcp-server 1.9.2 → 1.9.3-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 (64) hide show
  1. package/README.md +40 -0
  2. package/dist/algorithms/hybrid-search-engine.d.ts +6 -0
  3. package/dist/algorithms/hybrid-search-engine.d.ts.map +1 -1
  4. package/dist/algorithms/hybrid-search-engine.js +49 -3
  5. package/dist/algorithms/hybrid-search-engine.js.map +1 -1
  6. package/dist/algorithms/search-engine.d.ts.map +1 -1
  7. package/dist/algorithms/search-engine.js +42 -17
  8. package/dist/algorithms/search-engine.js.map +1 -1
  9. package/dist/algorithms/search-ranking.d.ts +33 -0
  10. package/dist/algorithms/search-ranking.d.ts.map +1 -1
  11. package/dist/algorithms/search-ranking.js +50 -1
  12. package/dist/algorithms/search-ranking.js.map +1 -1
  13. package/dist/config/environment.d.ts +7 -0
  14. package/dist/config/environment.d.ts.map +1 -1
  15. package/dist/config/environment.js +16 -0
  16. package/dist/config/environment.js.map +1 -1
  17. package/dist/config/index.d.ts.map +1 -1
  18. package/dist/config/index.js +4 -2
  19. package/dist/config/index.js.map +1 -1
  20. package/dist/database/migration/migrations/003-consolidation-score-fields.d.ts +79 -0
  21. package/dist/database/migration/migrations/003-consolidation-score-fields.d.ts.map +1 -0
  22. package/dist/database/migration/migrations/003-consolidation-score-fields.js +264 -0
  23. package/dist/database/migration/migrations/003-consolidation-score-fields.js.map +1 -0
  24. package/dist/database/migration/migrations/003-consolidation-score-fields.sql +52 -0
  25. package/dist/server/index.d.ts.map +1 -1
  26. package/dist/server/index.js +72 -1
  27. package/dist/server/index.js.map +1 -1
  28. package/dist/services/batch-scheduler.d.ts +17 -0
  29. package/dist/services/batch-scheduler.d.ts.map +1 -1
  30. package/dist/services/batch-scheduler.js +144 -0
  31. package/dist/services/batch-scheduler.js.map +1 -1
  32. package/dist/services/consolidation-score-service.d.ts +80 -0
  33. package/dist/services/consolidation-score-service.d.ts.map +1 -0
  34. package/dist/services/consolidation-score-service.js +182 -0
  35. package/dist/services/consolidation-score-service.js.map +1 -0
  36. package/dist/tools/memory-injection-prompt.d.ts +12 -0
  37. package/dist/tools/memory-injection-prompt.d.ts.map +1 -1
  38. package/dist/tools/memory-injection-prompt.js +105 -0
  39. package/dist/tools/memory-injection-prompt.js.map +1 -1
  40. package/dist/tools/recall-tool.d.ts +11 -0
  41. package/dist/tools/recall-tool.d.ts.map +1 -1
  42. package/dist/tools/recall-tool.js +110 -1
  43. package/dist/tools/recall-tool.js.map +1 -1
  44. package/dist/tools/remember-tool.d.ts.map +1 -1
  45. package/dist/tools/remember-tool.js +30 -3
  46. package/dist/tools/remember-tool.js.map +1 -1
  47. package/dist/tools/types.d.ts +2 -0
  48. package/dist/tools/types.d.ts.map +1 -1
  49. package/dist/tools/types.js.map +1 -1
  50. package/dist/types/consolidation-score.types.d.ts +67 -0
  51. package/dist/types/consolidation-score.types.d.ts.map +1 -0
  52. package/dist/types/consolidation-score.types.js +5 -0
  53. package/dist/types/consolidation-score.types.js.map +1 -0
  54. package/dist/types/index.d.ts +1 -0
  55. package/dist/types/index.d.ts.map +1 -1
  56. package/dist/utils/write-coalescing.d.ts +75 -0
  57. package/dist/utils/write-coalescing.d.ts.map +1 -0
  58. package/dist/utils/write-coalescing.js +133 -0
  59. package/dist/utils/write-coalescing.js.map +1 -0
  60. package/dist/workers/consolidation-score-worker.d.ts +99 -0
  61. package/dist/workers/consolidation-score-worker.d.ts.map +1 -0
  62. package/dist/workers/consolidation-score-worker.js +406 -0
  63. package/dist/workers/consolidation-score-worker.js.map +1 -0
  64. package/package.json +1 -1
@@ -20,6 +20,13 @@ interface ResolveNumberOptions {
20
20
  }
21
21
  export declare function resolveNumber(key: string, options?: ResolveNumberOptions): number;
22
22
  export declare function resolveOptionalNumber(key: string, options?: ResolveNumberOptions): number | undefined;
23
+ interface ResolveBooleanOptions {
24
+ fallbackKeys?: string[];
25
+ allowEmpty?: boolean;
26
+ useDefault?: boolean;
27
+ defaultValue?: boolean;
28
+ }
29
+ export declare function resolveBoolean(key: string, options?: ResolveBooleanOptions): boolean;
23
30
  export declare const providerDimensionDefaults: Record<string, number>;
24
31
  export declare function getRawEnvValue(key: string): string | undefined;
25
32
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAqBH,UAAU,iBAAiB;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAKD,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,iBAAsB,GAC9B,MAAM,GAAG,SAAS,CAuBpB;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,iBAAsB,GAC9B,MAAM,CAER;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,iBAAsB,GAC9B,MAAM,GAAG,SAAS,CASpB;AAED,UAAU,oBAAoB;IAC5B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,oBAAyB,GACjC,MAAM,CAqBR;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,oBAAyB,GACjC,MAAM,GAAG,SAAS,CAgBpB;AAED,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAM5D,CAAC;AAEF,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE9D"}
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAqBH,UAAU,iBAAiB;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAKD,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,iBAAsB,GAC9B,MAAM,GAAG,SAAS,CAuBpB;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,iBAAsB,GAC9B,MAAM,CAER;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,iBAAsB,GAC9B,MAAM,GAAG,SAAS,CASpB;AAED,UAAU,oBAAoB;IAC5B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,oBAAyB,GACjC,MAAM,CAqBR;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,oBAAyB,GACjC,MAAM,GAAG,SAAS,CAgBpB;AAED,UAAU,qBAAqB;IAC7B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAkBT;AAED,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAM5D,CAAC;AAEF,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE9D"}
@@ -91,6 +91,22 @@ export function resolveOptionalNumber(key, options = {}) {
91
91
  }
92
92
  return parsed;
93
93
  }
94
+ export function resolveBoolean(key, options = {}) {
95
+ const { defaultValue, fallbackKeys, allowEmpty, useDefault } = options;
96
+ const raw = resolveEnv(key, {
97
+ fallbackKeys,
98
+ allowEmpty,
99
+ useDefault: useDefault ?? true,
100
+ defaultValue: defaultValue !== undefined ? String(defaultValue) : undefined
101
+ });
102
+ const fallback = defaultValue ??
103
+ (ENV_DEFAULTS[key] !== undefined ? ENV_DEFAULTS[key] === 'true' : undefined);
104
+ if (raw === undefined) {
105
+ return fallback ?? false;
106
+ }
107
+ const normalized = raw.toLowerCase().trim();
108
+ return normalized === 'true' || normalized === '1' || normalized === 'yes';
109
+ }
94
110
  export const providerDimensionDefaults = {
95
111
  tfidf: 512,
96
112
  lightweight: 384,
@@ -1 +1 @@
1
- {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,YAAY,GAA2B;IAC3C,QAAQ,EAAE,aAAa;IACvB,eAAe,EAAE,gBAAgB;IACjC,kBAAkB,EAAE,OAAO;IAC3B,eAAe,EAAE,MAAM;IACvB,OAAO,EAAE,kBAAkB;IAC3B,SAAS,EAAE,MAAM;IACjB,kBAAkB,EAAE,QAAQ;IAC5B,YAAY,EAAE,wBAAwB;IACtC,YAAY,EAAE,oBAAoB;IAClC,oBAAoB,EAAE,IAAI;IAC1B,gBAAgB,EAAE,IAAI;IACtB,kBAAkB,EAAE,IAAI;IACxB,mBAAmB,EAAE,MAAM;IAC3B,mBAAmB,EAAE,IAAI;IACzB,qBAAqB,EAAE,IAAI;IAC3B,uBAAuB,EAAE,MAAM;CAChC,CAAC;AASF,MAAM,OAAO,GAAG,CAAC,KAAoC,EAAY,EAAE,CACjE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAEtD,MAAM,UAAU,UAAU,CACxB,GAAW,EACX,UAA6B,EAAE;IAE/B,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAE3D,KAAK,MAAM,UAAU,IAAI,UAAU,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC7C,SAAS;QACX,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,OAAO,CAAC,YAAY,CAAC;IAC9B,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QACjC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,GAAW,EACX,UAA6B,EAAE;IAE/B,OAAO,UAAU,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,GAAW,EACX,UAA6B,EAAE;IAE/B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK,EAAE,CAAC,CAAC;IACvF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AASD,MAAM,UAAU,aAAa,CAC3B,GAAW,EACX,UAAgC,EAAE;IAElC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IACvE,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE;QAC1B,YAAY;QACZ,UAAU;QACV,UAAU,EAAE,UAAU,IAAI,IAAI;QAC9B,YAAY,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;KAC5E,CAAC,CAAC;IACH,MAAM,QAAQ,GACZ,YAAY;QACZ,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAEzF,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,QAAQ,IAAI,GAAG,CAAC;IACzB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,QAAQ,IAAI,GAAG,CAAC;IACzB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,GAAW,EACX,UAAgC,EAAE;IAElC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IACvE,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE;QAC1B,YAAY;QACZ,UAAU;QACV,UAAU,EAAE,UAAU,IAAI,KAAK;QAC/B,YAAY,EAAE,SAAS;KACxB,CAAC,CAAC;IACH,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AASD,MAAM,UAAU,cAAc,CAC5B,GAAW,EACX,UAAiC,EAAE;IAEnC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IACvE,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE;QAC1B,YAAY;QACZ,UAAU;QACV,UAAU,EAAE,UAAU,IAAI,IAAI;QAC9B,YAAY,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;KAC5E,CAAC,CAAC;IACH,MAAM,QAAQ,GACZ,YAAY;QACZ,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE/E,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,QAAQ,IAAI,KAAK,CAAC;IAC3B,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5C,OAAO,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,KAAK,CAAC;AAC7E,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAA2B;IAC/D,KAAK,EAAE,GAAG;IACV,WAAW,EAAE,GAAG;IAChB,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,GAAG;CACZ,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAqB,MAAM,mBAAmB,CAAC;AAuB1E,eAAO,MAAM,aAAa,EAAE,aAsC3B,CAAC;AAGF,eAAO,MAAM,oBAAoB;;;;;;CAMhC,CAAC;AAGF,eAAO,MAAM,WAAW;;;;;CAKvB,CAAC;AAGF,wBAAgB,cAAc,IAAI,IAAI,CAKrC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAqB,MAAM,mBAAmB,CAAC;AAwB1E,eAAO,MAAM,aAAa,EAAE,aAyC3B,CAAC;AAGF,eAAO,MAAM,oBAAoB;;;;;;CAMhC,CAAC;AAGF,eAAO,MAAM,WAAW;;;;;CAKvB,CAAC;AAGF,wBAAgB,cAAc,IAAI,IAAI,CAKrC"}
@@ -5,7 +5,7 @@ import { config } from 'dotenv';
5
5
  import { validateConfiguration } from '../utils/configuration-validator.js';
6
6
  import { isValidConfigurationEnvironment } from '../utils/environment-check.js';
7
7
  import { parseTypeParamMode } from '../utils/type-param-validator.js';
8
- import { providerDimensionDefaults, resolveNumber, resolveOptionalNumber, resolveOptionalString, resolveString, getRawEnvValue } from './environment.js';
8
+ import { providerDimensionDefaults, resolveNumber, resolveOptionalNumber, resolveOptionalString, resolveString, resolveBoolean, getRawEnvValue } from './environment.js';
9
9
  // 환경 변수 로드
10
10
  config();
11
11
  const embeddingProvider = resolveString('EMBEDDING_PROVIDER') || 'minilm';
@@ -42,7 +42,9 @@ export const mementoConfig = {
42
42
  // 개발 설정
43
43
  nodeEnv: resolveString('NODE_ENV'),
44
44
  // type 파라미터 롤아웃 모드 설정 (안전한 파싱)
45
- typeParamMode: parseTypeParamMode(getRawEnvValue('MEMENTO_TYPE_PARAM_MODE'))
45
+ typeParamMode: parseTypeParamMode(getRawEnvValue('MEMENTO_TYPE_PARAM_MODE')),
46
+ // Consolidation Score System 설정 (기본값: false - 비활성화)
47
+ consolidationScoreEnabled: resolveBoolean('CONSOLIDATION_SCORE_ENABLED', { defaultValue: false })
46
48
  };
47
49
  // 검색 랭킹 가중치 (Memento-Goals.md 참조)
48
50
  export const searchRankingWeights = {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Migration: 003 - Consolidation Score Fields
3
+ * Description: Add consolidation score system fields to memory_item table
4
+ * Version: 3.0
5
+ * Date: 2025-01-XX
6
+ */
7
+ import type Database from 'better-sqlite3';
8
+ import type { Migration } from '../types.js';
9
+ /**
10
+ * Consolidation Score Fields Migration
11
+ *
12
+ * This migration:
13
+ * 1. Adds recall_count, last_accessed_at, consolidation_score, g_value fields to memory_item table
14
+ * 2. Creates indexes for performance optimization
15
+ * 3. Initializes existing data with default values
16
+ */
17
+ export declare class ConsolidationScoreFieldsMigration implements Migration {
18
+ version: string;
19
+ name: string;
20
+ description: string;
21
+ /**
22
+ * Load SQL file content
23
+ */
24
+ private loadSQLFile;
25
+ /**
26
+ * Execute SQL script
27
+ * Removes transaction commands (BEGIN TRANSACTION, COMMIT) as MigrationRunner manages transactions
28
+ */
29
+ private executeSQL;
30
+ /**
31
+ * Check if table exists
32
+ */
33
+ private tableExists;
34
+ /**
35
+ * Check if column exists in table
36
+ */
37
+ private columnExists;
38
+ /**
39
+ * Check if index exists
40
+ */
41
+ private indexExists;
42
+ /**
43
+ * Validate before migration
44
+ */
45
+ validateBefore(db: Database.Database): Promise<void>;
46
+ /**
47
+ * Calculate S(t) function: (1 - e^(-t)) / (1 + e^(-t))
48
+ * @param t Time elapsed in hours
49
+ */
50
+ private calculateS;
51
+ /**
52
+ * Calculate consolidation score using Hou et al. normalized recall probability formula
53
+ * p_n(t) = (1 - exp(-r * e^(-t/g_n))) / (1 - e^(-1))
54
+ *
55
+ * @param recallCount n: number of recalls
56
+ * @param timeElapsedHours t: time elapsed in hours
57
+ * @param gValue g_n: current decay constant value
58
+ * @param rBase r: initial recall probability constant (default 0.5)
59
+ * @param pinned Whether the memory is pinned (minimum 0.25 if pinned)
60
+ */
61
+ private calculateConsolidationScore;
62
+ /**
63
+ * Get r_base value based on memory type
64
+ */
65
+ private getRBaseForType;
66
+ /**
67
+ * Execute migration (Up)
68
+ */
69
+ up(db: Database.Database): Promise<void>;
70
+ /**
71
+ * Rollback migration (Down)
72
+ */
73
+ down(db: Database.Database): Promise<void>;
74
+ /**
75
+ * Validate after migration
76
+ */
77
+ validateAfter(db: Database.Database): Promise<void>;
78
+ }
79
+ //# sourceMappingURL=003-consolidation-score-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"003-consolidation-score-fields.d.ts","sourceRoot":"","sources":["../../../../src/database/migration/migrations/003-consolidation-score-fields.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C;;;;;;;GAOG;AACH,qBAAa,iCAAkC,YAAW,SAAS;IACjE,OAAO,SAAS;IAChB,IAAI,SAAgC;IACpC,WAAW,SAA+H;IAE1I;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;;OAGG;IACH,OAAO,CAAC,UAAU;IAsBlB;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACG,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B1D;;;OAGG;IACH,OAAO,CAAC,UAAU;IAMlB;;;;;;;;;OASG;IACH,OAAO,CAAC,2BAA2B;IA+BnC;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACG,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA2D9C;;OAEG;IACG,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBhD;;OAEG;IACG,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAqC1D"}
@@ -0,0 +1,264 @@
1
+ /**
2
+ * Migration: 003 - Consolidation Score Fields
3
+ * Description: Add consolidation score system fields to memory_item table
4
+ * Version: 3.0
5
+ * Date: 2025-01-XX
6
+ */
7
+ import { readFileSync } from 'fs';
8
+ import { join, dirname } from 'path';
9
+ import { fileURLToPath } from 'url';
10
+ import { DependencyValidator } from '../dependency-validator.js';
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = dirname(__filename);
13
+ /**
14
+ * Consolidation Score Fields Migration
15
+ *
16
+ * This migration:
17
+ * 1. Adds recall_count, last_accessed_at, consolidation_score, g_value fields to memory_item table
18
+ * 2. Creates indexes for performance optimization
19
+ * 3. Initializes existing data with default values
20
+ */
21
+ export class ConsolidationScoreFieldsMigration {
22
+ version = '3.0';
23
+ name = 'consolidation-score-fields';
24
+ description = 'Add consolidation score system fields to memory_item table (recall_count, last_accessed_at, consolidation_score, g_value)';
25
+ /**
26
+ * Load SQL file content
27
+ */
28
+ loadSQLFile(filename) {
29
+ const filePath = join(__dirname, filename);
30
+ return readFileSync(filePath, 'utf-8');
31
+ }
32
+ /**
33
+ * Execute SQL script
34
+ * Removes transaction commands (BEGIN TRANSACTION, COMMIT) as MigrationRunner manages transactions
35
+ */
36
+ executeSQL(db, sql) {
37
+ // MigrationRunner가 트랜잭션을 관리하므로 SQL에서 트랜잭션 명령 제거
38
+ let cleanedSQL = sql
39
+ // BEGIN TRANSACTION 제거
40
+ .replace(/BEGIN\s+TRANSACTION\s*;/gi, '')
41
+ // COMMIT 제거
42
+ .replace(/COMMIT\s*;/gi, '')
43
+ // PRAGMA foreign_keys 명령은 유지 (트랜잭션 외부에서도 작동)
44
+ .trim();
45
+ // 빈 줄 제거 및 정리
46
+ cleanedSQL = cleanedSQL
47
+ .split('\n')
48
+ .map(line => line.trim())
49
+ .filter(line => line.length > 0)
50
+ .join('\n');
51
+ if (cleanedSQL.length > 0) {
52
+ db.exec(cleanedSQL);
53
+ }
54
+ }
55
+ /**
56
+ * Check if table exists
57
+ */
58
+ tableExists(db, tableName) {
59
+ const result = db.prepare(`
60
+ SELECT name FROM sqlite_master
61
+ WHERE type='table' AND name=?
62
+ `).get(tableName);
63
+ return !!result;
64
+ }
65
+ /**
66
+ * Check if column exists in table
67
+ */
68
+ columnExists(db, tableName, columnName) {
69
+ const columns = db.prepare(`PRAGMA table_info(${tableName})`).all();
70
+ return columns.some(col => col.name === columnName);
71
+ }
72
+ /**
73
+ * Check if index exists
74
+ */
75
+ indexExists(db, indexName) {
76
+ const result = db.prepare(`
77
+ SELECT name FROM sqlite_master
78
+ WHERE type='index' AND name=?
79
+ `).get(indexName);
80
+ return !!result;
81
+ }
82
+ /**
83
+ * Validate before migration
84
+ */
85
+ async validateBefore(db) {
86
+ // Check if memory_item table exists (required for migration)
87
+ if (!this.tableExists(db, 'memory_item')) {
88
+ throw new Error('memory_item table does not exist. Cannot proceed with migration.');
89
+ }
90
+ // Check if migration has already been applied
91
+ if (this.tableExists(db, 'memento_schema_version')) {
92
+ const version = db.prepare(`
93
+ SELECT version FROM memento_schema_version WHERE version = ?
94
+ `).get('3.0');
95
+ if (version) {
96
+ throw new Error('Migration 003 has already been applied. Current schema version: 3.0');
97
+ }
98
+ }
99
+ // Check if any of the new columns already exist (should not exist)
100
+ const newColumns = ['recall_count', 'last_accessed_at', 'consolidation_score', 'g_value'];
101
+ for (const column of newColumns) {
102
+ if (this.columnExists(db, 'memory_item', column)) {
103
+ throw new Error(`Column ${column} already exists in memory_item table. Migration may have been partially applied.`);
104
+ }
105
+ }
106
+ }
107
+ /**
108
+ * Calculate S(t) function: (1 - e^(-t)) / (1 + e^(-t))
109
+ * @param t Time elapsed in hours
110
+ */
111
+ calculateS(t) {
112
+ if (t <= 0)
113
+ return 0;
114
+ const expNegT = Math.exp(-t);
115
+ return (1 - expNegT) / (1 + expNegT);
116
+ }
117
+ /**
118
+ * Calculate consolidation score using Hou et al. normalized recall probability formula
119
+ * p_n(t) = (1 - exp(-r * e^(-t/g_n))) / (1 - e^(-1))
120
+ *
121
+ * @param recallCount n: number of recalls
122
+ * @param timeElapsedHours t: time elapsed in hours
123
+ * @param gValue g_n: current decay constant value
124
+ * @param rBase r: initial recall probability constant (default 0.5)
125
+ * @param pinned Whether the memory is pinned (minimum 0.25 if pinned)
126
+ */
127
+ calculateConsolidationScore(recallCount, timeElapsedHours, gValue, rBase = 0.5, pinned = false) {
128
+ // For n=1 (initial recall), g_0 = 1, so g_1 = 1 + S(t)
129
+ const g_n = recallCount === 1 ? 1.0 + this.calculateS(timeElapsedHours) : gValue;
130
+ if (g_n <= 0 || timeElapsedHours < 0) {
131
+ return pinned ? 0.25 : 0.0;
132
+ }
133
+ // Calculate p_n(t) = (1 - exp(-r * e^(-t/g_n))) / (1 - e^(-1))
134
+ const expNegTOverG = Math.exp(-timeElapsedHours / g_n);
135
+ const numerator = 1 - Math.exp(-rBase * expNegTOverG);
136
+ const denominator = 1 - Math.exp(-1);
137
+ let score = numerator / denominator;
138
+ // Clamp to 0.0 ~ 1.0 range
139
+ score = Math.max(0.0, Math.min(1.0, score));
140
+ // Pinned memories have minimum floor value of 0.25
141
+ if (pinned && score < 0.25) {
142
+ score = 0.25;
143
+ }
144
+ return score;
145
+ }
146
+ /**
147
+ * Get r_base value based on memory type
148
+ */
149
+ getRBaseForType(type) {
150
+ switch (type) {
151
+ case 'procedural':
152
+ return 0.6; // Procedural memory lasts longer
153
+ case 'episodic':
154
+ case 'semantic':
155
+ default:
156
+ return 0.5; // Default value
157
+ }
158
+ }
159
+ /**
160
+ * Execute migration (Up)
161
+ */
162
+ async up(db) {
163
+ // 1. Load and execute SQL script
164
+ const sqlScript = this.loadSQLFile('003-consolidation-score-fields.sql');
165
+ this.executeSQL(db, sqlScript);
166
+ // 2. Initialize existing data
167
+ // 기존 메모리는 recall_count=1, last_accessed_at=created_at, g_value=1로 초기화
168
+ // consolidation_score는 Hou식 정규화 회상확률로 계산 (n=1, t=now-created_at, g_0=1)
169
+ // 먼저 기본값 설정
170
+ db.prepare(`
171
+ UPDATE memory_item
172
+ SET
173
+ recall_count = 1,
174
+ last_accessed_at = created_at,
175
+ g_value = 1.0
176
+ WHERE recall_count IS NULL OR recall_count = 0
177
+ `).run();
178
+ // consolidation_score 계산
179
+ // 각 메모리에 대해 타입별 r_base를 사용하여 점수 계산
180
+ const memories = db.prepare(`
181
+ SELECT id, type, created_at, pinned
182
+ FROM memory_item
183
+ WHERE consolidation_score IS NULL
184
+ `).all();
185
+ const now = Date.now();
186
+ const updateStmt = db.prepare(`
187
+ UPDATE memory_item
188
+ SET consolidation_score = ?
189
+ WHERE id = ?
190
+ `);
191
+ for (const memory of memories) {
192
+ const createdTime = new Date(memory.created_at).getTime();
193
+ const timeElapsedHours = (now - createdTime) / (1000 * 60 * 60); // Convert to hours
194
+ const rBase = this.getRBaseForType(memory.type);
195
+ // pinned는 SQLite에서 0/1 또는 boolean으로 저장될 수 있으므로 변환
196
+ const isPinned = typeof memory.pinned === 'number'
197
+ ? memory.pinned === 1
198
+ : Boolean(memory.pinned);
199
+ const score = this.calculateConsolidationScore(1, // recall_count = 1 (initial)
200
+ timeElapsedHours, 1.0, // g_0 = 1 (initial)
201
+ rBase, isPinned);
202
+ updateStmt.run(score, memory.id);
203
+ }
204
+ // Note: Schema version is recorded by MigrationRunner, not here
205
+ // MigrationRunner.recordVersion() will be called after successful migration
206
+ }
207
+ /**
208
+ * Rollback migration (Down)
209
+ */
210
+ async down(db) {
211
+ // Note: SQLite does not support DROP COLUMN directly
212
+ // In production, this would require recreating the table
213
+ // For now, we'll drop the indexes and leave the columns (they won't cause issues)
214
+ // Drop indexes
215
+ db.exec('DROP INDEX IF EXISTS idx_memory_item_consol_active');
216
+ db.exec('DROP INDEX IF EXISTS idx_memory_item_consol_desc');
217
+ db.exec('DROP INDEX IF EXISTS idx_memory_item_last_accessed');
218
+ // Note: Columns cannot be dropped in SQLite without recreating the table
219
+ // This is a limitation of SQLite. In a production environment, you would need to:
220
+ // 1. Create a new table without these columns
221
+ // 2. Copy data from old table to new table
222
+ // 3. Drop old table and rename new table
223
+ // For now, we'll just remove the schema version record
224
+ // Remove schema version record
225
+ db.prepare('DELETE FROM memento_schema_version WHERE version = ?').run('3.0');
226
+ }
227
+ /**
228
+ * Validate after migration
229
+ */
230
+ async validateAfter(db) {
231
+ // Verify memory_item table still exists
232
+ if (!this.tableExists(db, 'memory_item')) {
233
+ throw new Error('memory_item table was removed during migration');
234
+ }
235
+ // Verify new columns were added
236
+ const requiredColumns = ['recall_count', 'last_accessed_at', 'consolidation_score', 'g_value'];
237
+ for (const column of requiredColumns) {
238
+ if (!this.columnExists(db, 'memory_item', column)) {
239
+ throw new Error(`Column ${column} was not added to memory_item table`);
240
+ }
241
+ }
242
+ // Verify indexes were created
243
+ const requiredIndexes = [
244
+ 'idx_memory_item_last_accessed',
245
+ 'idx_memory_item_consol_desc',
246
+ 'idx_memory_item_consol_active'
247
+ ];
248
+ for (const index of requiredIndexes) {
249
+ if (!this.indexExists(db, index)) {
250
+ throw new Error(`Index ${index} was not created`);
251
+ }
252
+ }
253
+ // Verify existing dependencies are intact using DependencyValidator
254
+ const dependencyReport = await DependencyValidator.validateAll(db);
255
+ if (!dependencyReport.success) {
256
+ const errors = dependencyReport.results
257
+ .filter(r => !r.success)
258
+ .map(r => `${r.name}: ${r.error}`)
259
+ .join('; ');
260
+ throw new Error(`Dependency validation failed: ${errors}`);
261
+ }
262
+ }
263
+ }
264
+ //# sourceMappingURL=003-consolidation-score-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"003-consolidation-score-fields.js","sourceRoot":"","sources":["../../../../src/database/migration/migrations/003-consolidation-score-fields.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ -- Migration: 003 - Consolidation Score Fields
2
+ -- Description: Add consolidation score system fields to memory_item table
3
+ -- Version: 3.0
4
+ -- Date: 2025-01-XX
5
+ --
6
+ -- This migration adds the following fields to memory_item table:
7
+ -- - recall_count: Number of times the memory has been successfully retrieved
8
+ -- - last_accessed_at: Timestamp of the last access
9
+ -- - consolidation_score: Dynamic consolidation score (0.0 ~ 1.0)
10
+ -- - g_value: Current value of decay constant g_n (for performance optimization)
11
+ --
12
+ -- Also creates indexes for performance optimization:
13
+ -- - idx_memory_item_last_accessed: Index on last_accessed_at DESC
14
+ -- - idx_memory_item_consol_desc: Index on consolidation_score DESC
15
+ -- - idx_memory_item_consol_active: Partial index on consolidation_score > 0.2
16
+
17
+ PRAGMA foreign_keys = OFF;
18
+ BEGIN TRANSACTION;
19
+
20
+ -- recall_count 필드 추가 (INTEGER, NOT NULL, DEFAULT 0)
21
+ -- 해당 기억이 성공적으로 검색되어 활용된 횟수
22
+ ALTER TABLE memory_item ADD COLUMN recall_count INTEGER NOT NULL DEFAULT 0;
23
+
24
+ -- last_accessed_at 필드 추가 (TIMESTAMP, NULL 허용)
25
+ -- 해당 기억이 마지막으로 접근된 시간
26
+ ALTER TABLE memory_item ADD COLUMN last_accessed_at TIMESTAMP;
27
+
28
+ -- consolidation_score 필드 추가 (REAL, NULL 허용)
29
+ -- 동적 기억 통합 점수 (0.0 ~ 1.0 범위)
30
+ ALTER TABLE memory_item ADD COLUMN consolidation_score REAL;
31
+
32
+ -- g_value 필드 추가 (REAL, NULL 허용)
33
+ -- 감쇠 상수 g_n의 현재 값 (성능 최적화용)
34
+ -- 점화식 g_n = g_{n-1} + S(t)의 결과를 저장하여 배치 작업 시 연산 비용 절감
35
+ ALTER TABLE memory_item ADD COLUMN g_value REAL;
36
+
37
+ -- 인덱스 생성: last_accessed_at DESC
38
+ -- 최근 접근된 메모리를 빠르게 조회하기 위한 인덱스
39
+ CREATE INDEX IF NOT EXISTS idx_memory_item_last_accessed ON memory_item(last_accessed_at DESC);
40
+
41
+ -- 인덱스 생성: consolidation_score DESC
42
+ -- 높은 통합 점수를 가진 메모리를 빠르게 조회하기 위한 인덱스
43
+ CREATE INDEX IF NOT EXISTS idx_memory_item_consol_desc ON memory_item(consolidation_score DESC);
44
+
45
+ -- Partial Index 생성: consolidation_score > 0.2
46
+ -- 활성화된 메모리(점수 > 0.2)에 대해서만 인덱스를 생성하여 인덱스 크기 최적화
47
+ -- 저점수 메모리는 인덱스에서 제외하여 검색 성능 향상 및 저장 공간 절약
48
+ CREATE INDEX IF NOT EXISTS idx_memory_item_consol_active ON memory_item(consolidation_score) WHERE consolidation_score > 0.2;
49
+
50
+ COMMIT;
51
+ PRAGMA foreign_keys = ON;
52
+
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAiDH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAyB;gBAE5B,OAAO,EAAE,MAAM;IAIrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAW9B,OAAO,IAAI,IAAI;CAQhB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAqDH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAyB;gBAE5B,OAAO,EAAE,MAAM;IAIrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAW9B,OAAO,IAAI,IAAI;CAQhB"}
@@ -20,6 +20,8 @@ import { DatabaseOptimizer } from '../services/database-optimizer.js';
20
20
  import { ErrorLoggingService, ErrorSeverity, ErrorCategory } from '../services/error-logging-service.js';
21
21
  import { PerformanceAlertService, AlertType, AlertLevel } from '../services/performance-alert-service.js';
22
22
  // import { PerformanceMonitoringIntegration } from '../services/performance-monitoring-integration.js';
23
+ import { ConsolidationScoreService } from '../services/consolidation-score-service.js';
24
+ import { WriteCoalescingManager } from '../utils/write-coalescing.js';
23
25
  import { getToolRegistry } from '../tools/index.js';
24
26
  import { MemoryNeighborService } from '../services/memory-neighbor-service.js';
25
27
  import { getVectorSearchEngine } from '../algorithms/vector-search-engine.js';
@@ -37,6 +39,8 @@ let searchCache;
37
39
  let databaseOptimizer;
38
40
  let errorLoggingService;
39
41
  let performanceAlertService;
42
+ let consolidationScoreService = null;
43
+ let writeCoalescingManager = null;
40
44
  // let performanceMonitoringIntegration: PerformanceMonitoringIntegration;
41
45
  // MCP 서버에서는 모든 로그 출력을 완전히 차단
42
46
  // 모든 console 메서드를 빈 함수로 교체
@@ -122,6 +126,61 @@ async function initializeServer() {
122
126
  databaseOptimizer = new DatabaseOptimizer(db);
123
127
  errorLoggingService = new ErrorLoggingService();
124
128
  performanceAlertService = new PerformanceAlertService('./logs');
129
+ // Consolidation Score Service 초기화 (기능 플래그 확인)
130
+ if (mementoConfig.consolidationScoreEnabled) {
131
+ consolidationScoreService = new ConsolidationScoreService();
132
+ // Write Coalescing Manager 초기화 (초당 1회 flush)
133
+ writeCoalescingManager = new WriteCoalescingManager(1000, // 1초마다 flush
134
+ async (writes) => {
135
+ // 배치 업데이트 실행
136
+ if (!db || writes.length === 0) {
137
+ return;
138
+ }
139
+ // db가 null이 아님을 확인했지만 TypeScript가 인식하지 못하므로 명시적 체크
140
+ const currentDb = db;
141
+ if (!currentDb) {
142
+ return;
143
+ }
144
+ try {
145
+ // 트랜잭션으로 배치 업데이트
146
+ await DatabaseUtils.runTransaction(currentDb, async () => {
147
+ for (const write of writes) {
148
+ const updates = [];
149
+ const params = [];
150
+ if (write.fields.recall_count !== undefined) {
151
+ updates.push('recall_count = ?');
152
+ params.push(write.fields.recall_count);
153
+ }
154
+ if (write.fields.last_accessed_at !== undefined) {
155
+ updates.push('last_accessed_at = ?');
156
+ params.push(write.fields.last_accessed_at);
157
+ }
158
+ if (write.fields.g_value !== undefined) {
159
+ updates.push('g_value = ?');
160
+ params.push(write.fields.g_value);
161
+ }
162
+ if (write.fields.consolidation_score !== undefined) {
163
+ updates.push('consolidation_score = ?');
164
+ params.push(write.fields.consolidation_score);
165
+ }
166
+ if (updates.length > 0) {
167
+ params.push(write.memoryId);
168
+ DatabaseUtils.run(currentDb, `UPDATE memory_item SET ${updates.join(', ')} WHERE id = ?`, params);
169
+ }
170
+ }
171
+ });
172
+ }
173
+ catch (error) {
174
+ // 에러 로깅 (하지만 검색 결과는 정상 반환되어야 함)
175
+ process.stderr.write(`⚠️ Write coalescing flush 실패: ${error instanceof Error ? error.message : String(error)}\n`);
176
+ }
177
+ });
178
+ process.stderr.write('✅ Consolidation Score Service 초기화 완료\n');
179
+ process.stderr.write('✅ Write Coalescing Manager 초기화 완료\n');
180
+ }
181
+ else {
182
+ process.stderr.write('ℹ️ Consolidation Score System 비활성화됨\n');
183
+ }
125
184
  // performanceMonitoringIntegration = new PerformanceMonitoringIntegration(
126
185
  // db,
127
186
  // performanceAlertService,
@@ -280,7 +339,9 @@ async function initializeServer() {
280
339
  performanceMonitor,
281
340
  databaseOptimizer,
282
341
  errorLoggingService,
283
- performanceAlertService
342
+ performanceAlertService,
343
+ consolidationScoreService: consolidationScoreService || undefined,
344
+ writeCoalescingManager: writeCoalescingManager || undefined
284
345
  // performanceMonitoringIntegration
285
346
  }
286
347
  };
@@ -367,6 +428,16 @@ async function cleanup() {
367
428
  return; // 이미 정리 중이면 중복 실행 방지
368
429
  }
369
430
  isCleaningUp = true;
431
+ // Write Coalescing Manager의 남은 버퍼 flush
432
+ if (writeCoalescingManager) {
433
+ try {
434
+ await writeCoalescingManager.flush();
435
+ writeCoalescingManager.destroy();
436
+ }
437
+ catch (error) {
438
+ process.stderr.write(`⚠️ Write coalescing flush 실패 (종료 시): ${error instanceof Error ? error.message : String(error)}\n`);
439
+ }
440
+ }
370
441
  if (db) {
371
442
  closeDatabase(db);
372
443
  db = null; // 참조 제거