@agentshouse/mdruntime 0.1.0-c069136dcb4e8 → 0.1.0-c076b00ebf42a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -19
- package/dist/acceptance.d.ts +3 -0
- package/dist/acceptance.d.ts.map +1 -0
- package/dist/acceptance.js +299 -0
- package/dist/act-lanes.d.ts +30 -0
- package/dist/act-lanes.d.ts.map +1 -0
- package/dist/act-lanes.js +225 -0
- package/dist/actions.d.ts +26 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +302 -0
- package/dist/adapter.d.ts +108 -85
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +3 -11
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +20 -60
- package/dist/bootstrap.d.ts +9 -5
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +204 -85
- 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 +2 -1
- package/dist/chain.d.ts.map +1 -1
- package/dist/change-set.d.ts +4 -0
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +6 -0
- package/dist/change.d.ts +1 -0
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +4 -2
- package/dist/chat-types.d.ts +3 -0
- package/dist/chat-types.d.ts.map +1 -0
- package/dist/chat-types.js +11 -0
- package/dist/client.d.ts +29 -22
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +36 -20
- package/dist/collection.d.ts +26 -4
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +19 -2
- package/dist/compile.d.ts +8 -6
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +286 -336
- package/dist/connection.d.ts +5 -142
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +110 -4970
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +7 -0
- package/dist/conversation-live.d.ts +150 -0
- package/dist/conversation-live.d.ts.map +1 -0
- package/dist/conversation-live.js +259 -0
- package/dist/conversation-row.d.ts +35 -0
- package/dist/conversation-row.d.ts.map +1 -0
- package/dist/conversation-row.js +55 -0
- package/dist/conversation.d.ts +65 -44
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +999 -881
- package/dist/declaration.d.ts +10 -0
- package/dist/declaration.d.ts.map +1 -0
- package/dist/declaration.js +24 -0
- package/dist/discovery.d.ts +10 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +150 -0
- package/dist/durability.d.ts +19 -0
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +4 -0
- package/dist/entry.d.ts +2 -2
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +18 -8
- package/dist/expectation.d.ts +26 -13
- package/dist/expectation.d.ts.map +1 -1
- package/dist/expectation.js +72 -19
- package/dist/failure.d.ts +3 -0
- package/dist/failure.d.ts.map +1 -1
- package/dist/failure.js +6 -0
- package/dist/figures.d.ts +49 -0
- package/dist/figures.d.ts.map +1 -0
- package/dist/figures.js +199 -0
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +2 -1
- package/dist/holdings.d.ts +29 -0
- package/dist/holdings.d.ts.map +1 -0
- package/dist/holdings.js +95 -0
- package/dist/host.d.ts +21 -7
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +77 -41
- 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 +34 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -5
- package/dist/install.d.ts +60 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +537 -0
- package/dist/lifecycle.d.ts +7 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +278 -0
- package/dist/listing.d.ts +52 -0
- package/dist/listing.d.ts.map +1 -0
- package/dist/listing.js +152 -0
- package/dist/live.d.ts +9 -6
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +118 -36
- package/dist/locks.d.ts +7 -0
- package/dist/locks.d.ts.map +1 -0
- package/dist/locks.js +32 -0
- package/dist/lost.d.ts +5 -0
- package/dist/lost.d.ts.map +1 -0
- package/dist/lost.js +49 -0
- package/dist/media.d.ts +1 -1
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +10 -13
- package/dist/memory.d.ts +15 -6
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +178 -89
- package/dist/messages.d.ts +35 -5
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +108 -36
- package/dist/model.d.ts +2 -10
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +0 -14
- package/dist/models.d.ts +10 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +153 -0
- package/dist/observation.d.ts +28 -13
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +185 -81
- package/dist/opened.d.ts +1 -1
- package/dist/opened.d.ts.map +1 -1
- package/dist/opened.js +5 -5
- package/dist/opening.d.ts +4 -0
- package/dist/opening.d.ts.map +1 -0
- package/dist/opening.js +53 -0
- package/dist/outcome.d.ts +11 -1
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +26 -2
- package/dist/overlay.d.ts +6 -1
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +47 -21
- package/dist/page-metadata.d.ts +8 -0
- package/dist/page-metadata.d.ts.map +1 -0
- package/dist/page-metadata.js +19 -0
- package/dist/parts.d.ts +4 -0
- package/dist/parts.d.ts.map +1 -0
- package/dist/parts.js +13 -0
- package/dist/paths.d.ts +1 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +22 -0
- package/dist/preparation.d.ts +41 -0
- package/dist/preparation.d.ts.map +1 -0
- package/dist/preparation.js +314 -0
- package/dist/presence.d.ts +58 -0
- package/dist/presence.d.ts.map +1 -0
- package/dist/presence.js +233 -0
- package/dist/queries.d.ts +16 -0
- package/dist/queries.d.ts.map +1 -0
- package/dist/queries.js +308 -0
- package/dist/query.d.ts +14 -210
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +3 -505
- package/dist/questions.d.ts +29 -0
- package/dist/questions.d.ts.map +1 -0
- package/dist/questions.js +115 -0
- package/dist/queue.d.ts +40 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +450 -0
- package/dist/reach.d.ts +16 -15
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +248 -147
- package/dist/react.d.ts +17 -3
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +33 -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 +9 -6
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +3 -5
- package/dist/reads.d.ts +39 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +178 -0
- package/dist/recovery.d.ts +3 -1
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +38 -8
- package/dist/refresh.d.ts +2 -1
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +31 -3
- package/dist/refusal.d.ts +5 -0
- package/dist/refusal.d.ts.map +1 -0
- package/dist/refusal.js +55 -0
- package/dist/replica.d.ts +11 -16
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +64 -30
- package/dist/retried.d.ts +30 -0
- package/dist/retried.d.ts.map +1 -0
- package/dist/retried.js +72 -0
- package/dist/room-draft.d.ts +7 -8
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +113 -111
- package/dist/room-drafts.d.ts +24 -0
- package/dist/room-drafts.d.ts.map +1 -0
- package/dist/room-drafts.js +217 -0
- package/dist/rows.d.ts +16 -22
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +49 -186
- package/dist/runtime.d.ts +34 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +1 -0
- package/dist/save.d.ts +42 -86
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +344 -174
- package/dist/saves.d.ts +32 -0
- package/dist/saves.d.ts.map +1 -0
- package/dist/saves.js +409 -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 +11 -2
- package/dist/seed.d.ts.map +1 -1
- package/dist/seed.js +71 -1
- package/dist/shared.d.ts +1 -6
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +13 -95
- package/dist/shown.d.ts +33 -0
- package/dist/shown.d.ts.map +1 -0
- package/dist/shown.js +309 -0
- package/dist/socket/admission.d.ts +7 -0
- package/dist/socket/admission.d.ts.map +1 -0
- package/dist/socket/admission.js +39 -0
- package/dist/socket/answers.d.ts +6 -0
- package/dist/socket/answers.d.ts.map +1 -0
- package/dist/socket/answers.js +20 -0
- package/dist/socket/lanes.d.ts +28 -0
- package/dist/socket/lanes.d.ts.map +1 -0
- package/dist/socket/lanes.js +103 -0
- package/dist/socket/reads.d.ts +10 -0
- package/dist/socket/reads.d.ts.map +1 -0
- package/dist/socket/reads.js +31 -0
- package/dist/socket/session.d.ts +38 -0
- package/dist/socket/session.d.ts.map +1 -0
- package/dist/socket/session.js +23 -0
- package/dist/socket.d.ts +67 -0
- package/dist/socket.d.ts.map +1 -0
- package/dist/socket.js +164 -0
- package/dist/source.d.ts +54 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +82 -0
- package/dist/status.d.ts +0 -2
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +0 -6
- package/dist/store/installs.d.ts +30 -0
- package/dist/store/installs.d.ts.map +1 -0
- package/dist/store/installs.js +40 -0
- package/dist/store/readiness.d.ts +11 -0
- package/dist/store/readiness.d.ts.map +1 -0
- package/dist/store/readiness.js +68 -0
- package/dist/store/records.d.ts +217 -0
- package/dist/store/records.d.ts.map +1 -0
- package/dist/store/records.js +464 -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/rooms-shown.d.ts +8 -0
- package/dist/store/rooms-shown.d.ts.map +1 -0
- package/dist/store/rooms-shown.js +13 -0
- package/dist/store/space.d.ts +11 -0
- package/dist/store/space.d.ts.map +1 -0
- package/dist/store/space.js +41 -0
- package/dist/store/watchers.d.ts +17 -0
- package/dist/store/watchers.d.ts.map +1 -0
- package/dist/store/watchers.js +56 -0
- package/dist/store/writes.d.ts +24 -0
- package/dist/store/writes.d.ts.map +1 -0
- package/dist/store/writes.js +125 -0
- package/dist/store.d.ts +113 -144
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +171 -364
- package/dist/stored.d.ts +72 -35
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +340 -197
- package/dist/surface.d.ts +89 -0
- package/dist/surface.d.ts.map +1 -0
- package/dist/surface.js +222 -0
- package/dist/sync.d.ts +19 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +535 -0
- package/dist/tables.d.ts +124 -30
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +242 -62
- package/dist/tallies.d.ts +18 -0
- package/dist/tallies.d.ts.map +1 -0
- package/dist/tallies.js +128 -0
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +9 -12
- 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 +58 -9
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +21 -5
- package/package.json +3 -2
- package/dist/attempt.d.ts +0 -16
- package/dist/attempt.d.ts.map +0 -1
- package/dist/attempt.js +0 -70
- package/dist/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/log.d.ts +0 -5
- package/dist/log.d.ts.map +0 -1
- package/dist/log.js +0 -14
- package/dist/words.d.ts +0 -19
- package/dist/words.d.ts.map +0 -1
- package/dist/words.js +0 -156
package/dist/memory.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { definitionAt, documentFacts, parse } from '@agentshouse/mdmodel';
|
|
2
|
+
import { NO_ROOM_TYPES, schemaTypes } from './attached-model.js';
|
|
3
|
+
import { selected } from './collection.js';
|
|
4
|
+
import { declaredType } from './outcome.js';
|
|
1
5
|
import { sameChange } from './overlay.js';
|
|
2
6
|
const ATTACHMENTS = 'attachments';
|
|
3
7
|
function lastName(path) {
|
|
@@ -5,7 +9,6 @@ function lastName(path) {
|
|
|
5
9
|
}
|
|
6
10
|
const FIXTURE_RETENTION = {
|
|
7
11
|
history: { kind: 'duration', seconds: 1 },
|
|
8
|
-
outcome: 604_800,
|
|
9
12
|
refreshHorizon: 1,
|
|
10
13
|
};
|
|
11
14
|
function declaredRetention(value) {
|
|
@@ -52,15 +55,17 @@ export function createMemoryAdapter(options = {}) {
|
|
|
52
55
|
const listeners = new Set();
|
|
53
56
|
const modeObservers = new Set();
|
|
54
57
|
const scripted = new Map();
|
|
55
|
-
const
|
|
56
|
-
const sealed = new Set();
|
|
57
|
-
const sentTurns = new Map();
|
|
58
|
+
const repeats = new Map();
|
|
58
59
|
const historyPageSize = options.historyPageSize;
|
|
59
60
|
const attached = new Map();
|
|
60
61
|
const linked = new WeakMap();
|
|
61
62
|
const carried = new Map();
|
|
62
63
|
let expiring = [];
|
|
64
|
+
let openings = 0;
|
|
65
|
+
const declaredRooms = new Set();
|
|
63
66
|
let replicated = [];
|
|
67
|
+
let heldCursor = null;
|
|
68
|
+
let agents = structuredClone(options.agents ?? []);
|
|
64
69
|
let issued = 0;
|
|
65
70
|
function scriptConversations(entries) {
|
|
66
71
|
scripted.clear();
|
|
@@ -101,8 +106,40 @@ export function createMemoryAdapter(options = {}) {
|
|
|
101
106
|
return path;
|
|
102
107
|
}
|
|
103
108
|
}
|
|
109
|
+
const saved = new WeakMap();
|
|
110
|
+
const roomTypes = options.roomTypes ?? NO_ROOM_TYPES;
|
|
111
|
+
function factsAt(room, path, content) {
|
|
112
|
+
const types = selected({ selection: room.typedSelection ?? null }, path)
|
|
113
|
+
? roomTypes.types
|
|
114
|
+
: schemaTypes(room.model?.kind === 'model' ? room.model.snapshot.schema : null, roomTypes);
|
|
115
|
+
let held = saved.get(types);
|
|
116
|
+
if (held === undefined) {
|
|
117
|
+
held = new Map();
|
|
118
|
+
saved.set(types, held);
|
|
119
|
+
}
|
|
120
|
+
const key = `${path}\u0000${content}`;
|
|
121
|
+
if (!held.has(key)) {
|
|
122
|
+
const facts = documentFacts(path, parse(content, path, definitionAt({ types }, path, options.typedPaths)), {
|
|
123
|
+
types,
|
|
124
|
+
});
|
|
125
|
+
held.set(key, facts === null ? null : JSON.parse(JSON.stringify(facts)));
|
|
126
|
+
}
|
|
127
|
+
return held.get(key);
|
|
128
|
+
}
|
|
129
|
+
function factsIn(room, paths) {
|
|
130
|
+
const facts = {};
|
|
131
|
+
for (const path of paths) {
|
|
132
|
+
const content = room.documents?.[path];
|
|
133
|
+
const held = room.facts?.[path] ?? (content === undefined ? null : factsAt(room, path, content));
|
|
134
|
+
if (held !== null)
|
|
135
|
+
facts[path] = held;
|
|
136
|
+
}
|
|
137
|
+
return facts;
|
|
138
|
+
}
|
|
104
139
|
function retain(entries) {
|
|
105
140
|
for (const room of entries) {
|
|
141
|
+
for (const [path, content] of Object.entries(room.documents ?? {}))
|
|
142
|
+
factsAt(room, path, content);
|
|
106
143
|
note(room.locator, room);
|
|
107
144
|
const versions = served.get(room.locator) ?? new Map();
|
|
108
145
|
versions.set(room.roomVersion, room);
|
|
@@ -118,8 +155,9 @@ export function createMemoryAdapter(options = {}) {
|
|
|
118
155
|
roomVersion: room.roomVersion,
|
|
119
156
|
operations: room.operations,
|
|
120
157
|
replica: room.replica,
|
|
121
|
-
|
|
158
|
+
typedSelection: room.typedSelection ?? null,
|
|
122
159
|
providerOwnedPaths: room.providerOwnedPaths,
|
|
160
|
+
authoredPaths: room.authoredPaths ?? ['**'],
|
|
123
161
|
};
|
|
124
162
|
}
|
|
125
163
|
function page(room, after) {
|
|
@@ -135,10 +173,14 @@ export function createMemoryAdapter(options = {}) {
|
|
|
135
173
|
roomVersion: room.roomVersion,
|
|
136
174
|
...(opening ? { models: modelsOf(room) } : {}),
|
|
137
175
|
documents: named(room.documents ?? {}, taken),
|
|
176
|
+
facts: factsIn(room, taken),
|
|
138
177
|
revisions: named(room.revisions ?? {}, [...taken, ...targets]),
|
|
139
178
|
...(room.fileIds === undefined
|
|
140
179
|
? {}
|
|
141
180
|
: { fileIds: named(room.fileIds, [...taken, ...targets]) }),
|
|
181
|
+
...(room.created === undefined
|
|
182
|
+
? {}
|
|
183
|
+
: { created: named(room.created, [...taken, ...targets]) }),
|
|
142
184
|
changes: named(room.changes ?? {}, [...taken, ...targets]),
|
|
143
185
|
binaryFiles: named(room.binaryFiles ?? {}, targets),
|
|
144
186
|
...(opening && room.folders !== undefined ? { folders: room.folders } : {}),
|
|
@@ -162,6 +204,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
162
204
|
const previousTargets = new Set(Object.keys(from.binaryFiles ?? {}));
|
|
163
205
|
const headMoved = (path) => room.revisions?.[path] !== from.revisions?.[path] ||
|
|
164
206
|
room.fileIds?.[path] !== from.fileIds?.[path] ||
|
|
207
|
+
room.created?.[path] !== from.created?.[path] ||
|
|
165
208
|
!sameChange(room.changes?.[path], from.changes?.[path]);
|
|
166
209
|
const changed = Object.keys(current)
|
|
167
210
|
.filter((path) => current[path] !== previous[path] || headMoved(path))
|
|
@@ -182,10 +225,14 @@ export function createMemoryAdapter(options = {}) {
|
|
|
182
225
|
roomVersion: room.roomVersion,
|
|
183
226
|
...(models === undefined ? {} : { models }),
|
|
184
227
|
documents: named(current, taken),
|
|
228
|
+
facts: factsIn(room, taken),
|
|
185
229
|
revisions: named(room.revisions ?? {}, [...taken, ...targets]),
|
|
186
230
|
...(room.fileIds === undefined
|
|
187
231
|
? {}
|
|
188
232
|
: { fileIds: named(room.fileIds, [...taken, ...targets]) }),
|
|
233
|
+
...(room.created === undefined
|
|
234
|
+
? {}
|
|
235
|
+
: { created: named(room.created, [...taken, ...targets]) }),
|
|
189
236
|
changes: named(room.changes ?? {}, [...taken, ...targets]),
|
|
190
237
|
binaryFiles: named(room.binaryFiles ?? {}, targets),
|
|
191
238
|
...(opening ? foldersMoved(room, from) : {}),
|
|
@@ -220,28 +267,23 @@ export function createMemoryAdapter(options = {}) {
|
|
|
220
267
|
}
|
|
221
268
|
function pageOf(conversation, after) {
|
|
222
269
|
const messages = conversation.messages ?? [];
|
|
223
|
-
const first = typeof after === 'string' ? messages.findIndex((message) => message.
|
|
270
|
+
const first = typeof after === 'string' ? messages.findIndex((message) => message.change > after) : 0;
|
|
224
271
|
const from = first === -1 ? messages.length : first;
|
|
225
272
|
const page = messages.slice(from, from + (historyPageSize ?? messages.length));
|
|
226
273
|
const last = page.at(-1);
|
|
227
274
|
return {
|
|
228
275
|
conversation: conversation.conversation,
|
|
229
276
|
messages: page,
|
|
230
|
-
...(last !== undefined && from + page.length < messages.length
|
|
231
|
-
? { next: last.position }
|
|
232
|
-
: {}),
|
|
277
|
+
...(last !== undefined && from + page.length < messages.length ? { next: last.change } : {}),
|
|
233
278
|
};
|
|
234
279
|
}
|
|
235
|
-
function historiesOf(
|
|
236
|
-
const asked = input?.conversations;
|
|
237
|
-
if (!Array.isArray(asked))
|
|
238
|
-
return { kind: 'rejected', code: 'invalid_request', fields: {}, retryable: false };
|
|
280
|
+
function historiesOf(request) {
|
|
239
281
|
const histories = [];
|
|
240
|
-
for (const entry of
|
|
241
|
-
const conversation =
|
|
282
|
+
for (const entry of request.conversations) {
|
|
283
|
+
const conversation = scripted.get(entry.conversation);
|
|
242
284
|
if (conversation === undefined)
|
|
243
285
|
continue;
|
|
244
|
-
const outcome = conversation.outcomes?.
|
|
286
|
+
const outcome = conversation.outcomes?.history;
|
|
245
287
|
if (outcome !== undefined)
|
|
246
288
|
return outcome;
|
|
247
289
|
histories.push(pageOf(conversation, entry.after));
|
|
@@ -252,15 +294,22 @@ export function createMemoryAdapter(options = {}) {
|
|
|
252
294
|
function conversationAction(request) {
|
|
253
295
|
const name = request.name;
|
|
254
296
|
const input = (request.input ?? {});
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
297
|
+
const operation = typeof input.operation_id === 'string' ? `${name}\u0000${input.operation_id}` : null;
|
|
298
|
+
const first = (answer) => {
|
|
299
|
+
if (operation !== null)
|
|
300
|
+
repeats.set(operation, answer);
|
|
301
|
+
return answer;
|
|
302
|
+
};
|
|
303
|
+
const repeated = operation === null ? undefined : repeats.get(operation);
|
|
304
|
+
if (name === 'conversations/create') {
|
|
305
|
+
if (repeated !== undefined)
|
|
306
|
+
return repeated;
|
|
258
307
|
issued += 1;
|
|
259
308
|
const conversation = `conversation-${issued}`;
|
|
260
309
|
scripted.set(conversation, { conversation });
|
|
261
|
-
return { kind: 'action', result: { conversation } };
|
|
310
|
+
return first({ kind: 'action', result: { conversation_id: conversation } });
|
|
262
311
|
}
|
|
263
|
-
const named = typeof input.
|
|
312
|
+
const named = typeof input.conversation_id === 'string' ? input.conversation_id : '';
|
|
264
313
|
const conversation = scripted.get(named);
|
|
265
314
|
if (conversation === undefined) {
|
|
266
315
|
return {
|
|
@@ -273,36 +322,41 @@ export function createMemoryAdapter(options = {}) {
|
|
|
273
322
|
const outcome = conversation.outcomes?.[name];
|
|
274
323
|
if (outcome !== undefined)
|
|
275
324
|
return outcome;
|
|
276
|
-
if (name === '
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
if (answered !== undefined)
|
|
280
|
-
return { kind: 'action', result: { turn: answered } };
|
|
325
|
+
if (name === 'conversations/send') {
|
|
326
|
+
if (repeated !== undefined)
|
|
327
|
+
return repeated;
|
|
281
328
|
issued += 1;
|
|
282
|
-
|
|
283
|
-
unsealed.set(turn, named);
|
|
284
|
-
if (operation !== null)
|
|
285
|
-
sentTurns.set(operation, turn);
|
|
286
|
-
return { kind: 'action', result: { turn } };
|
|
329
|
+
return first({ kind: 'action', result: { message_id: `turn-${issued}` } });
|
|
287
330
|
}
|
|
288
|
-
if (name === '
|
|
289
|
-
const turn = typeof input.turn === 'string' ? input.turn : '';
|
|
290
|
-
if (sealed.has(turn) || !unsealed.has(turn)) {
|
|
291
|
-
return { kind: 'rejected', code: 'turn-sealed', fields: { turn }, retryable: false };
|
|
292
|
-
}
|
|
293
|
-
unsealed.delete(turn);
|
|
294
|
-
return { kind: 'action', result: { turn, cancelled: true } };
|
|
295
|
-
}
|
|
296
|
-
if (name === 'conversation.delete')
|
|
331
|
+
if (name === 'conversations/delete')
|
|
297
332
|
scripted.delete(named);
|
|
298
|
-
return { kind: 'action', result: {
|
|
333
|
+
return { kind: 'action', result: { conversation_id: named } };
|
|
334
|
+
}
|
|
335
|
+
function decided(request) {
|
|
336
|
+
const { request: asked, message, decision, } = (request.input ?? {});
|
|
337
|
+
return {
|
|
338
|
+
kind: 'action',
|
|
339
|
+
result: {
|
|
340
|
+
request: asked,
|
|
341
|
+
...(message === undefined ? {} : { message }),
|
|
342
|
+
state: decision === 'approve' ? 'started' : 'declined',
|
|
343
|
+
},
|
|
344
|
+
};
|
|
299
345
|
}
|
|
300
346
|
function announceList() {
|
|
301
347
|
const entries = [...scripted.values()].flatMap(({ conversation, listed, messages = [] }) => listed === undefined
|
|
302
348
|
? []
|
|
303
|
-
: [{ conversation, ...listed, newest: messages.at(-1)?.
|
|
304
|
-
for (const listener of listeners)
|
|
305
|
-
listener({
|
|
349
|
+
: [{ conversation, ...listed, newest: messages.at(-1)?.change ?? null }]);
|
|
350
|
+
for (const listener of listeners) {
|
|
351
|
+
listener({
|
|
352
|
+
kind: 'list',
|
|
353
|
+
agents: structuredClone(agents),
|
|
354
|
+
entries,
|
|
355
|
+
whole: true,
|
|
356
|
+
more: false,
|
|
357
|
+
cursor: null,
|
|
358
|
+
});
|
|
359
|
+
}
|
|
306
360
|
}
|
|
307
361
|
function discovery() {
|
|
308
362
|
return {
|
|
@@ -314,9 +368,42 @@ export function createMemoryAdapter(options = {}) {
|
|
|
314
368
|
...(options.member === undefined ? {} : { member: options.member }),
|
|
315
369
|
};
|
|
316
370
|
}
|
|
371
|
+
function discovered() {
|
|
372
|
+
return resolveScript(scripts.discover, discovery, undefined).then((answer) => {
|
|
373
|
+
if (answer.kind === 'discovery')
|
|
374
|
+
for (const room of answer.rooms)
|
|
375
|
+
note(room.locator, room);
|
|
376
|
+
return answer;
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
function opened(notify) {
|
|
380
|
+
const opening = ++openings;
|
|
381
|
+
notify({ kind: 'opened' });
|
|
382
|
+
void discovered()
|
|
383
|
+
.catch(() => ({ kind: 'transport-uncertainty' }))
|
|
384
|
+
.then((answer) => {
|
|
385
|
+
if (opening !== openings)
|
|
386
|
+
return;
|
|
387
|
+
if (answer.kind !== 'discovery') {
|
|
388
|
+
openings += 1;
|
|
389
|
+
carried.clear();
|
|
390
|
+
const revoked = answer.kind === 'revoked-authorization';
|
|
391
|
+
notify({ kind: 'closed', revoked, lost: !revoked, authorityChanged: false });
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
declaredRooms.clear();
|
|
395
|
+
for (const room of answer.rooms)
|
|
396
|
+
declaredRooms.add(room.locator);
|
|
397
|
+
notify({ kind: 'discovered', discovery: answer });
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
function emitAll(event) {
|
|
401
|
+
for (const observer of observers)
|
|
402
|
+
observer(event);
|
|
403
|
+
}
|
|
317
404
|
return {
|
|
318
|
-
...(options.exhaustiveDiscovery === undefined ? {} : { exhaustiveDiscovery: true }),
|
|
319
405
|
...(options.roomTypes === undefined ? {} : { roomTypes: options.roomTypes }),
|
|
406
|
+
...(options.typedPaths === undefined ? {} : { typedPaths: options.typedPaths }),
|
|
320
407
|
setRooms(next) {
|
|
321
408
|
rooms = [...next];
|
|
322
409
|
retain(rooms);
|
|
@@ -324,16 +411,18 @@ export function createMemoryAdapter(options = {}) {
|
|
|
324
411
|
setConversations(next) {
|
|
325
412
|
scriptConversations(next);
|
|
326
413
|
},
|
|
414
|
+
setAgents(next) {
|
|
415
|
+
agents = structuredClone(next);
|
|
416
|
+
},
|
|
327
417
|
open() {
|
|
328
418
|
carried.clear();
|
|
329
419
|
announceList();
|
|
330
|
-
|
|
331
|
-
observer({ kind: 'opened' });
|
|
420
|
+
opened(emitAll);
|
|
332
421
|
},
|
|
333
|
-
close({ revoked = false, lost = !revoked } = {}) {
|
|
422
|
+
close({ revoked = false, lost = !revoked, authorityChanged = false } = {}) {
|
|
423
|
+
openings += 1;
|
|
334
424
|
carried.clear();
|
|
335
|
-
|
|
336
|
-
observer({ kind: 'closed', revoked, lost });
|
|
425
|
+
emitAll({ kind: 'closed', revoked, lost, authorityChanged });
|
|
337
426
|
},
|
|
338
427
|
expire(locators) {
|
|
339
428
|
expiring = [...locators];
|
|
@@ -341,18 +430,22 @@ export function createMemoryAdapter(options = {}) {
|
|
|
341
430
|
notifyRoomVersion({ locator }) {
|
|
342
431
|
carry(locator);
|
|
343
432
|
},
|
|
344
|
-
notifyAuthorityChanged(
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
433
|
+
notifyAuthorityChanged(locators) {
|
|
434
|
+
const named = new Set(locators ?? [...declaredRooms, ...rooms.map((room) => room.locator)]);
|
|
435
|
+
const listed = rooms.filter((room) => named.has(room.locator));
|
|
436
|
+
const left = [...named].filter((locator) => !listed.some((room) => room.locator === locator));
|
|
437
|
+
for (const room of listed)
|
|
438
|
+
declaredRooms.add(room.locator);
|
|
439
|
+
for (const locator of left)
|
|
440
|
+
declaredRooms.delete(locator);
|
|
441
|
+
emitAll({
|
|
442
|
+
kind: 'authority-changed',
|
|
443
|
+
rooms: listed.map(declared),
|
|
444
|
+
left,
|
|
445
|
+
...(options.member === undefined ? {} : { member: options.member }),
|
|
446
|
+
});
|
|
350
447
|
},
|
|
351
448
|
notifyConversation(event) {
|
|
352
|
-
if (event.kind === 'accepted-message') {
|
|
353
|
-
sealed.add(event.message.turn);
|
|
354
|
-
unsealed.delete(event.message.turn);
|
|
355
|
-
}
|
|
356
449
|
for (const listener of listeners)
|
|
357
450
|
listener(event);
|
|
358
451
|
},
|
|
@@ -366,19 +459,23 @@ export function createMemoryAdapter(options = {}) {
|
|
|
366
459
|
replicatedConversations() {
|
|
367
460
|
return replicated;
|
|
368
461
|
},
|
|
462
|
+
heldConversationCursor() {
|
|
463
|
+
return heldCursor;
|
|
464
|
+
},
|
|
369
465
|
conversations: {
|
|
370
466
|
replicate(next) {
|
|
371
467
|
replicated = [...next];
|
|
372
468
|
},
|
|
469
|
+
hold(cursor) {
|
|
470
|
+
heldCursor = cursor;
|
|
471
|
+
},
|
|
373
472
|
observe(notify) {
|
|
374
473
|
listeners.add(notify);
|
|
375
474
|
return () => {
|
|
376
475
|
listeners.delete(notify);
|
|
377
476
|
};
|
|
378
477
|
},
|
|
379
|
-
|
|
380
|
-
? {}
|
|
381
|
-
: { agents: () => Promise.resolve(structuredClone(options.agents)) }),
|
|
478
|
+
history: (request) => Promise.resolve(historiesOf(request)),
|
|
382
479
|
},
|
|
383
480
|
serviceMode: {
|
|
384
481
|
observe(notify) {
|
|
@@ -393,9 +490,10 @@ export function createMemoryAdapter(options = {}) {
|
|
|
393
490
|
const named = asked.map((room) => room.locator);
|
|
394
491
|
const unknown = asked.flatMap((room) => {
|
|
395
492
|
const current = rooms.find((entry) => entry.locator === room.locator);
|
|
493
|
+
const version = room.roomVersion;
|
|
396
494
|
return current === undefined ||
|
|
397
|
-
|
|
398
|
-
|
|
495
|
+
(version !== null &&
|
|
496
|
+
(current.roomVersion === version || served.get(room.locator)?.has(version) === true))
|
|
399
497
|
? []
|
|
400
498
|
: [room.locator];
|
|
401
499
|
});
|
|
@@ -405,23 +503,14 @@ export function createMemoryAdapter(options = {}) {
|
|
|
405
503
|
expiring = expiring.filter((locator) => !named.includes(locator));
|
|
406
504
|
queueMicrotask(() => {
|
|
407
505
|
for (const room of asked) {
|
|
408
|
-
if (expired.includes(room.locator))
|
|
506
|
+
if (expired.includes(room.locator) || room.roomVersion === null)
|
|
409
507
|
carried.delete(room.locator);
|
|
410
508
|
else {
|
|
411
509
|
carried.set(room.locator, room.roomVersion);
|
|
412
510
|
carry(room.locator);
|
|
413
511
|
}
|
|
414
512
|
}
|
|
415
|
-
|
|
416
|
-
observer({ kind: 'opening', expired });
|
|
417
|
-
});
|
|
418
|
-
},
|
|
419
|
-
reopen() {
|
|
420
|
-
queueMicrotask(() => {
|
|
421
|
-
carried.clear();
|
|
422
|
-
for (const observer of observers) {
|
|
423
|
-
observer({ kind: 'closed', revoked: false, lost: false });
|
|
424
|
-
}
|
|
513
|
+
emitAll({ kind: 'caught-up', expired });
|
|
425
514
|
});
|
|
426
515
|
},
|
|
427
516
|
observe(notify) {
|
|
@@ -430,11 +519,14 @@ export function createMemoryAdapter(options = {}) {
|
|
|
430
519
|
if (!observers.has(notify))
|
|
431
520
|
return;
|
|
432
521
|
if (options.unopened === true) {
|
|
433
|
-
notify({ kind: 'closed', revoked: false, lost: true });
|
|
522
|
+
notify({ kind: 'closed', revoked: false, lost: true, authorityChanged: false });
|
|
434
523
|
return;
|
|
435
524
|
}
|
|
436
525
|
announceList();
|
|
437
|
-
|
|
526
|
+
opened((event) => {
|
|
527
|
+
if (observers.has(notify))
|
|
528
|
+
notify(event);
|
|
529
|
+
});
|
|
438
530
|
});
|
|
439
531
|
return () => {
|
|
440
532
|
observers.delete(notify);
|
|
@@ -451,12 +543,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
451
543
|
return resolveScript(scripts.authorize, () => ({}), undefined);
|
|
452
544
|
},
|
|
453
545
|
async discover(_authorization) {
|
|
454
|
-
return
|
|
455
|
-
if (answer.kind === 'discovery')
|
|
456
|
-
for (const room of answer.rooms)
|
|
457
|
-
note(room.locator, room);
|
|
458
|
-
return answer;
|
|
459
|
-
});
|
|
546
|
+
return discovered();
|
|
460
547
|
},
|
|
461
548
|
reached,
|
|
462
549
|
follows(locator, roomVersion, next) {
|
|
@@ -540,8 +627,8 @@ export function createMemoryAdapter(options = {}) {
|
|
|
540
627
|
return { kind: 'room-not-readable', locator: request.locator };
|
|
541
628
|
const blob = heldBlob(room, request.path);
|
|
542
629
|
return blob === undefined
|
|
543
|
-
? { kind: 'rejected', code: '
|
|
544
|
-
: { kind: 'binary', body: blob.stream(), mediaType: blob
|
|
630
|
+
? { kind: 'rejected', code: 'not_found', fields: {}, retryable: false }
|
|
631
|
+
: { kind: 'binary', body: blob.stream(), mediaType: declaredType(blob) };
|
|
545
632
|
}, request);
|
|
546
633
|
},
|
|
547
634
|
async link(_authorization, request) {
|
|
@@ -551,11 +638,11 @@ export function createMemoryAdapter(options = {}) {
|
|
|
551
638
|
return { kind: 'room-not-readable', locator: request.locator };
|
|
552
639
|
const blob = heldBlob(room, request.path);
|
|
553
640
|
if (blob === undefined) {
|
|
554
|
-
return { kind: 'rejected', code: '
|
|
641
|
+
return { kind: 'rejected', code: 'not_found', fields: {}, retryable: false };
|
|
555
642
|
}
|
|
556
643
|
const url = linked.get(blob) ?? URL.createObjectURL(blob);
|
|
557
644
|
linked.set(blob, url);
|
|
558
|
-
return { kind: 'link', url, name: lastName(request.path), mediaType: blob
|
|
645
|
+
return { kind: 'link', url, name: lastName(request.path), mediaType: declaredType(blob) };
|
|
559
646
|
}, request);
|
|
560
647
|
},
|
|
561
648
|
async attach(_authorization, request) {
|
|
@@ -570,8 +657,10 @@ export function createMemoryAdapter(options = {}) {
|
|
|
570
657
|
},
|
|
571
658
|
async action(_authorization, request) {
|
|
572
659
|
return resolveScript(scripts.action, () => {
|
|
573
|
-
if (request.name.startsWith('
|
|
660
|
+
if (request.name.startsWith('conversations/'))
|
|
574
661
|
return conversationAction(request);
|
|
662
|
+
if (request.name === 'agent-functions/decide')
|
|
663
|
+
return decided(request);
|
|
575
664
|
return { kind: 'rejected', code: 'unscripted-action', fields: {}, retryable: false };
|
|
576
665
|
}, request).then((answer) => {
|
|
577
666
|
if (answer.kind === 'action' && answer.at !== undefined)
|
package/dist/messages.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { AcceptedMessage } from './adapter.js';
|
|
2
2
|
import type { Connection } from './tables.js';
|
|
3
3
|
export declare const MESSAGE_TABLES: readonly string[];
|
|
4
|
+
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 answer.turn AS answered,\n substr(json_extract(answer.message, '$.failure'), 1, 512) AS failure,\n (SELECT value FROM conversation_facts WHERE conversation = chosen.conversation AND name = 'openedTurn') AS opened_turn,\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";
|
|
4
5
|
export type HeldConversation = {
|
|
5
6
|
readonly conversation: string;
|
|
6
7
|
readonly read: string | null | undefined;
|
|
@@ -10,6 +11,33 @@ export type MessageWindow = {
|
|
|
10
11
|
readonly messages: AcceptedMessage[];
|
|
11
12
|
readonly more: boolean;
|
|
12
13
|
};
|
|
14
|
+
export type HeldSource = {
|
|
15
|
+
readonly source: unknown;
|
|
16
|
+
readonly sender: string | null;
|
|
17
|
+
};
|
|
18
|
+
export type HeldRow = {
|
|
19
|
+
readonly conversation: string;
|
|
20
|
+
readonly said: {
|
|
21
|
+
readonly text: string;
|
|
22
|
+
readonly role: string | null;
|
|
23
|
+
readonly at: string | null;
|
|
24
|
+
} | null;
|
|
25
|
+
readonly answered: string | null;
|
|
26
|
+
readonly openedTurn: string | 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 ConversationFact = 'openedTurn' | 'dismissedSuggestion';
|
|
36
|
+
export type HeldFact = {
|
|
37
|
+
readonly conversation: string;
|
|
38
|
+
readonly name: ConversationFact;
|
|
39
|
+
readonly value: string;
|
|
40
|
+
};
|
|
13
41
|
export type ConversationWrite = {
|
|
14
42
|
readonly conversation: string;
|
|
15
43
|
readonly messages: readonly AcceptedMessage[];
|
|
@@ -18,11 +46,13 @@ export type ConversationWrite = {
|
|
|
18
46
|
readonly partial: boolean;
|
|
19
47
|
};
|
|
20
48
|
};
|
|
21
|
-
export declare function heldConversations(connection: Connection): HeldConversation[];
|
|
49
|
+
export declare function heldConversations(connection: Connection, conversations: readonly string[] | null): HeldConversation[];
|
|
22
50
|
export declare function keptMessages(connection: Connection, { conversation, messages, read }: ConversationWrite): null;
|
|
23
|
-
export declare function messageWindow(connection: Connection, conversation: string, limit: number, before: readonly [string, string] | null): MessageWindow;
|
|
24
|
-
export declare function messageCount(connection: Connection, conversation: string): number;
|
|
51
|
+
export declare function messageWindow(connection: Connection, conversation: string, limit: number, before: readonly [string, string] | null, phrase: string | null): MessageWindow;
|
|
52
|
+
export declare function messageCount(connection: Connection, conversation: string, phrase: string | null): number;
|
|
53
|
+
export declare function conversationRows(connection: Connection, conversations: readonly string[]): HeldRow[];
|
|
25
54
|
export declare function turnArrived(connection: Connection, conversation: string, turn: string): boolean;
|
|
26
|
-
export declare function
|
|
27
|
-
export declare function
|
|
55
|
+
export declare function conversationFacts(connection: Connection): HeldFact[];
|
|
56
|
+
export declare function keptFact(connection: Connection, { conversation, name, value }: HeldFact): null;
|
|
57
|
+
export declare function forgottenConversations(connection: Connection): void;
|
|
28
58
|
//# sourceMappingURL=messages.d.ts.map
|
package/dist/messages.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
|