@agentshouse/mdruntime 0.1.0-cb2e390ee7b89 → 0.1.0-cb3bb3b233fa1

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 (407) 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 +214 -123
  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 +30 -11
  23. package/dist/bootstrap.d.ts.map +1 -1
  24. package/dist/bootstrap.js +309 -113
  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 -89
  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 +39 -25
  41. package/dist/client.d.ts.map +1 -1
  42. package/dist/client.js +117 -23
  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 -134
  53. package/dist/connection.d.ts.map +1 -1
  54. package/dist/connection.js +109 -3606
  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 +80 -50
  65. package/dist/conversation.d.ts.map +1 -1
  66. package/dist/conversation.js +1037 -793
  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 +20 -4
  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 +21 -11
  98. package/dist/host.d.ts.map +1 -1
  99. package/dist/host.js +126 -53
  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 -16
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.js +19 -4
  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 +20 -8
  131. package/dist/memory.d.ts.map +1 -1
  132. package/dist/memory.js +311 -121
  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 +8 -11
  137. package/dist/model.d.ts.map +1 -1
  138. package/dist/model.js +6 -23
  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 +38 -10
  146. package/dist/observation.d.ts.map +1 -1
  147. package/dist/observation.js +232 -44
  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 +57 -10
  155. package/dist/outcome.d.ts.map +1 -1
  156. package/dist/outcome.js +71 -2
  157. package/dist/overlay.d.ts +8 -6
  158. package/dist/overlay.d.ts.map +1 -1
  159. package/dist/overlay.js +121 -182
  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 +21 -203
  179. package/dist/query.d.ts.map +1 -1
  180. package/dist/query.js +3 -491
  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 +21 -11
  188. package/dist/reach.d.ts.map +1 -1
  189. package/dist/reach.js +358 -111
  190. package/dist/react.d.ts +19 -5
  191. package/dist/react.d.ts.map +1 -1
  192. package/dist/react.js +35 -15
  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 +22 -20
  197. package/dist/readiness.d.ts.map +1 -1
  198. package/dist/readiness.js +5 -13
  199. package/dist/reads.d.ts +38 -10
  200. package/dist/reads.d.ts.map +1 -1
  201. package/dist/reads.js +163 -83
  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 +18 -15
  206. package/dist/refresh.d.ts.map +1 -1
  207. package/dist/refresh.js +145 -60
  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 +49 -36
  212. package/dist/replica.d.ts.map +1 -1
  213. package/dist/replica.js +322 -198
  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 +55 -13
  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 -30
  227. package/dist/rows.d.ts.map +1 -1
  228. package/dist/rows.js +60 -120
  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 -49
  233. package/dist/save.d.ts.map +1 -1
  234. package/dist/save.js +736 -304
  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 +12 -95
  239. package/dist/search.d.ts.map +1 -1
  240. package/dist/search.js +10 -266
  241. package/dist/seed.d.ts +11 -2
  242. package/dist/seed.d.ts.map +1 -1
  243. package/dist/seed.js +71 -1
  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 -163
  299. package/dist/store.d.ts.map +1 -1
  300. package/dist/store.js +163 -754
  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 +9 -16
  325. package/dist/windows.d.ts.map +1 -1
  326. package/dist/windows.js +11 -75
  327. package/dist/wire.d.ts +91 -9
  328. package/dist/wire.d.ts.map +1 -1
  329. package/dist/wire.js +31 -6
  330. package/package.json +19 -19
  331. package/AGENTS.md +0 -299
  332. package/dist/acquisition.d.ts +0 -14
  333. package/dist/acquisition.d.ts.map +0 -1
  334. package/dist/acquisition.js +0 -24
  335. package/dist/attempt.d.ts +0 -16
  336. package/dist/attempt.d.ts.map +0 -1
  337. package/dist/attempt.js +0 -70
  338. package/dist/chat/acts.d.ts +0 -33
  339. package/dist/chat/acts.d.ts.map +0 -1
  340. package/dist/chat/acts.js +0 -36
  341. package/dist/chat/context.d.ts +0 -3
  342. package/dist/chat/context.d.ts.map +0 -1
  343. package/dist/chat/earlier.d.ts +0 -10
  344. package/dist/chat/earlier.d.ts.map +0 -1
  345. package/dist/chat/earlier.js +0 -54
  346. package/dist/chat/input.d.ts +0 -9
  347. package/dist/chat/input.d.ts.map +0 -1
  348. package/dist/chat/input.js +0 -99
  349. package/dist/chat/kit.d.ts +0 -61
  350. package/dist/chat/kit.d.ts.map +0 -1
  351. package/dist/chat/kit.js +0 -123
  352. package/dist/chat/lasting.d.ts +0 -6
  353. package/dist/chat/lasting.d.ts.map +0 -1
  354. package/dist/chat/lasting.js +0 -19
  355. package/dist/chat/list.d.ts +0 -27
  356. package/dist/chat/list.d.ts.map +0 -1
  357. package/dist/chat/list.js +0 -99
  358. package/dist/chat/markdown.d.ts +0 -20
  359. package/dist/chat/markdown.d.ts.map +0 -1
  360. package/dist/chat/markdown.js +0 -188
  361. package/dist/chat/message.d.ts +0 -6
  362. package/dist/chat/message.d.ts.map +0 -1
  363. package/dist/chat/message.js +0 -192
  364. package/dist/chat/messages.d.ts +0 -22
  365. package/dist/chat/messages.d.ts.map +0 -1
  366. package/dist/chat/messages.js +0 -155
  367. package/dist/chat/name.d.ts +0 -6
  368. package/dist/chat/name.d.ts.map +0 -1
  369. package/dist/chat/name.js +0 -37
  370. package/dist/chat/opened.d.ts +0 -11
  371. package/dist/chat/opened.d.ts.map +0 -1
  372. package/dist/chat/opened.js +0 -17
  373. package/dist/chat/overlay.d.ts +0 -31
  374. package/dist/chat/overlay.d.ts.map +0 -1
  375. package/dist/chat/overlay.js +0 -97
  376. package/dist/chat/parts.d.ts +0 -57
  377. package/dist/chat/parts.d.ts.map +0 -1
  378. package/dist/chat/parts.js +0 -119
  379. package/dist/chat/process.d.ts +0 -20
  380. package/dist/chat/process.d.ts.map +0 -1
  381. package/dist/chat/process.js +0 -32
  382. package/dist/chat/provider.d.ts +0 -63
  383. package/dist/chat/provider.d.ts.map +0 -1
  384. package/dist/chat/provider.js +0 -635
  385. package/dist/chat/question.d.ts +0 -9
  386. package/dist/chat/question.d.ts.map +0 -1
  387. package/dist/chat/question.js +0 -69
  388. package/dist/chat/questions.d.ts.map +0 -1
  389. package/dist/chat/read.d.ts.map +0 -1
  390. package/dist/chat/ready.d.ts +0 -34
  391. package/dist/chat/ready.d.ts.map +0 -1
  392. package/dist/chat/ready.js +0 -91
  393. package/dist/chat/style.d.ts +0 -4
  394. package/dist/chat/style.d.ts.map +0 -1
  395. package/dist/chat/style.js +0 -302
  396. package/dist/chat.d.ts +0 -14
  397. package/dist/chat.d.ts.map +0 -1
  398. package/dist/chat.js +0 -8
  399. package/dist/fence.d.ts +0 -6
  400. package/dist/fence.d.ts.map +0 -1
  401. package/dist/fence.js +0 -10
  402. package/dist/log.d.ts +0 -5
  403. package/dist/log.d.ts.map +0 -1
  404. package/dist/log.js +0 -14
  405. package/dist/read-side.d.ts +0 -25
  406. package/dist/read-side.d.ts.map +0 -1
  407. package/dist/read-side.js +0 -761
@@ -0,0 +1,60 @@
1
+ import type { AdapterFailure, Authorization, DiscoveredRoom, NotReady, RetryableRefusal } from './adapter.js';
2
+ import { type Reads } from './bootstrap.js';
3
+ import type { Installation, InstallationAmount, RoomCoverage } from './readiness.js';
4
+ import { advancement, type Refresher } from './refresh.js';
5
+ import type { ReplicaRecord } from './replica.js';
6
+ import type { Runtime } from './runtime.js';
7
+ import type { Live } from './socket.js';
8
+ import { type CoveredRoom, type InstallHold, type RuntimeStore, type Store } from './store.js';
9
+ import { type Unconfirmed } from './transfer.js';
10
+ type Standing = {
11
+ readonly key: number | null;
12
+ readonly confirmed: number;
13
+ };
14
+ export type Unheld = {
15
+ readonly staged: boolean;
16
+ };
17
+ export type Withheld = AdapterFailure | RetryableRefusal | NotReady | Unconfirmed;
18
+ type Landing = {
19
+ readonly kind: 'refreshed';
20
+ readonly from: Standing;
21
+ readonly remodelled: boolean;
22
+ } | {
23
+ readonly kind: 'bootstrapped';
24
+ readonly refreshed: boolean;
25
+ readonly from: Standing;
26
+ };
27
+ type Refreshed = {
28
+ kind: 'advanced';
29
+ record: ReplicaRecord;
30
+ from: Standing;
31
+ remodelled: boolean;
32
+ } | Exclude<Awaited<ReturnType<typeof advancement>>, {
33
+ kind: 'advanced';
34
+ }>;
35
+ export declare const ERASE_BATCH = 512;
36
+ export type InstallShare = {
37
+ readonly installing: boolean;
38
+ readonly downloading: boolean;
39
+ readonly bytes: InstallationAmount;
40
+ };
41
+ export declare function installShare(store: Store, { room, state }: RoomCoverage, held: ReadonlyMap<string, CoveredRoom>): InstallShare;
42
+ export declare function installationOf(installing: number, downloading: number, bytes: InstallationAmount): Installation;
43
+ export declare function roomInFlight(store: Store, locator: string): boolean;
44
+ export declare function sweep({ store, socket }: Runtime): void;
45
+ export declare function caughtUpTo(runtime: Runtime, locator: string): void;
46
+ export declare function catching(store: Store, locator: string): void;
47
+ export declare function standingAt(store: Store, locator: string, held: Pick<ReplicaRecord, 'key'> | undefined): Standing;
48
+ export declare function showing(system: Runtime, locator: string, roomVersion: string, held: string | undefined): void;
49
+ export declare function olderThan(system: Runtime, locator: string, roomVersion: string, held: string | undefined): boolean;
50
+ export declare function replaced(store: Store, locators: readonly string[]): void;
51
+ export declare function reachedBy({ store, socket }: Runtime, locator: string, roomVersion: string): Promise<boolean>;
52
+ export declare function behind({ store, socket }: Runtime, room: DiscoveredRoom): Promise<boolean>;
53
+ export declare function writtenAfter({ store, socket }: Runtime, locator: string, roomVersion: string, path: string): Promise<boolean>;
54
+ export declare function pullRefresh(runtime: Runtime, authorized: Authorization, record: ReplicaRecord, liveness: Live, hold: InstallHold, refresh: Refresher): Promise<Refreshed>;
55
+ export declare function pullBootstrap(runtime: Runtime, authorized: Authorization, room: DiscoveredRoom, local: RuntimeStore, liveness: Live, prior: ReplicaRecord | undefined, from?: Reads, unheld?: Unheld): Promise<import("./bootstrap.js").Bootstrapped | NotReady | import("./adapter.js").RevokedAuthorization | import("./adapter.js").RoomNotReadable | import("./adapter.js").TransportUncertainty | Unconfirmed | {
56
+ readonly kind: 'transport-uncertainty';
57
+ } | RetryableRefusal | import("./adapter.js").ScopedRefusal>;
58
+ export declare function publish(runtime: Runtime, local: RuntimeStore, room: DiscoveredRoom, reached: ReplicaRecord, landing: Landing, live: Live): Promise<boolean>;
59
+ export {};
60
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,537 @@
1
+ import { attachedModel } from './attached-model.js';
2
+ import { bootstrapRoom } from './bootstrap.js';
3
+ import { refusedForSpace } from './durability.js';
4
+ import { uncaught } from './failure.js';
5
+ import { name } from './listing.js';
6
+ import { NO_MODEL } from './model.js';
7
+ import { settle } from './queue.js';
8
+ import { advancement } from './refresh.js';
9
+ import { recoverReads } from './shown.js';
10
+ import { unconfirmed } from './transfer.js';
11
+ import { ROW_WEIGHT, yielded } from './turn.js';
12
+ // Bytes still arriving are reported at most this often, so readiness is not rebuilt for every chunk the network hands over while a slow link still moves the figure.
13
+ const ARRIVAL_REPORT_MS = 250;
14
+ const NOTHING_HELD = { bytes: 0 };
15
+ export const ERASE_BATCH = 512;
16
+ function transferGone(held) {
17
+ return {
18
+ ...held,
19
+ transfer: null,
20
+ arrived: null,
21
+ streaming: false,
22
+ underived: 0,
23
+ unindexed: [],
24
+ };
25
+ }
26
+ function amountOf(held, kept) {
27
+ if (held.transfer !== null) {
28
+ const owed = held.unindexed.reduce((sum, part) => sum + part.bytes, 0);
29
+ return {
30
+ done: held.transfer.done.bytes - Math.ceil(owed),
31
+ total: Math.max(held.arrived ?? 0, held.transfer.done.bytes),
32
+ };
33
+ }
34
+ return { done: kept, total: held.arrived ?? kept };
35
+ }
36
+ function setBack(held) {
37
+ const now = amountOf(held, NOTHING_HELD.bytes);
38
+ const earlier = held.startedOver;
39
+ return {
40
+ ...held,
41
+ startedOver: {
42
+ done: Math.max(now.done, earlier?.done ?? 0),
43
+ total: Math.max(now.total, earlier?.total ?? 0),
44
+ },
45
+ };
46
+ }
47
+ function owedIndexes(held, bytes, text) {
48
+ if (bytes <= 0 || text <= 0)
49
+ return held;
50
+ return { ...held, unindexed: [...held.unindexed, { bytes, text }] };
51
+ }
52
+ function built(held, done, text) {
53
+ const owed = [...held.unindexed];
54
+ let left = text;
55
+ while (!done && left > 0 && owed.length > 0) {
56
+ const [first] = owed;
57
+ if (left >= first.text) {
58
+ left -= first.text;
59
+ owed.shift();
60
+ continue;
61
+ }
62
+ owed[0] = {
63
+ bytes: (first.bytes * (first.text - left)) / first.text,
64
+ text: first.text - left,
65
+ };
66
+ left = 0;
67
+ }
68
+ return { ...held, unindexed: done ? [] : owed };
69
+ }
70
+ function batchEnd(entries, from, bytes) {
71
+ let end = from;
72
+ let spent = 0;
73
+ while (end < entries.length) {
74
+ const size = (entries[end].content?.length ?? 0) + ROW_WEIGHT;
75
+ if (spent + size > bytes && end > from)
76
+ break;
77
+ spent += size;
78
+ end += 1;
79
+ }
80
+ return end;
81
+ }
82
+ const UNSHARED = {
83
+ installing: false,
84
+ downloading: false,
85
+ bytes: { done: 0, total: 0 },
86
+ };
87
+ export function installShare(store, { room, state }, held) {
88
+ if (state === 'unadmitted')
89
+ return UNSHARED;
90
+ const install = store.installs.of(room);
91
+ const underway = state === 'acquiring' || (install.installing && state !== 'complete');
92
+ const kept = underway ? NOTHING_HELD.bytes : (held.get(room)?.bytes ?? NOTHING_HELD.bytes);
93
+ const now = amountOf(install, kept);
94
+ const earlier = underway ? install.startedOver : null;
95
+ return {
96
+ installing: underway,
97
+ downloading: underway && (install.streaming || install.arrived === null),
98
+ bytes: {
99
+ done: Math.max(now.done, earlier?.done ?? 0),
100
+ total: Math.max(now.total, earlier?.total ?? 0),
101
+ },
102
+ };
103
+ }
104
+ export function installationOf(installing, downloading, bytes) {
105
+ const step = installing === 0
106
+ ? null
107
+ : downloading > 0
108
+ ? 'downloading'
109
+ : bytes.done < bytes.total
110
+ ? 'writing'
111
+ : 'replaying';
112
+ return { step, bytes };
113
+ }
114
+ export function roomInFlight(store, locator) {
115
+ const { catching, transfer } = store.installs.of(locator);
116
+ return catching || transfer !== null;
117
+ }
118
+ function installing(runtime, locator) {
119
+ runtime.store.installs.change(locator, (held) => ({ ...held, installing: true }));
120
+ runtime.store.readiness.queue([locator]);
121
+ }
122
+ function installed(runtime, locator) {
123
+ if (!runtime.store.installs.of(locator).installing)
124
+ return;
125
+ runtime.store.installs.change(locator, (held) => ({ ...held, installing: false }));
126
+ runtime.store.readiness.queue([locator]);
127
+ }
128
+ export function sweep({ store, socket }) {
129
+ if (store.device.now().sweeping || socket.closed())
130
+ return;
131
+ store.device.set({ sweeping: true });
132
+ void (async () => {
133
+ try {
134
+ while (!socket.closed() && (await store.durably((local) => local.erase(null, ERASE_BATCH)))) {
135
+ await yielded();
136
+ }
137
+ }
138
+ catch (error) {
139
+ uncaught(error);
140
+ }
141
+ finally {
142
+ store.device.set({ sweeping: false });
143
+ }
144
+ })();
145
+ }
146
+ export function caughtUpTo(runtime, locator) {
147
+ if (!runtime.store.installs.of(locator).catching)
148
+ return;
149
+ runtime.store.installs.change(locator, (held) => ({ ...held, catching: false }));
150
+ recoverReads(runtime, [locator]);
151
+ }
152
+ export function catching(store, locator) {
153
+ store.installs.change(locator, (held) => ({ ...held, catching: true }));
154
+ }
155
+ export function standingAt(store, locator, held) {
156
+ return { key: held?.key ?? null, confirmed: store.installs.of(locator).confirmations };
157
+ }
158
+ function standsAt(store, locator, held, from) {
159
+ const now = standingAt(store, locator, held);
160
+ return now.key === from.key && now.confirmed === from.confirmed;
161
+ }
162
+ function shownAt({ store, socket }, locator, held) {
163
+ const raised = store.installs.of(locator).highest ?? undefined;
164
+ if (held === undefined || raised === undefined)
165
+ return held ?? raised;
166
+ return socket.reads.reached(locator, held, raised) ? held : raised;
167
+ }
168
+ export function showing(system, locator, roomVersion, held) {
169
+ const at = shownAt(system, locator, held);
170
+ if (at === undefined || !system.socket.reads.reached(locator, at, roomVersion)) {
171
+ system.store.installs.change(locator, (room) => ({ ...room, highest: roomVersion }));
172
+ }
173
+ }
174
+ export function olderThan(system, locator, roomVersion, held) {
175
+ const { store, socket } = system;
176
+ if (store.installs.of(locator).beyondHorizon)
177
+ return false;
178
+ const at = shownAt(system, locator, held);
179
+ return (at !== undefined &&
180
+ socket.reads.reached(locator, at, roomVersion) &&
181
+ !socket.reads.reached(locator, roomVersion, at));
182
+ }
183
+ async function older(runtime, locator, roomVersion) {
184
+ const { store } = runtime;
185
+ if (store.installs.of(locator).beyondHorizon)
186
+ return false;
187
+ return olderThan(runtime, locator, roomVersion, (await store.record(locator))?.roomVersion);
188
+ }
189
+ export function replaced(store, locators) {
190
+ for (const locator of locators) {
191
+ store.installs.change(locator, (held) => ({ ...held, highest: null, beyondHorizon: true }));
192
+ }
193
+ }
194
+ export async function reachedBy({ store, socket }, locator, roomVersion) {
195
+ const held = await store.record(locator);
196
+ return held !== undefined && socket.reads.reached(locator, held.roomVersion, roomVersion);
197
+ }
198
+ export async function behind({ store, socket }, room) {
199
+ const held = (await store.record(room.locator))?.roomVersion;
200
+ return held !== undefined && !socket.reads.reached(room.locator, held, room.roomVersion);
201
+ }
202
+ export async function writtenAfter({ store, socket }, locator, roomVersion, path) {
203
+ const held = await store.record(locator);
204
+ if (held === undefined)
205
+ return false;
206
+ const [entry] = await (await store.open()).entries(held.key, 'confirmed', [path]);
207
+ const written = entry?.written ?? undefined;
208
+ return (written !== undefined &&
209
+ socket.reads.reached(locator, written, roomVersion) &&
210
+ !socket.reads.reached(locator, roomVersion, written));
211
+ }
212
+ async function writtenLater(runtime, local, locator, key, paths, roomVersion, heldAt) {
213
+ if (paths.length === 0)
214
+ return new Set();
215
+ const { reached } = runtime.socket.reads;
216
+ const behindShown = heldAt === undefined
217
+ ? await older(runtime, locator, roomVersion)
218
+ : olderThan(runtime, locator, roomVersion, heldAt);
219
+ if (!behindShown)
220
+ return new Set();
221
+ const entries = await local.entries(key, 'confirmed', paths);
222
+ return new Set(entries.flatMap(({ path, written }) => written !== null &&
223
+ reached(locator, written, roomVersion) &&
224
+ !reached(locator, roomVersion, written)
225
+ ? [path]
226
+ : []));
227
+ }
228
+ function remodel(runtime, answers, held) {
229
+ const answer = answers?.collection;
230
+ if (answer === undefined)
231
+ return held;
232
+ return { collection: attachedModel(answer, runtime.roomTypes) };
233
+ }
234
+ function refreshingOf(runtime, local, locator, key, composition, liveness, replaying = false, heldAt) {
235
+ const { store } = runtime;
236
+ const write = replaying ? store.finishingWrite : store.exclusive;
237
+ return {
238
+ turn() {
239
+ if (replaying)
240
+ installing(runtime, locator);
241
+ },
242
+ prior: async (paths) => new Map((await local.entries(key, 'refreshed', paths)).map((entry) => [entry.path, entry])),
243
+ later: (paths, roomVersion) => writtenLater(runtime, local, locator, key, paths, roomVersion, heldAt),
244
+ async stage(page) {
245
+ for (let written = 0;;) {
246
+ const end = batchEnd(page.entries, written, store.stageBytes());
247
+ const last = end === page.entries.length;
248
+ const entries = page.entries.slice(written, end);
249
+ const staged = await write(async () => {
250
+ if (!liveness())
251
+ return false;
252
+ await store.refreshPage(local, key, composition, last
253
+ ? { ...page, entries }
254
+ : { entries, removals: [], folders: [], folderRemovals: [] });
255
+ return true;
256
+ });
257
+ if (!staged)
258
+ return false;
259
+ if (last)
260
+ return true;
261
+ written = end;
262
+ }
263
+ },
264
+ };
265
+ }
266
+ export async function pullRefresh(runtime, authorized, record, liveness, hold, refresh) {
267
+ if (!liveness())
268
+ return unconfirmed;
269
+ const { store } = runtime;
270
+ const from = standingAt(store, record.locator, record);
271
+ const local = await store.open();
272
+ try {
273
+ await store.exclusive(() => local.unrefresh(record.key));
274
+ const result = await advancement(async (authorization, request) => {
275
+ hold.release();
276
+ try {
277
+ return await refresh(authorization, request);
278
+ }
279
+ finally {
280
+ hold.take();
281
+ }
282
+ }, authorized, record, (models, kept) => (liveness() ? remodel(runtime, models, kept) : kept), liveness, refreshingOf(runtime, local, record.locator, record.key, store.composed(record), liveness, false, record.roomVersion));
283
+ if (result.kind !== 'advanced')
284
+ return result;
285
+ return {
286
+ kind: 'advanced',
287
+ record: result.record,
288
+ from,
289
+ remodelled: result.record.model !== record.model,
290
+ };
291
+ }
292
+ catch (error) {
293
+ if (refusedForSpace(error))
294
+ return unconfirmed;
295
+ throw error;
296
+ }
297
+ }
298
+ async function abandoned(runtime, local, locator) {
299
+ await local.abandon(locator);
300
+ runtime.store.installs.change(locator, (held) => transferGone(setBack(held)));
301
+ recoverReads(runtime, [locator]);
302
+ runtime.store.readiness.queue([locator]);
303
+ sweep(runtime);
304
+ }
305
+ function staging(runtime, local, liveness, unheld) {
306
+ const { store, socket } = runtime;
307
+ const derived = async (locator, key, composition) => {
308
+ store.installs.change(locator, (held) => ({ ...held, underived: 0 }));
309
+ for (;;) {
310
+ if (!liveness())
311
+ return false;
312
+ const done = await store.finishingWrite(async () => liveness() ? store.rederive(local, key, composition) : null);
313
+ if (done === null)
314
+ return false;
315
+ store.installs.change(locator, (held) => built(held, done.done, done.text));
316
+ runtime.store.readiness.queue([locator]);
317
+ if (done.done)
318
+ return true;
319
+ }
320
+ };
321
+ return {
322
+ held: (locator) => store.installs.of(locator).transfer,
323
+ async turn(locator, step) {
324
+ installing(runtime, locator);
325
+ return step === 'downloading' ? socket.heldStream() : () => { };
326
+ },
327
+ unqueued: socket.unqueued,
328
+ queued: socket.queued,
329
+ arriving(locator) {
330
+ let ended = false;
331
+ return {
332
+ at(bytes) {
333
+ if (ended)
334
+ return;
335
+ store.installs.change(locator, (held) => ({
336
+ ...held,
337
+ arrived: bytes,
338
+ streaming: true,
339
+ }));
340
+ const due = store.installs.arrivalsDue(locator, performance.now(), ARRIVAL_REPORT_MS);
341
+ if (due.length > 0)
342
+ runtime.store.readiness.queue(due);
343
+ },
344
+ end() {
345
+ if (ended)
346
+ return;
347
+ ended = true;
348
+ if (!store.installs.of(locator).streaming)
349
+ return;
350
+ store.installs.change(locator, (held) => ({ ...held, streaming: false }));
351
+ runtime.store.readiness.queue([locator]);
352
+ },
353
+ };
354
+ },
355
+ streamed: socket.streamed,
356
+ async stage(record, page, composition) {
357
+ const { locator } = record;
358
+ installing(runtime, locator);
359
+ if (!liveness())
360
+ return null;
361
+ const key = await store.startingWrite(async () => {
362
+ if (!liveness())
363
+ return null;
364
+ return local.stage(record, composition, page);
365
+ });
366
+ if (key === null || !liveness())
367
+ return null;
368
+ const before = store.installs.of(locator);
369
+ const prior = before.transfer?.done.bytes ?? 0;
370
+ const held = { ...record, key };
371
+ const text = page.entries.reduce((sum, entry) => sum + (entry.content?.length ?? 0), 0);
372
+ const owed = text + before.underived;
373
+ store.installs.change(locator, (room) => ({
374
+ ...owedIndexes(room, record.done.bytes - prior, text),
375
+ transfer: held,
376
+ underived: owed,
377
+ }));
378
+ installing(runtime, locator);
379
+ recoverReads(runtime, [locator]);
380
+ if (owed < store.deriveBytes())
381
+ return held;
382
+ return (await derived(locator, key, composition)) ? held : null;
383
+ },
384
+ async resume(record, parts, composition) {
385
+ const { locator } = record;
386
+ installing(runtime, locator);
387
+ if (!liveness())
388
+ return null;
389
+ const prior = unheld === undefined ? await store.record(locator) : undefined;
390
+ const published = prior !== undefined && prior.declaration.replica.selection === record.selection
391
+ ? prior.key
392
+ : null;
393
+ const kept = unheld?.staged ?? (await local.held()).staged.has(locator);
394
+ if (published === null && !kept)
395
+ return { record: null, staged: new Set() };
396
+ const resumed = await store.startingWrite(async () => {
397
+ if (!liveness())
398
+ return null;
399
+ return local.resume(record, composition, parts.map((part) => part.id), published);
400
+ });
401
+ if (resumed === null || !liveness())
402
+ return null;
403
+ const parted = new Set(resumed.staged);
404
+ if (resumed.key === null)
405
+ return { record: null, staged: parted };
406
+ const bytes = parts.reduce((sum, part) => sum + (parted.has(part.id) ? part.bytes : 0), 0);
407
+ const held = {
408
+ ...record,
409
+ transfer: resumed.transfer,
410
+ key: resumed.key,
411
+ done: { bytes },
412
+ };
413
+ store.installs.change(locator, (room) => ({ ...room, transfer: held }));
414
+ recoverReads(runtime, [locator]);
415
+ store.readiness.queue([locator]);
416
+ return { record: held, staged: parted };
417
+ },
418
+ derive: derived,
419
+ async refreshing(locator, key, composition) {
420
+ await store.exclusive(() => local.unrefresh(key));
421
+ return refreshingOf(runtime, local, locator, key, composition, liveness, true);
422
+ },
423
+ abandon: (locator) => store.exclusive(async () => {
424
+ if (liveness())
425
+ await abandoned(runtime, local, locator);
426
+ }),
427
+ setAside: async (locator) => {
428
+ if (!liveness())
429
+ return;
430
+ store.installs.change(locator, (held) => transferGone(setBack(held)));
431
+ recoverReads(runtime, [locator]);
432
+ store.readiness.queue([locator]);
433
+ },
434
+ release: (key) => store.exclusive(async () => {
435
+ await local.release(key);
436
+ sweep(runtime);
437
+ }),
438
+ };
439
+ }
440
+ export async function pullBootstrap(runtime, authorized, room, local, liveness, prior, from = runtime.socket.reads, unheld) {
441
+ if (!liveness())
442
+ return unconfirmed;
443
+ const { store } = runtime;
444
+ if (prior !== undefined) {
445
+ catching(store, room.locator);
446
+ recoverReads(runtime, [room.locator]);
447
+ }
448
+ try {
449
+ const result = await bootstrapRoom(from, authorized, room, {
450
+ collection: prior?.model ?? runtime.presence.unheldModel(room.locator) ?? NO_MODEL,
451
+ }, runtime.builtIn, runtime.typedPaths, (models, held) => (liveness() ? remodel(runtime, models, held) : held), liveness, staging(runtime, local, liveness, unheld));
452
+ if (result.kind === 'staged' &&
453
+ (await older(runtime, room.locator, result.record.roomVersion))) {
454
+ caughtUpTo(runtime, room.locator);
455
+ installed(runtime, room.locator);
456
+ await abandoned(runtime, local, room.locator);
457
+ return { kind: 'transport-uncertainty' };
458
+ }
459
+ if (result.kind !== 'staged') {
460
+ caughtUpTo(runtime, room.locator);
461
+ installed(runtime, room.locator);
462
+ }
463
+ return result;
464
+ }
465
+ catch (error) {
466
+ caughtUpTo(runtime, room.locator);
467
+ installed(runtime, room.locator);
468
+ if (refusedForSpace(error))
469
+ return unconfirmed;
470
+ throw error;
471
+ }
472
+ }
473
+ export function publish(runtime, local, room, reached, landing, live) {
474
+ const { store } = runtime;
475
+ let published = true;
476
+ const landed = settle(runtime, [room.locator], async (held) => {
477
+ if (!live()) {
478
+ caughtUpTo(runtime, room.locator);
479
+ return [];
480
+ }
481
+ const prior = held.get(room.locator)?.replica;
482
+ if (!standsAt(store, room.locator, prior?.record, landing.from)) {
483
+ published = false;
484
+ if (landing.kind === 'refreshed') {
485
+ await local.unrefresh(reached.key);
486
+ return [];
487
+ }
488
+ caughtUpTo(runtime, room.locator);
489
+ await abandoned(runtime, local, room.locator);
490
+ return [];
491
+ }
492
+ const record = landing.kind === 'refreshed' && prior !== undefined
493
+ ? {
494
+ ...prior.record,
495
+ roomVersion: reached.roomVersion,
496
+ ...(landing.remodelled ? { model: reached.model } : {}),
497
+ }
498
+ : reached;
499
+ return [
500
+ {
501
+ locator: room.locator,
502
+ record,
503
+ installed: landing.kind === 'refreshed'
504
+ ? { refreshed: true }
505
+ : {
506
+ published: { from: prior?.record.key ?? null },
507
+ ...(landing.refreshed ? { refreshed: true } : {}),
508
+ },
509
+ after() {
510
+ runtime.presence.installed(room.locator, landing.kind === 'bootstrapped');
511
+ runtime.retries.succeeded('download', room.locator);
512
+ store.prepareAgain(room.locator);
513
+ if (landing.kind === 'bootstrapped') {
514
+ store.installs.change(room.locator, (held) => ({
515
+ ...transferGone(held),
516
+ highest: null,
517
+ beyondHorizon: false,
518
+ startedOver: null,
519
+ catching: false,
520
+ }));
521
+ if (prior !== undefined && prior.record.key !== record.key)
522
+ sweep(runtime);
523
+ void name(runtime, room.locator);
524
+ }
525
+ },
526
+ },
527
+ ];
528
+ }).then(() => published, (error) => {
529
+ if (!refusedForSpace(error))
530
+ throw error;
531
+ caughtUpTo(runtime, room.locator);
532
+ return published;
533
+ });
534
+ return landing.kind === 'refreshed'
535
+ ? landed
536
+ : landed.finally(() => installed(runtime, room.locator));
537
+ }
@@ -0,0 +1,7 @@
1
+ import type { Runtime } from './runtime.js';
2
+ export declare function scheduleCurrency(runtime: Runtime): void;
3
+ export declare function spaceFreed(runtime: Runtime): void;
4
+ export declare function close({ store, socket, presence, conversations, recovery, liveQueries, figures, }: Runtime): void;
5
+ export declare function stop(runtime: Runtime): Promise<void>;
6
+ export declare function start(runtime: Runtime, signal: AbortSignal | undefined): void;
7
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAoO5C,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,QAOhD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,QAQ1C;AAED,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,MAAM,EACN,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,WAAW,EACX,OAAO,GACR,EAAE,OAAO,QAST;AAED,wBAAsB,IAAI,CAAC,OAAO,EAAE,OAAO,iBAS1C;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,SAAS,QA2CtE"}