@agentshouse/mdruntime-adapter 0.1.0-cc63dd043d0e2 → 0.1.0-cc7da2d4669a3
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 +4 -4
- package/dist/actions.d.ts +3 -4
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +10 -327
- package/dist/adapter.d.ts +1 -0
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +283 -246
- 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 +18 -23
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +80 -73
- package/dist/history.d.ts +12 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +91 -0
- package/dist/house-model.d.ts +2915 -0
- package/dist/house-model.d.ts.map +1 -0
- package/dist/house-model.js +1603 -0
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/model.d.ts +10 -18
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +39 -37
- 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 +52 -41
- package/dist/read.d.ts.map +1 -1
- package/dist/read.js +248 -237
- package/dist/refusal.d.ts +4 -11
- package/dist/refusal.d.ts.map +1 -1
- package/dist/refusal.js +26 -17
- 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 +126 -0
- package/dist/site.d.ts +1 -1
- package/dist/site.d.ts.map +1 -1
- package/dist/site.js +132 -142
- package/dist/stream.d.ts +16 -11
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +229 -143
- package/dist/transport.d.ts +109 -22
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +53 -10
- 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 +2 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +10 -1
- package/dist/write.d.ts +18 -2
- package/dist/write.d.ts.map +1 -1
- package/dist/write.js +169 -42
- package/package.json +9 -6
- package/AGENTS.md +0 -215
- 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 -12
- package/dist/links.d.ts.map +0 -1
- package/dist/links.js +0 -66
package/dist/discovery.d.ts
CHANGED
|
@@ -1,12 +1,6 @@
|
|
|
1
|
-
import type { Capability, DiscoveredRoom, Discovery,
|
|
1
|
+
import type { Capability, DiscoveredRoom, Discovery, Member, ProviderLimit, Retention } from '@agentshouse/mdruntime';
|
|
2
2
|
import { type LogPosition } from './version.js';
|
|
3
|
-
export declare const ROOM_CONTRACT_VERSION = 1;
|
|
4
|
-
export declare const MD_MODEL_IDENTITY = "@agentshouse/mdmodel";
|
|
5
|
-
export declare const ROOM_VERSION_NOTIFICATIONS = "room-version-notifications";
|
|
6
3
|
export declare const PROVIDER_ACTIONS = "provider-actions";
|
|
7
|
-
export declare const MOVE_REFERENCE_REWRITES = "move-reference-rewrites";
|
|
8
|
-
export declare const DISCOVER_PREFIXES: readonly string[];
|
|
9
|
-
export declare const PRIVATE_HANDLE = "private";
|
|
10
4
|
export type HouseBounds = {
|
|
11
5
|
max_authored_file_bytes: number;
|
|
12
6
|
max_batch_operations: number;
|
|
@@ -18,42 +12,44 @@ export type HouseBounds = {
|
|
|
18
12
|
max_inline_body_bytes: number;
|
|
19
13
|
max_upload_bytes: number;
|
|
20
14
|
max_prefixes: number;
|
|
15
|
+
max_held_files: number;
|
|
21
16
|
change_retention_seconds: number;
|
|
22
17
|
operation_retention_seconds: number;
|
|
18
|
+
max_move_documents?: number;
|
|
23
19
|
};
|
|
24
20
|
export type HouseOperations = {
|
|
25
|
-
read: readonly string[];
|
|
26
|
-
sync: readonly string[];
|
|
27
21
|
write: readonly string[];
|
|
28
22
|
delete: readonly string[];
|
|
29
23
|
};
|
|
30
|
-
export type
|
|
31
|
-
root: string;
|
|
32
|
-
paths: readonly string[];
|
|
33
|
-
};
|
|
24
|
+
export type HouseAccessLevel = 'search' | 'open' | 'keep';
|
|
34
25
|
export type HouseAuthority = LogPosition & {
|
|
35
26
|
roomRef: string;
|
|
36
27
|
roomHandle: string;
|
|
37
28
|
name: string;
|
|
38
29
|
schema: string;
|
|
39
|
-
|
|
30
|
+
typedSelection: readonly string[] | null;
|
|
40
31
|
managedReplication: 'admitted' | 'unavailable';
|
|
41
32
|
protectedPaths: readonly string[];
|
|
33
|
+
level: HouseAccessLevel;
|
|
42
34
|
operations: HouseOperations;
|
|
43
35
|
};
|
|
44
36
|
export type HouseDiscoveryDocument = {
|
|
37
|
+
member: Member;
|
|
45
38
|
bounds: HouseBounds;
|
|
46
|
-
mdModelVersion: string;
|
|
47
39
|
authorities: readonly HouseAuthority[];
|
|
48
40
|
actions: readonly string[];
|
|
49
41
|
};
|
|
42
|
+
export type HouseAuthorityChange = {
|
|
43
|
+
member: Member;
|
|
44
|
+
authorities: readonly HouseAuthority[];
|
|
45
|
+
left: readonly string[];
|
|
46
|
+
};
|
|
50
47
|
export type TrackedAuthority = LogPosition & {
|
|
51
48
|
locator: string;
|
|
52
49
|
authority: string;
|
|
53
50
|
handle: string;
|
|
54
51
|
schema: string;
|
|
55
|
-
|
|
56
|
-
schemas: readonly string[];
|
|
52
|
+
typedSelection: readonly string[] | null;
|
|
57
53
|
};
|
|
58
54
|
export type HouseSiteAuthority = LogPosition & {
|
|
59
55
|
roomRef: string;
|
|
@@ -62,18 +58,17 @@ export type HouseSiteAuthority = LogPosition & {
|
|
|
62
58
|
};
|
|
63
59
|
export type HouseSiteDiscovery = {
|
|
64
60
|
bounds: HouseBounds;
|
|
65
|
-
mdModelVersion: string;
|
|
66
61
|
authorities: readonly HouseSiteAuthority[];
|
|
67
62
|
};
|
|
68
63
|
export declare function parseDiscovery(body: unknown): HouseDiscoveryDocument | null;
|
|
64
|
+
export declare function parseAuthorityChange(body: unknown): HouseAuthorityChange | null;
|
|
69
65
|
export declare function parseSiteDiscovery(body: unknown): HouseSiteDiscovery | null;
|
|
70
66
|
export declare function siteTracked(document: HouseSiteDiscovery): TrackedAuthority[];
|
|
71
|
-
export declare function
|
|
72
|
-
export declare function trackedFrom(document: HouseDiscoveryDocument): TrackedAuthority[];
|
|
67
|
+
export declare function trackedFrom(document: Pick<HouseDiscoveryDocument, 'authorities'>): TrackedAuthority[];
|
|
73
68
|
export declare function providerLimits(bounds: HouseBounds): readonly ProviderLimit[];
|
|
74
69
|
export declare function declaredRetention(bounds: HouseBounds): Retention;
|
|
75
|
-
export declare function capabilities(actions:
|
|
70
|
+
export declare function capabilities(actions: HouseDiscoveryDocument['actions']): readonly Capability[];
|
|
76
71
|
export declare function siteCapabilities(): readonly Capability[];
|
|
77
|
-
export declare function discoveredRoom(authority: HouseAuthority
|
|
78
|
-
export declare function mapDiscovery(document: Pick<HouseDiscoveryDocument, 'bounds'
|
|
72
|
+
export declare function discoveredRoom(authority: HouseAuthority): DiscoveredRoom;
|
|
73
|
+
export declare function mapDiscovery(document: Pick<HouseDiscoveryDocument, 'bounds'>, rooms: readonly DiscoveredRoom[], declared: readonly Capability[]): Discovery;
|
|
79
74
|
//# 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,
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
|
package/dist/discovery.js
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
|
-
import { declaredActions
|
|
2
|
-
import {
|
|
1
|
+
import { declaredActions } from './actions.js';
|
|
2
|
+
import { SITE_SUBMISSION } from './transport.js';
|
|
3
3
|
import { readPosition, roomVersion } from './version.js';
|
|
4
|
-
export const ROOM_CONTRACT_VERSION = 1;
|
|
5
|
-
export const MD_MODEL_IDENTITY = '@agentshouse/mdmodel';
|
|
6
|
-
export const ROOM_VERSION_NOTIFICATIONS = 'room-version-notifications';
|
|
7
4
|
export const PROVIDER_ACTIONS = 'provider-actions';
|
|
8
|
-
export const MOVE_REFERENCE_REWRITES = 'move-reference-rewrites';
|
|
9
|
-
export const DISCOVER_PREFIXES = ['/'];
|
|
10
|
-
export const PRIVATE_HANDLE = 'private';
|
|
11
5
|
const BOUND_KEYS = [
|
|
12
6
|
'max_authored_file_bytes',
|
|
13
7
|
'max_batch_operations',
|
|
@@ -19,10 +13,12 @@ const BOUND_KEYS = [
|
|
|
19
13
|
'max_inline_body_bytes',
|
|
20
14
|
'max_upload_bytes',
|
|
21
15
|
'max_prefixes',
|
|
16
|
+
'max_held_files',
|
|
22
17
|
'change_retention_seconds',
|
|
23
18
|
'operation_retention_seconds',
|
|
24
19
|
];
|
|
25
|
-
const OPERATION_KEYS = ['
|
|
20
|
+
const OPERATION_KEYS = ['write', 'delete'];
|
|
21
|
+
const ACCESS_LEVELS = ['search', 'open', 'keep'];
|
|
26
22
|
function stringList(value) {
|
|
27
23
|
if (!Array.isArray(value))
|
|
28
24
|
return null;
|
|
@@ -39,18 +35,26 @@ function parseBounds(value) {
|
|
|
39
35
|
return null;
|
|
40
36
|
bounds[key] = amount;
|
|
41
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
|
+
}
|
|
42
44
|
return bounds;
|
|
43
45
|
}
|
|
44
|
-
function
|
|
46
|
+
function parseTypedSelection(value) {
|
|
45
47
|
if (value === undefined)
|
|
46
48
|
return null;
|
|
49
|
+
return stringList(value) ?? undefined;
|
|
50
|
+
}
|
|
51
|
+
function parseMember(value) {
|
|
47
52
|
if (typeof value !== 'object' || value === null)
|
|
48
|
-
return
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
return { root: held.root, paths };
|
|
53
|
+
return null;
|
|
54
|
+
const { user, name } = value;
|
|
55
|
+
if (typeof user !== 'string' || typeof name !== 'string')
|
|
56
|
+
return null;
|
|
57
|
+
return { kind: 'user', id: user, name };
|
|
54
58
|
}
|
|
55
59
|
function parseOperations(value) {
|
|
56
60
|
if (typeof value !== 'object' || value === null)
|
|
@@ -79,10 +83,15 @@ function parseAuthority(value) {
|
|
|
79
83
|
return null;
|
|
80
84
|
}
|
|
81
85
|
const at = readPosition(held);
|
|
82
|
-
const
|
|
86
|
+
const typedSelection = parseTypedSelection(held.typed_selection);
|
|
83
87
|
const protectedPaths = stringList(held.protected_paths);
|
|
84
88
|
const operations = parseOperations(held.operations);
|
|
85
|
-
|
|
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)
|
|
86
95
|
return null;
|
|
87
96
|
if (typeof held.room_ref !== 'string' || held.room_ref.length === 0)
|
|
88
97
|
return null;
|
|
@@ -93,37 +102,54 @@ function parseAuthority(value) {
|
|
|
93
102
|
roomHandle: held.room_handle,
|
|
94
103
|
name: held.name,
|
|
95
104
|
schema: held.model_root,
|
|
96
|
-
|
|
105
|
+
typedSelection,
|
|
97
106
|
managedReplication: held.managed_replication,
|
|
98
107
|
protectedPaths,
|
|
108
|
+
level,
|
|
99
109
|
operations,
|
|
100
110
|
...at,
|
|
101
111
|
};
|
|
102
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
|
+
}
|
|
103
125
|
export function parseDiscovery(body) {
|
|
104
126
|
if (typeof body !== 'object' || body === null)
|
|
105
127
|
return null;
|
|
106
128
|
const held = body;
|
|
129
|
+
const member = parseMember(held.member);
|
|
130
|
+
if (member === null)
|
|
131
|
+
return null;
|
|
107
132
|
const bounds = parseBounds(held.bounds);
|
|
108
133
|
if (bounds === null)
|
|
109
134
|
return null;
|
|
110
|
-
if (typeof held.md_model_version !== 'string' || held.md_model_version.length === 0)
|
|
111
|
-
return null;
|
|
112
135
|
const actions = stringList(held.actions);
|
|
113
136
|
if (actions === null ||
|
|
114
137
|
new Set(actions).size !== actions.length ||
|
|
115
138
|
actions.some((name) => name.length === 0))
|
|
116
139
|
return null;
|
|
117
|
-
|
|
140
|
+
const authorities = parseAuthorities(held.authorities);
|
|
141
|
+
return authorities === null ? null : { member, bounds, authorities, actions };
|
|
142
|
+
}
|
|
143
|
+
export function parseAuthorityChange(body) {
|
|
144
|
+
if (typeof body !== 'object' || body === null)
|
|
118
145
|
return null;
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
return { bounds, mdModelVersion: held.md_model_version, authorities, actions };
|
|
146
|
+
const held = body;
|
|
147
|
+
const member = parseMember(held.member);
|
|
148
|
+
const authorities = parseAuthorities(held.authorities);
|
|
149
|
+
const left = stringList(held.left);
|
|
150
|
+
if (member === null || authorities === null || left === null)
|
|
151
|
+
return null;
|
|
152
|
+
return { member, authorities, left };
|
|
127
153
|
}
|
|
128
154
|
function parseSiteAuthority(value) {
|
|
129
155
|
if (typeof value !== 'object' || value === null)
|
|
@@ -154,8 +180,6 @@ export function parseSiteDiscovery(body) {
|
|
|
154
180
|
const bounds = parseBounds(held.bounds);
|
|
155
181
|
if (bounds === null)
|
|
156
182
|
return null;
|
|
157
|
-
if (typeof held.md_model_version !== 'string' || held.md_model_version.length === 0)
|
|
158
|
-
return null;
|
|
159
183
|
if (!Array.isArray(held.authorities))
|
|
160
184
|
return null;
|
|
161
185
|
const authorities = [];
|
|
@@ -165,7 +189,7 @@ export function parseSiteDiscovery(body) {
|
|
|
165
189
|
return null;
|
|
166
190
|
authorities.push(authority);
|
|
167
191
|
}
|
|
168
|
-
return { bounds,
|
|
192
|
+
return { bounds, authorities };
|
|
169
193
|
}
|
|
170
194
|
export function siteTracked(document) {
|
|
171
195
|
return document.authorities.map((authority) => ({
|
|
@@ -173,28 +197,18 @@ export function siteTracked(document) {
|
|
|
173
197
|
authority: authority.roomRef,
|
|
174
198
|
handle: authority.roomHandle,
|
|
175
199
|
schema: authority.schema,
|
|
176
|
-
|
|
177
|
-
schemas: [authority.schema],
|
|
200
|
+
typedSelection: null,
|
|
178
201
|
position: authority.position,
|
|
179
202
|
logEpoch: authority.logEpoch,
|
|
180
203
|
}));
|
|
181
204
|
}
|
|
182
|
-
export function locatorOf(authority) {
|
|
183
|
-
return authority.roomHandle === PRIVATE_HANDLE ? PRIVATE_LOCATOR : authority.roomRef;
|
|
184
|
-
}
|
|
185
|
-
function schemasOf(authority) {
|
|
186
|
-
return authority.houseModel === null
|
|
187
|
-
? [authority.schema]
|
|
188
|
-
: [authority.schema, authority.houseModel.root];
|
|
189
|
-
}
|
|
190
205
|
export function trackedFrom(document) {
|
|
191
206
|
return document.authorities.map((authority) => ({
|
|
192
|
-
locator:
|
|
207
|
+
locator: authority.roomRef,
|
|
193
208
|
authority: authority.roomRef,
|
|
194
209
|
handle: authority.roomHandle,
|
|
195
210
|
schema: authority.schema,
|
|
196
|
-
|
|
197
|
-
schemas: schemasOf(authority),
|
|
211
|
+
typedSelection: authority.typedSelection,
|
|
198
212
|
position: authority.position,
|
|
199
213
|
logEpoch: authority.logEpoch,
|
|
200
214
|
}));
|
|
@@ -206,8 +220,11 @@ export function providerLimits(bounds) {
|
|
|
206
220
|
{ name: 'change-documents', value: bounds.max_batch_documents },
|
|
207
221
|
{ name: 'path-length', value: bounds.max_path_length },
|
|
208
222
|
{ name: 'path-depth', value: bounds.max_path_depth },
|
|
223
|
+
...(bounds.max_move_documents === undefined
|
|
224
|
+
? []
|
|
225
|
+
: [{ name: 'move-documents', value: bounds.max_move_documents }]),
|
|
209
226
|
{ name: 'write-rate' },
|
|
210
|
-
{ name: '
|
|
227
|
+
{ name: 'storage-limit' },
|
|
211
228
|
];
|
|
212
229
|
}
|
|
213
230
|
export function declaredRetention(bounds) {
|
|
@@ -218,51 +235,41 @@ export function declaredRetention(bounds) {
|
|
|
218
235
|
};
|
|
219
236
|
}
|
|
220
237
|
export function capabilities(actions) {
|
|
238
|
+
return [{ name: PROVIDER_ACTIONS, actions: declaredActions(actions) }];
|
|
239
|
+
}
|
|
240
|
+
export function siteCapabilities() {
|
|
221
241
|
return [
|
|
222
|
-
{ name: ROOM_VERSION_NOTIFICATIONS },
|
|
223
242
|
{
|
|
224
243
|
name: PROVIDER_ACTIONS,
|
|
225
|
-
actions:
|
|
226
|
-
conversationCards: HOUSE_CONVERSATION_CARDS,
|
|
244
|
+
actions: [{ name: SITE_SUBMISSION, inputShape: {}, resultKind: 'house' }],
|
|
227
245
|
},
|
|
228
|
-
{ name: MOVE_REFERENCE_REWRITES },
|
|
229
|
-
];
|
|
230
|
-
}
|
|
231
|
-
export function siteCapabilities() {
|
|
232
|
-
return [
|
|
233
|
-
{ name: ROOM_VERSION_NOTIFICATIONS },
|
|
234
|
-
{ name: PROVIDER_ACTIONS, actions: [{ name: 'submit', inputShape: {}, resultKind: 'house' }] },
|
|
235
246
|
];
|
|
236
247
|
}
|
|
237
|
-
export function discoveredRoom(authority
|
|
248
|
+
export function discoveredRoom(authority) {
|
|
249
|
+
const locator = authority.roomRef;
|
|
238
250
|
return {
|
|
239
251
|
name: authority.name,
|
|
240
|
-
locator
|
|
252
|
+
locator,
|
|
253
|
+
handle: authority.roomHandle,
|
|
241
254
|
roomVersion: roomVersion(authority),
|
|
242
255
|
operations: {
|
|
243
|
-
read: [...authority.operations.read],
|
|
244
|
-
sync: [...authority.operations.sync],
|
|
245
256
|
write: [...authority.operations.write],
|
|
246
257
|
delete: [...authority.operations.delete],
|
|
247
258
|
},
|
|
248
|
-
replica: {
|
|
249
|
-
|
|
250
|
-
|
|
259
|
+
replica: {
|
|
260
|
+
selection: locator,
|
|
261
|
+
admission: authority.managedReplication,
|
|
262
|
+
offline: authority.level === 'open' ? 'locked' : 'open',
|
|
263
|
+
},
|
|
264
|
+
...(authority.typedSelection === null
|
|
251
265
|
? {}
|
|
252
|
-
: {
|
|
253
|
-
|
|
254
|
-
roots: [...authority.houseModel.paths],
|
|
255
|
-
attachedModel: selectionModel,
|
|
256
|
-
},
|
|
257
|
-
}),
|
|
258
|
-
providerOwnedPaths: [...authority.protectedPaths, ...schemasOf(authority)],
|
|
266
|
+
: { typedSelection: { roots: [...authority.typedSelection] } }),
|
|
267
|
+
providerOwnedPaths: [...authority.protectedPaths, authority.schema],
|
|
259
268
|
};
|
|
260
269
|
}
|
|
261
270
|
export function mapDiscovery(document, rooms, declared) {
|
|
262
271
|
return {
|
|
263
272
|
kind: 'discovery',
|
|
264
|
-
supportedVersions: [ROOM_CONTRACT_VERSION],
|
|
265
|
-
mdModel: { identity: MD_MODEL_IDENTITY, version: document.mdModelVersion },
|
|
266
273
|
rooms,
|
|
267
274
|
capabilities: declared,
|
|
268
275
|
providerLimits: providerLimits(document.bounds),
|
|
@@ -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,CAmBvB"}
|
package/dist/history.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
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 outcome = actionOutcome(await transport.door(houseDoorRoute(HISTORY), { conversations: asks, limit: HISTORY_PAGE }), HISTORY);
|
|
77
|
+
if (outcome.kind !== 'action')
|
|
78
|
+
return outcome;
|
|
79
|
+
const answered = record(outcome.result).histories;
|
|
80
|
+
if (!Array.isArray(answered))
|
|
81
|
+
return { kind: 'transport-uncertainty' };
|
|
82
|
+
const histories = [];
|
|
83
|
+
for (const entry of answered) {
|
|
84
|
+
const page = historyPage(entry);
|
|
85
|
+
if (page === null)
|
|
86
|
+
return { kind: 'transport-uncertainty' };
|
|
87
|
+
histories.push(page);
|
|
88
|
+
}
|
|
89
|
+
const result = { histories };
|
|
90
|
+
return { kind: 'action', result };
|
|
91
|
+
}
|