a2a-memory 0.11.5 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +7 -19
- package/README.md +1 -1
- package/dist/a2a/client.js +1 -252
- package/dist/a2a/discovery.js +1 -115
- package/dist/a2a/index.js +1 -8
- package/dist/a2a/types.js +1 -42
- package/dist/adapters/anthropic.js +1 -117
- package/dist/chunking/chunker.js +1 -163
- package/dist/claude/sync.d.ts +8 -2
- package/dist/claude/sync.js +1 -298
- package/dist/cli/commands/add.js +1 -80
- package/dist/cli/commands/claude-sync.d.ts +3 -3
- package/dist/cli/commands/claude-sync.js +1 -70
- package/dist/cli/commands/cleanup.js +1 -83
- package/dist/cli/commands/config.js +1 -79
- package/dist/cli/commands/edit.js +1 -69
- package/dist/cli/commands/embed.js +1 -92
- package/dist/cli/commands/extract.js +1 -103
- package/dist/cli/commands/health.js +1 -105
- package/dist/cli/commands/list.js +1 -46
- package/dist/cli/commands/migrate-chunks.js +1 -205
- package/dist/cli/commands/migrate-file-refs.js +1 -183
- package/dist/cli/commands/proficiency.js +1 -146
- package/dist/cli/commands/rm.js +1 -64
- package/dist/cli/commands/search.js +1 -90
- package/dist/cli/commands/setup-wizard.js +1 -387
- package/dist/cli/commands/setup.js +1 -170
- package/dist/cli/commands/skill.js +1 -151
- package/dist/cli/commands/status.js +1 -70
- package/dist/cli/commands/sync.js +1 -202
- package/dist/cli/commands/team.js +1 -142
- package/dist/cli/index.js +1 -87
- package/dist/config/manager.js +1 -372
- package/dist/db/database.d.ts +36 -0
- package/dist/db/database.js +1 -1400
- package/dist/embedding/e5-provider.js +1 -147
- package/dist/embedding/index.js +1 -34
- package/dist/embedding/local-provider.js +1 -157
- package/dist/embedding/openai-provider.js +1 -92
- package/dist/embedding/quantization.js +1 -89
- package/dist/extraction/dedup-manager.js +1 -161
- package/dist/extraction/emotion-filter.js +1 -33
- package/dist/extraction/extractor.d.ts +0 -3
- package/dist/extraction/extractor.js +1 -648
- package/dist/extraction/file-reference.js +1 -77
- package/dist/extraction/filter.js +1 -86
- package/dist/extraction/scorer.js +1 -142
- package/dist/extraction/similarity.js +1 -85
- package/dist/hooks/client-factory.js +1 -44
- package/dist/hooks/post-tool-use.js +1 -518
- package/dist/hooks/pre-compact.js +1 -209
- package/dist/hooks/session-end.js +1 -633
- package/dist/hooks/session-start.js +1 -549
- package/dist/hooks/shared.js +1 -110
- package/dist/hooks/stop.d.ts +21 -0
- package/dist/hooks/stop.js +1 -0
- package/dist/hooks/user-prompt-submit.js +1 -316
- package/dist/i18n/index.js +1 -2
- package/dist/i18n/messages.js +1 -150
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -43
- package/dist/lifecycle/cleanup-scheduler.js +1 -137
- package/dist/lifecycle/cleanup.d.ts +1 -0
- package/dist/lifecycle/cleanup.js +1 -116
- package/dist/lifecycle/consolidation.d.ts +22 -0
- package/dist/lifecycle/consolidation.js +1 -0
- package/dist/lifecycle/index.d.ts +2 -0
- package/dist/lifecycle/index.js +1 -13
- package/dist/lifecycle/injection-flush.d.ts +24 -0
- package/dist/lifecycle/injection-flush.js +1 -0
- package/dist/lifecycle/quality-scorer.d.ts +5 -6
- package/dist/lifecycle/quality-scorer.js +1 -46
- package/dist/lifecycle/tiering.js +1 -246
- package/dist/llm/client.js +1 -226
- package/dist/llm/index.js +1 -5
- package/dist/proficiency/actr-engine.js +1 -106
- package/dist/proficiency/detection.js +1 -77
- package/dist/proficiency/index.js +1 -9
- package/dist/proficiency/tracker.js +1 -173
- package/dist/proficiency/types.js +1 -8
- package/dist/providers/adapters.js +1 -140
- package/dist/providers/detector.js +1 -57
- package/dist/search/adaptive-router.js +1 -93
- package/dist/search/index.js +1 -9
- package/dist/search/ranker.js +1 -171
- package/dist/search/reranker.js +1 -155
- package/dist/session/parser.js +1 -130
- package/dist/skill/evaluator.js +1 -509
- package/dist/skill/index.js +1 -7
- package/dist/skill/types.js +1 -7
- package/dist/sync/client.d.ts +7 -0
- package/dist/sync/client.js +1 -597
- package/dist/sync/encryption.js +1 -203
- package/dist/sync/index.js +1 -12
- package/dist/sync/queue.js +1 -214
- package/dist/sync/scheduler.js +1 -140
- package/dist/sync/synchronizer.js +1 -241
- package/dist/sync/team-synchronizer.js +1 -204
- package/dist/sync/vector-clock.js +1 -70
- package/dist/types/index.d.ts +13 -1
- package/dist/types/index.js +1 -132
- package/dist/utils/keychain.js +1 -170
- package/dist/utils/logger.js +1 -128
- package/package.json +15 -10
- package/dist/a2a/client.d.ts.map +0 -1
- package/dist/a2a/client.js.map +0 -1
- package/dist/a2a/discovery.d.ts.map +0 -1
- package/dist/a2a/discovery.js.map +0 -1
- package/dist/a2a/index.d.ts.map +0 -1
- package/dist/a2a/index.js.map +0 -1
- package/dist/a2a/types.d.ts.map +0 -1
- package/dist/a2a/types.js.map +0 -1
- package/dist/adapters/anthropic.d.ts.map +0 -1
- package/dist/adapters/anthropic.js.map +0 -1
- package/dist/chunking/chunker.d.ts.map +0 -1
- package/dist/chunking/chunker.js.map +0 -1
- package/dist/claude/sync.d.ts.map +0 -1
- package/dist/claude/sync.js.map +0 -1
- package/dist/cli/commands/add.d.ts.map +0 -1
- package/dist/cli/commands/add.js.map +0 -1
- package/dist/cli/commands/claude-sync.d.ts.map +0 -1
- package/dist/cli/commands/claude-sync.js.map +0 -1
- package/dist/cli/commands/cleanup.d.ts.map +0 -1
- package/dist/cli/commands/cleanup.js.map +0 -1
- package/dist/cli/commands/config.d.ts.map +0 -1
- package/dist/cli/commands/config.js.map +0 -1
- package/dist/cli/commands/edit.d.ts.map +0 -1
- package/dist/cli/commands/edit.js.map +0 -1
- package/dist/cli/commands/embed.d.ts.map +0 -1
- package/dist/cli/commands/embed.js.map +0 -1
- package/dist/cli/commands/extract.d.ts.map +0 -1
- package/dist/cli/commands/extract.js.map +0 -1
- package/dist/cli/commands/health.d.ts.map +0 -1
- package/dist/cli/commands/health.js.map +0 -1
- package/dist/cli/commands/list.d.ts.map +0 -1
- package/dist/cli/commands/list.js.map +0 -1
- package/dist/cli/commands/migrate-chunks.d.ts.map +0 -1
- package/dist/cli/commands/migrate-chunks.js.map +0 -1
- package/dist/cli/commands/migrate-file-refs.d.ts.map +0 -1
- package/dist/cli/commands/migrate-file-refs.js.map +0 -1
- package/dist/cli/commands/proficiency.d.ts.map +0 -1
- package/dist/cli/commands/proficiency.js.map +0 -1
- package/dist/cli/commands/rm.d.ts.map +0 -1
- package/dist/cli/commands/rm.js.map +0 -1
- package/dist/cli/commands/search.d.ts.map +0 -1
- package/dist/cli/commands/search.js.map +0 -1
- package/dist/cli/commands/setup-wizard.d.ts.map +0 -1
- package/dist/cli/commands/setup-wizard.js.map +0 -1
- package/dist/cli/commands/setup.d.ts.map +0 -1
- package/dist/cli/commands/setup.js.map +0 -1
- package/dist/cli/commands/skill.d.ts.map +0 -1
- package/dist/cli/commands/skill.js.map +0 -1
- package/dist/cli/commands/status.d.ts.map +0 -1
- package/dist/cli/commands/status.js.map +0 -1
- package/dist/cli/commands/sync.d.ts.map +0 -1
- package/dist/cli/commands/sync.js.map +0 -1
- package/dist/cli/commands/team.d.ts.map +0 -1
- package/dist/cli/commands/team.js.map +0 -1
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js.map +0 -1
- package/dist/config/manager.d.ts.map +0 -1
- package/dist/config/manager.js.map +0 -1
- package/dist/db/database.d.ts.map +0 -1
- package/dist/db/database.js.map +0 -1
- package/dist/embedding/e5-provider.d.ts.map +0 -1
- package/dist/embedding/e5-provider.js.map +0 -1
- package/dist/embedding/index.d.ts.map +0 -1
- package/dist/embedding/index.js.map +0 -1
- package/dist/embedding/local-provider.d.ts.map +0 -1
- package/dist/embedding/local-provider.js.map +0 -1
- package/dist/embedding/openai-provider.d.ts.map +0 -1
- package/dist/embedding/openai-provider.js.map +0 -1
- package/dist/embedding/quantization.d.ts.map +0 -1
- package/dist/embedding/quantization.js.map +0 -1
- package/dist/extraction/dedup-manager.d.ts.map +0 -1
- package/dist/extraction/dedup-manager.js.map +0 -1
- package/dist/extraction/emotion-filter.d.ts.map +0 -1
- package/dist/extraction/emotion-filter.js.map +0 -1
- package/dist/extraction/extractor.d.ts.map +0 -1
- package/dist/extraction/extractor.js.map +0 -1
- package/dist/extraction/file-reference.d.ts.map +0 -1
- package/dist/extraction/file-reference.js.map +0 -1
- package/dist/extraction/filter.d.ts.map +0 -1
- package/dist/extraction/filter.js.map +0 -1
- package/dist/extraction/scorer.d.ts.map +0 -1
- package/dist/extraction/scorer.js.map +0 -1
- package/dist/extraction/similarity.d.ts.map +0 -1
- package/dist/extraction/similarity.js.map +0 -1
- package/dist/hooks/client-factory.d.ts.map +0 -1
- package/dist/hooks/client-factory.js.map +0 -1
- package/dist/hooks/post-tool-use.d.ts.map +0 -1
- package/dist/hooks/post-tool-use.js.map +0 -1
- package/dist/hooks/pre-compact.d.ts.map +0 -1
- package/dist/hooks/pre-compact.js.map +0 -1
- package/dist/hooks/session-end.d.ts.map +0 -1
- package/dist/hooks/session-end.js.map +0 -1
- package/dist/hooks/session-start.d.ts.map +0 -1
- package/dist/hooks/session-start.js.map +0 -1
- package/dist/hooks/shared.d.ts.map +0 -1
- package/dist/hooks/shared.js.map +0 -1
- package/dist/hooks/user-prompt-submit.d.ts.map +0 -1
- package/dist/hooks/user-prompt-submit.js.map +0 -1
- package/dist/i18n/index.d.ts.map +0 -1
- package/dist/i18n/index.js.map +0 -1
- package/dist/i18n/messages.d.ts.map +0 -1
- package/dist/i18n/messages.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lifecycle/cleanup-scheduler.d.ts.map +0 -1
- package/dist/lifecycle/cleanup-scheduler.js.map +0 -1
- package/dist/lifecycle/cleanup.d.ts.map +0 -1
- package/dist/lifecycle/cleanup.js.map +0 -1
- package/dist/lifecycle/index.d.ts.map +0 -1
- package/dist/lifecycle/index.js.map +0 -1
- package/dist/lifecycle/quality-scorer.d.ts.map +0 -1
- package/dist/lifecycle/quality-scorer.js.map +0 -1
- package/dist/lifecycle/tiering.d.ts.map +0 -1
- package/dist/lifecycle/tiering.js.map +0 -1
- package/dist/llm/client.d.ts.map +0 -1
- package/dist/llm/client.js.map +0 -1
- package/dist/llm/index.d.ts.map +0 -1
- package/dist/llm/index.js.map +0 -1
- package/dist/proficiency/actr-engine.d.ts.map +0 -1
- package/dist/proficiency/actr-engine.js.map +0 -1
- package/dist/proficiency/detection.d.ts.map +0 -1
- package/dist/proficiency/detection.js.map +0 -1
- package/dist/proficiency/index.d.ts.map +0 -1
- package/dist/proficiency/index.js.map +0 -1
- package/dist/proficiency/tracker.d.ts.map +0 -1
- package/dist/proficiency/tracker.js.map +0 -1
- package/dist/proficiency/types.d.ts.map +0 -1
- package/dist/proficiency/types.js.map +0 -1
- package/dist/providers/adapters.d.ts.map +0 -1
- package/dist/providers/adapters.js.map +0 -1
- package/dist/providers/detector.d.ts.map +0 -1
- package/dist/providers/detector.js.map +0 -1
- package/dist/search/adaptive-router.d.ts.map +0 -1
- package/dist/search/adaptive-router.js.map +0 -1
- package/dist/search/index.d.ts.map +0 -1
- package/dist/search/index.js.map +0 -1
- package/dist/search/ranker.d.ts.map +0 -1
- package/dist/search/ranker.js.map +0 -1
- package/dist/search/reranker.d.ts.map +0 -1
- package/dist/search/reranker.js.map +0 -1
- package/dist/session/parser.d.ts.map +0 -1
- package/dist/session/parser.js.map +0 -1
- package/dist/skill/evaluator.d.ts.map +0 -1
- package/dist/skill/evaluator.js.map +0 -1
- package/dist/skill/index.d.ts.map +0 -1
- package/dist/skill/index.js.map +0 -1
- package/dist/skill/types.d.ts.map +0 -1
- package/dist/skill/types.js.map +0 -1
- package/dist/sync/client.d.ts.map +0 -1
- package/dist/sync/client.js.map +0 -1
- package/dist/sync/encryption.d.ts.map +0 -1
- package/dist/sync/encryption.js.map +0 -1
- package/dist/sync/index.d.ts.map +0 -1
- package/dist/sync/index.js.map +0 -1
- package/dist/sync/queue.d.ts.map +0 -1
- package/dist/sync/queue.js.map +0 -1
- package/dist/sync/scheduler.d.ts.map +0 -1
- package/dist/sync/scheduler.js.map +0 -1
- package/dist/sync/synchronizer.d.ts.map +0 -1
- package/dist/sync/synchronizer.js.map +0 -1
- package/dist/sync/team-synchronizer.d.ts.map +0 -1
- package/dist/sync/team-synchronizer.js.map +0 -1
- package/dist/sync/vector-clock.d.ts.map +0 -1
- package/dist/sync/vector-clock.js.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/utils/keychain.d.ts.map +0 -1
- package/dist/utils/keychain.js.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
package/dist/db/database.js
CHANGED
|
@@ -1,1400 +1 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Memory Database
|
|
3
|
-
*
|
|
4
|
-
* SQLite 기반 로컬 메모리 저장소.
|
|
5
|
-
* better-sqlite3 (동기 API) 사용.
|
|
6
|
-
*/
|
|
7
|
-
import Database from 'better-sqlite3';
|
|
8
|
-
import { randomUUID } from 'node:crypto';
|
|
9
|
-
import { existsSync, mkdirSync, statSync, renameSync } from 'node:fs';
|
|
10
|
-
import { dirname } from 'node:path';
|
|
11
|
-
import { homedir } from 'node:os';
|
|
12
|
-
import { cosineSimilarity as computeCosineSimilarity } from '../extraction/similarity.js';
|
|
13
|
-
import { quantizeToFloat32, dequantizeFromFloat32, quantizeToInt8, dequantizeFromInt8, } from '../embedding/quantization.js';
|
|
14
|
-
const DEFAULT_DB_PATH = '~/.a2a/memory.db';
|
|
15
|
-
function resolvePath(p) {
|
|
16
|
-
if (p.startsWith('~')) {
|
|
17
|
-
return p.replace('~', homedir());
|
|
18
|
-
}
|
|
19
|
-
return p;
|
|
20
|
-
}
|
|
21
|
-
export class MemoryDatabase {
|
|
22
|
-
db;
|
|
23
|
-
dbPath;
|
|
24
|
-
stmts = new Map();
|
|
25
|
-
quantizationLevel;
|
|
26
|
-
constructor(dbPath = DEFAULT_DB_PATH, quantizationLevel = 'none') {
|
|
27
|
-
this.dbPath = resolvePath(dbPath);
|
|
28
|
-
this.quantizationLevel = quantizationLevel;
|
|
29
|
-
const dir = dirname(this.dbPath);
|
|
30
|
-
if (!existsSync(dir)) {
|
|
31
|
-
mkdirSync(dir, { recursive: true });
|
|
32
|
-
}
|
|
33
|
-
this.db = MemoryDatabase.openDatabase(this.dbPath);
|
|
34
|
-
this.db.pragma('journal_mode = WAL');
|
|
35
|
-
this.db.pragma('foreign_keys = ON');
|
|
36
|
-
this.db.pragma('cache_size = -64000');
|
|
37
|
-
this.db.pragma('synchronous = NORMAL');
|
|
38
|
-
this.db.pragma('temp_store = MEMORY');
|
|
39
|
-
this.db.pragma('mmap_size = 268435456');
|
|
40
|
-
this.checkIntegrity();
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* better-sqlite3 native binding을 로드합니다.
|
|
44
|
-
* 로드 실패 시 명확한 에러 메시지와 해결 방법을 안내합니다.
|
|
45
|
-
*/
|
|
46
|
-
static openDatabase(dbPath) {
|
|
47
|
-
try {
|
|
48
|
-
return new Database(dbPath);
|
|
49
|
-
}
|
|
50
|
-
catch (err) {
|
|
51
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
52
|
-
const isBindingError = msg.includes('NODE_MODULE_VERSION') ||
|
|
53
|
-
msg.includes('was compiled against') ||
|
|
54
|
-
msg.includes('cannot open shared object') ||
|
|
55
|
-
msg.includes('invalid ELF') ||
|
|
56
|
-
msg.includes('binding');
|
|
57
|
-
if (isBindingError) {
|
|
58
|
-
console.error('[a2a] Failed to load better-sqlite3 native binding.');
|
|
59
|
-
console.error('[a2a] This usually happens when the Node.js version has changed.');
|
|
60
|
-
console.error('[a2a] Fix: npm rebuild better-sqlite3');
|
|
61
|
-
console.error('[a2a] or: cd ~/.nvm/versions/node/<version>/lib/node_modules/a2a-memory && npm rebuild better-sqlite3');
|
|
62
|
-
throw new Error(`[a2a] better-sqlite3 native binding load failed. Run: npm rebuild better-sqlite3\nOriginal error: ${msg}`);
|
|
63
|
-
}
|
|
64
|
-
throw err;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* SQLite integrity_check를 실행합니다.
|
|
69
|
-
* 손상된 DB는 .corrupt로 이름을 변경하고 새 DB를 생성합니다.
|
|
70
|
-
*/
|
|
71
|
-
checkIntegrity() {
|
|
72
|
-
// 새로 생성된 빈 DB는 integrity_check가 불필요
|
|
73
|
-
try {
|
|
74
|
-
const result = this.db.pragma('integrity_check');
|
|
75
|
-
const ok = result.length === 1 && result[0].integrity_check === 'ok';
|
|
76
|
-
if (!ok) {
|
|
77
|
-
const issues = result.map(r => r.integrity_check).join(', ');
|
|
78
|
-
console.error(`[a2a] Database integrity check failed: ${issues}`);
|
|
79
|
-
this.recoverCorruptDatabase();
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
catch (err) {
|
|
83
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
84
|
-
console.error(`[a2a] Database integrity check error: ${msg}`);
|
|
85
|
-
this.recoverCorruptDatabase();
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* 손상된 DB를 .corrupt로 이름 변경 후 새 DB를 엽니다.
|
|
90
|
-
*/
|
|
91
|
-
recoverCorruptDatabase() {
|
|
92
|
-
try {
|
|
93
|
-
this.db.close();
|
|
94
|
-
}
|
|
95
|
-
catch {
|
|
96
|
-
// close 실패 무시
|
|
97
|
-
}
|
|
98
|
-
const corruptPath = `${this.dbPath}.corrupt.${Date.now()}`;
|
|
99
|
-
try {
|
|
100
|
-
renameSync(this.dbPath, corruptPath);
|
|
101
|
-
console.error(`[a2a] Corrupt database moved to: ${corruptPath}`);
|
|
102
|
-
}
|
|
103
|
-
catch (renameErr) {
|
|
104
|
-
console.error(`[a2a] Failed to move corrupt database: ${renameErr instanceof Error ? renameErr.message : String(renameErr)}`);
|
|
105
|
-
}
|
|
106
|
-
console.error('[a2a] Creating a new database. Previous data may be lost.');
|
|
107
|
-
this.db = MemoryDatabase.openDatabase(this.dbPath);
|
|
108
|
-
this.db.pragma('journal_mode = WAL');
|
|
109
|
-
this.db.pragma('foreign_keys = ON');
|
|
110
|
-
this.db.pragma('cache_size = -64000');
|
|
111
|
-
this.db.pragma('synchronous = NORMAL');
|
|
112
|
-
this.db.pragma('temp_store = MEMORY');
|
|
113
|
-
this.db.pragma('mmap_size = 268435456');
|
|
114
|
-
this.stmts.clear();
|
|
115
|
-
}
|
|
116
|
-
stmt(key, sql) {
|
|
117
|
-
let s = this.stmts.get(key);
|
|
118
|
-
if (!s) {
|
|
119
|
-
s = this.db.prepare(sql);
|
|
120
|
-
this.stmts.set(key, s);
|
|
121
|
-
}
|
|
122
|
-
return s;
|
|
123
|
-
}
|
|
124
|
-
initialize() {
|
|
125
|
-
this.db.exec(`
|
|
126
|
-
CREATE TABLE IF NOT EXISTS memories (
|
|
127
|
-
id TEXT PRIMARY KEY,
|
|
128
|
-
content TEXT NOT NULL,
|
|
129
|
-
category TEXT NOT NULL,
|
|
130
|
-
tier TEXT NOT NULL,
|
|
131
|
-
embedding BLOB,
|
|
132
|
-
project_path TEXT,
|
|
133
|
-
session_id TEXT,
|
|
134
|
-
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
135
|
-
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
136
|
-
access_count INTEGER NOT NULL DEFAULT 0,
|
|
137
|
-
last_accessed_at TEXT
|
|
138
|
-
);
|
|
139
|
-
|
|
140
|
-
CREATE TABLE IF NOT EXISTS memory_tags (
|
|
141
|
-
memory_id TEXT NOT NULL,
|
|
142
|
-
tag TEXT NOT NULL,
|
|
143
|
-
PRIMARY KEY (memory_id, tag),
|
|
144
|
-
FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE
|
|
145
|
-
);
|
|
146
|
-
|
|
147
|
-
CREATE TABLE IF NOT EXISTS sessions (
|
|
148
|
-
session_id TEXT PRIMARY KEY,
|
|
149
|
-
project_path TEXT NOT NULL,
|
|
150
|
-
message_count INTEGER NOT NULL DEFAULT 0,
|
|
151
|
-
processed_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
152
|
-
);
|
|
153
|
-
|
|
154
|
-
CREATE TABLE IF NOT EXISTS sync_status (
|
|
155
|
-
memory_id TEXT PRIMARY KEY,
|
|
156
|
-
remote_id TEXT,
|
|
157
|
-
synced_at TEXT,
|
|
158
|
-
sync_state TEXT NOT NULL DEFAULT 'pending',
|
|
159
|
-
FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE
|
|
160
|
-
);
|
|
161
|
-
|
|
162
|
-
CREATE INDEX IF NOT EXISTS idx_memories_category ON memories(category);
|
|
163
|
-
CREATE INDEX IF NOT EXISTS idx_memories_tier ON memories(tier);
|
|
164
|
-
CREATE INDEX IF NOT EXISTS idx_memories_project ON memories(project_path);
|
|
165
|
-
CREATE INDEX IF NOT EXISTS idx_memories_session ON memories(session_id);
|
|
166
|
-
CREATE INDEX IF NOT EXISTS idx_memory_tags_tag ON memory_tags(tag);
|
|
167
|
-
CREATE INDEX IF NOT EXISTS idx_sync_state ON sync_status(sync_state);
|
|
168
|
-
CREATE INDEX IF NOT EXISTS idx_memories_project_updated ON memories(project_path, updated_at DESC);
|
|
169
|
-
CREATE INDEX IF NOT EXISTS idx_memories_category_tier ON memories(category, tier);
|
|
170
|
-
|
|
171
|
-
CREATE TABLE IF NOT EXISTS vector_clocks (
|
|
172
|
-
memory_id TEXT PRIMARY KEY,
|
|
173
|
-
clock_state TEXT NOT NULL,
|
|
174
|
-
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
175
|
-
);
|
|
176
|
-
|
|
177
|
-
CREATE TABLE IF NOT EXISTS embedding_metadata (
|
|
178
|
-
memory_id TEXT PRIMARY KEY,
|
|
179
|
-
quantization_level TEXT NOT NULL,
|
|
180
|
-
quantization_stats TEXT,
|
|
181
|
-
FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE
|
|
182
|
-
);
|
|
183
|
-
`);
|
|
184
|
-
// FTS5 테이블 (별도 exec — 이미 존재하면 무시)
|
|
185
|
-
try {
|
|
186
|
-
this.db.exec(`
|
|
187
|
-
CREATE VIRTUAL TABLE IF NOT EXISTS memory_fts USING fts5(
|
|
188
|
-
content,
|
|
189
|
-
tokenize='unicode61'
|
|
190
|
-
);
|
|
191
|
-
`);
|
|
192
|
-
}
|
|
193
|
-
catch {
|
|
194
|
-
// FTS5 테이블이 이미 존재하면 무시
|
|
195
|
-
}
|
|
196
|
-
// C-4: embedding_hash 컬럼 추가 (기존 DB 호환)
|
|
197
|
-
try {
|
|
198
|
-
this.db.exec('ALTER TABLE memories ADD COLUMN embedding_hash TEXT');
|
|
199
|
-
}
|
|
200
|
-
catch {
|
|
201
|
-
// 이미 존재하면 무시
|
|
202
|
-
}
|
|
203
|
-
// E-3: sync_history + tombstones 테이블
|
|
204
|
-
this.db.exec(`
|
|
205
|
-
CREATE TABLE IF NOT EXISTS sync_history (
|
|
206
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
207
|
-
operation TEXT NOT NULL,
|
|
208
|
-
memory_id TEXT NOT NULL,
|
|
209
|
-
timestamp TEXT NOT NULL DEFAULT (datetime('now')),
|
|
210
|
-
status TEXT NOT NULL DEFAULT 'success',
|
|
211
|
-
details TEXT
|
|
212
|
-
);
|
|
213
|
-
|
|
214
|
-
CREATE TABLE IF NOT EXISTS tombstones (
|
|
215
|
-
memory_id TEXT PRIMARY KEY,
|
|
216
|
-
deleted_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
217
|
-
synced INTEGER NOT NULL DEFAULT 0
|
|
218
|
-
);
|
|
219
|
-
|
|
220
|
-
CREATE INDEX IF NOT EXISTS idx_memories_embedding_hash ON memories(embedding_hash);
|
|
221
|
-
CREATE INDEX IF NOT EXISTS idx_sync_history_memory ON sync_history(memory_id);
|
|
222
|
-
CREATE INDEX IF NOT EXISTS idx_sync_history_timestamp ON sync_history(timestamp);
|
|
223
|
-
CREATE INDEX IF NOT EXISTS idx_tombstones_synced ON tombstones(synced);
|
|
224
|
-
`);
|
|
225
|
-
// Proficiency 테이블 (Phase 5 PoC)
|
|
226
|
-
this.db.exec(`
|
|
227
|
-
CREATE TABLE IF NOT EXISTS proficiency_records (
|
|
228
|
-
id TEXT PRIMARY KEY,
|
|
229
|
-
skill_memory_id TEXT NOT NULL,
|
|
230
|
-
skill_name TEXT NOT NULL,
|
|
231
|
-
level INTEGER NOT NULL DEFAULT 1,
|
|
232
|
-
experience_count INTEGER NOT NULL DEFAULT 0,
|
|
233
|
-
success_rate REAL NOT NULL DEFAULT 0.0,
|
|
234
|
-
actr_activation REAL NOT NULL DEFAULT 0.0,
|
|
235
|
-
last_practiced_at TEXT,
|
|
236
|
-
project_path TEXT,
|
|
237
|
-
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
238
|
-
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
239
|
-
FOREIGN KEY (skill_memory_id) REFERENCES memories(id) ON DELETE CASCADE
|
|
240
|
-
);
|
|
241
|
-
|
|
242
|
-
CREATE TABLE IF NOT EXISTS experience_events (
|
|
243
|
-
id TEXT PRIMARY KEY,
|
|
244
|
-
proficiency_id TEXT NOT NULL,
|
|
245
|
-
timestamp REAL NOT NULL,
|
|
246
|
-
outcome TEXT NOT NULL CHECK(outcome IN ('success','partial','failure')),
|
|
247
|
-
difficulty REAL NOT NULL DEFAULT 0.5,
|
|
248
|
-
context_tags TEXT,
|
|
249
|
-
session_id TEXT,
|
|
250
|
-
FOREIGN KEY (proficiency_id) REFERENCES proficiency_records(id) ON DELETE CASCADE
|
|
251
|
-
);
|
|
252
|
-
|
|
253
|
-
CREATE INDEX IF NOT EXISTS idx_proficiency_skill ON proficiency_records(skill_memory_id);
|
|
254
|
-
CREATE INDEX IF NOT EXISTS idx_proficiency_project ON proficiency_records(project_path);
|
|
255
|
-
CREATE INDEX IF NOT EXISTS idx_experience_proficiency ON experience_events(proficiency_id);
|
|
256
|
-
CREATE INDEX IF NOT EXISTS idx_experience_timestamp ON experience_events(timestamp);
|
|
257
|
-
`);
|
|
258
|
-
// Emotion buffer 테이블 (감정 수집 파이프라인)
|
|
259
|
-
this.db.exec(`
|
|
260
|
-
CREATE TABLE IF NOT EXISTS emotion_buffer (
|
|
261
|
-
id TEXT PRIMARY KEY,
|
|
262
|
-
message TEXT NOT NULL,
|
|
263
|
-
created_at TEXT NOT NULL,
|
|
264
|
-
synced INTEGER DEFAULT 0
|
|
265
|
-
);
|
|
266
|
-
CREATE INDEX IF NOT EXISTS idx_emotion_buffer_synced ON emotion_buffer(synced);
|
|
267
|
-
`);
|
|
268
|
-
// Parent-Child chunk 컬럼 추가 (기존 DB 호환)
|
|
269
|
-
try {
|
|
270
|
-
this.db.exec('ALTER TABLE memories ADD COLUMN parent_id TEXT');
|
|
271
|
-
}
|
|
272
|
-
catch { /* 이미 존재하면 무시 */ }
|
|
273
|
-
try {
|
|
274
|
-
this.db.exec('ALTER TABLE memories ADD COLUMN chunk_index INTEGER');
|
|
275
|
-
}
|
|
276
|
-
catch { /* 이미 존재하면 무시 */ }
|
|
277
|
-
try {
|
|
278
|
-
this.db.exec('ALTER TABLE memories ADD COLUMN chunk_total INTEGER');
|
|
279
|
-
}
|
|
280
|
-
catch { /* 이미 존재하면 무시 */ }
|
|
281
|
-
this.db.exec('CREATE INDEX IF NOT EXISTS idx_memories_parent_id ON memories(parent_id)');
|
|
282
|
-
// Effectiveness measurement tables (v1.2 — F-018~F-019)
|
|
283
|
-
this.db.exec(`
|
|
284
|
-
CREATE TABLE IF NOT EXISTS injection_logs (
|
|
285
|
-
id TEXT PRIMARY KEY,
|
|
286
|
-
session_id TEXT NOT NULL,
|
|
287
|
-
hook_type TEXT NOT NULL,
|
|
288
|
-
injected_memory_ids TEXT,
|
|
289
|
-
injected_keywords TEXT,
|
|
290
|
-
hit_count INTEGER NOT NULL DEFAULT 0,
|
|
291
|
-
total_injected INTEGER NOT NULL DEFAULT 0,
|
|
292
|
-
effectiveness REAL,
|
|
293
|
-
ab_group TEXT,
|
|
294
|
-
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
295
|
-
);
|
|
296
|
-
|
|
297
|
-
CREATE TABLE IF NOT EXISTS injection_hits (
|
|
298
|
-
id TEXT PRIMARY KEY,
|
|
299
|
-
injection_id TEXT NOT NULL,
|
|
300
|
-
matched_keywords TEXT,
|
|
301
|
-
tool_name TEXT NOT NULL,
|
|
302
|
-
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
303
|
-
FOREIGN KEY (injection_id) REFERENCES injection_logs(id) ON DELETE CASCADE
|
|
304
|
-
);
|
|
305
|
-
|
|
306
|
-
CREATE TABLE IF NOT EXISTS extraction_evaluations (
|
|
307
|
-
id TEXT PRIMARY KEY,
|
|
308
|
-
memory_id TEXT NOT NULL,
|
|
309
|
-
session_id TEXT NOT NULL,
|
|
310
|
-
significance_score REAL,
|
|
311
|
-
dedup_action TEXT,
|
|
312
|
-
tier TEXT,
|
|
313
|
-
reused_count INTEGER NOT NULL DEFAULT 0,
|
|
314
|
-
survived_30d INTEGER NOT NULL DEFAULT 0,
|
|
315
|
-
promoted INTEGER NOT NULL DEFAULT 0,
|
|
316
|
-
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
317
|
-
);
|
|
318
|
-
|
|
319
|
-
CREATE INDEX IF NOT EXISTS idx_injection_logs_session ON injection_logs(session_id);
|
|
320
|
-
CREATE INDEX IF NOT EXISTS idx_injection_hits_injection ON injection_hits(injection_id);
|
|
321
|
-
CREATE INDEX IF NOT EXISTS idx_extraction_evals_memory ON extraction_evaluations(memory_id);
|
|
322
|
-
CREATE INDEX IF NOT EXISTS idx_extraction_evals_session ON extraction_evaluations(session_id);
|
|
323
|
-
`);
|
|
324
|
-
// Runtime migration: add ab_group column to injection_logs if missing (existing DBs)
|
|
325
|
-
try {
|
|
326
|
-
const cols = this.db.prepare("PRAGMA table_info(injection_logs)").all();
|
|
327
|
-
const hasAbGroup = cols.some(c => c.name === 'ab_group');
|
|
328
|
-
if (!hasAbGroup) {
|
|
329
|
-
this.db.exec('ALTER TABLE injection_logs ADD COLUMN ab_group TEXT');
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
catch {
|
|
333
|
-
// Ignore migration errors — column may already exist or table not yet created
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
// ============================
|
|
337
|
-
// CRUD
|
|
338
|
-
// ============================
|
|
339
|
-
createMemory(input) {
|
|
340
|
-
const id = randomUUID();
|
|
341
|
-
const now = new Date().toISOString();
|
|
342
|
-
const tags = input.tags ?? [];
|
|
343
|
-
const insertMemory = this.stmt('insert_memory', `
|
|
344
|
-
INSERT INTO memories (id, content, category, tier, project_path, session_id, created_at, updated_at, parent_id, chunk_index, chunk_total)
|
|
345
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
346
|
-
`);
|
|
347
|
-
const insertTag = this.stmt('insert_tag', 'INSERT INTO memory_tags (memory_id, tag) VALUES (?, ?)');
|
|
348
|
-
const insertFts = this.stmt('insert_fts', 'INSERT INTO memory_fts (rowid, content) VALUES (?, ?)');
|
|
349
|
-
const runTransaction = this.db.transaction(() => {
|
|
350
|
-
insertMemory.run(id, input.content, input.category, input.tier, input.projectPath ?? null, input.sessionId ?? null, now, now, input.parentId ?? null, input.chunkIndex ?? null, input.chunkTotal ?? null);
|
|
351
|
-
for (const tag of tags) {
|
|
352
|
-
insertTag.run(id, tag);
|
|
353
|
-
}
|
|
354
|
-
const rowId = this.getRowId(id);
|
|
355
|
-
insertFts.run(rowId, input.content);
|
|
356
|
-
});
|
|
357
|
-
runTransaction();
|
|
358
|
-
return {
|
|
359
|
-
id,
|
|
360
|
-
content: input.content,
|
|
361
|
-
category: input.category,
|
|
362
|
-
tier: input.tier,
|
|
363
|
-
tags,
|
|
364
|
-
projectPath: input.projectPath,
|
|
365
|
-
sessionId: input.sessionId,
|
|
366
|
-
createdAt: now,
|
|
367
|
-
updatedAt: now,
|
|
368
|
-
accessCount: 0,
|
|
369
|
-
parentId: input.parentId,
|
|
370
|
-
chunkIndex: input.chunkIndex,
|
|
371
|
-
chunkTotal: input.chunkTotal,
|
|
372
|
-
};
|
|
373
|
-
}
|
|
374
|
-
getMemory(id) {
|
|
375
|
-
const row = this.stmt('get_memory', 'SELECT * FROM memories WHERE id = ?').get(id);
|
|
376
|
-
if (!row)
|
|
377
|
-
return null;
|
|
378
|
-
return this.rowToMemory(row);
|
|
379
|
-
}
|
|
380
|
-
/**
|
|
381
|
-
* 사용자 접근을 기록합니다 (access_count 증가).
|
|
382
|
-
* 검색 결과 반환, 세션 주입 등 실제 "사용자 노출" 시점에만 호출하세요.
|
|
383
|
-
*/
|
|
384
|
-
recordAccess(id) {
|
|
385
|
-
this.stmt('inc_access', "UPDATE memories SET access_count = access_count + 1, last_accessed_at = datetime('now') WHERE id = ?").run(id);
|
|
386
|
-
}
|
|
387
|
-
updateMemory(id, updates) {
|
|
388
|
-
const existing = this.stmt('get_memory', 'SELECT * FROM memories WHERE id = ?').get(id);
|
|
389
|
-
if (!existing)
|
|
390
|
-
return null;
|
|
391
|
-
const fields = ["updated_at = datetime('now')"];
|
|
392
|
-
const values = [];
|
|
393
|
-
if (updates.content !== undefined) {
|
|
394
|
-
fields.push('content = ?');
|
|
395
|
-
values.push(updates.content);
|
|
396
|
-
}
|
|
397
|
-
if (updates.category !== undefined) {
|
|
398
|
-
fields.push('category = ?');
|
|
399
|
-
values.push(updates.category);
|
|
400
|
-
}
|
|
401
|
-
if (updates.tier !== undefined) {
|
|
402
|
-
fields.push('tier = ?');
|
|
403
|
-
values.push(updates.tier);
|
|
404
|
-
}
|
|
405
|
-
if (updates.projectPath !== undefined) {
|
|
406
|
-
fields.push('project_path = ?');
|
|
407
|
-
values.push(updates.projectPath);
|
|
408
|
-
}
|
|
409
|
-
if (updates.sessionId !== undefined) {
|
|
410
|
-
fields.push('session_id = ?');
|
|
411
|
-
values.push(updates.sessionId);
|
|
412
|
-
}
|
|
413
|
-
values.push(id);
|
|
414
|
-
this.db.prepare(`UPDATE memories SET ${fields.join(', ')} WHERE id = ?`).run(...values);
|
|
415
|
-
if (updates.tags !== undefined) {
|
|
416
|
-
this.stmt('delete_tags', 'DELETE FROM memory_tags WHERE memory_id = ?').run(id);
|
|
417
|
-
const tagStmt = this.stmt('insert_tag', 'INSERT INTO memory_tags (memory_id, tag) VALUES (?, ?)');
|
|
418
|
-
for (const tag of updates.tags) {
|
|
419
|
-
tagStmt.run(id, tag);
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
if (updates.content !== undefined) {
|
|
423
|
-
const rowId = this.getRowId(id);
|
|
424
|
-
if (rowId !== null) {
|
|
425
|
-
this.stmt('update_fts', 'UPDATE memory_fts SET content = ? WHERE rowid = ?').run(updates.content, rowId);
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
const updatedRow = this.stmt('get_memory', 'SELECT * FROM memories WHERE id = ?').get(id);
|
|
429
|
-
if (!updatedRow)
|
|
430
|
-
return null;
|
|
431
|
-
return this.rowToMemory(updatedRow);
|
|
432
|
-
}
|
|
433
|
-
deleteMemory(id) {
|
|
434
|
-
// tombstone 생성 (sync-safe deletion)
|
|
435
|
-
this.addTombstone(id);
|
|
436
|
-
const rowId = this.getRowId(id);
|
|
437
|
-
if (rowId !== null) {
|
|
438
|
-
this.stmt('delete_fts', 'DELETE FROM memory_fts WHERE rowid = ?').run(rowId);
|
|
439
|
-
}
|
|
440
|
-
const result = this.stmt('delete_memory', 'DELETE FROM memories WHERE id = ?').run(id);
|
|
441
|
-
return result.changes > 0;
|
|
442
|
-
}
|
|
443
|
-
countMemories(options) {
|
|
444
|
-
const conditions = [];
|
|
445
|
-
const values = [];
|
|
446
|
-
if (options?.category) {
|
|
447
|
-
conditions.push('category = ?');
|
|
448
|
-
values.push(options.category);
|
|
449
|
-
}
|
|
450
|
-
if (options?.tier) {
|
|
451
|
-
conditions.push('tier = ?');
|
|
452
|
-
values.push(options.tier);
|
|
453
|
-
}
|
|
454
|
-
if (options?.projectPath) {
|
|
455
|
-
conditions.push('project_path = ?');
|
|
456
|
-
values.push(options.projectPath);
|
|
457
|
-
}
|
|
458
|
-
const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
459
|
-
const row = this.db.prepare(`SELECT COUNT(*) as count FROM memories ${where}`).get(...values);
|
|
460
|
-
return row.count;
|
|
461
|
-
}
|
|
462
|
-
listMemories(options) {
|
|
463
|
-
const conditions = [];
|
|
464
|
-
const values = [];
|
|
465
|
-
if (options?.category) {
|
|
466
|
-
conditions.push('category = ?');
|
|
467
|
-
values.push(options.category);
|
|
468
|
-
}
|
|
469
|
-
if (options?.tier) {
|
|
470
|
-
conditions.push('tier = ?');
|
|
471
|
-
values.push(options.tier);
|
|
472
|
-
}
|
|
473
|
-
if (options?.projectPath) {
|
|
474
|
-
conditions.push('project_path = ?');
|
|
475
|
-
values.push(options.projectPath);
|
|
476
|
-
}
|
|
477
|
-
// excludeParents: Parent 메모리(parent_id IS NULL AND chunk_total IS NOT NULL) 제외
|
|
478
|
-
// Child(parent_id IS NOT NULL) + 독립 메모리(parent_id IS NULL AND chunk_total IS NULL)만 반환
|
|
479
|
-
if (options?.excludeParents) {
|
|
480
|
-
conditions.push('(parent_id IS NOT NULL OR (parent_id IS NULL AND chunk_total IS NULL))');
|
|
481
|
-
}
|
|
482
|
-
const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
483
|
-
const limit = options?.limit ?? 50;
|
|
484
|
-
const offset = options?.offset ?? 0;
|
|
485
|
-
const rows = this.db.prepare(`SELECT * FROM memories ${where} ORDER BY updated_at DESC LIMIT ? OFFSET ?`).all(...values, limit, offset);
|
|
486
|
-
return this.rowsToMemories(rows);
|
|
487
|
-
}
|
|
488
|
-
// ============================
|
|
489
|
-
// Search
|
|
490
|
-
// ============================
|
|
491
|
-
searchByFTS(query, limit = 10, options) {
|
|
492
|
-
const conditions = [
|
|
493
|
-
'memory_fts MATCH ?',
|
|
494
|
-
'(m.parent_id IS NOT NULL OR (m.parent_id IS NULL AND m.chunk_total IS NULL))',
|
|
495
|
-
];
|
|
496
|
-
const params = [query];
|
|
497
|
-
if (options?.projectPath) {
|
|
498
|
-
conditions.push('m.project_path = ?');
|
|
499
|
-
params.push(options.projectPath);
|
|
500
|
-
}
|
|
501
|
-
if (options?.category) {
|
|
502
|
-
conditions.push('m.category = ?');
|
|
503
|
-
params.push(options.category);
|
|
504
|
-
}
|
|
505
|
-
if (options?.tier) {
|
|
506
|
-
conditions.push('m.tier = ?');
|
|
507
|
-
params.push(options.tier);
|
|
508
|
-
}
|
|
509
|
-
params.push(limit);
|
|
510
|
-
const sql = `SELECT m.*, fts.rank
|
|
511
|
-
FROM memory_fts fts
|
|
512
|
-
JOIN memories m ON m.rowid = fts.rowid
|
|
513
|
-
WHERE ${conditions.join(' AND ')}
|
|
514
|
-
ORDER BY fts.rank
|
|
515
|
-
LIMIT ?`;
|
|
516
|
-
const rows = this.db.prepare(sql).all(...params);
|
|
517
|
-
const memories = this.rowsToMemories(rows);
|
|
518
|
-
return rows.map((row, i) => ({
|
|
519
|
-
memory: memories[i],
|
|
520
|
-
score: Math.min(1, Math.max(0, 1 + row.rank / 10)),
|
|
521
|
-
matchType: 'fts',
|
|
522
|
-
}));
|
|
523
|
-
}
|
|
524
|
-
searchByVector(embedding, limit = 10, minScore = 0.5, projectPath) {
|
|
525
|
-
// C-4: 후보 풀 (1000) + 코사인 유사도 계산
|
|
526
|
-
// Parent 메모리(parent_id IS NULL AND chunk_total IS NOT NULL) 제외 — Child + 독립 메모리만 반환
|
|
527
|
-
const rows = projectPath
|
|
528
|
-
? this.stmt('vector_search_project', 'SELECT * FROM memories WHERE embedding IS NOT NULL AND project_path = ? AND (parent_id IS NOT NULL OR (parent_id IS NULL AND chunk_total IS NULL)) LIMIT 1000').all(projectPath)
|
|
529
|
-
: this.stmt('vector_search_all', 'SELECT * FROM memories WHERE embedding IS NOT NULL AND (parent_id IS NOT NULL OR (parent_id IS NULL AND chunk_total IS NULL)) LIMIT 1000').all();
|
|
530
|
-
const scored = rows
|
|
531
|
-
.map((row) => {
|
|
532
|
-
const stored = bufferToFloat32Array(row.embedding);
|
|
533
|
-
const similarity = computeCosineSimilarity(embedding, Array.from(stored));
|
|
534
|
-
return { row, similarity };
|
|
535
|
-
})
|
|
536
|
-
.filter((item) => item.similarity >= minScore)
|
|
537
|
-
.sort((a, b) => b.similarity - a.similarity)
|
|
538
|
-
.slice(0, limit);
|
|
539
|
-
const scoredMemories = this.rowsToMemories(scored.map(s => s.row));
|
|
540
|
-
return scored.map((item, i) => ({
|
|
541
|
-
memory: scoredMemories[i],
|
|
542
|
-
score: item.similarity,
|
|
543
|
-
matchType: 'vector',
|
|
544
|
-
}));
|
|
545
|
-
}
|
|
546
|
-
search(options) {
|
|
547
|
-
const limit = options.limit ?? 10;
|
|
548
|
-
const results = [];
|
|
549
|
-
// FTS 검색 (모든 필터를 SQL 레벨에서 적용)
|
|
550
|
-
try {
|
|
551
|
-
const ftsResults = this.searchByFTS(options.query, limit, {
|
|
552
|
-
projectPath: options.projectPath,
|
|
553
|
-
category: options.category,
|
|
554
|
-
tier: options.tier,
|
|
555
|
-
});
|
|
556
|
-
results.push(...ftsResults);
|
|
557
|
-
}
|
|
558
|
-
catch {
|
|
559
|
-
// FTS 쿼리 실패 시 무시
|
|
560
|
-
}
|
|
561
|
-
// minScore 필터만 후처리 (나머지는 SQL에서 이미 적용)
|
|
562
|
-
const filtered = results.filter((r) => {
|
|
563
|
-
if (options.minScore && r.score < options.minScore)
|
|
564
|
-
return false;
|
|
565
|
-
return true;
|
|
566
|
-
});
|
|
567
|
-
// 중복 제거 (id 기준)
|
|
568
|
-
const seen = new Set();
|
|
569
|
-
return filtered.filter((r) => {
|
|
570
|
-
if (seen.has(r.memory.id))
|
|
571
|
-
return false;
|
|
572
|
-
seen.add(r.memory.id);
|
|
573
|
-
return true;
|
|
574
|
-
}).slice(0, limit);
|
|
575
|
-
}
|
|
576
|
-
// ============================
|
|
577
|
-
// Session
|
|
578
|
-
// ============================
|
|
579
|
-
saveSession(sessionId, projectPath, messageCount) {
|
|
580
|
-
this.stmt('save_session', `
|
|
581
|
-
INSERT OR REPLACE INTO sessions (session_id, project_path, message_count, processed_at)
|
|
582
|
-
VALUES (?, ?, ?, datetime('now'))
|
|
583
|
-
`).run(sessionId, projectPath, messageCount);
|
|
584
|
-
}
|
|
585
|
-
getSession(sessionId) {
|
|
586
|
-
const row = this.stmt('get_session', 'SELECT * FROM sessions WHERE session_id = ?').get(sessionId);
|
|
587
|
-
if (!row)
|
|
588
|
-
return null;
|
|
589
|
-
return {
|
|
590
|
-
sessionId: row.session_id,
|
|
591
|
-
projectPath: row.project_path,
|
|
592
|
-
messageCount: row.message_count,
|
|
593
|
-
processedAt: row.processed_at,
|
|
594
|
-
};
|
|
595
|
-
}
|
|
596
|
-
getSessionCount(projectPath) {
|
|
597
|
-
if (projectPath) {
|
|
598
|
-
const row = this.stmt('count_sessions_project', 'SELECT COUNT(*) as cnt FROM sessions WHERE project_path = ?').get(projectPath);
|
|
599
|
-
return row?.cnt ?? 0;
|
|
600
|
-
}
|
|
601
|
-
const row = this.stmt('count_sessions_all', 'SELECT COUNT(*) as cnt FROM sessions').get();
|
|
602
|
-
return row?.cnt ?? 0;
|
|
603
|
-
}
|
|
604
|
-
// ============================
|
|
605
|
-
// Utility
|
|
606
|
-
// ============================
|
|
607
|
-
getStats() {
|
|
608
|
-
const totalMemories = this.stmt('count_memories', 'SELECT COUNT(*) as count FROM memories').get().count;
|
|
609
|
-
const totalSessions = this.stmt('count_sessions', 'SELECT COUNT(*) as count FROM sessions').get().count;
|
|
610
|
-
let dbSizeBytes = 0;
|
|
611
|
-
try {
|
|
612
|
-
dbSizeBytes = statSync(this.dbPath).size;
|
|
613
|
-
}
|
|
614
|
-
catch {
|
|
615
|
-
// ignore
|
|
616
|
-
}
|
|
617
|
-
const categoryRows = this.stmt('category_counts', 'SELECT category, COUNT(*) as count FROM memories GROUP BY category').all();
|
|
618
|
-
const categoryCounts = {};
|
|
619
|
-
for (const row of categoryRows) {
|
|
620
|
-
categoryCounts[row.category] = row.count;
|
|
621
|
-
}
|
|
622
|
-
return { totalMemories, totalSessions, dbSizeBytes, categoryCounts };
|
|
623
|
-
}
|
|
624
|
-
integrityCheck() {
|
|
625
|
-
try {
|
|
626
|
-
const result = this.db.pragma('quick_check');
|
|
627
|
-
return result.length > 0 && result[0].quick_check === 'ok';
|
|
628
|
-
}
|
|
629
|
-
catch {
|
|
630
|
-
return false;
|
|
631
|
-
}
|
|
632
|
-
}
|
|
633
|
-
vacuum() {
|
|
634
|
-
this.db.exec('VACUUM');
|
|
635
|
-
}
|
|
636
|
-
close() {
|
|
637
|
-
this.stmts.clear();
|
|
638
|
-
this.db.close();
|
|
639
|
-
}
|
|
640
|
-
// ============================
|
|
641
|
-
// Sync
|
|
642
|
-
// ============================
|
|
643
|
-
setSyncStatus(memoryId, remoteId, state) {
|
|
644
|
-
const now = new Date().toISOString();
|
|
645
|
-
this.stmt('set_sync_status', `
|
|
646
|
-
INSERT OR REPLACE INTO sync_status (memory_id, remote_id, synced_at, sync_state)
|
|
647
|
-
VALUES (?, ?, ?, ?)
|
|
648
|
-
`).run(memoryId, remoteId, now, state);
|
|
649
|
-
}
|
|
650
|
-
getSyncStatus(memoryId) {
|
|
651
|
-
const row = this.stmt('get_sync_status', 'SELECT remote_id, synced_at, sync_state FROM sync_status WHERE memory_id = ?').get(memoryId);
|
|
652
|
-
if (!row)
|
|
653
|
-
return null;
|
|
654
|
-
return {
|
|
655
|
-
remoteId: row.remote_id,
|
|
656
|
-
syncedAt: row.synced_at,
|
|
657
|
-
syncState: row.sync_state,
|
|
658
|
-
};
|
|
659
|
-
}
|
|
660
|
-
getPendingSyncMemories(limit = 10000) {
|
|
661
|
-
const rows = this.db.prepare(`
|
|
662
|
-
SELECT m.id, m.content, m.category, m.tier, NULL as embedding,
|
|
663
|
-
m.project_path, m.session_id, m.created_at, m.updated_at,
|
|
664
|
-
m.access_count, m.last_accessed_at, NULL as embedding_hash,
|
|
665
|
-
m.parent_id, m.chunk_index, m.chunk_total
|
|
666
|
-
FROM memories m
|
|
667
|
-
LEFT JOIN sync_status s ON m.id = s.memory_id
|
|
668
|
-
WHERE s.sync_state = 'pending' OR s.sync_state IS NULL
|
|
669
|
-
ORDER BY m.created_at ASC
|
|
670
|
-
LIMIT ?
|
|
671
|
-
`).all(limit);
|
|
672
|
-
return this.rowsToMemories(rows);
|
|
673
|
-
}
|
|
674
|
-
findMemoryByRemoteId(remoteId) {
|
|
675
|
-
const row = this.stmt('find_by_remote', `
|
|
676
|
-
SELECT m.*
|
|
677
|
-
FROM memories m
|
|
678
|
-
JOIN sync_status s ON m.id = s.memory_id
|
|
679
|
-
WHERE s.remote_id = ?
|
|
680
|
-
`).get(remoteId);
|
|
681
|
-
if (!row)
|
|
682
|
-
return null;
|
|
683
|
-
return this.rowToMemory(row);
|
|
684
|
-
}
|
|
685
|
-
getSyncedMemoryCount() {
|
|
686
|
-
const row = this.stmt('synced_count', "SELECT COUNT(*) as count FROM sync_status WHERE sync_state = 'synced'").get();
|
|
687
|
-
return row.count;
|
|
688
|
-
}
|
|
689
|
-
getLastSyncedAt() {
|
|
690
|
-
const row = this.stmt('last_synced', "SELECT MAX(synced_at) as last_synced FROM sync_status WHERE sync_state = 'synced'").get();
|
|
691
|
-
return row.last_synced;
|
|
692
|
-
}
|
|
693
|
-
// ============================
|
|
694
|
-
// Sync History (E-3)
|
|
695
|
-
// ============================
|
|
696
|
-
addSyncHistory(operation, memoryId, status = 'success', details) {
|
|
697
|
-
this.stmt('add_sync_history', `
|
|
698
|
-
INSERT INTO sync_history (operation, memory_id, status, details)
|
|
699
|
-
VALUES (?, ?, ?, ?)
|
|
700
|
-
`).run(operation, memoryId, status, details ?? null);
|
|
701
|
-
}
|
|
702
|
-
getSyncHistory(options) {
|
|
703
|
-
const limit = options?.limit ?? 100;
|
|
704
|
-
if (options?.memoryId) {
|
|
705
|
-
const rows = this.stmt('sync_history_by_memory', 'SELECT * FROM sync_history WHERE memory_id = ? ORDER BY id DESC LIMIT ?').all(options.memoryId, limit);
|
|
706
|
-
return rows.map(mapSyncHistoryRow);
|
|
707
|
-
}
|
|
708
|
-
const rows = this.stmt('sync_history_all', 'SELECT * FROM sync_history ORDER BY id DESC LIMIT ?').all(limit);
|
|
709
|
-
return rows.map(mapSyncHistoryRow);
|
|
710
|
-
}
|
|
711
|
-
// ============================
|
|
712
|
-
// Tombstones (E-3)
|
|
713
|
-
// ============================
|
|
714
|
-
addTombstone(memoryId) {
|
|
715
|
-
this.stmt('add_tombstone', `
|
|
716
|
-
INSERT OR REPLACE INTO tombstones (memory_id, deleted_at, synced)
|
|
717
|
-
VALUES (?, datetime('now'), 0)
|
|
718
|
-
`).run(memoryId);
|
|
719
|
-
}
|
|
720
|
-
getTombstones(limit = 1000) {
|
|
721
|
-
const rows = this.stmt('get_tombstones', 'SELECT * FROM tombstones ORDER BY deleted_at DESC LIMIT ?').all(limit);
|
|
722
|
-
return rows.map((r) => ({
|
|
723
|
-
memoryId: r.memory_id,
|
|
724
|
-
deletedAt: r.deleted_at,
|
|
725
|
-
synced: r.synced === 1,
|
|
726
|
-
}));
|
|
727
|
-
}
|
|
728
|
-
getUnsyncedTombstones() {
|
|
729
|
-
const rows = this.stmt('unsynced_tombstones', 'SELECT memory_id, deleted_at FROM tombstones WHERE synced = 0').all();
|
|
730
|
-
return rows.map((r) => ({
|
|
731
|
-
memoryId: r.memory_id,
|
|
732
|
-
deletedAt: r.deleted_at,
|
|
733
|
-
}));
|
|
734
|
-
}
|
|
735
|
-
markTombstoneSynced(memoryId) {
|
|
736
|
-
this.stmt('mark_tombstone_synced', 'UPDATE tombstones SET synced = 1 WHERE memory_id = ?').run(memoryId);
|
|
737
|
-
}
|
|
738
|
-
saveEmbeddingHash(memoryId, hash) {
|
|
739
|
-
this.stmt('save_emb_hash', 'UPDATE memories SET embedding_hash = ? WHERE id = ?').run(hash, memoryId);
|
|
740
|
-
}
|
|
741
|
-
// ============================
|
|
742
|
-
// Vector Clocks
|
|
743
|
-
// ============================
|
|
744
|
-
saveVectorClock(memoryId, clockState) {
|
|
745
|
-
this.stmt('save_vclock', `
|
|
746
|
-
INSERT OR REPLACE INTO vector_clocks (memory_id, clock_state, updated_at)
|
|
747
|
-
VALUES (?, ?, datetime('now'))
|
|
748
|
-
`).run(memoryId, JSON.stringify(clockState));
|
|
749
|
-
}
|
|
750
|
-
getVectorClock(memoryId) {
|
|
751
|
-
const row = this.stmt('get_vclock', 'SELECT clock_state FROM vector_clocks WHERE memory_id = ?').get(memoryId);
|
|
752
|
-
if (!row)
|
|
753
|
-
return null;
|
|
754
|
-
return JSON.parse(row.clock_state);
|
|
755
|
-
}
|
|
756
|
-
getAllVectorClocks() {
|
|
757
|
-
const rows = this.stmt('all_vclocks', 'SELECT memory_id, clock_state FROM vector_clocks').all();
|
|
758
|
-
return rows.map((r) => ({
|
|
759
|
-
memoryId: r.memory_id,
|
|
760
|
-
clockState: JSON.parse(r.clock_state),
|
|
761
|
-
}));
|
|
762
|
-
}
|
|
763
|
-
saveEmbedding(memoryId, embedding) {
|
|
764
|
-
let buffer;
|
|
765
|
-
let stats = null;
|
|
766
|
-
// Quantization level에 따라 압축
|
|
767
|
-
if (this.quantizationLevel === 'float32') {
|
|
768
|
-
buffer = quantizeToFloat32(embedding);
|
|
769
|
-
}
|
|
770
|
-
else if (this.quantizationLevel === 'int8') {
|
|
771
|
-
const result = quantizeToInt8(embedding);
|
|
772
|
-
buffer = result.buffer;
|
|
773
|
-
stats = result.stats;
|
|
774
|
-
}
|
|
775
|
-
else {
|
|
776
|
-
// 'none': 기존 방식 (float32로 저장)
|
|
777
|
-
buffer = float32ArrayToBuffer(new Float32Array(embedding));
|
|
778
|
-
}
|
|
779
|
-
// 임베딩 저장
|
|
780
|
-
this.stmt('save_embedding', 'UPDATE memories SET embedding = ? WHERE id = ?').run(buffer, memoryId);
|
|
781
|
-
// 메타데이터 저장 (quantization level과 stats)
|
|
782
|
-
this.stmt('save_embedding_meta', `
|
|
783
|
-
INSERT OR REPLACE INTO embedding_metadata (memory_id, quantization_level, quantization_stats)
|
|
784
|
-
VALUES (?, ?, ?)
|
|
785
|
-
`).run(memoryId, this.quantizationLevel, stats ? JSON.stringify(stats) : null);
|
|
786
|
-
}
|
|
787
|
-
getEmbedding(memoryId) {
|
|
788
|
-
const row = this.stmt('get_memory', 'SELECT embedding FROM memories WHERE id = ?').get(memoryId);
|
|
789
|
-
if (!row?.embedding)
|
|
790
|
-
return null;
|
|
791
|
-
// 메타데이터 조회
|
|
792
|
-
const metaRow = this.stmt('get_embedding_meta', 'SELECT quantization_level, quantization_stats FROM embedding_metadata WHERE memory_id = ?').get(memoryId);
|
|
793
|
-
const level = (metaRow?.quantization_level ?? 'none');
|
|
794
|
-
// Level에 따라 역양자화
|
|
795
|
-
if (level === 'float32') {
|
|
796
|
-
return dequantizeFromFloat32(row.embedding);
|
|
797
|
-
}
|
|
798
|
-
else if (level === 'int8') {
|
|
799
|
-
if (!metaRow?.quantization_stats) {
|
|
800
|
-
throw new Error(`Int8 embedding missing stats for memory ${memoryId}`);
|
|
801
|
-
}
|
|
802
|
-
const stats = JSON.parse(metaRow.quantization_stats);
|
|
803
|
-
return dequantizeFromInt8(row.embedding, stats);
|
|
804
|
-
}
|
|
805
|
-
else {
|
|
806
|
-
// 'none' 또는 메타데이터 없음 (레거시 데이터): float32Array로 읽기
|
|
807
|
-
return Array.from(bufferToFloat32Array(row.embedding));
|
|
808
|
-
}
|
|
809
|
-
}
|
|
810
|
-
// ============================
|
|
811
|
-
// Lifecycle
|
|
812
|
-
// ============================
|
|
813
|
-
getMemoriesOlderThan(days) {
|
|
814
|
-
// TTL 기준: last_accessed_at (없으면 updated_at)
|
|
815
|
-
// 활성 면제: 해당 TTL 기간 내 access_count >= 5이면 제외
|
|
816
|
-
// skill 카테고리는 제외
|
|
817
|
-
const rows = this.db.prepare(`
|
|
818
|
-
SELECT * FROM memories
|
|
819
|
-
WHERE COALESCE(last_accessed_at, updated_at) < datetime('now', ?)
|
|
820
|
-
AND COALESCE(access_count, 0) < 5
|
|
821
|
-
AND category != 'skill'
|
|
822
|
-
ORDER BY COALESCE(last_accessed_at, updated_at) ASC
|
|
823
|
-
`).all(`-${days} days`);
|
|
824
|
-
return this.rowsToMemories(rows);
|
|
825
|
-
}
|
|
826
|
-
getMemoriesWithoutEmbedding(limit = 100) {
|
|
827
|
-
const rows = this.db.prepare(`
|
|
828
|
-
SELECT * FROM memories
|
|
829
|
-
WHERE embedding IS NULL
|
|
830
|
-
ORDER BY created_at DESC
|
|
831
|
-
LIMIT ?
|
|
832
|
-
`).all(limit);
|
|
833
|
-
return this.rowsToMemories(rows);
|
|
834
|
-
}
|
|
835
|
-
deleteMemories(ids) {
|
|
836
|
-
if (ids.length === 0)
|
|
837
|
-
return 0;
|
|
838
|
-
const transaction = this.db.transaction(() => {
|
|
839
|
-
let deleted = 0;
|
|
840
|
-
for (const id of ids) {
|
|
841
|
-
// tombstone 생성 (sync-safe deletion)
|
|
842
|
-
this.addTombstone(id);
|
|
843
|
-
const rowId = this.getRowId(id);
|
|
844
|
-
if (rowId !== null) {
|
|
845
|
-
this.db.prepare('DELETE FROM memory_fts WHERE rowid = ?').run(rowId);
|
|
846
|
-
}
|
|
847
|
-
const result = this.db.prepare('DELETE FROM memories WHERE id = ?').run(id);
|
|
848
|
-
deleted += result.changes;
|
|
849
|
-
}
|
|
850
|
-
return deleted;
|
|
851
|
-
});
|
|
852
|
-
return transaction();
|
|
853
|
-
}
|
|
854
|
-
getMemoryCount(projectPath, excludeChildren) {
|
|
855
|
-
const childFilter = excludeChildren ? ' AND parent_id IS NULL' : '';
|
|
856
|
-
if (projectPath) {
|
|
857
|
-
return this.db.prepare(`SELECT COUNT(*) as count FROM memories WHERE project_path = ?${childFilter}`).get(projectPath).count;
|
|
858
|
-
}
|
|
859
|
-
if (excludeChildren) {
|
|
860
|
-
return this.db.prepare('SELECT COUNT(*) as count FROM memories WHERE parent_id IS NULL').get().count;
|
|
861
|
-
}
|
|
862
|
-
return this.stmt('count_memories', 'SELECT COUNT(*) as count FROM memories').get().count;
|
|
863
|
-
}
|
|
864
|
-
// ============================
|
|
865
|
-
// Migration
|
|
866
|
-
// ============================
|
|
867
|
-
/**
|
|
868
|
-
* 레거시 category/tier 값을 새 스키마로 마이그레이션
|
|
869
|
-
* preference → convention, procedural → semantic
|
|
870
|
-
*/
|
|
871
|
-
migrateOldValues() {
|
|
872
|
-
const catResult = this.db.prepare("UPDATE memories SET category = 'convention' WHERE category = 'preference'").run();
|
|
873
|
-
const tierResult = this.db.prepare("UPDATE memories SET tier = 'semantic' WHERE tier = 'procedural'").run();
|
|
874
|
-
return {
|
|
875
|
-
categoriesUpdated: catResult.changes,
|
|
876
|
-
tiersUpdated: tierResult.changes,
|
|
877
|
-
};
|
|
878
|
-
}
|
|
879
|
-
// ============================
|
|
880
|
-
// Parent-Child Chunks
|
|
881
|
-
// ============================
|
|
882
|
-
/**
|
|
883
|
-
* Parent + Children 일괄 생성 (트랜잭션)
|
|
884
|
-
*/
|
|
885
|
-
createMemoryWithChunks(parent, children) {
|
|
886
|
-
if (children.length === 0) {
|
|
887
|
-
return this.createMemory(parent).id;
|
|
888
|
-
}
|
|
889
|
-
const parentId = randomUUID();
|
|
890
|
-
const now = new Date().toISOString();
|
|
891
|
-
const chunkTotal = children.length;
|
|
892
|
-
const insertMemory = this.stmt('insert_memory', `
|
|
893
|
-
INSERT INTO memories (id, content, category, tier, project_path, session_id, created_at, updated_at, parent_id, chunk_index, chunk_total)
|
|
894
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
895
|
-
`);
|
|
896
|
-
const insertTag = this.stmt('insert_tag', 'INSERT INTO memory_tags (memory_id, tag) VALUES (?, ?)');
|
|
897
|
-
const insertFts = this.stmt('insert_fts', 'INSERT INTO memory_fts (rowid, content) VALUES (?, ?)');
|
|
898
|
-
const runTransaction = this.db.transaction(() => {
|
|
899
|
-
// Parent 생성 (parent_id=NULL, chunk_total 설정)
|
|
900
|
-
const parentTags = parent.tags ?? [];
|
|
901
|
-
insertMemory.run(parentId, parent.content, parent.category, parent.tier, parent.projectPath ?? null, parent.sessionId ?? null, now, now, null, null, chunkTotal);
|
|
902
|
-
for (const tag of parentTags) {
|
|
903
|
-
insertTag.run(parentId, tag);
|
|
904
|
-
}
|
|
905
|
-
const parentRowId = this.getRowId(parentId);
|
|
906
|
-
insertFts.run(parentRowId, parent.content);
|
|
907
|
-
// Children 생성
|
|
908
|
-
for (let i = 0; i < children.length; i++) {
|
|
909
|
-
const childId = randomUUID();
|
|
910
|
-
const child = children[i];
|
|
911
|
-
const childTags = child.tags ?? [];
|
|
912
|
-
insertMemory.run(childId, child.content, child.category, child.tier, child.projectPath ?? null, child.sessionId ?? null, now, now, parentId, i, chunkTotal);
|
|
913
|
-
for (const tag of childTags) {
|
|
914
|
-
insertTag.run(childId, tag);
|
|
915
|
-
}
|
|
916
|
-
const childRowId = this.getRowId(childId);
|
|
917
|
-
insertFts.run(childRowId, child.content);
|
|
918
|
-
}
|
|
919
|
-
});
|
|
920
|
-
runTransaction();
|
|
921
|
-
return parentId;
|
|
922
|
-
}
|
|
923
|
-
/**
|
|
924
|
-
* Parent의 모든 Child chunks 조회 (chunk_index 순)
|
|
925
|
-
*/
|
|
926
|
-
getChildChunks(parentId) {
|
|
927
|
-
const rows = this.db.prepare('SELECT * FROM memories WHERE parent_id = ? ORDER BY chunk_index ASC').all(parentId);
|
|
928
|
-
return this.rowsToMemories(rows);
|
|
929
|
-
}
|
|
930
|
-
/**
|
|
931
|
-
* Child의 Parent 조회
|
|
932
|
-
*/
|
|
933
|
-
getParentMemory(childId) {
|
|
934
|
-
const child = this.stmt('get_memory', 'SELECT * FROM memories WHERE id = ?').get(childId);
|
|
935
|
-
if (!child?.parent_id)
|
|
936
|
-
return null;
|
|
937
|
-
return this.getMemory(child.parent_id);
|
|
938
|
-
}
|
|
939
|
-
/**
|
|
940
|
-
* Parent-Child를 원자적으로 교체 (delete old + create new in single transaction)
|
|
941
|
-
*/
|
|
942
|
-
replaceMemoryWithChunks(oldParentId, newParent, newChildren) {
|
|
943
|
-
const transaction = this.db.transaction(() => {
|
|
944
|
-
// 1. 기존 Parent+Children 삭제
|
|
945
|
-
const oldChildren = this.db.prepare('SELECT id FROM memories WHERE parent_id = ?').all(oldParentId);
|
|
946
|
-
for (const child of oldChildren) {
|
|
947
|
-
this.addTombstone(child.id);
|
|
948
|
-
const rowId = this.getRowId(child.id);
|
|
949
|
-
if (rowId !== null) {
|
|
950
|
-
this.stmt('delete_fts', 'DELETE FROM memory_fts WHERE rowid = ?').run(rowId);
|
|
951
|
-
}
|
|
952
|
-
}
|
|
953
|
-
this.addTombstone(oldParentId);
|
|
954
|
-
const oldParentRowId = this.getRowId(oldParentId);
|
|
955
|
-
if (oldParentRowId !== null) {
|
|
956
|
-
this.stmt('delete_fts', 'DELETE FROM memory_fts WHERE rowid = ?').run(oldParentRowId);
|
|
957
|
-
}
|
|
958
|
-
this.db.prepare('DELETE FROM memories WHERE parent_id = ?').run(oldParentId);
|
|
959
|
-
this.stmt('delete_memory', 'DELETE FROM memories WHERE id = ?').run(oldParentId);
|
|
960
|
-
// 2. 새 Parent+Children 생성
|
|
961
|
-
const parentId = randomUUID();
|
|
962
|
-
const now = new Date().toISOString();
|
|
963
|
-
const chunkTotal = newChildren.length === 0 ? undefined : newChildren.length;
|
|
964
|
-
const insertMemory = this.stmt('insert_memory', `
|
|
965
|
-
INSERT INTO memories (id, content, category, tier, project_path, session_id, created_at, updated_at, parent_id, chunk_index, chunk_total)
|
|
966
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
967
|
-
`);
|
|
968
|
-
const insertTag = this.stmt('insert_tag', 'INSERT INTO memory_tags (memory_id, tag) VALUES (?, ?)');
|
|
969
|
-
const insertFts = this.stmt('insert_fts', 'INSERT INTO memory_fts (rowid, content) VALUES (?, ?)');
|
|
970
|
-
// Parent
|
|
971
|
-
const parentTags = newParent.tags ?? [];
|
|
972
|
-
insertMemory.run(parentId, newParent.content, newParent.category, newParent.tier, newParent.projectPath ?? null, newParent.sessionId ?? null, now, now, null, null, chunkTotal ?? null);
|
|
973
|
-
for (const tag of parentTags) {
|
|
974
|
-
insertTag.run(parentId, tag);
|
|
975
|
-
}
|
|
976
|
-
const parentRowId = this.getRowId(parentId);
|
|
977
|
-
insertFts.run(parentRowId, newParent.content);
|
|
978
|
-
// Children
|
|
979
|
-
for (let i = 0; i < newChildren.length; i++) {
|
|
980
|
-
const childId = randomUUID();
|
|
981
|
-
const child = newChildren[i];
|
|
982
|
-
const childTags = child.tags ?? [];
|
|
983
|
-
insertMemory.run(childId, child.content, child.category, child.tier, child.projectPath ?? null, child.sessionId ?? null, now, now, parentId, i, chunkTotal ?? null);
|
|
984
|
-
for (const tag of childTags) {
|
|
985
|
-
insertTag.run(childId, tag);
|
|
986
|
-
}
|
|
987
|
-
const childRowId = this.getRowId(childId);
|
|
988
|
-
insertFts.run(childRowId, child.content);
|
|
989
|
-
}
|
|
990
|
-
return parentId;
|
|
991
|
-
});
|
|
992
|
-
return transaction();
|
|
993
|
-
}
|
|
994
|
-
/**
|
|
995
|
-
* Parent와 모든 Children 일괄 삭제
|
|
996
|
-
*/
|
|
997
|
-
deleteWithChildren(parentId) {
|
|
998
|
-
const transaction = this.db.transaction(() => {
|
|
999
|
-
// Children의 FTS, tombstone 처리
|
|
1000
|
-
const children = this.db.prepare('SELECT id FROM memories WHERE parent_id = ?').all(parentId);
|
|
1001
|
-
for (const child of children) {
|
|
1002
|
-
this.addTombstone(child.id);
|
|
1003
|
-
const rowId = this.getRowId(child.id);
|
|
1004
|
-
if (rowId !== null) {
|
|
1005
|
-
this.stmt('delete_fts', 'DELETE FROM memory_fts WHERE rowid = ?').run(rowId);
|
|
1006
|
-
}
|
|
1007
|
-
}
|
|
1008
|
-
// Parent 자체도 처리
|
|
1009
|
-
this.addTombstone(parentId);
|
|
1010
|
-
const parentRowId = this.getRowId(parentId);
|
|
1011
|
-
if (parentRowId !== null) {
|
|
1012
|
-
this.stmt('delete_fts', 'DELETE FROM memory_fts WHERE rowid = ?').run(parentRowId);
|
|
1013
|
-
}
|
|
1014
|
-
// Children 수동 삭제 (FK CASCADE DDL 없음)
|
|
1015
|
-
const childResult = this.db.prepare('DELETE FROM memories WHERE parent_id = ?').run(parentId);
|
|
1016
|
-
const parentResult = this.stmt('delete_memory', 'DELETE FROM memories WHERE id = ?').run(parentId);
|
|
1017
|
-
return childResult.changes + parentResult.changes;
|
|
1018
|
-
});
|
|
1019
|
-
return transaction();
|
|
1020
|
-
}
|
|
1021
|
-
/**
|
|
1022
|
-
* 특정 태그를 가진 메모리 전체 조회 (tag 인덱스 JOIN 기반)
|
|
1023
|
-
*/
|
|
1024
|
-
findMemoriesByTag(tag) {
|
|
1025
|
-
const rows = this.db.prepare(`
|
|
1026
|
-
SELECT m.* FROM memories m
|
|
1027
|
-
JOIN memory_tags t ON m.id = t.memory_id
|
|
1028
|
-
WHERE t.tag = ?
|
|
1029
|
-
ORDER BY m.updated_at DESC
|
|
1030
|
-
`).all(tag);
|
|
1031
|
-
return this.rowsToMemories(rows);
|
|
1032
|
-
}
|
|
1033
|
-
// ============================
|
|
1034
|
-
// Private helpers
|
|
1035
|
-
// ============================
|
|
1036
|
-
getRowId(id) {
|
|
1037
|
-
const row = this.stmt('get_rowid', 'SELECT rowid FROM memories WHERE id = ?').get(id);
|
|
1038
|
-
return row?.rowid ?? null;
|
|
1039
|
-
}
|
|
1040
|
-
rowToMemory(row) {
|
|
1041
|
-
const tags = this.stmt('get_tags', 'SELECT tag FROM memory_tags WHERE memory_id = ?').all(row.id);
|
|
1042
|
-
// Embedding 복원 (quantization 고려)
|
|
1043
|
-
let embedding = undefined;
|
|
1044
|
-
if (row.embedding) {
|
|
1045
|
-
try {
|
|
1046
|
-
embedding = this.getEmbedding(row.id) ?? undefined;
|
|
1047
|
-
}
|
|
1048
|
-
catch {
|
|
1049
|
-
// 메타데이터 없는 레거시 데이터는 float32Array로 읽기
|
|
1050
|
-
embedding = Array.from(bufferToFloat32Array(row.embedding));
|
|
1051
|
-
}
|
|
1052
|
-
}
|
|
1053
|
-
const VALID_CATEGORIES = [
|
|
1054
|
-
'error_solution', 'code_pattern', 'decision', 'context',
|
|
1055
|
-
'project_knowledge', 'convention', 'learning', 'skill',
|
|
1056
|
-
];
|
|
1057
|
-
const VALID_TIERS = ['working', 'episodic', 'semantic'];
|
|
1058
|
-
const category = VALID_CATEGORIES.includes(row.category)
|
|
1059
|
-
? row.category
|
|
1060
|
-
: 'context';
|
|
1061
|
-
const tier = VALID_TIERS.includes(row.tier)
|
|
1062
|
-
? row.tier
|
|
1063
|
-
: 'semantic';
|
|
1064
|
-
return {
|
|
1065
|
-
id: row.id,
|
|
1066
|
-
content: row.content,
|
|
1067
|
-
category,
|
|
1068
|
-
tier,
|
|
1069
|
-
tags: tags.map((t) => t.tag),
|
|
1070
|
-
embedding,
|
|
1071
|
-
projectPath: row.project_path ?? undefined,
|
|
1072
|
-
sessionId: row.session_id ?? undefined,
|
|
1073
|
-
createdAt: row.created_at,
|
|
1074
|
-
updatedAt: row.updated_at,
|
|
1075
|
-
accessCount: row.access_count,
|
|
1076
|
-
lastAccessedAt: row.last_accessed_at ?? undefined,
|
|
1077
|
-
parentId: row.parent_id ?? undefined,
|
|
1078
|
-
chunkIndex: row.chunk_index ?? undefined,
|
|
1079
|
-
chunkTotal: row.chunk_total ?? undefined,
|
|
1080
|
-
};
|
|
1081
|
-
}
|
|
1082
|
-
rowsToMemories(rows) {
|
|
1083
|
-
if (rows.length === 0)
|
|
1084
|
-
return [];
|
|
1085
|
-
const ids = rows.map(r => r.id);
|
|
1086
|
-
// SQLite bind variable limit (999) 대응: 청크 단위 조회
|
|
1087
|
-
const CHUNK_SIZE = 900; // 안전 마진
|
|
1088
|
-
const tagMap = new Map();
|
|
1089
|
-
const metaMap = new Map();
|
|
1090
|
-
for (let i = 0; i < ids.length; i += CHUNK_SIZE) {
|
|
1091
|
-
const chunk = ids.slice(i, i + CHUNK_SIZE);
|
|
1092
|
-
const placeholders = chunk.map(() => '?').join(',');
|
|
1093
|
-
const tagRows = this.db.prepare(`SELECT memory_id, tag FROM memory_tags WHERE memory_id IN (${placeholders})`).all(...chunk);
|
|
1094
|
-
for (const tr of tagRows) {
|
|
1095
|
-
const arr = tagMap.get(tr.memory_id) ?? [];
|
|
1096
|
-
arr.push(tr.tag);
|
|
1097
|
-
tagMap.set(tr.memory_id, arr);
|
|
1098
|
-
}
|
|
1099
|
-
const metaRows = this.db.prepare(`SELECT memory_id, quantization_level, quantization_stats FROM embedding_metadata WHERE memory_id IN (${placeholders})`).all(...chunk);
|
|
1100
|
-
for (const mr of metaRows) {
|
|
1101
|
-
metaMap.set(mr.memory_id, {
|
|
1102
|
-
level: mr.quantization_level,
|
|
1103
|
-
stats: mr.quantization_stats ? JSON.parse(mr.quantization_stats) : null,
|
|
1104
|
-
});
|
|
1105
|
-
}
|
|
1106
|
-
}
|
|
1107
|
-
return rows.map(row => {
|
|
1108
|
-
let embedding = undefined;
|
|
1109
|
-
if (row.embedding) {
|
|
1110
|
-
const meta = metaMap.get(row.id);
|
|
1111
|
-
const level = meta?.level ?? 'none';
|
|
1112
|
-
try {
|
|
1113
|
-
if (level === 'float32') {
|
|
1114
|
-
embedding = dequantizeFromFloat32(row.embedding);
|
|
1115
|
-
}
|
|
1116
|
-
else if (level === 'int8') {
|
|
1117
|
-
if (!meta?.stats) {
|
|
1118
|
-
throw new Error('Int8 stats missing');
|
|
1119
|
-
}
|
|
1120
|
-
embedding = dequantizeFromInt8(row.embedding, meta.stats);
|
|
1121
|
-
}
|
|
1122
|
-
else {
|
|
1123
|
-
// 'none' 또는 메타데이터 없음
|
|
1124
|
-
embedding = Array.from(bufferToFloat32Array(row.embedding));
|
|
1125
|
-
}
|
|
1126
|
-
}
|
|
1127
|
-
catch {
|
|
1128
|
-
// 에러 시 레거시 방식으로 폴백
|
|
1129
|
-
embedding = Array.from(bufferToFloat32Array(row.embedding));
|
|
1130
|
-
}
|
|
1131
|
-
}
|
|
1132
|
-
return {
|
|
1133
|
-
id: row.id,
|
|
1134
|
-
content: row.content,
|
|
1135
|
-
category: row.category,
|
|
1136
|
-
tier: row.tier,
|
|
1137
|
-
tags: tagMap.get(row.id) ?? [],
|
|
1138
|
-
embedding,
|
|
1139
|
-
projectPath: row.project_path ?? undefined,
|
|
1140
|
-
sessionId: row.session_id ?? undefined,
|
|
1141
|
-
createdAt: row.created_at,
|
|
1142
|
-
updatedAt: row.updated_at,
|
|
1143
|
-
accessCount: row.access_count,
|
|
1144
|
-
lastAccessedAt: row.last_accessed_at ?? undefined,
|
|
1145
|
-
parentId: row.parent_id ?? undefined,
|
|
1146
|
-
chunkIndex: row.chunk_index ?? undefined,
|
|
1147
|
-
chunkTotal: row.chunk_total ?? undefined,
|
|
1148
|
-
};
|
|
1149
|
-
});
|
|
1150
|
-
}
|
|
1151
|
-
/**
|
|
1152
|
-
* PRAGMA integrity_check 실행
|
|
1153
|
-
*/
|
|
1154
|
-
getIntegrityStatus() {
|
|
1155
|
-
const result = this.db.prepare('PRAGMA integrity_check').get();
|
|
1156
|
-
return result.integrity_check === 'ok';
|
|
1157
|
-
}
|
|
1158
|
-
/**
|
|
1159
|
-
* pending sync 메모리 수 조회
|
|
1160
|
-
*/
|
|
1161
|
-
getPendingSyncCount() {
|
|
1162
|
-
const result = this.db
|
|
1163
|
-
.prepare("SELECT COUNT(*) as count FROM sync_status WHERE sync_state = 'pending'")
|
|
1164
|
-
.get();
|
|
1165
|
-
return result.count;
|
|
1166
|
-
}
|
|
1167
|
-
// ============================
|
|
1168
|
-
// Proficiency (Phase 5 PoC)
|
|
1169
|
-
// ============================
|
|
1170
|
-
createProficiency(input) {
|
|
1171
|
-
const id = randomUUID();
|
|
1172
|
-
const now = new Date().toISOString();
|
|
1173
|
-
this.stmt('insert_proficiency', `
|
|
1174
|
-
INSERT INTO proficiency_records (id, skill_memory_id, skill_name, project_path, created_at, updated_at)
|
|
1175
|
-
VALUES (?, ?, ?, ?, ?, ?)
|
|
1176
|
-
`).run(id, input.skillMemoryId, input.skillName, input.projectPath ?? null, now, now);
|
|
1177
|
-
return {
|
|
1178
|
-
id,
|
|
1179
|
-
skillMemoryId: input.skillMemoryId,
|
|
1180
|
-
skillName: input.skillName,
|
|
1181
|
-
level: 1,
|
|
1182
|
-
experienceCount: 0,
|
|
1183
|
-
successRate: 0.0,
|
|
1184
|
-
actrActivation: 0.0,
|
|
1185
|
-
lastPracticedAt: now,
|
|
1186
|
-
createdAt: now,
|
|
1187
|
-
updatedAt: now,
|
|
1188
|
-
projectPath: input.projectPath,
|
|
1189
|
-
};
|
|
1190
|
-
}
|
|
1191
|
-
getProficiency(id) {
|
|
1192
|
-
const row = this.stmt('get_proficiency', 'SELECT * FROM proficiency_records WHERE id = ?').get(id);
|
|
1193
|
-
if (!row)
|
|
1194
|
-
return null;
|
|
1195
|
-
return mapProficiencyRow(row);
|
|
1196
|
-
}
|
|
1197
|
-
getProficiencyBySkill(skillMemoryId) {
|
|
1198
|
-
const row = this.stmt('get_proficiency_by_skill', 'SELECT * FROM proficiency_records WHERE skill_memory_id = ?').get(skillMemoryId);
|
|
1199
|
-
if (!row)
|
|
1200
|
-
return null;
|
|
1201
|
-
return mapProficiencyRow(row);
|
|
1202
|
-
}
|
|
1203
|
-
listProficiencies(options) {
|
|
1204
|
-
const limit = options?.limit ?? 100;
|
|
1205
|
-
if (options?.projectPath) {
|
|
1206
|
-
const rows = this.stmt('list_proficiencies_project', 'SELECT * FROM proficiency_records WHERE project_path = ? ORDER BY level DESC, updated_at DESC LIMIT ?').all(options.projectPath, limit);
|
|
1207
|
-
return rows.map(mapProficiencyRow);
|
|
1208
|
-
}
|
|
1209
|
-
const rows = this.stmt('list_proficiencies_all', 'SELECT * FROM proficiency_records ORDER BY level DESC, updated_at DESC LIMIT ?').all(limit);
|
|
1210
|
-
return rows.map(mapProficiencyRow);
|
|
1211
|
-
}
|
|
1212
|
-
updateProficiency(id, updates) {
|
|
1213
|
-
const fields = ["updated_at = datetime('now')"];
|
|
1214
|
-
const values = [];
|
|
1215
|
-
if (updates.level !== undefined) {
|
|
1216
|
-
fields.push('level = ?');
|
|
1217
|
-
values.push(updates.level);
|
|
1218
|
-
}
|
|
1219
|
-
if (updates.experienceCount !== undefined) {
|
|
1220
|
-
fields.push('experience_count = ?');
|
|
1221
|
-
values.push(updates.experienceCount);
|
|
1222
|
-
}
|
|
1223
|
-
if (updates.successRate !== undefined) {
|
|
1224
|
-
fields.push('success_rate = ?');
|
|
1225
|
-
values.push(updates.successRate);
|
|
1226
|
-
}
|
|
1227
|
-
if (updates.actrActivation !== undefined) {
|
|
1228
|
-
fields.push('actr_activation = ?');
|
|
1229
|
-
values.push(updates.actrActivation);
|
|
1230
|
-
}
|
|
1231
|
-
if (updates.lastPracticedAt !== undefined) {
|
|
1232
|
-
fields.push('last_practiced_at = ?');
|
|
1233
|
-
values.push(updates.lastPracticedAt);
|
|
1234
|
-
}
|
|
1235
|
-
values.push(id);
|
|
1236
|
-
const result = this.db.prepare(`UPDATE proficiency_records SET ${fields.join(', ')} WHERE id = ?`).run(...values);
|
|
1237
|
-
return result.changes > 0;
|
|
1238
|
-
}
|
|
1239
|
-
addExperienceEvent(event) {
|
|
1240
|
-
const id = randomUUID();
|
|
1241
|
-
this.stmt('insert_experience', `
|
|
1242
|
-
INSERT INTO experience_events (id, proficiency_id, timestamp, outcome, difficulty, context_tags, session_id)
|
|
1243
|
-
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
1244
|
-
`).run(id, event.proficiencyId, event.timestamp, event.outcome, event.difficulty, event.contextTags ? JSON.stringify(event.contextTags) : null, event.sessionId ?? null);
|
|
1245
|
-
return {
|
|
1246
|
-
id,
|
|
1247
|
-
proficiencyId: event.proficiencyId,
|
|
1248
|
-
timestamp: event.timestamp,
|
|
1249
|
-
outcome: event.outcome,
|
|
1250
|
-
difficulty: event.difficulty,
|
|
1251
|
-
contextTags: event.contextTags ?? [],
|
|
1252
|
-
sessionId: event.sessionId,
|
|
1253
|
-
};
|
|
1254
|
-
}
|
|
1255
|
-
getExperienceEvents(proficiencyId, options) {
|
|
1256
|
-
const limit = options?.limit ?? 1000;
|
|
1257
|
-
const order = options?.order === 'asc' ? 'ASC' : 'DESC';
|
|
1258
|
-
const rows = this.db.prepare(`SELECT * FROM experience_events WHERE proficiency_id = ? ORDER BY timestamp ${order} LIMIT ?`).all(proficiencyId, limit);
|
|
1259
|
-
return rows.map(mapExperienceRow);
|
|
1260
|
-
}
|
|
1261
|
-
getExperienceEventCount(proficiencyId) {
|
|
1262
|
-
const row = this.stmt('count_experience', 'SELECT COUNT(*) as count FROM experience_events WHERE proficiency_id = ?').get(proficiencyId);
|
|
1263
|
-
return row.count;
|
|
1264
|
-
}
|
|
1265
|
-
// ============================
|
|
1266
|
-
// Emotion Buffer
|
|
1267
|
-
// ============================
|
|
1268
|
-
bufferEmotionMessage(message) {
|
|
1269
|
-
const id = randomUUID();
|
|
1270
|
-
const now = new Date().toISOString();
|
|
1271
|
-
this.stmt('insert_emotion_buffer', 'INSERT INTO emotion_buffer (id, message, created_at, synced) VALUES (?, ?, ?, 0)').run(id, message, now);
|
|
1272
|
-
}
|
|
1273
|
-
getUnsentEmotionMessages(limit = 10) {
|
|
1274
|
-
return this.db.prepare('SELECT id, message FROM emotion_buffer WHERE synced = 0 ORDER BY created_at ASC LIMIT ?').all(limit);
|
|
1275
|
-
}
|
|
1276
|
-
markEmotionMessagesSynced(ids) {
|
|
1277
|
-
if (ids.length === 0)
|
|
1278
|
-
return;
|
|
1279
|
-
const placeholders = ids.map(() => '?').join(',');
|
|
1280
|
-
this.db.prepare(`UPDATE emotion_buffer SET synced = 1 WHERE id IN (${placeholders})`).run(...ids);
|
|
1281
|
-
}
|
|
1282
|
-
cleanupSyncedEmotionMessages() {
|
|
1283
|
-
const result = this.db.prepare('DELETE FROM emotion_buffer WHERE synced = 1').run();
|
|
1284
|
-
return result.changes;
|
|
1285
|
-
}
|
|
1286
|
-
// ============================
|
|
1287
|
-
// Effectiveness Measurement (F-018~F-019)
|
|
1288
|
-
// ============================
|
|
1289
|
-
/**
|
|
1290
|
-
* Record an injection event (SessionStart or UserPromptSubmit).
|
|
1291
|
-
* Returns the new injection log id.
|
|
1292
|
-
*/
|
|
1293
|
-
recordInjection(input) {
|
|
1294
|
-
const id = randomUUID();
|
|
1295
|
-
const now = new Date().toISOString();
|
|
1296
|
-
this.stmt('insert_injection_log', `
|
|
1297
|
-
INSERT INTO injection_logs (id, session_id, hook_type, injected_memory_ids, injected_keywords, hit_count, total_injected, effectiveness, ab_group, created_at)
|
|
1298
|
-
VALUES (?, ?, ?, ?, ?, 0, ?, NULL, ?, ?)
|
|
1299
|
-
`).run(id, input.sessionId, input.hookType, JSON.stringify(input.injectedMemoryIds), JSON.stringify(input.injectedKeywords), input.totalInjected, input.abGroup ?? null, now);
|
|
1300
|
-
return id;
|
|
1301
|
-
}
|
|
1302
|
-
/**
|
|
1303
|
-
* Record a keyword hit in PostToolUse.
|
|
1304
|
-
*/
|
|
1305
|
-
recordInjectionHit(injectionId, matchedKeywords, toolName) {
|
|
1306
|
-
const id = randomUUID();
|
|
1307
|
-
const now = new Date().toISOString();
|
|
1308
|
-
this.stmt('insert_injection_hit', `
|
|
1309
|
-
INSERT INTO injection_hits (id, injection_id, matched_keywords, tool_name, created_at)
|
|
1310
|
-
VALUES (?, ?, ?, ?, ?)
|
|
1311
|
-
`).run(id, injectionId, JSON.stringify(matchedKeywords), toolName, now);
|
|
1312
|
-
// Update hit_count on injection_log
|
|
1313
|
-
this.stmt('inc_injection_hit_count', 'UPDATE injection_logs SET hit_count = hit_count + 1 WHERE id = ?').run(injectionId);
|
|
1314
|
-
}
|
|
1315
|
-
/**
|
|
1316
|
-
* Get the most recent injection log for a session.
|
|
1317
|
-
*/
|
|
1318
|
-
getLatestInjection(sessionId) {
|
|
1319
|
-
const row = this.db.prepare('SELECT id, injected_keywords, total_injected FROM injection_logs WHERE session_id = ? ORDER BY created_at DESC LIMIT 1').get(sessionId);
|
|
1320
|
-
if (!row)
|
|
1321
|
-
return null;
|
|
1322
|
-
return { id: row.id, injectedKeywords: row.injected_keywords, totalInjected: row.total_injected };
|
|
1323
|
-
}
|
|
1324
|
-
/**
|
|
1325
|
-
* Update effectiveness score at session end.
|
|
1326
|
-
*/
|
|
1327
|
-
updateInjectionEffectiveness(injectionId, effectiveness, hitCount) {
|
|
1328
|
-
this.stmt('update_injection_effectiveness', 'UPDATE injection_logs SET effectiveness = ?, hit_count = ? WHERE id = ?').run(effectiveness, hitCount, injectionId);
|
|
1329
|
-
}
|
|
1330
|
-
/**
|
|
1331
|
-
* Get all hit records for an injection log.
|
|
1332
|
-
*/
|
|
1333
|
-
getInjectionHits(injectionId) {
|
|
1334
|
-
const rows = this.db.prepare('SELECT id, tool_name FROM injection_hits WHERE injection_id = ?').all(injectionId);
|
|
1335
|
-
return rows.map(r => ({ id: r.id, toolName: r.tool_name }));
|
|
1336
|
-
}
|
|
1337
|
-
/**
|
|
1338
|
-
* Record extraction quality evaluation.
|
|
1339
|
-
*/
|
|
1340
|
-
recordExtractionEval(input) {
|
|
1341
|
-
const id = randomUUID();
|
|
1342
|
-
const now = new Date().toISOString();
|
|
1343
|
-
this.stmt('insert_extraction_eval', `
|
|
1344
|
-
INSERT INTO extraction_evaluations (id, memory_id, session_id, significance_score, dedup_action, tier, reused_count, survived_30d, promoted, created_at)
|
|
1345
|
-
VALUES (?, ?, ?, ?, ?, ?, 0, 0, 0, ?)
|
|
1346
|
-
`).run(id, input.memoryId, input.sessionId, input.significanceScore ?? null, input.dedupAction ?? null, input.tier ?? null, now);
|
|
1347
|
-
}
|
|
1348
|
-
/**
|
|
1349
|
-
* Purge injection_logs (and cascade hits) older than given days.
|
|
1350
|
-
*/
|
|
1351
|
-
purgeOldInjectionLogs(days = 30) {
|
|
1352
|
-
const cutoff = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();
|
|
1353
|
-
const result = this.db.prepare('DELETE FROM injection_logs WHERE created_at < ?').run(cutoff);
|
|
1354
|
-
return result.changes;
|
|
1355
|
-
}
|
|
1356
|
-
}
|
|
1357
|
-
function mapSyncHistoryRow(row) {
|
|
1358
|
-
return {
|
|
1359
|
-
id: row.id,
|
|
1360
|
-
operation: row.operation,
|
|
1361
|
-
memoryId: row.memory_id,
|
|
1362
|
-
timestamp: row.timestamp,
|
|
1363
|
-
status: row.status,
|
|
1364
|
-
details: row.details,
|
|
1365
|
-
};
|
|
1366
|
-
}
|
|
1367
|
-
function mapProficiencyRow(row) {
|
|
1368
|
-
return {
|
|
1369
|
-
id: row.id,
|
|
1370
|
-
skillMemoryId: row.skill_memory_id,
|
|
1371
|
-
skillName: row.skill_name,
|
|
1372
|
-
level: row.level,
|
|
1373
|
-
experienceCount: row.experience_count,
|
|
1374
|
-
successRate: row.success_rate,
|
|
1375
|
-
actrActivation: row.actr_activation,
|
|
1376
|
-
lastPracticedAt: row.last_practiced_at ?? row.created_at,
|
|
1377
|
-
createdAt: row.created_at,
|
|
1378
|
-
updatedAt: row.updated_at,
|
|
1379
|
-
projectPath: row.project_path ?? undefined,
|
|
1380
|
-
};
|
|
1381
|
-
}
|
|
1382
|
-
function mapExperienceRow(row) {
|
|
1383
|
-
return {
|
|
1384
|
-
id: row.id,
|
|
1385
|
-
proficiencyId: row.proficiency_id,
|
|
1386
|
-
timestamp: row.timestamp,
|
|
1387
|
-
outcome: row.outcome,
|
|
1388
|
-
difficulty: row.difficulty,
|
|
1389
|
-
contextTags: row.context_tags ? JSON.parse(row.context_tags) : [],
|
|
1390
|
-
sessionId: row.session_id ?? undefined,
|
|
1391
|
-
};
|
|
1392
|
-
}
|
|
1393
|
-
function bufferToFloat32Array(buf) {
|
|
1394
|
-
const arrayBuffer = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
|
|
1395
|
-
return new Float32Array(arrayBuffer);
|
|
1396
|
-
}
|
|
1397
|
-
function float32ArrayToBuffer(arr) {
|
|
1398
|
-
return Buffer.from(arr.buffer, arr.byteOffset, arr.byteLength);
|
|
1399
|
-
}
|
|
1400
|
-
//# sourceMappingURL=database.js.map
|
|
1
|
+
(function(_0x53e352,_0x1c5a57){function _0x2817ea(_0xbb76a4,_0x57ce49){return _0x214f(_0xbb76a4- -0x3d6,_0x57ce49);}function _0x29ee47(_0x92b415,_0x4b4f9e){return _0x214f(_0x92b415-0xd9,_0x4b4f9e);}const _0x21cca3=_0x53e352();while(!![]){try{const _0x4b55f9=-parseInt(_0x29ee47(0x744,0x8c2))/0x1+parseInt(_0x29ee47(0x5a5,0x563))/0x2+-parseInt(_0x29ee47(0x675,0x7bb))/0x3+-parseInt(_0x2817ea(0x3,0x281))/0x4+parseInt(_0x29ee47(0x517,0x679))/0x5+-parseInt(_0x29ee47(0x447,0x52f))/0x6*(parseInt(_0x29ee47(0x7e8,0x943))/0x7)+parseInt(_0x2817ea(0x2c0,0x29e))/0x8;if(_0x4b55f9===_0x1c5a57)break;else _0x21cca3['push'](_0x21cca3['shift']());}catch(_0x4e78e9){_0x21cca3['push'](_0x21cca3['shift']());}}}(_0x5372,0xcd991));function _0x5372(){const _0x3ef591=['rvjuieLove8GBq','icDJB252zw50Aq','tsbTzw1VCNLFDa','DgLVBL9OAxrZxW','ExbLifrfwfq','teH5Bei','B3j5x2z0CYbtrq','BNrFAwqGsvmGtG','u0vmrunuihf1yq','rvmGBwvTB3jPzq','z2v0x21LBw9YEq','qvvmvcaWlaOGia','cGOGicaGicbduG','Df9PzcbjuYbovq','x2XLDMvSlcbXDq','EKrmrMy','C3vJy2vZC19Yyq','veuGq0ftq0ferq','icDWzw5KAw5NjW','mZa5mdLbu0DjveC','D0XkAM4','CejZvNm','DgGGpsa/ie9sra','lca/lca/lca/la','cIaGica','wM1RtxC','rvHju1rtigLKEa','x3r5CguP','u1rtigvTB3rPBW','CYaOBwvTB3j5xW','Bw9YEuLKCW','zwn0AxzLBMvZCW','Dw46ig5WBsbYzq','ktSkicaGicaGqW','cIaGicaGiensrq','cIaGicaGieXjtq','id8Sid8Sid8Sia','uK9nig1LBw9YAq','Ew5Jx2HPC3rVCG','DhjPy3mGkhnLCW','sfPZtLO','AM9PBG','id0GpWOGicaG','tev6Bvm','tYbTzw1VCNLFzG','yMjoD1C','CKrqsum','C3nAugK','rejfuwe','B2PLy3rFCgf0Aa','cIaGicaGicaGqW','Ev9PzcWGDgfNkq','ChjVzMLJAwvUyW','zNrZ','tIbLBwjLzgrPBG','BgLZDe1LBw9YAq','icaGicaGicb0yq','icaGihbYB2nLCW','quXurviGvefcta','zwn0Aw9Ux2XVzW','icaGicK7cIaGia','svqGpWOGicaG','mtaZodaWmJrnBLHbB3a','DgvKx2f0lcbWyq','BL9IDwzMzxiGka','C2f2zv9LBwjLza','CM93Awq','DxbKyxrLsw5Qzq','zgf0zwrFyxqSia','su5uruDfuIbquG','DhmGv0HfuKuGCG','icaGq1jfqvrfia','BwL5tuG','z2v0x3n5BMnFCW','BwvTB3j5swq','CfDvuvq','revsiejzignYzq','rvndlcb1CgrHDa','iezst00GBwvTBW','CMfUAW','zw1VCNLFDgfNCW','lMnYzwf0zwrFyq','ihbYB2nLC3nLza','w2eYyv0GvgHPCW','zhHFDg9TyNn0BW','BwLNCMf0zu9Sza','ie1bveniid8','CYbxsevsrsbZEq','ExmGpsbptG','Aw5Zzxj0x3rHzW','y2vFC2nVCMuSia','B3DvA3m','y2HHBMDLCW','zw1VCMLLCYWGyW','id8kicaGicaGtW','ELjxt0K','BwfUDgLJjYbxsa','ihn5BMnFC3rHDa','ChjLCgfYzq','ieLtie5vteW','uev3vfG','kcDUB3CNksKScG','x3bHDgGSignYzq','y3rPB24','icDWCM9Jzwr1CG','ig5HDgL2zsbIAq','rsbZzxnZAw9UxW','u3LUy01LBw9YAq','ieLorevyieLgia','teXvvMe','ihrVB2XFBMfTzq','lcbWCM9MAwnPzq','BL9IDwzMzxjFCW','icaGicaGywjFzW','u0vmrunuig1LBq','B2nRx3n0yxrLia','t1qGrvHju1rtia','DgLLCG','uKrfuIbcwsbTlG','ie9oierftevurq','ywn0CL9Hy3rPDG','CxLuwKK','AwvZieLovevhrq','uxHutha','BL9SB2DZifDirq','C3nPB25FAwqSia','BL9IDwzMzxiGvW','CML0Eq','z2v0rxHWzxjPzq','Aw5Qzwn0zwrlzq','BM93jYKPcIaGia','BgvUz3rO','A2v5D29YzhmSia','y2nTsKW','teWGrevgqvvmva','EsburvHuie5pva','icaGv0HfuKuGCW','C3nFy291BNqSia','zxmGv0HfuKuGCa','ywrKvg9TyNn0BW','icaGig0UywnJzq','rsbZzxnZAw9UCW','uIWkicaGicaGia','zwXLDgvKx2f0ia','uKuGBwvTB3j5xW','AwvZifDirvjfia','rvjfihbYB2zPyW','y3bzueO','C2v0','CYa9ie5puK1bta','BwLqveq','cIaGicaGifnfta','DcbjtLrfr0vsla','lNjLBw90zv9Pza','Aw50oa','BgvHCM5PBMC','ru5ulaOGicaGia','pYWGpYWGzgf0zq','icaGicaGicbYzq','zgLMzMLJDwX0Eq','B3rHBf9Tzw1VCG','Bw9YEv90ywDZka','ig1LBw9YAwvZcG','pYKkicaGia','zsbptIbTzw1VCG','uhbKtKe','vK5pC3m','ienbu0nbreukia','C3LUy19ZDgf0zq','Aw5Jx2LUAMvJDa','idWGzgf0zxrPBq','ChjVAMvJDf9Wyq','CufAzu0','zxzHBhnFC2vZCW','yNvPBgqGyMv0Da','khn5BMnLzf9HDa','sevsrsbZEw5Jzq','BwvZDgfTCcbptG','Bw9YEv9PzcWGDa','DKPWtey','DxbKyxrLtwvTBW','BMPLy3rLzf9Rzq','y1fXquC','mtGYsfHfvvn1','icbWCM9Qzwn0xW','t1jerviGqLKGBq','ieLtie5vteWPkq','B25LCYbxsevsrq','weLtvfmGAwr4xW','z2v0x3zJBg9JAW','yxb2C0y','vcWkicaGicaGia','icaGicaGihf1yq','ieLtie5vteWGqq','icaGicaGigLKia','pca1cIaGicaGia','icaGicaGv0HfuG','zsWGChjVAMvJDa','icaGicaGBgv2zq','vLLSCu0','zMvYkhn5BMnLza','B3j5v2L0AenODq','BwfYA1rVBwjZDa','yxrLzf9HDcbbuW','lcaWlcaWlcaWla','B3j5x2LKifrfwa','sfvNuK4','igHVB2TFDhLWzq','Dg90ywXFAw5Qzq','Aw5NsgfZAa','x3bHDgGGpsa/','CYaOAwqSig1LBq','B05wsKC','AwqGpsa/','zxjYB3i','Aw5Qzwn0Aw9UxW','zcburvHuifbssq','CMvJB3zLCKnVCG','u0nbreukicaGia','cIaGicaGicaGDq','y3LFCMvJB3jKCW','cIaGicaGicaGyq','Aw50zwDYAxr5qW','CYbxsevsrsbWCG','igz0CZuOcIaGia','svnuuYbPzhHFzq','sw50ocbZDgf0CW','vvbeqvrfihrVBq','j25VDYCPksWkia','C3mGuKvbtcWkia','zwrFmZbKlcbWCG','q2HPBgrYzw4','DhLFC2nVCMuSia','ChvYz2vpBgrjBG','zMLSDgvY','ksbHCYbSyxn0xW','C3LUy19OAxn0BW','teTpweK','y29Kzv9Wyxr0zq','Dg90ywWGsvmGtG','C2TPBgXoyw1L','B3z6A0O','vcbJB250zw50ia','runuig0UAwqSia','x2f0ifrfwfq','w2eYyv0GyMv0Da','DgvKx2f0ierfuW','CMrZifDirvjfia','C2v0u3LUy1n0yq','zvv1u2e','qNLszw1VDgvjza','y291BNqSidaPia','DgGGpsa/','B25FAgL0CYaOcG','ieforcbWCM9Qzq','u0vmrunuigvTyG','ywXPza','uK9nihzLy3rVCG','Bhr5ifjfquWGtG','r3zOENq','BwvTB3jPzxmGvW','rsbPzca9id8','A0HUvhC','DgfNCW','BIb0AguGtM9Kzq','Bs5JAhvUA19PBG','zcbjuYbovuXmia','uKuGChjVAMvJDa','AwvUy3K','y2HLy2S','C2vZC2LVBL9Tzq','y2fUBM90ig9Wzq','zxr0zxiTC3fSAq','B3jLid0GpW','EwzrsM0','wuzxwuC','ywDZicHTzw1VCG','x2XVz3mGv0HfuG','B2zPy2LLBMn5xW','BMnLrxzLBNq','CMvJB3jKrxH0CG','C2vKx2f0ifrfwa','uK9vucbcwsbJyq','yxnJ','BwvTB3jPzxmOCW','BwvTB3j5vhLWzq','lNbHCMvUDf9Pza','igLKEf9ZEw5JxW','id0Glty0mdaW','wfqScIaGicaGia','tcberuzbvuXuia','yMzWBNG','yxrPB24Gpsa/','w2eYyv0Grgf0yq','kqOGicaGicbwqq','B3bLBKrHDgfIyq','Ag90vgLLCKnVDq','Aw1LC3rHBxaGva','rLL4r2O','wgr2vNC','BgfZDfbYywn0Aq','AwqSihnRAwXSxW','CxvHBgL0EvnJBW','rsbjtKrfwcbjrG','BwvTB3jPzxmGBq','AwqPifjfrKvsrq','yxrHyMfZztOG','sK9jtIbTzw1VCG','tIbTzw1VCMLLCW','rv9wrvjtsu9o','BwvTB3j5x2LKia','y2TZicHTzw1VCG','Dcbbu0mkicaGia','v0HfuKuG','u0vmrunuihrHzW','uYbot1qGtLvmta','Dg90ywXjBMPLyW','BNqSignHDgvNBW','rsbdt0fmrvndrq','icaGicaGicbPza','ihmUBwvTB3j5xW','yNL0zu9MzNnLDa','w2eYyv0GrMfPBa','Aw5Qzwn0zwrFBq','AeDyD2W','ie9oig0UAwqGpq','zwrKAw5NiezstW','ExDVCMrZ','ksbsruzfuKvoqW','DhLtDgf0Dxm','AgL0x2nVDw50','B2n5yLC','C3rVCNKOBwvTBW','wvP4tw0','q2XVy2S','yxrLzf9HDcWGDq','CNr1Bum','AgvJAW','ifzbtfvfuYaOpW','zgvKDxbFywn0Aq','yvniBwG','rufursbjtKrfwa','CNLFAwqGpsa/','C2vKx2f0','kg1LBw9YEv9Pza','t1jfsuDoieTfwq','ihjLyNvPBgqGyG','DxbFywn0Aw9Uia','jYWNCgfYDgLHBa','tIbTlMLKid0GDa','DMfJDxvT','B3j5lMrI','BMvZ','ruzbvuXuidaScG','icGkicaGicaGia','wwHPv1e','z2v0vMvJDg9YqW','uKuGAwqGsu4Gka','B25iAxrZ','uKvbveuGvKLsva','AhvUA19PBMrLEa','ExfOuMK','ihnRAwXSx25HBq','C3rHDhm','Bs5WCM9Qzwn0xW','CYWGAw5Qzwn0zq','Awf3Cwq','uYb0B21IC3rVBG','DcWGpYKGv0HfuG','vuf4Au4','CxvPy2TFy2HLyW','zca9id8','vKfdvvvn','zxmG','B3j5x2LKlcbKzq','zg5lwxG','CLzACg8','B2fVwLO','icaGicaGig0UCa','tLvmtcberuzbvq','qu5eienpquXfuW','icGNC3vJy2vZCW','ihn5BMnLzca9ia','ig0Uy2f0zwDVCG','BIbOyxmGy2HHBG','sxHjrhm','y291BNqGsu5urq','rvjfig1LBw9YEq','ihvZDwfSBhKGAa','BwvTB3j5x2LKla','ieforca','igLUAMvJDgvKxW','BMPLy3rPB25FAq','rvjfigLKid0GpW','zwqGywDHAw5ZDa','u0zmB1K','Dw5RCW','DgvK','zw50x2LKid0GpW','zwDYAxr5x2nOzq','Bs5JB250zw50la','Bs50AwvYid0GpW','icaGicaGt1jerq','x21LBw9YEv9Pza','EsWGBs50AwvYla','icaGBwf0y2HLza','wcbjrIbot1qGrq','C2vZC2LVBNmGka','icaGicaGicbLEa','Ew5Jx3n0yxrLkq','wuDlEuO','lcbMDhmUCMfUAW','tK9uie5vteWGtW','yLjUr2e','B3jdBg9JA3m','zcWGBwf0y2HLza','CNLFAwqPifjfrG','u0vmrunuihjLBq','BMn5x2LKlcb0Aq','uMTOB1m','uK9nihbYB2zPyW','psa/ifDirvjfia','rvmGkd8Sid8Sia','zwqGDg8GBw92zq','ie5pvcbovuXmla','zw1VCNLFAwqGpq','C2vHCMnOqNLgva','y2f0zwDVCNKGpq','icG/lca/lca/la','zLnqt24','B2rLnJeNcIaGia','BwfW','BIbZAgfYzwqGBW','x21LDgfKyxrHia','DgvKx2f0lcb1Ca','C3nPB25ZifDirq','oWOGicaGicbduG','B21IC3rVBMvZ','B3bLCMf0Aw9U','zf9HDcWGDxbKyq','icaGihrVB2XFBG','qvvut0Loq1jftq','y2f0zwDVCNLFyW','ihn5BMnFAgLZDa','CMfUAWOGicaGia','ywDLx2nVDw50la','BgfZDf9ZEw5Jzq','DenIruK','iejzigrLBgv0zq','zv9JB3vUDcbjtG','DxbKyxrLx2LUAG','AwnPzw5JEv9WCG','zguGpsbxquW','zxnZAw9Utwv0CG','z19TzxrHzgf0yq','z2v0uM93swq','C3nPB25Z','BwvZC2fNzq','C2vHCMnOqNLwzq','r0vsie5pvcbovq','teWScIaGicaGia','rviGqLKGBgv2zq','CgrHDgvKx2f0kq','DguGuKvbtcWkia','vcbovuXmierfrG','veuGvefcteuGsq','AgPLz0e','A2LSBa','tLvmtcbpuIaOBq','z2v0tgf0zxn0sq','ifbYzxzPB3vZia','C2nVCMuGuKvbta','tKnfuYbTzw1VCG','CMfJDgLVBL9Yyq','Aw9UC19HBgW','B25LCYbpuKrfuG','Aw5Qzwn0zwrnzq','CM9MAwnPzw5JEq','yNL0zuXLBMD0Aa','tfvfuYaOpYWGpW','u0vmrunuigLKla','Ev9ZA2LSBcbptG','icaGicaGicbSyq','icaGicaGktSkcG','B3rLx2LKlcbZEq','BgLZDfbYB2zPyW','AeXMsLa','sevsrsbWyxjLBG','ktSkcIaGicaGia','r255yuS','DgvKie9oig1LBq','CNLFBwvTB3j5ia','BNqSihn1CNzPDG','CMf0zsWGzgvKDq','EMXsshG','zw1VCMLLC190Aq','CM93C1rVtwvTBW','z3mSihnLC3nPBW','ienpquXfu0nfka','CNvU','BMCGC3rHDhmGzG','Bg9JAW','C2vZC2LVBKLK','kcDUB3CNksbxsa','CM9Qzwn0x3bHDa','BuzNy0S','tYbTzw1VCNLFDa','DxaSignYzwf0zq','id0Gtuvnt1jz','igjLDhrLCI1ZCq','ie9oihrVBwjZDa','z3mP','suz2sgK','sevsrsbPzca9ia','CvH1s3G','zgvSzxrLtwvTBW','icbwquXvrvmGka','ruzfuKvoq0vtia','B2PLy3qGt04GCa','icbJB250zw50ia','C2LNBMLMAwnHBG','zw5Jzv9LDMvUDa','vuXmierfrKfvta','icaGyxzNx3f1yq','C2XPy2u','Aw5Zzxj0x2v4Ca','vgPkq0G','uKvbveuGsu5erq','zcburvHu','z2v0uMvJzw50uW','zMXVyxqZmG','Dwf0Aw9UCYaOcG','uYaOpYWGpYWGpW','x3n0yxrLifrfwa','Cf9YyxrPBYWGyq','vuXmcIaGicaGia','icaGktSkcIaGia','DvbTEMO','tLPZshG','ChjVAMvJDf9RBG','vcaOzgf0zxrPBq','x2DYB3vWifrfwa','Dxb0igrHDgfIyq','x2LKid0GpYbpuG','w2eYyv0GicbVCG','Bwf4','x2f0kq','BMTFDg90ywWkia','rLjptsbTzw1VCG','ifDirvjfihbHCG','B25Lu3LUy2vK','AwnHBMnLx3nJBW','CYWGzgv0ywLSCW','yMvKzgLUz19Oyq','ignODw5Rx2LUza','AwvZkg1LBw9YEq','zw1VCNK','ignVBNrLBNqPia','icaGicaGicbLzG','icaGicaGihrVDa','DYCPkqOGicaG','CYHPzcKGt04Gra','Aw5Qzwn0Aw9Urq','B25FAwqPoWOGia','uKuGy3jLyxrLza','A1rmEem','Cgf0AcWGBwvZCW','ieLovevhrviGtG','tYbLBw90Aw9UxW','tKqGBs5JAhvUAW','DxmGCYbptIbTlG','BMnFC3rHDguGpq','q1v4qMu','B3jPzxmOzw1Izq','qxjhzKO','C3vJy2vZCW','ywfeAxa','yMPLy3q','DMvJDg9Y','CYHWyxjLBNrFAq','rKfvtfqGmaOGia','y250','BwfYA0vTB3rPBW','igrHDgfIyxnLlG','DxbKyxrLuhjVzG','zgvKDxbby3rPBW','ifrfwfqGtK9uia','vevhrviGtK9uia','z2v0x2vTyMvKza','z2v0x3rVBwjZDa','z2v0uhjVzMLJAq','qLvsDe8','y3jLyxrLtwvTBW','DwTLChC','zgvSzxrLv2L0Aa','Dg9ju09tDhjPBG','Bfr6D1O','zf9HDcKkicaGia','y2TFC3rHDguGrG','vu5jBvy','C2LVBL9PzcWGzq','qu5eignODw5RxW','AwqGsvmGtK9uia','DgLLCIa9icDZzq','q0uOywnJzxnZxW','DgfN','Ev90ywDZihqGtW','uKXLAMC','CL9JBg9JA3m','CMvHDgvKx2f0ia','u1rtig1LBw9YEq','qurfcIaGicaGia','ywrK','icHTzw1VCNLFAq','DcburvHulaOGia','C3rTDhm','B25LCYHZEw5Jzq','tK9uievysvnuuW','yxqPcIaGicaGia','Agvjv20','tNf2CeG','DLzQz1K','Dgf0Dxm','ywXFAw5Qzwn0zq','ieTfwsaOBwvTBW','icaGihrPzxiGva','A19ZDgf0zsWGDq','ie5vteWGyxmGzq','pYbbtKqGkhbHCG','wsblrvKScIaGia','C3rHBxaG','zsa9id8','AwvUy3LFAwqGpq','zfPft2q','tLvmtcKP','B3DPzca9id8','z2v0x3nLC3nPBW','vKfmvuvticG/la','icbmsu1jvca/cG','C3LUy2HYB25VDq','y19ZDgf0DxmOCW','B2nRCYaOcIaGia','DcWGC3LUy2vKkq','rwD2u3y','y2nLC3nFy291BG','CNLFDgfNCYbxsa','B25FC3rHDhm','x2LKid0GpW','x2v4CgvYAwvUyW','y1f2Beq','u3LUy0nVDw50','CM93vg9nzw1VCG','ANzhsNy','B24NifDirvjfia','Aw9UC19WCM9Qzq','vuvticG/lca/la','y3rYx2fJDgL2yq','rKfvtfqGmcWkia','B25FBgv2zwW','rvHulaOGicaGia','s0vzlaOGicaGia','CMvWBgfJzu1LBq','pYWGpYKkicaGia','idaScIaGicaGia','icaGCMv1C2vKxW','vfHmqui','ChjVAMvJDfbHDa','Axn0B3j5ie9sra','icaGicaGihbYBW','zMzLy3rPDMvUzq','zwrFyxqSig0UDq','icaGicaGiezpuG','tKPuCKu','zwn0Aw9Ux2HPDa','jYWNzMfPBhvYzq','Ag9VA1r5Cgu','z2v0twvTB3jPzq','cIaGicaGicaGrG','psaX','lcbOAxrFy291BG','B3DSzwrNzq','z2v0u3rHDhm','Aur2tgG','zwqGpsaXifDirq','BL9TzxrYAwnZia','Bw9YAwvZig0GtW','zcWGy29UDgvUDa','yMfZzsbPBNrLzW','AgfZAca9id8GvW','zsGNBM93jYK','DcburvHuie5pva','B3jKzxi','teLnsvqGpW','Bs92zxjZAw9UCW','CgfYzw50x2LKla','AwnLzf9HDcburq','rfnTD04','ieXjtuLuid8','EhbLCMLLBMnLxW','Dg9YEq','lcbWCM9Qzwn0xW','x2nVDw50id0GpW','icaGicaGzgv0yq','u0vmrunuie1bwa','CM91CcburvHula','yNvMzMvYicHPza','su5ervGGsuyGtG','khbHCMvUDf9Pza','D1PmqNa','vevyvcbot1qGtG','DMuGyMLUzgLUzW','zw5JEuj5u2TPBa','icaGicaGBwvTBW','zMLJAwvUy3K','rvjuieLove8GCW','psa/lcbOAxrFyW','tsbPBMPLy3rPBW','zgvKDxbsyxrPBW','rvjfia','AK14yxu','icaGicaGicbTzq','y291BNrFC2vZCW','Ev9PzcburvHuia','y2fJAgvFC2L6zq','mtq0nJzwC01wAvK','D0vzALO','z2v0rw1IzwrKAq','CxvLCNK','Ew90u2u','qLKGBgv2zwWGra','C2vTyw50Awm','vcbkt0Loihn5BG','CM93AwqGpsa/','qvnd','DxbFCMf0Aw8GuG','zgf0ysbTyxKGyG','CunTALi','y2f0zwDVCNK','C2f2zvzLy3rVCG','AwvUy3LFyNLFCW','zM9YzwLNBL9Rzq','DgLLCIK7cGOGia','icHKyxrLDgLTzq','pYWGpYWGpYWGpW','Bs5Syxn0x2fJyW','zxzHBhvHDgLVBG','vuXWAgS','CMuGuKvbtcWkia','C2L6zq','ugvrqK8','icaGicbduKvbva','Dw50','igvYCM9YoIa','C3nFy291BNq','CNLFAwqPoWOGia','icbZA2LSBf9Uyq','ierfrKfvtfqGka','BwuGvevyvcbotW','x2v2ywXZx21LBq','Ahbyy0G','Aw5PDgLHBgL6zq','C1DPDgHVDxrfBq','ufjjtufswsblrq','zMLJAwvUy3LFCG','CYaOcIaGicaGia','kqOGicaG','DgLUzYbHig5LDW','y2H1BMTFDg90yq','cIaGicaGiezstW','Dg9TyNn0B25LCW','zgjqyxrO','D3rJy1G','zw1VCNLFAwrZ','yNn0B25LCYbtrq','DgvNB3j5','DvbJB00','zgvSzxrLx2z0CW','r0f0D0C','yw1LifrfwfqGtG','zgrPBMDFAgfZAa','C2vHCMnO','AwnZ','DcWGDg90ywXFAq','uLfbCvC','BL9LzMzLy3rPDG','ruzbvuXuicDZDq','yxnOie9oig1LBq','rwjbtfO','u3f1BM4','x2z0CYbvu0LorW','ignVCNj1ChqGza','AwqPie9oierfta','Aw1LC3rHBxaGuG','Cvf4qMO','Aw9Uie9oigv4Da','ierfu0mGteLnsq','rIbot1qGrvHjuW','BwvTB3j5x2LK','vefcteuGsuyGtG','ANz1qLi','y2HLy2TjBNrLzW','ywWN','zMzPy3vSDhKSia','DgfSieLovevhrq','wgXYA0K','BL9PzcWGy3jLyq','vuXmlaOGicaGia','zKr6sLK','Aw5JBhvKzxm','zxnZAw9Ux2LKkq','B3v0y29TzsbjtG','DguZ','Aw9Ux2LKifrfwa','tIbJAhvUA190BW','zca9idaGt1jerq','kqOGicaGicaGia','igrHExm','icaGicaGicaGia','y29UDgv4Da','y3rPB25FAgL0CW','AwXZifrfwfqkia','ig1LBw9YAwvZia','icaGicaGC2vZCW','BNzly3u','icaGiezst00GBq','CMnOx2fSBa','C2f2zuvTyMvKza','ChjHz21H','zxmGkaOGicaGia','z2v0ugvUzgLUzW','id8PcIaGica','nJm0mJCWngLPEgLpyW','zgvJAxnPB24','u0vmrunuigLKia','AgfZ','zf9HDcWGC3LUyW','AwqkicaGicaGvW','Bgv2zwW','BNrPEMf0Aw9UxW','laOGicaGicaGia','AcK7cIaGicaGia','DgvKx2f0ifrfwa','Aw52ywXPzf9HDa','AwvUy3LFCMvJBW','z2v0x3jVD2LK','BM9Kzv9TB2r1Ba','lcbJAhvUA190BW','ruzbvuXuideScG','y3LFAwqGvevyva','ywnJzxnZx2nVDq','BwvTB3j5x2z0CW','y0n1zfi','icaGBs5WCM9Qzq','AwvZx2nHDgvNBW','yKLuwvy','rsbuqujmrsbjrG','wuzWvva','zw1VCMLLCYaOAq','DgLVBIbsrufmia','Cu1RB2e','sxfhBNu','B2PLy3qGt04GBq','id0Gzgf0zxrPBq','C2TPBgXnzw1VCG','zcWGBs5JCMvHDa','q0vsvvO','Bwv0ywrHDgeGka','vhrwBxm','u0vmrunuignHDa','zw5LC3mSigHVDa','vvbeqvrfigLUAG','zxmVytjHlw1LBq','svqGmtaWma','C3rTDa','u1rtihn5BMnFAa','vufmifrbqKXfia','zgvSzxrLzf9HDa','id8P','Aw9UCW','icaGy2f0zwDVCG','icHZA2LSBf9Tzq','DMPvv0G','icaGicaGigLUAG','CNLxAxrOq2H1BG','shLqrgC','tKrfwcbjrIbotW','z2v0qwXSsw5Qzq','BwvTB3jPzxmG','vcaXmdaW','yxnO','rsbLBwjLzgrPBG','C3PPtfi','B24SihrPzxiSia','CMvHDgvKx2f0kq','vuXmienirunlka','rvjfihrPzxiGpq','kgLKlcbJB250zq','zgv4lcbTlMnODq','icaGicaGsK9jtG','zxGSignODw5RxW','Aw5Zzxj0x21LBq','lcbTzxnZywDLla','vuXmksKGteLnsq','xZmWzcbjtLrfrW','C19JB3vUDcaRia','y29UDgvUDca9ia','DgLVBL9IDwzMzq','u0vmrunuicOGrG','B3j5x2LKlcbJBa','CKHTuxK','sfP0wK4','y3rLza','ideGv0HfuKuGBq','DxrJB21LlcbKAq','z2v0twvTB3j5','ihrVDgfSx2LUAG','CYbTcIaGicaGia','zxH0CMfJDgLVBG','uK9nihnLC3nPBW','ywCPlaOGicaGia','BMTZ','ExbxsvG','runuig0UkIbguG','x3rVDgfSieLtia','zNjVBq','C2TPBgXFBwvTBW','zwn0zwqGrLjptq','y2vKqxq','uLKGs0vzicHTzq','rufmlaOGicaGia','icaGicaGigHVDa','ierfrKfvtfqGjW','nJK2nJiYnwPqBuLrCa','y19ZDgf0zsa9ia','A3LLt1q','icaGicaPoWOkia','CefXCe8','uKuGAwqGpsa/','zMLUze1LBw9YEq','zxmGv0HfuKuGAq','zwf0zwrFyxqPcG','CYbtrvqGAgL0xW','icaGicaGDxbKyq','C2TPBgXFBMfTzq','khnRAwXSx21LBq','qvrfifrbqKXfia','y3rPB25FzxzHBa','wsbJAhvUA19PBG','vhP3teu','tsbTzw1VCNLFzG','z2v0','BgqGyMv0DgvYlq','C3rHDhmGvevyva','B25FAgL0CYHPBG','msbxsevsrsbPza','u1rtihbYB2zPyW','icaGzw1IzwrKAq','y291BNq','zejyyw4','tLvmtcKPieXjtq','AKDjAvq','AMvJDgLVBL9SBW','icbbtKqGy2f0zq','AwnLzf9HDca9ia','sLvUCxq','twvZC2fNzxm','rfnPzLO','DcWGDg90ywXFBq','ie5vteWScIaGia','DgvTCf9ZDg9Yzq','x2nVDw50iezstW','v09XEw8','C2v0x3n5BMnFCW','CNLFDgLLCIbptG','yxqGvevyva','Aw9Ux2XVz3nFCW','D0v4BvK','BL9PzcKkicaGia','x2LKlcbZEw5Jzq','cIaGicaGieXfrG','y010CwK','vcbfweLtvfmGAq','zxHWzxjPzw5Jzq','ktSkicaGia','zgv0ywLSCW','zgvSzxrLx3rHzW','iefercbdt0Xvtq','vevyvcWkicaGia','x2TLExDVCMrZia','uIbcwsbJCMvHDa','ufjbr01bigLUDa','CgfYC2u','B3v0y29Tzq','C3nLzf9HDcWGDq','CMLLCW','rsbTzw1VCMLLCW','tfHry0q','zMLUze1LBw9YAq','revmrvrfiezstW','cK9YAwDPBMfSia','qvjzieTfwsWkia','C3rHDhvZ','w2eYyv0GrML4oG','AwqSihjLBw90zq','cIaGicaGifzbta','B01Pr1u','ywDZifDirvjfia','rvHuie5pvcbovq','zwn0x3bHDgGSia','y2XLyw51Cfn5BG','rsbPBMPLy3rPBW','l25VzguVphzLCG','Aw5Zzxj0x2v4Da','lcbPBMPLy3rPBW','DgvKx21LBw9YEq','BMnLx2v2zw50CW','ihf1yw50AxPHDa','icaGC2TPBgXFBq','CNKSihrPzxiSia','cIaGicaGieLouW','DxbKyxrLzf9HDa','icbduKvbveuGsq','Ew5JzwqGt04Gzq','uMf0zq','EuLK','BM9Uzq','ruzbvuXuidaUma','DhjHBNnHy3rPBW','Aw9Ux2HPDf9JBW','B3j5x2LKlcb0yq','zw1VCNLFAwrZla','ufjbr01bihrHyG','AwnPzw5JEq','Bw9YEv9PzcKGuG','icDWCMvMzxjLBG','t0rlzvG','C3vJy2vZC1jHDa','vfjzuMy','kgLKksbptIberq','CgfYzw50x2LK','zwn0Aw9Ux2vMzG','Aw5Qzwn0Aw9Uia','ieLtie5pvcbovq','uK9nigv4CgvYAq','CMfJDgLVBL9LDG','ueDWyw4','lca/kq','rvjuieLove8Gzq','CML0EsbJAgvJAW','lcbJyxrLz29YEq','zfrVBwjZDg9Uzq','CMvWBgfJzq','zw1IzwrKAw5NxW','su5trvjuieLova','C3LUy2vKx2f0','icbZDxj2AxzLza','lca/lca/lca/kq','yw50AxPHDgLVBG','vfmGBwvTB3j5xW','zgLUzW','BwjLzgrPBMCGsq','zsburvHuie5pva','tK9uie5vteWScG','y2XVy2TFC3rHDa','zYbjuYbovuXmcG','psbKyxrLDgLTzq','BNqGpsbnqvGOyq','u0nPB1G','ihn1y2nLC3nFCG','y2LLBMn5x2LKkq','ywDLCW','cIaGicaGicaGia','ALPcqNq','C2f2zv9LBwjFAa','mZaYmda3mLjTC0TTEq','ihbYB21VDgvKia','lMnVCNj1ChqU','y29UDgv4DfrHzW','rufmie5pvcbovq','sw50ocbLBwjLza','zcK7cIaGica','C3rYAw5NAwz5','uKvgrvjftKnfuW','oWOkicaGicaGqW','q291BNq','BwvTB3jPzxm','ChvZAa','z2v0qwXSvMvJDa','DhmGkhjVD2LKla','CNLFyNLFBwvTBW','D2TAuui','AxPHDgLVBL9Szq','tNr1B1O','ierftevursbdqq','BMvZx3n5BMnLza','C3rFywnJzxnZzq','Dfr3tNi','B3iGBwvTB3j5ia','zw1VCNLdB3vUDa','zw1VCMLLCYHWCG','yvPJswW','B3vUDcbjtLrfrW','CNLFAwq','CgfYzw50swq','DgL2zw5LC3m','Dw5ZEw5JzwrFDa','z2v0x3bYB2zPyW','uKuGDc50ywCGpq','igLKEf9Tzw1VCG','yxrPB24','wwDHzvO','ihzLy3rVCL9JBa','Bcbervndlcb1Ca','wvb6Cvi','DMvJDg9Yx2nSBW','yxjLBNrFAwqGpq','rLjptsb2zwn0BW','Axn0B3j5ifDirq','Aw1LkcDUB3CNkq','DwX0A3e','AgLZDg9YEv90Aq','tsbTzw1VCMLLCW','CgfYzw50x2LKia','BwvZC2fNzv9JBW','tLvmtcbbtKqGyW','ywXS','icaGsK9jtIbTzq','thvyCvy','Aw9Ux3n0yxrZkq','u0TOEhe','AMvJDf9WyxrOia','zsGNBM93jYKPcG','BwLUu2nVCMu','z01QyK4','icaGicbXDwfUDa','lMPZihzLCNnPBW','C3LUy19ZDgf0Dq','suyGtK9uievysq','C2LTAwXHCML0Eq','Bs5JyxrLz29YEq','Aw50zwDYAxr5xW','CNvWDerHDgfIyq','Aw9UtwvZC2fNzq','C2LVBJ4VBgLIlW','icaPoWOGicaG','DgLTzxn0yw1Wia','DgfSkqOGicaGia','rhbgq3a','CMrZicGkicaGia','rqOGicaGicaPoW','zgvSzxrLx21LBq','zxnZAw9Uie9oia','igzHAwXLzdOG','tKnfuYbPBMPLyW','zsbSB3n0lG','id0GpW','CMrZie9srevsia','y3rFCgf0Aca9ia','z3nJs3q','zgf0zxrPBwuOjW','C2f2zv9ZzxnZAq','DgLTzxn0yw1W','C2f2zvnLC3nPBW','CMvJB3jKqwnJzq','z2v0u2vZC2LVBG','B24GvevyvcbotW','C3bSAxq','teWGt1iGkhbHCG','icaGicbPBMPLyW','AgnlrwO','B3j5x2LKcIaGia','vcbot1qGtLvmta','BM93','rvjuie9sifjfua','AhvUA190B3rHBa','quXvrvmGkd8Sia','Bw1HCf9ZAxPLia','AM91CM5HBf9TBW','y2f0zwDVCNKSia','lca/lca/kqOGia','wKXXwgq','svnuuYbPzhHFBq','icaGicaGC3LUyW','y291BNrFBwvTBW','A3DyB28','CYbtrvqGzwzMzq','yNvMzMvY','icaGia','kaOGicaGicaGia','B21VDgvKlcbJCG','ienptfvntIbHyG','ignYzwf0zwrFyq','tsbLBw90Aw9UxW','AwqGpsa/ie9sra','tIbPBNzHBgLKxW','CxvHBNrPEMf0Aq','y29UDgv4Df90yq','ifrfwfqGufjjtq','CMvTB3rLx2LK','Awr4x2LUAMvJDa','y2vZC2vKx2f0ia','rLjKs20','id8Gt1jerviGqG','CgvUzgLUzYCScG','Cgf0Aca9id8','ie9oig1LBw9YAq','lca/lca/lcaWkq','u0vmrunuignSBW','z2v0vw5Zzw50rq','DhvZ','C2TPBgW','vvbeqvrfig1LBq','zxHLyW','y3rPB25iAxq','B2PLy3rFDxbKyq','DgLVBL9SB2DZka','B25mzxzLBa','zwqGDg8GBg9Hza','AgT6zgi','tLqOkIKGyxmGyW','zgv4ieftqW','EhrYywn0Aw9UxW','w2eYyv0Gq29YCG','BwjLzgrPBMDFAa','zw50x2LKieLtia','rKfvtfqGmc4Wla','Ev9Pza','rvGGsuyGtK9uia','ieforcbWyxjLBG','B25LCW','y3jLyxrLzf9HDa','zwn0zwqSigHPDa','zNj2uKO','t04GAw5Qzwn0Aq','zxjYB3i6ia','y3rPDMvUzxnZia','icaGicaGigrLza','Bgv2zwWSihf1yq','C2uGBw92zwqGDa','B3jPzxmGu0vuia','BwvTB3j5x3r5Ca','revtqW','x2nVDw50','z2v0x3rHz3m','nhWZFdb8mNWX','rNDQvM0','y2vKrw1VDgLVBG','Bw90Aw9Ux2j1zG','BMPLy3rPB25FAa','zYburvHuie5pva','ifDirvjfig1LBq','t04GBwvTB3jPzq','sK5qBgy','z29YEsaHpsaNCW','vca/ie9grLnfva','z2v0sw50zwDYAq','B3j5x2LKktSkia','lca/lcaWlca/la','uK9nihn5BMnFAa','icaGihnLC3nPBW','x3jLy29YzhmGka','vgPPsLG','BL9PzcburvHula','CgrHDgvKx2f0la','u0vmrunuig0UkG','AwqSignYzwf0zq','cIaGicaGicaGBq','rvrfienbu0nbra','jYKPlaOGicaGia','tLvmtcWkicaGia','CMnOx3bYB2PLyW','B3j5icyMig5WBq','ihnLC3nPB25FAq','icaGicaGig1LBq','BNqGpsbHy2nLCW','y2H1BMTFAw5Kzq','Axn0B3j5icGkia','AeLhqKe','icaGBwvTB3j5xW','Aw5Zzxj0x2z0CW','x3rPzxjFy291BG','t1iGCY5ZEw5JxW','ntaZode1mMrRve55wa','rvjftKnfuYbTzq','DwT4CNu','ieLgie5pvcbfwa','y2H1BMTuB3rHBa','zgf0zwrFyxqPia','w2eYyv0Gq3jLyq','Df9JB3vUDcaRia','ierfu0mkicaGia','rvndieXjtuLuia','AwqGsvmGtLvmta','kqOGicaGicaPcG','tefdrsbjtLrpia','r29HtfO','ywrKu3LUy0HPCW','yNvMzMvYifDirq','ywX1yxrPB25Zka','vwndzxi','cIaGicaGicaGDa','DcbjtLrfr0vsia','zwn0Aw9Ux2LKia','DhmGzNrZcIaGia','qwTwEKi','zsGNBM93jYKPla','CgrHDgvKx2f0ia','x21LBw9YAwvZxW','icaGicaGicbZzq','BgfZDf9WCMfJDa','zw1IzwrKAw5N','BK1LDhjPy3m','tIbTzw1VCNLFDa','CMvJB3jKsw5Qzq','zxmGv0HfuKuGzq','t00GBwvTB3jPzq','DgLLCIa9id8','ieforcaOCgfYzq','C3nHz2uGvevyva','qNHWzhu','rvKGkhbYB2zPyW','zxHJBhvKzvbHCG','y0LHEgC','BMnLrxzLBNrdBW','wunLsNG','ksKkicaGia','zw50CYHWCM9MAq','yxrLie9oihn5BG','DgLVBG','vuXuicHKyxrLDa','BMPLy3rPB25Fzq','yxrLifjfquWGtG','C3mSigfIx2DYBW','z2v0twvTB3j5qW','ie5vteWSid8Sia','DguGvevyvcbotW','ifDirvjfigLKia','B3vUDcbguK9nia','BwvTB3j5x2LKkq','EsaOB3bLCMf0Aq','C2vZC2LVBL9Pza','zcbjtLrfr0vsia','y2XVC2u','BNqGrLjptsbZzq','cIaGicaGicaGyW','lcbPBMPLy3rLza','B3j5','lcb0AwvYlcbWCG','Bw90Aw9UtwvZCW','Bw9YAwvZifDirq','icaGiensrufurq','vfmGAw5Qzwn0Aq','icaGicbTzw1VCG','zYbguK9nig1LBq','u1rtigv4CgvYAq','lcbJCMvHDgvKxW','tufswsblrvKScG','zsGNBM93jYWGpW','q1jfqvrfieLora','zgf0zwrFyxqGra','ywXSx3zJBg9JAW','wMXiuLC','runuicOGrLjptq','BgLZDf9WCM9MAq','Aw5Zzxj0x3bYBW','C2f2zv92y2XVyW','z2v0u3LUy2vKtq','AwvZkgLKksbptG','icaGicbquKLnqq','t1qGtLvmtcWkia','CMvUDf9PzcWGyW','igHPDf9JB3vUDa','psa/','De56Cum','msWGBgfZDf9HyW','zw1VCNLFAwqGva','x2f0idWGpW','BwvdEfe','rLjptsbZEw5JxW','icaGicaGvKfmvq','BgLTAxq','BwvTB3jPzxmGrW','BwvTB3j5','icaGzgLMzMLJDq','uKuGC2vZC2LVBG','AwvUy3LFAwqPia','z2v0u3LUy1n0yq','ChjVy2vZC2vKxW','Eg1LCM8','BgfZDf9Hy2nLCW','uK9nihrVBwjZDa','tK9uie5vteWGra','q1f2uK0','tKTAsuu','zwrFyxqGrevtqW','ywn0CKfJDgL2yq','ywjFz3jVDxa','y2H1BMTjBMrLEa','z19OyxnOifrfwa','rviGqLKGDgLTzq','igLUAMvJDgLVBG','zxncEvrHzW','cIaGicaGicaGsq','icaGicaGicbWCG','cIaGicaGicaGAq','DgfNktSkicaGia','BwjLzgrPBMCScG','Ew5Jzwq','BNmGv0HfuKuGCW','ihbYB2zPy2LLBG','t0r3Bei','y3rVCG','icbTzw1VCNLFAq','rviGqLKGAwqGra','C09SzgvYvgHHBG','rviGtK9uie5vta','BeT3Cu0','zuLtu3m','Avn3sey','zxmOAw52ywXPza','zwf6suG','u0vmrunuihjVDW','zxjPzw5Jzv9LDG','BLf4y0G','x2LKCYburvHula','BM93jYKSidaPcG','B2zMC2v0','zxjPzw5Jzq','A1nprNi','BcbjtLrfr0vsia','BwvZDgfTCcWGBW','y291BNrnzw1VCG','t1qGtLvmtcberq','zf9HDcbervndia','u0vmrunuienpvq','DgGSihnLC3nPBW','zgv4ieLovevhrq','z2v0tgfZDfn5BG','Ae5VBfa','B24Sig1LBw9YEq','tfqGmcWkicaGia','tufXq3K','BwvTB3jPzxmOAq','x3jLy29YzhmOCa','mcWkicaGicaGia','su5uruDfuIbotW','rvjuieLove8GCa','sevsrsbWCM9Qzq','tKrcExK','t3jqyNy','igLKEf9PBMPLyW','AwqGrLjptsbTzq','tsbZEw5Jx3n0yq','zxnZzwrFyxqSia','C3rHCNrZv2L0Aa','uK9nigvTB3rPBW','y29UDgvUDa','BMfTzq','zxnZAw9Ux2LKla','icaGicaPoWOGia','Aw52ywXPzcbfta','Ew5Jx3n0yxrLia','CMLLBMnL','ie5pvcbfweLtva','zsKkicaGicaGvG','tIbWyxjLBNrFAq','oIbJzcb+lY5UDG','ierfu0mPoWOGia','BwfYA190B21ICW','AxPZsei'];_0x5372=function(){return _0x3ef591;};return _0x5372();}import _0x68371a from'better-sqlite3';import{randomUUID}from'node:crypto';import{existsSync,mkdirSync,statSync,renameSync}from'node:fs';import{dirname}from'node:path';import{homedir}from'node:os';import{cosineSimilarity as _0x21f5b7}from'../extraction/similarity.js';import{quantizeToFloat32,dequantizeFromFloat32,quantizeToInt8,dequantizeFromInt8}from'../embedding/quantization.js';const DEFAULT_DB_PATH='~/.a2a/mem'+_0x16cd78(-0x186,0x24);function resolvePath(_0x28cf75){function _0x4eb1b(_0x577240,_0x284922){return _0x16cd78(_0x284922,_0x577240-0x3b3);}function _0x4775d4(_0x40b68c,_0x34bd8c){return _0x16cd78(_0x34bd8c,_0x40b68c-0x51a);}if(_0x28cf75[_0x4eb1b(0x826,0xacd)]('~'))return _0x28cf75[_0x4775d4(0x7fa,0x9d9)]('~',homedir());return _0x28cf75;}export class MemoryDatabase{['db'];[_0x43e245(0x36a,0xdd)];[_0x16cd78(-0x9b,0x12c)]=new Map();[_0x43e245(0x513,0x579)+_0x16cd78(0x5c4,0x385)];constructor(_0x287175=DEFAULT_DB_PATH,_0x4e5a77='none'){const _0x46e05d={'HZtZN':_0x45ee88(0x244,0x2a5)+_0x45ee88(0x5ca,0x475),'ZmkMw':function(_0x11d07b,_0x4b8f43){return _0x11d07b(_0x4b8f43);},'ssZPi':function(_0x354ad7,_0x559b49){return _0x354ad7(_0x559b49);},'CERUZ':_0x45ee88(0x1a5,0x54),'vjUWH':'LPGLv','hNolP':_0x45ee88(0x30a,0x5e3)+'\x20=\x20-64000','VBfDm':_0x45ee88(0x2b6,0x5e)+_0x45ee88(0x68a,0x7bd),'vJpLF':'temp_store'+_0x499e36(0x6dd,0x57b)};this[_0x45ee88(0x339,0x437)]=resolvePath(_0x287175),this[_0x45ee88(0x4e2,0x7bb)+_0x499e36(0xa26,0x83f)]=_0x4e5a77;const _0x391e1e=_0x46e05d[_0x45ee88(0x60e,0x81c)](dirname,this['dbPath']);if(!_0x46e05d[_0x499e36(0x898,0x96c)](existsSync,_0x391e1e)){if(_0x46e05d[_0x499e36(0x484,0x6e0)]===_0x46e05d[_0x45ee88(0x3a8,0x191)]){const _0x4d9930=_0x2f25bf();return this[_0x499e36(0x51f,0x6e8)](_0x46e05d[_0x45ee88(0x3c5,0x379)],'\x0a\x20\x20\x20\x20\x20\x20INS'+'ERT\x20INTO\x20e'+_0x45ee88(0x2f1,0x471)+'events\x20(id'+',\x20proficie'+_0x499e36(0x534,0x521)+_0x45ee88(0x5cd,0x40d)+_0x499e36(0x93c,0x710)+_0x499e36(0x8c1,0x6a1)+_0x45ee88(0x4e3,0x4f1)+_0x499e36(0x723,0x570)+_0x499e36(0x78b,0x750)+_0x499e36(0x79e,0x583)+_0x45ee88(0x31e,0x5ab)+',\x20?,\x20?,\x20?)'+_0x45ee88(0x60d,0x6b6))['run'](_0x4d9930,_0x431c65[_0x45ee88(0x629,0x79a)+_0x45ee88(0x437,0x5a0)],_0x2a091f[_0x499e36(0x5eb,0x808)],_0x4a479d['outcome'],_0x485694[_0x45ee88(0x694,0x80b)],_0x5763fe[_0x499e36(0x69c,0x7b4)+'s']?_0x489af5[_0x499e36(0x50b,0x7b8)](_0x2d3d1c[_0x499e36(0x6a4,0x7b4)+'s']):null,_0x2e192f[_0x45ee88(0x22d,0x45)]??null),{'id':_0x4d9930,'proficiencyId':_0x4ca448[_0x499e36(0x979,0x971)+_0x45ee88(0x437,0x37f)],'timestamp':_0x1f83af[_0x499e36(0x600,0x808)],'outcome':_0x48fb90['outcome'],'difficulty':_0x2f6ef3['difficulty'],'contextTags':_0x46f802[_0x499e36(0x5cc,0x7b4)+'s']??[],'sessionId':_0x45c1e1[_0x499e36(0x588,0x575)]};}else mkdirSync(_0x391e1e,{'recursive':!![]});}this['db']=MemoryDatabase[_0x45ee88(0x15e,0x224)+'se'](this[_0x499e36(0x781,0x681)]),this['db'][_0x45ee88(0x372,0x389)]('journal_mo'+_0x45ee88(0x1fb,0x1d8)),this['db']['pragma'](_0x499e36(0x819,0x663)+_0x45ee88(0x64d,0x4a3));function _0x499e36(_0x1311f0,_0x1fb6d6){return _0x16cd78(_0x1311f0,_0x1fb6d6-0x4ba);}this['db']['pragma'](_0x46e05d[_0x45ee88(0x5d5,0x302)]),this['db'][_0x499e36(0x920,0x6ba)](_0x46e05d['VBfDm']);function _0x45ee88(_0x45c36a,_0x3cc888){return _0x16cd78(_0x3cc888,_0x45c36a-0x172);}this['db'][_0x45ee88(0x372,0xff)](_0x46e05d[_0x499e36(0x859,0x9f0)]),this['db'][_0x45ee88(0x372,0x2ad)]('mmap_size\x20'+'=\x2026843545'+'6'),this[_0x45ee88(0x357,0x243)+_0x499e36(0xc7e,0x9bc)]();}static[_0x43e245(0x18f,0x2f4)+'se'](_0x25b3a3){const _0x459fd1={'GnyaK':function(_0x2f8f41,_0x4a52cf){return _0x2f8f41(_0x4a52cf);},'vmtqc':_0x1b878f(0x4a1,0x388)+_0x545b75(0x5c6,0x59c)+_0x1b878f(-0x2cf,-0x104),'KoARY':'binding','YFWYG':_0x545b75(0x800,0x6ce)+'\x20npm\x20rebui'+_0x545b75(0x7cd,0x880)+'sqlite3','tCbEI':_0x545b75(0x636,0x6ba)+_0x1b878f(0x6f,0x275)+_0x545b75(0x6cb,0x69a)+_0x545b75(0x809,0xadd)+_0x545b75(0x88d,0x81a)+_0x545b75(0x763,0x97c)+_0x545b75(0x77d,0x81a)+_0x1b878f(-0xac,0x1b2)+_0x1b878f(-0x271,-0x1eb)+_0x1b878f(0x5ac,0x389)+_0x545b75(0x741,0x7da),'gzzFc':_0x1b878f(0x3b6,0x2cc)+_0x1b878f(-0x447,-0x1c1)+'appens\x20whe'+_0x1b878f(0x379,0x381)+_0x1b878f(0x373,0x12a)+_0x1b878f(-0x197,-0x1c5)+'ged.','xjKEH':_0x1b878f(-0x23c,-0x203)+_0x545b75(0x8d7,0x785)+_0x1b878f(0xff,-0x148)+'lite3\x20nati'+_0x1b878f(-0x66,-0x7f)+'.'};function _0x545b75(_0x5fe51c,_0x148a3d){return _0x16cd78(_0x148a3d,_0x5fe51c-0x551);}function _0x1b878f(_0x4e3088,_0x4f6c9d){return _0x16cd78(_0x4e3088,_0x4f6c9d- -0x20a);}try{return new _0x68371a(_0x25b3a3);}catch(_0x44e8d6){const _0x1b1f3d=_0x44e8d6 instanceof Error?_0x44e8d6[_0x1b878f(-0x3d3,-0x17c)]:_0x459fd1[_0x545b75(0x5ff,0x75c)](String,_0x44e8d6),_0x317b4f=_0x1b1f3d[_0x545b75(0x73e,0x8bb)]('NODE_MODUL'+_0x545b75(0x54b,0x273))||_0x1b1f3d['includes']('was\x20compil'+_0x545b75(0x5a0,0x7b0))||_0x1b1f3d[_0x545b75(0x73e,0x937)](_0x459fd1['vmtqc'])||_0x1b1f3d[_0x545b75(0x73e,0x90d)](_0x1b878f(-0x42,0x26f)+'F')||_0x1b1f3d[_0x545b75(0x73e,0x470)](_0x459fd1['KoARY']);if(_0x317b4f){const _0x4bb368=_0x1b878f(0x3af,0x197)[_0x545b75(0x8a4,0x669)]('|');let _0x4f62f9=0x0;while(!![]){switch(_0x4bb368[_0x4f62f9++]){case'0':console[_0x1b878f(0x387,0x34f)](_0x459fd1[_0x1b878f(0x1f2,0x38c)]);continue;case'1':throw new Error(_0x1b878f(0x312,0x36e)+'er-sqlite3'+_0x545b75(0xa3d,0x855)+'nding\x20load'+'\x20failed.\x20R'+_0x1b878f(0x14,0x299)+_0x545b75(0xa82,0xcc8)+'er-sqlite3'+_0x545b75(0x7fd,0x99b)+_0x1b878f(0x13,0x18d)+_0x1b1f3d);continue;case'2':console['error'](_0x459fd1[_0x1b878f(-0x38f,-0x186)]);continue;case'3':console['error'](_0x459fd1['gzzFc']);continue;case'4':console[_0x1b878f(0x1cc,0x34f)](_0x459fd1['xjKEH']);continue;}break;}}throw _0x44e8d6;}}[_0x16cd78(-0xfa,0x1e5)+_0x43e245(0x6a5,0x429)](){function _0x3509ea(_0x217cf1,_0x5d31ac){return _0x43e245(_0x217cf1-0xac,_0x5d31ac);}const _0x25bb42={'cLOse':'integrity_'+'check','LoOfe':'PpdNA'};function _0x32d56f(_0x4eab8e,_0x5ca739){return _0x43e245(_0x5ca739- -0x18e,_0x4eab8e);}try{const _0x4c7e3e=this['db'][_0x3509ea(0x44f,0x3b1)](_0x25bb42['cLOse']),_0x506be2=_0x4c7e3e['length']===0x1&&_0x4c7e3e[0x0][_0x3509ea(0x588,0x2cf)+_0x3509ea(0x7df,0x96d)]==='ok';if(!_0x506be2){if(_0x25bb42['LoOfe']===_0x32d56f(0x405,0x53d)){const _0x296166=_0x4c7e3e[_0x32d56f(-0x44,0x89)](_0x2357e9=>_0x2357e9['integrity_'+'check'])[_0x32d56f(0x79a,0x4c1)](',\x20');console[_0x3509ea(0x7a8,0x6b3)](_0x3509ea(0x239,0x2d6)+_0x3509ea(0x3c3,0x321)+_0x3509ea(0x52c,0x3b5)+_0x32d56f(0x129,0x35a)+_0x296166),this[_0x3509ea(0x7ab,0x93b)+_0x32d56f(0x458,0x34f)+'se']();}else return this['db'][_0x32d56f(0x671,0x4fa)](_0x32d56f(0x2b6,0x474)+_0x3509ea(0x5d7,0x6f3)+'ount\x20FROM\x20'+_0x3509ea(0x7d6,0x6c1)+_0x3509ea(0x6bb,0x629)+_0x3509ea(0x599,0x7de)+'?'+_0x409491)[_0x3509ea(0x4ca,0x517)](_0x5b0c1a)[_0x32d56f(0x44d,0x297)];}}catch(_0x352b3d){const _0x3fa87e=_0x352b3d instanceof Error?_0x352b3d[_0x3509ea(0x2dd,0x33a)]:String(_0x352b3d);console[_0x32d56f(0x72c,0x56e)](_0x3509ea(0x239,0x37d)+_0x3509ea(0x3c3,0x661)+'rity\x20check'+_0x32d56f(0x261,0x1ca)+_0x3fa87e),this[_0x32d56f(0x716,0x571)+'ruptDataba'+'se']();}}[_0x43e245(0x6ff,0x9b3)+'ruptDataba'+'se'](){const _0x5b042e={'NKZIE':function(_0x49aabf,_0x368971){return _0x49aabf instanceof _0x368971;},'hjegA':function(_0x121c3b,_0x359bc9){return _0x121c3b(_0x359bc9);},'YZxMm':_0x542cab(0x612,0x4b3),'Alnxz':_0x542cab(0x400,0x591)+_0x110dd7(0x154,-0x132),'YhiWQ':_0x110dd7(0xbe,-0x12)+_0x110dd7(0x132,0x320),'PFjnr':_0x542cab(0x23a,-0x7d)+_0x542cab(0x645,0x77c),'oNVJG':'synchronou'+'s\x20=\x20NORMAL'};function _0x110dd7(_0x287d81,_0x899c77){return _0x16cd78(_0x287d81,_0x899c77- -0x1bb);}try{this['db'][_0x542cab(0x4a5,0x2da)]();}catch{}const _0x28bdd4=this['dbPath']+_0x110dd7(0xba,0x13e)+Date[_0x110dd7(0x3c6,0x19e)]();try{renameSync(this[_0x542cab(0x269,0x3fe)],_0x28bdd4),console[_0x542cab(0x5fb,0x4e4)](_0x110dd7(0x309,0x1d0)+_0x542cab(0x185,0x374)+_0x542cab(0x43d,0x650)+'o:\x20'+_0x28bdd4);}catch(_0x138eba){if(_0x5b042e[_0x542cab(0xb4,-0x8b)]==='Uhofz'){const _0x3b0965=KTeIwV[_0x110dd7(0x35b,0x27b)](_0x17e3fd,_0x5c0ea2)?_0x183d8c['message']:KTeIwV[_0x110dd7(-0x24d,-0x124)](_0x134d26,_0x514aee);_0x280166[_0x542cab(0x5fb,0x3e6)](_0x542cab(0x8c,-0xab)+_0x542cab(0x216,0x4b1)+_0x110dd7(0x69,0x122)+_0x542cab(0x257,0x3f8)+_0x3b0965),this[_0x110dd7(0x3b1,0x3a1)+_0x542cab(0x3dc,0x15c)+'se']();}else console[_0x542cab(0x5fb,0x396)]('[a2a]\x20Fail'+_0x110dd7(-0x299,-0x14f)+_0x110dd7(0x7a,0x20)+_0x542cab(0x99,0x232)+(_0x138eba instanceof Error?_0x138eba[_0x110dd7(-0x174,-0x12d)]:_0x5b042e[_0x110dd7(0x19a,-0x124)](String,_0x138eba)));}console[_0x110dd7(0x626,0x39e)](_0x542cab(0x46f,0x250)+_0x110dd7(-0x206,0x8)+_0x542cab(0x1ae,0x215)+_0x110dd7(-0x2,-0x120)+_0x542cab(0x246,0x2d4)+_0x110dd7(-0x69,0x18c)),this['db']=MemoryDatabase[_0x542cab(0x8e,0x2d5)+'se'](this[_0x542cab(0x269,0x3b1)]),this['db'][_0x542cab(0x2a2,0x367)](_0x5b042e['Alnxz']),this['db'][_0x542cab(0x2a2,0x33c)](_0x5b042e[_0x542cab(0xca,0x2ee)]),this['db'][_0x542cab(0x2a2,0x148)](_0x5b042e['PFjnr']);function _0x542cab(_0x951f06,_0x31efbc){return _0x16cd78(_0x31efbc,_0x951f06-0xa2);}this['db'][_0x110dd7(-0x38,0x45)](_0x5b042e[_0x110dd7(0x23c,0x39c)]),this['db']['pragma'](_0x110dd7(0x1ae,0xd3)+'\x20=\x20MEMORY'),this['db'][_0x542cab(0x2a2,0x288)](_0x542cab(0x3ff,0x652)+'=\x2026843545'+'6'),this[_0x542cab(0x1ce,0x43c)]['clear']();}[_0x43e245(0x3d1,0x560)](_0x895e73,_0x356865){let _0x48276d=this[_0x1ad4a9(0x4f5,0x5a8)][_0x10b3a8(0x7fe,0x5ef)](_0x895e73);function _0x10b3a8(_0x3255b2,_0x31cf11){return _0x43e245(_0x31cf11-0x1d1,_0x3255b2);}function _0x1ad4a9(_0x4e7ecc,_0x28a535){return _0x43e245(_0x28a535-0x2d9,_0x4e7ecc);}return!_0x48276d&&(_0x48276d=this['db']['prepare'](_0x356865),this[_0x1ad4a9(0x4d7,0x5a8)][_0x1ad4a9(0x85d,0x993)](_0x895e73,_0x48276d)),_0x48276d;}[_0x16cd78(0x469,0x1bd)](){const _0x4bd59a={'NDByy':_0xdb49ff(0x7fc,0x846)+'ciencies_p'+'roject','sZayr':'VACUUM','gscKt':_0x418b0b(0x360,0x5c6)+_0x418b0b(0x4a9,0x3b1)+_0x418b0b(0x1a0,0x3a8)+_0xdb49ff(0x89d,0xaeb)+_0xdb49ff(0x81f,0x918)+'T','dhwjp':function(_0x3800f8,_0x1b7623){return _0x3800f8!==_0x1b7623;},'jZBBt':'ALTER\x20TABL'+_0xdb49ff(0x68c,0x4be)+'\x20ADD\x20COLUM'+_0xdb49ff(0x5d6,0x4f7)+_0xdb49ff(0x5cc,0x7d1)+'R','gMjbN':_0x418b0b(0x4fd,0x5c6)+_0xdb49ff(0x68c,0x53a)+_0x418b0b(0x669,0x3a8)+'N\x20quality_'+_0xdb49ff(0x480,0x392),'YCeJx':_0xdb49ff(0x8a1,0xb40)+_0xdb49ff(0x68c,0x593)+_0xdb49ff(0x683,0x7a9)+_0x418b0b(0x760,0x4ee)+_0x418b0b(0x5b8,0x590),'ODKeX':'ALTER\x20TABL'+'E\x20memories'+'\x20ADD\x20COLUM'+_0xdb49ff(0x753,0x533)+_0x418b0b(0x517,0x39c),'NqvpH':_0xdb49ff(0x7f7,0x664)+_0xdb49ff(0x774,0x79c)+'EXISTS\x20idx'+'_memories_'+_0x418b0b(0x63a,0x4a6)+_0x418b0b(0x56c,0x630)+_0x418b0b(0x498,0x1f9)+_0xdb49ff(0x882,0x65f),'EgvSv':_0x418b0b(0x372,0x349),'DSmwN':'ALTER\x20TABL'+_0x418b0b(0x4a5,0x619)+_0x418b0b(0x309,0x3a8)+'N\x20last_con'+'solidation'+_0xdb49ff(0x95b,0xbd8),'ZLqXd':_0x418b0b(0x53d,0x3d5)+'le_info(in'+_0xdb49ff(0x66a,0x83a)+_0x418b0b(-0xa4,0x1cd),'PNEMS':'ALTER\x20TABL'+_0x418b0b(0x688,0x3c0)+'n_logs\x20ADD'+_0x418b0b(0x304,0x474)+_0xdb49ff(0x4c6,0x45f)+'T'};function _0xdb49ff(_0x5dbf90,_0x51b0d3){return _0x43e245(_0x5dbf90-0x241,_0x51b0d3);}this['db'][_0xdb49ff(0x765,0x69b)](_0x418b0b(0x51d,0x5ae)+_0x418b0b(0x31d,0x37f)+_0xdb49ff(0x71a,0x7c0)+'STS\x20memori'+_0xdb49ff(0x5e5,0x460)+'\x20\x20\x20id\x20TEXT'+'\x20PRIMARY\x20K'+'EY,\x0a\x20\x20\x20\x20\x20\x20'+_0x418b0b(0x3,0x1d5)+_0x418b0b(0x53e,0x293)+_0xdb49ff(0x5cf,0x4f9)+_0xdb49ff(0x618,0x655)+_0x418b0b(0x5f8,0x613)+_0xdb49ff(0x671,0x8eb)+'\x20\x20\x20\x20\x20tier\x20'+_0x418b0b(0x157,0x293)+_0xdb49ff(0x5cf,0x3d3)+_0x418b0b(0x46e,0x38a)+'ng\x20BLOB,\x0a\x20'+_0x418b0b(0x186,0x26a)+_0xdb49ff(0x713,0x984)+'TEXT,\x0a\x20\x20\x20\x20'+_0xdb49ff(0x794,0x4f5)+_0x418b0b(0x482,0x4bc)+_0xdb49ff(0x7e9,0x7ee)+_0x418b0b(0x1b8,0x22f)+_0x418b0b(0x13d,0x293)+_0x418b0b(0x4a4,0x1d8)+_0xdb49ff(0x4c5,0x6ef)+_0xdb49ff(0x7c2,0x512)+_0x418b0b(0x4b1,0x667)+'pdated_at\x20'+_0xdb49ff(0x56e,0x692)+_0x418b0b(0x235,0x1d8)+'T\x20(datetim'+_0x418b0b(0x34f,0x4e7)+_0xdb49ff(0x944,0xb52)+_0x418b0b(0x30c,0x252)+_0xdb49ff(0x7be,0x8c4)+_0xdb49ff(0x818,0x894)+_0xdb49ff(0x40a,0x69c)+_0xdb49ff(0x48b,0x716)+_0x418b0b(0x36b,0x415)+'d_at\x20TEXT\x0a'+_0x418b0b(0x5e,0x1b1)+'\x20\x20\x20\x20\x20\x20CREA'+_0x418b0b(0x29d,0x19f)+_0xdb49ff(0x5c5,0x871)+_0x418b0b(0x27e,0x3f0)+'tags\x20(\x0a\x20\x20\x20'+'\x20\x20\x20\x20\x20memor'+'y_id\x20TEXT\x20'+_0xdb49ff(0x6cf,0x4fd)+_0xdb49ff(0x89f,0x8f5)+_0xdb49ff(0x78a,0x98a)+'\x20NULL,\x0a\x20\x20\x20'+_0xdb49ff(0x801,0x5e8)+_0x418b0b(0x49d,0x36e)+_0x418b0b(0x846,0x63e)+_0x418b0b(0x1ab,0x365)+'\x20\x20\x20FOREIGN'+_0x418b0b(0x1ac,0x23e)+_0xdb49ff(0x449,0x69d)+_0xdb49ff(0x7ac,0x74d)+'mories(id)'+_0x418b0b(0x633,0x603)+_0xdb49ff(0x90e,0x804)+_0xdb49ff(0x650,0x3f2)+_0xdb49ff(0x597,0x572)+_0xdb49ff(0x600,0x668)+_0x418b0b(0x824,0x585)+'S\x20sessions'+_0x418b0b(0x3e3,0x130)+_0x418b0b(0x5f3,0x4c6)+_0xdb49ff(0x93f,0x901)+_0xdb49ff(0x7f5,0x64d)+_0x418b0b(0x389,0x549)+_0x418b0b(0x872,0x5bd)+_0x418b0b(0x24c,0x218)+_0xdb49ff(0x79e,0x74a)+'\x20\x20\x20\x20messag'+_0x418b0b(0x58,0x18f)+_0xdb49ff(0x4f4,0x470)+_0x418b0b(0x142,0x149)+_0x418b0b(0x548,0x56e)+_0x418b0b(0x3ef,0x5c5)+_0xdb49ff(0x980,0x9cb)+_0xdb49ff(0x73c,0x892)+_0xdb49ff(0x59d,0x36a)+_0xdb49ff(0x730,0x8fa)+_0xdb49ff(0x8e9,0x913)+_0x418b0b(0x4b5,0x1e6)+_0xdb49ff(0x8ae,0xb1c)+_0xdb49ff(0x5c7,0x78f)+_0xdb49ff(0x8db,0x8f7)+'sync_statu'+_0xdb49ff(0x5a5,0x67a)+_0x418b0b(0x5ce,0x552)+'d\x20TEXT\x20PRI'+_0x418b0b(0x62d,0x51a)+(_0x418b0b(0x78f,0x62a)+'mote_id\x20TE'+_0xdb49ff(0x988,0x82e)+'\x20\x20synced_a'+_0xdb49ff(0x50f,0x478)+_0x418b0b(0x535,0x46c)+_0xdb49ff(0x4be,0x4b9)+_0xdb49ff(0x73c,0x6bb)+_0xdb49ff(0x64c,0x47c)+_0x418b0b(0x249,0x481)+'\x20\x20\x20\x20\x20\x20\x20\x20FO'+'REIGN\x20KEY\x20'+_0xdb49ff(0x401,0x40f)+_0x418b0b(0x2c9,0x116)+_0xdb49ff(0x870,0x8f8)+_0xdb49ff(0x4da,0x710)+'ELETE\x20CASC'+_0x418b0b(0x198,0x231)+_0x418b0b(0x3aa,0x1b6)+_0x418b0b(0x548,0x51c)+_0x418b0b(0x413,0x499)+_0xdb49ff(0x881,0xb5b)+_0xdb49ff(0x7c4,0x9dc)+'category\x20O'+_0x418b0b(0x2e1,0x102)+'(category)'+_0xdb49ff(0x45d,0x242)+'EATE\x20INDEX'+'\x20IF\x20NOT\x20EX'+_0x418b0b(0x60e,0x46b)+_0xdb49ff(0x498,0x1d9)+'er\x20ON\x20memo'+'ries(tier)'+_0x418b0b(-0x140,0x182)+'EATE\x20INDEX'+_0xdb49ff(0x7ae,0x6ea)+_0xdb49ff(0x746,0xa02)+'emories_pr'+_0x418b0b(0x328,0x32b)+_0xdb49ff(0x6f4,0x617)+_0x418b0b(0x4d2,0x5bd)+_0xdb49ff(0x888,0xb3d)+_0xdb49ff(0x4b8,0x32f)+_0xdb49ff(0x43f,0x5fa)+_0xdb49ff(0x923,0xae4)+'memories_s'+_0xdb49ff(0x728,0x684)+_0x418b0b(0x656,0x6a8)+_0xdb49ff(0x5d2,0x51e)+';\x0a\x20\x20\x20\x20\x20\x20CR'+_0xdb49ff(0x3fe,0x497)+'\x20IF\x20NOT\x20EX'+_0xdb49ff(0x746,0x4b7)+_0x418b0b(0x320,0x5dc)+'_tag\x20ON\x20me'+_0xdb49ff(0x908,0xb47)+_0xdb49ff(0x826,0x5ad)+_0xdb49ff(0x6a6,0x774)+'NDEX\x20IF\x20NO'+_0xdb49ff(0x67e,0x8f6)+'dx_sync_st'+_0xdb49ff(0x7d8,0x568)+_0x418b0b(0x2ce,0x24e)+_0xdb49ff(0x442,0x71f)+_0x418b0b(0x109,0x182)+_0x418b0b(-0x14f,0x123)+_0x418b0b(0x23c,0x4d3)+_0x418b0b(0x51b,0x46b)+'emories_pr'+_0x418b0b(0x6e3,0x48c)+_0x418b0b(-0x73,0x1b8)+'ories(proj'+_0x418b0b(0x5e2,0x3be)+_0xdb49ff(0x6a5,0x84d)+_0xdb49ff(0x864,0x948)+'\x20\x20\x20\x20CREATE'+_0x418b0b(0x5f4,0x5f8)+_0xdb49ff(0x512,0x2e7)+_0x418b0b(0x58d,0x422)+_0x418b0b(0x51b,0x323)+_0xdb49ff(0x676,0x3bf)+'\x20memories('+_0xdb49ff(0x743,0x8a2)+_0xdb49ff(0x58e,0x6a2)+_0x418b0b(0x5f4,0x514)+'\x20TABLE\x20IF\x20'+_0x418b0b(0xaf,0x237)+_0xdb49ff(0x700,0x56c)+_0x418b0b(0x435,0x24f)+_0x418b0b(0x6fe,0x516)+_0x418b0b(0x4d7,0x2a0)+_0x418b0b(0x8f,0x2c8)+'Y,\x0a\x20\x20\x20\x20\x20\x20\x20'+'\x20clock_sta'+_0xdb49ff(0x7e0,0x7d8)+'T\x20NULL,\x0a\x20\x20'+_0xdb49ff(0x657,0x5a6)+_0x418b0b(0xfe,0x317)+_0xdb49ff(0x73c,0x9f8)+_0x418b0b(0x229,0x2c2))+(_0x418b0b(0x311,0x455)+'now\x27))\x0a\x20\x20\x20'+_0x418b0b(0x321,0x1e6)+_0xdb49ff(0x8ae,0x999)+_0xdb49ff(0x5c7,0x421)+_0xdb49ff(0x8db,0x690)+'embedding_'+_0x418b0b(0x2a1,0x330)+_0xdb49ff(0x79b,0xa1a)+_0x418b0b(0x4b2,0x52d)+'EXT\x20PRIMAR'+_0x418b0b(0x2d3,0x243)+_0x418b0b(0x512,0x43c)+_0x418b0b(0x4a1,0x411)+'vel\x20TEXT\x20N'+_0x418b0b(0x533,0x527)+_0xdb49ff(0x927,0x802)+_0x418b0b(0x20f,0x314)+_0x418b0b(0x2ad,0x386)+_0x418b0b(0x5d2,0x315)+'FOREIGN\x20KE'+'Y\x20(memory_'+_0x418b0b(-0x1ae,0xff)+_0xdb49ff(0x481,0x48e)+_0x418b0b(0x282,0x525)+_0x418b0b(0x580,0x413)+_0xdb49ff(0x941,0xbe1)+_0xdb49ff(0x721,0x7b2)));try{this['db'][_0xdb49ff(0x765,0x8b7)](_0x418b0b(0x64a,0x5be)+_0x418b0b(0x38,0x135)+_0xdb49ff(0x614,0x622)+'IF\x20NOT\x20EXI'+_0x418b0b(0x4fc,0x230)+_0x418b0b(0x3fd,0x2e3)+_0x418b0b(0x525,0x66c)+'\x20\x20\x20\x20\x20\x20\x20con'+'tent,\x0a\x20\x20\x20\x20'+'\x20\x20\x20\x20\x20\x20toke'+'nize=\x27unic'+_0xdb49ff(0x457,0x3ef)+_0xdb49ff(0x85c,0xaa9)+_0xdb49ff(0x74c,0x619));}catch{}try{this['db'][_0x418b0b(0x6cb,0x48a)](_0x4bd59a[_0x418b0b(0x64f,0x454)]);}catch{}this['db']['exec'](_0xdb49ff(0x889,0xa80)+_0x418b0b(0xe0,0x37f)+'IF\x20NOT\x20EXI'+_0x418b0b(0x23d,0x338)+_0xdb49ff(0x7a5,0x704)+_0xdb49ff(0x929,0x6b5)+_0xdb49ff(0x8ac,0xb89)+'IMARY\x20KEY\x20'+_0x418b0b(0xc2,0x187)+_0xdb49ff(0x903,0x6b8)+'\x20\x20\x20operati'+_0x418b0b(0x4fb,0x45b)+'T\x20NULL,\x0a\x20\x20'+_0xdb49ff(0x571,0x397)+'ry_id\x20TEXT'+_0x418b0b(0x335,0x176)+_0xdb49ff(0x7bd,0x8c2)+_0x418b0b(-0x12,0xf7)+'EXT\x20NOT\x20NU'+'LL\x20DEFAULT'+_0x418b0b(0x1d1,0x2b4)+_0xdb49ff(0x8cc,0x749)+'\x20\x20\x20\x20\x20\x20\x20\x20st'+'atus\x20TEXT\x20'+'NOT\x20NULL\x20D'+_0x418b0b(0x3e9,0x2df)+'ccess\x27,\x0a\x20\x20'+_0x418b0b(0x23e,0x28c)+_0xdb49ff(0x5dd,0x66a)+_0x418b0b(0x5a2,0x375)+'\x20\x20\x20\x20\x20CREAT'+'E\x20TABLE\x20IF'+'\x20NOT\x20EXIST'+_0x418b0b(0x196,0x13d)+_0xdb49ff(0x5e5,0x4e7)+_0xdb49ff(0x7a7,0x856)+'id\x20TEXT\x20PR'+'IMARY\x20KEY,'+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20d'+_0xdb49ff(0x8f6,0x770)+_0xdb49ff(0x56e,0x29d)+_0x418b0b(0x415,0x1d8)+_0x418b0b(0x165,0x1ea)+_0xdb49ff(0x7c2,0x842)+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20s'+'ynced\x20INTE'+_0xdb49ff(0x474,0x3d6)+_0x418b0b(0x37a,0x612)+'\x200\x0a\x20\x20\x20\x20\x20\x20)'+_0x418b0b(0x588,0x409)+_0x418b0b(0xc,0x1dd)+_0xdb49ff(0x43f,0x3c8)+'XISTS\x20idx_'+'memories_e'+_0xdb49ff(0x770,0x6f1)+_0xdb49ff(0x5bb,0x57f)+_0x418b0b(0x355,0x20b)+_0x418b0b(0x5b3,0x2d9)+');\x0a\x20\x20\x20\x20\x20\x20C'+_0x418b0b(0x1ba,0x1dd)+_0xdb49ff(0x43f,0x4d6)+_0x418b0b(0x77f,0x648)+_0xdb49ff(0x953,0xaec)+_0x418b0b(0x23c,0x1b9)+'ON\x20sync_hi'+_0xdb49ff(0x3f5,0x1ec)+_0x418b0b(0x586,0x2c0)+_0x418b0b(0x4f2,0x514)+'\x20INDEX\x20IF\x20'+_0x418b0b(0x52,0x237)+_0x418b0b(0x7a6,0x6ab)+_0x418b0b(0x19d,0x42e)+_0xdb49ff(0x918,0xbaf)+_0x418b0b(0x19a,0x189)+'ory(timest'+'amp);\x0a\x20\x20\x20\x20'+_0xdb49ff(0x6a6,0x7a2)+_0xdb49ff(0x61e,0x6fc)+_0xdb49ff(0x67e,0x831)+_0x418b0b(0x671,0x5e0)+_0xdb49ff(0x6ef,0x4c2)+_0x418b0b(0x71,0x1cc)+_0x418b0b(0x48e,0x236)+_0x418b0b(0x171,0x406)),this['db'][_0xdb49ff(0x765,0x4e9)](_0xdb49ff(0x889,0xa70)+_0x418b0b(0x122,0x37f)+_0xdb49ff(0x71a,0x974)+_0xdb49ff(0x664,0x45b)+_0x418b0b(0x3f2,0x319)+_0xdb49ff(0x725,0x473)+'\x20\x20\x20\x20id\x20TEX'+'T\x20PRIMARY\x20'+_0xdb49ff(0x53d,0x53d)+_0x418b0b(0x5f3,0x3c7)+'emory_id\x20T'+'EXT\x20NOT\x20NU'+'LL,\x0a\x20\x20\x20\x20\x20\x20'+_0xdb49ff(0x59c,0x579)+_0x418b0b(0xe2,0x2c3)+'T\x20NULL,\x0a\x20\x20'+_0xdb49ff(0x92d,0xb16)+_0x418b0b(0x612,0x563)+_0x418b0b(0x44d,0x53d)+_0x418b0b(0x577,0x31d)+_0x418b0b(0x2ea,0x166)+'perience_c'+_0x418b0b(0x17c,0x41b)+_0x418b0b(0x7db,0x555)+'L\x20DEFAULT\x20'+_0xdb49ff(0x84d,0x8a0)+_0x418b0b(0x275,0x3fa)+_0x418b0b(0x256,0x501)+_0x418b0b(0x3a5,0x566)+_0xdb49ff(0x772,0x610)+_0x418b0b(0x766,0x669)+_0xdb49ff(0x539,0x5b6)+_0x418b0b(0x43a,0x328)+_0x418b0b(0x5c8,0x53d)+_0x418b0b(0x2c3,0x3d0)+_0xdb49ff(0x5f0,0x4f3)+_0x418b0b(0x6b1,0x4eb)+_0x418b0b(0x4f3,0x285)+_0xdb49ff(0x988,0x8e7)+_0x418b0b(0x5fa,0x644)+'path\x20TEXT,'+_0x418b0b(0x30b,0x50e)+_0xdb49ff(0x50a,0x5df)+_0xdb49ff(0x56e,0x2ab)+_0x418b0b(-0x4,0x1d8)+_0x418b0b(0x18a,0x1ea)+'e(\x27now\x27)),'+_0x418b0b(0x913,0x667)+_0x418b0b(0x527,0x4e8)+_0x418b0b(0x16c,0x293)+_0x418b0b(0x25d,0x1d8)+_0xdb49ff(0x4c5,0x652)+'e(\x27now\x27)),'+_0x418b0b(0x2ce,0x273)+_0x418b0b(0x48,0x127)+_0xdb49ff(0x619,0x436)+_0xdb49ff(0x6b2,0x42b)+_0xdb49ff(0x4ae,0x3b0)+_0x418b0b(0x3e9,0x570)+'d)\x20ON\x20DELE'+_0xdb49ff(0x878,0x917)+'\x0a\x20\x20\x20\x20\x20\x20);\x0a'+_0xdb49ff(0x889,0x5e4)+_0xdb49ff(0x65a,0x7b5)+_0xdb49ff(0x71a,0x968)+_0xdb49ff(0x7f3,0x895)+_0x418b0b(0xe9,0x1d7)+_0x418b0b(0x574,0x2ca)+'\x20\x20id\x20TEXT\x20'+_0x418b0b(0x1c0,0x2c8)+'Y,\x0a\x20\x20\x20\x20\x20\x20\x20'+_0x418b0b(0x5c5,0x54f)+_0xdb49ff(0x5f9,0x706)+'\x20NOT\x20NULL,'+_0x418b0b(0x45c,0x4e2)+_0xdb49ff(0x5c1,0x832)+_0x418b0b(0x1f9,0x404)+_0x418b0b(0xb5,0x19a)+'\x20\x20outcome\x20'+_0xdb49ff(0x56e,0x3a4)+_0x418b0b(0x29a,0x34c)+_0xdb49ff(0x5d3,0x3a2)+_0x418b0b(0x1d9,0x14b)+_0xdb49ff(0x405,0x2d8)+_0x418b0b(0x13b,0x270)+_0x418b0b(0x39a,0x4c2)+_0x418b0b(0x428,0x535)+_0x418b0b(0x79f,0x68e)+'OT\x20NULL\x20DE'+'FAULT\x200.5,'+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20c'+'ontext_tag'+'s\x20TEXT,\x0a\x20\x20'+_0xdb49ff(0x5df,0x628)+_0x418b0b(0x4e9,0x2fa)+_0xdb49ff(0x926,0xa87)+'\x20FOREIGN\x20K'+_0xdb49ff(0x7d1,0x814)+_0xdb49ff(0x812,0x9ee)+_0xdb49ff(0x6e3,0x875)+('\x20proficien'+_0xdb49ff(0x943,0xb74)+_0x418b0b(0x4a8,0x3dc)+'LETE\x20CASCA'+'DE\x0a\x20\x20\x20\x20\x20\x20)'+_0xdb49ff(0x6e4,0x4cc)+_0xdb49ff(0x4b8,0x647)+_0x418b0b(0x1a9,0x164)+'XISTS\x20idx_'+'proficienc'+_0x418b0b(-0x43,0x1af)+_0xdb49ff(0x82a,0x798)+_0xdb49ff(0x943,0xb5e)+_0xdb49ff(0x659,0x52c)+_0x418b0b(0x576,0x4b6)+_0xdb49ff(0x597,0x400)+_0x418b0b(-0xf0,0xfd)+_0x418b0b(0x2b0,0x585)+'S\x20idx_prof'+_0x418b0b(0x26,0x191)+_0xdb49ff(0x4af,0x3fd)+_0x418b0b(0xf1,0x1ab)+_0x418b0b(0x6ce,0x571)+_0x418b0b(-0xbc,0x1c6)+_0xdb49ff(0x5f1,0x4cd)+_0xdb49ff(0x7f7,0xa69)+_0xdb49ff(0x774,0x819)+_0x418b0b(0x4d7,0x5a6)+_0xdb49ff(0x531,0x4cf)+'e_proficie'+'ncy\x20ON\x20exp'+_0x418b0b(0x60c,0x55c)+_0xdb49ff(0x7d7,0x980)+_0x418b0b(0x57b,0x3fb)+_0xdb49ff(0x45d,0x2ee)+_0x418b0b(-0x49,0x123)+_0x418b0b(0x43c,0x4d3)+_0x418b0b(0x568,0x66d)+_0xdb49ff(0x563,0x4ac)+_0x418b0b(0x27f,0x447)+'ON\x20experie'+_0xdb49ff(0x6a0,0x940)+'(timestamp'+_0x418b0b(0x2c4,0x3a5))),this['db'][_0xdb49ff(0x765,0x823)](_0xdb49ff(0x889,0x871)+_0xdb49ff(0x65a,0x5f6)+'IF\x20NOT\x20EXI'+_0xdb49ff(0x883,0x9c4)+_0xdb49ff(0x8a7,0x716)+_0x418b0b(0x67f,0x54a)+'d\x20TEXT\x20PRI'+_0x418b0b(0x2d1,0x51a)+_0xdb49ff(0x579,0x5e3)+_0x418b0b(0x31d,0x4f4)+_0x418b0b(-0x156,0x176)+_0x418b0b(0x239,0x50e)+_0xdb49ff(0x50a,0x729)+_0x418b0b(0x545,0x293)+_0x418b0b(0x208,0x2f4)+'\x20\x20\x20synced\x20'+'INTEGER\x20DE'+_0x418b0b(0x131,0x212)+_0xdb49ff(0x8a3,0x90a)+_0x418b0b(0x565,0x5d3)+_0x418b0b(0x36e,0x290)+_0xdb49ff(0x8db,0xb27)+'idx_emotio'+_0xdb49ff(0x8d7,0xa4e)+_0xdb49ff(0x6a7,0x72c)+_0xdb49ff(0x788,0x4ae)+_0x418b0b(0x588,0x654)+_0x418b0b(0x551,0x3a5));try{this['db'][_0xdb49ff(0x765,0x7e3)](_0x418b0b(0x776,0x5c6)+_0xdb49ff(0x68c,0x5e4)+_0xdb49ff(0x683,0x4d9)+_0xdb49ff(0x862,0x612)+_0x418b0b(0x2d7,0x1de));}catch{}try{this['db'][_0xdb49ff(0x765,0x8b6)]('ALTER\x20TABL'+_0x418b0b(0x44b,0x3b1)+'\x20ADD\x20COLUM'+'N\x20chunk_in'+_0x418b0b(0x46c,0x56a)+'R');}catch{}try{if(_0x4bd59a['dhwjp']('kHnTw',_0xdb49ff(0x96d,0x78c))){const _0x3d6302=_0x3bf910?.[_0x418b0b(0x686,0x532)]??0x64;if(_0x3b70aa?.[_0x418b0b(0xe3,0x268)+'h']){const _0x415df7=this[_0xdb49ff(0x612,0x53a)](_0x4bd59a[_0xdb49ff(0x851,0xb1c)],_0xdb49ff(0x634,0x539)+_0xdb49ff(0x44d,0x6b2)+'iency_reco'+_0x418b0b(0x7a2,0x683)+_0x418b0b(0x706,0x637)+'th\x20=\x20?\x20ORD'+_0xdb49ff(0x476,0x502)+_0x418b0b(0x598,0x426)+_0x418b0b(0x4a8,0x51d)+_0xdb49ff(0x7b4,0x651)+'?')[_0xdb49ff(0x70e,0x6bf)](_0x357e30[_0xdb49ff(0x543,0x48d)+'h'],_0x3d6302);return _0x415df7['map'](_0x207c19);}const _0x16e328=this['stmt'](_0x418b0b(0x66c,0x521)+'ciencies_a'+'ll',_0x418b0b(0x37c,0x359)+_0x418b0b(0x399,0x172)+'iency_reco'+_0x418b0b(0x173,0x452)+'BY\x20level\x20D'+_0xdb49ff(0x8b4,0xa27)+_0xdb49ff(0x81b,0x67a)+_0x418b0b(0xa9,0x287))[_0x418b0b(0x348,0x433)](_0x3d6302);return _0x16e328[_0x418b0b(0x339,0x17d)](_0x3d557a);}else this['db'][_0xdb49ff(0x765,0xa00)](_0x4bd59a[_0xdb49ff(0x6d9,0x832)]);}catch{}try{this['db'][_0xdb49ff(0x765,0x811)](_0x4bd59a[_0xdb49ff(0x716,0x6cc)]);}catch{}try{this['db']['exec'](_0x4bd59a[_0x418b0b(0x327,0x4fa)]);}catch{}try{this['db'][_0x418b0b(0x507,0x48a)](_0x4bd59a[_0x418b0b(0x5f3,0x3d9)]);}catch{}this['db'][_0xdb49ff(0x765,0x65a)](_0x418b0b(0x466,0x51c)+'EX\x20IF\x20NOT\x20'+'EXISTS\x20idx'+'_memories_'+_0xdb49ff(0x5f3,0x501)+_0x418b0b(0x684,0x483)+_0x418b0b(0x40e,0x559)+_0x418b0b(0x364,0x1f0)),this['db'][_0xdb49ff(0x765,0x86d)](_0x4bd59a[_0x418b0b(0x4ad,0x23a)]),this['db'][_0xdb49ff(0x765,0xa3a)]('\x0a\x20\x20\x20\x20\x20\x20CRE'+'ATE\x20TABLE\x20'+'IF\x20NOT\x20EXI'+'STS\x20sessio'+_0x418b0b(0x3e4,0x27a)+_0x418b0b(0x2a1,0x472)+_0x418b0b(0x3ec,0x50a)+_0xdb49ff(0x756,0x706)+'ARY\x20KEY,\x0a\x20'+'\x20\x20\x20\x20\x20\x20\x20ext'+_0x418b0b(0x135,0x1a7)+_0x418b0b(0x26e,0x19d)+_0xdb49ff(0x77d,0x982)+_0x418b0b(0x54,0x2ac)+_0xdb49ff(0x64a,0x88f)+_0xdb49ff(0x4b4,0x330)+'lity\x20REAL,'+_0x418b0b(0x632,0x54a)+_0x418b0b(0x39d,0x500)+_0x418b0b(0x16a,0x26b)+_0x418b0b(0x6b8,0x671)+_0x418b0b(0x391,0x370)+'_tier_coun'+_0x418b0b(0x4ff,0x624)+_0x418b0b(0x52e,0x4e2)+_0xdb49ff(0x907,0xbba)+_0xdb49ff(0x8e1,0x870)+_0xdb49ff(0x8f5,0xab6)+_0xdb49ff(0x750,0x96e)+_0x418b0b(0x30,0x280)+'\x20NULL\x20DEFA'+_0x418b0b(0x34d,0x4ff)+_0xdb49ff(0x707,0x776)+_0xdb49ff(0x7b6,0xa94)+_0xdb49ff(0x74c,0x632));function _0x418b0b(_0x4a3b0c,_0x4611cb){return _0x43e245(_0x4611cb- -0x9a,_0x4a3b0c);}try{'HACOg'!==_0x4bd59a[_0x418b0b(0x2e4,0x251)]?this['db'][_0x418b0b(0x75c,0x48a)](_0x4bd59a[_0x418b0b(0x14b,0x286)]):this['db'][_0xdb49ff(0x765,0x516)](_0x4bd59a['sZayr']);}catch{}this['db'][_0x418b0b(0x620,0x48a)](_0x418b0b(0x38e,0x51c)+_0xdb49ff(0x774,0x4a7)+_0x418b0b(0x600,0x5a6)+_0xdb49ff(0x7c4,0x6ce)+_0xdb49ff(0x70b,0x570)+_0x418b0b(0x59e,0x4b1)+_0xdb49ff(0x4ec,0x447)+'d)'),this['db'][_0x418b0b(0x39c,0x48a)]('\x0a\x20\x20\x20\x20\x20\x20CRE'+_0x418b0b(0x638,0x37f)+_0xdb49ff(0x71a,0x668)+'STS\x20inject'+'ion_logs\x20('+_0x418b0b(0x626,0x54a)+_0xdb49ff(0x93f,0xa52)+_0xdb49ff(0x7f5,0x5e9)+_0xdb49ff(0x7c5,0xa47)+'ssion_id\x20T'+_0xdb49ff(0x698,0x750)+_0xdb49ff(0x475,0x1e1)+'\x20\x20hook_typ'+_0xdb49ff(0x6ce,0x623)+_0x418b0b(0x477,0x396)+_0xdb49ff(0x739,0x52f)+_0x418b0b(0x367,0x3c4)+_0xdb49ff(0x839,0xaa4)+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20i'+_0x418b0b(0x3ef,0x641)+'ywords\x20TEX'+_0xdb49ff(0x926,0xa77)+_0x418b0b(0x560,0x529)+_0xdb49ff(0x4e0,0x5d8)+_0xdb49ff(0x841,0x6f9)+_0x418b0b(0x1b8,0x25f)+_0x418b0b(0x170,0x1fd)+_0xdb49ff(0x518,0x6c8)+_0xdb49ff(0x7e6,0x605)+_0x418b0b(0x656,0x53d)+_0xdb49ff(0x40a,0x553)+_0x418b0b(-0x34,0x1fc)+'fectivenes'+'s\x20REAL,\x0a\x20\x20'+_0x418b0b(0x454,0x5fd)+_0x418b0b(0x3fe,0x28e)+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20c'+_0x418b0b(0x37a,0x22f)+_0xdb49ff(0x56e,0x6ae)+_0xdb49ff(0x4b3,0x48f)+'T\x20(datetim'+_0xdb49ff(0x714,0x8af)+_0x418b0b(0x205,0x1b1)+'\x20\x20\x20\x20\x20\x20CREA'+'TE\x20TABLE\x20I'+_0x418b0b(0xca,0x2ea)+_0x418b0b(0x36f,0x515)+_0xdb49ff(0x964,0xbaa)+_0xdb49ff(0x3e8,0x164)+_0xdb49ff(0x756,0x8bb)+_0x418b0b(0x522,0x3b6)+_0x418b0b(0x41a,0x340)+_0x418b0b(0x274,0x4e4)+'TEXT\x20NOT\x20N'+_0x418b0b(0x25,0x2f4)+_0x418b0b(0xb0,0x163)+_0x418b0b(0x3d5,0x3aa)+_0x418b0b(0x304,0x3a9)+_0x418b0b(0x314,0x186)+_0xdb49ff(0x5b3,0x51f)+_0x418b0b(0x7d8,0x527)+'\x20\x20\x20\x20\x20\x20\x20cre'+'ated_at\x20TE'+'XT\x20NOT\x20NUL'+_0x418b0b(0x6dc,0x6ae)+'(datetime('+_0xdb49ff(0x94b,0x854)+_0x418b0b(-0x1e,0x26d)+'EIGN\x20KEY\x20('+_0xdb49ff(0x93e,0x91a)+'id)\x20REFERE'+_0xdb49ff(0x72a,0x864)+_0x418b0b(0x63d,0x48d)+_0x418b0b(0x547,0x2e5)+_0x418b0b(0x52e,0x4c1)+_0x418b0b(0x6fd,0x44b)+_0xdb49ff(0x873,0x747)+'EATE\x20TABLE'+_0x418b0b(0x46b,0x4d3)+'ISTS\x20extra'+_0xdb49ff(0x65b,0x7d9)+_0xdb49ff(0x4bc,0x2fb)+_0x418b0b(0x249,0x10d)+'\x20TEXT\x20PRIM'+_0xdb49ff(0x691,0x5f7)+_0x418b0b(0x67e,0x4c7)+_0xdb49ff(0x934,0xbcf)+'T\x20NOT\x20NULL'+_0x418b0b(0x425,0x315)+'session_id'+_0xdb49ff(0x4f3,0x629)+_0x418b0b(0x3a5,0x4c3)+'\x20\x20\x20\x20signif'+_0x418b0b(0xfe,0x1f5)+_0x418b0b(0x500,0x2b9)+_0x418b0b(0x551,0x4a2)+_0x418b0b(0xe5,0x129)+_0xdb49ff(0x684,0x3dd)+_0x418b0b(0x404,0x23f)+_0xdb49ff(0x53c,0x493)+(_0xdb49ff(0x541,0x57e)+_0xdb49ff(0x42b,0x623)+_0x418b0b(0x1cf,0x199)+'LL\x20DEFAULT'+_0xdb49ff(0x540,0x7ce)+_0x418b0b(0x583,0x3ed)+_0xdb49ff(0x630,0x8bc)+'ER\x20NOT\x20NUL'+_0xdb49ff(0x989,0x748)+_0x418b0b(0x685,0x572)+_0xdb49ff(0x6dc,0x775)+_0x418b0b(0x4a3,0x573)+_0xdb49ff(0x479,0x3c8)+_0xdb49ff(0x872,0xb4d)+'\x20\x20\x20\x20\x20\x20crea'+'ted_at\x20TEX'+'T\x20NOT\x20NULL'+_0x418b0b(0x16,0x2c2)+_0xdb49ff(0x730,0x52f)+_0xdb49ff(0x8e9,0x8a0)+_0x418b0b(0x3f0,0x1e6)+'\x20\x20\x20CREATE\x20'+_0x418b0b(0x428,0x290)+_0xdb49ff(0x8db,0x71f)+_0x418b0b(0x3d5,0x47d)+_0xdb49ff(0x678,0x87e)+_0x418b0b(0x250,0x44d)+'injection_'+'logs(sessi'+_0x418b0b(0xc5,0x201)+'\x20\x20\x20\x20CREATE'+_0xdb49ff(0x8d3,0x674)+_0x418b0b(0x22d,0x237)+_0xdb49ff(0x853,0x973)+_0xdb49ff(0x86a,0x5e7)+_0x418b0b(0x18f,0x3df)+_0xdb49ff(0x77a,0xa17)+_0x418b0b(0x3cd,0x387)+'jection_id'+_0xdb49ff(0x888,0x61a)+_0x418b0b(0x99,0x1dd)+_0xdb49ff(0x43f,0x3bc)+_0x418b0b(0x793,0x648)+'extraction'+_0xdb49ff(0x59f,0x491)+'ory\x20ON\x20ext'+'raction_ev'+_0xdb49ff(0x7bb,0x8dd)+_0x418b0b(0x398,0x508)+_0xdb49ff(0x45d,0x256)+_0xdb49ff(0x3fe,0x606)+_0xdb49ff(0x7ae,0x98a)+_0x418b0b(0x6f0,0x66d)+'xtraction_'+_0x418b0b(0x86e,0x639)+_0xdb49ff(0x5c3,0x7f2)+_0xdb49ff(0x6bd,0x90e)+_0x418b0b(0x747,0x4e0)+_0xdb49ff(0x7e5,0x904)+_0x418b0b(0x4cb,0x3a5)));try{const _0x59dbf3=this['db'][_0xdb49ff(0x8c9,0x9bd)](_0x4bd59a[_0xdb49ff(0x745,0x7a7)])['all'](),_0x30f73a=_0x59dbf3['some'](_0x2d1302=>_0x2d1302[_0xdb49ff(0x85a,0xa41)]===_0xdb49ff(0x81d,0x549));!_0x30f73a&&this['db'][_0xdb49ff(0x765,0x5ce)](_0x4bd59a['PNEMS']);}catch{}}['createMemo'+'ry'](_0x2e63f4){function _0x5a0891(_0x14c0d6,_0x5de892){return _0x16cd78(_0x5de892,_0x14c0d6- -0x37);}const _0x7d15ab={'jMxau':function(_0x23ab01){return _0x23ab01();},'cMtqi':'INSERT\x20INT'+_0x301bb2(-0x3d9,-0x153)+_0x301bb2(0x221,0x385)+_0x301bb2(0x394,0x2a4)+_0x5a0891(-0x20,-0x269)+_0x5a0891(0x2a4,0x3b0),'ViHFU':_0x5a0891(0x38d,0x48c),'lpuNV':function(_0x577f4b){return _0x577f4b();}};function _0x301bb2(_0x2846bd,_0x331316){return _0x16cd78(_0x2846bd,_0x331316- -0x212);}const _0x2a2b74=_0x7d15ab[_0x301bb2(0x93,-0x7e)](randomUUID),_0x416119=new Date()[_0x301bb2(0x8d,-0xfa)+'g'](),_0x5f49e9=_0x2e63f4['tags']??[],_0x240526=this['stmt'](_0x301bb2(-0xf9,0x37)+_0x5a0891(0x3d0,0x57c),_0x301bb2(-0x9b,0xae)+_0x5a0891(0x44c,0x2c5)+_0x301bb2(-0x10c,0xc)+'d,\x20content'+_0x5a0891(0x2a7,0x5)+_0x301bb2(-0x2b,0x1f6)+_0x301bb2(0x2bd,0x2a2)+',\x20session_'+_0x5a0891(0x37f,0x60a)+_0x301bb2(-0x35a,-0x196)+_0x301bb2(0x263,0x2b0)+_0x5a0891(0x3e8,0x68e)+'hunk_index'+_0x301bb2(0x20,0x1)+'tal,\x20quali'+_0x301bb2(0x3ab,0x359)+_0x5a0891(0x366,0x585)+_0x301bb2(0x34,0x26b)+_0x301bb2(-0x4a,0x14a)+_0x5a0891(0x175,-0x9d)+',\x20?,\x20?,\x20?,'+_0x301bb2(0x48a,0x295)+_0x301bb2(0x206,-0xb7)),_0x3c72a6=this['stmt'](_0x5a0891(0x4a5,0x4be),_0x7d15ab[_0x301bb2(0x28f,0x87)]),_0x28df37=this['stmt'](_0x7d15ab['ViHFU'],_0x301bb2(0x2b5,0xd0)+'O\x20memory_f'+_0x301bb2(0x1c0,0xf3)+_0x5a0891(0xbb,0x21)+_0x301bb2(0x1f,-0xd0)+_0x5a0891(0x1fb,0x13)),_0x15d3e7=this['db'][_0x5a0891(0x291,0x3c7)+'n'](()=>{_0x240526[_0x1ab34b(0x353,0x366)](_0x2a2b74,_0x2e63f4[_0x1ab34b(0x5f6,0x723)],_0x2e63f4['category'],_0x2e63f4['tier'],_0x2e63f4[_0x1ab34b(0x1e0,0x40d)+'h']??null,_0x2e63f4[_0x1ab34b(0x415,0x369)]??null,_0x416119,_0x416119,_0x2e63f4['parentId']??null,_0x2e63f4[_0x33311a(0x7d1,0x779)]??null,_0x2e63f4[_0x1ab34b(0x514,0x679)]??null,_0x2e63f4[_0x1ab34b(-0x9,0x2a1)+'re']??null,_0x2e63f4['memoryType']??null);for(const _0x34db13 of _0x5f49e9){_0x3c72a6[_0x33311a(0x387,0x3f7)](_0x2a2b74,_0x34db13);}function _0x33311a(_0x516639,_0x44551c){return _0x5a0891(_0x44551c-0x376,_0x516639);}const _0x33d6d4=this[_0x1ab34b(0x121,0x33a)](_0x2a2b74);function _0x1ab34b(_0x1fb416,_0x3cd5ab){return _0x5a0891(_0x3cd5ab-0x2e5,_0x1fb416);}_0x28df37['run'](_0x33d6d4,_0x2e63f4['content']);});return _0x7d15ab['lpuNV'](_0x15d3e7),{'id':_0x2a2b74,'content':_0x2e63f4[_0x5a0891(0x43e,0x4b1)],'category':_0x2e63f4[_0x5a0891(0x16f,0x2c2)],'tier':_0x2e63f4[_0x5a0891(0x4c1,0x473)],'tags':_0x5f49e9,'projectPath':_0x2e63f4[_0x301bb2(-0x68,-0xb3)+'h'],'sessionId':_0x2e63f4[_0x301bb2(-0x3c5,-0x157)],'createdAt':_0x416119,'updatedAt':_0x416119,'accessCount':0x0,'qualityScore':_0x2e63f4[_0x5a0891(-0x44,0x4d)+'re'],'parentId':_0x2e63f4[_0x5a0891(0x2dd,0x35d)],'chunkIndex':_0x2e63f4['chunkIndex'],'chunkTotal':_0x2e63f4[_0x5a0891(0x394,0x40b)]};}[_0x16cd78(-0x65,0x257)](_0x48aa14){const _0x3a8cf7={'kTLxC':_0x10e422(0x2bf,0x98)+_0x10e422(0x517,0x381)+_0x10e422(0x2df,0x1d5)+_0x3dee3b(-0x2e4,-0xd3)};function _0x3dee3b(_0x3a5d84,_0x59d80f){return _0x16cd78(_0x3a5d84,_0x59d80f- -0x10b);}const _0x39cb12=this[_0x10e422(0x29d,0x48a)]('get_memory',_0x3a8cf7[_0x3dee3b(-0xa7,-0x11)])[_0x10e422(0x2ea,0x5bf)](_0x48aa14);if(!_0x39cb12)return null;function _0x10e422(_0x3f16a0,_0x104d62){return _0x16cd78(_0x104d62,_0x3f16a0-0x6f);}return this[_0x3dee3b(0xc0,0x45)+'y'](_0x39cb12);}[_0x43e245(0x4f3,0x511)+'ss'](_0x833e1c){const _0x308e02={'kSOFr':'inc_access'};function _0x4b837c(_0x5be710,_0x2ba6b5){return _0x16cd78(_0x2ba6b5,_0x5be710-0x97);}function _0x3d5c2e(_0x3c6993,_0x310703){return _0x16cd78(_0x3c6993,_0x310703- -0xdf);}this[_0x4b837c(0x2c5,0x47c)](_0x308e02[_0x4b837c(0x4f0,0x23a)],'UPDATE\x20mem'+_0x3d5c2e(0x428,0x2bd)+_0x4b837c(0x2ad,0xa)+_0x4b837c(0x456,0x212)+_0x3d5c2e(0x214,0x16e)+_0x4b837c(0x4ba,0x28f)+_0x4b837c(0x40c,0x33f)+_0x4b837c(0x385,0x1cb)+_0x4b837c(0x153,0x3f)+_0x3d5c2e(-0x2e7,-0x91))[_0x3d5c2e(-0x3a,-0x27)](_0x833e1c);}['mergeAcces'+'sCount'](_0x46d2ee,_0x4df5d1){const _0xf7d7ae={'qAZeM':'merge_acce'+_0x32308f(0x285,0x196)};function _0x32308f(_0x459273,_0x10d6d8){return _0x43e245(_0x459273- -0xd4,_0x10d6d8);}function _0x5f0483(_0x29a983,_0x22a025){return _0x43e245(_0x22a025- -0x8e,_0x29a983);}this[_0x5f0483(0x2ff,0x343)](_0xf7d7ae[_0x5f0483(0x612,0x644)],_0x32308f(0x44f,0x301)+_0x5f0483(0x684,0x4b1)+_0x5f0483(0x502,0x32b)+_0x32308f(0x3be,0x15c)+_0x32308f(0x218,0x172)+_0x5f0483(0x173,0x14a)+_0x5f0483(0x97a,0x69d))[_0x5f0483(0x42c,0x1cd)](_0x4df5d1,_0x46d2ee);}[_0x16cd78(0x621,0x537)+'ry'](_0x1feaf0,_0x59b965){const _0x423a4a={'NFXSx':'update_inj'+_0x22aea4(0x55f,0x626)+_0x83beac(0xa59,0x797),'ArGfJ':_0x22aea4(0x398,0x5a1)+_0x22aea4(0x9e8,0x7f9)+'es\x20WHERE\x20i'+'d\x20=\x20?','rUAGJ':function(_0x55439b,_0x2f2f9a){return _0x55439b!==_0x2f2f9a;},'LBByG':function(_0x4bad9c,_0x4aee8f){return _0x4bad9c!==_0x4aee8f;},'RLejg':'category\x20='+'\x20?','Gvhzt':_0x22aea4(0x33e,0x569),'hIGBA':_0x83beac(0x6ca,0x823)+_0x22aea4(0xaaa,0x8d0),'jvuBR':function(_0x33530b,_0x34e151){return _0x33530b!==_0x34e151;},'CUxBe':'quality_sc'+_0x22aea4(0x9af,0x8e5),'ovzkJ':function(_0x4be25e,_0x30d4e9){return _0x4be25e!==_0x30d4e9;},'jGIiT':'invalid_at'+_0x22aea4(0x411,0x699),'Bxpdu':function(_0x3b10c1,_0x1bf706){return _0x3b10c1!==_0x1bf706;},'dXuRd':_0x83beac(0x51e,0x5d7)+_0x22aea4(0x4b1,0x410)+'ags\x20(memor'+'y_id,\x20tag)'+_0x83beac(0x339,0x30c)+_0x22aea4(0x5b1,0x62c),'oaoZZ':_0x83beac(0x585,0x675)+_0x83beac(0x4e0,0x77e)+_0x22aea4(0x940,0x8c6)+_0x83beac(0x11c,0x35f)+_0x83beac(0x685,0x496)},_0x4caac4=this['stmt'](_0x22aea4(0x6b3,0x7de),_0x423a4a[_0x83beac(0x1a7,0x3f8)])['get'](_0x1feaf0);if(!_0x4caac4)return null;const _0x5978a8=[_0x22aea4(0x8ca,0x612)+'\x20=\x20datetim'+_0x83beac(0x650,0x46b)],_0x2ba18c=[];_0x423a4a['rUAGJ'](_0x59b965[_0x22aea4(0x77b,0x7c6)],undefined)&&(_0x5978a8[_0x83beac(0x81e,0x5f8)](_0x83beac(0x7d8,0x543)+'?'),_0x2ba18c[_0x83beac(0x875,0x5f8)](_0x59b965['content']));_0x423a4a['LBByG'](_0x59b965['category'],undefined)&&(_0x5978a8['push'](_0x423a4a[_0x83beac(0x628,0x419)]),_0x2ba18c['push'](_0x59b965[_0x22aea4(0x6a1,0x4f7)]));_0x59b965[_0x22aea4(0x828,0x849)]!==undefined&&(_0x5978a8[_0x83beac(0x515,0x5f8)](_0x22aea4(0x9f2,0x73a)),_0x2ba18c[_0x22aea4(0x5e6,0x654)](_0x59b965[_0x22aea4(0xa29,0x849)]));_0x59b965[_0x22aea4(0x49b,0x4b0)+'h']!==undefined&&(_0x423a4a[_0x83beac(0xb44,0x87b)]===_0x83beac(0x9dc,0x77d)?this['stmt'](_0x423a4a['NFXSx'],_0x83beac(0x4de,0x520)+_0x83beac(0x4dd,0x7b3)+_0x83beac(0x583,0x65b)+_0x22aea4(0x684,0x6e9)+_0x83beac(0x367,0x485)+'ount\x20=\x20?\x20W'+_0x83beac(0x576,0x3bb)+'?')[_0x83beac(0x19c,0x3ad)](_0x432479,_0x328101,_0x59be20):(_0x5978a8[_0x83beac(0x72e,0x5f8)](_0x423a4a[_0x83beac(0x740,0x6b7)]),_0x2ba18c[_0x22aea4(0x619,0x654)](_0x59b965[_0x22aea4(0x1ef,0x4b0)+'h'])));_0x59b965[_0x22aea4(0x36a,0x40c)]!==undefined&&(_0x5978a8[_0x83beac(0x750,0x5f8)](_0x83beac(0x89d,0x6f6)+_0x22aea4(0x88a,0x699)),_0x2ba18c['push'](_0x59b965[_0x22aea4(0x5a5,0x40c)]));_0x423a4a[_0x83beac(0x6e2,0x4d9)](_0x59b965[_0x83beac(0x1e5,0x2e8)+'re'],undefined)&&(_0x5978a8[_0x83beac(0x437,0x5f8)](_0x423a4a[_0x22aea4(0x62e,0x452)]),_0x2ba18c['push'](_0x59b965[_0x22aea4(0x27e,0x344)+'re']));_0x423a4a[_0x83beac(0x6da,0x869)](_0x59b965['memoryType'],undefined)&&(_0x5978a8[_0x83beac(0x792,0x5f8)](_0x83beac(0x85f,0x692)+_0x83beac(0x225,0x431)),_0x2ba18c['push'](_0x59b965[_0x22aea4(0xb76,0x8f1)]));_0x59b965['invalidAt']!==undefined&&(_0x5978a8[_0x83beac(0x371,0x5f8)](_0x423a4a[_0x83beac(0x5ba,0x57a)]),_0x2ba18c[_0x83beac(0x864,0x5f8)](_0x59b965['invalidAt']));_0x2ba18c[_0x22aea4(0x69a,0x654)](_0x1feaf0),this['db'][_0x22aea4(0x5ae,0x836)](_0x22aea4(0x469,0x6d1)+_0x83beac(0x7ad,0x691)+_0x5978a8[_0x22aea4(0x72b,0x7fd)](',\x20')+(_0x83beac(0x42f,0x6f2)+_0x83beac(0x96f,0x716)))[_0x83beac(0x36a,0x3ad)](..._0x2ba18c);function _0x22aea4(_0x2cc3e4,_0x52be00){return _0x16cd78(_0x2cc3e4,_0x52be00-0x351);}if(_0x423a4a[_0x83beac(0x525,0x6e1)](_0x59b965[_0x83beac(0x5b7,0x87f)],undefined)){this[_0x83beac(0x628,0x523)](_0x83beac(0x510,0x593)+'s','DELETE\x20FRO'+_0x22aea4(0x6c7,0x7d6)+_0x22aea4(0x729,0x604)+'memory_id\x20'+_0x22aea4(0x9af,0x772))[_0x22aea4(0x41e,0x409)](_0x1feaf0);const _0x5233f7=this[_0x22aea4(0x63c,0x57f)](_0x22aea4(0x8bb,0x82d),_0x423a4a['dXuRd']);for(const _0x3995a4 of _0x59b965[_0x83beac(0x62b,0x87f)]){_0x5233f7[_0x22aea4(0x4f4,0x409)](_0x1feaf0,_0x3995a4);}}if(_0x59b965[_0x83beac(0x95c,0x76a)]!==undefined){const _0x1aa949=this[_0x22aea4(0x327,0x3dd)](_0x1feaf0);_0x1aa949!==null&&this[_0x22aea4(0x2b9,0x57f)]('update_fts',_0x423a4a[_0x83beac(0xf1,0x333)])[_0x22aea4(0x183,0x409)](_0x59b965[_0x83beac(0x896,0x76a)],_0x1aa949);}function _0x83beac(_0x39a095,_0x42a0af){return _0x16cd78(_0x39a095,_0x42a0af-0x2f5);}const _0x53eef1=this[_0x22aea4(0x5fa,0x57f)](_0x83beac(0x4b4,0x782),_0x423a4a[_0x22aea4(0x620,0x454)])[_0x83beac(0x55c,0x570)](_0x1feaf0);if(!_0x53eef1)return null;return this['rowToMemor'+'y'](_0x53eef1);}['deleteMemo'+'ry'](_0xeccc5f){const _0x6fcbb4={'qyTZI':function(_0x323531,_0x1a1dea){return _0x323531===_0x1a1dea;},'WOqyo':_0x61219(0x5c3,0x847),'TtVms':_0x47f12d(0x441,0x67e)+_0x47f12d(0x7f8,0x6f9)+'\x20WHERE\x20id\x20'+_0x47f12d(0x652,0x7f4),'TjiJX':function(_0x446e88,_0x5d346c){return _0x446e88>_0x5d346c;}};this[_0x47f12d(0xadd,0x8e1)+'ne'](_0xeccc5f);const _0x343f2b=this[_0x47f12d(0x336,0x45f)](_0xeccc5f);if(_0x343f2b!==null){if(_0x6fcbb4[_0x47f12d(0xb47,0x8cf)](_0x6fcbb4[_0x61219(0x3a8,0x187)],_0x61219(0x567,0x62c))){this['stmt'](_0x47f12d(0x740,0x671)+'s',_0x61219(0x3c3,0x678)+_0x61219(0x59d,0x3ea)+_0x47f12d(0x499,0x686)+_0x47f12d(0x376,0x3ce)+_0x47f12d(0x7a1,0x7f4))[_0x61219(0x1d0,-0xb0)](_0x4c9a53);const _0x3836de=this[_0x47f12d(0x852,0x601)]('insert_tag',_0x61219(0x3fa,0x5df)+_0x61219(0x1d7,0x70)+_0x61219(0x6af,0x583)+_0x61219(0x5ce,0x5ad)+_0x47f12d(0x692,0x3ea)+',\x20?)');for(const _0x599539 of _0x301c52['tags']){_0x3836de[_0x61219(0x1d0,0x2e8)](_0x8eb244,_0x599539);}}else this['stmt'](_0x61219(0x2e5,0x302),_0x47f12d(0x92f,0x67e)+_0x47f12d(0x54f,0x64d)+_0x47f12d(0x857,0x89c)+'owid\x20=\x20?')[_0x47f12d(0x6fa,0x48b)](_0x343f2b);}const _0x8cba0d=this[_0x61219(0x346,0x3aa)](_0x61219(0x45b,0x428)+_0x61219(0x51f,0x6ac),_0x6fcbb4[_0x61219(0x340,0x1e2)])[_0x61219(0x1d0,0x13b)](_0xeccc5f);function _0x47f12d(_0x1fbff5,_0x5f391b){return _0x16cd78(_0x1fbff5,_0x5f391b-0x3d3);}function _0x61219(_0x5f4b1a,_0x89fc10){return _0x16cd78(_0x89fc10,_0x5f4b1a-0x118);}return _0x6fcbb4[_0x61219(0x4ca,0x784)](_0x8cba0d[_0x61219(0x5f7,0x5b4)],0x0);}[_0x43e245(0x5ff,0x4ec)+'ies'](_0x30b41e){const _0x534b80={'IkrYW':_0x493015(0xe9,0x130)+'\x20?','meCxQ':_0x493015(0x457,0x4a9),'miPTD':_0x493015(0xab,0x10b)};function _0x3b26fd(_0x117c23,_0x1e2413){return _0x16cd78(_0x1e2413,_0x117c23-0x30b);}const _0x452039=[],_0x201903=[];_0x30b41e?.['category']&&(_0x452039[_0x3b26fd(0x60e,0x842)](_0x534b80['IkrYW']),_0x201903[_0x493015(0xf4,0x3c3)](_0x30b41e[_0x493015(-0x3e,0x266)]));_0x30b41e?.[_0x3b26fd(0x803,0x560)]&&(_0x452039[_0x493015(0x4b4,0x3c3)](_0x534b80[_0x3b26fd(0x731,0x648)]),_0x201903[_0x493015(0x4e0,0x3c3)](_0x30b41e[_0x3b26fd(0x803,0xa42)]));_0x30b41e?.['projectPat'+'h']&&(_0x452039['push']('project_pa'+_0x493015(0x4fd,0x63f)),_0x201903[_0x493015(0x636,0x3c3)](_0x30b41e['projectPat'+'h']));const _0x51edf1=_0x452039[_0x493015(0x397,0x5c6)]>0x0?_0x493015(0x1e1,0xbe)+_0x452039[_0x3b26fd(0x7b7,0x93c)](_0x534b80[_0x493015(0x848,0x5d9)]):'';function _0x493015(_0x1ed13a,_0x4de0ef){return _0x16cd78(_0x1ed13a,_0x4de0ef-0xc0);}const _0x1292a2=this['db'][_0x493015(0x393,0x5a5)](_0x3b26fd(0x76a,0x920)+'NT(*)\x20as\x20c'+_0x3b26fd(0x709,0x901)+_0x3b26fd(0x547,0x6a2)+_0x51edf1)[_0x493015(0x73,0x33b)](..._0x201903);return _0x1292a2[_0x493015(0x542,0x342)];}[_0x43e245(0x65d,0x42b)+'es'](_0x35e7f2){const _0x7c5e9f={'LEzmS':'invalid_at'+_0x5a925e(0x932,0xbec),'owUks':_0x483f8d(0x915,0x7d9),'tTwNr':function(_0x42d49e,_0x515f35){return _0x42d49e!==_0x515f35;},'aZcIl':_0x5a925e(0x497,0x5cd)},_0x468517=[];function _0x5a925e(_0x47a2cc,_0x2f3f89){return _0x16cd78(_0x2f3f89,_0x47a2cc-0x44c);}const _0x51a65a=[];function _0x483f8d(_0x186458,_0x3816bd){return _0x16cd78(_0x186458,_0x3816bd-0x3f0);}!_0x35e7f2?.['includeInv'+_0x483f8d(0xb8f,0x973)]&&_0x468517[_0x483f8d(0x87a,0x6f3)](_0x7c5e9f[_0x483f8d(0x865,0x89e)]);_0x35e7f2?.['category']&&(_0x468517[_0x483f8d(0x8cd,0x6f3)](_0x483f8d(0x3c8,0x460)+'\x20?'),_0x51a65a[_0x5a925e(0x74f,0x738)](_0x35e7f2[_0x5a925e(0x5f2,0x341)]));_0x35e7f2?.[_0x5a925e(0x944,0xa03)]&&(_0x468517[_0x483f8d(0x811,0x6f3)](_0x7c5e9f[_0x5a925e(0x92a,0x845)]),_0x51a65a[_0x5a925e(0x74f,0x813)](_0x35e7f2[_0x5a925e(0x944,0x944)]));_0x35e7f2?.[_0x5a925e(0x5ab,0x571)+'h']&&(_0x468517['push'](_0x5a925e(0x97a,0xb90)+_0x5a925e(0x9cb,0x8b7)),_0x51a65a['push'](_0x35e7f2['projectPat'+'h']));if(_0x35e7f2?.[_0x483f8d(0x665,0x7de)+'ents']){if(_0x7c5e9f[_0x5a925e(0x759,0x68d)](_0x5a925e(0x568,0x504),_0x483f8d(0x58e,0x41e)))_0x468517['push'](_0x483f8d(0x77f,0x578)+_0x483f8d(0x7b7,0x6c7)+'LL\x20OR\x20(par'+'ent_id\x20IS\x20'+'NULL\x20AND\x20c'+_0x5a925e(0x7a7,0x6b8)+_0x483f8d(0x7b6,0x92d));else{const _0x5beac6=this[_0x483f8d(0x340,0x61e)](_0x483f8d(0x60b,0x601),_0x483f8d(0xa67,0x842)+_0x483f8d(0xaa6,0x860)+_0x483f8d(0x898,0x7fa)+_0x5a925e(0x6ba,0x4a0))[_0x5a925e(0x6c7,0x763)](_0x3d4828);return _0x5beac6?.[_0x483f8d(0x8a5,0x8b5)]??null;}}const _0x22962c=_0x468517[_0x5a925e(0x952,0x7cb)]>0x0?_0x483f8d(0x478,0x3ee)+_0x468517[_0x483f8d(0x939,0x89c)](_0x7c5e9f[_0x483f8d(0x51d,0x701)]):'',_0x53b6e1=_0x35e7f2?.[_0x483f8d(0x5cd,0x819)]??0x32,_0x4e952f=_0x35e7f2?.[_0x5a925e(0x8a3,0x84f)]??0x0,_0x943f81=this['db'][_0x483f8d(0xb6b,0x8d5)](_0x483f8d(0x5ac,0x640)+_0x483f8d(0x7c7,0x898)+_0x5a925e(0x486,0x50b)+_0x22962c+('\x20ORDER\x20BY\x20'+_0x5a925e(0x70d,0x54f)+_0x483f8d(0x544,0x5d0)+_0x483f8d(0x5b5,0x79b)+'\x20?'))['all'](..._0x51a65a,_0x53b6e1,_0x4e952f);return this[_0x483f8d(0x50f,0x4a5)+_0x483f8d(0x89e,0x697)](_0x943f81);}[_0x43e245(0x212,0x445)+'S'](_0x3108b7,_0x58cc0b=0xa,_0x456a03){function _0x402e3f(_0x523b5d,_0x29d1d1){return _0x43e245(_0x523b5d-0xff,_0x29d1d1);}const _0x5a06ab={'bBLnC':function(_0x3e839e,_0x4543eb){return _0x3e839e!==_0x4543eb;},'EbALZ':'DELETE\x20FRO'+_0x402e3f(0x5c8,0x80f)+'\x20WHERE\x20id\x20'+_0x3b7c2d(0x378,0x1da),'nQxcH':_0x402e3f(0x4b9,0x2b2)+_0x402e3f(0x77b,0x4ea),'ODwlB':_0x3b7c2d(-0x78,-0x4e)+_0x3b7c2d(0x2d0,0x9a),'uPmzj':_0x3b7c2d(0x28f,0x147)+_0x402e3f(0x5ea,0x656),'ukepw':function(_0x7f2b46,_0x32ce52){return _0x7f2b46===_0x32ce52;},'YGKyJ':_0x3b7c2d(0x498,0x734),'bITYV':_0x402e3f(0x2f8,0x29),'eazIH':_0x402e3f(0x2ed,0x43a)},_0x3269a8=[_0x5a06ab[_0x3b7c2d(0x3ab,0x15b)],'(m.parent_'+_0x402e3f(0x3c1,0x3fc)+_0x402e3f(0x33b,0x4f2)+_0x3b7c2d(0x4f8,0x31f)+_0x3b7c2d(0x49b,0x508)+_0x3b7c2d(0x55,0x12a)+_0x402e3f(0x502,0x565)+_0x3b7c2d(0x96,0xf4)],_0x592845=[_0x3108b7];_0x456a03?.[_0x3b7c2d(0xb6,-0x23)+'h']&&(_0x3269a8['push'](_0x5a06ab[_0x402e3f(0x6e9,0x844)]),_0x592845[_0x3b7c2d(0x25a,0x451)](_0x456a03[_0x3b7c2d(0xb6,-0x12f)+'h']));if(_0x456a03?.['category']){if('wEYjZ'===_0x3b7c2d(0xf1,-0xf3))_0x3269a8['push'](_0x5a06ab[_0x3b7c2d(0x35,0xa3)]),_0x592845[_0x3b7c2d(0x25a,0x6a)](_0x456a03[_0x3b7c2d(0xfd,0x24a)]);else{let _0x244dbf=0x0;for(const _0x55a411 of _0x2f18bd){this[_0x402e3f(0x7b0,0x7c5)+'ne'](_0x55a411);const _0xd79e31=this[_0x402e3f(0x32e,0x348)](_0x55a411);_0x5a06ab['bBLnC'](_0xd79e31,null)&&this['db'][_0x3b7c2d(0x43c,0x37f)](_0x402e3f(0x54d,0x78d)+'M\x20memory_f'+_0x3b7c2d(0x420,0x294)+_0x402e3f(0x3e2,0x35d))['run'](_0xd79e31);const _0x51d14a=this['db']['prepare'](_0x5a06ab[_0x402e3f(0x47a,0x1d2)])[_0x3b7c2d(0xf,-0x23e)](_0x55a411);_0x244dbf+=_0x51d14a[_0x3b7c2d(0x436,0x61e)];}return _0x244dbf;}}_0x456a03?.[_0x402e3f(0x79a,0x75e)]&&(_0x5a06ab[_0x3b7c2d(0x6d,0x2c7)]('pdcFC',_0x5a06ab[_0x3b7c2d(-0x4a,-0x18d)])?_0x5efe32[_0x3b7c2d(0x25a,0x22)](_0x3b7c2d(0xdf,0x1b1)+_0x402e3f(0x579,0x651)+_0x3b7c2d(0x2ab,0x4ed)+_0x402e3f(0x62f,0x61e)+_0x3b7c2d(0x280,0xeb)+_0x402e3f(0x5fd,0x6d1)+_0x3b7c2d(0x494,0x31b)):(_0x3269a8[_0x402e3f(0x5a5,0x45f)](_0x5a06ab[_0x402e3f(0x4bd,0x30d)]),_0x592845[_0x3b7c2d(0x25a,0x508)](_0x456a03[_0x3b7c2d(0x44f,0x196)])));_0x592845[_0x3b7c2d(0x25a,0x21e)](_0x58cc0b);const _0xcf4f1a=_0x402e3f(0x657,0x898)+_0x3b7c2d(-0x49,-0x190)+_0x3b7c2d(0x11c,-0xa8)+'M\x20memory_f'+_0x402e3f(0x67e,0x898)+_0x3b7c2d(0x282,0x381)+_0x402e3f(0x414,0x1c6)+'N\x20m.rowid\x20'+'=\x20fts.rowi'+'d\x0a\x20\x20\x20\x20\x20\x20WH'+_0x402e3f(0x435,0x33c)+_0x3269a8[_0x402e3f(0x74e,0x6db)](_0x5a06ab[_0x402e3f(0x6f3,0x769)])+('\x0a\x20\x20\x20\x20\x20\x20ORD'+'ER\x20BY\x20fts.'+_0x3b7c2d(-0x28,0x1ad)+_0x3b7c2d(0xd5,0x25e)),_0x593f01=this['db'][_0x402e3f(0x787,0x52d)](_0xcf4f1a)[_0x3b7c2d(0x281,0x3d3)](..._0x592845);function _0x3b7c2d(_0x1e3f81,_0x4fa377){return _0x43e245(_0x1e3f81- -0x24c,_0x4fa377);}const _0x44f743=this['rowsToMemo'+_0x402e3f(0x549,0x828)](_0x593f01);return _0x593f01[_0x3b7c2d(-0x35,-0x10d)]((_0xd40437,_0x3edd75)=>({'memory':_0x44f743[_0x3edd75],'score':Math['min'](0x1,Math[_0x402e3f(0x388,0x534)](0x0,0x1+_0xd40437[_0x3b7c2d(0x429,0x64f)]/0xa)),'matchType':_0x402e3f(0x75a,0x6f6)}));}[_0x43e245(0x232,0x1ee)+_0x43e245(0x5eb,0x528)](_0xf20e3e,_0x5a016f=0xa,_0x4cf543=0.5,_0x16e74b){function _0x41448d(_0x22dc7e,_0x2e4bd9){return _0x16cd78(_0x22dc7e,_0x2e4bd9-0x398);}const _0x2f054f={'PGpan':function(_0x50a5d3,_0x32a5fb,_0x445127){return _0x50a5d3(_0x32a5fb,_0x445127);},'yejbi':'vector_sea'+_0x252e46(0x251,0x1d5)+'t','rtumC':'SELECT\x20*\x20F'+_0x41448d(0x569,0x840)+_0x41448d(0x655,0x77f)+_0x252e46(0x1a5,0x103)+_0x41448d(0x418,0x398)+_0x41448d(0x92e,0x919)+_0x41448d(0x7c7,0x6e2)+_0x252e46(0xc8,-0xad)+_0x41448d(0x77e,0x725)+_0x252e46(-0x3a7,-0x185)+'R\x20(parent_'+_0x252e46(0x4a,0x1eb)+'\x20AND\x20chunk'+'_total\x20IS\x20'+_0x252e46(-0x201,0x9e)+_0x252e46(-0x27b,0x47),'kwXoo':_0x252e46(0x21b,0x6a)+_0x252e46(0x1b,0x2c2)+_0x252e46(0x28d,0x201)+_0x252e46(-0xfe,0x103)+_0x41448d(0x200,0x398)+_0x41448d(0x55e,0x782)+_0x41448d(0x602,0x822)+'OT\x20NULL\x20OR'+'\x20(parent_i'+_0x41448d(0xaa2,0x925)+_0x41448d(0x56f,0x4b6)+_0x252e46(0x583,0x38c)+_0x252e46(0x3f,0x65)+_0x252e46(0x147,0x57)},_0x28c609=_0x16e74b?this[_0x41448d(0x57f,0x5c6)](_0x2f054f['yejbi'],_0x2f054f[_0x41448d(0x2e6,0x3ad)])[_0x252e46(0x183,0x144)](_0x16e74b):this[_0x252e46(0x16d,0x48)]('vector_sea'+_0x252e46(-0x4f,0x18),_0x2f054f[_0x252e46(0x7a,0x17f)])[_0x252e46(0x34c,0x144)](),_0x592332=_0x28c609['map'](_0x8e7594=>{function _0x2e0ddc(_0x2e9f92,_0x3399d6){return _0x252e46(_0x2e9f92,_0x3399d6-0x30d);}const _0x32d36b=bufferToFloat32Array(_0x8e7594[_0x7a1eba(0x3f4,0x6cd)]),_0x1ad918=_0x2f054f[_0x7a1eba(0x56d,0x5c4)](_0x21f5b7,_0xf20e3e,Array['from'](_0x32d36b));function _0x7a1eba(_0x298ecf,_0x1494c6){return _0x252e46(_0x298ecf,_0x1494c6-0x4d0);}return{'row':_0x8e7594,'similarity':_0x1ad918};})[_0x252e46(0x19d,0x387)](_0x3776e7=>_0x3776e7[_0x41448d(0x3fe,0x6cf)]>=_0x4cf543)['sort']((_0x517fbb,_0x2cf355)=>_0x2cf355[_0x252e46(-0x14d,0x151)]-_0x517fbb[_0x252e46(0x243,0x151)])[_0x41448d(0x302,0x469)](0x0,_0x5a016f),_0x479465=this[_0x252e46(-0x67,-0x131)+'ries'](_0x592332['map'](_0x57888d=>_0x57888d['row']));function _0x252e46(_0x1200bd,_0x2d4b82){return _0x16cd78(_0x1200bd,_0x2d4b82- -0x1e6);}return _0x592332[_0x252e46(-0xc4,-0x172)]((_0x3128c4,_0x2aebb7)=>({'memory':_0x479465[_0x2aebb7],'score':_0x3128c4[_0x252e46(-0x4,0x151)],'matchType':_0x41448d(0x1ef,0x49f)}));}[_0x16cd78(0x15e,0x1d1)](_0x9a3fa1){const _0x189647={'aaDip':function(_0xc78113,_0x4f9d42){return _0xc78113<_0x4f9d42;}},_0x5142a4=_0x9a3fa1[_0x53f19c(0x96d,0x9a4)]??0xa,_0x5c0766=[];function _0x53f19c(_0x253f35,_0x15cc9b){return _0x43e245(_0x15cc9b-0x3d8,_0x253f35);}try{const _0x2c32fa=this[_0x1b8156(0x2e2,0x358)+'S'](_0x9a3fa1[_0x53f19c(0x872,0x717)],_0x5142a4,{'projectPath':_0x9a3fa1[_0x1b8156(0x3d2,0x385)+'h'],'category':_0x9a3fa1[_0x1b8156(0x419,0x1f4)],'tier':_0x9a3fa1[_0x1b8156(0x76b,0x7a7)]});_0x5c0766[_0x53f19c(0x8b5,0x87e)](..._0x2c32fa);}catch{}const _0x266d64=_0x5c0766[_0x53f19c(0xcb1,0xae8)](_0x3102a3=>{function _0x3b91a3(_0x18099e,_0xae603d){return _0x53f19c(_0x18099e,_0xae603d- -0x3e5);}if(_0x9a3fa1[_0x203a43(0x59d,0x584)]&&_0x189647[_0x203a43(0x371,0x1ae)](_0x3102a3['score'],_0x9a3fa1['minScore']))return![];function _0x203a43(_0x2a6e54,_0x314afb){return _0x53f19c(_0x314afb,_0x2a6e54- -0x30f);}return!![];});function _0x1b8156(_0x1c2037,_0x1ee779){return _0x43e245(_0x1c2037-0xd0,_0x1ee779);}const _0x4eabf7=new Set();return _0x266d64[_0x53f19c(0x94c,0xae8)](_0x47305d=>{if(_0x4eabf7[_0x399bf6(0x2bc,0x67)](_0x47305d[_0x5ec032(0x8fb,0x6ce)]['id']))return![];_0x4eabf7[_0x5ec032(0x5f9,0x432)](_0x47305d[_0x399bf6(0x4e0,0x29b)]['id']);function _0x399bf6(_0x459ad0,_0x45071a){return _0x53f19c(_0x45071a,_0x459ad0- -0x4c6);}function _0x5ec032(_0x25b364,_0x5ad000){return _0x53f19c(_0x5ad000,_0x25b364- -0xab);}return!![];})[_0x53f19c(0x7cd,0x64c)](0x0,_0x5142a4);}[_0x16cd78(0x1d4,0x34f)+'n'](_0x51f85e,_0x2d5f86,_0x52f6e0){function _0xb338e(_0x459e72,_0x2d7d88){return _0x16cd78(_0x2d7d88,_0x459e72-0x3fe);}const _0x5169aa={'PeQBO':_0x2af948(0x8d1,0x9af)+'on'};function _0x2af948(_0x50fee7,_0x59c4fc){return _0x16cd78(_0x59c4fc,_0x50fee7-0x584);}this[_0x2af948(0x7b2,0x9ee)](_0x5169aa[_0xb338e(0x5b0,0x815)],_0x2af948(0x844,0x5bd)+'ERT\x20OR\x20REP'+'LACE\x20INTO\x20'+_0x2af948(0x5e0,0x476)+'session_id'+_0xb338e(0x57f,0x4d1)+_0xb338e(0x4f9,0x39f)+_0xb338e(0x480,0x2ab)+_0x2af948(0xa59,0xab5)+'_at)\x0a\x20\x20\x20\x20\x20'+'\x20VALUES\x20(?'+',\x20?,\x20?,\x20da'+'tetime(\x27no'+_0x2af948(0x679,0x689))[_0xb338e(0x4b6,0x3b5)](_0x51f85e,_0x2d5f86,_0x52f6e0);}[_0x43e245(0x4f4,0x22c)](_0x24a9e5){function _0x138668(_0x563ec5,_0x31b2ae){return _0x16cd78(_0x31b2ae,_0x563ec5-0x19a);}function _0x343c40(_0x551e1d,_0x148366){return _0x16cd78(_0x551e1d,_0x148366- -0x189);}const _0x408455={'qazMx':_0x343c40(0x2d8,0xc7)+'ROM\x20sessio'+_0x343c40(0x4e5,0x2bc)+'ession_id\x20'+_0x343c40(0x27c,0x298)},_0x408298=this[_0x343c40(-0x236,0xa5)](_0x138668(0x2db,0x55c)+'n',_0x408455['qazMx'])[_0x138668(0x415,0x50c)](_0x24a9e5);if(!_0x408298)return null;return{'sessionId':_0x408298[_0x138668(0x59b,0x3ca)],'projectPath':_0x408298[_0x343c40(0x10d,0x3a5)+'th'],'messageCount':_0x408298[_0x343c40(0xa2,0x19f)+'unt'],'processedAt':_0x408298[_0x138668(0x5ca,0x57a)+'at']};}[_0x43e245(0x4f4,0x3a1)+_0x16cd78(0x35d,0x301)](_0x241b69){function _0x237b97(_0xb6d972,_0x569823){return _0x43e245(_0x569823- -0x3ad,_0xb6d972);}const _0x2203f9={'oUCOJ':'SELECT\x20COU'+_0x27bd7a(0x57c,0x772)+'nt\x20FROM\x20se'+_0x27bd7a(0x26c,0x543)+_0x237b97(0x372,0x384)+_0x27bd7a(0x749,0x66b),'wLJjn':_0x27bd7a(0x653,0x73c)+_0x237b97(0x45d,0x17e)+_0x237b97(0x168,0x1fa)+_0x27bd7a(0x281,0x3f8)};function _0x27bd7a(_0x6c601e,_0x5b1e10){return _0x43e245(_0x6c601e-0x51,_0x5b1e10);}if(_0x241b69){const _0x1c48e8=this[_0x27bd7a(0x422,0x4a5)](_0x237b97(-0x1b6,-0x74)+_0x237b97(-0x2a3,-0xb7)+'ct',_0x2203f9['oUCOJ'])[_0x237b97(0x33e,0x71)](_0x241b69);return _0x1c48e8?.[_0x27bd7a(0x2fe,0x235)]??0x0;}const _0x2f7b2c=this[_0x27bd7a(0x422,0x4cc)]('count_sess'+_0x27bd7a(0x293,0x571),_0x2203f9[_0x237b97(-0x4e,0x28d)])['get']();return _0x2f7b2c?.['cnt']??0x0;}[_0x16cd78(0x378,0x16e)](){function _0x53cf91(_0x4e1f7a,_0x59408c){return _0x43e245(_0x59408c-0xb0,_0x4e1f7a);}const _0x133ae9={'uPcoM':_0x3e30a1(0x638,0x8b8)+_0x53cf91(0x76c,0x4fa),'RQAqW':_0x53cf91(0x290,0x3e9)+_0x3e30a1(0x77e,0x787),'fDzJY':_0x3e30a1(0x809,0x9b3)+_0x3e30a1(0x634,0x8dc)+_0x3e30a1(0x74b,0x952)+'sessions','oMiGU':function(_0x21d56c,_0x34828b){return _0x21d56c(_0x34828b);},'dZEOd':_0x53cf91(0x2b5,0x2d2)+'ounts'},_0x4f3bff=this[_0x3e30a1(0x6d5,0x782)](_0x133ae9[_0x53cf91(0x394,0x41f)],'SELECT\x20COU'+'NT(*)\x20as\x20c'+_0x3e30a1(0xc13,0x952)+'memories')[_0x53cf91(0x761,0x4ce)]()[_0x53cf91(0x543,0x4d5)];function _0x3e30a1(_0x2f9164,_0x4f177d){return _0x43e245(_0x4f177d-0x3b1,_0x2f9164);}const _0x1dec06=this[_0x3e30a1(0x7d5,0x782)](_0x133ae9[_0x53cf91(0x350,0x427)],_0x133ae9[_0x53cf91(0x34d,0x43f)])['get']()[_0x3e30a1(0x612,0x7d6)];let _0x108203=0x0;try{_0x108203=_0x133ae9[_0x3e30a1(0xa75,0x806)](statSync,this[_0x53cf91(0x2e7,0x41a)])[_0x3e30a1(0x935,0x705)];}catch{}const _0x5452b3=this['stmt'](_0x133ae9[_0x3e30a1(0x555,0x692)],_0x53cf91(0x6d4,0x47c)+'egory,\x20COU'+_0x53cf91(0x7fa,0x5db)+'ount\x20FROM\x20'+_0x3e30a1(0xabe,0x97e)+_0x3e30a1(0x91e,0xaf1)+_0x53cf91(0x4ef,0x41e))[_0x53cf91(0x2f4,0x57d)](),_0x2145db={};for(const _0x26cdcc of _0x5452b3){_0x2145db[_0x26cdcc[_0x3e30a1(0x46d,0x6fa)]]=_0x26cdcc[_0x53cf91(0x2a0,0x4d5)];}return{'totalMemories':_0x4f3bff,'totalSessions':_0x1dec06,'dbSizeBytes':_0x108203,'categoryCounts':_0x2145db};}[_0x43e245(0x704,0x6f1)+_0x43e245(0x1b9,0x279)](){function _0x39ca7c(_0x4e95f0,_0x70c58c){return _0x43e245(_0x70c58c-0xb,_0x4e95f0);}function _0x16ba52(_0x2565fc,_0x5c8675){return _0x43e245(_0x5c8675- -0xb8,_0x2565fc);}const _0x2a3d1d={'rqFTg':_0x39ca7c(0x3c7,0x1e5)+'k','HyPDg':function(_0x4afff0,_0x3659ca){return _0x4afff0>_0x3659ca;}};try{const _0x4add90=this['db']['pragma'](_0x2a3d1d['rqFTg']);return _0x2a3d1d[_0x16ba52(0x52b,0x324)](_0x4add90['length'],0x0)&&_0x4add90[0x0][_0x39ca7c(0xbc,0x1e5)+'k']==='ok';}catch{if(_0x39ca7c(0x3e6,0x35d)!==_0x16ba52(0x38,0x29a))_0x24fa1b=_0x46f239[_0x39ca7c(0x631,0x452)](_0x739a8f[_0x39ca7c(0x5f,0x1b6)+_0x39ca7c(0x47e,0x377)]??'[]');else return![];}}[_0x43e245(0x1c6,-0x3c)](){function _0x3332a9(_0x89d17b,_0x251e04){return _0x43e245(_0x251e04- -0x2c7,_0x89d17b);}function _0x46b015(_0x508789,_0x2cb039){return _0x43e245(_0x2cb039-0x215,_0x508789);}const _0x38b196={'hGXwl':_0x46b015(0x6b8,0x3f1)};this['db'][_0x3332a9(-0x43,0x25d)](_0x38b196[_0x3332a9(-0x33e,-0x11b)]);}[_0x43e245(0x5a6,0x58b)](){function _0x4374a5(_0xde293c,_0x1efc4d){return _0x43e245(_0x1efc4d- -0x20d,_0xde293c);}this['stmts']['clear'](),this['db'][_0x4374a5(0x208,0x399)]();}[_0x16cd78(0x2df,0x57b)+_0x16cd78(0x41f,0x37e)](_0x64d48a,_0x4a6784,_0x2fafec){const _0x2e7562={'AkVzB':_0x1e28c4(0x566,0x570)+_0x1e28c4(0x6dd,0x412)};function _0x567a22(_0x4c301f,_0x1005f2){return _0x43e245(_0x4c301f-0x23e,_0x1005f2);}function _0x1e28c4(_0x40d4e2,_0x5c06a2){return _0x43e245(_0x5c06a2-0x13c,_0x40d4e2);}const _0x3c48dc=new Date()[_0x1e28c4(0x2f4,0x3f7)+'g']();this[_0x567a22(0x60f,0x6cf)](_0x2e7562[_0x1e28c4(0x402,0x6bc)],_0x1e28c4(0x80a,0x59f)+_0x567a22(0x73b,0x90c)+_0x1e28c4(0x490,0x6b2)+_0x567a22(0x716,0x937)+_0x1e28c4(0x8a4,0x77f)+_0x1e28c4(0x6a8,0x58f)+_0x1e28c4(0x78b,0x576)+_0x1e28c4(0x34b,0x4e7)+'_state)\x0a\x20\x20'+'\x20\x20\x20\x20VALUES'+_0x567a22(0x452,0x52c)+_0x567a22(0x5e4,0x4f1))['run'](_0x64d48a,_0x4a6784,_0x3c48dc,_0x2fafec);}[_0x43e245(0x5d2,0x5d3)+'tus'](_0x4cdc8c){function _0x4ad862(_0x4bb8c1,_0x4f9de1){return _0x43e245(_0x4bb8c1- -0x90,_0x4f9de1);}function _0x4f92a8(_0x5a24a9,_0x23b3c1){return _0x43e245(_0x5a24a9- -0x3e,_0x23b3c1);}const _0x550a4e={'heIWm':_0x4ad862(0x5df,0x82b)+_0x4ad862(0x246,0x14b),'cQvlD':_0x4ad862(0x179,0x208)+_0x4f92a8(0x20e,0x20a)+'nced_at,\x20s'+_0x4f92a8(0x5df,0x57f)+_0x4f92a8(0x58c,0x669)+'status\x20WHE'+_0x4ad862(0x626,0x5c0)+_0x4ad862(0x66b,0x946)},_0x553777=this['stmt'](_0x550a4e[_0x4ad862(0x243,0x404)],_0x550a4e[_0x4ad862(0x261,0x3fd)])[_0x4ad862(0x38e,0x5ab)](_0x4cdc8c);if(!_0x553777)return null;return{'remoteId':_0x553777[_0x4f92a8(0x4d8,0x45f)],'syncedAt':_0x553777[_0x4f92a8(0x448,0x1c6)],'syncState':_0x553777[_0x4ad862(0x63e,0x660)]};}[_0x16cd78(0x29b,0x202)+_0x16cd78(0x5ee,0x4ee)+'es'](_0x4fe44b=0x2710){function _0x4e4063(_0x105fd9,_0x336cd9){return _0x43e245(_0x105fd9- -0x2ce,_0x336cd9);}function _0x28e37d(_0x319250,_0x925d36){return _0x43e245(_0x925d36- -0x2cc,_0x319250);}const _0x1fe916=this['db'][_0x4e4063(0x3ba,0x1ab)]('\x0a\x20\x20\x20\x20\x20\x20SEL'+_0x28e37d(0x315,0x44d)+_0x28e37d(-0x163,-0xd4)+_0x28e37d(-0xa,-0xe5)+_0x4e4063(-0xd2,-0x393)+_0x28e37d(0x261,0xf)+_0x4e4063(0x318,0x2ad)+_0x4e4063(0xcb,-0x8a)+_0x4e4063(0xee,0xdc)+'ct_path,\x20m'+'.session_i'+_0x28e37d(0x3a0,0xfc)+_0x4e4063(0x38,0xb9)+_0x28e37d(0x306,0x28b)+_0x28e37d(0x20d,0x1cb)+_0x4e4063(0x3e4,0x2a1)+_0x4e4063(0x3e1,0x242)+_0x4e4063(0x82,0x148)+_0x4e4063(0x347,0x44f)+'NULL\x20as\x20em'+_0x4e4063(-0x3d,0x75)+'sh,\x0a\x20\x20\x20\x20\x20\x20'+_0x4e4063(-0xec,-0x188)+'arent_id,\x20'+_0x28e37d(0x321,0x463)+_0x4e4063(0x11b,0x298)+_0x4e4063(-0x43,0x129)+'\x20\x20\x20\x20\x20FROM\x20'+_0x4e4063(-0x136,-0x99)+_0x4e4063(0x16d,0x421)+_0x4e4063(0x75,-0x17d)+'c_status\x20s'+_0x28e37d(-0x3d4,-0x11f)+_0x4e4063(-0x126,-0x3f5)+_0x4e4063(0xde,0x274)+'HERE\x20s.syn'+_0x28e37d(-0x135,0x141)+'\x27pending\x27\x20'+_0x4e4063(0x29b,0x2e2)+'state\x20IS\x20N'+_0x4e4063(-0x4f,0x1b0)+_0x4e4063(0x411,0x2c3)+_0x28e37d(0x330,0x3ab)+_0x4e4063(-0x12e,0x146)+_0x4e4063(0x18,0x2bf)+_0x4e4063(0x23d,0x146))[_0x28e37d(0x38f,0x201)](_0x4fe44b);return this[_0x28e37d(-0x2ce,-0x74)+_0x4e4063(0x17c,0xf2)](_0x1fe916);}[_0x16cd78(0x31,0x26f)+_0x43e245(0x720,0x7c2)](_0x2a80dd){const _0x253766={'NtuoZ':'find_by_re'+'mote'};function _0xe8f6e5(_0x1ff49f,_0x9fabe8){return _0x43e245(_0x9fabe8-0x328,_0x1ff49f);}const _0x37c41f=this['stmt'](_0x253766[_0xe8f6e5(0x74e,0x7d4)],_0x9d6a4(0x339,0x2a9)+'ECT\x20m.*\x0a\x20\x20'+_0x9d6a4(0x1c,-0x2ad)+'emories\x20m\x0a'+_0xe8f6e5(0x58a,0x712)+_0x9d6a4(0x303,0x146)+_0x9d6a4(-0xe2,-0x19d)+'id\x20=\x20s.mem'+_0xe8f6e5(0x5f1,0x822)+_0x9d6a4(0x32a,0x23e)+_0xe8f6e5(0x820,0x9e7)+_0xe8f6e5(0xa1f,0x978))[_0xe8f6e5(0x781,0x746)](_0x2a80dd);function _0x9d6a4(_0xa057a8,_0x4a435a){return _0x43e245(_0xa057a8- -0x384,_0x4a435a);}if(!_0x37c41f)return null;return this[_0x9d6a4(-0x91,-0x1f)+'y'](_0x37c41f);}[_0x16cd78(0x165,0x41b)+_0x43e245(0x4b2,0x653)](){function _0x3ee59c(_0x496426,_0x1de9b5){return _0x16cd78(_0x1de9b5,_0x496426-0x3a5);}function _0x3ec302(_0x420d48,_0x5713b1){return _0x16cd78(_0x420d48,_0x5713b1-0x5bb);}const _0x510dae={'jvGJv':'synced_cou'+'nt'},_0x1d5714=this[_0x3ee59c(0x5d3,0x628)](_0x510dae[_0x3ec302(0x7b9,0x70c)],_0x3ee59c(0x804,0x79e)+'NT(*)\x20as\x20c'+_0x3ee59c(0x7a3,0x601)+'sync_statu'+_0x3ee59c(0x87f,0x8de)+'nc_state\x20='+'\x20\x27synced\x27')[_0x3ec302(0x5ee,0x836)]();return _0x1d5714['count'];}[_0x43e245(0x605,0x712)+_0x16cd78(-0x51,0x264)](){const _0x56950a=this[_0x3cc72e(0x491,0x6a1)]('last_synce'+'d',_0x3cc72e(0x584,0x5f7)+_0x3cc72e(0xa6a,0x9a5)+_0x3cc72e(0x8ad,0x9e1)+'synced\x20FRO'+_0x3fe15d(0x26d,0x3dd)+'tus\x20WHERE\x20'+_0x3fe15d(0x5f3,0x497)+'\x20=\x20\x27synced'+'\x27')[_0x3cc72e(0x797,0x6ee)]();function _0x3cc72e(_0x4093a7,_0x4b42a1){return _0x43e245(_0x4b42a1-0x2d0,_0x4093a7);}function _0x3fe15d(_0x49b455,_0x21e567){return _0x43e245(_0x21e567- -0x237,_0x49b455);}return _0x56950a[_0x3fe15d(-0xc4,-0x11)+'d'];}[_0x43e245(0x578,0x314)+'tory'](_0x52030b,_0x1991a0,_0xcc136c=_0x16cd78(0x285,0x104),_0x566717){function _0x5b4d79(_0x2305f1,_0x35103d){return _0x43e245(_0x35103d- -0x367,_0x2305f1);}function _0x540102(_0x26eb79,_0x1fbe6c){return _0x43e245(_0x26eb79- -0x2f8,_0x1fbe6c);}this['stmt']('add_sync_h'+'istory',_0x5b4d79(0xdf,0xfc)+_0x540102(0x3a,-0x68)+_0x5b4d79(0x2a8,0x2e5)+_0x5b4d79(-0x2c,0x23c)+_0x5b4d79(0x214,0x2a0)+'_id,\x20statu'+_0x540102(-0x68,0x1fc)+_0x5b4d79(-0x37e,-0x1d9)+_0x5b4d79(-0x149,-0x120)+_0x540102(0x20b,0xc)+'\x20\x20')[_0x5b4d79(0xf2,-0x10c)](_0x52030b,_0x1991a0,_0xcc136c,_0x566717??null);}['getSyncHis'+_0x43e245(0x323,0x45f)](_0x25205a){function _0x232ac9(_0x35f72a,_0x1ceb2f){return _0x16cd78(_0x1ceb2f,_0x35f72a-0x169);}const _0x54d300={'NZsHx':_0x46acb4(0x505,0x78f)+_0x232ac9(0x518,0x4cf)+_0x232ac9(0x48b,0x251)+'RE\x20memory_'+_0x232ac9(0x4d7,0x6a9)+_0x232ac9(0x5b3,0x590)+_0x232ac9(0x539,0x626)+'?'},_0xe6d68b=_0x25205a?.[_0x232ac9(0x592,0x314)]??0x64;function _0x46acb4(_0x191aae,_0x2e4697){return _0x16cd78(_0x2e4697,_0x191aae-0x2b5);}if(_0x25205a?.[_0x46acb4(0x782,0x65a)]){const _0x4e410c=this['stmt'](_0x46acb4(0x824,0x56e)+_0x232ac9(0x46f,0x530)+'ry',_0x54d300[_0x46acb4(0x394,0x409)])[_0x46acb4(0x5df,0x68a)](_0x25205a['memoryId'],_0xe6d68b);return _0x4e410c[_0x232ac9(0x1dd,0x40d)](mapSyncHistoryRow);}const _0x10911c=this['stmt'](_0x232ac9(0x6d8,0x51b)+'ry_all',_0x232ac9(0x3b9,0x679)+_0x46acb4(0x664,0x529)+_0x46acb4(0x415,0x3b3)+_0x232ac9(0x5b3,0x364)+'ESC\x20LIMIT\x20'+'?')[_0x46acb4(0x5df,0x30f)](_0xe6d68b);return _0x10911c[_0x232ac9(0x1dd,0x3d9)](mapSyncHistoryRow);}['addTombsto'+'ne'](_0x52f5b8){function _0xb482eb(_0x2a7edd,_0x25a26e){return _0x43e245(_0x25a26e- -0x2a1,_0x2a7edd);}function _0x1a6318(_0x3e3821,_0x13bd21){return _0x43e245(_0x13bd21- -0xbf,_0x3e3821);}this[_0x1a6318(0x93,0x312)]('add_tombst'+'one',_0x1a6318(0xfe,0x3a4)+_0xb482eb(0x34b,0x25c)+_0xb482eb(0x5f,0x2d5)+_0xb482eb(-0xa0,0xc8)+_0x1a6318(-0x66,0x20e)+'d,\x20deleted'+'_at,\x20synce'+'d)\x0a\x20\x20\x20\x20\x20\x20V'+_0xb482eb(0x3c6,0x25e)+_0xb482eb(0xa4,0x24e)+_0x1a6318(0x53a,0x53a)+_0x1a6318(0x596,0x44c))[_0xb482eb(-0x1c0,-0x46)](_0x52f5b8);}['getTombsto'+_0x43e245(0x1c8,0x300)](_0x5de3bc=0x3e8){const _0x50fb44=this[_0x2087f2(0x3e2,0x3d3)](_0x2087f2(0x474,0x2b7)+_0x2087f2(0x2ad,0x537),_0x2087f2(0x5de,0x3f5)+_0x329172(0x616,0x438)+_0x2087f2(0x454,0x245)+_0x2087f2(0x4cd,0x22a)+_0x329172(0x2bb,0x463)+_0x2087f2(0x47c,0x31e))[_0x329172(0x521,0x32f)](_0x5de3bc);function _0x329172(_0x47a8a4,_0x32fb79){return _0x43e245(_0x32fb79- -0x19e,_0x47a8a4);}function _0x2087f2(_0x2b3bdb,_0x1b7276){return _0x43e245(_0x1b7276-0x2,_0x2b3bdb);}return _0x50fb44[_0x329172(0x15,0x79)](_0x593b68=>({'memoryId':_0x593b68[_0x2087f2(0x172,0x387)],'deletedAt':_0x593b68[_0x2087f2(0x57b,0x3d6)],'synced':_0x593b68['synced']===0x1}));}['getUnsynce'+_0x43e245(0x482,0x1c0)+'s'](){function _0x23c9f0(_0x393b7b,_0x2813c1){return _0x43e245(_0x2813c1-0x44,_0x393b7b);}function _0x3df383(_0x5ba18c,_0x5089d9){return _0x43e245(_0x5ba18c- -0x1bd,_0x5089d9);}const _0x51f460={'EgHBg':'SELECT\x20mem'+_0x3df383(0x21,0x281)+'leted_at\x20F'+_0x23c9f0(0x7c8,0x61a)+_0x23c9f0(0x800,0x725)+_0x23c9f0(0x132,0x22a)+'0'},_0x55ae21=this[_0x23c9f0(0x196,0x415)](_0x3df383(0x2fc,0x4f)+_0x23c9f0(0x2f0,0x261),_0x51f460['EgHBg'])['all']();return _0x55ae21['map'](_0x4de5c7=>({'memoryId':_0x4de5c7[_0x23c9f0(0x3cf,0x3c9)],'deletedAt':_0x4de5c7[_0x23c9f0(0x684,0x418)]}));}[_0x16cd78(0x3a0,0x54d)+_0x16cd78(-0xce,0xeb)](_0x150cab){function _0x242e01(_0xf0ffc3,_0x46a6a7){return _0x16cd78(_0xf0ffc3,_0x46a6a7-0x259);}function _0x2dd4c6(_0x3574ca,_0x24de54){return _0x16cd78(_0x3574ca,_0x24de54-0x280);}const _0x4acab2={'TXLAB':_0x2dd4c6(0x4b7,0x701)+'tone_synce'+'d'};this['stmt'](_0x4acab2[_0x242e01(0x60e,0x3b7)],_0x2dd4c6(0x99e,0x7e6)+_0x2dd4c6(0x66b,0x44a)+'T\x20synced\x20='+_0x242e01(0x38c,0x4ae)+_0x242e01(0x36c,0x2c7)+'\x20?')[_0x242e01(0x555,0x311)](_0x150cab);}[_0x16cd78(-0x7,0x1ff)+_0x16cd78(0x6ab,0x554)](_0x5328e3,_0x212a6f){function _0x1e5cad(_0x23600b,_0x4b521c){return _0x16cd78(_0x23600b,_0x4b521c- -0xa0);}function _0x63ca3(_0x175853,_0x168e8c){return _0x16cd78(_0x168e8c,_0x175853-0x13a);}this['stmt'](_0x63ca3(0x430,0x17b)+_0x63ca3(0x378,0x2d4),_0x1e5cad(0x5a4,0x2e0)+_0x63ca3(0x4d6,0x7a0)+_0x63ca3(0x41b,0x3c2)+_0x63ca3(0x2af,0x1af)+'HERE\x20id\x20=\x20'+'?')[_0x63ca3(0x1f2,0x28a)](_0x212a6f,_0x5328e3);}[_0x43e245(0x34a,0x3ba)+_0x16cd78(-0x9c,0x13)](_0x13a77a,_0x194f7d){function _0xa055f8(_0x51ec4b,_0x34d567){return _0x43e245(_0x34d567- -0x2fe,_0x51ec4b);}function _0x436211(_0x453f75,_0x5acb0e){return _0x43e245(_0x453f75-0x15f,_0x5acb0e);}this[_0x436211(0x530,0x5e8)](_0xa055f8(0x327,0x2bf)+'k',_0x436211(0x5c2,0x3e9)+_0x436211(0x65c,0x6b7)+_0xa055f8(0x4c8,0x278)+_0xa055f8(0x49a,0x1c4)+_0x436211(0x2fe,0x3b6)+'y_id,\x20cloc'+_0x436211(0x439,0x1f5)+_0xa055f8(0x1bf,-0xc8)+_0xa055f8(0x1ed,0x156)+_0x436211(0x456,0x2e7)+'\x20datetime('+'\x27now\x27))\x0a\x20\x20'+'\x20\x20')[_0x436211(0x3ba,0x42c)](_0x13a77a,JSON['stringify'](_0x194f7d));}[_0x16cd78(0x17c,0x29)+_0x43e245(0x25d,-0x79)](_0x1471ff){function _0x13f1f5(_0x1b376a,_0x2a11ce){return _0x43e245(_0x1b376a-0x7,_0x2a11ce);}const _0x36371e=this[_0x13f1f5(0x3d8,0x47b)](_0x13f1f5(0x6ea,0x818),_0x5dc1d2(0x3da,0x2a2)+_0x5dc1d2(0x179,0xad)+_0x13f1f5(0x72e,0x712)+'_clocks\x20WH'+_0x13f1f5(0x1f2,0x41e)+_0x5dc1d2(0x1aa,0xb3))['get'](_0x1471ff);if(!_0x36371e)return null;function _0x5dc1d2(_0x3b4d0e,_0x1b8124){return _0x43e245(_0x3b4d0e- -0x145,_0x1b8124);}return JSON[_0x5dc1d2(0x302,0x35b)](_0x36371e[_0x13f1f5(0x496,0x4d1)+'e']);}[_0x16cd78(0x15c,0x304)+_0x43e245(0x206,0x392)](){function _0x594a81(_0x5e3057,_0x1dda05){return _0x43e245(_0x1dda05-0x255,_0x5e3057);}const _0x5f03f3={'bfpnx':_0x594a81(0x968,0x80d)+'s'},_0x37121a=this['stmt'](_0x5f03f3[_0x615f1c(0x8c0,0x91f)],_0x594a81(0x664,0x8ed)+'ory_id,\x20cl'+_0x594a81(0x887,0x8ee)+_0x615f1c(0x427,0x69a)+_0x615f1c(0x5c9,0x49e))['all']();function _0x615f1c(_0x3f950a,_0x51ed62){return _0x43e245(_0x51ed62-0x1d6,_0x3f950a);}return _0x37121a[_0x615f1c(0x2bd,0x3ed)](_0x5e17c1=>({'memoryId':_0x5e17c1[_0x594a81(0x8ab,0x5da)],'clockState':JSON['parse'](_0x5e17c1[_0x615f1c(0x8ce,0x665)+'e'])}));}[_0x43e245(0x3a2,0x1c7)+'ing'](_0x168633,_0x12e189){const _0x3267da={'LuXqV':'float32','KEMhS':function(_0x443f39,_0x230161){return _0x443f39(_0x230161);},'IxIDs':function(_0x2a6f8d,_0xc6895f){return _0x2a6f8d===_0xc6895f;},'lKwqM':function(_0x25c983,_0x29d843){return _0x25c983(_0x29d843);},'Hziie':_0x3ac231(0x58f,0x318)+_0xf7dc33(0x387,0x377)+'embedding\x20'+_0x3ac231(0x279,0x7c)+_0x3ac231(0x767,0xa13),'ZlHRW':_0x3ac231(0x6d3,0x8ab)+'ding_meta'};function _0x3ac231(_0x235b79,_0x266557){return _0x43e245(_0x235b79-0x6c,_0x266557);}let _0x384069,_0x1340cd=null;if(this['quantizati'+'onLevel']===_0x3267da[_0xf7dc33(0x317,0x14b)])_0x384069=_0x3267da['KEMhS'](quantizeToFloat32,_0x12e189);else{if(_0x3267da[_0xf7dc33(0x31,-0x153)](this[_0xf7dc33(0x35b,0x53b)+_0xf7dc33(0x370,0x1f9)],_0xf7dc33(0x508,0x670))){const _0x2f1551=_0x3267da[_0xf7dc33(0x438,0x5be)](quantizeToInt8,_0x12e189);_0x384069=_0x2f1551['buffer'],_0x1340cd=_0x2f1551[_0xf7dc33(0x1b,-0x29f)];}else _0x384069=float32ArrayToBuffer(new Float32Array(_0x12e189));}function _0xf7dc33(_0x5c8f32,_0x56921e){return _0x43e245(_0x5c8f32- -0x1b8,_0x56921e);}this['stmt']('save_embed'+_0x3ac231(0x4f7,0x2a5),_0x3267da['Hziie'])[_0x3ac231(0x2c7,0x44c)](_0x384069,_0x168633),this[_0x3ac231(0x43d,0x6bd)](_0x3267da[_0xf7dc33(0x401,0x62a)],_0x3ac231(0x4cf,0x6c9)+'ERT\x20OR\x20REP'+_0xf7dc33(0x3be,0x256)+_0x3ac231(0x4f0,0x261)+_0x3ac231(0x436,0x5f2)+_0xf7dc33(0x35,0x1e9)+_0x3ac231(0x4cc,0x6db)+'ion_level,'+_0xf7dc33(0x2a8,0xee)+_0xf7dc33(0x318,0x3ae)+_0x3ac231(0x4c0,0x796)+'UES\x20(?,\x20?,'+_0xf7dc33(0x1ee,0xa))[_0xf7dc33(0xa3,-0x237)](_0x168633,this[_0x3ac231(0x57f,0x5b6)+_0x3ac231(0x594,0x7b4)],_0x1340cd?JSON[_0x3ac231(0x50d,0x263)](_0x1340cd):null);}[_0x43e245(0x33e,0x5ee)+'ng'](_0x4bd65d){const _0x4fe5fd={'iDvLh':_0x421d1e(0x79d,0x735)+_0x3ff8a7(0xbc,0x193)+_0x3ff8a7(0x18d,0xd8)+_0x3ff8a7(-0x29,-0x94)+_0x3ff8a7(-0x6b,-0x143)+'?','eUuSa':_0x3ff8a7(-0x23,0x284),'hVvIm':_0x3ff8a7(0x1c4,0x379)+_0x421d1e(0x428,0x5e7)+_0x3ff8a7(0x288,0x11d)+'\x20WHERE\x20id\x20'+_0x3ff8a7(0x27a,0x218),'FwjVm':_0x421d1e(0x6e3,0x4e6),'hpXcH':function(_0x42b6e4,_0x141831){return _0x42b6e4===_0x141831;},'qQxBj':_0x3ff8a7(0x11,-0x132),'oqPKD':function(_0x3d9fda,_0x2bcb1a){return _0x3d9fda(_0x2bcb1a);},'ByesW':function(_0x30a202,_0x30671c){return _0x30a202===_0x30671c;},'qXuKx':_0x421d1e(0x93a,0xaa8),'xUTHI':function(_0x3637ac,_0x524076){return _0x3637ac!==_0x524076;}},_0x5b5185=this['stmt'](_0x4fe5fd[_0x421d1e(0x999,0x9f3)],_0x4fe5fd['hVvIm'])[_0x421d1e(0x698,0x519)](_0x4bd65d);if(!_0x5b5185?.[_0x421d1e(0x800,0x814)])return null;function _0x421d1e(_0x1e740c,_0x3e5bdd){return _0x43e245(_0x1e740c-0x27a,_0x3e5bdd);}const _0x5ae6e2=this[_0x3ff8a7(-0x144,0x25)](_0x421d1e(0x52e,0x50c)+'ing_meta',_0x3ff8a7(0x170,0x282)+'ntization_'+_0x421d1e(0x7b7,0x68b)+_0x421d1e(0x628,0x673)+'stats\x20FROM'+'\x20embedding'+_0x3ff8a7(-0x202,-0x193)+'WHERE\x20memo'+_0x3ff8a7(0x94,-0x1ee))['get'](_0x4bd65d);function _0x3ff8a7(_0xff670b,_0x52c3e4){return _0x43e245(_0x52c3e4- -0x3ac,_0xff670b);}const _0x4d0f92=_0x5ae6e2?.[_0x421d1e(0x78d,0x634)+_0x421d1e(0x574,0x800)]??_0x4fe5fd[_0x421d1e(0x7bf,0x6e3)];if(_0x4fe5fd[_0x421d1e(0x5d9,0x7f6)](_0x4d0f92,_0x4fe5fd[_0x421d1e(0x5fb,0x7b2)]))return _0x4fe5fd['oqPKD'](dequantizeFromFloat32,_0x5b5185['embedding']);else{if(_0x4fe5fd['ByesW'](_0x4d0f92,_0x4fe5fd[_0x3ff8a7(-0x8d,-0x142)])){if(_0x4fe5fd['xUTHI'](_0x3ff8a7(-0x1ad,-0x15e),_0x3ff8a7(0xb5,-0x6c))){if(!_0x5ae6e2?.[_0x421d1e(0x78d,0xa57)+_0x3ff8a7(-0x2a2,-0xbe)])throw new Error(_0x421d1e(0x719,0x734)+'ding\x20missi'+_0x421d1e(0x4d6,0x613)+_0x421d1e(0x72b,0x595)+_0x4bd65d);const _0xbc833c=JSON['parse'](_0x5ae6e2[_0x3ff8a7(0x43f,0x167)+_0x3ff8a7(0xff,-0xbe)]);return dequantizeFromInt8(_0x5b5185[_0x421d1e(0x800,0x90b)],_0xbc833c);}else this[_0x3ff8a7(0x28a,0x25)](_0x421d1e(0x713,0x4c7)+_0x3ff8a7(-0x25d,0x35),KeLlns[_0x421d1e(0x58c,0x6dd)])[_0x3ff8a7(0x170,-0x151)](_0x571791,_0x10e5e9);}else return Array[_0x3ff8a7(0x277,0x58)](bufferToFloat32Array(_0x5b5185[_0x3ff8a7(0x363,0x1da)]));}}[_0x16cd78(-0x82,0x169)+_0x16cd78(0x230,0x44b)](_0x56d27c){function _0x42fd4e(_0x39420b,_0x24a8b0){return _0x16cd78(_0x39420b,_0x24a8b0-0xeb);}function _0x1aae75(_0x77bd41,_0x1e5db0){return _0x16cd78(_0x1e5db0,_0x77bd41-0x202);}const _0x560a38=this['db']['prepare'](_0x42fd4e(0x370,0x605)+_0x42fd4e(0x273,0x502)+_0x42fd4e(0x4ec,0x610)+_0x42fd4e(0x50d,0x632)+_0x42fd4e(0x353,0xee)+'(last_acce'+_0x42fd4e(0x53c,0x391)+_0x1aae75(0x295,0x64)+_0x42fd4e(0x425,0x618)+_0x42fd4e(0x426,0x4fd)+_0x42fd4e(0x503,0x2df)+_0x42fd4e(0x157,0x12c)+_0x1aae75(0x323,0x160)+_0x42fd4e(0x682,0x669)+_0x42fd4e(0x886,0x631)+_0x42fd4e(0x627,0x372)+_0x42fd4e(0x30b,0x495)+'kill\x27\x0a\x20\x20\x20\x20'+'\x20\x20ORDER\x20BY'+_0x1aae75(0x2b9,0x46c)+'last_acces'+'sed_at,\x20up'+_0x1aae75(0x5ce,0x689)+'ASC\x0a\x20\x20\x20\x20')[_0x42fd4e(0x6e3,0x415)]('-'+_0x56d27c+_0x1aae75(0x3f7,0x245));return this[_0x1aae75(0x2b7,0x313)+_0x1aae75(0x4a9,0x1e2)](_0x560a38);}['getMemorie'+_0x43e245(0x361,0x20c)+'bedding'](_0xa3c481=0x64){function _0x19ed5d(_0x47bc37,_0x988a3b){return _0x16cd78(_0x988a3b,_0x47bc37-0x96);}function _0x4dce3b(_0x210fcf,_0x1f02ef){return _0x16cd78(_0x210fcf,_0x1f02ef- -0x193);}const _0x1701a2=this['db']['prepare']('\x0a\x20\x20\x20\x20\x20\x20SEL'+_0x19ed5d(0x4ad,0x673)+'\x20memories\x0a'+_0x19ed5d(0x5dd,0x3f9)+_0x19ed5d(0x2d5,0x15d)+_0x19ed5d(0x383,0x20d)+_0x4dce3b(-0x62,-0x13c)+_0x4dce3b(-0x131,0x10f)+_0x19ed5d(0x4cd,0x236)+_0x4dce3b(0x1a4,0x313)+_0x4dce3b(0x332,0x32d))[_0x4dce3b(0x45d,0x197)](_0xa3c481);return this[_0x4dce3b(-0x213,-0xde)+_0x19ed5d(0x33d,0x3f7)](_0x1701a2);}[_0x43e245(0x26b,0x145)+_0x16cd78(0x32f,0x2a7)](_0x1ebafd){const _0x2fd3cd={'YPzqR':'sync_histo'+_0x4903c0(0x519,0x7a2)+'ry','SFLoY':_0x4903c0(0x78c,0x66a),'mzGwn':'DELETE\x20FRO'+_0x1d8569(0x21e,0x22e)+'ts\x20WHERE\x20r'+'owid\x20=\x20?','OrPbv':'DELETE\x20FRO'+_0x1d8569(0x2ca,0x46f)+_0x1d8569(0x3a1,0x370)+'=\x20?','vVjgY':function(_0x2c82b8){return _0x2c82b8();}};if(_0x1ebafd['length']===0x0)return 0x0;function _0x4903c0(_0x4c399e,_0x561a53){return _0x43e245(_0x561a53-0x2f9,_0x4c399e);}const _0x5aeec0=this['db'][_0x1d8569(0x26c,0x186)+'n'](()=>{let _0x540ab5=0x0;for(const _0x5a5c33 of _0x1ebafd){if(_0x2fd3cd['SFLoY']!==_0x2fd3cd[_0x14183d(0x7c,0x1c)]){const _0x4d6b8d=this[_0x314fd4(0x5ce,0x355)](aWPwSN[_0x314fd4(0x4fa,0x445)],_0x314fd4(0x122,0x377)+_0x314fd4(0x2c7,0x4d6)+_0x14183d(0x34e,0x1c1)+_0x314fd4(0x7fb,0x63a)+'id\x20=\x20?\x20ORD'+'ER\x20BY\x20id\x20D'+_0x14183d(0x3fc,0x6b6)+'?')['all'](_0x14eefa['memoryId'],_0x3b5b0);return _0x4d6b8d[_0x314fd4(-0xc4,0x19b)](_0x8e72b1);}else{this[_0x314fd4(0x83a,0x635)+'ne'](_0x5a5c33);const _0x3715f3=this[_0x314fd4(0x46e,0x1b3)](_0x5a5c33);_0x3715f3!==null&&this['db']['prepare'](_0x2fd3cd['mzGwn'])[_0x14183d(0xe4,-0xb1)](_0x3715f3);const _0x336a9c=this['db'][_0x314fd4(0x753,0x60c)](_0x2fd3cd[_0x314fd4(0x559,0x595)])[_0x314fd4(0x447,0x1df)](_0x5a5c33);_0x540ab5+=_0x336a9c[_0x14183d(0x50b,0x581)];}}function _0x314fd4(_0x2cace5,_0xe414b2){return _0x4903c0(_0x2cace5,_0xe414b2- -0x375);}function _0x14183d(_0x1f4929,_0x3234d5){return _0x4903c0(_0x3234d5,_0x1f4929- -0x470);}return _0x540ab5;});function _0x1d8569(_0x4464e5,_0x5eabdc){return _0x43e245(_0x4464e5- -0x1ff,_0x5eabdc);}return _0x2fd3cd[_0x1d8569(0xd6,0xe9)](_0x5aeec0);}[_0x43e245(0x59d,0x82f)+'ount'](_0x2a2b6f,_0x20ce4b){function _0x3b7dc5(_0xce79b7,_0x5097a9){return _0x43e245(_0xce79b7- -0xee,_0x5097a9);}const _0x3ae7e6={'DfYHs':_0x3b7dc5(0x397,0x430)+'O\x20emotion_'+_0x3d2ff3(0x62c,0x653)+_0x3d2ff3(0x4ee,0x717)+'\x20created_a'+_0x3b7dc5(0x1fc,0x28b)+'\x20VALUES\x20(?'+',\x20?,\x20?,\x200)','QxTLp':_0x3d2ff3(0xa22,0x85e)+_0x3b7dc5(0x545,0x4a3)+'LL','izsHB':'SELECT\x20COU'+'NT(*)\x20as\x20c'+'ount\x20FROM\x20'+_0x3b7dc5(0x63c,0x579)+_0x3b7dc5(0x161,0x439)+_0x3d2ff3(0x975,0x95d)+'LL','pAqpO':_0x3b7dc5(0x514,0x383)+_0x3b7dc5(0x43d,0x35e)+_0x3d2ff3(0x989,0x8cb)+_0x3b7dc5(0x3b7,0x3ce)},_0x188fc0=_0x20ce4b?_0x3ae7e6[_0x3b7dc5(0x5b3,0x70a)]:'';function _0x3d2ff3(_0x3612d9,_0x597f3c){return _0x43e245(_0x597f3c-0x32a,_0x3612d9);}if(_0x2a2b6f)return this['db'][_0x3b7dc5(0x59a,0x7f1)](_0x3d2ff3(0xa84,0x92c)+_0x3b7dc5(0x43d,0x635)+_0x3b7dc5(0x4b3,0x6ee)+'memories\x20W'+_0x3b7dc5(0x521,0x7df)+_0x3b7dc5(0x3ff,0x261)+'?'+_0x188fc0)['get'](_0x2a2b6f)[_0x3b7dc5(0x337,0x1c5)];if(_0x20ce4b){if('LMHId'!==_0x3d2ff3(0x886,0x9d5))return this['db'][_0x3b7dc5(0x59a,0x4da)](_0x3ae7e6[_0x3b7dc5(0x537,0x401)])[_0x3b7dc5(0x330,0x5ba)]()[_0x3b7dc5(0x337,0x295)];else{const _0x2512b3=_0x54ca72(),_0x135ffb=new _0x548e8f()[_0x3d2ff3(0x514,0x5e5)+'g']();this[_0x3b7dc5(0x2e3,0x591)]('insert_emo'+_0x3d2ff3(0x54d,0x71c)+'r',_0x3ae7e6['DfYHs'])[_0x3d2ff3(0x54e,0x585)](_0x2512b3,_0x5abd80,_0x135ffb);}}return this[_0x3b7dc5(0x2e3,0x189)](_0x3b7dc5(0x419,0x39e)+_0x3d2ff3(0x785,0x774),_0x3ae7e6[_0x3b7dc5(0x322,0xcf)])[_0x3b7dc5(0x330,0x53b)]()['count'];}[_0x43e245(0x67b,0x707)+'Values'](){const _0x5af90a={'ocybW':_0x5983d3(0x8f0,0x7e7)+_0x195fa3(0x68b,0x740)+'category\x20='+_0x195fa3(0x773,0x622)+_0x195fa3(0x441,0x4ad)+'category\x20='+_0x5983d3(0x83f,0x9e0)+'ce\x27','bRnGa':_0x195fa3(0x66f,0x74d)+_0x195fa3(0x68b,0x425)+_0x5983d3(0x690,0x3ce)+'mantic\x27\x20WH'+_0x5983d3(0x7b4,0x78f)+_0x5983d3(0xa5b,0x971)+_0x5983d3(0x756,0x51e)};function _0x5983d3(_0xb1bf9,_0x2462af){return _0x16cd78(_0x2462af,_0xb1bf9-0x570);}const _0xa908a2=this['db']['prepare'](_0x5af90a[_0x5983d3(0x580,0x7ee)])['run'](),_0x351e2d=this['db'][_0x195fa3(0x7d4,0x704)](_0x5af90a[_0x195fa3(0x351,0x35a)])[_0x5983d3(0x628,0x604)]();function _0x195fa3(_0x2c358e,_0x2e69fc){return _0x16cd78(_0x2e69fc,_0x2c358e-0x2ef);}return{'categoriesUpdated':_0xa908a2['changes'],'tiersUpdated':_0x351e2d[_0x5983d3(0xa4f,0x906)]};}[_0x43e245(0x2b8,0x27f)+_0x16cd78(-0x8c,0x238)+'ks'](_0x2cb293,_0x4605c5){const _0x128db6={'LLUVa':function(_0x13e279,_0x27c4a5){return _0x13e279<_0x27c4a5;},'rDPIC':function(_0x5569f3,_0x339757){return _0x5569f3===_0x339757;},'aSHmh':'WhvYs','lTzwZ':function(_0x558a){return _0x558a();},'aXlGK':function(_0x495029,_0x3e42a2){return _0x495029===_0x3e42a2;},'DBEQa':function(_0x2f94c6){return _0x2f94c6();},'SKhxq':_0x2cd8b9(0x147,0x9b)+_0x2ffebc(0x602,0x883),'wkZQB':_0x2cd8b9(0x3da,0x444),'rbyDK':'INSERT\x20INT'+'O\x20memory_t'+_0x2ffebc(0x8d3,0xa13)+'y_id,\x20tag)'+'\x20VALUES\x20(?'+_0x2cd8b9(0x1d9,0x458),'HUgRN':function(_0x401b1f){return _0x401b1f();}};function _0x2cd8b9(_0x10af86,_0x254b18){return _0x43e245(_0x10af86- -0x2a5,_0x254b18);}if(_0x128db6['aXlGK'](_0x4605c5['length'],0x0))return this['createMemo'+'ry'](_0x2cb293)['id'];const _0x1b50dc=_0x128db6[_0x2ffebc(0xc0b,0x92f)](randomUUID),_0x7cd1ed=new Date()[_0x2cd8b9(0x16,-0x24a)+'g'](),_0x5d29b7=_0x4605c5['length'],_0x29a3b1=this[_0x2cd8b9(0x12c,0x2b3)](_0x128db6[_0x2cd8b9(0x22c,0x4b6)],_0x2cd8b9(0x1be,0xaa)+_0x2ffebc(0x97c,0x8ff)+_0x2cd8b9(0x11c,0x229)+_0x2cd8b9(0x71,-0x7a)+',\x20category'+_0x2cd8b9(0x306,0x44b)+_0x2ffebc(0xac7,0x930)+',\x20session_'+'id,\x20create'+_0x2cd8b9(-0x86,0x4c)+_0x2ffebc(0x6f2,0x93e)+_0x2ffebc(0xa07,0x89b)+_0x2ffebc(0x28b,0x4a9)+',\x20chunk_to'+_0x2cd8b9(0x23d,0x3a0)+_0x2ffebc(0x239,0x493)+',\x20?,\x20?,\x20?,'+_0x2cd8b9(0x3a5,0x15e)+_0x2ffebc(0x46c,0x628)+_0x2cd8b9(0xc0,-0x107));function _0x2ffebc(_0x33ff3e,_0x19c40d){return _0x43e245(_0x19c40d-0x2d9,_0x33ff3e);}const _0x31f944=this['stmt'](_0x128db6[_0x2ffebc(0x67c,0x783)],_0x128db6['rbyDK']),_0x305ae4=this[_0x2cd8b9(0x12c,0x216)](_0x2ffebc(0x758,0x840),_0x2cd8b9(0x1e0,0x3fb)+'O\x20memory_f'+_0x2cd8b9(0x203,0x103)+'\x20content)\x20'+_0x2ffebc(0x713,0x5be)+'\x20?)'),_0x1e45c9=this['db'][_0x2ffebc(0x916,0x744)+'n'](()=>{const _0x7c5c01=_0x2cb293[_0x45e383(0x8da,0xb24)]??[];function _0x45e383(_0x15b2b5,_0x1ff3f3){return _0x2cd8b9(_0x15b2b5-0x452,_0x1ff3f3);}_0x29a3b1[_0x45e383(0x408,0x69e)](_0x1b50dc,_0x2cb293[_0x45e383(0x7c5,0x5b4)],_0x2cb293[_0x101ff3(0x752,0x913)],_0x2cb293[_0x101ff3(0xaa4,0xc1a)],_0x2cb293[_0x45e383(0x4af,0x6f0)+'h']??null,_0x2cb293['sessionId']??null,_0x7cd1ed,_0x7cd1ed,null,null,_0x5d29b7);function _0x101ff3(_0x59ca50,_0x4a0877){return _0x2cd8b9(_0x59ca50-0x6ae,_0x4a0877);}for(const _0x44a58e of _0x7c5c01){_0x31f944['run'](_0x1b50dc,_0x44a58e);}const _0x3b3fb0=this[_0x101ff3(0x638,0x8ca)](_0x1b50dc);_0x305ae4['run'](_0x3b3fb0,_0x2cb293['content']);for(let _0xc11612=0x0;_0x128db6[_0x101ff3(0xa9c,0xb1e)](_0xc11612,_0x4605c5['length']);_0xc11612++){if(_0x128db6[_0x101ff3(0xa5d,0xca3)](_0x128db6['aSHmh'],_0x128db6[_0x45e383(0x369,0x568)])){const _0x58975d=_0x128db6[_0x45e383(0x469,0x2eb)](randomUUID),_0x52a047=_0x4605c5[_0xc11612],_0x1900cc=_0x52a047['tags']??[];_0x29a3b1[_0x101ff3(0x664,0x8c9)](_0x58975d,_0x52a047[_0x45e383(0x7c5,0x669)],_0x52a047[_0x45e383(0x4f6,0x3c1)],_0x52a047[_0x45e383(0x848,0x572)],_0x52a047['projectPat'+'h']??null,_0x52a047[_0x45e383(0x40b,0x642)]??null,_0x7cd1ed,_0x7cd1ed,_0x1b50dc,_0xc11612,_0x5d29b7);for(const _0x278db3 of _0x1900cc){_0x31f944[_0x101ff3(0x664,0x8c7)](_0x58975d,_0x278db3);}const _0x54a255=this['getRowId'](_0x58975d);_0x305ae4[_0x45e383(0x408,0x444)](_0x54a255,_0x52a047[_0x101ff3(0xa21,0xce0)]);}else{const _0x4fd8c6=_0x27eab3(_0xda6e16[_0x45e383(0x733,0x5c4)]),_0x212a69=_0x434bf4(_0x4f0720,_0x41f6a6[_0x45e383(0x5b1,0x6f1)](_0x4fd8c6));return{'row':_0x33000b,'similarity':_0x212a69};}}});return _0x128db6[_0x2cd8b9(0x44f,0x5ef)](_0x1e45c9),_0x1b50dc;}['getChildCh'+_0x43e245(0x1f4,0x1d4)](_0x24acea){function _0x4bf1ad(_0x2bcab8,_0x1e7781){return _0x43e245(_0x2bcab8- -0x2b3,_0x1e7781);}function _0x5e5105(_0x13c172,_0x3f0d65){return _0x43e245(_0x13c172-0x31c,_0x3f0d65);}const _0x28d6ed=this['db'][_0x4bf1ad(0x3d5,0x45b)](_0x5e5105(0x70f,0x7d8)+_0x5e5105(0x967,0x866)+_0x4bf1ad(0x3fd,0x1ee)+_0x4bf1ad(0x210,0x469)+_0x5e5105(0x836,0x968)+_0x5e5105(0x737,0x8c6)+_0x4bf1ad(0x279,-0x58))['all'](_0x24acea);return this[_0x5e5105(0x574,0x7d3)+'ries'](_0x28d6ed);}['getParentM'+_0x43e245(0x294,0x431)](_0x49b869){const _0x7dd9f7={'YgaeZ':_0x1a2b98(0x1c6,0x2a1),'qMkoa':_0x1a2b98(0x23e,0x64)+'ROM\x20memori'+_0x1a2b98(-0x13f,0x84)+'d\x20=\x20?'},_0x3551e2=this[_0x2b4733(-0xa7,0x28)](_0x7dd9f7[_0x1a2b98(0x3bf,0x12f)],_0x7dd9f7[_0x1a2b98(0x1d9,0x34)])['get'](_0x49b869);function _0x1a2b98(_0x18cdb0,_0x10508f){return _0x43e245(_0x10508f- -0x38f,_0x18cdb0);}if(!_0x3551e2?.[_0x2b4733(0x2f8,0xce)])return null;function _0x2b4733(_0x5f119a,_0x2b2150){return _0x43e245(_0x2b2150- -0x3a9,_0x5f119a);}return this[_0x2b4733(-0x12b,0x51)](_0x3551e2['parent_id']);}[_0x43e245(0x2fd,0x54)+_0x43e245(0x6ef,0x7bc)+_0x16cd78(0x284,0x25d)](_0xe612ed,_0x53fe3a,_0xc36ebf){function _0x4146b0(_0xc17f76,_0xbd26d){return _0x43e245(_0xbd26d-0x155,_0xc17f76);}const _0x5d8093={'rHmQy':function(_0x1808df){return _0x1808df();},'XdvVw':_0x5d5b0a(0x541,0x2aa)+'s','CQvRM':_0x5d5b0a(0x621,0x3bb)+_0x5d5b0a(0x37d,0x5c9)+'ock_state\x20'+_0x4146b0(0x3d2,0x619)+_0x5d5b0a(0x251,-0x44),'IFvHi':'DELETE\x20FRO'+_0x5d5b0a(0x3a6,0x172)+_0x5d5b0a(0x5f5,0x7a9)+'owid\x20=\x20?','MAqCy':function(_0x3c7d22,_0x3bb2e9){return _0x3c7d22!==_0x3bb2e9;},'DSifZ':_0x5d5b0a(0x2f9,0x134),'XpSle':_0x5d5b0a(0x3d7,0x3bc)+_0x5d5b0a(0x452,0x285)+_0x4146b0(0x343,0x3e2)+'ent_id\x20=\x20?','EtQiY':_0x4146b0(0x7c8,0x63b)+_0x5d5b0a(0x533,0x5c3),'XlrkI':function(_0x3b4db3,_0x5a526a){return _0x3b4db3===_0x5a526a;},'ukxru':'insert_mem'+_0x4146b0(0x476,0x6ff),'mFgcK':_0x4146b0(0x79b,0x5da)+_0x5d5b0a(0x1eb,0xb5)+_0x5d5b0a(0x6c3,0x409)+_0x4146b0(0x787,0x7ae)+_0x5d5b0a(0x143,0x14f)+_0x5d5b0a(0x407,0x66c),'pBsVs':_0x4146b0(0x859,0x5da)+_0x4146b0(0x7d7,0x7a7)+_0x4146b0(0x425,0x5fd)+_0x4146b0(0x1fd,0x3ea)+_0x5d5b0a(0x26e,-0x39)+_0x5d5b0a(0x35e,0x339),'YFpUP':'VYlqM','hcKEj':function(_0x4f0c61,_0x3fe8f8){return _0x4f0c61??_0x3fe8f8;},'wtccX':'IenVk'},_0x3eaaa4=this['db']['transactio'+'n'](()=>{const _0x218f41=this['db']['prepare'](_0x4f3cc9(0x5d7,0x65c)+_0x100992(0x2b0,0x2ed)+_0x4f3cc9(0x875,0x96a)+_0x100992(0x4ee,0x756)+_0x100992(0x5e8,0x4a5))[_0x100992(0x4f1,0x465)](_0xe612ed);function _0x4f3cc9(_0x2cd605,_0x2cb399){return _0x4146b0(_0x2cd605,_0x2cb399-0x15e);}for(const _0x372889 of _0x218f41){this[_0x4f3cc9(0x89d,0x964)+'ne'](_0x372889['id']);const _0x8263d5=this[_0x4f3cc9(0x59f,0x4e2)](_0x372889['id']);_0x8263d5!==null&&this[_0x4f3cc9(0x955,0x684)](_0x100992(0x394,0x1fb),_0x5d8093[_0x100992(0x28c,0x240)])[_0x4f3cc9(0x5cc,0x50e)](_0x8263d5);}this[_0x4f3cc9(0xa3e,0x964)+'ne'](_0xe612ed);const _0x582713=this['getRowId'](_0xe612ed);function _0x100992(_0x226846,_0x582261){return _0x4146b0(_0x582261,_0x226846- -0x131);}_0x5d8093[_0x100992(0x62d,0x6f2)](_0x582713,null)&&this[_0x4f3cc9(0x6fe,0x684)](_0x5d8093[_0x4f3cc9(0x82c,0x6e1)],_0x5d8093[_0x100992(0x28c,0x114)])[_0x4f3cc9(0x2c8,0x50e)](_0x582713);this['db'][_0x4f3cc9(0x9d4,0x93b)](_0x5d8093['XpSle'])[_0x4f3cc9(0x67b,0x50e)](_0xe612ed),this[_0x100992(0x3f5,0x214)](_0x5d8093['EtQiY'],_0x4f3cc9(0x4b5,0x701)+'M\x20memories'+'\x20WHERE\x20id\x20'+_0x100992(0x5e8,0x420))['run'](_0xe612ed);const _0x33cf4c=randomUUID(),_0x3f9efc=new Date()['toISOStrin'+'g'](),_0x24ca1d=_0x5d8093[_0x100992(0x3b0,0x4bb)](_0xc36ebf['length'],0x0)?undefined:_0xc36ebf[_0x4f3cc9(0xa36,0x95c)],_0x3a70e2=this[_0x100992(0x3f5,0x379)](_0x5d8093[_0x100992(0x590,0x7a7)],_0x100992(0x606,0x4f2)+'NSERT\x20INTO'+_0x4f3cc9(0x5ec,0x650)+_0x4f3cc9(0x624,0x69b)+_0x4f3cc9(0x3bc,0x458)+_0x4f3cc9(0x8b3,0x715)+_0x100992(0x6f5,0x8fb)+_0x4f3cc9(0xa87,0x8b6)+_0x4f3cc9(0x772,0x640)+_0x100992(0x23e,0x3a9)+_0x100992(0x68e,0x691)+_0x4f3cc9(0x602,0x5d1)+_0x4f3cc9(0x269,0x545)+_0x4f3cc9(0x751,0x69e)+'total)\x0a\x20\x20\x20'+'\x20\x20\x20\x20\x20VALUE'+_0x4f3cc9(0x744,0x52f)+_0x4f3cc9(0xa87,0x8f0)+_0x100992(0x66e,0x4cf)+_0x100992(0x322,0x421)+'\x20\x20'),_0x34bdc6=this['stmt'](_0x4f3cc9(0x800,0x932),_0x5d8093[_0x4f3cc9(0x284,0x514)]),_0x5566b3=this[_0x4f3cc9(0x680,0x684)](_0x100992(0x58b,0x2f7),_0x5d8093[_0x100992(0x65f,0x876)]),_0x71c19b=_0x53fe3a[_0x4f3cc9(0xc82,0x9e0)]??[];_0x3a70e2[_0x4f3cc9(0x698,0x50e)](_0x33cf4c,_0x53fe3a['content'],_0x53fe3a[_0x4f3cc9(0x46d,0x5fc)],_0x53fe3a[_0x100992(0x6bf,0x4af)],_0x53fe3a['projectPat'+'h']??null,_0x53fe3a['sessionId']??null,_0x3f9efc,_0x3f9efc,null,null,_0x24ca1d??null);for(const _0x181f54 of _0x71c19b){_0x34bdc6['run'](_0x33cf4c,_0x181f54);}const _0x4d4beb=this[_0x100992(0x253,0x4a4)](_0x33cf4c);_0x5566b3[_0x4f3cc9(0x2a9,0x50e)](_0x4d4beb,_0x53fe3a[_0x100992(0x63c,0x5d6)]);for(let _0x52cde8=0x0;_0x52cde8<_0xc36ebf[_0x4f3cc9(0xac6,0x95c)];_0x52cde8++){if(_0x100992(0x711,0x8e1)===_0x5d8093[_0x4f3cc9(0x6da,0x673)]){const _0x5a785d=randomUUID(),_0x32d6cc=_0xc36ebf[_0x52cde8],_0x3c5b29=_0x32d6cc[_0x4f3cc9(0x77a,0x9e0)]??[];_0x3a70e2[_0x100992(0x27f,0x380)](_0x5a785d,_0x32d6cc[_0x4f3cc9(0x82b,0x8cb)],_0x32d6cc[_0x100992(0x36d,0x108)],_0x32d6cc[_0x4f3cc9(0xac2,0x94e)],_0x32d6cc[_0x4f3cc9(0x3e7,0x5b5)+'h']??null,_0x32d6cc[_0x100992(0x282,0x540)]??null,_0x3f9efc,_0x3f9efc,_0x33cf4c,_0x52cde8,_0x5d8093[_0x100992(0x51d,0x64a)](_0x24ca1d,null));for(const _0x4290e4 of _0x3c5b29){if(_0x100992(0x29a,0x58)===_0x5d8093[_0x4f3cc9(0x35c,0x61e)]){const _0x17bc0c=_0x5d8093[_0x4f3cc9(0x62c,0x6a8)](_0x50b314),_0xcca1de=new _0x57fc0e()['toISOStrin'+'g']();return this['stmt'](_0x4f3cc9(0xa30,0x86f)+_0x4f3cc9(0x74d,0x5e4),_0x100992(0x487,0x4b9)+'ERT\x20INTO\x20p'+_0x4f3cc9(0x39f,0x4f8)+_0x4f3cc9(0x64d,0x807)+_0x4f3cc9(0x206,0x448)+_0x4f3cc9(0x702,0x4a0)+_0x100992(0x1f6,0x44d)+_0x4f3cc9(0x92a,0x99e)+_0x100992(0x6b0,0x3fa)+_0x4f3cc9(0x64c,0x46a)+_0x4f3cc9(0x3dc,0x4e9)+_0x100992(0x478,0x608)+_0x4f3cc9(0x302,0x5aa)+_0x4f3cc9(0x7f3,0x8fd)+_0x100992(0x6ed,0x4d8))[_0x100992(0x27f,0x340)](_0x17bc0c,_0x263799['skillMemor'+_0x100992(0x48c,0x3b5)],_0x5aeb50[_0x4f3cc9(0xa97,0x9c9)],_0x40f052[_0x100992(0x326,0x4b2)+'h']??null,_0xcca1de,_0xcca1de),{'id':_0x17bc0c,'skillMemoryId':_0x27e6eb[_0x4f3cc9(0x7a7,0x67a)+'yId'],'skillName':_0x101037[_0x100992(0x73a,0x469)],'level':0x1,'experienceCount':0x0,'successRate':0x0,'actrActivation':0x0,'lastPracticedAt':_0xcca1de,'createdAt':_0xcca1de,'updatedAt':_0xcca1de,'projectPath':_0x4ca5d7[_0x4f3cc9(0x48b,0x5b5)+'h']};}else _0x34bdc6[_0x4f3cc9(0x750,0x50e)](_0x5a785d,_0x4290e4);}const _0x4da8fa=this['getRowId'](_0x5a785d);_0x5566b3[_0x4f3cc9(0x4f0,0x50e)](_0x4da8fa,_0x32d6cc[_0x4f3cc9(0xa68,0x8cb)]);}else{const _0x193f08=this['stmt'](OzIUKO[_0x4f3cc9(0x5d4,0x446)],OzIUKO[_0x100992(0x5fc,0x804)])[_0x4f3cc9(0x53c,0x780)]();return _0x193f08[_0x4f3cc9(0x3f6,0x4ca)](_0x5de59e=>({'memoryId':_0x5de59e[_0x4f3cc9(0x4b8,0x638)],'clockState':_0x26ef77[_0x4f3cc9(0x88b,0x6fa)](_0x5de59e[_0x100992(0x4b3,0x469)+'e'])}));}}return _0x33cf4c;});function _0x5d5b0a(_0xd3ac05,_0x4aad10){return _0x43e245(_0xd3ac05- -0x77,_0x4aad10);}return _0x3eaaa4();}[_0x43e245(0x2ba,0x196)+_0x43e245(0x70d,0x489)](_0x5b843a){const _0x59e402={'EJtXD':_0xcf6680(0x363,0x209)+_0xcf6680(0x332,0x63)+_0x3cd2dd(0x2c1,0x4fb)+_0xcf6680(0x1f8,0x35),'DpFCp':_0x3cd2dd(0x36d,0x1ff),'TzwLE':function(_0x40e9d2,_0x4726a3){return _0x40e9d2+_0x4726a3;}},_0x50c812=this['db'][_0xcf6680(0x380,0x4eb)+'n'](()=>{const _0x454393=this['db']['prepare'](_0x123280(0x5c,0xbf)+'FROM\x20memor'+_0x27d230(0x84d,0x8f7)+_0x123280(0x17d,0x1b6)+_0x27d230(0x8fc,0x804))['all'](_0x5b843a);function _0x27d230(_0x2d8b25,_0x3ca298){return _0x3cd2dd(_0x2d8b25,_0x3ca298-0x3b1);}for(const _0x1fdc65 of _0x454393){this['addTombsto'+'ne'](_0x1fdc65['id']);const _0xa8df60=this['getRowId'](_0x1fdc65['id']);_0xa8df60!==null&&this['stmt']('delete_fts',_0x59e402['EJtXD'])[_0x123280(-0xf2,-0x240)](_0xa8df60);}this[_0x123280(0x364,0x489)+'ne'](_0x5b843a);const _0x3d9bb0=this[_0x123280(-0x11e,-0x336)](_0x5b843a);function _0x123280(_0x2f075a,_0xa15c7a){return _0x3cd2dd(_0xa15c7a,_0x2f075a- -0x1dc);}_0x3d9bb0!==null&&this['stmt'](_0x59e402[_0x123280(0x196,0x2d6)],_0x123280(0x101,0x2f6)+_0x27d230(0x391,0x65d)+_0x27d230(0x81c,0x8ac)+_0x123280(-0x6a,-0xb7))[_0x27d230(0x54a,0x49b)](_0x3d9bb0);const _0x4eac36=this['db'][_0x27d230(0x78b,0x8c8)](_0x123280(0x101,0x36e)+_0x123280(0x17c,0x1ba)+_0x123280(-0xc0,-0x88)+_0x123280(-0x157,-0x32a))[_0x27d230(0x4f7,0x49b)](_0x5b843a),_0x7cca4f=this[_0x27d230(0x8b5,0x611)](_0x123280(0x199,-0x3a)+_0x27d230(0x850,0x7ea),_0x123280(0x101,0x35c)+'M\x20memories'+'\x20WHERE\x20id\x20'+_0x27d230(0x73b,0x804))[_0x27d230(0x44b,0x49b)](_0x5b843a);return _0x59e402[_0x27d230(0x4e6,0x65c)](_0x4eac36[_0x123280(0x335,0x107)],_0x7cca4f[_0x27d230(0xa7a,0x8c2)]);});function _0x3cd2dd(_0x1fd86b,_0x1fb428){return _0x16cd78(_0x1fd86b,_0x1fb428-0x32);}function _0xcf6680(_0x1ec461,_0x5224b9){return _0x16cd78(_0x5224b9,_0x1ec461-0xb8);}return _0x50c812();}[_0x16cd78(0xc1,0x2aa)+_0x43e245(0x5e1,0x601)](_0xee60c8){function _0x4b4ea1(_0x4a18a2,_0x5a50b9){return _0x43e245(_0x4a18a2-0x191,_0x5a50b9);}const _0x3bc6d5=this['db'][_0x17beec(0x44d,0x251)](_0x4b4ea1(0x84e,0xa6e)+_0x17beec(0x1c7,0x412)+_0x17beec(0x350,0x174)+_0x17beec(0x1c1,0x3de)+_0x17beec(-0xa0,0x3a)+_0x4b4ea1(0x457,0x321)+_0x17beec(-0x76,-0x26e)+'.memory_id'+'\x0a\x20\x20\x20\x20\x20\x20WHE'+_0x17beec(0x280,0xde)+_0x17beec(0x449,0x39e)+_0x4b4ea1(0x82d,0x6f6)+_0x17beec(0x229,0x1cb)+_0x17beec(0x337,0x2fe))['all'](_0xee60c8);function _0x17beec(_0xf6d00e,_0x5374aa){return _0x43e245(_0xf6d00e- -0x23b,_0x5374aa);}return this[_0x4b4ea1(0x3e9,0x5f1)+_0x4b4ea1(0x5db,0x6b7)](_0x3bc6d5);}[_0x16cd78(-0xd3,0x8c)](_0x53e594){function _0x3c6490(_0x5543d2,_0x17fcbf){return _0x43e245(_0x17fcbf-0x209,_0x5543d2);}const _0x543e30={'tNzqC':_0x3c6490(0x887,0x5bd)};function _0x38cd65(_0x26de1c,_0x25457){return _0x43e245(_0x26de1c-0x3d8,_0x25457);}const _0x437829=this[_0x38cd65(0x7a9,0x86f)](_0x543e30[_0x38cd65(0x99d,0x8ff)],_0x3c6490(0xa12,0x7fe)+_0x38cd65(0x9eb,0xbb4)+'mories\x20WHE'+_0x38cd65(0x7e9,0x792))[_0x38cd65(0x7f6,0x5e0)](_0x53e594);return _0x437829?.[_0x38cd65(0xa40,0xac1)]??null;}['rowToMemor'+'y'](_0x4274a7){function _0x514ca7(_0x11c1a1,_0x22b603){return _0x43e245(_0x11c1a1- -0x121,_0x22b603);}const _0x4cad44={'ypWIX':_0x3073e7(0x86b,0xb13),'kyeOT':_0x514ca7(0x224,0x361),'SotPO':'DESC','UAxiN':_0x3073e7(0x2cc,0x31c)+_0x514ca7(0x553,0x420)+_0x514ca7(0x1cc,0x2de)+_0x3073e7(0x315,0x49)+_0x3073e7(0x419,0x651),'frvRJ':function(_0x444301,_0x280121){return _0x444301===_0x280121;},'wExmY':_0x514ca7(0x42b,0x6e5),'xmero':function(_0x231bd7,_0x5a1556){return _0x231bd7(_0x5a1556);},'RXOmB':'error_solu'+_0x3073e7(0x6c2,0x6cf),'LRqHE':_0x3073e7(0x3ad,0x5b9)+_0x514ca7(0x1ef,0x4bc),'FRdKm':'convention','IqGnu':_0x3073e7(0x7eb,0x53b),'NJTrE':'working','fSPOn':_0x3073e7(0x46c,0x38d)},_0x4a2eb5=this[_0x3073e7(0x4fb,0x31e)](_0x514ca7(0x422,0x624),_0x4cad44[_0x3073e7(0x303,0x493)])[_0x514ca7(0x3ac,0x30c)](_0x4274a7['id']);function _0x3073e7(_0x277e6c,_0x287795){return _0x43e245(_0x277e6c-0x12a,_0x287795);}let _0x3bdc26=undefined;if(_0x4274a7['embedding'])try{if(_0x4cad44[_0x3073e7(0x662,0x8f6)](_0x514ca7(0x42b,0x448),_0x4cad44[_0x3073e7(0x562,0x39f)]))_0x3bdc26=this['getEmbeddi'+'ng'](_0x4274a7['id'])??undefined;else{const _0x2b7c99=_0x2c29f6?.[_0x514ca7(0x4ab,0x730)]??0x3e8,_0x30315a=_0x2aa41c?.[_0x514ca7(0x1fa,0x2c7)]===_0x4cad44[_0x3073e7(0x52b,0x31e)]?_0x4cad44[_0x3073e7(0x538,0x2da)]:_0x4cad44['SotPO'],_0x3114f4=this['db']['prepare'](_0x514ca7(0x2d2,0x2bf)+_0x3073e7(0x5a5,0x813)+_0x514ca7(0x150,0x2c5)+_0x3073e7(0x82f,0x56e)+_0x514ca7(0x61b,0x50e)+_0x514ca7(0x3f0,0x20b)+'ER\x20BY\x20time'+_0x514ca7(0x1bd,-0x53)+_0x30315a+_0x3073e7(0x44b,0x38e))['all'](_0x40d167,_0x2b7c99);return _0x3114f4[_0x514ca7(0xf6,0x2)](_0xc49550);}}catch{_0x3bdc26=Array[_0x3073e7(0x52e,0x26f)](_0x4cad44[_0x3073e7(0x6fe,0x488)](bufferToFloat32Array,_0x4274a7[_0x3073e7(0x6b0,0x61a)]));}const _0x5bdc26=[_0x4cad44['RXOmB'],_0x514ca7(0x5f3,0x71d)+'rn',_0x514ca7(0x287,0x4c0),_0x3073e7(0x4c4,0x356),_0x4cad44['LRqHE'],_0x4cad44[_0x3073e7(0x643,0x655)],_0x4cad44[_0x514ca7(0x2a3,0x2c)],_0x3073e7(0x64c,0x37d)],_0x45e0aa=[_0x4cad44[_0x514ca7(0x1e7,0x249)],'episodic',_0x4cad44[_0x3073e7(0x33f,0x4ee)]],_0x4048d7=_0x5bdc26[_0x3073e7(0x4ba,0x70c)](_0x4274a7[_0x3073e7(0x473,0x729)])?_0x4274a7[_0x514ca7(0x228,0x2c1)]:_0x514ca7(0x279,0x22d),_0x1501c3=_0x45e0aa[_0x514ca7(0x26f,0x16b)](_0x4274a7[_0x514ca7(0x57a,0x358)])?_0x4274a7[_0x514ca7(0x57a,0x4a7)]:_0x3073e7(0x46c,0x6bc);return{'id':_0x4274a7['id'],'content':_0x4274a7['content'],'category':_0x4048d7,'tier':_0x1501c3,'tags':_0x4a2eb5['map'](_0x5e9b0d=>_0x5e9b0d[_0x3073e7(0x3ef,0x40e)]),'embedding':_0x3bdc26,'projectPath':_0x4274a7[_0x3073e7(0x7fb,0x6a8)+'th']??undefined,'sessionId':_0x4274a7[_0x3073e7(0x6ce,0x873)]??undefined,'createdAt':_0x4274a7['created_at'],'updatedAt':_0x4274a7[_0x3073e7(0x58e,0x2c1)],'accessCount':_0x4274a7[_0x514ca7(0x298,0xf3)+'nt'],'lastAccessedAt':_0x4274a7['last_acces'+_0x514ca7(0x9e,-0x15d)]??undefined,'qualityScore':_0x4274a7['quality_sc'+'ore']??undefined,'memoryType':_0x4274a7[_0x3073e7(0x66a,0x60f)+'e']??undefined,'invalidAt':_0x4274a7[_0x514ca7(0x291,0x3f0)]??undefined,'parentId':_0x4274a7[_0x3073e7(0x5a1,0x329)]??undefined,'chunkIndex':_0x4274a7[_0x514ca7(0x442,0x217)+'x']??undefined,'chunkTotal':_0x4274a7['chunk_tota'+'l']??undefined};}['rowsToMemo'+_0x16cd78(0x100,0x2a7)](_0x50d9f1){const _0x49e8b3={'zUOBg':'none','nvKcu':function(_0x21bcc4,_0x16ddbe){return _0x21bcc4===_0x16ddbe;},'VNOss':_0x2e35d4(0xbde,0xa9d),'TRYRf':function(_0x2c3ac6,_0x3b81f5){return _0x2c3ac6(_0x3b81f5);},'ceSxE':function(_0x7f8507,_0x24d91c){return _0x7f8507<_0x24d91c;}};function _0x265d71(_0x5549c1,_0x2fac35){return _0x16cd78(_0x2fac35,_0x5549c1-0x478);}if(_0x49e8b3[_0x2e35d4(0x81c,0x77c)](_0x50d9f1['length'],0x0))return[];const _0x47e137=_0x50d9f1[_0x2e35d4(0x4f0,0x5f4)](_0x5295d9=>_0x5295d9['id']),_0x19943b=0x384,_0x1258df=new Map();function _0x2e35d4(_0x1759ed,_0x244d30){return _0x16cd78(_0x1759ed,_0x244d30-0x580);}const _0x1bef5e=new Map();for(let _0x16a737=0x0;_0x49e8b3['ceSxE'](_0x16a737,_0x47e137[_0x2e35d4(0x885,0xa86)]);_0x16a737+=_0x19943b){const _0x1fa7d5=_0x47e137[_0x265d71(0x549,0x4b7)](_0x16a737,_0x16a737+_0x19943b),_0x57ceac=_0x1fa7d5[_0x265d71(0x4ec,0x47d)](()=>'?')[_0x2e35d4(0x871,0xa2c)](','),_0x303503=this['db'][_0x2e35d4(0x8a6,0xa65)]('SELECT\x20mem'+_0x2e35d4(0x8bb,0x84a)+_0x2e35d4(0x924,0x98e)+'ory_tags\x20W'+'HERE\x20memor'+'y_id\x20IN\x20('+_0x57ceac+')')[_0x2e35d4(0x7d5,0x8aa)](..._0x1fa7d5);for(const _0x2f1e1d of _0x303503){const _0x9e2d84=_0x1258df[_0x2e35d4(0x88b,0x7fb)](_0x2f1e1d[_0x265d71(0x65a,0x6e6)])??[];_0x9e2d84[_0x265d71(0x77b,0x8fc)](_0x2f1e1d[_0x265d71(0x59a,0x7e3)]),_0x1258df[_0x265d71(0x98f,0xb8a)](_0x2f1e1d[_0x265d71(0x65a,0x81c)],_0x9e2d84);}const _0x2d4c5f=this['db']['prepare'](_0x265d71(0x96d,0x6fc)+'ory_id,\x20qu'+'antization'+_0x265d71(0x909,0xbb0)+_0x2e35d4(0xab6,0x866)+'_stats\x20FRO'+'M\x20embeddin'+_0x265d71(0x503,0x330)+_0x2e35d4(0xbc4,0x927)+'ory_id\x20IN\x20'+'('+_0x57ceac+')')[_0x265d71(0x7a2,0x637)](..._0x1fa7d5);for(const _0x3662ca of _0x2d4c5f){_0x1bef5e['set'](_0x3662ca[_0x265d71(0x65a,0x790)],{'level':_0x3662ca[_0x265d71(0x7e8,0xa25)+_0x265d71(0x5cf,0x543)],'stats':_0x3662ca[_0x265d71(0x7e8,0x79e)+_0x2e35d4(0x62d,0x6cb)]?JSON[_0x265d71(0x71c,0x55f)](_0x3662ca[_0x2e35d4(0xa53,0x8f0)+_0x2e35d4(0x4a4,0x6cb)]):null});}}return _0x50d9f1[_0x2e35d4(0x608,0x5f4)](_0x2c8fb8=>{function _0x8467a6(_0x3d177b,_0x52439f){return _0x2e35d4(_0x3d177b,_0x52439f- -0x395);}let _0x402e48=undefined;if(_0x2c8fb8[_0x2abbf8(0x4f1,0x731)]){const _0x1a34f7=_0x1bef5e[_0x8467a6(0x4a5,0x466)](_0x2c8fb8['id']),_0x2340ef=_0x1a34f7?.[_0x2abbf8(0x318,0x14c)]??_0x49e8b3['zUOBg'];try{if(_0x2340ef===_0x2abbf8(0x1e5,0x4aa))_0x402e48=dequantizeFromFloat32(_0x2c8fb8[_0x2abbf8(0x4f1,0x5ee)]);else{if(_0x49e8b3[_0x2abbf8(0x30a,0x42)](_0x2340ef,_0x49e8b3[_0x8467a6(0x6a5,0x714)])){if(!_0x1a34f7?.['stats'])throw new Error(_0x8467a6(0x7d0,0x750)+'\x20missing');_0x402e48=dequantizeFromInt8(_0x2c8fb8[_0x2abbf8(0x4f1,0x2a9)],_0x1a34f7[_0x2abbf8(0x13e,-0x2f)]);}else _0x402e48=Array[_0x2abbf8(0x36f,0x1c4)](bufferToFloat32Array(_0x2c8fb8[_0x2abbf8(0x4f1,0x3f8)]));}}catch{_0x402e48=Array['from'](_0x49e8b3[_0x2abbf8(0x3e0,0x4b3)](bufferToFloat32Array,_0x2c8fb8['embedding']));}}function _0x2abbf8(_0x47b084,_0x315cbc){return _0x2e35d4(_0x315cbc,_0x47b084- -0x472);}return{'id':_0x2c8fb8['id'],'content':_0x2c8fb8[_0x2abbf8(0x583,0x57a)],'category':_0x2c8fb8[_0x8467a6(0x274,0x391)],'tier':_0x2c8fb8[_0x2abbf8(0x606,0x5fb)],'tags':_0x1258df[_0x8467a6(0x2b5,0x466)](_0x2c8fb8['id'])??[],'embedding':_0x402e48,'projectPath':_0x2c8fb8[_0x8467a6(0x75b,0x719)+'th']??undefined,'sessionId':_0x2c8fb8[_0x2abbf8(0x50f,0x455)]??undefined,'createdAt':_0x2c8fb8[_0x8467a6(0x550,0x57e)],'updatedAt':_0x2c8fb8[_0x8467a6(0x541,0x4ac)],'accessCount':_0x2c8fb8[_0x8467a6(0x429,0x401)+'nt'],'lastAccessedAt':_0x2c8fb8[_0x2abbf8(0x540,0x57b)+_0x8467a6(0x1e6,0x207)]??undefined,'parentId':_0x2c8fb8[_0x2abbf8(0x3e2,0x219)]??undefined,'chunkIndex':_0x2c8fb8[_0x2abbf8(0x4ce,0x70b)+'x']??undefined,'chunkTotal':_0x2c8fb8[_0x8467a6(0x2d5,0x3af)+'l']??undefined};});}[_0x43e245(0x54f,0x496)+_0x43e245(0x1b1,0x3a0)](){const _0x270b5d={'AYRyo':_0x333f95(0x592,0x7c1)+_0x1a8af4(0x67,0x8e)+'ck','pWUQT':function(_0xc0eef4,_0x2f4722){return _0xc0eef4===_0x2f4722;}};function _0x1a8af4(_0xdc8268,_0x3c39a7){return _0x43e245(_0x3c39a7- -0x169,_0xdc8268);}function _0x333f95(_0x206088,_0x1ac9b9){return _0x43e245(_0x206088-0x14c,_0x1ac9b9);}const _0x559d37=this['db'][_0x1a8af4(0x402,0x51f)](_0x270b5d['AYRyo'])[_0x333f95(0x56a,0x5cf)]();return _0x270b5d[_0x333f95(0x7bd,0xa67)](_0x559d37[_0x333f95(0x628,0x381)+'check'],'ok');}[_0x16cd78(0x1c7,0x202)+_0x16cd78(-0x156,0x14f)](){function _0x3560e4(_0x54d0e4,_0x3fd668){return _0x43e245(_0x54d0e4-0x2f9,_0x3fd668);}const _0x5c611d={'bbNwW':_0x3560e4(0x8fb,0xaf7)+_0x3560e4(0x824,0x99f)+'ount\x20FROM\x20'+_0x38058c(0x619,0x54a)+_0x3560e4(0x976,0xc35)+_0x38058c(0x3e4,0x452)+_0x3560e4(0x931,0x8c9)},_0x42dd3f=this['db'][_0x38058c(0x7c9,0x846)](_0x5c611d[_0x3560e4(0x94c,0x777)])['get']();function _0x38058c(_0x190ba8,_0x33d7ad){return _0x43e245(_0x190ba8-0x141,_0x33d7ad);}return _0x42dd3f[_0x38058c(0x566,0x7df)];}['createProf'+_0x16cd78(0x3e6,0x2cd)](_0x3bb013){const _0x4da600={'SCioX':function(_0x7ee844){return _0x7ee844();},'yfQJm':_0x541283(0x225,0x2fd)+_0x541283(-0x66,-0x14)},_0xa37797=_0x4da600[_0x541283(0xfc,-0x1c)](randomUUID);function _0x30adc0(_0x1d891d,_0x1a163c){return _0x16cd78(_0x1a163c,_0x1d891d- -0xcf);}const _0x28de32=new Date()['toISOStrin'+'g']();function _0x541283(_0x3fb388,_0x427387){return _0x16cd78(_0x427387,_0x3fb388- -0x1f4);}return this[_0x30adc0(0x15f,0xb0)](_0x4da600[_0x541283(0x3a1,0x359)],_0x541283(0xcc,-0x1e)+_0x541283(0x277,0x159)+_0x541283(-0x152,0x169)+_0x541283(0x1bd,-0x3e)+_0x30adc0(-0xdd,-0x15f)+_0x30adc0(-0x85,-0xd6)+_0x30adc0(-0xa0,-0x23e)+_0x541283(0x354,0x4fc)+_0x30adc0(0x41a,0x687)+_0x30adc0(-0xbb,-0xdb)+_0x541283(-0x161,0x7e)+_0x541283(0xbd,-0x15a)+_0x541283(-0xa0,-0x2ed)+_0x30adc0(0x3d8,0x316)+_0x30adc0(0x457,0x254))[_0x30adc0(-0x17,0x5d)](_0xa37797,_0x3bb013[_0x30adc0(0x155,-0x5f)+_0x541283(0xd1,-0x9e)],_0x3bb013[_0x30adc0(0x4a4,0x261)],_0x3bb013['projectPat'+'h']??null,_0x28de32,_0x28de32),{'id':_0xa37797,'skillMemoryId':_0x3bb013[_0x541283(0x30,-0x197)+_0x541283(0xd1,-0xe9)],'skillName':_0x3bb013[_0x541283(0x37f,0x39c)],'level':0x1,'experienceCount':0x0,'successRate':0x0,'actrActivation':0x0,'lastPracticedAt':_0x28de32,'createdAt':_0x28de32,'updatedAt':_0x28de32,'projectPath':_0x3bb013[_0x541283(-0x95,-0x36e)+'h']};}[_0x43e245(0x2b6,0x1aa)+'ency'](_0x372020){const _0x4ec203={'hkzdb':function(_0x5cd694,_0x126a8e){return _0x5cd694(_0x126a8e);}},_0x578348=this[_0x35818e(0xb2,0x19c)]('get_profic'+_0x35818e(0x76f,0x4fd),_0x5be90a(0x779,0x8d9)+_0x35818e(0x209,-0x29)+_0x5be90a(0x739,0x845)+_0x35818e(0x264,0x4e8)+_0x35818e(0x72c,0x4c6))[_0x5be90a(0x7a4,0x50a)](_0x372020);function _0x35818e(_0x4d8147,_0x1f56ad){return _0x16cd78(_0x4d8147,_0x1f56ad- -0x92);}function _0x5be90a(_0xc15cdf,_0x276774){return _0x16cd78(_0x276774,_0xc15cdf-0x529);}if(!_0x578348)return null;return _0x4ec203[_0x35818e(0x433,0x2f5)](mapProficiencyRow,_0x578348);}['getProfici'+_0x16cd78(0x5,0x18c)+'l'](_0x34497f){const _0x1d4dfd={'HSQHT':'SELECT\x20*\x20F'+_0x52d144(0x248,0x18)+_0x52d144(0x23e,0x1bf)+_0x471a18(0x3f5,0x592)+_0x471a18(0x1be,0x27a)+_0x471a18(-0x14e,0x33)},_0x5c5db3=this[_0x471a18(0x1bf,0x246)](_0x52d144(0x3b7,0x2c6)+_0x471a18(0x1e8,0x1c0)+_0x471a18(0x31a,0xb0),_0x1d4dfd['HSQHT'])['get'](_0x34497f);if(!_0x5c5db3)return null;function _0x471a18(_0x7b347a,_0x54538c){return _0x43e245(_0x54538c- -0x18b,_0x7b347a);}function _0x52d144(_0x29a1c7,_0x7a55){return _0x43e245(_0x7a55- -0x1f4,_0x29a1c7);}return mapProficiencyRow(_0x5c5db3);}[_0x16cd78(0x322,0xaa)+'iencies'](_0x587489){const _0x59081c={'zlRHx':_0x243e13(0xde,0x22d)+_0xb713e9(0x1f9,0x193)+'iency_reco'+'rds\x20WHERE\x20'+'project_pa'+_0xb713e9(0x61c,0x5c3)+_0xb713e9(0x3de,0x1bc)+_0x243e13(0x44,0x2fa)+_0xb713e9(0x30b,0x53e)+_0x243e13(0x3ed,0x3ad)+'?','PEwTX':'list_profi'+'ciencies_a'+'ll'},_0x36f63f=_0x587489?.[_0x243e13(0x26f,0x406)]??0x64;if(_0x587489?.['projectPat'+'h']){const _0x391cca=this[_0xb713e9(0x4f6,0x358)](_0x243e13(0x147,0x3f5)+'ciencies_p'+'roject',_0x59081c[_0x243e13(0x39,0x90)])[_0xb713e9(0x52a,0x454)](_0x587489[_0x243e13(0x230,0x13c)+'h'],_0x36f63f);return _0x391cca['map'](mapProficiencyRow);}function _0xb713e9(_0x3d5db9,_0x5795f6){return _0x16cd78(_0x3d5db9,_0x5795f6-0x12a);}const _0x65e8e6=this[_0x243e13(-0x2c,0x20b)](_0x59081c[_0x243e13(0x4b5,0x4c4)],_0xb713e9(0x25b,0x37a)+_0x243e13(0x11b,0x46)+_0xb713e9(0x415,0x33a)+_0x243e13(0x386,0x326)+_0xb713e9(0x2d6,0x2c8)+_0xb713e9(0x892,0x5fa)+_0xb713e9(0x488,0x561)+_0xb713e9(0x195,0x2a8))[_0x243e13(0x240,0x307)](_0x36f63f);function _0x243e13(_0x5cd3a2,_0x476760){return _0x16cd78(_0x5cd3a2,_0x476760- -0x23);}return _0x65e8e6[_0x243e13(0x122,0x51)](mapProficiencyRow);}[_0x43e245(0x2b0,0x489)+_0x43e245(0x470,0x516)](_0x4733c9,_0x379298){const _0x13f323={'RkhoS':_0x276811(0x59d,0x36d)+_0x276811(0x3bc,0x2cf)+_0x276811(0x4e8,0x222),'dnKYx':function(_0x408e00,_0x51d6ec){return _0x408e00!==_0x51d6ec;},'Squnn':'experience'+_0x4d7046(0x141,0x380),'UcCer':'actr_activ'+_0x276811(-0x231,0x95)},_0x3c8fc2=[_0x13f323[_0x276811(-0x3e,0x114)]],_0x51a2f0=[];if(_0x13f323[_0x276811(0x233,0xe8)](_0x379298[_0x276811(0x44b,0x2b6)],undefined)){if(_0x13f323[_0x4d7046(-0x5,-0x6f)](_0x4d7046(-0x4,-0x2c5),_0x276811(0x2c,0x235)))_0x3c8fc2[_0x4d7046(0x2c2,0x49f)]('level\x20=\x20?'),_0x51a2f0[_0x4d7046(0x2c2,0x80)](_0x379298['level']);else{let _0x3139b2=this[_0x276811(0x34d,0x1d8)]['get'](_0x4610b2);return!_0x3139b2&&(_0x3139b2=this['db'][_0x276811(0x313,0x591)](_0x300934),this['stmts'][_0x4d7046(0x4d6,0x667)](_0x39bd7d,_0x3139b2)),_0x3139b2;}}function _0x4d7046(_0x2a2c3d,_0x3ab1e9){return _0x43e245(_0x2a2c3d- -0x1e4,_0x3ab1e9);}_0x13f323[_0x4d7046(-0x5,-0x281)](_0x379298[_0x4d7046(0x25a,0x4f8)+'Count'],undefined)&&(_0x3c8fc2[_0x4d7046(0x2c2,0x1ae)](_0x13f323[_0x4d7046(0x198,0x431)]),_0x51a2f0['push'](_0x379298[_0x276811(0xb9,0x347)+_0x4d7046(0x2c0,0x488)]));_0x379298['successRat'+'e']!==undefined&&(_0x3c8fc2[_0x276811(0x106,0x3af)](_0x4d7046(0x452,0x531)+'te\x20=\x20?'),_0x51a2f0[_0x4d7046(0x2c2,0x574)](_0x379298[_0x4d7046(0x290,0x193)+'e']));_0x13f323[_0x276811(-0x2d,0xe8)](_0x379298['actrActiva'+_0x4d7046(0x3b4,0x1f0)],undefined)&&(_0x3c8fc2[_0x4d7046(0x2c2,0x520)](_0x13f323[_0x4d7046(0x397,0x1e0)]),_0x51a2f0['push'](_0x379298[_0x4d7046(0x3f7,0x66e)+'tion']));_0x13f323[_0x276811(-0x1f7,0xe8)](_0x379298[_0x4d7046(-0x50,-0x108)+_0x4d7046(0x223,0x110)],undefined)&&(_0x3c8fc2[_0x4d7046(0x2c2,0x1d4)](_0x4d7046(0x3a1,0x4ba)+_0x276811(0x59d,0x334)+'?'),_0x51a2f0[_0x276811(0x51d,0x3af)](_0x379298[_0x4d7046(-0x50,0x54)+'cedAt']));_0x51a2f0[_0x276811(0x4e4,0x3af)](_0x4733c9);const _0x4f304f=this['db'][_0x4d7046(0x4a4,0x365)]('UPDATE\x20pro'+_0x4d7046(0x17f,-0x1d)+'ecords\x20SET'+'\x20'+_0x3c8fc2['join'](',\x20')+('\x20WHERE\x20id\x20'+'=\x20?'))['run'](..._0x51a2f0);function _0x276811(_0x2e19e8,_0x5a05c5){return _0x43e245(_0x5a05c5- -0xf7,_0x2e19e8);}return _0x4f304f[_0x276811(0x3ed,0x58b)]>0x0;}['addExperie'+_0x43e245(0x73d,0x69e)](_0x25b042){function _0x2497e9(_0x50d27f,_0xc87ab5){return _0x16cd78(_0xc87ab5,_0x50d27f-0x486);}const _0x5cc21e=randomUUID();function _0x12c20f(_0x3bb0c7,_0x4f18c3){return _0x16cd78(_0x3bb0c7,_0x4f18c3- -0x8);}return this[_0x12c20f(-0x64,0x226)](_0x2497e9(0x558,0x648)+'erience','\x0a\x20\x20\x20\x20\x20\x20INS'+_0x12c20f(0x21c,0x2d4)+_0x12c20f(0x65,0x177)+'events\x20(id'+_0x12c20f(0x3ef,0x4ea)+_0x2497e9(0x4ed,0x473)+'mestamp,\x20o'+_0x2497e9(0x6dc,0x771)+_0x2497e9(0x66d,0x4e0)+_0x12c20f(0x4bc,0x369)+_0x12c20f(0x12b,0xae)+'n_id)\x0a\x20\x20\x20\x20'+'\x20\x20VALUES\x20('+_0x2497e9(0x632,0x466)+_0x2497e9(0x76b,0x782)+_0x2497e9(0x921,0x6ae))[_0x2497e9(0x53e,0x2e6)](_0x5cc21e,_0x25b042[_0x12c20f(0x5d8,0x4af)+_0x2497e9(0x74b,0x477)],_0x25b042[_0x2497e9(0x7d4,0x88d)],_0x25b042[_0x2497e9(0x72b,0x51a)],_0x25b042['difficulty'],_0x25b042[_0x12c20f(0x589,0x2f2)+'s']?JSON[_0x2497e9(0x784,0x883)](_0x25b042[_0x12c20f(0x1a4,0x2f2)+'s']):null,_0x25b042[_0x2497e9(0x541,0x6ec)]??null),{'id':_0x5cc21e,'proficiencyId':_0x25b042[_0x2497e9(0x93d,0xa99)+_0x12c20f(0x509,0x2bd)],'timestamp':_0x25b042['timestamp'],'outcome':_0x25b042['outcome'],'difficulty':_0x25b042['difficulty'],'contextTags':_0x25b042['contextTag'+'s']??[],'sessionId':_0x25b042[_0x2497e9(0x541,0x5ce)]};}['getExperie'+'nceEvents'](_0x76c65c,_0x2d37e4){function _0x3e839b(_0x3697b3,_0x5f27e2){return _0x43e245(_0x3697b3-0x112,_0x5f27e2);}const _0x29fe8={'zDLFf':_0x3a72d7(0x36b,0x1d2),'zRWOI':_0x3a72d7(0x567,0x36b)},_0x2e6295=_0x2d37e4?.[_0x3e839b(0x6de,0x577)]??0x3e8,_0x4e9a04=_0x2d37e4?.[_0x3a72d7(0x341,0x25c)]===_0x3a72d7(0x767,0x952)?_0x29fe8[_0x3a72d7(0x65b,0x763)]:_0x29fe8[_0x3a72d7(0x6ab,0x83d)],_0x2d6d89=this['db'][_0x3e839b(0x79a,0x90c)]('SELECT\x20*\x20F'+_0x3e839b(0x58d,0x35e)+_0x3e839b(0x383,0x27b)+_0x3e839b(0x817,0x8d6)+_0x3a72d7(0x762,0x979)+'id\x20=\x20?\x20ORD'+_0x3e839b(0x6f1,0x97e)+_0x3e839b(0x3f0,0x345)+_0x4e9a04+_0x3e839b(0x433,0x50a))[_0x3e839b(0x5df,0x48a)](_0x76c65c,_0x2e6295);function _0x3a72d7(_0x13876e,_0x40b2cd){return _0x43e245(_0x13876e-0x26,_0x40b2cd);}return _0x2d6d89[_0x3a72d7(0x23d,0x30f)](mapExperienceRow);}[_0x43e245(0x6a6,0x8d4)+_0x43e245(0x593,0x317)+_0x16cd78(0x20e,0x1b4)](_0x17ffd9){const _0xed0641={'fOXHX':'count_expe'+_0x1d0575(0x9fd,0x855),'cpYPJ':_0x253f45(0x4ec,0x4d2)+_0x253f45(0x415,0x358)+'ount\x20FROM\x20'+_0x253f45(0x328,0x2c9)+'_events\x20WH'+_0x1d0575(0x784,0x8ef)+_0x253f45(0x1ca,0x412)+'\x20?'},_0x67484e=this[_0x253f45(0x2bb,0x336)](_0xed0641['fOXHX'],_0xed0641[_0x253f45(0x5a3,0x3cf)])[_0x253f45(0x308,0x184)](_0x17ffd9);function _0x1d0575(_0x2fd0a4,_0x552934){return _0x43e245(_0x552934-0x237,_0x2fd0a4);}function _0x253f45(_0x2552be,_0x7c3d93){return _0x43e245(_0x2552be- -0x116,_0x7c3d93);}return _0x67484e[_0x1d0575(0x431,0x65c)];}['bufferEmot'+_0x16cd78(0x5c4,0x33b)](_0x268f0e){function _0xe19a7e(_0x33a7e9,_0x869fd3){return _0x16cd78(_0x33a7e9,_0x869fd3-0x3cd);}function _0x5b09bd(_0x456821,_0x43e388){return _0x16cd78(_0x456821,_0x43e388-0x2d7);}const _0x22513a={'miyMH':function(_0x1d119a){return _0x1d119a();},'LXQcD':_0x5b09bd(0x537,0x5b9)+_0x5b09bd(0x5c5,0x3d4)+_0xe19a7e(0x472,0x553)+',\x20message,'+'\x20created_a'+_0x5b09bd(0x622,0x41e)+_0xe19a7e(0x5e6,0x3e4)+_0xe19a7e(0x794,0x748)},_0x747a78=_0x22513a[_0xe19a7e(0x5f2,0x898)](randomUUID),_0x5250dc=new Date()['toISOStrin'+'g']();this['stmt']('insert_emo'+'tion_buffe'+'r',_0x22513a[_0xe19a7e(0x5e8,0x676)])[_0xe19a7e(0x1ff,0x485)](_0x747a78,_0x268f0e,_0x5250dc);}[_0x16cd78(0x558,0x37d)+_0x43e245(0x5ac,0x6a3)+_0x43e245(0x496,0x4d0)](_0x20e82f=0xa){function _0x14f5af(_0x2818e,_0x36824f){return _0x43e245(_0x36824f-0x105,_0x2818e);}function _0x65c5c7(_0x54536c,_0x56fef0){return _0x43e245(_0x56fef0-0xbd,_0x54536c);}return this['db'][_0x14f5af(0x9f5,0x78d)](_0x14f5af(0x42a,0x34d)+'\x20message\x20F'+_0x65c5c7(0x704,0x6d4)+_0x65c5c7(0x996,0x761)+_0x14f5af(0xa04,0x7db)+_0x14f5af(0x60e,0x49b)+_0x65c5c7(0x42e,0x502)+'ed_at\x20ASC\x20'+_0x65c5c7(0x2bf,0x3d9))[_0x14f5af(0x898,0x5d2)](_0x20e82f);}[_0x43e245(0x2ae,0x34d)+'nMessagesS'+_0x16cd78(0x444,0x444)](_0x3c83fb){function _0x1063da(_0x5adae1,_0x371cd3){return _0x43e245(_0x371cd3-0x73,_0x5adae1);}function _0x38950f(_0x495992,_0x4b2d8b){return _0x43e245(_0x495992-0x32a,_0x4b2d8b);}if(_0x3c83fb[_0x38950f(0x9d3,0xc4b)]===0x0)return;const _0x14720e=_0x3c83fb[_0x1063da(0x3af,0x28a)](()=>'?')[_0x1063da(0x475,0x6c2)](',');this['db'][_0x1063da(0x69e,0x6fb)]('UPDATE\x20emo'+'tion_buffe'+'r\x20SET\x20sync'+_0x38950f(0x63d,0x5de)+_0x1063da(0x13b,0x240)+_0x14720e+')')['run'](..._0x3c83fb);}[_0x16cd78(0x525,0x2b6)+_0x43e245(0x546,0x824)+_0x16cd78(0x4df,0x28a)](){function _0xfa79ea(_0xcd7fd,_0x2c0ad3){return _0x16cd78(_0xcd7fd,_0x2c0ad3-0x479);}const _0x2c213a={'oZjRH':_0xfa79ea(0x73e,0x724)+_0xfa79ea(0x998,0x7e6)+_0xe9083f(0x786,0x64f)+'RE\x20synced\x20'+_0xe9083f(0x51b,0x40e)};function _0xe9083f(_0x4b9079,_0x2f68e5){return _0x16cd78(_0x2f68e5,_0x4b9079-0x3b0);}const _0x21b41c=this['db'][_0xe9083f(0x895,0x8d2)](_0x2c213a['oZjRH'])[_0xfa79ea(0x315,0x531)]();return _0x21b41c[_0xe9083f(0x88f,0x9e7)];}[_0x16cd78(0x4aa,0x34f)+_0x16cd78(0x39e,0x3e4)](_0x42de23){function _0x364805(_0x218628,_0x436c79){return _0x16cd78(_0x218628,_0x436c79-0x3bf);}function _0x1085d2(_0x2e657a,_0x4a81e1){return _0x16cd78(_0x2e657a,_0x4a81e1- -0xcb);}this['db'][_0x1085d2(0x4e1,0x41a)](_0x1085d2(0x1a4,0x1f5)+'ERT\x20OR\x20REP'+_0x1085d2(0x298,0x308)+_0x1085d2(0x5c0,0x4c6)+_0x364805(0x936,0x869)+_0x1085d2(-0x27,0x52)+_0x1085d2(0x554,0x2bf)+_0x1085d2(-0x242,-0x19)+_0x1085d2(-0x23f,0x10)+'vg_quality'+_0x364805(0x7bd,0x679)+_0x1085d2(0x2f4,0x10a)+_0x1085d2(-0xfb,0x15f)+_0x364805(0x668,0x784)+_0x364805(0x5eb,0x64b)+_0x1085d2(0x141,0x415)+_0x364805(0x71e,0x601)+'\x0a\x20\x20\x20\x20\x20\x20VAL'+_0x364805(0x5bb,0x513)+_0x1085d2(0x4bd,0x3dc)+_0x364805(0xb07,0x8df)+'time(\x27now\x27'+_0x1085d2(0x329,0x327))[_0x1085d2(-0xb3,-0x13)](_0x42de23[_0x1085d2(-0x277,-0x10)],_0x42de23[_0x364805(0x61b,0x619)+_0x1085d2(0x62,0x1f9)],_0x42de23[_0x364805(0x7a4,0x551)],_0x42de23['avgQuality'],_0x42de23[_0x1085d2(0x145,0x2c)+_0x1085d2(-0x121,0x97)+'ss'],_0x42de23[_0x1085d2(0x37,-0xde)+'nt'],_0x42de23['totalMemor'+'ies']);}[_0x43e245(0x279,0x1cd)+_0x43e245(0x22d,0x46a)+_0x43e245(0x375,0x617)](_0x1580ae=0x7){const _0x59d832={'BURtO':'SELECT\x20*\x20F'+_0x31c482(0x99a,0x779)+_0x4ab2dd(0x576,0x4f4)+'ORDER\x20BY\x20c'+_0x4ab2dd(0x52b,0x73a)+'DESC\x20LIMIT'+'\x20?'};function _0x31c482(_0x4eec61,_0x2476e3){return _0x43e245(_0x2476e3-0x37b,_0x4eec61);}function _0x4ab2dd(_0x1512a9,_0x670c0e){return _0x43e245(_0x1512a9-0x262,_0x670c0e);}return this['db'][_0x31c482(0x8fb,0xa03)](_0x59d832[_0x4ab2dd(0x519,0x4bd)])[_0x31c482(0x5a3,0x848)](_0x1580ae);}[_0x43e245(0x589,0x6f5)+_0x43e245(0x68d,0x91f)](_0x23c96c){const _0xac38f1=randomUUID();function _0x288712(_0xb49e21,_0x347e19){return _0x16cd78(_0xb49e21,_0x347e19-0x37f);}function _0x4f8ab2(_0x5b821e,_0x3e906e){return _0x16cd78(_0x3e906e,_0x5b821e-0x17e);}const _0x514152=new Date()['toISOStrin'+'g']();return this['stmt']('insert_inj'+'ection_log',_0x288712(0x45f,0x63f)+'ERT\x20INTO\x20i'+'njection_l'+'ogs\x20(id,\x20s'+_0x4f8ab2(0x5f5,0x631)+_0x4f8ab2(0x6d0,0x6b8)+_0x288712(0x99c,0x785)+_0x4f8ab2(0x1d6,0x24f)+_0x288712(0x5b2,0x3b1)+'d_keywords'+_0x288712(0x267,0x4eb)+_0x4f8ab2(0x351,0x185)+'njected,\x20e'+'ffectivene'+_0x4f8ab2(0x577,0x2b9)+_0x4f8ab2(0x23e,0x23b)+_0x4f8ab2(0x298,0x367)+'\x20\x20VALUES\x20('+_0x288712(0x5dd,0x52b)+_0x288712(0x545,0x72d)+_0x288712(0x4c4,0x77a)+_0x288712(0x611,0x8a5))['run'](_0xac38f1,_0x23c96c[_0x288712(0x235,0x43a)],_0x23c96c[_0x4f8ab2(0x2e6,0x1fc)],JSON[_0x288712(0x6e4,0x67d)](_0x23c96c[_0x288712(0x3d5,0x420)+_0x288712(0xa54,0x820)]),JSON[_0x4f8ab2(0x47c,0x223)](_0x23c96c[_0x4f8ab2(0x682,0x958)+_0x288712(0x321,0x38b)]),_0x23c96c[_0x4f8ab2(0x17f,0x118)+_0x4f8ab2(0x1d0,0x401)],_0x23c96c['abGroup']??null,_0x514152),_0xac38f1;}['recordInje'+_0x16cd78(0x508,0x382)](_0x118d81,_0x449bd9,_0x53e89c){const _0x56bc71={'GoaLZ':'insert_inj'+_0x37e69d(0x95,0x215),'NhwVq':_0x7d2813(0x4a7,0x204)+_0x37e69d(0x4a9,0x378)+'unt','ultkq':'UPDATE\x20inj'+'ection_log'+_0x7d2813(0x1ed,0x77)+'count\x20=\x20hi'+_0x37e69d(0x6bc,0x47d)+_0x37e69d(0x364,0x32e)+_0x37e69d(0x49a,0x3f7)};function _0x37e69d(_0x20583f,_0x3dc7c4){return _0x16cd78(_0x20583f,_0x3dc7c4-0xaf);}const _0x506c29=randomUUID();function _0x7d2813(_0x48c6dd,_0x18dcc5){return _0x16cd78(_0x18dcc5,_0x48c6dd- -0x85);}const _0x440fd2=new Date()[_0x7d2813(0x93,0x32d)+'g']();this['stmt'](_0x56bc71[_0x37e69d(0x2f8,0x483)],'\x0a\x20\x20\x20\x20\x20\x20INS'+'ERT\x20INTO\x20i'+_0x7d2813(0x320,0x23a)+'its\x20(id,\x20i'+_0x37e69d(-0xd,0xfc)+_0x7d2813(-0x21,0x7a)+'_keywords,'+_0x7d2813(0x46c,0x72f)+_0x37e69d(0x27c,0x4bf)+_0x7d2813(0xaa,0x1ae)+_0x7d2813(0xbd,0x1b0)+_0x7d2813(0x422,0x359)+'?)\x0a\x20\x20\x20\x20')[_0x7d2813(0x33,-0x47)](_0x506c29,_0x118d81,JSON[_0x7d2813(0x279,0x136)](_0x449bd9),_0x53e89c,_0x440fd2),this[_0x7d2813(0x1a9,0x194)](_0x56bc71['NhwVq'],_0x56bc71[_0x37e69d(0x5d9,0x3d3)])[_0x7d2813(0x33,0x1c7)](_0x118d81);}[_0x43e245(0x23d,0x512)+'njection'](_0xbb928a){function _0x2320c8(_0x1f95ad,_0x13ba71){return _0x16cd78(_0x1f95ad,_0x13ba71- -0xa1);}const _0x1f4d3c={'qCmjR':_0x1fb43b(0x491,0x409)+_0x2320c8(0x1a8,0x2fb)+'tier\x20=\x20\x27se'+_0x2320c8(0x270,0x442)+'ERE\x20tier\x20='+_0x1fb43b(0x5fc,0x6d6)+_0x1fb43b(0x2f7,0x1f3),'TlAOW':_0x2320c8(-0x36,0x4)+_0x1fb43b(0x15d,-0xbe)+_0x2320c8(0x68f,0x466)+_0x1fb43b(0x119,0x10c)+_0x1fb43b(0x3dc,0x63a)+_0x1fb43b(0x369,0x61e)+_0x2320c8(0x3f6,0x1c2)+_0x2320c8(0x620,0x39c)+_0x1fb43b(0x6a9,0x8da)+_0x2320c8(0x48b,0x44c)+_0x1fb43b(0x47f,0x518)+'ER\x20BY\x20crea'+_0x2320c8(0x698,0x4d8)+'C\x20LIMIT\x201'},_0x25b7d4=this['db'][_0x1fb43b(0x5f6,0x79e)](_0x1f4d3c['TlAOW'])['get'](_0xbb928a);if(!_0x25b7d4)return null;function _0x1fb43b(_0xf2a156,_0x4ec5b9){return _0x16cd78(_0x4ec5b9,_0xf2a156-0x111);}let _0x24034a=[];try{if(_0x1fb43b(0x64a,0x5c5)===_0x2320c8(0x2ba,0x498))_0x24034a=JSON[_0x2320c8(0x4b0,0x203)](_0x25b7d4[_0x1fb43b(0x119,0x3de)+_0x1fb43b(0x2da,0x208)]??'[]');else{const _0x5265f5=this['db']['prepare'](_0x2320c8(0x34,0x2df)+'ories\x20SET\x20'+'category\x20='+_0x2320c8(0x62c,0x3e3)+_0x1fb43b(0x263,0x2a6)+'category\x20='+_0x2320c8(0x4d6,0x22e)+'ce\x27')[_0x1fb43b(0x1c9,0x333)](),_0x343e8d=this['db'][_0x2320c8(0x38a,0x444)](QBYXgu[_0x1fb43b(0x2b6,0x409)])['run']();return{'categoriesUpdated':_0x5265f5[_0x2320c8(0x446,0x43e)],'tiersUpdated':_0x343e8d[_0x2320c8(0x44e,0x43e)]};}}catch{_0x24034a=[];}return{'id':_0x25b7d4['id'],'injectedKeywords':_0x25b7d4['injected_k'+'eywords'],'injectedMemoryIds':_0x24034a,'totalInjected':_0x25b7d4[_0x2320c8(0x3e6,0x4b2)+'cted']};}[_0x16cd78(0x2c1,0x23b)+'ctions'](_0x42119f){function _0x429e1a(_0x276328,_0x5324ae){return _0x43e245(_0x276328- -0x1bd,_0x5324ae);}const _0x78351f=this['db']['prepare'](_0x5488e8(-0x46,0x44)+_0x429e1a(0x32,-0x224)+_0x429e1a(0x4ed,0x5f7)+_0x5488e8(-0xe3,0x1a3)+'emory_ids,'+_0x5488e8(0x16d,0x214)+_0x5488e8(0x2a9,0x1d)+_0x429e1a(0x275,0x313)+_0x429e1a(0x177,0x354)+_0x429e1a(0x4e5,0x726)+_0x429e1a(0x413,0x3ba)+_0x5488e8(-0x7,-0x1ce)+_0x5488e8(0x3e4,0x62b)+_0x429e1a(0x534,0x66d)+'C')['all'](_0x42119f);function _0x5488e8(_0x542cd1,_0x306dd0){return _0x43e245(_0x542cd1- -0x28e,_0x306dd0);}return _0x78351f[_0x5488e8(-0x77,-0x278)](_0x1f72ab=>{let _0x3fae6a=[];function _0x2717ab(_0x59a916,_0x457b9a){return _0x5488e8(_0x59a916-0x5c8,_0x457b9a);}function _0x576552(_0x1bcddf,_0x56a3c1){return _0x5488e8(_0x1bcddf-0x1a7,_0x56a3c1);}try{_0x3fae6a=JSON[_0x576552(0x360,0x556)](_0x1f72ab[_0x2717ab(0x4e5,0x47d)+_0x2717ab(0x6a6,0x92d)]??'[]');}catch{}return{'id':_0x1f72ab['id'],'injectedKeywords':_0x1f72ab['injected_k'+'eywords'],'injectedMemoryIds':_0x3fae6a,'totalInjected':_0x1f72ab[_0x2717ab(0xa30,0xaf6)+_0x576552(0x310,0x23b)],'hitCount':_0x1f72ab[_0x2717ab(0x4ec,0x72c)]};});}[_0x16cd78(0x512,0x4c6)+'ctionEffec'+_0x43e245(0x4b8,0x5ee)](_0x329bde,_0x9b7d8f,_0x4ac5ec){const _0xb96020={'dBXan':'UPDATE\x20inj'+'ection_log'+'s\x20SET\x20effe'+_0x26ec13(0x88a,0x728)+_0x26ec13(0x70c,0x520)+'ount\x20=\x20?\x20W'+'HERE\x20id\x20=\x20'+'?'};function _0x26ec13(_0x57248b,_0x1825c2){return _0x16cd78(_0x57248b,_0x1825c2-0x390);}function _0x9d66ba(_0x1d3cd0,_0x92c594){return _0x16cd78(_0x1d3cd0,_0x92c594- -0x118);}this[_0x9d66ba(0xd9,0x116)](_0x9d66ba(-0x1e2,-0x91)+'ection_eff'+_0x9d66ba(0x5b8,0x38a),_0xb96020[_0x26ec13(0x6df,0x613)])[_0x9d66ba(-0x1be,-0x60)](_0x9b7d8f,_0x4ac5ec,_0x329bde);}['getInjecti'+_0x16cd78(-0x1a,0x2b)](_0x2bca0c){const _0x55d8fe={'cvEzn':_0x43557d(0x433,0x44c)+_0x2864f3(0x65e,0x66e)+'\x20FROM\x20inje'+_0x43557d(0x586,0x328)+'\x20WHERE\x20inj'+_0x43557d(0x769,0x5d1)+_0x2864f3(0x58e,0x81f)};function _0x2864f3(_0x62426f,_0x47faff){return _0x16cd78(_0x47faff,_0x62426f-0x16d);}const _0x226ba0=this['db'][_0x43557d(0x873,0x70c)](_0x55d8fe['cvEzn'])[_0x2864f3(0x497,0x3c5)](_0x2bca0c);function _0x43557d(_0xa7be7c,_0x449d41){return _0x16cd78(_0x449d41,_0xa7be7c-0x38e);}return _0x226ba0[_0x2864f3(0x1e1,0x156)](_0x1669bf=>({'id':_0x1669bf['id'],'toolName':_0x1669bf['tool_name']}));}[_0x16cd78(0x33a,0x59b)+'actionEval'](_0x2bc408){function _0x3154c2(_0x4485f7,_0x501ddb){return _0x16cd78(_0x4485f7,_0x501ddb-0x43);}const _0x2551b2={'FYxGj':_0xc4f349(0xf6,0x2d2)+_0x3154c2(0x40d,0x31c)+'al'},_0x24deaf=randomUUID(),_0x579e6d=new Date()['toISOStrin'+'g']();function _0xc4f349(_0x3787d9,_0xaf693){return _0x16cd78(_0xaf693,_0x3787d9- -0x1c3);}this['stmt'](_0x2551b2[_0xc4f349(-0x1d4,-0x8)],_0x3154c2(0x3f8,0x303)+'ERT\x20INTO\x20e'+_0x3154c2(0x5a1,0x3cd)+_0x3154c2(0x29a,0x1f1)+_0x3154c2(0x74e,0x599)+'ory_id,\x20se'+_0x3154c2(0x6f6,0x543)+_0xc4f349(-0xf6,-0x3ab)+_0xc4f349(0x31a,0x4e1)+_0x3154c2(0x1a2,0x5b)+_0x3154c2(0x58,0x284)+'reused_cou'+_0xc4f349(-0x112,-0x95)+_0x3154c2(0x7f1,0x5ac)+_0xc4f349(0x1a7,0x1f5)+_0xc4f349(0xae,-0x1c4)+_0xc4f349(0x265,0x208)+_0x3154c2(0x349,0xae)+_0xc4f349(-0x17,0x14b)+_0x3154c2(0x573,0x592)+_0x3154c2(0x224,0x246))['run'](_0x24deaf,_0x2bc408[_0x3154c2(0x3df,0x510)],_0x2bc408[_0x3154c2(0x341,0xfe)],_0x2bc408['significan'+'ceScore']??null,_0x2bc408[_0xc4f349(-0xb5,-0xbe)+'n']??null,_0x2bc408[_0xc4f349(0x335,0x415)]??null,_0x579e6d);}[_0x43e245(0x70f,0x52b)+'jectionLog'+'s'](_0x2b2445=0x1e){const _0x5ead2c={'cIaxg':function(_0x4dcb3c,_0x37a465){return _0x4dcb3c-_0x37a465;},'eISSs':function(_0x5ce938,_0x39c9cc){return _0x5ce938*_0x39c9cc;},'JUnqt':_0x2215fa(0x5fe,0x495)+_0x400800(0x631,0x46c)+_0x2215fa(0x76a,0x6e9)+_0x400800(0x599,0x367)+_0x2215fa(0x355,0x60f)},_0x3a3d90=new Date(_0x5ead2c[_0x2215fa(0x491,0x5d9)](Date['now'](),_0x5ead2c['eISSs'](_0x5ead2c[_0x400800(0x8ee,0x796)](_0x2b2445*0x18*0x3c,0x3c),0x3e8)))[_0x400800(0x5b8,0x783)+'g']();function _0x400800(_0x424c85,_0x5be104){return _0x43e245(_0x424c85-0x2fd,_0x5be104);}const _0x192b13=this['db'][_0x2215fa(0x654,0x6cf)](_0x5ead2c[_0x400800(0x729,0x670)])[_0x400800(0x558,0x2c3)](_0x3a3d90);function _0x2215fa(_0x40df8b,_0x350ef7){return _0x43e245(_0x350ef7-0x47,_0x40df8b);}return _0x192b13[_0x400800(0x97f,0x967)];}}function mapSyncHistoryRow(_0x18b1b1){function _0x43890f(_0x14f40b,_0x338a3b){return _0x16cd78(_0x338a3b,_0x14f40b-0x424);}function _0x550770(_0x31cd89,_0x394be4){return _0x16cd78(_0x31cd89,_0x394be4-0x34e);}return{'id':_0x18b1b1['id'],'operation':_0x18b1b1[_0x550770(0x3fb,0x3c9)],'memoryId':_0x18b1b1[_0x43890f(0x606,0x34d)],'timestamp':_0x18b1b1[_0x43890f(0x772,0x71d)],'status':_0x18b1b1[_0x43890f(0x6d2,0x886)],'details':_0x18b1b1[_0x550770(0x8be,0x5eb)]};}function _0x16cd78(_0x5a63d4,_0x55345e){return _0x214f(_0x55345e- -0x1d5,_0x5a63d4);}function _0x43e245(_0xe28226,_0x14f517){return _0x214f(_0xe28226- -0x32,_0x14f517);}function mapProficiencyRow(_0x1536c0){function _0x256bd8(_0x11987e,_0x2ef022){return _0x43e245(_0x2ef022- -0x2b8,_0x11987e);}function _0x30c2fb(_0x10c694,_0x2eec57){return _0x43e245(_0x2eec57- -0x2bd,_0x10c694);}return{'id':_0x1536c0['id'],'skillMemoryId':_0x1536c0[_0x30c2fb(0x111,0x148)+_0x256bd8(0x113,0x1fe)],'skillName':_0x1536c0[_0x30c2fb(0xe2,0x15a)],'level':_0x1536c0[_0x30c2fb(-0x1ba,0xf0)],'experienceCount':_0x1536c0[_0x30c2fb(0x177,0x181)+_0x256bd8(0x4bd,0x28a)],'successRate':_0x1536c0['success_ra'+'te'],'actrActivation':_0x1536c0[_0x256bd8(0x57b,0x3e6)+_0x30c2fb(-0x73,0x200)],'lastPracticedAt':_0x1536c0[_0x256bd8(0x260,0x2cd)+'iced_at']??_0x1536c0['created_at'],'createdAt':_0x1536c0['created_at'],'updatedAt':_0x1536c0[_0x256bd8(0xac,0x1ac)],'projectPath':_0x1536c0[_0x256bd8(0x507,0x419)+'th']??undefined};}function mapExperienceRow(_0x5a9f52){function _0x5b681a(_0x4b817b,_0x38c756){return _0x43e245(_0x38c756-0x408,_0x4b817b);}function _0xe506c4(_0x22c36f,_0x572fc8){return _0x43e245(_0x22c36f- -0x32b,_0x572fc8);}return{'id':_0x5a9f52['id'],'proficiencyId':_0x5a9f52[_0xe506c4(0x32f,0x3b6)+_0x5b681a(0xb6e,0x93a)],'timestamp':_0x5a9f52[_0x5b681a(0xb23,0x8f9)],'outcome':_0x5a9f52[_0xe506c4(0x11d,0x17b)],'difficulty':_0x5a9f52['difficulty'],'contextTags':_0x5a9f52['context_ta'+'gs']?JSON[_0xe506c4(0x11c,-0x89)](_0x5a9f52[_0xe506c4(0x1e9,0x47b)+'gs']):[],'sessionId':_0x5a9f52[_0xe506c4(0x279,0x2e9)]??undefined};}function _0x214f(_0x587a8e,_0xb992ea){_0x587a8e=_0x587a8e-0x1be;const _0x53721b=_0x5372();let _0x214fc3=_0x53721b[_0x587a8e];if(_0x214f['VFdhAE']===undefined){var _0x488416=function(_0x40886d){const _0x4945e2='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x11c7a1='',_0x363ea5='';for(let _0x16b998=0x0,_0x320856,_0x403ca1,_0x343334=0x0;_0x403ca1=_0x40886d['charAt'](_0x343334++);~_0x403ca1&&(_0x320856=_0x16b998%0x4?_0x320856*0x40+_0x403ca1:_0x403ca1,_0x16b998++%0x4)?_0x11c7a1+=String['fromCharCode'](0xff&_0x320856>>(-0x2*_0x16b998&0x6)):0x0){_0x403ca1=_0x4945e2['indexOf'](_0x403ca1);}for(let _0x3eb64a=0x0,_0x25cc55=_0x11c7a1['length'];_0x3eb64a<_0x25cc55;_0x3eb64a++){_0x363ea5+='%'+('00'+_0x11c7a1['charCodeAt'](_0x3eb64a)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x363ea5);};_0x214f['QtSbNs']=_0x488416,_0x214f['boRcCM']={},_0x214f['VFdhAE']=!![];}const _0x2e4625=_0x53721b[0x0],_0x5c39be=_0x587a8e+_0x2e4625,_0x4c702b=_0x214f['boRcCM'][_0x5c39be];return!_0x4c702b?(_0x214fc3=_0x214f['QtSbNs'](_0x214fc3),_0x214f['boRcCM'][_0x5c39be]=_0x214fc3):_0x214fc3=_0x4c702b,_0x214fc3;}function bufferToFloat32Array(_0x1707c0){function _0x3aee55(_0x407d15,_0x118c80){return _0x16cd78(_0x118c80,_0x407d15-0x341);}const _0x1f80de=_0x1707c0['buffer']['slice'](_0x1707c0[_0x3aee55(0x347,0x17e)],_0x1707c0[_0x374578(0x483,0x44b)]+_0x1707c0[_0x3aee55(0x3e4,0x296)]);function _0x374578(_0x148a2c,_0x46effc){return _0x16cd78(_0x148a2c,_0x46effc-0x445);}return new Float32Array(_0x1f80de);}function float32ArrayToBuffer(_0x3cdf61){function _0x46eef9(_0x4d424f,_0xf50ea9){return _0x16cd78(_0xf50ea9,_0x4d424f-0x556);}function _0x3d9722(_0x414d05,_0x5ea016){return _0x16cd78(_0x5ea016,_0x414d05-0x41a);}return Buffer[_0x46eef9(0x7b7,0x5d4)](_0x3cdf61[_0x3d9722(0x781,0x75a)],_0x3cdf61[_0x3d9722(0x420,0x31c)],_0x3cdf61[_0x46eef9(0x5f9,0x386)]);}
|