@agentshouse/mdruntime-adapter 0.1.0-cb42b23b5d2fb → 0.1.0-cb5eef5f389d7
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/AGENTS.md +21 -11
- package/dist/actions.d.ts +20 -0
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +26 -28
- package/dist/adapter.d.ts +1 -0
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +102 -18
- package/dist/discovery.d.ts +1 -0
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +1 -0
- package/dist/model.d.ts +0 -1
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +0 -3
- package/dist/read.d.ts +20 -1
- package/dist/read.d.ts.map +1 -1
- package/dist/read.js +80 -4
- package/dist/refusal.d.ts.map +1 -1
- package/dist/refusal.js +2 -1
- package/dist/site.d.ts +1 -1
- package/dist/site.d.ts.map +1 -1
- package/dist/site.js +122 -43
- package/dist/stream.d.ts +3 -2
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +286 -7
- package/dist/transport.d.ts +28 -3
- package/dist/transport.d.ts.map +1 -1
- package/dist/version.d.ts +1 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/write.d.ts.map +1 -1
- package/dist/write.js +5 -2
- package/package.json +2 -3
package/AGENTS.md
CHANGED
|
@@ -33,8 +33,8 @@ the Provider's conversation list names is held complete in the browser.
|
|
|
33
33
|
identity and name, its name, created and finished times, last outcome and live
|
|
34
34
|
`state`: `asking` while a question waits, `working` while a turn runs, else
|
|
35
35
|
`idle`, and `started`, when the running turn began, or `null`. Observe one with
|
|
36
|
-
`observe('conversation', id, { limit })`: the view holds its latest
|
|
37
|
-
messages, or all of them, oldest first, its chat draft, and what the Provider
|
|
36
|
+
`observe('conversation', id, { limit })`: the view holds a window of its latest
|
|
37
|
+
`limit` messages, or all of them, oldest first, its chat draft, and what the Provider
|
|
38
38
|
streams for it whether or not anything views it: the running `turn` with its
|
|
39
39
|
message parts and its context in use and window, the open questions, the process
|
|
40
40
|
state, and the CLI's commands and options. These live only in memory: the
|
|
@@ -98,8 +98,12 @@ authorization. It is the only way App code learns who uses it.
|
|
|
98
98
|
|
|
99
99
|
`query(q)` answers once from local state; `observe('query', q)` holds the whole
|
|
100
100
|
result and hears it again only when it changes, keeping every unchanged Document
|
|
101
|
-
the same object, so a component can tell what changed by identity.
|
|
102
|
-
|
|
101
|
+
the same object, so a component can tell what changed by identity. An answer is
|
|
102
|
+
complete or pending: `{ documents, coverage }` or `{ groups, coverage }` is
|
|
103
|
+
complete for the Rooms its `coverage` names, and `{ pending }` names each Room
|
|
104
|
+
not yet acquired or prepared, `[{ room, awaits }]`. Never read a pending answer as
|
|
105
|
+
empty: draw it as loading, and observe the query to hear the complete one. A
|
|
106
|
+
query is data:
|
|
103
107
|
|
|
104
108
|
- **Filter.** `rooms` names Room locators and defaults to every Room. `types`
|
|
105
109
|
names MD Types, and `any` names untyped Markdown Documents. `pathPrefix` is a
|
|
@@ -142,15 +146,17 @@ data:
|
|
|
142
146
|
over every match and ordered by `count` or a key. A sort or group takes only a
|
|
143
147
|
pointer that holds one value. `limit` bounds the Documents or the groups.
|
|
144
148
|
- **Results and errors.** A result carries no Room Version: read freshness from
|
|
145
|
-
Rooms and Sync Status.
|
|
149
|
+
Rooms and Sync Status. `coverage` names each Room read as `{ room, generation,
|
|
150
|
+
current }`, `current` false while a newer copy of that Room is being fetched,
|
|
151
|
+
and the queued changes it includes as `overlay`; a Save in a Room changes the
|
|
152
|
+
`overlay` of every query over it. An invalid query fails with the `code`
|
|
146
153
|
`invalid-query`, `unknown-type`, `unknown-field` or `wrong-kind`, naming where,
|
|
147
154
|
and never answers an empty result in its place.
|
|
148
155
|
|
|
149
156
|
## Local Search rules
|
|
150
157
|
|
|
151
158
|
`search({ text, documents, conversations, limit })` answers once, by words, from
|
|
152
|
-
local state, with MiniSearch
|
|
153
|
-
search.
|
|
159
|
+
local state, with MiniSearch's defaults. There is no observed search.
|
|
154
160
|
|
|
155
161
|
- **What is found.** A Document by its field values, its sections' headings and
|
|
156
162
|
text, its preamble and its Path; a message by its text. Frontmatter keys, Room
|
|
@@ -159,7 +165,10 @@ search.
|
|
|
159
165
|
- **Narrowing.** `documents` is a Local Query filter: `rooms`, `types`, `where`,
|
|
160
166
|
`pathPrefix`, `hop` and `backlinks`. `conversations` names conversations. Both
|
|
161
167
|
apply before `limit`, which bounds each list; without it every hit returns.
|
|
162
|
-
- **Results.** `{ documents, messages }`,
|
|
168
|
+
- **Results.** `{ documents, messages, coverage }`, or `{ pending }` naming each
|
|
169
|
+
Room or conversation the search waits for while its index is prepared: ask
|
|
170
|
+
again, and never read pending as no hits. `coverage` names the Rooms and
|
|
171
|
+
conversations searched. Each list is ranked by `score`, which compares
|
|
163
172
|
hits of one list of one search. A Document hit names its `room`, `path` and
|
|
164
173
|
`type`, a message hit its `conversation` and `identity`, and `matches` maps each
|
|
165
174
|
matched word to the parts it matched in: `fields`, `sections`, `preamble` or
|
|
@@ -249,6 +258,8 @@ It imports only types from `@agentshouse/mdruntime/client`, never calls
|
|
|
249
258
|
`connectMdRuntime` or `serveMdRuntime`, and never imports the package main, the
|
|
250
259
|
host entry or the Adapter package, which hosts and tests use. The in-memory
|
|
251
260
|
Adapter at `@agentshouse/mdruntime/memory` is for tests and ships in no bundle.
|
|
261
|
+
A Site's page fills its Entry Data Contract's `{"$param": name}` arguments with
|
|
262
|
+
`boundQuery` from `@agentshouse/mdruntime/entry`, as House did for its HTML.
|
|
252
263
|
|
|
253
264
|
A React App may observe and save through `@agentshouse/mdruntime/react`, which
|
|
254
265
|
names React as a peer dependency. `useObserve(client, topic, ...input)` takes
|
|
@@ -265,9 +276,8 @@ through the data providers of `@agentshouse/mdruntime-families`.
|
|
|
265
276
|
|
|
266
277
|
## The Chat
|
|
267
278
|
|
|
268
|
-
`@agentshouse/mdruntime/chat` holds the Chat, one data layer for every App
|
|
269
|
-
|
|
270
|
-
a dependency, also in an App not written in React.
|
|
279
|
+
`@agentshouse/mdruntime/chat` holds the Chat, one data layer for every App; add
|
|
280
|
+
React as a dependency in any App, with React DOM and `@assistant-ui/react`.
|
|
271
281
|
|
|
272
282
|
Place the ready chat with `<Chat client={runtime} conversation={id}
|
|
273
283
|
agent={agent} width="1/3" showChats />`: `conversation` opens one, `null` for a
|
package/dist/actions.d.ts
CHANGED
|
@@ -24,6 +24,7 @@ export type AppInputs = {
|
|
|
24
24
|
readonly 'conversation.interrupt': ConversationControl;
|
|
25
25
|
readonly 'conversation.kill': ConversationControl;
|
|
26
26
|
readonly 'conversation.send': ConversationControl & {
|
|
27
|
+
readonly operation_id: string;
|
|
27
28
|
readonly text?: string;
|
|
28
29
|
readonly files?: readonly SentFile[];
|
|
29
30
|
};
|
|
@@ -32,9 +33,28 @@ export type AppAnswers = {
|
|
|
32
33
|
readonly 'conversation.history': ConversationHistories;
|
|
33
34
|
};
|
|
34
35
|
export type AppAnswerAdditions = {
|
|
36
|
+
readonly 'conversation.create': {
|
|
37
|
+
readonly conversation: string;
|
|
38
|
+
};
|
|
35
39
|
readonly 'conversation.send': {
|
|
36
40
|
readonly turn: string;
|
|
37
41
|
};
|
|
42
|
+
readonly 'record.list': {
|
|
43
|
+
readonly attachments: readonly {
|
|
44
|
+
readonly referrer: {
|
|
45
|
+
readonly room_ref: string;
|
|
46
|
+
readonly record: string;
|
|
47
|
+
};
|
|
48
|
+
}[];
|
|
49
|
+
readonly records: readonly {
|
|
50
|
+
readonly attachments: readonly {
|
|
51
|
+
readonly referrer: {
|
|
52
|
+
readonly room_ref: string;
|
|
53
|
+
readonly record: string;
|
|
54
|
+
};
|
|
55
|
+
}[];
|
|
56
|
+
}[];
|
|
57
|
+
};
|
|
38
58
|
};
|
|
39
59
|
export declare const HOUSE_APP_ACTS: Readonly<Record<string, string>>;
|
|
40
60
|
export declare const SITE_SUBMIT = "submit";
|
package/dist/actions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAE1B,KAAK,0BAA0B,EAC/B,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAQtE,KAAK,QAAQ,GAAG;IAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnD,KAAK,mBAAmB,GAAG,QAAQ,GAAG;IAAE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE,KAAK,QAAQ,GAAG,eAAe,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AAE1D,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,qBAAqB,EAAE,mBAAmB,GAAG;QACpD,QAAQ,CAAC,MAAM,EAAE;YAAE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;SAAE,CAAC;KAClF,CAAC;IACF,QAAQ,CAAC,qBAAqB,EAAE,QAAQ,GAAG;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACzE,QAAQ,CAAC,qBAAqB,EAAE,mBAAmB,CAAC;IACpD,QAAQ,CAAC,sBAAsB,EAAE,0BAA0B,CAAC;IAC5D,QAAQ,CAAC,wBAAwB,EAAE,mBAAmB,CAAC;IACvD,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAClD,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,GAAG;QAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;KACtC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,sBAAsB,EAAE,qBAAqB,CAAC;CACxD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,mBAAmB,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
|
package/dist/actions.js
CHANGED
|
@@ -122,7 +122,12 @@ async function createAction(transport, route, input, name) {
|
|
|
122
122
|
return outcome;
|
|
123
123
|
const held = record(outcome.result);
|
|
124
124
|
const conversation = text(held, 'conversation_id');
|
|
125
|
-
return conversation === undefined
|
|
125
|
+
return conversation === undefined
|
|
126
|
+
? outcome
|
|
127
|
+
: {
|
|
128
|
+
...outcome,
|
|
129
|
+
result: { ...held, conversation },
|
|
130
|
+
};
|
|
126
131
|
}
|
|
127
132
|
function withTurn(body) {
|
|
128
133
|
const held = record(body);
|
|
@@ -147,7 +152,10 @@ function referredRecord(view, roomRef) {
|
|
|
147
152
|
const held = record(view);
|
|
148
153
|
if (roomRef === undefined || typeof held.record !== 'string' || !Array.isArray(held.attachments))
|
|
149
154
|
return view;
|
|
150
|
-
const referrer = {
|
|
155
|
+
const referrer = {
|
|
156
|
+
room_ref: roomRef,
|
|
157
|
+
record: held.record,
|
|
158
|
+
};
|
|
151
159
|
return {
|
|
152
160
|
...held,
|
|
153
161
|
attachments: held.attachments.map((attachment) => ({ ...record(attachment), referrer })),
|
|
@@ -206,12 +214,13 @@ function sendFiles(input) {
|
|
|
206
214
|
}
|
|
207
215
|
function sendBody(input) {
|
|
208
216
|
const files = sendFiles(input);
|
|
209
|
-
|
|
217
|
+
const operation = text(input, 'operation_id');
|
|
218
|
+
if (files === null || operation === undefined)
|
|
210
219
|
return null;
|
|
211
220
|
const textValue = text(input, 'text');
|
|
212
221
|
return {
|
|
213
222
|
conversation_id: text(input, 'conversation'),
|
|
214
|
-
operation_id:
|
|
223
|
+
operation_id: operation,
|
|
215
224
|
...(textValue !== undefined && textValue.length > 0 ? { text: textValue } : {}),
|
|
216
225
|
...(files.length === 0 ? {} : { files }),
|
|
217
226
|
};
|
|
@@ -224,9 +233,6 @@ async function fileBytes(file) {
|
|
|
224
233
|
return null;
|
|
225
234
|
return new Uint8Array(await blob.arrayBuffer());
|
|
226
235
|
}
|
|
227
|
-
function delivered(answer, name) {
|
|
228
|
-
return answer.status === 200 ? null : actionOutcome(answer, name);
|
|
229
|
-
}
|
|
230
236
|
function uploadGrant(entry) {
|
|
231
237
|
if (!('upload' in record(entry)))
|
|
232
238
|
return 'absent';
|
|
@@ -237,36 +243,28 @@ function uploadGrant(entry) {
|
|
|
237
243
|
return null;
|
|
238
244
|
return { method: 'POST', operation: upload.operation, url: upload.url };
|
|
239
245
|
}
|
|
240
|
-
async function uploadFiles(transport, input, result
|
|
246
|
+
async function uploadFiles(transport, input, result) {
|
|
241
247
|
const sent = record(result).files;
|
|
242
|
-
if (!Array.isArray(sent)
|
|
243
|
-
return
|
|
248
|
+
if (!Array.isArray(sent))
|
|
249
|
+
return true;
|
|
244
250
|
const files = Array.isArray(record(input).files) ? record(input).files : [];
|
|
245
251
|
for (const [index, entry] of sent.entries()) {
|
|
246
252
|
const grant = uploadGrant(entry);
|
|
247
253
|
if (grant === 'absent')
|
|
248
254
|
continue;
|
|
249
|
-
if (grant === null)
|
|
250
|
-
return malformed();
|
|
251
255
|
const bytes = index < files.length ? await fileBytes(files[index]) : null;
|
|
252
|
-
if (bytes === null)
|
|
253
|
-
return
|
|
254
|
-
|
|
255
|
-
code: 'conversation_file_descriptor_required',
|
|
256
|
-
fields: {},
|
|
257
|
-
retryable: false,
|
|
258
|
-
};
|
|
259
|
-
}
|
|
260
|
-
const failed = delivered(await transport.transfer({
|
|
256
|
+
if (grant === null || bytes === null)
|
|
257
|
+
return false;
|
|
258
|
+
const answer = await transport.transfer({
|
|
261
259
|
act: 'conversation_file_upload',
|
|
262
260
|
url: grant.url,
|
|
263
261
|
body: bytes,
|
|
264
262
|
operation: grant.operation,
|
|
265
|
-
})
|
|
266
|
-
if (
|
|
267
|
-
return
|
|
263
|
+
});
|
|
264
|
+
if (answer.status !== 200)
|
|
265
|
+
return false;
|
|
268
266
|
}
|
|
269
|
-
return
|
|
267
|
+
return true;
|
|
270
268
|
}
|
|
271
269
|
async function sendAction(transport, route, input, name) {
|
|
272
270
|
const body = sendBody(input);
|
|
@@ -275,9 +273,9 @@ async function sendAction(transport, route, input, name) {
|
|
|
275
273
|
const outcome = actionOutcome(await transport.door(route, body), name);
|
|
276
274
|
if (outcome.kind !== 'action')
|
|
277
275
|
return outcome;
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
276
|
+
if (!(await uploadFiles(transport, input, outcome.result))) {
|
|
277
|
+
return { kind: 'transport-uncertainty' };
|
|
278
|
+
}
|
|
281
279
|
return { ...outcome, result: withTurn(outcome.result) };
|
|
282
280
|
}
|
|
283
281
|
function historyCursor(value) {
|
package/dist/adapter.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export type AgentsHouseAdapterOptions = {
|
|
|
5
5
|
authorize(): Promise<Authorization>;
|
|
6
6
|
} | {
|
|
7
7
|
site: HouseSiteTransport;
|
|
8
|
+
snapshot?: boolean;
|
|
8
9
|
};
|
|
9
10
|
export declare function createAgentsHouseAdapter(options: AgentsHouseAdapterOptions): Adapter;
|
|
10
11
|
//# sourceMappingURL=adapter.d.ts.map
|
package/dist/adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,OAAO,EACP,aAAa,EAiBd,MAAM,wBAAwB,CAAC;AA4ChC,OAAO,EASL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;AAyBxB,MAAM,MAAM,yBAAyB,GACjC;IACE,SAAS,EAAE,cAAc,CAAC;IAC1B,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;CACrC,GACD;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAoErD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CA+gBpF"}
|
package/dist/adapter.js
CHANGED
|
@@ -2,7 +2,8 @@ import { DISCOVER_PREFIXES, capabilities, discoveredRoom, mapDiscovery, parseDis
|
|
|
2
2
|
import { partModels, streamedModels, viewModels } from './model.js';
|
|
3
3
|
import { gathered, gatheredEach, selections } from './gather.js';
|
|
4
4
|
import { createSiteAdapter } from './site.js';
|
|
5
|
-
import { bootstrapOf, contentPrefixes, matchesScope, parseEnumeration, parseEnvelope, parseGrant, refreshFrom, viewOf, } from './read.js';
|
|
5
|
+
import { bootstrapOf, contentPrefixes, matchesScope, parseEnumeration, parseEnvelope, parseGrant, refreshFrom, viewOf, wholeView, } from './read.js';
|
|
6
|
+
import { sha256Hex } from './digest.js';
|
|
6
7
|
import { acceptedHanded, enumeratedHanded, heldHanded, scopeHanded, streamedHanded, } from './handed.js';
|
|
7
8
|
import { houseAction } from './actions.js';
|
|
8
9
|
import { classifyDoor, classifyRead, discoveryFailure, doorRefusal } from './refusal.js';
|
|
@@ -16,9 +17,36 @@ const UNCERTAIN_READ = { kind: 'transport-uncertainty' };
|
|
|
16
17
|
function lapsedGrant(outcome) {
|
|
17
18
|
return outcome.kind === 'rejected' && outcome.code === 'upload_unavailable';
|
|
18
19
|
}
|
|
20
|
+
function heldFiles(authority, held, after, budget) {
|
|
21
|
+
if (held === undefined || budget === 0)
|
|
22
|
+
return null;
|
|
23
|
+
const paths = Object.keys(held.revisions)
|
|
24
|
+
.filter((path) => held.documents[path] !== undefined && (after === null || path > after))
|
|
25
|
+
.sort();
|
|
26
|
+
if (paths.length === 0)
|
|
27
|
+
return null;
|
|
28
|
+
const files = paths.slice(0, budget).map((path) => ({ path, revision: held.revisions[path] }));
|
|
29
|
+
return { room: authority, through: paths.length > budget ? files.at(-1).path : null, files };
|
|
30
|
+
}
|
|
31
|
+
async function reused(scope, held) {
|
|
32
|
+
const sent = new Set(scope.contents.map((entry) => entry.path));
|
|
33
|
+
const contents = [...scope.contents];
|
|
34
|
+
for (const file of scope.files) {
|
|
35
|
+
if (file.binary !== undefined || sent.has(file.path))
|
|
36
|
+
continue;
|
|
37
|
+
const content = held?.documents[file.path];
|
|
38
|
+
if (content === undefined ||
|
|
39
|
+
held?.revisions[file.path] !== file.revision ||
|
|
40
|
+
(await sha256Hex(content)) !== file.sha256) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
contents.push({ path: file.path, content });
|
|
44
|
+
}
|
|
45
|
+
return { ...scope, contents };
|
|
46
|
+
}
|
|
19
47
|
export function createAgentsHouseAdapter(options) {
|
|
20
48
|
if ('site' in options)
|
|
21
|
-
return createSiteAdapter(options.site);
|
|
49
|
+
return createSiteAdapter(options.site, options.snapshot === true);
|
|
22
50
|
const transport = options.transport;
|
|
23
51
|
const notifications = houseNotifications(transport, 'credential');
|
|
24
52
|
const tracked = new Map();
|
|
@@ -29,10 +57,20 @@ export function createAgentsHouseAdapter(options) {
|
|
|
29
57
|
throw new Error('no Discovery declared the bounds');
|
|
30
58
|
return bounds;
|
|
31
59
|
}
|
|
32
|
-
async function bootstrappedRoom(envelope,
|
|
33
|
-
|
|
60
|
+
async function bootstrappedRoom(envelope, sent, asked, continued) {
|
|
61
|
+
const { entry } = asked;
|
|
62
|
+
if (sent === undefined)
|
|
34
63
|
return { kind: 'room-not-readable', locator: entry.locator };
|
|
35
|
-
const
|
|
64
|
+
const scope = await reused(sent, asked.held);
|
|
65
|
+
if (scope === null) {
|
|
66
|
+
return asked.held === undefined
|
|
67
|
+
? UNCERTAIN_READ
|
|
68
|
+
: continued === null
|
|
69
|
+
? bootstrapTogether({ entry, held: undefined })
|
|
70
|
+
: continuedBootstrap({ entry, held: undefined }, continued);
|
|
71
|
+
}
|
|
72
|
+
const cursor = envelope.next?.room === entry.authority ? envelope.next : undefined;
|
|
73
|
+
const next = cursor?.path ?? null;
|
|
36
74
|
if (continued === null && next === null)
|
|
37
75
|
handed.set(entry.locator, scopeHanded(scope));
|
|
38
76
|
else
|
|
@@ -43,17 +81,40 @@ export function createAgentsHouseAdapter(options) {
|
|
|
43
81
|
...entry.schemas.filter((schema) => scope.files.some((file) => file.path === schema)),
|
|
44
82
|
];
|
|
45
83
|
const models = await partModels(scope, entry, new Set(seen), next === null);
|
|
46
|
-
const continuation = next === null
|
|
84
|
+
const continuation = next === null
|
|
85
|
+
? null
|
|
86
|
+
: { after: next, seen, ...(cursor?.cut === undefined ? {} : { cut: cursor.cut }) };
|
|
47
87
|
return {
|
|
48
88
|
...bootstrapOf(scope),
|
|
49
89
|
...(models === undefined ? {} : { models }),
|
|
50
90
|
...(continuation === null ? {} : { pageToken: JSON.stringify(continuation) }),
|
|
51
91
|
};
|
|
52
92
|
}
|
|
93
|
+
async function enumeratedPage(ask, page) {
|
|
94
|
+
const answer = await transport.door(DOOR_ENUMERATE, {
|
|
95
|
+
prefixes: contentPrefixes(ask.entry),
|
|
96
|
+
positions: [
|
|
97
|
+
{
|
|
98
|
+
...presented(ask.entry.authority, { position: page.after, logEpoch: ask.from.logEpoch }),
|
|
99
|
+
page: { through: page.through, read: page.read },
|
|
100
|
+
},
|
|
101
|
+
],
|
|
102
|
+
});
|
|
103
|
+
const failure = classifyRead(answer.status, answer.body, ask.entry.locator);
|
|
104
|
+
if (failure !== null)
|
|
105
|
+
return failure;
|
|
106
|
+
const enumeration = parseEnumeration(answer.body, 'credential');
|
|
107
|
+
if (enumeration === null)
|
|
108
|
+
return UNCERTAIN_READ;
|
|
109
|
+
return (viewOf(enumeration, ask.entry) ?? { kind: 'room-not-readable', locator: ask.entry.locator });
|
|
110
|
+
}
|
|
53
111
|
async function enumeratedRoom(enumeration, ask) {
|
|
54
|
-
const
|
|
55
|
-
if (
|
|
112
|
+
const first = viewOf(enumeration, ask.entry);
|
|
113
|
+
if (first === undefined)
|
|
56
114
|
return { kind: 'room-not-readable', locator: ask.entry.locator };
|
|
115
|
+
const view = await wholeView(first, (page) => enumeratedPage(ask, page));
|
|
116
|
+
if ('kind' in view)
|
|
117
|
+
return view;
|
|
57
118
|
notifications.reach(ask.entry.authority, view);
|
|
58
119
|
const answer = refreshFrom(view, ask.fromRoomVersion);
|
|
59
120
|
if (answer.kind !== 'net-advancement')
|
|
@@ -118,13 +179,19 @@ export function createAgentsHouseAdapter(options) {
|
|
|
118
179
|
function weight(entry) {
|
|
119
180
|
return contentPrefixes(entry).length;
|
|
120
181
|
}
|
|
121
|
-
|
|
122
|
-
|
|
182
|
+
function holding(asks, after) {
|
|
183
|
+
const budget = Math.floor(declared().max_held_files / Math.max(1, asks.filter((ask) => ask.held !== undefined).length));
|
|
184
|
+
return asks.flatMap((ask) => heldFiles(ask.entry.authority, ask.held, after, budget) ?? []);
|
|
185
|
+
}
|
|
186
|
+
async function bootstrapped(asks, answer) {
|
|
187
|
+
let open = asks.map((asked, ask) => ({ entry: asked.entry, asked, ask }));
|
|
123
188
|
while (open.length > 0) {
|
|
124
189
|
const unreached = [];
|
|
125
190
|
for (const part of selections(open, ({ entry }) => weight(entry), declared().max_prefixes)) {
|
|
191
|
+
const held = holding(part.map(({ asked }) => asked), null);
|
|
126
192
|
const answered = await transport.door(DOOR_BOOTSTRAP, {
|
|
127
193
|
prefixes: part.flatMap(({ entry }) => contentPrefixes(entry)),
|
|
194
|
+
...(held.length === 0 ? {} : { held }),
|
|
128
195
|
});
|
|
129
196
|
const classified = part.map(({ entry }) => classifyDoor(answered.status, answered.body, entry.locator));
|
|
130
197
|
const envelope = classified[0] === null ? parseEnvelope(answered.body) : null;
|
|
@@ -143,26 +210,33 @@ export function createAgentsHouseAdapter(options) {
|
|
|
143
210
|
unreached.push(asked);
|
|
144
211
|
continue;
|
|
145
212
|
}
|
|
146
|
-
answer(asked.ask, await bootstrappedRoom(envelope, scope, asked.
|
|
213
|
+
answer(asked.ask, await bootstrappedRoom(envelope, scope, asked.asked, null));
|
|
147
214
|
}
|
|
148
215
|
}
|
|
149
216
|
open = unreached;
|
|
150
217
|
}
|
|
151
218
|
}
|
|
152
|
-
async function continuedBootstrap(
|
|
153
|
-
const
|
|
219
|
+
async function continuedBootstrap(asked, continued) {
|
|
220
|
+
const { entry } = asked;
|
|
221
|
+
const after = {
|
|
222
|
+
room: entry.authority,
|
|
223
|
+
path: continued.after,
|
|
224
|
+
...(continued.cut === undefined ? {} : { cut: continued.cut }),
|
|
225
|
+
};
|
|
226
|
+
const held = holding([asked], continued.after);
|
|
154
227
|
const answered = await transport.door(DOOR_BOOTSTRAP, {
|
|
155
228
|
prefixes: contentPrefixes(entry),
|
|
156
229
|
after,
|
|
230
|
+
...(held.length === 0 ? {} : { held }),
|
|
157
231
|
});
|
|
158
|
-
const failure =
|
|
232
|
+
const failure = classifyRead(answered.status, answered.body, entry.locator);
|
|
159
233
|
if (failure !== null)
|
|
160
234
|
return failure;
|
|
161
235
|
const envelope = parseEnvelope(answered.body);
|
|
162
236
|
if (envelope === null)
|
|
163
237
|
return UNCERTAIN_READ;
|
|
164
238
|
const scope = envelope.scopes.find((candidate) => matchesScope(candidate, entry));
|
|
165
|
-
return bootstrappedRoom(envelope, scope,
|
|
239
|
+
return bootstrappedRoom(envelope, scope, asked, continued);
|
|
166
240
|
}
|
|
167
241
|
function layered(asks) {
|
|
168
242
|
const depths = new Map();
|
|
@@ -327,10 +401,11 @@ export function createAgentsHouseAdapter(options) {
|
|
|
327
401
|
const entry = authorityFor(request.locator);
|
|
328
402
|
if (entry === undefined)
|
|
329
403
|
return { kind: 'room-not-readable', locator: request.locator };
|
|
404
|
+
const asked = { entry, held: request.held };
|
|
330
405
|
if (request.pageToken !== undefined) {
|
|
331
|
-
return continuedBootstrap(
|
|
406
|
+
return continuedBootstrap(asked, JSON.parse(request.pageToken));
|
|
332
407
|
}
|
|
333
|
-
return bootstrapTogether(
|
|
408
|
+
return bootstrapTogether(asked);
|
|
334
409
|
},
|
|
335
410
|
async refresh(_authorization, request) {
|
|
336
411
|
const entry = authorityFor(request.locator);
|
|
@@ -418,7 +493,16 @@ export function createAgentsHouseAdapter(options) {
|
|
|
418
493
|
async action(_authorization, request) {
|
|
419
494
|
return withAt(await houseAction(transport, request));
|
|
420
495
|
},
|
|
421
|
-
roomStream: {
|
|
496
|
+
roomStream: {
|
|
497
|
+
hold: held,
|
|
498
|
+
reopen: notifications.reopen,
|
|
499
|
+
observe: notifications.observe,
|
|
500
|
+
published(locator, roomVersion) {
|
|
501
|
+
const at = logPosition(roomVersion);
|
|
502
|
+
if (at !== null)
|
|
503
|
+
notifications.published(locator, at);
|
|
504
|
+
},
|
|
505
|
+
},
|
|
422
506
|
conversations: notifications.conversations,
|
|
423
507
|
serviceMode: notifications.serviceMode,
|
|
424
508
|
};
|
package/dist/discovery.d.ts
CHANGED
package/dist/discovery.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,SAAS,EACT,MAAM,EACN,aAAa,EACb,SAAS,EACV,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAA6B,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3E,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAAU,CAAC;AAE1D,MAAM,MAAM,WAAW,GAAG;IACxB,uBAAuB,EAAE,MAAM,CAAC;IAChC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,wBAAwB,EAAE,MAAM,CAAC;IACjC,2BAA2B,EAAE,MAAM,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,kBAAkB,EAAE,UAAU,GAAG,aAAa,CAAC;IAC/C,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,UAAU,EAAE,eAAe,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;IACvC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAC5C,CAAC;
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
|
package/dist/discovery.js
CHANGED
package/dist/model.d.ts
CHANGED
|
@@ -3,7 +3,6 @@ import type { TrackedAuthority } from './discovery.js';
|
|
|
3
3
|
import { type HouseScope, type HouseView } from './read.js';
|
|
4
4
|
import type { HouseMode, HouseStreamEntry } from './transport.js';
|
|
5
5
|
export declare function partModels(scope: HouseScope, tracked: TrackedAuthority, seen: ReadonlySet<string>, final: boolean): Promise<RoomModels | undefined>;
|
|
6
|
-
export declare function scopeModels(scope: HouseScope, tracked: TrackedAuthority): Promise<RoomModels | undefined>;
|
|
7
6
|
export declare function viewModels(view: HouseView, tracked: TrackedAuthority): Promise<RoomModels | undefined>;
|
|
8
7
|
export declare function streamedModels(schemas: ReadonlyMap<string, HouseStreamEntry>, tracked: TrackedAuthority, mode: HouseMode): Promise<RoomModels | undefined>;
|
|
9
8
|
//# sourceMappingURL=model.d.ts.map
|
package/dist/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAA0C,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AACpG,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAoClE,wBAAgB,UAAU,CACxB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAKjC;AAED,wBAAgB,
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAA0C,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AACpG,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAoClE,wBAAgB,UAAU,CACxB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAKjC;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAcjC;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAC9C,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAWjC"}
|
package/dist/model.js
CHANGED
|
@@ -33,9 +33,6 @@ export function partModels(scope, tracked, seen, final) {
|
|
|
33
33
|
return final && !seen.has(schema) ? ABSENT_SCHEMA : undefined;
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
|
-
export function scopeModels(scope, tracked) {
|
|
37
|
-
return partModels(scope, tracked, new Set(), true);
|
|
38
|
-
}
|
|
39
36
|
export function viewModels(view, tracked) {
|
|
40
37
|
return modelsOf(tracked, (schema) => {
|
|
41
38
|
const change = view.changes.find((candidate) => candidate.path === schema);
|
package/dist/read.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BinaryFile, BootstrapPage, RefreshResult } from '@agentshouse/mdruntime';
|
|
1
|
+
import type { AdapterFailure, BinaryFile, BootstrapPage, RefreshResult } from '@agentshouse/mdruntime';
|
|
2
2
|
import type { TrackedAuthority } from './discovery.js';
|
|
3
3
|
import type { HouseMode } from './transport.js';
|
|
4
4
|
import { type LogPosition } from './version.js';
|
|
@@ -7,6 +7,7 @@ export type HouseManifestFile = {
|
|
|
7
7
|
path: string;
|
|
8
8
|
revision: string | undefined;
|
|
9
9
|
version: string;
|
|
10
|
+
sha256?: string;
|
|
10
11
|
head?: HeadChange;
|
|
11
12
|
binary?: BinaryFile;
|
|
12
13
|
};
|
|
@@ -19,9 +20,14 @@ export type HouseScope = LogPosition & {
|
|
|
19
20
|
files: readonly HouseManifestFile[];
|
|
20
21
|
contents: readonly HouseContent[];
|
|
21
22
|
};
|
|
23
|
+
export type HouseCut = {
|
|
24
|
+
position: string;
|
|
25
|
+
log_epoch: string;
|
|
26
|
+
};
|
|
22
27
|
export type HouseCursor = {
|
|
23
28
|
room: string;
|
|
24
29
|
path: string | null;
|
|
30
|
+
cut?: HouseCut;
|
|
25
31
|
};
|
|
26
32
|
export type HouseEnvelope = {
|
|
27
33
|
scopes: readonly HouseScope[];
|
|
@@ -51,9 +57,18 @@ export type HouseChange = {
|
|
|
51
57
|
version: string;
|
|
52
58
|
head?: HeadChange;
|
|
53
59
|
};
|
|
60
|
+
export type HousePage = {
|
|
61
|
+
after: string;
|
|
62
|
+
through: string;
|
|
63
|
+
read: number;
|
|
64
|
+
};
|
|
54
65
|
export type HouseView = LogPosition & {
|
|
55
66
|
authority: string;
|
|
56
67
|
changes: readonly HouseChange[];
|
|
68
|
+
next?: HousePage;
|
|
69
|
+
};
|
|
70
|
+
type PageFailure = AdapterFailure | {
|
|
71
|
+
kind: 'beyond-horizon';
|
|
57
72
|
};
|
|
58
73
|
export type HouseEnumeration = {
|
|
59
74
|
authorities: readonly HouseView[];
|
|
@@ -69,7 +84,10 @@ export declare function headChange(held: {
|
|
|
69
84
|
export declare function binaryFileOf(held: Readonly<Record<string, unknown>>): BinaryFile | undefined | null;
|
|
70
85
|
export declare function parseEnvelope(body: unknown): HouseEnvelope | null;
|
|
71
86
|
export declare function parseSiteBootstrap(body: unknown): HouseScope | null;
|
|
87
|
+
export declare function siteBootstrapNext(body: unknown): string | null;
|
|
88
|
+
export declare function siteBootstrapOffset(body: unknown): number | null;
|
|
72
89
|
export declare function parseEnumeration(body: unknown, mode: HouseMode): HouseEnumeration | null;
|
|
90
|
+
export declare function wholeView(first: HouseView, more: (page: HousePage) => Promise<HouseView | PageFailure>): Promise<HouseView | PageFailure>;
|
|
73
91
|
export declare function advancedScope(scope: HouseScope, view: HouseView): HouseScope;
|
|
74
92
|
export declare function matchesScope(scope: HouseScope, tracked: TrackedAuthority): boolean;
|
|
75
93
|
export declare function bootstrapOf(scope: HouseScope): BootstrapPage;
|
|
@@ -81,4 +99,5 @@ export type HouseSchema = {
|
|
|
81
99
|
export declare function schemaOf(scope: HouseScope, schema: string): HouseSchema | null;
|
|
82
100
|
export declare function viewOf(enumeration: HouseEnumeration, tracked: TrackedAuthority): HouseView | undefined;
|
|
83
101
|
export declare function refreshFrom(view: HouseView, fromRoomVersion: string): RefreshResult;
|
|
102
|
+
export {};
|
|
84
103
|
//# sourceMappingURL=read.d.ts.map
|
package/dist/read.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../src/read.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EAEb,aAAa,EACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../src/read.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,aAAa,EAEb,aAAa,EACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAsC,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAEpF,MAAM,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACpC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,GAAG,CAAC,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEhF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,UAAU,GAClB;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,GAC/B;IACE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB,CAAC;AAEN,MAAM,MAAM,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzE,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IAChC,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,CAAC;AAEF,KAAK,WAAW,GAAG,cAAc,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE/D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,SAAS,SAAS,EAAE,CAAC;CACnC,CAAC;AAEF,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,MAAM,EAAE,CAK5E;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAU3D;AAWD,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B,GAAG,UAAU,GAAG,SAAS,GAAG,IAAI,CAMhC;AAMD,wBAAgB,YAAY,CAC1B,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACtC,UAAU,GAAG,SAAS,GAAG,IAAI,CAW/B;AA+ED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAYjE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAEnE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAG9D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAKhE;AAqCD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,gBAAgB,GAAG,IAAI,CA0BxF;AAgBD,wBAAsB,SAAS,CAC7B,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,GAC1D,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,CA0BlC;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,GAAG,UAAU,CAuB5E;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAElF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,aAAa,CAqB5D;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAO9E;AAED,wBAAgB,MAAM,CACpB,WAAW,EAAE,gBAAgB,EAC7B,OAAO,EAAE,gBAAgB,GACxB,SAAS,GAAG,SAAS,CAEvB;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,GAAG,aAAa,CA0BnF"}
|