@agentshouse/mdruntime 0.1.0-cd3ee807e46ae → 0.1.0-cd507e16e5fc0
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 +19 -16
- package/dist/acceptance.d.ts +6 -0
- package/dist/acceptance.d.ts.map +1 -0
- package/dist/acceptance.js +389 -0
- package/dist/actions.d.ts +20 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +251 -0
- package/dist/adapter.d.ts +157 -57
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +7 -10
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +40 -41
- package/dist/attempt.d.ts.map +1 -1
- package/dist/attempt.js +14 -1
- package/dist/binary.d.ts +0 -5
- package/dist/binary.d.ts.map +1 -1
- package/dist/binary.js +1 -1
- package/dist/bootstrap.d.ts +31 -11
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +324 -89
- package/dist/cell.d.ts +6 -0
- package/dist/cell.d.ts.map +1 -0
- package/dist/cell.js +9 -0
- package/dist/chain.d.ts +12 -0
- package/dist/chain.d.ts.map +1 -0
- package/dist/chain.js +64 -0
- package/dist/change-set.d.ts +9 -14
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +11 -63
- package/dist/change.d.ts +32 -1
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +10 -1
- package/dist/chat-types.d.ts +5 -0
- package/dist/chat-types.d.ts.map +1 -0
- package/dist/chat-types.js +13 -0
- package/dist/client.d.ts +43 -16
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +101 -12
- package/dist/collection.d.ts +11 -7
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +38 -79
- package/dist/compile.d.ts +16 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +717 -0
- package/dist/connection.d.ts +8 -116
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +104 -2410
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/{chat/context.js → context.js} +1 -4
- package/dist/conversation-live.d.ts +136 -0
- package/dist/conversation-live.d.ts.map +1 -0
- package/dist/conversation-live.js +248 -0
- package/dist/conversation-row.d.ts +33 -0
- package/dist/conversation-row.d.ts.map +1 -0
- package/dist/conversation-row.js +53 -0
- package/dist/conversation.d.ts +57 -40
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +992 -543
- package/dist/digest.d.ts +7 -0
- package/dist/digest.d.ts.map +1 -0
- package/dist/digest.js +113 -0
- package/dist/discovery.d.ts +10 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +175 -0
- package/dist/durability.d.ts +19 -1
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +5 -0
- package/dist/entry.d.ts +20 -0
- package/dist/entry.d.ts.map +1 -0
- package/dist/entry.js +161 -0
- package/dist/figures.d.ts +49 -0
- package/dist/figures.d.ts.map +1 -0
- package/dist/figures.js +197 -0
- package/dist/file.d.ts +2 -19
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +7 -122
- package/dist/holdings.d.ts +29 -0
- package/dist/holdings.d.ts.map +1 -0
- package/dist/holdings.js +95 -0
- package/dist/host.d.ts +12 -3
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +130 -20
- package/dist/index.d.ts +34 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/install.d.ts +56 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +556 -0
- package/dist/job.d.ts +33 -0
- package/dist/job.d.ts.map +1 -0
- package/dist/job.js +54 -0
- package/dist/lifecycle.d.ts +7 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +268 -0
- package/dist/listing.d.ts +53 -0
- package/dist/listing.d.ts.map +1 -0
- package/dist/listing.js +176 -0
- package/dist/live.d.ts +23 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/live.js +165 -0
- package/dist/locks.d.ts +9 -0
- package/dist/locks.d.ts.map +1 -0
- package/dist/locks.js +61 -0
- package/dist/log.d.ts +1 -0
- package/dist/log.d.ts.map +1 -1
- package/dist/lost.d.ts +5 -0
- package/dist/lost.d.ts.map +1 -0
- package/dist/lost.js +61 -0
- package/dist/media.d.ts +8 -0
- package/dist/media.d.ts.map +1 -0
- package/dist/media.js +218 -0
- package/dist/memory.d.ts +19 -5
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +254 -94
- package/dist/messages.d.ts +52 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +168 -0
- package/dist/model.d.ts +11 -11
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +7 -10
- package/dist/models.d.ts +14 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +195 -0
- package/dist/name.d.ts +4 -0
- package/dist/name.d.ts.map +1 -0
- package/dist/name.js +122 -0
- package/dist/observation.d.ts +22 -4
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +120 -14
- package/dist/opened.d.ts +22 -0
- package/dist/opened.d.ts.map +1 -0
- package/dist/opened.js +107 -0
- package/dist/opening.d.ts +4 -0
- package/dist/opening.d.ts.map +1 -0
- package/dist/opening.js +57 -0
- package/dist/outcome.d.ts +53 -8
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +43 -0
- package/dist/overlay.d.ts +4 -4
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +111 -182
- package/dist/{chat/parts.d.ts → parts.d.ts} +11 -9
- package/dist/parts.d.ts.map +1 -0
- package/dist/{chat/parts.js → parts.js} +45 -46
- package/dist/paths.d.ts +2 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +26 -0
- package/dist/preparation.d.ts +20 -0
- package/dist/preparation.d.ts.map +1 -0
- package/dist/preparation.js +226 -0
- package/dist/queries.d.ts +16 -0
- package/dist/queries.d.ts.map +1 -0
- package/dist/queries.js +272 -0
- package/dist/query.d.ts +50 -183
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +3 -464
- package/dist/{chat/questions.d.ts → questions.d.ts} +5 -2
- package/dist/questions.d.ts.map +1 -0
- package/dist/{chat/questions.js → questions.js} +12 -1
- package/dist/reach.d.ts +21 -7
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +289 -89
- package/dist/react.d.ts +16 -6
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +7 -17
- package/dist/{chat/read.d.ts → read.d.ts} +2 -0
- package/dist/read.d.ts.map +1 -0
- package/dist/{chat/read.js → read.js} +4 -0
- package/dist/readiness.d.ts +49 -0
- package/dist/readiness.d.ts.map +1 -0
- package/dist/readiness.js +27 -0
- package/dist/reads.d.ts +37 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +171 -0
- package/dist/recovery.d.ts +26 -0
- package/dist/recovery.d.ts.map +1 -0
- package/dist/recovery.js +232 -0
- package/dist/refresh.d.ts +17 -14
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +143 -51
- package/dist/refusal.d.ts +5 -0
- package/dist/refusal.d.ts.map +1 -0
- package/dist/refusal.js +56 -0
- package/dist/replica.d.ts +56 -33
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +333 -154
- package/dist/room-draft.d.ts +37 -6
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +161 -74
- package/dist/room-drafts.d.ts +24 -0
- package/dist/room-drafts.d.ts.map +1 -0
- package/dist/room-drafts.js +216 -0
- package/dist/rows.d.ts +30 -37
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +59 -126
- package/dist/runtime.d.ts +43 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +1 -0
- package/dist/save.d.ts +56 -9
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +548 -174
- package/dist/saves.d.ts +70 -0
- package/dist/saves.d.ts.map +1 -0
- package/dist/saves.js +1008 -0
- package/dist/search.d.ts +15 -55
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +10 -121
- package/dist/seed.d.ts +25 -0
- package/dist/seed.d.ts.map +1 -0
- package/dist/seed.js +146 -0
- package/dist/shared.d.ts +15 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +425 -0
- package/dist/shown.d.ts +31 -0
- package/dist/shown.d.ts.map +1 -0
- package/dist/shown.js +295 -0
- package/dist/socket/admission.d.ts +7 -0
- package/dist/socket/admission.d.ts.map +1 -0
- package/dist/socket/admission.js +39 -0
- package/dist/socket/answers.d.ts +6 -0
- package/dist/socket/answers.d.ts.map +1 -0
- package/dist/socket/answers.js +20 -0
- package/dist/socket/lanes.d.ts +20 -0
- package/dist/socket/lanes.d.ts.map +1 -0
- package/dist/socket/lanes.js +77 -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/rooms.d.ts +44 -0
- package/dist/socket/rooms.d.ts.map +1 -0
- package/dist/socket/rooms.js +90 -0
- package/dist/socket/session.d.ts +39 -0
- package/dist/socket/session.d.ts.map +1 -0
- package/dist/socket/session.js +23 -0
- package/dist/socket.d.ts +70 -0
- package/dist/socket.d.ts.map +1 -0
- package/dist/socket.js +175 -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 +5 -2
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +3 -7
- 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/readiness.d.ts +10 -0
- package/dist/store/readiness.d.ts.map +1 -0
- package/dist/store/readiness.js +52 -0
- package/dist/store/records.d.ts +212 -0
- package/dist/store/records.d.ts.map +1 -0
- package/dist/store/records.js +431 -0
- package/dist/store/room-held.d.ts +8 -0
- package/dist/store/room-held.d.ts.map +1 -0
- package/dist/store/room-held.js +17 -0
- package/dist/store/space.d.ts +11 -0
- package/dist/store/space.d.ts.map +1 -0
- package/dist/store/space.js +43 -0
- package/dist/store/watchers.d.ts +17 -0
- package/dist/store/watchers.d.ts.map +1 -0
- package/dist/store/watchers.js +57 -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 +106 -117
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +138 -490
- package/dist/stored.d.ts +156 -0
- package/dist/stored.d.ts.map +1 -0
- package/dist/stored.js +649 -0
- package/dist/surface.d.ts +88 -0
- package/dist/surface.d.ts.map +1 -0
- package/dist/surface.js +223 -0
- package/dist/sync.d.ts +19 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +532 -0
- package/dist/tables.d.ts +417 -0
- package/dist/tables.d.ts.map +1 -0
- package/dist/tables.js +740 -0
- package/dist/tallies.d.ts +18 -0
- package/dist/tallies.d.ts.map +1 -0
- package/dist/tallies.js +129 -0
- package/dist/transfer.d.ts +0 -5
- package/dist/transfer.d.ts.map +1 -1
- package/dist/turn.d.ts +9 -0
- package/dist/turn.d.ts.map +1 -0
- package/dist/turn.js +75 -0
- package/dist/validation.d.ts +29 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +104 -0
- package/dist/windows.d.ts +11 -0
- package/dist/windows.d.ts.map +1 -0
- package/dist/windows.js +16 -0
- package/dist/wire.d.ts +181 -33
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +62 -31
- package/package.json +22 -19
- package/AGENTS.md +0 -318
- package/dist/chat/acts.d.ts +0 -34
- package/dist/chat/acts.d.ts.map +0 -1
- package/dist/chat/acts.js +0 -36
- package/dist/chat/context.d.ts +0 -3
- package/dist/chat/context.d.ts.map +0 -1
- package/dist/chat/input.d.ts +0 -9
- package/dist/chat/input.d.ts.map +0 -1
- package/dist/chat/input.js +0 -99
- package/dist/chat/kit.d.ts +0 -60
- package/dist/chat/kit.d.ts.map +0 -1
- package/dist/chat/kit.js +0 -123
- package/dist/chat/lasting.d.ts +0 -6
- package/dist/chat/lasting.d.ts.map +0 -1
- package/dist/chat/lasting.js +0 -19
- package/dist/chat/list.d.ts +0 -20
- package/dist/chat/list.d.ts.map +0 -1
- package/dist/chat/list.js +0 -59
- package/dist/chat/markdown.d.ts +0 -19
- package/dist/chat/markdown.d.ts.map +0 -1
- package/dist/chat/markdown.js +0 -187
- package/dist/chat/message.d.ts +0 -6
- package/dist/chat/message.d.ts.map +0 -1
- package/dist/chat/message.js +0 -192
- package/dist/chat/messages.d.ts +0 -21
- package/dist/chat/messages.d.ts.map +0 -1
- package/dist/chat/messages.js +0 -151
- package/dist/chat/name.d.ts +0 -6
- package/dist/chat/name.d.ts.map +0 -1
- package/dist/chat/name.js +0 -37
- package/dist/chat/opened.d.ts +0 -11
- package/dist/chat/opened.d.ts.map +0 -1
- package/dist/chat/opened.js +0 -17
- package/dist/chat/overlay.d.ts +0 -31
- package/dist/chat/overlay.d.ts.map +0 -1
- package/dist/chat/overlay.js +0 -97
- package/dist/chat/parts.d.ts.map +0 -1
- package/dist/chat/process.d.ts +0 -20
- package/dist/chat/process.d.ts.map +0 -1
- package/dist/chat/process.js +0 -32
- package/dist/chat/provider.d.ts +0 -63
- package/dist/chat/provider.d.ts.map +0 -1
- package/dist/chat/provider.js +0 -645
- package/dist/chat/question.d.ts +0 -9
- package/dist/chat/question.d.ts.map +0 -1
- package/dist/chat/question.js +0 -80
- package/dist/chat/questions.d.ts.map +0 -1
- package/dist/chat/read.d.ts.map +0 -1
- package/dist/chat/ready.d.ts +0 -33
- package/dist/chat/ready.d.ts.map +0 -1
- package/dist/chat/ready.js +0 -91
- package/dist/chat/style.d.ts +0 -4
- package/dist/chat/style.d.ts.map +0 -1
- package/dist/chat/style.js +0 -302
- package/dist/chat.d.ts +0 -14
- package/dist/chat.d.ts.map +0 -1
- package/dist/chat.js +0 -8
- package/dist/read-side.d.ts +0 -18
- package/dist/read-side.d.ts.map +0 -1
- package/dist/read-side.js +0 -440
package/dist/memory.js
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
|
+
import { documentFacts, parse } from '@agentshouse/mdmodel';
|
|
2
|
+
import { NO_ROOM_TYPES, schemaTypes } from './attached-model.js';
|
|
1
3
|
import { sameChange } from './overlay.js';
|
|
4
|
+
const ATTACHMENTS = 'attachments';
|
|
5
|
+
function lastName(path) {
|
|
6
|
+
return path.slice(path.lastIndexOf('/') + 1);
|
|
7
|
+
}
|
|
2
8
|
const FIXTURE_RETENTION = {
|
|
3
9
|
history: { kind: 'duration', seconds: 1 },
|
|
4
|
-
outcome: 1,
|
|
5
10
|
refreshHorizon: 1,
|
|
6
11
|
};
|
|
7
12
|
function declaredRetention(value) {
|
|
@@ -15,12 +20,7 @@ function declaredRetention(value) {
|
|
|
15
20
|
}
|
|
16
21
|
const MODEL_ABSENT = { kind: 'model-unavailable', reason: 'not-readable' };
|
|
17
22
|
function modelsOf(room) {
|
|
18
|
-
return {
|
|
19
|
-
collection: room.model ?? MODEL_ABSENT,
|
|
20
|
-
...(room.typedSelection === undefined
|
|
21
|
-
? {}
|
|
22
|
-
: { selection: room.selectionModel ?? MODEL_ABSENT }),
|
|
23
|
-
};
|
|
23
|
+
return { collection: room.model ?? MODEL_ABSENT };
|
|
24
24
|
}
|
|
25
25
|
function changedModels(room, from) {
|
|
26
26
|
const now = modelsOf(room);
|
|
@@ -53,12 +53,16 @@ export function createMemoryAdapter(options = {}) {
|
|
|
53
53
|
const listeners = new Set();
|
|
54
54
|
const modeObservers = new Set();
|
|
55
55
|
const scripted = new Map();
|
|
56
|
-
const
|
|
57
|
-
const sealed = new Set();
|
|
56
|
+
const sentTurns = new Map();
|
|
58
57
|
const historyPageSize = options.historyPageSize;
|
|
59
|
-
|
|
58
|
+
const attached = new Map();
|
|
59
|
+
const linked = new WeakMap();
|
|
60
|
+
const carried = new Map();
|
|
60
61
|
let expiring = [];
|
|
62
|
+
let openings = 0;
|
|
63
|
+
const declaredRooms = new Set();
|
|
61
64
|
let replicated = [];
|
|
65
|
+
let heldCursor = null;
|
|
62
66
|
let issued = 0;
|
|
63
67
|
function scriptConversations(entries) {
|
|
64
68
|
scripted.clear();
|
|
@@ -86,8 +90,48 @@ export function createMemoryAdapter(options = {}) {
|
|
|
86
90
|
const wanted = ordinals.get(`${locator}\u0000${target}`);
|
|
87
91
|
return held !== undefined && wanted !== undefined && held >= wanted;
|
|
88
92
|
}
|
|
93
|
+
function heldBlob(room, path) {
|
|
94
|
+
return attached.get(`${room.locator}\u0000${path}`) ?? room.blobs?.[path];
|
|
95
|
+
}
|
|
96
|
+
function freePath(room, name) {
|
|
97
|
+
const dot = name.lastIndexOf('.');
|
|
98
|
+
const stem = dot > 0 ? name.slice(0, dot) : name;
|
|
99
|
+
const extension = dot > 0 ? name.slice(dot) : '';
|
|
100
|
+
for (let count = 1;; count += 1) {
|
|
101
|
+
const path = `${ATTACHMENTS}/${count === 1 ? stem : `${stem}-${count}`}${extension}`;
|
|
102
|
+
if (heldBlob(room, path) === undefined && room.documents?.[path] === undefined)
|
|
103
|
+
return path;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const saved = new WeakMap();
|
|
107
|
+
function factsAt(room, path, content) {
|
|
108
|
+
const types = schemaTypes(room.model?.kind === 'model' ? room.model.snapshot.schema : null, NO_ROOM_TYPES);
|
|
109
|
+
let held = saved.get(types);
|
|
110
|
+
if (held === undefined) {
|
|
111
|
+
held = new Map();
|
|
112
|
+
saved.set(types, held);
|
|
113
|
+
}
|
|
114
|
+
const key = `${path}\u0000${content}`;
|
|
115
|
+
if (!held.has(key)) {
|
|
116
|
+
const facts = documentFacts(path, parse(content, path), { types });
|
|
117
|
+
held.set(key, facts === null ? null : JSON.parse(JSON.stringify(facts)));
|
|
118
|
+
}
|
|
119
|
+
return held.get(key);
|
|
120
|
+
}
|
|
121
|
+
function factsIn(room, paths) {
|
|
122
|
+
const facts = {};
|
|
123
|
+
for (const path of paths) {
|
|
124
|
+
const content = room.documents?.[path];
|
|
125
|
+
const held = room.facts?.[path] ?? (content === undefined ? null : factsAt(room, path, content));
|
|
126
|
+
if (held !== null)
|
|
127
|
+
facts[path] = held;
|
|
128
|
+
}
|
|
129
|
+
return facts;
|
|
130
|
+
}
|
|
89
131
|
function retain(entries) {
|
|
90
132
|
for (const room of entries) {
|
|
133
|
+
for (const [path, content] of Object.entries(room.documents ?? {}))
|
|
134
|
+
factsAt(room, path, content);
|
|
91
135
|
note(room.locator, room);
|
|
92
136
|
const versions = served.get(room.locator) ?? new Map();
|
|
93
137
|
versions.set(room.roomVersion, room);
|
|
@@ -105,6 +149,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
105
149
|
replica: room.replica,
|
|
106
150
|
...(room.typedSelection === undefined ? {} : { typedSelection: room.typedSelection }),
|
|
107
151
|
providerOwnedPaths: room.providerOwnedPaths,
|
|
152
|
+
authoredPaths: room.authoredPaths,
|
|
108
153
|
};
|
|
109
154
|
}
|
|
110
155
|
function page(room, after) {
|
|
@@ -120,23 +165,43 @@ export function createMemoryAdapter(options = {}) {
|
|
|
120
165
|
roomVersion: room.roomVersion,
|
|
121
166
|
...(opening ? { models: modelsOf(room) } : {}),
|
|
122
167
|
documents: named(room.documents ?? {}, taken),
|
|
168
|
+
facts: factsIn(room, taken),
|
|
123
169
|
revisions: named(room.revisions ?? {}, [...taken, ...targets]),
|
|
170
|
+
...(room.fileIds === undefined
|
|
171
|
+
? {}
|
|
172
|
+
: { fileIds: named(room.fileIds, [...taken, ...targets]) }),
|
|
173
|
+
...(room.created === undefined
|
|
174
|
+
? {}
|
|
175
|
+
: { created: named(room.created, [...taken, ...targets]) }),
|
|
124
176
|
changes: named(room.changes ?? {}, [...taken, ...targets]),
|
|
125
177
|
binaryFiles: named(room.binaryFiles ?? {}, targets),
|
|
178
|
+
...(opening && room.folders !== undefined ? { folders: room.folders } : {}),
|
|
126
179
|
...(next < paths.length ? { pageToken: taken.at(-1) } : {}),
|
|
127
180
|
};
|
|
128
181
|
}
|
|
129
|
-
function
|
|
182
|
+
function foldersMoved(room, from) {
|
|
183
|
+
const now = new Set(room.folders ?? []);
|
|
184
|
+
const before = new Set(from.folders ?? []);
|
|
185
|
+
const folders = [...now].filter((folder) => !before.has(folder)).sort();
|
|
186
|
+
const folderRemovals = [...before].filter((folder) => !now.has(folder)).sort();
|
|
187
|
+
return {
|
|
188
|
+
...(folders.length === 0 ? {} : { folders }),
|
|
189
|
+
...(folderRemovals.length === 0 ? {} : { folderRemovals }),
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
function advancement(room, from, at, whole = false) {
|
|
130
193
|
const current = room.documents ?? {};
|
|
131
194
|
const previous = from.documents ?? {};
|
|
132
195
|
const currentTargets = new Set(Object.keys(room.binaryFiles ?? {}));
|
|
133
196
|
const previousTargets = new Set(Object.keys(from.binaryFiles ?? {}));
|
|
134
197
|
const headMoved = (path) => room.revisions?.[path] !== from.revisions?.[path] ||
|
|
198
|
+
room.fileIds?.[path] !== from.fileIds?.[path] ||
|
|
199
|
+
room.created?.[path] !== from.created?.[path] ||
|
|
135
200
|
!sameChange(room.changes?.[path], from.changes?.[path]);
|
|
136
201
|
const changed = Object.keys(current)
|
|
137
202
|
.filter((path) => current[path] !== previous[path] || headMoved(path))
|
|
138
203
|
.sort();
|
|
139
|
-
const size = pageSize ?? changed.length;
|
|
204
|
+
const size = whole ? changed.length : (pageSize ?? changed.length);
|
|
140
205
|
const taken = changed.slice(at, at + size);
|
|
141
206
|
const next = at + taken.length;
|
|
142
207
|
const opening = at === 0;
|
|
@@ -152,9 +217,17 @@ export function createMemoryAdapter(options = {}) {
|
|
|
152
217
|
roomVersion: room.roomVersion,
|
|
153
218
|
...(models === undefined ? {} : { models }),
|
|
154
219
|
documents: named(current, taken),
|
|
220
|
+
facts: factsIn(room, taken),
|
|
155
221
|
revisions: named(room.revisions ?? {}, [...taken, ...targets]),
|
|
222
|
+
...(room.fileIds === undefined
|
|
223
|
+
? {}
|
|
224
|
+
: { fileIds: named(room.fileIds, [...taken, ...targets]) }),
|
|
225
|
+
...(room.created === undefined
|
|
226
|
+
? {}
|
|
227
|
+
: { created: named(room.created, [...taken, ...targets]) }),
|
|
156
228
|
changes: named(room.changes ?? {}, [...taken, ...targets]),
|
|
157
229
|
binaryFiles: named(room.binaryFiles ?? {}, targets),
|
|
230
|
+
...(opening ? foldersMoved(room, from) : {}),
|
|
158
231
|
removals: opening
|
|
159
232
|
? [
|
|
160
233
|
...Object.keys(previous).filter((path) => !(path in current) && !currentTargets.has(path)),
|
|
@@ -164,6 +237,26 @@ export function createMemoryAdapter(options = {}) {
|
|
|
164
237
|
...(pageToken === undefined ? {} : { pageToken }),
|
|
165
238
|
};
|
|
166
239
|
}
|
|
240
|
+
function carry(locator) {
|
|
241
|
+
const at = carried.get(locator);
|
|
242
|
+
const current = rooms.find((entry) => entry.locator === locator);
|
|
243
|
+
if (at === undefined || current === undefined || current.roomVersion === at)
|
|
244
|
+
return;
|
|
245
|
+
const from = served.get(locator)?.get(at);
|
|
246
|
+
carried.set(locator, current.roomVersion);
|
|
247
|
+
if (from === undefined)
|
|
248
|
+
return;
|
|
249
|
+
const page = advancement(current, from, 0, true);
|
|
250
|
+
for (const observer of observers) {
|
|
251
|
+
observer({
|
|
252
|
+
kind: 'room-change',
|
|
253
|
+
locator,
|
|
254
|
+
from: at,
|
|
255
|
+
roomVersion: current.roomVersion,
|
|
256
|
+
read: async () => page,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
}
|
|
167
260
|
function pageOf(conversation, after) {
|
|
168
261
|
const messages = conversation.messages ?? [];
|
|
169
262
|
const first = typeof after === 'string' ? messages.findIndex((message) => message.position > after) : 0;
|
|
@@ -178,16 +271,13 @@ export function createMemoryAdapter(options = {}) {
|
|
|
178
271
|
: {}),
|
|
179
272
|
};
|
|
180
273
|
}
|
|
181
|
-
function historiesOf(
|
|
182
|
-
const asked = input?.conversations;
|
|
183
|
-
if (!Array.isArray(asked))
|
|
184
|
-
return { kind: 'rejected', code: 'invalid_request', fields: {}, retryable: false };
|
|
274
|
+
function historiesOf(request) {
|
|
185
275
|
const histories = [];
|
|
186
|
-
for (const entry of
|
|
187
|
-
const conversation =
|
|
276
|
+
for (const entry of request.conversations) {
|
|
277
|
+
const conversation = scripted.get(entry.conversation);
|
|
188
278
|
if (conversation === undefined)
|
|
189
279
|
continue;
|
|
190
|
-
const outcome = conversation.outcomes?.
|
|
280
|
+
const outcome = conversation.outcomes?.history;
|
|
191
281
|
if (outcome !== undefined)
|
|
192
282
|
return outcome;
|
|
193
283
|
histories.push(pageOf(conversation, entry.after));
|
|
@@ -198,15 +288,13 @@ export function createMemoryAdapter(options = {}) {
|
|
|
198
288
|
function conversationAction(request) {
|
|
199
289
|
const name = request.name;
|
|
200
290
|
const input = (request.input ?? {});
|
|
201
|
-
if (name === '
|
|
202
|
-
return historiesOf(request.input);
|
|
203
|
-
if (name === 'conversation.create') {
|
|
291
|
+
if (name === 'conversations/create') {
|
|
204
292
|
issued += 1;
|
|
205
293
|
const conversation = `conversation-${issued}`;
|
|
206
294
|
scripted.set(conversation, { conversation });
|
|
207
|
-
return { kind: 'action', result: { conversation } };
|
|
295
|
+
return { kind: 'action', result: { conversation_id: conversation } };
|
|
208
296
|
}
|
|
209
|
-
const named = typeof input.
|
|
297
|
+
const named = typeof input.conversation_id === 'string' ? input.conversation_id : '';
|
|
210
298
|
const conversation = scripted.get(named);
|
|
211
299
|
if (conversation === undefined) {
|
|
212
300
|
return {
|
|
@@ -219,28 +307,28 @@ export function createMemoryAdapter(options = {}) {
|
|
|
219
307
|
const outcome = conversation.outcomes?.[name];
|
|
220
308
|
if (outcome !== undefined)
|
|
221
309
|
return outcome;
|
|
222
|
-
if (name === '
|
|
310
|
+
if (name === 'conversations/send') {
|
|
311
|
+
const operation = typeof input.operation_id === 'string' ? input.operation_id : null;
|
|
312
|
+
const answered = operation === null ? undefined : sentTurns.get(operation);
|
|
313
|
+
if (answered !== undefined)
|
|
314
|
+
return { kind: 'action', result: { message_id: answered } };
|
|
223
315
|
issued += 1;
|
|
224
316
|
const turn = `turn-${issued}`;
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
if (name === 'conversation.cancel') {
|
|
229
|
-
const turn = typeof input.turn === 'string' ? input.turn : '';
|
|
230
|
-
if (sealed.has(turn) || !unsealed.has(turn)) {
|
|
231
|
-
return { kind: 'rejected', code: 'turn-sealed', fields: { turn }, retryable: false };
|
|
232
|
-
}
|
|
233
|
-
unsealed.delete(turn);
|
|
234
|
-
return { kind: 'action', result: { turn, cancelled: true } };
|
|
317
|
+
if (operation !== null)
|
|
318
|
+
sentTurns.set(operation, turn);
|
|
319
|
+
return { kind: 'action', result: { message_id: turn } };
|
|
235
320
|
}
|
|
236
|
-
if (name === '
|
|
321
|
+
if (name === 'conversations/delete')
|
|
237
322
|
scripted.delete(named);
|
|
238
|
-
return { kind: 'action', result: {
|
|
323
|
+
return { kind: 'action', result: { conversation_id: named } };
|
|
239
324
|
}
|
|
240
325
|
function announceList() {
|
|
241
|
-
const entries = [...scripted.values()].flatMap(({ conversation, listed }) => listed === undefined
|
|
242
|
-
|
|
243
|
-
|
|
326
|
+
const entries = [...scripted.values()].flatMap(({ conversation, listed, messages = [] }) => listed === undefined
|
|
327
|
+
? []
|
|
328
|
+
: [{ conversation, ...listed, newest: messages.at(-1)?.position ?? null }]);
|
|
329
|
+
for (const listener of listeners) {
|
|
330
|
+
listener({ kind: 'list', entries, whole: true, more: false, cursor: null });
|
|
331
|
+
}
|
|
244
332
|
}
|
|
245
333
|
function discovery() {
|
|
246
334
|
return {
|
|
@@ -252,7 +340,42 @@ export function createMemoryAdapter(options = {}) {
|
|
|
252
340
|
...(options.member === undefined ? {} : { member: options.member }),
|
|
253
341
|
};
|
|
254
342
|
}
|
|
343
|
+
function discovered() {
|
|
344
|
+
return resolveScript(scripts.discover, discovery, undefined).then((answer) => {
|
|
345
|
+
if (answer.kind === 'discovery')
|
|
346
|
+
for (const room of answer.rooms)
|
|
347
|
+
note(room.locator, room);
|
|
348
|
+
return answer;
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
function opened(notify) {
|
|
352
|
+
const opening = ++openings;
|
|
353
|
+
notify({ kind: 'opened' });
|
|
354
|
+
void discovered()
|
|
355
|
+
.catch(() => ({ kind: 'transport-uncertainty' }))
|
|
356
|
+
.then((answer) => {
|
|
357
|
+
if (opening !== openings)
|
|
358
|
+
return;
|
|
359
|
+
if (answer.kind !== 'discovery') {
|
|
360
|
+
openings += 1;
|
|
361
|
+
carried.clear();
|
|
362
|
+
const revoked = answer.kind === 'revoked-authorization';
|
|
363
|
+
notify({ kind: 'closed', revoked, lost: !revoked, authorityChanged: false });
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
declaredRooms.clear();
|
|
367
|
+
for (const room of answer.rooms)
|
|
368
|
+
declaredRooms.add(room.locator);
|
|
369
|
+
notify({ kind: 'discovered', discovery: answer });
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
function emitAll(event) {
|
|
373
|
+
for (const observer of observers)
|
|
374
|
+
observer(event);
|
|
375
|
+
}
|
|
255
376
|
return {
|
|
377
|
+
...(options.roomTypes === undefined ? {} : { roomTypes: options.roomTypes }),
|
|
378
|
+
...(options.typedPaths === undefined ? {} : { typedPaths: options.typedPaths }),
|
|
256
379
|
setRooms(next) {
|
|
257
380
|
rooms = [...next];
|
|
258
381
|
retain(rooms);
|
|
@@ -261,26 +384,37 @@ export function createMemoryAdapter(options = {}) {
|
|
|
261
384
|
scriptConversations(next);
|
|
262
385
|
},
|
|
263
386
|
open() {
|
|
387
|
+
carried.clear();
|
|
264
388
|
announceList();
|
|
265
|
-
|
|
266
|
-
observer({ kind: 'opened' });
|
|
389
|
+
opened(emitAll);
|
|
267
390
|
},
|
|
268
|
-
close(revoked = false) {
|
|
269
|
-
|
|
270
|
-
|
|
391
|
+
close({ revoked = false, lost = !revoked, authorityChanged = false } = {}) {
|
|
392
|
+
openings += 1;
|
|
393
|
+
carried.clear();
|
|
394
|
+
emitAll({ kind: 'closed', revoked, lost, authorityChanged });
|
|
271
395
|
},
|
|
272
396
|
expire(locators) {
|
|
273
397
|
expiring = [...locators];
|
|
274
398
|
},
|
|
275
|
-
notifyRoomVersion({ locator
|
|
276
|
-
|
|
277
|
-
|
|
399
|
+
notifyRoomVersion({ locator }) {
|
|
400
|
+
carry(locator);
|
|
401
|
+
},
|
|
402
|
+
notifyAuthorityChanged(locators) {
|
|
403
|
+
const named = new Set(locators ?? [...declaredRooms, ...rooms.map((room) => room.locator)]);
|
|
404
|
+
const listed = rooms.filter((room) => named.has(room.locator));
|
|
405
|
+
const left = [...named].filter((locator) => !listed.some((room) => room.locator === locator));
|
|
406
|
+
for (const room of listed)
|
|
407
|
+
declaredRooms.add(room.locator);
|
|
408
|
+
for (const locator of left)
|
|
409
|
+
declaredRooms.delete(locator);
|
|
410
|
+
emitAll({
|
|
411
|
+
kind: 'authority-changed',
|
|
412
|
+
rooms: listed.map(declared),
|
|
413
|
+
left,
|
|
414
|
+
...(options.member === undefined ? {} : { member: options.member }),
|
|
415
|
+
});
|
|
278
416
|
},
|
|
279
417
|
notifyConversation(event) {
|
|
280
|
-
if (event.kind === 'accepted-message') {
|
|
281
|
-
sealed.add(event.message.turn);
|
|
282
|
-
unsealed.delete(event.message.turn);
|
|
283
|
-
}
|
|
284
418
|
for (const listener of listeners)
|
|
285
419
|
listener(event);
|
|
286
420
|
},
|
|
@@ -289,21 +423,31 @@ export function createMemoryAdapter(options = {}) {
|
|
|
289
423
|
observer(mode);
|
|
290
424
|
},
|
|
291
425
|
heldRooms() {
|
|
292
|
-
return
|
|
426
|
+
return [...carried.keys()].sort();
|
|
293
427
|
},
|
|
294
428
|
replicatedConversations() {
|
|
295
429
|
return replicated;
|
|
296
430
|
},
|
|
431
|
+
heldConversationCursor() {
|
|
432
|
+
return heldCursor;
|
|
433
|
+
},
|
|
297
434
|
conversations: {
|
|
298
435
|
replicate(next) {
|
|
299
436
|
replicated = [...next];
|
|
300
437
|
},
|
|
438
|
+
hold(cursor) {
|
|
439
|
+
heldCursor = cursor;
|
|
440
|
+
},
|
|
301
441
|
observe(notify) {
|
|
302
442
|
listeners.add(notify);
|
|
303
443
|
return () => {
|
|
304
444
|
listeners.delete(notify);
|
|
305
445
|
};
|
|
306
446
|
},
|
|
447
|
+
history: (request) => Promise.resolve(historiesOf(request)),
|
|
448
|
+
...(options.agents === undefined
|
|
449
|
+
? {}
|
|
450
|
+
: { agents: () => Promise.resolve(structuredClone(options.agents)) }),
|
|
307
451
|
},
|
|
308
452
|
serviceMode: {
|
|
309
453
|
observe(notify) {
|
|
@@ -315,29 +459,30 @@ export function createMemoryAdapter(options = {}) {
|
|
|
315
459
|
},
|
|
316
460
|
roomStream: {
|
|
317
461
|
hold(asked) {
|
|
318
|
-
|
|
319
|
-
const
|
|
320
|
-
expiring = [];
|
|
321
|
-
const moved = asked.flatMap((room) => {
|
|
462
|
+
const named = asked.map((room) => room.locator);
|
|
463
|
+
const unknown = asked.flatMap((room) => {
|
|
322
464
|
const current = rooms.find((entry) => entry.locator === room.locator);
|
|
465
|
+
const version = room.roomVersion;
|
|
323
466
|
return current === undefined ||
|
|
324
|
-
|
|
325
|
-
|
|
467
|
+
(version !== null &&
|
|
468
|
+
(current.roomVersion === version || served.get(room.locator)?.has(version) === true))
|
|
326
469
|
? []
|
|
327
|
-
: [
|
|
470
|
+
: [room.locator];
|
|
328
471
|
});
|
|
472
|
+
const expired = [
|
|
473
|
+
...new Set([...expiring.filter((locator) => named.includes(locator)), ...unknown]),
|
|
474
|
+
];
|
|
475
|
+
expiring = expiring.filter((locator) => !named.includes(locator));
|
|
329
476
|
queueMicrotask(() => {
|
|
330
|
-
for (const
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
477
|
+
for (const room of asked) {
|
|
478
|
+
if (expired.includes(room.locator) || room.roomVersion === null)
|
|
479
|
+
carried.delete(room.locator);
|
|
480
|
+
else {
|
|
481
|
+
carried.set(room.locator, room.roomVersion);
|
|
482
|
+
carry(room.locator);
|
|
483
|
+
}
|
|
334
484
|
}
|
|
335
|
-
|
|
336
|
-
},
|
|
337
|
-
reopen() {
|
|
338
|
-
queueMicrotask(() => {
|
|
339
|
-
for (const observer of observers)
|
|
340
|
-
observer({ kind: 'closed', revoked: false });
|
|
485
|
+
emitAll({ kind: 'caught-up', expired });
|
|
341
486
|
});
|
|
342
487
|
},
|
|
343
488
|
observe(notify) {
|
|
@@ -346,11 +491,14 @@ export function createMemoryAdapter(options = {}) {
|
|
|
346
491
|
if (!observers.has(notify))
|
|
347
492
|
return;
|
|
348
493
|
if (options.unopened === true) {
|
|
349
|
-
notify({ kind: 'closed', revoked: false });
|
|
494
|
+
notify({ kind: 'closed', revoked: false, lost: true, authorityChanged: false });
|
|
350
495
|
return;
|
|
351
496
|
}
|
|
352
497
|
announceList();
|
|
353
|
-
|
|
498
|
+
opened((event) => {
|
|
499
|
+
if (observers.has(notify))
|
|
500
|
+
notify(event);
|
|
501
|
+
});
|
|
354
502
|
});
|
|
355
503
|
return () => {
|
|
356
504
|
observers.delete(notify);
|
|
@@ -367,12 +515,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
367
515
|
return resolveScript(scripts.authorize, () => ({}), undefined);
|
|
368
516
|
},
|
|
369
517
|
async discover(_authorization) {
|
|
370
|
-
return
|
|
371
|
-
if (answer.kind === 'discovery')
|
|
372
|
-
for (const room of answer.rooms)
|
|
373
|
-
note(room.locator, room);
|
|
374
|
-
return answer;
|
|
375
|
-
});
|
|
518
|
+
return discovered();
|
|
376
519
|
},
|
|
377
520
|
reached,
|
|
378
521
|
follows(locator, roomVersion, next) {
|
|
@@ -429,7 +572,13 @@ export function createMemoryAdapter(options = {}) {
|
|
|
429
572
|
retryable: false,
|
|
430
573
|
affected: {},
|
|
431
574
|
};
|
|
432
|
-
}, request).then((answer) =>
|
|
575
|
+
}, request).then((answer) => {
|
|
576
|
+
const destination = request.changeBatch.between?.destination.room;
|
|
577
|
+
if (answer.kind === 'accepted' && answer.destination !== undefined && destination) {
|
|
578
|
+
note(destination, answer.destination);
|
|
579
|
+
}
|
|
580
|
+
return note(request.locator, answer);
|
|
581
|
+
});
|
|
433
582
|
},
|
|
434
583
|
async history(_authorization, request) {
|
|
435
584
|
return resolveScript(scripts.history, () => {
|
|
@@ -445,31 +594,42 @@ export function createMemoryAdapter(options = {}) {
|
|
|
445
594
|
},
|
|
446
595
|
async binary(_authorization, request) {
|
|
447
596
|
return resolveScript(scripts.binary, () => {
|
|
448
|
-
if (request.kind === 'reference') {
|
|
449
|
-
return { kind: 'rejected', code: 'unscripted-binary', fields: {}, retryable: false };
|
|
450
|
-
}
|
|
451
597
|
const room = rooms.find((entry) => entry.locator === request.locator);
|
|
452
598
|
if (room === undefined)
|
|
453
599
|
return { kind: 'room-not-readable', locator: request.locator };
|
|
454
|
-
const blob = room
|
|
600
|
+
const blob = heldBlob(room, request.path);
|
|
455
601
|
return blob === undefined
|
|
456
602
|
? { kind: 'rejected', code: 'file_not_found', fields: {}, retryable: false }
|
|
457
|
-
: { kind: 'binary', blob };
|
|
603
|
+
: { kind: 'binary', body: blob.stream(), mediaType: blob.type };
|
|
604
|
+
}, request);
|
|
605
|
+
},
|
|
606
|
+
async link(_authorization, request) {
|
|
607
|
+
return resolveScript(scripts.link, () => {
|
|
608
|
+
const room = rooms.find((entry) => entry.locator === request.locator);
|
|
609
|
+
if (room === undefined)
|
|
610
|
+
return { kind: 'room-not-readable', locator: request.locator };
|
|
611
|
+
const blob = heldBlob(room, request.path);
|
|
612
|
+
if (blob === undefined) {
|
|
613
|
+
return { kind: 'rejected', code: 'file_not_found', fields: {}, retryable: false };
|
|
614
|
+
}
|
|
615
|
+
const url = linked.get(blob) ?? URL.createObjectURL(blob);
|
|
616
|
+
linked.set(blob, url);
|
|
617
|
+
return { kind: 'link', url, name: lastName(request.path), mediaType: blob.type };
|
|
458
618
|
}, request);
|
|
459
619
|
},
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
return
|
|
468
|
-
|
|
620
|
+
async attach(_authorization, request) {
|
|
621
|
+
return resolveScript(scripts.attach, () => {
|
|
622
|
+
const room = rooms.find((entry) => entry.locator === request.locator);
|
|
623
|
+
if (room === undefined)
|
|
624
|
+
return { kind: 'room-not-readable', locator: request.locator };
|
|
625
|
+
const path = freePath(room, request.name);
|
|
626
|
+
attached.set(`${room.locator}\u0000${path}`, request.blob);
|
|
627
|
+
return { kind: 'attached', path, revision: `attached-${attached.size}` };
|
|
628
|
+
}, request);
|
|
469
629
|
},
|
|
470
630
|
async action(_authorization, request) {
|
|
471
631
|
return resolveScript(scripts.action, () => {
|
|
472
|
-
if (request.name.startsWith('
|
|
632
|
+
if (request.name.startsWith('conversations/'))
|
|
473
633
|
return conversationAction(request);
|
|
474
634
|
return { kind: 'rejected', code: 'unscripted-action', fields: {}, retryable: false };
|
|
475
635
|
}, request).then((answer) => {
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { AcceptedMessage } from './adapter.js';
|
|
2
|
+
import type { JobMarker } from './job.js';
|
|
3
|
+
import type { Connection } from './tables.js';
|
|
4
|
+
export declare const MESSAGE_TABLES: readonly string[];
|
|
5
|
+
export declare const ROWS = "WITH chosen AS (\n SELECT listed.value AS conversation,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND json_extract(message, '$.role') = 'assistant' ORDER BY position DESC, identity DESC LIMIT 1) AS answer,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND text <> '' ORDER BY position DESC, identity DESC LIMIT 1) AS said,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND json_extract(message, '$.role') = 'house' ORDER BY position, identity LIMIT 1) AS opened,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND json_extract(message, '$.role') = 'house' AND json_extract(message, '$.waiting') = 1 ORDER BY position, identity LIMIT 1) AS asking\n FROM json_each(?) AS listed\n )\n SELECT chosen.conversation AS conversation,\n substr(said.text, 1, 512) AS said_text,\n json_extract(said.message, '$.role') AS said_role,\n json_extract(said.message, '$.accepted_at') AS said_at,\n substr(json_extract(answer.message, '$.failure'), 1, 512) AS failure,\n json_extract(opened.message, '$.source') AS opened_source,\n json_extract(opened.message, '$.sender') AS opened_sender,\n asking.identity AS asking_identity,\n asking.text AS asking_text,\n json_extract(asking.message, '$.accepted_at') AS asking_at,\n json_extract(asking.message, '$.source') AS asking_source,\n json_extract(asking.message, '$.sender') AS asking_sender\n FROM chosen\n LEFT JOIN conversation_messages said ON said.id = chosen.said\n LEFT JOIN conversation_messages answer ON answer.id = chosen.answer\n LEFT JOIN conversation_messages opened ON opened.id = chosen.opened\n LEFT JOIN conversation_messages asking ON asking.id = chosen.asking";
|
|
6
|
+
export declare const JOB_MARKERS = "SELECT json_extract(part.value, '$.text') AS said,\n json_extract(message, '$.accepted_at') AS at\n FROM conversation_messages, json_each(message, '$.parts') AS part\n WHERE conversation = ? AND instr(message, '\"marker\":\"job\"') > 0\n AND json_extract(part.value, '$.type') = 'marker'\n AND json_extract(part.value, '$.marker') = 'job'\n ORDER BY position, identity, part.key";
|
|
7
|
+
export type HeldConversation = {
|
|
8
|
+
readonly conversation: string;
|
|
9
|
+
readonly read: string | null | undefined;
|
|
10
|
+
readonly partial: boolean;
|
|
11
|
+
};
|
|
12
|
+
export type MessageWindow = {
|
|
13
|
+
readonly messages: AcceptedMessage[];
|
|
14
|
+
readonly more: boolean;
|
|
15
|
+
};
|
|
16
|
+
export type HeldSource = {
|
|
17
|
+
readonly source: unknown;
|
|
18
|
+
readonly sender: string | null;
|
|
19
|
+
};
|
|
20
|
+
export type HeldRow = {
|
|
21
|
+
readonly conversation: string;
|
|
22
|
+
readonly said: {
|
|
23
|
+
readonly text: string;
|
|
24
|
+
readonly role: string | null;
|
|
25
|
+
readonly at: string | null;
|
|
26
|
+
} | null;
|
|
27
|
+
readonly failure: string | null;
|
|
28
|
+
readonly opened: HeldSource | null;
|
|
29
|
+
readonly asking: (HeldSource & {
|
|
30
|
+
readonly identity: string;
|
|
31
|
+
readonly text: string;
|
|
32
|
+
readonly at: string | null;
|
|
33
|
+
}) | null;
|
|
34
|
+
};
|
|
35
|
+
export type ConversationWrite = {
|
|
36
|
+
readonly conversation: string;
|
|
37
|
+
readonly messages: readonly AcceptedMessage[];
|
|
38
|
+
readonly read?: {
|
|
39
|
+
readonly at: string | null;
|
|
40
|
+
readonly partial: boolean;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
export declare function heldConversations(connection: Connection, conversations: readonly string[] | null): HeldConversation[];
|
|
44
|
+
export declare function keptMessages(connection: Connection, { conversation, messages, read }: ConversationWrite): null;
|
|
45
|
+
export declare function messageWindow(connection: Connection, conversation: string, limit: number, before: readonly [string, string] | null, phrase: string | null): MessageWindow;
|
|
46
|
+
export declare function messageCount(connection: Connection, conversation: string, phrase: string | null): number;
|
|
47
|
+
export declare function conversationRows(connection: Connection, conversations: readonly string[]): HeldRow[];
|
|
48
|
+
export declare function jobMarkers(connection: Connection, conversation: string): JobMarker[];
|
|
49
|
+
export declare function turnArrived(connection: Connection, conversation: string, turn: string): boolean;
|
|
50
|
+
export declare function droppedMessages(connection: Connection, conversations: readonly string[]): void;
|
|
51
|
+
export declare function forgottenMessages(connection: Connection): void;
|
|
52
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,aAAa,CAAC;AAQ1D,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAQ3C,CAAC;AAQF,eAAO,MAAM,IAAI,qwDAwBqD,CAAC;AAEvE,eAAO,MAAM,WAAW,2YAMgB,CAAC;AAEzC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAE7F,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAEtF,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE;QACb,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,GAAG,IAAI,CAAC;IACT,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,MAAM,EACX,CAAC,UAAU,GAAG;QACZ,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC,GACF,IAAI,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CAC3E,CAAC;AAMF,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GACtC,gBAAgB,EAAE,CA0BpB;AAED,wBAAgB,YAAY,CAC1B,UAAU,EAAE,UAAU,EACtB,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,iBAAiB,GAClD,IAAI,CA+BN;AAkBD,wBAAgB,aAAa,CAC3B,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,EACxC,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,aAAa,CAWf;AAED,wBAAgB,YAAY,CAC1B,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,MAAM,CAOR;AAaD,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,OAAO,EAAE,CAuBX;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,CAIpF;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAO/F;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAK9F;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAG9D"}
|