@agentshouse/mdruntime-adapter 0.1.0-ccda1a2da11c3 → 0.1.0-ccdfb41af2abb
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 +3 -71
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +1 -317
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +171 -336
- 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 +12 -12
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +44 -51
- 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 +892 -0
- package/dist/house-model.d.ts.map +1 -0
- package/dist/house-model.js +482 -0
- package/dist/index.d.ts +10 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -2
- package/dist/model.d.ts +5 -2
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +10 -29
- package/dist/part.d.ts +12 -11
- package/dist/part.d.ts.map +1 -1
- package/dist/part.js +66 -56
- package/dist/read.d.ts +19 -56
- package/dist/read.d.ts.map +1 -1
- package/dist/read.js +138 -297
- package/dist/refusal.d.ts +0 -3
- package/dist/refusal.d.ts.map +1 -1
- package/dist/refusal.js +0 -5
- 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 +2 -1
- package/dist/room-types.d.ts.map +1 -1
- package/dist/room-types.js +62 -3
- 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.map +1 -1
- package/dist/site.js +79 -177
- package/dist/stream.d.ts +13 -14
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +168 -426
- package/dist/transport.d.ts +48 -38
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +55 -11
- package/dist/upload.d.ts +12 -0
- package/dist/upload.d.ts.map +1 -0
- package/dist/upload.js +63 -0
- package/dist/write.d.ts +6 -1
- package/dist/write.d.ts.map +1 -1
- package/dist/write.js +19 -32
- package/package.json +8 -4
- package/AGENTS.md +0 -309
- package/dist/gather.d.ts +0 -4
- package/dist/gather.d.ts.map +0 -1
- package/dist/gather.js +0 -35
- package/dist/referrer.d.ts +0 -9
- package/dist/referrer.d.ts.map +0 -1
- package/dist/referrer.js +0 -41
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crockford.d.ts","sourceRoot":"","sources":["../src/crockford.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,qCAAqC,CAAC;AAErE,eAAO,MAAM,mBAAmB,uCAA4B,CAAC;AAE7D,eAAO,MAAM,2BAA2B,QAAqC,CAAC"}
|
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;
|
|
@@ -22,20 +21,16 @@ export type HouseOperations = {
|
|
|
22
21
|
write: readonly string[];
|
|
23
22
|
delete: readonly string[];
|
|
24
23
|
};
|
|
25
|
-
export type
|
|
26
|
-
export type HouseModel = {
|
|
27
|
-
root: string;
|
|
28
|
-
paths: readonly string[];
|
|
29
|
-
};
|
|
24
|
+
export type HouseAccessLevel = 'search' | 'open' | 'keep';
|
|
30
25
|
export type HouseAuthority = LogPosition & {
|
|
31
26
|
roomRef: string;
|
|
32
27
|
roomHandle: string;
|
|
33
28
|
name: string;
|
|
34
29
|
schema: string;
|
|
35
|
-
|
|
30
|
+
typedSelection: readonly string[] | null;
|
|
36
31
|
managedReplication: 'admitted' | 'unavailable';
|
|
37
32
|
protectedPaths: readonly string[];
|
|
38
|
-
|
|
33
|
+
level: HouseAccessLevel;
|
|
39
34
|
operations: HouseOperations;
|
|
40
35
|
};
|
|
41
36
|
export type HouseDiscoveryDocument = {
|
|
@@ -44,13 +39,17 @@ export type HouseDiscoveryDocument = {
|
|
|
44
39
|
authorities: readonly HouseAuthority[];
|
|
45
40
|
actions: readonly string[];
|
|
46
41
|
};
|
|
42
|
+
export type HouseAuthorityChange = {
|
|
43
|
+
member: Member;
|
|
44
|
+
authorities: readonly HouseAuthority[];
|
|
45
|
+
left: readonly string[];
|
|
46
|
+
};
|
|
47
47
|
export type TrackedAuthority = LogPosition & {
|
|
48
48
|
locator: string;
|
|
49
49
|
authority: string;
|
|
50
50
|
handle: string;
|
|
51
51
|
schema: string;
|
|
52
|
-
|
|
53
|
-
schemas: readonly string[];
|
|
52
|
+
typedSelection: readonly string[] | null;
|
|
54
53
|
};
|
|
55
54
|
export type HouseSiteAuthority = LogPosition & {
|
|
56
55
|
roomRef: string;
|
|
@@ -62,12 +61,13 @@ export type HouseSiteDiscovery = {
|
|
|
62
61
|
authorities: readonly HouseSiteAuthority[];
|
|
63
62
|
};
|
|
64
63
|
export declare function parseDiscovery(body: unknown): HouseDiscoveryDocument | null;
|
|
64
|
+
export declare function parseAuthorityChange(body: unknown): HouseAuthorityChange | null;
|
|
65
65
|
export declare function parseSiteDiscovery(body: unknown): HouseSiteDiscovery | null;
|
|
66
66
|
export declare function siteTracked(document: HouseSiteDiscovery): TrackedAuthority[];
|
|
67
|
-
export declare function trackedFrom(document: HouseDiscoveryDocument): TrackedAuthority[];
|
|
67
|
+
export declare function trackedFrom(document: Pick<HouseDiscoveryDocument, 'authorities'>): TrackedAuthority[];
|
|
68
68
|
export declare function providerLimits(bounds: HouseBounds): readonly ProviderLimit[];
|
|
69
69
|
export declare function declaredRetention(bounds: HouseBounds): Retention;
|
|
70
|
-
export declare function capabilities(actions: HouseDiscoveryDocument['actions']
|
|
70
|
+
export declare function capabilities(actions: HouseDiscoveryDocument['actions']): readonly Capability[];
|
|
71
71
|
export declare function siteCapabilities(): readonly Capability[];
|
|
72
72
|
export declare function discoveredRoom(authority: HouseAuthority): DiscoveredRoom;
|
|
73
73
|
export declare function mapDiscovery(document: Pick<HouseDiscoveryDocument, 'bounds'>, rooms: readonly DiscoveredRoom[], declared: readonly Capability[]): Discovery;
|
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',
|
|
@@ -18,7 +18,7 @@ const BOUND_KEYS = [
|
|
|
18
18
|
'operation_retention_seconds',
|
|
19
19
|
];
|
|
20
20
|
const OPERATION_KEYS = ['write', 'delete'];
|
|
21
|
-
const
|
|
21
|
+
const ACCESS_LEVELS = ['search', 'open', 'keep'];
|
|
22
22
|
function stringList(value) {
|
|
23
23
|
if (!Array.isArray(value))
|
|
24
24
|
return null;
|
|
@@ -43,16 +43,10 @@ function parseBounds(value) {
|
|
|
43
43
|
}
|
|
44
44
|
return bounds;
|
|
45
45
|
}
|
|
46
|
-
function
|
|
46
|
+
function parseTypedSelection(value) {
|
|
47
47
|
if (value === undefined)
|
|
48
48
|
return null;
|
|
49
|
-
|
|
50
|
-
return undefined;
|
|
51
|
-
const held = value;
|
|
52
|
-
const paths = stringList(held.paths);
|
|
53
|
-
if (typeof held.root !== 'string' || held.root.length === 0 || paths === null)
|
|
54
|
-
return undefined;
|
|
55
|
-
return { root: held.root, paths };
|
|
49
|
+
return stringList(value) ?? undefined;
|
|
56
50
|
}
|
|
57
51
|
function parseMember(value) {
|
|
58
52
|
if (typeof value !== 'object' || value === null)
|
|
@@ -89,14 +83,14 @@ function parseAuthority(value) {
|
|
|
89
83
|
return null;
|
|
90
84
|
}
|
|
91
85
|
const at = readPosition(held);
|
|
92
|
-
const
|
|
86
|
+
const typedSelection = parseTypedSelection(held.typed_selection);
|
|
93
87
|
const protectedPaths = stringList(held.protected_paths);
|
|
94
88
|
const operations = parseOperations(held.operations);
|
|
95
|
-
const
|
|
89
|
+
const level = ACCESS_LEVELS.find((one) => one === held.level);
|
|
96
90
|
if (at === null ||
|
|
97
|
-
|
|
91
|
+
typedSelection === undefined ||
|
|
98
92
|
protectedPaths === null ||
|
|
99
|
-
|
|
93
|
+
level === undefined ||
|
|
100
94
|
operations === null)
|
|
101
95
|
return null;
|
|
102
96
|
if (typeof held.room_ref !== 'string' || held.room_ref.length === 0)
|
|
@@ -108,14 +102,26 @@ function parseAuthority(value) {
|
|
|
108
102
|
roomHandle: held.room_handle,
|
|
109
103
|
name: held.name,
|
|
110
104
|
schema: held.model_root,
|
|
111
|
-
|
|
105
|
+
typedSelection,
|
|
112
106
|
managedReplication: held.managed_replication,
|
|
113
107
|
protectedPaths,
|
|
114
|
-
|
|
108
|
+
level,
|
|
115
109
|
operations,
|
|
116
110
|
...at,
|
|
117
111
|
};
|
|
118
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
|
+
}
|
|
119
125
|
export function parseDiscovery(body) {
|
|
120
126
|
if (typeof body !== 'object' || body === null)
|
|
121
127
|
return null;
|
|
@@ -131,16 +137,19 @@ export function parseDiscovery(body) {
|
|
|
131
137
|
new Set(actions).size !== actions.length ||
|
|
132
138
|
actions.some((name) => name.length === 0))
|
|
133
139
|
return null;
|
|
134
|
-
|
|
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)
|
|
135
145
|
return null;
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
143
|
-
return { member, bounds, 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 };
|
|
144
153
|
}
|
|
145
154
|
function parseSiteAuthority(value) {
|
|
146
155
|
if (typeof value !== 'object' || value === null)
|
|
@@ -188,25 +197,18 @@ export function siteTracked(document) {
|
|
|
188
197
|
authority: authority.roomRef,
|
|
189
198
|
handle: authority.roomHandle,
|
|
190
199
|
schema: authority.schema,
|
|
191
|
-
|
|
192
|
-
schemas: [authority.schema],
|
|
200
|
+
typedSelection: null,
|
|
193
201
|
position: authority.position,
|
|
194
202
|
logEpoch: authority.logEpoch,
|
|
195
203
|
}));
|
|
196
204
|
}
|
|
197
|
-
function schemasOf(authority) {
|
|
198
|
-
return authority.houseModel === null
|
|
199
|
-
? [authority.schema]
|
|
200
|
-
: [authority.schema, authority.houseModel.root];
|
|
201
|
-
}
|
|
202
205
|
export function trackedFrom(document) {
|
|
203
206
|
return document.authorities.map((authority) => ({
|
|
204
207
|
locator: authority.roomRef,
|
|
205
208
|
authority: authority.roomRef,
|
|
206
209
|
handle: authority.roomHandle,
|
|
207
210
|
schema: authority.schema,
|
|
208
|
-
|
|
209
|
-
schemas: schemasOf(authority),
|
|
211
|
+
typedSelection: authority.typedSelection,
|
|
210
212
|
position: authority.position,
|
|
211
213
|
logEpoch: authority.logEpoch,
|
|
212
214
|
}));
|
|
@@ -232,23 +234,14 @@ export function declaredRetention(bounds) {
|
|
|
232
234
|
refreshHorizon: bounds.change_retention_seconds,
|
|
233
235
|
};
|
|
234
236
|
}
|
|
235
|
-
export function capabilities(actions
|
|
236
|
-
|
|
237
|
-
return [
|
|
238
|
-
{
|
|
239
|
-
name: PROVIDER_ACTIONS,
|
|
240
|
-
actions: declaredActions(actions),
|
|
241
|
-
...(house === undefined
|
|
242
|
-
? {}
|
|
243
|
-
: { conversationAgents: houseConversationAgents(house.authority) }),
|
|
244
|
-
},
|
|
245
|
-
];
|
|
237
|
+
export function capabilities(actions) {
|
|
238
|
+
return [{ name: PROVIDER_ACTIONS, actions: declaredActions(actions) }];
|
|
246
239
|
}
|
|
247
240
|
export function siteCapabilities() {
|
|
248
241
|
return [
|
|
249
242
|
{
|
|
250
243
|
name: PROVIDER_ACTIONS,
|
|
251
|
-
actions: [{ name:
|
|
244
|
+
actions: [{ name: SITE_SUBMISSION, inputShape: {}, resultKind: 'house' }],
|
|
252
245
|
},
|
|
253
246
|
];
|
|
254
247
|
}
|
|
@@ -266,12 +259,12 @@ export function discoveredRoom(authority) {
|
|
|
266
259
|
replica: {
|
|
267
260
|
selection: locator,
|
|
268
261
|
admission: authority.managedReplication,
|
|
269
|
-
offline: authority.
|
|
262
|
+
offline: authority.level === 'open' ? 'locked' : 'open',
|
|
270
263
|
},
|
|
271
|
-
...(authority.
|
|
264
|
+
...(authority.typedSelection === null
|
|
272
265
|
? {}
|
|
273
|
-
: { typedSelection: { roots: [...authority.
|
|
274
|
-
providerOwnedPaths: [...authority.protectedPaths,
|
|
266
|
+
: { typedSelection: { roots: [...authority.typedSelection] } }),
|
|
267
|
+
providerOwnedPaths: [...authority.protectedPaths, authority.schema],
|
|
275
268
|
};
|
|
276
269
|
}
|
|
277
270
|
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,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
|
+
}
|