@agentshouse/mdruntime-adapter 0.1.0-cf6a7cf003c4b → 0.1.0-cf75412975d5b
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 -43
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +8 -295
- package/dist/adapter.d.ts +1 -0
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +291 -230
- 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 +23 -12
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +94 -50
- 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 +911 -0
- package/dist/house-model.d.ts.map +1 -0
- package/dist/house-model.js +496 -0
- package/dist/index.d.ts +11 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/model.d.ts +5 -3
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +10 -32
- 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 +54 -44
- package/dist/read.d.ts.map +1 -1
- package/dist/read.js +271 -214
- package/dist/refusal.d.ts +0 -3
- package/dist/refusal.d.ts.map +1 -1
- package/dist/refusal.js +2 -6
- package/dist/room-stream.d.ts +20 -0
- package/dist/room-stream.d.ts.map +1 -0
- package/dist/room-stream.js +78 -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 -104
- package/dist/stream.d.ts +12 -12
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +207 -151
- package/dist/transport.d.ts +91 -20
- 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 +19 -10
- package/dist/write.d.ts.map +1 -1
- package/dist/write.js +142 -54
- package/package.json +8 -5
- package/AGENTS.md +0 -269
- package/dist/gather.d.ts +0 -4
- package/dist/gather.d.ts.map +0 -1
- package/dist/gather.js +0 -45
- 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
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,27 +12,25 @@ 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
|
operation_retention_seconds: number;
|
|
18
|
+
max_move_documents?: number;
|
|
18
19
|
};
|
|
19
20
|
export type HouseOperations = {
|
|
20
|
-
read: readonly string[];
|
|
21
|
-
sync: readonly string[];
|
|
22
21
|
write: readonly string[];
|
|
23
22
|
delete: readonly string[];
|
|
24
23
|
};
|
|
25
|
-
export type
|
|
26
|
-
root: string;
|
|
27
|
-
paths: readonly string[];
|
|
28
|
-
};
|
|
24
|
+
export type HouseAccessLevel = 'search' | 'open' | 'keep';
|
|
29
25
|
export type HouseAuthority = LogPosition & {
|
|
30
26
|
roomRef: string;
|
|
31
27
|
roomHandle: string;
|
|
32
28
|
name: string;
|
|
33
29
|
schema: string;
|
|
34
|
-
|
|
30
|
+
typedSelection: readonly string[] | null;
|
|
35
31
|
managedReplication: 'admitted' | 'unavailable';
|
|
36
32
|
protectedPaths: readonly string[];
|
|
33
|
+
level: HouseAccessLevel;
|
|
37
34
|
operations: HouseOperations;
|
|
38
35
|
};
|
|
39
36
|
export type HouseDiscoveryDocument = {
|
|
@@ -42,13 +39,17 @@ export type HouseDiscoveryDocument = {
|
|
|
42
39
|
authorities: readonly HouseAuthority[];
|
|
43
40
|
actions: readonly string[];
|
|
44
41
|
};
|
|
42
|
+
export type HouseAuthorityChange = {
|
|
43
|
+
member: Member;
|
|
44
|
+
authorities: readonly HouseAuthority[];
|
|
45
|
+
left: readonly string[];
|
|
46
|
+
};
|
|
45
47
|
export type TrackedAuthority = LogPosition & {
|
|
46
48
|
locator: string;
|
|
47
49
|
authority: string;
|
|
48
50
|
handle: string;
|
|
49
51
|
schema: string;
|
|
50
|
-
|
|
51
|
-
schemas: readonly string[];
|
|
52
|
+
typedSelection: readonly string[] | null;
|
|
52
53
|
};
|
|
53
54
|
export type HouseSiteAuthority = LogPosition & {
|
|
54
55
|
roomRef: string;
|
|
@@ -59,14 +60,24 @@ export type HouseSiteDiscovery = {
|
|
|
59
60
|
bounds: HouseBounds;
|
|
60
61
|
authorities: readonly HouseSiteAuthority[];
|
|
61
62
|
};
|
|
63
|
+
type RoomOwn = 'room_ref' | 'room_handle' | 'name' | 'position';
|
|
64
|
+
type Folded<A extends Record<RoomOwn, unknown>> = {
|
|
65
|
+
readonly shapes: readonly Omit<A, RoomOwn>[];
|
|
66
|
+
readonly rooms: readonly (Pick<A, RoomOwn> & {
|
|
67
|
+
readonly shape: number;
|
|
68
|
+
})[];
|
|
69
|
+
};
|
|
70
|
+
export declare function foldedAuthorities<A extends Record<RoomOwn, unknown>>(authorities: readonly A[]): Folded<A>;
|
|
62
71
|
export declare function parseDiscovery(body: unknown): HouseDiscoveryDocument | null;
|
|
72
|
+
export declare function parseAuthorityChange(body: unknown): HouseAuthorityChange | null;
|
|
63
73
|
export declare function parseSiteDiscovery(body: unknown): HouseSiteDiscovery | null;
|
|
64
74
|
export declare function siteTracked(document: HouseSiteDiscovery): TrackedAuthority[];
|
|
65
|
-
export declare function trackedFrom(document: HouseDiscoveryDocument): TrackedAuthority[];
|
|
75
|
+
export declare function trackedFrom(document: Pick<HouseDiscoveryDocument, 'authorities'>): TrackedAuthority[];
|
|
66
76
|
export declare function providerLimits(bounds: HouseBounds): readonly ProviderLimit[];
|
|
67
77
|
export declare function declaredRetention(bounds: HouseBounds): Retention;
|
|
68
|
-
export declare function capabilities(
|
|
78
|
+
export declare function capabilities(actions: HouseDiscoveryDocument['actions']): readonly Capability[];
|
|
69
79
|
export declare function siteCapabilities(): readonly Capability[];
|
|
70
80
|
export declare function discoveredRoom(authority: HouseAuthority): DiscoveredRoom;
|
|
71
81
|
export declare function mapDiscovery(document: Pick<HouseDiscoveryDocument, 'bounds'>, rooms: readonly DiscoveredRoom[], declared: readonly Capability[]): Discovery;
|
|
82
|
+
export {};
|
|
72
83
|
//# 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,MAAM,EACN,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,12 @@ 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
18
|
'operation_retention_seconds',
|
|
18
19
|
];
|
|
19
|
-
const OPERATION_KEYS = ['
|
|
20
|
+
const OPERATION_KEYS = ['write', 'delete'];
|
|
21
|
+
const ACCESS_LEVELS = ['search', 'open', 'keep'];
|
|
20
22
|
function stringList(value) {
|
|
21
23
|
if (!Array.isArray(value))
|
|
22
24
|
return null;
|
|
@@ -33,18 +35,18 @@ function parseBounds(value) {
|
|
|
33
35
|
return null;
|
|
34
36
|
bounds[key] = amount;
|
|
35
37
|
}
|
|
38
|
+
const moves = held.max_move_documents;
|
|
39
|
+
if (moves !== undefined) {
|
|
40
|
+
if (typeof moves !== 'number' || !Number.isFinite(moves))
|
|
41
|
+
return null;
|
|
42
|
+
bounds.max_move_documents = moves;
|
|
43
|
+
}
|
|
36
44
|
return bounds;
|
|
37
45
|
}
|
|
38
|
-
function
|
|
46
|
+
function parseTypedSelection(value) {
|
|
39
47
|
if (value === undefined)
|
|
40
48
|
return null;
|
|
41
|
-
|
|
42
|
-
return undefined;
|
|
43
|
-
const held = value;
|
|
44
|
-
const paths = stringList(held.paths);
|
|
45
|
-
if (typeof held.root !== 'string' || held.root.length === 0 || paths === null)
|
|
46
|
-
return undefined;
|
|
47
|
-
return { root: held.root, paths };
|
|
49
|
+
return stringList(value) ?? undefined;
|
|
48
50
|
}
|
|
49
51
|
function parseMember(value) {
|
|
50
52
|
if (typeof value !== 'object' || value === null)
|
|
@@ -81,10 +83,15 @@ function parseAuthority(value) {
|
|
|
81
83
|
return null;
|
|
82
84
|
}
|
|
83
85
|
const at = readPosition(held);
|
|
84
|
-
const
|
|
86
|
+
const typedSelection = parseTypedSelection(held.typed_selection);
|
|
85
87
|
const protectedPaths = stringList(held.protected_paths);
|
|
86
88
|
const operations = parseOperations(held.operations);
|
|
87
|
-
|
|
89
|
+
const level = ACCESS_LEVELS.find((one) => one === held.level);
|
|
90
|
+
if (at === null ||
|
|
91
|
+
typedSelection === undefined ||
|
|
92
|
+
protectedPaths === null ||
|
|
93
|
+
level === undefined ||
|
|
94
|
+
operations === null)
|
|
88
95
|
return null;
|
|
89
96
|
if (typeof held.room_ref !== 'string' || held.room_ref.length === 0)
|
|
90
97
|
return null;
|
|
@@ -95,13 +102,55 @@ function parseAuthority(value) {
|
|
|
95
102
|
roomHandle: held.room_handle,
|
|
96
103
|
name: held.name,
|
|
97
104
|
schema: held.model_root,
|
|
98
|
-
|
|
105
|
+
typedSelection,
|
|
99
106
|
managedReplication: held.managed_replication,
|
|
100
107
|
protectedPaths,
|
|
108
|
+
level,
|
|
101
109
|
operations,
|
|
102
110
|
...at,
|
|
103
111
|
};
|
|
104
112
|
}
|
|
113
|
+
function parseAuthorities(value) {
|
|
114
|
+
if (!Array.isArray(value))
|
|
115
|
+
return null;
|
|
116
|
+
const authorities = [];
|
|
117
|
+
for (const entry of value) {
|
|
118
|
+
const authority = parseAuthority(entry);
|
|
119
|
+
if (authority === null)
|
|
120
|
+
return null;
|
|
121
|
+
authorities.push(authority);
|
|
122
|
+
}
|
|
123
|
+
return authorities;
|
|
124
|
+
}
|
|
125
|
+
export function foldedAuthorities(authorities) {
|
|
126
|
+
const shapes = [];
|
|
127
|
+
const known = new Map();
|
|
128
|
+
const rooms = authorities.map(({ room_ref, room_handle, name, position, ...shape }) => {
|
|
129
|
+
const key = JSON.stringify(shape);
|
|
130
|
+
let held = known.get(key);
|
|
131
|
+
if (held === undefined) {
|
|
132
|
+
held = shapes.push(shape) - 1;
|
|
133
|
+
known.set(key, held);
|
|
134
|
+
}
|
|
135
|
+
return { room_ref, room_handle, name, position, shape: held };
|
|
136
|
+
});
|
|
137
|
+
return { shapes, rooms };
|
|
138
|
+
}
|
|
139
|
+
function unfolded(shapes, rooms) {
|
|
140
|
+
if (!Array.isArray(shapes) || !Array.isArray(rooms))
|
|
141
|
+
return null;
|
|
142
|
+
const authorities = [];
|
|
143
|
+
for (const room of rooms) {
|
|
144
|
+
if (typeof room !== 'object' || room === null)
|
|
145
|
+
return null;
|
|
146
|
+
const { shape, ...own } = room;
|
|
147
|
+
const held = typeof shape === 'number' ? shapes[shape] : undefined;
|
|
148
|
+
if (typeof held !== 'object' || held === null)
|
|
149
|
+
return null;
|
|
150
|
+
authorities.push({ ...held, ...own });
|
|
151
|
+
}
|
|
152
|
+
return authorities;
|
|
153
|
+
}
|
|
105
154
|
export function parseDiscovery(body) {
|
|
106
155
|
if (typeof body !== 'object' || body === null)
|
|
107
156
|
return null;
|
|
@@ -117,16 +166,19 @@ export function parseDiscovery(body) {
|
|
|
117
166
|
new Set(actions).size !== actions.length ||
|
|
118
167
|
actions.some((name) => name.length === 0))
|
|
119
168
|
return null;
|
|
120
|
-
|
|
169
|
+
const authorities = parseAuthorities(unfolded(held.shapes, held.rooms));
|
|
170
|
+
return authorities === null ? null : { member, bounds, authorities, actions };
|
|
171
|
+
}
|
|
172
|
+
export function parseAuthorityChange(body) {
|
|
173
|
+
if (typeof body !== 'object' || body === null)
|
|
121
174
|
return null;
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
}
|
|
129
|
-
return { member, bounds, authorities, actions };
|
|
175
|
+
const held = body;
|
|
176
|
+
const member = parseMember(held.member);
|
|
177
|
+
const authorities = parseAuthorities(held.authorities);
|
|
178
|
+
const left = stringList(held.left);
|
|
179
|
+
if (member === null || authorities === null || left === null)
|
|
180
|
+
return null;
|
|
181
|
+
return { member, authorities, left };
|
|
130
182
|
}
|
|
131
183
|
function parseSiteAuthority(value) {
|
|
132
184
|
if (typeof value !== 'object' || value === null)
|
|
@@ -174,25 +226,18 @@ export function siteTracked(document) {
|
|
|
174
226
|
authority: authority.roomRef,
|
|
175
227
|
handle: authority.roomHandle,
|
|
176
228
|
schema: authority.schema,
|
|
177
|
-
|
|
178
|
-
schemas: [authority.schema],
|
|
229
|
+
typedSelection: null,
|
|
179
230
|
position: authority.position,
|
|
180
231
|
logEpoch: authority.logEpoch,
|
|
181
232
|
}));
|
|
182
233
|
}
|
|
183
|
-
function schemasOf(authority) {
|
|
184
|
-
return authority.houseModel === null
|
|
185
|
-
? [authority.schema]
|
|
186
|
-
: [authority.schema, authority.houseModel.root];
|
|
187
|
-
}
|
|
188
234
|
export function trackedFrom(document) {
|
|
189
235
|
return document.authorities.map((authority) => ({
|
|
190
236
|
locator: authority.roomRef,
|
|
191
237
|
authority: authority.roomRef,
|
|
192
238
|
handle: authority.roomHandle,
|
|
193
239
|
schema: authority.schema,
|
|
194
|
-
|
|
195
|
-
schemas: schemasOf(authority),
|
|
240
|
+
typedSelection: authority.typedSelection,
|
|
196
241
|
position: authority.position,
|
|
197
242
|
logEpoch: authority.logEpoch,
|
|
198
243
|
}));
|
|
@@ -204,8 +249,11 @@ export function providerLimits(bounds) {
|
|
|
204
249
|
{ name: 'change-documents', value: bounds.max_batch_documents },
|
|
205
250
|
{ name: 'path-length', value: bounds.max_path_length },
|
|
206
251
|
{ name: 'path-depth', value: bounds.max_path_depth },
|
|
252
|
+
...(bounds.max_move_documents === undefined
|
|
253
|
+
? []
|
|
254
|
+
: [{ name: 'move-documents', value: bounds.max_move_documents }]),
|
|
207
255
|
{ name: 'write-rate' },
|
|
208
|
-
{ name: '
|
|
256
|
+
{ name: 'storage-limit' },
|
|
209
257
|
];
|
|
210
258
|
}
|
|
211
259
|
export function declaredRetention(bounds) {
|
|
@@ -215,23 +263,17 @@ export function declaredRetention(bounds) {
|
|
|
215
263
|
refreshHorizon: bounds.change_retention_seconds,
|
|
216
264
|
};
|
|
217
265
|
}
|
|
218
|
-
export function capabilities(
|
|
219
|
-
|
|
266
|
+
export function capabilities(actions) {
|
|
267
|
+
return [{ name: PROVIDER_ACTIONS, actions: declaredActions(actions) }];
|
|
268
|
+
}
|
|
269
|
+
export function siteCapabilities() {
|
|
220
270
|
return [
|
|
221
271
|
{
|
|
222
272
|
name: PROVIDER_ACTIONS,
|
|
223
|
-
actions:
|
|
224
|
-
...(house === undefined
|
|
225
|
-
? {}
|
|
226
|
-
: { conversationAgents: houseConversationAgents(house.roomRef) }),
|
|
273
|
+
actions: [{ name: SITE_SUBMISSION, inputShape: {}, resultKind: 'house' }],
|
|
227
274
|
},
|
|
228
275
|
];
|
|
229
276
|
}
|
|
230
|
-
export function siteCapabilities() {
|
|
231
|
-
return [
|
|
232
|
-
{ name: PROVIDER_ACTIONS, actions: [{ name: 'submit', inputShape: {}, resultKind: 'house' }] },
|
|
233
|
-
];
|
|
234
|
-
}
|
|
235
277
|
export function discoveredRoom(authority) {
|
|
236
278
|
const locator = authority.roomRef;
|
|
237
279
|
return {
|
|
@@ -240,16 +282,18 @@ export function discoveredRoom(authority) {
|
|
|
240
282
|
handle: authority.roomHandle,
|
|
241
283
|
roomVersion: roomVersion(authority),
|
|
242
284
|
operations: {
|
|
243
|
-
read: [...authority.operations.read],
|
|
244
|
-
sync: [...authority.operations.sync],
|
|
245
285
|
write: [...authority.operations.write],
|
|
246
286
|
delete: [...authority.operations.delete],
|
|
247
287
|
},
|
|
248
|
-
replica: {
|
|
249
|
-
|
|
288
|
+
replica: {
|
|
289
|
+
selection: locator,
|
|
290
|
+
admission: authority.managedReplication,
|
|
291
|
+
offline: authority.level === 'open' ? 'locked' : 'open',
|
|
292
|
+
},
|
|
293
|
+
...(authority.typedSelection === null
|
|
250
294
|
? {}
|
|
251
|
-
: { typedSelection: { roots: [...authority.
|
|
252
|
-
providerOwnedPaths: [...authority.protectedPaths,
|
|
295
|
+
: { typedSelection: { roots: [...authority.typedSelection] } }),
|
|
296
|
+
providerOwnedPaths: [...authority.protectedPaths, authority.schema],
|
|
253
297
|
};
|
|
254
298
|
}
|
|
255
299
|
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
|
+
}
|