@agentshouse/mdruntime 0.1.0-cd50a4607cb7d → 0.1.0-cd574a610e9c8

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 (401) hide show
  1. package/README.md +24 -19
  2. package/dist/acceptance.d.ts +3 -0
  3. package/dist/acceptance.d.ts.map +1 -0
  4. package/dist/acceptance.js +299 -0
  5. package/dist/act-lanes.d.ts +30 -0
  6. package/dist/act-lanes.d.ts.map +1 -0
  7. package/dist/act-lanes.js +225 -0
  8. package/dist/actions.d.ts +26 -0
  9. package/dist/actions.d.ts.map +1 -0
  10. package/dist/actions.js +302 -0
  11. package/dist/adapter.d.ts +226 -117
  12. package/dist/adapter.d.ts.map +1 -1
  13. package/dist/attached-model.d.ts +6 -10
  14. package/dist/attached-model.d.ts.map +1 -1
  15. package/dist/attached-model.js +35 -41
  16. package/dist/authored.d.ts +88 -0
  17. package/dist/authored.d.ts.map +1 -0
  18. package/dist/authored.js +345 -0
  19. package/dist/binary.d.ts +0 -5
  20. package/dist/binary.d.ts.map +1 -1
  21. package/dist/binary.js +1 -1
  22. package/dist/bootstrap.d.ts +31 -11
  23. package/dist/bootstrap.d.ts.map +1 -1
  24. package/dist/bootstrap.js +309 -109
  25. package/dist/cell.d.ts +6 -0
  26. package/dist/cell.d.ts.map +1 -0
  27. package/dist/cell.js +9 -0
  28. package/dist/chain.d.ts +12 -0
  29. package/dist/chain.d.ts.map +1 -0
  30. package/dist/chain.js +64 -0
  31. package/dist/change-set.d.ts +13 -16
  32. package/dist/change-set.d.ts.map +1 -1
  33. package/dist/change-set.js +17 -88
  34. package/dist/change.d.ts +36 -1
  35. package/dist/change.d.ts.map +1 -1
  36. package/dist/change.js +17 -3
  37. package/dist/chat-types.d.ts +3 -0
  38. package/dist/chat-types.d.ts.map +1 -0
  39. package/dist/chat-types.js +11 -0
  40. package/dist/client.d.ts +45 -25
  41. package/dist/client.d.ts.map +1 -1
  42. package/dist/client.js +132 -27
  43. package/dist/collection.d.ts +32 -21
  44. package/dist/collection.d.ts.map +1 -1
  45. package/dist/collection.js +53 -288
  46. package/dist/column.d.ts +5 -0
  47. package/dist/column.d.ts.map +1 -0
  48. package/dist/column.js +9 -0
  49. package/dist/compile.d.ts +18 -0
  50. package/dist/compile.d.ts.map +1 -0
  51. package/dist/compile.js +723 -0
  52. package/dist/connection.d.ts +7 -118
  53. package/dist/connection.d.ts.map +1 -1
  54. package/dist/connection.js +111 -2975
  55. package/dist/context.d.ts +2 -0
  56. package/dist/context.d.ts.map +1 -0
  57. package/dist/{chat/context.js → context.js} +2 -5
  58. package/dist/conversation-live.d.ts +150 -0
  59. package/dist/conversation-live.d.ts.map +1 -0
  60. package/dist/conversation-live.js +259 -0
  61. package/dist/conversation-row.d.ts +40 -0
  62. package/dist/conversation-row.d.ts.map +1 -0
  63. package/dist/conversation-row.js +66 -0
  64. package/dist/conversation.d.ts +85 -48
  65. package/dist/conversation.d.ts.map +1 -1
  66. package/dist/conversation.js +1095 -688
  67. package/dist/declaration.d.ts +10 -0
  68. package/dist/declaration.d.ts.map +1 -0
  69. package/dist/declaration.js +24 -0
  70. package/dist/digest.d.ts +7 -0
  71. package/dist/digest.d.ts.map +1 -0
  72. package/dist/digest.js +113 -0
  73. package/dist/discovery.d.ts +10 -0
  74. package/dist/discovery.d.ts.map +1 -0
  75. package/dist/discovery.js +150 -0
  76. package/dist/durability.d.ts +23 -1
  77. package/dist/durability.d.ts.map +1 -1
  78. package/dist/durability.js +9 -0
  79. package/dist/entry.d.ts +5 -2
  80. package/dist/entry.d.ts.map +1 -1
  81. package/dist/entry.js +33 -28
  82. package/dist/expectation.d.ts +26 -13
  83. package/dist/expectation.d.ts.map +1 -1
  84. package/dist/expectation.js +72 -19
  85. package/dist/failure.d.ts +3 -0
  86. package/dist/failure.d.ts.map +1 -1
  87. package/dist/failure.js +6 -0
  88. package/dist/figures.d.ts +49 -0
  89. package/dist/figures.d.ts.map +1 -0
  90. package/dist/figures.js +199 -0
  91. package/dist/file.d.ts +2 -19
  92. package/dist/file.d.ts.map +1 -1
  93. package/dist/file.js +8 -122
  94. package/dist/holdings.d.ts +29 -0
  95. package/dist/holdings.d.ts.map +1 -0
  96. package/dist/holdings.js +95 -0
  97. package/dist/host.d.ts +27 -4
  98. package/dist/host.d.ts.map +1 -1
  99. package/dist/host.js +177 -27
  100. package/dist/identity.d.ts +0 -2
  101. package/dist/identity.d.ts.map +1 -1
  102. package/dist/identity.js +0 -6
  103. package/dist/index.d.ts +41 -14
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.js +19 -3
  106. package/dist/install.d.ts +60 -0
  107. package/dist/install.d.ts.map +1 -0
  108. package/dist/install.js +537 -0
  109. package/dist/lifecycle.d.ts +7 -0
  110. package/dist/lifecycle.d.ts.map +1 -0
  111. package/dist/lifecycle.js +282 -0
  112. package/dist/listing.d.ts +52 -0
  113. package/dist/listing.d.ts.map +1 -0
  114. package/dist/listing.js +152 -0
  115. package/dist/live.d.ts +25 -0
  116. package/dist/live.d.ts.map +1 -0
  117. package/dist/live.js +206 -0
  118. package/dist/loaded.d.ts +5 -0
  119. package/dist/loaded.d.ts.map +1 -0
  120. package/dist/loaded.js +40 -0
  121. package/dist/locks.d.ts +7 -0
  122. package/dist/locks.d.ts.map +1 -0
  123. package/dist/locks.js +32 -0
  124. package/dist/lost.d.ts +5 -0
  125. package/dist/lost.d.ts.map +1 -0
  126. package/dist/lost.js +49 -0
  127. package/dist/media.d.ts +13 -0
  128. package/dist/media.d.ts.map +1 -0
  129. package/dist/media.js +269 -0
  130. package/dist/memory.d.ts +25 -7
  131. package/dist/memory.d.ts.map +1 -1
  132. package/dist/memory.js +320 -110
  133. package/dist/messages.d.ts +58 -0
  134. package/dist/messages.d.ts.map +1 -0
  135. package/dist/messages.js +160 -0
  136. package/dist/model.d.ts +11 -13
  137. package/dist/model.d.ts.map +1 -1
  138. package/dist/model.js +7 -24
  139. package/dist/models.d.ts +10 -0
  140. package/dist/models.d.ts.map +1 -0
  141. package/dist/models.js +153 -0
  142. package/dist/name.d.ts +4 -0
  143. package/dist/name.d.ts.map +1 -0
  144. package/dist/name.js +122 -0
  145. package/dist/observation.d.ts +40 -10
  146. package/dist/observation.d.ts.map +1 -1
  147. package/dist/observation.js +233 -39
  148. package/dist/opened.d.ts +22 -0
  149. package/dist/opened.d.ts.map +1 -0
  150. package/dist/opened.js +107 -0
  151. package/dist/opening.d.ts +4 -0
  152. package/dist/opening.d.ts.map +1 -0
  153. package/dist/opening.js +53 -0
  154. package/dist/outcome.d.ts +62 -9
  155. package/dist/outcome.d.ts.map +1 -1
  156. package/dist/outcome.js +72 -0
  157. package/dist/overlay.d.ts +9 -6
  158. package/dist/overlay.d.ts.map +1 -1
  159. package/dist/overlay.js +129 -166
  160. package/dist/page-metadata.d.ts +8 -0
  161. package/dist/page-metadata.d.ts.map +1 -0
  162. package/dist/page-metadata.js +19 -0
  163. package/dist/parts.d.ts +4 -0
  164. package/dist/parts.d.ts.map +1 -0
  165. package/dist/parts.js +13 -0
  166. package/dist/paths.d.ts +2 -0
  167. package/dist/paths.d.ts.map +1 -1
  168. package/dist/paths.js +26 -0
  169. package/dist/preparation.d.ts +41 -0
  170. package/dist/preparation.d.ts.map +1 -0
  171. package/dist/preparation.js +314 -0
  172. package/dist/presence.d.ts +58 -0
  173. package/dist/presence.d.ts.map +1 -0
  174. package/dist/presence.js +231 -0
  175. package/dist/queries.d.ts +16 -0
  176. package/dist/queries.d.ts.map +1 -0
  177. package/dist/queries.js +308 -0
  178. package/dist/query.d.ts +27 -186
  179. package/dist/query.d.ts.map +1 -1
  180. package/dist/query.js +3 -464
  181. package/dist/{chat/questions.d.ts → questions.d.ts} +6 -7
  182. package/dist/questions.d.ts.map +1 -0
  183. package/dist/{chat/questions.js → questions.js} +12 -7
  184. package/dist/queue.d.ts +40 -0
  185. package/dist/queue.d.ts.map +1 -0
  186. package/dist/queue.js +480 -0
  187. package/dist/reach.d.ts +20 -7
  188. package/dist/reach.d.ts.map +1 -1
  189. package/dist/reach.js +360 -98
  190. package/dist/react.d.ts +22 -5
  191. package/dist/react.d.ts.map +1 -1
  192. package/dist/react.js +40 -18
  193. package/dist/{chat/read.d.ts → read.d.ts} +2 -0
  194. package/dist/read.d.ts.map +1 -0
  195. package/dist/{chat/read.js → read.js} +4 -0
  196. package/dist/readiness.d.ts +55 -0
  197. package/dist/readiness.d.ts.map +1 -0
  198. package/dist/readiness.js +25 -0
  199. package/dist/reads.d.ts +39 -0
  200. package/dist/reads.d.ts.map +1 -0
  201. package/dist/reads.js +178 -0
  202. package/dist/recovery.d.ts +5 -2
  203. package/dist/recovery.d.ts.map +1 -1
  204. package/dist/recovery.js +65 -8
  205. package/dist/refresh.d.ts +17 -14
  206. package/dist/refresh.d.ts.map +1 -1
  207. package/dist/refresh.js +145 -54
  208. package/dist/refusal.d.ts +5 -0
  209. package/dist/refusal.d.ts.map +1 -0
  210. package/dist/refusal.js +55 -0
  211. package/dist/replica.d.ts +50 -33
  212. package/dist/replica.d.ts.map +1 -1
  213. package/dist/replica.js +340 -191
  214. package/dist/retried.d.ts +30 -0
  215. package/dist/retried.d.ts.map +1 -0
  216. package/dist/retried.js +72 -0
  217. package/dist/room-draft.d.ts +66 -12
  218. package/dist/room-draft.d.ts.map +1 -1
  219. package/dist/room-draft.js +416 -122
  220. package/dist/room-drafts.d.ts +24 -0
  221. package/dist/room-drafts.d.ts.map +1 -0
  222. package/dist/room-drafts.js +220 -0
  223. package/dist/room-list.d.ts +10 -0
  224. package/dist/room-list.d.ts.map +1 -0
  225. package/dist/room-list.js +45 -0
  226. package/dist/rows.d.ts +32 -29
  227. package/dist/rows.d.ts.map +1 -1
  228. package/dist/rows.js +60 -118
  229. package/dist/runtime.d.ts +34 -0
  230. package/dist/runtime.d.ts.map +1 -0
  231. package/dist/runtime.js +1 -0
  232. package/dist/save.d.ts +43 -48
  233. package/dist/save.d.ts.map +1 -1
  234. package/dist/save.js +751 -303
  235. package/dist/saves.d.ts +34 -0
  236. package/dist/saves.d.ts.map +1 -0
  237. package/dist/saves.js +437 -0
  238. package/dist/search.d.ts +15 -77
  239. package/dist/search.d.ts.map +1 -1
  240. package/dist/search.js +10 -186
  241. package/dist/seed.d.ts +25 -0
  242. package/dist/seed.d.ts.map +1 -0
  243. package/dist/seed.js +145 -0
  244. package/dist/shared.d.ts +6 -7
  245. package/dist/shared.d.ts.map +1 -1
  246. package/dist/shared.js +75 -104
  247. package/dist/shown.d.ts +33 -0
  248. package/dist/shown.d.ts.map +1 -0
  249. package/dist/shown.js +309 -0
  250. package/dist/socket/admission.d.ts +7 -0
  251. package/dist/socket/admission.d.ts.map +1 -0
  252. package/dist/socket/admission.js +39 -0
  253. package/dist/socket/answers.d.ts +6 -0
  254. package/dist/socket/answers.d.ts.map +1 -0
  255. package/dist/socket/answers.js +20 -0
  256. package/dist/socket/lanes.d.ts +28 -0
  257. package/dist/socket/lanes.d.ts.map +1 -0
  258. package/dist/socket/lanes.js +103 -0
  259. package/dist/socket/reads.d.ts +10 -0
  260. package/dist/socket/reads.d.ts.map +1 -0
  261. package/dist/socket/reads.js +31 -0
  262. package/dist/socket/session.d.ts +38 -0
  263. package/dist/socket/session.d.ts.map +1 -0
  264. package/dist/socket/session.js +23 -0
  265. package/dist/socket.d.ts +67 -0
  266. package/dist/socket.d.ts.map +1 -0
  267. package/dist/socket.js +164 -0
  268. package/dist/source.d.ts +59 -0
  269. package/dist/source.d.ts.map +1 -0
  270. package/dist/source.js +93 -0
  271. package/dist/status.d.ts +4 -5
  272. package/dist/status.d.ts.map +1 -1
  273. package/dist/status.js +3 -7
  274. package/dist/store/installs.d.ts +30 -0
  275. package/dist/store/installs.d.ts.map +1 -0
  276. package/dist/store/installs.js +40 -0
  277. package/dist/store/readiness.d.ts +11 -0
  278. package/dist/store/readiness.d.ts.map +1 -0
  279. package/dist/store/readiness.js +68 -0
  280. package/dist/store/records.d.ts +223 -0
  281. package/dist/store/records.d.ts.map +1 -0
  282. package/dist/store/records.js +465 -0
  283. package/dist/store/room-held.d.ts +8 -0
  284. package/dist/store/room-held.d.ts.map +1 -0
  285. package/dist/store/room-held.js +17 -0
  286. package/dist/store/rooms-shown.d.ts +8 -0
  287. package/dist/store/rooms-shown.d.ts.map +1 -0
  288. package/dist/store/rooms-shown.js +13 -0
  289. package/dist/store/space.d.ts +11 -0
  290. package/dist/store/space.d.ts.map +1 -0
  291. package/dist/store/space.js +41 -0
  292. package/dist/store/watchers.d.ts +17 -0
  293. package/dist/store/watchers.d.ts.map +1 -0
  294. package/dist/store/watchers.js +56 -0
  295. package/dist/store/writes.d.ts +24 -0
  296. package/dist/store/writes.d.ts.map +1 -0
  297. package/dist/store/writes.js +125 -0
  298. package/dist/store.d.ts +114 -141
  299. package/dist/store.d.ts.map +1 -1
  300. package/dist/store.js +163 -687
  301. package/dist/stored.d.ts +167 -0
  302. package/dist/stored.d.ts.map +1 -0
  303. package/dist/stored.js +700 -0
  304. package/dist/surface.d.ts +90 -0
  305. package/dist/surface.d.ts.map +1 -0
  306. package/dist/surface.js +225 -0
  307. package/dist/sync.d.ts +19 -0
  308. package/dist/sync.d.ts.map +1 -0
  309. package/dist/sync.js +536 -0
  310. package/dist/tables.d.ts +376 -0
  311. package/dist/tables.d.ts.map +1 -0
  312. package/dist/tables.js +499 -0
  313. package/dist/tallies.d.ts +18 -0
  314. package/dist/tallies.d.ts.map +1 -0
  315. package/dist/tallies.js +128 -0
  316. package/dist/transfer.d.ts +0 -5
  317. package/dist/transfer.d.ts.map +1 -1
  318. package/dist/turn.d.ts +5 -3
  319. package/dist/turn.d.ts.map +1 -1
  320. package/dist/turn.js +51 -21
  321. package/dist/validation.d.ts +29 -0
  322. package/dist/validation.d.ts.map +1 -0
  323. package/dist/validation.js +98 -0
  324. package/dist/windows.d.ts +11 -0
  325. package/dist/windows.d.ts.map +1 -0
  326. package/dist/windows.js +16 -0
  327. package/dist/wire.d.ts +230 -36
  328. package/dist/wire.d.ts.map +1 -1
  329. package/dist/wire.js +77 -33
  330. package/package.json +19 -19
  331. package/AGENTS.md +0 -296
  332. package/dist/attempt.d.ts +0 -16
  333. package/dist/attempt.d.ts.map +0 -1
  334. package/dist/attempt.js +0 -70
  335. package/dist/chat/acts.d.ts +0 -33
  336. package/dist/chat/acts.d.ts.map +0 -1
  337. package/dist/chat/acts.js +0 -36
  338. package/dist/chat/context.d.ts +0 -3
  339. package/dist/chat/context.d.ts.map +0 -1
  340. package/dist/chat/input.d.ts +0 -9
  341. package/dist/chat/input.d.ts.map +0 -1
  342. package/dist/chat/input.js +0 -99
  343. package/dist/chat/kit.d.ts +0 -60
  344. package/dist/chat/kit.d.ts.map +0 -1
  345. package/dist/chat/kit.js +0 -123
  346. package/dist/chat/lasting.d.ts +0 -6
  347. package/dist/chat/lasting.d.ts.map +0 -1
  348. package/dist/chat/lasting.js +0 -19
  349. package/dist/chat/list.d.ts +0 -26
  350. package/dist/chat/list.d.ts.map +0 -1
  351. package/dist/chat/list.js +0 -62
  352. package/dist/chat/markdown.d.ts +0 -20
  353. package/dist/chat/markdown.d.ts.map +0 -1
  354. package/dist/chat/markdown.js +0 -188
  355. package/dist/chat/message.d.ts +0 -6
  356. package/dist/chat/message.d.ts.map +0 -1
  357. package/dist/chat/message.js +0 -192
  358. package/dist/chat/messages.d.ts +0 -21
  359. package/dist/chat/messages.d.ts.map +0 -1
  360. package/dist/chat/messages.js +0 -151
  361. package/dist/chat/name.d.ts +0 -6
  362. package/dist/chat/name.d.ts.map +0 -1
  363. package/dist/chat/name.js +0 -37
  364. package/dist/chat/opened.d.ts +0 -11
  365. package/dist/chat/opened.d.ts.map +0 -1
  366. package/dist/chat/opened.js +0 -17
  367. package/dist/chat/overlay.d.ts +0 -31
  368. package/dist/chat/overlay.d.ts.map +0 -1
  369. package/dist/chat/overlay.js +0 -97
  370. package/dist/chat/parts.d.ts +0 -57
  371. package/dist/chat/parts.d.ts.map +0 -1
  372. package/dist/chat/parts.js +0 -119
  373. package/dist/chat/process.d.ts +0 -20
  374. package/dist/chat/process.d.ts.map +0 -1
  375. package/dist/chat/process.js +0 -32
  376. package/dist/chat/provider.d.ts +0 -63
  377. package/dist/chat/provider.d.ts.map +0 -1
  378. package/dist/chat/provider.js +0 -620
  379. package/dist/chat/question.d.ts +0 -9
  380. package/dist/chat/question.d.ts.map +0 -1
  381. package/dist/chat/question.js +0 -80
  382. package/dist/chat/questions.d.ts.map +0 -1
  383. package/dist/chat/read.d.ts.map +0 -1
  384. package/dist/chat/ready.d.ts +0 -33
  385. package/dist/chat/ready.d.ts.map +0 -1
  386. package/dist/chat/ready.js +0 -91
  387. package/dist/chat/style.d.ts +0 -4
  388. package/dist/chat/style.d.ts.map +0 -1
  389. package/dist/chat/style.js +0 -302
  390. package/dist/chat.d.ts +0 -14
  391. package/dist/chat.d.ts.map +0 -1
  392. package/dist/chat.js +0 -8
  393. package/dist/fence.d.ts +0 -6
  394. package/dist/fence.d.ts.map +0 -1
  395. package/dist/fence.js +0 -10
  396. package/dist/log.d.ts +0 -5
  397. package/dist/log.d.ts.map +0 -1
  398. package/dist/log.js +0 -14
  399. package/dist/read-side.d.ts +0 -25
  400. package/dist/read-side.d.ts.map +0 -1
  401. package/dist/read-side.js +0 -639
@@ -0,0 +1,282 @@
1
+ import { catchUpConversations, receiveConversationEvent, reconcileConversations, } from './conversation.js';
2
+ import { declared } from './declaration.js';
3
+ import { uncaught } from './failure.js';
4
+ import { catching, replaced } from './install.js';
5
+ import { connectionLost } from './locks.js';
6
+ import { fenceLive } from './lost.js';
7
+ import { cachedModels, revoked, settleModels } from './models.js';
8
+ import { refuse } from './refusal.js';
9
+ import { roomsListed } from './room-list.js';
10
+ import { moveTo, recoverReads, rest, SERVICE_MODE_TOPIC, show, submissionDue, transferring, } from './shown.js';
11
+ import { applyRoom, changeAuthority, countAuthorityChange, finishOpening, loadRoom, OPENING_LANE, reload, resynchronize, sync, } from './sync.js';
12
+ const CONVERSATION_LANE = 'conversations';
13
+ const RELOADING = 'reloading';
14
+ function closing(runtime, opened) {
15
+ const { store, socket } = runtime;
16
+ return socket.lanes.task(OPENING_LANE, async (live) => {
17
+ if (!live())
18
+ return;
19
+ const local = await store.open();
20
+ if (!opened && !socket.isOpen())
21
+ await cachedModels(runtime, local);
22
+ await rest(runtime, null, live);
23
+ });
24
+ }
25
+ function closedSocket(runtime, lapsed, lost, opened) {
26
+ const { socket, presence, conversations } = runtime;
27
+ const { session } = socket;
28
+ socket.notifyReady();
29
+ presence.stopAsking();
30
+ connectionLost(runtime);
31
+ if (lost)
32
+ conversations.lost();
33
+ if (lapsed) {
34
+ void refuse(runtime, 'revoked-authorization');
35
+ return;
36
+ }
37
+ session.set({ complete: false });
38
+ const { streamed, moving } = session.now();
39
+ if (streamed !== null)
40
+ streamed.complete = false;
41
+ moveTo(runtime, {
42
+ ...moving,
43
+ state: moving.state === 'synced' ? 'syncing' : moving.state,
44
+ providerUnreachable: moving.providerUnreachable || (!opened && lost),
45
+ });
46
+ void closing(runtime, opened);
47
+ }
48
+ function owedReloads(runtime, expired, held) {
49
+ const { store, presence } = runtime;
50
+ const reloading = presence
51
+ .rooms()
52
+ .filter((room) => !expired.includes(room.locator) && revoked(held.get(room.locator)?.record.model))
53
+ .map((room) => room.locator);
54
+ for (const locator of reloading)
55
+ catching(store, locator);
56
+ recoverReads(runtime, reloading);
57
+ return reloading;
58
+ }
59
+ async function reloadNow(runtime, among, replacing, progress, held, installing) {
60
+ const { store, socket, presence } = runtime;
61
+ const { lanes } = socket;
62
+ const discovered = among === null ? presence.rooms() : among.flatMap((locator) => presence.room(locator) ?? []);
63
+ const reloaded = discovered.filter((room) => held.has(room.locator) && !installing.has(room.locator) && replacing(room));
64
+ const acquired = discovered.filter((room) => (!held.has(room.locator) || installing.has(room.locator)) &&
65
+ room.replica.admission === 'admitted' &&
66
+ replacing(room));
67
+ for (const room of reloaded)
68
+ presence.reload(room.locator, true);
69
+ try {
70
+ const local = await store.open();
71
+ const kept = acquired.length === 0 ? new Set() : (await local.held()).staged;
72
+ for (const room of reloaded) {
73
+ void lanes
74
+ .roomTask(room.locator, (live) => reload(runtime, room, local, progress, live))
75
+ .then(() => rest(runtime, progress));
76
+ }
77
+ for (const room of acquired) {
78
+ const unheld = installing.has(room.locator) ? undefined : { staged: kept.has(room.locator) };
79
+ void lanes
80
+ .roomTask(room.locator, (live) => loadRoom(runtime, room, local, progress, live, unheld))
81
+ .then(() => rest(runtime, progress));
82
+ }
83
+ runtime.retries.succeeded('download', RELOADING);
84
+ }
85
+ catch (error) {
86
+ runtime.retries.failed('download', RELOADING, error);
87
+ for (const room of reloaded)
88
+ presence.reload(room.locator, false);
89
+ progress.reachable = false;
90
+ }
91
+ }
92
+ function caughtUpRooms(runtime, expired) {
93
+ const { store, socket, presence } = runtime;
94
+ const { session } = socket;
95
+ const progress = session.now().underway;
96
+ session.set({ underway: null });
97
+ socket.named();
98
+ const cycle = progress ?? { complete: true, reachable: true };
99
+ replaced(store, expired);
100
+ const among = progress === null ? expired : null;
101
+ const installing = store.installs.underway(among);
102
+ const held = among === null ? store.rooms() : store.rooms(among);
103
+ const reloading = progress === null
104
+ ? Promise.resolve([])
105
+ : held.then((stored) => owedReloads(runtime, expired, stored));
106
+ const replacing = Promise.all([held, reloading]).then(([stored, owed]) => reloadNow(runtime, among, (room) => expired.includes(room.locator) || owed.includes(room.locator), cycle, stored, installing));
107
+ return socket.lanes.task(OPENING_LANE, async (live) => {
108
+ if (!live())
109
+ return;
110
+ if (progress === null) {
111
+ await replacing;
112
+ await rest(runtime, cycle, live);
113
+ return;
114
+ }
115
+ try {
116
+ const local = await store.open();
117
+ await replacing;
118
+ if (progress.reachable) {
119
+ const stored = await held;
120
+ const owed = await reloading;
121
+ await settleModels(runtime, new Map(presence
122
+ .rooms()
123
+ .filter((room) => stored.has(room.locator) &&
124
+ !expired.includes(room.locator) &&
125
+ !owed.includes(room.locator))
126
+ .map((room) => [room.locator, declared(room)])), 'current', local);
127
+ }
128
+ runtime.retries.succeeded('download', OPENING_LANE);
129
+ }
130
+ catch (error) {
131
+ runtime.retries.failed('download', OPENING_LANE, error);
132
+ progress.complete = false;
133
+ progress.reachable = false;
134
+ }
135
+ if (live())
136
+ await finishOpening(runtime, progress, live);
137
+ });
138
+ }
139
+ function signalled(runtime, mode) {
140
+ const { store, socket } = runtime;
141
+ const { session } = socket;
142
+ const { closed, serviceMode, haltedRefusal, openSignals } = session.now();
143
+ if (closed)
144
+ return;
145
+ if (mode === 'open')
146
+ session.set({ openSignals: openSignals + 1 });
147
+ const releasing = mode === 'open' && (haltedRefusal || serviceMode === 'write-halted');
148
+ if (mode === 'open')
149
+ session.set({ haltedRefusal: false });
150
+ if (mode !== serviceMode) {
151
+ session.set({ serviceMode: mode });
152
+ store.readiness.queue([]);
153
+ store.tell(SERVICE_MODE_TOPIC, mode);
154
+ }
155
+ if (releasing)
156
+ void submissionDue(runtime);
157
+ }
158
+ async function runCurrency(runtime, live) {
159
+ const { socket, conversations } = runtime;
160
+ const { session } = socket;
161
+ if (session.now().currencyQueued === socket.generation())
162
+ session.set({ currencyQueued: null });
163
+ if (!live())
164
+ return;
165
+ await reconcileConversations(conversations);
166
+ if (conversations.current()) {
167
+ await rest(runtime, null, live);
168
+ return;
169
+ }
170
+ const progress = {
171
+ complete: false,
172
+ reachable: !session.now().moving.providerUnreachable,
173
+ };
174
+ moveTo(runtime, transferring(runtime));
175
+ try {
176
+ await catchUpConversations(conversations, progress);
177
+ runtime.retries.succeeded('conversations', CONVERSATION_LANE);
178
+ }
179
+ catch (error) {
180
+ runtime.retries.failed('conversations', CONVERSATION_LANE, error);
181
+ progress.reachable = false;
182
+ }
183
+ await rest(runtime, progress, live);
184
+ }
185
+ export function scheduleCurrency(runtime) {
186
+ const { socket } = runtime;
187
+ const { session } = socket;
188
+ if (session.now().currencyQueued === socket.generation() || socket.closed() || socket.stopping())
189
+ return;
190
+ session.set({ currencyQueued: socket.generation() });
191
+ void socket.lanes.task(CONVERSATION_LANE, (live) => runCurrency(runtime, live));
192
+ }
193
+ export function spaceFreed(runtime) {
194
+ const { store, socket } = runtime;
195
+ store.prepareAgain();
196
+ store.readiness.queue();
197
+ const { closed, authorization } = socket.session.now();
198
+ if (closed || authorization === undefined)
199
+ return;
200
+ if (!socket.streamed)
201
+ void sync(runtime, 'unstreamed', null);
202
+ else
203
+ void resynchronize(runtime);
204
+ }
205
+ export function close({ store, socket, presence, conversations, recovery, liveQueries, figures, }) {
206
+ if (socket.closed())
207
+ return;
208
+ socket.close();
209
+ presence.close();
210
+ conversations.close();
211
+ void recovery.retire();
212
+ liveQueries.close();
213
+ figures.close();
214
+ store.close();
215
+ }
216
+ export async function stop(runtime) {
217
+ const { store, socket, presence, recovery } = runtime;
218
+ socket.session.set({ stopping: true });
219
+ presence.stopAsking();
220
+ socket.stopReads();
221
+ await recovery.retire();
222
+ await socket.lanes.finished();
223
+ await store.written();
224
+ close(runtime);
225
+ }
226
+ export function start(runtime, signal) {
227
+ const { store, socket, presence, conversations, lastAnswers, recovery } = runtime;
228
+ const closeRuntime = () => close(runtime);
229
+ socket.observeServiceMode((mode) => signalled(runtime, mode));
230
+ socket.observeConversations((event) => {
231
+ if (event.kind === 'list' || event.kind === 'listed' || event.kind === 'unlisted')
232
+ store.readiness.queue([]);
233
+ receiveConversationEvent(conversations, event);
234
+ if (event.kind !== 'gap' || conversations.current())
235
+ return;
236
+ show(runtime);
237
+ scheduleCurrency(runtime);
238
+ });
239
+ signal?.addEventListener('abort', closeRuntime, { once: true });
240
+ if (signal?.aborted)
241
+ closeRuntime();
242
+ socket.observe((event) => {
243
+ if (event.kind === 'opened') {
244
+ presence.connectionLive();
245
+ conversations.reopened();
246
+ lastAnswers.reopened();
247
+ recovery.resume();
248
+ }
249
+ else if (event.kind === 'discovered') {
250
+ const listed = roomsListed(runtime, event.discovery.roomList);
251
+ if (event.missed)
252
+ countAuthorityChange(runtime, listed);
253
+ void sync(runtime, 'opened', event.discovery);
254
+ }
255
+ else if (event.kind === 'closed') {
256
+ closedSocket(runtime, event.revoked, event.lost, event.opened);
257
+ }
258
+ else if (event.kind === 'caught-up')
259
+ void caughtUpRooms(runtime, event.expired);
260
+ else if (event.kind === 'reported')
261
+ lastAnswers.again();
262
+ else if (event.kind === 'authority-changed') {
263
+ if (socket.isAnnounced() && socket.isOpen())
264
+ fenceLive(runtime, event.left);
265
+ void changeAuthority(runtime, event);
266
+ }
267
+ else
268
+ void applyRoom(runtime, event);
269
+ });
270
+ void store
271
+ .open()
272
+ .then(async (local) => {
273
+ if ((await local.facts()).capabilities.length > 0)
274
+ socket.readyFromStore();
275
+ })
276
+ .catch((error) => {
277
+ socket.readyFromStore();
278
+ uncaught(error);
279
+ });
280
+ if (!socket.streamed)
281
+ void sync(runtime, 'unstreamed', null);
282
+ }
@@ -0,0 +1,52 @@
1
+ import type { HeldRooms } from '@agentshouse/mdmodel';
2
+ import type { DiscoveredRoom, HeldRoom, OperationScopes, ProviderRefusal, ReplicaAdmission, RoomDeclaration } from './adapter.js';
3
+ import type { Composition } from './collection.js';
4
+ import type { KeyedChange } from './observation.js';
5
+ import { type ModelState, type TypesResult } from './model.js';
6
+ import { type PortReach } from './reach.js';
7
+ import type { ReplicaRecord } from './replica.js';
8
+ import type { Runtime } from './runtime.js';
9
+ import type { Stored } from './store.js';
10
+ export type AppTypedSelection = {
11
+ roots: readonly string[];
12
+ model: TypesResult;
13
+ };
14
+ export type AppRoom = {
15
+ name: string;
16
+ locator: string;
17
+ handle: string;
18
+ operations: OperationScopes;
19
+ replica: ReplicaAdmission;
20
+ model: TypesResult;
21
+ typedSelection: AppTypedSelection | null;
22
+ providerOwnedPaths: readonly string[];
23
+ authoredPaths: readonly string[];
24
+ roomVersion: string | null;
25
+ documents: number;
26
+ synchronizationAvailable: boolean;
27
+ refusal: ProviderRefusal | null;
28
+ locked: boolean;
29
+ };
30
+ type ListedRoom = Omit<AppRoom, 'documents' | 'locked'>;
31
+ export type ListedEntry = ListedRoom & {
32
+ readonly documents: number;
33
+ };
34
+ export type Listing = ReadonlyMap<string, ListedEntry>;
35
+ export type RoomsChange = KeyedChange<string, AppRoom>;
36
+ export declare function modelIn({ socket, presence }: Runtime, locator: string, stored: Stored | undefined): ModelState;
37
+ export declare function compositionFor(runtime: Runtime, record: ReplicaRecord): Composition;
38
+ export declare function declarationOf({ presence }: Runtime, locator: string, stored: Stored | undefined): {
39
+ readonly room: RoomDeclaration;
40
+ readonly available: boolean;
41
+ } | undefined;
42
+ export declare function listedLocators({ presence }: Runtime, held: ReadonlyMap<string, unknown>): string[];
43
+ export declare function listedOrHeld({ presence }: Runtime, held: ReadonlyMap<string, unknown>, locator: string): boolean;
44
+ export declare function listedEntries(runtime: Runtime, touched: readonly string[]): Promise<readonly ListedEntry[] | null>;
45
+ export declare function listingNow(runtime: Runtime): Promise<Listing>;
46
+ export declare function shownRooms(runtime: Runtime, listing: Listing): readonly AppRoom[];
47
+ export declare function shownChange(runtime: Runtime, entries: readonly ListedEntry[]): RoomsChange;
48
+ export declare function roomFacts(runtime: Runtime, reach?: PortReach | null): Promise<HeldRooms>;
49
+ export declare function heldRooms({ store }: Runtime, listed: readonly DiscoveredRoom[]): Promise<HeldRoom[]>;
50
+ export declare function name(runtime: Runtime, locator: string): Promise<void>;
51
+ export {};
52
+ //# sourceMappingURL=listing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listing.d.ts","sourceRoot":"","sources":["../src/listing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,152 @@
1
+ import { declared } from './declaration.js';
2
+ import { modelTypes, NO_MODEL } from './model.js';
3
+ import { governs, holds } from './reach.js';
4
+ export function modelIn({ socket, presence }, locator, stored) {
5
+ if (socket.session.now().refusal?.code === 'revoked-authorization')
6
+ return { status: 'unavailable', reason: 'revoked' };
7
+ return stored?.record.model ?? presence.unheldModel(locator) ?? NO_MODEL;
8
+ }
9
+ export function compositionFor(runtime, record) {
10
+ return runtime.store.composed({
11
+ ...record,
12
+ model: modelIn(runtime, record.locator, { record, indexed: true, documents: 0 }),
13
+ });
14
+ }
15
+ export function declarationOf({ presence }, locator, stored) {
16
+ const listed = presence.room(locator);
17
+ const room = stored?.record.declaration ?? (listed === undefined ? undefined : declared(listed));
18
+ if (room === undefined)
19
+ return undefined;
20
+ return {
21
+ room,
22
+ available: presence.available(locator, stored?.record.declaration.replica.selection),
23
+ };
24
+ }
25
+ export function listedLocators({ presence }, held) {
26
+ const listed = presence.rooms().map(({ locator }) => locator);
27
+ return [...new Set([...listed, ...held.keys()])];
28
+ }
29
+ export function listedOrHeld({ presence }, held, locator) {
30
+ return presence.room(locator) !== undefined || held.has(locator);
31
+ }
32
+ function selectionModel({ socket, builtIn }) {
33
+ return socket.session.now().refusal?.code === 'revoked-authorization'
34
+ ? { status: 'unavailable', reason: 'revoked' }
35
+ : builtIn;
36
+ }
37
+ function listedRoom(runtime, locator, stored) {
38
+ const declaration = declarationOf(runtime, locator, stored);
39
+ if (declaration === undefined)
40
+ return undefined;
41
+ const { room, available } = declaration;
42
+ const selection = room.typedSelection;
43
+ return {
44
+ name: room.name,
45
+ locator,
46
+ handle: room.handle,
47
+ operations: room.operations,
48
+ replica: room.replica,
49
+ model: modelTypes(modelIn(runtime, locator, stored)),
50
+ typedSelection: selection === null
51
+ ? null
52
+ : { roots: selection.roots, model: modelTypes(selectionModel(runtime)) },
53
+ providerOwnedPaths: room.providerOwnedPaths,
54
+ authoredPaths: room.authoredPaths,
55
+ roomVersion: stored?.record.roomVersion ?? null,
56
+ synchronizationAvailable: available,
57
+ refusal: runtime.presence.refusal(locator),
58
+ documents: stored?.documents ?? 0,
59
+ };
60
+ }
61
+ function listingOf(runtime, held) {
62
+ const listing = new Map();
63
+ for (const locator of listedLocators(runtime, held)) {
64
+ const room = listedRoom(runtime, locator, held.get(locator));
65
+ if (room !== undefined)
66
+ listing.set(locator, room);
67
+ }
68
+ return listing;
69
+ }
70
+ export async function listedEntries(runtime, touched) {
71
+ const { store } = runtime;
72
+ if (store.roomsShown.now() === null)
73
+ return null;
74
+ if (touched.length === 0)
75
+ return [];
76
+ const held = await store.rooms(touched);
77
+ const entries = [];
78
+ for (const locator of touched) {
79
+ const room = listedRoom(runtime, locator, held.get(locator));
80
+ if (room === undefined || store.roomsShown.now()?.has(locator) !== true)
81
+ return null;
82
+ entries.push(room);
83
+ }
84
+ return entries;
85
+ }
86
+ export async function listingNow(runtime) {
87
+ return listingOf(runtime, await runtime.store.rooms());
88
+ }
89
+ function shownRoom({ presence }, { documents, ...room }) {
90
+ return presence.lockedAs(room.locator, room.replica.offline)
91
+ ? {
92
+ ...room,
93
+ model: modelTypes(NO_MODEL),
94
+ typedSelection: null,
95
+ documents: 0,
96
+ locked: true,
97
+ }
98
+ : { ...room, documents, locked: false };
99
+ }
100
+ export function shownRooms(runtime, listing) {
101
+ return structuredClone([...listing.values()].map((entry) => shownRoom(runtime, entry)));
102
+ }
103
+ export function shownChange(runtime, entries) {
104
+ return {
105
+ changed: structuredClone(entries.map((entry) => [entry.locator, shownRoom(runtime, entry)])),
106
+ removed: [],
107
+ order: null,
108
+ };
109
+ }
110
+ export async function roomFacts(runtime, reach = null) {
111
+ const { store, socket, builtIn } = runtime;
112
+ const held = await store.rooms();
113
+ const rooms = [...listingOf(runtime, held).values()]
114
+ .filter((room) => holds(reach, room.locator))
115
+ .map((room) => {
116
+ const governed = governs(reach, room);
117
+ const attached = [
118
+ ...(governed.collection ? [modelIn(runtime, room.locator, held.get(room.locator))] : []),
119
+ ...(governed.selection ? [builtIn] : []),
120
+ ];
121
+ return {
122
+ locator: room.locator,
123
+ available: attached.every((model) => model.status !== 'unavailable'),
124
+ types: attached.flatMap((model) => model.status === 'unavailable' ? [] : Object.values(model.types)),
125
+ };
126
+ });
127
+ return { listed: socket.session.now().roomsListed, rooms };
128
+ }
129
+ export async function heldRooms({ store }, listed) {
130
+ const stored = await store.rooms(listed.map((room) => room.locator));
131
+ return listed.flatMap((room) => {
132
+ const record = stored.get(room.locator)?.record;
133
+ if (record === undefined) {
134
+ return room.replica.admission === 'admitted'
135
+ ? [{ locator: room.locator, roomVersion: null }]
136
+ : [];
137
+ }
138
+ if (record.declaration.replica.selection !== room.replica.selection)
139
+ return [];
140
+ return [{ locator: room.locator, roomVersion: record.roomVersion }];
141
+ });
142
+ }
143
+ export async function name(runtime, locator) {
144
+ const { socket, presence } = runtime;
145
+ const room = presence.room(locator);
146
+ if (!socket.streamed || room === undefined || !socket.isOpen() || !socket.isHanded())
147
+ return;
148
+ const [held] = await heldRooms(runtime, [room]);
149
+ if (held === undefined || !socket.isOpen() || !socket.isHanded())
150
+ return;
151
+ socket.name(held);
152
+ }
package/dist/live.d.ts ADDED
@@ -0,0 +1,25 @@
1
+ import type { ChangeSet } from './change-set.js';
2
+ import { type KeyedResult, type QueryMessage } from './observation.js';
3
+ import type { PendingResult, PendingRoom, Plan, QueryCoverage } from './query.js';
4
+ import type { Fail } from './reach.js';
5
+ import type { QueryRoom } from './tables.js';
6
+ export type Cover = {
7
+ coverage: QueryCoverage;
8
+ rooms: readonly QueryRoom[];
9
+ } | PendingResult;
10
+ export type Ran = KeyedResult & {
11
+ readonly current: () => boolean;
12
+ };
13
+ export type Run = (plan: Plan, cover: () => Promise<Cover>) => Promise<Ran>;
14
+ export type PendingAt<H> = (held: H, rooms: readonly string[]) => ReadonlyMap<string, PendingRoom | null> | null;
15
+ type Listener = (message: QueryMessage) => void;
16
+ export type LiveQueries<H> = {
17
+ touched(set: ChangeSet): void;
18
+ recover(locators?: readonly string[]): void;
19
+ watch(plan: Plan, identity: string, cover: (held: H) => Cover, pendingAt: PendingAt<H>, deliver: Listener, failed: Fail): () => void;
20
+ close(): void;
21
+ };
22
+ export declare function readerOf(plan: Plan): (locator: string) => boolean;
23
+ export declare function createLiveQueries<H>(run: Run, holding: () => Promise<H>): LiveQueries<H>;
24
+ export {};
25
+ //# sourceMappingURL=live.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../src/live.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAQL,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,KAAK,GAAG;IAAE,QAAQ,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAA;CAAE,GAAG,aAAa,CAAC;AAE7F,MAAM,MAAM,GAAG,GAAG,WAAW,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAA;CAAE,CAAC;AAEpE,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAE5E,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CACzB,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,SAAS,MAAM,EAAE,KACrB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AAEpD,KAAK,QAAQ,GAAG,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;AAiBhD,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5C,KAAK,CACH,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,EACzB,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,EACvB,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,IAAI,GACX,MAAM,IAAI,CAAC;IACd,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAWF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAQjE;AAeD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CA4JxF"}