@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.
Files changed (69) hide show
  1. package/README.md +4 -4
  2. package/dist/actions.d.ts +3 -4
  3. package/dist/actions.d.ts.map +1 -1
  4. package/dist/actions.js +10 -327
  5. package/dist/adapter.d.ts +1 -0
  6. package/dist/adapter.d.ts.map +1 -1
  7. package/dist/adapter.js +283 -246
  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 +18 -23
  15. package/dist/discovery.d.ts.map +1 -1
  16. package/dist/discovery.js +80 -73
  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 +2915 -0
  21. package/dist/house-model.d.ts.map +1 -0
  22. package/dist/house-model.js +1603 -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 +10 -18
  27. package/dist/model.d.ts.map +1 -1
  28. package/dist/model.js +39 -37
  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 -41
  33. package/dist/read.d.ts.map +1 -1
  34. package/dist/read.js +248 -237
  35. package/dist/refusal.d.ts +4 -11
  36. package/dist/refusal.d.ts.map +1 -1
  37. package/dist/refusal.js +26 -17
  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 +126 -0
  44. package/dist/site.d.ts +1 -1
  45. package/dist/site.d.ts.map +1 -1
  46. package/dist/site.js +132 -142
  47. package/dist/stream.d.ts +16 -11
  48. package/dist/stream.d.ts.map +1 -1
  49. package/dist/stream.js +229 -143
  50. package/dist/transport.d.ts +109 -22
  51. package/dist/transport.d.ts.map +1 -1
  52. package/dist/transport.js +53 -10
  53. package/dist/upload.d.ts +12 -0
  54. package/dist/upload.d.ts.map +1 -0
  55. package/dist/upload.js +63 -0
  56. package/dist/version.d.ts +2 -0
  57. package/dist/version.d.ts.map +1 -1
  58. package/dist/version.js +10 -1
  59. package/dist/write.d.ts +18 -2
  60. package/dist/write.d.ts.map +1 -1
  61. package/dist/write.js +169 -42
  62. package/package.json +9 -6
  63. package/AGENTS.md +0 -215
  64. package/dist/gather.d.ts +0 -3
  65. package/dist/gather.d.ts.map +0 -1
  66. package/dist/gather.js +0 -40
  67. package/dist/links.d.ts +0 -12
  68. package/dist/links.d.ts.map +0 -1
  69. package/dist/links.js +0 -66
@@ -1,12 +1,6 @@
1
- import type { Capability, DiscoveredRoom, Discovery, ModelIdentity, ProviderLimit, Retention } from '@agentshouse/mdruntime';
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 HouseModel = {
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
- houseModel: HouseModel | null;
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
- houseModel: HouseModel | null;
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 locatorOf(authority: HouseAuthority): string;
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: readonly string[]): readonly Capability[];
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, attachedModel: DiscoveredRoom['attachedModel'], selectionModel: ModelIdentity | null): DiscoveredRoom;
78
- export declare function mapDiscovery(document: Pick<HouseDiscoveryDocument, 'bounds' | 'mdModelVersion'>, rooms: readonly DiscoveredRoom[], declared: readonly Capability[]): Discovery;
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
@@ -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,13 +1,7 @@
1
- import { declaredActions, HOUSE_CONVERSATION_CARDS } from './actions.js';
2
- import { PRIVATE_LOCATOR } from './transport.js';
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 = ['read', 'sync', 'write', 'delete'];
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 parseHouseModel(value) {
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 undefined;
49
- const held = value;
50
- const paths = stringList(held.paths);
51
- if (typeof held.root !== 'string' || held.root.length === 0 || paths === null)
52
- return undefined;
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 houseModel = parseHouseModel(held.house_model);
86
+ const typedSelection = parseTypedSelection(held.typed_selection);
83
87
  const protectedPaths = stringList(held.protected_paths);
84
88
  const operations = parseOperations(held.operations);
85
- 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)
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
- houseModel,
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
- 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)
118
145
  return null;
119
- const authorities = [];
120
- for (const entry of held.authorities) {
121
- const authority = parseAuthority(entry);
122
- if (authority === null)
123
- return null;
124
- authorities.push(authority);
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, mdModelVersion: held.md_model_version, authorities };
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
- houseModel: null,
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: locatorOf(authority),
207
+ locator: authority.roomRef,
193
208
  authority: authority.roomRef,
194
209
  handle: authority.roomHandle,
195
210
  schema: authority.schema,
196
- houseModel: authority.houseModel,
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: 'content-ceiling' },
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: declaredActions(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, attachedModel, selectionModel) {
248
+ export function discoveredRoom(authority) {
249
+ const locator = authority.roomRef;
238
250
  return {
239
251
  name: authority.name,
240
- locator: locatorOf(authority),
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: { selection: locatorOf(authority), admission: authority.managedReplication },
249
- attachedModel,
250
- ...(authority.houseModel === null
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
- typedSelection: {
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"}
@@ -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
+ }