@agentshouse/mdruntime 0.1.0-alpha.32 → 0.1.0-alpha.33

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,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
@@ -67,6 +67,7 @@ export function composeRuntime(options) {
67
67
  let roomsListed = false;
68
68
  const scopedRefusals = new Map();
69
69
  const sourceRefusals = new Map();
70
+ const declarationRefusals = new Set();
70
71
  function modelKey(locator, attached) {
71
72
  return `${attached} ${locator}`;
72
73
  }
@@ -378,8 +379,13 @@ export function composeRuntime(options) {
378
379
  selectionModel: revoked
379
380
  };
380
381
  const read = readConfirmed(record, before.confirmed);
381
- if (read.kind !== 'staged') throw new Error(`Cannot retype revoked Room ${locator}`);
382
- replicas.set(locator, replicaOf(read.confirmed, before.queue, rewriting(), before));
382
+ replicas.set(locator, read.kind === 'staged' ? replicaOf(read.confirmed, before.queue, rewriting(), before) : {
383
+ ...before,
384
+ confirmed: {
385
+ ...before.confirmed,
386
+ record
387
+ }
388
+ });
383
389
  }
384
390
  rooms.set(locator, {
385
391
  ...room,
@@ -477,6 +483,7 @@ export function composeRuntime(options) {
477
483
  unreadable.delete(locator);
478
484
  scopedRefusals.delete(locator);
479
485
  sourceRefusals.delete(locator);
486
+ declarationRefusals.delete(locator);
480
487
  for (const attached of [
481
488
  'collection',
482
489
  'typed-selection'
@@ -730,6 +737,7 @@ export function composeRuntime(options) {
730
737
  for (const batch of accepted)pendings.delete(batch.id);
731
738
  unreadable.delete(room.locator);
732
739
  sourceRefusals.delete(room.locator);
740
+ declarationRefusals.delete(room.locator);
733
741
  list(room, true);
734
742
  publishChangeSet(set);
735
743
  moveTo({
@@ -1037,6 +1045,7 @@ export function composeRuntime(options) {
1037
1045
  }
1038
1046
  }
1039
1047
  });
1048
+ declarationRefusals.delete(room.locator);
1040
1049
  unreadable.add(room.locator);
1041
1050
  list(room, false);
1042
1051
  emitRooms();
@@ -1150,6 +1159,7 @@ export function composeRuntime(options) {
1150
1159
  });
1151
1160
  unreadable.delete(room.locator);
1152
1161
  sourceRefusals.delete(room.locator);
1162
+ declarationRefusals.delete(room.locator);
1153
1163
  list(room, true);
1154
1164
  publishChangeSet(set);
1155
1165
  moveTo({
@@ -1372,6 +1382,20 @@ export function composeRuntime(options) {
1372
1382
  const read = readConfirmed(record, held.confirmed);
1373
1383
  if (read.kind === 'staged') {
1374
1384
  replicas.set(room.locator, replicaOf(read.confirmed, held.queue, rewriting(), held));
1385
+ if (declarationRefusals.delete(room.locator)) {
1386
+ sourceRefusals.delete(room.locator);
1387
+ unreadable.delete(room.locator);
1388
+ }
1389
+ } else if (read.kind === 'refused') {
1390
+ replicas.set(room.locator, {
1391
+ ...held,
1392
+ confirmed: {
1393
+ ...held.confirmed,
1394
+ record
1395
+ }
1396
+ });
1397
+ refusedSource(room, read);
1398
+ declarationRefusals.add(room.locator);
1375
1399
  }
1376
1400
  }
1377
1401
  models.set(key, next);
@@ -1 +1 @@
1
- {"version":3,"sources":["/workspace/packages/mdruntime/src/connection.ts"],"sourcesContent":["import { verify } from '@agentshouse/mdmodel';\nimport {\n cached,\n modelTypes,\n NO_MODEL,\n sameModel,\n type ModelState,\n type TypesResult,\n} from './model.js';\nimport { opened, type Observation } from './observation.js';\nimport {\n filterOf,\n identityOf,\n planOf,\n type DocumentQuery,\n type DocumentResult,\n type GroupQuery,\n type GroupResult,\n type HeldRooms,\n} from './query.js';\nimport { createReadSide } from './read-side.js';\nimport {\n createSearchIndex,\n searchPlanOf,\n type SearchRequest,\n type SearchResult,\n} from './search.js';\nimport {\n ROOM_CONTRACT_VERSION,\n VERSION_1_CAPABILITIES,\n type ActionResult,\n type Adapter,\n type AdapterFailure,\n type Authorization,\n type Capability,\n type DiscoveredRoom,\n type Discovery,\n type HistoryResult,\n type MutationResult,\n type ProviderLimit,\n type ConversationCards,\n type ConversationAction,\n type ProviderRefusal,\n type 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, validRoot, type Composition } from './collection.js';\nimport { createLog } from './log.js';\nimport type { CallResult, QueueEntry, Submission, SubmissionOutcome } from './outcome.js';\nimport { refreshRoom } from './refresh.js';\nimport { buildBatch, type Rewriting, type SaveRefusal } from './save.js';\nimport {\n applyReturned,\n compositionOf,\n landed,\n readConfirmed,\n replicaOf,\n withdrawals,\n type ConfirmedLayer,\n type Replica,\n} from './replica.js';\nimport {\n changedParts,\n changesOf,\n held,\n readParts,\n returnedInto,\n underneath,\n type ReturnReason,\n type RoomDraft,\n type RoomDraftRecord,\n type RoomDraftWrite,\n type SavedDraft,\n} from './room-draft.js';\nimport {\n settled,\n same,\n saving,\n STARTING,\n transferring,\n type AttentionEntry,\n type CycleProgress,\n type SyncStatus,\n} from './status.js';\nimport { detectStorageLoss, nextGeneration, type RuntimeShell } from './durability.js';\nimport { roomDraftRevision } from './identity.js';\nimport { beneath, normalize } from './paths.js';\nimport {\n openRuntimeStore,\n type PendingState,\n type ReplicaRecord,\n type RuntimeStore,\n} from './store.js';\nimport { unconfirmed, type Refused, type Unconfirmed } from './transfer.js';\n\nconst DEFAULT_DISCOVERY_INTERVAL_MS = 60_000;\n\nconst knownCapabilities = new Set<string>(VERSION_1_CAPABILITIES);\n\ntype Attached = 'collection' | 'typed-selection';\n\ntype RoomDeclaration = Omit<DiscoveredRoom, 'roomVersion' | 'typedSelection'> & {\n typedSelection?: TypedSelection | null;\n};\n\nfunction within(root: string, path: string): boolean {\n return root === '' || beneath(root, path);\n}\n\nfunction declaredIdentity(model: import('./model.js').ModelIdentity | null | undefined): boolean {\n if (model === undefined) return false;\n if (model === null) return true;\n return (\n typeof model.identity === 'string' &&\n model.identity.length > 0 &&\n typeof model.version === 'string' &&\n model.version.length > 0\n );\n}\n\nfunction declaredSelection(room: DiscoveredRoom): boolean {\n const selection = room.typedSelection;\n if (selection === undefined) return true;\n if (!Array.isArray(selection.roots) || selection.roots.length === 0) return false;\n if (!declaredIdentity(selection.attachedModel)) return false;\n return selection.roots.every(\n (root, index) =>\n validRoot(root) &&\n root !== '' &&\n !within(room.collectionRoot, root) &&\n selection.roots.every((other, at) => at === index || !within(other, root)),\n );\n}\n\nexport type AppTypedSelection = {\n roots: readonly string[];\n attachedModel: import('./model.js').ModelIdentity | null;\n model: TypesResult;\n};\n\nexport type AppRoom = {\n collectionRoot: string;\n name: string;\n locator: string;\n operations: import('./adapter.js').OperationScopes;\n replica: import('./adapter.js').ReplicaAdmission;\n attachedModel: import('./model.js').ModelIdentity | null;\n model: TypesResult;\n typedSelection: AppTypedSelection | null;\n providerOwnedPaths: readonly string[];\n roomVersion: string | null;\n synchronizationAvailable: boolean;\n refusal: ProviderRefusal | null;\n};\n\nexport type AppSlotEntry = {\n room: AppRoom;\n segment: string | null;\n};\n\nexport type AppSlot = {\n slot: string;\n entries: readonly AppSlotEntry[];\n};\n\nexport type RoomTypes = {\n collection: TypesResult;\n typedSelection: TypesResult | null;\n};\n\nexport type ConnectionRefusalReason =\n | 'no-matching-version'\n | 'missing-required-guarantee'\n | 'md-model-version-mismatch'\n | 'revoked-authorization'\n | 'client-host-protocol-mismatch';\n\nexport type ConnectionRefusal = {\n reason: ConnectionRefusalReason;\n reauthorizationOffered: boolean;\n refusal: ProviderRefusal | null;\n};\n\nexport type MdRuntimeOptions = {\n adapter: Adapter;\n shell: RuntimeShell;\n requiredGuarantees: readonly string[];\n authorization?: Authorization;\n discoveryIntervalMs?: number;\n signal?: AbortSignal;\n};\n\nexport type SaveResult =\n | { outcome: 'saved'; identifier: string }\n | ({ outcome: 'refused' } & SaveRefusal);\n\nexport type SavedRoomDraft = { readonly path: string; readonly revision: string };\n\nexport type RoomDraftSurface = {\n list(): Promise<readonly RoomDraft[]>;\n read(room: string, path: string): RoomDraft | null;\n write(\n room: string,\n path: string,\n revision: string | null,\n parts: unknown,\n ): Promise<RoomDraftWrite>;\n discard(room: string, path: string, revision: string): Promise<RoomDraftWrite>;\n};\n\nexport type PresentationSurface = {\n read(app: string): Promise<unknown>;\n write(app: string, value: unknown): Promise<void>;\n};\n\nexport type HistoryQuery = {\n revision?: string;\n pageToken?: string;\n};\n\nexport type MdRuntime = {\n loaded(): Promise<void>;\n rooms(): readonly AppRoom[];\n slots(): readonly AppSlot[];\n query: {\n (query: DocumentQuery): Promise<DocumentResult>;\n (query: GroupQuery): Promise<GroupResult>;\n };\n search(request: SearchRequest): Promise<SearchResult>;\n types(locator: string): RoomTypes;\n syncStatus(): SyncStatus;\n roomDraft: RoomDraftSurface;\n conversation: ConversationSurface;\n chatDraft: ChatDraftSurface;\n presentation: PresentationSurface;\n save(\n room: string,\n roomDrafts: readonly SavedRoomDraft[],\n writtenBy?: WrittenBy,\n ): Promise<SaveResult>;\n outcome(identifier: string): SubmissionOutcome | null;\n history(locator: string, path: string, query?: HistoryQuery): Promise<HistoryResult>;\n call(name: string, input: unknown): Promise<CallResult>;\n log(): string;\n storageLoss(): string | null;\n persistence(): boolean;\n observe: {\n (topic: 'rooms'): Promise<Observation<readonly AppRoom[]>>;\n (topic: 'connection-refusal'): Promise<Observation<ConnectionRefusal | null>>;\n (topic: 'storage-loss'): Promise<Observation<string | null>>;\n (topic: 'sync-status'): Promise<Observation<SyncStatus>>;\n (topic: '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 | 'query'\n | 'queue'\n | 'room-drafts'\n | 'presentation'\n | 'conversation';\n\nexport type ComposedRuntime = {\n md: MdRuntime;\n watch(\n topic: RuntimeTopic,\n input: readonly unknown[],\n deliver: (message: unknown) => void,\n ): () => void;\n};\n\ntype QueueSubscription = {\n locator: string;\n notify: (entries: readonly QueueEntry[]) => void;\n};\n\ntype RoomDraftSubscription = {\n notify: (roomDrafts: readonly RoomDraft[]) => void;\n ready: boolean;\n};\n\ntype Leaving = { batch: ChangeBatch; outcome: SubmissionOutcome; returned: ReturnReason | null };\n\ntype PresentationSubscription = {\n app: string;\n notify: (value: unknown) => void;\n ready: boolean;\n};\n\ntype Withheld = AdapterFailure | Unconfirmed | Refused;\n\nexport function createMdRuntime(options: MdRuntimeOptions): MdRuntime {\n return composeRuntime(options).md;\n}\n\nexport function composeRuntime(options: MdRuntimeOptions): ComposedRuntime {\n const period = options.discoveryIntervalMs ?? DEFAULT_DISCOVERY_INTERVAL_MS;\n let authorization: Authorization | undefined = options.authorization;\n let opening: Promise<RuntimeStore> | undefined;\n let store: RuntimeStore | undefined;\n const replicas = new Map<string, Replica>();\n const pendings = new Map<string, PendingState>();\n const roomDrafts = new Map<string, Map<string, RoomDraftRecord>>();\n const presentations = new Map<string, unknown>();\n const outcomes = new Map<string, SubmissionOutcome>();\n const outcomeRooms = new Map<string, string>();\n let limits: readonly ProviderLimit[] = [];\n let slots: NonNullable<Discovery['slots']> = [];\n let capabilities: readonly Capability[] = [];\n function rewriting(): Rewriting {\n return capabilities.some((capability) => capability.name === 'move-reference-rewrites')\n ? 'provider'\n : 'runtime';\n }\n const rooms = new Map<string, AppRoom>();\n const unreadable = new Set<string>();\n const models = new Map<string, ModelState>();\n const liveModels = new Map<string, string>();\n const invalidModels = new Set<string>();\n const modelEpoch = new Map<string, number>();\n const discovered = new Map<string, DiscoveredRoom>();\n let roomsListed = false;\n const scopedRefusals = new Map<string, ProviderRefusal>();\n const sourceRefusals = new Map<string, ProviderRefusal>();\n function modelKey(locator: string, attached: Attached): string {\n return `${attached} ${locator}`;\n }\n function modelOf(locator: string, attached: Attached = 'collection'): ModelState {\n return models.get(modelKey(locator, attached)) ?? NO_MODEL;\n }\n function savedModel(locator: string, attached: Attached): ModelState {\n return invalidModels.has(modelKey(locator, attached))\n ? { status: 'unavailable', reason: 'revoked' }\n : modelOf(locator, attached);\n }\n function compositionFor(record: ReplicaRecord): Composition {\n return compositionOf({\n ...record,\n model: savedModel(record.locator, 'collection'),\n selectionModel: savedModel(record.locator, 'typed-selection'),\n });\n }\n\n const mismatchedRoots = new Set<string>();\n let refusal: ConnectionRefusal | null = null;\n let storageLoss: string | null = null;\n let status: SyncStatus = STARTING;\n let shown: SyncStatus = STARTING;\n let discoveryPaused = false;\n let timer: ReturnType<typeof setInterval> | undefined;\n let closed = false;\n let 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 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 if (read.kind !== 'staged') throw new Error(`Cannot retype revoked Room ${locator}`);\n replicas.set(locator, replicaOf(read.confirmed, before.queue, rewriting(), before));\n }\n rooms.set(locator, {\n ...room,\n model: modelTypes(revoked),\n typedSelection:\n room.typedSelection === null\n ? null\n : { ...room.typedSelection, model: modelTypes(revoked) },\n });\n changed.push(changeSet(locator, before, replicas.get(locator) ?? null, { room: true }));\n }\n publishChangeSet(mergeChangeSets(changed));\n });\n }\n } finally {\n refusal = {\n reason,\n reauthorizationOffered: reason === 'revoked-authorization',\n refusal: provider,\n };\n journal.record(`connection refused ${reason}`);\n emitRefusal();\n }\n }\n\n function list(room: RoomDeclaration, synchronizationAvailable: boolean) {\n const selection = room.typedSelection ?? null;\n rooms.set(room.locator, {\n name: room.name,\n collectionRoot: room.collectionRoot,\n locator: room.locator,\n operations: room.operations,\n replica: room.replica,\n attachedModel: room.attachedModel,\n model: modelTypes(modelOf(room.locator)),\n typedSelection:\n selection === null\n ? null\n : {\n roots: selection.roots,\n attachedModel: selection.attachedModel,\n model: modelTypes(modelOf(room.locator, 'typed-selection')),\n },\n providerOwnedPaths: room.providerOwnedPaths,\n roomVersion: replicas.get(room.locator)?.confirmed.record.roomVersion ?? null,\n synchronizationAvailable,\n refusal: scopedRefusals.get(room.locator) ?? sourceRefusals.get(room.locator) ?? null,\n });\n }\n\n async function applyDiscovery(listed: readonly DiscoveredRoom[], local: RuntimeStore) {\n const listedLocators = new Set(listed.map((room) => room.locator));\n for (const locator of listedLocators) scopedRefusals.delete(locator);\n discovered.clear();\n for (const room of listed) discovered.set(room.locator, room);\n await dropUnlisted(listedLocators, local);\n for (const room of listed) {\n const held = replicas.get(room.locator)?.confirmed.record;\n if (held !== undefined && held.replica.selection !== room.replica.selection) {\n list(held, false);\n continue;\n }\n list(room, room.replica.admission === 'admitted' && !unreadable.has(room.locator));\n }\n roomsListed = true;\n emitRooms();\n }\n\n function unlistedHeld(listed: ReadonlySet<string>): string[] {\n return [...new Set([...rooms.keys(), ...roomDrafts.keys()])].filter(\n (locator) => !listed.has(locator),\n );\n }\n\n async function dropUnlisted(listed: ReadonlySet<string>, local: RuntimeStore) {\n if (unlistedHeld(listed).length === 0) return;\n await exclusive(async () => {\n const unlisted = unlistedHeld(listed);\n await local.dropRooms(unlisted);\n for (const [batch, locator] of outcomeRooms) {\n if (listed.has(locator)) continue;\n outcomeRooms.delete(batch);\n outcomes.delete(batch);\n }\n const removed = unlisted.map((locator) =>\n changeSet(locator, replicas.get(locator) ?? null, null, {\n room: true,\n queue: true,\n drafts: [...(roomDrafts.get(locator)?.keys() ?? [])],\n }),\n );\n for (const locator of unlisted) {\n for (const batch of replicas.get(locator)?.queue ?? []) pendings.delete(batch.id);\n replicas.delete(locator);\n rooms.delete(locator);\n roomDrafts.delete(locator);\n unreadable.delete(locator);\n scopedRefusals.delete(locator);\n sourceRefusals.delete(locator);\n 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 read = readConfirmed({ ...record, model, selectionModel }, prior?.confirmed);\n if (read.kind !== 'staged') continue;\n replicas.set(\n record.locator,\n replicaOf(read.confirmed, queuedBatches.get(record.locator) ?? [], rewriting(), prior),\n );\n const existing = rooms.get(record.locator);\n if (existing === undefined) list(record, false);\n else {\n rooms.set(record.locator, {\n ...existing,\n roomVersion: record.roomVersion,\n operations: record.operations,\n replica: record.replica,\n attachedModel: record.attachedModel,\n model: modelTypes(model),\n typedSelection:\n record.typedSelection === null\n ? null\n : {\n roots: record.typedSelection.roots,\n attachedModel: record.typedSelection.attachedModel,\n model: modelTypes(selectionModel),\n },\n });\n }\n }\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 const prior = replicas.get(room.locator);\n const retained = readConfirmed(\n {\n ...confirmed.record,\n model: modelOf(room.locator),\n selectionModel: modelOf(room.locator, 'typed-selection'),\n },\n prior?.confirmed,\n );\n if (retained.kind !== 'staged') throw new Error(`Cannot retype staged Room ${room.locator}`);\n const queue = prior?.queue ?? [];\n const accepted = queue.filter((batch) => outcomes.get(batch.id)?.kind === 'accepted');\n const set = await settle(\n local,\n room.locator,\n prior,\n retained.confirmed,\n queue.filter((batch) => !accepted.includes(batch)),\n { room: true },\n );\n for (const batch of accepted) pendings.delete(batch.id);\n unreadable.delete(room.locator);\n sourceRefusals.delete(room.locator);\n list(room, true);\n publishChangeSet(set);\n moveTo({ ...status, ...attention() });\n });\n }\n\n async function saveRoomDrafts(\n locator: string,\n named: readonly SavedRoomDraft[],\n writtenBy: WrittenBy | undefined,\n ): Promise<SaveResult> {\n const local = await openLocal();\n const replica = replicas.get(locator);\n const room = rooms.get(locator);\n if (replica === undefined || room === undefined) {\n throw new Error(`No Local Replica for ${locator}`);\n }\n if (mismatchedRoots.has(locator))\n return { outcome: 'refused', rule: 'collection-root-mismatch' };\n const saved: SavedDraft[] = [];\n for (const { path, revision } of named) {\n const record = roomDrafts.get(locator)?.get(path);\n if (record === undefined || record.revision !== revision) {\n return { outcome: 'refused', rule: 'stale', file: path };\n }\n if (!saved.some((draft) => draft.path === path)) saved.push({ path, parts: record.parts });\n }\n const changed = saved.flatMap(({ path, parts }) =>\n changedParts(path, underneath(parts, path, replica.visible)),\n );\n if (changed.length > 0)\n return { outcome: 'refused', rule: 'changed-underneath', parts: changed };\n const parts = saved.map(({ path, parts }) => changesOf(path, parts));\n const built = buildBatch({\n baseRoomVersion: replica.confirmed.record.roomVersion,\n composition: compositionFor(replica.confirmed.record),\n operations: room.operations,\n providerOwnedPaths: room.providerOwnedPaths,\n providerLimits: limits,\n rewriting: rewriting(),\n visible: replica.visible,\n changes: parts.flatMap(({ changes }) => changes),\n bases: parts.flatMap(({ bases }) => bases),\n writtenBy,\n });\n if (built.kind === 'refused') return { outcome: 'refused', ...built.refusal };\n const batches = [...replica.queue, built.batch];\n const consumed = saved.map(({ path }) => path);\n try {\n await local.write({\n next: replica.confirmed.record,\n previous: replica.confirmed.record,\n queue: batches,\n previousQueue: replica.queue,\n saved,\n consumedRoomDrafts: consumed,\n });\n } catch {\n return { outcome: 'refused', rule: 'durable-write' };\n }\n pendings.set(built.batch.id, { drafts: saved, submission: { state: 'waiting' }, lost: false });\n for (const path of consumed) forgetRoomDraft(locator, path);\n replicas.set(locator, replicaOf(replica.confirmed, batches, rewriting(), replica));\n publishChangeSet(\n changeSet(locator, replica, replicas.get(locator) ?? null, {\n queue: true,\n drafts: consumed,\n }),\n );\n moveTo({ ...saving(status), ...attention() });\n void enqueue();\n return { outcome: 'saved', identifier: built.batch.id };\n }\n\n async function mark(\n local: RuntimeStore,\n locator: string,\n identifier: string,\n submission: Submission,\n lost: boolean,\n ) {\n const state = pendings.get(identifier);\n if (\n 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 readHistory(\n locator: string,\n path: string,\n query: HistoryQuery = {},\n ): Promise<HistoryResult> {\n if (closed || refusal !== null) return { kind: 'transport-uncertainty' };\n try {\n await ensureAuthorization();\n } catch {\n return { kind: 'transport-uncertainty' };\n }\n if (closed || authorization === undefined || refusal !== null) {\n return { kind: 'transport-uncertainty' };\n }\n const transfer = ['transfer', 'history', locator, path];\n if (query.revision !== undefined) transfer.push(query.revision);\n if (query.pageToken !== undefined) transfer.push(query.pageToken);\n journal.record(transfer.join(' '));\n try {\n const result = await options.adapter.history(authorization, {\n locator,\n path,\n ...(query.revision === undefined ? {} : { revision: query.revision }),\n ...(query.pageToken === undefined ? {} : { pageToken: query.pageToken }),\n });\n journal.record(`outcome history ${result.kind}`);\n if (result.kind === 'scoped-refusal') {\n const room = replicas.get(result.locator)?.confirmed.record;\n if (room !== undefined) await scoped(result, room, await openLocal());\n }\n if (result.kind === 'revoked-authorization') await refuse('revoked-authorization');\n return result;\n } catch {\n journal.record('outcome history transport-uncertainty');\n return { kind: 'transport-uncertainty' };\n }\n }\n\n function declaredCards(): ConversationCards | undefined {\n for (const capability of capabilities) {\n if (capability.conversationCards !== undefined) return capability.conversationCards;\n }\n return undefined;\n }\n\n function declaredAction(name: string) {\n for (const capability of capabilities) {\n for (const action of capability.actions ?? []) {\n if (action.name === name) return action;\n }\n }\n return undefined;\n }\n\n async function invokeAction(name: string, input: unknown): Promise<CallResult> {\n await ready;\n if (closed || refusal !== null) return { kind: 'transport-uncertainty' };\n if (declaredAction(name) === undefined) return { kind: 'undeclared' };\n try {\n await ensureAuthorization();\n } catch {\n return { kind: 'transport-uncertainty' };\n }\n if (closed || authorization === undefined || refusal !== null) {\n return { kind: 'transport-uncertainty' };\n }\n journal.record(`transfer action ${name}`);\n try {\n const result = await options.adapter.action(authorization, { name, input });\n if (result.kind === 'scoped-refusal') {\n const room = replicas.get(result.locator)?.confirmed.record;\n if (room !== undefined) await scoped(result, room, await openLocal());\n }\n if (result.kind === 'revoked-authorization') await refuse('revoked-authorization');\n journal.record(`outcome action ${result.kind}`);\n if (result.kind === 'rejected') journal.record(`refusal rejected ${result.code}`);\n return result;\n } catch {\n journal.record('outcome action transport-uncertainty');\n return { kind: 'transport-uncertainty' };\n }\n }\n\n async function pullRefresh(authorized: Authorization, confirmed: ConfirmedLayer) {\n try {\n const result = await refreshRoom(options.adapter, authorized, confirmed);\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 try {\n const result = await bootstrapRoom(options.adapter, authorized, room, {\n collection: modelOf(room.locator),\n selection: modelOf(room.locator, 'typed-selection'),\n });\n const detail = result.kind === 'staged' ? result.confirmed.record.roomVersion : result.kind;\n journal.record(`transfer bootstrap ${room.locator} ${detail}`);\n return result;\n } catch (error) {\n journal.record(`transfer bootstrap ${room.locator} transport-uncertainty`);\n throw error;\n }\n }\n\n async function advance(\n room: DiscoveredRoom,\n local: RuntimeStore,\n authorized: Authorization,\n ): Promise<Withheld | null> {\n const held = replicas.get(room.locator);\n if (held !== undefined) {\n const refreshed = await pullRefresh(authorized, held.confirmed);\n if (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 if (closed) return unconfirmed;\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 (bootstrapped.kind !== 'staged') return bootstrapped;\n if (closed) return unconfirmed;\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<'stop' | null> {\n progress.complete = false;\n if (withheld.kind === 'scoped-refusal') {\n await scoped(withheld, room, local);\n } else if (withheld.kind === 'transport-uncertainty') {\n progress.reachable = false;\n } else if (withheld.kind === 'room-not-readable') {\n unreadable.add(room.locator);\n list(room, false);\n emitRooms();\n } else if (withheld.kind === 'refused') {\n refusedSource(room, withheld);\n } else if (withheld.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n return 'stop';\n }\n return null;\n }\n\n function refusedSource(room: DiscoveredRoom, { 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 unreadable.add(room.locator);\n list(room, false);\n emitRooms();\n journal.record(`source refused ${room.locator} ${refusal.rule} ${refusal.file}`);\n }\n\n function leaving(\n batch: ChangeBatch,\n result: Extract<MutationResult, { kind: 'conflicted' | 'rejected' | 'expired' }>,\n ): Leaving {\n if (result.kind === 'expired') {\n return { batch, outcome: { kind: 'expired' }, returned: { kind: 'expired' } };\n }\n const refusal = { code: result.code, fields: result.fields };\n if (result.kind === 'conflicted') {\n return {\n batch,\n outcome: {\n kind: 'conflicted',\n ...(result.roomVersion === undefined ? {} : { roomVersion: result.roomVersion }),\n affected: result.affected,\n ...refusal,\n },\n returned: { kind: 'conflicted', ...refusal },\n };\n }\n return {\n batch,\n outcome: { kind: 'rejected', affected: result.affected, ...refusal },\n returned: { kind: 'rejected', ...refusal },\n };\n }\n\n function acceptedOf(accepted: Extract<MutationResult, { kind: 'accepted' }>): SubmissionOutcome {\n return {\n kind: 'accepted',\n roomVersion: accepted.roomVersion,\n ...(accepted.author === undefined ? {} : { author: accepted.author }),\n ...(accepted.time === undefined ? {} : { time: accepted.time }),\n };\n }\n\n function logAccepted(\n locator: string,\n submitted: ChangeBatch,\n accepted: Extract<MutationResult, { kind: 'accepted' }>,\n ) {\n journal.record(\n `outcome ${locator} ${submitted.id} accepted ${accepted.roomVersion}` +\n (accepted.author === undefined ? '' : ` author ${accepted.author}`) +\n (accepted.time === undefined ? '' : ` time ${accepted.time}`),\n );\n }\n\n async function holdAccepted(\n room: DiscoveredRoom,\n local: RuntimeStore,\n submitted: ChangeBatch,\n accepted: Extract<MutationResult, { kind: 'accepted' }>,\n refused: Refused | null,\n ) {\n await exclusive(async () => {\n const current = replicas.get(room.locator);\n if (current === undefined || !current.queue.some((batch) => batch.id === submitted.id)) {\n return;\n }\n const outcome = acceptedOf(accepted);\n await local.write({\n next: current.confirmed.record,\n previous: current.confirmed.record,\n queue: current.queue,\n previousQueue: current.queue,\n outcomes: [{ id: submitted.id, outcome }],\n });\n outcomes.set(submitted.id, outcome);\n outcomeRooms.set(submitted.id, room.locator);\n logAccepted(room.locator, submitted, accepted);\n });\n if (refused !== null) refusedSource(room, refused);\n }\n\n async function commitAccept(\n room: DiscoveredRoom,\n local: RuntimeStore,\n submitted: ChangeBatch,\n accepted: Extract<MutationResult, { kind: 'accepted' }>,\n base: ConfirmedLayer,\n overlay: boolean,\n ): Promise<Refused | Unconfirmed | null> {\n 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 list(room, true);\n publishChangeSet(set);\n moveTo({ ...status, ...attention() });\n logAccepted(room.locator, submitted, accepted);\n return null;\n }\n\n async function committed(\n room: DiscoveredRoom,\n local: RuntimeStore,\n submitted: ChangeBatch,\n accepted: Extract<MutationResult, { kind: 'accepted' }>,\n base: ConfirmedLayer,\n overlay: boolean,\n ): Promise<boolean> {\n const failed = await exclusive(() =>\n commitAccept(room, local, submitted, accepted, base, overlay),\n );\n if (failed === null) return true;\n await holdAccepted(room, local, submitted, accepted, failed.kind === 'refused' ? failed : null);\n return false;\n }\n\n async function submitRoom(\n room: DiscoveredRoom,\n local: RuntimeStore,\n authorized: Authorization,\n progress: CycleProgress,\n ): Promise<'stop' | null> {\n while (!closed && authorization !== undefined) {\n const replica = replicas.get(room.locator);\n const head = replica?.queue[0];\n if (replica === undefined || head === undefined) return null;\n if (outcomes.get(head.id)?.kind === 'accepted') {\n progress.complete = false;\n return null;\n }\n const { submission, lost: earlier } = pendings.get(head.id) ?? {\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 null;\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 try {\n result = await options.adapter.mutate(authorized, {\n locator: room.locator,\n changeBatch: head,\n });\n } catch {\n progress.complete = false;\n progress.reachable = false;\n return null;\n }\n if (closed) return null;\n if (result.kind === 'transport-uncertainty') {\n progress.complete = false;\n progress.reachable = false;\n return null;\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 null;\n }\n if (result.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n return 'stop';\n }\n if (result.kind === 'scoped-refusal') {\n await scoped(result, room, local);\n progress.complete = false;\n return null;\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 null;\n }\n if (result.kind === 'conflicted' || result.kind === 'rejected' || result.kind === 'expired') {\n const left = leaving(head, result);\n await exclusive(async () => {\n const current = replicas.get(room.locator);\n if (current === undefined || !current.queue.some((batch) => batch.id === head.id)) {\n return;\n }\n const set = await settle(\n local,\n room.locator,\n current,\n current.confirmed,\n current.queue.filter((batch) => batch.id !== head.id),\n {\n leaving:\n result.kind === 'expired' && landed(head, current.confirmed)\n ? { ...left, returned: null }\n : left,\n },\n );\n publishChangeSet(set);\n moveTo({ ...status, ...attention() });\n });\n if (result.kind === 'expired') continue;\n const withheld = await advance(room, local, authorized);\n if (withheld !== null) return withhold(withheld, room, local, progress);\n continue;\n }\n const from = replicas.get(room.locator)?.confirmed;\n if (from === undefined) return null;\n const pulled = await pullRefresh(authorized, from);\n if (pulled.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n return 'stop';\n }\n if (pulled.kind === 'scoped-refusal') {\n await scoped(pulled, room, local);\n progress.complete = false;\n return null;\n }\n if (pulled.kind === 'still-current') {\n if (!(await committed(room, local, head, result, from, true))) {\n progress.complete = false;\n return null;\n }\n continue;\n }\n if (pulled.kind === 'advanced') {\n const overlay = pulled.confirmed.record.roomVersion === result.roomVersion;\n if (!(await committed(room, local, head, result, pulled.confirmed, overlay))) {\n progress.complete = false;\n return null;\n }\n continue;\n }\n if (pulled.kind === 'beyond-horizon') {\n const bootstrapped = await pullBootstrap(authorized, room);\n if (bootstrapped.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n return 'stop';\n }\n if (bootstrapped.kind === 'scoped-refusal') {\n await scoped(bootstrapped, room, local);\n progress.complete = false;\n return null;\n }\n if (bootstrapped.kind === 'staged') {\n const overlay = bootstrapped.confirmed.record.roomVersion === result.roomVersion;\n if (!(await committed(room, local, head, result, bootstrapped.confirmed, overlay))) {\n progress.complete = false;\n return null;\n }\n continue;\n }\n progress.complete = false;\n if (bootstrapped.kind === 'transport-uncertainty') {\n progress.reachable = false;\n } else if (bootstrapped.kind === 'room-not-readable') {\n unreadable.add(room.locator);\n list(room, false);\n emitRooms();\n } else if (bootstrapped.kind === 'refused') {\n await holdAccepted(room, local, head, result, bootstrapped);\n }\n return null;\n }\n progress.complete = false;\n if (pulled.kind === 'transport-uncertainty') {\n progress.reachable = false;\n } else if (pulled.kind === 'room-not-readable') {\n unreadable.add(room.locator);\n list(room, false);\n emitRooms();\n } else if (pulled.kind === 'refused') {\n await holdAccepted(room, local, head, result, pulled);\n }\n return null;\n }\n return null;\n }\n\n async function retainModel(\n local: RuntimeStore,\n room: RoomDeclaration,\n attached: Attached,\n next: ModelState,\n ) {\n const key = modelKey(room.locator, attached);\n if (next.status === 'unavailable') modelEpoch.set(key, (modelEpoch.get(key) ?? 0) + 1);\n const epoch = modelEpoch.get(key) ?? 0;\n const previous = modelOf(room.locator, attached);\n const heldBefore = replicas.get(room.locator)?.confirmed.record;\n if (\n JSON.stringify(previous) === JSON.stringify(next) &&\n (heldBefore === undefined ||\n (JSON.stringify(heldBefore.operations) === JSON.stringify(room.operations) &&\n JSON.stringify(heldBefore.replica) === JSON.stringify(room.replica) &&\n JSON.stringify(heldBefore.attachedModel) === JSON.stringify(room.attachedModel) &&\n JSON.stringify(heldBefore.typedSelection) ===\n JSON.stringify(room.typedSelection ?? null)))\n )\n return;\n if (next.status === 'unavailable') {\n invalidModels.add(key);\n liveModels.delete(key);\n }\n await exclusive(async () => {\n if (next.status !== 'unavailable' && epoch !== (modelEpoch.get(key) ?? 0)) return;\n const held = replicas.get(room.locator);\n if (held !== undefined) {\n const record = {\n ...held.confirmed.record,\n operations: room.operations,\n replica: room.replica,\n attachedModel: room.attachedModel,\n typedSelection: room.typedSelection ?? null,\n ...(attached === 'collection' ? { model: next } : { selectionModel: next }),\n };\n await local.write({\n next: record,\n previous: held.confirmed.record,\n queue: held.queue,\n });\n const read = readConfirmed(record, held.confirmed);\n if (read.kind === 'staged') {\n replicas.set(room.locator, replicaOf(read.confirmed, held.queue, rewriting(), held));\n }\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 }\n const epoch = modelEpoch.get(key) ?? 0;\n let answer;\n try {\n answer = await options.adapter.model(\n authorized,\n selection === null\n ? {\n locator: room.locator,\n attached: 'collection',\n collectionRoot: room.collectionRoot,\n model: declared,\n }\n : {\n locator: room.locator,\n attached: 'typed-selection',\n roots: selection.roots,\n model: declared,\n },\n );\n } catch {\n answer = { kind: 'transport-uncertainty' as const };\n }\n if (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 JSON.stringify(Object.entries(previous.snapshot.definitions).sort()) !==\n JSON.stringify(Object.entries(answer.snapshot.definitions).sort())\n ) {\n await retainModel(local, room, attached, { status: 'unavailable', reason: 'invalid' });\n return;\n }\n const verified = verify(answer.snapshot.definitions);\n if (verified.verdict === 'refuse')\n journal.record(`model invalid ${room.locator} ${attached} ${verified.rule} ${verified.file}`);\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 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 for (const room of discovered) {\n if (closed || authorization === undefined) {\n progress.complete = false;\n return;\n }\n const prior = replicas.get(room.locator)?.confirmed.record;\n if (prior !== undefined && prior.replica.selection !== room.replica.selection) {\n list(prior, false);\n emitRooms();\n journal.record(`selection changed ${room.locator}`);\n progress.complete = false;\n continue;\n }\n await acquireModel(local, room, authorization, null);\n if (discoveryPaused) return;\n if (room.typedSelection !== undefined) {\n await acquireModel(local, room, authorization, room.typedSelection);\n if (discoveryPaused) return;\n }\n if (room.replica.admission !== 'admitted') {\n progress.complete = false;\n continue;\n }\n const held = replicas.get(room.locator);\n if (\n held !== undefined &&\n held.confirmed.record.replica.selection !== room.replica.selection\n ) {\n progress.complete = false;\n continue;\n }\n const withheld = await advance(room, local, authorization);\n if (withheld !== null) {\n if ((await withhold(withheld, room, local, progress)) === 'stop') return;\n continue;\n }\n if ((await submitRoom(room, local, authorization, progress)) === 'stop') return;\n }\n }\n\n async function cycle(local: RuntimeStore, progress: CycleProgress) {\n if (closed || authorization === undefined) {\n notifyReady();\n return;\n }\n moveTo(transferring(status));\n let result;\n try {\n result = await options.adapter.discover(authorization);\n } catch {\n result = { kind: 'transport-uncertainty' as const };\n }\n if (closed) {\n notifyReady();\n return;\n }\n journal.record(`connection discover ${result.kind}`);\n if (result.kind === 'transport-uncertainty') {\n for (const room of rooms.values()) {\n await retainModel(local, room, 'collection', cached(modelOf(room.locator)));\n if (room.typedSelection !== null) {\n await retainModel(\n local,\n room,\n 'typed-selection',\n cached(modelOf(room.locator, 'typed-selection')),\n );\n }\n }\n progress.reachable = false;\n notifyReady();\n return;\n }\n if (result.kind === 'contract-unavailable') {\n journal.record(`connection contract unavailable ${result.code}`);\n await refuse('missing-required-guarantee', { code: result.code, fields: result.fields });\n notifyReady();\n return;\n }\n if (result.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n notifyReady();\n return;\n }\n if (!result.supportedVersions.includes(ROOM_CONTRACT_VERSION)) {\n await refuse('no-matching-version');\n notifyReady();\n return;\n }\n if (\n result.mdModel.identity !== MD_MODEL.identity ||\n result.mdModel.version !== MD_MODEL.version\n ) {\n await refuse('md-model-version-mismatch');\n notifyReady();\n return;\n }\n mismatchedRoots.clear();\n for (const room of result.rooms) {\n const held = replicas.get(room.locator)?.confirmed.record;\n const malformed = !validRoot(room.collectionRoot);\n if (\n room.operations === undefined ||\n !['read', 'sync', 'write', 'delete'].every(\n (operation) =>\n Array.isArray(room.operations[operation as keyof typeof room.operations]) &&\n room.operations[operation as keyof typeof room.operations].every(\n (scope) => typeof scope === 'string',\n ),\n ) ||\n room.replica === undefined ||\n typeof room.replica.selection !== 'string' ||\n room.replica.selection.length === 0 ||\n !['admitted', 'unavailable'].includes(room.replica.admission) ||\n !declaredIdentity(room.attachedModel)\n ) {\n journal.record(`invalid model or replica declaration ${room.locator}`);\n await refuse('missing-required-guarantee');\n notifyReady();\n return;\n }\n if (!declaredSelection(room)) {\n journal.record(`invalid typed selection declaration ${room.locator}`);\n await refuse('missing-required-guarantee');\n notifyReady();\n return;\n }\n if (malformed || (held !== undefined && held.collectionRoot !== room.collectionRoot)) {\n mismatchedRoots.add(room.locator);\n journal.record(`collection root ${malformed ? 'invalid' : 'changed'} ${room.locator}`);\n }\n }\n if (mismatchedRoots.size > 0) {\n await refuse('missing-required-guarantee');\n notifyReady();\n return;\n }\n const declared = new Set(result.capabilities.map((capability) => capability.name));\n for (const required of options.requiredGuarantees) {\n if (!knownCapabilities.has(required) || !declared.has(required)) {\n await refuse('missing-required-guarantee');\n notifyReady();\n return;\n }\n }\n if (refusal !== null) {\n refusal = null;\n emitRefusal();\n }\n const previousCapabilities = capabilities;\n capabilities = result.capabilities;\n notifyReady();\n if (declared.has('room-version-notifications')) observeRoomVersions();\n if (declared.has('provider-actions')) observeConversations();\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 || 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 || discoveryPaused) return;\n notices.set(notification.locator, notification.roomVersion);\n chain = chain.then(runNotified, runNotified);\n });\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) return;\n currencyQueued = true;\n chain = chain.then(runCurrency, runCurrency);\n }\n\n async function runCurrency() {\n currencyQueued = false;\n if (closed || 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 || 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 (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 closed = true;\n withdrawNotifications?.();\n withdrawNotifications = undefined;\n withdrawConversations?.();\n withdrawConversations = undefined;\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 readSide.close();\n queueSubscriptions.clear();\n roomDraftListeners.clear();\n presentationListeners.clear();\n }\n\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 === '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 roomDraft: {\n list() {\n return exclusive(async () => {\n await openLocal();\n return snapshotRoomDrafts();\n }).then((listed) => {\n publishRoomDrafts(true);\n return listed;\n });\n },\n read(room: string, path: string) {\n const record = roomDrafts.get(room)?.get(path);\n return record === undefined ? null : roomDraftOf(record);\n },\n write(room: string, path: string, revision: string | null, input: unknown) {\n return exclusive(async (): Promise<RoomDraftWrite> => {\n const parts = readParts(input);\n if (path === '' || normalize(path) !== path) throw new Error('room-draft-malformed');\n const local = await openLocal();\n const current = roomDrafts.get(room)?.get(path);\n if ((current?.revision ?? null) !== revision) {\n return {\n outcome: 'stale',\n current: current === undefined ? null : roomDraftOf(current),\n };\n }\n const record: RoomDraftRecord = {\n locator: room,\n path,\n revision: roomDraftRevision(),\n parts: held(current?.parts, parts),\n returned: current?.returned ?? null,\n };\n await local.keepRoomDraft(record);\n rememberRoomDraft(record);\n publishChangeSet(changeSet(room, null, null, { drafts: [path] }));\n return { outcome: 'written', roomDraft: roomDraftOf(record) };\n });\n },\n discard(room: string, path: string, revision: string) {\n return exclusive(async (): Promise<RoomDraftWrite> => {\n const local = await openLocal();\n const current = roomDrafts.get(room)?.get(path);\n if (current === undefined || current.revision !== revision) {\n return {\n outcome: 'stale',\n current: current === undefined ? null : roomDraftOf(current),\n };\n }\n await local.discardRoomDraft(room, path);\n forgetRoomDraft(room, path);\n publishChangeSet(changeSet(room, null, null, { drafts: [path] }));\n moveTo({ ...status, ...attention() });\n return { outcome: 'written', roomDraft: null };\n });\n },\n },\n conversation: conversations.surface,\n chatDraft: conversations.chatDraft,\n presentation: {\n read(app: string) {\n return exclusive(async () => {\n await openLocal();\n return presentationOf(app);\n });\n },\n write(app: string, value: unknown) {\n return exclusive(async () => {\n const local = await openLocal();\n const stored = structuredClone(value);\n await local.present({ app, value: stored });\n presentations.set(app, stored);\n publishChangeSet(changeSet('', null, null, { presentation: app }));\n });\n },\n },\n save(\n room: string,\n named: readonly SavedRoomDraft[],\n writtenBy?: WrittenBy,\n ): Promise<SaveResult> {\n return exclusive(() => saveRoomDrafts(room, named, writtenBy));\n },\n outcome(identifier: string): SubmissionOutcome | null {\n return outcomes.get(identifier) ?? null;\n },\n history(locator: string, path: string, query?: HistoryQuery) {\n return readHistory(locator, path, query);\n },\n call(name: string, input: unknown) {\n return invokeAction(name, input);\n },\n log() {\n return journal.export();\n },\n storageLoss() {\n return storageLoss;\n },\n persistence() {\n return options.shell.persistentStorage;\n },\n observe: ((topic: RuntimeTopic, ...input: unknown[]) =>\n opened(\n (deliver) =>\n watch(topic, input, (message) => {\n deliver(structuredClone(message));\n }),\n topic === 'query',\n )) as MdRuntime['observe'],\n async reauthorize() {\n if (refusal === null || !refusal.reauthorizationOffered) return;\n journal.record('connection reauthorize');\n await mutations;\n authorization = undefined;\n discoveryPaused = false;\n await enqueue();\n },\n };\n return { md, 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","validRoot","createLog","refreshRoom","buildBatch","applyReturned","compositionOf","landed","readConfirmed","replicaOf","withdrawals","changedParts","changesOf","held","readParts","returnedInto","underneath","settled","same","saving","STARTING","transferring","detectStorageLoss","nextGeneration","roomDraftRevision","beneath","normalize","openRuntimeStore","unconfirmed","DEFAULT_DISCOVERY_INTERVAL_MS","knownCapabilities","Set","within","root","path","declaredIdentity","model","undefined","identity","length","version","declaredSelection","room","selection","typedSelection","Array","isArray","roots","attachedModel","every","index","collectionRoot","other","at","createMdRuntime","options","composeRuntime","md","period","discoveryIntervalMs","authorization","opening","store","replicas","Map","pendings","roomDrafts","presentations","outcomes","outcomeRooms","limits","slots","capabilities","rewriting","some","capability","name","rooms","unreadable","models","liveModels","invalidModels","modelEpoch","discovered","roomsListed","scopedRefusals","sourceRefusals","modelKey","locator","attached","modelOf","get","savedModel","has","status","reason","compositionFor","record","selectionModel","mismatchedRoots","refusal","storageLoss","shown","discoveryPaused","timer","closed","withdrawNotifications","handed","notices","chain","Promise","resolve","mutations","inflight","queued","roomListeners","refusalListeners","storageLossListeners","statusListeners","queueSubscriptions","roomDraftListeners","presentationListeners","readSide","withdrawConversations","currencyQueued","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","types","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","Error","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","existing","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","retained","saveRoomDrafts","writtenBy","rule","file","draft","built","baseRoomVersion","composition","changes","bases","batches","consumed","consumedRoomDrafts","identifier","mark","submit","readHistory","ensureAuthorization","transfer","pageToken","join","result","history","scoped","conversationCards","declaredAction","action","actions","code","pullRefresh","authorized","detail","pullBootstrap","collection","advance","refreshed","bootstrapped","withhold","withheld","progress","complete","reachable","refusedSource","fields","location","referrers","affected","acceptedOf","author","time","logAccepted","submitted","holdAccepted","refused","commitAccept","base","overlay","remaining","retainedBase","applied","revisions","removals","committed","failed","submitRoom","head","earlier","Date","now","parse","mutate","changeBatch","from","pulled","retainModel","epoch","heldBefore","acquireModel","answer","definitions","verified","verdict","verifiedWith","scopedAway","scope","sync","synchronize","cycle","discover","supportedVersions","mdModel","malformed","operation","required","requiredGuarantees","previousCapabilities","observeRoomVersions","observeConversations","discoveredSlots","declare","handSelected","reconcile","providerUnreachable","reconnected","catchUp","authorize","connect","completedAt","toISOString","run","roomVersions","observe","notification","runNotified","event","receive","runCurrency","resting","announced","close","signal","addEventListener","once","aborted","watch","topic","deliver","plan","loaded","search","selected","syncStatus","roomDraft","keepRoomDraft","discard","discardRoomDraft","surface","chatDraft","stored","present","save","log","export","persistence","persistentStorage","reauthorize"],"mappings":"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"}
1
+ {"version":3,"sources":["/workspace/packages/mdruntime/src/connection.ts"],"sourcesContent":["import { verify } from '@agentshouse/mdmodel';\nimport {\n cached,\n modelTypes,\n NO_MODEL,\n sameModel,\n type ModelState,\n type TypesResult,\n} from './model.js';\nimport { opened, type Observation } from './observation.js';\nimport {\n filterOf,\n identityOf,\n planOf,\n type DocumentQuery,\n type DocumentResult,\n type GroupQuery,\n type GroupResult,\n type HeldRooms,\n} from './query.js';\nimport { createReadSide } from './read-side.js';\nimport {\n createSearchIndex,\n searchPlanOf,\n type SearchRequest,\n type SearchResult,\n} from './search.js';\nimport {\n ROOM_CONTRACT_VERSION,\n VERSION_1_CAPABILITIES,\n type ActionResult,\n type Adapter,\n type AdapterFailure,\n type Authorization,\n type Capability,\n type DiscoveredRoom,\n type Discovery,\n type HistoryResult,\n type MutationResult,\n type ProviderLimit,\n type ConversationCards,\n type ConversationAction,\n type ProviderRefusal,\n type 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, validRoot, type Composition } from './collection.js';\nimport { createLog } from './log.js';\nimport type { CallResult, QueueEntry, Submission, SubmissionOutcome } from './outcome.js';\nimport { refreshRoom } from './refresh.js';\nimport { buildBatch, type Rewriting, type SaveRefusal } from './save.js';\nimport {\n applyReturned,\n compositionOf,\n landed,\n readConfirmed,\n replicaOf,\n withdrawals,\n type ConfirmedLayer,\n type Replica,\n} from './replica.js';\nimport {\n changedParts,\n changesOf,\n held,\n readParts,\n returnedInto,\n underneath,\n type ReturnReason,\n type RoomDraft,\n type RoomDraftRecord,\n type RoomDraftWrite,\n type SavedDraft,\n} from './room-draft.js';\nimport {\n settled,\n same,\n saving,\n STARTING,\n transferring,\n type AttentionEntry,\n type CycleProgress,\n type SyncStatus,\n} from './status.js';\nimport { detectStorageLoss, nextGeneration, type RuntimeShell } from './durability.js';\nimport { roomDraftRevision } from './identity.js';\nimport { beneath, normalize } from './paths.js';\nimport {\n openRuntimeStore,\n type PendingState,\n type ReplicaRecord,\n type RuntimeStore,\n} from './store.js';\nimport { unconfirmed, type Refused, type Unconfirmed } from './transfer.js';\n\nconst DEFAULT_DISCOVERY_INTERVAL_MS = 60_000;\n\nconst knownCapabilities = new Set<string>(VERSION_1_CAPABILITIES);\n\ntype Attached = 'collection' | 'typed-selection';\n\ntype RoomDeclaration = Omit<DiscoveredRoom, 'roomVersion' | 'typedSelection'> & {\n typedSelection?: TypedSelection | null;\n};\n\nfunction within(root: string, path: string): boolean {\n return root === '' || beneath(root, path);\n}\n\nfunction declaredIdentity(model: import('./model.js').ModelIdentity | null | undefined): boolean {\n if (model === undefined) return false;\n if (model === null) return true;\n return (\n typeof model.identity === 'string' &&\n model.identity.length > 0 &&\n typeof model.version === 'string' &&\n model.version.length > 0\n );\n}\n\nfunction declaredSelection(room: DiscoveredRoom): boolean {\n const selection = room.typedSelection;\n if (selection === undefined) return true;\n if (!Array.isArray(selection.roots) || selection.roots.length === 0) return false;\n if (!declaredIdentity(selection.attachedModel)) return false;\n return selection.roots.every(\n (root, index) =>\n validRoot(root) &&\n root !== '' &&\n !within(room.collectionRoot, root) &&\n selection.roots.every((other, at) => at === index || !within(other, root)),\n );\n}\n\nexport type AppTypedSelection = {\n roots: readonly string[];\n attachedModel: import('./model.js').ModelIdentity | null;\n model: TypesResult;\n};\n\nexport type AppRoom = {\n collectionRoot: string;\n name: string;\n locator: string;\n operations: import('./adapter.js').OperationScopes;\n replica: import('./adapter.js').ReplicaAdmission;\n attachedModel: import('./model.js').ModelIdentity | null;\n model: TypesResult;\n typedSelection: AppTypedSelection | null;\n providerOwnedPaths: readonly string[];\n roomVersion: string | null;\n synchronizationAvailable: boolean;\n refusal: ProviderRefusal | null;\n};\n\nexport type AppSlotEntry = {\n room: AppRoom;\n segment: string | null;\n};\n\nexport type AppSlot = {\n slot: string;\n entries: readonly AppSlotEntry[];\n};\n\nexport type RoomTypes = {\n collection: TypesResult;\n typedSelection: TypesResult | null;\n};\n\nexport type ConnectionRefusalReason =\n | 'no-matching-version'\n | 'missing-required-guarantee'\n | 'md-model-version-mismatch'\n | 'revoked-authorization'\n | 'client-host-protocol-mismatch';\n\nexport type ConnectionRefusal = {\n reason: ConnectionRefusalReason;\n reauthorizationOffered: boolean;\n refusal: ProviderRefusal | null;\n};\n\nexport type MdRuntimeOptions = {\n adapter: Adapter;\n shell: RuntimeShell;\n requiredGuarantees: readonly string[];\n authorization?: Authorization;\n discoveryIntervalMs?: number;\n signal?: AbortSignal;\n};\n\nexport type SaveResult =\n | { outcome: 'saved'; identifier: string }\n | ({ outcome: 'refused' } & SaveRefusal);\n\nexport type SavedRoomDraft = { readonly path: string; readonly revision: string };\n\nexport type RoomDraftSurface = {\n list(): Promise<readonly RoomDraft[]>;\n read(room: string, path: string): RoomDraft | null;\n write(\n room: string,\n path: string,\n revision: string | null,\n parts: unknown,\n ): Promise<RoomDraftWrite>;\n discard(room: string, path: string, revision: string): Promise<RoomDraftWrite>;\n};\n\nexport type PresentationSurface = {\n read(app: string): Promise<unknown>;\n write(app: string, value: unknown): Promise<void>;\n};\n\nexport type HistoryQuery = {\n revision?: string;\n pageToken?: string;\n};\n\nexport type MdRuntime = {\n loaded(): Promise<void>;\n rooms(): readonly AppRoom[];\n slots(): readonly AppSlot[];\n query: {\n (query: DocumentQuery): Promise<DocumentResult>;\n (query: GroupQuery): Promise<GroupResult>;\n };\n search(request: SearchRequest): Promise<SearchResult>;\n types(locator: string): RoomTypes;\n syncStatus(): SyncStatus;\n roomDraft: RoomDraftSurface;\n conversation: ConversationSurface;\n chatDraft: ChatDraftSurface;\n presentation: PresentationSurface;\n save(\n room: string,\n roomDrafts: readonly SavedRoomDraft[],\n writtenBy?: WrittenBy,\n ): Promise<SaveResult>;\n outcome(identifier: string): SubmissionOutcome | null;\n history(locator: string, path: string, query?: HistoryQuery): Promise<HistoryResult>;\n call(name: string, input: unknown): Promise<CallResult>;\n log(): string;\n storageLoss(): string | null;\n persistence(): boolean;\n observe: {\n (topic: 'rooms'): Promise<Observation<readonly AppRoom[]>>;\n (topic: 'connection-refusal'): Promise<Observation<ConnectionRefusal | null>>;\n (topic: 'storage-loss'): Promise<Observation<string | null>>;\n (topic: 'sync-status'): Promise<Observation<SyncStatus>>;\n (topic: '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 | 'query'\n | 'queue'\n | 'room-drafts'\n | 'presentation'\n | 'conversation';\n\nexport type ComposedRuntime = {\n md: MdRuntime;\n watch(\n topic: RuntimeTopic,\n input: readonly unknown[],\n deliver: (message: unknown) => void,\n ): () => void;\n};\n\ntype QueueSubscription = {\n locator: string;\n notify: (entries: readonly QueueEntry[]) => void;\n};\n\ntype RoomDraftSubscription = {\n notify: (roomDrafts: readonly RoomDraft[]) => void;\n ready: boolean;\n};\n\ntype Leaving = { batch: ChangeBatch; outcome: SubmissionOutcome; returned: ReturnReason | null };\n\ntype PresentationSubscription = {\n app: string;\n notify: (value: unknown) => void;\n ready: boolean;\n};\n\ntype Withheld = AdapterFailure | Unconfirmed | Refused;\n\nexport function createMdRuntime(options: MdRuntimeOptions): MdRuntime {\n return composeRuntime(options).md;\n}\n\nexport function composeRuntime(options: MdRuntimeOptions): ComposedRuntime {\n const period = options.discoveryIntervalMs ?? DEFAULT_DISCOVERY_INTERVAL_MS;\n let authorization: Authorization | undefined = options.authorization;\n let opening: Promise<RuntimeStore> | undefined;\n let store: RuntimeStore | undefined;\n const replicas = new Map<string, Replica>();\n const pendings = new Map<string, PendingState>();\n const roomDrafts = new Map<string, Map<string, RoomDraftRecord>>();\n const presentations = new Map<string, unknown>();\n const outcomes = new Map<string, SubmissionOutcome>();\n const outcomeRooms = new Map<string, string>();\n let limits: readonly ProviderLimit[] = [];\n let slots: NonNullable<Discovery['slots']> = [];\n let capabilities: readonly Capability[] = [];\n function rewriting(): Rewriting {\n return capabilities.some((capability) => capability.name === 'move-reference-rewrites')\n ? 'provider'\n : 'runtime';\n }\n const rooms = new Map<string, AppRoom>();\n const unreadable = new Set<string>();\n const models = new Map<string, ModelState>();\n const liveModels = new Map<string, string>();\n const invalidModels = new Set<string>();\n const modelEpoch = new Map<string, number>();\n const discovered = new Map<string, DiscoveredRoom>();\n let roomsListed = false;\n const scopedRefusals = new Map<string, ProviderRefusal>();\n const sourceRefusals = new Map<string, ProviderRefusal>();\n const declarationRefusals = new Set<string>();\n function modelKey(locator: string, attached: Attached): string {\n return `${attached} ${locator}`;\n }\n function modelOf(locator: string, attached: Attached = 'collection'): ModelState {\n return models.get(modelKey(locator, attached)) ?? NO_MODEL;\n }\n function savedModel(locator: string, attached: Attached): ModelState {\n return invalidModels.has(modelKey(locator, attached))\n ? { status: 'unavailable', reason: 'revoked' }\n : modelOf(locator, attached);\n }\n function compositionFor(record: ReplicaRecord): Composition {\n return compositionOf({\n ...record,\n model: savedModel(record.locator, 'collection'),\n selectionModel: savedModel(record.locator, 'typed-selection'),\n });\n }\n\n const mismatchedRoots = new Set<string>();\n let refusal: ConnectionRefusal | null = null;\n let storageLoss: string | null = null;\n let status: SyncStatus = STARTING;\n let shown: SyncStatus = STARTING;\n let discoveryPaused = false;\n let timer: ReturnType<typeof setInterval> | undefined;\n let closed = false;\n let 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 const conversations: ConversationStore = createConversationStore({\n cards: declaredCards,\n documents: (locator: string) =>\n readSide.query(\n planOf({ rooms: [locator], select: 'all' }, roomFacts()),\n ) as Promise<DocumentResult>,\n call: (name: ConversationAction, input: unknown) => invokeAction(name, input),\n durably,\n stream: () => options.adapter.conversations,\n publish: publishChangeSet,\n closed: () => closed,\n });\n const searchIndex = createSearchIndex({\n documents: () => readSide.documents(),\n document: (room, path) => readSide.document(room, path),\n messages: () => conversations.messages(),\n message: (conversation, identity) => conversations.message(conversation, identity),\n });\n const journal = createLog();\n let notifyReady = () => {};\n const ready = new Promise<void>((resolve) => {\n notifyReady = resolve;\n });\n function rememberRoomDraft(record: RoomDraftRecord) {\n const room = roomDrafts.get(record.locator) ?? new Map<string, RoomDraftRecord>();\n room.set(record.path, record);\n roomDrafts.set(record.locator, room);\n }\n\n function forgetRoomDraft(locator: string, path: string) {\n const room = roomDrafts.get(locator);\n if (room === undefined) return;\n room.delete(path);\n if (room.size === 0) roomDrafts.delete(locator);\n }\n\n function roomDraftOf(record: RoomDraftRecord): RoomDraft {\n return structuredClone({\n room: record.locator,\n path: record.path,\n revision: record.revision,\n parts: record.parts,\n changedUnderneath: underneath(\n record.parts,\n record.path,\n replicas.get(record.locator)?.visible,\n ),\n returned: record.returned,\n });\n }\n\n function snapshotRoomDrafts(): readonly RoomDraft[] {\n const records = [...roomDrafts.values()].flatMap((room) => [...room.values()]);\n records.sort((left, right) => {\n if (left.locator !== right.locator) return left.locator < right.locator ? -1 : 1;\n if (left.path !== right.path) return left.path < right.path ? -1 : 1;\n return 0;\n });\n return records.map(roomDraftOf);\n }\n\n function publishRoomDrafts(waitingOnly: boolean) {\n if (closed) return;\n const value = snapshotRoomDrafts();\n for (const listener of roomDraftListeners) {\n if (waitingOnly && listener.ready) continue;\n listener.ready = true;\n listener.notify(value);\n }\n }\n\n function presentationOf(app: string): unknown {\n const value = presentations.get(app);\n return value === undefined ? null : structuredClone(value);\n }\n\n function emitPresentation(app: string) {\n if (closed) return;\n for (const listener of presentationListeners) {\n if (listener.app === app && listener.ready) listener.notify(presentationOf(app));\n }\n }\n\n function pending() {\n return [...replicas.values()].some((replica) => replica.queue.length > 0);\n }\n\n function attention(): Pick<SyncStatus, 'attentionRequired' | 'reset'> {\n const attentionRequired: AttentionEntry[] = [];\n for (const record of [...roomDrafts.values()].flatMap((room) => [...room.values()])) {\n if (record.returned === null) continue;\n attentionRequired.push({\n room: record.locator,\n path: record.path,\n returned: structuredClone(record.returned),\n });\n }\n attentionRequired.sort((left, right) => {\n if (left.room !== right.room) return left.room < right.room ? -1 : 1;\n if (left.path !== right.path) return left.path < right.path ? -1 : 1;\n return 0;\n });\n let reset: string | null = null;\n for (const { submission } of pendings.values()) {\n if (submission.state !== 'reset') continue;\n if (reset === null || submission.reset < reset) reset = submission.reset;\n }\n return { attentionRequired, reset };\n }\n\n function listed(): readonly AppRoom[] {\n return structuredClone([...rooms.values()]);\n }\n\n function slotted(): readonly AppSlot[] {\n return structuredClone(\n slots.map(({ slot, entries }) => ({\n slot,\n entries: entries.flatMap(({ locator, segment }) => {\n const room = rooms.get(locator);\n return room === undefined ? [] : [{ room, segment }];\n }),\n })),\n );\n }\n\n function roomFacts(): HeldRooms {\n const held = [...rooms.values()].map((room) => {\n const attached = [\n modelOf(room.locator),\n ...(room.typedSelection === null ? [] : [modelOf(room.locator, 'typed-selection')]),\n ];\n return {\n locator: room.locator,\n available: attached.every((model) => model.status !== 'unavailable'),\n types: attached.flatMap((model) =>\n model.status === 'unavailable' ? [] : Object.values(model.types),\n ),\n };\n });\n return { listed: roomsListed, rooms: held };\n }\n\n function emitRooms() {\n const value = listed();\n for (const listener of roomListeners) listener(value);\n }\n\n function emitRefusal() {\n for (const listener of refusalListeners) listener(refusal);\n }\n\n function emitStorageLoss() {\n for (const listener of storageLossListeners) listener(storageLoss);\n }\n\n function moveTo(next: SyncStatus) {\n if (closed) return;\n status = next;\n show();\n }\n\n function show() {\n if (closed) return;\n const next: SyncStatus =\n status.state === 'synced' && !conversations.current()\n ? { ...status, state: 'syncing' }\n : status;\n if (same(shown, next)) return;\n shown = next;\n for (const listener of statusListeners) listener(shown);\n }\n\n function submissionOf(batch: ChangeBatch): Submission {\n return pendings.get(batch.id)?.submission ?? { state: 'waiting' };\n }\n\n function entriesOf(locator: string): readonly QueueEntry[] {\n const replica = replicas.get(locator);\n if (replica === undefined) return [];\n return replica.queue.map((batch) => Object.freeze({ batch, ...submissionOf(batch) }));\n }\n\n function emitQueue(locator: string) {\n const entries = entriesOf(locator);\n for (const subscription of queueSubscriptions) {\n if (subscription.locator === locator) subscription.notify(entries);\n }\n }\n\n function applyChangeSet(set: ChangeSet) {\n readSide.apply(set);\n searchIndex.changed(set);\n }\n\n function publishChangeSet(set: ChangeSet) {\n applyChangeSet(set);\n if (set.rooms.length > 0) emitRooms();\n for (const locator of set.queues) emitQueue(locator);\n if (\n set.drafts.length > 0 ||\n set.documents.some((change) => roomDrafts.get(change.locator)?.has(change.path) === true)\n ) {\n publishRoomDrafts(false);\n }\n for (const app of set.presentations) emitPresentation(app);\n conversations.changed(set);\n const cards = declaredCards();\n if (cards !== undefined && set.documents.some((change) => change.locator === cards.locator)) {\n scheduleCurrency();\n }\n }\n\n function stopTimer() {\n if (timer === undefined) return;\n clearInterval(timer);\n timer = undefined;\n }\n\n function startTimer() {\n if (timer !== undefined) return;\n timer = setInterval(() => {\n void enqueue();\n }, period);\n }\n\n async function refuse(reason: ConnectionRefusalReason, provider: ProviderRefusal | null = null) {\n stopTimer();\n discoveryPaused = true;\n try {\n if (reason === 'revoked-authorization') {\n await exclusive(async () => {\n const revoked: ModelState = { status: 'unavailable', reason: 'revoked' };\n try {\n const local = await openLocal();\n await local.revokeModels(\n [...replicas.values()].map((replica) => ({\n record: replica.confirmed.record,\n queue: replica.queue,\n })),\n );\n } catch {\n journal.record('model revocation persistence failed');\n }\n const keys = new Set(models.keys());\n for (const locator of rooms.keys()) {\n keys.add(modelKey(locator, 'collection'));\n keys.add(modelKey(locator, 'typed-selection'));\n }\n for (const key of keys) {\n invalidModels.add(key);\n modelEpoch.set(key, (modelEpoch.get(key) ?? 0) + 1);\n models.set(key, revoked);\n liveModels.delete(key);\n }\n const changed: ChangeSet[] = [];\n for (const [locator, room] of rooms) {\n const before = replicas.get(locator) ?? null;\n if (before !== null) {\n const record = {\n ...before.confirmed.record,\n model: revoked,\n selectionModel: revoked,\n };\n const read = readConfirmed(record, before.confirmed);\n replicas.set(\n locator,\n read.kind === 'staged'\n ? replicaOf(read.confirmed, before.queue, rewriting(), before)\n : { ...before, confirmed: { ...before.confirmed, record } },\n );\n }\n rooms.set(locator, {\n ...room,\n model: modelTypes(revoked),\n typedSelection:\n room.typedSelection === null\n ? null\n : { ...room.typedSelection, model: modelTypes(revoked) },\n });\n changed.push(changeSet(locator, before, replicas.get(locator) ?? null, { room: true }));\n }\n publishChangeSet(mergeChangeSets(changed));\n });\n }\n } finally {\n refusal = {\n reason,\n reauthorizationOffered: reason === 'revoked-authorization',\n refusal: provider,\n };\n journal.record(`connection refused ${reason}`);\n emitRefusal();\n }\n }\n\n function list(room: RoomDeclaration, synchronizationAvailable: boolean) {\n const selection = room.typedSelection ?? null;\n rooms.set(room.locator, {\n name: room.name,\n collectionRoot: room.collectionRoot,\n locator: room.locator,\n operations: room.operations,\n replica: room.replica,\n attachedModel: room.attachedModel,\n model: modelTypes(modelOf(room.locator)),\n typedSelection:\n selection === null\n ? null\n : {\n roots: selection.roots,\n attachedModel: selection.attachedModel,\n model: modelTypes(modelOf(room.locator, 'typed-selection')),\n },\n providerOwnedPaths: room.providerOwnedPaths,\n roomVersion: replicas.get(room.locator)?.confirmed.record.roomVersion ?? null,\n synchronizationAvailable,\n refusal: scopedRefusals.get(room.locator) ?? sourceRefusals.get(room.locator) ?? null,\n });\n }\n\n async function applyDiscovery(listed: readonly DiscoveredRoom[], local: RuntimeStore) {\n const listedLocators = new Set(listed.map((room) => room.locator));\n for (const locator of listedLocators) scopedRefusals.delete(locator);\n discovered.clear();\n for (const room of listed) discovered.set(room.locator, room);\n await dropUnlisted(listedLocators, local);\n for (const room of listed) {\n const held = replicas.get(room.locator)?.confirmed.record;\n if (held !== undefined && held.replica.selection !== room.replica.selection) {\n list(held, false);\n continue;\n }\n list(room, room.replica.admission === 'admitted' && !unreadable.has(room.locator));\n }\n roomsListed = true;\n emitRooms();\n }\n\n function unlistedHeld(listed: ReadonlySet<string>): string[] {\n return [...new Set([...rooms.keys(), ...roomDrafts.keys()])].filter(\n (locator) => !listed.has(locator),\n );\n }\n\n async function dropUnlisted(listed: ReadonlySet<string>, local: RuntimeStore) {\n if (unlistedHeld(listed).length === 0) return;\n await exclusive(async () => {\n const unlisted = unlistedHeld(listed);\n await local.dropRooms(unlisted);\n for (const [batch, locator] of outcomeRooms) {\n if (listed.has(locator)) continue;\n outcomeRooms.delete(batch);\n outcomes.delete(batch);\n }\n const removed = unlisted.map((locator) =>\n changeSet(locator, replicas.get(locator) ?? null, null, {\n room: true,\n queue: true,\n drafts: [...(roomDrafts.get(locator)?.keys() ?? [])],\n }),\n );\n for (const locator of unlisted) {\n for (const batch of replicas.get(locator)?.queue ?? []) pendings.delete(batch.id);\n replicas.delete(locator);\n rooms.delete(locator);\n roomDrafts.delete(locator);\n unreadable.delete(locator);\n scopedRefusals.delete(locator);\n sourceRefusals.delete(locator);\n declarationRefusals.delete(locator);\n for (const attached of ['collection', 'typed-selection'] as const) {\n const key = modelKey(locator, attached);\n models.delete(key);\n liveModels.delete(key);\n invalidModels.delete(key);\n modelEpoch.delete(key);\n }\n journal.record(`room unlisted ${locator}`);\n }\n publishChangeSet(mergeChangeSets(removed));\n moveTo({ ...status, ...attention() });\n });\n }\n\n function restored(key: string, persisted: ModelState): ModelState {\n const prior = models.get(key);\n if (\n prior !== undefined &&\n prior.status !== 'unavailable' &&\n (persisted.status === 'unavailable' || !sameModel(prior.snapshot, persisted.snapshot))\n ) {\n modelEpoch.set(key, (modelEpoch.get(key) ?? 0) + 1);\n invalidModels.add(key);\n }\n const model =\n persisted.status === 'unavailable' ||\n liveModels.get(key) === JSON.stringify(persisted.snapshot)\n ? persisted\n : cached(persisted);\n models.set(key, model);\n if (model.status === 'unavailable') {\n liveModels.delete(key);\n invalidModels.delete(key);\n }\n return model;\n }\n\n async function hydrate(opened: RuntimeStore): Promise<{\n lastCompleted: string | null;\n locators: Set<string>;\n read: ChangeSet;\n }> {\n const [\n records,\n queues,\n recordedOutcomes,\n kept,\n presented,\n held,\n chatDrafts,\n lastCompleted,\n declared,\n named,\n listedSlots,\n ] = await Promise.all([\n opened.all(),\n opened.queues(),\n opened.outcomes(),\n opened.roomDrafts(),\n opened.presentation(),\n opened.conversations(),\n opened.chatDrafts(),\n opened.lastCompleted(),\n opened.providerLimits(),\n opened.capabilities(),\n opened.slots(),\n ]);\n limits = declared;\n capabilities = named;\n slots = listedSlots;\n roomDrafts.clear();\n for (const record of kept) rememberRoomDraft(record);\n presentations.clear();\n for (const record of presented) presentations.set(record.app, record.value);\n conversations.hydrate(held, chatDrafts);\n const queuedBatches = new Map(\n queues.map((queue) => [queue.locator, queue.pending.map(({ batch }) => batch)]),\n );\n pendings.clear();\n for (const queue of queues) {\n for (const { batch, state } of queue.pending) pendings.set(batch.id, state);\n }\n outcomes.clear();\n outcomeRooms.clear();\n for (const record of recordedOutcomes) {\n outcomes.set(record.id, record.outcome);\n outcomeRooms.set(record.id, record.locator);\n }\n const previousReplicas = new Map(replicas);\n replicas.clear();\n for (const record of records) {\n const model = restored(modelKey(record.locator, 'collection'), record.model);\n const selectionModel = restored(\n modelKey(record.locator, 'typed-selection'),\n record.selectionModel,\n );\n const prior = previousReplicas.get(record.locator);\n const read = readConfirmed({ ...record, model, selectionModel }, prior?.confirmed);\n if (read.kind !== 'staged') continue;\n replicas.set(\n record.locator,\n replicaOf(read.confirmed, queuedBatches.get(record.locator) ?? [], rewriting(), prior),\n );\n const existing = rooms.get(record.locator);\n if (existing === undefined) list(record, false);\n else {\n rooms.set(record.locator, {\n ...existing,\n roomVersion: record.roomVersion,\n operations: record.operations,\n replica: record.replica,\n attachedModel: record.attachedModel,\n model: modelTypes(model),\n typedSelection:\n record.typedSelection === null\n ? null\n : {\n roots: record.typedSelection.roots,\n attachedModel: record.typedSelection.attachedModel,\n model: modelTypes(selectionModel),\n },\n });\n }\n }\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 const prior = replicas.get(room.locator);\n const retained = readConfirmed(\n {\n ...confirmed.record,\n model: modelOf(room.locator),\n selectionModel: modelOf(room.locator, 'typed-selection'),\n },\n prior?.confirmed,\n );\n if (retained.kind !== 'staged') throw new Error(`Cannot retype staged Room ${room.locator}`);\n const queue = prior?.queue ?? [];\n const accepted = queue.filter((batch) => outcomes.get(batch.id)?.kind === 'accepted');\n const set = await settle(\n local,\n room.locator,\n prior,\n retained.confirmed,\n queue.filter((batch) => !accepted.includes(batch)),\n { room: true },\n );\n for (const batch of accepted) pendings.delete(batch.id);\n unreadable.delete(room.locator);\n sourceRefusals.delete(room.locator);\n declarationRefusals.delete(room.locator);\n list(room, true);\n publishChangeSet(set);\n moveTo({ ...status, ...attention() });\n });\n }\n\n async function saveRoomDrafts(\n locator: string,\n named: readonly SavedRoomDraft[],\n writtenBy: WrittenBy | undefined,\n ): Promise<SaveResult> {\n const local = await openLocal();\n const replica = replicas.get(locator);\n const room = rooms.get(locator);\n if (replica === undefined || room === undefined) {\n throw new Error(`No Local Replica for ${locator}`);\n }\n if (mismatchedRoots.has(locator))\n return { outcome: 'refused', rule: 'collection-root-mismatch' };\n const saved: SavedDraft[] = [];\n for (const { path, revision } of named) {\n const record = roomDrafts.get(locator)?.get(path);\n if (record === undefined || record.revision !== revision) {\n return { outcome: 'refused', rule: 'stale', file: path };\n }\n if (!saved.some((draft) => draft.path === path)) saved.push({ path, parts: record.parts });\n }\n const changed = saved.flatMap(({ path, parts }) =>\n changedParts(path, underneath(parts, path, replica.visible)),\n );\n if (changed.length > 0)\n return { outcome: 'refused', rule: 'changed-underneath', parts: changed };\n const parts = saved.map(({ path, parts }) => changesOf(path, parts));\n const built = buildBatch({\n baseRoomVersion: replica.confirmed.record.roomVersion,\n composition: compositionFor(replica.confirmed.record),\n operations: room.operations,\n providerOwnedPaths: room.providerOwnedPaths,\n providerLimits: limits,\n rewriting: rewriting(),\n visible: replica.visible,\n changes: parts.flatMap(({ changes }) => changes),\n bases: parts.flatMap(({ bases }) => bases),\n writtenBy,\n });\n if (built.kind === 'refused') return { outcome: 'refused', ...built.refusal };\n const batches = [...replica.queue, built.batch];\n const consumed = saved.map(({ path }) => path);\n try {\n await local.write({\n next: replica.confirmed.record,\n previous: replica.confirmed.record,\n queue: batches,\n previousQueue: replica.queue,\n saved,\n consumedRoomDrafts: consumed,\n });\n } catch {\n return { outcome: 'refused', rule: 'durable-write' };\n }\n pendings.set(built.batch.id, { drafts: saved, submission: { state: 'waiting' }, lost: false });\n for (const path of consumed) forgetRoomDraft(locator, path);\n replicas.set(locator, replicaOf(replica.confirmed, batches, rewriting(), replica));\n publishChangeSet(\n changeSet(locator, replica, replicas.get(locator) ?? null, {\n queue: true,\n drafts: consumed,\n }),\n );\n moveTo({ ...saving(status), ...attention() });\n void enqueue();\n return { outcome: 'saved', identifier: built.batch.id };\n }\n\n async function mark(\n local: RuntimeStore,\n locator: string,\n identifier: string,\n submission: Submission,\n lost: boolean,\n ) {\n const state = pendings.get(identifier);\n if (\n 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 readHistory(\n locator: string,\n path: string,\n query: HistoryQuery = {},\n ): Promise<HistoryResult> {\n if (closed || refusal !== null) return { kind: 'transport-uncertainty' };\n try {\n await ensureAuthorization();\n } catch {\n return { kind: 'transport-uncertainty' };\n }\n if (closed || authorization === undefined || refusal !== null) {\n return { kind: 'transport-uncertainty' };\n }\n const transfer = ['transfer', 'history', locator, path];\n if (query.revision !== undefined) transfer.push(query.revision);\n if (query.pageToken !== undefined) transfer.push(query.pageToken);\n journal.record(transfer.join(' '));\n try {\n const result = await options.adapter.history(authorization, {\n locator,\n path,\n ...(query.revision === undefined ? {} : { revision: query.revision }),\n ...(query.pageToken === undefined ? {} : { pageToken: query.pageToken }),\n });\n journal.record(`outcome history ${result.kind}`);\n if (result.kind === 'scoped-refusal') {\n const room = replicas.get(result.locator)?.confirmed.record;\n if (room !== undefined) await scoped(result, room, await openLocal());\n }\n if (result.kind === 'revoked-authorization') await refuse('revoked-authorization');\n return result;\n } catch {\n journal.record('outcome history transport-uncertainty');\n return { kind: 'transport-uncertainty' };\n }\n }\n\n function declaredCards(): ConversationCards | undefined {\n for (const capability of capabilities) {\n if (capability.conversationCards !== undefined) return capability.conversationCards;\n }\n return undefined;\n }\n\n function declaredAction(name: string) {\n for (const capability of capabilities) {\n for (const action of capability.actions ?? []) {\n if (action.name === name) return action;\n }\n }\n return undefined;\n }\n\n async function invokeAction(name: string, input: unknown): Promise<CallResult> {\n await ready;\n if (closed || refusal !== null) return { kind: 'transport-uncertainty' };\n if (declaredAction(name) === undefined) return { kind: 'undeclared' };\n try {\n await ensureAuthorization();\n } catch {\n return { kind: 'transport-uncertainty' };\n }\n if (closed || authorization === undefined || refusal !== null) {\n return { kind: 'transport-uncertainty' };\n }\n journal.record(`transfer action ${name}`);\n try {\n const result = await options.adapter.action(authorization, { name, input });\n if (result.kind === 'scoped-refusal') {\n const room = replicas.get(result.locator)?.confirmed.record;\n if (room !== undefined) await scoped(result, room, await openLocal());\n }\n if (result.kind === 'revoked-authorization') await refuse('revoked-authorization');\n journal.record(`outcome action ${result.kind}`);\n if (result.kind === 'rejected') journal.record(`refusal rejected ${result.code}`);\n return result;\n } catch {\n journal.record('outcome action transport-uncertainty');\n return { kind: 'transport-uncertainty' };\n }\n }\n\n async function pullRefresh(authorized: Authorization, confirmed: ConfirmedLayer) {\n try {\n const result = await refreshRoom(options.adapter, authorized, confirmed);\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 try {\n const result = await bootstrapRoom(options.adapter, authorized, room, {\n collection: modelOf(room.locator),\n selection: modelOf(room.locator, 'typed-selection'),\n });\n const detail = result.kind === 'staged' ? result.confirmed.record.roomVersion : result.kind;\n journal.record(`transfer bootstrap ${room.locator} ${detail}`);\n return result;\n } catch (error) {\n journal.record(`transfer bootstrap ${room.locator} transport-uncertainty`);\n throw error;\n }\n }\n\n async function advance(\n room: DiscoveredRoom,\n local: RuntimeStore,\n authorized: Authorization,\n ): Promise<Withheld | null> {\n const held = replicas.get(room.locator);\n if (held !== undefined) {\n const refreshed = await pullRefresh(authorized, held.confirmed);\n if (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 if (closed) return unconfirmed;\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 (bootstrapped.kind !== 'staged') return bootstrapped;\n if (closed) return unconfirmed;\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<'stop' | null> {\n progress.complete = false;\n if (withheld.kind === 'scoped-refusal') {\n await scoped(withheld, room, local);\n } else if (withheld.kind === 'transport-uncertainty') {\n progress.reachable = false;\n } else if (withheld.kind === 'room-not-readable') {\n unreadable.add(room.locator);\n list(room, false);\n emitRooms();\n } else if (withheld.kind === 'refused') {\n refusedSource(room, withheld);\n } else if (withheld.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n return 'stop';\n }\n return null;\n }\n\n function refusedSource(room: RoomDeclaration, { refusal }: Refused) {\n sourceRefusals.set(room.locator, {\n code: refusal.rule,\n fields: {\n file: refusal.file,\n ...(refusal.location === undefined ? {} : { location: refusal.location }),\n version: refusal.version,\n ...(refusal.referrers === undefined ? {} : { referrers: refusal.referrers }),\n },\n });\n declarationRefusals.delete(room.locator);\n unreadable.add(room.locator);\n list(room, false);\n emitRooms();\n journal.record(`source refused ${room.locator} ${refusal.rule} ${refusal.file}`);\n }\n\n function leaving(\n batch: ChangeBatch,\n result: Extract<MutationResult, { kind: 'conflicted' | 'rejected' | 'expired' }>,\n ): Leaving {\n if (result.kind === 'expired') {\n return { batch, outcome: { kind: 'expired' }, returned: { kind: 'expired' } };\n }\n const refusal = { code: result.code, fields: result.fields };\n if (result.kind === 'conflicted') {\n return {\n batch,\n outcome: {\n kind: 'conflicted',\n ...(result.roomVersion === undefined ? {} : { roomVersion: result.roomVersion }),\n affected: result.affected,\n ...refusal,\n },\n returned: { kind: 'conflicted', ...refusal },\n };\n }\n return {\n batch,\n outcome: { kind: 'rejected', affected: result.affected, ...refusal },\n returned: { kind: 'rejected', ...refusal },\n };\n }\n\n function acceptedOf(accepted: Extract<MutationResult, { kind: 'accepted' }>): SubmissionOutcome {\n return {\n kind: 'accepted',\n roomVersion: accepted.roomVersion,\n ...(accepted.author === undefined ? {} : { author: accepted.author }),\n ...(accepted.time === undefined ? {} : { time: accepted.time }),\n };\n }\n\n function logAccepted(\n locator: string,\n submitted: ChangeBatch,\n accepted: Extract<MutationResult, { kind: 'accepted' }>,\n ) {\n journal.record(\n `outcome ${locator} ${submitted.id} accepted ${accepted.roomVersion}` +\n (accepted.author === undefined ? '' : ` author ${accepted.author}`) +\n (accepted.time === undefined ? '' : ` time ${accepted.time}`),\n );\n }\n\n async function holdAccepted(\n room: DiscoveredRoom,\n local: RuntimeStore,\n submitted: ChangeBatch,\n accepted: Extract<MutationResult, { kind: 'accepted' }>,\n refused: Refused | null,\n ) {\n await exclusive(async () => {\n const current = replicas.get(room.locator);\n if (current === undefined || !current.queue.some((batch) => batch.id === submitted.id)) {\n return;\n }\n const outcome = acceptedOf(accepted);\n await local.write({\n next: current.confirmed.record,\n previous: current.confirmed.record,\n queue: current.queue,\n previousQueue: current.queue,\n outcomes: [{ id: submitted.id, outcome }],\n });\n outcomes.set(submitted.id, outcome);\n outcomeRooms.set(submitted.id, room.locator);\n logAccepted(room.locator, submitted, accepted);\n });\n if (refused !== null) refusedSource(room, refused);\n }\n\n async function commitAccept(\n room: DiscoveredRoom,\n local: RuntimeStore,\n submitted: ChangeBatch,\n accepted: Extract<MutationResult, { kind: 'accepted' }>,\n base: ConfirmedLayer,\n overlay: boolean,\n ): Promise<Refused | Unconfirmed | null> {\n const current = replicas.get(room.locator);\n if (current === undefined || !current.queue.some((batch) => batch.id === submitted.id)) {\n return null;\n }\n const remaining = current.queue.filter((batch) => batch.id !== submitted.id);\n const retainedBase = readConfirmed(\n {\n ...base.record,\n model: modelOf(room.locator),\n selectionModel: modelOf(room.locator, 'typed-selection'),\n },\n base,\n );\n const applied =\n overlay && retainedBase.kind === 'staged'\n ? applyReturned(\n retainedBase.confirmed,\n accepted.documents,\n accepted.revisions,\n accepted.removals,\n accepted.roomVersion,\n )\n : retainedBase;\n if (applied.kind !== 'staged') return applied;\n const set = await settle(local, room.locator, current, applied.confirmed, remaining, {\n accepted: { id: submitted.id, outcome: acceptedOf(accepted) },\n room: true,\n });\n unreadable.delete(room.locator);\n sourceRefusals.delete(room.locator);\n declarationRefusals.delete(room.locator);\n list(room, true);\n publishChangeSet(set);\n moveTo({ ...status, ...attention() });\n logAccepted(room.locator, submitted, accepted);\n return null;\n }\n\n async function committed(\n room: DiscoveredRoom,\n local: RuntimeStore,\n submitted: ChangeBatch,\n accepted: Extract<MutationResult, { kind: 'accepted' }>,\n base: ConfirmedLayer,\n overlay: boolean,\n ): Promise<boolean> {\n const failed = await exclusive(() =>\n commitAccept(room, local, submitted, accepted, base, overlay),\n );\n if (failed === null) return true;\n await holdAccepted(room, local, submitted, accepted, failed.kind === 'refused' ? failed : null);\n return false;\n }\n\n async function submitRoom(\n room: DiscoveredRoom,\n local: RuntimeStore,\n authorized: Authorization,\n progress: CycleProgress,\n ): Promise<'stop' | null> {\n while (!closed && authorization !== undefined) {\n const replica = replicas.get(room.locator);\n const head = replica?.queue[0];\n if (replica === undefined || head === undefined) return null;\n if (outcomes.get(head.id)?.kind === 'accepted') {\n progress.complete = false;\n return null;\n }\n const { submission, lost: earlier } = pendings.get(head.id) ?? {\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 null;\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 try {\n result = await options.adapter.mutate(authorized, {\n locator: room.locator,\n changeBatch: head,\n });\n } catch {\n progress.complete = false;\n progress.reachable = false;\n return null;\n }\n if (closed) return null;\n if (result.kind === 'transport-uncertainty') {\n progress.complete = false;\n progress.reachable = false;\n return null;\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 null;\n }\n if (result.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n return 'stop';\n }\n if (result.kind === 'scoped-refusal') {\n await scoped(result, room, local);\n progress.complete = false;\n return null;\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 null;\n }\n if (result.kind === 'conflicted' || result.kind === 'rejected' || result.kind === 'expired') {\n const left = leaving(head, result);\n await exclusive(async () => {\n const current = replicas.get(room.locator);\n if (current === undefined || !current.queue.some((batch) => batch.id === head.id)) {\n return;\n }\n const set = await settle(\n local,\n room.locator,\n current,\n current.confirmed,\n current.queue.filter((batch) => batch.id !== head.id),\n {\n leaving:\n result.kind === 'expired' && landed(head, current.confirmed)\n ? { ...left, returned: null }\n : left,\n },\n );\n publishChangeSet(set);\n moveTo({ ...status, ...attention() });\n });\n if (result.kind === 'expired') continue;\n const withheld = await advance(room, local, authorized);\n if (withheld !== null) return withhold(withheld, room, local, progress);\n continue;\n }\n const from = replicas.get(room.locator)?.confirmed;\n if (from === undefined) return null;\n const pulled = await pullRefresh(authorized, from);\n if (pulled.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n return 'stop';\n }\n if (pulled.kind === 'scoped-refusal') {\n await scoped(pulled, room, local);\n progress.complete = false;\n return null;\n }\n if (pulled.kind === 'still-current') {\n if (!(await committed(room, local, head, result, from, true))) {\n progress.complete = false;\n return null;\n }\n continue;\n }\n if (pulled.kind === 'advanced') {\n const overlay = pulled.confirmed.record.roomVersion === result.roomVersion;\n if (!(await committed(room, local, head, result, pulled.confirmed, overlay))) {\n progress.complete = false;\n return null;\n }\n continue;\n }\n if (pulled.kind === 'beyond-horizon') {\n const bootstrapped = await pullBootstrap(authorized, room);\n if (bootstrapped.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n return 'stop';\n }\n if (bootstrapped.kind === 'scoped-refusal') {\n await scoped(bootstrapped, room, local);\n progress.complete = false;\n return null;\n }\n if (bootstrapped.kind === 'staged') {\n const overlay = bootstrapped.confirmed.record.roomVersion === result.roomVersion;\n if (!(await committed(room, local, head, result, bootstrapped.confirmed, overlay))) {\n progress.complete = false;\n return null;\n }\n continue;\n }\n progress.complete = false;\n if (bootstrapped.kind === 'transport-uncertainty') {\n progress.reachable = false;\n } else if (bootstrapped.kind === 'room-not-readable') {\n unreadable.add(room.locator);\n list(room, false);\n emitRooms();\n } else if (bootstrapped.kind === 'refused') {\n await holdAccepted(room, local, head, result, bootstrapped);\n }\n return null;\n }\n progress.complete = false;\n if (pulled.kind === 'transport-uncertainty') {\n progress.reachable = false;\n } else if (pulled.kind === 'room-not-readable') {\n unreadable.add(room.locator);\n list(room, false);\n emitRooms();\n } else if (pulled.kind === 'refused') {\n await holdAccepted(room, local, head, result, pulled);\n }\n return null;\n }\n return null;\n }\n\n async function retainModel(\n local: RuntimeStore,\n room: RoomDeclaration,\n attached: Attached,\n next: ModelState,\n ) {\n const key = modelKey(room.locator, attached);\n if (next.status === 'unavailable') modelEpoch.set(key, (modelEpoch.get(key) ?? 0) + 1);\n const epoch = modelEpoch.get(key) ?? 0;\n const previous = modelOf(room.locator, attached);\n const heldBefore = replicas.get(room.locator)?.confirmed.record;\n if (\n JSON.stringify(previous) === JSON.stringify(next) &&\n (heldBefore === undefined ||\n (JSON.stringify(heldBefore.operations) === JSON.stringify(room.operations) &&\n JSON.stringify(heldBefore.replica) === JSON.stringify(room.replica) &&\n JSON.stringify(heldBefore.attachedModel) === JSON.stringify(room.attachedModel) &&\n JSON.stringify(heldBefore.typedSelection) ===\n JSON.stringify(room.typedSelection ?? null)))\n )\n return;\n if (next.status === 'unavailable') {\n invalidModels.add(key);\n liveModels.delete(key);\n }\n await exclusive(async () => {\n if (next.status !== 'unavailable' && epoch !== (modelEpoch.get(key) ?? 0)) return;\n const held = replicas.get(room.locator);\n if (held !== undefined) {\n const record = {\n ...held.confirmed.record,\n operations: room.operations,\n replica: room.replica,\n attachedModel: room.attachedModel,\n typedSelection: room.typedSelection ?? null,\n ...(attached === 'collection' ? { model: next } : { selectionModel: next }),\n };\n await local.write({\n next: record,\n previous: held.confirmed.record,\n queue: held.queue,\n });\n const read = readConfirmed(record, held.confirmed);\n if (read.kind === 'staged') {\n replicas.set(room.locator, replicaOf(read.confirmed, held.queue, rewriting(), held));\n if (declarationRefusals.delete(room.locator)) {\n sourceRefusals.delete(room.locator);\n unreadable.delete(room.locator);\n }\n } else if (read.kind === 'refused') {\n replicas.set(room.locator, { ...held, confirmed: { ...held.confirmed, record } });\n refusedSource(room, read);\n declarationRefusals.add(room.locator);\n }\n }\n models.set(key, next);\n if (next.status === 'current') {\n liveModels.set(key, JSON.stringify(next.snapshot));\n invalidModels.delete(key);\n }\n list(room, room.replica.admission === 'admitted' && !unreadable.has(room.locator));\n if (held === undefined) emitRooms();\n else\n publishChangeSet(\n changeSet(room.locator, held, replicas.get(room.locator) ?? null, { room: true }),\n );\n });\n }\n\n async function acquireModel(\n local: RuntimeStore,\n room: DiscoveredRoom,\n authorized: Authorization,\n selection: TypedSelection | null,\n ) {\n const attached: Attached = selection === null ? 'collection' : 'typed-selection';\n const key = modelKey(room.locator, attached);\n const declared = selection === null ? room.attachedModel : selection.attachedModel;\n let previous = modelOf(room.locator, attached);\n if (\n previous.status !== 'unavailable' &&\n (declared === null || !sameModel(previous.snapshot, declared))\n ) {\n previous = { status: 'unavailable', reason: 'version-changed' };\n await retainModel(local, room, attached, previous);\n }\n const epoch = modelEpoch.get(key) ?? 0;\n let answer;\n try {\n answer = await options.adapter.model(\n authorized,\n selection === null\n ? {\n locator: room.locator,\n attached: 'collection',\n collectionRoot: room.collectionRoot,\n model: declared,\n }\n : {\n locator: room.locator,\n attached: 'typed-selection',\n roots: selection.roots,\n model: declared,\n },\n );\n } catch {\n answer = { kind: 'transport-uncertainty' as const };\n }\n if (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 JSON.stringify(Object.entries(previous.snapshot.definitions).sort()) !==\n JSON.stringify(Object.entries(answer.snapshot.definitions).sort())\n ) {\n await retainModel(local, room, attached, { status: 'unavailable', reason: 'invalid' });\n return;\n }\n const verified = verify(answer.snapshot.definitions);\n if (verified.verdict === 'refuse')\n journal.record(`model invalid ${room.locator} ${attached} ${verified.rule} ${verified.file}`);\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 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 for (const room of discovered) {\n if (closed || authorization === undefined) {\n progress.complete = false;\n return;\n }\n const prior = replicas.get(room.locator)?.confirmed.record;\n if (prior !== undefined && prior.replica.selection !== room.replica.selection) {\n list(prior, false);\n emitRooms();\n journal.record(`selection changed ${room.locator}`);\n progress.complete = false;\n continue;\n }\n await acquireModel(local, room, authorization, null);\n if (discoveryPaused) return;\n if (room.typedSelection !== undefined) {\n await acquireModel(local, room, authorization, room.typedSelection);\n if (discoveryPaused) return;\n }\n if (room.replica.admission !== 'admitted') {\n progress.complete = false;\n continue;\n }\n const held = replicas.get(room.locator);\n if (\n held !== undefined &&\n held.confirmed.record.replica.selection !== room.replica.selection\n ) {\n progress.complete = false;\n continue;\n }\n const withheld = await advance(room, local, authorization);\n if (withheld !== null) {\n if ((await withhold(withheld, room, local, progress)) === 'stop') return;\n continue;\n }\n if ((await submitRoom(room, local, authorization, progress)) === 'stop') return;\n }\n }\n\n async function cycle(local: RuntimeStore, progress: CycleProgress) {\n if (closed || authorization === undefined) {\n notifyReady();\n return;\n }\n moveTo(transferring(status));\n let result;\n try {\n result = await options.adapter.discover(authorization);\n } catch {\n result = { kind: 'transport-uncertainty' as const };\n }\n if (closed) {\n notifyReady();\n return;\n }\n journal.record(`connection discover ${result.kind}`);\n if (result.kind === 'transport-uncertainty') {\n for (const room of rooms.values()) {\n await retainModel(local, room, 'collection', cached(modelOf(room.locator)));\n if (room.typedSelection !== null) {\n await retainModel(\n local,\n room,\n 'typed-selection',\n cached(modelOf(room.locator, 'typed-selection')),\n );\n }\n }\n progress.reachable = false;\n notifyReady();\n return;\n }\n if (result.kind === 'contract-unavailable') {\n journal.record(`connection contract unavailable ${result.code}`);\n await refuse('missing-required-guarantee', { code: result.code, fields: result.fields });\n notifyReady();\n return;\n }\n if (result.kind === 'revoked-authorization') {\n await refuse('revoked-authorization');\n notifyReady();\n return;\n }\n if (!result.supportedVersions.includes(ROOM_CONTRACT_VERSION)) {\n await refuse('no-matching-version');\n notifyReady();\n return;\n }\n if (\n result.mdModel.identity !== MD_MODEL.identity ||\n result.mdModel.version !== MD_MODEL.version\n ) {\n await refuse('md-model-version-mismatch');\n notifyReady();\n return;\n }\n mismatchedRoots.clear();\n for (const room of result.rooms) {\n const held = replicas.get(room.locator)?.confirmed.record;\n const malformed = !validRoot(room.collectionRoot);\n if (\n room.operations === undefined ||\n !['read', 'sync', 'write', 'delete'].every(\n (operation) =>\n Array.isArray(room.operations[operation as keyof typeof room.operations]) &&\n room.operations[operation as keyof typeof room.operations].every(\n (scope) => typeof scope === 'string',\n ),\n ) ||\n room.replica === undefined ||\n typeof room.replica.selection !== 'string' ||\n room.replica.selection.length === 0 ||\n !['admitted', 'unavailable'].includes(room.replica.admission) ||\n !declaredIdentity(room.attachedModel)\n ) {\n journal.record(`invalid model or replica declaration ${room.locator}`);\n await refuse('missing-required-guarantee');\n notifyReady();\n return;\n }\n if (!declaredSelection(room)) {\n journal.record(`invalid typed selection declaration ${room.locator}`);\n await refuse('missing-required-guarantee');\n notifyReady();\n return;\n }\n if (malformed || (held !== undefined && held.collectionRoot !== room.collectionRoot)) {\n mismatchedRoots.add(room.locator);\n journal.record(`collection root ${malformed ? 'invalid' : 'changed'} ${room.locator}`);\n }\n }\n if (mismatchedRoots.size > 0) {\n await refuse('missing-required-guarantee');\n notifyReady();\n return;\n }\n const declared = new Set(result.capabilities.map((capability) => capability.name));\n for (const required of options.requiredGuarantees) {\n if (!knownCapabilities.has(required) || !declared.has(required)) {\n await refuse('missing-required-guarantee');\n notifyReady();\n return;\n }\n }\n if (refusal !== null) {\n refusal = null;\n emitRefusal();\n }\n const previousCapabilities = capabilities;\n capabilities = result.capabilities;\n notifyReady();\n if (declared.has('room-version-notifications')) observeRoomVersions();\n if (declared.has('provider-actions')) observeConversations();\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 || 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 || discoveryPaused) return;\n notices.set(notification.locator, notification.roomVersion);\n chain = chain.then(runNotified, runNotified);\n });\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) return;\n currencyQueued = true;\n chain = chain.then(runCurrency, runCurrency);\n }\n\n async function runCurrency() {\n currencyQueued = false;\n if (closed || 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 || 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 (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 closed = true;\n withdrawNotifications?.();\n withdrawNotifications = undefined;\n withdrawConversations?.();\n withdrawConversations = undefined;\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 readSide.close();\n queueSubscriptions.clear();\n roomDraftListeners.clear();\n presentationListeners.clear();\n }\n\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 === '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 roomDraft: {\n list() {\n return exclusive(async () => {\n await openLocal();\n return snapshotRoomDrafts();\n }).then((listed) => {\n publishRoomDrafts(true);\n return listed;\n });\n },\n read(room: string, path: string) {\n const record = roomDrafts.get(room)?.get(path);\n return record === undefined ? null : roomDraftOf(record);\n },\n write(room: string, path: string, revision: string | null, input: unknown) {\n return exclusive(async (): Promise<RoomDraftWrite> => {\n const parts = readParts(input);\n if (path === '' || normalize(path) !== path) throw new Error('room-draft-malformed');\n const local = await openLocal();\n const current = roomDrafts.get(room)?.get(path);\n if ((current?.revision ?? null) !== revision) {\n return {\n outcome: 'stale',\n current: current === undefined ? null : roomDraftOf(current),\n };\n }\n const record: RoomDraftRecord = {\n locator: room,\n path,\n revision: roomDraftRevision(),\n parts: held(current?.parts, parts),\n returned: current?.returned ?? null,\n };\n await local.keepRoomDraft(record);\n rememberRoomDraft(record);\n publishChangeSet(changeSet(room, null, null, { drafts: [path] }));\n return { outcome: 'written', roomDraft: roomDraftOf(record) };\n });\n },\n discard(room: string, path: string, revision: string) {\n return exclusive(async (): Promise<RoomDraftWrite> => {\n const local = await openLocal();\n const current = roomDrafts.get(room)?.get(path);\n if (current === undefined || current.revision !== revision) {\n return {\n outcome: 'stale',\n current: current === undefined ? null : roomDraftOf(current),\n };\n }\n await local.discardRoomDraft(room, path);\n forgetRoomDraft(room, path);\n publishChangeSet(changeSet(room, null, null, { drafts: [path] }));\n moveTo({ ...status, ...attention() });\n return { outcome: 'written', roomDraft: null };\n });\n },\n },\n conversation: conversations.surface,\n chatDraft: conversations.chatDraft,\n presentation: {\n read(app: string) {\n return exclusive(async () => {\n await openLocal();\n return presentationOf(app);\n });\n },\n write(app: string, value: unknown) {\n return exclusive(async () => {\n const local = await openLocal();\n const stored = structuredClone(value);\n await local.present({ app, value: stored });\n presentations.set(app, stored);\n publishChangeSet(changeSet('', null, null, { presentation: app }));\n });\n },\n },\n save(\n room: string,\n named: readonly SavedRoomDraft[],\n writtenBy?: WrittenBy,\n ): Promise<SaveResult> {\n return exclusive(() => saveRoomDrafts(room, named, writtenBy));\n },\n outcome(identifier: string): SubmissionOutcome | null {\n return outcomes.get(identifier) ?? null;\n },\n history(locator: string, path: string, query?: HistoryQuery) {\n return readHistory(locator, path, query);\n },\n call(name: string, input: unknown) {\n return invokeAction(name, input);\n },\n log() {\n return journal.export();\n },\n storageLoss() {\n return storageLoss;\n },\n persistence() {\n return options.shell.persistentStorage;\n },\n observe: ((topic: RuntimeTopic, ...input: unknown[]) =>\n opened(\n (deliver) =>\n watch(topic, input, (message) => {\n deliver(structuredClone(message));\n }),\n topic === 'query',\n )) as MdRuntime['observe'],\n async reauthorize() {\n if (refusal === null || !refusal.reauthorizationOffered) return;\n journal.record('connection reauthorize');\n await mutations;\n authorization = undefined;\n discoveryPaused = false;\n await enqueue();\n },\n };\n return { md, 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","validRoot","createLog","refreshRoom","buildBatch","applyReturned","compositionOf","landed","readConfirmed","replicaOf","withdrawals","changedParts","changesOf","held","readParts","returnedInto","underneath","settled","same","saving","STARTING","transferring","detectStorageLoss","nextGeneration","roomDraftRevision","beneath","normalize","openRuntimeStore","unconfirmed","DEFAULT_DISCOVERY_INTERVAL_MS","knownCapabilities","Set","within","root","path","declaredIdentity","model","undefined","identity","length","version","declaredSelection","room","selection","typedSelection","Array","isArray","roots","attachedModel","every","index","collectionRoot","other","at","createMdRuntime","options","composeRuntime","md","period","discoveryIntervalMs","authorization","opening","store","replicas","Map","pendings","roomDrafts","presentations","outcomes","outcomeRooms","limits","slots","capabilities","rewriting","some","capability","name","rooms","unreadable","models","liveModels","invalidModels","modelEpoch","discovered","roomsListed","scopedRefusals","sourceRefusals","declarationRefusals","modelKey","locator","attached","modelOf","get","savedModel","has","status","reason","compositionFor","record","selectionModel","mismatchedRoots","refusal","storageLoss","shown","discoveryPaused","timer","closed","withdrawNotifications","handed","notices","chain","Promise","resolve","mutations","inflight","queued","roomListeners","refusalListeners","storageLossListeners","statusListeners","queueSubscriptions","roomDraftListeners","presentationListeners","readSide","withdrawConversations","currencyQueued","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","types","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","existing","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","retained","Error","saveRoomDrafts","writtenBy","rule","file","draft","built","baseRoomVersion","composition","changes","bases","batches","consumed","consumedRoomDrafts","identifier","mark","submit","readHistory","ensureAuthorization","transfer","pageToken","join","result","history","scoped","conversationCards","declaredAction","action","actions","code","pullRefresh","authorized","detail","pullBootstrap","collection","advance","refreshed","bootstrapped","withhold","withheld","progress","complete","reachable","refusedSource","fields","location","referrers","affected","acceptedOf","author","time","logAccepted","submitted","holdAccepted","refused","commitAccept","base","overlay","remaining","retainedBase","applied","revisions","removals","committed","failed","submitRoom","head","earlier","Date","now","parse","mutate","changeBatch","from","pulled","retainModel","epoch","heldBefore","acquireModel","answer","definitions","verified","verdict","verifiedWith","scopedAway","scope","sync","synchronize","cycle","discover","supportedVersions","mdModel","malformed","operation","required","requiredGuarantees","previousCapabilities","observeRoomVersions","observeConversations","discoveredSlots","declare","handSelected","reconcile","providerUnreachable","reconnected","catchUp","authorize","connect","completedAt","toISOString","run","roomVersions","observe","notification","runNotified","event","receive","runCurrency","resting","announced","close","signal","addEventListener","once","aborted","watch","topic","deliver","plan","loaded","search","selected","syncStatus","roomDraft","keepRoomDraft","discard","discardRoomDraft","surface","chatDraft","stored","present","save","log","export","persistence","persistentStorage","reauthorize"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../src/save.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAEL,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG;IACtB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,OAAO,cAAc,EAAE,eAAe,CAAC;IACnD,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC;AAwK9C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAG,WAAW,CAOxF;AA2LD,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CA8FxD"}
1
+ {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../src/save.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAEL,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG;IACtB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,OAAO,cAAc,EAAE,eAAe,CAAC;IACnD,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC;AAwK9C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAG,WAAW,CAOxF;AAqMD,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CA8FxD"}
package/dist/save.js CHANGED
@@ -274,12 +274,18 @@ function guard(changes, input) {
274
274
  if (change.kind === 'move') {
275
275
  if (!existing.has(change.path)) return refuse('path-absent', change.path);
276
276
  if (existing.has(change.to)) return refuse('path-collision', change.to);
277
+ if (unrevisionedDocument(input.visible, change.path)) {
278
+ return refuse('unknown-revision', change.path);
279
+ }
277
280
  existing.delete(change.path);
278
281
  existing.add(change.to);
279
282
  continue;
280
283
  }
281
284
  if (!existing.has(change.path)) return refuse('path-absent', change.path);
282
285
  if (change.kind === 'remove') {
286
+ if (unrevisionedDocument(input.visible, change.path)) {
287
+ return refuse('unknown-revision', change.path);
288
+ }
283
289
  existing.delete(change.path);
284
290
  continue;
285
291
  }
@@ -295,6 +301,9 @@ function guard(changes, input) {
295
301
  }
296
302
  return null;
297
303
  }
304
+ function unrevisionedDocument(visible, path) {
305
+ return visible.revisions[path] === undefined && !visible.binaryTargets.includes(path);
306
+ }
298
307
  function existence(visible, path) {
299
308
  const revision = visible.revisions[path];
300
309
  return revision === undefined ? {
package/dist/save.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/workspace/packages/mdruntime/src/save.ts"],"sourcesContent":["import { definitionOf, type ModelState } from './model.js';\nimport {\n apply,\n links,\n parse,\n retarget,\n serialize,\n target,\n type Document,\n type FieldSpec,\n} from '@agentshouse/mdmodel';\nimport type { ProviderLimit } from './adapter.js';\nimport {\n immutable,\n type Change,\n type ChangeBatch,\n type Precondition,\n type WrittenBy,\n} from './change.js';\nimport {\n governing,\n parseCollection,\n validateCollection,\n type Collection,\n type Composition,\n} from './collection.js';\nimport { changeBatchIdentity } from './identity.js';\nimport { overlay, type Layer } from './overlay.js';\nimport { covered, normalize, relative } from './paths.js';\nimport type { VisibleLayer } from './replica.js';\nimport type { ChangedPart } from './room-draft.js';\n\nexport type SaveRefusal = {\n rule: string;\n file?: string;\n location?: string;\n referrers?: readonly string[];\n parts?: readonly ChangedPart[];\n};\n\nexport type Rewriting = 'runtime' | 'provider';\n\nexport type SaveInput = {\n composition: Composition;\n rewriting: Rewriting;\n baseRoomVersion: string;\n operations: import('./adapter.js').OperationScopes;\n providerOwnedPaths: readonly string[];\n providerLimits: readonly ProviderLimit[];\n visible: VisibleLayer;\n changes: readonly Change[];\n bases: readonly Precondition[];\n writtenBy?: WrittenBy;\n};\n\nexport type BatchResult =\n | { kind: 'batch'; batch: ChangeBatch }\n | { kind: 'refused'; refusal: SaveRefusal };\n\ntype Expansion =\n | { kind: 'changes'; changes: readonly Change[] }\n | { kind: 'refused'; refusal: SaveRefusal };\n\nfunction refuse(rule: string, file?: string, location?: string): BatchResult {\n return {\n kind: 'refused',\n refusal: {\n rule,\n ...(file === undefined ? {} : { file }),\n ...(location === undefined ? {} : { location }),\n },\n };\n}\n\nfunction referenceField(spec: FieldSpec): boolean {\n return spec.kind === 'reference' || (spec.kind === 'list' && spec.of.kind === 'reference');\n}\n\nfunction repointed(\n value: unknown,\n from: string,\n to: string,\n moves: ReadonlyMap<string, string>,\n): unknown {\n if (Array.isArray(value)) {\n const next = value.map((item) => repointed(item, from, to, moves) ?? item);\n return next.some((item, index) => item !== value[index]) ? next : undefined;\n }\n if (typeof value !== 'string') return undefined;\n const named = target(from, value);\n if (named === null) return undefined;\n const destination = moves.get(named) ?? named;\n return target(to, value) === destination ? undefined : retarget(value, relative(to, destination));\n}\n\nfunction edited(document: Document, path: string, changes: readonly Change[]): Document {\n let next = document;\n for (const change of changes) {\n if (change.path !== path) continue;\n if (change.kind !== 'section' && change.kind !== 'preamble') continue;\n const applied = apply(\n next,\n change.kind === 'preamble'\n ? { kind: 'preamble', value: change.value, prior: next.preamble }\n : {\n kind: 'section',\n name: change.name,\n value: change.value,\n prior: next.sections[change.name],\n },\n );\n if (applied.outcome === 'applied') next = applied.document;\n }\n return next;\n}\n\nfunction bodies(path: string, before: Document, after: Document): readonly Change[] {\n const changes: Change[] = [];\n if (after.preamble !== before.preamble) {\n changes.push({ kind: 'preamble', path, value: after.preamble });\n }\n for (const [name, value] of Object.entries(after.sections)) {\n if (before.sections[name] === value) continue;\n changes.push({ kind: 'section', path, name, value });\n }\n return changes;\n}\n\nfunction relinks(\n path: string,\n moved: string,\n before: Document,\n moves: ReadonlyMap<string, string>,\n): Expansion {\n let after = before;\n for (const link of links(before, path)) {\n const destination = moves.get(link.target) ?? link.target;\n if (destination === link.target && moved === path) continue;\n const to = relative(moved, destination);\n if (to === relative(path, link.target)) continue;\n const applied = apply(after, { kind: 'link', href: link.href, to });\n if (applied.outcome === 'refuse') {\n return {\n kind: 'refused',\n refusal: {\n rule: applied.refusal.rule,\n file: path,\n ...(applied.refusal.location === undefined ? {} : { location: applied.refusal.location }),\n },\n };\n }\n after = applied.document;\n }\n if (after === before) return { kind: 'changes', changes: [] };\n if (before.type === undefined) {\n return { kind: 'changes', changes: [{ kind: 'replace', path, content: serialize(after) }] };\n }\n return { kind: 'changes', changes: bodies(path, before, after) };\n}\n\nfunction subsumed(merged: Change[], path: string) {\n for (let index = merged.length - 1; index >= 0; index -= 1) {\n const item = merged[index];\n if (item.path !== path) continue;\n if (item.kind === 'section' || item.kind === 'preamble') merged.splice(index, 1);\n }\n}\n\nfunction rewrites(changes: readonly Change[], visible: VisibleLayer): Expansion {\n const moves = new Map<string, string>();\n const settled = new Set<string>();\n for (const change of changes) {\n if (change.kind === 'move') moves.set(change.path, change.to);\n if (change.kind === 'remove' || change.kind === 'replace' || change.kind === 'create') {\n settled.add(change.path);\n }\n if (change.kind === 'field') settled.add(`${change.path} ${change.name}`);\n }\n if (moves.size === 0) return { kind: 'changes', changes };\n const merged = [...changes];\n const added: Change[] = [];\n for (const [path, document] of Object.entries(visible.collection.documents)) {\n if (settled.has(path)) continue;\n const moved = moves.get(path) ?? path;\n const definition = definitionOf(governing(visible.collection.composition, path), document.type);\n for (const [name, spec] of Object.entries(definition?.fields ?? {})) {\n if (!referenceField(spec) || settled.has(`${path} ${name}`)) continue;\n const value = repointed(document.fields[name], path, moved, moves);\n if (value === undefined) continue;\n added.push({ kind: 'field', path, name, value });\n }\n const relinked = relinks(path, moved, edited(document, path, merged), moves);\n if (relinked.kind === 'refused') return relinked;\n for (const change of relinked.changes) {\n if (change.kind === 'replace') {\n subsumed(merged, path);\n added.push(change);\n continue;\n }\n const index = merged.findIndex(\n (item) =>\n item.kind === change.kind &&\n item.path === path &&\n (change.kind !== 'section' || (item.kind === 'section' && item.name === change.name)),\n );\n if (index === -1) added.push(change);\n else merged[index] = change;\n }\n }\n return { kind: 'changes', changes: [...added, ...merged] };\n}\n\nfunction anticipated(\n changes: readonly Change[],\n preconditions: readonly Precondition[],\n rewritten: readonly Change[],\n visible: VisibleLayer,\n) {\n const derived = rewritten.filter((change) => !changes.includes(change));\n return {\n changes: rewritten,\n preconditions: [...preconditionsOf(derived, visible, []), ...preconditions],\n };\n}\n\nexport function providerRewritten(batch: ChangeBatch, visible: VisibleLayer): ChangeBatch {\n const rewritten = rewrites(batch.changes, visible);\n if (rewritten.kind === 'refused') return batch;\n return {\n ...batch,\n ...anticipated(batch.changes, batch.preconditions, rewritten.changes, visible),\n };\n}\n\nfunction targets(value: unknown, from: string): readonly string[] {\n const values = Array.isArray(value) ? value : [value];\n const resolved: string[] = [];\n for (const item of values) {\n if (typeof item !== 'string') continue;\n const named = target(from, item);\n if (named !== null) resolved.push(named);\n }\n return resolved;\n}\n\nfunction incoming(collection: Collection, removed: ReadonlySet<string>): BatchResult | null {\n const found = new Map<string, Set<string>>();\n const note = (target: string, file: string) => {\n if (!removed.has(target)) return;\n const referrers = found.get(target) ?? new Set<string>();\n referrers.add(file);\n found.set(target, referrers);\n };\n for (const [path, document] of Object.entries(collection.documents)) {\n const definition = definitionOf(governing(collection.composition, path), document.type);\n for (const [name, spec] of Object.entries(definition?.fields ?? {})) {\n if (!referenceField(spec)) continue;\n for (const named of targets(document.fields[name], path)) note(named, path);\n }\n for (const link of links(document, path)) note(link.target, path);\n }\n const [first] = [...found.keys()].sort();\n if (first === undefined) return null;\n const every = new Set<string>();\n for (const referrers of found.values()) for (const file of referrers) every.add(file);\n return {\n kind: 'refused',\n refusal: { rule: 'referenced-missing-file', file: first, referrers: [...every].sort() },\n };\n}\n\nfunction affected(change: Change): readonly string[] {\n return change.kind === 'move' ? [change.path, change.to] : [change.path];\n}\n\nfunction guard(changes: readonly Change[], input: SaveInput): BatchResult | null {\n const existing = new Set([\n ...Object.keys(input.visible.documents),\n ...input.visible.binaryTargets,\n ]);\n for (const change of changes) {\n for (const path of affected(change)) {\n const normalized = normalize(path);\n if (normalized === null || normalized === '') return refuse('room-root', path);\n if (covered(input.providerOwnedPaths, normalized)) {\n return refuse('provider-owned-path', normalized);\n }\n const operation = change.kind === 'remove' ? 'delete' : 'write';\n if (!covered(input.operations[operation], normalized))\n return refuse(`${operation}-grant`, normalized);\n }\n if (change.kind === 'create') {\n if (existing.has(change.path)) return refuse('path-collision', change.path);\n existing.add(change.path);\n continue;\n }\n if (change.kind === 'move') {\n if (!existing.has(change.path)) return refuse('path-absent', change.path);\n if (existing.has(change.to)) return refuse('path-collision', change.to);\n existing.delete(change.path);\n existing.add(change.to);\n continue;\n }\n if (!existing.has(change.path)) return refuse('path-absent', change.path);\n if (change.kind === 'remove') {\n existing.delete(change.path);\n continue;\n }\n if (change.kind === 'replace') {\n if (input.visible.revisions[change.path] === undefined) {\n return refuse('unknown-revision', change.path);\n }\n continue;\n }\n if (input.visible.collection.documents[change.path] === undefined) {\n return refuse('path-absent', change.path);\n }\n }\n return null;\n}\n\nfunction existence(visible: VisibleLayer, path: string): Precondition {\n const revision = visible.revisions[path];\n return revision === undefined ? { kind: 'present', path } : { kind: 'revision', path, revision };\n}\n\nfunction sameTarget(precondition: Precondition, change: Change): boolean {\n if (precondition.kind !== change.kind || precondition.path !== change.path) return false;\n return (\n (precondition.kind !== 'field' && precondition.kind !== 'section') ||\n ((change.kind === 'field' || change.kind === 'section') && precondition.name === change.name)\n );\n}\n\nfunction preconditionsOf(\n changes: readonly Change[],\n visible: VisibleLayer,\n bases: readonly Precondition[],\n): readonly Precondition[] {\n const preconditions: Precondition[] = [];\n const seen = new Set<string>();\n const add = (precondition: Precondition) => {\n const part =\n precondition.kind === 'field' || precondition.kind === 'section' ? precondition.name : '';\n const identity = `${precondition.kind} ${precondition.path} ${part}`;\n if (seen.has(identity)) return;\n seen.add(identity);\n preconditions.push(precondition);\n };\n for (const change of changes) {\n if (change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble') {\n const based = bases.find((base) => sameTarget(base, change));\n if (based !== undefined) {\n add(based);\n continue;\n }\n const document = visible.collection.documents[change.path];\n if (change.kind === 'field') {\n add({\n kind: 'field',\n path: change.path,\n name: change.name,\n value: document.fields[change.name],\n });\n } else if (change.kind === 'section') {\n add({\n kind: 'section',\n path: change.path,\n name: change.name,\n value: document.sections[change.name],\n });\n } else add({ kind: 'preamble', path: change.path, value: document.preamble });\n continue;\n }\n if (change.kind === 'create') {\n add({ kind: 'absent', path: change.path });\n continue;\n }\n add(existence(visible, change.path));\n if (change.kind === 'move') add({ kind: 'absent', path: change.to });\n }\n return preconditions;\n}\n\nfunction depth(path: string) {\n return path.split('/').length;\n}\n\nfunction exceeded(\n limits: readonly ProviderLimit[],\n changes: readonly Change[],\n resulting: Layer,\n): BatchResult | null {\n const written = changes.map((change) => (change.kind === 'move' ? change.to : change.path));\n const created = changes\n .filter((change) => change.kind === 'create' || change.kind === 'move')\n .map((change) => (change.kind === 'move' ? change.to : change.path));\n for (const limit of limits) {\n const value = limit.value;\n if (typeof value !== 'number') continue;\n if (limit.name === 'change-batch-operations' && changes.length > value) {\n return refuse('provider-limit', undefined, limit.name);\n }\n if (limit.name === 'document-size') {\n const large = written.find((path) => (resulting.documents[path] ?? '').length > value);\n if (large !== undefined) return refuse('provider-limit', large, limit.name);\n }\n if (limit.name === 'path-length') {\n const long = created.find((path) => path.length > value);\n if (long !== undefined) return refuse('provider-limit', long, limit.name);\n }\n if (limit.name === 'path-depth') {\n const deep = created.find((path) => depth(path) > value);\n if (deep !== undefined) return refuse('provider-limit', deep, limit.name);\n }\n }\n return null;\n}\n\nexport function buildBatch(input: SaveInput): BatchResult {\n const structural = input.changes.find(\n (change) => change.kind === 'move' || change.kind === 'remove',\n );\n if (\n structural !== undefined &&\n Object.entries(input.visible.collection.documents).some(\n ([path, document]) =>\n document.type !== undefined &&\n document.type !== 'any' &&\n governing(input.composition, path).status === 'unavailable',\n )\n )\n return refuse('model-unavailable', structural.path);\n if (input.changes.length === 0) return refuse('no-change');\n const rewritten = rewrites(input.changes, input.visible);\n if (rewritten.kind === 'refused') return rewritten;\n const changes = input.rewriting === 'provider' ? input.changes : rewritten.changes;\n const refusal = guard(changes, input);\n if (refusal !== null) return refusal;\n const preconditions = preconditionsOf(changes, input.visible, input.bases);\n const predicted =\n input.rewriting === 'provider'\n ? anticipated(changes, preconditions, rewritten.changes, input.visible)\n : { changes, preconditions };\n const resulting = overlay(input.visible, [\n { id: '', baseRoomVersion: input.baseRoomVersion, ...predicted },\n ]);\n const removed = new Set(\n changes.filter((change) => change.kind === 'remove').map((change) => change.path),\n );\n if (removed.size > 0) {\n const referenced = incoming(parseCollection(resulting.documents, input.composition), removed);\n if (referenced !== null) return referenced;\n }\n const typed = (content: string | undefined) => {\n if (content === undefined) return false;\n const parsed = parse(content);\n return parsed.ok && parsed.document.type !== undefined && parsed.document.type !== 'any';\n };\n const typedPaths = [...new Set(predicted.changes.flatMap(affected))].filter(\n (path) => typed(input.visible.documents[path]) || typed(resulting.documents[path]),\n );\n const needsModel = typedPaths.length > 0;\n const withoutModel = typedPaths.find(\n (path) => governing(input.composition, path).status === 'unavailable',\n );\n if (withoutModel !== undefined) return refuse('model-unavailable', withoutModel);\n const validationText = needsModel\n ? resulting.documents\n : Object.fromEntries(\n Object.entries(resulting.documents).filter(([path]) =>\n predicted.changes.some((change) => affected(change).includes(path)),\n ),\n );\n const verdict = validateCollection(validationText, resulting.binaryTargets, input.composition);\n if (verdict.verdict === 'refuse') {\n return {\n kind: 'refused',\n refusal: {\n rule: verdict.rule,\n file: verdict.file,\n ...(verdict.location === undefined ? {} : { location: verdict.location }),\n ...(verdict.referrers === undefined ? {} : { referrers: verdict.referrers }),\n },\n };\n }\n const limited = exceeded(input.providerLimits, changes, resulting);\n if (limited !== null) return limited;\n const validated = typedPaths\n .map((path) => governing(input.composition, path))\n .find(\n (model): model is Extract<ModelState, { status: 'current' | 'cached' }> =>\n model.status !== 'unavailable',\n );\n return {\n kind: 'batch',\n batch: immutable({\n id: changeBatchIdentity(),\n baseRoomVersion: input.baseRoomVersion,\n changes,\n preconditions,\n ...(input.writtenBy === undefined ? {} : { writtenBy: input.writtenBy }),\n ...(validated === undefined\n ? {}\n : {\n validation: {\n identity: validated.snapshot.identity,\n version: validated.snapshot.version,\n source: validated.status,\n },\n }),\n }),\n };\n}\n"],"names":["definitionOf","apply","links","parse","retarget","serialize","target","immutable","governing","parseCollection","validateCollection","changeBatchIdentity","overlay","covered","normalize","relative","refuse","rule","file","location","kind","refusal","undefined","referenceField","spec","of","repointed","value","from","to","moves","Array","isArray","next","map","item","some","index","named","destination","get","edited","document","path","changes","change","applied","prior","preamble","name","sections","outcome","bodies","before","after","push","Object","entries","relinks","moved","link","href","type","content","subsumed","merged","length","splice","rewrites","visible","Map","settled","Set","set","add","size","added","collection","documents","has","definition","composition","fields","relinked","findIndex","anticipated","preconditions","rewritten","derived","filter","includes","preconditionsOf","providerRewritten","batch","targets","values","resolved","incoming","removed","found","note","referrers","first","keys","sort","every","affected","guard","input","existing","binaryTargets","normalized","providerOwnedPaths","operation","operations","delete","revisions","existence","revision","sameTarget","precondition","bases","seen","part","identity","based","find","base","depth","split","exceeded","limits","resulting","written","created","limit","large","long","deep","buildBatch","structural","status","rewriting","predicted","id","baseRoomVersion","referenced","typed","parsed","ok","typedPaths","flatMap","needsModel","withoutModel","validationText","fromEntries","verdict","limited","providerLimits","validated","model","writtenBy","validation","snapshot","version","source"],"mappings":"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"}
1
+ {"version":3,"sources":["/workspace/packages/mdruntime/src/save.ts"],"sourcesContent":["import { definitionOf, type ModelState } from './model.js';\nimport {\n apply,\n links,\n parse,\n retarget,\n serialize,\n target,\n type Document,\n type FieldSpec,\n} from '@agentshouse/mdmodel';\nimport type { ProviderLimit } from './adapter.js';\nimport {\n immutable,\n type Change,\n type ChangeBatch,\n type Precondition,\n type WrittenBy,\n} from './change.js';\nimport {\n governing,\n parseCollection,\n validateCollection,\n type Collection,\n type Composition,\n} from './collection.js';\nimport { changeBatchIdentity } from './identity.js';\nimport { overlay, type Layer } from './overlay.js';\nimport { covered, normalize, relative } from './paths.js';\nimport type { VisibleLayer } from './replica.js';\nimport type { ChangedPart } from './room-draft.js';\n\nexport type SaveRefusal = {\n rule: string;\n file?: string;\n location?: string;\n referrers?: readonly string[];\n parts?: readonly ChangedPart[];\n};\n\nexport type Rewriting = 'runtime' | 'provider';\n\nexport type SaveInput = {\n composition: Composition;\n rewriting: Rewriting;\n baseRoomVersion: string;\n operations: import('./adapter.js').OperationScopes;\n providerOwnedPaths: readonly string[];\n providerLimits: readonly ProviderLimit[];\n visible: VisibleLayer;\n changes: readonly Change[];\n bases: readonly Precondition[];\n writtenBy?: WrittenBy;\n};\n\nexport type BatchResult =\n | { kind: 'batch'; batch: ChangeBatch }\n | { kind: 'refused'; refusal: SaveRefusal };\n\ntype Expansion =\n | { kind: 'changes'; changes: readonly Change[] }\n | { kind: 'refused'; refusal: SaveRefusal };\n\nfunction refuse(rule: string, file?: string, location?: string): BatchResult {\n return {\n kind: 'refused',\n refusal: {\n rule,\n ...(file === undefined ? {} : { file }),\n ...(location === undefined ? {} : { location }),\n },\n };\n}\n\nfunction referenceField(spec: FieldSpec): boolean {\n return spec.kind === 'reference' || (spec.kind === 'list' && spec.of.kind === 'reference');\n}\n\nfunction repointed(\n value: unknown,\n from: string,\n to: string,\n moves: ReadonlyMap<string, string>,\n): unknown {\n if (Array.isArray(value)) {\n const next = value.map((item) => repointed(item, from, to, moves) ?? item);\n return next.some((item, index) => item !== value[index]) ? next : undefined;\n }\n if (typeof value !== 'string') return undefined;\n const named = target(from, value);\n if (named === null) return undefined;\n const destination = moves.get(named) ?? named;\n return target(to, value) === destination ? undefined : retarget(value, relative(to, destination));\n}\n\nfunction edited(document: Document, path: string, changes: readonly Change[]): Document {\n let next = document;\n for (const change of changes) {\n if (change.path !== path) continue;\n if (change.kind !== 'section' && change.kind !== 'preamble') continue;\n const applied = apply(\n next,\n change.kind === 'preamble'\n ? { kind: 'preamble', value: change.value, prior: next.preamble }\n : {\n kind: 'section',\n name: change.name,\n value: change.value,\n prior: next.sections[change.name],\n },\n );\n if (applied.outcome === 'applied') next = applied.document;\n }\n return next;\n}\n\nfunction bodies(path: string, before: Document, after: Document): readonly Change[] {\n const changes: Change[] = [];\n if (after.preamble !== before.preamble) {\n changes.push({ kind: 'preamble', path, value: after.preamble });\n }\n for (const [name, value] of Object.entries(after.sections)) {\n if (before.sections[name] === value) continue;\n changes.push({ kind: 'section', path, name, value });\n }\n return changes;\n}\n\nfunction relinks(\n path: string,\n moved: string,\n before: Document,\n moves: ReadonlyMap<string, string>,\n): Expansion {\n let after = before;\n for (const link of links(before, path)) {\n const destination = moves.get(link.target) ?? link.target;\n if (destination === link.target && moved === path) continue;\n const to = relative(moved, destination);\n if (to === relative(path, link.target)) continue;\n const applied = apply(after, { kind: 'link', href: link.href, to });\n if (applied.outcome === 'refuse') {\n return {\n kind: 'refused',\n refusal: {\n rule: applied.refusal.rule,\n file: path,\n ...(applied.refusal.location === undefined ? {} : { location: applied.refusal.location }),\n },\n };\n }\n after = applied.document;\n }\n if (after === before) return { kind: 'changes', changes: [] };\n if (before.type === undefined) {\n return { kind: 'changes', changes: [{ kind: 'replace', path, content: serialize(after) }] };\n }\n return { kind: 'changes', changes: bodies(path, before, after) };\n}\n\nfunction subsumed(merged: Change[], path: string) {\n for (let index = merged.length - 1; index >= 0; index -= 1) {\n const item = merged[index];\n if (item.path !== path) continue;\n if (item.kind === 'section' || item.kind === 'preamble') merged.splice(index, 1);\n }\n}\n\nfunction rewrites(changes: readonly Change[], visible: VisibleLayer): Expansion {\n const moves = new Map<string, string>();\n const settled = new Set<string>();\n for (const change of changes) {\n if (change.kind === 'move') moves.set(change.path, change.to);\n if (change.kind === 'remove' || change.kind === 'replace' || change.kind === 'create') {\n settled.add(change.path);\n }\n if (change.kind === 'field') settled.add(`${change.path} ${change.name}`);\n }\n if (moves.size === 0) return { kind: 'changes', changes };\n const merged = [...changes];\n const added: Change[] = [];\n for (const [path, document] of Object.entries(visible.collection.documents)) {\n if (settled.has(path)) continue;\n const moved = moves.get(path) ?? path;\n const definition = definitionOf(governing(visible.collection.composition, path), document.type);\n for (const [name, spec] of Object.entries(definition?.fields ?? {})) {\n if (!referenceField(spec) || settled.has(`${path} ${name}`)) continue;\n const value = repointed(document.fields[name], path, moved, moves);\n if (value === undefined) continue;\n added.push({ kind: 'field', path, name, value });\n }\n const relinked = relinks(path, moved, edited(document, path, merged), moves);\n if (relinked.kind === 'refused') return relinked;\n for (const change of relinked.changes) {\n if (change.kind === 'replace') {\n subsumed(merged, path);\n added.push(change);\n continue;\n }\n const index = merged.findIndex(\n (item) =>\n item.kind === change.kind &&\n item.path === path &&\n (change.kind !== 'section' || (item.kind === 'section' && item.name === change.name)),\n );\n if (index === -1) added.push(change);\n else merged[index] = change;\n }\n }\n return { kind: 'changes', changes: [...added, ...merged] };\n}\n\nfunction anticipated(\n changes: readonly Change[],\n preconditions: readonly Precondition[],\n rewritten: readonly Change[],\n visible: VisibleLayer,\n) {\n const derived = rewritten.filter((change) => !changes.includes(change));\n return {\n changes: rewritten,\n preconditions: [...preconditionsOf(derived, visible, []), ...preconditions],\n };\n}\n\nexport function providerRewritten(batch: ChangeBatch, visible: VisibleLayer): ChangeBatch {\n const rewritten = rewrites(batch.changes, visible);\n if (rewritten.kind === 'refused') return batch;\n return {\n ...batch,\n ...anticipated(batch.changes, batch.preconditions, rewritten.changes, visible),\n };\n}\n\nfunction targets(value: unknown, from: string): readonly string[] {\n const values = Array.isArray(value) ? value : [value];\n const resolved: string[] = [];\n for (const item of values) {\n if (typeof item !== 'string') continue;\n const named = target(from, item);\n if (named !== null) resolved.push(named);\n }\n return resolved;\n}\n\nfunction incoming(collection: Collection, removed: ReadonlySet<string>): BatchResult | null {\n const found = new Map<string, Set<string>>();\n const note = (target: string, file: string) => {\n if (!removed.has(target)) return;\n const referrers = found.get(target) ?? new Set<string>();\n referrers.add(file);\n found.set(target, referrers);\n };\n for (const [path, document] of Object.entries(collection.documents)) {\n const definition = definitionOf(governing(collection.composition, path), document.type);\n for (const [name, spec] of Object.entries(definition?.fields ?? {})) {\n if (!referenceField(spec)) continue;\n for (const named of targets(document.fields[name], path)) note(named, path);\n }\n for (const link of links(document, path)) note(link.target, path);\n }\n const [first] = [...found.keys()].sort();\n if (first === undefined) return null;\n const every = new Set<string>();\n for (const referrers of found.values()) for (const file of referrers) every.add(file);\n return {\n kind: 'refused',\n refusal: { rule: 'referenced-missing-file', file: first, referrers: [...every].sort() },\n };\n}\n\nfunction affected(change: Change): readonly string[] {\n return change.kind === 'move' ? [change.path, change.to] : [change.path];\n}\n\nfunction guard(changes: readonly Change[], input: SaveInput): BatchResult | null {\n const existing = new Set([\n ...Object.keys(input.visible.documents),\n ...input.visible.binaryTargets,\n ]);\n for (const change of changes) {\n for (const path of affected(change)) {\n const normalized = normalize(path);\n if (normalized === null || normalized === '') return refuse('room-root', path);\n if (covered(input.providerOwnedPaths, normalized)) {\n return refuse('provider-owned-path', normalized);\n }\n const operation = change.kind === 'remove' ? 'delete' : 'write';\n if (!covered(input.operations[operation], normalized))\n return refuse(`${operation}-grant`, normalized);\n }\n if (change.kind === 'create') {\n if (existing.has(change.path)) return refuse('path-collision', change.path);\n existing.add(change.path);\n continue;\n }\n if (change.kind === 'move') {\n if (!existing.has(change.path)) return refuse('path-absent', change.path);\n if (existing.has(change.to)) return refuse('path-collision', change.to);\n if (unrevisionedDocument(input.visible, change.path)) {\n return refuse('unknown-revision', change.path);\n }\n existing.delete(change.path);\n existing.add(change.to);\n continue;\n }\n if (!existing.has(change.path)) return refuse('path-absent', change.path);\n if (change.kind === 'remove') {\n if (unrevisionedDocument(input.visible, change.path)) {\n return refuse('unknown-revision', change.path);\n }\n existing.delete(change.path);\n continue;\n }\n if (change.kind === 'replace') {\n if (input.visible.revisions[change.path] === undefined) {\n return refuse('unknown-revision', change.path);\n }\n continue;\n }\n if (input.visible.collection.documents[change.path] === undefined) {\n return refuse('path-absent', change.path);\n }\n }\n return null;\n}\n\nfunction unrevisionedDocument(visible: VisibleLayer, path: string): boolean {\n return visible.revisions[path] === undefined && !visible.binaryTargets.includes(path);\n}\n\nfunction existence(visible: VisibleLayer, path: string): Precondition {\n const revision = visible.revisions[path];\n return revision === undefined ? { kind: 'present', path } : { kind: 'revision', path, revision };\n}\n\nfunction sameTarget(precondition: Precondition, change: Change): boolean {\n if (precondition.kind !== change.kind || precondition.path !== change.path) return false;\n return (\n (precondition.kind !== 'field' && precondition.kind !== 'section') ||\n ((change.kind === 'field' || change.kind === 'section') && precondition.name === change.name)\n );\n}\n\nfunction preconditionsOf(\n changes: readonly Change[],\n visible: VisibleLayer,\n bases: readonly Precondition[],\n): readonly Precondition[] {\n const preconditions: Precondition[] = [];\n const seen = new Set<string>();\n const add = (precondition: Precondition) => {\n const part =\n precondition.kind === 'field' || precondition.kind === 'section' ? precondition.name : '';\n const identity = `${precondition.kind} ${precondition.path} ${part}`;\n if (seen.has(identity)) return;\n seen.add(identity);\n preconditions.push(precondition);\n };\n for (const change of changes) {\n if (change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble') {\n const based = bases.find((base) => sameTarget(base, change));\n if (based !== undefined) {\n add(based);\n continue;\n }\n const document = visible.collection.documents[change.path];\n if (change.kind === 'field') {\n add({\n kind: 'field',\n path: change.path,\n name: change.name,\n value: document.fields[change.name],\n });\n } else if (change.kind === 'section') {\n add({\n kind: 'section',\n path: change.path,\n name: change.name,\n value: document.sections[change.name],\n });\n } else add({ kind: 'preamble', path: change.path, value: document.preamble });\n continue;\n }\n if (change.kind === 'create') {\n add({ kind: 'absent', path: change.path });\n continue;\n }\n add(existence(visible, change.path));\n if (change.kind === 'move') add({ kind: 'absent', path: change.to });\n }\n return preconditions;\n}\n\nfunction depth(path: string) {\n return path.split('/').length;\n}\n\nfunction exceeded(\n limits: readonly ProviderLimit[],\n changes: readonly Change[],\n resulting: Layer,\n): BatchResult | null {\n const written = changes.map((change) => (change.kind === 'move' ? change.to : change.path));\n const created = changes\n .filter((change) => change.kind === 'create' || change.kind === 'move')\n .map((change) => (change.kind === 'move' ? change.to : change.path));\n for (const limit of limits) {\n const value = limit.value;\n if (typeof value !== 'number') continue;\n if (limit.name === 'change-batch-operations' && changes.length > value) {\n return refuse('provider-limit', undefined, limit.name);\n }\n if (limit.name === 'document-size') {\n const large = written.find((path) => (resulting.documents[path] ?? '').length > value);\n if (large !== undefined) return refuse('provider-limit', large, limit.name);\n }\n if (limit.name === 'path-length') {\n const long = created.find((path) => path.length > value);\n if (long !== undefined) return refuse('provider-limit', long, limit.name);\n }\n if (limit.name === 'path-depth') {\n const deep = created.find((path) => depth(path) > value);\n if (deep !== undefined) return refuse('provider-limit', deep, limit.name);\n }\n }\n return null;\n}\n\nexport function buildBatch(input: SaveInput): BatchResult {\n const structural = input.changes.find(\n (change) => change.kind === 'move' || change.kind === 'remove',\n );\n if (\n structural !== undefined &&\n Object.entries(input.visible.collection.documents).some(\n ([path, document]) =>\n document.type !== undefined &&\n document.type !== 'any' &&\n governing(input.composition, path).status === 'unavailable',\n )\n )\n return refuse('model-unavailable', structural.path);\n if (input.changes.length === 0) return refuse('no-change');\n const rewritten = rewrites(input.changes, input.visible);\n if (rewritten.kind === 'refused') return rewritten;\n const changes = input.rewriting === 'provider' ? input.changes : rewritten.changes;\n const refusal = guard(changes, input);\n if (refusal !== null) return refusal;\n const preconditions = preconditionsOf(changes, input.visible, input.bases);\n const predicted =\n input.rewriting === 'provider'\n ? anticipated(changes, preconditions, rewritten.changes, input.visible)\n : { changes, preconditions };\n const resulting = overlay(input.visible, [\n { id: '', baseRoomVersion: input.baseRoomVersion, ...predicted },\n ]);\n const removed = new Set(\n changes.filter((change) => change.kind === 'remove').map((change) => change.path),\n );\n if (removed.size > 0) {\n const referenced = incoming(parseCollection(resulting.documents, input.composition), removed);\n if (referenced !== null) return referenced;\n }\n const typed = (content: string | undefined) => {\n if (content === undefined) return false;\n const parsed = parse(content);\n return parsed.ok && parsed.document.type !== undefined && parsed.document.type !== 'any';\n };\n const typedPaths = [...new Set(predicted.changes.flatMap(affected))].filter(\n (path) => typed(input.visible.documents[path]) || typed(resulting.documents[path]),\n );\n const needsModel = typedPaths.length > 0;\n const withoutModel = typedPaths.find(\n (path) => governing(input.composition, path).status === 'unavailable',\n );\n if (withoutModel !== undefined) return refuse('model-unavailable', withoutModel);\n const validationText = needsModel\n ? resulting.documents\n : Object.fromEntries(\n Object.entries(resulting.documents).filter(([path]) =>\n predicted.changes.some((change) => affected(change).includes(path)),\n ),\n );\n const verdict = validateCollection(validationText, resulting.binaryTargets, input.composition);\n if (verdict.verdict === 'refuse') {\n return {\n kind: 'refused',\n refusal: {\n rule: verdict.rule,\n file: verdict.file,\n ...(verdict.location === undefined ? {} : { location: verdict.location }),\n ...(verdict.referrers === undefined ? {} : { referrers: verdict.referrers }),\n },\n };\n }\n const limited = exceeded(input.providerLimits, changes, resulting);\n if (limited !== null) return limited;\n const validated = typedPaths\n .map((path) => governing(input.composition, path))\n .find(\n (model): model is Extract<ModelState, { status: 'current' | 'cached' }> =>\n model.status !== 'unavailable',\n );\n return {\n kind: 'batch',\n batch: immutable({\n id: changeBatchIdentity(),\n baseRoomVersion: input.baseRoomVersion,\n changes,\n preconditions,\n ...(input.writtenBy === undefined ? {} : { writtenBy: input.writtenBy }),\n ...(validated === undefined\n ? {}\n : {\n validation: {\n identity: validated.snapshot.identity,\n version: validated.snapshot.version,\n source: validated.status,\n },\n }),\n }),\n };\n}\n"],"names":["definitionOf","apply","links","parse","retarget","serialize","target","immutable","governing","parseCollection","validateCollection","changeBatchIdentity","overlay","covered","normalize","relative","refuse","rule","file","location","kind","refusal","undefined","referenceField","spec","of","repointed","value","from","to","moves","Array","isArray","next","map","item","some","index","named","destination","get","edited","document","path","changes","change","applied","prior","preamble","name","sections","outcome","bodies","before","after","push","Object","entries","relinks","moved","link","href","type","content","subsumed","merged","length","splice","rewrites","visible","Map","settled","Set","set","add","size","added","collection","documents","has","definition","composition","fields","relinked","findIndex","anticipated","preconditions","rewritten","derived","filter","includes","preconditionsOf","providerRewritten","batch","targets","values","resolved","incoming","removed","found","note","referrers","first","keys","sort","every","affected","guard","input","existing","binaryTargets","normalized","providerOwnedPaths","operation","operations","unrevisionedDocument","delete","revisions","existence","revision","sameTarget","precondition","bases","seen","part","identity","based","find","base","depth","split","exceeded","limits","resulting","written","created","limit","large","long","deep","buildBatch","structural","status","rewriting","predicted","id","baseRoomVersion","referenced","typed","parsed","ok","typedPaths","flatMap","needsModel","withoutModel","validationText","fromEntries","verdict","limited","providerLimits","validated","model","writtenBy","validation","snapshot","version","source"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentshouse/mdruntime",
3
- "version": "0.1.0-alpha.32",
3
+ "version": "0.1.0-alpha.33",
4
4
  "description": "The headless core of MD App",
5
5
  "license": "MIT",
6
6
  "type": "module",