@agentshouse/mdruntime 0.1.0-c5d3fa6fb67bc → 0.1.0-c5f333dfa0583

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 (198) hide show
  1. package/AGENTS.md +225 -212
  2. package/README.md +9 -8
  3. package/dist/adapter.d.ts +64 -24
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/attached-model.d.ts +4 -1
  6. package/dist/attached-model.d.ts.map +1 -1
  7. package/dist/attached-model.js +13 -3
  8. package/dist/bootstrap.d.ts +15 -7
  9. package/dist/bootstrap.d.ts.map +1 -1
  10. package/dist/bootstrap.js +90 -61
  11. package/dist/chain.d.ts +11 -0
  12. package/dist/chain.d.ts.map +1 -0
  13. package/dist/chain.js +64 -0
  14. package/dist/change-set.d.ts +8 -9
  15. package/dist/change-set.d.ts.map +1 -1
  16. package/dist/change-set.js +10 -85
  17. package/dist/change.d.ts +31 -1
  18. package/dist/change.d.ts.map +1 -1
  19. package/dist/change.js +10 -1
  20. package/dist/chat/earlier.d.ts +10 -0
  21. package/dist/chat/earlier.d.ts.map +1 -0
  22. package/dist/chat/earlier.js +54 -0
  23. package/dist/chat/house.d.ts +25 -0
  24. package/dist/chat/house.d.ts.map +1 -0
  25. package/dist/chat/house.js +38 -0
  26. package/dist/chat/input.d.ts +3 -1
  27. package/dist/chat/input.d.ts.map +1 -1
  28. package/dist/chat/input.js +11 -18
  29. package/dist/chat/kit.js +1 -1
  30. package/dist/chat/list.d.ts +2 -1
  31. package/dist/chat/list.d.ts.map +1 -1
  32. package/dist/chat/list.js +45 -5
  33. package/dist/chat/markdown.d.ts +1 -0
  34. package/dist/chat/markdown.d.ts.map +1 -1
  35. package/dist/chat/markdown.js +78 -20
  36. package/dist/chat/message.d.ts +1 -0
  37. package/dist/chat/message.d.ts.map +1 -1
  38. package/dist/chat/message.js +73 -11
  39. package/dist/chat/messages.d.ts +14 -1
  40. package/dist/chat/messages.d.ts.map +1 -1
  41. package/dist/chat/messages.js +79 -24
  42. package/dist/chat/name.d.ts +1 -0
  43. package/dist/chat/name.d.ts.map +1 -1
  44. package/dist/chat/name.js +1 -1
  45. package/dist/chat/opened.d.ts +1 -0
  46. package/dist/chat/opened.d.ts.map +1 -1
  47. package/dist/chat/opened.js +2 -0
  48. package/dist/chat/overlay.d.ts +1 -0
  49. package/dist/chat/overlay.d.ts.map +1 -1
  50. package/dist/chat/overlay.js +11 -5
  51. package/dist/chat/parts.d.ts +1 -0
  52. package/dist/chat/parts.d.ts.map +1 -1
  53. package/dist/chat/parts.js +3 -2
  54. package/dist/chat/pieces.d.ts +62 -0
  55. package/dist/chat/pieces.d.ts.map +1 -0
  56. package/dist/chat/pieces.js +1110 -0
  57. package/dist/chat/provider.d.ts +8 -1
  58. package/dist/chat/provider.d.ts.map +1 -1
  59. package/dist/chat/provider.js +98 -92
  60. package/dist/chat/question.d.ts +1 -1
  61. package/dist/chat/question.d.ts.map +1 -1
  62. package/dist/chat/question.js +7 -18
  63. package/dist/chat/ready.d.ts +5 -2
  64. package/dist/chat/ready.d.ts.map +1 -1
  65. package/dist/chat/ready.js +7 -5
  66. package/dist/chat/room-file.d.ts +8 -0
  67. package/dist/chat/room-file.d.ts.map +1 -0
  68. package/dist/chat/room-file.js +72 -0
  69. package/dist/chat/steady.d.ts +3 -0
  70. package/dist/chat/steady.d.ts.map +1 -0
  71. package/dist/chat/steady.js +26 -0
  72. package/dist/chat/style.d.ts.map +1 -1
  73. package/dist/chat/style.js +6 -1
  74. package/dist/chat.d.ts +3 -2
  75. package/dist/chat.d.ts.map +1 -1
  76. package/dist/chat.js +2 -2
  77. package/dist/client.d.ts +11 -2
  78. package/dist/client.d.ts.map +1 -1
  79. package/dist/client.js +45 -7
  80. package/dist/collection.d.ts +6 -19
  81. package/dist/collection.d.ts.map +1 -1
  82. package/dist/collection.js +30 -287
  83. package/dist/compile.d.ts +11 -0
  84. package/dist/compile.d.ts.map +1 -0
  85. package/dist/compile.js +712 -0
  86. package/dist/connection.d.ts +21 -8
  87. package/dist/connection.d.ts.map +1 -1
  88. package/dist/connection.js +2319 -688
  89. package/dist/conversation.d.ts +15 -3
  90. package/dist/conversation.d.ts.map +1 -1
  91. package/dist/conversation.js +233 -80
  92. package/dist/digest.d.ts +7 -0
  93. package/dist/digest.d.ts.map +1 -0
  94. package/dist/digest.js +113 -0
  95. package/dist/durability.d.ts +2 -1
  96. package/dist/durability.d.ts.map +1 -1
  97. package/dist/entry.d.ts +3 -1
  98. package/dist/entry.d.ts.map +1 -1
  99. package/dist/entry.js +18 -23
  100. package/dist/file.d.ts +2 -10
  101. package/dist/file.d.ts.map +1 -1
  102. package/dist/file.js +3 -120
  103. package/dist/host.d.ts +5 -4
  104. package/dist/host.d.ts.map +1 -1
  105. package/dist/host.js +55 -7
  106. package/dist/index.d.ts +10 -6
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +4 -0
  109. package/dist/live.d.ts +22 -0
  110. package/dist/live.d.ts.map +1 -0
  111. package/dist/live.js +123 -0
  112. package/dist/memory.d.ts +7 -3
  113. package/dist/memory.d.ts.map +1 -1
  114. package/dist/memory.js +39 -17
  115. package/dist/name.d.ts +4 -0
  116. package/dist/name.d.ts.map +1 -0
  117. package/dist/name.js +122 -0
  118. package/dist/observation.d.ts +14 -0
  119. package/dist/observation.d.ts.map +1 -1
  120. package/dist/observation.js +93 -3
  121. package/dist/opened.d.ts +22 -0
  122. package/dist/opened.d.ts.map +1 -0
  123. package/dist/opened.js +107 -0
  124. package/dist/outcome.d.ts +35 -4
  125. package/dist/outcome.d.ts.map +1 -1
  126. package/dist/outcome.js +28 -0
  127. package/dist/overlay.d.ts +2 -5
  128. package/dist/overlay.d.ts.map +1 -1
  129. package/dist/overlay.js +86 -171
  130. package/dist/query.d.ts +26 -2
  131. package/dist/query.d.ts.map +1 -1
  132. package/dist/query.js +34 -6
  133. package/dist/reach.d.ts +5 -1
  134. package/dist/reach.d.ts.map +1 -1
  135. package/dist/reach.js +167 -48
  136. package/dist/react.d.ts +3 -3
  137. package/dist/react.d.ts.map +1 -1
  138. package/dist/react.js +7 -17
  139. package/dist/readiness.d.ts +1 -1
  140. package/dist/readiness.d.ts.map +1 -1
  141. package/dist/reads.d.ts +11 -0
  142. package/dist/reads.d.ts.map +1 -0
  143. package/dist/reads.js +98 -0
  144. package/dist/recovery.d.ts +2 -2
  145. package/dist/recovery.d.ts.map +1 -1
  146. package/dist/recovery.js +8 -7
  147. package/dist/refresh.d.ts +12 -15
  148. package/dist/refresh.d.ts.map +1 -1
  149. package/dist/refresh.js +74 -51
  150. package/dist/replica.d.ts +55 -33
  151. package/dist/replica.d.ts.map +1 -1
  152. package/dist/replica.js +295 -186
  153. package/dist/room-draft.d.ts +15 -1
  154. package/dist/room-draft.d.ts.map +1 -1
  155. package/dist/room-draft.js +32 -25
  156. package/dist/rows.d.ts +29 -30
  157. package/dist/rows.d.ts.map +1 -1
  158. package/dist/rows.js +113 -64
  159. package/dist/save.d.ts +51 -14
  160. package/dist/save.d.ts.map +1 -1
  161. package/dist/save.js +518 -180
  162. package/dist/search.d.ts +19 -4
  163. package/dist/search.d.ts.map +1 -1
  164. package/dist/search.js +192 -35
  165. package/dist/seed.d.ts +16 -0
  166. package/dist/seed.d.ts.map +1 -0
  167. package/dist/seed.js +75 -0
  168. package/dist/shared.d.ts +8 -3
  169. package/dist/shared.d.ts.map +1 -1
  170. package/dist/shared.js +129 -66
  171. package/dist/store.d.ts +99 -71
  172. package/dist/store.d.ts.map +1 -1
  173. package/dist/store.js +461 -586
  174. package/dist/stored.d.ts +143 -0
  175. package/dist/stored.d.ts.map +1 -0
  176. package/dist/stored.js +561 -0
  177. package/dist/tables.d.ts +320 -0
  178. package/dist/tables.d.ts.map +1 -0
  179. package/dist/tables.js +537 -0
  180. package/dist/turn.d.ts +5 -3
  181. package/dist/turn.d.ts.map +1 -1
  182. package/dist/turn.js +51 -21
  183. package/dist/validation.d.ts +30 -0
  184. package/dist/validation.d.ts.map +1 -0
  185. package/dist/validation.js +162 -0
  186. package/dist/windows.d.ts +22 -0
  187. package/dist/windows.d.ts.map +1 -0
  188. package/dist/windows.js +89 -0
  189. package/dist/wire.d.ts +32 -0
  190. package/dist/wire.d.ts.map +1 -1
  191. package/dist/wire.js +8 -0
  192. package/package.json +10 -3
  193. package/dist/acquisition.d.ts +0 -14
  194. package/dist/acquisition.d.ts.map +0 -1
  195. package/dist/acquisition.js +0 -24
  196. package/dist/read-side.d.ts +0 -25
  197. package/dist/read-side.d.ts.map +0 -1
  198. package/dist/read-side.js +0 -642
package/dist/search.d.ts CHANGED
@@ -6,8 +6,11 @@ export type DocumentPart = Open<'fields' | 'sections' | 'preamble' | 'path'>;
6
6
  export type SearchRequest = {
7
7
  text: string;
8
8
  documents?: Filter;
9
+ collection?: true;
9
10
  conversations?: readonly string[];
10
11
  limit?: number;
12
+ after?: string;
13
+ total?: true;
11
14
  };
12
15
  export type DocumentHit = {
13
16
  room: string;
@@ -36,6 +39,13 @@ export type SearchHits = {
36
39
  documents: readonly DocumentHit[];
37
40
  messages: readonly MessageHit[];
38
41
  };
42
+ export type SearchWindow = SearchHits & {
43
+ next?: string;
44
+ total?: {
45
+ documents: number;
46
+ messages: number;
47
+ };
48
+ };
39
49
  export type SearchPending = SearchHits & {
40
50
  pending: readonly (PendingRoom | PendingConversation)[];
41
51
  coverage: SearchCoverage;
@@ -43,7 +53,7 @@ export type SearchPending = SearchHits & {
43
53
  export type SearchUndeclared = ProviderRefusal & {
44
54
  kind: 'undeclared';
45
55
  };
46
- export type SearchResult = (SearchHits & {
56
+ export type SearchResult = (SearchWindow & {
47
57
  coverage: SearchCoverage;
48
58
  }) | SearchPending | SearchUndeclared;
49
59
  export declare function undeclaredSearch(): SearchUndeclared;
@@ -61,14 +71,18 @@ export type SearchedMessage = {
61
71
  text: string;
62
72
  };
63
73
  export type SearchSource = {
64
- room(room: string): readonly string[];
65
- document(room: string, path: string): SearchedDocument | null;
74
+ room(room: string): AsyncIterable<readonly SearchedDocument[]>;
75
+ documents(room: string, paths: readonly string[]): Promise<readonly SearchedDocument[]>;
66
76
  };
77
+ type HitCursor = readonly [number, string, string] | readonly [] | null;
67
78
  export type SearchPlan = {
68
79
  text: string;
69
80
  documents: unknown;
81
+ collection: boolean;
70
82
  conversations: readonly string[] | null;
71
83
  limit: number | null;
84
+ after: readonly [HitCursor, HitCursor] | null;
85
+ total: boolean;
72
86
  };
73
87
  export type SearchIndex = {
74
88
  generation(): string;
@@ -83,8 +97,9 @@ export type SearchIndex = {
83
97
  search(plan: SearchPlan, documents: readonly {
84
98
  room: string;
85
99
  path: string;
86
- }[] | null, conversations: readonly string[], rooms: ReadonlySet<string> | null): SearchHits;
100
+ }[] | null, conversations: readonly string[], rooms: ReadonlySet<string> | null, selections: ReadonlyMap<string, readonly string[]> | null): SearchWindow;
87
101
  };
88
102
  export declare function searchPlanOf(input: unknown): SearchPlan;
89
103
  export declare function createSearchIndex(source: SearchSource): SearchIndex;
104
+ export {};
90
105
  //# sourceMappingURL=search.d.ts.map
@@ -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,9 @@
1
1
  import MiniSearch from 'minisearch';
2
2
  import { indexGeneration } from './identity.js';
3
- import { invalid, known, limitOf, plain, } from './query.js';
4
- import { inUnits, ROW_WEIGHT } from './turn.js';
3
+ import { flag, invalid, known, limitOf, plain, } from './query.js';
4
+ import { beneath } from './paths.js';
5
+ import { inUnits, ROW_WEIGHT, yielded } from './turn.js';
6
+ import { decodedCursor } from './windows.js';
5
7
  export function undeclaredSearch() {
6
8
  return {
7
9
  kind: 'undeclared',
@@ -11,6 +13,8 @@ export function undeclaredSearch() {
11
13
  };
12
14
  }
13
15
  const FIELDS = ['fields', 'sections', 'preamble', 'path', 'text'];
16
+ const VACUUM_CONDITIONS = { minDirtCount: 20, minDirtFactor: 0.1 };
17
+ const CHANGED_BATCH = 256;
14
18
  function documentId(room, path) {
15
19
  return JSON.stringify(['document', room, path]);
16
20
  }
@@ -26,10 +30,36 @@ function scalars(value) {
26
30
  return Object.values(value).flatMap(scalars);
27
31
  return [String(value)];
28
32
  }
33
+ function hitCursor(input) {
34
+ if (input === null)
35
+ return null;
36
+ if (!Array.isArray(input))
37
+ return undefined;
38
+ if (input.length === 0)
39
+ return [];
40
+ const [score, first, second] = input;
41
+ return input.length === 3 &&
42
+ typeof score === 'number' &&
43
+ typeof first === 'string' &&
44
+ typeof second === 'string'
45
+ ? [score, first, second]
46
+ : undefined;
47
+ }
48
+ function searchAfter(input) {
49
+ if (input === undefined)
50
+ return null;
51
+ const decoded = typeof input === 'string' ? decodedCursor(input) : null;
52
+ const documents = decoded?.length === 2 ? hitCursor(decoded[0]) : undefined;
53
+ const messages = decoded?.length === 2 ? hitCursor(decoded[1]) : undefined;
54
+ if (documents === undefined || messages === undefined) {
55
+ invalid('after', 'expects the next an earlier search returned');
56
+ }
57
+ return [documents, messages];
58
+ }
29
59
  export function searchPlanOf(input) {
30
60
  if (!plain(input))
31
61
  invalid('search', 'expects a search object');
32
- known(input, ['text', 'documents', 'conversations', 'limit'], '');
62
+ known(input, ['text', 'documents', 'collection', 'conversations', 'limit', 'after', 'total'], '');
33
63
  if (typeof input.text !== 'string')
34
64
  invalid('text', 'expects text');
35
65
  const conversations = input.conversations;
@@ -40,13 +70,37 @@ export function searchPlanOf(input) {
40
70
  return {
41
71
  text: input.text,
42
72
  documents: input.documents,
73
+ collection: flag(input.collection, 'collection'),
43
74
  conversations: conversations ?? null,
44
75
  limit: limitOf(input.limit),
76
+ after: searchAfter(input.after),
77
+ total: flag(input.total, 'total'),
45
78
  };
46
79
  }
80
+ function pair(left, right) {
81
+ if (left[0] !== right[0])
82
+ return left[0] < right[0] ? -1 : 1;
83
+ if (left[1] !== right[1])
84
+ return left[1] < right[1] ? -1 : 1;
85
+ return 0;
86
+ }
87
+ function hitWindow(found, cursor, limit, tie) {
88
+ if (cursor === null)
89
+ return { kept: [], cursor: null };
90
+ const start = cursor.length === 0
91
+ ? 0
92
+ : found.findIndex((hit) => hit.score < cursor[0] ||
93
+ (hit.score === cursor[0] && pair(tie(hit), [cursor[1], cursor[2]]) > 0));
94
+ const following = start === -1 ? [] : found.slice(start);
95
+ if (limit === null || following.length <= limit)
96
+ return { kept: following, cursor: null };
97
+ const kept = following.slice(0, limit);
98
+ const last = kept[kept.length - 1];
99
+ return { kept, cursor: last === undefined ? cursor : [last.score, ...tie(last)] };
100
+ }
47
101
  export function createSearchIndex(source) {
48
102
  const generation = indexGeneration();
49
- const index = new MiniSearch({ fields: FIELDS });
103
+ const index = new MiniSearch({ fields: FIELDS, autoVacuum: false });
50
104
  const documents = new Map();
51
105
  const messages = new Map();
52
106
  const rooms = new Set();
@@ -54,11 +108,20 @@ export function createSearchIndex(source) {
54
108
  const conversations = new Set();
55
109
  const acquiring = new Set();
56
110
  const changedDocuments = new Map();
111
+ const refilling = new Set();
112
+ const arrived = new Map();
113
+ let vacuuming = null;
57
114
  let changes = 0;
115
+ function added(entry) {
116
+ if (vacuuming === null)
117
+ index.add(entry);
118
+ else
119
+ arrived.set(entry.id, entry);
120
+ }
58
121
  function addDocument(document) {
59
122
  const id = documentId(document.room, document.path);
60
123
  discard(id, documents);
61
- index.add({
124
+ added({
62
125
  id,
63
126
  fields: scalars(document.fields).join('\n'),
64
127
  sections: Object.entries(document.sections)
@@ -72,49 +135,114 @@ export function createSearchIndex(source) {
72
135
  function addMessage(message) {
73
136
  const id = messageId(message.conversation, message.identity);
74
137
  discard(id, messages);
75
- index.add({ id, text: message.text });
138
+ added({ id, text: message.text });
76
139
  messages.set(id, { conversation: message.conversation, identity: message.identity });
77
140
  }
78
141
  function discard(id, entries) {
79
- if (entries.delete(id))
80
- index.discard(id);
142
+ if (!entries.delete(id) || arrived.delete(id))
143
+ return;
144
+ index.discard(id);
145
+ vacuum();
81
146
  }
82
- function* pending() {
147
+ function vacuum() {
148
+ if (vacuuming !== null ||
149
+ index.dirtCount < VACUUM_CONDITIONS.minDirtCount ||
150
+ index.dirtFactor < VACUUM_CONDITIONS.minDirtFactor) {
151
+ return;
152
+ }
153
+ changes += 1;
154
+ vacuuming = index
155
+ .vacuum()
156
+ .then(() => inUnits(arrivals(), (id) => {
157
+ const entry = arrived.get(id);
158
+ if (entry === undefined)
159
+ return ROW_WEIGHT;
160
+ arrived.delete(id);
161
+ index.add(entry);
162
+ return Object.values(entry).reduce((total, value) => total + value.length, ROW_WEIGHT);
163
+ }))
164
+ .finally(() => {
165
+ vacuuming = null;
166
+ vacuum();
167
+ });
168
+ }
169
+ function* arrivals() {
83
170
  for (;;) {
84
- const next = changedDocuments.entries().next();
171
+ const next = arrived.keys().next();
85
172
  if (next.done === true)
86
173
  return;
87
- changedDocuments.delete(next.value[0]);
88
174
  yield next.value;
89
175
  }
90
176
  }
177
+ async function vacuumed() {
178
+ while (vacuuming !== null)
179
+ await vacuuming;
180
+ }
181
+ async function paused() {
182
+ await yielded();
183
+ await vacuumed();
184
+ }
91
185
  let catching = null;
186
+ async function refill(room) {
187
+ for (const [id, entry] of documents)
188
+ if (entry.room === room)
189
+ discard(id, documents);
190
+ for await (const batch of source.room(room)) {
191
+ if (!rooms.has(room) && !filling.has(room))
192
+ return;
193
+ for (const document of batch)
194
+ addDocument(document);
195
+ await paused();
196
+ }
197
+ }
198
+ async function catchUp() {
199
+ for (const room of refilling) {
200
+ refilling.delete(room);
201
+ await refill(room);
202
+ }
203
+ while (changedDocuments.size > 0) {
204
+ await paused();
205
+ const batch = new Map();
206
+ for (const [id, { room, path }] of changedDocuments) {
207
+ changedDocuments.delete(id);
208
+ const held = batch.get(room) ?? new Map();
209
+ held.set(path, id);
210
+ batch.set(room, held);
211
+ if (held.size >= CHANGED_BATCH)
212
+ break;
213
+ }
214
+ for (const [room, held] of batch) {
215
+ for (const id of held.values())
216
+ discard(id, documents);
217
+ for (const document of await source.documents(room, [...held.keys()])) {
218
+ if (rooms.has(room) || filling.has(room))
219
+ addDocument(document);
220
+ }
221
+ }
222
+ }
223
+ await vacuumed();
224
+ }
92
225
  function caughtUp() {
93
226
  if (catching !== null)
94
227
  return catching;
95
- const running = inUnits(pending(), ([id, { room, path }]) => {
96
- discard(id, documents);
97
- const document = source.document(room, path);
98
- if (document === null)
99
- return ROW_WEIGHT;
100
- addDocument(document);
101
- return Object.values(document.sections).reduce((total, text) => total + text.length, ROW_WEIGHT + document.preamble.length);
102
- });
103
- if (!(running instanceof Promise))
228
+ if (changedDocuments.size === 0 && refilling.size === 0 && vacuuming === null) {
104
229
  return Promise.resolve();
105
- catching = running.finally(() => {
230
+ }
231
+ catching = catchUp().finally(() => {
106
232
  catching = null;
107
233
  });
108
234
  return catching;
109
235
  }
110
- function ranked(text, entries, keep, limit) {
236
+ function ranked(text, entries, keep, tie) {
111
237
  const found = index.search(text, {
112
238
  filter: ({ id }) => {
113
239
  const entry = entries.get(id);
114
240
  return entry !== undefined && keep(entry, id);
115
241
  },
116
242
  });
117
- return (limit === null ? found : found.slice(0, limit)).map(({ id, score, match }) => ({
243
+ found.sort((left, right) => right.score - left.score ||
244
+ pair(tie(entries.get(left.id)), tie(entries.get(right.id))));
245
+ return found.map(({ id, score, match }) => ({
118
246
  ...entries.get(id),
119
247
  score,
120
248
  match,
@@ -129,13 +257,13 @@ export function createSearchIndex(source) {
129
257
  return;
130
258
  filling.add(room);
131
259
  try {
132
- await inUnits(source.room(room), (path) => {
133
- const document = filling.has(room) ? source.document(room, path) : null;
134
- if (document === null)
135
- return ROW_WEIGHT;
136
- addDocument(document);
137
- return Object.values(document.sections).reduce((total, text) => total + text.length, ROW_WEIGHT + document.preamble.length);
138
- });
260
+ for await (const batch of source.room(room)) {
261
+ if (!filling.has(room))
262
+ return;
263
+ for (const document of batch)
264
+ addDocument(document);
265
+ await paused();
266
+ }
139
267
  if (filling.has(room))
140
268
  rooms.add(room);
141
269
  }
@@ -161,14 +289,23 @@ export function createSearchIndex(source) {
161
289
  for (const room of leaving) {
162
290
  rooms.delete(room);
163
291
  filling.delete(room);
292
+ refilling.delete(room);
164
293
  }
165
294
  },
166
295
  changed(set) {
167
296
  changes += 1;
168
297
  for (const { locator, path } of set.documents) {
169
- if (rooms.has(locator) || filling.has(locator)) {
170
- changedDocuments.set(documentId(locator, path), { room: locator, path });
298
+ if (!rooms.has(locator) && !filling.has(locator))
299
+ continue;
300
+ if (path === null) {
301
+ for (const [id, entry] of changedDocuments) {
302
+ if (entry.room === locator)
303
+ changedDocuments.delete(id);
304
+ }
305
+ refilling.add(locator);
306
+ continue;
171
307
  }
308
+ changedDocuments.set(documentId(locator, path), { room: locator, path });
172
309
  }
173
310
  for (const { conversation, identity, text } of set.messages) {
174
311
  if (!conversations.has(conversation) && !acquiring.has(conversation))
@@ -182,14 +319,34 @@ export function createSearchIndex(source) {
182
319
  },
183
320
  changes: () => changes,
184
321
  caughtUp,
185
- search({ text, limit }, selected, named, within) {
322
+ search({ text, limit, after, total }, selected, named, within, selections) {
186
323
  const chosen = selected === null
187
324
  ? null
188
325
  : new Set(selected.map(({ room, path }) => documentId(room, path)));
189
326
  const asked = new Set(named);
327
+ const documentTie = ({ room, path }) => [room, path];
328
+ const messageTie = ({ conversation, identity }) => [conversation, identity];
329
+ const foundDocuments = ranked(text, documents, ({ room, path }, id) => (chosen === null || chosen.has(id)) &&
330
+ (within === null || within.has(room)) &&
331
+ !(selections?.get(room) ?? []).some((root) => beneath(root, path)), documentTie);
332
+ const foundMessages = ranked(text, messages, ({ conversation }) => asked.has(conversation), messageTie);
333
+ const [documentsAfter, messagesAfter] = after ?? [[], []];
334
+ const documentWindow = hitWindow(foundDocuments, documentsAfter, limit, documentTie);
335
+ const messageWindow = hitWindow(foundMessages, messagesAfter, limit, messageTie);
336
+ const more = documentWindow.cursor !== null || messageWindow.cursor !== null;
190
337
  return {
191
- documents: ranked(text, documents, ({ room }, id) => (chosen === null || chosen.has(id)) && (within === null || within.has(room)), limit).map(({ match, ...hit }) => ({ ...hit, matches: match })),
192
- messages: ranked(text, messages, ({ conversation }) => asked.has(conversation), limit).map(({ match, ...hit }) => ({ ...hit, matches: match })),
338
+ documents: documentWindow.kept.map(({ match, ...hit }) => ({
339
+ ...hit,
340
+ matches: match,
341
+ })),
342
+ messages: messageWindow.kept.map(({ match, ...hit }) => ({
343
+ ...hit,
344
+ matches: match,
345
+ })),
346
+ ...(more ? { next: JSON.stringify([documentWindow.cursor, messageWindow.cursor]) } : {}),
347
+ ...(total
348
+ ? { total: { documents: foundDocuments.length, messages: foundMessages.length } }
349
+ : {}),
193
350
  };
194
351
  },
195
352
  };
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;AAwCjG,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,75 @@
1
+ import { documentKey } from './rows.js';
2
+ function plain(value) {
3
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
4
+ }
5
+ function windowOf(value) {
6
+ const { next, total } = value;
7
+ if (next !== undefined && typeof next !== 'string')
8
+ return null;
9
+ if (total !== undefined && !Number.isSafeInteger(total))
10
+ return null;
11
+ return {
12
+ ...(next === undefined ? {} : { next }),
13
+ ...(total === undefined ? {} : { total: total }),
14
+ };
15
+ }
16
+ function rowsOf(value) {
17
+ if (!plain(value))
18
+ return null;
19
+ const window = windowOf(value);
20
+ if (window === null)
21
+ return null;
22
+ if (Array.isArray(value.groups)) {
23
+ const groups = value.groups;
24
+ return groups.every((group) => plain(group) && Array.isArray(group.key) && typeof group.count === 'number')
25
+ ? { groups: groups, ...window }
26
+ : null;
27
+ }
28
+ if (!Array.isArray(value.documents))
29
+ return null;
30
+ const documents = value.documents;
31
+ return documents.every((document) => plain(document) && typeof document.room === 'string' && typeof document.path === 'string')
32
+ ? { documents: documents, ...window }
33
+ : null;
34
+ }
35
+ export function entrySeedOf(value) {
36
+ if (!plain(value) || !plain(value.at) || !Array.isArray(value.queries))
37
+ return null;
38
+ const at = {};
39
+ for (const [room, version] of Object.entries(value.at)) {
40
+ if (typeof version !== 'string')
41
+ return null;
42
+ at[room] = version;
43
+ }
44
+ const queries = [];
45
+ for (const entry of value.queries) {
46
+ if (!plain(entry) || !plain(entry.query))
47
+ return null;
48
+ const rows = rowsOf(entry.rows);
49
+ if (rows === null)
50
+ return null;
51
+ queries.push({ query: entry.query, rows });
52
+ }
53
+ return { at, queries };
54
+ }
55
+ export function seededResult(seed) {
56
+ const coverage = {
57
+ rooms: Object.entries(seed.at).map(([room, generation]) => ({
58
+ room,
59
+ generation,
60
+ current: false,
61
+ })),
62
+ indexes: [],
63
+ overlay: [],
64
+ };
65
+ if ('groups' in seed.rows) {
66
+ return {
67
+ result: { ...seed.rows, coverage },
68
+ keys: seed.rows.groups.map((_group, index) => index),
69
+ };
70
+ }
71
+ return {
72
+ result: { ...seed.rows, coverage },
73
+ keys: seed.rows.documents.map((document) => documentKey(document.room, document.path)),
74
+ };
75
+ }
package/dist/shared.d.ts CHANGED
@@ -1,11 +1,16 @@
1
1
  export type Paths<V> = Readonly<Record<string, V>>;
2
- type Weigh<V> = (key: string, value: V) => number;
2
+ export declare function entriesIn<V>(map: Paths<V>): Generator<readonly [string, V]>;
3
+ export declare function keysIn(...maps: readonly Paths<unknown>[]): Generator<number, Set<string>, void>;
4
+ export declare function sortedKeys(map: Paths<unknown>): Generator<number, readonly string[], void>;
5
+ export declare function sorting(keys: Iterable<string>): Generator<number, readonly string[], void>;
6
+ export declare function sharing<V>(map: Paths<V>): Generator<number, Paths<V>, void>;
3
7
  export declare function shared<V>(map: Paths<V>): Paths<V>;
4
8
  export declare function patched<V>(base: Paths<V>, set: Iterable<readonly [string, V]>, removed?: Iterable<string>): Paths<V>;
5
- export declare function tally<V>(map: Paths<V>, weigh: Weigh<V>): number;
9
+ export declare function patching<V>(base: Paths<V>, set: Iterable<readonly [string, V]>, removed?: Iterable<string>): Generator<number, Paths<V>, void>;
6
10
  export declare function sizeOf<V>(map: Paths<V>): number;
11
+ export declare function differences<V>(left: Paths<V>, right: Paths<V>, same?: (left: V, right: V) => boolean): Generator<number, ReadonlySet<string>, void>;
7
12
  export declare function differing<V>(left: Paths<V>, right: Paths<V>, same?: (left: V, right: V) => boolean): ReadonlySet<string>;
8
13
  export declare function drafted<V>(base: Paths<V>): Record<string, V>;
9
14
  export declare function settled<V>(draft: Record<string, V>): Paths<V>;
10
- export {};
15
+ export declare function settling<V>(draft: Record<string, V>): Generator<number, Paths<V>, void>;
11
16
  //# sourceMappingURL=shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAkBnD,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;AA6LlD,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAEjD;AAED,wBAAgB,OAAO,CAAC,CAAC,EACvB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EACd,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EACnC,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAM,GAC7B,KAAK,CAAC,CAAC,CAAC,CA8BV;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAY/D;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAE/C;AAuCD,wBAAgB,SAAS,CAAC,CAAC,EACzB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EACd,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,IAAI,GAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,OAAmB,GAC/C,WAAW,CAAC,MAAM,CAAC,CAcrB;AAMD,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAiD5D;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAS7D"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"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"}