@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
package/dist/bootstrap.js CHANGED
@@ -1,129 +1,329 @@
1
+ import { declared } from './declaration.js';
1
2
  import { transferIdentity } from './identity.js';
2
- import { advancement } from './refresh.js';
3
- import { acceptedBinaries } from './overlay.js';
4
- import { readStaged } from './replica.js';
3
+ import { advancement, pageEntries } from './refresh.js';
4
+ import { entriesIn } from './shared.js';
5
+ import { compositionOf } from './replica.js';
5
6
  import { unconfirmed } from './transfer.js';
6
- const RESUMABLE = new Set([
7
- 'transport-uncertainty',
8
- 'retryable-refusal',
9
- 'unconfirmed',
10
- ]);
11
- function pageLayer(page) {
12
- return {
13
- documents: page.documents,
14
- revisions: page.revisions,
15
- changes: page.changes,
16
- written: Object.fromEntries(Object.keys(page.documents).map((path) => [path, page.roomVersion])),
17
- binaries: acceptedBinaries(page.binaryFiles),
18
- };
7
+ const NOTHING_PRIOR = () => Promise.resolve(new Map());
8
+ const PARTS_IN_FLIGHT = 6;
9
+ function textOf(page) {
10
+ let text = 0;
11
+ for (const [, content] of entriesIn(page.documents))
12
+ text += content.length;
13
+ return text;
19
14
  }
20
- async function heldTransfer(staging, room) {
21
- const record = staging.held(room.locator);
22
- if (record === null)
23
- return null;
24
- if (record.selection === room.replica.selection) {
25
- return { record, layer: await staging.staged(record) };
26
- }
27
- await staging.abandon(room.locator);
28
- return null;
29
- }
30
- function pooled(pool, layer) {
15
+ async function pageOf(page, part) {
31
16
  return {
32
- documents: { ...pool?.documents, ...layer.documents },
33
- revisions: { ...pool?.revisions, ...layer.revisions },
17
+ entries: await pageEntries(page, [], page.roomVersion, NOTHING_PRIOR),
18
+ folders: page.folders ?? [],
19
+ ...(part === undefined ? {} : { part }),
34
20
  };
35
21
  }
36
- export async function bootstrapRoom(adapter, authorization, room, held, remodel, continuing, staging, reuse) {
37
- const first = await bundle(adapter, authorization, room, held, remodel, continuing, staging, await heldTransfer(staging, room), reuse);
22
+ export async function bootstrapRoom(adapter, authorization, room, held, builtIn, typedPaths, remodel, continuing, staging) {
23
+ if (staging.held(room.locator) !== null)
24
+ await staging.abandon(room.locator);
25
+ const begun = () => started(adapter, authorization, room, held, builtIn, typedPaths, remodel, continuing, staging);
26
+ const first = await begun();
38
27
  if (first.kind !== 'expired')
39
28
  return first;
40
- await staging.abandon(room.locator);
41
- const replacement = await bundle(adapter, authorization, room, held, remodel, continuing, staging, null, pooled(reuse, first.held));
42
- if (replacement.kind !== 'expired')
43
- return replacement;
44
- await staging.abandon(room.locator);
45
- return unconfirmed;
29
+ await staging.setAside(room.locator);
30
+ try {
31
+ const replacement = await begun();
32
+ if (replacement.kind !== 'expired')
33
+ return replacement;
34
+ await staging.abandon(room.locator);
35
+ return unconfirmed;
36
+ }
37
+ finally {
38
+ if (first.key !== null)
39
+ await staging.release(first.key);
40
+ }
41
+ }
42
+ function dropped(ahead) {
43
+ void ahead?.fetched.then(({ next, written }) => {
44
+ written();
45
+ dropped(next);
46
+ }, () => { });
46
47
  }
47
- async function bundle(adapter, authorization, room, held, remodel, continuing, staging, kept, pool) {
48
+ async function started(adapter, authorization, room, held, builtIn, typedPaths, remodel, continuing, staging) {
49
+ const mode = { paged: false };
50
+ let outcome;
51
+ try {
52
+ outcome = await bundle(adapter, authorization, room, held, builtIn, typedPaths, remodel, continuing, staging, mode);
53
+ }
54
+ catch (error) {
55
+ await stopped(staging, room.locator, mode).catch(() => { });
56
+ throw error;
57
+ }
58
+ if (outcome.kind !== 'staged' && outcome.kind !== 'expired') {
59
+ await stopped(staging, room.locator, mode);
60
+ }
61
+ return outcome;
62
+ }
63
+ function stopped(staging, locator, mode) {
64
+ return mode.paged ? staging.abandon(locator) : staging.setAside(locator);
65
+ }
66
+ async function bundle(adapter, authorization, room, held, builtIn, typedPaths, remodel, continuing, staging, mode) {
48
67
  const locator = room.locator;
49
68
  const selection = room.replica.selection;
50
- const documents = { ...kept?.layer.documents };
51
- const revisions = { ...kept?.layer.revisions };
52
- const changes = { ...kept?.layer.changes };
53
- const written = { ...kept?.layer.written };
54
- const binaries = { ...kept?.layer.binaries };
55
- let transfer = kept?.record ?? null;
56
- while (transfer === null || transfer.pageToken !== null) {
57
- if (!continuing())
58
- return unconfirmed;
59
- const page = await adapter.bootstrap(authorization, {
69
+ const ending = new AbortController();
70
+ const arriving = staging.arriving(locator);
71
+ const downloaded = await staging.turn(locator, 'downloading');
72
+ const asking = (token) => adapter.bootstrap(authorization, {
73
+ locator,
74
+ selection,
75
+ signal: ending.signal,
76
+ ...(token === null
77
+ ? { arriving: (bytes) => arriving.at(bytes) }
78
+ : { pageToken: token }),
79
+ });
80
+ const fetching = (token) => {
81
+ const fetched = (async () => {
82
+ await staging.unqueued();
83
+ const page = continuing() ? await asking(token) : unconfirmed;
84
+ if (page.kind !== 'bootstrap')
85
+ return { page, next: null, written: () => { } };
86
+ const written = staging.queued(textOf(page));
87
+ const later = page.pageToken;
88
+ if (later === undefined && page.parts === undefined) {
89
+ downloaded();
90
+ arriving.end();
91
+ }
92
+ return { page, written, next: later === undefined || !continuing() ? null : fetching(later) };
93
+ })();
94
+ fetched.catch(() => { });
95
+ return { fetched };
96
+ };
97
+ let transfer = null;
98
+ let ahead = fetching(null);
99
+ try {
100
+ while (ahead !== null) {
101
+ if (!continuing())
102
+ return unconfirmed;
103
+ const fetched = await ahead.fetched;
104
+ ahead = fetched.next;
105
+ try {
106
+ if (!continuing())
107
+ return unconfirmed;
108
+ const page = fetched.page;
109
+ if (page.kind === 'beyond-horizon')
110
+ return { kind: 'expired', key: transfer?.key ?? null };
111
+ if (page.kind !== 'bootstrap')
112
+ return page;
113
+ if (transfer === null && page.parts !== undefined) {
114
+ const parted = await parts(page, page.parts);
115
+ if (parted.kind !== 'parted')
116
+ return parted;
117
+ transfer = parted.transfer;
118
+ continue;
119
+ }
120
+ if (transfer === null)
121
+ mode.paged = true;
122
+ const models = remodel(page.models, transfer?.models ?? held);
123
+ const staged = await staging.stage({
124
+ locator,
125
+ transfer: transfer?.transfer ?? transferIdentity(),
126
+ selection,
127
+ from: transfer !== null && adapter.reached(locator, page.roomVersion, transfer.from)
128
+ ? transfer.from
129
+ : page.roomVersion,
130
+ last: transfer !== null && !adapter.reached(locator, page.roomVersion, transfer.last)
131
+ ? transfer.last
132
+ : page.roomVersion,
133
+ done: { bytes: (transfer?.done.bytes ?? 0) + (page.bytes ?? 0) },
134
+ models,
135
+ key: transfer?.key ?? null,
136
+ }, await pageOf(page), compositionOf(models.collection, room.typedSelection, builtIn, typedPaths));
137
+ if (staged === null)
138
+ return unconfirmed;
139
+ transfer = staged;
140
+ }
141
+ finally {
142
+ fetched.written();
143
+ }
144
+ }
145
+ }
146
+ finally {
147
+ ending.abort();
148
+ downloaded();
149
+ arriving.end();
150
+ dropped(ahead);
151
+ }
152
+ if (transfer === null)
153
+ return unconfirmed;
154
+ return installed(transfer);
155
+ async function parts(head, listed) {
156
+ const models = remodel(head.models, held);
157
+ const composition = compositionOf(models.collection, room.typedSelection, builtIn, typedPaths);
158
+ const resumed = await staging.resume({
60
159
  locator,
160
+ transfer: transferIdentity(),
61
161
  selection,
62
- ...(transfer?.pageToken == null ? {} : { pageToken: transfer.pageToken }),
63
- ...(pool === null ? {} : { held: pool }),
64
- });
65
- if (page.kind === 'beyond-horizon')
66
- return { kind: 'expired', held: { documents, revisions } };
67
- if (page.kind !== 'bootstrap') {
68
- if (!RESUMABLE.has(page.kind))
69
- await staging.abandon(locator);
70
- return page;
71
- }
72
- transfer = {
162
+ from: head.roomVersion,
163
+ last: head.roomVersion,
164
+ done: { bytes: 0 },
165
+ models,
166
+ key: null,
167
+ }, listed, composition);
168
+ if (resumed === null)
169
+ return unconfirmed;
170
+ let staged = resumed.record ?? {
73
171
  locator,
74
- transfer: transfer?.transfer ?? transferIdentity(),
172
+ transfer: transferIdentity(),
75
173
  selection,
76
- from: transfer !== null && adapter.reached(locator, page.roomVersion, transfer.from)
77
- ? transfer.from
78
- : page.roomVersion,
79
- last: transfer !== null && !adapter.reached(locator, page.roomVersion, transfer.last)
80
- ? transfer.last
81
- : page.roomVersion,
82
- pageToken: page.pageToken ?? null,
83
- models: remodel(page.models, transfer?.models ?? held),
174
+ from: head.roomVersion,
175
+ last: head.roomVersion,
176
+ done: { bytes: 0 },
177
+ models,
178
+ key: null,
84
179
  };
85
- const staged = pageLayer(page);
86
- if (!(await staging.stage(transfer, staged)))
87
- return unconfirmed;
88
- Object.assign(documents, staged.documents);
89
- Object.assign(revisions, staged.revisions);
90
- Object.assign(changes, staged.changes);
91
- Object.assign(written, staged.written);
92
- Object.assign(binaries, staged.binaries);
93
- }
94
- const record = {
95
- locator,
96
- name: room.name,
97
- handle: room.handle,
98
- operations: room.operations,
99
- replica: room.replica,
100
- model: transfer.models.collection,
101
- typedSelection: room.typedSelection ?? null,
102
- selectionModel: transfer.models.selection,
103
- providerOwnedPaths: room.providerOwnedPaths,
104
- roomVersion: transfer.from,
105
- transfer: transfer.transfer,
106
- documents,
107
- binaries,
108
- revisions,
109
- changes,
110
- written,
111
- };
112
- const reconciled = transfer.last === transfer.from
113
- ? { kind: 'still-current' }
114
- : await advancement(adapter, authorization, record, remodel, continuing);
115
- if (reconciled.kind === 'advanced' || reconciled.kind === 'still-current') {
116
- const read = readStaged(reconciled.kind === 'advanced' ? reconciled.record : record);
117
- if (read.kind === 'refused') {
118
- await staging.abandon(locator);
119
- return read;
180
+ const wanted = listed.filter((part) => !resumed.staged.has(part.id));
181
+ let arrived = staged.done.bytes;
182
+ const partial = new Map();
183
+ const report = () => {
184
+ let bytes = arrived;
185
+ for (const held of partial.values())
186
+ bytes += held;
187
+ arriving.at(bytes);
188
+ };
189
+ report();
190
+ const arrivals = [];
191
+ let woken = null;
192
+ let next = 0;
193
+ let flying = 0;
194
+ let halted = false;
195
+ let stopped = false;
196
+ let admitted = Promise.resolve();
197
+ const fetched = () => {
198
+ if ((next < wanted.length && !halted) || flying > 0)
199
+ return;
200
+ downloaded();
201
+ arriving.end();
202
+ };
203
+ const landed = (one) => {
204
+ flying -= 1;
205
+ if (stopped)
206
+ one.written();
207
+ else
208
+ arrivals.push(one);
209
+ woken?.();
210
+ ask();
211
+ fetched();
212
+ };
213
+ const fetch = async (part) => {
214
+ let written = () => { };
215
+ const admission = admitted.then(async () => {
216
+ await staging.unqueued();
217
+ written = staging.queued(part.bytes);
218
+ });
219
+ admitted = admission;
220
+ await admission;
221
+ const page = continuing()
222
+ ? await adapter.bootstrap(authorization, {
223
+ locator,
224
+ selection,
225
+ signal: ending.signal,
226
+ pageToken: part.id,
227
+ arriving: (bytes) => {
228
+ partial.set(part.id, Math.min(bytes, part.bytes));
229
+ report();
230
+ },
231
+ })
232
+ : unconfirmed;
233
+ landed({ part, page, written });
234
+ };
235
+ const ask = () => {
236
+ while (!stopped && !halted && flying < PARTS_IN_FLIGHT && next < wanted.length) {
237
+ const part = wanted[next];
238
+ next += 1;
239
+ flying += 1;
240
+ fetch(part).catch((error) => landed({ part, page: unconfirmed, written: () => { }, error }));
241
+ }
242
+ };
243
+ let failed = null;
244
+ ask();
245
+ fetched();
246
+ try {
247
+ for (;;) {
248
+ while (arrivals.length === 0) {
249
+ if (flying === 0 && (halted || next >= wanted.length))
250
+ break;
251
+ await new Promise((wake) => (woken = wake));
252
+ woken = null;
253
+ }
254
+ const one = arrivals.shift();
255
+ if (one === undefined)
256
+ break;
257
+ const { part, page, written, error } = one;
258
+ try {
259
+ if (error !== undefined)
260
+ throw error;
261
+ if (!continuing())
262
+ return unconfirmed;
263
+ if (page.kind !== 'bootstrap') {
264
+ halted = true;
265
+ failed ??= page.kind === 'beyond-horizon' ? unconfirmed : page;
266
+ continue;
267
+ }
268
+ partial.delete(part.id);
269
+ arrived += part.bytes;
270
+ report();
271
+ const kept = await staging.stage({ ...staged, done: { bytes: staged.done.bytes + part.bytes } }, await pageOf({ ...page, roomVersion: head.roomVersion }, part.id), composition);
272
+ if (kept === null)
273
+ return unconfirmed;
274
+ staged = kept;
275
+ }
276
+ finally {
277
+ written();
278
+ }
279
+ }
280
+ }
281
+ finally {
282
+ stopped = true;
283
+ for (const one of arrivals.splice(0))
284
+ one.written();
285
+ }
286
+ if (failed !== null)
287
+ return failed;
288
+ if (staged.key === null) {
289
+ const empty = await staging.stage(staged, { entries: [], folders: [] }, composition);
290
+ if (empty === null)
291
+ return unconfirmed;
292
+ staged = empty;
120
293
  }
121
- return { kind: 'staged', confirmed: read.confirmed, stored: record };
294
+ return { kind: 'parted', transfer: staged };
122
295
  }
123
- if (reconciled.kind === 'beyond-horizon') {
124
- return { kind: 'expired', held: { documents, revisions } };
296
+ async function installed(transfer) {
297
+ const composition = compositionOf(transfer.models.collection, room.typedSelection, builtIn, typedPaths);
298
+ if (!(await staging.derive(locator, transfer.key, composition)))
299
+ return unconfirmed;
300
+ await staging.turn(locator, 'replaying');
301
+ if (!continuing())
302
+ return unconfirmed;
303
+ const record = {
304
+ locator,
305
+ declaration: declared(room),
306
+ model: transfer.models.collection,
307
+ roomVersion: transfer.from,
308
+ transfer: transfer.transfer,
309
+ inventory: transfer.done,
310
+ key: transfer.key,
311
+ };
312
+ const last = transfer.last;
313
+ const refresh = adapter.refresh;
314
+ const reconciled = last === transfer.from &&
315
+ (staging.streamed || adapter.reached(locator, last, room.roomVersion))
316
+ ? { kind: 'still-current' }
317
+ : refresh === undefined
318
+ ? unconfirmed
319
+ : await advancement(refresh, authorization, record, remodel, continuing, await staging.refreshing(locator, record.key, composition));
320
+ if (reconciled.kind === 'advanced') {
321
+ return { kind: 'staged', record: reconciled.record, refreshed: true };
322
+ }
323
+ if (reconciled.kind === 'still-current')
324
+ return { kind: 'staged', record, refreshed: false };
325
+ if (reconciled.kind === 'beyond-horizon')
326
+ return { kind: 'expired', key: record.key };
327
+ return reconciled;
125
328
  }
126
- if (!RESUMABLE.has(reconciled.kind))
127
- await staging.abandon(locator);
128
- return reconciled;
129
329
  }
package/dist/cell.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export type Cell<T> = {
2
+ now(): T;
3
+ set(change: Partial<T>): void;
4
+ };
5
+ export declare function createCell<T extends object>(first: T): Cell<T>;
6
+ //# sourceMappingURL=cell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cell.d.ts","sourceRoot":"","sources":["../src/cell.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI;IACpB,GAAG,IAAI,CAAC,CAAC;IACT,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAQ9D"}
package/dist/cell.js ADDED
@@ -0,0 +1,9 @@
1
+ export function createCell(first) {
2
+ let held = first;
3
+ return {
4
+ now: () => held,
5
+ set(change) {
6
+ held = { ...held, ...change };
7
+ },
8
+ };
9
+ }
@@ -0,0 +1,12 @@
1
+ import type { DocumentQuery, GroupQuery } from '@agentshouse/mdmodel';
2
+ import type { MdRuntimeClient } from './client.js';
3
+ import type { DocumentResult, GroupResult, PendingResult } from './query.js';
4
+ type Rows = DocumentResult | GroupResult;
5
+ export type WindowAnswer = Rows | PendingResult;
6
+ export type WindowChain = {
7
+ want(count: number): void;
8
+ close(): void;
9
+ };
10
+ export declare function chainedWindows(runtime: MdRuntimeClient, query: DocumentQuery | GroupQuery, count: number, publish: (answers: readonly (WindowAnswer | null)[], settled: boolean) => void): WindowChain;
11
+ export {};
12
+ //# sourceMappingURL=chain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE7E,KAAK,IAAI,GAAG,cAAc,GAAG,WAAW,CAAC;AAEzC,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,aAAa,CAAC;AAEhD,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAaF,wBAAgB,cAAc,CAC5B,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,aAAa,GAAG,UAAU,EACjC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,GAC7E,WAAW,CAkEb"}
package/dist/chain.js ADDED
@@ -0,0 +1,64 @@
1
+ function answered(answer) {
2
+ return answer !== null && !('pending' in answer);
3
+ }
4
+ export function chainedWindows(runtime, query, count, publish) {
5
+ let links = [];
6
+ let wanted = count;
7
+ let closed = false;
8
+ const observe = runtime.observe;
9
+ const open = (after, shown) => {
10
+ const link = { after, observation: null, value: shown, fresh: false };
11
+ void observe('query', after === undefined ? query : { ...query, after }).then((observation) => {
12
+ if (closed || !links.includes(link)) {
13
+ observation.close();
14
+ return;
15
+ }
16
+ link.observation = observation;
17
+ const take = (value) => {
18
+ link.value = value;
19
+ link.fresh = true;
20
+ settle();
21
+ };
22
+ observation.subscribe(take);
23
+ take(observation.current());
24
+ }, () => { });
25
+ return link;
26
+ };
27
+ const settle = () => {
28
+ if (closed)
29
+ return;
30
+ const next = [];
31
+ for (let at = 0; at < wanted; at += 1) {
32
+ const before = next[at - 1];
33
+ if (before !== undefined && !before.fresh) {
34
+ next.push(...links.slice(at, wanted));
35
+ break;
36
+ }
37
+ if (before !== undefined && (!answered(before.value) || before.value.next === undefined)) {
38
+ break;
39
+ }
40
+ const after = before === undefined ? undefined : before.value.next;
41
+ const held = links[at];
42
+ next.push(held !== undefined && held.after === after ? held : open(after, held?.value ?? null));
43
+ }
44
+ for (const link of links)
45
+ if (!next.includes(link))
46
+ link.observation?.close();
47
+ links = next;
48
+ publish(links.map((link) => link.value), links.every((link) => link.fresh));
49
+ };
50
+ settle();
51
+ return {
52
+ want(count) {
53
+ if (count === wanted)
54
+ return;
55
+ wanted = count;
56
+ settle();
57
+ },
58
+ close() {
59
+ closed = true;
60
+ for (const link of links)
61
+ link.observation?.close();
62
+ },
63
+ };
64
+ }
@@ -1,15 +1,6 @@
1
- import { type Replica } from './replica.js';
2
- import { type Row } from './rows.js';
3
1
  export type DocumentChange = {
4
- locator: string;
5
- path: string;
6
- before: readonly Row[];
7
- after: readonly Row[];
8
- };
9
- export type MessageChange = {
10
- conversation: string;
11
- identity: string;
12
- text: string | null;
2
+ readonly locator: string;
3
+ readonly path: string | null;
13
4
  };
14
5
  export type ChangeSet = {
15
6
  documents: readonly DocumentChange[];
@@ -20,16 +11,22 @@ export type ChangeSet = {
20
11
  rooms: readonly string[];
21
12
  queues: readonly string[];
22
13
  presentations: readonly string[];
23
- messages: readonly MessageChange[];
24
14
  conversations: readonly string[];
15
+ unindexed: readonly string[];
16
+ due: readonly string[];
25
17
  };
26
- export declare function changeSet(locator: string, before: Replica | null, after: Replica | null, changed?: {
18
+ type Changed = {
19
+ documents?: readonly string[] | null;
27
20
  drafts?: readonly string[];
28
21
  room?: boolean;
29
22
  queue?: boolean;
30
23
  presentation?: string;
31
- }): ChangeSet;
32
- export declare function entering(locator: string, replica: Replica, paths: readonly string[]): ChangeSet;
33
- export declare function conversationChangeSet(messages: readonly MessageChange[], conversations: readonly string[]): ChangeSet;
24
+ unindexed?: boolean;
25
+ due?: boolean;
26
+ };
27
+ export declare function changeSet(locator: string, changed?: Changed): ChangeSet;
28
+ export declare function conversationChangeSet(conversations: readonly string[]): ChangeSet;
34
29
  export declare function mergeChangeSets(sets: readonly ChangeSet[]): ChangeSet;
30
+ export declare function touches(set: ChangeSet, locator: string, path: string): boolean;
31
+ export {};
35
32
  //# sourceMappingURL=change-set.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"change-set.d.ts","sourceRoot":"","sources":["../src/change-set.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiC,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAwB,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAE3D,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,EAAE,CAAC;IACvB,KAAK,EAAE,SAAS,GAAG,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAE5F,MAAM,MAAM,SAAS,GAAG;IACtB,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IACrC,MAAM,EAAE,SAAS;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrD,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IACnC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC,CAAC;AAuBF,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,GAAG,IAAI,EACtB,KAAK,EAAE,OAAO,GAAG,IAAI,EACrB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CAClB,GACL,SAAS,CA8DX;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAiB/F;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,SAAS,aAAa,EAAE,EAClC,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,SAAS,CAUX;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,CAUrE"}
1
+ {"version":3,"file":"change-set.d.ts","sourceRoot":"","sources":["../src/change-set.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAExF,MAAM,MAAM,SAAS,GAAG;IACtB,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IACrC,MAAM,EAAE,SAAS;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrD,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,KAAK,OAAO,GAAG;IACb,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,OAAY,GAAG,SAAS,CAiB3E;AAED,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAWjF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,CAWrE;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAI9E"}