@agentshouse/mdruntime-adapter 0.1.0-cd028205a5103 → 0.1.0-cd0511bd2d033
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/README.md +2 -2
- package/dist/actions.d.ts +4 -5
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +13 -322
- package/dist/adapter.d.ts +1 -0
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +285 -205
- package/dist/app-reference.d.ts +2 -0
- package/dist/app-reference.d.ts.map +1 -0
- package/dist/app-reference.js +2 -0
- package/dist/crockford.d.ts +4 -0
- package/dist/crockford.d.ts.map +1 -0
- package/dist/crockford.js +3 -0
- package/dist/discovery.d.ts +25 -14
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +104 -51
- package/dist/history.d.ts +12 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +92 -0
- package/dist/house-model.d.ts +719 -0
- package/dist/house-model.d.ts.map +1 -0
- package/dist/house-model.js +393 -0
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/model.d.ts +6 -3
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +15 -30
- package/dist/part.d.ts +14 -0
- package/dist/part.d.ts.map +1 -0
- package/dist/part.js +90 -0
- package/dist/read.d.ts +59 -41
- package/dist/read.d.ts.map +1 -1
- package/dist/read.js +254 -231
- package/dist/refusal.d.ts +2 -8
- package/dist/refusal.d.ts.map +1 -1
- package/dist/refusal.js +6 -14
- package/dist/room-stream.d.ts +19 -0
- package/dist/room-stream.d.ts.map +1 -0
- package/dist/room-stream.js +57 -0
- package/dist/room-types.d.ts +7 -0
- package/dist/room-types.d.ts.map +1 -0
- package/dist/room-types.js +125 -0
- package/dist/search.d.ts +5 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +47 -0
- package/dist/site.d.ts +1 -1
- package/dist/site.d.ts.map +1 -1
- package/dist/site.js +130 -106
- package/dist/stream.d.ts +12 -12
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +204 -151
- package/dist/transport.d.ts +92 -24
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +55 -9
- package/dist/upload.d.ts +12 -0
- package/dist/upload.d.ts.map +1 -0
- package/dist/upload.js +63 -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 +20 -10
- package/dist/write.d.ts.map +1 -1
- package/dist/write.js +162 -54
- package/package.json +9 -6
- package/AGENTS.md +0 -244
- package/dist/gather.d.ts +0 -3
- package/dist/gather.d.ts.map +0 -1
- package/dist/gather.js +0 -40
- package/dist/links.d.ts +0 -20
- package/dist/links.d.ts.map +0 -1
- package/dist/links.js +0 -104
package/dist/discovery.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import type { Capability, DiscoveredRoom, Discovery, ProviderLimit, Retention } from '@agentshouse/mdruntime';
|
|
1
|
+
import type { Capability, DiscoveredRoom, Discovery, Member, ProviderLimit, Retention } from '@agentshouse/mdruntime';
|
|
2
2
|
import { type LogPosition } from './version.js';
|
|
3
3
|
export declare const PROVIDER_ACTIONS = "provider-actions";
|
|
4
|
-
export declare const DISCOVER_PREFIXES: readonly string[];
|
|
5
4
|
export type HouseBounds = {
|
|
6
5
|
max_authored_file_bytes: number;
|
|
7
6
|
max_batch_operations: number;
|
|
@@ -13,41 +12,43 @@ export type HouseBounds = {
|
|
|
13
12
|
max_inline_body_bytes: number;
|
|
14
13
|
max_upload_bytes: number;
|
|
15
14
|
max_prefixes: number;
|
|
15
|
+
max_held_files: number;
|
|
16
16
|
change_retention_seconds: number;
|
|
17
|
-
|
|
17
|
+
max_move_documents?: number;
|
|
18
18
|
};
|
|
19
19
|
export type HouseOperations = {
|
|
20
|
-
read: readonly string[];
|
|
21
|
-
sync: readonly string[];
|
|
22
20
|
write: readonly string[];
|
|
23
21
|
delete: readonly string[];
|
|
24
22
|
};
|
|
25
|
-
export type
|
|
26
|
-
root: string;
|
|
27
|
-
paths: readonly string[];
|
|
28
|
-
};
|
|
23
|
+
export type HouseAccessLevel = 'search' | 'open' | 'keep';
|
|
29
24
|
export type HouseAuthority = LogPosition & {
|
|
30
25
|
roomRef: string;
|
|
31
26
|
roomHandle: string;
|
|
32
27
|
name: string;
|
|
33
28
|
schema: string;
|
|
34
|
-
|
|
29
|
+
typedSelection: readonly string[] | null;
|
|
35
30
|
managedReplication: 'admitted' | 'unavailable';
|
|
36
31
|
protectedPaths: readonly string[];
|
|
32
|
+
level: HouseAccessLevel;
|
|
37
33
|
operations: HouseOperations;
|
|
38
34
|
};
|
|
39
35
|
export type HouseDiscoveryDocument = {
|
|
36
|
+
member: Member;
|
|
40
37
|
bounds: HouseBounds;
|
|
41
38
|
authorities: readonly HouseAuthority[];
|
|
42
39
|
actions: readonly string[];
|
|
43
40
|
};
|
|
41
|
+
export type HouseAuthorityChange = {
|
|
42
|
+
member: Member;
|
|
43
|
+
authorities: readonly HouseAuthority[];
|
|
44
|
+
left: readonly string[];
|
|
45
|
+
};
|
|
44
46
|
export type TrackedAuthority = LogPosition & {
|
|
45
47
|
locator: string;
|
|
46
48
|
authority: string;
|
|
47
49
|
handle: string;
|
|
48
50
|
schema: string;
|
|
49
|
-
|
|
50
|
-
schemas: readonly string[];
|
|
51
|
+
typedSelection: readonly string[] | null;
|
|
51
52
|
};
|
|
52
53
|
export type HouseSiteAuthority = LogPosition & {
|
|
53
54
|
roomRef: string;
|
|
@@ -58,14 +59,24 @@ export type HouseSiteDiscovery = {
|
|
|
58
59
|
bounds: HouseBounds;
|
|
59
60
|
authorities: readonly HouseSiteAuthority[];
|
|
60
61
|
};
|
|
62
|
+
type RoomOwn = 'room_ref' | 'room_handle' | 'name' | 'position';
|
|
63
|
+
type Folded<A extends Record<RoomOwn, unknown>> = {
|
|
64
|
+
readonly shapes: readonly Omit<A, RoomOwn>[];
|
|
65
|
+
readonly rooms: readonly (Pick<A, RoomOwn> & {
|
|
66
|
+
readonly shape: number;
|
|
67
|
+
})[];
|
|
68
|
+
};
|
|
69
|
+
export declare function foldedAuthorities<A extends Record<RoomOwn, unknown>>(authorities: readonly A[]): Folded<A>;
|
|
61
70
|
export declare function parseDiscovery(body: unknown): HouseDiscoveryDocument | null;
|
|
71
|
+
export declare function parseAuthorityChange(body: unknown): HouseAuthorityChange | null;
|
|
62
72
|
export declare function parseSiteDiscovery(body: unknown): HouseSiteDiscovery | null;
|
|
63
73
|
export declare function siteTracked(document: HouseSiteDiscovery): TrackedAuthority[];
|
|
64
|
-
export declare function trackedFrom(document: HouseDiscoveryDocument): TrackedAuthority[];
|
|
74
|
+
export declare function trackedFrom(document: Pick<HouseDiscoveryDocument, 'authorities'>): TrackedAuthority[];
|
|
65
75
|
export declare function providerLimits(bounds: HouseBounds): readonly ProviderLimit[];
|
|
66
76
|
export declare function declaredRetention(bounds: HouseBounds): Retention;
|
|
67
|
-
export declare function capabilities(
|
|
77
|
+
export declare function capabilities(actions: HouseDiscoveryDocument['actions']): readonly Capability[];
|
|
68
78
|
export declare function siteCapabilities(): readonly Capability[];
|
|
69
79
|
export declare function discoveredRoom(authority: HouseAuthority): DiscoveredRoom;
|
|
70
80
|
export declare function mapDiscovery(document: Pick<HouseDiscoveryDocument, 'bounds'>, rooms: readonly DiscoveredRoom[], declared: readonly Capability[]): Discovery;
|
|
81
|
+
export {};
|
|
71
82
|
//# sourceMappingURL=discovery.d.ts.map
|
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,EACV,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
|
package/dist/discovery.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { declaredActions
|
|
1
|
+
import { declaredActions } from './actions.js';
|
|
2
|
+
import { SITE_SUBMISSION } from './transport.js';
|
|
2
3
|
import { readPosition, roomVersion } from './version.js';
|
|
3
4
|
export const PROVIDER_ACTIONS = 'provider-actions';
|
|
4
|
-
export const DISCOVER_PREFIXES = ['/'];
|
|
5
5
|
const BOUND_KEYS = [
|
|
6
6
|
'max_authored_file_bytes',
|
|
7
7
|
'max_batch_operations',
|
|
@@ -13,10 +13,11 @@ const BOUND_KEYS = [
|
|
|
13
13
|
'max_inline_body_bytes',
|
|
14
14
|
'max_upload_bytes',
|
|
15
15
|
'max_prefixes',
|
|
16
|
+
'max_held_files',
|
|
16
17
|
'change_retention_seconds',
|
|
17
|
-
'operation_retention_seconds',
|
|
18
18
|
];
|
|
19
|
-
const OPERATION_KEYS = ['
|
|
19
|
+
const OPERATION_KEYS = ['write', 'delete'];
|
|
20
|
+
const ACCESS_LEVELS = ['search', 'open', 'keep'];
|
|
20
21
|
function stringList(value) {
|
|
21
22
|
if (!Array.isArray(value))
|
|
22
23
|
return null;
|
|
@@ -33,18 +34,26 @@ function parseBounds(value) {
|
|
|
33
34
|
return null;
|
|
34
35
|
bounds[key] = amount;
|
|
35
36
|
}
|
|
37
|
+
const moves = held.max_move_documents;
|
|
38
|
+
if (moves !== undefined) {
|
|
39
|
+
if (typeof moves !== 'number' || !Number.isFinite(moves))
|
|
40
|
+
return null;
|
|
41
|
+
bounds.max_move_documents = moves;
|
|
42
|
+
}
|
|
36
43
|
return bounds;
|
|
37
44
|
}
|
|
38
|
-
function
|
|
45
|
+
function parseTypedSelection(value) {
|
|
39
46
|
if (value === undefined)
|
|
40
47
|
return null;
|
|
48
|
+
return stringList(value) ?? undefined;
|
|
49
|
+
}
|
|
50
|
+
function parseMember(value) {
|
|
41
51
|
if (typeof value !== 'object' || value === null)
|
|
42
|
-
return
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
return { root: held.root, paths };
|
|
52
|
+
return null;
|
|
53
|
+
const { user, name } = value;
|
|
54
|
+
if (typeof user !== 'string' || typeof name !== 'string')
|
|
55
|
+
return null;
|
|
56
|
+
return { kind: 'user', id: user, name };
|
|
48
57
|
}
|
|
49
58
|
function parseOperations(value) {
|
|
50
59
|
if (typeof value !== 'object' || value === null)
|
|
@@ -73,10 +82,15 @@ function parseAuthority(value) {
|
|
|
73
82
|
return null;
|
|
74
83
|
}
|
|
75
84
|
const at = readPosition(held);
|
|
76
|
-
const
|
|
85
|
+
const typedSelection = parseTypedSelection(held.typed_selection);
|
|
77
86
|
const protectedPaths = stringList(held.protected_paths);
|
|
78
87
|
const operations = parseOperations(held.operations);
|
|
79
|
-
|
|
88
|
+
const level = ACCESS_LEVELS.find((one) => one === held.level);
|
|
89
|
+
if (at === null ||
|
|
90
|
+
typedSelection === undefined ||
|
|
91
|
+
protectedPaths === null ||
|
|
92
|
+
level === undefined ||
|
|
93
|
+
operations === null)
|
|
80
94
|
return null;
|
|
81
95
|
if (typeof held.room_ref !== 'string' || held.room_ref.length === 0)
|
|
82
96
|
return null;
|
|
@@ -87,17 +101,62 @@ function parseAuthority(value) {
|
|
|
87
101
|
roomHandle: held.room_handle,
|
|
88
102
|
name: held.name,
|
|
89
103
|
schema: held.model_root,
|
|
90
|
-
|
|
104
|
+
typedSelection,
|
|
91
105
|
managedReplication: held.managed_replication,
|
|
92
106
|
protectedPaths,
|
|
107
|
+
level,
|
|
93
108
|
operations,
|
|
94
109
|
...at,
|
|
95
110
|
};
|
|
96
111
|
}
|
|
112
|
+
function parseAuthorities(value) {
|
|
113
|
+
if (!Array.isArray(value))
|
|
114
|
+
return null;
|
|
115
|
+
const authorities = [];
|
|
116
|
+
for (const entry of value) {
|
|
117
|
+
const authority = parseAuthority(entry);
|
|
118
|
+
if (authority === null)
|
|
119
|
+
return null;
|
|
120
|
+
authorities.push(authority);
|
|
121
|
+
}
|
|
122
|
+
return authorities;
|
|
123
|
+
}
|
|
124
|
+
export function foldedAuthorities(authorities) {
|
|
125
|
+
const shapes = [];
|
|
126
|
+
const known = new Map();
|
|
127
|
+
const rooms = authorities.map(({ room_ref, room_handle, name, position, ...shape }) => {
|
|
128
|
+
const key = JSON.stringify(shape);
|
|
129
|
+
let held = known.get(key);
|
|
130
|
+
if (held === undefined) {
|
|
131
|
+
held = shapes.push(shape) - 1;
|
|
132
|
+
known.set(key, held);
|
|
133
|
+
}
|
|
134
|
+
return { room_ref, room_handle, name, position, shape: held };
|
|
135
|
+
});
|
|
136
|
+
return { shapes, rooms };
|
|
137
|
+
}
|
|
138
|
+
function unfolded(shapes, rooms) {
|
|
139
|
+
if (!Array.isArray(shapes) || !Array.isArray(rooms))
|
|
140
|
+
return null;
|
|
141
|
+
const authorities = [];
|
|
142
|
+
for (const room of rooms) {
|
|
143
|
+
if (typeof room !== 'object' || room === null)
|
|
144
|
+
return null;
|
|
145
|
+
const { shape, ...own } = room;
|
|
146
|
+
const held = typeof shape === 'number' ? shapes[shape] : undefined;
|
|
147
|
+
if (typeof held !== 'object' || held === null)
|
|
148
|
+
return null;
|
|
149
|
+
authorities.push({ ...held, ...own });
|
|
150
|
+
}
|
|
151
|
+
return authorities;
|
|
152
|
+
}
|
|
97
153
|
export function parseDiscovery(body) {
|
|
98
154
|
if (typeof body !== 'object' || body === null)
|
|
99
155
|
return null;
|
|
100
156
|
const held = body;
|
|
157
|
+
const member = parseMember(held.member);
|
|
158
|
+
if (member === null)
|
|
159
|
+
return null;
|
|
101
160
|
const bounds = parseBounds(held.bounds);
|
|
102
161
|
if (bounds === null)
|
|
103
162
|
return null;
|
|
@@ -106,16 +165,19 @@ export function parseDiscovery(body) {
|
|
|
106
165
|
new Set(actions).size !== actions.length ||
|
|
107
166
|
actions.some((name) => name.length === 0))
|
|
108
167
|
return null;
|
|
109
|
-
|
|
168
|
+
const authorities = parseAuthorities(unfolded(held.shapes, held.rooms));
|
|
169
|
+
return authorities === null ? null : { member, bounds, authorities, actions };
|
|
170
|
+
}
|
|
171
|
+
export function parseAuthorityChange(body) {
|
|
172
|
+
if (typeof body !== 'object' || body === null)
|
|
110
173
|
return null;
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}
|
|
118
|
-
return { bounds, authorities, actions };
|
|
174
|
+
const held = body;
|
|
175
|
+
const member = parseMember(held.member);
|
|
176
|
+
const authorities = parseAuthorities(held.authorities);
|
|
177
|
+
const left = stringList(held.left);
|
|
178
|
+
if (member === null || authorities === null || left === null)
|
|
179
|
+
return null;
|
|
180
|
+
return { member, authorities, left };
|
|
119
181
|
}
|
|
120
182
|
function parseSiteAuthority(value) {
|
|
121
183
|
if (typeof value !== 'object' || value === null)
|
|
@@ -163,25 +225,18 @@ export function siteTracked(document) {
|
|
|
163
225
|
authority: authority.roomRef,
|
|
164
226
|
handle: authority.roomHandle,
|
|
165
227
|
schema: authority.schema,
|
|
166
|
-
|
|
167
|
-
schemas: [authority.schema],
|
|
228
|
+
typedSelection: null,
|
|
168
229
|
position: authority.position,
|
|
169
230
|
logEpoch: authority.logEpoch,
|
|
170
231
|
}));
|
|
171
232
|
}
|
|
172
|
-
function schemasOf(authority) {
|
|
173
|
-
return authority.houseModel === null
|
|
174
|
-
? [authority.schema]
|
|
175
|
-
: [authority.schema, authority.houseModel.root];
|
|
176
|
-
}
|
|
177
233
|
export function trackedFrom(document) {
|
|
178
234
|
return document.authorities.map((authority) => ({
|
|
179
235
|
locator: authority.roomRef,
|
|
180
236
|
authority: authority.roomRef,
|
|
181
237
|
handle: authority.roomHandle,
|
|
182
238
|
schema: authority.schema,
|
|
183
|
-
|
|
184
|
-
schemas: schemasOf(authority),
|
|
239
|
+
typedSelection: authority.typedSelection,
|
|
185
240
|
position: authority.position,
|
|
186
241
|
logEpoch: authority.logEpoch,
|
|
187
242
|
}));
|
|
@@ -193,34 +248,30 @@ export function providerLimits(bounds) {
|
|
|
193
248
|
{ name: 'change-documents', value: bounds.max_batch_documents },
|
|
194
249
|
{ name: 'path-length', value: bounds.max_path_length },
|
|
195
250
|
{ name: 'path-depth', value: bounds.max_path_depth },
|
|
251
|
+
...(bounds.max_move_documents === undefined
|
|
252
|
+
? []
|
|
253
|
+
: [{ name: 'move-documents', value: bounds.max_move_documents }]),
|
|
196
254
|
{ name: 'write-rate' },
|
|
197
|
-
{ name: '
|
|
255
|
+
{ name: 'storage-limit' },
|
|
198
256
|
];
|
|
199
257
|
}
|
|
200
258
|
export function declaredRetention(bounds) {
|
|
201
259
|
return {
|
|
202
260
|
history: { kind: 'no-declared-time-bound' },
|
|
203
|
-
outcome: bounds.operation_retention_seconds,
|
|
204
261
|
refreshHorizon: bounds.change_retention_seconds,
|
|
205
262
|
};
|
|
206
263
|
}
|
|
207
|
-
export function capabilities(
|
|
208
|
-
|
|
264
|
+
export function capabilities(actions) {
|
|
265
|
+
return [{ name: PROVIDER_ACTIONS, actions: declaredActions(actions) }];
|
|
266
|
+
}
|
|
267
|
+
export function siteCapabilities() {
|
|
209
268
|
return [
|
|
210
269
|
{
|
|
211
270
|
name: PROVIDER_ACTIONS,
|
|
212
|
-
actions:
|
|
213
|
-
...(house === undefined
|
|
214
|
-
? {}
|
|
215
|
-
: { conversationAgents: houseConversationAgents(house.roomRef) }),
|
|
271
|
+
actions: [{ name: SITE_SUBMISSION, inputShape: {}, resultKind: 'house' }],
|
|
216
272
|
},
|
|
217
273
|
];
|
|
218
274
|
}
|
|
219
|
-
export function siteCapabilities() {
|
|
220
|
-
return [
|
|
221
|
-
{ name: PROVIDER_ACTIONS, actions: [{ name: 'submit', inputShape: {}, resultKind: 'house' }] },
|
|
222
|
-
];
|
|
223
|
-
}
|
|
224
275
|
export function discoveredRoom(authority) {
|
|
225
276
|
const locator = authority.roomRef;
|
|
226
277
|
return {
|
|
@@ -229,16 +280,18 @@ export function discoveredRoom(authority) {
|
|
|
229
280
|
handle: authority.roomHandle,
|
|
230
281
|
roomVersion: roomVersion(authority),
|
|
231
282
|
operations: {
|
|
232
|
-
read: [...authority.operations.read],
|
|
233
|
-
sync: [...authority.operations.sync],
|
|
234
283
|
write: [...authority.operations.write],
|
|
235
284
|
delete: [...authority.operations.delete],
|
|
236
285
|
},
|
|
237
|
-
replica: {
|
|
238
|
-
|
|
286
|
+
replica: {
|
|
287
|
+
selection: locator,
|
|
288
|
+
admission: authority.managedReplication,
|
|
289
|
+
offline: authority.level === 'open' ? 'locked' : 'open',
|
|
290
|
+
},
|
|
291
|
+
...(authority.typedSelection === null
|
|
239
292
|
? {}
|
|
240
|
-
: { typedSelection: { roots: [...authority.
|
|
241
|
-
providerOwnedPaths: [...authority.protectedPaths,
|
|
293
|
+
: { typedSelection: { roots: [...authority.typedSelection] } }),
|
|
294
|
+
providerOwnedPaths: [...authority.protectedPaths, authority.schema],
|
|
242
295
|
};
|
|
243
296
|
}
|
|
244
297
|
export function mapDiscovery(document, rooms, declared) {
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AcceptedMessage, ActionResult, ConversationHistoryRequest } from '@agentshouse/mdruntime';
|
|
2
|
+
import { type HouseDoor } from './transport.js';
|
|
3
|
+
export declare const HISTORY_PAGE = 100;
|
|
4
|
+
type HistoryCursor = {
|
|
5
|
+
accepted_at: string;
|
|
6
|
+
message_id: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function cursorPosition(cursor: HistoryCursor): string;
|
|
9
|
+
export declare function acceptedMessage(entry: unknown): AcceptedMessage | null;
|
|
10
|
+
export declare function houseHistory(transport: HouseDoor, request: ConversationHistoryRequest): Promise<ActionResult>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EAGZ,0BAA0B,EAC3B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhE,eAAO,MAAM,YAAY,MAAM,CAAC;AAIhC,KAAK,aAAa,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAkBjE,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAE5D;AAUD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAUtE;AA8BD,wBAAsB,YAAY,CAChC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,YAAY,CAAC,CAqBvB"}
|
package/dist/history.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { actionOutcome } from './actions.js';
|
|
2
|
+
import { houseDoorRoute } from './transport.js';
|
|
3
|
+
export const HISTORY_PAGE = 100;
|
|
4
|
+
const HISTORY = 'conversations/history';
|
|
5
|
+
function record(value) {
|
|
6
|
+
return typeof value === 'object' && value !== null ? value : {};
|
|
7
|
+
}
|
|
8
|
+
function text(value, name) {
|
|
9
|
+
const held = record(value)[name];
|
|
10
|
+
return typeof held === 'string' ? held : undefined;
|
|
11
|
+
}
|
|
12
|
+
function historyCursor(value) {
|
|
13
|
+
const acceptedAt = text(value, 'accepted_at');
|
|
14
|
+
const messageId = text(value, 'message_id');
|
|
15
|
+
if (acceptedAt === undefined || messageId === undefined)
|
|
16
|
+
return null;
|
|
17
|
+
return { accepted_at: acceptedAt, message_id: messageId };
|
|
18
|
+
}
|
|
19
|
+
export function cursorPosition(cursor) {
|
|
20
|
+
return JSON.stringify({ accepted_at: cursor.accepted_at, message_id: cursor.message_id });
|
|
21
|
+
}
|
|
22
|
+
function positionCursor(value) {
|
|
23
|
+
try {
|
|
24
|
+
return historyCursor(JSON.parse(value));
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function acceptedMessage(entry) {
|
|
31
|
+
const cursor = historyCursor(entry);
|
|
32
|
+
if (cursor === null)
|
|
33
|
+
return null;
|
|
34
|
+
return {
|
|
35
|
+
identity: cursor.message_id,
|
|
36
|
+
turn: text(entry, 'turn_id') ?? cursor.message_id,
|
|
37
|
+
position: cursorPosition(cursor),
|
|
38
|
+
text: text(entry, 'text') ?? '',
|
|
39
|
+
message: structuredClone(record(entry)),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function historyPage(entry) {
|
|
43
|
+
const held = record(entry);
|
|
44
|
+
const conversation = text(held, 'conversation_id');
|
|
45
|
+
if (conversation === undefined || !Array.isArray(held.messages))
|
|
46
|
+
return null;
|
|
47
|
+
const messages = [];
|
|
48
|
+
for (const one of held.messages) {
|
|
49
|
+
const message = acceptedMessage(one);
|
|
50
|
+
if (message === null)
|
|
51
|
+
return null;
|
|
52
|
+
messages.push(message);
|
|
53
|
+
}
|
|
54
|
+
const next = held.next === null || held.next === undefined ? undefined : historyCursor(held.next);
|
|
55
|
+
if (next === null)
|
|
56
|
+
return null;
|
|
57
|
+
return { conversation, messages, ...(next === undefined ? {} : { next: cursorPosition(next) }) };
|
|
58
|
+
}
|
|
59
|
+
function historyAsks(request) {
|
|
60
|
+
const asks = [];
|
|
61
|
+
for (const { conversation, after } of request.conversations) {
|
|
62
|
+
const cursor = after === undefined ? undefined : positionCursor(after);
|
|
63
|
+
if (cursor === null)
|
|
64
|
+
return null;
|
|
65
|
+
asks.push({
|
|
66
|
+
conversation_id: conversation,
|
|
67
|
+
...(cursor === undefined ? {} : { after: cursor }),
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return asks;
|
|
71
|
+
}
|
|
72
|
+
export async function houseHistory(transport, request) {
|
|
73
|
+
const asks = historyAsks(request);
|
|
74
|
+
if (asks === null)
|
|
75
|
+
return { kind: 'rejected', code: 'invalid_request', fields: {}, retryable: false };
|
|
76
|
+
const asked = { conversations: asks, limit: HISTORY_PAGE };
|
|
77
|
+
const outcome = actionOutcome(await transport.door(houseDoorRoute(HISTORY), asked), HISTORY, asked);
|
|
78
|
+
if (outcome.kind !== 'action')
|
|
79
|
+
return outcome;
|
|
80
|
+
const answered = record(outcome.result).histories;
|
|
81
|
+
if (!Array.isArray(answered))
|
|
82
|
+
return { kind: 'transport-uncertainty' };
|
|
83
|
+
const histories = [];
|
|
84
|
+
for (const entry of answered) {
|
|
85
|
+
const page = historyPage(entry);
|
|
86
|
+
if (page === null)
|
|
87
|
+
return { kind: 'transport-uncertainty' };
|
|
88
|
+
histories.push(page);
|
|
89
|
+
}
|
|
90
|
+
const result = { histories };
|
|
91
|
+
return { kind: 'action', result };
|
|
92
|
+
}
|