@agentshouse/mdruntime 0.1.0-c0136de3edfbe → 0.1.0-c01d4615bfe46
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/README.md +16 -15
- package/dist/acceptance.d.ts +0 -3
- package/dist/acceptance.d.ts.map +1 -1
- package/dist/acceptance.js +74 -164
- package/dist/act-lanes.d.ts +30 -0
- package/dist/act-lanes.d.ts.map +1 -0
- package/dist/act-lanes.js +225 -0
- package/dist/actions.d.ts +8 -2
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +122 -68
- package/dist/adapter.d.ts +49 -55
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +0 -1
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +0 -5
- package/dist/bootstrap.d.ts +1 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +6 -18
- package/dist/change-set.d.ts +4 -0
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +6 -0
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +4 -2
- package/dist/chat-types.d.ts +2 -2
- package/dist/chat-types.d.ts.map +1 -1
- package/dist/chat-types.js +11 -2
- package/dist/client.d.ts +13 -19
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +35 -19
- package/dist/collection.d.ts +22 -4
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +12 -2
- package/dist/compile.d.ts +2 -0
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +31 -24
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +32 -24
- package/dist/conversation-live.d.ts +147 -0
- package/dist/conversation-live.d.ts.map +1 -0
- package/dist/conversation-live.js +258 -0
- package/dist/conversation-row.d.ts.map +1 -1
- package/dist/conversation-row.js +7 -1
- package/dist/conversation.d.ts +52 -44
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +956 -1029
- package/dist/declaration.d.ts +10 -0
- package/dist/declaration.d.ts.map +1 -0
- package/dist/declaration.js +24 -0
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +19 -44
- package/dist/durability.d.ts +13 -0
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +4 -0
- package/dist/entry.js +1 -1
- package/dist/expectation.d.ts +26 -13
- package/dist/expectation.d.ts.map +1 -1
- package/dist/expectation.js +72 -19
- package/dist/failure.d.ts +3 -0
- package/dist/failure.d.ts.map +1 -1
- package/dist/failure.js +6 -0
- package/dist/figures.d.ts +1 -0
- package/dist/figures.d.ts.map +1 -1
- package/dist/figures.js +2 -2
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +2 -1
- package/dist/holdings.d.ts +29 -0
- package/dist/holdings.d.ts.map +1 -0
- package/dist/holdings.js +95 -0
- package/dist/host.d.ts +18 -2
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +46 -11
- package/dist/index.d.ts +17 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -6
- package/dist/install.d.ts +2 -4
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +53 -83
- package/dist/lifecycle.d.ts +1 -1
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +45 -35
- package/dist/listing.d.ts +6 -11
- package/dist/listing.d.ts.map +1 -1
- package/dist/listing.js +25 -61
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +3 -3
- package/dist/locks.d.ts +2 -4
- package/dist/locks.d.ts.map +1 -1
- package/dist/locks.js +10 -39
- package/dist/lost.d.ts.map +1 -1
- package/dist/lost.js +10 -22
- package/dist/media.d.ts +1 -1
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +10 -13
- package/dist/memory.d.ts +7 -3
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +58 -27
- package/dist/messages.d.ts +10 -6
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +26 -36
- package/dist/model.d.ts +0 -1
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +0 -5
- package/dist/models.d.ts +4 -8
- package/dist/models.d.ts.map +1 -1
- package/dist/models.js +95 -135
- package/dist/observation.d.ts +3 -2
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +22 -21
- package/dist/opened.d.ts +1 -1
- package/dist/opened.d.ts.map +1 -1
- package/dist/opened.js +5 -5
- package/dist/opening.d.ts.map +1 -1
- package/dist/opening.js +7 -10
- package/dist/outcome.d.ts +10 -1
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +23 -2
- package/dist/overlay.d.ts +5 -1
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +36 -21
- package/dist/page-metadata.d.ts +8 -0
- package/dist/page-metadata.d.ts.map +1 -0
- package/dist/page-metadata.js +19 -0
- package/dist/parts.d.ts +3 -58
- package/dist/parts.d.ts.map +1 -1
- package/dist/parts.js +10 -115
- package/dist/paths.d.ts +1 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +22 -0
- package/dist/preparation.d.ts.map +1 -1
- package/dist/preparation.js +25 -24
- package/dist/presence.d.ts +52 -0
- package/dist/presence.d.ts.map +1 -0
- package/dist/presence.js +220 -0
- package/dist/queries.d.ts +1 -1
- package/dist/queries.d.ts.map +1 -1
- package/dist/queries.js +24 -14
- package/dist/query.d.ts +0 -1
- package/dist/query.d.ts.map +1 -1
- package/dist/questions.d.ts +2 -5
- package/dist/questions.d.ts.map +1 -1
- package/dist/questions.js +3 -6
- package/dist/queue.d.ts +40 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +450 -0
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +68 -23
- package/dist/react.d.ts +11 -1
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +33 -1
- package/dist/readiness.d.ts +1 -2
- package/dist/readiness.d.ts.map +1 -1
- package/dist/reads.d.ts +4 -1
- package/dist/reads.d.ts.map +1 -1
- package/dist/reads.js +47 -5
- package/dist/recovery.d.ts +3 -1
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +29 -7
- package/dist/refresh.js +2 -2
- package/dist/refusal.d.ts.map +1 -1
- package/dist/refusal.js +5 -6
- package/dist/replica.d.ts +5 -10
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +15 -16
- package/dist/retried.d.ts +30 -0
- package/dist/retried.d.ts.map +1 -0
- package/dist/retried.js +72 -0
- package/dist/room-draft.d.ts +4 -6
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +48 -59
- package/dist/room-drafts.d.ts.map +1 -1
- package/dist/room-drafts.js +17 -16
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +3 -4
- package/dist/runtime.d.ts +11 -19
- package/dist/runtime.d.ts.map +1 -1
- package/dist/save.d.ts +42 -86
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +333 -163
- package/dist/saves.d.ts +2 -40
- package/dist/saves.d.ts.map +1 -1
- package/dist/saves.js +109 -703
- package/dist/seed.d.ts.map +1 -1
- package/dist/seed.js +2 -3
- package/dist/shared.d.ts +1 -6
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +13 -95
- package/dist/shown.d.ts +6 -4
- package/dist/shown.d.ts.map +1 -1
- package/dist/shown.js +43 -35
- package/dist/socket/lanes.d.ts +12 -4
- package/dist/socket/lanes.d.ts.map +1 -1
- package/dist/socket/lanes.js +34 -8
- package/dist/socket/session.d.ts +0 -1
- package/dist/socket/session.d.ts.map +1 -1
- package/dist/socket.d.ts +3 -6
- package/dist/socket.d.ts.map +1 -1
- package/dist/socket.js +5 -16
- package/dist/source.d.ts +0 -7
- package/dist/source.d.ts.map +1 -1
- package/dist/source.js +5 -4
- package/dist/store/records.d.ts +11 -8
- package/dist/store/records.d.ts.map +1 -1
- package/dist/store/records.js +43 -12
- package/dist/store/space.d.ts +1 -1
- package/dist/store/space.d.ts.map +1 -1
- package/dist/store/space.js +0 -2
- package/dist/store/watchers.js +1 -2
- package/dist/store.d.ts +12 -7
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +38 -13
- package/dist/stored.d.ts +2 -1
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +27 -15
- package/dist/surface.d.ts +7 -4
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +30 -25
- package/dist/sync.d.ts +0 -1
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +93 -89
- package/dist/tables.d.ts +19 -11
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +58 -21
- package/dist/tallies.d.ts.map +1 -1
- package/dist/tallies.js +6 -7
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +2 -2
- package/dist/wire.d.ts +53 -7
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +17 -4
- package/package.json +3 -2
- package/dist/attempt.d.ts +0 -16
- package/dist/attempt.d.ts.map +0 -1
- package/dist/attempt.js +0 -70
- package/dist/job.d.ts +0 -33
- package/dist/job.d.ts.map +0 -1
- package/dist/job.js +0 -54
- package/dist/log.d.ts +0 -6
- package/dist/log.d.ts.map +0 -1
- package/dist/log.js +0 -14
- package/dist/socket/rooms.d.ts +0 -43
- package/dist/socket/rooms.d.ts.map +0 -1
- package/dist/socket/rooms.js +0 -90
- package/dist/store/fences.d.ts +0 -16
- package/dist/store/fences.d.ts.map +0 -1
- package/dist/store/fences.js +0 -26
package/dist/install.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { attachedModel } from './attached-model.js';
|
|
2
2
|
import { bootstrapRoom } from './bootstrap.js';
|
|
3
3
|
import { refusedForSpace } from './durability.js';
|
|
4
|
-
import {
|
|
4
|
+
import { uncaught } from './failure.js';
|
|
5
|
+
import { name } from './listing.js';
|
|
5
6
|
import { NO_MODEL } from './model.js';
|
|
7
|
+
import { settle } from './queue.js';
|
|
6
8
|
import { advancement } from './refresh.js';
|
|
7
|
-
import { recoverReads
|
|
8
|
-
import { NO_INSTALL, } from './store.js';
|
|
9
|
+
import { recoverReads } from './shown.js';
|
|
9
10
|
import { unconfirmed } from './transfer.js';
|
|
10
11
|
import { ROW_WEIGHT, yielded } from './turn.js';
|
|
11
12
|
// Bytes still arriving are reported at most this often, so readiness is not rebuilt for every chunk the network hands over while a slow link still moves the figure.
|
|
@@ -79,16 +80,12 @@ function batchEnd(entries, from, bytes) {
|
|
|
79
80
|
return end;
|
|
80
81
|
}
|
|
81
82
|
export function installationOf(store, coverage, held) {
|
|
82
|
-
const rooms = { done: 0, total: 0 };
|
|
83
83
|
const bytes = { done: 0, total: 0 };
|
|
84
84
|
let installing = 0;
|
|
85
85
|
let downloading = false;
|
|
86
86
|
for (const { room, state } of coverage) {
|
|
87
87
|
if (state === 'unadmitted')
|
|
88
88
|
continue;
|
|
89
|
-
rooms.total += 1;
|
|
90
|
-
if (state === 'complete')
|
|
91
|
-
rooms.done += 1;
|
|
92
89
|
const install = store.installs.of(room);
|
|
93
90
|
const underway = state === 'acquiring' || (install.installing && state !== 'complete');
|
|
94
91
|
if (underway)
|
|
@@ -108,7 +105,7 @@ export function installationOf(store, coverage, held) {
|
|
|
108
105
|
: bytes.done < bytes.total
|
|
109
106
|
? 'writing'
|
|
110
107
|
: 'replaying';
|
|
111
|
-
return { step,
|
|
108
|
+
return { step, bytes };
|
|
112
109
|
}
|
|
113
110
|
export function roomInFlight(store, locator) {
|
|
114
111
|
const { catching, transfer } = store.installs.of(locator);
|
|
@@ -124,7 +121,7 @@ function installed(runtime, locator) {
|
|
|
124
121
|
runtime.store.installs.change(locator, (held) => ({ ...held, installing: false }));
|
|
125
122
|
runtime.store.readiness.queue();
|
|
126
123
|
}
|
|
127
|
-
export function sweep({ store, socket
|
|
124
|
+
export function sweep({ store, socket }) {
|
|
128
125
|
if (store.device.now().sweeping || socket.closed())
|
|
129
126
|
return;
|
|
130
127
|
store.device.set({ sweeping: true });
|
|
@@ -134,17 +131,14 @@ export function sweep({ store, socket, journal }) {
|
|
|
134
131
|
await yielded();
|
|
135
132
|
}
|
|
136
133
|
}
|
|
137
|
-
catch {
|
|
138
|
-
|
|
134
|
+
catch (error) {
|
|
135
|
+
uncaught(error);
|
|
139
136
|
}
|
|
140
137
|
finally {
|
|
141
138
|
store.device.set({ sweeping: false });
|
|
142
139
|
}
|
|
143
140
|
})();
|
|
144
141
|
}
|
|
145
|
-
export function forgetInstall(store, locator) {
|
|
146
|
-
store.installs.change(locator, ({ installing }) => ({ ...NO_INSTALL, installing }));
|
|
147
|
-
}
|
|
148
142
|
export function caughtUpTo(runtime, locator) {
|
|
149
143
|
if (!runtime.store.installs.of(locator).catching)
|
|
150
144
|
return;
|
|
@@ -154,12 +148,6 @@ export function caughtUpTo(runtime, locator) {
|
|
|
154
148
|
export function catching(store, locator) {
|
|
155
149
|
store.installs.change(locator, (held) => ({ ...held, catching: true }));
|
|
156
150
|
}
|
|
157
|
-
export function confirmedAgain(store, locator) {
|
|
158
|
-
store.installs.change(locator, (held) => ({
|
|
159
|
-
...held,
|
|
160
|
-
confirmations: held.confirmations + 1,
|
|
161
|
-
}));
|
|
162
|
-
}
|
|
163
151
|
export function standingAt(store, locator, held) {
|
|
164
152
|
return { key: held?.key ?? null, confirmed: store.installs.of(locator).confirmations };
|
|
165
153
|
}
|
|
@@ -274,7 +262,7 @@ function refreshingOf(runtime, local, locator, key, composition, liveness, repla
|
|
|
274
262
|
export async function pullRefresh(runtime, authorized, record, liveness, hold, refresh) {
|
|
275
263
|
if (!liveness())
|
|
276
264
|
return unconfirmed;
|
|
277
|
-
const { store
|
|
265
|
+
const { store } = runtime;
|
|
278
266
|
const from = standingAt(store, record.locator, record);
|
|
279
267
|
const local = await store.open();
|
|
280
268
|
try {
|
|
@@ -288,11 +276,8 @@ export async function pullRefresh(runtime, authorized, record, liveness, hold, r
|
|
|
288
276
|
hold.take();
|
|
289
277
|
}
|
|
290
278
|
}, authorized, record, (models, kept) => (liveness() ? remodel(runtime, models, kept) : kept), liveness, refreshingOf(runtime, local, record.locator, record.key, store.composed(record), liveness, false, record.roomVersion));
|
|
291
|
-
if (result.kind !== 'advanced')
|
|
292
|
-
journal.record(`transfer refresh ${record.locator} ${result.kind}`);
|
|
279
|
+
if (result.kind !== 'advanced')
|
|
293
280
|
return result;
|
|
294
|
-
}
|
|
295
|
-
journal.record(`transfer refresh ${record.locator} ${result.record.roomVersion}`);
|
|
296
281
|
return {
|
|
297
282
|
kind: 'advanced',
|
|
298
283
|
record: result.record,
|
|
@@ -303,7 +288,6 @@ export async function pullRefresh(runtime, authorized, record, liveness, hold, r
|
|
|
303
288
|
catch (error) {
|
|
304
289
|
if (refusedForSpace(error))
|
|
305
290
|
return unconfirmed;
|
|
306
|
-
journal.record(`transfer refresh ${record.locator} transport-uncertainty`);
|
|
307
291
|
throw error;
|
|
308
292
|
}
|
|
309
293
|
}
|
|
@@ -386,8 +370,6 @@ function staging(runtime, local, liveness, unheld) {
|
|
|
386
370
|
transfer: held,
|
|
387
371
|
underived: owed,
|
|
388
372
|
}));
|
|
389
|
-
if (before.transfer === null)
|
|
390
|
-
recoverReads(runtime);
|
|
391
373
|
installing(runtime, locator);
|
|
392
374
|
recoverReads(runtime);
|
|
393
375
|
if (owed < store.deriveBytes())
|
|
@@ -400,7 +382,9 @@ function staging(runtime, local, liveness, unheld) {
|
|
|
400
382
|
if (!liveness())
|
|
401
383
|
return null;
|
|
402
384
|
const prior = unheld === undefined ? await store.record(locator) : undefined;
|
|
403
|
-
const published = prior !== undefined && prior.replica.selection === record.selection
|
|
385
|
+
const published = prior !== undefined && prior.declaration.replica.selection === record.selection
|
|
386
|
+
? prior.key
|
|
387
|
+
: null;
|
|
404
388
|
const kept = unheld?.staged ?? (await local.held()).staged.has(locator);
|
|
405
389
|
if (published === null && !kept)
|
|
406
390
|
return { record: null, staged: new Set() };
|
|
@@ -449,23 +433,20 @@ function staging(runtime, local, liveness, unheld) {
|
|
|
449
433
|
export async function pullBootstrap(runtime, authorized, room, local, liveness, prior, from = runtime.socket.reads, unheld) {
|
|
450
434
|
if (!liveness())
|
|
451
435
|
return unconfirmed;
|
|
452
|
-
const { store
|
|
436
|
+
const { store } = runtime;
|
|
453
437
|
if (prior !== undefined) {
|
|
454
438
|
catching(store, room.locator);
|
|
455
439
|
recoverReads(runtime);
|
|
456
440
|
}
|
|
457
441
|
try {
|
|
458
442
|
const result = await bootstrapRoom(from, authorized, room, {
|
|
459
|
-
collection: prior?.model ?? runtime.
|
|
443
|
+
collection: prior?.model ?? runtime.presence.unheldModel(room.locator) ?? NO_MODEL,
|
|
460
444
|
}, runtime.builtIn, runtime.typedPaths, (models, held) => (liveness() ? remodel(runtime, models, held) : held), liveness, staging(runtime, local, liveness, unheld));
|
|
461
|
-
const detail = result.kind === 'staged' ? result.record.roomVersion : result.kind;
|
|
462
|
-
journal.record(`transfer bootstrap ${room.locator} ${detail}`);
|
|
463
445
|
if (result.kind === 'staged' &&
|
|
464
446
|
(await older(runtime, room.locator, result.record.roomVersion))) {
|
|
465
447
|
caughtUpTo(runtime, room.locator);
|
|
466
448
|
installed(runtime, room.locator);
|
|
467
449
|
await abandoned(runtime, local, room.locator);
|
|
468
|
-
journal.record(`transfer bootstrap ${room.locator} older than shown`);
|
|
469
450
|
return { kind: 'transport-uncertainty' };
|
|
470
451
|
}
|
|
471
452
|
if (result.kind !== 'staged') {
|
|
@@ -479,27 +460,27 @@ export async function pullBootstrap(runtime, authorized, room, local, liveness,
|
|
|
479
460
|
installed(runtime, room.locator);
|
|
480
461
|
if (refusedForSpace(error))
|
|
481
462
|
return unconfirmed;
|
|
482
|
-
journal.record(`transfer bootstrap ${room.locator} transport-uncertainty`);
|
|
483
463
|
throw error;
|
|
484
464
|
}
|
|
485
465
|
}
|
|
486
466
|
export function publish(runtime, local, room, reached, landing, live) {
|
|
487
467
|
const { store } = runtime;
|
|
488
|
-
|
|
468
|
+
let published = true;
|
|
469
|
+
const landed = settle(runtime, [room.locator], async (held) => {
|
|
489
470
|
if (!live()) {
|
|
490
471
|
caughtUpTo(runtime, room.locator);
|
|
491
|
-
return
|
|
472
|
+
return [];
|
|
492
473
|
}
|
|
493
|
-
const
|
|
494
|
-
const prior = work.replica;
|
|
474
|
+
const prior = held.get(room.locator)?.replica;
|
|
495
475
|
if (!standsAt(store, room.locator, prior?.record, landing.from)) {
|
|
476
|
+
published = false;
|
|
496
477
|
if (landing.kind === 'refreshed') {
|
|
497
478
|
await local.unrefresh(reached.key);
|
|
498
|
-
return
|
|
479
|
+
return [];
|
|
499
480
|
}
|
|
500
481
|
caughtUpTo(runtime, room.locator);
|
|
501
482
|
await abandoned(runtime, local, room.locator);
|
|
502
|
-
return
|
|
483
|
+
return [];
|
|
503
484
|
}
|
|
504
485
|
const record = landing.kind === 'refreshed' && prior !== undefined
|
|
505
486
|
? {
|
|
@@ -508,51 +489,40 @@ export function publish(runtime, local, room, reached, landing, live) {
|
|
|
508
489
|
...(landing.remodelled ? { model: reached.model } : {}),
|
|
509
490
|
}
|
|
510
491
|
: reached;
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
}
|
|
519
|
-
: {
|
|
520
|
-
room: true,
|
|
521
|
-
view: landing.refreshed ? 'refreshed' : 'confirmed',
|
|
522
|
-
commit: {
|
|
492
|
+
return [
|
|
493
|
+
{
|
|
494
|
+
locator: room.locator,
|
|
495
|
+
record,
|
|
496
|
+
installed: landing.kind === 'refreshed'
|
|
497
|
+
? { refreshed: true }
|
|
498
|
+
: {
|
|
523
499
|
published: { from: prior?.record.key ?? null },
|
|
524
500
|
...(landing.refreshed ? { refreshed: true } : {}),
|
|
525
501
|
},
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
await runtime.unpair(local);
|
|
551
|
-
void statusShown(runtime);
|
|
552
|
-
if (landing.kind === 'bootstrapped' && work.queue.length > 0) {
|
|
553
|
-
runtime.submitLater(room.locator);
|
|
554
|
-
}
|
|
555
|
-
return true;
|
|
502
|
+
after() {
|
|
503
|
+
runtime.presence.installed(room.locator, landing.kind === 'bootstrapped');
|
|
504
|
+
runtime.retries.succeeded('download', room.locator);
|
|
505
|
+
store.prepareAgain(room.locator);
|
|
506
|
+
if (landing.kind === 'bootstrapped') {
|
|
507
|
+
store.installs.change(room.locator, (held) => ({
|
|
508
|
+
...transferGone(held),
|
|
509
|
+
highest: null,
|
|
510
|
+
beyondHorizon: false,
|
|
511
|
+
startedOver: null,
|
|
512
|
+
catching: false,
|
|
513
|
+
}));
|
|
514
|
+
if (prior !== undefined && prior.record.key !== record.key)
|
|
515
|
+
sweep(runtime);
|
|
516
|
+
void name(runtime, room.locator);
|
|
517
|
+
}
|
|
518
|
+
},
|
|
519
|
+
},
|
|
520
|
+
];
|
|
521
|
+
}).then(() => published, (error) => {
|
|
522
|
+
if (!refusedForSpace(error))
|
|
523
|
+
throw error;
|
|
524
|
+
caughtUpTo(runtime, room.locator);
|
|
525
|
+
return published;
|
|
556
526
|
});
|
|
557
527
|
return landing.kind === 'refreshed'
|
|
558
528
|
? landed
|
package/dist/lifecycle.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Runtime } from './runtime.js';
|
|
2
2
|
export declare function scheduleCurrency(runtime: Runtime): void;
|
|
3
3
|
export declare function spaceFreed(runtime: Runtime): void;
|
|
4
|
-
export declare function close({ store, socket, conversations, recovery, liveQueries, figures }: Runtime): void;
|
|
4
|
+
export declare function close({ store, socket, presence, conversations, recovery, liveQueries, figures, }: Runtime): void;
|
|
5
5
|
export declare function stop(runtime: Runtime): Promise<void>;
|
|
6
6
|
export declare function start(runtime: Runtime, signal: AbortSignal | undefined): void;
|
|
7
7
|
//# sourceMappingURL=lifecycle.d.ts.map
|
package/dist/lifecycle.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAgO5C,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,QAOhD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,QAQ1C;AAED,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,MAAM,EACN,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,WAAW,EACX,OAAO,GACR,EAAE,OAAO,QAST;AAED,wBAAsB,IAAI,CAAC,OAAO,EAAE,OAAO,iBAS1C;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,SAAS,QAyCtE"}
|
package/dist/lifecycle.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { catchUpConversations, receiveConversationEvent, reconcileConversations, } from './conversation.js';
|
|
2
|
+
import { declared } from './declaration.js';
|
|
3
|
+
import { uncaught } from './failure.js';
|
|
2
4
|
import { catching, replaced } from './install.js';
|
|
3
5
|
import { connectionLost } from './locks.js';
|
|
4
6
|
import { fenceLive } from './lost.js';
|
|
5
7
|
import { cachedModels, revoked, settleModels } from './models.js';
|
|
6
8
|
import { refuse } from './refusal.js';
|
|
7
|
-
import { moveTo, recoverReads, rest, SERVICE_MODE_TOPIC, show, transferring } from './shown.js';
|
|
9
|
+
import { moveTo, recoverReads, rest, SERVICE_MODE_TOPIC, show, submissionDue, transferring, } from './shown.js';
|
|
8
10
|
import { applyRoom, changeAuthority, countAuthorityChange, finishOpening, loadRoom, OPENING_LANE, reload, resynchronize, sync, } from './sync.js';
|
|
9
11
|
const CONVERSATION_LANE = 'conversations';
|
|
12
|
+
const RELOADING = 'reloading';
|
|
10
13
|
function closing(runtime, opened) {
|
|
11
14
|
const { store, socket } = runtime;
|
|
12
15
|
return socket.lanes.task(OPENING_LANE, async (live) => {
|
|
@@ -19,10 +22,10 @@ function closing(runtime, opened) {
|
|
|
19
22
|
});
|
|
20
23
|
}
|
|
21
24
|
function closedSocket(runtime, lapsed, lost, opened) {
|
|
22
|
-
const { socket, conversations } = runtime;
|
|
25
|
+
const { socket, presence, conversations } = runtime;
|
|
23
26
|
const { session } = socket;
|
|
24
27
|
socket.notifyReady();
|
|
25
|
-
|
|
28
|
+
presence.stopAsking();
|
|
26
29
|
connectionLost(runtime);
|
|
27
30
|
if (lost)
|
|
28
31
|
conversations.lost();
|
|
@@ -42,9 +45,9 @@ function closedSocket(runtime, lapsed, lost, opened) {
|
|
|
42
45
|
void closing(runtime, opened);
|
|
43
46
|
}
|
|
44
47
|
function owedReloads(runtime, expired, held) {
|
|
45
|
-
const { store,
|
|
46
|
-
const reloading =
|
|
47
|
-
.
|
|
48
|
+
const { store, presence } = runtime;
|
|
49
|
+
const reloading = presence
|
|
50
|
+
.rooms()
|
|
48
51
|
.filter((room) => !expired.includes(room.locator) && revoked(held.get(room.locator)?.record.model))
|
|
49
52
|
.map((room) => room.locator);
|
|
50
53
|
for (const locator of reloading)
|
|
@@ -53,15 +56,15 @@ function owedReloads(runtime, expired, held) {
|
|
|
53
56
|
return reloading;
|
|
54
57
|
}
|
|
55
58
|
async function reloadNow(runtime, replacing, progress, held, installing) {
|
|
56
|
-
const { store, socket } = runtime;
|
|
57
|
-
const {
|
|
58
|
-
const discovered = rooms
|
|
59
|
+
const { store, socket, presence } = runtime;
|
|
60
|
+
const { lanes } = socket;
|
|
61
|
+
const discovered = presence.rooms();
|
|
59
62
|
const reloaded = discovered.filter((room) => held.has(room.locator) && !installing.has(room.locator) && replacing(room));
|
|
60
63
|
const acquired = discovered.filter((room) => (!held.has(room.locator) || installing.has(room.locator)) &&
|
|
61
64
|
room.replica.admission === 'admitted' &&
|
|
62
65
|
replacing(room));
|
|
63
66
|
for (const room of reloaded)
|
|
64
|
-
|
|
67
|
+
presence.reload(room.locator, true);
|
|
65
68
|
try {
|
|
66
69
|
const local = await store.open();
|
|
67
70
|
const kept = acquired.length === 0 ? new Set() : (await local.held()).staged;
|
|
@@ -76,15 +79,17 @@ async function reloadNow(runtime, replacing, progress, held, installing) {
|
|
|
76
79
|
.roomTask(room.locator, (live) => loadRoom(runtime, room, local, progress, live, unheld))
|
|
77
80
|
.then(() => rest(runtime, progress));
|
|
78
81
|
}
|
|
82
|
+
runtime.retries.succeeded('download', RELOADING);
|
|
79
83
|
}
|
|
80
|
-
catch {
|
|
84
|
+
catch (error) {
|
|
85
|
+
runtime.retries.failed('download', RELOADING, error);
|
|
81
86
|
for (const room of reloaded)
|
|
82
|
-
|
|
87
|
+
presence.reload(room.locator, false);
|
|
83
88
|
progress.reachable = false;
|
|
84
89
|
}
|
|
85
90
|
}
|
|
86
91
|
function caughtUpRooms(runtime, expired) {
|
|
87
|
-
const { store, socket } = runtime;
|
|
92
|
+
const { store, socket, presence } = runtime;
|
|
88
93
|
const { session } = socket;
|
|
89
94
|
const progress = session.now().underway;
|
|
90
95
|
session.set({ underway: null });
|
|
@@ -111,14 +116,17 @@ function caughtUpRooms(runtime, expired) {
|
|
|
111
116
|
if (progress.reachable) {
|
|
112
117
|
const stored = await held;
|
|
113
118
|
const owed = await reloading;
|
|
114
|
-
await settleModels(runtime,
|
|
115
|
-
.
|
|
119
|
+
await settleModels(runtime, new Map(presence
|
|
120
|
+
.rooms()
|
|
116
121
|
.filter((room) => stored.has(room.locator) &&
|
|
117
122
|
!expired.includes(room.locator) &&
|
|
118
|
-
!owed.includes(room.locator))
|
|
123
|
+
!owed.includes(room.locator))
|
|
124
|
+
.map((room) => [room.locator, declared(room)])), 'current', local);
|
|
119
125
|
}
|
|
126
|
+
runtime.retries.succeeded('download', OPENING_LANE);
|
|
120
127
|
}
|
|
121
|
-
catch {
|
|
128
|
+
catch (error) {
|
|
129
|
+
runtime.retries.failed('download', OPENING_LANE, error);
|
|
122
130
|
progress.complete = false;
|
|
123
131
|
progress.reachable = false;
|
|
124
132
|
}
|
|
@@ -127,7 +135,7 @@ function caughtUpRooms(runtime, expired) {
|
|
|
127
135
|
});
|
|
128
136
|
}
|
|
129
137
|
function signalled(runtime, mode) {
|
|
130
|
-
const { store, socket
|
|
138
|
+
const { store, socket } = runtime;
|
|
131
139
|
const { session } = socket;
|
|
132
140
|
const { closed, serviceMode, haltedRefusal, openSignals } = session.now();
|
|
133
141
|
if (closed)
|
|
@@ -140,11 +148,10 @@ function signalled(runtime, mode) {
|
|
|
140
148
|
if (mode !== serviceMode) {
|
|
141
149
|
session.set({ serviceMode: mode });
|
|
142
150
|
store.readiness.queue();
|
|
143
|
-
journal.record(`service mode ${mode}`);
|
|
144
151
|
store.tell(SERVICE_MODE_TOPIC, mode);
|
|
145
152
|
}
|
|
146
153
|
if (releasing)
|
|
147
|
-
|
|
154
|
+
void submissionDue(runtime);
|
|
148
155
|
}
|
|
149
156
|
async function runCurrency(runtime, live) {
|
|
150
157
|
const { socket, conversations } = runtime;
|
|
@@ -153,9 +160,9 @@ async function runCurrency(runtime, live) {
|
|
|
153
160
|
session.set({ currencyQueued: null });
|
|
154
161
|
if (!live())
|
|
155
162
|
return;
|
|
156
|
-
await conversations
|
|
163
|
+
await reconcileConversations(conversations);
|
|
157
164
|
if (conversations.current()) {
|
|
158
|
-
|
|
165
|
+
await rest(runtime, null, live);
|
|
159
166
|
return;
|
|
160
167
|
}
|
|
161
168
|
const progress = {
|
|
@@ -164,9 +171,11 @@ async function runCurrency(runtime, live) {
|
|
|
164
171
|
};
|
|
165
172
|
moveTo(runtime, transferring(runtime));
|
|
166
173
|
try {
|
|
167
|
-
await conversations
|
|
174
|
+
await catchUpConversations(conversations, progress);
|
|
175
|
+
runtime.retries.succeeded('conversations', CONVERSATION_LANE);
|
|
168
176
|
}
|
|
169
|
-
catch {
|
|
177
|
+
catch (error) {
|
|
178
|
+
runtime.retries.failed('conversations', CONVERSATION_LANE, error);
|
|
170
179
|
progress.reachable = false;
|
|
171
180
|
}
|
|
172
181
|
await rest(runtime, progress, live);
|
|
@@ -180,9 +189,8 @@ export function scheduleCurrency(runtime) {
|
|
|
180
189
|
void socket.lanes.task(CONVERSATION_LANE, (live) => runCurrency(runtime, live));
|
|
181
190
|
}
|
|
182
191
|
export function spaceFreed(runtime) {
|
|
183
|
-
const { store, socket
|
|
184
|
-
|
|
185
|
-
journal.record('space freed');
|
|
192
|
+
const { store, socket } = runtime;
|
|
193
|
+
store.prepareAgain();
|
|
186
194
|
store.readiness.queue();
|
|
187
195
|
const { closed, authorization } = socket.session.now();
|
|
188
196
|
if (closed || authorization === undefined)
|
|
@@ -192,10 +200,11 @@ export function spaceFreed(runtime) {
|
|
|
192
200
|
else
|
|
193
201
|
void resynchronize(runtime);
|
|
194
202
|
}
|
|
195
|
-
export function close({ store, socket, conversations, recovery, liveQueries, figures }) {
|
|
203
|
+
export function close({ store, socket, presence, conversations, recovery, liveQueries, figures, }) {
|
|
196
204
|
if (socket.closed())
|
|
197
205
|
return;
|
|
198
206
|
socket.close();
|
|
207
|
+
presence.close();
|
|
199
208
|
conversations.close();
|
|
200
209
|
void recovery.retire();
|
|
201
210
|
liveQueries.close();
|
|
@@ -203,9 +212,9 @@ export function close({ store, socket, conversations, recovery, liveQueries, fig
|
|
|
203
212
|
store.close();
|
|
204
213
|
}
|
|
205
214
|
export async function stop(runtime) {
|
|
206
|
-
const { store, socket, recovery } = runtime;
|
|
215
|
+
const { store, socket, presence, recovery } = runtime;
|
|
207
216
|
socket.session.set({ stopping: true });
|
|
208
|
-
|
|
217
|
+
presence.stopAsking();
|
|
209
218
|
socket.stopReads();
|
|
210
219
|
await recovery.retire();
|
|
211
220
|
await socket.lanes.finished();
|
|
@@ -213,13 +222,13 @@ export async function stop(runtime) {
|
|
|
213
222
|
close(runtime);
|
|
214
223
|
}
|
|
215
224
|
export function start(runtime, signal) {
|
|
216
|
-
const { store, socket, conversations, lastAnswers, recovery } = runtime;
|
|
225
|
+
const { store, socket, presence, conversations, lastAnswers, recovery } = runtime;
|
|
217
226
|
const closeRuntime = () => close(runtime);
|
|
218
227
|
socket.observeServiceMode((mode) => signalled(runtime, mode));
|
|
219
228
|
socket.observeConversations((event) => {
|
|
220
229
|
if (event.kind === 'list' || event.kind === 'listed' || event.kind === 'unlisted')
|
|
221
230
|
store.readiness.queue();
|
|
222
|
-
conversations
|
|
231
|
+
receiveConversationEvent(conversations, event);
|
|
223
232
|
if (event.kind !== 'gap' || conversations.current())
|
|
224
233
|
return;
|
|
225
234
|
show(runtime);
|
|
@@ -230,7 +239,7 @@ export function start(runtime, signal) {
|
|
|
230
239
|
closeRuntime();
|
|
231
240
|
socket.observe((event) => {
|
|
232
241
|
if (event.kind === 'opened') {
|
|
233
|
-
|
|
242
|
+
presence.connectionLive();
|
|
234
243
|
conversations.reopened();
|
|
235
244
|
lastAnswers.reopened();
|
|
236
245
|
recovery.resume();
|
|
@@ -259,8 +268,9 @@ export function start(runtime, signal) {
|
|
|
259
268
|
if ((await local.facts()).capabilities.length > 0)
|
|
260
269
|
socket.readyFromStore();
|
|
261
270
|
})
|
|
262
|
-
.catch(() => {
|
|
271
|
+
.catch((error) => {
|
|
263
272
|
socket.readyFromStore();
|
|
273
|
+
uncaught(error);
|
|
264
274
|
});
|
|
265
275
|
if (!socket.streamed)
|
|
266
276
|
void sync(runtime, 'unstreamed', null);
|
package/dist/listing.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import type { HeldRooms } from '@agentshouse/mdmodel';
|
|
2
|
-
import type { DiscoveredRoom, HeldRoom, OperationScopes, ProviderRefusal, ReplicaAdmission } from './adapter.js';
|
|
2
|
+
import type { DiscoveredRoom, HeldRoom, OperationScopes, ProviderRefusal, ReplicaAdmission, RoomDeclaration } from './adapter.js';
|
|
3
3
|
import type { Composition } from './collection.js';
|
|
4
4
|
import { type ModelState, type TypesResult } from './model.js';
|
|
5
5
|
import { type PortReach } from './reach.js';
|
|
6
6
|
import type { ReplicaRecord } from './replica.js';
|
|
7
7
|
import type { Runtime } from './runtime.js';
|
|
8
|
-
import type { RoomDeclaration } from './socket.js';
|
|
9
8
|
import type { Stored } from './store.js';
|
|
10
9
|
export type AppTypedSelection = {
|
|
11
10
|
roots: readonly string[];
|
|
@@ -20,6 +19,7 @@ export type AppRoom = {
|
|
|
20
19
|
model: TypesResult;
|
|
21
20
|
typedSelection: AppTypedSelection | null;
|
|
22
21
|
providerOwnedPaths: readonly string[];
|
|
22
|
+
authoredPaths: readonly string[];
|
|
23
23
|
roomVersion: string | null;
|
|
24
24
|
documents: number;
|
|
25
25
|
synchronizationAvailable: boolean;
|
|
@@ -31,22 +31,17 @@ type ListedEntry = ListedRoom & {
|
|
|
31
31
|
readonly documents: number;
|
|
32
32
|
};
|
|
33
33
|
export type Listing = ReadonlyMap<string, ListedEntry>;
|
|
34
|
-
export declare function modelIn({ socket }: Runtime, locator: string, stored: Stored | undefined): ModelState;
|
|
34
|
+
export declare function modelIn({ socket, presence }: Runtime, locator: string, stored: Stored | undefined): ModelState;
|
|
35
35
|
export declare function compositionFor(runtime: Runtime, record: ReplicaRecord): Composition;
|
|
36
|
-
export declare function declarationOf({
|
|
36
|
+
export declare function declarationOf({ presence }: Runtime, locator: string, stored: Stored | undefined): {
|
|
37
37
|
readonly room: RoomDeclaration;
|
|
38
38
|
readonly available: boolean;
|
|
39
39
|
} | undefined;
|
|
40
|
-
export declare function listedLocators({
|
|
40
|
+
export declare function listedLocators({ presence }: Runtime, held: ReadonlyMap<string, unknown>): string[];
|
|
41
41
|
export declare function patchedListing(runtime: Runtime, changed: ReadonlySet<string>): Promise<Listing | null>;
|
|
42
42
|
export declare function listingNow(runtime: Runtime): Promise<Listing>;
|
|
43
|
-
export declare function shownRooms(
|
|
43
|
+
export declare function shownRooms({ presence }: Runtime, listing: Listing): readonly AppRoom[];
|
|
44
44
|
export declare function roomFacts(runtime: Runtime, reach?: PortReach | null): Promise<HeldRooms>;
|
|
45
|
-
export declare function list({ store, socket }: Runtime, room: RoomDeclaration, synchronizationAvailable: boolean): void;
|
|
46
|
-
export declare function listHeld({ store, socket }: Runtime, locator: string): void;
|
|
47
|
-
export declare function admitted({ socket }: Runtime, room: RoomDeclaration): boolean;
|
|
48
|
-
export declare function readable(runtime: Runtime, room: DiscoveredRoom): void;
|
|
49
|
-
export declare function usable(runtime: Runtime, room: DiscoveredRoom): void;
|
|
50
45
|
export declare function heldRooms({ store }: Runtime, listed: readonly DiscoveredRoom[]): Promise<HeldRoom[]>;
|
|
51
46
|
export declare function name(runtime: Runtime, locator: string): Promise<void>;
|
|
52
47
|
export {};
|
package/dist/listing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listing.d.ts","sourceRoot":"","sources":["../src/listing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EACV,cAAc,EACd,QAAQ,EACR,eAAe,EACf,eAAe,EACf,gBAAgB,
|
|
1
|
+
{"version":3,"file":"listing.d.ts","sourceRoot":"","sources":["../src/listing.ts"],"names":[],"mappings":"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"}
|