@askexenow/exe-os 0.8.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +178 -79
- package/dist/bin/backfill-responses.js +160 -8
- package/dist/bin/backfill-vectors.js +130 -1
- package/dist/bin/cleanup-stale-review-tasks.js +130 -1
- package/dist/bin/cli.js +10111 -7540
- package/dist/bin/exe-agent.js +159 -1
- package/dist/bin/exe-assign.js +235 -16
- package/dist/bin/exe-boot.js +344 -472
- package/dist/bin/exe-call.js +145 -1
- package/dist/bin/exe-cloud.js +11 -0
- package/dist/bin/exe-dispatch.js +37 -24
- package/dist/bin/exe-doctor.js +130 -1
- package/dist/bin/exe-export-behaviors.js +150 -7
- package/dist/bin/exe-forget.js +822 -665
- package/dist/bin/exe-gateway.js +470 -62
- package/dist/bin/exe-heartbeat.js +133 -2
- package/dist/bin/exe-kill.js +150 -7
- package/dist/bin/exe-launch-agent.js +150 -7
- package/dist/bin/exe-new-employee.js +756 -224
- package/dist/bin/exe-pending-messages.js +132 -2
- package/dist/bin/exe-pending-notifications.js +130 -1
- package/dist/bin/exe-pending-reviews.js +132 -2
- package/dist/bin/exe-review.js +160 -8
- package/dist/bin/exe-search.js +2473 -2008
- package/dist/bin/exe-session-cleanup.js +238 -51
- package/dist/bin/exe-settings.js +11 -0
- package/dist/bin/exe-status.js +130 -1
- package/dist/bin/exe-team.js +130 -1
- package/dist/bin/git-sweep.js +272 -16
- package/dist/bin/graph-backfill.js +150 -7
- package/dist/bin/graph-export.js +150 -7
- package/dist/bin/install.js +5 -0
- package/dist/bin/scan-tasks.js +238 -19
- package/dist/bin/setup.js +1776 -10
- package/dist/bin/shard-migrate.js +150 -7
- package/dist/bin/update.js +9 -6
- package/dist/bin/wiki-sync.js +150 -7
- package/dist/gateway/index.js +470 -62
- package/dist/hooks/bug-report-worker.js +195 -35
- package/dist/hooks/commit-complete.js +272 -16
- package/dist/hooks/error-recall.js +2313 -1847
- package/dist/hooks/exe-heartbeat-hook.js +5 -0
- package/dist/hooks/ingest-worker.js +330 -58
- package/dist/hooks/ingest.js +11 -0
- package/dist/hooks/instructions-loaded.js +199 -10
- package/dist/hooks/notification.js +199 -10
- package/dist/hooks/post-compact.js +199 -10
- package/dist/hooks/pre-compact.js +199 -10
- package/dist/hooks/pre-tool-use.js +199 -10
- package/dist/hooks/prompt-ingest-worker.js +179 -14
- package/dist/hooks/prompt-submit.js +781 -285
- package/dist/hooks/response-ingest-worker.js +1900 -1405
- package/dist/hooks/session-end.js +456 -12
- package/dist/hooks/session-start.js +2188 -1724
- package/dist/hooks/stop.js +200 -10
- package/dist/hooks/subagent-stop.js +199 -10
- package/dist/hooks/summary-worker.js +604 -334
- package/dist/index.js +554 -61
- package/dist/lib/cloud-sync.js +5 -0
- package/dist/lib/config.js +13 -0
- package/dist/lib/consolidation.js +5 -0
- package/dist/lib/database.js +104 -0
- package/dist/lib/device-registry.js +109 -0
- package/dist/lib/embedder.js +13 -0
- package/dist/lib/employee-templates.js +53 -26
- package/dist/lib/employees.js +5 -0
- package/dist/lib/exe-daemon-client.js +5 -0
- package/dist/lib/exe-daemon.js +493 -79
- package/dist/lib/file-grep.js +20 -4
- package/dist/lib/hybrid-search.js +1435 -190
- package/dist/lib/identity-templates.js +126 -5
- package/dist/lib/identity.js +5 -0
- package/dist/lib/license.js +5 -0
- package/dist/lib/messaging.js +37 -24
- package/dist/lib/schedules.js +130 -1
- package/dist/lib/skill-learning.js +11 -0
- package/dist/lib/status-brief.js +5 -0
- package/dist/lib/store.js +199 -10
- package/dist/lib/task-router.js +72 -6
- package/dist/lib/tasks.js +179 -50
- package/dist/lib/tmux-routing.js +179 -46
- package/dist/mcp/server.js +2129 -1855
- package/dist/mcp/tools/create-task.js +86 -36
- package/dist/mcp/tools/deactivate-behavior.js +5 -0
- package/dist/mcp/tools/list-tasks.js +39 -11
- package/dist/mcp/tools/send-message.js +37 -24
- package/dist/mcp/tools/update-task.js +153 -38
- package/dist/runtime/index.js +451 -59
- package/dist/tui/App.js +454 -59
- package/package.json +1 -1
|
@@ -81,6 +81,11 @@ function normalizeSessionLifecycle(raw) {
|
|
|
81
81
|
const userSL = raw.sessionLifecycle ?? {};
|
|
82
82
|
raw.sessionLifecycle = { ...defaultSL, ...userSL };
|
|
83
83
|
}
|
|
84
|
+
function normalizeAutoUpdate(raw) {
|
|
85
|
+
const defaultAU = DEFAULT_CONFIG.autoUpdate;
|
|
86
|
+
const userAU = raw.autoUpdate ?? {};
|
|
87
|
+
raw.autoUpdate = { ...defaultAU, ...userAU };
|
|
88
|
+
}
|
|
84
89
|
async function loadConfig() {
|
|
85
90
|
const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
|
|
86
91
|
await mkdir2(dir, { recursive: true });
|
|
@@ -103,6 +108,7 @@ async function loadConfig() {
|
|
|
103
108
|
}
|
|
104
109
|
normalizeScalingRoadmap(migratedCfg);
|
|
105
110
|
normalizeSessionLifecycle(migratedCfg);
|
|
111
|
+
normalizeAutoUpdate(migratedCfg);
|
|
106
112
|
const config = { ...DEFAULT_CONFIG, dbPath: path2.join(dir, "memories.db"), ...migratedCfg };
|
|
107
113
|
if (config.dbPath.startsWith("~")) {
|
|
108
114
|
config.dbPath = config.dbPath.replace(/^~/, os.homedir());
|
|
@@ -178,6 +184,11 @@ var init_config = __esm({
|
|
|
178
184
|
idleKillTicksRequired: 3,
|
|
179
185
|
idleKillIntercomAckWindowMs: 1e4,
|
|
180
186
|
maxAutoInstances: 10
|
|
187
|
+
},
|
|
188
|
+
autoUpdate: {
|
|
189
|
+
checkOnBoot: true,
|
|
190
|
+
autoInstall: false,
|
|
191
|
+
checkIntervalMs: 24 * 60 * 60 * 1e3
|
|
181
192
|
}
|
|
182
193
|
};
|
|
183
194
|
CONFIG_MIGRATIONS = [
|
|
@@ -311,13 +322,27 @@ async function ensureShardSchema(client) {
|
|
|
311
322
|
"ALTER TABLE memories ADD COLUMN document_id TEXT",
|
|
312
323
|
"ALTER TABLE memories ADD COLUMN user_id TEXT",
|
|
313
324
|
"ALTER TABLE memories ADD COLUMN char_offset INTEGER",
|
|
314
|
-
"ALTER TABLE memories ADD COLUMN page_number INTEGER"
|
|
325
|
+
"ALTER TABLE memories ADD COLUMN page_number INTEGER",
|
|
326
|
+
// Source provenance columns (must match database.ts)
|
|
327
|
+
"ALTER TABLE memories ADD COLUMN source_path TEXT",
|
|
328
|
+
"ALTER TABLE memories ADD COLUMN source_type TEXT DEFAULT 'text'",
|
|
329
|
+
"ALTER TABLE memories ADD COLUMN tier INTEGER DEFAULT 3",
|
|
330
|
+
"ALTER TABLE memories ADD COLUMN supersedes_id TEXT"
|
|
315
331
|
]) {
|
|
316
332
|
try {
|
|
317
333
|
await client.execute(col);
|
|
318
334
|
} catch {
|
|
319
335
|
}
|
|
320
336
|
}
|
|
337
|
+
for (const idx of [
|
|
338
|
+
"CREATE INDEX IF NOT EXISTS idx_memories_tier ON memories(tier)",
|
|
339
|
+
"CREATE INDEX IF NOT EXISTS idx_memories_supersedes ON memories(supersedes_id) WHERE supersedes_id IS NOT NULL"
|
|
340
|
+
]) {
|
|
341
|
+
try {
|
|
342
|
+
await client.execute(idx);
|
|
343
|
+
} catch {
|
|
344
|
+
}
|
|
345
|
+
}
|
|
321
346
|
try {
|
|
322
347
|
await client.execute("CREATE INDEX IF NOT EXISTS idx_memories_status ON memories(status)");
|
|
323
348
|
} catch {
|
|
@@ -631,6 +656,27 @@ async function ensureSchema() {
|
|
|
631
656
|
});
|
|
632
657
|
} catch {
|
|
633
658
|
}
|
|
659
|
+
try {
|
|
660
|
+
await client.execute({
|
|
661
|
+
sql: `ALTER TABLE tasks ADD COLUMN checkpoint TEXT`,
|
|
662
|
+
args: []
|
|
663
|
+
});
|
|
664
|
+
} catch {
|
|
665
|
+
}
|
|
666
|
+
try {
|
|
667
|
+
await client.execute({
|
|
668
|
+
sql: `ALTER TABLE tasks ADD COLUMN checkpoint_count INTEGER NOT NULL DEFAULT 0`,
|
|
669
|
+
args: []
|
|
670
|
+
});
|
|
671
|
+
} catch {
|
|
672
|
+
}
|
|
673
|
+
try {
|
|
674
|
+
await client.execute({
|
|
675
|
+
sql: `ALTER TABLE tasks ADD COLUMN complexity TEXT NOT NULL DEFAULT 'standard'`,
|
|
676
|
+
args: []
|
|
677
|
+
});
|
|
678
|
+
} catch {
|
|
679
|
+
}
|
|
634
680
|
try {
|
|
635
681
|
await client.execute({
|
|
636
682
|
sql: `ALTER TABLE memories ADD COLUMN task_id TEXT`,
|
|
@@ -1041,6 +1087,15 @@ async function ensureSchema() {
|
|
|
1041
1087
|
} catch {
|
|
1042
1088
|
}
|
|
1043
1089
|
}
|
|
1090
|
+
for (const col of [
|
|
1091
|
+
"ALTER TABLE memories ADD COLUMN source_path TEXT",
|
|
1092
|
+
"ALTER TABLE memories ADD COLUMN source_type TEXT DEFAULT 'text'"
|
|
1093
|
+
]) {
|
|
1094
|
+
try {
|
|
1095
|
+
await client.execute(col);
|
|
1096
|
+
} catch {
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1044
1099
|
await client.executeMultiple(`
|
|
1045
1100
|
CREATE INDEX IF NOT EXISTS idx_memories_workspace
|
|
1046
1101
|
ON memories(workspace_id);
|
|
@@ -1105,6 +1160,34 @@ async function ensureSchema() {
|
|
|
1105
1160
|
CREATE INDEX IF NOT EXISTS idx_conversations_channel
|
|
1106
1161
|
ON conversations(channel_id);
|
|
1107
1162
|
`);
|
|
1163
|
+
try {
|
|
1164
|
+
await client.execute({
|
|
1165
|
+
sql: `ALTER TABLE tasks ADD COLUMN budget_tokens INTEGER`,
|
|
1166
|
+
args: []
|
|
1167
|
+
});
|
|
1168
|
+
} catch {
|
|
1169
|
+
}
|
|
1170
|
+
try {
|
|
1171
|
+
await client.execute({
|
|
1172
|
+
sql: `ALTER TABLE tasks ADD COLUMN budget_fallback_model TEXT`,
|
|
1173
|
+
args: []
|
|
1174
|
+
});
|
|
1175
|
+
} catch {
|
|
1176
|
+
}
|
|
1177
|
+
try {
|
|
1178
|
+
await client.execute({
|
|
1179
|
+
sql: `ALTER TABLE tasks ADD COLUMN tokens_used INTEGER DEFAULT 0`,
|
|
1180
|
+
args: []
|
|
1181
|
+
});
|
|
1182
|
+
} catch {
|
|
1183
|
+
}
|
|
1184
|
+
try {
|
|
1185
|
+
await client.execute({
|
|
1186
|
+
sql: `ALTER TABLE tasks ADD COLUMN tokens_warned_at INTEGER`,
|
|
1187
|
+
args: []
|
|
1188
|
+
});
|
|
1189
|
+
} catch {
|
|
1190
|
+
}
|
|
1108
1191
|
await client.executeMultiple(`
|
|
1109
1192
|
CREATE VIRTUAL TABLE IF NOT EXISTS conversations_fts USING fts5(
|
|
1110
1193
|
content_text,
|
|
@@ -1131,6 +1214,52 @@ async function ensureSchema() {
|
|
|
1131
1214
|
VALUES (new.rowid, new.content_text, new.sender_name, new.agent_response);
|
|
1132
1215
|
END;
|
|
1133
1216
|
`);
|
|
1217
|
+
try {
|
|
1218
|
+
await client.execute({
|
|
1219
|
+
sql: `ALTER TABLE memories ADD COLUMN tier INTEGER DEFAULT 3`,
|
|
1220
|
+
args: []
|
|
1221
|
+
});
|
|
1222
|
+
} catch {
|
|
1223
|
+
}
|
|
1224
|
+
try {
|
|
1225
|
+
await client.execute(
|
|
1226
|
+
`CREATE INDEX IF NOT EXISTS idx_memories_tier ON memories(tier)`
|
|
1227
|
+
);
|
|
1228
|
+
} catch {
|
|
1229
|
+
}
|
|
1230
|
+
try {
|
|
1231
|
+
await client.execute({
|
|
1232
|
+
sql: `UPDATE memories SET tier = 1 WHERE tool_name = 'commit_to_long_term_memory' AND importance >= 8 AND tier = 3`,
|
|
1233
|
+
args: []
|
|
1234
|
+
});
|
|
1235
|
+
await client.execute({
|
|
1236
|
+
sql: `UPDATE memories SET tier = 2 WHERE tool_name IN ('store_memory', 'manual') AND importance >= 5 AND tier = 3`,
|
|
1237
|
+
args: []
|
|
1238
|
+
});
|
|
1239
|
+
} catch {
|
|
1240
|
+
}
|
|
1241
|
+
try {
|
|
1242
|
+
await client.execute({
|
|
1243
|
+
sql: `ALTER TABLE memories ADD COLUMN supersedes_id TEXT`,
|
|
1244
|
+
args: []
|
|
1245
|
+
});
|
|
1246
|
+
} catch {
|
|
1247
|
+
}
|
|
1248
|
+
try {
|
|
1249
|
+
await client.execute(
|
|
1250
|
+
`CREATE INDEX IF NOT EXISTS idx_memories_supersedes ON memories(supersedes_id) WHERE supersedes_id IS NOT NULL`
|
|
1251
|
+
);
|
|
1252
|
+
} catch {
|
|
1253
|
+
}
|
|
1254
|
+
for (const col of [
|
|
1255
|
+
"ALTER TABLE tasks ADD COLUMN checkpoint TEXT",
|
|
1256
|
+
"ALTER TABLE tasks ADD COLUMN checkpoint_count INTEGER DEFAULT 0"
|
|
1257
|
+
]) {
|
|
1258
|
+
try {
|
|
1259
|
+
await client.execute(col);
|
|
1260
|
+
} catch {
|
|
1261
|
+
}
|
|
1262
|
+
}
|
|
1134
1263
|
}
|
|
1135
1264
|
var disposeTurso = disposeDatabase;
|
|
1136
1265
|
async function disposeDatabase() {
|
|
@@ -1246,20 +1375,26 @@ async function flushBatch() {
|
|
|
1246
1375
|
const userId = row.user_id ?? null;
|
|
1247
1376
|
const charOffset = row.char_offset ?? null;
|
|
1248
1377
|
const pageNumber = row.page_number ?? null;
|
|
1378
|
+
const sourcePath = row.source_path ?? null;
|
|
1379
|
+
const sourceType = row.source_type ?? null;
|
|
1380
|
+
const tier = row.tier ?? 3;
|
|
1381
|
+
const supersedesId = row.supersedes_id ?? null;
|
|
1249
1382
|
return {
|
|
1250
1383
|
sql: hasVector ? `INSERT OR IGNORE INTO memories
|
|
1251
1384
|
(id, agent_id, agent_role, session_id, timestamp,
|
|
1252
1385
|
tool_name, project_name,
|
|
1253
1386
|
has_error, raw_text, vector, version, task_id, importance, status,
|
|
1254
1387
|
confidence, last_accessed,
|
|
1255
|
-
workspace_id, document_id, user_id, char_offset, page_number
|
|
1256
|
-
|
|
1388
|
+
workspace_id, document_id, user_id, char_offset, page_number,
|
|
1389
|
+
source_path, source_type, tier, supersedes_id)
|
|
1390
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, vector32(?), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)` : `INSERT OR IGNORE INTO memories
|
|
1257
1391
|
(id, agent_id, agent_role, session_id, timestamp,
|
|
1258
1392
|
tool_name, project_name,
|
|
1259
1393
|
has_error, raw_text, vector, version, task_id, importance, status,
|
|
1260
1394
|
confidence, last_accessed,
|
|
1261
|
-
workspace_id, document_id, user_id, char_offset, page_number
|
|
1262
|
-
|
|
1395
|
+
workspace_id, document_id, user_id, char_offset, page_number,
|
|
1396
|
+
source_path, source_type, tier, supersedes_id)
|
|
1397
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
1263
1398
|
args: hasVector ? [
|
|
1264
1399
|
row.id,
|
|
1265
1400
|
row.agent_id,
|
|
@@ -1281,7 +1416,11 @@ async function flushBatch() {
|
|
|
1281
1416
|
documentId,
|
|
1282
1417
|
userId,
|
|
1283
1418
|
charOffset,
|
|
1284
|
-
pageNumber
|
|
1419
|
+
pageNumber,
|
|
1420
|
+
sourcePath,
|
|
1421
|
+
sourceType,
|
|
1422
|
+
tier,
|
|
1423
|
+
supersedesId
|
|
1285
1424
|
] : [
|
|
1286
1425
|
row.id,
|
|
1287
1426
|
row.agent_id,
|
|
@@ -1302,7 +1441,11 @@ async function flushBatch() {
|
|
|
1302
1441
|
documentId,
|
|
1303
1442
|
userId,
|
|
1304
1443
|
charOffset,
|
|
1305
|
-
pageNumber
|
|
1444
|
+
pageNumber,
|
|
1445
|
+
sourcePath,
|
|
1446
|
+
sourceType,
|
|
1447
|
+
tier,
|
|
1448
|
+
supersedesId
|
|
1306
1449
|
]
|
|
1307
1450
|
};
|
|
1308
1451
|
};
|
package/dist/bin/graph-export.js
CHANGED
|
@@ -81,6 +81,11 @@ function normalizeSessionLifecycle(raw) {
|
|
|
81
81
|
const userSL = raw.sessionLifecycle ?? {};
|
|
82
82
|
raw.sessionLifecycle = { ...defaultSL, ...userSL };
|
|
83
83
|
}
|
|
84
|
+
function normalizeAutoUpdate(raw) {
|
|
85
|
+
const defaultAU = DEFAULT_CONFIG.autoUpdate;
|
|
86
|
+
const userAU = raw.autoUpdate ?? {};
|
|
87
|
+
raw.autoUpdate = { ...defaultAU, ...userAU };
|
|
88
|
+
}
|
|
84
89
|
async function loadConfig() {
|
|
85
90
|
const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
|
|
86
91
|
await mkdir2(dir, { recursive: true });
|
|
@@ -103,6 +108,7 @@ async function loadConfig() {
|
|
|
103
108
|
}
|
|
104
109
|
normalizeScalingRoadmap(migratedCfg);
|
|
105
110
|
normalizeSessionLifecycle(migratedCfg);
|
|
111
|
+
normalizeAutoUpdate(migratedCfg);
|
|
106
112
|
const config = { ...DEFAULT_CONFIG, dbPath: path2.join(dir, "memories.db"), ...migratedCfg };
|
|
107
113
|
if (config.dbPath.startsWith("~")) {
|
|
108
114
|
config.dbPath = config.dbPath.replace(/^~/, os.homedir());
|
|
@@ -178,6 +184,11 @@ var init_config = __esm({
|
|
|
178
184
|
idleKillTicksRequired: 3,
|
|
179
185
|
idleKillIntercomAckWindowMs: 1e4,
|
|
180
186
|
maxAutoInstances: 10
|
|
187
|
+
},
|
|
188
|
+
autoUpdate: {
|
|
189
|
+
checkOnBoot: true,
|
|
190
|
+
autoInstall: false,
|
|
191
|
+
checkIntervalMs: 24 * 60 * 60 * 1e3
|
|
181
192
|
}
|
|
182
193
|
};
|
|
183
194
|
CONFIG_MIGRATIONS = [
|
|
@@ -311,13 +322,27 @@ async function ensureShardSchema(client) {
|
|
|
311
322
|
"ALTER TABLE memories ADD COLUMN document_id TEXT",
|
|
312
323
|
"ALTER TABLE memories ADD COLUMN user_id TEXT",
|
|
313
324
|
"ALTER TABLE memories ADD COLUMN char_offset INTEGER",
|
|
314
|
-
"ALTER TABLE memories ADD COLUMN page_number INTEGER"
|
|
325
|
+
"ALTER TABLE memories ADD COLUMN page_number INTEGER",
|
|
326
|
+
// Source provenance columns (must match database.ts)
|
|
327
|
+
"ALTER TABLE memories ADD COLUMN source_path TEXT",
|
|
328
|
+
"ALTER TABLE memories ADD COLUMN source_type TEXT DEFAULT 'text'",
|
|
329
|
+
"ALTER TABLE memories ADD COLUMN tier INTEGER DEFAULT 3",
|
|
330
|
+
"ALTER TABLE memories ADD COLUMN supersedes_id TEXT"
|
|
315
331
|
]) {
|
|
316
332
|
try {
|
|
317
333
|
await client.execute(col);
|
|
318
334
|
} catch {
|
|
319
335
|
}
|
|
320
336
|
}
|
|
337
|
+
for (const idx of [
|
|
338
|
+
"CREATE INDEX IF NOT EXISTS idx_memories_tier ON memories(tier)",
|
|
339
|
+
"CREATE INDEX IF NOT EXISTS idx_memories_supersedes ON memories(supersedes_id) WHERE supersedes_id IS NOT NULL"
|
|
340
|
+
]) {
|
|
341
|
+
try {
|
|
342
|
+
await client.execute(idx);
|
|
343
|
+
} catch {
|
|
344
|
+
}
|
|
345
|
+
}
|
|
321
346
|
try {
|
|
322
347
|
await client.execute("CREATE INDEX IF NOT EXISTS idx_memories_status ON memories(status)");
|
|
323
348
|
} catch {
|
|
@@ -635,6 +660,27 @@ async function ensureSchema() {
|
|
|
635
660
|
});
|
|
636
661
|
} catch {
|
|
637
662
|
}
|
|
663
|
+
try {
|
|
664
|
+
await client.execute({
|
|
665
|
+
sql: `ALTER TABLE tasks ADD COLUMN checkpoint TEXT`,
|
|
666
|
+
args: []
|
|
667
|
+
});
|
|
668
|
+
} catch {
|
|
669
|
+
}
|
|
670
|
+
try {
|
|
671
|
+
await client.execute({
|
|
672
|
+
sql: `ALTER TABLE tasks ADD COLUMN checkpoint_count INTEGER NOT NULL DEFAULT 0`,
|
|
673
|
+
args: []
|
|
674
|
+
});
|
|
675
|
+
} catch {
|
|
676
|
+
}
|
|
677
|
+
try {
|
|
678
|
+
await client.execute({
|
|
679
|
+
sql: `ALTER TABLE tasks ADD COLUMN complexity TEXT NOT NULL DEFAULT 'standard'`,
|
|
680
|
+
args: []
|
|
681
|
+
});
|
|
682
|
+
} catch {
|
|
683
|
+
}
|
|
638
684
|
try {
|
|
639
685
|
await client.execute({
|
|
640
686
|
sql: `ALTER TABLE memories ADD COLUMN task_id TEXT`,
|
|
@@ -1045,6 +1091,15 @@ async function ensureSchema() {
|
|
|
1045
1091
|
} catch {
|
|
1046
1092
|
}
|
|
1047
1093
|
}
|
|
1094
|
+
for (const col of [
|
|
1095
|
+
"ALTER TABLE memories ADD COLUMN source_path TEXT",
|
|
1096
|
+
"ALTER TABLE memories ADD COLUMN source_type TEXT DEFAULT 'text'"
|
|
1097
|
+
]) {
|
|
1098
|
+
try {
|
|
1099
|
+
await client.execute(col);
|
|
1100
|
+
} catch {
|
|
1101
|
+
}
|
|
1102
|
+
}
|
|
1048
1103
|
await client.executeMultiple(`
|
|
1049
1104
|
CREATE INDEX IF NOT EXISTS idx_memories_workspace
|
|
1050
1105
|
ON memories(workspace_id);
|
|
@@ -1109,6 +1164,34 @@ async function ensureSchema() {
|
|
|
1109
1164
|
CREATE INDEX IF NOT EXISTS idx_conversations_channel
|
|
1110
1165
|
ON conversations(channel_id);
|
|
1111
1166
|
`);
|
|
1167
|
+
try {
|
|
1168
|
+
await client.execute({
|
|
1169
|
+
sql: `ALTER TABLE tasks ADD COLUMN budget_tokens INTEGER`,
|
|
1170
|
+
args: []
|
|
1171
|
+
});
|
|
1172
|
+
} catch {
|
|
1173
|
+
}
|
|
1174
|
+
try {
|
|
1175
|
+
await client.execute({
|
|
1176
|
+
sql: `ALTER TABLE tasks ADD COLUMN budget_fallback_model TEXT`,
|
|
1177
|
+
args: []
|
|
1178
|
+
});
|
|
1179
|
+
} catch {
|
|
1180
|
+
}
|
|
1181
|
+
try {
|
|
1182
|
+
await client.execute({
|
|
1183
|
+
sql: `ALTER TABLE tasks ADD COLUMN tokens_used INTEGER DEFAULT 0`,
|
|
1184
|
+
args: []
|
|
1185
|
+
});
|
|
1186
|
+
} catch {
|
|
1187
|
+
}
|
|
1188
|
+
try {
|
|
1189
|
+
await client.execute({
|
|
1190
|
+
sql: `ALTER TABLE tasks ADD COLUMN tokens_warned_at INTEGER`,
|
|
1191
|
+
args: []
|
|
1192
|
+
});
|
|
1193
|
+
} catch {
|
|
1194
|
+
}
|
|
1112
1195
|
await client.executeMultiple(`
|
|
1113
1196
|
CREATE VIRTUAL TABLE IF NOT EXISTS conversations_fts USING fts5(
|
|
1114
1197
|
content_text,
|
|
@@ -1135,6 +1218,52 @@ async function ensureSchema() {
|
|
|
1135
1218
|
VALUES (new.rowid, new.content_text, new.sender_name, new.agent_response);
|
|
1136
1219
|
END;
|
|
1137
1220
|
`);
|
|
1221
|
+
try {
|
|
1222
|
+
await client.execute({
|
|
1223
|
+
sql: `ALTER TABLE memories ADD COLUMN tier INTEGER DEFAULT 3`,
|
|
1224
|
+
args: []
|
|
1225
|
+
});
|
|
1226
|
+
} catch {
|
|
1227
|
+
}
|
|
1228
|
+
try {
|
|
1229
|
+
await client.execute(
|
|
1230
|
+
`CREATE INDEX IF NOT EXISTS idx_memories_tier ON memories(tier)`
|
|
1231
|
+
);
|
|
1232
|
+
} catch {
|
|
1233
|
+
}
|
|
1234
|
+
try {
|
|
1235
|
+
await client.execute({
|
|
1236
|
+
sql: `UPDATE memories SET tier = 1 WHERE tool_name = 'commit_to_long_term_memory' AND importance >= 8 AND tier = 3`,
|
|
1237
|
+
args: []
|
|
1238
|
+
});
|
|
1239
|
+
await client.execute({
|
|
1240
|
+
sql: `UPDATE memories SET tier = 2 WHERE tool_name IN ('store_memory', 'manual') AND importance >= 5 AND tier = 3`,
|
|
1241
|
+
args: []
|
|
1242
|
+
});
|
|
1243
|
+
} catch {
|
|
1244
|
+
}
|
|
1245
|
+
try {
|
|
1246
|
+
await client.execute({
|
|
1247
|
+
sql: `ALTER TABLE memories ADD COLUMN supersedes_id TEXT`,
|
|
1248
|
+
args: []
|
|
1249
|
+
});
|
|
1250
|
+
} catch {
|
|
1251
|
+
}
|
|
1252
|
+
try {
|
|
1253
|
+
await client.execute(
|
|
1254
|
+
`CREATE INDEX IF NOT EXISTS idx_memories_supersedes ON memories(supersedes_id) WHERE supersedes_id IS NOT NULL`
|
|
1255
|
+
);
|
|
1256
|
+
} catch {
|
|
1257
|
+
}
|
|
1258
|
+
for (const col of [
|
|
1259
|
+
"ALTER TABLE tasks ADD COLUMN checkpoint TEXT",
|
|
1260
|
+
"ALTER TABLE tasks ADD COLUMN checkpoint_count INTEGER DEFAULT 0"
|
|
1261
|
+
]) {
|
|
1262
|
+
try {
|
|
1263
|
+
await client.execute(col);
|
|
1264
|
+
} catch {
|
|
1265
|
+
}
|
|
1266
|
+
}
|
|
1138
1267
|
}
|
|
1139
1268
|
var disposeTurso = disposeDatabase;
|
|
1140
1269
|
async function disposeDatabase() {
|
|
@@ -1250,20 +1379,26 @@ async function flushBatch() {
|
|
|
1250
1379
|
const userId = row.user_id ?? null;
|
|
1251
1380
|
const charOffset = row.char_offset ?? null;
|
|
1252
1381
|
const pageNumber = row.page_number ?? null;
|
|
1382
|
+
const sourcePath = row.source_path ?? null;
|
|
1383
|
+
const sourceType = row.source_type ?? null;
|
|
1384
|
+
const tier = row.tier ?? 3;
|
|
1385
|
+
const supersedesId = row.supersedes_id ?? null;
|
|
1253
1386
|
return {
|
|
1254
1387
|
sql: hasVector ? `INSERT OR IGNORE INTO memories
|
|
1255
1388
|
(id, agent_id, agent_role, session_id, timestamp,
|
|
1256
1389
|
tool_name, project_name,
|
|
1257
1390
|
has_error, raw_text, vector, version, task_id, importance, status,
|
|
1258
1391
|
confidence, last_accessed,
|
|
1259
|
-
workspace_id, document_id, user_id, char_offset, page_number
|
|
1260
|
-
|
|
1392
|
+
workspace_id, document_id, user_id, char_offset, page_number,
|
|
1393
|
+
source_path, source_type, tier, supersedes_id)
|
|
1394
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, vector32(?), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)` : `INSERT OR IGNORE INTO memories
|
|
1261
1395
|
(id, agent_id, agent_role, session_id, timestamp,
|
|
1262
1396
|
tool_name, project_name,
|
|
1263
1397
|
has_error, raw_text, vector, version, task_id, importance, status,
|
|
1264
1398
|
confidence, last_accessed,
|
|
1265
|
-
workspace_id, document_id, user_id, char_offset, page_number
|
|
1266
|
-
|
|
1399
|
+
workspace_id, document_id, user_id, char_offset, page_number,
|
|
1400
|
+
source_path, source_type, tier, supersedes_id)
|
|
1401
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
1267
1402
|
args: hasVector ? [
|
|
1268
1403
|
row.id,
|
|
1269
1404
|
row.agent_id,
|
|
@@ -1285,7 +1420,11 @@ async function flushBatch() {
|
|
|
1285
1420
|
documentId,
|
|
1286
1421
|
userId,
|
|
1287
1422
|
charOffset,
|
|
1288
|
-
pageNumber
|
|
1423
|
+
pageNumber,
|
|
1424
|
+
sourcePath,
|
|
1425
|
+
sourceType,
|
|
1426
|
+
tier,
|
|
1427
|
+
supersedesId
|
|
1289
1428
|
] : [
|
|
1290
1429
|
row.id,
|
|
1291
1430
|
row.agent_id,
|
|
@@ -1306,7 +1445,11 @@ async function flushBatch() {
|
|
|
1306
1445
|
documentId,
|
|
1307
1446
|
userId,
|
|
1308
1447
|
charOffset,
|
|
1309
|
-
pageNumber
|
|
1448
|
+
pageNumber,
|
|
1449
|
+
sourcePath,
|
|
1450
|
+
sourceType,
|
|
1451
|
+
tier,
|
|
1452
|
+
supersedesId
|
|
1310
1453
|
]
|
|
1311
1454
|
};
|
|
1312
1455
|
};
|
package/dist/bin/install.js
CHANGED