@agentshouse/mdruntime-adapter 0.1.0-alpha.15 → 0.1.0-alpha.17
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 +9 -1
- package/dist/actions.d.ts +3 -8
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +54 -123
- package/dist/actions.js.map +1 -1
- package/dist/adapter.js +5 -5
- package/dist/adapter.js.map +1 -1
- package/dist/discovery.d.ts +0 -1
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +5 -20
- package/dist/discovery.js.map +1 -1
- package/dist/read.d.ts +0 -2
- package/dist/read.d.ts.map +1 -1
- package/dist/read.js +5 -8
- package/dist/read.js.map +1 -1
- package/dist/site.js +2 -2
- package/dist/site.js.map +1 -1
- package/dist/stream.d.ts +3 -3
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +19 -43
- package/dist/stream.js.map +1 -1
- package/dist/transport.d.ts +1 -3
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +1 -1
- package/dist/transport.js.map +1 -1
- package/package.json +2 -2
package/AGENTS.md
CHANGED
|
@@ -9,7 +9,15 @@ enforcement.
|
|
|
9
9
|
App code reaches the MD Runtime through the remote client. The surfaces are
|
|
10
10
|
Rooms, Slots, Query, Observe, Types, Draft, Save, Queue, History, Call, Log,
|
|
11
11
|
storage loss, the reported persistence answer, deployment facts, Sync Status, reauthorization,
|
|
12
|
-
conversation, the
|
|
12
|
+
conversation, the chat draft, and Presentation State.
|
|
13
|
+
|
|
14
|
+
Each conversation a Provider card names is held complete in the browser.
|
|
15
|
+
Observe one with `observe('conversation', id, { limit }, listener)`: the view
|
|
16
|
+
holds its latest `limit` messages, or all of them, oldest first, with the
|
|
17
|
+
growing text and the session summary while it is viewed, and its chat draft.
|
|
18
|
+
`chatDraft.write` and `chatDraft.discard` keep what the App Creator composes;
|
|
19
|
+
sending it is a Provider Action that needs the Provider reachable and is never
|
|
20
|
+
queued.
|
|
13
21
|
|
|
14
22
|
Slots answers each Slot the Provider declares, in its order, with its entries
|
|
15
23
|
in order, each a Room and its segment; a Room two Slots list is the same Room.
|
package/dist/actions.d.ts
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
|
-
import { type ActionDeclaration, type ActionRequest, type ActionResult, type ConversationCards } from '@agentshouse/mdruntime';
|
|
2
|
-
import type {
|
|
3
|
-
export declare const HISTORY_PAGE = 100;
|
|
1
|
+
import { type AcceptedMessage, type ActionDeclaration, type ActionRequest, type ActionResult, type ConversationCards } from '@agentshouse/mdruntime';
|
|
2
|
+
import type { HouseDoorAnswer, HouseTransport } from './transport.js';
|
|
4
3
|
export declare const HOUSE_CONVERSATION_CARDS: ConversationCards;
|
|
5
4
|
export declare function declaredActions(routes: readonly string[]): readonly ActionDeclaration[];
|
|
6
5
|
export declare function houseAction(transport: HouseTransport, request: ActionRequest): Promise<ActionResult>;
|
|
7
6
|
export declare function actionOutcome(answer: HouseDoorAnswer, name: string): ActionResult;
|
|
8
|
-
export declare function
|
|
9
|
-
messages: unknown[];
|
|
10
|
-
} | {
|
|
11
|
-
outcome: ActionResult;
|
|
12
|
-
}>;
|
|
7
|
+
export declare function acceptedMessage(entry: unknown): AcceptedMessage | null;
|
|
13
8
|
//# 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,EAEL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,iBAAiB,
|
|
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,iBAAiB,EAEvB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAiBtE,eAAO,MAAM,wBAAwB,EAAE,iBAKtC,CAAC;AAEF,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,iBAAiB,EAAE,CASvF;AAED,wBAAgB,WAAW,CACzB,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CAMvB;AAoED,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAWjF;AAuID,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAUtE"}
|
package/dist/actions.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { changeBatchIdentity } from '@agentshouse/mdruntime';
|
|
2
2
|
import { doorRefusal } from './refusal.js';
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import { PRIVATE_LOCATOR } from './transport.js';
|
|
4
|
+
const HISTORY_PAGE = 100;
|
|
5
5
|
const OCTET_STREAM = 'application/octet-stream';
|
|
6
6
|
const CONVERSATION_ROUTES = new Map([
|
|
7
7
|
[
|
|
@@ -38,7 +38,7 @@ const CONVERSATION_ROUTES = new Map([
|
|
|
38
38
|
]
|
|
39
39
|
]);
|
|
40
40
|
export const HOUSE_CONVERSATION_CARDS = {
|
|
41
|
-
locator:
|
|
41
|
+
locator: PRIVATE_LOCATOR,
|
|
42
42
|
type: 'conversation',
|
|
43
43
|
identity: 'conversation',
|
|
44
44
|
agent: 'agent'
|
|
@@ -271,148 +271,79 @@ async function sendAction(transport, input) {
|
|
|
271
271
|
return outcome;
|
|
272
272
|
}
|
|
273
273
|
function historyCursor(value) {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
parsed = JSON.parse(value);
|
|
277
|
-
} catch {
|
|
278
|
-
return null;
|
|
279
|
-
}
|
|
280
|
-
const acceptedAt = text(parsed, 'accepted_at');
|
|
281
|
-
const messageId = text(parsed, 'message_id');
|
|
274
|
+
const acceptedAt = text(value, 'accepted_at');
|
|
275
|
+
const messageId = text(value, 'message_id');
|
|
282
276
|
if (acceptedAt === undefined || messageId === undefined) return null;
|
|
283
277
|
return {
|
|
284
278
|
accepted_at: acceptedAt,
|
|
285
279
|
message_id: messageId
|
|
286
280
|
};
|
|
287
281
|
}
|
|
288
|
-
function
|
|
289
|
-
const turn = text(entry, 'message_id');
|
|
290
|
-
if (turn === undefined) return null;
|
|
291
|
-
return {
|
|
292
|
-
turn,
|
|
293
|
-
message: structuredClone(entry)
|
|
294
|
-
};
|
|
295
|
-
}
|
|
296
|
-
function olderCursor(entry) {
|
|
297
|
-
const acceptedAt = text(entry.message, 'accepted_at');
|
|
298
|
-
const messageId = text(entry.message, 'message_id');
|
|
299
|
-
if (acceptedAt === undefined || messageId === undefined) return null;
|
|
282
|
+
function position(cursor) {
|
|
300
283
|
return JSON.stringify({
|
|
301
|
-
accepted_at:
|
|
302
|
-
message_id:
|
|
284
|
+
accepted_at: cursor.accepted_at,
|
|
285
|
+
message_id: cursor.message_id
|
|
303
286
|
});
|
|
304
287
|
}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
conversation_id: conversationId,
|
|
311
|
-
...after === undefined ? {} : {
|
|
312
|
-
after
|
|
313
|
-
},
|
|
314
|
-
limit: HISTORY_PAGE
|
|
315
|
-
});
|
|
316
|
-
const outcome = actionOutcome(answer, 'conversation.history');
|
|
317
|
-
if (outcome.kind !== 'action') return {
|
|
318
|
-
outcome
|
|
319
|
-
};
|
|
320
|
-
const held = record(outcome.result);
|
|
321
|
-
if (!Array.isArray(held.messages)) return {
|
|
322
|
-
outcome: {
|
|
323
|
-
kind: 'transport-uncertainty'
|
|
324
|
-
}
|
|
325
|
-
};
|
|
326
|
-
for (const entry of held.messages){
|
|
327
|
-
if (text(entry, 'message_id') === undefined) {
|
|
328
|
-
return {
|
|
329
|
-
outcome: {
|
|
330
|
-
kind: 'transport-uncertainty'
|
|
331
|
-
}
|
|
332
|
-
};
|
|
333
|
-
}
|
|
334
|
-
messages.push(entry);
|
|
335
|
-
}
|
|
336
|
-
if (held.next === null || held.next === undefined) return {
|
|
337
|
-
messages
|
|
338
|
-
};
|
|
339
|
-
const next = record(held.next);
|
|
340
|
-
const acceptedAt = text(next, 'accepted_at');
|
|
341
|
-
const messageId = text(next, 'message_id');
|
|
342
|
-
if (acceptedAt === undefined || messageId === undefined) {
|
|
343
|
-
return {
|
|
344
|
-
outcome: {
|
|
345
|
-
kind: 'transport-uncertainty'
|
|
346
|
-
}
|
|
347
|
-
};
|
|
348
|
-
}
|
|
349
|
-
after = {
|
|
350
|
-
accepted_at: acceptedAt,
|
|
351
|
-
message_id: messageId
|
|
352
|
-
};
|
|
288
|
+
function positionCursor(value) {
|
|
289
|
+
try {
|
|
290
|
+
return historyCursor(JSON.parse(value));
|
|
291
|
+
} catch {
|
|
292
|
+
return null;
|
|
353
293
|
}
|
|
354
294
|
}
|
|
355
|
-
function
|
|
356
|
-
const
|
|
357
|
-
|
|
358
|
-
const first = page[0];
|
|
359
|
-
const cursor = from === 0 || first === undefined ? null : olderCursor(first);
|
|
360
|
-
if (from > 0 && cursor === null) return {
|
|
361
|
-
kind: 'transport-uncertainty'
|
|
362
|
-
};
|
|
295
|
+
export function acceptedMessage(entry) {
|
|
296
|
+
const cursor = historyCursor(entry);
|
|
297
|
+
if (cursor === null) return null;
|
|
363
298
|
return {
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
cursor
|
|
370
|
-
}
|
|
371
|
-
}
|
|
299
|
+
identity: cursor.message_id,
|
|
300
|
+
turn: cursor.message_id,
|
|
301
|
+
position: position(cursor),
|
|
302
|
+
text: text(entry, 'text') ?? '',
|
|
303
|
+
message: structuredClone(entry)
|
|
372
304
|
};
|
|
373
305
|
}
|
|
374
306
|
async function historyAction(transport, input) {
|
|
375
307
|
const conversationId = text(input, 'conversation');
|
|
376
308
|
if (conversationId === undefined) return malformed();
|
|
377
|
-
const
|
|
378
|
-
|
|
379
|
-
if (
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
if ('outcome' in held) return held.outcome;
|
|
309
|
+
const afterValue = text(input, 'after');
|
|
310
|
+
const after = afterValue === undefined ? undefined : positionCursor(afterValue);
|
|
311
|
+
if (after === null) return malformed();
|
|
312
|
+
const answer = await transport.door('/door/conversations/history', {
|
|
313
|
+
conversation_id: conversationId,
|
|
314
|
+
...after === undefined ? {} : {
|
|
315
|
+
after
|
|
316
|
+
},
|
|
317
|
+
limit: HISTORY_PAGE
|
|
318
|
+
});
|
|
319
|
+
const outcome = actionOutcome(answer, 'conversation.history');
|
|
320
|
+
if (outcome.kind !== 'action') return outcome;
|
|
321
|
+
const held = record(outcome.result);
|
|
322
|
+
if (!Array.isArray(held.messages)) return {
|
|
323
|
+
kind: 'transport-uncertainty'
|
|
324
|
+
};
|
|
394
325
|
const messages = [];
|
|
395
326
|
for (const entry of held.messages){
|
|
396
|
-
const
|
|
397
|
-
if (
|
|
327
|
+
const message = acceptedMessage(entry);
|
|
328
|
+
if (message === null) return {
|
|
398
329
|
kind: 'transport-uncertainty'
|
|
399
330
|
};
|
|
400
|
-
messages.push(
|
|
331
|
+
messages.push(message);
|
|
401
332
|
}
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
333
|
+
const next = held.next === null || held.next === undefined ? undefined : historyCursor(held.next);
|
|
334
|
+
if (next === null) return {
|
|
335
|
+
kind: 'transport-uncertainty'
|
|
336
|
+
};
|
|
337
|
+
const page = {
|
|
338
|
+
messages,
|
|
339
|
+
...next === undefined ? {} : {
|
|
340
|
+
next: position(next)
|
|
341
|
+
}
|
|
342
|
+
};
|
|
343
|
+
return {
|
|
344
|
+
kind: 'action',
|
|
345
|
+
result: page
|
|
346
|
+
};
|
|
416
347
|
}
|
|
417
348
|
|
|
418
349
|
//# sourceMappingURL=actions.js.map
|
package/dist/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/workspace/packages/mdruntime-adapter/src/actions.ts"],"sourcesContent":["import {\n changeBatchIdentity,\n type ActionDeclaration,\n type ActionRequest,\n type ActionResult,\n type ConversationCards,\n} from '@agentshouse/mdruntime';\nimport { doorRefusal } from './refusal.js';\nimport { PRIVATE_AUTHORITY } from './transport.js';\nimport type { HouseDoor, HouseDoorAnswer, HouseTransport } from './transport.js';\n\nexport const HISTORY_PAGE = 100;\n\nconst OCTET_STREAM = 'application/octet-stream';\n\nconst CONVERSATION_ROUTES: ReadonlyMap<string, string> = new Map([\n ['conversation.create', '/door/conversations/create'],\n ['conversation.send', '/door/conversations/send'],\n ['conversation.answer', '/door/conversations/interaction/answer'],\n ['conversation.interrupt', '/door/conversations/interrupt'],\n ['conversation.kill', '/door/conversations/kill'],\n ['conversation.cancel', '/door/conversations/cancel'],\n ['conversation.delete', '/door/conversations/delete'],\n ['conversation.history', '/door/conversations/history'],\n]);\n\nexport const HOUSE_CONVERSATION_CARDS: ConversationCards = {\n locator: PRIVATE_AUTHORITY,\n type: 'conversation',\n identity: 'conversation',\n agent: 'agent',\n};\n\nexport function declaredActions(routes: readonly string[]): readonly ActionDeclaration[] {\n const mapped = new Map(\n [...CONVERSATION_ROUTES].map(([name, route]) => [route.slice('/door/'.length), name]),\n );\n return routes.map((route) => ({\n name: mapped.get(route) ?? route,\n inputShape: {},\n resultKind: 'house',\n }));\n}\n\nexport function houseAction(\n transport: HouseTransport,\n request: ActionRequest,\n): Promise<ActionResult> {\n if (request.name === 'conversation.send') return sendAction(transport, request.input);\n if (request.name === 'conversation.history') return historyAction(transport, request.input);\n const route = routeOf(request.name);\n if (route === null) return Promise.resolve(malformed());\n return carry(transport, route, request.name, request.input);\n}\n\nfunction routeOf(name: string): string | null {\n const mapped = CONVERSATION_ROUTES.get(name);\n if (mapped !== undefined) return mapped;\n const parts = name.split('/');\n if (parts.some((part) => part === '.' || part === '..')) return null;\n try {\n return `/door/${parts.map(encodeURIComponent).join('/')}`;\n } catch {\n return null;\n }\n}\n\nfunction record(value: unknown): Record<string, unknown> {\n return typeof value === 'object' && value !== null ? (value as Record<string, unknown>) : {};\n}\n\nfunction text(value: unknown, name: string): string | undefined {\n const held = record(value)[name];\n return typeof held === 'string' ? held : undefined;\n}\n\nfunction operationId(input: unknown): string {\n return text(input, 'operation_id') ?? changeBatchIdentity();\n}\n\nfunction malformed(): ActionResult {\n return { kind: 'rejected', code: 'invalid_request', fields: {} };\n}\n\nfunction bodyOf(name: string, input: unknown): unknown {\n if (name === 'conversation.create') {\n return { agent_id: text(input, 'agent_id'), operation_id: operationId(input) };\n }\n if (\n name === 'conversation.interrupt' ||\n name === 'conversation.kill' ||\n name === 'conversation.delete'\n ) {\n return { conversation_id: text(input, 'conversation'), operation_id: operationId(input) };\n }\n if (name === 'conversation.cancel') {\n return {\n conversation_id: text(input, 'conversation'),\n message_id: text(input, 'turn'),\n operation_id: operationId(input),\n };\n }\n if (name === 'conversation.answer') {\n const nested = record(record(input).answer);\n return {\n conversation_id: text(input, 'conversation'),\n operation_id: operationId(input),\n interaction_id: text(nested, 'interaction_id'),\n revision: nested.revision,\n response: nested.response,\n };\n }\n return input;\n}\n\nfunction withTurn(body: unknown): unknown {\n const held = record(body);\n const turn = text(held, 'message_id');\n return turn === undefined ? body : { ...held, turn };\n}\n\nexport function actionOutcome(answer: HouseDoorAnswer, name: string): ActionResult {\n if (answer.status === 401) return { kind: 'revoked-authorization' };\n const refusal = doorRefusal(answer.body);\n if (refusal !== null) {\n return { kind: 'rejected', code: refusal.code, fields: refusal.fields };\n }\n if (answer.status === 404)\n return { kind: 'rejected', code: 'action-unimplemented', fields: { name } };\n if (answer.status === 0 || answer.status >= 400) return { kind: 'transport-uncertainty' };\n if (name === 'conversation.send') return { kind: 'action', result: withTurn(answer.body) };\n return { kind: 'action', result: answer.body };\n}\n\nasync function carry(\n transport: HouseTransport,\n route: string,\n name: string,\n input: unknown,\n): Promise<ActionResult> {\n const answer = await transport.door(route, bodyOf(name, input));\n return actionOutcome(answer, name);\n}\n\nfunction sendFile(entry: unknown): Record<string, unknown> | null {\n const file = record(entry);\n const name = text(file, 'name');\n const bytes = file.byteLength;\n const sha256 = text(file, 'contentHash');\n if (name === undefined || typeof bytes !== 'number' || sha256 === undefined) return null;\n const mediaType = text(file, 'mediaType');\n const width = file.width;\n const height = file.height;\n return {\n name,\n media_type: mediaType !== undefined && mediaType.length > 0 ? mediaType : OCTET_STREAM,\n bytes,\n sha256,\n ...(typeof width === 'number' && typeof height === 'number'\n ? { dimensions: { width, height } }\n : {}),\n };\n}\n\nfunction sendFiles(input: unknown): readonly Record<string, unknown>[] | null {\n const files = record(input).files;\n if (files === undefined) return [];\n if (!Array.isArray(files)) return null;\n const declared: Record<string, unknown>[] = [];\n for (const entry of files) {\n const file = sendFile(entry);\n if (file === null) return null;\n declared.push(file);\n }\n return declared;\n}\n\nfunction sendBody(input: unknown): Record<string, unknown> | null {\n const files = sendFiles(input);\n if (files === null) return null;\n const textValue = text(input, 'text');\n return {\n conversation_id: text(input, 'conversation'),\n operation_id: operationId(input),\n ...(textValue !== undefined && textValue.length > 0 ? { text: textValue } : {}),\n ...(files.length === 0 ? {} : { files }),\n };\n}\n\nasync function fileBytes(file: unknown): Promise<Uint8Array | null> {\n const blob = record(file).blob;\n if (blob === undefined || typeof blob !== 'object' || blob === null) return null;\n if (!('arrayBuffer' in blob) || typeof blob.arrayBuffer !== 'function') return null;\n return new Uint8Array(await (blob as Blob).arrayBuffer());\n}\n\nfunction uploadGrant(\n entry: unknown,\n): { method: 'POST'; operation: string; url: string } | 'absent' | null {\n if (!('upload' in record(entry))) return 'absent';\n const upload = record(record(entry).upload);\n if (upload.method !== 'POST') return null;\n if (typeof upload.operation !== 'string' || typeof upload.url !== 'string') return null;\n return { method: 'POST', operation: upload.operation, url: upload.url };\n}\n\nasync function uploadOriginals(\n transport: HouseTransport,\n input: unknown,\n result: unknown,\n): Promise<ActionResult | null> {\n const originals = record(result).originals;\n if (!Array.isArray(originals) || originals.length === 0) return null;\n const files = Array.isArray(record(input).files) ? (record(input).files as unknown[]) : [];\n for (const [index, entry] of originals.entries()) {\n const grant = uploadGrant(entry);\n if (grant === 'absent') continue;\n if (grant === null) return malformed();\n const bytes = index < files.length ? await fileBytes(files[index]) : null;\n if (bytes === null) {\n return { kind: 'rejected', code: 'conversation_original_descriptor_required', fields: {} };\n }\n const delivered = await transport.transfer({\n act: 'conversation_original_upload',\n method: 'POST',\n url: grant.url,\n body: bytes,\n operation: grant.operation,\n });\n if (delivered.status === 200) continue;\n return actionOutcome(delivered, 'conversation.send');\n }\n return null;\n}\n\nasync function sendAction(transport: HouseTransport, input: unknown): Promise<ActionResult> {\n const body = sendBody(input);\n if (body === null) return malformed();\n const answer = await transport.door('/door/conversations/send', body);\n const outcome = actionOutcome(answer, 'conversation.send');\n if (outcome.kind !== 'action') return outcome;\n const uploaded = await uploadOriginals(transport, input, outcome.result);\n if (uploaded !== null) return uploaded;\n return outcome;\n}\n\ntype HistoryCursor = { accepted_at: string; message_id: string };\n\nfunction historyCursor(value: string): HistoryCursor | null {\n let parsed: unknown;\n try {\n parsed = JSON.parse(value) as unknown;\n } catch {\n return null;\n }\n const acceptedAt = text(parsed, 'accepted_at');\n const messageId = text(parsed, 'message_id');\n if (acceptedAt === undefined || messageId === undefined) return null;\n return { accepted_at: acceptedAt, message_id: messageId };\n}\n\nfunction turned(entry: unknown): { turn: string; message: unknown } | null {\n const turn = text(entry, 'message_id');\n if (turn === undefined) return null;\n return { turn, message: structuredClone(entry) };\n}\n\nfunction olderCursor(entry: { message: unknown }): string | null {\n const acceptedAt = text(entry.message, 'accepted_at');\n const messageId = text(entry.message, 'message_id');\n if (acceptedAt === undefined || messageId === undefined) return null;\n return JSON.stringify({ accepted_at: acceptedAt, message_id: messageId });\n}\n\nexport async function readConversationHistory(\n transport: HouseDoor,\n conversationId: string,\n): Promise<{ messages: unknown[] } | { outcome: ActionResult }> {\n const messages: unknown[] = [];\n let after: HistoryCursor | undefined;\n for (;;) {\n const answer = await transport.door('/door/conversations/history', {\n conversation_id: conversationId,\n ...(after === undefined ? {} : { after }),\n limit: HISTORY_PAGE,\n });\n const outcome = actionOutcome(answer, 'conversation.history');\n if (outcome.kind !== 'action') return { outcome };\n const held = record(outcome.result);\n if (!Array.isArray(held.messages)) return { outcome: { kind: 'transport-uncertainty' } };\n for (const entry of held.messages) {\n if (text(entry, 'message_id') === undefined) {\n return { outcome: { kind: 'transport-uncertainty' } };\n }\n messages.push(entry);\n }\n if (held.next === null || held.next === undefined) return { messages };\n const next = record(held.next);\n const acceptedAt = text(next, 'accepted_at');\n const messageId = text(next, 'message_id');\n if (acceptedAt === undefined || messageId === undefined) {\n return { outcome: { kind: 'transport-uncertainty' } };\n }\n after = { accepted_at: acceptedAt, message_id: messageId };\n }\n}\n\nfunction historyPage(\n conversationId: string,\n messages: readonly { turn: string; message: unknown }[],\n until: number,\n): ActionResult {\n const from = Math.max(0, until - HISTORY_PAGE);\n const page = messages.slice(from, until);\n const first = page[0];\n const cursor = from === 0 || first === undefined ? null : olderCursor(first);\n if (from > 0 && cursor === null) return { kind: 'transport-uncertainty' };\n return {\n kind: 'action',\n result: {\n conversation_id: conversationId,\n messages: page,\n ...(cursor === null ? {} : { cursor }),\n },\n };\n}\n\nasync function historyAction(transport: HouseTransport, input: unknown): Promise<ActionResult> {\n const conversationId = text(input, 'conversation');\n if (conversationId === undefined) return malformed();\n const cursorValue = text(input, 'cursor');\n let olderThan: HistoryCursor | undefined;\n if (cursorValue !== undefined) {\n const parsed = historyCursor(cursorValue);\n if (parsed === null) {\n return { kind: 'rejected', code: 'unknown-cursor', fields: { cursor: cursorValue } };\n }\n olderThan = parsed;\n }\n const held = await readConversationHistory(transport, conversationId);\n if ('outcome' in held) return held.outcome;\n const messages: { turn: string; message: unknown }[] = [];\n for (const entry of held.messages) {\n const mapped = turned(entry);\n if (mapped === null) return { kind: 'transport-uncertainty' };\n messages.push(mapped);\n }\n if (olderThan === undefined) {\n return historyPage(conversationId, messages, messages.length);\n }\n const at = messages.findIndex(\n (entry) =>\n text(entry.message, 'accepted_at') === olderThan.accepted_at &&\n text(entry.message, 'message_id') === olderThan.message_id,\n );\n if (at === -1) {\n return { kind: 'rejected', code: 'unknown-cursor', fields: { cursor: cursorValue } };\n }\n return historyPage(conversationId, messages, at);\n}\n"],"names":["changeBatchIdentity","doorRefusal","PRIVATE_AUTHORITY","HISTORY_PAGE","OCTET_STREAM","CONVERSATION_ROUTES","Map","HOUSE_CONVERSATION_CARDS","locator","type","identity","agent","declaredActions","routes","mapped","map","name","route","slice","length","get","inputShape","resultKind","houseAction","transport","request","sendAction","input","historyAction","routeOf","Promise","resolve","malformed","carry","undefined","parts","split","some","part","encodeURIComponent","join","record","value","text","held","operationId","kind","code","fields","bodyOf","agent_id","operation_id","conversation_id","message_id","nested","answer","interaction_id","revision","response","withTurn","body","turn","actionOutcome","status","refusal","result","door","sendFile","entry","file","bytes","byteLength","sha256","mediaType","width","height","media_type","dimensions","sendFiles","files","Array","isArray","declared","push","sendBody","textValue","fileBytes","blob","arrayBuffer","Uint8Array","uploadGrant","upload","method","operation","url","uploadOriginals","originals","index","entries","grant","delivered","transfer","act","outcome","uploaded","historyCursor","parsed","JSON","parse","acceptedAt","messageId","accepted_at","turned","message","structuredClone","olderCursor","stringify","readConversationHistory","conversationId","messages","after","limit","next","historyPage","until","from","Math","max","page","first","cursor","cursorValue","olderThan","at","findIndex"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime-adapter/src/actions.ts"],"sourcesContent":["import {\n changeBatchIdentity,\n type AcceptedMessage,\n type ActionDeclaration,\n type ActionRequest,\n type ActionResult,\n type ConversationCards,\n type ConversationHistoryPage,\n} from '@agentshouse/mdruntime';\nimport { doorRefusal } from './refusal.js';\nimport { PRIVATE_LOCATOR } from './transport.js';\nimport type { HouseDoorAnswer, HouseTransport } from './transport.js';\n\nconst HISTORY_PAGE = 100;\n\nconst OCTET_STREAM = 'application/octet-stream';\n\nconst CONVERSATION_ROUTES: ReadonlyMap<string, string> = new Map([\n ['conversation.create', '/door/conversations/create'],\n ['conversation.send', '/door/conversations/send'],\n ['conversation.answer', '/door/conversations/interaction/answer'],\n ['conversation.interrupt', '/door/conversations/interrupt'],\n ['conversation.kill', '/door/conversations/kill'],\n ['conversation.cancel', '/door/conversations/cancel'],\n ['conversation.delete', '/door/conversations/delete'],\n ['conversation.history', '/door/conversations/history'],\n]);\n\nexport const HOUSE_CONVERSATION_CARDS: ConversationCards = {\n locator: PRIVATE_LOCATOR,\n type: 'conversation',\n identity: 'conversation',\n agent: 'agent',\n};\n\nexport function declaredActions(routes: readonly string[]): readonly ActionDeclaration[] {\n const mapped = new Map(\n [...CONVERSATION_ROUTES].map(([name, route]) => [route.slice('/door/'.length), name]),\n );\n return routes.map((route) => ({\n name: mapped.get(route) ?? route,\n inputShape: {},\n resultKind: 'house',\n }));\n}\n\nexport function houseAction(\n transport: HouseTransport,\n request: ActionRequest,\n): Promise<ActionResult> {\n if (request.name === 'conversation.send') return sendAction(transport, request.input);\n if (request.name === 'conversation.history') return historyAction(transport, request.input);\n const route = routeOf(request.name);\n if (route === null) return Promise.resolve(malformed());\n return carry(transport, route, request.name, request.input);\n}\n\nfunction routeOf(name: string): string | null {\n const mapped = CONVERSATION_ROUTES.get(name);\n if (mapped !== undefined) return mapped;\n const parts = name.split('/');\n if (parts.some((part) => part === '.' || part === '..')) return null;\n try {\n return `/door/${parts.map(encodeURIComponent).join('/')}`;\n } catch {\n return null;\n }\n}\n\nfunction record(value: unknown): Record<string, unknown> {\n return typeof value === 'object' && value !== null ? (value as Record<string, unknown>) : {};\n}\n\nfunction text(value: unknown, name: string): string | undefined {\n const held = record(value)[name];\n return typeof held === 'string' ? held : undefined;\n}\n\nfunction operationId(input: unknown): string {\n return text(input, 'operation_id') ?? changeBatchIdentity();\n}\n\nfunction malformed(): ActionResult {\n return { kind: 'rejected', code: 'invalid_request', fields: {} };\n}\n\nfunction bodyOf(name: string, input: unknown): unknown {\n if (name === 'conversation.create') {\n return { agent_id: text(input, 'agent_id'), operation_id: operationId(input) };\n }\n if (\n name === 'conversation.interrupt' ||\n name === 'conversation.kill' ||\n name === 'conversation.delete'\n ) {\n return { conversation_id: text(input, 'conversation'), operation_id: operationId(input) };\n }\n if (name === 'conversation.cancel') {\n return {\n conversation_id: text(input, 'conversation'),\n message_id: text(input, 'turn'),\n operation_id: operationId(input),\n };\n }\n if (name === 'conversation.answer') {\n const nested = record(record(input).answer);\n return {\n conversation_id: text(input, 'conversation'),\n operation_id: operationId(input),\n interaction_id: text(nested, 'interaction_id'),\n revision: nested.revision,\n response: nested.response,\n };\n }\n return input;\n}\n\nfunction withTurn(body: unknown): unknown {\n const held = record(body);\n const turn = text(held, 'message_id');\n return turn === undefined ? body : { ...held, turn };\n}\n\nexport function actionOutcome(answer: HouseDoorAnswer, name: string): ActionResult {\n if (answer.status === 401) return { kind: 'revoked-authorization' };\n const refusal = doorRefusal(answer.body);\n if (refusal !== null) {\n return { kind: 'rejected', code: refusal.code, fields: refusal.fields };\n }\n if (answer.status === 404)\n return { kind: 'rejected', code: 'action-unimplemented', fields: { name } };\n if (answer.status === 0 || answer.status >= 400) return { kind: 'transport-uncertainty' };\n if (name === 'conversation.send') return { kind: 'action', result: withTurn(answer.body) };\n return { kind: 'action', result: answer.body };\n}\n\nasync function carry(\n transport: HouseTransport,\n route: string,\n name: string,\n input: unknown,\n): Promise<ActionResult> {\n const answer = await transport.door(route, bodyOf(name, input));\n return actionOutcome(answer, name);\n}\n\nfunction sendFile(entry: unknown): Record<string, unknown> | null {\n const file = record(entry);\n const name = text(file, 'name');\n const bytes = file.byteLength;\n const sha256 = text(file, 'contentHash');\n if (name === undefined || typeof bytes !== 'number' || sha256 === undefined) return null;\n const mediaType = text(file, 'mediaType');\n const width = file.width;\n const height = file.height;\n return {\n name,\n media_type: mediaType !== undefined && mediaType.length > 0 ? mediaType : OCTET_STREAM,\n bytes,\n sha256,\n ...(typeof width === 'number' && typeof height === 'number'\n ? { dimensions: { width, height } }\n : {}),\n };\n}\n\nfunction sendFiles(input: unknown): readonly Record<string, unknown>[] | null {\n const files = record(input).files;\n if (files === undefined) return [];\n if (!Array.isArray(files)) return null;\n const declared: Record<string, unknown>[] = [];\n for (const entry of files) {\n const file = sendFile(entry);\n if (file === null) return null;\n declared.push(file);\n }\n return declared;\n}\n\nfunction sendBody(input: unknown): Record<string, unknown> | null {\n const files = sendFiles(input);\n if (files === null) return null;\n const textValue = text(input, 'text');\n return {\n conversation_id: text(input, 'conversation'),\n operation_id: operationId(input),\n ...(textValue !== undefined && textValue.length > 0 ? { text: textValue } : {}),\n ...(files.length === 0 ? {} : { files }),\n };\n}\n\nasync function fileBytes(file: unknown): Promise<Uint8Array | null> {\n const blob = record(file).blob;\n if (blob === undefined || typeof blob !== 'object' || blob === null) return null;\n if (!('arrayBuffer' in blob) || typeof blob.arrayBuffer !== 'function') return null;\n return new Uint8Array(await (blob as Blob).arrayBuffer());\n}\n\nfunction uploadGrant(\n entry: unknown,\n): { method: 'POST'; operation: string; url: string } | 'absent' | null {\n if (!('upload' in record(entry))) return 'absent';\n const upload = record(record(entry).upload);\n if (upload.method !== 'POST') return null;\n if (typeof upload.operation !== 'string' || typeof upload.url !== 'string') return null;\n return { method: 'POST', operation: upload.operation, url: upload.url };\n}\n\nasync function uploadOriginals(\n transport: HouseTransport,\n input: unknown,\n result: unknown,\n): Promise<ActionResult | null> {\n const originals = record(result).originals;\n if (!Array.isArray(originals) || originals.length === 0) return null;\n const files = Array.isArray(record(input).files) ? (record(input).files as unknown[]) : [];\n for (const [index, entry] of originals.entries()) {\n const grant = uploadGrant(entry);\n if (grant === 'absent') continue;\n if (grant === null) return malformed();\n const bytes = index < files.length ? await fileBytes(files[index]) : null;\n if (bytes === null) {\n return { kind: 'rejected', code: 'conversation_original_descriptor_required', fields: {} };\n }\n const delivered = await transport.transfer({\n act: 'conversation_original_upload',\n method: 'POST',\n url: grant.url,\n body: bytes,\n operation: grant.operation,\n });\n if (delivered.status === 200) continue;\n return actionOutcome(delivered, 'conversation.send');\n }\n return null;\n}\n\nasync function sendAction(transport: HouseTransport, input: unknown): Promise<ActionResult> {\n const body = sendBody(input);\n if (body === null) return malformed();\n const answer = await transport.door('/door/conversations/send', body);\n const outcome = actionOutcome(answer, 'conversation.send');\n if (outcome.kind !== 'action') return outcome;\n const uploaded = await uploadOriginals(transport, input, outcome.result);\n if (uploaded !== null) return uploaded;\n return outcome;\n}\n\ntype HistoryCursor = { accepted_at: string; message_id: string };\n\nfunction historyCursor(value: unknown): HistoryCursor | null {\n const acceptedAt = text(value, 'accepted_at');\n const messageId = text(value, 'message_id');\n if (acceptedAt === undefined || messageId === undefined) return null;\n return { accepted_at: acceptedAt, message_id: messageId };\n}\n\nfunction position(cursor: HistoryCursor): string {\n return JSON.stringify({ accepted_at: cursor.accepted_at, message_id: cursor.message_id });\n}\n\nfunction positionCursor(value: string): HistoryCursor | null {\n try {\n return historyCursor(JSON.parse(value) as unknown);\n } catch {\n return null;\n }\n}\n\nexport function acceptedMessage(entry: unknown): AcceptedMessage | null {\n const cursor = historyCursor(entry);\n if (cursor === null) return null;\n return {\n identity: cursor.message_id,\n turn: cursor.message_id,\n position: position(cursor),\n text: text(entry, 'text') ?? '',\n message: structuredClone(entry),\n };\n}\n\nasync function historyAction(transport: HouseTransport, input: unknown): Promise<ActionResult> {\n const conversationId = text(input, 'conversation');\n if (conversationId === undefined) return malformed();\n const afterValue = text(input, 'after');\n const after = afterValue === undefined ? undefined : positionCursor(afterValue);\n if (after === null) return malformed();\n const answer = await transport.door('/door/conversations/history', {\n conversation_id: conversationId,\n ...(after === undefined ? {} : { after }),\n limit: HISTORY_PAGE,\n });\n const outcome = actionOutcome(answer, 'conversation.history');\n if (outcome.kind !== 'action') return outcome;\n const held = record(outcome.result);\n if (!Array.isArray(held.messages)) return { kind: 'transport-uncertainty' };\n const messages: AcceptedMessage[] = [];\n for (const entry of held.messages) {\n const message = acceptedMessage(entry);\n if (message === null) return { kind: 'transport-uncertainty' };\n messages.push(message);\n }\n const next = held.next === null || held.next === undefined ? undefined : historyCursor(held.next);\n if (next === null) return { kind: 'transport-uncertainty' };\n const page: ConversationHistoryPage = {\n messages,\n ...(next === undefined ? {} : { next: position(next) }),\n };\n return { kind: 'action', result: page };\n}\n"],"names":["changeBatchIdentity","doorRefusal","PRIVATE_LOCATOR","HISTORY_PAGE","OCTET_STREAM","CONVERSATION_ROUTES","Map","HOUSE_CONVERSATION_CARDS","locator","type","identity","agent","declaredActions","routes","mapped","map","name","route","slice","length","get","inputShape","resultKind","houseAction","transport","request","sendAction","input","historyAction","routeOf","Promise","resolve","malformed","carry","undefined","parts","split","some","part","encodeURIComponent","join","record","value","text","held","operationId","kind","code","fields","bodyOf","agent_id","operation_id","conversation_id","message_id","nested","answer","interaction_id","revision","response","withTurn","body","turn","actionOutcome","status","refusal","result","door","sendFile","entry","file","bytes","byteLength","sha256","mediaType","width","height","media_type","dimensions","sendFiles","files","Array","isArray","declared","push","sendBody","textValue","fileBytes","blob","arrayBuffer","Uint8Array","uploadGrant","upload","method","operation","url","uploadOriginals","originals","index","entries","grant","delivered","transfer","act","outcome","uploaded","historyCursor","acceptedAt","messageId","accepted_at","position","cursor","JSON","stringify","positionCursor","parse","acceptedMessage","message","structuredClone","conversationId","afterValue","after","limit","messages","next","page"],"mappings":"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"}
|
package/dist/adapter.js
CHANGED
|
@@ -5,7 +5,7 @@ import { authorityRoot, bootstrapFrom, contentPrefixes, definitionsFrom, modelPr
|
|
|
5
5
|
import { houseAction } from './actions.js';
|
|
6
6
|
import { classifyDoor, discoveryFailure } from './refusal.js';
|
|
7
7
|
import { houseNotifications } from './stream.js';
|
|
8
|
-
import { DOOR_BATCH, DOOR_BATCH_UPLOAD, DOOR_BOOTSTRAP, DOOR_DISCOVER, DOOR_ENUMERATE, DOOR_REVISIONS,
|
|
8
|
+
import { DOOR_BATCH, DOOR_BATCH_UPLOAD, DOOR_BOOTSTRAP, DOOR_DISCOVER, DOOR_ENUMERATE, DOOR_REVISIONS, PRIVATE_LOCATOR } from './transport.js';
|
|
9
9
|
import { batchPaths, deltaBody, deltaBytes, deltaDigest, historyOutcome, houseChanges, mutationOutcome, operationHead, rejectedMapping, revisionBody, uploadable } from './write.js';
|
|
10
10
|
import { logPosition, presented } from './version.js';
|
|
11
11
|
const UNCERTAIN = {
|
|
@@ -40,7 +40,7 @@ export function createAgentsHouseAdapter(options) {
|
|
|
40
40
|
}
|
|
41
41
|
async function acquireModels(entries) {
|
|
42
42
|
const acquired = new Map();
|
|
43
|
-
const privateEntry = entries.find((entry)=>entry.
|
|
43
|
+
const privateEntry = entries.find((entry)=>entry.locator === PRIVATE_LOCATOR);
|
|
44
44
|
const prefixes = entries.map((entry)=>modelPrefix(entry, entry.modelRoot));
|
|
45
45
|
if (privateEntry !== undefined) {
|
|
46
46
|
prefixes.push(`${authorityRoot(undefined)}/${PROVIDER_SELECTION_MODEL_ROOT}`);
|
|
@@ -48,7 +48,7 @@ export function createAgentsHouseAdapter(options) {
|
|
|
48
48
|
const answer = await transport.door(DOOR_BOOTSTRAP, {
|
|
49
49
|
prefixes
|
|
50
50
|
});
|
|
51
|
-
const classified = classifyDoor(answer.status, answer.body,
|
|
51
|
+
const classified = classifyDoor(answer.status, answer.body, PRIVATE_LOCATOR);
|
|
52
52
|
const envelope = classified === null ? parseEnvelope(await bundled(answer.body)) : null;
|
|
53
53
|
const failure = modelFailure(classified, envelope);
|
|
54
54
|
for (const entry of entries){
|
|
@@ -63,7 +63,7 @@ export function createAgentsHouseAdapter(options) {
|
|
|
63
63
|
const locator = locatorOf(authority);
|
|
64
64
|
const key = modelKey(locator, 'collection');
|
|
65
65
|
const collection = models.retain(key, acquired.get(key));
|
|
66
|
-
if (authority.
|
|
66
|
+
if (authority.roomHandle !== null) {
|
|
67
67
|
return discoveredRoom(authority, collection?.identity ?? null, undefined);
|
|
68
68
|
}
|
|
69
69
|
const selection = models.retain(modelKey(locator, 'typed-selection'), acquired.get(modelKey(locator, 'typed-selection')));
|
|
@@ -160,7 +160,7 @@ export function createAgentsHouseAdapter(options) {
|
|
|
160
160
|
...DISCOVER_PREFIXES
|
|
161
161
|
]
|
|
162
162
|
});
|
|
163
|
-
const classified = classifyDoor(answer.status, answer.body,
|
|
163
|
+
const classified = classifyDoor(answer.status, answer.body, PRIVATE_LOCATOR);
|
|
164
164
|
if (classified !== null) return discoveryFailure(classified);
|
|
165
165
|
const document = parseDiscovery(answer.body);
|
|
166
166
|
if (document === null) return {
|
package/dist/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/workspace/packages/mdruntime-adapter/src/adapter.ts"],"sourcesContent":["import type {\n ActionRequest,\n ActionResult,\n Adapter,\n Authorization,\n BootstrapRequest,\n BootstrapResult,\n DiscoverResult,\n DiscoveredRoom,\n HistoryRequest,\n HistoryResult,\n ModelRequest,\n ModelResult,\n MutationRequest,\n MutationResult,\n RefreshRequest,\n RefreshResult,\n} from '@agentshouse/mdruntime';\nimport {\n DISCOVER_PREFIXES,\n PROVIDER_SELECTION_MODEL_ROOT,\n capabilities,\n discoveredRoom,\n locatorOf,\n mapDiscovery,\n parseDiscovery,\n providerSelection,\n trackedFrom,\n type HouseAuthority,\n type TrackedAuthority,\n} from './discovery.js';\nimport {\n MODEL_ABSENT,\n failedModel,\n heldModel,\n modelKey,\n modelShelf,\n type HeldModel,\n} from './model.js';\nimport { createSiteAdapter } from './site.js';\nimport {\n authorityRoot,\n bootstrapFrom,\n contentPrefixes,\n definitionsFrom,\n modelPrefix,\n parseEnumeration,\n parseEnvelope,\n parseGrant,\n refreshFrom,\n} from './read.js';\nimport { houseAction } from './actions.js';\nimport { classifyDoor, discoveryFailure } from './refusal.js';\nimport { houseNotifications } from './stream.js';\nimport {\n DOOR_BATCH,\n DOOR_BATCH_UPLOAD,\n DOOR_BOOTSTRAP,\n DOOR_DISCOVER,\n DOOR_ENUMERATE,\n DOOR_REVISIONS,\n PRIVATE_AUTHORITY,\n type HouseSiteTransport,\n type HouseTransport,\n} from './transport.js';\nimport {\n batchPaths,\n deltaBody,\n deltaBytes,\n deltaDigest,\n historyOutcome,\n houseChanges,\n mutationOutcome,\n operationHead,\n rejectedMapping,\n revisionBody,\n uploadable,\n type OperationHead,\n} from './write.js';\nimport { logPosition, presented } from './version.js';\n\nexport type AgentsHouseAdapterOptions =\n | {\n transport: HouseTransport;\n authorize(): Promise<Authorization>;\n }\n | { site: HouseSiteTransport };\n\nconst UNCERTAIN: MutationResult = { kind: 'transport-uncertainty' };\n\nconst RESOLVED_OUTCOMES: ReadonlySet<MutationResult['kind']> = new Set([\n 'accepted',\n 'conflicted',\n 'rejected',\n 'expired',\n]);\n\ntype Submission = { body: Record<string, unknown> } | { outcome: MutationResult };\n\nfunction lapsedGrant(outcome: MutationResult): boolean {\n return outcome.kind === 'rejected' && outcome.code === 'upload_unavailable';\n}\n\nfunction modelFailure(\n classified: ReturnType<typeof classifyDoor>,\n envelope: ReturnType<typeof parseEnvelope>,\n): ModelResult {\n if (classified === null) {\n return envelope === null ? { kind: 'transport-uncertainty' } : MODEL_ABSENT;\n }\n return failedModel(classified);\n}\n\nexport function createAgentsHouseAdapter(options: AgentsHouseAdapterOptions): Adapter {\n if ('site' in options) return createSiteAdapter(options.site);\n const transport = options.transport;\n const notifications = houseNotifications(transport, 'credential');\n const tracked = new Map<string, TrackedAuthority>();\n const models = modelShelf();\n const submissions = new Map<string, { sha256: string; body: Record<string, unknown> }>();\n\n function held(\n envelope: ReturnType<typeof parseEnvelope>,\n entry: TrackedAuthority,\n modelRoot: string,\n identity: string,\n failure: ModelResult,\n ): Promise<HeldModel> {\n return heldModel(\n envelope === null ? null : definitionsFrom(envelope, entry, modelRoot),\n identity,\n failure,\n );\n }\n\n async function acquireModels(\n entries: readonly TrackedAuthority[],\n ): Promise<Map<string, HeldModel>> {\n const acquired = new Map<string, HeldModel>();\n const privateEntry = entries.find((entry) => entry.authority === PRIVATE_AUTHORITY);\n const prefixes = entries.map((entry) => modelPrefix(entry, entry.modelRoot));\n if (privateEntry !== undefined) {\n prefixes.push(`${authorityRoot(undefined)}/${PROVIDER_SELECTION_MODEL_ROOT}`);\n }\n const answer = await transport.door(DOOR_BOOTSTRAP, { prefixes });\n const classified = classifyDoor(answer.status, answer.body, PRIVATE_AUTHORITY);\n const envelope = classified === null ? parseEnvelope(await bundled(answer.body)) : null;\n const failure: ModelResult = modelFailure(classified, envelope);\n for (const entry of entries) {\n acquired.set(\n modelKey(entry.locator, 'collection'),\n await held(\n envelope,\n entry,\n entry.modelRoot,\n `${authorityRoot(entry.handle)}/${entry.modelRoot}`,\n failure,\n ),\n );\n }\n if (privateEntry !== undefined) {\n acquired.set(\n modelKey(privateEntry.locator, 'typed-selection'),\n await held(\n envelope,\n privateEntry,\n PROVIDER_SELECTION_MODEL_ROOT,\n `${authorityRoot(undefined)}/${PROVIDER_SELECTION_MODEL_ROOT}`,\n failure,\n ),\n );\n }\n return acquired;\n }\n\n function roomOf(authority: HouseAuthority, acquired: Map<string, HeldModel>): DiscoveredRoom {\n const locator = locatorOf(authority);\n const key = modelKey(locator, 'collection');\n const collection = models.retain(key, acquired.get(key));\n if (authority.kind !== 'private') {\n return discoveredRoom(authority, collection?.identity ?? null, undefined);\n }\n const selection = models.retain(\n modelKey(locator, 'typed-selection'),\n acquired.get(modelKey(locator, 'typed-selection')),\n );\n return discoveredRoom(\n authority,\n collection?.identity ?? null,\n providerSelection(selection?.identity ?? null),\n );\n }\n\n function authorityFor(locator: string): TrackedAuthority | undefined {\n return tracked.get(locator);\n }\n\n async function bundled(body: unknown): Promise<unknown> {\n const grant = parseGrant(body);\n if (grant === null) return body;\n if (grant.method !== 'GET') return null;\n const answer = await transport.transfer({\n act: 'working_copy_bundle',\n method: 'GET',\n url: grant.url,\n });\n return answer.status === 200 ? answer.body : null;\n }\n\n async function uploaded(\n head: OperationHead,\n changes: readonly Readonly<Record<string, unknown>>[],\n delta: string,\n bytes: number,\n entry: TrackedAuthority,\n ): Promise<Submission> {\n const paths = batchPaths(changes);\n const sha256 = await deltaDigest(delta);\n const retained = submissions.get(head.operation_id);\n if (\n retained !== undefined &&\n retained.sha256 === sha256 &&\n retained.body.app_ref === head.app_ref &&\n retained.body.release === head.release\n )\n return { body: retained.body };\n const minted = await transport.door(DOOR_BATCH_UPLOAD, { ...head, paths, bytes, sha256 });\n if (minted.status !== 200) {\n return { outcome: mutationOutcome(minted.status, minted.body, entry.locator, entry.handle) };\n }\n const grant = parseGrant(minted.body);\n if (grant === null || grant.method !== 'POST') return { outcome: UNCERTAIN };\n const delivered = await transport.transfer({\n act: 'authored_batch_upload',\n method: 'POST',\n url: grant.url,\n body: `${grant.operation}\\n${delta}`,\n });\n if (delivered.status !== 200) return { outcome: UNCERTAIN };\n const holding = parseGrant(delivered.body);\n if (holding === null) return { outcome: UNCERTAIN };\n const body = {\n ...head,\n paths,\n upload: { url: holding.url, operation: holding.operation, bytes, sha256 },\n };\n submissions.set(head.operation_id, { sha256, body });\n return { body };\n }\n\n async function submit(\n head: OperationHead,\n changes: readonly Readonly<Record<string, unknown>>[],\n delta: string,\n bytes: number,\n entry: TrackedAuthority,\n ): Promise<MutationResult> {\n const prepared: Submission = uploadable(bytes)\n ? await uploaded(head, changes, delta, bytes, entry)\n : { body: { ...head, changes } };\n if ('outcome' in prepared) return prepared.outcome;\n const answer = await transport.door(DOOR_BATCH, prepared.body);\n return mutationOutcome(answer.status, answer.body, entry.locator, entry.handle);\n }\n\n return {\n async authorize() {\n return options.authorize();\n },\n\n async model(_authorization: Authorization, request: ModelRequest): Promise<ModelResult> {\n return models.answer(request);\n },\n\n async discover(_authorization: Authorization): Promise<DiscoverResult> {\n const answer = await transport.door(DOOR_DISCOVER, { prefixes: [...DISCOVER_PREFIXES] });\n const classified = classifyDoor(answer.status, answer.body, PRIVATE_AUTHORITY);\n if (classified !== null) return discoveryFailure(classified);\n const document = parseDiscovery(answer.body);\n if (document === null) return { kind: 'transport-uncertainty' };\n const entries = trackedFrom(document);\n tracked.clear();\n for (const entry of entries) tracked.set(entry.locator, entry);\n notifications.track(entries);\n const acquired = await acquireModels(entries);\n models.keep(entries.map((entry) => entry.locator));\n return mapDiscovery(\n document,\n document.authorities.map((authority) => roomOf(authority, acquired)),\n capabilities(document.actions),\n );\n },\n\n async bootstrap(\n _authorization: Authorization,\n request: BootstrapRequest,\n ): Promise<BootstrapResult> {\n const entry = authorityFor(request.locator);\n if (entry === undefined) return { kind: 'room-not-readable', locator: request.locator };\n if (request.pageToken !== undefined) return { kind: 'transport-uncertainty' };\n const answer = await transport.door(DOOR_BOOTSTRAP, {\n prefixes: [...contentPrefixes(entry)],\n });\n const classified = classifyDoor(answer.status, answer.body, entry.locator);\n if (classified !== null) {\n return classified.kind === 'beyond-horizon'\n ? { kind: 'transport-uncertainty' }\n : classified;\n }\n const envelope = parseEnvelope(await bundled(answer.body));\n if (envelope === null) return { kind: 'transport-uncertainty' };\n return bootstrapFrom(envelope, entry);\n },\n\n async refresh(_authorization: Authorization, request: RefreshRequest): Promise<RefreshResult> {\n const entry = authorityFor(request.locator);\n if (entry === undefined) return { kind: 'room-not-readable', locator: request.locator };\n if (request.pageToken !== undefined) return { kind: 'transport-uncertainty' };\n const from = logPosition(request.fromRoomVersion);\n if (from === null) return { kind: 'beyond-horizon' };\n const streamed = notifications.advance(entry, from);\n if (streamed !== null) return streamed;\n const answer = await transport.door(DOOR_ENUMERATE, {\n prefixes: [...contentPrefixes(entry)],\n positions: [presented(entry.authority, from)],\n });\n const classified = classifyDoor(answer.status, answer.body, entry.locator);\n if (classified !== null) return classified;\n const enumeration = parseEnumeration(answer.body, 'credential');\n if (enumeration === null) return { kind: 'transport-uncertainty' };\n return refreshFrom(enumeration, entry, request.fromRoomVersion);\n },\n\n async mutate(_authorization: Authorization, request: MutationRequest): Promise<MutationResult> {\n const entry = authorityFor(request.locator);\n if (entry === undefined) return { kind: 'room-not-readable', locator: request.locator };\n const mapped = houseChanges(request.changeBatch, entry.handle);\n if (mapped.kind === 'unmapped') return rejectedMapping(mapped);\n const head = operationHead(request.changeBatch);\n const delta = deltaBody(mapped.changes);\n const bytes = deltaBytes(delta);\n const resent = submissions.has(head.operation_id);\n let outcome = await submit(head, mapped.changes, delta, bytes, entry);\n if (resent && lapsedGrant(outcome)) {\n submissions.delete(head.operation_id);\n outcome = await submit(head, mapped.changes, delta, bytes, entry);\n }\n if (RESOLVED_OUTCOMES.has(outcome.kind)) submissions.delete(head.operation_id);\n return outcome;\n },\n\n async history(_authorization: Authorization, request: HistoryRequest): Promise<HistoryResult> {\n const entry = authorityFor(request.locator);\n if (entry === undefined) return { kind: 'room-not-readable', locator: request.locator };\n const answer = await transport.door(\n DOOR_REVISIONS,\n revisionBody({\n path: request.path,\n handle: entry.handle,\n ...(request.revision === undefined ? {} : { revision: request.revision }),\n ...(request.pageToken === undefined ? {} : { pageToken: request.pageToken }),\n }),\n );\n return historyOutcome(answer.status, answer.body, entry.locator, {\n path: request.path,\n ...(request.revision === undefined ? {} : { revision: request.revision }),\n });\n },\n\n async action(_authorization: Authorization, request: ActionRequest): Promise<ActionResult> {\n return houseAction(transport, request);\n },\n\n roomVersions: notifications,\n conversations: notifications.conversations,\n };\n}\n"],"names":["DISCOVER_PREFIXES","PROVIDER_SELECTION_MODEL_ROOT","capabilities","discoveredRoom","locatorOf","mapDiscovery","parseDiscovery","providerSelection","trackedFrom","MODEL_ABSENT","failedModel","heldModel","modelKey","modelShelf","createSiteAdapter","authorityRoot","bootstrapFrom","contentPrefixes","definitionsFrom","modelPrefix","parseEnumeration","parseEnvelope","parseGrant","refreshFrom","houseAction","classifyDoor","discoveryFailure","houseNotifications","DOOR_BATCH","DOOR_BATCH_UPLOAD","DOOR_BOOTSTRAP","DOOR_DISCOVER","DOOR_ENUMERATE","DOOR_REVISIONS","PRIVATE_AUTHORITY","batchPaths","deltaBody","deltaBytes","deltaDigest","historyOutcome","houseChanges","mutationOutcome","operationHead","rejectedMapping","revisionBody","uploadable","logPosition","presented","UNCERTAIN","kind","RESOLVED_OUTCOMES","Set","lapsedGrant","outcome","code","modelFailure","classified","envelope","createAgentsHouseAdapter","options","site","transport","notifications","tracked","Map","models","submissions","held","entry","modelRoot","identity","failure","acquireModels","entries","acquired","privateEntry","find","authority","prefixes","map","undefined","push","answer","door","status","body","bundled","set","locator","handle","roomOf","key","collection","retain","get","selection","authorityFor","grant","method","transfer","act","url","uploaded","head","changes","delta","bytes","paths","sha256","retained","operation_id","app_ref","release","minted","delivered","operation","holding","upload","submit","prepared","authorize","model","_authorization","request","discover","document","clear","track","keep","authorities","actions","bootstrap","pageToken","refresh","from","fromRoomVersion","streamed","advance","positions","enumeration","mutate","mapped","changeBatch","resent","has","delete","history","path","revision","action","roomVersions","conversations"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime-adapter/src/adapter.ts"],"sourcesContent":["import type {\n ActionRequest,\n ActionResult,\n Adapter,\n Authorization,\n BootstrapRequest,\n BootstrapResult,\n DiscoverResult,\n DiscoveredRoom,\n HistoryRequest,\n HistoryResult,\n ModelRequest,\n ModelResult,\n MutationRequest,\n MutationResult,\n RefreshRequest,\n RefreshResult,\n} from '@agentshouse/mdruntime';\nimport {\n DISCOVER_PREFIXES,\n PROVIDER_SELECTION_MODEL_ROOT,\n capabilities,\n discoveredRoom,\n locatorOf,\n mapDiscovery,\n parseDiscovery,\n providerSelection,\n trackedFrom,\n type HouseAuthority,\n type TrackedAuthority,\n} from './discovery.js';\nimport {\n MODEL_ABSENT,\n failedModel,\n heldModel,\n modelKey,\n modelShelf,\n type HeldModel,\n} from './model.js';\nimport { createSiteAdapter } from './site.js';\nimport {\n authorityRoot,\n bootstrapFrom,\n contentPrefixes,\n definitionsFrom,\n modelPrefix,\n parseEnumeration,\n parseEnvelope,\n parseGrant,\n refreshFrom,\n} from './read.js';\nimport { houseAction } from './actions.js';\nimport { classifyDoor, discoveryFailure } from './refusal.js';\nimport { houseNotifications } from './stream.js';\nimport {\n DOOR_BATCH,\n DOOR_BATCH_UPLOAD,\n DOOR_BOOTSTRAP,\n DOOR_DISCOVER,\n DOOR_ENUMERATE,\n DOOR_REVISIONS,\n PRIVATE_LOCATOR,\n type HouseSiteTransport,\n type HouseTransport,\n} from './transport.js';\nimport {\n batchPaths,\n deltaBody,\n deltaBytes,\n deltaDigest,\n historyOutcome,\n houseChanges,\n mutationOutcome,\n operationHead,\n rejectedMapping,\n revisionBody,\n uploadable,\n type OperationHead,\n} from './write.js';\nimport { logPosition, presented } from './version.js';\n\nexport type AgentsHouseAdapterOptions =\n | {\n transport: HouseTransport;\n authorize(): Promise<Authorization>;\n }\n | { site: HouseSiteTransport };\n\nconst UNCERTAIN: MutationResult = { kind: 'transport-uncertainty' };\n\nconst RESOLVED_OUTCOMES: ReadonlySet<MutationResult['kind']> = new Set([\n 'accepted',\n 'conflicted',\n 'rejected',\n 'expired',\n]);\n\ntype Submission = { body: Record<string, unknown> } | { outcome: MutationResult };\n\nfunction lapsedGrant(outcome: MutationResult): boolean {\n return outcome.kind === 'rejected' && outcome.code === 'upload_unavailable';\n}\n\nfunction modelFailure(\n classified: ReturnType<typeof classifyDoor>,\n envelope: ReturnType<typeof parseEnvelope>,\n): ModelResult {\n if (classified === null) {\n return envelope === null ? { kind: 'transport-uncertainty' } : MODEL_ABSENT;\n }\n return failedModel(classified);\n}\n\nexport function createAgentsHouseAdapter(options: AgentsHouseAdapterOptions): Adapter {\n if ('site' in options) return createSiteAdapter(options.site);\n const transport = options.transport;\n const notifications = houseNotifications(transport, 'credential');\n const tracked = new Map<string, TrackedAuthority>();\n const models = modelShelf();\n const submissions = new Map<string, { sha256: string; body: Record<string, unknown> }>();\n\n function held(\n envelope: ReturnType<typeof parseEnvelope>,\n entry: TrackedAuthority,\n modelRoot: string,\n identity: string,\n failure: ModelResult,\n ): Promise<HeldModel> {\n return heldModel(\n envelope === null ? null : definitionsFrom(envelope, entry, modelRoot),\n identity,\n failure,\n );\n }\n\n async function acquireModels(\n entries: readonly TrackedAuthority[],\n ): Promise<Map<string, HeldModel>> {\n const acquired = new Map<string, HeldModel>();\n const privateEntry = entries.find((entry) => entry.locator === PRIVATE_LOCATOR);\n const prefixes = entries.map((entry) => modelPrefix(entry, entry.modelRoot));\n if (privateEntry !== undefined) {\n prefixes.push(`${authorityRoot(undefined)}/${PROVIDER_SELECTION_MODEL_ROOT}`);\n }\n const answer = await transport.door(DOOR_BOOTSTRAP, { prefixes });\n const classified = classifyDoor(answer.status, answer.body, PRIVATE_LOCATOR);\n const envelope = classified === null ? parseEnvelope(await bundled(answer.body)) : null;\n const failure: ModelResult = modelFailure(classified, envelope);\n for (const entry of entries) {\n acquired.set(\n modelKey(entry.locator, 'collection'),\n await held(\n envelope,\n entry,\n entry.modelRoot,\n `${authorityRoot(entry.handle)}/${entry.modelRoot}`,\n failure,\n ),\n );\n }\n if (privateEntry !== undefined) {\n acquired.set(\n modelKey(privateEntry.locator, 'typed-selection'),\n await held(\n envelope,\n privateEntry,\n PROVIDER_SELECTION_MODEL_ROOT,\n `${authorityRoot(undefined)}/${PROVIDER_SELECTION_MODEL_ROOT}`,\n failure,\n ),\n );\n }\n return acquired;\n }\n\n function roomOf(authority: HouseAuthority, acquired: Map<string, HeldModel>): DiscoveredRoom {\n const locator = locatorOf(authority);\n const key = modelKey(locator, 'collection');\n const collection = models.retain(key, acquired.get(key));\n if (authority.roomHandle !== null) {\n return discoveredRoom(authority, collection?.identity ?? null, undefined);\n }\n const selection = models.retain(\n modelKey(locator, 'typed-selection'),\n acquired.get(modelKey(locator, 'typed-selection')),\n );\n return discoveredRoom(\n authority,\n collection?.identity ?? null,\n providerSelection(selection?.identity ?? null),\n );\n }\n\n function authorityFor(locator: string): TrackedAuthority | undefined {\n return tracked.get(locator);\n }\n\n async function bundled(body: unknown): Promise<unknown> {\n const grant = parseGrant(body);\n if (grant === null) return body;\n if (grant.method !== 'GET') return null;\n const answer = await transport.transfer({\n act: 'working_copy_bundle',\n method: 'GET',\n url: grant.url,\n });\n return answer.status === 200 ? answer.body : null;\n }\n\n async function uploaded(\n head: OperationHead,\n changes: readonly Readonly<Record<string, unknown>>[],\n delta: string,\n bytes: number,\n entry: TrackedAuthority,\n ): Promise<Submission> {\n const paths = batchPaths(changes);\n const sha256 = await deltaDigest(delta);\n const retained = submissions.get(head.operation_id);\n if (\n retained !== undefined &&\n retained.sha256 === sha256 &&\n retained.body.app_ref === head.app_ref &&\n retained.body.release === head.release\n )\n return { body: retained.body };\n const minted = await transport.door(DOOR_BATCH_UPLOAD, { ...head, paths, bytes, sha256 });\n if (minted.status !== 200) {\n return { outcome: mutationOutcome(minted.status, minted.body, entry.locator, entry.handle) };\n }\n const grant = parseGrant(minted.body);\n if (grant === null || grant.method !== 'POST') return { outcome: UNCERTAIN };\n const delivered = await transport.transfer({\n act: 'authored_batch_upload',\n method: 'POST',\n url: grant.url,\n body: `${grant.operation}\\n${delta}`,\n });\n if (delivered.status !== 200) return { outcome: UNCERTAIN };\n const holding = parseGrant(delivered.body);\n if (holding === null) return { outcome: UNCERTAIN };\n const body = {\n ...head,\n paths,\n upload: { url: holding.url, operation: holding.operation, bytes, sha256 },\n };\n submissions.set(head.operation_id, { sha256, body });\n return { body };\n }\n\n async function submit(\n head: OperationHead,\n changes: readonly Readonly<Record<string, unknown>>[],\n delta: string,\n bytes: number,\n entry: TrackedAuthority,\n ): Promise<MutationResult> {\n const prepared: Submission = uploadable(bytes)\n ? await uploaded(head, changes, delta, bytes, entry)\n : { body: { ...head, changes } };\n if ('outcome' in prepared) return prepared.outcome;\n const answer = await transport.door(DOOR_BATCH, prepared.body);\n return mutationOutcome(answer.status, answer.body, entry.locator, entry.handle);\n }\n\n return {\n async authorize() {\n return options.authorize();\n },\n\n async model(_authorization: Authorization, request: ModelRequest): Promise<ModelResult> {\n return models.answer(request);\n },\n\n async discover(_authorization: Authorization): Promise<DiscoverResult> {\n const answer = await transport.door(DOOR_DISCOVER, { prefixes: [...DISCOVER_PREFIXES] });\n const classified = classifyDoor(answer.status, answer.body, PRIVATE_LOCATOR);\n if (classified !== null) return discoveryFailure(classified);\n const document = parseDiscovery(answer.body);\n if (document === null) return { kind: 'transport-uncertainty' };\n const entries = trackedFrom(document);\n tracked.clear();\n for (const entry of entries) tracked.set(entry.locator, entry);\n notifications.track(entries);\n const acquired = await acquireModels(entries);\n models.keep(entries.map((entry) => entry.locator));\n return mapDiscovery(\n document,\n document.authorities.map((authority) => roomOf(authority, acquired)),\n capabilities(document.actions),\n );\n },\n\n async bootstrap(\n _authorization: Authorization,\n request: BootstrapRequest,\n ): Promise<BootstrapResult> {\n const entry = authorityFor(request.locator);\n if (entry === undefined) return { kind: 'room-not-readable', locator: request.locator };\n if (request.pageToken !== undefined) return { kind: 'transport-uncertainty' };\n const answer = await transport.door(DOOR_BOOTSTRAP, {\n prefixes: [...contentPrefixes(entry)],\n });\n const classified = classifyDoor(answer.status, answer.body, entry.locator);\n if (classified !== null) {\n return classified.kind === 'beyond-horizon'\n ? { kind: 'transport-uncertainty' }\n : classified;\n }\n const envelope = parseEnvelope(await bundled(answer.body));\n if (envelope === null) return { kind: 'transport-uncertainty' };\n return bootstrapFrom(envelope, entry);\n },\n\n async refresh(_authorization: Authorization, request: RefreshRequest): Promise<RefreshResult> {\n const entry = authorityFor(request.locator);\n if (entry === undefined) return { kind: 'room-not-readable', locator: request.locator };\n if (request.pageToken !== undefined) return { kind: 'transport-uncertainty' };\n const from = logPosition(request.fromRoomVersion);\n if (from === null) return { kind: 'beyond-horizon' };\n const streamed = notifications.advance(entry, from);\n if (streamed !== null) return streamed;\n const answer = await transport.door(DOOR_ENUMERATE, {\n prefixes: [...contentPrefixes(entry)],\n positions: [presented(entry.authority, from)],\n });\n const classified = classifyDoor(answer.status, answer.body, entry.locator);\n if (classified !== null) return classified;\n const enumeration = parseEnumeration(answer.body, 'credential');\n if (enumeration === null) return { kind: 'transport-uncertainty' };\n return refreshFrom(enumeration, entry, request.fromRoomVersion);\n },\n\n async mutate(_authorization: Authorization, request: MutationRequest): Promise<MutationResult> {\n const entry = authorityFor(request.locator);\n if (entry === undefined) return { kind: 'room-not-readable', locator: request.locator };\n const mapped = houseChanges(request.changeBatch, entry.handle);\n if (mapped.kind === 'unmapped') return rejectedMapping(mapped);\n const head = operationHead(request.changeBatch);\n const delta = deltaBody(mapped.changes);\n const bytes = deltaBytes(delta);\n const resent = submissions.has(head.operation_id);\n let outcome = await submit(head, mapped.changes, delta, bytes, entry);\n if (resent && lapsedGrant(outcome)) {\n submissions.delete(head.operation_id);\n outcome = await submit(head, mapped.changes, delta, bytes, entry);\n }\n if (RESOLVED_OUTCOMES.has(outcome.kind)) submissions.delete(head.operation_id);\n return outcome;\n },\n\n async history(_authorization: Authorization, request: HistoryRequest): Promise<HistoryResult> {\n const entry = authorityFor(request.locator);\n if (entry === undefined) return { kind: 'room-not-readable', locator: request.locator };\n const answer = await transport.door(\n DOOR_REVISIONS,\n revisionBody({\n path: request.path,\n handle: entry.handle,\n ...(request.revision === undefined ? {} : { revision: request.revision }),\n ...(request.pageToken === undefined ? {} : { pageToken: request.pageToken }),\n }),\n );\n return historyOutcome(answer.status, answer.body, entry.locator, {\n path: request.path,\n ...(request.revision === undefined ? {} : { revision: request.revision }),\n });\n },\n\n async action(_authorization: Authorization, request: ActionRequest): Promise<ActionResult> {\n return houseAction(transport, request);\n },\n\n roomVersions: notifications,\n conversations: notifications.conversations,\n };\n}\n"],"names":["DISCOVER_PREFIXES","PROVIDER_SELECTION_MODEL_ROOT","capabilities","discoveredRoom","locatorOf","mapDiscovery","parseDiscovery","providerSelection","trackedFrom","MODEL_ABSENT","failedModel","heldModel","modelKey","modelShelf","createSiteAdapter","authorityRoot","bootstrapFrom","contentPrefixes","definitionsFrom","modelPrefix","parseEnumeration","parseEnvelope","parseGrant","refreshFrom","houseAction","classifyDoor","discoveryFailure","houseNotifications","DOOR_BATCH","DOOR_BATCH_UPLOAD","DOOR_BOOTSTRAP","DOOR_DISCOVER","DOOR_ENUMERATE","DOOR_REVISIONS","PRIVATE_LOCATOR","batchPaths","deltaBody","deltaBytes","deltaDigest","historyOutcome","houseChanges","mutationOutcome","operationHead","rejectedMapping","revisionBody","uploadable","logPosition","presented","UNCERTAIN","kind","RESOLVED_OUTCOMES","Set","lapsedGrant","outcome","code","modelFailure","classified","envelope","createAgentsHouseAdapter","options","site","transport","notifications","tracked","Map","models","submissions","held","entry","modelRoot","identity","failure","acquireModels","entries","acquired","privateEntry","find","locator","prefixes","map","undefined","push","answer","door","status","body","bundled","set","handle","roomOf","authority","key","collection","retain","get","roomHandle","selection","authorityFor","grant","method","transfer","act","url","uploaded","head","changes","delta","bytes","paths","sha256","retained","operation_id","app_ref","release","minted","delivered","operation","holding","upload","submit","prepared","authorize","model","_authorization","request","discover","document","clear","track","keep","authorities","actions","bootstrap","pageToken","refresh","from","fromRoomVersion","streamed","advance","positions","enumeration","mutate","mapped","changeBatch","resent","has","delete","history","path","revision","action","roomVersions","conversations"],"mappings":"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"}
|
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,aAAa,EACb,SAAS,EACT,cAAc,EACf,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAA6B,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3E,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,eAAO,MAAM,iBAAiB,yBAAyB,CAAC;AAExD,eAAO,MAAM,0BAA0B,+BAA+B,CAAC;AAEvE,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD,eAAO,MAAM,uBAAuB,4BAA4B,CAAC;AAEjE,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAAU,CAAC;AAE1D,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAAwB,CAAC;AAE/E,eAAO,MAAM,6BAA6B,yBAAyB,CAAC;AAEpE,MAAM,MAAM,WAAW,GAAG;IACxB,uBAAuB,EAAE,MAAM,CAAC;IAChC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,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,cAAc,GAAG,WAAW,GAAG;IACzC,
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
|