@agentshouse/mdruntime 0.1.0-c09bf842921ff → 0.1.0-c0c1e81da9166

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 (99) hide show
  1. package/README.md +1 -1
  2. package/dist/adapter.d.ts +14 -16
  3. package/dist/adapter.d.ts.map +1 -1
  4. package/dist/bootstrap.d.ts +8 -4
  5. package/dist/bootstrap.d.ts.map +1 -1
  6. package/dist/bootstrap.js +206 -76
  7. package/dist/change.d.ts +1 -0
  8. package/dist/change.d.ts.map +1 -1
  9. package/dist/chat-types.d.ts +3 -0
  10. package/dist/chat-types.d.ts.map +1 -0
  11. package/dist/chat-types.js +2 -0
  12. package/dist/client.d.ts +2 -0
  13. package/dist/client.d.ts.map +1 -1
  14. package/dist/compile.d.ts +5 -0
  15. package/dist/compile.d.ts.map +1 -1
  16. package/dist/compile.js +186 -55
  17. package/dist/connection.d.ts +4 -2
  18. package/dist/connection.d.ts.map +1 -1
  19. package/dist/connection.js +1362 -1040
  20. package/dist/conversation-row.d.ts +33 -0
  21. package/dist/conversation-row.d.ts.map +1 -0
  22. package/dist/conversation-row.js +47 -0
  23. package/dist/conversation.d.ts +13 -5
  24. package/dist/conversation.d.ts.map +1 -1
  25. package/dist/conversation.js +354 -192
  26. package/dist/entry.d.ts.map +1 -1
  27. package/dist/entry.js +1 -0
  28. package/dist/figures.d.ts +48 -0
  29. package/dist/figures.d.ts.map +1 -0
  30. package/dist/figures.js +197 -0
  31. package/dist/index.d.ts +8 -4
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +3 -1
  34. package/dist/job.d.ts +20 -1
  35. package/dist/job.d.ts.map +1 -1
  36. package/dist/job.js +26 -0
  37. package/dist/live.d.ts +4 -4
  38. package/dist/live.d.ts.map +1 -1
  39. package/dist/live.js +53 -15
  40. package/dist/memory.d.ts +1 -0
  41. package/dist/memory.d.ts.map +1 -1
  42. package/dist/memory.js +11 -3
  43. package/dist/messages.d.ts +25 -1
  44. package/dist/messages.d.ts.map +1 -1
  45. package/dist/messages.js +82 -3
  46. package/dist/model.d.ts +0 -2
  47. package/dist/model.d.ts.map +1 -1
  48. package/dist/model.js +0 -6
  49. package/dist/overlay.d.ts +1 -0
  50. package/dist/overlay.d.ts.map +1 -1
  51. package/dist/overlay.js +11 -0
  52. package/dist/parts.d.ts +59 -0
  53. package/dist/parts.d.ts.map +1 -0
  54. package/dist/parts.js +118 -0
  55. package/dist/query.d.ts +10 -0
  56. package/dist/query.d.ts.map +1 -1
  57. package/dist/questions.d.ts +32 -0
  58. package/dist/questions.d.ts.map +1 -0
  59. package/dist/questions.js +118 -0
  60. package/dist/reach.d.ts +5 -5
  61. package/dist/reach.d.ts.map +1 -1
  62. package/dist/reach.js +151 -99
  63. package/dist/read.d.ts +7 -0
  64. package/dist/read.d.ts.map +1 -0
  65. package/dist/read.js +17 -0
  66. package/dist/recovery.d.ts.map +1 -1
  67. package/dist/recovery.js +9 -1
  68. package/dist/refresh.d.ts +1 -1
  69. package/dist/refresh.d.ts.map +1 -1
  70. package/dist/refresh.js +4 -0
  71. package/dist/replica.d.ts.map +1 -1
  72. package/dist/replica.js +23 -6
  73. package/dist/save.d.ts.map +1 -1
  74. package/dist/save.js +10 -7
  75. package/dist/source.d.ts +61 -0
  76. package/dist/source.d.ts.map +1 -0
  77. package/dist/source.js +81 -0
  78. package/dist/status.d.ts +0 -2
  79. package/dist/status.d.ts.map +1 -1
  80. package/dist/status.js +0 -6
  81. package/dist/store.d.ts +85 -25
  82. package/dist/store.d.ts.map +1 -1
  83. package/dist/store.js +136 -98
  84. package/dist/stored.d.ts +55 -28
  85. package/dist/stored.d.ts.map +1 -1
  86. package/dist/stored.js +187 -74
  87. package/dist/tables.d.ts +91 -19
  88. package/dist/tables.d.ts.map +1 -1
  89. package/dist/tables.js +160 -34
  90. package/dist/tallies.d.ts +18 -0
  91. package/dist/tallies.d.ts.map +1 -0
  92. package/dist/tallies.js +129 -0
  93. package/dist/wire.d.ts +1 -0
  94. package/dist/wire.d.ts.map +1 -1
  95. package/dist/wire.js +1 -0
  96. package/package.json +2 -2
  97. package/dist/fence.d.ts +0 -6
  98. package/dist/fence.d.ts.map +0 -1
  99. package/dist/fence.js +0 -10
@@ -0,0 +1,118 @@
1
+ import { excerpt, list, record, text } from './read.js';
2
+ const OPTION = 'optionId';
3
+ function choicesOf(schema) {
4
+ const items = record(schema.items);
5
+ const listed = [schema.oneOf, schema.enum, items.anyOf, items.enum].find(Array.isArray) ?? [];
6
+ return listed.flatMap((one) => {
7
+ if (typeof one === 'string')
8
+ return [{ value: one, label: one, about: null }];
9
+ const value = text(record(one), 'const');
10
+ return value === null
11
+ ? []
12
+ : [
13
+ {
14
+ value,
15
+ label: text(record(one), 'title') ?? value,
16
+ about: text(record(one), 'description'),
17
+ },
18
+ ];
19
+ });
20
+ }
21
+ function fieldOf(name, schema) {
22
+ const type = text(schema, 'type');
23
+ const kind = type === 'boolean' || type === 'number' || type === 'integer'
24
+ ? type
25
+ : type === 'array'
26
+ ? 'multi-select'
27
+ : 'string';
28
+ return {
29
+ name,
30
+ kind,
31
+ prompt: text(schema, 'title') ?? name,
32
+ about: text(schema, 'description'),
33
+ choices: kind === 'boolean' ? [] : choicesOf(schema),
34
+ };
35
+ }
36
+ export function entered(field) {
37
+ return field.kind !== 'boolean' && field.choices.length === 0;
38
+ }
39
+ function valueOf(field, raw) {
40
+ return field.kind === 'number' || field.kind === 'integer' ? Number(raw) : raw;
41
+ }
42
+ function typed(fields, answer) {
43
+ return Object.fromEntries(Object.entries(answer).map(([name, value]) => {
44
+ const field = fields.find((one) => one.name === name);
45
+ return [
46
+ name,
47
+ field !== undefined && entered(field) && typeof value === 'string'
48
+ ? valueOf(field, value)
49
+ : value,
50
+ ];
51
+ }));
52
+ }
53
+ function askedOf(request) {
54
+ const params = record(request.params);
55
+ const method = text(request, 'method');
56
+ if (method === 'session/request_permission') {
57
+ return {
58
+ message: '',
59
+ fields: [
60
+ {
61
+ name: OPTION,
62
+ kind: 'string',
63
+ prompt: text(record(params.toolCall), 'title') ?? '',
64
+ about: null,
65
+ choices: list(params, 'options').flatMap((entry) => {
66
+ const one = record(entry);
67
+ const value = text(one, OPTION);
68
+ return value === null
69
+ ? []
70
+ : [{ value, label: text(one, 'name') ?? value, about: null }];
71
+ }),
72
+ },
73
+ ],
74
+ accept: (answer) => ({ outcome: { outcome: 'selected', optionId: answer[OPTION] } }),
75
+ decline: null,
76
+ };
77
+ }
78
+ if (method !== 'elicitation/create')
79
+ return null;
80
+ const fields = Object.entries(record(record(params.requestedSchema).properties)).map(([name, schema]) => fieldOf(name, record(schema)));
81
+ return {
82
+ message: text(params, 'message') ?? '',
83
+ fields,
84
+ accept: (answer) => ({ action: 'accept', content: typed(fields, answer) }),
85
+ decline: { action: 'decline' },
86
+ };
87
+ }
88
+ export function questionsOf(view) {
89
+ return (view?.questions ?? []).flatMap((entry) => {
90
+ const one = record(entry);
91
+ const interaction = text(one, 'interaction_id');
92
+ const asked = askedOf(record(one.request));
93
+ return asked === null || interaction === null
94
+ ? []
95
+ : [
96
+ {
97
+ interaction,
98
+ secret: one.secret === true,
99
+ undelivered: one.telegram_undelivered === true,
100
+ ...asked,
101
+ },
102
+ ];
103
+ });
104
+ }
105
+ export function openQuestion(questions) {
106
+ const [asked] = questionsOf({ questions });
107
+ if (asked === undefined)
108
+ return null;
109
+ const said = asked.message === '' ? asked.fields[0]?.prompt : asked.message;
110
+ return said === undefined || said === '' ? null : excerpt(said);
111
+ }
112
+ export function loneOf(questions) {
113
+ const asked = questions.length === 1 && !questions[0]?.secret ? questions[0] : undefined;
114
+ const only = asked?.fields.length === 1 ? asked.fields[0] : undefined;
115
+ return asked !== undefined && only !== undefined && entered(only)
116
+ ? { question: asked, field: only }
117
+ : null;
118
+ }
package/dist/reach.d.ts CHANGED
@@ -28,16 +28,16 @@ export type NarrowedView = RuntimeView & {
28
28
  narrow(reach: PortReach | null): void;
29
29
  };
30
30
  export type Reachable = RuntimeView & {
31
- plan(input: unknown, reach: PortReach | null): Plan;
31
+ plan(input: unknown, reach: PortReach | null): Promise<Plan>;
32
32
  query(plan: Plan): Promise<QueryResult>;
33
33
  watchPlan(plan: Plan, deliver: Deliver, fail: Fail): () => void;
34
34
  search(input: unknown, reach: PortReach | null): Promise<SearchResult>;
35
35
  watchReadiness(port: ReadinessPort, reach: PortReach | null, deliver: (readiness: Readiness) => void): () => void;
36
- locked(room: string): boolean;
37
- lockedRooms(): readonly string[];
36
+ locked(room: string): Promise<boolean>;
37
+ lockedRooms(): Promise<readonly string[]>;
38
38
  watchLocks(notify: () => void): () => void;
39
- located(room: string, path: string, destination: string): ReachedDocument | null;
40
- room(locator: string): AppRoom | undefined;
39
+ located(room: string, path: string, destination: string): Promise<ReachedDocument | null>;
40
+ room(locator: string): Promise<AppRoom | undefined>;
41
41
  };
42
42
  export declare function holds(reach: PortReach | null, room: string): boolean;
43
43
  export declare function governs(reach: PortReach | null, room: {
@@ -1 +1 @@
1
- {"version":3,"file":"reach.d.ts","sourceRoot":"","sources":["../src/reach.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reach.d.ts","sourceRoot":"","sources":["../src/reach.ts"],"names":[],"mappings":"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"}
package/dist/reach.js CHANGED
@@ -170,14 +170,60 @@ export function narrowed(runtime, given, port) {
170
170
  stop();
171
171
  };
172
172
  }
173
- const unlocking = (rooms) => {
174
- const locked = (rooms ?? []).filter((room) => runtime.locked(room));
175
- return locked.length === 0
176
- ? null
177
- : { pending: locked.map((room) => ({ room, awaits: 'unlock' })) };
173
+ const unlocking = (rooms, locked) => {
174
+ const held = (rooms ?? []).filter((room) => locked.includes(room));
175
+ return held.length === 0 ? null : { pending: held.map((room) => ({ room, awaits: 'unlock' })) };
178
176
  };
179
- const unlocked = (entries) => entries.filter((entry) => !runtime.locked(entry.room));
180
- const intoLocked = (held) => held.some((move) => move?.room !== undefined && runtime.locked(move.room));
177
+ const unlocked = (entries, locked) => entries.filter((entry) => !locked.includes(entry.room));
178
+ const intoLocked = async (held) => {
179
+ for (const move of held) {
180
+ if (move?.room !== undefined && (await runtime.locked(move.room)))
181
+ return true;
182
+ }
183
+ return false;
184
+ };
185
+ function ordered(deliver) {
186
+ let open = true;
187
+ let shown = Promise.resolve();
188
+ return {
189
+ push(making) {
190
+ shown = shown.then(() => making.then((value) => {
191
+ if (open)
192
+ deliver(value);
193
+ }, () => { }), () => { });
194
+ },
195
+ stop() {
196
+ open = false;
197
+ },
198
+ };
199
+ }
200
+ function unlockedWatch(topic, input, deliver, fail, within) {
201
+ const shown = ordered(deliver);
202
+ const stop = watch(topic, input, (message) => {
203
+ shown.push(runtime.lockedRooms().then((locked) => within(message, locked)));
204
+ }, fail);
205
+ return () => {
206
+ shown.stop();
207
+ stop();
208
+ };
209
+ }
210
+ function lockedFirst(room, start, shut) {
211
+ let open = true;
212
+ let stop = () => { };
213
+ void (async () => {
214
+ const closed = !holds(reach, room) || (await runtime.locked(room));
215
+ if (!open)
216
+ return;
217
+ if (closed)
218
+ shut();
219
+ else
220
+ stop = start();
221
+ })();
222
+ return () => {
223
+ open = false;
224
+ stop();
225
+ };
226
+ }
181
227
  const within = (topic, input, deliver, fail) => {
182
228
  if (topic === 'rooms') {
183
229
  return following(() => watch(topic, input, (rooms) => deliver(roomsWithin(reach, rooms)), fail));
@@ -186,55 +232,59 @@ export function narrowed(runtime, given, port) {
186
232
  return following(() => runtime.watchReadiness(port, reach, deliver));
187
233
  }
188
234
  if (topic === 'sync-status') {
189
- return following(() => watch(topic, input, (status) => {
190
- const within = statusWithin(reach, status);
191
- deliver({ ...within, attentionRequired: unlocked(within.attentionRequired) });
192
- }, fail), true);
235
+ return following(() => unlockedWatch(topic, input, deliver, fail, (status, locked) => {
236
+ const shown = statusWithin(reach, status);
237
+ return { ...shown, attentionRequired: unlocked(shown.attentionRequired, locked) };
238
+ }), true);
193
239
  }
194
240
  if (topic === 'room-drafts') {
195
- return following(() => watch(topic, input, (drafts) => deliver(unlocked(draftsWithin(reach, drafts))), fail), true);
241
+ return following(() => unlockedWatch(topic, input, deliver, fail, (drafts, locked) => unlocked(draftsWithin(reach, drafts), locked)), true);
196
242
  }
197
243
  if (topic === 'queue') {
198
244
  const room = input[0];
199
- return following(() => {
200
- if (!holds(reach, room) || runtime.locked(room)) {
201
- deliver([]);
202
- return () => { };
203
- }
204
- return watch(topic, input, (entries) => deliver(queueWithin(reach, room, entries)), fail);
205
- }, true);
245
+ return following(() => lockedFirst(room, () => watch(topic, input, (entries) => deliver(queueWithin(reach, room, entries)), fail), () => deliver([])), true);
206
246
  }
207
247
  if (topic === 'query') {
208
- const plan = runtime.plan(input[0], reach);
248
+ const planning = runtime.plan(input[0], reach);
209
249
  let held = null;
210
250
  return following(() => {
211
- const locked = unlocking(plan.rooms);
212
- if (locked !== null) {
213
- const answer = { result: locked, keys: [] };
214
- if (held === null || changeOf(held, answer) !== null)
215
- deliver(answer);
216
- held = digestOf(answer);
217
- return () => { };
218
- }
219
- let first = true;
220
251
  let open = true;
221
- const heard = (message) => {
222
- if (!first) {
223
- held = digestApplied(held, message);
224
- deliver(message);
252
+ let stop = () => { };
253
+ void (async () => {
254
+ const plan = await planning;
255
+ const locked = await runtime.lockedRooms();
256
+ if (!open)
257
+ return;
258
+ const pending = unlocking(plan.rooms, locked);
259
+ if (pending !== null) {
260
+ const answer = { result: pending, keys: [] };
261
+ if (held === null || changeOf(held, answer) !== null)
262
+ deliver(answer);
263
+ held = digestOf(answer);
225
264
  return;
226
265
  }
227
- first = false;
228
- const change = held === null ? message : changeOf(held, message);
229
- held = digestOf(message);
230
- if (change !== null)
231
- deliver(change);
232
- };
233
- const current = { ...plan, reach: planReach(reach), locked: runtime.lockedRooms() };
234
- const stop = runtime.watchPlan(current, (message) => {
235
- if (open)
236
- heard(message);
237
- }, (error) => {
266
+ let first = true;
267
+ const heard = (message) => {
268
+ if (!first) {
269
+ held = digestApplied(held, message);
270
+ deliver(message);
271
+ return;
272
+ }
273
+ first = false;
274
+ const change = held === null ? message : changeOf(held, message);
275
+ held = digestOf(message);
276
+ if (change !== null)
277
+ deliver(change);
278
+ };
279
+ const current = { ...plan, reach: planReach(reach), locked };
280
+ stop = runtime.watchPlan(current, (message) => {
281
+ if (open)
282
+ heard(message);
283
+ }, (error) => {
284
+ if (open)
285
+ fail(error);
286
+ });
287
+ })().catch((error) => {
238
288
  if (open)
239
289
  fail(error);
240
290
  });
@@ -260,6 +310,12 @@ export function narrowed(runtime, given, port) {
260
310
  return () => { };
261
311
  });
262
312
  }
313
+ if (topic === 'figures') {
314
+ if (reach === null)
315
+ return watch(topic, input, deliver, fail);
316
+ fail(deviceUnreached());
317
+ return () => { };
318
+ }
263
319
  return watch(topic, input, deliver, fail);
264
320
  };
265
321
  const files = new Map();
@@ -278,31 +334,33 @@ export function narrowed(runtime, given, port) {
278
334
  const view = {
279
335
  ...md,
280
336
  rooms: () => md.rooms().then((rooms) => roomsWithin(reach, rooms)),
281
- query: ((input) => {
282
- const plan = runtime.plan(input, reach);
283
- return Promise.resolve(unlocking(plan.rooms) ?? runtime.query({ ...plan, locked: runtime.lockedRooms() }));
337
+ query: (async (input) => {
338
+ const plan = await runtime.plan(input, reach);
339
+ const locked = await runtime.lockedRooms();
340
+ return unlocking(plan.rooms, locked) ?? runtime.query({ ...plan, locked });
284
341
  }),
285
342
  search: (input) => runtime.search(input, reach),
286
- types(room) {
287
- if (holds(reach, room) && runtime.locked(room))
343
+ async types(room) {
344
+ if (holds(reach, room) && (await runtime.locked(room)))
288
345
  throw lockedError(room);
289
346
  if (wholly(reach, room))
290
347
  return md.types(room);
291
348
  if (!holds(reach, room))
292
349
  return structuredClone(UNHELD_TYPES);
293
- return typesWithin(reach, runtime.room(room), md.types(room));
350
+ return typesWithin(reach, await runtime.room(room), await md.types(room));
294
351
  },
295
352
  async save(room, roomDrafts, writtenBy) {
296
353
  if (!holds(reach, room))
297
354
  throw unreached(room);
298
- if (runtime.locked(room))
355
+ if (await runtime.locked(room)) {
299
356
  return { outcome: 'refused', code: ROOM_LOCKED, retryable: true };
357
+ }
300
358
  const held = (await Promise.all(roomDrafts.map(({ path }) => md.roomDraft.read(room, path)))).map((draft) => draft?.parts.move);
301
359
  const outside = roomDrafts.find(({ path }, at) => !covers(reach, room, path) || !moves(reach, room, held[at]));
302
360
  if (outside !== undefined) {
303
361
  return { outcome: 'refused', code: 'stale', retryable: false, file: outside.path };
304
362
  }
305
- if (intoLocked(held))
363
+ if (await intoLocked(held))
306
364
  return { outcome: 'refused', code: ROOM_LOCKED, retryable: true };
307
365
  return savedWithin(reach, room, await md.save(room, roomDrafts, writtenBy));
308
366
  },
@@ -313,47 +371,48 @@ export function narrowed(runtime, given, port) {
313
371
  if (filed !== undefined) {
314
372
  return { outcome: 'refused', code: ATTACH_REQUIRED, retryable: false, file: filed.path };
315
373
  }
316
- if (runtime.locked(room))
374
+ if (await runtime.locked(room)) {
317
375
  return { outcome: 'refused', code: ROOM_LOCKED, retryable: true };
376
+ }
318
377
  const held = parts.map(({ path, parts: one }) => readParts(one, path).move);
319
378
  if (parts.some(({ path }, at) => !covers(reach, room, path) || !moves(reach, room, held[at]))) {
320
379
  throw unreached(room);
321
380
  }
322
- if (intoLocked(held))
381
+ if (await intoLocked(held))
323
382
  return { outcome: 'refused', code: ROOM_LOCKED, retryable: true };
324
383
  return savedWithin(reach, room, await md.saveParts(room, parts, writtenBy));
325
384
  },
326
- resolve(room, path, destination) {
327
- const at = runtime.located(room, path, destination);
385
+ async resolve(room, path, destination) {
386
+ const at = await runtime.located(room, path, destination);
328
387
  return at !== null && !covers(reach, at.room, at.path)
329
- ? Promise.resolve(UNREADABLE)
388
+ ? UNREADABLE
330
389
  : md.resolve(room, path, destination);
331
390
  },
332
- history: (room, path, query) => !covers(reach, room, path)
333
- ? Promise.resolve(failure({ kind: 'room-not-readable', locator: room }))
334
- : runtime.locked(room)
335
- ? Promise.resolve(lockedRoom(room))
391
+ history: async (room, path, query) => !covers(reach, room, path)
392
+ ? failure({ kind: 'room-not-readable', locator: room })
393
+ : (await runtime.locked(room))
394
+ ? lockedRoom(room)
336
395
  : md.history(room, path, query),
337
396
  binaryFile: {
338
- read: (room, path, revision) => !covers(reach, room, path)
339
- ? Promise.resolve(failure({ kind: 'room-not-readable', locator: room }))
340
- : runtime.locked(room)
341
- ? Promise.resolve(lockedRoom(room))
397
+ read: async (room, path, revision) => !covers(reach, room, path)
398
+ ? failure({ kind: 'room-not-readable', locator: room })
399
+ : (await runtime.locked(room))
400
+ ? lockedRoom(room)
342
401
  : hand(md.binaryFile.read(room, path, revision)),
343
- link: (room, path, revision) => !covers(reach, room, path)
344
- ? Promise.resolve(failure({ kind: 'room-not-readable', locator: room }))
345
- : runtime.locked(room)
346
- ? Promise.resolve(lockedRoom(room))
402
+ link: async (room, path, revision) => !covers(reach, room, path)
403
+ ? failure({ kind: 'room-not-readable', locator: room })
404
+ : (await runtime.locked(room))
405
+ ? lockedRoom(room)
347
406
  : md.binaryFile.link(room, path, revision),
348
- show: (room, path, revision) => !covers(reach, room, path)
349
- ? Promise.resolve(failure({ kind: 'room-not-readable', locator: room }))
350
- : runtime.locked(room)
351
- ? Promise.resolve(lockedRoom(room))
407
+ show: async (room, path, revision) => !covers(reach, room, path)
408
+ ? failure({ kind: 'room-not-readable', locator: room })
409
+ : (await runtime.locked(room))
410
+ ? lockedRoom(room)
352
411
  : hand(md.binaryFile.show(room, path, revision)),
353
- attach: (room, file) => !wholly(reach, room)
354
- ? Promise.resolve(failure({ kind: 'room-not-readable', locator: room }))
355
- : runtime.locked(room)
356
- ? Promise.resolve(lockedRoom(room))
412
+ attach: async (room, file) => !wholly(reach, room)
413
+ ? failure({ kind: 'room-not-readable', locator: room })
414
+ : (await runtime.locked(room))
415
+ ? lockedRoom(room)
357
416
  : md.binaryFile.attach(room, file),
358
417
  async part(file, part) {
359
418
  const key = files.get(file);
@@ -366,44 +425,37 @@ export function narrowed(runtime, given, port) {
366
425
  },
367
426
  },
368
427
  reached: async (room, roomVersion, path) => (path === undefined ? wholly(reach, room) : covers(reach, room, path)) &&
369
- !runtime.locked(room) &&
428
+ !(await runtime.locked(room)) &&
370
429
  (await md.reached(room, roomVersion, path)),
371
430
  log: () => (reach === null ? md.log() : ''),
372
431
  cleanUp: () => (reach === null ? md.cleanUp() : Promise.reject(deviceUnreached())),
373
432
  unsent: () => (reach === null ? md.unsent() : Promise.reject(deviceUnreached())),
374
433
  reset: () => (reach === null ? md.reset() : Promise.reject(deviceUnreached())),
375
434
  roomDraft: {
376
- list: () => md.roomDraft.list().then((drafts) => unlocked(draftsWithin(reach, drafts))),
435
+ list: async () => unlocked(draftsWithin(reach, await md.roomDraft.list()), await runtime.lockedRooms()),
377
436
  async read(room, path) {
378
437
  if (!covers(reach, room, path))
379
438
  return null;
380
- if (runtime.locked(room))
439
+ if (await runtime.locked(room))
381
440
  throw lockedError(room);
382
441
  return shownDraft(reach, await md.roomDraft.read(room, path));
383
442
  },
384
- write(room, path, revision, parts, next) {
385
- try {
386
- if (reach !== null && carriesFile(parts))
387
- throw attachRequired();
388
- const move = readParts(parts, path).move;
389
- if (!covers(reach, room, path) || !moves(reach, room, move))
390
- throw unreached(room);
391
- if (runtime.locked(room))
392
- throw lockedError(room);
393
- if (intoLocked([move]))
394
- throw lockedError(move.room);
395
- }
396
- catch (error) {
397
- return Promise.reject(error);
398
- }
399
- return md.roomDraft
400
- .write(room, path, revision, parts, next)
401
- .then((written) => writeWithin(reach, written));
443
+ async write(room, path, revision, parts, next) {
444
+ if (reach !== null && carriesFile(parts))
445
+ throw attachRequired();
446
+ const move = readParts(parts, path).move;
447
+ if (!covers(reach, room, path) || !moves(reach, room, move))
448
+ throw unreached(room);
449
+ if (await runtime.locked(room))
450
+ throw lockedError(room);
451
+ if (await intoLocked([move]))
452
+ throw lockedError(move.room);
453
+ return writeWithin(reach, await md.roomDraft.write(room, path, revision, parts, next));
402
454
  },
403
455
  async discard(room, path, revision) {
404
456
  if (!covers(reach, room, path))
405
457
  return staleWrite(null);
406
- if (runtime.locked(room))
458
+ if (await runtime.locked(room))
407
459
  throw lockedError(room);
408
460
  return writeWithin(reach, await md.roomDraft.discard(room, path, revision));
409
461
  },
package/dist/read.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export type Fields = Readonly<Record<string, unknown>>;
2
+ export declare const EXCERPT = 512;
3
+ export declare function excerpt(said: string): string;
4
+ export declare function record(entry: unknown): Fields;
5
+ export declare function text(fields: Fields, name: string): string | null;
6
+ export declare function list(fields: Fields, name: string): readonly unknown[];
7
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../src/read.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEvD,eAAO,MAAM,OAAO,MAAM,CAAC;AAE3B,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAI7C;AAED,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGhE;AAED,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,OAAO,EAAE,CAGrE"}
package/dist/read.js ADDED
@@ -0,0 +1,17 @@
1
+ export const EXCERPT = 512;
2
+ export function excerpt(said) {
3
+ return [...said.slice(0, EXCERPT * 2)].slice(0, EXCERPT).join('');
4
+ }
5
+ export function record(entry) {
6
+ return typeof entry === 'object' && entry !== null && !Array.isArray(entry)
7
+ ? entry
8
+ : {};
9
+ }
10
+ export function text(fields, name) {
11
+ const value = fields[name];
12
+ return typeof value === 'string' && value !== '' ? value : null;
13
+ }
14
+ export function list(fields, name) {
15
+ const value = fields[name];
16
+ return Array.isArray(value) ? value : [];
17
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,MAAM,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AAElE,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEhF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClF,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,MAAM,IAAI,IAAI,CAAC;IACf,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACnC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB,CAAC;AAsBF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,SAAW,EAAE,KAAK,SAAS,GAAG,MAAM,CAGpF;AAED,wBAAsB,aAAa,CAAC,CAAC,EACnC,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACrB,MAAM,EAAE,WAAW,EACnB,QAAQ,GAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAoB,GAC5C,OAAO,CAAC,CAAC,CAAC,CAsBZ;AAwKD,wBAAgB,cAAc,CAAC,OAAO,GAAE,eAAoB,GAAG,QAAQ,CAStE"}
1
+ {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,MAAM,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AAElE,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEhF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClF,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,MAAM,IAAI,IAAI,CAAC;IACf,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACnC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB,CAAC;AAsBF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,SAAW,EAAE,KAAK,SAAS,GAAG,MAAM,CAGpF;AAED,wBAAsB,aAAa,CAAC,CAAC,EACnC,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACrB,MAAM,EAAE,WAAW,EACnB,QAAQ,GAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAoB,GAC5C,OAAO,CAAC,CAAC,CAAC,CAsBZ;AA8KD,wBAAgB,cAAc,CAAC,OAAO,GAAE,eAAoB,GAAG,QAAQ,CAStE"}
package/dist/recovery.js CHANGED
@@ -106,7 +106,15 @@ function owner(backoff, inFlight, release = () => { }) {
106
106
  }
107
107
  intent.tries += 1;
108
108
  if (intent.tries >= backoff.attempts) {
109
- finish(key, intent, false);
109
+ if (again === null) {
110
+ finish(key, intent, false);
111
+ return;
112
+ }
113
+ intent.tries = 0;
114
+ if (again === 'now')
115
+ launch(key, intent);
116
+ else
117
+ wait(key, intent, again, true);
110
118
  return;
111
119
  }
112
120
  if (result === 'again') {
package/dist/refresh.d.ts CHANGED
@@ -20,7 +20,7 @@ export type Refreshing = {
20
20
  later(paths: readonly string[], roomVersion: string): Promise<ReadonlySet<string>>;
21
21
  stage(page: RefreshedPage): Promise<boolean>;
22
22
  };
23
- type PageContent = Pick<RefreshPage, 'documents' | 'facts' | 'revisions' | 'fileIds' | 'changes' | 'binaryFiles'>;
23
+ type PageContent = Pick<RefreshPage, 'documents' | 'facts' | 'revisions' | 'fileIds' | 'created' | 'changes' | 'binaryFiles'>;
24
24
  export declare function pageEntries(page: PageContent, removals: readonly string[], roomVersion: string, prior: (paths: readonly string[]) => Promise<ReadonlyMap<string, HeldEntry>>): Promise<StoredEntry[]>;
25
25
  export declare function advancement(refresh: Refresher, authorization: Authorization, held: ReplicaRecord, remodel: Remodel, continuing: () => boolean, staging: Refreshing): Promise<Advancement>;
26
26
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../src/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,cAAc,EACd,aAAa,EACb,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAG9D,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,GACzE;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B,gBAAgB,GAChB,WAAW,GACX,cAAc,CAAC;AAEnB,MAAM,MAAM,SAAS,GAAG,CACtB,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,cAAc,KACpB,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5B,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,IAAI,IAAI,CAAC;IACb,KAAK,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACzE,KAAK,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IACnF,KAAK,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9C,CAAC;AASF,KAAK,WAAW,GAAG,IAAI,CACrB,WAAW,EACX,WAAW,GAAG,OAAO,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAC5E,CAAC;AAqFF,wBAAsB,WAAW,CAC/B,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,GAC3E,OAAO,CAAC,WAAW,EAAE,CAAC,CAKxB;AA+CD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,SAAS,EAClB,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,OAAO,EACzB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,WAAW,CAAC,CA8CtB"}
1
+ {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../src/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,cAAc,EACd,aAAa,EACb,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAG9D,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,GACzE;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B,gBAAgB,GAChB,WAAW,GACX,cAAc,CAAC;AAEnB,MAAM,MAAM,SAAS,GAAG,CACtB,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,cAAc,KACpB,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5B,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,IAAI,IAAI,CAAC;IACb,KAAK,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACzE,KAAK,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IACnF,KAAK,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9C,CAAC;AASF,KAAK,WAAW,GAAG,IAAI,CACrB,WAAW,EACX,WAAW,GAAG,OAAO,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CACxF,CAAC;AAwFF,wBAAsB,WAAW,CAC/B,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,GAC3E,OAAO,CAAC,WAAW,EAAE,CAAC,CAKxB;AAgDD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,SAAS,EAClB,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,OAAO,EACzB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,WAAW,CAAC,CA8CtB"}
package/dist/refresh.js CHANGED
@@ -49,6 +49,7 @@ function* entering(page, roomVersion, listed, prior) {
49
49
  binary: null,
50
50
  revision: page.revisions[path] ?? prior.get(path)?.revision ?? null,
51
51
  fileId: page.fileIds?.[path] ?? null,
52
+ created: page.created?.[path] ?? null,
52
53
  change: page.changes[path] ?? null,
53
54
  written: roomVersion,
54
55
  });
@@ -62,6 +63,7 @@ function* entering(page, roomVersion, listed, prior) {
62
63
  binary: { state: 'accepted', ...page.binaryFiles[path] },
63
64
  revision: page.revisions[path] ?? prior.get(path)?.revision ?? null,
64
65
  fileId: page.fileIds?.[path] ?? null,
66
+ created: page.created?.[path] ?? null,
65
67
  change: page.changes[path] ?? null,
66
68
  written: null,
67
69
  });
@@ -76,6 +78,7 @@ function* entering(page, roomVersion, listed, prior) {
76
78
  ...kept,
77
79
  revision: page.revisions[path] ?? held.revision,
78
80
  fileId: page.fileIds?.[path] ?? held.fileId,
81
+ created: page.created?.[path] ?? held.created,
79
82
  change: page.changes[path] ?? held.change,
80
83
  });
81
84
  }
@@ -99,6 +102,7 @@ function unwritten(page, kept) {
99
102
  facts: without(page.facts, kept),
100
103
  revisions: without(page.revisions, kept),
101
104
  ...(page.fileIds === undefined ? {} : { fileIds: without(page.fileIds, kept) }),
105
+ ...(page.created === undefined ? {} : { created: without(page.created, kept) }),
102
106
  changes: without(page.changes, kept),
103
107
  binaryFiles: without(page.binaryFiles, kept),
104
108
  removals: page.removals.filter((path) => !kept.has(path)),
@@ -1 +1 @@
1
- {"version":3,"file":"replica.d.ts","sourceRoot":"","sources":["../src/replica.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replica.d.ts","sourceRoot":"","sources":["../src/replica.ts"],"names":[],"mappings":"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"}