@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.
Files changed (245) hide show
  1. package/README.md +16 -15
  2. package/dist/acceptance.d.ts +0 -3
  3. package/dist/acceptance.d.ts.map +1 -1
  4. package/dist/acceptance.js +74 -164
  5. package/dist/act-lanes.d.ts +30 -0
  6. package/dist/act-lanes.d.ts.map +1 -0
  7. package/dist/act-lanes.js +225 -0
  8. package/dist/actions.d.ts +8 -2
  9. package/dist/actions.d.ts.map +1 -1
  10. package/dist/actions.js +122 -68
  11. package/dist/adapter.d.ts +49 -55
  12. package/dist/adapter.d.ts.map +1 -1
  13. package/dist/attached-model.d.ts +0 -1
  14. package/dist/attached-model.d.ts.map +1 -1
  15. package/dist/attached-model.js +0 -5
  16. package/dist/bootstrap.d.ts +1 -1
  17. package/dist/bootstrap.d.ts.map +1 -1
  18. package/dist/bootstrap.js +6 -18
  19. package/dist/change-set.d.ts +4 -0
  20. package/dist/change-set.d.ts.map +1 -1
  21. package/dist/change-set.js +6 -0
  22. package/dist/change.d.ts.map +1 -1
  23. package/dist/change.js +4 -2
  24. package/dist/chat-types.d.ts +2 -2
  25. package/dist/chat-types.d.ts.map +1 -1
  26. package/dist/chat-types.js +11 -2
  27. package/dist/client.d.ts +13 -19
  28. package/dist/client.d.ts.map +1 -1
  29. package/dist/client.js +35 -19
  30. package/dist/collection.d.ts +22 -4
  31. package/dist/collection.d.ts.map +1 -1
  32. package/dist/collection.js +12 -2
  33. package/dist/compile.d.ts +2 -0
  34. package/dist/compile.d.ts.map +1 -1
  35. package/dist/compile.js +31 -24
  36. package/dist/connection.d.ts.map +1 -1
  37. package/dist/connection.js +32 -24
  38. package/dist/conversation-live.d.ts +147 -0
  39. package/dist/conversation-live.d.ts.map +1 -0
  40. package/dist/conversation-live.js +258 -0
  41. package/dist/conversation-row.d.ts.map +1 -1
  42. package/dist/conversation-row.js +7 -1
  43. package/dist/conversation.d.ts +52 -44
  44. package/dist/conversation.d.ts.map +1 -1
  45. package/dist/conversation.js +956 -1029
  46. package/dist/declaration.d.ts +10 -0
  47. package/dist/declaration.d.ts.map +1 -0
  48. package/dist/declaration.js +24 -0
  49. package/dist/discovery.d.ts.map +1 -1
  50. package/dist/discovery.js +19 -44
  51. package/dist/durability.d.ts +13 -0
  52. package/dist/durability.d.ts.map +1 -1
  53. package/dist/durability.js +4 -0
  54. package/dist/entry.js +1 -1
  55. package/dist/expectation.d.ts +26 -13
  56. package/dist/expectation.d.ts.map +1 -1
  57. package/dist/expectation.js +72 -19
  58. package/dist/failure.d.ts +3 -0
  59. package/dist/failure.d.ts.map +1 -1
  60. package/dist/failure.js +6 -0
  61. package/dist/figures.d.ts +1 -0
  62. package/dist/figures.d.ts.map +1 -1
  63. package/dist/figures.js +2 -2
  64. package/dist/file.d.ts.map +1 -1
  65. package/dist/file.js +2 -1
  66. package/dist/holdings.d.ts +29 -0
  67. package/dist/holdings.d.ts.map +1 -0
  68. package/dist/holdings.js +95 -0
  69. package/dist/host.d.ts +18 -2
  70. package/dist/host.d.ts.map +1 -1
  71. package/dist/host.js +46 -11
  72. package/dist/index.d.ts +17 -9
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +13 -6
  75. package/dist/install.d.ts +2 -4
  76. package/dist/install.d.ts.map +1 -1
  77. package/dist/install.js +53 -83
  78. package/dist/lifecycle.d.ts +1 -1
  79. package/dist/lifecycle.d.ts.map +1 -1
  80. package/dist/lifecycle.js +45 -35
  81. package/dist/listing.d.ts +6 -11
  82. package/dist/listing.d.ts.map +1 -1
  83. package/dist/listing.js +25 -61
  84. package/dist/live.d.ts.map +1 -1
  85. package/dist/live.js +3 -3
  86. package/dist/locks.d.ts +2 -4
  87. package/dist/locks.d.ts.map +1 -1
  88. package/dist/locks.js +10 -39
  89. package/dist/lost.d.ts.map +1 -1
  90. package/dist/lost.js +10 -22
  91. package/dist/media.d.ts +1 -1
  92. package/dist/media.d.ts.map +1 -1
  93. package/dist/media.js +10 -13
  94. package/dist/memory.d.ts +7 -3
  95. package/dist/memory.d.ts.map +1 -1
  96. package/dist/memory.js +58 -27
  97. package/dist/messages.d.ts +10 -6
  98. package/dist/messages.d.ts.map +1 -1
  99. package/dist/messages.js +26 -36
  100. package/dist/model.d.ts +0 -1
  101. package/dist/model.d.ts.map +1 -1
  102. package/dist/model.js +0 -5
  103. package/dist/models.d.ts +4 -8
  104. package/dist/models.d.ts.map +1 -1
  105. package/dist/models.js +95 -135
  106. package/dist/observation.d.ts +3 -2
  107. package/dist/observation.d.ts.map +1 -1
  108. package/dist/observation.js +22 -21
  109. package/dist/opened.d.ts +1 -1
  110. package/dist/opened.d.ts.map +1 -1
  111. package/dist/opened.js +5 -5
  112. package/dist/opening.d.ts.map +1 -1
  113. package/dist/opening.js +7 -10
  114. package/dist/outcome.d.ts +10 -1
  115. package/dist/outcome.d.ts.map +1 -1
  116. package/dist/outcome.js +23 -2
  117. package/dist/overlay.d.ts +5 -1
  118. package/dist/overlay.d.ts.map +1 -1
  119. package/dist/overlay.js +36 -21
  120. package/dist/page-metadata.d.ts +8 -0
  121. package/dist/page-metadata.d.ts.map +1 -0
  122. package/dist/page-metadata.js +19 -0
  123. package/dist/parts.d.ts +3 -58
  124. package/dist/parts.d.ts.map +1 -1
  125. package/dist/parts.js +10 -115
  126. package/dist/paths.d.ts +1 -0
  127. package/dist/paths.d.ts.map +1 -1
  128. package/dist/paths.js +22 -0
  129. package/dist/preparation.d.ts.map +1 -1
  130. package/dist/preparation.js +25 -24
  131. package/dist/presence.d.ts +52 -0
  132. package/dist/presence.d.ts.map +1 -0
  133. package/dist/presence.js +220 -0
  134. package/dist/queries.d.ts +1 -1
  135. package/dist/queries.d.ts.map +1 -1
  136. package/dist/queries.js +24 -14
  137. package/dist/query.d.ts +0 -1
  138. package/dist/query.d.ts.map +1 -1
  139. package/dist/questions.d.ts +2 -5
  140. package/dist/questions.d.ts.map +1 -1
  141. package/dist/questions.js +3 -6
  142. package/dist/queue.d.ts +40 -0
  143. package/dist/queue.d.ts.map +1 -0
  144. package/dist/queue.js +450 -0
  145. package/dist/reach.d.ts.map +1 -1
  146. package/dist/reach.js +68 -23
  147. package/dist/react.d.ts +11 -1
  148. package/dist/react.d.ts.map +1 -1
  149. package/dist/react.js +33 -1
  150. package/dist/readiness.d.ts +1 -2
  151. package/dist/readiness.d.ts.map +1 -1
  152. package/dist/reads.d.ts +4 -1
  153. package/dist/reads.d.ts.map +1 -1
  154. package/dist/reads.js +47 -5
  155. package/dist/recovery.d.ts +3 -1
  156. package/dist/recovery.d.ts.map +1 -1
  157. package/dist/recovery.js +29 -7
  158. package/dist/refresh.js +2 -2
  159. package/dist/refusal.d.ts.map +1 -1
  160. package/dist/refusal.js +5 -6
  161. package/dist/replica.d.ts +5 -10
  162. package/dist/replica.d.ts.map +1 -1
  163. package/dist/replica.js +15 -16
  164. package/dist/retried.d.ts +30 -0
  165. package/dist/retried.d.ts.map +1 -0
  166. package/dist/retried.js +72 -0
  167. package/dist/room-draft.d.ts +4 -6
  168. package/dist/room-draft.d.ts.map +1 -1
  169. package/dist/room-draft.js +48 -59
  170. package/dist/room-drafts.d.ts.map +1 -1
  171. package/dist/room-drafts.js +17 -16
  172. package/dist/rows.d.ts.map +1 -1
  173. package/dist/rows.js +3 -4
  174. package/dist/runtime.d.ts +11 -19
  175. package/dist/runtime.d.ts.map +1 -1
  176. package/dist/save.d.ts +42 -86
  177. package/dist/save.d.ts.map +1 -1
  178. package/dist/save.js +333 -163
  179. package/dist/saves.d.ts +2 -40
  180. package/dist/saves.d.ts.map +1 -1
  181. package/dist/saves.js +109 -703
  182. package/dist/seed.d.ts.map +1 -1
  183. package/dist/seed.js +2 -3
  184. package/dist/shared.d.ts +1 -6
  185. package/dist/shared.d.ts.map +1 -1
  186. package/dist/shared.js +13 -95
  187. package/dist/shown.d.ts +6 -4
  188. package/dist/shown.d.ts.map +1 -1
  189. package/dist/shown.js +43 -35
  190. package/dist/socket/lanes.d.ts +12 -4
  191. package/dist/socket/lanes.d.ts.map +1 -1
  192. package/dist/socket/lanes.js +34 -8
  193. package/dist/socket/session.d.ts +0 -1
  194. package/dist/socket/session.d.ts.map +1 -1
  195. package/dist/socket.d.ts +3 -6
  196. package/dist/socket.d.ts.map +1 -1
  197. package/dist/socket.js +5 -16
  198. package/dist/source.d.ts +0 -7
  199. package/dist/source.d.ts.map +1 -1
  200. package/dist/source.js +5 -4
  201. package/dist/store/records.d.ts +11 -8
  202. package/dist/store/records.d.ts.map +1 -1
  203. package/dist/store/records.js +43 -12
  204. package/dist/store/space.d.ts +1 -1
  205. package/dist/store/space.d.ts.map +1 -1
  206. package/dist/store/space.js +0 -2
  207. package/dist/store/watchers.js +1 -2
  208. package/dist/store.d.ts +12 -7
  209. package/dist/store.d.ts.map +1 -1
  210. package/dist/store.js +38 -13
  211. package/dist/stored.d.ts +2 -1
  212. package/dist/stored.d.ts.map +1 -1
  213. package/dist/stored.js +27 -15
  214. package/dist/surface.d.ts +7 -4
  215. package/dist/surface.d.ts.map +1 -1
  216. package/dist/surface.js +30 -25
  217. package/dist/sync.d.ts +0 -1
  218. package/dist/sync.d.ts.map +1 -1
  219. package/dist/sync.js +93 -89
  220. package/dist/tables.d.ts +19 -11
  221. package/dist/tables.d.ts.map +1 -1
  222. package/dist/tables.js +58 -21
  223. package/dist/tallies.d.ts.map +1 -1
  224. package/dist/tallies.js +6 -7
  225. package/dist/validation.d.ts.map +1 -1
  226. package/dist/validation.js +2 -2
  227. package/dist/wire.d.ts +53 -7
  228. package/dist/wire.d.ts.map +1 -1
  229. package/dist/wire.js +17 -4
  230. package/package.json +3 -2
  231. package/dist/attempt.d.ts +0 -16
  232. package/dist/attempt.d.ts.map +0 -1
  233. package/dist/attempt.js +0 -70
  234. package/dist/job.d.ts +0 -33
  235. package/dist/job.d.ts.map +0 -1
  236. package/dist/job.js +0 -54
  237. package/dist/log.d.ts +0 -6
  238. package/dist/log.d.ts.map +0 -1
  239. package/dist/log.js +0 -14
  240. package/dist/socket/rooms.d.ts +0 -43
  241. package/dist/socket/rooms.d.ts.map +0 -1
  242. package/dist/socket/rooms.js +0 -90
  243. package/dist/store/fences.d.ts +0 -16
  244. package/dist/store/fences.d.ts.map +0 -1
  245. 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 { name, usable } from './listing.js';
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, statusShown } from './shown.js';
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, rooms, bytes };
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, journal }) {
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
- journal.record('erasure failed');
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, journal } = runtime;
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 ? prior.key : null;
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, journal } = runtime;
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.socket.rooms.standing(room.locator).unheldModel ?? NO_MODEL,
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
- const landed = store.exclusive(async () => {
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 true;
472
+ return [];
492
473
  }
493
- const work = await store.work(room.locator);
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 false;
479
+ return [];
499
480
  }
500
481
  caughtUpTo(runtime, room.locator);
501
482
  await abandoned(runtime, local, room.locator);
502
- return false;
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
- let set;
512
- try {
513
- set = await runtime.settle(local, room.locator, work, record, work.queue, landing.kind === 'refreshed'
514
- ? {
515
- room: true,
516
- view: 'refreshed',
517
- commit: { refreshed: true },
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
- catch (error) {
529
- if (!refusedForSpace(error))
530
- throw error;
531
- caughtUpTo(runtime, room.locator);
532
- return true;
533
- }
534
- if (landing.kind === 'bootstrapped') {
535
- runtime.socket.rooms.readied(room.locator);
536
- store.installs.change(room.locator, (held) => ({
537
- ...transferGone(held),
538
- highest: null,
539
- beyondHorizon: false,
540
- startedOver: null,
541
- catching: false,
542
- }));
543
- runtime.socket.rooms.stand(room.locator, { unheldModel: null });
544
- if (prior !== undefined && prior.record.key !== record.key)
545
- sweep(runtime);
546
- void name(runtime, room.locator);
547
- }
548
- usable(runtime, room);
549
- void runtime.store.changed(set);
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
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AA8M5C,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,QAOhD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,QAS1C;AAED,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,OAAO,QAQ9F;AAED,wBAAsB,IAAI,CAAC,OAAO,EAAE,OAAO,iBAS1C;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,SAAS,QAwCtE"}
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 { submitAll } from './acceptance.js';
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
- socket.rooms.unreadied();
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, socket } = runtime;
46
- const reloading = socket.rooms
47
- .discoveredRooms()
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 { rooms, lanes } = socket;
58
- const discovered = rooms.discoveredRooms();
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
- rooms.stand(room.locator, { reloadDue: true });
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
- rooms.stand(room.locator, { reloadDue: false });
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, socket.rooms
115
- .discoveredRooms()
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)), 'current', local);
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, journal } = runtime;
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
- submitAll(runtime);
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.reconcile();
163
+ await reconcileConversations(conversations);
157
164
  if (conversations.current()) {
158
- show(runtime);
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.catchUp(progress);
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, journal } = runtime;
184
- socket.rooms.standAll({ unpreparable: false });
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
- socket.rooms.unreadied();
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.receive(event);
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
- socket.rooms.connectionLive();
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({ socket }: Runtime, locator: string, stored: Stored | undefined): {
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({ store, socket }: Runtime, held: ReadonlyMap<string, unknown>): string[];
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(runtime: Runtime, listing: Listing): readonly AppRoom[];
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 {};
@@ -1 +1 @@
1
- {"version":3,"file":"listing.d.ts","sourceRoot":"","sources":["../src/listing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"listing.d.ts","sourceRoot":"","sources":["../src/listing.ts"],"names":[],"mappings":"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"}