@agentshouse/mdruntime 0.1.0-cd26b960b7262 → 0.1.0-cd30853a1b15e
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 +72 -158
- 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 +81 -56
- 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 +3 -0
- 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 +10 -19
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +30 -18
- 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 +17 -5
- 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 +32 -10
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +317 -232
- 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 +25 -14
- package/dist/expectation.d.ts.map +1 -1
- package/dist/expectation.js +51 -20
- 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.map +1 -1
- package/dist/file.js +2 -1
- package/dist/host.d.ts +18 -2
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +55 -15
- package/dist/index.d.ts +15 -10
- 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 -109
- 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 -31
- 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 +5 -0
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +65 -14
- package/dist/memory.d.ts +7 -3
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +56 -26
- package/dist/messages.d.ts +12 -6
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +25 -27
- 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 +173 -69
- package/dist/opened.d.ts +1 -1
- package/dist/opened.d.ts.map +1 -1
- package/dist/opened.js +2 -2
- package/dist/opening.d.ts.map +1 -1
- package/dist/opening.js +5 -9
- package/dist/outcome.d.ts +7 -0
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +23 -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 -59
- package/dist/parts.d.ts.map +1 -1
- package/dist/parts.js +10 -123
- package/dist/preparation.d.ts +27 -6
- package/dist/preparation.d.ts.map +1 -1
- package/dist/preparation.js +154 -66
- 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 +66 -30
- 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 +83 -25
- package/dist/react.d.ts +8 -5
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +28 -5
- 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 -5
- package/dist/replica.d.ts +5 -11
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +14 -16
- 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 +30 -5
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +270 -63
- package/dist/room-drafts.d.ts.map +1 -1
- package/dist/room-drafts.js +8 -5
- 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 +314 -223
- package/dist/saves.d.ts +2 -40
- package/dist/saves.d.ts.map +1 -1
- package/dist/saves.js +124 -703
- package/dist/seed.d.ts.map +1 -1
- package/dist/seed.js +4 -4
- package/dist/shown.d.ts +7 -5
- package/dist/shown.d.ts.map +1 -1
- package/dist/shown.js +75 -58
- 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.d.ts +3 -6
- package/dist/socket.d.ts.map +1 -1
- package/dist/socket.js +3 -14
- package/dist/source.d.ts +5 -7
- package/dist/source.d.ts.map +1 -1
- package/dist/source.js +13 -2
- 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 +17 -6
- package/dist/store/records.d.ts.map +1 -1
- package/dist/store/records.js +56 -22
- 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.d.ts +23 -14
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +46 -17
- package/dist/stored.d.ts +24 -13
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +80 -29
- package/dist/surface.d.ts +5 -3
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +23 -21
- package/dist/sync.d.ts +1 -1
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +89 -85
- package/dist/tables.d.ts +16 -56
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +86 -327
- package/dist/tallies.d.ts.map +1 -1
- package/dist/tallies.js +1 -2
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +4 -10
- package/dist/wire.d.ts +45 -7
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +15 -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/store.js
CHANGED
|
@@ -3,22 +3,22 @@ import { createCell } from './cell.js';
|
|
|
3
3
|
import { openedFiles } from './opened.js';
|
|
4
4
|
import { compositionOf } from './replica.js';
|
|
5
5
|
import { STARTING } from './status.js';
|
|
6
|
-
import {
|
|
7
|
-
import { createInstalls } from './store/installs.js';
|
|
6
|
+
import { createInstalls, NO_INSTALL } from './store/installs.js';
|
|
8
7
|
import { openRuntimeStore, } from './store/records.js';
|
|
9
8
|
import { createReadinessQueue } from './store/readiness.js';
|
|
10
9
|
import { createRoomHeld } from './store/room-held.js';
|
|
10
|
+
import { createRoomsShown } from './store/rooms-shown.js';
|
|
11
11
|
import { createSpace } from './store/space.js';
|
|
12
12
|
import { createWatchers } from './store/watchers.js';
|
|
13
13
|
import { createWrites } from './store/writes.js';
|
|
14
|
-
|
|
14
|
+
const OPENING = 'store';
|
|
15
15
|
export function createStore(options) {
|
|
16
16
|
const writes = createWrites();
|
|
17
17
|
const watchers = createWatchers(options.unpublished);
|
|
18
|
-
const
|
|
18
|
+
const { lost } = options;
|
|
19
19
|
const installs = createInstalls();
|
|
20
20
|
const seeds = new Map();
|
|
21
|
-
const
|
|
21
|
+
const conflicted = createRoomHeld();
|
|
22
22
|
const attached = createRoomHeld();
|
|
23
23
|
const typesHeld = new Map();
|
|
24
24
|
const device = createCell({
|
|
@@ -28,20 +28,32 @@ export function createStore(options) {
|
|
|
28
28
|
preparing: false,
|
|
29
29
|
sweeping: false,
|
|
30
30
|
unpreparedDemand: new Set(),
|
|
31
|
+
unpreparable: new Set(),
|
|
31
32
|
establishing: new Set(),
|
|
32
33
|
status: STARTING,
|
|
33
|
-
roomsShown: null,
|
|
34
34
|
});
|
|
35
35
|
const space = createSpace(options.database, options.spaceFreed);
|
|
36
36
|
const readiness = createReadinessQueue(options.deliverReadiness, options.unpublished);
|
|
37
37
|
let opening;
|
|
38
38
|
function open() {
|
|
39
|
-
opening ??= options.opening(openRuntimeStore(options.database)).
|
|
39
|
+
opening ??= options.opening(openRuntimeStore(options.database)).then((opened) => {
|
|
40
|
+
options.retries.succeeded('database', OPENING);
|
|
41
|
+
return opened;
|
|
42
|
+
}, (error) => {
|
|
40
43
|
opening = undefined;
|
|
44
|
+
options.retries.failed('database', OPENING, error);
|
|
41
45
|
throw error;
|
|
42
46
|
});
|
|
43
47
|
return opening;
|
|
44
48
|
}
|
|
49
|
+
function prepareAgain(locator) {
|
|
50
|
+
const { unpreparable } = device.now();
|
|
51
|
+
device.set({
|
|
52
|
+
unpreparable: locator === undefined
|
|
53
|
+
? new Set()
|
|
54
|
+
: new Set([...unpreparable].filter((held) => held !== locator)),
|
|
55
|
+
});
|
|
56
|
+
}
|
|
45
57
|
function typed(locator, persisted) {
|
|
46
58
|
if (persisted.status === 'unavailable')
|
|
47
59
|
return persisted;
|
|
@@ -59,14 +71,14 @@ export function createStore(options) {
|
|
|
59
71
|
async function rooms(locators) {
|
|
60
72
|
const held = await (await open()).rooms(locators);
|
|
61
73
|
return new Map(held
|
|
62
|
-
.filter(({ record }) => !
|
|
74
|
+
.filter(({ record }) => !lost(record.locator))
|
|
63
75
|
.map(({ record, indexed, documents }) => [
|
|
64
76
|
record.locator,
|
|
65
77
|
{ record: recordOf(record), indexed, documents },
|
|
66
78
|
]));
|
|
67
79
|
}
|
|
68
80
|
async function work(locator) {
|
|
69
|
-
if (
|
|
81
|
+
if (lost(locator))
|
|
70
82
|
return { replica: undefined, queue: [], states: new Map() };
|
|
71
83
|
const { room, queue } = await (await open()).room(locator);
|
|
72
84
|
const batches = queue.map(({ batch }) => batch);
|
|
@@ -81,10 +93,11 @@ export function createStore(options) {
|
|
|
81
93
|
}
|
|
82
94
|
async function drafts(locator, paths) {
|
|
83
95
|
const held = await (await open()).roomDrafts(locator, paths);
|
|
84
|
-
return held.filter((record) => !
|
|
96
|
+
return held.filter((record) => !lost(record.locator));
|
|
85
97
|
}
|
|
86
98
|
return {
|
|
87
99
|
device,
|
|
100
|
+
roomsShown: createRoomsShown(),
|
|
88
101
|
space,
|
|
89
102
|
readiness,
|
|
90
103
|
ask: options.database.ask,
|
|
@@ -110,20 +123,33 @@ export function createStore(options) {
|
|
|
110
123
|
replica: async (locator) => (await work(locator)).replica,
|
|
111
124
|
async covering() {
|
|
112
125
|
const held = await (await open()).covering();
|
|
126
|
+
if (!options.losing())
|
|
127
|
+
return held;
|
|
128
|
+
return {
|
|
129
|
+
rooms: new Map([...held.rooms].filter(([locator]) => !lost(locator))),
|
|
130
|
+
locking: new Set([...held.locking].filter((locator) => !lost(locator))),
|
|
131
|
+
queues: new Map([...held.queues].filter(([locator]) => !lost(locator))),
|
|
132
|
+
};
|
|
133
|
+
},
|
|
134
|
+
async status() {
|
|
135
|
+
const held = await (await open()).status();
|
|
113
136
|
return {
|
|
114
|
-
|
|
115
|
-
|
|
137
|
+
queued: held.queued.filter((locator) => !lost(locator)),
|
|
138
|
+
lastCompleted: held.lastCompleted,
|
|
139
|
+
unsent: held.unsent.filter(({ room }) => !lost(room)),
|
|
140
|
+
resets: held.resets.filter(({ locator }) => !lost(locator)),
|
|
141
|
+
returned: held.returned.filter(({ locator }) => !lost(locator)),
|
|
116
142
|
};
|
|
117
143
|
},
|
|
144
|
+
queued: async () => (await (await open()).queued()).filter((locator) => !lost(locator)),
|
|
118
145
|
drafts,
|
|
119
146
|
draft: async (locator, path) => (await drafts(locator, [path]))[0],
|
|
120
|
-
composed: (
|
|
147
|
+
composed: ({ model, declaration }) => compositionOf(model, declaration.typedSelection, options.builtIn, options.typedPaths),
|
|
121
148
|
publication: watchers.publication,
|
|
122
149
|
owing: watchers.owing,
|
|
123
150
|
watch: watchers.watch,
|
|
124
151
|
watching: watchers.watching,
|
|
125
152
|
tell: watchers.tell,
|
|
126
|
-
fences,
|
|
127
153
|
installs,
|
|
128
154
|
seeds: {
|
|
129
155
|
of: (key) => seeds.get(key),
|
|
@@ -134,14 +160,17 @@ export function createStore(options) {
|
|
|
134
160
|
seeds.delete(key);
|
|
135
161
|
},
|
|
136
162
|
},
|
|
137
|
-
|
|
163
|
+
conflicted,
|
|
138
164
|
attached,
|
|
139
|
-
opened: openedFiles(options.database,
|
|
165
|
+
opened: openedFiles(options.database, lost),
|
|
166
|
+
prepareAgain,
|
|
140
167
|
part: (file, part) => options.database.ask({ kind: 'file.part', key: file, part }),
|
|
141
168
|
forget(locator) {
|
|
142
169
|
typesHeld.delete(locator);
|
|
143
|
-
|
|
170
|
+
conflicted.forget(locator);
|
|
144
171
|
attached.forget(locator);
|
|
172
|
+
installs.change(locator, ({ installing }) => ({ ...NO_INSTALL, installing }));
|
|
173
|
+
prepareAgain(locator);
|
|
145
174
|
},
|
|
146
175
|
close() {
|
|
147
176
|
space.stop();
|
package/dist/stored.d.ts
CHANGED
|
@@ -47,17 +47,27 @@ export type HeldRoomWork = {
|
|
|
47
47
|
readonly state: string;
|
|
48
48
|
}[];
|
|
49
49
|
};
|
|
50
|
-
export type
|
|
51
|
-
readonly
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
50
|
+
export type CoverLog = {
|
|
51
|
+
readonly token: string;
|
|
52
|
+
readonly at: number;
|
|
53
|
+
};
|
|
54
|
+
export type CoveredRow = {
|
|
55
|
+
readonly locator: string;
|
|
56
|
+
readonly key: number;
|
|
57
|
+
readonly transfer: string;
|
|
58
|
+
readonly roomVersion: string;
|
|
59
|
+
readonly indexed: boolean;
|
|
60
|
+
readonly documents: number;
|
|
61
|
+
readonly bytes: number;
|
|
62
|
+
readonly offline: string;
|
|
63
|
+
};
|
|
64
|
+
export type CoveredRooms = {
|
|
65
|
+
readonly log: CoverLog;
|
|
66
|
+
readonly whole: boolean;
|
|
67
|
+
readonly rooms: readonly CoveredRow[];
|
|
68
|
+
readonly removed: readonly string[];
|
|
69
|
+
};
|
|
70
|
+
export type Covering = CoveredRooms & {
|
|
61
71
|
readonly queues: readonly {
|
|
62
72
|
readonly locator: string;
|
|
63
73
|
readonly ids: readonly string[];
|
|
@@ -145,12 +155,13 @@ export declare function opened(connection: Connection): ReplicaOpened;
|
|
|
145
155
|
export declare function heldRooms(connection: Connection, locators: readonly string[] | null): readonly HeldRoomRow[];
|
|
146
156
|
export declare function heldRoom(connection: Connection, locator: string): HeldRoomRow | null;
|
|
147
157
|
export declare function overlaid(connection: Connection, key: number): readonly string[];
|
|
148
|
-
export declare function covering(connection: Connection):
|
|
158
|
+
export declare function covering(connection: Connection, since: CoverLog | null): CoveredRooms;
|
|
149
159
|
export declare function offlineMode(connection: Connection, locator: string): string | null;
|
|
150
160
|
export declare function stagedLocators(connection: Connection): readonly string[];
|
|
151
161
|
export declare function heldLocators(connection: Connection): readonly string[];
|
|
152
162
|
export declare function demoted(connection: Connection): null;
|
|
153
|
-
export declare function facts(connection: Connection): Readonly<Record<string, string>>;
|
|
163
|
+
export declare function facts(connection: Connection, names: readonly string[] | null): Readonly<Record<string, string>>;
|
|
154
164
|
export declare function presentation(connection: Connection, app: string): string | null;
|
|
165
|
+
export declare function tablesOf(statements: readonly string[]): readonly string[];
|
|
155
166
|
export declare function ended(connection: Connection): void;
|
|
156
167
|
//# sourceMappingURL=stored.d.ts.map
|
package/dist/stored.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stored.d.ts","sourceRoot":"","sources":["../src/stored.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"stored.d.ts","sourceRoot":"","sources":["../src/stored.ts"],"names":[],"mappings":"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"}
|
package/dist/stored.js
CHANGED
|
@@ -3,14 +3,16 @@ import { composedOf } from './collection.js';
|
|
|
3
3
|
import { described, derived, heldOf } from './rows.js';
|
|
4
4
|
export const REPLICA_TABLES = [
|
|
5
5
|
'CREATE TABLE replica_keys (key INTEGER PRIMARY KEY AUTOINCREMENT, locator TEXT NOT NULL, transfer TEXT NOT NULL, fingerprint TEXT NOT NULL, rederiving INTEGER)',
|
|
6
|
+
'CREATE INDEX replica_keys_locator ON replica_keys (locator)',
|
|
6
7
|
'CREATE TABLE replica_rooms (locator TEXT PRIMARY KEY, key INTEGER NOT NULL, record TEXT NOT NULL, documents INTEGER NOT NULL DEFAULT 0) WITHOUT ROWID',
|
|
8
|
+
'CREATE INDEX replica_rooms_key ON replica_rooms (key)',
|
|
7
9
|
"CREATE INDEX replica_rooms_model ON replica_rooms (json_extract(record, '$.model.snapshot.identity'), json_extract(record, '$.model.snapshot.version'))",
|
|
8
10
|
'CREATE TABLE replica_models (identity TEXT NOT NULL, version TEXT NOT NULL, schema TEXT NOT NULL, PRIMARY KEY (identity, version)) WITHOUT ROWID',
|
|
9
|
-
"CREATE TABLE replica_entries (id INTEGER PRIMARY KEY, key INTEGER NOT NULL, layer INTEGER NOT NULL, path TEXT NOT NULL, visible INTEGER NOT NULL, present INTEGER NOT NULL,
|
|
11
|
+
"CREATE TABLE replica_entries (id INTEGER PRIMARY KEY, key INTEGER NOT NULL, layer INTEGER NOT NULL, path TEXT NOT NULL, visible INTEGER NOT NULL, present INTEGER NOT NULL, binary TEXT, revision TEXT, file_id TEXT, change TEXT, written TEXT, type TEXT, declared TEXT, folder TEXT NOT NULL, fields TEXT, links TEXT, part TEXT, created TEXT, created_instant TEXT, changed_instant TEXT, bytes INTEGER GENERATED ALWAYS AS (CASE WHEN binary IS NULL THEN length(CAST(content AS BLOB)) ELSE binary ->> '$.byteLength' END) STORED, content TEXT)",
|
|
10
12
|
'CREATE UNIQUE INDEX replica_entries_path ON replica_entries (key, layer, path)',
|
|
11
13
|
'CREATE INDEX replica_entries_visible ON replica_entries (key, visible, present, path, binary)',
|
|
12
14
|
'CREATE INDEX replica_entries_folder ON replica_entries (key, folder, path)',
|
|
13
|
-
'CREATE INDEX replica_entries_type ON replica_entries (key, type, visible, present,
|
|
15
|
+
'CREATE INDEX replica_entries_type ON replica_entries (key, type, visible, present, folder)',
|
|
14
16
|
'CREATE INDEX replica_entries_key ON replica_entries (key)',
|
|
15
17
|
sql.VALUE_TABLE,
|
|
16
18
|
'CREATE TABLE replica_links (doc INTEGER NOT NULL, key INTEGER NOT NULL, kind TEXT NOT NULL, keys TEXT NOT NULL, places TEXT NOT NULL, target TEXT NOT NULL, field TEXT NOT NULL, PRIMARY KEY (doc, kind, keys, places, target)) WITHOUT ROWID',
|
|
@@ -28,7 +30,6 @@ const ENTRY_WEIGHT = 256;
|
|
|
28
30
|
const ABSENT = {
|
|
29
31
|
type: null,
|
|
30
32
|
declared: null,
|
|
31
|
-
queried: false,
|
|
32
33
|
folder: '',
|
|
33
34
|
fields: null,
|
|
34
35
|
links: null,
|
|
@@ -78,13 +79,12 @@ function removeEntry(connection, key, layer, path) {
|
|
|
78
79
|
connection.run('DELETE FROM replica_entries WHERE id = ?', [id]);
|
|
79
80
|
}
|
|
80
81
|
function insertEntry(connection, key, layer, entry, present, made, part = null) {
|
|
81
|
-
connection.run('INSERT INTO replica_entries (key, layer, path, visible, present,
|
|
82
|
+
connection.run('INSERT INTO replica_entries (key, layer, path, visible, present, content, binary, revision, file_id, created, created_instant, change, changed_instant, written, type, declared, folder, fields, links, part) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', [
|
|
82
83
|
key,
|
|
83
84
|
layer,
|
|
84
85
|
entry.path,
|
|
85
86
|
flag(present && layer !== REFRESHED),
|
|
86
87
|
flag(present),
|
|
87
|
-
flag(made.queried),
|
|
88
88
|
entry.binary === null ? entry.content : null,
|
|
89
89
|
entry.binary === null ? null : JSON.stringify(entry.binary),
|
|
90
90
|
entry.revision,
|
|
@@ -215,7 +215,7 @@ export function resume(connection, request) {
|
|
|
215
215
|
if (copied.length > 0) {
|
|
216
216
|
owing(connection, key);
|
|
217
217
|
const named = JSON.stringify(copied);
|
|
218
|
-
connection.run(`INSERT INTO replica_entries (key, layer, path, visible, present,
|
|
218
|
+
connection.run(`INSERT INTO replica_entries (key, layer, path, visible, present, content, binary, revision, file_id, created, created_instant, change, changed_instant, written, type, declared, folder, fields, links, part) SELECT ?, ${CONFIRMED}, path, 1, 1, content, binary, revision, file_id, created, created_instant, change, changed_instant, written, type, declared, folder, fields, links, part FROM replica_entries WHERE key = ? AND layer = ${CONFIRMED} AND present = 1 AND part IN (SELECT value FROM json_each(?)) ORDER BY path`, [key, request.published, named]);
|
|
219
219
|
connection.run(`INSERT OR REPLACE INTO replica_folders (key, layer, path, present, part) SELECT ?, ${CONFIRMED}, path, 1, part FROM replica_folders WHERE key = ? AND layer = ${CONFIRMED} AND present = 1 AND part IN (SELECT value FROM json_each(?))`, [key, request.published, named]);
|
|
220
220
|
}
|
|
221
221
|
return { key, transfer: held?.transfer ?? request.transfer, staged: [...kept, ...copied] };
|
|
@@ -393,7 +393,7 @@ export function commit(connection, rooms) {
|
|
|
393
393
|
function rootsOf(connection, locator) {
|
|
394
394
|
const [row] = connection.rows('SELECT record FROM replica_rooms WHERE locator = ?', [locator]);
|
|
395
395
|
const record = json(row?.record);
|
|
396
|
-
return record?.typedSelection?.roots ?? [];
|
|
396
|
+
return record?.declaration.typedSelection?.roots ?? [];
|
|
397
397
|
}
|
|
398
398
|
export function fenceRooms(connection, locators) {
|
|
399
399
|
for (const locator of locators) {
|
|
@@ -590,15 +590,33 @@ export function overlaid(connection, key) {
|
|
|
590
590
|
.rows(`SELECT path FROM replica_entries WHERE key = ? AND layer = ${OVERLAY}`, [key])
|
|
591
591
|
.map((row) => text(row.path));
|
|
592
592
|
}
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
593
|
+
const COVER_ROWS = `SELECT r.locator, r.key, r.documents, json_extract(r.record, '$.transfer') AS transfer,
|
|
594
|
+
json_extract(r.record, '$.roomVersion') AS room_version,
|
|
595
|
+
coalesce(json_extract(r.record, '$.inventory.bytes'), 0) AS bytes,
|
|
596
|
+
json_extract(r.record, '$.declaration.replica.offline') AS offline,
|
|
597
|
+
k.rederiving IS NULL AS indexed
|
|
598
|
+
FROM replica_rooms r LEFT JOIN replica_keys k ON k.key = r.key`;
|
|
599
|
+
const COVER_MARK = `UPDATE cover_clock SET at = at + 1;
|
|
600
|
+
INSERT OR REPLACE INTO cover_changes (locator, at) SELECT`;
|
|
601
|
+
const COVER_LOG = [
|
|
602
|
+
'CREATE TEMP TABLE cover_clock (token TEXT NOT NULL, at INTEGER NOT NULL)',
|
|
603
|
+
'CREATE TEMP TABLE cover_changes (locator TEXT PRIMARY KEY, at INTEGER NOT NULL) WITHOUT ROWID',
|
|
604
|
+
'CREATE INDEX temp.cover_changes_at ON cover_changes (at)',
|
|
605
|
+
'INSERT INTO temp.cover_clock (token, at) VALUES (lower(hex(randomblob(8))), 0)',
|
|
606
|
+
`CREATE TEMP TRIGGER cover_room_added AFTER INSERT ON replica_rooms BEGIN
|
|
607
|
+
${COVER_MARK} NEW.locator, at FROM cover_clock; END`,
|
|
608
|
+
`CREATE TEMP TRIGGER cover_room_changed AFTER UPDATE ON replica_rooms BEGIN
|
|
609
|
+
${COVER_MARK} OLD.locator, at FROM cover_clock;
|
|
610
|
+
INSERT OR REPLACE INTO cover_changes (locator, at) SELECT NEW.locator, at FROM cover_clock; END`,
|
|
611
|
+
`CREATE TEMP TRIGGER cover_room_removed AFTER DELETE ON replica_rooms BEGIN
|
|
612
|
+
${COVER_MARK} OLD.locator, at FROM cover_clock; END`,
|
|
613
|
+
`CREATE TEMP TRIGGER cover_key_changed AFTER UPDATE OF rederiving ON replica_keys BEGIN
|
|
614
|
+
${COVER_MARK} r.locator, c.at FROM replica_rooms r, cover_clock c WHERE r.key = NEW.key; END`,
|
|
615
|
+
`CREATE TEMP TRIGGER cover_key_removed AFTER DELETE ON replica_keys BEGIN
|
|
616
|
+
${COVER_MARK} r.locator, c.at FROM replica_rooms r, cover_clock c WHERE r.key = OLD.key; END`,
|
|
617
|
+
];
|
|
618
|
+
function coveredRow(row) {
|
|
619
|
+
return {
|
|
602
620
|
locator: text(row.locator),
|
|
603
621
|
key: number(row.key),
|
|
604
622
|
transfer: text(row.transfer),
|
|
@@ -607,10 +625,44 @@ export function covering(connection) {
|
|
|
607
625
|
documents: number(row.documents),
|
|
608
626
|
bytes: number(row.bytes),
|
|
609
627
|
offline: text(row.offline),
|
|
610
|
-
}
|
|
628
|
+
};
|
|
629
|
+
}
|
|
630
|
+
function coverLog(connection) {
|
|
631
|
+
const logged = connection.rows("SELECT 1 FROM sqlite_temp_schema WHERE type = 'table' AND name = 'cover_clock'");
|
|
632
|
+
if (logged.length === 0)
|
|
633
|
+
return null;
|
|
634
|
+
const [clock] = connection.rows('SELECT token, at FROM temp.cover_clock');
|
|
635
|
+
return { token: text(clock.token), at: number(clock.at) };
|
|
636
|
+
}
|
|
637
|
+
export function covering(connection, since) {
|
|
638
|
+
let log = coverLog(connection);
|
|
639
|
+
if (log === null) {
|
|
640
|
+
for (const statement of COVER_LOG)
|
|
641
|
+
connection.run(statement);
|
|
642
|
+
log = coverLog(connection);
|
|
643
|
+
}
|
|
644
|
+
if (since === null || since.token !== log.token) {
|
|
645
|
+
return {
|
|
646
|
+
log,
|
|
647
|
+
whole: true,
|
|
648
|
+
rooms: connection.rows(`${COVER_ROWS} ORDER BY r.locator`).map(coveredRow),
|
|
649
|
+
removed: [],
|
|
650
|
+
};
|
|
651
|
+
}
|
|
652
|
+
return {
|
|
653
|
+
log,
|
|
654
|
+
whole: false,
|
|
655
|
+
rooms: connection
|
|
656
|
+
.rows(`${COVER_ROWS} WHERE r.locator IN (SELECT locator FROM temp.cover_changes WHERE at > ?) ORDER BY r.locator`, [since.at])
|
|
657
|
+
.map(coveredRow),
|
|
658
|
+
removed: connection
|
|
659
|
+
.rows(`SELECT c.locator FROM temp.cover_changes c WHERE c.at > ?
|
|
660
|
+
AND NOT EXISTS (SELECT 1 FROM replica_rooms r WHERE r.locator = c.locator)`, [since.at])
|
|
661
|
+
.map((row) => text(row.locator)),
|
|
662
|
+
};
|
|
611
663
|
}
|
|
612
664
|
export function offlineMode(connection, locator) {
|
|
613
|
-
const [held] = connection.rows("SELECT json_extract(record, '$.replica.offline') AS offline FROM replica_rooms WHERE locator = ?", [locator]);
|
|
665
|
+
const [held] = connection.rows("SELECT json_extract(record, '$.declaration.replica.offline') AS offline FROM replica_rooms WHERE locator = ?", [locator]);
|
|
614
666
|
return text(held?.offline);
|
|
615
667
|
}
|
|
616
668
|
export function stagedLocators(connection) {
|
|
@@ -618,10 +670,7 @@ export function stagedLocators(connection) {
|
|
|
618
670
|
}
|
|
619
671
|
export function heldLocators(connection) {
|
|
620
672
|
return connection
|
|
621
|
-
.rows(`SELECT locator FROM replica_rooms
|
|
622
|
-
UNION SELECT locator FROM authored_room_drafts
|
|
623
|
-
UNION SELECT locator FROM authored_queues
|
|
624
|
-
UNION ${STAGED}`)
|
|
673
|
+
.rows(`SELECT locator FROM replica_rooms UNION ${STAGED}`)
|
|
625
674
|
.map((row) => text(row.locator));
|
|
626
675
|
}
|
|
627
676
|
export function demoted(connection) {
|
|
@@ -629,9 +678,11 @@ export function demoted(connection) {
|
|
|
629
678
|
WHERE json_extract(record, '$.model.status') = 'current'`);
|
|
630
679
|
return null;
|
|
631
680
|
}
|
|
632
|
-
export function facts(connection) {
|
|
681
|
+
export function facts(connection, names) {
|
|
633
682
|
const held = {};
|
|
634
|
-
for (const row of
|
|
683
|
+
for (const row of names === null
|
|
684
|
+
? connection.rows('SELECT name, value FROM replica_facts')
|
|
685
|
+
: connection.rows('SELECT name, value FROM replica_facts WHERE name IN (SELECT value FROM json_each(?))', [JSON.stringify(names)])) {
|
|
635
686
|
held[text(row.name)] = text(row.value);
|
|
636
687
|
}
|
|
637
688
|
return held;
|
|
@@ -640,10 +691,10 @@ export function presentation(connection, app) {
|
|
|
640
691
|
const [held] = connection.rows('SELECT value FROM replica_presentation WHERE app = ?', [app]);
|
|
641
692
|
return text(held?.value);
|
|
642
693
|
}
|
|
694
|
+
export function tablesOf(statements) {
|
|
695
|
+
return statements.flatMap((statement) => /^CREATE TABLE (\w+)/u.exec(statement)?.[1] ?? []);
|
|
696
|
+
}
|
|
643
697
|
export function ended(connection) {
|
|
644
|
-
for (const
|
|
645
|
-
|
|
646
|
-
if (table !== undefined)
|
|
647
|
-
connection.run(`DELETE FROM ${table}`);
|
|
648
|
-
}
|
|
698
|
+
for (const table of tablesOf(REPLICA_TABLES))
|
|
699
|
+
connection.run(`DELETE FROM ${table}`);
|
|
649
700
|
}
|
package/dist/surface.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { DocumentQuery, GroupQuery } from '@agentshouse/mdmodel';
|
|
2
2
|
import { type HistoryQuery } from './actions.js';
|
|
3
|
-
import type { Member, ServiceMode } from './adapter.js';
|
|
3
|
+
import type { ListedAgent, Member, RoomList, ServiceMode } from './adapter.js';
|
|
4
4
|
import type { WrittenBy } from './change.js';
|
|
5
5
|
import { type ChatDraftSurface, type ConversationEntry, type ConversationAgent, type ConversationOptions, type ConversationSurface, type ConversationView } from './conversation.js';
|
|
6
6
|
import type { UnsentWork } from './durability.js';
|
|
@@ -46,8 +46,8 @@ export type MdRuntime = {
|
|
|
46
46
|
resolve(room: string, path: string, destination: string): Promise<Resolution>;
|
|
47
47
|
binaryFile: BinaryFileSurface;
|
|
48
48
|
call(name: string, input: unknown): Promise<CallResult>;
|
|
49
|
+
answered(operation: string): Promise<boolean>;
|
|
49
50
|
reached(locator: string, roomVersion: string, path?: string): Promise<boolean>;
|
|
50
|
-
log(): string;
|
|
51
51
|
persistence(): boolean;
|
|
52
52
|
retry(): Promise<void>;
|
|
53
53
|
cleanUp(): Promise<number>;
|
|
@@ -71,13 +71,15 @@ export type MdRuntime = {
|
|
|
71
71
|
(topic: 'conversation', conversation: string, options: ConversationOptions): Promise<Observation<ConversationView>>;
|
|
72
72
|
(topic: 'conversations'): Promise<Observation<readonly ConversationEntry[]>>;
|
|
73
73
|
(topic: 'agents'): Promise<Observation<readonly ConversationAgent[]>>;
|
|
74
|
+
(topic: 'listed-agents'): Promise<Observation<readonly ListedAgent[]>>;
|
|
75
|
+
(topic: 'room-list'): Promise<Observation<RoomList | null>>;
|
|
74
76
|
(topic: 'figures'): Promise<Observation<FiguresResult>>;
|
|
75
77
|
(topic: 'holdings'): Promise<Observation<Holdings>>;
|
|
76
78
|
(topic: 'read', name: string, input: unknown): Promise<Observation<ObservedRead>>;
|
|
77
79
|
};
|
|
78
80
|
reauthorize(): Promise<void>;
|
|
79
81
|
};
|
|
80
|
-
export type RuntimeTopic = 'rooms' | 'readiness' | 'connection-refusal' | 'storage-loss' | 'sync-status' | 'service-mode' | 'member' | 'authority-changes' | 'query' | 'queue' | 'room-drafts' | 'presentation' | 'conversation' | 'conversations' | 'agents' | 'figures' | 'holdings' | 'read';
|
|
82
|
+
export type RuntimeTopic = 'rooms' | 'readiness' | 'connection-refusal' | 'storage-loss' | 'sync-status' | 'service-mode' | 'member' | 'authority-changes' | 'query' | 'queue' | 'room-drafts' | 'presentation' | 'conversation' | 'conversations' | 'agents' | 'listed-agents' | 'room-list' | 'figures' | 'holdings' | 'read';
|
|
81
83
|
export type ComposedRuntime = RuntimeView & {
|
|
82
84
|
seed(entry: EntrySeed): void;
|
|
83
85
|
stop(): Promise<void>;
|
package/dist/surface.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,
|
|
1
|
+
{"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"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"}
|
package/dist/surface.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { called, located, readHistory, resolveReference } from './actions.js';
|
|
2
|
-
import { chatDraftSurface, conversationSurface, watchConversation, watchConversationAgents, watchConversationList, } from './conversation.js';
|
|
1
|
+
import { answeredCall, called, located, readHistory, resolveReference, } from './actions.js';
|
|
2
|
+
import { chatDraftSurface, conversationSurface, watchConversation, watchConversationAgents, watchListedAgents, watchConversationList, } from './conversation.js';
|
|
3
|
+
import { uncaught } from './failure.js';
|
|
4
|
+
import { watchRoomList } from './room-list.js';
|
|
3
5
|
import { CLEANED_TOPIC, watchHoldings } from './holdings.js';
|
|
4
6
|
import { reachedBy, writtenAfter } from './install.js';
|
|
5
7
|
import { declarationOf, listingNow, modelIn, shownRooms } from './listing.js';
|
|
6
8
|
import { stop } from './lifecycle.js';
|
|
7
9
|
import { locked, lockedRooms, watchLocks } from './locks.js';
|
|
8
|
-
import { modelTypes
|
|
10
|
+
import { modelTypes } from './model.js';
|
|
9
11
|
import { observing } from './observation.js';
|
|
10
12
|
import { watchReadiness } from './preparation.js';
|
|
11
13
|
import { planned, rowsQuery, searched, watchPlan, watchPlanned } from './queries.js';
|
|
@@ -13,7 +15,7 @@ import { narrowed, } from './reach.js';
|
|
|
13
15
|
import { presentationSurface, roomDraftSurface, watchPresentation, watchRoomDrafts, } from './room-drafts.js';
|
|
14
16
|
import { binaryFileSurface, saveParts, saveRoomDrafts, } from './saves.js';
|
|
15
17
|
import { keepEntrySeed } from './seed.js';
|
|
16
|
-
import { AUTHORITY_TOPIC, emitKnownRooms, entriesOf, MEMBER_TOPIC, queueTopic, REFUSAL_TOPIC, ROOMS_TOPIC, SERVICE_MODE_TOPIC, STATUS_TOPIC, STORAGE_LOSS_TOPIC, } from './shown.js';
|
|
18
|
+
import { AUTHORITY_TOPIC, emitKnownRooms, emitStorageLoss, entriesOf, MEMBER_TOPIC, queueTopic, REFUSAL_TOPIC, ROOMS_TOPIC, SERVICE_MODE_TOPIC, STATUS_TOPIC, STORAGE_LOSS_TOPIC, storageLossNow, } from './shown.js';
|
|
17
19
|
import { OPENING_LANE, sync } from './sync.js';
|
|
18
20
|
function told(store, topic, deliver, current) {
|
|
19
21
|
const watcher = store.watch(topic, deliver);
|
|
@@ -27,7 +29,7 @@ function watchRooms(runtime, deliver) {
|
|
|
27
29
|
return () => {
|
|
28
30
|
watcher.stop();
|
|
29
31
|
if (store.watching(ROOMS_TOPIC, 'ready').length === 0)
|
|
30
|
-
store.
|
|
32
|
+
store.roomsShown.show(null);
|
|
31
33
|
};
|
|
32
34
|
}
|
|
33
35
|
function watchMember({ store }, deliver) {
|
|
@@ -38,7 +40,7 @@ function watchMember({ store }, deliver) {
|
|
|
38
40
|
.then(({ member }) => {
|
|
39
41
|
if (watcher.held())
|
|
40
42
|
deliver(member);
|
|
41
|
-
},
|
|
43
|
+
}, uncaught);
|
|
42
44
|
return watcher.stop;
|
|
43
45
|
}
|
|
44
46
|
function watchQueue(runtime, locator, deliver) {
|
|
@@ -66,6 +68,10 @@ function watching(runtime) {
|
|
|
66
68
|
return watchConversationList(conversations, deliver);
|
|
67
69
|
if (topic === 'agents')
|
|
68
70
|
return watchConversationAgents(conversations, deliver);
|
|
71
|
+
if (topic === 'listed-agents')
|
|
72
|
+
return watchListedAgents(conversations, deliver);
|
|
73
|
+
if (topic === 'room-list')
|
|
74
|
+
return watchRoomList(runtime, deliver);
|
|
69
75
|
if (topic === 'figures')
|
|
70
76
|
return figures.watch(deliver, fail);
|
|
71
77
|
if (topic === 'holdings')
|
|
@@ -83,7 +89,7 @@ function watching(runtime) {
|
|
|
83
89
|
return told(store, REFUSAL_TOPIC, deliver, session.refusal);
|
|
84
90
|
}
|
|
85
91
|
if (topic === 'storage-loss') {
|
|
86
|
-
return told(store, STORAGE_LOSS_TOPIC, deliver,
|
|
92
|
+
return told(store, STORAGE_LOSS_TOPIC, deliver, storageLossNow(runtime));
|
|
87
93
|
}
|
|
88
94
|
if (topic === 'sync-status') {
|
|
89
95
|
return told(store, STATUS_TOPIC, deliver, store.device.now().status);
|
|
@@ -116,19 +122,17 @@ function roomsOnce(runtime) {
|
|
|
116
122
|
async function typesOf(runtime, locator) {
|
|
117
123
|
const { store, builtIn } = runtime;
|
|
118
124
|
const held = (await store.rooms([locator])).get(locator);
|
|
119
|
-
const
|
|
120
|
-
const room = fenced ? undefined : declarationOf(runtime, locator, held)?.room;
|
|
125
|
+
const room = declarationOf(runtime, locator, held)?.room;
|
|
121
126
|
return {
|
|
122
|
-
collection: modelTypes(
|
|
127
|
+
collection: modelTypes(modelIn(runtime, locator, held)),
|
|
123
128
|
typedSelection: (room?.typedSelection ?? null) === null ? null : modelTypes(builtIn),
|
|
124
129
|
};
|
|
125
130
|
}
|
|
126
131
|
async function reauthorized(runtime) {
|
|
127
|
-
const { store, socket
|
|
132
|
+
const { store, socket } = runtime;
|
|
128
133
|
const { refusal } = socket.session.now();
|
|
129
134
|
if (refusal === null || !refusal.reauthorizationOffered)
|
|
130
135
|
return;
|
|
131
|
-
journal.record('connection reauthorize');
|
|
132
136
|
await socket.lanes.current();
|
|
133
137
|
await store.written();
|
|
134
138
|
socket.session.set({ authorization: undefined, paused: false });
|
|
@@ -138,7 +142,7 @@ async function reauthorized(runtime) {
|
|
|
138
142
|
await socket.lanes.task(OPENING_LANE, () => socket.authorize());
|
|
139
143
|
}
|
|
140
144
|
function mdRuntime(runtime, watch) {
|
|
141
|
-
const { store, socket,
|
|
145
|
+
const { store, socket, shell, conversations, lastAnswers } = runtime;
|
|
142
146
|
return {
|
|
143
147
|
loaded: () => store.open().then(() => undefined),
|
|
144
148
|
rooms: () => roomsOnce(runtime),
|
|
@@ -149,18 +153,18 @@ function mdRuntime(runtime, watch) {
|
|
|
149
153
|
conversation: conversationSurface(conversations),
|
|
150
154
|
chatDraft: chatDraftSurface(conversations),
|
|
151
155
|
presentation: presentationSurface(runtime),
|
|
152
|
-
save: (room, named, writtenBy) =>
|
|
153
|
-
saveParts: (room, parts, writtenBy) =>
|
|
156
|
+
save: (room, named, writtenBy) => saveRoomDrafts(runtime, room, named, writtenBy),
|
|
157
|
+
saveParts: (room, parts, writtenBy) => saveParts(runtime, room, parts, writtenBy),
|
|
154
158
|
history: (locator, path, query) => readHistory(runtime, locator, path, query),
|
|
155
159
|
resolve: (room, path, destination) => resolveReference(runtime, room, path, destination),
|
|
156
160
|
binaryFile: binaryFileSurface(runtime),
|
|
157
161
|
call: (name, input) => called(runtime, name, input),
|
|
162
|
+
answered: (operation) => answeredCall(runtime, operation),
|
|
158
163
|
async reached(locator, roomVersion, path) {
|
|
159
164
|
return path === undefined
|
|
160
165
|
? reachedBy(runtime, locator, roomVersion)
|
|
161
166
|
: writtenAfter(runtime, locator, roomVersion, path);
|
|
162
167
|
},
|
|
163
|
-
log: () => journal.export(),
|
|
164
168
|
async cleanUp() {
|
|
165
169
|
const freed = await store.ask({ kind: 'opened.clean' });
|
|
166
170
|
const tidied = (await shell.cleanUp?.()) ?? 0;
|
|
@@ -174,8 +178,7 @@ function mdRuntime(runtime, watch) {
|
|
|
174
178
|
},
|
|
175
179
|
persistence: () => store.device.now().persistence === 'granted',
|
|
176
180
|
async retry() {
|
|
177
|
-
|
|
178
|
-
socket.rooms.standAll({ unpreparable: false });
|
|
181
|
+
store.prepareAgain();
|
|
179
182
|
store.readiness.queue();
|
|
180
183
|
if (store.space.full())
|
|
181
184
|
await store.space.probe();
|
|
@@ -185,7 +188,7 @@ function mdRuntime(runtime, watch) {
|
|
|
185
188
|
};
|
|
186
189
|
}
|
|
187
190
|
export function composedRuntime(runtime) {
|
|
188
|
-
const { store
|
|
191
|
+
const { store } = runtime;
|
|
189
192
|
const watch = watching(runtime);
|
|
190
193
|
const md = mdRuntime(runtime, watch);
|
|
191
194
|
const reachable = {
|
|
@@ -211,8 +214,7 @@ export function composedRuntime(runtime) {
|
|
|
211
214
|
if (answer === store.device.now().persistence)
|
|
212
215
|
return;
|
|
213
216
|
store.device.set({ persistence: answer });
|
|
214
|
-
|
|
215
|
-
store.readiness.queue();
|
|
217
|
+
emitStorageLoss(runtime);
|
|
216
218
|
},
|
|
217
219
|
within(reach, port) {
|
|
218
220
|
if (store.space.full())
|