@agentshouse/mdruntime 0.1.0-c5d3fa6fb67bc → 0.1.0-c6636685d0c4b
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/AGENTS.md +205 -205
- package/README.md +8 -8
- package/dist/adapter.d.ts +36 -9
- package/dist/adapter.d.ts.map +1 -1
- package/dist/bootstrap.d.ts +2 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +1 -1
- package/dist/change-set.d.ts +5 -2
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +6 -1
- package/dist/chat/earlier.d.ts +10 -0
- package/dist/chat/earlier.d.ts.map +1 -0
- package/dist/chat/earlier.js +54 -0
- package/dist/chat/kit.js +1 -1
- package/dist/chat/list.d.ts +2 -1
- package/dist/chat/list.d.ts.map +1 -1
- package/dist/chat/list.js +45 -5
- package/dist/chat/markdown.d.ts +1 -0
- package/dist/chat/markdown.d.ts.map +1 -1
- package/dist/chat/markdown.js +78 -20
- package/dist/chat/message.d.ts +1 -0
- package/dist/chat/message.d.ts.map +1 -1
- package/dist/chat/message.js +12 -2
- package/dist/chat/messages.d.ts +2 -0
- package/dist/chat/messages.d.ts.map +1 -1
- package/dist/chat/messages.js +52 -20
- package/dist/chat/overlay.d.ts +1 -0
- package/dist/chat/overlay.d.ts.map +1 -1
- package/dist/chat/overlay.js +10 -0
- package/dist/chat/pieces.d.ts +62 -0
- package/dist/chat/pieces.d.ts.map +1 -0
- package/dist/chat/pieces.js +1110 -0
- package/dist/chat/provider.d.ts +1 -0
- package/dist/chat/provider.d.ts.map +1 -1
- package/dist/chat/provider.js +23 -14
- package/dist/chat/question.d.ts +1 -1
- package/dist/chat/question.d.ts.map +1 -1
- package/dist/chat/question.js +7 -18
- package/dist/chat/ready.d.ts +1 -1
- package/dist/chat/ready.d.ts.map +1 -1
- package/dist/chat/ready.js +1 -1
- package/dist/chat/steady.d.ts +3 -0
- package/dist/chat/steady.d.ts.map +1 -0
- package/dist/chat/steady.js +26 -0
- package/dist/chat/style.js +1 -1
- package/dist/chat.d.ts +2 -2
- package/dist/chat.d.ts.map +1 -1
- package/dist/chat.js +2 -2
- package/dist/client.d.ts +6 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +16 -5
- package/dist/collection.d.ts +4 -3
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +128 -63
- package/dist/connection.d.ts +12 -4
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +577 -217
- package/dist/conversation.d.ts +12 -0
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +196 -41
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +2 -1
- package/dist/host.d.ts +5 -4
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +45 -5
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/memory.d.ts +6 -3
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +17 -11
- package/dist/observation.d.ts +2 -0
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +9 -3
- package/dist/outcome.d.ts +14 -2
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +7 -0
- package/dist/overlay.d.ts +4 -4
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +181 -140
- package/dist/query.d.ts +26 -2
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +34 -6
- package/dist/reach.d.ts +4 -1
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +90 -21
- package/dist/react.d.ts +3 -3
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +7 -17
- package/dist/read-side.d.ts +3 -1
- package/dist/read-side.d.ts.map +1 -1
- package/dist/read-side.js +271 -82
- package/dist/reads.d.ts +11 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +98 -0
- package/dist/refresh.d.ts +4 -4
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +35 -16
- package/dist/replica.d.ts +11 -5
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +69 -40
- package/dist/room-draft.d.ts +12 -0
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +11 -12
- package/dist/rows.d.ts +1 -0
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +5 -0
- package/dist/save.d.ts +4 -2
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +195 -111
- package/dist/search.d.ts +17 -2
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +81 -7
- package/dist/seed.d.ts +16 -0
- package/dist/seed.d.ts.map +1 -0
- package/dist/seed.js +75 -0
- package/dist/shared.d.ts +4 -0
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +63 -33
- package/dist/store.d.ts +18 -2
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +398 -316
- package/dist/turn.d.ts +5 -3
- package/dist/turn.d.ts.map +1 -1
- package/dist/turn.js +26 -7
- package/dist/windows.d.ts +26 -0
- package/dist/windows.d.ts.map +1 -0
- package/dist/windows.js +93 -0
- package/dist/wire.d.ts +16 -0
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +4 -0
- package/package.json +2 -2
- package/dist/acquisition.d.ts +0 -14
- package/dist/acquisition.d.ts.map +0 -1
- package/dist/acquisition.js +0 -24
package/dist/conversation.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export type ConversationEntry = {
|
|
|
17
17
|
created: string;
|
|
18
18
|
finished: string | null;
|
|
19
19
|
outcome: string | null;
|
|
20
|
+
waiting: boolean;
|
|
20
21
|
state: ConversationState;
|
|
21
22
|
started: string | null;
|
|
22
23
|
};
|
|
@@ -36,10 +37,14 @@ export type ChatDraft = {
|
|
|
36
37
|
};
|
|
37
38
|
export type ConversationOptions = {
|
|
38
39
|
limit?: number;
|
|
40
|
+
after?: string;
|
|
41
|
+
total?: true;
|
|
39
42
|
};
|
|
40
43
|
export type ConversationView = {
|
|
41
44
|
conversation: string;
|
|
42
45
|
messages: readonly ConversationMessage[];
|
|
46
|
+
next?: string;
|
|
47
|
+
total?: number;
|
|
43
48
|
turn: RunningTurn | null;
|
|
44
49
|
questions: readonly unknown[];
|
|
45
50
|
process: {
|
|
@@ -47,6 +52,11 @@ export type ConversationView = {
|
|
|
47
52
|
} | null;
|
|
48
53
|
commands: readonly ProcessCommand[];
|
|
49
54
|
options: readonly SessionOption[];
|
|
55
|
+
starting: string | null;
|
|
56
|
+
link: {
|
|
57
|
+
connected: boolean;
|
|
58
|
+
} | null;
|
|
59
|
+
deliveryUnknown: readonly string[];
|
|
50
60
|
chatDraft: (ChatDraft & {
|
|
51
61
|
readonly revision: string;
|
|
52
62
|
}) | null;
|
|
@@ -64,6 +74,7 @@ export type ConversationSurface = {
|
|
|
64
74
|
};
|
|
65
75
|
export type ChatDraftSurface = {
|
|
66
76
|
write(conversation: string, draft: ChatDraft, revision?: string): Promise<void>;
|
|
77
|
+
prepend(conversation: string, draft: ChatDraft): Promise<void>;
|
|
67
78
|
discard(conversation: string): Promise<void>;
|
|
68
79
|
};
|
|
69
80
|
export type ConversationDependencies = {
|
|
@@ -89,6 +100,7 @@ export type ConversationStore = {
|
|
|
89
100
|
known(): boolean;
|
|
90
101
|
reconnected(): void;
|
|
91
102
|
reopened(): void;
|
|
103
|
+
lost(): void;
|
|
92
104
|
watch(conversation: string, options: ConversationOptions, deliver: (view: ConversationView) => void): () => void;
|
|
93
105
|
watchList(deliver: (entries: readonly ConversationEntry[]) => void): () => void;
|
|
94
106
|
watchAgents(deliver: (agents: readonly ConversationAgent[]) => void): () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EAEjB,mBAAmB,EACnB,kBAAkB,EAElB,cAAc,EACd,aAAa,EACb,WAAW,EAEZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAyB,KAAK,SAAS,EAAsB,MAAM,iBAAiB,CAAC;AAE5F,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAE7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAW,KAAK,UAAU,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAkB,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"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"}
|
package/dist/conversation.js
CHANGED
|
@@ -3,13 +3,26 @@ import { runtimeError } from './failure.js';
|
|
|
3
3
|
import { declaredFile } from './file.js';
|
|
4
4
|
import { changeBatchIdentity, chatDraftRevision } from './identity.js';
|
|
5
5
|
import { OFFLINE } from './outcome.js';
|
|
6
|
+
import { capped, cursorOf, decodedCursor, FROM_START, messageOrder, precedes } from './windows.js';
|
|
6
7
|
const QUIET = {
|
|
7
8
|
turn: null,
|
|
8
9
|
questions: [],
|
|
9
10
|
process: null,
|
|
10
11
|
commands: [],
|
|
11
12
|
options: [],
|
|
13
|
+
starting: null,
|
|
14
|
+
link: null,
|
|
15
|
+
deliveryUnknown: [],
|
|
12
16
|
};
|
|
17
|
+
const FACTS = [
|
|
18
|
+
'questions',
|
|
19
|
+
'process',
|
|
20
|
+
'commands',
|
|
21
|
+
'options',
|
|
22
|
+
'starting',
|
|
23
|
+
'link',
|
|
24
|
+
'deliveryUnknown',
|
|
25
|
+
];
|
|
13
26
|
export function unheldView(conversation) {
|
|
14
27
|
return {
|
|
15
28
|
conversation,
|
|
@@ -19,6 +32,9 @@ export function unheldView(conversation) {
|
|
|
19
32
|
process: null,
|
|
20
33
|
commands: [],
|
|
21
34
|
options: [],
|
|
35
|
+
starting: null,
|
|
36
|
+
link: null,
|
|
37
|
+
deliveryUnknown: [],
|
|
22
38
|
chatDraft: null,
|
|
23
39
|
};
|
|
24
40
|
}
|
|
@@ -82,19 +98,25 @@ function appliedTurn(held, operation) {
|
|
|
82
98
|
parts: held.parts.map((kept, at) => (at === operation.index ? changed : kept)),
|
|
83
99
|
};
|
|
84
100
|
}
|
|
85
|
-
function ordered(left, right) {
|
|
86
|
-
if (left.position !== right.position)
|
|
87
|
-
return left.position < right.position ? -1 : 1;
|
|
88
|
-
if (left.identity !== right.identity)
|
|
89
|
-
return left.identity < right.identity ? -1 : 1;
|
|
90
|
-
return 0;
|
|
91
|
-
}
|
|
92
101
|
function windowOf(held, arriving, limit) {
|
|
93
102
|
const byIdentity = new Map(held.map((message) => [message.identity, message]));
|
|
94
103
|
for (const message of arriving)
|
|
95
104
|
byIdentity.set(message.identity, message);
|
|
96
|
-
const next = [...byIdentity.values()].sort(
|
|
97
|
-
|
|
105
|
+
const next = [...byIdentity.values()].sort(messageOrder);
|
|
106
|
+
const start = Math.max(0, next.length - limit);
|
|
107
|
+
return { messages: next.slice(start), dropped: start > 0 };
|
|
108
|
+
}
|
|
109
|
+
function frameOf(asked, messages, more, total) {
|
|
110
|
+
const oldest = messages[0];
|
|
111
|
+
const next = !more
|
|
112
|
+
? undefined
|
|
113
|
+
: oldest === undefined
|
|
114
|
+
? (asked.after ?? FROM_START)
|
|
115
|
+
: cursorOf([oldest.position, oldest.identity]);
|
|
116
|
+
return {
|
|
117
|
+
...(next === undefined ? {} : { next }),
|
|
118
|
+
...(total === null ? {} : { total }),
|
|
119
|
+
};
|
|
98
120
|
}
|
|
99
121
|
function newestOf(arriving, from) {
|
|
100
122
|
return arriving.reduce((top, message) => (top === null || message.position > top ? message.position : top), from);
|
|
@@ -165,14 +187,24 @@ function answered(result, field) {
|
|
|
165
187
|
const value = answer[field];
|
|
166
188
|
return typeof value === 'string' ? value : null;
|
|
167
189
|
}
|
|
168
|
-
function
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
if (
|
|
190
|
+
function beforeOf(after) {
|
|
191
|
+
if (after === undefined)
|
|
192
|
+
return null;
|
|
193
|
+
const decoded = typeof after === 'string' ? decodedCursor(after) : null;
|
|
194
|
+
if (decoded?.length === 0)
|
|
195
|
+
return null;
|
|
196
|
+
const [position, identity] = decoded ?? [];
|
|
197
|
+
if (decoded?.length !== 2 || typeof position !== 'string' || typeof identity !== 'string') {
|
|
198
|
+
throw runtimeError('invalid-after', `conversation after must be the next an earlier view returned, got ${String(after)}`);
|
|
199
|
+
}
|
|
200
|
+
return [position, identity];
|
|
201
|
+
}
|
|
202
|
+
function askedOf(options) {
|
|
203
|
+
const { limit, after, total } = options;
|
|
204
|
+
if (limit !== undefined && (!Number.isInteger(limit) || limit < 0)) {
|
|
173
205
|
throw runtimeError('invalid-limit', `conversation limit must be a non-negative integer, got ${String(limit)}`);
|
|
174
206
|
}
|
|
175
|
-
return limit;
|
|
207
|
+
return { limit: capped(limit), after, before: beforeOf(after), total: total === true };
|
|
176
208
|
}
|
|
177
209
|
const EXPIRED = { kind: 'rejected', code: 'expired', fields: {}, retryable: false };
|
|
178
210
|
function unwritten(draft) {
|
|
@@ -191,11 +223,16 @@ function withSubmitted(draft, submitted) {
|
|
|
191
223
|
const { submitted: _held, ...unsent } = draft;
|
|
192
224
|
return submitted.length === 0 ? unsent : { ...unsent, submitted };
|
|
193
225
|
}
|
|
226
|
+
function prepended(draft, said) {
|
|
227
|
+
return {
|
|
228
|
+
text: [said.text, draft.text].filter((one) => one !== '').join('\n'),
|
|
229
|
+
files: [...said.files, ...draft.files],
|
|
230
|
+
};
|
|
231
|
+
}
|
|
194
232
|
function returned(draft, submission, others) {
|
|
195
233
|
return withSubmitted({
|
|
196
234
|
conversation: draft.conversation,
|
|
197
|
-
|
|
198
|
-
files: [...submission.files, ...draft.files],
|
|
235
|
+
...prepended(draft, submission),
|
|
199
236
|
revision: chatDraftRevision(),
|
|
200
237
|
}, others);
|
|
201
238
|
}
|
|
@@ -206,8 +243,10 @@ export function createConversationStore(deps) {
|
|
|
206
243
|
const drafts = new Map();
|
|
207
244
|
const sending = new Map();
|
|
208
245
|
const behind = new Set();
|
|
246
|
+
const catching = new Map();
|
|
209
247
|
const gaps = new Map();
|
|
210
248
|
const lives = new Map();
|
|
249
|
+
const unsent = new Map();
|
|
211
250
|
const views = new Map();
|
|
212
251
|
const listing = new Map();
|
|
213
252
|
const creations = new Set();
|
|
@@ -222,7 +261,7 @@ export function createConversationStore(deps) {
|
|
|
222
261
|
function liveOf(conversation) {
|
|
223
262
|
return lives.get(conversation) ?? QUIET;
|
|
224
263
|
}
|
|
225
|
-
function viewOf(conversation, held) {
|
|
264
|
+
function viewOf(conversation, held, frame) {
|
|
226
265
|
const draft = drafts.get(conversation);
|
|
227
266
|
const facts = liveOf(conversation);
|
|
228
267
|
return {
|
|
@@ -233,11 +272,15 @@ export function createConversationStore(deps) {
|
|
|
233
272
|
text,
|
|
234
273
|
message,
|
|
235
274
|
})),
|
|
275
|
+
...frame,
|
|
236
276
|
turn: structuredClone(facts.turn),
|
|
237
277
|
questions: structuredClone(facts.questions),
|
|
238
278
|
process: facts.process === null ? null : { ...facts.process },
|
|
239
279
|
commands: structuredClone(facts.commands),
|
|
240
280
|
options: structuredClone(facts.options),
|
|
281
|
+
starting: facts.starting,
|
|
282
|
+
link: facts.link === null ? null : { ...facts.link },
|
|
283
|
+
deliveryUnknown: [...facts.deliveryUnknown],
|
|
241
284
|
chatDraft: draft === undefined || unwritten(draft)
|
|
242
285
|
? null
|
|
243
286
|
: { text: draft.text, files: [...draft.files], revision: draft.revision },
|
|
@@ -252,16 +295,34 @@ export function createConversationStore(deps) {
|
|
|
252
295
|
const ready = [...view.watchers].filter((watcher) => watcher.ready);
|
|
253
296
|
if (ready.length === 0)
|
|
254
297
|
continue;
|
|
255
|
-
const value = viewOf(conversation, view.window);
|
|
298
|
+
const value = viewOf(conversation, view.window, sharedFrame(view, view.window));
|
|
256
299
|
for (const watcher of ready)
|
|
257
300
|
watcher.notify(value);
|
|
258
301
|
}
|
|
259
302
|
}
|
|
260
|
-
function
|
|
303
|
+
function sharedFrame(view, window) {
|
|
304
|
+
return frameOf(view.asked, window, view.more, view.total);
|
|
305
|
+
}
|
|
306
|
+
async function slide(local, conversation, arriving) {
|
|
307
|
+
let count;
|
|
261
308
|
for (const view of views.values()) {
|
|
262
309
|
if (view.conversation !== conversation || view.window === null)
|
|
263
310
|
continue;
|
|
264
|
-
|
|
311
|
+
if (arriving === null) {
|
|
312
|
+
view.window = [];
|
|
313
|
+
view.more = false;
|
|
314
|
+
if (view.total !== null)
|
|
315
|
+
view.total = 0;
|
|
316
|
+
continue;
|
|
317
|
+
}
|
|
318
|
+
const joining = arriving.filter((message) => precedes(message, view.asked.before));
|
|
319
|
+
const next = windowOf(view.window, joining, view.asked.limit);
|
|
320
|
+
view.window = next.messages;
|
|
321
|
+
view.more ||= next.dropped;
|
|
322
|
+
if (view.total !== null && arriving.length > 0) {
|
|
323
|
+
count ??= await local.messageCount(conversation);
|
|
324
|
+
view.total = count;
|
|
325
|
+
}
|
|
265
326
|
}
|
|
266
327
|
}
|
|
267
328
|
function changesOf(conversation, arriving) {
|
|
@@ -281,6 +342,7 @@ export function createConversationStore(deps) {
|
|
|
281
342
|
created: entry.created,
|
|
282
343
|
finished: entry.finished,
|
|
283
344
|
outcome: entry.outcome,
|
|
345
|
+
waiting: entry.waiting,
|
|
284
346
|
state: stateOf(entry.conversation),
|
|
285
347
|
started: lives.get(entry.conversation)?.turn?.started ?? null,
|
|
286
348
|
}));
|
|
@@ -363,9 +425,34 @@ export function createConversationStore(deps) {
|
|
|
363
425
|
return agentsRead;
|
|
364
426
|
}
|
|
365
427
|
function live(conversation, change) {
|
|
428
|
+
const owed = unsent.get(conversation);
|
|
429
|
+
for (const fact of FACTS.filter((one) => one in change))
|
|
430
|
+
owed?.delete(fact);
|
|
366
431
|
setLive(conversation, { ...liveOf(conversation), ...change });
|
|
367
432
|
emit(conversation);
|
|
368
433
|
}
|
|
434
|
+
function openingEnded() {
|
|
435
|
+
const owed = [...unsent];
|
|
436
|
+
unsent.clear();
|
|
437
|
+
for (const [conversation, facts] of owed) {
|
|
438
|
+
const held = lives.get(conversation);
|
|
439
|
+
if (held === undefined || facts.size === 0)
|
|
440
|
+
continue;
|
|
441
|
+
setLive(conversation, {
|
|
442
|
+
turn: held.turn,
|
|
443
|
+
questions: facts.has('questions') ? QUIET.questions : held.questions,
|
|
444
|
+
process: facts.has('process') ? QUIET.process : held.process,
|
|
445
|
+
commands: facts.has('commands') ? QUIET.commands : held.commands,
|
|
446
|
+
options: facts.has('options') ? QUIET.options : held.options,
|
|
447
|
+
starting: facts.has('starting') ? QUIET.starting : held.starting,
|
|
448
|
+
link: facts.has('link') ? QUIET.link : held.link,
|
|
449
|
+
deliveryUnknown: facts.has('deliveryUnknown')
|
|
450
|
+
? QUIET.deliveryUnknown
|
|
451
|
+
: held.deliveryUnknown,
|
|
452
|
+
});
|
|
453
|
+
emit(conversation);
|
|
454
|
+
}
|
|
455
|
+
}
|
|
369
456
|
function relayed(conversation, turn, operation) {
|
|
370
457
|
const held = liveOf(conversation).turn;
|
|
371
458
|
const next = held?.turn === turn ? appliedTurn(held, operation) : startedTurn(turn, operation);
|
|
@@ -409,8 +496,9 @@ export function createConversationStore(deps) {
|
|
|
409
496
|
partials.delete(conversation);
|
|
410
497
|
drafts.delete(conversation);
|
|
411
498
|
behind.delete(conversation);
|
|
499
|
+
unsent.delete(conversation);
|
|
412
500
|
setLive(conversation, null);
|
|
413
|
-
slide(conversation, null);
|
|
501
|
+
await slide(local, conversation, null);
|
|
414
502
|
}
|
|
415
503
|
if (changed.length > 0)
|
|
416
504
|
deps.publish(conversationChangeSet(removed, changed));
|
|
@@ -438,11 +526,11 @@ export function createConversationStore(deps) {
|
|
|
438
526
|
if (advances)
|
|
439
527
|
reads.set(conversation, message.position);
|
|
440
528
|
sealTurns(conversation, new Set([message.turn]));
|
|
441
|
-
slide(conversation, [message]);
|
|
529
|
+
await slide(local, conversation, [message]);
|
|
442
530
|
deps.publish(conversationChangeSet(changesOf(conversation, [message]), [conversation]));
|
|
443
531
|
});
|
|
444
532
|
}
|
|
445
|
-
async function readHistories(conversations) {
|
|
533
|
+
async function readHistories(conversations, ended) {
|
|
446
534
|
const generations = new Map(conversations.map((one) => [one, gaps.get(one) ?? 0]));
|
|
447
535
|
let asking = conversations.map((conversation) => ({
|
|
448
536
|
conversation,
|
|
@@ -468,10 +556,33 @@ export function createConversationStore(deps) {
|
|
|
468
556
|
following.push({ conversation: page.conversation, after: page.next });
|
|
469
557
|
}
|
|
470
558
|
}
|
|
559
|
+
for (const { conversation } of asking) {
|
|
560
|
+
if (!following.some((next) => next.conversation === conversation))
|
|
561
|
+
ended(conversation);
|
|
562
|
+
}
|
|
471
563
|
asking = following;
|
|
472
564
|
}
|
|
473
565
|
return null;
|
|
474
566
|
}
|
|
567
|
+
function caughtUp(conversations) {
|
|
568
|
+
const ends = new Map();
|
|
569
|
+
for (const conversation of conversations) {
|
|
570
|
+
const held = new Promise((end) => ends.set(conversation, end));
|
|
571
|
+
catching.set(conversation, held);
|
|
572
|
+
void held.then(() => {
|
|
573
|
+
if (catching.get(conversation) === held)
|
|
574
|
+
catching.delete(conversation);
|
|
575
|
+
});
|
|
576
|
+
}
|
|
577
|
+
const ended = (conversation) => ends.get(conversation)?.();
|
|
578
|
+
const read = readHistories(conversations, ended);
|
|
579
|
+
const endAll = () => {
|
|
580
|
+
for (const conversation of conversations)
|
|
581
|
+
ended(conversation);
|
|
582
|
+
};
|
|
583
|
+
read.then(endAll, endAll);
|
|
584
|
+
return read;
|
|
585
|
+
}
|
|
475
586
|
function keepPage(conversation, arriving, from, next, generation) {
|
|
476
587
|
return deps.durably(async (local) => {
|
|
477
588
|
if (!replicated.has(conversation))
|
|
@@ -490,7 +601,7 @@ export function createConversationStore(deps) {
|
|
|
490
601
|
sealTurns(conversation, new Set(arriving.map((message) => message.turn)));
|
|
491
602
|
if (whole && (gaps.get(conversation) ?? 0) === generation)
|
|
492
603
|
behind.delete(conversation);
|
|
493
|
-
slide(conversation, arriving);
|
|
604
|
+
await slide(local, conversation, arriving);
|
|
494
605
|
if (arriving.length > 0 || sealing || whole) {
|
|
495
606
|
deps.publish(conversationChangeSet(changesOf(conversation, arriving), [conversation]));
|
|
496
607
|
}
|
|
@@ -501,11 +612,8 @@ export function createConversationStore(deps) {
|
|
|
501
612
|
if (event.kind === 'gap') {
|
|
502
613
|
if (replicated.has(conversation))
|
|
503
614
|
gap(conversation);
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
return;
|
|
507
|
-
setLive(conversation, { ...QUIET, turn: held.turn });
|
|
508
|
-
emit(conversation);
|
|
615
|
+
if (lives.has(conversation))
|
|
616
|
+
unsent.set(conversation, new Set(FACTS));
|
|
509
617
|
return;
|
|
510
618
|
}
|
|
511
619
|
if (event.kind === 'turn') {
|
|
@@ -528,6 +636,18 @@ export function createConversationStore(deps) {
|
|
|
528
636
|
live(conversation, { options: structuredClone(event.options) });
|
|
529
637
|
return;
|
|
530
638
|
}
|
|
639
|
+
if (event.kind === 'starting') {
|
|
640
|
+
live(conversation, { starting: event.step });
|
|
641
|
+
return;
|
|
642
|
+
}
|
|
643
|
+
if (event.kind === 'link') {
|
|
644
|
+
live(conversation, { link: { connected: event.connected } });
|
|
645
|
+
return;
|
|
646
|
+
}
|
|
647
|
+
if (event.kind === 'deliveries') {
|
|
648
|
+
live(conversation, { deliveryUnknown: [...event.unknown] });
|
|
649
|
+
return;
|
|
650
|
+
}
|
|
531
651
|
const arriving = acceptedMessage(event.message);
|
|
532
652
|
if (arriving === null)
|
|
533
653
|
return;
|
|
@@ -667,8 +787,12 @@ export function createConversationStore(deps) {
|
|
|
667
787
|
return entries();
|
|
668
788
|
},
|
|
669
789
|
async read(conversation, options = {}) {
|
|
670
|
-
const
|
|
671
|
-
return deps.durably(async (local) =>
|
|
790
|
+
const asked = askedOf(options);
|
|
791
|
+
return deps.durably(async (local) => {
|
|
792
|
+
const { messages, more } = await local.messageWindow(conversation, asked.limit, asked.before);
|
|
793
|
+
const total = asked.total ? await local.messageCount(conversation) : null;
|
|
794
|
+
return structuredClone(viewOf(conversation, messages, frameOf(asked, messages, more, total)));
|
|
795
|
+
});
|
|
672
796
|
},
|
|
673
797
|
async create(input) {
|
|
674
798
|
const result = await deps.call('conversation.create', input);
|
|
@@ -732,6 +856,16 @@ export function createConversationStore(deps) {
|
|
|
732
856
|
...(current === undefined ? {} : pending(current)),
|
|
733
857
|
}));
|
|
734
858
|
},
|
|
859
|
+
prepend(conversation, draft) {
|
|
860
|
+
return withDraft(conversation, (current) => ({
|
|
861
|
+
conversation,
|
|
862
|
+
...(current === undefined
|
|
863
|
+
? { text: draft.text, files: [...draft.files] }
|
|
864
|
+
: prepended(current, draft)),
|
|
865
|
+
revision: chatDraftRevision(),
|
|
866
|
+
...(current === undefined ? {} : pending(current)),
|
|
867
|
+
}));
|
|
868
|
+
},
|
|
735
869
|
discard(conversation) {
|
|
736
870
|
return withDraft(conversation, (current) => current === undefined
|
|
737
871
|
? undefined
|
|
@@ -781,12 +915,20 @@ export function createConversationStore(deps) {
|
|
|
781
915
|
await remove(leaving);
|
|
782
916
|
},
|
|
783
917
|
async catchUp(progress) {
|
|
784
|
-
const
|
|
785
|
-
|
|
786
|
-
|
|
918
|
+
const owed = (conversation) => behind.has(conversation) && replicated.has(conversation);
|
|
919
|
+
const read = async (conversations) => {
|
|
920
|
+
if (conversations.length === 0 || deps.closed())
|
|
921
|
+
return;
|
|
922
|
+
const failed = await caughtUp(conversations);
|
|
787
923
|
if (failed?.kind === 'transport-uncertainty')
|
|
788
924
|
progress.reachable = false;
|
|
789
|
-
}
|
|
925
|
+
};
|
|
926
|
+
const asking = [...behind].filter(owed).sort();
|
|
927
|
+
const awaited = asking.filter((conversation) => catching.has(conversation));
|
|
928
|
+
await Promise.all([
|
|
929
|
+
read(asking.filter((conversation) => !catching.has(conversation))),
|
|
930
|
+
Promise.all(awaited.map((conversation) => catching.get(conversation))).then(() => read(awaited.filter((conversation) => owed(conversation) && !catching.has(conversation)))),
|
|
931
|
+
]);
|
|
790
932
|
if (behind.size > 0)
|
|
791
933
|
progress.complete = false;
|
|
792
934
|
},
|
|
@@ -828,27 +970,38 @@ export function createConversationStore(deps) {
|
|
|
828
970
|
reopened() {
|
|
829
971
|
sending.clear();
|
|
830
972
|
},
|
|
973
|
+
lost() {
|
|
974
|
+
catching.clear();
|
|
975
|
+
},
|
|
831
976
|
watch(conversation, options, deliver) {
|
|
832
|
-
const
|
|
833
|
-
const key = JSON.stringify([conversation, limit ?? null]);
|
|
977
|
+
const asked = askedOf(options);
|
|
978
|
+
const key = JSON.stringify([conversation, asked.limit, asked.after ?? null, asked.total]);
|
|
834
979
|
const view = views.get(key) ?? {
|
|
835
980
|
conversation,
|
|
836
|
-
|
|
981
|
+
asked,
|
|
837
982
|
watchers: new Set(),
|
|
838
983
|
window: null,
|
|
984
|
+
more: false,
|
|
985
|
+
total: null,
|
|
839
986
|
};
|
|
840
987
|
views.set(key, view);
|
|
841
988
|
const watcher = { notify: deliver, ready: false };
|
|
842
989
|
view.watchers.add(watcher);
|
|
843
990
|
void deps
|
|
844
991
|
.durably(async (local) => {
|
|
845
|
-
view.window
|
|
992
|
+
if (view.window !== null)
|
|
993
|
+
return;
|
|
994
|
+
const { messages, more } = await local.messageWindow(conversation, asked.limit, asked.before);
|
|
995
|
+
view.window = messages;
|
|
996
|
+
view.more = more;
|
|
997
|
+
view.total = asked.total ? await local.messageCount(conversation) : null;
|
|
846
998
|
})
|
|
847
999
|
.then(() => {
|
|
848
1000
|
if (deps.closed() || !view.watchers.has(watcher))
|
|
849
1001
|
return;
|
|
850
1002
|
watcher.ready = true;
|
|
851
|
-
|
|
1003
|
+
const window = view.window ?? [];
|
|
1004
|
+
watcher.notify(viewOf(conversation, window, sharedFrame(view, window)));
|
|
852
1005
|
})
|
|
853
1006
|
.catch(() => { });
|
|
854
1007
|
return () => {
|
|
@@ -900,6 +1053,7 @@ export function createConversationStore(deps) {
|
|
|
900
1053
|
creations.delete(entry.conversation);
|
|
901
1054
|
}
|
|
902
1055
|
listKnown = true;
|
|
1056
|
+
openingEnded();
|
|
903
1057
|
}
|
|
904
1058
|
else if (event.kind === 'listed') {
|
|
905
1059
|
listing.set(event.entry.conversation, { ...event.entry });
|
|
@@ -926,6 +1080,7 @@ export function createConversationStore(deps) {
|
|
|
926
1080
|
close() {
|
|
927
1081
|
views.clear();
|
|
928
1082
|
lives.clear();
|
|
1083
|
+
unsent.clear();
|
|
929
1084
|
listWatchers.clear();
|
|
930
1085
|
agentWatchers.clear();
|
|
931
1086
|
},
|
package/dist/entry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,SAAS,EAEf,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE9D,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AA0D7E,wBAAgB,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAE3E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAMpE;AAkCD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQ7D;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;CACzF,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,SAAS,EAEf,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE9D,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AA0D7E,wBAAgB,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAE3E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAMpE;AAkCD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQ7D;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;CACzF,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,UAAU,CAuDlE"}
|
package/dist/entry.js
CHANGED
|
@@ -134,7 +134,7 @@ export function entryScope(rooms) {
|
|
|
134
134
|
after: rowsOf(room.locator, path, passingFrontmatter(collection, path) ?? null, composition, null, null, null),
|
|
135
135
|
}));
|
|
136
136
|
});
|
|
137
|
-
readSide.apply({
|
|
137
|
+
const seeded = readSide.apply({
|
|
138
138
|
documents,
|
|
139
139
|
drafts: [],
|
|
140
140
|
rooms: [],
|
|
@@ -146,6 +146,7 @@ export function entryScope(rooms) {
|
|
|
146
146
|
const planned = { listed: true, rooms: held };
|
|
147
147
|
return {
|
|
148
148
|
async results(queries) {
|
|
149
|
+
await seeded;
|
|
149
150
|
const results = {};
|
|
150
151
|
for (const [name, query] of Object.entries(queries)) {
|
|
151
152
|
results[name] = (await readSide.query(planOf(query, planned), () => null)).rows;
|
package/dist/host.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type MdRuntimeOptions } from './connection.js';
|
|
2
|
-
import type { RuntimeDemand } from './acquisition.js';
|
|
3
2
|
import type { PortReach } from './reach.js';
|
|
4
3
|
import type { CapacityCause, CodeAvailability, Persistence, Readiness, SearchObligation } from './readiness.js';
|
|
4
|
+
import type { EntrySeed } from './seed.js';
|
|
5
5
|
import { type RuntimePort } from './wire.js';
|
|
6
6
|
export type MdRuntimeHostOptions = MdRuntimeOptions & {
|
|
7
7
|
deploymentFacts?: unknown;
|
|
@@ -10,22 +10,23 @@ export type AttachedPort = {
|
|
|
10
10
|
detach(): void;
|
|
11
11
|
narrow(reach: PortReach): void;
|
|
12
12
|
readiness(deliver: (readiness: Readiness) => void): () => void;
|
|
13
|
+
answered(queries: readonly unknown[], done: () => void): void;
|
|
13
14
|
code(code: CodeAvailability, capacity: CapacityCause | null): void;
|
|
14
15
|
search(search: SearchObligation): void;
|
|
15
16
|
};
|
|
16
17
|
export type MdRuntimeHost = {
|
|
17
18
|
attach(port: RuntimePort, app: string, release?: string, reach?: PortReach, code?: CodeAvailability, search?: SearchObligation): AttachedPort;
|
|
18
|
-
|
|
19
|
+
seed(entry: EntrySeed): void;
|
|
19
20
|
persisted(answer: Persistence): void;
|
|
20
21
|
endAuthorization(holder?: string): Promise<void>;
|
|
21
22
|
lose(locators: readonly string[]): Promise<void>;
|
|
22
23
|
stop(): Promise<void>;
|
|
23
24
|
};
|
|
24
25
|
export declare function serveMdRuntime(options: MdRuntimeHostOptions): MdRuntimeHost;
|
|
25
|
-
export type
|
|
26
|
+
export { entrySeedOf, type EntrySeed } from './seed.js';
|
|
26
27
|
export type { PortReach, ReachedDocument } from './reach.js';
|
|
27
28
|
export type { CapacityCause, CodeAvailability, Persistence, SearchObligation, } from './readiness.js';
|
|
28
29
|
export { createRecovery, retryDelay, type Attempt, type Attempted, type AttemptOptions, type Recovery, type RecoveryOptions, } from './recovery.js';
|
|
29
|
-
export { AUTHORED_SCHEMA, authoredBinding, authoredBy, authoredHolder, bindAuthored, openDatabase, STORE_SCHEMA, } from './store.js';
|
|
30
|
+
export { AUTHORED_SCHEMA, authoredBinding, authoredBy, authoredHolder, bindAuthored, openDatabase, STORE_SCHEMA, transacted, } from './store.js';
|
|
30
31
|
export type { RuntimePort } from './wire.js';
|
|
31
32
|
//# sourceMappingURL=host.d.ts.map
|
package/dist/host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,gBAAgB,
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,gBAAgB,EAItB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C,OAAO,EAGL,KAAK,WAAW,EAOjB,MAAM,WAAW,CAAC;AAInB,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,IAAI,IAAI,CAAC;IACf,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/B,SAAS,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC/D,QAAQ,CAAC,OAAO,EAAE,SAAS,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC9D,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC;IACnE,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,CACJ,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,SAAS,EACjB,IAAI,CAAC,EAAE,gBAAgB,EACvB,MAAM,CAAC,EAAE,gBAAgB,GACxB,YAAY,CAAC;IAChB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IACrC,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB,CAAC;AAiHF,wBAAgB,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAsK3E;AAED,OAAO,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AACxD,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7D,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EACd,UAAU,EACV,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,eAAe,EACf,UAAU,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
|