@agentshouse/mdruntime 0.1.0-c0bed82db8d73 → 0.1.0-c0c0511ef12ee

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 (292) hide show
  1. package/README.md +3 -2
  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 +107 -71
  9. package/dist/adapter.d.ts.map +1 -1
  10. package/dist/attached-model.d.ts +4 -10
  11. package/dist/attached-model.d.ts.map +1 -1
  12. package/dist/attached-model.js +35 -46
  13. package/dist/bootstrap.d.ts +16 -15
  14. package/dist/bootstrap.d.ts.map +1 -1
  15. package/dist/bootstrap.js +274 -131
  16. package/dist/cell.d.ts +6 -0
  17. package/dist/cell.d.ts.map +1 -0
  18. package/dist/cell.js +9 -0
  19. package/dist/chain.d.ts +2 -1
  20. package/dist/chain.d.ts.map +1 -1
  21. package/dist/change.d.ts +1 -0
  22. package/dist/change.d.ts.map +1 -1
  23. package/dist/change.js +4 -2
  24. package/dist/chat-types.d.ts +5 -0
  25. package/dist/chat-types.d.ts.map +1 -0
  26. package/dist/chat-types.js +13 -0
  27. package/dist/client.d.ts +25 -10
  28. package/dist/client.d.ts.map +1 -1
  29. package/dist/client.js +56 -7
  30. package/dist/collection.d.ts +7 -4
  31. package/dist/collection.d.ts.map +1 -1
  32. package/dist/collection.js +24 -19
  33. package/dist/compile.d.ts +6 -6
  34. package/dist/compile.d.ts.map +1 -1
  35. package/dist/compile.js +287 -297
  36. package/dist/connection.d.ts +6 -141
  37. package/dist/connection.d.ts.map +1 -1
  38. package/dist/connection.js +103 -5016
  39. package/dist/context.d.ts +2 -0
  40. package/dist/context.d.ts.map +1 -0
  41. package/dist/context.js +7 -0
  42. package/dist/conversation-live.d.ts +136 -0
  43. package/dist/conversation-live.d.ts.map +1 -0
  44. package/dist/conversation-live.js +248 -0
  45. package/dist/conversation-row.d.ts +33 -0
  46. package/dist/conversation-row.d.ts.map +1 -0
  47. package/dist/conversation-row.js +53 -0
  48. package/dist/conversation.d.ts +41 -45
  49. package/dist/conversation.d.ts.map +1 -1
  50. package/dist/conversation.js +870 -786
  51. package/dist/discovery.d.ts +10 -0
  52. package/dist/discovery.d.ts.map +1 -0
  53. package/dist/discovery.js +175 -0
  54. package/dist/durability.d.ts +15 -1
  55. package/dist/durability.d.ts.map +1 -1
  56. package/dist/entry.d.ts +3 -2
  57. package/dist/entry.d.ts.map +1 -1
  58. package/dist/entry.js +18 -8
  59. package/dist/figures.d.ts +49 -0
  60. package/dist/figures.d.ts.map +1 -0
  61. package/dist/figures.js +197 -0
  62. package/dist/file.d.ts +2 -11
  63. package/dist/file.d.ts.map +1 -1
  64. package/dist/file.js +6 -4
  65. package/dist/holdings.d.ts +29 -0
  66. package/dist/holdings.d.ts.map +1 -0
  67. package/dist/holdings.js +95 -0
  68. package/dist/host.d.ts +4 -7
  69. package/dist/host.d.ts.map +1 -1
  70. package/dist/host.js +33 -33
  71. package/dist/identity.d.ts +0 -1
  72. package/dist/identity.d.ts.map +1 -1
  73. package/dist/identity.js +0 -3
  74. package/dist/index.d.ts +27 -10
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +8 -1
  77. package/dist/install.d.ts +56 -0
  78. package/dist/install.d.ts.map +1 -0
  79. package/dist/install.js +554 -0
  80. package/dist/job.d.ts +33 -0
  81. package/dist/job.d.ts.map +1 -0
  82. package/dist/job.js +54 -0
  83. package/dist/lifecycle.d.ts +7 -0
  84. package/dist/lifecycle.d.ts.map +1 -0
  85. package/dist/lifecycle.js +268 -0
  86. package/dist/listing.d.ts +53 -0
  87. package/dist/listing.d.ts.map +1 -0
  88. package/dist/listing.js +176 -0
  89. package/dist/live.d.ts +5 -4
  90. package/dist/live.d.ts.map +1 -1
  91. package/dist/live.js +61 -21
  92. package/dist/locks.d.ts +9 -0
  93. package/dist/locks.d.ts.map +1 -0
  94. package/dist/locks.js +61 -0
  95. package/dist/log.d.ts +1 -0
  96. package/dist/log.d.ts.map +1 -1
  97. package/dist/lost.d.ts +5 -0
  98. package/dist/lost.d.ts.map +1 -0
  99. package/dist/lost.js +61 -0
  100. package/dist/media.d.ts +8 -0
  101. package/dist/media.d.ts.map +1 -0
  102. package/dist/media.js +218 -0
  103. package/dist/memory.d.ts +13 -6
  104. package/dist/memory.d.ts.map +1 -1
  105. package/dist/memory.js +219 -91
  106. package/dist/messages.d.ts +27 -3
  107. package/dist/messages.d.ts.map +1 -1
  108. package/dist/messages.js +103 -31
  109. package/dist/model.d.ts +8 -10
  110. package/dist/model.d.ts.map +1 -1
  111. package/dist/model.js +6 -18
  112. package/dist/models.d.ts +14 -0
  113. package/dist/models.d.ts.map +1 -0
  114. package/dist/models.js +195 -0
  115. package/dist/observation.d.ts +3 -2
  116. package/dist/observation.d.ts.map +1 -1
  117. package/dist/observation.js +15 -15
  118. package/dist/opened.js +3 -3
  119. package/dist/opening.d.ts +4 -0
  120. package/dist/opening.d.ts.map +1 -0
  121. package/dist/opening.js +57 -0
  122. package/dist/outcome.d.ts +17 -6
  123. package/dist/outcome.d.ts.map +1 -1
  124. package/dist/outcome.js +19 -2
  125. package/dist/overlay.d.ts +1 -0
  126. package/dist/overlay.d.ts.map +1 -1
  127. package/dist/overlay.js +11 -0
  128. package/dist/parts.d.ts +60 -0
  129. package/dist/parts.d.ts.map +1 -0
  130. package/dist/parts.js +126 -0
  131. package/dist/paths.d.ts +2 -0
  132. package/dist/paths.d.ts.map +1 -1
  133. package/dist/paths.js +26 -0
  134. package/dist/preparation.d.ts +20 -0
  135. package/dist/preparation.d.ts.map +1 -0
  136. package/dist/preparation.js +226 -0
  137. package/dist/queries.d.ts +16 -0
  138. package/dist/queries.d.ts.map +1 -0
  139. package/dist/queries.js +272 -0
  140. package/dist/query.d.ts +18 -208
  141. package/dist/query.d.ts.map +1 -1
  142. package/dist/query.js +3 -505
  143. package/dist/questions.d.ts +34 -0
  144. package/dist/questions.d.ts.map +1 -0
  145. package/dist/questions.js +122 -0
  146. package/dist/reach.d.ts +20 -11
  147. package/dist/reach.d.ts.map +1 -1
  148. package/dist/reach.js +206 -126
  149. package/dist/react.d.ts +10 -2
  150. package/dist/react.d.ts.map +1 -1
  151. package/dist/read.d.ts +7 -0
  152. package/dist/read.d.ts.map +1 -0
  153. package/dist/read.js +17 -0
  154. package/dist/readiness.d.ts +3 -18
  155. package/dist/readiness.d.ts.map +1 -1
  156. package/dist/readiness.js +4 -10
  157. package/dist/reads.d.ts +36 -10
  158. package/dist/reads.d.ts.map +1 -1
  159. package/dist/reads.js +157 -86
  160. package/dist/recovery.d.ts +1 -0
  161. package/dist/recovery.d.ts.map +1 -1
  162. package/dist/recovery.js +35 -1
  163. package/dist/refresh.d.ts +7 -5
  164. package/dist/refresh.d.ts.map +1 -1
  165. package/dist/refresh.js +34 -10
  166. package/dist/refusal.d.ts +5 -0
  167. package/dist/refusal.d.ts.map +1 -0
  168. package/dist/refusal.js +55 -0
  169. package/dist/replica.d.ts +11 -12
  170. package/dist/replica.d.ts.map +1 -1
  171. package/dist/replica.js +56 -23
  172. package/dist/room-draft.d.ts +21 -7
  173. package/dist/room-draft.d.ts.map +1 -1
  174. package/dist/room-draft.js +101 -54
  175. package/dist/room-drafts.d.ts +24 -0
  176. package/dist/room-drafts.d.ts.map +1 -0
  177. package/dist/room-drafts.js +217 -0
  178. package/dist/rows.d.ts +18 -16
  179. package/dist/rows.d.ts.map +1 -1
  180. package/dist/rows.js +45 -153
  181. package/dist/runtime.d.ts +43 -0
  182. package/dist/runtime.d.ts.map +1 -0
  183. package/dist/runtime.js +1 -0
  184. package/dist/save.d.ts +7 -1
  185. package/dist/save.d.ts.map +1 -1
  186. package/dist/save.js +31 -24
  187. package/dist/saves.d.ts +70 -0
  188. package/dist/saves.d.ts.map +1 -0
  189. package/dist/saves.js +1005 -0
  190. package/dist/search.d.ts +12 -63
  191. package/dist/search.d.ts.map +1 -1
  192. package/dist/search.js +9 -52
  193. package/dist/seed.d.ts +11 -2
  194. package/dist/seed.d.ts.map +1 -1
  195. package/dist/seed.js +71 -1
  196. package/dist/shared.d.ts +1 -7
  197. package/dist/shared.d.ts.map +1 -1
  198. package/dist/shared.js +13 -105
  199. package/dist/shown.d.ts +31 -0
  200. package/dist/shown.d.ts.map +1 -0
  201. package/dist/shown.js +292 -0
  202. package/dist/socket/admission.d.ts +7 -0
  203. package/dist/socket/admission.d.ts.map +1 -0
  204. package/dist/socket/admission.js +39 -0
  205. package/dist/socket/answers.d.ts +6 -0
  206. package/dist/socket/answers.d.ts.map +1 -0
  207. package/dist/socket/answers.js +20 -0
  208. package/dist/socket/lanes.d.ts +20 -0
  209. package/dist/socket/lanes.d.ts.map +1 -0
  210. package/dist/socket/lanes.js +77 -0
  211. package/dist/socket/reads.d.ts +10 -0
  212. package/dist/socket/reads.d.ts.map +1 -0
  213. package/dist/socket/reads.js +31 -0
  214. package/dist/socket/rooms.d.ts +44 -0
  215. package/dist/socket/rooms.d.ts.map +1 -0
  216. package/dist/socket/rooms.js +90 -0
  217. package/dist/socket/session.d.ts +38 -0
  218. package/dist/socket/session.d.ts.map +1 -0
  219. package/dist/socket/session.js +23 -0
  220. package/dist/socket.d.ts +70 -0
  221. package/dist/socket.d.ts.map +1 -0
  222. package/dist/socket.js +175 -0
  223. package/dist/source.d.ts +61 -0
  224. package/dist/source.d.ts.map +1 -0
  225. package/dist/source.js +82 -0
  226. package/dist/status.d.ts +4 -5
  227. package/dist/status.d.ts.map +1 -1
  228. package/dist/status.js +3 -7
  229. package/dist/store/fences.d.ts +16 -0
  230. package/dist/store/fences.d.ts.map +1 -0
  231. package/dist/store/fences.js +26 -0
  232. package/dist/store/installs.d.ts +30 -0
  233. package/dist/store/installs.d.ts.map +1 -0
  234. package/dist/store/installs.js +34 -0
  235. package/dist/store/readiness.d.ts +10 -0
  236. package/dist/store/readiness.d.ts.map +1 -0
  237. package/dist/store/readiness.js +52 -0
  238. package/dist/store/records.d.ts +212 -0
  239. package/dist/store/records.d.ts.map +1 -0
  240. package/dist/store/records.js +431 -0
  241. package/dist/store/room-held.d.ts +8 -0
  242. package/dist/store/room-held.d.ts.map +1 -0
  243. package/dist/store/room-held.js +17 -0
  244. package/dist/store/space.d.ts +11 -0
  245. package/dist/store/space.d.ts.map +1 -0
  246. package/dist/store/space.js +41 -0
  247. package/dist/store/watchers.d.ts +17 -0
  248. package/dist/store/watchers.d.ts.map +1 -0
  249. package/dist/store/watchers.js +56 -0
  250. package/dist/store/writes.d.ts +24 -0
  251. package/dist/store/writes.d.ts.map +1 -0
  252. package/dist/store/writes.js +125 -0
  253. package/dist/store.d.ts +105 -158
  254. package/dist/store.d.ts.map +1 -1
  255. package/dist/store.js +143 -401
  256. package/dist/stored.d.ts +66 -55
  257. package/dist/stored.d.ts.map +1 -1
  258. package/dist/stored.js +355 -273
  259. package/dist/surface.d.ts +88 -0
  260. package/dist/surface.d.ts.map +1 -0
  261. package/dist/surface.js +223 -0
  262. package/dist/sync.d.ts +19 -0
  263. package/dist/sync.d.ts.map +1 -0
  264. package/dist/sync.js +532 -0
  265. package/dist/tables.d.ts +131 -69
  266. package/dist/tables.d.ts.map +1 -1
  267. package/dist/tables.js +221 -105
  268. package/dist/tallies.d.ts +18 -0
  269. package/dist/tallies.d.ts.map +1 -0
  270. package/dist/tallies.js +129 -0
  271. package/dist/transfer.d.ts +0 -5
  272. package/dist/transfer.d.ts.map +1 -1
  273. package/dist/validation.d.ts +3 -4
  274. package/dist/validation.d.ts.map +1 -1
  275. package/dist/validation.js +42 -100
  276. package/dist/windows.d.ts +1 -12
  277. package/dist/windows.d.ts.map +1 -1
  278. package/dist/windows.js +2 -75
  279. package/dist/wire.d.ts +25 -9
  280. package/dist/wire.d.ts.map +1 -1
  281. package/dist/wire.js +9 -2
  282. package/package.json +2 -3
  283. package/AGENTS.md +0 -312
  284. package/dist/fence.d.ts +0 -6
  285. package/dist/fence.d.ts.map +0 -1
  286. package/dist/fence.js +0 -10
  287. package/dist/fulltext.d.ts +0 -27
  288. package/dist/fulltext.d.ts.map +0 -1
  289. package/dist/fulltext.js +0 -368
  290. package/dist/words.d.ts +0 -19
  291. package/dist/words.d.ts.map +0 -1
  292. package/dist/words.js +0 -150
@@ -0,0 +1,9 @@
1
+ import type { DiscoveredRoom } from './adapter.js';
2
+ import type { Runtime } from './runtime.js';
3
+ export declare function locked({ store, socket }: Runtime, locator: string): Promise<boolean>;
4
+ export declare function lockedRooms(runtime: Runtime): Promise<readonly string[]>;
5
+ export declare function relocked(runtime: Runtime, before: readonly string[]): Promise<void>;
6
+ export declare function confirmLocks({ socket }: Runtime, listed: readonly DiscoveredRoom[]): void;
7
+ export declare function connectionLost(runtime: Runtime): void;
8
+ export declare function watchLocks({ store }: Runtime, notify: () => void): () => void;
9
+ //# sourceMappingURL=locks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locks.d.ts","sourceRoot":"","sources":["../src/locks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAa5C,wBAAsB,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK1F;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAW9E;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,iBAMzE;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,cAAc,EAAE,QAOlF;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,QAa9C;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAE7E"}
package/dist/locks.js ADDED
@@ -0,0 +1,61 @@
1
+ import { emitRooms, LOCKS_TOPIC } from './shown.js';
2
+ async function offlineModes({ store, socket }) {
3
+ const modes = new Map();
4
+ for (const [locator, { room }] of socket.rooms.declarations()) {
5
+ const declaration = room ?? socket.rooms.discovered(locator);
6
+ if (declaration !== undefined)
7
+ modes.set(locator, declaration.replica.offline);
8
+ }
9
+ for (const [locator, { offline }] of (await store.covering()).rooms)
10
+ modes.set(locator, offline);
11
+ return modes;
12
+ }
13
+ export async function locked({ store, socket }, locator) {
14
+ if (store.fences.has(locator) || socket.rooms.standing(locator).confirmed)
15
+ return false;
16
+ const held = socket.rooms.declared(locator)?.room ?? socket.rooms.discovered(locator);
17
+ const mode = (await (await store.open()).offline(locator)) ?? held?.replica.offline;
18
+ return mode === 'locked';
19
+ }
20
+ export async function lockedRooms(runtime) {
21
+ const { store, socket } = runtime;
22
+ return [...(await offlineModes(runtime))]
23
+ .filter(([locator, mode]) => mode === 'locked' &&
24
+ !socket.rooms.standing(locator).confirmed &&
25
+ !store.fences.has(locator))
26
+ .map(([locator]) => locator)
27
+ .sort();
28
+ }
29
+ export async function relocked(runtime, before) {
30
+ const after = await lockedRooms(runtime);
31
+ if (JSON.stringify(after) === JSON.stringify(before))
32
+ return;
33
+ runtime.journal.record(`locked ${after.length}`);
34
+ emitRooms(runtime);
35
+ runtime.store.tell(LOCKS_TOPIC, undefined);
36
+ }
37
+ export function confirmLocks({ socket }, listed) {
38
+ if (!socket.isOpen())
39
+ return;
40
+ for (const room of listed) {
41
+ if (room.replica.admission === 'admitted') {
42
+ socket.rooms.stand(room.locator, { confirmed: true });
43
+ }
44
+ }
45
+ }
46
+ export function connectionLost(runtime) {
47
+ const { socket } = runtime;
48
+ if (socket.closed())
49
+ return;
50
+ socket.rooms.connectionLost(() => {
51
+ if (socket.isOpen() || socket.closed())
52
+ return;
53
+ void lockedRooms(runtime).then((before) => {
54
+ socket.rooms.standAll({ confirmed: false });
55
+ return relocked(runtime, before);
56
+ }, () => { });
57
+ });
58
+ }
59
+ export function watchLocks({ store }, notify) {
60
+ return store.watch(LOCKS_TOPIC, notify).stop;
61
+ }
package/dist/log.d.ts CHANGED
@@ -2,4 +2,5 @@ export declare function createLog(): {
2
2
  record(event: string): void;
3
3
  export(): string;
4
4
  };
5
+ export type Log = ReturnType<typeof createLog>;
5
6
  //# sourceMappingURL=log.d.ts.map
package/dist/log.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS;IAGrB,MAAM,QAAQ,MAAM;IAIpB,MAAM;EAIT"}
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS;IAGrB,MAAM,QAAQ,MAAM;IAIpB,MAAM;EAIT;AAED,MAAM,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC"}
package/dist/lost.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import type { Runtime } from './runtime.js';
2
+ export declare function eraseFenced({ store }: Runtime, locators: readonly string[]): Promise<void>;
3
+ export declare function fenceLive(runtime: Runtime, locators: readonly string[]): void;
4
+ export declare function loseRooms(runtime: Runtime, locators: readonly string[]): Promise<void>;
5
+ //# sourceMappingURL=lost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lost.d.ts","sourceRoot":"","sources":["../src/lost.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAU5C,wBAAsB,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,iBAIhF;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,QAOtE;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,iBAqC5E"}
package/dist/lost.js ADDED
@@ -0,0 +1,61 @@
1
+ import { changeSet, mergeChangeSets } from './change-set.js';
2
+ import { ERASE_BATCH, forgetInstall } from './install.js';
3
+ import { recoverReads, statusShown } from './shown.js';
4
+ import { yielded } from './turn.js';
5
+ function forget({ store, socket }, locator) {
6
+ forgetInstall(store, locator);
7
+ socket.rooms.forget(locator);
8
+ store.forget(locator);
9
+ }
10
+ export async function eraseFenced({ store }, locators) {
11
+ for (const locator of locators) {
12
+ while (await store.durably((local) => local.erase(locator, ERASE_BATCH)))
13
+ await yielded();
14
+ }
15
+ }
16
+ export function fenceLive(runtime, locators) {
17
+ const { store, socket, journal } = runtime;
18
+ for (const locator of new Set(locators)) {
19
+ if (!store.fences.raise(locator, socket.session.now().discoveries))
20
+ continue;
21
+ forget(runtime, locator);
22
+ journal.record(`room lost ${locator}`);
23
+ }
24
+ }
25
+ export async function loseRooms(runtime, locators) {
26
+ const { store } = runtime;
27
+ fenceLive(runtime, locators);
28
+ const fresh = [...new Set(locators)].filter((locator) => {
29
+ const fence = store.fences.of(locator);
30
+ if (fence === undefined || fence.written)
31
+ return false;
32
+ store.fences.mark(locator, true);
33
+ return true;
34
+ });
35
+ if (fresh.length === 0)
36
+ return;
37
+ let held = [];
38
+ try {
39
+ await store.durably(async (local) => {
40
+ held = await local.roomDrafts();
41
+ await local.fence(fresh);
42
+ });
43
+ }
44
+ catch (error) {
45
+ for (const locator of fresh)
46
+ store.fences.mark(locator, false);
47
+ throw error;
48
+ }
49
+ finally {
50
+ store.changed(mergeChangeSets(fresh.map((locator) => changeSet(locator, {
51
+ documents: null,
52
+ room: true,
53
+ queue: true,
54
+ drafts: held.filter((draft) => draft.locator === locator).map(({ path }) => path),
55
+ }))));
56
+ recoverReads(runtime);
57
+ statusShown(runtime);
58
+ }
59
+ await store.durably((local) => runtime.unpair(local));
60
+ await eraseFenced(runtime, fresh);
61
+ }
@@ -0,0 +1,8 @@
1
+ import type { MdRuntimeClient } from './client.js';
2
+ import { type ShownAnswer } from './outcome.js';
3
+ export declare const ROOM_MEDIA = "room-media";
4
+ type Show = (room: string, path: string, revision?: string) => Promise<ShownAnswer>;
5
+ export declare function shownBy(show: Show, client: MdRuntimeClient): MdRuntimeClient;
6
+ export declare function defineRoomMedia(client: Promise<MdRuntimeClient> | MdRuntimeClient): void;
7
+ export {};
8
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3D,eAAO,MAAM,UAAU,eAAe,CAAC;AAwBvC,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAIpF,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,GAAG,eAAe,CAG5E;AAsBD,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,GAAG,IAAI,CA0LxF"}
package/dist/media.js ADDED
@@ -0,0 +1,218 @@
1
+ import { UNCERTAIN } from './outcome.js';
2
+ export const ROOM_MEDIA = 'room-media';
3
+ const ATTRIBUTES = ['room', 'path', 'revision', 'width', 'height', 'alt'];
4
+ const LOADING = new Set(['room', 'path', 'revision']);
5
+ const NEARING = '600px 0px';
6
+ const RELINKS = 2;
7
+ // The Room's stream brings a file seconds after the text that links it, minutes after on a first open, and a page's reach of its Rooms settles seconds after it opens, so a file not shown yet is asked for again every three seconds.
8
+ const UNSHOWN_MS = 3_000;
9
+ const SHAPE = '16 / 9';
10
+ const STYLE = `:host{display:block}
11
+ [part=box]{position:relative;overflow:hidden}
12
+ [part=box]>img,[part=box]>video,[part=box]>audio{display:block;width:100%;height:100%;object-fit:contain}
13
+ [part=box]>slot{display:flex;align-items:center;justify-content:center;width:100%;height:100%;text-align:center}`;
14
+ const shows = new WeakMap();
15
+ export function shownBy(show, client) {
16
+ shows.set(client, show);
17
+ return client;
18
+ }
19
+ function ratioOf(width, height) {
20
+ const across = Number(width);
21
+ const down = Number(height);
22
+ return Number.isFinite(across) && Number.isFinite(down) && across > 0 && down > 0
23
+ ? `${across} / ${down}`
24
+ : SHAPE;
25
+ }
26
+ function refusedForGood(shown) {
27
+ if (shown.kind === 'revoked-authorization')
28
+ return true;
29
+ return (shown.kind === 'rejected' || shown.kind === 'scoped-refusal') && !shown.retryable;
30
+ }
31
+ function drawnFor(mediaType) {
32
+ if (mediaType.startsWith('image/'))
33
+ return 'img';
34
+ if (mediaType.startsWith('video/'))
35
+ return 'video';
36
+ if (mediaType.startsWith('audio/'))
37
+ return 'audio';
38
+ return null;
39
+ }
40
+ export function defineRoomMedia(client) {
41
+ if (customElements.get(ROOM_MEDIA) !== undefined)
42
+ return;
43
+ const connected = Promise.resolve(client);
44
+ class RoomMedia extends HTMLElement {
45
+ static observedAttributes = ATTRIBUTES;
46
+ #root = this.attachShadow({ mode: 'open' });
47
+ #box = document.createElement('div');
48
+ #fallback = document.createElement('slot');
49
+ #watching = null;
50
+ #near = false;
51
+ #asked = 0;
52
+ #shown = null;
53
+ #drawn = null;
54
+ #loaded = false;
55
+ #relinked = 0;
56
+ constructor() {
57
+ super();
58
+ this.#box.setAttribute('part', 'box');
59
+ this.#root.append(Object.assign(document.createElement('style'), { textContent: STYLE }), this.#box);
60
+ this.#shape();
61
+ }
62
+ connectedCallback() {
63
+ this.#label();
64
+ this.#watching ??= new IntersectionObserver((seen) => {
65
+ if (!seen.some((entry) => entry.isIntersecting) || this.#near)
66
+ return;
67
+ this.#near = true;
68
+ void this.#load();
69
+ }, { rootMargin: NEARING });
70
+ this.#watching.observe(this);
71
+ }
72
+ disconnectedCallback() {
73
+ this.#watching?.disconnect();
74
+ this.#watching = null;
75
+ this.#near = false;
76
+ this.#asked += 1;
77
+ this.#show(null);
78
+ }
79
+ attributeChangedCallback(name, before, after) {
80
+ if (before === after)
81
+ return;
82
+ this.#shape();
83
+ if (this.isConnected)
84
+ this.#label();
85
+ if (!LOADING.has(name) || !this.#near)
86
+ return;
87
+ this.#relinked = 0;
88
+ void this.#load();
89
+ }
90
+ #shape() {
91
+ this.#box.style.aspectRatio = ratioOf(this.getAttribute('width'), this.getAttribute('height'));
92
+ }
93
+ #label() {
94
+ const alt = this.getAttribute('alt') ?? '';
95
+ const drawn = this.#drawn;
96
+ if (drawn instanceof HTMLMediaElement) {
97
+ this.removeAttribute('role');
98
+ this.removeAttribute('aria-label');
99
+ drawn.setAttribute('aria-label', alt);
100
+ return;
101
+ }
102
+ this.setAttribute('role', 'img');
103
+ this.setAttribute('aria-label', alt);
104
+ if (drawn !== null)
105
+ drawn.alt = '';
106
+ }
107
+ async #load() {
108
+ const asked = (this.#asked += 1);
109
+ this.#loaded = false;
110
+ const room = this.getAttribute('room');
111
+ const path = this.getAttribute('path');
112
+ const revision = this.getAttribute('revision') ?? undefined;
113
+ if (room === null || path === null) {
114
+ this.#unreadable();
115
+ return;
116
+ }
117
+ const show = shows.get(await connected);
118
+ const shown = show === undefined ? null : await show(room, path, revision).catch(() => UNCERTAIN);
119
+ if (asked !== this.#asked)
120
+ return;
121
+ if (shown?.kind === 'link') {
122
+ this.#draw({ url: shown.url, copy: false }, shown.mediaType);
123
+ return;
124
+ }
125
+ if (shown?.kind !== 'binary') {
126
+ if (shown === null || refusedForGood(shown))
127
+ this.#unreadable();
128
+ else
129
+ this.#unshown(asked);
130
+ return;
131
+ }
132
+ const copy = await new Response(shown.stream, {
133
+ headers: { 'content-type': shown.mediaType },
134
+ })
135
+ .blob()
136
+ .catch(() => null);
137
+ if (asked !== this.#asked)
138
+ return;
139
+ if (copy === null)
140
+ this.#unshown(asked);
141
+ else
142
+ this.#draw({ url: URL.createObjectURL(copy), copy: true }, shown.mediaType);
143
+ }
144
+ #unshown(asked) {
145
+ this.#unreadable();
146
+ setTimeout(() => {
147
+ if (asked === this.#asked && this.#near)
148
+ void this.#load();
149
+ }, UNSHOWN_MS);
150
+ }
151
+ #show(shown, content = null) {
152
+ if (this.#shown?.copy === true)
153
+ URL.revokeObjectURL(this.#shown.url);
154
+ this.#shown = shown;
155
+ if (content !== this.#drawn)
156
+ this.#drawn = null;
157
+ if (content === null)
158
+ this.#box.replaceChildren();
159
+ else if (content.parentNode !== this.#box)
160
+ this.#box.replaceChildren(content);
161
+ this.#label();
162
+ }
163
+ #unreadable() {
164
+ this.#show(null, this.#fallback);
165
+ }
166
+ #draw(shown, mediaType) {
167
+ const tag = drawnFor(mediaType);
168
+ if (tag === null) {
169
+ if (shown.copy)
170
+ URL.revokeObjectURL(shown.url);
171
+ this.#unreadable();
172
+ return;
173
+ }
174
+ const kept = this.#drawn?.localName === tag ? this.#drawn : null;
175
+ const drawn = kept ?? document.createElement(tag);
176
+ if (kept === null) {
177
+ if (drawn instanceof HTMLImageElement)
178
+ drawn.decoding = 'async';
179
+ if (drawn instanceof HTMLMediaElement) {
180
+ drawn.controls = true;
181
+ drawn.preload = 'metadata';
182
+ if (drawn instanceof HTMLVideoElement)
183
+ drawn.playsInline = true;
184
+ }
185
+ drawn.addEventListener(drawn instanceof HTMLImageElement ? 'load' : 'loadedmetadata', () => {
186
+ if (drawn !== this.#drawn)
187
+ return;
188
+ this.#loaded = true;
189
+ this.#relinked = 0;
190
+ });
191
+ drawn.addEventListener('error', () => this.#failed(drawn));
192
+ }
193
+ this.#drawn = drawn;
194
+ this.#show(shown, drawn);
195
+ drawn.src = shown.url;
196
+ }
197
+ #failed(drawn) {
198
+ if (drawn !== this.#drawn)
199
+ return;
200
+ if (this.#shown?.copy !== false || !this.#loaded || this.#relinked >= RELINKS) {
201
+ this.#unreadable();
202
+ return;
203
+ }
204
+ this.#relinked += 1;
205
+ if (drawn instanceof HTMLMediaElement) {
206
+ const at = drawn.currentTime;
207
+ const playing = !drawn.paused;
208
+ drawn.addEventListener('loadedmetadata', () => {
209
+ drawn.currentTime = at;
210
+ if (playing)
211
+ void drawn.play().catch(() => undefined);
212
+ }, { once: true });
213
+ }
214
+ void this.#load();
215
+ }
216
+ }
217
+ customElements.define(ROOM_MEDIA, RoomMedia);
218
+ }
package/dist/memory.d.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  import type { ModelResult } from './model.js';
2
- import { type AcceptedMessage, type ActionResult, type Adapter, type BinaryFile, type Capability, type ConversationAction, type ConversationEvent, type DiscoveryScope, type DiscoveredRoom, type HeadChange, type ListedConversation, type Member, type ProviderLimit, type Retention, type ServiceMode } from './adapter.js';
2
+ import { type AcceptedMessage, type ActionResult, type Adapter, type BinaryFile, type Capability, type ConversationAction, type ConversationEvent, type DiscoveredRoom, type SavedFacts, type HeadChange, type ListedAgent, type ListedConversation, type Member, type ProviderLimit, type Retention, type ServiceMode, type TypedPath } from './adapter.js';
3
3
  export type MemoryRoom = DiscoveredRoom & {
4
4
  model?: ModelResult;
5
- selectionModel?: ModelResult;
6
5
  documents?: Readonly<Record<string, string>>;
6
+ facts?: Readonly<Record<string, SavedFacts>>;
7
7
  revisions?: Readonly<Record<string, string>>;
8
8
  fileIds?: Readonly<Record<string, string>>;
9
+ created?: Readonly<Record<string, string>>;
9
10
  changes?: Readonly<Record<string, HeadChange>>;
10
11
  binaryFiles?: Readonly<Record<string, BinaryFile>>;
11
12
  folders?: readonly string[];
@@ -13,13 +14,14 @@ export type MemoryRoom = DiscoveredRoom & {
13
14
  };
14
15
  export type MemoryConversation = {
15
16
  conversation: string;
16
- listed?: Omit<ListedConversation, 'conversation'>;
17
+ listed?: Omit<ListedConversation, 'conversation' | 'newest'>;
17
18
  messages?: readonly AcceptedMessage[];
18
- outcomes?: Partial<Record<ConversationAction, ActionResult>>;
19
+ outcomes?: Partial<Record<ConversationAction | 'history', ActionResult>>;
19
20
  };
20
21
  export type MemoryAdapterOptions = {
21
22
  rooms?: readonly MemoryRoom[];
22
23
  conversations?: readonly MemoryConversation[];
24
+ agents?: readonly ListedAgent[];
23
25
  historyPageSize?: number;
24
26
  pageSize?: number;
25
27
  capabilities?: readonly Capability[];
@@ -27,9 +29,12 @@ export type MemoryAdapterOptions = {
27
29
  retention?: Retention;
28
30
  member?: Member;
29
31
  unopened?: boolean;
30
- exhaustiveDiscovery?: true;
32
+ roomTypes?: string;
33
+ typedPaths?: readonly TypedPath[];
31
34
  };
32
35
  export type MemoryAdapter = Adapter & {
36
+ discover: NonNullable<Adapter['discover']>;
37
+ refresh: NonNullable<Adapter['refresh']>;
33
38
  setRooms(rooms: readonly MemoryRoom[]): void;
34
39
  setConversations(conversations: readonly MemoryConversation[]): void;
35
40
  script(operation: keyof Adapter, answer: unknown): void;
@@ -37,17 +42,19 @@ export type MemoryAdapter = Adapter & {
37
42
  close(closing?: {
38
43
  revoked?: boolean;
39
44
  lost?: boolean;
45
+ authorityChanged?: boolean;
40
46
  }): void;
41
47
  expire(locators: readonly string[]): void;
42
48
  notifyRoomVersion(notification: {
43
49
  locator: string;
44
50
  roomVersion: string;
45
51
  }): void;
46
- notifyAuthorityChanged(scope?: DiscoveryScope): void;
52
+ notifyAuthorityChanged(locators?: readonly string[]): void;
47
53
  notifyConversation(event: ConversationEvent): void;
48
54
  notifyServiceMode(mode: ServiceMode): void;
49
55
  heldRooms(): readonly string[];
50
56
  replicatedConversations(): readonly string[];
57
+ heldConversationCursor(): string | null;
51
58
  };
52
59
  export declare function createMemoryAdapter(options?: MemoryAdapterOptions): MemoryAdapter;
53
60
  //# sourceMappingURL=memory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}