@agentshouse/mdruntime 0.1.0-cd50a4607cb7d → 0.1.0-cd71aba4d0215

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 (385) hide show
  1. package/README.md +19 -16
  2. package/dist/acceptance.d.ts +3 -0
  3. package/dist/acceptance.d.ts.map +1 -0
  4. package/dist/acceptance.js +318 -0
  5. package/dist/act-lanes.d.ts +33 -0
  6. package/dist/act-lanes.d.ts.map +1 -0
  7. package/dist/act-lanes.js +177 -0
  8. package/dist/actions.d.ts +25 -0
  9. package/dist/actions.d.ts.map +1 -0
  10. package/dist/actions.js +261 -0
  11. package/dist/adapter.d.ts +175 -116
  12. package/dist/adapter.d.ts.map +1 -1
  13. package/dist/attached-model.d.ts +7 -10
  14. package/dist/attached-model.d.ts.map +1 -1
  15. package/dist/attached-model.js +40 -41
  16. package/dist/binary.d.ts +0 -5
  17. package/dist/binary.d.ts.map +1 -1
  18. package/dist/binary.js +1 -1
  19. package/dist/bootstrap.d.ts +31 -11
  20. package/dist/bootstrap.d.ts.map +1 -1
  21. package/dist/bootstrap.js +309 -109
  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 -16
  29. package/dist/change-set.d.ts.map +1 -1
  30. package/dist/change-set.js +17 -88
  31. package/dist/change.d.ts +32 -1
  32. package/dist/change.d.ts.map +1 -1
  33. package/dist/change.js +14 -3
  34. package/dist/chat-types.d.ts +5 -0
  35. package/dist/chat-types.d.ts.map +1 -0
  36. package/dist/chat-types.js +13 -0
  37. package/dist/client.d.ts +41 -19
  38. package/dist/client.d.ts.map +1 -1
  39. package/dist/client.js +129 -25
  40. package/dist/collection.d.ts +29 -21
  41. package/dist/collection.d.ts.map +1 -1
  42. package/dist/collection.js +48 -290
  43. package/dist/compile.d.ts +16 -0
  44. package/dist/compile.d.ts.map +1 -0
  45. package/dist/compile.js +711 -0
  46. package/dist/connection.d.ts +7 -118
  47. package/dist/connection.d.ts.map +1 -1
  48. package/dist/connection.js +111 -2972
  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} +1 -4
  52. package/dist/conversation-live.d.ts +138 -0
  53. package/dist/conversation-live.d.ts.map +1 -0
  54. package/dist/conversation-live.js +249 -0
  55. package/dist/conversation-row.d.ts +33 -0
  56. package/dist/conversation-row.d.ts.map +1 -0
  57. package/dist/conversation-row.js +53 -0
  58. package/dist/conversation.d.ts +72 -47
  59. package/dist/conversation.d.ts.map +1 -1
  60. package/dist/conversation.js +1036 -690
  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 +153 -0
  70. package/dist/durability.d.ts +22 -1
  71. package/dist/durability.d.ts.map +1 -1
  72. package/dist/durability.js +5 -0
  73. package/dist/entry.d.ts +5 -2
  74. package/dist/entry.d.ts.map +1 -1
  75. package/dist/entry.js +33 -28
  76. package/dist/expectation.d.ts +4 -2
  77. package/dist/expectation.d.ts.map +1 -1
  78. package/dist/expectation.js +33 -11
  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 +197 -0
  85. package/dist/file.d.ts +2 -19
  86. package/dist/file.d.ts.map +1 -1
  87. package/dist/file.js +7 -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 +26 -4
  92. package/dist/host.d.ts.map +1 -1
  93. package/dist/host.js +161 -25
  94. package/dist/identity.d.ts +0 -2
  95. package/dist/identity.d.ts.map +1 -1
  96. package/dist/identity.js +0 -6
  97. package/dist/index.d.ts +39 -13
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +17 -2
  100. package/dist/install.d.ts +54 -0
  101. package/dist/install.d.ts.map +1 -0
  102. package/dist/install.js +539 -0
  103. package/dist/lifecycle.d.ts +7 -0
  104. package/dist/lifecycle.d.ts.map +1 -0
  105. package/dist/lifecycle.js +279 -0
  106. package/dist/listing.d.ts +48 -0
  107. package/dist/listing.d.ts.map +1 -0
  108. package/dist/listing.js +139 -0
  109. package/dist/live.d.ts +23 -0
  110. package/dist/live.d.ts.map +1 -0
  111. package/dist/live.js +165 -0
  112. package/dist/locks.d.ts +7 -0
  113. package/dist/locks.d.ts.map +1 -0
  114. package/dist/locks.js +33 -0
  115. package/dist/log.d.ts +1 -0
  116. package/dist/log.d.ts.map +1 -1
  117. package/dist/lost.d.ts +5 -0
  118. package/dist/lost.d.ts.map +1 -0
  119. package/dist/lost.js +50 -0
  120. package/dist/media.d.ts +8 -0
  121. package/dist/media.d.ts.map +1 -0
  122. package/dist/media.js +218 -0
  123. package/dist/memory.d.ts +22 -7
  124. package/dist/memory.d.ts.map +1 -1
  125. package/dist/memory.js +278 -110
  126. package/dist/messages.d.ts +49 -0
  127. package/dist/messages.d.ts.map +1 -0
  128. package/dist/messages.js +150 -0
  129. package/dist/model.d.ts +11 -13
  130. package/dist/model.d.ts.map +1 -1
  131. package/dist/model.js +7 -24
  132. package/dist/models.d.ts +10 -0
  133. package/dist/models.d.ts.map +1 -0
  134. package/dist/models.js +156 -0
  135. package/dist/name.d.ts +4 -0
  136. package/dist/name.d.ts.map +1 -0
  137. package/dist/name.js +122 -0
  138. package/dist/observation.d.ts +17 -2
  139. package/dist/observation.d.ts.map +1 -1
  140. package/dist/observation.js +107 -17
  141. package/dist/opened.d.ts +22 -0
  142. package/dist/opened.d.ts.map +1 -0
  143. package/dist/opened.js +107 -0
  144. package/dist/opening.d.ts +4 -0
  145. package/dist/opening.d.ts.map +1 -0
  146. package/dist/opening.js +59 -0
  147. package/dist/outcome.d.ts +52 -8
  148. package/dist/outcome.d.ts.map +1 -1
  149. package/dist/outcome.js +57 -0
  150. package/dist/overlay.d.ts +5 -5
  151. package/dist/overlay.d.ts.map +1 -1
  152. package/dist/overlay.js +127 -166
  153. package/dist/page-metadata.d.ts +8 -0
  154. package/dist/page-metadata.d.ts.map +1 -0
  155. package/dist/page-metadata.js +19 -0
  156. package/dist/parts.d.ts +11 -0
  157. package/dist/parts.d.ts.map +1 -0
  158. package/dist/parts.js +21 -0
  159. package/dist/paths.d.ts +2 -0
  160. package/dist/paths.d.ts.map +1 -1
  161. package/dist/paths.js +26 -0
  162. package/dist/preparation.d.ts +20 -0
  163. package/dist/preparation.d.ts.map +1 -0
  164. package/dist/preparation.js +233 -0
  165. package/dist/presence.d.ts +52 -0
  166. package/dist/presence.d.ts.map +1 -0
  167. package/dist/presence.js +220 -0
  168. package/dist/queries.d.ts +16 -0
  169. package/dist/queries.d.ts.map +1 -0
  170. package/dist/queries.js +270 -0
  171. package/dist/query.d.ts +27 -186
  172. package/dist/query.d.ts.map +1 -1
  173. package/dist/query.js +3 -464
  174. package/dist/{chat/questions.d.ts → questions.d.ts} +5 -2
  175. package/dist/questions.d.ts.map +1 -0
  176. package/dist/{chat/questions.js → questions.js} +13 -2
  177. package/dist/queue.d.ts +40 -0
  178. package/dist/queue.d.ts.map +1 -0
  179. package/dist/queue.js +455 -0
  180. package/dist/reach.d.ts +21 -7
  181. package/dist/reach.d.ts.map +1 -1
  182. package/dist/reach.js +315 -96
  183. package/dist/react.d.ts +25 -4
  184. package/dist/react.d.ts.map +1 -1
  185. package/dist/react.js +22 -18
  186. package/dist/{chat/read.d.ts → read.d.ts} +2 -0
  187. package/dist/read.d.ts.map +1 -0
  188. package/dist/{chat/read.js → read.js} +4 -0
  189. package/dist/readiness.d.ts +49 -0
  190. package/dist/readiness.d.ts.map +1 -0
  191. package/dist/readiness.js +27 -0
  192. package/dist/reads.d.ts +39 -0
  193. package/dist/reads.d.ts.map +1 -0
  194. package/dist/reads.js +178 -0
  195. package/dist/recovery.d.ts +5 -2
  196. package/dist/recovery.d.ts.map +1 -1
  197. package/dist/recovery.js +65 -8
  198. package/dist/refresh.d.ts +17 -14
  199. package/dist/refresh.d.ts.map +1 -1
  200. package/dist/refresh.js +145 -54
  201. package/dist/refusal.d.ts +5 -0
  202. package/dist/refusal.d.ts.map +1 -0
  203. package/dist/refusal.js +57 -0
  204. package/dist/replica.d.ts +50 -33
  205. package/dist/replica.d.ts.map +1 -1
  206. package/dist/replica.js +338 -189
  207. package/dist/retried.d.ts +30 -0
  208. package/dist/retried.d.ts.map +1 -0
  209. package/dist/retried.js +72 -0
  210. package/dist/room-draft.d.ts +39 -10
  211. package/dist/room-draft.d.ts.map +1 -1
  212. package/dist/room-draft.js +186 -115
  213. package/dist/room-drafts.d.ts +24 -0
  214. package/dist/room-drafts.d.ts.map +1 -0
  215. package/dist/room-drafts.js +217 -0
  216. package/dist/rows.d.ts +31 -29
  217. package/dist/rows.d.ts.map +1 -1
  218. package/dist/rows.js +60 -118
  219. package/dist/runtime.d.ts +36 -0
  220. package/dist/runtime.d.ts.map +1 -0
  221. package/dist/runtime.js +1 -0
  222. package/dist/save.d.ts +42 -48
  223. package/dist/save.d.ts.map +1 -1
  224. package/dist/save.js +715 -248
  225. package/dist/saves.d.ts +32 -0
  226. package/dist/saves.d.ts.map +1 -0
  227. package/dist/saves.js +413 -0
  228. package/dist/search.d.ts +15 -77
  229. package/dist/search.d.ts.map +1 -1
  230. package/dist/search.js +10 -186
  231. package/dist/seed.d.ts +25 -0
  232. package/dist/seed.d.ts.map +1 -0
  233. package/dist/seed.js +145 -0
  234. package/dist/shared.d.ts +6 -7
  235. package/dist/shared.d.ts.map +1 -1
  236. package/dist/shared.js +75 -104
  237. package/dist/shown.d.ts +32 -0
  238. package/dist/shown.d.ts.map +1 -0
  239. package/dist/shown.js +290 -0
  240. package/dist/socket/admission.d.ts +7 -0
  241. package/dist/socket/admission.d.ts.map +1 -0
  242. package/dist/socket/admission.js +39 -0
  243. package/dist/socket/answers.d.ts +6 -0
  244. package/dist/socket/answers.d.ts.map +1 -0
  245. package/dist/socket/answers.js +20 -0
  246. package/dist/socket/lanes.d.ts +21 -0
  247. package/dist/socket/lanes.d.ts.map +1 -0
  248. package/dist/socket/lanes.js +80 -0
  249. package/dist/socket/reads.d.ts +10 -0
  250. package/dist/socket/reads.d.ts.map +1 -0
  251. package/dist/socket/reads.js +31 -0
  252. package/dist/socket/session.d.ts +38 -0
  253. package/dist/socket/session.d.ts.map +1 -0
  254. package/dist/socket/session.js +23 -0
  255. package/dist/socket.d.ts +68 -0
  256. package/dist/socket.d.ts.map +1 -0
  257. package/dist/socket.js +171 -0
  258. package/dist/source.d.ts +61 -0
  259. package/dist/source.d.ts.map +1 -0
  260. package/dist/source.js +82 -0
  261. package/dist/status.d.ts +4 -5
  262. package/dist/status.d.ts.map +1 -1
  263. package/dist/status.js +3 -7
  264. package/dist/store/installs.d.ts +30 -0
  265. package/dist/store/installs.d.ts.map +1 -0
  266. package/dist/store/installs.js +34 -0
  267. package/dist/store/readiness.d.ts +10 -0
  268. package/dist/store/readiness.d.ts.map +1 -0
  269. package/dist/store/readiness.js +52 -0
  270. package/dist/store/records.d.ts +212 -0
  271. package/dist/store/records.d.ts.map +1 -0
  272. package/dist/store/records.js +430 -0
  273. package/dist/store/room-held.d.ts +8 -0
  274. package/dist/store/room-held.d.ts.map +1 -0
  275. package/dist/store/room-held.js +17 -0
  276. package/dist/store/space.d.ts +11 -0
  277. package/dist/store/space.d.ts.map +1 -0
  278. package/dist/store/space.js +41 -0
  279. package/dist/store/watchers.d.ts +17 -0
  280. package/dist/store/watchers.d.ts.map +1 -0
  281. package/dist/store/watchers.js +56 -0
  282. package/dist/store/writes.d.ts +24 -0
  283. package/dist/store/writes.d.ts.map +1 -0
  284. package/dist/store/writes.js +125 -0
  285. package/dist/store.d.ts +111 -142
  286. package/dist/store.d.ts.map +1 -1
  287. package/dist/store.js +159 -687
  288. package/dist/stored.d.ts +156 -0
  289. package/dist/stored.d.ts.map +1 -0
  290. package/dist/stored.js +649 -0
  291. package/dist/surface.d.ts +88 -0
  292. package/dist/surface.d.ts.map +1 -0
  293. package/dist/surface.js +223 -0
  294. package/dist/sync.d.ts +19 -0
  295. package/dist/sync.d.ts.map +1 -0
  296. package/dist/sync.js +540 -0
  297. package/dist/tables.d.ts +412 -0
  298. package/dist/tables.d.ts.map +1 -0
  299. package/dist/tables.js +737 -0
  300. package/dist/tallies.d.ts +18 -0
  301. package/dist/tallies.d.ts.map +1 -0
  302. package/dist/tallies.js +129 -0
  303. package/dist/transfer.d.ts +0 -5
  304. package/dist/transfer.d.ts.map +1 -1
  305. package/dist/turn.d.ts +5 -3
  306. package/dist/turn.d.ts.map +1 -1
  307. package/dist/turn.js +51 -21
  308. package/dist/validation.d.ts +29 -0
  309. package/dist/validation.d.ts.map +1 -0
  310. package/dist/validation.js +104 -0
  311. package/dist/windows.d.ts +11 -0
  312. package/dist/windows.d.ts.map +1 -0
  313. package/dist/windows.js +16 -0
  314. package/dist/wire.d.ts +220 -36
  315. package/dist/wire.d.ts.map +1 -1
  316. package/dist/wire.js +73 -33
  317. package/package.json +19 -19
  318. package/AGENTS.md +0 -296
  319. package/dist/attempt.d.ts +0 -16
  320. package/dist/attempt.d.ts.map +0 -1
  321. package/dist/attempt.js +0 -70
  322. package/dist/chat/acts.d.ts +0 -33
  323. package/dist/chat/acts.d.ts.map +0 -1
  324. package/dist/chat/acts.js +0 -36
  325. package/dist/chat/context.d.ts +0 -3
  326. package/dist/chat/context.d.ts.map +0 -1
  327. package/dist/chat/input.d.ts +0 -9
  328. package/dist/chat/input.d.ts.map +0 -1
  329. package/dist/chat/input.js +0 -99
  330. package/dist/chat/kit.d.ts +0 -60
  331. package/dist/chat/kit.d.ts.map +0 -1
  332. package/dist/chat/kit.js +0 -123
  333. package/dist/chat/lasting.d.ts +0 -6
  334. package/dist/chat/lasting.d.ts.map +0 -1
  335. package/dist/chat/lasting.js +0 -19
  336. package/dist/chat/list.d.ts +0 -26
  337. package/dist/chat/list.d.ts.map +0 -1
  338. package/dist/chat/list.js +0 -62
  339. package/dist/chat/markdown.d.ts +0 -20
  340. package/dist/chat/markdown.d.ts.map +0 -1
  341. package/dist/chat/markdown.js +0 -188
  342. package/dist/chat/message.d.ts +0 -6
  343. package/dist/chat/message.d.ts.map +0 -1
  344. package/dist/chat/message.js +0 -192
  345. package/dist/chat/messages.d.ts +0 -21
  346. package/dist/chat/messages.d.ts.map +0 -1
  347. package/dist/chat/messages.js +0 -151
  348. package/dist/chat/name.d.ts +0 -6
  349. package/dist/chat/name.d.ts.map +0 -1
  350. package/dist/chat/name.js +0 -37
  351. package/dist/chat/opened.d.ts +0 -11
  352. package/dist/chat/opened.d.ts.map +0 -1
  353. package/dist/chat/opened.js +0 -17
  354. package/dist/chat/overlay.d.ts +0 -31
  355. package/dist/chat/overlay.d.ts.map +0 -1
  356. package/dist/chat/overlay.js +0 -97
  357. package/dist/chat/parts.d.ts +0 -57
  358. package/dist/chat/parts.d.ts.map +0 -1
  359. package/dist/chat/parts.js +0 -119
  360. package/dist/chat/process.d.ts +0 -20
  361. package/dist/chat/process.d.ts.map +0 -1
  362. package/dist/chat/process.js +0 -32
  363. package/dist/chat/provider.d.ts +0 -63
  364. package/dist/chat/provider.d.ts.map +0 -1
  365. package/dist/chat/provider.js +0 -620
  366. package/dist/chat/question.d.ts +0 -9
  367. package/dist/chat/question.d.ts.map +0 -1
  368. package/dist/chat/question.js +0 -80
  369. package/dist/chat/questions.d.ts.map +0 -1
  370. package/dist/chat/read.d.ts.map +0 -1
  371. package/dist/chat/ready.d.ts +0 -33
  372. package/dist/chat/ready.d.ts.map +0 -1
  373. package/dist/chat/ready.js +0 -91
  374. package/dist/chat/style.d.ts +0 -4
  375. package/dist/chat/style.d.ts.map +0 -1
  376. package/dist/chat/style.js +0 -302
  377. package/dist/chat.d.ts +0 -14
  378. package/dist/chat.d.ts.map +0 -1
  379. package/dist/chat.js +0 -8
  380. package/dist/fence.d.ts +0 -6
  381. package/dist/fence.d.ts.map +0 -1
  382. package/dist/fence.js +0 -10
  383. package/dist/read-side.d.ts +0 -25
  384. package/dist/read-side.d.ts.map +0 -1
  385. package/dist/read-side.js +0 -639
package/dist/reach.js CHANGED
@@ -1,10 +1,10 @@
1
+ import { selected } from './collection.js';
1
2
  import { unheldView } from './conversation.js';
2
3
  import { modelTypes, NO_MODEL } from './model.js';
3
- import { applied, observing } from './observation.js';
4
- import { runtimeError } from './failure.js';
5
- import { failure, undeclared, } from './outcome.js';
4
+ import { changeOf, digestApplied, digestOf, observing, } from './observation.js';
5
+ import { runtimeError, uncaught } from './failure.js';
6
+ import { failure, lockedRoom, ROOM_LOCKED, undeclared, UNREADABLE, } from './outcome.js';
6
7
  import { beneath } from './paths.js';
7
- import { reconciled } from './read-side.js';
8
8
  import { moveTarget, readParts, staleWrite, } from './room-draft.js';
9
9
  import { documentKey } from './rows.js';
10
10
  const UNHELD_TYPES = { collection: modelTypes(NO_MODEL), typedSelection: null };
@@ -14,18 +14,35 @@ function unconversed(name) {
14
14
  const NO_CONVERSATION = {
15
15
  list: () => Promise.resolve([]),
16
16
  read: (conversation) => Promise.resolve(unheldView(conversation)),
17
- create: unconversed('conversation.create'),
18
- send: unconversed('conversation.send'),
19
- answer: unconversed('conversation.answer'),
20
- interrupt: unconversed('conversation.interrupt'),
21
- kill: unconversed('conversation.kill'),
22
- cancel: unconversed('conversation.cancel'),
23
- delete: unconversed('conversation.delete'),
17
+ create: unconversed('conversations/create'),
18
+ send: unconversed('conversations/send'),
19
+ answer: unconversed('conversations/interaction/answer'),
20
+ interrupt: unconversed('conversations/interrupt'),
21
+ kill: unconversed('conversations/kill'),
22
+ delete: unconversed('conversations/delete'),
23
+ takeOut: unconversed('conversations/take-out'),
24
+ decide: unconversed('agent-functions/decide'),
25
+ rename: unconversed('conversations/rename'),
26
+ option: unconversed('conversations/option/set'),
27
+ retry: unconversed('conversations/retry'),
28
+ pins: () => Promise.resolve([]),
29
+ pin: () => Promise.resolve(),
30
+ openedTurns: () => Promise.resolve({}),
31
+ openTurn: () => Promise.resolve(),
24
32
  };
25
33
  const NO_CHAT_DRAFT = {
26
34
  write: () => Promise.resolve(),
35
+ prepend: () => Promise.resolve(),
27
36
  discard: () => Promise.resolve(),
28
37
  };
38
+ function areasOf(reach) {
39
+ return reach.areas ?? [];
40
+ }
41
+ function fenced(reach, room, path) {
42
+ return areasOf(reach).some((area) => area.room === room &&
43
+ beneath(area.path, path) &&
44
+ !area.open.some((open) => beneath(open, path)));
45
+ }
29
46
  export function holds(reach, room) {
30
47
  return (reach === null ||
31
48
  reach.rooms.includes(room) ||
@@ -38,34 +55,21 @@ export function governs(reach, room) {
38
55
  if (wholly(reach, room.locator)) {
39
56
  return { collection: true, selection: room.typedSelection !== null };
40
57
  }
41
- const selected = (path) => room.typedSelection?.roots.some((root) => beneath(root, path)) ?? false;
58
+ const within = (path) => selected({ selection: room.typedSelection }, path);
42
59
  const paths = reach.documents
43
60
  .filter((document) => document.room === room.locator)
44
61
  .map(({ path }) => path);
45
- return { collection: paths.some((path) => !selected(path)), selection: paths.some(selected) };
62
+ return { collection: paths.some((path) => !within(path)), selection: paths.some(within) };
46
63
  }
47
64
  function covers(reach, room, path) {
48
65
  return (reach === null ||
49
- reach.rooms.includes(room) ||
50
- reach.documents.some((document) => document.room === room && document.path === path));
66
+ (!fenced(reach, room, path) &&
67
+ (reach.rooms.includes(room) ||
68
+ reach.documents.some((document) => document.room === room && document.path === path))));
51
69
  }
52
70
  function conversing(reach) {
53
71
  return reach === null || reach.conversations;
54
72
  }
55
- function refers(reach, scope) {
56
- if (reach === null)
57
- return true;
58
- if (scope === null)
59
- return false;
60
- if (scope.kind === 'conversations')
61
- return reach.conversations;
62
- return scope.path === undefined
63
- ? wholly(reach, scope.locator)
64
- : covers(reach, scope.locator, scope.path);
65
- }
66
- function unreachedReference(fileRef) {
67
- return { kind: 'absent', code: 'binary-file-absent', fields: { fileRef }, retryable: false };
68
- }
69
73
  export function planReach(reach) {
70
74
  return reach === null
71
75
  ? null
@@ -74,6 +78,9 @@ export function planReach(reach) {
74
78
  documents: [
75
79
  ...new Set(reach.documents.map(({ room, path }) => documentKey(room, path))),
76
80
  ].sort(),
81
+ areas: areasOf(reach)
82
+ .map(({ room, path, open }) => ({ room, path, open: [...new Set(open)].sort() }))
83
+ .sort((left, right) => documentKey(left.room, left.path) < documentKey(right.room, right.path) ? -1 : 1),
77
84
  };
78
85
  }
79
86
  function roomsWithin(reach, rooms) {
@@ -89,7 +96,7 @@ function typesWithin(reach, room, types) {
89
96
  };
90
97
  }
91
98
  function moves(reach, room, move) {
92
- return move === undefined || covers(reach, room, moveTarget(move));
99
+ return move === undefined || covers(reach, move.room ?? room, moveTarget(move));
93
100
  }
94
101
  function draftWithin(reach, draft) {
95
102
  return covers(reach, draft.room, draft.path) && moves(reach, draft.room, draft.parts.move);
@@ -122,81 +129,189 @@ function savedWithin(reach, room, result) {
122
129
  function statusWithin(reach, status) {
123
130
  return {
124
131
  ...status,
125
- attentionRequired: status.attentionRequired.filter((entry) => 'refusal' in entry ? wholly(reach, entry.room) : covers(reach, entry.room, entry.path)),
132
+ attentionRequired: status.attentionRequired.filter((entry) => covers(reach, entry.room, entry.path)),
133
+ unsent: status.unsent.filter((change) => covers(reach, change.room, change.path)),
126
134
  };
127
135
  }
128
136
  function queueWithin(reach, room, entries) {
129
- return entries.filter(({ batch }) => batch.changes.every((change) => covers(reach, room, change.path) &&
130
- (change.kind !== 'move' || covers(reach, room, change.to))));
137
+ return entries
138
+ .filter(({ batch }) => batch.changes.every((change) => covers(reach, room, change.path) &&
139
+ (change.kind !== 'move' || covers(reach, room, change.to))))
140
+ .map((entry) => {
141
+ const { between, ...batch } = entry.batch;
142
+ if (between === undefined)
143
+ return entry;
144
+ return wholly(reach, between.source.room) && wholly(reach, between.destination.room)
145
+ ? entry
146
+ : { ...entry, batch };
147
+ });
131
148
  }
132
149
  function unreached(room) {
133
- return runtimeError('room-not-held', `No Local Replica for ${room}`);
150
+ return runtimeError('unknown-room', `Unknown Room ${room}`);
134
151
  }
135
- export function narrowed(runtime, given) {
152
+ function lockedError(room) {
153
+ return runtimeError(ROOM_LOCKED, `${room} is locked until House confirms its access`, true);
154
+ }
155
+ function deviceUnreached() {
156
+ return runtimeError('device-unreached', 'Only the panel reaches this device');
157
+ }
158
+ const ATTACH_REQUIRED = 'attach-required';
159
+ function attachRequired() {
160
+ return runtimeError(ATTACH_REQUIRED, 'App code takes a file in with binaryFile.attach');
161
+ }
162
+ function carriesFile(parts) {
163
+ return parts !== null && typeof parts === 'object' && Object.hasOwn(parts, 'file');
164
+ }
165
+ export function narrowed(runtime, given, port) {
136
166
  const { md, watch } = runtime;
137
167
  let reach = given;
138
168
  const open = new Set();
139
- function following(begin) {
169
+ function following(begin, locking = false) {
140
170
  let stop = begin();
141
171
  const restart = () => {
142
172
  stop();
143
173
  stop = begin();
144
174
  };
145
175
  open.add(restart);
176
+ const unwatch = locking ? runtime.watchLocks(restart) : () => { };
146
177
  return () => {
147
178
  open.delete(restart);
179
+ unwatch();
180
+ stop();
181
+ };
182
+ }
183
+ const unlocking = (rooms, locked) => {
184
+ const held = (rooms ?? []).filter((room) => locked.includes(room));
185
+ return held.length === 0 ? null : { pending: held.map((room) => ({ room, awaits: 'unlock' })) };
186
+ };
187
+ const unlocked = (entries, locked) => entries.filter((entry) => !locked.includes(entry.room));
188
+ const intoLocked = async (held) => {
189
+ for (const move of held) {
190
+ if (move?.room !== undefined && (await runtime.locked(move.room)))
191
+ return true;
192
+ }
193
+ return false;
194
+ };
195
+ function ordered(deliver) {
196
+ let open = true;
197
+ let shown = Promise.resolve();
198
+ return {
199
+ push(making) {
200
+ shown = shown.then(() => making.then((value) => {
201
+ if (open)
202
+ deliver(value);
203
+ }, uncaught), uncaught);
204
+ },
205
+ stop() {
206
+ open = false;
207
+ },
208
+ };
209
+ }
210
+ function unlockedWatch(topic, input, deliver, fail, within) {
211
+ const shown = ordered(deliver);
212
+ const stop = watch(topic, input, (message) => {
213
+ shown.push(runtime.lockedRooms().then((locked) => within(message, locked)));
214
+ }, fail);
215
+ return () => {
216
+ shown.stop();
148
217
  stop();
149
218
  };
150
219
  }
151
- const within = (topic, input, deliver) => {
220
+ function lockedFirst(room, start, shut) {
221
+ let open = true;
222
+ let stop = () => { };
223
+ void (async () => {
224
+ const closed = !holds(reach, room) || (await runtime.locked(room));
225
+ if (!open)
226
+ return;
227
+ if (closed)
228
+ shut();
229
+ else
230
+ stop = start();
231
+ })();
232
+ return () => {
233
+ open = false;
234
+ stop();
235
+ };
236
+ }
237
+ const within = (topic, input, deliver, fail) => {
238
+ if (topic === 'read' && reach !== null) {
239
+ fail(deviceUnreached());
240
+ return () => { };
241
+ }
152
242
  if (topic === 'rooms') {
153
- return following(() => watch(topic, input, (rooms) => deliver(roomsWithin(reach, rooms))));
243
+ return following(() => watch(topic, input, (rooms) => deliver(roomsWithin(reach, rooms)), fail));
244
+ }
245
+ if (topic === 'readiness') {
246
+ return following(() => runtime.watchReadiness(port, reach, deliver));
154
247
  }
155
248
  if (topic === 'sync-status') {
156
- return following(() => watch(topic, input, (status) => deliver(statusWithin(reach, status))));
249
+ return following(() => unlockedWatch(topic, input, deliver, fail, (status, locked) => {
250
+ const shown = statusWithin(reach, status);
251
+ return { ...shown, attentionRequired: unlocked(shown.attentionRequired, locked) };
252
+ }), true);
157
253
  }
158
254
  if (topic === 'room-drafts') {
159
- return following(() => watch(topic, input, (drafts) => deliver(draftsWithin(reach, drafts))));
255
+ return following(() => unlockedWatch(topic, input, deliver, fail, (drafts, locked) => unlocked(draftsWithin(reach, drafts), locked)), true);
160
256
  }
161
257
  if (topic === 'queue') {
162
258
  const room = input[0];
163
- return following(() => {
164
- if (!holds(reach, room)) {
165
- deliver([]);
166
- return () => { };
167
- }
168
- return watch(topic, input, (entries) => deliver(queueWithin(reach, room, entries)));
169
- });
259
+ return following(() => lockedFirst(room, () => watch(topic, input, (entries) => deliver(queueWithin(reach, room, entries)), fail), () => deliver([])), true);
170
260
  }
171
261
  if (topic === 'query') {
172
- const plan = runtime.plan(input[0], reach);
262
+ const planning = runtime.plan(input[0], reach);
173
263
  let held = null;
174
264
  return following(() => {
175
- let first = true;
176
- return runtime.watchPlan({ ...plan, reach: planReach(reach) }, (message) => {
177
- if (!first) {
178
- held = applied(held, message);
179
- deliver(message);
265
+ let open = true;
266
+ let stop = () => { };
267
+ void (async () => {
268
+ const plan = await planning;
269
+ const locked = await runtime.lockedRooms();
270
+ if (!open)
180
271
  return;
181
- }
182
- first = false;
183
- if (held === null) {
184
- held = message;
185
- deliver(message);
272
+ const pending = unlocking(plan.rooms, locked);
273
+ if (pending !== null) {
274
+ const answer = { result: pending, keys: [] };
275
+ if (held === null || changeOf(held, answer) !== null)
276
+ deliver(answer);
277
+ held = digestOf(answer);
186
278
  return;
187
279
  }
188
- const next = reconciled(held, message);
189
- if (next === null)
190
- return;
191
- held = next.keyed;
192
- deliver(next.message);
280
+ let first = true;
281
+ const heard = (message) => {
282
+ if (!first) {
283
+ held = digestApplied(held, message);
284
+ deliver(message);
285
+ return;
286
+ }
287
+ first = false;
288
+ const change = held === null ? message : changeOf(held, message);
289
+ held = digestOf(message);
290
+ if (change !== null)
291
+ deliver(change);
292
+ };
293
+ const current = { ...plan, reach: planReach(reach), locked };
294
+ stop = runtime.watchPlan(current, (message) => {
295
+ if (open)
296
+ heard(message);
297
+ }, (error) => {
298
+ if (open)
299
+ fail(error);
300
+ });
301
+ })().catch((error) => {
302
+ if (open)
303
+ fail(error);
193
304
  });
194
- });
305
+ return () => {
306
+ open = false;
307
+ stop();
308
+ };
309
+ }, true);
195
310
  }
196
311
  if (topic === 'conversation') {
197
312
  return following(() => {
198
313
  if (conversing(reach))
199
- return watch(topic, input, deliver);
314
+ return watch(topic, input, deliver, fail);
200
315
  deliver(unheldView(input[0]));
201
316
  return () => { };
202
317
  });
@@ -204,64 +319,159 @@ export function narrowed(runtime, given) {
204
319
  if (topic === 'conversations' || topic === 'agents') {
205
320
  return following(() => {
206
321
  if (conversing(reach))
207
- return watch(topic, input, deliver);
322
+ return watch(topic, input, deliver, fail);
208
323
  deliver([]);
209
324
  return () => { };
210
325
  });
211
326
  }
212
- return watch(topic, input, deliver);
327
+ if (topic === 'figures' || topic === 'holdings') {
328
+ if (reach === null)
329
+ return watch(topic, input, deliver, fail);
330
+ fail(deviceUnreached());
331
+ return () => { };
332
+ }
333
+ return watch(topic, input, deliver, fail);
213
334
  };
335
+ const files = new Map();
336
+ let handed = 0;
337
+ async function hand(reading) {
338
+ const answer = await reading;
339
+ if (answer.kind !== 'binary')
340
+ return answer;
341
+ handed += 1;
342
+ const file = String(handed);
343
+ files.set(file, answer.file);
344
+ return { ...answer, file };
345
+ }
214
346
  const conversation = () => (conversing(reach) ? md.conversation : NO_CONVERSATION);
215
347
  const chatDraft = () => (conversing(reach) ? md.chatDraft : NO_CHAT_DRAFT);
216
348
  const view = {
217
349
  ...md,
218
- rooms: () => roomsWithin(reach, md.rooms()),
219
- query: ((input) => runtime.query(runtime.plan(input, reach))),
350
+ rooms: () => md.rooms().then((rooms) => roomsWithin(reach, rooms)),
351
+ query: (async (input) => {
352
+ const plan = await runtime.plan(input, reach);
353
+ const locked = await runtime.lockedRooms();
354
+ return unlocking(plan.rooms, locked) ?? runtime.query({ ...plan, locked });
355
+ }),
220
356
  search: (input) => runtime.search(input, reach),
221
- types(room) {
357
+ async types(room) {
358
+ if (holds(reach, room) && (await runtime.locked(room)))
359
+ throw lockedError(room);
222
360
  if (wholly(reach, room))
223
361
  return md.types(room);
224
362
  if (!holds(reach, room))
225
363
  return structuredClone(UNHELD_TYPES);
226
- const listed = md.rooms().find(({ locator }) => locator === room);
227
- return typesWithin(reach, listed, md.types(room));
364
+ return typesWithin(reach, await runtime.room(room), await md.types(room));
228
365
  },
229
366
  async save(room, roomDrafts, writtenBy) {
230
367
  if (!holds(reach, room))
231
368
  throw unreached(room);
232
- const outside = roomDrafts.find(({ path }) => !covers(reach, room, path) ||
233
- !moves(reach, room, md.roomDraft.read(room, path)?.parts.move));
369
+ if (await runtime.locked(room)) {
370
+ return { outcome: 'refused', code: ROOM_LOCKED, retryable: true };
371
+ }
372
+ const held = (await Promise.all(roomDrafts.map(({ path }) => md.roomDraft.read(room, path)))).map((draft) => draft?.parts.move);
373
+ const outside = roomDrafts.find(({ path }, at) => !covers(reach, room, path) || !moves(reach, room, held[at]));
234
374
  if (outside !== undefined) {
235
375
  return { outcome: 'refused', code: 'stale', retryable: false, file: outside.path };
236
376
  }
377
+ if (await intoLocked(held))
378
+ return { outcome: 'refused', code: ROOM_LOCKED, retryable: true };
237
379
  return savedWithin(reach, room, await md.save(room, roomDrafts, writtenBy));
238
380
  },
239
- history: (room, path, query) => covers(reach, room, path)
240
- ? md.history(room, path, query)
241
- : Promise.resolve(failure({ kind: 'room-not-readable', locator: room })),
381
+ async saveParts(room, parts, writtenBy) {
382
+ if (!holds(reach, room))
383
+ throw unreached(room);
384
+ const filed = reach === null ? undefined : parts.find(({ parts: one }) => carriesFile(one));
385
+ if (filed !== undefined) {
386
+ return { outcome: 'refused', code: ATTACH_REQUIRED, retryable: false, file: filed.path };
387
+ }
388
+ if (await runtime.locked(room)) {
389
+ return { outcome: 'refused', code: ROOM_LOCKED, retryable: true };
390
+ }
391
+ const held = parts.map(({ path, parts: one }) => readParts(one, path).move);
392
+ if (parts.some(({ path }, at) => !covers(reach, room, path) || !moves(reach, room, held[at]))) {
393
+ throw unreached(room);
394
+ }
395
+ if (await intoLocked(held))
396
+ return { outcome: 'refused', code: ROOM_LOCKED, retryable: true };
397
+ return savedWithin(reach, room, await md.saveParts(room, parts, writtenBy));
398
+ },
399
+ async resolve(room, path, destination) {
400
+ const at = await runtime.located(room, path, destination);
401
+ return at !== null && !covers(reach, at.room, at.path)
402
+ ? UNREADABLE
403
+ : md.resolve(room, path, destination);
404
+ },
405
+ history: async (room, path, query) => !covers(reach, room, path)
406
+ ? failure({ kind: 'room-not-readable', locator: room })
407
+ : (await runtime.locked(room))
408
+ ? lockedRoom(room)
409
+ : md.history(room, path, query),
242
410
  binaryFile: {
243
- read: (room, path, revision) => covers(reach, room, path)
244
- ? md.binaryFile.read(room, path, revision)
245
- : Promise.resolve(failure({ kind: 'room-not-readable', locator: room })),
246
- readReference: (reference) => refers(reach, runtime.referrerScope(reference.referrer))
247
- ? md.binaryFile.readReference(reference)
248
- : Promise.resolve(unreachedReference(reference.fileRef)),
411
+ read: async (room, path, revision) => !covers(reach, room, path)
412
+ ? failure({ kind: 'room-not-readable', locator: room })
413
+ : (await runtime.locked(room))
414
+ ? lockedRoom(room)
415
+ : hand(md.binaryFile.read(room, path, revision)),
416
+ link: async (room, path, revision) => !covers(reach, room, path)
417
+ ? failure({ kind: 'room-not-readable', locator: room })
418
+ : (await runtime.locked(room))
419
+ ? lockedRoom(room)
420
+ : md.binaryFile.link(room, path, revision),
421
+ show: async (room, path, revision) => !covers(reach, room, path)
422
+ ? failure({ kind: 'room-not-readable', locator: room })
423
+ : (await runtime.locked(room))
424
+ ? lockedRoom(room)
425
+ : hand(md.binaryFile.show(room, path, revision)),
426
+ attach: async (room, file) => !wholly(reach, room)
427
+ ? failure({ kind: 'room-not-readable', locator: room })
428
+ : (await runtime.locked(room))
429
+ ? lockedRoom(room)
430
+ : md.binaryFile.attach(room, file),
431
+ async part(file, part) {
432
+ const key = files.get(file);
433
+ if (key === undefined)
434
+ return null;
435
+ const bytes = await md.binaryFile.part(key, part);
436
+ if (bytes === null)
437
+ files.delete(file);
438
+ return bytes;
439
+ },
249
440
  },
250
- reached: (room, roomVersion, path) => (path === undefined ? wholly(reach, room) : covers(reach, room, path)) &&
251
- md.reached(room, roomVersion, path),
441
+ reached: async (room, roomVersion, path) => (path === undefined ? wholly(reach, room) : covers(reach, room, path)) &&
442
+ !(await runtime.locked(room)) &&
443
+ (await md.reached(room, roomVersion, path)),
252
444
  log: () => (reach === null ? md.log() : ''),
445
+ cleanUp: () => (reach === null ? md.cleanUp() : Promise.reject(deviceUnreached())),
446
+ unsent: () => (reach === null ? md.unsent() : Promise.reject(deviceUnreached())),
447
+ reset: () => (reach === null ? md.reset() : Promise.reject(deviceUnreached())),
448
+ readAgain: () => (reach === null ? md.readAgain() : Promise.reject(deviceUnreached())),
253
449
  roomDraft: {
254
- list: () => md.roomDraft.list().then((drafts) => draftsWithin(reach, drafts)),
255
- read: (room, path) => covers(reach, room, path) ? shownDraft(reach, md.roomDraft.read(room, path)) : null,
256
- async write(room, path, revision, parts) {
257
- if (!covers(reach, room, path) || !moves(reach, room, readParts(parts).move)) {
450
+ list: async () => unlocked(draftsWithin(reach, await md.roomDraft.list()), await runtime.lockedRooms()),
451
+ async read(room, path) {
452
+ if (!covers(reach, room, path))
453
+ return null;
454
+ if (await runtime.locked(room))
455
+ throw lockedError(room);
456
+ return shownDraft(reach, await md.roomDraft.read(room, path));
457
+ },
458
+ async write(room, path, revision, parts, next) {
459
+ if (reach !== null && carriesFile(parts))
460
+ throw attachRequired();
461
+ const move = readParts(parts, path).move;
462
+ if (!covers(reach, room, path) || !moves(reach, room, move))
258
463
  throw unreached(room);
259
- }
260
- return writeWithin(reach, await md.roomDraft.write(room, path, revision, parts));
464
+ if (await runtime.locked(room))
465
+ throw lockedError(room);
466
+ if (await intoLocked([move]))
467
+ throw lockedError(move.room);
468
+ return writeWithin(reach, await md.roomDraft.write(room, path, revision, parts, next));
261
469
  },
262
470
  async discard(room, path, revision) {
263
471
  if (!covers(reach, room, path))
264
472
  return staleWrite(null);
473
+ if (await runtime.locked(room))
474
+ throw lockedError(room);
265
475
  return writeWithin(reach, await md.roomDraft.discard(room, path, revision));
266
476
  },
267
477
  },
@@ -270,14 +480,23 @@ export function narrowed(runtime, given) {
270
480
  read: (id, options) => conversation().read(id, options),
271
481
  create: (input) => conversation().create(input),
272
482
  send: (id, operation, draft) => conversation().send(id, operation, draft),
273
- answer: (id, answer) => conversation().answer(id, answer),
274
- interrupt: (id) => conversation().interrupt(id),
275
- kill: (id) => conversation().kill(id),
276
- cancel: (id, turn) => conversation().cancel(id, turn),
277
- delete: (id) => conversation().delete(id),
483
+ answer: (id, answer, operation) => conversation().answer(id, answer, operation),
484
+ interrupt: (id, operation) => conversation().interrupt(id, operation),
485
+ kill: (id, operation) => conversation().kill(id, operation),
486
+ delete: (id, operation) => conversation().delete(id, operation),
487
+ takeOut: (id, message, operation) => conversation().takeOut(id, message, operation),
488
+ decide: (request, decision, operation) => conversation().decide(request, decision, operation),
489
+ rename: (id, name, operation) => conversation().rename(id, name, operation),
490
+ option: (id, option, value, operation) => conversation().option(id, option, value, operation),
491
+ retry: (id, message, operation) => conversation().retry(id, message, operation),
492
+ pins: () => conversation().pins(),
493
+ pin: (figures) => conversation().pin(figures),
494
+ openedTurns: () => conversation().openedTurns(),
495
+ openTurn: (id, turn) => conversation().openTurn(id, turn),
278
496
  },
279
497
  chatDraft: {
280
498
  write: (id, draft, revision) => chatDraft().write(id, draft, revision),
499
+ prepend: (id, draft) => chatDraft().prepend(id, draft),
281
500
  discard: (id) => chatDraft().discard(id),
282
501
  },
283
502
  observe: observing(within),
package/dist/react.d.ts CHANGED
@@ -1,10 +1,18 @@
1
+ import type { DocumentQuery, GroupQuery } from '@agentshouse/mdmodel';
2
+ import type { Acting, Lane, LaneShown } from './act-lanes.js';
1
3
  import type { MdRuntimeClient } from './client.js';
2
- import type { AppRoom, ConnectionRefusal, SaveResult } from './connection.js';
4
+ import type { AppRoom } from './listing.js';
5
+ import type { ConnectionRefusal } from './socket.js';
6
+ import type { SavedRoomDraft, SaveResult } from './saves.js';
3
7
  import type { Member, ServiceMode } from './adapter.js';
4
8
  import type { ConversationAgent, ConversationEntry, ConversationOptions, ConversationView } from './conversation.js';
5
9
  import { type RuntimeError } from './failure.js';
10
+ import type { FiguresResult } from './figures.js';
11
+ import type { Holdings } from './holdings.js';
12
+ import type { Expecting } from './expectation.js';
6
13
  import type { QueueEntry } from './outcome.js';
7
- import type { DocumentQuery, DocumentResult, GroupQuery, GroupResult, PendingResult } from './query.js';
14
+ import type { DocumentResult, GroupResult, PendingResult } from './query.js';
15
+ import type { Readiness } from './readiness.js';
8
16
  import type { RoomDraft, RoomDraftParts } from './room-draft.js';
9
17
  import type { SyncStatus } from './status.js';
10
18
  type Client = MdRuntimeClient | null;
@@ -16,11 +24,13 @@ export type Observed<T> = {
16
24
  };
17
25
  export declare function useObserve(client: Client, topic: 'deployment-facts'): Observed<unknown>;
18
26
  export declare function useObserve(client: Client, topic: 'rooms'): Observed<readonly AppRoom[]>;
27
+ export declare function useObserve(client: Client, topic: 'readiness'): Observed<Readiness>;
19
28
  export declare function useObserve(client: Client, topic: 'connection-refusal'): Observed<ConnectionRefusal | null>;
20
29
  export declare function useObserve(client: Client, topic: 'storage-loss'): Observed<string | null>;
21
30
  export declare function useObserve(client: Client, topic: 'sync-status'): Observed<SyncStatus>;
22
31
  export declare function useObserve(client: Client, topic: 'service-mode'): Observed<ServiceMode>;
23
32
  export declare function useObserve(client: Client, topic: 'member'): Observed<Member | null>;
33
+ export declare function useObserve(client: Client, topic: 'authority-changes'): Observed<number>;
24
34
  export declare function useObserve(client: Client, topic: 'query', query: DocumentQuery): Observed<DocumentResult | PendingResult>;
25
35
  export declare function useObserve(client: Client, topic: 'query', query: GroupQuery): Observed<GroupResult | PendingResult>;
26
36
  export declare function useObserve(client: Client, topic: 'queue', locator: string): Observed<readonly QueueEntry[]>;
@@ -29,13 +39,24 @@ export declare function useObserve(client: Client, topic: 'presentation'): Obser
29
39
  export declare function useObserve(client: Client, topic: 'conversation', conversation: string, options: ConversationOptions): Observed<ConversationView>;
30
40
  export declare function useObserve(client: Client, topic: 'conversations'): Observed<readonly ConversationEntry[]>;
31
41
  export declare function useObserve(client: Client, topic: 'agents'): Observed<readonly ConversationAgent[]>;
42
+ export declare function useObserve(client: Client, topic: 'figures'): Observed<FiguresResult>;
43
+ export declare function useObserve(client: Client, topic: 'holdings'): Observed<Holdings>;
44
+ export declare function useReading<E extends {
45
+ readonly key: string;
46
+ }>(store: Pick<Expecting<E>, 'reads' | 'heard' | 'left'>, asks: (one: E) => boolean, shown: ((one: E) => boolean) | null): void;
47
+ export type LaneHeld<O, E extends {
48
+ readonly key: string;
49
+ }> = LaneShown<O> & Pick<Lane<O, E>, 'run' | 'forget'>;
50
+ export declare function useLane<O, E extends {
51
+ readonly key: string;
52
+ }>(lanes: Acting<O, E>): LaneHeld<O, E>;
32
53
  export type Saving = {
33
54
  readonly busy: boolean;
34
55
  readonly outcome: SaveResult | null;
35
56
  readonly failure: RuntimeError | null;
36
- save(room: string, roomDrafts: ReadonlyMap<string, RoomDraftParts>): Promise<SaveResult>;
57
+ save(room: string, parts: ReadonlyMap<string, RoomDraftParts>): Promise<SaveResult>;
58
+ saveWritten(room: string, roomDrafts: readonly SavedRoomDraft[]): Promise<SaveResult>;
37
59
  };
38
- export declare function saveRoomDrafts(client: MdRuntimeClient, room: string, roomDrafts: ReadonlyMap<string, RoomDraftParts>): Promise<SaveResult>;
39
60
  export declare function useSave(client: MdRuntimeClient): Saving;
40
61
  export {};
41
62
  //# sourceMappingURL=react.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"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"}