@agentshouse/mdruntime-adapter 0.1.0-cfdb3a66f1a92 → 0.1.0-cfe552b74bdf7

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.
Files changed (75) hide show
  1. package/README.md +2 -2
  2. package/dist/actions.d.ts +3 -42
  3. package/dist/actions.d.ts.map +1 -1
  4. package/dist/actions.js +3 -332
  5. package/dist/adapter.d.ts +1 -0
  6. package/dist/adapter.d.ts.map +1 -1
  7. package/dist/adapter.js +278 -277
  8. package/dist/app-reference.d.ts +2 -0
  9. package/dist/app-reference.d.ts.map +1 -0
  10. package/dist/app-reference.js +2 -0
  11. package/dist/crockford.d.ts +4 -0
  12. package/dist/crockford.d.ts.map +1 -0
  13. package/dist/crockford.js +3 -0
  14. package/dist/discovery.d.ts +14 -12
  15. package/dist/discovery.d.ts.map +1 -1
  16. package/dist/discovery.js +65 -50
  17. package/dist/history.d.ts +12 -0
  18. package/dist/history.d.ts.map +1 -0
  19. package/dist/history.js +91 -0
  20. package/dist/house-model.d.ts +892 -0
  21. package/dist/house-model.d.ts.map +1 -0
  22. package/dist/house-model.js +482 -0
  23. package/dist/index.d.ts +10 -2
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +9 -1
  26. package/dist/model.d.ts +5 -3
  27. package/dist/model.d.ts.map +1 -1
  28. package/dist/model.js +10 -32
  29. package/dist/part.d.ts +14 -0
  30. package/dist/part.d.ts.map +1 -0
  31. package/dist/part.js +90 -0
  32. package/dist/read.d.ts +52 -43
  33. package/dist/read.d.ts.map +1 -1
  34. package/dist/read.js +247 -203
  35. package/dist/refusal.d.ts +0 -3
  36. package/dist/refusal.d.ts.map +1 -1
  37. package/dist/refusal.js +2 -6
  38. package/dist/room-stream.d.ts +19 -0
  39. package/dist/room-stream.d.ts.map +1 -0
  40. package/dist/room-stream.js +57 -0
  41. package/dist/room-types.d.ts +7 -0
  42. package/dist/room-types.d.ts.map +1 -0
  43. package/dist/room-types.js +125 -0
  44. package/dist/search.d.ts +5 -0
  45. package/dist/search.d.ts.map +1 -0
  46. package/dist/search.js +47 -0
  47. package/dist/site.d.ts +1 -1
  48. package/dist/site.d.ts.map +1 -1
  49. package/dist/site.js +115 -130
  50. package/dist/stream.d.ts +12 -12
  51. package/dist/stream.d.ts.map +1 -1
  52. package/dist/stream.js +206 -158
  53. package/dist/transport.d.ts +81 -24
  54. package/dist/transport.d.ts.map +1 -1
  55. package/dist/transport.js +55 -11
  56. package/dist/upload.d.ts +12 -0
  57. package/dist/upload.d.ts.map +1 -0
  58. package/dist/upload.js +63 -0
  59. package/dist/version.d.ts +1 -0
  60. package/dist/version.d.ts.map +1 -1
  61. package/dist/version.js +1 -1
  62. package/dist/write.d.ts +18 -2
  63. package/dist/write.d.ts.map +1 -1
  64. package/dist/write.js +110 -71
  65. package/package.json +8 -5
  66. package/AGENTS.md +0 -318
  67. package/dist/gather.d.ts +0 -4
  68. package/dist/gather.d.ts.map +0 -1
  69. package/dist/gather.js +0 -45
  70. package/dist/handed.d.ts +0 -15
  71. package/dist/handed.d.ts.map +0 -1
  72. package/dist/handed.js +0 -38
  73. package/dist/referrer.d.ts +0 -7
  74. package/dist/referrer.d.ts.map +0 -1
  75. package/dist/referrer.js +0 -35
@@ -0,0 +1,2 @@
1
+ export declare const APP_REFERENCE_PATTERN: RegExp;
2
+ //# sourceMappingURL=app-reference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-reference.d.ts","sourceRoot":"","sources":["../src/app-reference.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB,QAEjC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { CROCKFORD_CHARACTER } from './crockford.js';
2
+ export const APP_REFERENCE_PATTERN = new RegExp(`^a_(${CROCKFORD_CHARACTER}+)\\.(${CROCKFORD_CHARACTER})$`);
@@ -0,0 +1,4 @@
1
+ export declare const CROCKFORD_ALPHABET = "0123456789abcdefghjkmnpqrstvwxyz";
2
+ export declare const CROCKFORD_CHARACTER = "[0123456789abcdefghjkmnpqrstvwxyz]";
3
+ export declare const CROCKFORD_LEADING_CHARACTER: string;
4
+ //# sourceMappingURL=crockford.d.ts.map
@@ -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"}
@@ -0,0 +1,3 @@
1
+ export const CROCKFORD_ALPHABET = '0123456789abcdefghjkmnpqrstvwxyz';
2
+ export const CROCKFORD_CHARACTER = `[${CROCKFORD_ALPHABET}]`;
3
+ export const CROCKFORD_LEADING_CHARACTER = `[${CROCKFORD_ALPHABET.slice(1)}]`;
@@ -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 HouseModel = {
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
- houseModel: HouseModel | null;
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
- houseModel: HouseModel | null;
51
- schemas: readonly string[];
52
+ typedSelection: readonly string[] | null;
52
53
  };
53
54
  export type HouseSiteAuthority = LogPosition & {
54
55
  roomRef: string;
@@ -60,12 +61,13 @@ export type HouseSiteDiscovery = {
60
61
  authorities: readonly HouseSiteAuthority[];
61
62
  };
62
63
  export declare function parseDiscovery(body: unknown): HouseDiscoveryDocument | null;
64
+ export declare function parseAuthorityChange(body: unknown): HouseAuthorityChange | null;
63
65
  export declare function parseSiteDiscovery(body: unknown): HouseSiteDiscovery | null;
64
66
  export declare function siteTracked(document: HouseSiteDiscovery): TrackedAuthority[];
65
- export declare function trackedFrom(document: HouseDiscoveryDocument): TrackedAuthority[];
67
+ export declare function trackedFrom(document: Pick<HouseDiscoveryDocument, 'authorities'>): TrackedAuthority[];
66
68
  export declare function providerLimits(bounds: HouseBounds): readonly ProviderLimit[];
67
69
  export declare function declaredRetention(bounds: HouseBounds): Retention;
68
- export declare function capabilities(document: HouseDiscoveryDocument): readonly Capability[];
70
+ export declare function capabilities(actions: HouseDiscoveryDocument['actions']): readonly Capability[];
69
71
  export declare function siteCapabilities(): readonly Capability[];
70
72
  export declare function discoveredRoom(authority: HouseAuthority): DiscoveredRoom;
71
73
  export declare function mapDiscovery(document: Pick<HouseDiscoveryDocument, 'bounds'>, rooms: readonly DiscoveredRoom[], declared: readonly Capability[]): Discovery;
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
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, houseConversationAgents } from './actions.js';
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 = ['read', 'sync', 'write', 'delete'];
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 parseHouseModel(value) {
46
+ function parseTypedSelection(value) {
39
47
  if (value === undefined)
40
48
  return null;
41
- if (typeof value !== 'object' || value === null)
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 houseModel = parseHouseModel(held.house_model);
86
+ const typedSelection = parseTypedSelection(held.typed_selection);
85
87
  const protectedPaths = stringList(held.protected_paths);
86
88
  const operations = parseOperations(held.operations);
87
- if (at === null || houseModel === undefined || protectedPaths === null || operations === null)
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,26 @@ function parseAuthority(value) {
95
102
  roomHandle: held.room_handle,
96
103
  name: held.name,
97
104
  schema: held.model_root,
98
- houseModel,
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
+ }
105
125
  export function parseDiscovery(body) {
106
126
  if (typeof body !== 'object' || body === null)
107
127
  return null;
@@ -117,16 +137,19 @@ export function parseDiscovery(body) {
117
137
  new Set(actions).size !== actions.length ||
118
138
  actions.some((name) => name.length === 0))
119
139
  return null;
120
- if (!Array.isArray(held.authorities))
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)
121
145
  return null;
122
- const authorities = [];
123
- for (const entry of held.authorities) {
124
- const authority = parseAuthority(entry);
125
- if (authority === null)
126
- return null;
127
- authorities.push(authority);
128
- }
129
- 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 };
130
153
  }
131
154
  function parseSiteAuthority(value) {
132
155
  if (typeof value !== 'object' || value === null)
@@ -174,25 +197,18 @@ export function siteTracked(document) {
174
197
  authority: authority.roomRef,
175
198
  handle: authority.roomHandle,
176
199
  schema: authority.schema,
177
- houseModel: null,
178
- schemas: [authority.schema],
200
+ typedSelection: null,
179
201
  position: authority.position,
180
202
  logEpoch: authority.logEpoch,
181
203
  }));
182
204
  }
183
- function schemasOf(authority) {
184
- return authority.houseModel === null
185
- ? [authority.schema]
186
- : [authority.schema, authority.houseModel.root];
187
- }
188
205
  export function trackedFrom(document) {
189
206
  return document.authorities.map((authority) => ({
190
207
  locator: authority.roomRef,
191
208
  authority: authority.roomRef,
192
209
  handle: authority.roomHandle,
193
210
  schema: authority.schema,
194
- houseModel: authority.houseModel,
195
- schemas: schemasOf(authority),
211
+ typedSelection: authority.typedSelection,
196
212
  position: authority.position,
197
213
  logEpoch: authority.logEpoch,
198
214
  }));
@@ -204,8 +220,11 @@ export function providerLimits(bounds) {
204
220
  { name: 'change-documents', value: bounds.max_batch_documents },
205
221
  { name: 'path-length', value: bounds.max_path_length },
206
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 }]),
207
226
  { name: 'write-rate' },
208
- { name: 'content-ceiling' },
227
+ { name: 'storage-limit' },
209
228
  ];
210
229
  }
211
230
  export function declaredRetention(bounds) {
@@ -215,23 +234,17 @@ export function declaredRetention(bounds) {
215
234
  refreshHorizon: bounds.change_retention_seconds,
216
235
  };
217
236
  }
218
- export function capabilities(document) {
219
- const house = document.authorities.find((authority) => authority.houseModel !== null);
237
+ export function capabilities(actions) {
238
+ return [{ name: PROVIDER_ACTIONS, actions: declaredActions(actions) }];
239
+ }
240
+ export function siteCapabilities() {
220
241
  return [
221
242
  {
222
243
  name: PROVIDER_ACTIONS,
223
- actions: declaredActions(document.actions),
224
- ...(house === undefined
225
- ? {}
226
- : { conversationAgents: houseConversationAgents(house.roomRef) }),
244
+ actions: [{ name: SITE_SUBMISSION, inputShape: {}, resultKind: 'house' }],
227
245
  },
228
246
  ];
229
247
  }
230
- export function siteCapabilities() {
231
- return [
232
- { name: PROVIDER_ACTIONS, actions: [{ name: 'submit', inputShape: {}, resultKind: 'house' }] },
233
- ];
234
- }
235
248
  export function discoveredRoom(authority) {
236
249
  const locator = authority.roomRef;
237
250
  return {
@@ -240,16 +253,18 @@ export function discoveredRoom(authority) {
240
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: { selection: locator, admission: authority.managedReplication },
249
- ...(authority.houseModel === null
259
+ replica: {
260
+ selection: locator,
261
+ admission: authority.managedReplication,
262
+ offline: authority.level === 'open' ? 'locked' : 'open',
263
+ },
264
+ ...(authority.typedSelection === null
250
265
  ? {}
251
- : { typedSelection: { roots: [...authority.houseModel.paths] } }),
252
- providerOwnedPaths: [...authority.protectedPaths, ...schemasOf(authority)],
266
+ : { typedSelection: { roots: [...authority.typedSelection] } }),
267
+ providerOwnedPaths: [...authority.protectedPaths, authority.schema],
253
268
  };
254
269
  }
255
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"}
@@ -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
+ }