memento-mcp-server 1.12.0 → 1.13.0-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 (119) hide show
  1. package/dist/algorithms/forgetting-algorithm.d.ts +21 -13
  2. package/dist/algorithms/forgetting-algorithm.d.ts.map +1 -1
  3. package/dist/algorithms/forgetting-algorithm.js +32 -24
  4. package/dist/algorithms/forgetting-algorithm.js.map +1 -1
  5. package/dist/algorithms/hybrid-search-engine.d.ts +11 -9
  6. package/dist/algorithms/hybrid-search-engine.d.ts.map +1 -1
  7. package/dist/algorithms/hybrid-search-engine.js +77 -75
  8. package/dist/algorithms/hybrid-search-engine.js.map +1 -1
  9. package/dist/algorithms/search-engine.d.ts +33 -11
  10. package/dist/algorithms/search-engine.d.ts.map +1 -1
  11. package/dist/algorithms/search-engine.js +157 -62
  12. package/dist/algorithms/search-engine.js.map +1 -1
  13. package/dist/algorithms/search-ranking.d.ts +57 -50
  14. package/dist/algorithms/search-ranking.d.ts.map +1 -1
  15. package/dist/algorithms/search-ranking.js +91 -84
  16. package/dist/algorithms/search-ranking.js.map +1 -1
  17. package/dist/algorithms/spaced-repetition.d.ts +18 -13
  18. package/dist/algorithms/spaced-repetition.d.ts.map +1 -1
  19. package/dist/algorithms/spaced-repetition.js +28 -23
  20. package/dist/algorithms/spaced-repetition.js.map +1 -1
  21. package/dist/algorithms/vector-search-engine-migration.d.ts +8 -6
  22. package/dist/algorithms/vector-search-engine-migration.d.ts.map +1 -1
  23. package/dist/algorithms/vector-search-engine-migration.js +13 -11
  24. package/dist/algorithms/vector-search-engine-migration.js.map +1 -1
  25. package/dist/algorithms/vector-search-engine-refactored.d.ts +7 -7
  26. package/dist/algorithms/vector-search-engine-refactored.d.ts.map +1 -1
  27. package/dist/algorithms/vector-search-engine-refactored.js +7 -7
  28. package/dist/algorithms/vector-search-engine-refactored.js.map +1 -1
  29. package/dist/algorithms/vector-search-engine.d.ts +25 -20
  30. package/dist/algorithms/vector-search-engine.d.ts.map +1 -1
  31. package/dist/algorithms/vector-search-engine.js +47 -43
  32. package/dist/algorithms/vector-search-engine.js.map +1 -1
  33. package/dist/config/index.d.ts.map +1 -1
  34. package/dist/config/index.js +4 -1
  35. package/dist/config/index.js.map +1 -1
  36. package/dist/database/init.d.ts.map +1 -1
  37. package/dist/database/init.js +20 -0
  38. package/dist/database/init.js.map +1 -1
  39. package/dist/database/migration/migrations/006-fts5-reflection-notes-migration-status.sql +30 -0
  40. package/dist/database/migration/migrations/006-fts5-reflection-notes.d.ts +113 -0
  41. package/dist/database/migration/migrations/006-fts5-reflection-notes.d.ts.map +1 -0
  42. package/dist/database/migration/migrations/006-fts5-reflection-notes.js +435 -0
  43. package/dist/database/migration/migrations/006-fts5-reflection-notes.js.map +1 -0
  44. package/dist/database/migration/migrations/006-fts5-reflection-notes.sql +26 -0
  45. package/dist/database/schema.sql +11 -9
  46. package/dist/server/bootstrap.d.ts +4 -0
  47. package/dist/server/bootstrap.d.ts.map +1 -1
  48. package/dist/server/bootstrap.js +11 -1
  49. package/dist/server/bootstrap.js.map +1 -1
  50. package/dist/server/context.d.ts.map +1 -1
  51. package/dist/server/context.js +3 -1
  52. package/dist/server/context.js.map +1 -1
  53. package/dist/server/http-server.d.ts.map +1 -1
  54. package/dist/server/http-server.js +2 -1
  55. package/dist/server/http-server.js.map +1 -1
  56. package/dist/server/index.js +3 -1
  57. package/dist/server/index.js.map +1 -1
  58. package/dist/services/async-optimizer.d.ts +2 -1
  59. package/dist/services/async-optimizer.d.ts.map +1 -1
  60. package/dist/services/async-optimizer.js +28 -1
  61. package/dist/services/async-optimizer.js.map +1 -1
  62. package/dist/services/batch-scheduler.d.ts +5 -1
  63. package/dist/services/batch-scheduler.d.ts.map +1 -1
  64. package/dist/services/batch-scheduler.js +13 -1
  65. package/dist/services/batch-scheduler.js.map +1 -1
  66. package/dist/services/cache-service.js +1 -1
  67. package/dist/services/cache-service.js.map +1 -1
  68. package/dist/services/failure-detector.d.ts +120 -0
  69. package/dist/services/failure-detector.d.ts.map +1 -0
  70. package/dist/services/failure-detector.js +370 -0
  71. package/dist/services/failure-detector.js.map +1 -0
  72. package/dist/services/llm-based-relation-extractor.js +1 -1
  73. package/dist/services/llm-based-relation-extractor.js.map +1 -1
  74. package/dist/services/reflexion-worker.d.ts +170 -0
  75. package/dist/services/reflexion-worker.d.ts.map +1 -0
  76. package/dist/services/reflexion-worker.js +636 -0
  77. package/dist/services/reflexion-worker.js.map +1 -0
  78. package/dist/services/relation-graph.d.ts +2 -2
  79. package/dist/services/relation-graph.js +3 -3
  80. package/dist/services/relation-graph.js.map +1 -1
  81. package/dist/tools/base-tool.d.ts +5 -0
  82. package/dist/tools/base-tool.d.ts.map +1 -1
  83. package/dist/tools/base-tool.js +39 -0
  84. package/dist/tools/base-tool.js.map +1 -1
  85. package/dist/tools/recall-tool.d.ts.map +1 -1
  86. package/dist/tools/recall-tool.js +36 -2
  87. package/dist/tools/recall-tool.js.map +1 -1
  88. package/dist/tools/remember-tool.d.ts +24 -0
  89. package/dist/tools/remember-tool.d.ts.map +1 -1
  90. package/dist/tools/remember-tool.js +445 -273
  91. package/dist/tools/remember-tool.js.map +1 -1
  92. package/dist/tools/types.d.ts +5 -1
  93. package/dist/tools/types.d.ts.map +1 -1
  94. package/dist/tools/types.js +1 -1
  95. package/dist/tools/types.js.map +1 -1
  96. package/dist/types/index.d.ts +2 -0
  97. package/dist/types/index.d.ts.map +1 -1
  98. package/dist/types/index.js.map +1 -1
  99. package/dist/utils/database.d.ts.map +1 -1
  100. package/dist/utils/database.js +34 -10
  101. package/dist/utils/database.js.map +1 -1
  102. package/dist/utils/fts5-migration-status.d.ts +72 -0
  103. package/dist/utils/fts5-migration-status.d.ts.map +1 -0
  104. package/dist/utils/fts5-migration-status.js +304 -0
  105. package/dist/utils/fts5-migration-status.js.map +1 -0
  106. package/dist/utils/reflection-notes-merge.d.ts +58 -0
  107. package/dist/utils/reflection-notes-merge.d.ts.map +1 -0
  108. package/dist/utils/reflection-notes-merge.js +227 -0
  109. package/dist/utils/reflection-notes-merge.js.map +1 -0
  110. package/dist/utils/reflection-notes-normalize.d.ts +43 -0
  111. package/dist/utils/reflection-notes-normalize.d.ts.map +1 -0
  112. package/dist/utils/reflection-notes-normalize.js +164 -0
  113. package/dist/utils/reflection-notes-normalize.js.map +1 -0
  114. package/dist/utils/reflection-notes-schema.d.ts +84 -0
  115. package/dist/utils/reflection-notes-schema.d.ts.map +1 -0
  116. package/dist/utils/reflection-notes-schema.js +215 -0
  117. package/dist/utils/reflection-notes-schema.js.map +1 -0
  118. package/package.json +3 -1
  119. package/src/database/schema.sql +11 -9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"006-fts5-reflection-notes.d.ts","sourceRoot":"","sources":["../../../../src/database/migration/migrations/006-fts5-reflection-notes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAY7C;;;;;;;;GAQG;AACH,qBAAa,4BAA6B,YAAW,SAAS;IAC5D,OAAO,SAAS;IAChB,IAAI,SAA2B;IAC/B,WAAW,SAA0G;IAErH;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;;OAGG;IACH,OAAO,CAAC,UAAU;IAsBlB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;OAEG;IACG,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAoC1D;;;;;;;;OAQG;YACW,mBAAmB;IAiGjC;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,kBAAkB;IAuC1B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IASjC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,6BAA6B;IAmDrC;;OAEG;IACG,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAwC9C;;OAEG;IACG,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBhD;;OAEG;IACG,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CA0E1D"}
@@ -0,0 +1,435 @@
1
+ /**
2
+ * Migration: 006 - FTS5 Reflection Notes Column
3
+ * Description: Create new FTS5 table (memory_item_fts_new) with reflection_notes column for Zero-Downtime migration
4
+ * Version: 6.0
5
+ * Date: 2025-01-XX
6
+ *
7
+ * This migration implements Step 1 of the Zero-Downtime migration strategy:
8
+ * - Creates memory_item_fts_new table with reflection_notes column
9
+ * - Does NOT re-index existing data (handled in Step 2)
10
+ * - Does NOT create triggers (handled in Step 3)
11
+ * - Does NOT replace tables (handled in Step 4)
12
+ *
13
+ * See docs/architecture/zero-downtime-fts5-migration.md for full migration strategy.
14
+ */
15
+ import { readFileSync } from 'fs';
16
+ import { join, dirname } from 'path';
17
+ import { fileURLToPath } from 'url';
18
+ import { DependencyValidator } from '../dependency-validator.js';
19
+ import { normalizeReflectionNotes } from '../../../utils/reflection-notes-normalize.js';
20
+ import { initializeMigrationStatusTable, setMigrationStatus, getMigrationStatus } from '../../../utils/fts5-migration-status.js';
21
+ const __filename = fileURLToPath(import.meta.url);
22
+ const __dirname = dirname(__filename);
23
+ /**
24
+ * FTS5 Reflection Notes Migration (Step 1: New Table Creation)
25
+ *
26
+ * This migration:
27
+ * 1. Creates memory_item_fts_new virtual table with reflection_notes column
28
+ * 2. Validates table creation
29
+ * 3. Does NOT re-index existing data (handled separately)
30
+ * 4. Does NOT create triggers (handled separately)
31
+ */
32
+ export class FTS5ReflectionNotesMigration {
33
+ version = '6.0';
34
+ name = 'fts5-reflection-notes';
35
+ description = 'Create new FTS5 table (memory_item_fts_new) with reflection_notes column for Zero-Downtime migration';
36
+ /**
37
+ * Load SQL file content
38
+ */
39
+ loadSQLFile(filename) {
40
+ const filePath = join(__dirname, filename);
41
+ return readFileSync(filePath, 'utf-8');
42
+ }
43
+ /**
44
+ * Execute SQL script
45
+ * Removes transaction commands (BEGIN TRANSACTION, COMMIT) as MigrationRunner manages transactions
46
+ */
47
+ executeSQL(db, sql) {
48
+ // MigrationRunner가 트랜잭션을 관리하므로 SQL에서 트랜잭션 명령 제거
49
+ let cleanedSQL = sql
50
+ // BEGIN TRANSACTION 제거
51
+ .replace(/BEGIN\s+TRANSACTION\s*;/gi, '')
52
+ // COMMIT 제거
53
+ .replace(/COMMIT\s*;/gi, '')
54
+ // PRAGMA foreign_keys 명령은 유지 (트랜잭션 외부에서도 작동)
55
+ .trim();
56
+ // 빈 줄 제거 및 정리
57
+ cleanedSQL = cleanedSQL
58
+ .split('\n')
59
+ .map(line => line.trim())
60
+ .filter(line => line.length > 0)
61
+ .join('\n');
62
+ if (cleanedSQL.length > 0) {
63
+ db.exec(cleanedSQL);
64
+ }
65
+ }
66
+ /**
67
+ * Check if virtual table exists
68
+ */
69
+ virtualTableExists(db, tableName) {
70
+ const result = db.prepare(`
71
+ SELECT name FROM sqlite_master
72
+ WHERE type='table' AND name=?
73
+ `).get(tableName);
74
+ return !!result;
75
+ }
76
+ /**
77
+ * Validate before migration
78
+ */
79
+ async validateBefore(db) {
80
+ // Check if memory_item table exists (required for content table reference)
81
+ const memoryItemExists = db.prepare(`
82
+ SELECT name FROM sqlite_master
83
+ WHERE type='table' AND name=?
84
+ `).get('memory_item');
85
+ if (!memoryItemExists) {
86
+ throw new Error('memory_item table does not exist. Cannot proceed with migration.');
87
+ }
88
+ // Check if migration has already been applied
89
+ if (this.virtualTableExists(db, 'memento_schema_version')) {
90
+ const version = db.prepare(`
91
+ SELECT version FROM memento_schema_version WHERE version = ?
92
+ `).get('6.0');
93
+ if (version) {
94
+ throw new Error('Migration 006 has already been applied. Current schema version: 6.0');
95
+ }
96
+ }
97
+ // Check if memory_item_fts_new table already exists (should not exist)
98
+ if (this.virtualTableExists(db, 'memory_item_fts_new')) {
99
+ throw new Error('memory_item_fts_new table already exists. Migration may have been partially applied.');
100
+ }
101
+ // Check if FTS5 is available
102
+ try {
103
+ db.exec('CREATE VIRTUAL TABLE IF NOT EXISTS test_fts5 USING fts5(content)');
104
+ db.exec('DROP TABLE IF EXISTS test_fts5');
105
+ }
106
+ catch (error) {
107
+ throw new Error('FTS5 is not available. Cannot proceed with migration.');
108
+ }
109
+ }
110
+ /**
111
+ * Re-index existing data from memory_item to memory_item_fts_new
112
+ *
113
+ * This implements Step 2 of the Zero-Downtime migration strategy:
114
+ * - Processes data in batches (1000 records per batch)
115
+ * - Normalizes reflection_notes using normalizeReflectionNotes utility
116
+ * - Commits each batch separately for performance and safety
117
+ * - Logs progress every 10%
118
+ */
119
+ async reindexExistingData(db) {
120
+ const BATCH_SIZE = 1000;
121
+ const BATCH_DELAY_MS = 10;
122
+ // Get total record count
123
+ const totalCount = db.prepare(`
124
+ SELECT COUNT(*) as count FROM memory_item
125
+ `).get();
126
+ const totalRecords = totalCount.count;
127
+ if (totalRecords === 0) {
128
+ console.log('[Migration 006] No records to re-index');
129
+ return;
130
+ }
131
+ console.log(`[Migration 006] Starting re-indexing: ${totalRecords} records`);
132
+ let processedCount = 0;
133
+ let offset = 0;
134
+ let lastLoggedPercent = -1;
135
+ // Prepare statements
136
+ const selectStmt = db.prepare(`
137
+ SELECT rowid, content, tags, source, reflection_notes
138
+ FROM memory_item
139
+ ORDER BY rowid
140
+ LIMIT ? OFFSET ?
141
+ `);
142
+ const insertStmt = db.prepare(`
143
+ INSERT INTO memory_item_fts_new(rowid, content, tags, source, reflection_notes)
144
+ VALUES (?, ?, ?, ?, ?)
145
+ `);
146
+ // Process in batches
147
+ while (offset < totalRecords) {
148
+ // Start batch transaction
149
+ db.exec('BEGIN TRANSACTION');
150
+ try {
151
+ // Fetch batch
152
+ const batch = selectStmt.all(BATCH_SIZE, offset);
153
+ if (batch.length === 0) {
154
+ db.exec('COMMIT');
155
+ break;
156
+ }
157
+ // Insert each record with normalized reflection_notes
158
+ for (const record of batch) {
159
+ // Normalize reflection_notes for FTS5 indexing
160
+ const normalizedReflectionNotes = normalizeReflectionNotes(record.reflection_notes);
161
+ insertStmt.run(record.rowid, record.content, record.tags, record.source, normalizedReflectionNotes || null // Empty string becomes null
162
+ );
163
+ }
164
+ // Commit batch
165
+ db.exec('COMMIT');
166
+ processedCount += batch.length;
167
+ offset += BATCH_SIZE;
168
+ // Log progress every 10%
169
+ const currentPercent = Math.floor((processedCount / totalRecords) * 100);
170
+ if (currentPercent >= lastLoggedPercent + 10 || processedCount === totalRecords) {
171
+ console.log(`[Migration 006] Re-indexing progress: ${processedCount}/${totalRecords} (${currentPercent}%)`);
172
+ }
173
+ // Delay between batches to minimize impact on other operations
174
+ if (offset < totalRecords) {
175
+ await new Promise(resolve => setTimeout(resolve, BATCH_DELAY_MS));
176
+ }
177
+ }
178
+ catch (error) {
179
+ // Rollback batch on error
180
+ db.exec('ROLLBACK');
181
+ throw new Error(`Re-indexing failed at batch starting at offset ${offset}: ${error instanceof Error ? error.message : String(error)}`);
182
+ }
183
+ }
184
+ console.log(`[Migration 006] Re-indexing completed: ${processedCount} records`);
185
+ }
186
+ /**
187
+ * Create temporary dual triggers for synchronizing new writes during migration
188
+ *
189
+ * This implements Step 3 of the Zero-Downtime migration strategy:
190
+ * - Creates temporary triggers that insert into memory_item_fts_new
191
+ * - Existing triggers continue to insert into memory_item_fts
192
+ * - Both tables are kept in sync during migration
193
+ *
194
+ * Duplicate Insert Prevention:
195
+ * - FTS5 automatically handles duplicate rowid inserts (updates existing record)
196
+ * - Triggers fire only once per INSERT/UPDATE/DELETE event, so duplicates are unlikely
197
+ * - Transaction-level duplicate prevention is handled at application level
198
+ *
199
+ * Note: reflection_notes normalization is applied using normalize_reflection_notes function.
200
+ */
201
+ createDualTriggers(db) {
202
+ console.log('[Migration 006] Creating temporary dual triggers...');
203
+ // Register normalize_reflection_notes function before creating triggers
204
+ this.registerNormalizeFunction(db);
205
+ // INSERT trigger: Insert new records into memory_item_fts_new with normalization
206
+ // FTS5 automatically handles duplicate rowid: if rowid exists, it updates the record
207
+ db.exec(`
208
+ CREATE TRIGGER IF NOT EXISTS memory_item_fts_insert_new AFTER INSERT ON memory_item BEGIN
209
+ INSERT INTO memory_item_fts_new(rowid, content, tags, source, reflection_notes)
210
+ VALUES (new.rowid, new.content, new.tags, new.source, normalize_reflection_notes(new.reflection_notes));
211
+ END
212
+ `);
213
+ // UPDATE trigger: Update records in memory_item_fts_new with normalization
214
+ // Delete old record first, then insert new record
215
+ db.exec(`
216
+ CREATE TRIGGER IF NOT EXISTS memory_item_fts_update_new AFTER UPDATE ON memory_item BEGIN
217
+ -- Delete old record
218
+ INSERT INTO memory_item_fts_new(memory_item_fts_new, rowid, content, tags, source, reflection_notes)
219
+ VALUES('delete', old.rowid, old.content, old.tags, old.source, normalize_reflection_notes(old.reflection_notes));
220
+ -- Insert new record
221
+ INSERT INTO memory_item_fts_new(rowid, content, tags, source, reflection_notes)
222
+ VALUES (new.rowid, new.content, new.tags, new.source, normalize_reflection_notes(new.reflection_notes));
223
+ END
224
+ `);
225
+ // DELETE trigger: Delete records from memory_item_fts_new with normalization
226
+ db.exec(`
227
+ CREATE TRIGGER IF NOT EXISTS memory_item_fts_delete_new AFTER DELETE ON memory_item BEGIN
228
+ INSERT INTO memory_item_fts_new(memory_item_fts_new, rowid, content, tags, source, reflection_notes)
229
+ VALUES('delete', old.rowid, old.content, old.tags, old.source, normalize_reflection_notes(old.reflection_notes));
230
+ END
231
+ `);
232
+ console.log('[Migration 006] Temporary dual triggers created');
233
+ }
234
+ /**
235
+ * Drop temporary dual triggers
236
+ * Used for rollback or cleanup
237
+ */
238
+ dropDualTriggers(db) {
239
+ db.exec('DROP TRIGGER IF EXISTS memory_item_fts_insert_new');
240
+ db.exec('DROP TRIGGER IF EXISTS memory_item_fts_update_new');
241
+ db.exec('DROP TRIGGER IF EXISTS memory_item_fts_delete_new');
242
+ }
243
+ /**
244
+ * Check if trigger exists
245
+ */
246
+ triggerExists(db, triggerName) {
247
+ const result = db.prepare(`
248
+ SELECT name FROM sqlite_master
249
+ WHERE type='trigger' AND name=?
250
+ `).get(triggerName);
251
+ return !!result;
252
+ }
253
+ /**
254
+ * Register normalize_reflection_notes user-defined function
255
+ * This function must be registered before triggers that use it
256
+ */
257
+ registerNormalizeFunction(db) {
258
+ db.function('normalize_reflection_notes', {
259
+ deterministic: true,
260
+ varargs: false
261
+ }, (reflectionNotes) => {
262
+ return normalizeReflectionNotes(reflectionNotes);
263
+ });
264
+ }
265
+ /**
266
+ * Perform atomic table replacement
267
+ *
268
+ * This implements Step 4 of the Zero-Downtime migration strategy:
269
+ * - Drops existing triggers
270
+ * - Drops temporary dual triggers
271
+ * - Drops existing FTS5 table
272
+ * - Renames new table to original name
273
+ * - Creates new triggers with reflection_notes support and normalization
274
+ *
275
+ * All operations are performed in a single transaction for atomicity.
276
+ */
277
+ performAtomicTableReplacement(db) {
278
+ console.log('[Migration 006] Performing atomic table replacement...');
279
+ // Register normalize_reflection_notes function before creating triggers
280
+ this.registerNormalizeFunction(db);
281
+ // MigrationRunner가 트랜잭션을 관리하므로 여기서는 트랜잭션을 시작하지 않음
282
+ // All operations are performed within the existing transaction managed by MigrationRunner
283
+ // 1. Drop existing triggers
284
+ db.exec('DROP TRIGGER IF EXISTS memory_item_fts_insert');
285
+ db.exec('DROP TRIGGER IF EXISTS memory_item_fts_update');
286
+ db.exec('DROP TRIGGER IF EXISTS memory_item_fts_delete');
287
+ // 2. Drop temporary dual triggers
288
+ this.dropDualTriggers(db);
289
+ // 3. Drop existing FTS5 table
290
+ db.exec('DROP TABLE IF EXISTS memory_item_fts');
291
+ // 4. Rename new table to original name
292
+ db.exec('ALTER TABLE memory_item_fts_new RENAME TO memory_item_fts');
293
+ // 5. Create new triggers with reflection_notes support and normalization
294
+ // Note: normalize_reflection_notes function must be registered before this migration
295
+ db.exec(`
296
+ CREATE TRIGGER memory_item_fts_insert AFTER INSERT ON memory_item BEGIN
297
+ INSERT INTO memory_item_fts(rowid, content, tags, source, reflection_notes)
298
+ VALUES (new.rowid, new.content, new.tags, new.source, normalize_reflection_notes(new.reflection_notes));
299
+ END
300
+ `);
301
+ db.exec(`
302
+ CREATE TRIGGER memory_item_fts_update AFTER UPDATE ON memory_item BEGIN
303
+ INSERT INTO memory_item_fts(memory_item_fts, rowid, content, tags, source, reflection_notes)
304
+ VALUES('delete', old.rowid, old.content, old.tags, old.source, normalize_reflection_notes(old.reflection_notes));
305
+ INSERT INTO memory_item_fts(rowid, content, tags, source, reflection_notes)
306
+ VALUES (new.rowid, new.content, new.tags, new.source, normalize_reflection_notes(new.reflection_notes));
307
+ END
308
+ `);
309
+ db.exec(`
310
+ CREATE TRIGGER memory_item_fts_delete AFTER DELETE ON memory_item BEGIN
311
+ INSERT INTO memory_item_fts(memory_item_fts, rowid, content, tags, source, reflection_notes)
312
+ VALUES('delete', old.rowid, old.content, old.tags, old.source, normalize_reflection_notes(old.reflection_notes));
313
+ END
314
+ `);
315
+ console.log('[Migration 006] Atomic table replacement completed');
316
+ }
317
+ /**
318
+ * Execute migration (Up)
319
+ */
320
+ async up(db) {
321
+ // Initialize migration status table
322
+ initializeMigrationStatusTable(db);
323
+ // Update status to 'in_progress'
324
+ setMigrationStatus(db, 'in_progress');
325
+ try {
326
+ // Step 1: Load and execute SQL script (create new table)
327
+ const sqlScript = this.loadSQLFile('006-fts5-reflection-notes.sql');
328
+ this.executeSQL(db, sqlScript);
329
+ // Step 2: Re-index existing data
330
+ await this.reindexExistingData(db);
331
+ // Step 3: Create temporary dual triggers
332
+ this.createDualTriggers(db);
333
+ // Step 4: Perform atomic table replacement
334
+ this.performAtomicTableReplacement(db);
335
+ // Update status to 'completed'
336
+ setMigrationStatus(db, 'completed');
337
+ // Note: Schema version is recorded by MigrationRunner, not here
338
+ // MigrationRunner.recordVersion() will be called after successful migration
339
+ //
340
+ // Note: This migration implements Steps 1, 2, 3, and 4 of the Zero-Downtime migration strategy.
341
+ // Trigger update with reflection_notes normalization (Step 3.8) is handled separately.
342
+ }
343
+ catch (error) {
344
+ // Update status to 'failed' on error
345
+ setMigrationStatus(db, 'failed', error instanceof Error ? error.message : String(error));
346
+ throw error; // Re-throw to trigger rollback
347
+ }
348
+ }
349
+ /**
350
+ * Rollback migration (Down)
351
+ */
352
+ async down(db) {
353
+ // Drop temporary dual triggers
354
+ this.dropDualTriggers(db);
355
+ // Drop the new FTS5 table
356
+ db.exec('DROP TABLE IF EXISTS memory_item_fts_new');
357
+ // Update status to 'pending' (재시도 가능하도록)
358
+ try {
359
+ setMigrationStatus(db, 'pending');
360
+ }
361
+ catch (error) {
362
+ // 상태 업데이트 실패는 무시 (롤백은 계속 진행)
363
+ console.warn('마이그레이션 상태 롤백 실패:', error);
364
+ }
365
+ // Remove schema version record
366
+ db.prepare('DELETE FROM memento_schema_version WHERE version = ?').run('6.0');
367
+ }
368
+ /**
369
+ * Validate after migration
370
+ */
371
+ async validateAfter(db) {
372
+ // After atomic table replacement, memory_item_fts_new should not exist
373
+ // and memory_item_fts should exist with reflection_notes column
374
+ // Verify memory_item_fts table exists (renamed from memory_item_fts_new)
375
+ if (!this.virtualTableExists(db, 'memory_item_fts')) {
376
+ throw new Error('memory_item_fts table was not created or renamed');
377
+ }
378
+ // Verify memory_item_fts_new table does not exist (should be renamed)
379
+ if (this.virtualTableExists(db, 'memory_item_fts_new')) {
380
+ throw new Error('memory_item_fts_new table still exists (should be renamed to memory_item_fts)');
381
+ }
382
+ // Verify table structure by checking if it's a virtual table
383
+ const tableInfo = db.prepare(`
384
+ SELECT sql FROM sqlite_master
385
+ WHERE type='table' AND name='memory_item_fts'
386
+ `).get();
387
+ if (!tableInfo) {
388
+ throw new Error('memory_item_fts table information not found');
389
+ }
390
+ // Verify reflection_notes column is included in the table definition
391
+ if (!tableInfo.sql.includes('reflection_notes')) {
392
+ throw new Error('reflection_notes column was not included in memory_item_fts table');
393
+ }
394
+ // Verify content table reference
395
+ if (!tableInfo.sql.includes("content='memory_item'")) {
396
+ throw new Error("content table reference 'memory_item' was not found in memory_item_fts table");
397
+ }
398
+ // Verify content_rowid reference
399
+ if (!tableInfo.sql.includes("content_rowid='rowid'")) {
400
+ throw new Error("content_rowid='rowid' was not found in memory_item_fts table");
401
+ }
402
+ // Verify new triggers were created (temporary dual triggers should be removed)
403
+ const requiredTriggers = [
404
+ 'memory_item_fts_insert',
405
+ 'memory_item_fts_update',
406
+ 'memory_item_fts_delete'
407
+ ];
408
+ for (const triggerName of requiredTriggers) {
409
+ if (!this.triggerExists(db, triggerName)) {
410
+ throw new Error(`New trigger ${triggerName} was not created`);
411
+ }
412
+ }
413
+ // Verify temporary dual triggers were removed
414
+ const temporaryTriggers = [
415
+ 'memory_item_fts_insert_new',
416
+ 'memory_item_fts_update_new',
417
+ 'memory_item_fts_delete_new'
418
+ ];
419
+ for (const triggerName of temporaryTriggers) {
420
+ if (this.triggerExists(db, triggerName)) {
421
+ throw new Error(`Temporary dual trigger ${triggerName} still exists (should be removed)`);
422
+ }
423
+ }
424
+ // Verify existing dependencies are intact using DependencyValidator
425
+ const dependencyReport = await DependencyValidator.validateAll(db);
426
+ if (!dependencyReport.success) {
427
+ const errors = dependencyReport.results
428
+ .filter(r => !r.success)
429
+ .map(r => `${r.name}: ${r.error}`)
430
+ .join('; ');
431
+ throw new Error(`Dependency validation failed: ${errors}`);
432
+ }
433
+ }
434
+ }
435
+ //# sourceMappingURL=006-fts5-reflection-notes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"006-fts5-reflection-notes.js","sourceRoot":"","sources":["../../../../src/database/migration/migrations/006-fts5-reflection-notes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ -- Migration: 006 - FTS5 Reflection Notes Column
2
+ -- Description: Create new FTS5 table (memory_item_fts_new) with reflection_notes column for Zero-Downtime migration
3
+ -- Version: 6.0
4
+ -- Date: 2025-01-XX
5
+ --
6
+ -- This is Step 1 of the Zero-Downtime migration strategy:
7
+ -- 1. Create new FTS5 table with reflection_notes column
8
+ -- 2. Re-index existing data (Step 2, handled separately)
9
+ -- 3. Create temporary dual triggers (Step 3, handled separately)
10
+ -- 4. Atomic table replacement (Step 4, handled separately)
11
+ -- 5. Activate new triggers (Step 5, handled separately)
12
+
13
+ -- Create new FTS5 virtual table with reflection_notes column
14
+ CREATE VIRTUAL TABLE IF NOT EXISTS memory_item_fts_new USING fts5(
15
+ content,
16
+ tags,
17
+ source,
18
+ reflection_notes, -- New column for reflection notes search
19
+ content='memory_item',
20
+ content_rowid='rowid'
21
+ );
22
+
23
+ -- Note: This migration only creates the new table.
24
+ -- Data re-indexing, trigger creation, and table replacement are handled in subsequent steps
25
+ -- to ensure Zero-Downtime migration.
26
+
@@ -98,26 +98,28 @@ CREATE VIRTUAL TABLE IF NOT EXISTS memory_item_fts USING fts5(
98
98
  content,
99
99
  tags,
100
100
  source,
101
+ reflection_notes,
101
102
  content='memory_item',
102
103
  content_rowid='rowid'
103
104
  );
104
105
 
105
- -- FTS5 트리거 (자동 동기화)
106
+ -- FTS5 트리거 (자동 동기화, reflection_notes 정규화 포함)
107
+ -- Note: normalize_reflection_notes 함수는 데이터베이스 초기화 시 등록되어야 함
106
108
  CREATE TRIGGER IF NOT EXISTS memory_item_fts_insert AFTER INSERT ON memory_item BEGIN
107
- INSERT INTO memory_item_fts(rowid, content, tags, source)
108
- VALUES (new.rowid, new.content, new.tags, new.source);
109
+ INSERT INTO memory_item_fts(rowid, content, tags, source, reflection_notes)
110
+ VALUES (new.rowid, new.content, new.tags, new.source, normalize_reflection_notes(new.reflection_notes));
109
111
  END;
110
112
 
111
113
  CREATE TRIGGER IF NOT EXISTS memory_item_fts_delete AFTER DELETE ON memory_item BEGIN
112
- INSERT INTO memory_item_fts(memory_item_fts, rowid, content, tags, source)
113
- VALUES('delete', old.rowid, old.content, old.tags, old.source);
114
+ INSERT INTO memory_item_fts(memory_item_fts, rowid, content, tags, source, reflection_notes)
115
+ VALUES('delete', old.rowid, old.content, old.tags, old.source, normalize_reflection_notes(old.reflection_notes));
114
116
  END;
115
117
 
116
118
  CREATE TRIGGER IF NOT EXISTS memory_item_fts_update AFTER UPDATE ON memory_item BEGIN
117
- INSERT INTO memory_item_fts(memory_item_fts, rowid, content, tags, source)
118
- VALUES('delete', old.rowid, old.content, old.tags, old.source);
119
- INSERT INTO memory_item_fts(rowid, content, tags, source)
120
- VALUES (new.rowid, new.content, new.tags, new.source);
119
+ INSERT INTO memory_item_fts(memory_item_fts, rowid, content, tags, source, reflection_notes)
120
+ VALUES('delete', old.rowid, old.content, old.tags, old.source, normalize_reflection_notes(old.reflection_notes));
121
+ INSERT INTO memory_item_fts(rowid, content, tags, source, reflection_notes)
122
+ VALUES (new.rowid, new.content, new.tags, new.source, normalize_reflection_notes(new.reflection_notes));
121
123
  END;
122
124
 
123
125
  -- 임베딩 저장 테이블 (다중 제공자/차원 지원)
@@ -14,6 +14,8 @@ import { PerformanceAlertService } from '../services/performance-alert-service.j
14
14
  import { ConsolidationScoreService } from '../services/consolidation-score-service.js';
15
15
  import { WriteCoalescingManager } from '../utils/write-coalescing.js';
16
16
  import { AnchorManager } from '../services/anchor-manager.js';
17
+ import { FailureDetector } from '../services/failure-detector.js';
18
+ import { ReflexionWorker } from '../services/reflexion-worker.js';
17
19
  /**
18
20
  * 서버 서비스 집합 인터페이스
19
21
  *
@@ -43,6 +45,8 @@ export interface ServerServices {
43
45
  consolidationScoreService?: ConsolidationScoreService;
44
46
  writeCoalescingManager?: WriteCoalescingManager;
45
47
  anchorManager: AnchorManager;
48
+ failureDetector: FailureDetector;
49
+ reflexionWorker?: ReflexionWorker;
46
50
  }
47
51
  /**
48
52
  * 모든 서비스를 초기화하는 공용 부트스트랩 함수
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/server/bootstrap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAE3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAuB,MAAM,8BAA8B,CAAC;AAE3F,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAG9D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,cAAc;IAE7B,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,gBAAgB,EAAE,sBAAsB,CAAC;IACzC,uBAAuB,EAAE,uBAAuB,CAAC;IACjD,kBAAkB,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;IAC7D,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,uBAAuB,EAAE,uBAAuB,CAAC;IAGjD,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IACtD,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAEhD,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CA8GvF"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/server/bootstrap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAE3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAuB,MAAM,8BAA8B,CAAC;AAE3F,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,cAAc;IAE7B,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,gBAAgB,EAAE,sBAAsB,CAAC;IACzC,uBAAuB,EAAE,uBAAuB,CAAC;IACjD,kBAAkB,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;IAC7D,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,uBAAuB,EAAE,uBAAuB,CAAC;IAGjD,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IACtD,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAEhD,aAAa,EAAE,aAAa,CAAC;IAE7B,eAAe,EAAE,eAAe,CAAC;IAEjC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAwHvF"}
@@ -17,6 +17,8 @@ import { ConsolidationScoreService } from '../services/consolidation-score-servi
17
17
  import { WriteCoalescingManager } from '../utils/write-coalescing.js';
18
18
  import { DatabaseUtils } from '../utils/database.js';
19
19
  import { AnchorManager } from '../services/anchor-manager.js';
20
+ import { FailureDetector } from '../services/failure-detector.js';
21
+ import { ReflexionWorker } from '../services/reflexion-worker.js';
20
22
  import { getVectorSearchEngine } from '../algorithms/vector-search-engine.js';
21
23
  /**
22
24
  * 모든 서비스를 초기화하는 공용 부트스트랩 함수
@@ -54,6 +56,12 @@ export async function initializeServices(db) {
54
56
  anchorManager.setVectorSearchEngine(getVectorSearchEngine());
55
57
  // 서버 시작 시 DB에서 앵커 상태 복원
56
58
  await anchorManager.restoreCacheFromDB(db);
59
+ // 2.6. 실패 감지 서비스 초기화 (Phase 2)
60
+ const failureDetector = new FailureDetector();
61
+ await failureDetector.startQueue(); // 큐 시작
62
+ // 2.7. Reflexion Worker 초기화 (Phase 2)
63
+ const reflexionWorker = new ReflexionWorker(failureDetector, db);
64
+ await reflexionWorker.start(); // Worker 시작
57
65
  // 3. PerformanceMonitor 싱글톤 처리 및 DB 초기화
58
66
  const performanceMonitor = getPerformanceMonitor();
59
67
  performanceMonitor.initialize(db);
@@ -120,7 +128,9 @@ export async function initializeServices(db) {
120
128
  performanceAlertService,
121
129
  consolidationScoreService,
122
130
  writeCoalescingManager,
123
- anchorManager
131
+ anchorManager,
132
+ failureDetector,
133
+ reflexionWorker
124
134
  };
125
135
  }
126
136
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/server/bootstrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/server/bootstrap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAuB,MAAM,8BAA8B,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAyC9E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EAAqB;IAC5D,IAAI,CAAC;QACH,iCAAiC;QACjC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QACxC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QACvE,MAAM,gBAAgB,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAEtD,oCAAoC;QACpC,MAAM,uBAAuB,GAAG,IAAI,uBAAuB,EAAE,CAAC;QAC9D,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACpD,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACtD,MAAM,uBAAuB,GAAG,IAAI,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAEtE,sBAAsB;QACtB,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;QAC1C,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC9B,aAAa,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;QACpD,aAAa,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;QACxD,aAAa,CAAC,qBAAqB,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAE7D,wBAAwB;QACxB,MAAM,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAE3C,+BAA+B;QAC/B,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,MAAM,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO;QAE3C,sCAAsC;QACtC,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QACjE,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,YAAY;QAE3C,wCAAwC;QACxC,MAAM,kBAAkB,GAAG,qBAAqB,EAAE,CAAC;QACnD,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAElC,yDAAyD;QACzD,IAAI,yBAAgE,CAAC;QACrE,IAAI,sBAA0D,CAAC;QAE/D,IAAI,aAAa,CAAC,yBAAyB,EAAE,CAAC;YAC5C,yBAAyB,GAAG,IAAI,yBAAyB,EAAE,CAAC;YAE5D,6CAA6C;YAC7C,sBAAsB,GAAG,IAAI,sBAAsB,CACjD,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,MAAwB,EAAE,EAAE;gBACjC,aAAa;gBACb,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC/B,OAAO;gBACT,CAAC;gBAED,mDAAmD;gBACnD,MAAM,SAAS,GAAG,EAAE,CAAC;gBACrB,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC;oBACH,iBAAiB;oBACjB,MAAM,aAAa,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;wBACvD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;4BAC3B,MAAM,OAAO,GAAa,EAAE,CAAC;4BAC7B,MAAM,MAAM,GAAU,EAAE,CAAC;4BAEzB,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gCAC5C,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gCACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;4BACzC,CAAC;4BACD,IAAI,KAAK,CAAC,MAAM,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;gCAChD,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;gCACrC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;4BAC7C,CAAC;4BACD,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gCACvC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gCAC5B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;4BACpC,CAAC;4BACD,IAAI,KAAK,CAAC,MAAM,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;gCACnD,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;gCACxC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;4BAChD,CAAC;4BAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCACvB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gCAC5B,aAAa,CAAC,GAAG,CACf,SAAS,EACT,0BAA0B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAC3D,MAAM,CACP,CAAC;4BACJ,CAAC;wBACH,CAAC;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,gCAAgC;oBAChC,OAAO,CAAC,KAAK,CAAC,iCAAiC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC3G,CAAC;YACH,CAAC,CACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,YAAY;YACZ,kBAAkB;YAClB,gBAAgB;YAChB,uBAAuB;YACvB,kBAAkB;YAClB,iBAAiB;YACjB,mBAAmB;YACnB,uBAAuB;YACvB,yBAAyB;YACzB,sBAAsB;YACtB,aAAa;YACb,eAAe;YACf,eAAe;SAChB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,qCAAqC;QACrC,kBAAkB;QAClB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,eAAe,YAAY,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/server/context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,kBAAkB;IAClB,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,kBAAkB;IAClB,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,QAAQ,EAAE,cAAc,GACvB,aAAa,CAKf;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,aAAa,GAAG,WAAW,CAiB3E"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/server/context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,kBAAkB;IAClB,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,kBAAkB;IAClB,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,QAAQ,EAAE,cAAc,GACvB,aAAa,CAKf;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,aAAa,GAAG,WAAW,CAmB3E"}
@@ -38,7 +38,9 @@ export function createToolContext(serverContext) {
38
38
  performanceAlertService: serverContext.services.performanceAlertService,
39
39
  consolidationScoreService: serverContext.services.consolidationScoreService,
40
40
  writeCoalescingManager: serverContext.services.writeCoalescingManager,
41
- anchorManager: serverContext.services.anchorManager
41
+ anchorManager: serverContext.services.anchorManager,
42
+ failureDetector: serverContext.services.failureDetector,
43
+ reflexionWorker: serverContext.services.reflexionWorker
42
44
  }
43
45
  };
44
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/server/context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiBH;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,EAAqB,EACrB,QAAwB;IAExB,OAAO;QACL,EAAE;QACF,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,aAA4B;IAC5D,OAAO;QACL,EAAE,EAAE,aAAa,CAAC,EAAE;QACpB,QAAQ,EAAE;YACR,YAAY,EAAE,aAAa,CAAC,QAAQ,CAAC,YAAY;YACjD,kBAAkB,EAAE,aAAa,CAAC,QAAQ,CAAC,kBAAkB;YAC7D,gBAAgB,EAAE,aAAa,CAAC,QAAQ,CAAC,gBAAgB;YACzD,uBAAuB,EAAE,aAAa,CAAC,QAAQ,CAAC,uBAAuB;YACvE,kBAAkB,EAAE,aAAa,CAAC,QAAQ,CAAC,kBAAkB;YAC7D,iBAAiB,EAAE,aAAa,CAAC,QAAQ,CAAC,iBAAiB;YAC3D,mBAAmB,EAAE,aAAa,CAAC,QAAQ,CAAC,mBAAmB;YAC/D,uBAAuB,EAAE,aAAa,CAAC,QAAQ,CAAC,uBAAuB;YACvE,yBAAyB,EAAE,aAAa,CAAC,QAAQ,CAAC,yBAAyB;YAC3E,sBAAsB,EAAE,aAAa,CAAC,QAAQ,CAAC,sBAAsB;YACrE,aAAa,EAAE,aAAa,CAAC,QAAQ,CAAC,aAAa;SACpD;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/server/context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiBH;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,EAAqB,EACrB,QAAwB;IAExB,OAAO;QACL,EAAE;QACF,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,aAA4B;IAC5D,OAAO;QACL,EAAE,EAAE,aAAa,CAAC,EAAE;QACpB,QAAQ,EAAE;YACR,YAAY,EAAE,aAAa,CAAC,QAAQ,CAAC,YAAY;YACjD,kBAAkB,EAAE,aAAa,CAAC,QAAQ,CAAC,kBAAkB;YAC7D,gBAAgB,EAAE,aAAa,CAAC,QAAQ,CAAC,gBAAgB;YACzD,uBAAuB,EAAE,aAAa,CAAC,QAAQ,CAAC,uBAAuB;YACvE,kBAAkB,EAAE,aAAa,CAAC,QAAQ,CAAC,kBAAkB;YAC7D,iBAAiB,EAAE,aAAa,CAAC,QAAQ,CAAC,iBAAiB;YAC3D,mBAAmB,EAAE,aAAa,CAAC,QAAQ,CAAC,mBAAmB;YAC/D,uBAAuB,EAAE,aAAa,CAAC,QAAQ,CAAC,uBAAuB;YACvE,yBAAyB,EAAE,aAAa,CAAC,QAAQ,CAAC,yBAAyB;YAC3E,sBAAsB,EAAE,aAAa,CAAC,QAAQ,CAAC,sBAAsB;YACrE,aAAa,EAAE,aAAa,CAAC,QAAQ,CAAC,aAAa;YACnD,eAAe,EAAE,aAAa,CAAC,QAAQ,CAAC,eAAe;YACvD,eAAe,EAAE,aAAa,CAAC,QAAQ,CAAC,eAAe;SACxD;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../../src/server/http-server.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAO9B,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAG3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AASjF,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AA+BtC,KAAK,gBAAgB,GAAG;IACtB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC5B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;CAC3C,CAAC;AAyJF,iBAAe,OAAO,kBA4BrB;AAuJD,iBAAe,WAAW,kBAmCzB;AAUD,eAAO,MAAM,MAAM,EAAE;IACnB,mBAAmB,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACtD,MAAM,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC;IAClC,SAAS,EAAE,MAAM,GAAG,CAAC;IACrB,WAAW,EAAE,MAAM,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC5C,eAAe,EAAE,MAAM,YAAY,GAAG,SAAS,CAAC;IAChD,qBAAqB,EAAE,MAAM,kBAAkB,GAAG,SAAS,CAAC;IAC5D,mBAAmB,EAAE,MAAM,sBAAsB,GAAG,SAAS,CAAC;CAS/D,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../../src/server/http-server.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAO9B,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAG3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AASjF,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AA+BtC,KAAK,gBAAgB,GAAG;IACtB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC5B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;CAC3C,CAAC;AA0JF,iBAAe,OAAO,kBA4BrB;AAuJD,iBAAe,WAAW,kBAmCzB;AAUD,eAAO,MAAM,MAAM,EAAE;IACnB,mBAAmB,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACtD,MAAM,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC;IAClC,SAAS,EAAE,MAAM,GAAG,CAAC;IACrB,WAAW,EAAE,MAAM,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC5C,eAAe,EAAE,MAAM,YAAY,GAAG,SAAS,CAAC;IAChD,qBAAqB,EAAE,MAAM,kBAAkB,GAAG,SAAS,CAAC;IAC5D,mBAAmB,EAAE,MAAM,sBAAsB,GAAG,SAAS,CAAC;CAS/D,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC"}