@agentshouse/mdruntime 0.1.0-cb2e390ee7b89 → 0.1.0-cb4f25b82f4b6
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 +23 -19
- package/dist/acceptance.d.ts +3 -0
- package/dist/acceptance.d.ts.map +1 -0
- package/dist/acceptance.js +299 -0
- 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 +26 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +302 -0
- package/dist/adapter.d.ts +163 -125
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +7 -10
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +40 -41
- package/dist/binary.d.ts +0 -5
- package/dist/binary.d.ts.map +1 -1
- package/dist/binary.js +1 -1
- package/dist/bootstrap.d.ts +30 -11
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +309 -113
- 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 +12 -0
- package/dist/chain.d.ts.map +1 -0
- package/dist/chain.js +64 -0
- package/dist/change-set.d.ts +13 -16
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +17 -89
- package/dist/change.d.ts +32 -1
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +14 -3
- 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 +36 -24
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +118 -23
- package/dist/collection.d.ts +29 -21
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +48 -290
- package/dist/compile.d.ts +18 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +724 -0
- package/dist/connection.d.ts +7 -134
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +107 -3606
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/{chat/context.js → context.js} +1 -4
- package/dist/conversation-live.d.ts +143 -0
- package/dist/conversation-live.d.ts.map +1 -0
- package/dist/conversation-live.js +254 -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 +73 -49
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +1010 -794
- package/dist/declaration.d.ts +10 -0
- package/dist/declaration.d.ts.map +1 -0
- package/dist/declaration.js +24 -0
- package/dist/digest.d.ts +7 -0
- package/dist/digest.d.ts.map +1 -0
- package/dist/digest.js +113 -0
- package/dist/discovery.d.ts +10 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +150 -0
- package/dist/durability.d.ts +20 -4
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +9 -0
- package/dist/entry.d.ts +5 -2
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +33 -28
- 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/file.d.ts +2 -19
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +7 -122
- 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 +21 -11
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +113 -49
- package/dist/identity.d.ts +0 -2
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +0 -6
- package/dist/index.d.ts +39 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -4
- package/dist/install.d.ts +54 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +530 -0
- package/dist/lifecycle.d.ts +7 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +277 -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 +23 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/live.js +165 -0
- package/dist/locks.d.ts +7 -0
- package/dist/locks.d.ts.map +1 -0
- package/dist/locks.js +32 -0
- package/dist/lost.d.ts +5 -0
- package/dist/lost.d.ts.map +1 -0
- package/dist/lost.js +49 -0
- package/dist/media.d.ts +8 -0
- package/dist/media.d.ts.map +1 -0
- package/dist/media.js +218 -0
- package/dist/memory.d.ts +17 -8
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +273 -121
- package/dist/messages.d.ts +56 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +158 -0
- package/dist/model.d.ts +8 -11
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +6 -23
- package/dist/models.d.ts +10 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +153 -0
- package/dist/name.d.ts +4 -0
- package/dist/name.d.ts.map +1 -0
- package/dist/name.js +122 -0
- package/dist/observation.d.ts +17 -3
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +107 -17
- package/dist/opened.d.ts +22 -0
- package/dist/opened.d.ts.map +1 -0
- package/dist/opened.js +107 -0
- package/dist/opening.d.ts +4 -0
- package/dist/opening.d.ts.map +1 -0
- package/dist/opening.js +53 -0
- package/dist/outcome.d.ts +47 -9
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +56 -2
- package/dist/overlay.d.ts +7 -5
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +123 -182
- 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 +4 -0
- package/dist/parts.d.ts.map +1 -0
- package/dist/parts.js +13 -0
- package/dist/paths.d.ts +2 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +26 -0
- package/dist/preparation.d.ts +20 -0
- package/dist/preparation.d.ts.map +1 -0
- package/dist/preparation.js +227 -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 +282 -0
- package/dist/query.d.ts +21 -203
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +3 -491
- package/dist/{chat/questions.d.ts → questions.d.ts} +5 -7
- package/dist/questions.d.ts.map +1 -0
- package/dist/{chat/questions.js → questions.js} +11 -7
- package/dist/queue.d.ts +40 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +450 -0
- package/dist/reach.d.ts +20 -9
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +341 -111
- package/dist/react.d.ts +16 -4
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +35 -15
- package/dist/{chat/read.d.ts → read.d.ts} +2 -0
- package/dist/read.d.ts.map +1 -0
- package/dist/{chat/read.js → read.js} +4 -0
- package/dist/readiness.d.ts +14 -18
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +2 -8
- package/dist/reads.d.ts +38 -10
- package/dist/reads.d.ts.map +1 -1
- package/dist/reads.js +163 -83
- package/dist/recovery.d.ts +5 -2
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +65 -8
- package/dist/refresh.d.ts +18 -15
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +145 -60
- package/dist/refusal.d.ts +5 -0
- package/dist/refusal.d.ts.map +1 -0
- package/dist/refusal.js +55 -0
- package/dist/replica.d.ts +49 -36
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +320 -196
- 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 +28 -11
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +194 -118
- 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 +31 -30
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +60 -120
- package/dist/runtime.d.ts +34 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +1 -0
- package/dist/save.d.ts +43 -49
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +776 -275
- package/dist/saves.d.ts +32 -0
- package/dist/saves.d.ts.map +1 -0
- package/dist/saves.js +410 -0
- package/dist/search.d.ts +12 -95
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +10 -266
- 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 +6 -7
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +75 -104
- package/dist/shown.d.ts +33 -0
- package/dist/shown.d.ts.map +1 -0
- package/dist/shown.js +302 -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 +28 -0
- package/dist/socket/lanes.d.ts.map +1 -0
- package/dist/socket/lanes.js +103 -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 +67 -0
- package/dist/socket.d.ts.map +1 -0
- package/dist/socket.js +164 -0
- package/dist/source.d.ts +54 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +82 -0
- package/dist/status.d.ts +4 -5
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +3 -7
- 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 +214 -0
- package/dist/store/records.d.ts.map +1 -0
- package/dist/store/records.js +438 -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 +111 -164
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +159 -754
- package/dist/stored.d.ts +157 -0
- package/dist/stored.d.ts.map +1 -0
- package/dist/stored.js +649 -0
- package/dist/surface.d.ts +88 -0
- package/dist/surface.d.ts.map +1 -0
- package/dist/surface.js +220 -0
- package/dist/sync.d.ts +19 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +535 -0
- package/dist/tables.d.ts +415 -0
- package/dist/tables.d.ts.map +1 -0
- package/dist/tables.js +761 -0
- package/dist/tallies.d.ts +18 -0
- package/dist/tallies.d.ts.map +1 -0
- package/dist/tallies.js +129 -0
- package/dist/transfer.d.ts +0 -5
- package/dist/transfer.d.ts.map +1 -1
- package/dist/turn.d.ts +5 -3
- package/dist/turn.d.ts.map +1 -1
- package/dist/turn.js +51 -21
- package/dist/validation.d.ts +29 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +104 -0
- package/dist/windows.d.ts +9 -16
- package/dist/windows.d.ts.map +1 -1
- package/dist/windows.js +11 -75
- package/dist/wire.d.ts +89 -9
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +29 -6
- package/package.json +19 -19
- package/AGENTS.md +0 -299
- package/dist/acquisition.d.ts +0 -14
- package/dist/acquisition.d.ts.map +0 -1
- package/dist/acquisition.js +0 -24
- package/dist/attempt.d.ts +0 -16
- package/dist/attempt.d.ts.map +0 -1
- package/dist/attempt.js +0 -70
- package/dist/chat/acts.d.ts +0 -33
- package/dist/chat/acts.d.ts.map +0 -1
- package/dist/chat/acts.js +0 -36
- package/dist/chat/context.d.ts +0 -3
- package/dist/chat/context.d.ts.map +0 -1
- package/dist/chat/earlier.d.ts +0 -10
- package/dist/chat/earlier.d.ts.map +0 -1
- package/dist/chat/earlier.js +0 -54
- package/dist/chat/input.d.ts +0 -9
- package/dist/chat/input.d.ts.map +0 -1
- package/dist/chat/input.js +0 -99
- package/dist/chat/kit.d.ts +0 -61
- package/dist/chat/kit.d.ts.map +0 -1
- package/dist/chat/kit.js +0 -123
- package/dist/chat/lasting.d.ts +0 -6
- package/dist/chat/lasting.d.ts.map +0 -1
- package/dist/chat/lasting.js +0 -19
- package/dist/chat/list.d.ts +0 -27
- package/dist/chat/list.d.ts.map +0 -1
- package/dist/chat/list.js +0 -99
- package/dist/chat/markdown.d.ts +0 -20
- package/dist/chat/markdown.d.ts.map +0 -1
- package/dist/chat/markdown.js +0 -188
- package/dist/chat/message.d.ts +0 -6
- package/dist/chat/message.d.ts.map +0 -1
- package/dist/chat/message.js +0 -192
- package/dist/chat/messages.d.ts +0 -22
- package/dist/chat/messages.d.ts.map +0 -1
- package/dist/chat/messages.js +0 -155
- package/dist/chat/name.d.ts +0 -6
- package/dist/chat/name.d.ts.map +0 -1
- package/dist/chat/name.js +0 -37
- package/dist/chat/opened.d.ts +0 -11
- package/dist/chat/opened.d.ts.map +0 -1
- package/dist/chat/opened.js +0 -17
- package/dist/chat/overlay.d.ts +0 -31
- package/dist/chat/overlay.d.ts.map +0 -1
- package/dist/chat/overlay.js +0 -97
- package/dist/chat/parts.d.ts +0 -57
- package/dist/chat/parts.d.ts.map +0 -1
- package/dist/chat/parts.js +0 -119
- package/dist/chat/process.d.ts +0 -20
- package/dist/chat/process.d.ts.map +0 -1
- package/dist/chat/process.js +0 -32
- package/dist/chat/provider.d.ts +0 -63
- package/dist/chat/provider.d.ts.map +0 -1
- package/dist/chat/provider.js +0 -635
- package/dist/chat/question.d.ts +0 -9
- package/dist/chat/question.d.ts.map +0 -1
- package/dist/chat/question.js +0 -69
- package/dist/chat/questions.d.ts.map +0 -1
- package/dist/chat/read.d.ts.map +0 -1
- package/dist/chat/ready.d.ts +0 -34
- package/dist/chat/ready.d.ts.map +0 -1
- package/dist/chat/ready.js +0 -91
- package/dist/chat/style.d.ts +0 -4
- package/dist/chat/style.d.ts.map +0 -1
- package/dist/chat/style.js +0 -302
- package/dist/chat.d.ts +0 -14
- package/dist/chat.d.ts.map +0 -1
- package/dist/chat.js +0 -8
- package/dist/fence.d.ts +0 -6
- package/dist/fence.d.ts.map +0 -1
- package/dist/fence.js +0 -10
- package/dist/log.d.ts +0 -5
- package/dist/log.d.ts.map +0 -1
- package/dist/log.js +0 -14
- package/dist/read-side.d.ts +0 -25
- package/dist/read-side.d.ts.map +0 -1
- package/dist/read-side.js +0 -761
package/dist/queries.js
ADDED
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import { identityOf } from '@agentshouse/mdmodel';
|
|
2
|
+
import { ROOM_TOTALS } from './figures.js';
|
|
3
|
+
import { roomInFlight } from './install.js';
|
|
4
|
+
import { compositionFor, roomFacts } from './listing.js';
|
|
5
|
+
import { lockedRooms } from './locks.js';
|
|
6
|
+
import { OFFLINE, UNCERTAIN, failure } from './outcome.js';
|
|
7
|
+
import { connectionNow, prepare, roomsOfReach } from './preparation.js';
|
|
8
|
+
import { planWithin, } from './query.js';
|
|
9
|
+
import { planReach } from './reach.js';
|
|
10
|
+
import { refuse } from './refusal.js';
|
|
11
|
+
import { documentKey } from './rows.js';
|
|
12
|
+
import { searchPlanOf } from './search.js';
|
|
13
|
+
import { seedApplies, seededResult, watchSeeded } from './seed.js';
|
|
14
|
+
import { capped, MAXIMUM_WINDOW } from './windows.js';
|
|
15
|
+
const QUERY_BYTES = 1 << 20;
|
|
16
|
+
function everyRoom({ presence }, held) {
|
|
17
|
+
return [
|
|
18
|
+
...new Set([
|
|
19
|
+
...presence.rooms().map(({ locator }) => locator),
|
|
20
|
+
...held.rooms.keys(),
|
|
21
|
+
...held.queues.keys(),
|
|
22
|
+
]),
|
|
23
|
+
];
|
|
24
|
+
}
|
|
25
|
+
function reachedRooms(runtime, plan, held) {
|
|
26
|
+
const reached = plan.reach === null ? null : roomsOfReach(plan.reach);
|
|
27
|
+
const named = plan.rooms ?? (reached === null ? everyRoom(runtime, held) : [...reached]);
|
|
28
|
+
return [...new Set(named)]
|
|
29
|
+
.filter((locator) => (reached === null || reached.has(locator)) && !plan.locked.includes(locator))
|
|
30
|
+
.sort();
|
|
31
|
+
}
|
|
32
|
+
function awaited({ socket, presence }, locator) {
|
|
33
|
+
return (!socket.session.now().roomsListed || presence.room(locator)?.replica.admission === 'admitted');
|
|
34
|
+
}
|
|
35
|
+
function coveredRooms(runtime, locators, whole, held) {
|
|
36
|
+
const { store, socket } = runtime;
|
|
37
|
+
if (locators.length === 0 && whole && !socket.session.now().roomsListed)
|
|
38
|
+
return { pending: [] };
|
|
39
|
+
const pending = [];
|
|
40
|
+
const coverage = [];
|
|
41
|
+
const overlay = [];
|
|
42
|
+
const read = [];
|
|
43
|
+
for (const locator of locators) {
|
|
44
|
+
const replica = held.rooms.get(locator);
|
|
45
|
+
if (replica === undefined) {
|
|
46
|
+
if (awaited(runtime, locator))
|
|
47
|
+
pending.push({ room: locator, awaits: 'acquisition' });
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (!replica.indexed) {
|
|
51
|
+
pending.push({ room: locator, awaits: 'preparation' });
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
coverage.push({
|
|
55
|
+
room: locator,
|
|
56
|
+
generation: replica.transfer,
|
|
57
|
+
current: !roomInFlight(store, locator),
|
|
58
|
+
});
|
|
59
|
+
read.push({ locator, key: replica.key });
|
|
60
|
+
for (const id of held.queues.get(locator) ?? [])
|
|
61
|
+
overlay.push(id);
|
|
62
|
+
}
|
|
63
|
+
if (pending.length > 0)
|
|
64
|
+
return { pending };
|
|
65
|
+
return { coverage: { rooms: coverage, overlay }, rooms: read };
|
|
66
|
+
}
|
|
67
|
+
function covered(runtime, plan, held) {
|
|
68
|
+
return coveredRooms(runtime, reachedRooms(runtime, plan, held), plan.rooms === null && plan.reach === null, held);
|
|
69
|
+
}
|
|
70
|
+
function awaitPreparation(runtime, cover) {
|
|
71
|
+
if (!('pending' in cover))
|
|
72
|
+
return;
|
|
73
|
+
const waiting = cover.pending.filter(({ awaits }) => awaits === 'preparation');
|
|
74
|
+
if (waiting.length > 0) {
|
|
75
|
+
prepare(runtime, waiting.map(({ room }) => room));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export async function figuresCover(runtime) {
|
|
79
|
+
const held = await runtime.store.covering();
|
|
80
|
+
const locked = await lockedRooms(runtime);
|
|
81
|
+
const cover = coveredRooms(runtime, everyRoom(runtime, held)
|
|
82
|
+
.filter((locator) => !locked.includes(locator))
|
|
83
|
+
.sort(), true, held);
|
|
84
|
+
awaitPreparation(runtime, cover);
|
|
85
|
+
return 'pending' in cover ? cover : { rooms: cover.rooms };
|
|
86
|
+
}
|
|
87
|
+
function sameCover(left, right) {
|
|
88
|
+
return JSON.stringify(left) === JSON.stringify(right);
|
|
89
|
+
}
|
|
90
|
+
async function windowRows(local, plan, rooms, unchanged) {
|
|
91
|
+
const first = await local.query(plan, rooms, QUERY_BYTES);
|
|
92
|
+
if (first.more === undefined || !('documents' in first)) {
|
|
93
|
+
const { more: _more, ...rows } = first;
|
|
94
|
+
return rows;
|
|
95
|
+
}
|
|
96
|
+
const documents = [...first.documents];
|
|
97
|
+
for (let more = first.more; more !== undefined;) {
|
|
98
|
+
if (!unchanged())
|
|
99
|
+
return null;
|
|
100
|
+
const page = await local.query({
|
|
101
|
+
...plan,
|
|
102
|
+
after: { text: more, values: JSON.parse(more) },
|
|
103
|
+
limit: plan.limit === null ? null : plan.limit - documents.length,
|
|
104
|
+
total: false,
|
|
105
|
+
}, rooms, QUERY_BYTES);
|
|
106
|
+
if (!('documents' in page))
|
|
107
|
+
return null;
|
|
108
|
+
documents.push(...page.documents);
|
|
109
|
+
more = page.more;
|
|
110
|
+
if (more === undefined) {
|
|
111
|
+
return {
|
|
112
|
+
documents,
|
|
113
|
+
...(page.next === undefined ? {} : { next: page.next }),
|
|
114
|
+
...(first.total === undefined ? {} : { total: first.total }),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
function freeTextAsked(plan) {
|
|
121
|
+
return plan.shape.kind === 'documents' && (plan.shape.sections !== null || plan.shape.preamble);
|
|
122
|
+
}
|
|
123
|
+
async function composedRooms(runtime, plan, rooms) {
|
|
124
|
+
if (!freeTextAsked(plan))
|
|
125
|
+
return rooms;
|
|
126
|
+
const held = await runtime.store.rooms(rooms.map(({ locator }) => locator));
|
|
127
|
+
return rooms.map((room) => {
|
|
128
|
+
const stored = held.get(room.locator);
|
|
129
|
+
return stored === undefined
|
|
130
|
+
? room
|
|
131
|
+
: { ...room, composition: compositionFor(runtime, stored.record) };
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
async function coveredRows(runtime, plan, cover) {
|
|
135
|
+
const { store } = runtime;
|
|
136
|
+
for (;;) {
|
|
137
|
+
const before = await cover();
|
|
138
|
+
if ('pending' in before)
|
|
139
|
+
return { pending: before };
|
|
140
|
+
const local = await store.open();
|
|
141
|
+
const keys = before.rooms.map(({ key }) => key);
|
|
142
|
+
const changes = local.changes(keys);
|
|
143
|
+
const current = () => local.changes(keys) === changes;
|
|
144
|
+
const rows = await windowRows(local, plan, await composedRooms(runtime, plan, before.rooms), current);
|
|
145
|
+
const after = await cover();
|
|
146
|
+
if (rows !== null && sameCover(before, after))
|
|
147
|
+
return { rows, cover: before, current };
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
function keyedOf(rows, coverage) {
|
|
151
|
+
if ('groups' in rows) {
|
|
152
|
+
return {
|
|
153
|
+
result: { ...rows, coverage },
|
|
154
|
+
keys: rows.groups.map((group) => JSON.stringify(group.key)),
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
return {
|
|
158
|
+
result: { ...rows, coverage },
|
|
159
|
+
keys: rows.documents.map((document) => documentKey(document.room, document.path)),
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
export async function answeredPlan(runtime, plan, cover) {
|
|
163
|
+
const answered = await coveredRows(runtime, plan, cover);
|
|
164
|
+
if ('pending' in answered) {
|
|
165
|
+
const pending = answered.pending;
|
|
166
|
+
return { result: pending, keys: [], current: () => true };
|
|
167
|
+
}
|
|
168
|
+
const held = answered.cover;
|
|
169
|
+
return { ...keyedOf(answered.rows, held.coverage), current: answered.current };
|
|
170
|
+
}
|
|
171
|
+
async function coverNow(runtime, plan) {
|
|
172
|
+
const cover = covered(runtime, plan, await runtime.store.covering());
|
|
173
|
+
awaitPreparation(runtime, cover);
|
|
174
|
+
return cover;
|
|
175
|
+
}
|
|
176
|
+
export async function rowsQuery(runtime, plan) {
|
|
177
|
+
const held = await runtime.store.covering();
|
|
178
|
+
const before = covered(runtime, plan, held);
|
|
179
|
+
awaitPreparation(runtime, before);
|
|
180
|
+
const seeded = seedApplies(runtime, plan, held);
|
|
181
|
+
if (seeded !== null)
|
|
182
|
+
return seededResult(seeded).result;
|
|
183
|
+
if ('pending' in before)
|
|
184
|
+
return before;
|
|
185
|
+
const answered = await coveredRows(runtime, plan, () => coverNow(runtime, plan));
|
|
186
|
+
if ('pending' in answered)
|
|
187
|
+
return answered.pending;
|
|
188
|
+
const shownCover = answered.cover;
|
|
189
|
+
return { ...answered.rows, coverage: shownCover.coverage };
|
|
190
|
+
}
|
|
191
|
+
export async function planned(runtime, input, reach) {
|
|
192
|
+
const plan = planWithin(input, await roomFacts(runtime, reach), planReach(reach));
|
|
193
|
+
const named = plan.paths !== null &&
|
|
194
|
+
plan.rooms !== null &&
|
|
195
|
+
plan.paths.length * plan.rooms.length <= MAXIMUM_WINDOW;
|
|
196
|
+
return plan.limit === null && named ? plan : { ...plan, limit: capped(plan.limit) };
|
|
197
|
+
}
|
|
198
|
+
export async function roomTallies(runtime, rooms, since) {
|
|
199
|
+
return runtime.store.ask({
|
|
200
|
+
kind: 'replica.tallies',
|
|
201
|
+
totals: { ...(await planned(runtime, ROOM_TOTALS, null)), limit: null },
|
|
202
|
+
rooms,
|
|
203
|
+
since,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
export function watchPlan(runtime, plan, deliver, fail) {
|
|
207
|
+
return watchSeeded(runtime, plan, deliver, (behind, answered) => runtime.liveQueries.watch(plan, identityOf(plan), (held) => {
|
|
208
|
+
const cover = covered(runtime, plan, held);
|
|
209
|
+
awaitPreparation(runtime, cover);
|
|
210
|
+
return behind(cover, held);
|
|
211
|
+
}, answered, fail));
|
|
212
|
+
}
|
|
213
|
+
export function watchPlanned(runtime, planning, deliver, fail) {
|
|
214
|
+
let stop = null;
|
|
215
|
+
let stopped = false;
|
|
216
|
+
planning.then((plan) => {
|
|
217
|
+
if (!stopped)
|
|
218
|
+
stop = watchPlan(runtime, plan, deliver, fail);
|
|
219
|
+
}, (error) => {
|
|
220
|
+
if (!stopped)
|
|
221
|
+
fail(error);
|
|
222
|
+
});
|
|
223
|
+
return () => {
|
|
224
|
+
stopped = true;
|
|
225
|
+
stop?.();
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
export async function searched(runtime, input, reach) {
|
|
229
|
+
const { store, socket } = runtime;
|
|
230
|
+
const { session } = socket;
|
|
231
|
+
const asked = searchPlanOf(input);
|
|
232
|
+
await socket.ready;
|
|
233
|
+
const search = socket.search();
|
|
234
|
+
if (search === undefined) {
|
|
235
|
+
return {
|
|
236
|
+
kind: 'undeclared',
|
|
237
|
+
code: 'action-undeclared',
|
|
238
|
+
fields: { name: 'search' },
|
|
239
|
+
retryable: false,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
if (socket.closed() ||
|
|
243
|
+
session.now().refusal !== null ||
|
|
244
|
+
(await connectionNow(runtime)) !== 'connected')
|
|
245
|
+
return OFFLINE;
|
|
246
|
+
const reached = reach === null ? null : new Set(reach.rooms);
|
|
247
|
+
const named = asked.rooms === null
|
|
248
|
+
? reached === null
|
|
249
|
+
? null
|
|
250
|
+
: [...reached]
|
|
251
|
+
: asked.rooms.filter((room) => reached === null || reached.has(room));
|
|
252
|
+
const held = named === null ? null : await store.rooms(named);
|
|
253
|
+
const rooms = named === null ? null : named.filter((room) => held.has(room)).sort();
|
|
254
|
+
if (rooms !== null && rooms.length === 0)
|
|
255
|
+
return { kind: 'found', documents: [] };
|
|
256
|
+
try {
|
|
257
|
+
await socket.authorize();
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
return UNCERTAIN;
|
|
261
|
+
}
|
|
262
|
+
const { closed, authorization, refusal } = session.now();
|
|
263
|
+
if (closed || authorization === undefined || refusal !== null)
|
|
264
|
+
return UNCERTAIN;
|
|
265
|
+
try {
|
|
266
|
+
const result = await search(authorization, { text: asked.text, rooms });
|
|
267
|
+
if (result.kind === 'revoked-authorization')
|
|
268
|
+
await refuse(runtime, 'revoked-authorization');
|
|
269
|
+
if (result.kind === 'rejected')
|
|
270
|
+
return result;
|
|
271
|
+
if (result.kind !== 'found')
|
|
272
|
+
return failure(result);
|
|
273
|
+
const kept = rooms === null ? null : new Set(rooms);
|
|
274
|
+
return {
|
|
275
|
+
kind: 'found',
|
|
276
|
+
documents: result.documents.filter((hit) => kept === null || kept.has(hit.room)),
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
catch {
|
|
280
|
+
return UNCERTAIN;
|
|
281
|
+
}
|
|
282
|
+
}
|
package/dist/query.d.ts
CHANGED
|
@@ -1,91 +1,7 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type HeldRooms, type QueryPlan } from '@agentshouse/mdmodel';
|
|
2
2
|
import type { HeadChange } from './adapter.js';
|
|
3
3
|
import type { BinaryFileRecord } from './binary.js';
|
|
4
4
|
import type { Open } from './open.js';
|
|
5
|
-
export type Value = string | number | boolean | null;
|
|
6
|
-
export type Predicate = Value | {
|
|
7
|
-
$eq: Value;
|
|
8
|
-
} | {
|
|
9
|
-
$ne: Value;
|
|
10
|
-
} | {
|
|
11
|
-
$in: readonly Value[];
|
|
12
|
-
} | {
|
|
13
|
-
$nin: readonly Value[];
|
|
14
|
-
} | {
|
|
15
|
-
$gt?: Value;
|
|
16
|
-
$gte?: Value;
|
|
17
|
-
$lt?: Value;
|
|
18
|
-
$lte?: Value;
|
|
19
|
-
} | {
|
|
20
|
-
$all: readonly Value[];
|
|
21
|
-
} | {
|
|
22
|
-
$size: number;
|
|
23
|
-
} | {
|
|
24
|
-
$exists: boolean;
|
|
25
|
-
};
|
|
26
|
-
export type Where = {
|
|
27
|
-
$and?: readonly Where[];
|
|
28
|
-
$or?: readonly Where[];
|
|
29
|
-
[field: string]: Predicate | readonly Where[] | undefined;
|
|
30
|
-
};
|
|
31
|
-
export type Related = {
|
|
32
|
-
types?: readonly string[];
|
|
33
|
-
where?: Where;
|
|
34
|
-
pathPrefix?: string;
|
|
35
|
-
};
|
|
36
|
-
export type Filter = {
|
|
37
|
-
rooms?: readonly string[];
|
|
38
|
-
types?: readonly string[];
|
|
39
|
-
where?: Where;
|
|
40
|
-
pathPrefix?: string;
|
|
41
|
-
paths?: readonly string[];
|
|
42
|
-
hop?: Related & {
|
|
43
|
-
field: string;
|
|
44
|
-
};
|
|
45
|
-
backlinks?: Related & {
|
|
46
|
-
field?: string;
|
|
47
|
-
};
|
|
48
|
-
};
|
|
49
|
-
export type Key = 'room' | 'path' | 'type' | {
|
|
50
|
-
field: string;
|
|
51
|
-
};
|
|
52
|
-
export type Select = 'all' | {
|
|
53
|
-
fields?: 'all' | readonly string[];
|
|
54
|
-
sections?: 'all' | readonly string[];
|
|
55
|
-
preamble?: true;
|
|
56
|
-
markdown?: true;
|
|
57
|
-
backlinks?: true;
|
|
58
|
-
change?: true;
|
|
59
|
-
fileId?: true;
|
|
60
|
-
};
|
|
61
|
-
export type OrderOptions = {
|
|
62
|
-
nulls?: 'first' | 'last';
|
|
63
|
-
stringSort?: 'lexical' | 'locale';
|
|
64
|
-
locale?: string;
|
|
65
|
-
localeOptions?: Readonly<Record<string, unknown>>;
|
|
66
|
-
};
|
|
67
|
-
export type Direction = 'asc' | 'desc';
|
|
68
|
-
export type DocumentQuery = Filter & {
|
|
69
|
-
select: Select;
|
|
70
|
-
orderBy?: readonly ({
|
|
71
|
-
by: Key;
|
|
72
|
-
direction?: Direction;
|
|
73
|
-
} & OrderOptions)[];
|
|
74
|
-
limit?: number;
|
|
75
|
-
after?: string;
|
|
76
|
-
total?: true;
|
|
77
|
-
};
|
|
78
|
-
export type GroupQuery = Filter & {
|
|
79
|
-
groupBy: readonly Exclude<Key, 'path'>[];
|
|
80
|
-
orderBy?: readonly {
|
|
81
|
-
by: 'count' | Exclude<Key, 'path'>;
|
|
82
|
-
direction?: Direction;
|
|
83
|
-
}[];
|
|
84
|
-
limit?: number;
|
|
85
|
-
after?: string;
|
|
86
|
-
total?: true;
|
|
87
|
-
};
|
|
88
|
-
export type LocalQuery = DocumentQuery | GroupQuery;
|
|
89
5
|
export type Backlink = {
|
|
90
6
|
path: string;
|
|
91
7
|
type: string;
|
|
@@ -102,11 +18,22 @@ export type QueryDocument = {
|
|
|
102
18
|
backlinks?: readonly Backlink[];
|
|
103
19
|
change?: HeadChange | null;
|
|
104
20
|
fileId?: string | null;
|
|
21
|
+
revision?: string | null;
|
|
105
22
|
binaryFile?: BinaryFileRecord;
|
|
23
|
+
size?: number | null;
|
|
24
|
+
created?: string | null;
|
|
25
|
+
};
|
|
26
|
+
export type GroupTotal = {
|
|
27
|
+
count: number;
|
|
28
|
+
size: number;
|
|
106
29
|
};
|
|
107
30
|
export type QueryGroup = {
|
|
108
31
|
key: readonly unknown[];
|
|
109
32
|
count: number;
|
|
33
|
+
documents?: GroupTotal;
|
|
34
|
+
files?: GroupTotal;
|
|
35
|
+
updated?: string | null;
|
|
36
|
+
greatest?: unknown;
|
|
110
37
|
};
|
|
111
38
|
export type CoveredRoom = {
|
|
112
39
|
room: string;
|
|
@@ -115,10 +42,9 @@ export type CoveredRoom = {
|
|
|
115
42
|
};
|
|
116
43
|
export type QueryCoverage = {
|
|
117
44
|
rooms: readonly CoveredRoom[];
|
|
118
|
-
indexes: readonly string[];
|
|
119
45
|
overlay: readonly string[];
|
|
120
46
|
};
|
|
121
|
-
export type Awaits = Open<'acquisition' | 'preparation' | '
|
|
47
|
+
export type Awaits = Open<'acquisition' | 'preparation' | 'unlock'>;
|
|
122
48
|
export type PendingRoom = {
|
|
123
49
|
room: string;
|
|
124
50
|
awaits: Awaits;
|
|
@@ -144,127 +70,19 @@ export type GroupResult = GroupRows & {
|
|
|
144
70
|
coverage: QueryCoverage;
|
|
145
71
|
};
|
|
146
72
|
export type QueryResult = DocumentResult | GroupResult | PendingResult;
|
|
147
|
-
export type
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
types: readonly Definition[];
|
|
152
|
-
};
|
|
153
|
-
export type HeldRooms = {
|
|
154
|
-
listed: boolean;
|
|
155
|
-
rooms: readonly RoomFacts[];
|
|
156
|
-
};
|
|
157
|
-
export type Test = {
|
|
158
|
-
op: 'eq';
|
|
159
|
-
value: Value;
|
|
160
|
-
} | {
|
|
161
|
-
op: 'ne';
|
|
162
|
-
value: Value;
|
|
163
|
-
} | {
|
|
164
|
-
op: 'in';
|
|
165
|
-
values: readonly Value[];
|
|
166
|
-
} | {
|
|
167
|
-
op: 'nin';
|
|
168
|
-
values: readonly Value[];
|
|
169
|
-
} | {
|
|
170
|
-
op: 'range';
|
|
171
|
-
bounds: readonly (readonly ['gt' | 'gte' | 'lt' | 'lte', Value])[];
|
|
172
|
-
} | {
|
|
173
|
-
op: 'all';
|
|
174
|
-
values: readonly Value[];
|
|
175
|
-
} | {
|
|
176
|
-
op: 'size';
|
|
177
|
-
size: number;
|
|
178
|
-
} | {
|
|
179
|
-
op: 'exists';
|
|
180
|
-
exists: boolean;
|
|
181
|
-
};
|
|
182
|
-
export type Condition = {
|
|
183
|
-
every: readonly Condition[];
|
|
184
|
-
} | {
|
|
185
|
-
some: readonly Condition[];
|
|
186
|
-
} | {
|
|
187
|
-
field: string;
|
|
188
|
-
test: Test;
|
|
189
|
-
};
|
|
190
|
-
export type Scope = {
|
|
191
|
-
types: readonly string[] | null;
|
|
192
|
-
where: Condition | null;
|
|
193
|
-
pathPrefix: string | null;
|
|
194
|
-
};
|
|
195
|
-
export type KeyPlan = {
|
|
196
|
-
of: 'room';
|
|
197
|
-
} | {
|
|
198
|
-
of: 'path';
|
|
199
|
-
} | {
|
|
200
|
-
of: 'type';
|
|
201
|
-
} | {
|
|
202
|
-
of: 'field';
|
|
203
|
-
field: string;
|
|
204
|
-
};
|
|
205
|
-
export type DocumentShape = {
|
|
206
|
-
kind: 'documents';
|
|
207
|
-
fields: 'all' | readonly string[] | null;
|
|
208
|
-
sections: 'all' | readonly string[] | null;
|
|
209
|
-
preamble: boolean;
|
|
210
|
-
markdown: boolean;
|
|
211
|
-
backlinks: boolean;
|
|
212
|
-
change: boolean;
|
|
213
|
-
fileId: boolean;
|
|
214
|
-
orderBy: readonly {
|
|
215
|
-
key: KeyPlan;
|
|
216
|
-
options: OrderOptions & {
|
|
217
|
-
direction: Direction;
|
|
218
|
-
};
|
|
219
|
-
}[];
|
|
220
|
-
};
|
|
221
|
-
export type GroupShape = {
|
|
222
|
-
kind: 'groups';
|
|
223
|
-
groupBy: readonly KeyPlan[];
|
|
224
|
-
orderBy: readonly {
|
|
225
|
-
by: 'count' | number;
|
|
226
|
-
direction: Direction;
|
|
227
|
-
}[];
|
|
73
|
+
export type PlanArea = {
|
|
74
|
+
room: string;
|
|
75
|
+
path: string;
|
|
76
|
+
open: readonly string[];
|
|
228
77
|
};
|
|
229
78
|
export type PlanReach = {
|
|
230
79
|
rooms: readonly string[];
|
|
231
80
|
documents: readonly string[];
|
|
81
|
+
areas: readonly PlanArea[];
|
|
232
82
|
};
|
|
233
|
-
export type
|
|
234
|
-
text: string;
|
|
235
|
-
values: readonly unknown[] | null;
|
|
236
|
-
};
|
|
237
|
-
export type Plan = {
|
|
238
|
-
key: string;
|
|
239
|
-
rooms: readonly string[] | null;
|
|
83
|
+
export type Plan = QueryPlan & {
|
|
240
84
|
reach: PlanReach | null;
|
|
241
|
-
|
|
242
|
-
paths: readonly string[] | null;
|
|
243
|
-
hop: (Scope & {
|
|
244
|
-
field: string;
|
|
245
|
-
}) | null;
|
|
246
|
-
backlinks: (Scope & {
|
|
247
|
-
field: string | null;
|
|
248
|
-
}) | null;
|
|
249
|
-
shape: DocumentShape | GroupShape;
|
|
250
|
-
limit: number | null;
|
|
251
|
-
after: Continuation | null;
|
|
252
|
-
total: boolean;
|
|
85
|
+
locked: readonly string[];
|
|
253
86
|
};
|
|
254
|
-
export declare
|
|
255
|
-
readonly code: QueryErrorCode;
|
|
256
|
-
readonly retryable = false;
|
|
257
|
-
constructor(code: QueryErrorCode, at: string, problem: string);
|
|
258
|
-
}
|
|
259
|
-
type Entries = Readonly<Record<string, unknown>>;
|
|
260
|
-
export declare function invalid(at: string, problem: string): never;
|
|
261
|
-
export declare function plain(value: unknown): value is Entries;
|
|
262
|
-
export declare function known(value: Entries, allowed: readonly string[], at: string): void;
|
|
263
|
-
export declare function flag(input: unknown, at: string): boolean;
|
|
264
|
-
export declare function planOf(input: unknown, facts: HeldRooms, reach?: PlanReach | null): Plan;
|
|
265
|
-
export declare function limitOf(input: unknown): number | null;
|
|
266
|
-
export declare function filterOf(input: unknown, facts: HeldRooms, reach?: PlanReach | null): Plan;
|
|
267
|
-
export declare function queryKey(query: unknown): string;
|
|
268
|
-
export declare function identityOf(plan: Plan): string;
|
|
269
|
-
export {};
|
|
87
|
+
export declare function planWithin(input: unknown, facts: HeldRooms, reach?: PlanReach | null): Plan;
|
|
270
88
|
//# sourceMappingURL=query.d.ts.map
|
package/dist/query.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
|