sensorium-mcp 2.16.29 → 2.16.30
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/dist/config.d.ts +1 -11
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -49
- package/dist/config.js.map +1 -1
- package/dist/dashboard/presets.d.ts +18 -0
- package/dist/dashboard/presets.d.ts.map +1 -0
- package/dist/dashboard/presets.js +78 -0
- package/dist/dashboard/presets.js.map +1 -0
- package/dist/dashboard/routes.d.ts +33 -0
- package/dist/dashboard/routes.d.ts.map +1 -0
- package/dist/dashboard/routes.js +283 -0
- package/dist/dashboard/routes.js.map +1 -0
- package/dist/dashboard.d.ts +6 -29
- package/dist/dashboard.d.ts.map +1 -1
- package/dist/dashboard.js +6 -1158
- package/dist/dashboard.js.map +1 -1
- package/dist/data/file-storage.d.ts +19 -0
- package/dist/data/file-storage.d.ts.map +1 -0
- package/dist/data/file-storage.js +58 -0
- package/dist/data/file-storage.js.map +1 -0
- package/dist/data/memory/bootstrap.d.ts +40 -0
- package/dist/data/memory/bootstrap.d.ts.map +1 -0
- package/dist/data/memory/bootstrap.js +240 -0
- package/dist/data/memory/bootstrap.js.map +1 -0
- package/dist/data/memory/consolidation.d.ts +12 -0
- package/dist/data/memory/consolidation.d.ts.map +1 -0
- package/dist/data/memory/consolidation.js +248 -0
- package/dist/data/memory/consolidation.js.map +1 -0
- package/dist/data/memory/episodes.d.ts +34 -0
- package/dist/data/memory/episodes.d.ts.map +1 -0
- package/dist/data/memory/episodes.js +89 -0
- package/dist/data/memory/episodes.js.map +1 -0
- package/dist/data/memory/index.d.ts +14 -0
- package/dist/data/memory/index.d.ts.map +1 -0
- package/dist/data/memory/index.js +14 -0
- package/dist/data/memory/index.js.map +1 -0
- package/dist/data/memory/procedures.d.ts +42 -0
- package/dist/data/memory/procedures.d.ts.map +1 -0
- package/dist/data/memory/procedures.js +122 -0
- package/dist/data/memory/procedures.js.map +1 -0
- package/dist/data/memory/schema.d.ts +11 -0
- package/dist/data/memory/schema.d.ts.map +1 -0
- package/dist/data/memory/schema.js +327 -0
- package/dist/data/memory/schema.js.map +1 -0
- package/dist/data/memory/semantic.d.ts +94 -0
- package/dist/data/memory/semantic.d.ts.map +1 -0
- package/dist/data/memory/semantic.js +385 -0
- package/dist/data/memory/semantic.js.map +1 -0
- package/dist/data/memory/voice-sig.d.ts +33 -0
- package/dist/data/memory/voice-sig.d.ts.map +1 -0
- package/dist/data/memory/voice-sig.js +48 -0
- package/dist/data/memory/voice-sig.js.map +1 -0
- package/dist/data/templates.d.ts +19 -0
- package/dist/data/templates.d.ts.map +1 -0
- package/dist/data/templates.js +46 -0
- package/dist/data/templates.js.map +1 -0
- package/dist/dispatcher.d.ts +5 -97
- package/dist/dispatcher.d.ts.map +1 -1
- package/dist/dispatcher.js +5 -525
- package/dist/dispatcher.js.map +1 -1
- package/dist/drive.d.ts.map +1 -1
- package/dist/drive.js +3 -1
- package/dist/drive.js.map +1 -1
- package/dist/index.d.ts +4 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -289
- package/dist/index.js.map +1 -1
- package/dist/integrations/openai/chat.d.ts +29 -0
- package/dist/integrations/openai/chat.d.ts.map +1 -0
- package/dist/integrations/openai/chat.js +84 -0
- package/dist/integrations/openai/chat.js.map +1 -0
- package/dist/integrations/openai/index.d.ts +6 -0
- package/dist/integrations/openai/index.d.ts.map +1 -0
- package/dist/integrations/openai/index.js +6 -0
- package/dist/integrations/openai/index.js.map +1 -0
- package/dist/integrations/openai/speech.d.ts +21 -0
- package/dist/integrations/openai/speech.d.ts.map +1 -0
- package/dist/integrations/openai/speech.js +75 -0
- package/dist/integrations/openai/speech.js.map +1 -0
- package/dist/integrations/openai/video.d.ts +15 -0
- package/dist/integrations/openai/video.d.ts.map +1 -0
- package/dist/integrations/openai/video.js +131 -0
- package/dist/integrations/openai/video.js.map +1 -0
- package/dist/integrations/openai/vision.d.ts +23 -0
- package/dist/integrations/openai/vision.d.ts.map +1 -0
- package/dist/integrations/openai/vision.js +116 -0
- package/dist/integrations/openai/vision.js.map +1 -0
- package/dist/integrations/openai/voice-emotion.d.ts +41 -0
- package/dist/integrations/openai/voice-emotion.d.ts.map +1 -0
- package/dist/integrations/openai/voice-emotion.js +50 -0
- package/dist/integrations/openai/voice-emotion.js.map +1 -0
- package/dist/integrations/telegram/types.d.ts +112 -0
- package/dist/integrations/telegram/types.d.ts.map +1 -0
- package/dist/integrations/telegram/types.js +6 -0
- package/dist/integrations/telegram/types.js.map +1 -0
- package/dist/memory.d.ts +6 -205
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +6 -1373
- package/dist/memory.js.map +1 -1
- package/dist/openai.d.ts +11 -102
- package/dist/openai.d.ts.map +1 -1
- package/dist/openai.js +14 -421
- package/dist/openai.js.map +1 -1
- package/dist/response-builders.d.ts +1 -11
- package/dist/response-builders.d.ts.map +1 -1
- package/dist/response-builders.js +2 -38
- package/dist/response-builders.js.map +1 -1
- package/dist/server/factory.d.ts +17 -0
- package/dist/server/factory.d.ts.map +1 -0
- package/dist/server/factory.js +279 -0
- package/dist/server/factory.js.map +1 -0
- package/dist/services/dispatcher/broker.d.ts +83 -0
- package/dist/services/dispatcher/broker.d.ts.map +1 -0
- package/dist/services/dispatcher/broker.js +175 -0
- package/dist/services/dispatcher/broker.js.map +1 -0
- package/dist/services/dispatcher/index.d.ts +7 -0
- package/dist/services/dispatcher/index.d.ts.map +1 -0
- package/dist/services/dispatcher/index.js +7 -0
- package/dist/services/dispatcher/index.js.map +1 -0
- package/dist/services/dispatcher/lock.d.ts +25 -0
- package/dist/services/dispatcher/lock.d.ts.map +1 -0
- package/dist/services/dispatcher/lock.js +111 -0
- package/dist/services/dispatcher/lock.js.map +1 -0
- package/dist/services/dispatcher/poller.d.ts +19 -0
- package/dist/services/dispatcher/poller.d.ts.map +1 -0
- package/dist/services/dispatcher/poller.js +269 -0
- package/dist/services/dispatcher/poller.js.map +1 -0
- package/dist/telegram.d.ts +2 -88
- package/dist/telegram.d.ts.map +1 -1
- package/dist/telegram.js +2 -0
- package/dist/telegram.js.map +1 -1
- package/dist/tool-definitions.d.ts +1 -14
- package/dist/tool-definitions.d.ts.map +1 -1
- package/dist/tool-definitions.js +1 -404
- package/dist/tool-definitions.js.map +1 -1
- package/dist/tools/definitions.d.ts +15 -0
- package/dist/tools/definitions.d.ts.map +1 -0
- package/dist/tools/definitions.js +404 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/tools/start-session-tool.d.ts.map +1 -1
- package/dist/tools/start-session-tool.js +2 -0
- package/dist/tools/start-session-tool.js.map +1 -1
- package/dist/tools/wait/drive-handler.d.ts +61 -0
- package/dist/tools/wait/drive-handler.d.ts.map +1 -0
- package/dist/tools/wait/drive-handler.js +138 -0
- package/dist/tools/wait/drive-handler.js.map +1 -0
- package/dist/tools/wait/index.d.ts +8 -0
- package/dist/tools/wait/index.d.ts.map +1 -0
- package/dist/tools/wait/index.js +8 -0
- package/dist/tools/wait/index.js.map +1 -0
- package/dist/tools/wait/media-processor.d.ts +52 -0
- package/dist/tools/wait/media-processor.d.ts.map +1 -0
- package/dist/tools/wait/media-processor.js +261 -0
- package/dist/tools/wait/media-processor.js.map +1 -0
- package/dist/tools/wait/message-delivery.d.ts +63 -0
- package/dist/tools/wait/message-delivery.d.ts.map +1 -0
- package/dist/tools/wait/message-delivery.js +281 -0
- package/dist/tools/wait/message-delivery.js.map +1 -0
- package/dist/tools/wait/poll-loop.d.ts +72 -0
- package/dist/tools/wait/poll-loop.d.ts.map +1 -0
- package/dist/tools/wait/poll-loop.js +280 -0
- package/dist/tools/wait/poll-loop.js.map +1 -0
- package/dist/tools/wait/reaction-handler.d.ts +49 -0
- package/dist/tools/wait/reaction-handler.d.ts.map +1 -0
- package/dist/tools/wait/reaction-handler.js +126 -0
- package/dist/tools/wait/reaction-handler.js.map +1 -0
- package/dist/tools/wait/task-handler.d.ts +40 -0
- package/dist/tools/wait/task-handler.d.ts.map +1 -0
- package/dist/tools/wait/task-handler.js +41 -0
- package/dist/tools/wait/task-handler.js.map +1 -0
- package/dist/tools/wait-tool.d.ts +3 -69
- package/dist/tools/wait-tool.d.ts.map +1 -1
- package/dist/tools/wait-tool.js +3 -876
- package/dist/tools/wait-tool.js.map +1 -1
- package/package.json +1 -1
- package/templates/daily-review.default.md +26 -0
- package/templates/drive-dispatcher.default.md +2 -0
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory database schema initialization and migrations.
|
|
3
|
+
*
|
|
4
|
+
* Owns the SQLite `db` handle creation via `initMemoryDb()`.
|
|
5
|
+
* Other memory modules import `Database` (the type) and call
|
|
6
|
+
* `initMemoryDb()` to obtain the singleton handle.
|
|
7
|
+
*/
|
|
8
|
+
import BetterSqlite3 from "better-sqlite3";
|
|
9
|
+
import { mkdirSync } from "fs";
|
|
10
|
+
import { homedir } from "os";
|
|
11
|
+
import { join } from "path";
|
|
12
|
+
import { log } from "../../logger.js";
|
|
13
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
14
|
+
function nowISO() {
|
|
15
|
+
return new Date().toISOString();
|
|
16
|
+
}
|
|
17
|
+
// ─── Database Initialization ─────────────────────────────────────────────────
|
|
18
|
+
const SCHEMA_VERSION = 5;
|
|
19
|
+
// ─── Migrations ──────────────────────────────────────────────────────────────
|
|
20
|
+
/**
|
|
21
|
+
* Migration functions keyed by target schema version.
|
|
22
|
+
* Each migration upgrades from version (key - 1) to version (key).
|
|
23
|
+
* Add new migrations here when SCHEMA_VERSION is bumped.
|
|
24
|
+
*/
|
|
25
|
+
const MIGRATIONS = {
|
|
26
|
+
2: (db) => {
|
|
27
|
+
db.exec(`
|
|
28
|
+
CREATE TABLE IF NOT EXISTS note_embeddings (
|
|
29
|
+
note_id TEXT PRIMARY KEY,
|
|
30
|
+
embedding BLOB NOT NULL,
|
|
31
|
+
model TEXT NOT NULL DEFAULT 'text-embedding-3-small',
|
|
32
|
+
created_at TEXT NOT NULL
|
|
33
|
+
);
|
|
34
|
+
CREATE INDEX IF NOT EXISTS idx_emb_note ON note_embeddings(note_id);
|
|
35
|
+
`);
|
|
36
|
+
},
|
|
37
|
+
3: (db) => {
|
|
38
|
+
// Add priority column: 0=normal, 1=notable, 2=high importance
|
|
39
|
+
// Use try/catch because new databases already have the column in SCHEMA_SQL
|
|
40
|
+
try {
|
|
41
|
+
db.exec(`ALTER TABLE semantic_notes ADD COLUMN priority INTEGER NOT NULL DEFAULT 0`);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Column already exists — safe to ignore
|
|
45
|
+
}
|
|
46
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_sem_priority ON semantic_notes(priority DESC) WHERE valid_to IS NULL`);
|
|
47
|
+
},
|
|
48
|
+
4: (db) => {
|
|
49
|
+
// Add thread_id column: NULL = global, number = thread-scoped
|
|
50
|
+
try {
|
|
51
|
+
db.exec(`ALTER TABLE semantic_notes ADD COLUMN thread_id INTEGER`);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Column already exists — safe to ignore
|
|
55
|
+
}
|
|
56
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_sem_thread ON semantic_notes(thread_id) WHERE valid_to IS NULL`);
|
|
57
|
+
// Backfill thread_id from source episodes
|
|
58
|
+
const notes = db.prepare(`SELECT note_id, source_episodes FROM semantic_notes WHERE thread_id IS NULL`).all();
|
|
59
|
+
const update = db.prepare(`UPDATE semantic_notes SET thread_id = ? WHERE note_id = ?`);
|
|
60
|
+
let backfilled = 0;
|
|
61
|
+
for (const note of notes) {
|
|
62
|
+
let episodeIds = [];
|
|
63
|
+
try {
|
|
64
|
+
episodeIds = JSON.parse(note.source_episodes ?? "[]");
|
|
65
|
+
}
|
|
66
|
+
catch { /* ignore */ }
|
|
67
|
+
if (episodeIds.length === 0)
|
|
68
|
+
continue;
|
|
69
|
+
const placeholders = episodeIds.map(() => "?").join(",");
|
|
70
|
+
const rows = db.prepare(`SELECT thread_id, COUNT(*) as cnt FROM episodes WHERE episode_id IN (${placeholders}) GROUP BY thread_id ORDER BY cnt DESC LIMIT 1`).all(...episodeIds);
|
|
71
|
+
if (rows.length > 0 && rows[0].thread_id != null) {
|
|
72
|
+
update.run(rows[0].thread_id, note.note_id);
|
|
73
|
+
backfilled++;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (backfilled > 0) {
|
|
77
|
+
log.info(`[migration-4] Backfilled thread_id on ${backfilled}/${notes.length} existing notes.`);
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
5: (db) => {
|
|
81
|
+
// Widen CHECK constraints on episodes table to include 'operator_reaction'
|
|
82
|
+
// type and 'reaction' modality. SQLite does not support ALTER COLUMN, so we
|
|
83
|
+
// must recreate the table.
|
|
84
|
+
db.exec(`
|
|
85
|
+
CREATE TABLE IF NOT EXISTS episodes_new (
|
|
86
|
+
episode_id TEXT PRIMARY KEY,
|
|
87
|
+
session_id TEXT NOT NULL,
|
|
88
|
+
thread_id INTEGER NOT NULL,
|
|
89
|
+
timestamp TEXT NOT NULL,
|
|
90
|
+
type TEXT NOT NULL CHECK(type IN ('operator_message','agent_action','system_event','operator_reaction')),
|
|
91
|
+
modality TEXT NOT NULL CHECK(modality IN ('text','voice','photo','video_note','document','mixed','reaction')),
|
|
92
|
+
content TEXT NOT NULL,
|
|
93
|
+
topic_tags TEXT,
|
|
94
|
+
importance REAL NOT NULL DEFAULT 0.5,
|
|
95
|
+
consolidated INTEGER DEFAULT 0,
|
|
96
|
+
accessed_count INTEGER DEFAULT 0,
|
|
97
|
+
last_accessed TEXT,
|
|
98
|
+
created_at TEXT NOT NULL
|
|
99
|
+
);
|
|
100
|
+
INSERT INTO episodes_new SELECT * FROM episodes;
|
|
101
|
+
DROP TABLE episodes;
|
|
102
|
+
ALTER TABLE episodes_new RENAME TO episodes;
|
|
103
|
+
CREATE INDEX IF NOT EXISTS idx_ep_thread_time ON episodes(thread_id, timestamp DESC);
|
|
104
|
+
CREATE INDEX IF NOT EXISTS idx_ep_importance ON episodes(importance DESC);
|
|
105
|
+
CREATE INDEX IF NOT EXISTS idx_ep_uncons ON episodes(consolidated) WHERE consolidated = 0;
|
|
106
|
+
`);
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* Read the current schema version from the database.
|
|
111
|
+
* Returns 1 if no version is recorded (initial schema).
|
|
112
|
+
*/
|
|
113
|
+
function getCurrentSchemaVersion(db) {
|
|
114
|
+
try {
|
|
115
|
+
const row = db
|
|
116
|
+
.prepare("SELECT MAX(version) as v FROM schema_version")
|
|
117
|
+
.get();
|
|
118
|
+
return row?.v ?? 1;
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
// Table may not exist yet on first run
|
|
122
|
+
return 0;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Run any pending migrations sequentially from the current stored version
|
|
127
|
+
* up to SCHEMA_VERSION. Each migration runs inside a transaction.
|
|
128
|
+
*/
|
|
129
|
+
function runMigrations(db) {
|
|
130
|
+
const currentVersion = getCurrentSchemaVersion(db);
|
|
131
|
+
log.info(`[memory] Current schema version: ${currentVersion}, target: ${SCHEMA_VERSION}`);
|
|
132
|
+
for (let v = currentVersion + 1; v <= SCHEMA_VERSION; v++) {
|
|
133
|
+
const migration = MIGRATIONS[v];
|
|
134
|
+
if (migration) {
|
|
135
|
+
try {
|
|
136
|
+
// Run DDL migrations outside transactions — SQLite DDL + transactions
|
|
137
|
+
// can have subtle issues in WAL mode with better-sqlite3.
|
|
138
|
+
migration(db);
|
|
139
|
+
db.prepare("INSERT OR REPLACE INTO schema_version (version, applied_at) VALUES (?, ?)").run(v, nowISO());
|
|
140
|
+
log.info(`[memory] Migrated schema to version ${v}`);
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
log.error(`[memory] Migration ${v} FAILED: ${err instanceof Error ? err.message : String(err)}`);
|
|
144
|
+
throw err;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
const SCHEMA_SQL = `
|
|
150
|
+
CREATE TABLE IF NOT EXISTS episodes (
|
|
151
|
+
episode_id TEXT PRIMARY KEY,
|
|
152
|
+
session_id TEXT NOT NULL,
|
|
153
|
+
thread_id INTEGER NOT NULL,
|
|
154
|
+
timestamp TEXT NOT NULL,
|
|
155
|
+
type TEXT NOT NULL CHECK(type IN ('operator_message','agent_action','system_event','operator_reaction')),
|
|
156
|
+
modality TEXT NOT NULL CHECK(modality IN ('text','voice','photo','video_note','document','mixed','reaction')),
|
|
157
|
+
content TEXT NOT NULL,
|
|
158
|
+
topic_tags TEXT,
|
|
159
|
+
importance REAL NOT NULL DEFAULT 0.5,
|
|
160
|
+
consolidated INTEGER DEFAULT 0,
|
|
161
|
+
accessed_count INTEGER DEFAULT 0,
|
|
162
|
+
last_accessed TEXT,
|
|
163
|
+
created_at TEXT NOT NULL
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
CREATE INDEX IF NOT EXISTS idx_ep_thread_time ON episodes(thread_id, timestamp DESC);
|
|
167
|
+
CREATE INDEX IF NOT EXISTS idx_ep_importance ON episodes(importance DESC);
|
|
168
|
+
CREATE INDEX IF NOT EXISTS idx_ep_uncons ON episodes(consolidated) WHERE consolidated = 0;
|
|
169
|
+
|
|
170
|
+
CREATE TABLE IF NOT EXISTS semantic_notes (
|
|
171
|
+
note_id TEXT PRIMARY KEY,
|
|
172
|
+
type TEXT NOT NULL CHECK(type IN ('fact','preference','pattern','entity','relationship')),
|
|
173
|
+
content TEXT NOT NULL,
|
|
174
|
+
keywords TEXT NOT NULL,
|
|
175
|
+
confidence REAL NOT NULL DEFAULT 0.5,
|
|
176
|
+
source_episodes TEXT,
|
|
177
|
+
linked_notes TEXT,
|
|
178
|
+
link_reasons TEXT,
|
|
179
|
+
valid_from TEXT NOT NULL,
|
|
180
|
+
valid_to TEXT,
|
|
181
|
+
superseded_by TEXT,
|
|
182
|
+
access_count INTEGER DEFAULT 0,
|
|
183
|
+
last_accessed TEXT,
|
|
184
|
+
priority INTEGER NOT NULL DEFAULT 0,
|
|
185
|
+
thread_id INTEGER,
|
|
186
|
+
created_at TEXT NOT NULL,
|
|
187
|
+
updated_at TEXT NOT NULL
|
|
188
|
+
);
|
|
189
|
+
|
|
190
|
+
CREATE INDEX IF NOT EXISTS idx_sem_type ON semantic_notes(type);
|
|
191
|
+
CREATE INDEX IF NOT EXISTS idx_sem_conf ON semantic_notes(confidence DESC);
|
|
192
|
+
CREATE INDEX IF NOT EXISTS idx_sem_valid ON semantic_notes(valid_to) WHERE valid_to IS NULL;
|
|
193
|
+
CREATE INDEX IF NOT EXISTS idx_sem_priority ON semantic_notes(priority DESC) WHERE valid_to IS NULL;
|
|
194
|
+
CREATE INDEX IF NOT EXISTS idx_sem_thread ON semantic_notes(thread_id) WHERE valid_to IS NULL;
|
|
195
|
+
|
|
196
|
+
CREATE TABLE IF NOT EXISTS procedures (
|
|
197
|
+
procedure_id TEXT PRIMARY KEY,
|
|
198
|
+
name TEXT NOT NULL,
|
|
199
|
+
type TEXT NOT NULL CHECK(type IN ('workflow','habit','tool_pattern','template')),
|
|
200
|
+
description TEXT NOT NULL,
|
|
201
|
+
steps TEXT,
|
|
202
|
+
trigger_conditions TEXT,
|
|
203
|
+
success_rate REAL DEFAULT 0.5,
|
|
204
|
+
times_executed INTEGER DEFAULT 0,
|
|
205
|
+
last_executed_at TEXT,
|
|
206
|
+
learned_from TEXT,
|
|
207
|
+
corrections TEXT,
|
|
208
|
+
related_procedures TEXT,
|
|
209
|
+
confidence REAL DEFAULT 0.5,
|
|
210
|
+
created_at TEXT NOT NULL,
|
|
211
|
+
updated_at TEXT NOT NULL
|
|
212
|
+
);
|
|
213
|
+
|
|
214
|
+
CREATE INDEX IF NOT EXISTS idx_proc_name ON procedures(name);
|
|
215
|
+
CREATE INDEX IF NOT EXISTS idx_proc_type ON procedures(type);
|
|
216
|
+
|
|
217
|
+
CREATE TABLE IF NOT EXISTS meta_topic_index (
|
|
218
|
+
topic TEXT PRIMARY KEY,
|
|
219
|
+
semantic_count INTEGER DEFAULT 0,
|
|
220
|
+
procedural_count INTEGER DEFAULT 0,
|
|
221
|
+
last_updated TEXT,
|
|
222
|
+
avg_confidence REAL DEFAULT 0.5,
|
|
223
|
+
total_accesses INTEGER DEFAULT 0
|
|
224
|
+
);
|
|
225
|
+
|
|
226
|
+
CREATE TABLE IF NOT EXISTS meta_consolidation_log (
|
|
227
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
228
|
+
run_at TEXT NOT NULL,
|
|
229
|
+
episodes_processed INTEGER,
|
|
230
|
+
notes_created INTEGER,
|
|
231
|
+
duration_ms INTEGER
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
CREATE TABLE IF NOT EXISTS voice_signatures (
|
|
235
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
236
|
+
episode_id TEXT NOT NULL,
|
|
237
|
+
emotion TEXT,
|
|
238
|
+
arousal REAL,
|
|
239
|
+
dominance REAL,
|
|
240
|
+
valence REAL,
|
|
241
|
+
speech_rate REAL,
|
|
242
|
+
mean_pitch_hz REAL,
|
|
243
|
+
pitch_std_hz REAL,
|
|
244
|
+
jitter REAL,
|
|
245
|
+
shimmer REAL,
|
|
246
|
+
hnr_db REAL,
|
|
247
|
+
audio_events TEXT,
|
|
248
|
+
duration_sec REAL,
|
|
249
|
+
created_at TEXT NOT NULL
|
|
250
|
+
);
|
|
251
|
+
|
|
252
|
+
CREATE INDEX IF NOT EXISTS idx_voice_ep ON voice_signatures(episode_id);
|
|
253
|
+
CREATE INDEX IF NOT EXISTS idx_voice_time ON voice_signatures(created_at DESC);
|
|
254
|
+
|
|
255
|
+
CREATE TABLE IF NOT EXISTS note_embeddings (
|
|
256
|
+
note_id TEXT PRIMARY KEY,
|
|
257
|
+
embedding BLOB NOT NULL,
|
|
258
|
+
model TEXT NOT NULL DEFAULT 'text-embedding-3-small',
|
|
259
|
+
created_at TEXT NOT NULL
|
|
260
|
+
);
|
|
261
|
+
|
|
262
|
+
CREATE INDEX IF NOT EXISTS idx_emb_note ON note_embeddings(note_id);
|
|
263
|
+
|
|
264
|
+
CREATE TABLE IF NOT EXISTS schema_version (
|
|
265
|
+
version INTEGER PRIMARY KEY,
|
|
266
|
+
applied_at TEXT NOT NULL
|
|
267
|
+
);
|
|
268
|
+
`;
|
|
269
|
+
export function initMemoryDb() {
|
|
270
|
+
const dbDir = join(homedir(), ".remote-copilot-mcp");
|
|
271
|
+
mkdirSync(dbDir, { recursive: true });
|
|
272
|
+
const dbPath = join(dbDir, "memory.db");
|
|
273
|
+
const db = new BetterSqlite3(dbPath);
|
|
274
|
+
db.pragma("journal_mode = WAL");
|
|
275
|
+
db.pragma("foreign_keys = ON");
|
|
276
|
+
// Create all tables
|
|
277
|
+
db.exec(SCHEMA_SQL);
|
|
278
|
+
// Record base schema version for brand-new databases only
|
|
279
|
+
const versionCount = db.prepare("SELECT COUNT(*) as cnt FROM schema_version").get().cnt;
|
|
280
|
+
if (versionCount === 0) {
|
|
281
|
+
// New database — record version 1 as the base, then run all migrations up to SCHEMA_VERSION
|
|
282
|
+
db.prepare("INSERT INTO schema_version (version, applied_at) VALUES (1, ?)").run(nowISO());
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
// Repair: older code may have recorded SCHEMA_VERSION prematurely without running migrations.
|
|
286
|
+
// Detect by checking if version 3 was recorded but the priority column is missing.
|
|
287
|
+
const hasV3 = db.prepare("SELECT version FROM schema_version WHERE version = 3").get();
|
|
288
|
+
if (hasV3) {
|
|
289
|
+
const cols = db.prepare("PRAGMA table_info(semantic_notes)").all();
|
|
290
|
+
const hasPriority = cols.some(c => c.name === "priority");
|
|
291
|
+
if (!hasPriority) {
|
|
292
|
+
// Version 3 was recorded but migration never ran — reset to version 2
|
|
293
|
+
db.prepare("DELETE FROM schema_version WHERE version >= 3").run();
|
|
294
|
+
log.warn("[memory] Repaired: schema_version was ahead of actual migrations, reset to v2");
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
const hasV4 = db.prepare("SELECT version FROM schema_version WHERE version = 4").get();
|
|
298
|
+
if (hasV4) {
|
|
299
|
+
const cols = db.prepare("PRAGMA table_info(semantic_notes)").all();
|
|
300
|
+
const hasThreadId = cols.some(c => c.name === "thread_id");
|
|
301
|
+
if (!hasThreadId) {
|
|
302
|
+
db.prepare("DELETE FROM schema_version WHERE version >= 4").run();
|
|
303
|
+
log.warn("[memory] Repaired: schema_version was ahead of actual migrations, reset to v3");
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
// Run any pending migrations (will upgrade from stored version to SCHEMA_VERSION)
|
|
308
|
+
runMigrations(db);
|
|
309
|
+
// Direct repair: ensure priority column exists regardless of migration state.
|
|
310
|
+
// This handles edge cases where migrations fail silently or the migration system
|
|
311
|
+
// recorded a version without actually applying the schema change.
|
|
312
|
+
{
|
|
313
|
+
const cols = db.prepare("PRAGMA table_info(semantic_notes)").all();
|
|
314
|
+
if (!cols.some(c => c.name === "priority")) {
|
|
315
|
+
log.info("[memory] Direct repair: adding missing priority column");
|
|
316
|
+
db.exec(`ALTER TABLE semantic_notes ADD COLUMN priority INTEGER NOT NULL DEFAULT 0`);
|
|
317
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_sem_priority ON semantic_notes(priority DESC) WHERE valid_to IS NULL`);
|
|
318
|
+
}
|
|
319
|
+
if (!cols.some(c => c.name === "thread_id")) {
|
|
320
|
+
log.info("[memory] Direct repair: adding missing thread_id column");
|
|
321
|
+
db.exec(`ALTER TABLE semantic_notes ADD COLUMN thread_id INTEGER`);
|
|
322
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_sem_thread ON semantic_notes(thread_id) WHERE valid_to IS NULL`);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
return db;
|
|
326
|
+
}
|
|
327
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/data/memory/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic note CRUD operations for the memory system.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from memory.ts — semantic memory layer.
|
|
5
|
+
*/
|
|
6
|
+
import type { Database } from "./schema.js";
|
|
7
|
+
export interface SemanticNote {
|
|
8
|
+
noteId: string;
|
|
9
|
+
type: "fact" | "preference" | "pattern" | "entity" | "relationship";
|
|
10
|
+
content: string;
|
|
11
|
+
keywords: string[];
|
|
12
|
+
confidence: number;
|
|
13
|
+
priority: number;
|
|
14
|
+
threadId: number | null;
|
|
15
|
+
sourceEpisodes: string[];
|
|
16
|
+
linkedNotes: string[];
|
|
17
|
+
linkReasons: Record<string, string>;
|
|
18
|
+
validFrom: string;
|
|
19
|
+
validTo: string | null;
|
|
20
|
+
supersededBy: string | null;
|
|
21
|
+
accessCount: number;
|
|
22
|
+
lastAccessed: string | null;
|
|
23
|
+
createdAt: string;
|
|
24
|
+
updatedAt: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function updateTopicIndexForKeywords(db: Database, keywords: string[], layer: "semantic" | "procedural"): void;
|
|
27
|
+
export declare function decrementTopicIndexForKeywords(db: Database, keywords: string[], layer: "semantic" | "procedural"): void;
|
|
28
|
+
export declare function saveSemanticNote(db: Database, note: {
|
|
29
|
+
type: "fact" | "preference" | "pattern" | "entity" | "relationship";
|
|
30
|
+
content: string;
|
|
31
|
+
keywords: string[];
|
|
32
|
+
confidence?: number;
|
|
33
|
+
priority?: number;
|
|
34
|
+
threadId?: number | null;
|
|
35
|
+
sourceEpisodes?: string[];
|
|
36
|
+
}): string;
|
|
37
|
+
export declare function searchSemanticNotes(db: Database, query: string, options?: {
|
|
38
|
+
types?: string[];
|
|
39
|
+
maxResults?: number;
|
|
40
|
+
skipAccessTracking?: boolean;
|
|
41
|
+
}): SemanticNote[];
|
|
42
|
+
export declare function searchSemanticNotesRanked(db: Database, query: string, options?: {
|
|
43
|
+
types?: string[];
|
|
44
|
+
maxResults?: number;
|
|
45
|
+
skipAccessTracking?: boolean;
|
|
46
|
+
minMatchRatio?: number;
|
|
47
|
+
threadId?: number;
|
|
48
|
+
}): SemanticNote[];
|
|
49
|
+
export declare function getTopSemanticNotes(db: Database, options?: {
|
|
50
|
+
type?: string;
|
|
51
|
+
limit?: number;
|
|
52
|
+
sortBy?: "confidence" | "access_count" | "created_at";
|
|
53
|
+
}): SemanticNote[];
|
|
54
|
+
export declare function updateSemanticNote(db: Database, noteId: string, updates: Partial<{
|
|
55
|
+
content: string;
|
|
56
|
+
confidence: number;
|
|
57
|
+
priority: number;
|
|
58
|
+
keywords: string[];
|
|
59
|
+
linkedNotes: string[];
|
|
60
|
+
linkReasons: Record<string, string>;
|
|
61
|
+
}>): void;
|
|
62
|
+
export declare function supersedeNote(db: Database, oldNoteId: string, newNote: {
|
|
63
|
+
type: string;
|
|
64
|
+
content: string;
|
|
65
|
+
keywords: string[];
|
|
66
|
+
confidence?: number;
|
|
67
|
+
priority?: number;
|
|
68
|
+
sourceEpisodes?: string[];
|
|
69
|
+
}): string;
|
|
70
|
+
/** Store a pre-computed embedding vector for a semantic note. */
|
|
71
|
+
export declare function saveNoteEmbedding(db: Database, noteId: string, embedding: Float32Array): void;
|
|
72
|
+
/**
|
|
73
|
+
* Search semantic notes using embedding cosine similarity.
|
|
74
|
+
* Returns notes sorted by similarity score, filtered by minimum threshold.
|
|
75
|
+
*/
|
|
76
|
+
export declare function searchByEmbedding(db: Database, queryEmbedding: Float32Array, options?: {
|
|
77
|
+
maxResults?: number;
|
|
78
|
+
minSimilarity?: number;
|
|
79
|
+
skipAccessTracking?: boolean;
|
|
80
|
+
threadId?: number;
|
|
81
|
+
}): (SemanticNote & {
|
|
82
|
+
similarity: number;
|
|
83
|
+
})[];
|
|
84
|
+
/** Get note IDs that don't have embeddings yet (for backfill). */
|
|
85
|
+
export declare function getNotesWithoutEmbeddings(db: Database): {
|
|
86
|
+
noteId: string;
|
|
87
|
+
content: string;
|
|
88
|
+
}[];
|
|
89
|
+
/**
|
|
90
|
+
* Find semantic notes that potentially conflict with a given note
|
|
91
|
+
* by sharing >= 2 keywords of the same type.
|
|
92
|
+
*/
|
|
93
|
+
export declare function findPotentialConflicts(db: Database, noteId: string): SemanticNote[];
|
|
94
|
+
//# sourceMappingURL=semantic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../../src/data/memory/semantic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAK5C,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,cAAc,CAAC;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AA6DD,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,GAAG,YAAY,GAAG,IAAI,CAsBpH;AAED,wBAAgB,8BAA8B,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,GAAG,YAAY,GAAG,IAAI,CAoBvH;AAID,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE;IACJ,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,cAAc,CAAC;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,GACA,MAAM,CA4BR;AAED,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAE,GAChF,YAAY,EAAE,CAgDhB;AAED,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3H,YAAY,EAAE,CAgEhB;AAED,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,QAAQ,EACZ,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,GAAG,YAAY,CAAA;CAAE,GACjG,YAAY,EAAE,CAwBhB;AAED,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC,CAAC,GACD,IAAI,CAgCN;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IACP,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,GACA,MAAM,CAmCR;AAID,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI,CAK7F;AAsBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC7B,EAAE,EAAE,QAAQ,EACZ,cAAc,EAAE,YAAY,EAC5B,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3G,CAAC,YAAY,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,CAoD3C;AAED,kEAAkE;AAClE,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,QAAQ,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAM7F;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE,MAAM,GACb,YAAY,EAAE,CAyBhB"}
|