@agentshouse/mdruntime-adapter 0.1.0-alpha.13 → 0.1.0-alpha.15
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 +6 -1
- package/dist/actions.d.ts +1 -4
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +64 -97
- package/dist/actions.js.map +1 -1
- package/dist/adapter.js +1 -1
- package/dist/adapter.js.map +1 -1
- package/dist/discovery.d.ts +2 -1
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +6 -3
- package/dist/discovery.js.map +1 -1
- package/package.json +3 -3
package/AGENTS.md
CHANGED
|
@@ -8,7 +8,7 @@ enforcement.
|
|
|
8
8
|
|
|
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
|
-
storage loss, the reported persistence answer, Sync Status, reauthorization,
|
|
11
|
+
storage loss, the reported persistence answer, deployment facts, Sync Status, reauthorization,
|
|
12
12
|
conversation, the unsent instruction, and Presentation State.
|
|
13
13
|
|
|
14
14
|
Slots answers each Slot the Provider declares, in its order, with its entries
|
|
@@ -20,6 +20,11 @@ client is asynchronous. Results are detached snapshots. Nothing in this
|
|
|
20
20
|
surface returns the authorization, performs a request the App's code
|
|
21
21
|
composes, or exposes the browser store.
|
|
22
22
|
|
|
23
|
+
Read deployment facts with `deploymentFacts()` and observe replacements with
|
|
24
|
+
`observe('deployment-facts', listener)`. Interpret the opaque value using the
|
|
25
|
+
host's contract. [R038](https://github.com/agentshouse/mdruntime/blob/main/docs/requirements/ledger.md#r038--runtime-host-and-remote-client)
|
|
26
|
+
owns their boundary.
|
|
27
|
+
|
|
23
28
|
The in-memory Adapter at `@agentshouse/mdruntime/memory` is for tests and
|
|
24
29
|
ships in no bundle.
|
|
25
30
|
|
package/dist/actions.d.ts
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import { type ActionDeclaration, type ActionRequest, type ActionResult, type ConversationCards } from '@agentshouse/mdruntime';
|
|
2
2
|
import type { HouseDoor, HouseDoorAnswer, HouseTransport } from './transport.js';
|
|
3
|
-
export declare const CONVERSATION_ACTIONS: readonly ['conversation.create', 'conversation.send', 'conversation.answer', 'conversation.interrupt', 'conversation.kill', 'conversation.cancel', 'conversation.delete', 'conversation.history'];
|
|
4
|
-
export declare const HOUSE_ACTS: readonly ['conversations/interaction/read', 'conversations/originals/read', 'apps/read', 'apps/customize', 'rooms/read', 'rooms/access/read', 'rooms/access/invitations', 'rooms/access/entries', 'rooms/access/invite', 'rooms/access/invitation-cancel', 'rooms/access/revoke', 'rooms/access/leave', 'rooms/roles/define', 'rooms/roles/remove', 'rooms/roles/assign', 'rooms/roles/unassign', 'rooms/settings/processing/read', 'rooms/settings/processing/write', 'profiles/create', 'profiles/read', 'profiles/edit', 'profiles/duplicate', 'profiles/delegate', 'agents/create', 'agents/read', 'routines/requests', 'routines/access', 'routines/owned', 'routines/granted', 'routines/grant', 'routines/send', 'routines/cancel', 'routines/start', 'routines/schedules', 'routines/schedules/create', 'routines/schedules/enabled', 'account/security/read', 'storage/inventory', 'storage/usage', 'usage/statement', 'storage/archive', 'storage/archive/status', 'envs/read', 'envs/create', 'envs/start', 'envs/stop', 'envs/delete', 'envs/renewals/read', 'envs/work/read', 'nodes/read'];
|
|
5
|
-
export declare const HOUSE_PROVIDER_ACTIONS: readonly ["conversation.create", "conversation.send", "conversation.answer", "conversation.interrupt", "conversation.kill", "conversation.cancel", "conversation.delete", "conversation.history", "conversations/interaction/read", "conversations/originals/read", "apps/read", "apps/customize", "rooms/read", "rooms/access/read", "rooms/access/invitations", "rooms/access/entries", "rooms/access/invite", "rooms/access/invitation-cancel", "rooms/access/revoke", "rooms/access/leave", "rooms/roles/define", "rooms/roles/remove", "rooms/roles/assign", "rooms/roles/unassign", "rooms/settings/processing/read", "rooms/settings/processing/write", "profiles/create", "profiles/read", "profiles/edit", "profiles/duplicate", "profiles/delegate", "agents/create", "agents/read", "routines/requests", "routines/access", "routines/owned", "routines/granted", "routines/grant", "routines/send", "routines/cancel", "routines/start", "routines/schedules", "routines/schedules/create", "routines/schedules/enabled", "account/security/read", "storage/inventory", "storage/usage", "usage/statement", "storage/archive", "storage/archive/status", "envs/read", "envs/create", "envs/start", "envs/stop", "envs/delete", "envs/renewals/read", "envs/work/read", "nodes/read"];
|
|
6
3
|
export declare const HISTORY_PAGE = 100;
|
|
7
4
|
export declare const HOUSE_CONVERSATION_CARDS: ConversationCards;
|
|
8
|
-
export declare function declaredActions(): readonly ActionDeclaration[];
|
|
5
|
+
export declare function declaredActions(routes: readonly string[]): readonly ActionDeclaration[];
|
|
9
6
|
export declare function houseAction(transport: HouseTransport, request: ActionRequest): Promise<ActionResult>;
|
|
10
7
|
export declare function actionOutcome(answer: HouseDoorAnswer, name: string): ActionResult;
|
|
11
8
|
export declare function readConversationHistory(transport: HouseDoor, conversationId: string): Promise<{
|
package/dist/actions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"
|
|
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,EACvB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEjF,eAAO,MAAM,YAAY,MAAM,CAAC;AAehC,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;AA8ID,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC,CA4B9D"}
|
package/dist/actions.js
CHANGED
|
@@ -1,118 +1,78 @@
|
|
|
1
|
-
import { VERSION } from '@agentshouse/mdmodel';
|
|
2
1
|
import { changeBatchIdentity } from '@agentshouse/mdruntime';
|
|
3
2
|
import { doorRefusal } from './refusal.js';
|
|
4
3
|
import { PRIVATE_AUTHORITY } from './transport.js';
|
|
5
|
-
export const CONVERSATION_ACTIONS = [
|
|
6
|
-
'conversation.create',
|
|
7
|
-
'conversation.send',
|
|
8
|
-
'conversation.answer',
|
|
9
|
-
'conversation.interrupt',
|
|
10
|
-
'conversation.kill',
|
|
11
|
-
'conversation.cancel',
|
|
12
|
-
'conversation.delete',
|
|
13
|
-
'conversation.history'
|
|
14
|
-
];
|
|
15
|
-
export const HOUSE_ACTS = [
|
|
16
|
-
'conversations/interaction/read',
|
|
17
|
-
'conversations/originals/read',
|
|
18
|
-
'apps/read',
|
|
19
|
-
'apps/customize',
|
|
20
|
-
'rooms/read',
|
|
21
|
-
'rooms/access/read',
|
|
22
|
-
'rooms/access/invitations',
|
|
23
|
-
'rooms/access/entries',
|
|
24
|
-
'rooms/access/invite',
|
|
25
|
-
'rooms/access/invitation-cancel',
|
|
26
|
-
'rooms/access/revoke',
|
|
27
|
-
'rooms/access/leave',
|
|
28
|
-
'rooms/roles/define',
|
|
29
|
-
'rooms/roles/remove',
|
|
30
|
-
'rooms/roles/assign',
|
|
31
|
-
'rooms/roles/unassign',
|
|
32
|
-
'rooms/settings/processing/read',
|
|
33
|
-
'rooms/settings/processing/write',
|
|
34
|
-
'profiles/create',
|
|
35
|
-
'profiles/read',
|
|
36
|
-
'profiles/edit',
|
|
37
|
-
'profiles/duplicate',
|
|
38
|
-
'profiles/delegate',
|
|
39
|
-
'agents/create',
|
|
40
|
-
'agents/read',
|
|
41
|
-
'routines/requests',
|
|
42
|
-
'routines/access',
|
|
43
|
-
'routines/owned',
|
|
44
|
-
'routines/granted',
|
|
45
|
-
'routines/grant',
|
|
46
|
-
'routines/send',
|
|
47
|
-
'routines/cancel',
|
|
48
|
-
'routines/start',
|
|
49
|
-
'routines/schedules',
|
|
50
|
-
'routines/schedules/create',
|
|
51
|
-
'routines/schedules/enabled',
|
|
52
|
-
'account/security/read',
|
|
53
|
-
'storage/inventory',
|
|
54
|
-
'storage/usage',
|
|
55
|
-
'usage/statement',
|
|
56
|
-
'storage/archive',
|
|
57
|
-
'storage/archive/status',
|
|
58
|
-
'envs/read',
|
|
59
|
-
'envs/create',
|
|
60
|
-
'envs/start',
|
|
61
|
-
'envs/stop',
|
|
62
|
-
'envs/delete',
|
|
63
|
-
'envs/renewals/read',
|
|
64
|
-
'envs/work/read',
|
|
65
|
-
'nodes/read'
|
|
66
|
-
];
|
|
67
|
-
export const HOUSE_PROVIDER_ACTIONS = [
|
|
68
|
-
...CONVERSATION_ACTIONS,
|
|
69
|
-
...HOUSE_ACTS
|
|
70
|
-
];
|
|
71
|
-
const DECLARED = new Set(HOUSE_PROVIDER_ACTIONS);
|
|
72
4
|
export const HISTORY_PAGE = 100;
|
|
73
5
|
const OCTET_STREAM = 'application/octet-stream';
|
|
74
|
-
const CONVERSATION_ROUTES =
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
6
|
+
const CONVERSATION_ROUTES = new Map([
|
|
7
|
+
[
|
|
8
|
+
'conversation.create',
|
|
9
|
+
'/door/conversations/create'
|
|
10
|
+
],
|
|
11
|
+
[
|
|
12
|
+
'conversation.send',
|
|
13
|
+
'/door/conversations/send'
|
|
14
|
+
],
|
|
15
|
+
[
|
|
16
|
+
'conversation.answer',
|
|
17
|
+
'/door/conversations/interaction/answer'
|
|
18
|
+
],
|
|
19
|
+
[
|
|
20
|
+
'conversation.interrupt',
|
|
21
|
+
'/door/conversations/interrupt'
|
|
22
|
+
],
|
|
23
|
+
[
|
|
24
|
+
'conversation.kill',
|
|
25
|
+
'/door/conversations/kill'
|
|
26
|
+
],
|
|
27
|
+
[
|
|
28
|
+
'conversation.cancel',
|
|
29
|
+
'/door/conversations/cancel'
|
|
30
|
+
],
|
|
31
|
+
[
|
|
32
|
+
'conversation.delete',
|
|
33
|
+
'/door/conversations/delete'
|
|
34
|
+
],
|
|
35
|
+
[
|
|
36
|
+
'conversation.history',
|
|
37
|
+
'/door/conversations/history'
|
|
38
|
+
]
|
|
39
|
+
]);
|
|
86
40
|
export const HOUSE_CONVERSATION_CARDS = {
|
|
87
41
|
locator: PRIVATE_AUTHORITY,
|
|
88
42
|
type: 'conversation',
|
|
89
43
|
identity: 'conversation',
|
|
90
44
|
agent: 'agent'
|
|
91
45
|
};
|
|
92
|
-
export function declaredActions() {
|
|
93
|
-
|
|
94
|
-
|
|
46
|
+
export function declaredActions(routes) {
|
|
47
|
+
const mapped = new Map([
|
|
48
|
+
...CONVERSATION_ROUTES
|
|
49
|
+
].map(([name, route])=>[
|
|
50
|
+
route.slice('/door/'.length),
|
|
51
|
+
name
|
|
52
|
+
]));
|
|
53
|
+
return routes.map((route)=>({
|
|
54
|
+
name: mapped.get(route) ?? route,
|
|
95
55
|
inputShape: {},
|
|
96
56
|
resultKind: 'house'
|
|
97
57
|
}));
|
|
98
58
|
}
|
|
99
59
|
export function houseAction(transport, request) {
|
|
100
|
-
if (!DECLARED.has(request.name)) {
|
|
101
|
-
return Promise.resolve({
|
|
102
|
-
kind: 'rejected',
|
|
103
|
-
code: 'action-unimplemented',
|
|
104
|
-
fields: {
|
|
105
|
-
name: request.name,
|
|
106
|
-
mdModel: VERSION
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
60
|
if (request.name === 'conversation.send') return sendAction(transport, request.input);
|
|
111
61
|
if (request.name === 'conversation.history') return historyAction(transport, request.input);
|
|
112
|
-
|
|
62
|
+
const route = routeOf(request.name);
|
|
63
|
+
if (route === null) return Promise.resolve(malformed());
|
|
64
|
+
return carry(transport, route, request.name, request.input);
|
|
113
65
|
}
|
|
114
66
|
function routeOf(name) {
|
|
115
|
-
|
|
67
|
+
const mapped = CONVERSATION_ROUTES.get(name);
|
|
68
|
+
if (mapped !== undefined) return mapped;
|
|
69
|
+
const parts = name.split('/');
|
|
70
|
+
if (parts.some((part)=>part === '.' || part === '..')) return null;
|
|
71
|
+
try {
|
|
72
|
+
return `/door/${parts.map(encodeURIComponent).join('/')}`;
|
|
73
|
+
} catch {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
116
76
|
}
|
|
117
77
|
function record(value) {
|
|
118
78
|
return typeof value === 'object' && value !== null ? value : {};
|
|
@@ -183,6 +143,13 @@ export function actionOutcome(answer, name) {
|
|
|
183
143
|
fields: refusal.fields
|
|
184
144
|
};
|
|
185
145
|
}
|
|
146
|
+
if (answer.status === 404) return {
|
|
147
|
+
kind: 'rejected',
|
|
148
|
+
code: 'action-unimplemented',
|
|
149
|
+
fields: {
|
|
150
|
+
name
|
|
151
|
+
}
|
|
152
|
+
};
|
|
186
153
|
if (answer.status === 0 || answer.status >= 400) return {
|
|
187
154
|
kind: 'transport-uncertainty'
|
|
188
155
|
};
|
|
@@ -195,8 +162,8 @@ export function actionOutcome(answer, name) {
|
|
|
195
162
|
result: answer.body
|
|
196
163
|
};
|
|
197
164
|
}
|
|
198
|
-
async function carry(transport, name, input) {
|
|
199
|
-
const answer = await transport.door(
|
|
165
|
+
async function carry(transport, route, name, input) {
|
|
166
|
+
const answer = await transport.door(route, bodyOf(name, input));
|
|
200
167
|
return actionOutcome(answer, name);
|
|
201
168
|
}
|
|
202
169
|
function sendFile(entry) {
|
package/dist/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/workspace/packages/mdruntime-adapter/src/actions.ts"],"sourcesContent":["import { VERSION } from '@agentshouse/mdmodel';\nimport {\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 CONVERSATION_ACTIONS = [\n 'conversation.create',\n 'conversation.send',\n 'conversation.answer',\n 'conversation.interrupt',\n 'conversation.kill',\n 'conversation.cancel',\n 'conversation.delete',\n 'conversation.history',\n] as const;\n\nexport const HOUSE_ACTS = [\n 'conversations/interaction/read',\n 'conversations/originals/read',\n 'apps/read',\n 'apps/customize',\n 'rooms/read',\n 'rooms/access/read',\n 'rooms/access/invitations',\n 'rooms/access/entries',\n 'rooms/access/invite',\n 'rooms/access/invitation-cancel',\n 'rooms/access/revoke',\n 'rooms/access/leave',\n 'rooms/roles/define',\n 'rooms/roles/remove',\n 'rooms/roles/assign',\n 'rooms/roles/unassign',\n 'rooms/settings/processing/read',\n 'rooms/settings/processing/write',\n 'profiles/create',\n 'profiles/read',\n 'profiles/edit',\n 'profiles/duplicate',\n 'profiles/delegate',\n 'agents/create',\n 'agents/read',\n 'routines/requests',\n 'routines/access',\n 'routines/owned',\n 'routines/granted',\n 'routines/grant',\n 'routines/send',\n 'routines/cancel',\n 'routines/start',\n 'routines/schedules',\n 'routines/schedules/create',\n 'routines/schedules/enabled',\n 'account/security/read',\n 'storage/inventory',\n 'storage/usage',\n 'usage/statement',\n 'storage/archive',\n 'storage/archive/status',\n 'envs/read',\n 'envs/create',\n 'envs/start',\n 'envs/stop',\n 'envs/delete',\n 'envs/renewals/read',\n 'envs/work/read',\n 'nodes/read',\n] as const;\n\nexport const HOUSE_PROVIDER_ACTIONS = [...CONVERSATION_ACTIONS, ...HOUSE_ACTS] as const;\n\nconst DECLARED = new Set<string>(HOUSE_PROVIDER_ACTIONS);\n\nexport const HISTORY_PAGE = 100;\n\nconst OCTET_STREAM = 'application/octet-stream';\n\nconst CONVERSATION_ROUTES: Readonly<Record<string, string>> = {\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 'conversations/interaction/read': '/door/conversations/interaction/read',\n 'conversations/originals/read': '/door/conversations/originals/read',\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(): readonly ActionDeclaration[] {\n return HOUSE_PROVIDER_ACTIONS.map((name) => ({\n name,\n inputShape: {},\n resultKind: 'house',\n }));\n}\n\nexport function houseAction(\n transport: HouseTransport,\n request: ActionRequest,\n): Promise<ActionResult> {\n if (!DECLARED.has(request.name)) {\n return Promise.resolve({\n kind: 'rejected',\n code: 'action-unimplemented',\n fields: { name: request.name, mdModel: VERSION },\n });\n }\n if (request.name === 'conversation.send') return sendAction(transport, request.input);\n if (request.name === 'conversation.history') return historyAction(transport, request.input);\n return carry(transport, request.name, request.input);\n}\n\nfunction routeOf(name: string): string {\n return CONVERSATION_ROUTES[name] ?? `/door/${name}`;\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 === 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 name: string,\n input: unknown,\n): Promise<ActionResult> {\n const answer = await transport.door(routeOf(name), 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":["VERSION","changeBatchIdentity","doorRefusal","PRIVATE_AUTHORITY","CONVERSATION_ACTIONS","HOUSE_ACTS","HOUSE_PROVIDER_ACTIONS","DECLARED","Set","HISTORY_PAGE","OCTET_STREAM","CONVERSATION_ROUTES","HOUSE_CONVERSATION_CARDS","locator","type","identity","agent","declaredActions","map","name","inputShape","resultKind","houseAction","transport","request","has","Promise","resolve","kind","code","fields","mdModel","sendAction","input","historyAction","carry","routeOf","record","value","text","held","undefined","operationId","malformed","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","length","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","slice","first","cursor","cursorValue","olderThan","mapped","at","findIndex"],"mappings":"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"}
|
|
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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"}
|
package/dist/adapter.js
CHANGED
|
@@ -172,7 +172,7 @@ export function createAgentsHouseAdapter(options) {
|
|
|
172
172
|
notifications.track(entries);
|
|
173
173
|
const acquired = await acquireModels(entries);
|
|
174
174
|
models.keep(entries.map((entry)=>entry.locator));
|
|
175
|
-
return mapDiscovery(document, document.authorities.map((authority)=>roomOf(authority, acquired)), capabilities());
|
|
175
|
+
return mapDiscovery(document, document.authorities.map((authority)=>roomOf(authority, acquired)), capabilities(document.actions));
|
|
176
176
|
},
|
|
177
177
|
async bootstrap (_authorization, request) {
|
|
178
178
|
const entry = authorityFor(request.locator);
|
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(),\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","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_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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"}
|
package/dist/discovery.d.ts
CHANGED
|
@@ -39,6 +39,7 @@ export type HouseDiscoveryDocument = {
|
|
|
39
39
|
bounds: HouseBounds;
|
|
40
40
|
mdModelVersion: string;
|
|
41
41
|
authorities: readonly HouseAuthority[];
|
|
42
|
+
actions: readonly string[];
|
|
42
43
|
};
|
|
43
44
|
export type TrackedAuthority = LogPosition & {
|
|
44
45
|
locator: string;
|
|
@@ -79,7 +80,7 @@ export declare function locatorOf(authority: HouseAuthority): string;
|
|
|
79
80
|
export declare function trackedFrom(document: HouseDiscoveryDocument): TrackedAuthority[];
|
|
80
81
|
export declare function providerLimits(bounds: HouseBounds): readonly ProviderLimit[];
|
|
81
82
|
export declare function declaredRetention(bounds: HouseBounds): Retention;
|
|
82
|
-
export declare function capabilities(): readonly Capability[];
|
|
83
|
+
export declare function capabilities(actions: readonly string[]): readonly Capability[];
|
|
83
84
|
export declare function siteCapabilities(): readonly Capability[];
|
|
84
85
|
export declare function providerSelection(attachedModel: TypedSelection['attachedModel']): TypedSelection;
|
|
85
86
|
export declare function discoveredRoom(authority: HouseAuthority, attachedModel: DiscoveredRoom['attachedModel'], typedSelection: TypedSelection | undefined): DiscoveredRoom;
|
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,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,UAAU,GAAG,aAAa,CAAC;IAC/C,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,UAAU,EAAE,eAAe,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,WAAW,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
|
package/dist/discovery.js
CHANGED
|
@@ -104,6 +104,8 @@ export function parseDiscovery(body) {
|
|
|
104
104
|
const bounds = parseBounds(held.bounds);
|
|
105
105
|
if (bounds === null) return null;
|
|
106
106
|
if (typeof held.md_model_version !== 'string' || held.md_model_version.length === 0) return null;
|
|
107
|
+
const actions = stringList(held.actions);
|
|
108
|
+
if (actions === null || new Set(actions).size !== actions.length || actions.some((name)=>name.length === 0)) return null;
|
|
107
109
|
if (!Array.isArray(held.authorities)) return null;
|
|
108
110
|
const authorities = [];
|
|
109
111
|
for (const entry of held.authorities){
|
|
@@ -114,7 +116,8 @@ export function parseDiscovery(body) {
|
|
|
114
116
|
return {
|
|
115
117
|
bounds,
|
|
116
118
|
mdModelVersion: held.md_model_version,
|
|
117
|
-
authorities
|
|
119
|
+
authorities,
|
|
120
|
+
actions
|
|
118
121
|
};
|
|
119
122
|
}
|
|
120
123
|
function parseSiteEntry(value) {
|
|
@@ -264,14 +267,14 @@ export function declaredRetention(bounds) {
|
|
|
264
267
|
refreshHorizon: bounds.change_retention_seconds
|
|
265
268
|
};
|
|
266
269
|
}
|
|
267
|
-
export function capabilities() {
|
|
270
|
+
export function capabilities(actions) {
|
|
268
271
|
return [
|
|
269
272
|
{
|
|
270
273
|
name: ROOM_VERSION_NOTIFICATIONS
|
|
271
274
|
},
|
|
272
275
|
{
|
|
273
276
|
name: PROVIDER_ACTIONS,
|
|
274
|
-
actions: declaredActions(),
|
|
277
|
+
actions: declaredActions(actions),
|
|
275
278
|
conversationCards: HOUSE_CONVERSATION_CARDS
|
|
276
279
|
},
|
|
277
280
|
{
|
package/dist/discovery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/workspace/packages/mdruntime-adapter/src/discovery.ts"],"sourcesContent":["import type {\n Capability,\n DiscoveredRoom,\n Discovery,\n ProviderLimit,\n Retention,\n TypedSelection,\n} from '@agentshouse/mdruntime';\nimport { declaredActions, HOUSE_CONVERSATION_CARDS } from './actions.js';\nimport { PRIVATE_AUTHORITY } from './transport.js';\nimport { readPosition, roomVersion, type LogPosition } from './version.js';\n\nexport const ROOM_CONTRACT_VERSION = 1;\n\nexport const MD_MODEL_IDENTITY = '@agentshouse/mdmodel';\n\nexport const ROOM_VERSION_NOTIFICATIONS = 'room-version-notifications';\n\nexport const PROVIDER_ACTIONS = 'provider-actions';\n\nexport const MOVE_REFERENCE_REWRITES = 'move-reference-rewrites';\n\nexport const DISCOVER_PREFIXES: readonly string[] = ['/'];\n\nexport const PROVIDER_SELECTION_ROOTS: readonly string[] = ['agents', 'house'];\n\nexport const PROVIDER_SELECTION_MODEL_ROOT = 'house/settings/model';\n\nexport type HouseBounds = {\n max_authored_file_bytes: number;\n max_batch_operations: number;\n max_path_length: number;\n max_path_depth: number;\n max_mount_files: number;\n max_mount_bytes: number;\n change_retention_seconds: number;\n operation_retention_seconds: number;\n};\n\nexport type HouseOperations = {\n read: readonly string[];\n sync: readonly string[];\n write: readonly string[];\n delete: readonly string[];\n};\n\nexport type HouseAuthority = LogPosition & {\n kind: 'room' | 'private';\n roomRef: string;\n roomHandle: string | null;\n name: string;\n collectionRoot: string;\n modelRoot: string;\n managedReplication: 'admitted' | 'unavailable';\n protectedPaths: readonly string[];\n operations: HouseOperations;\n};\n\nexport type HouseDiscoveryDocument = {\n bounds: HouseBounds;\n mdModelVersion: string;\n authorities: readonly HouseAuthority[];\n};\n\nexport type TrackedAuthority = LogPosition & {\n locator: string;\n authority: string;\n handle: string | undefined;\n collectionRoot: string;\n modelRoot: string;\n modelRoots: readonly string[];\n};\n\nexport type HouseSiteEntry = {\n roomRef: string;\n segment: string;\n};\n\nexport type HouseSiteSlot = {\n slot: string;\n entries: readonly HouseSiteEntry[];\n};\n\nexport type HouseSiteAuthority = LogPosition & {\n roomRef: string;\n roomHandle: string;\n collectionRoot: string;\n modelRoot: string;\n};\n\nexport type HouseSiteDiscovery = {\n bounds: HouseBounds;\n mdModelVersion: string;\n slots: readonly HouseSiteSlot[];\n authorities: readonly HouseSiteAuthority[];\n};\n\nexport type SiteTracked = TrackedAuthority & { handle: string };\n\nconst BOUND_KEYS: readonly (keyof HouseBounds)[] = [\n 'max_authored_file_bytes',\n 'max_batch_operations',\n 'max_path_length',\n 'max_path_depth',\n 'max_mount_files',\n 'max_mount_bytes',\n 'change_retention_seconds',\n 'operation_retention_seconds',\n];\n\nconst OPERATION_KEYS: readonly (keyof HouseOperations)[] = ['read', 'sync', 'write', 'delete'];\n\nfunction stringList(value: unknown): readonly string[] | null {\n if (!Array.isArray(value)) return null;\n return value.every((entry) => typeof entry === 'string') ? (value as string[]) : null;\n}\n\nfunction parseBounds(value: unknown): HouseBounds | null {\n if (typeof value !== 'object' || value === null) return null;\n const held = value as Record<string, unknown>;\n const bounds: Partial<HouseBounds> = {};\n for (const key of BOUND_KEYS) {\n const amount = held[key];\n if (typeof amount !== 'number' || !Number.isFinite(amount)) return null;\n bounds[key] = amount;\n }\n return bounds as HouseBounds;\n}\n\nfunction parseOperations(value: unknown): HouseOperations | null {\n if (typeof value !== 'object' || value === null) return null;\n const held = value as Record<string, unknown>;\n const operations: Partial<Record<keyof HouseOperations, readonly string[]>> = {};\n for (const key of OPERATION_KEYS) {\n const scopes = stringList(held[key]);\n if (scopes === null) return null;\n operations[key] = scopes;\n }\n return operations as HouseOperations;\n}\n\nfunction parseAuthority(value: unknown): HouseAuthority | null {\n if (typeof value !== 'object' || value === null) return null;\n const held = value as Record<string, unknown>;\n if (held.kind !== 'room' && held.kind !== 'private') return null;\n if (typeof held.name !== 'string' || held.name.length === 0) return null;\n if (typeof held.collection_root !== 'string' || typeof held.model_root !== 'string') return null;\n if (held.managed_replication !== 'admitted' && held.managed_replication !== 'unavailable') {\n return null;\n }\n const at = readPosition(held);\n const protectedPaths = stringList(held.protected_paths);\n const operations = parseOperations(held.operations);\n if (at === null || protectedPaths === null || operations === null) return null;\n if (held.kind === 'private') {\n return {\n kind: 'private',\n roomRef: PRIVATE_AUTHORITY,\n roomHandle: null,\n name: held.name,\n collectionRoot: held.collection_root,\n modelRoot: held.model_root,\n managedReplication: held.managed_replication,\n protectedPaths,\n operations,\n ...at,\n };\n }\n if (typeof held.room_ref !== 'string' || held.room_ref.length === 0) return null;\n if (typeof held.room_handle !== 'string' || held.room_handle.length === 0) return null;\n return {\n kind: 'room',\n roomRef: held.room_ref,\n roomHandle: held.room_handle,\n name: held.name,\n collectionRoot: held.collection_root,\n modelRoot: held.model_root,\n managedReplication: held.managed_replication,\n protectedPaths,\n operations,\n ...at,\n };\n}\n\nexport function parseDiscovery(body: unknown): HouseDiscoveryDocument | null {\n if (typeof body !== 'object' || body === null) return null;\n const held = body as Record<string, unknown>;\n const bounds = parseBounds(held.bounds);\n if (bounds === null) return null;\n if (typeof held.md_model_version !== 'string' || held.md_model_version.length === 0) return null;\n if (!Array.isArray(held.authorities)) return null;\n const authorities: HouseAuthority[] = [];\n for (const entry of held.authorities) {\n const authority = parseAuthority(entry);\n if (authority === null) return null;\n authorities.push(authority);\n }\n return { bounds, mdModelVersion: held.md_model_version, authorities };\n}\n\nfunction parseSiteEntry(value: unknown): HouseSiteEntry | null {\n if (typeof value !== 'object' || value === null) return null;\n const held = value as Record<string, unknown>;\n if (typeof held.room_ref !== 'string' || held.room_ref.length === 0) return null;\n if (typeof held.segment !== 'string' || held.segment.length === 0) return null;\n return { roomRef: held.room_ref, segment: held.segment };\n}\n\nfunction parseSiteSlot(value: unknown): HouseSiteSlot | null {\n if (typeof value !== 'object' || value === null) return null;\n const held = value as Record<string, unknown>;\n if (typeof held.slot !== 'string' || held.slot.length === 0) return null;\n if (!Array.isArray(held.entries)) return null;\n const entries: HouseSiteEntry[] = [];\n for (const entry of held.entries) {\n const parsed = parseSiteEntry(entry);\n if (parsed === null) return null;\n entries.push(parsed);\n }\n return { slot: held.slot, entries };\n}\n\nfunction parseSiteAuthority(value: unknown): HouseSiteAuthority | null {\n if (typeof value !== 'object' || value === null) return null;\n const held = value as Record<string, unknown>;\n if (held.kind !== 'room') return null;\n if (typeof held.room_ref !== 'string' || held.room_ref.length === 0) return null;\n if (typeof held.room_handle !== 'string' || held.room_handle.length === 0) return null;\n if (typeof held.collection_root !== 'string' || typeof held.model_root !== 'string') return null;\n const at = readPosition(held);\n if (at === null) return null;\n return {\n roomRef: held.room_ref,\n roomHandle: held.room_handle,\n collectionRoot: held.collection_root,\n modelRoot: held.model_root,\n ...at,\n };\n}\n\nexport function parseSiteDiscovery(body: unknown): HouseSiteDiscovery | null {\n if (typeof body !== 'object' || body === null) return null;\n const held = body as Record<string, unknown>;\n const bounds = parseBounds(held.bounds);\n if (bounds === null) return null;\n if (typeof held.md_model_version !== 'string' || held.md_model_version.length === 0) return null;\n if (!Array.isArray(held.slots) || !Array.isArray(held.authorities)) return null;\n const slots: HouseSiteSlot[] = [];\n for (const entry of held.slots) {\n const slot = parseSiteSlot(entry);\n if (slot === null) return null;\n slots.push(slot);\n }\n const authorities: HouseSiteAuthority[] = [];\n for (const entry of held.authorities) {\n const authority = parseSiteAuthority(entry);\n if (authority === null) return null;\n authorities.push(authority);\n }\n return { bounds, mdModelVersion: held.md_model_version, slots, authorities };\n}\n\nexport function siteTracked(document: HouseSiteDiscovery): SiteTracked[] {\n return document.authorities.map((authority) => ({\n locator: authority.roomRef,\n authority: authority.roomRef,\n handle: authority.roomHandle,\n collectionRoot: authority.collectionRoot,\n modelRoot: authority.modelRoot,\n modelRoots: [authority.modelRoot],\n position: authority.position,\n logEpoch: authority.logEpoch,\n }));\n}\n\nexport function siteSlots(document: HouseSiteDiscovery): Discovery['slots'] {\n return document.slots.map(({ slot, entries }) => ({\n slot,\n entries: entries.map(({ roomRef, segment }) => ({ locator: roomRef, segment })),\n }));\n}\n\nexport function locatorOf(authority: HouseAuthority): string {\n return authority.roomHandle ?? PRIVATE_AUTHORITY;\n}\n\nexport function trackedFrom(document: HouseDiscoveryDocument): TrackedAuthority[] {\n return document.authorities.map((authority) => ({\n locator: locatorOf(authority),\n authority: authority.roomRef,\n handle: authority.roomHandle ?? undefined,\n collectionRoot: authority.collectionRoot,\n modelRoot: authority.modelRoot,\n modelRoots:\n authority.kind === 'private'\n ? [authority.modelRoot, PROVIDER_SELECTION_MODEL_ROOT]\n : [authority.modelRoot],\n position: authority.position,\n logEpoch: authority.logEpoch,\n }));\n}\n\nexport function providerLimits(bounds: HouseBounds): readonly ProviderLimit[] {\n return [\n { name: 'document-size', value: bounds.max_authored_file_bytes },\n { name: 'change-batch-operations', value: bounds.max_batch_operations },\n { name: 'path-length', value: bounds.max_path_length },\n { name: 'path-depth', value: bounds.max_path_depth },\n { name: 'write-rate' },\n { name: 'content-ceiling' },\n ];\n}\n\nexport function declaredRetention(bounds: HouseBounds): Retention {\n return {\n history: { kind: 'no-declared-time-bound' },\n outcome: bounds.operation_retention_seconds,\n refreshHorizon: bounds.change_retention_seconds,\n };\n}\n\nexport function capabilities(): readonly Capability[] {\n return [\n { name: ROOM_VERSION_NOTIFICATIONS },\n {\n name: PROVIDER_ACTIONS,\n actions: declaredActions(),\n conversationCards: HOUSE_CONVERSATION_CARDS,\n },\n { name: MOVE_REFERENCE_REWRITES },\n ];\n}\n\nexport function siteCapabilities(): readonly Capability[] {\n return [\n { name: ROOM_VERSION_NOTIFICATIONS },\n { name: PROVIDER_ACTIONS, actions: [{ name: 'submit', inputShape: {}, resultKind: 'house' }] },\n ];\n}\n\nexport function providerSelection(attachedModel: TypedSelection['attachedModel']): TypedSelection {\n return { roots: [...PROVIDER_SELECTION_ROOTS], attachedModel };\n}\n\nexport function discoveredRoom(\n authority: HouseAuthority,\n attachedModel: DiscoveredRoom['attachedModel'],\n typedSelection: TypedSelection | undefined,\n): DiscoveredRoom {\n return {\n name: authority.name,\n locator: locatorOf(authority),\n collectionRoot: authority.collectionRoot,\n roomVersion: roomVersion(authority),\n operations: {\n read: [...authority.operations.read],\n sync: [...authority.operations.sync],\n write: [...authority.operations.write],\n delete: [...authority.operations.delete],\n },\n replica: { selection: locatorOf(authority), admission: authority.managedReplication },\n attachedModel,\n ...(typedSelection === undefined ? {} : { typedSelection }),\n providerOwnedPaths: [...authority.protectedPaths],\n };\n}\n\nexport function mapDiscovery(\n document: Pick<HouseDiscoveryDocument, 'bounds' | 'mdModelVersion'>,\n rooms: readonly DiscoveredRoom[],\n declared: readonly Capability[],\n): Discovery {\n return {\n kind: 'discovery',\n supportedVersions: [ROOM_CONTRACT_VERSION],\n mdModel: { identity: MD_MODEL_IDENTITY, version: document.mdModelVersion },\n rooms,\n capabilities: declared,\n providerLimits: providerLimits(document.bounds),\n retention: declaredRetention(document.bounds),\n };\n}\n"],"names":["declaredActions","HOUSE_CONVERSATION_CARDS","PRIVATE_AUTHORITY","readPosition","roomVersion","ROOM_CONTRACT_VERSION","MD_MODEL_IDENTITY","ROOM_VERSION_NOTIFICATIONS","PROVIDER_ACTIONS","MOVE_REFERENCE_REWRITES","DISCOVER_PREFIXES","PROVIDER_SELECTION_ROOTS","PROVIDER_SELECTION_MODEL_ROOT","BOUND_KEYS","OPERATION_KEYS","stringList","value","Array","isArray","every","entry","parseBounds","held","bounds","key","amount","Number","isFinite","parseOperations","operations","scopes","parseAuthority","kind","name","length","collection_root","model_root","managed_replication","at","protectedPaths","protected_paths","roomRef","roomHandle","collectionRoot","modelRoot","managedReplication","room_ref","room_handle","parseDiscovery","body","md_model_version","authorities","authority","push","mdModelVersion","parseSiteEntry","segment","parseSiteSlot","slot","entries","parsed","parseSiteAuthority","parseSiteDiscovery","slots","siteTracked","document","map","locator","handle","modelRoots","position","logEpoch","siteSlots","locatorOf","trackedFrom","undefined","providerLimits","max_authored_file_bytes","max_batch_operations","max_path_length","max_path_depth","declaredRetention","history","outcome","operation_retention_seconds","refreshHorizon","change_retention_seconds","capabilities","actions","conversationCards","siteCapabilities","inputShape","resultKind","providerSelection","attachedModel","roots","discoveredRoom","typedSelection","read","sync","write","delete","replica","selection","admission","providerOwnedPaths","mapDiscovery","rooms","declared","supportedVersions","mdModel","identity","version","retention"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime-adapter/src/discovery.ts"],"sourcesContent":["import type {\n Capability,\n DiscoveredRoom,\n Discovery,\n ProviderLimit,\n Retention,\n TypedSelection,\n} from '@agentshouse/mdruntime';\nimport { declaredActions, HOUSE_CONVERSATION_CARDS } from './actions.js';\nimport { PRIVATE_AUTHORITY } from './transport.js';\nimport { readPosition, roomVersion, type LogPosition } from './version.js';\n\nexport const ROOM_CONTRACT_VERSION = 1;\n\nexport const MD_MODEL_IDENTITY = '@agentshouse/mdmodel';\n\nexport const ROOM_VERSION_NOTIFICATIONS = 'room-version-notifications';\n\nexport const PROVIDER_ACTIONS = 'provider-actions';\n\nexport const MOVE_REFERENCE_REWRITES = 'move-reference-rewrites';\n\nexport const DISCOVER_PREFIXES: readonly string[] = ['/'];\n\nexport const PROVIDER_SELECTION_ROOTS: readonly string[] = ['agents', 'house'];\n\nexport const PROVIDER_SELECTION_MODEL_ROOT = 'house/settings/model';\n\nexport type HouseBounds = {\n max_authored_file_bytes: number;\n max_batch_operations: number;\n max_path_length: number;\n max_path_depth: number;\n max_mount_files: number;\n max_mount_bytes: number;\n change_retention_seconds: number;\n operation_retention_seconds: number;\n};\n\nexport type HouseOperations = {\n read: readonly string[];\n sync: readonly string[];\n write: readonly string[];\n delete: readonly string[];\n};\n\nexport type HouseAuthority = LogPosition & {\n kind: 'room' | 'private';\n roomRef: string;\n roomHandle: string | null;\n name: string;\n collectionRoot: string;\n modelRoot: string;\n managedReplication: 'admitted' | 'unavailable';\n protectedPaths: readonly string[];\n operations: HouseOperations;\n};\n\nexport type HouseDiscoveryDocument = {\n bounds: HouseBounds;\n mdModelVersion: string;\n authorities: readonly HouseAuthority[];\n actions: readonly string[];\n};\n\nexport type TrackedAuthority = LogPosition & {\n locator: string;\n authority: string;\n handle: string | undefined;\n collectionRoot: string;\n modelRoot: string;\n modelRoots: readonly string[];\n};\n\nexport type HouseSiteEntry = {\n roomRef: string;\n segment: string;\n};\n\nexport type HouseSiteSlot = {\n slot: string;\n entries: readonly HouseSiteEntry[];\n};\n\nexport type HouseSiteAuthority = LogPosition & {\n roomRef: string;\n roomHandle: string;\n collectionRoot: string;\n modelRoot: string;\n};\n\nexport type HouseSiteDiscovery = {\n bounds: HouseBounds;\n mdModelVersion: string;\n slots: readonly HouseSiteSlot[];\n authorities: readonly HouseSiteAuthority[];\n};\n\nexport type SiteTracked = TrackedAuthority & { handle: string };\n\nconst BOUND_KEYS: readonly (keyof HouseBounds)[] = [\n 'max_authored_file_bytes',\n 'max_batch_operations',\n 'max_path_length',\n 'max_path_depth',\n 'max_mount_files',\n 'max_mount_bytes',\n 'change_retention_seconds',\n 'operation_retention_seconds',\n];\n\nconst OPERATION_KEYS: readonly (keyof HouseOperations)[] = ['read', 'sync', 'write', 'delete'];\n\nfunction stringList(value: unknown): readonly string[] | null {\n if (!Array.isArray(value)) return null;\n return value.every((entry) => typeof entry === 'string') ? (value as string[]) : null;\n}\n\nfunction parseBounds(value: unknown): HouseBounds | null {\n if (typeof value !== 'object' || value === null) return null;\n const held = value as Record<string, unknown>;\n const bounds: Partial<HouseBounds> = {};\n for (const key of BOUND_KEYS) {\n const amount = held[key];\n if (typeof amount !== 'number' || !Number.isFinite(amount)) return null;\n bounds[key] = amount;\n }\n return bounds as HouseBounds;\n}\n\nfunction parseOperations(value: unknown): HouseOperations | null {\n if (typeof value !== 'object' || value === null) return null;\n const held = value as Record<string, unknown>;\n const operations: Partial<Record<keyof HouseOperations, readonly string[]>> = {};\n for (const key of OPERATION_KEYS) {\n const scopes = stringList(held[key]);\n if (scopes === null) return null;\n operations[key] = scopes;\n }\n return operations as HouseOperations;\n}\n\nfunction parseAuthority(value: unknown): HouseAuthority | null {\n if (typeof value !== 'object' || value === null) return null;\n const held = value as Record<string, unknown>;\n if (held.kind !== 'room' && held.kind !== 'private') return null;\n if (typeof held.name !== 'string' || held.name.length === 0) return null;\n if (typeof held.collection_root !== 'string' || typeof held.model_root !== 'string') return null;\n if (held.managed_replication !== 'admitted' && held.managed_replication !== 'unavailable') {\n return null;\n }\n const at = readPosition(held);\n const protectedPaths = stringList(held.protected_paths);\n const operations = parseOperations(held.operations);\n if (at === null || protectedPaths === null || operations === null) return null;\n if (held.kind === 'private') {\n return {\n kind: 'private',\n roomRef: PRIVATE_AUTHORITY,\n roomHandle: null,\n name: held.name,\n collectionRoot: held.collection_root,\n modelRoot: held.model_root,\n managedReplication: held.managed_replication,\n protectedPaths,\n operations,\n ...at,\n };\n }\n if (typeof held.room_ref !== 'string' || held.room_ref.length === 0) return null;\n if (typeof held.room_handle !== 'string' || held.room_handle.length === 0) return null;\n return {\n kind: 'room',\n roomRef: held.room_ref,\n roomHandle: held.room_handle,\n name: held.name,\n collectionRoot: held.collection_root,\n modelRoot: held.model_root,\n managedReplication: held.managed_replication,\n protectedPaths,\n operations,\n ...at,\n };\n}\n\nexport function parseDiscovery(body: unknown): HouseDiscoveryDocument | null {\n if (typeof body !== 'object' || body === null) return null;\n const held = body as Record<string, unknown>;\n const bounds = parseBounds(held.bounds);\n if (bounds === null) return null;\n if (typeof held.md_model_version !== 'string' || held.md_model_version.length === 0) return null;\n const actions = stringList(held.actions);\n if (\n actions === null ||\n new Set(actions).size !== actions.length ||\n actions.some((name) => name.length === 0)\n )\n return null;\n if (!Array.isArray(held.authorities)) return null;\n const authorities: HouseAuthority[] = [];\n for (const entry of held.authorities) {\n const authority = parseAuthority(entry);\n if (authority === null) return null;\n authorities.push(authority);\n }\n return { bounds, mdModelVersion: held.md_model_version, authorities, actions };\n}\n\nfunction parseSiteEntry(value: unknown): HouseSiteEntry | null {\n if (typeof value !== 'object' || value === null) return null;\n const held = value as Record<string, unknown>;\n if (typeof held.room_ref !== 'string' || held.room_ref.length === 0) return null;\n if (typeof held.segment !== 'string' || held.segment.length === 0) return null;\n return { roomRef: held.room_ref, segment: held.segment };\n}\n\nfunction parseSiteSlot(value: unknown): HouseSiteSlot | null {\n if (typeof value !== 'object' || value === null) return null;\n const held = value as Record<string, unknown>;\n if (typeof held.slot !== 'string' || held.slot.length === 0) return null;\n if (!Array.isArray(held.entries)) return null;\n const entries: HouseSiteEntry[] = [];\n for (const entry of held.entries) {\n const parsed = parseSiteEntry(entry);\n if (parsed === null) return null;\n entries.push(parsed);\n }\n return { slot: held.slot, entries };\n}\n\nfunction parseSiteAuthority(value: unknown): HouseSiteAuthority | null {\n if (typeof value !== 'object' || value === null) return null;\n const held = value as Record<string, unknown>;\n if (held.kind !== 'room') return null;\n if (typeof held.room_ref !== 'string' || held.room_ref.length === 0) return null;\n if (typeof held.room_handle !== 'string' || held.room_handle.length === 0) return null;\n if (typeof held.collection_root !== 'string' || typeof held.model_root !== 'string') return null;\n const at = readPosition(held);\n if (at === null) return null;\n return {\n roomRef: held.room_ref,\n roomHandle: held.room_handle,\n collectionRoot: held.collection_root,\n modelRoot: held.model_root,\n ...at,\n };\n}\n\nexport function parseSiteDiscovery(body: unknown): HouseSiteDiscovery | null {\n if (typeof body !== 'object' || body === null) return null;\n const held = body as Record<string, unknown>;\n const bounds = parseBounds(held.bounds);\n if (bounds === null) return null;\n if (typeof held.md_model_version !== 'string' || held.md_model_version.length === 0) return null;\n if (!Array.isArray(held.slots) || !Array.isArray(held.authorities)) return null;\n const slots: HouseSiteSlot[] = [];\n for (const entry of held.slots) {\n const slot = parseSiteSlot(entry);\n if (slot === null) return null;\n slots.push(slot);\n }\n const authorities: HouseSiteAuthority[] = [];\n for (const entry of held.authorities) {\n const authority = parseSiteAuthority(entry);\n if (authority === null) return null;\n authorities.push(authority);\n }\n return { bounds, mdModelVersion: held.md_model_version, slots, authorities };\n}\n\nexport function siteTracked(document: HouseSiteDiscovery): SiteTracked[] {\n return document.authorities.map((authority) => ({\n locator: authority.roomRef,\n authority: authority.roomRef,\n handle: authority.roomHandle,\n collectionRoot: authority.collectionRoot,\n modelRoot: authority.modelRoot,\n modelRoots: [authority.modelRoot],\n position: authority.position,\n logEpoch: authority.logEpoch,\n }));\n}\n\nexport function siteSlots(document: HouseSiteDiscovery): Discovery['slots'] {\n return document.slots.map(({ slot, entries }) => ({\n slot,\n entries: entries.map(({ roomRef, segment }) => ({ locator: roomRef, segment })),\n }));\n}\n\nexport function locatorOf(authority: HouseAuthority): string {\n return authority.roomHandle ?? PRIVATE_AUTHORITY;\n}\n\nexport function trackedFrom(document: HouseDiscoveryDocument): TrackedAuthority[] {\n return document.authorities.map((authority) => ({\n locator: locatorOf(authority),\n authority: authority.roomRef,\n handle: authority.roomHandle ?? undefined,\n collectionRoot: authority.collectionRoot,\n modelRoot: authority.modelRoot,\n modelRoots:\n authority.kind === 'private'\n ? [authority.modelRoot, PROVIDER_SELECTION_MODEL_ROOT]\n : [authority.modelRoot],\n position: authority.position,\n logEpoch: authority.logEpoch,\n }));\n}\n\nexport function providerLimits(bounds: HouseBounds): readonly ProviderLimit[] {\n return [\n { name: 'document-size', value: bounds.max_authored_file_bytes },\n { name: 'change-batch-operations', value: bounds.max_batch_operations },\n { name: 'path-length', value: bounds.max_path_length },\n { name: 'path-depth', value: bounds.max_path_depth },\n { name: 'write-rate' },\n { name: 'content-ceiling' },\n ];\n}\n\nexport function declaredRetention(bounds: HouseBounds): Retention {\n return {\n history: { kind: 'no-declared-time-bound' },\n outcome: bounds.operation_retention_seconds,\n refreshHorizon: bounds.change_retention_seconds,\n };\n}\n\nexport function capabilities(actions: readonly string[]): readonly Capability[] {\n return [\n { name: ROOM_VERSION_NOTIFICATIONS },\n {\n name: PROVIDER_ACTIONS,\n actions: declaredActions(actions),\n conversationCards: HOUSE_CONVERSATION_CARDS,\n },\n { name: MOVE_REFERENCE_REWRITES },\n ];\n}\n\nexport function siteCapabilities(): readonly Capability[] {\n return [\n { name: ROOM_VERSION_NOTIFICATIONS },\n { name: PROVIDER_ACTIONS, actions: [{ name: 'submit', inputShape: {}, resultKind: 'house' }] },\n ];\n}\n\nexport function providerSelection(attachedModel: TypedSelection['attachedModel']): TypedSelection {\n return { roots: [...PROVIDER_SELECTION_ROOTS], attachedModel };\n}\n\nexport function discoveredRoom(\n authority: HouseAuthority,\n attachedModel: DiscoveredRoom['attachedModel'],\n typedSelection: TypedSelection | undefined,\n): DiscoveredRoom {\n return {\n name: authority.name,\n locator: locatorOf(authority),\n collectionRoot: authority.collectionRoot,\n roomVersion: roomVersion(authority),\n operations: {\n read: [...authority.operations.read],\n sync: [...authority.operations.sync],\n write: [...authority.operations.write],\n delete: [...authority.operations.delete],\n },\n replica: { selection: locatorOf(authority), admission: authority.managedReplication },\n attachedModel,\n ...(typedSelection === undefined ? {} : { typedSelection }),\n providerOwnedPaths: [...authority.protectedPaths],\n };\n}\n\nexport function mapDiscovery(\n document: Pick<HouseDiscoveryDocument, 'bounds' | 'mdModelVersion'>,\n rooms: readonly DiscoveredRoom[],\n declared: readonly Capability[],\n): Discovery {\n return {\n kind: 'discovery',\n supportedVersions: [ROOM_CONTRACT_VERSION],\n mdModel: { identity: MD_MODEL_IDENTITY, version: document.mdModelVersion },\n rooms,\n capabilities: declared,\n providerLimits: providerLimits(document.bounds),\n retention: declaredRetention(document.bounds),\n };\n}\n"],"names":["declaredActions","HOUSE_CONVERSATION_CARDS","PRIVATE_AUTHORITY","readPosition","roomVersion","ROOM_CONTRACT_VERSION","MD_MODEL_IDENTITY","ROOM_VERSION_NOTIFICATIONS","PROVIDER_ACTIONS","MOVE_REFERENCE_REWRITES","DISCOVER_PREFIXES","PROVIDER_SELECTION_ROOTS","PROVIDER_SELECTION_MODEL_ROOT","BOUND_KEYS","OPERATION_KEYS","stringList","value","Array","isArray","every","entry","parseBounds","held","bounds","key","amount","Number","isFinite","parseOperations","operations","scopes","parseAuthority","kind","name","length","collection_root","model_root","managed_replication","at","protectedPaths","protected_paths","roomRef","roomHandle","collectionRoot","modelRoot","managedReplication","room_ref","room_handle","parseDiscovery","body","md_model_version","actions","Set","size","some","authorities","authority","push","mdModelVersion","parseSiteEntry","segment","parseSiteSlot","slot","entries","parsed","parseSiteAuthority","parseSiteDiscovery","slots","siteTracked","document","map","locator","handle","modelRoots","position","logEpoch","siteSlots","locatorOf","trackedFrom","undefined","providerLimits","max_authored_file_bytes","max_batch_operations","max_path_length","max_path_depth","declaredRetention","history","outcome","operation_retention_seconds","refreshHorizon","change_retention_seconds","capabilities","conversationCards","siteCapabilities","inputShape","resultKind","providerSelection","attachedModel","roots","discoveredRoom","typedSelection","read","sync","write","delete","replica","selection","admission","providerOwnedPaths","mapDiscovery","rooms","declared","supportedVersions","mdModel","identity","version","retention"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentshouse/mdruntime-adapter",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.15",
|
|
4
4
|
"description": "Agents House Adapter for the MD Runtime",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"url": "https://github.com/agentshouse/mdruntime/issues"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@agentshouse/mdmodel": "0.1.0-alpha.
|
|
37
|
-
"@agentshouse/mdruntime": "0.1.0-alpha.
|
|
36
|
+
"@agentshouse/mdmodel": "0.1.0-alpha.13",
|
|
37
|
+
"@agentshouse/mdruntime": "0.1.0-alpha.20"
|
|
38
38
|
}
|
|
39
39
|
}
|