@agentshouse/mdruntime 0.1.0-c8e110144a30a → 0.1.0-c8f07dbee1c62
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 +19 -16
- package/dist/acceptance.d.ts +6 -0
- package/dist/acceptance.d.ts.map +1 -0
- package/dist/acceptance.js +389 -0
- package/dist/actions.d.ts +20 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +250 -0
- package/dist/adapter.d.ts +154 -57
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +7 -10
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +40 -41
- package/dist/attempt.d.ts.map +1 -1
- package/dist/attempt.js +14 -1
- 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 +31 -11
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +323 -89
- package/dist/cell.d.ts +6 -0
- package/dist/cell.d.ts.map +1 -0
- package/dist/cell.js +9 -0
- package/dist/chain.d.ts +12 -0
- package/dist/chain.d.ts.map +1 -0
- package/dist/chain.js +64 -0
- package/dist/change-set.d.ts +9 -14
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +11 -63
- package/dist/change.d.ts +32 -1
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +10 -1
- package/dist/chat-types.d.ts +5 -0
- package/dist/chat-types.d.ts.map +1 -0
- package/dist/chat-types.js +13 -0
- package/dist/client.d.ts +43 -16
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +101 -12
- package/dist/collection.d.ts +11 -7
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +38 -79
- package/dist/compile.d.ts +16 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +717 -0
- package/dist/connection.d.ts +8 -116
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +101 -2410
- 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-row.d.ts +33 -0
- package/dist/conversation-row.d.ts.map +1 -0
- package/dist/conversation-row.js +53 -0
- package/dist/conversation.d.ts +52 -20
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +900 -303
- package/dist/digest.d.ts +7 -0
- package/dist/digest.d.ts.map +1 -0
- package/dist/digest.js +113 -0
- package/dist/discovery.d.ts +10 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +175 -0
- package/dist/durability.d.ts +19 -1
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +5 -0
- package/dist/entry.d.ts +20 -0
- package/dist/entry.d.ts.map +1 -0
- package/dist/entry.js +161 -0
- package/dist/figures.d.ts +48 -0
- package/dist/figures.d.ts.map +1 -0
- package/dist/figures.js +197 -0
- package/dist/file.d.ts +2 -19
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +7 -122
- package/dist/holdings.d.ts +29 -0
- package/dist/holdings.d.ts.map +1 -0
- package/dist/holdings.js +95 -0
- package/dist/host.d.ts +11 -2
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +128 -18
- package/dist/index.d.ts +32 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/install.d.ts +56 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +560 -0
- package/dist/job.d.ts +33 -0
- package/dist/job.d.ts.map +1 -0
- package/dist/job.js +54 -0
- package/dist/lifecycle.d.ts +7 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +267 -0
- package/dist/listing.d.ts +53 -0
- package/dist/listing.d.ts.map +1 -0
- package/dist/listing.js +175 -0
- package/dist/live.d.ts +23 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/live.js +165 -0
- package/dist/locks.d.ts +9 -0
- package/dist/locks.d.ts.map +1 -0
- package/dist/locks.js +61 -0
- package/dist/log.d.ts +1 -0
- package/dist/log.d.ts.map +1 -1
- package/dist/lost.d.ts +5 -0
- package/dist/lost.d.ts.map +1 -0
- package/dist/lost.js +61 -0
- 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 +19 -5
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +253 -94
- package/dist/messages.d.ts +52 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +168 -0
- package/dist/model.d.ts +11 -11
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +7 -10
- package/dist/models.d.ts +14 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +193 -0
- package/dist/name.d.ts +4 -0
- package/dist/name.d.ts.map +1 -0
- package/dist/name.js +122 -0
- package/dist/observation.d.ts +22 -4
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +120 -14
- package/dist/opened.d.ts +22 -0
- package/dist/opened.d.ts.map +1 -0
- package/dist/opened.js +107 -0
- package/dist/opening.d.ts +4 -0
- package/dist/opening.d.ts.map +1 -0
- package/dist/opening.js +56 -0
- package/dist/outcome.d.ts +53 -8
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +43 -0
- package/dist/overlay.d.ts +4 -4
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +111 -182
- package/dist/{chat/parts.d.ts → parts.d.ts} +11 -9
- package/dist/parts.d.ts.map +1 -0
- package/dist/{chat/parts.js → parts.js} +45 -46
- package/dist/paths.d.ts +1 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +4 -0
- package/dist/preparation.d.ts +20 -0
- package/dist/preparation.d.ts.map +1 -0
- package/dist/preparation.js +226 -0
- package/dist/queries.d.ts +16 -0
- package/dist/queries.d.ts.map +1 -0
- package/dist/queries.js +272 -0
- package/dist/query.d.ts +50 -183
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +3 -464
- package/dist/{chat/questions.d.ts → questions.d.ts} +5 -2
- package/dist/questions.d.ts.map +1 -0
- package/dist/{chat/questions.js → questions.js} +12 -1
- package/dist/reach.d.ts +21 -7
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +289 -89
- package/dist/react.d.ts +16 -6
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +7 -17
- package/dist/{chat/read.d.ts → read.d.ts} +2 -0
- package/dist/read.d.ts.map +1 -0
- package/dist/{chat/read.js → read.js} +4 -0
- package/dist/readiness.d.ts +50 -0
- package/dist/readiness.d.ts.map +1 -0
- package/dist/readiness.js +27 -0
- package/dist/reads.d.ts +36 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +150 -0
- package/dist/recovery.d.ts +26 -0
- package/dist/recovery.d.ts.map +1 -0
- package/dist/recovery.js +232 -0
- package/dist/refresh.d.ts +17 -14
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +143 -51
- package/dist/refusal.d.ts +5 -0
- package/dist/refusal.d.ts.map +1 -0
- package/dist/refusal.js +56 -0
- package/dist/replica.d.ts +55 -33
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +333 -154
- package/dist/room-draft.d.ts +37 -6
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +161 -74
- package/dist/room-drafts.d.ts +24 -0
- package/dist/room-drafts.d.ts.map +1 -0
- package/dist/room-drafts.js +216 -0
- package/dist/rows.d.ts +30 -37
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +59 -126
- package/dist/runtime.d.ts +42 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +1 -0
- package/dist/save.d.ts +52 -9
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +544 -173
- package/dist/saves.d.ts +70 -0
- package/dist/saves.d.ts.map +1 -0
- package/dist/saves.js +1004 -0
- package/dist/search.d.ts +15 -55
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +10 -121
- package/dist/seed.d.ts +25 -0
- package/dist/seed.d.ts.map +1 -0
- package/dist/seed.js +146 -0
- package/dist/shared.d.ts +15 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +425 -0
- package/dist/shown.d.ts +31 -0
- package/dist/shown.d.ts.map +1 -0
- package/dist/shown.js +294 -0
- package/dist/socket/admission.d.ts +7 -0
- package/dist/socket/admission.d.ts.map +1 -0
- package/dist/socket/admission.js +39 -0
- package/dist/socket/answers.d.ts +6 -0
- package/dist/socket/answers.d.ts.map +1 -0
- package/dist/socket/answers.js +20 -0
- package/dist/socket/lanes.d.ts +20 -0
- package/dist/socket/lanes.d.ts.map +1 -0
- package/dist/socket/lanes.js +77 -0
- package/dist/socket/reads.d.ts +10 -0
- package/dist/socket/reads.d.ts.map +1 -0
- package/dist/socket/reads.js +31 -0
- package/dist/socket/rooms.d.ts +43 -0
- package/dist/socket/rooms.d.ts.map +1 -0
- package/dist/socket/rooms.js +90 -0
- package/dist/socket/session.d.ts +39 -0
- package/dist/socket/session.d.ts.map +1 -0
- package/dist/socket/session.js +23 -0
- package/dist/socket.d.ts +70 -0
- package/dist/socket.d.ts.map +1 -0
- package/dist/socket.js +175 -0
- package/dist/source.d.ts +61 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +81 -0
- package/dist/status.d.ts +5 -2
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +3 -7
- package/dist/store/fences.d.ts +16 -0
- package/dist/store/fences.d.ts.map +1 -0
- package/dist/store/fences.js +26 -0
- package/dist/store/installs.d.ts +30 -0
- package/dist/store/installs.d.ts.map +1 -0
- package/dist/store/installs.js +34 -0
- package/dist/store/readiness.d.ts +10 -0
- package/dist/store/readiness.d.ts.map +1 -0
- package/dist/store/readiness.js +52 -0
- package/dist/store/records.d.ts +212 -0
- package/dist/store/records.d.ts.map +1 -0
- package/dist/store/records.js +408 -0
- package/dist/store/room-held.d.ts +8 -0
- package/dist/store/room-held.d.ts.map +1 -0
- package/dist/store/room-held.js +17 -0
- package/dist/store/space.d.ts +11 -0
- package/dist/store/space.d.ts.map +1 -0
- package/dist/store/space.js +43 -0
- package/dist/store/watchers.d.ts +17 -0
- package/dist/store/watchers.d.ts.map +1 -0
- package/dist/store/watchers.js +57 -0
- package/dist/store/writes.d.ts +24 -0
- package/dist/store/writes.d.ts.map +1 -0
- package/dist/store/writes.js +125 -0
- package/dist/store.d.ts +106 -119
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +136 -525
- package/dist/stored.d.ts +156 -0
- package/dist/stored.d.ts.map +1 -0
- package/dist/stored.js +637 -0
- package/dist/surface.d.ts +88 -0
- package/dist/surface.d.ts.map +1 -0
- package/dist/surface.js +222 -0
- package/dist/sync.d.ts +20 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +531 -0
- package/dist/tables.d.ts +415 -0
- package/dist/tables.d.ts.map +1 -0
- package/dist/tables.js +740 -0
- package/dist/tallies.d.ts +18 -0
- package/dist/tallies.d.ts.map +1 -0
- package/dist/tallies.js +129 -0
- package/dist/transfer.d.ts +0 -5
- package/dist/transfer.d.ts.map +1 -1
- package/dist/turn.d.ts +9 -0
- package/dist/turn.d.ts.map +1 -0
- package/dist/turn.js +75 -0
- package/dist/validation.d.ts +29 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +104 -0
- package/dist/windows.d.ts +11 -0
- package/dist/windows.d.ts.map +1 -0
- package/dist/windows.js +16 -0
- package/dist/wire.d.ts +181 -33
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +62 -31
- package/package.json +22 -19
- package/AGENTS.md +0 -299
- package/dist/chat/acts.d.ts +0 -34
- 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/input.d.ts +0 -9
- package/dist/chat/input.d.ts.map +0 -1
- package/dist/chat/input.js +0 -99
- package/dist/chat/kit.d.ts +0 -60
- 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 -20
- package/dist/chat/list.d.ts.map +0 -1
- package/dist/chat/list.js +0 -59
- package/dist/chat/markdown.d.ts +0 -19
- package/dist/chat/markdown.d.ts.map +0 -1
- package/dist/chat/markdown.js +0 -187
- package/dist/chat/message.d.ts +0 -6
- package/dist/chat/message.d.ts.map +0 -1
- package/dist/chat/message.js +0 -192
- package/dist/chat/messages.d.ts +0 -21
- package/dist/chat/messages.d.ts.map +0 -1
- package/dist/chat/messages.js +0 -151
- package/dist/chat/name.d.ts +0 -6
- package/dist/chat/name.d.ts.map +0 -1
- package/dist/chat/name.js +0 -37
- package/dist/chat/opened.d.ts +0 -11
- package/dist/chat/opened.d.ts.map +0 -1
- package/dist/chat/opened.js +0 -17
- package/dist/chat/overlay.d.ts +0 -31
- package/dist/chat/overlay.d.ts.map +0 -1
- package/dist/chat/overlay.js +0 -97
- package/dist/chat/parts.d.ts.map +0 -1
- 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 -63
- package/dist/chat/provider.d.ts.map +0 -1
- package/dist/chat/provider.js +0 -645
- package/dist/chat/question.d.ts +0 -9
- package/dist/chat/question.d.ts.map +0 -1
- package/dist/chat/question.js +0 -80
- package/dist/chat/questions.d.ts.map +0 -1
- package/dist/chat/read.d.ts.map +0 -1
- package/dist/chat/ready.d.ts +0 -33
- package/dist/chat/ready.d.ts.map +0 -1
- package/dist/chat/ready.js +0 -91
- package/dist/chat/style.d.ts +0 -4
- package/dist/chat/style.d.ts.map +0 -1
- package/dist/chat/style.js +0 -302
- package/dist/chat.d.ts +0 -14
- package/dist/chat.d.ts.map +0 -1
- package/dist/chat.js +0 -8
- package/dist/read-side.d.ts +0 -18
- package/dist/read-side.d.ts.map +0 -1
- package/dist/read-side.js +0 -440
package/dist/search.d.ts
CHANGED
|
@@ -1,62 +1,22 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import {
|
|
3
|
-
import type { Open } from './open.js';
|
|
4
|
-
export type DocumentPart = Open<'fields' | 'sections' | 'preamble' | 'path'>;
|
|
1
|
+
import type { ProviderRefusal, SearchHit } from './adapter.js';
|
|
2
|
+
import type { Failure, Offline } from './outcome.js';
|
|
5
3
|
export type SearchRequest = {
|
|
6
4
|
text: string;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
conversation: string;
|
|
20
|
-
identity: string;
|
|
21
|
-
score: number;
|
|
22
|
-
matches: Readonly<Record<string, readonly Open<'text'>[]>>;
|
|
23
|
-
};
|
|
24
|
-
export type SearchResult = {
|
|
25
|
-
documents: readonly DocumentHit[];
|
|
26
|
-
messages: readonly MessageHit[];
|
|
27
|
-
};
|
|
28
|
-
export type SearchedDocument = {
|
|
29
|
-
room: string;
|
|
30
|
-
path: string;
|
|
31
|
-
type: string;
|
|
32
|
-
fields: Readonly<Record<string, unknown>>;
|
|
33
|
-
preamble: string;
|
|
34
|
-
sections: Readonly<Record<string, string>>;
|
|
35
|
-
};
|
|
36
|
-
export type SearchedMessage = {
|
|
37
|
-
conversation: string;
|
|
38
|
-
identity: string;
|
|
39
|
-
text: string;
|
|
40
|
-
};
|
|
41
|
-
export type SearchSource = {
|
|
42
|
-
documents(): readonly SearchedDocument[];
|
|
43
|
-
document(room: string, path: string): SearchedDocument | null;
|
|
44
|
-
messages(): readonly SearchedMessage[];
|
|
45
|
-
message(conversation: string, identity: string): SearchedMessage | null;
|
|
46
|
-
};
|
|
5
|
+
rooms?: readonly string[];
|
|
6
|
+
};
|
|
7
|
+
export type { SearchHit } from './adapter.js';
|
|
8
|
+
export type SearchFound = {
|
|
9
|
+
kind: 'found';
|
|
10
|
+
documents: readonly SearchHit[];
|
|
11
|
+
};
|
|
12
|
+
export type SearchResult = SearchFound | Offline | (ProviderRefusal & {
|
|
13
|
+
kind: 'rejected';
|
|
14
|
+
}) | (ProviderRefusal & {
|
|
15
|
+
kind: 'undeclared';
|
|
16
|
+
}) | Failure;
|
|
47
17
|
export type SearchPlan = {
|
|
48
18
|
text: string;
|
|
49
|
-
|
|
50
|
-
conversations: readonly string[] | null;
|
|
51
|
-
limit: number | null;
|
|
52
|
-
};
|
|
53
|
-
export type SearchIndex = {
|
|
54
|
-
changed(set: ChangeSet): void;
|
|
55
|
-
search(plan: SearchPlan, documents: readonly {
|
|
56
|
-
room: string;
|
|
57
|
-
path: string;
|
|
58
|
-
}[] | null): SearchResult;
|
|
19
|
+
rooms: readonly string[] | null;
|
|
59
20
|
};
|
|
60
21
|
export declare function searchPlanOf(input: unknown): SearchPlan;
|
|
61
|
-
export declare function createSearchIndex(source: SearchSource): SearchIndex;
|
|
62
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,SAAS,EAAE,MAAM,
|
|
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,125 +1,14 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { invalid, known, limitOf, plain } from './query.js';
|
|
3
|
-
const FIELDS = ['fields', 'sections', 'preamble', 'path', 'text'];
|
|
4
|
-
function documentId(room, path) {
|
|
5
|
-
return JSON.stringify(['document', room, path]);
|
|
6
|
-
}
|
|
7
|
-
function messageId(conversation, identity) {
|
|
8
|
-
return JSON.stringify(['message', conversation, identity]);
|
|
9
|
-
}
|
|
10
|
-
function scalars(value) {
|
|
11
|
-
if (value === null || value === undefined)
|
|
12
|
-
return [];
|
|
13
|
-
if (Array.isArray(value))
|
|
14
|
-
return value.flatMap(scalars);
|
|
15
|
-
if (typeof value === 'object')
|
|
16
|
-
return Object.values(value).flatMap(scalars);
|
|
17
|
-
return [String(value)];
|
|
18
|
-
}
|
|
1
|
+
import { invalid, known, plain } from '@agentshouse/mdmodel';
|
|
19
2
|
export function searchPlanOf(input) {
|
|
20
3
|
if (!plain(input))
|
|
21
4
|
invalid('search', 'expects a search object');
|
|
22
|
-
known(input, ['text', '
|
|
23
|
-
if (typeof input.text !== 'string')
|
|
24
|
-
invalid('text', 'expects
|
|
25
|
-
const
|
|
26
|
-
if (
|
|
27
|
-
(!Array.isArray(
|
|
28
|
-
invalid('
|
|
29
|
-
}
|
|
30
|
-
return {
|
|
31
|
-
text: input.text,
|
|
32
|
-
documents: input.documents,
|
|
33
|
-
conversations: conversations ?? null,
|
|
34
|
-
limit: limitOf(input.limit),
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
export function createSearchIndex(source) {
|
|
38
|
-
let index = null;
|
|
39
|
-
const documents = new Map();
|
|
40
|
-
const messages = new Map();
|
|
41
|
-
const changedDocuments = new Map();
|
|
42
|
-
const changedMessages = new Map();
|
|
43
|
-
function addDocument(built, document) {
|
|
44
|
-
const id = documentId(document.room, document.path);
|
|
45
|
-
documents.set(id, { room: document.room, path: document.path, type: document.type });
|
|
46
|
-
built.add({
|
|
47
|
-
id,
|
|
48
|
-
fields: scalars(document.fields).join('\n'),
|
|
49
|
-
sections: Object.entries(document.sections)
|
|
50
|
-
.map(([heading, text]) => `${heading}\n${text}`)
|
|
51
|
-
.join('\n'),
|
|
52
|
-
preamble: document.preamble,
|
|
53
|
-
path: document.path,
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
function addMessage(built, message) {
|
|
57
|
-
const id = messageId(message.conversation, message.identity);
|
|
58
|
-
messages.set(id, { conversation: message.conversation, identity: message.identity });
|
|
59
|
-
built.add({ id, text: message.text });
|
|
60
|
-
}
|
|
61
|
-
function current() {
|
|
62
|
-
if (index === null) {
|
|
63
|
-
const built = new MiniSearch({ fields: FIELDS });
|
|
64
|
-
for (const document of source.documents())
|
|
65
|
-
addDocument(built, document);
|
|
66
|
-
for (const message of source.messages())
|
|
67
|
-
addMessage(built, message);
|
|
68
|
-
index = built;
|
|
69
|
-
return built;
|
|
70
|
-
}
|
|
71
|
-
const built = index;
|
|
72
|
-
for (const [id, { room, path }] of changedDocuments) {
|
|
73
|
-
if (documents.delete(id))
|
|
74
|
-
built.discard(id);
|
|
75
|
-
const document = source.document(room, path);
|
|
76
|
-
if (document !== null)
|
|
77
|
-
addDocument(built, document);
|
|
78
|
-
}
|
|
79
|
-
changedDocuments.clear();
|
|
80
|
-
for (const [id, { conversation, identity }] of changedMessages) {
|
|
81
|
-
if (messages.delete(id))
|
|
82
|
-
built.discard(id);
|
|
83
|
-
const message = source.message(conversation, identity);
|
|
84
|
-
if (message !== null)
|
|
85
|
-
addMessage(built, message);
|
|
86
|
-
}
|
|
87
|
-
changedMessages.clear();
|
|
88
|
-
return built;
|
|
89
|
-
}
|
|
90
|
-
function ranked(built, text, entries, keep, limit) {
|
|
91
|
-
const found = built.search(text, {
|
|
92
|
-
filter: ({ id }) => {
|
|
93
|
-
const entry = entries.get(id);
|
|
94
|
-
return entry !== undefined && keep(entry, id);
|
|
95
|
-
},
|
|
96
|
-
});
|
|
97
|
-
return (limit === null ? found : found.slice(0, limit)).map(({ id, score, match }) => ({
|
|
98
|
-
...entries.get(id),
|
|
99
|
-
score,
|
|
100
|
-
match,
|
|
101
|
-
}));
|
|
102
|
-
}
|
|
103
|
-
return {
|
|
104
|
-
changed(set) {
|
|
105
|
-
if (index === null)
|
|
106
|
-
return;
|
|
107
|
-
for (const { locator, path } of set.documents) {
|
|
108
|
-
changedDocuments.set(documentId(locator, path), { room: locator, path });
|
|
109
|
-
}
|
|
110
|
-
for (const { conversation, identity } of set.messages) {
|
|
111
|
-
changedMessages.set(messageId(conversation, identity), { conversation, identity });
|
|
112
|
-
}
|
|
113
|
-
},
|
|
114
|
-
search({ text, conversations, limit }, selected) {
|
|
115
|
-
const built = current();
|
|
116
|
-
const chosen = selected === null
|
|
117
|
-
? null
|
|
118
|
-
: new Set(selected.map(({ room, path }) => documentId(room, path)));
|
|
119
|
-
return {
|
|
120
|
-
documents: ranked(built, text, documents, (_entry, id) => chosen === null || chosen.has(id), limit).map(({ match, ...hit }) => ({ ...hit, matches: match })),
|
|
121
|
-
messages: ranked(built, text, messages, ({ conversation }) => conversations === null || conversations.includes(conversation), limit).map(({ match, ...hit }) => ({ ...hit, matches: match })),
|
|
122
|
-
};
|
|
123
|
-
},
|
|
124
|
-
};
|
|
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 };
|
|
125
14
|
}
|
package/dist/seed.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Cover } from './live.js';
|
|
2
|
+
import { type KeyedResult } from './observation.js';
|
|
3
|
+
import type { Plan, QueryRows } from './query.js';
|
|
4
|
+
import type { Deliver } from './reach.js';
|
|
5
|
+
import type { Runtime } from './runtime.js';
|
|
6
|
+
import type { HeldCover, Store } from './store.js';
|
|
7
|
+
export type EntrySeed = {
|
|
8
|
+
readonly at: Readonly<Record<string, string>>;
|
|
9
|
+
readonly queries: readonly {
|
|
10
|
+
readonly query: unknown;
|
|
11
|
+
readonly rows: QueryRows;
|
|
12
|
+
}[];
|
|
13
|
+
};
|
|
14
|
+
export type Seeded = {
|
|
15
|
+
readonly rows: QueryRows;
|
|
16
|
+
readonly at: Readonly<Record<string, string>>;
|
|
17
|
+
};
|
|
18
|
+
type SeededWatch = (coverOf: (cover: Cover, held: HeldCover) => Cover, deliver: (message: unknown) => void) => () => void;
|
|
19
|
+
export declare function entrySeedOf(value: unknown): EntrySeed | null;
|
|
20
|
+
export declare function seededResult(seed: Seeded): KeyedResult;
|
|
21
|
+
export declare function seedApplies(runtime: Runtime, plan: Plan, held: HeldCover): Seeded | null;
|
|
22
|
+
export declare function keepEntrySeed(store: Store, entry: EntrySeed): void;
|
|
23
|
+
export declare function watchSeeded(runtime: Runtime, plan: Plan, deliver: Deliver, watch: SeededWatch): () => void;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=seed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../src/seed.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAS,KAAK,WAAW,EAAqB,MAAM,kBAAkB,CAAC;AAC9E,OAAO,KAAK,EAAE,IAAI,EAA4C,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnD,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;AAEjG,KAAK,WAAW,GAAG,CACjB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,KAAK,KAAK,EACjD,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,KAChC,MAAM,IAAI,CAAC;AA0ChB,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAe5D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAoBtD;AA+BD,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAOxF;AAYD,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAMlE;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,GACjB,MAAM,IAAI,CA4BZ"}
|
package/dist/seed.js
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { queryKey } from '@agentshouse/mdmodel';
|
|
2
|
+
import { whole } from './observation.js';
|
|
3
|
+
import { documentKey } from './rows.js';
|
|
4
|
+
const seedTopic = (key) => `seed\u0000${key}`;
|
|
5
|
+
function plain(value) {
|
|
6
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
7
|
+
}
|
|
8
|
+
function windowOf(value) {
|
|
9
|
+
const { next, total } = value;
|
|
10
|
+
if (next !== undefined && typeof next !== 'string')
|
|
11
|
+
return null;
|
|
12
|
+
if (total !== undefined && !Number.isSafeInteger(total))
|
|
13
|
+
return null;
|
|
14
|
+
return {
|
|
15
|
+
...(next === undefined ? {} : { next }),
|
|
16
|
+
...(total === undefined ? {} : { total: total }),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function rowsOf(value) {
|
|
20
|
+
if (!plain(value))
|
|
21
|
+
return null;
|
|
22
|
+
const window = windowOf(value);
|
|
23
|
+
if (window === null)
|
|
24
|
+
return null;
|
|
25
|
+
if (Array.isArray(value.groups)) {
|
|
26
|
+
const groups = value.groups;
|
|
27
|
+
return groups.every((group) => plain(group) && Array.isArray(group.key) && typeof group.count === 'number')
|
|
28
|
+
? { groups: groups, ...window }
|
|
29
|
+
: null;
|
|
30
|
+
}
|
|
31
|
+
if (!Array.isArray(value.documents))
|
|
32
|
+
return null;
|
|
33
|
+
const documents = value.documents;
|
|
34
|
+
return documents.every((document) => plain(document) && typeof document.room === 'string' && typeof document.path === 'string')
|
|
35
|
+
? { documents: documents, ...window }
|
|
36
|
+
: null;
|
|
37
|
+
}
|
|
38
|
+
export function entrySeedOf(value) {
|
|
39
|
+
if (!plain(value) || !plain(value.at) || !Array.isArray(value.queries))
|
|
40
|
+
return null;
|
|
41
|
+
const at = {};
|
|
42
|
+
for (const [room, version] of Object.entries(value.at)) {
|
|
43
|
+
if (typeof version !== 'string')
|
|
44
|
+
return null;
|
|
45
|
+
at[room] = version;
|
|
46
|
+
}
|
|
47
|
+
const queries = [];
|
|
48
|
+
for (const entry of value.queries) {
|
|
49
|
+
if (!plain(entry) || !plain(entry.query))
|
|
50
|
+
return null;
|
|
51
|
+
const rows = rowsOf(entry.rows);
|
|
52
|
+
if (rows === null)
|
|
53
|
+
return null;
|
|
54
|
+
queries.push({ query: entry.query, rows });
|
|
55
|
+
}
|
|
56
|
+
return { at, queries };
|
|
57
|
+
}
|
|
58
|
+
export function seededResult(seed) {
|
|
59
|
+
const coverage = {
|
|
60
|
+
rooms: Object.entries(seed.at).map(([room, generation]) => ({
|
|
61
|
+
room,
|
|
62
|
+
generation,
|
|
63
|
+
current: false,
|
|
64
|
+
})),
|
|
65
|
+
indexes: [],
|
|
66
|
+
overlay: [],
|
|
67
|
+
};
|
|
68
|
+
if ('groups' in seed.rows) {
|
|
69
|
+
return {
|
|
70
|
+
result: { ...seed.rows, coverage },
|
|
71
|
+
keys: seed.rows.groups.map((_group, index) => index),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
result: { ...seed.rows, coverage },
|
|
76
|
+
keys: seed.rows.documents.map((document) => documentKey(document.room, document.path)),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function seedRoomHeld({ socket }, room, version, held) {
|
|
80
|
+
const stored = held.rooms.get(room);
|
|
81
|
+
return (stored !== undefined &&
|
|
82
|
+
stored.indexed &&
|
|
83
|
+
socket.reads.reached(room, stored.roomVersion, version));
|
|
84
|
+
}
|
|
85
|
+
function seedHeld(runtime, at, held) {
|
|
86
|
+
const { socket } = runtime;
|
|
87
|
+
return Object.entries(at).every(([room, version]) => (socket.session.now().roomsListed &&
|
|
88
|
+
socket.rooms.declared(room) === undefined &&
|
|
89
|
+
!held.rooms.has(room)) ||
|
|
90
|
+
seedRoomHeld(runtime, room, version, held));
|
|
91
|
+
}
|
|
92
|
+
export function seedApplies(runtime, plan, held) {
|
|
93
|
+
const { seeds } = runtime.store;
|
|
94
|
+
const seed = seeds.of(plan.key);
|
|
95
|
+
if (seed === undefined)
|
|
96
|
+
return null;
|
|
97
|
+
if (!seedHeld(runtime, seed.at, held))
|
|
98
|
+
return seed;
|
|
99
|
+
seeds.drop(plan.key);
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
function seedBehind(runtime, plan, cover, held) {
|
|
103
|
+
const seed = seedApplies(runtime, plan, held);
|
|
104
|
+
if (seed === null || 'pending' in cover)
|
|
105
|
+
return cover;
|
|
106
|
+
return {
|
|
107
|
+
pending: Object.entries(seed.at)
|
|
108
|
+
.filter(([room, version]) => !seedRoomHeld(runtime, room, version, held))
|
|
109
|
+
.map(([room]) => ({ room, awaits: 'acquisition' })),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export function keepEntrySeed(store, entry) {
|
|
113
|
+
for (const { query, rows } of entry.queries) {
|
|
114
|
+
const key = queryKey(query);
|
|
115
|
+
store.seeds.keep(key, { rows, at: entry.at });
|
|
116
|
+
for (const watcher of store.watching(seedTopic(key)))
|
|
117
|
+
watcher.answer(null);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
export function watchSeeded(runtime, plan, deliver, watch) {
|
|
121
|
+
const { store } = runtime;
|
|
122
|
+
let seeded = false;
|
|
123
|
+
let pending = true;
|
|
124
|
+
const shown = () => {
|
|
125
|
+
const seed = store.seeds.of(plan.key);
|
|
126
|
+
if (seed === undefined || seeded || !pending)
|
|
127
|
+
return;
|
|
128
|
+
seeded = true;
|
|
129
|
+
deliver(seededResult(seed));
|
|
130
|
+
};
|
|
131
|
+
const watcher = store.watch(seedTopic(plan.key), shown);
|
|
132
|
+
const stop = watch((cover, held) => seedBehind(runtime, plan, cover, held), (message) => {
|
|
133
|
+
const answered = message;
|
|
134
|
+
pending = whole(answered) && 'pending' in answered.result;
|
|
135
|
+
if (pending && store.seeds.of(plan.key) !== undefined) {
|
|
136
|
+
shown();
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
seeded = false;
|
|
140
|
+
deliver(message);
|
|
141
|
+
});
|
|
142
|
+
return () => {
|
|
143
|
+
watcher.stop();
|
|
144
|
+
stop();
|
|
145
|
+
};
|
|
146
|
+
}
|
package/dist/shared.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type Paths<V> = Readonly<Record<string, V>>;
|
|
2
|
+
export declare function guarding<V>(values: Paths<V>, handler: ProxyHandler<Paths<V>>): Paths<V>;
|
|
3
|
+
export declare function entriesIn<V>(map: Paths<V>): Generator<readonly [string, V]>;
|
|
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>;
|
|
7
|
+
export declare function shared<V>(map: Paths<V>): Paths<V>;
|
|
8
|
+
export declare function patched<V>(base: Paths<V>, set: Iterable<readonly [string, V]>, removed?: Iterable<string>): Paths<V>;
|
|
9
|
+
export declare function patching<V>(base: Paths<V>, set: Iterable<readonly [string, V]>, removed?: Iterable<string>): Generator<number, Paths<V>, void>;
|
|
10
|
+
export declare function differences<V>(left: Paths<V>, right: Paths<V>, same?: (left: V, right: V) => boolean): Generator<number, ReadonlySet<string>, void>;
|
|
11
|
+
export declare function differing<V>(left: Paths<V>, right: Paths<V>, same?: (left: V, right: V) => boolean): ReadonlySet<string>;
|
|
12
|
+
export declare function drafted<V>(base: Paths<V>): Record<string, V>;
|
|
13
|
+
export declare function settled<V>(draft: Record<string, V>): Paths<V>;
|
|
14
|
+
export declare function settling<V>(draft: Record<string, V>): Generator<number, Paths<V>, void>;
|
|
15
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +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;AAiMnD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAIvF;AAED,wBAAiB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAQ5E;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;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"}
|