@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.
- package/LICENSE +21 -0
- package/README.md +711 -2
- package/dist/documents.d.ts +66 -0
- package/dist/documents.d.ts.map +1 -0
- package/dist/documents.js +98 -0
- package/dist/documents.js.map +1 -0
- package/dist/entries.d.ts +31 -0
- package/dist/entries.d.ts.map +1 -0
- package/dist/entries.js +31 -0
- package/dist/entries.js.map +1 -0
- package/dist/env/decode.d.ts +16 -0
- package/dist/env/decode.d.ts.map +1 -0
- package/dist/env/decode.js +28 -0
- package/dist/env/decode.js.map +1 -0
- package/dist/env/index.d.ts +263 -0
- package/dist/env/index.d.ts.map +1 -0
- package/dist/env/index.js +49 -0
- package/dist/env/index.js.map +1 -0
- package/dist/env/line-scan.d.ts +13 -0
- package/dist/env/line-scan.d.ts.map +1 -0
- package/dist/env/line-scan.js +147 -0
- package/dist/env/line-scan.js.map +1 -0
- package/dist/env/node-watch.d.ts +29 -0
- package/dist/env/node-watch.d.ts.map +1 -0
- package/dist/env/node-watch.js +485 -0
- package/dist/env/node-watch.js.map +1 -0
- package/dist/env/node.d.ts +56 -0
- package/dist/env/node.d.ts.map +1 -0
- package/dist/env/node.js +1166 -0
- package/dist/env/node.js.map +1 -0
- package/dist/errors.d.ts +32 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +53 -0
- package/dist/errors.js.map +1 -0
- package/dist/harness/agent.d.ts +33 -0
- package/dist/harness/agent.d.ts.map +1 -0
- package/dist/harness/agent.js +235 -0
- package/dist/harness/agent.js.map +1 -0
- package/dist/harness/assistant.d.ts +15 -0
- package/dist/harness/assistant.d.ts.map +1 -0
- package/dist/harness/assistant.js +23 -0
- package/dist/harness/assistant.js.map +1 -0
- package/dist/harness/compaction.d.ts +56 -0
- package/dist/harness/compaction.d.ts.map +1 -0
- package/dist/harness/compaction.js +384 -0
- package/dist/harness/compaction.js.map +1 -0
- package/dist/harness/context.d.ts +63 -0
- package/dist/harness/context.d.ts.map +1 -0
- package/dist/harness/context.js +221 -0
- package/dist/harness/context.js.map +1 -0
- package/dist/harness/define.d.ts +18 -0
- package/dist/harness/define.d.ts.map +1 -0
- package/dist/harness/define.js +25 -0
- package/dist/harness/define.js.map +1 -0
- package/dist/harness/events.d.ts +180 -0
- package/dist/harness/events.d.ts.map +1 -0
- package/dist/harness/events.js +370 -0
- package/dist/harness/events.js.map +1 -0
- package/dist/harness/generation.d.ts +54 -0
- package/dist/harness/generation.d.ts.map +1 -0
- package/dist/harness/generation.js +514 -0
- package/dist/harness/generation.js.map +1 -0
- package/dist/harness/harness.d.ts +17 -0
- package/dist/harness/harness.d.ts.map +1 -0
- package/dist/harness/harness.js +332 -0
- package/dist/harness/harness.js.map +1 -0
- package/dist/harness/inbox.d.ts +59 -0
- package/dist/harness/inbox.d.ts.map +1 -0
- package/dist/harness/inbox.js +97 -0
- package/dist/harness/inbox.js.map +1 -0
- package/dist/harness/json.d.ts +10 -0
- package/dist/harness/json.d.ts.map +1 -0
- package/dist/harness/json.js +33 -0
- package/dist/harness/json.js.map +1 -0
- package/dist/harness/live.d.ts +142 -0
- package/dist/harness/live.d.ts.map +1 -0
- package/dist/harness/live.js +149 -0
- package/dist/harness/live.js.map +1 -0
- package/dist/harness/output.d.ts +69 -0
- package/dist/harness/output.d.ts.map +1 -0
- package/dist/harness/output.js +318 -0
- package/dist/harness/output.js.map +1 -0
- package/dist/harness/prompt.d.ts +27 -0
- package/dist/harness/prompt.d.ts.map +1 -0
- package/dist/harness/prompt.js +131 -0
- package/dist/harness/prompt.js.map +1 -0
- package/dist/harness/provider.d.ts +14 -0
- package/dist/harness/provider.d.ts.map +1 -0
- package/dist/harness/provider.js +30 -0
- package/dist/harness/provider.js.map +1 -0
- package/dist/harness/registry.d.ts +6 -0
- package/dist/harness/registry.d.ts.map +1 -0
- package/dist/harness/registry.js +101 -0
- package/dist/harness/registry.js.map +1 -0
- package/dist/harness/run.d.ts +17 -0
- package/dist/harness/run.d.ts.map +1 -0
- package/dist/harness/run.js +26 -0
- package/dist/harness/run.js.map +1 -0
- package/dist/harness/scheduler.d.ts +106 -0
- package/dist/harness/scheduler.d.ts.map +1 -0
- package/dist/harness/scheduler.js +1743 -0
- package/dist/harness/scheduler.js.map +1 -0
- package/dist/harness/submissions.d.ts +29 -0
- package/dist/harness/submissions.d.ts.map +1 -0
- package/dist/harness/submissions.js +175 -0
- package/dist/harness/submissions.js.map +1 -0
- package/dist/harness/task-graph.d.ts +49 -0
- package/dist/harness/task-graph.d.ts.map +1 -0
- package/dist/harness/task-graph.js +168 -0
- package/dist/harness/task-graph.js.map +1 -0
- package/dist/harness/tool.d.ts +76 -0
- package/dist/harness/tool.d.ts.map +1 -0
- package/dist/harness/tool.js +736 -0
- package/dist/harness/tool.js.map +1 -0
- package/dist/harness/types.d.ts +713 -0
- package/dist/harness/types.d.ts.map +1 -0
- package/dist/harness/types.js +2 -0
- package/dist/harness/types.js.map +1 -0
- package/dist/harness/usage.d.ts +18 -0
- package/dist/harness/usage.d.ts.map +1 -0
- package/dist/harness/usage.js +57 -0
- package/dist/harness/usage.js.map +1 -0
- package/dist/harness/util.d.ts +19 -0
- package/dist/harness/util.d.ts.map +1 -0
- package/dist/harness/util.js +58 -0
- package/dist/harness/util.js.map +1 -0
- package/dist/harness/view.d.ts +47 -0
- package/dist/harness/view.d.ts.map +1 -0
- package/dist/harness/view.js +206 -0
- package/dist/harness/view.js.map +1 -0
- package/dist/ids.d.ts +6 -0
- package/dist/ids.d.ts.map +1 -0
- package/dist/ids.js +9 -0
- package/dist/ids.js.map +1 -0
- package/dist/images/cloudflare.d.ts +4 -0
- package/dist/images/cloudflare.d.ts.map +1 -0
- package/dist/images/cloudflare.js +9 -0
- package/dist/images/cloudflare.js.map +1 -0
- package/dist/images/exif.d.ts +3 -0
- package/dist/images/exif.d.ts.map +1 -0
- package/dist/images/exif.js +71 -0
- package/dist/images/exif.js.map +1 -0
- package/dist/images/index.d.ts +18 -0
- package/dist/images/index.d.ts.map +1 -0
- package/dist/images/index.js +125 -0
- package/dist/images/index.js.map +1 -0
- package/dist/images/node-worker.d.ts +17 -0
- package/dist/images/node-worker.d.ts.map +1 -0
- package/dist/images/node-worker.js +16 -0
- package/dist/images/node-worker.js.map +1 -0
- package/dist/images/node.d.ts +21 -0
- package/dist/images/node.d.ts.map +1 -0
- package/dist/images/node.js +121 -0
- package/dist/images/node.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/session/forks.d.ts +10 -0
- package/dist/session/forks.d.ts.map +1 -0
- package/dist/session/forks.js +42 -0
- package/dist/session/forks.js.map +1 -0
- package/dist/session/observation.d.ts +42 -0
- package/dist/session/observation.d.ts.map +1 -0
- package/dist/session/observation.js +281 -0
- package/dist/session/observation.js.map +1 -0
- package/dist/session/session.d.ts +133 -0
- package/dist/session/session.d.ts.map +1 -0
- package/dist/session/session.js +811 -0
- package/dist/session/session.js.map +1 -0
- package/dist/session/transaction.d.ts +119 -0
- package/dist/session/transaction.d.ts.map +1 -0
- package/dist/session/transaction.js +795 -0
- package/dist/session/transaction.js.map +1 -0
- package/dist/storage/jsonl/index.d.ts +2 -0
- package/dist/storage/jsonl/index.d.ts.map +1 -0
- package/dist/storage/jsonl/index.js +2 -0
- package/dist/storage/jsonl/index.js.map +1 -0
- package/dist/storage/jsonl/node.d.ts +6 -0
- package/dist/storage/jsonl/node.d.ts.map +1 -0
- package/dist/storage/jsonl/node.js +8 -0
- package/dist/storage/jsonl/node.js.map +1 -0
- package/dist/storage/jsonl/storage.d.ts +143 -0
- package/dist/storage/jsonl/storage.d.ts.map +1 -0
- package/dist/storage/jsonl/storage.js +682 -0
- package/dist/storage/jsonl/storage.js.map +1 -0
- package/dist/storage/memory.d.ts +62 -0
- package/dist/storage/memory.d.ts.map +1 -0
- package/dist/storage/memory.js +733 -0
- package/dist/storage/memory.js.map +1 -0
- package/dist/storage/scan.d.ts +18 -0
- package/dist/storage/scan.d.ts.map +1 -0
- package/dist/storage/scan.js +29 -0
- package/dist/storage/scan.js.map +1 -0
- package/dist/storage/sqlite/cloudflare.d.ts +46 -0
- package/dist/storage/sqlite/cloudflare.d.ts.map +1 -0
- package/dist/storage/sqlite/cloudflare.js +106 -0
- package/dist/storage/sqlite/cloudflare.js.map +1 -0
- package/dist/storage/sqlite/database.d.ts +37 -0
- package/dist/storage/sqlite/database.d.ts.map +1 -0
- package/dist/storage/sqlite/database.js +2 -0
- package/dist/storage/sqlite/database.js.map +1 -0
- package/dist/storage/sqlite/index.d.ts +4 -0
- package/dist/storage/sqlite/index.d.ts.map +1 -0
- package/dist/storage/sqlite/index.js +3 -0
- package/dist/storage/sqlite/index.js.map +1 -0
- package/dist/storage/sqlite/migrations.d.ts +11 -0
- package/dist/storage/sqlite/migrations.d.ts.map +1 -0
- package/dist/storage/sqlite/migrations.js +111 -0
- package/dist/storage/sqlite/migrations.js.map +1 -0
- package/dist/storage/sqlite/node.d.ts +41 -0
- package/dist/storage/sqlite/node.d.ts.map +1 -0
- package/dist/storage/sqlite/node.js +179 -0
- package/dist/storage/sqlite/node.js.map +1 -0
- package/dist/storage/sqlite/storage.d.ts +65 -0
- package/dist/storage/sqlite/storage.d.ts.map +1 -0
- package/dist/storage/sqlite/storage.js +670 -0
- package/dist/storage/sqlite/storage.js.map +1 -0
- package/dist/tasks.d.ts +6 -0
- package/dist/tasks.d.ts.map +1 -0
- package/dist/tasks.js +5 -0
- package/dist/tasks.js.map +1 -0
- package/dist/testing/assertions.d.ts +5 -0
- package/dist/testing/assertions.d.ts.map +1 -0
- package/dist/testing/assertions.js +25 -0
- package/dist/testing/assertions.js.map +1 -0
- package/dist/testing/env-conformance.d.ts +7 -0
- package/dist/testing/env-conformance.d.ts.map +1 -0
- package/dist/testing/env-conformance.js +431 -0
- package/dist/testing/env-conformance.js.map +1 -0
- package/dist/testing/index.d.ts +7 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +6 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/runner.d.ts +12 -0
- package/dist/testing/runner.d.ts.map +1 -0
- package/dist/testing/runner.js +23 -0
- package/dist/testing/runner.js.map +1 -0
- package/dist/testing/storage-benchmark.d.ts +41 -0
- package/dist/testing/storage-benchmark.d.ts.map +1 -0
- package/dist/testing/storage-benchmark.js +350 -0
- package/dist/testing/storage-benchmark.js.map +1 -0
- package/dist/testing/storage-conformance.d.ts +4 -0
- package/dist/testing/storage-conformance.d.ts.map +1 -0
- package/dist/testing/storage-conformance.js +1213 -0
- package/dist/testing/storage-conformance.js.map +1 -0
- package/dist/testing/types.d.ts +37 -0
- package/dist/testing/types.d.ts.map +1 -0
- package/dist/testing/types.js +2 -0
- package/dist/testing/types.js.map +1 -0
- package/dist/tools/bash.d.ts +55 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +138 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/edit-diff.d.ts +89 -0
- package/dist/tools/edit-diff.d.ts.map +1 -0
- package/dist/tools/edit-diff.js +386 -0
- package/dist/tools/edit-diff.js.map +1 -0
- package/dist/tools/edit.d.ts +18 -0
- package/dist/tools/edit.d.ts.map +1 -0
- package/dist/tools/edit.js +117 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/env.d.ts +5 -0
- package/dist/tools/env.d.ts.map +1 -0
- package/dist/tools/env.js +7 -0
- package/dist/tools/env.js.map +1 -0
- package/dist/tools/file-mutation-queue.d.ts +9 -0
- package/dist/tools/file-mutation-queue.d.ts.map +1 -0
- package/dist/tools/file-mutation-queue.js +52 -0
- package/dist/tools/file-mutation-queue.js.map +1 -0
- package/dist/tools/image-processor.d.ts +47 -0
- package/dist/tools/image-processor.d.ts.map +1 -0
- package/dist/tools/image-processor.js +30 -0
- package/dist/tools/image-processor.js.map +1 -0
- package/dist/tools/image.d.ts +20 -0
- package/dist/tools/image.d.ts.map +1 -0
- package/dist/tools/image.js +178 -0
- package/dist/tools/image.js.map +1 -0
- package/dist/tools/index.d.ts +46 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +23 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/path-utils.d.ts +5 -0
- package/dist/tools/path-utils.d.ts.map +1 -0
- package/dist/tools/path-utils.js +26 -0
- package/dist/tools/path-utils.js.map +1 -0
- package/dist/tools/read.d.ts +25 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +235 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/write.d.ts +10 -0
- package/dist/tools/write.d.ts.map +1 -0
- package/dist/tools/write.js +31 -0
- package/dist/tools/write.js.map +1 -0
- package/dist/truncate.d.ts +64 -0
- package/dist/truncate.d.ts.map +1 -0
- package/dist/truncate.js +154 -0
- package/dist/truncate.js.map +1 -0
- package/dist/types.d.ts +932 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +140 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/storage/jsonl/storage.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Context, JsonValue } from \"@ny4n/chord\";\nimport type { FileError, FileSystem } from \"../../env/index.ts\";\nimport { StorageRequestError } from \"../../errors.ts\";\nimport { idFromNumber, seqFromNumber } from \"../../ids.ts\";\nimport type {\n\tConversationId,\n\tConversationQuery,\n\tCursor,\n\tDocumentAddress,\n\tDocumentContent,\n\tDocumentCreate,\n\tDocumentId,\n\tDocumentPoint,\n\tDocumentQuery,\n\tEntryId,\n\tEntryQuery,\n\tId,\n\tSeq,\n\tStorage,\n\tStorageWrite,\n\tSubmissionId,\n\tSubmissionQuery,\n\tTaskId,\n\tTaskQuery,\n\tTaskRecord,\n} from \"../../types.ts\";\nimport { MemoryStorage } from \"../memory.ts\";\n\nconst FORMAT_VERSION = 1;\nconst MAIN_FILE = \"main.jsonl\";\nconst RECLAIM_SUFFIX = \".reclaim\";\nconst textDecoder = new TextDecoder(\"utf-8\", { fatal: true });\n\ntype StoredTask = TaskRecord<JsonValue, JsonValue, JsonValue>;\n\ntype MainOperation =\n\t| Extract<StorageWrite, { readonly type: \"conversation\" | \"entry\" | \"submission\" | \"document.retire\" }>\n\t| { readonly type: \"task\"; readonly value: StoredTask }\n\t| { readonly type: \"task.sidecar\"; readonly id: TaskId; readonly ordinal: number }\n\t| { readonly type: \"document.create\"; readonly record: DocumentCreate; readonly ordinal: number }\n\t| { readonly type: \"document.change\"; readonly id: DocumentId; readonly ordinal: number };\n\ntype MainMarker = {\n\treadonly format: typeof FORMAT_VERSION;\n\treadonly type: \"commit\";\n\treadonly seq: Seq;\n\treadonly writes: readonly MainOperation[];\n};\n\ntype SidecarPayload =\n\t| { readonly type: \"task\"; readonly value: StoredTask }\n\t| { readonly type: \"document\"; readonly id: DocumentId; readonly content: DocumentContent };\n\ntype SidecarRecord = {\n\treadonly format: typeof FORMAT_VERSION;\n\treadonly type: \"record\";\n\treadonly seq: Seq;\n\treadonly ordinal: number;\n\treadonly payload: SidecarPayload;\n};\n\ntype ParsedLine<T> = {\n\treadonly value: T;\n\treadonly start: number;\n};\n\ntype ParsedFile<T> = {\n\treadonly path: string;\n\treadonly lines: readonly ParsedLine<T>[];\n};\n\ntype EncodedCommit = {\n\treadonly marker: string;\n\treadonly sidecars: ReadonlyMap<string, string>;\n};\n\nexport type JsonlStorageOptions = {\n\t/** Flush every affected sidecar before appending the main marker. Defaults to false. */\n\treadonly fsync?: boolean;\n};\n\nexport class JsonlCorruptionError extends Error {\n\tconstructor(message: string, cause?: Error) {\n\t\tsuper(message, cause === undefined ? undefined : { cause });\n\t\tthis.name = \"JsonlCorruptionError\";\n\t}\n}\n\nexport class JsonlStoragePoisonedError extends Error {\n\tconstructor(cause: Error) {\n\t\tsuper(\"JSONL storage is poisoned and must be reopened\", { cause });\n\t\tthis.name = \"JsonlStoragePoisonedError\";\n\t}\n}\n\nconst isObject = (value: unknown): value is Record<string, unknown> =>\n\tvalue !== null && typeof value === \"object\" && !Array.isArray(value);\n\nconst isSafeInteger = (value: unknown): value is number => Number.isSafeInteger(value);\n\nconst sidecarFileName = (kind: \"doc\" | \"task\", id: DocumentId | TaskId): string => `${kind}-${id}.jsonl`;\n\nconst isSidecarFileName = (name: string): boolean => /^(?:doc|task)-(?:0|[1-9]\\d*)\\.jsonl$/.test(name);\n\nconst isReclaimFileName = (name: string): boolean => /^(?:doc|task)-(?:0|[1-9]\\d*)\\.jsonl\\.reclaim$/.test(name);\n\nconst isCurrentOnly = (record: DocumentCreate): boolean =>\n\trecord.scope.kind !== \"conversation\" || record.history === \"latest\";\n\nconst sidecarKey = (file: string, seq: Seq, ordinal: number): string => JSON.stringify([file, seq, ordinal]);\n\nconst jsonLine = (value: MainMarker | SidecarRecord): string => `${JSON.stringify(value)}\\n`;\n\nconst errorFromFile = (action: string, error: FileError): Error =>\n\tnew Error(`JSONL ${action} failed: ${error.message}`, { cause: error });\n\nconst parseJson = (text: string, description: string): unknown => {\n\ttry {\n\t\treturn JSON.parse(text) as unknown;\n\t} catch (error) {\n\t\tthrow new JsonlCorruptionError(`Malformed complete ${description}`, error instanceof Error ? error : undefined);\n\t}\n};\n\nconst validateMainOperation = (value: unknown, description: string): MainOperation => {\n\tif (!isObject(value) || typeof value.type !== \"string\") {\n\t\tthrow new JsonlCorruptionError(`Invalid write in ${description}`);\n\t}\n\tswitch (value.type) {\n\t\tcase \"conversation\":\n\t\tcase \"entry\":\n\t\tcase \"submission\":\n\t\t\tif (!isObject(value.value) || !isSafeInteger(value.value.id)) {\n\t\t\t\tthrow new JsonlCorruptionError(`Invalid ${value.type} write in ${description}`);\n\t\t\t}\n\t\t\treturn value as MainOperation;\n\t\tcase \"task\":\n\t\t\tif (\n\t\t\t\t!isObject(value.value) ||\n\t\t\t\t!isSafeInteger(value.value.id) ||\n\t\t\t\t!isObject(value.value.state) ||\n\t\t\t\tvalue.value.state.status !== \"terminal\"\n\t\t\t) {\n\t\t\t\tthrow new JsonlCorruptionError(`Invalid terminal task write in ${description}`);\n\t\t\t}\n\t\t\treturn value as MainOperation;\n\t\tcase \"document.retire\":\n\t\t\tif (!isSafeInteger(value.id)) throw new JsonlCorruptionError(`Invalid document retirement in ${description}`);\n\t\t\treturn value as MainOperation;\n\t\tcase \"task.sidecar\":\n\t\t\tif (!isSafeInteger(value.id) || !isSafeInteger(value.ordinal) || value.ordinal < 0) {\n\t\t\t\tthrow new JsonlCorruptionError(`Invalid task sidecar write in ${description}`);\n\t\t\t}\n\t\t\treturn value as MainOperation;\n\t\tcase \"document.create\":\n\t\t\tif (\n\t\t\t\t!isObject(value.record) ||\n\t\t\t\t!isSafeInteger(value.record.id) ||\n\t\t\t\t!isSafeInteger(value.ordinal) ||\n\t\t\t\tvalue.ordinal < 0\n\t\t\t) {\n\t\t\t\tthrow new JsonlCorruptionError(`Invalid document creation in ${description}`);\n\t\t\t}\n\t\t\treturn value as MainOperation;\n\t\tcase \"document.change\":\n\t\t\tif (!isSafeInteger(value.id) || !isSafeInteger(value.ordinal) || value.ordinal < 0) {\n\t\t\t\tthrow new JsonlCorruptionError(`Invalid document change in ${description}`);\n\t\t\t}\n\t\t\treturn value as MainOperation;\n\t\tdefault:\n\t\t\tthrow new JsonlCorruptionError(`Unknown write type in ${description}`);\n\t}\n};\n\nconst parseMainMarker = (text: string, line: number): MainMarker => {\n\tconst description = `${MAIN_FILE} line ${line}`;\n\tconst value = parseJson(text, description);\n\tif (\n\t\t!isObject(value) ||\n\t\tvalue.format !== FORMAT_VERSION ||\n\t\tvalue.type !== \"commit\" ||\n\t\t!isSafeInteger(value.seq) ||\n\t\tvalue.seq < 1 ||\n\t\t!Array.isArray(value.writes)\n\t) {\n\t\tthrow new JsonlCorruptionError(`Invalid commit marker in ${description}`);\n\t}\n\treturn {\n\t\tformat: FORMAT_VERSION,\n\t\ttype: \"commit\",\n\t\tseq: seqFromNumber(value.seq),\n\t\twrites: value.writes.map((write) => validateMainOperation(write, description)),\n\t};\n};\n\nconst validateDocumentContent = (value: unknown, description: string): DocumentContent => {\n\tif (!isObject(value) || !isSafeInteger(value.version) || value.version < 1) {\n\t\tthrow new JsonlCorruptionError(`Invalid document content in ${description}`);\n\t}\n\tif (value.kind === \"base\" && isObject(value.value)) return value as DocumentContent;\n\tif (value.kind === \"delta\" && Array.isArray(value.ops)) return value as DocumentContent;\n\tthrow new JsonlCorruptionError(`Invalid document content in ${description}`);\n};\n\nconst parseSidecarRecord = (text: string, file: string, line: number): SidecarRecord => {\n\tconst description = `${file} line ${line}`;\n\tconst value = parseJson(text, description);\n\tif (\n\t\t!isObject(value) ||\n\t\tvalue.format !== FORMAT_VERSION ||\n\t\tvalue.type !== \"record\" ||\n\t\t!isSafeInteger(value.seq) ||\n\t\tvalue.seq < 1 ||\n\t\t!isSafeInteger(value.ordinal) ||\n\t\tvalue.ordinal < 0 ||\n\t\t!isObject(value.payload) ||\n\t\ttypeof value.payload.type !== \"string\"\n\t) {\n\t\tthrow new JsonlCorruptionError(`Invalid sidecar record in ${description}`);\n\t}\n\tif (value.payload.type === \"task\") {\n\t\tif (\n\t\t\t!isObject(value.payload.value) ||\n\t\t\t!isSafeInteger(value.payload.value.id) ||\n\t\t\t!isObject(value.payload.value.state) ||\n\t\t\tvalue.payload.value.state.status === \"terminal\"\n\t\t) {\n\t\t\tthrow new JsonlCorruptionError(`Invalid live task record in ${description}`);\n\t\t}\n\t} else if (value.payload.type === \"document\") {\n\t\tif (!isSafeInteger(value.payload.id)) {\n\t\t\tthrow new JsonlCorruptionError(`Invalid document record in ${description}`);\n\t\t}\n\t\tvalidateDocumentContent(value.payload.content, description);\n\t} else {\n\t\tthrow new JsonlCorruptionError(`Unknown sidecar record type in ${description}`);\n\t}\n\treturn value as SidecarRecord;\n};\n\n/** Portable JSONL implementation of the storage contract. */\nexport class JsonlStorage implements Storage {\n\tprivate readonly fs: FileSystem;\n\tprivate readonly directory: string;\n\tprivate readonly mainPath: string;\n\tprivate readonly fsync: boolean;\n\tprivate readonly memory = new MemoryStorage();\n\tprivate readonly currentOnlyDocuments = new Set<DocumentId>();\n\tprivate readonly liveTaskSidecars = new Set<TaskId>();\n\tprivate closed = false;\n\tprivate poisonError: JsonlStoragePoisonedError | undefined;\n\n\tprivate constructor(fs: FileSystem, directory: string, mainPath: string, options: JsonlStorageOptions) {\n\t\tthis.fs = fs;\n\t\tthis.directory = directory;\n\t\tthis.mainPath = mainPath;\n\t\tthis.fsync = options.fsync ?? false;\n\t}\n\n\t/** Open or create a JSONL storage directory using the supplied filesystem. */\n\tstatic async open(\n\t\tdirectory: string,\n\t\tfs: FileSystem,\n\t\tcontext: Context,\n\t\toptions: JsonlStorageOptions = {},\n\t): Promise<JsonlStorage> {\n\t\tconst absolute = await fs.absolutePath(directory, context);\n\t\tif (!absolute.ok) throw errorFromFile(\"path resolution\", absolute.error);\n\t\tconst created = await fs.createDir(absolute.value, { recursive: true }, context);\n\t\tif (!created.ok) throw errorFromFile(\"directory creation\", created.error);\n\t\tconst mainPathResult = await fs.joinPath([absolute.value, MAIN_FILE], context);\n\t\tif (!mainPathResult.ok) throw errorFromFile(\"path join\", mainPathResult.error);\n\t\tconst storage = new JsonlStorage(fs, absolute.value, mainPathResult.value, options);\n\t\tawait storage.recover(context);\n\t\treturn storage;\n\t}\n\n\tasync commit(writes: readonly StorageWrite[], context: Context): Promise<Seq> {\n\t\tthis.assertUsable();\n\t\tconst prepared = this.memory.prepareCommit(writes);\n\t\tconst encoded = this.encodeCommit(prepared.seq, prepared.writes);\n\t\tconst reclamations = this.planReclamations(prepared.writes, encoded);\n\t\tconst sidecars = await Promise.all(\n\t\t\t[...encoded.sidecars].map(async ([file, content]) => ({\n\t\t\t\tfile,\n\t\t\t\tcontent,\n\t\t\t\tpath: await this.resolveFile(file, context),\n\t\t\t})),\n\t\t);\n\n\t\tfor (const sidecar of sidecars) {\n\t\t\tconst result = await this.fs.appendFile(sidecar.path, sidecar.content, context);\n\t\t\tif (!result.ok) throw this.poison(errorFromFile(`append to ${sidecar.file}`, result.error));\n\t\t}\n\t\tif (this.fsync) {\n\t\t\tfor (const sidecar of sidecars) {\n\t\t\t\tconst result = await this.fs.flushFile(sidecar.path, context);\n\t\t\t\tif (!result.ok) throw this.poison(errorFromFile(`flush of ${sidecar.file}`, result.error));\n\t\t\t}\n\t\t}\n\t\tconst marker = await this.fs.appendFile(this.mainPath, encoded.marker, context);\n\t\tif (!marker.ok) throw this.poison(errorFromFile(`append to ${MAIN_FILE}`, marker.error));\n\t\tconst seq = prepared.apply();\n\t\tthis.adoptSidecarState(prepared.writes);\n\t\tawait this.reclaimSidecars(reclamations, context);\n\t\treturn seq;\n\t}\n\n\tasync mintId<I extends Id<string>>(): Promise<I> {\n\t\treturn this.store.mintId<I>();\n\t}\n\n\tasync conversation(id: ConversationId, context: Context) {\n\t\treturn this.store.conversation(id, context);\n\t}\n\n\tasync scanConversations(query: ConversationQuery, limit: number, cursor: Cursor | undefined, context: Context) {\n\t\treturn this.store.scanConversations(query, limit, cursor, context);\n\t}\n\n\tentry(id: EntryId, context: Context): ReturnType<Storage[\"entry\"]>;\n\tentry(conversationId: ConversationId, id: EntryId, context: Context): ReturnType<Storage[\"entry\"]>;\n\tasync entry(idOrConversationId: EntryId | ConversationId, idOrContext: EntryId | Context, context?: Context) {\n\t\tif (context === undefined)\n\t\t\treturn this.store.entry(idFromNumber<EntryId>(idOrConversationId), idOrContext as Context);\n\t\tif (typeof idOrContext !== \"number\") throw new StorageRequestError(\"Storage.entry() requires an entry ID\");\n\t\treturn this.store.entry(\n\t\t\tidFromNumber<ConversationId>(idOrConversationId),\n\t\t\tidFromNumber<EntryId>(idOrContext),\n\t\t\tcontext,\n\t\t);\n\t}\n\n\tasync findLatestHeadMarker(\n\t\tconversationId: ConversationId,\n\t\tatOrBeforeEntryId: EntryId | undefined,\n\t\tcontext: Context,\n\t) {\n\t\treturn this.store.findLatestHeadMarker(conversationId, atOrBeforeEntryId, context);\n\t}\n\n\tasync scanEntries(query: EntryQuery, limit: number, cursor: Cursor | undefined, context: Context) {\n\t\treturn this.store.scanEntries(query, limit, cursor, context);\n\t}\n\n\tasync task(id: TaskId, context: Context) {\n\t\treturn this.store.task(id, context);\n\t}\n\n\tasync scanTasks(query: TaskQuery, limit: number, cursor: Cursor | undefined, context: Context) {\n\t\treturn this.store.scanTasks(query, limit, cursor, context);\n\t}\n\n\tasync submission(id: SubmissionId, context: Context) {\n\t\treturn this.store.submission(id, context);\n\t}\n\n\tasync scanSubmissions(query: SubmissionQuery, limit: number, cursor: Cursor | undefined, context: Context) {\n\t\treturn this.store.scanSubmissions(query, limit, cursor, context);\n\t}\n\n\tasync submissionByRequest(conversationId: ConversationId, requestId: string, context: Context) {\n\t\treturn this.store.submissionByRequest(conversationId, requestId, context);\n\t}\n\n\tasync findDocument(address: DocumentAddress, at: DocumentPoint, context: Context) {\n\t\treturn this.store.findDocument(address, at, context);\n\t}\n\n\tasync document(id: DocumentId, at: DocumentPoint, context: Context) {\n\t\treturn this.store.document(id, at, context);\n\t}\n\n\tasync scanDocuments(query: DocumentQuery, limit: number, cursor: Cursor | undefined, context: Context) {\n\t\treturn this.store.scanDocuments(query, limit, cursor, context);\n\t}\n\n\tasync close(context: Context): Promise<void> {\n\t\tif (this.closed) return;\n\t\tthis.closed = true;\n\t\tawait this.memory.close(context);\n\t}\n\n\tprivate encodeCommit(seq: Seq, writes: readonly StorageWrite[]): EncodedCommit {\n\t\tconst mainWrites: MainOperation[] = [];\n\t\tconst records = new Map<string, SidecarRecord[]>();\n\t\tlet nextOrdinal = 0;\n\t\tconst addSidecar = (file: string, payload: SidecarPayload): number => {\n\t\t\tconst ordinal = nextOrdinal++;\n\t\t\tlet fileRecords = records.get(file);\n\t\t\tif (fileRecords === undefined) {\n\t\t\t\tfileRecords = [];\n\t\t\t\trecords.set(file, fileRecords);\n\t\t\t}\n\t\t\tfileRecords.push({ format: FORMAT_VERSION, type: \"record\", seq, ordinal, payload });\n\t\t\treturn ordinal;\n\t\t};\n\n\t\tfor (const write of writes) {\n\t\t\tswitch (write.type) {\n\t\t\t\tcase \"conversation\":\n\t\t\t\tcase \"entry\":\n\t\t\t\tcase \"submission\":\n\t\t\t\tcase \"document.retire\":\n\t\t\t\t\tmainWrites.push(write);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"task\":\n\t\t\t\t\tif (write.value.state.status === \"terminal\") mainWrites.push(write);\n\t\t\t\t\telse {\n\t\t\t\t\t\tconst ordinal = addSidecar(sidecarFileName(\"task\", write.value.id), {\n\t\t\t\t\t\t\ttype: \"task\",\n\t\t\t\t\t\t\tvalue: write.value,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tmainWrites.push({ type: \"task.sidecar\", id: write.value.id, ordinal });\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"document.create\": {\n\t\t\t\t\tconst ordinal = addSidecar(sidecarFileName(\"doc\", write.record.id), {\n\t\t\t\t\t\ttype: \"document\",\n\t\t\t\t\t\tid: write.record.id,\n\t\t\t\t\t\tcontent: write.content,\n\t\t\t\t\t});\n\t\t\t\t\tmainWrites.push({ type: \"document.create\", record: write.record, ordinal });\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"document.change\": {\n\t\t\t\t\tconst ordinal = addSidecar(sidecarFileName(\"doc\", write.id), {\n\t\t\t\t\t\ttype: \"document\",\n\t\t\t\t\t\tid: write.id,\n\t\t\t\t\t\tcontent: write.content,\n\t\t\t\t\t});\n\t\t\t\t\tmainWrites.push({ type: \"document.change\", id: write.id, ordinal });\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst sidecars = new Map<string, string>();\n\t\tfor (const [file, fileRecords] of records) {\n\t\t\tsidecars.set(file, fileRecords.map((record) => jsonLine(record)).join(\"\"));\n\t\t}\n\t\tconst marker: MainMarker = {\n\t\t\tformat: FORMAT_VERSION,\n\t\t\ttype: \"commit\",\n\t\t\tseq,\n\t\t\twrites: mainWrites,\n\t\t};\n\t\treturn { marker: jsonLine(marker), sidecars };\n\t}\n\n\tprivate planReclamations(writes: readonly StorageWrite[], encoded: EncodedCommit): ReadonlyMap<string, string> {\n\t\tconst createdCurrentOnlyDocuments = new Set<DocumentId>();\n\t\tconst retiredDocuments = new Set<DocumentId>();\n\t\tconst baseDocuments = new Set<DocumentId>();\n\t\tconst finalTasks = new Map<TaskId, StoredTask>();\n\t\tfor (const write of writes) {\n\t\t\tswitch (write.type) {\n\t\t\t\tcase \"document.create\":\n\t\t\t\t\tif (isCurrentOnly(write.record)) createdCurrentOnlyDocuments.add(write.record.id);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"document.change\":\n\t\t\t\t\tif (write.content.kind === \"base\") baseDocuments.add(write.id);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"document.retire\":\n\t\t\t\t\tretiredDocuments.add(write.id);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"task\":\n\t\t\t\t\tfinalTasks.set(write.value.id, write.value);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tconst replacements = new Map<string, string>();\n\t\tconst isCurrentOnlyDocument = (id: DocumentId): boolean =>\n\t\t\tthis.currentOnlyDocuments.has(id) || createdCurrentOnlyDocuments.has(id);\n\t\tfor (const id of retiredDocuments) {\n\t\t\tif (isCurrentOnlyDocument(id)) replacements.set(sidecarFileName(\"doc\", id), \"\");\n\t\t}\n\t\tfor (const id of baseDocuments) {\n\t\t\tif (!isCurrentOnlyDocument(id) || retiredDocuments.has(id)) continue;\n\t\t\tconst file = sidecarFileName(\"doc\", id);\n\t\t\tconst content = encoded.sidecars.get(file);\n\t\t\tif (content !== undefined) replacements.set(file, content);\n\t\t}\n\t\tfor (const [id, task] of finalTasks) {\n\t\t\tif (\n\t\t\t\ttask.state.status === \"terminal\" &&\n\t\t\t\t(this.liveTaskSidecars.has(id) || encoded.sidecars.has(sidecarFileName(\"task\", id)))\n\t\t\t) {\n\t\t\t\treplacements.set(sidecarFileName(\"task\", id), \"\");\n\t\t\t}\n\t\t}\n\t\treturn replacements;\n\t}\n\n\tprivate adoptSidecarState(writes: readonly StorageWrite[]): void {\n\t\tfor (const write of writes) {\n\t\t\tif (write.type === \"document.create\") {\n\t\t\t\tif (isCurrentOnly(write.record)) this.currentOnlyDocuments.add(write.record.id);\n\t\t\t} else if (write.type === \"task\") {\n\t\t\t\tif (write.value.state.status === \"terminal\") this.liveTaskSidecars.delete(write.value.id);\n\t\t\t\telse this.liveTaskSidecars.add(write.value.id);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** The marker already published this state, so reclamation is retryable best-effort maintenance. */\n\tprivate async reclaimSidecars(replacements: ReadonlyMap<string, string>, context: Context): Promise<void> {\n\t\tif (replacements.size === 0) return;\n\t\tif (this.fsync) {\n\t\t\tconst flushed = await this.fs.flushFile(this.mainPath, context);\n\t\t\tif (!flushed.ok) return;\n\t\t}\n\t\tfor (const [file, content] of replacements) await this.replaceSidecar(file, content, context);\n\t}\n\n\tprivate async replaceSidecar(file: string, content: string, context: Context): Promise<void> {\n\t\tconst path = await this.fs.joinPath([this.directory, file], context);\n\t\tif (!path.ok) return;\n\t\tif (content === \"\") {\n\t\t\tawait this.fs.remove(path.value, { force: true }, context);\n\t\t\treturn;\n\t\t}\n\t\tconst temporaryPath = await this.fs.joinPath([this.directory, `${file}${RECLAIM_SUFFIX}`], context);\n\t\tif (!temporaryPath.ok) return;\n\t\tconst written = await this.fs.writeFile(temporaryPath.value, content, context);\n\t\tif (!written.ok) return;\n\t\tif (this.fsync) {\n\t\t\tconst flushed = await this.fs.flushFile(temporaryPath.value, context);\n\t\t\tif (!flushed.ok) return;\n\t\t}\n\t\tawait this.fs.renameFile(temporaryPath.value, path.value, context);\n\t}\n\n\tprivate async recover(context: Context): Promise<void> {\n\t\tconst fs = this.fs;\n\t\tconst directory = this.directory;\n\t\tconst memory = this.memory;\n\t\tconst main = await JsonlStorage.readLines(fs, this.mainPath, MAIN_FILE, context, (text, line) =>\n\t\t\tparseMainMarker(text, line),\n\t\t);\n\t\tlet previousSeq = 0;\n\t\tfor (const marker of main.lines) {\n\t\t\tif (marker.value.seq <= previousSeq) {\n\t\t\t\tthrow new JsonlCorruptionError(`Commit sequence does not strictly increase in ${MAIN_FILE}`);\n\t\t\t}\n\t\t\tpreviousSeq = marker.value.seq;\n\t\t}\n\n\t\tconst listed = await fs.listDir(directory, context);\n\t\tif (!listed.ok) throw errorFromFile(\"directory listing\", listed.error);\n\t\tfor (const info of listed.value) {\n\t\t\tif (info.kind === \"file\" && isReclaimFileName(info.name)) {\n\t\t\t\tawait fs.remove(info.path, { force: true }, context);\n\t\t\t}\n\t\t}\n\t\tconst sidecarFiles = listed.value\n\t\t\t.filter((info) => info.kind === \"file\" && isSidecarFileName(info.name))\n\t\t\t.map((info) => info.name)\n\t\t\t.sort();\n\t\tconst parsedFiles = new Map<string, ParsedFile<SidecarRecord>>();\n\t\tconst recordByKey = new Map<string, ParsedLine<SidecarRecord>>();\n\t\tfor (const file of sidecarFiles) {\n\t\t\tconst pathResult = await fs.joinPath([directory, file], context);\n\t\t\tif (!pathResult.ok) throw errorFromFile(\"path join\", pathResult.error);\n\t\t\tconst parsed = await JsonlStorage.readLines(fs, pathResult.value, file, context, (text, line) =>\n\t\t\t\tparseSidecarRecord(text, file, line),\n\t\t\t);\n\t\t\tparsedFiles.set(file, parsed);\n\t\t\tlet previous: SidecarRecord | undefined;\n\t\t\tfor (const line of parsed.lines) {\n\t\t\t\tif (\n\t\t\t\t\tprevious !== undefined &&\n\t\t\t\t\t(line.value.seq < previous.seq ||\n\t\t\t\t\t\t(line.value.seq === previous.seq && line.value.ordinal <= previous.ordinal))\n\t\t\t\t) {\n\t\t\t\t\tthrow new JsonlCorruptionError(`Sidecar records are out of order in ${file}`);\n\t\t\t\t}\n\t\t\t\tprevious = line.value;\n\t\t\t\trecordByKey.set(sidecarKey(file, line.value.seq, line.value.ordinal), line);\n\t\t\t}\n\t\t}\n\n\t\tconst currentOnlyDocuments = new Set<DocumentId>();\n\t\tconst retiredDocuments = new Set<DocumentId>();\n\t\tconst finalTaskIsLive = new Map<TaskId, boolean>();\n\t\tfor (const { value: marker } of main.lines) {\n\t\t\tfor (const operation of marker.writes) {\n\t\t\t\tif (operation.type === \"document.create\") {\n\t\t\t\t\tif (isCurrentOnly(operation.record)) currentOnlyDocuments.add(operation.record.id);\n\t\t\t\t} else if (operation.type === \"document.retire\") {\n\t\t\t\t\tretiredDocuments.add(operation.id);\n\t\t\t\t} else if (operation.type === \"task\") {\n\t\t\t\t\tfinalTaskIsLive.set(operation.value.id, false);\n\t\t\t\t} else if (operation.type === \"task.sidecar\") {\n\t\t\t\t\tfinalTaskIsLive.set(operation.id, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst retiredCurrentOnlyDocuments = new Set([...retiredDocuments].filter((id) => currentOnlyDocuments.has(id)));\n\n\t\tconst latestBases = new Map<DocumentId, SidecarRecord>();\n\t\tfor (const { value: marker } of main.lines) {\n\t\t\tfor (const operation of marker.writes) {\n\t\t\t\tif (operation.type !== \"document.create\" && operation.type !== \"document.change\") continue;\n\t\t\t\tconst id = operation.type === \"document.create\" ? operation.record.id : operation.id;\n\t\t\t\tif (!currentOnlyDocuments.has(id)) continue;\n\t\t\t\tconst record = recordByKey.get(\n\t\t\t\t\tsidecarKey(sidecarFileName(\"doc\", id), marker.seq, operation.ordinal),\n\t\t\t\t)?.value;\n\t\t\t\tif (\n\t\t\t\t\trecord?.payload.type !== \"document\" ||\n\t\t\t\t\trecord.payload.id !== id ||\n\t\t\t\t\trecord.payload.content.kind !== \"base\"\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst previous = latestBases.get(id);\n\t\t\t\tif (\n\t\t\t\t\tprevious === undefined ||\n\t\t\t\t\trecord.seq > previous.seq ||\n\t\t\t\t\t(record.seq === previous.seq && record.ordinal > previous.ordinal)\n\t\t\t\t) {\n\t\t\t\t\tlatestBases.set(id, record);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst isBeforeLatestBase = (id: DocumentId, seq: Seq, ordinal: number): boolean => {\n\t\t\tconst base = latestBases.get(id);\n\t\t\treturn base !== undefined && (seq < base.seq || (seq === base.seq && ordinal < base.ordinal));\n\t\t};\n\t\tconst terminalTasks = new Set([...finalTaskIsLive].filter(([, live]) => !live).map(([id]) => id));\n\t\tconst confirmed = new Set<string>();\n\t\tfor (const line of main.lines) {\n\t\t\tconst marker = line.value;\n\t\t\tconst writes: StorageWrite[] = [];\n\t\t\tfor (const operation of marker.writes) {\n\t\t\t\tswitch (operation.type) {\n\t\t\t\t\tcase \"conversation\":\n\t\t\t\t\tcase \"entry\":\n\t\t\t\t\tcase \"submission\":\n\t\t\t\t\tcase \"task\":\n\t\t\t\t\tcase \"document.retire\":\n\t\t\t\t\t\twrites.push(operation);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"task.sidecar\": {\n\t\t\t\t\t\tconst optional = terminalTasks.has(operation.id);\n\t\t\t\t\t\tconst record = JsonlStorage.confirmRecord(\n\t\t\t\t\t\t\tmarker,\n\t\t\t\t\t\t\toperation.ordinal,\n\t\t\t\t\t\t\tsidecarFileName(\"task\", operation.id),\n\t\t\t\t\t\t\trecordByKey,\n\t\t\t\t\t\t\tconfirmed,\n\t\t\t\t\t\t\toptional,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (record !== undefined) {\n\t\t\t\t\t\t\tif (record.payload.type !== \"task\" || record.payload.value.id !== operation.id) {\n\t\t\t\t\t\t\t\tthrow new JsonlCorruptionError(\n\t\t\t\t\t\t\t\t\t`Confirmed task sidecar data does not match commit ${marker.seq}`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!optional) writes.push({ type: \"task\", value: record.payload.value });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"document.create\":\n\t\t\t\t\tcase \"document.change\": {\n\t\t\t\t\t\tconst id = operation.type === \"document.create\" ? operation.record.id : operation.id;\n\t\t\t\t\t\tconst reclaimed =\n\t\t\t\t\t\t\tretiredCurrentOnlyDocuments.has(id) || isBeforeLatestBase(id, marker.seq, operation.ordinal);\n\t\t\t\t\t\tconst record = JsonlStorage.confirmRecord(\n\t\t\t\t\t\t\tmarker,\n\t\t\t\t\t\t\toperation.ordinal,\n\t\t\t\t\t\t\tsidecarFileName(\"doc\", id),\n\t\t\t\t\t\t\trecordByKey,\n\t\t\t\t\t\t\tconfirmed,\n\t\t\t\t\t\t\treclaimed,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tlet content: DocumentContent | undefined;\n\t\t\t\t\t\tif (record !== undefined) {\n\t\t\t\t\t\t\tif (record.payload.type !== \"document\" || record.payload.id !== id) {\n\t\t\t\t\t\t\t\tthrow new JsonlCorruptionError(\n\t\t\t\t\t\t\t\t\t`Confirmed document sidecar data does not match commit ${marker.seq}`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontent = record.payload.content;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operation.type === \"document.create\") {\n\t\t\t\t\t\t\tif (content !== undefined && content.kind !== \"base\") {\n\t\t\t\t\t\t\t\tthrow new JsonlCorruptionError(\n\t\t\t\t\t\t\t\t\t`Document creation lacks a confirmed base in commit ${marker.seq}`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twrites.push({\n\t\t\t\t\t\t\t\ttype: \"document.create\",\n\t\t\t\t\t\t\t\trecord: operation.record,\n\t\t\t\t\t\t\t\tcontent: reclaimed || content === undefined ? { kind: \"base\", version: 1, value: {} } : content,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if (!reclaimed && content !== undefined) {\n\t\t\t\t\t\t\twrites.push({ type: \"document.change\", id, content });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tmemory.prepareCommit(writes, marker.seq).apply();\n\t\t\t} catch (error) {\n\t\t\t\tthrow new JsonlCorruptionError(\n\t\t\t\t\t`Invalid committed state at sequence ${marker.seq}`,\n\t\t\t\t\terror instanceof Error ? error : undefined,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst reclamations = new Map<string, string>();\n\t\tfor (const [file, parsed] of parsedFiles) {\n\t\t\tlet unconfirmedAt: number | undefined;\n\t\t\tfor (const line of parsed.lines) {\n\t\t\t\tconst key = sidecarKey(file, line.value.seq, line.value.ordinal);\n\t\t\t\tif (confirmed.has(key)) {\n\t\t\t\t\tif (unconfirmedAt !== undefined) {\n\t\t\t\t\t\tthrow new JsonlCorruptionError(`Confirmed record follows an unconfirmed tail in ${file}`);\n\t\t\t\t\t}\n\t\t\t\t} else if (unconfirmedAt === undefined) {\n\t\t\t\t\tunconfirmedAt = line.start;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (unconfirmedAt !== undefined) {\n\t\t\t\tconst truncated = await fs.truncateFile(parsed.path, unconfirmedAt, context);\n\t\t\t\tif (!truncated.ok) throw errorFromFile(`tail truncation of ${file}`, truncated.error);\n\t\t\t}\n\n\t\t\tconst numericId = Number(file.slice(file.indexOf(\"-\") + 1, -\".jsonl\".length));\n\t\t\tconst confirmedLines = parsed.lines.filter((line) =>\n\t\t\t\tconfirmed.has(sidecarKey(file, line.value.seq, line.value.ordinal)),\n\t\t\t);\n\t\t\tlet retainedLines: readonly ParsedLine<SidecarRecord>[] | undefined;\n\t\t\tif (file.startsWith(\"task-\") && terminalTasks.has(idFromNumber<TaskId>(numericId))) {\n\t\t\t\tretainedLines = [];\n\t\t\t} else if (file.startsWith(\"doc-\")) {\n\t\t\t\tconst documentId = idFromNumber<DocumentId>(numericId);\n\t\t\t\tif (retiredCurrentOnlyDocuments.has(documentId)) {\n\t\t\t\t\tretainedLines = [];\n\t\t\t\t} else if (latestBases.has(documentId)) {\n\t\t\t\t\tretainedLines = confirmedLines.filter(\n\t\t\t\t\t\t(line) => !isBeforeLatestBase(documentId, line.value.seq, line.value.ordinal),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\n\t\t\t\tretainedLines !== undefined &&\n\t\t\t\t(retainedLines.length < confirmedLines.length || retainedLines.length === 0)\n\t\t\t) {\n\t\t\t\treclamations.set(file, retainedLines.map((line) => jsonLine(line.value)).join(\"\"));\n\t\t\t}\n\t\t}\n\t\tawait this.reclaimSidecars(reclamations, context);\n\n\t\tfor (const id of currentOnlyDocuments) this.currentOnlyDocuments.add(id);\n\t\tfor (const [id, live] of finalTaskIsLive) {\n\t\t\tif (live) this.liveTaskSidecars.add(id);\n\t\t}\n\t}\n\n\tprivate static confirmRecord(\n\t\tmarker: MainMarker,\n\t\tordinal: number,\n\t\tfile: string,\n\t\trecordByKey: ReadonlyMap<string, ParsedLine<SidecarRecord>>,\n\t\tconfirmed: Set<string>,\n\t\toptional: boolean,\n\t): SidecarRecord | undefined {\n\t\tconst key = sidecarKey(file, marker.seq, ordinal);\n\t\tif (confirmed.has(key)) throw new JsonlCorruptionError(`Sidecar record is confirmed more than once`);\n\t\tconst line = recordByKey.get(key);\n\t\tif (line === undefined) {\n\t\t\tif (optional) return undefined;\n\t\t\tthrow new JsonlCorruptionError(`Missing confirmed sidecar record ${file} at sequence ${marker.seq}`);\n\t\t}\n\t\tconfirmed.add(key);\n\t\treturn line.value;\n\t}\n\n\tprivate static async readLines<T>(\n\t\tfs: FileSystem,\n\t\tpath: string,\n\t\tname: string,\n\t\tcontext: Context,\n\t\tparse: (text: string, line: number) => T,\n\t): Promise<ParsedFile<T>> {\n\t\tconst read = await fs.readBinaryFile(path, context);\n\t\tif (!read.ok) {\n\t\t\tif (read.error.code === \"not_found\") return { path, lines: [] };\n\t\t\tthrow errorFromFile(`read of ${name}`, read.error);\n\t\t}\n\t\tconst bytes = read.value;\n\t\tlet completeSize = bytes.length;\n\t\tif (completeSize > 0 && bytes[completeSize - 1] !== 0x0a) {\n\t\t\tcompleteSize = bytes.lastIndexOf(0x0a) + 1;\n\t\t\tconst truncated = await fs.truncateFile(path, completeSize, context);\n\t\t\tif (!truncated.ok) throw errorFromFile(`torn-line truncation of ${name}`, truncated.error);\n\t\t}\n\t\tconst lines: ParsedLine<T>[] = [];\n\t\tlet start = 0;\n\t\tlet lineNumber = 1;\n\t\tfor (let end = 0; end < completeSize; end++) {\n\t\t\tif (bytes[end] !== 0x0a) continue;\n\t\t\tlet text: string;\n\t\t\ttry {\n\t\t\t\ttext = textDecoder.decode(bytes.subarray(start, end));\n\t\t\t} catch (error) {\n\t\t\t\tthrow new JsonlCorruptionError(\n\t\t\t\t\t`Invalid UTF-8 in complete ${name} line ${lineNumber}`,\n\t\t\t\t\terror instanceof Error ? error : undefined,\n\t\t\t\t);\n\t\t\t}\n\t\t\tlines.push({ value: parse(text, lineNumber), start });\n\t\t\tstart = end + 1;\n\t\t\tlineNumber++;\n\t\t}\n\t\treturn { path, lines };\n\t}\n\n\tprivate async resolveFile(file: string, context: Context): Promise<string> {\n\t\tconst path = await this.fs.joinPath([this.directory, file], context);\n\t\tif (!path.ok) throw errorFromFile(\"path join\", path.error);\n\t\treturn path.value;\n\t}\n\n\tprivate get store(): MemoryStorage {\n\t\tthis.assertUsable();\n\t\treturn this.memory;\n\t}\n\n\tprivate poison(cause: Error): JsonlStoragePoisonedError {\n\t\tthis.poisonError ??= new JsonlStoragePoisonedError(cause);\n\t\treturn this.poisonError;\n\t}\n\n\tprivate assertUsable(): void {\n\t\tif (this.closed) throw new Error(\"JsonlStorage is closed\");\n\t\tif (this.poisonError !== undefined) throw this.poisonError;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { Context, JsonValue } from "@ny4n/chord";
|
|
2
|
+
import type { ConversationId, ConversationQuery, ConversationRecord, Cursor, DocumentAddress, DocumentId, DocumentPoint, DocumentQuery, DocumentRecord, EntryId, EntryQuery, EntryRecord, Id, Page, Seq, Storage, StorageWrite, StoredDocument, SubmissionId, SubmissionQuery, SubmissionRecord, TaskId, TaskQuery, TaskRecord } from "../types.ts";
|
|
3
|
+
type StoredTask = TaskRecord<JsonValue, JsonValue, JsonValue>;
|
|
4
|
+
/** A fully validated, detached state mutation whose application performs no fallible preparation. */
|
|
5
|
+
export interface PreparedMemoryCommit {
|
|
6
|
+
readonly seq: Seq;
|
|
7
|
+
/** Deeply frozen detached writes for persistence. */
|
|
8
|
+
readonly writes: readonly StorageWrite[];
|
|
9
|
+
apply(): Seq;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Detached in-memory reference implementation of `Storage`.
|
|
13
|
+
*
|
|
14
|
+
* Reads and retained writes are cloned intentionally to match the ownership boundary
|
|
15
|
+
* of serialization-backed stores. This is backend conformance, not validation.
|
|
16
|
+
*/
|
|
17
|
+
export declare class MemoryStorage implements Storage {
|
|
18
|
+
private readonly state;
|
|
19
|
+
private nextId;
|
|
20
|
+
private nextSeq;
|
|
21
|
+
private closed;
|
|
22
|
+
commit(writes: readonly StorageWrite[], _context: Context): Promise<Seq>;
|
|
23
|
+
/** Validate and detach one commit without changing observable state. */
|
|
24
|
+
prepareCommit(writes: readonly StorageWrite[], seq?: Seq): PreparedMemoryCommit;
|
|
25
|
+
private resolveDocumentCopies;
|
|
26
|
+
private applyPreparedCommit;
|
|
27
|
+
mintId<I extends Id<string>>(): Promise<I>;
|
|
28
|
+
conversation(id: ConversationId, _context: Context): Promise<ConversationRecord | undefined>;
|
|
29
|
+
scanConversations(query: ConversationQuery, limit: number, cursor: Cursor | undefined, _context: Context): Promise<Page<ConversationRecord, Cursor>>;
|
|
30
|
+
entry(id: EntryId, context: Context): Promise<{
|
|
31
|
+
readonly entry: EntryRecord;
|
|
32
|
+
readonly commitSeq: Seq;
|
|
33
|
+
} | undefined>;
|
|
34
|
+
entry(conversationId: ConversationId, id: EntryId, context: Context): Promise<{
|
|
35
|
+
readonly entry: EntryRecord;
|
|
36
|
+
readonly commitSeq: Seq;
|
|
37
|
+
} | undefined>;
|
|
38
|
+
findLatestHeadMarker(conversationId: ConversationId, atOrBeforeEntryId: EntryId | undefined, _context: Context): Promise<(EntryRecord & {
|
|
39
|
+
readonly head: EntryId;
|
|
40
|
+
}) | undefined>;
|
|
41
|
+
scanEntries(query: EntryQuery, limit: number, cursor: Cursor | undefined, _context: Context): Promise<Page<EntryRecord, Cursor>>;
|
|
42
|
+
task(id: TaskId, _context: Context): Promise<StoredTask | undefined>;
|
|
43
|
+
scanTasks(query: TaskQuery, limit: number, cursor: Cursor | undefined, _context: Context): Promise<Page<StoredTask, Cursor>>;
|
|
44
|
+
submission(id: SubmissionId, _context: Context): Promise<SubmissionRecord | undefined>;
|
|
45
|
+
scanSubmissions(query: SubmissionQuery, limit: number, cursor: Cursor | undefined, _context: Context): Promise<Page<SubmissionRecord, Cursor>>;
|
|
46
|
+
submissionByRequest(conversationId: ConversationId, requestId: string, _context: Context): Promise<SubmissionRecord | undefined>;
|
|
47
|
+
findDocument(address: DocumentAddress, at: DocumentPoint, _context: Context): Promise<DocumentRecord | undefined>;
|
|
48
|
+
document(id: DocumentId, at: DocumentPoint, _context: Context): Promise<StoredDocument | undefined>;
|
|
49
|
+
scanDocuments(query: DocumentQuery, limit: number, cursor: Cursor | undefined, _context: Context): Promise<Page<DocumentRecord, Cursor>>;
|
|
50
|
+
close(_context: Context): Promise<void>;
|
|
51
|
+
private materializeDocument;
|
|
52
|
+
private visibleEntries;
|
|
53
|
+
/** Visible entries oldest first: the fork chain's segments from the root conversation forward. */
|
|
54
|
+
private visibleEntriesAscending;
|
|
55
|
+
private checkGlobalIds;
|
|
56
|
+
private prepareDocumentActions;
|
|
57
|
+
private checkDocumentActions;
|
|
58
|
+
private applyDocumentActions;
|
|
59
|
+
private assertOpen;
|
|
60
|
+
}
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/storage/memory.ts"],"names":[],"mappings":"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"}
|