@agentshouse/mdruntime 0.1.0-cee9c8aa4cd86 → 0.1.0-cef76ea952695

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 (376) hide show
  1. package/README.md +19 -17
  2. package/dist/acceptance.d.ts +6 -0
  3. package/dist/acceptance.d.ts.map +1 -0
  4. package/dist/acceptance.js +385 -0
  5. package/dist/actions.d.ts +20 -0
  6. package/dist/actions.d.ts.map +1 -0
  7. package/dist/actions.js +251 -0
  8. package/dist/adapter.d.ts +111 -109
  9. package/dist/adapter.d.ts.map +1 -1
  10. package/dist/attached-model.d.ts +5 -11
  11. package/dist/attached-model.d.ts.map +1 -1
  12. package/dist/attached-model.js +36 -47
  13. package/dist/binary.d.ts +0 -5
  14. package/dist/binary.d.ts.map +1 -1
  15. package/dist/binary.js +1 -1
  16. package/dist/bootstrap.d.ts +22 -10
  17. package/dist/bootstrap.d.ts.map +1 -1
  18. package/dist/bootstrap.js +303 -123
  19. package/dist/cell.d.ts +6 -0
  20. package/dist/cell.d.ts.map +1 -0
  21. package/dist/cell.js +9 -0
  22. package/dist/chain.d.ts +2 -1
  23. package/dist/chain.d.ts.map +1 -1
  24. package/dist/change.d.ts +1 -0
  25. package/dist/change.d.ts.map +1 -1
  26. package/dist/change.js +4 -2
  27. package/dist/chat-types.d.ts +5 -0
  28. package/dist/chat-types.d.ts.map +1 -0
  29. package/dist/chat-types.js +13 -0
  30. package/dist/client.d.ts +30 -14
  31. package/dist/client.d.ts.map +1 -1
  32. package/dist/client.js +61 -10
  33. package/dist/collection.d.ts +7 -4
  34. package/dist/collection.d.ts.map +1 -1
  35. package/dist/collection.js +24 -19
  36. package/dist/compile.d.ts +6 -6
  37. package/dist/compile.d.ts.map +1 -1
  38. package/dist/compile.js +290 -297
  39. package/dist/connection.d.ts +6 -142
  40. package/dist/connection.d.ts.map +1 -1
  41. package/dist/connection.js +105 -4827
  42. package/dist/context.d.ts +2 -0
  43. package/dist/context.d.ts.map +1 -0
  44. package/dist/{chat/context.js → context.js} +1 -4
  45. package/dist/conversation-live.d.ts +135 -0
  46. package/dist/conversation-live.d.ts.map +1 -0
  47. package/dist/conversation-live.js +247 -0
  48. package/dist/conversation-row.d.ts +33 -0
  49. package/dist/conversation-row.d.ts.map +1 -0
  50. package/dist/conversation-row.js +53 -0
  51. package/dist/conversation.d.ts +42 -46
  52. package/dist/conversation.d.ts.map +1 -1
  53. package/dist/conversation.js +901 -815
  54. package/dist/discovery.d.ts +10 -0
  55. package/dist/discovery.d.ts.map +1 -0
  56. package/dist/discovery.js +175 -0
  57. package/dist/durability.d.ts +15 -4
  58. package/dist/durability.d.ts.map +1 -1
  59. package/dist/durability.js +5 -0
  60. package/dist/entry.d.ts +3 -2
  61. package/dist/entry.d.ts.map +1 -1
  62. package/dist/entry.js +18 -8
  63. package/dist/expectation.d.ts +4 -2
  64. package/dist/expectation.d.ts.map +1 -1
  65. package/dist/expectation.js +33 -11
  66. package/dist/failure.d.ts +1 -0
  67. package/dist/failure.d.ts.map +1 -1
  68. package/dist/failure.js +3 -0
  69. package/dist/figures.d.ts +49 -0
  70. package/dist/figures.d.ts.map +1 -0
  71. package/dist/figures.js +197 -0
  72. package/dist/file.d.ts +2 -11
  73. package/dist/file.d.ts.map +1 -1
  74. package/dist/file.js +6 -4
  75. package/dist/holdings.d.ts +29 -0
  76. package/dist/holdings.d.ts.map +1 -0
  77. package/dist/holdings.js +95 -0
  78. package/dist/host.d.ts +4 -6
  79. package/dist/host.d.ts.map +1 -1
  80. package/dist/host.js +59 -38
  81. package/dist/identity.d.ts +0 -1
  82. package/dist/identity.d.ts.map +1 -1
  83. package/dist/identity.js +0 -3
  84. package/dist/index.d.ts +30 -13
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +10 -3
  87. package/dist/install.d.ts +56 -0
  88. package/dist/install.d.ts.map +1 -0
  89. package/dist/install.js +556 -0
  90. package/dist/job.d.ts +5 -0
  91. package/dist/job.d.ts.map +1 -0
  92. package/dist/job.js +7 -0
  93. package/dist/lifecycle.d.ts +7 -0
  94. package/dist/lifecycle.d.ts.map +1 -0
  95. package/dist/lifecycle.js +270 -0
  96. package/dist/listing.d.ts +53 -0
  97. package/dist/listing.d.ts.map +1 -0
  98. package/dist/listing.js +176 -0
  99. package/dist/live.d.ts +5 -4
  100. package/dist/live.d.ts.map +1 -1
  101. package/dist/live.js +63 -21
  102. package/dist/locks.d.ts +9 -0
  103. package/dist/locks.d.ts.map +1 -0
  104. package/dist/locks.js +62 -0
  105. package/dist/log.d.ts +1 -0
  106. package/dist/log.d.ts.map +1 -1
  107. package/dist/lost.d.ts +5 -0
  108. package/dist/lost.d.ts.map +1 -0
  109. package/dist/lost.js +61 -0
  110. package/dist/media.d.ts +8 -0
  111. package/dist/media.d.ts.map +1 -0
  112. package/dist/media.js +218 -0
  113. package/dist/memory.d.ts +13 -6
  114. package/dist/memory.d.ts.map +1 -1
  115. package/dist/memory.js +219 -102
  116. package/dist/messages.d.ts +24 -3
  117. package/dist/messages.d.ts.map +1 -1
  118. package/dist/messages.js +89 -31
  119. package/dist/model.d.ts +8 -10
  120. package/dist/model.d.ts.map +1 -1
  121. package/dist/model.js +6 -18
  122. package/dist/models.d.ts +14 -0
  123. package/dist/models.d.ts.map +1 -0
  124. package/dist/models.js +197 -0
  125. package/dist/observation.d.ts +3 -2
  126. package/dist/observation.d.ts.map +1 -1
  127. package/dist/observation.js +15 -15
  128. package/dist/opened.js +3 -3
  129. package/dist/opening.d.ts +4 -0
  130. package/dist/opening.d.ts.map +1 -0
  131. package/dist/opening.js +60 -0
  132. package/dist/outcome.d.ts +17 -7
  133. package/dist/outcome.d.ts.map +1 -1
  134. package/dist/outcome.js +19 -5
  135. package/dist/overlay.d.ts +1 -0
  136. package/dist/overlay.d.ts.map +1 -1
  137. package/dist/overlay.js +12 -1
  138. package/dist/parts.d.ts +11 -0
  139. package/dist/parts.d.ts.map +1 -0
  140. package/dist/parts.js +21 -0
  141. package/dist/paths.d.ts +2 -0
  142. package/dist/paths.d.ts.map +1 -1
  143. package/dist/paths.js +26 -0
  144. package/dist/preparation.d.ts +20 -0
  145. package/dist/preparation.d.ts.map +1 -0
  146. package/dist/preparation.js +233 -0
  147. package/dist/queries.d.ts +16 -0
  148. package/dist/queries.d.ts.map +1 -0
  149. package/dist/queries.js +272 -0
  150. package/dist/query.d.ts +19 -206
  151. package/dist/query.d.ts.map +1 -1
  152. package/dist/query.js +3 -494
  153. package/dist/{chat/questions.d.ts → questions.d.ts} +5 -2
  154. package/dist/questions.d.ts.map +1 -0
  155. package/dist/{chat/questions.js → questions.js} +13 -2
  156. package/dist/reach.d.ts +20 -13
  157. package/dist/reach.d.ts.map +1 -1
  158. package/dist/reach.js +204 -135
  159. package/dist/react.d.ts +14 -2
  160. package/dist/react.d.ts.map +1 -1
  161. package/dist/react.js +10 -1
  162. package/dist/{chat/read.d.ts → read.d.ts} +2 -0
  163. package/dist/read.d.ts.map +1 -0
  164. package/dist/{chat/read.js → read.js} +4 -0
  165. package/dist/readiness.d.ts +12 -16
  166. package/dist/readiness.d.ts.map +1 -1
  167. package/dist/readiness.js +2 -8
  168. package/dist/reads.d.ts +36 -10
  169. package/dist/reads.d.ts.map +1 -1
  170. package/dist/reads.js +159 -83
  171. package/dist/recovery.d.ts +1 -0
  172. package/dist/recovery.d.ts.map +1 -1
  173. package/dist/recovery.js +35 -1
  174. package/dist/refresh.d.ts +10 -4
  175. package/dist/refresh.d.ts.map +1 -1
  176. package/dist/refresh.js +92 -30
  177. package/dist/refusal.d.ts +5 -0
  178. package/dist/refusal.d.ts.map +1 -0
  179. package/dist/refusal.js +57 -0
  180. package/dist/replica.d.ts +11 -10
  181. package/dist/replica.d.ts.map +1 -1
  182. package/dist/replica.js +56 -23
  183. package/dist/room-draft.d.ts +22 -7
  184. package/dist/room-draft.d.ts.map +1 -1
  185. package/dist/room-draft.js +134 -54
  186. package/dist/room-drafts.d.ts +24 -0
  187. package/dist/room-drafts.d.ts.map +1 -0
  188. package/dist/room-drafts.js +217 -0
  189. package/dist/rows.d.ts +18 -16
  190. package/dist/rows.d.ts.map +1 -1
  191. package/dist/rows.js +45 -153
  192. package/dist/runtime.d.ts +43 -0
  193. package/dist/runtime.d.ts.map +1 -0
  194. package/dist/runtime.js +1 -0
  195. package/dist/save.d.ts +7 -1
  196. package/dist/save.d.ts.map +1 -1
  197. package/dist/save.js +46 -27
  198. package/dist/saves.d.ts +70 -0
  199. package/dist/saves.d.ts.map +1 -0
  200. package/dist/saves.js +1005 -0
  201. package/dist/search.d.ts +12 -63
  202. package/dist/search.d.ts.map +1 -1
  203. package/dist/search.js +9 -52
  204. package/dist/seed.d.ts +11 -2
  205. package/dist/seed.d.ts.map +1 -1
  206. package/dist/seed.js +71 -1
  207. package/dist/shared.d.ts +1 -7
  208. package/dist/shared.d.ts.map +1 -1
  209. package/dist/shared.js +13 -105
  210. package/dist/shown.d.ts +31 -0
  211. package/dist/shown.d.ts.map +1 -0
  212. package/dist/shown.js +290 -0
  213. package/dist/socket/admission.d.ts +7 -0
  214. package/dist/socket/admission.d.ts.map +1 -0
  215. package/dist/socket/admission.js +39 -0
  216. package/dist/socket/answers.d.ts +6 -0
  217. package/dist/socket/answers.d.ts.map +1 -0
  218. package/dist/socket/answers.js +20 -0
  219. package/dist/socket/lanes.d.ts +20 -0
  220. package/dist/socket/lanes.d.ts.map +1 -0
  221. package/dist/socket/lanes.js +77 -0
  222. package/dist/socket/reads.d.ts +10 -0
  223. package/dist/socket/reads.d.ts.map +1 -0
  224. package/dist/socket/reads.js +31 -0
  225. package/dist/socket/rooms.d.ts +44 -0
  226. package/dist/socket/rooms.d.ts.map +1 -0
  227. package/dist/socket/rooms.js +90 -0
  228. package/dist/socket/session.d.ts +38 -0
  229. package/dist/socket/session.d.ts.map +1 -0
  230. package/dist/socket/session.js +23 -0
  231. package/dist/socket.d.ts +70 -0
  232. package/dist/socket.d.ts.map +1 -0
  233. package/dist/socket.js +175 -0
  234. package/dist/source.d.ts +61 -0
  235. package/dist/source.d.ts.map +1 -0
  236. package/dist/source.js +82 -0
  237. package/dist/status.d.ts +4 -5
  238. package/dist/status.d.ts.map +1 -1
  239. package/dist/status.js +3 -7
  240. package/dist/store/fences.d.ts +16 -0
  241. package/dist/store/fences.d.ts.map +1 -0
  242. package/dist/store/fences.js +26 -0
  243. package/dist/store/installs.d.ts +30 -0
  244. package/dist/store/installs.d.ts.map +1 -0
  245. package/dist/store/installs.js +34 -0
  246. package/dist/store/readiness.d.ts +10 -0
  247. package/dist/store/readiness.d.ts.map +1 -0
  248. package/dist/store/readiness.js +52 -0
  249. package/dist/store/records.d.ts +210 -0
  250. package/dist/store/records.d.ts.map +1 -0
  251. package/dist/store/records.js +428 -0
  252. package/dist/store/room-held.d.ts +8 -0
  253. package/dist/store/room-held.d.ts.map +1 -0
  254. package/dist/store/room-held.js +17 -0
  255. package/dist/store/space.d.ts +11 -0
  256. package/dist/store/space.d.ts.map +1 -0
  257. package/dist/store/space.js +41 -0
  258. package/dist/store/watchers.d.ts +17 -0
  259. package/dist/store/watchers.d.ts.map +1 -0
  260. package/dist/store/watchers.js +56 -0
  261. package/dist/store/writes.d.ts +24 -0
  262. package/dist/store/writes.d.ts.map +1 -0
  263. package/dist/store/writes.js +125 -0
  264. package/dist/store.d.ts +105 -149
  265. package/dist/store.d.ts.map +1 -1
  266. package/dist/store.js +143 -390
  267. package/dist/stored.d.ts +67 -49
  268. package/dist/stored.d.ts.map +1 -1
  269. package/dist/stored.js +358 -253
  270. package/dist/surface.d.ts +88 -0
  271. package/dist/surface.d.ts.map +1 -0
  272. package/dist/surface.js +224 -0
  273. package/dist/sync.d.ts +19 -0
  274. package/dist/sync.d.ts.map +1 -0
  275. package/dist/sync.js +532 -0
  276. package/dist/tables.d.ts +140 -60
  277. package/dist/tables.d.ts.map +1 -1
  278. package/dist/tables.js +268 -101
  279. package/dist/tallies.d.ts +18 -0
  280. package/dist/tallies.d.ts.map +1 -0
  281. package/dist/tallies.js +129 -0
  282. package/dist/transfer.d.ts +0 -5
  283. package/dist/transfer.d.ts.map +1 -1
  284. package/dist/validation.d.ts +3 -4
  285. package/dist/validation.d.ts.map +1 -1
  286. package/dist/validation.js +42 -100
  287. package/dist/windows.d.ts +1 -12
  288. package/dist/windows.d.ts.map +1 -1
  289. package/dist/windows.js +2 -75
  290. package/dist/wire.d.ts +22 -10
  291. package/dist/wire.d.ts.map +1 -1
  292. package/dist/wire.js +9 -3
  293. package/package.json +12 -18
  294. package/AGENTS.md +0 -320
  295. package/dist/chat/acts.d.ts +0 -33
  296. package/dist/chat/acts.d.ts.map +0 -1
  297. package/dist/chat/acts.js +0 -36
  298. package/dist/chat/context.d.ts +0 -3
  299. package/dist/chat/context.d.ts.map +0 -1
  300. package/dist/chat/earlier.d.ts +0 -10
  301. package/dist/chat/earlier.d.ts.map +0 -1
  302. package/dist/chat/earlier.js +0 -54
  303. package/dist/chat/house.d.ts +0 -25
  304. package/dist/chat/house.d.ts.map +0 -1
  305. package/dist/chat/house.js +0 -38
  306. package/dist/chat/input.d.ts +0 -11
  307. package/dist/chat/input.d.ts.map +0 -1
  308. package/dist/chat/input.js +0 -92
  309. package/dist/chat/kit.d.ts +0 -61
  310. package/dist/chat/kit.d.ts.map +0 -1
  311. package/dist/chat/kit.js +0 -123
  312. package/dist/chat/lasting.d.ts +0 -6
  313. package/dist/chat/lasting.d.ts.map +0 -1
  314. package/dist/chat/lasting.js +0 -19
  315. package/dist/chat/list.d.ts +0 -28
  316. package/dist/chat/list.d.ts.map +0 -1
  317. package/dist/chat/list.js +0 -103
  318. package/dist/chat/markdown.d.ts +0 -21
  319. package/dist/chat/markdown.d.ts.map +0 -1
  320. package/dist/chat/markdown.js +0 -246
  321. package/dist/chat/message.d.ts +0 -7
  322. package/dist/chat/message.d.ts.map +0 -1
  323. package/dist/chat/message.js +0 -254
  324. package/dist/chat/messages.d.ts +0 -35
  325. package/dist/chat/messages.d.ts.map +0 -1
  326. package/dist/chat/messages.js +0 -210
  327. package/dist/chat/name.d.ts +0 -7
  328. package/dist/chat/name.d.ts.map +0 -1
  329. package/dist/chat/name.js +0 -37
  330. package/dist/chat/opened.d.ts +0 -12
  331. package/dist/chat/opened.d.ts.map +0 -1
  332. package/dist/chat/opened.js +0 -19
  333. package/dist/chat/overlay.d.ts +0 -32
  334. package/dist/chat/overlay.d.ts.map +0 -1
  335. package/dist/chat/overlay.js +0 -103
  336. package/dist/chat/parts.d.ts +0 -58
  337. package/dist/chat/parts.d.ts.map +0 -1
  338. package/dist/chat/parts.js +0 -120
  339. package/dist/chat/pieces.d.ts +0 -62
  340. package/dist/chat/pieces.d.ts.map +0 -1
  341. package/dist/chat/pieces.js +0 -1110
  342. package/dist/chat/process.d.ts +0 -20
  343. package/dist/chat/process.d.ts.map +0 -1
  344. package/dist/chat/process.js +0 -32
  345. package/dist/chat/provider.d.ts +0 -70
  346. package/dist/chat/provider.d.ts.map +0 -1
  347. package/dist/chat/provider.js +0 -635
  348. package/dist/chat/question.d.ts +0 -9
  349. package/dist/chat/question.d.ts.map +0 -1
  350. package/dist/chat/question.js +0 -69
  351. package/dist/chat/questions.d.ts.map +0 -1
  352. package/dist/chat/read.d.ts.map +0 -1
  353. package/dist/chat/ready.d.ts +0 -37
  354. package/dist/chat/ready.d.ts.map +0 -1
  355. package/dist/chat/ready.js +0 -93
  356. package/dist/chat/room-file.d.ts +0 -8
  357. package/dist/chat/room-file.d.ts.map +0 -1
  358. package/dist/chat/room-file.js +0 -72
  359. package/dist/chat/steady.d.ts +0 -3
  360. package/dist/chat/steady.d.ts.map +0 -1
  361. package/dist/chat/steady.js +0 -26
  362. package/dist/chat/style.d.ts +0 -4
  363. package/dist/chat/style.d.ts.map +0 -1
  364. package/dist/chat/style.js +0 -307
  365. package/dist/chat.d.ts +0 -15
  366. package/dist/chat.d.ts.map +0 -1
  367. package/dist/chat.js +0 -8
  368. package/dist/fence.d.ts +0 -6
  369. package/dist/fence.d.ts.map +0 -1
  370. package/dist/fence.js +0 -10
  371. package/dist/fulltext.d.ts +0 -27
  372. package/dist/fulltext.d.ts.map +0 -1
  373. package/dist/fulltext.js +0 -368
  374. package/dist/words.d.ts +0 -19
  375. package/dist/words.d.ts.map +0 -1
  376. package/dist/words.js +0 -150
package/dist/query.js CHANGED
@@ -1,495 +1,4 @@
1
- import { pointerFacts, } from '@agentshouse/mdmodel';
2
- import { referenceField } from './model.js';
3
- import { normalize } from './paths.js';
4
- import { decodedCursor } from './windows.js';
5
- export class QueryError extends Error {
6
- code;
7
- retryable = false;
8
- constructor(code, at, problem) {
9
- super(`${code} at ${at}: ${problem}`);
10
- this.code = code;
11
- }
12
- }
13
- const RANGE = ['$gt', '$gte', '$lt', '$lte'];
14
- const SINGLE = ['$eq', '$ne', '$in', '$nin', '$all', '$size', '$exists'];
15
- const FILTER = ['rooms', 'types', 'where', 'pathPrefix', 'folder', 'paths', 'hop', 'backlinks'];
16
- const RELATED = ['types', 'where', 'pathPrefix', 'field'];
17
- const PARTS = ['fields', 'sections', 'preamble', 'markdown', 'backlinks', 'change', 'fileId'];
18
- const ORDER = ['by', 'direction', 'nulls', 'stringSort', 'locale', 'localeOptions'];
19
- const CALENDAR_DATE = /^(\d{4})-(\d{2})-(\d{2})$/;
20
- const STRAY_ESCAPE = /~(?![01])/u;
21
- export function invalid(at, problem) {
22
- throw new QueryError('invalid-query', at, problem);
23
- }
24
- function place(at, name) {
25
- return at === '' ? name : `${at}.${name}`;
26
- }
27
- export function plain(value) {
28
- return (typeof value === 'object' &&
29
- value !== null &&
30
- !Array.isArray(value) &&
31
- (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null));
32
- }
33
- export function known(value, allowed, at) {
34
- for (const name of Object.keys(value)) {
35
- if (!allowed.includes(name))
36
- invalid(place(at, name), 'unknown part');
37
- }
38
- }
39
- function list(input, at) {
40
- if (!Array.isArray(input))
41
- invalid(at, 'expects a list');
42
- return input;
43
- }
44
- function value(input, at) {
45
- if (Array.isArray(input))
46
- invalid(at, 'a list is not a value');
47
- if (input !== null &&
48
- typeof input !== 'string' &&
49
- typeof input !== 'boolean' &&
50
- !(typeof input === 'number' && Number.isFinite(input))) {
51
- invalid(at, 'not a value');
52
- }
53
- return input;
54
- }
55
- function values(input, at) {
56
- return list(input, at).map((item, index) => value(item, `${at}[${index}]`));
57
- }
58
- function names(input, at) {
59
- const listed = list(input, at);
60
- if (listed.some((item) => typeof item !== 'string'))
61
- invalid(at, 'expects a list of names');
62
- return [...new Set(listed)].sort();
63
- }
64
- function pathsOf(input) {
65
- const listed = list(input, 'paths');
66
- if (listed.some((item) => typeof item !== 'string' || item === '' || normalize(item) !== item)) {
67
- invalid('paths', 'expects a list of Paths');
68
- }
69
- return [...new Set(listed)].sort();
70
- }
71
- function directory(input, at) {
72
- if (typeof input !== 'string' || normalize(input) !== input) {
73
- invalid(at, 'expects a normalized directory');
74
- }
75
- return input;
76
- }
77
- function calendarDate(value) {
78
- const match = CALENDAR_DATE.exec(value);
79
- if (match === null)
80
- return false;
81
- const [year, month, day] = match.slice(1).map(Number);
82
- const date = new Date(Date.UTC(year, month - 1, day));
83
- return (date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day);
84
- }
85
- function itemOf(facts) {
86
- return facts.type === 'array' ? facts.items : facts;
87
- }
88
- function fits(facts, value) {
89
- const item = itemOf(facts);
90
- if (item?.type === undefined)
91
- return true;
92
- if (item.values !== undefined)
93
- return item.values.includes(value);
94
- if (item.type === 'number')
95
- return typeof value === 'number';
96
- if (item.type === 'integer')
97
- return Number.isSafeInteger(value);
98
- if (item.type === 'boolean')
99
- return typeof value === 'boolean';
100
- if (item.type !== 'string' || typeof value !== 'string')
101
- return false;
102
- if (item.reference !== undefined)
103
- return value !== '' && normalize(value) === value;
104
- if (item.format === 'date')
105
- return calendarDate(value);
106
- return true;
107
- }
108
- function typing(facts, rooms, types, at) {
109
- const read = rooms === null ? facts.rooms : facts.rooms.filter((room) => rooms.includes(room.locator));
110
- const acquiring = !facts.listed &&
111
- (rooms === null ||
112
- rooms.some((locator) => !facts.rooms.some((room) => room.locator === locator)));
113
- const available = !acquiring && read.every((room) => room.available);
114
- const declared = read.flatMap((room) => room.types);
115
- for (const name of types ?? []) {
116
- if (name === 'any' || !available || declared.some((type) => type.name === name))
117
- continue;
118
- throw new QueryError('unknown-type', place(at, 'types'), `no model it reads declares ${name}`);
119
- }
120
- return {
121
- untyped: types === null || types.includes('any') || !available,
122
- types: types === null ? declared : declared.filter((type) => types.includes(type.name)),
123
- };
124
- }
125
- function pointer(input, at) {
126
- if (typeof input !== 'string' || !input.startsWith('/') || STRAY_ESCAPE.test(input)) {
127
- invalid(at, 'expects a JSON Pointer');
128
- }
129
- return input;
130
- }
131
- function specs(typed, input, at) {
132
- const field = pointer(input, at);
133
- const declared = typed.types.flatMap((type) => {
134
- const spec = pointerFacts(type, field);
135
- return spec === undefined ? [] : [spec];
136
- });
137
- if (declared.length === 0 && !typed.untyped) {
138
- throw new QueryError('unknown-field', at, `no MD Type it reads declares ${field}`);
139
- }
140
- if (!declared.some((spec) => spec.conditional))
141
- return declared;
142
- return declared.map((spec) => ({
143
- facts: { prose: false },
144
- through: several(spec),
145
- conditional: true,
146
- }));
147
- }
148
- function several(spec) {
149
- return spec.through || spec.facts.type === 'array';
150
- }
151
- function single(spec) {
152
- return spec.facts.type !== undefined && spec.facts.type !== 'array';
153
- }
154
- function every(declared, holds) {
155
- return declared.length > 0 && declared.every(holds);
156
- }
157
- function kind(declared, checked, at) {
158
- if (checked === null ||
159
- declared.length === 0 ||
160
- declared.some((spec) => fits(spec.facts, checked))) {
161
- return;
162
- }
163
- throw new QueryError('wrong-kind', at, `${JSON.stringify(checked)} is not of its field's kind`);
164
- }
165
- function test(declared, input, at) {
166
- if (!plain(input)) {
167
- const equal = value(input, at);
168
- kind(declared, equal, at);
169
- return { op: 'eq', value: equal };
170
- }
171
- const operators = Object.keys(input);
172
- if (operators.length === 0)
173
- invalid(at, 'names no operator');
174
- if (operators.some((operator) => RANGE.includes(operator))) {
175
- const stray = operators.find((operator) => !RANGE.includes(operator));
176
- if (stray !== undefined)
177
- invalid(place(at, stray), 'cannot join a range');
178
- if (every(declared, (spec) => spec.facts.type === 'array'))
179
- invalid(at, 'a range on a list');
180
- if (every(declared, (spec) => spec.facts.type === 'boolean' || spec.facts.type === 'object')) {
181
- throw new QueryError('wrong-kind', at, 'its field does not compare in order');
182
- }
183
- return {
184
- op: 'range',
185
- bounds: RANGE.filter((operator) => operators.includes(operator)).map((operator) => {
186
- const bound = value(input[operator], place(at, operator));
187
- if (bound === null)
188
- invalid(place(at, operator), 'a range bound is never null');
189
- kind(declared, bound, place(at, operator));
190
- return [operator.slice(1), bound];
191
- }),
192
- };
193
- }
194
- if (operators.length > 1)
195
- invalid(place(at, operators[1]), 'names a second operator');
196
- const [operator] = operators;
197
- const where = place(at, operator);
198
- if (!SINGLE.includes(operator))
199
- invalid(where, 'unknown operator');
200
- const operand = input[operator];
201
- if (operator === '$eq' || operator === '$ne') {
202
- const compared = value(operand, where);
203
- kind(declared, compared, where);
204
- return operator === '$eq' ? { op: 'eq', value: compared } : { op: 'ne', value: compared };
205
- }
206
- if (operator === '$in' || operator === '$nin' || operator === '$all') {
207
- const compared = values(operand, where);
208
- compared.forEach((item, index) => kind(declared, item, `${where}[${index}]`));
209
- if (operator === '$in')
210
- return { op: 'in', values: compared };
211
- if (operator === '$nin')
212
- return { op: 'nin', values: compared };
213
- if (compared.includes(null))
214
- invalid(where, 'a list holds no null');
215
- if (every(declared, single))
216
- invalid(where, 'the field is not a list');
217
- return { op: 'all', values: compared };
218
- }
219
- if (operator === '$size') {
220
- if (!Number.isSafeInteger(operand) || operand < 0) {
221
- invalid(where, 'expects a nonnegative integer');
222
- }
223
- if (every(declared, single))
224
- invalid(where, 'the field is not a list');
225
- return { op: 'size', size: operand };
226
- }
227
- if (typeof operand !== 'boolean')
228
- invalid(where, 'expects true or false');
229
- return { op: 'exists', exists: operand };
230
- }
231
- function condition(typed, input, at) {
232
- if (!plain(input))
233
- invalid(at, 'expects an object of field predicates');
234
- const conditions = [];
235
- for (const name of Object.keys(input).sort()) {
236
- const where = name.startsWith('/') ? `${at}${name}` : place(at, name);
237
- const entry = input[name];
238
- if (name === '$and' || name === '$or') {
239
- const nested = list(entry, where).map((item, index) => condition(typed, item, `${where}[${index}]`));
240
- if (nested.length === 0)
241
- invalid(where, 'expects a nonempty list');
242
- conditions.push(name === '$and' ? { every: nested } : { some: nested });
243
- continue;
244
- }
245
- if (name.startsWith('$'))
246
- invalid(where, 'unknown operator');
247
- conditions.push({ field: name, test: test(specs(typed, name, where), entry, where) });
248
- }
249
- if (conditions.length === 0)
250
- invalid(at, 'names no field');
251
- return conditions.length === 1 ? conditions[0] : { every: conditions };
252
- }
253
- function scope(facts, rooms, input, at) {
254
- const types = input.types === undefined ? null : names(input.types, place(at, 'types'));
255
- const typed = typing(facts, rooms, types, at);
256
- return {
257
- typed,
258
- types,
259
- where: input.where === undefined || (plain(input.where) && Object.keys(input.where).length === 0)
260
- ? null
261
- : condition(typed, input.where, place(at, 'where')),
262
- pathPrefix: input.pathPrefix === undefined ? null : directory(input.pathPrefix, place(at, 'pathPrefix')),
263
- };
264
- }
265
- function referenceName(typed, field, at) {
266
- const declared = specs(typed, field, at);
267
- if (declared.length > 0 &&
268
- !declared.some((spec) => spec.conditional || referenceField(spec.facts))) {
269
- invalid(at, 'not a reference field');
270
- }
271
- return field;
272
- }
273
- function hopOf(facts, rooms, root, input) {
274
- if (!plain(input))
275
- invalid('hop', 'expects an object');
276
- known(input, RELATED, 'hop');
277
- const field = referenceName(root, input.field, 'hop.field');
278
- const { types, where, pathPrefix } = scope(facts, rooms, input, 'hop');
279
- return { types, where, pathPrefix, field };
280
- }
281
- function backlinksOf(facts, rooms, input) {
282
- if (!plain(input))
283
- invalid('backlinks', 'expects an object');
284
- known(input, RELATED, 'backlinks');
285
- const { typed, types, where, pathPrefix } = scope(facts, rooms, input, 'backlinks');
286
- const field = input.field === undefined ? null : referenceName(typed, input.field, 'backlinks.field');
287
- return { types, where, pathPrefix, field };
288
- }
289
- function keyPlan(typed, input, at, path) {
290
- if (input === 'room' || input === 'type' || input === 'folder' || (path && input === 'path')) {
291
- return { of: input };
292
- }
293
- if (plain(input) && Object.hasOwn(input, 'field') && Object.keys(input).length === 1) {
294
- if (specs(typed, input.field, place(at, 'field')).some(several)) {
295
- invalid(place(at, 'field'), 'a path that can hold several values');
296
- }
297
- return { of: 'field', field: input.field };
298
- }
299
- return invalid(at, path ? 'expects room, path, type, folder or a field' : 'expects room, type, folder or a field');
300
- }
301
- function direction(input, at) {
302
- if (input === undefined)
303
- return 'asc';
304
- if (input !== 'asc' && input !== 'desc')
305
- invalid(at, 'expects asc or desc');
306
- return input;
307
- }
308
- function orderOptions(input, at) {
309
- const options = {
310
- direction: direction(input.direction, place(at, 'direction')),
311
- };
312
- if (input.nulls !== undefined) {
313
- if (input.nulls !== 'first' && input.nulls !== 'last') {
314
- invalid(place(at, 'nulls'), 'expects first or last');
315
- }
316
- options.nulls = input.nulls;
317
- }
318
- if (input.stringSort !== undefined) {
319
- if (input.stringSort !== 'lexical' && input.stringSort !== 'locale') {
320
- invalid(place(at, 'stringSort'), 'expects lexical or locale');
321
- }
322
- options.stringSort = input.stringSort;
323
- }
324
- if (input.locale !== undefined) {
325
- if (typeof input.locale !== 'string' || !collates(input.locale, undefined)) {
326
- invalid(place(at, 'locale'), 'expects a locale name');
327
- }
328
- options.locale = input.locale;
329
- }
330
- if (input.localeOptions !== undefined) {
331
- if (!plain(input.localeOptions) || !collates(options.locale, input.localeOptions)) {
332
- invalid(place(at, 'localeOptions'), 'expects collation options');
333
- }
334
- options.localeOptions = input.localeOptions;
335
- }
336
- return options;
337
- }
338
- function collates(locale, options) {
339
- try {
340
- ''.localeCompare('', locale, options);
341
- return true;
342
- }
343
- catch {
344
- return false;
345
- }
346
- }
347
- function parts(typed, input, at, fields) {
348
- if (input === undefined)
349
- return null;
350
- if (input === 'all')
351
- return 'all';
352
- const named = list(input, at);
353
- named.forEach((name, index) => {
354
- if (fields)
355
- specs(typed, name, `${at}[${index}]`);
356
- else if (typeof name !== 'string')
357
- invalid(`${at}[${index}]`, 'expects a name');
358
- });
359
- return named;
360
- }
361
- export function flag(input, at) {
362
- if (input === undefined)
363
- return false;
364
- if (input !== true)
365
- invalid(at, 'expects true');
366
- return true;
367
- }
368
- function documentShape(typed, input) {
369
- const orderBy = (input.orderBy === undefined ? [] : list(input.orderBy, 'orderBy')).map((clause, index) => {
370
- const at = `orderBy[${index}]`;
371
- if (!plain(clause))
372
- invalid(at, 'expects an order clause');
373
- known(clause, ORDER, at);
374
- return {
375
- key: keyPlan(typed, clause.by, place(at, 'by'), true),
376
- options: orderOptions(clause, at),
377
- };
378
- });
379
- const select = input.select;
380
- if (select === 'all') {
381
- return {
382
- kind: 'documents',
383
- fields: 'all',
384
- sections: 'all',
385
- preamble: true,
386
- markdown: true,
387
- backlinks: true,
388
- change: true,
389
- fileId: true,
390
- orderBy,
391
- };
392
- }
393
- if (!plain(select))
394
- invalid('select', "expects 'all' or the parts to return");
395
- known(select, PARTS, 'select');
396
- return {
397
- kind: 'documents',
398
- fields: parts(typed, select.fields, 'select.fields', true),
399
- sections: parts(typed, select.sections, 'select.sections', false),
400
- preamble: flag(select.preamble, 'select.preamble'),
401
- markdown: flag(select.markdown, 'select.markdown'),
402
- backlinks: flag(select.backlinks, 'select.backlinks'),
403
- change: flag(select.change, 'select.change'),
404
- fileId: flag(select.fileId, 'select.fileId'),
405
- orderBy,
406
- };
407
- }
408
- function groupShape(typed, input) {
409
- const groupBy = list(input.groupBy, 'groupBy').map((key, index) => keyPlan(typed, key, `groupBy[${index}]`, false));
410
- if (groupBy.length === 0)
411
- invalid('groupBy', 'names no key');
412
- const grouped = groupBy.map((key) => JSON.stringify(key));
413
- const orderBy = (input.orderBy === undefined ? [] : list(input.orderBy, 'orderBy')).map((clause, index) => {
414
- const at = `orderBy[${index}]`;
415
- if (!plain(clause))
416
- invalid(at, 'expects an order clause');
417
- known(clause, ['by', 'direction'], at);
418
- const by = clause.by === 'count'
419
- ? 'count'
420
- : grouped.indexOf(JSON.stringify(keyPlan(typed, clause.by, place(at, 'by'), false)));
421
- if (by === -1)
422
- invalid(place(at, 'by'), 'orders by a key the query does not group by');
423
- return { by, direction: direction(clause.direction, place(at, 'direction')) };
424
- });
425
- return { kind: 'groups', groupBy, orderBy };
426
- }
427
- export function planOf(input, facts, reach = null) {
428
- if (!plain(input))
429
- invalid('query', 'expects a query object');
430
- const grouped = input.groupBy !== undefined;
431
- if (grouped && input.select !== undefined)
432
- invalid('select', 'a grouped query selects nothing');
433
- if (!grouped && input.select === undefined)
434
- invalid('select', 'a Document query must select');
435
- known(input, [...FILTER, 'orderBy', 'limit', 'after', 'total', grouped ? 'groupBy' : 'select'], '');
436
- const limit = limitOf(input.limit);
437
- const rooms = input.rooms === undefined ? null : names(input.rooms, 'rooms');
438
- const { typed, ...root } = scope(facts, rooms, input, '');
439
- const shape = grouped ? groupShape(typed, input) : documentShape(typed, input);
440
- return {
441
- key: queryKey(input),
442
- rooms,
443
- reach,
444
- locked: [],
445
- root,
446
- folder: input.folder === undefined ? null : directory(input.folder, 'folder'),
447
- paths: input.paths === undefined ? null : pathsOf(input.paths),
448
- hop: input.hop === undefined ? null : hopOf(facts, rooms, typed, input.hop),
449
- backlinks: input.backlinks === undefined ? null : backlinksOf(facts, rooms, input.backlinks),
450
- shape,
451
- limit,
452
- after: continuationOf(input.after, shape.orderBy.length + 1),
453
- total: flag(input.total, 'total'),
454
- };
455
- }
456
- function continuationOf(input, arity) {
457
- if (input === undefined)
458
- return null;
459
- const values = typeof input === 'string' ? decodedCursor(input) : null;
460
- if (values === null || (values.length !== 0 && values.length !== arity)) {
461
- invalid('after', 'expects the next an earlier result of this query returned');
462
- }
463
- return { text: input, values: values.length === 0 ? null : values };
464
- }
465
- export function limitOf(input) {
466
- if (input === undefined)
467
- return null;
468
- if (!Number.isSafeInteger(input) || input < 0) {
469
- invalid('limit', 'expects a nonnegative integer');
470
- }
471
- return input;
472
- }
473
- export function filterOf(input, facts, reach = null) {
474
- if (!plain(input))
475
- invalid('documents', 'expects a filter object');
476
- known(input, FILTER, '');
477
- return planOf({ ...input, select: {} }, facts, reach);
478
- }
479
- export function queryKey(query) {
480
- return canonical(query);
481
- }
482
- function canonical(value) {
483
- if (Array.isArray(value))
484
- return `[${value.map(canonical).join(',')}]`;
485
- if (typeof value === 'object' && value !== null) {
486
- return `{${Object.keys(value)
487
- .sort()
488
- .map((name) => `${JSON.stringify(name)}:${canonical(value[name])}`)
489
- .join(',')}}`;
490
- }
491
- return JSON.stringify(value);
492
- }
493
- export function identityOf(plan) {
494
- return canonical(plan);
1
+ import { planOf } from '@agentshouse/mdmodel';
2
+ export function planWithin(input, facts, reach = null) {
3
+ return { ...planOf(input, facts), reach, locked: [] };
495
4
  }
@@ -1,4 +1,4 @@
1
- import type { ConversationView } from '../conversation.js';
1
+ import type { ConversationView } from './conversation.js';
2
2
  export type ChatChoice = {
3
3
  readonly value: string;
4
4
  readonly label: string;
@@ -14,6 +14,7 @@ export type ChatField = {
14
14
  export type ChatAnswer = Readonly<Record<string, unknown>>;
15
15
  export type ChatQuestion = {
16
16
  readonly interaction: string;
17
+ readonly asked: string | null;
17
18
  readonly secret: boolean;
18
19
  readonly message: string;
19
20
  readonly fields: readonly ChatField[];
@@ -22,7 +23,9 @@ export type ChatQuestion = {
22
23
  readonly decline: unknown;
23
24
  };
24
25
  export declare function entered(field: ChatField): boolean;
25
- export declare function questionsOf(view: ConversationView | null): readonly ChatQuestion[];
26
+ export declare function questionsOf(view: Pick<ConversationView, 'questions'> | null): readonly ChatQuestion[];
27
+ export declare function openQuestion(questions: readonly unknown[]): string | null;
28
+ export declare function questionAsked(questions: readonly unknown[]): string | null;
26
29
  export type ChatLone = {
27
30
  readonly question: ChatQuestion;
28
31
  readonly field: ChatField;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questions.d.ts","sourceRoot":"","sources":["../src/questions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG1D,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,CAAC;IAC5E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE3D,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,CAAC;AAuCF,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEjD;AA2DD,wBAAgB,WAAW,CACzB,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,GAAG,IAAI,GAC/C,SAAS,YAAY,EAAE,CAiBzB;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,GAAG,IAAI,CAKzE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,GAAG,IAAI,CAE1E;AAED,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAEtF,wBAAgB,MAAM,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,GAAG,QAAQ,GAAG,IAAI,CAM1E"}
@@ -1,4 +1,4 @@
1
- import { list, record, text } from './read.js';
1
+ import { excerpt, list, record, text } from './read.js';
2
2
  const OPTION = 'optionId';
3
3
  function choicesOf(schema) {
4
4
  const items = record(schema.items);
@@ -95,6 +95,7 @@ export function questionsOf(view) {
95
95
  : [
96
96
  {
97
97
  interaction,
98
+ asked: text(one, 'asked_at'),
98
99
  secret: one.secret === true,
99
100
  undelivered: one.telegram_undelivered === true,
100
101
  ...asked,
@@ -102,8 +103,18 @@ export function questionsOf(view) {
102
103
  ];
103
104
  });
104
105
  }
106
+ export function openQuestion(questions) {
107
+ const [asked] = questionsOf({ questions });
108
+ if (asked === undefined)
109
+ return null;
110
+ const said = asked.message === '' ? asked.fields[0]?.prompt : asked.message;
111
+ return said === undefined || said === '' ? null : excerpt(said);
112
+ }
113
+ export function questionAsked(questions) {
114
+ return questionsOf({ questions })[0]?.asked ?? null;
115
+ }
105
116
  export function loneOf(questions) {
106
- const asked = questions.length === 1 && !questions[0]?.secret ? questions[0] : undefined;
117
+ const asked = questions.length === 1 && !questions[0].secret ? questions[0] : undefined;
107
118
  const only = asked?.fields.length === 1 ? asked.fields[0] : undefined;
108
119
  return asked !== undefined && only !== undefined && entered(only)
109
120
  ? { question: asked, field: only }
package/dist/reach.d.ts CHANGED
@@ -1,38 +1,45 @@
1
- import type { ReferrerScope } from './adapter.js';
2
- import type { MdRuntime, ReadinessPort, RuntimeTopic } from './connection.js';
1
+ import type { AppRoom } from './listing.js';
2
+ import type { ReadinessPort } from './preparation.js';
3
+ import type { MdRuntime, RuntimeTopic } from './surface.js';
3
4
  import type { Plan, PlanReach, QueryResult } from './query.js';
4
5
  import type { Readiness } from './readiness.js';
5
- import { type SearchResult } from './search.js';
6
+ import type { SearchResult } from './search.js';
6
7
  export type ReachedDocument = {
7
8
  readonly room: string;
8
9
  readonly path: string;
9
10
  };
11
+ export type ReachedArea = {
12
+ readonly room: string;
13
+ readonly path: string;
14
+ readonly open: readonly string[];
15
+ };
10
16
  export type PortReach = {
11
17
  readonly rooms: readonly string[];
12
18
  readonly documents: readonly ReachedDocument[];
19
+ readonly areas?: readonly ReachedArea[];
13
20
  readonly conversations: boolean;
14
21
  };
15
22
  export type Deliver = (message: unknown) => void;
16
- export type Watch = (topic: RuntimeTopic, input: readonly unknown[], deliver: Deliver) => () => void;
23
+ export type Fail = (error: unknown) => void;
24
+ export type Watch = (topic: RuntimeTopic, input: readonly unknown[], deliver: Deliver, fail: Fail) => () => void;
17
25
  export type RuntimeView = {
18
26
  md: MdRuntime;
19
27
  watch: Watch;
20
28
  };
21
29
  export type NarrowedView = RuntimeView & {
22
30
  narrow(reach: PortReach | null): void;
23
- facts(port: ReadinessPort): void;
24
31
  };
25
32
  export type Reachable = RuntimeView & {
26
- plan(input: unknown, reach: PortReach | null): Plan;
33
+ plan(input: unknown, reach: PortReach | null): Promise<Plan>;
27
34
  query(plan: Plan): Promise<QueryResult>;
28
- watchPlan(plan: Plan, deliver: (message: unknown) => void): () => void;
29
- search(input: unknown, reach: PortReach | null, locked: readonly string[]): Promise<SearchResult>;
35
+ watchPlan(plan: Plan, deliver: Deliver, fail: Fail): () => void;
36
+ search(input: unknown, reach: PortReach | null): Promise<SearchResult>;
30
37
  watchReadiness(port: ReadinessPort, reach: PortReach | null, deliver: (readiness: Readiness) => void): () => void;
31
- referrerScope(referrer: unknown): ReferrerScope | null;
32
- locked(room: string): boolean;
33
- lockedRooms(): readonly string[];
38
+ locked(room: string): Promise<boolean>;
39
+ lockedRooms(): Promise<readonly string[]>;
34
40
  watchLocks(notify: () => void): () => void;
35
- located(room: string, path: string, destination: string): ReachedDocument | null;
41
+ located(room: string, path: string, destination: string): Promise<ReachedDocument | null>;
42
+ room(locator: string): Promise<AppRoom | undefined>;
36
43
  };
37
44
  export declare function holds(reach: PortReach | null, room: string): boolean;
38
45
  export declare function governs(reach: PortReach | null, room: {
@@ -45,5 +52,5 @@ export declare function governs(reach: PortReach | null, room: {
45
52
  readonly selection: boolean;
46
53
  };
47
54
  export declare function planReach(reach: PortReach | null): PlanReach | null;
48
- export declare function narrowed(runtime: Reachable, given: PortReach | null, told: ReadinessPort): NarrowedView;
55
+ export declare function narrowed(runtime: Reachable, given: PortReach | null, port: ReadinessPort): NarrowedView;
49
56
  //# sourceMappingURL=reach.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reach.d.ts","sourceRoot":"","sources":["../src/reach.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reach.d.ts","sourceRoot":"","sources":["../src/reach.ts"],"names":[],"mappings":"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"}