@earendil-works/pi-durable 1.4.0 → 1.5.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 (221) hide show
  1. package/CHANGELOG.md +186 -0
  2. package/README.md +181 -84
  3. package/dist/codemode/codemode.d.ts +4 -4
  4. package/dist/codemode/codemode.d.ts.map +1 -1
  5. package/dist/codemode/codemode.js +9 -12
  6. package/dist/codemode/codemode.js.map +1 -1
  7. package/dist/codemode/models.js +4 -4
  8. package/dist/codemode/models.js.map +1 -1
  9. package/dist/env/index.d.ts +12 -10
  10. package/dist/env/index.d.ts.map +1 -1
  11. package/dist/env/index.js.map +1 -1
  12. package/dist/env/node-watch.d.ts +3 -3
  13. package/dist/env/node-watch.d.ts.map +1 -1
  14. package/dist/env/node-watch.js +18 -16
  15. package/dist/env/node-watch.js.map +1 -1
  16. package/dist/env/node.d.ts +2 -2
  17. package/dist/env/node.d.ts.map +1 -1
  18. package/dist/env/node.js +1 -1
  19. package/dist/env/node.js.map +1 -1
  20. package/dist/errors.d.ts +18 -2
  21. package/dist/errors.d.ts.map +1 -1
  22. package/dist/errors.js +26 -3
  23. package/dist/errors.js.map +1 -1
  24. package/dist/harness/agent.d.ts.map +1 -1
  25. package/dist/harness/agent.js +10 -2
  26. package/dist/harness/agent.js.map +1 -1
  27. package/dist/harness/compaction.d.ts.map +1 -1
  28. package/dist/harness/compaction.js +19 -2
  29. package/dist/harness/compaction.js.map +1 -1
  30. package/dist/harness/context.d.ts +23 -7
  31. package/dist/harness/context.d.ts.map +1 -1
  32. package/dist/harness/context.js +71 -25
  33. package/dist/harness/context.js.map +1 -1
  34. package/dist/harness/define.d.ts +7 -3
  35. package/dist/harness/define.d.ts.map +1 -1
  36. package/dist/harness/define.js +4 -0
  37. package/dist/harness/define.js.map +1 -1
  38. package/dist/harness/generation.d.ts +38 -5
  39. package/dist/harness/generation.d.ts.map +1 -1
  40. package/dist/harness/generation.js +445 -96
  41. package/dist/harness/generation.js.map +1 -1
  42. package/dist/harness/harness.d.ts +2 -0
  43. package/dist/harness/harness.d.ts.map +1 -1
  44. package/dist/harness/harness.js +87 -62
  45. package/dist/harness/harness.js.map +1 -1
  46. package/dist/harness/inbox.d.ts +5 -1
  47. package/dist/harness/inbox.d.ts.map +1 -1
  48. package/dist/harness/inbox.js +4 -1
  49. package/dist/harness/inbox.js.map +1 -1
  50. package/dist/harness/json.d.ts +20 -4
  51. package/dist/harness/json.d.ts.map +1 -1
  52. package/dist/harness/json.js +23 -5
  53. package/dist/harness/json.js.map +1 -1
  54. package/dist/harness/live.d.ts +122 -16
  55. package/dist/harness/live.d.ts.map +1 -1
  56. package/dist/harness/live.js +93 -12
  57. package/dist/harness/live.js.map +1 -1
  58. package/dist/harness/partial-changes.d.ts +54 -0
  59. package/dist/harness/partial-changes.d.ts.map +1 -0
  60. package/dist/harness/partial-changes.js +162 -0
  61. package/dist/harness/partial-changes.js.map +1 -0
  62. package/dist/harness/registry-reader.d.ts +11 -0
  63. package/dist/harness/registry-reader.d.ts.map +1 -0
  64. package/dist/harness/registry-reader.js +25 -0
  65. package/dist/harness/registry-reader.js.map +1 -0
  66. package/dist/harness/scheduler.d.ts +46 -19
  67. package/dist/harness/scheduler.d.ts.map +1 -1
  68. package/dist/harness/scheduler.js +973 -376
  69. package/dist/harness/scheduler.js.map +1 -1
  70. package/dist/harness/submissions.d.ts +17 -10
  71. package/dist/harness/submissions.d.ts.map +1 -1
  72. package/dist/harness/submissions.js +62 -25
  73. package/dist/harness/submissions.js.map +1 -1
  74. package/dist/harness/task-graph.d.ts +12 -9
  75. package/dist/harness/task-graph.d.ts.map +1 -1
  76. package/dist/harness/task-graph.js +38 -28
  77. package/dist/harness/task-graph.js.map +1 -1
  78. package/dist/harness/telemetry.d.ts +11 -11
  79. package/dist/harness/telemetry.d.ts.map +1 -1
  80. package/dist/harness/telemetry.js +7 -7
  81. package/dist/harness/telemetry.js.map +1 -1
  82. package/dist/harness/tool.d.ts +2 -0
  83. package/dist/harness/tool.d.ts.map +1 -1
  84. package/dist/harness/tool.js +171 -55
  85. package/dist/harness/tool.js.map +1 -1
  86. package/dist/harness/transcript.d.ts +72 -0
  87. package/dist/harness/transcript.d.ts.map +1 -0
  88. package/dist/harness/transcript.js +264 -0
  89. package/dist/harness/transcript.js.map +1 -0
  90. package/dist/harness/types.d.ts +218 -59
  91. package/dist/harness/types.d.ts.map +1 -1
  92. package/dist/harness/types.js.map +1 -1
  93. package/dist/harness/util.d.ts +3 -1
  94. package/dist/harness/util.d.ts.map +1 -1
  95. package/dist/harness/util.js +9 -0
  96. package/dist/harness/util.js.map +1 -1
  97. package/dist/harness/view.d.ts +43 -22
  98. package/dist/harness/view.d.ts.map +1 -1
  99. package/dist/harness/view.js +130 -71
  100. package/dist/harness/view.js.map +1 -1
  101. package/dist/index.d.ts +9 -7
  102. package/dist/index.d.ts.map +1 -1
  103. package/dist/index.js +4 -3
  104. package/dist/index.js.map +1 -1
  105. package/dist/search.d.ts +19 -3
  106. package/dist/search.d.ts.map +1 -1
  107. package/dist/search.js +107 -44
  108. package/dist/search.js.map +1 -1
  109. package/dist/session/cached-storage.d.ts +71 -0
  110. package/dist/session/cached-storage.d.ts.map +1 -0
  111. package/dist/session/cached-storage.js +269 -0
  112. package/dist/session/cached-storage.js.map +1 -0
  113. package/dist/session/conversation-tails.d.ts +33 -0
  114. package/dist/session/conversation-tails.d.ts.map +1 -0
  115. package/dist/session/conversation-tails.js +101 -0
  116. package/dist/session/conversation-tails.js.map +1 -0
  117. package/dist/session/keys.d.ts +68 -0
  118. package/dist/session/keys.d.ts.map +1 -0
  119. package/dist/session/keys.js +161 -0
  120. package/dist/session/keys.js.map +1 -0
  121. package/dist/session/session.d.ts +167 -26
  122. package/dist/session/session.d.ts.map +1 -1
  123. package/dist/session/session.js +1029 -171
  124. package/dist/session/session.js.map +1 -1
  125. package/dist/session/transaction.d.ts +81 -3
  126. package/dist/session/transaction.d.ts.map +1 -1
  127. package/dist/session/transaction.js +224 -37
  128. package/dist/session/transaction.js.map +1 -1
  129. package/dist/session/writer.d.ts +74 -0
  130. package/dist/session/writer.d.ts.map +1 -0
  131. package/dist/session/writer.js +294 -0
  132. package/dist/session/writer.js.map +1 -0
  133. package/dist/storage/indexeddb.d.ts +10 -2
  134. package/dist/storage/indexeddb.d.ts.map +1 -1
  135. package/dist/storage/indexeddb.js +91 -41
  136. package/dist/storage/indexeddb.js.map +1 -1
  137. package/dist/storage/jsonl/storage.d.ts +14 -2
  138. package/dist/storage/jsonl/storage.d.ts.map +1 -1
  139. package/dist/storage/jsonl/storage.js +88 -24
  140. package/dist/storage/jsonl/storage.js.map +1 -1
  141. package/dist/storage/memory.d.ts +7 -2
  142. package/dist/storage/memory.d.ts.map +1 -1
  143. package/dist/storage/memory.js +28 -2
  144. package/dist/storage/memory.js.map +1 -1
  145. package/dist/storage/sqlite/storage.d.ts +14 -2
  146. package/dist/storage/sqlite/storage.d.ts.map +1 -1
  147. package/dist/storage/sqlite/storage.js +110 -36
  148. package/dist/storage/sqlite/storage.js.map +1 -1
  149. package/dist/storage/store/commit.d.ts +33 -0
  150. package/dist/storage/store/commit.d.ts.map +1 -0
  151. package/dist/storage/store/commit.js +286 -0
  152. package/dist/storage/store/commit.js.map +1 -0
  153. package/dist/storage/store/documents.d.ts +43 -0
  154. package/dist/storage/store/documents.d.ts.map +1 -0
  155. package/dist/storage/store/documents.js +102 -0
  156. package/dist/storage/store/documents.js.map +1 -0
  157. package/dist/storage/store/index.d.ts +2 -0
  158. package/dist/storage/store/index.d.ts.map +1 -0
  159. package/dist/storage/store/index.js +2 -0
  160. package/dist/storage/store/index.js.map +1 -0
  161. package/dist/storage/store/queries.d.ts +49 -0
  162. package/dist/storage/store/queries.d.ts.map +1 -0
  163. package/dist/storage/store/queries.js +93 -0
  164. package/dist/storage/store/queries.js.map +1 -0
  165. package/dist/storage/store/storage.d.ts +59 -0
  166. package/dist/storage/store/storage.d.ts.map +1 -0
  167. package/dist/storage/store/storage.js +438 -0
  168. package/dist/storage/store/storage.js.map +1 -0
  169. package/dist/storage/store/tables.d.ts +54 -0
  170. package/dist/storage/store/tables.d.ts.map +1 -0
  171. package/dist/storage/store/tables.js +108 -0
  172. package/dist/storage/store/tables.js.map +1 -0
  173. package/dist/testing/commit-writes.d.ts +5 -0
  174. package/dist/testing/commit-writes.d.ts.map +1 -0
  175. package/dist/testing/commit-writes.js +12 -0
  176. package/dist/testing/commit-writes.js.map +1 -0
  177. package/dist/testing/env-conformance.js +7 -7
  178. package/dist/testing/env-conformance.js.map +1 -1
  179. package/dist/testing/index.d.ts +1 -0
  180. package/dist/testing/index.d.ts.map +1 -1
  181. package/dist/testing/index.js +1 -0
  182. package/dist/testing/index.js.map +1 -1
  183. package/dist/testing/storage-benchmark.d.ts.map +1 -1
  184. package/dist/testing/storage-benchmark.js +18 -17
  185. package/dist/testing/storage-benchmark.js.map +1 -1
  186. package/dist/testing/storage-conformance.d.ts.map +1 -1
  187. package/dist/testing/storage-conformance.js +354 -69
  188. package/dist/testing/storage-conformance.js.map +1 -1
  189. package/dist/tool-search/tool-search.d.ts +6 -12
  190. package/dist/tool-search/tool-search.d.ts.map +1 -1
  191. package/dist/tool-search/tool-search.js +7 -7
  192. package/dist/tool-search/tool-search.js.map +1 -1
  193. package/dist/tools/bash.d.ts +12 -12
  194. package/dist/tools/bash.d.ts.map +1 -1
  195. package/dist/tools/bash.js +16 -15
  196. package/dist/tools/bash.js.map +1 -1
  197. package/dist/tools/edit.d.ts +7 -7
  198. package/dist/tools/edit.d.ts.map +1 -1
  199. package/dist/tools/edit.js +9 -9
  200. package/dist/tools/edit.js.map +1 -1
  201. package/dist/tools/index.d.ts +32 -32
  202. package/dist/tools/read.d.ts +6 -6
  203. package/dist/tools/read.d.ts.map +1 -1
  204. package/dist/tools/read.js +19 -8
  205. package/dist/tools/read.js.map +1 -1
  206. package/dist/tools/write.d.ts +4 -4
  207. package/dist/tools/write.d.ts.map +1 -1
  208. package/dist/tools/write.js +5 -5
  209. package/dist/tools/write.js.map +1 -1
  210. package/dist/types.d.ts +223 -77
  211. package/dist/types.d.ts.map +1 -1
  212. package/dist/types.js.map +1 -1
  213. package/package.json +19 -12
  214. package/dist/harness/events.d.ts +0 -186
  215. package/dist/harness/events.d.ts.map +0 -1
  216. package/dist/harness/events.js +0 -373
  217. package/dist/harness/events.js.map +0 -1
  218. package/dist/session/observation.d.ts +0 -42
  219. package/dist/session/observation.d.ts.map +0 -1
  220. package/dist/session/observation.js +0 -281
  221. package/dist/session/observation.js.map +0 -1
@@ -1,6 +1,20 @@
1
- import { type Context, type JsonValue } from "@earendil-works/chord";
2
- import type { CommitPublication, ConversationDocFamilyToken, ConversationDocToken, ConversationId, ConversationRecord, DocumentRecord, DocumentState, DocumentWatch, EntryId, JsonObject, ReportInfo, RewindableConversationDocFamilyToken, RewindableConversationDocToken, Session, SessionDocFamilyToken, SessionDocToken, SessionEnd, SetTimer, Storage, StorageWrite, TaskDocFamilyToken, TaskDocToken, TaskId, Tx } from "../types.ts";
1
+ import { type Context, type JsonValue, type WatchEnd } from "@earendil-works/chord";
2
+ import type { CommitChange, CommitObservation, CommitObserver, CommitOptions, ConversationDocFamilyToken, ConversationDocToken, ConversationId, ConversationRecord, DocumentCommitChange, DocumentRecord, DocumentWatch, EntryId, JsonObject, Observation, Observer, ReportInfo, RewindableConversationDocFamilyToken, RewindableConversationDocToken, Seq, Session, SessionDocFamilyToken, SessionDocToken, SessionEnd, SetTimer, Storage, StorageWrite, TaskDocFamilyToken, TaskDocToken, TaskId, Tx } from "../types.ts";
3
+ import { type HeadMarker } from "./conversation-tails.ts";
3
4
  import { Transaction, type TransactionScope } from "./transaction.ts";
5
+ /**
6
+ * What the Session's own components observe of one commit (`followCommits()`): a stored commit with its own changes, or
7
+ * a deferred one adopted in memory only (`CommitPersistence`), which changes documents only. Memory is never behind:
8
+ * a later store of held changes is not observed again.
9
+ */
10
+ export type ObservedCommit = {
11
+ readonly kind: "stored";
12
+ readonly seq: Seq;
13
+ readonly changes: readonly CommitChange[];
14
+ } | {
15
+ readonly kind: "memory";
16
+ readonly changes: readonly DocumentCommitChange[];
17
+ };
4
18
  /**
5
19
  * Open a Session kernel over one storage backend. `now` is the wall clock for task times; default `Date.now`.
6
20
  * `setTimer` arms the timers that evict idle documents; default `setTimeout` (see `HarnessOptions.setTimer`). The first
@@ -10,6 +24,8 @@ export declare function createSession(storage: Storage, options?: {
10
24
  readonly now?: () => number;
11
25
  readonly documentRetentionMs?: number;
12
26
  readonly setTimer?: SetTimer;
27
+ /** Default `withinMs` of a deferred commit (`CommitPersistence`); default 1,000. */
28
+ readonly persistWithinMs?: number;
13
29
  }): Session;
14
30
  /** Internal, for tests: the retention of every Session that keeps the default, as a suite run with eviction at once. */
15
31
  export declare function setDefaultDocumentRetention(ms: number): void;
@@ -18,15 +34,31 @@ export declare function setDefaultDocumentRetention(ms: number): void;
18
34
  * default.
19
35
  */
20
36
  export declare function documentRetention(ms: number | undefined): number;
37
+ /**
38
+ * A deferred commit's default window as given, when it is a number of milliseconds, `0` or more (`Infinity` waits for a
39
+ * reading or writing commit or close); otherwise the default.
40
+ */
41
+ export declare function persistWithin(ms: number | undefined): number;
21
42
  /**
22
43
  * Session kernel: one mutation line, the loaded document tracker cache, and committed publication.
23
44
  *
24
- * The cache is bounded by use: a document with no watch or document state attached leaves it once it was not read or
45
+ * The cache is bounded by use: a document with no watch attached leaves it once it was not read or
25
46
  * written for the retention period, and the next access loads it from Storage. Eviction runs as a job on the mutation
26
47
  * line, so no transaction ever holds a tracker that leaves.
27
48
  *
28
- * Only committed state is observable. Every commit callback, preparation, Storage settlement, adoption, and
29
- * publication enqueue runs while the line is held; listeners run later.
49
+ * Only committed state is observable. A deferred commit (`CommitPersistence`) is committed in memory first: it is
50
+ * adopted and shown to the Session's own observers, and its changes wait, folded per document and pinned in the cache,
51
+ * for the first commit that reads or writes the document, the document's deadline, a drop of its tracker, or close,
52
+ * which store them.
53
+ *
54
+ * Group commit: the line runs one job at a time, a commit's callback and settlement; a commit with writes then joins
55
+ * the writer's pending batch (logical admission, `Writer`) and the line goes on. The writer stores every commit admitted
56
+ * while no call is in flight in one `commit()` call, off the line, and publishes them one by one, in line order, a
57
+ * macrotask apart: the read caches, adoption, telemetry events, the Session's own observers, and one microtask later
58
+ * `observeCommits()` observers, before every wait the commit resolves and every abort it queues. Host listeners and
59
+ * watch listeners have no order. A deferred commit is published when the commits before it are. A job's every read
60
+ * touches its key (`touch()`); while an unpublished commit writes that key, the job waits for its publication, so no
61
+ * job observes state that is not stored. Outcomes are delivered in line order (`#enqueue()`).
30
62
  *
31
63
  * Storage failures are final. Every Storage call goes through one guard: the first error a Storage method throws, other
32
64
  * than for a cancelled caller, fails the Session, as does a commit it cannot adopt. That call gets the error; every later
@@ -43,24 +75,67 @@ export declare class SessionImpl implements Session {
43
75
  } | undefined;
44
76
  /** Internal: rejects with `SessionFailed` the moment the Session fails, before work underway has ended; never resolves. */
45
77
  get failed(): Promise<never>;
46
- constructor(storage: Storage, now?: () => number, documentRetentionMs?: () => number | undefined, setTimer?: SetTimer);
78
+ constructor(storage: Storage, now?: () => number, documentRetentionMs?: () => number | undefined, setTimer?: SetTimer, readOnly?: boolean, persistWithinMs?: () => number | undefined);
47
79
  /** The Storage behind the failure guard; every component reads and writes through it. */
48
80
  protected get storage(): Storage;
49
- commit<T>(change: (tx: Tx) => T | Promise<T>, context: Context): Promise<T>;
81
+ /**
82
+ * Internal, on the Session line: the newest entry ID visible from `conversationId`. Known from the Session's own
83
+ * commits when it owns its Storage, so it costs no Storage read after the first.
84
+ */
85
+ latestEntryId(conversationId: ConversationId, context: Context): Promise<EntryId | undefined>;
86
+ /**
87
+ * Internal: the newest entry ID of `conversationId` as known from the Session's commits right now, without reading;
88
+ * `undefined` when not known (and always for a read-only Session).
89
+ */
90
+ knownLatestEntryId(conversationId: ConversationId): EntryId | null | undefined;
91
+ /**
92
+ * Internal, on the Session line: the newest visible head marker of `conversationId` at or before `atOrBefore`, any
93
+ * when `undefined`; known from the Session's own commits as `latestEntryId()` is.
94
+ */
95
+ latestHeadMarker(conversationId: ConversationId, atOrBefore: EntryId | undefined, context: Context): Promise<HeadMarker | undefined>;
96
+ /**
97
+ * Internal, on the line: wait, while `key` has an unpublished writer (for `ALL_KEYS`, while anything is unpublished),
98
+ * until it is published, then check that the Session is healthy; `undefined` when there is nothing to wait for. A
99
+ * job's every read touches its key first, so it never observes state an earlier job admitted and the writer has not
100
+ * published.
101
+ */
102
+ touch(key: string): Promise<void> | undefined;
103
+ commit<T>(change: (tx: Tx) => T | Promise<T>, context: Context, options?: CommitOptions): Promise<T>;
50
104
  /**
51
105
  * Internal: fail the Session with `error`, the first wins, and report it once. Admission ends, and close listeners run
52
106
  * now; they read the error from `failure`. The Storage guard calls this; the Harness also calls it for a throw in its
53
- * scheduler's own commits.
107
+ * scheduler's own commits. `at` is the line index of the job whose outcome the failure is, by default the job on the
108
+ * line: later jobs' outcomes become `SessionFailed`.
54
109
  */
55
- fail(error: unknown, context?: Context): void;
110
+ fail(error: unknown, context?: Context, at?: number, own?: readonly number[]): void;
56
111
  /**
57
112
  * Internal commit exposing the concrete transaction and its internal operations, such as the reserved-ID root
58
113
  * bootstrap and task replacement. `scope` sets the default `tx.createTask()` conversation and the task attributed to
59
114
  * appended entries.
60
115
  */
61
- commitWith<T>(change: (tx: Transaction) => T | Promise<T>, context: Context, scope?: TransactionScope): Promise<T>;
62
- /** Internal: run a read-only job on the mutation line so multi-read derivations observe one committed state. */
63
- readOnLine<T>(job: () => Promise<T>): Promise<T>;
116
+ commitWith<T>(change: (tx: Transaction) => T | Promise<T>, context: Context, scope?: TransactionScope, options?: CommitOptions): Promise<T>;
117
+ /**
118
+ * Internal: `commitWith()` for a commit of the scheduler's own whose outcome goes only to scheduler code. When it
119
+ * writes nothing and waited at no gate, it is equivalent to having run before every unpublished commit, so its
120
+ * outcome is delivered at once, ahead of theirs. One that writes is never exempt: its outcome waits for its own
121
+ * publication and every earlier outcome, so no invocation starts on a reservation that is not durable.
122
+ */
123
+ commitInternal<T>(change: (tx: Transaction) => T | Promise<T>, context: Context): Promise<T>;
124
+ /**
125
+ * Internal, on the line: call `end` once the outcome of the job on the line settles, its commit published or never to
126
+ * be; at once off the line.
127
+ */
128
+ onJobEnd(end: () => void): void;
129
+ /** Internal: the Storage jobs on the line read through (`touch()`); off the line, use the plain one. */
130
+ get lineStorage(): Storage;
131
+ /** Internal: whether `tx` is the transaction of one of this Session's commits. */
132
+ ownsTransaction(tx: Tx): tx is Transaction;
133
+ /**
134
+ * Internal: run a read-only job on the mutation line so multi-read derivations observe one committed state. It reads
135
+ * through `storage`, whose reads wait for the publication of what the line admitted before; its outcome comes after
136
+ * theirs.
137
+ */
138
+ readOnLine<T>(job: (storage: Storage) => Promise<T>): Promise<T>;
64
139
  /**
65
140
  * Internal: a conversation document's current incarnation and value, for a job already running on the line (see
66
141
  * `readOnLine()`). Absent documents are `undefined`.
@@ -76,18 +151,18 @@ export declare class SessionImpl implements Session {
76
151
  snapshot<T extends JsonObject, I extends JsonValue>(token: SessionDocFamilyToken<T, I>, key: string, context: Context): Promise<Readonly<T> | undefined>;
77
152
  snapshot<T extends JsonObject, I extends JsonValue>(token: ConversationDocFamilyToken<T, I>, conversationId: ConversationId, key: string, context: Context): Promise<Readonly<T> | undefined>;
78
153
  snapshot<T extends JsonObject, I extends JsonValue>(token: TaskDocFamilyToken<T, I>, taskId: TaskId, key: string, context: Context): Promise<Readonly<T> | undefined>;
79
- documentState<T extends JsonObject>(token: SessionDocToken<T>, context: Context): Promise<DocumentState<T> | undefined>;
80
- documentState<T extends JsonObject>(token: ConversationDocToken<T>, conversationId: ConversationId, context: Context): Promise<DocumentState<T> | undefined>;
81
- documentState<T extends JsonObject>(token: TaskDocToken<T>, taskId: TaskId, context: Context): Promise<DocumentState<T> | undefined>;
82
- documentState<T extends JsonObject, I extends JsonValue>(token: SessionDocFamilyToken<T, I>, key: string, context: Context): Promise<DocumentState<T> | undefined>;
83
- documentState<T extends JsonObject, I extends JsonValue>(token: ConversationDocFamilyToken<T, I>, conversationId: ConversationId, key: string, context: Context): Promise<DocumentState<T> | undefined>;
84
- documentState<T extends JsonObject, I extends JsonValue>(token: TaskDocFamilyToken<T, I>, taskId: TaskId, key: string, context: Context): Promise<DocumentState<T> | undefined>;
85
154
  watchDoc<T extends JsonObject>(token: SessionDocToken<T>, context: Context): Promise<DocumentWatch<T> | undefined>;
86
155
  watchDoc<T extends JsonObject>(token: ConversationDocToken<T>, conversationId: ConversationId, context: Context): Promise<DocumentWatch<T> | undefined>;
87
156
  watchDoc<T extends JsonObject>(token: TaskDocToken<T>, taskId: TaskId, context: Context): Promise<DocumentWatch<T> | undefined>;
88
157
  watchDoc<T extends JsonObject, I extends JsonValue>(token: SessionDocFamilyToken<T, I>, key: string, context: Context): Promise<DocumentWatch<T> | undefined>;
89
158
  watchDoc<T extends JsonObject, I extends JsonValue>(token: ConversationDocFamilyToken<T, I>, conversationId: ConversationId, key: string, context: Context): Promise<DocumentWatch<T> | undefined>;
90
159
  watchDoc<T extends JsonObject, I extends JsonValue>(token: TaskDocFamilyToken<T, I>, taskId: TaskId, key: string, context: Context): Promise<DocumentWatch<T> | undefined>;
160
+ observeDoc<T extends JsonObject>(token: SessionDocToken<T>, observer: Observer<Readonly<T>>, context: Context): Promise<Observation<Readonly<T>> | undefined>;
161
+ observeDoc<T extends JsonObject>(token: ConversationDocToken<T>, conversationId: ConversationId, observer: Observer<Readonly<T>>, context: Context): Promise<Observation<Readonly<T>> | undefined>;
162
+ observeDoc<T extends JsonObject>(token: TaskDocToken<T>, taskId: TaskId, observer: Observer<Readonly<T>>, context: Context): Promise<Observation<Readonly<T>> | undefined>;
163
+ observeDoc<T extends JsonObject, I extends JsonValue>(token: SessionDocFamilyToken<T, I>, key: string, observer: Observer<Readonly<T>>, context: Context): Promise<Observation<Readonly<T>> | undefined>;
164
+ observeDoc<T extends JsonObject, I extends JsonValue>(token: ConversationDocFamilyToken<T, I>, conversationId: ConversationId, key: string, observer: Observer<Readonly<T>>, context: Context): Promise<Observation<Readonly<T>> | undefined>;
165
+ observeDoc<T extends JsonObject, I extends JsonValue>(token: TaskDocFamilyToken<T, I>, taskId: TaskId, key: string, observer: Observer<Readonly<T>>, context: Context): Promise<Observation<Readonly<T>> | undefined>;
91
166
  snapshotAsOf<T extends JsonObject>(token: RewindableConversationDocToken<T>, conversationId: ConversationId, at: EntryId, context: Context): Promise<Readonly<T> | undefined>;
92
167
  snapshotAsOf<T extends JsonObject, I extends JsonValue>(token: RewindableConversationDocFamilyToken<T, I>, conversationId: ConversationId, key: string, at: EntryId, context: Context): Promise<Readonly<T> | undefined>;
93
168
  close(context: Context): Promise<void>;
@@ -107,31 +182,57 @@ export declare class SessionImpl implements Session {
107
182
  * writes nothing.
108
183
  */
109
184
  protected writeAtClose(writes: () => readonly StorageWrite[]): Promise<void>;
185
+ /**
186
+ * Keys a commit writes besides its records' (`Transaction.writeKeys()`), at its admission, on the line: a Harness
187
+ * adds the ownership memberships its task changes write. A plain Session adds none.
188
+ */
189
+ protected membershipKeys(_tx: Transaction): readonly string[] | Promise<readonly string[]>;
110
190
  /** Runs after close seals admission and before the line closes Storage; must not reject. */
111
191
  protected beforeClose(): Promise<void>;
112
- /** Register a synchronous post-adoption listener. It must not block or call Session operations; a throw is reported. */
113
- subscribeCommits(listener: (publication: CommitPublication, context: Context) => void): () => void;
114
192
  /**
115
- * Internal: `subscribeCommits()` for the Session's own components, whose state follows each commit. A throw leaves
116
- * that state behind storage, so it fails the Session instead of being reported. They run before host listeners.
193
+ * Attach a synchronous observer of every stored commit, with exactly what it stored (`CommitPublication`). Its
194
+ * `advance` runs one microtask after the commit's publication, which follows its storage call, in line order, before
195
+ * every wait the commit resolves and every abort it queues (in no order with watch listeners); it must not block or
196
+ * call Session operations. A throw is reported, detaches it, and ends it `listener_error`; `end` gets the Session's
197
+ * close after its last publication.
198
+ */
199
+ observeCommits(observer: CommitObserver): CommitObservation;
200
+ /**
201
+ * Internal: follow every commit as memory adopts it (`ObservedCommit`), for the Session's own components, whose state
202
+ * follows memory. A throw leaves that state behind, so it fails the Session instead of being reported. They run at
203
+ * the commit's publication, synchronously, so they call no Storage method, run no task code, and contain every host
204
+ * callback; the waits they resolve and the aborts they queue run after host observers.
117
205
  */
118
- observeCommits(listener: (publication: CommitPublication, context: Context) => void): () => void;
206
+ followCommits(listener: (publication: ObservedCommit, context: Context) => void): () => void;
119
207
  /**
120
208
  * Register a listener called synchronously when close begins, also when a failure closes the Session (`failure` is
121
209
  * then set). It must not block or call Session operations; a throw is reported.
122
210
  */
123
211
  subscribeClose(listener: () => void): () => void;
124
- /** Drop every loaded tracker on the mutation line; later access cold-loads from Storage. */
212
+ /** Drop every loaded tracker on the mutation line, held changes stored first; later access cold-loads from Storage. */
125
213
  unloadDocuments(): Promise<void>;
126
214
  /**
127
- * Internal, for tests: how many documents the cache holds, how many are idle, how many incarnations are pinned, and how
128
- * many sweep jobs were queued on the line so far.
215
+ * Internal, for tests: how many documents the cache holds, how many are idle, how many incarnations are pinned, how
216
+ * many sweep jobs were queued on the line so far, how many documents have held changes, how many live tasks have
217
+ * their documents indexed, and how many conversations have their newest entry kept.
129
218
  */
130
219
  get documentCacheSizes(): {
131
220
  readonly cached: number;
132
221
  readonly idle: number;
133
222
  readonly attached: number;
134
223
  readonly sweeps: number;
224
+ readonly held: number;
225
+ readonly taskDocuments: number;
226
+ readonly tails: number;
227
+ };
228
+ /**
229
+ * Internal, for tests that bound memory: jobs whose outcome is not delivered yet, keys with an unpublished writer,
230
+ * and record reads in flight in the cache. All three are 0 once the line is idle.
231
+ */
232
+ get lineSizes(): {
233
+ readonly outstanding: number;
234
+ readonly unpublished: number;
235
+ readonly reads: number;
135
236
  };
136
237
  /** Internal: throw `SessionFailed` when failed, else an error when closing. */
137
238
  assertUsable(): void;
@@ -141,4 +242,44 @@ export declare class SessionImpl implements Session {
141
242
  * which is not awaited.
142
243
  */
143
244
  export declare function contained(callback: () => unknown, onError: (error: unknown) => void): void;
245
+ /** A synchronous observer as Durable attaches it: `Observer` (`advance` gets a `WatchCall`) or `CommitObserver`. */
246
+ type SyncObserver<A> = {
247
+ advance(call: A, context: Context): void;
248
+ end(end: WatchEnd): void;
249
+ };
250
+ /** A guarded observer (`guardObserver()`) with its observation's detach. */
251
+ export type GuardedObserver<A> = SyncObserver<A> & {
252
+ detach(): void;
253
+ };
254
+ /**
255
+ * `observer`, a host's, behind the rule for observers that run at a commit's publication: one that throws, or whose
256
+ * `advance` returns a promise that rejects, is reported through `report`, detached, and ended `listener_error`, so the
257
+ * throw never reaches `adopt`; nothing reaches it after its detach or end, and from then on the guard references
258
+ * neither it nor its source. `detach` is the source's; the returned `detach()` is the observation's.
259
+ */
260
+ export declare function guardObserver<A>(observer: SyncObserver<A>, detach: () => void, report: (error: unknown, context?: Context) => void): GuardedObserver<A>;
261
+ /** The end of an observer whose source closed. */
262
+ export declare const ENDED: WatchEnd;
263
+ /**
264
+ * How a Session's close ends what follows it (decision "Slice 8 S1"), made once per close: an app's watch `ended`; a
265
+ * synchronous observer (an adapter following the Session, which may open it again) `failed` with "session closed", so
266
+ * it follows the next Session; `ended` stays for an observed owner that ended (a task document's task). A failed
267
+ * Session ends both `failed` with its error.
268
+ */
269
+ export declare function closeEnds(failure: {
270
+ readonly error: unknown;
271
+ } | undefined): {
272
+ readonly watch: WatchEnd;
273
+ readonly observer: WatchEnd;
274
+ };
275
+ /** The end `ends` give `follower`: a watch's, or an observer's. */
276
+ export declare function closeEndOf(follower: unknown, ends: ReturnType<typeof closeEnds>): WatchEnd;
277
+ /**
278
+ * The `Observation` of a guarded observer attached at `value`. Built outside the attaching closure, so a detached
279
+ * observation keeps nothing but `value` and the spent guard alive.
280
+ */
281
+ export declare function observation<T>(value: T, guarded: {
282
+ detach(): void;
283
+ }): Observation<T>;
284
+ export {};
144
285
  //# sourceMappingURL=session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/session/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/session/session.ts"],"names":[],"mappings":"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"}