@agentshouse/mdruntime-adapter 0.1.0-cd519a0f878dc → 0.1.0-cd5a35054e28c
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/dist/actions.d.ts +8 -13
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +5 -69
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +78 -124
- package/dist/discovery.d.ts +3 -3
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +8 -9
- package/dist/gather.d.ts +0 -1
- package/dist/gather.d.ts.map +1 -1
- package/dist/gather.js +1 -1
- package/dist/house-model.d.ts +1 -1
- package/dist/house-model.d.ts.map +1 -1
- package/dist/house-model.js +148 -99
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/model.d.ts +2 -2
- package/dist/model.d.ts.map +1 -1
- package/dist/part.d.ts +11 -12
- package/dist/part.d.ts.map +1 -1
- package/dist/part.js +63 -55
- package/dist/read.d.ts +10 -15
- package/dist/read.d.ts.map +1 -1
- package/dist/read.js +35 -47
- package/dist/room-stream.d.ts +19 -0
- package/dist/room-stream.d.ts.map +1 -0
- package/dist/room-stream.js +57 -0
- package/dist/room-types.d.ts +1 -1
- package/dist/room-types.d.ts.map +1 -1
- package/dist/room-types.js +2 -0
- package/dist/site.d.ts.map +1 -1
- package/dist/site.js +33 -72
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +7 -3
- package/dist/transport.d.ts +12 -2
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +1 -0
- package/dist/write.d.ts +4 -0
- package/dist/write.d.ts.map +1 -1
- package/dist/write.js +10 -2
- package/package.json +2 -2
package/dist/actions.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { type AcceptedMessage, type ActionDeclaration, type ActionRequest, type ActionResult, type ConversationAgents, type ConversationHistories, type ConversationHistoryRequest
|
|
1
|
+
import { type AcceptedMessage, type ActionDeclaration, type ActionRequest, type ActionResult, type ConversationAgents, type ConversationHistories, type ConversationHistoryRequest } from '@agentshouse/mdruntime';
|
|
2
2
|
import type { HouseDoorAnswer, HouseTransport } from './transport.js';
|
|
3
|
+
export type HouseActDoor = Pick<HouseTransport, 'door'>;
|
|
3
4
|
export declare const HISTORY_PAGE = 100;
|
|
4
|
-
export declare const TRIGGER_ROOMS = 100;
|
|
5
5
|
type Operated = {
|
|
6
6
|
readonly operation_id?: string;
|
|
7
7
|
};
|
|
@@ -9,10 +9,6 @@ type ConversationControl = Operated & {
|
|
|
9
9
|
readonly conversation: string;
|
|
10
10
|
};
|
|
11
11
|
export type AppInputs = {
|
|
12
|
-
readonly 'conversation.attach': FileDeclaration & {
|
|
13
|
-
readonly room: string;
|
|
14
|
-
readonly blob: Blob;
|
|
15
|
-
};
|
|
16
12
|
readonly 'conversation.answer': ConversationControl & {
|
|
17
13
|
readonly answer: {
|
|
18
14
|
readonly interaction_id: string;
|
|
@@ -31,14 +27,8 @@ export type AppInputs = {
|
|
|
31
27
|
readonly operation_id: string;
|
|
32
28
|
readonly text: string;
|
|
33
29
|
};
|
|
34
|
-
readonly 'trigger.list': {
|
|
35
|
-
readonly room_refs: readonly string[];
|
|
36
|
-
};
|
|
37
30
|
};
|
|
38
31
|
export type AppAnswers = {
|
|
39
|
-
readonly 'conversation.attach': {
|
|
40
|
-
readonly path: string;
|
|
41
|
-
};
|
|
42
32
|
readonly 'conversation.history': ConversationHistories;
|
|
43
33
|
};
|
|
44
34
|
export type AppAnswerAdditions = {
|
|
@@ -55,8 +45,13 @@ export declare const HOUSE_SITE_ACTS: Readonly<Record<string, string>>;
|
|
|
55
45
|
export declare const HOUSE_APP_BATCHES: Readonly<Partial<Record<string, readonly string[]>>>;
|
|
56
46
|
export declare function houseConversationAgents(locator: string): ConversationAgents;
|
|
57
47
|
export declare function declaredActions(routes: readonly string[]): readonly ActionDeclaration[];
|
|
58
|
-
export declare function houseAction(transport:
|
|
48
|
+
export declare function houseAction(transport: HouseActDoor, request: ActionRequest): Promise<ActionResult>;
|
|
59
49
|
export declare function actionOutcome(answer: HouseDoorAnswer, name: string): ActionResult;
|
|
50
|
+
type HistoryCursor = {
|
|
51
|
+
accepted_at: string;
|
|
52
|
+
message_id: string;
|
|
53
|
+
};
|
|
54
|
+
export declare function cursorPosition(cursor: HistoryCursor): string;
|
|
60
55
|
export declare function acceptedMessage(entry: unknown): AcceptedMessage | null;
|
|
61
56
|
export {};
|
|
62
57
|
//# sourceMappingURL=actions.d.ts.map
|
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,EAGL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAE1B,KAAK,0BAA0B,
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
|
package/dist/actions.js
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import { changeBatchIdentity, HISTORY_CONVERSATIONS, } from '@agentshouse/mdruntime';
|
|
2
2
|
import { doorRefusal } from './refusal.js';
|
|
3
|
-
import { finishedUpload, houseUpload } from './upload.js';
|
|
4
3
|
export const HISTORY_PAGE = 100;
|
|
5
|
-
export const TRIGGER_ROOMS = 100;
|
|
6
|
-
const OCTET_STREAM = 'application/octet-stream';
|
|
7
4
|
function mapped(door, input = (given) => given) {
|
|
8
5
|
return {
|
|
9
6
|
door,
|
|
@@ -12,18 +9,16 @@ function mapped(door, input = (given) => given) {
|
|
|
12
9
|
},
|
|
13
10
|
};
|
|
14
11
|
}
|
|
15
|
-
function carried(door, carry, batched
|
|
12
|
+
function carried(door, carry, batched) {
|
|
16
13
|
return {
|
|
17
14
|
door,
|
|
18
15
|
...(batched === undefined ? {} : { batched }),
|
|
19
|
-
...(room === undefined ? {} : { room }),
|
|
20
16
|
carry: (transport, input, name) => carry(transport, `/door/${door}`, input, name),
|
|
21
17
|
};
|
|
22
18
|
}
|
|
23
19
|
const APP_ACTS = {
|
|
24
20
|
'access.read': mapped('rooms/access/read'),
|
|
25
21
|
'conversation.answer': mapped('conversations/interaction/answer', answerBody),
|
|
26
|
-
'conversation.attach': carried('conversations/attach', attachAction, undefined, 'room'),
|
|
27
22
|
'conversation.create': carried('conversations/create', createAction),
|
|
28
23
|
'conversation.delete': mapped('conversations/delete', controlBody),
|
|
29
24
|
'conversation.history': carried('conversations/history', historyAction, ['conversations']),
|
|
@@ -50,7 +45,6 @@ const APP_ACTS = {
|
|
|
50
45
|
'routineAllowance.list': mapped('routines/allowance'),
|
|
51
46
|
'routineRequest.list': mapped('routines/requests'),
|
|
52
47
|
'storage.read': mapped('storage/inventory'),
|
|
53
|
-
'trigger.list': carried('triggers/read', triggersAction, ['room_refs'], 'room_refs'),
|
|
54
48
|
'triggerOccurrence.list': mapped('triggers/fired'),
|
|
55
49
|
};
|
|
56
50
|
export const HOUSE_APP_ACTS = Object.fromEntries(Object.entries(APP_ACTS).map(([name, act]) => [name, act.door]));
|
|
@@ -60,14 +54,13 @@ export const HOUSE_SITE_ACTS = {
|
|
|
60
54
|
};
|
|
61
55
|
export const HOUSE_APP_BATCHES = Object.fromEntries(Object.entries(APP_ACTS).flatMap(([name, act]) => act.batched === undefined ? [] : [[name, act.batched]]));
|
|
62
56
|
const APP_NAMES = new Map(Object.entries(APP_ACTS).map(([name, act]) => [act.door, name]));
|
|
63
|
-
const APP_ROOMS = new Map(Object.entries(APP_ACTS).flatMap(([name, act]) => act.room === undefined ? [] : [[name, act.room]]));
|
|
64
57
|
export function houseConversationAgents(locator) {
|
|
65
58
|
return { locator, type: 'house-agent', identity: 'agent', name: 'name', retired: 'retired' };
|
|
66
59
|
}
|
|
67
60
|
export function declaredActions(routes) {
|
|
68
61
|
return routes.map((route) => {
|
|
69
62
|
const name = APP_NAMES.get(route) ?? route;
|
|
70
|
-
return { name, inputShape: {}, resultKind: 'house', room:
|
|
63
|
+
return { name, inputShape: {}, resultKind: 'house', room: 'room_ref' };
|
|
71
64
|
});
|
|
72
65
|
}
|
|
73
66
|
export function houseAction(transport, request) {
|
|
@@ -181,47 +174,6 @@ async function sendAction(transport, route, input, name) {
|
|
|
181
174
|
return outcome;
|
|
182
175
|
return { ...outcome, result: withTurn(outcome.result) };
|
|
183
176
|
}
|
|
184
|
-
function attachBody(input) {
|
|
185
|
-
const room = text(input, 'room');
|
|
186
|
-
const name = text(input, 'name');
|
|
187
|
-
const sha256 = text(input, 'contentHash');
|
|
188
|
-
const bytes = record(input).byteLength;
|
|
189
|
-
if (room === undefined || name === undefined || sha256 === undefined)
|
|
190
|
-
return null;
|
|
191
|
-
if (typeof bytes !== 'number')
|
|
192
|
-
return null;
|
|
193
|
-
const mediaType = text(input, 'mediaType');
|
|
194
|
-
return {
|
|
195
|
-
room_ref: room,
|
|
196
|
-
name,
|
|
197
|
-
bytes,
|
|
198
|
-
sha256,
|
|
199
|
-
media_type: mediaType !== undefined && mediaType.length > 0 ? mediaType : OCTET_STREAM,
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
async function attachAction(transport, route, input, name) {
|
|
203
|
-
const body = attachBody(input);
|
|
204
|
-
const blob = record(input).blob;
|
|
205
|
-
if (body === null || !(blob instanceof Blob))
|
|
206
|
-
return malformed();
|
|
207
|
-
const outcome = actionOutcome(await transport.door(route, body), name);
|
|
208
|
-
if (outcome.kind !== 'action')
|
|
209
|
-
return outcome;
|
|
210
|
-
const upload = houseUpload(record(outcome.result).upload);
|
|
211
|
-
if (upload === null)
|
|
212
|
-
return { kind: 'transport-uncertainty' };
|
|
213
|
-
const finished = await finishedUpload(transport, upload, blob);
|
|
214
|
-
if (finished === null)
|
|
215
|
-
return { kind: 'transport-uncertainty' };
|
|
216
|
-
const settled = actionOutcome(finished, name);
|
|
217
|
-
if (settled.kind !== 'action')
|
|
218
|
-
return settled;
|
|
219
|
-
const path = text(settled.result, 'path');
|
|
220
|
-
if (path === undefined)
|
|
221
|
-
return { kind: 'transport-uncertainty' };
|
|
222
|
-
const result = { path };
|
|
223
|
-
return { kind: 'action', result };
|
|
224
|
-
}
|
|
225
177
|
function historyCursor(value) {
|
|
226
178
|
const acceptedAt = text(value, 'accepted_at');
|
|
227
179
|
const messageId = text(value, 'message_id');
|
|
@@ -229,7 +181,7 @@ function historyCursor(value) {
|
|
|
229
181
|
return null;
|
|
230
182
|
return { accepted_at: acceptedAt, message_id: messageId };
|
|
231
183
|
}
|
|
232
|
-
function
|
|
184
|
+
export function cursorPosition(cursor) {
|
|
233
185
|
return JSON.stringify({ accepted_at: cursor.accepted_at, message_id: cursor.message_id });
|
|
234
186
|
}
|
|
235
187
|
function positionCursor(value) {
|
|
@@ -247,7 +199,7 @@ export function acceptedMessage(entry) {
|
|
|
247
199
|
return {
|
|
248
200
|
identity: cursor.message_id,
|
|
249
201
|
turn: text(entry, 'turn_id') ?? cursor.message_id,
|
|
250
|
-
position:
|
|
202
|
+
position: cursorPosition(cursor),
|
|
251
203
|
text: text(entry, 'text') ?? '',
|
|
252
204
|
message: structuredClone(record(entry)),
|
|
253
205
|
};
|
|
@@ -267,7 +219,7 @@ function historyPage(entry) {
|
|
|
267
219
|
const next = held.next === null || held.next === undefined ? undefined : historyCursor(held.next);
|
|
268
220
|
if (next === null)
|
|
269
221
|
return null;
|
|
270
|
-
return { conversation, messages, ...(next === undefined ? {} : { next:
|
|
222
|
+
return { conversation, messages, ...(next === undefined ? {} : { next: cursorPosition(next) }) };
|
|
271
223
|
}
|
|
272
224
|
function historyAsks(input) {
|
|
273
225
|
const asked = record(input).conversations;
|
|
@@ -286,22 +238,6 @@ function historyAsks(input) {
|
|
|
286
238
|
}
|
|
287
239
|
return asks;
|
|
288
240
|
}
|
|
289
|
-
async function triggersAction(transport, route, input, name) {
|
|
290
|
-
const asked = record(input).room_refs;
|
|
291
|
-
if (!Array.isArray(asked) || asked.length === 0)
|
|
292
|
-
return malformed();
|
|
293
|
-
const rooms = [];
|
|
294
|
-
for (let at = 0; at < asked.length; at += TRIGGER_ROOMS) {
|
|
295
|
-
const outcome = actionOutcome(await transport.door(route, { room_refs: asked.slice(at, at + TRIGGER_ROOMS) }), name);
|
|
296
|
-
if (outcome.kind !== 'action')
|
|
297
|
-
return outcome;
|
|
298
|
-
const answered = record(outcome.result).rooms;
|
|
299
|
-
if (!Array.isArray(answered))
|
|
300
|
-
return { kind: 'transport-uncertainty' };
|
|
301
|
-
rooms.push(...answered);
|
|
302
|
-
}
|
|
303
|
-
return { kind: 'action', result: { rooms } };
|
|
304
|
-
}
|
|
305
241
|
async function historyAction(transport, route, input, name) {
|
|
306
242
|
const asks = historyAsks(input);
|
|
307
243
|
if (asks === null)
|
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,EAIV,OAAO,
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,OAAO,EAGP,aAAa,EAkBd,MAAM,wBAAwB,CAAC;AAoChC,OAAO,EAUL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;AA0BxB,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;AAqErD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CA+jBpF"}
|
package/dist/adapter.js
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import { stepped } from '@agentshouse/mdruntime';
|
|
2
2
|
import { DISCOVER_PREFIXES, capabilities, discoveredRoom, mapDiscovery, parseDiscovery, trackedFrom, } from './discovery.js';
|
|
3
|
-
import {
|
|
4
|
-
import { gathered,
|
|
3
|
+
import { streamedModels, viewModels } from './model.js';
|
|
4
|
+
import { gathered, selections } from './gather.js';
|
|
5
5
|
import { createSiteAdapter } from './site.js';
|
|
6
|
-
import { authorityRoot, bootstrapping,
|
|
7
|
-
import {
|
|
6
|
+
import { authorityRoot, bootstrapping, parseEnumeration, parseFileAddress, parseGrant, refreshFrom, viewOf, wholeView, } from './read.js';
|
|
7
|
+
import { roomStreams } from './room-stream.js';
|
|
8
8
|
import { sha256Hex } from './digest.js';
|
|
9
9
|
import { finishedUpload, houseUpload } from './upload.js';
|
|
10
10
|
import { houseAction } from './actions.js';
|
|
11
11
|
import { classifyDoor, classifyRead, discoveryFailure, doorRefusal } from './refusal.js';
|
|
12
12
|
import { houseNotifications } from './stream.js';
|
|
13
|
-
import { DOOR_BATCH, DOOR_BATCH_UPLOAD, DOOR_BOOTSTRAP, DOOR_DISCOVER, DOOR_ENUMERATE, DOOR_FILES_GET, DOOR_REVISIONS, } from './transport.js';
|
|
13
|
+
import { DOOR_BATCH, DOOR_BATCH_UPLOAD, DOOR_BOOTSTRAP, DOOR_DISCOVER, DOOR_ENUMERATE, DOOR_FILES_ATTACH, DOOR_FILES_GET, DOOR_REVISIONS, } from './transport.js';
|
|
14
14
|
import { batchPaths, deltaBody, deltaBytes, deltaDigest, historyOutcome, houseChanges, houseMove, mutationOutcome, operationHead, rejectedMapping, revisionBody, uploadable, } from './write.js';
|
|
15
15
|
import { HOUSE_NAMEABLE_ROOM_TYPES, HOUSE_ROOM_TYPES } from './room-types.js';
|
|
16
16
|
import { followsVersion, logPosition, presented, reachedVersion, roomVersion, } from './version.js';
|
|
17
17
|
const UNCERTAIN = { kind: 'transport-uncertainty' };
|
|
18
18
|
const UNCERTAIN_READ = { kind: 'transport-uncertainty' };
|
|
19
|
+
const OCTET_STREAM = 'application/octet-stream';
|
|
19
20
|
const EXPIRED_ADDRESS = 403;
|
|
20
21
|
function lapsedGrant(outcome) {
|
|
21
22
|
return outcome.kind === 'rejected' && outcome.code === 'upload_unavailable';
|
|
@@ -53,6 +54,8 @@ export function createAgentsHouseAdapter(options) {
|
|
|
53
54
|
const notifications = houseNotifications(transport, 'credential');
|
|
54
55
|
const tracked = new Map();
|
|
55
56
|
const handed = new Map();
|
|
57
|
+
const rooms = roomStreams('credential');
|
|
58
|
+
const unreused = new Set();
|
|
56
59
|
let heldRevisions;
|
|
57
60
|
let bounds;
|
|
58
61
|
function declared() {
|
|
@@ -60,73 +63,40 @@ export function createAgentsHouseAdapter(options) {
|
|
|
60
63
|
throw new Error('no Discovery declared the bounds');
|
|
61
64
|
return bounds;
|
|
62
65
|
}
|
|
63
|
-
async function
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
return 'kind' in held ? held : { scope: held, frame: kept };
|
|
69
|
-
}
|
|
70
|
-
for (let attempt = 0; attempt < PART_ATTEMPTS; attempt += 1) {
|
|
71
|
-
const answered = await transport.door(DOOR_BOOTSTRAP, {
|
|
72
|
-
prefixes: [authorityRoot(entry.handle)],
|
|
73
|
-
part: listed.part,
|
|
74
|
-
...(continued.held === undefined ? {} : { held: [continued.held] }),
|
|
75
|
-
}, partArrival(listed, arriving));
|
|
76
|
-
const failure = classifyRead(answered.status, answered.body, entry.locator);
|
|
77
|
-
if (failure !== null)
|
|
78
|
-
return failure;
|
|
79
|
-
const frame = partFrame(answered.body);
|
|
80
|
-
if (frame === null)
|
|
81
|
-
continue;
|
|
82
|
-
const scope = await housePart(continued.room, frame, listed, 'credential');
|
|
83
|
-
if (scope !== null)
|
|
84
|
-
return 'kind' in scope ? scope : { scope, frame };
|
|
85
|
-
}
|
|
86
|
-
return unverifiedPart(entry.locator);
|
|
87
|
-
}
|
|
88
|
-
async function manifestPage(asked, continued) {
|
|
89
|
-
const inventory = partInventory(continued.room);
|
|
90
|
-
if (inventory.parts === 0) {
|
|
91
|
-
const page = await partPage(asked, continued, undefined, undefined);
|
|
92
|
-
return page.kind === 'bootstrap' ? { ...page, inventory } : page;
|
|
93
|
-
}
|
|
94
|
-
const { models, seen } = await manifestedModels(continued.room, asked.entry);
|
|
95
|
-
return manifested(continued.room, inventory, JSON.stringify({ ...continued, seen }), models);
|
|
96
|
-
}
|
|
97
|
-
async function partPage(asked, continued, received, arriving) {
|
|
98
|
-
const { entry } = asked;
|
|
99
|
-
const listed = continued.room.parts[continued.next];
|
|
100
|
-
const sent = listed === undefined
|
|
101
|
-
? { scope: emptyScope(continued.room), frame: null }
|
|
102
|
-
: await fetchedPart(entry, continued, listed, received, arriving);
|
|
103
|
-
if ('kind' in sent)
|
|
104
|
-
return sent;
|
|
105
|
-
const scope = await reused(sent.scope, asked.held);
|
|
66
|
+
async function streamedPage(entry, token, held) {
|
|
67
|
+
const part = await rooms.part(entry, token);
|
|
68
|
+
if ('kind' in part)
|
|
69
|
+
return part;
|
|
70
|
+
const scope = await reused(part.scope, held);
|
|
106
71
|
if (scope === null) {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
: bootstrapTogether({ entry, held: undefined });
|
|
72
|
+
unreused.add(entry.locator);
|
|
73
|
+
return UNCERTAIN_READ;
|
|
110
74
|
}
|
|
111
|
-
|
|
112
|
-
const more = next < continued.room.parts.length;
|
|
113
|
-
if (continued.next === 0 && !more)
|
|
75
|
+
if (part.first && part.ended)
|
|
114
76
|
handed.set(entry.locator, roomVersion(scope));
|
|
115
77
|
else
|
|
116
78
|
handed.delete(entry.locator);
|
|
117
79
|
notifications.reach(entry.authority, scope);
|
|
118
|
-
const seen = [
|
|
119
|
-
...continued.seen,
|
|
120
|
-
...(scope.files.some((file) => file.path === entry.schema) ? [entry.schema] : []),
|
|
121
|
-
];
|
|
122
|
-
const models = await partModels(scope, entry, new Set(seen), !more);
|
|
123
80
|
return {
|
|
124
81
|
...(await stepped(bootstrapping(scope))),
|
|
125
|
-
...(models === undefined ? {} : { models }),
|
|
126
|
-
...(
|
|
127
|
-
|
|
82
|
+
...(part.models === undefined ? {} : { models: part.models }),
|
|
83
|
+
...(part.pageToken === undefined ? {} : { pageToken: part.pageToken }),
|
|
84
|
+
bytes: part.bytes,
|
|
128
85
|
};
|
|
129
86
|
}
|
|
87
|
+
async function openedRoom(entry, request) {
|
|
88
|
+
const reusing = unreused.delete(entry.locator) ? undefined : request.held;
|
|
89
|
+
const files = reusing === undefined
|
|
90
|
+
? null
|
|
91
|
+
: await heldFiles(entry.authority, reusing, declared().max_held_files);
|
|
92
|
+
const answered = await transport.streamed(DOOR_BOOTSTRAP, {
|
|
93
|
+
prefixes: [authorityRoot(entry.handle)],
|
|
94
|
+
...(files === null ? {} : { held: [files] }),
|
|
95
|
+
}, request.signal ?? new AbortController().signal);
|
|
96
|
+
if (answered.room === null)
|
|
97
|
+
return classifyDoor(answered.status, answered.body, entry.locator) ?? UNCERTAIN_READ;
|
|
98
|
+
return rooms.head(entry, answered.room, request.arriving, request.signal);
|
|
99
|
+
}
|
|
130
100
|
async function enumeratedPage(ask, page) {
|
|
131
101
|
const answer = await transport.door(DOOR_ENUMERATE, {
|
|
132
102
|
prefixes: [authorityRoot(ask.entry.handle)],
|
|
@@ -223,61 +193,6 @@ export function createAgentsHouseAdapter(options) {
|
|
|
223
193
|
return result;
|
|
224
194
|
return { ...result, at: { locator, roomVersion: roomVersion({ position, logEpoch }) } };
|
|
225
195
|
}
|
|
226
|
-
async function holding(asks) {
|
|
227
|
-
const bound = Math.floor(declared().max_held_files / Math.max(1, asks.filter((ask) => ask.held !== undefined).length));
|
|
228
|
-
const held = [];
|
|
229
|
-
for (const ask of asks) {
|
|
230
|
-
if (ask.held === undefined || bound === 0)
|
|
231
|
-
continue;
|
|
232
|
-
const files = await heldFiles(ask.entry.authority, ask.held, bound);
|
|
233
|
-
if (files !== null)
|
|
234
|
-
held.push(files);
|
|
235
|
-
}
|
|
236
|
-
return held;
|
|
237
|
-
}
|
|
238
|
-
async function bootstrapped(asks, answer) {
|
|
239
|
-
let open = asks.map((asked, ask) => ({ entry: asked.entry, asked, ask }));
|
|
240
|
-
while (open.length > 0) {
|
|
241
|
-
const unreached = [];
|
|
242
|
-
for (const part of selections(open, declared().max_prefixes)) {
|
|
243
|
-
const held = await holding(part.map(({ asked }) => asked));
|
|
244
|
-
const answered = await transport.door(DOOR_BOOTSTRAP, {
|
|
245
|
-
prefixes: part.map(({ entry }) => authorityRoot(entry.handle)),
|
|
246
|
-
...(held.length === 0 ? {} : { held }),
|
|
247
|
-
});
|
|
248
|
-
const classified = part.map(({ entry }) => classifyDoor(answered.status, answered.body, entry.locator));
|
|
249
|
-
const parted = classified[0] === null ? parseParted(answered.body) : null;
|
|
250
|
-
for (const [index, asked] of part.entries()) {
|
|
251
|
-
const failure = classified[index];
|
|
252
|
-
if (failure !== null && failure !== undefined) {
|
|
253
|
-
answer(asked.ask, failure);
|
|
254
|
-
continue;
|
|
255
|
-
}
|
|
256
|
-
if (parted === null) {
|
|
257
|
-
answer(asked.ask, UNCERTAIN_READ);
|
|
258
|
-
continue;
|
|
259
|
-
}
|
|
260
|
-
const room = parted.rooms.find((candidate) => candidate.anchor === asked.entry.authority);
|
|
261
|
-
if (room === undefined && parted.next !== undefined) {
|
|
262
|
-
unreached.push(asked);
|
|
263
|
-
continue;
|
|
264
|
-
}
|
|
265
|
-
if (room === undefined) {
|
|
266
|
-
answer(asked.ask, { kind: 'room-not-readable', locator: asked.entry.locator });
|
|
267
|
-
continue;
|
|
268
|
-
}
|
|
269
|
-
const kept = held.find((files) => files.room === asked.entry.authority);
|
|
270
|
-
answer(asked.ask, await manifestPage(asked.asked, {
|
|
271
|
-
room,
|
|
272
|
-
next: 0,
|
|
273
|
-
seen: [],
|
|
274
|
-
...(kept === undefined ? {} : { held: kept }),
|
|
275
|
-
}));
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
open = unreached;
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
196
|
function layered(asks) {
|
|
282
197
|
const depths = new Map();
|
|
283
198
|
const layers = [];
|
|
@@ -324,7 +239,6 @@ export function createAgentsHouseAdapter(options) {
|
|
|
324
239
|
}
|
|
325
240
|
return answers;
|
|
326
241
|
}
|
|
327
|
-
const bootstrapTogether = gatheredEach(bootstrapped);
|
|
328
242
|
const enumerateTogether = gathered(enumerated);
|
|
329
243
|
async function uploaded(head, changes, delta, bytes, entry, handed, keep) {
|
|
330
244
|
const paths = batchPaths(changes);
|
|
@@ -412,9 +326,22 @@ export function createAgentsHouseAdapter(options) {
|
|
|
412
326
|
function linked(answer, locator) {
|
|
413
327
|
const address = addressed(answer, locator);
|
|
414
328
|
return address.kind === 'address'
|
|
415
|
-
? { kind: 'link', url: address.url, name: address.name }
|
|
329
|
+
? { kind: 'link', url: address.url, name: address.name, mediaType: address.mediaType }
|
|
416
330
|
: address;
|
|
417
331
|
}
|
|
332
|
+
function refusedAttach(answer, locator) {
|
|
333
|
+
const failure = classifyDoor(answer.status, answer.body, locator);
|
|
334
|
+
if (failure === null)
|
|
335
|
+
return null;
|
|
336
|
+
return failure.kind === 'scoped-refusal'
|
|
337
|
+
? {
|
|
338
|
+
kind: 'rejected',
|
|
339
|
+
code: failure.code,
|
|
340
|
+
fields: failure.fields,
|
|
341
|
+
retryable: failure.retryable,
|
|
342
|
+
}
|
|
343
|
+
: failure;
|
|
344
|
+
}
|
|
418
345
|
async function downloaded(ask, locator) {
|
|
419
346
|
let address = addressed(await ask(), locator);
|
|
420
347
|
if (address.kind !== 'address')
|
|
@@ -495,11 +422,9 @@ export function createAgentsHouseAdapter(options) {
|
|
|
495
422
|
const entry = authorityFor(request.locator);
|
|
496
423
|
if (entry === undefined)
|
|
497
424
|
return { kind: 'room-not-readable', locator: request.locator };
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
}
|
|
502
|
-
return bootstrapTogether(asked);
|
|
425
|
+
return request.pageToken === undefined
|
|
426
|
+
? openedRoom(entry, request)
|
|
427
|
+
: streamedPage(entry, request.pageToken, request.held);
|
|
503
428
|
},
|
|
504
429
|
async refresh(_authorization, request) {
|
|
505
430
|
const entry = authorityFor(request.locator);
|
|
@@ -568,6 +493,35 @@ export function createAgentsHouseAdapter(options) {
|
|
|
568
493
|
return { kind: 'room-not-readable', locator: request.locator };
|
|
569
494
|
return linked(await ask(), request.locator);
|
|
570
495
|
},
|
|
496
|
+
async attach(_authorization, request) {
|
|
497
|
+
const entry = authorityFor(request.locator);
|
|
498
|
+
if (entry === undefined)
|
|
499
|
+
return { kind: 'room-not-readable', locator: request.locator };
|
|
500
|
+
const declared = await transport.door(DOOR_FILES_ATTACH, {
|
|
501
|
+
room_ref: entry.authority,
|
|
502
|
+
name: request.name,
|
|
503
|
+
bytes: request.byteLength,
|
|
504
|
+
sha256: request.sha256,
|
|
505
|
+
media_type: request.mediaType.length > 0 ? request.mediaType : OCTET_STREAM,
|
|
506
|
+
});
|
|
507
|
+
const refused = refusedAttach(declared, request.locator);
|
|
508
|
+
if (refused !== null)
|
|
509
|
+
return refused;
|
|
510
|
+
const upload = houseUpload(declared.body?.upload);
|
|
511
|
+
if (upload === null)
|
|
512
|
+
return UNCERTAIN_READ;
|
|
513
|
+
const finished = await finishedUpload(transport, upload, request.blob);
|
|
514
|
+
if (finished === null)
|
|
515
|
+
return UNCERTAIN_READ;
|
|
516
|
+
const unfinished = refusedAttach(finished, request.locator);
|
|
517
|
+
if (unfinished !== null)
|
|
518
|
+
return unfinished;
|
|
519
|
+
const { path, revision } = (finished.body ?? {});
|
|
520
|
+
const root = `/rooms/${entry.handle}/`;
|
|
521
|
+
return typeof path === 'string' && path.startsWith(root) && typeof revision === 'string'
|
|
522
|
+
? { kind: 'attached', path: path.slice(root.length), revision }
|
|
523
|
+
: UNCERTAIN_READ;
|
|
524
|
+
},
|
|
571
525
|
reached(locator, version, target) {
|
|
572
526
|
return reachedVersion(version, target, authorityFor(locator)?.logEpoch);
|
|
573
527
|
},
|
package/dist/discovery.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ export type HouseOperations = {
|
|
|
22
22
|
write: readonly string[];
|
|
23
23
|
delete: readonly string[];
|
|
24
24
|
};
|
|
25
|
-
export type
|
|
25
|
+
export type HouseAccessLevel = 'search' | 'open' | 'keep';
|
|
26
26
|
export type HouseAuthority = LogPosition & {
|
|
27
27
|
roomRef: string;
|
|
28
28
|
roomHandle: string;
|
|
@@ -31,7 +31,7 @@ export type HouseAuthority = LogPosition & {
|
|
|
31
31
|
typedSelection: readonly string[] | null;
|
|
32
32
|
managedReplication: 'admitted' | 'unavailable';
|
|
33
33
|
protectedPaths: readonly string[];
|
|
34
|
-
|
|
34
|
+
level: HouseAccessLevel;
|
|
35
35
|
operations: HouseOperations;
|
|
36
36
|
};
|
|
37
37
|
export type HouseDiscoveryDocument = {
|
|
@@ -62,7 +62,7 @@ export declare function siteTracked(document: HouseSiteDiscovery): TrackedAuthor
|
|
|
62
62
|
export declare function trackedFrom(document: HouseDiscoveryDocument): TrackedAuthority[];
|
|
63
63
|
export declare function providerLimits(bounds: HouseBounds): readonly ProviderLimit[];
|
|
64
64
|
export declare function declaredRetention(bounds: HouseBounds): Retention;
|
|
65
|
-
export declare function capabilities(actions: HouseDiscoveryDocument['actions'], rooms: readonly Pick<TrackedAuthority, 'authority' | '
|
|
65
|
+
export declare function capabilities(actions: HouseDiscoveryDocument['actions'], rooms: readonly Pick<TrackedAuthority, 'authority' | 'handle'>[]): readonly Capability[];
|
|
66
66
|
export declare function siteCapabilities(): readonly Capability[];
|
|
67
67
|
export declare function discoveredRoom(authority: HouseAuthority): DiscoveredRoom;
|
|
68
68
|
export declare function mapDiscovery(document: Pick<HouseDiscoveryDocument, 'bounds'>, rooms: readonly DiscoveredRoom[], declared: readonly Capability[]): Discovery;
|
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;
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
|
package/dist/discovery.js
CHANGED
|
@@ -2,6 +2,7 @@ import { declaredActions, houseConversationAgents, SITE_SUBMIT } from './actions
|
|
|
2
2
|
import { readPosition, roomVersion } from './version.js';
|
|
3
3
|
export const PROVIDER_ACTIONS = 'provider-actions';
|
|
4
4
|
export const DISCOVER_PREFIXES = ['/'];
|
|
5
|
+
const PRIVATE_HANDLE = 'private';
|
|
5
6
|
const BOUND_KEYS = [
|
|
6
7
|
'max_authored_file_bytes',
|
|
7
8
|
'max_batch_operations',
|
|
@@ -18,7 +19,7 @@ const BOUND_KEYS = [
|
|
|
18
19
|
'operation_retention_seconds',
|
|
19
20
|
];
|
|
20
21
|
const OPERATION_KEYS = ['write', 'delete'];
|
|
21
|
-
const
|
|
22
|
+
const ACCESS_LEVELS = ['search', 'open', 'keep'];
|
|
22
23
|
function stringList(value) {
|
|
23
24
|
if (!Array.isArray(value))
|
|
24
25
|
return null;
|
|
@@ -86,11 +87,11 @@ function parseAuthority(value) {
|
|
|
86
87
|
const typedSelection = parseTypedSelection(held.typed_selection);
|
|
87
88
|
const protectedPaths = stringList(held.protected_paths);
|
|
88
89
|
const operations = parseOperations(held.operations);
|
|
89
|
-
const
|
|
90
|
+
const level = ACCESS_LEVELS.find((one) => one === held.level);
|
|
90
91
|
if (at === null ||
|
|
91
92
|
typedSelection === undefined ||
|
|
92
93
|
protectedPaths === null ||
|
|
93
|
-
|
|
94
|
+
level === undefined ||
|
|
94
95
|
operations === null)
|
|
95
96
|
return null;
|
|
96
97
|
if (typeof held.room_ref !== 'string' || held.room_ref.length === 0)
|
|
@@ -105,7 +106,7 @@ function parseAuthority(value) {
|
|
|
105
106
|
typedSelection,
|
|
106
107
|
managedReplication: held.managed_replication,
|
|
107
108
|
protectedPaths,
|
|
108
|
-
|
|
109
|
+
level,
|
|
109
110
|
operations,
|
|
110
111
|
...at,
|
|
111
112
|
};
|
|
@@ -220,14 +221,12 @@ export function declaredRetention(bounds) {
|
|
|
220
221
|
};
|
|
221
222
|
}
|
|
222
223
|
export function capabilities(actions, rooms) {
|
|
223
|
-
const
|
|
224
|
+
const own = rooms.find((room) => room.handle === PRIVATE_HANDLE);
|
|
224
225
|
return [
|
|
225
226
|
{
|
|
226
227
|
name: PROVIDER_ACTIONS,
|
|
227
228
|
actions: declaredActions(actions),
|
|
228
|
-
...(
|
|
229
|
-
? {}
|
|
230
|
-
: { conversationAgents: houseConversationAgents(house.authority) }),
|
|
229
|
+
...(own === undefined ? {} : { conversationAgents: houseConversationAgents(own.authority) }),
|
|
231
230
|
},
|
|
232
231
|
];
|
|
233
232
|
}
|
|
@@ -253,7 +252,7 @@ export function discoveredRoom(authority) {
|
|
|
253
252
|
replica: {
|
|
254
253
|
selection: locator,
|
|
255
254
|
admission: authority.managedReplication,
|
|
256
|
-
offline: authority.
|
|
255
|
+
offline: authority.level === 'open' ? 'locked' : 'open',
|
|
257
256
|
},
|
|
258
257
|
...(authority.typedSelection === null
|
|
259
258
|
? {}
|
package/dist/gather.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export declare function gatheredEach<A, R>(send: (asks: readonly A[], answer: (ask: number, result: R) => void) => Promise<void>): (ask: A) => Promise<R>;
|
|
2
1
|
export declare function gathered<A, R>(send: (asks: readonly A[]) => Promise<readonly R[]>): (ask: A) => Promise<R>;
|
|
3
2
|
export declare function selections<T>(items: readonly T[], limit: number): readonly (readonly T[])[];
|
|
4
3
|
//# sourceMappingURL=gather.d.ts.map
|
package/dist/gather.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gather.d.ts","sourceRoot":"","sources":["../src/gather.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gather.d.ts","sourceRoot":"","sources":["../src/gather.ts"],"names":[],"mappings":"AAkCA,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAC3B,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,GAClD,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAMxB;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAO3F"}
|
package/dist/gather.js
CHANGED