@earendil-works/pi-durable 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +111 -3
  3. package/dist/codemode/codemode.d.ts.map +1 -1
  4. package/dist/codemode/codemode.js +12 -4
  5. package/dist/codemode/codemode.js.map +1 -1
  6. package/dist/codemode/models.d.ts.map +1 -1
  7. package/dist/codemode/models.js +2 -0
  8. package/dist/codemode/models.js.map +1 -1
  9. package/dist/documents.d.ts +1 -1
  10. package/dist/documents.d.ts.map +1 -1
  11. package/dist/documents.js.map +1 -1
  12. package/dist/env/node.d.ts.map +1 -1
  13. package/dist/env/node.js +11 -3
  14. package/dist/env/node.js.map +1 -1
  15. package/dist/harness/agent.d.ts +13 -2
  16. package/dist/harness/agent.d.ts.map +1 -1
  17. package/dist/harness/agent.js +39 -5
  18. package/dist/harness/agent.js.map +1 -1
  19. package/dist/harness/compaction.d.ts +3 -1
  20. package/dist/harness/compaction.d.ts.map +1 -1
  21. package/dist/harness/compaction.js +19 -4
  22. package/dist/harness/compaction.js.map +1 -1
  23. package/dist/harness/generation.d.ts.map +1 -1
  24. package/dist/harness/generation.js +67 -27
  25. package/dist/harness/generation.js.map +1 -1
  26. package/dist/harness/harness.d.ts +5 -2
  27. package/dist/harness/harness.d.ts.map +1 -1
  28. package/dist/harness/harness.js +78 -13
  29. package/dist/harness/harness.js.map +1 -1
  30. package/dist/harness/inbox.d.ts +2 -2
  31. package/dist/harness/inbox.d.ts.map +1 -1
  32. package/dist/harness/inbox.js +3 -3
  33. package/dist/harness/inbox.js.map +1 -1
  34. package/dist/harness/prompt.d.ts +1 -1
  35. package/dist/harness/prompt.d.ts.map +1 -1
  36. package/dist/harness/prompt.js +1 -1
  37. package/dist/harness/prompt.js.map +1 -1
  38. package/dist/harness/scheduler.d.ts +55 -10
  39. package/dist/harness/scheduler.d.ts.map +1 -1
  40. package/dist/harness/scheduler.js +617 -124
  41. package/dist/harness/scheduler.js.map +1 -1
  42. package/dist/harness/submissions.d.ts +7 -2
  43. package/dist/harness/submissions.d.ts.map +1 -1
  44. package/dist/harness/submissions.js +48 -17
  45. package/dist/harness/submissions.js.map +1 -1
  46. package/dist/harness/task-graph.d.ts +18 -1
  47. package/dist/harness/task-graph.d.ts.map +1 -1
  48. package/dist/harness/task-graph.js +50 -11
  49. package/dist/harness/task-graph.js.map +1 -1
  50. package/dist/harness/telemetry.d.ts +307 -0
  51. package/dist/harness/telemetry.d.ts.map +1 -0
  52. package/dist/harness/telemetry.js +136 -0
  53. package/dist/harness/telemetry.js.map +1 -0
  54. package/dist/harness/tool.d.ts.map +1 -1
  55. package/dist/harness/tool.js +53 -7
  56. package/dist/harness/tool.js.map +1 -1
  57. package/dist/harness/types.d.ts +110 -15
  58. package/dist/harness/types.d.ts.map +1 -1
  59. package/dist/harness/types.js.map +1 -1
  60. package/dist/harness/util.d.ts +4 -0
  61. package/dist/harness/util.d.ts.map +1 -1
  62. package/dist/harness/util.js +4 -0
  63. package/dist/harness/util.js.map +1 -1
  64. package/dist/index.d.ts +6 -4
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +3 -2
  67. package/dist/index.js.map +1 -1
  68. package/dist/session/session.d.ts +17 -6
  69. package/dist/session/session.d.ts.map +1 -1
  70. package/dist/session/session.js +64 -32
  71. package/dist/session/session.js.map +1 -1
  72. package/dist/session/transaction.d.ts +5 -1
  73. package/dist/session/transaction.d.ts.map +1 -1
  74. package/dist/session/transaction.js +26 -1
  75. package/dist/session/transaction.js.map +1 -1
  76. package/dist/storage/indexeddb.d.ts +60 -0
  77. package/dist/storage/indexeddb.d.ts.map +1 -0
  78. package/dist/storage/indexeddb.js +831 -0
  79. package/dist/storage/indexeddb.js.map +1 -0
  80. package/dist/storage/jsonl/storage.d.ts +16 -0
  81. package/dist/storage/jsonl/storage.d.ts.map +1 -1
  82. package/dist/storage/memory.js +1 -1
  83. package/dist/storage/memory.js.map +1 -1
  84. package/dist/storage/sqlite/cloudflare.d.ts +2 -51
  85. package/dist/storage/sqlite/cloudflare.d.ts.map +1 -1
  86. package/dist/storage/sqlite/cloudflare.js +2 -133
  87. package/dist/storage/sqlite/cloudflare.js.map +1 -1
  88. package/dist/storage/sqlite/database.d.ts +1 -36
  89. package/dist/storage/sqlite/database.d.ts.map +1 -1
  90. package/dist/storage/sqlite/database.js.map +1 -1
  91. package/dist/storage/sqlite/index.d.ts +1 -1
  92. package/dist/storage/sqlite/index.d.ts.map +1 -1
  93. package/dist/storage/sqlite/index.js.map +1 -1
  94. package/dist/storage/sqlite/migrations.d.ts +2 -5
  95. package/dist/storage/sqlite/migrations.d.ts.map +1 -1
  96. package/dist/storage/sqlite/migrations.js +28 -28
  97. package/dist/storage/sqlite/migrations.js.map +1 -1
  98. package/dist/storage/sqlite/node.d.ts +2 -37
  99. package/dist/storage/sqlite/node.d.ts.map +1 -1
  100. package/dist/storage/sqlite/node.js +3 -174
  101. package/dist/storage/sqlite/node.js.map +1 -1
  102. package/dist/storage/sqlite/schema.d.ts +1 -3
  103. package/dist/storage/sqlite/schema.d.ts.map +1 -1
  104. package/dist/storage/sqlite/schema.js +2 -9
  105. package/dist/storage/sqlite/schema.js.map +1 -1
  106. package/dist/storage/sqlite/storage.d.ts +1 -1
  107. package/dist/storage/sqlite/storage.d.ts.map +1 -1
  108. package/dist/storage/sqlite/storage.js.map +1 -1
  109. package/dist/testing/storage-conformance.d.ts.map +1 -1
  110. package/dist/testing/storage-conformance.js +17 -0
  111. package/dist/testing/storage-conformance.js.map +1 -1
  112. package/dist/timers.d.ts +21 -0
  113. package/dist/timers.d.ts.map +1 -0
  114. package/dist/timers.js +72 -0
  115. package/dist/timers.js.map +1 -0
  116. package/dist/types.d.ts +130 -9
  117. package/dist/types.d.ts.map +1 -1
  118. package/dist/types.js.map +1 -1
  119. package/package.json +15 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexeddb.js","sourceRoot":"","sources":["../../src/storage/indexeddb.ts"],"names":[],"mappings":"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","sourcesContent":["/// <reference lib=\"dom\" />\n\nimport type { Context, JsonValue } from \"@earendil-works/chord\";\nimport { apply, type Op } from \"@earendil-works/chord/delta\";\nimport { StorageRequestError } from \"../errors.ts\";\nimport { idFromNumber, seqFromNumber } from \"../ids.ts\";\nimport type {\n\tConversationId,\n\tConversationQuery,\n\tConversationRecord,\n\tCursor,\n\tDocumentAddress,\n\tDocumentContent,\n\tDocumentCreate,\n\tDocumentId,\n\tDocumentPoint,\n\tDocumentQuery,\n\tDocumentRecord,\n\tEntryId,\n\tEntryQuery,\n\tEntryRecord,\n\tId,\n\tJsonObject,\n\tPage,\n\tScanOrder,\n\tSeq,\n\tStorage,\n\tStorageWrite,\n\tStoredDocument,\n\tSubmissionId,\n\tSubmissionQuery,\n\tSubmissionRecord,\n\tTaskId,\n\tTaskQuery,\n\tTaskRecord,\n} from \"../types.ts\";\nimport { nextCursor, type ScanStart, scanStart } from \"./scan.ts\";\n\nconst DATABASE_VERSION = 1;\nconst MAX_KEY = Number.MAX_SAFE_INTEGER;\nconst META_KEY = \"state\";\n\nconst STORES = {\n\tmeta: \"meta\",\n\trecordIds: \"record_ids\",\n\tconversations: \"conversations\",\n\tentries: \"entries\",\n\ttasks: \"tasks\",\n\tsubmissions: \"submissions\",\n\tdocuments: \"documents\",\n\tdocumentRevisions: \"document_revisions\",\n} as const;\n\nconst ALL_STORES = Object.values(STORES);\n\nconst INDEXES = {\n\tconversationsByOwnerConversation: \"conversations_by_owner_conversation\",\n\tconversationsByOwnerTask: \"conversations_by_owner_task\",\n\tentriesByConversation: \"entries_by_conversation\",\n\tentryHeadsByConversation: \"entry_heads_by_conversation\",\n\ttasksByStatus: \"tasks_by_status\",\n\ttasksByConversation: \"tasks_by_conversation\",\n\ttasksByKind: \"tasks_by_kind\",\n\ttasksByAbortRequested: \"tasks_by_abort_requested\",\n\ttasksByBackground: \"tasks_by_background\",\n\tsubmissionsByRequest: \"submissions_by_request\",\n\tsubmissionsByConversation: \"submissions_by_conversation\",\n\tsubmissionsByStatus: \"submissions_by_status\",\n\tdocumentsByAddress: \"documents_by_address\",\n\tdocumentsByScope: \"documents_by_scope\",\n\tdocumentsByScopeKind: \"documents_by_scope_kind\",\n\tdocumentRevisionsByKind: \"document_revisions_by_kind\",\n} as const;\n\ntype StoredTask = TaskRecord<JsonValue, JsonValue, JsonValue>;\ntype TableName = \"conversation\" | \"entry\" | \"task\" | \"submission\" | \"document\";\ntype DocumentAction = {\n\tcreate?: DocumentCreate;\n\tcopy?: Extract<StorageWrite, { readonly type: \"document.copy\" }>[\"source\"];\n\tcontent?: DocumentContent;\n\tretire: boolean;\n};\ntype ScopeColumns = {\n\treadonly scopeKind: DocumentRecord[\"scope\"][\"kind\"];\n\treadonly ownerId: number;\n};\ntype MetaRow = { readonly key: typeof META_KEY; readonly nextId: number; readonly nextSeq: number };\ntype RecordIdRow = { readonly id: number; readonly recordType: TableName };\ntype ConversationRow = {\n\treadonly id: ConversationId;\n\treadonly ownerConversationId?: ConversationId;\n\treadonly ownerTaskId?: TaskId;\n\treadonly record: ConversationRecord;\n};\ntype EntryRow = {\n\treadonly id: EntryId;\n\treadonly conversationId: ConversationId;\n\treadonly headConversationId?: ConversationId;\n\treadonly commitSeq: Seq;\n\treadonly record: EntryRecord;\n};\ntype TaskRow = {\n\treadonly id: TaskId;\n\treadonly conversationId: ConversationId;\n\treadonly kind: string;\n\treadonly status: StoredTask[\"state\"][\"status\"];\n\treadonly abortRequested: 0 | 1;\n\treadonly background: 0 | 1;\n\treadonly record: StoredTask;\n};\ntype SubmissionRow = {\n\treadonly id: SubmissionId;\n\treadonly conversationId: ConversationId;\n\treadonly requestId?: string;\n\treadonly status: SubmissionRecord[\"status\"];\n\treadonly record: SubmissionRecord;\n};\ntype DocumentRow = {\n\treadonly id: DocumentId;\n\treadonly kind: string;\n\treadonly family: 0 | 1;\n\treadonly keyValue: string;\n\treadonly scopeKind: DocumentRecord[\"scope\"][\"kind\"];\n\treadonly ownerId: number;\n\treadonly createdAt: Seq;\n\treadonly retiredAt?: Seq;\n\treadonly record: DocumentRecord;\n};\ntype RevisionRow = {\n\treadonly documentId: DocumentId;\n\treadonly seq: Seq;\n\treadonly kind: DocumentContent[\"kind\"];\n\treadonly version: number;\n\treadonly content: JsonObject | readonly Op[];\n};\n\ntype IndexedDbStorageOptions = {\n\treadonly indexedDB?: IDBFactory;\n};\n\nconst requestResult = <T>(request: IDBRequest<T>): Promise<T> =>\n\tnew Promise<T>((resolve, reject) => {\n\t\trequest.addEventListener(\"success\", () => resolve(request.result), { once: true });\n\t\trequest.addEventListener(\"error\", () => reject(request.error ?? new Error(\"IndexedDB request failed\")), {\n\t\t\tonce: true,\n\t\t});\n\t});\n\nconst transactionResult = (transaction: IDBTransaction): Promise<void> =>\n\tnew Promise<void>((resolve, reject) => {\n\t\ttransaction.addEventListener(\"complete\", () => resolve(), { once: true });\n\t\ttransaction.addEventListener(\n\t\t\t\"abort\",\n\t\t\t() => reject(transaction.error ?? new Error(\"IndexedDB transaction was aborted\")),\n\t\t\t{ once: true },\n\t\t);\n\t\ttransaction.addEventListener(\n\t\t\t\"error\",\n\t\t\t() => reject(transaction.error ?? new Error(\"IndexedDB transaction failed\")),\n\t\t\t{ once: true },\n\t\t);\n\t});\n\nconst keyRanges = (): typeof IDBKeyRange => {\n\tif (typeof IDBKeyRange === \"undefined\") throw new Error(\"IndexedDB key ranges are not available\");\n\treturn IDBKeyRange;\n};\n\nconst cursorValues = <T>(\n\tsource: IDBObjectStore | IDBIndex,\n\trange: IDBKeyRange | IDBValidKey | null,\n\tdirection: IDBCursorDirection,\n\tlimit: number,\n\taccept: (value: T) => boolean = () => true,\n): Promise<T[]> =>\n\tnew Promise<T[]>((resolve, reject) => {\n\t\tconst values: T[] = [];\n\t\tconst request = source.openCursor(range, direction);\n\t\trequest.addEventListener(\"error\", () => reject(request.error ?? new Error(\"IndexedDB cursor failed\")), {\n\t\t\tonce: true,\n\t\t});\n\t\trequest.addEventListener(\"success\", () => {\n\t\t\tconst cursor = request.result;\n\t\t\tif (cursor === null) {\n\t\t\t\tresolve(values);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst value = cursor.value as T;\n\t\t\tif (accept(value)) values.push(value);\n\t\t\tif (values.length >= limit) {\n\t\t\t\tresolve(values);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcursor.continue();\n\t\t});\n\t});\n\nconst firstCursorValue = <T>(\n\tsource: IDBObjectStore | IDBIndex,\n\trange: IDBKeyRange | IDBValidKey | null,\n\tdirection: IDBCursorDirection,\n\taccept: (value: T) => boolean = () => true,\n): Promise<T | undefined> =>\n\tnew Promise<T | undefined>((resolve, reject) => {\n\t\tconst request = source.openCursor(range, direction);\n\t\trequest.addEventListener(\"error\", () => reject(request.error ?? new Error(\"IndexedDB cursor failed\")), {\n\t\t\tonce: true,\n\t\t});\n\t\trequest.addEventListener(\"success\", () => {\n\t\t\tconst cursor = request.result;\n\t\t\tif (cursor === null) {\n\t\t\t\tresolve(undefined);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst value = cursor.value as T;\n\t\t\tif (accept(value)) {\n\t\t\t\tresolve(value);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcursor.continue();\n\t\t});\n\t});\n\nconst page = <T extends { readonly id: Id<string> }>(\n\tvalues: readonly T[],\n\tlimit: number,\n\torder: ScanOrder = \"ascending\",\n): Page<T, Cursor> => {\n\tconst items = values.slice(0, limit);\n\tif (values.length <= limit) return { items };\n\treturn { items, next: nextCursor(items.at(-1)!.id, order) };\n};\n\nconst cursorId = <I extends Id<string>>(cursor: Cursor | undefined): I | undefined => {\n\tconst after = cursor?.after;\n\tif (after === undefined) return undefined;\n\tif (typeof after !== \"number\" || !Number.isSafeInteger(after)) {\n\t\tthrow new StorageRequestError(\"Invalid storage cursor\");\n\t}\n\treturn idFromNumber<I>(after);\n};\n\nconst primaryRange = (start: ScanStart): IDBKeyRange | null => {\n\tif (start.after === undefined) return null;\n\treturn start.order === \"ascending\"\n\t\t? keyRanges().lowerBound(start.after, true)\n\t\t: keyRanges().upperBound(start.after, true);\n};\n\nconst compoundIdRange = (\n\tprefix: readonly IDBValidKey[],\n\tminimum: number,\n\tmaximum: number,\n\tminimumOpen = false,\n\tmaximumOpen = false,\n): IDBKeyRange => keyRanges().bound([...prefix, minimum], [...prefix, maximum], minimumOpen, maximumOpen);\n\nconst scanCompoundRows = <T extends { readonly id: number }>(\n\tindex: IDBIndex,\n\tprefix: readonly IDBValidKey[],\n\tstart: ScanStart,\n\tlimit: number,\n\taccept: (value: T) => boolean,\n): Promise<T[]> => {\n\tconst minimum = start.order === \"ascending\" && start.after !== undefined ? start.after : 0;\n\tconst maximum = start.order === \"descending\" && start.after !== undefined ? start.after : MAX_KEY;\n\treturn cursorValues<T>(\n\t\tindex,\n\t\tcompoundIdRange(\n\t\t\tprefix,\n\t\t\tminimum,\n\t\t\tmaximum,\n\t\t\tstart.order === \"ascending\" && start.after !== undefined,\n\t\t\tstart.order === \"descending\" && start.after !== undefined,\n\t\t),\n\t\tstart.order === \"ascending\" ? \"next\" : \"prev\",\n\t\tlimit,\n\t\taccept,\n\t);\n};\n\nconst scopeColumns = (scope: DocumentRecord[\"scope\"]): ScopeColumns => {\n\tswitch (scope.kind) {\n\t\tcase \"session\":\n\t\t\treturn { scopeKind: \"session\", ownerId: 0 };\n\t\tcase \"conversation\":\n\t\t\treturn { scopeKind: \"conversation\", ownerId: scope.conversationId };\n\t\tcase \"task\":\n\t\t\treturn { scopeKind: \"task\", ownerId: scope.taskId };\n\t}\n};\n\nconst addressParts = (address: DocumentAddress | DocumentCreate | DocumentRecord) => {\n\tconst scope = scopeColumns(address.scope);\n\treturn {\n\t\tkind: address.kind,\n\t\t...scope,\n\t\tfamily: address.key === undefined ? (0 as const) : (1 as const),\n\t\tkeyValue: address.key ?? \"\",\n\t};\n};\n\nconst addressPrefix = (address: DocumentAddress | DocumentCreate | DocumentRecord): readonly IDBValidKey[] => {\n\tconst parts = addressParts(address);\n\treturn [parts.kind, parts.scopeKind, parts.ownerId, parts.family, parts.keyValue];\n};\n\nconst addressKey = (address: DocumentAddress | DocumentCreate | DocumentRecord): string =>\n\tJSON.stringify(addressPrefix(address));\n\nconst isAliveAt = (record: DocumentRecord, at: DocumentPoint): boolean => {\n\tif (at === \"current\") return record.retiredAt === undefined;\n\treturn record.createdAt <= at && (record.retiredAt === undefined || at < record.retiredAt);\n};\n\nconst isCurrentOnly = (record: DocumentRecord): boolean =>\n\trecord.scope.kind !== \"conversation\" || record.history === \"latest\";\n\nconst writeId = (write: StorageWrite): Id<string> | undefined => {\n\tswitch (write.type) {\n\t\tcase \"conversation\":\n\t\tcase \"entry\":\n\t\tcase \"task\":\n\t\tcase \"submission\":\n\t\t\treturn write.value.id;\n\t\tcase \"document.create\":\n\t\tcase \"document.copy\":\n\t\t\treturn write.record.id;\n\t\tcase \"document.change\":\n\t\tcase \"document.retire\":\n\t\t\treturn undefined;\n\t}\n};\n\nfunction createSchema(database: IDBDatabase): void {\n\tconst meta = database.createObjectStore(STORES.meta, { keyPath: \"key\" });\n\tmeta.add({ key: META_KEY, nextId: 2, nextSeq: 1 } satisfies MetaRow);\n\tdatabase.createObjectStore(STORES.recordIds, { keyPath: \"id\" });\n\n\tconst conversations = database.createObjectStore(STORES.conversations, { keyPath: \"id\" });\n\tconversations.createIndex(INDEXES.conversationsByOwnerConversation, [\"ownerConversationId\", \"id\"]);\n\tconversations.createIndex(INDEXES.conversationsByOwnerTask, [\"ownerTaskId\", \"id\"]);\n\n\tconst entries = database.createObjectStore(STORES.entries, { keyPath: \"id\" });\n\tentries.createIndex(INDEXES.entriesByConversation, [\"conversationId\", \"id\"]);\n\tentries.createIndex(INDEXES.entryHeadsByConversation, [\"headConversationId\", \"id\"]);\n\n\tconst tasks = database.createObjectStore(STORES.tasks, { keyPath: \"id\" });\n\ttasks.createIndex(INDEXES.tasksByStatus, [\"status\", \"id\"]);\n\ttasks.createIndex(INDEXES.tasksByConversation, [\"conversationId\", \"id\"]);\n\ttasks.createIndex(INDEXES.tasksByKind, [\"kind\", \"id\"]);\n\ttasks.createIndex(INDEXES.tasksByAbortRequested, [\"abortRequested\", \"id\"]);\n\ttasks.createIndex(INDEXES.tasksByBackground, [\"background\", \"id\"]);\n\n\tconst submissions = database.createObjectStore(STORES.submissions, { keyPath: \"id\" });\n\tsubmissions.createIndex(INDEXES.submissionsByRequest, [\"conversationId\", \"requestId\"]);\n\tsubmissions.createIndex(INDEXES.submissionsByConversation, [\"conversationId\", \"id\"]);\n\tsubmissions.createIndex(INDEXES.submissionsByStatus, [\"status\", \"id\"]);\n\n\tconst documents = database.createObjectStore(STORES.documents, { keyPath: \"id\" });\n\tdocuments.createIndex(INDEXES.documentsByAddress, [\n\t\t\"kind\",\n\t\t\"scopeKind\",\n\t\t\"ownerId\",\n\t\t\"family\",\n\t\t\"keyValue\",\n\t\t\"createdAt\",\n\t\t\"id\",\n\t]);\n\tdocuments.createIndex(INDEXES.documentsByScope, [\"scopeKind\", \"ownerId\", \"id\"]);\n\tdocuments.createIndex(INDEXES.documentsByScopeKind, [\"scopeKind\", \"ownerId\", \"kind\", \"id\"]);\n\n\tconst revisions = database.createObjectStore(STORES.documentRevisions, { keyPath: [\"documentId\", \"seq\"] });\n\trevisions.createIndex(INDEXES.documentRevisionsByKind, [\"documentId\", \"kind\", \"seq\"]);\n}\n\n/** Browser IndexedDB implementation of the durable storage contract. One owner must serialize access to each database. */\nexport class IndexedDbStorage implements Storage {\n\tprivate readonly database: IDBDatabase;\n\tprivate closed = false;\n\tprivate closing: Promise<void> | undefined;\n\tprivate activeOperations = 0;\n\tprivate operationsDrained: (() => void) | undefined;\n\n\tprivate constructor(database: IDBDatabase) {\n\t\tthis.database = database;\n\t}\n\n\t/** Open or create a browser-only IndexedDB database. */\n\tstatic async open(name: string, options: IndexedDbStorageOptions = {}): Promise<IndexedDbStorage> {\n\t\tconst factory = options.indexedDB ?? globalThis.indexedDB;\n\t\tif (factory === undefined) throw new Error(\"IndexedDB is not available\");\n\t\tconst request = factory.open(name, DATABASE_VERSION);\n\t\trequest.addEventListener(\"upgradeneeded\", (event) => {\n\t\t\tif ((event as IDBVersionChangeEvent).oldVersion === 0) createSchema(request.result);\n\t\t});\n\t\tconst database = await requestResult(request);\n\t\ttry {\n\t\t\tconst transaction = database.transaction(STORES.meta, \"readonly\");\n\t\t\tconst done = transactionResult(transaction);\n\t\t\tconst metadata = await requestResult(\n\t\t\t\ttransaction.objectStore(STORES.meta).get(META_KEY) as IDBRequest<MetaRow>,\n\t\t\t);\n\t\t\tawait done;\n\t\t\tif (metadata === undefined) throw new Error(\"Durable IndexedDB metadata is missing\");\n\t\t\treturn new IndexedDbStorage(database);\n\t\t} catch (error) {\n\t\t\tdatabase.close();\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/** Delete a closed database. Open connections in this or another owner can block deletion. */\n\tstatic async delete(name: string, options: IndexedDbStorageOptions = {}): Promise<void> {\n\t\tconst factory = options.indexedDB ?? globalThis.indexedDB;\n\t\tif (factory === undefined) throw new Error(\"IndexedDB is not available\");\n\t\tawait requestResult(factory.deleteDatabase(name));\n\t}\n\n\tasync commit(writes: readonly StorageWrite[], _context: Context): Promise<Seq> {\n\t\tthis.assertOpen();\n\t\tconst documentActions = this.prepareDocumentActions(writes);\n\t\treturn this.transaction(ALL_STORES, \"readwrite\", async (transaction) => {\n\t\t\tconst metaStore = transaction.objectStore(STORES.meta);\n\t\t\tconst metadata = await requestResult(metaStore.get(META_KEY) as IDBRequest<MetaRow>);\n\t\t\tif (metadata === undefined) throw new Error(\"Durable IndexedDB metadata is missing\");\n\t\t\tconst seq = seqFromNumber(metadata.nextSeq);\n\t\t\tawait this.checkGlobalIds(transaction, writes);\n\t\t\tawait this.checkDocumentActions(transaction, documentActions);\n\t\t\tfor (const write of writes) await this.applyTableWrite(transaction, write, seq);\n\t\t\tawait this.applyDocumentActions(transaction, documentActions, seq);\n\t\t\tlet nextId = metadata.nextId;\n\t\t\tfor (const write of writes) {\n\t\t\t\tconst id = writeId(write);\n\t\t\t\tif (id !== undefined) nextId = Math.max(nextId, id + 1);\n\t\t\t}\n\t\t\tawait requestResult(metaStore.put({ key: META_KEY, nextId, nextSeq: seq + 1 } satisfies MetaRow));\n\t\t\treturn seq;\n\t\t});\n\t}\n\n\tasync mintId<I extends Id<string>>(): Promise<I> {\n\t\tthis.assertOpen();\n\t\treturn this.transaction(STORES.meta, \"readwrite\", async (transaction) => {\n\t\t\tconst store = transaction.objectStore(STORES.meta);\n\t\t\tconst metadata = await requestResult(store.get(META_KEY) as IDBRequest<MetaRow>);\n\t\t\tif (metadata === undefined) throw new Error(\"Durable IndexedDB metadata is missing\");\n\t\t\tif (!Number.isSafeInteger(metadata.nextId)) throw new Error(\"ID space is exhausted\");\n\t\t\tawait requestResult(store.put({ ...metadata, nextId: metadata.nextId + 1 }));\n\t\t\treturn idFromNumber<I>(metadata.nextId);\n\t\t});\n\t}\n\n\tconversation(id: ConversationId, _context: Context): Promise<ConversationRecord | undefined> {\n\t\treturn this.transaction(\n\t\t\tSTORES.conversations,\n\t\t\t\"readonly\",\n\t\t\tasync (transaction) =>\n\t\t\t\t(\n\t\t\t\t\tawait requestResult(\n\t\t\t\t\t\ttransaction.objectStore(STORES.conversations).get(id) as IDBRequest<ConversationRow | undefined>,\n\t\t\t\t\t)\n\t\t\t\t)?.record,\n\t\t);\n\t}\n\n\tasync scanConversations(\n\t\tquery: ConversationQuery,\n\t\tlimit: number,\n\t\tcursor: Cursor | undefined,\n\t\t_context: Context,\n\t): Promise<Page<ConversationRecord, Cursor>> {\n\t\tconst start = scanStart(query.order, cursor, \"ascending\");\n\t\treturn this.transaction(STORES.conversations, \"readonly\", async (transaction) => {\n\t\t\tconst store = transaction.objectStore(STORES.conversations);\n\t\t\tconst accept = (row: ConversationRow) =>\n\t\t\t\tquery.ownerConversationId === undefined || row.ownerConversationId === query.ownerConversationId;\n\t\t\tlet rows: ConversationRow[];\n\t\t\tif (query.ownerTaskId !== undefined) {\n\t\t\t\trows = await scanCompoundRows(\n\t\t\t\t\tstore.index(INDEXES.conversationsByOwnerTask),\n\t\t\t\t\t[query.ownerTaskId],\n\t\t\t\t\tstart,\n\t\t\t\t\tlimit + 1,\n\t\t\t\t\taccept,\n\t\t\t\t);\n\t\t\t} else if (query.ownerConversationId !== undefined) {\n\t\t\t\trows = await scanCompoundRows(\n\t\t\t\t\tstore.index(INDEXES.conversationsByOwnerConversation),\n\t\t\t\t\t[query.ownerConversationId],\n\t\t\t\t\tstart,\n\t\t\t\t\tlimit + 1,\n\t\t\t\t\taccept,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\trows = await cursorValues<ConversationRow>(\n\t\t\t\t\tstore,\n\t\t\t\t\tprimaryRange(start),\n\t\t\t\t\tstart.order === \"ascending\" ? \"next\" : \"prev\",\n\t\t\t\t\tlimit + 1,\n\t\t\t\t\taccept,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn page(\n\t\t\t\trows.map((row) => row.record),\n\t\t\t\tlimit,\n\t\t\t\tstart.order,\n\t\t\t);\n\t\t});\n\t}\n\n\tentry(id: EntryId, context: Context): Promise<{ readonly entry: EntryRecord; readonly commitSeq: Seq } | undefined>;\n\tentry(\n\t\tconversationId: ConversationId,\n\t\tid: EntryId,\n\t\tcontext: Context,\n\t): Promise<{ readonly entry: EntryRecord; readonly commitSeq: Seq } | undefined>;\n\tentry(\n\t\tidOrConversationId: EntryId | ConversationId,\n\t\tidOrContext: EntryId | Context,\n\t\tcontext?: Context,\n\t): Promise<{ readonly entry: EntryRecord; readonly commitSeq: Seq } | undefined> {\n\t\treturn this.transaction([STORES.conversations, STORES.entries], \"readonly\", async (transaction) => {\n\t\t\tconst id =\n\t\t\t\tcontext === undefined\n\t\t\t\t\t? idFromNumber<EntryId>(idOrConversationId)\n\t\t\t\t\t: typeof idOrContext === \"number\"\n\t\t\t\t\t\t? idFromNumber<EntryId>(idOrContext)\n\t\t\t\t\t\t: undefined;\n\t\t\tif (id === undefined) throw new StorageRequestError(\"Storage.entry() requires an entry ID\");\n\t\t\tlet conversation: ConversationRecord | undefined;\n\t\t\tif (context !== undefined) {\n\t\t\t\tconst conversationId = idFromNumber<ConversationId>(idOrConversationId);\n\t\t\t\tconversation = await this.readConversation(transaction, conversationId);\n\t\t\t\tif (conversation === undefined) throw new StorageRequestError(`Unknown conversation: ${conversationId}`);\n\t\t\t}\n\t\t\tconst row = await requestResult(\n\t\t\t\ttransaction.objectStore(STORES.entries).get(id) as IDBRequest<EntryRow | undefined>,\n\t\t\t);\n\t\t\tif (row === undefined) return undefined;\n\t\t\tif (conversation !== undefined) {\n\t\t\t\tlet upperEntryId = MAX_KEY;\n\t\t\t\twhile (conversation.id !== row.conversationId) {\n\t\t\t\t\tif (conversation.parent === undefined) return undefined;\n\t\t\t\t\tupperEntryId = Math.min(upperEntryId, conversation.parent.at);\n\t\t\t\t\tconversation = (await this.readConversation(transaction, conversation.parent.conversationId))!;\n\t\t\t\t}\n\t\t\t\tif (row.id > upperEntryId) return undefined;\n\t\t\t}\n\t\t\treturn { entry: row.record, commitSeq: row.commitSeq };\n\t\t});\n\t}\n\n\tfindLatestHeadMarker(\n\t\tconversationId: ConversationId,\n\t\tatOrBeforeEntryId: EntryId | undefined,\n\t\t_context: Context,\n\t): Promise<(EntryRecord & { readonly head: EntryId }) | undefined> {\n\t\treturn this.transaction([STORES.conversations, STORES.entries], \"readonly\", async (transaction) => {\n\t\t\tlet conversation = await this.readConversation(transaction, conversationId);\n\t\t\tif (conversation === undefined) throw new StorageRequestError(`Unknown conversation: ${conversationId}`);\n\t\t\tlet upper = atOrBeforeEntryId ?? MAX_KEY;\n\t\t\tconst index = transaction.objectStore(STORES.entries).index(INDEXES.entryHeadsByConversation);\n\t\t\twhile (true) {\n\t\t\t\tconst row = await firstCursorValue<EntryRow>(index, compoundIdRange([conversation.id], 0, upper), \"prev\");\n\t\t\t\tif (row !== undefined) return row.record as EntryRecord & { readonly head: EntryId };\n\t\t\t\tif (conversation.parent === undefined) return undefined;\n\t\t\t\tupper = Math.min(upper, conversation.parent.at);\n\t\t\t\tconversation = (await this.readConversation(transaction, conversation.parent.conversationId))!;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync scanEntries(\n\t\tquery: EntryQuery,\n\t\tlimit: number,\n\t\tcursor: Cursor | undefined,\n\t\t_context: Context,\n\t): Promise<Page<EntryRecord, Cursor>> {\n\t\tconst start = scanStart(query.order, cursor, \"descending\");\n\t\treturn this.transaction([STORES.conversations, STORES.entries], \"readonly\", async (transaction) => {\n\t\t\tconst values =\n\t\t\t\tstart.order === \"ascending\"\n\t\t\t\t\t? await this.readEntriesAscending(transaction, query, limit, start.after)\n\t\t\t\t\t: await this.readEntriesDescending(transaction, query, limit, start.after);\n\t\t\treturn page(values, limit, start.order);\n\t\t});\n\t}\n\n\ttask(id: TaskId, _context: Context): Promise<StoredTask | undefined> {\n\t\treturn this.transaction(\n\t\t\tSTORES.tasks,\n\t\t\t\"readonly\",\n\t\t\tasync (transaction) =>\n\t\t\t\t(await requestResult(transaction.objectStore(STORES.tasks).get(id) as IDBRequest<TaskRow | undefined>))\n\t\t\t\t\t?.record,\n\t\t);\n\t}\n\n\tasync scanTasks(\n\t\tquery: TaskQuery,\n\t\tlimit: number,\n\t\tcursor: Cursor | undefined,\n\t\t_context: Context,\n\t): Promise<Page<StoredTask, Cursor>> {\n\t\tconst start = scanStart(query.order, cursor, \"ascending\");\n\t\treturn this.transaction(STORES.tasks, \"readonly\", async (transaction) => {\n\t\t\tconst store = transaction.objectStore(STORES.tasks);\n\t\t\tconst accept = (row: TaskRow) =>\n\t\t\t\t(query.conversationId === undefined || row.conversationId === query.conversationId) &&\n\t\t\t\t(query.kind === undefined || row.kind === query.kind) &&\n\t\t\t\t(query.status === undefined || row.status === query.status) &&\n\t\t\t\t(query.abortRequested === undefined || row.abortRequested === (query.abortRequested ? 1 : 0)) &&\n\t\t\t\t(query.background === undefined || row.background === (query.background ? 1 : 0));\n\t\t\tlet source: IDBObjectStore | IDBIndex = store;\n\t\t\tlet prefix: readonly IDBValidKey[] | undefined;\n\t\t\tif (query.status !== undefined) {\n\t\t\t\tsource = store.index(INDEXES.tasksByStatus);\n\t\t\t\tprefix = [query.status];\n\t\t\t} else if (query.conversationId !== undefined) {\n\t\t\t\tsource = store.index(INDEXES.tasksByConversation);\n\t\t\t\tprefix = [query.conversationId];\n\t\t\t} else if (query.kind !== undefined) {\n\t\t\t\tsource = store.index(INDEXES.tasksByKind);\n\t\t\t\tprefix = [query.kind];\n\t\t\t} else if (query.abortRequested !== undefined) {\n\t\t\t\tsource = store.index(INDEXES.tasksByAbortRequested);\n\t\t\t\tprefix = [query.abortRequested ? 1 : 0];\n\t\t\t} else if (query.background !== undefined) {\n\t\t\t\tsource = store.index(INDEXES.tasksByBackground);\n\t\t\t\tprefix = [query.background ? 1 : 0];\n\t\t\t}\n\t\t\tconst rows =\n\t\t\t\tprefix === undefined\n\t\t\t\t\t? await cursorValues<TaskRow>(\n\t\t\t\t\t\t\tsource,\n\t\t\t\t\t\t\tprimaryRange(start),\n\t\t\t\t\t\t\tstart.order === \"ascending\" ? \"next\" : \"prev\",\n\t\t\t\t\t\t\tlimit + 1,\n\t\t\t\t\t\t\taccept,\n\t\t\t\t\t\t)\n\t\t\t\t\t: await scanCompoundRows<TaskRow>(source as IDBIndex, prefix, start, limit + 1, accept);\n\t\t\treturn page(\n\t\t\t\trows.map((row) => row.record),\n\t\t\t\tlimit,\n\t\t\t\tstart.order,\n\t\t\t);\n\t\t});\n\t}\n\n\tsubmission(id: SubmissionId, _context: Context): Promise<SubmissionRecord | undefined> {\n\t\treturn this.transaction(\n\t\t\tSTORES.submissions,\n\t\t\t\"readonly\",\n\t\t\tasync (transaction) =>\n\t\t\t\t(\n\t\t\t\t\tawait requestResult(\n\t\t\t\t\t\ttransaction.objectStore(STORES.submissions).get(id) as IDBRequest<SubmissionRow | undefined>,\n\t\t\t\t\t)\n\t\t\t\t)?.record,\n\t\t);\n\t}\n\n\tasync scanSubmissions(\n\t\tquery: SubmissionQuery,\n\t\tlimit: number,\n\t\tcursor: Cursor | undefined,\n\t\t_context: Context,\n\t): Promise<Page<SubmissionRecord, Cursor>> {\n\t\tconst start = scanStart(query.order, cursor, \"ascending\");\n\t\treturn this.transaction(STORES.submissions, \"readonly\", async (transaction) => {\n\t\t\tconst store = transaction.objectStore(STORES.submissions);\n\t\t\tconst accept = (row: SubmissionRow) =>\n\t\t\t\t(query.conversationId === undefined || row.conversationId === query.conversationId) &&\n\t\t\t\t(query.status === undefined || row.status === query.status);\n\t\t\tlet rows: SubmissionRow[];\n\t\t\tif (query.status !== undefined) {\n\t\t\t\trows = await scanCompoundRows(\n\t\t\t\t\tstore.index(INDEXES.submissionsByStatus),\n\t\t\t\t\t[query.status],\n\t\t\t\t\tstart,\n\t\t\t\t\tlimit + 1,\n\t\t\t\t\taccept,\n\t\t\t\t);\n\t\t\t} else if (query.conversationId !== undefined) {\n\t\t\t\trows = await scanCompoundRows(\n\t\t\t\t\tstore.index(INDEXES.submissionsByConversation),\n\t\t\t\t\t[query.conversationId],\n\t\t\t\t\tstart,\n\t\t\t\t\tlimit + 1,\n\t\t\t\t\taccept,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\trows = await cursorValues<SubmissionRow>(\n\t\t\t\t\tstore,\n\t\t\t\t\tprimaryRange(start),\n\t\t\t\t\tstart.order === \"ascending\" ? \"next\" : \"prev\",\n\t\t\t\t\tlimit + 1,\n\t\t\t\t\taccept,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn page(\n\t\t\t\trows.map((row) => row.record),\n\t\t\t\tlimit,\n\t\t\t\tstart.order,\n\t\t\t);\n\t\t});\n\t}\n\n\tsubmissionByRequest(\n\t\tconversationId: ConversationId,\n\t\trequestId: string,\n\t\t_context: Context,\n\t): Promise<SubmissionRecord | undefined> {\n\t\treturn this.transaction(STORES.submissions, \"readonly\", async (transaction) => {\n\t\t\tconst row = await requestResult(\n\t\t\t\ttransaction\n\t\t\t\t\t.objectStore(STORES.submissions)\n\t\t\t\t\t.index(INDEXES.submissionsByRequest)\n\t\t\t\t\t.get([conversationId, requestId]) as IDBRequest<SubmissionRow | undefined>,\n\t\t\t);\n\t\t\treturn row?.record;\n\t\t});\n\t}\n\n\tfindDocument(address: DocumentAddress, at: DocumentPoint, _context: Context): Promise<DocumentRecord | undefined> {\n\t\treturn this.transaction(STORES.documents, \"readonly\", async (transaction) => {\n\t\t\tconst row = await firstCursorValue<DocumentRow>(\n\t\t\t\ttransaction.objectStore(STORES.documents).index(INDEXES.documentsByAddress),\n\t\t\t\tkeyRanges().bound([...addressPrefix(address), 0, 0], [...addressPrefix(address), MAX_KEY, MAX_KEY]),\n\t\t\t\t\"prev\",\n\t\t\t\t(value) => isAliveAt(value.record, at),\n\t\t\t);\n\t\t\treturn row?.record;\n\t\t});\n\t}\n\n\tdocument(id: DocumentId, at: DocumentPoint, _context: Context): Promise<StoredDocument | undefined> {\n\t\treturn this.transaction([STORES.documents, STORES.documentRevisions], \"readonly\", (transaction) =>\n\t\t\tthis.materializeDocument(transaction, id, at),\n\t\t);\n\t}\n\n\tasync scanDocuments(\n\t\tquery: DocumentQuery,\n\t\tlimit: number,\n\t\tcursor: Cursor | undefined,\n\t\t_context: Context,\n\t): Promise<Page<DocumentRecord, Cursor>> {\n\t\tconst after = cursorId<DocumentId>(cursor);\n\t\treturn this.transaction(STORES.documents, \"readonly\", async (transaction) => {\n\t\t\tconst scope = scopeColumns(query.scope);\n\t\t\tconst store = transaction.objectStore(STORES.documents);\n\t\t\tconst index =\n\t\t\t\tquery.kind === undefined\n\t\t\t\t\t? store.index(INDEXES.documentsByScope)\n\t\t\t\t\t: store.index(INDEXES.documentsByScopeKind);\n\t\t\tconst prefix: readonly IDBValidKey[] =\n\t\t\t\tquery.kind === undefined ? [scope.scopeKind, scope.ownerId] : [scope.scopeKind, scope.ownerId, query.kind];\n\t\t\tconst rows = await cursorValues<DocumentRow>(\n\t\t\t\tindex,\n\t\t\t\tcompoundIdRange(prefix, after ?? 0, MAX_KEY, after !== undefined),\n\t\t\t\t\"next\",\n\t\t\t\tlimit + 1,\n\t\t\t\t(row) => isAliveAt(row.record, query.at),\n\t\t\t);\n\t\t\treturn page(\n\t\t\t\trows.map((row) => row.record),\n\t\t\t\tlimit,\n\t\t\t);\n\t\t});\n\t}\n\n\tclose(_context: Context): Promise<void> {\n\t\tif (this.closing === undefined) {\n\t\t\tthis.closed = true;\n\t\t\tthis.closing = this.closeDatabase();\n\t\t}\n\t\treturn this.closing;\n\t}\n\n\tprivate async closeDatabase(): Promise<void> {\n\t\tif (this.activeOperations > 0) {\n\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\tthis.operationsDrained = resolve;\n\t\t\t});\n\t\t}\n\t\tthis.database.close();\n\t}\n\n\tprivate async transaction<T>(\n\t\tstores: string | readonly string[],\n\t\tmode: IDBTransactionMode,\n\t\toperation: (transaction: IDBTransaction) => Promise<T>,\n\t): Promise<T> {\n\t\tthis.assertOpen();\n\t\tthis.activeOperations++;\n\t\ttry {\n\t\t\tconst transaction = this.database.transaction(stores, mode);\n\t\t\tconst done = transactionResult(transaction);\n\t\t\ttry {\n\t\t\t\tconst value = await operation(transaction);\n\t\t\t\tawait done;\n\t\t\t\treturn value;\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\ttransaction.abort();\n\t\t\t\t} catch {\n\t\t\t\t\t// It may already have aborted or committed.\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait done;\n\t\t\t\t} catch {\n\t\t\t\t\t// Preserve the operation failure.\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t} finally {\n\t\t\tif (--this.activeOperations === 0) this.operationsDrained?.();\n\t\t}\n\t}\n\n\tprivate async readConversation(\n\t\ttransaction: IDBTransaction,\n\t\tid: ConversationId,\n\t): Promise<ConversationRecord | undefined> {\n\t\treturn (\n\t\t\tawait requestResult(\n\t\t\t\ttransaction.objectStore(STORES.conversations).get(id) as IDBRequest<ConversationRow | undefined>,\n\t\t\t)\n\t\t)?.record;\n\t}\n\n\tprivate async readEntriesDescending(\n\t\ttransaction: IDBTransaction,\n\t\tquery: EntryQuery,\n\t\tlimit: number,\n\t\tafter: number | undefined,\n\t): Promise<EntryRecord[]> {\n\t\tlet conversation = await this.readConversation(transaction, query.conversationId);\n\t\tif (conversation === undefined) throw new StorageRequestError(`Unknown conversation: ${query.conversationId}`);\n\t\tlet upper = query.maxEntryId ?? MAX_KEY;\n\t\tif (after !== undefined) upper = Math.min(upper, after - 1);\n\t\tconst minimum = query.minEntryId ?? 0;\n\t\tconst values: EntryRecord[] = [];\n\t\tconst index = transaction.objectStore(STORES.entries).index(INDEXES.entriesByConversation);\n\t\twhile (true) {\n\t\t\tif (upper >= minimum) {\n\t\t\t\tconst rows = await cursorValues<EntryRow>(\n\t\t\t\t\tindex,\n\t\t\t\t\tcompoundIdRange([conversation.id], minimum, upper),\n\t\t\t\t\t\"prev\",\n\t\t\t\t\tlimit + 1 - values.length,\n\t\t\t\t);\n\t\t\t\tvalues.push(...rows.map((row) => row.record));\n\t\t\t}\n\t\t\tif (values.length > limit || conversation.parent === undefined) break;\n\t\t\tupper = Math.min(upper, conversation.parent.at);\n\t\t\tif (upper < minimum) break;\n\t\t\tconversation = (await this.readConversation(transaction, conversation.parent.conversationId))!;\n\t\t}\n\t\treturn values;\n\t}\n\n\tprivate async readEntriesAscending(\n\t\ttransaction: IDBTransaction,\n\t\tquery: EntryQuery,\n\t\tlimit: number,\n\t\tafter: number | undefined,\n\t): Promise<EntryRecord[]> {\n\t\tconst segments: { readonly conversationId: ConversationId; readonly upper: number }[] = [];\n\t\tlet conversation = await this.readConversation(transaction, query.conversationId);\n\t\tif (conversation === undefined) throw new StorageRequestError(`Unknown conversation: ${query.conversationId}`);\n\t\tlet upper = query.maxEntryId ?? MAX_KEY;\n\t\tconst requestedMinimum = query.minEntryId ?? 0;\n\t\twhile (true) {\n\t\t\tsegments.push({ conversationId: conversation.id, upper });\n\t\t\tif (conversation.parent === undefined) break;\n\t\t\tupper = Math.min(upper, conversation.parent.at);\n\t\t\tif (upper < requestedMinimum) break;\n\t\t\tconversation = (await this.readConversation(transaction, conversation.parent.conversationId))!;\n\t\t}\n\t\tconst minimum = after === undefined ? requestedMinimum : Math.max(requestedMinimum, after + 1);\n\t\tconst values: EntryRecord[] = [];\n\t\tconst index = transaction.objectStore(STORES.entries).index(INDEXES.entriesByConversation);\n\t\tfor (const segment of segments.reverse()) {\n\t\t\tif (segment.upper < minimum) continue;\n\t\t\tconst rows = await cursorValues<EntryRow>(\n\t\t\t\tindex,\n\t\t\t\tcompoundIdRange([segment.conversationId], minimum, segment.upper),\n\t\t\t\t\"next\",\n\t\t\t\tlimit + 1 - values.length,\n\t\t\t);\n\t\t\tvalues.push(...rows.map((row) => row.record));\n\t\t\tif (values.length > limit) break;\n\t\t}\n\t\treturn values;\n\t}\n\n\tprivate async materializeDocument(\n\t\ttransaction: IDBTransaction,\n\t\tid: DocumentId,\n\t\tat: DocumentPoint,\n\t): Promise<StoredDocument | undefined> {\n\t\tconst record = (\n\t\t\tawait requestResult(transaction.objectStore(STORES.documents).get(id) as IDBRequest<DocumentRow | undefined>)\n\t\t)?.record;\n\t\tif (record === undefined) return undefined;\n\t\tif (at !== \"current\" && isCurrentOnly(record)) {\n\t\t\tthrow new StorageRequestError(`Document ${id} does not retain historical content`);\n\t\t}\n\t\tif (!isAliveAt(record, at)) return undefined;\n\t\tconst upper = at === \"current\" ? MAX_KEY : at;\n\t\tconst revisions = transaction.objectStore(STORES.documentRevisions);\n\t\tconst base = await firstCursorValue<RevisionRow>(\n\t\t\trevisions.index(INDEXES.documentRevisionsByKind),\n\t\t\tkeyRanges().bound([id, \"base\", 0], [id, \"base\", upper]),\n\t\t\t\"prev\",\n\t\t);\n\t\tif (base === undefined || base.kind !== \"base\") throw new Error(`Document ${id} is missing a required base`);\n\t\tlet value = base.content as JsonObject;\n\t\tconst tail =\n\t\t\tbase.seq >= upper\n\t\t\t\t? []\n\t\t\t\t: await cursorValues<RevisionRow>(\n\t\t\t\t\t\trevisions,\n\t\t\t\t\t\tkeyRanges().bound([id, base.seq], [id, upper], true),\n\t\t\t\t\t\t\"next\",\n\t\t\t\t\t\tMAX_KEY,\n\t\t\t\t\t);\n\t\tfor (const revision of tail) {\n\t\t\tif (revision.kind !== \"delta\" || revision.version !== base.version) {\n\t\t\t\tthrow new Error(`Document ${id} crosses a stored version boundary without a base`);\n\t\t\t}\n\t\t\tvalue = apply(value, revision.content as readonly Op[]) as JsonObject;\n\t\t}\n\t\treturn { record, version: base.version, value, deltasSinceBase: tail.length };\n\t}\n\n\tprivate async checkGlobalIds(transaction: IDBTransaction, writes: readonly StorageWrite[]): Promise<void> {\n\t\tconst store = transaction.objectStore(STORES.recordIds);\n\t\tconst claimed = new Map<Id<string>, TableName>();\n\t\tfor (const write of writes) {\n\t\t\tif (write.type === \"document.change\" || write.type === \"document.retire\") continue;\n\t\t\tconst document = write.type === \"document.create\" || write.type === \"document.copy\";\n\t\t\tconst table: TableName = document ? \"document\" : write.type;\n\t\t\tconst id = document ? write.record.id : write.value.id;\n\t\t\tconst existing = (await requestResult(store.get(id) as IDBRequest<RecordIdRow | undefined>))?.recordType;\n\t\t\tconst earlier = claimed.get(id);\n\t\t\tif (table === \"conversation\" || table === \"entry\" || table === \"document\") {\n\t\t\t\tif (existing !== undefined) throw new Error(`ID ${id} already belongs to ${existing}`);\n\t\t\t\tif (earlier !== undefined) throw new Error(`ID ${id} is written more than once`);\n\t\t\t} else {\n\t\t\t\tif (existing !== undefined && existing !== table)\n\t\t\t\t\tthrow new Error(`ID ${id} already belongs to ${existing}`);\n\t\t\t\tif (earlier !== undefined && earlier !== table) throw new Error(`ID ${id} is written as two record types`);\n\t\t\t}\n\t\t\tclaimed.set(id, table);\n\t\t}\n\t}\n\n\tprivate prepareDocumentActions(writes: readonly StorageWrite[]): Map<DocumentId, DocumentAction> {\n\t\tconst actions = new Map<DocumentId, DocumentAction>();\n\t\tfor (const write of writes) {\n\t\t\tif (\n\t\t\t\twrite.type !== \"document.create\" &&\n\t\t\t\twrite.type !== \"document.copy\" &&\n\t\t\t\twrite.type !== \"document.change\" &&\n\t\t\t\twrite.type !== \"document.retire\"\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst id = write.type === \"document.create\" || write.type === \"document.copy\" ? write.record.id : write.id;\n\t\t\tlet action = actions.get(id);\n\t\t\tif (action === undefined) {\n\t\t\t\taction = { retire: false };\n\t\t\t\tactions.set(id, action);\n\t\t\t}\n\t\t\tswitch (write.type) {\n\t\t\t\tcase \"document.create\":\n\t\t\t\t\tif (action.create !== undefined || action.content !== undefined || action.copy !== undefined) {\n\t\t\t\t\t\tthrow new Error(`Document ${id} has more than one content command`);\n\t\t\t\t\t}\n\t\t\t\t\taction.create = write.record;\n\t\t\t\t\taction.content = write.content;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"document.copy\":\n\t\t\t\t\tif (action.create !== undefined || action.content !== undefined || action.copy !== undefined) {\n\t\t\t\t\t\tthrow new Error(`Document ${id} has more than one content command`);\n\t\t\t\t\t}\n\t\t\t\t\taction.create = write.record;\n\t\t\t\t\taction.copy = write.source;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"document.change\":\n\t\t\t\t\tif (action.content !== undefined || action.copy !== undefined) {\n\t\t\t\t\t\tthrow new Error(`Document ${id} has more than one content command`);\n\t\t\t\t\t}\n\t\t\t\t\taction.content = write.content;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"document.retire\":\n\t\t\t\t\tif (action.retire) throw new Error(`Document ${id} is retired more than once`);\n\t\t\t\t\taction.retire = true;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn actions;\n\t}\n\n\tprivate async checkDocumentActions(\n\t\ttransaction: IDBTransaction,\n\t\tactions: ReadonlyMap<DocumentId, DocumentAction>,\n\t): Promise<void> {\n\t\tconst documents = transaction.objectStore(STORES.documents);\n\t\tconst revisions = transaction.objectStore(STORES.documentRevisions);\n\t\tconst liveCounts = new Map<string, number>();\n\t\tfor (const [id, action] of actions) {\n\t\t\tif (action.copy !== undefined && actions.has(action.copy.id)) {\n\t\t\t\tthrow new Error(`Document copy ${id} source is changed in the copy batch`);\n\t\t\t}\n\t\t\tconst existing = (await requestResult(documents.get(id) as IDBRequest<DocumentRow | undefined>))?.record;\n\t\t\tif (action.create === undefined && existing === undefined) throw new Error(`Unknown document: ${id}`);\n\t\t\tif (action.create !== undefined && existing !== undefined) throw new Error(`Document ${id} already exists`);\n\t\t\tif (existing?.retiredAt !== undefined) throw new Error(`Document ${id} is retired`);\n\t\t\tif (action.content?.kind === \"delta\") {\n\t\t\t\tconst previous = await firstCursorValue<RevisionRow>(revisions, compoundIdRange([id], 0, MAX_KEY), \"prev\");\n\t\t\t\tif (previous === undefined) throw new Error(`Document ${id} delta has no base`);\n\t\t\t\tif (previous.version !== action.content.version) {\n\t\t\t\t\tthrow new Error(`Document ${id} version transition requires a base`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst record = action.create ?? existing!;\n\t\t\tconst key = addressKey(record);\n\t\t\tlet live = liveCounts.get(key);\n\t\t\tif (live === undefined) live = (await this.currentDocumentId(transaction, record)) === undefined ? 0 : 1;\n\t\t\tif (action.retire && existing !== undefined) live--;\n\t\t\tif (action.create !== undefined && !action.retire) live++;\n\t\t\tliveCounts.set(key, live);\n\t\t}\n\t\tfor (const live of liveCounts.values()) {\n\t\t\tif (live > 1) throw new Error(\"Document address already has a current incarnation\");\n\t\t}\n\t}\n\n\tprivate async currentDocumentId(\n\t\ttransaction: IDBTransaction,\n\t\taddress: DocumentAddress | DocumentCreate | DocumentRecord,\n\t): Promise<DocumentId | undefined> {\n\t\tconst row = await firstCursorValue<DocumentRow>(\n\t\t\ttransaction.objectStore(STORES.documents).index(INDEXES.documentsByAddress),\n\t\t\tkeyRanges().bound([...addressPrefix(address), 0, 0], [...addressPrefix(address), MAX_KEY, MAX_KEY]),\n\t\t\t\"prev\",\n\t\t\t(value) => value.retiredAt === undefined,\n\t\t);\n\t\treturn row?.id;\n\t}\n\n\tprivate async claimId(transaction: IDBTransaction, id: Id<string>, recordType: TableName): Promise<void> {\n\t\tawait requestResult(transaction.objectStore(STORES.recordIds).put({ id, recordType } satisfies RecordIdRow));\n\t}\n\n\tprivate async applyTableWrite(transaction: IDBTransaction, write: StorageWrite, seq: Seq): Promise<void> {\n\t\tswitch (write.type) {\n\t\t\tcase \"conversation\":\n\t\t\t\tawait this.claimId(transaction, write.value.id, \"conversation\");\n\t\t\t\tawait requestResult(\n\t\t\t\t\ttransaction.objectStore(STORES.conversations).add({\n\t\t\t\t\t\tid: write.value.id,\n\t\t\t\t\t\t...(write.value.owner === undefined\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\townerConversationId: write.value.owner.conversationId,\n\t\t\t\t\t\t\t\t\townerTaskId: write.value.owner.taskId,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\trecord: write.value,\n\t\t\t\t\t} satisfies ConversationRow),\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"entry\":\n\t\t\t\tawait this.claimId(transaction, write.value.id, \"entry\");\n\t\t\t\tawait requestResult(\n\t\t\t\t\ttransaction.objectStore(STORES.entries).add({\n\t\t\t\t\t\tid: write.value.id,\n\t\t\t\t\t\tconversationId: write.value.conversationId,\n\t\t\t\t\t\t...(write.value.head === undefined ? {} : { headConversationId: write.value.conversationId }),\n\t\t\t\t\t\tcommitSeq: seq,\n\t\t\t\t\t\trecord: write.value,\n\t\t\t\t\t} satisfies EntryRow),\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"task\":\n\t\t\t\tawait this.claimId(transaction, write.value.id, \"task\");\n\t\t\t\tawait requestResult(\n\t\t\t\t\ttransaction.objectStore(STORES.tasks).put({\n\t\t\t\t\t\tid: write.value.id,\n\t\t\t\t\t\tconversationId: write.value.conversationId,\n\t\t\t\t\t\tkind: write.value.kind,\n\t\t\t\t\t\tstatus: write.value.state.status,\n\t\t\t\t\t\tabortRequested: write.value.abortRequested ? 1 : 0,\n\t\t\t\t\t\tbackground: write.value.background ? 1 : 0,\n\t\t\t\t\t\trecord: write.value,\n\t\t\t\t\t} satisfies TaskRow),\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"submission\":\n\t\t\t\tawait this.claimId(transaction, write.value.id, \"submission\");\n\t\t\t\tawait requestResult(\n\t\t\t\t\ttransaction.objectStore(STORES.submissions).put({\n\t\t\t\t\t\tid: write.value.id,\n\t\t\t\t\t\tconversationId: write.value.conversationId,\n\t\t\t\t\t\t...(write.value.requestId === undefined ? {} : { requestId: write.value.requestId }),\n\t\t\t\t\t\tstatus: write.value.status,\n\t\t\t\t\t\trecord: write.value,\n\t\t\t\t\t} satisfies SubmissionRow),\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"document.create\":\n\t\t\tcase \"document.copy\":\n\t\t\tcase \"document.change\":\n\t\t\tcase \"document.retire\":\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate async applyDocumentActions(\n\t\ttransaction: IDBTransaction,\n\t\tactions: ReadonlyMap<DocumentId, DocumentAction>,\n\t\tseq: Seq,\n\t): Promise<void> {\n\t\tconst documents = transaction.objectStore(STORES.documents);\n\t\tconst revisions = transaction.objectStore(STORES.documentRevisions);\n\t\tfor (const [id, action] of actions) {\n\t\t\tlet content = action.content;\n\t\t\tif (action.copy !== undefined) {\n\t\t\t\ttry {\n\t\t\t\t\tconst stored = await this.materializeDocument(transaction, action.copy.id, action.copy.at);\n\t\t\t\t\tif (stored === undefined) throw new Error(`Fork source document ${action.copy.id} cannot be read`);\n\t\t\t\t\tconst create = action.create!;\n\t\t\t\t\tif (\n\t\t\t\t\t\tstored.record.scope.kind !== \"conversation\" ||\n\t\t\t\t\t\tcreate.scope.kind !== \"conversation\" ||\n\t\t\t\t\t\tstored.record.kind !== create.kind ||\n\t\t\t\t\t\tstored.record.key !== create.key ||\n\t\t\t\t\t\tstored.record.history !== create.history ||\n\t\t\t\t\t\tstored.record.fork !== create.fork\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new Error(`Fork source document ${action.copy.id} does not match the copied record`);\n\t\t\t\t\t}\n\t\t\t\t\tcontent = { kind: \"base\", version: stored.version, value: stored.value };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthrow new Error(`Document copy ${id} was rejected`, { cause: error });\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet record: DocumentRecord;\n\t\t\tif (action.create !== undefined) {\n\t\t\t\trecord = {\n\t\t\t\t\t...action.create,\n\t\t\t\t\tcreatedAt: seq,\n\t\t\t\t\t...(action.retire ? { retiredAt: seq } : {}),\n\t\t\t\t};\n\t\t\t\tconst parts = addressParts(record);\n\t\t\t\tawait this.claimId(transaction, id, \"document\");\n\t\t\t\tawait requestResult(\n\t\t\t\t\tdocuments.add({\n\t\t\t\t\t\tid,\n\t\t\t\t\t\t...parts,\n\t\t\t\t\t\tcreatedAt: seq,\n\t\t\t\t\t\t...(action.retire ? { retiredAt: seq } : {}),\n\t\t\t\t\t\trecord,\n\t\t\t\t\t} satisfies DocumentRow),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\trecord = (await requestResult(documents.get(id) as IDBRequest<DocumentRow>)).record;\n\t\t\t}\n\n\t\t\tif (content !== undefined) {\n\t\t\t\tif (content.kind === \"base\" && isCurrentOnly(record)) {\n\t\t\t\t\tawait requestResult(revisions.delete(compoundIdRange([id], 0, MAX_KEY)));\n\t\t\t\t}\n\t\t\t\tawait requestResult(\n\t\t\t\t\trevisions.add({\n\t\t\t\t\t\tdocumentId: id,\n\t\t\t\t\t\tseq,\n\t\t\t\t\t\tkind: content.kind,\n\t\t\t\t\t\tversion: content.version,\n\t\t\t\t\t\tcontent: content.kind === \"base\" ? content.value : content.ops,\n\t\t\t\t\t} satisfies RevisionRow),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (action.retire) {\n\t\t\t\tif (action.create === undefined) {\n\t\t\t\t\trecord = { ...record, retiredAt: seq };\n\t\t\t\t\tconst row = (await requestResult(documents.get(id) as IDBRequest<DocumentRow>))!;\n\t\t\t\t\tawait requestResult(documents.put({ ...row, retiredAt: seq, record } satisfies DocumentRow));\n\t\t\t\t}\n\t\t\t\tif (isCurrentOnly(record)) {\n\t\t\t\t\tawait requestResult(revisions.delete(compoundIdRange([id], 0, MAX_KEY)));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate assertOpen(): void {\n\t\tif (this.closed) throw new Error(\"IndexedDbStorage is closed\");\n\t}\n}\n\nexport type { IndexedDbStorageOptions };\n"]}
@@ -36,6 +36,8 @@ export declare class JsonlStorage implements Storage {
36
36
  }) | undefined>;
37
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
38
  task(id: TaskId, context: Context): Promise<({
39
+ readonly trace?: import("@earendil-works/pi-telemetry").TelemetryCarrier;
40
+ readonly links?: readonly import("@earendil-works/pi-telemetry").TelemetryCarrier[];
39
41
  readonly id: TaskId<JsonValue>;
40
42
  readonly conversationId: ConversationId;
41
43
  readonly kind: string;
@@ -48,6 +50,7 @@ export declare class JsonlStorage implements Storage {
48
50
  readonly abandonOnRestart?: true;
49
51
  readonly startedAt?: number;
50
52
  readonly endedAt?: number;
53
+ readonly restarts?: number;
51
54
  } & ({
52
55
  readonly state: {
53
56
  readonly status: "pending";
@@ -63,6 +66,11 @@ export declare class JsonlStorage implements Storage {
63
66
  readonly on: readonly TaskId[];
64
67
  readonly policy: import("../../types.ts").JoinPolicy;
65
68
  readonly outcome?: never;
69
+ } | {
70
+ readonly status: "sleeping";
71
+ readonly checkpoint: JsonValue;
72
+ readonly until: number;
73
+ readonly outcome?: never;
66
74
  };
67
75
  readonly memos?: Readonly<Record<string, JsonValue>>;
68
76
  } | {
@@ -78,6 +86,8 @@ export declare class JsonlStorage implements Storage {
78
86
  readonly memos?: never;
79
87
  })) | undefined>;
80
88
  scanTasks(query: TaskQuery, limit: number, cursor: Cursor | undefined, context: Context): Promise<import("../../types.ts").Page<{
89
+ readonly trace?: import("@earendil-works/pi-telemetry").TelemetryCarrier;
90
+ readonly links?: readonly import("@earendil-works/pi-telemetry").TelemetryCarrier[];
81
91
  readonly id: TaskId<JsonValue>;
82
92
  readonly conversationId: ConversationId;
83
93
  readonly kind: string;
@@ -90,6 +100,7 @@ export declare class JsonlStorage implements Storage {
90
100
  readonly abandonOnRestart?: true;
91
101
  readonly startedAt?: number;
92
102
  readonly endedAt?: number;
103
+ readonly restarts?: number;
93
104
  } & ({
94
105
  readonly state: {
95
106
  readonly status: "pending";
@@ -105,6 +116,11 @@ export declare class JsonlStorage implements Storage {
105
116
  readonly on: readonly TaskId[];
106
117
  readonly policy: import("../../types.ts").JoinPolicy;
107
118
  readonly outcome?: never;
119
+ } | {
120
+ readonly status: "sleeping";
121
+ readonly checkpoint: JsonValue;
122
+ readonly until: number;
123
+ readonly outcome?: never;
108
124
  };
109
125
  readonly memos?: Readonly<Record<string, JsonValue>>;
110
126
  } | {
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/storage/jsonl/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/storage/jsonl/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhE,OAAO,KAAK,EACX,cAAc,EACd,iBAAiB,EACjB,MAAM,EACN,eAAe,EAGf,UAAU,EACV,aAAa,EACb,aAAa,EACb,OAAO,EACP,UAAU,EACV,EAAE,EACF,GAAG,EACH,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,MAAM,EACN,SAAS,EAET,MAAM,gBAAgB,CAAC;AAmDxB,MAAM,MAAM,mBAAmB,GAAG;IACjC,wFAAwF;IACxF,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,KAAK;IAC9C,YAAY,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAGzC;CACD;AAED,qBAAa,yBAA0B,SAAQ,KAAK;IACnD,YAAY,KAAK,EAAE,KAAK,EAGvB;CACD;AAmJD,6DAA6D;AAC7D,qBAAa,YAAa,YAAW,OAAO;IAC3C,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAyB;IAC9D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAwC;IAE3D,OAAO,eAKN;IAED,8EAA8E;IAC9E,OAAa,IAAI,CAChB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,mBAAwB,GAC/B,OAAO,CAAC,YAAY,CAAC,CAUvB;IAEK,MAAM,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CA6B5E;IAEK,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAE/C;IAEK,YAAY,CAAC,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,oEAEtD;IAEK,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,4HAE5G;IAED,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,KAAK,CAAC,cAAc,EAAE,cAAc,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAY7F,oBAAoB,CACzB,cAAc,EAAE,cAAc,EAC9B,iBAAiB,EAAE,OAAO,GAAG,SAAS,EACtC,OAAO,EAAE,OAAO;;oBAGhB;IAEK,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,qHAE/F;IAEK,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAEtC;IAEK,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8CAE5F;IAEK,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,kEAElD;IAEK,eAAe,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,0HAExG;IAEK,mBAAmB,CAAC,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,kEAE5F;IAEK,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,gEAE/E;IAEK,QAAQ,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,gEAEjE;IAEK,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,wHAEpG;IAEK,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAI3C;IAED,OAAO,CAAC,YAAY;IAmEpB,OAAO,CAAC,gBAAgB;IA6CxB,OAAO,CAAC,iBAAiB;IAWzB,oGAAoG;YACtF,eAAe;YASf,cAAc;YAkBd,OAAO;IAwOrB,OAAO,CAAC,MAAM,CAAC,aAAa;mBAmBP,SAAS;YAwChB,WAAW;IAMzB,OAAO,KAAK,KAAK,GAGhB;IAED,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,YAAY;CAIpB"}
@@ -154,7 +154,7 @@ export class MemoryStorage {
154
154
  entryCommitSeqs: new Map(),
155
155
  tasks: new Map(),
156
156
  taskIds: [],
157
- taskIdsByStatus: { pending: [], running: [], waiting: [], completing: [], terminal: [] },
157
+ taskIdsByStatus: { pending: [], running: [], waiting: [], sleeping: [], completing: [], terminal: [] },
158
158
  submissions: new Map(),
159
159
  submissionIds: [],
160
160
  submissionIdsByStatus: { queued: [], placed: [], done: [], unanswered: [] },