@agentshouse/mdruntime 0.1.0-c0136de3edfbe → 0.1.0-c014edb0e9d9b

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 (228) hide show
  1. package/README.md +8 -8
  2. package/dist/acceptance.d.ts +0 -3
  3. package/dist/acceptance.d.ts.map +1 -1
  4. package/dist/acceptance.js +74 -145
  5. package/dist/act-lanes.d.ts +33 -0
  6. package/dist/act-lanes.d.ts.map +1 -0
  7. package/dist/act-lanes.js +177 -0
  8. package/dist/actions.d.ts +7 -2
  9. package/dist/actions.d.ts.map +1 -1
  10. package/dist/actions.js +44 -31
  11. package/dist/adapter.d.ts +30 -44
  12. package/dist/adapter.d.ts.map +1 -1
  13. package/dist/bootstrap.d.ts +1 -1
  14. package/dist/bootstrap.d.ts.map +1 -1
  15. package/dist/bootstrap.js +6 -18
  16. package/dist/change-set.d.ts +4 -0
  17. package/dist/change-set.d.ts.map +1 -1
  18. package/dist/change-set.js +6 -0
  19. package/dist/change.d.ts.map +1 -1
  20. package/dist/change.js +4 -2
  21. package/dist/chat-types.d.ts +2 -0
  22. package/dist/chat-types.d.ts.map +1 -1
  23. package/dist/chat-types.js +11 -0
  24. package/dist/client.d.ts +9 -12
  25. package/dist/client.d.ts.map +1 -1
  26. package/dist/client.js +29 -14
  27. package/dist/collection.d.ts +22 -4
  28. package/dist/collection.d.ts.map +1 -1
  29. package/dist/collection.js +12 -2
  30. package/dist/compile.d.ts.map +1 -1
  31. package/dist/compile.js +15 -21
  32. package/dist/connection.d.ts.map +1 -1
  33. package/dist/connection.js +30 -17
  34. package/dist/conversation-live.d.ts +138 -0
  35. package/dist/conversation-live.d.ts.map +1 -0
  36. package/dist/conversation-live.js +249 -0
  37. package/dist/conversation-row.d.ts.map +1 -1
  38. package/dist/conversation-row.js +7 -1
  39. package/dist/conversation.d.ts +44 -44
  40. package/dist/conversation.d.ts.map +1 -1
  41. package/dist/conversation.js +904 -1024
  42. package/dist/declaration.d.ts +10 -0
  43. package/dist/declaration.d.ts.map +1 -0
  44. package/dist/declaration.js +24 -0
  45. package/dist/discovery.d.ts.map +1 -1
  46. package/dist/discovery.js +18 -40
  47. package/dist/durability.d.ts +12 -0
  48. package/dist/durability.d.ts.map +1 -1
  49. package/dist/expectation.d.ts +4 -2
  50. package/dist/expectation.d.ts.map +1 -1
  51. package/dist/expectation.js +33 -11
  52. package/dist/failure.d.ts +3 -0
  53. package/dist/failure.d.ts.map +1 -1
  54. package/dist/failure.js +6 -0
  55. package/dist/figures.d.ts +1 -0
  56. package/dist/figures.d.ts.map +1 -1
  57. package/dist/figures.js +2 -2
  58. package/dist/holdings.d.ts +29 -0
  59. package/dist/holdings.d.ts.map +1 -0
  60. package/dist/holdings.js +95 -0
  61. package/dist/host.d.ts +17 -2
  62. package/dist/host.d.ts.map +1 -1
  63. package/dist/host.js +38 -8
  64. package/dist/index.d.ts +13 -6
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +9 -3
  67. package/dist/install.d.ts +1 -3
  68. package/dist/install.d.ts.map +1 -1
  69. package/dist/install.js +49 -70
  70. package/dist/lifecycle.d.ts +1 -1
  71. package/dist/lifecycle.d.ts.map +1 -1
  72. package/dist/lifecycle.js +42 -30
  73. package/dist/listing.d.ts +6 -11
  74. package/dist/listing.d.ts.map +1 -1
  75. package/dist/listing.js +25 -61
  76. package/dist/live.d.ts.map +1 -1
  77. package/dist/live.js +3 -3
  78. package/dist/locks.d.ts +2 -4
  79. package/dist/locks.d.ts.map +1 -1
  80. package/dist/locks.js +10 -38
  81. package/dist/lost.d.ts.map +1 -1
  82. package/dist/lost.js +10 -21
  83. package/dist/media.d.ts +1 -1
  84. package/dist/media.d.ts.map +1 -1
  85. package/dist/media.js +4 -4
  86. package/dist/memory.d.ts +4 -2
  87. package/dist/memory.d.ts.map +1 -1
  88. package/dist/memory.js +38 -20
  89. package/dist/messages.d.ts +1 -4
  90. package/dist/messages.d.ts.map +1 -1
  91. package/dist/messages.js +14 -32
  92. package/dist/model.d.ts +0 -1
  93. package/dist/model.d.ts.map +1 -1
  94. package/dist/model.js +0 -5
  95. package/dist/models.d.ts +4 -8
  96. package/dist/models.d.ts.map +1 -1
  97. package/dist/models.js +97 -134
  98. package/dist/observation.d.ts.map +1 -1
  99. package/dist/observation.js +12 -17
  100. package/dist/opened.d.ts +1 -1
  101. package/dist/opened.d.ts.map +1 -1
  102. package/dist/opened.js +5 -5
  103. package/dist/opening.d.ts.map +1 -1
  104. package/dist/opening.js +8 -5
  105. package/dist/outcome.d.ts +6 -1
  106. package/dist/outcome.d.ts.map +1 -1
  107. package/dist/outcome.js +15 -0
  108. package/dist/overlay.d.ts +2 -1
  109. package/dist/overlay.d.ts.map +1 -1
  110. package/dist/overlay.js +32 -21
  111. package/dist/page-metadata.d.ts +8 -0
  112. package/dist/page-metadata.d.ts.map +1 -0
  113. package/dist/page-metadata.js +19 -0
  114. package/dist/parts.d.ts +3 -51
  115. package/dist/parts.d.ts.map +1 -1
  116. package/dist/parts.js +14 -111
  117. package/dist/paths.d.ts +1 -0
  118. package/dist/paths.d.ts.map +1 -1
  119. package/dist/paths.js +22 -0
  120. package/dist/preparation.d.ts.map +1 -1
  121. package/dist/preparation.js +22 -15
  122. package/dist/presence.d.ts +52 -0
  123. package/dist/presence.d.ts.map +1 -0
  124. package/dist/presence.js +220 -0
  125. package/dist/queries.d.ts +1 -1
  126. package/dist/queries.d.ts.map +1 -1
  127. package/dist/queries.js +5 -7
  128. package/dist/query.d.ts +0 -1
  129. package/dist/query.d.ts.map +1 -1
  130. package/dist/questions.d.ts +2 -0
  131. package/dist/questions.d.ts.map +1 -1
  132. package/dist/questions.js +5 -1
  133. package/dist/queue.d.ts +40 -0
  134. package/dist/queue.d.ts.map +1 -0
  135. package/dist/queue.js +455 -0
  136. package/dist/reach.d.ts.map +1 -1
  137. package/dist/reach.js +28 -9
  138. package/dist/react.d.ts +15 -0
  139. package/dist/react.d.ts.map +1 -1
  140. package/dist/react.js +15 -1
  141. package/dist/readiness.d.ts +0 -1
  142. package/dist/readiness.d.ts.map +1 -1
  143. package/dist/reads.d.ts +4 -1
  144. package/dist/reads.d.ts.map +1 -1
  145. package/dist/reads.js +47 -5
  146. package/dist/refresh.js +2 -2
  147. package/dist/refusal.d.ts.map +1 -1
  148. package/dist/refusal.js +5 -4
  149. package/dist/replica.d.ts +5 -10
  150. package/dist/replica.d.ts.map +1 -1
  151. package/dist/replica.js +15 -16
  152. package/dist/retried.d.ts +30 -0
  153. package/dist/retried.d.ts.map +1 -0
  154. package/dist/retried.js +72 -0
  155. package/dist/room-draft.d.ts +4 -6
  156. package/dist/room-draft.d.ts.map +1 -1
  157. package/dist/room-draft.js +36 -52
  158. package/dist/room-drafts.d.ts.map +1 -1
  159. package/dist/room-drafts.js +17 -16
  160. package/dist/rows.d.ts.map +1 -1
  161. package/dist/rows.js +3 -4
  162. package/dist/runtime.d.ts +11 -17
  163. package/dist/runtime.d.ts.map +1 -1
  164. package/dist/save.d.ts +41 -86
  165. package/dist/save.d.ts.map +1 -1
  166. package/dist/save.js +232 -112
  167. package/dist/saves.d.ts +2 -40
  168. package/dist/saves.d.ts.map +1 -1
  169. package/dist/saves.js +107 -698
  170. package/dist/seed.d.ts.map +1 -1
  171. package/dist/seed.js +2 -3
  172. package/dist/shared.d.ts +1 -6
  173. package/dist/shared.d.ts.map +1 -1
  174. package/dist/shared.js +13 -95
  175. package/dist/shown.d.ts +4 -3
  176. package/dist/shown.d.ts.map +1 -1
  177. package/dist/shown.js +29 -33
  178. package/dist/socket/lanes.d.ts +2 -1
  179. package/dist/socket/lanes.d.ts.map +1 -1
  180. package/dist/socket/lanes.js +5 -2
  181. package/dist/socket/session.d.ts +0 -1
  182. package/dist/socket/session.d.ts.map +1 -1
  183. package/dist/socket.d.ts +2 -4
  184. package/dist/socket.d.ts.map +1 -1
  185. package/dist/socket.js +4 -8
  186. package/dist/source.d.ts.map +1 -1
  187. package/dist/source.js +5 -4
  188. package/dist/store/records.d.ts +4 -4
  189. package/dist/store/records.d.ts.map +1 -1
  190. package/dist/store/records.js +33 -11
  191. package/dist/store/space.d.ts +1 -1
  192. package/dist/store/space.d.ts.map +1 -1
  193. package/dist/store/space.js +0 -2
  194. package/dist/store/watchers.js +1 -2
  195. package/dist/store.d.ts +11 -6
  196. package/dist/store.d.ts.map +1 -1
  197. package/dist/store.js +38 -13
  198. package/dist/stored.d.ts +1 -1
  199. package/dist/stored.d.ts.map +1 -1
  200. package/dist/stored.js +22 -10
  201. package/dist/surface.d.ts +4 -2
  202. package/dist/surface.d.ts.map +1 -1
  203. package/dist/surface.js +20 -14
  204. package/dist/sync.d.ts +0 -1
  205. package/dist/sync.d.ts.map +1 -1
  206. package/dist/sync.js +91 -82
  207. package/dist/tables.d.ts +13 -8
  208. package/dist/tables.d.ts.map +1 -1
  209. package/dist/tables.js +25 -12
  210. package/dist/tallies.js +5 -5
  211. package/dist/validation.d.ts.map +1 -1
  212. package/dist/validation.js +2 -2
  213. package/dist/wire.d.ts +41 -4
  214. package/dist/wire.d.ts.map +1 -1
  215. package/dist/wire.js +13 -3
  216. package/package.json +3 -2
  217. package/dist/attempt.d.ts +0 -16
  218. package/dist/attempt.d.ts.map +0 -1
  219. package/dist/attempt.js +0 -70
  220. package/dist/job.d.ts +0 -33
  221. package/dist/job.d.ts.map +0 -1
  222. package/dist/job.js +0 -54
  223. package/dist/socket/rooms.d.ts +0 -43
  224. package/dist/socket/rooms.d.ts.map +0 -1
  225. package/dist/socket/rooms.js +0 -90
  226. package/dist/store/fences.d.ts +0 -16
  227. package/dist/store/fences.d.ts.map +0 -1
  228. package/dist/store/fences.js +0 -26
package/dist/surface.js CHANGED
@@ -1,9 +1,12 @@
1
1
  import { called, located, readHistory, resolveReference } from './actions.js';
2
+ import { chatDraftSurface, conversationSurface, watchConversation, watchConversationAgents, watchConversationList, } from './conversation.js';
3
+ import { uncaught } from './failure.js';
4
+ import { CLEANED_TOPIC, watchHoldings } from './holdings.js';
2
5
  import { reachedBy, writtenAfter } from './install.js';
3
6
  import { declarationOf, listingNow, modelIn, shownRooms } from './listing.js';
4
7
  import { stop } from './lifecycle.js';
5
8
  import { locked, lockedRooms, watchLocks } from './locks.js';
6
- import { modelTypes, NO_MODEL } from './model.js';
9
+ import { modelTypes } from './model.js';
7
10
  import { observing } from './observation.js';
8
11
  import { watchReadiness } from './preparation.js';
9
12
  import { planned, rowsQuery, searched, watchPlan, watchPlanned } from './queries.js';
@@ -36,7 +39,7 @@ function watchMember({ store }, deliver) {
36
39
  .then(({ member }) => {
37
40
  if (watcher.held())
38
41
  deliver(member);
39
- }, () => { });
42
+ }, uncaught);
40
43
  return watcher.stop;
41
44
  }
42
45
  function watchQueue(runtime, locator, deliver) {
@@ -58,14 +61,16 @@ function watching(runtime) {
58
61
  if (topic === 'room-drafts')
59
62
  return watchRoomDrafts(runtime, deliver);
60
63
  if (topic === 'conversation') {
61
- return conversations.watch(input[0], input[1], deliver);
64
+ return watchConversation(conversations, input[0], input[1], deliver);
62
65
  }
63
66
  if (topic === 'conversations')
64
- return conversations.watchList(deliver);
67
+ return watchConversationList(conversations, deliver);
65
68
  if (topic === 'agents')
66
- return conversations.watchAgents(deliver);
69
+ return watchConversationAgents(conversations, deliver);
67
70
  if (topic === 'figures')
68
71
  return figures.watch(deliver, fail);
72
+ if (topic === 'holdings')
73
+ return watchHoldings(runtime, deliver, fail);
69
74
  if (topic === 'read')
70
75
  return lastAnswers.watch(input[0], input[1], deliver);
71
76
  if (topic === 'presentation')
@@ -112,10 +117,9 @@ function roomsOnce(runtime) {
112
117
  async function typesOf(runtime, locator) {
113
118
  const { store, builtIn } = runtime;
114
119
  const held = (await store.rooms([locator])).get(locator);
115
- const fenced = store.fences.has(locator);
116
- const room = fenced ? undefined : declarationOf(runtime, locator, held)?.room;
120
+ const room = declarationOf(runtime, locator, held)?.room;
117
121
  return {
118
- collection: modelTypes(fenced ? NO_MODEL : modelIn(runtime, locator, held)),
122
+ collection: modelTypes(modelIn(runtime, locator, held)),
119
123
  typedSelection: (room?.typedSelection ?? null) === null ? null : modelTypes(builtIn),
120
124
  };
121
125
  }
@@ -142,11 +146,11 @@ function mdRuntime(runtime, watch) {
142
146
  search: (input) => searched(runtime, input, null),
143
147
  types: (locator) => typesOf(runtime, locator),
144
148
  roomDraft: roomDraftSurface(runtime),
145
- conversation: conversations.surface,
146
- chatDraft: conversations.chatDraft,
149
+ conversation: conversationSurface(conversations),
150
+ chatDraft: chatDraftSurface(conversations),
147
151
  presentation: presentationSurface(runtime),
148
- save: (room, named, writtenBy) => store.exclusive(() => saveRoomDrafts(runtime, room, named, writtenBy)),
149
- saveParts: (room, parts, writtenBy) => store.exclusive(() => saveParts(runtime, room, parts, writtenBy)),
152
+ save: (room, named, writtenBy) => saveRoomDrafts(runtime, room, named, writtenBy),
153
+ saveParts: (room, parts, writtenBy) => saveParts(runtime, room, parts, writtenBy),
150
154
  history: (locator, path, query) => readHistory(runtime, locator, path, query),
151
155
  resolve: (room, path, destination) => resolveReference(runtime, room, path, destination),
152
156
  binaryFile: binaryFileSurface(runtime),
@@ -159,7 +163,9 @@ function mdRuntime(runtime, watch) {
159
163
  log: () => journal.export(),
160
164
  async cleanUp() {
161
165
  const freed = await store.ask({ kind: 'opened.clean' });
162
- return freed + ((await shell.cleanUp?.()) ?? 0);
166
+ const tidied = (await shell.cleanUp?.()) ?? 0;
167
+ store.tell(CLEANED_TOPIC, undefined);
168
+ return freed + tidied;
163
169
  },
164
170
  unsent: () => store.ask({ kind: 'authored.unsent' }),
165
171
  reset: () => shell.reset(),
@@ -169,7 +175,7 @@ function mdRuntime(runtime, watch) {
169
175
  persistence: () => store.device.now().persistence === 'granted',
170
176
  async retry() {
171
177
  journal.record('retry');
172
- socket.rooms.standAll({ unpreparable: false });
178
+ store.prepareAgain();
173
179
  store.readiness.queue();
174
180
  if (store.space.full())
175
181
  await store.space.probe();
package/dist/sync.d.ts CHANGED
@@ -8,7 +8,6 @@ export type Attempt = 'opened' | 'unstreamed' | 'authorized';
8
8
  export declare const OPENING_LANE = "opening";
9
9
  export declare function advanced(runtime: Runtime, room: DiscoveredRoom, local: RuntimeStore, authorized: Authorization): Promise<Withheld | null>;
10
10
  export declare function withhold(runtime: Runtime, withheld: Withheld, room: DiscoveredRoom, local: RuntimeStore, progress: CycleProgress): Promise<void>;
11
- export declare function synchronize(runtime: Runtime, listed: readonly DiscoveredRoom[], local: RuntimeStore, progress: CycleProgress, attempt: Attempt, live: Live): Promise<void>;
12
11
  export declare function loadRoom(runtime: Runtime, room: DiscoveredRoom, local: RuntimeStore, progress: CycleProgress, live: Live, unheld?: Unheld): Promise<void>;
13
12
  export declare function reload(runtime: Runtime, room: DiscoveredRoom, local: RuntimeStore, progress: CycleProgress, live: Live): Promise<void>;
14
13
  export declare function finishOpening(runtime: Runtime, progress: CycleProgress, live: Live): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,cAAc,EACd,SAAS,EACT,UAAU,EACX,MAAM,cAAc,CAAC;AAKtB,OAAO,EASL,KAAK,MAAM,EACX,KAAK,QAAQ,EACd,MAAM,cAAc,CAAC;AAOtB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,YAAY,CAAC;AAG5D,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,YAAY,CAAC;AAE7D,eAAO,MAAM,YAAY,YAAY,CAAC;AA4FtC,wBAAgB,QAAQ,CACtB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,aAAa,GACxB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAI1B;AAED,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAyDD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,SAAS,cAAc,EAAE,EACjC,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,iBAkCX;AAiBD,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,IAAI,EACV,MAAM,CAAC,EAAE,MAAM,iBAmBhB;AAED,wBAAsB,MAAM,CAC1B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,IAAI,iBA0BX;AAuDD,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,iBAgCxF;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC/F;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB7D;AAED,wBAAgB,oBAAoB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO,QAK3E;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BxF;AAyDD,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAyD7E"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,cAAc,EACd,SAAS,EACT,UAAU,EACX,MAAM,cAAc,CAAC;AAUtB,OAAO,EASL,KAAK,MAAM,EACX,KAAK,QAAQ,EACd,MAAM,cAAc,CAAC;AAQtB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAU5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,YAAY,CAAC;AAG5D,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,YAAY,CAAC;AAE7D,eAAO,MAAM,YAAY,YAAY,CAAC;AA2FtC,wBAAgB,QAAQ,CACtB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,aAAa,GACxB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAI1B;AAED,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,IAAI,CAAC,CAiCf;AA4GD,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,IAAI,EACV,MAAM,CAAC,EAAE,MAAM,iBAmBhB;AAED,wBAAsB,MAAM,CAC1B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,IAAI,iBA0BX;AAsDD,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,iBA8BxF;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAwC/F;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB7D;AAED,wBAAgB,oBAAoB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO,QAK3E;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BxF;AAyDD,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA4D7E"}
package/dist/sync.js CHANGED
@@ -1,21 +1,25 @@
1
- import { submitAll, submitLater } from './acceptance.js';
2
1
  import { resendCalls, resendLater } from './actions.js';
2
+ import { catchUpConversations, reconcileConversations, resendConversations, } from './conversation.js';
3
+ import { declared, sameDeclaration } from './declaration.js';
3
4
  import { applyDiscovery, discoverRooms, malformed, signIn } from './discovery.js';
4
5
  import { behind, caughtUpTo, publish, pullBootstrap, pullRefresh, reachedBy, replaced, standingAt, } from './install.js';
5
- import { heldRooms, listHeld, name, readable } from './listing.js';
6
- import { declaredAsHeld, keepNaming, retainModel, revoked, scoped } from './models.js';
6
+ import { heldRooms, name } from './listing.js';
7
+ import { retainModel, revoked, scoped } from './models.js';
8
+ import { refusalError } from './failure.js';
7
9
  import { refuse } from './refusal.js';
8
- import { emitRooms, moveTo, rest, roomUnreadable, transferring, AUTHORITY_TOPIC } from './shown.js';
10
+ import { emitRooms, moveTo, rest, roomUnreadable, submissionDue, transferring, AUTHORITY_TOPIC, } from './shown.js';
9
11
  import { unconfirmed } from './transfer.js';
10
12
  export const OPENING_LANE = 'opening';
13
+ const FINISHING = 'finishing';
11
14
  async function advance(runtime, room, local, authorized, running, unheld) {
12
- const { store, socket } = runtime;
15
+ const { store, socket, presence } = runtime;
13
16
  const live = () => running() && !store.space.full();
14
17
  if (!live())
15
18
  return unconfirmed;
16
19
  const held = unheld === undefined ? await store.record(room.locator) : undefined;
17
20
  if (socket.streamed && (held !== undefined || !store.installs.of(room.locator).beyondHorizon)) {
18
- socket.rooms.stand(room.locator, { stale: false });
21
+ presence.stood(room.locator, false);
22
+ runtime.retries.succeeded('download', room.locator);
19
23
  await name(runtime, room.locator);
20
24
  return null;
21
25
  }
@@ -26,7 +30,7 @@ async function advance(runtime, room, local, authorized, running, unheld) {
26
30
  return advance(runtime, room, local, authorized, live);
27
31
  if (refreshed !== 'beyond-horizon')
28
32
  return refreshed;
29
- if (socket.rooms.standing(room.locator).reloadDue)
33
+ if (presence.standing(room.locator).reloadDue)
30
34
  return unconfirmed;
31
35
  replaced(store, [room.locator]);
32
36
  }
@@ -44,18 +48,15 @@ async function advance(runtime, room, local, authorized, running, unheld) {
44
48
  : advance(runtime, room, local, authorized, live);
45
49
  }
46
50
  async function refreshedRoom(runtime, room, local, authorized, held, live, hold, refresh) {
47
- const { store, socket } = runtime;
48
- const { rooms } = socket;
51
+ const { store, socket, presence } = runtime;
49
52
  const refreshed = await pullRefresh(runtime, authorized, held, live, hold, refresh);
50
53
  if (!live())
51
54
  return unconfirmed;
52
55
  if (refreshed.kind === 'still-current') {
53
- rooms.stand(room.locator, { stale: false });
54
- if (rooms.standing(room.locator).unreadable) {
55
- rooms.stand(room.locator, { refusal: null });
56
- readable(runtime, room);
56
+ presence.stood(room.locator, false);
57
+ runtime.retries.succeeded('download', room.locator);
58
+ if (presence.readable(room.locator))
57
59
  emitRooms(runtime);
58
- }
59
60
  return null;
60
61
  }
61
62
  if (refreshed.kind === 'advanced') {
@@ -69,7 +70,7 @@ async function refreshedRoom(runtime, room, local, authorized, held, live, hold,
69
70
  const reached = now !== undefined && socket.reads.reached(room.locator, now, refreshed.record.roomVersion);
70
71
  return reached ? null : 'behind';
71
72
  }
72
- await retainModel(runtime, local, room, null);
73
+ await retainModel(runtime, room.locator, declared(room), null);
73
74
  return null;
74
75
  }
75
76
  return refreshed.kind === 'beyond-horizon' ? 'beyond-horizon' : refreshed;
@@ -78,25 +79,29 @@ export function advanced(runtime, room, local, authorized) {
78
79
  return runtime.socket.lanes.inRoom(room.locator, (live) => advance(runtime, room, local, authorized, live));
79
80
  }
80
81
  export async function withhold(runtime, withheld, room, local, progress) {
81
- const { store, socket, journal } = runtime;
82
- const { rooms } = socket;
83
- if (withheld.kind === 'unconfirmed' || store.fences.has(room.locator))
82
+ const { presence, journal } = runtime;
83
+ if (withheld.kind === 'unconfirmed' || presence.lost(room.locator))
84
84
  return;
85
85
  if (withheld.kind === 'not-ready') {
86
86
  progress.complete = false;
87
87
  askAgain(runtime, room.locator);
88
88
  return;
89
89
  }
90
- rooms.stand(room.locator, { stale: true });
90
+ if (withheld.kind === 'transport-uncertainty') {
91
+ runtime.retries.uncertain('download', room.locator, withheld);
92
+ }
93
+ else if (withheld.kind === 'retryable-refusal') {
94
+ runtime.retries.failed('download', room.locator, refusalError(withheld));
95
+ }
91
96
  if (withheld.kind === 'transport-uncertainty' || withheld.kind === 'retryable-refusal') {
92
97
  const reset = withheld.kind === 'retryable-refusal' ? withheld.reset : undefined;
93
- rooms.stand(room.locator, { repairable: { reset } });
98
+ presence.stood(room.locator, true, { reset });
94
99
  repairLater(runtime, room.locator, reset === undefined ? { again: true } : { at: Date.parse(reset) });
95
100
  }
96
101
  else
97
- rooms.stand(room.locator, { repairable: null });
102
+ presence.stood(room.locator, true, null);
98
103
  if (withheld.kind === 'scoped-refusal') {
99
- await scoped(runtime, withheld, room, local);
104
+ await scoped(runtime, withheld, room.locator, declared(room));
100
105
  }
101
106
  else if (withheld.kind === 'transport-uncertainty') {
102
107
  progress.reachable = false;
@@ -105,16 +110,16 @@ export async function withhold(runtime, withheld, room, local, progress) {
105
110
  journal.record(`refusal ${withheld.kind} ${withheld.code}`);
106
111
  }
107
112
  else if (withheld.kind === 'room-not-readable') {
108
- roomUnreadable(runtime, room);
113
+ roomUnreadable(runtime, room.locator);
109
114
  }
110
115
  else if (withheld.kind === 'revoked-authorization') {
111
116
  await refuse(runtime, 'revoked-authorization');
112
117
  }
113
118
  }
114
119
  function askAgain(runtime, locator) {
115
- const { store, socket } = runtime;
116
- socket.rooms.askAgain(locator, () => {
117
- const room = socket.rooms.discovered(locator);
120
+ const { store, socket, presence } = runtime;
121
+ presence.askAgain(locator, () => {
122
+ const room = presence.room(locator);
118
123
  if (socket.closed() ||
119
124
  socket.stopping() ||
120
125
  (socket.streamed && !socket.isOpen()) ||
@@ -127,50 +132,47 @@ function askAgain(runtime, locator) {
127
132
  .then(() => rest(runtime, progress), () => undefined);
128
133
  });
129
134
  }
130
- async function prepareRoom(runtime, room, local, progress, prior) {
135
+ async function prepareRoom(runtime, room, progress, prior) {
131
136
  const { socket, journal } = runtime;
132
137
  const { session } = socket;
133
138
  if (socket.closed() || session.now().authorization === undefined) {
134
139
  progress.complete = false;
135
140
  return false;
136
141
  }
137
- if (prior !== undefined && prior.replica.selection !== room.replica.selection) {
138
- listHeld(runtime, room.locator);
142
+ if (prior !== undefined && prior.declaration.replica.selection !== room.replica.selection) {
139
143
  emitRooms(runtime);
140
144
  journal.record(`selection changed ${room.locator}`);
141
145
  progress.complete = false;
142
146
  return false;
143
147
  }
144
- if (prior !== undefined && !declaredAsHeld(prior, room)) {
145
- await retainModel(runtime, local, room, null);
146
- }
147
- if (prior !== undefined && (prior.name !== room.name || prior.handle !== room.handle)) {
148
- await keepNaming(runtime, local, room);
148
+ const declaration = declared(room);
149
+ if (prior !== undefined && !sameDeclaration(prior.declaration, declaration)) {
150
+ await retainModel(runtime, room.locator, declaration, null);
149
151
  }
150
152
  const { paused, authorization } = session.now();
151
153
  if (paused || authorization === undefined)
152
154
  return false;
153
155
  return room.replica.admission === 'admitted';
154
156
  }
155
- export async function synchronize(runtime, listed, local, progress, attempt, live) {
157
+ async function synchronize(runtime, listed, local, progress, attempt, live) {
156
158
  const { store, socket } = runtime;
157
159
  const heldNow = await store.rooms(listed.map(({ locator }) => locator));
158
- const prepared = await Promise.allSettled(listed.map((room) => prepareRoom(runtime, room, local, progress, heldNow.get(room.locator)?.record)));
160
+ const prepared = await Promise.allSettled(listed.map((room) => prepareRoom(runtime, room, progress, heldNow.get(room.locator)?.record)));
159
161
  if (!live())
160
162
  return;
161
163
  const ready = listed.filter((_, index) => {
162
164
  const outcome = prepared[index];
163
- return outcome?.status === 'fulfilled' && outcome.value;
165
+ return outcome.status === 'fulfilled' && outcome.value;
164
166
  });
165
- const held = await heldRooms(runtime, ready);
166
- if (!live())
167
- return;
168
167
  if (attempt === 'opened') {
168
+ const held = await heldRooms(runtime, ready);
169
+ if (!live())
170
+ return;
169
171
  socket.hand(held);
170
172
  }
171
- const kept = attempt === 'unstreamed'
172
- ? new Set()
173
- : new Set((await store.rooms(ready.map(({ locator }) => locator))).keys());
173
+ const kept = attempt === 'authorized'
174
+ ? new Set((await store.rooms(ready.map(({ locator }) => locator))).keys())
175
+ : new Set();
174
176
  for (const room of ready) {
175
177
  if (attempt === 'opened' || kept.has(room.locator)) {
176
178
  if (attempt === 'authorized')
@@ -203,7 +205,7 @@ export async function loadRoom(runtime, room, local, progress, live, unheld) {
203
205
  return;
204
206
  const prior = unheld === undefined ? await store.record(room.locator) : undefined;
205
207
  if (prior !== undefined) {
206
- if (!(await prepareRoom(runtime, room, local, progress, prior)))
208
+ if (!(await prepareRoom(runtime, room, progress, prior)))
207
209
  return;
208
210
  if (revoked(prior.model)) {
209
211
  await reload(runtime, room, local, progress, live);
@@ -218,10 +220,10 @@ export async function loadRoom(runtime, room, local, progress, live, unheld) {
218
220
  await caughtUp(runtime, room, local, progress, live);
219
221
  }
220
222
  export async function reload(runtime, room, local, progress, live) {
221
- const { store, socket } = runtime;
223
+ const { store, socket, presence } = runtime;
222
224
  try {
223
225
  if (live())
224
- socket.rooms.stand(room.locator, { reloadDue: false });
226
+ presence.reload(room.locator, false);
225
227
  const { authorization } = socket.session.now();
226
228
  if (!live() || authorization === undefined)
227
229
  return;
@@ -241,24 +243,23 @@ export async function reload(runtime, room, local, progress, live) {
241
243
  }
242
244
  }
243
245
  function repairLater(runtime, locator, when) {
244
- const { socket, recovery } = runtime;
245
- if (!socket.isOpen() || socket.rooms.standing(locator).repairing)
246
+ const { socket, presence, recovery } = runtime;
247
+ if (!socket.isOpen() || presence.standing(locator).repairing)
246
248
  return;
247
249
  void recovery.attempt(`repair ${locator}`, (signal) => repairPass(runtime, locator, signal), when);
248
250
  }
249
251
  async function repairPass(runtime, locator, signal) {
250
- const { store, socket } = runtime;
251
- const { rooms } = socket;
252
- const room = rooms.discovered(locator);
252
+ const { store, socket, presence } = runtime;
253
+ const room = presence.room(locator);
253
254
  if (!socket.isOpen() ||
254
255
  !socket.continuing() ||
255
256
  socket.stopping() ||
256
- !rooms.standing(locator).stale)
257
+ !presence.standing(locator).stale)
257
258
  return 'done';
258
259
  if (room === undefined || room.replica.admission !== 'admitted')
259
260
  return 'done';
260
261
  const progress = { complete: true, reachable: true };
261
- rooms.stand(locator, { repairing: true });
262
+ presence.repairing(locator, true);
262
263
  try {
263
264
  const local = await store.open();
264
265
  await socket.lanes.roomTask(locator, async (live) => {
@@ -271,41 +272,39 @@ async function repairPass(runtime, locator, signal) {
271
272
  });
272
273
  }
273
274
  catch {
274
- rooms.stand(locator, { stale: true });
275
+ presence.stood(locator, true);
275
276
  progress.reachable = false;
276
277
  }
277
278
  finally {
278
- rooms.stand(locator, { repairing: false });
279
+ presence.repairing(locator, false);
279
280
  }
280
281
  if (signal.aborted)
281
282
  return 'done';
282
283
  await rest(runtime, progress);
283
- if (!rooms.standing(locator).stale) {
284
- if ((await (await store.open()).order(locator)).length > 0)
285
- submitLater(runtime, locator);
284
+ if (!presence.standing(locator).stale) {
285
+ await submissionDue(runtime, [locator]);
286
286
  return 'done';
287
287
  }
288
- const { repairable } = rooms.standing(locator);
288
+ const { repairable } = presence.standing(locator);
289
289
  if (repairable === null)
290
290
  return 'done';
291
291
  return repairable.reset === undefined ? 'again' : { at: Date.parse(repairable.reset) };
292
292
  }
293
293
  export async function finishOpening(runtime, progress, live) {
294
- const { socket, conversations, recovery } = runtime;
294
+ const { socket, presence, conversations, recovery } = runtime;
295
295
  try {
296
296
  if (!live()) {
297
297
  progress.complete = false;
298
298
  return;
299
299
  }
300
- await submitAll(runtime);
301
- for (const locator of socket.rooms.standingWhere(({ stale, repairable }) => stale && repairable !== null)) {
300
+ await submissionDue(runtime);
301
+ for (const locator of presence.repairsOwed())
302
302
  repairLater(runtime, locator, {});
303
- }
304
- await conversations.reconcile();
303
+ await reconcileConversations(conversations);
305
304
  const reading = { complete: true, reachable: true };
306
- await conversations.catchUp(reading);
305
+ await catchUpConversations(conversations, reading);
307
306
  if (progress.reachable && reading.reachable)
308
- await conversations.resend(reading);
307
+ await resendConversations(conversations, reading);
309
308
  if (progress.reachable) {
310
309
  void recovery.attempt('calls', (signal) => resendCalls(runtime, signal));
311
310
  }
@@ -313,8 +312,10 @@ export async function finishOpening(runtime, progress, live) {
313
312
  progress.reachable = false;
314
313
  resendLater(runtime);
315
314
  }
315
+ runtime.retries.succeeded('conversations', FINISHING);
316
316
  }
317
- catch {
317
+ catch (error) {
318
+ runtime.retries.failed('conversations', FINISHING, error);
318
319
  progress.complete = false;
319
320
  }
320
321
  finally {
@@ -350,8 +351,10 @@ export function sync(runtime, attempt, found) {
350
351
  const listed = await discoverRooms(runtime, local, progress, live, found);
351
352
  if (listed !== null)
352
353
  await synchronize(runtime, listed, local, progress, attempt, live);
354
+ runtime.retries.succeeded('connection', OPENING_LANE);
353
355
  }
354
- catch {
356
+ catch (error) {
357
+ runtime.retries.failed('connection', OPENING_LANE, error);
355
358
  progress.complete = false;
356
359
  if (attempt === 'opened' && !socket.isHanded())
357
360
  progress.reachable = false;
@@ -372,7 +375,7 @@ export function sync(runtime, attempt, found) {
372
375
  });
373
376
  }
374
377
  export function resynchronize(runtime) {
375
- const { store, socket } = runtime;
378
+ const { store, socket, presence } = runtime;
376
379
  return socket.lanes.task(OPENING_LANE, async (live) => {
377
380
  if (!live() || !socket.isAnnounced())
378
381
  return;
@@ -382,9 +385,11 @@ export function resynchronize(runtime) {
382
385
  const local = await store.open();
383
386
  if (!live())
384
387
  return;
385
- await synchronize(runtime, socket.rooms.discoveredRooms(), local, progress, 'unstreamed', live);
388
+ await synchronize(runtime, presence.rooms(), local, progress, 'unstreamed', live);
389
+ runtime.retries.succeeded('download', OPENING_LANE);
386
390
  }
387
- catch {
391
+ catch (error) {
392
+ runtime.retries.failed('download', OPENING_LANE, error);
388
393
  progress.complete = false;
389
394
  }
390
395
  if (live())
@@ -422,8 +427,10 @@ export function changeAuthority(runtime, change) {
422
427
  session.set({ discoveries });
423
428
  const listed = await applyDiscovery(runtime, change.rooms, discoveries, change.left);
424
429
  await synchronize(runtime, listed, local, progress, 'authorized', live);
430
+ runtime.retries.succeeded('connection', OPENING_LANE);
425
431
  }
426
- catch {
432
+ catch (error) {
433
+ runtime.retries.failed('connection', OPENING_LANE, error);
427
434
  progress.complete = false;
428
435
  }
429
436
  if (!live())
@@ -468,8 +475,8 @@ async function installCarried(runtime, room, local, change, live, progress) {
468
475
  await publish(runtime, local, room, bootstrapped.record, { kind: 'bootstrapped', refreshed: bootstrapped.refreshed, from }, live);
469
476
  }
470
477
  export function applyRoom(runtime, change) {
471
- const { store, socket } = runtime;
472
- const { rooms, session } = socket;
478
+ const { store, socket, presence } = runtime;
479
+ const { session } = socket;
473
480
  const { locator } = change;
474
481
  if (socket.stopping())
475
482
  return Promise.resolve();
@@ -482,7 +489,7 @@ export function applyRoom(runtime, change) {
482
489
  for (;;) {
483
490
  if (!live())
484
491
  return null;
485
- const room = rooms.discovered(locator);
492
+ const room = presence.room(locator);
486
493
  if (room === undefined || room.replica.admission !== 'admitted')
487
494
  return null;
488
495
  const held = await store.record(locator);
@@ -492,7 +499,7 @@ export function applyRoom(runtime, change) {
492
499
  await installCarried(runtime, room, local, change, live, progress);
493
500
  return progress;
494
501
  }
495
- if (held.replica.selection !== room.replica.selection)
502
+ if (held.declaration.replica.selection !== room.replica.selection)
496
503
  return null;
497
504
  const at = held.roomVersion;
498
505
  if (socket.reads.reached(locator, at, change.roomVersion))
@@ -513,17 +520,19 @@ export function applyRoom(runtime, change) {
513
520
  remodelled: refreshed.remodelled,
514
521
  };
515
522
  if (await publish(runtime, local, room, refreshed.record, landing, writing)) {
516
- rooms.stand(locator, { stale: false });
517
- if (!declaredAsHeld(held, room))
518
- await retainModel(runtime, local, room, null);
523
+ presence.stood(locator, false);
524
+ const declaration = declared(room);
525
+ if (!sameDeclaration(held.declaration, declaration))
526
+ await retainModel(runtime, locator, declaration, null);
519
527
  return progress;
520
528
  }
521
529
  }
522
530
  }
523
- catch {
524
- if (!rooms.standing(locator).stale)
531
+ catch (error) {
532
+ runtime.retries.failed('download', locator, error);
533
+ if (!presence.standing(locator).stale)
525
534
  void name(runtime, locator);
526
- rooms.stand(locator, { stale: true });
535
+ presence.stood(locator, true);
527
536
  return progress;
528
537
  }
529
538
  })
package/dist/tables.d.ts CHANGED
@@ -1,9 +1,8 @@
1
1
  import { type QueryAnswer, type QueryRoom } from './compile.js';
2
2
  import type { Composed } from './collection.js';
3
3
  import type { UnsentWork } from './durability.js';
4
- import type { JobMarker } from './job.js';
5
4
  import { type ConversationWrite, type HeldConversation, type HeldRow, type MessageWindow } from './messages.js';
6
- import type { Plan } from './query.js';
5
+ import type { GroupTotal, Plan } from './query.js';
7
6
  import { type ReadAt } from './reads.js';
8
7
  import { type ConversationTally, type RoomTally } from './tallies.js';
9
8
  import { type Committed, type Covering, type HeldEntry, type HeldLocators, type HeldRoomRow, type HeldRoomWork, type ReplicaOpened, type Referrer, type Resumed, type RoomCommit, type StoredEntry, type TypedEntry, type View } from './stored.js';
@@ -53,7 +52,7 @@ export interface SqliteDatabase {
53
52
  export declare function sqliteConnection(engine: SqliteEngine, database: SqliteDatabase): Connection;
54
53
  export declare const FILE_PART_BYTES = 1048576;
55
54
  export declare const RUNTIME_TABLES: readonly string[];
56
- export type AuthoredFact = 'holder' | 'binding' | 'generation';
55
+ export type AuthoredFact = 'holder' | 'generation';
57
56
  export type StoredFile = {
58
57
  readonly key: string;
59
58
  readonly blob: Blob;
@@ -116,6 +115,13 @@ export type OpenedFile = {
116
115
  readonly byteLength: number;
117
116
  readonly mediaType: string;
118
117
  };
118
+ export type OpenedRoom = GroupTotal & {
119
+ readonly room: string;
120
+ };
121
+ export type OpenedHeld = {
122
+ readonly rooms: readonly OpenedRoom[];
123
+ readonly cleanable: number;
124
+ };
119
125
  type Asked<A, R> = {
120
126
  readonly asked: A;
121
127
  readonly answer: R;
@@ -242,7 +248,6 @@ export interface RuntimeRequests {
242
248
  }, readonly Referrer[]>;
243
249
  readonly 'replica.folders': Asked<{
244
250
  readonly key: number;
245
- readonly view: View;
246
251
  readonly paths: readonly string[];
247
252
  }, readonly string[]>;
248
253
  readonly 'replica.typedWithin': Asked<{
@@ -345,6 +350,7 @@ export interface RuntimeRequests {
345
350
  readonly key: string;
346
351
  }, null>;
347
352
  readonly 'opened.clean': Asked<Nothing, number>;
353
+ readonly 'opened.held': Asked<Nothing, OpenedHeld>;
348
354
  readonly 'file.part': Asked<{
349
355
  readonly key: string;
350
356
  readonly part: number;
@@ -370,9 +376,6 @@ export interface RuntimeRequests {
370
376
  readonly 'conversation.rows': Asked<{
371
377
  readonly conversations: readonly string[];
372
378
  }, readonly HeldRow[]>;
373
- readonly 'conversation.jobs': Asked<{
374
- readonly conversation: string;
375
- }, readonly JobMarker[]>;
376
379
  readonly 'conversation.tallies': Asked<{
377
380
  readonly conversations: readonly string[] | null;
378
381
  readonly since: string;
@@ -402,6 +405,8 @@ export interface RuntimeDatabase {
402
405
  export declare function isRuntime(request: {
403
406
  readonly kind: string;
404
407
  }): request is RuntimeRequest;
405
- export declare function readsRuntime(request: RuntimeRequest): boolean;
408
+ export declare function readsRuntime(request: {
409
+ readonly kind: string;
410
+ }): boolean;
406
411
  export declare function answerRuntime(connection: Connection, request: RuntimeRequest, spool: FileSpool): unknown;
407
412
  //# sourceMappingURL=tables.d.ts.map