@zmzai/agent-framework 0.4.1 → 0.5.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/dist/adapters/subprocess-sandbox.d.ts.map +1 -1
- package/dist/adapters/subprocess-sandbox.js +77 -6
- package/dist/adapters/subprocess-sandbox.js.map +1 -1
- package/dist/adapters/terminal-backend.d.ts +14 -0
- package/dist/adapters/terminal-backend.d.ts.map +1 -1
- package/dist/adapters/terminal-backend.js +48 -9
- package/dist/adapters/terminal-backend.js.map +1 -1
- package/dist/core/events/bus.d.ts.map +1 -1
- package/dist/core/events/bus.js +17 -8
- package/dist/core/events/bus.js.map +1 -1
- package/dist/core/events/sqlite-event-log.d.ts.map +1 -1
- package/dist/core/events/sqlite-event-log.js +24 -11
- package/dist/core/events/sqlite-event-log.js.map +1 -1
- package/dist/core/mcp/client.js +13 -3
- package/dist/core/mcp/client.js.map +1 -1
- package/dist/core/runtime/attachments.d.ts +14 -0
- package/dist/core/runtime/attachments.d.ts.map +1 -0
- package/dist/core/runtime/attachments.js +29 -0
- package/dist/core/runtime/attachments.js.map +1 -0
- package/dist/core/runtime/lease-recovery.d.ts.map +1 -1
- package/dist/core/runtime/lease-recovery.js +18 -3
- package/dist/core/runtime/lease-recovery.js.map +1 -1
- package/dist/core/runtime/pi-bridge.d.ts +2 -1
- package/dist/core/runtime/pi-bridge.d.ts.map +1 -1
- package/dist/core/runtime/pi-bridge.js +7 -1
- package/dist/core/runtime/pi-bridge.js.map +1 -1
- package/dist/core/runtime/runner.d.ts +9 -1
- package/dist/core/runtime/runner.d.ts.map +1 -1
- package/dist/core/runtime/runner.js +141 -24
- package/dist/core/runtime/runner.js.map +1 -1
- package/dist/core/session/message-search.d.ts +21 -0
- package/dist/core/session/message-search.d.ts.map +1 -0
- package/dist/core/session/message-search.js +33 -0
- package/dist/core/session/message-search.js.map +1 -0
- package/dist/core/session/sqlite-store.d.ts.map +1 -1
- package/dist/core/session/sqlite-store.js +359 -54
- package/dist/core/session/sqlite-store.js.map +1 -1
- package/dist/core/session/store.d.ts +57 -0
- package/dist/core/session/store.d.ts.map +1 -1
- package/dist/core/session/types.d.ts +11 -0
- package/dist/core/session/types.d.ts.map +1 -1
- package/dist/core/session/workflow.d.ts +35 -0
- package/dist/core/session/workflow.d.ts.map +1 -0
- package/dist/core/session/workflow.js +12 -0
- package/dist/core/session/workflow.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/server/create-server.d.ts +3 -0
- package/dist/server/create-server.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,12 +1,27 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, readdirSync, readFileSync } from "node:fs";
|
|
1
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { DatabaseSync } from "node:sqlite";
|
|
4
|
+
import { randomUUID } from "node:crypto";
|
|
5
|
+
import { promptHash } from "./workflow.js";
|
|
6
|
+
import { frameworkEventSchemas } from "../events/manifest.js";
|
|
7
|
+
import { newEventId } from "./ids.js";
|
|
8
|
+
import { searchablePart, searchSnippet } from "./message-search.js";
|
|
4
9
|
export function createSqliteSessionStore(options) {
|
|
5
10
|
const { dataDir } = options;
|
|
6
11
|
mkdirSync(dataDir, { recursive: true });
|
|
7
|
-
const
|
|
12
|
+
const databasePath = path.join(dataDir, "zmzai.db");
|
|
13
|
+
const existed = existsSync(databasePath);
|
|
14
|
+
const db = new DatabaseSync(databasePath);
|
|
8
15
|
// WAL:读写互不阻塞;busy_timeout:另一进程持写锁时本连接等待而非立即 SQLITE_BUSY
|
|
9
16
|
db.exec("PRAGMA journal_mode = WAL; PRAGMA busy_timeout = 5000; PRAGMA synchronous = NORMAL;");
|
|
17
|
+
const migrationVersion = 2;
|
|
18
|
+
const migrationRecorded = !!db.prepare("SELECT 1 FROM sqlite_master WHERE type='table' AND name='schema_migrations'").get()
|
|
19
|
+
&& !!db.prepare("SELECT 1 FROM schema_migrations WHERE version=?").get(migrationVersion);
|
|
20
|
+
if (existed && !migrationRecorded) {
|
|
21
|
+
const backupPath = `${databasePath}.pre-f0-v${migrationVersion}.bak`;
|
|
22
|
+
if (!existsSync(backupPath))
|
|
23
|
+
writeFileSync(backupPath, db.serialize());
|
|
24
|
+
}
|
|
10
25
|
db.exec(`
|
|
11
26
|
CREATE TABLE IF NOT EXISTS sessions (
|
|
12
27
|
id TEXT PRIMARY KEY,
|
|
@@ -19,6 +34,7 @@ export function createSqliteSessionStore(options) {
|
|
|
19
34
|
id TEXT PRIMARY KEY,
|
|
20
35
|
session_id TEXT NOT NULL,
|
|
21
36
|
created TEXT NOT NULL,
|
|
37
|
+
message_seq INTEGER,
|
|
22
38
|
json TEXT NOT NULL
|
|
23
39
|
);
|
|
24
40
|
CREATE TABLE IF NOT EXISTS parts (
|
|
@@ -29,7 +45,132 @@ export function createSqliteSessionStore(options) {
|
|
|
29
45
|
);
|
|
30
46
|
CREATE INDEX IF NOT EXISTS idx_messages_session ON messages (session_id, created);
|
|
31
47
|
CREATE INDEX IF NOT EXISTS idx_parts_message ON parts (message_id);
|
|
48
|
+
CREATE TABLE IF NOT EXISTS events (
|
|
49
|
+
session_id TEXT NOT NULL, seq INTEGER NOT NULL, id TEXT NOT NULL,
|
|
50
|
+
type TEXT NOT NULL, at TEXT NOT NULL, json TEXT NOT NULL,
|
|
51
|
+
PRIMARY KEY (session_id, seq)
|
|
52
|
+
);
|
|
53
|
+
CREATE INDEX IF NOT EXISTS idx_events_type ON events(session_id,type,seq);
|
|
54
|
+
CREATE TABLE IF NOT EXISTS message_search (
|
|
55
|
+
part_id TEXT PRIMARY KEY, session_id TEXT NOT NULL, message_id TEXT NOT NULL,
|
|
56
|
+
kind TEXT NOT NULL, content TEXT NOT NULL, normalized TEXT NOT NULL
|
|
57
|
+
);
|
|
58
|
+
CREATE INDEX IF NOT EXISTS idx_search_session ON message_search(session_id,message_id,part_id);
|
|
59
|
+
CREATE TABLE IF NOT EXISTS session_reads (session_id TEXT PRIMARY KEY, last_read_seq INTEGER NOT NULL DEFAULT 0);
|
|
32
60
|
`);
|
|
61
|
+
function transaction(body) {
|
|
62
|
+
if (db.isTransaction)
|
|
63
|
+
return body();
|
|
64
|
+
db.exec("BEGIN IMMEDIATE");
|
|
65
|
+
try {
|
|
66
|
+
const result = body();
|
|
67
|
+
db.exec("COMMIT");
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
db.exec("ROLLBACK");
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
transaction(() => {
|
|
76
|
+
const columns = db.prepare("PRAGMA table_info(messages)").all();
|
|
77
|
+
if (!columns.some(column => column.name === "message_seq"))
|
|
78
|
+
db.exec("ALTER TABLE messages ADD COLUMN message_seq INTEGER");
|
|
79
|
+
db.exec(`
|
|
80
|
+
CREATE TABLE IF NOT EXISTS session_history (session_id TEXT PRIMARY KEY, last_seq INTEGER NOT NULL DEFAULT 0, revision INTEGER NOT NULL DEFAULT 1);
|
|
81
|
+
CREATE TABLE IF NOT EXISTS schema_migrations (version INTEGER PRIMARY KEY, applied_at TEXT NOT NULL);
|
|
82
|
+
INSERT INTO session_history(session_id,last_seq) SELECT session_id,COALESCE(MAX(message_seq),0) FROM messages GROUP BY session_id ON CONFLICT(session_id) DO UPDATE SET last_seq=MAX(last_seq,excluded.last_seq);
|
|
83
|
+
`);
|
|
84
|
+
const missing = db.prepare("SELECT id,session_id FROM messages WHERE message_seq IS NULL ORDER BY created,id").all();
|
|
85
|
+
for (const row of missing)
|
|
86
|
+
db.prepare("UPDATE messages SET message_seq=? WHERE id=?").run(allocateSequence(row.session_id), row.id);
|
|
87
|
+
db.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_message_sequence ON messages(session_id,message_seq)");
|
|
88
|
+
db.exec(`CREATE TABLE IF NOT EXISTS workflow_runs (
|
|
89
|
+
run_id TEXT PRIMARY KEY, session_id TEXT NOT NULL, request_id TEXT NOT NULL, payload_hash TEXT NOT NULL,
|
|
90
|
+
payload TEXT NOT NULL, receipt TEXT NOT NULL, status TEXT NOT NULL, revision INTEGER NOT NULL DEFAULT 1,
|
|
91
|
+
ordinal INTEGER NOT NULL, owner TEXT, UNIQUE(session_id,request_id)
|
|
92
|
+
)`);
|
|
93
|
+
db.prepare("INSERT OR IGNORE INTO schema_migrations(version,applied_at) VALUES (?,?)").run(migrationVersion, new Date().toISOString());
|
|
94
|
+
if (!db.prepare("SELECT 1 FROM schema_migrations WHERE version=3").get()) {
|
|
95
|
+
for (const row of db.prepare("SELECT json FROM parts").iterate())
|
|
96
|
+
indexPart(JSON.parse(row.json));
|
|
97
|
+
db.prepare("INSERT INTO schema_migrations VALUES (3,?)").run(new Date().toISOString());
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
function indexPart(part) {
|
|
101
|
+
const item = searchablePart(part);
|
|
102
|
+
if (!item) {
|
|
103
|
+
db.prepare("DELETE FROM message_search WHERE part_id=?").run(part.id);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
db.prepare(`INSERT INTO message_search VALUES (?,?,?,?,?,?) ON CONFLICT(part_id) DO UPDATE SET
|
|
107
|
+
kind=excluded.kind,content=excluded.content,normalized=excluded.normalized`).run(part.id, part.sessionId, part.messageId, item.kind, item.text, item.text.toLowerCase());
|
|
108
|
+
}
|
|
109
|
+
function allocateSequence(sessionId) {
|
|
110
|
+
return db.prepare("INSERT INTO session_history(session_id,last_seq) VALUES (?,1) ON CONFLICT(session_id) DO UPDATE SET last_seq=last_seq+1 RETURNING last_seq").get(sessionId).last_seq;
|
|
111
|
+
}
|
|
112
|
+
function readState(sessionId) {
|
|
113
|
+
const historyRevision = db.prepare("SELECT revision FROM session_history WHERE session_id=?").get(sessionId)?.revision ?? 1;
|
|
114
|
+
const latestMessageSeq = db.prepare("SELECT COALESCE(MAX(message_seq),0) AS n FROM messages WHERE session_id=?").get(sessionId).n;
|
|
115
|
+
const stored = db.prepare("SELECT last_read_seq FROM session_reads WHERE session_id=?").get(sessionId)?.last_read_seq ?? 0;
|
|
116
|
+
const lastReadMessageSeq = Math.min(stored, latestMessageSeq);
|
|
117
|
+
const unreadCount = db.prepare(`SELECT COUNT(*) AS n FROM messages m WHERE m.session_id=? AND m.message_seq>? AND json_extract(m.json,'$.role')='assistant'
|
|
118
|
+
AND (json_extract(m.json,'$.error') IS NOT NULL OR EXISTS (SELECT 1 FROM parts p WHERE p.message_id=m.id AND (
|
|
119
|
+
(json_extract(p.json,'$.type')='text' AND length(trim(json_extract(p.json,'$.text')))>0)
|
|
120
|
+
OR json_extract(p.json,'$.type') IN ('tool','file','image','subtask','compaction')
|
|
121
|
+
)))`).get(sessionId, lastReadMessageSeq).n;
|
|
122
|
+
return { lastReadMessageSeq, unreadCount, latestMessageSeq, historyRevision };
|
|
123
|
+
}
|
|
124
|
+
function appendEvent(sessionId, event) {
|
|
125
|
+
const schema = frameworkEventSchemas[event.type];
|
|
126
|
+
const parsed = schema.safeParse(event.data);
|
|
127
|
+
if (!parsed.success)
|
|
128
|
+
throw new Error(`INVALID_FRAMEWORK_EVENT: ${event.type}`);
|
|
129
|
+
if (event.type === "message.updated") {
|
|
130
|
+
const data = parsed.data;
|
|
131
|
+
const row = db.prepare("SELECT message_seq FROM messages WHERE session_id=? AND id=?").get(sessionId, data.message.id);
|
|
132
|
+
if (row)
|
|
133
|
+
data.message = { ...data.message, messageSeq: row.message_seq };
|
|
134
|
+
}
|
|
135
|
+
const seq = db.prepare("SELECT COALESCE(MAX(seq),0)+1 AS n FROM events WHERE session_id=?").get(sessionId).n;
|
|
136
|
+
const persisted = { id: newEventId(), sessionId, seq, type: event.type, data: parsed.data, at: new Date().toISOString() };
|
|
137
|
+
db.prepare("INSERT INTO events(session_id,seq,id,type,at,json) VALUES (?,?,?,?,?,?)").run(sessionId, seq, persisted.id, persisted.type, persisted.at, JSON.stringify(persisted));
|
|
138
|
+
return persisted;
|
|
139
|
+
}
|
|
140
|
+
function readMessages(sessionId, before, limit) {
|
|
141
|
+
const messageRows = before === undefined
|
|
142
|
+
? db.prepare("SELECT message_seq,json FROM messages WHERE session_id=? ORDER BY message_seq ASC").all(sessionId)
|
|
143
|
+
: db.prepare("SELECT message_seq,json FROM messages WHERE session_id=? AND message_seq<? ORDER BY message_seq DESC LIMIT ?").all(sessionId, before, limit ?? 50);
|
|
144
|
+
const ordered = messageRows.sort((a, b) => a.message_seq - b.message_seq);
|
|
145
|
+
if (!ordered.length)
|
|
146
|
+
return [];
|
|
147
|
+
const ids = ordered.map(row => JSON.parse(row.json).id);
|
|
148
|
+
const placeholders = ids.map(() => "?").join(",");
|
|
149
|
+
const partRows = db.prepare(`SELECT message_id,json FROM parts WHERE message_id IN (${placeholders})`).all(...ids);
|
|
150
|
+
const partsByMessage = new Map();
|
|
151
|
+
for (const row of partRows) {
|
|
152
|
+
const list = partsByMessage.get(row.message_id) ?? [];
|
|
153
|
+
list.push(JSON.parse(row.json));
|
|
154
|
+
partsByMessage.set(row.message_id, list);
|
|
155
|
+
}
|
|
156
|
+
return ordered.map(row => {
|
|
157
|
+
const info = JSON.parse(row.json);
|
|
158
|
+
return { info, parts: partsByMessage.get(info.id) ?? [], messageSeq: row.message_seq };
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
function truncateMessages(sessionId, fromMessageId) {
|
|
162
|
+
const rows = db.prepare("SELECT id FROM messages WHERE session_id=? ORDER BY message_seq ASC").all(sessionId);
|
|
163
|
+
const idx = rows.findIndex(row => row.id === fromMessageId);
|
|
164
|
+
if (idx < 0)
|
|
165
|
+
throw new Error("MESSAGE_NOT_FOUND");
|
|
166
|
+
const doomed = rows.slice(idx).map(row => row.id);
|
|
167
|
+
const placeholders = doomed.map(() => "?").join(",");
|
|
168
|
+
db.prepare(`DELETE FROM message_search WHERE message_id IN (${placeholders})`).run(...doomed);
|
|
169
|
+
db.prepare(`DELETE FROM parts WHERE message_id IN (${placeholders})`).run(...doomed);
|
|
170
|
+
db.prepare(`DELETE FROM messages WHERE id IN (${placeholders})`).run(...doomed);
|
|
171
|
+
db.prepare("UPDATE session_history SET revision=revision+1 WHERE session_id=?").run(sessionId);
|
|
172
|
+
db.prepare("UPDATE session_reads SET last_read_seq=MIN(last_read_seq,(SELECT COALESCE(MAX(message_seq),0) FROM messages WHERE session_id=?)) WHERE session_id=?").run(sessionId, sessionId);
|
|
173
|
+
}
|
|
33
174
|
// ---- 旧 JSONL 一次性导入(幂等:仅当库为空且旧目录有数据) ----
|
|
34
175
|
if (options.importJsonl !== false && db.prepare("SELECT COUNT(*) AS n FROM sessions").get()?.n === 0) {
|
|
35
176
|
for (const [dir, table] of [
|
|
@@ -40,17 +181,21 @@ export function createSqliteSessionStore(options) {
|
|
|
40
181
|
const abs = path.join(dataDir, dir);
|
|
41
182
|
if (!existsSync(abs))
|
|
42
183
|
continue;
|
|
184
|
+
const records = [];
|
|
43
185
|
for (const file of readdirSync(abs)) {
|
|
44
186
|
if (!file.endsWith(".json"))
|
|
45
187
|
continue;
|
|
46
188
|
try {
|
|
47
|
-
|
|
48
|
-
upsert(table, record);
|
|
189
|
+
records.push(JSON.parse(readFileSync(path.join(abs, file), "utf8")));
|
|
49
190
|
}
|
|
50
191
|
catch {
|
|
51
192
|
// skip corrupt files
|
|
52
193
|
}
|
|
53
194
|
}
|
|
195
|
+
if (table === "messages")
|
|
196
|
+
records.sort((a, b) => String(a.time?.created ?? "").localeCompare(String(b.time?.created ?? "")) || a.id.localeCompare(b.id));
|
|
197
|
+
for (const record of records)
|
|
198
|
+
upsert(table, record);
|
|
54
199
|
}
|
|
55
200
|
}
|
|
56
201
|
function upsert(table, record) {
|
|
@@ -61,13 +206,20 @@ export function createSqliteSessionStore(options) {
|
|
|
61
206
|
}
|
|
62
207
|
else if (table === "messages") {
|
|
63
208
|
const m = record;
|
|
64
|
-
|
|
65
|
-
|
|
209
|
+
transaction(() => {
|
|
210
|
+
const existing = db.prepare("SELECT message_seq FROM messages WHERE id = ?").get(m.id);
|
|
211
|
+
const sequence = existing?.message_seq ?? allocateSequence(m.sessionId);
|
|
212
|
+
db.prepare("INSERT INTO messages (id, session_id, created, message_seq, json) VALUES (?, ?, ?, ?, ?) " +
|
|
213
|
+
"ON CONFLICT(id) DO UPDATE SET json = excluded.json").run(m.id, m.sessionId, m.time.created, sequence, JSON.stringify(m));
|
|
214
|
+
});
|
|
66
215
|
}
|
|
67
216
|
else {
|
|
68
217
|
const p = record;
|
|
69
|
-
|
|
70
|
-
"
|
|
218
|
+
transaction(() => {
|
|
219
|
+
db.prepare("INSERT INTO parts (id, session_id, message_id, json) VALUES (?, ?, ?, ?) " +
|
|
220
|
+
"ON CONFLICT(id) DO UPDATE SET json = excluded.json").run(p.id, p.sessionId, p.messageId, JSON.stringify(p));
|
|
221
|
+
indexPart(p);
|
|
222
|
+
});
|
|
71
223
|
}
|
|
72
224
|
}
|
|
73
225
|
function getSessionRow(id) {
|
|
@@ -78,8 +230,115 @@ export function createSqliteSessionStore(options) {
|
|
|
78
230
|
upsert("sessions", session);
|
|
79
231
|
}
|
|
80
232
|
return {
|
|
233
|
+
async getReadState(sessionId) { return transaction(() => readState(sessionId)); },
|
|
234
|
+
async markRead(sessionId, sequence, revision) {
|
|
235
|
+
return transaction(() => {
|
|
236
|
+
if (!getSessionRow(sessionId))
|
|
237
|
+
throw new Error("SESSION_NOT_FOUND");
|
|
238
|
+
const current = readState(sessionId);
|
|
239
|
+
if (revision !== current.historyRevision)
|
|
240
|
+
throw new Error("HISTORY_REVISION_CONFLICT");
|
|
241
|
+
if (!Number.isSafeInteger(sequence) || sequence < 0 || sequence > current.latestMessageSeq)
|
|
242
|
+
throw new Error("INVALID_READ_SEQUENCE");
|
|
243
|
+
db.prepare("INSERT INTO session_reads VALUES (?,?) ON CONFLICT(session_id) DO UPDATE SET last_read_seq=MAX(last_read_seq,excluded.last_read_seq)").run(sessionId, sequence);
|
|
244
|
+
return readState(sessionId);
|
|
245
|
+
});
|
|
246
|
+
},
|
|
247
|
+
async persistEvent(event) {
|
|
248
|
+
return transaction(() => {
|
|
249
|
+
if (event.type === "message.updated")
|
|
250
|
+
upsert("messages", event.data.message);
|
|
251
|
+
else if (event.type === "message.part.updated")
|
|
252
|
+
upsert("parts", event.data.part);
|
|
253
|
+
else if (event.type === "session.updated") {
|
|
254
|
+
const current = getSessionRow(event.data.session.id);
|
|
255
|
+
if (current)
|
|
256
|
+
persistSession({ ...current, ...event.data.session, time: { ...current.time, ...event.data.session.time } });
|
|
257
|
+
}
|
|
258
|
+
return appendEvent(event.sessionId, event);
|
|
259
|
+
});
|
|
260
|
+
},
|
|
261
|
+
workflow: {
|
|
262
|
+
async acceptPrompt(sessionId, input, events) {
|
|
263
|
+
return transaction(() => {
|
|
264
|
+
const hash = promptHash(input);
|
|
265
|
+
const prior = db.prepare("SELECT payload_hash,receipt FROM workflow_runs WHERE session_id=? AND request_id=?").get(sessionId, input.requestId);
|
|
266
|
+
if (prior) {
|
|
267
|
+
if (prior.payload_hash !== hash)
|
|
268
|
+
throw new Error("REQUEST_ID_REUSED");
|
|
269
|
+
return { receipt: JSON.parse(prior.receipt), events: [] };
|
|
270
|
+
}
|
|
271
|
+
if (!getSessionRow(sessionId))
|
|
272
|
+
throw new Error("SESSION_NOT_FOUND");
|
|
273
|
+
if (db.prepare("SELECT 1 FROM workflow_runs WHERE session_id=? AND status='recovery_required'").get(sessionId))
|
|
274
|
+
throw new Error("RECOVERY_REQUIRED");
|
|
275
|
+
const queued = !!db.prepare("SELECT 1 FROM workflow_runs WHERE session_id=? AND status IN ('running','queued')").get(sessionId);
|
|
276
|
+
const receipt = { ok: true, queued, requestId: input.requestId, runId: randomUUID(), userMessageId: events.message.id, disposition: queued ? "queued" : "started" };
|
|
277
|
+
upsert("messages", events.message);
|
|
278
|
+
for (const part of events.parts)
|
|
279
|
+
upsert("parts", part);
|
|
280
|
+
const persistedEvents = [
|
|
281
|
+
appendEvent(sessionId, { type: "message.updated", data: { message: events.message } }),
|
|
282
|
+
...events.parts.map(part => appendEvent(sessionId, { type: "message.part.updated", data: { part } })),
|
|
283
|
+
];
|
|
284
|
+
db.prepare("INSERT INTO workflow_runs(run_id,session_id,request_id,payload_hash,payload,receipt,status,ordinal) VALUES (?,?,?,?,?,?,'queued',?)").run(receipt.runId, sessionId, input.requestId, hash, JSON.stringify(input), JSON.stringify(receipt), db.prepare("SELECT COALESCE(MAX(ordinal),0)+1 AS n FROM workflow_runs WHERE session_id=?").get(sessionId).n);
|
|
285
|
+
return { receipt, events: persistedEvents };
|
|
286
|
+
});
|
|
287
|
+
},
|
|
288
|
+
async claimPrompt(sessionId, owner) {
|
|
289
|
+
return transaction(() => {
|
|
290
|
+
// Another process or an unconfirmed previous run owns this session.
|
|
291
|
+
if (db.prepare("SELECT 1 FROM workflow_runs WHERE session_id=? AND status IN ('running','recovery_required')").get(sessionId))
|
|
292
|
+
return null;
|
|
293
|
+
const row = db.prepare("SELECT * FROM workflow_runs WHERE session_id=? AND status='queued' ORDER BY ordinal LIMIT 1").get(sessionId);
|
|
294
|
+
if (!row)
|
|
295
|
+
return null;
|
|
296
|
+
db.prepare("UPDATE workflow_runs SET status='running',owner=?,revision=revision+1 WHERE run_id=?").run(owner, row.run_id);
|
|
297
|
+
const session = getSessionRow(sessionId);
|
|
298
|
+
if (session) {
|
|
299
|
+
session.leaseOwner = owner;
|
|
300
|
+
session.leaseExpiresAt = new Date(Date.now() + 10 * 60 * 1000).toISOString();
|
|
301
|
+
persistSession(session);
|
|
302
|
+
}
|
|
303
|
+
return { receipt: JSON.parse(row.receipt), input: JSON.parse(row.payload), status: "running", revision: row.revision + 1 };
|
|
304
|
+
});
|
|
305
|
+
},
|
|
306
|
+
async finishPrompt(sessionId, runId, revision, state) {
|
|
307
|
+
transaction(() => {
|
|
308
|
+
const updated = db.prepare("UPDATE workflow_runs SET status=?,revision=revision+1 WHERE session_id=? AND run_id=? AND revision=? AND status='running'").run(state, sessionId, runId, revision);
|
|
309
|
+
if (updated.changes !== 1)
|
|
310
|
+
throw new Error("RUN_REVISION_CONFLICT");
|
|
311
|
+
if (state === "failed")
|
|
312
|
+
db.prepare("UPDATE workflow_runs SET status='recovery_required',revision=revision+1 WHERE session_id=? AND status='queued'").run(sessionId);
|
|
313
|
+
const session = getSessionRow(sessionId);
|
|
314
|
+
if (session) {
|
|
315
|
+
delete session.leaseOwner;
|
|
316
|
+
delete session.leaseExpiresAt;
|
|
317
|
+
persistSession(session);
|
|
318
|
+
}
|
|
319
|
+
});
|
|
320
|
+
},
|
|
321
|
+
async recoverInterrupted(sessionId) {
|
|
322
|
+
db.prepare("UPDATE workflow_runs SET status='recovery_required',revision=revision+1 WHERE session_id=? AND status='running'").run(sessionId);
|
|
323
|
+
},
|
|
324
|
+
async workflowRuns(sessionId) {
|
|
325
|
+
return db.prepare("SELECT payload,receipt,status,revision FROM workflow_runs WHERE session_id=? ORDER BY ordinal").all(sessionId).map(row => ({ input: JSON.parse(row.payload), receipt: JSON.parse(row.receipt), status: row.status, revision: row.revision }));
|
|
326
|
+
},
|
|
327
|
+
async findPrompt(sessionId, requestId) {
|
|
328
|
+
const row = db.prepare("SELECT payload,receipt,status,revision FROM workflow_runs WHERE session_id=? AND request_id=?").get(sessionId, requestId);
|
|
329
|
+
return row ? { input: JSON.parse(row.payload), receipt: JSON.parse(row.receipt), status: row.status, revision: row.revision } : null;
|
|
330
|
+
},
|
|
331
|
+
},
|
|
81
332
|
async createSession(info) {
|
|
82
|
-
|
|
333
|
+
transaction(() => {
|
|
334
|
+
const existing = getSessionRow(info.id);
|
|
335
|
+
if (existing?.creationRequestId && info.creationRequestId === existing.creationRequestId) {
|
|
336
|
+
if (existing.creationPayloadHash !== info.creationPayloadHash)
|
|
337
|
+
throw new Error("REQUEST_ID_REUSED");
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
persistSession(info);
|
|
341
|
+
});
|
|
83
342
|
},
|
|
84
343
|
async getSession(id) {
|
|
85
344
|
const session = getSessionRow(id);
|
|
@@ -115,42 +374,82 @@ export function createSqliteSessionStore(options) {
|
|
|
115
374
|
upsert("parts", part);
|
|
116
375
|
},
|
|
117
376
|
async getMessages(sessionId) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
.prepare("SELECT
|
|
123
|
-
.
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
377
|
+
return transaction(() => readMessages(sessionId));
|
|
378
|
+
},
|
|
379
|
+
async searchMessages(sessionId, options) {
|
|
380
|
+
return transaction(() => {
|
|
381
|
+
const revision = db.prepare("SELECT revision FROM session_history WHERE session_id=?").get(sessionId)?.revision ?? 1;
|
|
382
|
+
if (options.revision !== undefined && options.revision !== revision)
|
|
383
|
+
throw new Error("HISTORY_REVISION_CONFLICT");
|
|
384
|
+
const query = options.query.trim();
|
|
385
|
+
if (!query)
|
|
386
|
+
return { results: [], revision, hasMore: false };
|
|
387
|
+
const limit = Math.max(1, Math.min(100, options.limit));
|
|
388
|
+
const rows = db.prepare(`SELECT m.message_seq,s.message_id,s.part_id,s.kind,s.content
|
|
389
|
+
FROM message_search s JOIN messages m ON m.id=s.message_id AND m.session_id=s.session_id
|
|
390
|
+
WHERE s.session_id=? AND instr(s.normalized,?)>0
|
|
391
|
+
AND (m.message_seq>? OR (m.message_seq=? AND s.part_id>?))
|
|
392
|
+
ORDER BY m.message_seq,s.part_id LIMIT ?`).all(sessionId, query.toLowerCase(), options.after?.messageSeq ?? 0, options.after?.messageSeq ?? 0, options.after?.partId ?? "", limit + 1);
|
|
393
|
+
return { results: rows.slice(0, limit).map(row => ({ sessionId, messageId: row.message_id, partId: row.part_id, kind: row.kind, messageSeq: row.message_seq, ...searchSnippet(row.content, query) })), revision, hasMore: rows.length > limit };
|
|
394
|
+
});
|
|
395
|
+
},
|
|
396
|
+
async getMessageSnapshot(sessionId, options) {
|
|
397
|
+
return transaction(() => {
|
|
398
|
+
const history = db.prepare("SELECT last_seq,revision FROM session_history WHERE session_id=?").get(sessionId);
|
|
399
|
+
const revision = history?.revision ?? 1;
|
|
400
|
+
if (options.revision !== undefined && options.revision !== revision)
|
|
401
|
+
throw new Error("HISTORY_REVISION_CONFLICT");
|
|
402
|
+
let before = options.before ?? (history?.last_seq ?? 0) + 1;
|
|
403
|
+
if (options.around || options.after !== undefined) {
|
|
404
|
+
const target = options.around ? db.prepare("SELECT message_seq FROM messages WHERE session_id=? AND id=?").get(sessionId, options.around) : undefined;
|
|
405
|
+
if (options.around && !target)
|
|
406
|
+
throw new Error("MESSAGE_NOT_FOUND");
|
|
407
|
+
const count = options.around ? Math.ceil(options.limit / 2) : options.limit;
|
|
408
|
+
const next = db.prepare("SELECT message_seq FROM messages WHERE session_id=? AND message_seq>? ORDER BY message_seq LIMIT ?").all(sessionId, target ? target.message_seq - 1 : options.after, count);
|
|
409
|
+
before = (next.at(-1)?.message_seq ?? options.after ?? target.message_seq) + 1;
|
|
410
|
+
}
|
|
411
|
+
const messages = readMessages(sessionId, before, Math.max(1, Math.min(200, options.limit)));
|
|
412
|
+
const first = messages[0]?.messageSeq;
|
|
413
|
+
const hasMore = first !== undefined && !!db.prepare("SELECT 1 FROM messages WHERE session_id=? AND message_seq<? LIMIT 1").get(sessionId, first);
|
|
414
|
+
const last = messages.at(-1)?.messageSeq;
|
|
415
|
+
const hasMoreAfter = last !== undefined && !!db.prepare("SELECT 1 FROM messages WHERE session_id=? AND message_seq>? LIMIT 1").get(sessionId, last);
|
|
416
|
+
const snapshotSeq = db.prepare("SELECT COALESCE(MAX(seq),0) AS n FROM events WHERE session_id=?").get(sessionId).n;
|
|
417
|
+
const rewoundAt = db.prepare("SELECT COALESCE(MAX(seq),0) AS n FROM events WHERE session_id=? AND type='session.rewound'").get(sessionId).n;
|
|
418
|
+
// Keep the latest completed run's artifacts and the current run's artifacts.
|
|
419
|
+
const previousSummary = db.prepare("SELECT seq FROM events WHERE session_id=? AND type='session.summary' AND seq>? ORDER BY seq DESC LIMIT 1 OFFSET 1").get(sessionId, rewoundAt);
|
|
420
|
+
const stateRows = db.prepare(`SELECT json FROM events WHERE session_id=? AND (
|
|
421
|
+
seq IN (SELECT MAX(seq) FROM events WHERE session_id=? AND seq>? AND type IN ('session.status','todo.updated','session.summary','session.checkpoint') GROUP BY type)
|
|
422
|
+
OR (type='artifact.created' AND seq>?)
|
|
423
|
+
OR (type='permission.asked' AND seq>? AND NOT EXISTS (
|
|
424
|
+
SELECT 1 FROM events replies WHERE replies.session_id=events.session_id AND replies.type='permission.replied' AND replies.seq>events.seq
|
|
425
|
+
AND json_extract(replies.json,'$.data.id')=json_extract(events.json,'$.data.request.id')
|
|
426
|
+
))
|
|
427
|
+
) ORDER BY seq`).all(sessionId, sessionId, rewoundAt, previousSummary?.seq ?? rewoundAt, rewoundAt);
|
|
428
|
+
const stateEvents = stateRows.map(row => JSON.parse(row.json));
|
|
429
|
+
const runs = db.prepare("SELECT run_id AS runId,status,revision FROM workflow_runs WHERE session_id=? ORDER BY ordinal").all(sessionId);
|
|
430
|
+
return { messages, revision, snapshotSeq, stateEvents, runs, readState: readState(sessionId), hasMore, nextBefore: hasMore ? first : null, hasMoreAfter, nextAfter: hasMoreAfter ? last : null };
|
|
133
431
|
});
|
|
134
432
|
},
|
|
135
433
|
async deleteSession(id) {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
434
|
+
transaction(() => {
|
|
435
|
+
// 级联删除:parts → messages → sessions(无外键,顺序删避免孤儿)
|
|
436
|
+
db.prepare("DELETE FROM parts WHERE session_id = ?").run(id);
|
|
437
|
+
db.prepare("DELETE FROM messages WHERE session_id = ?").run(id);
|
|
438
|
+
db.prepare("DELETE FROM sessions WHERE id = ?").run(id);
|
|
439
|
+
db.prepare("DELETE FROM session_history WHERE session_id=?").run(id);
|
|
440
|
+
db.prepare("DELETE FROM workflow_runs WHERE session_id=?").run(id);
|
|
441
|
+
db.prepare("DELETE FROM message_search WHERE session_id=?").run(id);
|
|
442
|
+
db.prepare("DELETE FROM session_reads WHERE session_id=?").run(id);
|
|
443
|
+
});
|
|
140
444
|
},
|
|
141
445
|
async truncateFrom(sessionId, fromMessageId) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
throw new Error("MESSAGE_NOT_FOUND");
|
|
150
|
-
const doomed = rows.slice(idx).map((row) => row.id);
|
|
151
|
-
const placeholders = doomed.map(() => "?").join(", ");
|
|
152
|
-
db.prepare(`DELETE FROM parts WHERE message_id IN (${placeholders})`).run(...doomed);
|
|
153
|
-
db.prepare(`DELETE FROM messages WHERE id IN (${placeholders})`).run(...doomed);
|
|
446
|
+
transaction(() => truncateMessages(sessionId, fromMessageId));
|
|
447
|
+
},
|
|
448
|
+
async rewind(sessionId, fromMessageId) {
|
|
449
|
+
return transaction(() => {
|
|
450
|
+
truncateMessages(sessionId, fromMessageId);
|
|
451
|
+
return appendEvent(sessionId, { type: "session.rewound", data: { fromMessageId } });
|
|
452
|
+
});
|
|
154
453
|
},
|
|
155
454
|
async enqueuePrompt(sessionId, prompt) {
|
|
156
455
|
const session = getSessionRow(sessionId);
|
|
@@ -168,11 +467,14 @@ export function createSqliteSessionStore(options) {
|
|
|
168
467
|
return next ?? null;
|
|
169
468
|
},
|
|
170
469
|
async clearQueuedPrompts(sessionId) {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
470
|
+
transaction(() => {
|
|
471
|
+
db.prepare("UPDATE workflow_runs SET status='cancelled',revision=revision+1 WHERE session_id=? AND status IN ('queued','recovery_required')").run(sessionId);
|
|
472
|
+
const session = getSessionRow(sessionId);
|
|
473
|
+
if (!session)
|
|
474
|
+
return;
|
|
475
|
+
session.queuedPrompts = [];
|
|
476
|
+
persistSession(session);
|
|
477
|
+
});
|
|
176
478
|
},
|
|
177
479
|
// ---- 运行租约(spec §3.2,产品 P0):runner 盖章/清除,lease recovery 扫描过期 ----
|
|
178
480
|
async stamp(sessionId, owner, expiresAt) {
|
|
@@ -211,15 +513,18 @@ export function createSqliteSessionStore(options) {
|
|
|
211
513
|
return expired;
|
|
212
514
|
},
|
|
213
515
|
async clearLeaseIfExpired(sessionId) {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
516
|
+
return transaction(() => {
|
|
517
|
+
const session = getSessionRow(sessionId);
|
|
518
|
+
if (!session?.leaseOwner || !session.leaseExpiresAt)
|
|
519
|
+
return false;
|
|
520
|
+
if (Date.parse(session.leaseExpiresAt) >= Date.now())
|
|
521
|
+
return false; // 未过期:另一个持有者赢了竞争
|
|
522
|
+
delete session.leaseOwner;
|
|
523
|
+
delete session.leaseExpiresAt;
|
|
524
|
+
persistSession(session);
|
|
525
|
+
db.prepare("UPDATE workflow_runs SET status='recovery_required',revision=revision+1 WHERE session_id=? AND status='running'").run(sessionId);
|
|
526
|
+
return true;
|
|
527
|
+
});
|
|
223
528
|
},
|
|
224
529
|
// ---- WAL 收尾(P2):优雅退出前把日志并回主库 ----
|
|
225
530
|
async checkpoint() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-store.js","sourceRoot":"","sources":["../../../src/core/session/sqlite-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sqlite-store.js","sourceRoot":"","sources":["../../../src/core/session/sqlite-store.ts"],"names":[],"mappings":"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"}
|