draken 0.2.0 → 0.4.0

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.
Files changed (134) hide show
  1. package/ACCEPTANCE.md +6 -3
  2. package/CHANGELOG.md +64 -0
  3. package/CONTRIBUTING.md +1 -1
  4. package/MEMORY.md +30 -8
  5. package/README.md +25 -9
  6. package/SETUP.md +2 -2
  7. package/SOURCES.md +1 -1
  8. package/VOICE.md +11 -3
  9. package/dist/db/schema.d.ts.map +1 -1
  10. package/dist/db/schema.js +6 -0
  11. package/dist/db/schema.js.map +1 -1
  12. package/dist/memory/automatic.d.ts +12 -6
  13. package/dist/memory/automatic.d.ts.map +1 -1
  14. package/dist/memory/automatic.js +65 -21
  15. package/dist/memory/automatic.js.map +1 -1
  16. package/dist/memory/context.d.ts +4 -4
  17. package/dist/memory/context.d.ts.map +1 -1
  18. package/dist/memory/context.js +64 -16
  19. package/dist/memory/context.js.map +1 -1
  20. package/dist/memory/embedding-pool.d.ts +1 -1
  21. package/dist/memory/embedding-pool.d.ts.map +1 -1
  22. package/dist/memory/embedding-pool.js +1 -1
  23. package/dist/memory/embedding-pool.js.map +1 -1
  24. package/dist/memory/index.d.ts +8 -2
  25. package/dist/memory/index.d.ts.map +1 -1
  26. package/dist/memory/index.js +195 -37
  27. package/dist/memory/index.js.map +1 -1
  28. package/dist/memory/model-files.d.ts +9 -0
  29. package/dist/memory/model-files.d.ts.map +1 -0
  30. package/dist/memory/model-files.js +13 -0
  31. package/dist/memory/model-files.js.map +1 -0
  32. package/dist/memory/model.d.ts +1 -1
  33. package/dist/memory/model.d.ts.map +1 -1
  34. package/dist/memory/model.js +11 -16
  35. package/dist/memory/model.js.map +1 -1
  36. package/dist/memory/readiness.d.ts +16 -0
  37. package/dist/memory/readiness.d.ts.map +1 -0
  38. package/dist/memory/readiness.js +131 -0
  39. package/dist/memory/readiness.js.map +1 -0
  40. package/dist/memory/reconcile.d.ts +11 -0
  41. package/dist/memory/reconcile.d.ts.map +1 -0
  42. package/dist/memory/reconcile.js +132 -0
  43. package/dist/memory/reconcile.js.map +1 -0
  44. package/dist/memory/service.d.ts +4 -2
  45. package/dist/memory/service.d.ts.map +1 -1
  46. package/dist/memory/service.js +34 -8
  47. package/dist/memory/service.js.map +1 -1
  48. package/dist/memory/sources.d.ts +2 -2
  49. package/dist/memory/sources.d.ts.map +1 -1
  50. package/dist/memory/sources.js +12 -5
  51. package/dist/memory/sources.js.map +1 -1
  52. package/dist/memory/storage.d.ts.map +1 -1
  53. package/dist/memory/storage.js +9 -0
  54. package/dist/memory/storage.js.map +1 -1
  55. package/dist/memory/types.d.ts +22 -1
  56. package/dist/memory/types.d.ts.map +1 -1
  57. package/dist/memory/types.js.map +1 -1
  58. package/dist/memory/worker.js +4 -2
  59. package/dist/memory/worker.js.map +1 -1
  60. package/dist/routes/live-voice.d.ts.map +1 -1
  61. package/dist/routes/live-voice.js +7 -1
  62. package/dist/routes/live-voice.js.map +1 -1
  63. package/dist/routes/memory.d.ts.map +1 -1
  64. package/dist/routes/memory.js +12 -2
  65. package/dist/routes/memory.js.map +1 -1
  66. package/dist/routes/sync.d.ts.map +1 -1
  67. package/dist/routes/sync.js +44 -10
  68. package/dist/routes/sync.js.map +1 -1
  69. package/dist/sync/answer-references.d.ts +10 -0
  70. package/dist/sync/answer-references.d.ts.map +1 -0
  71. package/dist/sync/answer-references.js +47 -0
  72. package/dist/sync/answer-references.js.map +1 -0
  73. package/dist/sync/automatic.d.ts +7 -0
  74. package/dist/sync/automatic.d.ts.map +1 -0
  75. package/dist/sync/automatic.js +56 -0
  76. package/dist/sync/automatic.js.map +1 -0
  77. package/dist/sync/collector.d.ts +1 -1
  78. package/dist/sync/collector.d.ts.map +1 -1
  79. package/dist/sync/collector.js +109 -69
  80. package/dist/sync/collector.js.map +1 -1
  81. package/dist/sync/cost.d.ts +2 -1
  82. package/dist/sync/cost.d.ts.map +1 -1
  83. package/dist/sync/cost.js +10 -6
  84. package/dist/sync/cost.js.map +1 -1
  85. package/dist/sync/manager.d.ts +7 -1
  86. package/dist/sync/manager.d.ts.map +1 -1
  87. package/dist/sync/manager.js +104 -19
  88. package/dist/sync/manager.js.map +1 -1
  89. package/dist/sync/reconciliation.d.ts +16 -0
  90. package/dist/sync/reconciliation.d.ts.map +1 -0
  91. package/dist/sync/reconciliation.js +22 -0
  92. package/dist/sync/reconciliation.js.map +1 -0
  93. package/dist/sync/store.d.ts +8 -1
  94. package/dist/sync/store.d.ts.map +1 -1
  95. package/dist/sync/store.js +51 -5
  96. package/dist/sync/store.js.map +1 -1
  97. package/dist/sync/tree.d.ts.map +1 -1
  98. package/dist/sync/tree.js +13 -7
  99. package/dist/sync/tree.js.map +1 -1
  100. package/dist/sync/usage.d.ts +6 -0
  101. package/dist/sync/usage.d.ts.map +1 -0
  102. package/dist/sync/usage.js +91 -0
  103. package/dist/sync/usage.js.map +1 -0
  104. package/dist/types.d.ts +46 -2
  105. package/dist/types.d.ts.map +1 -1
  106. package/dist/voice/continuation.d.ts.map +1 -1
  107. package/dist/voice/continuation.js +1 -0
  108. package/dist/voice/continuation.js.map +1 -1
  109. package/dist/voice/history-focus.d.ts +14 -0
  110. package/dist/voice/history-focus.d.ts.map +1 -0
  111. package/dist/voice/history-focus.js +39 -0
  112. package/dist/voice/history-focus.js.map +1 -0
  113. package/dist/voice/live-context.d.ts +1 -1
  114. package/dist/voice/live-context.d.ts.map +1 -1
  115. package/dist/voice/live-context.js +3 -3
  116. package/dist/voice/live-context.js.map +1 -1
  117. package/dist/voice/live.d.ts.map +1 -1
  118. package/dist/voice/live.js +47 -33
  119. package/dist/voice/live.js.map +1 -1
  120. package/dist/voice/preparation.d.ts +8 -0
  121. package/dist/voice/preparation.d.ts.map +1 -0
  122. package/dist/voice/preparation.js +59 -0
  123. package/dist/voice/preparation.js.map +1 -0
  124. package/package.json +1 -1
  125. package/public/assets/index-BCDcSZkB.css +1 -0
  126. package/public/assets/index-SXgKBqZw.js +131 -0
  127. package/public/assets/{persona-XbLvCqRT.js → persona-BgbqhiLa.js} +1 -1
  128. package/public/index.html +3 -3
  129. package/public/persona/chat-avatar.webp +0 -0
  130. package/public/persona.html +3 -3
  131. package/voice/realtime/native.mjs +1 -1
  132. package/public/assets/index-CYz_kpAp.js +0 -126
  133. package/public/assets/index-DmRid5xE.css +0 -1
  134. /package/public/assets/{index-Ymd62i3g.js → index-S46UUaj8.js} +0 -0
@@ -46,7 +46,7 @@ async function hashRegion(file, start, length) {
46
46
  return (0, normalize_1.digest)(buffer.subarray(0, bytesRead));
47
47
  }
48
48
  /** Read only complete LF-terminated records. Never mutate a pi session file. */
49
- async function readRecords(handle, file, offset, size, warnings) {
49
+ async function readRecords(handle, file, offset, size, warnings, signal) {
50
50
  const records = [];
51
51
  let pending = Buffer.alloc(0);
52
52
  let consumed = offset;
@@ -54,6 +54,7 @@ async function readRecords(handle, file, offset, size, warnings) {
54
54
  if (end <= offset)
55
55
  return { records, offset };
56
56
  for await (const chunk of fs_1.default.createReadStream(file, { fd: handle.fd, autoClose: false, start: offset, end: end - 1 })) {
57
+ signal?.throwIfAborted();
57
58
  pending = Buffer.concat([pending, chunk]);
58
59
  let newline;
59
60
  while ((newline = pending.indexOf(10)) !== -1) {
@@ -79,9 +80,7 @@ async function readRecords(handle, file, offset, size, warnings) {
79
80
  break;
80
81
  }
81
82
  }
82
- if (end < size)
83
- warnings.push(`Large session ${file}: scan again to index the remaining records.`);
84
- return { records, offset: consumed };
83
+ return { records, offset: consumed, reachedEnd: end === size };
85
84
  }
86
85
  function updateProjection(sessionId, leaf, agent) {
87
86
  const db = (0, schema_1.getDb)();
@@ -126,9 +125,9 @@ async function pointersMatch(file, sessionId) {
126
125
  }
127
126
  return true;
128
127
  }
129
- async function indexFile(filePath, agent, root, warnings) {
128
+ async function indexFile(filePath, agent, root, warnings, signal) {
130
129
  const db = (0, schema_1.getDb)();
131
- const previous = db.prepare('SELECT * FROM agent_sessions WHERE path = ?').get(filePath);
130
+ let previous = db.prepare('SELECT * FROM agent_sessions WHERE path = ?').get(filePath);
132
131
  if (previous && previous.agent !== agent)
133
132
  throw new Error('Session path belongs to another agent');
134
133
  const real = fs_1.default.realpathSync(filePath), base = fs_1.default.realpathSync(root);
@@ -144,7 +143,7 @@ async function indexFile(filePath, agent, root, warnings) {
144
143
  return { added: 0 };
145
144
  const identity = `${stat.dev}:${stat.ino}`;
146
145
  const modified = stat.mtime.toISOString();
147
- let reset = !previous || previous.id !== header.id || previous.file_identity !== identity || stat.size < previous.byte_offset;
146
+ let reset = !previous || previous.id !== header.id || previous.file_identity !== identity || stat.size < previous.byte_offset || previous.scanned_bytes < 0 || (previous.scanned_bytes === 0 && stat.size === previous.byte_offset);
148
147
  if (previous && !reset) {
149
148
  const boundary = await hashRegion(file, Math.max(0, previous.byte_offset - 256), Math.min(256, previous.byte_offset));
150
149
  const prefix = await hashRegion(file, 0, Math.min(512, previous.byte_offset));
@@ -154,65 +153,76 @@ async function indexFile(filePath, agent, root, warnings) {
154
153
  // tail unchanged. Verify old pointers before treating it as append-only.
155
154
  if (!reset && modified !== previous.modified_at)
156
155
  reset = !await pointersMatch(file, previous.id);
157
- if (!reset && stat.size === previous.byte_offset && modified === previous.modified_at) {
156
+ if (!reset && previous.scanned_bytes > 0 && stat.size === previous.byte_offset && modified === previous.modified_at) {
157
+ db.prepare('UPDATE agent_sessions SET scanned_bytes=? WHERE id=? AND scanned_bytes!=?').run(stat.size, previous.id, stat.size);
158
158
  return { id: previous.id, added: 0 };
159
159
  }
160
160
  }
161
- const warningStart = warnings.length;
162
- const result = await readRecords(file, filePath, reset ? 0 : previous.byte_offset, stat.size, warnings);
163
- if (agent !== 'pi' && warnings.slice(warningStart).some(warning => warning.startsWith('Skipped malformed JSON')))
164
- throw new Error('Malformed agent transcript; no partial record set was admitted');
165
- const duplicate = db.prepare('SELECT path,agent FROM agent_sessions WHERE id = ?').get(header.id);
166
- if (duplicate && duplicate.agent !== agent)
167
- throw new Error('Agent session ID collision');
168
- if (duplicate && duplicate.path !== filePath && fs_1.default.existsSync(duplicate.path)) {
169
- warnings.push(`Ignored duplicate session ${header.id} at ${filePath}.`);
170
- return { id: header.id, added: 0 };
171
- }
172
- const entries = [];
173
- let name = reset ? '' : previous.name;
174
- let leaf = reset ? null : previous.leaf_id;
175
- const identities = new Map(agent === 'claude' && previous && !reset
176
- ? db.prepare('SELECT entry_id,event_key FROM agent_entries WHERE session_id=? AND present=1').all(previous.id).map(row => [row.entry_id, row.event_key]) : []);
177
- for (const { value: record, ...pointer } of result.records) {
178
- if (agent === 'pi' && record?.type === 'session')
179
- continue;
180
- if (agent === 'pi' && record?.type === 'session_info' && typeof record.name === 'string')
181
- name = (0, normalize_1.cleanText)(record.name, 200);
182
- if (agent === 'claude' && record?.type === 'custom-title' && typeof record.customTitle === 'string')
183
- name = (0, normalize_1.cleanText)(record.customTitle, 200);
184
- const entry = (0, adapters_1.normalizeSource)(header, { ...pointer, value: record });
185
- if (entry) {
186
- if (agent === 'claude' && identities.has(entry.entry_id) && identities.get(entry.entry_id) !== entry.event_key)
187
- throw new Error('Conflicting Claude message UUID; no earlier content was overwritten');
188
- identities.set(entry.entry_id, entry.event_key);
189
- entries.push({ ...entry, ...pointer });
190
- // Claude progress/request metadata can carry UUIDs without selecting a
191
- // new conversation branch. Keep them as structural links only.
192
- if (agent !== 'claude' || ['user', 'assistant'].includes(record.type) || (record.type === 'system' && record.subtype === 'compact_boundary'))
193
- leaf = entry.entry_id;
194
- if (!name && entry.role === 'user' && entry.text)
195
- name = (0, normalize_1.cleanText)(entry.text.replace(/\s+/g, ' '), 100);
161
+ if (previous)
162
+ db.prepare('UPDATE agent_sessions SET scanned_bytes=0 WHERE id=? AND scanned_bytes!=0').run(previous.id);
163
+ let addedTotal = 0;
164
+ // Drain bounded chunks to this file's captured EOF, not a moving live tail.
165
+ // Each committed chunk survives cancellation; partial imports never get a receipt.
166
+ for (;;) {
167
+ signal?.throwIfAborted();
168
+ const warningStart = warnings.length;
169
+ const result = await readRecords(file, filePath, reset ? 0 : previous.byte_offset, stat.size, warnings, signal);
170
+ if (agent !== 'pi' && warnings.slice(warningStart).some(warning => warning.startsWith('Skipped malformed JSON')))
171
+ throw new Error('Malformed agent transcript; no partial record set was admitted');
172
+ if (warnings.length !== warningStart)
173
+ throw new Error('Session import did not complete; check the scan warnings.');
174
+ const duplicate = db.prepare('SELECT path,agent FROM agent_sessions WHERE id = ?').get(header.id);
175
+ if (duplicate && duplicate.agent !== agent)
176
+ throw new Error('Agent session ID collision');
177
+ if (duplicate && duplicate.path !== filePath && fs_1.default.existsSync(duplicate.path)) {
178
+ warnings.push(`Ignored duplicate session ${header.id} at ${filePath}.`);
179
+ return { id: header.id, added: 0 };
196
180
  }
197
- }
198
- if (agent === 'codex' && !entries.some(entry => entry.is_activity) && (!previous || reset) && result.records.some(record => record.value?.type === 'event_msg' && ['user_message', 'agent_message'].includes(record.value?.payload?.type))) {
199
- throw new Error('Codex event-only transcript layout is unsupported or not yet complete; response_item evidence is required');
200
- }
201
- const boundary = await hashRegion(file, Math.max(0, result.offset - 256), Math.min(256, result.offset));
202
- const prefix = await hashRegion(file, 0, Math.min(512, result.offset));
203
- return db.transaction(() => {
204
- // A replacement file may represent a different session; retain its old evidence/history.
205
- if (previous && previous.id !== header.id) {
206
- db.prepare('UPDATE agent_sessions SET path = ?, missing = 1 WHERE id = ?').run(`${filePath}#replaced:${previous.id}`, previous.id);
181
+ const entries = [];
182
+ let name = reset ? '' : previous.name;
183
+ let leaf = reset ? null : previous.leaf_id;
184
+ const identities = new Map(agent === 'claude' && previous && !reset
185
+ ? db.prepare('SELECT entry_id,event_key FROM agent_entries WHERE session_id=? AND present=1').all(previous.id).map(row => [row.entry_id, row.event_key]) : []);
186
+ for (const { value: record, ...pointer } of result.records) {
187
+ if (agent === 'pi' && record?.type === 'session')
188
+ continue;
189
+ if (agent === 'pi' && record?.type === 'session_info' && typeof record.name === 'string')
190
+ name = (0, normalize_1.cleanText)(record.name, 200);
191
+ if (agent === 'claude' && record?.type === 'custom-title' && typeof record.customTitle === 'string')
192
+ name = (0, normalize_1.cleanText)(record.customTitle, 200);
193
+ const entry = (0, adapters_1.normalizeSource)(header, { ...pointer, value: record });
194
+ if (entry) {
195
+ if (agent === 'claude' && identities.has(entry.entry_id) && identities.get(entry.entry_id) !== entry.event_key)
196
+ throw new Error('Conflicting Claude message UUID; no earlier content was overwritten');
197
+ identities.set(entry.entry_id, entry.event_key);
198
+ entries.push({ ...entry, ...pointer });
199
+ // Claude progress/request metadata can carry UUIDs without selecting a
200
+ // new conversation branch. Keep them as structural links only.
201
+ if (agent !== 'claude' || ['user', 'assistant'].includes(record.type) || (record.type === 'system' && record.subtype === 'compact_boundary'))
202
+ leaf = entry.entry_id;
203
+ if (!name && entry.role === 'user' && entry.text)
204
+ name = (0, normalize_1.cleanText)(entry.text.replace(/\s+/g, ' '), 100);
205
+ }
207
206
  }
208
- db.prepare(`INSERT INTO agent_sessions(id, path, cwd, name, modified_at, file_identity, byte_offset, boundary_hash, prefix_hash, leaf_id, agent, external_id)
207
+ if (agent === 'codex' && !entries.some(entry => entry.is_activity) && (!previous || reset) && result.records.some(record => record.value?.type === 'event_msg' && ['user_message', 'agent_message'].includes(record.value?.payload?.type))) {
208
+ throw new Error('Codex event-only transcript layout is unsupported or not yet complete; response_item evidence is required');
209
+ }
210
+ const boundary = await hashRegion(file, Math.max(0, result.offset - 256), Math.min(256, result.offset));
211
+ const prefix = await hashRegion(file, 0, Math.min(512, result.offset));
212
+ const committed = db.transaction(() => {
213
+ // A replacement file may represent a different session; retain its old evidence/history.
214
+ if (previous && previous.id !== header.id) {
215
+ db.prepare('UPDATE agent_sessions SET path = ?, missing = 1 WHERE id = ?').run(`${filePath}#replaced:${previous.id}`, previous.id);
216
+ }
217
+ db.prepare(`INSERT INTO agent_sessions(id, path, cwd, name, modified_at, file_identity, byte_offset, boundary_hash, prefix_hash, leaf_id, agent, external_id)
209
218
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
210
219
  ON CONFLICT(id) DO UPDATE SET path=excluded.path, cwd=excluded.cwd, name=excluded.name,
211
220
  modified_at=excluded.modified_at, file_identity=excluded.file_identity, byte_offset=excluded.byte_offset,
212
221
  boundary_hash=excluded.boundary_hash, prefix_hash=excluded.prefix_hash, leaf_id=excluded.leaf_id, missing=0`).run(header.id, filePath, header.cwd, name, modified, identity, result.offset, boundary, prefix, leaf, agent, header.external_id);
213
- if (reset)
214
- db.prepare('UPDATE agent_entries SET present = 0, active = 0 WHERE session_id = ?').run(header.id);
215
- const upsert = db.prepare(`INSERT INTO agent_entries
222
+ db.prepare('UPDATE agent_sessions SET scanned_bytes=0 WHERE id=?').run(header.id);
223
+ if (reset)
224
+ db.prepare('UPDATE agent_entries SET present = 0, active = 0 WHERE session_id = ?').run(header.id);
225
+ const upsert = db.prepare(`INSERT INTO agent_entries
216
226
  (session_id,entry_id,parent_id,timestamp,type,role,event_key,is_activity,target_id,record_offset,record_bytes,record_hash,text_length,replacement_length,effective_length)
217
227
  VALUES (@session_id,@entry_id,@parent_id,@timestamp,@type,@role,@event_key,@is_activity,@target_id,@record_offset,@record_bytes,@record_hash,@text_length,@replacement_length,@text_length)
218
228
  ON CONFLICT(session_id,entry_id) DO UPDATE SET parent_id=excluded.parent_id,timestamp=excluded.timestamp,
@@ -220,28 +230,50 @@ async function indexFile(filePath, agent, root, warnings) {
220
230
  record_offset=excluded.record_offset,record_bytes=excluded.record_bytes,record_hash=excluded.record_hash,
221
231
  text_length=excluded.text_length,replacement_length=excluded.replacement_length,effective_length=excluded.text_length,
222
232
  effective_id=NULL,normalization=2,present=1`);
223
- let added = 0;
224
- const exists = db.prepare('SELECT 1 FROM agent_entries WHERE session_id = ? AND entry_id = ?');
225
- for (const entry of entries) {
226
- if (!exists.get(header.id, entry.entry_id))
227
- added++;
228
- upsert.run({ ...entry, session_id: header.id, text_length: entry.text.length, replacement_length: entry.replacement?.length || 0 });
233
+ let added = 0;
234
+ const exists = db.prepare('SELECT 1 FROM agent_entries WHERE session_id = ? AND entry_id = ?');
235
+ for (const entry of entries) {
236
+ if (!exists.get(header.id, entry.entry_id))
237
+ added++;
238
+ upsert.run({ ...entry, session_id: header.id, text_length: entry.text.length, replacement_length: entry.replacement?.length || 0 });
239
+ }
240
+ updateProjection(header.id, leaf, agent);
241
+ return { id: header.id, added };
242
+ })();
243
+ addedTotal += committed.added;
244
+ if (warnings.length !== warningStart)
245
+ return { id: header.id, added: addedTotal };
246
+ if (result.reachedEnd || result.offset === stat.size) {
247
+ const final = await file.stat();
248
+ if (final.size < stat.size || (final.size === stat.size && final.mtimeMs !== stat.mtimeMs))
249
+ throw new Error('Session changed during import; retry the scan.');
250
+ db.prepare('UPDATE agent_sessions SET scanned_bytes=? WHERE id=?').run(stat.size, header.id);
251
+ return { id: header.id, added: addedTotal };
229
252
  }
230
- updateProjection(header.id, leaf, agent);
231
- return { id: header.id, added };
232
- })();
253
+ if (result.offset <= (reset ? 0 : previous.byte_offset))
254
+ throw new Error('Session import made no progress.');
255
+ previous = db.prepare('SELECT * FROM agent_sessions WHERE id=?').get(header.id);
256
+ reset = false;
257
+ await new Promise(resolve => setImmediate(resolve));
258
+ }
233
259
  }
234
260
  finally {
235
261
  await file.close();
236
262
  }
237
263
  }
238
264
  let scanning = null;
239
- function scanSessions() {
265
+ function scanSessions(signal) {
240
266
  if (scanning)
241
- return scanning;
267
+ return scanning.catch(error => {
268
+ signal?.throwIfAborted();
269
+ if (error instanceof Error && error.name === 'AbortError')
270
+ return scanSessions(signal);
271
+ throw error;
272
+ });
242
273
  scanning = (async () => {
243
274
  const warnings = [];
244
275
  const db = (0, schema_1.getDb)(), roots = (0, registry_1.getSourceRoots)(), seen = new Set();
276
+ db.prepare("INSERT INTO sync_settings(key,value) VALUES('source-scan-complete-v1','0') ON CONFLICT(key) DO UPDATE SET value='0'").run();
245
277
  const agents = db.prepare('SELECT id FROM agent_sources WHERE enabled=1').all();
246
278
  let added = 0, files = 0;
247
279
  for (const { id: agent } of agents) {
@@ -251,18 +283,23 @@ function scanSessions() {
251
283
  continue;
252
284
  foundRoot = true;
253
285
  for (const file of await discover(root, warnings)) {
286
+ signal?.throwIfAborted();
254
287
  if (!db.prepare('SELECT enabled FROM agent_sources WHERE id=?').get(agent)?.enabled)
255
288
  break;
256
289
  if (agent === 'claude' && /\.orphaned-[^/]+\.jsonl$/.test(file))
257
290
  continue;
258
291
  files++;
259
292
  try {
260
- const result = await indexFile(file, agent, root, warnings);
293
+ const result = await indexFile(file, agent, root, warnings, signal);
261
294
  if (result.id)
262
295
  seen.add(result.id);
263
296
  added += result.added;
264
297
  }
265
298
  catch (error) {
299
+ // A malformed append is an incomplete import, not a disappeared file.
300
+ const known = db.prepare('SELECT id FROM agent_sessions WHERE path=? AND agent=?').get(file, agent);
301
+ if (known)
302
+ seen.add(known.id);
266
303
  warnings.push(`Could not index ${agent} session ${file}: ${error instanceof Error ? error.message : 'unknown error'}`);
267
304
  }
268
305
  }
@@ -270,6 +307,7 @@ function scanSessions() {
270
307
  if (!foundRoot)
271
308
  warnings.push(`Session directory not found for ${agent}: ${roots[agent].join(', ')}`);
272
309
  }
310
+ signal?.throwIfAborted();
273
311
  db.transaction(() => {
274
312
  for (const { id } of agents)
275
313
  db.prepare('UPDATE agent_sessions SET missing=1 WHERE agent=? AND agent IN (SELECT id FROM agent_sources WHERE enabled=1)').run(id);
@@ -277,6 +315,8 @@ function scanSessions() {
277
315
  for (const id of seen)
278
316
  mark.run(id);
279
317
  })();
318
+ if (!warnings.length)
319
+ db.prepare("UPDATE sync_settings SET value='1' WHERE key='source-scan-complete-v1'").run();
280
320
  return { files, added, warnings: warnings.slice(0, 100) };
281
321
  })().finally(() => { scanning = null; });
282
322
  return scanning;
@@ -1 +1 @@
1
- {"version":3,"file":"collector.js","sourceRoot":"","sources":["../../src/sync/collector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"collector.js","sourceRoot":"","sources":["../../src/sync/collector.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type Database from 'better-sqlite3';
2
- import type { SyncCost } from '../types';
2
+ import type { ModelCallMetric, SyncCost } from '../types';
3
+ export declare function recordedCost(metric: ModelCallMetric): SyncCost;
3
4
  /** Preparation only, across its retries/rebuilds. Follow-up questions, voice,
4
5
  * embeddings and post-conversation recaps never enter this total. No backfill
5
6
  * guesses from historical planning-token estimates or today's price catalog. */
@@ -1 +1 @@
1
- {"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../../src/sync/cost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAmB,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE1D;;gFAEgF;AAChF,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,UAAQ,GAAG,QAAQ,GAAG,IAAI,CAiB3G"}
1
+ {"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../../src/sync/cost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE1D,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,QAAQ,CAI9D;AAED;;gFAEgF;AAChF,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,UAAQ,GAAG,QAAQ,GAAG,IAAI,CAe3G"}
package/dist/sync/cost.js CHANGED
@@ -1,6 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.recordedCost = recordedCost;
3
4
  exports.aggregationCost = aggregationCost;
5
+ function recordedCost(metric) {
6
+ const value = metric.accounting;
7
+ const priced = value?.source === 'pi-usage/catalog-pricing' && typeof value.cost_usd === 'number' && Number.isFinite(value.cost_usd) && value.cost_usd >= 0;
8
+ return { usd: priced ? value.cost_usd : null, complete: Boolean(priced && value.complete === true) };
9
+ }
4
10
  /** Preparation only, across its retries/rebuilds. Follow-up questions, voice,
5
11
  * embeddings and post-conversation recaps never enter this total. No backfill
6
12
  * guesses from historical planning-token estimates or today's price catalog. */
@@ -15,14 +21,12 @@ function aggregationCost(db, syncId, hasBriefing = false) {
15
21
  if (run.status === 'running' || metrics.length !== run.invocations)
16
22
  complete = false;
17
23
  for (const metric of metrics) {
18
- const accounting = metric.accounting;
19
- if (accounting?.source === 'pi-usage/catalog-pricing' && typeof accounting.cost_usd === 'number' && Number.isFinite(accounting.cost_usd) && accounting.cost_usd >= 0) {
20
- usd += accounting.cost_usd;
24
+ const cost = recordedCost(metric);
25
+ if (cost.usd !== null) {
26
+ usd += cost.usd;
21
27
  priced++;
22
- if (accounting.complete !== true)
23
- complete = false;
24
28
  }
25
- else
29
+ if (!cost.complete)
26
30
  complete = false;
27
31
  }
28
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cost.js","sourceRoot":"","sources":["../../src/sync/cost.ts"],"names":[],"mappings":";;AAMA,0CAiBC;AApBD;;gFAEgF;AAChF,SAAgB,eAAe,CAAC,EAAqB,EAAE,MAAc,EAAE,WAAW,GAAG,KAAK;IACxF,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,wGAAwG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAoE,CAAC;IACjN,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7E,IAAI,GAAG,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC;IACpD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAsB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAChE,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,CAAC,WAAW;YAAE,QAAQ,GAAG,KAAK,CAAC;QACrF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YACrC,IAAI,UAAU,EAAE,MAAM,KAAK,0BAA0B,IAAI,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC;gBACrK,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC;gBAAC,MAAM,EAAE,CAAC;gBACrC,IAAI,UAAU,CAAC,QAAQ,KAAK,IAAI;oBAAE,QAAQ,GAAG,KAAK,CAAC;YACrD,CAAC;;gBAAM,QAAQ,GAAG,KAAK,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,MAAM,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"cost.js","sourceRoot":"","sources":["../../src/sync/cost.ts"],"names":[],"mappings":";;AAGA,oCAIC;AAKD,0CAeC;AAxBD,SAAgB,YAAY,CAAC,MAAuB;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;IAChC,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,KAAK,0BAA0B,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC5J,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC;AACvG,CAAC;AAED;;gFAEgF;AAChF,SAAgB,eAAe,CAAC,EAAqB,EAAE,MAAc,EAAE,WAAW,GAAG,KAAK;IACxF,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,wGAAwG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAoE,CAAC;IACjN,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7E,IAAI,GAAG,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC;IACpD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAsB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAChE,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,CAAC,WAAW;YAAE,QAAQ,GAAG,KAAK,CAAC;QACrF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;gBAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;gBAAC,MAAM,EAAE,CAAC;YAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,QAAQ,GAAG,KAAK,CAAC;QACvC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,MAAM,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC/D,CAAC"}
@@ -4,9 +4,15 @@ export declare function cancelReply(id: number): void;
4
4
  /** Small lexical retrieval over ALL frozen evidence, including material a summary did not cite. */
5
5
  export declare function retrieveEvidence(sync: SyncDetail, question: string): Evidence[];
6
6
  export declare function validateVerdict(answer: string, allowedRefs: Set<string>): void;
7
- export declare function generateReply(id: number, question?: string): Promise<SyncDetail>;
7
+ export declare function generateReply(id: number, question?: string, requestId?: string, options?: {
8
+ signal?: AbortSignal;
9
+ deferHistory?: boolean;
10
+ }): Promise<SyncDetail>;
8
11
  /** Derived call/sync recap only. Never writes notes, status, snapshot evidence or coverage. */
9
12
  export declare function launchRecap(id: number): SyncDetail;
13
+ /** A chat request may be retried after a lost HTTP response without paying twice.
14
+ * Explicit retries after a failed/cancelled run use a new request ID. */
15
+ export declare function launchChat(id: number, question: string, requestId: string): SyncDetail;
10
16
  /** A durable result + pollable job, not a multi-minute HTTP response. */
11
17
  export declare function launchReply(id: number, question?: string): SyncDetail;
12
18
  //# sourceMappingURL=manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/sync/manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAOhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,MAAM,CAAC;AAc5C,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAK5C;AASD,mGAAmG;AACnG,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,CAO/E;AA0CD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAI9E;AAED,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CA4DtF;AAED,+FAA+F;AAC/F,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,CAqBlD;AAID,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAOrE"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/sync/manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAYhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,MAAM,CAAC;AAc5C,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAM5C;AASD,mGAAmG;AACnG,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,CAO/E;AA0CD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAI9E;AAeD,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAmG1K;AAED,+FAA+F;AAC/F,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,CAqBlD;AAID;yEACyE;AACzE,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,CActF;AAED,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAOrE"}