@agentshouse/mdruntime 0.1.0-c2e8a6f99866d → 0.1.0-c2ef9303a058d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -9
- package/dist/adapter.d.ts +95 -67
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +5 -11
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +36 -47
- package/dist/binary.d.ts +0 -5
- package/dist/binary.d.ts.map +1 -1
- package/dist/binary.js +1 -1
- package/dist/bootstrap.d.ts +17 -9
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +143 -94
- package/dist/chain.d.ts +2 -1
- package/dist/chain.d.ts.map +1 -1
- package/dist/change-set.d.ts +1 -7
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +1 -4
- package/dist/client.d.ts +15 -12
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +56 -8
- package/dist/collection.d.ts +7 -4
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +24 -19
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +117 -243
- package/dist/connection.d.ts +14 -12
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +1466 -1431
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/{chat/context.js → context.js} +1 -4
- package/dist/conversation.d.ts +18 -15
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +273 -185
- package/dist/durability.d.ts +6 -4
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +5 -0
- package/dist/entry.d.ts +3 -2
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +17 -8
- package/dist/file.d.ts +2 -11
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +6 -4
- package/dist/host.d.ts +3 -7
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +55 -38
- package/dist/identity.d.ts +0 -2
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +0 -6
- package/dist/index.d.ts +15 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/job.d.ts +14 -0
- package/dist/job.d.ts.map +1 -0
- package/dist/job.js +28 -0
- package/dist/live.d.ts +2 -1
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +9 -5
- package/dist/media.d.ts +8 -0
- package/dist/media.d.ts.map +1 -0
- package/dist/media.js +218 -0
- package/dist/memory.d.ts +12 -6
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +209 -101
- package/dist/messages.d.ts +28 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +89 -0
- package/dist/model.d.ts +8 -8
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +7 -13
- package/dist/observation.d.ts +3 -2
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +8 -3
- package/dist/outcome.d.ts +13 -6
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +16 -5
- package/dist/overlay.js +1 -1
- package/dist/paths.d.ts +1 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +4 -0
- package/dist/query.d.ts +10 -206
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +3 -494
- package/dist/reach.d.ts +14 -9
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +84 -72
- package/dist/react.d.ts +3 -1
- package/dist/react.d.ts.map +1 -1
- package/dist/readiness.d.ts +14 -17
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +2 -8
- package/dist/recovery.d.ts +1 -0
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +26 -0
- package/dist/refresh.d.ts +10 -4
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +88 -30
- package/dist/replica.d.ts +11 -8
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +30 -15
- package/dist/room-draft.d.ts +22 -5
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +131 -51
- package/dist/rows.d.ts +18 -16
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +45 -153
- package/dist/save.d.ts +2 -0
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +13 -7
- package/dist/search.d.ts +12 -95
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +10 -349
- package/dist/shared.d.ts +0 -1
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +0 -10
- package/dist/status.d.ts +4 -3
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +3 -1
- package/dist/store.d.ts +25 -62
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +43 -282
- package/dist/stored.d.ts +12 -26
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +189 -226
- package/dist/tables.d.ts +55 -48
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +107 -57
- package/dist/transfer.d.ts +0 -5
- package/dist/transfer.d.ts.map +1 -1
- package/dist/validation.d.ts +3 -4
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +39 -97
- package/dist/windows.d.ts +1 -12
- package/dist/windows.d.ts.map +1 -1
- package/dist/windows.js +2 -75
- package/dist/wire.d.ts +14 -9
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +5 -3
- package/package.json +14 -18
- package/AGENTS.md +0 -312
- package/dist/chat/acts.d.ts +0 -33
- package/dist/chat/acts.d.ts.map +0 -1
- package/dist/chat/acts.js +0 -36
- package/dist/chat/context.d.ts +0 -3
- package/dist/chat/context.d.ts.map +0 -1
- package/dist/chat/earlier.d.ts +0 -10
- package/dist/chat/earlier.d.ts.map +0 -1
- package/dist/chat/earlier.js +0 -54
- package/dist/chat/house.d.ts +0 -25
- package/dist/chat/house.d.ts.map +0 -1
- package/dist/chat/house.js +0 -38
- package/dist/chat/input.d.ts +0 -11
- package/dist/chat/input.d.ts.map +0 -1
- package/dist/chat/input.js +0 -92
- package/dist/chat/kit.d.ts +0 -61
- package/dist/chat/kit.d.ts.map +0 -1
- package/dist/chat/kit.js +0 -123
- package/dist/chat/lasting.d.ts +0 -6
- package/dist/chat/lasting.d.ts.map +0 -1
- package/dist/chat/lasting.js +0 -19
- package/dist/chat/list.d.ts +0 -28
- package/dist/chat/list.d.ts.map +0 -1
- package/dist/chat/list.js +0 -103
- package/dist/chat/markdown.d.ts +0 -21
- package/dist/chat/markdown.d.ts.map +0 -1
- package/dist/chat/markdown.js +0 -246
- package/dist/chat/message.d.ts +0 -7
- package/dist/chat/message.d.ts.map +0 -1
- package/dist/chat/message.js +0 -244
- package/dist/chat/messages.d.ts +0 -30
- package/dist/chat/messages.d.ts.map +0 -1
- package/dist/chat/messages.js +0 -198
- package/dist/chat/name.d.ts +0 -7
- package/dist/chat/name.d.ts.map +0 -1
- package/dist/chat/name.js +0 -37
- package/dist/chat/opened.d.ts +0 -12
- package/dist/chat/opened.d.ts.map +0 -1
- package/dist/chat/opened.js +0 -19
- package/dist/chat/overlay.d.ts +0 -32
- package/dist/chat/overlay.d.ts.map +0 -1
- package/dist/chat/overlay.js +0 -103
- package/dist/chat/parts.d.ts +0 -58
- package/dist/chat/parts.d.ts.map +0 -1
- package/dist/chat/parts.js +0 -120
- package/dist/chat/pieces.d.ts +0 -62
- package/dist/chat/pieces.d.ts.map +0 -1
- package/dist/chat/pieces.js +0 -1110
- package/dist/chat/process.d.ts +0 -20
- package/dist/chat/process.d.ts.map +0 -1
- package/dist/chat/process.js +0 -32
- package/dist/chat/provider.d.ts +0 -70
- package/dist/chat/provider.d.ts.map +0 -1
- package/dist/chat/provider.js +0 -635
- package/dist/chat/question.d.ts +0 -9
- package/dist/chat/question.d.ts.map +0 -1
- package/dist/chat/question.js +0 -69
- package/dist/chat/questions.d.ts +0 -31
- package/dist/chat/questions.d.ts.map +0 -1
- package/dist/chat/questions.js +0 -111
- package/dist/chat/read.d.ts +0 -5
- package/dist/chat/read.d.ts.map +0 -1
- package/dist/chat/read.js +0 -13
- package/dist/chat/ready.d.ts +0 -37
- package/dist/chat/ready.d.ts.map +0 -1
- package/dist/chat/ready.js +0 -93
- package/dist/chat/room-file.d.ts +0 -8
- package/dist/chat/room-file.d.ts.map +0 -1
- package/dist/chat/room-file.js +0 -72
- package/dist/chat/steady.d.ts +0 -3
- package/dist/chat/steady.d.ts.map +0 -1
- package/dist/chat/steady.js +0 -26
- package/dist/chat/style.d.ts +0 -4
- package/dist/chat/style.d.ts.map +0 -1
- package/dist/chat/style.js +0 -306
- package/dist/chat.d.ts +0 -15
- package/dist/chat.d.ts.map +0 -1
- package/dist/chat.js +0 -8
- package/dist/reads.d.ts +0 -11
- package/dist/reads.d.ts.map +0 -1
- package/dist/reads.js +0 -98
package/dist/save.js
CHANGED
|
@@ -4,7 +4,7 @@ import { immutable, leaving, queuedFile, departure, } from './change.js';
|
|
|
4
4
|
import { collectionOf, documentsOf, governing, } from './collection.js';
|
|
5
5
|
import { changeBatchIdentity } from './identity.js';
|
|
6
6
|
import { overlaying } from './overlay.js';
|
|
7
|
-
import { covered, normalize } from './paths.js';
|
|
7
|
+
import { ancestors, covered, normalize } from './paths.js';
|
|
8
8
|
import { sorting } from './shared.js';
|
|
9
9
|
import { paced, ROW_WEIGHT, stepped } from './turn.js';
|
|
10
10
|
import { validatedCollection } from './validation.js';
|
|
@@ -329,6 +329,7 @@ function guard(changes, input, removing) {
|
|
|
329
329
|
add: (path) => void overridden.set(path, true),
|
|
330
330
|
delete: (path) => void overridden.set(path, false),
|
|
331
331
|
};
|
|
332
|
+
const occupied = (path) => input.folders.has(path) ? path : (ancestors(path).find((one) => existing.has(one)) ?? null);
|
|
332
333
|
for (const [index, change] of changes.entries()) {
|
|
333
334
|
for (const path of affected(change)) {
|
|
334
335
|
const normalized = normalize(path);
|
|
@@ -342,8 +343,9 @@ function guard(changes, input, removing) {
|
|
|
342
343
|
return refuse(`${operation}-grant`, normalized);
|
|
343
344
|
}
|
|
344
345
|
if (change.kind === 'create' || change.kind === 'arrival') {
|
|
345
|
-
|
|
346
|
-
|
|
346
|
+
const taken = existing.has(change.path) ? change.path : occupied(change.path);
|
|
347
|
+
if (taken !== null)
|
|
348
|
+
return refuse('path-collision', taken);
|
|
347
349
|
existing.add(change.path);
|
|
348
350
|
continue;
|
|
349
351
|
}
|
|
@@ -353,6 +355,9 @@ function guard(changes, input, removing) {
|
|
|
353
355
|
input.bases.some((base) => base.kind === 'absent' && base.path === change.path))) {
|
|
354
356
|
return refuse('path-collision', change.path);
|
|
355
357
|
}
|
|
358
|
+
const taken = occupied(change.path);
|
|
359
|
+
if (taken !== null)
|
|
360
|
+
return refuse('path-collision', taken);
|
|
356
361
|
if (!input.local &&
|
|
357
362
|
existing.has(change.path) &&
|
|
358
363
|
input.visible.revisions[departure(changes, index)] === undefined) {
|
|
@@ -364,8 +369,9 @@ function guard(changes, input, removing) {
|
|
|
364
369
|
if (change.kind === 'move') {
|
|
365
370
|
if (!existing.has(change.path))
|
|
366
371
|
return refuse('path-absent', change.path);
|
|
367
|
-
|
|
368
|
-
|
|
372
|
+
const taken = existing.has(change.to) ? change.to : occupied(change.to);
|
|
373
|
+
if (taken !== null)
|
|
374
|
+
return refuse('path-collision', taken);
|
|
369
375
|
if (unrevised(input, change.path)) {
|
|
370
376
|
return refuse('unknown-revision', change.path);
|
|
371
377
|
}
|
|
@@ -1074,11 +1080,11 @@ function arrivalOf({ path, to }, source, moved) {
|
|
|
1074
1080
|
};
|
|
1075
1081
|
const binary = binaries[path];
|
|
1076
1082
|
if (binary?.state === 'accepted') {
|
|
1077
|
-
const {
|
|
1083
|
+
const { byteLength, mediaType, sha256 } = binary;
|
|
1078
1084
|
return {
|
|
1079
1085
|
kind: 'arrival',
|
|
1080
1086
|
path: to,
|
|
1081
|
-
binary: {
|
|
1087
|
+
binary: { byteLength, mediaType, sha256 },
|
|
1082
1088
|
...heads,
|
|
1083
1089
|
};
|
|
1084
1090
|
}
|
package/dist/search.d.ts
CHANGED
|
@@ -1,105 +1,22 @@
|
|
|
1
|
-
import type { ProviderRefusal } from './adapter.js';
|
|
2
|
-
import type {
|
|
3
|
-
import { type CoveredRoom, type Filter, type PendingRoom } from './query.js';
|
|
4
|
-
import type { Open } from './open.js';
|
|
5
|
-
export type DocumentPart = Open<'fields' | 'sections' | 'preamble' | 'path'>;
|
|
1
|
+
import type { ProviderRefusal, SearchHit } from './adapter.js';
|
|
2
|
+
import type { Failure, Offline } from './outcome.js';
|
|
6
3
|
export type SearchRequest = {
|
|
7
4
|
text: string;
|
|
8
|
-
|
|
9
|
-
collection?: true;
|
|
10
|
-
conversations?: readonly string[];
|
|
11
|
-
limit?: number;
|
|
12
|
-
after?: string;
|
|
13
|
-
total?: true;
|
|
5
|
+
rooms?: readonly string[];
|
|
14
6
|
};
|
|
15
|
-
export type
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
score: number;
|
|
20
|
-
matches: Readonly<Record<string, readonly DocumentPart[]>>;
|
|
7
|
+
export type { SearchHit } from './adapter.js';
|
|
8
|
+
export type SearchFound = {
|
|
9
|
+
kind: 'found';
|
|
10
|
+
documents: readonly SearchHit[];
|
|
21
11
|
};
|
|
22
|
-
export type
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
score: number;
|
|
26
|
-
matches: Readonly<Record<string, readonly Open<'text'>[]>>;
|
|
27
|
-
};
|
|
28
|
-
export type SearchCoverage = {
|
|
29
|
-
rooms: readonly CoveredRoom[];
|
|
30
|
-
conversations: readonly string[];
|
|
31
|
-
index: string;
|
|
32
|
-
overlay: readonly string[];
|
|
33
|
-
};
|
|
34
|
-
export type PendingConversation = {
|
|
35
|
-
conversation: string;
|
|
36
|
-
awaits: Open<'index'>;
|
|
37
|
-
};
|
|
38
|
-
export type SearchHits = {
|
|
39
|
-
documents: readonly DocumentHit[];
|
|
40
|
-
messages: readonly MessageHit[];
|
|
41
|
-
};
|
|
42
|
-
export type SearchWindow = SearchHits & {
|
|
43
|
-
next?: string;
|
|
44
|
-
total?: {
|
|
45
|
-
documents: number;
|
|
46
|
-
messages: number;
|
|
47
|
-
};
|
|
48
|
-
};
|
|
49
|
-
export type SearchPending = SearchHits & {
|
|
50
|
-
pending: readonly (PendingRoom | PendingConversation)[];
|
|
51
|
-
coverage: SearchCoverage;
|
|
52
|
-
};
|
|
53
|
-
export type SearchUndeclared = ProviderRefusal & {
|
|
12
|
+
export type SearchResult = SearchFound | Offline | (ProviderRefusal & {
|
|
13
|
+
kind: 'rejected';
|
|
14
|
+
}) | (ProviderRefusal & {
|
|
54
15
|
kind: 'undeclared';
|
|
55
|
-
};
|
|
56
|
-
export type SearchResult = (SearchWindow & {
|
|
57
|
-
coverage: SearchCoverage;
|
|
58
|
-
}) | SearchPending | SearchUndeclared;
|
|
59
|
-
export declare function undeclaredSearch(): SearchUndeclared;
|
|
60
|
-
export type SearchedDocument = {
|
|
61
|
-
room: string;
|
|
62
|
-
path: string;
|
|
63
|
-
type: string;
|
|
64
|
-
fields: Readonly<Record<string, unknown>>;
|
|
65
|
-
preamble: string;
|
|
66
|
-
sections: Readonly<Record<string, string>>;
|
|
67
|
-
};
|
|
68
|
-
export type SearchedMessage = {
|
|
69
|
-
conversation: string;
|
|
70
|
-
identity: string;
|
|
71
|
-
text: string;
|
|
72
|
-
};
|
|
73
|
-
export type SearchSource = {
|
|
74
|
-
room(room: string): AsyncIterable<readonly SearchedDocument[]>;
|
|
75
|
-
documents(room: string, paths: readonly string[]): Promise<readonly SearchedDocument[]>;
|
|
76
|
-
};
|
|
77
|
-
type HitCursor = readonly [number, string, string] | readonly [] | null;
|
|
16
|
+
}) | Failure;
|
|
78
17
|
export type SearchPlan = {
|
|
79
18
|
text: string;
|
|
80
|
-
|
|
81
|
-
collection: boolean;
|
|
82
|
-
conversations: readonly string[] | null;
|
|
83
|
-
limit: number | null;
|
|
84
|
-
after: readonly [HitCursor, HitCursor] | null;
|
|
85
|
-
total: boolean;
|
|
86
|
-
};
|
|
87
|
-
export type SearchIndex = {
|
|
88
|
-
generation(): string;
|
|
89
|
-
rooms(): ReadonlySet<string>;
|
|
90
|
-
conversations(): ReadonlySet<string>;
|
|
91
|
-
indexRoom(room: string): Promise<void>;
|
|
92
|
-
indexMessages(conversation: string, messages: readonly SearchedMessage[], whole: boolean): void;
|
|
93
|
-
forget(rooms: readonly string[]): void;
|
|
94
|
-
changed(set: ChangeSet): void;
|
|
95
|
-
changes(): number;
|
|
96
|
-
caughtUp(): Promise<void>;
|
|
97
|
-
search(plan: SearchPlan, documents: readonly {
|
|
98
|
-
room: string;
|
|
99
|
-
path: string;
|
|
100
|
-
}[] | null, conversations: readonly string[], rooms: ReadonlySet<string> | null, selections: ReadonlyMap<string, readonly string[]> | null): SearchWindow;
|
|
19
|
+
rooms: readonly string[] | null;
|
|
101
20
|
};
|
|
102
21
|
export declare function searchPlanOf(input: unknown): SearchPlan;
|
|
103
|
-
export declare function createSearchIndex(source: SearchSource): SearchIndex;
|
|
104
|
-
export {};
|
|
105
22
|
//# sourceMappingURL=search.d.ts.map
|
package/dist/search.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAExE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,SAAS,SAAS,EAAE,CAAA;CAAE,CAAC;AAE7E,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,OAAO,GACP,CAAC,eAAe,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,GACxC,CAAC,eAAe,GAAG;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC,GAC1C,OAAO,CAAC;AAEZ,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;CAAE,CAAC;AAE3E,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAYvD"}
|
package/dist/search.js
CHANGED
|
@@ -1,353 +1,14 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { indexGeneration } from './identity.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';
|
|
7
|
-
export function undeclaredSearch() {
|
|
8
|
-
return {
|
|
9
|
-
kind: 'undeclared',
|
|
10
|
-
code: 'search-undeclared',
|
|
11
|
-
fields: { name: 'local_search' },
|
|
12
|
-
retryable: false,
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
const FIELDS = ['fields', 'sections', 'preamble', 'path', 'text'];
|
|
16
|
-
const VACUUM_CONDITIONS = { minDirtCount: 20, minDirtFactor: 0.1 };
|
|
17
|
-
const CHANGED_BATCH = 256;
|
|
18
|
-
function documentId(room, path) {
|
|
19
|
-
return JSON.stringify(['document', room, path]);
|
|
20
|
-
}
|
|
21
|
-
function messageId(conversation, identity) {
|
|
22
|
-
return JSON.stringify(['message', conversation, identity]);
|
|
23
|
-
}
|
|
24
|
-
function scalars(value) {
|
|
25
|
-
if (value === null || value === undefined)
|
|
26
|
-
return [];
|
|
27
|
-
if (Array.isArray(value))
|
|
28
|
-
return value.flatMap(scalars);
|
|
29
|
-
if (typeof value === 'object')
|
|
30
|
-
return Object.values(value).flatMap(scalars);
|
|
31
|
-
return [String(value)];
|
|
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
|
-
}
|
|
1
|
+
import { invalid, known, plain } from '@agentshouse/mdmodel';
|
|
59
2
|
export function searchPlanOf(input) {
|
|
60
3
|
if (!plain(input))
|
|
61
4
|
invalid('search', 'expects a search object');
|
|
62
|
-
known(input, ['text', '
|
|
63
|
-
if (typeof input.text !== 'string')
|
|
64
|
-
invalid('text', 'expects
|
|
65
|
-
const
|
|
66
|
-
if (
|
|
67
|
-
(!Array.isArray(
|
|
68
|
-
invalid('
|
|
69
|
-
}
|
|
70
|
-
return {
|
|
71
|
-
text: input.text,
|
|
72
|
-
documents: input.documents,
|
|
73
|
-
collection: flag(input.collection, 'collection'),
|
|
74
|
-
conversations: conversations ?? null,
|
|
75
|
-
limit: limitOf(input.limit),
|
|
76
|
-
after: searchAfter(input.after),
|
|
77
|
-
total: flag(input.total, 'total'),
|
|
78
|
-
};
|
|
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
|
-
}
|
|
101
|
-
export function createSearchIndex(source) {
|
|
102
|
-
const generation = indexGeneration();
|
|
103
|
-
const index = new MiniSearch({ fields: FIELDS, autoVacuum: false });
|
|
104
|
-
const documents = new Map();
|
|
105
|
-
const messages = new Map();
|
|
106
|
-
const rooms = new Set();
|
|
107
|
-
const filling = new Set();
|
|
108
|
-
const conversations = new Set();
|
|
109
|
-
const acquiring = new Set();
|
|
110
|
-
const changedDocuments = new Map();
|
|
111
|
-
const refilling = new Set();
|
|
112
|
-
const arrived = new Map();
|
|
113
|
-
let vacuuming = null;
|
|
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
|
-
}
|
|
121
|
-
function addDocument(document) {
|
|
122
|
-
const id = documentId(document.room, document.path);
|
|
123
|
-
discard(id, documents);
|
|
124
|
-
added({
|
|
125
|
-
id,
|
|
126
|
-
fields: scalars(document.fields).join('\n'),
|
|
127
|
-
sections: Object.entries(document.sections)
|
|
128
|
-
.map(([heading, text]) => `${heading}\n${text}`)
|
|
129
|
-
.join('\n'),
|
|
130
|
-
preamble: document.preamble,
|
|
131
|
-
path: document.path,
|
|
132
|
-
});
|
|
133
|
-
documents.set(id, { room: document.room, path: document.path, type: document.type });
|
|
134
|
-
}
|
|
135
|
-
function addMessage(message) {
|
|
136
|
-
const id = messageId(message.conversation, message.identity);
|
|
137
|
-
discard(id, messages);
|
|
138
|
-
added({ id, text: message.text });
|
|
139
|
-
messages.set(id, { conversation: message.conversation, identity: message.identity });
|
|
140
|
-
}
|
|
141
|
-
function discard(id, entries) {
|
|
142
|
-
if (!entries.delete(id) || arrived.delete(id))
|
|
143
|
-
return;
|
|
144
|
-
index.discard(id);
|
|
145
|
-
vacuum();
|
|
146
|
-
}
|
|
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() {
|
|
170
|
-
for (;;) {
|
|
171
|
-
const next = arrived.keys().next();
|
|
172
|
-
if (next.done === true)
|
|
173
|
-
return;
|
|
174
|
-
yield next.value;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
async function vacuumed() {
|
|
178
|
-
while (vacuuming !== null)
|
|
179
|
-
await vacuuming;
|
|
180
|
-
}
|
|
181
|
-
async function paused() {
|
|
182
|
-
await yielded();
|
|
183
|
-
await vacuumed();
|
|
184
|
-
}
|
|
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
|
-
}
|
|
225
|
-
function caughtUp() {
|
|
226
|
-
if (catching !== null)
|
|
227
|
-
return catching;
|
|
228
|
-
if (changedDocuments.size === 0 && refilling.size === 0 && vacuuming === null) {
|
|
229
|
-
return Promise.resolve();
|
|
230
|
-
}
|
|
231
|
-
catching = catchUp().finally(() => {
|
|
232
|
-
catching = null;
|
|
233
|
-
});
|
|
234
|
-
return catching;
|
|
235
|
-
}
|
|
236
|
-
function ranked(text, entries, keep, tie) {
|
|
237
|
-
const found = index.search(text, {
|
|
238
|
-
filter: ({ id }) => {
|
|
239
|
-
const entry = entries.get(id);
|
|
240
|
-
return entry !== undefined && keep(entry, id);
|
|
241
|
-
},
|
|
242
|
-
});
|
|
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 }) => ({
|
|
246
|
-
...entries.get(id),
|
|
247
|
-
score,
|
|
248
|
-
match,
|
|
249
|
-
}));
|
|
250
|
-
}
|
|
251
|
-
return {
|
|
252
|
-
generation: () => generation,
|
|
253
|
-
rooms: () => rooms,
|
|
254
|
-
conversations: () => conversations,
|
|
255
|
-
async indexRoom(room) {
|
|
256
|
-
if (rooms.has(room) || filling.has(room))
|
|
257
|
-
return;
|
|
258
|
-
filling.add(room);
|
|
259
|
-
try {
|
|
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
|
-
}
|
|
267
|
-
if (filling.has(room))
|
|
268
|
-
rooms.add(room);
|
|
269
|
-
}
|
|
270
|
-
finally {
|
|
271
|
-
filling.delete(room);
|
|
272
|
-
}
|
|
273
|
-
},
|
|
274
|
-
indexMessages(conversation, arriving, whole) {
|
|
275
|
-
for (const message of arriving)
|
|
276
|
-
addMessage(message);
|
|
277
|
-
if (!whole) {
|
|
278
|
-
acquiring.add(conversation);
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
281
|
-
acquiring.delete(conversation);
|
|
282
|
-
conversations.add(conversation);
|
|
283
|
-
},
|
|
284
|
-
forget(leaving) {
|
|
285
|
-
const gone = new Set(leaving);
|
|
286
|
-
for (const [id, entry] of documents)
|
|
287
|
-
if (gone.has(entry.room))
|
|
288
|
-
discard(id, documents);
|
|
289
|
-
for (const room of leaving) {
|
|
290
|
-
rooms.delete(room);
|
|
291
|
-
filling.delete(room);
|
|
292
|
-
refilling.delete(room);
|
|
293
|
-
}
|
|
294
|
-
},
|
|
295
|
-
changed(set) {
|
|
296
|
-
changes += 1;
|
|
297
|
-
for (const { locator, path } of set.documents) {
|
|
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;
|
|
307
|
-
}
|
|
308
|
-
changedDocuments.set(documentId(locator, path), { room: locator, path });
|
|
309
|
-
}
|
|
310
|
-
for (const { conversation, identity, text } of set.messages) {
|
|
311
|
-
if (!conversations.has(conversation) && !acquiring.has(conversation))
|
|
312
|
-
continue;
|
|
313
|
-
const id = messageId(conversation, identity);
|
|
314
|
-
if (text === null)
|
|
315
|
-
discard(id, messages);
|
|
316
|
-
else
|
|
317
|
-
addMessage({ conversation, identity, text });
|
|
318
|
-
}
|
|
319
|
-
},
|
|
320
|
-
changes: () => changes,
|
|
321
|
-
caughtUp,
|
|
322
|
-
search({ text, limit, after, total }, selected, named, within, selections) {
|
|
323
|
-
const chosen = selected === null
|
|
324
|
-
? null
|
|
325
|
-
: new Set(selected.map(({ room, path }) => documentId(room, path)));
|
|
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;
|
|
337
|
-
return {
|
|
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
|
-
: {}),
|
|
350
|
-
};
|
|
351
|
-
},
|
|
352
|
-
};
|
|
5
|
+
known(input, ['text', 'rooms'], '');
|
|
6
|
+
if (typeof input.text !== 'string' || input.text.trim() === '')
|
|
7
|
+
invalid('text', 'expects words');
|
|
8
|
+
const rooms = input.rooms;
|
|
9
|
+
if (rooms !== undefined &&
|
|
10
|
+
(!Array.isArray(rooms) || rooms.some((named) => typeof named !== 'string'))) {
|
|
11
|
+
invalid('rooms', 'expects a list of Rooms');
|
|
12
|
+
}
|
|
13
|
+
return { text: input.text, rooms: rooms ?? null };
|
|
353
14
|
}
|
package/dist/shared.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export type Paths<V> = Readonly<Record<string, V>>;
|
|
2
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
3
|
export declare function sortedKeys(map: Paths<unknown>): Generator<number, readonly string[], void>;
|
|
5
4
|
export declare function sorting(keys: Iterable<string>): Generator<number, readonly string[], void>;
|
|
6
5
|
export declare function sharing<V>(map: Paths<V>): Generator<number, Paths<V>, void>;
|
package/dist/shared.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AA+LnD,wBAAiB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAO5E;
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AA+LnD,wBAAiB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAO5E;AAuCD,wBAAiB,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,CAAC,CAE3F;AAED,wBAAiB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,CAAC,CAoB3F;AAED,wBAAiB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAE5E;AAED,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,CAEV;AAED,wBAAiB,QAAQ,CAAC,CAAC,EACzB,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,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAoBnC;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAE/C;AA8CD,wBAAiB,WAAW,CAAC,CAAC,EAC5B,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,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAkB9C;AAED,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,CAErB;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,CAE7D;AAED,wBAAiB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAUxF"}
|
package/dist/shared.js
CHANGED
|
@@ -202,16 +202,6 @@ function* rooted(map) {
|
|
|
202
202
|
}
|
|
203
203
|
return { node, size };
|
|
204
204
|
}
|
|
205
|
-
export function* keysIn(...maps) {
|
|
206
|
-
const keys = new Set();
|
|
207
|
-
for (const map of maps) {
|
|
208
|
-
for (const [key] of entriesIn(map)) {
|
|
209
|
-
keys.add(key);
|
|
210
|
-
yield ROW_WEIGHT;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
return keys;
|
|
214
|
-
}
|
|
215
205
|
const RUN = 1 << 10;
|
|
216
206
|
function* merged(left, right) {
|
|
217
207
|
const into = [];
|
package/dist/status.d.ts
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import type { Open } from './open.js';
|
|
2
|
-
import type { ProviderRefusal } from './adapter.js';
|
|
3
2
|
import type { ReturnReason } from './room-draft.js';
|
|
4
3
|
export type AttentionEntry = {
|
|
5
4
|
room: string;
|
|
6
5
|
path: string;
|
|
7
6
|
returned: ReturnReason;
|
|
8
|
-
}
|
|
7
|
+
};
|
|
8
|
+
export type UnsentChange = {
|
|
9
9
|
room: string;
|
|
10
|
-
|
|
10
|
+
path: string;
|
|
11
11
|
};
|
|
12
12
|
export type SyncStatus = {
|
|
13
13
|
state: Open<'pending' | 'syncing' | 'synced'>;
|
|
14
14
|
lastCompleted: string | null;
|
|
15
15
|
providerUnreachable: boolean;
|
|
16
16
|
attentionRequired: readonly AttentionEntry[];
|
|
17
|
+
unsent: readonly UnsentChange[];
|
|
17
18
|
reset: string | null;
|
|
18
19
|
};
|
|
19
20
|
export type CycleProgress = {
|
package/dist/status.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,CAAC;AAEpF,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;IAC9C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,EAAE,SAAS,cAAc,EAAE,CAAC;IAC7C,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IAChC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,UAOtB,CAAC;AAEF,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAE3D;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAErD;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAShE"}
|
package/dist/status.js
CHANGED
|
@@ -3,6 +3,7 @@ export const STARTING = {
|
|
|
3
3
|
lastCompleted: null,
|
|
4
4
|
providerUnreachable: false,
|
|
5
5
|
attentionRequired: [],
|
|
6
|
+
unsent: [],
|
|
6
7
|
reset: null,
|
|
7
8
|
};
|
|
8
9
|
export function transferring(status) {
|
|
@@ -16,5 +17,6 @@ export function same(one, other) {
|
|
|
16
17
|
one.lastCompleted === other.lastCompleted &&
|
|
17
18
|
one.providerUnreachable === other.providerUnreachable &&
|
|
18
19
|
one.reset === other.reset &&
|
|
19
|
-
JSON.stringify(one.attentionRequired) === JSON.stringify(other.attentionRequired)
|
|
20
|
+
JSON.stringify(one.attentionRequired) === JSON.stringify(other.attentionRequired) &&
|
|
21
|
+
JSON.stringify(one.unsent) === JSON.stringify(other.unsent));
|
|
20
22
|
}
|