@agentshouse/mdruntime 0.1.0-c588e78cf6975 → 0.1.0-c59a5a6bd2f31
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/acceptance.d.ts +26 -0
- package/dist/acceptance.d.ts.map +1 -0
- package/dist/acceptance.js +384 -0
- package/dist/adapter.d.ts +38 -25
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +3 -10
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +21 -56
- package/dist/bootstrap.d.ts +8 -4
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +209 -78
- 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/chat-types.d.ts +3 -0
- package/dist/chat-types.d.ts.map +1 -0
- package/dist/chat-types.js +2 -0
- package/dist/client.d.ts +14 -4
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +3 -0
- package/dist/collection.d.ts +2 -1
- package/dist/collection.d.ts.map +1 -1
- package/dist/compile.d.ts +7 -7
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +229 -297
- package/dist/connection.d.ts +19 -43
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +1325 -3586
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +7 -0
- package/dist/conversation-row.d.ts +33 -0
- package/dist/conversation-row.d.ts.map +1 -0
- package/dist/conversation-row.js +47 -0
- package/dist/conversation.d.ts +18 -9
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +375 -224
- package/dist/durability.d.ts +6 -0
- package/dist/durability.d.ts.map +1 -1
- package/dist/entry.d.ts +2 -2
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +17 -8
- package/dist/figures.d.ts +48 -0
- package/dist/figures.d.ts.map +1 -0
- package/dist/figures.js +197 -0
- package/dist/host.d.ts +4 -5
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +22 -21
- 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 +18 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/install.d.ts +86 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +537 -0
- package/dist/job.d.ts +33 -0
- package/dist/job.d.ts.map +1 -0
- package/dist/job.js +54 -0
- package/dist/live.d.ts +5 -4
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +62 -20
- package/dist/log.d.ts +1 -0
- package/dist/log.d.ts.map +1 -1
- package/dist/memory.d.ts +4 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +43 -4
- package/dist/messages.d.ts +27 -3
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +97 -19
- package/dist/model.d.ts +2 -9
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +0 -9
- package/dist/observation.d.ts +2 -2
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +7 -2
- package/dist/outcome.d.ts +1 -0
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +3 -0
- package/dist/overlay.d.ts +1 -0
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +11 -0
- package/dist/parts.d.ts +59 -0
- package/dist/parts.d.ts.map +1 -0
- package/dist/parts.js +118 -0
- package/dist/query.d.ts +13 -210
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +3 -508
- package/dist/questions.d.ts +32 -0
- package/dist/questions.d.ts.map +1 -0
- package/dist/questions.js +118 -0
- package/dist/reach.d.ts +11 -11
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +166 -113
- package/dist/react.d.ts +4 -2
- package/dist/react.d.ts.map +1 -1
- package/dist/read.d.ts +7 -0
- package/dist/read.d.ts.map +1 -0
- package/dist/read.js +17 -0
- package/dist/readiness.d.ts +0 -2
- package/dist/readiness.d.ts.map +1 -1
- package/dist/reads.d.ts +35 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +128 -0
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +9 -1
- package/dist/refresh.d.ts +1 -1
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +8 -20
- package/dist/replica.d.ts +8 -8
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +50 -18
- package/dist/room-draft.d.ts +3 -2
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +4 -4
- package/dist/room-drafts.d.ts +29 -0
- package/dist/room-drafts.d.ts.map +1 -0
- package/dist/room-drafts.js +216 -0
- package/dist/rows.d.ts +14 -22
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +48 -189
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +11 -8
- package/dist/saves.d.ts +96 -0
- package/dist/saves.d.ts.map +1 -0
- package/dist/saves.js +999 -0
- package/dist/search.d.ts +12 -63
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +9 -52
- package/dist/seed.d.ts +16 -2
- package/dist/seed.d.ts.map +1 -1
- package/dist/seed.js +66 -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/reads.d.ts +10 -0
- package/dist/socket/reads.d.ts.map +1 -0
- package/dist/socket/reads.js +31 -0
- package/dist/socket.d.ts +43 -0
- package/dist/socket.d.ts.map +1 -0
- package/dist/socket.js +96 -0
- package/dist/source.d.ts +61 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +81 -0
- package/dist/status.d.ts +0 -2
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +0 -6
- package/dist/store/fences.d.ts +16 -0
- package/dist/store/fences.d.ts.map +1 -0
- package/dist/store/fences.js +26 -0
- 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/records.d.ts +212 -0
- package/dist/store/records.d.ts.map +1 -0
- package/dist/store/records.js +408 -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/watchers.d.ts +15 -0
- package/dist/store/watchers.d.ts.map +1 -0
- package/dist/store/watchers.js +36 -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 +78 -156
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +117 -401
- package/dist/stored.d.ts +58 -65
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +264 -243
- package/dist/tables.d.ts +107 -51
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +193 -59
- package/dist/tallies.d.ts +18 -0
- package/dist/tallies.d.ts.map +1 -0
- package/dist/tallies.js +129 -0
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +7 -4
- 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 +14 -0
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +5 -0
- 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 -370
- package/dist/words.d.ts +0 -19
- package/dist/words.d.ts.map +0 -1
- package/dist/words.js +0 -156
package/dist/tables.js
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
|
+
import { sql } from '@agentshouse/mdmodel';
|
|
1
2
|
import { answerQuery } from './compile.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { conversationRows, droppedMessages, forgottenMessages, heldConversations, jobMarkers, keptMessages, messageCount, messageWindow, MESSAGE_TABLES, turnArrived, } from './messages.js';
|
|
4
|
+
import { keptRead, READ_TABLES, readsOfOtherBuildsForgotten, storedRead, } from './reads.js';
|
|
5
|
+
import { conversationTallies, roomTallies, } from './tallies.js';
|
|
6
|
+
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
7
|
const STATEMENTS_HELD = 256;
|
|
6
8
|
export function sqliteConnection(engine, database) {
|
|
7
9
|
const decoder = new TextDecoder();
|
|
8
10
|
const held = new Map();
|
|
11
|
+
database.createFunction(sql.HOLDS_PHRASE, sql.holdsPhrase, {
|
|
12
|
+
arity: 2,
|
|
13
|
+
deterministic: true,
|
|
14
|
+
});
|
|
9
15
|
function prepared(sql) {
|
|
10
16
|
if (sql.includes(';'))
|
|
11
17
|
return null;
|
|
@@ -72,7 +78,7 @@ const TABLES = [
|
|
|
72
78
|
['authored_queues', 'locator TEXT PRIMARY KEY, ids TEXT NOT NULL'],
|
|
73
79
|
[
|
|
74
80
|
'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)',
|
|
81
|
+
'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
82
|
],
|
|
77
83
|
[
|
|
78
84
|
'authored_room_drafts',
|
|
@@ -89,36 +95,51 @@ export const RUNTIME_TABLES = [
|
|
|
89
95
|
'CREATE INDEX opened_files_name ON opened_files (locator, path, revision)',
|
|
90
96
|
...REPLICA_TABLES,
|
|
91
97
|
...MESSAGE_TABLES,
|
|
92
|
-
...
|
|
98
|
+
...READ_TABLES,
|
|
93
99
|
];
|
|
94
100
|
const OWNERS = ['authored_pending', 'authored_room_drafts', 'authored_calls'];
|
|
95
101
|
const AUTHORED_KEYS = OWNERS.map((table) => `SELECT value FROM ${table}, json_each(${table}.files)`).join(' UNION ');
|
|
96
102
|
const UNOWNED_PARTS = `DELETE FROM file_parts WHERE key NOT IN (${AUTHORED_KEYS} UNION SELECT key FROM opened_files)`;
|
|
97
103
|
const READS = new Set([
|
|
98
|
-
'authored.
|
|
104
|
+
'authored.status',
|
|
105
|
+
'authored.moving',
|
|
106
|
+
'authored.pending',
|
|
107
|
+
'authored.batch',
|
|
108
|
+
'authored.order',
|
|
109
|
+
'authored.queued',
|
|
99
110
|
'authored.roomDrafts',
|
|
111
|
+
'authored.chatDraft.read',
|
|
100
112
|
'authored.chatDrafts',
|
|
101
113
|
'authored.calls',
|
|
102
114
|
'authored.fences',
|
|
115
|
+
'authored.unsent',
|
|
103
116
|
'authored.fact',
|
|
104
117
|
'authored.file',
|
|
105
118
|
'replica.open',
|
|
119
|
+
'replica.rooms',
|
|
120
|
+
'replica.room',
|
|
121
|
+
'replica.covering',
|
|
122
|
+
'replica.offline',
|
|
123
|
+
'replica.held',
|
|
124
|
+
'replica.facts',
|
|
125
|
+
'replica.presentation',
|
|
106
126
|
'replica.query',
|
|
127
|
+
'replica.tallies',
|
|
107
128
|
'replica.entries',
|
|
108
129
|
'replica.typed',
|
|
109
130
|
'replica.referrers',
|
|
110
|
-
'replica.files',
|
|
111
131
|
'replica.folders',
|
|
112
132
|
'replica.typedWithin',
|
|
113
|
-
'replica.counts',
|
|
114
|
-
'replica.search',
|
|
115
|
-
'replica.wanted',
|
|
116
133
|
'opened.find',
|
|
117
134
|
'file.part',
|
|
118
135
|
'conversation.held',
|
|
119
136
|
'conversation.window',
|
|
120
137
|
'conversation.count',
|
|
121
138
|
'conversation.turn',
|
|
139
|
+
'conversation.rows',
|
|
140
|
+
'conversation.jobs',
|
|
141
|
+
'conversation.tallies',
|
|
142
|
+
'read.stored',
|
|
122
143
|
]);
|
|
123
144
|
const KINDS = new Set([
|
|
124
145
|
...READS,
|
|
@@ -130,17 +151,17 @@ const KINDS = new Set([
|
|
|
130
151
|
'authored.claim',
|
|
131
152
|
'authored.end',
|
|
132
153
|
'replica.stage',
|
|
154
|
+
'replica.resume',
|
|
133
155
|
'replica.refresh',
|
|
134
156
|
'replica.unrefresh',
|
|
135
157
|
'replica.commit',
|
|
136
158
|
'replica.fence',
|
|
137
159
|
'replica.erase',
|
|
138
160
|
'replica.abandon',
|
|
161
|
+
'replica.unfence',
|
|
139
162
|
'replica.release',
|
|
140
163
|
'replica.rederive',
|
|
141
|
-
'replica.
|
|
142
|
-
'replica.remember',
|
|
143
|
-
'replica.unhold',
|
|
164
|
+
'replica.demote',
|
|
144
165
|
'replica.fact',
|
|
145
166
|
'replica.present',
|
|
146
167
|
'opened.begin',
|
|
@@ -151,6 +172,8 @@ const KINDS = new Set([
|
|
|
151
172
|
'conversation.keep',
|
|
152
173
|
'conversation.drop',
|
|
153
174
|
'space.probe',
|
|
175
|
+
'read.keep',
|
|
176
|
+
'read.builds',
|
|
154
177
|
]);
|
|
155
178
|
export function isRuntime(request) {
|
|
156
179
|
return KINDS.has(request.kind);
|
|
@@ -223,21 +246,66 @@ function unowned(connection) {
|
|
|
223
246
|
connection.run(UNOWNED_PARTS);
|
|
224
247
|
}
|
|
225
248
|
function queued(connection) {
|
|
249
|
+
return connection.rows('SELECT locator, ids FROM authored_queues').map((row) => ({
|
|
250
|
+
locator: text(row.locator),
|
|
251
|
+
ids: JSON.parse(text(row.ids)),
|
|
252
|
+
}));
|
|
253
|
+
}
|
|
254
|
+
function heldWork(connection, locator) {
|
|
255
|
+
const room = heldRoom(connection, locator);
|
|
256
|
+
const pending = new Map(connection
|
|
257
|
+
.rows('SELECT id, batch, state FROM authored_pending WHERE locator = ?', [locator])
|
|
258
|
+
.map((row) => [
|
|
259
|
+
text(row.id),
|
|
260
|
+
{ id: text(row.id), batch: text(row.batch), state: text(row.state) },
|
|
261
|
+
]));
|
|
226
262
|
return {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
263
|
+
room: room === null ? null : { ...room, overlaid: overlaid(connection, room.key) },
|
|
264
|
+
queue: heldOrder(connection, locator).map((id) => {
|
|
265
|
+
const held = pending.get(id);
|
|
266
|
+
if (held === undefined)
|
|
267
|
+
throw new Error(`Missing Pending Change ${locator}/${id}`);
|
|
268
|
+
return held;
|
|
269
|
+
}),
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
function status(connection) {
|
|
273
|
+
const [completed] = connection.rows("SELECT value FROM replica_facts WHERE name = 'lastCompleted'");
|
|
274
|
+
return {
|
|
275
|
+
queued: texts(connection.rows('SELECT locator FROM authored_queues'), 'locator'),
|
|
276
|
+
lastCompleted: completed === undefined ? null : text(completed.value),
|
|
277
|
+
changes: connection
|
|
278
|
+
.rows('SELECT p.locator, c.value AS path FROM authored_pending p, json_each(p.paths) c')
|
|
279
|
+
.map((row) => ({ locator: text(row.locator), path: text(row.path) })),
|
|
280
|
+
resets: connection
|
|
281
|
+
.rows(`SELECT locator, json_extract(state, '$.submission.reset') AS reset FROM authored_pending
|
|
282
|
+
WHERE json_extract(state, '$.submission.state') = 'reset'`)
|
|
283
|
+
.map((row) => ({ locator: text(row.locator), reset: text(row.reset) })),
|
|
284
|
+
returned: texts(connection.rows(`SELECT record FROM authored_room_drafts WHERE json_type(record, '$.returned') = 'object'`), 'record'),
|
|
239
285
|
};
|
|
240
286
|
}
|
|
287
|
+
function pendingOf(connection, locator, id) {
|
|
288
|
+
const [held] = connection.rows('SELECT state FROM authored_pending WHERE locator = ? AND id = ?', [locator, id]);
|
|
289
|
+
return {
|
|
290
|
+
state: held === undefined ? null : text(held.state),
|
|
291
|
+
room: connection.rows('SELECT 1 FROM replica_rooms WHERE locator = ?', [locator]).length > 0,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
function roomDraftRecords(connection, locator, paths) {
|
|
295
|
+
if (locator === null) {
|
|
296
|
+
return texts(connection.rows('SELECT record FROM authored_room_drafts'), 'record');
|
|
297
|
+
}
|
|
298
|
+
if (paths === null) {
|
|
299
|
+
return texts(connection.rows('SELECT record FROM authored_room_drafts WHERE locator = ?', [locator]), 'record');
|
|
300
|
+
}
|
|
301
|
+
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');
|
|
302
|
+
}
|
|
303
|
+
function chatDraftRecord(connection, conversation) {
|
|
304
|
+
const [held] = connection.rows('SELECT record FROM authored_chat_drafts WHERE conversation = ?', [
|
|
305
|
+
conversation,
|
|
306
|
+
]);
|
|
307
|
+
return held === undefined ? null : text(held.record);
|
|
308
|
+
}
|
|
241
309
|
function heldOrder(connection, locator) {
|
|
242
310
|
const [held] = connection.rows('SELECT ids FROM authored_queues WHERE locator = ?', [locator]);
|
|
243
311
|
return held === undefined ? [] : JSON.parse(text(held.ids));
|
|
@@ -269,19 +337,26 @@ function keptRows(connection, { locator, order, added, founded, roomDrafts, cons
|
|
|
269
337
|
connection.run('DELETE FROM authored_pending WHERE locator = ? AND id = ?', [locator, id]);
|
|
270
338
|
}
|
|
271
339
|
}
|
|
272
|
-
for (const { id, batch, state, files } of added ?? []) {
|
|
340
|
+
for (const { id, batch, state, files, paths, moving } of added ?? []) {
|
|
273
341
|
if (before.has(id) || !after.has(id))
|
|
274
342
|
continue;
|
|
275
|
-
connection.run('INSERT OR REPLACE INTO authored_pending (locator, id, batch, state, files) VALUES (?, ?, ?, ?, ?)', [locator, id, batch, state, owned(files)]);
|
|
343
|
+
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]);
|
|
276
344
|
}
|
|
277
|
-
for (const { id, batch, files } of founded ?? []) {
|
|
345
|
+
for (const { id, batch, files, paths, moving } of founded ?? []) {
|
|
278
346
|
const [held] = connection.rows('SELECT files FROM authored_pending WHERE locator = ? AND id = ?', [locator, id]);
|
|
279
347
|
if (held === undefined || !before.has(id))
|
|
280
348
|
continue;
|
|
281
|
-
connection.run('UPDATE authored_pending SET batch = ?, files = ? WHERE locator = ? AND id = ?', [
|
|
349
|
+
connection.run('UPDATE authored_pending SET batch = ?, files = ?, paths = ?, moving = ? WHERE locator = ? AND id = ?', [
|
|
350
|
+
batch,
|
|
351
|
+
owned([...JSON.parse(text(held.files)), ...files]),
|
|
352
|
+
JSON.stringify(paths),
|
|
353
|
+
moving ? 1 : 0,
|
|
354
|
+
locator,
|
|
355
|
+
id,
|
|
356
|
+
]);
|
|
282
357
|
}
|
|
283
358
|
}
|
|
284
|
-
async function kept(connection, { writes, files, whole
|
|
359
|
+
async function kept(connection, { writes, files, whole }) {
|
|
285
360
|
const refused = writes.find(({ locator }) => fenced(connection, locator));
|
|
286
361
|
if (refused !== undefined && whole)
|
|
287
362
|
return refused.locator;
|
|
@@ -290,8 +365,6 @@ async function kept(connection, { writes, files, whole, discards }) {
|
|
|
290
365
|
if (!fenced(connection, write.locator))
|
|
291
366
|
keptRows(connection, write);
|
|
292
367
|
}
|
|
293
|
-
for (const locator of discards ?? [])
|
|
294
|
-
roomWork(connection, locator);
|
|
295
368
|
unowned(connection);
|
|
296
369
|
return refused?.locator ?? null;
|
|
297
370
|
}
|
|
@@ -361,11 +434,15 @@ function fence(connection, locators) {
|
|
|
361
434
|
return fenceRooms(connection, locators);
|
|
362
435
|
}
|
|
363
436
|
function erased(connection, { locator, limit }) {
|
|
364
|
-
|
|
365
|
-
|
|
437
|
+
return erase(connection, locator, limit);
|
|
438
|
+
}
|
|
439
|
+
function unfenced(connection, locators) {
|
|
440
|
+
const erased = locators.filter((locator) => connection.rows('SELECT 1 FROM replica_erasing WHERE locator = ? LIMIT 1', [locator])
|
|
441
|
+
.length === 0);
|
|
442
|
+
for (const locator of erased) {
|
|
366
443
|
connection.run('DELETE FROM authored_fences WHERE locator = ?', [locator]);
|
|
367
444
|
}
|
|
368
|
-
return
|
|
445
|
+
return erased;
|
|
369
446
|
}
|
|
370
447
|
function claim(connection, holder) {
|
|
371
448
|
const held = fact(connection, 'holder');
|
|
@@ -444,6 +521,16 @@ function keptOpened(connection, { key, sha256, byteLength, parts }) {
|
|
|
444
521
|
unowned(connection);
|
|
445
522
|
return true;
|
|
446
523
|
}
|
|
524
|
+
const UNSENT = [
|
|
525
|
+
['pending-change', 'authored_pending'],
|
|
526
|
+
['call', 'authored_calls'],
|
|
527
|
+
['room-draft', 'authored_room_drafts'],
|
|
528
|
+
['chat-draft', 'authored_chat_drafts'],
|
|
529
|
+
];
|
|
530
|
+
function unsent(connection) {
|
|
531
|
+
const [held] = connection.rows(`SELECT ${UNSENT.map(([kind, table]) => `(SELECT count(*) FROM ${table}) AS "${kind}"`).join(', ')}`);
|
|
532
|
+
return UNSENT.map(([kind]) => ({ kind, count: count(held?.[kind]) })).filter((work) => work.count > 0);
|
|
533
|
+
}
|
|
447
534
|
function cleaned(connection) {
|
|
448
535
|
connection.run('DELETE FROM opened_files');
|
|
449
536
|
const [freed] = connection.rows(`SELECT coalesce(sum(length(bytes)), 0) AS bytes FROM file_parts WHERE key NOT IN (${AUTHORED_KEYS})`);
|
|
@@ -453,7 +540,7 @@ function cleaned(connection) {
|
|
|
453
540
|
async function committed(connection, { authored, rooms }) {
|
|
454
541
|
const refused = authored === undefined ? null : await kept(connection, authored);
|
|
455
542
|
if (refused !== null && authored?.whole === true) {
|
|
456
|
-
return { fenced: refused,
|
|
543
|
+
return { fenced: refused, changed: {}, indexed: {} };
|
|
457
544
|
}
|
|
458
545
|
return {
|
|
459
546
|
fenced: refused,
|
|
@@ -462,16 +549,42 @@ async function committed(connection, { authored, rooms }) {
|
|
|
462
549
|
}
|
|
463
550
|
export function answerRuntime(connection, request, spool) {
|
|
464
551
|
switch (request.kind) {
|
|
465
|
-
case 'authored.
|
|
466
|
-
return
|
|
552
|
+
case 'authored.status':
|
|
553
|
+
return status(connection);
|
|
554
|
+
case 'authored.moving':
|
|
555
|
+
return {
|
|
556
|
+
queues: queued(connection),
|
|
557
|
+
pending: connection
|
|
558
|
+
.rows('SELECT locator, id, batch, state FROM authored_pending WHERE moving = 1 ORDER BY locator')
|
|
559
|
+
.map((row) => ({
|
|
560
|
+
locator: text(row.locator),
|
|
561
|
+
id: text(row.id),
|
|
562
|
+
batch: text(row.batch),
|
|
563
|
+
state: text(row.state),
|
|
564
|
+
})),
|
|
565
|
+
};
|
|
566
|
+
case 'authored.pending':
|
|
567
|
+
return pendingOf(connection, request.locator, request.id);
|
|
568
|
+
case 'authored.batch': {
|
|
569
|
+
const [held] = connection.rows('SELECT batch FROM authored_pending WHERE locator = ? AND id = ?', [request.locator, request.id]);
|
|
570
|
+
return held === undefined ? null : text(held.batch);
|
|
571
|
+
}
|
|
572
|
+
case 'authored.order':
|
|
573
|
+
return heldOrder(connection, request.locator);
|
|
574
|
+
case 'authored.queued':
|
|
575
|
+
return texts(connection.rows('SELECT locator FROM authored_queues'), 'locator');
|
|
467
576
|
case 'authored.roomDrafts':
|
|
468
|
-
return
|
|
577
|
+
return roomDraftRecords(connection, request.locator, request.paths);
|
|
578
|
+
case 'authored.chatDraft.read':
|
|
579
|
+
return chatDraftRecord(connection, request.conversation);
|
|
469
580
|
case 'authored.chatDrafts':
|
|
470
581
|
return texts(connection.rows('SELECT record FROM authored_chat_drafts'), 'record');
|
|
471
582
|
case 'authored.calls':
|
|
472
583
|
return texts(connection.rows('SELECT record FROM authored_calls'), 'record');
|
|
473
584
|
case 'authored.fences':
|
|
474
585
|
return texts(connection.rows('SELECT locator FROM authored_fences'), 'locator');
|
|
586
|
+
case 'authored.unsent':
|
|
587
|
+
return unsent(connection);
|
|
475
588
|
case 'authored.fact':
|
|
476
589
|
return fact(connection, request.name);
|
|
477
590
|
case 'authored.file':
|
|
@@ -492,28 +605,43 @@ export function answerRuntime(connection, request, spool) {
|
|
|
492
605
|
return end(connection, request.holder);
|
|
493
606
|
case 'replica.open':
|
|
494
607
|
return opened(connection);
|
|
608
|
+
case 'replica.rooms':
|
|
609
|
+
return heldRooms(connection, request.locators);
|
|
610
|
+
case 'replica.room':
|
|
611
|
+
return heldWork(connection, request.locator);
|
|
612
|
+
case 'replica.covering':
|
|
613
|
+
return {
|
|
614
|
+
rooms: covering(connection),
|
|
615
|
+
queues: queued(connection),
|
|
616
|
+
};
|
|
617
|
+
case 'replica.offline':
|
|
618
|
+
return offlineMode(connection, request.locator);
|
|
619
|
+
case 'replica.held':
|
|
620
|
+
return { held: heldLocators(connection), staged: stagedLocators(connection) };
|
|
621
|
+
case 'replica.demote':
|
|
622
|
+
return demoted(connection);
|
|
623
|
+
case 'replica.facts':
|
|
624
|
+
return facts(connection);
|
|
625
|
+
case 'replica.presentation':
|
|
626
|
+
return presentation(connection, request.app);
|
|
495
627
|
case 'replica.query':
|
|
496
628
|
return answerQuery(connection, request.plan, request.rooms, request.budget);
|
|
629
|
+
case 'replica.tallies':
|
|
630
|
+
return roomTallies(connection, request.totals, request.rooms, request.since);
|
|
497
631
|
case 'replica.entries':
|
|
498
632
|
return entries(connection, request.key, request.view, request.paths);
|
|
499
633
|
case 'replica.typed':
|
|
500
634
|
return typed(connection, request.key, request.view, request.paths);
|
|
501
635
|
case 'replica.referrers':
|
|
502
|
-
return referrers(connection, request.key, request.view, request.targets
|
|
503
|
-
case 'replica.files':
|
|
504
|
-
return files(connection, request.key, request.view, request.after, request.limit);
|
|
636
|
+
return referrers(connection, request.key, request.view, request.targets);
|
|
505
637
|
case 'replica.folders':
|
|
506
638
|
return folders(connection, request.key, request.view, request.paths);
|
|
507
639
|
case 'replica.typedWithin':
|
|
508
640
|
return typedWithin(connection, request.key, request.view, request.roots, request.within);
|
|
509
|
-
case 'replica.counts':
|
|
510
|
-
return counts(connection, request.rooms);
|
|
511
|
-
case 'replica.search': {
|
|
512
|
-
const { kind: _kind, ...ask } = request;
|
|
513
|
-
return searched(connection, ask);
|
|
514
|
-
}
|
|
515
641
|
case 'replica.stage':
|
|
516
642
|
return fenced(connection, request.locator) ? null : stage(connection, request);
|
|
643
|
+
case 'replica.resume':
|
|
644
|
+
return fenced(connection, request.locator) ? null : resume(connection, request);
|
|
517
645
|
case 'replica.refresh':
|
|
518
646
|
return refreshing(connection, request);
|
|
519
647
|
case 'replica.unrefresh':
|
|
@@ -526,18 +654,12 @@ export function answerRuntime(connection, request, spool) {
|
|
|
526
654
|
return erased(connection, request);
|
|
527
655
|
case 'replica.abandon':
|
|
528
656
|
return abandon(connection, request.locator);
|
|
657
|
+
case 'replica.unfence':
|
|
658
|
+
return unfenced(connection, request.locators);
|
|
529
659
|
case 'replica.release':
|
|
530
660
|
return release(connection, request.key);
|
|
531
661
|
case 'replica.rederive':
|
|
532
662
|
return rederive(connection, request.key, request.composed, request.bytes, request.ms, request.floor);
|
|
533
|
-
case 'replica.hold':
|
|
534
|
-
return holdTexts(connection, request);
|
|
535
|
-
case 'replica.unhold':
|
|
536
|
-
return unholdTexts(connection, request);
|
|
537
|
-
case 'replica.wanted':
|
|
538
|
-
return wanted(connection, request);
|
|
539
|
-
case 'replica.remember':
|
|
540
|
-
return remembered(connection, request);
|
|
541
663
|
case 'replica.fact':
|
|
542
664
|
connection.run('INSERT OR REPLACE INTO replica_facts (name, value) VALUES (?, ?)', [
|
|
543
665
|
request.name,
|
|
@@ -565,17 +687,23 @@ export function answerRuntime(connection, request, spool) {
|
|
|
565
687
|
case 'file.part':
|
|
566
688
|
return filePart(connection, request.key, request.part);
|
|
567
689
|
case 'conversation.held':
|
|
568
|
-
return heldConversations(connection);
|
|
690
|
+
return heldConversations(connection, request.conversations);
|
|
569
691
|
case 'conversation.keep': {
|
|
570
692
|
const { kind: _kind, ...write } = request;
|
|
571
693
|
return keptMessages(connection, write);
|
|
572
694
|
}
|
|
573
695
|
case 'conversation.window':
|
|
574
|
-
return messageWindow(connection, request.conversation, request.limit, request.before);
|
|
696
|
+
return messageWindow(connection, request.conversation, request.limit, request.before, request.phrase);
|
|
575
697
|
case 'conversation.count':
|
|
576
|
-
return messageCount(connection, request.conversation);
|
|
698
|
+
return messageCount(connection, request.conversation, request.phrase);
|
|
577
699
|
case 'conversation.turn':
|
|
578
700
|
return turnArrived(connection, request.conversation, request.turn);
|
|
701
|
+
case 'conversation.rows':
|
|
702
|
+
return conversationRows(connection, request.conversations);
|
|
703
|
+
case 'conversation.jobs':
|
|
704
|
+
return jobMarkers(connection, request.conversation);
|
|
705
|
+
case 'conversation.tallies':
|
|
706
|
+
return conversationTallies(connection, request.conversations, request.since);
|
|
579
707
|
case 'conversation.drop':
|
|
580
708
|
chatDraft(connection, {
|
|
581
709
|
kind: 'authored.chatDraft',
|
|
@@ -586,5 +714,11 @@ export function answerRuntime(connection, request, spool) {
|
|
|
586
714
|
return null;
|
|
587
715
|
case 'space.probe':
|
|
588
716
|
return spool.probe(PROBE_BYTES).then(() => null);
|
|
717
|
+
case 'read.stored':
|
|
718
|
+
return storedRead(connection, request);
|
|
719
|
+
case 'read.keep':
|
|
720
|
+
return keptRead(connection, request, request.answer);
|
|
721
|
+
case 'read.builds':
|
|
722
|
+
return readsOfOtherBuildsForgotten(connection, request.build);
|
|
589
723
|
}
|
|
590
724
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type QueryRoom } from './compile.js';
|
|
2
|
+
import type { GroupTotal, Plan } from './query.js';
|
|
3
|
+
import type { Connection } from './tables.js';
|
|
4
|
+
export type RoomTally = {
|
|
5
|
+
readonly key: number;
|
|
6
|
+
readonly documents: GroupTotal;
|
|
7
|
+
readonly files: GroupTotal;
|
|
8
|
+
readonly documentTimes: readonly (readonly [string | null, string | null])[];
|
|
9
|
+
readonly chatTimes: readonly string[];
|
|
10
|
+
readonly messageTimes: readonly string[];
|
|
11
|
+
};
|
|
12
|
+
export type ConversationTally = {
|
|
13
|
+
readonly conversation: string;
|
|
14
|
+
readonly said: readonly string[];
|
|
15
|
+
};
|
|
16
|
+
export declare function roomTallies(connection: Connection, totals: Plan, rooms: readonly QueryRoom[], since: string): RoomTally[];
|
|
17
|
+
export declare function conversationTallies(connection: Connection, conversations: readonly string[] | null, since: string): ConversationTally[];
|
|
18
|
+
//# sourceMappingURL=tallies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tallies.d.ts","sourceRoot":"","sources":["../src/tallies.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAE5E,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,aAAa,CAAC;AAI1D,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;IAC7E,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAAE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAmHpG,wBAAgB,WAAW,CACzB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,IAAI,EACZ,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,KAAK,EAAE,MAAM,GACZ,SAAS,EAAE,CAwBb;AA0BD,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,EACvC,KAAK,EAAE,MAAM,GACZ,iBAAiB,EAAE,CAerB"}
|
package/dist/tallies.js
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { instantKey, sql } from '@agentshouse/mdmodel';
|
|
2
|
+
import { CHAT_MESSAGE_TYPE, CHAT_TYPE } from './chat-types.js';
|
|
3
|
+
import { answerQuery, VISIBLE, within } from './compile.js';
|
|
4
|
+
import { HOUSE_DIRECTORY } from './figures.js';
|
|
5
|
+
const NONE = { count: 0, size: 0 };
|
|
6
|
+
const { all, fragment, joined } = sql;
|
|
7
|
+
function instant(value) {
|
|
8
|
+
return typeof value === 'string' ? value : null;
|
|
9
|
+
}
|
|
10
|
+
function held(alias, keys) {
|
|
11
|
+
const reserved = within(alias, HOUSE_DIRECTORY);
|
|
12
|
+
return all([
|
|
13
|
+
fragment(`${alias}.key IN (SELECT value FROM json_each(?))`, [JSON.stringify(keys)]),
|
|
14
|
+
fragment(VISIBLE(alias)),
|
|
15
|
+
fragment(`NOT ${reserved.sql}`, reserved.bind),
|
|
16
|
+
]);
|
|
17
|
+
}
|
|
18
|
+
function valued(alias, document, field) {
|
|
19
|
+
return joined([
|
|
20
|
+
fragment(`${alias}.doc = ${document}.id AND `),
|
|
21
|
+
sql.grouped(sql.placed(alias, field, 'exact')),
|
|
22
|
+
fragment(` AND ${alias}.item = -1`),
|
|
23
|
+
], '');
|
|
24
|
+
}
|
|
25
|
+
function inboxed(card) {
|
|
26
|
+
return joined([
|
|
27
|
+
fragment('EXISTS (SELECT 1 FROM replica_values i WHERE '),
|
|
28
|
+
valued('i', card, '/inbox'),
|
|
29
|
+
fragment(" AND i.kind = 'string')"),
|
|
30
|
+
], '');
|
|
31
|
+
}
|
|
32
|
+
function rowsOf(connection, query) {
|
|
33
|
+
return connection.rows(query.sql, query.bind);
|
|
34
|
+
}
|
|
35
|
+
function documentTimes(connection, keys, since) {
|
|
36
|
+
return rowsOf(connection, joined([
|
|
37
|
+
fragment('SELECT d.key AS key, d.created_instant AS created, d.changed_instant AS changed FROM replica_entries d WHERE '),
|
|
38
|
+
held('d', keys),
|
|
39
|
+
fragment(" AND d.binary IS NULL AND COALESCE(d.type, '') NOT IN (?, ?) AND (d.created_instant >= ? OR d.changed_instant >= ?)", [CHAT_TYPE, CHAT_MESSAGE_TYPE, since, since]),
|
|
40
|
+
], ''));
|
|
41
|
+
}
|
|
42
|
+
function chatTimes(connection, keys, since) {
|
|
43
|
+
return rowsOf(connection, joined([
|
|
44
|
+
fragment('SELECT d.key AS key, d.created_instant AS at FROM replica_entries d WHERE '),
|
|
45
|
+
held('d', keys),
|
|
46
|
+
fragment(' AND d.type = ? AND d.created_instant >= ? AND ', [CHAT_TYPE, since]),
|
|
47
|
+
inboxed('d'),
|
|
48
|
+
], ''));
|
|
49
|
+
}
|
|
50
|
+
function messageTimes(connection, keys, since) {
|
|
51
|
+
return rowsOf(connection, joined([
|
|
52
|
+
fragment('SELECT m.key AS key, s.instant AS at FROM replica_entries m JOIN replica_values s ON '),
|
|
53
|
+
valued('s', 'm', '/sent_at'),
|
|
54
|
+
fragment(' AND s.instant >= ? JOIN replica_values r ON ', [since]),
|
|
55
|
+
valued('r', 'm', '/direction'),
|
|
56
|
+
fragment(" AND r.kind = 'string' AND r.value = 'in' WHERE "),
|
|
57
|
+
held('m', keys),
|
|
58
|
+
fragment(` AND m.type = ? AND EXISTS (SELECT 1 FROM replica_entries c WHERE c.key = m.key AND c.type = ? AND ${VISIBLE('c')} AND c.folder = m.folder AND `, [CHAT_MESSAGE_TYPE, CHAT_TYPE]),
|
|
59
|
+
inboxed('c'),
|
|
60
|
+
fragment(')'),
|
|
61
|
+
], ''));
|
|
62
|
+
}
|
|
63
|
+
function byKey(rows, read) {
|
|
64
|
+
const kept = new Map();
|
|
65
|
+
for (const row of rows) {
|
|
66
|
+
const key = Number(row.key);
|
|
67
|
+
const list = kept.get(key) ?? [];
|
|
68
|
+
list.push(read(row));
|
|
69
|
+
kept.set(key, list);
|
|
70
|
+
}
|
|
71
|
+
return kept;
|
|
72
|
+
}
|
|
73
|
+
export function roomTallies(connection, totals, rooms, since) {
|
|
74
|
+
const keys = rooms.map(({ key }) => key);
|
|
75
|
+
const from = instantKey(since);
|
|
76
|
+
const answered = answerQuery(connection, totals, rooms);
|
|
77
|
+
const summed = new Map(('groups' in answered ? answered.groups : []).map((group) => [String(group.key[0]), group]));
|
|
78
|
+
const documents = byKey(documentTimes(connection, keys, from), (row) => [instant(row.created), instant(row.changed)]);
|
|
79
|
+
const chats = byKey(chatTimes(connection, keys, from), (row) => instant(row.at));
|
|
80
|
+
const messages = byKey(messageTimes(connection, keys, from), (row) => instant(row.at));
|
|
81
|
+
return rooms.map(({ locator, key }) => {
|
|
82
|
+
const total = summed.get(locator);
|
|
83
|
+
return {
|
|
84
|
+
key,
|
|
85
|
+
documents: total?.documents ?? NONE,
|
|
86
|
+
files: total?.files ?? NONE,
|
|
87
|
+
documentTimes: documents.get(key) ?? [],
|
|
88
|
+
chatTimes: chats.get(key) ?? [],
|
|
89
|
+
messageTimes: messages.get(key) ?? [],
|
|
90
|
+
};
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
const ACCEPTED = "message ->> '$.accepted_at'";
|
|
94
|
+
const NEWER = 'ORDER BY n.position DESC, n.identity DESC LIMIT 1';
|
|
95
|
+
const SAID = `WITH RECURSIVE
|
|
96
|
+
named(conversation) AS (SELECT value FROM json_each(?)),
|
|
97
|
+
walk(id, conversation, position, identity, at) AS (
|
|
98
|
+
SELECT m.id, m.conversation, m.position, m.identity, m.${ACCEPTED}
|
|
99
|
+
FROM named JOIN conversation_messages m ON m.id = (
|
|
100
|
+
SELECT n.id FROM conversation_messages n WHERE n.conversation = named.conversation ${NEWER}
|
|
101
|
+
)
|
|
102
|
+
UNION ALL
|
|
103
|
+
SELECT m.id, m.conversation, m.position, m.identity, m.${ACCEPTED}
|
|
104
|
+
FROM walk JOIN conversation_messages m ON m.id = (
|
|
105
|
+
SELECT n.id FROM conversation_messages n WHERE n.conversation = walk.conversation
|
|
106
|
+
AND (n.position < walk.position OR (n.position = walk.position AND n.identity < walk.identity))
|
|
107
|
+
${NEWER}
|
|
108
|
+
)
|
|
109
|
+
WHERE julianday(walk.at) >= julianday(?)
|
|
110
|
+
)
|
|
111
|
+
SELECT walk.conversation AS conversation, walk.at AS at
|
|
112
|
+
FROM walk JOIN conversation_messages m ON m.id = walk.id
|
|
113
|
+
WHERE m.message ->> '$.role' IN ('user', 'assistant') AND julianday(walk.at) >= julianday(?)`;
|
|
114
|
+
export function conversationTallies(connection, conversations, since) {
|
|
115
|
+
const named = conversations ??
|
|
116
|
+
connection
|
|
117
|
+
.rows('SELECT DISTINCT conversation FROM conversation_messages')
|
|
118
|
+
.map((row) => String(row.conversation));
|
|
119
|
+
const from = instantKey(since);
|
|
120
|
+
const said = new Map();
|
|
121
|
+
for (const row of connection.rows(SAID, [JSON.stringify(named), since, since])) {
|
|
122
|
+
const at = instantKey(row.at);
|
|
123
|
+
if (at === null || at < from)
|
|
124
|
+
continue;
|
|
125
|
+
const conversation = String(row.conversation);
|
|
126
|
+
said.set(conversation, [...(said.get(conversation) ?? []), at]);
|
|
127
|
+
}
|
|
128
|
+
return named.map((conversation) => ({ conversation, said: said.get(conversation) ?? [] }));
|
|
129
|
+
}
|
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"}
|
package/dist/validation.js
CHANGED
|
@@ -5,8 +5,7 @@ const NO_TYPES = { types: {} };
|
|
|
5
5
|
function modelOf(model) {
|
|
6
6
|
return model.status === 'unavailable' ? NO_TYPES : { types: model.types };
|
|
7
7
|
}
|
|
8
|
-
function typedText(
|
|
9
|
-
const read = parse(content);
|
|
8
|
+
function typedText(read) {
|
|
10
9
|
return read.ok && read.document.type !== undefined && read.document.type !== 'any';
|
|
11
10
|
}
|
|
12
11
|
function partVerdict(part) {
|
|
@@ -28,10 +27,14 @@ export async function validatedCollection(walk, lookup, composition) {
|
|
|
28
27
|
if (content === null)
|
|
29
28
|
continue;
|
|
30
29
|
const part = partOf(path);
|
|
31
|
-
|
|
30
|
+
const parsed = parse(content, path);
|
|
31
|
+
if (part.model.status === 'unavailable' && part.unmodeled === null && typedText(parsed)) {
|
|
32
32
|
part.unmodeled = path;
|
|
33
33
|
}
|
|
34
|
-
const assessment = assess(path,
|
|
34
|
+
const assessment = assess(path, parsed, false, modelOf(part.model), {
|
|
35
|
+
anyRoom: true,
|
|
36
|
+
typedPaths: composition.typedPaths,
|
|
37
|
+
});
|
|
35
38
|
assessed.push({ part, assessment });
|
|
36
39
|
await pace(content.length + assessment.targets.length * ROW_WEIGHT);
|
|
37
40
|
}
|
package/dist/windows.d.ts
CHANGED
|
@@ -1,22 +1,11 @@
|
|
|
1
1
|
export declare const MAXIMUM_WINDOW = 1000;
|
|
2
|
-
export declare const FROM_START
|
|
2
|
+
export declare const FROM_START: string;
|
|
3
3
|
export declare function capped(limit: number | null | undefined): number;
|
|
4
|
-
export type Ordering = {
|
|
5
|
-
readonly direction: 'asc' | 'desc';
|
|
6
|
-
readonly nulls: 'first' | 'last';
|
|
7
|
-
readonly stringSort: 'lexical' | 'locale';
|
|
8
|
-
readonly locale: string | undefined;
|
|
9
|
-
readonly localeOptions: Intl.CollatorOptions | undefined;
|
|
10
|
-
};
|
|
11
4
|
interface Placed {
|
|
12
5
|
readonly position: string;
|
|
13
6
|
readonly identity: string;
|
|
14
7
|
}
|
|
15
8
|
export declare function messageOrder(left: Placed, right: Placed): number;
|
|
16
9
|
export declare function precedes(message: Placed, before: readonly [string, string] | null): boolean;
|
|
17
|
-
export declare function byCodePoint(left: string, right: string): number;
|
|
18
|
-
export declare function compared(left: unknown, right: unknown, ordering: Ordering): number;
|
|
19
|
-
export declare function cursorOf(values: readonly unknown[]): string;
|
|
20
|
-
export declare function decodedCursor(text: string): readonly unknown[] | null;
|
|
21
10
|
export {};
|
|
22
11
|
//# sourceMappingURL=windows.d.ts.map
|
package/dist/windows.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windows.d.ts","sourceRoot":"","sources":["../src/windows.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"windows.d.ts","sourceRoot":"","sources":["../src/windows.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC,eAAO,MAAM,UAAU,QAAe,CAAC;AAEvC,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAE/D;AAED,UAAU,MAAM;IACd,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,OAAO,CAE3F"}
|