@agentshouse/mdruntime 0.1.0-alpha.30 → 0.1.0-alpha.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bootstrap.d.ts +2 -6
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +1 -5
- package/dist/bootstrap.js.map +1 -1
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +48 -4
- package/dist/connection.js.map +1 -1
- package/dist/refresh.d.ts +2 -2
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +4 -4
- package/dist/refresh.js.map +1 -1
- package/dist/replica.d.ts +7 -2
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +12 -2
- package/dist/replica.js.map +1 -1
- package/dist/transfer.d.ts +5 -0
- package/dist/transfer.d.ts.map +1 -1
- package/dist/transfer.js.map +1 -1
- package/package.json +1 -1
package/dist/bootstrap.d.ts
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import type { ModelState } from './model.js';
|
|
2
2
|
import type { Adapter, AdapterFailure, Authorization, DiscoveredRoom } from './adapter.js';
|
|
3
|
-
import { type
|
|
4
|
-
|
|
5
|
-
export type BootstrapOutcome = {
|
|
6
|
-
kind: 'staged';
|
|
7
|
-
confirmed: ConfirmedLayer;
|
|
8
|
-
} | Unconfirmed | AdapterFailure;
|
|
3
|
+
import { type Staged } from './replica.js';
|
|
4
|
+
export type BootstrapOutcome = Staged | AdapterFailure;
|
|
9
5
|
export declare function bootstrapRoom(adapter: Adapter, authorization: Authorization, room: DiscoveredRoom, models: {
|
|
10
6
|
collection: ModelState;
|
|
11
7
|
selection: ModelState;
|
package/dist/bootstrap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAc,KAAK,
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAGvD,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,cAAc,CAAC;AAEvD,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,UAAU,CAAA;CAAE,GACxD,OAAO,CAAC,gBAAgB,CAAC,CAwC3B"}
|
package/dist/bootstrap.js
CHANGED
|
@@ -28,7 +28,7 @@ export async function bootstrapRoom(adapter, authorization, room, models) {
|
|
|
28
28
|
for (const target of page.binaryTargets)binaryTargets.add(target);
|
|
29
29
|
pageToken = page.pageToken;
|
|
30
30
|
}
|
|
31
|
-
|
|
31
|
+
return readStaged({
|
|
32
32
|
locator: room.locator,
|
|
33
33
|
collectionRoot: room.collectionRoot,
|
|
34
34
|
name: room.name,
|
|
@@ -46,10 +46,6 @@ export async function bootstrapRoom(adapter, authorization, room, models) {
|
|
|
46
46
|
].sort(),
|
|
47
47
|
revisions
|
|
48
48
|
});
|
|
49
|
-
return confirmed === null ? unconfirmed : {
|
|
50
|
-
kind: 'staged',
|
|
51
|
-
confirmed
|
|
52
|
-
};
|
|
53
49
|
}
|
|
54
50
|
|
|
55
51
|
//# sourceMappingURL=bootstrap.js.map
|
package/dist/bootstrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/workspace/packages/mdruntime/src/bootstrap.ts"],"sourcesContent":["import type { ModelState } from './model.js';\nimport type { Adapter, AdapterFailure, Authorization, DiscoveredRoom } from './adapter.js';\nimport { readStaged, type
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/bootstrap.ts"],"sourcesContent":["import type { ModelState } from './model.js';\nimport type { Adapter, AdapterFailure, Authorization, DiscoveredRoom } from './adapter.js';\nimport { readStaged, type Staged } from './replica.js';\nimport { unconfirmed } from './transfer.js';\n\nexport type BootstrapOutcome = Staged | AdapterFailure;\n\nexport async function bootstrapRoom(\n adapter: Adapter,\n authorization: Authorization,\n room: DiscoveredRoom,\n models: { collection: ModelState; selection: ModelState },\n): Promise<BootstrapOutcome> {\n const first = await adapter.bootstrap(authorization, {\n locator: room.locator,\n selection: room.replica.selection,\n });\n if (first.kind !== 'bootstrap') return first;\n const roomVersion = first.roomVersion;\n const documents: Record<string, string> = { ...first.documents };\n const revisions: Record<string, string> = { ...first.revisions };\n const binaryTargets = new Set(first.binaryTargets);\n let pageToken = first.pageToken;\n while (pageToken !== undefined) {\n const page = await adapter.bootstrap(authorization, {\n locator: room.locator,\n selection: room.replica.selection,\n pageToken,\n });\n if (page.kind !== 'bootstrap') return page;\n if (page.roomVersion !== roomVersion) return unconfirmed;\n Object.assign(documents, page.documents);\n Object.assign(revisions, page.revisions);\n for (const target of page.binaryTargets) binaryTargets.add(target);\n pageToken = page.pageToken;\n }\n return readStaged({\n locator: room.locator,\n collectionRoot: room.collectionRoot,\n name: room.name,\n operations: room.operations,\n replica: room.replica,\n attachedModel: room.attachedModel,\n model: models.collection,\n typedSelection: room.typedSelection ?? null,\n selectionModel: models.selection,\n providerOwnedPaths: room.providerOwnedPaths,\n roomVersion,\n documents,\n binaryTargets: [...binaryTargets].sort(),\n revisions,\n });\n}\n"],"names":["readStaged","unconfirmed","bootstrapRoom","adapter","authorization","room","models","first","bootstrap","locator","selection","replica","kind","roomVersion","documents","revisions","binaryTargets","Set","pageToken","undefined","page","Object","assign","target","add","collectionRoot","name","operations","attachedModel","model","collection","typedSelection","selectionModel","providerOwnedPaths","sort"],"mappings":"AAEA,SAASA,UAAU,QAAqB,eAAe;AACvD,SAASC,WAAW,QAAQ,gBAAgB;AAI5C,OAAO,eAAeC,cACpBC,OAAgB,EAChBC,aAA4B,EAC5BC,IAAoB,EACpBC,MAAyD;IAEzD,MAAMC,QAAQ,MAAMJ,QAAQK,SAAS,CAACJ,eAAe;QACnDK,SAASJ,KAAKI,OAAO;QACrBC,WAAWL,KAAKM,OAAO,CAACD,SAAS;IACnC;IACA,IAAIH,MAAMK,IAAI,KAAK,aAAa,OAAOL;IACvC,MAAMM,cAAcN,MAAMM,WAAW;IACrC,MAAMC,YAAoC;QAAE,GAAGP,MAAMO,SAAS;IAAC;IAC/D,MAAMC,YAAoC;QAAE,GAAGR,MAAMQ,SAAS;IAAC;IAC/D,MAAMC,gBAAgB,IAAIC,IAAIV,MAAMS,aAAa;IACjD,IAAIE,YAAYX,MAAMW,SAAS;IAC/B,MAAOA,cAAcC,UAAW;QAC9B,MAAMC,OAAO,MAAMjB,QAAQK,SAAS,CAACJ,eAAe;YAClDK,SAASJ,KAAKI,OAAO;YACrBC,WAAWL,KAAKM,OAAO,CAACD,SAAS;YACjCQ;QACF;QACA,IAAIE,KAAKR,IAAI,KAAK,aAAa,OAAOQ;QACtC,IAAIA,KAAKP,WAAW,KAAKA,aAAa,OAAOZ;QAC7CoB,OAAOC,MAAM,CAACR,WAAWM,KAAKN,SAAS;QACvCO,OAAOC,MAAM,CAACP,WAAWK,KAAKL,SAAS;QACvC,KAAK,MAAMQ,UAAUH,KAAKJ,aAAa,CAAEA,cAAcQ,GAAG,CAACD;QAC3DL,YAAYE,KAAKF,SAAS;IAC5B;IACA,OAAOlB,WAAW;QAChBS,SAASJ,KAAKI,OAAO;QACrBgB,gBAAgBpB,KAAKoB,cAAc;QACnCC,MAAMrB,KAAKqB,IAAI;QACfC,YAAYtB,KAAKsB,UAAU;QAC3BhB,SAASN,KAAKM,OAAO;QACrBiB,eAAevB,KAAKuB,aAAa;QACjCC,OAAOvB,OAAOwB,UAAU;QACxBC,gBAAgB1B,KAAK0B,cAAc,IAAI;QACvCC,gBAAgB1B,OAAOI,SAAS;QAChCuB,oBAAoB5B,KAAK4B,kBAAkB;QAC3CpB;QACAC;QACAE,eAAe;eAAIA;SAAc,CAACkB,IAAI;QACtCnB;IACF;AACF"}
|
package/dist/connection.d.ts.map
CHANGED
|
@@ -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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"}
|
package/dist/connection.js
CHANGED
|
@@ -66,6 +66,7 @@ export function composeRuntime(options) {
|
|
|
66
66
|
const discovered = new Map();
|
|
67
67
|
let roomsListed = false;
|
|
68
68
|
const scopedRefusals = new Map();
|
|
69
|
+
const sourceRefusals = new Map();
|
|
69
70
|
function modelKey(locator, attached) {
|
|
70
71
|
return `${attached} ${locator}`;
|
|
71
72
|
}
|
|
@@ -423,7 +424,7 @@ export function composeRuntime(options) {
|
|
|
423
424
|
providerOwnedPaths: room.providerOwnedPaths,
|
|
424
425
|
roomVersion: replicas.get(room.locator)?.confirmed.record.roomVersion ?? null,
|
|
425
426
|
synchronizationAvailable,
|
|
426
|
-
refusal: scopedRefusals.get(room.locator) ?? null
|
|
427
|
+
refusal: scopedRefusals.get(room.locator) ?? sourceRefusals.get(room.locator) ?? null
|
|
427
428
|
});
|
|
428
429
|
}
|
|
429
430
|
async function applyDiscovery(listed, local) {
|
|
@@ -475,6 +476,7 @@ export function composeRuntime(options) {
|
|
|
475
476
|
roomDrafts.delete(locator);
|
|
476
477
|
unreadable.delete(locator);
|
|
477
478
|
scopedRefusals.delete(locator);
|
|
479
|
+
sourceRefusals.delete(locator);
|
|
478
480
|
for (const attached of [
|
|
479
481
|
'collection',
|
|
480
482
|
'typed-selection'
|
|
@@ -729,6 +731,7 @@ export function composeRuntime(options) {
|
|
|
729
731
|
room: true
|
|
730
732
|
});
|
|
731
733
|
unreadable.delete(room.locator);
|
|
734
|
+
sourceRefusals.delete(room.locator);
|
|
732
735
|
list(room, true);
|
|
733
736
|
publishChangeSet(set);
|
|
734
737
|
moveTo({
|
|
@@ -984,6 +987,7 @@ export function composeRuntime(options) {
|
|
|
984
987
|
if (held !== undefined) {
|
|
985
988
|
const refreshed = await pullRefresh(authorized, held.confirmed);
|
|
986
989
|
if (refreshed.kind === 'still-current') {
|
|
990
|
+
sourceRefusals.delete(room.locator);
|
|
987
991
|
if (unreadable.delete(room.locator)) {
|
|
988
992
|
list(room, true);
|
|
989
993
|
emitRooms();
|
|
@@ -1013,12 +1017,33 @@ export function composeRuntime(options) {
|
|
|
1013
1017
|
unreadable.add(room.locator);
|
|
1014
1018
|
list(room, false);
|
|
1015
1019
|
emitRooms();
|
|
1020
|
+
} else if (withheld.kind === 'refused') {
|
|
1021
|
+
refusedSource(room, withheld);
|
|
1016
1022
|
} else if (withheld.kind === 'revoked-authorization') {
|
|
1017
1023
|
await refuse('revoked-authorization');
|
|
1018
1024
|
return 'stop';
|
|
1019
1025
|
}
|
|
1020
1026
|
return null;
|
|
1021
1027
|
}
|
|
1028
|
+
function refusedSource(room, { refusal }) {
|
|
1029
|
+
sourceRefusals.set(room.locator, {
|
|
1030
|
+
code: refusal.rule,
|
|
1031
|
+
fields: {
|
|
1032
|
+
file: refusal.file,
|
|
1033
|
+
...refusal.location === undefined ? {} : {
|
|
1034
|
+
location: refusal.location
|
|
1035
|
+
},
|
|
1036
|
+
version: refusal.version,
|
|
1037
|
+
...refusal.referrers === undefined ? {} : {
|
|
1038
|
+
referrers: refusal.referrers
|
|
1039
|
+
}
|
|
1040
|
+
}
|
|
1041
|
+
});
|
|
1042
|
+
unreadable.add(room.locator);
|
|
1043
|
+
list(room, false);
|
|
1044
|
+
emitRooms();
|
|
1045
|
+
journal.record(`source refused ${room.locator} ${refusal.rule} ${refusal.file}`);
|
|
1046
|
+
}
|
|
1022
1047
|
function leaving(batch, result) {
|
|
1023
1048
|
if (result.kind === 'expired') {
|
|
1024
1049
|
return {
|
|
@@ -1077,8 +1102,13 @@ export function composeRuntime(options) {
|
|
|
1077
1102
|
selectionModel: modelOf(room.locator, 'typed-selection')
|
|
1078
1103
|
}, base);
|
|
1079
1104
|
if (retainedBase === null) return false;
|
|
1080
|
-
|
|
1081
|
-
if (
|
|
1105
|
+
let applied = retainedBase;
|
|
1106
|
+
if (overlay) {
|
|
1107
|
+
const returned = applyReturned(retainedBase, accepted.documents, accepted.revisions, accepted.removals, accepted.roomVersion);
|
|
1108
|
+
if (returned.kind === 'refused') refusedSource(room, returned);
|
|
1109
|
+
if (returned.kind !== 'staged') return false;
|
|
1110
|
+
applied = returned.confirmed;
|
|
1111
|
+
}
|
|
1082
1112
|
const acceptedOutcome = {
|
|
1083
1113
|
kind: 'accepted',
|
|
1084
1114
|
roomVersion: accepted.roomVersion,
|
|
@@ -1097,6 +1127,7 @@ export function composeRuntime(options) {
|
|
|
1097
1127
|
room: true
|
|
1098
1128
|
});
|
|
1099
1129
|
unreadable.delete(room.locator);
|
|
1130
|
+
sourceRefusals.delete(room.locator);
|
|
1100
1131
|
list(room, true);
|
|
1101
1132
|
publishChangeSet(set);
|
|
1102
1133
|
moveTo({
|
|
@@ -1250,6 +1281,8 @@ export function composeRuntime(options) {
|
|
|
1250
1281
|
unreadable.add(room.locator);
|
|
1251
1282
|
list(room, false);
|
|
1252
1283
|
emitRooms();
|
|
1284
|
+
} else if (bootstrapped.kind === 'refused') {
|
|
1285
|
+
refusedSource(room, bootstrapped);
|
|
1253
1286
|
}
|
|
1254
1287
|
return null;
|
|
1255
1288
|
}
|
|
@@ -1260,6 +1293,8 @@ export function composeRuntime(options) {
|
|
|
1260
1293
|
unreadable.add(room.locator);
|
|
1261
1294
|
list(room, false);
|
|
1262
1295
|
emitRooms();
|
|
1296
|
+
} else if (pulled.kind === 'refused') {
|
|
1297
|
+
refusedSource(room, pulled);
|
|
1263
1298
|
}
|
|
1264
1299
|
return null;
|
|
1265
1300
|
}
|
|
@@ -1704,10 +1739,19 @@ export function composeRuntime(options) {
|
|
|
1704
1739
|
if (handed?.includes(locator) !== true) continue;
|
|
1705
1740
|
const room = discovered.get(locator);
|
|
1706
1741
|
const held = replicas.get(locator);
|
|
1707
|
-
if (room === undefined
|
|
1742
|
+
if (room === undefined) continue;
|
|
1743
|
+
if (sourceRefusals.has(locator)) {
|
|
1744
|
+
void enqueue();
|
|
1745
|
+
continue;
|
|
1746
|
+
}
|
|
1747
|
+
if (held === undefined) continue;
|
|
1708
1748
|
if (held.confirmed.record.roomVersion === roomVersion) continue;
|
|
1709
1749
|
const withheld = await advance(room, local, authorization);
|
|
1710
1750
|
if (withheld === null) continue;
|
|
1751
|
+
if (withheld.kind === 'refused') {
|
|
1752
|
+
void enqueue();
|
|
1753
|
+
continue;
|
|
1754
|
+
}
|
|
1711
1755
|
if (withheld.kind === 'scoped-refusal') {
|
|
1712
1756
|
await scoped(withheld, room, local);
|
|
1713
1757
|
continue;
|
package/dist/connection.js.map
CHANGED
|
@@ -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 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 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 };\n\ntype PresentationSubscription = {\n app: string;\n notify: (value: unknown) => void;\n ready: boolean;\n};\n\ntype Withheld = AdapterFailure | Unconfirmed;\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 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 confirmed = readConfirmed(record, before.confirmed);\n if (confirmed === null) throw new Error(`Cannot retype revoked Room ${locator}`);\n replicas.set(locator, replicaOf(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) ?? 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 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 confirmed = readConfirmed({ ...record, model, selectionModel }, prior?.confirmed);\n if (confirmed === null) continue;\n replicas.set(\n record.locator,\n replicaOf(confirmed, queuedBatches.get(record.locator) ?? [], rewriting(), prior),\n );\n const existing = rooms.get(record.locator);\n if (existing === undefined) list(record, false);\n else {\n rooms.set(record.locator, {\n ...existing,\n roomVersion: record.roomVersion,\n operations: record.operations,\n replica: record.replica,\n attachedModel: record.attachedModel,\n model: modelTypes(model),\n typedSelection:\n record.typedSelection === null\n ? null\n : {\n roots: record.typedSelection.roots,\n attachedModel: record.typedSelection.attachedModel,\n model: modelTypes(selectionModel),\n },\n });\n }\n }\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 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 === null) {\n list(room, true);\n publishChangeSet(changeSet(room.locator, prior ?? null, prior ?? null, { room: true }));\n return;\n }\n const set = await settle(local, room.locator, prior, retained, prior?.queue ?? [], {\n room: true,\n });\n unreadable.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 (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 === 'revoked-authorization') {\n await refuse('revoked-authorization');\n return 'stop';\n }\n return null;\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 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<boolean> {\n const current = replicas.get(room.locator);\n if (current === undefined || !current.queue.some((batch) => batch.id === submitted.id)) {\n return true;\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 if (retainedBase === null) return false;\n const applied = overlay\n ? applyReturned(\n retainedBase,\n accepted.documents,\n accepted.revisions,\n accepted.removals,\n accepted.roomVersion,\n )\n : retainedBase;\n if (applied === null) return false;\n const acceptedOutcome: SubmissionOutcome = {\n kind: 'accepted',\n roomVersion: accepted.roomVersion,\n ...(accepted.author === undefined ? {} : { author: accepted.author }),\n ...(accepted.time === undefined ? {} : { time: accepted.time }),\n };\n const set = await settle(local, room.locator, current, applied, remaining, {\n accepted: { id: submitted.id, outcome: acceptedOutcome },\n room: true,\n });\n unreadable.delete(room.locator);\n list(room, true);\n publishChangeSet(set);\n moveTo({ ...status, ...attention() });\n journal.record(\n `outcome ${room.locator} ${submitted.id} accepted ${accepted.roomVersion}` +\n (accepted.author === undefined ? '' : ` author ${accepted.author}`) +\n (accepted.time === undefined ? '' : ` time ${accepted.time}`),\n );\n return true;\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 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 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 { leaving: left },\n );\n publishChangeSet(set);\n moveTo({ ...status, ...attention() });\n });\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 const committed = await exclusive(() =>\n commitAccept(room, local, head, result, from, true),\n );\n if (!committed) {\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 const committed = await exclusive(() =>\n commitAccept(room, local, head, result, pulled.confirmed, overlay),\n );\n if (!committed) {\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 const committed = await exclusive(() =>\n commitAccept(room, local, head, result, bootstrapped.confirmed, overlay),\n );\n if (!committed) {\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 }\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 }\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 confirmed = readConfirmed(record, held.confirmed);\n if (confirmed !== null) {\n replicas.set(room.locator, replicaOf(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 || 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 === '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","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","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","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","read","readState","open","shell","generation","storedGeneration","loss","rememberGeneration","keepGeneration","work","catch","error","then","withdrawable","lost","settle","settling","withdrawn","includes","returning","kind","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","fields","affected","commitAccept","submitted","base","overlay","remaining","retainedBase","applied","revisions","removals","acceptedOutcome","author","time","submitRoom","head","earlier","Date","now","parse","mutate","changeBatch","from","pulled","committed","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 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 };\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 confirmed = readConfirmed(record, before.confirmed);\n if (confirmed === null) throw new Error(`Cannot retype revoked Room ${locator}`);\n replicas.set(locator, replicaOf(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 confirmed = readConfirmed({ ...record, model, selectionModel }, prior?.confirmed);\n if (confirmed === null) continue;\n replicas.set(\n record.locator,\n replicaOf(confirmed, queuedBatches.get(record.locator) ?? [], rewriting(), prior),\n );\n const existing = rooms.get(record.locator);\n if (existing === undefined) list(record, false);\n else {\n rooms.set(record.locator, {\n ...existing,\n roomVersion: record.roomVersion,\n operations: record.operations,\n replica: record.replica,\n attachedModel: record.attachedModel,\n model: modelTypes(model),\n typedSelection:\n record.typedSelection === null\n ? null\n : {\n roots: record.typedSelection.roots,\n attachedModel: record.typedSelection.attachedModel,\n model: modelTypes(selectionModel),\n },\n });\n }\n }\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 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 === null) {\n list(room, true);\n publishChangeSet(changeSet(room.locator, prior ?? null, prior ?? null, { room: true }));\n return;\n }\n const set = await settle(local, room.locator, prior, retained, prior?.queue ?? [], {\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 });\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 sourceRefusals.delete(room.locator);\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 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<boolean> {\n const current = replicas.get(room.locator);\n if (current === undefined || !current.queue.some((batch) => batch.id === submitted.id)) {\n return true;\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 if (retainedBase === null) return false;\n let applied = retainedBase;\n if (overlay) {\n const returned = applyReturned(\n retainedBase,\n accepted.documents,\n accepted.revisions,\n accepted.removals,\n accepted.roomVersion,\n );\n if (returned.kind === 'refused') refusedSource(room, returned);\n if (returned.kind !== 'staged') return false;\n applied = returned.confirmed;\n }\n const acceptedOutcome: SubmissionOutcome = {\n kind: 'accepted',\n roomVersion: accepted.roomVersion,\n ...(accepted.author === undefined ? {} : { author: accepted.author }),\n ...(accepted.time === undefined ? {} : { time: accepted.time }),\n };\n const set = await settle(local, room.locator, current, applied, remaining, {\n accepted: { id: submitted.id, outcome: acceptedOutcome },\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 journal.record(\n `outcome ${room.locator} ${submitted.id} accepted ${accepted.roomVersion}` +\n (accepted.author === undefined ? '' : ` author ${accepted.author}`) +\n (accepted.time === undefined ? '' : ` time ${accepted.time}`),\n );\n return true;\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 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 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 { leaving: left },\n );\n publishChangeSet(set);\n moveTo({ ...status, ...attention() });\n });\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 const committed = await exclusive(() =>\n commitAccept(room, local, head, result, from, true),\n );\n if (!committed) {\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 const committed = await exclusive(() =>\n commitAccept(room, local, head, result, pulled.confirmed, overlay),\n );\n if (!committed) {\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 const committed = await exclusive(() =>\n commitAccept(room, local, head, result, bootstrapped.confirmed, overlay),\n );\n if (!committed) {\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 refusedSource(room, 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 refusedSource(room, 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 confirmed = readConfirmed(record, held.confirmed);\n if (confirmed !== null) {\n replicas.set(room.locator, replicaOf(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","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","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","read","readState","open","shell","generation","storedGeneration","loss","rememberGeneration","keepGeneration","work","catch","error","then","withdrawable","lost","settle","settling","withdrawn","includes","returning","kind","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","commitAccept","submitted","base","overlay","remaining","retainedBase","applied","revisions","removals","acceptedOutcome","author","time","submitRoom","head","earlier","Date","now","parse","mutate","changeBatch","from","pulled","committed","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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"}
|
package/dist/refresh.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Adapter, AdapterFailure, Authorization } from './adapter.js';
|
|
2
2
|
import { type ConfirmedLayer } from './replica.js';
|
|
3
|
-
import { type Unconfirmed } from './transfer.js';
|
|
3
|
+
import { type Refused, type Unconfirmed } from './transfer.js';
|
|
4
4
|
export type RefreshOutcome = {
|
|
5
5
|
kind: 'still-current';
|
|
6
6
|
} | {
|
|
@@ -8,6 +8,6 @@ export type RefreshOutcome = {
|
|
|
8
8
|
confirmed: ConfirmedLayer;
|
|
9
9
|
} | {
|
|
10
10
|
kind: 'beyond-horizon';
|
|
11
|
-
} | Unconfirmed | AdapterFailure;
|
|
11
|
+
} | Unconfirmed | Refused | AdapterFailure;
|
|
12
12
|
export declare function refreshRoom(adapter: Adapter, authorization: Authorization, confirmed: ConfirmedLayer): Promise<RefreshOutcome>;
|
|
13
13
|
//# sourceMappingURL=refresh.d.ts.map
|
package/dist/refresh.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../src/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAe,MAAM,cAAc,CAAC;AACxF,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../src/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAe,MAAM,cAAc,CAAC;AACxF,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAe,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,cAAc,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B,WAAW,GACX,OAAO,GACP,cAAc,CAAC;AAEnB,wBAAsB,WAAW,CAC/B,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,cAAc,GACxB,OAAO,CAAC,cAAc,CAAC,CAsDzB"}
|
package/dist/refresh.js
CHANGED
|
@@ -47,7 +47,7 @@ export async function refreshRoom(adapter, authorization, confirmed) {
|
|
|
47
47
|
stage(page);
|
|
48
48
|
pageToken = page.pageToken;
|
|
49
49
|
}
|
|
50
|
-
const
|
|
50
|
+
const staged = readStaged({
|
|
51
51
|
...confirmed.record,
|
|
52
52
|
roomVersion,
|
|
53
53
|
documents,
|
|
@@ -56,10 +56,10 @@ export async function refreshRoom(adapter, authorization, confirmed) {
|
|
|
56
56
|
].sort(),
|
|
57
57
|
revisions
|
|
58
58
|
}, confirmed);
|
|
59
|
-
return
|
|
59
|
+
return staged.kind === 'staged' ? {
|
|
60
60
|
kind: 'advanced',
|
|
61
|
-
confirmed:
|
|
62
|
-
};
|
|
61
|
+
confirmed: staged.confirmed
|
|
62
|
+
} : staged;
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
//# sourceMappingURL=refresh.js.map
|
package/dist/refresh.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/workspace/packages/mdruntime/src/refresh.ts"],"sourcesContent":["import type { Adapter, AdapterFailure, Authorization, RefreshPage } from './adapter.js';\nimport { readStaged, type ConfirmedLayer } from './replica.js';\nimport { unconfirmed, type Unconfirmed } from './transfer.js';\n\nexport type RefreshOutcome =\n | { kind: 'still-current' }\n | { kind: 'advanced'; confirmed: ConfirmedLayer }\n | { kind: 'beyond-horizon' }\n | Unconfirmed\n | AdapterFailure;\n\nexport async function refreshRoom(\n adapter: Adapter,\n authorization: Authorization,\n confirmed: ConfirmedLayer,\n): Promise<RefreshOutcome> {\n const locator = confirmed.record.locator;\n const fromRoomVersion = confirmed.record.roomVersion;\n const first = await adapter.refresh(authorization, {\n locator,\n selection: confirmed.record.replica.selection,\n fromRoomVersion,\n });\n if (first.kind !== 'net-advancement') return first;\n const roomVersion = first.roomVersion;\n const documents: Record<string, string> = { ...confirmed.record.documents };\n const revisions: Record<string, string> = { ...confirmed.record.revisions };\n const binaryTargets = new Set(confirmed.record.binaryTargets);\n const stage = (page: RefreshPage) => {\n Object.assign(documents, page.documents);\n Object.assign(revisions, page.revisions);\n for (const path of Object.keys(page.documents)) binaryTargets.delete(path);\n for (const target of page.binaryTargets) {\n delete documents[target];\n delete revisions[target];\n binaryTargets.add(target);\n }\n for (const path of page.removals) {\n delete documents[path];\n delete revisions[path];\n binaryTargets.delete(path);\n }\n };\n stage(first);\n let pageToken = first.pageToken;\n while (pageToken !== undefined) {\n const page = await adapter.refresh(authorization, {\n locator,\n selection: confirmed.record.replica.selection,\n fromRoomVersion,\n pageToken,\n });\n if (page.kind === 'still-current' || page.kind === 'beyond-horizon') return unconfirmed;\n if (page.kind !== 'net-advancement') return page;\n if (page.roomVersion !== roomVersion) return unconfirmed;\n stage(page);\n pageToken = page.pageToken;\n }\n const
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/refresh.ts"],"sourcesContent":["import type { Adapter, AdapterFailure, Authorization, RefreshPage } from './adapter.js';\nimport { readStaged, type ConfirmedLayer } from './replica.js';\nimport { unconfirmed, type Refused, type Unconfirmed } from './transfer.js';\n\nexport type RefreshOutcome =\n | { kind: 'still-current' }\n | { kind: 'advanced'; confirmed: ConfirmedLayer }\n | { kind: 'beyond-horizon' }\n | Unconfirmed\n | Refused\n | AdapterFailure;\n\nexport async function refreshRoom(\n adapter: Adapter,\n authorization: Authorization,\n confirmed: ConfirmedLayer,\n): Promise<RefreshOutcome> {\n const locator = confirmed.record.locator;\n const fromRoomVersion = confirmed.record.roomVersion;\n const first = await adapter.refresh(authorization, {\n locator,\n selection: confirmed.record.replica.selection,\n fromRoomVersion,\n });\n if (first.kind !== 'net-advancement') return first;\n const roomVersion = first.roomVersion;\n const documents: Record<string, string> = { ...confirmed.record.documents };\n const revisions: Record<string, string> = { ...confirmed.record.revisions };\n const binaryTargets = new Set(confirmed.record.binaryTargets);\n const stage = (page: RefreshPage) => {\n Object.assign(documents, page.documents);\n Object.assign(revisions, page.revisions);\n for (const path of Object.keys(page.documents)) binaryTargets.delete(path);\n for (const target of page.binaryTargets) {\n delete documents[target];\n delete revisions[target];\n binaryTargets.add(target);\n }\n for (const path of page.removals) {\n delete documents[path];\n delete revisions[path];\n binaryTargets.delete(path);\n }\n };\n stage(first);\n let pageToken = first.pageToken;\n while (pageToken !== undefined) {\n const page = await adapter.refresh(authorization, {\n locator,\n selection: confirmed.record.replica.selection,\n fromRoomVersion,\n pageToken,\n });\n if (page.kind === 'still-current' || page.kind === 'beyond-horizon') return unconfirmed;\n if (page.kind !== 'net-advancement') return page;\n if (page.roomVersion !== roomVersion) return unconfirmed;\n stage(page);\n pageToken = page.pageToken;\n }\n const staged = readStaged(\n {\n ...confirmed.record,\n roomVersion,\n documents,\n binaryTargets: [...binaryTargets].sort(),\n revisions,\n },\n confirmed,\n );\n return staged.kind === 'staged' ? { kind: 'advanced', confirmed: staged.confirmed } : staged;\n}\n"],"names":["readStaged","unconfirmed","refreshRoom","adapter","authorization","confirmed","locator","record","fromRoomVersion","roomVersion","first","refresh","selection","replica","kind","documents","revisions","binaryTargets","Set","stage","page","Object","assign","path","keys","delete","target","add","removals","pageToken","undefined","staged","sort"],"mappings":"AACA,SAASA,UAAU,QAA6B,eAAe;AAC/D,SAASC,WAAW,QAAwC,gBAAgB;AAU5E,OAAO,eAAeC,YACpBC,OAAgB,EAChBC,aAA4B,EAC5BC,SAAyB;IAEzB,MAAMC,UAAUD,UAAUE,MAAM,CAACD,OAAO;IACxC,MAAME,kBAAkBH,UAAUE,MAAM,CAACE,WAAW;IACpD,MAAMC,QAAQ,MAAMP,QAAQQ,OAAO,CAACP,eAAe;QACjDE;QACAM,WAAWP,UAAUE,MAAM,CAACM,OAAO,CAACD,SAAS;QAC7CJ;IACF;IACA,IAAIE,MAAMI,IAAI,KAAK,mBAAmB,OAAOJ;IAC7C,MAAMD,cAAcC,MAAMD,WAAW;IACrC,MAAMM,YAAoC;QAAE,GAAGV,UAAUE,MAAM,CAACQ,SAAS;IAAC;IAC1E,MAAMC,YAAoC;QAAE,GAAGX,UAAUE,MAAM,CAACS,SAAS;IAAC;IAC1E,MAAMC,gBAAgB,IAAIC,IAAIb,UAAUE,MAAM,CAACU,aAAa;IAC5D,MAAME,QAAQ,CAACC;QACbC,OAAOC,MAAM,CAACP,WAAWK,KAAKL,SAAS;QACvCM,OAAOC,MAAM,CAACN,WAAWI,KAAKJ,SAAS;QACvC,KAAK,MAAMO,QAAQF,OAAOG,IAAI,CAACJ,KAAKL,SAAS,EAAGE,cAAcQ,MAAM,CAACF;QACrE,KAAK,MAAMG,UAAUN,KAAKH,aAAa,CAAE;YACvC,OAAOF,SAAS,CAACW,OAAO;YACxB,OAAOV,SAAS,CAACU,OAAO;YACxBT,cAAcU,GAAG,CAACD;QACpB;QACA,KAAK,MAAMH,QAAQH,KAAKQ,QAAQ,CAAE;YAChC,OAAOb,SAAS,CAACQ,KAAK;YACtB,OAAOP,SAAS,CAACO,KAAK;YACtBN,cAAcQ,MAAM,CAACF;QACvB;IACF;IACAJ,MAAMT;IACN,IAAImB,YAAYnB,MAAMmB,SAAS;IAC/B,MAAOA,cAAcC,UAAW;QAC9B,MAAMV,OAAO,MAAMjB,QAAQQ,OAAO,CAACP,eAAe;YAChDE;YACAM,WAAWP,UAAUE,MAAM,CAACM,OAAO,CAACD,SAAS;YAC7CJ;YACAqB;QACF;QACA,IAAIT,KAAKN,IAAI,KAAK,mBAAmBM,KAAKN,IAAI,KAAK,kBAAkB,OAAOb;QAC5E,IAAImB,KAAKN,IAAI,KAAK,mBAAmB,OAAOM;QAC5C,IAAIA,KAAKX,WAAW,KAAKA,aAAa,OAAOR;QAC7CkB,MAAMC;QACNS,YAAYT,KAAKS,SAAS;IAC5B;IACA,MAAME,SAAS/B,WACb;QACE,GAAGK,UAAUE,MAAM;QACnBE;QACAM;QACAE,eAAe;eAAIA;SAAc,CAACe,IAAI;QACtChB;IACF,GACAX;IAEF,OAAO0B,OAAOjB,IAAI,KAAK,WAAW;QAAEA,MAAM;QAAYT,WAAW0B,OAAO1B,SAAS;IAAC,IAAI0B;AACxF"}
|
package/dist/replica.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { type Collection, type Composition } from './collection.js';
|
|
|
3
3
|
import { type Layer } from './overlay.js';
|
|
4
4
|
import { type Rewriting } from './save.js';
|
|
5
5
|
import type { ReplicaRecord } from './store.js';
|
|
6
|
+
import { type Refused, type Unconfirmed } from './transfer.js';
|
|
6
7
|
export type ConfirmedLayer = {
|
|
7
8
|
record: ReplicaRecord;
|
|
8
9
|
collection: Collection;
|
|
@@ -10,6 +11,10 @@ export type ConfirmedLayer = {
|
|
|
10
11
|
export type VisibleLayer = Layer & {
|
|
11
12
|
collection: Collection;
|
|
12
13
|
};
|
|
14
|
+
export type Staged = {
|
|
15
|
+
kind: 'staged';
|
|
16
|
+
confirmed: ConfirmedLayer;
|
|
17
|
+
} | Refused | Unconfirmed;
|
|
13
18
|
export type Replica = {
|
|
14
19
|
confirmed: ConfirmedLayer;
|
|
15
20
|
queue: readonly ChangeBatch[];
|
|
@@ -25,8 +30,8 @@ type ReplayStep = {
|
|
|
25
30
|
};
|
|
26
31
|
export declare function compositionOf(record: ReplicaRecord): Composition;
|
|
27
32
|
export declare function readConfirmed(record: ReplicaRecord, previous?: ConfirmedLayer): ConfirmedLayer | null;
|
|
28
|
-
export declare function readStaged(record: ReplicaRecord, previous?: ConfirmedLayer):
|
|
29
|
-
export declare function applyReturned(confirmed: ConfirmedLayer, documents: Readonly<Record<string, string>>, revisions: Readonly<Record<string, string>>, removals: readonly string[], roomVersion: string):
|
|
33
|
+
export declare function readStaged(record: ReplicaRecord, previous?: ConfirmedLayer): Staged;
|
|
34
|
+
export declare function applyReturned(confirmed: ConfirmedLayer, documents: Readonly<Record<string, string>>, revisions: Readonly<Record<string, string>>, removals: readonly string[], roomVersion: string): Staged;
|
|
30
35
|
export declare function replicaOf(confirmed: ConfirmedLayer, queue: readonly ChangeBatch[], rewriting: Rewriting, previous?: Replica): Replica;
|
|
31
36
|
export declare function withdrawals(confirmed: ConfirmedLayer, queue: readonly ChangeBatch[], withdrawable: (batch: ChangeBatch) => boolean, rewriting: Rewriting): readonly ChangeBatch[];
|
|
32
37
|
export {};
|
package/dist/replica.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replica.d.ts","sourceRoot":"","sources":["../src/replica.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,WAAW,EAAqB,MAAM,aAAa,CAAC;AAC7E,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAA0C,KAAK,KAAK,EAAE,MAAM,cAAc,CAAC;AAClF,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"replica.d.ts","sourceRoot":"","sources":["../src/replica.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,WAAW,EAAqB,MAAM,aAAa,CAAC;AAC7E,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAA0C,KAAK,KAAK,EAAE,MAAM,cAAc,CAAC;AAClF,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAe,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG;IACjC,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,cAAc,CAAA;CAAE,GAAG,OAAO,GAAG,WAAW,CAAC;AAE3F,MAAM,MAAM,OAAO,GAAG;IACpB,SAAS,EAAE,cAAc,CAAC;IAC1B,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IAC9B,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;CAC/B,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,KAAK,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,WAAW,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAEF,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,CAShE;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,EACrB,QAAQ,CAAC,EAAE,cAAc,GACxB,cAAc,GAAG,IAAI,CASvB;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,MAAM,CAmBnF;AAED,wBAAgB,aAAa,CAC3B,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC3C,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC3C,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,WAAW,EAAE,MAAM,GAClB,MAAM,CAmBR;AAuDD,wBAAgB,SAAS,CACvB,SAAS,EAAE,cAAc,EACzB,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,SAAS,EAAE,SAAS,EACpB,QAAQ,CAAC,EAAE,OAAO,GACjB,OAAO,CA2CT;AAyCD,wBAAgB,WAAW,CACzB,SAAS,EAAE,cAAc,EACzB,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,YAAY,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,EAC7C,SAAS,EAAE,SAAS,GACnB,SAAS,WAAW,EAAE,CAoBxB"}
|
package/dist/replica.js
CHANGED
|
@@ -4,6 +4,7 @@ import { parseCollection, readCollection, validateCollection } from './collectio
|
|
|
4
4
|
import { overlay, overlayChanged, sameLayerText } from './overlay.js';
|
|
5
5
|
import { providerRewritten } from './save.js';
|
|
6
6
|
import { equalValue } from './room-draft.js';
|
|
7
|
+
import { unconfirmed } from './transfer.js';
|
|
7
8
|
export function compositionOf(record) {
|
|
8
9
|
return {
|
|
9
10
|
collectionRoot: record.collectionRoot,
|
|
@@ -27,9 +28,18 @@ export function readConfirmed(record, previous) {
|
|
|
27
28
|
export function readStaged(record, previous) {
|
|
28
29
|
if ((record.model.status === 'current' || record.selectionModel.status === 'current') && (previous === undefined || !sameLayerText(record, previous.record) || record.model !== previous.record.model || record.selectionModel !== previous.record.selectionModel)) {
|
|
29
30
|
const verdict = validateCollection(record.documents, record.binaryTargets, compositionOf(record));
|
|
30
|
-
if (verdict.verdict === 'refuse' && verdict.rule !== 'model-unavailable')
|
|
31
|
+
if (verdict.verdict === 'refuse' && verdict.rule !== 'model-unavailable') {
|
|
32
|
+
return {
|
|
33
|
+
kind: 'refused',
|
|
34
|
+
refusal: verdict
|
|
35
|
+
};
|
|
36
|
+
}
|
|
31
37
|
}
|
|
32
|
-
|
|
38
|
+
const confirmed = readConfirmed(record, previous);
|
|
39
|
+
return confirmed === null ? unconfirmed : {
|
|
40
|
+
kind: 'staged',
|
|
41
|
+
confirmed
|
|
42
|
+
};
|
|
33
43
|
}
|
|
34
44
|
export function applyReturned(confirmed, documents, revisions, removals, roomVersion) {
|
|
35
45
|
const nextDocuments = {
|
package/dist/replica.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/workspace/packages/mdruntime/src/replica.ts"],"sourcesContent":["import { parse, type Document } from '@agentshouse/mdmodel';\nimport { immutable, type ChangeBatch, type Precondition } from './change.js';\nimport {\n parseCollection,\n readCollection,\n validateCollection,\n type Collection,\n type Composition,\n} from './collection.js';\nimport { overlay, overlayChanged, sameLayerText, type Layer } from './overlay.js';\nimport { providerRewritten, type Rewriting } from './save.js';\nimport { equalValue } from './room-draft.js';\nimport type { ReplicaRecord } from './store.js';\n\nexport type ConfirmedLayer = {\n record: ReplicaRecord;\n collection: Collection;\n};\n\nexport type VisibleLayer = Layer & {\n collection: Collection;\n};\n\nexport type Replica = {\n confirmed: ConfirmedLayer;\n queue: readonly ChangeBatch[];\n visible: VisibleLayer;\n replay: readonly ReplayStep[];\n};\n\ntype ReplayStep = {\n id: string;\n before: Layer;\n after: Layer;\n effective: ChangeBatch;\n collection?: Collection;\n};\n\nexport function compositionOf(record: ReplicaRecord): Composition {\n return {\n collectionRoot: record.collectionRoot,\n model: record.model,\n selection:\n record.typedSelection === null\n ? null\n : { roots: record.typedSelection.roots, model: record.selectionModel },\n };\n}\n\nexport function readConfirmed(\n record: ReplicaRecord,\n previous?: ConfirmedLayer,\n): ConfirmedLayer | null {\n const collection = readCollection(\n record.documents,\n compositionOf(record),\n previous === undefined\n ? undefined\n : { text: previous.record.documents, collection: previous.collection },\n );\n return collection === null ? null : { record, collection };\n}\n\nexport function readStaged(\n record: ReplicaRecord,\n previous?: ConfirmedLayer,\n): ConfirmedLayer | null {\n if (\n (record.model.status === 'current' || record.selectionModel.status === 'current') &&\n (previous === undefined ||\n !sameLayerText(record, previous.record) ||\n record.model !== previous.record.model ||\n record.selectionModel !== previous.record.selectionModel)\n ) {\n const verdict = validateCollection(\n record.documents,\n record.binaryTargets,\n compositionOf(record),\n );\n if (verdict.verdict === 'refuse' && verdict.rule !== 'model-unavailable') return null;\n }\n return readConfirmed(record, previous);\n}\n\nexport function applyReturned(\n confirmed: ConfirmedLayer,\n documents: Readonly<Record<string, string>>,\n revisions: Readonly<Record<string, string>>,\n removals: readonly string[],\n roomVersion: string,\n): ConfirmedLayer | null {\n const nextDocuments = { ...confirmed.record.documents, ...documents };\n const nextRevisions = { ...confirmed.record.revisions, ...revisions };\n const binaryTargets = new Set(confirmed.record.binaryTargets);\n for (const path of removals) {\n delete nextDocuments[path];\n delete nextRevisions[path];\n binaryTargets.delete(path);\n }\n return readStaged(\n {\n ...confirmed.record,\n roomVersion,\n documents: nextDocuments,\n revisions: nextRevisions,\n binaryTargets: [...binaryTargets].sort(),\n },\n confirmed,\n );\n}\n\nfunction predicted(\n confirmed: ConfirmedLayer,\n batches: readonly ChangeBatch[],\n previous?: Replica,\n): { layer: Layer; replay: readonly ReplayStep[] } {\n const composition = compositionOf(confirmed.record);\n let layer: Layer = confirmed.record;\n const replay: ReplayStep[] = [];\n const prior = new Map(previous?.replay.map((step) => [step.id, step]) ?? []);\n for (const batch of batches) {\n const before = layer;\n const old = prior.get(batch.id);\n const hasMove = batch.changes.some((change) => change.kind === 'move');\n const reuseRewrite =\n old?.collection !== undefined &&\n sameLayerText(before, old.before) &&\n old.collection.composition.collectionRoot === composition.collectionRoot &&\n old.collection.composition.model === composition.model &&\n old.collection.composition.selection?.model === composition.selection?.model &&\n JSON.stringify(old.collection.composition.selection?.roots) ===\n JSON.stringify(composition.selection?.roots);\n const collection = hasMove\n ? reuseRewrite\n ? old.collection\n : parseCollection(\n before.documents,\n composition,\n old?.collection === undefined\n ? { text: confirmed.record.documents, collection: confirmed.collection }\n : { text: old.before.documents, collection: old.collection },\n )\n : undefined;\n const effective =\n collection === undefined\n ? batch\n : reuseRewrite\n ? old.effective\n : providerRewritten(batch, { ...before, collection });\n layer =\n old === undefined\n ? overlay(before, [effective])\n : overlayChanged(before, [effective], old.before, [old.effective], old.after);\n replay.push({\n id: batch.id,\n before,\n after: layer,\n effective,\n ...(collection === undefined ? {} : { collection }),\n });\n }\n return { layer, replay };\n}\n\nexport function replicaOf(\n confirmed: ConfirmedLayer,\n queue: readonly ChangeBatch[],\n rewriting: Rewriting,\n previous?: Replica,\n): Replica {\n const batches = Object.freeze(queue.map(immutable));\n if (batches.length === 0) {\n return {\n confirmed,\n queue: batches,\n visible: {\n documents: confirmed.record.documents,\n binaryTargets: confirmed.record.binaryTargets,\n revisions: confirmed.record.revisions,\n collection: confirmed.collection,\n },\n replay: [],\n };\n }\n const predictedState = rewriting === 'provider' ? predicted(confirmed, batches, previous) : null;\n const layer =\n rewriting === 'provider'\n ? predictedState!.layer\n : previous === undefined\n ? overlay(confirmed.record, batches)\n : overlayChanged(\n confirmed.record,\n batches,\n previous.confirmed.record,\n previous.queue,\n previous.visible,\n );\n return {\n confirmed,\n queue: batches,\n replay: predictedState?.replay ?? [],\n visible: {\n ...layer,\n collection: parseCollection(\n layer.documents,\n compositionOf(confirmed.record),\n previous === undefined\n ? undefined\n : { text: previous.visible.documents, collection: previous.visible.collection },\n ),\n },\n };\n}\n\nfunction present(layer: Layer, path: string): boolean {\n return layer.documents[path] !== undefined || layer.binaryTargets.includes(path);\n}\n\nfunction holds(layer: Layer, preconditions: readonly Precondition[]): boolean {\n const parsed = new Map<string, Document | null>();\n const documentAt = (path: string) => {\n if (!parsed.has(path)) {\n const text = layer.documents[path];\n const opened = text === undefined ? null : parse(text, path);\n parsed.set(path, opened?.ok === true ? opened.document : null);\n }\n return parsed.get(path) ?? null;\n };\n return preconditions.every((precondition) => {\n const path = precondition.path;\n if (precondition.kind === 'absent') return !present(layer, path);\n if (precondition.kind === 'present') return present(layer, path);\n if (precondition.kind === 'revision') {\n return present(layer, path) && layer.revisions[path] === precondition.revision;\n }\n const document = documentAt(path);\n if (document === null) return false;\n if (precondition.kind === 'field') {\n const value = Object.hasOwn(document.fields, precondition.name)\n ? document.fields[precondition.name]\n : undefined;\n return equalValue(value, precondition.value);\n }\n if (precondition.kind === 'section') {\n return (\n Object.hasOwn(document.sections, precondition.name) &&\n document.sections[precondition.name] === precondition.value\n );\n }\n return document.preamble === precondition.value;\n });\n}\n\nexport function withdrawals(\n confirmed: ConfirmedLayer,\n queue: readonly ChangeBatch[],\n withdrawable: (batch: ChangeBatch) => boolean,\n rewriting: Rewriting,\n): readonly ChangeBatch[] {\n if (!queue.some(withdrawable)) return [];\n const composition = compositionOf(confirmed.record);\n let layer: Layer = confirmed.record;\n const withdrawn: ChangeBatch[] = [];\n for (const batch of queue) {\n if (withdrawable(batch) && !holds(layer, batch.preconditions)) {\n withdrawn.push(batch);\n continue;\n }\n const effective =\n rewriting === 'provider' && batch.changes.some((change) => change.kind === 'move')\n ? providerRewritten(batch, {\n ...layer,\n collection: parseCollection(layer.documents, composition),\n })\n : batch;\n layer = overlay(layer, [effective]);\n }\n return withdrawn;\n}\n"],"names":["parse","immutable","parseCollection","readCollection","validateCollection","overlay","overlayChanged","sameLayerText","providerRewritten","equalValue","compositionOf","record","collectionRoot","model","selection","typedSelection","roots","selectionModel","readConfirmed","previous","collection","documents","undefined","text","readStaged","status","verdict","binaryTargets","rule","applyReturned","confirmed","revisions","removals","roomVersion","nextDocuments","nextRevisions","Set","path","delete","sort","predicted","batches","composition","layer","replay","prior","Map","map","step","id","batch","before","old","get","hasMove","changes","some","change","kind","reuseRewrite","JSON","stringify","effective","after","push","replicaOf","queue","rewriting","Object","freeze","length","visible","predictedState","present","includes","holds","preconditions","parsed","documentAt","has","opened","set","ok","document","every","precondition","revision","value","hasOwn","fields","name","sections","preamble","withdrawals","withdrawable","withdrawn"],"mappings":"AAAA,SAASA,KAAK,QAAuB,uBAAuB;AAC5D,SAASC,SAAS,QAA6C,cAAc;AAC7E,SACEC,eAAe,EACfC,cAAc,EACdC,kBAAkB,QAGb,kBAAkB;AACzB,SAASC,OAAO,EAAEC,cAAc,EAAEC,aAAa,QAAoB,eAAe;AAClF,SAASC,iBAAiB,QAAwB,YAAY;AAC9D,SAASC,UAAU,QAAQ,kBAAkB;AA2B7C,OAAO,SAASC,cAAcC,MAAqB;IACjD,OAAO;QACLC,gBAAgBD,OAAOC,cAAc;QACrCC,OAAOF,OAAOE,KAAK;QACnBC,WACEH,OAAOI,cAAc,KAAK,OACtB,OACA;YAAEC,OAAOL,OAAOI,cAAc,CAACC,KAAK;YAAEH,OAAOF,OAAOM,cAAc;QAAC;IAC3E;AACF;AAEA,OAAO,SAASC,cACdP,MAAqB,EACrBQ,QAAyB;IAEzB,MAAMC,aAAajB,eACjBQ,OAAOU,SAAS,EAChBX,cAAcC,SACdQ,aAAaG,YACTA,YACA;QAAEC,MAAMJ,SAASR,MAAM,CAACU,SAAS;QAAED,YAAYD,SAASC,UAAU;IAAC;IAEzE,OAAOA,eAAe,OAAO,OAAO;QAAET;QAAQS;IAAW;AAC3D;AAEA,OAAO,SAASI,WACdb,MAAqB,EACrBQ,QAAyB;IAEzB,IACE,AAACR,CAAAA,OAAOE,KAAK,CAACY,MAAM,KAAK,aAAad,OAAOM,cAAc,CAACQ,MAAM,KAAK,SAAQ,KAC9EN,CAAAA,aAAaG,aACZ,CAACf,cAAcI,QAAQQ,SAASR,MAAM,KACtCA,OAAOE,KAAK,KAAKM,SAASR,MAAM,CAACE,KAAK,IACtCF,OAAOM,cAAc,KAAKE,SAASR,MAAM,CAACM,cAAc,AAAD,GACzD;QACA,MAAMS,UAAUtB,mBACdO,OAAOU,SAAS,EAChBV,OAAOgB,aAAa,EACpBjB,cAAcC;QAEhB,IAAIe,QAAQA,OAAO,KAAK,YAAYA,QAAQE,IAAI,KAAK,qBAAqB,OAAO;IACnF;IACA,OAAOV,cAAcP,QAAQQ;AAC/B;AAEA,OAAO,SAASU,cACdC,SAAyB,EACzBT,SAA2C,EAC3CU,SAA2C,EAC3CC,QAA2B,EAC3BC,WAAmB;IAEnB,MAAMC,gBAAgB;QAAE,GAAGJ,UAAUnB,MAAM,CAACU,SAAS;QAAE,GAAGA,SAAS;IAAC;IACpE,MAAMc,gBAAgB;QAAE,GAAGL,UAAUnB,MAAM,CAACoB,SAAS;QAAE,GAAGA,SAAS;IAAC;IACpE,MAAMJ,gBAAgB,IAAIS,IAAIN,UAAUnB,MAAM,CAACgB,aAAa;IAC5D,KAAK,MAAMU,QAAQL,SAAU;QAC3B,OAAOE,aAAa,CAACG,KAAK;QAC1B,OAAOF,aAAa,CAACE,KAAK;QAC1BV,cAAcW,MAAM,CAACD;IACvB;IACA,OAAOb,WACL;QACE,GAAGM,UAAUnB,MAAM;QACnBsB;QACAZ,WAAWa;QACXH,WAAWI;QACXR,eAAe;eAAIA;SAAc,CAACY,IAAI;IACxC,GACAT;AAEJ;AAEA,SAASU,UACPV,SAAyB,EACzBW,OAA+B,EAC/BtB,QAAkB;IAElB,MAAMuB,cAAchC,cAAcoB,UAAUnB,MAAM;IAClD,IAAIgC,QAAeb,UAAUnB,MAAM;IACnC,MAAMiC,SAAuB,EAAE;IAC/B,MAAMC,QAAQ,IAAIC,IAAI3B,UAAUyB,OAAOG,IAAI,CAACC,OAAS;YAACA,KAAKC,EAAE;YAAED;SAAK,KAAK,EAAE;IAC3E,KAAK,MAAME,SAAST,QAAS;QAC3B,MAAMU,SAASR;QACf,MAAMS,MAAMP,MAAMQ,GAAG,CAACH,MAAMD,EAAE;QAC9B,MAAMK,UAAUJ,MAAMK,OAAO,CAACC,IAAI,CAAC,CAACC,SAAWA,OAAOC,IAAI,KAAK;QAC/D,MAAMC,eACJP,KAAKhC,eAAeE,aACpBf,cAAc4C,QAAQC,IAAID,MAAM,KAChCC,IAAIhC,UAAU,CAACsB,WAAW,CAAC9B,cAAc,KAAK8B,YAAY9B,cAAc,IACxEwC,IAAIhC,UAAU,CAACsB,WAAW,CAAC7B,KAAK,KAAK6B,YAAY7B,KAAK,IACtDuC,IAAIhC,UAAU,CAACsB,WAAW,CAAC5B,SAAS,EAAED,UAAU6B,YAAY5B,SAAS,EAAED,SACvE+C,KAAKC,SAAS,CAACT,IAAIhC,UAAU,CAACsB,WAAW,CAAC5B,SAAS,EAAEE,WACnD4C,KAAKC,SAAS,CAACnB,YAAY5B,SAAS,EAAEE;QAC1C,MAAMI,aAAakC,UACfK,eACEP,IAAIhC,UAAU,GACdlB,gBACEiD,OAAO9B,SAAS,EAChBqB,aACAU,KAAKhC,eAAeE,YAChB;YAAEC,MAAMO,UAAUnB,MAAM,CAACU,SAAS;YAAED,YAAYU,UAAUV,UAAU;QAAC,IACrE;YAAEG,MAAM6B,IAAID,MAAM,CAAC9B,SAAS;YAAED,YAAYgC,IAAIhC,UAAU;QAAC,KAEjEE;QACJ,MAAMwC,YACJ1C,eAAeE,YACX4B,QACAS,eACEP,IAAIU,SAAS,GACbtD,kBAAkB0C,OAAO;YAAE,GAAGC,MAAM;YAAE/B;QAAW;QACzDuB,QACES,QAAQ9B,YACJjB,QAAQ8C,QAAQ;YAACW;SAAU,IAC3BxD,eAAe6C,QAAQ;YAACW;SAAU,EAAEV,IAAID,MAAM,EAAE;YAACC,IAAIU,SAAS;SAAC,EAAEV,IAAIW,KAAK;QAChFnB,OAAOoB,IAAI,CAAC;YACVf,IAAIC,MAAMD,EAAE;YACZE;YACAY,OAAOpB;YACPmB;YACA,GAAI1C,eAAeE,YAAY,CAAC,IAAI;gBAAEF;YAAW,CAAC;QACpD;IACF;IACA,OAAO;QAAEuB;QAAOC;IAAO;AACzB;AAEA,OAAO,SAASqB,UACdnC,SAAyB,EACzBoC,KAA6B,EAC7BC,SAAoB,EACpBhD,QAAkB;IAElB,MAAMsB,UAAU2B,OAAOC,MAAM,CAACH,MAAMnB,GAAG,CAAC9C;IACxC,IAAIwC,QAAQ6B,MAAM,KAAK,GAAG;QACxB,OAAO;YACLxC;YACAoC,OAAOzB;YACP8B,SAAS;gBACPlD,WAAWS,UAAUnB,MAAM,CAACU,SAAS;gBACrCM,eAAeG,UAAUnB,MAAM,CAACgB,aAAa;gBAC7CI,WAAWD,UAAUnB,MAAM,CAACoB,SAAS;gBACrCX,YAAYU,UAAUV,UAAU;YAClC;YACAwB,QAAQ,EAAE;QACZ;IACF;IACA,MAAM4B,iBAAiBL,cAAc,aAAa3B,UAAUV,WAAWW,SAAStB,YAAY;IAC5F,MAAMwB,QACJwB,cAAc,aACVK,eAAgB7B,KAAK,GACrBxB,aAAaG,YACXjB,QAAQyB,UAAUnB,MAAM,EAAE8B,WAC1BnC,eACEwB,UAAUnB,MAAM,EAChB8B,SACAtB,SAASW,SAAS,CAACnB,MAAM,EACzBQ,SAAS+C,KAAK,EACd/C,SAASoD,OAAO;IAE1B,OAAO;QACLzC;QACAoC,OAAOzB;QACPG,QAAQ4B,gBAAgB5B,UAAU,EAAE;QACpC2B,SAAS;YACP,GAAG5B,KAAK;YACRvB,YAAYlB,gBACVyC,MAAMtB,SAAS,EACfX,cAAcoB,UAAUnB,MAAM,GAC9BQ,aAAaG,YACTA,YACA;gBAAEC,MAAMJ,SAASoD,OAAO,CAAClD,SAAS;gBAAED,YAAYD,SAASoD,OAAO,CAACnD,UAAU;YAAC;QAEpF;IACF;AACF;AAEA,SAASqD,QAAQ9B,KAAY,EAAEN,IAAY;IACzC,OAAOM,MAAMtB,SAAS,CAACgB,KAAK,KAAKf,aAAaqB,MAAMhB,aAAa,CAAC+C,QAAQ,CAACrC;AAC7E;AAEA,SAASsC,MAAMhC,KAAY,EAAEiC,aAAsC;IACjE,MAAMC,SAAS,IAAI/B;IACnB,MAAMgC,aAAa,CAACzC;QAClB,IAAI,CAACwC,OAAOE,GAAG,CAAC1C,OAAO;YACrB,MAAMd,OAAOoB,MAAMtB,SAAS,CAACgB,KAAK;YAClC,MAAM2C,SAASzD,SAASD,YAAY,OAAOtB,MAAMuB,MAAMc;YACvDwC,OAAOI,GAAG,CAAC5C,MAAM2C,QAAQE,OAAO,OAAOF,OAAOG,QAAQ,GAAG;QAC3D;QACA,OAAON,OAAOxB,GAAG,CAAChB,SAAS;IAC7B;IACA,OAAOuC,cAAcQ,KAAK,CAAC,CAACC;QAC1B,MAAMhD,OAAOgD,aAAahD,IAAI;QAC9B,IAAIgD,aAAa3B,IAAI,KAAK,UAAU,OAAO,CAACe,QAAQ9B,OAAON;QAC3D,IAAIgD,aAAa3B,IAAI,KAAK,WAAW,OAAOe,QAAQ9B,OAAON;QAC3D,IAAIgD,aAAa3B,IAAI,KAAK,YAAY;YACpC,OAAOe,QAAQ9B,OAAON,SAASM,MAAMZ,SAAS,CAACM,KAAK,KAAKgD,aAAaC,QAAQ;QAChF;QACA,MAAMH,WAAWL,WAAWzC;QAC5B,IAAI8C,aAAa,MAAM,OAAO;QAC9B,IAAIE,aAAa3B,IAAI,KAAK,SAAS;YACjC,MAAM6B,QAAQnB,OAAOoB,MAAM,CAACL,SAASM,MAAM,EAAEJ,aAAaK,IAAI,IAC1DP,SAASM,MAAM,CAACJ,aAAaK,IAAI,CAAC,GAClCpE;YACJ,OAAOb,WAAW8E,OAAOF,aAAaE,KAAK;QAC7C;QACA,IAAIF,aAAa3B,IAAI,KAAK,WAAW;YACnC,OACEU,OAAOoB,MAAM,CAACL,SAASQ,QAAQ,EAAEN,aAAaK,IAAI,KAClDP,SAASQ,QAAQ,CAACN,aAAaK,IAAI,CAAC,KAAKL,aAAaE,KAAK;QAE/D;QACA,OAAOJ,SAASS,QAAQ,KAAKP,aAAaE,KAAK;IACjD;AACF;AAEA,OAAO,SAASM,YACd/D,SAAyB,EACzBoC,KAA6B,EAC7B4B,YAA6C,EAC7C3B,SAAoB;IAEpB,IAAI,CAACD,MAAMV,IAAI,CAACsC,eAAe,OAAO,EAAE;IACxC,MAAMpD,cAAchC,cAAcoB,UAAUnB,MAAM;IAClD,IAAIgC,QAAeb,UAAUnB,MAAM;IACnC,MAAMoF,YAA2B,EAAE;IACnC,KAAK,MAAM7C,SAASgB,MAAO;QACzB,IAAI4B,aAAa5C,UAAU,CAACyB,MAAMhC,OAAOO,MAAM0B,aAAa,GAAG;YAC7DmB,UAAU/B,IAAI,CAACd;YACf;QACF;QACA,MAAMY,YACJK,cAAc,cAAcjB,MAAMK,OAAO,CAACC,IAAI,CAAC,CAACC,SAAWA,OAAOC,IAAI,KAAK,UACvElD,kBAAkB0C,OAAO;YACvB,GAAGP,KAAK;YACRvB,YAAYlB,gBAAgByC,MAAMtB,SAAS,EAAEqB;QAC/C,KACAQ;QACNP,QAAQtC,QAAQsC,OAAO;YAACmB;SAAU;IACpC;IACA,OAAOiC;AACT"}
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/replica.ts"],"sourcesContent":["import { parse, type Document } from '@agentshouse/mdmodel';\nimport { immutable, type ChangeBatch, type Precondition } from './change.js';\nimport {\n parseCollection,\n readCollection,\n validateCollection,\n type Collection,\n type Composition,\n} from './collection.js';\nimport { overlay, overlayChanged, sameLayerText, type Layer } from './overlay.js';\nimport { providerRewritten, type Rewriting } from './save.js';\nimport { equalValue } from './room-draft.js';\nimport type { ReplicaRecord } from './store.js';\nimport { unconfirmed, type Refused, type Unconfirmed } from './transfer.js';\n\nexport type ConfirmedLayer = {\n record: ReplicaRecord;\n collection: Collection;\n};\n\nexport type VisibleLayer = Layer & {\n collection: Collection;\n};\n\nexport type Staged = { kind: 'staged'; confirmed: ConfirmedLayer } | Refused | Unconfirmed;\n\nexport type Replica = {\n confirmed: ConfirmedLayer;\n queue: readonly ChangeBatch[];\n visible: VisibleLayer;\n replay: readonly ReplayStep[];\n};\n\ntype ReplayStep = {\n id: string;\n before: Layer;\n after: Layer;\n effective: ChangeBatch;\n collection?: Collection;\n};\n\nexport function compositionOf(record: ReplicaRecord): Composition {\n return {\n collectionRoot: record.collectionRoot,\n model: record.model,\n selection:\n record.typedSelection === null\n ? null\n : { roots: record.typedSelection.roots, model: record.selectionModel },\n };\n}\n\nexport function readConfirmed(\n record: ReplicaRecord,\n previous?: ConfirmedLayer,\n): ConfirmedLayer | null {\n const collection = readCollection(\n record.documents,\n compositionOf(record),\n previous === undefined\n ? undefined\n : { text: previous.record.documents, collection: previous.collection },\n );\n return collection === null ? null : { record, collection };\n}\n\nexport function readStaged(record: ReplicaRecord, previous?: ConfirmedLayer): Staged {\n if (\n (record.model.status === 'current' || record.selectionModel.status === 'current') &&\n (previous === undefined ||\n !sameLayerText(record, previous.record) ||\n record.model !== previous.record.model ||\n record.selectionModel !== previous.record.selectionModel)\n ) {\n const verdict = validateCollection(\n record.documents,\n record.binaryTargets,\n compositionOf(record),\n );\n if (verdict.verdict === 'refuse' && verdict.rule !== 'model-unavailable') {\n return { kind: 'refused', refusal: verdict };\n }\n }\n const confirmed = readConfirmed(record, previous);\n return confirmed === null ? unconfirmed : { kind: 'staged', confirmed };\n}\n\nexport function applyReturned(\n confirmed: ConfirmedLayer,\n documents: Readonly<Record<string, string>>,\n revisions: Readonly<Record<string, string>>,\n removals: readonly string[],\n roomVersion: string,\n): Staged {\n const nextDocuments = { ...confirmed.record.documents, ...documents };\n const nextRevisions = { ...confirmed.record.revisions, ...revisions };\n const binaryTargets = new Set(confirmed.record.binaryTargets);\n for (const path of removals) {\n delete nextDocuments[path];\n delete nextRevisions[path];\n binaryTargets.delete(path);\n }\n return readStaged(\n {\n ...confirmed.record,\n roomVersion,\n documents: nextDocuments,\n revisions: nextRevisions,\n binaryTargets: [...binaryTargets].sort(),\n },\n confirmed,\n );\n}\n\nfunction predicted(\n confirmed: ConfirmedLayer,\n batches: readonly ChangeBatch[],\n previous?: Replica,\n): { layer: Layer; replay: readonly ReplayStep[] } {\n const composition = compositionOf(confirmed.record);\n let layer: Layer = confirmed.record;\n const replay: ReplayStep[] = [];\n const prior = new Map(previous?.replay.map((step) => [step.id, step]) ?? []);\n for (const batch of batches) {\n const before = layer;\n const old = prior.get(batch.id);\n const hasMove = batch.changes.some((change) => change.kind === 'move');\n const reuseRewrite =\n old?.collection !== undefined &&\n sameLayerText(before, old.before) &&\n old.collection.composition.collectionRoot === composition.collectionRoot &&\n old.collection.composition.model === composition.model &&\n old.collection.composition.selection?.model === composition.selection?.model &&\n JSON.stringify(old.collection.composition.selection?.roots) ===\n JSON.stringify(composition.selection?.roots);\n const collection = hasMove\n ? reuseRewrite\n ? old.collection\n : parseCollection(\n before.documents,\n composition,\n old?.collection === undefined\n ? { text: confirmed.record.documents, collection: confirmed.collection }\n : { text: old.before.documents, collection: old.collection },\n )\n : undefined;\n const effective =\n collection === undefined\n ? batch\n : reuseRewrite\n ? old.effective\n : providerRewritten(batch, { ...before, collection });\n layer =\n old === undefined\n ? overlay(before, [effective])\n : overlayChanged(before, [effective], old.before, [old.effective], old.after);\n replay.push({\n id: batch.id,\n before,\n after: layer,\n effective,\n ...(collection === undefined ? {} : { collection }),\n });\n }\n return { layer, replay };\n}\n\nexport function replicaOf(\n confirmed: ConfirmedLayer,\n queue: readonly ChangeBatch[],\n rewriting: Rewriting,\n previous?: Replica,\n): Replica {\n const batches = Object.freeze(queue.map(immutable));\n if (batches.length === 0) {\n return {\n confirmed,\n queue: batches,\n visible: {\n documents: confirmed.record.documents,\n binaryTargets: confirmed.record.binaryTargets,\n revisions: confirmed.record.revisions,\n collection: confirmed.collection,\n },\n replay: [],\n };\n }\n const predictedState = rewriting === 'provider' ? predicted(confirmed, batches, previous) : null;\n const layer =\n rewriting === 'provider'\n ? predictedState!.layer\n : previous === undefined\n ? overlay(confirmed.record, batches)\n : overlayChanged(\n confirmed.record,\n batches,\n previous.confirmed.record,\n previous.queue,\n previous.visible,\n );\n return {\n confirmed,\n queue: batches,\n replay: predictedState?.replay ?? [],\n visible: {\n ...layer,\n collection: parseCollection(\n layer.documents,\n compositionOf(confirmed.record),\n previous === undefined\n ? undefined\n : { text: previous.visible.documents, collection: previous.visible.collection },\n ),\n },\n };\n}\n\nfunction present(layer: Layer, path: string): boolean {\n return layer.documents[path] !== undefined || layer.binaryTargets.includes(path);\n}\n\nfunction holds(layer: Layer, preconditions: readonly Precondition[]): boolean {\n const parsed = new Map<string, Document | null>();\n const documentAt = (path: string) => {\n if (!parsed.has(path)) {\n const text = layer.documents[path];\n const opened = text === undefined ? null : parse(text, path);\n parsed.set(path, opened?.ok === true ? opened.document : null);\n }\n return parsed.get(path) ?? null;\n };\n return preconditions.every((precondition) => {\n const path = precondition.path;\n if (precondition.kind === 'absent') return !present(layer, path);\n if (precondition.kind === 'present') return present(layer, path);\n if (precondition.kind === 'revision') {\n return present(layer, path) && layer.revisions[path] === precondition.revision;\n }\n const document = documentAt(path);\n if (document === null) return false;\n if (precondition.kind === 'field') {\n const value = Object.hasOwn(document.fields, precondition.name)\n ? document.fields[precondition.name]\n : undefined;\n return equalValue(value, precondition.value);\n }\n if (precondition.kind === 'section') {\n return (\n Object.hasOwn(document.sections, precondition.name) &&\n document.sections[precondition.name] === precondition.value\n );\n }\n return document.preamble === precondition.value;\n });\n}\n\nexport function withdrawals(\n confirmed: ConfirmedLayer,\n queue: readonly ChangeBatch[],\n withdrawable: (batch: ChangeBatch) => boolean,\n rewriting: Rewriting,\n): readonly ChangeBatch[] {\n if (!queue.some(withdrawable)) return [];\n const composition = compositionOf(confirmed.record);\n let layer: Layer = confirmed.record;\n const withdrawn: ChangeBatch[] = [];\n for (const batch of queue) {\n if (withdrawable(batch) && !holds(layer, batch.preconditions)) {\n withdrawn.push(batch);\n continue;\n }\n const effective =\n rewriting === 'provider' && batch.changes.some((change) => change.kind === 'move')\n ? providerRewritten(batch, {\n ...layer,\n collection: parseCollection(layer.documents, composition),\n })\n : batch;\n layer = overlay(layer, [effective]);\n }\n return withdrawn;\n}\n"],"names":["parse","immutable","parseCollection","readCollection","validateCollection","overlay","overlayChanged","sameLayerText","providerRewritten","equalValue","unconfirmed","compositionOf","record","collectionRoot","model","selection","typedSelection","roots","selectionModel","readConfirmed","previous","collection","documents","undefined","text","readStaged","status","verdict","binaryTargets","rule","kind","refusal","confirmed","applyReturned","revisions","removals","roomVersion","nextDocuments","nextRevisions","Set","path","delete","sort","predicted","batches","composition","layer","replay","prior","Map","map","step","id","batch","before","old","get","hasMove","changes","some","change","reuseRewrite","JSON","stringify","effective","after","push","replicaOf","queue","rewriting","Object","freeze","length","visible","predictedState","present","includes","holds","preconditions","parsed","documentAt","has","opened","set","ok","document","every","precondition","revision","value","hasOwn","fields","name","sections","preamble","withdrawals","withdrawable","withdrawn"],"mappings":"AAAA,SAASA,KAAK,QAAuB,uBAAuB;AAC5D,SAASC,SAAS,QAA6C,cAAc;AAC7E,SACEC,eAAe,EACfC,cAAc,EACdC,kBAAkB,QAGb,kBAAkB;AACzB,SAASC,OAAO,EAAEC,cAAc,EAAEC,aAAa,QAAoB,eAAe;AAClF,SAASC,iBAAiB,QAAwB,YAAY;AAC9D,SAASC,UAAU,QAAQ,kBAAkB;AAE7C,SAASC,WAAW,QAAwC,gBAAgB;AA4B5E,OAAO,SAASC,cAAcC,MAAqB;IACjD,OAAO;QACLC,gBAAgBD,OAAOC,cAAc;QACrCC,OAAOF,OAAOE,KAAK;QACnBC,WACEH,OAAOI,cAAc,KAAK,OACtB,OACA;YAAEC,OAAOL,OAAOI,cAAc,CAACC,KAAK;YAAEH,OAAOF,OAAOM,cAAc;QAAC;IAC3E;AACF;AAEA,OAAO,SAASC,cACdP,MAAqB,EACrBQ,QAAyB;IAEzB,MAAMC,aAAalB,eACjBS,OAAOU,SAAS,EAChBX,cAAcC,SACdQ,aAAaG,YACTA,YACA;QAAEC,MAAMJ,SAASR,MAAM,CAACU,SAAS;QAAED,YAAYD,SAASC,UAAU;IAAC;IAEzE,OAAOA,eAAe,OAAO,OAAO;QAAET;QAAQS;IAAW;AAC3D;AAEA,OAAO,SAASI,WAAWb,MAAqB,EAAEQ,QAAyB;IACzE,IACE,AAACR,CAAAA,OAAOE,KAAK,CAACY,MAAM,KAAK,aAAad,OAAOM,cAAc,CAACQ,MAAM,KAAK,SAAQ,KAC9EN,CAAAA,aAAaG,aACZ,CAAChB,cAAcK,QAAQQ,SAASR,MAAM,KACtCA,OAAOE,KAAK,KAAKM,SAASR,MAAM,CAACE,KAAK,IACtCF,OAAOM,cAAc,KAAKE,SAASR,MAAM,CAACM,cAAc,AAAD,GACzD;QACA,MAAMS,UAAUvB,mBACdQ,OAAOU,SAAS,EAChBV,OAAOgB,aAAa,EACpBjB,cAAcC;QAEhB,IAAIe,QAAQA,OAAO,KAAK,YAAYA,QAAQE,IAAI,KAAK,qBAAqB;YACxE,OAAO;gBAAEC,MAAM;gBAAWC,SAASJ;YAAQ;QAC7C;IACF;IACA,MAAMK,YAAYb,cAAcP,QAAQQ;IACxC,OAAOY,cAAc,OAAOtB,cAAc;QAAEoB,MAAM;QAAUE;IAAU;AACxE;AAEA,OAAO,SAASC,cACdD,SAAyB,EACzBV,SAA2C,EAC3CY,SAA2C,EAC3CC,QAA2B,EAC3BC,WAAmB;IAEnB,MAAMC,gBAAgB;QAAE,GAAGL,UAAUpB,MAAM,CAACU,SAAS;QAAE,GAAGA,SAAS;IAAC;IACpE,MAAMgB,gBAAgB;QAAE,GAAGN,UAAUpB,MAAM,CAACsB,SAAS;QAAE,GAAGA,SAAS;IAAC;IACpE,MAAMN,gBAAgB,IAAIW,IAAIP,UAAUpB,MAAM,CAACgB,aAAa;IAC5D,KAAK,MAAMY,QAAQL,SAAU;QAC3B,OAAOE,aAAa,CAACG,KAAK;QAC1B,OAAOF,aAAa,CAACE,KAAK;QAC1BZ,cAAca,MAAM,CAACD;IACvB;IACA,OAAOf,WACL;QACE,GAAGO,UAAUpB,MAAM;QACnBwB;QACAd,WAAWe;QACXH,WAAWI;QACXV,eAAe;eAAIA;SAAc,CAACc,IAAI;IACxC,GACAV;AAEJ;AAEA,SAASW,UACPX,SAAyB,EACzBY,OAA+B,EAC/BxB,QAAkB;IAElB,MAAMyB,cAAclC,cAAcqB,UAAUpB,MAAM;IAClD,IAAIkC,QAAed,UAAUpB,MAAM;IACnC,MAAMmC,SAAuB,EAAE;IAC/B,MAAMC,QAAQ,IAAIC,IAAI7B,UAAU2B,OAAOG,IAAI,CAACC,OAAS;YAACA,KAAKC,EAAE;YAAED;SAAK,KAAK,EAAE;IAC3E,KAAK,MAAME,SAAST,QAAS;QAC3B,MAAMU,SAASR;QACf,MAAMS,MAAMP,MAAMQ,GAAG,CAACH,MAAMD,EAAE;QAC9B,MAAMK,UAAUJ,MAAMK,OAAO,CAACC,IAAI,CAAC,CAACC,SAAWA,OAAO9B,IAAI,KAAK;QAC/D,MAAM+B,eACJN,KAAKlC,eAAeE,aACpBhB,cAAc+C,QAAQC,IAAID,MAAM,KAChCC,IAAIlC,UAAU,CAACwB,WAAW,CAAChC,cAAc,KAAKgC,YAAYhC,cAAc,IACxE0C,IAAIlC,UAAU,CAACwB,WAAW,CAAC/B,KAAK,KAAK+B,YAAY/B,KAAK,IACtDyC,IAAIlC,UAAU,CAACwB,WAAW,CAAC9B,SAAS,EAAED,UAAU+B,YAAY9B,SAAS,EAAED,SACvEgD,KAAKC,SAAS,CAACR,IAAIlC,UAAU,CAACwB,WAAW,CAAC9B,SAAS,EAAEE,WACnD6C,KAAKC,SAAS,CAAClB,YAAY9B,SAAS,EAAEE;QAC1C,MAAMI,aAAaoC,UACfI,eACEN,IAAIlC,UAAU,GACdnB,gBACEoD,OAAOhC,SAAS,EAChBuB,aACAU,KAAKlC,eAAeE,YAChB;YAAEC,MAAMQ,UAAUpB,MAAM,CAACU,SAAS;YAAED,YAAYW,UAAUX,UAAU;QAAC,IACrE;YAAEG,MAAM+B,IAAID,MAAM,CAAChC,SAAS;YAAED,YAAYkC,IAAIlC,UAAU;QAAC,KAEjEE;QACJ,MAAMyC,YACJ3C,eAAeE,YACX8B,QACAQ,eACEN,IAAIS,SAAS,GACbxD,kBAAkB6C,OAAO;YAAE,GAAGC,MAAM;YAAEjC;QAAW;QACzDyB,QACES,QAAQhC,YACJlB,QAAQiD,QAAQ;YAACU;SAAU,IAC3B1D,eAAegD,QAAQ;YAACU;SAAU,EAAET,IAAID,MAAM,EAAE;YAACC,IAAIS,SAAS;SAAC,EAAET,IAAIU,KAAK;QAChFlB,OAAOmB,IAAI,CAAC;YACVd,IAAIC,MAAMD,EAAE;YACZE;YACAW,OAAOnB;YACPkB;YACA,GAAI3C,eAAeE,YAAY,CAAC,IAAI;gBAAEF;YAAW,CAAC;QACpD;IACF;IACA,OAAO;QAAEyB;QAAOC;IAAO;AACzB;AAEA,OAAO,SAASoB,UACdnC,SAAyB,EACzBoC,KAA6B,EAC7BC,SAAoB,EACpBjD,QAAkB;IAElB,MAAMwB,UAAU0B,OAAOC,MAAM,CAACH,MAAMlB,GAAG,CAACjD;IACxC,IAAI2C,QAAQ4B,MAAM,KAAK,GAAG;QACxB,OAAO;YACLxC;YACAoC,OAAOxB;YACP6B,SAAS;gBACPnD,WAAWU,UAAUpB,MAAM,CAACU,SAAS;gBACrCM,eAAeI,UAAUpB,MAAM,CAACgB,aAAa;gBAC7CM,WAAWF,UAAUpB,MAAM,CAACsB,SAAS;gBACrCb,YAAYW,UAAUX,UAAU;YAClC;YACA0B,QAAQ,EAAE;QACZ;IACF;IACA,MAAM2B,iBAAiBL,cAAc,aAAa1B,UAAUX,WAAWY,SAASxB,YAAY;IAC5F,MAAM0B,QACJuB,cAAc,aACVK,eAAgB5B,KAAK,GACrB1B,aAAaG,YACXlB,QAAQ2B,UAAUpB,MAAM,EAAEgC,WAC1BtC,eACE0B,UAAUpB,MAAM,EAChBgC,SACAxB,SAASY,SAAS,CAACpB,MAAM,EACzBQ,SAASgD,KAAK,EACdhD,SAASqD,OAAO;IAE1B,OAAO;QACLzC;QACAoC,OAAOxB;QACPG,QAAQ2B,gBAAgB3B,UAAU,EAAE;QACpC0B,SAAS;YACP,GAAG3B,KAAK;YACRzB,YAAYnB,gBACV4C,MAAMxB,SAAS,EACfX,cAAcqB,UAAUpB,MAAM,GAC9BQ,aAAaG,YACTA,YACA;gBAAEC,MAAMJ,SAASqD,OAAO,CAACnD,SAAS;gBAAED,YAAYD,SAASqD,OAAO,CAACpD,UAAU;YAAC;QAEpF;IACF;AACF;AAEA,SAASsD,QAAQ7B,KAAY,EAAEN,IAAY;IACzC,OAAOM,MAAMxB,SAAS,CAACkB,KAAK,KAAKjB,aAAauB,MAAMlB,aAAa,CAACgD,QAAQ,CAACpC;AAC7E;AAEA,SAASqC,MAAM/B,KAAY,EAAEgC,aAAsC;IACjE,MAAMC,SAAS,IAAI9B;IACnB,MAAM+B,aAAa,CAACxC;QAClB,IAAI,CAACuC,OAAOE,GAAG,CAACzC,OAAO;YACrB,MAAMhB,OAAOsB,MAAMxB,SAAS,CAACkB,KAAK;YAClC,MAAM0C,SAAS1D,SAASD,YAAY,OAAOvB,MAAMwB,MAAMgB;YACvDuC,OAAOI,GAAG,CAAC3C,MAAM0C,QAAQE,OAAO,OAAOF,OAAOG,QAAQ,GAAG;QAC3D;QACA,OAAON,OAAOvB,GAAG,CAAChB,SAAS;IAC7B;IACA,OAAOsC,cAAcQ,KAAK,CAAC,CAACC;QAC1B,MAAM/C,OAAO+C,aAAa/C,IAAI;QAC9B,IAAI+C,aAAazD,IAAI,KAAK,UAAU,OAAO,CAAC6C,QAAQ7B,OAAON;QAC3D,IAAI+C,aAAazD,IAAI,KAAK,WAAW,OAAO6C,QAAQ7B,OAAON;QAC3D,IAAI+C,aAAazD,IAAI,KAAK,YAAY;YACpC,OAAO6C,QAAQ7B,OAAON,SAASM,MAAMZ,SAAS,CAACM,KAAK,KAAK+C,aAAaC,QAAQ;QAChF;QACA,MAAMH,WAAWL,WAAWxC;QAC5B,IAAI6C,aAAa,MAAM,OAAO;QAC9B,IAAIE,aAAazD,IAAI,KAAK,SAAS;YACjC,MAAM2D,QAAQnB,OAAOoB,MAAM,CAACL,SAASM,MAAM,EAAEJ,aAAaK,IAAI,IAC1DP,SAASM,MAAM,CAACJ,aAAaK,IAAI,CAAC,GAClCrE;YACJ,OAAOd,WAAWgF,OAAOF,aAAaE,KAAK;QAC7C;QACA,IAAIF,aAAazD,IAAI,KAAK,WAAW;YACnC,OACEwC,OAAOoB,MAAM,CAACL,SAASQ,QAAQ,EAAEN,aAAaK,IAAI,KAClDP,SAASQ,QAAQ,CAACN,aAAaK,IAAI,CAAC,KAAKL,aAAaE,KAAK;QAE/D;QACA,OAAOJ,SAASS,QAAQ,KAAKP,aAAaE,KAAK;IACjD;AACF;AAEA,OAAO,SAASM,YACd/D,SAAyB,EACzBoC,KAA6B,EAC7B4B,YAA6C,EAC7C3B,SAAoB;IAEpB,IAAI,CAACD,MAAMT,IAAI,CAACqC,eAAe,OAAO,EAAE;IACxC,MAAMnD,cAAclC,cAAcqB,UAAUpB,MAAM;IAClD,IAAIkC,QAAed,UAAUpB,MAAM;IACnC,MAAMqF,YAA2B,EAAE;IACnC,KAAK,MAAM5C,SAASe,MAAO;QACzB,IAAI4B,aAAa3C,UAAU,CAACwB,MAAM/B,OAAOO,MAAMyB,aAAa,GAAG;YAC7DmB,UAAU/B,IAAI,CAACb;YACf;QACF;QACA,MAAMW,YACJK,cAAc,cAAchB,MAAMK,OAAO,CAACC,IAAI,CAAC,CAACC,SAAWA,OAAO9B,IAAI,KAAK,UACvEtB,kBAAkB6C,OAAO;YACvB,GAAGP,KAAK;YACRzB,YAAYnB,gBAAgB4C,MAAMxB,SAAS,EAAEuB;QAC/C,KACAQ;QACNP,QAAQzC,QAAQyC,OAAO;YAACkB;SAAU;IACpC;IACA,OAAOiC;AACT"}
|
package/dist/transfer.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
import type { Refusal } from '@agentshouse/mdmodel';
|
|
1
2
|
export type Unconfirmed = {
|
|
2
3
|
kind: 'unconfirmed';
|
|
3
4
|
};
|
|
5
|
+
export type Refused = {
|
|
6
|
+
kind: 'refused';
|
|
7
|
+
refusal: Refusal;
|
|
8
|
+
};
|
|
4
9
|
export declare const unconfirmed: Unconfirmed;
|
|
5
10
|
//# sourceMappingURL=transfer.d.ts.map
|
package/dist/transfer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../src/transfer.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAElD,eAAO,MAAM,WAAW,EAAE,WAAqC,CAAC"}
|
|
1
|
+
{"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../src/transfer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAElD,MAAM,MAAM,OAAO,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAE5D,eAAO,MAAM,WAAW,EAAE,WAAqC,CAAC"}
|
package/dist/transfer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/workspace/packages/mdruntime/src/transfer.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/transfer.ts"],"sourcesContent":["import type { Refusal } from '@agentshouse/mdmodel';\n\nexport type Unconfirmed = { kind: 'unconfirmed' };\n\nexport type Refused = { kind: 'refused'; refusal: Refusal };\n\nexport const unconfirmed: Unconfirmed = { kind: 'unconfirmed' };\n"],"names":["unconfirmed","kind"],"mappings":"AAMA,OAAO,MAAMA,cAA2B;IAAEC,MAAM;AAAc,EAAE"}
|