@agentshouse/mdruntime 0.1.0-c4ca57eefb98a → 0.1.0-c4d7cf2ec26a6

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 (289) hide show
  1. package/README.md +2 -2
  2. package/dist/acceptance.d.ts +6 -0
  3. package/dist/acceptance.d.ts.map +1 -0
  4. package/dist/acceptance.js +386 -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 +86 -67
  9. package/dist/adapter.d.ts.map +1 -1
  10. package/dist/attached-model.d.ts +3 -10
  11. package/dist/attached-model.d.ts.map +1 -1
  12. package/dist/attached-model.js +21 -56
  13. package/dist/bootstrap.d.ts +11 -10
  14. package/dist/bootstrap.d.ts.map +1 -1
  15. package/dist/bootstrap.js +219 -82
  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/chain.js +3 -7
  22. package/dist/change.d.ts +1 -0
  23. package/dist/change.d.ts.map +1 -1
  24. package/dist/change.js +4 -2
  25. package/dist/chat-types.d.ts +5 -0
  26. package/dist/chat-types.d.ts.map +1 -0
  27. package/dist/chat-types.js +13 -0
  28. package/dist/client.d.ts +21 -6
  29. package/dist/client.d.ts.map +1 -1
  30. package/dist/client.js +3 -1
  31. package/dist/collection.d.ts +2 -4
  32. package/dist/collection.d.ts.map +1 -1
  33. package/dist/collection.js +1 -17
  34. package/dist/compile.d.ts +6 -6
  35. package/dist/compile.d.ts.map +1 -1
  36. package/dist/compile.js +267 -323
  37. package/dist/connection.d.ts +5 -143
  38. package/dist/connection.d.ts.map +1 -1
  39. package/dist/connection.js +102 -5311
  40. package/dist/context.d.ts +2 -0
  41. package/dist/context.d.ts.map +1 -0
  42. package/dist/context.js +7 -0
  43. package/dist/conversation-live.d.ts +136 -0
  44. package/dist/conversation-live.d.ts.map +1 -0
  45. package/dist/conversation-live.js +248 -0
  46. package/dist/conversation-row.d.ts +33 -0
  47. package/dist/conversation-row.d.ts.map +1 -0
  48. package/dist/conversation-row.js +53 -0
  49. package/dist/conversation.d.ts +41 -45
  50. package/dist/conversation.d.ts.map +1 -1
  51. package/dist/conversation.js +860 -869
  52. package/dist/discovery.d.ts +10 -0
  53. package/dist/discovery.d.ts.map +1 -0
  54. package/dist/discovery.js +175 -0
  55. package/dist/durability.d.ts +15 -1
  56. package/dist/durability.d.ts.map +1 -1
  57. package/dist/entry.d.ts +2 -2
  58. package/dist/entry.d.ts.map +1 -1
  59. package/dist/entry.js +17 -7
  60. package/dist/figures.d.ts +49 -0
  61. package/dist/figures.d.ts.map +1 -0
  62. package/dist/figures.js +197 -0
  63. package/dist/holdings.d.ts +29 -0
  64. package/dist/holdings.d.ts.map +1 -0
  65. package/dist/holdings.js +95 -0
  66. package/dist/host.d.ts +4 -7
  67. package/dist/host.d.ts.map +1 -1
  68. package/dist/host.js +29 -31
  69. package/dist/identity.d.ts +0 -1
  70. package/dist/identity.d.ts.map +1 -1
  71. package/dist/identity.js +0 -3
  72. package/dist/index.d.ts +26 -8
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +8 -1
  75. package/dist/install.d.ts +56 -0
  76. package/dist/install.d.ts.map +1 -0
  77. package/dist/install.js +554 -0
  78. package/dist/job.d.ts +33 -0
  79. package/dist/job.d.ts.map +1 -0
  80. package/dist/job.js +54 -0
  81. package/dist/lifecycle.d.ts +7 -0
  82. package/dist/lifecycle.d.ts.map +1 -0
  83. package/dist/lifecycle.js +268 -0
  84. package/dist/listing.d.ts +53 -0
  85. package/dist/listing.d.ts.map +1 -0
  86. package/dist/listing.js +176 -0
  87. package/dist/live.d.ts +5 -4
  88. package/dist/live.d.ts.map +1 -1
  89. package/dist/live.js +62 -23
  90. package/dist/locks.d.ts +9 -0
  91. package/dist/locks.d.ts.map +1 -0
  92. package/dist/locks.js +61 -0
  93. package/dist/log.d.ts +1 -0
  94. package/dist/log.d.ts.map +1 -1
  95. package/dist/lost.d.ts +5 -0
  96. package/dist/lost.d.ts.map +1 -0
  97. package/dist/lost.js +61 -0
  98. package/dist/media.d.ts +1 -1
  99. package/dist/media.d.ts.map +1 -1
  100. package/dist/media.js +19 -9
  101. package/dist/memory.d.ts +11 -4
  102. package/dist/memory.d.ts.map +1 -1
  103. package/dist/memory.js +172 -82
  104. package/dist/messages.d.ts +27 -3
  105. package/dist/messages.d.ts.map +1 -1
  106. package/dist/messages.js +97 -19
  107. package/dist/model.d.ts +2 -10
  108. package/dist/model.d.ts.map +1 -1
  109. package/dist/model.js +0 -18
  110. package/dist/models.d.ts +14 -0
  111. package/dist/models.d.ts.map +1 -0
  112. package/dist/models.js +195 -0
  113. package/dist/observation.d.ts +2 -2
  114. package/dist/observation.d.ts.map +1 -1
  115. package/dist/observation.js +14 -14
  116. package/dist/opened.js +3 -3
  117. package/dist/opening.d.ts +4 -0
  118. package/dist/opening.d.ts.map +1 -0
  119. package/dist/opening.js +57 -0
  120. package/dist/outcome.d.ts +4 -4
  121. package/dist/outcome.d.ts.map +1 -1
  122. package/dist/outcome.js +3 -0
  123. package/dist/overlay.d.ts +1 -0
  124. package/dist/overlay.d.ts.map +1 -1
  125. package/dist/overlay.js +11 -0
  126. package/dist/parts.d.ts +60 -0
  127. package/dist/parts.d.ts.map +1 -0
  128. package/dist/parts.js +126 -0
  129. package/dist/paths.d.ts +1 -0
  130. package/dist/paths.d.ts.map +1 -1
  131. package/dist/paths.js +22 -0
  132. package/dist/preparation.d.ts +20 -0
  133. package/dist/preparation.d.ts.map +1 -0
  134. package/dist/preparation.js +226 -0
  135. package/dist/queries.d.ts +16 -0
  136. package/dist/queries.d.ts.map +1 -0
  137. package/dist/queries.js +272 -0
  138. package/dist/query.d.ts +14 -209
  139. package/dist/query.d.ts.map +1 -1
  140. package/dist/query.js +3 -505
  141. package/dist/questions.d.ts +34 -0
  142. package/dist/questions.d.ts.map +1 -0
  143. package/dist/questions.js +122 -0
  144. package/dist/reach.d.ts +15 -13
  145. package/dist/reach.d.ts.map +1 -1
  146. package/dist/reach.js +183 -137
  147. package/dist/react.d.ts +10 -2
  148. package/dist/react.d.ts.map +1 -1
  149. package/dist/read.d.ts +7 -0
  150. package/dist/read.d.ts.map +1 -0
  151. package/dist/read.js +17 -0
  152. package/dist/readiness.d.ts +2 -16
  153. package/dist/readiness.d.ts.map +1 -1
  154. package/dist/readiness.js +4 -10
  155. package/dist/reads.d.ts +36 -10
  156. package/dist/reads.d.ts.map +1 -1
  157. package/dist/reads.js +158 -78
  158. package/dist/recovery.d.ts +1 -0
  159. package/dist/recovery.d.ts.map +1 -1
  160. package/dist/recovery.js +35 -1
  161. package/dist/refresh.d.ts +7 -5
  162. package/dist/refresh.d.ts.map +1 -1
  163. package/dist/refresh.js +33 -5
  164. package/dist/refusal.d.ts +5 -0
  165. package/dist/refusal.d.ts.map +1 -0
  166. package/dist/refusal.js +56 -0
  167. package/dist/replica.d.ts +9 -9
  168. package/dist/replica.d.ts.map +1 -1
  169. package/dist/replica.js +53 -21
  170. package/dist/room-draft.d.ts +4 -3
  171. package/dist/room-draft.d.ts.map +1 -1
  172. package/dist/room-draft.js +67 -54
  173. package/dist/room-drafts.d.ts +24 -0
  174. package/dist/room-drafts.d.ts.map +1 -0
  175. package/dist/room-drafts.js +217 -0
  176. package/dist/rows.d.ts +14 -21
  177. package/dist/rows.d.ts.map +1 -1
  178. package/dist/rows.js +48 -184
  179. package/dist/runtime.d.ts +43 -0
  180. package/dist/runtime.d.ts.map +1 -0
  181. package/dist/runtime.js +1 -0
  182. package/dist/save.d.ts +5 -1
  183. package/dist/save.d.ts.map +1 -1
  184. package/dist/save.js +21 -20
  185. package/dist/saves.d.ts +70 -0
  186. package/dist/saves.d.ts.map +1 -0
  187. package/dist/saves.js +1005 -0
  188. package/dist/search.d.ts +12 -63
  189. package/dist/search.d.ts.map +1 -1
  190. package/dist/search.js +9 -52
  191. package/dist/seed.d.ts +11 -2
  192. package/dist/seed.d.ts.map +1 -1
  193. package/dist/seed.js +71 -0
  194. package/dist/shared.d.ts +1 -7
  195. package/dist/shared.d.ts.map +1 -1
  196. package/dist/shared.js +13 -105
  197. package/dist/shown.d.ts +31 -0
  198. package/dist/shown.d.ts.map +1 -0
  199. package/dist/shown.js +292 -0
  200. package/dist/socket/admission.d.ts +7 -0
  201. package/dist/socket/admission.d.ts.map +1 -0
  202. package/dist/socket/admission.js +39 -0
  203. package/dist/socket/answers.d.ts +6 -0
  204. package/dist/socket/answers.d.ts.map +1 -0
  205. package/dist/socket/answers.js +20 -0
  206. package/dist/socket/lanes.d.ts +20 -0
  207. package/dist/socket/lanes.d.ts.map +1 -0
  208. package/dist/socket/lanes.js +77 -0
  209. package/dist/socket/reads.d.ts +10 -0
  210. package/dist/socket/reads.d.ts.map +1 -0
  211. package/dist/socket/reads.js +31 -0
  212. package/dist/socket/rooms.d.ts +44 -0
  213. package/dist/socket/rooms.d.ts.map +1 -0
  214. package/dist/socket/rooms.js +90 -0
  215. package/dist/socket/session.d.ts +39 -0
  216. package/dist/socket/session.d.ts.map +1 -0
  217. package/dist/socket/session.js +23 -0
  218. package/dist/socket.d.ts +70 -0
  219. package/dist/socket.d.ts.map +1 -0
  220. package/dist/socket.js +175 -0
  221. package/dist/source.d.ts +61 -0
  222. package/dist/source.d.ts.map +1 -0
  223. package/dist/source.js +82 -0
  224. package/dist/status.d.ts +0 -6
  225. package/dist/status.d.ts.map +1 -1
  226. package/dist/status.js +0 -6
  227. package/dist/store/fences.d.ts +16 -0
  228. package/dist/store/fences.d.ts.map +1 -0
  229. package/dist/store/fences.js +26 -0
  230. package/dist/store/installs.d.ts +30 -0
  231. package/dist/store/installs.d.ts.map +1 -0
  232. package/dist/store/installs.js +34 -0
  233. package/dist/store/readiness.d.ts +10 -0
  234. package/dist/store/readiness.d.ts.map +1 -0
  235. package/dist/store/readiness.js +52 -0
  236. package/dist/store/records.d.ts +212 -0
  237. package/dist/store/records.d.ts.map +1 -0
  238. package/dist/store/records.js +431 -0
  239. package/dist/store/room-held.d.ts +8 -0
  240. package/dist/store/room-held.d.ts.map +1 -0
  241. package/dist/store/room-held.js +17 -0
  242. package/dist/store/space.d.ts +11 -0
  243. package/dist/store/space.d.ts.map +1 -0
  244. package/dist/store/space.js +41 -0
  245. package/dist/store/watchers.d.ts +17 -0
  246. package/dist/store/watchers.d.ts.map +1 -0
  247. package/dist/store/watchers.js +56 -0
  248. package/dist/store/writes.d.ts +24 -0
  249. package/dist/store/writes.d.ts.map +1 -0
  250. package/dist/store/writes.js +125 -0
  251. package/dist/store.d.ts +107 -157
  252. package/dist/store.d.ts.map +1 -1
  253. package/dist/store.js +143 -395
  254. package/dist/stored.d.ts +59 -38
  255. package/dist/stored.d.ts.map +1 -1
  256. package/dist/stored.js +285 -205
  257. package/dist/surface.d.ts +88 -0
  258. package/dist/surface.d.ts.map +1 -0
  259. package/dist/surface.js +223 -0
  260. package/dist/sync.d.ts +19 -0
  261. package/dist/sync.d.ts.map +1 -0
  262. package/dist/sync.js +532 -0
  263. package/dist/tables.d.ts +120 -56
  264. package/dist/tables.d.ts.map +1 -1
  265. package/dist/tables.js +217 -98
  266. package/dist/tallies.d.ts +18 -0
  267. package/dist/tallies.d.ts.map +1 -0
  268. package/dist/tallies.js +129 -0
  269. package/dist/transfer.d.ts +0 -5
  270. package/dist/transfer.d.ts.map +1 -1
  271. package/dist/validation.d.ts +3 -4
  272. package/dist/validation.d.ts.map +1 -1
  273. package/dist/validation.js +42 -100
  274. package/dist/windows.d.ts +1 -12
  275. package/dist/windows.d.ts.map +1 -1
  276. package/dist/windows.js +2 -75
  277. package/dist/wire.d.ts +17 -5
  278. package/dist/wire.d.ts.map +1 -1
  279. package/dist/wire.js +7 -1
  280. package/package.json +2 -2
  281. package/dist/fence.d.ts +0 -6
  282. package/dist/fence.d.ts.map +0 -1
  283. package/dist/fence.js +0 -10
  284. package/dist/fulltext.d.ts +0 -27
  285. package/dist/fulltext.d.ts.map +0 -1
  286. package/dist/fulltext.js +0 -370
  287. package/dist/words.d.ts +0 -19
  288. package/dist/words.d.ts.map +0 -1
  289. package/dist/words.js +0 -156
package/dist/live.js CHANGED
@@ -14,8 +14,7 @@ function reads(plan, locator) {
14
14
  if (plan.reach === null)
15
15
  return true;
16
16
  return (plan.reach.rooms.includes(locator) ||
17
- plan.reach.documents.some((document) => roomOfKey(document) === locator) ||
18
- plan.reach.areas.some((area) => area.room === locator && area.types.length > 0));
17
+ plan.reach.documents.some((document) => roomOfKey(document) === locator));
19
18
  }
20
19
  function affected(plan, set) {
21
20
  if (set.rooms.some((locator) => reads(plan, locator)))
@@ -23,13 +22,15 @@ function affected(plan, set) {
23
22
  const paths = narrowed(plan) ? new Set(plan.paths) : null;
24
23
  return set.documents.some(({ locator, path }) => reads(plan, locator) && (paths === null || path === null || paths.has(path)));
25
24
  }
26
- function shown(entry) {
27
- const cover = entry.cover();
25
+ function shown(entry, held) {
26
+ const cover = entry.cover(held);
28
27
  return JSON.stringify('pending' in cover ? cover : cover.coverage);
29
28
  }
30
- export function createLiveQueries(run) {
29
+ export function createLiveQueries(run, holding) {
31
30
  const entries = new Map();
32
31
  let closed = false;
32
+ let recovering = false;
33
+ let recoverAgain = false;
33
34
  function deliver(entry, next) {
34
35
  const previous = entry.digest;
35
36
  entry.digest = digestOf(next);
@@ -39,12 +40,19 @@ export function createLiveQueries(run) {
39
40
  for (const listener of entry.ready)
40
41
  listener(change);
41
42
  }
42
- for (const listener of entry.fresh) {
43
+ for (const listener of entry.fresh.keys()) {
43
44
  entry.ready.add(listener);
44
45
  listener(next);
45
46
  }
46
47
  entry.fresh.clear();
47
48
  }
49
+ async function delivered(entry) {
50
+ const { current, ...next } = await run(entry.plan, async () => entry.cover(await holding()));
51
+ if (closed || entry.listeners.size === 0)
52
+ return null;
53
+ deliver(entry, next);
54
+ return current;
55
+ }
48
56
  function schedule(entry) {
49
57
  if (closed || entry.listeners.size === 0)
50
58
  return;
@@ -57,22 +65,60 @@ export function createLiveQueries(run) {
57
65
  try {
58
66
  for (;;) {
59
67
  entry.dirty = false;
60
- const { current, ...next } = await run(entry.plan, entry.cover);
61
- if (closed || entry.listeners.size === 0)
68
+ const current = await delivered(entry);
69
+ if (current === null)
62
70
  return;
63
- deliver(entry, next);
64
- if (!(entry.dirty && !current()) && shown(entry) === entry.covered)
71
+ const held = await holding();
72
+ if (entry.fresh.size > 0 || (entry.dirty && !current()))
73
+ continue;
74
+ if (shown(entry, held) === entry.covered)
65
75
  break;
66
76
  }
67
77
  }
68
- catch {
69
- entry.dirty = false;
78
+ catch (error) {
79
+ const unanswered = [...entry.fresh.values()];
80
+ entry.fresh.clear();
81
+ for (const failed of unanswered)
82
+ failed(error);
70
83
  }
71
84
  finally {
72
85
  entry.running = false;
73
86
  }
74
87
  })();
75
88
  }
89
+ function recovered() {
90
+ if (recovering) {
91
+ recoverAgain = true;
92
+ return;
93
+ }
94
+ recovering = true;
95
+ void (async () => {
96
+ try {
97
+ do {
98
+ recoverAgain = false;
99
+ for (const entry of entries.values()) {
100
+ if (entry.running)
101
+ entry.dirty = true;
102
+ }
103
+ const waiting = [...entries.values()].filter((entry) => !entry.running);
104
+ if (waiting.length === 0 || closed)
105
+ continue;
106
+ const held = await holding();
107
+ for (const entry of waiting) {
108
+ if (entry.running)
109
+ continue;
110
+ if (entry.digest === undefined || shown(entry, held) !== entry.covered)
111
+ schedule(entry);
112
+ }
113
+ } while (recoverAgain && !closed);
114
+ }
115
+ catch {
116
+ }
117
+ finally {
118
+ recovering = false;
119
+ }
120
+ })();
121
+ }
76
122
  return {
77
123
  touched(set) {
78
124
  for (const entry of entries.values()) {
@@ -80,22 +126,15 @@ export function createLiveQueries(run) {
80
126
  schedule(entry);
81
127
  }
82
128
  },
83
- recover() {
84
- for (const entry of entries.values()) {
85
- if (entry.running)
86
- continue;
87
- if (entry.digest === undefined || shown(entry) !== entry.covered)
88
- schedule(entry);
89
- }
90
- },
91
- watch(plan, identity, cover, listener) {
129
+ recover: recovered,
130
+ watch(plan, identity, cover, listener, failed) {
92
131
  let entry = entries.get(identity);
93
132
  if (entry === undefined) {
94
133
  entry = {
95
134
  plan,
96
135
  cover,
97
136
  listeners: new Set(),
98
- fresh: new Set(),
137
+ fresh: new Map(),
99
138
  ready: new Set(),
100
139
  digest: undefined,
101
140
  covered: '',
@@ -106,7 +145,7 @@ export function createLiveQueries(run) {
106
145
  }
107
146
  const held = entry;
108
147
  held.listeners.add(listener);
109
- held.fresh.add(listener);
148
+ held.fresh.set(listener, failed);
110
149
  schedule(held);
111
150
  return () => {
112
151
  held.listeners.delete(listener);
@@ -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
+ }
package/dist/media.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { MdRuntimeClient } from './client.js';
2
- import type { ShownAnswer } from './outcome.js';
2
+ import { type ShownAnswer } from './outcome.js';
3
3
  export declare const ROOM_MEDIA = "room-media";
4
4
  type Show = (room: string, path: string, revision?: string) => Promise<ShownAnswer>;
5
5
  export declare function shownBy(show: Show, client: MdRuntimeClient): MdRuntimeClient;
@@ -1 +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,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,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,CAC7B,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,EAClD,QAAQ,GAAE,qBAAsC,GAC/C,IAAI,CAkLN"}
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,CAC7B,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,EAClD,QAAQ,GAAE,qBAAsC,GAC/C,IAAI,CA0LN"}
package/dist/media.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { UNCERTAIN } from './outcome.js';
1
2
  export const ROOM_MEDIA = 'room-media';
2
3
  const ATTRIBUTES = ['room', 'path', 'revision', 'width', 'height', 'alt'];
3
4
  const LOADING = new Set(['room', 'path', 'revision']);
@@ -114,7 +115,7 @@ export function defineRoomMedia(client, registry = customElements) {
114
115
  return;
115
116
  }
116
117
  const show = shows.get(await connected);
117
- const shown = show === undefined ? null : await show(room, path, revision);
118
+ const shown = show === undefined ? null : await show(room, path, revision).catch(() => UNCERTAIN);
118
119
  if (asked !== this.#asked)
119
120
  return;
120
121
  if (shown?.kind === 'link') {
@@ -122,21 +123,30 @@ export function defineRoomMedia(client, registry = customElements) {
122
123
  return;
123
124
  }
124
125
  if (shown?.kind !== 'binary') {
125
- this.#unreadable();
126
126
  if (shown === null || refusedForGood(shown))
127
- return;
128
- setTimeout(() => {
129
- if (asked === this.#asked && this.#near)
130
- void this.#load();
131
- }, UNSHOWN_MS);
127
+ this.#unreadable();
128
+ else
129
+ this.#unshown(asked);
132
130
  return;
133
131
  }
134
132
  const copy = await new Response(shown.stream, {
135
133
  headers: { 'content-type': shown.mediaType },
136
- }).blob();
134
+ })
135
+ .blob()
136
+ .catch(() => null);
137
137
  if (asked !== this.#asked)
138
138
  return;
139
- this.#draw({ url: URL.createObjectURL(copy), copy: true }, shown.mediaType);
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);
140
150
  }
141
151
  #show(shown, content = null) {
142
152
  if (this.#shown?.copy === true)
package/dist/memory.d.ts CHANGED
@@ -1,10 +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
5
  documents?: Readonly<Record<string, string>>;
6
+ facts?: Readonly<Record<string, SavedFacts>>;
6
7
  revisions?: Readonly<Record<string, string>>;
7
8
  fileIds?: Readonly<Record<string, string>>;
9
+ created?: Readonly<Record<string, string>>;
8
10
  changes?: Readonly<Record<string, HeadChange>>;
9
11
  binaryFiles?: Readonly<Record<string, BinaryFile>>;
10
12
  folders?: readonly string[];
@@ -14,11 +16,12 @@ export type MemoryConversation = {
14
16
  conversation: string;
15
17
  listed?: Omit<ListedConversation, 'conversation' | 'newest'>;
16
18
  messages?: readonly AcceptedMessage[];
17
- outcomes?: Partial<Record<ConversationAction, ActionResult>>;
19
+ outcomes?: Partial<Record<ConversationAction | 'history', ActionResult>>;
18
20
  };
19
21
  export type MemoryAdapterOptions = {
20
22
  rooms?: readonly MemoryRoom[];
21
23
  conversations?: readonly MemoryConversation[];
24
+ agents?: readonly ListedAgent[];
22
25
  historyPageSize?: number;
23
26
  pageSize?: number;
24
27
  capabilities?: readonly Capability[];
@@ -26,10 +29,12 @@ export type MemoryAdapterOptions = {
26
29
  retention?: Retention;
27
30
  member?: Member;
28
31
  unopened?: boolean;
29
- exhaustiveDiscovery?: true;
30
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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"}