@agentshouse/mdruntime 0.1.0-cec6690d5712e → 0.1.0-cedd665dffa4c

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 (392) 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 +207 -94
  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/binary.d.ts +18 -0
  17. package/dist/binary.d.ts.map +1 -0
  18. package/dist/binary.js +8 -0
  19. package/dist/bootstrap.d.ts +31 -11
  20. package/dist/bootstrap.d.ts.map +1 -1
  21. package/dist/bootstrap.js +311 -92
  22. package/dist/cell.d.ts +6 -0
  23. package/dist/cell.d.ts.map +1 -0
  24. package/dist/cell.js +9 -0
  25. package/dist/chain.d.ts +12 -0
  26. package/dist/chain.d.ts.map +1 -0
  27. package/dist/chain.js +64 -0
  28. package/dist/change-set.d.ts +13 -14
  29. package/dist/change-set.d.ts.map +1 -1
  30. package/dist/change-set.js +17 -62
  31. package/dist/change.d.ts +46 -0
  32. package/dist/change.d.ts.map +1 -1
  33. package/dist/change.js +39 -0
  34. package/dist/chat-types.d.ts +3 -0
  35. package/dist/chat-types.d.ts.map +1 -0
  36. package/dist/chat-types.js +11 -0
  37. package/dist/client.d.ts +51 -27
  38. package/dist/client.d.ts.map +1 -1
  39. package/dist/client.js +133 -26
  40. package/dist/collection.d.ts +34 -9
  41. package/dist/collection.d.ts.map +1 -1
  42. package/dist/collection.js +55 -79
  43. package/dist/compile.d.ts +18 -0
  44. package/dist/compile.d.ts.map +1 -0
  45. package/dist/compile.js +723 -0
  46. package/dist/connection.d.ts +8 -111
  47. package/dist/connection.d.ts.map +1 -1
  48. package/dist/connection.js +113 -2221
  49. package/dist/context.d.ts +2 -0
  50. package/dist/context.d.ts.map +1 -0
  51. package/dist/{chat/context.js → context.js} +2 -5
  52. package/dist/conversation-live.d.ts +150 -0
  53. package/dist/conversation-live.d.ts.map +1 -0
  54. package/dist/conversation-live.js +259 -0
  55. package/dist/conversation-row.d.ts +40 -0
  56. package/dist/conversation-row.d.ts.map +1 -0
  57. package/dist/conversation-row.js +66 -0
  58. package/dist/conversation.d.ts +84 -45
  59. package/dist/conversation.d.ts.map +1 -1
  60. package/dist/conversation.js +1118 -584
  61. package/dist/declaration.d.ts +10 -0
  62. package/dist/declaration.d.ts.map +1 -0
  63. package/dist/declaration.js +24 -0
  64. package/dist/digest.d.ts +7 -0
  65. package/dist/digest.d.ts.map +1 -0
  66. package/dist/digest.js +113 -0
  67. package/dist/discovery.d.ts +10 -0
  68. package/dist/discovery.d.ts.map +1 -0
  69. package/dist/discovery.js +150 -0
  70. package/dist/durability.d.ts +23 -1
  71. package/dist/durability.d.ts.map +1 -1
  72. package/dist/durability.js +9 -0
  73. package/dist/entry.d.ts +20 -0
  74. package/dist/entry.d.ts.map +1 -0
  75. package/dist/entry.js +161 -0
  76. package/dist/expectation.d.ts +26 -13
  77. package/dist/expectation.d.ts.map +1 -1
  78. package/dist/expectation.js +72 -19
  79. package/dist/failure.d.ts +3 -0
  80. package/dist/failure.d.ts.map +1 -1
  81. package/dist/failure.js +6 -0
  82. package/dist/figures.d.ts +49 -0
  83. package/dist/figures.d.ts.map +1 -0
  84. package/dist/figures.js +199 -0
  85. package/dist/file.d.ts +2 -19
  86. package/dist/file.d.ts.map +1 -1
  87. package/dist/file.js +8 -122
  88. package/dist/holdings.d.ts +29 -0
  89. package/dist/holdings.d.ts.map +1 -0
  90. package/dist/holdings.js +95 -0
  91. package/dist/host.d.ts +29 -4
  92. package/dist/host.d.ts.map +1 -1
  93. package/dist/host.js +179 -25
  94. package/dist/identity.d.ts +1 -0
  95. package/dist/identity.d.ts.map +1 -1
  96. package/dist/identity.js +3 -0
  97. package/dist/index.d.ts +42 -12
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +20 -2
  100. package/dist/install.d.ts +60 -0
  101. package/dist/install.d.ts.map +1 -0
  102. package/dist/install.js +537 -0
  103. package/dist/lifecycle.d.ts +7 -0
  104. package/dist/lifecycle.d.ts.map +1 -0
  105. package/dist/lifecycle.js +278 -0
  106. package/dist/listing.d.ts +52 -0
  107. package/dist/listing.d.ts.map +1 -0
  108. package/dist/listing.js +152 -0
  109. package/dist/live.d.ts +25 -0
  110. package/dist/live.d.ts.map +1 -0
  111. package/dist/live.js +206 -0
  112. package/dist/loaded.d.ts +5 -0
  113. package/dist/loaded.d.ts.map +1 -0
  114. package/dist/loaded.js +40 -0
  115. package/dist/locks.d.ts +7 -0
  116. package/dist/locks.d.ts.map +1 -0
  117. package/dist/locks.js +32 -0
  118. package/dist/lost.d.ts +5 -0
  119. package/dist/lost.d.ts.map +1 -0
  120. package/dist/lost.js +49 -0
  121. package/dist/media.d.ts +13 -0
  122. package/dist/media.d.ts.map +1 -0
  123. package/dist/media.js +269 -0
  124. package/dist/memory.d.ts +26 -8
  125. package/dist/memory.d.ts.map +1 -1
  126. package/dist/memory.js +307 -97
  127. package/dist/messages.d.ts +58 -0
  128. package/dist/messages.d.ts.map +1 -0
  129. package/dist/messages.js +162 -0
  130. package/dist/model.d.ts +11 -12
  131. package/dist/model.d.ts.map +1 -1
  132. package/dist/model.js +7 -15
  133. package/dist/models.d.ts +10 -0
  134. package/dist/models.d.ts.map +1 -0
  135. package/dist/models.js +153 -0
  136. package/dist/name.d.ts +4 -0
  137. package/dist/name.d.ts.map +1 -0
  138. package/dist/name.js +122 -0
  139. package/dist/observation.d.ts +42 -9
  140. package/dist/observation.d.ts.map +1 -1
  141. package/dist/observation.js +238 -33
  142. package/dist/opened.d.ts +22 -0
  143. package/dist/opened.d.ts.map +1 -0
  144. package/dist/opened.js +107 -0
  145. package/dist/opening.d.ts +4 -0
  146. package/dist/opening.d.ts.map +1 -0
  147. package/dist/opening.js +53 -0
  148. package/dist/outcome.d.ts +63 -5
  149. package/dist/outcome.d.ts.map +1 -1
  150. package/dist/outcome.js +70 -0
  151. package/dist/overlay.d.ts +21 -6
  152. package/dist/overlay.d.ts.map +1 -1
  153. package/dist/overlay.js +163 -187
  154. package/dist/page-metadata.d.ts +8 -0
  155. package/dist/page-metadata.d.ts.map +1 -0
  156. package/dist/page-metadata.js +19 -0
  157. package/dist/parts.d.ts +4 -0
  158. package/dist/parts.d.ts.map +1 -0
  159. package/dist/parts.js +13 -0
  160. package/dist/paths.d.ts +2 -0
  161. package/dist/paths.d.ts.map +1 -1
  162. package/dist/paths.js +26 -0
  163. package/dist/preparation.d.ts +41 -0
  164. package/dist/preparation.d.ts.map +1 -0
  165. package/dist/preparation.js +314 -0
  166. package/dist/presence.d.ts +58 -0
  167. package/dist/presence.d.ts.map +1 -0
  168. package/dist/presence.js +231 -0
  169. package/dist/queries.d.ts +16 -0
  170. package/dist/queries.d.ts.map +1 -0
  171. package/dist/queries.js +308 -0
  172. package/dist/query.d.ts +51 -183
  173. package/dist/query.d.ts.map +1 -1
  174. package/dist/query.js +3 -464
  175. package/dist/{chat/questions.d.ts → questions.d.ts} +5 -7
  176. package/dist/questions.d.ts.map +1 -0
  177. package/dist/{chat/questions.js → questions.js} +11 -7
  178. package/dist/queue.d.ts +40 -0
  179. package/dist/queue.d.ts.map +1 -0
  180. package/dist/queue.js +480 -0
  181. package/dist/reach.d.ts +20 -5
  182. package/dist/reach.d.ts.map +1 -1
  183. package/dist/reach.js +357 -80
  184. package/dist/react.d.ts +23 -7
  185. package/dist/react.d.ts.map +1 -1
  186. package/dist/react.js +40 -18
  187. package/dist/{chat/read.d.ts → read.d.ts} +2 -0
  188. package/dist/read.d.ts.map +1 -0
  189. package/dist/{chat/read.js → read.js} +4 -0
  190. package/dist/readiness.d.ts +55 -0
  191. package/dist/readiness.d.ts.map +1 -0
  192. package/dist/readiness.js +25 -0
  193. package/dist/reads.d.ts +39 -0
  194. package/dist/reads.d.ts.map +1 -0
  195. package/dist/reads.js +178 -0
  196. package/dist/recovery.d.ts +28 -0
  197. package/dist/recovery.d.ts.map +1 -0
  198. package/dist/recovery.js +254 -0
  199. package/dist/refresh.d.ts +17 -14
  200. package/dist/refresh.d.ts.map +1 -1
  201. package/dist/refresh.js +145 -58
  202. package/dist/refusal.d.ts +5 -0
  203. package/dist/refusal.d.ts.map +1 -0
  204. package/dist/refusal.js +55 -0
  205. package/dist/replica.d.ts +53 -33
  206. package/dist/replica.d.ts.map +1 -1
  207. package/dist/replica.js +349 -167
  208. package/dist/retried.d.ts +30 -0
  209. package/dist/retried.d.ts.map +1 -0
  210. package/dist/retried.js +72 -0
  211. package/dist/room-draft.d.ts +82 -11
  212. package/dist/room-draft.d.ts.map +1 -1
  213. package/dist/room-draft.js +490 -78
  214. package/dist/room-drafts.d.ts +24 -0
  215. package/dist/room-drafts.d.ts.map +1 -0
  216. package/dist/room-drafts.js +220 -0
  217. package/dist/rows.d.ts +31 -35
  218. package/dist/rows.d.ts.map +1 -1
  219. package/dist/rows.js +60 -126
  220. package/dist/runtime.d.ts +34 -0
  221. package/dist/runtime.d.ts.map +1 -0
  222. package/dist/runtime.js +1 -0
  223. package/dist/save.d.ts +45 -22
  224. package/dist/save.d.ts.map +1 -1
  225. package/dist/save.js +977 -215
  226. package/dist/saves.d.ts +32 -0
  227. package/dist/saves.d.ts.map +1 -0
  228. package/dist/saves.js +426 -0
  229. package/dist/search.d.ts +15 -55
  230. package/dist/search.d.ts.map +1 -1
  231. package/dist/search.js +10 -121
  232. package/dist/seed.d.ts +25 -0
  233. package/dist/seed.d.ts.map +1 -0
  234. package/dist/seed.js +145 -0
  235. package/dist/shared.d.ts +10 -0
  236. package/dist/shared.d.ts.map +1 -0
  237. package/dist/shared.js +339 -0
  238. package/dist/shown.d.ts +33 -0
  239. package/dist/shown.d.ts.map +1 -0
  240. package/dist/shown.js +309 -0
  241. package/dist/socket/admission.d.ts +7 -0
  242. package/dist/socket/admission.d.ts.map +1 -0
  243. package/dist/socket/admission.js +39 -0
  244. package/dist/socket/answers.d.ts +6 -0
  245. package/dist/socket/answers.d.ts.map +1 -0
  246. package/dist/socket/answers.js +20 -0
  247. package/dist/socket/lanes.d.ts +28 -0
  248. package/dist/socket/lanes.d.ts.map +1 -0
  249. package/dist/socket/lanes.js +103 -0
  250. package/dist/socket/reads.d.ts +10 -0
  251. package/dist/socket/reads.d.ts.map +1 -0
  252. package/dist/socket/reads.js +31 -0
  253. package/dist/socket/session.d.ts +38 -0
  254. package/dist/socket/session.d.ts.map +1 -0
  255. package/dist/socket/session.js +23 -0
  256. package/dist/socket.d.ts +67 -0
  257. package/dist/socket.d.ts.map +1 -0
  258. package/dist/socket.js +164 -0
  259. package/dist/source.d.ts +59 -0
  260. package/dist/source.d.ts.map +1 -0
  261. package/dist/source.js +93 -0
  262. package/dist/status.d.ts +5 -2
  263. package/dist/status.d.ts.map +1 -1
  264. package/dist/status.js +3 -7
  265. package/dist/store/installs.d.ts +30 -0
  266. package/dist/store/installs.d.ts.map +1 -0
  267. package/dist/store/installs.js +40 -0
  268. package/dist/store/readiness.d.ts +11 -0
  269. package/dist/store/readiness.d.ts.map +1 -0
  270. package/dist/store/readiness.js +68 -0
  271. package/dist/store/records.d.ts +217 -0
  272. package/dist/store/records.d.ts.map +1 -0
  273. package/dist/store/records.js +464 -0
  274. package/dist/store/room-held.d.ts +8 -0
  275. package/dist/store/room-held.d.ts.map +1 -0
  276. package/dist/store/room-held.js +17 -0
  277. package/dist/store/rooms-shown.d.ts +8 -0
  278. package/dist/store/rooms-shown.d.ts.map +1 -0
  279. package/dist/store/rooms-shown.js +13 -0
  280. package/dist/store/space.d.ts +11 -0
  281. package/dist/store/space.d.ts.map +1 -0
  282. package/dist/store/space.js +41 -0
  283. package/dist/store/watchers.d.ts +17 -0
  284. package/dist/store/watchers.d.ts.map +1 -0
  285. package/dist/store/watchers.js +56 -0
  286. package/dist/store/writes.d.ts +24 -0
  287. package/dist/store/writes.d.ts.map +1 -0
  288. package/dist/store/writes.js +125 -0
  289. package/dist/store.d.ts +114 -116
  290. package/dist/store.d.ts.map +1 -1
  291. package/dist/store.js +164 -494
  292. package/dist/stored.d.ts +167 -0
  293. package/dist/stored.d.ts.map +1 -0
  294. package/dist/stored.js +703 -0
  295. package/dist/surface.d.ts +89 -0
  296. package/dist/surface.d.ts.map +1 -0
  297. package/dist/surface.js +222 -0
  298. package/dist/sync.d.ts +19 -0
  299. package/dist/sync.d.ts.map +1 -0
  300. package/dist/sync.js +535 -0
  301. package/dist/tables.d.ts +419 -0
  302. package/dist/tables.d.ts.map +1 -0
  303. package/dist/tables.js +758 -0
  304. package/dist/tallies.d.ts +18 -0
  305. package/dist/tallies.d.ts.map +1 -0
  306. package/dist/tallies.js +128 -0
  307. package/dist/transfer.d.ts +0 -5
  308. package/dist/transfer.d.ts.map +1 -1
  309. package/dist/turn.d.ts +9 -0
  310. package/dist/turn.d.ts.map +1 -0
  311. package/dist/turn.js +75 -0
  312. package/dist/validation.d.ts +29 -0
  313. package/dist/validation.d.ts.map +1 -0
  314. package/dist/validation.js +98 -0
  315. package/dist/windows.d.ts +11 -0
  316. package/dist/windows.d.ts.map +1 -0
  317. package/dist/windows.js +16 -0
  318. package/dist/wire.d.ts +221 -34
  319. package/dist/wire.d.ts.map +1 -1
  320. package/dist/wire.js +74 -31
  321. package/package.json +28 -24
  322. package/AGENTS.md +0 -299
  323. package/dist/attachment.d.ts +0 -3
  324. package/dist/attachment.d.ts.map +0 -1
  325. package/dist/attachment.js +0 -8
  326. package/dist/attempt.d.ts +0 -16
  327. package/dist/attempt.d.ts.map +0 -1
  328. package/dist/attempt.js +0 -57
  329. package/dist/chat/acts.d.ts +0 -34
  330. package/dist/chat/acts.d.ts.map +0 -1
  331. package/dist/chat/acts.js +0 -36
  332. package/dist/chat/context.d.ts +0 -3
  333. package/dist/chat/context.d.ts.map +0 -1
  334. package/dist/chat/input.d.ts +0 -9
  335. package/dist/chat/input.d.ts.map +0 -1
  336. package/dist/chat/input.js +0 -99
  337. package/dist/chat/kit.d.ts +0 -60
  338. package/dist/chat/kit.d.ts.map +0 -1
  339. package/dist/chat/kit.js +0 -123
  340. package/dist/chat/lasting.d.ts +0 -6
  341. package/dist/chat/lasting.d.ts.map +0 -1
  342. package/dist/chat/lasting.js +0 -19
  343. package/dist/chat/list.d.ts +0 -20
  344. package/dist/chat/list.d.ts.map +0 -1
  345. package/dist/chat/list.js +0 -59
  346. package/dist/chat/markdown.d.ts +0 -19
  347. package/dist/chat/markdown.d.ts.map +0 -1
  348. package/dist/chat/markdown.js +0 -187
  349. package/dist/chat/message.d.ts +0 -6
  350. package/dist/chat/message.d.ts.map +0 -1
  351. package/dist/chat/message.js +0 -192
  352. package/dist/chat/messages.d.ts +0 -21
  353. package/dist/chat/messages.d.ts.map +0 -1
  354. package/dist/chat/messages.js +0 -151
  355. package/dist/chat/name.d.ts +0 -6
  356. package/dist/chat/name.d.ts.map +0 -1
  357. package/dist/chat/name.js +0 -37
  358. package/dist/chat/opened.d.ts +0 -11
  359. package/dist/chat/opened.d.ts.map +0 -1
  360. package/dist/chat/opened.js +0 -17
  361. package/dist/chat/overlay.d.ts +0 -31
  362. package/dist/chat/overlay.d.ts.map +0 -1
  363. package/dist/chat/overlay.js +0 -97
  364. package/dist/chat/parts.d.ts +0 -57
  365. package/dist/chat/parts.d.ts.map +0 -1
  366. package/dist/chat/parts.js +0 -119
  367. package/dist/chat/process.d.ts +0 -20
  368. package/dist/chat/process.d.ts.map +0 -1
  369. package/dist/chat/process.js +0 -32
  370. package/dist/chat/provider.d.ts +0 -63
  371. package/dist/chat/provider.d.ts.map +0 -1
  372. package/dist/chat/provider.js +0 -645
  373. package/dist/chat/question.d.ts +0 -9
  374. package/dist/chat/question.d.ts.map +0 -1
  375. package/dist/chat/question.js +0 -80
  376. package/dist/chat/questions.d.ts.map +0 -1
  377. package/dist/chat/read.d.ts.map +0 -1
  378. package/dist/chat/ready.d.ts +0 -33
  379. package/dist/chat/ready.d.ts.map +0 -1
  380. package/dist/chat/ready.js +0 -91
  381. package/dist/chat/style.d.ts +0 -4
  382. package/dist/chat/style.d.ts.map +0 -1
  383. package/dist/chat/style.js +0 -302
  384. package/dist/chat.d.ts +0 -14
  385. package/dist/chat.d.ts.map +0 -1
  386. package/dist/chat.js +0 -8
  387. package/dist/log.d.ts +0 -5
  388. package/dist/log.d.ts.map +0 -1
  389. package/dist/log.js +0 -14
  390. package/dist/read-side.d.ts +0 -18
  391. package/dist/read-side.d.ts.map +0 -1
  392. package/dist/read-side.js +0 -433
package/dist/client.js CHANGED
@@ -1,10 +1,32 @@
1
+ import { shownBy } from './media.js';
2
+ import { pageMetadataBlock } from './page-metadata.js';
1
3
  import { observed } from './observation.js';
2
4
  import { runtimeError } from './failure.js';
3
- import { answer, AUTHORIZATION_ENDED, PORT_CLOSED, } from './wire.js';
5
+ import { blobOf, } from './outcome.js';
6
+ import { AUTHORIZATION_ENDED, PORT_CLOSED, wireAnswer, } from './wire.js';
7
+ // React renders an arrived value in a later task and opens what that render observes as it commits, so this many frames opening nothing mean the page drew what it observes.
8
+ const SETTLED_FRAMES = 2;
9
+ // A browser reads a download's address only after the click that hands it returns, so a copy's address is released a minute later.
10
+ const HANDED_COPY_MS = 60_000;
11
+ const PAGE = /\.html?$/iu;
12
+ const STARTED = { kind: 'started' };
13
+ const BLOCKED = {
14
+ kind: 'blocked',
15
+ code: 'popup-blocked',
16
+ fields: {},
17
+ retryable: true,
18
+ };
19
+ function handed(url, name) {
20
+ const anchor = document.createElement('a');
21
+ anchor.href = url;
22
+ anchor.download = name;
23
+ anchor.click();
24
+ }
4
25
  function refused(refusal) {
5
- return runtimeError(refusal.code, refusal.code, refusal.retryable);
26
+ return runtimeError(refusal.code);
6
27
  }
7
- export function connectMdRuntime(port) {
28
+ const UNBUILT = () => Promise.resolve(null);
29
+ export function connectMdRuntime(port, buildFile = UNBUILT) {
8
30
  let sequence = 0;
9
31
  let refusal = null;
10
32
  let ended = null;
@@ -16,13 +38,13 @@ export function connectMdRuntime(port) {
16
38
  const send = (message) => {
17
39
  port.postMessage(message);
18
40
  };
19
- function begin(id, topic, first) {
41
+ function begin(id, topic, input, first) {
20
42
  const handle = observed(first, () => {
21
43
  observations.delete(id);
22
44
  if (refusal === null)
23
45
  send({ kind: 'stop', id });
24
- }, topic === 'query');
25
- observations.set(id, { topic, handle });
46
+ }, topic);
47
+ observations.set(id, { topic, input, handle });
26
48
  return handle.observation;
27
49
  }
28
50
  function refuse(reported) {
@@ -34,7 +56,7 @@ export function connectMdRuntime(port) {
34
56
  const failure = refused(reported);
35
57
  for (const [id, waiting] of opening) {
36
58
  if (waiting.topic === 'connection-refusal')
37
- waiting.settle(begin(id, waiting.topic, reported));
59
+ waiting.settle(begin(id, waiting.topic, waiting.input, reported));
38
60
  else
39
61
  waiting.fail(failure);
40
62
  }
@@ -60,7 +82,7 @@ export function connectMdRuntime(port) {
60
82
  drawing?.();
61
83
  }
62
84
  port.addEventListener('message', (event) => {
63
- const message = answer(event.data);
85
+ const message = wireAnswer(event.data);
64
86
  if (message === null)
65
87
  return;
66
88
  if (message.kind === 'refusal') {
@@ -86,7 +108,7 @@ export function connectMdRuntime(port) {
86
108
  waiting.fail(runtimeError(message.code, message.message, message.retryable));
87
109
  }
88
110
  else
89
- waiting.settle(begin(message.id, waiting.topic, message.value));
111
+ waiting.settle(begin(message.id, waiting.topic, waiting.input, message.value));
90
112
  drawing?.();
91
113
  return;
92
114
  }
@@ -122,15 +144,64 @@ export function connectMdRuntime(port) {
122
144
  const id = (sequence += 1);
123
145
  if (refusal !== null) {
124
146
  return topic === 'connection-refusal'
125
- ? Promise.resolve(begin(id, topic, refusal))
147
+ ? Promise.resolve(begin(id, topic, input, refusal))
126
148
  : Promise.reject(refused(refusal));
127
149
  }
128
150
  return new Promise((settle, fail) => {
129
- opening.set(id, { topic, settle, fail });
151
+ opening.set(id, { topic, input, settle, fail });
130
152
  send({ kind: 'observe', id, topic, input });
131
153
  drawing?.();
132
154
  });
133
155
  }
156
+ function streamed(answer) {
157
+ if (answer.kind !== 'binary')
158
+ return answer;
159
+ const { file, byteLength, mediaType } = answer;
160
+ let part = 0;
161
+ let received = 0;
162
+ const stream = new ReadableStream({
163
+ async pull(controller) {
164
+ const bytes = await ask('binaryFile.part', [file, part]);
165
+ if (bytes === null) {
166
+ if (received === byteLength)
167
+ controller.close();
168
+ else
169
+ controller.error(runtimeError('binary-file-absent', 'The file ended early'));
170
+ return;
171
+ }
172
+ part += 1;
173
+ received += bytes.byteLength;
174
+ controller.enqueue(bytes);
175
+ },
176
+ }, { highWaterMark: 0 });
177
+ return { kind: 'binary', stream, byteLength, mediaType };
178
+ }
179
+ async function download(room, path, revision) {
180
+ const tab = PAGE.test(path) ? globalThis.open('', '_blank') : null;
181
+ const linked = await ask('binaryFile.link', [room, path, revision]);
182
+ if (linked.kind === 'link' && PAGE.test(linked.name)) {
183
+ const away = tab ?? globalThis.open('', '_blank');
184
+ if (away === null)
185
+ return BLOCKED;
186
+ away.location.replace(linked.url);
187
+ return STARTED;
188
+ }
189
+ tab?.close();
190
+ if (linked.kind === 'link') {
191
+ handed(linked.url, linked.name);
192
+ return STARTED;
193
+ }
194
+ if (linked.kind !== 'absent')
195
+ return linked;
196
+ const read = streamed(await ask('binaryFile.read', [room, path, revision]));
197
+ if (read.kind !== 'binary')
198
+ return read;
199
+ const copy = await blobOf(read);
200
+ const url = URL.createObjectURL(copy);
201
+ handed(url, path.slice(path.lastIndexOf('/') + 1));
202
+ setTimeout(() => URL.revokeObjectURL(url), HANDED_COPY_MS);
203
+ return STARTED;
204
+ }
134
205
  function settled() {
135
206
  if (settling !== null)
136
207
  return settling;
@@ -141,21 +212,28 @@ export function connectMdRuntime(port) {
141
212
  if (opening.size > 0)
142
213
  return;
143
214
  const at = moved;
144
- requestAnimationFrame(() => {
215
+ const waited = (frames) => {
145
216
  requestAnimationFrame(() => {
217
+ if (frames < SETTLED_FRAMES) {
218
+ waited(frames + 1);
219
+ return;
220
+ }
146
221
  if (moved !== at || opening.size > 0)
147
222
  return;
148
223
  drawing = null;
149
224
  resolve();
150
225
  });
151
- });
226
+ };
227
+ waited(1);
152
228
  };
153
229
  drawing = check;
154
230
  check();
155
231
  });
156
232
  return settling;
157
233
  }
158
- return {
234
+ const show = (room, path, revision) => ask('binaryFile.show', [room, path, revision]).then((shown) => streamed(shown));
235
+ return shownBy(show, {
236
+ buildFile,
159
237
  rooms: () => ask('rooms', []),
160
238
  query: ((query) => ask('query', [query])),
161
239
  search: (request) => ask('search', [request]),
@@ -163,42 +241,71 @@ export function connectMdRuntime(port) {
163
241
  roomDraft: {
164
242
  list: () => ask('roomDraft.list', []),
165
243
  read: (room, path) => ask('roomDraft.read', [room, path]),
166
- write: (room, path, revision, parts) => ask('roomDraft.write', [room, path, revision, parts]),
244
+ write: (room, path, revision, parts, next) => ask('roomDraft.write', next === undefined ? [room, path, revision, parts] : [room, path, revision, parts, next]),
167
245
  discard: (room, path, revision) => ask('roomDraft.discard', [room, path, revision]),
168
246
  },
169
247
  save: (room, roomDrafts) => ask('save', [room, roomDrafts]),
248
+ saveParts: (room, parts) => ask('saveParts', [room, parts]),
170
249
  presentation: {
171
250
  read: () => ask('presentation.read', []),
172
251
  write: (value) => ask('presentation.write', [value]),
252
+ edit: (members) => ask('presentation.edit', [members]),
173
253
  },
174
254
  conversation: {
175
255
  list: () => ask('conversation.list', []),
176
256
  read: (conversation, options) => ask('conversation.read', [conversation, options]),
177
257
  create: (input) => ask('conversation.create', [input]),
178
- send: (conversation) => ask('conversation.send', [conversation]),
179
- answer: (conversation, answer) => ask('conversation.answer', [conversation, answer]),
180
- interrupt: (conversation) => ask('conversation.interrupt', [conversation]),
181
- kill: (conversation) => ask('conversation.kill', [conversation]),
182
- cancel: (conversation, turn) => ask('conversation.cancel', [conversation, turn]),
183
- delete: (conversation) => ask('conversation.delete', [conversation]),
258
+ send: (conversation, operation, draft) => ask('conversation.send', [conversation, operation, draft]),
259
+ answer: (conversation, answer, operation) => ask('conversation.answer', [conversation, answer, operation]),
260
+ interrupt: (conversation, operation) => ask('conversation.interrupt', [conversation, operation]),
261
+ kill: (conversation, operation) => ask('conversation.kill', [conversation, operation]),
262
+ delete: (conversation, operation) => ask('conversation.delete', [conversation, operation]),
263
+ takeOut: (conversation, message, operation) => ask('conversation.takeOut', [conversation, message, operation]),
264
+ decide: (request, decision, operation) => ask('conversation.decide', [request, decision, operation]),
265
+ rename: (conversation, name, operation) => ask('conversation.rename', [conversation, name, operation]),
266
+ option: (conversation, option, value, operation) => ask('conversation.option', [conversation, option, value, operation]),
267
+ retry: (conversation, message, operation) => ask('conversation.retry', [conversation, message, operation]),
268
+ pin: (figures) => ask('conversation.pin', [figures]),
269
+ openTurn: (conversation, turn) => ask('conversation.openTurn', [conversation, turn]),
270
+ dismissSuggestion: (conversation, suggestion) => ask('conversation.dismissSuggestion', [conversation, suggestion]),
271
+ pageMetadata: async (app, address) => pageMetadataBlock(app, address, [...observations]
272
+ .sort(([left], [right]) => left - right)
273
+ .flatMap(([, { topic, input }]) => (topic === 'query' ? [input[0]] : []))),
184
274
  },
185
275
  chatDraft: {
186
276
  write: (conversation, draft, revision) => ask('chatDraft.write', [conversation, draft, revision]),
277
+ prepend: (conversation, draft) => ask('chatDraft.prepend', [conversation, draft]),
278
+ append: (conversation, draft) => ask('chatDraft.append', [conversation, draft]),
187
279
  discard: (conversation) => ask('chatDraft.discard', [conversation]),
188
280
  },
189
281
  history: (locator, path, query) => ask('history', [locator, path, query]),
282
+ resolve: (room, path, destination) => ask('resolve', [room, path, destination]),
283
+ binaryFile: {
284
+ read: (room, path, revision) => ask('binaryFile.read', [room, path, revision]).then((read) => streamed(read)),
285
+ attach: (room, file) => ask('binaryFile.attach', [room, file]),
286
+ download,
287
+ },
190
288
  call: (name, input) => ask('call', [name, input]),
289
+ answered: (operation) => ask('answered', [operation]),
191
290
  reached: (locator, roomVersion, path) => ask('reached', [locator, roomVersion, path]),
192
- log: () => ask('log', []),
193
291
  persistence: () => ask('persistence', []),
292
+ retry: () => ask('retry', []),
293
+ cleanUp: () => ask('cleanUp', []),
294
+ unsent: () => ask('unsent', []),
295
+ reset: () => ask('reset', []),
296
+ readAgain: () => ask('readAgain', []),
194
297
  observe: ((topic, ...input) => watch(topic, input)),
195
298
  reauthorize: () => ask('reauthorize', []),
196
299
  settled,
197
- };
300
+ });
198
301
  }
199
302
  const turns = new WeakMap();
200
303
  export function inTurn(client, work) {
201
- const next = (turns.get(client) ?? Promise.resolve()).then(work).catch(() => undefined);
202
- turns.set(client, next);
203
- return next;
304
+ const turn = (turns.get(client) ?? Promise.resolve()).then(work);
305
+ turns.set(client, turn.then(() => undefined, () => undefined));
306
+ return turn;
204
307
  }
308
+ export { chainedWindows } from './chain.js';
309
+ export { roomDraftRevision } from './identity.js';
310
+ export { defineRoomMedia, ROOM_MEDIA, viewFile } from './media.js';
311
+ export { unanswered } from './wire.js';
@@ -1,7 +1,7 @@
1
- import { type Document, type Validation } from '@agentshouse/mdmodel';
2
- import type { ModelState } from './model.js';
1
+ import { type DefinitionOf, type Document, type ParseResult, type TypedPath } from '@agentshouse/mdmodel';
2
+ import type { ModelState, TypesResult } from './model.js';
3
+ import type { AppTypedSelection } from './listing.js';
3
4
  import type { MdModelIdentity } from './adapter.js';
4
- import type { Refused } from './transfer.js';
5
5
  export declare const MD_MODEL: MdModelIdentity;
6
6
  export type Collection = {
7
7
  text: Readonly<Record<string, string>>;
@@ -14,12 +14,37 @@ export type Composition = {
14
14
  roots: readonly string[];
15
15
  model: ModelState;
16
16
  } | null;
17
+ typedPaths: readonly TypedPath[];
17
18
  };
18
- export declare function governing(composition: Composition, path: string): ModelState;
19
- export declare function collectionOf(text: Readonly<Record<string, string>>, composition: Composition, previous?: Collection): Collection;
20
- export declare function passingDocument(collection: Collection, path: string): Document | undefined;
21
- export declare function documentsOf(collection: Collection): Generator<readonly [string, Document]>;
22
- export declare function unreadable(text: Readonly<Record<string, string>>, previous?: Readonly<Record<string, string>>): Refused | null;
19
+ export type Composed = {
20
+ readonly composition: Composition;
21
+ readonly fingerprint: string;
22
+ };
23
+ export declare function composedOf(composition: Composition): Composed;
24
+ type Selecting<M> = {
25
+ readonly model: M;
26
+ readonly selection: {
27
+ readonly roots: readonly string[];
28
+ readonly model: M;
29
+ } | null;
30
+ };
31
+ export declare function selected(composition: {
32
+ readonly selection: {
33
+ readonly roots: readonly string[];
34
+ } | null;
35
+ }, path: string): boolean;
36
+ export declare function governing<M>(composition: Selecting<M>, path: string): M;
37
+ export declare function definitionsAt(composition: Composition, path: string): DefinitionOf;
38
+ export declare function definitionsIn(room: {
39
+ readonly model: TypesResult;
40
+ readonly typedSelection: AppTypedSelection | null;
41
+ }, path: string, typedPaths: readonly TypedPath[]): DefinitionOf;
42
+ export declare function collectionOf(text: Readonly<Record<string, string>>, composition: Composition): Collection;
43
+ export declare function documentsOf(collection: Collection): Generator<number, Iterable<readonly [string, Document]>, void>;
23
44
  export declare function validRoot(root: unknown): root is string;
24
- export declare function validateCollection(text: Readonly<Record<string, string>>, binaryTargets: readonly string[], composition: Composition): Validation;
45
+ export declare const UNTYPED = "any";
46
+ export declare function textType(read: ParseResult): string | undefined;
47
+ export declare function typedText(read: ParseResult): boolean;
48
+ export declare function available(composition: Composition): boolean;
49
+ export {};
25
50
  //# sourceMappingURL=collection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,QAAQ,EACb,KAAK,UAAU,EAEhB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,eAAO,MAAM,QAAQ,EAAE,eAAwE,CAAC;AAIhG,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvC,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE;QAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC;CACnE,CAAC;AASF,wBAAgB,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAI5E;AAID,wBAAgB,YAAY,CAC1B,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtC,WAAW,EAAE,WAAW,EACxB,QAAQ,CAAC,EAAE,UAAU,GACpB,UAAU,CAsBZ;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAO1F;AAED,wBAAiB,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAY3F;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC1C,OAAO,GAAG,IAAI,CAOhB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAEvD;AAwBD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtC,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,WAAW,EAAE,WAAW,GACvB,UAAU,CA0BZ"}
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,30 @@
1
- import { parse, validate, VERSION, } from '@agentshouse/mdmodel';
1
+ import { definitionAt, parse, VERSION, } from '@agentshouse/mdmodel';
2
2
  import { beneath, normalize } from './paths.js';
3
+ import { hashed } from './observation.js';
4
+ import { sortedKeys } from './shared.js';
3
5
  export const MD_MODEL = { identity: '@agentshouse/mdmodel', version: VERSION };
4
- const NO_TYPES = { types: {} };
5
- function selected(composition, path) {
6
+ const typesPrinted = new WeakMap();
7
+ function typesPrint(model) {
8
+ if (model.status === 'unavailable')
9
+ return '';
10
+ let print = typesPrinted.get(model.types);
11
+ if (print === undefined) {
12
+ print = hashed(JSON.stringify(model.types)).toString(36);
13
+ typesPrinted.set(model.types, print);
14
+ }
15
+ return print;
16
+ }
17
+ export function composedOf(composition) {
18
+ const { model, selection } = composition;
19
+ return {
20
+ composition,
21
+ fingerprint: JSON.stringify([
22
+ typesPrint(model),
23
+ selection === null ? null : [selection.roots, typesPrint(selection.model)],
24
+ ]),
25
+ };
26
+ }
27
+ export function selected(composition, path) {
6
28
  return (composition.selection !== null &&
7
29
  composition.selection.roots.some((root) => beneath(root, path)));
8
30
  }
@@ -11,99 +33,53 @@ export function governing(composition, path) {
11
33
  ? composition.selection.model
12
34
  : composition.model;
13
35
  }
14
- const parsedIn = new WeakMap();
15
- export function collectionOf(text, composition, previous) {
36
+ function definitionsUnder(composition, path, typedPaths, typesOf) {
37
+ const types = typesOf(governing(composition, path));
38
+ return types === null ? () => undefined : definitionAt({ types }, path, typedPaths);
39
+ }
40
+ export function definitionsAt(composition, path) {
41
+ return definitionsUnder(composition, path, composition.typedPaths, (model) => model.status === 'unavailable' ? null : model.types);
42
+ }
43
+ export function definitionsIn(room, path, typedPaths) {
44
+ return definitionsUnder({ model: room.model, selection: room.typedSelection }, path, typedPaths, ({ types }) => types === null ? null : Object.fromEntries(types.map((type) => [type.name, type])));
45
+ }
46
+ export function collectionOf(text, composition) {
16
47
  const parsed = new Map();
17
- if (previous !== undefined) {
18
- for (const [path, held] of parsedIn.get(previous) ?? []) {
19
- if (previous.text[path] === text[path])
20
- parsed.set(path, held);
21
- }
22
- }
23
- const collection = {
48
+ return {
24
49
  text,
25
50
  composition,
26
51
  document(path) {
27
- const held = parsed.get(path);
28
- if (held !== undefined)
29
- return held ?? undefined;
52
+ if (parsed.has(path))
53
+ return parsed.get(path) ?? undefined;
30
54
  const content = text[path];
31
55
  if (content === undefined)
32
56
  return undefined;
33
- const read = parse(content, path);
57
+ const read = parse(content, path, definitionsAt(composition, path));
34
58
  parsed.set(path, read.ok ? read.document : null);
35
59
  return read.ok ? read.document : undefined;
36
60
  },
37
61
  };
38
- parsedIn.set(collection, parsed);
39
- return collection;
40
- }
41
- export function passingDocument(collection, path) {
42
- const held = parsedIn.get(collection)?.get(path);
43
- if (held !== undefined)
44
- return held ?? undefined;
45
- const content = collection.text[path];
46
- if (content === undefined)
47
- return undefined;
48
- const read = parse(content, path);
49
- return read.ok ? read.document : undefined;
50
62
  }
51
63
  export function* documentsOf(collection) {
52
- const parsed = parsedIn.get(collection);
53
- for (const path of Object.keys(collection.text).sort()) {
54
- const held = parsed?.get(path);
55
- if (held === null)
56
- continue;
57
- if (held !== undefined) {
58
- yield [path, held];
59
- continue;
64
+ const paths = yield* sortedKeys(collection.text);
65
+ return (function* () {
66
+ for (const path of paths) {
67
+ const document = collection.document(path);
68
+ if (document !== undefined)
69
+ yield [path, document];
60
70
  }
61
- const read = parse(collection.text[path], path);
62
- if (read.ok)
63
- yield [path, read.document];
64
- }
65
- }
66
- export function unreadable(text, previous) {
67
- for (const path of Object.keys(text).sort()) {
68
- if (previous?.[path] === text[path])
69
- continue;
70
- const read = parse(text[path], path);
71
- if (!read.ok)
72
- return { kind: 'refused', refusal: read.refusal };
73
- }
74
- return null;
71
+ })();
75
72
  }
76
73
  export function validRoot(root) {
77
74
  return typeof root === 'string' && normalize(root) === root;
78
75
  }
79
- function validateAgainst(documents, binaryTargets, model) {
80
- if (model.status === 'unavailable') {
81
- const typed = Object.entries(documents).find(([, content]) => {
82
- const parsed = parse(content);
83
- return parsed.ok && parsed.document.type !== undefined && parsed.document.type !== 'any';
84
- });
85
- if (typed !== undefined)
86
- return { verdict: 'refuse', rule: 'model-unavailable', file: typed[0] };
87
- }
88
- return validate(documents, { binaryTargets }, model.status === 'unavailable' ? NO_TYPES : { types: model.types });
76
+ export const UNTYPED = 'any';
77
+ export function textType(read) {
78
+ return read.ok ? (read.document.type ?? UNTYPED) : undefined;
89
79
  }
90
- export function validateCollection(text, binaryTargets, composition) {
91
- const collection = {};
92
- const selection = {};
93
- for (const [path, content] of Object.entries(text)) {
94
- if (selected(composition, path))
95
- selection[path] = content;
96
- else
97
- collection[path] = content;
98
- }
99
- const verdicts = [
100
- validateAgainst(collection, binaryTargets.filter((path) => !selected(composition, path)), composition.model),
101
- ];
102
- if (composition.selection !== null) {
103
- verdicts.push(validateAgainst(selection, binaryTargets.filter((path) => selected(composition, path)), composition.selection.model));
104
- }
105
- const refusals = verdicts.filter((verdict) => verdict.verdict === 'refuse');
106
- if (refusals.length === 0)
107
- return verdicts[0];
108
- return refusals.find((refusal) => refusal.rule !== 'model-unavailable') ?? refusals[0];
80
+ export function typedText(read) {
81
+ return (textType(read) ?? UNTYPED) !== UNTYPED;
82
+ }
83
+ export function available(composition) {
84
+ return composition.model.status !== 'unavailable';
109
85
  }
@@ -0,0 +1,18 @@
1
+ import { sql } from '@agentshouse/mdmodel';
2
+ import { type Composition } from './collection.js';
3
+ import type { Plan, QueryRows } from './query.js';
4
+ import type { Connection } from './tables.js';
5
+ export type QueryRoom = {
6
+ readonly locator: string;
7
+ readonly key: number;
8
+ readonly composition?: Composition;
9
+ };
10
+ type Fragment = sql.Fragment;
11
+ export declare const VISIBLE: (alias: string) => string;
12
+ export declare function within(alias: string, path: string): Fragment;
13
+ export type QueryAnswer = QueryRows & {
14
+ readonly more?: string;
15
+ };
16
+ export declare function answerQuery(connection: Connection, plan: Plan, rooms: readonly QueryRoom[], budget?: number | null): QueryAnswer;
17
+ export {};
18
+ //# sourceMappingURL=compile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,GAAG,EAQJ,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAA0B,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE3E,OAAO,KAAK,EAAE,IAAI,EAAuC,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvF,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,aAAa,CAAC;AAG1D,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;CACpC,CAAC;AAEF,KAAK,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAI7B,eAAO,MAAM,OAAO,UAAW,MAAM,KAAG,MAAyD,CAAC;AAalG,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAM5D;AA2dD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA4ZjE,wBAAgB,WAAW,CACzB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,MAAM,GAAE,MAAM,GAAG,IAAW,GAC3B,WAAW,CAUb"}