@ny4n/durable 0.0.0-stage → 1.0.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 (303) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +711 -2
  3. package/dist/documents.d.ts +66 -0
  4. package/dist/documents.d.ts.map +1 -0
  5. package/dist/documents.js +98 -0
  6. package/dist/documents.js.map +1 -0
  7. package/dist/entries.d.ts +31 -0
  8. package/dist/entries.d.ts.map +1 -0
  9. package/dist/entries.js +31 -0
  10. package/dist/entries.js.map +1 -0
  11. package/dist/env/decode.d.ts +16 -0
  12. package/dist/env/decode.d.ts.map +1 -0
  13. package/dist/env/decode.js +28 -0
  14. package/dist/env/decode.js.map +1 -0
  15. package/dist/env/index.d.ts +263 -0
  16. package/dist/env/index.d.ts.map +1 -0
  17. package/dist/env/index.js +49 -0
  18. package/dist/env/index.js.map +1 -0
  19. package/dist/env/line-scan.d.ts +13 -0
  20. package/dist/env/line-scan.d.ts.map +1 -0
  21. package/dist/env/line-scan.js +147 -0
  22. package/dist/env/line-scan.js.map +1 -0
  23. package/dist/env/node-watch.d.ts +29 -0
  24. package/dist/env/node-watch.d.ts.map +1 -0
  25. package/dist/env/node-watch.js +485 -0
  26. package/dist/env/node-watch.js.map +1 -0
  27. package/dist/env/node.d.ts +56 -0
  28. package/dist/env/node.d.ts.map +1 -0
  29. package/dist/env/node.js +1166 -0
  30. package/dist/env/node.js.map +1 -0
  31. package/dist/errors.d.ts +32 -0
  32. package/dist/errors.d.ts.map +1 -0
  33. package/dist/errors.js +53 -0
  34. package/dist/errors.js.map +1 -0
  35. package/dist/harness/agent.d.ts +33 -0
  36. package/dist/harness/agent.d.ts.map +1 -0
  37. package/dist/harness/agent.js +235 -0
  38. package/dist/harness/agent.js.map +1 -0
  39. package/dist/harness/assistant.d.ts +15 -0
  40. package/dist/harness/assistant.d.ts.map +1 -0
  41. package/dist/harness/assistant.js +23 -0
  42. package/dist/harness/assistant.js.map +1 -0
  43. package/dist/harness/compaction.d.ts +56 -0
  44. package/dist/harness/compaction.d.ts.map +1 -0
  45. package/dist/harness/compaction.js +384 -0
  46. package/dist/harness/compaction.js.map +1 -0
  47. package/dist/harness/context.d.ts +63 -0
  48. package/dist/harness/context.d.ts.map +1 -0
  49. package/dist/harness/context.js +221 -0
  50. package/dist/harness/context.js.map +1 -0
  51. package/dist/harness/define.d.ts +18 -0
  52. package/dist/harness/define.d.ts.map +1 -0
  53. package/dist/harness/define.js +25 -0
  54. package/dist/harness/define.js.map +1 -0
  55. package/dist/harness/events.d.ts +180 -0
  56. package/dist/harness/events.d.ts.map +1 -0
  57. package/dist/harness/events.js +370 -0
  58. package/dist/harness/events.js.map +1 -0
  59. package/dist/harness/generation.d.ts +54 -0
  60. package/dist/harness/generation.d.ts.map +1 -0
  61. package/dist/harness/generation.js +514 -0
  62. package/dist/harness/generation.js.map +1 -0
  63. package/dist/harness/harness.d.ts +17 -0
  64. package/dist/harness/harness.d.ts.map +1 -0
  65. package/dist/harness/harness.js +332 -0
  66. package/dist/harness/harness.js.map +1 -0
  67. package/dist/harness/inbox.d.ts +59 -0
  68. package/dist/harness/inbox.d.ts.map +1 -0
  69. package/dist/harness/inbox.js +97 -0
  70. package/dist/harness/inbox.js.map +1 -0
  71. package/dist/harness/json.d.ts +10 -0
  72. package/dist/harness/json.d.ts.map +1 -0
  73. package/dist/harness/json.js +33 -0
  74. package/dist/harness/json.js.map +1 -0
  75. package/dist/harness/live.d.ts +142 -0
  76. package/dist/harness/live.d.ts.map +1 -0
  77. package/dist/harness/live.js +149 -0
  78. package/dist/harness/live.js.map +1 -0
  79. package/dist/harness/output.d.ts +69 -0
  80. package/dist/harness/output.d.ts.map +1 -0
  81. package/dist/harness/output.js +318 -0
  82. package/dist/harness/output.js.map +1 -0
  83. package/dist/harness/prompt.d.ts +27 -0
  84. package/dist/harness/prompt.d.ts.map +1 -0
  85. package/dist/harness/prompt.js +131 -0
  86. package/dist/harness/prompt.js.map +1 -0
  87. package/dist/harness/provider.d.ts +14 -0
  88. package/dist/harness/provider.d.ts.map +1 -0
  89. package/dist/harness/provider.js +30 -0
  90. package/dist/harness/provider.js.map +1 -0
  91. package/dist/harness/registry.d.ts +6 -0
  92. package/dist/harness/registry.d.ts.map +1 -0
  93. package/dist/harness/registry.js +101 -0
  94. package/dist/harness/registry.js.map +1 -0
  95. package/dist/harness/run.d.ts +17 -0
  96. package/dist/harness/run.d.ts.map +1 -0
  97. package/dist/harness/run.js +26 -0
  98. package/dist/harness/run.js.map +1 -0
  99. package/dist/harness/scheduler.d.ts +106 -0
  100. package/dist/harness/scheduler.d.ts.map +1 -0
  101. package/dist/harness/scheduler.js +1743 -0
  102. package/dist/harness/scheduler.js.map +1 -0
  103. package/dist/harness/submissions.d.ts +29 -0
  104. package/dist/harness/submissions.d.ts.map +1 -0
  105. package/dist/harness/submissions.js +175 -0
  106. package/dist/harness/submissions.js.map +1 -0
  107. package/dist/harness/task-graph.d.ts +49 -0
  108. package/dist/harness/task-graph.d.ts.map +1 -0
  109. package/dist/harness/task-graph.js +168 -0
  110. package/dist/harness/task-graph.js.map +1 -0
  111. package/dist/harness/tool.d.ts +76 -0
  112. package/dist/harness/tool.d.ts.map +1 -0
  113. package/dist/harness/tool.js +736 -0
  114. package/dist/harness/tool.js.map +1 -0
  115. package/dist/harness/types.d.ts +713 -0
  116. package/dist/harness/types.d.ts.map +1 -0
  117. package/dist/harness/types.js +2 -0
  118. package/dist/harness/types.js.map +1 -0
  119. package/dist/harness/usage.d.ts +18 -0
  120. package/dist/harness/usage.d.ts.map +1 -0
  121. package/dist/harness/usage.js +57 -0
  122. package/dist/harness/usage.js.map +1 -0
  123. package/dist/harness/util.d.ts +19 -0
  124. package/dist/harness/util.d.ts.map +1 -0
  125. package/dist/harness/util.js +58 -0
  126. package/dist/harness/util.js.map +1 -0
  127. package/dist/harness/view.d.ts +47 -0
  128. package/dist/harness/view.d.ts.map +1 -0
  129. package/dist/harness/view.js +206 -0
  130. package/dist/harness/view.js.map +1 -0
  131. package/dist/ids.d.ts +6 -0
  132. package/dist/ids.d.ts.map +1 -0
  133. package/dist/ids.js +9 -0
  134. package/dist/ids.js.map +1 -0
  135. package/dist/images/cloudflare.d.ts +4 -0
  136. package/dist/images/cloudflare.d.ts.map +1 -0
  137. package/dist/images/cloudflare.js +9 -0
  138. package/dist/images/cloudflare.js.map +1 -0
  139. package/dist/images/exif.d.ts +3 -0
  140. package/dist/images/exif.d.ts.map +1 -0
  141. package/dist/images/exif.js +71 -0
  142. package/dist/images/exif.js.map +1 -0
  143. package/dist/images/index.d.ts +18 -0
  144. package/dist/images/index.d.ts.map +1 -0
  145. package/dist/images/index.js +125 -0
  146. package/dist/images/index.js.map +1 -0
  147. package/dist/images/node-worker.d.ts +17 -0
  148. package/dist/images/node-worker.d.ts.map +1 -0
  149. package/dist/images/node-worker.js +16 -0
  150. package/dist/images/node-worker.js.map +1 -0
  151. package/dist/images/node.d.ts +21 -0
  152. package/dist/images/node.d.ts.map +1 -0
  153. package/dist/images/node.js +121 -0
  154. package/dist/images/node.js.map +1 -0
  155. package/dist/index.d.ts +24 -0
  156. package/dist/index.d.ts.map +1 -0
  157. package/dist/index.js +20 -0
  158. package/dist/index.js.map +1 -0
  159. package/dist/session/forks.d.ts +10 -0
  160. package/dist/session/forks.d.ts.map +1 -0
  161. package/dist/session/forks.js +42 -0
  162. package/dist/session/forks.js.map +1 -0
  163. package/dist/session/observation.d.ts +42 -0
  164. package/dist/session/observation.d.ts.map +1 -0
  165. package/dist/session/observation.js +281 -0
  166. package/dist/session/observation.js.map +1 -0
  167. package/dist/session/session.d.ts +133 -0
  168. package/dist/session/session.d.ts.map +1 -0
  169. package/dist/session/session.js +811 -0
  170. package/dist/session/session.js.map +1 -0
  171. package/dist/session/transaction.d.ts +119 -0
  172. package/dist/session/transaction.d.ts.map +1 -0
  173. package/dist/session/transaction.js +795 -0
  174. package/dist/session/transaction.js.map +1 -0
  175. package/dist/storage/jsonl/index.d.ts +2 -0
  176. package/dist/storage/jsonl/index.d.ts.map +1 -0
  177. package/dist/storage/jsonl/index.js +2 -0
  178. package/dist/storage/jsonl/index.js.map +1 -0
  179. package/dist/storage/jsonl/node.d.ts +6 -0
  180. package/dist/storage/jsonl/node.d.ts.map +1 -0
  181. package/dist/storage/jsonl/node.js +8 -0
  182. package/dist/storage/jsonl/node.js.map +1 -0
  183. package/dist/storage/jsonl/storage.d.ts +143 -0
  184. package/dist/storage/jsonl/storage.d.ts.map +1 -0
  185. package/dist/storage/jsonl/storage.js +682 -0
  186. package/dist/storage/jsonl/storage.js.map +1 -0
  187. package/dist/storage/memory.d.ts +62 -0
  188. package/dist/storage/memory.d.ts.map +1 -0
  189. package/dist/storage/memory.js +733 -0
  190. package/dist/storage/memory.js.map +1 -0
  191. package/dist/storage/scan.d.ts +18 -0
  192. package/dist/storage/scan.d.ts.map +1 -0
  193. package/dist/storage/scan.js +29 -0
  194. package/dist/storage/scan.js.map +1 -0
  195. package/dist/storage/sqlite/cloudflare.d.ts +46 -0
  196. package/dist/storage/sqlite/cloudflare.d.ts.map +1 -0
  197. package/dist/storage/sqlite/cloudflare.js +106 -0
  198. package/dist/storage/sqlite/cloudflare.js.map +1 -0
  199. package/dist/storage/sqlite/database.d.ts +37 -0
  200. package/dist/storage/sqlite/database.d.ts.map +1 -0
  201. package/dist/storage/sqlite/database.js +2 -0
  202. package/dist/storage/sqlite/database.js.map +1 -0
  203. package/dist/storage/sqlite/index.d.ts +4 -0
  204. package/dist/storage/sqlite/index.d.ts.map +1 -0
  205. package/dist/storage/sqlite/index.js +3 -0
  206. package/dist/storage/sqlite/index.js.map +1 -0
  207. package/dist/storage/sqlite/migrations.d.ts +11 -0
  208. package/dist/storage/sqlite/migrations.d.ts.map +1 -0
  209. package/dist/storage/sqlite/migrations.js +111 -0
  210. package/dist/storage/sqlite/migrations.js.map +1 -0
  211. package/dist/storage/sqlite/node.d.ts +41 -0
  212. package/dist/storage/sqlite/node.d.ts.map +1 -0
  213. package/dist/storage/sqlite/node.js +179 -0
  214. package/dist/storage/sqlite/node.js.map +1 -0
  215. package/dist/storage/sqlite/storage.d.ts +65 -0
  216. package/dist/storage/sqlite/storage.d.ts.map +1 -0
  217. package/dist/storage/sqlite/storage.js +670 -0
  218. package/dist/storage/sqlite/storage.js.map +1 -0
  219. package/dist/tasks.d.ts +6 -0
  220. package/dist/tasks.d.ts.map +1 -0
  221. package/dist/tasks.js +5 -0
  222. package/dist/tasks.js.map +1 -0
  223. package/dist/testing/assertions.d.ts +5 -0
  224. package/dist/testing/assertions.d.ts.map +1 -0
  225. package/dist/testing/assertions.js +25 -0
  226. package/dist/testing/assertions.js.map +1 -0
  227. package/dist/testing/env-conformance.d.ts +7 -0
  228. package/dist/testing/env-conformance.d.ts.map +1 -0
  229. package/dist/testing/env-conformance.js +431 -0
  230. package/dist/testing/env-conformance.js.map +1 -0
  231. package/dist/testing/index.d.ts +7 -0
  232. package/dist/testing/index.d.ts.map +1 -0
  233. package/dist/testing/index.js +6 -0
  234. package/dist/testing/index.js.map +1 -0
  235. package/dist/testing/runner.d.ts +12 -0
  236. package/dist/testing/runner.d.ts.map +1 -0
  237. package/dist/testing/runner.js +23 -0
  238. package/dist/testing/runner.js.map +1 -0
  239. package/dist/testing/storage-benchmark.d.ts +41 -0
  240. package/dist/testing/storage-benchmark.d.ts.map +1 -0
  241. package/dist/testing/storage-benchmark.js +350 -0
  242. package/dist/testing/storage-benchmark.js.map +1 -0
  243. package/dist/testing/storage-conformance.d.ts +4 -0
  244. package/dist/testing/storage-conformance.d.ts.map +1 -0
  245. package/dist/testing/storage-conformance.js +1213 -0
  246. package/dist/testing/storage-conformance.js.map +1 -0
  247. package/dist/testing/types.d.ts +37 -0
  248. package/dist/testing/types.d.ts.map +1 -0
  249. package/dist/testing/types.js +2 -0
  250. package/dist/testing/types.js.map +1 -0
  251. package/dist/tools/bash.d.ts +55 -0
  252. package/dist/tools/bash.d.ts.map +1 -0
  253. package/dist/tools/bash.js +138 -0
  254. package/dist/tools/bash.js.map +1 -0
  255. package/dist/tools/edit-diff.d.ts +89 -0
  256. package/dist/tools/edit-diff.d.ts.map +1 -0
  257. package/dist/tools/edit-diff.js +386 -0
  258. package/dist/tools/edit-diff.js.map +1 -0
  259. package/dist/tools/edit.d.ts +18 -0
  260. package/dist/tools/edit.d.ts.map +1 -0
  261. package/dist/tools/edit.js +117 -0
  262. package/dist/tools/edit.js.map +1 -0
  263. package/dist/tools/env.d.ts +5 -0
  264. package/dist/tools/env.d.ts.map +1 -0
  265. package/dist/tools/env.js +7 -0
  266. package/dist/tools/env.js.map +1 -0
  267. package/dist/tools/file-mutation-queue.d.ts +9 -0
  268. package/dist/tools/file-mutation-queue.d.ts.map +1 -0
  269. package/dist/tools/file-mutation-queue.js +52 -0
  270. package/dist/tools/file-mutation-queue.js.map +1 -0
  271. package/dist/tools/image-processor.d.ts +47 -0
  272. package/dist/tools/image-processor.d.ts.map +1 -0
  273. package/dist/tools/image-processor.js +30 -0
  274. package/dist/tools/image-processor.js.map +1 -0
  275. package/dist/tools/image.d.ts +20 -0
  276. package/dist/tools/image.d.ts.map +1 -0
  277. package/dist/tools/image.js +178 -0
  278. package/dist/tools/image.js.map +1 -0
  279. package/dist/tools/index.d.ts +46 -0
  280. package/dist/tools/index.d.ts.map +1 -0
  281. package/dist/tools/index.js +23 -0
  282. package/dist/tools/index.js.map +1 -0
  283. package/dist/tools/path-utils.d.ts +5 -0
  284. package/dist/tools/path-utils.d.ts.map +1 -0
  285. package/dist/tools/path-utils.js +26 -0
  286. package/dist/tools/path-utils.js.map +1 -0
  287. package/dist/tools/read.d.ts +25 -0
  288. package/dist/tools/read.d.ts.map +1 -0
  289. package/dist/tools/read.js +235 -0
  290. package/dist/tools/read.js.map +1 -0
  291. package/dist/tools/write.d.ts +10 -0
  292. package/dist/tools/write.d.ts.map +1 -0
  293. package/dist/tools/write.js +31 -0
  294. package/dist/tools/write.js.map +1 -0
  295. package/dist/truncate.d.ts +64 -0
  296. package/dist/truncate.d.ts.map +1 -0
  297. package/dist/truncate.js +154 -0
  298. package/dist/truncate.js.map +1 -0
  299. package/dist/types.d.ts +932 -0
  300. package/dist/types.d.ts.map +1 -0
  301. package/dist/types.js +3 -0
  302. package/dist/types.js.map +1 -0
  303. package/package.json +140 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/session/transaction.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Context, copyJson, type Draft, type JsonValue } from \"@ny4n/chord\";\nimport { type Change, type Op, type Prepared, type Tracker, track } from \"@ny4n/chord/delta\";\nimport {\n\ttype AnyDocDefinition,\n\ttype AnyDocToken,\n\taddressId,\n\tcheckRecordScope,\n\tcheckRecordVersion,\n\tdocumentCreate,\n\tmaterializeDocumentValue,\n\ttype ResolvedAddress,\n\tresolveAddress,\n} from \"../documents.ts\";\nimport { ReadAfterWrite } from \"../errors.ts\";\nimport type {\n\tConversationDocFamilyToken,\n\tConversationDocToken,\n\tConversationId,\n\tConversationOwnership,\n\tConversationQuery,\n\tConversationRecord,\n\tCursor,\n\tDocumentAddress,\n\tDocumentCommitChange,\n\tDocumentCopySource,\n\tDocumentCreate,\n\tDocumentId,\n\tDocumentRecord,\n\tEntry,\n\tEntryDraft,\n\tEntryId,\n\tEntryQuery,\n\tEntryRecord,\n\tJsonObject,\n\tSeq,\n\tSessionDocFamilyToken,\n\tSessionDocToken,\n\tStorage,\n\tStorageWrite,\n\tSubmissionCreate,\n\tSubmissionId,\n\tSubmissionRecord,\n\tSubmissionSettlement,\n\tTask,\n\tTaskDocFamilyToken,\n\tTaskDocToken,\n\tTaskId,\n\tTaskOptions,\n\tTaskQuery,\n\tTaskRecord,\n\tTaskReference,\n\tTx,\n\tTypedEntry,\n\tTypedEntryDraft,\n} from \"../types.ts\";\nimport { ROOT_CONVERSATION_ID } from \"../types.ts\";\nimport { prepareForkDocumentCopies } from \"./forks.ts\";\n\ntype AnyTaskRecord = TaskRecord<JsonValue, JsonValue, JsonValue>;\n\n/** A staged submission change: a settlement, or the placement of a queued submission at its entry. */\ntype SubmissionChange = SubmissionSettlement | { readonly status: \"placed\"; readonly entry: EntryId };\n\n/**\n * Complete record after applying one change. Placement turns a queued input `placed` and a queued write `done`; only a\n * placed input can be answered. A settled record stays.\n */\nfunction applySubmissionChange(current: SubmissionRecord, change: SubmissionChange): SubmissionRecord {\n\tif (current.status === \"done\" || current.status === \"unanswered\") return current;\n\tif (change.status === \"placed\") {\n\t\tif (current.status !== \"queued\") throw new Error(`Submission ${current.id} is not queued`);\n\t\tconst status = current.type === \"input\" ? \"placed\" : \"done\";\n\t\treturn { ...current, status, entry: change.entry } as SubmissionRecord;\n\t}\n\tif (change.status === \"done\" && current.status !== \"placed\") {\n\t\tthrow new Error(`Submission ${current.id} is not a placed input`);\n\t}\n\t// Queued and placed records carry no answer, reason, or detail; an unanswered input keeps its entry.\n\treturn { ...current, ...change } as SubmissionRecord;\n}\n\nconst INTERNAL_SCAN_PAGE_SIZE = 256;\nconst EMPTY_OPERATIONS: readonly Op[] = [];\nconst TABLE_JSON_COPY_OPTIONS = { omitUndefinedProperties: true } as const;\n\n/** One committed document incarnation owned by the Session tracker cache. */\nexport type LoadedDocument = {\n\treadonly addressId: string;\n\treadonly record: DocumentRecord;\n\t/** Persisted definition version; older while the tracked value is migrated only in memory. */\n\tstoredVersion: number;\n\t/** Definition version whose shape the tracked value has; access with another version reloads from Storage. */\n\treadonly valueVersion: number;\n\t/** Stored deltas after the newest base; advanced by adoption so the next predicate call needs no read. */\n\tdeltasSinceBase: number;\n\treadonly tracker: Tracker<JsonObject>;\n};\n\n/** Session services used by a transaction while it holds the mutation line. */\nexport interface TransactionHost {\n\treadonly storage: Storage;\n\t/** Wall clock for task lifecycle times. */\n\tnow(): number;\n\t/** Return the cached current incarnation without loading. */\n\tcached(addressId: string): LoadedDocument | undefined;\n\t/** Return the cached current incarnation, cold-loading and migrating it when necessary. */\n\tload(\n\t\tdefinition: AnyDocDefinition,\n\t\taddressId: string,\n\t\taddress: DocumentAddress,\n\t\tcontext: Context,\n\t): Promise<LoadedDocument | undefined>;\n\t/** Install a newly committed incarnation. */\n\tinstall(document: LoadedDocument): void;\n\t/** Remove a retired incarnation if it is still the cached occupant of its address. */\n\tevict(addressId: string, recordId: DocumentId): void;\n\t/** Stage writes that belong to every newly created or forked conversation, in its creating transaction. */\n\tconversationCreated(tx: Transaction, record: ConversationRecord): Promise<void>;\n}\n\n/** Committed and candidate state for one task touched by this transaction. */\ntype TransactionTask = {\n\tcommittedRead?: Promise<AnyTaskRecord | undefined>;\n\twrite?: { readonly kind: \"create\" | \"replace\"; readonly record: AnyTaskRecord };\n\tpublicationConversationId?: ConversationId;\n};\n\n/** Defaults a commit binds to: `tx.createTask()` conversation and the task attributed to appended entries. */\nexport type TransactionScope = {\n\treadonly conversationId?: ConversationId;\n\t/** Task whose runtime commit this is; stamped as `byTaskId` on appended entries. */\n\treadonly taskId?: TaskId;\n};\n\n/** Storage/cache provenance of one staged document incarnation. */\ntype DocumentTarget =\n\t| { readonly kind: \"loaded\"; readonly document: LoadedDocument }\n\t| {\n\t\t\treadonly kind: \"created\";\n\t\t\treadonly record: DocumentCreate;\n\t\t\treadonly version: number;\n\t\t\treadonly tracker: Tracker<JsonObject>;\n\t }\n\t| {\n\t\t\treadonly kind: \"fork-copy\";\n\t\t\treadonly record: DocumentCreate;\n\t\t\treadonly source: DocumentCopySource;\n\t }\n\t| { readonly kind: \"retire-only\"; readonly record: DocumentRecord };\n\n/** One document incarnation acquired, created, or retired by this transaction. */\ntype DocumentEntry = {\n\treadonly addressId: string;\n\treadonly address: DocumentAddress;\n\t/** Absent for definition-free fork copies and retirement entries discovered by a terminal-task scan. */\n\tdefinition?: AnyDocDefinition;\n\t/** Memoized public acquisition; absent for metadata-only retirement. */\n\tdraftPromise?: Promise<Draft<JsonObject>>;\n\t/** Set after acquisition or retirement lookup finds the affected incarnation. */\n\ttarget?: DocumentTarget;\n\tchange?: Change<JsonObject>;\n\tprepared?: Prepared<JsonObject>;\n\tretireOnCommit: boolean;\n};\n\n/**\n * What one staged incarnation writes and publishes, decided once before Storage admission so adoption only applies it.\n * `record` is a `DocumentRecord` for an incarnation that is already committed and a `DocumentCreate` for a new one.\n */\ntype DocumentPlan = {\n\treadonly addressId: string;\n\treadonly record: DocumentCreate | DocumentRecord;\n\tretire: boolean;\n\t/** Creation, copy, or change content; absent when only retirement is written. */\n\tcontent?: Extract<StorageWrite, { readonly type: \"document.create\" | \"document.copy\" | \"document.change\" }>;\n\t/** Prepared change of a tracked incarnation; absent for fork copies and retirement-only entries. */\n\treadonly change?: {\n\t\treadonly tracker: Tracker<JsonObject>;\n\t\treadonly prepared: Prepared<JsonObject>;\n\t\treadonly version: number;\n\t\t/** The cached incarnation this change updates; absent when it creates one. */\n\t\treadonly loaded?: LoadedDocument;\n\t\treadonly definition?: AnyDocDefinition;\n\t};\n\t/** Resolved before Storage admission so adoption performs no reads. */\n\tconversationId?: ConversationId;\n};\n\n/**\n * Transaction for one Session commit callback.\n *\n * Every asynchronous operation is tracked so callback settlement can reject and drain unfinished work. Session calls\n * one settlement method, then either discards prepared changes or adopts them once after Storage succeeds.\n */\nexport class Transaction implements Tx {\n\treadonly #host: TransactionHost;\n\treadonly #context: Context;\n\treadonly #scope: TransactionScope;\n\treadonly #pendingOperations = new Set<Promise<unknown>>();\n\t#sealed = false;\n\t#hasTableWrite = false;\n\n\t/** Atomic batch; conversation and entry writes stage eagerly, while task and document writes assemble later. */\n\treadonly #writes: StorageWrite[] = [];\n\treadonly #createdConversationIds = new Set<ConversationId>();\n\treadonly #forkSourceConversationIds = new Set<ConversationId>();\n\treadonly #forkSourceDocumentIds = new Set<DocumentId>();\n\t/** One entry per task touched by a public read, candidate write, or document-owner lookup. */\n\treadonly #tasksById = new Map<TaskId, TransactionTask>();\n\t/** Submissions created by this transaction, by ID. */\n\treadonly #submissions = new Map<SubmissionId, SubmissionRecord>();\n\t/** Submission settlements and placements in staging order; resolved against the latest candidate record during assembly. */\n\treadonly #submissionChanges: { readonly id: SubmissionId; readonly change: SubmissionChange }[] = [];\n\n\t/** Write and publication plans of every staged incarnation, built during assembly. */\n\treadonly #plans: DocumentPlan[] = [];\n\t/** Every document acquisition or retirement marker in staging order. */\n\treadonly #documents: DocumentEntry[] = [];\n\t/** Latest transaction-local incarnation or retirement marker at each logical address. */\n\treadonly #latestDocumentByAddress = new Map<string, DocumentEntry>();\n\n\tconstructor(host: TransactionHost, context: Context, scope: TransactionScope = {}) {\n\t\tthis.#host = host;\n\t\tthis.#context = context;\n\t\tthis.#scope = scope;\n\t}\n\n\t// ─── Table reads ────────────────────────────────────────────────────────\n\n\tconversation(id: ConversationId): Promise<ConversationRecord | undefined> {\n\t\treturn this.#read(\"conversation\", () => this.#host.storage.conversation(id, this.#context));\n\t}\n\n\tentry(id: EntryId): Promise<EntryRecord | undefined>;\n\tentry<D extends JsonValue>(token: Entry<D>, id: EntryId): Promise<TypedEntry<D> | undefined>;\n\tentry(first: EntryId | { readonly kind: string }, second?: EntryId): Promise<EntryRecord | undefined> {\n\t\tconst kind = typeof first === \"number\" ? undefined : first.kind;\n\t\tconst id = typeof first === \"number\" ? first : second!;\n\t\treturn this.#read(\"entry\", async () => {\n\t\t\tconst entry = (await this.#host.storage.entry(id, this.#context))?.entry;\n\t\t\treturn kind === undefined || entry?.kind === kind ? entry : undefined;\n\t\t});\n\t}\n\n\ttask(id: TaskId): Promise<AnyTaskRecord | undefined> {\n\t\treturn this.#read(\"task\", () => this.#committedTask(id));\n\t}\n\n\tscanConversations(query: ConversationQuery, limit: number, cursor?: Cursor) {\n\t\treturn this.#read(\"scanConversations\", () =>\n\t\t\tthis.#host.storage.scanConversations(query, limit, cursor, this.#context),\n\t\t);\n\t}\n\n\tscanEntries(query: EntryQuery, limit: number, cursor?: Cursor) {\n\t\treturn this.#read(\"scanEntries\", () => this.#host.storage.scanEntries(query, limit, cursor, this.#context));\n\t}\n\n\tlatestHeadMarker(conversationId: ConversationId) {\n\t\treturn this.#read(\"latestHeadMarker\", () =>\n\t\t\tthis.#host.storage.findLatestHeadMarker(conversationId, undefined, this.#context),\n\t\t);\n\t}\n\n\tscanTasks(query: TaskQuery, limit: number, cursor?: Cursor) {\n\t\treturn this.#read(\"scanTasks\", () => this.#host.storage.scanTasks(query, limit, cursor, this.#context));\n\t}\n\n\t/** Internal: committed submission record. */\n\tsubmission(id: SubmissionId): Promise<SubmissionRecord | undefined> {\n\t\treturn this.#read(\"submission\", () => this.#host.storage.submission(id, this.#context));\n\t}\n\n\t/** Committed submission with a conversation-scoped request ID. */\n\tsubmissionByRequest(conversationId: ConversationId, requestId: string): Promise<SubmissionRecord | undefined> {\n\t\treturn this.#read(\"submissionByRequest\", () =>\n\t\t\tthis.#host.storage.submissionByRequest(conversationId, requestId, this.#context),\n\t\t);\n\t}\n\n\t// ─── Table writes ───────────────────────────────────────────────────────\n\n\tcreateConversation(options: { readonly ownership: ConversationOwnership }): Promise<ConversationRecord> {\n\t\treturn this.#write(() => this.#stageConversation(undefined, options.ownership));\n\t}\n\n\t/** Internal final-form bootstrap path for the reserved root identity. */\n\tcreateRootConversation(): Promise<ConversationRecord> {\n\t\treturn this.#write(() => this.#stageConversation(undefined, { kind: \"ownerless\" }, ROOT_CONVERSATION_ID));\n\t}\n\n\tforkConversation(\n\t\tparentConversationId: ConversationId,\n\t\tat: EntryId,\n\t\toptions: { readonly ownership: ConversationOwnership },\n\t): Promise<ConversationRecord> {\n\t\treturn this.#write(() =>\n\t\t\tthis.#stageConversation({ conversationId: parentConversationId, at }, options.ownership),\n\t\t);\n\t}\n\n\tasync #stageConversation(\n\t\tparent: NonNullable<ConversationRecord[\"parent\"]> | undefined,\n\t\townership: ConversationOwnership,\n\t\treservedId?: ConversationId,\n\t): Promise<ConversationRecord> {\n\t\tconst ownerTaskId = ownership.kind === \"task\" ? ownership.taskId : undefined;\n\t\tconst id = reservedId ?? (await this.#host.storage.mintId<ConversationId>());\n\t\tthis.#assertOpen();\n\t\tlet owner: ConversationRecord[\"owner\"];\n\t\tif (ownerTaskId !== undefined) {\n\t\t\tconst task = await this.#currentTask(ownerTaskId);\n\t\t\tthis.#assertOpen();\n\t\t\tif (task === undefined) throw new Error(`Conversation owner task ${ownerTaskId} does not exist`);\n\t\t\towner = { conversationId: task.conversationId, taskId: ownerTaskId };\n\t\t}\n\t\tconst record: ConversationRecord = {\n\t\t\tid,\n\t\t\t...(parent === undefined ? {} : { parent }),\n\t\t\t...(owner === undefined ? {} : { owner }),\n\t\t};\n\t\tconst copies =\n\t\t\tparent === undefined\n\t\t\t\t? []\n\t\t\t\t: await prepareForkDocumentCopies(this.#host.storage, parent.conversationId, parent.at, id, this.#context);\n\t\tthis.#assertOpen();\n\t\tfor (const copy of copies) {\n\t\t\tthis.#forkSourceDocumentIds.add(copy.source.id);\n\t\t\tconst entry: DocumentEntry = {\n\t\t\t\taddressId: addressId(copy.record),\n\t\t\t\taddress: copy.record,\n\t\t\t\ttarget: { kind: \"fork-copy\", ...copy },\n\t\t\t\tretireOnCommit: false,\n\t\t\t};\n\t\t\tthis.#documents.push(entry);\n\t\t\tthis.#latestDocumentByAddress.set(entry.addressId, entry);\n\t\t}\n\t\tif (parent !== undefined) this.#forkSourceConversationIds.add(parent.conversationId);\n\t\tthis.#createdConversationIds.add(id);\n\t\tthis.#writes.push({ type: \"conversation\", value: record });\n\t\tawait this.#host.conversationCreated(this, record);\n\t\tthis.#assertOpen();\n\t\treturn record;\n\t}\n\n\tappendEntry(conversationId: ConversationId, value: EntryDraft): Promise<EntryRecord>;\n\tappendEntry<D extends JsonValue>(\n\t\ttoken: Entry<D>,\n\t\tconversationId: ConversationId,\n\t\tvalue: TypedEntryDraft<NoInfer<D>>,\n\t): Promise<TypedEntry<D>>;\n\tappendEntry(\n\t\tfirst: ConversationId | { readonly kind: string },\n\t\tsecond: ConversationId | EntryDraft,\n\t\tthird?: object,\n\t): Promise<EntryRecord> {\n\t\tif (typeof first === \"number\") return this.#appendEntry(first, second as EntryDraft);\n\t\treturn this.#appendEntry(second as ConversationId, { ...third, kind: first.kind } as EntryDraft);\n\t}\n\n\t#appendEntry(conversationId: ConversationId, value: EntryDraft): Promise<EntryRecord> {\n\t\treturn this.#write(async () => {\n\t\t\tawait this.#requireConversation(conversationId);\n\t\t\tthis.#assertOpen();\n\t\t\tconst id = await this.#host.storage.mintId<EntryId>();\n\t\t\tthis.#assertOpen();\n\t\t\tconst { head, ...rest } = value;\n\t\t\t// Undefined `head` and `byTaskId` are omitted by the copy.\n\t\t\tconst record = copyJson(\n\t\t\t\t{\n\t\t\t\t\t...rest,\n\t\t\t\t\tid,\n\t\t\t\t\tconversationId,\n\t\t\t\t\thead: head === \"self\" ? id : head,\n\t\t\t\t\tbyTaskId: this.#scope.taskId,\n\t\t\t\t},\n\t\t\t\tTABLE_JSON_COPY_OPTIONS,\n\t\t\t) as unknown as EntryRecord;\n\t\t\tthis.#writes.push({ type: \"entry\", value: record });\n\t\t\treturn record;\n\t\t});\n\t}\n\n\tcreateTask<I, S extends { phase: string }, R, H extends object>(\n\t\ttask: Task<I, S, R, H>,\n\t\tinput: I,\n\t\toptions: TaskOptions,\n\t): Promise<TaskId<R>>;\n\tcreateTask<I, S extends { phase: string }, R>(\n\t\ttask: TaskReference<I, S, R>,\n\t\tinput: I,\n\t\toptions: TaskOptions,\n\t): Promise<TaskId<R>>;\n\tcreateTask<I, S extends { phase: string }, R>(\n\t\ttask: Task<I, S, R, object> | TaskReference<I, S, R>,\n\t\tinput: I,\n\t\toptions: TaskOptions,\n\t): Promise<TaskId<R>> {\n\t\treturn this.#write(async () => {\n\t\t\tconst ownership = options.ownership;\n\t\t\tlet owner: AnyTaskRecord | undefined;\n\t\t\tif (ownership.kind === \"task\") {\n\t\t\t\t// Validated again against the owner's final candidate during assembly.\n\t\t\t\towner = await this.#currentTask(ownership.taskId);\n\t\t\t\tthis.#assertOpen();\n\t\t\t\tif (owner === undefined) throw new Error(`Task owner ${ownership.taskId} does not exist`);\n\t\t\t\tif (options.background === true) throw new TypeError(\"A child task cannot be background\");\n\t\t\t\tif (options.conversationId !== undefined && options.conversationId !== owner.conversationId) {\n\t\t\t\t\tthrow new Error(`A child task lives in its owner's conversation ${owner.conversationId}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst conversationId = owner?.conversationId ?? options.conversationId ?? this.#scope.conversationId;\n\t\t\tif (conversationId === undefined) throw new TypeError(\"Tx.createTask() requires options.conversationId\");\n\t\t\tawait this.#requireConversation(conversationId);\n\t\t\tthis.#assertOpen();\n\t\t\tconst definition = task.definition;\n\t\t\tconst checkpoint = definition.initial(input);\n\t\t\tconst id = await this.#host.storage.mintId<TaskId<R>>();\n\t\t\tthis.#assertOpen();\n\t\t\tconst record = copyJson(\n\t\t\t\t{\n\t\t\t\t\tid,\n\t\t\t\t\tconversationId,\n\t\t\t\t\tkind: definition.name,\n\t\t\t\t\tversion: definition.version,\n\t\t\t\t\tinput,\n\t\t\t\t\t...(owner === undefined ? {} : { owner: owner.id }),\n\t\t\t\t\tbackground: options.background ?? false,\n\t\t\t\t\tabortRequested: false,\n\t\t\t\t\t...(options.abandonOnRestart === true ? { abandonOnRestart: true } : {}),\n\t\t\t\t\tstate: { status: \"pending\", checkpoint },\n\t\t\t\t},\n\t\t\t\tTABLE_JSON_COPY_OPTIONS,\n\t\t\t) as unknown as AnyTaskRecord;\n\t\t\tthis.#tasksById.set(id, { write: { kind: \"create\", record } });\n\t\t\treturn id;\n\t\t});\n\t}\n\n\t/** Create a raw submission record with a fresh ID; no admission rules apply. */\n\tcreateSubmission(create: SubmissionCreate): Promise<SubmissionRecord> {\n\t\treturn this.#write(async () => {\n\t\t\tawait this.#requireConversation(create.conversationId);\n\t\t\tthis.#assertOpen();\n\t\t\tconst id = await this.#host.storage.mintId<SubmissionId>();\n\t\t\tthis.#assertOpen();\n\t\t\tconst record = copyJson({ ...create, id }, TABLE_JSON_COPY_OPTIONS) as unknown as SubmissionRecord;\n\t\t\tthis.#submissions.set(id, record);\n\t\t\treturn record;\n\t\t});\n\t}\n\n\t/**\n\t * Settle a submission. Resolved during assembly against the transaction's latest candidate record, falling back to\n\t * committed state, so it is not a caller table read and works after the first table write.\n\t */\n\tsettleSubmission(id: SubmissionId, settlement: SubmissionSettlement): void {\n\t\tthis.#assertOpen();\n\t\tthis.#hasTableWrite = true;\n\t\tthis.#submissionChanges.push({ id, change: copyJson(settlement) as SubmissionSettlement });\n\t}\n\n\t/** Place a queued submission at `entry`; resolved during assembly like `settleSubmission()`. */\n\tplaceSubmission(id: SubmissionId, entry: EntryId): void {\n\t\tthis.#assertOpen();\n\t\tthis.#hasTableWrite = true;\n\t\tthis.#submissionChanges.push({ id, change: { status: \"placed\", entry } });\n\t}\n\n\t/** Internal: replace one task record completely. Tasks change their own state through their runtime. */\n\tsetTask(value: AnyTaskRecord): void {\n\t\tthis.#assertOpen();\n\t\tthis.#hasTableWrite = true;\n\t\tconst task = this.#taskEntry(value.id);\n\t\tconst candidate = task.write?.record;\n\t\tif (candidate?.state.status === \"terminal\") {\n\t\t\tthrow new Error(`Task ${value.id} already has a terminal candidate`);\n\t\t}\n\t\tif (candidate !== undefined && candidate.conversationId !== value.conversationId) {\n\t\t\tthrow new Error(`Task ${value.id} cannot change conversations`);\n\t\t}\n\t\ttask.write = {\n\t\t\tkind: task.write?.kind === \"create\" ? \"create\" : \"replace\",\n\t\t\trecord: copyJson(this.#stampTimes(value, candidate), TABLE_JSON_COPY_OPTIONS) as unknown as AnyTaskRecord,\n\t\t};\n\t}\n\n\t/** Internal: candidate records of the tasks this transaction created or replaced so far. */\n\tstagedTasks(): AnyTaskRecord[] {\n\t\tconst records: AnyTaskRecord[] = [];\n\t\tfor (const task of this.#tasksById.values()) if (task.write !== undefined) records.push(task.write.record);\n\t\treturn records;\n\t}\n\n\t/** Internal: conversations this transaction created or forked so far. */\n\tstagedConversations(): ConversationRecord[] {\n\t\tconst records: ConversationRecord[] = [];\n\t\tfor (const write of this.#writes) if (write.type === \"conversation\") records.push(write.value);\n\t\treturn records;\n\t}\n\n\t// ─── Documents ──────────────────────────────────────────────────────────\n\tdoc<T extends JsonObject>(token: SessionDocToken<T>): Promise<Draft<T>>;\n\tdoc<T extends JsonObject>(token: ConversationDocToken<T>, conversationId: ConversationId): Promise<Draft<T>>;\n\tdoc<T extends JsonObject>(token: TaskDocToken<T>, taskId: TaskId): Promise<Draft<T>>;\n\tdoc<T extends JsonObject, I extends JsonValue>(\n\t\ttoken: SessionDocFamilyToken<T, I>,\n\t\tkey: string,\n\t\tseed: I,\n\t): Promise<Draft<T>>;\n\tdoc<T extends JsonObject, I extends JsonValue>(\n\t\ttoken: ConversationDocFamilyToken<T, I>,\n\t\tconversationId: ConversationId,\n\t\tkey: string,\n\t\tseed: I,\n\t): Promise<Draft<T>>;\n\tdoc<T extends JsonObject, I extends JsonValue>(\n\t\ttoken: TaskDocFamilyToken<T, I>,\n\t\ttaskId: TaskId,\n\t\tkey: string,\n\t\tseed: I,\n\t): Promise<Draft<T>>;\n\tdoc(token: AnyDocToken, ...args: readonly unknown[]): Promise<Draft<JsonObject>> {\n\t\ttry {\n\t\t\tthis.#assertOpen();\n\t\t\tconst definition = token.definition;\n\t\t\tconst resolved = resolveAddress(definition, args);\n\t\t\tthis.#assertTaskDocumentsOpen(resolved);\n\t\t\tconst latest = this.#latestDocumentByAddress.get(resolved.id);\n\t\t\tif (latest !== undefined && !latest.retireOnCommit) {\n\t\t\t\tif (latest.draftPromise !== undefined) return latest.draftPromise;\n\t\t\t\tif (latest.target?.kind === \"fork-copy\") {\n\t\t\t\t\tlatest.draftPromise = this.#track(this.#acquireForkCopy(latest, definition, latest.target));\n\t\t\t\t\treturn latest.draftPromise;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst seed = definition.family === true ? copyJson(args[resolved.nextArgument]) : undefined;\n\t\t\tconst docEntry: DocumentEntry = {\n\t\t\t\taddressId: resolved.id,\n\t\t\t\taddress: resolved.address,\n\t\t\t\tdefinition,\n\t\t\t\tretireOnCommit: false,\n\t\t\t};\n\t\t\tthis.#documents.push(docEntry);\n\t\t\tthis.#latestDocumentByAddress.set(docEntry.addressId, docEntry);\n\t\t\t// Capture retirement before awaiting so a pending old acquisition and its replacement stay distinct.\n\t\t\tdocEntry.draftPromise = this.#track(this.#acquire(docEntry, seed, latest?.retireOnCommit === true));\n\t\t\treturn docEntry.draftPromise;\n\t\t} catch (error) {\n\t\t\treturn Promise.reject(error);\n\t\t}\n\t}\n\n\tretireDoc<T extends JsonObject>(token: SessionDocToken<T>): Promise<void>;\n\tretireDoc<T extends JsonObject>(token: ConversationDocToken<T>, conversationId: ConversationId): Promise<void>;\n\tretireDoc<T extends JsonObject>(token: TaskDocToken<T>, taskId: TaskId): Promise<void>;\n\tretireDoc<T extends JsonObject, I extends JsonValue>(token: SessionDocFamilyToken<T, I>, key: string): Promise<void>;\n\tretireDoc<T extends JsonObject, I extends JsonValue>(\n\t\ttoken: ConversationDocFamilyToken<T, I>,\n\t\tconversationId: ConversationId,\n\t\tkey: string,\n\t): Promise<void>;\n\tretireDoc<T extends JsonObject, I extends JsonValue>(\n\t\ttoken: TaskDocFamilyToken<T, I>,\n\t\ttaskId: TaskId,\n\t\tkey: string,\n\t): Promise<void>;\n\tretireDoc(token: AnyDocToken, ...args: readonly unknown[]): Promise<void> {\n\t\ttry {\n\t\t\tthis.#assertOpen();\n\t\t\tconst definition = token.definition;\n\t\t\tconst resolved = resolveAddress(definition, args);\n\t\t\tconst latest = this.#latestDocumentByAddress.get(resolved.id);\n\t\t\tif (latest?.retireOnCommit) return Promise.resolve();\n\t\t\tif (latest?.target?.kind === \"fork-copy\") {\n\t\t\t\tcheckRecordScope(definition, latest.target.record);\n\t\t\t\tlatest.retireOnCommit = true;\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\t\t\tif (latest?.draftPromise !== undefined) {\n\t\t\t\t// Retirement of an acquired draft persists its final content before retirement.\n\t\t\t\tlatest.retireOnCommit = true;\n\t\t\t\treturn this.#track(latest.draftPromise.then(() => undefined));\n\t\t\t}\n\t\t\tconst entry: DocumentEntry = {\n\t\t\t\taddressId: resolved.id,\n\t\t\t\taddress: resolved.address,\n\t\t\t\tdefinition,\n\t\t\t\tretireOnCommit: true,\n\t\t\t};\n\t\t\tthis.#documents.push(entry);\n\t\t\tthis.#latestDocumentByAddress.set(entry.addressId, entry);\n\t\t\treturn this.#track(this.#findRetirement(entry));\n\t\t} catch (error) {\n\t\t\treturn Promise.reject(error);\n\t\t}\n\t}\n\n\tasync #acquire(entry: DocumentEntry, seed: JsonValue | undefined, skipLoad: boolean): Promise<Draft<JsonObject>> {\n\t\tconst definition = entry.definition!;\n\t\tconst loaded = skipLoad\n\t\t\t? undefined\n\t\t\t: await this.#host.load(definition, entry.addressId, entry.address, this.#context);\n\t\tthis.#assertOpen();\n\t\tif (loaded !== undefined) {\n\t\t\tcheckRecordScope(definition, loaded.record);\n\t\t\tcheckRecordVersion(definition, loaded.record, loaded.storedVersion);\n\t\t\tentry.target = { kind: \"loaded\", document: loaded };\n\t\t\tentry.change = loaded.tracker.beginChange();\n\t\t\treturn entry.change.state;\n\t\t}\n\t\tconst scope = entry.address.scope;\n\t\tif (scope.kind === \"conversation\") await this.#requireConversation(scope.conversationId);\n\t\tif (scope.kind === \"task\") {\n\t\t\tconst task = await this.#currentTask(scope.taskId);\n\t\t\tif (task === undefined) throw new Error(`Task ${scope.taskId} does not exist`);\n\t\t\tif (task.state.status === \"terminal\") throw new Error(`Task ${scope.taskId} is terminal`);\n\t\t}\n\t\tthis.#assertOpen();\n\t\tconst value = copyJson(\n\t\t\tdefinition.family === true ? definition.initial(seed) : definition.initial(),\n\t\t) as JsonObject;\n\t\tconst id = await this.#host.storage.mintId<DocumentId>();\n\t\tthis.#assertOpen();\n\t\tconst tracker = track(value);\n\t\tentry.target = {\n\t\t\tkind: \"created\",\n\t\t\trecord: documentCreate(definition, entry.address, id),\n\t\t\tversion: definition.version,\n\t\t\ttracker,\n\t\t};\n\t\tentry.change = tracker.beginChange();\n\t\treturn entry.change.state;\n\t}\n\n\tasync #acquireForkCopy(\n\t\tentry: DocumentEntry,\n\t\tdefinition: AnyDocDefinition,\n\t\ttarget: Extract<DocumentTarget, { readonly kind: \"fork-copy\" }>,\n\t): Promise<Draft<JsonObject>> {\n\t\tconst stored = await this.#host.storage.document(target.source.id, target.source.at, this.#context);\n\t\tthis.#assertOpen();\n\t\tif (stored === undefined) {\n\t\t\tthrow new Error(`Fork source document ${target.source.id} cannot be read`);\n\t\t}\n\t\tif (\n\t\t\tstored.record.scope.kind !== \"conversation\" ||\n\t\t\tstored.record.kind !== target.record.kind ||\n\t\t\tstored.record.key !== target.record.key ||\n\t\t\tstored.record.history !== target.record.history ||\n\t\t\tstored.record.fork !== target.record.fork\n\t\t) {\n\t\t\tthrow new Error(`Fork source document ${target.source.id} does not match the copied record`);\n\t\t}\n\t\tconst value = materializeDocumentValue(definition, target.record, stored.version, stored.value);\n\t\tconst tracker = track(value);\n\t\tentry.definition = definition;\n\t\tentry.target = { kind: \"created\", record: target.record, version: definition.version, tracker };\n\t\tentry.change = tracker.beginChange();\n\t\treturn entry.change.state;\n\t}\n\n\tasync #findRetirement(entry: DocumentEntry): Promise<void> {\n\t\tconst record =\n\t\t\tthis.#host.cached(entry.addressId)?.record ??\n\t\t\t(await this.#host.storage.findDocument(entry.address, \"current\", this.#context));\n\t\tthis.#assertOpen();\n\t\tif (record === undefined) return;\n\t\tcheckRecordScope(entry.definition!, record);\n\t\tentry.target = { kind: \"retire-only\", record };\n\t}\n\n\t// ─── Settlement ─────────────────────────────────────────────────────────\n\n\t/** Seal after callback failure: abort every change and observe every pending operation. */\n\tasync settleFailure(): Promise<void> {\n\t\tthis.#sealed = true;\n\t\tthis.#abortChanges();\n\t\tawait Promise.allSettled(this.#pendingOperations);\n\t}\n\n\t/**\n\t * Seal after callback success, prepare every open change, and assemble the atomic batch.\n\t * Any failure aborts every change before Storage admission.\n\t */\n\tasync settleSuccess(): Promise<readonly StorageWrite[]> {\n\t\tthis.#sealed = true;\n\t\tif (this.#pendingOperations.size > 0) {\n\t\t\tthis.#abortChanges();\n\t\t\tawait Promise.allSettled(this.#pendingOperations);\n\t\t\tthrow new Error(\"Session commit callback settled before its pending Tx operations\");\n\t\t}\n\t\ttry {\n\t\t\t// Synchronously prepare every open change; this revokes every draft.\n\t\t\tfor (const document of this.#documents) {\n\t\t\t\tif (document.change !== undefined) document.prepared = document.change.prepare();\n\t\t\t}\n\t\t\treturn await this.#assemble();\n\t\t} catch (error) {\n\t\t\tthis.#abortChanges();\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/** Abort every prepared change after Storage failure or when no write is required. */\n\tdiscard(): void {\n\t\tthis.#abortChanges();\n\t}\n\n\t/** Adopt every prepared change by pointer swap after Storage success and describe the publication. */\n\tadopt(seq: Seq): DocumentCommitChange[] {\n\t\tconst publications: DocumentCommitChange[] = [];\n\t\tfor (const plan of this.#plans) {\n\t\t\tconst committed = \"createdAt\" in plan.record;\n\t\t\tlet record: DocumentRecord = committed ? (plan.record as DocumentRecord) : { ...plan.record, createdAt: seq };\n\t\t\tif (plan.retire) record = { ...record, retiredAt: seq };\n\t\t\tconst change = plan.change;\n\t\t\tif (change !== undefined) {\n\t\t\t\tconst { tracker, prepared, loaded, version } = change;\n\t\t\t\t// A new incarnation is adopted unless it retires in the same commit; a loaded one only when it changed.\n\t\t\t\tif (loaded === undefined ? !plan.retire : prepared.ops.length > 0) tracker.adopt(prepared);\n\t\t\t\telse prepared.abort();\n\t\t\t\tif (loaded !== undefined) {\n\t\t\t\t\tif (loaded.storedVersion < version) loaded.storedVersion = version;\n\t\t\t\t\tif (plan.content?.type === \"document.change\") {\n\t\t\t\t\t\tif (plan.content.content.kind === \"base\") loaded.deltasSinceBase = 0;\n\t\t\t\t\t\telse loaded.deltasSinceBase++;\n\t\t\t\t\t}\n\t\t\t\t} else if (!plan.retire) {\n\t\t\t\t\tthis.#host.install({\n\t\t\t\t\t\taddressId: plan.addressId,\n\t\t\t\t\t\trecord,\n\t\t\t\t\t\tstoredVersion: version,\n\t\t\t\t\t\tvalueVersion: version,\n\t\t\t\t\t\tdeltasSinceBase: 0,\n\t\t\t\t\t\ttracker,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst conversationId = plan.conversationId;\n\t\t\tif (plan.retire) {\n\t\t\t\tif (committed) this.#host.evict(plan.addressId, record.id);\n\t\t\t\tconst retired = { version: undefined, value: null, ops: EMPTY_OPERATIONS };\n\t\t\t\tpublications.push({ type: \"document\", record, conversationId, ...retired });\n\t\t\t} else if (plan.content?.type === \"document.copy\") {\n\t\t\t\tpublications.push({\n\t\t\t\t\ttype: \"document.copy\",\n\t\t\t\t\trecord,\n\t\t\t\t\tconversationId: conversationId!,\n\t\t\t\t\tsource: plan.content.source,\n\t\t\t\t});\n\t\t\t} else if (change !== undefined && publishes(plan)) {\n\t\t\t\tconst ops = change.loaded === undefined ? EMPTY_OPERATIONS : change.prepared.ops;\n\t\t\t\tpublications.push({\n\t\t\t\t\ttype: \"document\",\n\t\t\t\t\trecord,\n\t\t\t\t\tconversationId,\n\t\t\t\t\tversion: change.version,\n\t\t\t\t\tvalue: change.prepared.value,\n\t\t\t\t\tops,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn publications;\n\t}\n\n\tasync #assemble(): Promise<StorageWrite[]> {\n\t\tconst storage = this.#host.storage;\n\t\tconst plans = this.#plans;\n\t\tfor (const document of this.#documents) {\n\t\t\tconst plan = planDocument(document);\n\t\t\tif (plan !== undefined) plans.push(plan);\n\t\t}\n\t\tthis.#rejectForkSourceWrites(plans);\n\t\tawait this.#validateOwners();\n\t\tfor (const [id, task] of this.#tasksById) {\n\t\t\tif (task.write?.kind !== \"replace\") continue;\n\t\t\tconst committed = await this.#committedTask(id);\n\t\t\tif (committed === undefined) throw new Error(`Task ${id} does not exist`);\n\t\t\tif (committed.state.status === \"terminal\") throw new Error(`Task ${id} is already terminal`);\n\t\t\tif (committed.conversationId !== task.write.record.conversationId) {\n\t\t\t\tthrow new Error(`Task ${id} cannot change conversations`);\n\t\t\t}\n\t\t}\n\n\t\t// Terminal settlement retires every task document, including ones created by this transaction.\n\t\tconst terminalTaskIds = new Set<TaskId>();\n\t\tfor (const task of this.#tasksById.values()) {\n\t\t\tif (task.write?.record.state.status === \"terminal\") terminalTaskIds.add(task.write.record.id);\n\t\t}\n\t\tif (terminalTaskIds.size > 0) {\n\t\t\tconst retiring = new Set<DocumentId>();\n\t\t\tfor (const plan of plans) {\n\t\t\t\tconst scope = plan.record.scope;\n\t\t\t\tif (scope.kind !== \"task\" || !terminalTaskIds.has(scope.taskId)) continue;\n\t\t\t\tplan.retire = true;\n\t\t\t\tretiring.add(plan.record.id);\n\t\t\t}\n\t\t\tfor (const taskId of terminalTaskIds) {\n\t\t\t\tif (this.#tasksById.get(taskId)?.write?.kind === \"create\") continue;\n\t\t\t\tlet cursor: Cursor | undefined;\n\t\t\t\tdo {\n\t\t\t\t\tconst page = await storage.scanDocuments(\n\t\t\t\t\t\t{ scope: { kind: \"task\", taskId }, at: \"current\" },\n\t\t\t\t\t\tINTERNAL_SCAN_PAGE_SIZE,\n\t\t\t\t\t\tcursor,\n\t\t\t\t\t\tthis.#context,\n\t\t\t\t\t);\n\t\t\t\t\tfor (const record of page.items) {\n\t\t\t\t\t\tif (retiring.has(record.id)) continue;\n\t\t\t\t\t\tplans.push({ addressId: addressId(record), record, retire: true });\n\t\t\t\t\t\tretiring.add(record.id);\n\t\t\t\t\t}\n\t\t\t\t\tcursor = page.next;\n\t\t\t\t} while (cursor !== undefined);\n\t\t\t}\n\t\t}\n\n\t\t// Resolve publication ownership before Storage admission so adoption remains synchronous.\n\t\tfor (const plan of plans) {\n\t\t\tif (!publishes(plan)) continue;\n\t\t\tconst scope = plan.record.scope;\n\t\t\tif (scope.kind === \"conversation\") plan.conversationId = scope.conversationId;\n\t\t\tif (scope.kind !== \"task\") continue;\n\t\t\tconst task = this.#taskEntry(scope.taskId);\n\t\t\tif (task.publicationConversationId === undefined) {\n\t\t\t\tconst current = await this.#currentTask(scope.taskId);\n\t\t\t\tif (current !== undefined) task.publicationConversationId = current.conversationId;\n\t\t\t}\n\t\t\tplan.conversationId = task.publicationConversationId;\n\t\t}\n\n\t\tfor (const { id, change } of this.#submissionChanges) {\n\t\t\tconst current = this.#submissions.get(id) ?? (await storage.submission(id, this.#context));\n\t\t\tif (current === undefined) throw new Error(`Submission ${id} does not exist`);\n\t\t\tconst next = applySubmissionChange(current, change);\n\t\t\tif (next !== current) this.#submissions.set(id, next);\n\t\t}\n\n\t\tconst writes = this.#writes;\n\t\tfor (const value of this.#submissions.values()) writes.push({ type: \"submission\", value });\n\t\tfor (const task of this.#tasksById.values()) {\n\t\t\tif (task.write !== undefined) writes.push({ type: \"task\", value: task.write.record });\n\t\t}\n\t\tfor (const plan of plans) {\n\t\t\tconst change = plan.change;\n\t\t\t// Checkpoint predicates run last, after every validation.\n\t\t\tif (plan.content?.type === \"document.change\" && plan.content.content.kind === \"delta\" && change?.loaded) {\n\t\t\t\tconst { prepared, version } = change;\n\t\t\t\tconst info = { deltasSinceBase: change.loaded.deltasSinceBase };\n\t\t\t\tif (change.definition?.checkpointWhen?.(prepared.value, prepared.ops, info)) {\n\t\t\t\t\tplan.content = { ...plan.content, content: { version, kind: \"base\", value: prepared.value } };\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (plan.content !== undefined) writes.push(plan.content);\n\t\t\tif (plan.retire) writes.push({ type: \"document.retire\", id: plan.record.id });\n\t\t}\n\t\treturn writes;\n\t}\n\n\t// ─── Helpers ────────────────────────────────────────────────────────────\n\n\t/**\n\t * New owned work needs a live owner, judged on the owner's final candidate: not `completing`, terminal, or\n\t * abort-marked. A task therefore cannot create owned work in the commit that finishes it (spec §5.5).\n\t */\n\tasync #validateOwners(): Promise<void> {\n\t\tconst owners: { readonly what: string; readonly taskId: TaskId }[] = [];\n\t\tfor (const write of this.#writes) {\n\t\t\tif (write.type !== \"conversation\" || write.value.owner === undefined) continue;\n\t\t\towners.push({ what: \"Conversation owner task\", taskId: write.value.owner.taskId });\n\t\t}\n\t\tfor (const task of this.#tasksById.values()) {\n\t\t\tconst record = task.write?.kind === \"create\" ? task.write.record : undefined;\n\t\t\tif (record?.owner !== undefined) owners.push({ what: \"Task owner\", taskId: record.owner });\n\t\t}\n\t\tfor (const { what, taskId } of owners) {\n\t\t\tconst task = await this.#currentTask(taskId);\n\t\t\tif (task === undefined) throw new Error(`${what} ${taskId} does not exist`);\n\t\t\tif (task.state.status === \"terminal\" || task.state.status === \"completing\") {\n\t\t\t\tthrow new Error(`${what} ${taskId} is ${task.state.status}`);\n\t\t\t}\n\t\t\tif (task.abortRequested) throw new Error(`${what} ${taskId} is abort-marked`);\n\t\t}\n\t}\n\n\t#rejectForkSourceWrites(plans: readonly DocumentPlan[]): void {\n\t\tfor (const plan of plans) {\n\t\t\tif (plan.content === undefined && !plan.retire) continue;\n\t\t\tconst record = plan.record;\n\t\t\tif (this.#forkSourceDocumentIds.has(record.id)) {\n\t\t\t\tthrow new Error(`Cannot change fork source document ${record.id} in the fork transaction`);\n\t\t\t}\n\t\t\tconst scope = plan.record.scope;\n\t\t\tif (\n\t\t\t\tscope.kind === \"conversation\" &&\n\t\t\t\tthis.#forkSourceConversationIds.has(scope.conversationId) &&\n\t\t\t\trecord.scope.kind === \"conversation\" &&\n\t\t\t\trecord.fork === \"current\"\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Cannot fork conversation ${scope.conversationId} while changing its current-policy documents`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t#abortChanges(): void {\n\t\tfor (const document of this.#documents) document.change?.abort();\n\t}\n\n\t#assertOpen(): void {\n\t\tif (this.#sealed) throw new Error(\"Transaction has settled\");\n\t}\n\n\t#assertTaskDocumentsOpen(resolved: ResolvedAddress): void {\n\t\tconst scope = resolved.address.scope;\n\t\tif (scope.kind === \"task\" && this.#tasksById.get(scope.taskId)?.write?.record.state.status === \"terminal\") {\n\t\t\tthrow new Error(`Task ${scope.taskId} is terminal`);\n\t\t}\n\t}\n\n\t/** Register an operation so callback settlement can reject and drain it. */\n\t#track<T>(operation: Promise<T>): Promise<T> {\n\t\tthis.#pendingOperations.add(operation);\n\t\tconst settle = (): void => {\n\t\t\tthis.#pendingOperations.delete(operation);\n\t\t};\n\t\toperation.then(settle, settle);\n\t\treturn operation;\n\t}\n\n\t#read<T>(method: string, read: () => Promise<T>): Promise<T> {\n\t\ttry {\n\t\t\tthis.#assertOpen();\n\t\t\tif (this.#hasTableWrite) throw new ReadAfterWrite(method);\n\t\t\treturn this.#track(read());\n\t\t} catch (error) {\n\t\t\treturn Promise.reject(error);\n\t\t}\n\t}\n\n\t#write<T>(write: () => Promise<T>): Promise<T> {\n\t\ttry {\n\t\t\tthis.#assertOpen();\n\t\t\tthis.#hasTableWrite = true;\n\t\t\treturn this.#track(write());\n\t\t} catch (error) {\n\t\t\treturn Promise.reject(error);\n\t\t}\n\t}\n\n\tasync #requireConversation(id: ConversationId): Promise<void> {\n\t\tif (this.#createdConversationIds.has(id)) return;\n\t\tif ((await this.#host.storage.conversation(id, this.#context)) === undefined) {\n\t\t\tthrow new Error(`Conversation ${id} does not exist`);\n\t\t}\n\t}\n\n\t/**\n\t * Lifecycle times: `startedAt` on the first change to `running`, `endedAt` on the change to `terminal`. Once set,\n\t * they carry over from the replaced record; records written before they existed lack them.\n\t */\n\t#stampTimes(value: AnyTaskRecord, candidate: AnyTaskRecord | undefined): AnyTaskRecord {\n\t\tconst status = value.state.status;\n\t\tconst now = (stamps: boolean) => (stamps ? this.#host.now() : undefined);\n\t\tconst startedAt = candidate?.startedAt ?? value.startedAt ?? now(status === \"running\");\n\t\tconst endedAt = candidate?.endedAt ?? value.endedAt ?? now(status === \"terminal\");\n\t\tif (startedAt === value.startedAt && endedAt === value.endedAt) return value;\n\t\treturn {\n\t\t\t...value,\n\t\t\t...(startedAt === undefined ? {} : { startedAt }),\n\t\t\t...(endedAt === undefined ? {} : { endedAt }),\n\t\t};\n\t}\n\n\t#taskEntry(id: TaskId): TransactionTask {\n\t\tlet task = this.#tasksById.get(id);\n\t\tif (task === undefined) {\n\t\t\ttask = {};\n\t\t\tthis.#tasksById.set(id, task);\n\t\t}\n\t\treturn task;\n\t}\n\n\t/** Latest candidate task record, falling back to committed state; not a caller table read. */\n\tasync #currentTask(id: TaskId): Promise<AnyTaskRecord | undefined> {\n\t\treturn this.#tasksById.get(id)?.write?.record ?? (await this.#committedTask(id));\n\t}\n\n\t#committedTask(id: TaskId): Promise<AnyTaskRecord | undefined> {\n\t\tconst task = this.#taskEntry(id);\n\t\ttask.committedRead ??= this.#host.storage.task(id, this.#context);\n\t\treturn task.committedRead;\n\t}\n}\n\n/** Plan of one staged document: its record, content write, and prepared change. Retirement is decided later. */\nfunction planDocument(document: DocumentEntry): DocumentPlan | undefined {\n\tconst target = document.target;\n\tif (target === undefined) return undefined;\n\tconst plan = { addressId: document.addressId, retire: document.retireOnCommit };\n\tswitch (target.kind) {\n\t\tcase \"created\": {\n\t\t\tconst prepared = document.prepared!;\n\t\t\tconst { record, version, tracker } = target;\n\t\t\tconst content = { version, kind: \"base\", value: prepared.value } as const;\n\t\t\treturn {\n\t\t\t\t...plan,\n\t\t\t\trecord,\n\t\t\t\tcontent: { type: \"document.create\", record, content },\n\t\t\t\tchange: { tracker, prepared, version },\n\t\t\t};\n\t\t}\n\t\tcase \"fork-copy\":\n\t\t\treturn {\n\t\t\t\t...plan,\n\t\t\t\trecord: target.record,\n\t\t\t\tcontent: { type: \"document.copy\", record: target.record, source: target.source },\n\t\t\t};\n\t\tcase \"retire-only\":\n\t\t\treturn { ...plan, record: target.record };\n\t\tcase \"loaded\": {\n\t\t\tconst loaded = target.document;\n\t\t\tconst definition = document.definition!;\n\t\t\tconst prepared = document.prepared!;\n\t\t\tconst version = definition.version;\n\t\t\tconst id = loaded.record.id;\n\t\t\t// A version change stores a base even without operations; otherwise only a change stores a delta.\n\t\t\tconst content =\n\t\t\t\tloaded.storedVersion < version\n\t\t\t\t\t? ({ type: \"document.change\", id, content: { version, kind: \"base\", value: prepared.value } } as const)\n\t\t\t\t\t: prepared.ops.length > 0\n\t\t\t\t\t\t? ({ type: \"document.change\", id, content: { version, kind: \"delta\", ops: prepared.ops } } as const)\n\t\t\t\t\t\t: undefined;\n\t\t\tconst change = {\n\t\t\t\ttracker: loaded.tracker,\n\t\t\t\tprepared,\n\t\t\t\tversion,\n\t\t\t\tloaded,\n\t\t\t\tdefinition,\n\t\t\t};\n\t\t\treturn { ...plan, record: loaded.record, change, ...(content === undefined ? {} : { content }) };\n\t\t}\n\t}\n}\n\n/**\n * Whether adoption publishes the plan: every creation, copy, and retirement, and a loaded incarnation that writes\n * content, which includes a migration-only base so observers of the older shape receive the new value.\n */\nfunction publishes(plan: DocumentPlan): boolean {\n\treturn plan.retire || plan.change?.loaded === undefined || plan.content !== undefined;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export { JsonlCorruptionError, JsonlStorage, type JsonlStorageOptions, JsonlStoragePoisonedError, } from "./storage.ts";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/jsonl/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,oBAAoB,EACpB,YAAY,EACZ,KAAK,mBAAmB,EACxB,yBAAyB,GACzB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { JsonlCorruptionError, JsonlStorage, JsonlStoragePoisonedError, } from "./storage.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/jsonl/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,oBAAoB,EACpB,YAAY,EAEZ,yBAAyB,GACzB,MAAM,cAAc,CAAC","sourcesContent":["export {\n\tJsonlCorruptionError,\n\tJsonlStorage,\n\ttype JsonlStorageOptions,\n\tJsonlStoragePoisonedError,\n} from \"./storage.ts\";\n"]}
@@ -0,0 +1,6 @@
1
+ import type { Context } from "@ny4n/chord";
2
+ import { JsonlStorage, type JsonlStorageOptions } from "./storage.ts";
3
+ /** Open or create a JSONL storage directory using the local Node filesystem. */
4
+ export declare function openNodeJsonlStorage(directory: string, context: Context, options?: JsonlStorageOptions): Promise<JsonlStorage>;
5
+ export { JsonlStorage, type JsonlStorageOptions } from "./storage.ts";
6
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/storage/jsonl/node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEtE,gFAAgF;AAChF,wBAAsB,oBAAoB,CACzC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,mBAAwB,GAC/B,OAAO,CAAC,YAAY,CAAC,CAEvB;AAED,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { NodeExecutionEnv } from "../../env/node.js";
2
+ import { JsonlStorage } from "./storage.js";
3
+ /** Open or create a JSONL storage directory using the local Node filesystem. */
4
+ export async function openNodeJsonlStorage(directory, context, options = {}) {
5
+ return JsonlStorage.open(directory, new NodeExecutionEnv({ cwd: process.cwd() }), context, options);
6
+ }
7
+ export { JsonlStorage } from "./storage.js";
8
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/storage/jsonl/node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,YAAY,EAA4B,MAAM,cAAc,CAAC;AAEtE,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,SAAiB,EACjB,OAAgB,EAChB,OAAO,GAAwB,EAAE;IAEjC,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,gBAAgB,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACrG,CAAC;AAED,OAAO,EAAE,YAAY,EAA4B,MAAM,cAAc,CAAC","sourcesContent":["import type { Context } from \"@ny4n/chord\";\nimport { NodeExecutionEnv } from \"../../env/node.ts\";\nimport { JsonlStorage, type JsonlStorageOptions } from \"./storage.ts\";\n\n/** Open or create a JSONL storage directory using the local Node filesystem. */\nexport async function openNodeJsonlStorage(\n\tdirectory: string,\n\tcontext: Context,\n\toptions: JsonlStorageOptions = {},\n): Promise<JsonlStorage> {\n\treturn JsonlStorage.open(directory, new NodeExecutionEnv({ cwd: process.cwd() }), context, options);\n}\n\nexport { JsonlStorage, type JsonlStorageOptions } from \"./storage.ts\";\n"]}
@@ -0,0 +1,143 @@
1
+ import type { Context, JsonValue } from "@ny4n/chord";
2
+ import type { FileSystem } from "../../env/index.ts";
3
+ import type { ConversationId, ConversationQuery, Cursor, DocumentAddress, DocumentId, DocumentPoint, DocumentQuery, EntryId, EntryQuery, Id, Seq, Storage, StorageWrite, SubmissionId, SubmissionQuery, TaskId, TaskQuery } from "../../types.ts";
4
+ export type JsonlStorageOptions = {
5
+ /** Flush every affected sidecar before appending the main marker. Defaults to false. */
6
+ readonly fsync?: boolean;
7
+ };
8
+ export declare class JsonlCorruptionError extends Error {
9
+ constructor(message: string, cause?: Error);
10
+ }
11
+ export declare class JsonlStoragePoisonedError extends Error {
12
+ constructor(cause: Error);
13
+ }
14
+ /** Portable JSONL implementation of the storage contract. */
15
+ export declare class JsonlStorage implements Storage {
16
+ private readonly fs;
17
+ private readonly directory;
18
+ private readonly mainPath;
19
+ private readonly fsync;
20
+ private readonly memory;
21
+ private readonly currentOnlyDocuments;
22
+ private readonly liveTaskSidecars;
23
+ private closed;
24
+ private poisonError;
25
+ private constructor();
26
+ /** Open or create a JSONL storage directory using the supplied filesystem. */
27
+ static open(directory: string, fs: FileSystem, context: Context, options?: JsonlStorageOptions): Promise<JsonlStorage>;
28
+ commit(writes: readonly StorageWrite[], context: Context): Promise<Seq>;
29
+ mintId<I extends Id<string>>(): Promise<I>;
30
+ conversation(id: ConversationId, context: Context): Promise<import("../../types.ts").ConversationRecord | undefined>;
31
+ scanConversations(query: ConversationQuery, limit: number, cursor: Cursor | undefined, context: Context): Promise<import("../../types.ts").Page<import("../../types.ts").ConversationRecord, Readonly<Record<string, JsonValue>>>>;
32
+ entry(id: EntryId, context: Context): ReturnType<Storage["entry"]>;
33
+ entry(conversationId: ConversationId, id: EntryId, context: Context): ReturnType<Storage["entry"]>;
34
+ findLatestHeadMarker(conversationId: ConversationId, atOrBeforeEntryId: EntryId | undefined, context: Context): Promise<(import("../../types.ts").EntryRecord & {
35
+ readonly head: EntryId;
36
+ }) | undefined>;
37
+ scanEntries(query: EntryQuery, limit: number, cursor: Cursor | undefined, context: Context): Promise<import("../../types.ts").Page<import("../../types.ts").EntryRecord, Readonly<Record<string, JsonValue>>>>;
38
+ task(id: TaskId, context: Context): Promise<({
39
+ readonly id: TaskId<JsonValue>;
40
+ readonly conversationId: ConversationId;
41
+ readonly kind: string;
42
+ readonly version: number;
43
+ readonly input: JsonValue;
44
+ readonly owner?: TaskId;
45
+ readonly background: boolean;
46
+ readonly abortRequested: boolean;
47
+ readonly abortReason?: "restart";
48
+ readonly abandonOnRestart?: true;
49
+ readonly startedAt?: number;
50
+ readonly endedAt?: number;
51
+ } & ({
52
+ readonly state: {
53
+ readonly status: "pending";
54
+ readonly checkpoint: JsonValue;
55
+ readonly outcome?: never;
56
+ } | {
57
+ readonly status: "running";
58
+ readonly checkpoint: JsonValue;
59
+ readonly outcome?: never;
60
+ } | {
61
+ readonly status: "waiting";
62
+ readonly checkpoint: JsonValue;
63
+ readonly on: readonly TaskId[];
64
+ readonly policy: import("../../types.ts").JoinPolicy;
65
+ readonly outcome?: never;
66
+ };
67
+ readonly memos?: Readonly<Record<string, JsonValue>>;
68
+ } | {
69
+ readonly state: {
70
+ readonly status: "completing";
71
+ readonly checkpoint?: never;
72
+ readonly outcome: import("../../types.ts").TaskOutcome<JsonValue>;
73
+ } | {
74
+ readonly status: "terminal";
75
+ readonly checkpoint?: never;
76
+ readonly outcome: import("../../types.ts").TaskOutcome<JsonValue>;
77
+ };
78
+ readonly memos?: never;
79
+ })) | undefined>;
80
+ scanTasks(query: TaskQuery, limit: number, cursor: Cursor | undefined, context: Context): Promise<import("../../types.ts").Page<{
81
+ readonly id: TaskId<JsonValue>;
82
+ readonly conversationId: ConversationId;
83
+ readonly kind: string;
84
+ readonly version: number;
85
+ readonly input: JsonValue;
86
+ readonly owner?: TaskId;
87
+ readonly background: boolean;
88
+ readonly abortRequested: boolean;
89
+ readonly abortReason?: "restart";
90
+ readonly abandonOnRestart?: true;
91
+ readonly startedAt?: number;
92
+ readonly endedAt?: number;
93
+ } & ({
94
+ readonly state: {
95
+ readonly status: "pending";
96
+ readonly checkpoint: JsonValue;
97
+ readonly outcome?: never;
98
+ } | {
99
+ readonly status: "running";
100
+ readonly checkpoint: JsonValue;
101
+ readonly outcome?: never;
102
+ } | {
103
+ readonly status: "waiting";
104
+ readonly checkpoint: JsonValue;
105
+ readonly on: readonly TaskId[];
106
+ readonly policy: import("../../types.ts").JoinPolicy;
107
+ readonly outcome?: never;
108
+ };
109
+ readonly memos?: Readonly<Record<string, JsonValue>>;
110
+ } | {
111
+ readonly state: {
112
+ readonly status: "completing";
113
+ readonly checkpoint?: never;
114
+ readonly outcome: import("../../types.ts").TaskOutcome<JsonValue>;
115
+ } | {
116
+ readonly status: "terminal";
117
+ readonly checkpoint?: never;
118
+ readonly outcome: import("../../types.ts").TaskOutcome<JsonValue>;
119
+ };
120
+ readonly memos?: never;
121
+ }), Readonly<Record<string, JsonValue>>>>;
122
+ submission(id: SubmissionId, context: Context): Promise<import("../../types.ts").SubmissionRecord | undefined>;
123
+ scanSubmissions(query: SubmissionQuery, limit: number, cursor: Cursor | undefined, context: Context): Promise<import("../../types.ts").Page<import("../../types.ts").SubmissionRecord, Readonly<Record<string, JsonValue>>>>;
124
+ submissionByRequest(conversationId: ConversationId, requestId: string, context: Context): Promise<import("../../types.ts").SubmissionRecord | undefined>;
125
+ findDocument(address: DocumentAddress, at: DocumentPoint, context: Context): Promise<import("../../types.ts").DocumentRecord | undefined>;
126
+ document(id: DocumentId, at: DocumentPoint, context: Context): Promise<import("../../types.ts").StoredDocument | undefined>;
127
+ scanDocuments(query: DocumentQuery, limit: number, cursor: Cursor | undefined, context: Context): Promise<import("../../types.ts").Page<import("../../types.ts").DocumentRecord, Readonly<Record<string, JsonValue>>>>;
128
+ close(context: Context): Promise<void>;
129
+ private encodeCommit;
130
+ private planReclamations;
131
+ private adoptSidecarState;
132
+ /** The marker already published this state, so reclamation is retryable best-effort maintenance. */
133
+ private reclaimSidecars;
134
+ private replaceSidecar;
135
+ private recover;
136
+ private static confirmRecord;
137
+ private static readLines;
138
+ private resolveFile;
139
+ private get store();
140
+ private poison;
141
+ private assertUsable;
142
+ }
143
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/storage/jsonl/storage.ts"],"names":[],"mappings":"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"}