@agentshouse/mdruntime-families 0.1.0-cf706e877ebe3 → 0.1.0-cf730a0a343ec

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 (49) hide show
  1. package/README.md +9 -4
  2. package/dist/mdruntime/adapter.d.ts +530 -0
  3. package/dist/mdruntime/binary.d.ts +17 -0
  4. package/dist/mdruntime/chain.d.ts +10 -0
  5. package/dist/mdruntime/change-set.d.ts +27 -0
  6. package/dist/mdruntime/change.d.ts +118 -0
  7. package/dist/mdruntime/client.d.ts +90 -0
  8. package/dist/mdruntime/collection.d.ts +30 -0
  9. package/dist/mdruntime/compile.d.ts +15 -0
  10. package/dist/mdruntime/connection.d.ts +154 -0
  11. package/dist/mdruntime/conversation.d.ts +118 -0
  12. package/dist/mdruntime/durability.d.ts +12 -0
  13. package/dist/mdruntime/failure.d.ts +12 -0
  14. package/dist/mdruntime/fulltext.d.ts +26 -0
  15. package/dist/mdruntime/identity.d.ts +6 -0
  16. package/dist/mdruntime/media.d.ts +7 -0
  17. package/dist/mdruntime/messages.d.ts +27 -0
  18. package/dist/mdruntime/model.d.ts +63 -0
  19. package/dist/mdruntime/observation.d.ts +44 -0
  20. package/dist/mdruntime/open.d.ts +1 -0
  21. package/dist/mdruntime/opened.d.ts +21 -0
  22. package/dist/mdruntime/outcome.d.ts +87 -0
  23. package/dist/mdruntime/overlay.d.ts +24 -0
  24. package/dist/mdruntime/query.d.ts +283 -0
  25. package/dist/mdruntime/reach.d.ts +53 -0
  26. package/dist/mdruntime/readiness.d.ts +63 -0
  27. package/dist/mdruntime/recovery.d.ts +24 -0
  28. package/dist/mdruntime/replica.d.ts +68 -0
  29. package/dist/mdruntime/room-draft.d.ts +158 -0
  30. package/dist/mdruntime/save.d.ts +102 -0
  31. package/dist/mdruntime/search.d.ts +72 -0
  32. package/dist/mdruntime/seed.d.ts +15 -0
  33. package/dist/mdruntime/shared.d.ts +15 -0
  34. package/dist/mdruntime/status.d.ts +31 -0
  35. package/dist/mdruntime/store.d.ts +176 -0
  36. package/dist/mdruntime/stored.d.ts +153 -0
  37. package/dist/mdruntime/tables.d.ts +361 -0
  38. package/dist/mdruntime/transfer.d.ts +9 -0
  39. package/dist/mdruntime/wire.d.ts +238 -0
  40. package/dist/react-admin.d.ts +1 -2
  41. package/dist/react-admin.d.ts.map +1 -1
  42. package/dist/react-admin.js +6 -7
  43. package/dist/records.d.ts +10 -3
  44. package/dist/records.d.ts.map +1 -1
  45. package/dist/records.js +470 -107
  46. package/dist/refine.d.ts +1 -2
  47. package/dist/refine.d.ts.map +1 -1
  48. package/dist/refine.js +5 -6
  49. package/package.json +8 -4
package/README.md CHANGED
@@ -40,12 +40,17 @@ compare for equality, a list for membership, and the suffixes `_gt`, `_gte`,
40
40
  `lt`, `gt`, `lte`, `gte`, `in`, `nin`, `or` and `and`. A field the Room schema
41
41
  declares a reference, at any depth, holds the referenced record's id; `id` and
42
42
  a reference compare only for equality and membership. Pages and totals are
43
- counted over every matching record. react-admin's `update` writes the fields
43
+ counted over every matching record, and a page reads only its own window of
44
+ the Room; a list asked for without a page reads every record, window by
45
+ window. react-admin's `update` writes the fields
44
46
  that differ from `previousData`, based on it, so the Save of a field another
45
47
  writer changed meanwhile is refused; Refine's `update` and either `updateMany`
46
- compare with the stored record. A list stays current: react-admin's queries of
47
- a resource are invalidated, and Refine's live mode refetches, when a document
48
- of the resource changes.
48
+ compare with the stored record. A Room the Runtime holds locked is left out of
49
+ every list, and a read or a write of a record in it rejects with the code
50
+ `room-locked`. A list stays current: react-admin's queries of a resource are
51
+ invalidated, and Refine's live mode refetches, when a record a page or a read
52
+ shows changes, a record a filter names starts or stops matching it, a page's
53
+ total changes, or a Room the list left out as locked unlocks.
49
54
 
50
55
  ## License
51
56
 
@@ -0,0 +1,530 @@
1
+ import type { ModelResult } from './model.js';
2
+ import type { Open } from './open.js';
3
+ import type { ChangeBatch } from './change.js';
4
+ export type Authorization = object;
5
+ export type MdModelIdentity = {
6
+ identity: string;
7
+ version: string;
8
+ };
9
+ export type TypedSelection = {
10
+ roots: readonly string[];
11
+ };
12
+ export type OperationScopes = {
13
+ write: readonly string[];
14
+ delete: readonly string[];
15
+ };
16
+ export type ReplicaAdmission = {
17
+ selection: string;
18
+ admission: Open<'admitted' | 'unavailable'>;
19
+ offline: Open<'locked' | 'open'>;
20
+ };
21
+ export type DiscoveredRoom = {
22
+ name: string;
23
+ locator: string;
24
+ handle: string;
25
+ roomVersion: string;
26
+ operations: OperationScopes;
27
+ replica: ReplicaAdmission;
28
+ typedSelection?: TypedSelection;
29
+ providerOwnedPaths: readonly string[];
30
+ };
31
+ export type Capability = {
32
+ name: string;
33
+ limits?: readonly ProviderLimit[];
34
+ actions?: readonly ActionDeclaration[];
35
+ conversationAgents?: ConversationAgents;
36
+ };
37
+ export type ConversationAgents = {
38
+ locator: string;
39
+ type: string;
40
+ identity: string;
41
+ name: string;
42
+ retired?: string;
43
+ };
44
+ export type ListedConversation = {
45
+ conversation: string;
46
+ agent: string;
47
+ name: string;
48
+ created: string;
49
+ finished: string | null;
50
+ outcome: string | null;
51
+ waiting: boolean;
52
+ };
53
+ export type ConversationAction = 'conversation.create' | 'conversation.send' | 'conversation.answer' | 'conversation.interrupt' | 'conversation.kill' | 'conversation.cancel' | 'conversation.delete' | 'conversation.history';
54
+ export type ConversationMessage = {
55
+ identity: string;
56
+ turn: string;
57
+ text: string;
58
+ message: unknown;
59
+ };
60
+ export type AcceptedMessage = ConversationMessage & {
61
+ position: string;
62
+ };
63
+ export type ConversationHistoryRequest = {
64
+ conversations: readonly {
65
+ conversation: string;
66
+ after?: string;
67
+ }[];
68
+ };
69
+ export type ConversationHistoryPage = {
70
+ conversation: string;
71
+ messages: readonly AcceptedMessage[];
72
+ next?: string;
73
+ };
74
+ export type ConversationHistories = {
75
+ histories: readonly ConversationHistoryPage[];
76
+ };
77
+ export type TurnContext = {
78
+ used: number;
79
+ window: number;
80
+ };
81
+ export type TurnOperation = {
82
+ op: 'begin';
83
+ at: string;
84
+ } | {
85
+ op: 'start';
86
+ index: number;
87
+ part: unknown;
88
+ } | {
89
+ op: 'append';
90
+ index: number;
91
+ text: string;
92
+ } | {
93
+ op: 'status';
94
+ index: number;
95
+ status: string;
96
+ result: unknown;
97
+ } | {
98
+ op: 'count';
99
+ index: number;
100
+ count: number;
101
+ } | {
102
+ op: 'plan';
103
+ index: number;
104
+ entries: readonly unknown[];
105
+ } | ({
106
+ op: 'context';
107
+ } & TurnContext);
108
+ export type ProcessCommand = {
109
+ [field: string]: unknown;
110
+ name: string;
111
+ description: string;
112
+ input?: {
113
+ [field: string]: unknown;
114
+ hint: string;
115
+ } | null;
116
+ };
117
+ type SelectValue = {
118
+ [field: string]: unknown;
119
+ value: string;
120
+ name: string;
121
+ description?: string | null;
122
+ };
123
+ type SelectGroup = {
124
+ [field: string]: unknown;
125
+ group: string;
126
+ name: string;
127
+ options: readonly SelectValue[];
128
+ };
129
+ type SessionOptionNaming = {
130
+ [field: string]: unknown;
131
+ id: string;
132
+ name: string;
133
+ description?: string | null;
134
+ category?: string | null;
135
+ };
136
+ export type SessionOption = (SessionOptionNaming & {
137
+ type: 'select';
138
+ currentValue: string;
139
+ options: readonly SelectValue[] | readonly SelectGroup[];
140
+ }) | (SessionOptionNaming & {
141
+ type: 'boolean';
142
+ currentValue: boolean;
143
+ });
144
+ export type ConversationEvent = {
145
+ kind: 'turn';
146
+ conversation: string;
147
+ turn: string;
148
+ operation: TurnOperation;
149
+ } | {
150
+ kind: 'questions';
151
+ conversation: string;
152
+ questions: readonly unknown[];
153
+ } | {
154
+ kind: 'process';
155
+ conversation: string;
156
+ running: boolean;
157
+ } | {
158
+ kind: 'commands';
159
+ conversation: string;
160
+ commands: readonly ProcessCommand[];
161
+ } | {
162
+ kind: 'options';
163
+ conversation: string;
164
+ options: readonly SessionOption[];
165
+ } | {
166
+ kind: 'starting';
167
+ conversation: string;
168
+ step: string | null;
169
+ } | {
170
+ kind: 'link';
171
+ conversation: string;
172
+ connected: boolean;
173
+ } | {
174
+ kind: 'deliveries';
175
+ conversation: string;
176
+ unknown: readonly string[];
177
+ } | {
178
+ kind: 'accepted-message';
179
+ conversation: string;
180
+ message: AcceptedMessage;
181
+ } | {
182
+ kind: 'gap';
183
+ conversation: string;
184
+ } | {
185
+ kind: 'list';
186
+ entries: readonly ListedConversation[];
187
+ } | {
188
+ kind: 'listed';
189
+ entry: ListedConversation;
190
+ } | {
191
+ kind: 'unlisted';
192
+ conversation: string;
193
+ };
194
+ export type ConversationStream = {
195
+ replicate(conversations: readonly string[]): void;
196
+ observe(notify: (event: ConversationEvent) => void): () => void;
197
+ };
198
+ export type ActionDeclaration = {
199
+ name: string;
200
+ inputShape: unknown;
201
+ resultKind: unknown;
202
+ room?: string;
203
+ };
204
+ export type ProviderLimit = {
205
+ name: string;
206
+ value?: number | string;
207
+ };
208
+ export type HistoryRetention = {
209
+ kind: 'duration';
210
+ seconds: number;
211
+ } | {
212
+ kind: 'no-declared-time-bound';
213
+ };
214
+ export type Retention = {
215
+ history: HistoryRetention;
216
+ outcome: number;
217
+ refreshHorizon: number;
218
+ };
219
+ export type Discovery = {
220
+ kind: 'discovery';
221
+ rooms: readonly DiscoveredRoom[];
222
+ capabilities: readonly Capability[];
223
+ providerLimits: readonly ProviderLimit[];
224
+ retention: Retention;
225
+ member?: Member;
226
+ covered?: readonly string[];
227
+ };
228
+ export type DiscoveryScope = {
229
+ readonly authorities: readonly string[];
230
+ };
231
+ export type TransportUncertainty = {
232
+ kind: 'transport-uncertainty';
233
+ };
234
+ export type RoomNotReadable = {
235
+ kind: 'room-not-readable';
236
+ locator: string;
237
+ };
238
+ export type RevokedAuthorization = {
239
+ kind: 'revoked-authorization';
240
+ };
241
+ export type ProviderRefusal = {
242
+ code: string;
243
+ fields: Readonly<Record<string, unknown>>;
244
+ retryable: boolean;
245
+ };
246
+ export type ScopedRefusal = ProviderRefusal & {
247
+ kind: 'scoped-refusal';
248
+ locator: string;
249
+ scope: Open<'content' | 'model' | 'operation' | 'undisclosed'>;
250
+ };
251
+ export type AdapterFailure = TransportUncertainty | RoomNotReadable | RevokedAuthorization | ScopedRefusal;
252
+ export type ContractUnavailable = ProviderRefusal & {
253
+ kind: 'contract-unavailable';
254
+ };
255
+ export type DiscoverResult = Discovery | TransportUncertainty | RevokedAuthorization | ContractUnavailable;
256
+ export type PageToken = string;
257
+ export type ChangeAuthor = {
258
+ kind: Open<'user' | 'site' | 'inbox'>;
259
+ id: string;
260
+ name: string;
261
+ };
262
+ export type Member = {
263
+ kind: Open<'user'>;
264
+ id: string;
265
+ name: string;
266
+ };
267
+ export type HeadChange = {
268
+ author: ChangeAuthor | null;
269
+ time: string;
270
+ };
271
+ export type BinaryFile = {
272
+ byteLength: number;
273
+ mediaType: string;
274
+ sha256: string;
275
+ };
276
+ export type HeldFile = {
277
+ readonly path: string;
278
+ readonly revision: string;
279
+ };
280
+ export type HeldContent = {
281
+ files(after: string | null, limit: number): Promise<readonly HeldFile[]>;
282
+ contents(paths: readonly string[]): Promise<ReadonlyMap<string, {
283
+ readonly content: string;
284
+ readonly revision: string;
285
+ }>>;
286
+ };
287
+ export type BootstrapRequest = {
288
+ locator: string;
289
+ selection: string;
290
+ pageToken?: PageToken;
291
+ held?: HeldContent;
292
+ received?: Uint8Array;
293
+ arriving?: (bytes: number) => void;
294
+ };
295
+ export type BootstrapInventory = {
296
+ readonly parts: number;
297
+ readonly bytes: number;
298
+ };
299
+ export type RoomModels = {
300
+ collection?: ModelResult;
301
+ };
302
+ export type BootstrapPage = {
303
+ kind: 'bootstrap';
304
+ roomVersion: string;
305
+ models?: RoomModels;
306
+ documents: Readonly<Record<string, string>>;
307
+ revisions: Readonly<Record<string, string>>;
308
+ fileIds?: Readonly<Record<string, string>>;
309
+ changes: Readonly<Record<string, HeadChange>>;
310
+ binaryFiles: Readonly<Record<string, BinaryFile>>;
311
+ folders?: readonly string[];
312
+ pageToken?: PageToken;
313
+ inventory?: BootstrapInventory;
314
+ received?: Uint8Array;
315
+ };
316
+ export type BootstrapResult = BootstrapPage | {
317
+ kind: 'beyond-horizon';
318
+ } | AdapterFailure;
319
+ export type RefreshRequest = {
320
+ locator: string;
321
+ selection: string;
322
+ fromRoomVersion: string;
323
+ pageToken?: PageToken;
324
+ };
325
+ export type RefreshPage = {
326
+ kind: 'net-advancement';
327
+ roomVersion: string;
328
+ models?: RoomModels;
329
+ documents: Readonly<Record<string, string>>;
330
+ revisions: Readonly<Record<string, string>>;
331
+ fileIds?: Readonly<Record<string, string>>;
332
+ changes: Readonly<Record<string, HeadChange>>;
333
+ binaryFiles: Readonly<Record<string, BinaryFile>>;
334
+ removals: readonly string[];
335
+ folders?: readonly string[];
336
+ folderRemovals?: readonly string[];
337
+ pageToken?: PageToken;
338
+ };
339
+ export type RefreshResult = {
340
+ kind: 'still-current';
341
+ } | RefreshPage | {
342
+ kind: 'beyond-horizon';
343
+ } | RetryableRefusal | AdapterFailure;
344
+ export type MutationRequest = {
345
+ locator: string;
346
+ changeBatch: ChangeBatch;
347
+ file(localId: string): Promise<Blob>;
348
+ upload?: unknown;
349
+ };
350
+ export type RetryableRefusal = ProviderRefusal & {
351
+ kind: 'retryable-refusal';
352
+ reset?: string;
353
+ };
354
+ export type ServiceMode = Open<'open' | 'write-halted'>;
355
+ export type ServiceModeSignal = {
356
+ observe(notify: (mode: ServiceMode) => void): () => void;
357
+ };
358
+ export type AcceptedRoom = {
359
+ roomVersion: string;
360
+ documents: Readonly<Record<string, string>>;
361
+ revisions: Readonly<Record<string, string>>;
362
+ fileIds?: Readonly<Record<string, string>>;
363
+ changes: Readonly<Record<string, HeadChange>>;
364
+ removals: readonly string[];
365
+ binaryFiles?: Readonly<Record<string, BinaryFile>>;
366
+ };
367
+ export type MutationResult = (AcceptedRoom & {
368
+ kind: 'accepted';
369
+ author?: string;
370
+ time?: string;
371
+ destination?: AcceptedRoom;
372
+ }) | (ProviderRefusal & {
373
+ kind: 'conflicted';
374
+ roomVersion?: string;
375
+ affected: Readonly<Record<string, string>>;
376
+ }) | (ProviderRefusal & {
377
+ kind: 'rejected';
378
+ affected: Readonly<Record<string, string>>;
379
+ }) | RetryableRefusal | {
380
+ kind: 'write-halted';
381
+ } | {
382
+ kind: 'expired';
383
+ restored?: true;
384
+ } | AdapterFailure;
385
+ export type HistoryAuthor = {
386
+ kind: 'user';
387
+ id: string;
388
+ } | {
389
+ kind: 'site' | 'inbox';
390
+ id: string;
391
+ name: string;
392
+ };
393
+ export type HistoryRevision = {
394
+ revision: string;
395
+ author: HistoryAuthor;
396
+ time: string;
397
+ binaryFile?: BinaryFile;
398
+ };
399
+ export type HistoryRequest = {
400
+ locator: string;
401
+ path: string;
402
+ revision?: string;
403
+ pageToken?: PageToken;
404
+ };
405
+ export type HistoryResult = {
406
+ kind: 'history';
407
+ revisions: readonly HistoryRevision[];
408
+ pageToken?: PageToken;
409
+ deleted?: true;
410
+ } | {
411
+ kind: 'revision';
412
+ content: string;
413
+ } | {
414
+ kind: 'no-history';
415
+ } | AdapterFailure;
416
+ export type BinaryRequest = {
417
+ kind: 'path';
418
+ locator: string;
419
+ path: string;
420
+ revision: string;
421
+ };
422
+ export type BinaryResult = {
423
+ kind: 'binary';
424
+ body: ReadableStream<Uint8Array>;
425
+ mediaType: string;
426
+ sha256?: string;
427
+ } | (ProviderRefusal & {
428
+ kind: 'rejected';
429
+ }) | AdapterFailure;
430
+ export type BinaryLinkResult = {
431
+ kind: 'link';
432
+ url: string;
433
+ name: string;
434
+ mediaType?: string;
435
+ } | (ProviderRefusal & {
436
+ kind: 'rejected';
437
+ }) | AdapterFailure;
438
+ export type AttachRequest = {
439
+ locator: string;
440
+ name: string;
441
+ mediaType: string;
442
+ byteLength: number;
443
+ sha256: string;
444
+ blob: Blob;
445
+ };
446
+ export type AttachResult = {
447
+ kind: 'attached';
448
+ path: string;
449
+ revision: string;
450
+ } | (ProviderRefusal & {
451
+ kind: 'rejected';
452
+ }) | AdapterFailure;
453
+ export type ActionRequest = {
454
+ name: string;
455
+ input: unknown;
456
+ };
457
+ export type RoomVersionAt = {
458
+ locator: string;
459
+ roomVersion: string;
460
+ };
461
+ export type ActionResult = {
462
+ kind: 'action';
463
+ result: unknown;
464
+ at?: RoomVersionAt;
465
+ } | (ProviderRefusal & {
466
+ kind: 'rejected';
467
+ }) | AdapterFailure;
468
+ export type HeldRoom = {
469
+ locator: string;
470
+ roomVersion: string;
471
+ };
472
+ export type HeldRevisions = (locator: string, paths: readonly string[]) => Promise<ReadonlyMap<string, string>>;
473
+ export type RoomStreamEvent = {
474
+ kind: 'opened';
475
+ } | {
476
+ kind: 'closed';
477
+ revoked: boolean;
478
+ lost: boolean;
479
+ } | {
480
+ kind: 'opening';
481
+ expired: readonly string[];
482
+ } | {
483
+ kind: 'authority-changed';
484
+ scope?: DiscoveryScope;
485
+ } | {
486
+ kind: 'room-version';
487
+ locator: string;
488
+ roomVersion: string;
489
+ };
490
+ export type KeptReceipt = {
491
+ key: string;
492
+ head: unknown;
493
+ };
494
+ export type StreamReceipts = {
495
+ heads(): Promise<readonly KeptReceipt[]>;
496
+ parts(key: string, count: number): Promise<readonly unknown[]>;
497
+ keep(key: string, head: unknown, part?: {
498
+ index: number;
499
+ value: unknown;
500
+ }): Promise<void>;
501
+ drop(keys: readonly string[]): Promise<void>;
502
+ };
503
+ export type RoomStream = {
504
+ hold(rooms: readonly HeldRoom[]): void;
505
+ reopen(): void;
506
+ published(locator: string, roomVersion: string): void;
507
+ observe(notify: (event: RoomStreamEvent) => void, receipts: StreamReceipts, revisions: HeldRevisions): () => void;
508
+ };
509
+ export type Adapter = {
510
+ readonly localSaves?: true;
511
+ readonly exhaustiveDiscovery?: true;
512
+ readonly roomTypes?: string;
513
+ readonly nameableRoomTypes?: readonly string[];
514
+ authorize(): Promise<Authorization>;
515
+ discover(authorization: Authorization, scope?: DiscoveryScope): Promise<DiscoverResult>;
516
+ bootstrap(authorization: Authorization, request: BootstrapRequest): Promise<BootstrapResult>;
517
+ refresh(authorization: Authorization, request: RefreshRequest): Promise<RefreshResult>;
518
+ mutate(authorization: Authorization, request: MutationRequest, keep: (upload: unknown) => Promise<void>): Promise<MutationResult>;
519
+ history(authorization: Authorization, request: HistoryRequest): Promise<HistoryResult>;
520
+ binary(authorization: Authorization, request: BinaryRequest): Promise<BinaryResult>;
521
+ link(authorization: Authorization, request: BinaryRequest): Promise<BinaryLinkResult>;
522
+ attach(authorization: Authorization, request: AttachRequest): Promise<AttachResult>;
523
+ action(authorization: Authorization, request: ActionRequest): Promise<ActionResult>;
524
+ reached(locator: string, roomVersion: string, target: string): boolean;
525
+ follows(locator: string, roomVersion: string, next: string): boolean;
526
+ roomStream?: RoomStream;
527
+ conversations?: ConversationStream;
528
+ serviceMode?: ServiceModeSignal;
529
+ };
530
+ export {};
@@ -0,0 +1,17 @@
1
+ import type { HeldBinary } from './overlay.js';
2
+ export type BinaryFileRecord = {
3
+ readonly state: 'accepted';
4
+ readonly revision: string;
5
+ readonly path: string;
6
+ readonly byteLength: number;
7
+ readonly mediaType: string;
8
+ readonly sha256: string;
9
+ } | {
10
+ readonly state: 'pending';
11
+ readonly localId: string;
12
+ readonly path: string;
13
+ readonly byteLength: number;
14
+ readonly mediaType: string;
15
+ readonly sha256: string;
16
+ };
17
+ export declare function binaryRecord(path: string, held: HeldBinary, revision: string | undefined): BinaryFileRecord;
@@ -0,0 +1,10 @@
1
+ import type { MdRuntimeClient } from './client.js';
2
+ import type { DocumentQuery, DocumentResult, GroupQuery, GroupResult, PendingResult } from './query.js';
3
+ type Rows = DocumentResult | GroupResult;
4
+ export type WindowAnswer = Rows | PendingResult;
5
+ export type WindowChain = {
6
+ want(count: number): void;
7
+ close(): void;
8
+ };
9
+ export declare function chainedWindows(runtime: MdRuntimeClient, query: DocumentQuery | GroupQuery, count: number, publish: (answers: readonly (WindowAnswer | null)[], settled: boolean) => void): WindowChain;
10
+ export {};
@@ -0,0 +1,27 @@
1
+ export type DocumentChange = {
2
+ readonly locator: string;
3
+ readonly path: string | null;
4
+ };
5
+ export type ChangeSet = {
6
+ documents: readonly DocumentChange[];
7
+ drafts: readonly {
8
+ locator: string;
9
+ path: string;
10
+ }[];
11
+ rooms: readonly string[];
12
+ queues: readonly string[];
13
+ presentations: readonly string[];
14
+ conversations: readonly string[];
15
+ };
16
+ type Changed = {
17
+ documents?: readonly string[] | null;
18
+ drafts?: readonly string[];
19
+ room?: boolean;
20
+ queue?: boolean;
21
+ presentation?: string;
22
+ };
23
+ export declare function changeSet(locator: string, changed?: Changed): ChangeSet;
24
+ export declare function conversationChangeSet(conversations: readonly string[]): ChangeSet;
25
+ export declare function mergeChangeSets(sets: readonly ChangeSet[]): ChangeSet;
26
+ export declare function touches(set: ChangeSet, locator: string, path: string): boolean;
27
+ export {};