@moxxy/core 0.3.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.
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/sessions/persistence.d.ts +56 -0
- package/dist/sessions/persistence.d.ts.map +1 -1
- package/dist/sessions/persistence.js +90 -0
- package/dist/sessions/persistence.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +3 -0
- package/src/sessions/page.test.ts +179 -0
- package/src/sessions/persistence.ts +109 -0
package/dist/index.d.ts
CHANGED
|
@@ -27,7 +27,7 @@ export { SynthesizerRegistry } from './registries/synthesizers.js';
|
|
|
27
27
|
export { EmbedderRegistry } from './registries/embedders.js';
|
|
28
28
|
export { IsolatorRegistry as ContributedIsolatorRegistry } from './registries/isolators.js';
|
|
29
29
|
export { RequirementRegistry, type RequirementRegistryOptions } from './requirements.js';
|
|
30
|
-
export { SessionPersistence, defaultSessionsDir, readIndex as readSessionIndex, restoreEvents as restoreSessionEvents, deleteSession, type SessionMeta, type SessionPersistenceOpts, } from './sessions/persistence.js';
|
|
30
|
+
export { SessionPersistence, defaultSessionsDir, readIndex as readSessionIndex, restoreEvents as restoreSessionEvents, readEventPage as readSessionEventPage, pageEvents, deleteSession, type SessionMeta, type SessionPersistenceOpts, type EventPage, } from './sessions/persistence.js';
|
|
31
31
|
export { PluginHost, PluginRequirementError, type PluginLoader, type PluginSkipReason, type PluginSkipRecord, type PluginSkipSource, type RegisterStaticOptions, } from './plugins/host.js';
|
|
32
32
|
export { HookDispatcherImpl } from './plugins/lifecycle.js';
|
|
33
33
|
export { discoverPlugins } from './plugins/discovery.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EACL,UAAU,EACV,KAAK,KAAK,EACV,KAAK,iBAAiB,EACtB,KAAK,WAAW,GACjB,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACpG,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EACf,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,uBAAuB,EACvB,eAAe,EACf,0BAA0B,EAC1B,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAG/D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,IAAI,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,KAAK,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,SAAS,IAAI,gBAAgB,EAC7B,aAAa,IAAI,oBAAoB,EACrC,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,sBAAsB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -28,7 +28,7 @@ export { SynthesizerRegistry } from './registries/synthesizers.js';
|
|
|
28
28
|
export { EmbedderRegistry } from './registries/embedders.js';
|
|
29
29
|
export { IsolatorRegistry as ContributedIsolatorRegistry } from './registries/isolators.js';
|
|
30
30
|
export { RequirementRegistry } from './requirements.js';
|
|
31
|
-
export { SessionPersistence, defaultSessionsDir, readIndex as readSessionIndex, restoreEvents as restoreSessionEvents, deleteSession, } from './sessions/persistence.js';
|
|
31
|
+
export { SessionPersistence, defaultSessionsDir, readIndex as readSessionIndex, restoreEvents as restoreSessionEvents, readEventPage as readSessionEventPage, pageEvents, deleteSession, } from './sessions/persistence.js';
|
|
32
32
|
export { PluginHost, PluginRequirementError, } from './plugins/host.js';
|
|
33
33
|
export { HookDispatcherImpl } from './plugins/lifecycle.js';
|
|
34
34
|
export { discoverPlugins } from './plugins/discovery.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAuB,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,WAAW,EAAuB,MAAM,eAAe,CAAC;AAC1E,OAAO,EACL,UAAU,GAIX,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAwB,MAAM,gBAAgB,CAAC;AACpG,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,GAEhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,cAAc,GAGf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,uBAAuB,EACvB,eAAe,EACf,0BAA0B,GAK3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAsB,MAAM,iBAAiB,CAAC;AAC/D,wEAAwE;AACxE,oCAAoC;AACpC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAqB,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,IAAI,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAmC,MAAM,mBAAmB,CAAC;AACzF,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,SAAS,IAAI,gBAAgB,EAC7B,aAAa,IAAI,oBAAoB,EACrC,aAAa,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -175,6 +175,62 @@ export declare function readIndex(dir?: string): Promise<SessionMeta[]>;
|
|
|
175
175
|
* post-gap history.
|
|
176
176
|
*/
|
|
177
177
|
export declare function restoreEvents(sessionId: string, dir?: string, logger?: Logger): Promise<MoxxyEvent[]>;
|
|
178
|
+
/** One page of persisted events, newest-page-first paging (see
|
|
179
|
+
* {@link readEventPage}). */
|
|
180
|
+
export interface EventPage {
|
|
181
|
+
/** The events in this page, in ascending `seq` order. */
|
|
182
|
+
readonly events: MoxxyEvent[];
|
|
183
|
+
/**
|
|
184
|
+
* Cursor to pass as `before` for the NEXT (older) page — the `seq` of the
|
|
185
|
+
* OLDEST event in this page. `null` once the start of history (the first
|
|
186
|
+
* persisted event) is included, signalling there is no older page.
|
|
187
|
+
*/
|
|
188
|
+
readonly prevCursor: number | null;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Read ONE page of a persisted session's events without re-materializing the
|
|
192
|
+
* whole conversation into a live {@link EventLog}. Backs the runner's
|
|
193
|
+
* `session.loadHistory` so a thin client (the desktop) can page history from
|
|
194
|
+
* the runner's authoritative JSONL instead of its own NDJSON mirror.
|
|
195
|
+
*
|
|
196
|
+
* Paging is newest-first, walking backwards:
|
|
197
|
+
* - `before == null` — the NEWEST page: the last `limit` events on disk.
|
|
198
|
+
* - `before == N` — the page of (up to) `limit` events strictly OLDER than
|
|
199
|
+
* `seq === N` (the events immediately preceding the cursor). Pass the
|
|
200
|
+
* previous page's `prevCursor` here to step one page further back.
|
|
201
|
+
*
|
|
202
|
+
* The returned `events` are always in ascending `seq` order (oldest-first
|
|
203
|
+
* WITHIN the page) so a caller can prepend a page to an in-order transcript.
|
|
204
|
+
* `prevCursor` is the `seq` of the page's oldest event, or `null` once the
|
|
205
|
+
* first persisted event is included (no older page remains).
|
|
206
|
+
*
|
|
207
|
+
* Corrupt lines are skipped (matching {@link restoreEvents}); unlike
|
|
208
|
+
* `restoreEvents` this is a READ-ONLY reader — it never rewrites the file, so
|
|
209
|
+
* it preserves the JSONL exactly (no atomic-write / mutex needed: there is no
|
|
210
|
+
* mutation). Paging keys on each event's on-disk `seq`. Determinism holds for a
|
|
211
|
+
* MONOTONICALLY-INCREASING seq sequence — including a gapped-but-increasing one
|
|
212
|
+
* (the append path guarantees this; the next resume re-sequences to contiguous
|
|
213
|
+
* 0..n-1 anyway). DUPLICATE / non-strictly-increasing seqs are only reachable
|
|
214
|
+
* via external file corruption, and a backward `prevCursor` walk over them can
|
|
215
|
+
* drop events page-size-dependently until that next resume repairs the log.
|
|
216
|
+
*
|
|
217
|
+
* A missing log file is treated as an EMPTY history (`{ events: [], prevCursor:
|
|
218
|
+
* null }`), not an error — a freshly-created session whose JSONL hasn't been
|
|
219
|
+
* written yet must page as empty rather than throw.
|
|
220
|
+
*/
|
|
221
|
+
export declare function readEventPage(sessionId: string, opts: {
|
|
222
|
+
before: number | null;
|
|
223
|
+
limit: number;
|
|
224
|
+
}, dir?: string): Promise<EventPage>;
|
|
225
|
+
/**
|
|
226
|
+
* Slice one newest-first page out of an ascending-`seq` event array. Pure +
|
|
227
|
+
* exported so the runner can reuse the EXACT paging semantics when it serves a
|
|
228
|
+
* page out of its in-memory log instead of disk — the two paths must agree
|
|
229
|
+
* byte-for-byte or a client crossing between them (in-memory → disk fallback)
|
|
230
|
+
* would see a discontinuity. `events` MUST be ordered oldest-first (the on-disk
|
|
231
|
+
* / append order); `before`/`limit` follow {@link readEventPage}.
|
|
232
|
+
*/
|
|
233
|
+
export declare function pageEvents(events: ReadonlyArray<MoxxyEvent>, before: number | null, limit: number): EventPage;
|
|
178
234
|
/**
|
|
179
235
|
* Remove a session's log file and its sidecar. A leftover legacy `index.json`
|
|
180
236
|
* row, if any, is harmless — `readIndex` filters out sessions whose `.jsonl` is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/sessions/persistence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,EAA2B,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAEtF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,oBAAoB,CAAS;IACrC,2EAA2E;IAC3E,OAAO,CAAC,UAAU,CAA8C;IAChE;;;;OAIG;IACH,OAAO,CAAC,UAAU,CAAwB;IAC1C;;;;;;OAMG;IACH,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC;;;;OAIG;IACH,OAAO,CAAC,aAAa,CAAS;gBAElB,IAAI,EAAE,sBAAsB;IAkBxC;;;;;;;;;;OAUG;IACH,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,IAAI;IA0BjC;;;;;;;;OAQG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;;;;;;OAOG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC;;;;OAIG;IACH,YAAY,CAAC,KAAK,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAStE,OAAO,CAAC,aAAa;IA6BrB;;;OAGG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,gBAAgB;IAexB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,kBAAkB;YAeZ,UAAU;IAwBxB;;6DAEyD;IACzD,OAAO,CAAC,WAAW;CAapB;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,GAAG,SAAuB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAgDlF;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,GAAG,SAAuB,EAC1B,MAAM,GAAE,MAAuB,GAC9B,OAAO,CAAC,UAAU,EAAE,CAAC,CAmDvB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,GAAG,SAAuB,GACzB,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/sessions/persistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -413,6 +413,96 @@ export async function restoreEvents(sessionId, dir = defaultSessionsDir(), logge
|
|
|
413
413
|
}
|
|
414
414
|
return events;
|
|
415
415
|
}
|
|
416
|
+
/**
|
|
417
|
+
* Read ONE page of a persisted session's events without re-materializing the
|
|
418
|
+
* whole conversation into a live {@link EventLog}. Backs the runner's
|
|
419
|
+
* `session.loadHistory` so a thin client (the desktop) can page history from
|
|
420
|
+
* the runner's authoritative JSONL instead of its own NDJSON mirror.
|
|
421
|
+
*
|
|
422
|
+
* Paging is newest-first, walking backwards:
|
|
423
|
+
* - `before == null` — the NEWEST page: the last `limit` events on disk.
|
|
424
|
+
* - `before == N` — the page of (up to) `limit` events strictly OLDER than
|
|
425
|
+
* `seq === N` (the events immediately preceding the cursor). Pass the
|
|
426
|
+
* previous page's `prevCursor` here to step one page further back.
|
|
427
|
+
*
|
|
428
|
+
* The returned `events` are always in ascending `seq` order (oldest-first
|
|
429
|
+
* WITHIN the page) so a caller can prepend a page to an in-order transcript.
|
|
430
|
+
* `prevCursor` is the `seq` of the page's oldest event, or `null` once the
|
|
431
|
+
* first persisted event is included (no older page remains).
|
|
432
|
+
*
|
|
433
|
+
* Corrupt lines are skipped (matching {@link restoreEvents}); unlike
|
|
434
|
+
* `restoreEvents` this is a READ-ONLY reader — it never rewrites the file, so
|
|
435
|
+
* it preserves the JSONL exactly (no atomic-write / mutex needed: there is no
|
|
436
|
+
* mutation). Paging keys on each event's on-disk `seq`. Determinism holds for a
|
|
437
|
+
* MONOTONICALLY-INCREASING seq sequence — including a gapped-but-increasing one
|
|
438
|
+
* (the append path guarantees this; the next resume re-sequences to contiguous
|
|
439
|
+
* 0..n-1 anyway). DUPLICATE / non-strictly-increasing seqs are only reachable
|
|
440
|
+
* via external file corruption, and a backward `prevCursor` walk over them can
|
|
441
|
+
* drop events page-size-dependently until that next resume repairs the log.
|
|
442
|
+
*
|
|
443
|
+
* A missing log file is treated as an EMPTY history (`{ events: [], prevCursor:
|
|
444
|
+
* null }`), not an error — a freshly-created session whose JSONL hasn't been
|
|
445
|
+
* written yet must page as empty rather than throw.
|
|
446
|
+
*/
|
|
447
|
+
export async function readEventPage(sessionId, opts, dir = defaultSessionsDir()) {
|
|
448
|
+
const logPath = path.join(dir, `${sessionId}.jsonl`);
|
|
449
|
+
let raw;
|
|
450
|
+
try {
|
|
451
|
+
raw = await fs.readFile(logPath, 'utf8');
|
|
452
|
+
}
|
|
453
|
+
catch {
|
|
454
|
+
// No log on disk yet → empty history, not an error.
|
|
455
|
+
return { events: [], prevCursor: null };
|
|
456
|
+
}
|
|
457
|
+
// Parse the JSONL, skipping corrupt lines (one bad append must not make the
|
|
458
|
+
// rest unreadable). Read-only: we never rewrite the file here.
|
|
459
|
+
const all = [];
|
|
460
|
+
for (const line of raw.split('\n')) {
|
|
461
|
+
if (!line.trim())
|
|
462
|
+
continue;
|
|
463
|
+
try {
|
|
464
|
+
all.push(JSON.parse(line));
|
|
465
|
+
}
|
|
466
|
+
catch {
|
|
467
|
+
// skip a malformed/half-written line, same as restoreEvents
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
// Delegate ALL paging (including the limit/cursor clamping) to pageEvents so
|
|
471
|
+
// the disk and in-memory paths are identical by construction — no separate
|
|
472
|
+
// limit handling here that could diverge from the in-memory page.
|
|
473
|
+
return pageEvents(all, opts.before, opts.limit);
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Slice one newest-first page out of an ascending-`seq` event array. Pure +
|
|
477
|
+
* exported so the runner can reuse the EXACT paging semantics when it serves a
|
|
478
|
+
* page out of its in-memory log instead of disk — the two paths must agree
|
|
479
|
+
* byte-for-byte or a client crossing between them (in-memory → disk fallback)
|
|
480
|
+
* would see a discontinuity. `events` MUST be ordered oldest-first (the on-disk
|
|
481
|
+
* / append order); `before`/`limit` follow {@link readEventPage}.
|
|
482
|
+
*/
|
|
483
|
+
export function pageEvents(events, before, limit) {
|
|
484
|
+
const cap = Math.max(0, Math.floor(limit));
|
|
485
|
+
if (cap === 0 || events.length === 0) {
|
|
486
|
+
return { events: [], prevCursor: events.length === 0 ? null : before };
|
|
487
|
+
}
|
|
488
|
+
// Exclusive upper bound by `seq`: the first index whose event is NOT older
|
|
489
|
+
// than `before`. `before == null` (newest page) keeps the whole array.
|
|
490
|
+
let end = events.length;
|
|
491
|
+
if (before !== null) {
|
|
492
|
+
end = 0;
|
|
493
|
+
for (let i = 0; i < events.length; i += 1) {
|
|
494
|
+
if (events[i].seq < before)
|
|
495
|
+
end = i + 1;
|
|
496
|
+
else
|
|
497
|
+
break;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
const start = Math.max(0, end - cap);
|
|
501
|
+
const page = events.slice(start, end);
|
|
502
|
+
// `null` once this page reaches the very first event on disk — no older page.
|
|
503
|
+
const prevCursor = start <= 0 ? null : page[0].seq;
|
|
504
|
+
return { events: page, prevCursor };
|
|
505
|
+
}
|
|
416
506
|
/**
|
|
417
507
|
* Remove a session's log file and its sidecar. A leftover legacy `index.json`
|
|
418
508
|
* row, if any, is harmless — `readIndex` filters out sessions whose `.jsonl` is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/sessions/persistence.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/sessions/persistence.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moxxy/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "The moxxy runtime as a programmatic library: the agentic Session + runTurn loop, the event log, the plugin host, every block registry (providers, tools, modes, compactors, cache strategies, channels, …), session persistence, and the permission engine. Pair with @moxxy/sdk to build and embed moxxy agents in your own code.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"moxxy",
|
package/src/index.ts
CHANGED
|
@@ -65,9 +65,12 @@ export {
|
|
|
65
65
|
defaultSessionsDir,
|
|
66
66
|
readIndex as readSessionIndex,
|
|
67
67
|
restoreEvents as restoreSessionEvents,
|
|
68
|
+
readEventPage as readSessionEventPage,
|
|
69
|
+
pageEvents,
|
|
68
70
|
deleteSession,
|
|
69
71
|
type SessionMeta,
|
|
70
72
|
type SessionPersistenceOpts,
|
|
73
|
+
type EventPage,
|
|
71
74
|
} from './sessions/persistence.js';
|
|
72
75
|
export {
|
|
73
76
|
PluginHost,
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { promises as fs } from 'node:fs';
|
|
2
|
+
import * as os from 'node:os';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import { afterEach, describe, expect, it } from 'vitest';
|
|
5
|
+
import type { MoxxyEvent } from '@moxxy/sdk';
|
|
6
|
+
import { pageEvents, readEventPage } from './persistence.js';
|
|
7
|
+
|
|
8
|
+
const tempDirs: string[] = [];
|
|
9
|
+
|
|
10
|
+
async function makeTempDir(): Promise<string> {
|
|
11
|
+
const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'moxxy-page-'));
|
|
12
|
+
tempDirs.push(dir);
|
|
13
|
+
return dir;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
afterEach(async () => {
|
|
17
|
+
await Promise.all(tempDirs.splice(0).map((dir) => fs.rm(dir, { recursive: true, force: true })));
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
/** A contiguous 0..n-1 log of user_prompt events with predictable text. */
|
|
21
|
+
function makeLog(n: number, sessionId = 'pagesession'): MoxxyEvent[] {
|
|
22
|
+
return Array.from({ length: n }, (_, i) => ({
|
|
23
|
+
id: `e${i}`,
|
|
24
|
+
seq: i,
|
|
25
|
+
ts: i,
|
|
26
|
+
sessionId,
|
|
27
|
+
turnId: `t${i}`,
|
|
28
|
+
source: 'user',
|
|
29
|
+
type: 'user_prompt',
|
|
30
|
+
text: `m${i}`,
|
|
31
|
+
})) as unknown as MoxxyEvent[];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async function writeLog(dir: string, id: string, events: MoxxyEvent[]): Promise<void> {
|
|
35
|
+
const body = events.map((e) => JSON.stringify(e) + '\n').join('');
|
|
36
|
+
await fs.writeFile(path.join(dir, `${id}.jsonl`), body, 'utf8');
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
describe('pageEvents (pure newest-first paging)', () => {
|
|
40
|
+
it('newest page (before=null) returns the last `limit` events with a prevCursor', () => {
|
|
41
|
+
const log = makeLog(10);
|
|
42
|
+
const page = pageEvents(log, null, 3);
|
|
43
|
+
expect(page.events.map((e) => e.seq)).toEqual([7, 8, 9]);
|
|
44
|
+
// prevCursor is the seq of the oldest event in THIS page → pass it next.
|
|
45
|
+
expect(page.prevCursor).toBe(7);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('older page via prevCursor returns the events immediately preceding it', () => {
|
|
49
|
+
const log = makeLog(10);
|
|
50
|
+
const newest = pageEvents(log, null, 3); // [7,8,9], prevCursor 7
|
|
51
|
+
const older = pageEvents(log, newest.prevCursor, 3);
|
|
52
|
+
expect(older.events.map((e) => e.seq)).toEqual([4, 5, 6]);
|
|
53
|
+
expect(older.prevCursor).toBe(4);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it('prevCursor is null once the page includes the start of history', () => {
|
|
57
|
+
const log = makeLog(5);
|
|
58
|
+
// Walk back from the newest until the start is reached.
|
|
59
|
+
const p1 = pageEvents(log, null, 2); // [3,4] cursor 3
|
|
60
|
+
expect(p1.prevCursor).toBe(3);
|
|
61
|
+
const p2 = pageEvents(log, p1.prevCursor, 2); // [1,2] cursor 1
|
|
62
|
+
expect(p2.events.map((e) => e.seq)).toEqual([1, 2]);
|
|
63
|
+
expect(p2.prevCursor).toBe(1);
|
|
64
|
+
const p3 = pageEvents(log, p2.prevCursor, 2); // [0] — start reached
|
|
65
|
+
expect(p3.events.map((e) => e.seq)).toEqual([0]);
|
|
66
|
+
expect(p3.prevCursor).toBeNull();
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('limit larger than history returns the whole log and a null cursor', () => {
|
|
70
|
+
const log = makeLog(4);
|
|
71
|
+
const page = pageEvents(log, null, 100);
|
|
72
|
+
expect(page.events.map((e) => e.seq)).toEqual([0, 1, 2, 3]);
|
|
73
|
+
expect(page.prevCursor).toBeNull();
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it('empty log returns no events and a null cursor regardless of before', () => {
|
|
77
|
+
expect(pageEvents([], null, 5)).toEqual({ events: [], prevCursor: null });
|
|
78
|
+
expect(pageEvents([], 3, 5)).toEqual({ events: [], prevCursor: null });
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it('walking all pages reconstructs the full log exactly once, in order', () => {
|
|
82
|
+
const log = makeLog(23);
|
|
83
|
+
const collected: number[] = [];
|
|
84
|
+
let before: number | null = null;
|
|
85
|
+
// Guard the loop so a paging bug can't spin forever.
|
|
86
|
+
for (let guard = 0; guard < 100; guard += 1) {
|
|
87
|
+
const page: ReturnType<typeof pageEvents> = pageEvents(log, before, 5);
|
|
88
|
+
collected.unshift(...page.events.map((e) => e.seq));
|
|
89
|
+
if (page.prevCursor === null) break;
|
|
90
|
+
before = page.prevCursor;
|
|
91
|
+
}
|
|
92
|
+
expect(collected).toEqual(log.map((e) => e.seq));
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
describe('readEventPage (paged JSONL reader)', () => {
|
|
97
|
+
it('pages the newest events off disk without materializing the whole log', async () => {
|
|
98
|
+
const dir = await makeTempDir();
|
|
99
|
+
const id = 'disk1';
|
|
100
|
+
await writeLog(dir, id, makeLog(8, id));
|
|
101
|
+
const page = await readEventPage(id, { before: null, limit: 3 }, dir);
|
|
102
|
+
expect(page.events.map((e) => (e as { text?: string }).text)).toEqual(['m5', 'm6', 'm7']);
|
|
103
|
+
expect(page.prevCursor).toBe(5);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it('steps to the older page via prevCursor', async () => {
|
|
107
|
+
const dir = await makeTempDir();
|
|
108
|
+
const id = 'disk2';
|
|
109
|
+
await writeLog(dir, id, makeLog(8, id));
|
|
110
|
+
const newest = await readEventPage(id, { before: null, limit: 3 }, dir);
|
|
111
|
+
const older = await readEventPage(id, { before: newest.prevCursor, limit: 3 }, dir);
|
|
112
|
+
expect(older.events.map((e) => e.seq)).toEqual([2, 3, 4]);
|
|
113
|
+
expect(older.prevCursor).toBe(2);
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it('returns prevCursor=null at the start of history', async () => {
|
|
117
|
+
const dir = await makeTempDir();
|
|
118
|
+
const id = 'disk3';
|
|
119
|
+
await writeLog(dir, id, makeLog(3, id));
|
|
120
|
+
const page = await readEventPage(id, { before: 1, limit: 10 }, dir);
|
|
121
|
+
expect(page.events.map((e) => e.seq)).toEqual([0]);
|
|
122
|
+
expect(page.prevCursor).toBeNull();
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it('treats a missing log file as empty history (no throw)', async () => {
|
|
126
|
+
const dir = await makeTempDir();
|
|
127
|
+
await expect(readEventPage('never-written', { before: null, limit: 5 }, dir)).resolves.toEqual({
|
|
128
|
+
events: [],
|
|
129
|
+
prevCursor: null,
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
it('agrees with pageEvents on an empty/missing log for any before/limit (incl. limit 0)', async () => {
|
|
134
|
+
// The disk reader delegates clamping to pageEvents, so the two paths cannot
|
|
135
|
+
// diverge — pin it, including the limit===0 corner the wire schema forbids
|
|
136
|
+
// but a direct in-process caller could still hit.
|
|
137
|
+
const dir = await makeTempDir();
|
|
138
|
+
for (const before of [null, 5] as const) {
|
|
139
|
+
for (const limit of [0, 3]) {
|
|
140
|
+
await expect(readEventPage('missing', { before, limit }, dir)).resolves.toEqual(
|
|
141
|
+
pageEvents([], before, limit),
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
it('skips a corrupt line and pages the survivors deterministically', async () => {
|
|
148
|
+
const dir = await makeTempDir();
|
|
149
|
+
const id = 'disk4';
|
|
150
|
+
const events = makeLog(5, id);
|
|
151
|
+
const body =
|
|
152
|
+
events
|
|
153
|
+
.slice(0, 2)
|
|
154
|
+
.map((e) => JSON.stringify(e) + '\n')
|
|
155
|
+
.join('') +
|
|
156
|
+
'{not json\n' +
|
|
157
|
+
events
|
|
158
|
+
.slice(2)
|
|
159
|
+
.map((e) => JSON.stringify(e) + '\n')
|
|
160
|
+
.join('');
|
|
161
|
+
await fs.writeFile(path.join(dir, `${id}.jsonl`), body, 'utf8');
|
|
162
|
+
const page = await readEventPage(id, { before: null, limit: 10 }, dir);
|
|
163
|
+
// The corrupt line is dropped; the four survivors page in seq order.
|
|
164
|
+
expect(page.events.map((e) => e.seq)).toEqual([0, 1, 2, 3, 4]);
|
|
165
|
+
expect(page.prevCursor).toBeNull();
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
it('does NOT rewrite the file on disk (read-only reader)', async () => {
|
|
169
|
+
const dir = await makeTempDir();
|
|
170
|
+
const id = 'disk5';
|
|
171
|
+
// A gapped/corrupt log — restoreEvents would repair it, readEventPage must not.
|
|
172
|
+
const body = '{corrupt\n' + makeLog(2, id).map((e) => JSON.stringify(e) + '\n').join('');
|
|
173
|
+
await fs.writeFile(path.join(dir, `${id}.jsonl`), body, 'utf8');
|
|
174
|
+
const before = await fs.readFile(path.join(dir, `${id}.jsonl`), 'utf8');
|
|
175
|
+
await readEventPage(id, { before: null, limit: 10 }, dir);
|
|
176
|
+
const after = await fs.readFile(path.join(dir, `${id}.jsonl`), 'utf8');
|
|
177
|
+
expect(after).toBe(before);
|
|
178
|
+
});
|
|
179
|
+
});
|
|
@@ -463,6 +463,115 @@ export async function restoreEvents(
|
|
|
463
463
|
return events;
|
|
464
464
|
}
|
|
465
465
|
|
|
466
|
+
/** One page of persisted events, newest-page-first paging (see
|
|
467
|
+
* {@link readEventPage}). */
|
|
468
|
+
export interface EventPage {
|
|
469
|
+
/** The events in this page, in ascending `seq` order. */
|
|
470
|
+
readonly events: MoxxyEvent[];
|
|
471
|
+
/**
|
|
472
|
+
* Cursor to pass as `before` for the NEXT (older) page — the `seq` of the
|
|
473
|
+
* OLDEST event in this page. `null` once the start of history (the first
|
|
474
|
+
* persisted event) is included, signalling there is no older page.
|
|
475
|
+
*/
|
|
476
|
+
readonly prevCursor: number | null;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
/**
|
|
480
|
+
* Read ONE page of a persisted session's events without re-materializing the
|
|
481
|
+
* whole conversation into a live {@link EventLog}. Backs the runner's
|
|
482
|
+
* `session.loadHistory` so a thin client (the desktop) can page history from
|
|
483
|
+
* the runner's authoritative JSONL instead of its own NDJSON mirror.
|
|
484
|
+
*
|
|
485
|
+
* Paging is newest-first, walking backwards:
|
|
486
|
+
* - `before == null` — the NEWEST page: the last `limit` events on disk.
|
|
487
|
+
* - `before == N` — the page of (up to) `limit` events strictly OLDER than
|
|
488
|
+
* `seq === N` (the events immediately preceding the cursor). Pass the
|
|
489
|
+
* previous page's `prevCursor` here to step one page further back.
|
|
490
|
+
*
|
|
491
|
+
* The returned `events` are always in ascending `seq` order (oldest-first
|
|
492
|
+
* WITHIN the page) so a caller can prepend a page to an in-order transcript.
|
|
493
|
+
* `prevCursor` is the `seq` of the page's oldest event, or `null` once the
|
|
494
|
+
* first persisted event is included (no older page remains).
|
|
495
|
+
*
|
|
496
|
+
* Corrupt lines are skipped (matching {@link restoreEvents}); unlike
|
|
497
|
+
* `restoreEvents` this is a READ-ONLY reader — it never rewrites the file, so
|
|
498
|
+
* it preserves the JSONL exactly (no atomic-write / mutex needed: there is no
|
|
499
|
+
* mutation). Paging keys on each event's on-disk `seq`. Determinism holds for a
|
|
500
|
+
* MONOTONICALLY-INCREASING seq sequence — including a gapped-but-increasing one
|
|
501
|
+
* (the append path guarantees this; the next resume re-sequences to contiguous
|
|
502
|
+
* 0..n-1 anyway). DUPLICATE / non-strictly-increasing seqs are only reachable
|
|
503
|
+
* via external file corruption, and a backward `prevCursor` walk over them can
|
|
504
|
+
* drop events page-size-dependently until that next resume repairs the log.
|
|
505
|
+
*
|
|
506
|
+
* A missing log file is treated as an EMPTY history (`{ events: [], prevCursor:
|
|
507
|
+
* null }`), not an error — a freshly-created session whose JSONL hasn't been
|
|
508
|
+
* written yet must page as empty rather than throw.
|
|
509
|
+
*/
|
|
510
|
+
export async function readEventPage(
|
|
511
|
+
sessionId: string,
|
|
512
|
+
opts: { before: number | null; limit: number },
|
|
513
|
+
dir = defaultSessionsDir(),
|
|
514
|
+
): Promise<EventPage> {
|
|
515
|
+
const logPath = path.join(dir, `${sessionId}.jsonl`);
|
|
516
|
+
let raw: string;
|
|
517
|
+
try {
|
|
518
|
+
raw = await fs.readFile(logPath, 'utf8');
|
|
519
|
+
} catch {
|
|
520
|
+
// No log on disk yet → empty history, not an error.
|
|
521
|
+
return { events: [], prevCursor: null };
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
// Parse the JSONL, skipping corrupt lines (one bad append must not make the
|
|
525
|
+
// rest unreadable). Read-only: we never rewrite the file here.
|
|
526
|
+
const all: MoxxyEvent[] = [];
|
|
527
|
+
for (const line of raw.split('\n')) {
|
|
528
|
+
if (!line.trim()) continue;
|
|
529
|
+
try {
|
|
530
|
+
all.push(JSON.parse(line) as MoxxyEvent);
|
|
531
|
+
} catch {
|
|
532
|
+
// skip a malformed/half-written line, same as restoreEvents
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
// Delegate ALL paging (including the limit/cursor clamping) to pageEvents so
|
|
536
|
+
// the disk and in-memory paths are identical by construction — no separate
|
|
537
|
+
// limit handling here that could diverge from the in-memory page.
|
|
538
|
+
return pageEvents(all, opts.before, opts.limit);
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
/**
|
|
542
|
+
* Slice one newest-first page out of an ascending-`seq` event array. Pure +
|
|
543
|
+
* exported so the runner can reuse the EXACT paging semantics when it serves a
|
|
544
|
+
* page out of its in-memory log instead of disk — the two paths must agree
|
|
545
|
+
* byte-for-byte or a client crossing between them (in-memory → disk fallback)
|
|
546
|
+
* would see a discontinuity. `events` MUST be ordered oldest-first (the on-disk
|
|
547
|
+
* / append order); `before`/`limit` follow {@link readEventPage}.
|
|
548
|
+
*/
|
|
549
|
+
export function pageEvents(
|
|
550
|
+
events: ReadonlyArray<MoxxyEvent>,
|
|
551
|
+
before: number | null,
|
|
552
|
+
limit: number,
|
|
553
|
+
): EventPage {
|
|
554
|
+
const cap = Math.max(0, Math.floor(limit));
|
|
555
|
+
if (cap === 0 || events.length === 0) {
|
|
556
|
+
return { events: [], prevCursor: events.length === 0 ? null : before };
|
|
557
|
+
}
|
|
558
|
+
// Exclusive upper bound by `seq`: the first index whose event is NOT older
|
|
559
|
+
// than `before`. `before == null` (newest page) keeps the whole array.
|
|
560
|
+
let end = events.length;
|
|
561
|
+
if (before !== null) {
|
|
562
|
+
end = 0;
|
|
563
|
+
for (let i = 0; i < events.length; i += 1) {
|
|
564
|
+
if (events[i]!.seq < before) end = i + 1;
|
|
565
|
+
else break;
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
const start = Math.max(0, end - cap);
|
|
569
|
+
const page = events.slice(start, end);
|
|
570
|
+
// `null` once this page reaches the very first event on disk — no older page.
|
|
571
|
+
const prevCursor = start <= 0 ? null : page[0]!.seq;
|
|
572
|
+
return { events: page, prevCursor };
|
|
573
|
+
}
|
|
574
|
+
|
|
466
575
|
/**
|
|
467
576
|
* Remove a session's log file and its sidecar. A leftover legacy `index.json`
|
|
468
577
|
* row, if any, is harmless — `readIndex` filters out sessions whose `.jsonl` is
|