@agentshouse/mdruntime 0.1.0-cbbae1fff01c6 → 0.1.0-cc00e9289ddf4

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 (200) hide show
  1. package/README.md +17 -15
  2. package/dist/acceptance.d.ts.map +1 -1
  3. package/dist/acceptance.js +14 -23
  4. package/dist/act-lanes.d.ts +30 -0
  5. package/dist/act-lanes.d.ts.map +1 -0
  6. package/dist/act-lanes.js +225 -0
  7. package/dist/actions.d.ts +8 -2
  8. package/dist/actions.d.ts.map +1 -1
  9. package/dist/actions.js +114 -63
  10. package/dist/adapter.d.ts +30 -12
  11. package/dist/adapter.d.ts.map +1 -1
  12. package/dist/attached-model.d.ts +0 -1
  13. package/dist/attached-model.d.ts.map +1 -1
  14. package/dist/attached-model.js +0 -5
  15. package/dist/chat-types.d.ts +0 -2
  16. package/dist/chat-types.d.ts.map +1 -1
  17. package/dist/chat-types.js +0 -2
  18. package/dist/client.d.ts +8 -18
  19. package/dist/client.d.ts.map +1 -1
  20. package/dist/client.js +27 -15
  21. package/dist/compile.d.ts +2 -0
  22. package/dist/compile.d.ts.map +1 -1
  23. package/dist/compile.js +17 -4
  24. package/dist/connection.d.ts.map +1 -1
  25. package/dist/connection.js +15 -13
  26. package/dist/conversation-live.d.ts +23 -8
  27. package/dist/conversation-live.d.ts.map +1 -1
  28. package/dist/conversation-live.js +21 -9
  29. package/dist/conversation-row.d.ts +2 -0
  30. package/dist/conversation-row.d.ts.map +1 -1
  31. package/dist/conversation-row.js +2 -0
  32. package/dist/conversation.d.ts +27 -5
  33. package/dist/conversation.d.ts.map +1 -1
  34. package/dist/conversation.js +279 -168
  35. package/dist/discovery.d.ts.map +1 -1
  36. package/dist/discovery.js +8 -6
  37. package/dist/durability.d.ts +4 -0
  38. package/dist/durability.d.ts.map +1 -1
  39. package/dist/durability.js +4 -0
  40. package/dist/entry.js +1 -1
  41. package/dist/expectation.d.ts +25 -14
  42. package/dist/expectation.d.ts.map +1 -1
  43. package/dist/expectation.js +51 -20
  44. package/dist/failure.d.ts +2 -0
  45. package/dist/failure.d.ts.map +1 -1
  46. package/dist/failure.js +3 -0
  47. package/dist/figures.d.ts.map +1 -1
  48. package/dist/figures.js +4 -2
  49. package/dist/file.d.ts.map +1 -1
  50. package/dist/file.js +2 -1
  51. package/dist/host.d.ts +1 -0
  52. package/dist/host.d.ts.map +1 -1
  53. package/dist/host.js +39 -11
  54. package/dist/index.d.ts +11 -8
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +9 -6
  57. package/dist/install.d.ts +10 -4
  58. package/dist/install.d.ts.map +1 -1
  59. package/dist/install.js +45 -46
  60. package/dist/lifecycle.d.ts.map +1 -1
  61. package/dist/lifecycle.js +22 -16
  62. package/dist/listing.d.ts +7 -3
  63. package/dist/listing.d.ts.map +1 -1
  64. package/dist/listing.js +26 -13
  65. package/dist/live.d.ts +5 -3
  66. package/dist/live.d.ts.map +1 -1
  67. package/dist/live.js +71 -30
  68. package/dist/locks.d.ts.map +1 -1
  69. package/dist/locks.js +2 -3
  70. package/dist/lost.d.ts.map +1 -1
  71. package/dist/lost.js +2 -3
  72. package/dist/media.d.ts.map +1 -1
  73. package/dist/media.js +7 -10
  74. package/dist/memory.d.ts +3 -1
  75. package/dist/memory.d.ts.map +1 -1
  76. package/dist/memory.js +50 -22
  77. package/dist/messages.d.ts +12 -3
  78. package/dist/messages.d.ts.map +1 -1
  79. package/dist/messages.js +24 -10
  80. package/dist/models.d.ts.map +1 -1
  81. package/dist/models.js +5 -8
  82. package/dist/observation.d.ts +27 -12
  83. package/dist/observation.d.ts.map +1 -1
  84. package/dist/observation.js +173 -69
  85. package/dist/opening.d.ts.map +1 -1
  86. package/dist/opening.js +3 -9
  87. package/dist/outcome.d.ts +7 -0
  88. package/dist/outcome.d.ts.map +1 -1
  89. package/dist/outcome.js +23 -2
  90. package/dist/overlay.d.ts +3 -0
  91. package/dist/overlay.d.ts.map +1 -1
  92. package/dist/overlay.js +8 -4
  93. package/dist/page-metadata.d.ts +8 -0
  94. package/dist/page-metadata.d.ts.map +1 -0
  95. package/dist/page-metadata.js +19 -0
  96. package/dist/parts.d.ts +2 -9
  97. package/dist/parts.d.ts.map +1 -1
  98. package/dist/parts.js +6 -14
  99. package/dist/preparation.d.ts +27 -6
  100. package/dist/preparation.d.ts.map +1 -1
  101. package/dist/preparation.js +137 -56
  102. package/dist/presence.d.ts +7 -1
  103. package/dist/presence.d.ts.map +1 -1
  104. package/dist/presence.js +22 -9
  105. package/dist/queries.d.ts +2 -2
  106. package/dist/queries.d.ts.map +1 -1
  107. package/dist/queries.js +62 -24
  108. package/dist/questions.d.ts +0 -5
  109. package/dist/questions.d.ts.map +1 -1
  110. package/dist/questions.js +0 -7
  111. package/dist/queue.d.ts +2 -2
  112. package/dist/queue.d.ts.map +1 -1
  113. package/dist/queue.js +25 -30
  114. package/dist/reach.d.ts +2 -3
  115. package/dist/reach.d.ts.map +1 -1
  116. package/dist/reach.js +75 -21
  117. package/dist/react.d.ts +7 -5
  118. package/dist/react.d.ts.map +1 -1
  119. package/dist/react.js +28 -5
  120. package/dist/readiness.d.ts +9 -3
  121. package/dist/readiness.d.ts.map +1 -1
  122. package/dist/readiness.js +3 -5
  123. package/dist/reads.d.ts +3 -1
  124. package/dist/reads.d.ts.map +1 -1
  125. package/dist/reads.js +5 -1
  126. package/dist/recovery.d.ts +3 -1
  127. package/dist/recovery.d.ts.map +1 -1
  128. package/dist/recovery.js +29 -7
  129. package/dist/refusal.d.ts.map +1 -1
  130. package/dist/refusal.js +1 -3
  131. package/dist/retried.d.ts +30 -0
  132. package/dist/retried.d.ts.map +1 -0
  133. package/dist/retried.js +72 -0
  134. package/dist/room-draft.d.ts +2 -2
  135. package/dist/room-draft.d.ts.map +1 -1
  136. package/dist/room-draft.js +26 -21
  137. package/dist/rows.d.ts +2 -0
  138. package/dist/rows.d.ts.map +1 -1
  139. package/dist/rows.js +3 -0
  140. package/dist/runtime.d.ts +2 -2
  141. package/dist/runtime.d.ts.map +1 -1
  142. package/dist/save.d.ts +1 -0
  143. package/dist/save.d.ts.map +1 -1
  144. package/dist/save.js +105 -55
  145. package/dist/saves.d.ts.map +1 -1
  146. package/dist/saves.js +3 -6
  147. package/dist/seed.d.ts.map +1 -1
  148. package/dist/seed.js +2 -2
  149. package/dist/shown.d.ts +3 -2
  150. package/dist/shown.d.ts.map +1 -1
  151. package/dist/shown.js +58 -39
  152. package/dist/socket/lanes.d.ts +12 -4
  153. package/dist/socket/lanes.d.ts.map +1 -1
  154. package/dist/socket/lanes.js +34 -8
  155. package/dist/socket.d.ts +3 -3
  156. package/dist/socket.d.ts.map +1 -1
  157. package/dist/socket.js +3 -9
  158. package/dist/source.d.ts +0 -7
  159. package/dist/source.d.ts.map +1 -1
  160. package/dist/store/installs.d.ts +2 -2
  161. package/dist/store/installs.d.ts.map +1 -1
  162. package/dist/store/installs.js +10 -4
  163. package/dist/store/readiness.d.ts +5 -4
  164. package/dist/store/readiness.d.ts.map +1 -1
  165. package/dist/store/readiness.js +28 -12
  166. package/dist/store/records.d.ts +11 -4
  167. package/dist/store/records.d.ts.map +1 -1
  168. package/dist/store/records.js +56 -20
  169. package/dist/store/rooms-shown.d.ts +8 -0
  170. package/dist/store/rooms-shown.d.ts.map +1 -0
  171. package/dist/store/rooms-shown.js +13 -0
  172. package/dist/store.d.ts +9 -6
  173. package/dist/store.d.ts.map +1 -1
  174. package/dist/store.js +11 -2
  175. package/dist/stored.d.ts +24 -13
  176. package/dist/stored.d.ts.map +1 -1
  177. package/dist/stored.js +73 -17
  178. package/dist/surface.d.ts +4 -3
  179. package/dist/surface.d.ts.map +1 -1
  180. package/dist/surface.js +12 -13
  181. package/dist/sync.d.ts.map +1 -1
  182. package/dist/sync.js +31 -17
  183. package/dist/tables.d.ts +14 -7
  184. package/dist/tables.d.ts.map +1 -1
  185. package/dist/tables.js +36 -15
  186. package/dist/tallies.d.ts.map +1 -1
  187. package/dist/tallies.js +1 -2
  188. package/dist/wire.d.ts +40 -3
  189. package/dist/wire.d.ts.map +1 -1
  190. package/dist/wire.js +11 -1
  191. package/package.json +3 -3
  192. package/dist/attempt.d.ts +0 -16
  193. package/dist/attempt.d.ts.map +0 -1
  194. package/dist/attempt.js +0 -70
  195. package/dist/job.d.ts +0 -5
  196. package/dist/job.d.ts.map +0 -1
  197. package/dist/job.js +0 -7
  198. package/dist/log.d.ts +0 -6
  199. package/dist/log.d.ts.map +0 -1
  200. package/dist/log.js +0 -14
package/dist/client.js CHANGED
@@ -1,6 +1,8 @@
1
1
  import { shownBy } from './media.js';
2
+ import { pageMetadataBlock } from './page-metadata.js';
2
3
  import { observed } from './observation.js';
3
4
  import { runtimeError } from './failure.js';
5
+ import { blobOf, } from './outcome.js';
4
6
  import { AUTHORIZATION_ENDED, PORT_CLOSED, wireAnswer, } from './wire.js';
5
7
  // React renders an arrived value in a later task and opens what that render observes as it commits, so this many frames opening nothing mean the page drew what it observes.
6
8
  const SETTLED_FRAMES = 2;
@@ -36,13 +38,13 @@ export function connectMdRuntime(port, buildFile = UNBUILT) {
36
38
  const send = (message) => {
37
39
  port.postMessage(message);
38
40
  };
39
- function begin(id, topic, first) {
41
+ function begin(id, topic, input, first) {
40
42
  const handle = observed(first, () => {
41
43
  observations.delete(id);
42
44
  if (refusal === null)
43
45
  send({ kind: 'stop', id });
44
- }, topic === 'query');
45
- observations.set(id, { topic, handle });
46
+ }, topic);
47
+ observations.set(id, { topic, input, handle });
46
48
  return handle.observation;
47
49
  }
48
50
  function refuse(reported) {
@@ -54,7 +56,7 @@ export function connectMdRuntime(port, buildFile = UNBUILT) {
54
56
  const failure = refused(reported);
55
57
  for (const [id, waiting] of opening) {
56
58
  if (waiting.topic === 'connection-refusal')
57
- waiting.settle(begin(id, waiting.topic, reported));
59
+ waiting.settle(begin(id, waiting.topic, waiting.input, reported));
58
60
  else
59
61
  waiting.fail(failure);
60
62
  }
@@ -106,7 +108,7 @@ export function connectMdRuntime(port, buildFile = UNBUILT) {
106
108
  waiting.fail(runtimeError(message.code, message.message, message.retryable));
107
109
  }
108
110
  else
109
- waiting.settle(begin(message.id, waiting.topic, message.value));
111
+ waiting.settle(begin(message.id, waiting.topic, waiting.input, message.value));
110
112
  drawing?.();
111
113
  return;
112
114
  }
@@ -142,11 +144,11 @@ export function connectMdRuntime(port, buildFile = UNBUILT) {
142
144
  const id = (sequence += 1);
143
145
  if (refusal !== null) {
144
146
  return topic === 'connection-refusal'
145
- ? Promise.resolve(begin(id, topic, refusal))
147
+ ? Promise.resolve(begin(id, topic, input, refusal))
146
148
  : Promise.reject(refused(refusal));
147
149
  }
148
150
  return new Promise((settle, fail) => {
149
- opening.set(id, { topic, settle, fail });
151
+ opening.set(id, { topic, input, settle, fail });
150
152
  send({ kind: 'observe', id, topic, input });
151
153
  drawing?.();
152
154
  });
@@ -194,9 +196,7 @@ export function connectMdRuntime(port, buildFile = UNBUILT) {
194
196
  const read = streamed(await ask('binaryFile.read', [room, path, revision]));
195
197
  if (read.kind !== 'binary')
196
198
  return read;
197
- const copy = await new Response(read.stream, {
198
- headers: { 'content-type': read.mediaType },
199
- }).blob();
199
+ const copy = await blobOf(read);
200
200
  const url = URL.createObjectURL(copy);
201
201
  handed(url, path.slice(path.lastIndexOf('/') + 1));
202
202
  setTimeout(() => URL.revokeObjectURL(url), HANDED_COPY_MS);
@@ -256,14 +256,26 @@ export function connectMdRuntime(port, buildFile = UNBUILT) {
256
256
  read: (conversation, options) => ask('conversation.read', [conversation, options]),
257
257
  create: (input) => ask('conversation.create', [input]),
258
258
  send: (conversation, operation, draft) => ask('conversation.send', [conversation, operation, draft]),
259
- answer: (conversation, answer) => ask('conversation.answer', [conversation, answer]),
260
- interrupt: (conversation) => ask('conversation.interrupt', [conversation]),
261
- kill: (conversation) => ask('conversation.kill', [conversation]),
262
- delete: (conversation) => ask('conversation.delete', [conversation]),
259
+ answer: (conversation, answer, operation) => ask('conversation.answer', [conversation, answer, operation]),
260
+ interrupt: (conversation, operation) => ask('conversation.interrupt', [conversation, operation]),
261
+ kill: (conversation, operation) => ask('conversation.kill', [conversation, operation]),
262
+ delete: (conversation, operation) => ask('conversation.delete', [conversation, operation]),
263
+ takeOut: (conversation, message, operation) => ask('conversation.takeOut', [conversation, message, operation]),
264
+ decide: (request, decision, operation) => ask('conversation.decide', [request, decision, operation]),
265
+ rename: (conversation, name, operation) => ask('conversation.rename', [conversation, name, operation]),
266
+ option: (conversation, option, value, operation) => ask('conversation.option', [conversation, option, value, operation]),
267
+ retry: (conversation, message, operation) => ask('conversation.retry', [conversation, message, operation]),
268
+ pin: (figures) => ask('conversation.pin', [figures]),
269
+ openTurn: (conversation, turn) => ask('conversation.openTurn', [conversation, turn]),
270
+ dismissSuggestion: (conversation, suggestion) => ask('conversation.dismissSuggestion', [conversation, suggestion]),
271
+ pageMetadata: async (app, address) => pageMetadataBlock(app, address, [...observations]
272
+ .sort(([left], [right]) => left - right)
273
+ .flatMap(([, { topic, input }]) => (topic === 'query' ? [input[0]] : []))),
263
274
  },
264
275
  chatDraft: {
265
276
  write: (conversation, draft, revision) => ask('chatDraft.write', [conversation, draft, revision]),
266
277
  prepend: (conversation, draft) => ask('chatDraft.prepend', [conversation, draft]),
278
+ append: (conversation, draft) => ask('chatDraft.append', [conversation, draft]),
267
279
  discard: (conversation) => ask('chatDraft.discard', [conversation]),
268
280
  },
269
281
  history: (locator, path, query) => ask('history', [locator, path, query]),
@@ -274,8 +286,8 @@ export function connectMdRuntime(port, buildFile = UNBUILT) {
274
286
  download,
275
287
  },
276
288
  call: (name, input) => ask('call', [name, input]),
289
+ answered: (operation) => ask('answered', [operation]),
277
290
  reached: (locator, roomVersion, path) => ask('reached', [locator, roomVersion, path]),
278
- log: () => ask('log', []),
279
291
  persistence: () => ask('persistence', []),
280
292
  retry: () => ask('retry', []),
281
293
  cleanUp: () => ask('cleanUp', []),
package/dist/compile.d.ts CHANGED
@@ -1,9 +1,11 @@
1
1
  import { sql } from '@agentshouse/mdmodel';
2
+ import { type Composition } from './collection.js';
2
3
  import type { Plan, QueryRows } from './query.js';
3
4
  import type { Connection } from './tables.js';
4
5
  export type QueryRoom = {
5
6
  readonly locator: string;
6
7
  readonly key: number;
8
+ readonly composition?: Composition;
7
9
  };
8
10
  type Fragment = sql.Fragment;
9
11
  export declare const VISIBLE: (alias: string) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,GAAG,EAOJ,MAAM,sBAAsB,CAAC;AAI9B,OAAO,KAAK,EAAE,IAAI,EAAuC,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvF,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,aAAa,CAAC;AAG1D,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,KAAK,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAI7B,eAAO,MAAM,OAAO,UAAW,MAAM,KAAG,MACkC,CAAC;AAa3E,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAM5D;AA2cD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA6ZjE,wBAAgB,WAAW,CACzB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,MAAM,GAAE,MAAM,GAAG,IAAW,GAC3B,WAAW,CAUb"}
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,GAAG,EAQJ,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,KAAK,EAAE,IAAI,EAAuC,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvF,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,aAAa,CAAC;AAG1D,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;CACpC,CAAC;AAIF,KAAK,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAI7B,eAAO,MAAM,OAAO,UAAW,MAAM,KAAG,MACkC,CAAC;AAa3E,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAM5D;AA2dD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA4ZjE,wBAAgB,WAAW,CACzB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,MAAM,GAAE,MAAM,GAAG,IAAW,GAC3B,WAAW,CAUb"}
package/dist/compile.js CHANGED
@@ -1,7 +1,9 @@
1
1
  import { ARRAY_INDEX, bodied, byCodePoint, compared, cursorOf, heldKind, parse, pointerSegments, sql, } from '@agentshouse/mdmodel';
2
2
  import { binaryRecord } from './binary.js';
3
+ import { definitionsAt } from './collection.js';
3
4
  import { documentKey, pathOfKey, roomOfKey } from './rows.js';
4
5
  import { FROM_START, MAXIMUM_WINDOW } from './windows.js';
6
+ const UNTYPED = 'any';
5
7
  const { all, any, exists, fragment, grouped, joined, listed } = sql;
6
8
  export const VISIBLE = (alias) => `${alias}.visible = 1 AND ${alias}.present = 1 AND ${alias}.queried = 1`;
7
9
  function located(alias) {
@@ -310,7 +312,16 @@ function sectionsOf(sections, names) {
310
312
  return sections;
311
313
  return Object.fromEntries(names.flatMap((name) => (Object.hasOwn(sections, name) ? [[name, sections[name]]] : [])));
312
314
  }
313
- function documentOf(shape, room, row, linked) {
315
+ function freeParts(room, path, type, content) {
316
+ const definitions = room.composition === undefined ? undefined : definitionsAt(room.composition, path);
317
+ const definition = definitions?.(type === UNTYPED ? undefined : type);
318
+ if (definition === undefined && type !== UNTYPED)
319
+ return null;
320
+ const read = parse(content, path, definition);
321
+ return read.ok ? read.document : null;
322
+ }
323
+ function documentOf(shape, queried, row, linked) {
324
+ const room = queried.locator;
314
325
  const path = row.path;
315
326
  const type = row.type;
316
327
  const fileId = row.file_id;
@@ -333,8 +344,9 @@ function documentOf(shape, room, row, linked) {
333
344
  ...heldFacts(shape, row),
334
345
  };
335
346
  }
336
- const read = shape.sections !== null || shape.preamble ? parse(row.content, path) : null;
337
- const body = read?.ok === true ? read.document : null;
347
+ const body = shape.sections !== null || shape.preamble
348
+ ? freeParts(queried, path, type, row.content)
349
+ : null;
338
350
  const fields = JSON.parse(row.fields ?? '{}');
339
351
  return {
340
352
  room,
@@ -428,8 +440,9 @@ function documents(connection, bound, plan, shape, budget) {
428
440
  const kept = bodied(shape) ? withContent(connection, windowed, budget) : windowed;
429
441
  const cut = kept.length;
430
442
  const roomOf = new Map(bound.rooms.map(({ key, locator }) => [key, locator]));
443
+ const queried = new Map(bound.rooms.map((one) => [one.key, one]));
431
444
  const linked = shape.backlinks ? backlinksOf(connection, bound, kept) : new Map();
432
- const found = kept.map((row) => documentOf(shape, roomOf.get(Number(row.key)), row, linked));
445
+ const found = kept.map((row) => documentOf(shape, queried.get(Number(row.key)), row, linked));
433
446
  const last = kept.at(-1);
434
447
  const cursorAt = (row) => cursorOf([
435
448
  ...shape.orderBy.map(({ key }, index) => decodedKey(key, row, index)),
@@ -1 +1 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAI/E,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAWrE,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI9D,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAErE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,eAAe,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAIF,wBAAgB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAkGzE"}
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAI/E,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAUrE,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAK9D,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAErE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,eAAe,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAIF,wBAAgB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAqGzE"}
@@ -1,6 +1,6 @@
1
1
  import { submitLater } from './acceptance.js';
2
2
  import { invokeAction, called, readConversationHistory, resendLater } from './actions.js';
3
- import { builtInModel, roomTypesOf } from './attached-model.js';
3
+ import { builtInModel, NO_ROOM_TYPES } from './attached-model.js';
4
4
  import { createLiveConversations } from './conversation-live.js';
5
5
  import { writeRule } from './declaration.js';
6
6
  import { refusedForSpace } from './durability.js';
@@ -8,13 +8,13 @@ import { uncaught } from './failure.js';
8
8
  import { createFigures } from './figures.js';
9
9
  import { scheduleCurrency, spaceFreed, start } from './lifecycle.js';
10
10
  import { createLiveQueries } from './live.js';
11
- import { createLog } from './log.js';
12
11
  import { open } from './opening.js';
13
12
  import { deliverOwedReadiness, filled, prepare } from './preparation.js';
14
13
  import { createPresence } from './presence.js';
15
14
  import { answeredPlan, figuresCover, roomTallies } from './queries.js';
16
15
  import { readAnswers } from './reads.js';
17
16
  import { createRecovery } from './recovery.js';
17
+ import { createRetries } from './retried.js';
18
18
  import { publishChangeSet, show } from './shown.js';
19
19
  import { createSocket } from './socket.js';
20
20
  import { createStore } from './store.js';
@@ -22,13 +22,14 @@ import { composedRuntime } from './surface.js';
22
22
  const ROOM_ATTEMPTS = 16;
23
23
  export function composeRuntime(options) {
24
24
  const { adapter, shell } = options;
25
- const roomTypes = roomTypesOf(adapter.roomTypes, adapter.nameableRoomTypes);
25
+ const roomTypes = adapter.roomTypes ?? NO_ROOM_TYPES;
26
26
  const builtIn = builtInModel(roomTypes);
27
27
  const typedPaths = adapter.typedPaths ?? [];
28
- const journal = createLog();
29
- const socket = createSocket(adapter, journal, options.authorization);
28
+ const retries = createRetries(shell);
29
+ const socket = createSocket(adapter, retries, options.authorization);
30
30
  const presence = createPresence();
31
31
  const store = createStore({
32
+ retries,
32
33
  database: {
33
34
  async ask(request) {
34
35
  try {
@@ -46,11 +47,9 @@ export function composeRuntime(options) {
46
47
  typedPaths,
47
48
  persistence: shell.persistence,
48
49
  lost: presence.lost,
50
+ losing: presence.losing,
49
51
  opening: (local) => open(runtime, local),
50
- unpublished(error) {
51
- journal.record(`publication failed ${error instanceof Error ? error.name : 'unknown'}`);
52
- uncaught(error);
53
- },
52
+ unpublished: uncaught,
54
53
  changed(set) {
55
54
  if (set.unindexed.length > 0)
56
55
  prepare(runtime, set.unindexed);
@@ -58,7 +57,7 @@ export function composeRuntime(options) {
58
57
  submitLater(runtime, locator);
59
58
  return publishChangeSet(runtime, set);
60
59
  },
61
- deliverReadiness: (owed) => deliverOwedReadiness(runtime, owed),
60
+ deliverReadiness: (owed, rooms) => deliverOwedReadiness(runtime, owed, rooms),
62
61
  spaceFreed: () => spaceFreed(runtime),
63
62
  });
64
63
  const recovery = (options.recovery ?? createRecovery()).scope(ROOM_ATTEMPTS);
@@ -66,8 +65,8 @@ export function composeRuntime(options) {
66
65
  store,
67
66
  socket,
68
67
  presence,
69
- journal,
70
68
  recovery,
69
+ retries,
71
70
  shell,
72
71
  localSaves: adapter.localSaves === true,
73
72
  roomTypes,
@@ -77,7 +76,7 @@ export function composeRuntime(options) {
77
76
  usableWhenHeld: options.usableWhenHeld ?? [],
78
77
  build: options.build ?? '',
79
78
  conversations: createLiveConversations({
80
- call: (name, input) => invokeAction(runtime, name, input),
79
+ call: (name, input, attempt) => invokeAction(runtime, name, input, { attempt }),
81
80
  history: (request) => readConversationHistory(runtime, request),
82
81
  durably: store.durably,
83
82
  local: store.open,
@@ -93,7 +92,9 @@ export function composeRuntime(options) {
93
92
  full: store.space.full,
94
93
  closed: socket.closed,
95
94
  unanswered: () => resendLater(runtime),
95
+ heard: (operation, lost) => socket.lanes.settle(operation, lost),
96
96
  recovery: recovery.scope(),
97
+ retries,
97
98
  }),
98
99
  liveQueries: createLiveQueries((plan, cover) => answeredPlan(runtime, plan, cover), store.covering),
99
100
  figures: createFigures({
@@ -107,7 +108,8 @@ export function composeRuntime(options) {
107
108
  unkept: adapter.unkeptReads ?? [],
108
109
  leading: adapter.leadingReads ?? [],
109
110
  recovery: recovery.scope(),
110
- call: (name, input) => called(runtime, name, input),
111
+ retries,
112
+ call: (name, input, attempt) => called(runtime, name, input, attempt),
111
113
  online: socket.reached,
112
114
  streaming: socket.isOpen,
113
115
  closed: socket.closed,
@@ -5,9 +5,10 @@ import type { ChangeSet } from './change-set.js';
5
5
  import type { Asked, ConversationAgent, ConversationEntry, ConversationView, RunningTurn } from './conversation.js';
6
6
  import type { CallResult } from './outcome.js';
7
7
  import type { Recovery } from './recovery.js';
8
+ import type { Attempt, Retries } from './retried.js';
8
9
  import type { ChatDraftRecord, RuntimeStore } from './store.js';
9
10
  export type ConversationDependencies = {
10
- call(name: ConversationAction, input: unknown): Promise<CallResult>;
11
+ call(name: ConversationAction, input: unknown, attempt?: Attempt): Promise<CallResult>;
11
12
  history(request: ConversationHistoryRequest): Promise<CallResult>;
12
13
  durably<T>(work: (local: RuntimeStore) => Promise<T>): Promise<T>;
13
14
  local(): Promise<RuntimeStore>;
@@ -19,7 +20,9 @@ export type ConversationDependencies = {
19
20
  full(): boolean;
20
21
  closed(): boolean;
21
22
  unanswered(): void;
23
+ heard(operation: string, lost: boolean): void;
22
24
  readonly recovery: Recovery;
25
+ readonly retries: Retries;
23
26
  };
24
27
  export type Live = {
25
28
  turn: RunningTurn | null;
@@ -34,6 +37,7 @@ export type Live = {
34
37
  link: {
35
38
  connected: boolean;
36
39
  } | null;
40
+ deliveryWaiting: readonly string[];
37
41
  deliveryUnknown: readonly string[];
38
42
  };
39
43
  export declare const QUIET: Live;
@@ -42,10 +46,14 @@ export declare const FACTS: readonly Fact[];
42
46
  type Watcher = {
43
47
  readonly notify: (view: ConversationView) => void;
44
48
  };
45
- type HeldWindow = {
46
- readonly window: readonly AcceptedMessage[] | null;
49
+ export type Kept = {
47
50
  readonly draft: ChatDraftRecord | null;
48
51
  readonly ended: string | null;
52
+ readonly dismissed: string | null;
53
+ readonly pins: readonly string[];
54
+ };
55
+ type HeldWindow = Kept & {
56
+ readonly window: readonly AcceptedMessage[] | null;
49
57
  readonly more: boolean;
50
58
  readonly total: number | null;
51
59
  };
@@ -71,23 +79,29 @@ export type Audience<T> = {
71
79
  };
72
80
  type HeldFacts = {
73
81
  readonly listKnown: boolean;
82
+ readonly openingRead: boolean;
83
+ readonly openingListed: boolean;
74
84
  readonly listOwed: boolean;
75
85
  readonly listTelling: boolean;
76
86
  readonly agentsShown: string | null;
77
- readonly listedAgents: readonly ListedAgent[] | null;
78
- readonly agentsReading: boolean;
87
+ readonly listedShown: string | null;
79
88
  readonly replicated: ReadonlySet<string>;
80
89
  readonly handedReplicated: string | undefined;
81
90
  };
82
91
  export type Dispatch = Cell<{
83
92
  readonly answered: boolean;
84
93
  }>;
94
+ export type Relisted = {
95
+ readonly conversations: ReadonlyMap<string, ListedConversation>;
96
+ readonly agents: ReadonlyMap<string, ListedAgent>;
97
+ };
85
98
  export type LiveConversations = {
86
99
  readonly deps: ConversationDependencies;
87
100
  readonly held: Cell<HeldFacts>;
88
101
  readonly closing: AbortSignal;
89
102
  readonly listeners: Audience<readonly ConversationEntry[]>;
90
103
  readonly agentListeners: Audience<readonly ConversationAgent[]>;
104
+ readonly listedListeners: Audience<readonly ListedAgent[]>;
91
105
  views(): Iterable<SharedView>;
92
106
  viewJoined(key: string, conversation: string, asked: Asked, notify: (view: ConversationView) => void): {
93
107
  readonly view: SharedView;
@@ -106,7 +120,7 @@ export type LiveConversations = {
106
120
  caughtUpTo(conversation: string): void;
107
121
  gapOpened(conversation: string): void;
108
122
  generation(conversation: string): number;
109
- heardAt(conversation: string, position: string): void;
123
+ heardAt(conversation: string, change: string): void;
110
124
  newestHeard(conversation: string): string | undefined;
111
125
  catching(conversation: string): Promise<void> | undefined;
112
126
  catchingUntil(conversation: string, ended: Promise<void>): void;
@@ -115,9 +129,9 @@ export type LiveConversations = {
115
129
  isCreating(conversation: string): boolean;
116
130
  relisting(): boolean;
117
131
  relistBegun(): void;
118
- relistHeard(entries: readonly ListedConversation[]): void;
132
+ relistHeard(entries: readonly ListedConversation[], agents: readonly ListedAgent[]): void;
119
133
  relistDropped(conversation: string): void;
120
- relistTaken(): ReadonlyMap<string, ListedConversation> | null;
134
+ relistTaken(): Relisted | null;
121
135
  sendingBegan(operation: string): Dispatch;
122
136
  sendingEnded(operation: string, dispatch: Dispatch): void;
123
137
  sending(operation: string): boolean;
@@ -126,6 +140,7 @@ export type LiveConversations = {
126
140
  forget(conversation: string): void;
127
141
  current(): boolean;
128
142
  known(): boolean;
143
+ listed(): boolean;
129
144
  reopened(): void;
130
145
  lost(): void;
131
146
  close(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-live.d.ts","sourceRoot":"","sources":["../src/conversation-live.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conversation-live.d.ts","sourceRoot":"","sources":["../src/conversation-live.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ export const QUIET = {
8
8
  starting: null,
9
9
  state: null,
10
10
  link: null,
11
+ deliveryWaiting: [],
11
12
  deliveryUnknown: [],
12
13
  };
13
14
  export const FACTS = [
@@ -18,6 +19,7 @@ export const FACTS = [
18
19
  'starting',
19
20
  'state',
20
21
  'link',
22
+ 'deliveryWaiting',
21
23
  'deliveryUnknown',
22
24
  ];
23
25
  // A row is read at a glance and each telling clones the list to every observing tab, while a running line changes at each Kit flush.
@@ -61,6 +63,8 @@ function sharedView(conversation, asked) {
61
63
  window: null,
62
64
  draft: null,
63
65
  ended: null,
66
+ dismissed: null,
67
+ pins: [],
64
68
  more: false,
65
69
  total: null,
66
70
  }),
@@ -91,13 +95,15 @@ export function createLiveConversations(deps) {
91
95
  const closing = new AbortController();
92
96
  const listeners = createAudience();
93
97
  const agentListeners = createAudience();
98
+ const listedListeners = createAudience();
94
99
  const held = createCell({
95
100
  listKnown: false,
101
+ openingRead: false,
102
+ openingListed: false,
96
103
  listOwed: false,
97
104
  listTelling: false,
98
105
  agentsShown: null,
99
- listedAgents: null,
100
- agentsReading: false,
106
+ listedShown: null,
101
107
  replicated: new Set(),
102
108
  handedReplicated: undefined,
103
109
  });
@@ -110,6 +116,7 @@ export function createLiveConversations(deps) {
110
116
  closing: closing.signal,
111
117
  listeners,
112
118
  agentListeners,
119
+ listedListeners,
113
120
  views: () => views.values(),
114
121
  viewJoined(key, conversation, asked, notify) {
115
122
  const view = views.get(key) ?? sharedView(conversation, asked);
@@ -158,10 +165,10 @@ export function createLiveConversations(deps) {
158
165
  behind.add(conversation);
159
166
  },
160
167
  generation: (conversation) => gaps.get(conversation) ?? 0,
161
- heardAt(conversation, position) {
168
+ heardAt(conversation, change) {
162
169
  const heard = heardNewest.get(conversation);
163
- if (heard === undefined || position > heard)
164
- heardNewest.set(conversation, position);
170
+ if (heard === undefined || change > heard)
171
+ heardNewest.set(conversation, change);
165
172
  },
166
173
  newestHeard: (conversation) => heardNewest.get(conversation),
167
174
  catching: (conversation) => catching.get(conversation),
@@ -181,14 +188,16 @@ export function createLiveConversations(deps) {
181
188
  isCreating: (conversation) => creations.has(conversation),
182
189
  relisting: () => relisting !== null,
183
190
  relistBegun() {
184
- relisting ??= new Map();
191
+ relisting ??= { conversations: new Map(), agents: new Map() };
185
192
  },
186
- relistHeard(entries) {
193
+ relistHeard(entries, agents) {
187
194
  for (const entry of entries)
188
- relisting?.set(entry.conversation, { ...entry });
195
+ relisting?.conversations.set(entry.conversation, { ...entry });
196
+ for (const agent of agents)
197
+ relisting?.agents.set(agent.id, { ...agent });
189
198
  },
190
199
  relistDropped(conversation) {
191
- relisting?.delete(conversation);
200
+ relisting?.conversations.delete(conversation);
192
201
  },
193
202
  relistTaken() {
194
203
  const whole = relisting;
@@ -223,8 +232,10 @@ export function createLiveConversations(deps) {
223
232
  },
224
233
  current: () => behind.size === 0,
225
234
  known: () => held.now().listKnown,
235
+ listed: () => deps.stream() === undefined || held.now().openingListed,
226
236
  reopened() {
227
237
  relisting = null;
238
+ held.set({ openingRead: false, openingListed: false });
228
239
  for (const [operation, dispatch] of sending)
229
240
  if (!dispatch.now().answered)
230
241
  sending.delete(operation);
@@ -242,6 +253,7 @@ export function createLiveConversations(deps) {
242
253
  unsent.clear();
243
254
  listeners.clear();
244
255
  agentListeners.clear();
256
+ listedListeners.clear();
245
257
  },
246
258
  };
247
259
  }
@@ -22,6 +22,8 @@ export type ConversationAsk = {
22
22
  };
23
23
  export type ConversationHeld = {
24
24
  readonly last: ConversationLast | null;
25
+ readonly answered: string | null;
26
+ readonly opened: string | null;
25
27
  readonly failure: string | null;
26
28
  readonly startedBy: ConversationStart | null;
27
29
  readonly asks: ConversationAsk | null;
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-row.d.ts","sourceRoot":"","sources":["../src/conversation-row.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IACzC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAA;CAAE,CAAC,CAAC;AAE/F,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;CACvC,CAAC;AAiDF,wBAAgB,SAAS,CACvB,IAAI,EAAE,OAAO,GAAG,SAAS,EACzB,MAAM,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACrE,gBAAgB,CAQlB"}
1
+ {"version":3,"file":"conversation-row.d.ts","sourceRoot":"","sources":["../src/conversation-row.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IACzC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAA;CAAE,CAAC,CAAC;AAE/F,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;CACvC,CAAC;AAiDF,wBAAgB,SAAS,CACvB,IAAI,EAAE,OAAO,GAAG,SAAS,EACzB,MAAM,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACrE,gBAAgB,CAUlB"}
@@ -46,6 +46,8 @@ export function heldFacts(held, listed) {
46
46
  const startedBy = startOf(held?.opened ?? null);
47
47
  return {
48
48
  last: lastOf(held?.said ?? null),
49
+ answered: held?.answered ?? null,
50
+ opened: held?.openedTurn ?? null,
49
51
  failure: listed.outcome === 'failed' ? (held?.failure ?? null) : null,
50
52
  startedBy,
51
53
  asks: asksOf(held?.asking ?? null, startedBy, listed.waiting),