@agentshouse/mdruntime 0.1.0-alpha.42 → 0.1.0-alpha.44

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 (59) hide show
  1. package/AGENTS.md +22 -11
  2. package/dist/adapter.d.ts +23 -1
  3. package/dist/adapter.d.ts.map +1 -1
  4. package/dist/adapter.js.map +1 -1
  5. package/dist/bootstrap.d.ts.map +1 -1
  6. package/dist/bootstrap.js +6 -1
  7. package/dist/bootstrap.js.map +1 -1
  8. package/dist/change-set.d.ts.map +1 -1
  9. package/dist/change-set.js +3 -2
  10. package/dist/change-set.js.map +1 -1
  11. package/dist/client.d.ts +1 -0
  12. package/dist/client.d.ts.map +1 -1
  13. package/dist/client.js +4 -0
  14. package/dist/client.js.map +1 -1
  15. package/dist/connection.d.ts +1 -0
  16. package/dist/connection.d.ts.map +1 -1
  17. package/dist/connection.js +86 -31
  18. package/dist/connection.js.map +1 -1
  19. package/dist/host.d.ts.map +1 -1
  20. package/dist/host.js +2 -0
  21. package/dist/host.js.map +1 -1
  22. package/dist/index.d.ts +1 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js.map +1 -1
  25. package/dist/memory.d.ts +2 -1
  26. package/dist/memory.d.ts.map +1 -1
  27. package/dist/memory.js +53 -10
  28. package/dist/memory.js.map +1 -1
  29. package/dist/overlay.d.ts +7 -2
  30. package/dist/overlay.d.ts.map +1 -1
  31. package/dist/overlay.js +48 -15
  32. package/dist/overlay.js.map +1 -1
  33. package/dist/query.d.ts +4 -0
  34. package/dist/query.d.ts.map +1 -1
  35. package/dist/query.js +4 -1
  36. package/dist/query.js.map +1 -1
  37. package/dist/read-side.d.ts.map +1 -1
  38. package/dist/read-side.js +6 -0
  39. package/dist/read-side.js.map +1 -1
  40. package/dist/refresh.d.ts +3 -3
  41. package/dist/refresh.d.ts.map +1 -1
  42. package/dist/refresh.js +20 -4
  43. package/dist/refresh.js.map +1 -1
  44. package/dist/replica.d.ts.map +1 -1
  45. package/dist/replica.js +9 -0
  46. package/dist/replica.js.map +1 -1
  47. package/dist/rows.d.ts +3 -1
  48. package/dist/rows.d.ts.map +1 -1
  49. package/dist/rows.js +5 -3
  50. package/dist/rows.js.map +1 -1
  51. package/dist/store.d.ts +2 -1
  52. package/dist/store.d.ts.map +1 -1
  53. package/dist/store.js +20 -12
  54. package/dist/store.js.map +1 -1
  55. package/dist/wire.d.ts +1 -1
  56. package/dist/wire.d.ts.map +1 -1
  57. package/dist/wire.js +1 -0
  58. package/dist/wire.js.map +1 -1
  59. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["/workspace/packages/mdruntime/src/connection.ts"],"sourcesContent":["import { verify, type ModelVerification } from '@agentshouse/mdmodel';\nimport {\n cached,\n modelTypes,\n NO_MODEL,\n sameModel,\n type ModelState,\n type TypesResult,\n} from './model.js';\nimport { opened, type Observation } from './observation.js';\nimport {\n filterOf,\n identityOf,\n planOf,\n type DocumentQuery,\n type DocumentResult,\n type GroupQuery,\n type GroupResult,\n type HeldRooms,\n} from './query.js';\nimport { createReadSide } from './read-side.js';\nimport {\n createSearchIndex,\n searchPlanOf,\n type SearchRequest,\n type SearchResult,\n} from './search.js';\nimport {\n ROOM_CONTRACT_VERSION,\n VERSION_1_CAPABILITIES,\n type ActionResult,\n type Adapter,\n type AdapterFailure,\n type Authorization,\n type Capability,\n type DiscoveredRoom,\n type Discovery,\n type HistoryResult,\n type MutationResult,\n type ProviderLimit,\n type ConversationCards,\n type ConversationAction,\n type ProviderRefusal,\n type ServiceMode,\n type TypedSelection,\n} from './adapter.js';\nimport { bootstrapRoom } from './bootstrap.js';\nimport { changeSet, mergeChangeSets, type ChangeSet } from './change-set.js';\nimport {\n createConversationStore,\n type ChatDraftSurface,\n type ConversationOptions,\n type ConversationStore,\n type ConversationSurface,\n type ConversationView,\n} from './conversation.js';\nimport type { ChangeBatch, WrittenBy } from './change.js';\nimport { MD_MODEL, parseCollection, validRoot, type Composition } from './collection.js';\nimport { createLog } from './log.js';\nimport type { CallResult, QueueEntry, Submission, SubmissionOutcome } from './outcome.js';\nimport { refreshRoom } from './refresh.js';\nimport { buildBatch, type Rewriting, type SaveRefusal } from './save.js';\nimport {\n applyReturned,\n compositionOf,\n landed,\n readConfirmed,\n replicaOf,\n withdrawals,\n type ConfirmedLayer,\n type Replica,\n} from './replica.js';\nimport {\n changedParts,\n changesOf,\n held,\n readParts,\n returnedInto,\n underneath,\n type ReturnReason,\n type RoomDraft,\n type RoomDraftRecord,\n type RoomDraftWrite,\n type SavedDraft,\n} from './room-draft.js';\nimport {\n settled,\n same,\n saving,\n STARTING,\n transferring,\n type AttentionEntry,\n type CycleProgress,\n type SyncStatus,\n} from './status.js';\nimport { detectStorageLoss, nextGeneration, type RuntimeShell } from './durability.js';\nimport { roomDraftRevision } from './identity.js';\nimport { beneath, normalize } from './paths.js';\nimport {\n openRuntimeStore,\n type PendingState,\n type ReplicaRecord,\n type RuntimeStore,\n} from './store.js';\nimport { unconfirmed, type Refused, type Unconfirmed } from './transfer.js';\n\nconst DEFAULT_DISCOVERY_INTERVAL_MS = 60_000;\n\nconst EMPTY_SCHEMA: ModelVerification = { verdict: 'accept', model: { types: {} } };\n\nconst knownCapabilities = new Set<string>(VERSION_1_CAPABILITIES);\n\ntype Attached = 'collection' | 'typed-selection';\n\ntype RoomDeclaration = Omit<DiscoveredRoom, 'roomVersion' | 'typedSelection'> & {\n typedSelection?: TypedSelection | null;\n};\n\nfunction within(root: string, path: string): boolean {\n return root === '' || beneath(root, path);\n}\n\nfunction declaredIdentity(model: import('./model.js').ModelIdentity | null | undefined): boolean {\n if (model === undefined) return false;\n if (model === null) return true;\n return (\n typeof model.identity === 'string' &&\n model.identity.length > 0 &&\n typeof model.version === 'string' &&\n model.version.length > 0\n );\n}\n\nfunction declaredSelection(room: DiscoveredRoom): boolean {\n const selection = room.typedSelection;\n if (selection === undefined) return true;\n if (!Array.isArray(selection.roots) || selection.roots.length === 0) return false;\n if (!declaredIdentity(selection.attachedModel)) return false;\n return selection.roots.every(\n (root, index) =>\n validRoot(root) &&\n root !== '' &&\n !within(room.collectionRoot, root) &&\n selection.roots.every((other, at) => at === index || !within(other, root)),\n );\n}\n\nexport type AppTypedSelection = {\n roots: readonly string[];\n attachedModel: import('./model.js').ModelIdentity | null;\n model: TypesResult;\n};\n\nexport type AppRoom = {\n collectionRoot: string;\n name: string;\n locator: string;\n operations: import('./adapter.js').OperationScopes;\n replica: import('./adapter.js').ReplicaAdmission;\n attachedModel: import('./model.js').ModelIdentity | null;\n model: TypesResult;\n typedSelection: AppTypedSelection | null;\n providerOwnedPaths: readonly string[];\n roomVersion: string | null;\n synchronizationAvailable: boolean;\n refusal: ProviderRefusal | null;\n};\n\nexport type AppSlotEntry = {\n room: AppRoom;\n segment: string | null;\n};\n\nexport type AppSlot = {\n slot: string;\n entries: readonly AppSlotEntry[];\n};\n\nexport type RoomTypes = {\n collection: TypesResult;\n typedSelection: TypesResult | null;\n};\n\nexport type ConnectionRefusalReason =\n | 'no-matching-version'\n | 'missing-required-guarantee'\n | 'md-model-version-mismatch'\n | 'revoked-authorization'\n | 'client-host-protocol-mismatch';\n\nexport type ConnectionRefusal = {\n reason: ConnectionRefusalReason;\n reauthorizationOffered: boolean;\n refusal: ProviderRefusal | null;\n};\n\nexport type MdRuntimeOptions = {\n adapter: Adapter;\n shell: RuntimeShell;\n requiredGuarantees: readonly string[];\n authorization?: Authorization;\n discoveryIntervalMs?: number;\n signal?: AbortSignal;\n};\n\nexport type SaveResult =\n | { outcome: 'saved'; identifier: string }\n | ({ outcome: 'refused' } & SaveRefusal);\n\nexport type SavedRoomDraft = { readonly path: string; readonly revision: string };\n\nexport type RoomDraftSurface = {\n list(): Promise<readonly RoomDraft[]>;\n read(room: string, path: string): RoomDraft | null;\n write(\n room: string,\n path: string,\n revision: string | null,\n parts: unknown,\n ): Promise<RoomDraftWrite>;\n discard(room: string, path: string, revision: string): Promise<RoomDraftWrite>;\n};\n\nexport type PresentationSurface = {\n read(app: string): Promise<unknown>;\n write(app: string, value: unknown): Promise<void>;\n};\n\nexport type HistoryQuery = {\n revision?: string;\n pageToken?: string;\n};\n\nexport type MdRuntime = {\n loaded(): Promise<void>;\n rooms(): readonly AppRoom[];\n slots(): readonly AppSlot[];\n query: {\n (query: DocumentQuery): Promise<DocumentResult>;\n (query: GroupQuery): Promise<GroupResult>;\n };\n search(request: SearchRequest): Promise<SearchResult>;\n types(locator: string): RoomTypes;\n syncStatus(): SyncStatus;\n serviceMode(): ServiceMode;\n roomDraft: RoomDraftSurface;\n conversation: ConversationSurface;\n chatDraft: ChatDraftSurface;\n presentation: PresentationSurface;\n save(\n room: string,\n roomDrafts: readonly SavedRoomDraft[],\n writtenBy?: WrittenBy,\n ): Promise<SaveResult>;\n outcome(identifier: string): SubmissionOutcome | null;\n history(locator: string, path: string, query?: HistoryQuery): Promise<HistoryResult>;\n call(name: string, input: unknown): Promise<CallResult>;\n log(): string;\n storageLoss(): string | null;\n persistence(): boolean;\n observe: {\n (topic: 'rooms'): Promise<Observation<readonly AppRoom[]>>;\n (topic: 'connection-refusal'): Promise<Observation<ConnectionRefusal | null>>;\n (topic: 'storage-loss'): Promise<Observation<string | null>>;\n (topic: 'sync-status'): Promise<Observation<SyncStatus>>;\n (topic: 'service-mode'): Promise<Observation<ServiceMode>>;\n (topic: 'query', query: DocumentQuery): Promise<Observation<DocumentResult>>;\n (topic: 'query', query: GroupQuery): Promise<Observation<GroupResult>>;\n (topic: 'queue', locator: string): Promise<Observation<readonly QueueEntry[]>>;\n (topic: 'room-drafts'): Promise<Observation<readonly RoomDraft[]>>;\n (topic: 'presentation', app: string): Promise<Observation<unknown>>;\n (\n topic: 'conversation',\n conversation: string,\n options: ConversationOptions,\n ): Promise<Observation<ConversationView>>;\n };\n reauthorize(): Promise<void>;\n};\n\nexport type RuntimeTopic =\n | 'rooms'\n | 'connection-refusal'\n | 'storage-loss'\n | 'sync-status'\n | 'service-mode'\n | 'query'\n | 'queue'\n | 'room-drafts'\n | 'presentation'\n | 'conversation';\n\nexport type ComposedRuntime = {\n md: MdRuntime;\n stop(): Promise<void>;\n watch(\n topic: RuntimeTopic,\n input: readonly unknown[],\n deliver: (message: unknown) => void,\n ): () => void;\n};\n\ntype QueueSubscription = {\n locator: string;\n notify: (entries: readonly QueueEntry[]) => void;\n};\n\ntype RoomDraftSubscription = {\n notify: (roomDrafts: readonly RoomDraft[]) => void;\n ready: boolean;\n};\n\ntype Leaving = { batch: ChangeBatch; outcome: SubmissionOutcome; returned: ReturnReason | null };\n\ntype PresentationSubscription = {\n app: string;\n notify: (value: unknown) => void;\n ready: boolean;\n};\n\ntype Withheld = AdapterFailure | Unconfirmed | Refused;\n\nexport function createMdRuntime(options: MdRuntimeOptions): MdRuntime {\n return composeRuntime(options).md;\n}\n\nexport function composeRuntime(options: MdRuntimeOptions): ComposedRuntime {\n const period = options.discoveryIntervalMs ?? DEFAULT_DISCOVERY_INTERVAL_MS;\n let authorization: Authorization | undefined = options.authorization;\n let opening: Promise<RuntimeStore> | undefined;\n let store: RuntimeStore | undefined;\n const replicas = new Map<string, Replica>();\n const pendings = new Map<string, PendingState>();\n const roomDrafts = new Map<string, Map<string, RoomDraftRecord>>();\n const presentations = new Map<string, unknown>();\n const outcomes = new Map<string, SubmissionOutcome>();\n const outcomeRooms = new Map<string, string>();\n let limits: readonly ProviderLimit[] = [];\n let slots: NonNullable<Discovery['slots']> = [];\n let capabilities: readonly Capability[] = [];\n function rewriting(): Rewriting {\n return capabilities.some((capability) => capability.name === 'move-reference-rewrites')\n ? 'provider'\n : 'runtime';\n }\n const rooms = new Map<string, AppRoom>();\n const unreadable = new Set<string>();\n const models = new Map<string, ModelState>();\n const liveModels = new Map<string, string>();\n const invalidModels = new Set<string>();\n const modelEpoch = new Map<string, number>();\n const discovered = new Map<string, DiscoveredRoom>();\n let roomsListed = false;\n const scopedRefusals = new Map<string, ProviderRefusal>();\n const sourceRefusals = new Map<string, ProviderRefusal>();\n const declarationRefusals = new Set<string>();\n function modelKey(locator: string, attached: Attached): string {\n return `${attached} ${locator}`;\n }\n function modelOf(locator: string, attached: Attached = 'collection'): ModelState {\n return models.get(modelKey(locator, attached)) ?? NO_MODEL;\n }\n function savedModel(locator: string, attached: Attached): ModelState {\n return invalidModels.has(modelKey(locator, attached))\n ? { status: 'unavailable', reason: 'revoked' }\n : modelOf(locator, attached);\n }\n function compositionFor(record: ReplicaRecord): Composition {\n return compositionOf({\n ...record,\n model: savedModel(record.locator, 'collection'),\n selectionModel: savedModel(record.locator, 'typed-selection'),\n });\n }\n\n const mismatchedRoots = new Set<string>();\n let refusal: ConnectionRefusal | null = null;\n let storageLoss: string | null = null;\n let status: SyncStatus = STARTING;\n let shown: SyncStatus = STARTING;\n let discoveryPaused = false;\n let timer: ReturnType<typeof setInterval> | undefined;\n let closed = false;\n let stopping = false;\n let withdrawNotifications: (() => void) | undefined;\n let handed: readonly string[] | undefined;\n const notices = new Map<string, string>();\n let chain: Promise<void> = Promise.resolve();\n let mutations: Promise<unknown> = Promise.resolve();\n let inflight = false;\n let queued = false;\n const roomListeners = new Set<(rooms: readonly AppRoom[]) => void>();\n const refusalListeners = new Set<(refusal: ConnectionRefusal | null) => void>();\n const storageLossListeners = new Set<(statement: string | null) => void>();\n const statusListeners = new Set<(status: SyncStatus) => void>();\n const queueSubscriptions = new Set<QueueSubscription>();\n const roomDraftListeners = new Set<RoomDraftSubscription>();\n const presentationListeners = new Set<PresentationSubscription>();\n const readSide = createReadSide();\n let withdrawConversations: (() => void) | undefined;\n let currencyQueued = false;\n let serviceMode: ServiceMode = 'open';\n let haltedRefusal = false;\n let openSignals = 0;\n const serviceModeListeners = new Set<(mode: ServiceMode) => void>();\n const conversations: ConversationStore = createConversationStore({\n cards: declaredCards,\n documents: (locator: string) =>\n readSide.query(\n planOf({ rooms: [locator], select: 'all' }, roomFacts()),\n ) as Promise<DocumentResult>,\n call: (name: ConversationAction, input: unknown) => invokeAction(name, input),\n durably,\n stream: () => options.adapter.conversations,\n publish: publishChangeSet,\n closed: () => closed,\n });\n const searchIndex = createSearchIndex({\n documents: () => readSide.documents(),\n document: (room, path) => readSide.document(room, path),\n messages: () => conversations.messages(),\n message: (conversation, identity) => conversations.message(conversation, identity),\n });\n const journal = createLog();\n let notifyReady = () => {};\n const ready = new Promise<void>((resolve) => {\n notifyReady = resolve;\n });\n function rememberRoomDraft(record: RoomDraftRecord) {\n const room = roomDrafts.get(record.locator) ?? new Map<string, RoomDraftRecord>();\n room.set(record.path, record);\n roomDrafts.set(record.locator, room);\n }\n\n function forgetRoomDraft(locator: string, path: string) {\n const room = roomDrafts.get(locator);\n if (room === undefined) return;\n room.delete(path);\n if (room.size === 0) roomDrafts.delete(locator);\n }\n\n function roomDraftOf(record: RoomDraftRecord): RoomDraft {\n return structuredClone({\n room: record.locator,\n path: record.path,\n revision: record.revision,\n parts: record.parts,\n changedUnderneath: underneath(\n record.parts,\n record.path,\n replicas.get(record.locator)?.visible,\n ),\n returned: record.returned,\n });\n }\n\n function snapshotRoomDrafts(): readonly RoomDraft[] {\n const records = [...roomDrafts.values()].flatMap((room) => [...room.values()]);\n records.sort((left, right) => {\n if (left.locator !== right.locator) return left.locator < right.locator ? -1 : 1;\n if (left.path !== right.path) return left.path < right.path ? -1 : 1;\n return 0;\n });\n return records.map(roomDraftOf);\n }\n\n function publishRoomDrafts(waitingOnly: boolean) {\n if (closed) return;\n const value = snapshotRoomDrafts();\n for (const listener of roomDraftListeners) {\n if (waitingOnly && listener.ready) continue;\n listener.ready = true;\n listener.notify(value);\n }\n }\n\n function presentationOf(app: string): unknown {\n const value = presentations.get(app);\n return value === undefined ? null : structuredClone(value);\n }\n\n function emitPresentation(app: string) {\n if (closed) return;\n for (const listener of presentationListeners) {\n if (listener.app === app && listener.ready) listener.notify(presentationOf(app));\n }\n }\n\n function pending() {\n return [...replicas.values()].some((replica) => replica.queue.length > 0);\n }\n\n function attention(): Pick<SyncStatus, 'attentionRequired' | 'reset'> {\n const attentionRequired: AttentionEntry[] = [];\n for (const record of [...roomDrafts.values()].flatMap((room) => [...room.values()])) {\n if (record.returned === null) continue;\n attentionRequired.push({\n room: record.locator,\n path: record.path,\n returned: structuredClone(record.returned),\n });\n }\n attentionRequired.sort((left, right) => {\n if (left.room !== right.room) return left.room < right.room ? -1 : 1;\n if (left.path !== right.path) return left.path < right.path ? -1 : 1;\n return 0;\n });\n let reset: string | null = null;\n for (const { submission } of pendings.values()) {\n if (submission.state !== 'reset') continue;\n if (reset === null || submission.reset < reset) reset = submission.reset;\n }\n return { attentionRequired, reset };\n }\n\n function listed(): readonly AppRoom[] {\n return structuredClone([...rooms.values()]);\n }\n\n function slotted(): readonly AppSlot[] {\n return structuredClone(\n slots.map(({ slot, entries }) => ({\n slot,\n entries: entries.flatMap(({ locator, segment }) => {\n const room = rooms.get(locator);\n return room === undefined ? [] : [{ room, segment }];\n }),\n })),\n );\n }\n\n function roomFacts(): HeldRooms {\n const held = [...rooms.values()].map((room) => {\n const attached = [\n modelOf(room.locator),\n ...(room.typedSelection === null ? [] : [modelOf(room.locator, 'typed-selection')]),\n ];\n return {\n locator: room.locator,\n available: attached.every((model) => model.status !== 'unavailable'),\n types: attached.flatMap((model) =>\n model.status === 'unavailable' ? [] : Object.values(model.types),\n ),\n };\n });\n return { listed: roomsListed, rooms: held };\n }\n\n function emitRooms() {\n const value = listed();\n for (const listener of roomListeners) listener(value);\n }\n\n function emitRefusal() {\n for (const listener of refusalListeners) listener(refusal);\n }\n\n function emitStorageLoss() {\n for (const listener of storageLossListeners) listener(storageLoss);\n }\n\n function moveTo(next: SyncStatus) {\n if (closed) return;\n status = next;\n show();\n }\n\n function show() {\n if (closed) return;\n const next: SyncStatus =\n status.state === 'synced' && !conversations.current()\n ? { ...status, state: 'syncing' }\n : status;\n if (same(shown, next)) return;\n shown = next;\n for (const listener of statusListeners) listener(shown);\n }\n\n function submissionOf(batch: ChangeBatch): Submission {\n return pendings.get(batch.id)?.submission ?? { state: 'waiting' };\n }\n\n function entriesOf(locator: string): readonly QueueEntry[] {\n const replica = replicas.get(locator);\n if (replica === undefined) return [];\n return replica.queue.map((batch) => Object.freeze({ batch, ...submissionOf(batch) }));\n }\n\n function emitQueue(locator: string) {\n const entries = entriesOf(locator);\n for (const subscription of queueSubscriptions) {\n if (subscription.locator === locator) subscription.notify(entries);\n }\n }\n\n function applyChangeSet(set: ChangeSet) {\n readSide.apply(set);\n searchIndex.changed(set);\n }\n\n function publishChangeSet(set: ChangeSet) {\n applyChangeSet(set);\n if (set.rooms.length > 0) emitRooms();\n for (const locator of set.queues) emitQueue(locator);\n if (\n set.drafts.length > 0 ||\n set.documents.some((change) => roomDrafts.get(change.locator)?.has(change.path) === true)\n ) {\n publishRoomDrafts(false);\n }\n for (const app of set.presentations) emitPresentation(app);\n conversations.changed(set);\n const cards = declaredCards();\n if (cards !== undefined && set.documents.some((change) => change.locator === cards.locator)) {\n scheduleCurrency();\n }\n }\n\n function stopTimer() {\n if (timer === undefined) return;\n clearInterval(timer);\n timer = undefined;\n }\n\n function startTimer() {\n if (timer !== undefined) return;\n timer = setInterval(() => {\n void enqueue();\n }, period);\n }\n\n async function refuse(reason: ConnectionRefusalReason, provider: ProviderRefusal | null = null) {\n stopTimer();\n discoveryPaused = true;\n try {\n if (reason === 'revoked-authorization') {\n await exclusive(async () => {\n const revoked: ModelState = { status: 'unavailable', reason: 'revoked' };\n try {\n const local = await openLocal();\n await local.revokeModels(\n [...replicas.values()].map((replica) => ({\n record: replica.confirmed.record,\n queue: replica.queue,\n })),\n );\n } catch {\n journal.record('model revocation persistence failed');\n }\n const keys = new Set(models.keys());\n for (const locator of rooms.keys()) {\n keys.add(modelKey(locator, 'collection'));\n keys.add(modelKey(locator, 'typed-selection'));\n }\n for (const key of keys) {\n invalidModels.add(key);\n modelEpoch.set(key, (modelEpoch.get(key) ?? 0) + 1);\n models.set(key, revoked);\n liveModels.delete(key);\n }\n const changed: ChangeSet[] = [];\n for (const [locator, room] of rooms) {\n const before = replicas.get(locator) ?? null;\n if (before !== null) {\n const record = {\n ...before.confirmed.record,\n model: revoked,\n selectionModel: revoked,\n };\n const read = readConfirmed(record, before.confirmed);\n replicas.set(\n locator,\n read.kind === 'staged'\n ? replicaOf(read.confirmed, before.queue, rewriting(), before)\n : { ...before, confirmed: { ...before.confirmed, record } },\n );\n }\n rooms.set(locator, {\n ...room,\n model: modelTypes(revoked),\n typedSelection:\n room.typedSelection === null\n ? null\n : { ...room.typedSelection, model: modelTypes(revoked) },\n });\n changed.push(changeSet(locator, before, replicas.get(locator) ?? null, { room: true }));\n }\n publishChangeSet(mergeChangeSets(changed));\n });\n }\n } finally {\n refusal = {\n reason,\n reauthorizationOffered: reason === 'revoked-authorization',\n refusal: provider,\n };\n journal.record(`connection refused ${reason}`);\n emitRefusal();\n }\n }\n\n function list(room: RoomDeclaration, synchronizationAvailable: boolean) {\n const selection = room.typedSelection ?? null;\n rooms.set(room.locator, {\n name: room.name,\n collectionRoot: room.collectionRoot,\n locator: room.locator,\n operations: room.operations,\n replica: room.replica,\n attachedModel: room.attachedModel,\n model: modelTypes(modelOf(room.locator)),\n typedSelection:\n selection === null\n ? null\n : {\n roots: selection.roots,\n attachedModel: selection.attachedModel,\n model: modelTypes(modelOf(room.locator, 'typed-selection')),\n },\n providerOwnedPaths: room.providerOwnedPaths,\n roomVersion: replicas.get(room.locator)?.confirmed.record.roomVersion ?? null,\n synchronizationAvailable,\n refusal: scopedRefusals.get(room.locator) ?? sourceRefusals.get(room.locator) ?? null,\n });\n }\n\n async function applyDiscovery(listed: readonly DiscoveredRoom[], local: RuntimeStore) {\n const listedLocators = new Set(listed.map((room) => room.locator));\n for (const locator of listedLocators) scopedRefusals.delete(locator);\n discovered.clear();\n for (const room of listed) discovered.set(room.locator, room);\n await dropUnlisted(listedLocators, local);\n for (const room of listed) {\n const held = replicas.get(room.locator)?.confirmed.record;\n if (held !== undefined && held.replica.selection !== room.replica.selection) {\n list(held, false);\n continue;\n }\n list(room, room.replica.admission === 'admitted' && !unreadable.has(room.locator));\n }\n roomsListed = true;\n emitRooms();\n }\n\n function unlistedHeld(listed: ReadonlySet<string>): string[] {\n return [...new Set([...rooms.keys(), ...roomDrafts.keys()])].filter(\n (locator) => !listed.has(locator),\n );\n }\n\n async function dropUnlisted(listed: ReadonlySet<string>, local: RuntimeStore) {\n if (unlistedHeld(listed).length === 0) return;\n await exclusive(async () => {\n const unlisted = unlistedHeld(listed);\n await local.dropRooms(unlisted);\n for (const [batch, locator] of outcomeRooms) {\n if (listed.has(locator)) continue;\n outcomeRooms.delete(batch);\n outcomes.delete(batch);\n }\n const removed = unlisted.map((locator) =>\n changeSet(locator, replicas.get(locator) ?? null, null, {\n room: true,\n queue: true,\n drafts: [...(roomDrafts.get(locator)?.keys() ?? [])],\n }),\n );\n for (const locator of unlisted) {\n for (const batch of replicas.get(locator)?.queue ?? []) pendings.delete(batch.id);\n replicas.delete(locator);\n rooms.delete(locator);\n roomDrafts.delete(locator);\n unreadable.delete(locator);\n scopedRefusals.delete(locator);\n sourceRefusals.delete(locator);\n declarationRefusals.delete(locator);\n for (const attached of ['collection', 'typed-selection'] as const) {\n const key = modelKey(locator, attached);\n models.delete(key);\n liveModels.delete(key);\n invalidModels.delete(key);\n modelEpoch.delete(key);\n }\n journal.record(`room unlisted ${locator}`);\n }\n publishChangeSet(mergeChangeSets(removed));\n moveTo({ ...status, ...attention() });\n });\n }\n\n function restored(key: string, persisted: ModelState): ModelState {\n const prior = models.get(key);\n if (\n prior !== undefined &&\n prior.status !== 'unavailable' &&\n (persisted.status === 'unavailable' || !sameModel(prior.snapshot, persisted.snapshot))\n ) {\n modelEpoch.set(key, (modelEpoch.get(key) ?? 0) + 1);\n invalidModels.add(key);\n }\n const model =\n persisted.status === 'unavailable' ||\n liveModels.get(key) === JSON.stringify(persisted.snapshot)\n ? persisted\n : cached(persisted);\n models.set(key, model);\n if (model.status === 'unavailable') {\n liveModels.delete(key);\n invalidModels.delete(key);\n }\n return model;\n }\n\n async function hydrate(opened: RuntimeStore): Promise<{\n lastCompleted: string | null;\n locators: Set<string>;\n read: ChangeSet;\n }> {\n const [\n records,\n queues,\n recordedOutcomes,\n kept,\n presented,\n held,\n chatDrafts,\n lastCompleted,\n declared,\n named,\n listedSlots,\n ] = await Promise.all([\n opened.all(),\n opened.queues(),\n opened.outcomes(),\n opened.roomDrafts(),\n opened.presentation(),\n opened.conversations(),\n opened.chatDrafts(),\n opened.lastCompleted(),\n opened.providerLimits(),\n opened.capabilities(),\n opened.slots(),\n ]);\n limits = declared;\n capabilities = named;\n slots = listedSlots;\n roomDrafts.clear();\n for (const record of kept) rememberRoomDraft(record);\n presentations.clear();\n for (const record of presented) presentations.set(record.app, record.value);\n conversations.hydrate(held, chatDrafts);\n const queuedBatches = new Map(\n queues.map((queue) => [queue.locator, queue.pending.map(({ batch }) => batch)]),\n );\n pendings.clear();\n for (const queue of queues) {\n for (const { batch, state } of queue.pending) pendings.set(batch.id, state);\n }\n outcomes.clear();\n outcomeRooms.clear();\n for (const record of recordedOutcomes) {\n outcomes.set(record.id, record.outcome);\n outcomeRooms.set(record.id, record.locator);\n }\n const previousReplicas = new Map(replicas);\n replicas.clear();\n for (const record of records) {\n const model = restored(modelKey(record.locator, 'collection'), record.model);\n const selectionModel = restored(\n modelKey(record.locator, 'typed-selection'),\n record.selectionModel,\n );\n const prior = previousReplicas.get(record.locator);\n const retyped = { ...record, model, selectionModel };\n const read = readConfirmed(retyped, prior?.confirmed);\n if (read.kind === 'unconfirmed') continue;\n const confirmed =\n read.kind === 'staged'\n ? read.confirmed\n : {\n record: retyped,\n collection: parseCollection(retyped.documents, compositionOf(retyped)),\n };\n replicas.set(\n record.locator,\n replicaOf(confirmed, queuedBatches.get(record.locator) ?? [], rewriting(), prior),\n );\n const existing = rooms.get(record.locator);\n if (existing === undefined) list(record, false);\n else {\n rooms.set(record.locator, {\n ...existing,\n roomVersion: record.roomVersion,\n operations: record.operations,\n replica: record.replica,\n attachedModel: record.attachedModel,\n model: modelTypes(model),\n typedSelection:\n record.typedSelection === null\n ? null\n : {\n roots: record.typedSelection.roots,\n attachedModel: record.typedSelection.attachedModel,\n model: modelTypes(selectionModel),\n },\n });\n }\n if (read.kind === 'refused') {\n refusedSource(record, read);\n declarationRefusals.add(record.locator);\n }\n }\n return {\n lastCompleted,\n locators: new Set([...queuedBatches.keys(), ...replicas.keys()]),\n read: mergeChangeSets(\n [...new Set([...previousReplicas.keys(), ...replicas.keys()])].map((locator) =>\n changeSet(locator, previousReplicas.get(locator) ?? null, replicas.get(locator) ?? null),\n ),\n ),\n };\n }\n\n async function readState(opened: RuntimeStore): Promise<string | null> {\n const { lastCompleted, locators, read } = await hydrate(opened);\n applyChangeSet(read);\n if (replicas.size > 0) emitRooms();\n for (const locator of locators) emitQueue(locator);\n publishRoomDrafts(false);\n return lastCompleted;\n }\n\n async function open(): Promise<RuntimeStore> {\n const opened = await openRuntimeStore();\n store = opened;\n const kept = options.shell.generation;\n const storedGeneration = await opened.generation();\n const loss = detectStorageLoss(storedGeneration, kept);\n const generation = nextGeneration(storedGeneration, kept);\n if (generation !== storedGeneration) await opened.rememberGeneration(generation);\n if (generation !== kept) await options.shell.keepGeneration(generation);\n if (loss !== null) {\n storageLoss = loss;\n emitStorageLoss();\n }\n const lastCompleted = await readState(opened);\n moveTo({ ...status, lastCompleted, ...attention() });\n return opened;\n }\n\n function durably<T>(work: (local: RuntimeStore) => Promise<T>): Promise<T> {\n return exclusive(async () => {\n const local = await openLocal();\n return work(local);\n });\n }\n\n function openLocal(): Promise<RuntimeStore> {\n opening ??= open().catch((error: unknown) => {\n opening = undefined;\n throw error;\n });\n return opening;\n }\n\n function exclusive<T>(work: () => Promise<T>): Promise<T> {\n const next = mutations.then(work, work);\n mutations = next.then(\n () => undefined,\n () => undefined,\n );\n return next;\n }\n\n function withdrawable(batch: ChangeBatch): boolean {\n const state = pendings.get(batch.id);\n return state !== undefined && state.submission.state !== 'submitted' && !state.lost;\n }\n\n async function settle(\n local: RuntimeStore,\n locator: string,\n before: Replica | undefined,\n confirmed: ConfirmedLayer,\n queue: readonly ChangeBatch[],\n settling: {\n accepted?: { id: string; outcome: SubmissionOutcome };\n leaving?: Leaving;\n room?: boolean;\n } = {},\n ): Promise<ChangeSet> {\n const withdrawn = withdrawals(confirmed, queue, withdrawable, rewriting());\n const kept = queue.filter((batch) => !withdrawn.includes(batch));\n const returning = [\n ...withdrawn.map((batch) => ({ batch, returned: { kind: 'withdrawn' } as const })).reverse(),\n ...(settling.leaving === undefined ? [] : [settling.leaving]),\n ];\n const written = new Map<string, RoomDraftRecord>();\n for (const { batch, returned } of returning) {\n if (returned === null) continue;\n for (const saved of pendings.get(batch.id)?.drafts ?? []) {\n const existing = written.get(saved.path) ?? roomDrafts.get(locator)?.get(saved.path);\n written.set(saved.path, {\n locator,\n path: saved.path,\n revision: roomDraftRevision(),\n parts: returnedInto(existing?.parts, saved.parts),\n returned,\n });\n }\n }\n const settledOutcomes: { id: string; outcome: SubmissionOutcome }[] = [\n ...(settling.accepted === undefined ? [] : [settling.accepted]),\n ...(settling.leaving === undefined\n ? []\n : [{ id: settling.leaving.batch.id, outcome: settling.leaving.outcome }]),\n ...withdrawn.map((batch) => ({ id: batch.id, outcome: { kind: 'withdrawn' as const } })),\n ];\n await local.write({\n next: confirmed.record,\n previous: before?.confirmed.record ?? null,\n queue: kept,\n previousQueue: before?.queue ?? [],\n outcomes: settledOutcomes,\n roomDrafts: [...written.values()],\n });\n for (const { id, outcome } of settledOutcomes) {\n outcomes.set(id, outcome);\n outcomeRooms.set(id, locator);\n pendings.delete(id);\n }\n for (const record of written.values()) rememberRoomDraft(record);\n for (const batch of withdrawn) journal.record(`outcome ${locator} ${batch.id} withdrawn`);\n replicas.set(locator, replicaOf(confirmed, kept, rewriting(), before));\n return changeSet(locator, before ?? null, replicas.get(locator) ?? null, {\n room: settling.room,\n queue: kept.length !== (before?.queue.length ?? 0),\n drafts: [...written.keys()],\n });\n }\n\n function publish(local: RuntimeStore, room: DiscoveredRoom, confirmed: ConfirmedLayer) {\n return exclusive(async () => {\n if (!continuing()) return;\n const prior = replicas.get(room.locator);\n const retained = readConfirmed(\n {\n ...confirmed.record,\n model: modelOf(room.locator),\n selectionModel: modelOf(room.locator, 'typed-selection'),\n },\n prior?.confirmed,\n );\n if (retained.kind !== 'staged') throw new Error(`Cannot retype staged Room ${room.locator}`);\n const queue = prior?.queue ?? [];\n const accepted = queue.filter((batch) => outcomes.get(batch.id)?.kind === 'accepted');\n const set = await settle(\n local,\n room.locator,\n prior,\n retained.confirmed,\n queue.filter((batch) => !accepted.includes(batch)),\n { room: true },\n );\n for (const batch of accepted) pendings.delete(batch.id);\n unreadable.delete(room.locator);\n sourceRefusals.delete(room.locator);\n declarationRefusals.delete(room.locator);\n list(room, true);\n publishChangeSet(set);\n moveTo({ ...status, ...attention() });\n });\n }\n\n async function saveRoomDrafts(\n locator: string,\n named: readonly SavedRoomDraft[],\n writtenBy: WrittenBy | undefined,\n ): Promise<SaveResult> {\n const local = await openLocal();\n const replica = replicas.get(locator);\n const room = rooms.get(locator);\n if (replica === undefined || room === undefined) {\n throw new Error(`No Local Replica for ${locator}`);\n }\n if (mismatchedRoots.has(locator))\n return { outcome: 'refused', rule: 'collection-root-mismatch' };\n const saved: SavedDraft[] = [];\n for (const { path, revision } of named) {\n const record = roomDrafts.get(locator)?.get(path);\n if (record === undefined || record.revision !== revision) {\n return { outcome: 'refused', rule: 'stale', file: path };\n }\n if (!saved.some((draft) => draft.path === path)) saved.push({ path, parts: record.parts });\n }\n const changed = saved.flatMap(({ path, parts }) =>\n changedParts(path, underneath(parts, path, replica.visible)),\n );\n if (changed.length > 0)\n return { outcome: 'refused', rule: 'changed-underneath', parts: changed };\n const parts = saved.map(({ path, parts }) => changesOf(path, parts));\n const built = buildBatch({\n baseRoomVersion: replica.confirmed.record.roomVersion,\n composition: compositionFor(replica.confirmed.record),\n operations: room.operations,\n providerOwnedPaths: room.providerOwnedPaths,\n providerLimits: limits,\n rewriting: rewriting(),\n visible: replica.visible,\n changes: parts.flatMap(({ changes }) => changes),\n bases: parts.flatMap(({ bases }) => bases),\n writtenBy,\n });\n if (built.kind === 'refused') return { outcome: 'refused', ...built.refusal };\n const batches = [...replica.queue, built.batch];\n const consumed = saved.map(({ path }) => path);\n try {\n await local.write({\n next: replica.confirmed.record,\n previous: replica.confirmed.record,\n queue: batches,\n previousQueue: replica.queue,\n saved,\n consumedRoomDrafts: consumed,\n });\n } catch {\n return { outcome: 'refused', rule: 'durable-write' };\n }\n pendings.set(built.batch.id, { drafts: saved, submission: { state: 'waiting' }, lost: false });\n for (const path of consumed) forgetRoomDraft(locator, path);\n replicas.set(locator, replicaOf(replica.confirmed, batches, rewriting(), replica));\n publishChangeSet(\n changeSet(locator, replica, replicas.get(locator) ?? null, {\n queue: true,\n drafts: consumed,\n }),\n );\n moveTo({ ...saving(status), ...attention() });\n void enqueue();\n return { outcome: 'saved', identifier: built.batch.id };\n }\n\n async function mark(\n local: RuntimeStore,\n locator: string,\n identifier: string,\n submission: Submission,\n lost: boolean,\n ) {\n const state = pendings.get(identifier);\n if (\n !continuing() ||\n state === undefined ||\n (JSON.stringify(state.submission) === JSON.stringify(submission) && state.lost === lost)\n ) {\n return;\n }\n await local.submit(locator, identifier, submission, lost);\n pendings.set(identifier, { ...state, submission, lost });\n const replica = replicas.get(locator);\n if (replica !== undefined)\n publishChangeSet(changeSet(locator, replica, replica, { queue: true }));\n moveTo({ ...status, ...attention() });\n }\n\n async function keepUpload(\n local: RuntimeStore,\n locator: string,\n identifier: string,\n upload: unknown,\n ) {\n if (!continuing()) throw new Error('connection refused');\n await local.keepUpload(locator, identifier, upload);\n pendings.set(identifier, { ...pendings.get(identifier)!, upload });\n if (!continuing()) throw new Error('connection refused');\n }\n\n async function readHistory(\n locator: string,\n path: string,\n query: HistoryQuery = {},\n ): Promise<HistoryResult> {\n if (closed || refusal !== null) return { kind: 'transport-uncertainty' };\n try {\n await ensureAuthorization();\n } catch {\n return { kind: 'transport-uncertainty' };\n }\n if (closed || authorization === undefined || refusal !== null) {\n return { kind: 'transport-uncertainty' };\n }\n const transfer = ['transfer', 'history', locator, path];\n if (query.revision !== undefined) transfer.push(query.revision);\n if (query.pageToken !== undefined) transfer.push(query.pageToken);\n journal.record(transfer.join(' '));\n try {\n const result = await options.adapter.history(authorization, {\n locator,\n path,\n ...(query.revision === undefined ? {} : { revision: query.revision }),\n ...(query.pageToken === undefined ? {} : { pageToken: query.pageToken }),\n });\n journal.record(`outcome history ${result.kind}`);\n if (result.kind === 'scoped-refusal') {\n const room = replicas.get(result.locator)?.confirmed.record;\n if (room !== undefined) await scoped(result, room, await openLocal());\n }\n if (result.kind === 'revoked-authorization') await refuse('revoked-authorization');\n return result;\n } catch {\n journal.record('outcome history transport-uncertainty');\n return { kind: 'transport-uncertainty' };\n }\n }\n\n function declaredCards(): ConversationCards | undefined {\n for (const capability of capabilities) {\n if (capability.conversationCards !== undefined) return capability.conversationCards;\n }\n return undefined;\n }\n\n function declaredAction(name: string) {\n for (const capability of capabilities) {\n for (const action of capability.actions ?? []) {\n if (action.name === name) return action;\n }\n }\n return undefined;\n }\n\n async function invokeAction(name: string, input: unknown): Promise<CallResult> {\n await ready;\n if (closed || refusal !== null) return { kind: 'transport-uncertainty' };\n if (declaredAction(name) === undefined) return { kind: 'undeclared' };\n try {\n await ensureAuthorization();\n } catch {\n return { kind: 'transport-uncertainty' };\n }\n if (closed || authorization === undefined || refusal !== null) {\n return { kind: 'transport-uncertainty' };\n }\n journal.record(`transfer action ${name}`);\n try {\n const result = await options.adapter.action(authorization, { name, input });\n if (result.kind === 'scoped-refusal') {\n const room = replicas.get(result.locator)?.confirmed.record;\n if (room !== undefined) await scoped(result, room, await openLocal());\n }\n if (result.kind === 'revoked-authorization') await refuse('revoked-authorization');\n journal.record(`outcome action ${result.kind}`);\n if (result.kind === 'rejected') journal.record(`refusal rejected ${result.code}`);\n return result;\n } catch {\n journal.record('outcome action transport-uncertainty');\n return { kind: 'transport-uncertainty' };\n }\n }\n\n function continuing(): boolean {\n return !closed && !discoveryPaused;\n }\n\n async function pullRefresh(authorized: Authorization, confirmed: ConfirmedLayer) {\n if (!continuing()) return unconfirmed;\n try {\n const result = await refreshRoom(options.adapter, authorized, confirmed, continuing);\n const detail = result.kind === 'advanced' ? result.confirmed.record.roomVersion : result.kind;\n journal.record(`transfer refresh ${confirmed.record.locator} ${detail}`);\n return result;\n } catch (error) {\n journal.record(`transfer refresh ${confirmed.record.locator} transport-uncertainty`);\n throw error;\n }\n }\n\n async function pullBootstrap(authorized: Authorization, room: DiscoveredRoom) {\n if (!continuing()) return unconfirmed;\n try {\n const result = await bootstrapRoom(\n options.adapter,\n authorized,\n room,\n {\n collection: modelOf(room.locator),\n selection: modelOf(room.locator, 'typed-selection'),\n },\n continuing,\n );\n const detail = result.kind === 'staged' ? result.confirmed.record.roomVersion : result.kind;\n journal.record(`transfer bootstrap ${room.locator} ${detail}`);\n return result;\n } catch (error) {\n journal.record(`transfer bootstrap ${room.locator} transport-uncertainty`);\n throw error;\n }\n }\n\n async function advance(\n room: DiscoveredRoom,\n local: RuntimeStore,\n authorized: Authorization,\n ): Promise<Withheld | null> {\n const held = replicas.get(room.locator);\n if (held !== undefined) {\n const refreshed = await pullRefresh(authorized, held.confirmed);\n if (!continuing()) return unconfirmed;\n if (refreshed.kind === 'still-current') {\n if (sourceRefusals.has(room.locator)) return unconfirmed;\n if (unreadable.delete(room.locator)) {\n list(room, true);\n emitRooms();\n }\n return null;\n }\n if (refreshed.kind === 'advanced') {\n await publish(local, room, refreshed.confirmed);\n return null;\n }\n if (refreshed.kind !== 'beyond-horizon') return refreshed;\n }\n const bootstrapped = await pullBootstrap(authorized, room);\n if (!continuing()) return unconfirmed;\n if (bootstrapped.kind !== 'staged') return bootstrapped;\n await publish(local, room, bootstrapped.confirmed);\n return null;\n }\n\n async function withhold(\n withheld: Withheld,\n room: DiscoveredRoom,\n local: RuntimeStore,\n progress: CycleProgress,\n ): Promise<void> {\n progress.complete = false;\n if (withheld.kind === 'scoped-refusal') {\n await scoped(withheld, room, local);\n } else if (withheld.kind === 'transport-uncertainty') {\n progress.reachable = false;\n } else if (withheld.kind === 'room-not-readable') {\n unreadable.add(room.locator);\n list(room, false);\n emitRooms();\n } else if (withheld.kind === 'refused') {\n refusedSource(room, withheld);\n } else if (withheld.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n }\n }\n\n function refusedSource(room: RoomDeclaration, { refusal }: Refused) {\n sourceRefusals.set(room.locator, {\n code: refusal.rule,\n fields: {\n file: refusal.file,\n ...(refusal.location === undefined ? {} : { location: refusal.location }),\n version: refusal.version,\n ...(refusal.referrers === undefined ? {} : { referrers: refusal.referrers }),\n },\n });\n declarationRefusals.delete(room.locator);\n unreadable.add(room.locator);\n list(room, false);\n emitRooms();\n journal.record(`source refused ${room.locator} ${refusal.rule} ${refusal.file}`);\n }\n\n function leaving(\n batch: ChangeBatch,\n result: Extract<MutationResult, { kind: 'conflicted' | 'rejected' | 'expired' }>,\n ): Leaving {\n if (result.kind === 'expired') {\n return { batch, outcome: { kind: 'expired' }, returned: { kind: 'expired' } };\n }\n const refusal = { code: result.code, fields: result.fields };\n if (result.kind === 'conflicted') {\n return {\n batch,\n outcome: {\n kind: 'conflicted',\n ...(result.roomVersion === undefined ? {} : { roomVersion: result.roomVersion }),\n affected: result.affected,\n ...refusal,\n },\n returned: { kind: 'conflicted', ...refusal },\n };\n }\n return {\n batch,\n outcome: { kind: 'rejected', affected: result.affected, ...refusal },\n returned: { kind: 'rejected', ...refusal },\n };\n }\n\n function acceptedOf(accepted: Extract<MutationResult, { kind: 'accepted' }>): SubmissionOutcome {\n return {\n kind: 'accepted',\n roomVersion: accepted.roomVersion,\n ...(accepted.author === undefined ? {} : { author: accepted.author }),\n ...(accepted.time === undefined ? {} : { time: accepted.time }),\n };\n }\n\n function logAccepted(\n locator: string,\n submitted: ChangeBatch,\n accepted: Extract<MutationResult, { kind: 'accepted' }>,\n ) {\n journal.record(\n `outcome ${locator} ${submitted.id} accepted ${accepted.roomVersion}` +\n (accepted.author === undefined ? '' : ` author ${accepted.author}`) +\n (accepted.time === undefined ? '' : ` time ${accepted.time}`),\n );\n }\n\n async function holdAccepted(\n room: DiscoveredRoom,\n local: RuntimeStore,\n submitted: ChangeBatch,\n accepted: Extract<MutationResult, { kind: 'accepted' }>,\n refused: Refused | null,\n ) {\n await exclusive(async () => {\n if (!continuing()) return;\n const current = replicas.get(room.locator);\n if (current === undefined || !current.queue.some((batch) => batch.id === submitted.id)) {\n return;\n }\n const outcome = acceptedOf(accepted);\n await local.write({\n next: current.confirmed.record,\n previous: current.confirmed.record,\n queue: current.queue,\n previousQueue: current.queue,\n outcomes: [{ id: submitted.id, outcome }],\n });\n outcomes.set(submitted.id, outcome);\n outcomeRooms.set(submitted.id, room.locator);\n logAccepted(room.locator, submitted, accepted);\n });\n if (refused !== null && continuing()) refusedSource(room, refused);\n }\n\n async function commitAccept(\n room: DiscoveredRoom,\n local: RuntimeStore,\n submitted: ChangeBatch,\n accepted: Extract<MutationResult, { kind: 'accepted' }>,\n base: ConfirmedLayer,\n overlay: boolean,\n ): Promise<Refused | Unconfirmed | null> {\n if (!continuing()) return unconfirmed;\n const current = replicas.get(room.locator);\n if (current === undefined || !current.queue.some((batch) => batch.id === submitted.id)) {\n return null;\n }\n const remaining = current.queue.filter((batch) => batch.id !== submitted.id);\n const retainedBase = readConfirmed(\n {\n ...base.record,\n model: modelOf(room.locator),\n selectionModel: modelOf(room.locator, 'typed-selection'),\n },\n base,\n );\n const applied =\n overlay && retainedBase.kind === 'staged'\n ? applyReturned(\n retainedBase.confirmed,\n accepted.documents,\n accepted.revisions,\n accepted.removals,\n accepted.roomVersion,\n )\n : retainedBase;\n if (applied.kind !== 'staged') return applied;\n const set = await settle(local, room.locator, current, applied.confirmed, remaining, {\n accepted: { id: submitted.id, outcome: acceptedOf(accepted) },\n room: true,\n });\n unreadable.delete(room.locator);\n sourceRefusals.delete(room.locator);\n declarationRefusals.delete(room.locator);\n list(room, true);\n publishChangeSet(set);\n moveTo({ ...status, ...attention() });\n logAccepted(room.locator, submitted, accepted);\n return null;\n }\n\n async function committed(\n room: DiscoveredRoom,\n local: RuntimeStore,\n submitted: ChangeBatch,\n accepted: Extract<MutationResult, { kind: 'accepted' }>,\n base: ConfirmedLayer,\n overlay: boolean,\n ): Promise<boolean> {\n const failed = await exclusive(() =>\n commitAccept(room, local, submitted, accepted, base, overlay),\n );\n if (failed === null) return true;\n await holdAccepted(room, local, submitted, accepted, failed.kind === 'refused' ? failed : null);\n return false;\n }\n\n async function submitRoom(\n room: DiscoveredRoom,\n local: RuntimeStore,\n authorized: Authorization,\n progress: CycleProgress,\n ): Promise<void> {\n while (continuing() && authorization !== undefined) {\n const replica = replicas.get(room.locator);\n const head = replica?.queue[0];\n if (replica === undefined || head === undefined) return;\n if (outcomes.get(head.id)?.kind === 'accepted') {\n progress.complete = false;\n return;\n }\n const state = pendings.get(head.id);\n const { submission, lost: earlier } = state ?? {\n submission: { state: 'waiting' },\n lost: false,\n };\n if (submission.state === 'reset' && Date.now() < Date.parse(submission.reset)) {\n progress.complete = false;\n return;\n }\n if (writesHeld()) {\n progress.complete = false;\n journal.record(`submission ${room.locator} ${head.id} held`);\n return;\n }\n const lost = earlier || submission.state === 'submitted';\n let result: MutationResult;\n journal.record(`submission ${room.locator} ${head.id}`);\n await exclusive(() => mark(local, room.locator, head.id, { state: 'submitted' }, lost));\n if (discoveryPaused) return;\n if (writesHeld()) {\n await exclusive(() => mark(local, room.locator, head.id, submission, earlier));\n progress.complete = false;\n journal.record(`submission ${room.locator} ${head.id} held`);\n return;\n }\n const opensBefore = openSignals;\n try {\n result = await options.adapter.mutate(\n authorized,\n {\n locator: room.locator,\n changeBatch: head,\n ...(state?.upload === undefined ? {} : { upload: state.upload }),\n },\n (upload) => exclusive(() => keepUpload(local, room.locator, head.id, upload)),\n );\n } catch {\n progress.complete = false;\n if (continuing()) progress.reachable = false;\n return;\n }\n if (!continuing()) return;\n if (result.kind === 'transport-uncertainty') {\n progress.complete = false;\n progress.reachable = false;\n return;\n }\n if (result.kind === 'room-not-readable') {\n progress.complete = false;\n unreadable.add(room.locator);\n list(room, false);\n emitRooms();\n return;\n }\n if (result.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n return;\n }\n if (result.kind === 'scoped-refusal') {\n await scoped(result, room, local);\n progress.complete = false;\n return;\n }\n if (result.kind === 'write-halted') {\n journal.record(`outcome ${room.locator} ${head.id} write-halted`);\n await exclusive(() => mark(local, room.locator, head.id, { state: 'waiting' }, lost));\n if (serviceMode === 'open' && openSignals !== opensBefore) continue;\n haltedRefusal = true;\n progress.complete = false;\n return;\n }\n if (\n result.kind === 'conflicted' ||\n result.kind === 'rejected' ||\n result.kind === 'expired' ||\n result.kind === 'retryable-refusal'\n ) {\n if (result.kind === 'expired') {\n const withheld = await advance(room, local, authorized);\n if (withheld !== null) return withhold(withheld, room, local, progress);\n }\n journal.record(\n `outcome ${room.locator} ${head.id} ${result.kind}` +\n (result.kind === 'conflicted' && result.roomVersion !== undefined\n ? ` ${result.roomVersion}`\n : ''),\n );\n if (result.kind !== 'expired') journal.record(`refusal ${result.kind} ${result.code}`);\n }\n if (result.kind === 'retryable-refusal') {\n const reset = result.reset;\n progress.complete = false;\n await exclusive(() =>\n mark(\n local,\n room.locator,\n head.id,\n reset === undefined ? { state: 'waiting' } : { state: 'reset', reset },\n lost,\n ),\n );\n return;\n }\n if (result.kind === 'conflicted' || result.kind === 'rejected' || result.kind === 'expired') {\n const left = leaving(head, result);\n await exclusive(async () => {\n if (!continuing()) return;\n const current = replicas.get(room.locator);\n if (current === undefined || !current.queue.some((batch) => batch.id === head.id)) {\n return;\n }\n const set = await settle(\n local,\n room.locator,\n current,\n current.confirmed,\n current.queue.filter((batch) => batch.id !== head.id),\n {\n leaving:\n result.kind === 'expired' && landed(head, current.confirmed)\n ? { ...left, returned: null }\n : left,\n },\n );\n publishChangeSet(set);\n moveTo({ ...status, ...attention() });\n });\n if (result.kind === 'expired') continue;\n const withheld = await advance(room, local, authorized);\n if (withheld !== null) return withhold(withheld, room, local, progress);\n continue;\n }\n const from = replicas.get(room.locator)?.confirmed;\n if (from === undefined) return;\n const pulled = await pullRefresh(authorized, from);\n if (!continuing()) return;\n if (pulled.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n return;\n }\n if (pulled.kind === 'scoped-refusal') {\n await scoped(pulled, room, local);\n progress.complete = false;\n return;\n }\n if (pulled.kind === 'still-current') {\n if (!(await committed(room, local, head, result, from, true))) {\n progress.complete = false;\n return;\n }\n continue;\n }\n if (pulled.kind === 'advanced') {\n const overlay = pulled.confirmed.record.roomVersion === result.roomVersion;\n if (!(await committed(room, local, head, result, pulled.confirmed, overlay))) {\n progress.complete = false;\n return;\n }\n continue;\n }\n if (pulled.kind === 'beyond-horizon') {\n const bootstrapped = await pullBootstrap(authorized, room);\n if (!continuing()) return;\n if (bootstrapped.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n return;\n }\n if (bootstrapped.kind === 'scoped-refusal') {\n await scoped(bootstrapped, room, local);\n progress.complete = false;\n return;\n }\n if (bootstrapped.kind === 'staged') {\n const overlay = bootstrapped.confirmed.record.roomVersion === result.roomVersion;\n if (!(await committed(room, local, head, result, bootstrapped.confirmed, overlay))) {\n progress.complete = false;\n return;\n }\n continue;\n }\n progress.complete = false;\n if (bootstrapped.kind === 'transport-uncertainty') {\n progress.reachable = false;\n } else if (bootstrapped.kind === 'room-not-readable') {\n unreadable.add(room.locator);\n list(room, false);\n emitRooms();\n } else if (bootstrapped.kind === 'refused') {\n await holdAccepted(room, local, head, result, bootstrapped);\n }\n return;\n }\n progress.complete = false;\n if (pulled.kind === 'transport-uncertainty') {\n progress.reachable = false;\n } else if (pulled.kind === 'room-not-readable') {\n unreadable.add(room.locator);\n list(room, false);\n emitRooms();\n } else if (pulled.kind === 'refused') {\n await holdAccepted(room, local, head, result, pulled);\n }\n return;\n }\n return;\n }\n\n async function retainModel(\n local: RuntimeStore,\n room: RoomDeclaration,\n attached: Attached,\n next: ModelState,\n ) {\n const key = modelKey(room.locator, attached);\n if (next.status === 'unavailable') modelEpoch.set(key, (modelEpoch.get(key) ?? 0) + 1);\n const epoch = modelEpoch.get(key) ?? 0;\n const previous = modelOf(room.locator, attached);\n const heldBefore = replicas.get(room.locator)?.confirmed.record;\n if (\n JSON.stringify(previous) === JSON.stringify(next) &&\n (heldBefore === undefined ||\n (JSON.stringify(heldBefore.operations) === JSON.stringify(room.operations) &&\n JSON.stringify(heldBefore.replica) === JSON.stringify(room.replica) &&\n JSON.stringify(heldBefore.attachedModel) === JSON.stringify(room.attachedModel) &&\n JSON.stringify(heldBefore.typedSelection) ===\n JSON.stringify(room.typedSelection ?? null)))\n )\n return;\n if (next.status === 'unavailable') {\n invalidModels.add(key);\n liveModels.delete(key);\n }\n await exclusive(async () => {\n if (!continuing()) return;\n if (next.status !== 'unavailable' && epoch !== (modelEpoch.get(key) ?? 0)) return;\n const held = replicas.get(room.locator);\n if (held !== undefined) {\n const record = {\n ...held.confirmed.record,\n operations: room.operations,\n replica: room.replica,\n attachedModel: room.attachedModel,\n typedSelection: room.typedSelection ?? null,\n ...(attached === 'collection' ? { model: next } : { selectionModel: next }),\n };\n await local.write({\n next: record,\n previous: held.confirmed.record,\n queue: held.queue,\n });\n const read = readConfirmed(record, held.confirmed);\n if (read.kind === 'staged') {\n replicas.set(room.locator, replicaOf(read.confirmed, held.queue, rewriting(), held));\n if (declarationRefusals.delete(room.locator)) {\n sourceRefusals.delete(room.locator);\n unreadable.delete(room.locator);\n }\n } else if (read.kind === 'refused') {\n replicas.set(room.locator, { ...held, confirmed: { ...held.confirmed, record } });\n refusedSource(room, read);\n declarationRefusals.add(room.locator);\n }\n }\n models.set(key, next);\n if (next.status === 'current') {\n liveModels.set(key, JSON.stringify(next.snapshot));\n invalidModels.delete(key);\n }\n list(room, room.replica.admission === 'admitted' && !unreadable.has(room.locator));\n if (held === undefined) emitRooms();\n else\n publishChangeSet(\n changeSet(room.locator, held, replicas.get(room.locator) ?? null, { room: true }),\n );\n });\n }\n\n async function acquireModel(\n local: RuntimeStore,\n room: DiscoveredRoom,\n authorized: Authorization,\n selection: TypedSelection | null,\n ) {\n const attached: Attached = selection === null ? 'collection' : 'typed-selection';\n const key = modelKey(room.locator, attached);\n const declared = selection === null ? room.attachedModel : selection.attachedModel;\n let previous = modelOf(room.locator, attached);\n if (\n previous.status !== 'unavailable' &&\n (declared === null || !sameModel(previous.snapshot, declared))\n ) {\n previous = { status: 'unavailable', reason: 'version-changed' };\n await retainModel(local, room, attached, previous);\n if (discoveryPaused) return;\n }\n const epoch = modelEpoch.get(key) ?? 0;\n let answer;\n try {\n answer = await options.adapter.model(\n authorized,\n selection === null\n ? {\n locator: room.locator,\n attached: 'collection',\n collectionRoot: room.collectionRoot,\n model: declared,\n }\n : {\n locator: room.locator,\n attached: 'typed-selection',\n roots: selection.roots,\n model: declared,\n },\n );\n } catch {\n answer = { kind: 'transport-uncertainty' as const };\n }\n if (discoveryPaused || epoch !== (modelEpoch.get(key) ?? 0)) return;\n if (answer.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n return;\n }\n if (answer.kind === 'transport-uncertainty') {\n await retainModel(local, room, attached, cached(previous));\n return;\n }\n if (answer.kind === 'model-unavailable') {\n await retainModel(local, room, attached, {\n status: 'unavailable',\n reason: answer.reason,\n });\n return;\n }\n if (declared === null || !sameModel(answer.snapshot, declared)) {\n await retainModel(local, room, attached, {\n status: 'unavailable',\n reason: 'version-changed',\n });\n return;\n }\n if (\n previous.status !== 'unavailable' &&\n sameModel(previous.snapshot, answer.snapshot) &&\n previous.snapshot.schema !== answer.snapshot.schema\n ) {\n await retainModel(local, room, attached, { status: 'unavailable', reason: 'invalid' });\n return;\n }\n const verified =\n answer.snapshot.schema === null ? EMPTY_SCHEMA : verify(answer.snapshot.schema);\n if (verified.verdict === 'refuse') {\n const where = verified.location === undefined ? '' : ` ${verified.location}`;\n journal.record(\n `model invalid ${room.locator} ${attached} ${answer.snapshot.identity} ${verified.rule}${where}`,\n );\n }\n await retainModel(\n local,\n room,\n attached,\n verified.verdict === 'accept'\n ? {\n status: 'current',\n snapshot: structuredClone(answer.snapshot),\n verifiedWith: MD_MODEL,\n types: verified.model.types,\n }\n : { status: 'unavailable', reason: 'invalid' },\n );\n }\n\n async function scoped(\n result: import('./adapter.js').ScopedRefusal,\n room: RoomDeclaration,\n local: RuntimeStore,\n ) {\n scopedRefusals.set(room.locator, { code: result.code, fields: result.fields });\n let scopedAway = room;\n if (result.scope === 'model')\n await retainModel(local, room, 'collection', {\n status: 'unavailable',\n reason: 'not-readable',\n });\n else if (result.scope !== 'operation') {\n unreadable.add(room.locator);\n scopedAway = {\n ...room,\n replica: { ...room.replica, admission: 'unavailable' },\n operations: {\n ...room.operations,\n ...(result.scope === 'content' ? { read: [] } : {}),\n ...(result.scope === 'sync' ? { sync: [] } : {}),\n },\n };\n await retainModel(local, scopedAway, 'collection', modelOf(room.locator));\n }\n if (!continuing()) return;\n list(scopedAway, scopedAway.replica.admission === 'admitted' && !unreadable.has(room.locator));\n emitRooms();\n journal.record(`scoped refusal ${room.locator} ${result.scope} ${result.code}`);\n }\n\n async function synchronize(\n discovered: readonly DiscoveredRoom[],\n local: RuntimeStore,\n progress: CycleProgress,\n ) {\n const rooms = await Promise.allSettled(\n discovered.map((room) => synchronizeRoom(room, local, progress)),\n );\n const failed = rooms.find((room) => room.status === 'rejected');\n if (failed !== undefined) throw failed.reason;\n }\n\n async function synchronizeRoom(\n room: DiscoveredRoom,\n local: RuntimeStore,\n progress: CycleProgress,\n ) {\n if (closed || authorization === undefined) {\n progress.complete = false;\n return;\n }\n const prior = replicas.get(room.locator)?.confirmed.record;\n if (prior !== undefined && prior.replica.selection !== room.replica.selection) {\n list(prior, false);\n emitRooms();\n journal.record(`selection changed ${room.locator}`);\n progress.complete = false;\n return;\n }\n const selection = room.typedSelection;\n await Promise.all([\n acquireModel(local, room, authorization, null),\n ...(selection === undefined ? [] : [acquireModel(local, room, authorization, selection)]),\n ]);\n if (discoveryPaused || authorization === undefined) return;\n if (room.replica.admission !== 'admitted') {\n progress.complete = false;\n return;\n }\n const held = replicas.get(room.locator);\n if (held !== undefined && held.confirmed.record.replica.selection !== room.replica.selection) {\n progress.complete = false;\n return;\n }\n const withheld = await advance(room, local, authorization);\n if (withheld !== null) {\n await withhold(withheld, room, local, progress);\n return;\n }\n await submitRoom(room, local, authorization, progress);\n }\n\n async function cycle(local: RuntimeStore, progress: CycleProgress) {\n if (closed || authorization === undefined) {\n notifyReady();\n return;\n }\n moveTo(transferring(status));\n let result;\n try {\n result = await options.adapter.discover(authorization);\n } catch {\n result = { kind: 'transport-uncertainty' as const };\n }\n if (closed) {\n notifyReady();\n return;\n }\n journal.record(`connection discover ${result.kind}`);\n if (result.kind === 'transport-uncertainty') {\n for (const room of rooms.values()) {\n await retainModel(local, room, 'collection', cached(modelOf(room.locator)));\n if (room.typedSelection !== null) {\n await retainModel(\n local,\n room,\n 'typed-selection',\n cached(modelOf(room.locator, 'typed-selection')),\n );\n }\n }\n progress.reachable = false;\n notifyReady();\n return;\n }\n if (result.kind === 'contract-unavailable') {\n journal.record(`connection contract unavailable ${result.code}`);\n await refuse('missing-required-guarantee', { code: result.code, fields: result.fields });\n notifyReady();\n return;\n }\n if (result.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n notifyReady();\n return;\n }\n if (!result.supportedVersions.includes(ROOM_CONTRACT_VERSION)) {\n await refuse('no-matching-version');\n notifyReady();\n return;\n }\n if (\n result.mdModel.identity !== MD_MODEL.identity ||\n result.mdModel.version !== MD_MODEL.version\n ) {\n await refuse('md-model-version-mismatch');\n notifyReady();\n return;\n }\n mismatchedRoots.clear();\n for (const room of result.rooms) {\n const held = replicas.get(room.locator)?.confirmed.record;\n const malformed = !validRoot(room.collectionRoot);\n if (\n room.operations === undefined ||\n !['read', 'sync', 'write', 'delete'].every(\n (operation) =>\n Array.isArray(room.operations[operation as keyof typeof room.operations]) &&\n room.operations[operation as keyof typeof room.operations].every(\n (scope) => typeof scope === 'string',\n ),\n ) ||\n room.replica === undefined ||\n typeof room.replica.selection !== 'string' ||\n room.replica.selection.length === 0 ||\n !['admitted', 'unavailable'].includes(room.replica.admission) ||\n !declaredIdentity(room.attachedModel)\n ) {\n journal.record(`invalid model or replica declaration ${room.locator}`);\n await refuse('missing-required-guarantee');\n notifyReady();\n return;\n }\n if (!declaredSelection(room)) {\n journal.record(`invalid typed selection declaration ${room.locator}`);\n await refuse('missing-required-guarantee');\n notifyReady();\n return;\n }\n if (malformed || (held !== undefined && held.collectionRoot !== room.collectionRoot)) {\n mismatchedRoots.add(room.locator);\n journal.record(`collection root ${malformed ? 'invalid' : 'changed'} ${room.locator}`);\n }\n }\n if (mismatchedRoots.size > 0) {\n await refuse('missing-required-guarantee');\n notifyReady();\n return;\n }\n const declared = new Set(result.capabilities.map((capability) => capability.name));\n for (const required of options.requiredGuarantees) {\n if (!knownCapabilities.has(required) || !declared.has(required)) {\n await refuse('missing-required-guarantee');\n notifyReady();\n return;\n }\n }\n if (refusal !== null) {\n refusal = null;\n emitRefusal();\n }\n const previousCapabilities = capabilities;\n capabilities = result.capabilities;\n notifyReady();\n if (declared.has('room-version-notifications')) observeRoomVersions();\n const discoveredSlots = result.slots ?? [];\n if (\n JSON.stringify(result.providerLimits) !== JSON.stringify(limits) ||\n JSON.stringify(result.capabilities) !== JSON.stringify(previousCapabilities) ||\n JSON.stringify(discoveredSlots) !== JSON.stringify(slots)\n ) {\n limits = result.providerLimits;\n slots = discoveredSlots;\n await local.declare(limits, capabilities, slots);\n }\n await applyDiscovery(result.rooms, local);\n handSelected(\n result.rooms\n .filter((room) => room.replica.admission === 'admitted')\n .map((room) => room.locator)\n .sort(),\n );\n progress.complete = true;\n await synchronize(result.rooms, local, progress);\n if (closed || discoveryPaused) return;\n await conversations.reconcile();\n if (status.providerUnreachable) conversations.reconnected();\n await conversations.catchUp(progress);\n }\n\n async function ensureAuthorization() {\n if (authorization !== undefined) return;\n try {\n authorization = await options.adapter.authorize();\n journal.record('connection authorize');\n } catch (error) {\n journal.record('connection authorize transport-uncertainty');\n throw error;\n }\n }\n\n async function connect() {\n if (closed || stopping || discoveryPaused) {\n notifyReady();\n return;\n }\n startTimer();\n const progress: CycleProgress = { complete: false, reachable: true };\n let completedAt = new Date().toISOString();\n try {\n const local = await openLocal();\n if (closed) return;\n await ensureAuthorization();\n if (closed) return;\n await cycle(local, progress);\n if (closed) return;\n if (progress.complete) {\n completedAt = new Date().toISOString();\n await local.complete(completedAt);\n }\n } catch {\n progress.complete = false;\n notifyReady();\n return;\n } finally {\n notifyReady();\n moveTo(settled(status, progress, completedAt, pending(), attention()));\n }\n }\n\n async function run() {\n try {\n await connect();\n } finally {\n inflight = false;\n if (queued && !closed) {\n queued = false;\n void enqueue();\n }\n }\n }\n\n function observeRoomVersions() {\n const path = options.adapter.roomVersions;\n if (path === undefined || withdrawNotifications !== undefined) return;\n withdrawNotifications = path.observe((notification) => {\n if (closed || stopping || discoveryPaused) return;\n if (notification.modelChanged === true && handed?.includes(notification.locator) === true) {\n void enqueue();\n return;\n }\n notices.set(notification.locator, notification.roomVersion);\n chain = chain.then(runNotified, runNotified);\n });\n }\n\n function writesHeld(): boolean {\n return serviceMode === 'write-halted' || haltedRefusal;\n }\n\n function signalled(mode: ServiceMode) {\n if (closed) return;\n if (mode === 'open') openSignals += 1;\n const releasing = mode === 'open' && (haltedRefusal || serviceMode === 'write-halted');\n if (mode === 'open') haltedRefusal = false;\n if (mode !== serviceMode) {\n serviceMode = mode;\n journal.record(`service mode ${mode}`);\n for (const listener of serviceModeListeners) listener(mode);\n }\n if (releasing) void enqueue();\n }\n\n function observeConversations() {\n const stream = options.adapter.conversations;\n if (stream === undefined || withdrawConversations !== undefined) return;\n withdrawConversations = stream.observe((event) => {\n conversations.receive(event);\n if (event.kind !== 'gap' || conversations.current()) return;\n show();\n scheduleCurrency();\n });\n }\n\n function scheduleCurrency() {\n if (currencyQueued || closed || stopping) return;\n currencyQueued = true;\n chain = chain.then(runCurrency, runCurrency);\n }\n\n async function runCurrency() {\n currencyQueued = false;\n if (closed || stopping || discoveryPaused) return;\n await conversations.reconcile();\n if (conversations.current()) {\n show();\n return;\n }\n const resting = status;\n const progress: CycleProgress = { complete: false, reachable: !resting.providerUnreachable };\n moveTo(transferring(resting));\n try {\n await conversations.catchUp(progress);\n } catch {\n progress.reachable = false;\n } finally {\n if (!closed) {\n moveTo(settled(resting, progress, resting.lastCompleted, pending(), attention()));\n }\n }\n }\n\n function handSelected(locators: readonly string[]) {\n const path = options.adapter.roomVersions;\n if (path === undefined || withdrawNotifications === undefined) return;\n if (handed !== undefined && JSON.stringify(locators) === JSON.stringify(handed)) return;\n handed = locators;\n path.select(locators);\n }\n\n async function runNotified() {\n const announced = [...notices];\n notices.clear();\n if (announced.length === 0 || closed || stopping || discoveryPaused) return;\n const resting = status;\n const progress: CycleProgress = { complete: false, reachable: !resting.providerUnreachable };\n moveTo(transferring(resting));\n try {\n const local = await openLocal();\n for (const [locator, roomVersion] of announced) {\n if (closed || discoveryPaused || authorization === undefined) return;\n if (handed?.includes(locator) !== true) continue;\n const room = discovered.get(locator);\n const held = replicas.get(locator);\n if (room === undefined) continue;\n if (sourceRefusals.has(locator)) {\n void enqueue();\n continue;\n }\n if (held === undefined) continue;\n if (held.confirmed.record.roomVersion === roomVersion) continue;\n const withheld = await advance(room, local, authorization);\n if (withheld === null) continue;\n if (withheld.kind === 'refused') {\n void enqueue();\n continue;\n }\n if (withheld.kind === 'scoped-refusal') {\n await scoped(withheld, room, local);\n continue;\n }\n if (withheld.kind === 'transport-uncertainty') {\n progress.reachable = false;\n continue;\n }\n if (withheld.kind === 'room-not-readable') {\n unreadable.add(locator);\n list(room, false);\n emitRooms();\n continue;\n }\n if (withheld.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n return;\n }\n }\n } catch {\n progress.reachable = false;\n } finally {\n if (!closed) {\n moveTo(settled(resting, progress, resting.lastCompleted, pending(), attention()));\n }\n }\n }\n\n function enqueue() {\n if (stopping) return chain;\n if (inflight) {\n queued = true;\n return chain;\n }\n inflight = true;\n chain = chain.then(run, run);\n return chain;\n }\n\n function close() {\n if (closed) return;\n closed = true;\n withdrawNotifications?.();\n withdrawNotifications = undefined;\n withdrawConversations?.();\n withdrawConversations = undefined;\n withdrawServiceMode?.();\n conversations.close();\n stopTimer();\n store?.close();\n void opening?.then(\n (opened) => {\n opened.close();\n },\n () => {},\n );\n roomListeners.clear();\n refusalListeners.clear();\n storageLossListeners.clear();\n statusListeners.clear();\n serviceModeListeners.clear();\n readSide.close();\n queueSubscriptions.clear();\n roomDraftListeners.clear();\n presentationListeners.clear();\n }\n\n async function stop() {\n stopping = true;\n stopTimer();\n await chain.catch(() => undefined);\n await mutations;\n close();\n }\n\n const withdrawServiceMode = options.adapter.serviceMode?.observe(signalled);\n observeConversations();\n options.signal?.addEventListener('abort', close, { once: true });\n if (options.signal?.aborted) close();\n\n void openLocal().catch(() => {\n notifyReady();\n });\n void enqueue();\n\n function watch(\n topic: RuntimeTopic,\n input: readonly unknown[],\n deliver: (message: unknown) => void,\n ): () => void {\n if (topic === 'room-drafts') {\n const listener: RoomDraftSubscription = { notify: deliver, ready: false };\n roomDraftListeners.add(listener);\n void exclusive(async () => {\n await openLocal();\n if (closed || !roomDraftListeners.has(listener)) return;\n listener.ready = true;\n }).then(\n () => {\n if (closed || !listener.ready || !roomDraftListeners.has(listener)) return;\n listener.notify(snapshotRoomDrafts());\n },\n () => {},\n );\n return () => {\n roomDraftListeners.delete(listener);\n };\n }\n if (topic === 'conversation') {\n return conversations.watch(input[0] as string, input[1] as ConversationOptions, deliver);\n }\n if (topic === 'presentation') {\n const listener: PresentationSubscription = {\n app: input[0] as string,\n notify: deliver,\n ready: false,\n };\n presentationListeners.add(listener);\n void exclusive(async () => {\n await openLocal();\n }).then(\n () => {\n if (closed || !presentationListeners.has(listener)) return;\n listener.ready = true;\n listener.notify(presentationOf(listener.app));\n },\n () => {},\n );\n return () => {\n presentationListeners.delete(listener);\n };\n }\n if (topic === 'rooms') {\n roomListeners.add(deliver);\n deliver(listed());\n return () => {\n roomListeners.delete(deliver);\n };\n }\n if (topic === 'connection-refusal') {\n refusalListeners.add(deliver);\n deliver(refusal);\n return () => {\n refusalListeners.delete(deliver);\n };\n }\n if (topic === 'storage-loss') {\n storageLossListeners.add(deliver);\n deliver(storageLoss);\n return () => {\n storageLossListeners.delete(deliver);\n };\n }\n if (topic === 'sync-status') {\n statusListeners.add(deliver);\n deliver(shown);\n return () => {\n statusListeners.delete(deliver);\n };\n }\n if (topic === 'service-mode') {\n serviceModeListeners.add(deliver);\n deliver(serviceMode);\n return () => {\n serviceModeListeners.delete(deliver);\n };\n }\n if (topic === 'queue') {\n const queue: QueueSubscription = { locator: input[0] as string, notify: deliver };\n queueSubscriptions.add(queue);\n queue.notify(entriesOf(queue.locator));\n return () => {\n queueSubscriptions.delete(queue);\n };\n }\n const plan = planOf(input[0], roomFacts());\n return readSide.watch(plan, identityOf(plan), deliver);\n }\n\n const md: MdRuntime = {\n loaded() {\n return openLocal().then(() => undefined);\n },\n rooms() {\n return listed();\n },\n slots() {\n return slotted();\n },\n query: ((input: unknown) => readSide.query(planOf(input, roomFacts()))) as MdRuntime['query'],\n async search(input: unknown) {\n const plan = searchPlanOf(input);\n const selected =\n plan.documents === undefined\n ? null\n : ((await readSide.query(filterOf(plan.documents, roomFacts()))) as DocumentResult)\n .documents;\n return searchIndex.search(plan, selected);\n },\n types(locator: string): RoomTypes {\n return {\n collection: modelTypes(modelOf(locator)),\n typedSelection:\n rooms.get(locator)?.typedSelection === undefined ||\n rooms.get(locator)?.typedSelection === null\n ? null\n : modelTypes(modelOf(locator, 'typed-selection')),\n };\n },\n syncStatus() {\n return shown;\n },\n serviceMode() {\n return serviceMode;\n },\n roomDraft: {\n list() {\n return exclusive(async () => {\n await openLocal();\n return snapshotRoomDrafts();\n }).then((listed) => {\n publishRoomDrafts(true);\n return listed;\n });\n },\n read(room: string, path: string) {\n const record = roomDrafts.get(room)?.get(path);\n return record === undefined ? null : roomDraftOf(record);\n },\n write(room: string, path: string, revision: string | null, input: unknown) {\n return exclusive(async (): Promise<RoomDraftWrite> => {\n const parts = readParts(input);\n if (path === '' || normalize(path) !== path) throw new Error('room-draft-malformed');\n const local = await openLocal();\n const current = roomDrafts.get(room)?.get(path);\n if ((current?.revision ?? null) !== revision) {\n return {\n outcome: 'stale',\n current: current === undefined ? null : roomDraftOf(current),\n };\n }\n const record: RoomDraftRecord = {\n locator: room,\n path,\n revision: roomDraftRevision(),\n parts: held(current?.parts, parts),\n returned: current?.returned ?? null,\n };\n await local.keepRoomDraft(record);\n rememberRoomDraft(record);\n publishChangeSet(changeSet(room, null, null, { drafts: [path] }));\n return { outcome: 'written', roomDraft: roomDraftOf(record) };\n });\n },\n discard(room: string, path: string, revision: string) {\n return exclusive(async (): Promise<RoomDraftWrite> => {\n const local = await openLocal();\n const current = roomDrafts.get(room)?.get(path);\n if (current === undefined || current.revision !== revision) {\n return {\n outcome: 'stale',\n current: current === undefined ? null : roomDraftOf(current),\n };\n }\n await local.discardRoomDraft(room, path);\n forgetRoomDraft(room, path);\n publishChangeSet(changeSet(room, null, null, { drafts: [path] }));\n moveTo({ ...status, ...attention() });\n return { outcome: 'written', roomDraft: null };\n });\n },\n },\n conversation: conversations.surface,\n chatDraft: conversations.chatDraft,\n presentation: {\n read(app: string) {\n return exclusive(async () => {\n await openLocal();\n return presentationOf(app);\n });\n },\n write(app: string, value: unknown) {\n return exclusive(async () => {\n const local = await openLocal();\n const stored = structuredClone(value);\n await local.present({ app, value: stored });\n presentations.set(app, stored);\n publishChangeSet(changeSet('', null, null, { presentation: app }));\n });\n },\n },\n save(\n room: string,\n named: readonly SavedRoomDraft[],\n writtenBy?: WrittenBy,\n ): Promise<SaveResult> {\n return exclusive(() => saveRoomDrafts(room, named, writtenBy));\n },\n outcome(identifier: string): SubmissionOutcome | null {\n return outcomes.get(identifier) ?? null;\n },\n history(locator: string, path: string, query?: HistoryQuery) {\n return readHistory(locator, path, query);\n },\n call(name: string, input: unknown) {\n return invokeAction(name, input);\n },\n log() {\n return journal.export();\n },\n storageLoss() {\n return storageLoss;\n },\n persistence() {\n return options.shell.persistentStorage;\n },\n observe: ((topic: RuntimeTopic, ...input: unknown[]) =>\n opened(\n (deliver) =>\n watch(topic, input, (message) => {\n deliver(structuredClone(message));\n }),\n topic === 'query',\n )) as MdRuntime['observe'],\n async reauthorize() {\n if (refusal === null || !refusal.reauthorizationOffered) return;\n journal.record('connection reauthorize');\n await chain.catch(() => undefined);\n await mutations;\n authorization = undefined;\n discoveryPaused = false;\n await enqueue();\n },\n };\n return { md, stop, watch };\n}\n"],"names":["verify","cached","modelTypes","NO_MODEL","sameModel","opened","filterOf","identityOf","planOf","createReadSide","createSearchIndex","searchPlanOf","ROOM_CONTRACT_VERSION","VERSION_1_CAPABILITIES","bootstrapRoom","changeSet","mergeChangeSets","createConversationStore","MD_MODEL","parseCollection","validRoot","createLog","refreshRoom","buildBatch","applyReturned","compositionOf","landed","readConfirmed","replicaOf","withdrawals","changedParts","changesOf","held","readParts","returnedInto","underneath","settled","same","saving","STARTING","transferring","detectStorageLoss","nextGeneration","roomDraftRevision","beneath","normalize","openRuntimeStore","unconfirmed","DEFAULT_DISCOVERY_INTERVAL_MS","EMPTY_SCHEMA","verdict","model","types","knownCapabilities","Set","within","root","path","declaredIdentity","undefined","identity","length","version","declaredSelection","room","selection","typedSelection","Array","isArray","roots","attachedModel","every","index","collectionRoot","other","at","createMdRuntime","options","composeRuntime","md","period","discoveryIntervalMs","authorization","opening","store","replicas","Map","pendings","roomDrafts","presentations","outcomes","outcomeRooms","limits","slots","capabilities","rewriting","some","capability","name","rooms","unreadable","models","liveModels","invalidModels","modelEpoch","discovered","roomsListed","scopedRefusals","sourceRefusals","declarationRefusals","modelKey","locator","attached","modelOf","get","savedModel","has","status","reason","compositionFor","record","selectionModel","mismatchedRoots","refusal","storageLoss","shown","discoveryPaused","timer","closed","stopping","withdrawNotifications","handed","notices","chain","Promise","resolve","mutations","inflight","queued","roomListeners","refusalListeners","storageLossListeners","statusListeners","queueSubscriptions","roomDraftListeners","presentationListeners","readSide","withdrawConversations","currencyQueued","serviceMode","haltedRefusal","openSignals","serviceModeListeners","conversations","cards","declaredCards","documents","query","select","roomFacts","call","input","invokeAction","durably","stream","adapter","publish","publishChangeSet","searchIndex","document","messages","message","conversation","journal","notifyReady","ready","rememberRoomDraft","set","forgetRoomDraft","delete","size","roomDraftOf","structuredClone","revision","parts","changedUnderneath","visible","returned","snapshotRoomDrafts","records","values","flatMap","sort","left","right","map","publishRoomDrafts","waitingOnly","value","listener","notify","presentationOf","app","emitPresentation","pending","replica","queue","attention","attentionRequired","push","reset","submission","state","listed","slotted","slot","entries","segment","available","Object","emitRooms","emitRefusal","emitStorageLoss","moveTo","next","show","current","submissionOf","batch","id","entriesOf","freeze","emitQueue","subscription","applyChangeSet","apply","changed","queues","drafts","change","scheduleCurrency","stopTimer","clearInterval","startTimer","setInterval","enqueue","refuse","provider","exclusive","revoked","local","openLocal","revokeModels","confirmed","keys","add","key","before","read","kind","reauthorizationOffered","list","synchronizationAvailable","operations","providerOwnedPaths","roomVersion","applyDiscovery","listedLocators","clear","dropUnlisted","admission","unlistedHeld","filter","unlisted","dropRooms","removed","restored","persisted","prior","snapshot","JSON","stringify","hydrate","recordedOutcomes","kept","presented","chatDrafts","lastCompleted","declared","named","listedSlots","all","presentation","providerLimits","queuedBatches","outcome","previousReplicas","retyped","collection","existing","refusedSource","locators","readState","open","shell","generation","storedGeneration","loss","rememberGeneration","keepGeneration","work","catch","error","then","withdrawable","lost","settle","settling","withdrawn","includes","returning","reverse","leaving","written","saved","settledOutcomes","accepted","write","previous","previousQueue","continuing","retained","Error","saveRoomDrafts","writtenBy","rule","file","draft","built","baseRoomVersion","composition","changes","bases","batches","consumed","consumedRoomDrafts","identifier","mark","submit","keepUpload","upload","readHistory","ensureAuthorization","transfer","pageToken","join","result","history","scoped","conversationCards","declaredAction","action","actions","code","pullRefresh","authorized","detail","pullBootstrap","advance","refreshed","bootstrapped","withhold","withheld","progress","complete","reachable","fields","location","referrers","affected","acceptedOf","author","time","logAccepted","submitted","holdAccepted","refused","commitAccept","base","overlay","remaining","retainedBase","applied","revisions","removals","committed","failed","submitRoom","head","earlier","Date","now","parse","writesHeld","opensBefore","mutate","changeBatch","from","pulled","retainModel","epoch","heldBefore","acquireModel","answer","schema","verified","where","verifiedWith","scopedAway","scope","sync","synchronize","allSettled","synchronizeRoom","find","cycle","discover","supportedVersions","mdModel","malformed","operation","required","requiredGuarantees","previousCapabilities","observeRoomVersions","discoveredSlots","declare","handSelected","reconcile","providerUnreachable","reconnected","catchUp","authorize","connect","completedAt","toISOString","run","roomVersions","observe","notification","modelChanged","runNotified","signalled","mode","releasing","observeConversations","event","receive","runCurrency","resting","announced","close","withdrawServiceMode","stop","signal","addEventListener","once","aborted","watch","topic","deliver","plan","loaded","search","selected","syncStatus","roomDraft","keepRoomDraft","discard","discardRoomDraft","surface","chatDraft","stored","present","save","log","export","persistence","persistentStorage","reauthorize"],"mappings":"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"}
1
+ {"version":3,"sources":["/workspace/packages/mdruntime/src/connection.ts"],"sourcesContent":["import { verify, type ModelVerification } from '@agentshouse/mdmodel';\nimport {\n cached,\n modelTypes,\n NO_MODEL,\n sameModel,\n type ModelState,\n type TypesResult,\n} from './model.js';\nimport { opened, type Observation } from './observation.js';\nimport {\n filterOf,\n identityOf,\n planOf,\n type DocumentQuery,\n type DocumentResult,\n type GroupQuery,\n type GroupResult,\n type HeldRooms,\n} from './query.js';\nimport { createReadSide } from './read-side.js';\nimport {\n createSearchIndex,\n searchPlanOf,\n type SearchRequest,\n type SearchResult,\n} from './search.js';\nimport {\n ROOM_CONTRACT_VERSION,\n VERSION_1_CAPABILITIES,\n type ActionResult,\n type Adapter,\n type AdapterFailure,\n type Authorization,\n type Capability,\n type DiscoveredRoom,\n type Discovery,\n type HistoryResult,\n type MutationResult,\n type ProviderLimit,\n type RetryableRefusal,\n type RoomVersionAt,\n type ConversationCards,\n type ConversationAction,\n type ProviderRefusal,\n type ServiceMode,\n type TypedSelection,\n} from './adapter.js';\nimport { bootstrapRoom } from './bootstrap.js';\nimport { changeSet, mergeChangeSets, type ChangeSet } from './change-set.js';\nimport {\n createConversationStore,\n type ChatDraftSurface,\n type ConversationOptions,\n type ConversationStore,\n type ConversationSurface,\n type ConversationView,\n} from './conversation.js';\nimport type { ChangeBatch, WrittenBy } from './change.js';\nimport { MD_MODEL, parseCollection, validRoot, type Composition } from './collection.js';\nimport { createLog } from './log.js';\nimport type { CallResult, QueueEntry, Submission, SubmissionOutcome } from './outcome.js';\nimport { refreshRoom } from './refresh.js';\nimport { buildBatch, type Rewriting, type SaveRefusal } from './save.js';\nimport {\n applyReturned,\n compositionOf,\n landed,\n readConfirmed,\n replicaOf,\n withdrawals,\n type ConfirmedLayer,\n type Replica,\n} from './replica.js';\nimport {\n changedParts,\n changesOf,\n held,\n readParts,\n returnedInto,\n underneath,\n type ReturnReason,\n type RoomDraft,\n type RoomDraftRecord,\n type RoomDraftWrite,\n type SavedDraft,\n} from './room-draft.js';\nimport {\n settled,\n same,\n saving,\n STARTING,\n transferring,\n type AttentionEntry,\n type CycleProgress,\n type SyncStatus,\n} from './status.js';\nimport { detectStorageLoss, nextGeneration, type RuntimeShell } from './durability.js';\nimport { roomDraftRevision } from './identity.js';\nimport { beneath, normalize } from './paths.js';\nimport {\n openRuntimeStore,\n type PendingState,\n type ReplicaRecord,\n type RuntimeStore,\n} from './store.js';\nimport { unconfirmed, type Refused, type Unconfirmed } from './transfer.js';\n\nconst DEFAULT_DISCOVERY_INTERVAL_MS = 60_000;\n\nconst EMPTY_SCHEMA: ModelVerification = { verdict: 'accept', model: { types: {} } };\n\nconst knownCapabilities = new Set<string>(VERSION_1_CAPABILITIES);\n\ntype Attached = 'collection' | 'typed-selection';\n\ntype RoomDeclaration = Omit<DiscoveredRoom, 'roomVersion' | 'typedSelection'> & {\n typedSelection?: TypedSelection | null;\n};\n\nfunction within(root: string, path: string): boolean {\n return root === '' || beneath(root, path);\n}\n\nfunction declaredIdentity(model: import('./model.js').ModelIdentity | null | undefined): boolean {\n if (model === undefined) return false;\n if (model === null) return true;\n return (\n typeof model.identity === 'string' &&\n model.identity.length > 0 &&\n typeof model.version === 'string' &&\n model.version.length > 0\n );\n}\n\nfunction declaredSelection(room: DiscoveredRoom): boolean {\n const selection = room.typedSelection;\n if (selection === undefined) return true;\n if (!Array.isArray(selection.roots) || selection.roots.length === 0) return false;\n if (!declaredIdentity(selection.attachedModel)) return false;\n return selection.roots.every(\n (root, index) =>\n validRoot(root) &&\n root !== '' &&\n !within(room.collectionRoot, root) &&\n selection.roots.every((other, at) => at === index || !within(other, root)),\n );\n}\n\nexport type AppTypedSelection = {\n roots: readonly string[];\n attachedModel: import('./model.js').ModelIdentity | null;\n model: TypesResult;\n};\n\nexport type AppRoom = {\n collectionRoot: string;\n name: string;\n locator: string;\n operations: import('./adapter.js').OperationScopes;\n replica: import('./adapter.js').ReplicaAdmission;\n attachedModel: import('./model.js').ModelIdentity | null;\n model: TypesResult;\n typedSelection: AppTypedSelection | null;\n providerOwnedPaths: readonly string[];\n roomVersion: string | null;\n synchronizationAvailable: boolean;\n refusal: ProviderRefusal | null;\n};\n\nexport type AppSlotEntry = {\n room: AppRoom;\n segment: string | null;\n};\n\nexport type AppSlot = {\n slot: string;\n entries: readonly AppSlotEntry[];\n};\n\nexport type RoomTypes = {\n collection: TypesResult;\n typedSelection: TypesResult | null;\n};\n\nexport type ConnectionRefusalReason =\n | 'no-matching-version'\n | 'missing-required-guarantee'\n | 'md-model-version-mismatch'\n | 'revoked-authorization'\n | 'client-host-protocol-mismatch';\n\nexport type ConnectionRefusal = {\n reason: ConnectionRefusalReason;\n reauthorizationOffered: boolean;\n refusal: ProviderRefusal | null;\n};\n\nexport type MdRuntimeOptions = {\n adapter: Adapter;\n shell: RuntimeShell;\n requiredGuarantees: readonly string[];\n authorization?: Authorization;\n discoveryIntervalMs?: number;\n signal?: AbortSignal;\n};\n\nexport type SaveResult =\n | { outcome: 'saved'; identifier: string }\n | ({ outcome: 'refused' } & SaveRefusal);\n\nexport type SavedRoomDraft = { readonly path: string; readonly revision: string };\n\nexport type RoomDraftSurface = {\n list(): Promise<readonly RoomDraft[]>;\n read(room: string, path: string): RoomDraft | null;\n write(\n room: string,\n path: string,\n revision: string | null,\n parts: unknown,\n ): Promise<RoomDraftWrite>;\n discard(room: string, path: string, revision: string): Promise<RoomDraftWrite>;\n};\n\nexport type PresentationSurface = {\n read(app: string): Promise<unknown>;\n write(app: string, value: unknown): Promise<void>;\n};\n\nexport type HistoryQuery = {\n revision?: string;\n pageToken?: string;\n};\n\nexport type MdRuntime = {\n loaded(): Promise<void>;\n rooms(): readonly AppRoom[];\n slots(): readonly AppSlot[];\n query: {\n (query: DocumentQuery): Promise<DocumentResult>;\n (query: GroupQuery): Promise<GroupResult>;\n };\n search(request: SearchRequest): Promise<SearchResult>;\n types(locator: string): RoomTypes;\n syncStatus(): SyncStatus;\n serviceMode(): ServiceMode;\n roomDraft: RoomDraftSurface;\n conversation: ConversationSurface;\n chatDraft: ChatDraftSurface;\n presentation: PresentationSurface;\n save(\n room: string,\n roomDrafts: readonly SavedRoomDraft[],\n writtenBy?: WrittenBy,\n ): Promise<SaveResult>;\n outcome(identifier: string): SubmissionOutcome | null;\n history(locator: string, path: string, query?: HistoryQuery): Promise<HistoryResult>;\n call(name: string, input: unknown): Promise<CallResult>;\n reached(locator: string, roomVersion: string): boolean;\n log(): string;\n storageLoss(): string | null;\n persistence(): boolean;\n observe: {\n (topic: 'rooms'): Promise<Observation<readonly AppRoom[]>>;\n (topic: 'connection-refusal'): Promise<Observation<ConnectionRefusal | null>>;\n (topic: 'storage-loss'): Promise<Observation<string | null>>;\n (topic: 'sync-status'): Promise<Observation<SyncStatus>>;\n (topic: 'service-mode'): Promise<Observation<ServiceMode>>;\n (topic: 'query', query: DocumentQuery): Promise<Observation<DocumentResult>>;\n (topic: 'query', query: GroupQuery): Promise<Observation<GroupResult>>;\n (topic: 'queue', locator: string): Promise<Observation<readonly QueueEntry[]>>;\n (topic: 'room-drafts'): Promise<Observation<readonly RoomDraft[]>>;\n (topic: 'presentation', app: string): Promise<Observation<unknown>>;\n (\n topic: 'conversation',\n conversation: string,\n options: ConversationOptions,\n ): Promise<Observation<ConversationView>>;\n };\n reauthorize(): Promise<void>;\n};\n\nexport type RuntimeTopic =\n | 'rooms'\n | 'connection-refusal'\n | 'storage-loss'\n | 'sync-status'\n | 'service-mode'\n | 'query'\n | 'queue'\n | 'room-drafts'\n | 'presentation'\n | 'conversation';\n\nexport type ComposedRuntime = {\n md: MdRuntime;\n stop(): Promise<void>;\n watch(\n topic: RuntimeTopic,\n input: readonly unknown[],\n deliver: (message: unknown) => void,\n ): () => void;\n};\n\ntype QueueSubscription = {\n locator: string;\n notify: (entries: readonly QueueEntry[]) => void;\n};\n\ntype RoomDraftSubscription = {\n notify: (roomDrafts: readonly RoomDraft[]) => void;\n ready: boolean;\n};\n\ntype Leaving = { batch: ChangeBatch; outcome: SubmissionOutcome; returned: ReturnReason | null };\n\ntype PresentationSubscription = {\n app: string;\n notify: (value: unknown) => void;\n ready: boolean;\n};\n\ntype Withheld = AdapterFailure | RetryableRefusal | Unconfirmed | Refused;\n\nexport function createMdRuntime(options: MdRuntimeOptions): MdRuntime {\n return composeRuntime(options).md;\n}\n\nexport function composeRuntime(options: MdRuntimeOptions): ComposedRuntime {\n const period = options.discoveryIntervalMs ?? DEFAULT_DISCOVERY_INTERVAL_MS;\n let authorization: Authorization | undefined = options.authorization;\n let opening: Promise<RuntimeStore> | undefined;\n let store: RuntimeStore | undefined;\n const replicas = new Map<string, Replica>();\n const pendings = new Map<string, PendingState>();\n const roomDrafts = new Map<string, Map<string, RoomDraftRecord>>();\n const presentations = new Map<string, unknown>();\n const outcomes = new Map<string, SubmissionOutcome>();\n const outcomeRooms = new Map<string, string>();\n const wanted = new Map<string, string>();\n let limits: readonly ProviderLimit[] = [];\n let slots: NonNullable<Discovery['slots']> = [];\n let capabilities: readonly Capability[] = [];\n function rewriting(): Rewriting {\n return capabilities.some((capability) => capability.name === 'move-reference-rewrites')\n ? 'provider'\n : 'runtime';\n }\n const rooms = new Map<string, AppRoom>();\n const unreadable = new Set<string>();\n const models = new Map<string, ModelState>();\n const liveModels = new Map<string, string>();\n const invalidModels = new Set<string>();\n const modelEpoch = new Map<string, number>();\n const discovered = new Map<string, DiscoveredRoom>();\n let roomsListed = false;\n const scopedRefusals = new Map<string, ProviderRefusal>();\n const sourceRefusals = new Map<string, ProviderRefusal>();\n const declarationRefusals = new Set<string>();\n function modelKey(locator: string, attached: Attached): string {\n return `${attached} ${locator}`;\n }\n function modelOf(locator: string, attached: Attached = 'collection'): ModelState {\n return models.get(modelKey(locator, attached)) ?? NO_MODEL;\n }\n function savedModel(locator: string, attached: Attached): ModelState {\n return invalidModels.has(modelKey(locator, attached))\n ? { status: 'unavailable', reason: 'revoked' }\n : modelOf(locator, attached);\n }\n function compositionFor(record: ReplicaRecord): Composition {\n return compositionOf({\n ...record,\n model: savedModel(record.locator, 'collection'),\n selectionModel: savedModel(record.locator, 'typed-selection'),\n });\n }\n\n const mismatchedRoots = new Set<string>();\n let refusal: ConnectionRefusal | null = null;\n let storageLoss: string | null = null;\n let status: SyncStatus = STARTING;\n let shown: SyncStatus = STARTING;\n let discoveryPaused = false;\n let timer: ReturnType<typeof setInterval> | undefined;\n let closed = false;\n let stopping = false;\n let withdrawNotifications: (() => void) | undefined;\n let handed: readonly string[] | undefined;\n const notices = new Map<string, string>();\n let chain: Promise<void> = Promise.resolve();\n let mutations: Promise<unknown> = Promise.resolve();\n let inflight = false;\n let queued = false;\n const roomListeners = new Set<(rooms: readonly AppRoom[]) => void>();\n const refusalListeners = new Set<(refusal: ConnectionRefusal | null) => void>();\n const storageLossListeners = new Set<(statement: string | null) => void>();\n const statusListeners = new Set<(status: SyncStatus) => void>();\n const queueSubscriptions = new Set<QueueSubscription>();\n const roomDraftListeners = new Set<RoomDraftSubscription>();\n const presentationListeners = new Set<PresentationSubscription>();\n const readSide = createReadSide();\n let withdrawConversations: (() => void) | undefined;\n let currencyQueued = false;\n let serviceMode: ServiceMode = 'open';\n let haltedRefusal = false;\n let openSignals = 0;\n const serviceModeListeners = new Set<(mode: ServiceMode) => void>();\n const conversations: ConversationStore = createConversationStore({\n cards: declaredCards,\n documents: (locator: string) =>\n readSide.query(\n planOf({ rooms: [locator], select: 'all' }, roomFacts()),\n ) as Promise<DocumentResult>,\n call: (name: ConversationAction, input: unknown) => invokeAction(name, input),\n durably,\n stream: () => options.adapter.conversations,\n publish: publishChangeSet,\n closed: () => closed,\n });\n const searchIndex = createSearchIndex({\n documents: () => readSide.documents(),\n document: (room, path) => readSide.document(room, path),\n messages: () => conversations.messages(),\n message: (conversation, identity) => conversations.message(conversation, identity),\n });\n const journal = createLog();\n let notifyReady = () => {};\n const ready = new Promise<void>((resolve) => {\n notifyReady = resolve;\n });\n function rememberRoomDraft(record: RoomDraftRecord) {\n const room = roomDrafts.get(record.locator) ?? new Map<string, RoomDraftRecord>();\n room.set(record.path, record);\n roomDrafts.set(record.locator, room);\n }\n\n function forgetRoomDraft(locator: string, path: string) {\n const room = roomDrafts.get(locator);\n if (room === undefined) return;\n room.delete(path);\n if (room.size === 0) roomDrafts.delete(locator);\n }\n\n function roomDraftOf(record: RoomDraftRecord): RoomDraft {\n return structuredClone({\n room: record.locator,\n path: record.path,\n revision: record.revision,\n parts: record.parts,\n changedUnderneath: underneath(\n record.parts,\n record.path,\n replicas.get(record.locator)?.visible,\n ),\n returned: record.returned,\n });\n }\n\n function snapshotRoomDrafts(): readonly RoomDraft[] {\n const records = [...roomDrafts.values()].flatMap((room) => [...room.values()]);\n records.sort((left, right) => {\n if (left.locator !== right.locator) return left.locator < right.locator ? -1 : 1;\n if (left.path !== right.path) return left.path < right.path ? -1 : 1;\n return 0;\n });\n return records.map(roomDraftOf);\n }\n\n function publishRoomDrafts(waitingOnly: boolean) {\n if (closed) return;\n const value = snapshotRoomDrafts();\n for (const listener of roomDraftListeners) {\n if (waitingOnly && listener.ready) continue;\n listener.ready = true;\n listener.notify(value);\n }\n }\n\n function presentationOf(app: string): unknown {\n const value = presentations.get(app);\n return value === undefined ? null : structuredClone(value);\n }\n\n function emitPresentation(app: string) {\n if (closed) return;\n for (const listener of presentationListeners) {\n if (listener.app === app && listener.ready) listener.notify(presentationOf(app));\n }\n }\n\n function pending() {\n return [...replicas.values()].some((replica) => replica.queue.length > 0);\n }\n\n function attention(): Pick<SyncStatus, 'attentionRequired' | 'reset'> {\n const attentionRequired: AttentionEntry[] = [];\n for (const record of [...roomDrafts.values()].flatMap((room) => [...room.values()])) {\n if (record.returned === null) continue;\n attentionRequired.push({\n room: record.locator,\n path: record.path,\n returned: structuredClone(record.returned),\n });\n }\n attentionRequired.sort((left, right) => {\n if (left.room !== right.room) return left.room < right.room ? -1 : 1;\n if (left.path !== right.path) return left.path < right.path ? -1 : 1;\n return 0;\n });\n let reset: string | null = null;\n for (const { submission } of pendings.values()) {\n if (submission.state !== 'reset') continue;\n if (reset === null || submission.reset < reset) reset = submission.reset;\n }\n return { attentionRequired, reset };\n }\n\n function listed(): readonly AppRoom[] {\n return structuredClone([...rooms.values()]);\n }\n\n function slotted(): readonly AppSlot[] {\n return structuredClone(\n slots.map(({ slot, entries }) => ({\n slot,\n entries: entries.flatMap(({ locator, segment }) => {\n const room = rooms.get(locator);\n return room === undefined ? [] : [{ room, segment }];\n }),\n })),\n );\n }\n\n function roomFacts(): HeldRooms {\n const held = [...rooms.values()].map((room) => {\n const attached = [\n modelOf(room.locator),\n ...(room.typedSelection === null ? [] : [modelOf(room.locator, 'typed-selection')]),\n ];\n return {\n locator: room.locator,\n available: attached.every((model) => model.status !== 'unavailable'),\n types: attached.flatMap((model) =>\n model.status === 'unavailable' ? [] : Object.values(model.types),\n ),\n };\n });\n return { listed: roomsListed, rooms: held };\n }\n\n function emitRooms() {\n const value = listed();\n for (const listener of roomListeners) listener(value);\n }\n\n function emitRefusal() {\n for (const listener of refusalListeners) listener(refusal);\n }\n\n function emitStorageLoss() {\n for (const listener of storageLossListeners) listener(storageLoss);\n }\n\n function moveTo(next: SyncStatus) {\n if (closed) return;\n status = next;\n show();\n }\n\n function show() {\n if (closed) return;\n const next: SyncStatus =\n status.state === 'synced' && !conversations.current()\n ? { ...status, state: 'syncing' }\n : status;\n if (same(shown, next)) return;\n shown = next;\n for (const listener of statusListeners) listener(shown);\n }\n\n function submissionOf(batch: ChangeBatch): Submission {\n return pendings.get(batch.id)?.submission ?? { state: 'waiting' };\n }\n\n function entriesOf(locator: string): readonly QueueEntry[] {\n const replica = replicas.get(locator);\n if (replica === undefined) return [];\n return replica.queue.map((batch) => Object.freeze({ batch, ...submissionOf(batch) }));\n }\n\n function emitQueue(locator: string) {\n const entries = entriesOf(locator);\n for (const subscription of queueSubscriptions) {\n if (subscription.locator === locator) subscription.notify(entries);\n }\n }\n\n function applyChangeSet(set: ChangeSet) {\n readSide.apply(set);\n searchIndex.changed(set);\n }\n\n function publishChangeSet(set: ChangeSet) {\n applyChangeSet(set);\n if (set.rooms.length > 0) emitRooms();\n for (const locator of set.queues) emitQueue(locator);\n if (\n set.drafts.length > 0 ||\n set.documents.some((change) => roomDrafts.get(change.locator)?.has(change.path) === true)\n ) {\n publishRoomDrafts(false);\n }\n for (const app of set.presentations) emitPresentation(app);\n conversations.changed(set);\n const cards = declaredCards();\n if (cards !== undefined && set.documents.some((change) => change.locator === cards.locator)) {\n scheduleCurrency();\n }\n }\n\n function stopTimer() {\n if (timer === undefined) return;\n clearInterval(timer);\n timer = undefined;\n }\n\n function startTimer() {\n if (timer !== undefined) return;\n timer = setInterval(() => {\n void enqueue();\n }, period);\n }\n\n async function refuse(reason: ConnectionRefusalReason, provider: ProviderRefusal | null = null) {\n stopTimer();\n discoveryPaused = true;\n try {\n if (reason === 'revoked-authorization') {\n await exclusive(async () => {\n const revoked: ModelState = { status: 'unavailable', reason: 'revoked' };\n try {\n const local = await openLocal();\n await local.revokeModels(\n [...replicas.values()].map((replica) => ({\n record: replica.confirmed.record,\n queue: replica.queue,\n })),\n );\n } catch {\n journal.record('model revocation persistence failed');\n }\n const keys = new Set(models.keys());\n for (const locator of rooms.keys()) {\n keys.add(modelKey(locator, 'collection'));\n keys.add(modelKey(locator, 'typed-selection'));\n }\n for (const key of keys) {\n invalidModels.add(key);\n modelEpoch.set(key, (modelEpoch.get(key) ?? 0) + 1);\n models.set(key, revoked);\n liveModels.delete(key);\n }\n const changed: ChangeSet[] = [];\n for (const [locator, room] of rooms) {\n const before = replicas.get(locator) ?? null;\n if (before !== null) {\n const record = {\n ...before.confirmed.record,\n model: revoked,\n selectionModel: revoked,\n };\n const read = readConfirmed(record, before.confirmed);\n replicas.set(\n locator,\n read.kind === 'staged'\n ? replicaOf(read.confirmed, before.queue, rewriting(), before)\n : { ...before, confirmed: { ...before.confirmed, record } },\n );\n }\n rooms.set(locator, {\n ...room,\n model: modelTypes(revoked),\n typedSelection:\n room.typedSelection === null\n ? null\n : { ...room.typedSelection, model: modelTypes(revoked) },\n });\n changed.push(changeSet(locator, before, replicas.get(locator) ?? null, { room: true }));\n }\n publishChangeSet(mergeChangeSets(changed));\n });\n }\n } finally {\n refusal = {\n reason,\n reauthorizationOffered: reason === 'revoked-authorization',\n refusal: provider,\n };\n journal.record(`connection refused ${reason}`);\n emitRefusal();\n }\n }\n\n function list(room: RoomDeclaration, synchronizationAvailable: boolean) {\n const selection = room.typedSelection ?? null;\n rooms.set(room.locator, {\n name: room.name,\n collectionRoot: room.collectionRoot,\n locator: room.locator,\n operations: room.operations,\n replica: room.replica,\n attachedModel: room.attachedModel,\n model: modelTypes(modelOf(room.locator)),\n typedSelection:\n selection === null\n ? null\n : {\n roots: selection.roots,\n attachedModel: selection.attachedModel,\n model: modelTypes(modelOf(room.locator, 'typed-selection')),\n },\n providerOwnedPaths: room.providerOwnedPaths,\n roomVersion: replicas.get(room.locator)?.confirmed.record.roomVersion ?? null,\n synchronizationAvailable,\n refusal: scopedRefusals.get(room.locator) ?? sourceRefusals.get(room.locator) ?? null,\n });\n }\n\n async function applyDiscovery(listed: readonly DiscoveredRoom[], local: RuntimeStore) {\n const listedLocators = new Set(listed.map((room) => room.locator));\n for (const locator of listedLocators) scopedRefusals.delete(locator);\n discovered.clear();\n for (const room of listed) discovered.set(room.locator, room);\n for (const locator of wanted.keys()) if (!listedLocators.has(locator)) wanted.delete(locator);\n await dropUnlisted(listedLocators, local);\n for (const room of listed) {\n const held = replicas.get(room.locator)?.confirmed.record;\n if (held !== undefined && held.replica.selection !== room.replica.selection) {\n list(held, false);\n continue;\n }\n list(room, room.replica.admission === 'admitted' && !unreadable.has(room.locator));\n }\n roomsListed = true;\n emitRooms();\n }\n\n function unlistedHeld(listed: ReadonlySet<string>): string[] {\n return [...new Set([...rooms.keys(), ...roomDrafts.keys()])].filter(\n (locator) => !listed.has(locator),\n );\n }\n\n async function dropUnlisted(listed: ReadonlySet<string>, local: RuntimeStore) {\n if (unlistedHeld(listed).length === 0) return;\n await exclusive(async () => {\n const unlisted = unlistedHeld(listed);\n await local.dropRooms(unlisted);\n for (const [batch, locator] of outcomeRooms) {\n if (listed.has(locator)) continue;\n outcomeRooms.delete(batch);\n outcomes.delete(batch);\n }\n const removed = unlisted.map((locator) =>\n changeSet(locator, replicas.get(locator) ?? null, null, {\n room: true,\n queue: true,\n drafts: [...(roomDrafts.get(locator)?.keys() ?? [])],\n }),\n );\n for (const locator of unlisted) {\n for (const batch of replicas.get(locator)?.queue ?? []) pendings.delete(batch.id);\n replicas.delete(locator);\n rooms.delete(locator);\n roomDrafts.delete(locator);\n unreadable.delete(locator);\n scopedRefusals.delete(locator);\n sourceRefusals.delete(locator);\n declarationRefusals.delete(locator);\n for (const attached of ['collection', 'typed-selection'] as const) {\n const key = modelKey(locator, attached);\n models.delete(key);\n liveModels.delete(key);\n invalidModels.delete(key);\n modelEpoch.delete(key);\n }\n journal.record(`room unlisted ${locator}`);\n }\n publishChangeSet(mergeChangeSets(removed));\n moveTo({ ...status, ...attention() });\n });\n }\n\n function restored(key: string, persisted: ModelState): ModelState {\n const prior = models.get(key);\n if (\n prior !== undefined &&\n prior.status !== 'unavailable' &&\n (persisted.status === 'unavailable' || !sameModel(prior.snapshot, persisted.snapshot))\n ) {\n modelEpoch.set(key, (modelEpoch.get(key) ?? 0) + 1);\n invalidModels.add(key);\n }\n const model =\n persisted.status === 'unavailable' ||\n liveModels.get(key) === JSON.stringify(persisted.snapshot)\n ? persisted\n : cached(persisted);\n models.set(key, model);\n if (model.status === 'unavailable') {\n liveModels.delete(key);\n invalidModels.delete(key);\n }\n return model;\n }\n\n async function hydrate(opened: RuntimeStore): Promise<{\n lastCompleted: string | null;\n locators: Set<string>;\n read: ChangeSet;\n }> {\n const [\n records,\n queues,\n recordedOutcomes,\n kept,\n presented,\n held,\n chatDrafts,\n lastCompleted,\n declared,\n named,\n listedSlots,\n ] = await Promise.all([\n opened.all(),\n opened.queues(),\n opened.outcomes(),\n opened.roomDrafts(),\n opened.presentation(),\n opened.conversations(),\n opened.chatDrafts(),\n opened.lastCompleted(),\n opened.providerLimits(),\n opened.capabilities(),\n opened.slots(),\n ]);\n limits = declared;\n capabilities = named;\n slots = listedSlots;\n roomDrafts.clear();\n for (const record of kept) rememberRoomDraft(record);\n presentations.clear();\n for (const record of presented) presentations.set(record.app, record.value);\n conversations.hydrate(held, chatDrafts);\n const queuedBatches = new Map(\n queues.map((queue) => [queue.locator, queue.pending.map(({ batch }) => batch)]),\n );\n pendings.clear();\n for (const queue of queues) {\n for (const { batch, state } of queue.pending) pendings.set(batch.id, state);\n }\n outcomes.clear();\n outcomeRooms.clear();\n for (const record of recordedOutcomes) {\n outcomes.set(record.id, record.outcome);\n outcomeRooms.set(record.id, record.locator);\n }\n const previousReplicas = new Map(replicas);\n replicas.clear();\n for (const record of records) {\n const model = restored(modelKey(record.locator, 'collection'), record.model);\n const selectionModel = restored(\n modelKey(record.locator, 'typed-selection'),\n record.selectionModel,\n );\n const prior = previousReplicas.get(record.locator);\n const retyped = { ...record, model, selectionModel };\n const read = readConfirmed(retyped, prior?.confirmed);\n if (read.kind === 'unconfirmed') continue;\n const confirmed =\n read.kind === 'staged'\n ? read.confirmed\n : {\n record: retyped,\n collection: parseCollection(retyped.documents, compositionOf(retyped)),\n };\n replicas.set(\n record.locator,\n replicaOf(confirmed, queuedBatches.get(record.locator) ?? [], rewriting(), prior),\n );\n const existing = rooms.get(record.locator);\n if (existing === undefined) list(record, false);\n else {\n rooms.set(record.locator, {\n ...existing,\n roomVersion: record.roomVersion,\n operations: record.operations,\n replica: record.replica,\n attachedModel: record.attachedModel,\n model: modelTypes(model),\n typedSelection:\n record.typedSelection === null\n ? null\n : {\n roots: record.typedSelection.roots,\n attachedModel: record.typedSelection.attachedModel,\n model: modelTypes(selectionModel),\n },\n });\n }\n if (read.kind === 'refused') {\n refusedSource(record, read);\n declarationRefusals.add(record.locator);\n }\n }\n return {\n lastCompleted,\n locators: new Set([...queuedBatches.keys(), ...replicas.keys()]),\n read: mergeChangeSets(\n [...new Set([...previousReplicas.keys(), ...replicas.keys()])].map((locator) =>\n changeSet(locator, previousReplicas.get(locator) ?? null, replicas.get(locator) ?? null),\n ),\n ),\n };\n }\n\n async function readState(opened: RuntimeStore): Promise<string | null> {\n const { lastCompleted, locators, read } = await hydrate(opened);\n applyChangeSet(read);\n if (replicas.size > 0) emitRooms();\n for (const locator of locators) emitQueue(locator);\n publishRoomDrafts(false);\n return lastCompleted;\n }\n\n async function open(): Promise<RuntimeStore> {\n const opened = await openRuntimeStore();\n store = opened;\n const kept = options.shell.generation;\n const storedGeneration = await opened.generation();\n const loss = detectStorageLoss(storedGeneration, kept);\n const generation = nextGeneration(storedGeneration, kept);\n if (generation !== storedGeneration) await opened.rememberGeneration(generation);\n if (generation !== kept) await options.shell.keepGeneration(generation);\n if (loss !== null) {\n storageLoss = loss;\n emitStorageLoss();\n }\n const lastCompleted = await readState(opened);\n moveTo({ ...status, lastCompleted, ...attention() });\n return opened;\n }\n\n function durably<T>(work: (local: RuntimeStore) => Promise<T>): Promise<T> {\n return exclusive(async () => {\n const local = await openLocal();\n return work(local);\n });\n }\n\n function openLocal(): Promise<RuntimeStore> {\n opening ??= open().catch((error: unknown) => {\n opening = undefined;\n throw error;\n });\n return opening;\n }\n\n function exclusive<T>(work: () => Promise<T>): Promise<T> {\n const next = mutations.then(work, work);\n mutations = next.then(\n () => undefined,\n () => undefined,\n );\n return next;\n }\n\n function withdrawable(batch: ChangeBatch): boolean {\n const state = pendings.get(batch.id);\n return state !== undefined && state.submission.state !== 'submitted' && !state.lost;\n }\n\n async function settle(\n local: RuntimeStore,\n locator: string,\n before: Replica | undefined,\n confirmed: ConfirmedLayer,\n queue: readonly ChangeBatch[],\n settling: {\n accepted?: { id: string; outcome: SubmissionOutcome };\n leaving?: Leaving;\n room?: boolean;\n } = {},\n ): Promise<ChangeSet> {\n const withdrawn = withdrawals(confirmed, queue, withdrawable, rewriting());\n const kept = queue.filter((batch) => !withdrawn.includes(batch));\n const returning = [\n ...withdrawn.map((batch) => ({ batch, returned: { kind: 'withdrawn' } as const })).reverse(),\n ...(settling.leaving === undefined ? [] : [settling.leaving]),\n ];\n const written = new Map<string, RoomDraftRecord>();\n for (const { batch, returned } of returning) {\n if (returned === null) continue;\n for (const saved of pendings.get(batch.id)?.drafts ?? []) {\n const existing = written.get(saved.path) ?? roomDrafts.get(locator)?.get(saved.path);\n written.set(saved.path, {\n locator,\n path: saved.path,\n revision: roomDraftRevision(),\n parts: returnedInto(existing?.parts, saved.parts),\n returned,\n });\n }\n }\n const settledOutcomes: { id: string; outcome: SubmissionOutcome }[] = [\n ...(settling.accepted === undefined ? [] : [settling.accepted]),\n ...(settling.leaving === undefined\n ? []\n : [{ id: settling.leaving.batch.id, outcome: settling.leaving.outcome }]),\n ...withdrawn.map((batch) => ({ id: batch.id, outcome: { kind: 'withdrawn' as const } })),\n ];\n await local.write({\n next: confirmed.record,\n previous: before?.confirmed.record ?? null,\n queue: kept,\n previousQueue: before?.queue ?? [],\n outcomes: settledOutcomes,\n roomDrafts: [...written.values()],\n });\n for (const { id, outcome } of settledOutcomes) {\n outcomes.set(id, outcome);\n outcomeRooms.set(id, locator);\n pendings.delete(id);\n }\n for (const record of written.values()) rememberRoomDraft(record);\n for (const batch of withdrawn) journal.record(`outcome ${locator} ${batch.id} withdrawn`);\n replicas.set(locator, replicaOf(confirmed, kept, rewriting(), before));\n return changeSet(locator, before ?? null, replicas.get(locator) ?? null, {\n room: settling.room,\n queue: kept.length !== (before?.queue.length ?? 0),\n drafts: [...written.keys()],\n });\n }\n\n function publish(local: RuntimeStore, room: DiscoveredRoom, confirmed: ConfirmedLayer) {\n return exclusive(async () => {\n if (!continuing()) return;\n const prior = replicas.get(room.locator);\n const retained = readConfirmed(\n {\n ...confirmed.record,\n model: modelOf(room.locator),\n selectionModel: modelOf(room.locator, 'typed-selection'),\n },\n prior?.confirmed,\n );\n if (retained.kind !== 'staged') throw new Error(`Cannot retype staged Room ${room.locator}`);\n const queue = prior?.queue ?? [];\n const roomVersion = retained.confirmed.record.roomVersion;\n const accepted = queue.filter((batch) => {\n const outcome = outcomes.get(batch.id);\n return (\n outcome?.kind === 'accepted' &&\n options.adapter.reached(room.locator, roomVersion, outcome.roomVersion)\n );\n });\n const set = await settle(\n local,\n room.locator,\n prior,\n retained.confirmed,\n queue.filter((batch) => !accepted.includes(batch)),\n { room: true },\n );\n for (const batch of accepted) pendings.delete(batch.id);\n const target = wanted.get(room.locator);\n if (target !== undefined && options.adapter.reached(room.locator, roomVersion, target)) {\n wanted.delete(room.locator);\n }\n unreadable.delete(room.locator);\n sourceRefusals.delete(room.locator);\n declarationRefusals.delete(room.locator);\n list(room, true);\n publishChangeSet(set);\n moveTo({ ...status, ...attention() });\n });\n }\n\n async function saveRoomDrafts(\n locator: string,\n named: readonly SavedRoomDraft[],\n writtenBy: WrittenBy | undefined,\n ): Promise<SaveResult> {\n const local = await openLocal();\n const replica = replicas.get(locator);\n const room = rooms.get(locator);\n if (replica === undefined || room === undefined) {\n throw new Error(`No Local Replica for ${locator}`);\n }\n if (mismatchedRoots.has(locator))\n return { outcome: 'refused', rule: 'collection-root-mismatch' };\n const saved: SavedDraft[] = [];\n for (const { path, revision } of named) {\n const record = roomDrafts.get(locator)?.get(path);\n if (record === undefined || record.revision !== revision) {\n return { outcome: 'refused', rule: 'stale', file: path };\n }\n if (!saved.some((draft) => draft.path === path)) saved.push({ path, parts: record.parts });\n }\n const changed = saved.flatMap(({ path, parts }) =>\n changedParts(path, underneath(parts, path, replica.visible)),\n );\n if (changed.length > 0)\n return { outcome: 'refused', rule: 'changed-underneath', parts: changed };\n const parts = saved.map(({ path, parts }) => changesOf(path, parts));\n const built = buildBatch({\n baseRoomVersion: replica.confirmed.record.roomVersion,\n composition: compositionFor(replica.confirmed.record),\n operations: room.operations,\n providerOwnedPaths: room.providerOwnedPaths,\n providerLimits: limits,\n rewriting: rewriting(),\n visible: replica.visible,\n changes: parts.flatMap(({ changes }) => changes),\n bases: parts.flatMap(({ bases }) => bases),\n writtenBy,\n });\n if (built.kind === 'refused') return { outcome: 'refused', ...built.refusal };\n const batches = [...replica.queue, built.batch];\n const consumed = saved.map(({ path }) => path);\n try {\n await local.write({\n next: replica.confirmed.record,\n previous: replica.confirmed.record,\n queue: batches,\n previousQueue: replica.queue,\n saved,\n consumedRoomDrafts: consumed,\n });\n } catch {\n return { outcome: 'refused', rule: 'durable-write' };\n }\n pendings.set(built.batch.id, { drafts: saved, submission: { state: 'waiting' }, lost: false });\n for (const path of consumed) forgetRoomDraft(locator, path);\n replicas.set(locator, replicaOf(replica.confirmed, batches, rewriting(), replica));\n publishChangeSet(\n changeSet(locator, replica, replicas.get(locator) ?? null, {\n queue: true,\n drafts: consumed,\n }),\n );\n moveTo({ ...saving(status), ...attention() });\n void enqueue();\n return { outcome: 'saved', identifier: built.batch.id };\n }\n\n async function mark(\n local: RuntimeStore,\n locator: string,\n identifier: string,\n submission: Submission,\n lost: boolean,\n ) {\n const state = pendings.get(identifier);\n if (\n !continuing() ||\n state === undefined ||\n (JSON.stringify(state.submission) === JSON.stringify(submission) && state.lost === lost)\n ) {\n return;\n }\n await local.submit(locator, identifier, submission, lost);\n pendings.set(identifier, { ...state, submission, lost });\n const replica = replicas.get(locator);\n if (replica !== undefined)\n publishChangeSet(changeSet(locator, replica, replica, { queue: true }));\n moveTo({ ...status, ...attention() });\n }\n\n async function keepUpload(\n local: RuntimeStore,\n locator: string,\n identifier: string,\n upload: unknown,\n ) {\n if (!continuing()) throw new Error('connection refused');\n await local.keepUpload(locator, identifier, upload);\n pendings.set(identifier, { ...pendings.get(identifier)!, upload });\n if (!continuing()) throw new Error('connection refused');\n }\n\n async function readHistory(\n locator: string,\n path: string,\n query: HistoryQuery = {},\n ): Promise<HistoryResult> {\n if (closed || refusal !== null) return { kind: 'transport-uncertainty' };\n try {\n await ensureAuthorization();\n } catch {\n return { kind: 'transport-uncertainty' };\n }\n if (closed || authorization === undefined || refusal !== null) {\n return { kind: 'transport-uncertainty' };\n }\n const transfer = ['transfer', 'history', locator, path];\n if (query.revision !== undefined) transfer.push(query.revision);\n if (query.pageToken !== undefined) transfer.push(query.pageToken);\n journal.record(transfer.join(' '));\n try {\n const result = await options.adapter.history(authorization, {\n locator,\n path,\n ...(query.revision === undefined ? {} : { revision: query.revision }),\n ...(query.pageToken === undefined ? {} : { pageToken: query.pageToken }),\n });\n journal.record(`outcome history ${result.kind}`);\n if (result.kind === 'scoped-refusal') {\n const room = replicas.get(result.locator)?.confirmed.record;\n if (room !== undefined) await scoped(result, room, await openLocal());\n }\n if (result.kind === 'revoked-authorization') await refuse('revoked-authorization');\n return result;\n } catch {\n journal.record('outcome history transport-uncertainty');\n return { kind: 'transport-uncertainty' };\n }\n }\n\n function declaredCards(): ConversationCards | undefined {\n for (const capability of capabilities) {\n if (capability.conversationCards !== undefined) return capability.conversationCards;\n }\n return undefined;\n }\n\n function declaredAction(name: string) {\n for (const capability of capabilities) {\n for (const action of capability.actions ?? []) {\n if (action.name === name) return action;\n }\n }\n return undefined;\n }\n\n async function invokeAction(name: string, input: unknown): Promise<CallResult> {\n await ready;\n if (closed || refusal !== null) return { kind: 'transport-uncertainty' };\n if (declaredAction(name) === undefined) return { kind: 'undeclared' };\n try {\n await ensureAuthorization();\n } catch {\n return { kind: 'transport-uncertainty' };\n }\n if (closed || authorization === undefined || refusal !== null) {\n return { kind: 'transport-uncertainty' };\n }\n journal.record(`transfer action ${name}`);\n try {\n const result = await options.adapter.action(authorization, { name, input });\n if (result.kind === 'action' && result.at !== undefined) want(result.at);\n if (result.kind === 'scoped-refusal') {\n const room = replicas.get(result.locator)?.confirmed.record;\n if (room !== undefined) await scoped(result, room, await openLocal());\n }\n if (result.kind === 'revoked-authorization') await refuse('revoked-authorization');\n journal.record(`outcome action ${result.kind}`);\n if (result.kind === 'rejected') journal.record(`refusal rejected ${result.code}`);\n return result;\n } catch {\n journal.record('outcome action transport-uncertainty');\n return { kind: 'transport-uncertainty' };\n }\n }\n\n function continuing(): boolean {\n return !closed && !discoveryPaused;\n }\n\n function reachedBy(locator: string, roomVersion: string): boolean {\n const held = replicas.get(locator);\n return (\n held !== undefined &&\n options.adapter.reached(locator, held.confirmed.record.roomVersion, roomVersion)\n );\n }\n\n function want({ locator, roomVersion }: RoomVersionAt) {\n if (reachedBy(locator, roomVersion)) return;\n const held = wanted.get(locator);\n if (held === undefined || options.adapter.reached(locator, roomVersion, held)) {\n wanted.set(locator, roomVersion);\n }\n }\n\n function reachOf(locator: string): string | undefined {\n let target = wanted.get(locator);\n const versions = (replicas.get(locator)?.queue ?? []).flatMap((batch) => {\n const outcome = outcomes.get(batch.id);\n return outcome?.kind === 'accepted' ? [outcome.roomVersion] : [];\n });\n for (const version of versions) {\n if (target === undefined || options.adapter.reached(locator, version, target)) {\n target = version;\n }\n }\n return target === undefined || reachedBy(locator, target) ? undefined : target;\n }\n\n async function pullRefresh(\n authorized: Authorization,\n confirmed: ConfirmedLayer,\n reach: string | undefined,\n ) {\n if (!continuing()) return unconfirmed;\n try {\n const result = await refreshRoom(options.adapter, authorized, confirmed, continuing, reach);\n const detail = result.kind === 'advanced' ? result.confirmed.record.roomVersion : result.kind;\n journal.record(`transfer refresh ${confirmed.record.locator} ${detail}`);\n return result;\n } catch (error) {\n journal.record(`transfer refresh ${confirmed.record.locator} transport-uncertainty`);\n throw error;\n }\n }\n\n async function pullBootstrap(authorized: Authorization, room: DiscoveredRoom) {\n if (!continuing()) return unconfirmed;\n try {\n const result = await bootstrapRoom(\n options.adapter,\n authorized,\n room,\n {\n collection: modelOf(room.locator),\n selection: modelOf(room.locator, 'typed-selection'),\n },\n continuing,\n );\n const detail = result.kind === 'staged' ? result.confirmed.record.roomVersion : result.kind;\n journal.record(`transfer bootstrap ${room.locator} ${detail}`);\n return result;\n } catch (error) {\n journal.record(`transfer bootstrap ${room.locator} transport-uncertainty`);\n throw error;\n }\n }\n\n async function advance(\n room: DiscoveredRoom,\n local: RuntimeStore,\n authorized: Authorization,\n ): Promise<Withheld | null> {\n const held = replicas.get(room.locator);\n if (held !== undefined) {\n const refreshed = await pullRefresh(authorized, held.confirmed, reachOf(room.locator));\n if (!continuing()) return unconfirmed;\n if (refreshed.kind === 'still-current') {\n if (sourceRefusals.has(room.locator)) return unconfirmed;\n if (unreadable.delete(room.locator)) {\n list(room, true);\n emitRooms();\n }\n return null;\n }\n if (refreshed.kind === 'advanced') {\n await publish(local, room, refreshed.confirmed);\n return null;\n }\n if (refreshed.kind !== 'beyond-horizon') return refreshed;\n }\n const bootstrapped = await pullBootstrap(authorized, room);\n if (!continuing()) return unconfirmed;\n if (bootstrapped.kind !== 'staged') return bootstrapped;\n await publish(local, room, bootstrapped.confirmed);\n return null;\n }\n\n async function withhold(\n withheld: Withheld,\n room: DiscoveredRoom,\n local: RuntimeStore,\n progress: CycleProgress,\n ): Promise<void> {\n progress.complete = false;\n if (withheld.kind === 'scoped-refusal') {\n await scoped(withheld, room, local);\n } else if (withheld.kind === 'transport-uncertainty') {\n progress.reachable = false;\n } else if (withheld.kind === 'retryable-refusal') {\n journal.record(`refusal ${withheld.kind} ${withheld.code}`);\n } else if (withheld.kind === 'room-not-readable') {\n unreadable.add(room.locator);\n list(room, false);\n emitRooms();\n } else if (withheld.kind === 'refused') {\n refusedSource(room, withheld);\n } else if (withheld.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n }\n }\n\n function refusedSource(room: RoomDeclaration, { refusal }: Refused) {\n sourceRefusals.set(room.locator, {\n code: refusal.rule,\n fields: {\n file: refusal.file,\n ...(refusal.location === undefined ? {} : { location: refusal.location }),\n version: refusal.version,\n ...(refusal.referrers === undefined ? {} : { referrers: refusal.referrers }),\n },\n });\n declarationRefusals.delete(room.locator);\n unreadable.add(room.locator);\n list(room, false);\n emitRooms();\n journal.record(`source refused ${room.locator} ${refusal.rule} ${refusal.file}`);\n }\n\n function leaving(\n batch: ChangeBatch,\n result: Extract<MutationResult, { kind: 'conflicted' | 'rejected' | 'expired' }>,\n ): Leaving {\n if (result.kind === 'expired') {\n return { batch, outcome: { kind: 'expired' }, returned: { kind: 'expired' } };\n }\n const refusal = { code: result.code, fields: result.fields };\n if (result.kind === 'conflicted') {\n return {\n batch,\n outcome: {\n kind: 'conflicted',\n ...(result.roomVersion === undefined ? {} : { roomVersion: result.roomVersion }),\n affected: result.affected,\n ...refusal,\n },\n returned: { kind: 'conflicted', ...refusal },\n };\n }\n return {\n batch,\n outcome: { kind: 'rejected', affected: result.affected, ...refusal },\n returned: { kind: 'rejected', ...refusal },\n };\n }\n\n function acceptedOf(accepted: Extract<MutationResult, { kind: 'accepted' }>): SubmissionOutcome {\n return {\n kind: 'accepted',\n roomVersion: accepted.roomVersion,\n ...(accepted.author === undefined ? {} : { author: accepted.author }),\n ...(accepted.time === undefined ? {} : { time: accepted.time }),\n };\n }\n\n function logAccepted(\n locator: string,\n submitted: ChangeBatch,\n accepted: Extract<MutationResult, { kind: 'accepted' }>,\n ) {\n journal.record(\n `outcome ${locator} ${submitted.id} accepted ${accepted.roomVersion}` +\n (accepted.author === undefined ? '' : ` author ${accepted.author}`) +\n (accepted.time === undefined ? '' : ` time ${accepted.time}`),\n );\n }\n\n async function recordAccepted(\n room: DiscoveredRoom,\n local: RuntimeStore,\n submitted: ChangeBatch,\n accepted: Extract<MutationResult, { kind: 'accepted' }>,\n ) {\n await exclusive(async () => {\n if (!continuing()) return;\n const current = replicas.get(room.locator);\n if (current === undefined || !current.queue.some((batch) => batch.id === submitted.id)) {\n return;\n }\n const outcome = acceptedOf(accepted);\n await local.write({\n next: current.confirmed.record,\n previous: current.confirmed.record,\n queue: current.queue,\n previousQueue: current.queue,\n outcomes: [{ id: submitted.id, outcome }],\n });\n outcomes.set(submitted.id, outcome);\n outcomeRooms.set(submitted.id, room.locator);\n logAccepted(room.locator, submitted, accepted);\n });\n }\n\n async function commitAccept(\n room: DiscoveredRoom,\n local: RuntimeStore,\n submitted: ChangeBatch,\n accepted: Extract<MutationResult, { kind: 'accepted' }>,\n base: ConfirmedLayer,\n overlay: boolean,\n ): Promise<Refused | Unconfirmed | null> {\n if (!continuing()) return unconfirmed;\n const current = replicas.get(room.locator);\n if (current === undefined || !current.queue.some((batch) => batch.id === submitted.id)) {\n return null;\n }\n const remaining = current.queue.filter((batch) => batch.id !== submitted.id);\n const retainedBase = readConfirmed(\n {\n ...base.record,\n model: modelOf(room.locator),\n selectionModel: modelOf(room.locator, 'typed-selection'),\n },\n base,\n );\n const applied =\n overlay && retainedBase.kind === 'staged'\n ? applyReturned(\n retainedBase.confirmed,\n accepted.documents,\n accepted.revisions,\n accepted.removals,\n accepted.roomVersion,\n )\n : retainedBase;\n if (applied.kind !== 'staged') return applied;\n const set = await settle(local, room.locator, current, applied.confirmed, remaining, {\n accepted: { id: submitted.id, outcome: acceptedOf(accepted) },\n room: true,\n });\n unreadable.delete(room.locator);\n sourceRefusals.delete(room.locator);\n declarationRefusals.delete(room.locator);\n list(room, true);\n publishChangeSet(set);\n moveTo({ ...status, ...attention() });\n return null;\n }\n\n async function accepting(\n room: DiscoveredRoom,\n local: RuntimeStore,\n submitted: ChangeBatch,\n accepted: Extract<MutationResult, { kind: 'accepted' }>,\n pulled: ConfirmedLayer,\n fresh: boolean,\n ): Promise<boolean> {\n const roomVersion = pulled.record.roomVersion;\n if (options.adapter.reached(room.locator, roomVersion, accepted.roomVersion)) {\n return committed(\n room,\n local,\n submitted,\n accepted,\n pulled,\n roomVersion === accepted.roomVersion,\n );\n }\n if (fresh && continuing()) await publish(local, room, pulled);\n return false;\n }\n\n async function committed(\n room: DiscoveredRoom,\n local: RuntimeStore,\n submitted: ChangeBatch,\n accepted: Extract<MutationResult, { kind: 'accepted' }>,\n base: ConfirmedLayer,\n overlay: boolean,\n ): Promise<boolean> {\n const failed = await exclusive(() =>\n commitAccept(room, local, submitted, accepted, base, overlay),\n );\n if (failed === null) return true;\n if (failed.kind === 'refused' && continuing()) refusedSource(room, failed);\n return false;\n }\n\n async function submitRoom(\n room: DiscoveredRoom,\n local: RuntimeStore,\n authorized: Authorization,\n progress: CycleProgress,\n ): Promise<void> {\n while (continuing() && authorization !== undefined) {\n const replica = replicas.get(room.locator);\n const head = replica?.queue[0];\n if (replica === undefined || head === undefined) return;\n if (outcomes.get(head.id)?.kind === 'accepted') {\n progress.complete = false;\n return;\n }\n const state = pendings.get(head.id);\n const { submission, lost: earlier } = state ?? {\n submission: { state: 'waiting' },\n lost: false,\n };\n if (submission.state === 'reset' && Date.now() < Date.parse(submission.reset)) {\n progress.complete = false;\n return;\n }\n if (writesHeld()) {\n progress.complete = false;\n journal.record(`submission ${room.locator} ${head.id} held`);\n return;\n }\n const lost = earlier || submission.state === 'submitted';\n let result: MutationResult;\n journal.record(`submission ${room.locator} ${head.id}`);\n await exclusive(() => mark(local, room.locator, head.id, { state: 'submitted' }, lost));\n if (discoveryPaused) return;\n if (writesHeld()) {\n await exclusive(() => mark(local, room.locator, head.id, submission, earlier));\n progress.complete = false;\n journal.record(`submission ${room.locator} ${head.id} held`);\n return;\n }\n const opensBefore = openSignals;\n try {\n result = await options.adapter.mutate(\n authorized,\n {\n locator: room.locator,\n changeBatch: head,\n ...(state?.upload === undefined ? {} : { upload: state.upload }),\n },\n (upload) => exclusive(() => keepUpload(local, room.locator, head.id, upload)),\n );\n } catch {\n progress.complete = false;\n if (continuing()) progress.reachable = false;\n return;\n }\n if (!continuing()) return;\n if (result.kind === 'transport-uncertainty') {\n progress.complete = false;\n progress.reachable = false;\n return;\n }\n if (result.kind === 'room-not-readable') {\n progress.complete = false;\n unreadable.add(room.locator);\n list(room, false);\n emitRooms();\n return;\n }\n if (result.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n return;\n }\n if (result.kind === 'scoped-refusal') {\n await scoped(result, room, local);\n progress.complete = false;\n return;\n }\n if (result.kind === 'write-halted') {\n journal.record(`outcome ${room.locator} ${head.id} write-halted`);\n await exclusive(() => mark(local, room.locator, head.id, { state: 'waiting' }, lost));\n if (serviceMode === 'open' && openSignals !== opensBefore) continue;\n haltedRefusal = true;\n progress.complete = false;\n return;\n }\n if (\n result.kind === 'conflicted' ||\n result.kind === 'rejected' ||\n result.kind === 'expired' ||\n result.kind === 'retryable-refusal'\n ) {\n if (result.kind === 'expired') {\n const withheld = await advance(room, local, authorized);\n if (withheld !== null) return withhold(withheld, room, local, progress);\n }\n journal.record(\n `outcome ${room.locator} ${head.id} ${result.kind}` +\n (result.kind === 'conflicted' && result.roomVersion !== undefined\n ? ` ${result.roomVersion}`\n : ''),\n );\n if (result.kind !== 'expired') journal.record(`refusal ${result.kind} ${result.code}`);\n }\n if (result.kind === 'retryable-refusal') {\n const reset = result.reset;\n progress.complete = false;\n await exclusive(() =>\n mark(\n local,\n room.locator,\n head.id,\n reset === undefined ? { state: 'waiting' } : { state: 'reset', reset },\n lost,\n ),\n );\n return;\n }\n if (result.kind === 'conflicted' || result.kind === 'rejected' || result.kind === 'expired') {\n const left = leaving(head, result);\n await exclusive(async () => {\n if (!continuing()) return;\n const current = replicas.get(room.locator);\n if (current === undefined || !current.queue.some((batch) => batch.id === head.id)) {\n return;\n }\n const set = await settle(\n local,\n room.locator,\n current,\n current.confirmed,\n current.queue.filter((batch) => batch.id !== head.id),\n {\n leaving:\n result.kind === 'expired' && landed(head, current.confirmed)\n ? { ...left, returned: null }\n : left,\n },\n );\n publishChangeSet(set);\n moveTo({ ...status, ...attention() });\n });\n if (result.kind === 'expired') continue;\n const withheld = await advance(room, local, authorized);\n if (withheld !== null) return withhold(withheld, room, local, progress);\n continue;\n }\n await recordAccepted(room, local, head, result);\n const from = replicas.get(room.locator)?.confirmed;\n if (from === undefined) return;\n const pulled = await pullRefresh(authorized, from, reachOf(room.locator));\n if (!continuing()) return;\n if (pulled.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n return;\n }\n if (pulled.kind === 'scoped-refusal') {\n await scoped(pulled, room, local);\n progress.complete = false;\n return;\n }\n if (pulled.kind === 'still-current' || pulled.kind === 'advanced') {\n const fresh = pulled.kind === 'advanced';\n if (!(await accepting(room, local, head, result, fresh ? pulled.confirmed : from, fresh))) {\n progress.complete = false;\n return;\n }\n continue;\n }\n if (pulled.kind === 'beyond-horizon') {\n const bootstrapped = await pullBootstrap(authorized, room);\n if (!continuing()) return;\n if (bootstrapped.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n return;\n }\n if (bootstrapped.kind === 'scoped-refusal') {\n await scoped(bootstrapped, room, local);\n progress.complete = false;\n return;\n }\n if (bootstrapped.kind === 'staged') {\n if (!(await accepting(room, local, head, result, bootstrapped.confirmed, true))) {\n progress.complete = false;\n return;\n }\n continue;\n }\n progress.complete = false;\n if (bootstrapped.kind === 'transport-uncertainty') {\n progress.reachable = false;\n } else if (bootstrapped.kind === 'room-not-readable') {\n unreadable.add(room.locator);\n list(room, false);\n emitRooms();\n } else if (bootstrapped.kind === 'refused') {\n refusedSource(room, bootstrapped);\n }\n return;\n }\n progress.complete = false;\n if (pulled.kind === 'transport-uncertainty') {\n progress.reachable = false;\n } else if (pulled.kind === 'room-not-readable') {\n unreadable.add(room.locator);\n list(room, false);\n emitRooms();\n } else if (pulled.kind === 'retryable-refusal') {\n journal.record(`refusal ${pulled.kind} ${pulled.code}`);\n } else if (pulled.kind === 'refused') {\n refusedSource(room, pulled);\n }\n return;\n }\n return;\n }\n\n async function retainModel(\n local: RuntimeStore,\n room: RoomDeclaration,\n attached: Attached,\n next: ModelState,\n ) {\n const key = modelKey(room.locator, attached);\n if (next.status === 'unavailable') modelEpoch.set(key, (modelEpoch.get(key) ?? 0) + 1);\n const epoch = modelEpoch.get(key) ?? 0;\n const previous = modelOf(room.locator, attached);\n const heldBefore = replicas.get(room.locator)?.confirmed.record;\n if (\n JSON.stringify(previous) === JSON.stringify(next) &&\n (heldBefore === undefined ||\n (JSON.stringify(heldBefore.operations) === JSON.stringify(room.operations) &&\n JSON.stringify(heldBefore.replica) === JSON.stringify(room.replica) &&\n JSON.stringify(heldBefore.attachedModel) === JSON.stringify(room.attachedModel) &&\n JSON.stringify(heldBefore.typedSelection) ===\n JSON.stringify(room.typedSelection ?? null)))\n )\n return;\n if (next.status === 'unavailable') {\n invalidModels.add(key);\n liveModels.delete(key);\n }\n await exclusive(async () => {\n if (!continuing()) return;\n if (next.status !== 'unavailable' && epoch !== (modelEpoch.get(key) ?? 0)) return;\n const held = replicas.get(room.locator);\n if (held !== undefined) {\n const record = {\n ...held.confirmed.record,\n operations: room.operations,\n replica: room.replica,\n attachedModel: room.attachedModel,\n typedSelection: room.typedSelection ?? null,\n ...(attached === 'collection' ? { model: next } : { selectionModel: next }),\n };\n await local.write({\n next: record,\n previous: held.confirmed.record,\n queue: held.queue,\n });\n const read = readConfirmed(record, held.confirmed);\n if (read.kind === 'staged') {\n replicas.set(room.locator, replicaOf(read.confirmed, held.queue, rewriting(), held));\n if (declarationRefusals.delete(room.locator)) {\n sourceRefusals.delete(room.locator);\n unreadable.delete(room.locator);\n }\n } else if (read.kind === 'refused') {\n replicas.set(room.locator, { ...held, confirmed: { ...held.confirmed, record } });\n refusedSource(room, read);\n declarationRefusals.add(room.locator);\n }\n }\n models.set(key, next);\n if (next.status === 'current') {\n liveModels.set(key, JSON.stringify(next.snapshot));\n invalidModels.delete(key);\n }\n list(room, room.replica.admission === 'admitted' && !unreadable.has(room.locator));\n if (held === undefined) emitRooms();\n else\n publishChangeSet(\n changeSet(room.locator, held, replicas.get(room.locator) ?? null, { room: true }),\n );\n });\n }\n\n async function acquireModel(\n local: RuntimeStore,\n room: DiscoveredRoom,\n authorized: Authorization,\n selection: TypedSelection | null,\n ) {\n const attached: Attached = selection === null ? 'collection' : 'typed-selection';\n const key = modelKey(room.locator, attached);\n const declared = selection === null ? room.attachedModel : selection.attachedModel;\n let previous = modelOf(room.locator, attached);\n if (\n previous.status !== 'unavailable' &&\n (declared === null || !sameModel(previous.snapshot, declared))\n ) {\n previous = { status: 'unavailable', reason: 'version-changed' };\n await retainModel(local, room, attached, previous);\n if (discoveryPaused) return;\n }\n const epoch = modelEpoch.get(key) ?? 0;\n let answer;\n try {\n answer = await options.adapter.model(\n authorized,\n selection === null\n ? {\n locator: room.locator,\n attached: 'collection',\n collectionRoot: room.collectionRoot,\n model: declared,\n }\n : {\n locator: room.locator,\n attached: 'typed-selection',\n roots: selection.roots,\n model: declared,\n },\n );\n } catch {\n answer = { kind: 'transport-uncertainty' as const };\n }\n if (discoveryPaused || epoch !== (modelEpoch.get(key) ?? 0)) return;\n if (answer.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n return;\n }\n if (answer.kind === 'transport-uncertainty') {\n await retainModel(local, room, attached, cached(previous));\n return;\n }\n if (answer.kind === 'model-unavailable') {\n await retainModel(local, room, attached, {\n status: 'unavailable',\n reason: answer.reason,\n });\n return;\n }\n if (declared === null || !sameModel(answer.snapshot, declared)) {\n await retainModel(local, room, attached, {\n status: 'unavailable',\n reason: 'version-changed',\n });\n return;\n }\n if (\n previous.status !== 'unavailable' &&\n sameModel(previous.snapshot, answer.snapshot) &&\n previous.snapshot.schema !== answer.snapshot.schema\n ) {\n await retainModel(local, room, attached, { status: 'unavailable', reason: 'invalid' });\n return;\n }\n const verified =\n answer.snapshot.schema === null ? EMPTY_SCHEMA : verify(answer.snapshot.schema);\n if (verified.verdict === 'refuse') {\n const where = verified.location === undefined ? '' : ` ${verified.location}`;\n journal.record(\n `model invalid ${room.locator} ${attached} ${answer.snapshot.identity} ${verified.rule}${where}`,\n );\n }\n await retainModel(\n local,\n room,\n attached,\n verified.verdict === 'accept'\n ? {\n status: 'current',\n snapshot: structuredClone(answer.snapshot),\n verifiedWith: MD_MODEL,\n types: verified.model.types,\n }\n : { status: 'unavailable', reason: 'invalid' },\n );\n }\n\n async function scoped(\n result: import('./adapter.js').ScopedRefusal,\n room: RoomDeclaration,\n local: RuntimeStore,\n ) {\n scopedRefusals.set(room.locator, { code: result.code, fields: result.fields });\n let scopedAway = room;\n if (result.scope === 'model')\n await retainModel(local, room, 'collection', {\n status: 'unavailable',\n reason: 'not-readable',\n });\n else if (result.scope !== 'operation') {\n unreadable.add(room.locator);\n scopedAway = {\n ...room,\n replica: { ...room.replica, admission: 'unavailable' },\n operations: {\n ...room.operations,\n ...(result.scope === 'content' ? { read: [] } : {}),\n ...(result.scope === 'sync' ? { sync: [] } : {}),\n },\n };\n await retainModel(local, scopedAway, 'collection', modelOf(room.locator));\n }\n if (!continuing()) return;\n list(scopedAway, scopedAway.replica.admission === 'admitted' && !unreadable.has(room.locator));\n emitRooms();\n journal.record(`scoped refusal ${room.locator} ${result.scope} ${result.code}`);\n }\n\n async function synchronize(\n discovered: readonly DiscoveredRoom[],\n local: RuntimeStore,\n progress: CycleProgress,\n ) {\n const prepared = await Promise.allSettled(\n discovered.map((room) => prepareRoom(room, local, progress)),\n );\n const ready = discovered.filter((_, index) => {\n const outcome = prepared[index];\n return outcome?.status === 'fulfilled' && outcome.value;\n });\n const rooms = await Promise.allSettled(\n ready.map((room) => synchronizeRoom(room, local, progress)),\n );\n const failed = [...prepared, ...rooms].find((room) => room.status === 'rejected');\n if (failed !== undefined) throw failed.reason;\n }\n\n async function prepareRoom(\n room: DiscoveredRoom,\n local: RuntimeStore,\n progress: CycleProgress,\n ): Promise<boolean> {\n if (closed || authorization === undefined) {\n progress.complete = false;\n return false;\n }\n const prior = replicas.get(room.locator)?.confirmed.record;\n if (prior !== undefined && prior.replica.selection !== room.replica.selection) {\n list(prior, false);\n emitRooms();\n journal.record(`selection changed ${room.locator}`);\n progress.complete = false;\n return false;\n }\n const selection = room.typedSelection;\n await Promise.all([\n acquireModel(local, room, authorization, null),\n ...(selection === undefined ? [] : [acquireModel(local, room, authorization, selection)]),\n ]);\n if (discoveryPaused || authorization === undefined) return false;\n if (room.replica.admission !== 'admitted') {\n progress.complete = false;\n return false;\n }\n const held = replicas.get(room.locator);\n if (held !== undefined && held.confirmed.record.replica.selection !== room.replica.selection) {\n progress.complete = false;\n return false;\n }\n return true;\n }\n\n async function synchronizeRoom(\n room: DiscoveredRoom,\n local: RuntimeStore,\n progress: CycleProgress,\n ) {\n if (discoveryPaused || authorization === undefined) return;\n const withheld = await advance(room, local, authorization);\n if (withheld !== null) {\n await withhold(withheld, room, local, progress);\n return;\n }\n await submitRoom(room, local, authorization, progress);\n }\n\n async function cycle(local: RuntimeStore, progress: CycleProgress) {\n if (closed || authorization === undefined) {\n notifyReady();\n return;\n }\n moveTo(transferring(status));\n let result;\n try {\n result = await options.adapter.discover(authorization);\n } catch {\n result = { kind: 'transport-uncertainty' as const };\n }\n if (closed) {\n notifyReady();\n return;\n }\n journal.record(`connection discover ${result.kind}`);\n if (result.kind === 'transport-uncertainty') {\n for (const room of rooms.values()) {\n await retainModel(local, room, 'collection', cached(modelOf(room.locator)));\n if (room.typedSelection !== null) {\n await retainModel(\n local,\n room,\n 'typed-selection',\n cached(modelOf(room.locator, 'typed-selection')),\n );\n }\n }\n progress.reachable = false;\n notifyReady();\n return;\n }\n if (result.kind === 'contract-unavailable') {\n journal.record(`connection contract unavailable ${result.code}`);\n await refuse('missing-required-guarantee', { code: result.code, fields: result.fields });\n notifyReady();\n return;\n }\n if (result.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n notifyReady();\n return;\n }\n if (!result.supportedVersions.includes(ROOM_CONTRACT_VERSION)) {\n await refuse('no-matching-version');\n notifyReady();\n return;\n }\n if (\n result.mdModel.identity !== MD_MODEL.identity ||\n result.mdModel.version !== MD_MODEL.version\n ) {\n await refuse('md-model-version-mismatch');\n notifyReady();\n return;\n }\n mismatchedRoots.clear();\n for (const room of result.rooms) {\n const held = replicas.get(room.locator)?.confirmed.record;\n const malformed = !validRoot(room.collectionRoot);\n if (\n room.operations === undefined ||\n !['read', 'sync', 'write', 'delete'].every(\n (operation) =>\n Array.isArray(room.operations[operation as keyof typeof room.operations]) &&\n room.operations[operation as keyof typeof room.operations].every(\n (scope) => typeof scope === 'string',\n ),\n ) ||\n room.replica === undefined ||\n typeof room.replica.selection !== 'string' ||\n room.replica.selection.length === 0 ||\n !['admitted', 'unavailable'].includes(room.replica.admission) ||\n !declaredIdentity(room.attachedModel)\n ) {\n journal.record(`invalid model or replica declaration ${room.locator}`);\n await refuse('missing-required-guarantee');\n notifyReady();\n return;\n }\n if (!declaredSelection(room)) {\n journal.record(`invalid typed selection declaration ${room.locator}`);\n await refuse('missing-required-guarantee');\n notifyReady();\n return;\n }\n if (malformed || (held !== undefined && held.collectionRoot !== room.collectionRoot)) {\n mismatchedRoots.add(room.locator);\n journal.record(`collection root ${malformed ? 'invalid' : 'changed'} ${room.locator}`);\n }\n }\n if (mismatchedRoots.size > 0) {\n await refuse('missing-required-guarantee');\n notifyReady();\n return;\n }\n const declared = new Set(result.capabilities.map((capability) => capability.name));\n for (const required of options.requiredGuarantees) {\n if (!knownCapabilities.has(required) || !declared.has(required)) {\n await refuse('missing-required-guarantee');\n notifyReady();\n return;\n }\n }\n if (refusal !== null) {\n refusal = null;\n emitRefusal();\n }\n const previousCapabilities = capabilities;\n capabilities = result.capabilities;\n notifyReady();\n if (declared.has('room-version-notifications')) observeRoomVersions();\n const discoveredSlots = result.slots ?? [];\n if (\n JSON.stringify(result.providerLimits) !== JSON.stringify(limits) ||\n JSON.stringify(result.capabilities) !== JSON.stringify(previousCapabilities) ||\n JSON.stringify(discoveredSlots) !== JSON.stringify(slots)\n ) {\n limits = result.providerLimits;\n slots = discoveredSlots;\n await local.declare(limits, capabilities, slots);\n }\n await applyDiscovery(result.rooms, local);\n handSelected(\n result.rooms\n .filter((room) => room.replica.admission === 'admitted')\n .map((room) => room.locator)\n .sort(),\n );\n progress.complete = true;\n await synchronize(result.rooms, local, progress);\n if (closed || discoveryPaused) return;\n await conversations.reconcile();\n if (status.providerUnreachable) conversations.reconnected();\n await conversations.catchUp(progress);\n }\n\n async function ensureAuthorization() {\n if (authorization !== undefined) return;\n try {\n authorization = await options.adapter.authorize();\n journal.record('connection authorize');\n } catch (error) {\n journal.record('connection authorize transport-uncertainty');\n throw error;\n }\n }\n\n async function connect() {\n if (closed || stopping || discoveryPaused) {\n notifyReady();\n return;\n }\n startTimer();\n const progress: CycleProgress = { complete: false, reachable: true };\n let completedAt = new Date().toISOString();\n try {\n const local = await openLocal();\n if (closed) return;\n await ensureAuthorization();\n if (closed) return;\n await cycle(local, progress);\n if (closed) return;\n if (progress.complete) {\n completedAt = new Date().toISOString();\n await local.complete(completedAt);\n }\n } catch {\n progress.complete = false;\n notifyReady();\n return;\n } finally {\n notifyReady();\n moveTo(settled(status, progress, completedAt, pending(), attention()));\n }\n }\n\n async function run() {\n try {\n await connect();\n } finally {\n inflight = false;\n if (queued && !closed) {\n queued = false;\n void enqueue();\n }\n }\n }\n\n function observeRoomVersions() {\n const path = options.adapter.roomVersions;\n if (path === undefined || withdrawNotifications !== undefined) return;\n withdrawNotifications = path.observe((notification) => {\n if (closed || stopping || discoveryPaused) return;\n if (notification.modelChanged === true && handed?.includes(notification.locator) === true) {\n void enqueue();\n return;\n }\n notices.set(notification.locator, notification.roomVersion);\n chain = chain.then(runNotified, runNotified);\n });\n }\n\n function writesHeld(): boolean {\n return serviceMode === 'write-halted' || haltedRefusal;\n }\n\n function signalled(mode: ServiceMode) {\n if (closed) return;\n if (mode === 'open') openSignals += 1;\n const releasing = mode === 'open' && (haltedRefusal || serviceMode === 'write-halted');\n if (mode === 'open') haltedRefusal = false;\n if (mode !== serviceMode) {\n serviceMode = mode;\n journal.record(`service mode ${mode}`);\n for (const listener of serviceModeListeners) listener(mode);\n }\n if (releasing) void enqueue();\n }\n\n function observeConversations() {\n const stream = options.adapter.conversations;\n if (stream === undefined || withdrawConversations !== undefined) return;\n withdrawConversations = stream.observe((event) => {\n conversations.receive(event);\n if (event.kind !== 'gap' || conversations.current()) return;\n show();\n scheduleCurrency();\n });\n }\n\n function scheduleCurrency() {\n if (currencyQueued || closed || stopping) return;\n currencyQueued = true;\n chain = chain.then(runCurrency, runCurrency);\n }\n\n async function runCurrency() {\n currencyQueued = false;\n if (closed || stopping || discoveryPaused) return;\n await conversations.reconcile();\n if (conversations.current()) {\n show();\n return;\n }\n const resting = status;\n const progress: CycleProgress = { complete: false, reachable: !resting.providerUnreachable };\n moveTo(transferring(resting));\n try {\n await conversations.catchUp(progress);\n } catch {\n progress.reachable = false;\n } finally {\n if (!closed) {\n moveTo(settled(resting, progress, resting.lastCompleted, pending(), attention()));\n }\n }\n }\n\n function handSelected(locators: readonly string[]) {\n const path = options.adapter.roomVersions;\n if (path === undefined || withdrawNotifications === undefined) return;\n if (handed !== undefined && JSON.stringify(locators) === JSON.stringify(handed)) return;\n handed = locators;\n path.select(locators);\n }\n\n async function runNotified() {\n const announced = [...notices];\n notices.clear();\n if (announced.length === 0 || closed || stopping || discoveryPaused) return;\n const resting = status;\n const progress: CycleProgress = { complete: false, reachable: !resting.providerUnreachable };\n moveTo(transferring(resting));\n try {\n const local = await openLocal();\n for (const [locator, roomVersion] of announced) {\n if (closed || discoveryPaused || authorization === undefined) return;\n if (handed?.includes(locator) !== true) continue;\n const room = discovered.get(locator);\n const held = replicas.get(locator);\n if (room === undefined) continue;\n if (sourceRefusals.has(locator)) {\n void enqueue();\n continue;\n }\n if (held === undefined) continue;\n if (held.confirmed.record.roomVersion === roomVersion) continue;\n const withheld = await advance(room, local, authorization);\n if (withheld === null) continue;\n if (withheld.kind === 'refused') {\n void enqueue();\n continue;\n }\n if (withheld.kind === 'scoped-refusal') {\n await scoped(withheld, room, local);\n continue;\n }\n if (withheld.kind === 'transport-uncertainty') {\n progress.reachable = false;\n continue;\n }\n if (withheld.kind === 'room-not-readable') {\n unreadable.add(locator);\n list(room, false);\n emitRooms();\n continue;\n }\n if (withheld.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n return;\n }\n }\n } catch {\n progress.reachable = false;\n } finally {\n if (!closed) {\n moveTo(settled(resting, progress, resting.lastCompleted, pending(), attention()));\n }\n }\n }\n\n function enqueue() {\n if (stopping) return chain;\n if (inflight) {\n queued = true;\n return chain;\n }\n inflight = true;\n chain = chain.then(run, run);\n return chain;\n }\n\n function close() {\n if (closed) return;\n closed = true;\n withdrawNotifications?.();\n withdrawNotifications = undefined;\n withdrawConversations?.();\n withdrawConversations = undefined;\n withdrawServiceMode?.();\n conversations.close();\n stopTimer();\n store?.close();\n void opening?.then(\n (opened) => {\n opened.close();\n },\n () => {},\n );\n roomListeners.clear();\n refusalListeners.clear();\n storageLossListeners.clear();\n statusListeners.clear();\n serviceModeListeners.clear();\n readSide.close();\n queueSubscriptions.clear();\n roomDraftListeners.clear();\n presentationListeners.clear();\n }\n\n async function stop() {\n stopping = true;\n stopTimer();\n await chain.catch(() => undefined);\n await mutations;\n close();\n }\n\n const withdrawServiceMode = options.adapter.serviceMode?.observe(signalled);\n observeConversations();\n options.signal?.addEventListener('abort', close, { once: true });\n if (options.signal?.aborted) close();\n\n void openLocal().catch(() => {\n notifyReady();\n });\n void enqueue();\n\n function watch(\n topic: RuntimeTopic,\n input: readonly unknown[],\n deliver: (message: unknown) => void,\n ): () => void {\n if (topic === 'room-drafts') {\n const listener: RoomDraftSubscription = { notify: deliver, ready: false };\n roomDraftListeners.add(listener);\n void exclusive(async () => {\n await openLocal();\n if (closed || !roomDraftListeners.has(listener)) return;\n listener.ready = true;\n }).then(\n () => {\n if (closed || !listener.ready || !roomDraftListeners.has(listener)) return;\n listener.notify(snapshotRoomDrafts());\n },\n () => {},\n );\n return () => {\n roomDraftListeners.delete(listener);\n };\n }\n if (topic === 'conversation') {\n return conversations.watch(input[0] as string, input[1] as ConversationOptions, deliver);\n }\n if (topic === 'presentation') {\n const listener: PresentationSubscription = {\n app: input[0] as string,\n notify: deliver,\n ready: false,\n };\n presentationListeners.add(listener);\n void exclusive(async () => {\n await openLocal();\n }).then(\n () => {\n if (closed || !presentationListeners.has(listener)) return;\n listener.ready = true;\n listener.notify(presentationOf(listener.app));\n },\n () => {},\n );\n return () => {\n presentationListeners.delete(listener);\n };\n }\n if (topic === 'rooms') {\n roomListeners.add(deliver);\n deliver(listed());\n return () => {\n roomListeners.delete(deliver);\n };\n }\n if (topic === 'connection-refusal') {\n refusalListeners.add(deliver);\n deliver(refusal);\n return () => {\n refusalListeners.delete(deliver);\n };\n }\n if (topic === 'storage-loss') {\n storageLossListeners.add(deliver);\n deliver(storageLoss);\n return () => {\n storageLossListeners.delete(deliver);\n };\n }\n if (topic === 'sync-status') {\n statusListeners.add(deliver);\n deliver(shown);\n return () => {\n statusListeners.delete(deliver);\n };\n }\n if (topic === 'service-mode') {\n serviceModeListeners.add(deliver);\n deliver(serviceMode);\n return () => {\n serviceModeListeners.delete(deliver);\n };\n }\n if (topic === 'queue') {\n const queue: QueueSubscription = { locator: input[0] as string, notify: deliver };\n queueSubscriptions.add(queue);\n queue.notify(entriesOf(queue.locator));\n return () => {\n queueSubscriptions.delete(queue);\n };\n }\n const plan = planOf(input[0], roomFacts());\n return readSide.watch(plan, identityOf(plan), deliver);\n }\n\n const md: MdRuntime = {\n loaded() {\n return openLocal().then(() => undefined);\n },\n rooms() {\n return listed();\n },\n slots() {\n return slotted();\n },\n query: ((input: unknown) => readSide.query(planOf(input, roomFacts()))) as MdRuntime['query'],\n async search(input: unknown) {\n const plan = searchPlanOf(input);\n const selected =\n plan.documents === undefined\n ? null\n : ((await readSide.query(filterOf(plan.documents, roomFacts()))) as DocumentResult)\n .documents;\n return searchIndex.search(plan, selected);\n },\n types(locator: string): RoomTypes {\n return {\n collection: modelTypes(modelOf(locator)),\n typedSelection:\n rooms.get(locator)?.typedSelection === undefined ||\n rooms.get(locator)?.typedSelection === null\n ? null\n : modelTypes(modelOf(locator, 'typed-selection')),\n };\n },\n syncStatus() {\n return shown;\n },\n serviceMode() {\n return serviceMode;\n },\n roomDraft: {\n list() {\n return exclusive(async () => {\n await openLocal();\n return snapshotRoomDrafts();\n }).then((listed) => {\n publishRoomDrafts(true);\n return listed;\n });\n },\n read(room: string, path: string) {\n const record = roomDrafts.get(room)?.get(path);\n return record === undefined ? null : roomDraftOf(record);\n },\n write(room: string, path: string, revision: string | null, input: unknown) {\n return exclusive(async (): Promise<RoomDraftWrite> => {\n const parts = readParts(input);\n if (path === '' || normalize(path) !== path) throw new Error('room-draft-malformed');\n const local = await openLocal();\n const current = roomDrafts.get(room)?.get(path);\n if ((current?.revision ?? null) !== revision) {\n return {\n outcome: 'stale',\n current: current === undefined ? null : roomDraftOf(current),\n };\n }\n const record: RoomDraftRecord = {\n locator: room,\n path,\n revision: roomDraftRevision(),\n parts: held(current?.parts, parts),\n returned: current?.returned ?? null,\n };\n await local.keepRoomDraft(record);\n rememberRoomDraft(record);\n publishChangeSet(changeSet(room, null, null, { drafts: [path] }));\n return { outcome: 'written', roomDraft: roomDraftOf(record) };\n });\n },\n discard(room: string, path: string, revision: string) {\n return exclusive(async (): Promise<RoomDraftWrite> => {\n const local = await openLocal();\n const current = roomDrafts.get(room)?.get(path);\n if (current === undefined || current.revision !== revision) {\n return {\n outcome: 'stale',\n current: current === undefined ? null : roomDraftOf(current),\n };\n }\n await local.discardRoomDraft(room, path);\n forgetRoomDraft(room, path);\n publishChangeSet(changeSet(room, null, null, { drafts: [path] }));\n moveTo({ ...status, ...attention() });\n return { outcome: 'written', roomDraft: null };\n });\n },\n },\n conversation: conversations.surface,\n chatDraft: conversations.chatDraft,\n presentation: {\n read(app: string) {\n return exclusive(async () => {\n await openLocal();\n return presentationOf(app);\n });\n },\n write(app: string, value: unknown) {\n return exclusive(async () => {\n const local = await openLocal();\n const stored = structuredClone(value);\n await local.present({ app, value: stored });\n presentations.set(app, stored);\n publishChangeSet(changeSet('', null, null, { presentation: app }));\n });\n },\n },\n save(\n room: string,\n named: readonly SavedRoomDraft[],\n writtenBy?: WrittenBy,\n ): Promise<SaveResult> {\n return exclusive(() => saveRoomDrafts(room, named, writtenBy));\n },\n outcome(identifier: string): SubmissionOutcome | null {\n return outcomes.get(identifier) ?? null;\n },\n history(locator: string, path: string, query?: HistoryQuery) {\n return readHistory(locator, path, query);\n },\n call(name: string, input: unknown) {\n return invokeAction(name, input);\n },\n reached(locator: string, roomVersion: string) {\n return reachedBy(locator, roomVersion);\n },\n log() {\n return journal.export();\n },\n storageLoss() {\n return storageLoss;\n },\n persistence() {\n return options.shell.persistentStorage;\n },\n observe: ((topic: RuntimeTopic, ...input: unknown[]) =>\n opened(\n (deliver) =>\n watch(topic, input, (message) => {\n deliver(structuredClone(message));\n }),\n topic === 'query',\n )) as MdRuntime['observe'],\n async reauthorize() {\n if (refusal === null || !refusal.reauthorizationOffered) return;\n journal.record('connection reauthorize');\n await chain.catch(() => undefined);\n await mutations;\n authorization = undefined;\n discoveryPaused = false;\n await enqueue();\n },\n };\n return { md, stop, watch };\n}\n"],"names":["verify","cached","modelTypes","NO_MODEL","sameModel","opened","filterOf","identityOf","planOf","createReadSide","createSearchIndex","searchPlanOf","ROOM_CONTRACT_VERSION","VERSION_1_CAPABILITIES","bootstrapRoom","changeSet","mergeChangeSets","createConversationStore","MD_MODEL","parseCollection","validRoot","createLog","refreshRoom","buildBatch","applyReturned","compositionOf","landed","readConfirmed","replicaOf","withdrawals","changedParts","changesOf","held","readParts","returnedInto","underneath","settled","same","saving","STARTING","transferring","detectStorageLoss","nextGeneration","roomDraftRevision","beneath","normalize","openRuntimeStore","unconfirmed","DEFAULT_DISCOVERY_INTERVAL_MS","EMPTY_SCHEMA","verdict","model","types","knownCapabilities","Set","within","root","path","declaredIdentity","undefined","identity","length","version","declaredSelection","room","selection","typedSelection","Array","isArray","roots","attachedModel","every","index","collectionRoot","other","at","createMdRuntime","options","composeRuntime","md","period","discoveryIntervalMs","authorization","opening","store","replicas","Map","pendings","roomDrafts","presentations","outcomes","outcomeRooms","wanted","limits","slots","capabilities","rewriting","some","capability","name","rooms","unreadable","models","liveModels","invalidModels","modelEpoch","discovered","roomsListed","scopedRefusals","sourceRefusals","declarationRefusals","modelKey","locator","attached","modelOf","get","savedModel","has","status","reason","compositionFor","record","selectionModel","mismatchedRoots","refusal","storageLoss","shown","discoveryPaused","timer","closed","stopping","withdrawNotifications","handed","notices","chain","Promise","resolve","mutations","inflight","queued","roomListeners","refusalListeners","storageLossListeners","statusListeners","queueSubscriptions","roomDraftListeners","presentationListeners","readSide","withdrawConversations","currencyQueued","serviceMode","haltedRefusal","openSignals","serviceModeListeners","conversations","cards","declaredCards","documents","query","select","roomFacts","call","input","invokeAction","durably","stream","adapter","publish","publishChangeSet","searchIndex","document","messages","message","conversation","journal","notifyReady","ready","rememberRoomDraft","set","forgetRoomDraft","delete","size","roomDraftOf","structuredClone","revision","parts","changedUnderneath","visible","returned","snapshotRoomDrafts","records","values","flatMap","sort","left","right","map","publishRoomDrafts","waitingOnly","value","listener","notify","presentationOf","app","emitPresentation","pending","replica","queue","attention","attentionRequired","push","reset","submission","state","listed","slotted","slot","entries","segment","available","Object","emitRooms","emitRefusal","emitStorageLoss","moveTo","next","show","current","submissionOf","batch","id","entriesOf","freeze","emitQueue","subscription","applyChangeSet","apply","changed","queues","drafts","change","scheduleCurrency","stopTimer","clearInterval","startTimer","setInterval","enqueue","refuse","provider","exclusive","revoked","local","openLocal","revokeModels","confirmed","keys","add","key","before","read","kind","reauthorizationOffered","list","synchronizationAvailable","operations","providerOwnedPaths","roomVersion","applyDiscovery","listedLocators","clear","dropUnlisted","admission","unlistedHeld","filter","unlisted","dropRooms","removed","restored","persisted","prior","snapshot","JSON","stringify","hydrate","recordedOutcomes","kept","presented","chatDrafts","lastCompleted","declared","named","listedSlots","all","presentation","providerLimits","queuedBatches","outcome","previousReplicas","retyped","collection","existing","refusedSource","locators","readState","open","shell","generation","storedGeneration","loss","rememberGeneration","keepGeneration","work","catch","error","then","withdrawable","lost","settle","settling","withdrawn","includes","returning","reverse","leaving","written","saved","settledOutcomes","accepted","write","previous","previousQueue","continuing","retained","Error","reached","target","saveRoomDrafts","writtenBy","rule","file","draft","built","baseRoomVersion","composition","changes","bases","batches","consumed","consumedRoomDrafts","identifier","mark","submit","keepUpload","upload","readHistory","ensureAuthorization","transfer","pageToken","join","result","history","scoped","conversationCards","declaredAction","action","actions","want","code","reachedBy","reachOf","versions","pullRefresh","authorized","reach","detail","pullBootstrap","advance","refreshed","bootstrapped","withhold","withheld","progress","complete","reachable","fields","location","referrers","affected","acceptedOf","author","time","logAccepted","submitted","recordAccepted","commitAccept","base","overlay","remaining","retainedBase","applied","revisions","removals","accepting","pulled","fresh","committed","failed","submitRoom","head","earlier","Date","now","parse","writesHeld","opensBefore","mutate","changeBatch","from","retainModel","epoch","heldBefore","acquireModel","answer","schema","verified","where","verifiedWith","scopedAway","scope","sync","synchronize","prepared","allSettled","prepareRoom","_","synchronizeRoom","find","cycle","discover","supportedVersions","mdModel","malformed","operation","required","requiredGuarantees","previousCapabilities","observeRoomVersions","discoveredSlots","declare","handSelected","reconcile","providerUnreachable","reconnected","catchUp","authorize","connect","completedAt","toISOString","run","roomVersions","observe","notification","modelChanged","runNotified","signalled","mode","releasing","observeConversations","event","receive","runCurrency","resting","announced","close","withdrawServiceMode","stop","signal","addEventListener","once","aborted","watch","topic","deliver","plan","loaded","search","selected","syncStatus","roomDraft","keepRoomDraft","discard","discardRoomDraft","surface","chatDraft","stored","present","save","log","export","persistence","persistentStorage","reauthorize"],"mappings":"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"}