@agentshouse/mdruntime 0.1.0-cd507e16e5fc0 → 0.1.0-cd574a610e9c8
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 +21 -19
- package/dist/acceptance.d.ts +0 -3
- package/dist/acceptance.d.ts.map +1 -1
- package/dist/acceptance.js +75 -165
- 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 +118 -67
- package/dist/adapter.d.ts +90 -58
- 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/authored.d.ts +88 -0
- package/dist/authored.d.ts.map +1 -0
- package/dist/authored.js +345 -0
- package/dist/bootstrap.d.ts +1 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +6 -19
- 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 +4 -0
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +7 -2
- package/dist/chat-types.d.ts +0 -2
- package/dist/chat-types.d.ts.map +1 -1
- package/dist/chat-types.js +0 -2
- package/dist/client.d.ts +13 -20
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +36 -20
- package/dist/collection.d.ts +25 -4
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +19 -2
- package/dist/column.d.ts +5 -0
- package/dist/column.d.ts.map +1 -0
- package/dist/column.js +9 -0
- package/dist/compile.d.ts +2 -0
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +31 -25
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +31 -24
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +1 -1
- package/dist/conversation-live.d.ts +26 -12
- package/dist/conversation-live.d.ts.map +1 -1
- package/dist/conversation-live.js +23 -12
- package/dist/conversation-row.d.ts +8 -1
- package/dist/conversation-row.d.ts.map +1 -1
- package/dist/conversation-row.js +20 -7
- package/dist/conversation.d.ts +37 -12
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +320 -234
- 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 +4 -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.map +1 -1
- package/dist/figures.js +4 -2
- package/dist/file.d.ts +1 -1
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +3 -2
- package/dist/host.d.ts +18 -2
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +59 -15
- package/dist/index.d.ts +16 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -7
- package/dist/install.d.ts +10 -6
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +92 -111
- package/dist/lifecycle.d.ts +1 -1
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +54 -40
- package/dist/listing.d.ts +11 -12
- package/dist/listing.d.ts.map +1 -1
- package/dist/listing.js +48 -72
- package/dist/live.d.ts +5 -3
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +74 -33
- package/dist/loaded.d.ts +5 -0
- package/dist/loaded.d.ts.map +1 -0
- package/dist/loaded.js +40 -0
- 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 +11 -23
- package/dist/media.d.ts +6 -1
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +68 -17
- package/dist/memory.d.ts +8 -3
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +92 -33
- package/dist/messages.d.ts +12 -6
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +30 -38
- 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 +97 -139
- package/dist/observation.d.ts +27 -12
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +184 -85
- 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 +5 -9
- package/dist/outcome.d.ts +13 -1
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +32 -2
- package/dist/overlay.d.ts +6 -2
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +37 -24
- 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/preparation.d.ts +27 -6
- package/dist/preparation.d.ts.map +1 -1
- package/dist/preparation.js +156 -68
- package/dist/presence.d.ts +58 -0
- package/dist/presence.d.ts.map +1 -0
- package/dist/presence.js +231 -0
- package/dist/queries.d.ts +2 -2
- package/dist/queries.d.ts.map +1 -1
- package/dist/queries.js +67 -31
- package/dist/query.d.ts +0 -1
- package/dist/query.d.ts.map +1 -1
- package/dist/questions.d.ts +1 -5
- package/dist/questions.d.ts.map +1 -1
- package/dist/questions.js +1 -7
- package/dist/queue.d.ts +40 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +480 -0
- package/dist/reach.d.ts +2 -3
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +88 -26
- package/dist/react.d.ts +8 -1
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +33 -1
- package/dist/readiness.d.ts +9 -3
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +3 -5
- package/dist/reads.d.ts +4 -2
- package/dist/reads.d.ts.map +1 -1
- package/dist/reads.js +11 -4
- 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 -11
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +15 -17
- 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 +31 -8
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +273 -66
- package/dist/room-drafts.d.ts.map +1 -1
- package/dist/room-drafts.js +22 -18
- package/dist/room-list.d.ts +10 -0
- package/dist/room-list.d.ts.map +1 -0
- package/dist/room-list.js +45 -0
- package/dist/rows.d.ts +2 -1
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +9 -10
- package/dist/runtime.d.ts +9 -18
- package/dist/runtime.d.ts.map +1 -1
- package/dist/save.d.ts +42 -90
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +327 -229
- package/dist/saves.d.ts +4 -40
- package/dist/saves.d.ts.map +1 -1
- package/dist/saves.js +143 -714
- package/dist/seed.d.ts.map +1 -1
- package/dist/seed.js +4 -5
- package/dist/shared.d.ts +0 -5
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +4 -90
- package/dist/shown.d.ts +7 -5
- package/dist/shown.d.ts.map +1 -1
- package/dist/shown.js +77 -63
- 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 +5 -7
- package/dist/source.d.ts.map +1 -1
- package/dist/source.js +18 -6
- package/dist/store/installs.d.ts +2 -2
- package/dist/store/installs.d.ts.map +1 -1
- package/dist/store/installs.js +10 -4
- package/dist/store/readiness.d.ts +5 -4
- package/dist/store/readiness.d.ts.map +1 -1
- package/dist/store/readiness.js +28 -12
- package/dist/store/records.d.ts +18 -7
- package/dist/store/records.d.ts.map +1 -1
- package/dist/store/records.js +58 -24
- package/dist/store/rooms-shown.d.ts +8 -0
- package/dist/store/rooms-shown.d.ts.map +1 -0
- package/dist/store/rooms-shown.js +13 -0
- 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 +23 -14
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +46 -17
- package/dist/stored.d.ts +25 -14
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +83 -32
- package/dist/surface.d.ts +5 -3
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +25 -23
- package/dist/sync.d.ts +1 -1
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +96 -92
- package/dist/tables.d.ts +16 -57
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +91 -332
- 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 +4 -10
- 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 -44
- 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/reach.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { QueryError } from '@agentshouse/mdmodel';
|
|
2
|
+
import { selected } from './collection.js';
|
|
1
3
|
import { unheldView } from './conversation.js';
|
|
2
4
|
import { modelTypes, NO_MODEL } from './model.js';
|
|
3
|
-
import { changeOf, digestApplied, digestOf, observing, } from './observation.js';
|
|
4
|
-
import { runtimeError } from './failure.js';
|
|
5
|
-
import { failure, lockedRoom, ROOM_LOCKED, undeclared, UNREADABLE, } from './outcome.js';
|
|
5
|
+
import { changeOf, digestApplied, digestOf, observing, unchanged, } from './observation.js';
|
|
6
|
+
import { runtimeError, uncaught } from './failure.js';
|
|
7
|
+
import { absentBinary, failure, lockedRoom, ROOM_LOCKED, undeclared, UNREADABLE, } from './outcome.js';
|
|
6
8
|
import { beneath } from './paths.js';
|
|
7
9
|
import { moveTarget, readParts, staleWrite, } from './room-draft.js';
|
|
8
10
|
import { documentKey } from './rows.js';
|
|
@@ -19,10 +21,21 @@ const NO_CONVERSATION = {
|
|
|
19
21
|
interrupt: unconversed('conversations/interrupt'),
|
|
20
22
|
kill: unconversed('conversations/kill'),
|
|
21
23
|
delete: unconversed('conversations/delete'),
|
|
24
|
+
takeOut: unconversed('conversations/take-out'),
|
|
25
|
+
decide: unconversed('agent-functions/decide'),
|
|
26
|
+
rename: unconversed('conversations/rename'),
|
|
27
|
+
option: unconversed('conversations/option/set'),
|
|
28
|
+
retry: unconversed('conversations/retry'),
|
|
29
|
+
pin: () => Promise.resolve(),
|
|
30
|
+
openTurn: () => Promise.resolve(),
|
|
31
|
+
dismissSuggestion: () => Promise.resolve(),
|
|
32
|
+
attach: () => Promise.resolve(undeclared('conversation.attach')),
|
|
33
|
+
attachment: (link) => Promise.resolve(absentBinary(link)),
|
|
22
34
|
};
|
|
23
35
|
const NO_CHAT_DRAFT = {
|
|
24
36
|
write: () => Promise.resolve(),
|
|
25
37
|
prepend: () => Promise.resolve(),
|
|
38
|
+
append: () => Promise.resolve(),
|
|
26
39
|
discard: () => Promise.resolve(),
|
|
27
40
|
};
|
|
28
41
|
function areasOf(reach) {
|
|
@@ -45,11 +58,11 @@ export function governs(reach, room) {
|
|
|
45
58
|
if (wholly(reach, room.locator)) {
|
|
46
59
|
return { collection: true, selection: room.typedSelection !== null };
|
|
47
60
|
}
|
|
48
|
-
const
|
|
61
|
+
const within = (path) => selected({ selection: room.typedSelection }, path);
|
|
49
62
|
const paths = reach.documents
|
|
50
63
|
.filter((document) => document.room === room.locator)
|
|
51
64
|
.map(({ path }) => path);
|
|
52
|
-
return { collection: paths.some((path) => !
|
|
65
|
+
return { collection: paths.some((path) => !within(path)), selection: paths.some(within) };
|
|
53
66
|
}
|
|
54
67
|
function covers(reach, room, path) {
|
|
55
68
|
return (reach === null ||
|
|
@@ -60,6 +73,19 @@ function covers(reach, room, path) {
|
|
|
60
73
|
function conversing(reach) {
|
|
61
74
|
return reach === null || reach.conversations;
|
|
62
75
|
}
|
|
76
|
+
function roomsAwaited(error, reach) {
|
|
77
|
+
return error.code === 'unknown-type' && reach !== null && reach.rooms.length === 0;
|
|
78
|
+
}
|
|
79
|
+
async function planInReach(runtime, input, reach, answered) {
|
|
80
|
+
try {
|
|
81
|
+
return await runtime.plan(input, reach);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
if (error instanceof QueryError && (answered || roomsAwaited(error, reach)))
|
|
85
|
+
return null;
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
63
89
|
export function planReach(reach) {
|
|
64
90
|
return reach === null
|
|
65
91
|
? null
|
|
@@ -76,6 +102,14 @@ export function planReach(reach) {
|
|
|
76
102
|
function roomsWithin(reach, rooms) {
|
|
77
103
|
return rooms.filter((room) => wholly(reach, room.locator));
|
|
78
104
|
}
|
|
105
|
+
function roomsChangeWithin(reach, { changed, removed, order }) {
|
|
106
|
+
const within = {
|
|
107
|
+
changed: changed.filter(([locator]) => wholly(reach, locator)),
|
|
108
|
+
removed,
|
|
109
|
+
order: order === null ? null : order.filter((locator) => wholly(reach, locator)),
|
|
110
|
+
};
|
|
111
|
+
return unchanged(within) ? null : within;
|
|
112
|
+
}
|
|
79
113
|
function typesWithin(reach, room, types) {
|
|
80
114
|
if (room === undefined)
|
|
81
115
|
return structuredClone(UNHELD_TYPES);
|
|
@@ -105,12 +139,13 @@ function writeWithin(reach, write) {
|
|
|
105
139
|
function savedWithin(reach, room, result) {
|
|
106
140
|
if (reach === null || result.outcome === 'saved')
|
|
107
141
|
return result;
|
|
108
|
-
const { file, location, referrers, ...refusal } = result;
|
|
142
|
+
const { file, location, line, referrers, ...refusal } = result;
|
|
109
143
|
const hidden = file !== undefined && !covers(reach, room, file);
|
|
110
144
|
return {
|
|
111
145
|
...refusal,
|
|
112
146
|
...(file === undefined || hidden ? {} : { file }),
|
|
113
147
|
...(location === undefined || hidden ? {} : { location }),
|
|
148
|
+
...(line === undefined || hidden ? {} : { line }),
|
|
114
149
|
...(referrers === undefined
|
|
115
150
|
? {}
|
|
116
151
|
: { referrers: referrers.filter((path) => covers(reach, room, path)) }),
|
|
@@ -190,7 +225,7 @@ export function narrowed(runtime, given, port) {
|
|
|
190
225
|
shown = shown.then(() => making.then((value) => {
|
|
191
226
|
if (open)
|
|
192
227
|
deliver(value);
|
|
193
|
-
},
|
|
228
|
+
}, uncaught), uncaught);
|
|
194
229
|
},
|
|
195
230
|
stop() {
|
|
196
231
|
open = false;
|
|
@@ -230,7 +265,13 @@ export function narrowed(runtime, given, port) {
|
|
|
230
265
|
return () => { };
|
|
231
266
|
}
|
|
232
267
|
if (topic === 'rooms') {
|
|
233
|
-
return following(() => watch(topic, input, (rooms) =>
|
|
268
|
+
return following(() => watch(topic, input, (rooms) => {
|
|
269
|
+
const shown = Array.isArray(rooms)
|
|
270
|
+
? roomsWithin(reach, rooms)
|
|
271
|
+
: roomsChangeWithin(reach, rooms);
|
|
272
|
+
if (shown !== null)
|
|
273
|
+
deliver(shown);
|
|
274
|
+
}, fail));
|
|
234
275
|
}
|
|
235
276
|
if (topic === 'readiness') {
|
|
236
277
|
return following(() => runtime.watchReadiness(port, reach, deliver));
|
|
@@ -249,24 +290,31 @@ export function narrowed(runtime, given, port) {
|
|
|
249
290
|
return following(() => lockedFirst(room, () => watch(topic, input, (entries) => deliver(queueWithin(reach, room, entries)), fail), () => deliver([])), true);
|
|
250
291
|
}
|
|
251
292
|
if (topic === 'query') {
|
|
252
|
-
const planning = runtime.plan(input[0], reach);
|
|
253
293
|
let held = null;
|
|
294
|
+
let planning = null;
|
|
295
|
+
const waiting = (result) => {
|
|
296
|
+
const answer = { result, keys: [] };
|
|
297
|
+
if (held === null || changeOf(held, answer) !== null)
|
|
298
|
+
deliver(answer);
|
|
299
|
+
held = digestOf(answer);
|
|
300
|
+
};
|
|
254
301
|
return following(() => {
|
|
255
302
|
let open = true;
|
|
256
303
|
let stop = () => { };
|
|
304
|
+
if (planning?.reach !== reach) {
|
|
305
|
+
planning = { reach, plan: planInReach(runtime, input[0], reach, held !== null) };
|
|
306
|
+
}
|
|
307
|
+
const planned = planning.plan;
|
|
257
308
|
void (async () => {
|
|
258
|
-
const plan = await
|
|
309
|
+
const plan = await planned;
|
|
259
310
|
const locked = await runtime.lockedRooms();
|
|
260
311
|
if (!open)
|
|
261
312
|
return;
|
|
313
|
+
if (plan === null)
|
|
314
|
+
return waiting({ pending: [] });
|
|
262
315
|
const pending = unlocking(plan.rooms, locked);
|
|
263
|
-
if (pending !== null)
|
|
264
|
-
|
|
265
|
-
if (held === null || changeOf(held, answer) !== null)
|
|
266
|
-
deliver(answer);
|
|
267
|
-
held = digestOf(answer);
|
|
268
|
-
return;
|
|
269
|
-
}
|
|
316
|
+
if (pending !== null)
|
|
317
|
+
return waiting(pending);
|
|
270
318
|
let first = true;
|
|
271
319
|
const heard = (message) => {
|
|
272
320
|
if (!first) {
|
|
@@ -280,8 +328,7 @@ export function narrowed(runtime, given, port) {
|
|
|
280
328
|
if (change !== null)
|
|
281
329
|
deliver(change);
|
|
282
330
|
};
|
|
283
|
-
|
|
284
|
-
stop = runtime.watchPlan(current, (message) => {
|
|
331
|
+
stop = runtime.watchPlan({ ...plan, locked }, (message) => {
|
|
285
332
|
if (open)
|
|
286
333
|
heard(message);
|
|
287
334
|
}, (error) => {
|
|
@@ -314,7 +361,10 @@ export function narrowed(runtime, given, port) {
|
|
|
314
361
|
return () => { };
|
|
315
362
|
});
|
|
316
363
|
}
|
|
317
|
-
if (topic === 'figures' ||
|
|
364
|
+
if (topic === 'figures' ||
|
|
365
|
+
topic === 'holdings' ||
|
|
366
|
+
topic === 'listed-agents' ||
|
|
367
|
+
topic === 'room-list') {
|
|
318
368
|
if (reach === null)
|
|
319
369
|
return watch(topic, input, deliver, fail);
|
|
320
370
|
fail(deviceUnreached());
|
|
@@ -339,7 +389,9 @@ export function narrowed(runtime, given, port) {
|
|
|
339
389
|
...md,
|
|
340
390
|
rooms: () => md.rooms().then((rooms) => roomsWithin(reach, rooms)),
|
|
341
391
|
query: (async (input) => {
|
|
342
|
-
const plan = await runtime
|
|
392
|
+
const plan = await planInReach(runtime, input, reach, false);
|
|
393
|
+
if (plan === null)
|
|
394
|
+
return { pending: [] };
|
|
343
395
|
const locked = await runtime.lockedRooms();
|
|
344
396
|
return unlocking(plan.rooms, locked) ?? runtime.query({ ...plan, locked });
|
|
345
397
|
}),
|
|
@@ -431,7 +483,6 @@ export function narrowed(runtime, given, port) {
|
|
|
431
483
|
reached: async (room, roomVersion, path) => (path === undefined ? wholly(reach, room) : covers(reach, room, path)) &&
|
|
432
484
|
!(await runtime.locked(room)) &&
|
|
433
485
|
(await md.reached(room, roomVersion, path)),
|
|
434
|
-
log: () => (reach === null ? md.log() : ''),
|
|
435
486
|
cleanUp: () => (reach === null ? md.cleanUp() : Promise.reject(deviceUnreached())),
|
|
436
487
|
unsent: () => (reach === null ? md.unsent() : Promise.reject(deviceUnreached())),
|
|
437
488
|
reset: () => (reach === null ? md.reset() : Promise.reject(deviceUnreached())),
|
|
@@ -470,14 +521,25 @@ export function narrowed(runtime, given, port) {
|
|
|
470
521
|
read: (id, options) => conversation().read(id, options),
|
|
471
522
|
create: (input) => conversation().create(input),
|
|
472
523
|
send: (id, operation, draft) => conversation().send(id, operation, draft),
|
|
473
|
-
answer: (id, answer) => conversation().answer(id, answer),
|
|
474
|
-
interrupt: (id) => conversation().interrupt(id),
|
|
475
|
-
kill: (id) => conversation().kill(id),
|
|
476
|
-
delete: (id) => conversation().delete(id),
|
|
524
|
+
answer: (id, answer, operation) => conversation().answer(id, answer, operation),
|
|
525
|
+
interrupt: (id, operation) => conversation().interrupt(id, operation),
|
|
526
|
+
kill: (id, operation) => conversation().kill(id, operation),
|
|
527
|
+
delete: (id, operation) => conversation().delete(id, operation),
|
|
528
|
+
takeOut: (id, message, operation) => conversation().takeOut(id, message, operation),
|
|
529
|
+
decide: (request, decision, operation) => conversation().decide(request, decision, operation),
|
|
530
|
+
rename: (id, name, operation) => conversation().rename(id, name, operation),
|
|
531
|
+
option: (id, option, value, operation) => conversation().option(id, option, value, operation),
|
|
532
|
+
retry: (id, message, operation) => conversation().retry(id, message, operation),
|
|
533
|
+
pin: (figures) => conversation().pin(figures),
|
|
534
|
+
openTurn: (id, turn) => conversation().openTurn(id, turn),
|
|
535
|
+
dismissSuggestion: (id, suggestion) => conversation().dismissSuggestion(id, suggestion),
|
|
536
|
+
attach: (file) => conversation().attach(file),
|
|
537
|
+
attachment: (link) => conversation().attachment(link),
|
|
477
538
|
},
|
|
478
539
|
chatDraft: {
|
|
479
540
|
write: (id, draft, revision) => chatDraft().write(id, draft, revision),
|
|
480
541
|
prepend: (id, draft) => chatDraft().prepend(id, draft),
|
|
542
|
+
append: (id, draft) => chatDraft().append(id, draft),
|
|
481
543
|
discard: (id) => chatDraft().discard(id),
|
|
482
544
|
},
|
|
483
545
|
observe: observing(within),
|
package/dist/react.d.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import type { DocumentQuery, GroupQuery } from '@agentshouse/mdmodel';
|
|
2
|
+
import type { Acting, Lane, LaneShown } from './act-lanes.js';
|
|
2
3
|
import type { MdRuntimeClient } from './client.js';
|
|
3
4
|
import type { AppRoom } from './listing.js';
|
|
4
5
|
import type { ConnectionRefusal } from './socket.js';
|
|
5
6
|
import type { SavedRoomDraft, SaveResult } from './saves.js';
|
|
6
|
-
import type { Member, ServiceMode } from './adapter.js';
|
|
7
|
+
import type { ListedAgent, Member, RoomList, ServiceMode } from './adapter.js';
|
|
7
8
|
import type { ConversationAgent, ConversationEntry, ConversationOptions, ConversationView } from './conversation.js';
|
|
8
9
|
import { type RuntimeError } from './failure.js';
|
|
9
10
|
import type { FiguresResult } from './figures.js';
|
|
10
11
|
import type { Holdings } from './holdings.js';
|
|
12
|
+
import type { Descriptor, Expecting } from './expectation.js';
|
|
11
13
|
import type { QueueEntry } from './outcome.js';
|
|
12
14
|
import type { DocumentResult, GroupResult, PendingResult } from './query.js';
|
|
13
15
|
import type { Readiness } from './readiness.js';
|
|
@@ -37,8 +39,13 @@ export declare function useObserve(client: Client, topic: 'presentation'): Obser
|
|
|
37
39
|
export declare function useObserve(client: Client, topic: 'conversation', conversation: string, options: ConversationOptions): Observed<ConversationView>;
|
|
38
40
|
export declare function useObserve(client: Client, topic: 'conversations'): Observed<readonly ConversationEntry[]>;
|
|
39
41
|
export declare function useObserve(client: Client, topic: 'agents'): Observed<readonly ConversationAgent[]>;
|
|
42
|
+
export declare function useObserve(client: Client, topic: 'listed-agents'): Observed<readonly ListedAgent[]>;
|
|
43
|
+
export declare function useObserve(client: Client, topic: 'room-list'): Observed<RoomList | null>;
|
|
40
44
|
export declare function useObserve(client: Client, topic: 'figures'): Observed<FiguresResult>;
|
|
41
45
|
export declare function useObserve(client: Client, topic: 'holdings'): Observed<Holdings>;
|
|
46
|
+
export declare function useExpected<A, T>(store: Expecting, descriptor: Descriptor<A, T>, places: readonly A[], held: ReadonlyMap<A, T> | null): (place: A, held: T) => T;
|
|
47
|
+
export type LaneHeld<O> = LaneShown<O> & Pick<Lane<O>, 'run' | 'forget'>;
|
|
48
|
+
export declare function useLane<O>(lanes: Acting<O>): LaneHeld<O>;
|
|
42
49
|
export type Saving = {
|
|
43
50
|
readonly busy: boolean;
|
|
44
51
|
readonly outcome: SaveResult | null;
|
package/dist/react.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"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"}
|
package/dist/react.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useCallback, useLayoutEffect, useRef, useState } from 'react';
|
|
1
|
+
import { useCallback, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore, } from 'react';
|
|
2
2
|
import { failed } from './failure.js';
|
|
3
3
|
const LOADING = { state: 'loading' };
|
|
4
4
|
export function useObserve(client, topic, ...input) {
|
|
@@ -32,6 +32,38 @@ export function useObserve(client, topic, ...input) {
|
|
|
32
32
|
}, [client, key]);
|
|
33
33
|
return held !== null && held.client === client && held.key === key ? held.observed : LOADING;
|
|
34
34
|
}
|
|
35
|
+
function sameHeld(descriptor, was, now) {
|
|
36
|
+
if (was === now)
|
|
37
|
+
return true;
|
|
38
|
+
if (was === null || now === null || was.size !== now.size)
|
|
39
|
+
return false;
|
|
40
|
+
const before = new Map([...was].map(([place, value]) => [descriptor.place(place), value]));
|
|
41
|
+
return [...now].every(([place, value]) => {
|
|
42
|
+
const at = descriptor.place(place);
|
|
43
|
+
return before.has(at) && Object.is(before.get(at), value);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
export function useExpected(store, descriptor, places, held) {
|
|
47
|
+
const reader = useId();
|
|
48
|
+
const version = useSyncExternalStore(store.subscribe, store.version);
|
|
49
|
+
const asked = JSON.stringify(places.map((one) => descriptor.place(one)));
|
|
50
|
+
const kept = useRef(held);
|
|
51
|
+
if (!sameHeld(descriptor, kept.current, held))
|
|
52
|
+
kept.current = held;
|
|
53
|
+
const shown = kept.current;
|
|
54
|
+
useLayoutEffect(() => store.reads(reader, descriptor, places), [store, reader, descriptor, asked]);
|
|
55
|
+
useLayoutEffect(() => () => store.left(reader), [store, reader]);
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
if (shown !== null)
|
|
58
|
+
store.heard(reader, descriptor, shown);
|
|
59
|
+
}, [store, reader, descriptor, shown]);
|
|
60
|
+
return useCallback((place, value) => store.draw(descriptor, place, value), [store, descriptor, version]);
|
|
61
|
+
}
|
|
62
|
+
export function useLane(lanes) {
|
|
63
|
+
const lane = useMemo(() => lanes.open(), [lanes]);
|
|
64
|
+
const shown = useSyncExternalStore(lane.subscribe, lane.shown);
|
|
65
|
+
return useMemo(() => ({ ...shown, run: lane.run, forget: lane.forget }), [shown, lane]);
|
|
66
|
+
}
|
|
35
67
|
const IDLE = { busy: false, outcome: null, failure: null };
|
|
36
68
|
export function useSave(client) {
|
|
37
69
|
const [state, setState] = useState(IDLE);
|
package/dist/readiness.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export type TargetCoverage = {
|
|
|
12
12
|
readonly rooms: readonly RoomCoverage[];
|
|
13
13
|
readonly conversations: ConversationCoverage;
|
|
14
14
|
};
|
|
15
|
-
export type Persistence = Open<'granted' | 'denied' | 'unavailable'>;
|
|
15
|
+
export type Persistence = Open<'granted' | 'denied' | 'unavailable' | 'memory'>;
|
|
16
16
|
export type Durability = Open<'persistent' | 'best-effort'>;
|
|
17
17
|
export type ConnectionAvailability = Open<'connected' | 'connecting' | 'unreachable'>;
|
|
18
18
|
export type HouseOutcome = Open<'open' | 'write-halted' | 'refused'>;
|
|
@@ -41,9 +41,15 @@ export type Readiness = {
|
|
|
41
41
|
readonly installation: Installation;
|
|
42
42
|
readonly lost: boolean;
|
|
43
43
|
};
|
|
44
|
+
export type ReadinessShown = Omit<Readiness, 'coverage'> & {
|
|
45
|
+
readonly coverage: Omit<TargetCoverage, 'rooms'>;
|
|
46
|
+
};
|
|
44
47
|
export type ReadinessFacts = Omit<Readiness, 'status' | 'ready' | 'usable' | 'durability' | 'coverage'> & {
|
|
45
|
-
readonly coverage: Omit<TargetCoverage, 'complete'
|
|
48
|
+
readonly coverage: Omit<TargetCoverage, 'complete' | 'rooms'> & {
|
|
49
|
+
readonly unsettled: number;
|
|
50
|
+
};
|
|
46
51
|
readonly established: boolean;
|
|
47
52
|
};
|
|
48
|
-
export declare
|
|
53
|
+
export declare const COMPLETE_ROOMS: ReadonlySet<string>;
|
|
54
|
+
export declare function readinessOf(facts: ReadinessFacts): ReadinessShown;
|
|
49
55
|
//# sourceMappingURL=readiness.d.ts.map
|
package/dist/readiness.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readiness.d.ts","sourceRoot":"","sources":["../src/readiness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;AAEzD,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC,CAAC;AAE1F,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;CAAE,CAAC;AAEtF,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,UAAU,GAAG,WAAW,GAAG,YAAY,CAAC,CAAC;AAEjF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,GAAG,QAAQ,GAAG,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"readiness.d.ts","sourceRoot":"","sources":["../src/readiness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;AAEzD,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC,CAAC;AAE1F,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;CAAE,CAAC;AAEtF,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,UAAU,GAAG,WAAW,GAAG,YAAY,CAAC,CAAC;AAEjF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,GAAG,QAAQ,GAAG,aAAa,GAAG,QAAQ,CAAC,CAAC;AAEhF,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,CAAC;AAE5D,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,WAAW,GAAG,YAAY,GAAG,aAAa,CAAC,CAAC;AAEtF,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC,CAAC;AAErE,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAEjC,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,GAAG,SAAS,GAAG,WAAW,CAAC,CAAC;AAE7E,MAAM,MAAM,kBAAkB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;AAE9E,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG;IACzD,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,IAAI,CAC/B,SAAS,EACT,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,CAC1D,GAAG;IACF,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG;QAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/F,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CAAuC,CAAC;AAEvF,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CA4BjE"}
|
package/dist/readiness.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
const COMPLETE_ROOMS = new Set(['complete', 'unadmitted']);
|
|
1
|
+
export const COMPLETE_ROOMS = new Set(['complete', 'unadmitted']);
|
|
2
2
|
export function readinessOf(facts) {
|
|
3
|
-
const { established, coverage: held, ...reported } = facts;
|
|
3
|
+
const { established, coverage: { unsettled, ...held }, ...reported } = facts;
|
|
4
4
|
const settledConversations = held.conversations === 'complete' || held.conversations === 'undeclared';
|
|
5
|
-
const complete = held.listed &&
|
|
6
|
-
settledConversations &&
|
|
7
|
-
held.rooms.every((room) => COMPLETE_ROOMS.has(room.state));
|
|
5
|
+
const complete = held.listed && settledConversations && unsettled === 0;
|
|
8
6
|
const coverage = { ...held, complete };
|
|
9
7
|
const stored = facts.code === 'stored';
|
|
10
8
|
const ready = stored && complete;
|
package/dist/reads.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type CallResult } from './outcome.js';
|
|
2
2
|
import type { Recovery } from './recovery.js';
|
|
3
|
+
import type { Attempt, Retries } from './retried.js';
|
|
3
4
|
import type { Connection, RuntimeDatabase } from './tables.js';
|
|
4
5
|
export declare const READ_TABLES: readonly string[];
|
|
5
6
|
export type ReadAt = {
|
|
@@ -14,7 +15,7 @@ export type ObservedRead = {
|
|
|
14
15
|
};
|
|
15
16
|
export type ReadAnswers = {
|
|
16
17
|
watch(name: string, input: unknown, deliver: (read: ObservedRead) => void): () => void;
|
|
17
|
-
again(): void;
|
|
18
|
+
again(led?: Promise<unknown>): void;
|
|
18
19
|
reopened(): void;
|
|
19
20
|
};
|
|
20
21
|
export type ReadAnswersOptions = {
|
|
@@ -23,7 +24,8 @@ export type ReadAnswersOptions = {
|
|
|
23
24
|
readonly unkept: readonly string[];
|
|
24
25
|
readonly leading: readonly string[];
|
|
25
26
|
readonly recovery: Recovery;
|
|
26
|
-
|
|
27
|
+
readonly retries: Retries;
|
|
28
|
+
call(name: string, input: unknown, attempt: Attempt): Promise<CallResult>;
|
|
27
29
|
online(): boolean;
|
|
28
30
|
streaming(): boolean;
|
|
29
31
|
closed(): boolean;
|
package/dist/reads.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reads.d.ts","sourceRoot":"","sources":["../src/reads.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reads.d.ts","sourceRoot":"","sources":["../src/reads.ts"],"names":[],"mappings":"AAEA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE/D,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,EAExC,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACvF,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IACpC,QAAQ,IAAI,IAAI,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1E,MAAM,IAAI,OAAO,CAAC;IAClB,SAAS,IAAI,OAAO,CAAC;IACrB,MAAM,IAAI,OAAO,CAAC;IAClB,IAAI,IAAI,OAAO,CAAC;IAChB,MAAM,IAAI,IAAI,CAAC;CAChB,CAAC;AAeF,wBAAgB,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMhG;AAED,wBAAgB,QAAQ,CACtB,UAAU,EAAE,UAAU,EACtB,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,MAAM,EAC9B,MAAM,EAAE,MAAM,GACb,IAAI,CAMN;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAGvF;AAMD,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAwJpE"}
|
package/dist/reads.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { refusedForSpace } from './durability.js';
|
|
2
|
+
import { uncaught } from './failure.js';
|
|
2
3
|
import { answeredResult, UNCERTAIN } from './outcome.js';
|
|
3
4
|
export const READ_TABLES = [
|
|
4
5
|
'CREATE TABLE read_answers (name TEXT NOT NULL, input TEXT NOT NULL, build TEXT NOT NULL, answer TEXT NOT NULL, PRIMARY KEY (name, input)) WITHOUT ROWID',
|
|
@@ -37,6 +38,8 @@ export function readAnswers(options) {
|
|
|
37
38
|
await database.ask({ kind: 'read.keep', ...read.at, answer }).catch((error) => {
|
|
38
39
|
if (refusedForSpace(error))
|
|
39
40
|
options.filled();
|
|
41
|
+
else
|
|
42
|
+
uncaught(error);
|
|
40
43
|
});
|
|
41
44
|
}
|
|
42
45
|
async function asked(read, led) {
|
|
@@ -44,7 +47,11 @@ export function readAnswers(options) {
|
|
|
44
47
|
read.owed = true;
|
|
45
48
|
return;
|
|
46
49
|
}
|
|
47
|
-
const
|
|
50
|
+
const attempt = { step: 'reading', instance: read.key };
|
|
51
|
+
const result = await options.call(read.at.name, read.asked, attempt).catch((error) => {
|
|
52
|
+
options.retries.failed(attempt.step, attempt.instance, error);
|
|
53
|
+
return UNCERTAIN;
|
|
54
|
+
});
|
|
48
55
|
if (options.closed())
|
|
49
56
|
return;
|
|
50
57
|
read.owed = !answered(result);
|
|
@@ -121,7 +128,7 @@ export function readAnswers(options) {
|
|
|
121
128
|
return;
|
|
122
129
|
read.text = text;
|
|
123
130
|
read.shown = { ...read.shown, answer: JSON.parse(text) };
|
|
124
|
-
},
|
|
131
|
+
}, uncaught);
|
|
125
132
|
}
|
|
126
133
|
reads.set(key, read);
|
|
127
134
|
return read;
|
|
@@ -148,9 +155,9 @@ export function readAnswers(options) {
|
|
|
148
155
|
reads.delete(key);
|
|
149
156
|
};
|
|
150
157
|
},
|
|
151
|
-
again() {
|
|
158
|
+
again(first = Promise.resolve()) {
|
|
152
159
|
const all = [...reads.values()];
|
|
153
|
-
const led = Promise.all(all.filter(leads).map((read) => ask(read)));
|
|
160
|
+
const led = Promise.all([first, ...all.filter(leads).map((read) => ask(read, first))]);
|
|
154
161
|
for (const read of all)
|
|
155
162
|
if (!leads(read))
|
|
156
163
|
void ask(read, led);
|
package/dist/recovery.d.ts
CHANGED
|
@@ -16,11 +16,13 @@ export type Recovery = {
|
|
|
16
16
|
attempt(intent: string, run: Attempt, options?: AttemptOptions): Promise<boolean>;
|
|
17
17
|
pending(intent: string): boolean;
|
|
18
18
|
resume(): void;
|
|
19
|
+
again(): void;
|
|
20
|
+
waits(wake: () => void): () => void;
|
|
19
21
|
cancel(intent: string): void;
|
|
20
22
|
scope(inFlight?: number): Recovery;
|
|
21
23
|
retire(): Promise<void>;
|
|
22
24
|
};
|
|
23
25
|
export declare function retryDelay(tries: number, firstMs?: number, maxMs?: number): number;
|
|
24
|
-
export declare function untilAnswered<T>(ask: () => Promise<T>, signal: AbortSignal, answered?: (answer: T) => boolean): Promise<T>;
|
|
26
|
+
export declare function untilAnswered<T>(ask: () => Promise<T>, signal: AbortSignal, answered?: (answer: T) => boolean, owner?: Recovery): Promise<T>;
|
|
25
27
|
export declare function createRecovery(options?: RecoveryOptions): Recovery;
|
|
26
28
|
//# sourceMappingURL=recovery.d.ts.map
|
package/dist/recovery.d.ts.map
CHANGED
|
@@ -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,
|
|
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,KAAK,IAAI,IAAI,CAAC;IACd,KAAK,CAAC,IAAI,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IACpC,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,EAC7C,KAAK,CAAC,EAAE,QAAQ,GACf,OAAO,CAAC,CAAC,CAAC,CAsBZ;AAgMD,wBAAgB,cAAc,CAAC,OAAO,GAAE,eAAoB,GAAG,QAAQ,CAStE"}
|
package/dist/recovery.js
CHANGED
|
@@ -7,7 +7,7 @@ export function retryDelay(tries, firstMs = FIRST_MS, maxMs = MAX_MS) {
|
|
|
7
7
|
const longest = Math.min(maxMs, firstMs * 2 ** tries);
|
|
8
8
|
return longest / 2 + (Math.random() * longest) / 2;
|
|
9
9
|
}
|
|
10
|
-
export async function untilAnswered(ask, signal, answered = () => true) {
|
|
10
|
+
export async function untilAnswered(ask, signal, answered = () => true, owner) {
|
|
11
11
|
for (let tries = 0;; tries += 1) {
|
|
12
12
|
try {
|
|
13
13
|
const answer = await ask();
|
|
@@ -19,16 +19,16 @@ export async function untilAnswered(ask, signal, answered = () => true) {
|
|
|
19
19
|
throw error;
|
|
20
20
|
}
|
|
21
21
|
await new Promise((resume) => {
|
|
22
|
-
const
|
|
22
|
+
const done = () => {
|
|
23
23
|
clearTimeout(again);
|
|
24
|
+
signal.removeEventListener('abort', done);
|
|
25
|
+
unheld();
|
|
24
26
|
resume();
|
|
25
27
|
};
|
|
26
28
|
// A read that failed is asked again on the doubling backoff, so its asker is answered once the failure clears.
|
|
27
|
-
const again = setTimeout(()
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}, retryDelay(tries));
|
|
31
|
-
signal.addEventListener('abort', stop, { once: true });
|
|
29
|
+
const again = setTimeout(done, retryDelay(tries));
|
|
30
|
+
signal.addEventListener('abort', done, { once: true });
|
|
31
|
+
const unheld = owner?.waits(done) ?? (() => { });
|
|
32
32
|
});
|
|
33
33
|
signal.throwIfAborted();
|
|
34
34
|
}
|
|
@@ -38,6 +38,7 @@ function owner(backoff, inFlight, release = () => { }) {
|
|
|
38
38
|
const children = new Set();
|
|
39
39
|
const running = new Set();
|
|
40
40
|
const queued = [];
|
|
41
|
+
const waiting = new Set();
|
|
41
42
|
let free = inFlight;
|
|
42
43
|
let retired = false;
|
|
43
44
|
function finish(key, intent, done) {
|
|
@@ -195,6 +196,27 @@ function owner(backoff, inFlight, release = () => { }) {
|
|
|
195
196
|
launch(key, intent);
|
|
196
197
|
}
|
|
197
198
|
},
|
|
199
|
+
again() {
|
|
200
|
+
if (retired)
|
|
201
|
+
return;
|
|
202
|
+
for (const [key, intent] of [...intents]) {
|
|
203
|
+
if (intent.timer === null || intent.guided)
|
|
204
|
+
continue;
|
|
205
|
+
clearTimeout(intent.timer);
|
|
206
|
+
intent.timer = null;
|
|
207
|
+
launch(key, intent);
|
|
208
|
+
}
|
|
209
|
+
for (const wake of [...waiting])
|
|
210
|
+
wake();
|
|
211
|
+
for (const child of [...children])
|
|
212
|
+
child.again();
|
|
213
|
+
},
|
|
214
|
+
waits(wake) {
|
|
215
|
+
waiting.add(wake);
|
|
216
|
+
return () => {
|
|
217
|
+
waiting.delete(wake);
|
|
218
|
+
};
|
|
219
|
+
},
|
|
198
220
|
cancel(key) {
|
|
199
221
|
const intent = intents.get(key);
|
|
200
222
|
if (intent === undefined)
|
package/dist/refresh.js
CHANGED
|
@@ -129,7 +129,7 @@ export async function advancement(refresh, authorization, held, remodel, continu
|
|
|
129
129
|
return unconfirmed;
|
|
130
130
|
const first = await refresh(authorization, {
|
|
131
131
|
locator,
|
|
132
|
-
selection: held.replica.selection,
|
|
132
|
+
selection: held.declaration.replica.selection,
|
|
133
133
|
fromRoomVersion,
|
|
134
134
|
});
|
|
135
135
|
if (first.kind !== 'net-advancement')
|
|
@@ -154,7 +154,7 @@ export async function advancement(refresh, authorization, held, remodel, continu
|
|
|
154
154
|
return unconfirmed;
|
|
155
155
|
const page = await refresh(authorization, {
|
|
156
156
|
locator,
|
|
157
|
-
selection: held.replica.selection,
|
|
157
|
+
selection: held.declaration.replica.selection,
|
|
158
158
|
fromRoomVersion,
|
|
159
159
|
pageToken,
|
|
160
160
|
});
|
package/dist/refusal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refusal.d.ts","sourceRoot":"","sources":["../src/refusal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"refusal.d.ts","sourceRoot":"","sources":["../src/refusal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAQpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wBAAsB,MAAM,CAC1B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,EACrB,QAAQ,GAAE,eAAe,GAAG,IAAW,iBAiDxC"}
|
package/dist/refusal.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { changeSet, mergeChangeSets } from './change-set.js';
|
|
2
2
|
import { composedOf } from './collection.js';
|
|
3
|
+
import { uncaught } from './failure.js';
|
|
3
4
|
import { listedLocators } from './listing.js';
|
|
4
5
|
import { prepare } from './preparation.js';
|
|
5
6
|
import { storedRecord } from './replica.js';
|
|
6
7
|
import { emitRefusal } from './shown.js';
|
|
7
8
|
export async function refuse(runtime, reason, provider = null) {
|
|
8
|
-
const { store, socket,
|
|
9
|
+
const { store, socket, presence } = runtime;
|
|
9
10
|
socket.session.set({ paused: true });
|
|
10
11
|
socket.abortReads();
|
|
11
12
|
try {
|
|
@@ -28,13 +29,13 @@ export async function refuse(runtime, reason, provider = null) {
|
|
|
28
29
|
}),
|
|
29
30
|
});
|
|
30
31
|
}
|
|
31
|
-
catch {
|
|
32
|
-
|
|
32
|
+
catch (error) {
|
|
33
|
+
uncaught(error);
|
|
33
34
|
}
|
|
34
35
|
const listedNow = listedLocators(runtime, held);
|
|
35
36
|
for (const locator of listedNow) {
|
|
36
37
|
if (!held.has(locator))
|
|
37
|
-
|
|
38
|
+
presence.modelled(locator, revoked);
|
|
38
39
|
}
|
|
39
40
|
store.changed(mergeChangeSets(listedNow.map((locator) => changeSet(locator, { documents: null, room: true }))));
|
|
40
41
|
prepare(runtime);
|
|
@@ -45,12 +46,10 @@ export async function refuse(runtime, reason, provider = null) {
|
|
|
45
46
|
socket.session.set({
|
|
46
47
|
refusal: {
|
|
47
48
|
code: reason,
|
|
48
|
-
retryable: false,
|
|
49
49
|
reauthorizationOffered: reason === 'revoked-authorization',
|
|
50
50
|
refusal: provider,
|
|
51
51
|
},
|
|
52
52
|
});
|
|
53
|
-
journal.record(`connection refused ${reason}`);
|
|
54
53
|
emitRefusal(runtime);
|
|
55
54
|
}
|
|
56
55
|
}
|