@agentshouse/mdruntime 0.1.0-c95464765b116 → 0.1.0-c969b8dee6cc8

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.
Files changed (99) hide show
  1. package/AGENTS.md +238 -233
  2. package/README.md +8 -8
  3. package/dist/adapter.d.ts +20 -6
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/bootstrap.d.ts +2 -1
  6. package/dist/bootstrap.d.ts.map +1 -1
  7. package/dist/bootstrap.js +4 -0
  8. package/dist/change-set.d.ts.map +1 -1
  9. package/dist/change-set.js +2 -1
  10. package/dist/chat/earlier.d.ts +10 -0
  11. package/dist/chat/earlier.d.ts.map +1 -0
  12. package/dist/chat/earlier.js +54 -0
  13. package/dist/chat/kit.js +1 -1
  14. package/dist/chat/list.d.ts.map +1 -1
  15. package/dist/chat/list.js +39 -3
  16. package/dist/chat/provider.d.ts +1 -1
  17. package/dist/chat/provider.d.ts.map +1 -1
  18. package/dist/chat/provider.js +35 -27
  19. package/dist/chat/question.d.ts +1 -1
  20. package/dist/chat/question.d.ts.map +1 -1
  21. package/dist/chat/question.js +7 -18
  22. package/dist/chat/style.js +1 -1
  23. package/dist/client.d.ts +7 -2
  24. package/dist/client.d.ts.map +1 -1
  25. package/dist/client.js +16 -5
  26. package/dist/connection.d.ts +13 -3
  27. package/dist/connection.d.ts.map +1 -1
  28. package/dist/connection.js +417 -107
  29. package/dist/conversation.d.ts +7 -0
  30. package/dist/conversation.d.ts.map +1 -1
  31. package/dist/conversation.js +206 -48
  32. package/dist/entry.d.ts.map +1 -1
  33. package/dist/entry.js +1 -1
  34. package/dist/host.d.ts +8 -3
  35. package/dist/host.d.ts.map +1 -1
  36. package/dist/host.js +58 -6
  37. package/dist/index.d.ts +6 -5
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +1 -0
  40. package/dist/memory.d.ts +6 -1
  41. package/dist/memory.d.ts.map +1 -1
  42. package/dist/memory.js +20 -5
  43. package/dist/model.d.ts +3 -2
  44. package/dist/model.d.ts.map +1 -1
  45. package/dist/model.js +1 -1
  46. package/dist/observation.d.ts +2 -0
  47. package/dist/observation.d.ts.map +1 -1
  48. package/dist/observation.js +9 -3
  49. package/dist/outcome.d.ts +8 -2
  50. package/dist/outcome.d.ts.map +1 -1
  51. package/dist/outcome.js +3 -0
  52. package/dist/overlay.d.ts +1 -0
  53. package/dist/overlay.d.ts.map +1 -1
  54. package/dist/overlay.js +27 -3
  55. package/dist/query.d.ts +29 -2
  56. package/dist/query.d.ts.map +1 -1
  57. package/dist/query.js +36 -7
  58. package/dist/reach.d.ts +1 -2
  59. package/dist/reach.d.ts.map +1 -1
  60. package/dist/reach.js +17 -4
  61. package/dist/react.d.ts +3 -3
  62. package/dist/react.d.ts.map +1 -1
  63. package/dist/react.js +7 -17
  64. package/dist/read-side.d.ts.map +1 -1
  65. package/dist/read-side.js +176 -48
  66. package/dist/reads.d.ts +11 -0
  67. package/dist/reads.d.ts.map +1 -0
  68. package/dist/reads.js +98 -0
  69. package/dist/refresh.d.ts +4 -4
  70. package/dist/refresh.d.ts.map +1 -1
  71. package/dist/refresh.js +6 -0
  72. package/dist/replica.d.ts +5 -1
  73. package/dist/replica.d.ts.map +1 -1
  74. package/dist/replica.js +30 -5
  75. package/dist/room-draft.d.ts +13 -1
  76. package/dist/room-draft.d.ts.map +1 -1
  77. package/dist/room-draft.js +2 -2
  78. package/dist/rows.d.ts +3 -1
  79. package/dist/rows.d.ts.map +1 -1
  80. package/dist/rows.js +8 -1
  81. package/dist/save.d.ts +1 -0
  82. package/dist/save.d.ts.map +1 -1
  83. package/dist/save.js +17 -1
  84. package/dist/search.d.ts +28 -7
  85. package/dist/search.d.ts.map +1 -1
  86. package/dist/search.js +89 -7
  87. package/dist/seed.d.ts +16 -0
  88. package/dist/seed.d.ts.map +1 -0
  89. package/dist/seed.js +75 -0
  90. package/dist/store.d.ts +20 -5
  91. package/dist/store.d.ts.map +1 -1
  92. package/dist/store.js +58 -18
  93. package/dist/windows.d.ts +26 -0
  94. package/dist/windows.d.ts.map +1 -0
  95. package/dist/windows.js +93 -0
  96. package/dist/wire.d.ts +16 -0
  97. package/dist/wire.d.ts.map +1 -1
  98. package/dist/wire.js +4 -0
  99. package/package.json +2 -2
@@ -36,10 +36,14 @@ export type ChatDraft = {
36
36
  };
37
37
  export type ConversationOptions = {
38
38
  limit?: number;
39
+ after?: string;
40
+ total?: true;
39
41
  };
40
42
  export type ConversationView = {
41
43
  conversation: string;
42
44
  messages: readonly ConversationMessage[];
45
+ next?: string;
46
+ total?: number;
43
47
  turn: RunningTurn | null;
44
48
  questions: readonly unknown[];
45
49
  process: {
@@ -64,6 +68,7 @@ export type ConversationSurface = {
64
68
  };
65
69
  export type ChatDraftSurface = {
66
70
  write(conversation: string, draft: ChatDraft, revision?: string): Promise<void>;
71
+ prepend(conversation: string, draft: ChatDraft): Promise<void>;
67
72
  discard(conversation: string): Promise<void>;
68
73
  };
69
74
  export type ConversationDependencies = {
@@ -89,6 +94,7 @@ export type ConversationStore = {
89
94
  known(): boolean;
90
95
  reconnected(): void;
91
96
  reopened(): void;
97
+ lost(): void;
92
98
  watch(conversation: string, options: ConversationOptions, deliver: (view: ConversationView) => void): () => void;
93
99
  watchList(deliver: (entries: readonly ConversationEntry[]) => void): () => void;
94
100
  watchAgents(deliver: (agents: readonly ConversationAgent[]) => void): () => void;
@@ -100,5 +106,6 @@ export type ConversationStore = {
100
106
  };
101
107
  export declare function unheldView(conversation: string): ConversationView;
102
108
  export declare const SESSION_STARTED = "Session started";
109
+ export declare function newChat(agent: string): string;
103
110
  export declare function createConversationStore(deps: ConversationDependencies): ConversationStore;
104
111
  //# sourceMappingURL=conversation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ 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: [],
@@ -23,6 +24,16 @@ export function unheldView(conversation) {
23
24
  };
24
25
  }
25
26
  export const SESSION_STARTED = 'Session started';
27
+ const NEW_CHAT = 'new:';
28
+ export function newChat(agent) {
29
+ return `${NEW_CHAT}${agent}`;
30
+ }
31
+ function creationOf(input) {
32
+ if (typeof input !== 'object' || input === null)
33
+ return null;
34
+ const { agent_id: agent, operation_id: operation } = input;
35
+ return typeof agent === 'string' && typeof operation === 'string' ? { agent, operation } : null;
36
+ }
26
37
  function startedTurn(turn, operation) {
27
38
  if (operation.op === 'begin')
28
39
  return { turn, started: operation.at, parts: [], context: null };
@@ -72,19 +83,25 @@ function appliedTurn(held, operation) {
72
83
  parts: held.parts.map((kept, at) => (at === operation.index ? changed : kept)),
73
84
  };
74
85
  }
75
- function ordered(left, right) {
76
- if (left.position !== right.position)
77
- return left.position < right.position ? -1 : 1;
78
- if (left.identity !== right.identity)
79
- return left.identity < right.identity ? -1 : 1;
80
- return 0;
81
- }
82
86
  function windowOf(held, arriving, limit) {
83
87
  const byIdentity = new Map(held.map((message) => [message.identity, message]));
84
88
  for (const message of arriving)
85
89
  byIdentity.set(message.identity, message);
86
- const next = [...byIdentity.values()].sort(ordered);
87
- return limit === undefined ? next : next.slice(Math.max(0, next.length - limit));
90
+ const next = [...byIdentity.values()].sort(messageOrder);
91
+ const start = Math.max(0, next.length - limit);
92
+ return { messages: next.slice(start), dropped: start > 0 };
93
+ }
94
+ function frameOf(asked, messages, more, total) {
95
+ const oldest = messages[0];
96
+ const next = !more
97
+ ? undefined
98
+ : oldest === undefined
99
+ ? (asked.after ?? FROM_START)
100
+ : cursorOf([oldest.position, oldest.identity]);
101
+ return {
102
+ ...(next === undefined ? {} : { next }),
103
+ ...(total === null ? {} : { total }),
104
+ };
88
105
  }
89
106
  function newestOf(arriving, from) {
90
107
  return arriving.reduce((top, message) => (top === null || message.position > top ? message.position : top), from);
@@ -146,40 +163,61 @@ function historyPages(result) {
146
163
  }
147
164
  return pages;
148
165
  }
149
- function turnOf(result) {
166
+ function answered(result, field) {
150
167
  if (result.kind !== 'action')
151
168
  return null;
152
169
  const answer = result.result;
153
170
  if (typeof answer !== 'object' || answer === null)
154
171
  return null;
155
- const record = answer;
156
- return typeof record.turn === 'string' ? record.turn : null;
172
+ const value = answer[field];
173
+ return typeof value === 'string' ? value : null;
174
+ }
175
+ function beforeOf(after) {
176
+ if (after === undefined)
177
+ return null;
178
+ const decoded = typeof after === 'string' ? decodedCursor(after) : null;
179
+ if (decoded?.length === 0)
180
+ return null;
181
+ const [position, identity] = decoded ?? [];
182
+ if (decoded?.length !== 2 || typeof position !== 'string' || typeof identity !== 'string') {
183
+ throw runtimeError('invalid-after', `conversation after must be the next an earlier view returned, got ${String(after)}`);
184
+ }
185
+ return [position, identity];
157
186
  }
158
- function limitOf(options) {
159
- const { limit } = options;
160
- if (limit === undefined)
161
- return undefined;
162
- if (!Number.isInteger(limit) || limit < 0) {
187
+ function askedOf(options) {
188
+ const { limit, after, total } = options;
189
+ if (limit !== undefined && (!Number.isInteger(limit) || limit < 0)) {
163
190
  throw runtimeError('invalid-limit', `conversation limit must be a non-negative integer, got ${String(limit)}`);
164
191
  }
165
- return limit;
192
+ return { limit: capped(limit), after, before: beforeOf(after), total: total === true };
166
193
  }
167
194
  const EXPIRED = { kind: 'rejected', code: 'expired', fields: {}, retryable: false };
168
195
  function unwritten(draft) {
169
196
  return draft.text === '' && draft.files.length === 0;
170
197
  }
171
198
  function pending(draft) {
172
- return draft.submitted === undefined ? {} : { submitted: draft.submitted };
199
+ return {
200
+ ...(draft.submitted === undefined ? {} : { submitted: draft.submitted }),
201
+ ...(draft.moves === undefined ? {} : { moves: draft.moves }),
202
+ };
203
+ }
204
+ function empty(draft) {
205
+ return unwritten(draft) && draft.submitted === undefined && draft.moves === undefined;
173
206
  }
174
207
  function withSubmitted(draft, submitted) {
175
208
  const { submitted: _held, ...unsent } = draft;
176
209
  return submitted.length === 0 ? unsent : { ...unsent, submitted };
177
210
  }
211
+ function prepended(draft, said) {
212
+ return {
213
+ text: [said.text, draft.text].filter((one) => one !== '').join('\n'),
214
+ files: [...said.files, ...draft.files],
215
+ };
216
+ }
178
217
  function returned(draft, submission, others) {
179
218
  return withSubmitted({
180
219
  conversation: draft.conversation,
181
- text: [submission.text, draft.text].filter((one) => one !== '').join('\n'),
182
- files: [...submission.files, ...draft.files],
220
+ ...prepended(draft, submission),
183
221
  revision: chatDraftRevision(),
184
222
  }, others);
185
223
  }
@@ -190,10 +228,12 @@ export function createConversationStore(deps) {
190
228
  const drafts = new Map();
191
229
  const sending = new Map();
192
230
  const behind = new Set();
231
+ const catching = new Map();
193
232
  const gaps = new Map();
194
233
  const lives = new Map();
195
234
  const views = new Map();
196
235
  const listing = new Map();
236
+ const creations = new Set();
197
237
  const listWatchers = new Set();
198
238
  let listKnown = false;
199
239
  const agentWatchers = new Set();
@@ -205,7 +245,7 @@ export function createConversationStore(deps) {
205
245
  function liveOf(conversation) {
206
246
  return lives.get(conversation) ?? QUIET;
207
247
  }
208
- function viewOf(conversation, held) {
248
+ function viewOf(conversation, held, frame) {
209
249
  const draft = drafts.get(conversation);
210
250
  const facts = liveOf(conversation);
211
251
  return {
@@ -216,6 +256,7 @@ export function createConversationStore(deps) {
216
256
  text,
217
257
  message,
218
258
  })),
259
+ ...frame,
219
260
  turn: structuredClone(facts.turn),
220
261
  questions: structuredClone(facts.questions),
221
262
  process: facts.process === null ? null : { ...facts.process },
@@ -235,16 +276,34 @@ export function createConversationStore(deps) {
235
276
  const ready = [...view.watchers].filter((watcher) => watcher.ready);
236
277
  if (ready.length === 0)
237
278
  continue;
238
- const value = viewOf(conversation, view.window);
279
+ const value = viewOf(conversation, view.window, sharedFrame(view, view.window));
239
280
  for (const watcher of ready)
240
281
  watcher.notify(value);
241
282
  }
242
283
  }
243
- function slide(conversation, arriving) {
284
+ function sharedFrame(view, window) {
285
+ return frameOf(view.asked, window, view.more, view.total);
286
+ }
287
+ async function slide(local, conversation, arriving) {
288
+ let count;
244
289
  for (const view of views.values()) {
245
290
  if (view.conversation !== conversation || view.window === null)
246
291
  continue;
247
- view.window = arriving === null ? [] : windowOf(view.window, arriving, view.limit);
292
+ if (arriving === null) {
293
+ view.window = [];
294
+ view.more = false;
295
+ if (view.total !== null)
296
+ view.total = 0;
297
+ continue;
298
+ }
299
+ const joining = arriving.filter((message) => precedes(message, view.asked.before));
300
+ const next = windowOf(view.window, joining, view.asked.limit);
301
+ view.window = next.messages;
302
+ view.more ||= next.dropped;
303
+ if (view.total !== null && arriving.length > 0) {
304
+ count ??= await local.messageCount(conversation);
305
+ view.total = count;
306
+ }
248
307
  }
249
308
  }
250
309
  function changesOf(conversation, arriving) {
@@ -332,6 +391,12 @@ export function createConversationStore(deps) {
332
391
  if (named)
333
392
  emitList();
334
393
  emitAgents();
394
+ const ended = [...drafts.keys()].filter(retiredChat);
395
+ if (ended.length > 0)
396
+ await remove(ended);
397
+ }
398
+ function retiredChat(conversation) {
399
+ return (conversation.startsWith(NEW_CHAT) && retiredAgents.has(conversation.slice(NEW_CHAT.length)));
335
400
  }
336
401
  function agentsReady() {
337
402
  agentsRead ??= readAgents().catch(() => {
@@ -387,7 +452,7 @@ export function createConversationStore(deps) {
387
452
  drafts.delete(conversation);
388
453
  behind.delete(conversation);
389
454
  setLive(conversation, null);
390
- slide(conversation, null);
455
+ await slide(local, conversation, null);
391
456
  }
392
457
  if (changed.length > 0)
393
458
  deps.publish(conversationChangeSet(removed, changed));
@@ -415,11 +480,11 @@ export function createConversationStore(deps) {
415
480
  if (advances)
416
481
  reads.set(conversation, message.position);
417
482
  sealTurns(conversation, new Set([message.turn]));
418
- slide(conversation, [message]);
483
+ await slide(local, conversation, [message]);
419
484
  deps.publish(conversationChangeSet(changesOf(conversation, [message]), [conversation]));
420
485
  });
421
486
  }
422
- async function readHistories(conversations) {
487
+ async function readHistories(conversations, ended) {
423
488
  const generations = new Map(conversations.map((one) => [one, gaps.get(one) ?? 0]));
424
489
  let asking = conversations.map((conversation) => ({
425
490
  conversation,
@@ -445,10 +510,33 @@ export function createConversationStore(deps) {
445
510
  following.push({ conversation: page.conversation, after: page.next });
446
511
  }
447
512
  }
513
+ for (const { conversation } of asking) {
514
+ if (!following.some((next) => next.conversation === conversation))
515
+ ended(conversation);
516
+ }
448
517
  asking = following;
449
518
  }
450
519
  return null;
451
520
  }
521
+ function caughtUp(conversations) {
522
+ const ends = new Map();
523
+ for (const conversation of conversations) {
524
+ const held = new Promise((end) => ends.set(conversation, end));
525
+ catching.set(conversation, held);
526
+ void held.then(() => {
527
+ if (catching.get(conversation) === held)
528
+ catching.delete(conversation);
529
+ });
530
+ }
531
+ const ended = (conversation) => ends.get(conversation)?.();
532
+ const read = readHistories(conversations, ended);
533
+ const endAll = () => {
534
+ for (const conversation of conversations)
535
+ ended(conversation);
536
+ };
537
+ read.then(endAll, endAll);
538
+ return read;
539
+ }
452
540
  function keepPage(conversation, arriving, from, next, generation) {
453
541
  return deps.durably(async (local) => {
454
542
  if (!replicated.has(conversation))
@@ -467,7 +555,7 @@ export function createConversationStore(deps) {
467
555
  sealTurns(conversation, new Set(arriving.map((message) => message.turn)));
468
556
  if (whole && (gaps.get(conversation) ?? 0) === generation)
469
557
  behind.delete(conversation);
470
- slide(conversation, arriving);
558
+ await slide(local, conversation, arriving);
471
559
  if (arriving.length > 0 || sealing || whole) {
472
560
  deps.publish(conversationChangeSet(changesOf(conversation, arriving), [conversation]));
473
561
  }
@@ -516,12 +604,12 @@ export function createConversationStore(deps) {
516
604
  emit(conversation);
517
605
  }
518
606
  async function kept(local, conversation, following) {
519
- if (following === null || (unwritten(following) && following.submitted === undefined)) {
607
+ if (following === null || empty(following)) {
520
608
  await local.dropChatDraft(conversation);
521
609
  drafts.delete(conversation);
522
610
  }
523
611
  else {
524
- await local.keepChatDraft(following);
612
+ await local.keepChatDrafts([following]);
525
613
  drafts.set(conversation, following);
526
614
  }
527
615
  }
@@ -534,6 +622,29 @@ export function createConversationStore(deps) {
534
622
  await kept(local, conversation, withSubmitted(held, left));
535
623
  return true;
536
624
  }
625
+ function moved(agent, operation, to) {
626
+ const from = newChat(agent);
627
+ return deps.durably(async (local) => {
628
+ const held = drafts.get(from);
629
+ const earlier = (held?.moves ?? []).filter((one) => !deps.expired(one));
630
+ if (earlier.includes(operation))
631
+ return;
632
+ const blank = {
633
+ conversation: from,
634
+ text: '',
635
+ files: [],
636
+ revision: chatDraftRevision(),
637
+ };
638
+ const { moves: _answered, ...unsent } = held ?? blank;
639
+ const taken = drafts.has(to) || empty(unsent) ? [] : [{ ...unsent, conversation: to }];
640
+ const left = { ...(taken.length === 0 ? unsent : blank), moves: [...earlier, operation] };
641
+ await local.keepChatDrafts([left, ...taken]);
642
+ drafts.set(from, left);
643
+ for (const one of taken)
644
+ drafts.set(to, one);
645
+ deps.publish(conversationChangeSet([], [from, to]));
646
+ });
647
+ }
537
648
  function withDraft(conversation, next) {
538
649
  return deps.durably(async (local) => {
539
650
  const following = await next(drafts.get(conversation), local);
@@ -592,7 +703,7 @@ export function createConversationStore(deps) {
592
703
  deps.unanswered();
593
704
  return result;
594
705
  }
595
- const turn = turnOf(result);
706
+ const turn = answered(result, 'turn');
596
707
  await withDraft(conversation, async (current, local) => {
597
708
  const held = current?.submitted?.find((one) => one.operation === submission.operation);
598
709
  if (current === undefined || held === undefined || held.turn !== null)
@@ -621,11 +732,24 @@ export function createConversationStore(deps) {
621
732
  return entries();
622
733
  },
623
734
  async read(conversation, options = {}) {
624
- const limit = limitOf(options);
625
- return deps.durably(async (local) => structuredClone(viewOf(conversation, await local.messageWindow(conversation, limit))));
735
+ const asked = askedOf(options);
736
+ return deps.durably(async (local) => {
737
+ const { messages, more } = await local.messageWindow(conversation, asked.limit, asked.before);
738
+ const total = asked.total ? await local.messageCount(conversation) : null;
739
+ return structuredClone(viewOf(conversation, messages, frameOf(asked, messages, more, total)));
740
+ });
626
741
  },
627
- create(input) {
628
- return deps.call('conversation.create', input);
742
+ async create(input) {
743
+ const result = await deps.call('conversation.create', input);
744
+ const conversation = answered(result, 'conversation');
745
+ if (conversation === null)
746
+ return result;
747
+ if (!listing.has(conversation))
748
+ creations.add(conversation);
749
+ const creation = creationOf(input);
750
+ if (creation !== null)
751
+ await moved(creation.agent, creation.operation, conversation);
752
+ return result;
629
753
  },
630
754
  async send(conversation, operation = changeBatchIdentity(), draft) {
631
755
  if (deps.online()) {
@@ -674,7 +798,17 @@ export function createConversationStore(deps) {
674
798
  text: draft.text,
675
799
  files: [...draft.files],
676
800
  revision,
677
- ...(current?.submitted === undefined ? {} : { submitted: current.submitted }),
801
+ ...(current === undefined ? {} : pending(current)),
802
+ }));
803
+ },
804
+ prepend(conversation, draft) {
805
+ return withDraft(conversation, (current) => ({
806
+ conversation,
807
+ ...(current === undefined
808
+ ? { text: draft.text, files: [...draft.files] }
809
+ : prepended(current, draft)),
810
+ revision: chatDraftRevision(),
811
+ ...(current === undefined ? {} : pending(current)),
678
812
  }));
679
813
  },
680
814
  discard(conversation) {
@@ -713,7 +847,9 @@ export function createConversationStore(deps) {
713
847
  const named = new Set(listing.keys());
714
848
  const leaving = [
715
849
  ...new Set([...replicated, ...stored, ...reads.keys(), ...drafts.keys()]),
716
- ].filter((conversation) => !named.has(conversation));
850
+ ].filter((conversation) => !named.has(conversation) &&
851
+ !creations.has(conversation) &&
852
+ (!conversation.startsWith(NEW_CHAT) || retiredChat(conversation)));
717
853
  for (const conversation of named) {
718
854
  if (!replicated.has(conversation))
719
855
  behind.add(conversation);
@@ -724,12 +860,20 @@ export function createConversationStore(deps) {
724
860
  await remove(leaving);
725
861
  },
726
862
  async catchUp(progress) {
727
- const reading = [...behind].filter((conversation) => replicated.has(conversation)).sort();
728
- if (reading.length > 0 && !deps.closed()) {
729
- const failed = await readHistories(reading);
863
+ const owed = (conversation) => behind.has(conversation) && replicated.has(conversation);
864
+ const read = async (conversations) => {
865
+ if (conversations.length === 0 || deps.closed())
866
+ return;
867
+ const failed = await caughtUp(conversations);
730
868
  if (failed?.kind === 'transport-uncertainty')
731
869
  progress.reachable = false;
732
- }
870
+ };
871
+ const asking = [...behind].filter(owed).sort();
872
+ const awaited = asking.filter((conversation) => catching.has(conversation));
873
+ await Promise.all([
874
+ read(asking.filter((conversation) => !catching.has(conversation))),
875
+ Promise.all(awaited.map((conversation) => catching.get(conversation))).then(() => read(awaited.filter((conversation) => owed(conversation) && !catching.has(conversation)))),
876
+ ]);
733
877
  if (behind.size > 0)
734
878
  progress.complete = false;
735
879
  },
@@ -771,27 +915,38 @@ export function createConversationStore(deps) {
771
915
  reopened() {
772
916
  sending.clear();
773
917
  },
918
+ lost() {
919
+ catching.clear();
920
+ },
774
921
  watch(conversation, options, deliver) {
775
- const limit = limitOf(options);
776
- const key = JSON.stringify([conversation, limit ?? null]);
922
+ const asked = askedOf(options);
923
+ const key = JSON.stringify([conversation, asked.limit, asked.after ?? null, asked.total]);
777
924
  const view = views.get(key) ?? {
778
925
  conversation,
779
- limit,
926
+ asked,
780
927
  watchers: new Set(),
781
928
  window: null,
929
+ more: false,
930
+ total: null,
782
931
  };
783
932
  views.set(key, view);
784
933
  const watcher = { notify: deliver, ready: false };
785
934
  view.watchers.add(watcher);
786
935
  void deps
787
936
  .durably(async (local) => {
788
- view.window ??= await local.messageWindow(conversation, limit);
937
+ if (view.window !== null)
938
+ return;
939
+ const { messages, more } = await local.messageWindow(conversation, asked.limit, asked.before);
940
+ view.window = messages;
941
+ view.more = more;
942
+ view.total = asked.total ? await local.messageCount(conversation) : null;
789
943
  })
790
944
  .then(() => {
791
945
  if (deps.closed() || !view.watchers.has(watcher))
792
946
  return;
793
947
  watcher.ready = true;
794
- watcher.notify(viewOf(conversation, view.window ?? []));
948
+ const window = view.window ?? [];
949
+ watcher.notify(viewOf(conversation, window, sharedFrame(view, window)));
795
950
  })
796
951
  .catch(() => { });
797
952
  return () => {
@@ -838,12 +993,15 @@ export function createConversationStore(deps) {
838
993
  if (event.kind === 'list' || event.kind === 'listed' || event.kind === 'unlisted') {
839
994
  if (event.kind === 'list') {
840
995
  listing.clear();
841
- for (const entry of event.entries)
996
+ for (const entry of event.entries) {
842
997
  listing.set(entry.conversation, { ...entry });
998
+ creations.delete(entry.conversation);
999
+ }
843
1000
  listKnown = true;
844
1001
  }
845
1002
  else if (event.kind === 'listed') {
846
1003
  listing.set(event.entry.conversation, { ...event.entry });
1004
+ creations.delete(event.entry.conversation);
847
1005
  }
848
1006
  else {
849
1007
  listing.delete(event.conversation);
@@ -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,CAqDlE"}
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,CAsDlE"}
package/dist/entry.js CHANGED
@@ -131,7 +131,7 @@ export function entryScope(rooms) {
131
131
  locator: room.locator,
132
132
  path,
133
133
  before: [],
134
- after: rowsOf(room.locator, path, passingFrontmatter(collection, path) ?? null, composition, null, null),
134
+ after: rowsOf(room.locator, path, passingFrontmatter(collection, path) ?? null, composition, null, null, null),
135
135
  }));
136
136
  });
137
137
  readSide.apply({
package/dist/host.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import { type MdRuntimeOptions } from './connection.js';
2
2
  import type { RuntimeDemand } from './acquisition.js';
3
3
  import type { PortReach } from './reach.js';
4
- import type { CapacityCause, CodeAvailability, Persistence, Readiness } from './readiness.js';
4
+ import type { CapacityCause, CodeAvailability, Persistence, Readiness, SearchObligation } from './readiness.js';
5
+ import type { EntrySeed } from './seed.js';
5
6
  import { type RuntimePort } from './wire.js';
6
7
  export type MdRuntimeHostOptions = MdRuntimeOptions & {
7
8
  deploymentFacts?: unknown;
@@ -10,11 +11,14 @@ export type AttachedPort = {
10
11
  detach(): void;
11
12
  narrow(reach: PortReach): void;
12
13
  readiness(deliver: (readiness: Readiness) => void): () => void;
14
+ answered(queries: readonly unknown[], done: () => void): void;
13
15
  code(code: CodeAvailability, capacity: CapacityCause | null): void;
16
+ search(search: SearchObligation): void;
14
17
  };
15
18
  export type MdRuntimeHost = {
16
- attach(port: RuntimePort, app: string, release?: string, reach?: PortReach, code?: CodeAvailability): AttachedPort;
19
+ attach(port: RuntimePort, app: string, release?: string, reach?: PortReach, code?: CodeAvailability, search?: SearchObligation): AttachedPort;
17
20
  acquire(demand: RuntimeDemand): void;
21
+ seed(entry: EntrySeed): void;
18
22
  persisted(answer: Persistence): void;
19
23
  endAuthorization(holder?: string): Promise<void>;
20
24
  lose(locators: readonly string[]): Promise<void>;
@@ -22,8 +26,9 @@ export type MdRuntimeHost = {
22
26
  };
23
27
  export declare function serveMdRuntime(options: MdRuntimeHostOptions): MdRuntimeHost;
24
28
  export type { RuntimeDemand } from './acquisition.js';
29
+ export { entrySeedOf, type EntrySeed } from './seed.js';
25
30
  export type { PortReach, ReachedDocument } from './reach.js';
26
- export type { CapacityCause, CodeAvailability, Persistence } from './readiness.js';
31
+ export type { CapacityCause, CodeAvailability, Persistence, SearchObligation, } from './readiness.js';
27
32
  export { createRecovery, retryDelay, type Attempt, type Attempted, type AttemptOptions, type Recovery, type RecoveryOptions, } from './recovery.js';
28
33
  export { AUTHORED_SCHEMA, authoredBinding, authoredBy, authoredHolder, bindAuthored, openDatabase, STORE_SCHEMA, } from './store.js';
29
34
  export type { RuntimePort } from './wire.js';
@@ -1 +1 @@
1
- {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI9F,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,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC;CACpE,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,GACtB,YAAY,CAAC;IAChB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,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;AA4FF,wBAAgB,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA4I3E;AAED,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7D,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACnF,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,GACb,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
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,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,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,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,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,CAyK3E;AAED,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,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,GACb,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}