@agentshouse/mdruntime 0.1.0-ce41fec66d91b → 0.1.0-ce46f015571d6
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 +10 -10
- package/dist/acceptance.d.ts +3 -0
- package/dist/acceptance.d.ts.map +1 -0
- package/dist/acceptance.js +318 -0
- package/dist/act-lanes.d.ts +29 -0
- package/dist/act-lanes.d.ts.map +1 -0
- package/dist/act-lanes.js +177 -0
- package/dist/actions.d.ts +25 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +261 -0
- package/dist/adapter.d.ts +71 -69
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +3 -10
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +21 -56
- package/dist/bootstrap.d.ts +9 -5
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +204 -85
- package/dist/cell.d.ts +6 -0
- package/dist/cell.d.ts.map +1 -0
- package/dist/cell.js +9 -0
- package/dist/chain.d.ts +2 -1
- package/dist/chain.d.ts.map +1 -1
- 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 +1 -0
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +4 -2
- package/dist/chat-types.d.ts +5 -0
- package/dist/chat-types.d.ts.map +1 -0
- package/dist/chat-types.js +13 -0
- package/dist/client.d.ts +25 -14
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +32 -14
- package/dist/collection.d.ts +23 -4
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +12 -2
- package/dist/compile.d.ts +6 -6
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +240 -315
- package/dist/connection.d.ts +5 -141
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +110 -5057
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +7 -0
- package/dist/conversation-live.d.ts +138 -0
- package/dist/conversation-live.d.ts.map +1 -0
- package/dist/conversation-live.js +249 -0
- package/dist/conversation-row.d.ts +33 -0
- package/dist/conversation-row.d.ts.map +1 -0
- package/dist/conversation-row.js +53 -0
- package/dist/conversation.d.ts +54 -45
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +930 -899
- 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 +10 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +153 -0
- package/dist/durability.d.ts +18 -0
- package/dist/durability.d.ts.map +1 -1
- package/dist/entry.d.ts +2 -2
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +17 -7
- 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 +49 -0
- package/dist/figures.d.ts.map +1 -0
- package/dist/figures.js +197 -0
- package/dist/holdings.d.ts +29 -0
- package/dist/holdings.d.ts.map +1 -0
- package/dist/holdings.js +95 -0
- package/dist/host.d.ts +20 -6
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +61 -30
- package/dist/identity.d.ts +0 -1
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +0 -3
- package/dist/index.d.ts +31 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -3
- package/dist/install.d.ts +54 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +539 -0
- package/dist/lifecycle.d.ts +7 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +279 -0
- package/dist/listing.d.ts +48 -0
- package/dist/listing.d.ts.map +1 -0
- package/dist/listing.js +139 -0
- package/dist/live.d.ts +5 -4
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +63 -21
- package/dist/locks.d.ts +7 -0
- package/dist/locks.d.ts.map +1 -0
- package/dist/locks.js +33 -0
- package/dist/log.d.ts +1 -0
- package/dist/log.d.ts.map +1 -1
- package/dist/lost.d.ts +5 -0
- package/dist/lost.d.ts.map +1 -0
- package/dist/lost.js +50 -0
- package/dist/media.d.ts +1 -1
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +4 -4
- package/dist/memory.d.ts +8 -2
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +83 -26
- package/dist/messages.d.ts +24 -3
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +92 -32
- package/dist/model.d.ts +2 -10
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +0 -14
- package/dist/models.d.ts +10 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +156 -0
- package/dist/observation.d.ts +2 -2
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +14 -14
- 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 +4 -0
- package/dist/opening.d.ts.map +1 -0
- package/dist/opening.js +59 -0
- package/dist/outcome.d.ts +7 -1
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +18 -0
- package/dist/overlay.d.ts +3 -1
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +43 -21
- package/dist/page-metadata.d.ts +8 -0
- package/dist/page-metadata.d.ts.map +1 -0
- package/dist/page-metadata.js +19 -0
- package/dist/parts.d.ts +11 -0
- package/dist/parts.d.ts.map +1 -0
- package/dist/parts.js +21 -0
- package/dist/paths.d.ts +1 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +22 -0
- package/dist/preparation.d.ts +20 -0
- package/dist/preparation.d.ts.map +1 -0
- package/dist/preparation.js +233 -0
- package/dist/presence.d.ts +52 -0
- package/dist/presence.d.ts.map +1 -0
- package/dist/presence.js +220 -0
- package/dist/queries.d.ts +16 -0
- package/dist/queries.d.ts.map +1 -0
- package/dist/queries.js +270 -0
- package/dist/query.d.ts +13 -209
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +3 -505
- package/dist/questions.d.ts +34 -0
- package/dist/questions.d.ts.map +1 -0
- package/dist/questions.js +122 -0
- package/dist/queue.d.ts +40 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +455 -0
- package/dist/reach.d.ts +14 -12
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +193 -121
- package/dist/react.d.ts +15 -2
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +33 -1
- package/dist/read.d.ts +7 -0
- package/dist/read.d.ts.map +1 -0
- package/dist/read.js +17 -0
- package/dist/readiness.d.ts +0 -3
- package/dist/readiness.d.ts.map +1 -1
- package/dist/reads.d.ts +39 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +178 -0
- package/dist/recovery.d.ts +3 -1
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +38 -8
- package/dist/refresh.d.ts +1 -1
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +9 -2
- package/dist/refusal.d.ts +5 -0
- package/dist/refusal.d.ts.map +1 -0
- package/dist/refusal.js +57 -0
- package/dist/replica.d.ts +11 -16
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +64 -30
- 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 +7 -8
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +100 -103
- package/dist/room-drafts.d.ts +24 -0
- package/dist/room-drafts.d.ts.map +1 -0
- package/dist/room-drafts.js +217 -0
- package/dist/rows.d.ts +14 -21
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +49 -186
- package/dist/runtime.d.ts +36 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +1 -0
- package/dist/save.d.ts +41 -86
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +239 -116
- package/dist/saves.d.ts +32 -0
- package/dist/saves.d.ts.map +1 -0
- package/dist/saves.js +413 -0
- package/dist/search.d.ts +12 -63
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +9 -52
- package/dist/seed.d.ts +11 -2
- package/dist/seed.d.ts.map +1 -1
- package/dist/seed.js +71 -1
- package/dist/shared.d.ts +1 -6
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +13 -95
- package/dist/shown.d.ts +32 -0
- package/dist/shown.d.ts.map +1 -0
- package/dist/shown.js +290 -0
- package/dist/socket/admission.d.ts +7 -0
- package/dist/socket/admission.d.ts.map +1 -0
- package/dist/socket/admission.js +39 -0
- package/dist/socket/answers.d.ts +6 -0
- package/dist/socket/answers.d.ts.map +1 -0
- package/dist/socket/answers.js +20 -0
- package/dist/socket/lanes.d.ts +21 -0
- package/dist/socket/lanes.d.ts.map +1 -0
- package/dist/socket/lanes.js +80 -0
- package/dist/socket/reads.d.ts +10 -0
- package/dist/socket/reads.d.ts.map +1 -0
- package/dist/socket/reads.js +31 -0
- package/dist/socket/session.d.ts +38 -0
- package/dist/socket/session.d.ts.map +1 -0
- package/dist/socket/session.js +23 -0
- package/dist/socket.d.ts +68 -0
- package/dist/socket.d.ts.map +1 -0
- package/dist/socket.js +171 -0
- package/dist/source.d.ts +61 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +82 -0
- package/dist/status.d.ts +0 -2
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +0 -6
- package/dist/store/installs.d.ts +30 -0
- package/dist/store/installs.d.ts.map +1 -0
- package/dist/store/installs.js +34 -0
- package/dist/store/readiness.d.ts +10 -0
- package/dist/store/readiness.d.ts.map +1 -0
- package/dist/store/readiness.js +52 -0
- package/dist/store/records.d.ts +212 -0
- package/dist/store/records.d.ts.map +1 -0
- package/dist/store/records.js +430 -0
- package/dist/store/room-held.d.ts +8 -0
- package/dist/store/room-held.d.ts.map +1 -0
- package/dist/store/room-held.js +17 -0
- package/dist/store/space.d.ts +11 -0
- package/dist/store/space.d.ts.map +1 -0
- package/dist/store/space.js +41 -0
- package/dist/store/watchers.d.ts +17 -0
- package/dist/store/watchers.d.ts.map +1 -0
- package/dist/store/watchers.js +56 -0
- package/dist/store/writes.d.ts +24 -0
- package/dist/store/writes.d.ts.map +1 -0
- package/dist/store/writes.js +125 -0
- package/dist/store.d.ts +112 -145
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +167 -365
- package/dist/stored.d.ts +59 -33
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +279 -190
- package/dist/surface.d.ts +88 -0
- package/dist/surface.d.ts.map +1 -0
- package/dist/surface.js +223 -0
- package/dist/sync.d.ts +19 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +540 -0
- package/dist/tables.d.ts +116 -29
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +213 -54
- package/dist/tallies.d.ts +18 -0
- package/dist/tallies.d.ts.map +1 -0
- package/dist/tallies.js +129 -0
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +8 -5
- package/dist/windows.d.ts +1 -12
- package/dist/windows.d.ts.map +1 -1
- package/dist/windows.js +2 -75
- package/dist/wire.d.ts +57 -5
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +19 -3
- 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/fence.d.ts +0 -6
- package/dist/fence.d.ts.map +0 -1
- package/dist/fence.js +0 -10
- package/dist/fulltext.d.ts +0 -27
- package/dist/fulltext.d.ts.map +0 -1
- package/dist/fulltext.js +0 -370
- package/dist/words.d.ts +0 -19
- package/dist/words.d.ts.map +0 -1
- package/dist/words.js +0 -156
package/dist/reach.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
+
import { selected } from './collection.js';
|
|
1
2
|
import { unheldView } from './conversation.js';
|
|
2
3
|
import { modelTypes, NO_MODEL } from './model.js';
|
|
3
4
|
import { changeOf, digestApplied, digestOf, observing, } from './observation.js';
|
|
4
|
-
import { runtimeError } from './failure.js';
|
|
5
|
+
import { runtimeError, uncaught } from './failure.js';
|
|
5
6
|
import { failure, lockedRoom, ROOM_LOCKED, undeclared, UNREADABLE, } from './outcome.js';
|
|
6
7
|
import { beneath } from './paths.js';
|
|
7
8
|
import { moveTarget, readParts, staleWrite, } from './room-draft.js';
|
|
8
9
|
import { documentKey } from './rows.js';
|
|
9
|
-
import { undeclaredSearch } from './search.js';
|
|
10
10
|
const UNHELD_TYPES = { collection: modelTypes(NO_MODEL), typedSelection: null };
|
|
11
11
|
function unconversed(name) {
|
|
12
12
|
return () => Promise.resolve(undeclared(name));
|
|
@@ -20,6 +20,15 @@ const NO_CONVERSATION = {
|
|
|
20
20
|
interrupt: unconversed('conversations/interrupt'),
|
|
21
21
|
kill: unconversed('conversations/kill'),
|
|
22
22
|
delete: unconversed('conversations/delete'),
|
|
23
|
+
takeOut: unconversed('conversations/take-out'),
|
|
24
|
+
decide: unconversed('agent-functions/decide'),
|
|
25
|
+
rename: unconversed('conversations/rename'),
|
|
26
|
+
option: unconversed('conversations/option/set'),
|
|
27
|
+
retry: unconversed('conversations/retry'),
|
|
28
|
+
pins: () => Promise.resolve([]),
|
|
29
|
+
pin: () => Promise.resolve(),
|
|
30
|
+
openedTurns: () => Promise.resolve({}),
|
|
31
|
+
openTurn: () => Promise.resolve(),
|
|
23
32
|
};
|
|
24
33
|
const NO_CHAT_DRAFT = {
|
|
25
34
|
write: () => Promise.resolve(),
|
|
@@ -46,11 +55,11 @@ export function governs(reach, room) {
|
|
|
46
55
|
if (wholly(reach, room.locator)) {
|
|
47
56
|
return { collection: true, selection: room.typedSelection !== null };
|
|
48
57
|
}
|
|
49
|
-
const
|
|
58
|
+
const within = (path) => selected({ selection: room.typedSelection }, path);
|
|
50
59
|
const paths = reach.documents
|
|
51
60
|
.filter((document) => document.room === room.locator)
|
|
52
61
|
.map(({ path }) => path);
|
|
53
|
-
return { collection: paths.some((path) => !
|
|
62
|
+
return { collection: paths.some((path) => !within(path)), selection: paths.some(within) };
|
|
54
63
|
}
|
|
55
64
|
function covers(reach, room, path) {
|
|
56
65
|
return (reach === null ||
|
|
@@ -144,7 +153,7 @@ function lockedError(room) {
|
|
|
144
153
|
return runtimeError(ROOM_LOCKED, `${room} is locked until House confirms its access`, true);
|
|
145
154
|
}
|
|
146
155
|
function deviceUnreached() {
|
|
147
|
-
return runtimeError('device-unreached', 'Only the panel
|
|
156
|
+
return runtimeError('device-unreached', 'Only the panel reaches this device');
|
|
148
157
|
}
|
|
149
158
|
const ATTACH_REQUIRED = 'attach-required';
|
|
150
159
|
function attachRequired() {
|
|
@@ -153,10 +162,9 @@ function attachRequired() {
|
|
|
153
162
|
function carriesFile(parts) {
|
|
154
163
|
return parts !== null && typeof parts === 'object' && Object.hasOwn(parts, 'file');
|
|
155
164
|
}
|
|
156
|
-
export function narrowed(runtime, given,
|
|
165
|
+
export function narrowed(runtime, given, port) {
|
|
157
166
|
const { md, watch } = runtime;
|
|
158
167
|
let reach = given;
|
|
159
|
-
let port = told;
|
|
160
168
|
const open = new Set();
|
|
161
169
|
function following(begin, locking = false) {
|
|
162
170
|
let stop = begin();
|
|
@@ -172,70 +180,127 @@ export function narrowed(runtime, given, told) {
|
|
|
172
180
|
stop();
|
|
173
181
|
};
|
|
174
182
|
}
|
|
175
|
-
const unlocking = (rooms) => {
|
|
176
|
-
const
|
|
177
|
-
return
|
|
178
|
-
? null
|
|
179
|
-
: { pending: locked.map((room) => ({ room, awaits: 'unlock' })) };
|
|
183
|
+
const unlocking = (rooms, locked) => {
|
|
184
|
+
const held = (rooms ?? []).filter((room) => locked.includes(room));
|
|
185
|
+
return held.length === 0 ? null : { pending: held.map((room) => ({ room, awaits: 'unlock' })) };
|
|
180
186
|
};
|
|
181
|
-
const unlocked = (entries) => entries.filter((entry) => !
|
|
182
|
-
const intoLocked = (held) =>
|
|
183
|
-
|
|
187
|
+
const unlocked = (entries, locked) => entries.filter((entry) => !locked.includes(entry.room));
|
|
188
|
+
const intoLocked = async (held) => {
|
|
189
|
+
for (const move of held) {
|
|
190
|
+
if (move?.room !== undefined && (await runtime.locked(move.room)))
|
|
191
|
+
return true;
|
|
192
|
+
}
|
|
193
|
+
return false;
|
|
194
|
+
};
|
|
195
|
+
function ordered(deliver) {
|
|
196
|
+
let open = true;
|
|
197
|
+
let shown = Promise.resolve();
|
|
198
|
+
return {
|
|
199
|
+
push(making) {
|
|
200
|
+
shown = shown.then(() => making.then((value) => {
|
|
201
|
+
if (open)
|
|
202
|
+
deliver(value);
|
|
203
|
+
}, uncaught), uncaught);
|
|
204
|
+
},
|
|
205
|
+
stop() {
|
|
206
|
+
open = false;
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
function unlockedWatch(topic, input, deliver, fail, within) {
|
|
211
|
+
const shown = ordered(deliver);
|
|
212
|
+
const stop = watch(topic, input, (message) => {
|
|
213
|
+
shown.push(runtime.lockedRooms().then((locked) => within(message, locked)));
|
|
214
|
+
}, fail);
|
|
215
|
+
return () => {
|
|
216
|
+
shown.stop();
|
|
217
|
+
stop();
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
function lockedFirst(room, start, shut) {
|
|
221
|
+
let open = true;
|
|
222
|
+
let stop = () => { };
|
|
223
|
+
void (async () => {
|
|
224
|
+
const closed = !holds(reach, room) || (await runtime.locked(room));
|
|
225
|
+
if (!open)
|
|
226
|
+
return;
|
|
227
|
+
if (closed)
|
|
228
|
+
shut();
|
|
229
|
+
else
|
|
230
|
+
stop = start();
|
|
231
|
+
})();
|
|
232
|
+
return () => {
|
|
233
|
+
open = false;
|
|
234
|
+
stop();
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
const within = (topic, input, deliver, fail) => {
|
|
238
|
+
if (topic === 'read' && reach !== null) {
|
|
239
|
+
fail(deviceUnreached());
|
|
240
|
+
return () => { };
|
|
241
|
+
}
|
|
184
242
|
if (topic === 'rooms') {
|
|
185
|
-
return following(() => watch(topic, input, (rooms) => deliver(roomsWithin(reach, rooms))));
|
|
243
|
+
return following(() => watch(topic, input, (rooms) => deliver(roomsWithin(reach, rooms)), fail));
|
|
186
244
|
}
|
|
187
245
|
if (topic === 'readiness') {
|
|
188
246
|
return following(() => runtime.watchReadiness(port, reach, deliver));
|
|
189
247
|
}
|
|
190
248
|
if (topic === 'sync-status') {
|
|
191
|
-
return following(() =>
|
|
192
|
-
const
|
|
193
|
-
|
|
249
|
+
return following(() => unlockedWatch(topic, input, deliver, fail, (status, locked) => {
|
|
250
|
+
const shown = statusWithin(reach, status);
|
|
251
|
+
return { ...shown, attentionRequired: unlocked(shown.attentionRequired, locked) };
|
|
194
252
|
}), true);
|
|
195
253
|
}
|
|
196
254
|
if (topic === 'room-drafts') {
|
|
197
|
-
return following(() =>
|
|
255
|
+
return following(() => unlockedWatch(topic, input, deliver, fail, (drafts, locked) => unlocked(draftsWithin(reach, drafts), locked)), true);
|
|
198
256
|
}
|
|
199
257
|
if (topic === 'queue') {
|
|
200
258
|
const room = input[0];
|
|
201
|
-
return following(() =>
|
|
202
|
-
if (!holds(reach, room) || runtime.locked(room)) {
|
|
203
|
-
deliver([]);
|
|
204
|
-
return () => { };
|
|
205
|
-
}
|
|
206
|
-
return watch(topic, input, (entries) => deliver(queueWithin(reach, room, entries)));
|
|
207
|
-
}, true);
|
|
259
|
+
return following(() => lockedFirst(room, () => watch(topic, input, (entries) => deliver(queueWithin(reach, room, entries)), fail), () => deliver([])), true);
|
|
208
260
|
}
|
|
209
261
|
if (topic === 'query') {
|
|
210
|
-
const
|
|
262
|
+
const planning = runtime.plan(input[0], reach);
|
|
211
263
|
let held = null;
|
|
212
264
|
return following(() => {
|
|
213
|
-
const locked = unlocking(plan.rooms);
|
|
214
|
-
if (locked !== null) {
|
|
215
|
-
const answer = { result: locked, keys: [] };
|
|
216
|
-
if (held === null || changeOf(held, answer) !== null)
|
|
217
|
-
deliver(answer);
|
|
218
|
-
held = digestOf(answer);
|
|
219
|
-
return () => { };
|
|
220
|
-
}
|
|
221
|
-
let first = true;
|
|
222
265
|
let open = true;
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
266
|
+
let stop = () => { };
|
|
267
|
+
void (async () => {
|
|
268
|
+
const plan = await planning;
|
|
269
|
+
const locked = await runtime.lockedRooms();
|
|
270
|
+
if (!open)
|
|
271
|
+
return;
|
|
272
|
+
const pending = unlocking(plan.rooms, locked);
|
|
273
|
+
if (pending !== null) {
|
|
274
|
+
const answer = { result: pending, keys: [] };
|
|
275
|
+
if (held === null || changeOf(held, answer) !== null)
|
|
276
|
+
deliver(answer);
|
|
277
|
+
held = digestOf(answer);
|
|
227
278
|
return;
|
|
228
279
|
}
|
|
229
|
-
first =
|
|
230
|
-
const
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
280
|
+
let first = true;
|
|
281
|
+
const heard = (message) => {
|
|
282
|
+
if (!first) {
|
|
283
|
+
held = digestApplied(held, message);
|
|
284
|
+
deliver(message);
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
first = false;
|
|
288
|
+
const change = held === null ? message : changeOf(held, message);
|
|
289
|
+
held = digestOf(message);
|
|
290
|
+
if (change !== null)
|
|
291
|
+
deliver(change);
|
|
292
|
+
};
|
|
293
|
+
const current = { ...plan, reach: planReach(reach), locked };
|
|
294
|
+
stop = runtime.watchPlan(current, (message) => {
|
|
295
|
+
if (open)
|
|
296
|
+
heard(message);
|
|
297
|
+
}, (error) => {
|
|
298
|
+
if (open)
|
|
299
|
+
fail(error);
|
|
300
|
+
});
|
|
301
|
+
})().catch((error) => {
|
|
237
302
|
if (open)
|
|
238
|
-
|
|
303
|
+
fail(error);
|
|
239
304
|
});
|
|
240
305
|
return () => {
|
|
241
306
|
open = false;
|
|
@@ -246,7 +311,7 @@ export function narrowed(runtime, given, told) {
|
|
|
246
311
|
if (topic === 'conversation') {
|
|
247
312
|
return following(() => {
|
|
248
313
|
if (conversing(reach))
|
|
249
|
-
return watch(topic, input, deliver);
|
|
314
|
+
return watch(topic, input, deliver, fail);
|
|
250
315
|
deliver(unheldView(input[0]));
|
|
251
316
|
return () => { };
|
|
252
317
|
});
|
|
@@ -254,12 +319,18 @@ export function narrowed(runtime, given, told) {
|
|
|
254
319
|
if (topic === 'conversations' || topic === 'agents') {
|
|
255
320
|
return following(() => {
|
|
256
321
|
if (conversing(reach))
|
|
257
|
-
return watch(topic, input, deliver);
|
|
322
|
+
return watch(topic, input, deliver, fail);
|
|
258
323
|
deliver([]);
|
|
259
324
|
return () => { };
|
|
260
325
|
});
|
|
261
326
|
}
|
|
262
|
-
|
|
327
|
+
if (topic === 'figures' || topic === 'holdings') {
|
|
328
|
+
if (reach === null)
|
|
329
|
+
return watch(topic, input, deliver, fail);
|
|
330
|
+
fail(deviceUnreached());
|
|
331
|
+
return () => { };
|
|
332
|
+
}
|
|
333
|
+
return watch(topic, input, deliver, fail);
|
|
263
334
|
};
|
|
264
335
|
const files = new Map();
|
|
265
336
|
let handed = 0;
|
|
@@ -277,33 +348,33 @@ export function narrowed(runtime, given, told) {
|
|
|
277
348
|
const view = {
|
|
278
349
|
...md,
|
|
279
350
|
rooms: () => md.rooms().then((rooms) => roomsWithin(reach, rooms)),
|
|
280
|
-
query: ((input) => {
|
|
281
|
-
const plan = runtime.plan(input, reach);
|
|
282
|
-
|
|
351
|
+
query: (async (input) => {
|
|
352
|
+
const plan = await runtime.plan(input, reach);
|
|
353
|
+
const locked = await runtime.lockedRooms();
|
|
354
|
+
return unlocking(plan.rooms, locked) ?? runtime.query({ ...plan, locked });
|
|
283
355
|
}),
|
|
284
|
-
search: (input) =>
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
types(room) {
|
|
288
|
-
if (holds(reach, room) && runtime.locked(room))
|
|
356
|
+
search: (input) => runtime.search(input, reach),
|
|
357
|
+
async types(room) {
|
|
358
|
+
if (holds(reach, room) && (await runtime.locked(room)))
|
|
289
359
|
throw lockedError(room);
|
|
290
360
|
if (wholly(reach, room))
|
|
291
361
|
return md.types(room);
|
|
292
362
|
if (!holds(reach, room))
|
|
293
363
|
return structuredClone(UNHELD_TYPES);
|
|
294
|
-
return typesWithin(reach, runtime.room(room), md.types(room));
|
|
364
|
+
return typesWithin(reach, await runtime.room(room), await md.types(room));
|
|
295
365
|
},
|
|
296
366
|
async save(room, roomDrafts, writtenBy) {
|
|
297
367
|
if (!holds(reach, room))
|
|
298
368
|
throw unreached(room);
|
|
299
|
-
if (runtime.locked(room))
|
|
369
|
+
if (await runtime.locked(room)) {
|
|
300
370
|
return { outcome: 'refused', code: ROOM_LOCKED, retryable: true };
|
|
371
|
+
}
|
|
301
372
|
const held = (await Promise.all(roomDrafts.map(({ path }) => md.roomDraft.read(room, path)))).map((draft) => draft?.parts.move);
|
|
302
373
|
const outside = roomDrafts.find(({ path }, at) => !covers(reach, room, path) || !moves(reach, room, held[at]));
|
|
303
374
|
if (outside !== undefined) {
|
|
304
375
|
return { outcome: 'refused', code: 'stale', retryable: false, file: outside.path };
|
|
305
376
|
}
|
|
306
|
-
if (intoLocked(held))
|
|
377
|
+
if (await intoLocked(held))
|
|
307
378
|
return { outcome: 'refused', code: ROOM_LOCKED, retryable: true };
|
|
308
379
|
return savedWithin(reach, room, await md.save(room, roomDrafts, writtenBy));
|
|
309
380
|
},
|
|
@@ -314,47 +385,48 @@ export function narrowed(runtime, given, told) {
|
|
|
314
385
|
if (filed !== undefined) {
|
|
315
386
|
return { outcome: 'refused', code: ATTACH_REQUIRED, retryable: false, file: filed.path };
|
|
316
387
|
}
|
|
317
|
-
if (runtime.locked(room))
|
|
388
|
+
if (await runtime.locked(room)) {
|
|
318
389
|
return { outcome: 'refused', code: ROOM_LOCKED, retryable: true };
|
|
319
|
-
|
|
390
|
+
}
|
|
391
|
+
const held = parts.map(({ path, parts: one }) => readParts(one, path).move);
|
|
320
392
|
if (parts.some(({ path }, at) => !covers(reach, room, path) || !moves(reach, room, held[at]))) {
|
|
321
393
|
throw unreached(room);
|
|
322
394
|
}
|
|
323
|
-
if (intoLocked(held))
|
|
395
|
+
if (await intoLocked(held))
|
|
324
396
|
return { outcome: 'refused', code: ROOM_LOCKED, retryable: true };
|
|
325
397
|
return savedWithin(reach, room, await md.saveParts(room, parts, writtenBy));
|
|
326
398
|
},
|
|
327
|
-
resolve(room, path, destination) {
|
|
328
|
-
const at = runtime.located(room, path, destination);
|
|
399
|
+
async resolve(room, path, destination) {
|
|
400
|
+
const at = await runtime.located(room, path, destination);
|
|
329
401
|
return at !== null && !covers(reach, at.room, at.path)
|
|
330
|
-
?
|
|
402
|
+
? UNREADABLE
|
|
331
403
|
: md.resolve(room, path, destination);
|
|
332
404
|
},
|
|
333
|
-
history: (room, path, query) => !covers(reach, room, path)
|
|
334
|
-
?
|
|
335
|
-
: runtime.locked(room)
|
|
336
|
-
?
|
|
405
|
+
history: async (room, path, query) => !covers(reach, room, path)
|
|
406
|
+
? failure({ kind: 'room-not-readable', locator: room })
|
|
407
|
+
: (await runtime.locked(room))
|
|
408
|
+
? lockedRoom(room)
|
|
337
409
|
: md.history(room, path, query),
|
|
338
410
|
binaryFile: {
|
|
339
|
-
read: (room, path, revision) => !covers(reach, room, path)
|
|
340
|
-
?
|
|
341
|
-
: runtime.locked(room)
|
|
342
|
-
?
|
|
411
|
+
read: async (room, path, revision) => !covers(reach, room, path)
|
|
412
|
+
? failure({ kind: 'room-not-readable', locator: room })
|
|
413
|
+
: (await runtime.locked(room))
|
|
414
|
+
? lockedRoom(room)
|
|
343
415
|
: hand(md.binaryFile.read(room, path, revision)),
|
|
344
|
-
link: (room, path, revision) => !covers(reach, room, path)
|
|
345
|
-
?
|
|
346
|
-
: runtime.locked(room)
|
|
347
|
-
?
|
|
416
|
+
link: async (room, path, revision) => !covers(reach, room, path)
|
|
417
|
+
? failure({ kind: 'room-not-readable', locator: room })
|
|
418
|
+
: (await runtime.locked(room))
|
|
419
|
+
? lockedRoom(room)
|
|
348
420
|
: md.binaryFile.link(room, path, revision),
|
|
349
|
-
show: (room, path, revision) => !covers(reach, room, path)
|
|
350
|
-
?
|
|
351
|
-
: runtime.locked(room)
|
|
352
|
-
?
|
|
421
|
+
show: async (room, path, revision) => !covers(reach, room, path)
|
|
422
|
+
? failure({ kind: 'room-not-readable', locator: room })
|
|
423
|
+
: (await runtime.locked(room))
|
|
424
|
+
? lockedRoom(room)
|
|
353
425
|
: hand(md.binaryFile.show(room, path, revision)),
|
|
354
|
-
attach: (room, file) => !wholly(reach, room)
|
|
355
|
-
?
|
|
356
|
-
: runtime.locked(room)
|
|
357
|
-
?
|
|
426
|
+
attach: async (room, file) => !wholly(reach, room)
|
|
427
|
+
? failure({ kind: 'room-not-readable', locator: room })
|
|
428
|
+
: (await runtime.locked(room))
|
|
429
|
+
? lockedRoom(room)
|
|
358
430
|
: md.binaryFile.attach(room, file),
|
|
359
431
|
async part(file, part) {
|
|
360
432
|
const key = files.get(file);
|
|
@@ -367,42 +439,38 @@ export function narrowed(runtime, given, told) {
|
|
|
367
439
|
},
|
|
368
440
|
},
|
|
369
441
|
reached: async (room, roomVersion, path) => (path === undefined ? wholly(reach, room) : covers(reach, room, path)) &&
|
|
370
|
-
!runtime.locked(room) &&
|
|
442
|
+
!(await runtime.locked(room)) &&
|
|
371
443
|
(await md.reached(room, roomVersion, path)),
|
|
372
444
|
log: () => (reach === null ? md.log() : ''),
|
|
373
445
|
cleanUp: () => (reach === null ? md.cleanUp() : Promise.reject(deviceUnreached())),
|
|
446
|
+
unsent: () => (reach === null ? md.unsent() : Promise.reject(deviceUnreached())),
|
|
447
|
+
reset: () => (reach === null ? md.reset() : Promise.reject(deviceUnreached())),
|
|
448
|
+
readAgain: () => (reach === null ? md.readAgain() : Promise.reject(deviceUnreached())),
|
|
374
449
|
roomDraft: {
|
|
375
|
-
list: () => md.roomDraft.list()
|
|
450
|
+
list: async () => unlocked(draftsWithin(reach, await md.roomDraft.list()), await runtime.lockedRooms()),
|
|
376
451
|
async read(room, path) {
|
|
377
452
|
if (!covers(reach, room, path))
|
|
378
453
|
return null;
|
|
379
|
-
if (runtime.locked(room))
|
|
454
|
+
if (await runtime.locked(room))
|
|
380
455
|
throw lockedError(room);
|
|
381
456
|
return shownDraft(reach, await md.roomDraft.read(room, path));
|
|
382
457
|
},
|
|
383
|
-
write(room, path, revision, parts, next) {
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
}
|
|
395
|
-
catch (error) {
|
|
396
|
-
return Promise.reject(error);
|
|
397
|
-
}
|
|
398
|
-
return md.roomDraft
|
|
399
|
-
.write(room, path, revision, parts, next)
|
|
400
|
-
.then((written) => writeWithin(reach, written));
|
|
458
|
+
async write(room, path, revision, parts, next) {
|
|
459
|
+
if (reach !== null && carriesFile(parts))
|
|
460
|
+
throw attachRequired();
|
|
461
|
+
const move = readParts(parts, path).move;
|
|
462
|
+
if (!covers(reach, room, path) || !moves(reach, room, move))
|
|
463
|
+
throw unreached(room);
|
|
464
|
+
if (await runtime.locked(room))
|
|
465
|
+
throw lockedError(room);
|
|
466
|
+
if (await intoLocked([move]))
|
|
467
|
+
throw lockedError(move.room);
|
|
468
|
+
return writeWithin(reach, await md.roomDraft.write(room, path, revision, parts, next));
|
|
401
469
|
},
|
|
402
470
|
async discard(room, path, revision) {
|
|
403
471
|
if (!covers(reach, room, path))
|
|
404
472
|
return staleWrite(null);
|
|
405
|
-
if (runtime.locked(room))
|
|
473
|
+
if (await runtime.locked(room))
|
|
406
474
|
throw lockedError(room);
|
|
407
475
|
return writeWithin(reach, await md.roomDraft.discard(room, path, revision));
|
|
408
476
|
},
|
|
@@ -412,10 +480,19 @@ export function narrowed(runtime, given, told) {
|
|
|
412
480
|
read: (id, options) => conversation().read(id, options),
|
|
413
481
|
create: (input) => conversation().create(input),
|
|
414
482
|
send: (id, operation, draft) => conversation().send(id, operation, draft),
|
|
415
|
-
answer: (id, answer) => conversation().answer(id, answer),
|
|
416
|
-
interrupt: (id) => conversation().interrupt(id),
|
|
417
|
-
kill: (id) => conversation().kill(id),
|
|
418
|
-
delete: (id) => conversation().delete(id),
|
|
483
|
+
answer: (id, answer, operation) => conversation().answer(id, answer, operation),
|
|
484
|
+
interrupt: (id, operation) => conversation().interrupt(id, operation),
|
|
485
|
+
kill: (id, operation) => conversation().kill(id, operation),
|
|
486
|
+
delete: (id, operation) => conversation().delete(id, operation),
|
|
487
|
+
takeOut: (id, message, operation) => conversation().takeOut(id, message, operation),
|
|
488
|
+
decide: (request, decision, operation) => conversation().decide(request, decision, operation),
|
|
489
|
+
rename: (id, name, operation) => conversation().rename(id, name, operation),
|
|
490
|
+
option: (id, option, value, operation) => conversation().option(id, option, value, operation),
|
|
491
|
+
retry: (id, message, operation) => conversation().retry(id, message, operation),
|
|
492
|
+
pins: () => conversation().pins(),
|
|
493
|
+
pin: (figures) => conversation().pin(figures),
|
|
494
|
+
openedTurns: () => conversation().openedTurns(),
|
|
495
|
+
openTurn: (id, turn) => conversation().openTurn(id, turn),
|
|
419
496
|
},
|
|
420
497
|
chatDraft: {
|
|
421
498
|
write: (id, draft, revision) => chatDraft().write(id, draft, revision),
|
|
@@ -432,10 +509,5 @@ export function narrowed(runtime, given, told) {
|
|
|
432
509
|
for (const restart of [...open])
|
|
433
510
|
restart();
|
|
434
511
|
},
|
|
435
|
-
facts(next) {
|
|
436
|
-
port = next;
|
|
437
|
-
for (const restart of [...open])
|
|
438
|
-
restart();
|
|
439
|
-
},
|
|
440
512
|
};
|
|
441
513
|
}
|
package/dist/react.d.ts
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
|
+
import type { DocumentQuery, GroupQuery } from '@agentshouse/mdmodel';
|
|
2
|
+
import type { Acting, Lane, LaneShown } from './act-lanes.js';
|
|
1
3
|
import type { MdRuntimeClient } from './client.js';
|
|
2
|
-
import type { AppRoom
|
|
4
|
+
import type { AppRoom } from './listing.js';
|
|
5
|
+
import type { ConnectionRefusal } from './socket.js';
|
|
6
|
+
import type { SavedRoomDraft, SaveResult } from './saves.js';
|
|
3
7
|
import type { Member, ServiceMode } from './adapter.js';
|
|
4
8
|
import type { ConversationAgent, ConversationEntry, ConversationOptions, ConversationView } from './conversation.js';
|
|
5
9
|
import { type RuntimeError } from './failure.js';
|
|
10
|
+
import type { FiguresResult } from './figures.js';
|
|
11
|
+
import type { Holdings } from './holdings.js';
|
|
12
|
+
import type { Descriptor, Expecting } from './expectation.js';
|
|
6
13
|
import type { QueueEntry } from './outcome.js';
|
|
7
|
-
import type {
|
|
14
|
+
import type { DocumentResult, GroupResult, PendingResult } from './query.js';
|
|
8
15
|
import type { Readiness } from './readiness.js';
|
|
9
16
|
import type { RoomDraft, RoomDraftParts } from './room-draft.js';
|
|
10
17
|
import type { SyncStatus } from './status.js';
|
|
@@ -23,6 +30,7 @@ export declare function useObserve(client: Client, topic: 'storage-loss'): Obser
|
|
|
23
30
|
export declare function useObserve(client: Client, topic: 'sync-status'): Observed<SyncStatus>;
|
|
24
31
|
export declare function useObserve(client: Client, topic: 'service-mode'): Observed<ServiceMode>;
|
|
25
32
|
export declare function useObserve(client: Client, topic: 'member'): Observed<Member | null>;
|
|
33
|
+
export declare function useObserve(client: Client, topic: 'authority-changes'): Observed<number>;
|
|
26
34
|
export declare function useObserve(client: Client, topic: 'query', query: DocumentQuery): Observed<DocumentResult | PendingResult>;
|
|
27
35
|
export declare function useObserve(client: Client, topic: 'query', query: GroupQuery): Observed<GroupResult | PendingResult>;
|
|
28
36
|
export declare function useObserve(client: Client, topic: 'queue', locator: string): Observed<readonly QueueEntry[]>;
|
|
@@ -31,6 +39,11 @@ export declare function useObserve(client: Client, topic: 'presentation'): Obser
|
|
|
31
39
|
export declare function useObserve(client: Client, topic: 'conversation', conversation: string, options: ConversationOptions): Observed<ConversationView>;
|
|
32
40
|
export declare function useObserve(client: Client, topic: 'conversations'): Observed<readonly ConversationEntry[]>;
|
|
33
41
|
export declare function useObserve(client: Client, topic: 'agents'): Observed<readonly ConversationAgent[]>;
|
|
42
|
+
export declare function useObserve(client: Client, topic: 'figures'): Observed<FiguresResult>;
|
|
43
|
+
export declare function useObserve(client: Client, topic: 'holdings'): Observed<Holdings>;
|
|
44
|
+
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;
|
|
45
|
+
export type LaneHeld<O> = LaneShown<O> & Pick<Lane<O>, 'run' | 'forget'>;
|
|
46
|
+
export declare function useLane<O>(lanes: Acting<O>): LaneHeld<O>;
|
|
34
47
|
export type Saving = {
|
|
35
48
|
readonly busy: boolean;
|
|
36
49
|
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/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
|
+
}
|
package/dist/readiness.d.ts
CHANGED
|
@@ -6,13 +6,11 @@ export type RoomCoverage = {
|
|
|
6
6
|
readonly state: RoomPreparation;
|
|
7
7
|
};
|
|
8
8
|
export type ConversationCoverage = Open<'complete' | 'acquiring' | 'undeclared'>;
|
|
9
|
-
export type SearchObligation = Open<'required' | 'unused'>;
|
|
10
9
|
export type TargetCoverage = {
|
|
11
10
|
readonly complete: boolean;
|
|
12
11
|
readonly listed: boolean;
|
|
13
12
|
readonly rooms: readonly RoomCoverage[];
|
|
14
13
|
readonly conversations: ConversationCoverage;
|
|
15
|
-
readonly search: SearchObligation;
|
|
16
14
|
};
|
|
17
15
|
export type Persistence = Open<'granted' | 'denied' | 'unavailable'>;
|
|
18
16
|
export type Durability = Open<'persistent' | 'best-effort'>;
|
|
@@ -26,7 +24,6 @@ export type InstallationAmount = {
|
|
|
26
24
|
};
|
|
27
25
|
export type Installation = {
|
|
28
26
|
readonly step: InstallationStep | null;
|
|
29
|
-
readonly rooms: InstallationAmount;
|
|
30
27
|
readonly bytes: InstallationAmount;
|
|
31
28
|
};
|
|
32
29
|
export type ReadinessStatus = Open<'preparing' | 'paused' | 'ready' | 'lost'>;
|