@sumicom/quicksave 0.8.19 → 0.8.21
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/ai/cardBuilder.d.ts +20 -0
- package/dist/ai/cardBuilder.d.ts.map +1 -1
- package/dist/ai/cardBuilder.js +6 -1
- package/dist/ai/cardBuilder.js.map +1 -1
- package/dist/ai/cardHistoryIndex.d.ts +5 -0
- package/dist/ai/cardHistoryIndex.d.ts.map +1 -0
- package/dist/ai/cardHistoryIndex.js +301 -0
- package/dist/ai/cardHistoryIndex.js.map +1 -0
- package/dist/ai/sessionManager.d.ts.map +1 -1
- package/dist/ai/sessionManager.js +27 -20
- package/dist/ai/sessionManager.js.map +1 -1
- package/dist/handlers/messageHandler.d.ts.map +1 -1
- package/dist/handlers/messageHandler.js +2 -1
- package/dist/handlers/messageHandler.js.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/service/ipcClient.d.ts.map +1 -1
- package/dist/service/ipcClient.js +1 -2
- package/dist/service/ipcClient.js.map +1 -1
- package/dist/service/run.js +1 -1
- package/dist/service/run.js.map +1 -1
- package/dist/service/types.js +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +24 -0
- package/dist/version.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
import { closeSync, existsSync, openSync, readSync, statSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { getCardHistoryDir, getStateDir } from '../service/singleton.js';
|
|
5
|
+
import { cleanPersistedCard, loadPersistedCards, } from './cardBuilder.js';
|
|
6
|
+
let handle = null;
|
|
7
|
+
function cardHistoryLogPath(sessionId) {
|
|
8
|
+
return join(getCardHistoryDir(), `${sessionId}.jsonl`);
|
|
9
|
+
}
|
|
10
|
+
function dbPath() {
|
|
11
|
+
return join(getStateDir(), 'quicksave.db');
|
|
12
|
+
}
|
|
13
|
+
function getDb() {
|
|
14
|
+
const path = dbPath();
|
|
15
|
+
if (handle && handle.path === path)
|
|
16
|
+
return handle;
|
|
17
|
+
handle?.db.close();
|
|
18
|
+
const db = new Database(path);
|
|
19
|
+
db.pragma('journal_mode = WAL');
|
|
20
|
+
db.pragma('synchronous = NORMAL');
|
|
21
|
+
db.exec(`
|
|
22
|
+
CREATE TABLE IF NOT EXISTS card_history_meta (
|
|
23
|
+
session_id TEXT PRIMARY KEY,
|
|
24
|
+
log_path TEXT NOT NULL,
|
|
25
|
+
processed_bytes INTEGER NOT NULL,
|
|
26
|
+
source_size INTEGER NOT NULL,
|
|
27
|
+
source_mtime_ms REAL NOT NULL,
|
|
28
|
+
next_ordinal INTEGER NOT NULL
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
CREATE TABLE IF NOT EXISTS card_history_cards (
|
|
32
|
+
session_id TEXT NOT NULL,
|
|
33
|
+
card_id TEXT NOT NULL,
|
|
34
|
+
timestamp REAL NOT NULL,
|
|
35
|
+
ordinal INTEGER NOT NULL,
|
|
36
|
+
card_json TEXT NOT NULL,
|
|
37
|
+
PRIMARY KEY (session_id, card_id)
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
CREATE INDEX IF NOT EXISTS idx_card_history_cards_order
|
|
41
|
+
ON card_history_cards(session_id, timestamp, ordinal, card_id);
|
|
42
|
+
`);
|
|
43
|
+
const dbHandle = {
|
|
44
|
+
path,
|
|
45
|
+
db,
|
|
46
|
+
getMeta: db.prepare('SELECT * FROM card_history_meta WHERE session_id = ?'),
|
|
47
|
+
upsertMeta: db.prepare(`
|
|
48
|
+
INSERT INTO card_history_meta (
|
|
49
|
+
session_id, log_path, processed_bytes, source_size, source_mtime_ms, next_ordinal
|
|
50
|
+
) VALUES (?, ?, ?, ?, ?, ?)
|
|
51
|
+
ON CONFLICT(session_id) DO UPDATE SET
|
|
52
|
+
log_path = excluded.log_path,
|
|
53
|
+
processed_bytes = excluded.processed_bytes,
|
|
54
|
+
source_size = excluded.source_size,
|
|
55
|
+
source_mtime_ms = excluded.source_mtime_ms,
|
|
56
|
+
next_ordinal = excluded.next_ordinal
|
|
57
|
+
`),
|
|
58
|
+
deleteMeta: db.prepare('DELETE FROM card_history_meta WHERE session_id = ?'),
|
|
59
|
+
deleteCards: db.prepare('DELETE FROM card_history_cards WHERE session_id = ?'),
|
|
60
|
+
countCards: db.prepare('SELECT COUNT(*) AS total FROM card_history_cards WHERE session_id = ?'),
|
|
61
|
+
pageCards: db.prepare(`
|
|
62
|
+
SELECT card_id, timestamp, ordinal, card_json
|
|
63
|
+
FROM card_history_cards
|
|
64
|
+
WHERE session_id = ?
|
|
65
|
+
ORDER BY timestamp ASC, ordinal ASC, card_id ASC
|
|
66
|
+
LIMIT ? OFFSET ?
|
|
67
|
+
`),
|
|
68
|
+
allCardIds: db.prepare('SELECT card_id FROM card_history_cards WHERE session_id = ?'),
|
|
69
|
+
getCard: db.prepare(`
|
|
70
|
+
SELECT card_id, timestamp, ordinal, card_json
|
|
71
|
+
FROM card_history_cards
|
|
72
|
+
WHERE session_id = ? AND card_id = ?
|
|
73
|
+
`),
|
|
74
|
+
insertCard: db.prepare(`
|
|
75
|
+
INSERT INTO card_history_cards (session_id, card_id, timestamp, ordinal, card_json)
|
|
76
|
+
VALUES (?, ?, ?, ?, ?)
|
|
77
|
+
`),
|
|
78
|
+
updateCard: db.prepare(`
|
|
79
|
+
UPDATE card_history_cards
|
|
80
|
+
SET timestamp = ?, card_json = ?
|
|
81
|
+
WHERE session_id = ? AND card_id = ?
|
|
82
|
+
`),
|
|
83
|
+
removeCard: db.prepare('DELETE FROM card_history_cards WHERE session_id = ? AND card_id = ?'),
|
|
84
|
+
tx: (fn) => db.transaction(fn)(),
|
|
85
|
+
};
|
|
86
|
+
handle = dbHandle;
|
|
87
|
+
return dbHandle;
|
|
88
|
+
}
|
|
89
|
+
function resetSessionIndex(db, sessionId) {
|
|
90
|
+
db.deleteCards.run(sessionId);
|
|
91
|
+
db.deleteMeta.run(sessionId);
|
|
92
|
+
}
|
|
93
|
+
function statNumber(value, fallback) {
|
|
94
|
+
if (typeof value === 'bigint')
|
|
95
|
+
return Number(value);
|
|
96
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : fallback;
|
|
97
|
+
}
|
|
98
|
+
function readBytesFrom(path, offset) {
|
|
99
|
+
const stat = statSync(path);
|
|
100
|
+
const size = statNumber(stat.size, 0);
|
|
101
|
+
if (offset >= size)
|
|
102
|
+
return Buffer.alloc(0);
|
|
103
|
+
const fd = openSync(path, 'r');
|
|
104
|
+
try {
|
|
105
|
+
const buffer = Buffer.alloc(size - offset);
|
|
106
|
+
const bytesRead = readSync(fd, buffer, 0, buffer.length, offset);
|
|
107
|
+
return bytesRead === buffer.length ? buffer : buffer.subarray(0, bytesRead);
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
closeSync(fd);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function applyLogBuffer(db, sessionId, buffer, startOffset, nextOrdinal) {
|
|
114
|
+
const text = buffer.toString('utf8');
|
|
115
|
+
let cursor = 0;
|
|
116
|
+
let processedBytes = startOffset;
|
|
117
|
+
while (cursor < text.length) {
|
|
118
|
+
const nl = text.indexOf('\n', cursor);
|
|
119
|
+
if (nl < 0)
|
|
120
|
+
break;
|
|
121
|
+
const rawLine = text.slice(cursor, nl);
|
|
122
|
+
processedBytes += Buffer.byteLength(text.slice(cursor, nl + 1), 'utf8');
|
|
123
|
+
cursor = nl + 1;
|
|
124
|
+
if (!rawLine.trim())
|
|
125
|
+
continue;
|
|
126
|
+
try {
|
|
127
|
+
const entry = JSON.parse(rawLine);
|
|
128
|
+
nextOrdinal = applyLogEntry(db, sessionId, entry, nextOrdinal);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// Keep existing JSONL tolerance: malformed complete lines are ignored.
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return { processedBytes, nextOrdinal };
|
|
135
|
+
}
|
|
136
|
+
function applyLogEntry(db, sessionId, entry, nextOrdinal) {
|
|
137
|
+
switch (entry.op) {
|
|
138
|
+
case 'seed':
|
|
139
|
+
for (const card of entry.cards ?? []) {
|
|
140
|
+
if (!card?.id || db.getCard.get(sessionId, card.id))
|
|
141
|
+
continue;
|
|
142
|
+
insertCard(db, sessionId, cleanPersistedCard(card), nextOrdinal++);
|
|
143
|
+
}
|
|
144
|
+
return nextOrdinal;
|
|
145
|
+
case 'upsert': {
|
|
146
|
+
if (!entry.card?.id)
|
|
147
|
+
return nextOrdinal;
|
|
148
|
+
const card = cleanPersistedCard(entry.card);
|
|
149
|
+
const existing = db.getCard.get(sessionId, card.id);
|
|
150
|
+
if (existing)
|
|
151
|
+
updateCard(db, sessionId, card);
|
|
152
|
+
else
|
|
153
|
+
insertCard(db, sessionId, card, nextOrdinal++);
|
|
154
|
+
return nextOrdinal;
|
|
155
|
+
}
|
|
156
|
+
case 'patch': {
|
|
157
|
+
const existing = db.getCard.get(sessionId, entry.cardId);
|
|
158
|
+
if (!existing)
|
|
159
|
+
return nextOrdinal;
|
|
160
|
+
const card = parseCard(existing.card_json);
|
|
161
|
+
if (!card)
|
|
162
|
+
return nextOrdinal;
|
|
163
|
+
const bag = card;
|
|
164
|
+
for (const [key, value] of Object.entries(entry.patch ?? {})) {
|
|
165
|
+
if (value === null)
|
|
166
|
+
delete bag[key];
|
|
167
|
+
else
|
|
168
|
+
bag[key] = value;
|
|
169
|
+
}
|
|
170
|
+
updateCard(db, sessionId, cleanPersistedCard(card));
|
|
171
|
+
return nextOrdinal;
|
|
172
|
+
}
|
|
173
|
+
case 'append_text': {
|
|
174
|
+
const existing = db.getCard.get(sessionId, entry.cardId);
|
|
175
|
+
if (!existing)
|
|
176
|
+
return nextOrdinal;
|
|
177
|
+
const card = parseCard(existing.card_json);
|
|
178
|
+
if (!card || !('text' in card))
|
|
179
|
+
return nextOrdinal;
|
|
180
|
+
card.text += entry.text;
|
|
181
|
+
updateCard(db, sessionId, cleanPersistedCard(card));
|
|
182
|
+
return nextOrdinal;
|
|
183
|
+
}
|
|
184
|
+
case 'remove':
|
|
185
|
+
db.removeCard.run(sessionId, entry.cardId);
|
|
186
|
+
return nextOrdinal;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
function insertCard(db, sessionId, card, ordinal) {
|
|
190
|
+
db.insertCard.run(sessionId, card.id, cardTimestamp(card), ordinal, JSON.stringify(card));
|
|
191
|
+
}
|
|
192
|
+
function updateCard(db, sessionId, card) {
|
|
193
|
+
db.updateCard.run(cardTimestamp(card), JSON.stringify(card), sessionId, card.id);
|
|
194
|
+
}
|
|
195
|
+
function parseCard(raw) {
|
|
196
|
+
try {
|
|
197
|
+
const parsed = JSON.parse(raw);
|
|
198
|
+
return parsed?.id ? parsed : null;
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
function cardTimestamp(card) {
|
|
205
|
+
return Number.isFinite(card.timestamp) ? Number(card.timestamp) : 0;
|
|
206
|
+
}
|
|
207
|
+
function syncIndex(sessionId) {
|
|
208
|
+
const logPath = cardHistoryLogPath(sessionId);
|
|
209
|
+
if (!existsSync(logPath))
|
|
210
|
+
return false;
|
|
211
|
+
const stat = statSync(logPath);
|
|
212
|
+
const sourceSize = statNumber(stat.size, 0);
|
|
213
|
+
const sourceMtimeMs = statNumber(stat.mtimeMs, 0);
|
|
214
|
+
const db = getDb();
|
|
215
|
+
try {
|
|
216
|
+
return syncIndexWithDb(db, sessionId, logPath, sourceSize, sourceMtimeMs, false);
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
try {
|
|
220
|
+
return syncIndexWithDb(db, sessionId, logPath, sourceSize, sourceMtimeMs, true);
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
function syncIndexWithDb(db, sessionId, logPath, sourceSize, sourceMtimeMs, forceRebuild) {
|
|
228
|
+
return db.tx(() => {
|
|
229
|
+
let meta = forceRebuild ? undefined : db.getMeta.get(sessionId);
|
|
230
|
+
if (!meta || meta.log_path !== logPath || sourceSize < meta.processed_bytes) {
|
|
231
|
+
resetSessionIndex(db, sessionId);
|
|
232
|
+
meta = {
|
|
233
|
+
session_id: sessionId,
|
|
234
|
+
log_path: logPath,
|
|
235
|
+
processed_bytes: 0,
|
|
236
|
+
source_size: 0,
|
|
237
|
+
source_mtime_ms: 0,
|
|
238
|
+
next_ordinal: 0,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
if (sourceSize > meta.processed_bytes) {
|
|
242
|
+
const buffer = readBytesFrom(logPath, meta.processed_bytes);
|
|
243
|
+
const result = applyLogBuffer(db, sessionId, buffer, meta.processed_bytes, meta.next_ordinal);
|
|
244
|
+
meta = {
|
|
245
|
+
...meta,
|
|
246
|
+
processed_bytes: result.processedBytes,
|
|
247
|
+
next_ordinal: result.nextOrdinal,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
db.upsertMeta.run(sessionId, logPath, meta.processed_bytes, sourceSize, sourceMtimeMs, meta.next_ordinal);
|
|
251
|
+
return true;
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
export async function loadPersistedCardPage(sessionId, offset = 0, limit = 50) {
|
|
255
|
+
if (!syncIndex(sessionId)) {
|
|
256
|
+
const cards = await loadPersistedCards(sessionId);
|
|
257
|
+
const total = cards.length;
|
|
258
|
+
const start = Math.max(0, total - offset - limit);
|
|
259
|
+
const end = Math.max(0, total - offset);
|
|
260
|
+
return { cards: cards.slice(start, end), total, hasMore: start > 0 };
|
|
261
|
+
}
|
|
262
|
+
const db = getDb();
|
|
263
|
+
const total = db.countCards.get(sessionId)?.total ?? 0;
|
|
264
|
+
const start = Math.max(0, total - offset - limit);
|
|
265
|
+
const rows = db.pageCards.all(sessionId, limit, start);
|
|
266
|
+
return {
|
|
267
|
+
cards: rows.map((row) => JSON.parse(row.card_json)),
|
|
268
|
+
total,
|
|
269
|
+
hasMore: start > 0,
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
export async function loadPersistedCardMaxSequence(sessionId) {
|
|
273
|
+
if (!syncIndex(sessionId)) {
|
|
274
|
+
return maxCardSequenceForSession(await loadPersistedCards(sessionId), sessionId);
|
|
275
|
+
}
|
|
276
|
+
const db = getDb();
|
|
277
|
+
return maxSequenceFromIds(db.allCardIds.all(sessionId).map((row) => row.card_id), sessionId);
|
|
278
|
+
}
|
|
279
|
+
function maxCardSequenceForSession(cards, sessionId) {
|
|
280
|
+
return maxSequenceFromIds(cards.map((card) => card.id), sessionId);
|
|
281
|
+
}
|
|
282
|
+
function maxSequenceFromIds(ids, sessionId) {
|
|
283
|
+
const prefix = `${sessionId}:`;
|
|
284
|
+
let max = 0;
|
|
285
|
+
for (const id of ids) {
|
|
286
|
+
if (!id.startsWith(prefix))
|
|
287
|
+
continue;
|
|
288
|
+
const raw = id.slice(prefix.length);
|
|
289
|
+
if (!/^\d+$/.test(raw))
|
|
290
|
+
continue;
|
|
291
|
+
const seq = Number(raw);
|
|
292
|
+
if (Number.isSafeInteger(seq) && seq > max)
|
|
293
|
+
max = seq;
|
|
294
|
+
}
|
|
295
|
+
return max;
|
|
296
|
+
}
|
|
297
|
+
export function closeCardHistoryIndexForTests() {
|
|
298
|
+
handle?.db.close();
|
|
299
|
+
handle = null;
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=cardHistoryIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cardHistoryIndex.js","sourceRoot":"","sources":["../../src/ai/cardHistoryIndex.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionManager.d.ts","sourceRoot":"","sources":["../../src/ai/sessionManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAOtC,OAAO,KAAK,EACV,OAAO,EACP,iBAAiB,EAEjB,UAAU,EACV,oBAAoB,EACpB,6BAA6B,EAC7B,8BAA8B,EAC9B,iBAAiB,EACjB,WAAW,EAGX,mBAAmB,EAEnB,oBAAoB,EAKpB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AAOnC,OAAO,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"sessionManager.d.ts","sourceRoot":"","sources":["../../src/ai/sessionManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAOtC,OAAO,KAAK,EACV,OAAO,EACP,iBAAiB,EAEjB,UAAU,EACV,oBAAoB,EACpB,6BAA6B,EAC7B,8BAA8B,EAC9B,iBAAiB,EACjB,WAAW,EAGX,mBAAmB,EAEnB,oBAAoB,EAKpB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AAOnC,OAAO,EAAE,iBAAiB,EAAyB,MAAM,kBAAkB,CAAC;AAO5E,OAAO,KAAK,EAGV,eAAe,EACf,eAAe,EACf,iBAAiB,EAEjB,mBAAmB,EACpB,MAAM,eAAe,CAAC;AA0JvB,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,eAAe,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACtC,yGAAyG;IACzG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;6EAMyE;IACzE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;kGAC8F;IAC9F,WAAW,EAAE,MAAM,CAAC;IACpB;;;iCAG6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;+EAK2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;0CAEsC;IACtC,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACpC;AAgBD;gEACgE;AAChE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAuBD,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,kBAAkB,CAA2C;IACrE,OAAO,CAAC,gBAAgB,CAAmC;IAC3D,OAAO,CAAC,cAAc,CAAuD;IAC7E,OAAO,CAAC,oBAAoB,CAA4C;IACxE,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,oBAAoB,CAAgB;IAC5C,OAAO,CAAC,WAAW,CAA+C;IAClE,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,cAAc,CAAU;IAEhC,kGAAkG;IAClG,OAAO,CAAC,kBAAkB,CAA6G;gBAE3H,SAAS,EAAE,mBAAmB,EAAE,EAAE,cAAc,GAAE,OAAuB;IAQrF,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,0BAA0B;IAuB5B,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAItC,cAAc,IAAI,iBAAiB;IAInC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,iBAAiB;IA6BpE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;IAIhE;oDACgD;IAChD,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAQ7D,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IA6H1G,YAAY,CAAC,IAAI,EAAE;QACvB,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,8EAA8E;QAC9E,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,+DAA+D;QAC/D,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;KACrC,GAAG,OAAO,CAAC,MAAM,CAAC;IA6Fb,aAAa,CAAC,IAAI,EAAE;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,+DAA+D;QAC/D,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;QACpC,oBAAoB,CAAC,EAAE,OAAO,CAAC;KAChC,GAAG,OAAO,CAAC,MAAM,CAAC;IA2Ob,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAalD,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS3D;;;;;;;OAOG;IACH,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO;IAmB9F,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,oBAAoB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAWlG,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWhF,sEAAsE;IAChE,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAY1G,iBAAiB,CACrB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAC7C,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAY9B,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAiBxC;;6DAEyD;IACzD,OAAO,CAAC,6BAA6B;IAU/B,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAsFrF,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe;IAOtD;;;;;;;OAOG;IACH,OAAO,CAAC,gCAAgC;IAgBxC,gBAAgB,CAAC,QAAQ,EAAE,8BAA8B,GAAG,OAAO;IAkCnE,iBAAiB,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,OAAO,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE;IAetJ,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIvC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIlC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIpD;;8DAE0D;IACpD,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,2BAA2B,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAO1H,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO;IAIzD;;+DAE2D;IAC3D,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI1D,qBAAqB,IAAI,MAAM;IAI/B,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAIrD,kBAAkB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAejE,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAK5F,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAmDnE,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAiFpG,uBAAuB,IAAI,6BAA6B,EAAE;IAI1D;;iEAE6D;IAC7D,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAOrD,aAAa;;;;;;;;;uBA9NqB,MAAM;iBAAO,MAAM;yBAAe,OAAO;6BAAmB,OAAO;4BAAkB,MAAM;wBAAc,OAAO;;;IAyO5I,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAiBhB,mBAAmB;IAWjC,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB;YAsFpC,uBAAuB;IAyFrC,OAAO,CAAC,iBAAiB;IAgDzB;;;;;;;;OAQG;IACH,OAAO,CAAC,mBAAmB;IA6F3B;;sEAEkE;IAClE,OAAO,CAAC,qBAAqB;IA4B7B;;;;;OAKG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI1C;;;;OAIG;IACH,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB;IA8DlE;;;;;;;;6EAQyE;IACzE,sBAAsB,IAAI,oBAAoB,EAAE;IAIhD,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,iBAAiB;YAKX,mBAAmB;IAsBjC;;;wEAGoE;IAC9D,cAAc,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAsBpD,OAAO,CAAC,gBAAgB;CAiBzB"}
|
|
@@ -8,7 +8,8 @@ import { mkdirSync, writeFileSync, rmSync } from 'fs';
|
|
|
8
8
|
import { getRunDir } from '../service/singleton.js';
|
|
9
9
|
import { normalizeStoredContextUsage } from '../service/contextUsage.js';
|
|
10
10
|
import { DEFAULT_AGENT, DEFAULT_MODEL, SESSION_NOTE_HISTORY_CAP, matchAllowPattern, } from '@sumicom/quicksave-shared';
|
|
11
|
-
import { StreamCardBuilder, buildCardsFromHistory
|
|
11
|
+
import { StreamCardBuilder, buildCardsFromHistory } from './cardBuilder.js';
|
|
12
|
+
import { loadPersistedCardMaxSequence, loadPersistedCardPage } from './cardHistoryIndex.js';
|
|
12
13
|
import { persistAttachments } from './attachmentStore.js';
|
|
13
14
|
import { SANDBOX_BASH_TOOL, UPDATE_SESSION_STATUS_TOOL } from './sandboxMcp.js';
|
|
14
15
|
import { getSessionRegistry } from './sessionRegistry.js';
|
|
@@ -605,7 +606,7 @@ export class SessionManager extends EventEmitter {
|
|
|
605
606
|
const cardBuilder = existing?.cardBuilder ?? new StreamCardBuilder(opts.sessionId, opts.cwd);
|
|
606
607
|
cardBuilder.enableMemoryPersistence?.(provider.historyMode === 'memory');
|
|
607
608
|
if (provider.historyMode === 'memory') {
|
|
608
|
-
cardBuilder.
|
|
609
|
+
cardBuilder.seedSequenceFromMax(await loadPersistedCardMaxSequence(opts.sessionId));
|
|
609
610
|
}
|
|
610
611
|
await cardBuilder.snapshotCutoff();
|
|
611
612
|
const callbacks = this.makeCallbacks(provider.id);
|
|
@@ -1112,21 +1113,26 @@ export class SessionManager extends EventEmitter {
|
|
|
1112
1113
|
else {
|
|
1113
1114
|
// Memory-mode: use in-memory cards from active turn, falling back to persisted history
|
|
1114
1115
|
const streamCards = ps?.cardBuilder?.getCards() ?? [];
|
|
1115
|
-
const persisted = await
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1116
|
+
const persisted = await loadPersistedCardPage(sessionId, offset, limit);
|
|
1117
|
+
if (offset === 0 && streamCards.length > 0) {
|
|
1118
|
+
const cardsById = new Map();
|
|
1119
|
+
for (const card of persisted.cards)
|
|
1120
|
+
cardsById.set(card.id, card);
|
|
1121
|
+
let extraLiveCards = 0;
|
|
1122
|
+
for (const card of streamCards) {
|
|
1123
|
+
if (!cardsById.has(card.id))
|
|
1124
|
+
extraLiveCards++;
|
|
1125
|
+
cardsById.set(card.id, card);
|
|
1126
|
+
}
|
|
1127
|
+
result = {
|
|
1128
|
+
cards: Array.from(cardsById.values()),
|
|
1129
|
+
total: persisted.total + extraLiveCards,
|
|
1130
|
+
hasMore: persisted.hasMore,
|
|
1131
|
+
};
|
|
1132
|
+
}
|
|
1133
|
+
else {
|
|
1134
|
+
result = persisted;
|
|
1135
|
+
}
|
|
1130
1136
|
}
|
|
1131
1137
|
// Append in-memory cards for the active turn (initial load only — pagination
|
|
1132
1138
|
// already has these cards in the PWA's array, so appending them again would duplicate).
|
|
@@ -1152,14 +1158,15 @@ export class SessionManager extends EventEmitter {
|
|
|
1152
1158
|
}
|
|
1153
1159
|
}
|
|
1154
1160
|
if (pendingByToolUseId.size > 0) {
|
|
1155
|
-
|
|
1161
|
+
result.cards = result.cards.map((card) => {
|
|
1156
1162
|
if (card.type === 'tool_call' && card.toolUseId) {
|
|
1157
1163
|
const pending = pendingByToolUseId.get(card.toolUseId);
|
|
1158
1164
|
if (pending && !card.pendingInput) {
|
|
1159
|
-
card
|
|
1165
|
+
return { ...card, pendingInput: pending };
|
|
1160
1166
|
}
|
|
1161
1167
|
}
|
|
1162
|
-
|
|
1168
|
+
return card;
|
|
1169
|
+
});
|
|
1163
1170
|
}
|
|
1164
1171
|
// Attach session title from config or registry
|
|
1165
1172
|
const configTitle = this.sessionConfigs.get(sessionId)?.title;
|