@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.
@@ -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":"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"}
1
+ {"version":3,"file":"sessionManager.d.ts","sourceRoot":"","sources":["../../src/ai/sessionManager.ts"],"names":[],"mappings":"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"}
@@ -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, loadPersistedCards } from './cardBuilder.js';
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.seedSequenceFromCards(await loadPersistedCards(opts.sessionId));
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 loadPersistedCards(sessionId);
1116
- const cardsById = new Map();
1117
- for (const card of persisted)
1118
- cardsById.set(card.id, card);
1119
- for (const card of streamCards)
1120
- cardsById.set(card.id, card);
1121
- const cards = Array.from(cardsById.values());
1122
- const total = cards.length;
1123
- const start = Math.max(0, total - offset - limit);
1124
- const end = Math.max(0, total - offset);
1125
- result = {
1126
- cards: cards.slice(start, end),
1127
- total,
1128
- hasMore: start > 0,
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
- for (const card of result.cards) {
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.pendingInput = pending;
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;