@agentshouse/mdruntime 0.1.0-ca6edc1abd618 → 0.1.0-ca92b54804c33
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 +2 -2
- package/dist/adapter.d.ts +101 -70
- 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 +29 -47
- package/dist/bootstrap.d.ts +16 -14
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +272 -129
- package/dist/chain.d.ts +2 -1
- package/dist/chain.d.ts.map +1 -1
- package/dist/change.d.ts +1 -0
- package/dist/change.d.ts.map +1 -1
- package/dist/client.d.ts +13 -9
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +54 -6
- package/dist/collection.d.ts +7 -4
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +23 -17
- package/dist/compile.d.ts +1 -6
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +108 -243
- package/dist/connection.d.ts +14 -11
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +2264 -1933
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +7 -0
- package/dist/conversation.d.ts +21 -17
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +405 -253
- package/dist/durability.d.ts +6 -1
- package/dist/durability.d.ts.map +1 -1
- package/dist/entry.d.ts +3 -2
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +18 -8
- package/dist/file.d.ts +2 -11
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +6 -4
- package/dist/host.d.ts +3 -7
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +26 -29
- 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 +12 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/job.d.ts +14 -0
- package/dist/job.d.ts.map +1 -0
- package/dist/job.js +28 -0
- package/dist/live.d.ts +5 -4
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +62 -20
- 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 +12 -5
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +216 -85
- package/dist/messages.d.ts +3 -3
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +20 -19
- package/dist/model.d.ts +8 -10
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +5 -17
- package/dist/observation.d.ts +3 -2
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +8 -3
- package/dist/outcome.d.ts +13 -5
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +16 -2
- package/dist/overlay.d.ts +1 -0
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +11 -0
- package/dist/paths.d.ts +1 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +4 -0
- package/dist/query.d.ts +8 -207
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +3 -505
- package/dist/reach.d.ts +18 -11
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +195 -126
- package/dist/react.d.ts +3 -1
- package/dist/react.d.ts.map +1 -1
- package/dist/readiness.d.ts +3 -17
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +4 -10
- package/dist/recovery.d.ts +1 -0
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +35 -1
- package/dist/refresh.d.ts +7 -5
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +33 -5
- package/dist/replica.d.ts +10 -8
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +52 -20
- package/dist/room-draft.d.ts +21 -5
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +98 -51
- package/dist/rows.d.ts +18 -16
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +45 -153
- package/dist/save.d.ts +2 -0
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +22 -13
- package/dist/search.d.ts +12 -63
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +9 -52
- package/dist/shared.d.ts +0 -1
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +0 -10
- package/dist/status.d.ts +4 -5
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +3 -7
- package/dist/store.d.ts +101 -61
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +153 -161
- package/dist/stored.d.ts +66 -55
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +341 -273
- package/dist/tables.d.ts +90 -63
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +174 -98
- package/dist/transfer.d.ts +0 -5
- package/dist/transfer.d.ts.map +1 -1
- package/dist/validation.d.ts +3 -4
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +42 -100
- 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 +17 -8
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +5 -2
- package/package.json +2 -2
- 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 -368
- package/dist/reads.d.ts +0 -11
- package/dist/reads.d.ts.map +0 -1
- package/dist/reads.js +0 -100
- package/dist/words.d.ts +0 -19
- package/dist/words.d.ts.map +0 -1
- package/dist/words.js +0 -150
package/dist/tables.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
import { sql } from '@agentshouse/mdmodel';
|
|
1
2
|
import { answerQuery } from './compile.js';
|
|
2
|
-
import { searched, SEARCH_TABLES } from './fulltext.js';
|
|
3
3
|
import { droppedMessages, forgottenMessages, heldConversations, keptMessages, messageCount, messageWindow, MESSAGE_TABLES, turnArrived, } from './messages.js';
|
|
4
|
-
import { abandon, release, commit,
|
|
4
|
+
import { abandon, release, commit, covering, demoted, ended, entries, erase, facts, fenceRooms, folders, heldLocators, heldRoom, heldRooms, offlineMode, opened, overlaid, presentation, rederive, referrers, refreshing, REPLICA_TABLES, resume, stage, typed, stagedLocators, typedWithin, unrefresh, } from './stored.js';
|
|
5
5
|
const STATEMENTS_HELD = 256;
|
|
6
6
|
export function sqliteConnection(engine, database) {
|
|
7
7
|
const decoder = new TextDecoder();
|
|
8
8
|
const held = new Map();
|
|
9
|
+
database.createFunction(sql.HOLDS_PHRASE, sql.holdsPhrase, {
|
|
10
|
+
arity: 2,
|
|
11
|
+
deterministic: true,
|
|
12
|
+
});
|
|
9
13
|
function prepared(sql) {
|
|
10
14
|
if (sql.includes(';'))
|
|
11
15
|
return null;
|
|
@@ -72,7 +76,7 @@ const TABLES = [
|
|
|
72
76
|
['authored_queues', 'locator TEXT PRIMARY KEY, ids TEXT NOT NULL'],
|
|
73
77
|
[
|
|
74
78
|
'authored_pending',
|
|
75
|
-
'locator TEXT NOT NULL, id TEXT NOT NULL, batch TEXT NOT NULL, state TEXT NOT NULL, files TEXT NOT NULL, PRIMARY KEY (locator, id)',
|
|
79
|
+
'locator TEXT NOT NULL, id TEXT NOT NULL, batch TEXT NOT NULL, state TEXT NOT NULL, files TEXT NOT NULL, paths TEXT NOT NULL, moving INTEGER NOT NULL, PRIMARY KEY (locator, id)',
|
|
76
80
|
],
|
|
77
81
|
[
|
|
78
82
|
'authored_room_drafts',
|
|
@@ -89,32 +93,39 @@ export const RUNTIME_TABLES = [
|
|
|
89
93
|
'CREATE INDEX opened_files_name ON opened_files (locator, path, revision)',
|
|
90
94
|
...REPLICA_TABLES,
|
|
91
95
|
...MESSAGE_TABLES,
|
|
92
|
-
...SEARCH_TABLES,
|
|
93
96
|
];
|
|
94
97
|
const OWNERS = ['authored_pending', 'authored_room_drafts', 'authored_calls'];
|
|
95
98
|
const AUTHORED_KEYS = OWNERS.map((table) => `SELECT value FROM ${table}, json_each(${table}.files)`).join(' UNION ');
|
|
96
99
|
const UNOWNED_PARTS = `DELETE FROM file_parts WHERE key NOT IN (${AUTHORED_KEYS} UNION SELECT key FROM opened_files)`;
|
|
97
100
|
const READS = new Set([
|
|
98
|
-
'authored.
|
|
101
|
+
'authored.status',
|
|
102
|
+
'authored.moving',
|
|
103
|
+
'authored.pending',
|
|
104
|
+
'authored.batch',
|
|
105
|
+
'authored.order',
|
|
106
|
+
'authored.queued',
|
|
99
107
|
'authored.roomDrafts',
|
|
108
|
+
'authored.chatDraft.read',
|
|
100
109
|
'authored.chatDrafts',
|
|
101
110
|
'authored.calls',
|
|
102
111
|
'authored.fences',
|
|
112
|
+
'authored.unsent',
|
|
103
113
|
'authored.fact',
|
|
104
114
|
'authored.file',
|
|
105
115
|
'replica.open',
|
|
116
|
+
'replica.rooms',
|
|
117
|
+
'replica.room',
|
|
118
|
+
'replica.covering',
|
|
119
|
+
'replica.offline',
|
|
120
|
+
'replica.held',
|
|
121
|
+
'replica.facts',
|
|
122
|
+
'replica.presentation',
|
|
106
123
|
'replica.query',
|
|
107
124
|
'replica.entries',
|
|
108
125
|
'replica.typed',
|
|
109
126
|
'replica.referrers',
|
|
110
|
-
'replica.
|
|
111
|
-
'replica.files',
|
|
127
|
+
'replica.folders',
|
|
112
128
|
'replica.typedWithin',
|
|
113
|
-
'replica.counts',
|
|
114
|
-
'replica.search',
|
|
115
|
-
'replica.received',
|
|
116
|
-
'replica.receivedParts',
|
|
117
|
-
'replica.transferPart',
|
|
118
129
|
'opened.find',
|
|
119
130
|
'file.part',
|
|
120
131
|
'conversation.held',
|
|
@@ -132,19 +143,19 @@ const KINDS = new Set([
|
|
|
132
143
|
'authored.claim',
|
|
133
144
|
'authored.end',
|
|
134
145
|
'replica.stage',
|
|
135
|
-
'replica.
|
|
146
|
+
'replica.resume',
|
|
136
147
|
'replica.refresh',
|
|
137
148
|
'replica.unrefresh',
|
|
138
149
|
'replica.commit',
|
|
139
150
|
'replica.fence',
|
|
140
151
|
'replica.erase',
|
|
141
152
|
'replica.abandon',
|
|
153
|
+
'replica.unfence',
|
|
142
154
|
'replica.release',
|
|
143
155
|
'replica.rederive',
|
|
156
|
+
'replica.demote',
|
|
144
157
|
'replica.fact',
|
|
145
158
|
'replica.present',
|
|
146
|
-
'replica.receive',
|
|
147
|
-
'replica.unreceive',
|
|
148
159
|
'opened.begin',
|
|
149
160
|
'opened.part',
|
|
150
161
|
'opened.keep',
|
|
@@ -225,29 +236,71 @@ function unowned(connection) {
|
|
|
225
236
|
connection.run(UNOWNED_PARTS);
|
|
226
237
|
}
|
|
227
238
|
function queued(connection) {
|
|
239
|
+
return connection.rows('SELECT locator, ids FROM authored_queues').map((row) => ({
|
|
240
|
+
locator: text(row.locator),
|
|
241
|
+
ids: JSON.parse(text(row.ids)),
|
|
242
|
+
}));
|
|
243
|
+
}
|
|
244
|
+
function heldWork(connection, locator) {
|
|
245
|
+
const room = heldRoom(connection, locator);
|
|
246
|
+
const pending = new Map(connection
|
|
247
|
+
.rows('SELECT id, batch, state FROM authored_pending WHERE locator = ?', [locator])
|
|
248
|
+
.map((row) => [
|
|
249
|
+
text(row.id),
|
|
250
|
+
{ id: text(row.id), batch: text(row.batch), state: text(row.state) },
|
|
251
|
+
]));
|
|
228
252
|
return {
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
253
|
+
room: room === null ? null : { ...room, overlaid: overlaid(connection, room.key) },
|
|
254
|
+
queue: heldOrder(connection, locator).map((id) => {
|
|
255
|
+
const held = pending.get(id);
|
|
256
|
+
if (held === undefined)
|
|
257
|
+
throw new Error(`Missing Pending Change ${locator}/${id}`);
|
|
258
|
+
return held;
|
|
259
|
+
}),
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
function status(connection) {
|
|
263
|
+
const [completed] = connection.rows("SELECT value FROM replica_facts WHERE name = 'lastCompleted'");
|
|
264
|
+
return {
|
|
265
|
+
queued: texts(connection.rows('SELECT locator FROM authored_queues'), 'locator'),
|
|
266
|
+
lastCompleted: completed === undefined ? null : text(completed.value),
|
|
267
|
+
changes: connection
|
|
268
|
+
.rows('SELECT p.locator, c.value AS path FROM authored_pending p, json_each(p.paths) c')
|
|
269
|
+
.map((row) => ({ locator: text(row.locator), path: text(row.path) })),
|
|
270
|
+
resets: connection
|
|
271
|
+
.rows(`SELECT locator, json_extract(state, '$.submission.reset') AS reset FROM authored_pending
|
|
272
|
+
WHERE json_extract(state, '$.submission.state') = 'reset'`)
|
|
273
|
+
.map((row) => ({ locator: text(row.locator), reset: text(row.reset) })),
|
|
274
|
+
returned: texts(connection.rows(`SELECT record FROM authored_room_drafts WHERE json_type(record, '$.returned') = 'object'`), 'record'),
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
function pendingOf(connection, locator, id) {
|
|
278
|
+
const [held] = connection.rows('SELECT state FROM authored_pending WHERE locator = ? AND id = ?', [locator, id]);
|
|
279
|
+
return {
|
|
280
|
+
state: held === undefined ? null : text(held.state),
|
|
281
|
+
room: connection.rows('SELECT 1 FROM replica_rooms WHERE locator = ?', [locator]).length > 0,
|
|
241
282
|
};
|
|
242
283
|
}
|
|
284
|
+
function roomDraftRecords(connection, locator, paths) {
|
|
285
|
+
if (locator === null) {
|
|
286
|
+
return texts(connection.rows('SELECT record FROM authored_room_drafts'), 'record');
|
|
287
|
+
}
|
|
288
|
+
if (paths === null) {
|
|
289
|
+
return texts(connection.rows('SELECT record FROM authored_room_drafts WHERE locator = ?', [locator]), 'record');
|
|
290
|
+
}
|
|
291
|
+
return texts(connection.rows('SELECT record FROM authored_room_drafts WHERE locator = ? AND path IN (SELECT value FROM json_each(?))', [locator, JSON.stringify(paths)]), 'record');
|
|
292
|
+
}
|
|
293
|
+
function chatDraftRecord(connection, conversation) {
|
|
294
|
+
const [held] = connection.rows('SELECT record FROM authored_chat_drafts WHERE conversation = ?', [
|
|
295
|
+
conversation,
|
|
296
|
+
]);
|
|
297
|
+
return held === undefined ? null : text(held.record);
|
|
298
|
+
}
|
|
243
299
|
function heldOrder(connection, locator) {
|
|
244
300
|
const [held] = connection.rows('SELECT ids FROM authored_queues WHERE locator = ?', [locator]);
|
|
245
301
|
return held === undefined ? [] : JSON.parse(text(held.ids));
|
|
246
302
|
}
|
|
247
|
-
function keptRows(connection, { locator, order, added, founded, roomDrafts, consumedRoomDrafts
|
|
248
|
-
for (const { id, amendment } of amendments ?? []) {
|
|
249
|
-
amended(connection, { kind: 'authored.amend', locator, id, amendment });
|
|
250
|
-
}
|
|
303
|
+
function keptRows(connection, { locator, order, added, founded, roomDrafts, consumedRoomDrafts }) {
|
|
251
304
|
for (const path of consumedRoomDrafts ?? []) {
|
|
252
305
|
connection.run('DELETE FROM authored_room_drafts WHERE locator = ? AND path = ?', [
|
|
253
306
|
locator,
|
|
@@ -274,19 +327,26 @@ function keptRows(connection, { locator, order, added, founded, roomDrafts, cons
|
|
|
274
327
|
connection.run('DELETE FROM authored_pending WHERE locator = ? AND id = ?', [locator, id]);
|
|
275
328
|
}
|
|
276
329
|
}
|
|
277
|
-
for (const { id, batch, state, files } of added ?? []) {
|
|
330
|
+
for (const { id, batch, state, files, paths, moving } of added ?? []) {
|
|
278
331
|
if (before.has(id) || !after.has(id))
|
|
279
332
|
continue;
|
|
280
|
-
connection.run('INSERT OR REPLACE INTO authored_pending (locator, id, batch, state, files) VALUES (?, ?, ?, ?, ?)', [locator, id, batch, state, owned(files)]);
|
|
333
|
+
connection.run('INSERT OR REPLACE INTO authored_pending (locator, id, batch, state, files, paths, moving) VALUES (?, ?, ?, ?, ?, ?, ?)', [locator, id, batch, state, owned(files), JSON.stringify(paths), moving ? 1 : 0]);
|
|
281
334
|
}
|
|
282
|
-
for (const { id, batch, files } of founded ?? []) {
|
|
335
|
+
for (const { id, batch, files, paths, moving } of founded ?? []) {
|
|
283
336
|
const [held] = connection.rows('SELECT files FROM authored_pending WHERE locator = ? AND id = ?', [locator, id]);
|
|
284
337
|
if (held === undefined || !before.has(id))
|
|
285
338
|
continue;
|
|
286
|
-
connection.run('UPDATE authored_pending SET batch = ?, files = ? WHERE locator = ? AND id = ?', [
|
|
339
|
+
connection.run('UPDATE authored_pending SET batch = ?, files = ?, paths = ?, moving = ? WHERE locator = ? AND id = ?', [
|
|
340
|
+
batch,
|
|
341
|
+
owned([...JSON.parse(text(held.files)), ...files]),
|
|
342
|
+
JSON.stringify(paths),
|
|
343
|
+
moving ? 1 : 0,
|
|
344
|
+
locator,
|
|
345
|
+
id,
|
|
346
|
+
]);
|
|
287
347
|
}
|
|
288
348
|
}
|
|
289
|
-
async function kept(connection, { writes, files, whole
|
|
349
|
+
async function kept(connection, { writes, files, whole }) {
|
|
290
350
|
const refused = writes.find(({ locator }) => fenced(connection, locator));
|
|
291
351
|
if (refused !== undefined && whole)
|
|
292
352
|
return refused.locator;
|
|
@@ -295,8 +355,6 @@ async function kept(connection, { writes, files, whole, discards }) {
|
|
|
295
355
|
if (!fenced(connection, write.locator))
|
|
296
356
|
keptRows(connection, write);
|
|
297
357
|
}
|
|
298
|
-
for (const locator of discards ?? [])
|
|
299
|
-
roomWork(connection, locator);
|
|
300
358
|
unowned(connection);
|
|
301
359
|
return refused?.locator ?? null;
|
|
302
360
|
}
|
|
@@ -366,11 +424,15 @@ function fence(connection, locators) {
|
|
|
366
424
|
return fenceRooms(connection, locators);
|
|
367
425
|
}
|
|
368
426
|
function erased(connection, { locator, limit }) {
|
|
369
|
-
|
|
370
|
-
|
|
427
|
+
return erase(connection, locator, limit);
|
|
428
|
+
}
|
|
429
|
+
function unfenced(connection, locators) {
|
|
430
|
+
const erased = locators.filter((locator) => connection.rows('SELECT 1 FROM replica_erasing WHERE locator = ? LIMIT 1', [locator])
|
|
431
|
+
.length === 0);
|
|
432
|
+
for (const locator of erased) {
|
|
371
433
|
connection.run('DELETE FROM authored_fences WHERE locator = ?', [locator]);
|
|
372
434
|
}
|
|
373
|
-
return
|
|
435
|
+
return erased;
|
|
374
436
|
}
|
|
375
437
|
function claim(connection, holder) {
|
|
376
438
|
const held = fact(connection, 'holder');
|
|
@@ -449,6 +511,16 @@ function keptOpened(connection, { key, sha256, byteLength, parts }) {
|
|
|
449
511
|
unowned(connection);
|
|
450
512
|
return true;
|
|
451
513
|
}
|
|
514
|
+
const UNSENT = [
|
|
515
|
+
['pending-change', 'authored_pending'],
|
|
516
|
+
['call', 'authored_calls'],
|
|
517
|
+
['room-draft', 'authored_room_drafts'],
|
|
518
|
+
['chat-draft', 'authored_chat_drafts'],
|
|
519
|
+
];
|
|
520
|
+
function unsent(connection) {
|
|
521
|
+
const [held] = connection.rows(`SELECT ${UNSENT.map(([kind, table]) => `(SELECT count(*) FROM ${table}) AS "${kind}"`).join(', ')}`);
|
|
522
|
+
return UNSENT.map(([kind]) => ({ kind, count: count(held?.[kind]) })).filter((work) => work.count > 0);
|
|
523
|
+
}
|
|
452
524
|
function cleaned(connection) {
|
|
453
525
|
connection.run('DELETE FROM opened_files');
|
|
454
526
|
const [freed] = connection.rows(`SELECT coalesce(sum(length(bytes)), 0) AS bytes FROM file_parts WHERE key NOT IN (${AUTHORED_KEYS})`);
|
|
@@ -458,47 +530,51 @@ function cleaned(connection) {
|
|
|
458
530
|
async function committed(connection, { authored, rooms }) {
|
|
459
531
|
const refused = authored === undefined ? null : await kept(connection, authored);
|
|
460
532
|
if (refused !== null && authored?.whole === true) {
|
|
461
|
-
return { fenced: refused,
|
|
533
|
+
return { fenced: refused, changed: {}, indexed: {} };
|
|
462
534
|
}
|
|
463
535
|
return {
|
|
464
536
|
fenced: refused,
|
|
465
537
|
...commit(connection, rooms.filter(({ locator }) => !fenced(connection, locator))),
|
|
466
538
|
};
|
|
467
539
|
}
|
|
468
|
-
function receivedParts(connection, key, count) {
|
|
469
|
-
return connection
|
|
470
|
-
.rows('SELECT value FROM replica_received_parts WHERE key = ? AND part < ? ORDER BY part', [
|
|
471
|
-
key,
|
|
472
|
-
count,
|
|
473
|
-
])
|
|
474
|
-
.map((row) => JSON.parse(text(row.value)));
|
|
475
|
-
}
|
|
476
|
-
function receive(connection, { key, head, part }) {
|
|
477
|
-
connection.run('INSERT OR REPLACE INTO replica_received (key, head) VALUES (?, ?)', [key, head]);
|
|
478
|
-
if (part !== undefined) {
|
|
479
|
-
connection.run('INSERT OR REPLACE INTO replica_received_parts (key, part, value) VALUES (?, ?, ?)', [key, part.index, part.value]);
|
|
480
|
-
}
|
|
481
|
-
return null;
|
|
482
|
-
}
|
|
483
|
-
function unreceive(connection, keys) {
|
|
484
|
-
for (const key of keys) {
|
|
485
|
-
connection.run('DELETE FROM replica_received WHERE key = ?', [key]);
|
|
486
|
-
connection.run('DELETE FROM replica_received_parts WHERE key = ?', [key]);
|
|
487
|
-
}
|
|
488
|
-
return null;
|
|
489
|
-
}
|
|
490
540
|
export function answerRuntime(connection, request, spool) {
|
|
491
541
|
switch (request.kind) {
|
|
492
|
-
case 'authored.
|
|
493
|
-
return
|
|
542
|
+
case 'authored.status':
|
|
543
|
+
return status(connection);
|
|
544
|
+
case 'authored.moving':
|
|
545
|
+
return {
|
|
546
|
+
queues: queued(connection),
|
|
547
|
+
pending: connection
|
|
548
|
+
.rows('SELECT locator, id, batch, state FROM authored_pending WHERE moving = 1 ORDER BY locator')
|
|
549
|
+
.map((row) => ({
|
|
550
|
+
locator: text(row.locator),
|
|
551
|
+
id: text(row.id),
|
|
552
|
+
batch: text(row.batch),
|
|
553
|
+
state: text(row.state),
|
|
554
|
+
})),
|
|
555
|
+
};
|
|
556
|
+
case 'authored.pending':
|
|
557
|
+
return pendingOf(connection, request.locator, request.id);
|
|
558
|
+
case 'authored.batch': {
|
|
559
|
+
const [held] = connection.rows('SELECT batch FROM authored_pending WHERE locator = ? AND id = ?', [request.locator, request.id]);
|
|
560
|
+
return held === undefined ? null : text(held.batch);
|
|
561
|
+
}
|
|
562
|
+
case 'authored.order':
|
|
563
|
+
return heldOrder(connection, request.locator);
|
|
564
|
+
case 'authored.queued':
|
|
565
|
+
return texts(connection.rows('SELECT locator FROM authored_queues'), 'locator');
|
|
494
566
|
case 'authored.roomDrafts':
|
|
495
|
-
return
|
|
567
|
+
return roomDraftRecords(connection, request.locator, request.paths);
|
|
568
|
+
case 'authored.chatDraft.read':
|
|
569
|
+
return chatDraftRecord(connection, request.conversation);
|
|
496
570
|
case 'authored.chatDrafts':
|
|
497
571
|
return texts(connection.rows('SELECT record FROM authored_chat_drafts'), 'record');
|
|
498
572
|
case 'authored.calls':
|
|
499
573
|
return texts(connection.rows('SELECT record FROM authored_calls'), 'record');
|
|
500
574
|
case 'authored.fences':
|
|
501
575
|
return texts(connection.rows('SELECT locator FROM authored_fences'), 'locator');
|
|
576
|
+
case 'authored.unsent':
|
|
577
|
+
return unsent(connection);
|
|
502
578
|
case 'authored.fact':
|
|
503
579
|
return fact(connection, request.name);
|
|
504
580
|
case 'authored.file':
|
|
@@ -519,6 +595,25 @@ export function answerRuntime(connection, request, spool) {
|
|
|
519
595
|
return end(connection, request.holder);
|
|
520
596
|
case 'replica.open':
|
|
521
597
|
return opened(connection);
|
|
598
|
+
case 'replica.rooms':
|
|
599
|
+
return heldRooms(connection, request.locators);
|
|
600
|
+
case 'replica.room':
|
|
601
|
+
return heldWork(connection, request.locator);
|
|
602
|
+
case 'replica.covering':
|
|
603
|
+
return {
|
|
604
|
+
rooms: covering(connection),
|
|
605
|
+
queues: queued(connection),
|
|
606
|
+
};
|
|
607
|
+
case 'replica.offline':
|
|
608
|
+
return offlineMode(connection, request.locator);
|
|
609
|
+
case 'replica.held':
|
|
610
|
+
return { held: heldLocators(connection), staged: stagedLocators(connection) };
|
|
611
|
+
case 'replica.demote':
|
|
612
|
+
return demoted(connection);
|
|
613
|
+
case 'replica.facts':
|
|
614
|
+
return facts(connection);
|
|
615
|
+
case 'replica.presentation':
|
|
616
|
+
return presentation(connection, request.app);
|
|
522
617
|
case 'replica.query':
|
|
523
618
|
return answerQuery(connection, request.plan, request.rooms, request.budget);
|
|
524
619
|
case 'replica.entries':
|
|
@@ -526,32 +621,15 @@ export function answerRuntime(connection, request, spool) {
|
|
|
526
621
|
case 'replica.typed':
|
|
527
622
|
return typed(connection, request.key, request.view, request.paths);
|
|
528
623
|
case 'replica.referrers':
|
|
529
|
-
return referrers(connection, request.key, request.view, request.targets
|
|
530
|
-
case 'replica.
|
|
531
|
-
return
|
|
532
|
-
case 'replica.files':
|
|
533
|
-
return files(connection, request.key, request.view, request.after, request.limit);
|
|
624
|
+
return referrers(connection, request.key, request.view, request.targets);
|
|
625
|
+
case 'replica.folders':
|
|
626
|
+
return folders(connection, request.key, request.view, request.paths);
|
|
534
627
|
case 'replica.typedWithin':
|
|
535
628
|
return typedWithin(connection, request.key, request.view, request.roots, request.within);
|
|
536
|
-
case 'replica.counts':
|
|
537
|
-
return counts(connection, request.rooms);
|
|
538
|
-
case 'replica.search': {
|
|
539
|
-
const { kind: _kind, ...ask } = request;
|
|
540
|
-
return searched(connection, ask);
|
|
541
|
-
}
|
|
542
|
-
case 'replica.received':
|
|
543
|
-
return connection.rows('SELECT key, head FROM replica_received').map((row) => ({
|
|
544
|
-
key: text(row.key),
|
|
545
|
-
head: JSON.parse(text(row.head)),
|
|
546
|
-
}));
|
|
547
|
-
case 'replica.receivedParts':
|
|
548
|
-
return receivedParts(connection, request.key, request.count);
|
|
549
629
|
case 'replica.stage':
|
|
550
630
|
return fenced(connection, request.locator) ? null : stage(connection, request);
|
|
551
|
-
case 'replica.
|
|
552
|
-
return
|
|
553
|
-
case 'replica.keepPart':
|
|
554
|
-
return fenced(connection, request.locator) ? null : keepPart(connection, request);
|
|
631
|
+
case 'replica.resume':
|
|
632
|
+
return fenced(connection, request.locator) ? null : resume(connection, request);
|
|
555
633
|
case 'replica.refresh':
|
|
556
634
|
return refreshing(connection, request);
|
|
557
635
|
case 'replica.unrefresh':
|
|
@@ -563,11 +641,13 @@ export function answerRuntime(connection, request, spool) {
|
|
|
563
641
|
case 'replica.erase':
|
|
564
642
|
return erased(connection, request);
|
|
565
643
|
case 'replica.abandon':
|
|
566
|
-
return abandon(connection, request.locator
|
|
644
|
+
return abandon(connection, request.locator);
|
|
645
|
+
case 'replica.unfence':
|
|
646
|
+
return unfenced(connection, request.locators);
|
|
567
647
|
case 'replica.release':
|
|
568
648
|
return release(connection, request.key);
|
|
569
649
|
case 'replica.rederive':
|
|
570
|
-
return rederive(connection, request.key, request.
|
|
650
|
+
return rederive(connection, request.key, request.composed, request.bytes, request.ms, request.floor);
|
|
571
651
|
case 'replica.fact':
|
|
572
652
|
connection.run('INSERT OR REPLACE INTO replica_facts (name, value) VALUES (?, ?)', [
|
|
573
653
|
request.name,
|
|
@@ -580,10 +660,6 @@ export function answerRuntime(connection, request, spool) {
|
|
|
580
660
|
request.value,
|
|
581
661
|
]);
|
|
582
662
|
return null;
|
|
583
|
-
case 'replica.receive':
|
|
584
|
-
return receive(connection, request);
|
|
585
|
-
case 'replica.unreceive':
|
|
586
|
-
return unreceive(connection, request.keys);
|
|
587
663
|
case 'opened.find':
|
|
588
664
|
return openedFile(connection, request);
|
|
589
665
|
case 'opened.begin':
|
|
@@ -599,15 +675,15 @@ export function answerRuntime(connection, request, spool) {
|
|
|
599
675
|
case 'file.part':
|
|
600
676
|
return filePart(connection, request.key, request.part);
|
|
601
677
|
case 'conversation.held':
|
|
602
|
-
return heldConversations(connection);
|
|
678
|
+
return heldConversations(connection, request.conversations);
|
|
603
679
|
case 'conversation.keep': {
|
|
604
680
|
const { kind: _kind, ...write } = request;
|
|
605
681
|
return keptMessages(connection, write);
|
|
606
682
|
}
|
|
607
683
|
case 'conversation.window':
|
|
608
|
-
return messageWindow(connection, request.conversation, request.limit, request.before);
|
|
684
|
+
return messageWindow(connection, request.conversation, request.limit, request.before, request.phrase);
|
|
609
685
|
case 'conversation.count':
|
|
610
|
-
return messageCount(connection, request.conversation);
|
|
686
|
+
return messageCount(connection, request.conversation, request.phrase);
|
|
611
687
|
case 'conversation.turn':
|
|
612
688
|
return turnArrived(connection, request.conversation, request.turn);
|
|
613
689
|
case 'conversation.drop':
|
package/dist/transfer.d.ts
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
import type { Refusal } from '@agentshouse/mdmodel';
|
|
2
1
|
export type Unconfirmed = {
|
|
3
2
|
kind: 'unconfirmed';
|
|
4
3
|
};
|
|
5
|
-
export type Refused = {
|
|
6
|
-
kind: 'refused';
|
|
7
|
-
refusal: Refusal;
|
|
8
|
-
};
|
|
9
4
|
export declare const unconfirmed: Unconfirmed;
|
|
10
5
|
//# sourceMappingURL=transfer.d.ts.map
|
package/dist/transfer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../src/transfer.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../src/transfer.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAElD,eAAO,MAAM,WAAW,EAAE,WAAqC,CAAC"}
|
package/dist/validation.d.ts
CHANGED
|
@@ -19,12 +19,11 @@ export type Changed = {
|
|
|
19
19
|
readonly was: string | null | undefined;
|
|
20
20
|
readonly now: string | null | undefined;
|
|
21
21
|
};
|
|
22
|
-
type
|
|
22
|
+
type Neighbourhood = {
|
|
23
23
|
readonly lookup: Lookup;
|
|
24
24
|
readonly texts: (paths: readonly string[]) => Promise<ReadonlyMap<string, string | null>>;
|
|
25
|
-
readonly referrers: (
|
|
25
|
+
readonly referrers: (targets: readonly string[]) => Promise<readonly string[]>;
|
|
26
26
|
};
|
|
27
|
-
export declare function
|
|
28
|
-
export declare function changedCleanly(changes: readonly Changed[], previous: Composition, composition: Composition, source: CleanSource): Promise<boolean>;
|
|
27
|
+
export declare function validatedNeighbourhood(changes: readonly Changed[], composition: Composition, source: Neighbourhood): Promise<Validation>;
|
|
29
28
|
export {};
|
|
30
29
|
//# sourceMappingURL=validation.d.ts.map
|
package/dist/validation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,UAAU,EAGhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAM7D,KAAK,QAAQ,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,KAAK,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpF,MAAM,MAAM,IAAI,GAAG,CACjB,KAAK,EAAE,MAAM,GAAG,IAAI,KACjB,OAAO,CAAC;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC;AAEtF,MAAM,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAwBvF,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,UAAU,CAAC,CA6CrB;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACzC,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IAC1F,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;CAChF,CAAC;AAkBF,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,SAAS,OAAO,EAAE,EAC3B,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,UAAU,CAAC,CAgCrB"}
|