@morlay/session-rdb 0.0.19 → 0.0.21-alpha.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 (70) hide show
  1. package/README.md +59 -31
  2. package/dist/artifact.d.mts +25 -65
  3. package/dist/artifact.mjs +3 -3
  4. package/dist/{schema-DPcuEh_a.d.mts → backend-DpdtxYpz.d.mts} +360 -107
  5. package/dist/branch-5JzX9rUq.mjs +390 -0
  6. package/dist/deletion.d.mts +7 -0
  7. package/dist/deletion.mjs +2 -0
  8. package/dist/dist-vIVO6bA-.mjs +1524 -0
  9. package/dist/import.d.mts +4 -4
  10. package/dist/import.mjs +214 -1
  11. package/dist/index.d.mts +2 -3
  12. package/dist/index.mjs +4 -1630
  13. package/dist/{log-DO69NQnn.mjs → log-CnYct2Dv.mjs} +37 -82
  14. package/dist/{sqlite-DYExtbLo.mjs → sqlite-fpvm5Dzs.mjs} +205 -75
  15. package/dist/src-CWTWV7vx.mjs +1904 -0
  16. package/dist/storage.d.mts +14 -5
  17. package/dist/storage.mjs +2 -2
  18. package/dist/testing.d.mts +2 -26
  19. package/dist/testing.mjs +10504 -9614
  20. package/drizzle/postgres/20260918120000_v3_event_usage/migration.sql +14 -0
  21. package/drizzle/postgres/20260918120000_v3_event_usage/snapshot.json +1309 -0
  22. package/drizzle/sqlite/20260918120000_v3_event_usage/migration.sql +14 -0
  23. package/drizzle/sqlite/20260918120000_v3_event_usage/snapshot.json +1031 -0
  24. package/package.json +29 -30
  25. package/src/adapters/to-postgres.ts +1 -3
  26. package/src/adapters/to-sqlite.ts +0 -2
  27. package/src/adapters/types.ts +0 -3
  28. package/src/artifact.ts +0 -2
  29. package/src/backend.ts +31 -2
  30. package/src/branch.ts +223 -135
  31. package/src/deletion.ts +87 -0
  32. package/src/drizzle/postgres-v2.ts +0 -1
  33. package/src/drizzle/postgres-v3.ts +0 -1
  34. package/src/drizzle/sqlite-v2.ts +0 -1
  35. package/src/drizzle/sqlite-v3.ts +0 -1
  36. package/src/entities/v2/session-events.ts +0 -1
  37. package/src/entities/v3/event-usage.ts +25 -0
  38. package/src/entities/v3/events.ts +1 -3
  39. package/src/entities/v3/index.ts +4 -0
  40. package/src/entities/v3/session-events.ts +1 -2
  41. package/src/entities/v3/session-projcache-rows.ts +0 -8
  42. package/src/entities/v3/sessions.ts +3 -3
  43. package/src/entities/v3/storage-units.ts +0 -1
  44. package/src/entities/v3/workspace-sessions.ts +0 -5
  45. package/src/entities/v3/workspace-state.ts +0 -6
  46. package/src/entities/v3/workspaces.ts +0 -5
  47. package/src/export.ts +103 -0
  48. package/src/gc.ts +76 -0
  49. package/src/import-storages.ts +4 -37
  50. package/src/import.ts +54 -31
  51. package/src/index.ts +150 -114
  52. package/src/legacy.ts +4 -42
  53. package/src/log.ts +63 -106
  54. package/src/postgres.ts +249 -22
  55. package/src/schema.ts +6 -6
  56. package/src/session-query.ts +0 -4
  57. package/src/sqlite.ts +231 -55
  58. package/src/storage-takeover/index.ts +2 -28
  59. package/src/storage-takeover/projection-cache.ts +30 -134
  60. package/src/storage-takeover/repository.ts +20 -59
  61. package/src/storage-takeover/storage-backend.ts +3 -33
  62. package/src/storage-takeover/types.ts +14 -56
  63. package/src/storage.ts +0 -2
  64. package/src/testing/contract.ts +19 -50
  65. package/src/testing/coordinator-contract.ts +10 -25
  66. package/src/testing.ts +2 -2
  67. package/src/usage.ts +191 -0
  68. package/dist/import-Bc2QQa5G.mjs +0 -473
  69. package/dist/index-CCcK9tia.d.mts +0 -270
  70. package/dist/magic-string.es-BgJoa-3K.mjs +0 -1017
@@ -1,8 +1,8 @@
1
- import { C as EventRow, S as BackendTx, T as StorageRepository, _ as tWorkspaceSessions, a as JournalMode, b as WriteGuard, c as eventDimensions, d as tPersistenceState, f as tSchemaMeta, g as tStorageUnits, h as tSessions, i as EventRole, l as eventKind, m as tSessionProjcacheRows, n as EVENT_ENCODING, o as SCHEMA_VERSION, p as tSessionEvents, r as EventKind, s as SESSION_PERSISTENCE_SQLITE_APPLICATION_ID, t as DEFAULT_BUSY_TIMEOUT_MS, u as tEvents, v as tWorkspaceState, w as SessionRow, x as Backend, y as tWorkspaces } from "./schema-DPcuEh_a.mjs";
1
+ import { A as tSessionProjcacheRows, C as eventDimensions, D as tPersistenceState, E as tEvents, F as tWorkspaces, I as WriteGuard, L as StorageRepository, M as tStorageUnits, N as tWorkspaceSessions, O as tSchemaMeta, P as tWorkspaceState, S as SESSION_PERSISTENCE_SQLITE_APPLICATION_ID, T as tEventUsage, _ as EVENT_ENCODING, a as UsageAggregate, b as JournalMode, g as DEFAULT_BUSY_TIMEOUT_MS, i as SessionRow, j as tSessions, k as tSessionEvents, n as BackendTx, r as EventRow, t as Backend, v as EventKind, w as eventKind, x as SCHEMA_VERSION, y as EventRole } from "./backend-DpdtxYpz.mjs";
2
2
  import { SessionId } from "@deepseek-ai/dsh-session";
3
3
  import { DatabaseSync } from "node:sqlite";
4
4
  //#region src/sqlite.d.ts
5
- declare function openDatabase(path: string, journalMode: JournalMode, busyTimeout?: number): DatabaseSync;
5
+ declare function openDatabase(path: string, journalMode: JournalMode, busyTimeout?: number): Promise<DatabaseSync>;
6
6
  interface SqliteBackendOptions {
7
7
  path: string;
8
8
  journalMode: JournalMode;
@@ -12,7 +12,6 @@ declare class SqliteBackend implements Backend {
12
12
  private readonly options;
13
13
  readonly kind: "sqlite";
14
14
  storeIdentity: string;
15
- /** storages 接管表访问层;句柄在 open() 完成后解析。 */
16
15
  readonly storage: StorageRepository;
17
16
  private dbPath;
18
17
  private db;
@@ -25,6 +24,8 @@ declare class SqliteBackend implements Backend {
25
24
  close(): Promise<void>;
26
25
  getSession(id: SessionId): Promise<SessionRow | undefined>;
27
26
  getEventRows(id: SessionId, fromSequence?: number): Promise<EventRow[]>;
27
+ getEventTypeAt(id: SessionId, sequence: number): Promise<string | undefined>;
28
+ getEventTypesBefore(id: SessionId, beforeSequence: number, limit: number): Promise<Array<Pick<EventRow, "fSequence" | "fType">>>;
28
29
  listSessions(): Promise<SessionRow[]>;
29
30
  transaction<T>(fn: (tx: BackendTx) => Promise<T>): Promise<T>;
30
31
  private readonly tx;
@@ -37,11 +38,19 @@ declare class SqliteBackend implements Backend {
37
38
  private insertBridges;
38
39
  private updateHead;
39
40
  private bumpRevision;
40
- /** 从事件表重算标题(最后一条 `session/title`),写回会话行的 f_title 列。 */
41
41
  private refreshTitle;
42
42
  private deleteBridgeTail;
43
43
  private getPrevBridge;
44
+ private deleteSession;
45
+ /** 事件行可能被多个会话共享(fork 派生),所以孤儿只能在全库范围内判定。 */
46
+ collectOrphans(): Promise<number>;
47
+ /** 父会话被删后留下的 subagent 会话:父已不在表里,或本来就没有父。 */
48
+ listOrphanSubagentSessions(): Promise<SessionId[]>;
49
+ private deleteSessions;
50
+ /** 用量聚合:只读 `t_event_usage`;可选只算 `sinceMs` 之后的事件行。 */
51
+ usageReport(sinceMs?: number): Promise<UsageAggregate>;
52
+ vacuum(): Promise<void>;
44
53
  private eventRows;
45
54
  }
46
55
  //#endregion
47
- export { DEFAULT_BUSY_TIMEOUT_MS, EVENT_ENCODING, EventKind, EventRole, type EventRow, JournalMode, SCHEMA_VERSION, SESSION_PERSISTENCE_SQLITE_APPLICATION_ID, type SessionRow, SqliteBackend, SqliteBackendOptions, WriteGuard, eventDimensions, eventKind, openDatabase, tEvents, tPersistenceState, tSchemaMeta, tSessionEvents, tSessionProjcacheRows, tSessions, tStorageUnits, tWorkspaceSessions, tWorkspaceState, tWorkspaces };
56
+ export { DEFAULT_BUSY_TIMEOUT_MS, EVENT_ENCODING, EventKind, EventRole, type EventRow, JournalMode, SCHEMA_VERSION, SESSION_PERSISTENCE_SQLITE_APPLICATION_ID, type SessionRow, SqliteBackend, SqliteBackendOptions, WriteGuard, eventDimensions, eventKind, openDatabase, tEventUsage, tEvents, tPersistenceState, tSchemaMeta, tSessionEvents, tSessionProjcacheRows, tSessions, tStorageUnits, tWorkspaceSessions, tWorkspaceState, tWorkspaces };
package/dist/storage.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { S as WriteGuard, _ as tWorkspaceSessions, a as EVENT_ENCODING, c as eventDimensions, d as tPersistenceState, f as tSchemaMeta, g as tStorageUnits, h as tSessions, i as DEFAULT_BUSY_TIMEOUT_MS, l as eventKind, m as tSessionProjcacheRows, n as openDatabase, o as SCHEMA_VERSION, p as tSessionEvents, s as SESSION_PERSISTENCE_SQLITE_APPLICATION_ID, t as SqliteBackend, u as tEvents, v as tWorkspaceState, y as tWorkspaces } from "./sqlite-DYExtbLo.mjs";
2
- export { DEFAULT_BUSY_TIMEOUT_MS, EVENT_ENCODING, SCHEMA_VERSION, SESSION_PERSISTENCE_SQLITE_APPLICATION_ID, SqliteBackend, WriteGuard, eventDimensions, eventKind, openDatabase, tEvents, tPersistenceState, tSchemaMeta, tSessionEvents, tSessionProjcacheRows, tSessions, tStorageUnits, tWorkspaceSessions, tWorkspaceState, tWorkspaces };
1
+ import { C as WriteGuard, _ as tStorageUnits, a as EVENT_ENCODING, b as tWorkspaces, c as eventDimensions, d as tEvents, f as tPersistenceState, g as tSessions, h as tSessionProjcacheRows, i as DEFAULT_BUSY_TIMEOUT_MS, l as eventKind, m as tSessionEvents, n as openDatabase, o as SCHEMA_VERSION, p as tSchemaMeta, s as SESSION_PERSISTENCE_SQLITE_APPLICATION_ID, t as SqliteBackend, u as tEventUsage, v as tWorkspaceSessions, y as tWorkspaceState } from "./sqlite-fpvm5Dzs.mjs";
2
+ export { DEFAULT_BUSY_TIMEOUT_MS, EVENT_ENCODING, SCHEMA_VERSION, SESSION_PERSISTENCE_SQLITE_APPLICATION_ID, SqliteBackend, WriteGuard, eventDimensions, eventKind, openDatabase, tEventUsage, tEvents, tPersistenceState, tSchemaMeta, tSessionEvents, tSessionProjcacheRows, tSessions, tStorageUnits, tWorkspaceSessions, tWorkspaceState, tWorkspaces };
@@ -1,3 +1,4 @@
1
+ import { h as truncateLiveSession } from "./backend-DpdtxYpz.mjs";
1
2
  import { SessionPersistence } from "@deepseek-ai/dsh-session-persistence";
2
3
  import { Session, SessionEvent, SessionHeader, SessionId } from "@deepseek-ai/dsh-session";
3
4
  import { Context, Fiber } from "@deepseek-ai/cordis";
@@ -11,37 +12,17 @@ declare class EmptySettings extends SettingsProvider {
11
12
  }
12
13
  //#endregion
13
14
  //#region src/testing/contract.d.ts
14
- /** One backend service instance under test plus its teardown. */
15
15
  interface ContractBackendInstance {
16
16
  persistence: SessionPersistence;
17
17
  dispose: () => Promise<void>;
18
18
  }
19
- /** A backend under test: the primary instance plus optional storage-level capabilities. */
20
19
  interface ContractBackend extends ContractBackendInstance {
21
- /**
22
- * Open a FRESH backend instance over the SAME storage, as another process
23
- * would after this one exits. Enables the cross-instance visibility and
24
- * reopen-continuation tests; a backend without shared storage omits it and
25
- * those tests self-skip.
26
- */
27
20
  reopen?: () => Promise<ContractBackendInstance>;
28
- /**
29
- * Inject a torn physical tail after the committed log of one stored session,
30
- * simulating a crash mid-write. Enables the torn-tail tests.
31
- */
32
21
  corruptTail?: (id: SessionId, cwd: string | undefined) => Promise<void>;
33
22
  }
34
- /** Build a minimal {@link SessionHeader} for a session id. */
35
23
  declare function meta(id: string, cwd?: string): SessionHeader;
36
- /** A well-formed one-turn event log (contiguous seqs from 0). */
37
24
  declare function oneTurnLog(): SessionEvent[];
38
25
  declare function appendLog(session: Session, events: readonly SessionEvent[]): void;
39
- /**
40
- * Run the backend-agnostic handle contract suite. `make()` MUST return a
41
- * fresh backend over fresh, empty storage each call.
42
- * @param name - suite label, e.g. `jsonl-none` / `sqlite`.
43
- * @param make - factory producing one fresh {@link ContractBackend} per test.
44
- */
45
26
  declare function runPersistenceContract(name: string, make: () => Promise<ContractBackend>): void;
46
27
  //#endregion
47
28
  //#region src/testing/coordinator-contract.d.ts
@@ -50,11 +31,6 @@ interface CoordinatorFixture {
50
31
  corruptTail?: (id: SessionId, cwd: string | undefined) => Promise<void>;
51
32
  cleanup: () => Promise<void>;
52
33
  }
53
- /**
54
- * RDB 特有行为契约:live 会话驱动持久化、seed 边界、fork/resume、HMR
55
- * dispose drain、冲突拒绝、torn-tail。coordinator 内部状态(ownerless /
56
- * per-id chain / legacy 迁移)已由新版 handle 模型承担,不再单独测试。
57
- */
58
34
  declare function runCoordinatorContract(name: string, makeFixture: () => Promise<CoordinatorFixture>): void;
59
35
  //#endregion
60
- export { type ContractBackend, type CoordinatorFixture, EmptySettings, appendLog, meta, oneTurnLog, runCoordinatorContract, runPersistenceContract };
36
+ export { type ContractBackend, type CoordinatorFixture, EmptySettings, appendLog, meta, oneTurnLog, runCoordinatorContract, runPersistenceContract, truncateLiveSession };