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.
- package/README.md +40 -0
- package/dist/algorithms/hybrid-search-engine.d.ts +6 -0
- package/dist/algorithms/hybrid-search-engine.d.ts.map +1 -1
- package/dist/algorithms/hybrid-search-engine.js +49 -3
- package/dist/algorithms/hybrid-search-engine.js.map +1 -1
- package/dist/algorithms/search-engine.d.ts.map +1 -1
- package/dist/algorithms/search-engine.js +42 -17
- package/dist/algorithms/search-engine.js.map +1 -1
- package/dist/algorithms/search-ranking.d.ts +33 -0
- package/dist/algorithms/search-ranking.d.ts.map +1 -1
- package/dist/algorithms/search-ranking.js +50 -1
- package/dist/algorithms/search-ranking.js.map +1 -1
- package/dist/config/environment.d.ts +7 -0
- package/dist/config/environment.d.ts.map +1 -1
- package/dist/config/environment.js +16 -0
- package/dist/config/environment.js.map +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +4 -2
- package/dist/config/index.js.map +1 -1
- package/dist/database/migration/migrations/003-consolidation-score-fields.d.ts +79 -0
- package/dist/database/migration/migrations/003-consolidation-score-fields.d.ts.map +1 -0
- package/dist/database/migration/migrations/003-consolidation-score-fields.js +264 -0
- package/dist/database/migration/migrations/003-consolidation-score-fields.js.map +1 -0
- package/dist/database/migration/migrations/003-consolidation-score-fields.sql +52 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +72 -1
- package/dist/server/index.js.map +1 -1
- package/dist/services/batch-scheduler.d.ts +17 -0
- package/dist/services/batch-scheduler.d.ts.map +1 -1
- package/dist/services/batch-scheduler.js +144 -0
- package/dist/services/batch-scheduler.js.map +1 -1
- package/dist/services/consolidation-score-service.d.ts +80 -0
- package/dist/services/consolidation-score-service.d.ts.map +1 -0
- package/dist/services/consolidation-score-service.js +182 -0
- package/dist/services/consolidation-score-service.js.map +1 -0
- package/dist/tools/memory-injection-prompt.d.ts +12 -0
- package/dist/tools/memory-injection-prompt.d.ts.map +1 -1
- package/dist/tools/memory-injection-prompt.js +105 -0
- package/dist/tools/memory-injection-prompt.js.map +1 -1
- package/dist/tools/recall-tool.d.ts +11 -0
- package/dist/tools/recall-tool.d.ts.map +1 -1
- package/dist/tools/recall-tool.js +110 -1
- package/dist/tools/recall-tool.js.map +1 -1
- package/dist/tools/remember-tool.d.ts.map +1 -1
- package/dist/tools/remember-tool.js +30 -3
- package/dist/tools/remember-tool.js.map +1 -1
- package/dist/tools/types.d.ts +2 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/types/consolidation-score.types.d.ts +67 -0
- package/dist/types/consolidation-score.types.d.ts.map +1 -0
- package/dist/types/consolidation-score.types.js +5 -0
- package/dist/types/consolidation-score.types.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/write-coalescing.d.ts +75 -0
- package/dist/utils/write-coalescing.d.ts.map +1 -0
- package/dist/utils/write-coalescing.js +133 -0
- package/dist/utils/write-coalescing.js.map +1 -0
- package/dist/workers/consolidation-score-worker.d.ts +99 -0
- package/dist/workers/consolidation-score-worker.d.ts.map +1 -0
- package/dist/workers/consolidation-score-worker.js +406 -0
- package/dist/workers/consolidation-score-worker.js.map +1 -0
- 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":"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"}
|
|
@@ -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;
|
|
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"}
|
package/dist/config/index.js
CHANGED
|
@@ -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 = {
|
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EACL,yBAAyB,EACzB,aAAa,EACb,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACb,cAAc,EACf,MAAM,kBAAkB,CAAC;AAE1B,WAAW;AACX,MAAM,EAAE,CAAC;AAET,MAAM,iBAAiB,GAAI,aAAa,CAAC,oBAAoB,CAAuB,IAAI,QAAQ,CAAC;AAEjG,MAAM,mBAAmB,GACvB,CAAC,qBAAqB,CAAC,sBAAsB,CAAC;IAC9C,yBAAyB,CAAC,iBAAiB,CAAC;IAC5C,yBAAyB,CAAC,MAAM,CAAW,CAAC;AAE9C,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,YAAY;IACZ,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC;IAEhC,YAAY;IACZ,UAAU,EAAE,aAAa,CAAC,iBAAiB,CAAC;IAC5C,aAAa,EAAE,aAAa,CAAC,oBAAoB,CAAC;IAClD,IAAI,EAAE,aAAa,CAAC,iBAAiB,EAAE,EAAE,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;IAElE,SAAS;IACT,iBAAiB;IACjB,YAAY,EAAE,qBAAqB,CAAC,gBAAgB,CAAC;IACrD,WAAW,EAAE,aAAa,CAAC,cAAc,CAAC;IAC1C,YAAY,EAAE,qBAAqB,CAAC,gBAAgB,CAAC;IACrD,WAAW,EAAE,aAAa,CAAC,cAAc,CAAC;IAC1C,mBAAmB;IAEnB,QAAQ;IACR,kBAAkB,EAAE,aAAa,CAAC,sBAAsB,CAAC;IACzD,cAAc,EAAE,aAAa,CAAC,kBAAkB,CAAC;IAEjD,uBAAuB;IACvB,SAAS,EAAE;QACT,OAAO,EAAE,aAAa,CAAC,oBAAoB,CAAC;QAC5C,QAAQ,EAAE,aAAa,CAAC,qBAAqB,CAAC;QAC9C,QAAQ,EAAE,aAAa,CAAC,qBAAqB,CAAC;QAC9C,UAAU,EAAE,aAAa,CAAC,uBAAuB,CAAC;KACnD;IAED,QAAQ;IACR,QAAQ,EAAE,aAAa,CAAC,WAAW,CAAC;IACpC,OAAO,EAAE,qBAAqB,CAAC,UAAU,CAAC;IAE1C,QAAQ;IACR,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC;IAElC,+BAA+B;IAC/B,aAAa,EAAE,kBAAkB,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAC;
|
|
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;
|
|
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"}
|
package/dist/server/index.js
CHANGED
|
@@ -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; // 참조 제거
|