@agentshouse/mdruntime 0.1.0-c8e110144a30a → 0.1.0-c8f07dbee1c62

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 (358) hide show
  1. package/README.md +19 -16
  2. package/dist/acceptance.d.ts +6 -0
  3. package/dist/acceptance.d.ts.map +1 -0
  4. package/dist/acceptance.js +389 -0
  5. package/dist/actions.d.ts +20 -0
  6. package/dist/actions.d.ts.map +1 -0
  7. package/dist/actions.js +250 -0
  8. package/dist/adapter.d.ts +154 -57
  9. package/dist/adapter.d.ts.map +1 -1
  10. package/dist/attached-model.d.ts +7 -10
  11. package/dist/attached-model.d.ts.map +1 -1
  12. package/dist/attached-model.js +40 -41
  13. package/dist/attempt.d.ts.map +1 -1
  14. package/dist/attempt.js +14 -1
  15. package/dist/binary.d.ts +0 -5
  16. package/dist/binary.d.ts.map +1 -1
  17. package/dist/binary.js +1 -1
  18. package/dist/bootstrap.d.ts +31 -11
  19. package/dist/bootstrap.d.ts.map +1 -1
  20. package/dist/bootstrap.js +323 -89
  21. package/dist/cell.d.ts +6 -0
  22. package/dist/cell.d.ts.map +1 -0
  23. package/dist/cell.js +9 -0
  24. package/dist/chain.d.ts +12 -0
  25. package/dist/chain.d.ts.map +1 -0
  26. package/dist/chain.js +64 -0
  27. package/dist/change-set.d.ts +9 -14
  28. package/dist/change-set.d.ts.map +1 -1
  29. package/dist/change-set.js +11 -63
  30. package/dist/change.d.ts +32 -1
  31. package/dist/change.d.ts.map +1 -1
  32. package/dist/change.js +10 -1
  33. package/dist/chat-types.d.ts +5 -0
  34. package/dist/chat-types.d.ts.map +1 -0
  35. package/dist/chat-types.js +13 -0
  36. package/dist/client.d.ts +43 -16
  37. package/dist/client.d.ts.map +1 -1
  38. package/dist/client.js +101 -12
  39. package/dist/collection.d.ts +11 -7
  40. package/dist/collection.d.ts.map +1 -1
  41. package/dist/collection.js +38 -79
  42. package/dist/compile.d.ts +16 -0
  43. package/dist/compile.d.ts.map +1 -0
  44. package/dist/compile.js +717 -0
  45. package/dist/connection.d.ts +8 -116
  46. package/dist/connection.d.ts.map +1 -1
  47. package/dist/connection.js +101 -2410
  48. package/dist/context.d.ts +2 -0
  49. package/dist/context.d.ts.map +1 -0
  50. package/dist/{chat/context.js → context.js} +1 -4
  51. package/dist/conversation-row.d.ts +33 -0
  52. package/dist/conversation-row.d.ts.map +1 -0
  53. package/dist/conversation-row.js +53 -0
  54. package/dist/conversation.d.ts +52 -20
  55. package/dist/conversation.d.ts.map +1 -1
  56. package/dist/conversation.js +900 -303
  57. package/dist/digest.d.ts +7 -0
  58. package/dist/digest.d.ts.map +1 -0
  59. package/dist/digest.js +113 -0
  60. package/dist/discovery.d.ts +10 -0
  61. package/dist/discovery.d.ts.map +1 -0
  62. package/dist/discovery.js +175 -0
  63. package/dist/durability.d.ts +19 -1
  64. package/dist/durability.d.ts.map +1 -1
  65. package/dist/durability.js +5 -0
  66. package/dist/entry.d.ts +20 -0
  67. package/dist/entry.d.ts.map +1 -0
  68. package/dist/entry.js +161 -0
  69. package/dist/figures.d.ts +48 -0
  70. package/dist/figures.d.ts.map +1 -0
  71. package/dist/figures.js +197 -0
  72. package/dist/file.d.ts +2 -19
  73. package/dist/file.d.ts.map +1 -1
  74. package/dist/file.js +7 -122
  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 +11 -2
  79. package/dist/host.d.ts.map +1 -1
  80. package/dist/host.js +128 -18
  81. package/dist/index.d.ts +32 -11
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +10 -0
  84. package/dist/install.d.ts +56 -0
  85. package/dist/install.d.ts.map +1 -0
  86. package/dist/install.js +560 -0
  87. package/dist/job.d.ts +33 -0
  88. package/dist/job.d.ts.map +1 -0
  89. package/dist/job.js +54 -0
  90. package/dist/lifecycle.d.ts +7 -0
  91. package/dist/lifecycle.d.ts.map +1 -0
  92. package/dist/lifecycle.js +267 -0
  93. package/dist/listing.d.ts +53 -0
  94. package/dist/listing.d.ts.map +1 -0
  95. package/dist/listing.js +175 -0
  96. package/dist/live.d.ts +23 -0
  97. package/dist/live.d.ts.map +1 -0
  98. package/dist/live.js +165 -0
  99. package/dist/locks.d.ts +9 -0
  100. package/dist/locks.d.ts.map +1 -0
  101. package/dist/locks.js +61 -0
  102. package/dist/log.d.ts +1 -0
  103. package/dist/log.d.ts.map +1 -1
  104. package/dist/lost.d.ts +5 -0
  105. package/dist/lost.d.ts.map +1 -0
  106. package/dist/lost.js +61 -0
  107. package/dist/media.d.ts +8 -0
  108. package/dist/media.d.ts.map +1 -0
  109. package/dist/media.js +218 -0
  110. package/dist/memory.d.ts +19 -5
  111. package/dist/memory.d.ts.map +1 -1
  112. package/dist/memory.js +253 -94
  113. package/dist/messages.d.ts +52 -0
  114. package/dist/messages.d.ts.map +1 -0
  115. package/dist/messages.js +168 -0
  116. package/dist/model.d.ts +11 -11
  117. package/dist/model.d.ts.map +1 -1
  118. package/dist/model.js +7 -10
  119. package/dist/models.d.ts +14 -0
  120. package/dist/models.d.ts.map +1 -0
  121. package/dist/models.js +193 -0
  122. package/dist/name.d.ts +4 -0
  123. package/dist/name.d.ts.map +1 -0
  124. package/dist/name.js +122 -0
  125. package/dist/observation.d.ts +22 -4
  126. package/dist/observation.d.ts.map +1 -1
  127. package/dist/observation.js +120 -14
  128. package/dist/opened.d.ts +22 -0
  129. package/dist/opened.d.ts.map +1 -0
  130. package/dist/opened.js +107 -0
  131. package/dist/opening.d.ts +4 -0
  132. package/dist/opening.d.ts.map +1 -0
  133. package/dist/opening.js +56 -0
  134. package/dist/outcome.d.ts +53 -8
  135. package/dist/outcome.d.ts.map +1 -1
  136. package/dist/outcome.js +43 -0
  137. package/dist/overlay.d.ts +4 -4
  138. package/dist/overlay.d.ts.map +1 -1
  139. package/dist/overlay.js +111 -182
  140. package/dist/{chat/parts.d.ts → parts.d.ts} +11 -9
  141. package/dist/parts.d.ts.map +1 -0
  142. package/dist/{chat/parts.js → parts.js} +45 -46
  143. package/dist/paths.d.ts +1 -0
  144. package/dist/paths.d.ts.map +1 -1
  145. package/dist/paths.js +4 -0
  146. package/dist/preparation.d.ts +20 -0
  147. package/dist/preparation.d.ts.map +1 -0
  148. package/dist/preparation.js +226 -0
  149. package/dist/queries.d.ts +16 -0
  150. package/dist/queries.d.ts.map +1 -0
  151. package/dist/queries.js +272 -0
  152. package/dist/query.d.ts +50 -183
  153. package/dist/query.d.ts.map +1 -1
  154. package/dist/query.js +3 -464
  155. package/dist/{chat/questions.d.ts → questions.d.ts} +5 -2
  156. package/dist/questions.d.ts.map +1 -0
  157. package/dist/{chat/questions.js → questions.js} +12 -1
  158. package/dist/reach.d.ts +21 -7
  159. package/dist/reach.d.ts.map +1 -1
  160. package/dist/reach.js +289 -89
  161. package/dist/react.d.ts +16 -6
  162. package/dist/react.d.ts.map +1 -1
  163. package/dist/react.js +7 -17
  164. package/dist/{chat/read.d.ts → read.d.ts} +2 -0
  165. package/dist/read.d.ts.map +1 -0
  166. package/dist/{chat/read.js → read.js} +4 -0
  167. package/dist/readiness.d.ts +50 -0
  168. package/dist/readiness.d.ts.map +1 -0
  169. package/dist/readiness.js +27 -0
  170. package/dist/reads.d.ts +36 -0
  171. package/dist/reads.d.ts.map +1 -0
  172. package/dist/reads.js +150 -0
  173. package/dist/recovery.d.ts +26 -0
  174. package/dist/recovery.d.ts.map +1 -0
  175. package/dist/recovery.js +232 -0
  176. package/dist/refresh.d.ts +17 -14
  177. package/dist/refresh.d.ts.map +1 -1
  178. package/dist/refresh.js +143 -51
  179. package/dist/refusal.d.ts +5 -0
  180. package/dist/refusal.d.ts.map +1 -0
  181. package/dist/refusal.js +56 -0
  182. package/dist/replica.d.ts +55 -33
  183. package/dist/replica.d.ts.map +1 -1
  184. package/dist/replica.js +333 -154
  185. package/dist/room-draft.d.ts +37 -6
  186. package/dist/room-draft.d.ts.map +1 -1
  187. package/dist/room-draft.js +161 -74
  188. package/dist/room-drafts.d.ts +24 -0
  189. package/dist/room-drafts.d.ts.map +1 -0
  190. package/dist/room-drafts.js +216 -0
  191. package/dist/rows.d.ts +30 -37
  192. package/dist/rows.d.ts.map +1 -1
  193. package/dist/rows.js +59 -126
  194. package/dist/runtime.d.ts +42 -0
  195. package/dist/runtime.d.ts.map +1 -0
  196. package/dist/runtime.js +1 -0
  197. package/dist/save.d.ts +52 -9
  198. package/dist/save.d.ts.map +1 -1
  199. package/dist/save.js +544 -173
  200. package/dist/saves.d.ts +70 -0
  201. package/dist/saves.d.ts.map +1 -0
  202. package/dist/saves.js +1004 -0
  203. package/dist/search.d.ts +15 -55
  204. package/dist/search.d.ts.map +1 -1
  205. package/dist/search.js +10 -121
  206. package/dist/seed.d.ts +25 -0
  207. package/dist/seed.d.ts.map +1 -0
  208. package/dist/seed.js +146 -0
  209. package/dist/shared.d.ts +15 -0
  210. package/dist/shared.d.ts.map +1 -0
  211. package/dist/shared.js +425 -0
  212. package/dist/shown.d.ts +31 -0
  213. package/dist/shown.d.ts.map +1 -0
  214. package/dist/shown.js +294 -0
  215. package/dist/socket/admission.d.ts +7 -0
  216. package/dist/socket/admission.d.ts.map +1 -0
  217. package/dist/socket/admission.js +39 -0
  218. package/dist/socket/answers.d.ts +6 -0
  219. package/dist/socket/answers.d.ts.map +1 -0
  220. package/dist/socket/answers.js +20 -0
  221. package/dist/socket/lanes.d.ts +20 -0
  222. package/dist/socket/lanes.d.ts.map +1 -0
  223. package/dist/socket/lanes.js +77 -0
  224. package/dist/socket/reads.d.ts +10 -0
  225. package/dist/socket/reads.d.ts.map +1 -0
  226. package/dist/socket/reads.js +31 -0
  227. package/dist/socket/rooms.d.ts +43 -0
  228. package/dist/socket/rooms.d.ts.map +1 -0
  229. package/dist/socket/rooms.js +90 -0
  230. package/dist/socket/session.d.ts +39 -0
  231. package/dist/socket/session.d.ts.map +1 -0
  232. package/dist/socket/session.js +23 -0
  233. package/dist/socket.d.ts +70 -0
  234. package/dist/socket.d.ts.map +1 -0
  235. package/dist/socket.js +175 -0
  236. package/dist/source.d.ts +61 -0
  237. package/dist/source.d.ts.map +1 -0
  238. package/dist/source.js +81 -0
  239. package/dist/status.d.ts +5 -2
  240. package/dist/status.d.ts.map +1 -1
  241. package/dist/status.js +3 -7
  242. package/dist/store/fences.d.ts +16 -0
  243. package/dist/store/fences.d.ts.map +1 -0
  244. package/dist/store/fences.js +26 -0
  245. package/dist/store/installs.d.ts +30 -0
  246. package/dist/store/installs.d.ts.map +1 -0
  247. package/dist/store/installs.js +34 -0
  248. package/dist/store/readiness.d.ts +10 -0
  249. package/dist/store/readiness.d.ts.map +1 -0
  250. package/dist/store/readiness.js +52 -0
  251. package/dist/store/records.d.ts +212 -0
  252. package/dist/store/records.d.ts.map +1 -0
  253. package/dist/store/records.js +408 -0
  254. package/dist/store/room-held.d.ts +8 -0
  255. package/dist/store/room-held.d.ts.map +1 -0
  256. package/dist/store/room-held.js +17 -0
  257. package/dist/store/space.d.ts +11 -0
  258. package/dist/store/space.d.ts.map +1 -0
  259. package/dist/store/space.js +43 -0
  260. package/dist/store/watchers.d.ts +17 -0
  261. package/dist/store/watchers.d.ts.map +1 -0
  262. package/dist/store/watchers.js +57 -0
  263. package/dist/store/writes.d.ts +24 -0
  264. package/dist/store/writes.d.ts.map +1 -0
  265. package/dist/store/writes.js +125 -0
  266. package/dist/store.d.ts +106 -119
  267. package/dist/store.d.ts.map +1 -1
  268. package/dist/store.js +136 -525
  269. package/dist/stored.d.ts +156 -0
  270. package/dist/stored.d.ts.map +1 -0
  271. package/dist/stored.js +637 -0
  272. package/dist/surface.d.ts +88 -0
  273. package/dist/surface.d.ts.map +1 -0
  274. package/dist/surface.js +222 -0
  275. package/dist/sync.d.ts +20 -0
  276. package/dist/sync.d.ts.map +1 -0
  277. package/dist/sync.js +531 -0
  278. package/dist/tables.d.ts +415 -0
  279. package/dist/tables.d.ts.map +1 -0
  280. package/dist/tables.js +740 -0
  281. package/dist/tallies.d.ts +18 -0
  282. package/dist/tallies.d.ts.map +1 -0
  283. package/dist/tallies.js +129 -0
  284. package/dist/transfer.d.ts +0 -5
  285. package/dist/transfer.d.ts.map +1 -1
  286. package/dist/turn.d.ts +9 -0
  287. package/dist/turn.d.ts.map +1 -0
  288. package/dist/turn.js +75 -0
  289. package/dist/validation.d.ts +29 -0
  290. package/dist/validation.d.ts.map +1 -0
  291. package/dist/validation.js +104 -0
  292. package/dist/windows.d.ts +11 -0
  293. package/dist/windows.d.ts.map +1 -0
  294. package/dist/windows.js +16 -0
  295. package/dist/wire.d.ts +181 -33
  296. package/dist/wire.d.ts.map +1 -1
  297. package/dist/wire.js +62 -31
  298. package/package.json +22 -19
  299. package/AGENTS.md +0 -299
  300. package/dist/chat/acts.d.ts +0 -34
  301. package/dist/chat/acts.d.ts.map +0 -1
  302. package/dist/chat/acts.js +0 -36
  303. package/dist/chat/context.d.ts +0 -3
  304. package/dist/chat/context.d.ts.map +0 -1
  305. package/dist/chat/input.d.ts +0 -9
  306. package/dist/chat/input.d.ts.map +0 -1
  307. package/dist/chat/input.js +0 -99
  308. package/dist/chat/kit.d.ts +0 -60
  309. package/dist/chat/kit.d.ts.map +0 -1
  310. package/dist/chat/kit.js +0 -123
  311. package/dist/chat/lasting.d.ts +0 -6
  312. package/dist/chat/lasting.d.ts.map +0 -1
  313. package/dist/chat/lasting.js +0 -19
  314. package/dist/chat/list.d.ts +0 -20
  315. package/dist/chat/list.d.ts.map +0 -1
  316. package/dist/chat/list.js +0 -59
  317. package/dist/chat/markdown.d.ts +0 -19
  318. package/dist/chat/markdown.d.ts.map +0 -1
  319. package/dist/chat/markdown.js +0 -187
  320. package/dist/chat/message.d.ts +0 -6
  321. package/dist/chat/message.d.ts.map +0 -1
  322. package/dist/chat/message.js +0 -192
  323. package/dist/chat/messages.d.ts +0 -21
  324. package/dist/chat/messages.d.ts.map +0 -1
  325. package/dist/chat/messages.js +0 -151
  326. package/dist/chat/name.d.ts +0 -6
  327. package/dist/chat/name.d.ts.map +0 -1
  328. package/dist/chat/name.js +0 -37
  329. package/dist/chat/opened.d.ts +0 -11
  330. package/dist/chat/opened.d.ts.map +0 -1
  331. package/dist/chat/opened.js +0 -17
  332. package/dist/chat/overlay.d.ts +0 -31
  333. package/dist/chat/overlay.d.ts.map +0 -1
  334. package/dist/chat/overlay.js +0 -97
  335. package/dist/chat/parts.d.ts.map +0 -1
  336. package/dist/chat/process.d.ts +0 -20
  337. package/dist/chat/process.d.ts.map +0 -1
  338. package/dist/chat/process.js +0 -32
  339. package/dist/chat/provider.d.ts +0 -63
  340. package/dist/chat/provider.d.ts.map +0 -1
  341. package/dist/chat/provider.js +0 -645
  342. package/dist/chat/question.d.ts +0 -9
  343. package/dist/chat/question.d.ts.map +0 -1
  344. package/dist/chat/question.js +0 -80
  345. package/dist/chat/questions.d.ts.map +0 -1
  346. package/dist/chat/read.d.ts.map +0 -1
  347. package/dist/chat/ready.d.ts +0 -33
  348. package/dist/chat/ready.d.ts.map +0 -1
  349. package/dist/chat/ready.js +0 -91
  350. package/dist/chat/style.d.ts +0 -4
  351. package/dist/chat/style.d.ts.map +0 -1
  352. package/dist/chat/style.js +0 -302
  353. package/dist/chat.d.ts +0 -14
  354. package/dist/chat.d.ts.map +0 -1
  355. package/dist/chat.js +0 -8
  356. package/dist/read-side.d.ts +0 -18
  357. package/dist/read-side.d.ts.map +0 -1
  358. package/dist/read-side.js +0 -440
@@ -0,0 +1,7 @@
1
+ export type Digest = {
2
+ update(bytes: Uint8Array): void;
3
+ hex(): string;
4
+ };
5
+ export declare function digest(): Digest;
6
+ export declare function sha256(blob: Blob): Promise<string>;
7
+ //# sourceMappingURL=digest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digest.d.ts","sourceRoot":"","sources":["../src/digest.ts"],"names":[],"mappings":"AA0EA,MAAM,MAAM,MAAM,GAAG;IACnB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAChC,GAAG,IAAI,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,MAAM,IAAI,MAAM,CAoC/B;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAMxD"}
package/dist/digest.js ADDED
@@ -0,0 +1,113 @@
1
+ import { FILE_PART_BYTES } from './tables.js';
2
+ const ROUNDS = new Uint32Array([
3
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
4
+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
5
+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
6
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
7
+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
8
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
9
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
10
+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
11
+ ]);
12
+ const INITIAL = [
13
+ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,
14
+ ];
15
+ const BLOCK = 64;
16
+ function rotated(value, by) {
17
+ return (value >>> by) | (value << (32 - by));
18
+ }
19
+ function compressed(state, words, bytes, at) {
20
+ for (let index = 0; index < 16; index += 1) {
21
+ const from = at + index * 4;
22
+ words[index] =
23
+ (bytes[from] << 24) | (bytes[from + 1] << 16) | (bytes[from + 2] << 8) | bytes[from + 3];
24
+ }
25
+ for (let index = 16; index < 64; index += 1) {
26
+ const early = words[index - 15];
27
+ const late = words[index - 2];
28
+ const lower = rotated(early, 7) ^ rotated(early, 18) ^ (early >>> 3);
29
+ const upper = rotated(late, 17) ^ rotated(late, 19) ^ (late >>> 10);
30
+ words[index] = (words[index - 16] + lower + words[index - 7] + upper) | 0;
31
+ }
32
+ let a = state[0];
33
+ let b = state[1];
34
+ let c = state[2];
35
+ let d = state[3];
36
+ let e = state[4];
37
+ let f = state[5];
38
+ let g = state[6];
39
+ let h = state[7];
40
+ for (let index = 0; index < 64; index += 1) {
41
+ const chosen = (e & f) ^ (~e & g);
42
+ const first = (h +
43
+ (rotated(e, 6) ^ rotated(e, 11) ^ rotated(e, 25)) +
44
+ chosen +
45
+ ROUNDS[index] +
46
+ words[index]) |
47
+ 0;
48
+ const second = ((rotated(a, 2) ^ rotated(a, 13) ^ rotated(a, 22)) + ((a & b) ^ (a & c) ^ (b & c))) | 0;
49
+ h = g;
50
+ g = f;
51
+ f = e;
52
+ e = (d + first) | 0;
53
+ d = c;
54
+ c = b;
55
+ b = a;
56
+ a = (first + second) | 0;
57
+ }
58
+ state[0] += a;
59
+ state[1] += b;
60
+ state[2] += c;
61
+ state[3] += d;
62
+ state[4] += e;
63
+ state[5] += f;
64
+ state[6] += g;
65
+ state[7] += h;
66
+ }
67
+ export function digest() {
68
+ const state = new Uint32Array(INITIAL);
69
+ const words = new Uint32Array(64);
70
+ const pending = new Uint8Array(BLOCK);
71
+ let held = 0;
72
+ let size = 0;
73
+ return {
74
+ update(bytes) {
75
+ size += bytes.length;
76
+ let from = 0;
77
+ if (held > 0) {
78
+ const taken = Math.min(BLOCK - held, bytes.length);
79
+ pending.set(bytes.subarray(0, taken), held);
80
+ held += taken;
81
+ from = taken;
82
+ if (held < BLOCK)
83
+ return;
84
+ compressed(state, words, pending, 0);
85
+ held = 0;
86
+ }
87
+ for (; from + BLOCK <= bytes.length; from += BLOCK)
88
+ compressed(state, words, bytes, from);
89
+ pending.set(bytes.subarray(from), 0);
90
+ held = bytes.length - from;
91
+ },
92
+ hex() {
93
+ const bits = size * 8;
94
+ const tail = new Uint8Array(held < 56 ? BLOCK : BLOCK * 2);
95
+ tail.set(pending.subarray(0, held));
96
+ tail[held] = 0x80;
97
+ const length = new DataView(tail.buffer, tail.length - 8);
98
+ length.setUint32(0, Math.floor(bits / 0x1_0000_0000));
99
+ length.setUint32(4, bits >>> 0);
100
+ const final = new Uint32Array(state);
101
+ for (let from = 0; from < tail.length; from += BLOCK)
102
+ compressed(final, words, tail, from);
103
+ return [...final].map((word) => word.toString(16).padStart(8, '0')).join('');
104
+ },
105
+ };
106
+ }
107
+ export async function sha256(blob) {
108
+ const hashed = digest();
109
+ for (let at = 0; at < blob.size; at += FILE_PART_BYTES) {
110
+ hashed.update(new Uint8Array(await blob.slice(at, at + FILE_PART_BYTES).arrayBuffer()));
111
+ }
112
+ return hashed.hex();
113
+ }
@@ -0,0 +1,10 @@
1
+ import type { Discovery, DiscoveredRoom, Member } from './adapter.js';
2
+ import type { Runtime } from './runtime.js';
3
+ import type { Live } from './socket.js';
4
+ import type { CycleProgress } from './status.js';
5
+ import type { RuntimeStore } from './store.js';
6
+ export declare function malformed(listed: readonly DiscoveredRoom[]): string | null;
7
+ export declare function applyDiscovery(runtime: Runtime, found: readonly DiscoveredRoom[], started: number, left?: readonly string[]): Promise<readonly DiscoveredRoom[]>;
8
+ export declare function signIn(runtime: Runtime, local: RuntimeStore, signedIn: Member | null): Promise<void>;
9
+ export declare function discoverRooms(runtime: Runtime, local: RuntimeStore, progress: CycleProgress, live: Live, found: Discovery | null): Promise<readonly DiscoveredRoom[] | null>;
10
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,EACT,cAAc,EACd,MAAM,EAEP,MAAM,cAAc,CAAC;AAQtB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAkB/C,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,GAAG,IAAI,CAsB1E;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,SAAS,cAAc,EAAE,EAChC,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,GACvB,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAoEpC;AAUD,wBAAsB,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,iBAI1F;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,SAAS,GAAG,IAAI,GACtB,OAAO,CAAC,SAAS,cAAc,EAAE,GAAG,IAAI,CAAC,CA+D3C"}
@@ -0,0 +1,175 @@
1
+ import { validRoot } from './collection.js';
2
+ import { admitted, list, listHeld } from './listing.js';
3
+ import { confirmLocks, lockedRooms, relocked } from './locks.js';
4
+ import { loseRooms } from './lost.js';
5
+ import { cachedModels } from './models.js';
6
+ import { beneath } from './paths.js';
7
+ import { refuse } from './refusal.js';
8
+ import { emitMember, emitRefusal, emitRooms, moveTo, transferring } from './shown.js';
9
+ function within(root, path) {
10
+ return root === '' || beneath(root, path);
11
+ }
12
+ function declaredSelection(room) {
13
+ const selection = room.typedSelection;
14
+ if (selection === undefined)
15
+ return true;
16
+ if (!Array.isArray(selection.roots) || selection.roots.length === 0)
17
+ return false;
18
+ return selection.roots.every((root, index) => validRoot(root) &&
19
+ root !== '' &&
20
+ selection.roots.every((other, at) => at === index || !within(other, root)));
21
+ }
22
+ export function malformed(listed) {
23
+ for (const room of listed) {
24
+ if (room.operations === undefined ||
25
+ !['write', 'erase'].every((operation) => Array.isArray(room.operations[operation]) &&
26
+ room.operations[operation].every((scope) => typeof scope === 'string')) ||
27
+ room.replica === undefined ||
28
+ typeof room.replica.selection !== 'string' ||
29
+ room.replica.selection.length === 0 ||
30
+ !['admitted', 'unavailable'].includes(room.replica.admission) ||
31
+ !['locked', 'open'].includes(room.replica.offline)) {
32
+ return `invalid model or replica declaration ${room.locator}`;
33
+ }
34
+ if (!declaredSelection(room))
35
+ return `invalid typed selection declaration ${room.locator}`;
36
+ }
37
+ return null;
38
+ }
39
+ export async function applyDiscovery(runtime, found, started, left) {
40
+ const { store, socket } = runtime;
41
+ const { rooms } = socket;
42
+ const lockedBefore = await lockedRooms(runtime);
43
+ const local = await store.open();
44
+ const stillFenced = new Set(await local.fences());
45
+ const relisting = found
46
+ .map(({ locator }) => locator)
47
+ .filter((locator) => {
48
+ const fence = store.fences.of(locator);
49
+ return stillFenced.has(locator) && (fence === undefined || fence.at < started);
50
+ });
51
+ const relisted = relisting.length === 0
52
+ ? new Set()
53
+ : await store.durably((held) => held.unfence(relisting));
54
+ for (const { locator } of found) {
55
+ const fence = store.fences.of(locator);
56
+ if (fence === undefined || fence.at >= started)
57
+ continue;
58
+ if (relisted.has(locator) || (!stillFenced.has(locator) && !fence.written)) {
59
+ store.fences.lift(locator);
60
+ }
61
+ }
62
+ const kept = await local.held();
63
+ await loseRooms(runtime, found
64
+ .filter((room) => room.replica.admission !== 'admitted' &&
65
+ (kept.held.has(room.locator) || store.installs.of(room.locator).transfer !== null))
66
+ .map((room) => room.locator));
67
+ const listed = found.filter(({ locator }) => !store.fences.has(locator) && (!stillFenced.has(locator) || relisted.has(locator)));
68
+ const listedLocatorsNow = new Set(listed.map((room) => room.locator));
69
+ for (const locator of listedLocatorsNow)
70
+ rooms.stand(locator, { refusal: null });
71
+ if (left === undefined)
72
+ rooms.undiscoverAll();
73
+ for (const room of listed)
74
+ rooms.discover(room);
75
+ const named = new Set(found.map((room) => room.locator));
76
+ await loseRooms(runtime, left ??
77
+ [
78
+ ...new Set([
79
+ ...rooms.declarations().keys(),
80
+ ...kept.held,
81
+ ...store.installs.transferring(),
82
+ ]),
83
+ ].filter((locator) => !named.has(locator)));
84
+ const held = await store.rooms(listed.map((room) => room.locator));
85
+ for (const room of listed) {
86
+ const record = held.get(room.locator)?.record;
87
+ if (record !== undefined && record.replica.selection !== room.replica.selection) {
88
+ listHeld(runtime, room.locator);
89
+ continue;
90
+ }
91
+ list(runtime, room, admitted(runtime, room));
92
+ }
93
+ confirmLocks(runtime, listed);
94
+ socket.session.set({ roomsListed: true });
95
+ emitRooms(runtime);
96
+ await relocked(runtime, lockedBefore);
97
+ return listed;
98
+ }
99
+ async function asked({ socket }, authorized) {
100
+ try {
101
+ return (await socket.discover(authorized)) ?? { kind: 'transport-uncertainty' };
102
+ }
103
+ catch {
104
+ return { kind: 'transport-uncertainty' };
105
+ }
106
+ }
107
+ export async function signIn(runtime, local, signedIn) {
108
+ if (JSON.stringify(signedIn) === JSON.stringify((await local.facts()).member))
109
+ return;
110
+ await local.fact('member', signedIn);
111
+ emitMember(runtime, signedIn);
112
+ }
113
+ export async function discoverRooms(runtime, local, progress, live, found) {
114
+ const { socket, journal } = runtime;
115
+ const { session } = socket;
116
+ const { closed, authorization } = session.now();
117
+ if (closed || authorization === undefined) {
118
+ socket.notifyReady();
119
+ return null;
120
+ }
121
+ moveTo(runtime, transferring(runtime));
122
+ const started = session.now().discoveries + 1;
123
+ session.set({ discoveries: started });
124
+ const result = found ?? (await asked(runtime, authorization));
125
+ if (result.kind === 'discovery')
126
+ session.set({ roomsNamed: true });
127
+ if (!live()) {
128
+ progress.complete = false;
129
+ socket.notifyReady();
130
+ return null;
131
+ }
132
+ journal.record(`connection discover ${result.kind}`);
133
+ if (result.kind === 'transport-uncertainty') {
134
+ await cachedModels(runtime, local);
135
+ progress.reachable = false;
136
+ progress.complete = false;
137
+ socket.notifyReady();
138
+ return null;
139
+ }
140
+ if (result.kind === 'contract-unavailable') {
141
+ journal.record(`connection contract unavailable ${result.code}`);
142
+ await refuse(runtime, 'missing-required-guarantee', {
143
+ code: result.code,
144
+ fields: result.fields,
145
+ retryable: result.retryable,
146
+ });
147
+ socket.notifyReady();
148
+ return null;
149
+ }
150
+ if (result.kind === 'revoked-authorization') {
151
+ await refuse(runtime, 'revoked-authorization');
152
+ socket.notifyReady();
153
+ return null;
154
+ }
155
+ const invalid = malformed(result.rooms);
156
+ if (invalid !== null) {
157
+ journal.record(invalid);
158
+ await refuse(runtime, 'missing-required-guarantee');
159
+ socket.notifyReady();
160
+ return null;
161
+ }
162
+ if (session.now().refusal !== null) {
163
+ session.set({ refusal: null });
164
+ emitRefusal(runtime);
165
+ }
166
+ const held = await local.facts();
167
+ if (JSON.stringify(result.providerLimits) !== JSON.stringify(held.providerLimits) ||
168
+ JSON.stringify(result.capabilities) !== JSON.stringify(held.capabilities)) {
169
+ await local.fact('providerLimits', result.providerLimits);
170
+ await local.fact('capabilities', result.capabilities);
171
+ }
172
+ socket.notifyReady();
173
+ await signIn(runtime, local, result.member ?? null);
174
+ return applyDiscovery(runtime, result.rooms, started);
175
+ }
@@ -1,9 +1,27 @@
1
+ import type { Persistence } from './readiness.js';
2
+ export type UnsentKind = 'pending-change' | 'call' | 'room-draft' | 'chat-draft';
3
+ export type UnsentWork = {
4
+ readonly kind: UnsentKind;
5
+ readonly count: number;
6
+ };
7
+ export type AppCode = {
8
+ readonly running: number;
9
+ readonly older: number;
10
+ };
11
+ export type HeldCode = {
12
+ readonly house: number | null;
13
+ readonly apps: readonly string[];
14
+ };
1
15
  export type RuntimeShell = {
2
- persistentStorage: boolean;
16
+ persistence: Persistence;
3
17
  generation: string | null;
4
18
  keepGeneration(value: string): void | Promise<void>;
5
19
  dropGeneration(): void | Promise<void>;
20
+ cleanUp?(): Promise<number>;
21
+ measure?(measured: (app: string, code: AppCode | null) => void): Promise<HeldCode>;
22
+ reset(): Promise<void>;
6
23
  };
24
+ export declare function refusedForSpace(error: unknown): boolean;
7
25
  export declare function detectStorageLoss(stored: string | null, reported: string | null): string | null;
8
26
  export declare function nextGeneration(stored: string | null, reported: string | null): string;
9
27
  //# sourceMappingURL=durability.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"durability.d.ts","sourceRoot":"","sources":["../src/durability.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,cAAc,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAG/F;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGrF"}
1
+ {"version":3,"file":"durability.d.ts","sourceRoot":"","sources":["../src/durability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,MAAM,GAAG,YAAY,GAAG,YAAY,CAAC;AAEjF,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/E,MAAM,MAAM,OAAO,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAE3F,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,cAAc,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMvD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAG/F;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGrF"}
@@ -1,4 +1,9 @@
1
1
  const STORAGE_LOSS_CODE = 'storage-loss';
2
+ export function refusedForSpace(error) {
3
+ return (typeof error === 'object' &&
4
+ error !== null &&
5
+ error.name === 'QuotaExceededError');
6
+ }
2
7
  export function detectStorageLoss(stored, reported) {
3
8
  if (reported === null || reported === stored)
4
9
  return null;
@@ -0,0 +1,20 @@
1
+ import { type VerifiedModel } from '@agentshouse/mdmodel';
2
+ import { type QueryRows } from './query.js';
3
+ import type { Connection } from './tables.js';
4
+ export { QueryError } from '@agentshouse/mdmodel';
5
+ export type EntryRoom = {
6
+ locator: string;
7
+ schema: string | null;
8
+ documents: Readonly<Record<string, string>>;
9
+ revisions?: Readonly<Record<string, string>>;
10
+ };
11
+ export type EntryArguments = Readonly<Record<string, string>>;
12
+ export type EntryParameterKind = 'string' | 'integer' | 'number' | 'boolean';
13
+ export declare function boundQuery(template: unknown, args: EntryArguments): unknown;
14
+ export declare function entryParameters(template: unknown): readonly string[];
15
+ export declare function entryRefusal(template: unknown): string | null;
16
+ export type EntryScope = {
17
+ results(queries: Readonly<Record<string, unknown>>): Promise<Record<string, QueryRows>>;
18
+ };
19
+ export declare function entryScope(rooms: readonly EntryRoom[], roomTypes: VerifiedModel, connection: Connection): EntryScope;
20
+ //# sourceMappingURL=entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAGnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE9D,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AA0D7E,wBAAgB,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAE3E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAMpE;AAyCD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQ7D;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;CACzF,CAAC;AAEF,wBAAgB,UAAU,CACxB,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,UAAU,GACrB,UAAU,CAoDZ"}
package/dist/entry.js ADDED
@@ -0,0 +1,161 @@
1
+ import { invalid, plain, QueryError, } from '@agentshouse/mdmodel';
2
+ import { attachedModel } from './attached-model.js';
3
+ import { answerQuery } from './compile.js';
4
+ import { planWithin } from './query.js';
5
+ import { writtenFacts } from './rows.js';
6
+ import { entered, REPLICA_TABLES } from './stored.js';
7
+ export { QueryError } from '@agentshouse/mdmodel';
8
+ const PARAMETER = '$param';
9
+ const KIND = 'as';
10
+ const INTEGER = /^-?(?:0|[1-9][0-9]*)$/u;
11
+ const NUMBER = /^-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?$/u;
12
+ function parameterOf(value) {
13
+ if (!plain(value) || !Object.hasOwn(value, PARAMETER))
14
+ return null;
15
+ const { [PARAMETER]: name, [KIND]: kind = 'string', ...rest } = value;
16
+ if (typeof name !== 'string' || Object.keys(rest).length > 0)
17
+ return null;
18
+ if (kind !== 'string' && kind !== 'integer' && kind !== 'number' && kind !== 'boolean') {
19
+ return null;
20
+ }
21
+ return { name, kind };
22
+ }
23
+ function converted(text, kind, at) {
24
+ if (kind === 'string')
25
+ return text;
26
+ if (kind === 'boolean') {
27
+ if (text === 'true' || text === 'false')
28
+ return text === 'true';
29
+ return invalid(at, 'expects true or false');
30
+ }
31
+ if (!(kind === 'integer' ? INTEGER : NUMBER).test(text))
32
+ invalid(at, `expects ${kind === 'integer' ? 'an integer' : 'a number'}`);
33
+ const number = Number(text);
34
+ if (!Number.isFinite(number) || (kind === 'integer' && !Number.isSafeInteger(number))) {
35
+ invalid(at, 'is out of range');
36
+ }
37
+ return number;
38
+ }
39
+ function bound(template, args, at) {
40
+ const parameter = parameterOf(template);
41
+ if (parameter !== null) {
42
+ const text = args[parameter.name];
43
+ if (text === undefined || !Object.hasOwn(args, parameter.name)) {
44
+ invalid(at, `names the parameter ${parameter.name}, which the route lacks`);
45
+ }
46
+ return converted(text, parameter.kind, at);
47
+ }
48
+ if (Array.isArray(template)) {
49
+ return template.map((item, index) => bound(item, args, `${at}[${index}]`));
50
+ }
51
+ if (plain(template)) {
52
+ return Object.fromEntries(Object.entries(template).map(([name, value]) => [
53
+ name,
54
+ bound(value, args, at === '' ? name : `${at}.${name}`),
55
+ ]));
56
+ }
57
+ return template;
58
+ }
59
+ export function boundQuery(template, args) {
60
+ return bound(template, args, '');
61
+ }
62
+ export function entryParameters(template) {
63
+ const parameter = parameterOf(template);
64
+ if (parameter !== null)
65
+ return [parameter.name];
66
+ if (Array.isArray(template))
67
+ return [...new Set(template.flatMap(entryParameters))];
68
+ if (plain(template))
69
+ return [...new Set(Object.values(template).flatMap(entryParameters))];
70
+ return [];
71
+ }
72
+ const SAMPLED = {
73
+ direction: 'asc',
74
+ nulls: 'last',
75
+ stringSort: 'lexical',
76
+ locale: 'en',
77
+ limit: 0,
78
+ pathPrefix: 'entry',
79
+ field: '/entry',
80
+ fields: '/entry',
81
+ types: 'any',
82
+ $in: 'entry',
83
+ $nin: 'entry',
84
+ $all: 'entry',
85
+ $size: 0,
86
+ $exists: true,
87
+ $prefix: 'entry',
88
+ $gt: 0,
89
+ $gte: 0,
90
+ $lt: 0,
91
+ $lte: 0,
92
+ };
93
+ function sampled(template, key) {
94
+ if (parameterOf(template) !== null)
95
+ return Object.hasOwn(SAMPLED, key) ? SAMPLED[key] : null;
96
+ if (Array.isArray(template))
97
+ return template.map((item) => sampled(item, key));
98
+ if (plain(template)) {
99
+ return Object.fromEntries(Object.entries(template).map(([name, value]) => [name, sampled(value, name)]));
100
+ }
101
+ return template;
102
+ }
103
+ function entryPlan(query, facts) {
104
+ const plan = planWithin(query, facts);
105
+ if (plan.fileIds !== null)
106
+ invalid('fileIds', 'an entry Room holds no file IDs');
107
+ return plan;
108
+ }
109
+ export function entryRefusal(template) {
110
+ try {
111
+ entryPlan(sampled(template, ''), { listed: false, rooms: [] });
112
+ return null;
113
+ }
114
+ catch (error) {
115
+ if (error instanceof QueryError)
116
+ return error.message;
117
+ throw error;
118
+ }
119
+ }
120
+ export function entryScope(rooms, roomTypes, connection) {
121
+ for (const table of REPLICA_TABLES)
122
+ connection.run(table);
123
+ const held = [];
124
+ const keys = rooms.map((room) => {
125
+ const model = attachedModel({
126
+ kind: 'model',
127
+ snapshot: { identity: room.locator, version: '', schema: room.schema, revision: null },
128
+ }, roomTypes);
129
+ held.push({
130
+ locator: room.locator,
131
+ available: model.status !== 'unavailable',
132
+ types: model.status === 'unavailable' ? [] : Object.values(model.types),
133
+ });
134
+ const composition = { model, selection: null, typedPaths: [] };
135
+ const key = entered(connection, room.locator, composition, Object.keys(room.documents)
136
+ .sort()
137
+ .map((path) => ({
138
+ path,
139
+ content: room.documents[path],
140
+ facts: writtenFacts(path, room.documents[path], composition),
141
+ binary: null,
142
+ revision: room.revisions?.[path] ?? null,
143
+ fileId: null,
144
+ created: null,
145
+ change: null,
146
+ written: null,
147
+ })));
148
+ return { locator: room.locator, key };
149
+ });
150
+ const planned = { listed: true, rooms: held };
151
+ return {
152
+ async results(queries) {
153
+ const results = {};
154
+ for (const [name, query] of Object.entries(queries)) {
155
+ const plan = entryPlan(query, planned);
156
+ results[name] = answerQuery(connection, plan, keys.filter(({ locator }) => plan.rooms === null || plan.rooms.includes(locator)));
157
+ }
158
+ return results;
159
+ },
160
+ };
161
+ }
@@ -0,0 +1,48 @@
1
+ import type { ChangeSet } from './change-set.js';
2
+ import type { GroupTotal, PendingResult } from './query.js';
3
+ import type { Deliver, Fail } from './reach.js';
4
+ import type { ConversationTally, RoomTally } from './tallies.js';
5
+ import type { QueryRoom } from './tables.js';
6
+ export declare const HOUSE_DIRECTORY = "house";
7
+ export declare const ROOM_TOTALS: {
8
+ readonly outside: readonly ["house"];
9
+ readonly groupBy: readonly ["room"];
10
+ readonly select: {
11
+ readonly size: true;
12
+ };
13
+ };
14
+ export type DayFigures = {
15
+ readonly created: number;
16
+ readonly changed: number;
17
+ readonly chats: number;
18
+ readonly messages: number;
19
+ };
20
+ export type RoomFigures = {
21
+ readonly room: string;
22
+ readonly day: DayFigures;
23
+ readonly total: {
24
+ readonly documents: GroupTotal;
25
+ readonly files: GroupTotal;
26
+ };
27
+ };
28
+ export type Figures = {
29
+ readonly rooms: readonly RoomFigures[];
30
+ readonly agentMessages: number;
31
+ };
32
+ export type FiguresResult = Figures | PendingResult;
33
+ export type FiguresCover = PendingResult | {
34
+ readonly rooms: readonly QueryRoom[];
35
+ };
36
+ export type FiguresSources = {
37
+ cover(): Promise<FiguresCover>;
38
+ rooms(rooms: readonly QueryRoom[], since: string): Promise<readonly RoomTally[]>;
39
+ conversations(conversations: readonly string[] | null, since: string): Promise<readonly ConversationTally[]>;
40
+ };
41
+ export type FiguresRead = {
42
+ watch(deliver: Deliver, fail: Fail): () => void;
43
+ touched(set: ChangeSet): void;
44
+ recover(): void;
45
+ close(): void;
46
+ };
47
+ export declare function createFigures(sources: FiguresSources): FiguresRead;
48
+ //# sourceMappingURL=figures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"figures.d.ts","sourceRoot":"","sources":["../src/figures.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,eAAe,UAAU,CAAC;AAEvC,eAAO,MAAM,WAAW;;;;iBAGZ,IAAI;;CACe,CAAC;AAWhC,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;KAAE,CAAC;CAChF,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjG,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,aAAa,CAAC;AAEpD,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAA;CAAE,CAAC;AAEpF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,KAAK,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC,CAAC;IACjF,aAAa,CACX,aAAa,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,EACvC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,IAAI,CAAC;IAChD,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,OAAO,IAAI,IAAI,CAAC;IAChB,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAgDF,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,WAAW,CAsIlE"}