@agentshouse/mdruntime 0.1.0-alpha.48 → 0.1.0-alpha.49

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.
@@ -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 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 readReclassified,\n replicaOf,\n sameMembership,\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 selection.roots.every((other, at) => at === index || !within(other, root)),\n );\n}\n\nfunction declaredUntypedFolders(room: DiscoveredRoom): boolean {\n const roots = room.untypedFolders;\n if (roots === undefined) return true;\n if (!Array.isArray(roots) || roots.length === 0) return false;\n const selected = room.typedSelection?.roots ?? [];\n return roots.every(\n (root, index) =>\n validRoot(root) &&\n root !== '' &&\n roots.every((other, at) => at === index || !within(other, root)) &&\n selected.every((other) => !within(other, root) && !within(root, other)),\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 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 untypedFolders: readonly string[];\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 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 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 untypedFolders: room.untypedFolders ?? [],\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 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 untypedFolders: record.untypedFolders,\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 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 minPosition: string | undefined,\n ) {\n if (!continuing()) return unconfirmed;\n try {\n const result = await refreshRoom(\n options.adapter,\n authorized,\n confirmed,\n continuing,\n minPosition,\n );\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 JSON.stringify(heldBefore.untypedFolders) === JSON.stringify(room.untypedFolders ?? [])))\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 declared = {\n ...held.confirmed.record,\n operations: room.operations,\n replica: room.replica,\n attachedModel: room.attachedModel,\n typedSelection: room.typedSelection ?? null,\n untypedFolders: room.untypedFolders ?? [],\n ...(attached === 'collection' ? { model: next } : { selectionModel: next }),\n };\n const reclassified = sameMembership(declared, held.confirmed.record)\n ? readConfirmed(declared, held.confirmed)\n : readReclassified(declared, held.confirmed);\n const record =\n reclassified.kind === 'staged'\n ? declared\n : {\n ...declared,\n typedSelection: held.confirmed.record.typedSelection,\n untypedFolders: held.confirmed.record.untypedFolders,\n };\n const read =\n reclassified.kind === 'deferred' ? readConfirmed(record, held.confirmed) : reclassified;\n await local.write({\n next: record,\n previous: held.confirmed.record,\n queue: held.queue,\n });\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 ? { locator: room.locator, attached: 'collection', model: declared }\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 if (replicas.has(room.locator)) 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 for (const room of result.rooms) {\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 (!declaredUntypedFolders(room)) {\n journal.record(`invalid untyped folder declaration ${room.locator}`);\n await refuse('missing-required-guarantee');\n notifyReady();\n return;\n }\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","readReclassified","replicaOf","sameMembership","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","other","at","declaredUntypedFolders","untypedFolders","selected","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","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","minPosition","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","reclassified","acquireModel","answer","schema","verified","where","verifiedWith","scopedAway","scope","sync","synchronize","prepared","allSettled","prepareRoom","_","synchronizeRoom","find","cycle","discover","supportedVersions","mdModel","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","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 RoomAttachment,\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 readReclassified,\n replicaOf,\n sameMembership,\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 selection.roots.every((other, at) => at === index || !within(other, root)),\n );\n}\n\nfunction declaredUntypedFolders(room: DiscoveredRoom): boolean {\n const roots = room.untypedFolders;\n if (roots === undefined) return true;\n if (!Array.isArray(roots) || roots.length === 0) return false;\n const selected = room.typedSelection?.roots ?? [];\n return roots.every(\n (root, index) =>\n validRoot(root) &&\n root !== '' &&\n roots.every((other, at) => at === index || !within(other, root)) &&\n selected.every((other) => !within(other, root) && !within(root, other)),\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 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 untypedFolders: readonly string[];\n providerOwnedPaths: readonly string[];\n roomVersion: string | null;\n attachments: readonly RoomAttachment[];\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 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 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 untypedFolders: room.untypedFolders ?? [],\n providerOwnedPaths: room.providerOwnedPaths,\n roomVersion: replicas.get(room.locator)?.confirmed.record.roomVersion ?? null,\n attachments: replicas.get(room.locator)?.confirmed.record.attachments ?? [],\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 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 attachments: record.attachments,\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 untypedFolders: record.untypedFolders,\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 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 minPosition: string | undefined,\n ) {\n if (!continuing()) return unconfirmed;\n try {\n const result = await refreshRoom(\n options.adapter,\n authorized,\n confirmed,\n continuing,\n minPosition,\n );\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 JSON.stringify(heldBefore.untypedFolders) === JSON.stringify(room.untypedFolders ?? [])))\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 declared = {\n ...held.confirmed.record,\n operations: room.operations,\n replica: room.replica,\n attachedModel: room.attachedModel,\n typedSelection: room.typedSelection ?? null,\n untypedFolders: room.untypedFolders ?? [],\n ...(attached === 'collection' ? { model: next } : { selectionModel: next }),\n };\n const reclassified = sameMembership(declared, held.confirmed.record)\n ? readConfirmed(declared, held.confirmed)\n : readReclassified(declared, held.confirmed);\n const record =\n reclassified.kind === 'staged'\n ? declared\n : {\n ...declared,\n typedSelection: held.confirmed.record.typedSelection,\n untypedFolders: held.confirmed.record.untypedFolders,\n };\n const read =\n reclassified.kind === 'deferred' ? readConfirmed(record, held.confirmed) : reclassified;\n await local.write({\n next: record,\n previous: held.confirmed.record,\n queue: held.queue,\n });\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 ? { locator: room.locator, attached: 'collection', model: declared }\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 if (replicas.has(room.locator)) 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 for (const room of result.rooms) {\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 (!declaredUntypedFolders(room)) {\n journal.record(`invalid untyped folder declaration ${room.locator}`);\n await refuse('missing-required-guarantee');\n notifyReady();\n return;\n }\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","readReclassified","replicaOf","sameMembership","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","other","at","declaredUntypedFolders","untypedFolders","selected","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","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","attachments","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","minPosition","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","reclassified","acquireModel","answer","schema","verified","where","verifiedWith","scopedAway","scope","sync","synchronize","prepared","allSettled","prepareRoom","_","synchronizeRoom","find","cycle","discover","supportedVersions","mdModel","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","syncStatus","roomDraft","keepRoomDraft","discard","discardRoomDraft","surface","chatDraft","stored","present","save","log","export","persistence","persistentStorage","reauthorize"],"mappings":"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"}