@cortexkit/opencode-magic-context 0.49.29 → 0.49.30

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 (57) hide show
  1. package/dist/auto-search-worker.js +1 -1
  2. package/dist/chunk-embedding-write-worker.js +1 -1
  3. package/dist/{context-836j3vte.js → context-vnfr6d7t.js} +156 -32
  4. package/dist/features/magic-context/work-metrics.d.ts.map +1 -1
  5. package/dist/hooks/magic-context/history-boundary-repair.d.ts +1 -1
  6. package/dist/hooks/magic-context/history-boundary-repair.d.ts.map +1 -1
  7. package/dist/hooks/magic-context/strip-content.d.ts +1 -1
  8. package/dist/hooks/magic-context/strip-content.d.ts.map +1 -1
  9. package/dist/{index-zhgqgxtt.js → index-0fe4q77z.js} +7 -5
  10. package/dist/{index-a1h316s9.js → index-3jmx3fae.js} +1 -1
  11. package/dist/{index-tx68g9nc.js → index-4s4zq97n.js} +1 -1
  12. package/dist/{index-wyt5m81v.js → index-69gd2scx.js} +3 -3
  13. package/dist/{index-093c4g1c.js → index-adr4vfys.js} +2 -2
  14. package/dist/{index-wpcdk76y.js → index-ekzzw66a.js} +19 -16
  15. package/dist/{index-h4s5jk7f.js → index-hbt0sbv2.js} +1 -1
  16. package/dist/{index-q9zvphbq.js → index-k0dpkyn7.js} +38 -7
  17. package/dist/{index-wvffze8y.js → index-vtz789ex.js} +1 -1
  18. package/dist/{index-bps8vn9r.js → index-vzz570j8.js} +3 -3
  19. package/dist/index.js +13 -13
  20. package/dist/{message-index-bounded-7qsn4fd3.js → message-index-bounded-zq7a5nm6.js} +2 -2
  21. package/dist/migration-worker.js +1 -1
  22. package/dist/raw-ordinal-warmup-worker.js +2 -2
  23. package/dist/{read-session-chunk-a5d0q3m0.js → read-session-chunk-1ndphmb8.js} +1 -1
  24. package/dist/{recomp-orchestrator-na34m4c5.js → recomp-orchestrator-w3pjp33d.js} +5 -5
  25. package/dist/{search-archive-66pm17gm.js → search-archive-sr07c6aj.js} +2 -2
  26. package/dist/{search-0cd6hx7a.js → search-fbaz1m8r.js} +3 -3
  27. package/dist/shared/marker-only-text.d.ts +2 -0
  28. package/dist/shared/marker-only-text.d.ts.map +1 -0
  29. package/dist/{transform-postprocess-phase-27we33af.js → transform-postprocess-phase-6ccazq85.js} +5 -5
  30. package/dist/v2/auto-search-worker.js +1 -1
  31. package/dist/v2/chunk-embedding-write-worker.js +1 -1
  32. package/dist/v2/{context-g4ptae4x.js → context-wx4sfhgr.js} +162 -36
  33. package/dist/v2/hidden-child-cleanup.d.ts.map +1 -1
  34. package/dist/v2/hidden-child-native.d.ts.map +1 -1
  35. package/dist/v2/hooks/context.d.ts.map +1 -1
  36. package/dist/v2/{message-index-bounded-7363502m.js → message-index-bounded-jvgz7vk9.js} +2 -2
  37. package/dist/v2/message-times.d.ts +17 -0
  38. package/dist/v2/message-times.d.ts.map +1 -0
  39. package/dist/v2/migration-worker.js +1 -1
  40. package/dist/v2/raw-ordinal-warmup-worker.js +2 -2
  41. package/dist/v2/{read-session-chunk-kkppfhft.js → read-session-chunk-djzgm4jg.js} +1 -1
  42. package/dist/v2/{recomp-orchestrator-f1df1gb8.js → recomp-orchestrator-wb28kr9k.js} +4 -4
  43. package/dist/v2/{search-archive-v07jpw25.js → search-archive-n3dhns4r.js} +2 -2
  44. package/dist/v2/{search-2v3xyzse.js → search-q3jjw6zp.js} +3 -3
  45. package/dist/v2/{server-976dxaxh.js → server-42nebt63.js} +1 -1
  46. package/dist/v2/{server-77gznpmf.js → server-d01pe8q5.js} +1 -1
  47. package/dist/v2/{server-k9je35ev.js → server-hwag0khr.js} +1 -1
  48. package/dist/v2/{server-q50ttc2g.js → server-k33t88h3.js} +38 -7
  49. package/dist/v2/{server-mxzj3r0y.js → server-rb8m4vry.js} +7 -5
  50. package/dist/v2/{server-w79f8ejn.js → server-rr4cbkr0.js} +1 -1
  51. package/dist/v2/server.js +2 -2
  52. package/dist/v2/store-reader.d.ts +14 -2
  53. package/dist/v2/store-reader.d.ts.map +1 -1
  54. package/dist/v2/{wrapup-orchestrator-jq33fda8.js → wrapup-orchestrator-2t0pdqzm.js} +4 -4
  55. package/dist/{wrapup-orchestrator-f0xr7pft.js → wrapup-orchestrator-kjmkms5g.js} +6 -6
  56. package/package.json +1 -1
  57. package/src/shared/marker-only-text.ts +8 -0
@@ -28,7 +28,7 @@ var [
28
28
  import("./embedding-cache-mgyr73ef.js"),
29
29
  import("./storage-memory-e6a7mb0k.js"),
30
30
  import("./project-embedding-registry-cg281d9j.js"),
31
- import("./search-0cd6hx7a.js"),
31
+ import("./search-fbaz1m8r.js"),
32
32
  import("./compartment-chunk-embedding-qgp0tbf7.js"),
33
33
  import("./embedding-activity-g1dhes6g.js"),
34
34
  import("./harness-e4avh192.js"),
@@ -35,7 +35,7 @@ import"./index-c7phnbvk.js";
35
35
  import {
36
36
  LATEST_SUPPORTED_VERSION,
37
37
  enforceSchemaFence
38
- } from "./index-h4s5jk7f.js";
38
+ } from "./index-hbt0sbv2.js";
39
39
  import"./index-7kkphb6c.js";
40
40
  import"./index-xrnsygfq.js";
41
41
  import"./index-fr0wbhdn.js";
@@ -12,7 +12,6 @@ import {
12
12
  releaseCompartmentLeaseBestEffort,
13
13
  isCompartmentLeaseHeld,
14
14
  queueM0Mutation,
15
- getCompartments,
16
15
  getUncoveredCompartmentEndsThrough,
17
16
  providerResponseFailed,
18
17
  isSuccessfulProviderCompletion,
@@ -65,7 +64,7 @@ import {
65
64
  rebaseSessionCoordinatesAsync,
66
65
  resolveOpenCodeProtectedTailBoundary,
67
66
  getActiveCompartmentRun
68
- } from "./index-q9zvphbq.js";
67
+ } from "./index-k0dpkyn7.js";
69
68
  import"./index-sd3egckz.js";
70
69
  import {
71
70
  getHarness2
@@ -157,7 +156,7 @@ import {
157
156
  applyJsonSchemaParameterDescriptions,
158
157
  MagicContextRpcServer,
159
158
  subagentTemperature
160
- } from "./index-wpcdk76y.js";
159
+ } from "./index-ekzzw66a.js";
161
160
  import {
162
161
  resolveHistorianModel2
163
162
  } from "./index-5kym00ag.js";
@@ -172,7 +171,7 @@ import {
172
171
  openDatabaseAsync,
173
172
  isDatabasePersisted,
174
173
  getDatabasePersistenceError
175
- } from "./index-h4s5jk7f.js";
174
+ } from "./index-hbt0sbv2.js";
176
175
  import {
177
176
  setHomeProjectPermission,
178
177
  resolveProjectIdentityForSession,
@@ -202,7 +201,9 @@ import {
202
201
  preloadTokenizer,
203
202
  estimateTokens
204
203
  } from "./index-b88dwwrh.js";
205
- import"./index-xrnsygfq.js";
204
+ import {
205
+ getTableColumnNames
206
+ } from "./index-xrnsygfq.js";
206
207
  import"./index-58e3y90n.js";
207
208
  import"./index-y1qwzvxn.js";
208
209
  import {
@@ -240,13 +241,13 @@ import {
240
241
  cleanUserText2,
241
242
  readRawSessionMessageIdOrdinalsForRange2,
242
243
  readRawSessionMessageOrdinalById2
243
- } from "./index-zhgqgxtt.js";
244
+ } from "./index-0fe4q77z.js";
244
245
  import {
245
246
  BoundedSessionMap,
246
247
  recordToolDefinitionSet,
247
248
  getCurrentToolSetHash
248
249
  } from "./index-s1n8dd2n.js";
249
- import"./index-tx68g9nc.js";
250
+ import"./index-4s4zq97n.js";
250
251
  import"./index-v15ne3a3.js";
251
252
  import {
252
253
  invalidateAutoEmbedSession,
@@ -273,7 +274,7 @@ import {
273
274
  EmergencyFailClosedError,
274
275
  DegradedPassRefusalError,
275
276
  isSyntheticHeadMessage2
276
- } from "./index-bps8vn9r.js";
277
+ } from "./index-vzz570j8.js";
277
278
  import"./index-qgh1qwjj.js";
278
279
  import"./index-qt1qqasc.js";
279
280
  import"./index-kfyb3k6n.js";
@@ -287,15 +288,15 @@ import {
287
288
  } from "./index-x8a7jmkh.js";
288
289
  import"./index-rrv26qjz.js";
289
290
  import"./index-waktfbjy.js";
290
- import"./index-wvffze8y.js";
291
- import"./index-093c4g1c.js";
291
+ import"./index-vtz789ex.js";
292
+ import"./index-adr4vfys.js";
292
293
  import"./index-gp3kcpc4.js";
293
294
  import {
294
295
  detectConflicts
295
296
  } from "./index-4pnsgvfk.js";
296
297
  import"./index-fmsr7v69.js";
297
298
  import"./index-kaqs6h31.js";
298
- import"./index-a1h316s9.js";
299
+ import"./index-3jmx3fae.js";
299
300
  import {
300
301
  isDreamerRunnable,
301
302
  isSmartNoteSurfaceAvailable,
@@ -313,6 +314,26 @@ import"./index-t5pck3ss.js";
313
314
  import { setTimeout as delay } from "node:timers/promises";
314
315
 
315
316
  // src/hooks/magic-context/history-boundary-repair.ts
317
+ function readStoreBoundaries(db, sessionId) {
318
+ const columns = getTableColumnNames(db, "compartments");
319
+ const numbers = ["id", "sequence", "start_message", "end_message", "created_at"];
320
+ const strings = ["session_id", "start_message_id", "end_message_id", "title", "content"];
321
+ const predicates = [...numbers, ...strings].every((column) => columns.has(column)) ? [
322
+ ...numbers.map((column) => `typeof(${column}) IN ('integer', 'real')`),
323
+ ...strings.map((column) => `typeof(${column}) = 'text'`)
324
+ ] : ["0"];
325
+ for (const column of ["p1", "p2", "p3", "p4", "episode_type"]) {
326
+ if (columns.has(column))
327
+ predicates.push(`typeof(${column}) IN ('text', 'null')`);
328
+ }
329
+ for (const column of ["importance", "legacy"]) {
330
+ if (columns.has(column))
331
+ predicates.push(`typeof(${column}) IN ('integer', 'real', 'null')`);
332
+ }
333
+ return db.prepare(`SELECT sequence, ${columns.has("end_message_id") ? "end_message_id" : "NULL"} AS endMessageId
334
+ FROM compartments WHERE session_id = ? AND ${predicates.join(" AND ")}
335
+ ORDER BY sequence ASC`).all(sessionId);
336
+ }
316
337
  function readBaseline(db, sessionId) {
317
338
  const row = db.prepare("SELECT cached_m0_bytes IS NOT NULL AS hasM0, cached_m0_last_baseline_end_message_id AS boundary FROM session_meta WHERE session_id = ?").get(sessionId);
318
339
  return {
@@ -379,7 +400,7 @@ function dropCompartmentsAfter(db, sessionId, anchor, holderId, activeBranch = f
379
400
  }
380
401
  function repairMissingHistoryBoundary(args) {
381
402
  const { db, sessionId, isInHostStore, scope = "store" } = args;
382
- const compartments = scope === "active-branch" ? db.prepare("SELECT sequence, COALESCE(end_message_id, '') AS endMessageId FROM compartments WHERE session_id = ? ORDER BY sequence").all(sessionId) : getCompartments(db, sessionId);
403
+ const compartments = scope === "active-branch" ? db.prepare("SELECT sequence, COALESCE(end_message_id, '') AS endMessageId FROM compartments WHERE session_id = ? ORDER BY sequence").all(sessionId) : readStoreBoundaries(db, sessionId);
383
404
  let latestIndex = compartments.length - 1;
384
405
  while (latestIndex >= 0 && !compartments[latestIndex]?.endMessageId)
385
406
  latestIndex -= 1;
@@ -423,7 +444,7 @@ function repairMissingHistoryBoundary(args) {
423
444
  let dropped;
424
445
  let anchorForDrop = anchor;
425
446
  try {
426
- if (scope === "active-branch" && anchor) {
447
+ if (anchor) {
427
448
  const row = db.prepare("SELECT end_message AS endMessage FROM compartments WHERE session_id = ? AND sequence = ?").get(sessionId, anchor.sequence);
428
449
  if (!row)
429
450
  return { kind: "unresolved", reason: "busy", missingEndMessageId: missing };
@@ -2451,6 +2472,7 @@ function createNativeHiddenChildren(host, removeSession, options) {
2451
2472
  const inFlight = removing.get(child.id);
2452
2473
  if (inFlight)
2453
2474
  return inFlight;
2475
+ options.log(`[magic-context] hidden child ${child.id} removing`);
2454
2476
  const done = (async () => {
2455
2477
  try {
2456
2478
  let timer;
@@ -2465,6 +2487,7 @@ function createNativeHiddenChildren(host, removeSession, options) {
2465
2487
  if (timer)
2466
2488
  clearTimeout(timer);
2467
2489
  }
2490
+ options.log(`[magic-context] hidden child ${child.id} removed`);
2468
2491
  } catch (error) {
2469
2492
  if (isSessionNotFound(error))
2470
2493
  return;
@@ -2476,14 +2499,19 @@ function createNativeHiddenChildren(host, removeSession, options) {
2476
2499
  removing.set(child.id, done);
2477
2500
  return done;
2478
2501
  };
2479
- const confirmPlacement = async (sessionID, parentID) => {
2502
+ const noteCreated = (sessionID, role, parentID) => {
2503
+ options.log(`[magic-context] hidden child ${sessionID} created role=${role} parent=${parentID} keep_subagents=${options.keepSubagents}`);
2504
+ };
2505
+ const confirmPlacement = async (sessionID, parentID, role) => {
2480
2506
  let stored;
2481
2507
  try {
2482
2508
  stored = await host.get({ sessionID });
2483
2509
  } catch (error) {
2510
+ noteCreated(sessionID, role, "unknown");
2484
2511
  options.log(`[magic-context] could not read back hidden child ${sessionID} to confirm its parent: ${errorText(error)}`);
2485
2512
  return;
2486
2513
  }
2514
+ noteCreated(sessionID, role, stored.parentID ?? "none");
2487
2515
  const directory = stored.location?.directory;
2488
2516
  if (options.directory !== undefined && directory !== undefined && !sameProjectDirectory(directory, options.directory)) {
2489
2517
  throw new HiddenCompletionRefusal("hidden_prompt_unrecognized", `hidden child ${sessionID} is bound to ${directory}, not to this instance's ${options.directory}. Reopen the parent session in ${directory}, then run /ctx-recomp so its owning instance can rebuild history.`, true);
@@ -2512,11 +2540,13 @@ function createNativeHiddenChildren(host, removeSession, options) {
2512
2540
  };
2513
2541
  if (parentID) {
2514
2542
  try {
2515
- await confirmPlacement(created.id, parentID);
2543
+ await confirmPlacement(created.id, parentID, role);
2516
2544
  } catch (error) {
2517
2545
  await remove(child);
2518
2546
  throw error;
2519
2547
  }
2548
+ } else {
2549
+ noteCreated(created.id, role, "none");
2520
2550
  }
2521
2551
  return child;
2522
2552
  };
@@ -2525,16 +2555,22 @@ function createNativeHiddenChildren(host, removeSession, options) {
2525
2555
  open: create,
2526
2556
  create,
2527
2557
  retire(child) {
2528
- if (!kept(child))
2558
+ if (kept(child)) {
2559
+ options.log(`[magic-context] hidden child ${child.id} kept (keep_subagents)`);
2560
+ } else {
2529
2561
  remove(child);
2562
+ }
2530
2563
  },
2531
2564
  async finish(child, retired) {
2532
2565
  if (retired) {
2533
2566
  await removing.get(child.id);
2534
2567
  return;
2535
2568
  }
2536
- if (!kept(child))
2569
+ if (kept(child)) {
2570
+ options.log(`[magic-context] hidden child ${child.id} kept (keep_subagents)`);
2571
+ } else {
2537
2572
  await remove(child);
2573
+ }
2538
2574
  },
2539
2575
  updateModel: (child, model) => ({ ...child, model }),
2540
2576
  markEverSettled: (child) => ({ ...child, ever_settled: true })
@@ -2581,6 +2617,7 @@ async function cleanupLegacyHiddenChildren(db, remove, note, options = {}) {
2581
2617
  timer = setTimeout(() => reject(new Error("session.remove timed out")), Math.min(options.timeoutMs ?? 1000, Math.max(1, deadline - now())));
2582
2618
  })
2583
2619
  ]);
2620
+ note(`[magic-context] legacy hidden child ${child.id} removed`);
2584
2621
  } catch (error) {
2585
2622
  if (!isSessionNotFound(error))
2586
2623
  throw error;
@@ -3383,6 +3420,96 @@ class HiddenModelActivity {
3383
3420
  }
3384
3421
  }
3385
3422
 
3423
+ // src/v2/message-times.ts
3424
+ function isSettled(entry, readAt) {
3425
+ return (entry.version.type === "user" || entry.time.completed !== undefined) && typeof entry.version.updated === "number" && Number.isFinite(entry.version.updated) && entry.version.updated <= readAt - 1000;
3426
+ }
3427
+ function sameVersion(a, b) {
3428
+ return a.type === b.type && a.seq === b.seq && a.created === b.created && a.updated === b.updated;
3429
+ }
3430
+
3431
+ class V2MessageTimesCache {
3432
+ capacity;
3433
+ sessions = new Map;
3434
+ constructor(capacity = 64) {
3435
+ this.capacity = capacity;
3436
+ }
3437
+ delete(sessionID) {
3438
+ this.sessions.delete(sessionID);
3439
+ }
3440
+ deleteMessage(sessionID, messageID) {
3441
+ this.sessions.get(sessionID)?.entries.delete(messageID);
3442
+ }
3443
+ clear() {
3444
+ this.sessions.clear();
3445
+ }
3446
+ pass(sessionID) {
3447
+ const previous = this.sessions.get(sessionID);
3448
+ const current = { entries: new Map };
3449
+ this.sessions.delete(sessionID);
3450
+ this.sessions.set(sessionID, current);
3451
+ while (this.sessions.size > this.capacity) {
3452
+ const oldest = this.sessions.keys().next().value;
3453
+ if (oldest === undefined)
3454
+ break;
3455
+ this.sessions.delete(oldest);
3456
+ }
3457
+ const passTimes = new Map;
3458
+ return (reader, ids) => {
3459
+ const missing = [...new Set(ids)].filter((id) => !passTimes.has(id));
3460
+ if (missing.length > 0) {
3461
+ const readAt = Date.now();
3462
+ const identity = reader.hostIdentity();
3463
+ current.identity = identity;
3464
+ const reusable = previous?.identity === identity ? previous.entries : undefined;
3465
+ const known = [];
3466
+ const refresh = [];
3467
+ let first = Infinity;
3468
+ let last = -Infinity;
3469
+ for (const id of missing) {
3470
+ const entry = reusable?.get(id);
3471
+ if (entry && isSettled(entry, readAt)) {
3472
+ known.push(id);
3473
+ first = Math.min(first, entry.version.seq);
3474
+ last = Math.max(last, entry.version.seq);
3475
+ } else
3476
+ refresh.push(id);
3477
+ }
3478
+ const versions = reader.messageTimeVersions(sessionID, known, { first, last });
3479
+ for (const id of known) {
3480
+ const version = versions.get(id);
3481
+ const cached = reusable?.get(id);
3482
+ if (!version) {
3483
+ passTimes.set(id, null);
3484
+ } else if (cached && sameVersion(cached.version, version) && (version.type === "user" || cached.time.completed !== undefined)) {
3485
+ current.entries.set(id, cached);
3486
+ passTimes.set(id, cached.time);
3487
+ } else
3488
+ refresh.push(id);
3489
+ }
3490
+ const times = reader.messageTimes(sessionID, refresh, versions);
3491
+ for (const id of refresh) {
3492
+ const time = times.get(id);
3493
+ const version = versions.get(id);
3494
+ passTimes.set(id, time ?? null);
3495
+ if (time && version) {
3496
+ const entry = { version, time };
3497
+ if (isSettled(entry, readAt))
3498
+ current.entries.set(id, entry);
3499
+ }
3500
+ }
3501
+ }
3502
+ const result = new Map;
3503
+ for (const id of ids) {
3504
+ const time = passTimes.get(id);
3505
+ if (time)
3506
+ result.set(id, { ...time });
3507
+ }
3508
+ return result;
3509
+ };
3510
+ }
3511
+ }
3512
+
3386
3513
  // src/v2/hooks/channel2.ts
3387
3514
  import { randomBytes } from "node:crypto";
3388
3515
  var pendingCandidates = new WeakMap;
@@ -5068,6 +5195,7 @@ function coveredInstructionRows(reader, sessionID, throughSeq, model) {
5068
5195
  async function registerContext(context) {
5069
5196
  const directory = context.location.directory;
5070
5197
  const config = loadPluginConfigDetailed(directory).config;
5198
+ log2(`[magic-context] OpenCode 2 keep_subagents=${config.keep_subagents === true}`);
5071
5199
  setHomeProjectPermission(config.allow_home_project);
5072
5200
  if (!config.enabled)
5073
5201
  return;
@@ -5200,6 +5328,7 @@ async function registerContext(context) {
5200
5328
  });
5201
5329
  let hiddenAgentsReady;
5202
5330
  const readerPool = new V2StoreReaderPool;
5331
+ const messageTimesCache = new V2MessageTimesCache;
5203
5332
  const openStoreReader = () => readerPool.open(gaDatabasePath(getDataDir(), process.env.OPENCODE_CHANNEL ?? "latest"));
5204
5333
  const createHiddenExecutor = async (database) => {
5205
5334
  await cleanupLegacyOnce(database);
@@ -5563,6 +5692,12 @@ async function registerContext(context) {
5563
5692
  if (event.type?.startsWith("session.revert.") || event.type === "session.message.content.updated") {
5564
5693
  nativeFoldReplay?.onEvent(event);
5565
5694
  restoredRows.forget(sessionID);
5695
+ messageTimesCache.delete(sessionID);
5696
+ }
5697
+ if (event.type === "session.step.started" || event.type === "session.step.ended" || event.type === "session.step.failed") {
5698
+ const messageID = event.data.assistantMessageID;
5699
+ if (typeof messageID === "string")
5700
+ messageTimesCache.deleteMessage(sessionID, messageID);
5566
5701
  }
5567
5702
  if (event.type === "session.error" || event.type === "session.execution.failed") {
5568
5703
  const error = hiddenTerminalError(event);
@@ -5601,6 +5736,7 @@ async function registerContext(context) {
5601
5736
  rawProviders.get(sessionID)?.();
5602
5737
  rawProviders.delete(sessionID);
5603
5738
  usage.delete(sessionID);
5739
+ messageTimesCache.delete(sessionID);
5604
5740
  hiddenSessionErrors.delete(sessionID);
5605
5741
  storageNoticeBySession.delete(sessionID);
5606
5742
  liveModels.delete(sessionID);
@@ -5895,22 +6031,9 @@ async function registerContext(context) {
5895
6031
  }
5896
6032
  await dropStorageNotices(draft.messages, isMagicContextSynthetic);
5897
6033
  const hostMessagesAtEntry = [...draft.messages];
5898
- const passTimes = new Map;
6034
+ const cachedTimes = messageTimesCache.pass(draft.sessionID);
5899
6035
  const readTimes = (reader, messages) => {
5900
- const ids = timeIds(messages);
5901
- const missing = ids.filter((id) => !passTimes.has(id));
5902
- if (missing.length > 0) {
5903
- const read = reader.messageTimes(draft.sessionID, missing);
5904
- for (const id of missing)
5905
- passTimes.set(id, read.get(id) ?? null);
5906
- }
5907
- const times = new Map;
5908
- for (const id of ids) {
5909
- const time = passTimes.get(id);
5910
- if (time)
5911
- times.set(id, time);
5912
- }
5913
- return times;
6036
+ return cachedTimes(reader, timeIds(messages));
5914
6037
  };
5915
6038
  liveModels.set(draft.sessionID, {
5916
6039
  providerID: draft.model.providerID,
@@ -6435,6 +6558,7 @@ async function registerContext(context) {
6435
6558
  }, 0));
6436
6559
  return {
6437
6560
  async dispose() {
6561
+ messageTimesCache.clear();
6438
6562
  usageController.abort();
6439
6563
  await hiddenCompletionExecutor?.dispose();
6440
6564
  await usageDone;
@@ -1 +1 @@
1
- {"version":3,"file":"work-metrics.d.ts","sourceRoot":"","sources":["../../../src/features/magic-context/work-metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,WAAW,WAAW;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAwFD,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,CAQ/F;AAaD,0EAA0E;AAC1E,MAAM,WAAW,iBAAiB;IAC9B,0EAA0E;IAC1E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,UAAU;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,kBAAkB,EAAE,OAAO,CAAC;IAC5B,wDAAwD;IACxD,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;CACjB;AAED,2EAA2E;AAC3E,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAClB;AAID,wBAAgB,qBAAqB,IAAI,gBAAgB,CAExD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAC/B,IAAI,EAAE,iBAAiB,EAAE,EACzB,KAAK,EAAE,gBAAgB,GACxB,gBAAgB,CA2ClB;AAaD,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,WAAW,CAWrE;AA6CD,yEAAyE;AACzE,wBAAgB,2BAA2B,CACvC,UAAU,EAAE,QAAQ,EACpB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,sBAA6B,GAC1C,iBAAiB,EAAE,CAerB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qCAAqC,CACjD,UAAU,EAAE,QAAQ,EACpB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,gBAAgB,EACvB,UAAU,GAAE,sBAA6B,GAC1C;IAAE,KAAK,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAkBnD;AAED,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,cAAc,EAAE,GAAG,OAAO,EAAE,GAAG,WAAW,CA8B9F"}
1
+ {"version":3,"file":"work-metrics.d.ts","sourceRoot":"","sources":["../../../src/features/magic-context/work-metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,WAAW,WAAW;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAwFD,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,CAQ/F;AAaD,0EAA0E;AAC1E,MAAM,WAAW,iBAAiB;IAC9B,0EAA0E;IAC1E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,UAAU;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,kBAAkB,EAAE,OAAO,CAAC;IAC5B,wDAAwD;IACxD,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;CACjB;AAED,2EAA2E;AAC3E,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAClB;AAID,wBAAgB,qBAAqB,IAAI,gBAAgB,CAExD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAC/B,IAAI,EAAE,iBAAiB,EAAE,EACzB,KAAK,EAAE,gBAAgB,GACxB,gBAAgB,CA2ClB;AAaD,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,WAAW,CAWrE;AAkDD,yEAAyE;AACzE,wBAAgB,2BAA2B,CACvC,UAAU,EAAE,QAAQ,EACpB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,sBAA6B,GAC1C,iBAAiB,EAAE,CAmBrB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qCAAqC,CACjD,UAAU,EAAE,QAAQ,EACpB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,gBAAgB,EACvB,UAAU,GAAE,sBAA6B,GAC1C;IAAE,KAAK,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAkBnD;AAED,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,cAAc,EAAE,GAAG,OAAO,EAAE,GAAG,WAAW,CA8B9F"}
@@ -1,4 +1,4 @@
1
- import { type Compartment } from "../../features/magic-context/compartment-storage";
1
+ import type { Compartment } from "../../features/magic-context/compartment-storage";
2
2
  import type { Database } from "../../shared/sqlite";
3
3
  /**
4
4
  * Whether the host holds a message in the history being checked: `true` or
@@ -1 +1 @@
1
- {"version":3,"file":"history-boundary-repair.d.ts","sourceRoot":"","sources":["../../../src/hooks/magic-context/history-boundary-repair.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,KAAK,WAAW,EAEnB,MAAM,kDAAkD,CAAC;AAU1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AA0CpD;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC;AAExE,MAAM,MAAM,qBAAqB;AAC7B,yDAAyD;AACvD;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE;AACpB,4EAA4E;GAC1E;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE;AACrB,8EAA8E;GAC5E;IACI,IAAI,EAAE,UAAU,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,2DAA2D;IAC3D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC9B;AACH,+FAA+F;GAC7F;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;AACxF,oEAAoE;GAClE;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAA;CAAE,CAAC;AAOxF,KAAK,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,cAAc,CAAC,CAAC;AAwGtE;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE;IAC/C,EAAE,EAAE,QAAQ,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,mBAAmB,CAAC;IACnC,wFAAwF;IACxF,KAAK,CAAC,EAAE,OAAO,GAAG,eAAe,CAAC;IAClC,qFAAqF;IACrF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;CAC5F,GAAG,qBAAqB,CA8HxB"}
1
+ {"version":3,"file":"history-boundary-repair.d.ts","sourceRoot":"","sources":["../../../src/hooks/magic-context/history-boundary-repair.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kDAAkD,CAAC;AAWpF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AA0CpD;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC;AAExE,MAAM,MAAM,qBAAqB;AAC7B,yDAAyD;AACvD;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE;AACpB,4EAA4E;GAC1E;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE;AACrB,8EAA8E;GAC5E;IACI,IAAI,EAAE,UAAU,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,2DAA2D;IAC3D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC9B;AACH,+FAA+F;GAC7F;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;AACxF,oEAAoE;GAClE;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAA;CAAE,CAAC;AAOxF,KAAK,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,cAAc,CAAC,CAAC;AAoItE;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE;IAC/C,EAAE,EAAE,QAAQ,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,mBAAmB,CAAC;IACnC,wFAAwF;IACxF,KAAK,CAAC,EAAE,OAAO,GAAG,eAAe,CAAC;IAClC,qFAAqF;IACrF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;CAC5F,GAAG,qBAAqB,CA8HxB"}
@@ -1,6 +1,6 @@
1
1
  import { type FrozenReasoningPart } from "../../features/magic-context/merged-reasoning-decisions";
2
2
  import type { MessageLike, ThinkingLikePart } from "./tag-messages";
3
- export declare function isMarkerOnlyText(text: string): boolean;
3
+ export { isMarkerOnlyText } from "../../shared/marker-only-text";
4
4
  /**
5
5
  * Neutralize system-injected messages (notifications, reminders, internal markers).
6
6
  * These are internal plumbing messages that should never reach the LLM.
@@ -1 +1 @@
1
- {"version":3,"file":"strip-content.d.ts","sourceRoot":"","sources":["../../../src/hooks/magic-context/strip-content.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"strip-content.d.ts","sourceRoot":"","sources":["../../../src/hooks/magic-context/strip-content.ts"],"names":[],"mappings":"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"}
@@ -4704,6 +4704,13 @@ function hasAnthropicReasoning(messages) {
4704
4704
  });
4705
4705
  }
4706
4706
 
4707
+ // src/shared/marker-only-text.ts
4708
+ var MARKER_ONLY_PATTERN = /^(?:(?:§\d+§|\[dropped\s*(?:\d+|§\d*§)?\]|\[cleared\])\s*)+$/;
4709
+ function isMarkerOnlyText(text) {
4710
+ const trimmed = text.trim();
4711
+ return trimmed.length > 0 && MARKER_ONLY_PATTERN.test(trimmed);
4712
+ }
4713
+
4707
4714
  // src/shared/processed-image-eligibility.ts
4708
4715
  function createProcessedImageEligibility(messages, messageTagNumbers, options) {
4709
4716
  const ageTags = new Map;
@@ -4840,11 +4847,6 @@ function prepareServedShapeRepair(db, sessionID, messages, readPreviouslyServed,
4840
4847
  }
4841
4848
 
4842
4849
  // src/hooks/magic-context/strip-content.ts
4843
- var MARKER_ONLY_PATTERN = /^(?:(?:§\d+§|\[dropped(?: §\d+§)?\]|\[cleared\])\s*)+$/;
4844
- function isMarkerOnlyText(text) {
4845
- const trimmed = text.trim();
4846
- return trimmed.length > 0 && MARKER_ONLY_PATTERN.test(trimmed);
4847
- }
4848
4850
  var TAG_PREFIX_PATTERN = /^§\d+§\s*/;
4849
4851
  var SYSTEM_INJECTION_PATTERNS = [
4850
4852
  /^<!-- OMO_INTERNAL_INITIATOR -->$/,
@@ -17,7 +17,7 @@ import {
17
17
  import {
18
18
  hasRawMessageProvider2,
19
19
  readRawSessionMessageIdOrdinalsForRange2
20
- } from "./index-zhgqgxtt.js";
20
+ } from "./index-0fe4q77z.js";
21
21
 
22
22
  // src/tools/ctx-expand/search-archive.ts
23
23
  var archiveReadsOnThisThread = 0;
@@ -9,7 +9,7 @@ import {
9
9
  } from "./index-b88dwwrh.js";
10
10
  import {
11
11
  cleanUserText2
12
- } from "./index-zhgqgxtt.js";
12
+ } from "./index-0fe4q77z.js";
13
13
  import {
14
14
  recordMessageFtsRowid2,
15
15
  recordIndexedMessageTime2,
@@ -15,7 +15,7 @@ import {
15
15
  getActiveCompartmentRun,
16
16
  markActiveCompartmentRunPublished,
17
17
  registerActiveCompartmentRun
18
- } from "./index-q9zvphbq.js";
18
+ } from "./index-k0dpkyn7.js";
19
19
  import {
20
20
  inRootAsyncContext2
21
21
  } from "./index-gzy5w8ya.js";
@@ -27,7 +27,7 @@ import {
27
27
  getHistorianFailureState,
28
28
  clearEmergencyRecovery,
29
29
  prepareRawSessionOrdinals2
30
- } from "./index-zhgqgxtt.js";
30
+ } from "./index-0fe4q77z.js";
31
31
  import {
32
32
  pushNotification2
33
33
  } from "./index-x8a7jmkh.js";
@@ -37,7 +37,7 @@ import {
37
37
  import {
38
38
  setRecompStarting2,
39
39
  setRecompTerminal2
40
- } from "./index-093c4g1c.js";
40
+ } from "./index-adr4vfys.js";
41
41
 
42
42
  // src/hooks/magic-context/wrapup-orchestrator.ts
43
43
  import * as crypto from "node:crypto";
@@ -3,12 +3,12 @@ import {
3
3
  } from "./index-h7tgn49j.js";
4
4
  import {
5
5
  clearEmergencyRecovery
6
- } from "./index-zhgqgxtt.js";
6
+ } from "./index-0fe4q77z.js";
7
7
  import {
8
8
  requestPendingMaterialization,
9
9
  dropSlot,
10
10
  executeContextRecomp
11
- } from "./index-q9zvphbq.js";
11
+ } from "./index-k0dpkyn7.js";
12
12
  import {
13
13
  renderUserFacingFailure,
14
14
  userFacingFailureCode
@@ -266,7 +266,7 @@ import {
266
266
  snapRangeToCompartments,
267
267
  getActiveCompartmentRun,
268
268
  startCompartmentAgent
269
- } from "./index-q9zvphbq.js";
269
+ } from "./index-k0dpkyn7.js";
270
270
  import {
271
271
  hasTrustedAbsoluteWall,
272
272
  applyProvenInputFloor,
@@ -487,7 +487,7 @@ import {
487
487
  readRawSessionMessageById2,
488
488
  readSessionChunk2,
489
489
  readRawSessionSeedTail2
490
- } from "./index-zhgqgxtt.js";
490
+ } from "./index-0fe4q77z.js";
491
491
  import {
492
492
  BoundedSessionMap,
493
493
  getMeasuredToolDefinitionTokens
@@ -505,7 +505,7 @@ import {
505
505
  runSqliteOptimize,
506
506
  openDatabase,
507
507
  openCurrentDatabase
508
- } from "./index-h4s5jk7f.js";
508
+ } from "./index-hbt0sbv2.js";
509
509
  import {
510
510
  registerOwnRpcServerInstance,
511
511
  rpcPortDir,
@@ -574,7 +574,7 @@ import {
574
574
  clearIndexedMessages,
575
575
  indexSingleMessage,
576
576
  indexMessagesAfterOrdinal
577
- } from "./index-tx68g9nc.js";
577
+ } from "./index-4s4zq97n.js";
578
578
  import {
579
579
  renderUserFacingFailure,
580
580
  userFacingFailureCode,
@@ -684,7 +684,7 @@ import {
684
684
  resolveMemoriesByIdsForSearch2,
685
685
  unifiedSearch2,
686
686
  formatSearchResults2
687
- } from "./index-wvffze8y.js";
687
+ } from "./index-vtz789ex.js";
688
688
  import {
689
689
  flushIgnoredMessages2,
690
690
  clearIgnoredMessages2,
@@ -694,7 +694,7 @@ import {
694
694
  import {
695
695
  setRecompStarting2,
696
696
  setRecompTerminal2
697
- } from "./index-093c4g1c.js";
697
+ } from "./index-adr4vfys.js";
698
698
  import {
699
699
  makeToolCompositeKey,
700
700
  searchMessageHistoryOffThread,
@@ -757,7 +757,7 @@ import {
757
757
  abortSessionFailClosed2,
758
758
  evaluateEmergencyFailClosed2,
759
759
  runPostTransformPhase2
760
- } from "./index-bps8vn9r.js";
760
+ } from "./index-vzz570j8.js";
761
761
  import {
762
762
  ANNOUNCEMENT_VERSION2,
763
763
  ANNOUNCEMENT_FEATURES2,
@@ -770,7 +770,7 @@ import {
770
770
  } from "./index-fmsr7v69.js";
771
771
  import {
772
772
  renderSearchArchiveOffThread2
773
- } from "./index-a1h316s9.js";
773
+ } from "./index-3jmx3fae.js";
774
774
  import {
775
775
  COMPACTION_ENABLED_PATH,
776
776
  isDreamerRunnable,
@@ -13274,6 +13274,13 @@ WHERE session_id = ?
13274
13274
  AND (time_created > ? OR (time_created = ? AND id > ?))
13275
13275
  ORDER BY time_created, id`;
13276
13276
  var V2_ASSISTANT_USAGE_ROWS_AFTER_SQL = `
13277
+ WITH newer AS (
13278
+ SELECT id, seq, data FROM session_message
13279
+ WHERE session_id = ? AND type = 'assistant' AND data IS NOT NULL AND seq > ?
13280
+ UNION ALL
13281
+ SELECT id, seq, data FROM session_message
13282
+ WHERE session_id = ? AND type = 'assistant' AND data IS NOT NULL AND seq = ? AND id > ?
13283
+ )
13277
13284
  SELECT
13278
13285
  json_extract(data, '$.agent') AS agent,
13279
13286
  seq AS time_created,
@@ -13282,14 +13289,10 @@ SELECT
13282
13289
  + COALESCE(json_extract(data, '$.tokens.cache.read'), 0)
13283
13290
  + COALESCE(json_extract(data, '$.tokens.cache.write'), 0) AS prompt,
13284
13291
  COALESCE(json_extract(data, '$.tokens.output'), 0) AS output
13285
- FROM session_message
13286
- WHERE session_id = ?
13287
- AND type = 'assistant'
13288
- AND data IS NOT NULL
13289
- AND (seq > ? OR (seq = ? AND id > ?))
13292
+ FROM newer
13290
13293
  ORDER BY seq, id`;
13291
13294
  function readAssistantUsageRowsAfter(openCodeDb, sessionId, afterTimeCreated, afterId, generation = "v1") {
13292
- const rows = openCodeDb.prepare(generation === "v2" ? V2_ASSISTANT_USAGE_ROWS_AFTER_SQL : ASSISTANT_USAGE_ROWS_AFTER_SQL).all(sessionId, afterTimeCreated, afterTimeCreated, afterId);
13295
+ const rows = openCodeDb.prepare(generation === "v2" ? V2_ASSISTANT_USAGE_ROWS_AFTER_SQL : ASSISTANT_USAGE_ROWS_AFTER_SQL).all(...generation === "v2" ? [sessionId, afterTimeCreated, sessionId, afterTimeCreated, afterId] : [sessionId, afterTimeCreated, afterTimeCreated, afterId]);
13293
13296
  return rows.map((r) => ({
13294
13297
  agent: r.agent ?? null,
13295
13298
  timeCreated: Number(r.time_created ?? 0),
@@ -16523,7 +16526,7 @@ function registerRpcHandlers(rpcServer, args) {
16523
16526
  const db = readDatabase();
16524
16527
  if (!db)
16525
16528
  return { ok: false, error: "db unavailable" };
16526
- const { runManagedRecomp } = await importPluginModule(() => import("./recomp-orchestrator-na34m4c5.js"));
16529
+ const { runManagedRecomp } = await importPluginModule(() => import("./recomp-orchestrator-w3pjp33d.js"));
16527
16530
  const { sendIgnoredMessage } = await importPluginModule(() => import("./send-session-notification-vz86nt79.js"));
16528
16531
  log2(`[rpc] recomp requested for session ${sessionId}`);
16529
16532
  if (!args.client && !args.hiddenCompletionExecutor) {
@@ -16608,7 +16611,7 @@ function registerRpcHandlers(rpcServer, args) {
16608
16611
  const db = readDatabase();
16609
16612
  if (!db)
16610
16613
  return { ok: false, error: "db unavailable" };
16611
- const { runManagedWrapup } = await importPluginModule(() => import("./wrapup-orchestrator-f0xr7pft.js"));
16614
+ const { runManagedWrapup } = await importPluginModule(() => import("./wrapup-orchestrator-kjmkms5g.js"));
16612
16615
  const model = liveSessionState.liveModelBySession.get(sessionId);
16613
16616
  const contextLimit = model ? resolveContextLimit(model.providerID, model.modelID, { db, sessionID: sessionId }) : 128000;
16614
16617
  const ctx = {