@agentshouse/mdruntime 0.1.0-c2aaa9c0e3ca4 → 0.1.0-c2e8a6f99866d

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 (214) hide show
  1. package/AGENTS.md +289 -276
  2. package/README.md +9 -8
  3. package/dist/adapter.d.ts +91 -23
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/attached-model.d.ts +4 -1
  6. package/dist/attached-model.d.ts.map +1 -1
  7. package/dist/attached-model.js +13 -3
  8. package/dist/attempt.d.ts.map +1 -1
  9. package/dist/attempt.js +14 -1
  10. package/dist/bootstrap.d.ts +16 -8
  11. package/dist/bootstrap.d.ts.map +1 -1
  12. package/dist/bootstrap.js +102 -47
  13. package/dist/chain.d.ts +11 -0
  14. package/dist/chain.d.ts.map +1 -0
  15. package/dist/chain.js +64 -0
  16. package/dist/change-set.d.ts +9 -8
  17. package/dist/change-set.d.ts.map +1 -1
  18. package/dist/change-set.js +10 -59
  19. package/dist/change.d.ts +31 -1
  20. package/dist/change.d.ts.map +1 -1
  21. package/dist/change.js +10 -1
  22. package/dist/chat/acts.d.ts +3 -4
  23. package/dist/chat/acts.d.ts.map +1 -1
  24. package/dist/chat/acts.js +10 -10
  25. package/dist/chat/earlier.d.ts +10 -0
  26. package/dist/chat/earlier.d.ts.map +1 -0
  27. package/dist/chat/earlier.js +54 -0
  28. package/dist/chat/house.d.ts +25 -0
  29. package/dist/chat/house.d.ts.map +1 -0
  30. package/dist/chat/house.js +38 -0
  31. package/dist/chat/input.d.ts +3 -1
  32. package/dist/chat/input.d.ts.map +1 -1
  33. package/dist/chat/input.js +11 -18
  34. package/dist/chat/kit.d.ts +2 -1
  35. package/dist/chat/kit.d.ts.map +1 -1
  36. package/dist/chat/kit.js +3 -3
  37. package/dist/chat/list.d.ts +9 -1
  38. package/dist/chat/list.d.ts.map +1 -1
  39. package/dist/chat/list.js +53 -9
  40. package/dist/chat/markdown.d.ts +3 -1
  41. package/dist/chat/markdown.d.ts.map +1 -1
  42. package/dist/chat/markdown.js +85 -26
  43. package/dist/chat/message.d.ts +1 -0
  44. package/dist/chat/message.d.ts.map +1 -1
  45. package/dist/chat/message.js +65 -13
  46. package/dist/chat/messages.d.ts +10 -1
  47. package/dist/chat/messages.d.ts.map +1 -1
  48. package/dist/chat/messages.js +70 -23
  49. package/dist/chat/name.d.ts +1 -0
  50. package/dist/chat/name.d.ts.map +1 -1
  51. package/dist/chat/name.js +1 -1
  52. package/dist/chat/opened.d.ts +1 -0
  53. package/dist/chat/opened.d.ts.map +1 -1
  54. package/dist/chat/opened.js +2 -0
  55. package/dist/chat/overlay.d.ts +1 -0
  56. package/dist/chat/overlay.d.ts.map +1 -1
  57. package/dist/chat/overlay.js +11 -5
  58. package/dist/chat/parts.d.ts +1 -0
  59. package/dist/chat/parts.d.ts.map +1 -1
  60. package/dist/chat/parts.js +3 -2
  61. package/dist/chat/pieces.d.ts +62 -0
  62. package/dist/chat/pieces.d.ts.map +1 -0
  63. package/dist/chat/pieces.js +1110 -0
  64. package/dist/chat/provider.d.ts +9 -2
  65. package/dist/chat/provider.d.ts.map +1 -1
  66. package/dist/chat/provider.js +146 -156
  67. package/dist/chat/question.d.ts +1 -1
  68. package/dist/chat/question.d.ts.map +1 -1
  69. package/dist/chat/question.js +7 -18
  70. package/dist/chat/ready.d.ts +5 -1
  71. package/dist/chat/ready.d.ts.map +1 -1
  72. package/dist/chat/ready.js +9 -7
  73. package/dist/chat/room-file.d.ts +8 -0
  74. package/dist/chat/room-file.d.ts.map +1 -0
  75. package/dist/chat/room-file.js +72 -0
  76. package/dist/chat/steady.d.ts +3 -0
  77. package/dist/chat/steady.d.ts.map +1 -0
  78. package/dist/chat/steady.js +26 -0
  79. package/dist/chat/style.d.ts.map +1 -1
  80. package/dist/chat/style.js +8 -4
  81. package/dist/chat.d.ts +3 -2
  82. package/dist/chat.d.ts.map +1 -1
  83. package/dist/chat.js +2 -2
  84. package/dist/client.d.ts +22 -9
  85. package/dist/client.d.ts.map +1 -1
  86. package/dist/client.js +48 -8
  87. package/dist/collection.d.ts +7 -6
  88. package/dist/collection.d.ts.map +1 -1
  89. package/dist/collection.js +31 -77
  90. package/dist/compile.d.ts +11 -0
  91. package/dist/compile.d.ts.map +1 -0
  92. package/dist/compile.js +712 -0
  93. package/dist/connection.d.ts +41 -13
  94. package/dist/connection.d.ts.map +1 -1
  95. package/dist/connection.js +3264 -690
  96. package/dist/conversation.d.ts +28 -9
  97. package/dist/conversation.d.ts.map +1 -1
  98. package/dist/conversation.js +520 -176
  99. package/dist/digest.d.ts +7 -0
  100. package/dist/digest.d.ts.map +1 -0
  101. package/dist/digest.js +113 -0
  102. package/dist/durability.d.ts +8 -1
  103. package/dist/durability.d.ts.map +1 -1
  104. package/dist/entry.d.ts +19 -0
  105. package/dist/entry.d.ts.map +1 -0
  106. package/dist/entry.js +151 -0
  107. package/dist/fence.d.ts +6 -0
  108. package/dist/fence.d.ts.map +1 -0
  109. package/dist/fence.js +10 -0
  110. package/dist/file.d.ts +2 -10
  111. package/dist/file.d.ts.map +1 -1
  112. package/dist/file.js +3 -120
  113. package/dist/host.d.ts +15 -3
  114. package/dist/host.d.ts.map +1 -1
  115. package/dist/host.js +103 -13
  116. package/dist/identity.d.ts +2 -0
  117. package/dist/identity.d.ts.map +1 -1
  118. package/dist/identity.js +6 -0
  119. package/dist/index.d.ts +15 -9
  120. package/dist/index.d.ts.map +1 -1
  121. package/dist/index.js +5 -0
  122. package/dist/live.d.ts +22 -0
  123. package/dist/live.d.ts.map +1 -0
  124. package/dist/live.js +123 -0
  125. package/dist/memory.d.ts +9 -2
  126. package/dist/memory.d.ts.map +1 -1
  127. package/dist/memory.js +55 -12
  128. package/dist/model.d.ts +4 -2
  129. package/dist/model.d.ts.map +1 -1
  130. package/dist/model.js +10 -1
  131. package/dist/name.d.ts +4 -0
  132. package/dist/name.d.ts.map +1 -0
  133. package/dist/name.js +122 -0
  134. package/dist/observation.d.ts +19 -2
  135. package/dist/observation.d.ts.map +1 -1
  136. package/dist/observation.js +113 -12
  137. package/dist/opened.d.ts +22 -0
  138. package/dist/opened.d.ts.map +1 -0
  139. package/dist/opened.js +107 -0
  140. package/dist/outcome.d.ts +39 -4
  141. package/dist/outcome.d.ts.map +1 -1
  142. package/dist/outcome.js +29 -0
  143. package/dist/overlay.d.ts +3 -4
  144. package/dist/overlay.d.ts.map +1 -1
  145. package/dist/overlay.js +99 -181
  146. package/dist/query.d.ts +57 -4
  147. package/dist/query.d.ts.map +1 -1
  148. package/dist/query.js +37 -7
  149. package/dist/reach.d.ts +11 -4
  150. package/dist/reach.d.ts.map +1 -1
  151. package/dist/reach.js +182 -51
  152. package/dist/react.d.ts +8 -6
  153. package/dist/react.d.ts.map +1 -1
  154. package/dist/react.js +7 -17
  155. package/dist/readiness.d.ts +53 -0
  156. package/dist/readiness.d.ts.map +1 -0
  157. package/dist/readiness.js +33 -0
  158. package/dist/reads.d.ts +11 -0
  159. package/dist/reads.d.ts.map +1 -0
  160. package/dist/reads.js +98 -0
  161. package/dist/recovery.d.ts +25 -0
  162. package/dist/recovery.d.ts.map +1 -0
  163. package/dist/recovery.js +198 -0
  164. package/dist/refresh.d.ts +12 -15
  165. package/dist/refresh.d.ts.map +1 -1
  166. package/dist/refresh.js +74 -44
  167. package/dist/replica.d.ts +55 -33
  168. package/dist/replica.d.ts.map +1 -1
  169. package/dist/replica.js +295 -149
  170. package/dist/room-draft.d.ts +16 -2
  171. package/dist/room-draft.d.ts.map +1 -1
  172. package/dist/room-draft.js +32 -25
  173. package/dist/rows.d.ts +28 -37
  174. package/dist/rows.d.ts.map +1 -1
  175. package/dist/rows.js +113 -72
  176. package/dist/save.d.ts +50 -9
  177. package/dist/save.d.ts.map +1 -1
  178. package/dist/save.js +528 -166
  179. package/dist/search.d.ts +50 -7
  180. package/dist/search.d.ts.map +1 -1
  181. package/dist/search.js +273 -45
  182. package/dist/seed.d.ts +16 -0
  183. package/dist/seed.d.ts.map +1 -0
  184. package/dist/seed.js +75 -0
  185. package/dist/shared.d.ts +16 -0
  186. package/dist/shared.d.ts.map +1 -0
  187. package/dist/shared.js +431 -0
  188. package/dist/status.d.ts +4 -0
  189. package/dist/status.d.ts.map +1 -1
  190. package/dist/store.d.ts +128 -67
  191. package/dist/store.d.ts.map +1 -1
  192. package/dist/store.js +537 -432
  193. package/dist/stored.d.ts +143 -0
  194. package/dist/stored.d.ts.map +1 -0
  195. package/dist/stored.js +561 -0
  196. package/dist/tables.d.ts +320 -0
  197. package/dist/tables.d.ts.map +1 -0
  198. package/dist/tables.js +537 -0
  199. package/dist/turn.d.ts +9 -0
  200. package/dist/turn.d.ts.map +1 -0
  201. package/dist/turn.js +75 -0
  202. package/dist/validation.d.ts +30 -0
  203. package/dist/validation.d.ts.map +1 -0
  204. package/dist/validation.js +162 -0
  205. package/dist/windows.d.ts +22 -0
  206. package/dist/windows.d.ts.map +1 -0
  207. package/dist/windows.js +89 -0
  208. package/dist/wire.d.ts +168 -32
  209. package/dist/wire.d.ts.map +1 -1
  210. package/dist/wire.js +56 -31
  211. package/package.json +10 -3
  212. package/dist/read-side.d.ts +0 -18
  213. package/dist/read-side.d.ts.map +0 -1
  214. package/dist/read-side.js +0 -440
package/dist/host.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import { composeRuntime, } from './connection.js';
2
+ import { queryKey } from './query.js';
2
3
  import { described } from './failure.js';
3
- import { removeRuntimeStore } from './store.js';
4
- import { AUTHORIZATION_ENDED, request, WIRE_REACH, } from './wire.js';
4
+ import { endRuntimeStore } from './store.js';
5
+ import { AUTHORIZATION_ENDED, request, WIRE, } from './wire.js';
5
6
  const NARROWED = new Set(['within', 'whole']);
6
7
  function answered(md, app, writtenBy, member, input) {
7
8
  switch (member) {
@@ -15,20 +16,32 @@ function answered(md, app, writtenBy, member, input) {
15
16
  return md.types(input[0]);
16
17
  case 'save':
17
18
  return md.save(input[0], input[1], writtenBy);
19
+ case 'saveParts':
20
+ return md.saveParts(input[0], input[1], writtenBy);
18
21
  case 'history':
19
22
  return md.history(input[0], input[1], input[2]);
23
+ case 'resolve':
24
+ return md.resolve(input[0], input[1], input[2]);
20
25
  case 'binaryFile.read':
21
26
  return md.binaryFile.read(input[0], input[1], input[2]);
27
+ case 'binaryFile.link':
28
+ return md.binaryFile.link(input[0], input[1], input[2]);
22
29
  case 'binaryFile.readReference':
23
30
  return md.binaryFile.readReference(input[0]);
31
+ case 'binaryFile.part':
32
+ return md.binaryFile.part(input[0], input[1]);
24
33
  case 'call':
25
34
  return md.call(input[0], input[1]);
26
35
  case 'reached':
27
36
  return md.reached(input[0], input[1], input[2]);
28
37
  case 'log':
29
38
  return md.log();
39
+ case 'cleanUp':
40
+ return md.cleanUp();
30
41
  case 'persistence':
31
42
  return md.persistence();
43
+ case 'retry':
44
+ return md.retry();
32
45
  case 'reauthorize':
33
46
  return md.reauthorize();
34
47
  case 'roomDraft.list':
@@ -43,6 +56,8 @@ function answered(md, app, writtenBy, member, input) {
43
56
  return md.presentation.read(app);
44
57
  case 'presentation.write':
45
58
  return md.presentation.write(app, input[0]);
59
+ case 'presentation.edit':
60
+ return md.presentation.edit(app, input[0]);
46
61
  case 'conversation.list':
47
62
  return md.conversation.list();
48
63
  case 'conversation.read':
@@ -50,7 +65,9 @@ function answered(md, app, writtenBy, member, input) {
50
65
  case 'conversation.create':
51
66
  return md.conversation.create(input[0]);
52
67
  case 'conversation.send':
53
- return md.conversation.send(input[0]);
68
+ return md.conversation.send(input[0], input[1], input[2]);
69
+ case 'conversation.attach':
70
+ return md.conversation.attach(input[0], input[1]);
54
71
  case 'conversation.answer':
55
72
  return md.conversation.answer(input[0], input[1]);
56
73
  case 'conversation.interrupt':
@@ -63,10 +80,20 @@ function answered(md, app, writtenBy, member, input) {
63
80
  return md.conversation.delete(input[0]);
64
81
  case 'chatDraft.write':
65
82
  return md.chatDraft.write(input[0], input[1], input[2]);
83
+ case 'chatDraft.prepend':
84
+ return md.chatDraft.prepend(input[0], input[1]);
66
85
  case 'chatDraft.discard':
67
86
  return md.chatDraft.discard(input[0]);
68
87
  }
69
88
  }
89
+ function answeredResult(value) {
90
+ return typeof value === 'object' && value !== null && !('pending' in value);
91
+ }
92
+ function answeredMessage(value) {
93
+ if (typeof value !== 'object' || value === null)
94
+ return false;
95
+ return !('result' in value) || answeredResult(value.result);
96
+ }
70
97
  export function serveMdRuntime(options) {
71
98
  const deploymentFacts = structuredClone(options.deploymentFacts);
72
99
  const closing = new AbortController();
@@ -84,13 +111,25 @@ export function serveMdRuntime(options) {
84
111
  deliver(structuredClone(deploymentFacts));
85
112
  return () => { };
86
113
  };
87
- function attach(port, app, release, reach) {
114
+ function attach(port, app, release, reach, code = 'stored', search = 'unused') {
88
115
  if (!authorized)
89
116
  throw new Error(AUTHORIZATION_ENDED);
90
117
  const writtenBy = release === undefined ? undefined : { app, release };
91
- const view = runtime.within(reach ?? null);
118
+ let facts = { target: app, code, capacity: null, search };
119
+ const view = runtime.within(reach ?? null, facts);
92
120
  const observations = new Map();
121
+ const followed = new Set();
122
+ const answeredKeys = new Set();
123
+ let awaited = null;
93
124
  let serving = true;
125
+ const answeredQuery = (query) => {
126
+ answeredKeys.add(queryKey(query));
127
+ if (awaited === null || !awaited.keys.every((key) => answeredKeys.has(key)))
128
+ return;
129
+ const { done } = awaited;
130
+ awaited = null;
131
+ done();
132
+ };
94
133
  const send = (message) => {
95
134
  port.postMessage(message);
96
135
  };
@@ -101,6 +140,8 @@ export function serveMdRuntime(options) {
101
140
  for (const end of observations.values())
102
141
  end();
103
142
  observations.clear();
143
+ for (const end of [...followed])
144
+ end();
104
145
  attachments.delete(detach);
105
146
  };
106
147
  const observe = (id, topic, input) => {
@@ -110,10 +151,12 @@ export function serveMdRuntime(options) {
110
151
  return;
111
152
  send(resolved ? { kind: 'event', id, value } : { kind: 'result', id, value });
112
153
  resolved = true;
154
+ if (topic === 'query' && answeredMessage(value))
155
+ answeredQuery(input[0]);
113
156
  };
114
157
  observations.set(id, topic === 'deployment-facts'
115
158
  ? watchFacts(deliver)
116
- : (NARROWED.has(WIRE_REACH.topics[topic]) ? view : runtime).watch(topic, topic === 'presentation' ? [app] : input, deliver));
159
+ : (NARROWED.has(WIRE.topics[topic]) ? view : runtime).watch(topic, topic === 'presentation' ? [app] : input, deliver));
117
160
  };
118
161
  const serve = async (message) => {
119
162
  if (message.kind === 'hello')
@@ -131,9 +174,12 @@ export function serveMdRuntime(options) {
131
174
  observe(message.id, message.topic, message.input);
132
175
  return;
133
176
  }
134
- const value = await answered(NARROWED.has(WIRE_REACH.members[message.member]) ? view.md : md, app, writtenBy, message.member, message.input);
135
- if (serving)
136
- send({ kind: 'result', id: message.id, value });
177
+ const value = await answered(NARROWED.has(WIRE.members[message.member].reach) ? view.md : md, app, writtenBy, message.member, message.input);
178
+ if (!serving)
179
+ return;
180
+ send({ kind: 'result', id: message.id, value });
181
+ if (message.member === 'query' && answeredResult(value))
182
+ answeredQuery(message.input[0]);
137
183
  }
138
184
  catch (error) {
139
185
  if (serving)
@@ -157,23 +203,67 @@ export function serveMdRuntime(options) {
157
203
  if (serving)
158
204
  view.narrow(next);
159
205
  },
206
+ code(next, capacity) {
207
+ if (!serving)
208
+ return;
209
+ facts = { ...facts, code: next, capacity };
210
+ view.facts(facts);
211
+ },
212
+ search(next) {
213
+ if (!serving)
214
+ return;
215
+ facts = { ...facts, search: next };
216
+ view.facts(facts);
217
+ },
218
+ answered(queries, done) {
219
+ const keys = queries.map(queryKey);
220
+ if (keys.every((key) => answeredKeys.has(key)))
221
+ done();
222
+ else
223
+ awaited = { keys, done };
224
+ },
225
+ readiness(deliver) {
226
+ if (!serving)
227
+ return () => { };
228
+ const stop = view.watch('readiness', [], (value) => {
229
+ if (serving)
230
+ deliver(value);
231
+ });
232
+ const end = () => {
233
+ followed.delete(end);
234
+ stop();
235
+ };
236
+ followed.add(end);
237
+ return end;
238
+ },
160
239
  };
161
240
  }
162
241
  return {
163
242
  attach,
164
- async endAuthorization() {
243
+ seed(entry) {
244
+ runtime.seed(entry);
245
+ },
246
+ persisted(answer) {
247
+ runtime.persisted(answer);
248
+ },
249
+ async endAuthorization(holder) {
165
250
  authorized = false;
166
251
  for (const [detach, send] of [...attachments]) {
167
252
  send({ kind: 'ended' });
168
253
  detach();
169
254
  }
170
255
  close();
171
- await removeRuntimeStore();
172
- await options.shell.dropGeneration();
256
+ if (!(await endRuntimeStore(options.database, holder)))
257
+ await options.shell.dropGeneration();
258
+ },
259
+ lose(locators) {
260
+ return runtime.lose(locators);
173
261
  },
174
262
  stop() {
175
263
  return runtime.stop();
176
264
  },
177
265
  };
178
266
  }
179
- export { AUTHORED_SCHEMA, STORE_SCHEMA } from './store.js';
267
+ export { entrySeedOf } from './seed.js';
268
+ export { createRecovery, retryDelay, } from './recovery.js';
269
+ export { openDatabase, STORE_SCHEMA, transacted } from './store.js';
@@ -1,6 +1,8 @@
1
1
  export declare function changeBatchIdentity(at?: number): string;
2
+ export declare function identityTime(identity: string): number;
2
3
  export declare function roomDraftRevision(): string;
3
4
  export declare function chatDraftRevision(): string;
4
5
  export declare function transferIdentity(): string;
6
+ export declare function indexGeneration(): string;
5
7
  export declare function binaryLocalId(): string;
6
8
  //# sourceMappingURL=identity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,EAAE,GAAE,MAAmB,GAAG,MAAM,CAWnE;AAQD,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,EAAE,GAAE,MAAmB,GAAG,MAAM,CAWnE;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErD;AAQD,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
package/dist/identity.js CHANGED
@@ -10,6 +10,9 @@ export function changeBatchIdentity(at = Date.now()) {
10
10
  const hex = [...bytes].map((byte) => byte.toString(16).padStart(2, '0')).join('');
11
11
  return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
12
12
  }
13
+ export function identityTime(identity) {
14
+ return Number.parseInt(identity.replaceAll('-', '').slice(0, 12), 16);
15
+ }
13
16
  function randomIdentity() {
14
17
  const bytes = new Uint8Array(16);
15
18
  crypto.getRandomValues(bytes);
@@ -24,6 +27,9 @@ export function chatDraftRevision() {
24
27
  export function transferIdentity() {
25
28
  return randomIdentity();
26
29
  }
30
+ export function indexGeneration() {
31
+ return randomIdentity();
32
+ }
27
33
  export function binaryLocalId() {
28
34
  return randomIdentity();
29
35
  }
package/dist/index.d.ts CHANGED
@@ -1,22 +1,28 @@
1
- export type { AcceptedMessage, ActionDeclaration, ActionRequest, ActionResult, Adapter, AdapterFailure, Authorization, BinaryFile, BinaryRequest, BinaryResult, ReferrerScope, BootstrapPage, BootstrapRequest, BootstrapResult, Capability, ChangeAuthor, ContractUnavailable, ConversationAction, ConversationAgents, ConversationEvent, ConversationHistories, ConversationHistoryPage, ConversationHistoryRequest, ConversationMessage, ConversationStream, DiscoverResult, DiscoveredRoom, Discovery, HistoryAuthor, HistoryRequest, HistoryResult, HistoryRetention, HistoryRevision, HeldRoom, ListedConversation, MdModelIdentity, Member, MutationRequest, MutationResult, PageToken, ProviderLimit, ProviderRefusal, RefreshPage, RefreshRequest, RefreshResult, Retention, RetryableRefusal, RevokedAuthorization, RoomModels, RoomNotReadable, RoomStream, RoomStreamEvent, RoomVersionAt, ServiceMode, ServiceModeSignal, TransportUncertainty, TurnContext, TurnOperation, TypedSelection, } from './adapter.js';
2
- export type { Change, ChangeBatch, Precondition, WrittenBy } from './change.js';
1
+ export type { AcceptedMessage, AcceptedRoom, ActionDeclaration, ActionRequest, ActionResult, Adapter, AdapterFailure, Authorization, BinaryFile, BinaryLinkResult, BinaryRequest, BinaryResult, ReferrerScope, BootstrapPage, BootstrapRequest, BootstrapResult, Capability, ChangeAuthor, ContractUnavailable, ConversationAction, ConversationAgents, ConversationEvent, ConversationHistories, ConversationHistoryPage, ConversationHistoryRequest, ConversationMessage, ConversationStream, DiscoverResult, DiscoveredRoom, Discovery, DiscoveryScope, HistoryAuthor, HistoryRequest, HistoryResult, HistoryRetention, HistoryRevision, HeldContent, HeldFile, HeldRevisions, HeldRoom, KeptReceipt, ListedConversation, MdModelIdentity, Member, MutationRequest, MutationResult, PageToken, ProviderLimit, ProviderRefusal, RefreshPage, RefreshRequest, RefreshResult, Retention, RetryableRefusal, RevokedAuthorization, RoomModels, RoomNotReadable, RoomStream, RoomStreamEvent, RoomVersionAt, ServiceMode, ServiceModeSignal, StreamReceipts, TransportUncertainty, TurnContext, TurnOperation, TypedSelection, } from './adapter.js';
2
+ export type { Change, ChangeBatch, Precondition, RoomMove, WrittenBy } from './change.js';
3
3
  export type { ChatDraft, ChatDraftSurface, ConversationAgent, ConversationEntry, ConversationOptions, ConversationState, ConversationSurface, ConversationView, RunningTurn, } from './conversation.js';
4
- export type { ChatDraftFile, FileDeclaration } from './file.js';
5
- export type { AppRoom, AppTypedSelection, BinaryFileSurface, ConnectionRefusal, ConnectionRefusalCode, HistoryQuery, MdRuntime, MdRuntimeOptions, PresentationSurface, RoomDraftSurface, RoomSchemas, SavedRoomDraft, SaveResult, } from './connection.js';
4
+ export type { ChosenFile, FileDeclaration } from './file.js';
5
+ export type { AppRoom, AppTypedSelection, BinaryFileSurface, ConnectionRefusal, ConnectionRefusalCode, HistoryQuery, MdRuntime, MdRuntimeOptions, PresentationSurface, RoomDraftSurface, RoomSchemas, SavedParts, SavedRoomDraft, SaveResult, } from './connection.js';
6
6
  export type { Observation } from './observation.js';
7
- export type { BinaryAnswer, CallResult, Failure, HistoryAnswer, QueueEntry, Submission, } from './outcome.js';
7
+ export type { BinaryAnswer, BinaryLinkAnswer, CallResult, Failure, HistoryAnswer, Offline, QueueEntry, Resolution, Submission, } from './outcome.js';
8
8
  export type { BinaryFileRecord, BinaryReference } from './binary.js';
9
9
  export type { RuntimeError } from './failure.js';
10
- export type { ChangedPart, FieldValue, ReturnReason, RoomDraft, RoomDraftCreation, RoomDraftParts, RoomDraftWrite, } from './room-draft.js';
10
+ export type { ChangedPart, FieldValue, ReturnReason, RoomDraft, RoomDraftCreation, RoomDraftParts, RoomDraftWrite, TextParts, } from './room-draft.js';
11
11
  export type { SaveRefusal } from './save.js';
12
- export type { DocumentHit, DocumentPart, MessageHit, SearchRequest, SearchResult, } from './search.js';
12
+ export type { DocumentHit, DocumentPart, MessageHit, PendingConversation, SearchCoverage, SearchHits, SearchPending, SearchRequest, SearchResult, SearchUndeclared, } from './search.js';
13
13
  export { departure } from './change.js';
14
+ export { partsAfter } from './room-draft.js';
15
+ export { cutName, nameFrom, transliterated } from './name.js';
16
+ export { SESSION_STARTED } from './conversation.js';
14
17
  export { changeBatchIdentity } from './identity.js';
18
+ export { ROW_WEIGHT, stepped } from './turn.js';
19
+ export { entriesIn, patching, sortedKeys } from './shared.js';
15
20
  export { attempts, identities, intentOf, type Answered, type Attempt, type Attempts, type Identities, } from './attempt.js';
16
21
  export { expectedList, expecting, type ExpectedOf, type Expecting } from './expectation.js';
17
- export type { RuntimeShell } from './durability.js';
22
+ export type { RuntimeShell, StorageEstimate } from './durability.js';
23
+ export type { CapacityCause, CodeAvailability, ConnectionAvailability, ConversationCoverage, Durability, HouseOutcome, Persistence, Readiness, ReadinessStatus, RefusedRoom, RoomCoverage, RoomPreparation, SearchObligation, TargetCoverage, } from './readiness.js';
18
24
  export type { AttentionEntry, SyncStatus } from './status.js';
19
- export type { Backlink, Direction, DocumentQuery, DocumentResult, Filter, GroupQuery, GroupResult, Key, LocalQuery, OrderOptions, Predicate, QueryDocument, QueryGroup, QueryResult, Related, Select, Value, Where, } from './query.js';
25
+ export type { Awaits, Backlink, CoveredRoom, Direction, DocumentQuery, DocumentResult, Filter, GroupQuery, GroupResult, Key, LocalQuery, OrderOptions, PendingResult, PendingRoom, Predicate, QueryCoverage, QueryDocument, QueryGroup, QueryResult, QueryRows, Related, Select, Value, Where, } from './query.js';
20
26
  export type { MdType, ModelIdentity, ModelSnapshot, ModelState, ModelResult, TypesResult, ValidationReceipt, } from './model.js';
21
27
  export type { OperationScopes, ReplicaAdmission, ScopedRefusal } from './adapter.js';
22
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,4 +1,9 @@
1
1
  export { departure } from './change.js';
2
+ export { partsAfter } from './room-draft.js';
3
+ export { cutName, nameFrom, transliterated } from './name.js';
4
+ export { SESSION_STARTED } from './conversation.js';
2
5
  export { changeBatchIdentity } from './identity.js';
6
+ export { ROW_WEIGHT, stepped } from './turn.js';
7
+ export { entriesIn, patching, sortedKeys } from './shared.js';
3
8
  export { attempts, identities, intentOf, } from './attempt.js';
4
9
  export { expectedList, expecting } from './expectation.js';
package/dist/live.d.ts ADDED
@@ -0,0 +1,22 @@
1
+ import type { ChangeSet } from './change-set.js';
2
+ import { type KeyedResult, type QueryMessage } from './observation.js';
3
+ import type { PendingResult, Plan, QueryCoverage } from './query.js';
4
+ import type { QueryRoom } from './tables.js';
5
+ export type Cover = {
6
+ coverage: QueryCoverage;
7
+ rooms: readonly QueryRoom[];
8
+ } | PendingResult;
9
+ export type Ran = KeyedResult & {
10
+ readonly current: () => boolean;
11
+ };
12
+ export type Run = (plan: Plan, cover: () => Cover) => Promise<Ran>;
13
+ type Listener = (message: QueryMessage) => void;
14
+ export type LiveQueries = {
15
+ touched(set: ChangeSet): void;
16
+ recover(): void;
17
+ watch(plan: Plan, identity: string, cover: () => Cover, deliver: Listener): () => void;
18
+ close(): void;
19
+ };
20
+ export declare function createLiveQueries(run: Run): LiveQueries;
21
+ export {};
22
+ //# sourceMappingURL=live.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../src/live.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAErE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,KAAK,GAAG;IAAE,QAAQ,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAA;CAAE,GAAG,aAAa,CAAC;AAE7F,MAAM,MAAM,GAAG,GAAG,WAAW,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAA;CAAE,CAAC;AAEpE,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAEnE,KAAK,QAAQ,GAAG,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;AAchD,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,OAAO,IAAI,IAAI,CAAC;IAChB,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,EAAE,OAAO,EAAE,QAAQ,GAAG,MAAM,IAAI,CAAC;IACvF,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAmCF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,WAAW,CAuFvD"}
package/dist/live.js ADDED
@@ -0,0 +1,123 @@
1
+ import { changeOf, digestOf, } from './observation.js';
2
+ import { roomOfKey } from './rows.js';
3
+ function narrowed(plan) {
4
+ return (plan.paths !== null &&
5
+ plan.hop === null &&
6
+ plan.backlinks === null &&
7
+ !(plan.shape.kind === 'documents' && plan.shape.backlinks));
8
+ }
9
+ function reads(plan, locator) {
10
+ if (plan.locked.includes(locator))
11
+ return false;
12
+ if (plan.rooms !== null && !plan.rooms.includes(locator))
13
+ return false;
14
+ if (plan.reach === null)
15
+ return true;
16
+ return (plan.reach.rooms.includes(locator) ||
17
+ plan.reach.documents.some((document) => roomOfKey(document) === locator));
18
+ }
19
+ function affected(plan, set) {
20
+ if (set.rooms.some((locator) => reads(plan, locator)))
21
+ return true;
22
+ const paths = narrowed(plan) ? new Set(plan.paths) : null;
23
+ return set.documents.some(({ locator, path }) => reads(plan, locator) && (paths === null || path === null || paths.has(path)));
24
+ }
25
+ function shown(entry) {
26
+ const cover = entry.cover();
27
+ return JSON.stringify('pending' in cover ? cover : cover.coverage);
28
+ }
29
+ export function createLiveQueries(run) {
30
+ const entries = new Map();
31
+ let closed = false;
32
+ function deliver(entry, next) {
33
+ const previous = entry.digest;
34
+ entry.digest = digestOf(next);
35
+ entry.covered = JSON.stringify('pending' in next.result ? next.result : next.result.coverage);
36
+ const change = previous === undefined ? null : changeOf(previous, next);
37
+ if (change !== null) {
38
+ for (const listener of entry.ready)
39
+ listener(change);
40
+ }
41
+ for (const listener of entry.fresh) {
42
+ entry.ready.add(listener);
43
+ listener(next);
44
+ }
45
+ entry.fresh.clear();
46
+ }
47
+ function schedule(entry) {
48
+ if (closed || entry.listeners.size === 0)
49
+ return;
50
+ if (entry.running) {
51
+ entry.dirty = true;
52
+ return;
53
+ }
54
+ entry.running = true;
55
+ void (async () => {
56
+ try {
57
+ for (;;) {
58
+ entry.dirty = false;
59
+ const { current, ...next } = await run(entry.plan, entry.cover);
60
+ if (closed || entry.listeners.size === 0)
61
+ return;
62
+ deliver(entry, next);
63
+ if (!(entry.dirty && !current()) && shown(entry) === entry.covered)
64
+ break;
65
+ }
66
+ }
67
+ catch {
68
+ entry.dirty = false;
69
+ }
70
+ finally {
71
+ entry.running = false;
72
+ }
73
+ })();
74
+ }
75
+ return {
76
+ touched(set) {
77
+ for (const entry of entries.values()) {
78
+ if (affected(entry.plan, set))
79
+ schedule(entry);
80
+ }
81
+ },
82
+ recover() {
83
+ for (const entry of entries.values()) {
84
+ if (entry.running)
85
+ continue;
86
+ if (entry.digest === undefined || shown(entry) !== entry.covered)
87
+ schedule(entry);
88
+ }
89
+ },
90
+ watch(plan, identity, cover, listener) {
91
+ let entry = entries.get(identity);
92
+ if (entry === undefined) {
93
+ entry = {
94
+ plan,
95
+ cover,
96
+ listeners: new Set(),
97
+ fresh: new Set(),
98
+ ready: new Set(),
99
+ digest: undefined,
100
+ covered: '',
101
+ dirty: false,
102
+ running: false,
103
+ };
104
+ entries.set(identity, entry);
105
+ }
106
+ const held = entry;
107
+ held.listeners.add(listener);
108
+ held.fresh.add(listener);
109
+ schedule(held);
110
+ return () => {
111
+ held.listeners.delete(listener);
112
+ held.fresh.delete(listener);
113
+ held.ready.delete(listener);
114
+ if (held.listeners.size === 0 && entries.get(identity) === held)
115
+ entries.delete(identity);
116
+ };
117
+ },
118
+ close() {
119
+ closed = true;
120
+ entries.clear();
121
+ },
122
+ };
123
+ }
package/dist/memory.d.ts CHANGED
@@ -1,12 +1,14 @@
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 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 DiscoveryScope, type DiscoveredRoom, type HeadChange, type ListedConversation, type Member, type ProviderLimit, type Retention, type ServiceMode } from './adapter.js';
3
3
  export type MemoryRoom = DiscoveredRoom & {
4
4
  model?: ModelResult;
5
5
  selectionModel?: ModelResult;
6
6
  documents?: Readonly<Record<string, string>>;
7
7
  revisions?: Readonly<Record<string, string>>;
8
+ fileIds?: Readonly<Record<string, string>>;
8
9
  changes?: Readonly<Record<string, HeadChange>>;
9
10
  binaryFiles?: Readonly<Record<string, BinaryFile>>;
11
+ folders?: readonly string[];
10
12
  blobs?: Readonly<Record<string, Blob>>;
11
13
  };
12
14
  export type MemoryConversation = {
@@ -25,18 +27,23 @@ export type MemoryAdapterOptions = {
25
27
  retention?: Retention;
26
28
  member?: Member;
27
29
  unopened?: boolean;
30
+ exhaustiveDiscovery?: true;
28
31
  };
29
32
  export type MemoryAdapter = Adapter & {
30
33
  setRooms(rooms: readonly MemoryRoom[]): void;
31
34
  setConversations(conversations: readonly MemoryConversation[]): void;
32
35
  script(operation: keyof Adapter, answer: unknown): void;
33
36
  open(): void;
34
- close(revoked?: boolean): void;
37
+ close(closing?: {
38
+ revoked?: boolean;
39
+ lost?: boolean;
40
+ }): void;
35
41
  expire(locators: readonly string[]): void;
36
42
  notifyRoomVersion(notification: {
37
43
  locator: string;
38
44
  roomVersion: string;
39
45
  }): void;
46
+ notifyAuthorityChanged(scope?: DiscoveryScope): void;
40
47
  notifyConversation(event: ConversationEvent): void;
41
48
  notifyServiceMode(mode: ServiceMode): void;
42
49
  heldRooms(): readonly string[];
@@ -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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"}