@agentshouse/mdruntime-adapter 0.1.0-ce4626067e686 → 0.1.0-ce5ef9afd7e9a
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 +289 -246
- package/dist/actions.d.ts +68 -1
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +134 -110
- package/dist/adapter.d.ts +1 -0
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +335 -98
- package/dist/discovery.d.ts +5 -3
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +34 -12
- package/dist/gather.d.ts +1 -1
- package/dist/gather.d.ts.map +1 -1
- package/dist/gather.js +4 -14
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/model.d.ts +0 -1
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +0 -3
- package/dist/part.d.ts +13 -0
- package/dist/part.d.ts.map +1 -0
- package/dist/part.js +80 -0
- package/dist/read.d.ts +70 -23
- package/dist/read.d.ts.map +1 -1
- package/dist/read.js +351 -136
- package/dist/referrer.d.ts +9 -0
- package/dist/referrer.d.ts.map +1 -0
- package/dist/referrer.js +41 -0
- package/dist/refusal.d.ts.map +1 -1
- package/dist/refusal.js +2 -1
- package/dist/room-types.d.ts +6 -0
- package/dist/room-types.d.ts.map +1 -0
- package/dist/room-types.js +66 -0
- package/dist/site.d.ts +1 -1
- package/dist/site.d.ts.map +1 -1
- package/dist/site.js +170 -56
- package/dist/stream.d.ts +5 -4
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +355 -42
- package/dist/transport.d.ts +67 -8
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +4 -0
- package/dist/upload.d.ts +12 -0
- package/dist/upload.d.ts.map +1 -0
- package/dist/upload.js +52 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/write.d.ts +13 -9
- package/dist/write.d.ts.map +1 -1
- package/dist/write.js +141 -40
- package/package.json +2 -3
- package/dist/links.d.ts +0 -20
- package/dist/links.d.ts.map +0 -1
- package/dist/links.js +0 -104
package/dist/actions.d.ts
CHANGED
|
@@ -1,9 +1,76 @@
|
|
|
1
|
-
import { type AcceptedMessage, type ActionDeclaration, type ActionRequest, type ActionResult, type ConversationAgents } from '@agentshouse/mdruntime';
|
|
1
|
+
import { type AcceptedMessage, type ActionDeclaration, type ActionRequest, type ActionResult, type ConversationAgents, type ConversationHistories, type ConversationHistoryRequest, type FileDeclaration } from '@agentshouse/mdruntime';
|
|
2
2
|
import type { HouseDoorAnswer, HouseTransport } from './transport.js';
|
|
3
|
+
type Operated = {
|
|
4
|
+
readonly operation_id?: string;
|
|
5
|
+
};
|
|
6
|
+
type ConversationControl = Operated & {
|
|
7
|
+
readonly conversation: string;
|
|
8
|
+
};
|
|
9
|
+
export type AppInputs = {
|
|
10
|
+
readonly 'conversation.attach': FileDeclaration & {
|
|
11
|
+
readonly room: string;
|
|
12
|
+
readonly blob: Blob;
|
|
13
|
+
};
|
|
14
|
+
readonly 'conversation.answer': ConversationControl & {
|
|
15
|
+
readonly answer: {
|
|
16
|
+
readonly interaction_id: string;
|
|
17
|
+
readonly response: unknown;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
readonly 'conversation.create': Operated & {
|
|
21
|
+
readonly agent_id: string;
|
|
22
|
+
readonly replaces?: string;
|
|
23
|
+
};
|
|
24
|
+
readonly 'conversation.delete': ConversationControl;
|
|
25
|
+
readonly 'conversation.history': ConversationHistoryRequest;
|
|
26
|
+
readonly 'conversation.interrupt': ConversationControl;
|
|
27
|
+
readonly 'conversation.kill': ConversationControl;
|
|
28
|
+
readonly 'conversation.send': ConversationControl & {
|
|
29
|
+
readonly operation_id: string;
|
|
30
|
+
readonly text: string;
|
|
31
|
+
};
|
|
32
|
+
readonly 'trigger.list': {
|
|
33
|
+
readonly room_refs: readonly string[];
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
export type AppAnswers = {
|
|
37
|
+
readonly 'conversation.attach': {
|
|
38
|
+
readonly path: string;
|
|
39
|
+
};
|
|
40
|
+
readonly 'conversation.history': ConversationHistories;
|
|
41
|
+
};
|
|
42
|
+
export type AppAnswerAdditions = {
|
|
43
|
+
readonly 'conversation.create': {
|
|
44
|
+
readonly conversation: string;
|
|
45
|
+
};
|
|
46
|
+
readonly 'conversation.send': {
|
|
47
|
+
readonly turn: string;
|
|
48
|
+
};
|
|
49
|
+
readonly 'record.list': {
|
|
50
|
+
readonly attachments: readonly {
|
|
51
|
+
readonly referrer: {
|
|
52
|
+
readonly room_ref: string;
|
|
53
|
+
readonly record: string;
|
|
54
|
+
};
|
|
55
|
+
}[];
|
|
56
|
+
readonly records: readonly {
|
|
57
|
+
readonly attachments: readonly {
|
|
58
|
+
readonly referrer: {
|
|
59
|
+
readonly room_ref: string;
|
|
60
|
+
readonly record: string;
|
|
61
|
+
};
|
|
62
|
+
}[];
|
|
63
|
+
}[];
|
|
64
|
+
};
|
|
65
|
+
};
|
|
3
66
|
export declare const HOUSE_APP_ACTS: Readonly<Record<string, string>>;
|
|
67
|
+
export declare const SITE_SUBMIT = "submit";
|
|
68
|
+
export declare const HOUSE_SITE_ACTS: Readonly<Record<string, string>>;
|
|
69
|
+
export declare const HOUSE_APP_BATCHES: Readonly<Partial<Record<string, readonly string[]>>>;
|
|
4
70
|
export declare function houseConversationAgents(locator: string): ConversationAgents;
|
|
5
71
|
export declare function declaredActions(routes: readonly string[]): readonly ActionDeclaration[];
|
|
6
72
|
export declare function houseAction(transport: HouseTransport, request: ActionRequest): Promise<ActionResult>;
|
|
7
73
|
export declare function actionOutcome(answer: HouseDoorAnswer, name: string): ActionResult;
|
|
8
74
|
export declare function acceptedMessage(entry: unknown): AcceptedMessage | null;
|
|
75
|
+
export {};
|
|
9
76
|
//# sourceMappingURL=actions.d.ts.map
|
package/dist/actions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
|
package/dist/actions.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { changeBatchIdentity, } from '@agentshouse/mdruntime';
|
|
2
2
|
import { doorRefusal } from './refusal.js';
|
|
3
|
+
import { finishedUpload, houseUpload } from './upload.js';
|
|
3
4
|
const HISTORY_PAGE = 100;
|
|
4
5
|
const HISTORY_CONVERSATIONS = 64;
|
|
6
|
+
const TRIGGER_ROOMS = 100;
|
|
5
7
|
const OCTET_STREAM = 'application/octet-stream';
|
|
6
8
|
function mapped(door, input = (given) => given) {
|
|
7
9
|
return {
|
|
@@ -11,51 +13,63 @@ function mapped(door, input = (given) => given) {
|
|
|
11
13
|
},
|
|
12
14
|
};
|
|
13
15
|
}
|
|
14
|
-
function carried(door, carry) {
|
|
16
|
+
function carried(door, carry, batched, room) {
|
|
15
17
|
return {
|
|
16
18
|
door,
|
|
19
|
+
...(batched === undefined ? {} : { batched }),
|
|
20
|
+
...(room === undefined ? {} : { room }),
|
|
17
21
|
carry: (transport, input, name) => carry(transport, `/door/${door}`, input, name),
|
|
18
22
|
};
|
|
19
23
|
}
|
|
20
24
|
const APP_ACTS = {
|
|
21
25
|
'access.read': mapped('rooms/access/read'),
|
|
22
26
|
'conversation.answer': mapped('conversations/interaction/answer', answerBody),
|
|
23
|
-
'conversation.
|
|
27
|
+
'conversation.attach': carried('conversations/attach', attachAction, undefined, 'room'),
|
|
28
|
+
'conversation.create': carried('conversations/create', createAction),
|
|
24
29
|
'conversation.delete': mapped('conversations/delete', controlBody),
|
|
25
|
-
'conversation.history': carried('conversations/history', historyAction),
|
|
30
|
+
'conversation.history': carried('conversations/history', historyAction, ['conversations']),
|
|
26
31
|
'conversation.interrupt': mapped('conversations/interrupt', controlBody),
|
|
27
32
|
'conversation.kill': mapped('conversations/kill', controlBody),
|
|
28
33
|
'conversation.markDone': mapped('conversations/done'),
|
|
29
34
|
'conversation.rename': mapped('conversations/rename'),
|
|
35
|
+
'conversation.retry': mapped('conversations/retry'),
|
|
30
36
|
'conversation.send': carried('conversations/send', sendAction),
|
|
31
37
|
'conversation.setOption': mapped('conversations/option'),
|
|
32
38
|
'feature.list': mapped('apps/features/read'),
|
|
33
39
|
'holder.list': mapped('apps/holders'),
|
|
34
40
|
'holder.ring': mapped('apps/ring'),
|
|
41
|
+
'inboxChat.assign': mapped('chats/assign'),
|
|
42
|
+
'inboxChat.return': mapped('chats/return'),
|
|
43
|
+
'inboxChat.takeControl': mapped('chats/take-control'),
|
|
35
44
|
'member.list': mapped('rooms/members'),
|
|
36
45
|
'message.send': mapped('apps/messages/send'),
|
|
37
46
|
'processing.read': mapped('rooms/settings/processing/read'),
|
|
38
|
-
'record.list':
|
|
47
|
+
'record.list': carried('records/read', recordsAction),
|
|
39
48
|
'relay.read': mapped('apps/relay'),
|
|
40
49
|
'routine.list': mapped('routines/access'),
|
|
41
50
|
'routineAccess.list': mapped('routines/granted'),
|
|
42
51
|
'routineAllowance.list': mapped('routines/allowance'),
|
|
43
52
|
'routineRequest.list': mapped('routines/requests'),
|
|
44
53
|
'storage.read': mapped('storage/inventory'),
|
|
45
|
-
'trigger.list':
|
|
54
|
+
'trigger.list': carried('triggers/read', triggersAction, ['room_refs'], 'room_refs'),
|
|
46
55
|
'triggerOccurrence.list': mapped('triggers/fired'),
|
|
47
56
|
};
|
|
48
57
|
export const HOUSE_APP_ACTS = Object.fromEntries(Object.entries(APP_ACTS).map(([name, act]) => [name, act.door]));
|
|
58
|
+
export const SITE_SUBMIT = 'submit';
|
|
59
|
+
export const HOUSE_SITE_ACTS = {
|
|
60
|
+
[SITE_SUBMIT]: 'site/submission',
|
|
61
|
+
};
|
|
62
|
+
export const HOUSE_APP_BATCHES = Object.fromEntries(Object.entries(APP_ACTS).flatMap(([name, act]) => act.batched === undefined ? [] : [[name, act.batched]]));
|
|
49
63
|
const APP_NAMES = new Map(Object.entries(APP_ACTS).map(([name, act]) => [act.door, name]));
|
|
64
|
+
const APP_ROOMS = new Map(Object.entries(APP_ACTS).flatMap(([name, act]) => act.room === undefined ? [] : [[name, act.room]]));
|
|
50
65
|
export function houseConversationAgents(locator) {
|
|
51
|
-
return { locator, type: 'house-agent', identity: 'agent', name: 'name' };
|
|
66
|
+
return { locator, type: 'house-agent', identity: 'agent', name: 'name', retired: 'retired' };
|
|
52
67
|
}
|
|
53
68
|
export function declaredActions(routes) {
|
|
54
|
-
return routes.map((route) =>
|
|
55
|
-
name
|
|
56
|
-
inputShape: {},
|
|
57
|
-
|
|
58
|
-
}));
|
|
69
|
+
return routes.map((route) => {
|
|
70
|
+
const name = APP_NAMES.get(route) ?? route;
|
|
71
|
+
return { name, inputShape: {}, resultKind: 'house', room: APP_ROOMS.get(name) ?? 'room_ref' };
|
|
72
|
+
});
|
|
59
73
|
}
|
|
60
74
|
export function houseAction(transport, request) {
|
|
61
75
|
if (Object.hasOwn(APP_ACTS, request.name)) {
|
|
@@ -96,7 +110,12 @@ function unimplemented(name) {
|
|
|
96
110
|
return { kind: 'rejected', code: 'action-unimplemented', fields: { name }, retryable: false };
|
|
97
111
|
}
|
|
98
112
|
function createBody(input) {
|
|
99
|
-
|
|
113
|
+
const replaces = text(input, 'replaces');
|
|
114
|
+
return {
|
|
115
|
+
agent_id: text(input, 'agent_id'),
|
|
116
|
+
operation_id: operationId(input),
|
|
117
|
+
...(replaces === undefined ? {} : { replaces }),
|
|
118
|
+
};
|
|
100
119
|
}
|
|
101
120
|
function controlBody(input) {
|
|
102
121
|
return { conversation_id: text(input, 'conversation'), operation_id: operationId(input) };
|
|
@@ -110,15 +129,32 @@ function answerBody(input) {
|
|
|
110
129
|
response: nested.response,
|
|
111
130
|
};
|
|
112
131
|
}
|
|
132
|
+
async function createAction(transport, route, input, name) {
|
|
133
|
+
const outcome = actionOutcome(await transport.door(route, createBody(input)), name);
|
|
134
|
+
if (outcome.kind !== 'action')
|
|
135
|
+
return outcome;
|
|
136
|
+
const held = record(outcome.result);
|
|
137
|
+
const conversation = text(held, 'conversation_id');
|
|
138
|
+
return conversation === undefined
|
|
139
|
+
? outcome
|
|
140
|
+
: {
|
|
141
|
+
...outcome,
|
|
142
|
+
result: { ...held, conversation },
|
|
143
|
+
};
|
|
144
|
+
}
|
|
113
145
|
function withTurn(body) {
|
|
114
146
|
const held = record(body);
|
|
115
147
|
const turn = text(held, 'message_id');
|
|
116
|
-
return turn === undefined
|
|
148
|
+
return turn === undefined
|
|
149
|
+
? body
|
|
150
|
+
: { ...held, turn };
|
|
117
151
|
}
|
|
118
152
|
export function actionOutcome(answer, name) {
|
|
119
153
|
if (answer.status === 401)
|
|
120
154
|
return { kind: 'revoked-authorization' };
|
|
121
155
|
const refusal = doorRefusal(answer.body);
|
|
156
|
+
if (refusal?.code === 'operation_contended')
|
|
157
|
+
return { kind: 'transport-uncertainty' };
|
|
122
158
|
if (refusal !== null)
|
|
123
159
|
return { kind: 'rejected', ...refusal };
|
|
124
160
|
if (answer.status === 404)
|
|
@@ -127,107 +163,41 @@ export function actionOutcome(answer, name) {
|
|
|
127
163
|
return { kind: 'transport-uncertainty' };
|
|
128
164
|
return { kind: 'action', result: answer.body };
|
|
129
165
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
if (name === undefined || typeof bytes !== 'number' || sha256 === undefined)
|
|
139
|
-
return null;
|
|
140
|
-
const mediaType = text(file, 'mediaType');
|
|
141
|
-
const width = file.width;
|
|
142
|
-
const height = file.height;
|
|
166
|
+
function referredRecord(view, roomRef) {
|
|
167
|
+
const held = record(view);
|
|
168
|
+
if (roomRef === undefined || typeof held.record !== 'string' || !Array.isArray(held.attachments))
|
|
169
|
+
return view;
|
|
170
|
+
const referrer = {
|
|
171
|
+
room_ref: roomRef,
|
|
172
|
+
record: held.record,
|
|
173
|
+
};
|
|
143
174
|
return {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
bytes,
|
|
147
|
-
sha256,
|
|
148
|
-
...(typeof width === 'number' && typeof height === 'number'
|
|
149
|
-
? { dimensions: { width, height } }
|
|
150
|
-
: {}),
|
|
175
|
+
...held,
|
|
176
|
+
attachments: held.attachments.map((attachment) => ({ ...record(attachment), referrer })),
|
|
151
177
|
};
|
|
152
178
|
}
|
|
153
|
-
function
|
|
154
|
-
const
|
|
155
|
-
if (
|
|
156
|
-
return
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
const declared = [];
|
|
160
|
-
for (const entry of files) {
|
|
161
|
-
const file = sendFile(entry);
|
|
162
|
-
if (file === null)
|
|
163
|
-
return null;
|
|
164
|
-
declared.push(file);
|
|
165
|
-
}
|
|
166
|
-
return declared;
|
|
167
|
-
}
|
|
168
|
-
function sendBody(input) {
|
|
169
|
-
const files = sendFiles(input);
|
|
170
|
-
if (files === null)
|
|
171
|
-
return null;
|
|
172
|
-
const textValue = text(input, 'text');
|
|
179
|
+
async function recordsAction(transport, route, input, name) {
|
|
180
|
+
const outcome = actionOutcome(await transport.door(route, input), name);
|
|
181
|
+
if (outcome.kind !== 'action')
|
|
182
|
+
return outcome;
|
|
183
|
+
const roomRef = text(input, 'room_ref');
|
|
184
|
+
const read = record(outcome.result);
|
|
173
185
|
return {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
186
|
+
...outcome,
|
|
187
|
+
result: Array.isArray(read.records)
|
|
188
|
+
? { ...read, records: read.records.map((view) => referredRecord(view, roomRef)) }
|
|
189
|
+
: referredRecord(outcome.result, roomRef),
|
|
178
190
|
};
|
|
179
191
|
}
|
|
180
|
-
async function
|
|
181
|
-
|
|
182
|
-
if (blob === undefined || typeof blob !== 'object' || blob === null)
|
|
183
|
-
return null;
|
|
184
|
-
if (!('arrayBuffer' in blob) || typeof blob.arrayBuffer !== 'function')
|
|
185
|
-
return null;
|
|
186
|
-
return new Uint8Array(await blob.arrayBuffer());
|
|
187
|
-
}
|
|
188
|
-
function delivered(answer, name) {
|
|
189
|
-
return answer.status === 200 ? null : actionOutcome(answer, name);
|
|
190
|
-
}
|
|
191
|
-
function uploadGrant(entry) {
|
|
192
|
-
if (!('upload' in record(entry)))
|
|
193
|
-
return 'absent';
|
|
194
|
-
const upload = record(record(entry).upload);
|
|
195
|
-
if (upload.method !== 'POST')
|
|
196
|
-
return null;
|
|
197
|
-
if (typeof upload.operation !== 'string' || typeof upload.url !== 'string')
|
|
198
|
-
return null;
|
|
199
|
-
return { method: 'POST', operation: upload.operation, url: upload.url };
|
|
192
|
+
async function carry(transport, route, name, input) {
|
|
193
|
+
return actionOutcome(await transport.door(route, input), name);
|
|
200
194
|
}
|
|
201
|
-
|
|
202
|
-
const
|
|
203
|
-
|
|
195
|
+
function sendBody(input) {
|
|
196
|
+
const operation = text(input, 'operation_id');
|
|
197
|
+
const said = text(input, 'text');
|
|
198
|
+
if (operation === undefined || said === undefined)
|
|
204
199
|
return null;
|
|
205
|
-
|
|
206
|
-
for (const [index, entry] of sent.entries()) {
|
|
207
|
-
const grant = uploadGrant(entry);
|
|
208
|
-
if (grant === 'absent')
|
|
209
|
-
continue;
|
|
210
|
-
if (grant === null)
|
|
211
|
-
return malformed();
|
|
212
|
-
const bytes = index < files.length ? await fileBytes(files[index]) : null;
|
|
213
|
-
if (bytes === null) {
|
|
214
|
-
return {
|
|
215
|
-
kind: 'rejected',
|
|
216
|
-
code: 'conversation_file_descriptor_required',
|
|
217
|
-
fields: {},
|
|
218
|
-
retryable: false,
|
|
219
|
-
};
|
|
220
|
-
}
|
|
221
|
-
const failed = delivered(await transport.transfer({
|
|
222
|
-
act: 'conversation_file_upload',
|
|
223
|
-
url: grant.url,
|
|
224
|
-
body: bytes,
|
|
225
|
-
operation: grant.operation,
|
|
226
|
-
}), name);
|
|
227
|
-
if (failed !== null)
|
|
228
|
-
return failed;
|
|
229
|
-
}
|
|
230
|
-
return null;
|
|
200
|
+
return { conversation_id: text(input, 'conversation'), operation_id: operation, text: said };
|
|
231
201
|
}
|
|
232
202
|
async function sendAction(transport, route, input, name) {
|
|
233
203
|
const body = sendBody(input);
|
|
@@ -236,11 +206,49 @@ async function sendAction(transport, route, input, name) {
|
|
|
236
206
|
const outcome = actionOutcome(await transport.door(route, body), name);
|
|
237
207
|
if (outcome.kind !== 'action')
|
|
238
208
|
return outcome;
|
|
239
|
-
const uploaded = await uploadFiles(transport, input, outcome.result, name);
|
|
240
|
-
if (uploaded !== null)
|
|
241
|
-
return uploaded;
|
|
242
209
|
return { ...outcome, result: withTurn(outcome.result) };
|
|
243
210
|
}
|
|
211
|
+
function attachBody(input) {
|
|
212
|
+
const room = text(input, 'room');
|
|
213
|
+
const name = text(input, 'name');
|
|
214
|
+
const sha256 = text(input, 'contentHash');
|
|
215
|
+
const bytes = record(input).byteLength;
|
|
216
|
+
if (room === undefined || name === undefined || sha256 === undefined)
|
|
217
|
+
return null;
|
|
218
|
+
if (typeof bytes !== 'number')
|
|
219
|
+
return null;
|
|
220
|
+
const mediaType = text(input, 'mediaType');
|
|
221
|
+
return {
|
|
222
|
+
room_ref: room,
|
|
223
|
+
name,
|
|
224
|
+
bytes,
|
|
225
|
+
sha256,
|
|
226
|
+
media_type: mediaType !== undefined && mediaType.length > 0 ? mediaType : OCTET_STREAM,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
async function attachAction(transport, route, input, name) {
|
|
230
|
+
const body = attachBody(input);
|
|
231
|
+
const blob = record(input).blob;
|
|
232
|
+
if (body === null || !(blob instanceof Blob))
|
|
233
|
+
return malformed();
|
|
234
|
+
const outcome = actionOutcome(await transport.door(route, body), name);
|
|
235
|
+
if (outcome.kind !== 'action')
|
|
236
|
+
return outcome;
|
|
237
|
+
const upload = houseUpload(record(outcome.result).upload);
|
|
238
|
+
if (upload === null)
|
|
239
|
+
return { kind: 'transport-uncertainty' };
|
|
240
|
+
const finished = await finishedUpload(transport, upload, blob);
|
|
241
|
+
if (finished === null)
|
|
242
|
+
return { kind: 'transport-uncertainty' };
|
|
243
|
+
const settled = actionOutcome(finished, name);
|
|
244
|
+
if (settled.kind !== 'action')
|
|
245
|
+
return settled;
|
|
246
|
+
const path = text(settled.result, 'path');
|
|
247
|
+
if (path === undefined)
|
|
248
|
+
return { kind: 'transport-uncertainty' };
|
|
249
|
+
const result = { path };
|
|
250
|
+
return { kind: 'action', result };
|
|
251
|
+
}
|
|
244
252
|
function historyCursor(value) {
|
|
245
253
|
const acceptedAt = text(value, 'accepted_at');
|
|
246
254
|
const messageId = text(value, 'message_id');
|
|
@@ -268,7 +276,7 @@ export function acceptedMessage(entry) {
|
|
|
268
276
|
turn: text(entry, 'turn_id') ?? cursor.message_id,
|
|
269
277
|
position: position(cursor),
|
|
270
278
|
text: text(entry, 'text') ?? '',
|
|
271
|
-
message: structuredClone(entry),
|
|
279
|
+
message: structuredClone(record(entry)),
|
|
272
280
|
};
|
|
273
281
|
}
|
|
274
282
|
function historyPage(entry) {
|
|
@@ -305,6 +313,22 @@ function historyAsks(input) {
|
|
|
305
313
|
}
|
|
306
314
|
return asks;
|
|
307
315
|
}
|
|
316
|
+
async function triggersAction(transport, route, input, name) {
|
|
317
|
+
const asked = record(input).room_refs;
|
|
318
|
+
if (!Array.isArray(asked) || asked.length === 0)
|
|
319
|
+
return malformed();
|
|
320
|
+
const rooms = [];
|
|
321
|
+
for (let at = 0; at < asked.length; at += TRIGGER_ROOMS) {
|
|
322
|
+
const outcome = actionOutcome(await transport.door(route, { room_refs: asked.slice(at, at + TRIGGER_ROOMS) }), name);
|
|
323
|
+
if (outcome.kind !== 'action')
|
|
324
|
+
return outcome;
|
|
325
|
+
const answered = record(outcome.result).rooms;
|
|
326
|
+
if (!Array.isArray(answered))
|
|
327
|
+
return { kind: 'transport-uncertainty' };
|
|
328
|
+
rooms.push(...answered);
|
|
329
|
+
}
|
|
330
|
+
return { kind: 'action', result: { rooms } };
|
|
331
|
+
}
|
|
308
332
|
async function historyAction(transport, route, input, name) {
|
|
309
333
|
const asks = historyAsks(input);
|
|
310
334
|
if (asks === null)
|
package/dist/adapter.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export type AgentsHouseAdapterOptions = {
|
|
|
5
5
|
authorize(): Promise<Authorization>;
|
|
6
6
|
} | {
|
|
7
7
|
site: HouseSiteTransport;
|
|
8
|
+
snapshot?: boolean;
|
|
8
9
|
};
|
|
9
10
|
export declare function createAgentsHouseAdapter(options: AgentsHouseAdapterOptions): Adapter;
|
|
10
11
|
//# sourceMappingURL=adapter.d.ts.map
|
package/dist/adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,OAAO,EACP,aAAa,EAmBd,MAAM,wBAAwB,CAAC;AAwChC,OAAO,EASL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;AA2BxB,MAAM,MAAM,yBAAyB,GACjC;IACE,SAAS,EAAE,cAAc,CAAC;IAC1B,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;CACrC,GACD;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AA4ErD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAknBpF"}
|