@agentshouse/mdruntime 0.1.0-caee7332d2235 → 0.1.0-caf080a9a9c60

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