@agentshouse/mdruntime 0.1.0-cd50a4607cb7d → 0.1.0-cd76160689224

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 (98) hide show
  1. package/AGENTS.md +118 -115
  2. package/dist/acquisition.d.ts +14 -0
  3. package/dist/acquisition.d.ts.map +1 -0
  4. package/dist/acquisition.js +24 -0
  5. package/dist/adapter.d.ts +25 -7
  6. package/dist/adapter.d.ts.map +1 -1
  7. package/dist/bootstrap.d.ts +2 -1
  8. package/dist/bootstrap.d.ts.map +1 -1
  9. package/dist/bootstrap.js +4 -0
  10. package/dist/change-set.d.ts.map +1 -1
  11. package/dist/change-set.js +2 -1
  12. package/dist/chat/kit.d.ts +2 -1
  13. package/dist/chat/kit.d.ts.map +1 -1
  14. package/dist/chat/kit.js +3 -3
  15. package/dist/chat/list.d.ts +2 -1
  16. package/dist/chat/list.d.ts.map +1 -1
  17. package/dist/chat/list.js +4 -3
  18. package/dist/chat/messages.d.ts +1 -0
  19. package/dist/chat/messages.d.ts.map +1 -1
  20. package/dist/chat/messages.js +4 -0
  21. package/dist/chat/provider.d.ts +1 -1
  22. package/dist/chat/provider.d.ts.map +1 -1
  23. package/dist/chat/provider.js +26 -17
  24. package/dist/chat/ready.d.ts +1 -0
  25. package/dist/chat/ready.d.ts.map +1 -1
  26. package/dist/chat/ready.js +2 -2
  27. package/dist/client.d.ts +7 -2
  28. package/dist/client.d.ts.map +1 -1
  29. package/dist/client.js +12 -2
  30. package/dist/connection.d.ts +18 -3
  31. package/dist/connection.d.ts.map +1 -1
  32. package/dist/connection.js +696 -79
  33. package/dist/conversation.d.ts +3 -0
  34. package/dist/conversation.d.ts.map +1 -1
  35. package/dist/conversation.js +115 -17
  36. package/dist/durability.d.ts +7 -1
  37. package/dist/durability.d.ts.map +1 -1
  38. package/dist/entry.d.ts.map +1 -1
  39. package/dist/entry.js +1 -1
  40. package/dist/host.d.ts +15 -2
  41. package/dist/host.d.ts.map +1 -1
  42. package/dist/host.js +83 -8
  43. package/dist/index.d.ts +7 -5
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +1 -0
  46. package/dist/memory.d.ts +8 -2
  47. package/dist/memory.d.ts.map +1 -1
  48. package/dist/memory.js +26 -6
  49. package/dist/model.d.ts +3 -2
  50. package/dist/model.d.ts.map +1 -1
  51. package/dist/model.js +1 -1
  52. package/dist/outcome.d.ts +8 -2
  53. package/dist/outcome.d.ts.map +1 -1
  54. package/dist/outcome.js +3 -0
  55. package/dist/overlay.d.ts +1 -0
  56. package/dist/overlay.d.ts.map +1 -1
  57. package/dist/overlay.js +27 -3
  58. package/dist/query.d.ts +8 -1
  59. package/dist/query.d.ts.map +1 -1
  60. package/dist/query.js +8 -2
  61. package/dist/reach.d.ts +6 -3
  62. package/dist/reach.d.ts.map +1 -1
  63. package/dist/reach.js +17 -2
  64. package/dist/react.d.ts +4 -1
  65. package/dist/react.d.ts.map +1 -1
  66. package/dist/react.js +6 -4
  67. package/dist/read-side.d.ts.map +1 -1
  68. package/dist/read-side.js +3 -0
  69. package/dist/readiness.d.ts +53 -0
  70. package/dist/readiness.d.ts.map +1 -0
  71. package/dist/readiness.js +33 -0
  72. package/dist/reads.d.ts +11 -0
  73. package/dist/reads.d.ts.map +1 -0
  74. package/dist/reads.js +98 -0
  75. package/dist/refresh.d.ts +4 -4
  76. package/dist/refresh.d.ts.map +1 -1
  77. package/dist/refresh.js +6 -0
  78. package/dist/replica.d.ts.map +1 -1
  79. package/dist/replica.js +11 -2
  80. package/dist/room-draft.d.ts +13 -1
  81. package/dist/room-draft.d.ts.map +1 -1
  82. package/dist/room-draft.js +2 -2
  83. package/dist/rows.d.ts +2 -1
  84. package/dist/rows.d.ts.map +1 -1
  85. package/dist/rows.js +3 -1
  86. package/dist/search.d.ts +14 -6
  87. package/dist/search.d.ts.map +1 -1
  88. package/dist/search.js +33 -12
  89. package/dist/seed.d.ts +16 -0
  90. package/dist/seed.d.ts.map +1 -0
  91. package/dist/seed.js +61 -0
  92. package/dist/store.d.ts +19 -3
  93. package/dist/store.d.ts.map +1 -1
  94. package/dist/store.js +59 -14
  95. package/dist/wire.d.ts +140 -32
  96. package/dist/wire.d.ts.map +1 -1
  97. package/dist/wire.js +49 -31
  98. package/package.json +2 -2
package/dist/search.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { ProviderRefusal } from './adapter.js';
1
2
  import type { ChangeSet } from './change-set.js';
2
3
  import { type CoveredRoom, type Filter, type PendingRoom } from './query.js';
3
4
  import type { Open } from './open.js';
@@ -5,6 +6,7 @@ export type DocumentPart = Open<'fields' | 'sections' | 'preamble' | 'path'>;
5
6
  export type SearchRequest = {
6
7
  text: string;
7
8
  documents?: Filter;
9
+ collection?: true;
8
10
  conversations?: readonly string[];
9
11
  limit?: number;
10
12
  };
@@ -29,18 +31,23 @@ export type SearchCoverage = {
29
31
  };
30
32
  export type PendingConversation = {
31
33
  conversation: string;
32
- awaits: 'index';
33
- };
34
- export type SearchPending = {
35
- pending: readonly (PendingRoom | PendingConversation)[];
34
+ awaits: Open<'index'>;
36
35
  };
37
36
  export type SearchHits = {
38
37
  documents: readonly DocumentHit[];
39
38
  messages: readonly MessageHit[];
40
39
  };
40
+ export type SearchPending = SearchHits & {
41
+ pending: readonly (PendingRoom | PendingConversation)[];
42
+ coverage: SearchCoverage;
43
+ };
44
+ export type SearchUndeclared = ProviderRefusal & {
45
+ kind: 'undeclared';
46
+ };
41
47
  export type SearchResult = (SearchHits & {
42
48
  coverage: SearchCoverage;
43
- }) | SearchPending;
49
+ }) | SearchPending | SearchUndeclared;
50
+ export declare function undeclaredSearch(): SearchUndeclared;
44
51
  export type SearchedDocument = {
45
52
  room: string;
46
53
  path: string;
@@ -61,6 +68,7 @@ export type SearchSource = {
61
68
  export type SearchPlan = {
62
69
  text: string;
63
70
  documents: unknown;
71
+ collection: boolean;
64
72
  conversations: readonly string[] | null;
65
73
  limit: number | null;
66
74
  };
@@ -77,7 +85,7 @@ export type SearchIndex = {
77
85
  search(plan: SearchPlan, documents: readonly {
78
86
  room: string;
79
87
  path: string;
80
- }[] | null, conversations: readonly string[]): SearchHits;
88
+ }[] | null, conversations: readonly string[], rooms: ReadonlySet<string> | null, selections: ReadonlyMap<string, readonly string[]> | null): SearchHits;
81
89
  };
82
90
  export declare function searchPlanOf(input: unknown): SearchPlan;
83
91
  export declare function createSearchIndex(source: SearchSource): SearchIndex;
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
package/dist/search.js CHANGED
@@ -1,7 +1,16 @@
1
1
  import MiniSearch from 'minisearch';
2
2
  import { indexGeneration } from './identity.js';
3
- import { invalid, known, limitOf, plain, } from './query.js';
3
+ import { flag, invalid, known, limitOf, plain, } from './query.js';
4
+ import { beneath } from './paths.js';
4
5
  import { inUnits, ROW_WEIGHT } from './turn.js';
6
+ export function undeclaredSearch() {
7
+ return {
8
+ kind: 'undeclared',
9
+ code: 'search-undeclared',
10
+ fields: { name: 'local_search' },
11
+ retryable: false,
12
+ };
13
+ }
5
14
  const FIELDS = ['fields', 'sections', 'preamble', 'path', 'text'];
6
15
  function documentId(room, path) {
7
16
  return JSON.stringify(['document', room, path]);
@@ -21,7 +30,7 @@ function scalars(value) {
21
30
  export function searchPlanOf(input) {
22
31
  if (!plain(input))
23
32
  invalid('search', 'expects a search object');
24
- known(input, ['text', 'documents', 'conversations', 'limit'], '');
33
+ known(input, ['text', 'documents', 'collection', 'conversations', 'limit'], '');
25
34
  if (typeof input.text !== 'string')
26
35
  invalid('text', 'expects text');
27
36
  const conversations = input.conversations;
@@ -32,10 +41,18 @@ export function searchPlanOf(input) {
32
41
  return {
33
42
  text: input.text,
34
43
  documents: input.documents,
44
+ collection: flag(input.collection, 'collection'),
35
45
  conversations: conversations ?? null,
36
46
  limit: limitOf(input.limit),
37
47
  };
38
48
  }
49
+ function byRoomThenPath(left, right) {
50
+ if (left.room !== right.room)
51
+ return left.room < right.room ? -1 : 1;
52
+ if (left.path !== right.path)
53
+ return left.path < right.path ? -1 : 1;
54
+ return 0;
55
+ }
39
56
  export function createSearchIndex(source) {
40
57
  const generation = indexGeneration();
41
58
  const index = new MiniSearch({ fields: FIELDS });
@@ -49,9 +66,7 @@ export function createSearchIndex(source) {
49
66
  let changes = 0;
50
67
  function addDocument(document) {
51
68
  const id = documentId(document.room, document.path);
52
- if (documents.has(id))
53
- index.discard(id);
54
- documents.set(id, { room: document.room, path: document.path, type: document.type });
69
+ discard(id, documents);
55
70
  index.add({
56
71
  id,
57
72
  fields: scalars(document.fields).join('\n'),
@@ -61,13 +76,13 @@ export function createSearchIndex(source) {
61
76
  preamble: document.preamble,
62
77
  path: document.path,
63
78
  });
79
+ documents.set(id, { room: document.room, path: document.path, type: document.type });
64
80
  }
65
81
  function addMessage(message) {
66
82
  const id = messageId(message.conversation, message.identity);
67
- if (messages.has(id))
68
- index.discard(id);
69
- messages.set(id, { conversation: message.conversation, identity: message.identity });
83
+ discard(id, messages);
70
84
  index.add({ id, text: message.text });
85
+ messages.set(id, { conversation: message.conversation, identity: message.identity });
71
86
  }
72
87
  function discard(id, entries) {
73
88
  if (entries.delete(id))
@@ -101,13 +116,17 @@ export function createSearchIndex(source) {
101
116
  });
102
117
  return catching;
103
118
  }
104
- function ranked(text, entries, keep, limit) {
119
+ function ranked(text, entries, keep, limit, tie) {
105
120
  const found = index.search(text, {
106
121
  filter: ({ id }) => {
107
122
  const entry = entries.get(id);
108
123
  return entry !== undefined && keep(entry, id);
109
124
  },
110
125
  });
126
+ if (tie !== null) {
127
+ found.sort((left, right) => right.score - left.score ||
128
+ tie(entries.get(left.id), entries.get(right.id)));
129
+ }
111
130
  return (limit === null ? found : found.slice(0, limit)).map(({ id, score, match }) => ({
112
131
  ...entries.get(id),
113
132
  score,
@@ -176,14 +195,16 @@ export function createSearchIndex(source) {
176
195
  },
177
196
  changes: () => changes,
178
197
  caughtUp,
179
- search({ text, limit }, selected, named) {
198
+ search({ text, limit }, selected, named, within, selections) {
180
199
  const chosen = selected === null
181
200
  ? null
182
201
  : new Set(selected.map(({ room, path }) => documentId(room, path)));
183
202
  const asked = new Set(named);
184
203
  return {
185
- documents: ranked(text, documents, (_entry, id) => chosen === null || chosen.has(id), limit).map(({ match, ...hit }) => ({ ...hit, matches: match })),
186
- messages: ranked(text, messages, ({ conversation }) => asked.has(conversation), limit).map(({ match, ...hit }) => ({ ...hit, matches: match })),
204
+ documents: ranked(text, documents, ({ room, path }, id) => (chosen === null || chosen.has(id)) &&
205
+ (within === null || within.has(room)) &&
206
+ !(selections?.get(room) ?? []).some((root) => beneath(root, path)), limit, byRoomThenPath).map(({ match, ...hit }) => ({ ...hit, matches: match })),
207
+ messages: ranked(text, messages, ({ conversation }) => asked.has(conversation), limit, null).map(({ match, ...hit }) => ({ ...hit, matches: match })),
187
208
  };
188
209
  },
189
210
  };
package/dist/seed.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ import type { KeyedResult } from './observation.js';
2
+ import type { QueryRows } from './query.js';
3
+ export type EntrySeed = {
4
+ readonly at: Readonly<Record<string, string>>;
5
+ readonly queries: readonly {
6
+ readonly query: unknown;
7
+ readonly rows: QueryRows;
8
+ }[];
9
+ };
10
+ export type Seeded = {
11
+ readonly rows: QueryRows;
12
+ readonly at: Readonly<Record<string, string>>;
13
+ };
14
+ export declare function entrySeedOf(value: unknown): EntrySeed | null;
15
+ export declare function seededResult(seed: Seeded): KeyedResult;
16
+ //# sourceMappingURL=seed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../src/seed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAA4C,SAAS,EAAE,MAAM,YAAY,CAAC;AAGtF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;KAAE,EAAE,CAAC;CACpF,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,CAAC;AA0BjG,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAe5D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAoBtD"}
package/dist/seed.js ADDED
@@ -0,0 +1,61 @@
1
+ import { documentKey } from './rows.js';
2
+ function plain(value) {
3
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
4
+ }
5
+ function rowsOf(value) {
6
+ if (!plain(value))
7
+ return null;
8
+ if (Array.isArray(value.groups)) {
9
+ const groups = value.groups;
10
+ return groups.every((group) => plain(group) && Array.isArray(group.key) && typeof group.count === 'number')
11
+ ? { groups: groups }
12
+ : null;
13
+ }
14
+ if (!Array.isArray(value.documents))
15
+ return null;
16
+ const documents = value.documents;
17
+ return documents.every((document) => plain(document) && typeof document.room === 'string' && typeof document.path === 'string')
18
+ ? { documents: documents }
19
+ : null;
20
+ }
21
+ export function entrySeedOf(value) {
22
+ if (!plain(value) || !plain(value.at) || !Array.isArray(value.queries))
23
+ return null;
24
+ const at = {};
25
+ for (const [room, version] of Object.entries(value.at)) {
26
+ if (typeof version !== 'string')
27
+ return null;
28
+ at[room] = version;
29
+ }
30
+ const queries = [];
31
+ for (const entry of value.queries) {
32
+ if (!plain(entry) || !plain(entry.query))
33
+ return null;
34
+ const rows = rowsOf(entry.rows);
35
+ if (rows === null)
36
+ return null;
37
+ queries.push({ query: entry.query, rows });
38
+ }
39
+ return { at, queries };
40
+ }
41
+ export function seededResult(seed) {
42
+ const coverage = {
43
+ rooms: Object.entries(seed.at).map(([room, generation]) => ({
44
+ room,
45
+ generation,
46
+ current: false,
47
+ })),
48
+ indexes: [],
49
+ overlay: [],
50
+ };
51
+ if ('groups' in seed.rows) {
52
+ return {
53
+ result: { groups: seed.rows.groups, coverage },
54
+ keys: seed.rows.groups.map((_group, index) => index),
55
+ };
56
+ }
57
+ return {
58
+ result: { documents: seed.rows.documents, coverage },
59
+ keys: seed.rows.documents.map((document) => documentKey(document.room, document.path)),
60
+ };
61
+ }
package/dist/store.d.ts CHANGED
@@ -7,7 +7,7 @@ import type { ChatDraftFile } from './file.js';
7
7
  import type { Submission } from './outcome.js';
8
8
  import type { RoomDraftRecord, SavedDraft } from './room-draft.js';
9
9
  export declare const STORE_SCHEMA = 25;
10
- export declare const AUTHORED_SCHEMA = 2;
10
+ export declare const AUTHORED_SCHEMA = 3;
11
11
  export type ReplicaRecord = {
12
12
  locator: string;
13
13
  name: string;
@@ -23,10 +23,11 @@ export type ReplicaRecord = {
23
23
  documents: Readonly<Record<string, string>>;
24
24
  binaries: Readonly<Record<string, HeldBinary>>;
25
25
  revisions: Readonly<Record<string, string>>;
26
+ fileIds: Readonly<Record<string, string>>;
26
27
  changes: Readonly<Record<string, HeadChange>>;
27
28
  written: Readonly<Record<string, string>>;
28
29
  };
29
- export type StagedLayer = Pick<ReplicaRecord, 'documents' | 'binaries' | 'revisions' | 'changes' | 'written'>;
30
+ export type StagedLayer = Pick<ReplicaRecord, 'documents' | 'binaries' | 'revisions' | 'fileIds' | 'changes' | 'written'>;
30
31
  export type TransferRecord = {
31
32
  locator: string;
32
33
  transfer: string;
@@ -46,6 +47,9 @@ export type PendingState = {
46
47
  readonly upload?: unknown;
47
48
  readonly accepted?: string;
48
49
  };
50
+ export type TargetRecord = {
51
+ established: boolean;
52
+ };
49
53
  export type QueueRecord = {
50
54
  locator: string;
51
55
  pending: readonly {
@@ -82,6 +86,12 @@ export type ChatDraftRecord = {
82
86
  files: readonly ChatDraftFile[];
83
87
  revision: string;
84
88
  submitted?: readonly ChatSubmission[];
89
+ moves?: readonly string[];
90
+ };
91
+ export type CallRecord = {
92
+ readonly operation: string;
93
+ readonly name: string;
94
+ readonly input: unknown;
85
95
  };
86
96
  export type RecordWrite = {
87
97
  next: ReplicaRecord;
@@ -107,6 +117,8 @@ export type RuntimeStore = {
107
117
  declare(limits: readonly ProviderLimit[], capabilities: readonly Capability[]): Promise<void>;
108
118
  member(): Promise<Member | null>;
109
119
  keepMember(member: Member | null): Promise<void>;
120
+ targets(): Promise<Readonly<Record<string, TargetRecord>>>;
121
+ keepTargets(targets: Readonly<Record<string, TargetRecord>>): Promise<void>;
110
122
  queues(): Promise<readonly QueueRecord[]>;
111
123
  submit(locator: string, id: string, submission: Submission, lost: boolean): Promise<void>;
112
124
  accept(locator: string, id: string, roomVersion: string): Promise<void>;
@@ -122,8 +134,11 @@ export type RuntimeStore = {
122
134
  turnArrived(conversation: string, turn: string): Promise<boolean>;
123
135
  dropConversations(conversations: readonly string[]): Promise<void>;
124
136
  chatDrafts(): Promise<readonly ChatDraftRecord[]>;
125
- keepChatDraft(record: ChatDraftRecord): Promise<void>;
137
+ keepChatDrafts(records: readonly ChatDraftRecord[]): Promise<void>;
126
138
  dropChatDraft(conversation: string): Promise<void>;
139
+ calls(): Promise<readonly CallRecord[]>;
140
+ keepCall(record: CallRecord): Promise<void>;
141
+ dropCall(operation: string): Promise<void>;
127
142
  keepRoomDraft(record: RoomDraftRecord): Promise<void>;
128
143
  discardRoomDraft(locator: string, path: string): Promise<void>;
129
144
  fences(): Promise<readonly string[]>;
@@ -149,5 +164,6 @@ export declare function authoredBy(holder: string): Promise<boolean>;
149
164
  export declare function authoredBinding(): Promise<string | null>;
150
165
  export declare function bindAuthored(binding: string): Promise<void>;
151
166
  export declare function removeRuntimeStore(holder?: string): Promise<boolean>;
167
+ export declare function openDatabase(name: string, version: number, upgrade: (opening: IDBOpenDBRequest, oldVersion: number) => void): Promise<IDBDatabase>;
152
168
  export declare function openRuntimeStore(fenced: (locator: string) => boolean): Promise<RuntimeStore>;
153
169
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/dist/store.js CHANGED
@@ -16,21 +16,24 @@ const PRESENTATION = 'presentation';
16
16
  const CONVERSATIONS = 'conversations';
17
17
  const MESSAGES = 'messages';
18
18
  const CHAT_DRAFTS = 'chatDrafts';
19
+ const CALLS = 'calls';
19
20
  const QUEUES = 'queues';
20
21
  const FACTS = 'facts';
21
22
  const CURRENT = 'current';
22
23
  const MEMBER = 'member';
24
+ const TARGETS = 'targets';
23
25
  const GENERATION = 'generation';
24
26
  const HOLDER = 'holder';
25
27
  const BINDING = 'binding';
26
28
  export const STORE_SCHEMA = 25;
27
29
  const REPLICA_SHAPE = 23;
28
- export const AUTHORED_SCHEMA = 2;
30
+ export const AUTHORED_SCHEMA = 3;
29
31
  const AUTHORED_STORES = [
30
32
  [QUEUES, { keyPath: 'locator' }],
31
33
  [PENDING_CHANGES, { keyPath: ['locator', 'id'] }],
32
34
  [ROOM_DRAFTS, { keyPath: ['locator', 'path'] }],
33
35
  [CHAT_DRAFTS, { keyPath: 'conversation' }],
36
+ [CALLS, { keyPath: 'operation' }],
34
37
  [FACTS, undefined],
35
38
  [FENCES, { keyPath: 'locator' }],
36
39
  ];
@@ -98,7 +101,7 @@ function accepted({ conversation: _held, ...message }) {
98
101
  return message;
99
102
  }
100
103
  function roomRecord(record) {
101
- const { documents, binaries, revisions, changes, written, ...room } = record;
104
+ const { documents, binaries, revisions, fileIds, changes, written, ...room } = record;
102
105
  return room;
103
106
  }
104
107
  function chatDraftRecord(record) {
@@ -124,13 +127,15 @@ async function readTransfer(store, locator, transfer, receive) {
124
127
  }
125
128
  }
126
129
  function emptyLayer() {
127
- return { documents: {}, binaries: {}, revisions: {}, changes: {}, written: {} };
130
+ return { documents: {}, binaries: {}, revisions: {}, fileIds: {}, changes: {}, written: {} };
128
131
  }
129
132
  async function readLayer(transaction, locator, transfer) {
130
133
  const layer = emptyLayer();
131
134
  const head = (held) => {
132
135
  if (held.revision !== null)
133
136
  layer.revisions[held.path] = held.revision;
137
+ if (held.fileId !== null)
138
+ layer.fileIds[held.path] = held.fileId;
134
139
  if (held.change !== null)
135
140
  layer.changes[held.path] = held.change;
136
141
  };
@@ -153,6 +158,7 @@ function documentRecord(locator, transfer, layer, path) {
153
158
  path,
154
159
  content: layer.documents[path],
155
160
  revision: layer.revisions[path] ?? null,
161
+ fileId: layer.fileIds[path] ?? null,
156
162
  change: layer.changes[path] ?? null,
157
163
  written: layer.written[path] ?? null,
158
164
  };
@@ -163,6 +169,7 @@ function binaryFileRecord(locator, transfer, layer, path) {
163
169
  transfer,
164
170
  path,
165
171
  revision: layer.revisions[path] ?? null,
172
+ fileId: layer.fileIds[path] ?? null,
166
173
  change: layer.changes[path] ?? null,
167
174
  binary: layer.binaries[path],
168
175
  };
@@ -175,6 +182,7 @@ function writeLayer(transaction, locator, transfer, next, base) {
175
182
  : new Set([
176
183
  ...differing(base.documents, next.documents),
177
184
  ...differing(base.revisions, next.revisions),
185
+ ...differing(base.fileIds, next.fileIds),
178
186
  ...differing(base.written, next.written),
179
187
  ...differing(base.changes, next.changes, sameChange),
180
188
  ...differing(base.binaries, next.binaries, sameBinary),
@@ -272,11 +280,26 @@ export async function removeRuntimeStore(holder) {
272
280
  await removeDatabase(AUTHORED);
273
281
  return false;
274
282
  }
283
+ export function openDatabase(name, version, upgrade) {
284
+ return new Promise((resolve, reject) => {
285
+ const opening = indexedDB.open(name, version);
286
+ opening.onupgradeneeded = (event) => upgrade(opening, event.oldVersion);
287
+ opening.onsuccess = () => resolve(opening.result);
288
+ opening.onerror = () => {
289
+ if (opening.error?.name !== 'VersionError') {
290
+ reject(opening.error);
291
+ return;
292
+ }
293
+ removeDatabase(name)
294
+ .then(() => openDatabase(name, version, upgrade))
295
+ .then(resolve, reject);
296
+ };
297
+ });
298
+ }
275
299
  function openReplica() {
276
- const opening = indexedDB.open(DATABASE, STORE_SCHEMA);
277
- opening.onupgradeneeded = (event) => {
300
+ return openDatabase(DATABASE, STORE_SCHEMA, (opening, oldVersion) => {
278
301
  const database = opening.result;
279
- if (event.oldVersion < REPLICA_SHAPE) {
302
+ if (oldVersion < REPLICA_SHAPE) {
280
303
  for (const name of [...database.objectStoreNames])
281
304
  database.deleteObjectStore(name);
282
305
  }
@@ -290,19 +313,16 @@ function openReplica() {
290
313
  if (!messages.indexNames.contains(name))
291
314
  messages.createIndex(name, keyPath);
292
315
  }
293
- };
294
- return settled(opening);
316
+ });
295
317
  }
296
318
  function openAuthored() {
297
- const opening = indexedDB.open(AUTHORED, AUTHORED_SCHEMA);
298
- opening.onupgradeneeded = () => {
319
+ return openDatabase(AUTHORED, AUTHORED_SCHEMA, (opening) => {
299
320
  const database = opening.result;
300
321
  for (const [name, parameters] of AUTHORED_STORES) {
301
322
  if (!database.objectStoreNames.contains(name))
302
323
  database.createObjectStore(name, parameters);
303
324
  }
304
- };
305
- return settled(opening);
325
+ });
306
326
  }
307
327
  export async function openRuntimeStore(fenced) {
308
328
  const authored = await openAuthored();
@@ -414,6 +434,16 @@ export async function openRuntimeStore(fenced) {
414
434
  transaction.objectStore(DECLARATIONS).put(member, MEMBER);
415
435
  await completed(transaction);
416
436
  },
437
+ async targets() {
438
+ const transaction = database.transaction(DECLARATIONS, 'readonly');
439
+ const held = await settled(transaction.objectStore(DECLARATIONS).get(TARGETS));
440
+ return held ?? {};
441
+ },
442
+ async keepTargets(targets) {
443
+ const transaction = database.transaction(DECLARATIONS, 'readwrite');
444
+ transaction.objectStore(DECLARATIONS).put(targets, TARGETS);
445
+ await completed(transaction);
446
+ },
417
447
  async queues() {
418
448
  const transaction = authored.transaction([QUEUES, PENDING_CHANGES], 'readonly');
419
449
  const [queues, pending] = await Promise.all([
@@ -569,9 +599,10 @@ export async function openRuntimeStore(fenced) {
569
599
  const held = await settled(transaction.objectStore(CHAT_DRAFTS).getAll());
570
600
  return held.map(chatDraftRecord);
571
601
  },
572
- async keepChatDraft(record) {
602
+ async keepChatDrafts(records) {
573
603
  const transaction = authored.transaction(CHAT_DRAFTS, 'readwrite');
574
- transaction.objectStore(CHAT_DRAFTS).put(record);
604
+ for (const record of records)
605
+ transaction.objectStore(CHAT_DRAFTS).put(record);
575
606
  await completed(transaction);
576
607
  },
577
608
  async dropChatDraft(conversation) {
@@ -579,6 +610,20 @@ export async function openRuntimeStore(fenced) {
579
610
  transaction.objectStore(CHAT_DRAFTS).delete(conversation);
580
611
  await completed(transaction);
581
612
  },
613
+ async calls() {
614
+ const transaction = authored.transaction(CALLS, 'readonly');
615
+ return settled(transaction.objectStore(CALLS).getAll());
616
+ },
617
+ async keepCall(record) {
618
+ const transaction = authored.transaction(CALLS, 'readwrite');
619
+ transaction.objectStore(CALLS).put(record);
620
+ await completed(transaction);
621
+ },
622
+ async dropCall(operation) {
623
+ const transaction = authored.transaction(CALLS, 'readwrite');
624
+ transaction.objectStore(CALLS).delete(operation);
625
+ await completed(transaction);
626
+ },
582
627
  async keepRoomDraft(record) {
583
628
  if (fenced(record.locator))
584
629
  return;