@agentshouse/mdruntime-adapter 0.1.0-cd61dfca5d699 → 0.1.0-cd75dfaf57319

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 (73) hide show
  1. package/README.md +2 -2
  2. package/dist/actions.d.ts +4 -66
  3. package/dist/actions.d.ts.map +1 -1
  4. package/dist/actions.js +7 -339
  5. package/dist/adapter.d.ts.map +1 -1
  6. package/dist/adapter.js +229 -371
  7. package/dist/app-reference.d.ts +2 -0
  8. package/dist/app-reference.d.ts.map +1 -0
  9. package/dist/app-reference.js +2 -0
  10. package/dist/crockford.d.ts +4 -0
  11. package/dist/crockford.d.ts.map +1 -0
  12. package/dist/crockford.js +3 -0
  13. package/dist/discovery.d.ts +23 -14
  14. package/dist/discovery.d.ts.map +1 -1
  15. package/dist/discovery.js +92 -54
  16. package/dist/history.d.ts +12 -0
  17. package/dist/history.d.ts.map +1 -0
  18. package/dist/history.js +92 -0
  19. package/dist/house-model.d.ts +719 -0
  20. package/dist/house-model.d.ts.map +1 -0
  21. package/dist/house-model.js +393 -0
  22. package/dist/index.d.ts +11 -2
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +10 -1
  25. package/dist/model.d.ts +8 -3
  26. package/dist/model.d.ts.map +1 -1
  27. package/dist/model.js +37 -34
  28. package/dist/part.d.ts +14 -0
  29. package/dist/part.d.ts.map +1 -0
  30. package/dist/part.js +90 -0
  31. package/dist/read.d.ts +56 -63
  32. package/dist/read.d.ts.map +1 -1
  33. package/dist/read.js +240 -285
  34. package/dist/refusal.d.ts +0 -3
  35. package/dist/refusal.d.ts.map +1 -1
  36. package/dist/refusal.js +0 -5
  37. package/dist/room-stream.d.ts +20 -0
  38. package/dist/room-stream.d.ts.map +1 -0
  39. package/dist/room-stream.js +57 -0
  40. package/dist/room-types.d.ts +7 -0
  41. package/dist/room-types.d.ts.map +1 -0
  42. package/dist/room-types.js +123 -0
  43. package/dist/search.d.ts +5 -0
  44. package/dist/search.d.ts.map +1 -0
  45. package/dist/search.js +47 -0
  46. package/dist/site.d.ts.map +1 -1
  47. package/dist/site.js +88 -195
  48. package/dist/space-schema.d.ts +7 -0
  49. package/dist/space-schema.d.ts.map +1 -0
  50. package/dist/space-schema.js +18 -0
  51. package/dist/stream.d.ts +14 -14
  52. package/dist/stream.d.ts.map +1 -1
  53. package/dist/stream.js +170 -422
  54. package/dist/transport.d.ts +55 -40
  55. package/dist/transport.d.ts.map +1 -1
  56. package/dist/transport.js +54 -11
  57. package/dist/upload.d.ts +12 -0
  58. package/dist/upload.d.ts.map +1 -0
  59. package/dist/upload.js +63 -0
  60. package/dist/write.d.ts +18 -2
  61. package/dist/write.d.ts.map +1 -1
  62. package/dist/write.js +105 -75
  63. package/package.json +8 -4
  64. package/AGENTS.md +0 -299
  65. package/dist/gather.d.ts +0 -4
  66. package/dist/gather.d.ts.map +0 -1
  67. package/dist/gather.js +0 -45
  68. package/dist/handed.d.ts +0 -15
  69. package/dist/handed.d.ts.map +0 -1
  70. package/dist/handed.js +0 -38
  71. package/dist/referrer.d.ts +0 -7
  72. package/dist/referrer.d.ts.map +0 -1
  73. 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;
@@ -15,26 +14,22 @@ export type HouseBounds = {
15
14
  max_prefixes: number;
16
15
  max_held_files: number;
17
16
  change_retention_seconds: number;
18
- operation_retention_seconds: number;
17
+ max_move_documents?: number;
19
18
  };
20
19
  export type HouseOperations = {
21
- read: readonly string[];
22
- sync: readonly string[];
23
20
  write: readonly string[];
24
- delete: readonly string[];
25
- };
26
- export type HouseModel = {
27
- root: string;
28
- paths: readonly string[];
21
+ erase: readonly string[];
29
22
  };
23
+ export type HouseAccessLevel = 'search' | 'open' | 'keep';
30
24
  export type HouseAuthority = LogPosition & {
31
25
  roomRef: string;
32
26
  roomHandle: string;
33
27
  name: string;
34
28
  schema: string;
35
- houseModel: HouseModel | null;
29
+ typedSelection: readonly string[] | null;
36
30
  managedReplication: 'admitted' | 'unavailable';
37
31
  protectedPaths: readonly string[];
32
+ level: HouseAccessLevel;
38
33
  operations: HouseOperations;
39
34
  };
40
35
  export type HouseDiscoveryDocument = {
@@ -43,13 +38,17 @@ export type HouseDiscoveryDocument = {
43
38
  authorities: readonly HouseAuthority[];
44
39
  actions: readonly string[];
45
40
  };
41
+ export type HouseAuthorityChange = {
42
+ member: Member;
43
+ authorities: readonly HouseAuthority[];
44
+ left: readonly string[];
45
+ };
46
46
  export type TrackedAuthority = LogPosition & {
47
47
  locator: string;
48
48
  authority: string;
49
49
  handle: string;
50
50
  schema: string;
51
- houseModel: HouseModel | null;
52
- schemas: readonly string[];
51
+ typedSelection: readonly string[] | null;
53
52
  };
54
53
  export type HouseSiteAuthority = LogPosition & {
55
54
  roomRef: string;
@@ -60,14 +59,24 @@ export type HouseSiteDiscovery = {
60
59
  bounds: HouseBounds;
61
60
  authorities: readonly HouseSiteAuthority[];
62
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>;
63
70
  export declare function parseDiscovery(body: unknown): HouseDiscoveryDocument | null;
71
+ export declare function parseAuthorityChange(body: unknown): HouseAuthorityChange | null;
64
72
  export declare function parseSiteDiscovery(body: unknown): HouseSiteDiscovery | null;
65
73
  export declare function siteTracked(document: HouseSiteDiscovery): TrackedAuthority[];
66
- export declare function trackedFrom(document: HouseDiscoveryDocument): TrackedAuthority[];
74
+ export declare function trackedFrom(document: Pick<HouseDiscoveryDocument, 'authorities'>): TrackedAuthority[];
67
75
  export declare function providerLimits(bounds: HouseBounds): readonly ProviderLimit[];
68
76
  export declare function declaredRetention(bounds: HouseBounds): Retention;
69
- export declare function capabilities(actions: HouseDiscoveryDocument['actions'], rooms: readonly Pick<TrackedAuthority, 'authority' | 'houseModel'>[]): readonly Capability[];
77
+ export declare function capabilities(actions: HouseDiscoveryDocument['actions']): readonly Capability[];
70
78
  export declare function siteCapabilities(): readonly Capability[];
71
79
  export declare function discoveredRoom(authority: HouseAuthority): DiscoveredRoom;
72
80
  export declare function mapDiscovery(document: Pick<HouseDiscoveryDocument, 'bounds'>, rooms: readonly DiscoveredRoom[], declared: readonly Capability[]): Discovery;
81
+ export {};
73
82
  //# sourceMappingURL=discovery.d.ts.map
@@ -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, SITE_SUBMIT } 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',
@@ -15,9 +15,9 @@ const BOUND_KEYS = [
15
15
  'max_prefixes',
16
16
  'max_held_files',
17
17
  'change_retention_seconds',
18
- 'operation_retention_seconds',
19
18
  ];
20
- const OPERATION_KEYS = ['read', 'sync', 'write', 'delete'];
19
+ const OPERATION_KEYS = ['write', 'erase'];
20
+ const ACCESS_LEVELS = ['search', 'open', 'keep'];
21
21
  function stringList(value) {
22
22
  if (!Array.isArray(value))
23
23
  return null;
@@ -34,18 +34,18 @@ function parseBounds(value) {
34
34
  return null;
35
35
  bounds[key] = amount;
36
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
+ }
37
43
  return bounds;
38
44
  }
39
- function parseHouseModel(value) {
45
+ function parseTypedSelection(value) {
40
46
  if (value === undefined)
41
47
  return null;
42
- if (typeof value !== 'object' || value === null)
43
- return undefined;
44
- const held = value;
45
- const paths = stringList(held.paths);
46
- if (typeof held.root !== 'string' || held.root.length === 0 || paths === null)
47
- return undefined;
48
- return { root: held.root, paths };
48
+ return stringList(value) ?? undefined;
49
49
  }
50
50
  function parseMember(value) {
51
51
  if (typeof value !== 'object' || value === null)
@@ -82,10 +82,15 @@ function parseAuthority(value) {
82
82
  return null;
83
83
  }
84
84
  const at = readPosition(held);
85
- const houseModel = parseHouseModel(held.house_model);
85
+ const typedSelection = parseTypedSelection(held.typed_selection);
86
86
  const protectedPaths = stringList(held.protected_paths);
87
87
  const operations = parseOperations(held.operations);
88
- if (at === null || houseModel === undefined || protectedPaths === null || operations === null)
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)
89
94
  return null;
90
95
  if (typeof held.room_ref !== 'string' || held.room_ref.length === 0)
91
96
  return null;
@@ -96,13 +101,55 @@ function parseAuthority(value) {
96
101
  roomHandle: held.room_handle,
97
102
  name: held.name,
98
103
  schema: held.model_root,
99
- houseModel,
104
+ typedSelection,
100
105
  managedReplication: held.managed_replication,
101
106
  protectedPaths,
107
+ level,
102
108
  operations,
103
109
  ...at,
104
110
  };
105
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
+ }
106
153
  export function parseDiscovery(body) {
107
154
  if (typeof body !== 'object' || body === null)
108
155
  return null;
@@ -118,16 +165,19 @@ export function parseDiscovery(body) {
118
165
  new Set(actions).size !== actions.length ||
119
166
  actions.some((name) => name.length === 0))
120
167
  return null;
121
- if (!Array.isArray(held.authorities))
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)
122
173
  return null;
123
- const authorities = [];
124
- for (const entry of held.authorities) {
125
- const authority = parseAuthority(entry);
126
- if (authority === null)
127
- return null;
128
- authorities.push(authority);
129
- }
130
- return { member, 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 };
131
181
  }
132
182
  function parseSiteAuthority(value) {
133
183
  if (typeof value !== 'object' || value === null)
@@ -175,25 +225,18 @@ export function siteTracked(document) {
175
225
  authority: authority.roomRef,
176
226
  handle: authority.roomHandle,
177
227
  schema: authority.schema,
178
- houseModel: null,
179
- schemas: [authority.schema],
228
+ typedSelection: null,
180
229
  position: authority.position,
181
230
  logEpoch: authority.logEpoch,
182
231
  }));
183
232
  }
184
- function schemasOf(authority) {
185
- return authority.houseModel === null
186
- ? [authority.schema]
187
- : [authority.schema, authority.houseModel.root];
188
- }
189
233
  export function trackedFrom(document) {
190
234
  return document.authorities.map((authority) => ({
191
235
  locator: authority.roomRef,
192
236
  authority: authority.roomRef,
193
237
  handle: authority.roomHandle,
194
238
  schema: authority.schema,
195
- houseModel: authority.houseModel,
196
- schemas: schemasOf(authority),
239
+ typedSelection: authority.typedSelection,
197
240
  position: authority.position,
198
241
  logEpoch: authority.logEpoch,
199
242
  }));
@@ -205,34 +248,27 @@ export function providerLimits(bounds) {
205
248
  { name: 'change-documents', value: bounds.max_batch_documents },
206
249
  { name: 'path-length', value: bounds.max_path_length },
207
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 }]),
208
254
  { name: 'write-rate' },
209
- { name: 'content-ceiling' },
255
+ { name: 'storage-limit' },
210
256
  ];
211
257
  }
212
258
  export function declaredRetention(bounds) {
213
259
  return {
214
260
  history: { kind: 'no-declared-time-bound' },
215
- outcome: bounds.operation_retention_seconds,
216
261
  refreshHorizon: bounds.change_retention_seconds,
217
262
  };
218
263
  }
219
- export function capabilities(actions, rooms) {
220
- const house = rooms.find((room) => room.houseModel !== null);
221
- return [
222
- {
223
- name: PROVIDER_ACTIONS,
224
- actions: declaredActions(actions),
225
- ...(house === undefined
226
- ? {}
227
- : { conversationAgents: houseConversationAgents(house.authority) }),
228
- },
229
- ];
264
+ export function capabilities(actions) {
265
+ return [{ name: PROVIDER_ACTIONS, actions: declaredActions(actions) }];
230
266
  }
231
267
  export function siteCapabilities() {
232
268
  return [
233
269
  {
234
270
  name: PROVIDER_ACTIONS,
235
- actions: [{ name: SITE_SUBMIT, inputShape: {}, resultKind: 'house' }],
271
+ actions: [{ name: SITE_SUBMISSION, inputShape: {}, resultKind: 'house' }],
236
272
  },
237
273
  ];
238
274
  }
@@ -244,16 +280,18 @@ export function discoveredRoom(authority) {
244
280
  handle: authority.roomHandle,
245
281
  roomVersion: roomVersion(authority),
246
282
  operations: {
247
- read: [...authority.operations.read],
248
- sync: [...authority.operations.sync],
249
283
  write: [...authority.operations.write],
250
- delete: [...authority.operations.delete],
284
+ erase: [...authority.operations.erase],
285
+ },
286
+ replica: {
287
+ selection: locator,
288
+ admission: authority.managedReplication,
289
+ offline: authority.level === 'open' ? 'locked' : 'open',
251
290
  },
252
- replica: { selection: locator, admission: authority.managedReplication },
253
- ...(authority.houseModel === null
291
+ ...(authority.typedSelection === null
254
292
  ? {}
255
- : { typedSelection: { roots: [...authority.houseModel.paths] } }),
256
- providerOwnedPaths: [...authority.protectedPaths, ...schemasOf(authority)],
293
+ : { typedSelection: { roots: [...authority.typedSelection] } }),
294
+ providerOwnedPaths: [...authority.protectedPaths, authority.schema],
257
295
  };
258
296
  }
259
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"}
@@ -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
+ }